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 <r...@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(