From a2ca7cb081ff10c03ba647e9265a668da795e506 Mon Sep 17 00:00:00 2001 From: Sergeev Viktor Date: Wed, 28 Jan 2026 01:48:19 +0300 Subject: [PATCH] ISSUES-86: fix arguments checked - fix comparison question symbol (it is a char, not a string) - fixed argument validation in 'partialApplyProcedure': null arguments are not passed to the unboundArgs array --- .../java/com/dashjoin/jsonata/Jsonata.java | 17 ++++++++++------ .../dashjoin/jsonata/CustomFunctionTest.java | 20 +++++++++++++++++++ 2 files changed, 31 insertions(+), 6 deletions(-) diff --git a/src/main/java/com/dashjoin/jsonata/Jsonata.java b/src/main/java/com/dashjoin/jsonata/Jsonata.java index 5cc6a7e..b66fe47 100644 --- a/src/main/java/com/dashjoin/jsonata/Jsonata.java +++ b/src/main/java/com/dashjoin/jsonata/Jsonata.java @@ -33,6 +33,7 @@ import java.util.List; import java.util.Map; import java.util.Map.Entry; +import java.util.Objects; import java.util.concurrent.Callable; import java.util.function.BiFunction; import java.util.function.Function; @@ -1821,7 +1822,7 @@ Object evaluateLambda(Symbol expr, Object input, Frame environment) { var evaluatedArgs = new ArrayList<>(); for(var ii = 0; ii < expr.arguments.size(); ii++) { var arg = expr.arguments.get(ii); - if (arg.type.equals("operator") && (arg.value.equals("?"))) { + if (arg.type.equals("operator") && Objects.equals('?', arg.value)) { evaluatedArgs.add(arg); } else { evaluatedArgs.add(/* await */ evaluate(arg, input, environment)); @@ -1901,7 +1902,7 @@ Object validateArguments(Object signature, Object args, Object context) { * @param {Array} args - Arguments * @returns {{lambda: boolean, input: *, environment: {bind, lookup}, arguments: Array, body: *}} Result of partially applied procedure */ - Object partialApplyProcedure(Symbol proc, List args) { + Object partialApplyProcedure(Symbol proc, List args) { // create a closure, bind the supplied parameters and return a Object that takes the remaining (?) parameters // Note Uli: if no env, bind to default env so the native functions can be found var env = createFrame(proc.environment!=null ? proc.environment : this.environment); @@ -1910,11 +1911,15 @@ Object partialApplyProcedure(Symbol proc, List args) { for (var param : proc.arguments) { // proc.arguments.forEach(Object (param, index) { Object arg = index