This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Prefer -std=c89 over -ansi.
[perl5.git] / perly.y
diff --git a/perly.y b/perly.y
index 289e28e..ece2904 100644 (file)
--- a/perly.y
+++ b/perly.y
@@ -118,6 +118,7 @@ grammar     :       GRAMPROG
                remember stmtseq
                        {
                          newPROG(block_end($3,$4));
+                         PL_compiling.cop_seq = 0;
                          $$ = 0;
                        }
        |       GRAMEXPR
@@ -193,7 +194,8 @@ formblock:  '=' remember ';' FORMRBRACK formstmtseq ';' '.'
        ;
 
 remember:      /* NULL */      /* start a full lexical scope */
-                       { $$ = block_start(TRUE); }
+                       { $$ = block_start(TRUE);
+                         parser->parsed_sub = 0; }
        ;
 
 mblock :       '{' mremember stmtseq '}'
@@ -204,7 +206,8 @@ mblock      :       '{' mremember stmtseq '}'
        ;
 
 mremember:     /* NULL */      /* start a partial lexical scope */
-                       { $$ = block_start(FALSE); }
+                       { $$ = block_start(FALSE);
+                         parser->parsed_sub = 0; }
        ;
 
 /* A sequence of statements in the program */
@@ -292,6 +295,7 @@ barestmt:   PLUGSTMT
                          ;
                          $$ = (OP*)NULL;
                          intro_my();
+                         parser->parsed_sub = 1;
                        }
        |       PACKAGE WORD WORD ';'
                        {
@@ -306,6 +310,7 @@ barestmt:   PLUGSTMT
                        {
                          SvREFCNT_inc_simple_void(PL_compcv);
                          utilize($1, $2, $4, $5, $6);
+                         parser->parsed_sub = 1;
                          $$ = (OP*)NULL;
                        }
        |       IF '(' remember mexpr ')' mblock else
@@ -454,7 +459,7 @@ formline:   THING formarg
                               parser->copline = CopLINE(PL_curcop)-1;
                          else parser->copline--;
                          $$ = newSTATEOP(0, NULL,
-                                         convert(OP_FORMLINE, 0, list));
+                                         op_convert_list(OP_FORMLINE, 0, list));
                        }
        ;
 
@@ -651,40 +656,40 @@ listexpr: listexpr ','
 
 /* List operators */
 listop :       LSTOP indirob listexpr /* map {...} @args or print $fh @args */
-                       { $$ = convert($1, OPf_STACKED,
+                       { $$ = op_convert_list($1, OPf_STACKED,
                                op_prepend_elem(OP_LIST, newGVREF($1,$2), $3) );
                        }
        |       FUNC '(' indirob expr ')'      /* print ($fh @args */
-                       { $$ = convert($1, OPf_STACKED,
+                       { $$ = op_convert_list($1, OPf_STACKED,
                                op_prepend_elem(OP_LIST, newGVREF($1,$3), $4) );
                        }
        |       term ARROW method '(' optexpr ')' /* $foo->bar(list) */
-                       { $$ = convert(OP_ENTERSUB, OPf_STACKED,
+                       { $$ = op_convert_list(OP_ENTERSUB, OPf_STACKED,
                                op_append_elem(OP_LIST,
                                    op_prepend_elem(OP_LIST, scalar($1), $5),
                                    newMETHOP(OP_METHOD, 0, $3)));
                        }
        |       term ARROW method                     /* $foo->bar */
-                       { $$ = convert(OP_ENTERSUB, OPf_STACKED,
+                       { $$ = op_convert_list(OP_ENTERSUB, OPf_STACKED,
                                op_append_elem(OP_LIST, scalar($1),
                                    newMETHOP(OP_METHOD, 0, $3)));
                        }
        |       METHOD indirob optlistexpr           /* new Class @args */
-                       { $$ = convert(OP_ENTERSUB, OPf_STACKED,
+                       { $$ = op_convert_list(OP_ENTERSUB, OPf_STACKED,
                                op_append_elem(OP_LIST,
                                    op_prepend_elem(OP_LIST, $2, $3),
                                    newMETHOP(OP_METHOD, 0, $1)));
                        }
        |       FUNCMETH indirob '(' optexpr ')'    /* method $object (@args) */
-                       { $$ = convert(OP_ENTERSUB, OPf_STACKED,
+                       { $$ = op_convert_list(OP_ENTERSUB, OPf_STACKED,
                                op_append_elem(OP_LIST,
                                    op_prepend_elem(OP_LIST, $2, $4),
                                    newMETHOP(OP_METHOD, 0, $1)));
                        }
        |       LSTOP optlistexpr                    /* print @args */
-                       { $$ = convert($1, 0, $2); }
+                       { $$ = op_convert_list($1, 0, $2); }
        |       FUNC '(' optexpr ')'                 /* print (@args) */
-                       { $$ = convert($1, 0, $3); }
+                       { $$ = op_convert_list($1, 0, $3); }
        |       LSTOPSUB startanonsub block /* sub f(&@);   f { foo } ... */
                        { SvREFCNT_inc_simple_void(PL_compcv);
                          $<opval>$ = newANONATTRSUB($2, 0, (OP*)NULL, $3); }
@@ -803,7 +808,7 @@ termunop : '-' term %prec UMINUS                       /* -$x */
                        { $$ = newUNOP(OP_POSTDEC, 0,
                                        op_lvalue(scalar($1), OP_POSTDEC));}
        |       term POSTJOIN    /* implicit join after interpolated ->@ */
-                       { $$ = convert(OP_JOIN, 0,
+                       { $$ = op_convert_list(OP_JOIN, 0,
                                       op_append_elem(
                                        OP_LIST,
                                        newSVREF(scalar(