diff options
author | Jon Bratseth <bratseth@oath.com> | 2018-02-17 16:16:03 +0100 |
---|---|---|
committer | Jon Bratseth <bratseth@oath.com> | 2018-02-17 16:16:03 +0100 |
commit | 80f0982ad44485879cc98aeb6e7bde3bd6b3bbb3 (patch) | |
tree | 185b76b1910239747b04394883055eca8951be10 | |
parent | 53f9c05823beb0fe9689b7d5dc110889d77c2aba (diff) |
Only match given equal number of arguments
-rw-r--r-- | config-model/src/main/java/com/yahoo/searchdefinition/MapEvaluationTypeContext.java | 18 |
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); } |