summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJon Bratseth <bratseth@oath.com>2018-02-17 16:16:03 +0100
committerJon Bratseth <bratseth@oath.com>2018-02-17 16:16:03 +0100
commit80f0982ad44485879cc98aeb6e7bde3bd6b3bbb3 (patch)
tree185b76b1910239747b04394883055eca8951be10
parent53f9c05823beb0fe9689b7d5dc110889d77c2aba (diff)
Only match given equal number of arguments
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/MapEvaluationTypeContext.java18
1 files changed, 4 insertions, 14 deletions
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/MapEvaluationTypeContext.java b/config-model/src/main/java/com/yahoo/searchdefinition/MapEvaluationTypeContext.java
index 6b8f1f64bb2..f31dba74e9e 100644
--- a/config-model/src/main/java/com/yahoo/searchdefinition/MapEvaluationTypeContext.java
+++ b/config-model/src/main/java/com/yahoo/searchdefinition/MapEvaluationTypeContext.java
@@ -127,17 +127,17 @@ public class MapEvaluationTypeContext extends FunctionReferenceContext implement
private Optional<ExpressionFunction> functionInvocation(Reference reference) {
if (reference.output() != null) return Optional.empty();
- return Optional.ofNullable(functions().get(reference.name()));
+ ExpressionFunction function = functions().get(reference.name());
+ if (function == null) return Optional.empty();
+ if (function.arguments().size() != reference.arguments().size()) return Optional.empty();
+ return Optional.of(function);
}
/** Binds the given list of formal arguments to their actual values */
private Map<String, String> bind(List<String> formalArguments,
Arguments invocationArguments) {
- // TODO: What is our position on argument overloading/argument count differences?
Map<String, String> bindings = new HashMap<>(formalArguments.size());
for (int i = 0; i < formalArguments.size(); i++) {
- // ensureIsIdentifier(invocationArguments.expressions().get(i),
- // "Argument " + i + " (" + formalArguments.get(i) + ")" );
String identifier = invocationArguments.expressions().get(i).toString();
identifier = super.bindings.getOrDefault(identifier, identifier);
bindings.put(formalArguments.get(i), identifier);
@@ -145,16 +145,6 @@ public class MapEvaluationTypeContext extends FunctionReferenceContext implement
return bindings;
}
- private void ensureIsIdentifier(ExpressionNode expression, String description) {
- if (expression instanceof NameNode) return;
- if (expression instanceof ReferenceNode) {
- ReferenceNode referenceExpression = (ReferenceNode)expression;
- if (referenceExpression.getArguments().isEmpty() && referenceExpression.getOutput() == null)
- return;
- }
- throw new IllegalArgumentException(description + " must be an identifier but is '" + expression + "'");
- }
-
public Map<Reference, TensorType> featureTypes() {
return Collections.unmodifiableMap(featureTypes);
}