Change 14899 by jhi@alpha on 2002/02/27 17:50:09
Repatch from Robin Barker: anon subs in C<package;> are
now __ANON__::__ANON__ (should help for mod_perl package
since #12251)
Affected files ...
.... //depot/perl/gv.c#164 edit
.... //depot/perl/op.c#485 edit
.... //depot/perl/t/op/runlevel.t#23 edit
.... //depot/perl/toke.c#418 edit
Differences ...
==== //depot/perl/gv.c#164 (text) ====
Index: perl/gv.c
--- perl/gv.c.~1~ Wed Feb 27 11:00:05 2002
+++ perl/gv.c Wed Feb 27 11:00:05 2002
@@ -662,7 +662,7 @@
strEQ(name, "ARGVOUT")))
global = TRUE;
}
- else if (*name == '_' && (!name[1] || strEQ(name,"__ANON__")))
+ else if (*name == '_' && !name[1])
global = TRUE;
if (global)
==== //depot/perl/op.c#485 (text) ====
Index: perl/op.c
--- perl/op.c.~1~ Wed Feb 27 11:00:05 2002
+++ perl/op.c Wed Feb 27 11:00:05 2002
@@ -4755,13 +4755,15 @@
name = o ? SvPVx(cSVOPo->op_sv, n_a) : Nullch;
if (!name && PERLDB_NAMEANON && CopLINE(PL_curcop)) {
SV *sv = sv_newmortal();
- Perl_sv_setpvf(aTHX_ sv, "__ANON__[%s:%"IVdf"]",
+ Perl_sv_setpvf(aTHX_ sv, "%s[%s:%"IVdf"]",
+ PL_curstash ? "__ANON__" : "__ANON__::__ANON__",
CopFILE(PL_curcop), (IV)CopLINE(PL_curcop));
aname = SvPVX(sv);
}
else
aname = Nullch;
- gv = gv_fetchpv(name ? name : (aname ? aname : "__ANON__"),
+ gv = gv_fetchpv(name ? name : (aname ? aname :
+ (PL_curstash ? "__ANON__" : "__ANON__::__ANON__")),
GV_ADDMULTI | ((block || attrs) ? 0 : GV_NOINIT),
SVt_PVCV);
@@ -5179,7 +5181,9 @@
CV *
Perl_newXS(pTHX_ char *name, XSUBADDR_t subaddr, char *filename)
{
- GV *gv = gv_fetchpv(name ? name : "__ANON__", GV_ADDMULTI, SVt_PVCV);
+ GV *gv = gv_fetchpv(name ? name :
+ (PL_curstash ? "__ANON__" : "__ANON__::__ANON__"),
+ GV_ADDMULTI, SVt_PVCV);
register CV *cv;
if ((cv = (name ? GvCV(gv) : Nullcv))) {
==== //depot/perl/t/op/runlevel.t#23 (xtext) ====
Index: perl/t/op/runlevel.t
--- perl/t/op/runlevel.t.~1~ Wed Feb 27 11:00:05 2002
+++ perl/t/op/runlevel.t Wed Feb 27 11:00:05 2002
@@ -311,7 +311,7 @@
eval { die };
&{sub { eval 'die' }}();
sub foo { eval { die } } foo();
-{package rmb; sub{ eval{die} } ->() }; # check __ANON__ is global
+{package rmb; sub{ eval{die} } ->() }; # check __ANON__ knows package
EXPECT
In DIE
main|-|8|(eval)
@@ -323,7 +323,7 @@
main|-|10|main::foo
In DIE
rmb|-|11|(eval)
-rmb|-|11|main::__ANON__
+rmb|-|11|rmb::__ANON__
########
package TEST;
==== //depot/perl/toke.c#418 (text) ====
Index: perl/toke.c
--- perl/toke.c.~1~ Wed Feb 27 11:00:05 2002
+++ perl/toke.c Wed Feb 27 11:00:05 2002
@@ -4027,7 +4027,8 @@
if (strEQ(proto, "$"))
OPERATOR(UNIOPSUB);
if (*proto == '&' && *s == '{') {
- sv_setpv(PL_subname,"__ANON__");
+ sv_setpv(PL_subname, PL_curstash ?
+ "__ANON__" : "__ANON__::__ANON__");
PREBLOCK(LSTOPSUB);
}
}
@@ -5008,7 +5009,8 @@
force_next(THING);
}
if (!have_name) {
- sv_setpv(PL_subname,"__ANON__");
+ sv_setpv(PL_subname,
+ PL_curstash ? "__ANON__" : "__ANON__::__ANON__");
TOKEN(ANONSUB);
}
(void) force_word(PL_oldbufptr + tboffset, WORD,
End of Patch.