This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Allow for changing size of bracketed regex char class
[perl5.git] / perly.y
diff --git a/perly.y b/perly.y
index de90b2a..77773fd 100644 (file)
--- a/perly.y
+++ b/perly.y
 /* Top-level choice of what kind of thing yyparse was called to parse */
 grammar        :       GRAMPROG
                        {
-                         PL_parser->expect = XSTATE;
+                         parser->expect = XSTATE;
                        }
                remember stmtseq
                        {
@@ -177,16 +177,16 @@ grammar   :       GRAMPROG
 
 /* An ordinary block */
 block  :       '{' remember stmtseq '}'
-                       { if (PL_parser->copline > (line_t)$1)
-                             PL_parser->copline = (line_t)$1;
+                       { if (parser->copline > (line_t)$1)
+                             parser->copline = (line_t)$1;
                          $$ = block_end($2, $3);
                        }
        ;
 
 /* format body */
 formblock:     '=' remember ';' FORMRBRACK formstmtseq ';' '.'
-                       { if (PL_parser->copline > (line_t)$1)
-                             PL_parser->copline = (line_t)$1;
+                       { if (parser->copline > (line_t)$1)
+                             parser->copline = (line_t)$1;
                          $$ = block_end($2, $5);
                        }
        ;
@@ -196,8 +196,8 @@ remember:   /* NULL */      /* start a full lexical scope */
        ;
 
 mblock :       '{' mremember stmtseq '}'
-                       { if (PL_parser->copline > (line_t)$1)
-                             PL_parser->copline = (line_t)$1;
+                       { if (parser->copline > (line_t)$1)
+                             parser->copline = (line_t)$1;
                          $$ = block_end($2, $3);
                        }
        ;
@@ -279,8 +279,8 @@ barestmt:   PLUGSTMT
                                                CvOUTSIDE(PL_compcv)
                                             ))[$2->op_targ]))
                              CvCLONE_on(PL_compcv);
-                         PL_parser->in_my = 0;
-                         PL_parser->in_my_stash = NULL;
+                         parser->in_my = 0;
+                         parser->in_my_stash = NULL;
                        }
                proto subattrlist optsubbody
                        {
@@ -311,13 +311,13 @@ barestmt: PLUGSTMT
                        {
                          $$ = block_end($3,
                              newCONDOP(0, $4, op_scope($6), $7));
-                         PL_parser->copline = (line_t)$1;
+                         parser->copline = (line_t)$1;
                        }
        |       UNLESS '(' remember miexpr ')' mblock else
                        {
                          $$ = block_end($3,
                              newCONDOP(0, $4, op_scope($6), $7));
-                         PL_parser->copline = (line_t)$1;
+                         parser->copline = (line_t)$1;
                        }
        |       GIVEN '(' remember mexpr ')' mblock
                        {
@@ -328,7 +328,7 @@ barestmt:   PLUGSTMT
                                    || PAD_COMPNAME_FLAGS_isOUR(offset)
                                      ? 0
                                      : offset));
-                         PL_parser->copline = (line_t)$1;
+                         parser->copline = (line_t)$1;
                        }
        |       WHEN '(' remember mexpr ')' mblock
                        { $$ = block_end($3, newWHENOP($4, op_scope($6))); }
@@ -339,21 +339,25 @@ barestmt: PLUGSTMT
                          $$ = block_end($3,
                                  newWHILEOP(0, 1, (LOOP*)(OP*)NULL,
                                      $4, $7, $8, $6));
-                         PL_parser->copline = (line_t)$1;
+                         parser->copline = (line_t)$1;
                        }
        |       UNTIL '(' remember iexpr ')' mintro mblock cont
                        {
                          $$ = block_end($3,
                                  newWHILEOP(0, 1, (LOOP*)(OP*)NULL,
                                      $4, $7, $8, $6));
-                         PL_parser->copline = (line_t)$1;
+                         parser->copline = (line_t)$1;
                        }
-       |       FOR '(' remember mnexpr ';' texpr ';' mintro mnexpr ')'
+       |       FOR '(' remember mnexpr ';'
+                       { parser->expect = XTERM; }
+               texpr ';'
+                       { parser->expect = XTERM; }
+               mintro mnexpr ')'
                mblock
                        {
                          OP *initop = $4;
                          OP *forop = newWHILEOP(0, 1, (LOOP*)(OP*)NULL,
-                                     scalar($6), $11, $9, $8);
+                                     scalar($7), $13, $11, $10);
                          if (initop) {
                              forop = op_prepend_elem(OP_LINESEQ, initop,
                                  op_append_elem(OP_LINESEQ,
@@ -361,24 +365,24 @@ barestmt: PLUGSTMT
                                      forop));
                          }
                          $$ = block_end($3, forop);
-                         PL_parser->copline = (line_t)$1;
+                         parser->copline = (line_t)$1;
                        }
        |       FOR MY remember my_scalar '(' mexpr ')' mblock cont
                        {
                          $$ = block_end($3, newFOROP(0, $4, $6, $8, $9));
-                         PL_parser->copline = (line_t)$1;
+                         parser->copline = (line_t)$1;
                        }
        |       FOR scalar '(' remember mexpr ')' mblock cont
                        {
                          $$ = block_end($4, newFOROP(0,
                                      op_lvalue($2, OP_ENTERLOOP), $5, $7, $8));
-                         PL_parser->copline = (line_t)$1;
+                         parser->copline = (line_t)$1;
                        }
        |       FOR '(' remember mexpr ')' mblock cont
                        {
                          $$ = block_end($3,
                                  newFOROP(0, (OP*)NULL, $4, $6, $7));
-                         PL_parser->copline = (line_t)$1;
+                         parser->copline = (line_t)$1;
                        }
        |       block cont
                        {
@@ -398,19 +402,17 @@ barestmt: PLUGSTMT
                          /* a block is a loop that happens once */
                          $$ = newWHILEOP(0, 1, (LOOP*)(OP*)NULL,
                                  (OP*)NULL, block_end($5, $7), (OP*)NULL, 0);
-                         if (PL_parser->copline > (line_t)$4)
-                             PL_parser->copline = (line_t)$4;
+                         if (parser->copline > (line_t)$4)
+                             parser->copline = (line_t)$4;
                        }
        |       sideff ';'
                        {
-                         PL_parser->expect = XSTATE;
                          $$ = $1;
                        }
        |       ';'
                        {
-                         PL_parser->expect = XSTATE;
                          $$ = (OP*)NULL;
-                         PL_parser->copline = NOLINE;
+                         parser->copline = NOLINE;
                        }
        ;
 
@@ -424,9 +426,9 @@ formline:   THING formarg
                          else {
                              list = $1;
                          }
-                         if (PL_parser->copline == NOLINE)
-                              PL_parser->copline = CopLINE(PL_curcop)-1;
-                         else PL_parser->copline--;
+                         if (parser->copline == NOLINE)
+                              parser->copline = CopLINE(PL_curcop)-1;
+                         else parser->copline--;
                          $$ = newSTATEOP(0, NULL,
                                          convert(OP_FORMLINE, 0, list));
                        }
@@ -453,7 +455,7 @@ sideff      :       error
                        { $$ = newLOOPOP(OPf_PARENS, 1, $3, $1); }
        |       expr FOR expr
                        { $$ = newFOROP(0, (OP*)NULL, $3, $1, (OP*)NULL);
-                         PL_parser->copline = (line_t)$2; }
+                         parser->copline = (line_t)$2; }
        |       expr WHEN expr
                        { $$ = newWHENOP($3, op_scope($1)); }
        ;
@@ -467,7 +469,7 @@ else        :       /* NULL */
                          $$ = op_scope($2);
                        }
        |       ELSIF '(' mexpr ')' mblock else
-                       { PL_parser->copline = (line_t)$1;
+                       { parser->copline = (line_t)$1;
                            $$ = newCONDOP(0,
                                newSTATEOP(OPf_SPECIAL,NULL,$3),
                                op_scope($5), $6);
@@ -583,15 +585,15 @@ subsignature:     /* NULL */ { $$ = (OP*)NULL; }
                        {
                          $$ = op_append_list(OP_LINESEQ, $<opval>2,
                                newSTATEOP(0, NULL, sawparens(newNULLLIST())));
-                         PL_parser->expect = XBLOCK;
+                         parser->expect = XBLOCK;
                        }
        ;
 
 /* Subroutine body - block with optional signature */
 realsubbody:   remember subsignature '{' stmtseq '}'
                        {
-                         if (PL_parser->copline > (line_t)$3)
-                             PL_parser->copline = (line_t)$3;
+                         if (parser->copline > (line_t)$3)
+                             parser->copline = (line_t)$3;
                          $$ = block_end($1,
                                op_append_list(OP_LINESEQ, $2, $4));
                        }
@@ -599,9 +601,7 @@ realsubbody:        remember subsignature '{' stmtseq '}'
 
 /* Optional subroutine body, for named subroutine declaration */
 optsubbody:    realsubbody { $$ = $1; }
-       |       ';'     { $$ = (OP*)NULL;
-                         PL_parser->expect = XSTATE;
-                       }
+       |       ';'     { $$ = (OP*)NULL; }
        ;
 
 /* Ordinary expressions; logical combinations */
@@ -680,9 +680,7 @@ method      :       METHOD
 subscripted:    gelem '{' expr ';' '}'        /* *main::{something} */
                         /* In this and all the hash accessors, ';' is
                          * provided by the tokeniser */
-                       { $$ = newBINOP(OP_GELEM, 0, $1, scalar($3));
-                           PL_parser->expect = XOPERATOR;
-                       }
+                       { $$ = newBINOP(OP_GELEM, 0, $1, scalar($3)); }
        |       scalar '[' expr ']'          /* $array[$element] */
                        { $$ = newBINOP(OP_AELEM, 0, oopsAV($1), scalar($3));
                        }
@@ -698,20 +696,15 @@ subscripted:    gelem '{' expr ';' '}'        /* *main::{something} */
                        }
        |       scalar '{' expr ';' '}'    /* $foo{bar();} */
                        { $$ = newBINOP(OP_HELEM, 0, oopsHV($1), jmaybe($3));
-                           PL_parser->expect = XOPERATOR;
                        }
        |       term ARROW '{' expr ';' '}' /* somehref->{bar();} */
                        { $$ = newBINOP(OP_HELEM, 0,
                                        ref(newHVREF($1),OP_RV2HV),
-                                       jmaybe($4));
-                           PL_parser->expect = XOPERATOR;
-                       }
+                                       jmaybe($4)); }
        |       subscripted '{' expr ';' '}' /* $foo->[bar]->{baz;} */
                        { $$ = newBINOP(OP_HELEM, 0,
                                        ref(newHVREF($1),OP_RV2HV),
-                                       jmaybe($3));
-                           PL_parser->expect = XOPERATOR;
-                       }
+                                       jmaybe($3)); }
        |       term ARROW '(' ')'          /* $subref->() */
                        { $$ = newUNOP(OP_ENTERSUB, OPf_STACKED,
                                   newCVREF(0, scalar($1))); }
@@ -886,7 +879,6 @@ term        :       termbinop
                          if ($$ && $1)
                              $$->op_private |=
                                  $1->op_private & OPpSLICEWARNING;
-                           PL_parser->expect = XOPERATOR;
                        }
        |       kvslice '{' expr ';' '}'                 /* %hash{@keys} */
                        { $$ = op_prepend_elem(OP_KVHSLICE,
@@ -897,7 +889,6 @@ term        :       termbinop
                          if ($$ && $1)
                              $$->op_private |=
                                  $1->op_private & OPpSLICEWARNING;
-                           PL_parser->expect = XOPERATOR;
                        }
        |       THING   %prec '('
                        { $$ = $1; }
@@ -1024,7 +1015,7 @@ optexpr:  /* NULL */
 /* A little bit of trickery to make "for my $foo (@bar)" actually be
    lexical */
 my_scalar:     scalar
-                       { PL_parser->in_my = 0; $$ = my($1); }
+                       { parser->in_my = 0; $$ = my($1); }
        ;
 
 amper  :       '&' indirob