From 28757baaaeaa3801dd997fad8b1f5f62c64a228e Mon Sep 17 00:00:00 2001 From: Perl 5 Porters Date: Wed, 8 Jan 1997 11:52:00 +1200 Subject: [inseparable changes from patch from perl5.003_19 to perl5.003_20] BUILD PROCESS Subject: Make Configure default to the first domain in /etc/resolv.conf From: Chip Salzenberg Files: Configure Subject: Start all helper scripts with $startsh From: Chip Salzenberg Files: Configure Subject: Support libperl.so under FreeBSD Date: Sun, 5 Jan 1997 22:41:49 +0100 From: Ollivier Robert Files: Configure Makefile.SH Msg-ID: (applied based on p5p patch as commit b126116e5ae3d57fa007f8a42fd506805b35163b) CORE LANGUAGE CHANGES Subject: Rescind named closures From: Chip Salzenberg Files: Makefile.SH op.c perly.c perly.c.diff perly.y pp_hot.c Subject: Fix: empty @_ when calling empty-proto subs without parens Date: Sat, 04 Jan 1997 10:29:04 +0000 From: Graham Barr Files: perly.c perly.y (applied based on p5p patch as commit 3112f5de73952f91aa4e8005d9852dfddbcf0402) CORE PORTABILITY Subject: Configure/perl5/Compartmented Mode Workstation (fwd) Date: Mon, 06 Jan 1997 13:15:38 -0500 (EST) From: Andy Dougherty Files: Configure hints/dec_osf.sh private-msgid: Files: MANIFEST DOCUMENTATION Subject: tiny doc patches Date: Sat, 04 Jan 1997 11:12:13 -0500 From: Roderick Schertler Files: pod/perlapio.pod pod/perlnews.pod pod/perltoc.pod Msg-ID: <23338.852394333@eeyore.ibcinc.com> (applied based on p5p patch as commit b681178584626ba3718f1279845fd452317134c1) Subject: doc patch for defined on perlfunc.pod Date: 04 Jan 1997 21:28:30 -0500 From: Roderick Schertler Files: pod/perlfunc.pod Msg-ID: (applied based on p5p patch as commit 38e3adfd2e3d40b46e465482945c4f3de4bb50ef) Subject: doc patch: perldsc Date: 04 Jan 1997 21:25:58 -0500 From: Roderick Schertler Files: pod/perldsc.pod pod/perltoc.pod Msg-ID: (applied based on p5p patch as commit 4d42f92e5bf79556508016b7af91233b12e526eb) Subject: scalar caller doc fix Date: Mon, 06 Jan 1997 22:34:20 -0500 From: Roderick Schertler Files: pod/perlfunc.pod Msg-ID: <18245.852608060@eeyore.ibcinc.com> (applied based on p5p patch as commit 218104faecb0ec19e0f4f89e084959e757a5230f) Subject: Misc perlfunc updates From: Tom Christiansen Files: pod/perlfunc.pod pod/perltoc.pod LIBRARY AND EXTENSIONS Subject: sigaction() problems Date: Mon, 06 Jan 1997 15:42:04 -0500 From: Roderick Schertler Files: ext/POSIX/POSIX.pm ext/POSIX/POSIX.pod Msg-ID: <12808.852583324@eeyore.ibcinc.com> (applied based on p5p patch as commit 84e96f2bcc509ba2fb5d2c9608a30cc3cfdea41a) Subject: Fix importation of FileHandle methods; fix POSIX docs From: Chip Salzenberg Files: ext/POSIX/POSIX.pm ext/POSIX/POSIX.pod lib/FileHandle.pm Subject: Patch: make hints files warn about db-recno failures Date: Sun, 5 Jan 1997 12:34:25 +0100 From: Dominic Dunlop Files: MANIFEST hints/aux.sh hints/broken-db.msg hints/freebsd.sh (applied based on p5p patch as commit 692df45da95e2b7d14c4560347ef4555bb40b621) OTHER CORE CHANGES Subject: Fix C< sub foo (&@); sub bar (&); foo {}, bar {}, bar {} > From: Chip Salzenberg Files: perly.c perly.c.diff perly.y Subject: plug for safe/opcode leaks Date: Tue, 07 Jan 1997 17:20:46 -0500 From: Doug MacEachern Files: op.c Msg-ID: <199701072220.RAA02117@postman.osf.org> (applied based on p5p patch as commit 5cbfc2849d37f748a8facbcbf1c889c575943488) Subject: Fix Dynaloader failures with DProf Date: Mon, 06 Jan 1997 12:18:46 -0500 From: Gurusamy Sarathy Files: pp_hot.c private-msgid: <199701061718.MAA26909@aatma.engin.umich.edu> TESTS Subject: New test: comp/proto.t Date: Mon, 06 Jan 1997 09:13:03 +0000 From: Graham Barr Files: MANIFEST t/comp/proto.t (applied based on p5p patch as commit 8c1635e65dc1b3900503d444e985e3f0e5601454) --- perly.y | 49 +++++++++++++++++++++++++++++++++---------------- 1 file changed, 33 insertions(+), 16 deletions(-) (limited to 'perly.y') diff --git a/perly.y b/perly.y index a281dff9b9..75d9a3a76f 100644 --- a/perly.y +++ b/perly.y @@ -46,12 +46,13 @@ dep() %token DOLSHARP DO HASHBRACK NOAMP %token LOCAL MY -%type prog decl local format startsub remember mremember '&' +%type prog decl local format startsub startanonsub +%type remember mremember '&' %type block mblock lineseq line loop cond else %type expr term scalar ary hsh arylen star amper sideff %type argexpr nexpr texpr iexpr mexpr mnexpr mtexpr miexpr %type listexpr listexprcom indirob -%type listop method proto cont my_scalar +%type listop method subname proto subbody cont my_scalar %type label %left OROP @@ -269,19 +270,32 @@ format : FORMAT startsub WORD block { newFORM($2, Nullop, $3); } ; -subrout : SUB startsub WORD proto block +subrout : SUB startsub subname proto subbody { newSUB($2, $3, $4, $5); } - | SUB startsub WORD proto ';' - { newSUB($2, $3, $4, Nullop); expect = XSTATE; } + ; + +startsub: /* NULL */ /* start a subroutine scope */ + { $$ = start_subparse(); } + ; + +startanonsub: /* NULL */ /* start an anonymous subroutine scope */ + { $$ = start_subparse(); + CvANON_on(compcv); } + ; + +subname : WORD { char *name = SvPVx(((SVOP*)$1)->op_sv, na); + if (strEQ(name, "BEGIN") || strEQ(name, "END")) + CvUNIQUE_on(compcv); + $$ = $1; } ; proto : /* NULL */ { $$ = Nullop; } | THING ; - -startsub: /* NULL */ /* start a subroutine scope */ - { $$ = start_subparse(); } + +subbody : block { $$ = $1; } + | ';' { $$ = Nullop; expect = XSTATE; } ; package : PACKAGE WORD ';' @@ -290,8 +304,10 @@ package : PACKAGE WORD ';' { package(Nullop); } ; -use : USE startsub WORD WORD listexpr ';' - { utilize($1, $2, $3, $4, $5); } +use : USE startsub + { CvUNIQUE_on(compcv); /* It's a BEGIN {} */ } + WORD WORD listexpr ';' + { utilize($1, $2, $4, $5, $6); } ; expr : expr ANDOP expr @@ -333,11 +349,12 @@ listop : LSTOP indirob argexpr { $$ = convert($1, 0, $2); } | FUNC '(' listexprcom ')' { $$ = convert($1, 0, $3); } - | LSTOPSUB startsub block listexpr %prec LSTOP + | LSTOPSUB startanonsub block + { $3 = newANONSUB($2, 0, $3); } + listexpr %prec LSTOP { $$ = newUNOP(OP_ENTERSUB, OPf_STACKED, - append_elem(OP_LIST, - prepend_elem(OP_LIST, newANONSUB($2, 0, $3), $4), - $1)); } + append_elem(OP_LIST, + prepend_elem(OP_LIST, $3, $5), $1)); } ; method : METHOD @@ -411,7 +428,7 @@ term : term ASSIGNOP term { $$ = newANONHASH($2); } | HASHBRACK ';' '}' %prec '(' { $$ = newANONHASH(Nullop); } - | ANONSUB startsub proto block %prec '(' + | ANONSUB startanonsub proto block %prec '(' { $$ = newANONSUB($2, $3, $4); } | scalar %prec '(' { $$ = $1; } @@ -528,7 +545,7 @@ term : term ASSIGNOP term | FUNC0 '(' ')' { $$ = newOP($1, 0); } | FUNC0SUB - { $$ = newUNOP(OP_ENTERSUB, 0, + { $$ = newUNOP(OP_ENTERSUB, OPf_STACKED, scalar($1)); } | FUNC1 '(' ')' { $$ = newOP($1, OPf_SPECIAL); } -- cgit v1.2.1