This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Simplify parser’s handling of my/local
authorFather Chrysostomos <sprout@cpan.org>
Sat, 21 May 2016 12:42:55 +0000 (05:42 -0700)
committerFather Chrysostomos <sprout@cpan.org>
Sat, 21 May 2016 13:07:28 +0000 (06:07 -0700)
commit28383d1aefa4f4c119153a5ed41ebf82ecd7a062
treed6a9b5bd9328d65beb552bf87b2886e4c3fe24d2
parent76734a3218e712760695898e424c2369ccdd49c6
Simplify parser’s handling of my/local

In Perl 5.000, the same token, LOCAL, was used for both ‘my’ and
‘local’, with a token value, passed to localize() as a second argu-
ment, to distinguish between them.

perl-5.003_07-9-g55497cf (inseparable changes from patch from
perl5.003_07 to perl5.003_08), for no apparent reason, split them into
two tokens, removing the token values and assigning values in perly.y
via $$ = 0 and $$ = 1.  They still ultimately made their way through
the same grammar rule, as there was only one localize() call in
perly.y.  The code still made sense.

perl-5.005_02-1816-g09bef84 (sub : attrlist) changed things, such that
the tokens are separate *and* they get separate token values assigned
to them.  ‘local’ and ‘my’ no longer follow the same grammar rules
in perly.y, so there are separate localize() calls for the different
token types.  Hence, the use of a token value to distinguish them does
not make sense.  It just makes this more complicated that necessary.

So this commit removes the token values.  Since the two token types
follow different paths through perly.y and have separate localize()
calls, we can hard-code the argument to localize() there, instead of
passing the value through from toke.c as a token value.

This does shrink toke.o slightly (for me it went from 876040 to
876000), and it makes this conceptually clearer.
perly.act
perly.h
perly.tab
perly.y
toke.c