You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by he...@apache.org on 2022/01/26 17:59:41 UTC
[commons-jexl] branch master updated: JEXL-358: correct closure evaluator; - add test;
This is an automated email from the ASF dual-hosted git repository.
henrib pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/commons-jexl.git
The following commit(s) were added to refs/heads/master by this push:
new 0e18632 JEXL-358: correct closure evaluator; - add test;
0e18632 is described below
commit 0e186325b2ee03dcc3e5d96aafff1f70b276ccd6
Author: henrib <he...@apache.org>
AuthorDate: Wed Jan 26 18:59:35 2022 +0100
JEXL-358: correct closure evaluator;
- add test;
---
.../apache/commons/jexl3/internal/Interpreter.java | 9 +++++++-
.../java/org/apache/commons/jexl3/LambdaTest.java | 24 ++++++++++++++++++++++
2 files changed, 32 insertions(+), 1 deletion(-)
diff --git a/src/main/java/org/apache/commons/jexl3/internal/Interpreter.java b/src/main/java/org/apache/commons/jexl3/internal/Interpreter.java
index 9d262db..fbd47a4 100644
--- a/src/main/java/org/apache/commons/jexl3/internal/Interpreter.java
+++ b/src/main/java/org/apache/commons/jexl3/internal/Interpreter.java
@@ -1005,9 +1005,16 @@ public class Interpreter extends InterpreterBase {
*/
protected Object runClosure(final Closure closure, final Object data) {
final ASTJexlScript script = closure.getScript();
+ // if empty script, nothing to evaluate
+ final int numChildren = script.jjtGetNumChildren();
+ if (numChildren == 0) {
+ return null;
+ }
block = new LexicalFrame(frame, block).defineArgs();
try {
- final JexlNode body = script.jjtGetChild(script.jjtGetNumChildren() - 1);
+ final JexlNode body = script instanceof ASTJexlLambda
+ ? script.jjtGetChild(numChildren - 1)
+ : script;
return interpret(body);
} finally {
block = block.pop();
diff --git a/src/test/java/org/apache/commons/jexl3/LambdaTest.java b/src/test/java/org/apache/commons/jexl3/LambdaTest.java
index b696b31..328e89b 100644
--- a/src/test/java/org/apache/commons/jexl3/LambdaTest.java
+++ b/src/test/java/org/apache/commons/jexl3/LambdaTest.java
@@ -298,6 +298,30 @@ public class LambdaTest extends JexlTestCase {
}
@Test
+ public void testCurry4() throws Exception {
+ final JexlEngine jexl = createEngine();
+ JexlScript script;
+ Object result;
+
+ final JexlScript base = jexl.createScript("(x, y, z)->{ x + y + z }");
+ script = base.curry(5);
+ result = script.execute(null, 15, 22);
+ Assert.assertEquals(42, result);
+ }
+
+ @Test
+ public void testCurry5() throws Exception {
+ final JexlEngine jexl = createEngine();
+ JexlScript script;
+ Object result;
+
+ final JexlScript base = jexl.createScript("var t = x + y + z; return t", "x", "y", "z");
+ script = base.curry(5);
+ result = script.execute(null, 15, 22);
+ Assert.assertEquals(42, result);
+ }
+
+ @Test
public void test270() throws Exception {
final JexlEngine jexl = createEngine();
final JexlScript base = jexl.createScript("(x, y, z)->{ x + y + z }");