summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFather Chrysostomos <sprout@cpan.org>2012-08-22 16:24:37 -0700
committerFather Chrysostomos <sprout@cpan.org>2012-08-22 16:24:37 -0700
commitc44737a23e8184d44143ac18e378a12912e6e9e8 (patch)
treef98cabf338baedd2fffebf172ef50d8f2047f383
parenta91428a4cd72ac808bcbe6f7ef7fc9fe7971c938 (diff)
downloadperl-c44737a23e8184d44143ac18e378a12912e6e9e8.tar.gz
pad.[ch]: PADNAME_OUTER
I think this is the last bit of pad-as-sv stuff that was not abstracted away in pad-specific macros.
-rw-r--r--pad.c6
-rw-r--r--pad.h4
2 files changed, 8 insertions, 2 deletions
diff --git a/pad.c b/pad.c
index b3bbf35c03..fd8b178e12 100644
--- a/pad.c
+++ b/pad.c
@@ -85,7 +85,8 @@ SvOURSTASH slot pointing at the stash of the associated global (so that
duplicate C<our> declarations in the same package can be detected). SvUVX is
sometimes hijacked to store the generation number during compilation.
-If SvFAKE is set on the name SV, then that slot in the frame AV is
+If PADNAME_OUTER (SvFAKE) is set on the
+name SV, then that slot in the frame AV is
a REFCNT'ed reference to a lexical from "outside". In this case,
the name SV does not use xlow and xhigh to store a cop_seq range, since it is
in scope throughout. Instead xhigh stores some flags containing info about
@@ -96,7 +97,8 @@ cloning quicker.
If the 'name' is '&' the corresponding entry in the PAD
is a CV representing a possible closure.
-(SvFAKE and name of '&' is not a meaningful combination currently but could
+(PADNAME_OUTER and name of '&' is not a
+meaningful combination currently but could
become so if C<my sub foo {}> is implemented.)
Note that formats are treated as anon subs, and are cloned each time
diff --git a/pad.h b/pad.h
index 05bbc62ad9..30895c9ad6 100644
--- a/pad.h
+++ b/pad.h
@@ -221,6 +221,9 @@ Whether this is an "our" variable.
=for apidoc m|HV *|PADNAME_OURSTASH
The stash in which this "our" variable was declared.
+=for apidoc m|bool|PADNAME_OUTER|PADNAME pn
+Whether this entry belongs to an outer pad.
+
=for apidoc m|HV *|PADNAME_TYPE|PADNAME pn
The stash associated with a typed lexical. This returns the %Foo:: hash
for C<my Foo $bar>.
@@ -284,6 +287,7 @@ Restore the old pad saved into the local variable opad by PAD_SAVE_LOCAL()
#define PADNAME_UTF8(pn) !!SvUTF8(pn)
#define PADNAME_isOUR(pn) !!SvPAD_OUR(pn)
#define PADNAME_OURSTASH SvOURSTASH(pn)
+#define PADNAME_OUTER !!SvFAKE(pn)
#define PADNAME_TYPE(pn) (SvPAD_TYPED(pn) ? SvSTASH(pn) : NULL)