You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by ra...@apache.org on 2019/01/16 13:35:57 UTC

[sling-org-apache-sling-scripting-sightly-compiler] branch master updated: SLING-8218 - Optimise the list iteration step conditions generated by the HTL compiler

This is an automated email from the ASF dual-hosted git repository.

radu pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-scripting-sightly-compiler.git


The following commit(s) were added to refs/heads/master by this push:
     new 43c3b4c  SLING-8218 - Optimise the list iteration step conditions generated by the HTL compiler
43c3b4c is described below

commit 43c3b4c0c64f261c1bb40b79a4cadaea585819f7
Author: Radu Cotescu <ra...@apache.org>
AuthorDate: Wed Jan 16 14:35:40 2019 +0100

    SLING-8218 - Optimise the list iteration step conditions generated by the HTL compiler
---
 .../org/apache/sling/scripting/sightly/impl/plugin/ListPlugin.java  | 6 ++++++
 .../apache/sling/scripting/sightly/impl/plugin/RepeatPlugin.java    | 6 ++++++
 2 files changed, 12 insertions(+)

diff --git a/src/main/java/org/apache/sling/scripting/sightly/impl/plugin/ListPlugin.java b/src/main/java/org/apache/sling/scripting/sightly/impl/plugin/ListPlugin.java
index a613a69..d48aa85 100644
--- a/src/main/java/org/apache/sling/scripting/sightly/impl/plugin/ListPlugin.java
+++ b/src/main/java/org/apache/sling/scripting/sightly/impl/plugin/ListPlugin.java
@@ -54,6 +54,9 @@ public class ListPlugin extends AbstractRepeatPlugin {
             private String endVariable = compilerContext.generateVariable(END);
             private String validStartStepEnd = compilerContext.generateVariable("validStartStepEnd");
 
+            private boolean beginAtIndexZero = false;
+            private boolean stepOne = false;
+
             @Override
             public void beforeElement(PushStream stream, String tagName) {
                 stream.write(new VariableBinding.Start(listVariable, expression.getRoot()));
@@ -66,11 +69,13 @@ public class ListPlugin extends AbstractRepeatPlugin {
                 if (options.containsKey(BEGIN)) {
                     stream.write(new VariableBinding.Start(beginVariable, expression.getOptions().get(BEGIN)));
                 } else {
+                    beginAtIndexZero = true;
                     stream.write(new VariableBinding.Start(beginVariable, NumericConstant.ZERO));
                 }
                 if (options.containsKey(STEP)) {
                     stream.write(new VariableBinding.Start(stepVariable, expression.getOptions().get(STEP)));
                 } else {
+                    stepOne = true;
                     stream.write(new VariableBinding.Start(stepVariable, NumericConstant.ONE));
                 }
                 if (options.containsKey(END)) {
@@ -104,6 +109,7 @@ public class ListPlugin extends AbstractRepeatPlugin {
                 stream.write(new VariableBinding.Start(loopStatusVar, buildStatusObj(indexVariable, collectionSizeVar)));
                 String stepConditionVariable = compilerContext.generateVariable("stepCondition");
                 stream.write(new VariableBinding.Start(stepConditionVariable,
+                        beginAtIndexZero && stepOne ? new NumericConstant(0) :
                         new BinaryOperation(
                                 BinaryOperator.REM,
                                 new BinaryOperation(
diff --git a/src/main/java/org/apache/sling/scripting/sightly/impl/plugin/RepeatPlugin.java b/src/main/java/org/apache/sling/scripting/sightly/impl/plugin/RepeatPlugin.java
index ff8d41d..f9c9452 100644
--- a/src/main/java/org/apache/sling/scripting/sightly/impl/plugin/RepeatPlugin.java
+++ b/src/main/java/org/apache/sling/scripting/sightly/impl/plugin/RepeatPlugin.java
@@ -57,6 +57,9 @@ public class RepeatPlugin extends AbstractRepeatPlugin {
             private String endVariable = compilerContext.generateVariable(END);
             private String validStartStepEnd = compilerContext.generateVariable("validStartStepEnd");
 
+            private boolean beginAtIndexZero = false;
+            private boolean stepOne = false;
+
             @Override
             public void beforeElement(PushStream stream, String tagName) {
                 stream.write(new VariableBinding.Start(listVariable, expression.getRoot()));
@@ -69,11 +72,13 @@ public class RepeatPlugin extends AbstractRepeatPlugin {
                 if (options.containsKey(BEGIN)) {
                     stream.write(new VariableBinding.Start(beginVariable, expression.getOptions().get(BEGIN)));
                 } else {
+                    beginAtIndexZero = true;
                     stream.write(new VariableBinding.Start(beginVariable, NumericConstant.ZERO));
                 }
                 if (options.containsKey(STEP)) {
                     stream.write(new VariableBinding.Start(stepVariable, expression.getOptions().get(STEP)));
                 } else {
+                    stepOne = true;
                     stream.write(new VariableBinding.Start(stepVariable, NumericConstant.ONE));
                 }
                 if (options.containsKey(END)) {
@@ -103,6 +108,7 @@ public class RepeatPlugin extends AbstractRepeatPlugin {
                 stream.write(new VariableBinding.Start(loopStatusVar, buildStatusObj(indexVariable, collectionSizeVar)));
                 String stepConditionVariable = compilerContext.generateVariable("stepCondition");
                 stream.write(new VariableBinding.Start(stepConditionVariable,
+                                beginAtIndexZero && stepOne ? new NumericConstant(0) :
                                 new BinaryOperation(
                                         BinaryOperator.REM,
                                         new BinaryOperation(