perl 3.0 patch #14 patch #13, continued
[p5sagit/p5-mst-13.2.git] / perl.y
diff --git a/perl.y b/perl.y
index 2b1e917..96ef414 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.5 90/03/12 16:55:56 lwall Locked $
  *
  *    Copyright (c) 1989, Larry Wall
  *
@@ -6,6 +6,16 @@
  *    as specified in the README file that comes with the perl 3.0 kit.
  *
  * $Log:       perl.y,v $
+ * 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
@@ -226,6 +236,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 +263,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,
@@ -434,6 +448,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 +480,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 +617,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 ')'