Author: byron
Date: Sun Feb 15 15:07:00 2009
New Revision: 744674

URL: http://svn.apache.org/viewvc?rev=744674&view=rev
Log:
VELOCITY-695 Add line comments to macro definitions

Added:
    
velocity/engine/branches/2.0_Exp/src/test/org/apache/velocity/test/MacroCommentsTestCase.java
Modified:
    
velocity/engine/branches/2.0_Exp/src/java/org/apache/velocity/runtime/parser/Parser.java
    velocity/engine/branches/2.0_Exp/src/parser/Parser.jjt

Modified: 
velocity/engine/branches/2.0_Exp/src/java/org/apache/velocity/runtime/parser/Parser.java
URL: 
http://svn.apache.org/viewvc/velocity/engine/branches/2.0_Exp/src/java/org/apache/velocity/runtime/parser/Parser.java?rev=744674&r1=744673&r2=744674&view=diff
==============================================================================
--- 
velocity/engine/branches/2.0_Exp/src/java/org/apache/velocity/runtime/parser/Parser.java
 (original)
+++ 
velocity/engine/branches/2.0_Exp/src/java/org/apache/velocity/runtime/parser/Parser.java
 Sun Feb 15 15:07:00 2009
@@ -838,7 +838,18 @@
             jj_la1[11] = jj_gen;
             ;
           }
-          argType = DirectiveArg();
+          switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+          case LBRACKET:
+          case LEFT_CURLEY:
+          case STRING_LITERAL:
+          case TRUE:
+          case FALSE:
+          case INTEGER_LITERAL:
+          case FLOATING_POINT_LITERAL:
+          case WORD:
+          case IDENTIFIER:
+          case LCURLY:
+            argType = DirectiveArg();
                 argtypes.add(argType);
                 if (d == null && argType == ParserTreeConstants.JJTWORD)
                 {
@@ -850,13 +861,36 @@
                 }
 
                 argPos++;
+            break;
+          case SINGLE_LINE_COMMENT_START:
+          if (!isMacro)
+          {
+              // We only allow line comments in macro definitions for now
+              {if (true) throw new MacroParseException("A Line comment is not 
allowed in " + t.image
+              + " arguments", currentTemplateName, t);}
+          }
+            jj_consume_token(SINGLE_LINE_COMMENT_START);
+            switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+            case SINGLE_LINE_COMMENT:
+              jj_consume_token(SINGLE_LINE_COMMENT);
+              break;
+            default:
+              jj_la1[12] = jj_gen;
+              ;
+            }
+            break;
+          default:
+            jj_la1[13] = jj_gen;
+            jj_consume_token(-1);
+            throw new ParseException();
+          }
         }
         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
         case WHITESPACE:
           jj_consume_token(WHITESPACE);
           break;
         default:
-          jj_la1[12] = jj_gen;
+          jj_la1[14] = jj_gen;
           ;
         }
         jj_consume_token(RPAREN);
@@ -908,7 +942,7 @@
             ;
             break;
           default:
-            jj_la1[13] = jj_gen;
+            jj_la1[15] = jj_gen;
             break label_4;
           }
           Statement();
@@ -1006,7 +1040,7 @@
             ;
             break;
           default:
-            jj_la1[14] = jj_gen;
+            jj_la1[16] = jj_gen;
             break label_5;
           }
           jj_consume_token(COMMA);
@@ -1020,7 +1054,7 @@
           jj_consume_token(WHITESPACE);
           break;
         default:
-          jj_la1[15] = jj_gen;
+          jj_la1[17] = jj_gen;
           ;
         }
       }
@@ -1032,7 +1066,7 @@
         jj_consume_token(RCURLY);
         break;
       default:
-        jj_la1[16] = jj_gen;
+        jj_la1[18] = jj_gen;
         jj_consume_token(-1);
         throw new ParseException();
       }
@@ -1083,7 +1117,7 @@
             ;
             break;
           default:
-            jj_la1[17] = jj_gen;
+            jj_la1[19] = jj_gen;
             break label_6;
           }
           jj_consume_token(COMMA);
@@ -1091,7 +1125,7 @@
         }
         break;
       default:
-        jj_la1[18] = jj_gen;
+        jj_la1[20] = jj_gen;
         ;
       }
       jj_consume_token(RBRACKET);
@@ -1133,7 +1167,7 @@
         jj_consume_token(WHITESPACE);
         break;
       default:
-        jj_la1[19] = jj_gen;
+        jj_la1[21] = jj_gen;
         ;
       }
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
@@ -1145,7 +1179,7 @@
         IntegerLiteral();
         break;
       default:
-        jj_la1[20] = jj_gen;
+        jj_la1[22] = jj_gen;
         jj_consume_token(-1);
         throw new ParseException();
       }
@@ -1154,7 +1188,7 @@
         jj_consume_token(WHITESPACE);
         break;
       default:
-        jj_la1[21] = jj_gen;
+        jj_la1[23] = jj_gen;
         ;
       }
       jj_consume_token(DOUBLEDOT);
@@ -1163,7 +1197,7 @@
         jj_consume_token(WHITESPACE);
         break;
       default:
-        jj_la1[22] = jj_gen;
+        jj_la1[24] = jj_gen;
         ;
       }
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
@@ -1175,7 +1209,7 @@
         IntegerLiteral();
         break;
       default:
-        jj_la1[23] = jj_gen;
+        jj_la1[25] = jj_gen;
         jj_consume_token(-1);
         throw new ParseException();
       }
@@ -1184,7 +1218,7 @@
         jj_consume_token(WHITESPACE);
         break;
       default:
-        jj_la1[24] = jj_gen;
+        jj_la1[26] = jj_gen;
         ;
       }
       jj_consume_token(RBRACKET);
@@ -1218,7 +1252,7 @@
       jj_consume_token(WHITESPACE);
       break;
     default:
-      jj_la1[25] = jj_gen;
+      jj_la1[27] = jj_gen;
       ;
     }
     switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
@@ -1239,7 +1273,7 @@
       Reference();
       break;
     default:
-      jj_la1[26] = jj_gen;
+      jj_la1[28] = jj_gen;
       jj_consume_token(-1);
       throw new ParseException();
     }
@@ -1248,7 +1282,7 @@
       jj_consume_token(WHITESPACE);
       break;
     default:
-      jj_la1[27] = jj_gen;
+      jj_la1[29] = jj_gen;
       ;
     }
   }
@@ -1264,7 +1298,7 @@
       jj_consume_token(WHITESPACE);
       break;
     default:
-      jj_la1[28] = jj_gen;
+      jj_la1[30] = jj_gen;
       ;
     }
     switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
@@ -1275,7 +1309,7 @@
       IntegerLiteral();
       break;
     default:
-      jj_la1[29] = jj_gen;
+      jj_la1[31] = jj_gen;
       if (jj_2_6(2147483647)) {
         IntegerRange();
       } else {
@@ -1300,7 +1334,7 @@
           FloatingPointLiteral();
           break;
         default:
-          jj_la1[30] = jj_gen;
+          jj_la1[32] = jj_gen;
           jj_consume_token(-1);
           throw new ParseException();
         }
@@ -1311,7 +1345,7 @@
       jj_consume_token(WHITESPACE);
       break;
     default:
-      jj_la1[31] = jj_gen;
+      jj_la1[33] = jj_gen;
       ;
     }
   }
@@ -1348,7 +1382,7 @@
             ;
             break;
           default:
-            jj_la1[32] = jj_gen;
+            jj_la1[34] = jj_gen;
             break label_7;
           }
           jj_consume_token(COMMA);
@@ -1356,7 +1390,7 @@
         }
         break;
       default:
-        jj_la1[33] = jj_gen;
+        jj_la1[35] = jj_gen;
         ;
       }
       jj_consume_token(REFMOD2_RPAREN);
@@ -1427,7 +1461,7 @@
             ;
             break;
           default:
-            jj_la1[34] = jj_gen;
+            jj_la1[36] = jj_gen;
             break label_8;
           }
           Index();
@@ -1448,7 +1482,7 @@
               Identifier();
               break;
             default:
-              jj_la1[35] = jj_gen;
+              jj_la1[37] = jj_gen;
               jj_consume_token(-1);
               throw new ParseException();
             }
@@ -1460,7 +1494,7 @@
               ;
               break;
             default:
-              jj_la1[36] = jj_gen;
+              jj_la1[38] = jj_gen;
               break label_10;
             }
             Index();
@@ -1477,7 +1511,7 @@
             ;
             break;
           default:
-            jj_la1[37] = jj_gen;
+            jj_la1[39] = jj_gen;
             break label_11;
           }
           Index();
@@ -1498,7 +1532,7 @@
               Identifier();
               break;
             default:
-              jj_la1[38] = jj_gen;
+              jj_la1[40] = jj_gen;
               jj_consume_token(-1);
               throw new ParseException();
             }
@@ -1510,7 +1544,7 @@
               ;
               break;
             default:
-              jj_la1[39] = jj_gen;
+              jj_la1[41] = jj_gen;
               break label_13;
             }
             Index();
@@ -1519,7 +1553,7 @@
         jj_consume_token(RCURLY);
         break;
       default:
-        jj_la1[40] = jj_gen;
+        jj_la1[42] = jj_gen;
         jj_consume_token(-1);
         throw new ParseException();
       }
@@ -1618,7 +1652,7 @@
         jj_consume_token(EMPTY_INDEX);
         break;
       default:
-        jj_la1[41] = jj_gen;
+        jj_la1[43] = jj_gen;
         jj_consume_token(-1);
         throw new ParseException();
       }
@@ -1646,7 +1680,7 @@
         jj_consume_token(WHITESPACE);
         break;
       default:
-        jj_la1[42] = jj_gen;
+        jj_la1[44] = jj_gen;
         ;
       }
       jj_consume_token(LPAREN);
@@ -1687,7 +1721,7 @@
             ;
             break;
           default:
-            jj_la1[43] = jj_gen;
+            jj_la1[45] = jj_gen;
             break label_14;
           }
           Statement();
@@ -1721,13 +1755,13 @@
             ;
             break;
           default:
-            jj_la1[44] = jj_gen;
+            jj_la1[46] = jj_gen;
             break label_15;
           }
         }
         break;
       default:
-        jj_la1[45] = jj_gen;
+        jj_la1[47] = jj_gen;
         ;
       }
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
@@ -1735,7 +1769,7 @@
         ElseStatement();
         break;
       default:
-        jj_la1[46] = jj_gen;
+        jj_la1[48] = jj_gen;
         ;
       }
       jj_consume_token(END);
@@ -1802,7 +1836,7 @@
             ;
             break;
           default:
-            jj_la1[47] = jj_gen;
+            jj_la1[49] = jj_gen;
             break label_16;
           }
           Statement();
@@ -1859,7 +1893,7 @@
         jj_consume_token(WHITESPACE);
         break;
       default:
-        jj_la1[48] = jj_gen;
+        jj_la1[50] = jj_gen;
         ;
       }
       jj_consume_token(LPAREN);
@@ -1900,7 +1934,7 @@
             ;
             break;
           default:
-            jj_la1[49] = jj_gen;
+            jj_la1[51] = jj_gen;
             break label_17;
           }
           Statement();
@@ -1962,7 +1996,7 @@
         jj_consume_token(WHITESPACE);
         break;
       default:
-        jj_la1[50] = jj_gen;
+        jj_la1[52] = jj_gen;
         ;
       }
       Reference();
@@ -1971,7 +2005,7 @@
         jj_consume_token(WHITESPACE);
         break;
       default:
-        jj_la1[51] = jj_gen;
+        jj_la1[53] = jj_gen;
         ;
       }
       jj_consume_token(EQUALS);
@@ -1987,7 +2021,7 @@
         jj_consume_token(NEWLINE);
         break;
       default:
-        jj_la1[52] = jj_gen;
+        jj_la1[54] = jj_gen;
         ;
       }
     } catch (Throwable jjte000) {
@@ -2026,7 +2060,7 @@
         jj_consume_token(WHITESPACE);
         break;
       default:
-        jj_la1[53] = jj_gen;
+        jj_la1[55] = jj_gen;
         ;
       }
       Reference();
@@ -2035,7 +2069,7 @@
         jj_consume_token(WHITESPACE);
         break;
       default:
-        jj_la1[54] = jj_gen;
+        jj_la1[56] = jj_gen;
         ;
       }
       jj_consume_token(EQUALS);
@@ -2051,7 +2085,7 @@
         jj_consume_token(NEWLINE);
         break;
       default:
-        jj_la1[55] = jj_gen;
+        jj_la1[57] = jj_gen;
         ;
       }
     } catch (Throwable jjte000) {
@@ -2090,7 +2124,7 @@
         jj_consume_token(WHITESPACE);
         break;
       default:
-        jj_la1[56] = jj_gen;
+        jj_la1[58] = jj_gen;
         ;
       }
       Reference();
@@ -2099,7 +2133,7 @@
         jj_consume_token(WHITESPACE);
         break;
       default:
-        jj_la1[57] = jj_gen;
+        jj_la1[59] = jj_gen;
         ;
       }
       jj_consume_token(EQUALS);
@@ -2115,7 +2149,7 @@
         jj_consume_token(NEWLINE);
         break;
       default:
-        jj_la1[58] = jj_gen;
+        jj_la1[60] = jj_gen;
         ;
       }
     } catch (Throwable jjte000) {
@@ -2232,7 +2266,7 @@
         ;
         break;
       default:
-        jj_la1[59] = jj_gen;
+        jj_la1[61] = jj_gen;
         break label_18;
       }
       jj_consume_token(LOGICAL_OR);
@@ -2272,7 +2306,7 @@
         ;
         break;
       default:
-        jj_la1[60] = jj_gen;
+        jj_la1[62] = jj_gen;
         break label_19;
       }
       jj_consume_token(LOGICAL_AND);
@@ -2313,7 +2347,7 @@
         ;
         break;
       default:
-        jj_la1[61] = jj_gen;
+        jj_la1[63] = jj_gen;
         break label_20;
       }
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
@@ -2372,7 +2406,7 @@
         }
         break;
       default:
-        jj_la1[62] = jj_gen;
+        jj_la1[64] = jj_gen;
         jj_consume_token(-1);
         throw new ParseException();
       }
@@ -2391,7 +2425,7 @@
         ;
         break;
       default:
-        jj_la1[63] = jj_gen;
+        jj_la1[65] = jj_gen;
         break label_21;
       }
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
@@ -2504,7 +2538,7 @@
         }
         break;
       default:
-        jj_la1[64] = jj_gen;
+        jj_la1[66] = jj_gen;
         jj_consume_token(-1);
         throw new ParseException();
       }
@@ -2521,7 +2555,7 @@
         ;
         break;
       default:
-        jj_la1[65] = jj_gen;
+        jj_la1[67] = jj_gen;
         break label_22;
       }
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
@@ -2580,7 +2614,7 @@
         }
         break;
       default:
-        jj_la1[66] = jj_gen;
+        jj_la1[68] = jj_gen;
         jj_consume_token(-1);
         throw new ParseException();
       }
@@ -2598,7 +2632,7 @@
         ;
         break;
       default:
-        jj_la1[67] = jj_gen;
+        jj_la1[69] = jj_gen;
         break label_23;
       }
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
@@ -2684,7 +2718,7 @@
         }
         break;
       default:
-        jj_la1[68] = jj_gen;
+        jj_la1[70] = jj_gen;
         jj_consume_token(-1);
         throw new ParseException();
       }
@@ -2698,7 +2732,7 @@
         jj_consume_token(WHITESPACE);
         break;
       default:
-        jj_la1[69] = jj_gen;
+        jj_la1[71] = jj_gen;
         ;
       }
       jj_consume_token(LOGICAL_NOT);
@@ -2742,7 +2776,7 @@
         PrimaryExpression();
         break;
       default:
-        jj_la1[70] = jj_gen;
+        jj_la1[72] = jj_gen;
         jj_consume_token(-1);
         throw new ParseException();
       }
@@ -2755,7 +2789,7 @@
       jj_consume_token(WHITESPACE);
       break;
     default:
-      jj_la1[71] = jj_gen;
+      jj_la1[73] = jj_gen;
       ;
     }
     switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
@@ -2770,7 +2804,7 @@
       IntegerLiteral();
       break;
     default:
-      jj_la1[72] = jj_gen;
+      jj_la1[74] = jj_gen;
       if (jj_2_12(2147483647)) {
         IntegerRange();
       } else {
@@ -2796,7 +2830,7 @@
           jj_consume_token(RPAREN);
           break;
         default:
-          jj_la1[73] = jj_gen;
+          jj_la1[75] = jj_gen;
           jj_consume_token(-1);
           throw new ParseException();
         }
@@ -2807,7 +2841,7 @@
       jj_consume_token(WHITESPACE);
       break;
     default:
-      jj_la1[74] = jj_gen;
+      jj_la1[76] = jj_gen;
       ;
     }
   }
@@ -2896,109 +2930,74 @@
     finally { jj_save(11, xla); }
   }
 
-  final private boolean jj_3R_29() {
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_scan_token(33)) jj_scanpos = xsp;
-    xsp = jj_scanpos;
-    if (jj_3R_51()) {
-    jj_scanpos = xsp;
-    if (jj_3R_52()) {
-    jj_scanpos = xsp;
-    if (jj_3R_53()) {
-    jj_scanpos = xsp;
-    if (jj_3R_54()) {
-    jj_scanpos = xsp;
-    if (jj_3R_55()) {
-    jj_scanpos = xsp;
-    if (jj_3R_56()) {
-    jj_scanpos = xsp;
-    if (jj_3R_57()) {
-    jj_scanpos = xsp;
-    if (jj_3R_58()) {
-    jj_scanpos = xsp;
-    if (jj_3R_59()) return true;
-    }
-    }
-    }
-    }
-    }
-    }
-    }
-    }
-    xsp = jj_scanpos;
-    if (jj_scan_token(33)) jj_scanpos = xsp;
-    return false;
-  }
-
-  final private boolean jj_3R_100() {
+  final private boolean jj_3R_102() {
     if (jj_scan_token(COMMA)) return true;
-    if (jj_3R_29()) return true;
+    if (jj_3R_30()) return true;
     if (jj_scan_token(COLON)) return true;
-    if (jj_3R_29()) return true;
+    if (jj_3R_30()) return true;
     return false;
   }
 
-  final private boolean jj_3R_96() {
+  final private boolean jj_3R_98() {
     if (jj_3R_24()) return true;
     return false;
   }
 
-  final private boolean jj_3R_26() {
-    if (jj_3R_40()) return true;
+  final private boolean jj_3R_97() {
+    if (jj_3R_71()) return true;
     return false;
   }
 
-  final private boolean jj_3R_95() {
-    if (jj_3R_71()) return true;
+  final private boolean jj_3R_96() {
+    if (jj_3R_70()) return true;
     return false;
   }
 
-  final private boolean jj_3R_94() {
-    if (jj_3R_70()) return true;
+  final private boolean jj_3R_95() {
+    if (jj_3R_41()) return true;
     return false;
   }
 
-  final private boolean jj_3R_93() {
-    if (jj_3R_40()) return true;
+  final private boolean jj_3R_94() {
+    if (jj_3R_66()) return true;
     return false;
   }
 
-  final private boolean jj_3R_92() {
-    if (jj_3R_65()) return true;
+  final private boolean jj_3R_101() {
+    if (jj_3R_41()) return true;
     return false;
   }
 
-  final private boolean jj_3R_99() {
-    if (jj_3R_40()) return true;
+  final private boolean jj_3R_26() {
+    if (jj_3R_41()) return true;
     return false;
   }
 
-  final private boolean jj_3R_76() {
-    if (jj_3R_40()) return true;
+  final private boolean jj_3R_78() {
+    if (jj_3R_41()) return true;
     return false;
   }
 
-  final private boolean jj_3R_101() {
+  final private boolean jj_3R_103() {
     if (jj_scan_token(COMMA)) return true;
-    if (jj_3R_29()) return true;
+    if (jj_3R_30()) return true;
     return false;
   }
 
-  final private boolean jj_3R_91() {
+  final private boolean jj_3R_93() {
     Token xsp;
     xsp = jj_scanpos;
     if (jj_scan_token(33)) jj_scanpos = xsp;
     xsp = jj_scanpos;
-    if (jj_3R_92()) {
-    jj_scanpos = xsp;
-    if (jj_3R_93()) {
-    jj_scanpos = xsp;
     if (jj_3R_94()) {
     jj_scanpos = xsp;
     if (jj_3R_95()) {
     jj_scanpos = xsp;
-    if (jj_3R_96()) return true;
+    if (jj_3R_96()) {
+    jj_scanpos = xsp;
+    if (jj_3R_97()) {
+    jj_scanpos = xsp;
+    if (jj_3R_98()) return true;
     }
     }
     }
@@ -3008,45 +3007,40 @@
     return false;
   }
 
-  final private boolean jj_3R_25() {
+  final private boolean jj_3R_100() {
     if (jj_3R_24()) return true;
     return false;
   }
 
-  final private boolean jj_3R_98() {
+  final private boolean jj_3R_25() {
     if (jj_3R_24()) return true;
     return false;
   }
 
-  final private boolean jj_3R_75() {
+  final private boolean jj_3R_77() {
     if (jj_3R_24()) return true;
     return false;
   }
 
-  final private boolean jj_3R_78() {
-    if (jj_3R_29()) return true;
+  final private boolean jj_3R_80() {
+    if (jj_3R_30()) return true;
     Token xsp;
     while (true) {
       xsp = jj_scanpos;
-      if (jj_3R_101()) { jj_scanpos = xsp; break; }
+      if (jj_3R_103()) { jj_scanpos = xsp; break; }
     }
     return false;
   }
 
-  final private boolean jj_3_1() {
-    if (jj_3R_24()) return true;
-    return false;
-  }
-
-  final private boolean jj_3R_66() {
+  final private boolean jj_3R_67() {
     if (jj_scan_token(LBRACKET)) return true;
     Token xsp;
     xsp = jj_scanpos;
     if (jj_scan_token(33)) jj_scanpos = xsp;
     xsp = jj_scanpos;
-    if (jj_3R_75()) {
+    if (jj_3R_77()) {
     jj_scanpos = xsp;
-    if (jj_3R_76()) return true;
+    if (jj_3R_78()) return true;
     }
     xsp = jj_scanpos;
     if (jj_scan_token(33)) jj_scanpos = xsp;
@@ -3054,9 +3048,9 @@
     xsp = jj_scanpos;
     if (jj_scan_token(33)) jj_scanpos = 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;
     }
     xsp = jj_scanpos;
     if (jj_scan_token(33)) jj_scanpos = xsp;
@@ -3064,8 +3058,8 @@
     return false;
   }
 
-  final private boolean jj_3R_50() {
-    if (jj_3R_71()) return true;
+  final private boolean jj_3_1() {
+    if (jj_3R_24()) return true;
     return false;
   }
 
@@ -3073,38 +3067,17 @@
     if (jj_scan_token(LBRACKET)) return true;
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3R_78()) jj_scanpos = xsp;
+    if (jj_3R_80()) jj_scanpos = xsp;
     if (jj_scan_token(RBRACKET)) return true;
     return false;
   }
 
-  final private boolean jj_3R_49() {
-    if (jj_3R_70()) return true;
-    return false;
-  }
-
-  final private boolean jj_3_3() {
-    if (jj_scan_token(LBRACKET)) return true;
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_scan_token(33)) jj_scanpos = xsp;
-    xsp = jj_scanpos;
-    if (jj_3R_25()) {
-    jj_scanpos = xsp;
-    if (jj_3R_26()) return true;
-    }
-    xsp = jj_scanpos;
-    if (jj_scan_token(33)) jj_scanpos = xsp;
-    if (jj_scan_token(DOUBLEDOT)) return true;
-    return false;
-  }
-
-  final private boolean jj_3R_48() {
-    if (jj_3R_69()) return true;
+  final private boolean jj_3R_65() {
+    if (jj_3R_71()) return true;
     return false;
   }
 
-  final private boolean jj_3R_77() {
+  final private boolean jj_3R_79() {
     Token xsp;
     xsp = jj_scanpos;
     if (jj_scan_token(33)) jj_scanpos = xsp;
@@ -3112,24 +3085,24 @@
   }
 
   final private boolean jj_3_5() {
-    if (jj_3R_29()) return true;
+    if (jj_3R_30()) return true;
     if (jj_scan_token(COLON)) return true;
-    if (jj_3R_29()) return true;
+    if (jj_3R_30()) return true;
     Token xsp;
     while (true) {
       xsp = jj_scanpos;
-      if (jj_3R_100()) { jj_scanpos = xsp; break; }
+      if (jj_3R_102()) { jj_scanpos = xsp; break; }
     }
     return false;
   }
 
-  final private boolean jj_3R_47() {
-    if (jj_3R_68()) return true;
+  final private boolean jj_3R_64() {
+    if (jj_3R_70()) return true;
     return false;
   }
 
-  final private boolean jj_3R_37() {
-    if (jj_3R_40()) return true;
+  final private boolean jj_3R_38() {
+    if (jj_3R_41()) return true;
     return false;
   }
 
@@ -3139,7 +3112,7 @@
     xsp = jj_scanpos;
     if (jj_3_5()) {
     jj_scanpos = xsp;
-    if (jj_3R_77()) return true;
+    if (jj_3R_79()) return true;
     }
     xsp = jj_scanpos;
     if (jj_scan_token(9)) {
@@ -3149,76 +3122,102 @@
     return false;
   }
 
-  final private boolean jj_3R_46() {
-    if (jj_3R_67()) return true;
+  final private boolean jj_3_3() {
+    if (jj_scan_token(LBRACKET)) return true;
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_scan_token(33)) jj_scanpos = xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_25()) {
+    jj_scanpos = xsp;
+    if (jj_3R_26()) return true;
+    }
+    xsp = jj_scanpos;
+    if (jj_scan_token(33)) jj_scanpos = xsp;
+    if (jj_scan_token(DOUBLEDOT)) return true;
     return false;
   }
 
-  final private boolean jj_3R_45() {
-    if (jj_3R_66()) return true;
+  final private boolean jj_3R_63() {
+    if (jj_3R_69()) return true;
     return false;
   }
 
-  final private boolean jj_3R_44() {
-    if (jj_3R_40()) return true;
+  final private boolean jj_3R_62() {
+    if (jj_3R_68()) return true;
     return false;
   }
 
-  final private boolean jj_3R_36() {
+  final private boolean jj_3R_61() {
+    if (jj_3R_72()) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_37() {
     if (jj_3R_24()) return true;
     return false;
   }
 
-  final private boolean jj_3R_43() {
-    if (jj_3R_65()) return true;
+  final private boolean jj_3R_60() {
+    if (jj_3R_67()) return true;
     return false;
   }
 
-  final private boolean jj_3R_27() {
-    if (jj_scan_token(COMMA)) return true;
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_scan_token(33)) jj_scanpos = xsp;
+  final private boolean jj_3R_59() {
+    if (jj_3R_41()) return true;
     return false;
   }
 
-  final private boolean jj_3R_42() {
-    if (jj_3R_64()) return true;
+  final private boolean jj_3R_92() {
+    if (jj_3R_74()) return true;
     return false;
   }
 
-  final private boolean jj_3R_90() {
-    if (jj_3R_73()) return true;
+  final private boolean jj_3R_58() {
+    if (jj_3R_66()) return true;
     return false;
   }
 
-  final private boolean jj_3R_41() {
-    if (jj_3R_24()) return true;
+  final private boolean jj_3R_57() {
+    if (jj_3R_76()) return true;
     return false;
   }
 
-  final private boolean jj_3R_28() {
+  final private boolean jj_3R_91() {
+    if (jj_3R_74()) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_27() {
+    if (jj_scan_token(COMMA)) return true;
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_scan_token(33)) jj_scanpos = xsp;
+    return false;
+  }
+
+  final private boolean jj_3R_42() {
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3R_41()) {
+    if (jj_3R_56()) {
     jj_scanpos = xsp;
-    if (jj_3R_42()) {
+    if (jj_3R_57()) {
     jj_scanpos = xsp;
-    if (jj_3R_43()) {
+    if (jj_3R_58()) {
     jj_scanpos = xsp;
-    if (jj_3R_44()) {
+    if (jj_3R_59()) {
     jj_scanpos = xsp;
-    if (jj_3R_45()) {
+    if (jj_3R_60()) {
     jj_scanpos = xsp;
-    if (jj_3R_46()) {
+    if (jj_3R_61()) {
     jj_scanpos = xsp;
-    if (jj_3R_47()) {
+    if (jj_3R_62()) {
     jj_scanpos = xsp;
-    if (jj_3R_48()) {
+    if (jj_3R_63()) {
     jj_scanpos = xsp;
-    if (jj_3R_49()) {
+    if (jj_3R_64()) {
     jj_scanpos = xsp;
-    if (jj_3R_50()) return true;
+    if (jj_3R_65()) return true;
     }
     }
     }
@@ -3231,23 +3230,18 @@
     return false;
   }
 
-  final private boolean jj_3R_89() {
-    if (jj_3R_73()) return true;
-    return false;
-  }
-
-  final private boolean jj_3R_64() {
-    if (jj_scan_token(WORD)) return true;
+  final private boolean jj_3R_56() {
+    if (jj_3R_24()) return true;
     return false;
   }
 
-  final private boolean jj_3R_60() {
-    if (jj_scan_token(IDENTIFIER)) return true;
+  final private boolean jj_3R_35() {
+    if (jj_3R_52()) return true;
     return false;
   }
 
-  final private boolean jj_3R_34() {
-    if (jj_3R_60()) return true;
+  final private boolean jj_3R_76() {
+    if (jj_scan_token(WORD)) return true;
     return false;
   }
 
@@ -3257,9 +3251,9 @@
     xsp = jj_scanpos;
     if (jj_scan_token(33)) jj_scanpos = xsp;
     xsp = jj_scanpos;
-    if (jj_3R_36()) {
+    if (jj_3R_37()) {
     jj_scanpos = xsp;
-    if (jj_3R_37()) return true;
+    if (jj_3R_38()) return true;
     }
     xsp = jj_scanpos;
     if (jj_scan_token(33)) jj_scanpos = xsp;
@@ -3267,90 +3261,90 @@
     return false;
   }
 
-  final private boolean jj_3R_32() {
-    if (jj_3R_60()) return true;
+  final private boolean jj_3R_52() {
+    if (jj_scan_token(IDENTIFIER)) return true;
     return false;
   }
 
-  final private boolean jj_3R_88() {
-    if (jj_scan_token(LPAREN)) return true;
+  final private boolean jj_3R_33() {
+    if (jj_3R_52()) return true;
     return false;
   }
 
-  final private boolean jj_3_4() {
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_scan_token(33)) jj_scanpos = xsp;
-    xsp = jj_scanpos;
-    if (jj_3R_27()) jj_scanpos = xsp;
-    if (jj_3R_28()) return true;
+  final private boolean jj_3R_90() {
+    if (jj_scan_token(LPAREN)) return true;
     return false;
   }
 
-  final private boolean jj_3R_87() {
+  final private boolean jj_3R_89() {
     if (jj_3R_71()) return true;
     return false;
   }
 
-  final private boolean jj_3R_86() {
+  final private boolean jj_3R_88() {
     if (jj_3R_70()) return true;
     return false;
   }
 
-  final private boolean jj_3R_85() {
+  final private boolean jj_3R_87() {
     if (jj_3R_69()) return true;
     return false;
   }
 
-  final private boolean jj_3R_84() {
+  final private boolean jj_3R_86() {
     if (jj_3R_68()) return true;
     return false;
   }
 
-  final private boolean jj_3R_83() {
-    if (jj_3R_67()) return true;
+  final private boolean jj_3R_85() {
+    if (jj_3R_72()) return true;
     return false;
   }
 
-  final private boolean jj_3R_65() {
-    if (jj_scan_token(STRING_LITERAL)) return true;
+  final private boolean jj_3R_84() {
+    if (jj_3R_67()) return true;
     return false;
   }
 
-  final private boolean jj_3R_82() {
-    if (jj_3R_66()) return true;
+  final private boolean jj_3R_83() {
+    if (jj_3R_41()) return true;
     return false;
   }
 
-  final private boolean jj_3R_81() {
-    if (jj_3R_40()) return true;
+  final private boolean jj_3R_82() {
+    if (jj_3R_24()) return true;
     return false;
   }
 
-  final private boolean jj_3R_80() {
-    if (jj_3R_24()) return true;
+  final private boolean jj_3_4() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_scan_token(33)) jj_scanpos = xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_27()) jj_scanpos = xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_28()) {
+    jj_scanpos = xsp;
+    if (jj_3R_29()) return true;
+    }
     return false;
   }
 
-  final private boolean jj_3R_40() {
-    if (jj_scan_token(INTEGER_LITERAL)) return true;
+  final private boolean jj_3R_81() {
+    if (jj_3R_66()) return true;
     return false;
   }
 
-  final private boolean jj_3R_79() {
-    if (jj_3R_65()) return true;
+  final private boolean jj_3R_66() {
+    if (jj_scan_token(STRING_LITERAL)) return true;
     return false;
   }
 
-  final private boolean jj_3R_72() {
+  final private boolean jj_3R_73() {
     Token xsp;
     xsp = jj_scanpos;
     if (jj_scan_token(33)) jj_scanpos = xsp;
     xsp = jj_scanpos;
-    if (jj_3R_79()) {
-    jj_scanpos = xsp;
-    if (jj_3R_80()) {
-    jj_scanpos = xsp;
     if (jj_3R_81()) {
     jj_scanpos = xsp;
     if (jj_3R_82()) {
@@ -3365,7 +3359,11 @@
     jj_scanpos = xsp;
     if (jj_3R_87()) {
     jj_scanpos = xsp;
-    if (jj_3R_88()) return true;
+    if (jj_3R_88()) {
+    jj_scanpos = xsp;
+    if (jj_3R_89()) {
+    jj_scanpos = xsp;
+    if (jj_3R_90()) return true;
     }
     }
     }
@@ -3378,22 +3376,30 @@
     return false;
   }
 
-  final private boolean jj_3R_67() {
-    if (jj_scan_token(FLOATING_POINT_LITERAL)) return true;
+  final private boolean jj_3_10() {
+    if (jj_3R_34()) return true;
     return false;
   }
 
-  final private boolean jj_3_10() {
-    if (jj_3R_33()) return true;
+  final private boolean jj_3R_41() {
+    if (jj_scan_token(INTEGER_LITERAL)) return true;
     return false;
   }
 
-  final private boolean jj_3R_35() {
+  final private boolean jj_3R_29() {
+    if (jj_scan_token(SINGLE_LINE_COMMENT_START)) return true;
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_scan_token(27)) jj_scanpos = xsp;
+    return false;
+  }
+
+  final private boolean jj_3R_36() {
     Token xsp;
     xsp = jj_scanpos;
     if (jj_3_11()) {
     jj_scanpos = xsp;
-    if (jj_3R_62()) return true;
+    if (jj_3R_54()) return true;
     }
     return false;
   }
@@ -3403,33 +3409,38 @@
     xsp = jj_scanpos;
     if (jj_scan_token(33)) jj_scanpos = xsp;
     if (jj_scan_token(LOGICAL_NOT)) return true;
-    if (jj_3R_35()) return true;
+    if (jj_3R_36()) return true;
     return false;
   }
 
-  final private boolean jj_3R_62() {
-    if (jj_3R_72()) return true;
+  final private boolean jj_3R_54() {
+    if (jj_3R_73()) return true;
     return false;
   }
 
-  final private boolean jj_3R_31() {
-    if (jj_3R_40()) return true;
+  final private boolean jj_3R_32() {
+    if (jj_3R_41()) return true;
     return false;
   }
 
   final private boolean jj_3_8() {
-    if (jj_3R_33()) return true;
+    if (jj_3R_34()) return true;
     return false;
   }
 
-  final private boolean jj_3R_74() {
-    if (jj_3R_73()) return true;
+  final private boolean jj_3R_72() {
+    if (jj_scan_token(FLOATING_POINT_LITERAL)) return true;
     return false;
   }
 
-  final private boolean jj_3R_97() {
+  final private boolean jj_3R_75() {
+    if (jj_3R_74()) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_99() {
     if (jj_scan_token(COMMA)) return true;
-    if (jj_3R_29()) return true;
+    if (jj_3R_30()) return true;
     return false;
   }
 
@@ -3438,12 +3449,17 @@
     return false;
   }
 
-  final private boolean jj_3R_63() {
-    if (jj_3R_73()) return true;
+  final private boolean jj_3R_55() {
+    if (jj_3R_74()) return true;
     return false;
   }
 
-  final private boolean jj_3R_30() {
+  final private boolean jj_3R_28() {
+    if (jj_3R_42()) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_31() {
     if (jj_3R_24()) return true;
     return false;
   }
@@ -3459,11 +3475,11 @@
     xsp = jj_scanpos;
     if (jj_3_10()) {
     jj_scanpos = xsp;
-    if (jj_3R_34()) return true;
+    if (jj_3R_35()) return true;
     }
     while (true) {
       xsp = jj_scanpos;
-      if (jj_3R_90()) { jj_scanpos = xsp; break; }
+      if (jj_3R_92()) { jj_scanpos = xsp; break; }
     }
     return false;
   }
@@ -3474,32 +3490,32 @@
     xsp = jj_scanpos;
     if (jj_3_8()) {
     jj_scanpos = xsp;
-    if (jj_3R_32()) return true;
+    if (jj_3R_33()) return true;
     }
     while (true) {
       xsp = jj_scanpos;
-      if (jj_3R_89()) { jj_scanpos = xsp; break; }
+      if (jj_3R_91()) { jj_scanpos = xsp; break; }
     }
     return false;
   }
 
-  final private boolean jj_3R_61() {
-    if (jj_3R_29()) return true;
+  final private boolean jj_3R_53() {
+    if (jj_3R_30()) return true;
     Token xsp;
     while (true) {
       xsp = jj_scanpos;
-      if (jj_3R_97()) { jj_scanpos = xsp; break; }
+      if (jj_3R_99()) { jj_scanpos = xsp; break; }
     }
     return false;
   }
 
-  final private boolean jj_3R_39() {
+  final private boolean jj_3R_40() {
     if (jj_scan_token(LCURLY)) return true;
     if (jj_scan_token(IDENTIFIER)) return true;
     Token xsp;
     while (true) {
       xsp = jj_scanpos;
-      if (jj_3R_74()) { jj_scanpos = xsp; break; }
+      if (jj_3R_75()) { jj_scanpos = xsp; break; }
     }
     while (true) {
       xsp = jj_scanpos;
@@ -3509,12 +3525,12 @@
     return false;
   }
 
-  final private boolean jj_3R_38() {
+  final private boolean jj_3R_39() {
     if (jj_scan_token(IDENTIFIER)) return true;
     Token xsp;
     while (true) {
       xsp = jj_scanpos;
-      if (jj_3R_63()) { jj_scanpos = xsp; break; }
+      if (jj_3R_55()) { jj_scanpos = xsp; break; }
     }
     while (true) {
       xsp = jj_scanpos;
@@ -3526,16 +3542,16 @@
   final private boolean jj_3R_24() {
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3R_38()) {
+    if (jj_3R_39()) {
     jj_scanpos = xsp;
-    if (jj_3R_39()) return true;
+    if (jj_3R_40()) return true;
     }
     return false;
   }
 
-  final private boolean jj_3R_73() {
+  final private boolean jj_3R_74() {
     if (jj_scan_token(INDEX_LBRACKET)) return true;
-    if (jj_3R_91()) return true;
+    if (jj_3R_93()) return true;
     if (jj_scan_token(INDEX_RBRACKET)) return true;
     return false;
   }
@@ -3546,9 +3562,9 @@
     xsp = jj_scanpos;
     if (jj_scan_token(33)) jj_scanpos = xsp;
     xsp = jj_scanpos;
-    if (jj_3R_30()) {
+    if (jj_3R_31()) {
     jj_scanpos = xsp;
-    if (jj_3R_31()) return true;
+    if (jj_3R_32()) return true;
     }
     xsp = jj_scanpos;
     if (jj_scan_token(33)) jj_scanpos = xsp;
@@ -3556,63 +3572,98 @@
     return false;
   }
 
-  final private boolean jj_3R_33() {
-    if (jj_3R_60()) return true;
+  final private boolean jj_3R_34() {
+    if (jj_3R_52()) return true;
     if (jj_scan_token(LPAREN)) return true;
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3R_61()) jj_scanpos = xsp;
+    if (jj_3R_53()) jj_scanpos = xsp;
     if (jj_scan_token(REFMOD2_RPAREN)) return true;
     return false;
   }
 
-  final private boolean jj_3_2() {
-    if (jj_scan_token(DOUBLE_ESCAPE)) return true;
-    return false;
-  }
-
-  final private boolean jj_3R_59() {
-    if (jj_3R_67()) return true;
+  final private boolean jj_3R_51() {
+    if (jj_3R_72()) return true;
     return false;
   }
 
-  final private boolean jj_3R_58() {
+  final private boolean jj_3R_50() {
     if (jj_3R_24()) return true;
     return false;
   }
 
-  final private boolean jj_3R_57() {
+  final private boolean jj_3R_49() {
     if (jj_3R_71()) return true;
     return false;
   }
 
-  final private boolean jj_3R_56() {
+  final private boolean jj_3R_48() {
     if (jj_3R_70()) return true;
     return false;
   }
 
-  final private boolean jj_3R_55() {
+  final private boolean jj_3R_47() {
     if (jj_3R_69()) return true;
     return false;
   }
 
-  final private boolean jj_3R_54() {
+  final private boolean jj_3_2() {
+    if (jj_scan_token(DOUBLE_ESCAPE)) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_46() {
     if (jj_3R_68()) return true;
     return false;
   }
 
-  final private boolean jj_3R_53() {
-    if (jj_3R_66()) return true;
+  final private boolean jj_3R_45() {
+    if (jj_3R_67()) return true;
     return false;
   }
 
-  final private boolean jj_3R_52() {
-    if (jj_3R_40()) return true;
+  final private boolean jj_3R_44() {
+    if (jj_3R_41()) return true;
     return false;
   }
 
-  final private boolean jj_3R_51() {
-    if (jj_3R_65()) return true;
+  final private boolean jj_3R_43() {
+    if (jj_3R_66()) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_30() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_scan_token(33)) jj_scanpos = xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_43()) {
+    jj_scanpos = xsp;
+    if (jj_3R_44()) {
+    jj_scanpos = xsp;
+    if (jj_3R_45()) {
+    jj_scanpos = xsp;
+    if (jj_3R_46()) {
+    jj_scanpos = xsp;
+    if (jj_3R_47()) {
+    jj_scanpos = xsp;
+    if (jj_3R_48()) {
+    jj_scanpos = xsp;
+    if (jj_3R_49()) {
+    jj_scanpos = xsp;
+    if (jj_3R_50()) {
+    jj_scanpos = xsp;
+    if (jj_3R_51()) return true;
+    }
+    }
+    }
+    }
+    }
+    }
+    }
+    }
+    xsp = jj_scanpos;
+    if (jj_scan_token(33)) jj_scanpos = xsp;
     return false;
   }
 
@@ -3624,7 +3675,7 @@
   public boolean lookingAhead = false;
   private boolean jj_semLA;
   private int jj_gen;
-  final private int[] jj_la1 = new int[75];
+  final private int[] jj_la1 = new int[77];
   static private int[] jj_la1_0;
   static private int[] jj_la1_1;
   static private int[] jj_la1_2;
@@ -3634,13 +3685,13 @@
       jj_la1_2();
    }
    private static void jj_la1_0() {
-      jj_la1_0 = new int[] 
{0x7781ec00,0x0,0x7781ec00,0x8000000,0x30800000,0x0,0x108,0x0,0x0,0x0,0x0,0x20,0x0,0x7781ec00,0x20,0x0,0x200,0x20,0x108,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x108,0x0,0x20,0x108,0x2,0x0,0x2,0x2,0x0,0x2,0x0,0x6000c00,0x0,0x7781ec00,0x0,0x0,0x0,0x7781ec00,0x0,0x7781ec00,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x508,0x0,0x0,0x508,0x0,};
+      jj_la1_0 = new int[] 
{0x7781ec00,0x0,0x7781ec00,0x8000000,0x30800000,0x0,0x108,0x0,0x0,0x0,0x0,0x20,0x8000000,0x800108,0x0,0x7781ec00,0x20,0x0,0x200,0x20,0x108,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x108,0x0,0x20,0x108,0x2,0x0,0x2,0x2,0x0,0x2,0x0,0x6000c00,0x0,0x7781ec00,0x0,0x0,0x0,0x7781ec00,0x0,0x7781ec00,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x508,0x0,0x0,0x508,0x0,};
    }
    private static void jj_la1_1() {
-      jj_la1_1 = new int[] 
{0x1a400004,0x2400000,0x18000004,0x0,0x0,0x8000004,0x10000018,0x0,0x2,0x2,0x2,0x0,0x2,0x1a400004,0x0,0x2,0x0,0x0,0x1800001e,0x2,0x8000000,0x2,0x2,0x8000000,0x2,0x2,0x800001c,0x2,0x2,0x8000004,0x10000018,0x2,0x0,0x1800001e,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x18000004,0x2,0x1a400004,0x800000,0x800000,0x1000000,0x1a400004,0x2,0x1a400004,0x2,0x2,0x20,0x2,0x2,0x20,0x2,0x2,0x20,0x1000,0x800,0x60000,0x60000,0x1e000,0x1e000,0xc0,0xc0,0x700,0x700,0x2,0x1800001e,0x2,0x8000004,0x10000018,0x2,};
+      jj_la1_1 = new int[] 
{0x1a400004,0x2400000,0x18000004,0x0,0x0,0x8000004,0x10000018,0x0,0x2,0x2,0x2,0x0,0x0,0x1800001c,0x2,0x1a400004,0x0,0x2,0x0,0x0,0x1800001e,0x2,0x8000000,0x2,0x2,0x8000000,0x2,0x2,0x800001c,0x2,0x2,0x8000004,0x10000018,0x2,0x0,0x1800001e,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x18000004,0x2,0x1a400004,0x800000,0x800000,0x1000000,0x1a400004,0x2,0x1a400004,0x2,0x2,0x20,0x2,0x2,0x20,0x2,0x2,0x20,0x1000,0x800,0x60000,0x60000,0x1e000,0x1e000,0xc0,0xc0,0x700,0x700,0x2,0x1800001e,0x2,0x8000004,0x10000018,0x2,};
    }
    private static void jj_la1_2() {
-      jj_la1_2 = new int[] 
{0x9e3,0x0,0x9c3,0x0,0x0,0xa1,0x0,0x3,0x0,0x0,0x0,0x0,0x0,0x9e3,0x0,0x0,0x100,0x0,0xa0,0x0,0xa0,0x0,0x0,0xa0,0x0,0x0,0xa0,0x0,0x0,0x0,0xa0,0x0,0x0,0xa0,0x0,0x20,0x0,0x0,0x20,0x0,0xa0,0x9c0,0x0,0x9e3,0x0,0x0,0x0,0x9e3,0x0,0x9e3,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xa0,0x0,0xa0,0x0,0x0,};
+      jj_la1_2 = new int[] 
{0x9e3,0x0,0x9c3,0x0,0x0,0xa1,0x0,0x3,0x0,0x0,0x0,0x0,0x0,0xa1,0x0,0x9e3,0x0,0x0,0x100,0x0,0xa0,0x0,0xa0,0x0,0x0,0xa0,0x0,0x0,0xa0,0x0,0x0,0x0,0xa0,0x0,0x0,0xa0,0x0,0x20,0x0,0x0,0x20,0x0,0xa0,0x9c0,0x0,0x9e3,0x0,0x0,0x0,0x9e3,0x0,0x9e3,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xa0,0x0,0xa0,0x0,0x0,};
    }
   final private JJCalls[] jj_2_rtns = new JJCalls[12];
   private boolean jj_rescan = false;
@@ -3651,7 +3702,7 @@
     token = new Token();
     jj_ntk = -1;
     jj_gen = 0;
-    for (int i = 0; i < 75; i++) jj_la1[i] = -1;
+    for (int i = 0; i < 77; i++) jj_la1[i] = -1;
     for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
   }
 
@@ -3661,7 +3712,7 @@
     jj_ntk = -1;
     jjtree.reset();
     jj_gen = 0;
-    for (int i = 0; i < 75; i++) jj_la1[i] = -1;
+    for (int i = 0; i < 77; i++) jj_la1[i] = -1;
     for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
   }
 
@@ -3670,7 +3721,7 @@
     token = new Token();
     jj_ntk = -1;
     jj_gen = 0;
-    for (int i = 0; i < 75; i++) jj_la1[i] = -1;
+    for (int i = 0; i < 77; i++) jj_la1[i] = -1;
     for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
   }
 
@@ -3680,7 +3731,7 @@
     jj_ntk = -1;
     jjtree.reset();
     jj_gen = 0;
-    for (int i = 0; i < 75; i++) jj_la1[i] = -1;
+    for (int i = 0; i < 77; i++) jj_la1[i] = -1;
     for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
   }
 
@@ -3799,7 +3850,7 @@
       la1tokens[jj_kind] = true;
       jj_kind = -1;
     }
-    for (int i = 0; i < 75; i++) {
+    for (int i = 0; i < 77; i++) {
       if (jj_la1[i] == jj_gen) {
         for (int j = 0; j < 32; j++) {
           if ((jj_la1_0[i] & (1<<j)) != 0) {

Modified: velocity/engine/branches/2.0_Exp/src/parser/Parser.jjt
URL: 
http://svn.apache.org/viewvc/velocity/engine/branches/2.0_Exp/src/parser/Parser.jjt?rev=744674&r1=744673&r2=744674&view=diff
==============================================================================
--- velocity/engine/branches/2.0_Exp/src/parser/Parser.jjt (original)
+++ velocity/engine/branches/2.0_Exp/src/parser/Parser.jjt Sun Feb 15 15:07:00 
2009
@@ -1596,9 +1596,8 @@
     /*
      *  if this is indeed a token, match the #foo ( arg ) pattern
      */
-    (([<WHITESPACE>] <LPAREN>) ( LOOKAHEAD(2) [<WHITESPACE>] [<COMMA> 
[<WHITESPACE>]]
-
-            argType = DirectiveArg()
+    ([<WHITESPACE>] <LPAREN> ( LOOKAHEAD(2) [<WHITESPACE>] [<COMMA> 
[<WHITESPACE>]]
+       (argType = DirectiveArg()
             {
                 argtypes.add(argType);
                 if (d == null && argType == ParserTreeConstants.JJTWORD)
@@ -1612,7 +1611,16 @@
 
                 argPos++;
             }
-
+        |
+        {
+          if (!isMacro)
+          {
+              // We only allow line comments in macro definitions for now
+              throw new MacroParseException("A Line comment is not allowed in 
" + t.image
+              + " arguments", currentTemplateName, t);
+          }
+        }
+         <SINGLE_LINE_COMMENT_START> [<SINGLE_LINE_COMMENT>] )
     )* [<WHITESPACE>] <RPAREN>)
     |
     {

Added: 
velocity/engine/branches/2.0_Exp/src/test/org/apache/velocity/test/MacroCommentsTestCase.java
URL: 
http://svn.apache.org/viewvc/velocity/engine/branches/2.0_Exp/src/test/org/apache/velocity/test/MacroCommentsTestCase.java?rev=744674&view=auto
==============================================================================
--- 
velocity/engine/branches/2.0_Exp/src/test/org/apache/velocity/test/MacroCommentsTestCase.java
 (added)
+++ 
velocity/engine/branches/2.0_Exp/src/test/org/apache/velocity/test/MacroCommentsTestCase.java
 Sun Feb 15 15:07:00 2009
@@ -0,0 +1,57 @@
+package org.apache.velocity.test;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.    
+ */
+
+import org.apache.velocity.exception.MethodInvocationException;
+import org.apache.velocity.exception.VelocityException;
+import org.apache.velocity.exception.ParseErrorException;
+import org.apache.velocity.runtime.RuntimeConstants;
+import org.apache.velocity.runtime.parser.ParseException;
+/**
+ * Test Macro comment functionality
+ */
+public class MacroCommentsTestCase extends BaseTestCase
+{
+    public MacroCommentsTestCase(String name)
+    {
+        super(name);
+    }
+
+    public void setUp() throws Exception
+    {
+        super.setUp();
+    }
+    
+    public void testComments()
+    {
+      assertEvalEquals("ab","#macro(foo ##\n $bar \n ## blaa\n 
$bar2##\n)$bar$bar2#end#foo(\"a\" \"b\")");
+      assertEvalEquals("","#macro(foo1##\n)#end#foo1()");
+      assertEvalEquals("ab","#macro(foo2##\n\t ####\r $bar \n ##\n## Testing  
blaa\n $bar2##\n)$bar$bar2#end#foo2(\"a\" \"b\")");
+      assertEvalEquals("","#macro(foo4 ## test\n  ## test2  ## test3 
\n)#end#foo4()");
+    }
+    
+    public void testErrors()
+    {
+      // We only allow comment lines in macro definitions
+      assertEvalException("#foo1(## test)", ParseErrorException.class);
+      assertEvalException("#foo1($test ## test)", ParseErrorException.class);
+      assertEvalException("#break(## test)", ParseErrorException.class);
+    }
+}


Reply via email to