summaryrefslogtreecommitdiffstats
path: root/indexinglanguage
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2018-09-18 10:01:08 +0200
committerHenning Baldersheim <balder@yahoo-inc.com>2018-10-16 12:31:50 +0200
commita957297facc0f6ed9e613245ffe2d216168039b2 (patch)
tree943837f1d055671d57389c209e8cd9948bbbc2e1 /indexinglanguage
parent2cc64e617ff11f763d9fa165b37d19df0ced4114 (diff)
Compute the type generated by the Expression once.
Diffstat (limited to 'indexinglanguage')
-rw-r--r--indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ScriptExpression.java16
1 files changed, 16 insertions, 0 deletions
diff --git a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ScriptExpression.java b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ScriptExpression.java
index bcf655fd218..4843caaccf7 100644
--- a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ScriptExpression.java
+++ b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ScriptExpression.java
@@ -19,16 +19,21 @@ import java.util.Iterator;
*/
public class ScriptExpression extends ExpressionList<StatementExpression> {
+ private final DataType inputType;
+
public ScriptExpression() {
super();
+ inputType = resolveInputTypeAndcatch();
}
public ScriptExpression(StatementExpression... lst) {
super(Arrays.asList(lst));
+ inputType = resolveInputTypeAndcatch();
}
public ScriptExpression(Collection<? extends StatementExpression> lst) {
super(lst);
+ inputType = resolveInputTypeAndcatch();
}
@Override
@@ -51,6 +56,17 @@ public class ScriptExpression extends ExpressionList<StatementExpression> {
@Override
public DataType requiredInputType() {
+ return inputType != null ? inputType : resolveInputType();
+ }
+
+ private DataType resolveInputTypeAndcatch() {
+ try {
+ return resolveInputType();
+ } catch (VerificationException e) {
+ return null;
+ }
+ }
+ private DataType resolveInputType() {
DataType prev = null;
for (Expression exp : this) {
DataType next = exp.requiredInputType();