diff options
author | Perl 5 Porters <perl5-porters@africa.nicoh.com> | 1996-11-26 20:48:00 +1200 |
---|---|---|
committer | Chip Salzenberg <chip@atlantic.net> | 1996-11-26 20:48:00 +1200 |
commit | bbce6d69784bf43b0e69e8d312042d65f258af23 (patch) | |
tree | eb5810e67656c19b6fb34dd0160c9131f24f65d1 /perly.y | |
parent | 6d82b38436d2a39ffb7413e68ad91495cd645fff (diff) | |
download | perl-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.y | 89 |
1 files changed, 37 insertions, 52 deletions
@@ -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 */ |