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 ff9f3b6e JEXL: fix parsing error caused by ternary and ns call in 
lambda;
ff9f3b6e is described below

commit ff9f3b6eaaa87314d0706b418945209b356af1e7
Author: henrib <hen...@apache.org>
AuthorDate: Mon Apr 15 19:19:40 2024 +0200

    JEXL: fix parsing error caused by ternary and ns call in lambda;
---
 .../org/apache/commons/jexl3/parser/Parser.jjt     |  1 +
 .../org/apache/commons/jexl3/Issues400Test.java    | 22 ++++++++++++++++++++++
 2 files changed, 23 insertions(+)

diff --git a/src/main/java/org/apache/commons/jexl3/parser/Parser.jjt 
b/src/main/java/org/apache/commons/jexl3/parser/Parser.jjt
index 7e3824b3..93e22d9e 100644
--- a/src/main/java/org/apache/commons/jexl3/parser/Parser.jjt
+++ b/src/main/java/org/apache/commons/jexl3/parser/Parser.jjt
@@ -399,6 +399,7 @@ void StatementNoVar() #void : {}
     | LOOKAHEAD(<BREAK>) Break()
     | LOOKAHEAD(<THROW>) ThrowStatement()
     | LOOKAHEAD(<TRY>) TryStatement()
+    | LOOKAHEAD(LambdaLookahead()) Lambda()
     | LOOKAHEAD(Expression()) ExpressionStatement()
     | Block()
     | LOOKAHEAD(<VAR>, {!getFeatures().isLexical()} ) Var()
diff --git a/src/test/java/org/apache/commons/jexl3/Issues400Test.java 
b/src/test/java/org/apache/commons/jexl3/Issues400Test.java
index 249efeec..fb64b811 100644
--- a/src/test/java/org/apache/commons/jexl3/Issues400Test.java
+++ b/src/test/java/org/apache/commons/jexl3/Issues400Test.java
@@ -391,4 +391,26 @@ public class Issues400Test {
     Assert.assertEquals(42, result);
   }
 
+  public static class VinzContext extends MapContext {
+    public String member(String m, String u) {
+      return m + '.' + u;
+    }
+  }
+
+  @Test
+  public void testNamespaceVsTernary() {
+    VinzContext ctxt = new VinzContext();
+    ctxt.set("Users", "USERS");
+    final JexlEngine jexl = new 
JexlBuilder().safe(false).strict(true).silent(false).create();
+    JexlScript script = jexl.createScript("() -> {\n"
+            + "  var fn = (user) -> {\n"
+            + "     user ? user : member(Users, 'user');\n"
+            + "  }\n"
+            + "}");
+    Object r = script.execute(ctxt);
+    Assert.assertNotNull(r);
+    script = (JexlScript) r;
+    r = script.execute(ctxt);
+    Assert.assertEquals("USERS.user", r);
+  }
 }

Reply via email to