Perly.y and related file fixes to keep mainframe yacc (and bison) happy.
Nick Ing-Simmons [Tue, 19 Jun 2001 07:05:07 +0000 (07:05 +0000)]
p4raw-id: //depot/perl@10707

perly.c
perly.y
perly_c.diff
vms/perly_c.vms

diff --git a/perly.c b/perly.c
index a98279a..5596768 100644 (file)
--- a/perly.c
+++ b/perly.c
@@ -53,29 +53,29 @@ typedef union {
 #line 54 "perly.c"
 #define YYERRCODE 256
 static short yylhs[] = {                                        -1,
-   54,    0,    8,    6,    9,    7,   10,   10,   10,   11,
-   11,   11,   11,   24,   24,   24,   24,   24,   24,   24,
-   14,   14,   14,   13,   13,   42,   42,   12,   12,   12,
-   12,   12,   12,   12,   26,   26,   27,   27,   28,   29,
-   30,   31,   32,   53,   53,    1,    1,    1,    1,    1,
-    2,   38,   38,   46,   55,    3,    4,    5,   39,   40,
-   40,   44,   44,   44,   45,   45,   41,   41,   56,   56,
-   58,   57,   15,   15,   15,   25,   25,   25,   36,   36,
-   36,   36,   36,   36,   36,   36,   59,   36,   37,   37,
+    0,    9,    7,    6,   10,    8,   11,   11,   11,   12,
+   12,   12,   12,   25,   25,   25,   25,   25,   25,   25,
+   15,   15,   15,   14,   14,   43,   43,   13,   13,   13,
+   13,   13,   13,   13,   27,   27,   28,   28,   29,   30,
+   31,   32,   33,   54,   54,    1,    1,    1,    1,    1,
+    2,   39,   39,   47,   55,    3,    4,    5,   40,   41,
+   41,   45,   45,   45,   46,   46,   42,   42,   56,   56,
+   58,   57,   16,   16,   16,   26,   26,   26,   37,   37,
+   37,   37,   37,   37,   37,   37,   59,   37,   38,   38,
+   18,   18,   18,   18,   18,   18,   18,   18,   18,   18,
+   18,   50,   50,   50,   50,   50,   50,   50,   50,   50,
+   50,   50,   50,   50,   51,   51,   51,   51,   51,   51,
+   51,   51,   52,   52,   52,   52,   52,   53,   53,   53,
+   53,   53,   53,   17,   17,   17,   17,   17,   17,   17,
    17,   17,   17,   17,   17,   17,   17,   17,   17,   17,
-   17,   49,   49,   49,   49,   49,   49,   49,   49,   49,
-   49,   49,   49,   49,   50,   50,   50,   50,   50,   50,
-   50,   50,   51,   51,   51,   51,   51,   52,   52,   52,
-   52,   52,   52,   16,   16,   16,   16,   16,   16,   16,
-   16,   16,   16,   16,   16,   16,   16,   16,   16,   16,
-   16,   16,   16,   16,   16,   16,   16,   16,   16,   16,
-   16,   16,   16,   16,   16,   16,   16,   16,   16,   16,
-   16,   16,   16,   16,   47,   47,   48,   48,   48,   48,
-   48,   33,   33,   34,   34,   34,   43,   23,   18,   19,
-   20,   21,   22,   35,   35,   35,   35,
+   17,   17,   17,   17,   17,   17,   17,   17,   17,   17,
+   17,   17,   17,   17,   17,   17,   17,   17,   17,   17,
+   17,   17,   17,   17,   48,   48,   49,   49,   49,   49,
+   49,   34,   34,   35,   35,   35,   44,   24,   19,   20,
+   21,   22,   23,   36,   36,   36,   36,
 };
 static short yylen[] = {                                         2,
-    0,    2,    4,    0,    4,    0,    0,    2,    2,    2,
+    2,    4,    0,    0,    4,    0,    0,    2,    2,    2,
     1,    2,    3,    1,    1,    3,    3,    3,    3,    3,
     0,    2,    6,    7,    7,    0,    2,    8,    8,   10,
     9,    8,   11,    3,    0,    1,    0,    1,    1,    1,
@@ -96,10 +96,10 @@ static short yylen[] = {                                         2,
     1,    0,    1,    0,    1,    2,    1,    2,    2,    2,
     2,    2,    2,    1,    1,    1,    1,
 };
-static short yydefred[] = {                                      1,
+static short yydefred[] = {                                      4,
     0,    7,    0,   45,   58,   56,    0,   56,   56,    8,
    46,    9,   11,   48,    0,   47,   49,   50,    0,    0,
-    0,   70,   71,    0,   14,    4,  173,    0,    0,  154,
+    0,   70,   71,    0,   14,    3,  173,    0,    0,  154,
     0,  168,    0,   57,   57,    0,    0,    0,    0,    0,
     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
@@ -107,8 +107,8 @@ static short yydefred[] = {                                      1,
     0,    0,    0,    0,    0,  146,  148,    0,    0,    0,
     0,  174,  140,  134,  135,  136,  137,   52,    0,   59,
     0,   69,    0,    0,    7,  194,  197,  196,  195,    0,
-    0,    0,    0,    0,    0,    4,    4,    4,    4,    4,
-    4,    0,    0,    0,    0,    0,  163,    0,    0,    0,
+    0,    0,    0,    0,    0,    3,    3,    3,    3,    3,
+    3,    0,    0,    0,    0,    0,  163,    0,    0,    0,
     0,   85,    0,  192,    0,  129,    0,    0,    0,    0,
     0,    0,    0,  179,  181,  180,    0,  188,    0,    0,
     0,    0,    0,    0,    0,    0,  124,    0,    0,    0,
@@ -117,14 +117,14 @@ static short yydefred[] = {                                      1,
     0,    0,    0,    0,    0,    0,    0,  119,  120,    0,
     0,    0,    0,    0,    0,    0,    0,    0,    0,   13,
     0,   51,   61,    0,    0,    0,    0,   83,    0,    0,
-   87,    0,    0,    0,    0,    0,    0,    0,    4,  167,
+   87,    0,    0,    0,    0,    0,    0,    0,    3,  167,
   169,    0,    0,    0,    0,    0,    0,    0,  126,    0,
   158,  178,    0,    0,  175,    0,    0,  123,   27,    0,
     0,   19,    0,    0,    0,    0,   73,    0,    0,    0,
     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
     0,    0,   89,    0,    0,   90,    0,    0,  101,    0,
     0,    0,    0,    0,    0,    0,  156,    0,    0,    0,
-    0,    0,    0,    3,    0,    0,  171,    0,    0,    0,
+    0,    0,    0,    2,    0,    0,  171,    0,    0,    0,
    42,    0,   43,    0,    0,    0,    0,  187,    0,    0,
    36,   41,    0,    0,    0,  170,  186,   86,    0,  130,
     0,  132,    0,  125,  177,   65,    0,    0,    0,    0,
@@ -139,12 +139,12 @@ static short yydefred[] = {                                      1,
     0,   33,    0,   23,
 };
 static short yydgoto[] = {                                       1,
-   10,   11,   20,  104,   19,   95,  370,   98,  359,    3,
-   12,   13,   70,  375,  285,   72,   73,   74,   75,   76,
-   77,   78,   79,  291,   81,  292,  281,  283,  286,  294,
-  282,  284,  122,  214,  100,   82,  257,   89,   91,  194,
-  327,  156,  289,  271,  225,   14,   83,  137,   84,   85,
-   86,   87,   15,    2,   16,   17,   18,   93,  278,
+   10,   11,   20,  104,   19,    2,   95,  370,   98,  359,
+    3,   12,   13,   70,  375,  285,   72,   73,   74,   75,
+   76,   77,   78,   79,  291,   81,  292,  281,  283,  286,
+  294,  282,  284,  122,  214,  100,   82,  257,   89,   91,
+  194,  327,  156,  289,  271,  225,   14,   83,  137,   84,
+   85,   86,   87,   15,   16,   17,   18,   93,  278,
 };
 static short yysindex[] = {                                      0,
     0,    0, -132,    0,    0,    0,  -51,    0,    0,    0,
@@ -231,11 +231,11 @@ static short yyrindex[] = {                                      0,
     0,    0,  179,    0,
 };
 static short yygindex[] = {                                      0,
-    0,    0,  196,  425,    0,   -2,    0,   37,  634,  -94,
-    0,    0,    0, -323,  -15, 2445,    0,  999,  414,  417,
-    0,    0,    0,  463,  -43,    0,    0,  321, -198,  103,
-  147,  280,  -91, -185,    1,    0,    0,    0,  464,  -44,
-  222,  338,    0, -179,    0,    0,    0,    0,    0,    0,
+    0,    0,  196,  425,    0,    0,   -2,    0,   37,  634,
+  -94,    0,    0,    0, -323,  -15, 2445,    0,  999,  414,
+  417,    0,    0,    0,  463,  -43,    0,    0,  321, -198,
+  103,  147,  280,  -91, -185,    1,    0,    0,    0,  464,
+  -44,  222,  338,    0, -179,    0,    0,    0,    0,    0,
     0,    0,    0,    0,    0,    0,    0,    0,    0,
 };
 #define YYTABLESIZE 4568
@@ -264,7 +264,7 @@ static short yytable[] = {                                      71,
   307,   21,  180,  226,   21,   21,   21,  345,   21,  350,
    21,   21,   65,   21,  272,   96,  162,  163,  121,  298,
    97,  162,  163,  270,  121,  304,  310,   21,  312,  313,
-  306,   26,   21,   26,   26,  253,    2,  162,  163,  113,
+  306,   26,   21,   26,   26,  253,    1,  162,  163,  113,
   113,  113,  113,  162,  163,  308,  113,  314,  113,  367,
   163,  110,  162,  163,   60,   75,   75,   75,   75,   21,
   162,  163,   75,  162,  163,  381,  330,  113,  113,   44,
@@ -1182,10 +1182,10 @@ static char *yyname[] = {
 };
 static char *yyrule[] = {
 "$accept : prog",
-"$$1 :",
-"prog : $$1 lineseq",
+"prog : progstart lineseq",
 "block : '{' remember lineseq '}'",
 "remember :",
+"progstart :",
 "mblock : '{' mremember lineseq '}'",
 "mremember :",
 "lineseq :",
@@ -1252,8 +1252,8 @@ static char *yyrule[] = {
 "subbody : ';'",
 "package : PACKAGE WORD ';'",
 "package : PACKAGE ';'",
-"$$2 :",
-"use : USE startsub $$2 WORD WORD listexpr ';'",
+"$$1 :",
+"use : USE startsub $$1 WORD WORD listexpr ';'",
 "expr : expr ANDOP expr",
 "expr : expr OROP expr",
 "expr : argexpr",
@@ -1268,8 +1268,8 @@ static char *yyrule[] = {
 "listop : FUNCMETH indirob '(' listexprcom ')'",
 "listop : LSTOP listexpr",
 "listop : FUNC '(' listexprcom ')'",
-"$$3 :",
-"listop : LSTOPSUB startanonsub block $$3 listexpr",
+"$$2 :",
+"listop : LSTOPSUB startanonsub block $$2 listexpr",
 "method : METHOD",
 "method : scalar",
 "subscripted : star '{' expr ';' '}'",
@@ -1395,7 +1395,7 @@ static char *yyrule[] = {
 #define YYMAXDEPTH 500
 #endif
 #endif
-#line 789 "perly.y"
+#line 793 "perly.y"
  /* PROGRAM */
 
 /* more stuff added to make perly_c.diff easier to apply */
@@ -1435,7 +1435,7 @@ yyparse()
     ysave->oldyychar   = yychar;
     ysave->oldyyval    = yyval;
     ysave->oldyylval   = yylval;
-  
+
 #if YYDEBUG
     if ((yys = getenv("YYDEBUG")))
     {
@@ -1499,7 +1499,7 @@ yyloop:
            ysave->yyvs = Renew(yyvs, yystacksize, YYSTYPE);
            ysave->yyss = Renew(yyss, yystacksize, short);
            if (!yyvs || !yyss)
-               goto yyoverflow;
+            goto yyoverflow;
            yyssp = yyss + yyps_index;
            yyvsp = yyvs + yypv_index;
         }
@@ -1552,7 +1552,7 @@ yyinrecovery:
                    ysave->yyvs = Renew(yyvs, yystacksize, YYSTYPE);
                    ysave->yyss = Renew(yyss, yystacksize, short);
                    if (!yyvs || !yyss)
-                       goto yyoverflow;
+                    goto yyoverflow;
                    yyssp = yyss + yyps_index;
                    yyvsp = yyvs + yypv_index;
                 }
@@ -1600,59 +1600,59 @@ yyreduce:
     switch (yyn)
     {
 case 1:
-#line 130 "perly.y"
-{
-#if defined(YYDEBUG) && defined(DEBUGGING)
-                   yydebug = (DEBUG_p_TEST);
-#endif
-                   PL_expect = XSTATE; yyval.ival = block_start(TRUE);
-               }
+#line 131 "perly.y"
+{ yyval.ival = yyvsp[-1].ival; newPROG(block_end(yyvsp[-1].ival,yyvsp[0].opval)); }
 break;
 case 2:
-#line 137 "perly.y"
-{ newPROG(block_end(yyvsp[-1].ival,yyvsp[0].opval)); }
-break;
-case 3:
-#line 142 "perly.y"
+#line 136 "perly.y"
 { if (PL_copline > (line_t)yyvsp[-3].ival)
                              PL_copline = yyvsp[-3].ival;
                          yyval.opval = block_end(yyvsp[-2].ival, yyvsp[-1].opval); }
 break;
-case 4:
-#line 148 "perly.y"
+case 3:
+#line 142 "perly.y"
 { yyval.ival = block_start(TRUE); }
 break;
+case 4:
+#line 146 "perly.y"
+{
+#if defined(YYDEBUG) && defined(DEBUGGING)
+                   yydebug = (DEBUG_p_TEST);
+#endif
+                   PL_expect = XSTATE; yyval.ival = block_start(TRUE);
+               }
+break;
 case 5:
-#line 152 "perly.y"
+#line 156 "perly.y"
 { if (PL_copline > (line_t)yyvsp[-3].ival)
                              PL_copline = yyvsp[-3].ival;
                          yyval.opval = block_end(yyvsp[-2].ival, yyvsp[-1].opval); }
 break;
 case 6:
-#line 158 "perly.y"
+#line 162 "perly.y"
 { yyval.ival = block_start(FALSE); }
 break;
 case 7:
-#line 163 "perly.y"
+#line 167 "perly.y"
 { yyval.opval = Nullop; }
 break;
 case 8:
-#line 165 "perly.y"
+#line 169 "perly.y"
 { yyval.opval = yyvsp[-1].opval; }
 break;
 case 9:
-#line 167 "perly.y"
+#line 171 "perly.y"
 {   yyval.opval = append_list(OP_LINESEQ,
                                (LISTOP*)yyvsp[-1].opval, (LISTOP*)yyvsp[0].opval);
                            PL_pad_reset_pending = TRUE;
                            if (yyvsp[-1].opval && yyvsp[0].opval) PL_hints |= HINT_BLOCK_SCOPE; }
 break;
 case 10:
-#line 175 "perly.y"
+#line 179 "perly.y"
 { yyval.opval = newSTATEOP(0, yyvsp[-1].pval, yyvsp[0].opval); }
 break;
 case 12:
-#line 178 "perly.y"
+#line 182 "perly.y"
 { if (yyvsp[-1].pval != Nullch) {
                              yyval.opval = newSTATEOP(0, yyvsp[-1].pval, newOP(OP_NULL, 0));
                            }
@@ -1663,75 +1663,75 @@ case 12:
                            PL_expect = XSTATE; }
 break;
 case 13:
-#line 187 "perly.y"
+#line 191 "perly.y"
 { yyval.opval = newSTATEOP(0, yyvsp[-2].pval, yyvsp[-1].opval);
                          PL_expect = XSTATE; }
 break;
 case 14:
-#line 193 "perly.y"
+#line 197 "perly.y"
 { yyval.opval = Nullop; }
 break;
 case 15:
-#line 195 "perly.y"
+#line 199 "perly.y"
 { yyval.opval = yyvsp[0].opval; }
 break;
 case 16:
-#line 197 "perly.y"
+#line 201 "perly.y"
 { yyval.opval = newLOGOP(OP_AND, 0, yyvsp[0].opval, yyvsp[-2].opval); }
 break;
 case 17:
-#line 199 "perly.y"
+#line 203 "perly.y"
 { yyval.opval = newLOGOP(OP_OR, 0, yyvsp[0].opval, yyvsp[-2].opval); }
 break;
 case 18:
-#line 201 "perly.y"
+#line 205 "perly.y"
 { yyval.opval = newLOOPOP(OPf_PARENS, 1, scalar(yyvsp[0].opval), yyvsp[-2].opval); }
 break;
 case 19:
-#line 203 "perly.y"
+#line 207 "perly.y"
 { yyval.opval = newLOOPOP(OPf_PARENS, 1, yyvsp[0].opval, yyvsp[-2].opval);}
 break;
 case 20:
-#line 205 "perly.y"
+#line 209 "perly.y"
 { yyval.opval = newFOROP(0, Nullch, yyvsp[-1].ival,
                                        Nullop, yyvsp[0].opval, yyvsp[-2].opval, Nullop); }
 break;
 case 21:
-#line 211 "perly.y"
+#line 215 "perly.y"
 { yyval.opval = Nullop; }
 break;
 case 22:
-#line 213 "perly.y"
+#line 217 "perly.y"
 { (yyvsp[0].opval)->op_flags |= OPf_PARENS; yyval.opval = scope(yyvsp[0].opval); }
 break;
 case 23:
-#line 215 "perly.y"
+#line 219 "perly.y"
 { PL_copline = yyvsp[-5].ival;
                            yyval.opval = newCONDOP(0, yyvsp[-3].opval, scope(yyvsp[-1].opval), yyvsp[0].opval);
                            PL_hints |= HINT_BLOCK_SCOPE; }
 break;
 case 24:
-#line 222 "perly.y"
+#line 226 "perly.y"
 { PL_copline = yyvsp[-6].ival;
                            yyval.opval = block_end(yyvsp[-4].ival,
                                   newCONDOP(0, yyvsp[-3].opval, scope(yyvsp[-1].opval), yyvsp[0].opval)); }
 break;
 case 25:
-#line 226 "perly.y"
+#line 230 "perly.y"
 { PL_copline = yyvsp[-6].ival;
                            yyval.opval = block_end(yyvsp[-4].ival,
                                   newCONDOP(0, yyvsp[-3].opval, scope(yyvsp[-1].opval), yyvsp[0].opval)); }
 break;
 case 26:
-#line 233 "perly.y"
+#line 237 "perly.y"
 { yyval.opval = Nullop; }
 break;
 case 27:
-#line 235 "perly.y"
+#line 239 "perly.y"
 { yyval.opval = scope(yyvsp[0].opval); }
 break;
 case 28:
-#line 240 "perly.y"
+#line 244 "perly.y"
 { PL_copline = yyvsp[-6].ival;
                            yyval.opval = block_end(yyvsp[-4].ival,
                                   newSTATEOP(0, yyvsp[-7].pval,
@@ -1739,7 +1739,7 @@ case 28:
                                                yyvsp[-6].ival, yyvsp[-3].opval, yyvsp[-1].opval, yyvsp[0].opval))); }
 break;
 case 29:
-#line 246 "perly.y"
+#line 250 "perly.y"
 { PL_copline = yyvsp[-6].ival;
                            yyval.opval = block_end(yyvsp[-4].ival,
                                   newSTATEOP(0, yyvsp[-7].pval,
@@ -1747,23 +1747,23 @@ case 29:
                                                yyvsp[-6].ival, yyvsp[-3].opval, yyvsp[-1].opval, yyvsp[0].opval))); }
 break;
 case 30:
-#line 252 "perly.y"
+#line 256 "perly.y"
 { yyval.opval = block_end(yyvsp[-6].ival,
                                 newFOROP(0, yyvsp[-9].pval, yyvsp[-8].ival, yyvsp[-5].opval, yyvsp[-3].opval, yyvsp[-1].opval, yyvsp[0].opval)); }
 break;
 case 31:
-#line 255 "perly.y"
+#line 259 "perly.y"
 { yyval.opval = block_end(yyvsp[-4].ival,
                                 newFOROP(0, yyvsp[-8].pval, yyvsp[-7].ival, mod(yyvsp[-6].opval, OP_ENTERLOOP),
                                          yyvsp[-3].opval, yyvsp[-1].opval, yyvsp[0].opval)); }
 break;
 case 32:
-#line 259 "perly.y"
+#line 263 "perly.y"
 { yyval.opval = block_end(yyvsp[-4].ival,
                                 newFOROP(0, yyvsp[-7].pval, yyvsp[-6].ival, Nullop, yyvsp[-3].opval, yyvsp[-1].opval, yyvsp[0].opval)); }
 break;
 case 33:
-#line 263 "perly.y"
+#line 267 "perly.y"
 { OP *forop;
                          PL_copline = yyvsp[-9].ival;
                          forop = newSTATEOP(0, yyvsp[-10].pval,
@@ -1780,97 +1780,97 @@ case 33:
                          yyval.opval = block_end(yyvsp[-7].ival, forop); }
 break;
 case 34:
-#line 278 "perly.y"
+#line 282 "perly.y"
 { yyval.opval = newSTATEOP(0, yyvsp[-2].pval,
                                 newWHILEOP(0, 1, (LOOP*)Nullop,
                                            NOLINE, Nullop, yyvsp[-1].opval, yyvsp[0].opval)); }
 break;
 case 35:
-#line 285 "perly.y"
+#line 289 "perly.y"
 { yyval.opval = Nullop; }
 break;
 case 37:
-#line 291 "perly.y"
+#line 295 "perly.y"
 { (void)scan_num("1", &yylval); yyval.opval = yylval.opval; }
 break;
 case 39:
-#line 297 "perly.y"
+#line 301 "perly.y"
 { yyval.opval = invert(scalar(yyvsp[0].opval)); }
 break;
 case 40:
-#line 302 "perly.y"
+#line 306 "perly.y"
 { yyval.opval = yyvsp[0].opval; intro_my(); }
 break;
 case 41:
-#line 306 "perly.y"
+#line 310 "perly.y"
 { yyval.opval = yyvsp[0].opval; intro_my(); }
 break;
 case 42:
-#line 310 "perly.y"
+#line 314 "perly.y"
 { yyval.opval = yyvsp[0].opval; intro_my(); }
 break;
 case 43:
-#line 314 "perly.y"
+#line 318 "perly.y"
 { yyval.opval = yyvsp[0].opval; intro_my(); }
 break;
 case 44:
-#line 319 "perly.y"
+#line 323 "perly.y"
 { yyval.pval = Nullch; }
 break;
 case 46:
-#line 325 "perly.y"
+#line 329 "perly.y"
 { yyval.ival = 0; }
 break;
 case 47:
-#line 327 "perly.y"
+#line 331 "perly.y"
 { yyval.ival = 0; }
 break;
 case 48:
-#line 329 "perly.y"
+#line 333 "perly.y"
 { yyval.ival = 0; }
 break;
 case 49:
-#line 331 "perly.y"
+#line 335 "perly.y"
 { yyval.ival = 0; }
 break;
 case 50:
-#line 333 "perly.y"
+#line 337 "perly.y"
 { yyval.ival = 0; }
 break;
 case 51:
-#line 337 "perly.y"
+#line 341 "perly.y"
 { newFORM(yyvsp[-2].ival, yyvsp[-1].opval, yyvsp[0].opval); }
 break;
 case 52:
-#line 340 "perly.y"
+#line 344 "perly.y"
 { yyval.opval = yyvsp[0].opval; }
 break;
 case 53:
-#line 341 "perly.y"
+#line 345 "perly.y"
 { yyval.opval = Nullop; }
 break;
 case 54:
-#line 346 "perly.y"
+#line 350 "perly.y"
 { newMYSUB(yyvsp[-4].ival, yyvsp[-3].opval, yyvsp[-2].opval, yyvsp[-1].opval, yyvsp[0].opval); }
 break;
 case 55:
-#line 351 "perly.y"
+#line 355 "perly.y"
 { newATTRSUB(yyvsp[-4].ival, yyvsp[-3].opval, yyvsp[-2].opval, yyvsp[-1].opval, yyvsp[0].opval); }
 break;
 case 56:
-#line 355 "perly.y"
+#line 359 "perly.y"
 { yyval.ival = start_subparse(FALSE, 0); }
 break;
 case 57:
-#line 359 "perly.y"
+#line 363 "perly.y"
 { yyval.ival = start_subparse(FALSE, CVf_ANON); }
 break;
 case 58:
-#line 363 "perly.y"
+#line 367 "perly.y"
 { yyval.ival = start_subparse(TRUE, 0); }
 break;
 case 59:
-#line 367 "perly.y"
+#line 371 "perly.y"
 { STRLEN n_a; char *name = SvPV(((SVOP*)yyvsp[0].opval)->op_sv,n_a);
                          if (strEQ(name, "BEGIN") || strEQ(name, "END")
                              || strEQ(name, "INIT") || strEQ(name, "CHECK"))
@@ -1878,305 +1878,305 @@ case 59:
                          yyval.opval = yyvsp[0].opval; }
 break;
 case 60:
-#line 376 "perly.y"
+#line 380 "perly.y"
 { yyval.opval = Nullop; }
 break;
 case 62:
-#line 382 "perly.y"
+#line 386 "perly.y"
 { yyval.opval = Nullop; }
 break;
 case 63:
-#line 384 "perly.y"
+#line 388 "perly.y"
 { yyval.opval = yyvsp[0].opval; }
 break;
 case 64:
-#line 386 "perly.y"
+#line 390 "perly.y"
 { yyval.opval = Nullop; }
 break;
 case 65:
-#line 391 "perly.y"
+#line 395 "perly.y"
 { yyval.opval = yyvsp[0].opval; }
 break;
 case 66:
-#line 393 "perly.y"
+#line 397 "perly.y"
 { yyval.opval = Nullop; }
 break;
 case 67:
-#line 397 "perly.y"
+#line 401 "perly.y"
 { yyval.opval = yyvsp[0].opval; }
 break;
 case 68:
-#line 398 "perly.y"
+#line 402 "perly.y"
 { yyval.opval = Nullop; PL_expect = XSTATE; }
 break;
 case 69:
-#line 402 "perly.y"
+#line 406 "perly.y"
 { package(yyvsp[-1].opval); }
 break;
 case 70:
-#line 404 "perly.y"
+#line 408 "perly.y"
 { package(Nullop); }
 break;
 case 71:
-#line 408 "perly.y"
+#line 412 "perly.y"
 { CvSPECIAL_on(PL_compcv); /* It's a BEGIN {} */ }
 break;
 case 72:
-#line 410 "perly.y"
+#line 414 "perly.y"
 { utilize(yyvsp[-6].ival, yyvsp[-5].ival, yyvsp[-3].opval, yyvsp[-2].opval, yyvsp[-1].opval); }
 break;
 case 73:
-#line 415 "perly.y"
+#line 419 "perly.y"
 { yyval.opval = newLOGOP(OP_AND, 0, yyvsp[-2].opval, yyvsp[0].opval); }
 break;
 case 74:
-#line 417 "perly.y"
+#line 421 "perly.y"
 { yyval.opval = newLOGOP(yyvsp[-1].ival, 0, yyvsp[-2].opval, yyvsp[0].opval); }
 break;
 case 76:
-#line 423 "perly.y"
+#line 427 "perly.y"
 { yyval.opval = yyvsp[-1].opval; }
 break;
 case 77:
-#line 425 "perly.y"
+#line 429 "perly.y"
 { yyval.opval = append_elem(OP_LIST, yyvsp[-2].opval, yyvsp[0].opval); }
 break;
 case 79:
-#line 431 "perly.y"
+#line 435 "perly.y"
 { yyval.opval = convert(yyvsp[-2].ival, OPf_STACKED,
                                prepend_elem(OP_LIST, newGVREF(yyvsp[-2].ival,yyvsp[-1].opval), yyvsp[0].opval) ); }
 break;
 case 80:
-#line 434 "perly.y"
+#line 438 "perly.y"
 { yyval.opval = convert(yyvsp[-4].ival, OPf_STACKED,
                                prepend_elem(OP_LIST, newGVREF(yyvsp[-4].ival,yyvsp[-2].opval), yyvsp[-1].opval) ); }
 break;
 case 81:
-#line 437 "perly.y"
+#line 441 "perly.y"
 { yyval.opval = convert(OP_ENTERSUB, OPf_STACKED,
                                append_elem(OP_LIST,
                                    prepend_elem(OP_LIST, scalar(yyvsp[-5].opval), yyvsp[-1].opval),
                                    newUNOP(OP_METHOD, 0, yyvsp[-3].opval))); }
 break;
 case 82:
-#line 442 "perly.y"
+#line 446 "perly.y"
 { yyval.opval = convert(OP_ENTERSUB, OPf_STACKED,
                                append_elem(OP_LIST, scalar(yyvsp[-2].opval),
                                    newUNOP(OP_METHOD, 0, yyvsp[0].opval))); }
 break;
 case 83:
-#line 446 "perly.y"
+#line 450 "perly.y"
 { yyval.opval = convert(OP_ENTERSUB, OPf_STACKED,
                                append_elem(OP_LIST,
                                    prepend_elem(OP_LIST, yyvsp[-1].opval, yyvsp[0].opval),
                                    newUNOP(OP_METHOD, 0, yyvsp[-2].opval))); }
 break;
 case 84:
-#line 451 "perly.y"
+#line 455 "perly.y"
 { yyval.opval = convert(OP_ENTERSUB, OPf_STACKED,
                                append_elem(OP_LIST,
                                    prepend_elem(OP_LIST, yyvsp[-3].opval, yyvsp[-1].opval),
                                    newUNOP(OP_METHOD, 0, yyvsp[-4].opval))); }
 break;
 case 85:
-#line 456 "perly.y"
+#line 460 "perly.y"
 { yyval.opval = convert(yyvsp[-1].ival, 0, yyvsp[0].opval); }
 break;
 case 86:
-#line 458 "perly.y"
+#line 462 "perly.y"
 { yyval.opval = convert(yyvsp[-3].ival, 0, yyvsp[-1].opval); }
 break;
 case 87:
-#line 460 "perly.y"
+#line 464 "perly.y"
 { yyvsp[0].opval = newANONATTRSUB(yyvsp[-1].ival, 0, Nullop, yyvsp[0].opval); }
 break;
 case 88:
-#line 462 "perly.y"
+#line 466 "perly.y"
 { yyval.opval = newUNOP(OP_ENTERSUB, OPf_STACKED,
                                 append_elem(OP_LIST,
                                   prepend_elem(OP_LIST, yyvsp[-2].opval, yyvsp[0].opval), yyvsp[-4].opval)); }
 break;
 case 91:
-#line 476 "perly.y"
+#line 480 "perly.y"
 { yyval.opval = newBINOP(OP_GELEM, 0, yyvsp[-4].opval, scalar(yyvsp[-2].opval)); }
 break;
 case 92:
-#line 478 "perly.y"
+#line 482 "perly.y"
 { yyval.opval = newBINOP(OP_AELEM, 0, oopsAV(yyvsp[-3].opval), scalar(yyvsp[-1].opval)); }
 break;
 case 93:
-#line 480 "perly.y"
+#line 484 "perly.y"
 { yyval.opval = newBINOP(OP_AELEM, 0,
                                        ref(newAVREF(yyvsp[-4].opval),OP_RV2AV),
                                        scalar(yyvsp[-1].opval));}
 break;
 case 94:
-#line 484 "perly.y"
+#line 488 "perly.y"
 { yyval.opval = newBINOP(OP_AELEM, 0,
                                        ref(newAVREF(yyvsp[-3].opval),OP_RV2AV),
                                        scalar(yyvsp[-1].opval));}
 break;
 case 95:
-#line 488 "perly.y"
+#line 492 "perly.y"
 { yyval.opval = newBINOP(OP_HELEM, 0, oopsHV(yyvsp[-4].opval), jmaybe(yyvsp[-2].opval));
                            PL_expect = XOPERATOR; }
 break;
 case 96:
-#line 491 "perly.y"
+#line 495 "perly.y"
 { yyval.opval = newBINOP(OP_HELEM, 0,
                                        ref(newHVREF(yyvsp[-5].opval),OP_RV2HV),
                                        jmaybe(yyvsp[-2].opval));
                            PL_expect = XOPERATOR; }
 break;
 case 97:
-#line 496 "perly.y"
+#line 500 "perly.y"
 { yyval.opval = newBINOP(OP_HELEM, 0,
                                        ref(newHVREF(yyvsp[-4].opval),OP_RV2HV),
                                        jmaybe(yyvsp[-2].opval));
                            PL_expect = XOPERATOR; }
 break;
 case 98:
-#line 501 "perly.y"
+#line 505 "perly.y"
 { yyval.opval = newUNOP(OP_ENTERSUB, OPf_STACKED,
                                   newCVREF(0, scalar(yyvsp[-3].opval))); }
 break;
 case 99:
-#line 504 "perly.y"
+#line 508 "perly.y"
 { yyval.opval = newUNOP(OP_ENTERSUB, OPf_STACKED,
                                   append_elem(OP_LIST, yyvsp[-1].opval,
                                       newCVREF(0, scalar(yyvsp[-4].opval)))); }
 break;
 case 100:
-#line 509 "perly.y"
+#line 513 "perly.y"
 { yyval.opval = newUNOP(OP_ENTERSUB, OPf_STACKED,
                                   append_elem(OP_LIST, yyvsp[-1].opval,
                                               newCVREF(0, scalar(yyvsp[-3].opval)))); }
 break;
 case 101:
-#line 513 "perly.y"
+#line 517 "perly.y"
 { yyval.opval = newUNOP(OP_ENTERSUB, OPf_STACKED,
                                   newCVREF(0, scalar(yyvsp[-2].opval))); }
 break;
 case 102:
-#line 519 "perly.y"
+#line 523 "perly.y"
 { yyval.opval = newASSIGNOP(OPf_STACKED, yyvsp[-2].opval, yyvsp[-1].ival, yyvsp[0].opval); }
 break;
 case 103:
-#line 521 "perly.y"
+#line 525 "perly.y"
 { yyval.opval = newBINOP(yyvsp[-1].ival, 0, scalar(yyvsp[-2].opval), scalar(yyvsp[0].opval)); }
 break;
 case 104:
-#line 523 "perly.y"
+#line 527 "perly.y"
 {   if (yyvsp[-1].ival != OP_REPEAT)
                                scalar(yyvsp[-2].opval);
                            yyval.opval = newBINOP(yyvsp[-1].ival, 0, yyvsp[-2].opval, scalar(yyvsp[0].opval)); }
 break;
 case 105:
-#line 527 "perly.y"
+#line 531 "perly.y"
 { yyval.opval = newBINOP(yyvsp[-1].ival, 0, scalar(yyvsp[-2].opval), scalar(yyvsp[0].opval)); }
 break;
 case 106:
-#line 529 "perly.y"
+#line 533 "perly.y"
 { yyval.opval = newBINOP(yyvsp[-1].ival, 0, scalar(yyvsp[-2].opval), scalar(yyvsp[0].opval)); }
 break;
 case 107:
-#line 531 "perly.y"
+#line 535 "perly.y"
 { yyval.opval = newBINOP(yyvsp[-1].ival, 0, scalar(yyvsp[-2].opval), scalar(yyvsp[0].opval)); }
 break;
 case 108:
-#line 533 "perly.y"
+#line 537 "perly.y"
 { yyval.opval = newBINOP(yyvsp[-1].ival, 0, scalar(yyvsp[-2].opval), scalar(yyvsp[0].opval)); }
 break;
 case 109:
-#line 535 "perly.y"
+#line 539 "perly.y"
 { yyval.opval = newBINOP(yyvsp[-1].ival, 0, scalar(yyvsp[-2].opval), scalar(yyvsp[0].opval)); }
 break;
 case 110:
-#line 537 "perly.y"
+#line 541 "perly.y"
 { yyval.opval = newBINOP(yyvsp[-1].ival, 0, scalar(yyvsp[-2].opval), scalar(yyvsp[0].opval)); }
 break;
 case 111:
-#line 539 "perly.y"
+#line 543 "perly.y"
 { yyval.opval = newRANGE(yyvsp[-1].ival, scalar(yyvsp[-2].opval), scalar(yyvsp[0].opval));}
 break;
 case 112:
-#line 541 "perly.y"
+#line 545 "perly.y"
 { yyval.opval = newLOGOP(OP_AND, 0, yyvsp[-2].opval, yyvsp[0].opval); }
 break;
 case 113:
-#line 543 "perly.y"
+#line 547 "perly.y"
 { yyval.opval = newLOGOP(OP_OR, 0, yyvsp[-2].opval, yyvsp[0].opval); }
 break;
 case 114:
-#line 545 "perly.y"
+#line 549 "perly.y"
 { yyval.opval = bind_match(yyvsp[-1].ival, yyvsp[-2].opval, yyvsp[0].opval); }
 break;
 case 115:
-#line 550 "perly.y"
+#line 554 "perly.y"
 { yyval.opval = newUNOP(OP_NEGATE, 0, scalar(yyvsp[0].opval)); }
 break;
 case 116:
-#line 552 "perly.y"
+#line 556 "perly.y"
 { yyval.opval = yyvsp[0].opval; }
 break;
 case 117:
-#line 554 "perly.y"
+#line 558 "perly.y"
 { yyval.opval = newUNOP(OP_NOT, 0, scalar(yyvsp[0].opval)); }
 break;
 case 118:
-#line 556 "perly.y"
+#line 560 "perly.y"
 { yyval.opval = newUNOP(OP_COMPLEMENT, 0, scalar(yyvsp[0].opval));}
 break;
 case 119:
-#line 558 "perly.y"
+#line 562 "perly.y"
 { yyval.opval = newUNOP(OP_POSTINC, 0,
                                        mod(scalar(yyvsp[-1].opval), OP_POSTINC)); }
 break;
 case 120:
-#line 561 "perly.y"
+#line 565 "perly.y"
 { yyval.opval = newUNOP(OP_POSTDEC, 0,
                                        mod(scalar(yyvsp[-1].opval), OP_POSTDEC)); }
 break;
 case 121:
-#line 564 "perly.y"
+#line 568 "perly.y"
 { yyval.opval = newUNOP(OP_PREINC, 0,
                                        mod(scalar(yyvsp[0].opval), OP_PREINC)); }
 break;
 case 122:
-#line 567 "perly.y"
+#line 571 "perly.y"
 { yyval.opval = newUNOP(OP_PREDEC, 0,
                                        mod(scalar(yyvsp[0].opval), OP_PREDEC)); }
 break;
 case 123:
-#line 574 "perly.y"
+#line 578 "perly.y"
 { yyval.opval = newANONLIST(yyvsp[-1].opval); }
 break;
 case 124:
-#line 576 "perly.y"
+#line 580 "perly.y"
 { yyval.opval = newANONLIST(Nullop); }
 break;
 case 125:
-#line 578 "perly.y"
+#line 582 "perly.y"
 { yyval.opval = newANONHASH(yyvsp[-2].opval); }
 break;
 case 126:
-#line 580 "perly.y"
+#line 584 "perly.y"
 { yyval.opval = newANONHASH(Nullop); }
 break;
 case 127:
-#line 582 "perly.y"
+#line 586 "perly.y"
 { yyval.opval = newANONATTRSUB(yyvsp[-3].ival, yyvsp[-2].opval, yyvsp[-1].opval, yyvsp[0].opval); }
 break;
 case 128:
-#line 588 "perly.y"
+#line 592 "perly.y"
 { yyval.opval = dofile(yyvsp[0].opval); }
 break;
 case 129:
-#line 590 "perly.y"
+#line 594 "perly.y"
 { yyval.opval = newUNOP(OP_NULL, OPf_SPECIAL, scope(yyvsp[0].opval)); }
 break;
 case 130:
-#line 592 "perly.y"
+#line 596 "perly.y"
 { yyval.opval = newUNOP(OP_ENTERSUB,
                            OPf_SPECIAL|OPf_STACKED,
                            prepend_elem(OP_LIST,
@@ -2186,7 +2186,7 @@ case 130:
                                )),Nullop)); dep();}
 break;
 case 131:
-#line 600 "perly.y"
+#line 604 "perly.y"
 { yyval.opval = newUNOP(OP_ENTERSUB,
                            OPf_SPECIAL|OPf_STACKED,
                            append_elem(OP_LIST,
@@ -2197,76 +2197,76 @@ case 131:
                                )))); dep();}
 break;
 case 132:
-#line 609 "perly.y"
+#line 613 "perly.y"
 { yyval.opval = newUNOP(OP_ENTERSUB, OPf_SPECIAL|OPf_STACKED,
                            prepend_elem(OP_LIST,
                                scalar(newCVREF(0,scalar(yyvsp[-2].opval))), Nullop)); dep();}
 break;
 case 133:
-#line 613 "perly.y"
+#line 617 "perly.y"
 { yyval.opval = newUNOP(OP_ENTERSUB, OPf_SPECIAL|OPf_STACKED,
                            prepend_elem(OP_LIST,
                                yyvsp[-1].opval,
                                scalar(newCVREF(0,scalar(yyvsp[-3].opval))))); dep();}
 break;
 case 138:
-#line 625 "perly.y"
+#line 629 "perly.y"
 { yyval.opval = newCONDOP(0, yyvsp[-4].opval, yyvsp[-2].opval, yyvsp[0].opval); }
 break;
 case 139:
-#line 627 "perly.y"
+#line 631 "perly.y"
 { yyval.opval = newUNOP(OP_REFGEN, 0, mod(yyvsp[0].opval,OP_REFGEN)); }
 break;
 case 140:
-#line 629 "perly.y"
+#line 633 "perly.y"
 { yyval.opval = yyvsp[0].opval; }
 break;
 case 141:
-#line 631 "perly.y"
+#line 635 "perly.y"
 { yyval.opval = localize(yyvsp[0].opval,yyvsp[-1].ival); }
 break;
 case 142:
-#line 633 "perly.y"
+#line 637 "perly.y"
 { yyval.opval = sawparens(yyvsp[-1].opval); }
 break;
 case 143:
-#line 635 "perly.y"
+#line 639 "perly.y"
 { yyval.opval = sawparens(newNULLLIST()); }
 break;
 case 144:
-#line 637 "perly.y"
+#line 641 "perly.y"
 { yyval.opval = yyvsp[0].opval; }
 break;
 case 145:
-#line 639 "perly.y"
+#line 643 "perly.y"
 { yyval.opval = yyvsp[0].opval; }
 break;
 case 146:
-#line 641 "perly.y"
+#line 645 "perly.y"
 { yyval.opval = yyvsp[0].opval; }
 break;
 case 147:
-#line 643 "perly.y"
+#line 647 "perly.y"
 { yyval.opval = yyvsp[0].opval; }
 break;
 case 148:
-#line 645 "perly.y"
+#line 649 "perly.y"
 { yyval.opval = newUNOP(OP_AV2ARYLEN, 0, ref(yyvsp[0].opval, OP_AV2ARYLEN));}
 break;
 case 149:
-#line 647 "perly.y"
+#line 651 "perly.y"
 { yyval.opval = yyvsp[0].opval; }
 break;
 case 150:
-#line 649 "perly.y"
+#line 653 "perly.y"
 { yyval.opval = newSLICEOP(0, yyvsp[-1].opval, yyvsp[-4].opval); }
 break;
 case 151:
-#line 651 "perly.y"
+#line 655 "perly.y"
 { yyval.opval = newSLICEOP(0, yyvsp[-1].opval, Nullop); }
 break;
 case 152:
-#line 653 "perly.y"
+#line 657 "perly.y"
 { yyval.opval = prepend_elem(OP_ASLICE,
                                newOP(OP_PUSHMARK, 0),
                                    newLISTOP(OP_ASLICE, 0,
@@ -2274,7 +2274,7 @@ case 152:
                                        ref(yyvsp[-3].opval, OP_ASLICE))); }
 break;
 case 153:
-#line 659 "perly.y"
+#line 663 "perly.y"
 { yyval.opval = prepend_elem(OP_HSLICE,
                                newOP(OP_PUSHMARK, 0),
                                    newLISTOP(OP_HSLICE, 0,
@@ -2283,176 +2283,176 @@ case 153:
                            PL_expect = XOPERATOR; }
 break;
 case 154:
-#line 666 "perly.y"
+#line 670 "perly.y"
 { yyval.opval = yyvsp[0].opval; }
 break;
 case 155:
-#line 668 "perly.y"
+#line 672 "perly.y"
 { yyval.opval = newUNOP(OP_ENTERSUB, 0, scalar(yyvsp[0].opval)); }
 break;
 case 156:
-#line 670 "perly.y"
+#line 674 "perly.y"
 { yyval.opval = newUNOP(OP_ENTERSUB, OPf_STACKED, scalar(yyvsp[-2].opval)); }
 break;
 case 157:
-#line 672 "perly.y"
+#line 676 "perly.y"
 { yyval.opval = newUNOP(OP_ENTERSUB, OPf_STACKED,
                            append_elem(OP_LIST, yyvsp[-1].opval, scalar(yyvsp[-3].opval))); }
 break;
 case 158:
-#line 675 "perly.y"
+#line 679 "perly.y"
 { yyval.opval = newUNOP(OP_ENTERSUB, OPf_STACKED,
                            append_elem(OP_LIST, yyvsp[0].opval, scalar(yyvsp[-1].opval))); }
 break;
 case 159:
-#line 678 "perly.y"
+#line 682 "perly.y"
 { yyval.opval = newOP(yyvsp[0].ival, OPf_SPECIAL);
                            PL_hints |= HINT_BLOCK_SCOPE; }
 break;
 case 160:
-#line 681 "perly.y"
+#line 685 "perly.y"
 { yyval.opval = newLOOPEX(yyvsp[-1].ival,yyvsp[0].opval); }
 break;
 case 161:
-#line 683 "perly.y"
+#line 687 "perly.y"
 { yyval.opval = newUNOP(OP_NOT, 0, scalar(yyvsp[0].opval)); }
 break;
 case 162:
-#line 685 "perly.y"
+#line 689 "perly.y"
 { yyval.opval = newOP(yyvsp[0].ival, 0); }
 break;
 case 163:
-#line 687 "perly.y"
+#line 691 "perly.y"
 { yyval.opval = newUNOP(yyvsp[-1].ival, 0, yyvsp[0].opval); }
 break;
 case 164:
-#line 689 "perly.y"
+#line 693 "perly.y"
 { yyval.opval = newUNOP(yyvsp[-1].ival, 0, yyvsp[0].opval); }
 break;
 case 165:
-#line 691 "perly.y"
+#line 695 "perly.y"
 { yyval.opval = newUNOP(OP_ENTERSUB, OPf_STACKED,
                            append_elem(OP_LIST, yyvsp[0].opval, scalar(yyvsp[-1].opval))); }
 break;
 case 166:
-#line 694 "perly.y"
+#line 698 "perly.y"
 { yyval.opval = newOP(yyvsp[0].ival, 0); }
 break;
 case 167:
-#line 696 "perly.y"
+#line 700 "perly.y"
 { yyval.opval = newOP(yyvsp[-2].ival, 0); }
 break;
 case 168:
-#line 698 "perly.y"
+#line 702 "perly.y"
 { yyval.opval = newUNOP(OP_ENTERSUB, OPf_STACKED,
                                scalar(yyvsp[0].opval)); }
 break;
 case 169:
-#line 701 "perly.y"
+#line 705 "perly.y"
 { yyval.opval = newOP(yyvsp[-2].ival, OPf_SPECIAL); }
 break;
 case 170:
-#line 703 "perly.y"
+#line 707 "perly.y"
 { yyval.opval = newUNOP(yyvsp[-3].ival, 0, yyvsp[-1].opval); }
 break;
 case 171:
-#line 705 "perly.y"
+#line 709 "perly.y"
 { yyval.opval = pmruntime(yyvsp[-3].opval, yyvsp[-1].opval, Nullop); }
 break;
 case 172:
-#line 707 "perly.y"
+#line 711 "perly.y"
 { yyval.opval = pmruntime(yyvsp[-5].opval, yyvsp[-3].opval, yyvsp[-1].opval); }
 break;
 case 175:
-#line 714 "perly.y"
+#line 718 "perly.y"
 { yyval.opval = my_attrs(yyvsp[-1].opval,yyvsp[0].opval); }
 break;
 case 176:
-#line 716 "perly.y"
+#line 720 "perly.y"
 { yyval.opval = localize(yyvsp[0].opval,yyvsp[-1].ival); }
 break;
 case 177:
-#line 721 "perly.y"
+#line 725 "perly.y"
 { yyval.opval = sawparens(yyvsp[-1].opval); }
 break;
 case 178:
-#line 723 "perly.y"
+#line 727 "perly.y"
 { yyval.opval = sawparens(newNULLLIST()); }
 break;
 case 179:
-#line 725 "perly.y"
+#line 729 "perly.y"
 { yyval.opval = yyvsp[0].opval; }
 break;
 case 180:
-#line 727 "perly.y"
+#line 731 "perly.y"
 { yyval.opval = yyvsp[0].opval; }
 break;
 case 181:
-#line 729 "perly.y"
+#line 733 "perly.y"
 { yyval.opval = yyvsp[0].opval; }
 break;
 case 182:
-#line 734 "perly.y"
+#line 738 "perly.y"
 { yyval.opval = Nullop; }
 break;
 case 183:
-#line 736 "perly.y"
+#line 740 "perly.y"
 { yyval.opval = yyvsp[0].opval; }
 break;
 case 184:
-#line 740 "perly.y"
+#line 744 "perly.y"
 { yyval.opval = Nullop; }
 break;
 case 185:
-#line 742 "perly.y"
+#line 746 "perly.y"
 { yyval.opval = yyvsp[0].opval; }
 break;
 case 186:
-#line 744 "perly.y"
+#line 748 "perly.y"
 { yyval.opval = yyvsp[-1].opval; }
 break;
 case 187:
-#line 750 "perly.y"
+#line 754 "perly.y"
 { PL_in_my = 0; yyval.opval = my(yyvsp[0].opval); }
 break;
 case 188:
-#line 754 "perly.y"
+#line 758 "perly.y"
 { yyval.opval = newCVREF(yyvsp[-1].ival,yyvsp[0].opval); }
 break;
 case 189:
-#line 758 "perly.y"
+#line 762 "perly.y"
 { yyval.opval = newSVREF(yyvsp[0].opval); }
 break;
 case 190:
-#line 762 "perly.y"
+#line 766 "perly.y"
 { yyval.opval = newAVREF(yyvsp[0].opval); }
 break;
 case 191:
-#line 766 "perly.y"
+#line 770 "perly.y"
 { yyval.opval = newHVREF(yyvsp[0].opval); }
 break;
 case 192:
-#line 770 "perly.y"
+#line 774 "perly.y"
 { yyval.opval = newAVREF(yyvsp[0].opval); }
 break;
 case 193:
-#line 774 "perly.y"
+#line 778 "perly.y"
 { yyval.opval = newGVREF(0,yyvsp[0].opval); }
 break;
 case 194:
-#line 779 "perly.y"
+#line 783 "perly.y"
 { yyval.opval = scalar(yyvsp[0].opval); }
 break;
 case 195:
-#line 781 "perly.y"
+#line 785 "perly.y"
 { yyval.opval = scalar(yyvsp[0].opval);  }
 break;
 case 196:
-#line 783 "perly.y"
+#line 787 "perly.y"
 { yyval.opval = scope(yyvsp[0].opval); }
 break;
 case 197:
-#line 786 "perly.y"
+#line 790 "perly.y"
 { yyval.opval = yyvsp[0].opval; }
 break;
 #line 2459 "perly.c"
@@ -2510,7 +2510,7 @@ to state %d\n", *yyssp, yystate);
        ysave->yyvs = Renew(yyvs, yystacksize, YYSTYPE);
        ysave->yyss = Renew(yyss, yystacksize, short);
        if (!yyvs || !yyss)
-           goto yyoverflow;
+        goto yyoverflow;
        yyssp = yyss + yyps_index;
        yyvsp = yyvs + yypv_index;
     }
diff --git a/perly.y b/perly.y
index 0fd8f9c..1928b44 100644 (file)
--- a/perly.y
+++ b/perly.y
@@ -83,7 +83,7 @@ static void yydestruct(pTHXo_ void *ptr);
 %token COLONATTR
 
 %type <ival> prog decl format startsub startanonsub startformsub
-%type <ival> remember mremember '&'
+%type <ival> progstart remember mremember '&'
 %type <opval> block mblock lineseq line loop cond else
 %type <opval> expr term subscripted scalar ary hsh arylen star amper sideff
 %type <opval> argexpr nexpr texpr iexpr mexpr mnexpr mtexpr miexpr
@@ -126,15 +126,9 @@ static void yydestruct(pTHXo_ void *ptr);
 %% /* RULES */
 
 /* The whole program */
-prog   :       /* NULL */
-               {
-#if defined(YYDEBUG) && defined(DEBUGGING)
-                   yydebug = (DEBUG_p_TEST);
-#endif
-                   PL_expect = XSTATE; $$ = block_start(TRUE);
-               }
+prog   :       progstart
        /*CONTINUED*/   lineseq
-                       { newPROG(block_end($1,$2)); }
+                       { $$ = $1; newPROG(block_end($1,$2)); }
        ;
 
 /* An ordinary block */
@@ -148,6 +142,16 @@ remember:  /* NULL */      /* start a full lexical scope */
                        { $$ = block_start(TRUE); }
        ;
 
+progstart:
+               {
+#if defined(YYDEBUG) && defined(DEBUGGING)
+                   yydebug = (DEBUG_p_TEST);
+#endif
+                   PL_expect = XSTATE; $$ = block_start(TRUE);
+               }
+       ;
+
+
 mblock :       '{' mremember lineseq '}'
                        { if (PL_copline > (line_t)$1)
                              PL_copline = $1;
@@ -456,7 +460,7 @@ listop      :       LSTOP indirob argexpr          /* print $fh @args */
                        { $$ = convert($1, 0, $2); }
        |       FUNC '(' listexprcom ')'             /* print (@args) */
                        { $$ = convert($1, 0, $3); }
-       |       LSTOPSUB startanonsub block          /* map { foo } ... */ 
+       |       LSTOPSUB startanonsub block          /* map { foo } ... */
                        { $3 = newANONATTRSUB($2, 0, Nullop, $3); }
                    listexpr            %prec LSTOP  /* ... @bar */
                        { $$ = newUNOP(OP_ENTERSUB, OPf_STACKED,
@@ -575,7 +579,7 @@ anonymous:  '[' expr ']'
        |       '[' ']'
                        { $$ = newANONLIST(Nullop); }
        |       HASHBRACK expr ';' '}'  %prec '(' /* { foo => "Bar" } */
-                       { $$ = newANONHASH($2); } 
+                       { $$ = newANONHASH($2); }
        |       HASHBRACK ';' '}'       %prec '(' /* { } (';' by tokener) */
                        { $$ = newANONHASH(Nullop); }
        |       ANONSUB startanonsub proto subattrlist block    %prec '('
@@ -666,7 +670,7 @@ term        :       termbinop
                        { $$ = $1; }
        |       amper                                /* &foo; */
                        { $$ = newUNOP(OP_ENTERSUB, 0, scalar($1)); }
-       |       amper '(' ')'                        /* &foo() */ 
+       |       amper '(' ')'                        /* &foo() */
                        { $$ = newUNOP(OP_ENTERSUB, OPf_STACKED, scalar($1)); }
        |       amper '(' expr ')'                   /* &foo(@args) */
                        { $$ = newUNOP(OP_ENTERSUB, OPf_STACKED,
index c15e95b..8d58419 100644 (file)
@@ -1,5 +1,12 @@
---- perly.c.orig       Sun Jun 10 21:13:50 2001
-+++ perly.c    Sun Jun 10 21:13:51 2001
+--- perly.c.orig       Tue Jun 19 08:39:52 2001
++++ perly.c    Tue Jun 19 08:39:24 2001
+@@ -1,5 +1,5 @@
+ #ifndef lint
+-static char yysccsid[] = "@(#)yaccpar 1.8 (Berkeley) 01/20/91";
++/* static char yysccsid[] = "@(#)yaccpar 1.8 (Berkeley) 01/20/91"; */
+ #endif
+ #define YYBYACC 1
+ #line 16 "perly.y"
 @@ -50,70 +50,9 @@
  #define yylex yylex_r
  #endif
  #define YYERRCODE 256
 -short yylhs[] = {                                        -1,
 +static short yylhs[] = {                                        -1,
-    54,    0,    8,    6,    9,    7,   10,   10,   10,   11,
-    11,   11,   11,   24,   24,   24,   24,   24,   24,   24,
-    14,   14,   14,   13,   13,   42,   42,   12,   12,   12,
+     0,    9,    7,    6,   10,    8,   11,   11,   11,   12,
+    12,   12,   12,   25,   25,   25,   25,   25,   25,   25,
+    15,   15,   15,   14,   14,   43,   43,   13,   13,   13,
 @@ -135,7 +74,7 @@
-    48,   33,   33,   34,   34,   34,   43,   23,   18,   19,
-    20,   21,   22,   35,   35,   35,   35,
+    49,   34,   34,   35,   35,   35,   44,   24,   19,   20,
+    21,   22,   23,   36,   36,   36,   36,
  };
 -short yylen[] = {                                         2,
 +static short yylen[] = {                                         2,
-     0,    2,    4,    0,    4,    0,    0,    2,    2,    2,
+     2,    4,    0,    0,    4,    0,    0,    2,    2,    2,
      1,    2,    3,    1,    1,    3,    3,    3,    3,    3,
      0,    2,    6,    7,    7,    0,    2,    8,    8,   10,
 @@ -157,7 +96,7 @@
      1,    0,    1,    0,    1,    2,    1,    2,    2,    2,
      2,    2,    2,    1,    1,    1,    1,
  };
--short yydefred[] = {                                      1,
-+static short yydefred[] = {                                      1,
+-short yydefred[] = {                                      4,
++static short yydefred[] = {                                      4,
      0,    7,    0,   45,   58,   56,    0,   56,   56,    8,
     46,    9,   11,   48,    0,   47,   49,   50,    0,    0,
-     0,   70,   71,    0,   14,    4,  173,    0,    0,  154,
+     0,   70,   71,    0,   14,    3,  173,    0,    0,  154,
 @@ -199,7 +138,7 @@
      0,   22,    0,    0,    0,   31,    5,    0,   30,    0,
      0,   33,    0,   23,
  };
 -short yydgoto[] = {                                       1,
 +static short yydgoto[] = {                                       1,
-    10,   11,   20,  104,   19,   95,  370,   98,  359,    3,
-    12,   13,   70,  375,  285,   72,   73,   74,   75,   76,
-    77,   78,   79,  291,   81,  292,  281,  283,  286,  294,
+    10,   11,   20,  104,   19,    2,   95,  370,   98,  359,
+     3,   12,   13,   70,  375,  285,   72,   73,   74,   75,
+    76,   77,   78,   79,  291,   81,  292,  281,  283,  286,
 @@ -207,7 +146,7 @@
-   327,  156,  289,  271,  225,   14,   83,  137,   84,   85,
-    86,   87,   15,    2,   16,   17,   18,   93,  278,
+   194,  327,  156,  289,  271,  225,   14,   83,  137,   84,
+    85,   86,   87,   15,   16,   17,   18,   93,  278,
  };
 -short yysindex[] = {                                      0,
 +static short yysindex[] = {                                      0,
  };
 -short yygindex[] = {                                      0,
 +static short yygindex[] = {                                      0,
-     0,    0,  196,  425,    0,   -2,    0,   37,  634,  -94,
-     0,    0,    0, -323,  -15, 2445,    0,  999,  414,  417,
-     0,    0,    0,  463,  -43,    0,    0,  321, -198,  103,
+     0,    0,  196,  425,    0,    0,   -2,    0,   37,  634,
+   -94,    0,    0,    0, -323,  -15, 2445,    0,  999,  414,
+   417,    0,    0,    0,  463,  -43,    0,    0,  321, -198,
 @@ -300,7 +239,7 @@
      0,    0,    0,    0,    0,    0,    0,    0,    0,
  };
 -char *yyrule[] = {
 +static char *yyrule[] = {
  "$accept : prog",
- "$$1 :",
- "prog : $$1 lineseq",
+ "prog : progstart lineseq",
+ "block : '{' remember lineseq '}'",
 @@ -1456,17 +1395,6 @@
  #define YYMAXDEPTH 500
  #endif
 -short yyss[YYSTACKSIZE];
 -YYSTYPE yyvs[YYSTACKSIZE];
 -#define yystacksize YYSTACKSIZE
- #line 789 "perly.y"
+ #line 793 "perly.y"
   /* PROGRAM */
  
 @@ -1477,7 +1405,7 @@
  #define yyparse() Perl_yyparse(pTHX)
  
 -#line 1481 "y.tab.c"
-+#line 1481 "perly.c"
++#line 1409 "perly.c"
  #define YYABORT goto yyabort
  #define YYACCEPT goto yyaccept
  #define YYERROR goto yyerrlab
-@@ -1485,10 +1413,30 @@
+@@ -1485,11 +1413,31 @@
  yyparse()
  {
      register int yym, yyn, yystate;
      register char *yys;
 -    extern char *getenv();
 +#endif
++
 +    struct ysv *ysave;
 +#ifdef USE_ITHREADS
 +    ENTER;                    /* force yydestruct() before we return */
 +    ysave->oldyychar  = yychar;
 +    ysave->oldyyval   = yyval;
 +    ysave->oldyylval  = yylval;
-+  
+-    if (yys = getenv("YYDEBUG"))
 +#if YYDEBUG
-     if (yys = getenv("YYDEBUG"))
++    if ((yys = getenv("YYDEBUG")))
      {
          yyn = *yys;
-@@ -1501,6 +1449,16 @@
+         if (yyn >= '0' && yyn <= '9')
+@@ -1501,12 +1449,22 @@
      yyerrflag = 0;
      yychar = (-1);
  
      yyssp = yyss;
      yyvsp = yyvs;
      *yyssp = yystate = 0;
+ yyloop:
+-    if (yyn = yydefred[yystate]) goto yyreduce;
++    if ((yyn = yydefred[yystate])) goto yyreduce;
+     if (yychar < 0)
+     {
+         if ((yychar = yylex()) < 0) yychar = 0;
 @@ -1516,7 +1474,7 @@
              yys = 0;
              if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
  #endif
          if (yyssp >= yyss + yystacksize - 1)
          {
--            goto yyoverflow;
 +          /*
 +          ** reallocate and recover.  Note that pointers
 +          ** have to be reset, or bad things will happen
 +          ysave->yyvs = Renew(yyvs, yystacksize, YYSTYPE);
 +          ysave->yyss = Renew(yyss, yystacksize, short);
 +          if (!yyvs || !yyss)
-+              goto yyoverflow;
+             goto yyoverflow;
 +          yyssp = yyss + yyps_index;
 +          yyvsp = yyvs + yypv_index;
          }
          *++yyssp = yystate = yytable[yyn];
          *++yyvsp = yylval;
-@@ -1549,12 +1519,12 @@
+@@ -1547,14 +1517,14 @@
+     }
+     if (yyerrflag) goto yyinrecovery;
  #ifdef lint
-     goto yynewerror;
+-    goto yynewerror;
++
  #endif
 -yynewerror:
 +
      yyerror("syntax error");
  #ifdef lint
-     goto yyerrlab;
+-    goto yyerrlab;
++
  #endif
 -yyerrlab:
 +
  #endif
                  if (yyssp >= yyss + yystacksize - 1)
                  {
--                    goto yyoverflow;
 +                  /*
 +                  ** reallocate and recover.  Note that pointers
 +                  ** have to be reset, or bad things will happen
 +                  ysave->yyvs = Renew(yyvs, yystacksize, YYSTYPE);
 +                  ysave->yyss = Renew(yyss, yystacksize, short);
 +                  if (!yyvs || !yyss)
-+                      goto yyoverflow;
+                     goto yyoverflow;
 +                  yyssp = yyss + yyps_index;
 +                  yyvsp = yyvs + yypv_index;
                  }
  #endif
      yym = yylen[yyn];
 @@ -2473,7 +2455,7 @@
- #line 786 "perly.y"
+ #line 790 "perly.y"
  { yyval.opval = yyvsp[0].opval; }
  break;
 -#line 2477 "y.tab.c"
-+#line 2477 "perly.c"
++#line 2459 "perly.c"
      }
      yyssp -= yym;
      yystate = *yyssp;
  #endif
      if (yyssp >= yyss + yystacksize - 1)
      {
--        goto yyoverflow;
 +      /*
 +      ** reallocate and recover.  Note that pointers
 +      ** have to be reset, or bad things will happen
 +      ysave->yyvs = Renew(yyvs, yystacksize, YYSTYPE);
 +      ysave->yyss = Renew(yyss, yystacksize, short);
 +      if (!yyvs || !yyss)
-+          goto yyoverflow;
+         goto yyoverflow;
 +      yyssp = yyss + yyps_index;
 +      yyvsp = yyvs + yypv_index;
      }
index 3c6b437..bc1183f 100644 (file)
@@ -54,29 +54,29 @@ typedef union {
 #line 54 "perly.c"
 #define YYERRCODE 256
 static short yylhs[] = {                                        -1,
-   54,    0,    8,    6,    9,    7,   10,   10,   10,   11,
-   11,   11,   11,   24,   24,   24,   24,   24,   24,   24,
-   14,   14,   14,   13,   13,   42,   42,   12,   12,   12,
-   12,   12,   12,   12,   26,   26,   27,   27,   28,   29,
-   30,   31,   32,   53,   53,    1,    1,    1,    1,    1,
-    2,   38,   38,   46,   55,    3,    4,    5,   39,   40,
-   40,   44,   44,   44,   45,   45,   41,   41,   56,   56,
-   58,   57,   15,   15,   15,   25,   25,   25,   36,   36,
-   36,   36,   36,   36,   36,   36,   59,   36,   37,   37,
+    0,    9,    7,    6,   10,    8,   11,   11,   11,   12,
+   12,   12,   12,   25,   25,   25,   25,   25,   25,   25,
+   15,   15,   15,   14,   14,   43,   43,   13,   13,   13,
+   13,   13,   13,   13,   27,   27,   28,   28,   29,   30,
+   31,   32,   33,   54,   54,    1,    1,    1,    1,    1,
+    2,   39,   39,   47,   55,    3,    4,    5,   40,   41,
+   41,   45,   45,   45,   46,   46,   42,   42,   56,   56,
+   58,   57,   16,   16,   16,   26,   26,   26,   37,   37,
+   37,   37,   37,   37,   37,   37,   59,   37,   38,   38,
+   18,   18,   18,   18,   18,   18,   18,   18,   18,   18,
+   18,   50,   50,   50,   50,   50,   50,   50,   50,   50,
+   50,   50,   50,   50,   51,   51,   51,   51,   51,   51,
+   51,   51,   52,   52,   52,   52,   52,   53,   53,   53,
+   53,   53,   53,   17,   17,   17,   17,   17,   17,   17,
    17,   17,   17,   17,   17,   17,   17,   17,   17,   17,
-   17,   49,   49,   49,   49,   49,   49,   49,   49,   49,
-   49,   49,   49,   49,   50,   50,   50,   50,   50,   50,
-   50,   50,   51,   51,   51,   51,   51,   52,   52,   52,
-   52,   52,   52,   16,   16,   16,   16,   16,   16,   16,
-   16,   16,   16,   16,   16,   16,   16,   16,   16,   16,
-   16,   16,   16,   16,   16,   16,   16,   16,   16,   16,
-   16,   16,   16,   16,   16,   16,   16,   16,   16,   16,
-   16,   16,   16,   16,   47,   47,   48,   48,   48,   48,
-   48,   33,   33,   34,   34,   34,   43,   23,   18,   19,
-   20,   21,   22,   35,   35,   35,   35,
+   17,   17,   17,   17,   17,   17,   17,   17,   17,   17,
+   17,   17,   17,   17,   17,   17,   17,   17,   17,   17,
+   17,   17,   17,   17,   48,   48,   49,   49,   49,   49,
+   49,   34,   34,   35,   35,   35,   44,   24,   19,   20,
+   21,   22,   23,   36,   36,   36,   36,
 };
 static short yylen[] = {                                         2,
-    0,    2,    4,    0,    4,    0,    0,    2,    2,    2,
+    2,    4,    0,    0,    4,    0,    0,    2,    2,    2,
     1,    2,    3,    1,    1,    3,    3,    3,    3,    3,
     0,    2,    6,    7,    7,    0,    2,    8,    8,   10,
     9,    8,   11,    3,    0,    1,    0,    1,    1,    1,
@@ -97,10 +97,10 @@ static short yylen[] = {                                         2,
     1,    0,    1,    0,    1,    2,    1,    2,    2,    2,
     2,    2,    2,    1,    1,    1,    1,
 };
-static short yydefred[] = {                                      1,
+static short yydefred[] = {                                      4,
     0,    7,    0,   45,   58,   56,    0,   56,   56,    8,
    46,    9,   11,   48,    0,   47,   49,   50,    0,    0,
-    0,   70,   71,    0,   14,    4,  173,    0,    0,  154,
+    0,   70,   71,    0,   14,    3,  173,    0,    0,  154,
     0,  168,    0,   57,   57,    0,    0,    0,    0,    0,
     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
@@ -108,8 +108,8 @@ static short yydefred[] = {                                      1,
     0,    0,    0,    0,    0,  146,  148,    0,    0,    0,
     0,  174,  140,  134,  135,  136,  137,   52,    0,   59,
     0,   69,    0,    0,    7,  194,  197,  196,  195,    0,
-    0,    0,    0,    0,    0,    4,    4,    4,    4,    4,
-    4,    0,    0,    0,    0,    0,  163,    0,    0,    0,
+    0,    0,    0,    0,    0,    3,    3,    3,    3,    3,
+    3,    0,    0,    0,    0,    0,  163,    0,    0,    0,
     0,   85,    0,  192,    0,  129,    0,    0,    0,    0,
     0,    0,    0,  179,  181,  180,    0,  188,    0,    0,
     0,    0,    0,    0,    0,    0,  124,    0,    0,    0,
@@ -118,14 +118,14 @@ static short yydefred[] = {                                      1,
     0,    0,    0,    0,    0,    0,    0,  119,  120,    0,
     0,    0,    0,    0,    0,    0,    0,    0,    0,   13,
     0,   51,   61,    0,    0,    0,    0,   83,    0,    0,
-   87,    0,    0,    0,    0,    0,    0,    0,    4,  167,
+   87,    0,    0,    0,    0,    0,    0,    0,    3,  167,
   169,    0,    0,    0,    0,    0,    0,    0,  126,    0,
   158,  178,    0,    0,  175,    0,    0,  123,   27,    0,
     0,   19,    0,    0,    0,    0,   73,    0,    0,    0,
     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
     0,    0,   89,    0,    0,   90,    0,    0,  101,    0,
     0,    0,    0,    0,    0,    0,  156,    0,    0,    0,
-    0,    0,    0,    3,    0,    0,  171,    0,    0,    0,
+    0,    0,    0,    2,    0,    0,  171,    0,    0,    0,
    42,    0,   43,    0,    0,    0,    0,  187,    0,    0,
    36,   41,    0,    0,    0,  170,  186,   86,    0,  130,
     0,  132,    0,  125,  177,   65,    0,    0,    0,    0,
@@ -140,12 +140,12 @@ static short yydefred[] = {                                      1,
     0,   33,    0,   23,
 };
 static short yydgoto[] = {                                       1,
-   10,   11,   20,  104,   19,   95,  370,   98,  359,    3,
-   12,   13,   70,  375,  285,   72,   73,   74,   75,   76,
-   77,   78,   79,  291,   81,  292,  281,  283,  286,  294,
-  282,  284,  122,  214,  100,   82,  257,   89,   91,  194,
-  327,  156,  289,  271,  225,   14,   83,  137,   84,   85,
-   86,   87,   15,    2,   16,   17,   18,   93,  278,
+   10,   11,   20,  104,   19,    2,   95,  370,   98,  359,
+    3,   12,   13,   70,  375,  285,   72,   73,   74,   75,
+   76,   77,   78,   79,  291,   81,  292,  281,  283,  286,
+  294,  282,  284,  122,  214,  100,   82,  257,   89,   91,
+  194,  327,  156,  289,  271,  225,   14,   83,  137,   84,
+   85,   86,   87,   15,   16,   17,   18,   93,  278,
 };
 static short yysindex[] = {                                      0,
     0,    0, -132,    0,    0,    0,  -51,    0,    0,    0,
@@ -232,11 +232,11 @@ static short yyrindex[] = {                                      0,
     0,    0,  179,    0,
 };
 static short yygindex[] = {                                      0,
-    0,    0,  196,  425,    0,   -2,    0,   37,  634,  -94,
-    0,    0,    0, -323,  -15, 2445,    0,  999,  414,  417,
-    0,    0,    0,  463,  -43,    0,    0,  321, -198,  103,
-  147,  280,  -91, -185,    1,    0,    0,    0,  464,  -44,
-  222,  338,    0, -179,    0,    0,    0,    0,    0,    0,
+    0,    0,  196,  425,    0,    0,   -2,    0,   37,  634,
+  -94,    0,    0,    0, -323,  -15, 2445,    0,  999,  414,
+  417,    0,    0,    0,  463,  -43,    0,    0,  321, -198,
+  103,  147,  280,  -91, -185,    1,    0,    0,    0,  464,
+  -44,  222,  338,    0, -179,    0,    0,    0,    0,    0,
     0,    0,    0,    0,    0,    0,    0,    0,    0,
 };
 #define YYTABLESIZE 4568
@@ -265,7 +265,7 @@ static short yytable[] = {                                      71,
   307,   21,  180,  226,   21,   21,   21,  345,   21,  350,
    21,   21,   65,   21,  272,   96,  162,  163,  121,  298,
    97,  162,  163,  270,  121,  304,  310,   21,  312,  313,
-  306,   26,   21,   26,   26,  253,    2,  162,  163,  113,
+  306,   26,   21,   26,   26,  253,    1,  162,  163,  113,
   113,  113,  113,  162,  163,  308,  113,  314,  113,  367,
   163,  110,  162,  163,   60,   75,   75,   75,   75,   21,
   162,  163,   75,  162,  163,  381,  330,  113,  113,   44,
@@ -1183,10 +1183,10 @@ static char *yyname[] = {
 };
 static char *yyrule[] = {
 "$accept : prog",
-"$$1 :",
-"prog : $$1 lineseq",
+"prog : progstart lineseq",
 "block : '{' remember lineseq '}'",
 "remember :",
+"progstart :",
 "mblock : '{' mremember lineseq '}'",
 "mremember :",
 "lineseq :",
@@ -1253,8 +1253,8 @@ static char *yyrule[] = {
 "subbody : ';'",
 "package : PACKAGE WORD ';'",
 "package : PACKAGE ';'",
-"$$2 :",
-"use : USE startsub $$2 WORD WORD listexpr ';'",
+"$$1 :",
+"use : USE startsub $$1 WORD WORD listexpr ';'",
 "expr : expr ANDOP expr",
 "expr : expr OROP expr",
 "expr : argexpr",
@@ -1269,8 +1269,8 @@ static char *yyrule[] = {
 "listop : FUNCMETH indirob '(' listexprcom ')'",
 "listop : LSTOP listexpr",
 "listop : FUNC '(' listexprcom ')'",
-"$$3 :",
-"listop : LSTOPSUB startanonsub block $$3 listexpr",
+"$$2 :",
+"listop : LSTOPSUB startanonsub block $$2 listexpr",
 "method : METHOD",
 "method : scalar",
 "subscripted : star '{' expr ';' '}'",
@@ -1396,7 +1396,7 @@ static char *yyrule[] = {
 #define YYMAXDEPTH 500
 #endif
 #endif
-#line 789 "perly.y"
+#line 793 "perly.y"
  /* PROGRAM */
 
 /* more stuff added to make perly_c.diff easier to apply */
@@ -1406,7 +1406,7 @@ static char *yyrule[] = {
 #endif
 #define yyparse() Perl_yyparse(pTHX)
 
-#line 1481 "perly.c"
+#line 1409 "perly.c"
 #define YYABORT goto yyabort
 #define YYACCEPT goto yyaccept
 #define YYERROR goto yyerrlab
@@ -1436,9 +1436,9 @@ yyparse()
     ysave->oldyychar   = yychar;
     ysave->oldyyval    = yyval;
     ysave->oldyylval   = yylval;
-  
+
 #if YYDEBUG
-    if (yys = getenv("YYDEBUG"))
+    if ((yys = getenv("YYDEBUG")))
     {
         yyn = *yys;
         if (yyn >= '0' && yyn <= '9')
@@ -1466,7 +1466,7 @@ yyparse()
     *yyssp = yystate = 0;
 
 yyloop:
-    if (yyn = yydefred[yystate]) goto yyreduce;
+    if ((yyn = yydefred[yystate])) goto yyreduce;
     if (yychar < 0)
     {
         if ((yychar = yylex()) < 0) yychar = 0;
@@ -1501,7 +1501,7 @@ yyloop:
            ysave->yyvs = Renew(yyvs, yystacksize, YYSTYPE);
            ysave->yyss = Renew(yyss, yystacksize, short);
            if (!yyvs || !yyss)
-               goto yyoverflow;
+            goto yyoverflow;
            yyssp = yyss + yyps_index;
            yyvsp = yyvs + yypv_index;
         }
@@ -1554,7 +1554,7 @@ yyinrecovery:
                    ysave->yyvs = Renew(yyvs, yystacksize, YYSTYPE);
                    ysave->yyss = Renew(yyss, yystacksize, short);
                    if (!yyvs || !yyss)
-                       goto yyoverflow;
+                    goto yyoverflow;
                    yyssp = yyss + yyps_index;
                    yyvsp = yyvs + yypv_index;
                 }
@@ -1602,59 +1602,59 @@ yyreduce:
     switch (yyn)
     {
 case 1:
-#line 130 "perly.y"
-{
-#if defined(YYDEBUG) && defined(DEBUGGING)
-                   yydebug = (DEBUG_p_TEST);
-#endif
-                   PL_expect = XSTATE; yyval.ival = block_start(TRUE);
-               }
+#line 131 "perly.y"
+{ yyval.ival = yyvsp[-1].ival; newPROG(block_end(yyvsp[-1].ival,yyvsp[0].opval)); }
 break;
 case 2:
-#line 137 "perly.y"
-{ newPROG(block_end(yyvsp[-1].ival,yyvsp[0].opval)); }
-break;
-case 3:
-#line 142 "perly.y"
+#line 136 "perly.y"
 { if (PL_copline > (line_t)yyvsp[-3].ival)
                              PL_copline = yyvsp[-3].ival;
                          yyval.opval = block_end(yyvsp[-2].ival, yyvsp[-1].opval); }
 break;
-case 4:
-#line 148 "perly.y"
+case 3:
+#line 142 "perly.y"
 { yyval.ival = block_start(TRUE); }
 break;
+case 4:
+#line 146 "perly.y"
+{
+#if defined(YYDEBUG) && defined(DEBUGGING)
+                   yydebug = (DEBUG_p_TEST);
+#endif
+                   PL_expect = XSTATE; yyval.ival = block_start(TRUE);
+               }
+break;
 case 5:
-#line 152 "perly.y"
+#line 156 "perly.y"
 { if (PL_copline > (line_t)yyvsp[-3].ival)
                              PL_copline = yyvsp[-3].ival;
                          yyval.opval = block_end(yyvsp[-2].ival, yyvsp[-1].opval); }
 break;
 case 6:
-#line 158 "perly.y"
+#line 162 "perly.y"
 { yyval.ival = block_start(FALSE); }
 break;
 case 7:
-#line 163 "perly.y"
+#line 167 "perly.y"
 { yyval.opval = Nullop; }
 break;
 case 8:
-#line 165 "perly.y"
+#line 169 "perly.y"
 { yyval.opval = yyvsp[-1].opval; }
 break;
 case 9:
-#line 167 "perly.y"
+#line 171 "perly.y"
 {   yyval.opval = append_list(OP_LINESEQ,
                                (LISTOP*)yyvsp[-1].opval, (LISTOP*)yyvsp[0].opval);
                            PL_pad_reset_pending = TRUE;
                            if (yyvsp[-1].opval && yyvsp[0].opval) PL_hints |= HINT_BLOCK_SCOPE; }
 break;
 case 10:
-#line 175 "perly.y"
+#line 179 "perly.y"
 { yyval.opval = newSTATEOP(0, yyvsp[-1].pval, yyvsp[0].opval); }
 break;
 case 12:
-#line 178 "perly.y"
+#line 182 "perly.y"
 { if (yyvsp[-1].pval != Nullch) {
                              yyval.opval = newSTATEOP(0, yyvsp[-1].pval, newOP(OP_NULL, 0));
                            }
@@ -1665,75 +1665,75 @@ case 12:
                            PL_expect = XSTATE; }
 break;
 case 13:
-#line 187 "perly.y"
+#line 191 "perly.y"
 { yyval.opval = newSTATEOP(0, yyvsp[-2].pval, yyvsp[-1].opval);
                          PL_expect = XSTATE; }
 break;
 case 14:
-#line 193 "perly.y"
+#line 197 "perly.y"
 { yyval.opval = Nullop; }
 break;
 case 15:
-#line 195 "perly.y"
+#line 199 "perly.y"
 { yyval.opval = yyvsp[0].opval; }
 break;
 case 16:
-#line 197 "perly.y"
+#line 201 "perly.y"
 { yyval.opval = newLOGOP(OP_AND, 0, yyvsp[0].opval, yyvsp[-2].opval); }
 break;
 case 17:
-#line 199 "perly.y"
+#line 203 "perly.y"
 { yyval.opval = newLOGOP(OP_OR, 0, yyvsp[0].opval, yyvsp[-2].opval); }
 break;
 case 18:
-#line 201 "perly.y"
+#line 205 "perly.y"
 { yyval.opval = newLOOPOP(OPf_PARENS, 1, scalar(yyvsp[0].opval), yyvsp[-2].opval); }
 break;
 case 19:
-#line 203 "perly.y"
+#line 207 "perly.y"
 { yyval.opval = newLOOPOP(OPf_PARENS, 1, yyvsp[0].opval, yyvsp[-2].opval);}
 break;
 case 20:
-#line 205 "perly.y"
+#line 209 "perly.y"
 { yyval.opval = newFOROP(0, Nullch, yyvsp[-1].ival,
                                        Nullop, yyvsp[0].opval, yyvsp[-2].opval, Nullop); }
 break;
 case 21:
-#line 211 "perly.y"
+#line 215 "perly.y"
 { yyval.opval = Nullop; }
 break;
 case 22:
-#line 213 "perly.y"
+#line 217 "perly.y"
 { (yyvsp[0].opval)->op_flags |= OPf_PARENS; yyval.opval = scope(yyvsp[0].opval); }
 break;
 case 23:
-#line 215 "perly.y"
+#line 219 "perly.y"
 { PL_copline = yyvsp[-5].ival;
                            yyval.opval = newCONDOP(0, yyvsp[-3].opval, scope(yyvsp[-1].opval), yyvsp[0].opval);
                            PL_hints |= HINT_BLOCK_SCOPE; }
 break;
 case 24:
-#line 222 "perly.y"
+#line 226 "perly.y"
 { PL_copline = yyvsp[-6].ival;
                            yyval.opval = block_end(yyvsp[-4].ival,
                                   newCONDOP(0, yyvsp[-3].opval, scope(yyvsp[-1].opval), yyvsp[0].opval)); }
 break;
 case 25:
-#line 226 "perly.y"
+#line 230 "perly.y"
 { PL_copline = yyvsp[-6].ival;
                            yyval.opval = block_end(yyvsp[-4].ival,
                                   newCONDOP(0, yyvsp[-3].opval, scope(yyvsp[-1].opval), yyvsp[0].opval)); }
 break;
 case 26:
-#line 233 "perly.y"
+#line 237 "perly.y"
 { yyval.opval = Nullop; }
 break;
 case 27:
-#line 235 "perly.y"
+#line 239 "perly.y"
 { yyval.opval = scope(yyvsp[0].opval); }
 break;
 case 28:
-#line 240 "perly.y"
+#line 244 "perly.y"
 { PL_copline = yyvsp[-6].ival;
                            yyval.opval = block_end(yyvsp[-4].ival,
                                   newSTATEOP(0, yyvsp[-7].pval,
@@ -1741,7 +1741,7 @@ case 28:
                                                yyvsp[-6].ival, yyvsp[-3].opval, yyvsp[-1].opval, yyvsp[0].opval))); }
 break;
 case 29:
-#line 246 "perly.y"
+#line 250 "perly.y"
 { PL_copline = yyvsp[-6].ival;
                            yyval.opval = block_end(yyvsp[-4].ival,
                                   newSTATEOP(0, yyvsp[-7].pval,
@@ -1749,23 +1749,23 @@ case 29:
                                                yyvsp[-6].ival, yyvsp[-3].opval, yyvsp[-1].opval, yyvsp[0].opval))); }
 break;
 case 30:
-#line 252 "perly.y"
+#line 256 "perly.y"
 { yyval.opval = block_end(yyvsp[-6].ival,
                                 newFOROP(0, yyvsp[-9].pval, yyvsp[-8].ival, yyvsp[-5].opval, yyvsp[-3].opval, yyvsp[-1].opval, yyvsp[0].opval)); }
 break;
 case 31:
-#line 255 "perly.y"
+#line 259 "perly.y"
 { yyval.opval = block_end(yyvsp[-4].ival,
                                 newFOROP(0, yyvsp[-8].pval, yyvsp[-7].ival, mod(yyvsp[-6].opval, OP_ENTERLOOP),
                                          yyvsp[-3].opval, yyvsp[-1].opval, yyvsp[0].opval)); }
 break;
 case 32:
-#line 259 "perly.y"
+#line 263 "perly.y"
 { yyval.opval = block_end(yyvsp[-4].ival,
                                 newFOROP(0, yyvsp[-7].pval, yyvsp[-6].ival, Nullop, yyvsp[-3].opval, yyvsp[-1].opval, yyvsp[0].opval)); }
 break;
 case 33:
-#line 263 "perly.y"
+#line 267 "perly.y"
 { OP *forop;
                          PL_copline = yyvsp[-9].ival;
                          forop = newSTATEOP(0, yyvsp[-10].pval,
@@ -1782,97 +1782,97 @@ case 33:
                          yyval.opval = block_end(yyvsp[-7].ival, forop); }
 break;
 case 34:
-#line 278 "perly.y"
+#line 282 "perly.y"
 { yyval.opval = newSTATEOP(0, yyvsp[-2].pval,
                                 newWHILEOP(0, 1, (LOOP*)Nullop,
                                            NOLINE, Nullop, yyvsp[-1].opval, yyvsp[0].opval)); }
 break;
 case 35:
-#line 285 "perly.y"
+#line 289 "perly.y"
 { yyval.opval = Nullop; }
 break;
 case 37:
-#line 291 "perly.y"
+#line 295 "perly.y"
 { (void)scan_num("1", &yylval); yyval.opval = yylval.opval; }
 break;
 case 39:
-#line 297 "perly.y"
+#line 301 "perly.y"
 { yyval.opval = invert(scalar(yyvsp[0].opval)); }
 break;
 case 40:
-#line 302 "perly.y"
+#line 306 "perly.y"
 { yyval.opval = yyvsp[0].opval; intro_my(); }
 break;
 case 41:
-#line 306 "perly.y"
+#line 310 "perly.y"
 { yyval.opval = yyvsp[0].opval; intro_my(); }
 break;
 case 42:
-#line 310 "perly.y"
+#line 314 "perly.y"
 { yyval.opval = yyvsp[0].opval; intro_my(); }
 break;
 case 43:
-#line 314 "perly.y"
+#line 318 "perly.y"
 { yyval.opval = yyvsp[0].opval; intro_my(); }
 break;
 case 44:
-#line 319 "perly.y"
+#line 323 "perly.y"
 { yyval.pval = Nullch; }
 break;
 case 46:
-#line 325 "perly.y"
+#line 329 "perly.y"
 { yyval.ival = 0; }
 break;
 case 47:
-#line 327 "perly.y"
+#line 331 "perly.y"
 { yyval.ival = 0; }
 break;
 case 48:
-#line 329 "perly.y"
+#line 333 "perly.y"
 { yyval.ival = 0; }
 break;
 case 49:
-#line 331 "perly.y"
+#line 335 "perly.y"
 { yyval.ival = 0; }
 break;
 case 50:
-#line 333 "perly.y"
+#line 337 "perly.y"
 { yyval.ival = 0; }
 break;
 case 51:
-#line 337 "perly.y"
+#line 341 "perly.y"
 { newFORM(yyvsp[-2].ival, yyvsp[-1].opval, yyvsp[0].opval); }
 break;
 case 52:
-#line 340 "perly.y"
+#line 344 "perly.y"
 { yyval.opval = yyvsp[0].opval; }
 break;
 case 53:
-#line 341 "perly.y"
+#line 345 "perly.y"
 { yyval.opval = Nullop; }
 break;
 case 54:
-#line 346 "perly.y"
+#line 350 "perly.y"
 { newMYSUB(yyvsp[-4].ival, yyvsp[-3].opval, yyvsp[-2].opval, yyvsp[-1].opval, yyvsp[0].opval); }
 break;
 case 55:
-#line 351 "perly.y"
+#line 355 "perly.y"
 { newATTRSUB(yyvsp[-4].ival, yyvsp[-3].opval, yyvsp[-2].opval, yyvsp[-1].opval, yyvsp[0].opval); }
 break;
 case 56:
-#line 355 "perly.y"
+#line 359 "perly.y"
 { yyval.ival = start_subparse(FALSE, 0); }
 break;
 case 57:
-#line 359 "perly.y"
+#line 363 "perly.y"
 { yyval.ival = start_subparse(FALSE, CVf_ANON); }
 break;
 case 58:
-#line 363 "perly.y"
+#line 367 "perly.y"
 { yyval.ival = start_subparse(TRUE, 0); }
 break;
 case 59:
-#line 367 "perly.y"
+#line 371 "perly.y"
 { STRLEN n_a; char *name = SvPV(((SVOP*)yyvsp[0].opval)->op_sv,n_a);
                          if (strEQ(name, "BEGIN") || strEQ(name, "END")
                              || strEQ(name, "INIT") || strEQ(name, "CHECK"))
@@ -1880,305 +1880,305 @@ case 59:
                          yyval.opval = yyvsp[0].opval; }
 break;
 case 60:
-#line 376 "perly.y"
+#line 380 "perly.y"
 { yyval.opval = Nullop; }
 break;
 case 62:
-#line 382 "perly.y"
+#line 386 "perly.y"
 { yyval.opval = Nullop; }
 break;
 case 63:
-#line 384 "perly.y"
+#line 388 "perly.y"
 { yyval.opval = yyvsp[0].opval; }
 break;
 case 64:
-#line 386 "perly.y"
+#line 390 "perly.y"
 { yyval.opval = Nullop; }
 break;
 case 65:
-#line 391 "perly.y"
+#line 395 "perly.y"
 { yyval.opval = yyvsp[0].opval; }
 break;
 case 66:
-#line 393 "perly.y"
+#line 397 "perly.y"
 { yyval.opval = Nullop; }
 break;
 case 67:
-#line 397 "perly.y"
+#line 401 "perly.y"
 { yyval.opval = yyvsp[0].opval; }
 break;
 case 68:
-#line 398 "perly.y"
+#line 402 "perly.y"
 { yyval.opval = Nullop; PL_expect = XSTATE; }
 break;
 case 69:
-#line 402 "perly.y"
+#line 406 "perly.y"
 { package(yyvsp[-1].opval); }
 break;
 case 70:
-#line 404 "perly.y"
+#line 408 "perly.y"
 { package(Nullop); }
 break;
 case 71:
-#line 408 "perly.y"
+#line 412 "perly.y"
 { CvSPECIAL_on(PL_compcv); /* It's a BEGIN {} */ }
 break;
 case 72:
-#line 410 "perly.y"
+#line 414 "perly.y"
 { utilize(yyvsp[-6].ival, yyvsp[-5].ival, yyvsp[-3].opval, yyvsp[-2].opval, yyvsp[-1].opval); }
 break;
 case 73:
-#line 415 "perly.y"
+#line 419 "perly.y"
 { yyval.opval = newLOGOP(OP_AND, 0, yyvsp[-2].opval, yyvsp[0].opval); }
 break;
 case 74:
-#line 417 "perly.y"
+#line 421 "perly.y"
 { yyval.opval = newLOGOP(yyvsp[-1].ival, 0, yyvsp[-2].opval, yyvsp[0].opval); }
 break;
 case 76:
-#line 423 "perly.y"
+#line 427 "perly.y"
 { yyval.opval = yyvsp[-1].opval; }
 break;
 case 77:
-#line 425 "perly.y"
+#line 429 "perly.y"
 { yyval.opval = append_elem(OP_LIST, yyvsp[-2].opval, yyvsp[0].opval); }
 break;
 case 79:
-#line 431 "perly.y"
+#line 435 "perly.y"
 { yyval.opval = convert(yyvsp[-2].ival, OPf_STACKED,
                                prepend_elem(OP_LIST, newGVREF(yyvsp[-2].ival,yyvsp[-1].opval), yyvsp[0].opval) ); }
 break;
 case 80:
-#line 434 "perly.y"
+#line 438 "perly.y"
 { yyval.opval = convert(yyvsp[-4].ival, OPf_STACKED,
                                prepend_elem(OP_LIST, newGVREF(yyvsp[-4].ival,yyvsp[-2].opval), yyvsp[-1].opval) ); }
 break;
 case 81:
-#line 437 "perly.y"
+#line 441 "perly.y"
 { yyval.opval = convert(OP_ENTERSUB, OPf_STACKED,
                                append_elem(OP_LIST,
                                    prepend_elem(OP_LIST, scalar(yyvsp[-5].opval), yyvsp[-1].opval),
                                    newUNOP(OP_METHOD, 0, yyvsp[-3].opval))); }
 break;
 case 82:
-#line 442 "perly.y"
+#line 446 "perly.y"
 { yyval.opval = convert(OP_ENTERSUB, OPf_STACKED,
                                append_elem(OP_LIST, scalar(yyvsp[-2].opval),
                                    newUNOP(OP_METHOD, 0, yyvsp[0].opval))); }
 break;
 case 83:
-#line 446 "perly.y"
+#line 450 "perly.y"
 { yyval.opval = convert(OP_ENTERSUB, OPf_STACKED,
                                append_elem(OP_LIST,
                                    prepend_elem(OP_LIST, yyvsp[-1].opval, yyvsp[0].opval),
                                    newUNOP(OP_METHOD, 0, yyvsp[-2].opval))); }
 break;
 case 84:
-#line 451 "perly.y"
+#line 455 "perly.y"
 { yyval.opval = convert(OP_ENTERSUB, OPf_STACKED,
                                append_elem(OP_LIST,
                                    prepend_elem(OP_LIST, yyvsp[-3].opval, yyvsp[-1].opval),
                                    newUNOP(OP_METHOD, 0, yyvsp[-4].opval))); }
 break;
 case 85:
-#line 456 "perly.y"
+#line 460 "perly.y"
 { yyval.opval = convert(yyvsp[-1].ival, 0, yyvsp[0].opval); }
 break;
 case 86:
-#line 458 "perly.y"
+#line 462 "perly.y"
 { yyval.opval = convert(yyvsp[-3].ival, 0, yyvsp[-1].opval); }
 break;
 case 87:
-#line 460 "perly.y"
+#line 464 "perly.y"
 { yyvsp[0].opval = newANONATTRSUB(yyvsp[-1].ival, 0, Nullop, yyvsp[0].opval); }
 break;
 case 88:
-#line 462 "perly.y"
+#line 466 "perly.y"
 { yyval.opval = newUNOP(OP_ENTERSUB, OPf_STACKED,
                                 append_elem(OP_LIST,
                                   prepend_elem(OP_LIST, yyvsp[-2].opval, yyvsp[0].opval), yyvsp[-4].opval)); }
 break;
 case 91:
-#line 476 "perly.y"
+#line 480 "perly.y"
 { yyval.opval = newBINOP(OP_GELEM, 0, yyvsp[-4].opval, scalar(yyvsp[-2].opval)); }
 break;
 case 92:
-#line 478 "perly.y"
+#line 482 "perly.y"
 { yyval.opval = newBINOP(OP_AELEM, 0, oopsAV(yyvsp[-3].opval), scalar(yyvsp[-1].opval)); }
 break;
 case 93:
-#line 480 "perly.y"
+#line 484 "perly.y"
 { yyval.opval = newBINOP(OP_AELEM, 0,
                                        ref(newAVREF(yyvsp[-4].opval),OP_RV2AV),
                                        scalar(yyvsp[-1].opval));}
 break;
 case 94:
-#line 484 "perly.y"
+#line 488 "perly.y"
 { yyval.opval = newBINOP(OP_AELEM, 0,
                                        ref(newAVREF(yyvsp[-3].opval),OP_RV2AV),
                                        scalar(yyvsp[-1].opval));}
 break;
 case 95:
-#line 488 "perly.y"
+#line 492 "perly.y"
 { yyval.opval = newBINOP(OP_HELEM, 0, oopsHV(yyvsp[-4].opval), jmaybe(yyvsp[-2].opval));
                            PL_expect = XOPERATOR; }
 break;
 case 96:
-#line 491 "perly.y"
+#line 495 "perly.y"
 { yyval.opval = newBINOP(OP_HELEM, 0,
                                        ref(newHVREF(yyvsp[-5].opval),OP_RV2HV),
                                        jmaybe(yyvsp[-2].opval));
                            PL_expect = XOPERATOR; }
 break;
 case 97:
-#line 496 "perly.y"
+#line 500 "perly.y"
 { yyval.opval = newBINOP(OP_HELEM, 0,
                                        ref(newHVREF(yyvsp[-4].opval),OP_RV2HV),
                                        jmaybe(yyvsp[-2].opval));
                            PL_expect = XOPERATOR; }
 break;
 case 98:
-#line 501 "perly.y"
+#line 505 "perly.y"
 { yyval.opval = newUNOP(OP_ENTERSUB, OPf_STACKED,
                                   newCVREF(0, scalar(yyvsp[-3].opval))); }
 break;
 case 99:
-#line 504 "perly.y"
+#line 508 "perly.y"
 { yyval.opval = newUNOP(OP_ENTERSUB, OPf_STACKED,
                                   append_elem(OP_LIST, yyvsp[-1].opval,
                                       newCVREF(0, scalar(yyvsp[-4].opval)))); }
 break;
 case 100:
-#line 509 "perly.y"
+#line 513 "perly.y"
 { yyval.opval = newUNOP(OP_ENTERSUB, OPf_STACKED,
                                   append_elem(OP_LIST, yyvsp[-1].opval,
                                               newCVREF(0, scalar(yyvsp[-3].opval)))); }
 break;
 case 101:
-#line 513 "perly.y"
+#line 517 "perly.y"
 { yyval.opval = newUNOP(OP_ENTERSUB, OPf_STACKED,
                                   newCVREF(0, scalar(yyvsp[-2].opval))); }
 break;
 case 102:
-#line 519 "perly.y"
+#line 523 "perly.y"
 { yyval.opval = newASSIGNOP(OPf_STACKED, yyvsp[-2].opval, yyvsp[-1].ival, yyvsp[0].opval); }
 break;
 case 103:
-#line 521 "perly.y"
+#line 525 "perly.y"
 { yyval.opval = newBINOP(yyvsp[-1].ival, 0, scalar(yyvsp[-2].opval), scalar(yyvsp[0].opval)); }
 break;
 case 104:
-#line 523 "perly.y"
+#line 527 "perly.y"
 {   if (yyvsp[-1].ival != OP_REPEAT)
                                scalar(yyvsp[-2].opval);
                            yyval.opval = newBINOP(yyvsp[-1].ival, 0, yyvsp[-2].opval, scalar(yyvsp[0].opval)); }
 break;
 case 105:
-#line 527 "perly.y"
+#line 531 "perly.y"
 { yyval.opval = newBINOP(yyvsp[-1].ival, 0, scalar(yyvsp[-2].opval), scalar(yyvsp[0].opval)); }
 break;
 case 106:
-#line 529 "perly.y"
+#line 533 "perly.y"
 { yyval.opval = newBINOP(yyvsp[-1].ival, 0, scalar(yyvsp[-2].opval), scalar(yyvsp[0].opval)); }
 break;
 case 107:
-#line 531 "perly.y"
+#line 535 "perly.y"
 { yyval.opval = newBINOP(yyvsp[-1].ival, 0, scalar(yyvsp[-2].opval), scalar(yyvsp[0].opval)); }
 break;
 case 108:
-#line 533 "perly.y"
+#line 537 "perly.y"
 { yyval.opval = newBINOP(yyvsp[-1].ival, 0, scalar(yyvsp[-2].opval), scalar(yyvsp[0].opval)); }
 break;
 case 109:
-#line 535 "perly.y"
+#line 539 "perly.y"
 { yyval.opval = newBINOP(yyvsp[-1].ival, 0, scalar(yyvsp[-2].opval), scalar(yyvsp[0].opval)); }
 break;
 case 110:
-#line 537 "perly.y"
+#line 541 "perly.y"
 { yyval.opval = newBINOP(yyvsp[-1].ival, 0, scalar(yyvsp[-2].opval), scalar(yyvsp[0].opval)); }
 break;
 case 111:
-#line 539 "perly.y"
+#line 543 "perly.y"
 { yyval.opval = newRANGE(yyvsp[-1].ival, scalar(yyvsp[-2].opval), scalar(yyvsp[0].opval));}
 break;
 case 112:
-#line 541 "perly.y"
+#line 545 "perly.y"
 { yyval.opval = newLOGOP(OP_AND, 0, yyvsp[-2].opval, yyvsp[0].opval); }
 break;
 case 113:
-#line 543 "perly.y"
+#line 547 "perly.y"
 { yyval.opval = newLOGOP(OP_OR, 0, yyvsp[-2].opval, yyvsp[0].opval); }
 break;
 case 114:
-#line 545 "perly.y"
+#line 549 "perly.y"
 { yyval.opval = bind_match(yyvsp[-1].ival, yyvsp[-2].opval, yyvsp[0].opval); }
 break;
 case 115:
-#line 550 "perly.y"
+#line 554 "perly.y"
 { yyval.opval = newUNOP(OP_NEGATE, 0, scalar(yyvsp[0].opval)); }
 break;
 case 116:
-#line 552 "perly.y"
+#line 556 "perly.y"
 { yyval.opval = yyvsp[0].opval; }
 break;
 case 117:
-#line 554 "perly.y"
+#line 558 "perly.y"
 { yyval.opval = newUNOP(OP_NOT, 0, scalar(yyvsp[0].opval)); }
 break;
 case 118:
-#line 556 "perly.y"
+#line 560 "perly.y"
 { yyval.opval = newUNOP(OP_COMPLEMENT, 0, scalar(yyvsp[0].opval));}
 break;
 case 119:
-#line 558 "perly.y"
+#line 562 "perly.y"
 { yyval.opval = newUNOP(OP_POSTINC, 0,
                                        mod(scalar(yyvsp[-1].opval), OP_POSTINC)); }
 break;
 case 120:
-#line 561 "perly.y"
+#line 565 "perly.y"
 { yyval.opval = newUNOP(OP_POSTDEC, 0,
                                        mod(scalar(yyvsp[-1].opval), OP_POSTDEC)); }
 break;
 case 121:
-#line 564 "perly.y"
+#line 568 "perly.y"
 { yyval.opval = newUNOP(OP_PREINC, 0,
                                        mod(scalar(yyvsp[0].opval), OP_PREINC)); }
 break;
 case 122:
-#line 567 "perly.y"
+#line 571 "perly.y"
 { yyval.opval = newUNOP(OP_PREDEC, 0,
                                        mod(scalar(yyvsp[0].opval), OP_PREDEC)); }
 break;
 case 123:
-#line 574 "perly.y"
+#line 578 "perly.y"
 { yyval.opval = newANONLIST(yyvsp[-1].opval); }
 break;
 case 124:
-#line 576 "perly.y"
+#line 580 "perly.y"
 { yyval.opval = newANONLIST(Nullop); }
 break;
 case 125:
-#line 578 "perly.y"
+#line 582 "perly.y"
 { yyval.opval = newANONHASH(yyvsp[-2].opval); }
 break;
 case 126:
-#line 580 "perly.y"
+#line 584 "perly.y"
 { yyval.opval = newANONHASH(Nullop); }
 break;
 case 127:
-#line 582 "perly.y"
+#line 586 "perly.y"
 { yyval.opval = newANONATTRSUB(yyvsp[-3].ival, yyvsp[-2].opval, yyvsp[-1].opval, yyvsp[0].opval); }
 break;
 case 128:
-#line 588 "perly.y"
+#line 592 "perly.y"
 { yyval.opval = dofile(yyvsp[0].opval); }
 break;
 case 129:
-#line 590 "perly.y"
+#line 594 "perly.y"
 { yyval.opval = newUNOP(OP_NULL, OPf_SPECIAL, scope(yyvsp[0].opval)); }
 break;
 case 130:
-#line 592 "perly.y"
+#line 596 "perly.y"
 { yyval.opval = newUNOP(OP_ENTERSUB,
                            OPf_SPECIAL|OPf_STACKED,
                            prepend_elem(OP_LIST,
@@ -2188,7 +2188,7 @@ case 130:
                                )),Nullop)); dep();}
 break;
 case 131:
-#line 600 "perly.y"
+#line 604 "perly.y"
 { yyval.opval = newUNOP(OP_ENTERSUB,
                            OPf_SPECIAL|OPf_STACKED,
                            append_elem(OP_LIST,
@@ -2199,76 +2199,76 @@ case 131:
                                )))); dep();}
 break;
 case 132:
-#line 609 "perly.y"
+#line 613 "perly.y"
 { yyval.opval = newUNOP(OP_ENTERSUB, OPf_SPECIAL|OPf_STACKED,
                            prepend_elem(OP_LIST,
                                scalar(newCVREF(0,scalar(yyvsp[-2].opval))), Nullop)); dep();}
 break;
 case 133:
-#line 613 "perly.y"
+#line 617 "perly.y"
 { yyval.opval = newUNOP(OP_ENTERSUB, OPf_SPECIAL|OPf_STACKED,
                            prepend_elem(OP_LIST,
                                yyvsp[-1].opval,
                                scalar(newCVREF(0,scalar(yyvsp[-3].opval))))); dep();}
 break;
 case 138:
-#line 625 "perly.y"
+#line 629 "perly.y"
 { yyval.opval = newCONDOP(0, yyvsp[-4].opval, yyvsp[-2].opval, yyvsp[0].opval); }
 break;
 case 139:
-#line 627 "perly.y"
+#line 631 "perly.y"
 { yyval.opval = newUNOP(OP_REFGEN, 0, mod(yyvsp[0].opval,OP_REFGEN)); }
 break;
 case 140:
-#line 629 "perly.y"
+#line 633 "perly.y"
 { yyval.opval = yyvsp[0].opval; }
 break;
 case 141:
-#line 631 "perly.y"
+#line 635 "perly.y"
 { yyval.opval = localize(yyvsp[0].opval,yyvsp[-1].ival); }
 break;
 case 142:
-#line 633 "perly.y"
+#line 637 "perly.y"
 { yyval.opval = sawparens(yyvsp[-1].opval); }
 break;
 case 143:
-#line 635 "perly.y"
+#line 639 "perly.y"
 { yyval.opval = sawparens(newNULLLIST()); }
 break;
 case 144:
-#line 637 "perly.y"
+#line 641 "perly.y"
 { yyval.opval = yyvsp[0].opval; }
 break;
 case 145:
-#line 639 "perly.y"
+#line 643 "perly.y"
 { yyval.opval = yyvsp[0].opval; }
 break;
 case 146:
-#line 641 "perly.y"
+#line 645 "perly.y"
 { yyval.opval = yyvsp[0].opval; }
 break;
 case 147:
-#line 643 "perly.y"
+#line 647 "perly.y"
 { yyval.opval = yyvsp[0].opval; }
 break;
 case 148:
-#line 645 "perly.y"
+#line 649 "perly.y"
 { yyval.opval = newUNOP(OP_AV2ARYLEN, 0, ref(yyvsp[0].opval, OP_AV2ARYLEN));}
 break;
 case 149:
-#line 647 "perly.y"
+#line 651 "perly.y"
 { yyval.opval = yyvsp[0].opval; }
 break;
 case 150:
-#line 649 "perly.y"
+#line 653 "perly.y"
 { yyval.opval = newSLICEOP(0, yyvsp[-1].opval, yyvsp[-4].opval); }
 break;
 case 151:
-#line 651 "perly.y"
+#line 655 "perly.y"
 { yyval.opval = newSLICEOP(0, yyvsp[-1].opval, Nullop); }
 break;
 case 152:
-#line 653 "perly.y"
+#line 657 "perly.y"
 { yyval.opval = prepend_elem(OP_ASLICE,
                                newOP(OP_PUSHMARK, 0),
                                    newLISTOP(OP_ASLICE, 0,
@@ -2276,7 +2276,7 @@ case 152:
                                        ref(yyvsp[-3].opval, OP_ASLICE))); }
 break;
 case 153:
-#line 659 "perly.y"
+#line 663 "perly.y"
 { yyval.opval = prepend_elem(OP_HSLICE,
                                newOP(OP_PUSHMARK, 0),
                                    newLISTOP(OP_HSLICE, 0,
@@ -2285,179 +2285,179 @@ case 153:
                            PL_expect = XOPERATOR; }
 break;
 case 154:
-#line 666 "perly.y"
+#line 670 "perly.y"
 { yyval.opval = yyvsp[0].opval; }
 break;
 case 155:
-#line 668 "perly.y"
+#line 672 "perly.y"
 { yyval.opval = newUNOP(OP_ENTERSUB, 0, scalar(yyvsp[0].opval)); }
 break;
 case 156:
-#line 670 "perly.y"
+#line 674 "perly.y"
 { yyval.opval = newUNOP(OP_ENTERSUB, OPf_STACKED, scalar(yyvsp[-2].opval)); }
 break;
 case 157:
-#line 672 "perly.y"
+#line 676 "perly.y"
 { yyval.opval = newUNOP(OP_ENTERSUB, OPf_STACKED,
                            append_elem(OP_LIST, yyvsp[-1].opval, scalar(yyvsp[-3].opval))); }
 break;
 case 158:
-#line 675 "perly.y"
+#line 679 "perly.y"
 { yyval.opval = newUNOP(OP_ENTERSUB, OPf_STACKED,
                            append_elem(OP_LIST, yyvsp[0].opval, scalar(yyvsp[-1].opval))); }
 break;
 case 159:
-#line 678 "perly.y"
+#line 682 "perly.y"
 { yyval.opval = newOP(yyvsp[0].ival, OPf_SPECIAL);
                            PL_hints |= HINT_BLOCK_SCOPE; }
 break;
 case 160:
-#line 681 "perly.y"
+#line 685 "perly.y"
 { yyval.opval = newLOOPEX(yyvsp[-1].ival,yyvsp[0].opval); }
 break;
 case 161:
-#line 683 "perly.y"
+#line 687 "perly.y"
 { yyval.opval = newUNOP(OP_NOT, 0, scalar(yyvsp[0].opval)); }
 break;
 case 162:
-#line 685 "perly.y"
+#line 689 "perly.y"
 { yyval.opval = newOP(yyvsp[0].ival, 0); }
 break;
 case 163:
-#line 687 "perly.y"
+#line 691 "perly.y"
 { yyval.opval = newUNOP(yyvsp[-1].ival, 0, yyvsp[0].opval); }
 break;
 case 164:
-#line 689 "perly.y"
+#line 693 "perly.y"
 { yyval.opval = newUNOP(yyvsp[-1].ival, 0, yyvsp[0].opval); }
 break;
 case 165:
-#line 691 "perly.y"
+#line 695 "perly.y"
 { yyval.opval = newUNOP(OP_ENTERSUB, OPf_STACKED,
                            append_elem(OP_LIST, yyvsp[0].opval, scalar(yyvsp[-1].opval))); }
 break;
 case 166:
-#line 694 "perly.y"
+#line 698 "perly.y"
 { yyval.opval = newOP(yyvsp[0].ival, 0); }
 break;
 case 167:
-#line 696 "perly.y"
+#line 700 "perly.y"
 { yyval.opval = newOP(yyvsp[-2].ival, 0); }
 break;
 case 168:
-#line 698 "perly.y"
+#line 702 "perly.y"
 { yyval.opval = newUNOP(OP_ENTERSUB, OPf_STACKED,
                                scalar(yyvsp[0].opval)); }
 break;
 case 169:
-#line 701 "perly.y"
+#line 705 "perly.y"
 { yyval.opval = newOP(yyvsp[-2].ival, OPf_SPECIAL); }
 break;
 case 170:
-#line 703 "perly.y"
+#line 707 "perly.y"
 { yyval.opval = newUNOP(yyvsp[-3].ival, 0, yyvsp[-1].opval); }
 break;
 case 171:
-#line 705 "perly.y"
+#line 709 "perly.y"
 { yyval.opval = pmruntime(yyvsp[-3].opval, yyvsp[-1].opval, Nullop); }
 break;
 case 172:
-#line 707 "perly.y"
+#line 711 "perly.y"
 { yyval.opval = pmruntime(yyvsp[-5].opval, yyvsp[-3].opval, yyvsp[-1].opval); }
 break;
 case 175:
-#line 714 "perly.y"
+#line 718 "perly.y"
 { yyval.opval = my_attrs(yyvsp[-1].opval,yyvsp[0].opval); }
 break;
 case 176:
-#line 716 "perly.y"
+#line 720 "perly.y"
 { yyval.opval = localize(yyvsp[0].opval,yyvsp[-1].ival); }
 break;
 case 177:
-#line 721 "perly.y"
+#line 725 "perly.y"
 { yyval.opval = sawparens(yyvsp[-1].opval); }
 break;
 case 178:
-#line 723 "perly.y"
+#line 727 "perly.y"
 { yyval.opval = sawparens(newNULLLIST()); }
 break;
 case 179:
-#line 725 "perly.y"
+#line 729 "perly.y"
 { yyval.opval = yyvsp[0].opval; }
 break;
 case 180:
-#line 727 "perly.y"
+#line 731 "perly.y"
 { yyval.opval = yyvsp[0].opval; }
 break;
 case 181:
-#line 729 "perly.y"
+#line 733 "perly.y"
 { yyval.opval = yyvsp[0].opval; }
 break;
 case 182:
-#line 734 "perly.y"
+#line 738 "perly.y"
 { yyval.opval = Nullop; }
 break;
 case 183:
-#line 736 "perly.y"
+#line 740 "perly.y"
 { yyval.opval = yyvsp[0].opval; }
 break;
 case 184:
-#line 740 "perly.y"
+#line 744 "perly.y"
 { yyval.opval = Nullop; }
 break;
 case 185:
-#line 742 "perly.y"
+#line 746 "perly.y"
 { yyval.opval = yyvsp[0].opval; }
 break;
 case 186:
-#line 744 "perly.y"
+#line 748 "perly.y"
 { yyval.opval = yyvsp[-1].opval; }
 break;
 case 187:
-#line 750 "perly.y"
+#line 754 "perly.y"
 { PL_in_my = 0; yyval.opval = my(yyvsp[0].opval); }
 break;
 case 188:
-#line 754 "perly.y"
+#line 758 "perly.y"
 { yyval.opval = newCVREF(yyvsp[-1].ival,yyvsp[0].opval); }
 break;
 case 189:
-#line 758 "perly.y"
+#line 762 "perly.y"
 { yyval.opval = newSVREF(yyvsp[0].opval); }
 break;
 case 190:
-#line 762 "perly.y"
+#line 766 "perly.y"
 { yyval.opval = newAVREF(yyvsp[0].opval); }
 break;
 case 191:
-#line 766 "perly.y"
+#line 770 "perly.y"
 { yyval.opval = newHVREF(yyvsp[0].opval); }
 break;
 case 192:
-#line 770 "perly.y"
+#line 774 "perly.y"
 { yyval.opval = newAVREF(yyvsp[0].opval); }
 break;
 case 193:
-#line 774 "perly.y"
+#line 778 "perly.y"
 { yyval.opval = newGVREF(0,yyvsp[0].opval); }
 break;
 case 194:
-#line 779 "perly.y"
+#line 783 "perly.y"
 { yyval.opval = scalar(yyvsp[0].opval); }
 break;
 case 195:
-#line 781 "perly.y"
+#line 785 "perly.y"
 { yyval.opval = scalar(yyvsp[0].opval);  }
 break;
 case 196:
-#line 783 "perly.y"
+#line 787 "perly.y"
 { yyval.opval = scope(yyvsp[0].opval); }
 break;
 case 197:
-#line 786 "perly.y"
+#line 790 "perly.y"
 { yyval.opval = yyvsp[0].opval; }
 break;
-#line 2477 "perly.c"
+#line 2459 "perly.c"
     }
     yyssp -= yym;
     yystate = *yyssp;
@@ -2512,7 +2512,7 @@ to state %d\n", *yyssp, yystate);
        ysave->yyvs = Renew(yyvs, yystacksize, YYSTYPE);
        ysave->yyss = Renew(yyss, yystacksize, short);
        if (!yyvs || !yyss)
-           goto yyoverflow;
+        goto yyoverflow;
        yyssp = yyss + yyps_index;
        yyvsp = yyvs + yypv_index;
     }