This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Store state subs in the pad
authorFather Chrysostomos <sprout@cpan.org>
Fri, 6 Jul 2012 06:22:21 +0000 (23:22 -0700)
committerFather Chrysostomos <sprout@cpan.org>
Sun, 16 Sep 2012 05:44:57 +0000 (22:44 -0700)
commit5027875589574a2ca6c9fb86193d4c8f720ef004
tree3e9dd7504ca98c4a28c71ba1baf65747cc4d2e0d
parentf37b842aabb9fad0fb5fe0a4803f30c6ead59c74
Store state subs in the pad

In making ‘sub foo’ respect previous ‘our sub’ declarations in a
recent commit, I actually made ‘state sub foo’ into a syntax error.
(At the time, I patched up MYSUB in perly.y to keep the tests for ‘"my
sub" not yet implemented’ still working.)  Basically, it was creat-
ing an empty pad entry, but returning something that perly.y was not
expecting.

This commit adjusts the grammar to allow the SUB branch of barestmt to
accept a PRIVATEREF for its subname, in addition to a WORD.  It reuses
the subname rule that SUB used to use (before our subs were added),
gutting it to remove the special block handling, which SUB now tokes
care of.  That means the MYSUB rule will no longer turn on CvSPECIAL
on the PL_compcv that is going to be thrown away anyway.

The code for special blocks (BEGIN, END, etc.) that turns on CvSPECIAL
now checks for state subs and skips those.  It only applies to our
subs and package subs.

newMYSUB has now actually been written.  It basically duplicates
newATTRSUB, except for GV-specific things.  It does currently vivify a
GV and set CvGV, but I am hoping to change that later.  I also hope to
merge some of the code later, too.

I changed the prototype of newMYSUB to make it easier to use.  It is
not used anywhere on CPAN and has always simply died, so that should
be all right.
embed.fnc
embed.h
op.c
perly.act
perly.h
perly.tab
perly.y
proto.h