Skip to main content

[el-spec commits] [el-spec~source-code:78] Fix the grammar to allow multiple immediate lambda calls.

  • From: kchung@...
  • To: commits@...
  • Subject: [el-spec commits] [el-spec~source-code:78] Fix the grammar to allow multiple immediate lambda calls.
  • Date: Mon, 16 Apr 2012 17:43:15 +0000

Project:    el-spec
Repository: source-code
Revision:   78
Author:     kchung
Date:       2012-04-16 17:43:14 UTC
Link:       

Log Message:
------------
Fix the grammar to allow multiple immediate lambda calls.



Revisions:
----------
78


Modified Paths:
---------------
trunk/impl/src/main/java/com/sun/el/parser/ELParser.jjt
trunk/impl/src/main/java/com/sun/el/parser/ELParser.java
trunk/impl/src/test/java/org/glassfish/el/test/LambdaTest.java
trunk/impl/src/main/java/com/sun/el/Messages.properties
trunk/impl/src/main/java/com/sun/el/parser/AstLambdaExpression.java


Diffs:
------
Index: trunk/impl/src/test/java/org/glassfish/el/test/LambdaTest.java
===================================================================
--- trunk/impl/src/test/java/org/glassfish/el/test/LambdaTest.java      
(revision 77)
+++ trunk/impl/src/test/java/org/glassfish/el/test/LambdaTest.java      
(revision 78)
@@ -69,7 +69,7 @@
         ELProcessor elp = new ELProcessor();
         testExpr(elp, "Lambda Lambda", "f = ()->y->y+1; f()(100)", 101L);
         testExpr(elp, "Lambda Lambda 2", "f = (x)->(tem=x; y->tem+y); 
f(1)(100)", 101L);
-//        testExpr(elp, "Lambda Lambda 3", "(()->y->y+1)()(100)", 101L);
+        testExpr(elp, "Lambda Lambda 3", "(()->y->y+1)()(100)", 101L);
         testExpr(elp, "Lambda Lambda 4", "(x->(y->x+y)(1))(100)", 101L);
     }
 }
Index: trunk/impl/src/main/java/com/sun/el/Messages.properties
===================================================================
--- trunk/impl/src/main/java/com/sun/el/Messages.properties     (revision 77)
+++ trunk/impl/src/main/java/com/sun/el/Messages.properties     (revision 78)
@@ -96,3 +96,6 @@
 
 # AstType
 error.class.notfound=The specified class ''{0}'' not found
+
+# AstLambdaExpression
+error.lambda.call=A Lambda expression must return another Lambda expression 
in this syntax
Index: trunk/impl/src/main/java/com/sun/el/parser/AstLambdaExpression.java
===================================================================
--- trunk/impl/src/main/java/com/sun/el/parser/AstLambdaExpression.java 
(revision 77)
+++ trunk/impl/src/main/java/com/sun/el/parser/AstLambdaExpression.java 
(revision 78)
@@ -46,6 +46,7 @@
 import javax.el.LambdaExpression;
 import com.sun.el.lang.EvaluationContext;
 import com.sun.el.ValueExpressionImpl;
+import com.sun.el.util.MessageFactory;
 
 /**
  * @author Kin-man Chung
@@ -68,12 +69,23 @@
         List<String>parameters =
             ((AstLambdaParameters) this.children[0]).getParameters();
         LambdaExpression lambda = new LambdaExpression(parameters, expr);
-        if (this.jjtGetNumChildren() <= 2) {
+        if (this.children.length <= 2) {
             return lambda;
         }
 
         // There are arguments following the lambda exprn, invoke it now.
-        AstMethodArguments args = (AstMethodArguments) this.children[2];
-        return lambda.invoke(ctx, args.getParameters(ctx));
+        Object ret = null;
+        for (int i = 2; i < this.children.length; i++) {
+            if (ret != null) {
+                if (!(ret instanceof LambdaExpression)) {
+                    throw new ELException(MessageFactory.get(
+                        "error.lambda.call"));
+                }
+                lambda = (LambdaExpression) ret;
+            }
+            AstMethodArguments args = (AstMethodArguments) this.children[i];
+            ret = lambda.invoke(ctx, args.getParameters(ctx));
+        }
+        return ret;
     }
 }
Index: trunk/impl/src/main/java/com/sun/el/parser/ELParser.java
===================================================================
--- trunk/impl/src/main/java/com/sun/el/parser/ELParser.java    (revision 77)
+++ trunk/impl/src/main/java/com/sun/el/parser/ELParser.java    (revision 78)
@@ -1482,15 +1482,45 @@
       jj_consume_token(LPAREN);
       LambdaParameters();
       jj_consume_token(ARROW);
-      Choice();
+      if (jj_2_3(3)) {
+        LambdaExpression();
+      } else {
+        switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+        case START_MAP:
+        case INTEGER_LITERAL:
+        case FLOATING_POINT_LITERAL:
+        case STRING_LITERAL:
+        case TRUE:
+        case FALSE:
+        case NULL:
+        case LPAREN:
+        case LBRACK:
+        case NOT0:
+        case NOT1:
+        case EMPTY:
+        case MINUS:
+        case TYPE:
+        case IDENTIFIER:
+          Choice();
+          break;
+        default:
+          jj_la1[40] = jj_gen;
+          jj_consume_token(-1);
+          throw new ParseException();
+        }
+      }
       jj_consume_token(RPAREN);
-      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
-      case LPAREN:
+      label_13:
+      while (true) {
+        switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+        case LPAREN:
+          ;
+          break;
+        default:
+          jj_la1[41] = jj_gen;
+          break label_13;
+        }
         MethodArguments();
-        break;
-      default:
-        jj_la1[40] = jj_gen;
-        ;
       }
     } catch (Throwable jjte000) {
       if (jjtc000) {
@@ -1518,7 +1548,7 @@
  * For Grouped Operations, Identifiers, and Functions
  */
   final public void NonLiteral() throws ParseException {
-    if (jj_2_3(4)) {
+    if (jj_2_4(4)) {
       LambdaExpressionOrCall();
     } else {
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
@@ -1528,8 +1558,8 @@
         jj_consume_token(RPAREN);
         break;
       default:
-        jj_la1[41] = jj_gen;
-        if (jj_2_4(4)) {
+        jj_la1[42] = jj_gen;
+        if (jj_2_5(4)) {
           Function();
         } else {
           switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
@@ -1546,7 +1576,7 @@
             ListData();
             break;
           default:
-            jj_la1[42] = jj_gen;
+            jj_la1[43] = jj_gen;
             jj_consume_token(-1);
             throw new ParseException();
           }
@@ -1579,22 +1609,22 @@
       case TYPE:
       case IDENTIFIER:
         MapEntry();
-        label_13:
+        label_14:
         while (true) {
           switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
           case COMMA:
             ;
             break;
           default:
-            jj_la1[43] = jj_gen;
-            break label_13;
+            jj_la1[44] = jj_gen;
+            break label_14;
           }
           jj_consume_token(COMMA);
           MapEntry();
         }
         break;
       default:
-        jj_la1[44] = jj_gen;
+        jj_la1[45] = jj_gen;
         ;
       }
       jj_consume_token(RCURL);
@@ -1632,7 +1662,7 @@
         Expression();
         break;
       default:
-        jj_la1[45] = jj_gen;
+        jj_la1[46] = jj_gen;
         ;
       }
     } catch (Throwable jjte000) {
@@ -1680,22 +1710,22 @@
       case TYPE:
       case IDENTIFIER:
         Expression();
-        label_14:
+        label_15:
         while (true) {
           switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
           case COMMA:
             ;
             break;
           default:
-            jj_la1[46] = jj_gen;
-            break label_14;
+            jj_la1[47] = jj_gen;
+            break label_15;
           }
           jj_consume_token(COMMA);
           Expression();
         }
         break;
       default:
-        jj_la1[47] = jj_gen;
+        jj_la1[48] = jj_gen;
         ;
       }
       jj_consume_token(RBRACK);
@@ -1734,15 +1764,15 @@
       jj_consume_token(LPAREN);
       t = jj_consume_token(IDENTIFIER);
                                         buffer.append(t.image);
-      label_15:
+      label_16:
       while (true) {
         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
         case DOT:
           ;
           break;
         default:
-          jj_la1[48] = jj_gen;
-          break label_15;
+          jj_la1[49] = jj_gen;
+          break label_16;
         }
         jj_consume_token(DOT);
         t = jj_consume_token(IDENTIFIER);
@@ -1755,7 +1785,7 @@
         MethodArguments();
         break;
       default:
-        jj_la1[49] = jj_gen;
+        jj_la1[50] = jj_gen;
         ;
       }
     } catch (Throwable jjte000) {
@@ -1818,7 +1848,7 @@
         t1 = jj_consume_token(IDENTIFIER);
         break;
       default:
-        jj_la1[50] = jj_gen;
+        jj_la1[51] = jj_gen;
         ;
       }
                 if (t1 != null) {
@@ -1827,7 +1857,7 @@
                 } else {
                         jjtn000.setLocalName(t0.image);
                 }
-      label_16:
+      label_17:
       while (true) {
         MethodArguments();
         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
@@ -1835,8 +1865,8 @@
           ;
           break;
         default:
-          jj_la1[51] = jj_gen;
-          break label_16;
+          jj_la1[52] = jj_gen;
+          break label_17;
         }
       }
     } catch (Throwable jjte000) {
@@ -1883,7 +1913,7 @@
       Null();
       break;
     default:
-      jj_la1[52] = jj_gen;
+      jj_la1[53] = jj_gen;
       jj_consume_token(-1);
       throw new ParseException();
     }
@@ -1920,7 +1950,7 @@
       }
       break;
     default:
-      jj_la1[53] = jj_gen;
+      jj_la1[54] = jj_gen;
       jj_consume_token(-1);
       throw new ParseException();
     }
@@ -2035,129 +2065,136 @@
     finally { jj_save(3, xla); }
   }
 
-  private boolean jj_3R_87() {
+  private boolean jj_2_5(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    try { return !jj_3_5(); }
+    catch(LookaheadSuccess ls) { return true; }
+    finally { jj_save(4, xla); }
+  }
+
+  private boolean jj_3R_92() {
     if (jj_scan_token(LBRACK)) return true;
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3R_103()) jj_scanpos = xsp;
+    if (jj_3R_105()) jj_scanpos = xsp;
     if (jj_scan_token(RBRACK)) return true;
     return false;
   }
 
-  private boolean jj_3R_33() {
+  private boolean jj_3R_34() {
     if (jj_scan_token(COMMA)) return true;
     return false;
   }
 
-  private boolean jj_3R_27() {
-    if (jj_3R_31()) return true;
+  private boolean jj_3R_32() {
+    if (jj_3R_35()) return true;
     Token xsp;
     while (true) {
       xsp = jj_scanpos;
-      if (jj_3R_52()) { jj_scanpos = xsp; break; }
+      if (jj_3R_50()) { jj_scanpos = xsp; break; }
     }
     return false;
   }
 
-  private boolean jj_3R_47() {
-    if (jj_scan_token(QUESTIONMARK)) return true;
+  private boolean jj_3R_106() {
+    if (jj_3R_36()) return true;
     return false;
   }
 
   private boolean jj_3R_104() {
-    if (jj_3R_35()) return true;
+    if (jj_3R_106()) return true;
     return false;
   }
 
-  private boolean jj_3R_102() {
-    if (jj_3R_104()) return true;
+  private boolean jj_3R_48() {
+    if (jj_scan_token(QUESTIONMARK)) return true;
     return false;
   }
 
-  private boolean jj_3R_22() {
-    if (jj_3R_27()) return true;
+  private boolean jj_3R_28() {
+    if (jj_3R_32()) return true;
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3R_47()) jj_scanpos = xsp;
+    if (jj_3R_48()) jj_scanpos = xsp;
     return false;
   }
 
-  private boolean jj_3R_78() {
-    if (jj_3R_87()) return true;
+  private boolean jj_3R_81() {
+    if (jj_3R_92()) return true;
     return false;
   }
 
-  private boolean jj_3R_86() {
+  private boolean jj_3R_91() {
     if (jj_scan_token(START_MAP)) return true;
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3R_102()) jj_scanpos = xsp;
+    if (jj_3R_104()) jj_scanpos = xsp;
     if (jj_scan_token(RCURL)) return true;
     return false;
   }
 
-  private boolean jj_3R_77() {
-    if (jj_3R_86()) return true;
+  private boolean jj_3R_80() {
+    if (jj_3R_91()) return true;
     return false;
   }
 
-  private boolean jj_3R_76() {
-    if (jj_3R_85()) return true;
+  private boolean jj_3R_79() {
+    if (jj_3R_90()) return true;
     return false;
   }
 
-  private boolean jj_3R_75() {
-    if (jj_3R_29()) return true;
+  private boolean jj_3R_78() {
+    if (jj_3R_30()) return true;
     return false;
   }
 
-  private boolean jj_3R_30() {
-    if (jj_3R_29()) return true;
+  private boolean jj_3_5() {
+    if (jj_3R_20()) return true;
+    return false;
+  }
+
+  private boolean jj_3R_31() {
+    if (jj_3R_30()) return true;
     Token xsp;
     while (true) {
       xsp = jj_scanpos;
-      if (jj_3R_33()) { jj_scanpos = xsp; break; }
+      if (jj_3R_34()) { jj_scanpos = xsp; break; }
     }
     return false;
   }
 
-  private boolean jj_3_4() {
-    if (jj_3R_19()) return true;
+  private boolean jj_3R_77() {
+    if (jj_scan_token(LPAREN)) return true;
+    if (jj_3R_36()) return true;
     return false;
   }
 
-  private boolean jj_3R_36() {
+  private boolean jj_3R_37() {
     if (jj_scan_token(COMMA)) return true;
     return false;
   }
 
-  private boolean jj_3R_74() {
-    if (jj_scan_token(LPAREN)) return true;
-    if (jj_3R_35()) return true;
+  private boolean jj_3_4() {
+    if (jj_3R_19()) return true;
     return false;
   }
 
-  private boolean jj_3_3() {
-    if (jj_3R_18()) return true;
-    return false;
-  }
-
-  private boolean jj_3R_63() {
+  private boolean jj_3R_70() {
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3_3()) {
+    if (jj_3_4()) {
     jj_scanpos = xsp;
-    if (jj_3R_74()) {
+    if (jj_3R_77()) {
     jj_scanpos = xsp;
-    if (jj_3_4()) {
+    if (jj_3_5()) {
     jj_scanpos = xsp;
-    if (jj_3R_75()) {
+    if (jj_3R_78()) {
     jj_scanpos = xsp;
-    if (jj_3R_76()) {
+    if (jj_3R_79()) {
     jj_scanpos = xsp;
-    if (jj_3R_77()) {
+    if (jj_3R_80()) {
     jj_scanpos = xsp;
-    if (jj_3R_78()) return true;
+    if (jj_3R_81()) return true;
     }
     }
     }
@@ -2167,242 +2204,252 @@
     return false;
   }
 
-  private boolean jj_3R_26() {
+  private boolean jj_3R_27() {
     if (jj_scan_token(LPAREN)) return true;
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3R_30()) jj_scanpos = xsp;
+    if (jj_3R_31()) jj_scanpos = xsp;
     if (jj_scan_token(RPAREN)) return true;
     return false;
   }
 
-  private boolean jj_3R_20() {
+  private boolean jj_3R_21() {
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3R_25()) {
+    if (jj_3R_26()) {
     jj_scanpos = xsp;
-    if (jj_3R_26()) return true;
+    if (jj_3R_27()) return true;
     }
     return false;
   }
 
-  private boolean jj_3R_25() {
-    if (jj_3R_29()) return true;
+  private boolean jj_3R_26() {
+    if (jj_3R_30()) return true;
     return false;
   }
 
-  private boolean jj_3R_45() {
+  private boolean jj_3R_46() {
     if (jj_scan_token(ASSIGN)) return true;
     return false;
   }
 
   private boolean jj_3_2() {
-    if (jj_3R_17()) return true;
+    if (jj_3R_18()) return true;
     return false;
   }
 
-  private boolean jj_3R_17() {
-    if (jj_3R_20()) return true;
+  private boolean jj_3_3() {
+    if (jj_3R_18()) return true;
+    return false;
+  }
+
+  private boolean jj_3R_18() {
+    if (jj_3R_21()) return true;
     if (jj_scan_token(ARROW)) return true;
     Token xsp;
     xsp = jj_scanpos;
     if (jj_3_2()) {
     jj_scanpos = xsp;
-    if (jj_3R_21()) return true;
+    if (jj_3R_22()) return true;
     }
     return false;
   }
 
-  private boolean jj_3R_32() {
-    if (jj_3R_35()) return true;
+  private boolean jj_3R_33() {
+    if (jj_3R_36()) return true;
     Token xsp;
     while (true) {
       xsp = jj_scanpos;
-      if (jj_3R_36()) { jj_scanpos = xsp; break; }
+      if (jj_3R_37()) { jj_scanpos = xsp; break; }
     }
     return false;
   }
 
-  private boolean jj_3R_41() {
+  private boolean jj_3R_42() {
     if (jj_scan_token(SEMICOLON)) return true;
     return false;
   }
 
-  private boolean jj_3R_18() {
+  private boolean jj_3R_19() {
     if (jj_scan_token(LPAREN)) return true;
-    if (jj_3R_20()) return true;
+    if (jj_3R_21()) return true;
     if (jj_scan_token(ARROW)) return true;
-    if (jj_3R_22()) return true;
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3_3()) {
+    jj_scanpos = xsp;
+    if (jj_3R_23()) return true;
+    }
     return false;
   }
 
-  private boolean jj_3R_43() {
-    if (jj_3R_22()) return true;
+  private boolean jj_3R_44() {
+    if (jj_3R_28()) return true;
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3R_45()) jj_scanpos = xsp;
+    if (jj_3R_46()) jj_scanpos = xsp;
     return false;
   }
 
-  private boolean jj_3R_40() {
+  private boolean jj_3R_41() {
     Token xsp;
     xsp = jj_scanpos;
     if (jj_3_1()) {
     jj_scanpos = xsp;
-    if (jj_3R_43()) return true;
+    if (jj_3R_44()) return true;
     }
     return false;
   }
 
   private boolean jj_3_1() {
-    if (jj_3R_17()) return true;
+    if (jj_3R_18()) return true;
     return false;
   }
 
-  private boolean jj_3R_28() {
+  private boolean jj_3R_29() {
     if (jj_scan_token(LPAREN)) return true;
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3R_32()) jj_scanpos = xsp;
+    if (jj_3R_33()) jj_scanpos = xsp;
     if (jj_scan_token(RPAREN)) return true;
     return false;
   }
 
-  private boolean jj_3R_38() {
-    if (jj_3R_40()) return true;
+  private boolean jj_3R_39() {
+    if (jj_3R_41()) return true;
     Token xsp;
     while (true) {
       xsp = jj_scanpos;
-      if (jj_3R_41()) { jj_scanpos = xsp; break; }
+      if (jj_3R_42()) { jj_scanpos = xsp; break; }
     }
     return false;
   }
 
-  private boolean jj_3R_101() {
+  private boolean jj_3R_103() {
     if (jj_scan_token(LBRACK)) return true;
     return false;
   }
 
-  private boolean jj_3R_35() {
-    if (jj_3R_38()) return true;
+  private boolean jj_3R_36() {
+    if (jj_3R_39()) return true;
     return false;
   }
 
-  private boolean jj_3R_99() {
-    if (jj_3R_101()) return true;
+  private boolean jj_3R_101() {
+    if (jj_3R_103()) return true;
     return false;
   }
 
-  private boolean jj_3R_100() {
+  private boolean jj_3R_102() {
     if (jj_scan_token(DOT)) return true;
     return false;
   }
 
-  private boolean jj_3R_98() {
-    if (jj_3R_100()) return true;
+  private boolean jj_3R_100() {
+    if (jj_3R_102()) return true;
     return false;
   }
 
-  private boolean jj_3R_97() {
+  private boolean jj_3R_99() {
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3R_98()) {
+    if (jj_3R_100()) {
     jj_scanpos = xsp;
-    if (jj_3R_99()) return true;
+    if (jj_3R_101()) return true;
     }
     return false;
   }
 
-  private boolean jj_3R_96() {
-    if (jj_3R_97()) return true;
+  private boolean jj_3R_98() {
+    if (jj_3R_99()) return true;
     return false;
   }
 
-  private boolean jj_3R_58() {
-    if (jj_3R_63()) return true;
+  private boolean jj_3R_63() {
+    if (jj_3R_70()) return true;
     return false;
   }
 
-  private boolean jj_3R_55() {
+  private boolean jj_3R_58() {
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3R_57()) {
+    if (jj_3R_62()) {
     jj_scanpos = xsp;
-    if (jj_3R_58()) return true;
+    if (jj_3R_63()) return true;
     }
     return false;
   }
 
-  private boolean jj_3R_57() {
-    if (jj_3R_62()) return true;
+  private boolean jj_3R_62() {
+    if (jj_3R_69()) return true;
     return false;
   }
 
-  private boolean jj_3R_84() {
+  private boolean jj_3R_89() {
     if (jj_scan_token(NULL)) return true;
     return false;
   }
 
-  private boolean jj_3R_53() {
-    if (jj_3R_55()) return true;
+  private boolean jj_3R_56() {
+    if (jj_3R_58()) return true;
     Token xsp;
     while (true) {
       xsp = jj_scanpos;
-      if (jj_3R_96()) { jj_scanpos = xsp; break; }
+      if (jj_3R_98()) { jj_scanpos = xsp; break; }
     }
     return false;
   }
 
-  private boolean jj_3R_51() {
-    if (jj_3R_53()) return true;
+  private boolean jj_3R_54() {
+    if (jj_3R_56()) return true;
     return false;
   }
 
-  private boolean jj_3R_50() {
-    if (jj_scan_token(EMPTY)) return true;
-    if (jj_3R_46()) return true;
+  private boolean jj_3R_88() {
+    if (jj_scan_token(STRING_LITERAL)) return true;
     return false;
   }
 
-  private boolean jj_3R_83() {
-    if (jj_scan_token(STRING_LITERAL)) return true;
+  private boolean jj_3R_53() {
+    if (jj_scan_token(EMPTY)) return true;
+    if (jj_3R_49()) return true;
     return false;
   }
 
-  private boolean jj_3R_49() {
+  private boolean jj_3R_52() {
     Token xsp;
     xsp = jj_scanpos;
     if (jj_scan_token(39)) {
     jj_scanpos = xsp;
     if (jj_scan_token(40)) return true;
     }
-    if (jj_3R_46()) return true;
+    if (jj_3R_49()) return true;
     return false;
   }
 
-  private boolean jj_3R_46() {
+  private boolean jj_3R_49() {
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3R_48()) {
+    if (jj_3R_51()) {
     jj_scanpos = xsp;
-    if (jj_3R_49()) {
+    if (jj_3R_52()) {
     jj_scanpos = xsp;
-    if (jj_3R_50()) {
+    if (jj_3R_53()) {
     jj_scanpos = xsp;
-    if (jj_3R_51()) return true;
+    if (jj_3R_54()) return true;
     }
     }
     }
     return false;
   }
 
-  private boolean jj_3R_48() {
+  private boolean jj_3R_51() {
     if (jj_scan_token(MINUS)) return true;
-    if (jj_3R_46()) return true;
+    if (jj_3R_49()) return true;
     return false;
   }
 
-  private boolean jj_3R_82() {
+  private boolean jj_3R_87() {
     if (jj_scan_token(INTEGER_LITERAL)) return true;
     return false;
   }
@@ -2427,12 +2474,17 @@
     return false;
   }
 
+  private boolean jj_3R_86() {
+    if (jj_scan_token(FLOATING_POINT_LITERAL)) return true;
+    return false;
+  }
+
   private boolean jj_3R_93() {
     if (jj_scan_token(MULT)) return true;
     return false;
   }
 
-  private boolean jj_3R_88() {
+  private boolean jj_3R_82() {
     Token xsp;
     xsp = jj_scanpos;
     if (jj_3R_93()) {
@@ -2445,93 +2497,88 @@
     return false;
   }
 
-  private boolean jj_3R_81() {
-    if (jj_scan_token(FLOATING_POINT_LITERAL)) return true;
-    return false;
-  }
-
-  private boolean jj_3R_92() {
+  private boolean jj_3R_97() {
     if (jj_scan_token(FALSE)) return true;
     return false;
   }
 
-  private boolean jj_3R_91() {
+  private boolean jj_3R_96() {
     if (jj_scan_token(TRUE)) return true;
     return false;
   }
 
-  private boolean jj_3R_44() {
-    if (jj_3R_46()) return true;
+  private boolean jj_3R_85() {
     Token xsp;
-    while (true) {
-      xsp = jj_scanpos;
-      if (jj_3R_88()) { jj_scanpos = xsp; break; }
+    xsp = jj_scanpos;
+    if (jj_3R_96()) {
+    jj_scanpos = xsp;
+    if (jj_3R_97()) return true;
     }
     return false;
   }
 
-  private boolean jj_3R_80() {
+  private boolean jj_3R_47() {
+    if (jj_3R_49()) return true;
     Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3R_91()) {
-    jj_scanpos = xsp;
-    if (jj_3R_92()) return true;
+    while (true) {
+      xsp = jj_scanpos;
+      if (jj_3R_82()) { jj_scanpos = xsp; break; }
     }
     return false;
   }
 
-  private boolean jj_3R_90() {
+  private boolean jj_3R_84() {
     if (jj_scan_token(MINUS)) return true;
     return false;
   }
 
-  private boolean jj_3R_89() {
-    if (jj_scan_token(PLUS)) return true;
-    return false;
-  }
-
-  private boolean jj_3R_79() {
+  private boolean jj_3R_71() {
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3R_89()) {
+    if (jj_3R_83()) {
     jj_scanpos = xsp;
-    if (jj_3R_90()) return true;
+    if (jj_3R_84()) return true;
     }
     return false;
   }
 
-  private boolean jj_3R_73() {
-    if (jj_3R_84()) return true;
+  private boolean jj_3R_83() {
+    if (jj_scan_token(PLUS)) return true;
     return false;
   }
 
-  private boolean jj_3R_72() {
-    if (jj_3R_83()) return true;
+  private boolean jj_3R_76() {
+    if (jj_3R_89()) return true;
     return false;
   }
 
-  private boolean jj_3R_71() {
-    if (jj_3R_82()) return true;
+  private boolean jj_3R_75() {
+    if (jj_3R_88()) return true;
     return false;
   }
 
-  private boolean jj_3R_70() {
-    if (jj_3R_81()) return true;
+  private boolean jj_3R_74() {
+    if (jj_3R_87()) return true;
     return false;
   }
 
-  private boolean jj_3R_62() {
+  private boolean jj_3R_73() {
+    if (jj_3R_86()) return true;
+    return false;
+  }
+
+  private boolean jj_3R_69() {
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3R_69()) {
+    if (jj_3R_72()) {
     jj_scanpos = xsp;
-    if (jj_3R_70()) {
+    if (jj_3R_73()) {
     jj_scanpos = xsp;
-    if (jj_3R_71()) {
+    if (jj_3R_74()) {
     jj_scanpos = xsp;
-    if (jj_3R_72()) {
+    if (jj_3R_75()) {
     jj_scanpos = xsp;
-    if (jj_3R_73()) return true;
+    if (jj_3R_76()) return true;
     }
     }
     }
@@ -2539,17 +2586,17 @@
     return false;
   }
 
-  private boolean jj_3R_69() {
-    if (jj_3R_80()) return true;
+  private boolean jj_3R_72() {
+    if (jj_3R_85()) return true;
     return false;
   }
 
-  private boolean jj_3R_42() {
-    if (jj_3R_44()) return true;
+  private boolean jj_3R_45() {
+    if (jj_3R_47()) return true;
     Token xsp;
     while (true) {
       xsp = jj_scanpos;
-      if (jj_3R_79()) { jj_scanpos = xsp; break; }
+      if (jj_3R_71()) { jj_scanpos = xsp; break; }
     }
     return false;
   }
@@ -2559,19 +2606,19 @@
     return false;
   }
 
-  private boolean jj_3R_23() {
+  private boolean jj_3R_24() {
     if (jj_scan_token(COLON)) return true;
     if (jj_scan_token(IDENTIFIER)) return true;
     return false;
   }
 
-  private boolean jj_3R_24() {
-    if (jj_3R_28()) return true;
+  private boolean jj_3R_25() {
+    if (jj_3R_29()) return true;
     return false;
   }
 
-  private boolean jj_3R_39() {
-    if (jj_3R_42()) return true;
+  private boolean jj_3R_43() {
+    if (jj_3R_45()) return true;
     Token xsp;
     while (true) {
       xsp = jj_scanpos;
@@ -2636,21 +2683,21 @@
     return false;
   }
 
-  private boolean jj_3R_19() {
+  private boolean jj_3R_20() {
     if (jj_scan_token(IDENTIFIER)) return true;
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3R_23()) jj_scanpos = xsp;
-    if (jj_3R_24()) return true;
+    if (jj_3R_24()) jj_scanpos = xsp;
+    if (jj_3R_25()) return true;
     while (true) {
       xsp = jj_scanpos;
-      if (jj_3R_24()) { jj_scanpos = xsp; break; }
+      if (jj_3R_25()) { jj_scanpos = xsp; break; }
     }
     return false;
   }
 
-  private boolean jj_3R_37() {
-    if (jj_3R_39()) return true;
+  private boolean jj_3R_40() {
+    if (jj_3R_43()) return true;
     Token xsp;
     while (true) {
       xsp = jj_scanpos;
@@ -2669,7 +2716,12 @@
     return false;
   }
 
-  private boolean jj_3R_56() {
+  private boolean jj_3R_30() {
+    if (jj_scan_token(IDENTIFIER)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_57() {
     Token xsp;
     xsp = jj_scanpos;
     if (jj_3R_60()) {
@@ -2689,12 +2741,7 @@
     return false;
   }
 
-  private boolean jj_3R_29() {
-    if (jj_scan_token(IDENTIFIER)) return true;
-    return false;
-  }
-
-  private boolean jj_3R_54() {
+  private boolean jj_3R_55() {
     Token xsp;
     xsp = jj_scanpos;
     if (jj_scan_token(41)) {
@@ -2704,43 +2751,43 @@
     return false;
   }
 
-  private boolean jj_3R_34() {
-    if (jj_3R_37()) return true;
+  private boolean jj_3R_38() {
+    if (jj_3R_40()) return true;
     Token xsp;
     while (true) {
       xsp = jj_scanpos;
-      if (jj_3R_56()) { jj_scanpos = xsp; break; }
+      if (jj_3R_57()) { jj_scanpos = xsp; break; }
     }
     return false;
   }
 
-  private boolean jj_3R_85() {
+  private boolean jj_3R_90() {
     if (jj_scan_token(TYPE)) return true;
     if (jj_scan_token(LPAREN)) return true;
     return false;
   }
 
-  private boolean jj_3R_31() {
-    if (jj_3R_34()) return true;
+  private boolean jj_3R_105() {
+    if (jj_3R_36()) return true;
+    return false;
+  }
+
+  private boolean jj_3R_35() {
+    if (jj_3R_38()) return true;
     Token xsp;
     while (true) {
       xsp = jj_scanpos;
-      if (jj_3R_54()) { jj_scanpos = xsp; break; }
+      if (jj_3R_55()) { jj_scanpos = xsp; break; }
     }
     return false;
   }
 
-  private boolean jj_3R_103() {
-    if (jj_3R_35()) return true;
+  private boolean jj_3R_22() {
+    if (jj_3R_28()) return true;
     return false;
   }
 
-  private boolean jj_3R_21() {
-    if (jj_3R_22()) return true;
-    return false;
-  }
-
-  private boolean jj_3R_52() {
+  private boolean jj_3R_50() {
     Token xsp;
     xsp = jj_scanpos;
     if (jj_scan_token(43)) {
@@ -2750,6 +2797,11 @@
     return false;
   }
 
+  private boolean jj_3R_23() {
+    if (jj_3R_28()) return true;
+    return false;
+  }
+
   /** Generated Token Manager. */
   public ELParserTokenManager token_source;
   SimpleCharStream jj_input_stream;
@@ -2761,7 +2813,7 @@
   private Token jj_scanpos, jj_lastpos;
   private int jj_la;
   private int jj_gen;
-  final private int[] jj_la1 = new int[54];
+  final private int[] jj_la1 = new int[55];
   static private int[] jj_la1_0;
   static private int[] jj_la1_1;
   static {
@@ -2769,12 +2821,12 @@
       jj_la1_init_1();
    }
    private static void jj_la1_init_0() {
-      jj_la1_0 = new int[] 
{0xe,0xe,0x4000000,0x0,0x575a00,0x575a00,0x2000000,0x0,0x100000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xf8000000,0x60000000,0x18000000,0x0,0x80000000,0xf8000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x575a00,0x480000,0x575a00,0x480000,0x100000,0x100000,0x2000000,0x575a00,0x100000,0x100000,0x400200,0x2000000,0x575a00,0x1000000,0x2000000,0x575a00,0x80000,0x100000,0x1000000,0x100000,0x75800,0x30000,};
+      jj_la1_0 = new int[] 
{0xe,0xe,0x4000000,0x0,0x575a00,0x575a00,0x2000000,0x0,0x100000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xf8000000,0x60000000,0x18000000,0x0,0x80000000,0xf8000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x575a00,0x480000,0x575a00,0x480000,0x100000,0x100000,0x2000000,0x575a00,0x575a00,0x100000,0x100000,0x400200,0x2000000,0x575a00,0x1000000,0x2000000,0x575a00,0x80000,0x100000,0x1000000,0x100000,0x75800,0x30000,};
    }
    private static void jj_la1_init_1() {
-      jj_la1_1 = new int[] 
{0x0,0x0,0x0,0x1000000,0xa022180,0xa022180,0x0,0x8000000,0x8000000,0x40000,0x1800,0x1800,0x600,0x600,0x78,0x18,0x60,0x78,0x7,0x0,0x0,0x6,0x1,0x7,0x800000,0x30000,0x30000,0x788000,0x180000,0x600000,0x788000,0x180,0xa022180,0x0,0xa000000,0x0,0x0,0x0,0x0,0xa022180,0x0,0x0,0xa000000,0x0,0xa022180,0x0,0x0,0xa022180,0x0,0x0,0x0,0x0,0x0,0x0,};
+      jj_la1_1 = new int[] 
{0x0,0x0,0x0,0x1000000,0xa022180,0xa022180,0x0,0x8000000,0x8000000,0x40000,0x1800,0x1800,0x600,0x600,0x78,0x18,0x60,0x78,0x7,0x0,0x0,0x6,0x1,0x7,0x800000,0x30000,0x30000,0x788000,0x180000,0x600000,0x788000,0x180,0xa022180,0x0,0xa000000,0x0,0x0,0x0,0x0,0xa022180,0xa022180,0x0,0x0,0xa000000,0x0,0xa022180,0x0,0x0,0xa022180,0x0,0x0,0x0,0x0,0x0,0x0,};
    }
-  final private JJCalls[] jj_2_rtns = new JJCalls[4];
+  final private JJCalls[] jj_2_rtns = new JJCalls[5];
   private boolean jj_rescan = false;
   private int jj_gc = 0;
 
@@ -2789,7 +2841,7 @@
     token = new Token();
     jj_ntk = -1;
     jj_gen = 0;
-    for (int i = 0; i < 54; i++) jj_la1[i] = -1;
+    for (int i = 0; i < 55; i++) jj_la1[i] = -1;
     for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
   }
 
@@ -2805,7 +2857,7 @@
     jj_ntk = -1;
     jjtree.reset();
     jj_gen = 0;
-    for (int i = 0; i < 54; i++) jj_la1[i] = -1;
+    for (int i = 0; i < 55; i++) jj_la1[i] = -1;
     for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
   }
 
@@ -2816,7 +2868,7 @@
     token = new Token();
     jj_ntk = -1;
     jj_gen = 0;
-    for (int i = 0; i < 54; i++) jj_la1[i] = -1;
+    for (int i = 0; i < 55; i++) jj_la1[i] = -1;
     for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
   }
 
@@ -2828,7 +2880,7 @@
     jj_ntk = -1;
     jjtree.reset();
     jj_gen = 0;
-    for (int i = 0; i < 54; i++) jj_la1[i] = -1;
+    for (int i = 0; i < 55; i++) jj_la1[i] = -1;
     for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
   }
 
@@ -2838,7 +2890,7 @@
     token = new Token();
     jj_ntk = -1;
     jj_gen = 0;
-    for (int i = 0; i < 54; i++) jj_la1[i] = -1;
+    for (int i = 0; i < 55; i++) jj_la1[i] = -1;
     for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
   }
 
@@ -2849,7 +2901,7 @@
     jj_ntk = -1;
     jjtree.reset();
     jj_gen = 0;
-    for (int i = 0; i < 54; i++) jj_la1[i] = -1;
+    for (int i = 0; i < 55; i++) jj_la1[i] = -1;
     for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
   }
 
@@ -2966,7 +3018,7 @@
       la1tokens[jj_kind] = true;
       jj_kind = -1;
     }
-    for (int i = 0; i < 54; i++) {
+    for (int i = 0; i < 55; i++) {
       if (jj_la1[i] == jj_gen) {
         for (int j = 0; j < 32; j++) {
           if ((jj_la1_0[i] & (1<<j)) != 0) {
@@ -3005,7 +3057,7 @@
 
   private void jj_rescan_token() {
     jj_rescan = true;
-    for (int i = 0; i < 4; i++) {
+    for (int i = 0; i < 5; i++) {
     try {
       JJCalls p = jj_2_rtns[i];
       do {
@@ -3016,6 +3068,7 @@
             case 1: jj_3_2(); break;
             case 2: jj_3_3(); break;
             case 3: jj_3_4(); break;
+            case 4: jj_3_5(); break;
           }
         }
         p = p.next;
Index: trunk/impl/src/main/java/com/sun/el/parser/ELParser.jjt
===================================================================
--- trunk/impl/src/main/java/com/sun/el/parser/ELParser.jjt     (revision 77)
+++ trunk/impl/src/main/java/com/sun/el/parser/ELParser.jjt     (revision 78)
@@ -335,9 +335,10 @@
 
 {
     <LPAREN>
-        LambdaParameters() <ARROW> Choice()
+        LambdaParameters() <ARROW>
+        (LOOKAHEAD(3) LambdaExpression() | Choice() )
     <RPAREN>
-    (MethodArguments())?
+    (MethodArguments())*
 }
 
 /*





[el-spec commits] [el-spec~source-code:78] Fix the grammar to allow multiple immediate lambda calls.

kchung 04/16/2012
 
 
Close
loading
Please Confirm
Close