perl 3.0 patch #22 patch #19, continued
[p5sagit/p5-mst-13.2.git] / perl.y
diff --git a/perl.y b/perl.y
index 2b1e917..7ceb2d7 100644 (file)
--- a/perl.y
+++ b/perl.y
@@ -1,4 +1,4 @@
-/* $Header: perl.y,v 3.0.1.2 89/11/11 04:49:04 lwall Locked $
+/* $Header: perl.y,v 3.0.1.6 90/03/27 16:13:45 lwall Locked $
  *
  *    Copyright (c) 1989, Larry Wall
  *
@@ -6,6 +6,19 @@
  *    as specified in the README file that comes with the perl 3.0 kit.
  *
  * $Log:       perl.y,v $
+ * Revision 3.0.1.6  90/03/27  16:13:45  lwall
+ * patch16: formats didn't work inside eval
+ * 
+ * Revision 3.0.1.5  90/03/12  16:55:56  lwall
+ * patch13: added list slice operator (LIST)[LIST]
+ * patch13: (LIST,) now legal
+ * 
+ * Revision 3.0.1.4  90/02/28  18:03:23  lwall
+ * patch9: line numbers were bogus during certain portions of foreach evaluation
+ * 
+ * Revision 3.0.1.3  89/12/21  20:13:41  lwall
+ * patch7: send() didn't allow a TO argument
+ * 
  * Revision 3.0.1.2  89/11/11  04:49:04  lwall
  * patch2: moved yydebug to where its type doesn't matter
  * patch2: !$foo++ was unreasonably illegal
@@ -57,7 +70,6 @@ ARG *arg5;
 %token <arg> RSTRING TRANS
 
 %type <ival> prog decl format remember
-%type <stabval>
 %type <cmdval> block lineseq line loop cond sideff nexpr else
 %type <arg> expr sexpr cexpr csexpr term handle aryword hshword
 %type <arg> texpr listop
@@ -226,6 +238,8 @@ loop        :       label WHILE '(' texpr ')' compblock
                                          stab2arg(A_STAB,scrstab),
                                          Nullarg,Nullarg ),
                                        $7)))));
+                               $$->c_line = $2;
+                               $$->c_head->c_line = $2;
                            }
                            else {
                                $$ = wopt(over($3,add_label($1,
@@ -251,6 +265,8 @@ loop        :       label WHILE '(' texpr ')' compblock
                                          stab2arg(A_STAB,scrstab),
                                          Nullarg,Nullarg ),
                                        $6)))));
+                               $$->c_line = $2;
+                               $$->c_head->c_line = $2;
                            }
                            else {      /* lisp, anyone? */
                                $$ = wopt(over(defstab,add_label($1,
@@ -293,14 +309,14 @@ decl      :       format
 
 format :       FORMAT WORD '=' FORMLIST
                        { if (strEQ($2,"stdout"))
-                           stab_form(stabent("STDOUT",TRUE)) = $4;
+                           make_form(stabent("STDOUT",TRUE),$4);
                          else if (strEQ($2,"stderr"))
-                           stab_form(stabent("STDERR",TRUE)) = $4;
+                           make_form(stabent("STDERR",TRUE),$4);
                          else
-                           stab_form(stabent($2,TRUE)) = $4;
+                           make_form(stabent($2,TRUE),$4);
                          Safefree($2);}
        |       FORMAT '=' FORMLIST
-                       { stab_form(stabent("STDOUT",TRUE)) = $3; }
+                       { make_form(stabent("STDOUT",TRUE),$3); }
        ;
 
 subrout        :       SUB WORD block
@@ -434,6 +450,8 @@ term        :       '-' term %prec UMINUS
                        { $$ = l(localize(make_op(O_ASSIGN, 1,
                                localize(listish(make_list($3))),
                                Nullarg,Nullarg))); }
+       |       '(' expr ',' ')'
+                       { $$ = make_list(hide_ary($2)); }
        |       '(' expr ')'
                        { $$ = make_list(hide_ary($2)); }
        |       '(' ')'
@@ -464,6 +482,11 @@ term       :       '-' term %prec UMINUS
                                stab2arg(A_STAB,hadd($1)),
                                jmaybe($3),
                                Nullarg); }
+       |       '(' expr ')' '[' expr ']'       %prec '('
+                       { $$ = make_op(O_LSLICE, 3,
+                               Nullarg,
+                               listish(make_list($5)),
+                               listish(make_list($2))); }
        |       ARY '[' expr ']'        %prec '('
                        { $$ = make_op(O_ASLICE, 2,
                                stab2arg(A_STAB,aadd($1)),
@@ -596,7 +619,7 @@ term        :       '-' term %prec UMINUS
        |       FILOP2 '(' handle cexpr ')'
                        { $$ = make_op($1, 2, $3, $4, Nullarg); }
        |       FILOP3 '(' handle csexpr cexpr ')'
-                       { $$ = make_op($1, 3, $3, $4, $5); }
+                       { $$ = make_op($1, 3, $3, $4, make_list($5)); }
        |       FILOP22 '(' handle ',' handle ')'
                        { $$ = make_op($1, 2, $3, $5, Nullarg); }
        |       FILOP4 '(' handle csexpr csexpr cexpr ')'