This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Distinguish C- and perly- literals - PERLY_EXCLAMATION_MARK
authorBranislav ZahradnĂ­k <barney@cpan.org>
Fri, 11 Dec 2020 16:19:07 +0000 (17:19 +0100)
committerKarl Williamson <khw@cpan.org>
Sun, 27 Dec 2020 16:46:09 +0000 (09:46 -0700)
perly.act
perly.h
perly.tab
perly.y
toke.c

index 178328a..86691ff 100644 (file)
--- a/perly.act
+++ b/perly.act
@@ -2130,6 +2130,6 @@ case 2:
     
 
 /* Generated from:
- * dc3a381751f2897cbaa6dc2f792cd125a225072206d399dd4981603f81f78a24 perly.y
+ * 3cfd0c6b00a7252ca445af346f4fab4fedfd3065533813882639354d90371d9d perly.y
  * acf1cbfd2545faeaaa58b1cf0cf9d7f98b5be0752eb7a54528ef904a9e2e1ca7 regen_perly.pl
  * ex: set ro: */
diff --git a/perly.h b/perly.h
index e39f8cb..2549f31 100644 (file)
--- a/perly.h
+++ b/perly.h
@@ -143,15 +143,16 @@ extern int yydebug;
     NCRELOP = 342,
     SHIFTOP = 343,
     MATCHOP = 344,
-    UMINUS = 345,
-    REFGEN = 346,
-    POWOP = 347,
-    PREINC = 348,
-    PREDEC = 349,
-    POSTINC = 350,
-    POSTDEC = 351,
-    POSTJOIN = 352,
-    ARROW = 353
+    PERLY_EXCLAMATION_MARK = 345,
+    UMINUS = 346,
+    REFGEN = 347,
+    POWOP = 348,
+    PREINC = 349,
+    PREDEC = 350,
+    POSTINC = 351,
+    POSTDEC = 352,
+    POSTJOIN = 353,
+    ARROW = 354
   };
 #endif
 
@@ -203,6 +204,6 @@ int yyparse (void);
 
 
 /* Generated from:
- * dc3a381751f2897cbaa6dc2f792cd125a225072206d399dd4981603f81f78a24 perly.y
+ * 3cfd0c6b00a7252ca445af346f4fab4fedfd3065533813882639354d90371d9d perly.y
  * acf1cbfd2545faeaaa58b1cf0cf9d7f98b5be0752eb7a54528ef904a9e2e1ca7 regen_perly.pl
  * ex: set ro: */
index f84afd2..dc57a07 100644 (file)
--- a/perly.tab
+++ b/perly.tab
@@ -18,7 +18,7 @@
 #define YYNSTATES  573
 
 #define YYUNDEFTOK  2
-#define YYMAXUTOK   353
+#define YYMAXUTOK   354
 
 
 /* YYTRANSLATE(TOKEN-NUM) -- Symbol number corresponding to TOKEN-NUM
@@ -33,7 +33,7 @@ static const yytype_int8 yytranslate[] =
        0,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,    96,     2,     2,   109,    13,     2,     2,
+       2,     2,     2,     2,     2,     2,   109,    13,     2,     2,
      108,   107,   110,    11,     2,    10,     2,   111,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,    84,     2,
        2,     2,     2,    83,    12,     2,     2,     2,     2,     2,
@@ -64,8 +64,8 @@ static const yytype_int8 yytranslate[] =
       59,    60,    61,    62,    63,    64,    65,    66,    67,    68,
       69,    70,    71,    72,    73,    74,    75,    76,    77,    78,
       79,    80,    81,    82,    85,    86,    87,    88,    89,    90,
-      91,    92,    93,    94,    95,    98,    99,   100,   101,   102,
-     103,   104,   105,   106
+      91,    92,    93,    94,    95,    96,    98,    99,   100,   101,
+     102,   103,   104,   105,   106
 };
 
 #if YYDEBUG
@@ -125,16 +125,16 @@ static const char *const yytname[] =
   "COLONATTR", "FORMLBRACK", "FORMRBRACK", "SUBLEXSTART", "SUBLEXEND",
   "PREC_LOW", "OROP", "DOROP", "ANDOP", "NOTOP", "ASSIGNOP", "'?'", "':'",
   "OROR", "DORDOR", "ANDAND", "BITOROP", "BITANDOP", "CHEQOP", "NCEQOP",
-  "CHRELOP", "NCRELOP", "SHIFTOP", "MATCHOP", "'!'", "'~'", "UMINUS",
-  "REFGEN", "POWOP", "PREINC", "PREDEC", "POSTINC", "POSTDEC", "POSTJOIN",
-  "ARROW", "')'", "'('", "'$'", "'*'", "'/'", "$accept", "grammar", "@1",
-  "@2", "@3", "@4", "@5", "@6", "@7", "block", "formblock", "remember",
-  "mblock", "mremember", "stmtseq", "formstmtseq", "fullstmt",
-  "labfullstmt", "barestmt", "$@8", "$@9", "$@10", "$@11", "$@12", "@13",
-  "$@14", "formline", "formarg", "condition", "sideff", "else", "cont",
-  "mintro", "nexpr", "texpr", "iexpr", "mexpr", "mnexpr", "formname",
-  "startsub", "startanonsub", "startformsub", "subname", "proto",
-  "subattrlist", "myattrlist", "sigvarname", "sigslurpsigil",
+  "CHRELOP", "NCRELOP", "SHIFTOP", "MATCHOP", "PERLY_EXCLAMATION_MARK",
+  "'~'", "UMINUS", "REFGEN", "POWOP", "PREINC", "PREDEC", "POSTINC",
+  "POSTDEC", "POSTJOIN", "ARROW", "')'", "'('", "'$'", "'*'", "'/'",
+  "$accept", "grammar", "@1", "@2", "@3", "@4", "@5", "@6", "@7", "block",
+  "formblock", "remember", "mblock", "mremember", "stmtseq", "formstmtseq",
+  "fullstmt", "labfullstmt", "barestmt", "$@8", "$@9", "$@10", "$@11",
+  "$@12", "@13", "$@14", "formline", "formarg", "condition", "sideff",
+  "else", "cont", "mintro", "nexpr", "texpr", "iexpr", "mexpr", "mnexpr",
+  "formname", "startsub", "startanonsub", "startformsub", "subname",
+  "proto", "subattrlist", "myattrlist", "sigvarname", "sigslurpsigil",
   "sigslurpelem", "sigdefault", "sigscalarelem", "sigelem", "siglist",
   "siglistornull", "optsubsignature", "subsignature", "subsigguts", "$@15",
   "optsubbody", "subbody", "optsigsubbody", "sigsubbody", "expr",
@@ -161,8 +161,8 @@ static const yytype_int16 yytoknum[] =
      311,   312,   313,   314,   315,   316,   317,   318,   319,   320,
      321,   322,   323,   324,   325,   326,   327,   328,   329,   330,
      331,   332,   333,    63,    58,   334,   335,   336,   337,   338,
-     339,   340,   341,   342,   343,   344,    33,   126,   345,   346,
-     347,   348,   349,   350,   351,   352,   353,    41,    40,    36,
+     339,   340,   341,   342,   343,   344,   345,   126,   346,   347,
+     348,   349,   350,   351,   352,   353,   354,    41,    40,    36,
       42,    47
 };
 # endif
@@ -1179,16 +1179,16 @@ static const toketypes yy_type_tab[] =
   toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival,
   toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival,
   toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival,
+  toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival,
   toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival,
-  toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival,
-  toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival,
-  toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_opval, toketype_opval, toketype_ival,
-  toketype_opval, toketype_ival, toketype_opval, toketype_opval, toketype_opval,
-  toketype_opval, toketype_opval, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival,
-  toketype_ival, toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_opval,
-  toketype_ival, toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_opval,
-  toketype_ival, toketype_ival, toketype_ival, toketype_opval, toketype_opval,
-  toketype_opval, toketype_opval, toketype_opval, toketype_ival,
+  toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival,
+  toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_opval,
+  toketype_opval, toketype_ival, toketype_opval, toketype_ival, toketype_opval, toketype_opval,
+  toketype_opval, toketype_opval, toketype_opval, toketype_ival, toketype_ival, toketype_ival, toketype_ival,
+  toketype_ival, toketype_ival, toketype_ival, toketype_opval, toketype_opval, toketype_opval, toketype_opval,
+  toketype_opval, toketype_opval, toketype_ival, toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_opval,
+  toketype_opval, toketype_ival, toketype_ival, toketype_ival, toketype_opval,
+  toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_ival,
   toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_opval,
   toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_ival,
   toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_opval,
@@ -1201,6 +1201,6 @@ static const toketypes yy_type_tab[] =
 };
 
 /* Generated from:
- * dc3a381751f2897cbaa6dc2f792cd125a225072206d399dd4981603f81f78a24 perly.y
+ * 3cfd0c6b00a7252ca445af346f4fab4fedfd3065533813882639354d90371d9d perly.y
  * acf1cbfd2545faeaaa58b1cf0cf9d7f98b5be0752eb7a54528ef904a9e2e1ca7 regen_perly.pl
  * ex: set ro: */
diff --git a/perly.y b/perly.y
index 9f01052..4998d66 100644 (file)
--- a/perly.y
+++ b/perly.y
 %left ADDOP
 %left MULOP
 %left <ival> MATCHOP
-%right <ival> '!' '~' UMINUS REFGEN
+%right <ival> PERLY_EXCLAMATION_MARK '~' UMINUS REFGEN
 %right <ival> POWOP
 %nonassoc <ival> PREINC PREDEC POSTINC POSTDEC POSTJOIN
 %left <ival> ARROW
@@ -1100,7 +1100,7 @@ termunop : '-' term %prec UMINUS                       /* -$x */
        |       '+' term %prec UMINUS                  /* +$x */
                        { $$ = $term; }
 
-       |       '!' term                               /* !$x */
+       |       PERLY_EXCLAMATION_MARK term                               /* !$x */
                        { $$ = newUNOP(OP_NOT, 0, scalar($term)); }
        |       '~' term                               /* ~$x */
                        { $$ = newUNOP($1, 0, scalar($term)); }
diff --git a/toke.c b/toke.c
index dee103d..6b3c1be 100644 (file)
--- a/toke.c
+++ b/toke.c
@@ -394,6 +394,7 @@ static struct debug_tokens {
     DEBUG_TOKEN (IVAL, PERLY_COMMA),
     DEBUG_TOKEN (IVAL, PERLY_DOT),
     DEBUG_TOKEN (IVAL, PERLY_EQUAL_SIGN),
+    DEBUG_TOKEN (IVAL, PERLY_EXCLAMATION_MARK),
     DEBUG_TOKEN (IVAL, PERLY_SEMICOLON),
     { PLUGEXPR,                TOKENTYPE_OPVAL,        "PLUGEXPR" },
     { PLUGSTMT,                TOKENTYPE_OPVAL,        "PLUGSTMT" },
@@ -6362,7 +6363,7 @@ yyl_bang(pTHX_ char *s)
         PMop(OP_NOT);
 
     s--;
-    OPERATOR('!');
+    OPERATOR(PERLY_EXCLAMATION_MARK);
 }
 
 static int
@@ -8949,7 +8950,7 @@ yyl_try(pTHX_ char *s)
        pl_yylval.ival = 0;
        OPERATOR(ASSIGNOP);
 
-    case '!':
+        case '!':
         return yyl_bang(aTHX_ s + 1);
 
     case '<':