summaryrefslogtreecommitdiff
path: root/perly.y
diff options
context:
space:
mode:
authorPerl 5 Porters <perl5-porters@africa.nicoh.com>1996-11-26 20:48:00 +1200
committerChip Salzenberg <chip@atlantic.net>1996-11-26 20:48:00 +1200
commitbbce6d69784bf43b0e69e8d312042d65f258af23 (patch)
treeeb5810e67656c19b6fb34dd0160c9131f24f65d1 /perly.y
parent6d82b38436d2a39ffb7413e68ad91495cd645fff (diff)
downloadperl-bbce6d69784bf43b0e69e8d312042d65f258af23.tar.gz
[inseparable changes from patch from perl5.003_08 to perl5.003_09]
CORE LANGUAGE CHANGES Subject: Lexical locales From: Chip Salzenberg <chip@atlantic.net> Files: too many to list make effectiveness of locales depend on C<use locale> Subject: Lexical scoping cleanup From: Chip Salzenberg <chip@atlantic.net> Files: many... but mostly perly.y and toke.c tighten scoping of lexical variables, somewhat on the new constructs and somewhat on the old Subject: memory corruption / security bug in sysread,syswrite + patch Date: Mon, 25 Nov 1996 21:46:31 +0200 (EET) From: Jarkko Hietaniemi <jhi@cc.hut.fi> Files: MANIFEST pod/perldiag.pod pod/perlfunc.pod pp_sys.c t/op/sysio.t Msg-ID: <199611251946.VAA30459@alpha.hut.fi> (applied based on p5p patch as commit d7090df90a9cb89c83787d916e40d92a616b146d) DOCUMENTATION Subject: perldiag documentation patch. Date: Wed, 20 Nov 96 16:07:28 GMT From: Paul Marquess <pmarquess@bfsec.bt.co.uk> Files: pod/perldiag.pod private-msgid: <9611201607.AA12729@claudius.bfsec.bt.co.uk> Subject: a missing perldiag entry Date: Thu, 21 Nov 1996 15:24:02 -0500 From: Gurusamy Sarathy <gsar@engin.umich.edu> Files: pod/perldiag.pod private-msgid: <199611212024.PAA15758@aatma.engin.umich.edu> Subject: perlfunc patch Date: Wed, 20 Nov 96 14:04:08 GMT From: Paul Marquess <pmarquess@bfsec.bt.co.uk> Files: pod/perlfunc.pod Following on from the patch to make uc, lc etc default to $_ (as per Camel II), here is a followup patch to perlfunc that documents the change. I think I have documented all the other cases where $_ defaulting works as well. p5p-msgid: <9611201404.AA12477@claudius.bfsec.bt.co.uk> OTHER CORE CHANGES Subject: Properly prototype safe{malloc,calloc,realloc,free}. From: Chip Salzenberg <chip@atlantic.net> Files: proto.h Subject: UnixWare 2.1 fix for perl5.003_08 - cope with fp->_cnt < -1, allow debugging Date: Wed, 20 Nov 1996 14:27:06 +0100 From: John Hughes <john@AtlanTech.COM> Files: sv.c UnixWare 2.1 has no fp->_base so most of the debugging stuff in sv_gets just core dumps. Also, for some unknown reason fp->_cnt is sometimes < -1, screwing up the initial SvGROW in svgets. Appart from that its io is std. p5p-msgid: <01BBD6EE.E915C860@malvinas.AtlanTech.COM> Subject: die -> croak Date: Thu, 21 Nov 1996 16:11:21 -0500 From: Gurusamy Sarathy <gsar@engin.umich.edu> Files: pp_ctl.c private-msgid: <199611212111.QAA17070@aatma.engin.umich.edu> Subject: Cleanup of {,un}pack('w'). From: Chip Salzenberg <chip@atlantic.net> Files: pp.c Subject: Cleanups from Ilya. From: Chip Salzenberg <chip@atlantic.net> Files: gv.c malloc.c pod/perlguts.pod pp_ctl.c Subject: Fix for unpack('w') on 64-bit systems. From: Chip Salzenberg <chip@atlantic.net> Files: pp.c Subject: Re: LC_NUMERIC support is ready + performance Date: Mon, 25 Nov 1996 22:08:27 -0500 (EST) From: Ilya Zakharevich <ilya@math.ohio-state.edu> Files: sv.c Chip Salzenberg writes: > > Having thought about the use of our own gcvt() and atof(), I've run > away in horror. It's just too hairy. > > So I've implemented the only viable alternative I know of: Toggling > LC_NUMERIC to/from "C" as needed. > > Patch follows. > > I think _09 is *very* close. Since _09 is going to be alpha anyway, I reiterate my question: Is there any reason to not include my hash/array performance patches in _09? Btw, here is the next performance patch. It makes PADTMP values stealable too. I do not do by setting TEMP flags on them, since it would be a very distributed patch, and it would break some places which check for TEMP for some other reasons (yes, I checked ;-). This patch decreases *twice* the memory usage of perl -e '$a = "a" x 1e6; 1' Enjoy, p5p-msgid: <199611260308.WAA02677@monk.mps.ohio-state.edu> Subject: Hash key sharing improvements from Ilya. From: Chip Salzenberg <chip@atlantic.net> Files: hv.c hv.h proto.h Subject: Mortal stack pre-allocation from Ilya. From: Chip Salzenberg <chip@atlantic.net> Files: pp.c pp.h pp_ctl.c pp_hot.c pp_sys.c PORTABILITY Subject: VMS patches post-5.003_08 Date: Fri, 22 Nov 1996 18:16:31 -0500 (EST) From: Charles Bailey <bailey@hmivax.humgen.upenn.edu> Files: lib/ExtUtils/MM_Unix.pm lib/ExtUtils/MM_VMS.pm lib/ExtUtils/MakeMaker.pm lib/File/Path.pm mg.c pp_ctl.c utils/h2xs.PL vms/config.vms vms/descrip.mms vms/gen_shrfls.pl vms/genconfig.pl vms/perlvms.pod vms/vms.c vms/vmsish.h Here're diffs to bring a base 5.003_08 up to the current VMS working sources. Nearly all of the changes are VMS-specific, and comprise miscellaneous bugfixes accumulated since 5.003_07, rather than any particular problem with 5.003_08. I'm posting them here since some of the patches change core files, and I'd like to insure that I haven't accidentally created problems for anyone else. With these and a couple of of the small patches already send to p5p, 5.003_08 builds clean and passes all tests under VMS. Thanks, Chip, for all the work. p5p-msgid: <1996Nov22.181631.1603238@hmivax.humgen.upenn.edu>
Diffstat (limited to 'perly.y')
-rw-r--r--perly.y89
1 files changed, 37 insertions, 52 deletions
diff --git a/perly.y b/perly.y
index 4feb549be5..6d3c75c20d 100644
--- a/perly.y
+++ b/perly.y
@@ -47,9 +47,9 @@ dep()
%token LOCAL MY
%type <ival> prog decl local format startsub remember mremember '&'
-%type <opval> block mblock mintro lineseq line loop cond else
+%type <opval> block mblock lineseq line loop cond else
%type <opval> expr term scalar ary hsh arylen star amper sideff
-%type <opval> argexpr nexpr texpr iexpr mexpr mtexpr miexpr
+%type <opval> argexpr nexpr texpr iexpr mexpr mnexpr mtexpr miexpr
%type <opval> listexpr listexprcom indirob
%type <opval> listop method proto cont my_scalar
%type <pval> label
@@ -100,17 +100,8 @@ remember: /* NULL */ /* start a full lexical scope */
{ $$ = block_start(TRUE); }
;
-mblock : '{' mintro mremember lineseq '}'
- { if ($2)
- $4 = $4 ? append_list(OP_LINESEQ,
- (LISTOP*)$2, (LISTOP*)$4) : $2;
- $$ = block_end($1, $3, $4); }
- ;
-
-mintro : /* NULL */ /* introduce pending lexicals */
- { $$ = min_intro_pending
- ? newSTATEOP(0, Nullch, newOP(OP_NULL, 0))
- : NULL; }
+mblock : '{' mremember lineseq '}'
+ { $$ = block_end($1,$2,$3); }
;
mremember: /* NULL */ /* start a partial lexical scope */
@@ -165,18 +156,19 @@ else : /* NULL */
{ $$ = scope($2); }
| ELSIF '(' mexpr ')' mblock else
{ copline = $1;
- $$ = newCONDOP(0, $3, scope($5), $6);
+ $$ = newSTATEOP(0, Nullch,
+ newCONDOP(0, $3, scope($5), $6));
hints |= HINT_BLOCK_SCOPE; }
;
cond : IF '(' remember mexpr ')' mblock else
{ copline = $1;
$$ = block_end($1, $3,
- newCONDOP(0, $4, scope($6), $7)); }
+ newCONDOP(0, $4, scope($6), $7)); }
| UNLESS '(' remember miexpr ')' mblock else
{ copline = $1;
$$ = block_end($1, $3,
- newCONDOP(0, $4, scope($6), $7)); }
+ newCONDOP(0, $4, scope($6), $7)); }
| IF block block else
{ copline = $1;
deprecate("if BLOCK BLOCK");
@@ -198,50 +190,42 @@ loop : label WHILE '(' remember mtexpr ')' mblock cont
{ copline = $2;
$$ = block_end($2, $4,
newSTATEOP(0, $1,
- newWHILEOP(0, 1, (LOOP*)Nullop,
- $5, $7, $8) )); }
+ newWHILEOP(0, 1, (LOOP*)Nullop,
+ $5, $7, $8))); }
| label UNTIL '(' remember miexpr ')' mblock cont
{ copline = $2;
$$ = block_end($2, $4,
newSTATEOP(0, $1,
- newWHILEOP(0, 1, (LOOP*)Nullop,
- $5, $7, $8) )); }
+ newWHILEOP(0, 1, (LOOP*)Nullop,
+ $5, $7, $8))); }
| label WHILE block block cont
{ copline = $2;
- $$ = newSTATEOP(0, $1,
- newWHILEOP(0, 1, (LOOP*)Nullop,
- scope($3), $4, $5) ); }
+ $$ = newWHILEOP(0, 1, (LOOP*)Nullop,
+ scope($3), $4, $5); }
| label UNTIL block block cont
{ copline = $2;
- $$ = newSTATEOP(0, $1,
- newWHILEOP(0, 1, (LOOP*)Nullop,
- invert(scalar(scope($3))), $4, $5)); }
- | label FOR MY remember my_scalar '(' expr ')' mblock cont
+ $$ = newWHILEOP(0, 1, (LOOP*)Nullop,
+ invert(scalar(scope($3))),
+ $4, $5); }
+ | label FOR MY remember my_scalar '(' mexpr ')' mblock cont
{ $$ = block_end($2, $4,
- newFOROP(0, $1, $2, $5, $7, $9, $10)); }
- | label FOR scalar '(' expr ')' block cont
- { $$ = newFOROP(0, $1, $2, mod($3, OP_ENTERLOOP),
- $5, $7, $8); }
- | label FOR '(' remember expr ')' mblock cont
+ newFOROP(0, $1, $2, $5, $7, $9, $10)); }
+ | label FOR scalar '(' remember mexpr ')' mblock cont
+ { $$ = block_end($2, $5,
+ newFOROP(0, $1, $2, mod($3, OP_ENTERLOOP),
+ $6, $8, $9)); }
+ | label FOR '(' remember mexpr ')' mblock cont
{ $$ = block_end($2, $4,
newFOROP(0, $1, $2, Nullop, $5, $7, $8)); }
- | label FOR '(' remember nexpr ';'
- { if ($5) {
- $5 = scalar($5);
- if (min_intro_pending)
- $5 = newSTATEOP(0, Nullch, $5); } }
- texpr ';'
- { $8 = scalar($8);
- if (min_intro_pending)
- $8 = newSTATEOP(0, Nullch, $8); }
- nexpr ')' mblock
+ | label FOR '(' remember mnexpr ';' mtexpr ';' mnexpr ')' mblock
/* basically fake up an initialize-while lineseq */
{ copline = $2;
$$ = block_end($2, $4,
- append_elem(OP_LINESEQ, $5,
- newSTATEOP(0, $1,
- newWHILEOP(0, 1, (LOOP*)Nullop,
- $8, $13, scalar($11))))); }
+ append_elem(OP_LINESEQ, scalar($5),
+ newSTATEOP(0, $1,
+ newWHILEOP(0, 1, (LOOP*)Nullop,
+ scalar($7),
+ $11, scalar($9))))); }
| label block cont /* a block is a loop that happens once */
{ $$ = newSTATEOP(0,
$1, newWHILEOP(0, 1, (LOOP*)Nullop,
@@ -263,18 +247,19 @@ iexpr : expr
;
mexpr : expr
- { $$ = min_intro_pending
- ? newSTATEOP(0, Nullch, $1) : $1; }
+ { $$ = $1; intro_my(); }
+ ;
+
+mnexpr : nexpr
+ { $$ = $1; intro_my(); }
;
mtexpr : texpr
- { $$ = min_intro_pending
- ? newSTATEOP(0, Nullch, $1) : $1; }
+ { $$ = $1; intro_my(); }
;
miexpr : iexpr
- { $$ = min_intro_pending
- ? newSTATEOP(0, Nullch, $1) : $1; }
+ { $$ = $1; intro_my(); }
;
label : /* empty */