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(