can be looked up from Perl code at run time through eval"" the way
C<my>/C<our> variables can be. Since they can't be looked up by "name"
but only by their index allocated at compile time (which is usually
-in C<PL_op->op_targ>), wasting a name SV for them doesn't make sense.
+in C<< PL_op->op_targ >>), wasting a name SV for them doesn't make sense.
The pad names in the PADNAMELIST have their PV holding the name of
the variable. The C<COP_SEQ_RANGE_LOW> and C<_HIGH> fields form a range
=for apidoc AmxU|SV **|PL_curpad
Points directly to the body of the L</PL_comppad> array.
-(I.e., this is C<PAD_ARRAY(PL_comppad)>.)
+(I.e., this is C<PadARRAY(PL_comppad)>.)
=cut
*/
}
DEBUG_X(PerlIO_printf(Perl_debug_log,
- "Pad 0x%"UVxf"[0x%"UVxf"] new: compcv=0x%"UVxf
- " name=0x%"UVxf" flags=0x%"UVxf"\n",
+ "Pad 0x%" UVxf "[0x%" UVxf "] new: compcv=0x%" UVxf
+ " name=0x%" UVxf " flags=0x%" UVxf "\n",
PTR2UV(PL_comppad), PTR2UV(PL_curpad), PTR2UV(PL_compcv),
PTR2UV(padname), (UV)flags
)
PERL_ARGS_ASSERT_CV_UNDEF_FLAGS;
DEBUG_X(PerlIO_printf(Perl_debug_log,
- "CV undef: cv=0x%"UVxf" comppad=0x%"UVxf"\n",
+ "CV undef: cv=0x%" UVxf " comppad=0x%" UVxf "\n",
PTR2UV(cv), PTR2UV(PL_comppad))
);
subs to the outer of this cv. */
DEBUG_X(PerlIO_printf(Perl_debug_log,
- "Pad undef: cv=0x%"UVxf" padlist=0x%"UVxf" comppad=0x%"UVxf"\n",
+ "Pad undef: cv=0x%" UVxf " padlist=0x%" UVxf " comppad=0x%" UVxf "\n",
PTR2UV(cv), PTR2UV(padlist), PTR2UV(PL_comppad))
);
if (name && PadnamePV(name) && *PadnamePV(name) == '&')
{
CV * const innercv = MUTABLE_CV(curpad[ix]);
- U32 inner_rc = SvREFCNT(innercv);
- assert(inner_rc);
+ U32 inner_rc;
+ assert(innercv);
assert(SvTYPE(innercv) != SVt_PVFM);
+ inner_rc = SvREFCNT(innercv);
+ assert(inner_rc);
if (SvREFCNT(comppad) < 2) { /* allow for /(?{ sub{} })/ */
curpad[ix] = NULL;
sv_upgrade(PL_curpad[offset], SVt_PVCV);
assert(SvPADMY(PL_curpad[offset]));
DEBUG_Xv(PerlIO_printf(Perl_debug_log,
- "Pad addname: %ld \"%s\" new lex=0x%"UVxf"\n",
+ "Pad addname: %ld \"%s\" new lex=0x%" UVxf "\n",
(long)offset, PadnamePV(name),
PTR2UV(PL_curpad[offset])));
PL_curpad = AvARRAY(PL_comppad);
DEBUG_X(PerlIO_printf(Perl_debug_log,
- "Pad 0x%"UVxf"[0x%"UVxf"] alloc: %ld for %s\n",
+ "Pad 0x%" UVxf "[0x%" UVxf "] alloc: %ld for %s\n",
PTR2UV(PL_comppad), PTR2UV(PL_curpad), (long) retval,
PL_op_name[optype]));
#ifdef DEBUG_LEAKING_SCALARS
assert((flags & ~padadd_OUR) == 0);
- if (PadnamelistMAX(PL_comppad_name) < 0 || !ckWARN(WARN_MISC))
+ if (PadnamelistMAX(PL_comppad_name) < 0 || !ckWARN(WARN_SHADOW))
return; /* nothing to check */
svp = PadnamelistARRAY(PL_comppad_name);
if (is_our && (SvPAD_OUR(sv)))
break; /* "our" masking "our" */
/* diag_listed_as: "%s" variable %s masks earlier declaration in same %s */
- Perl_warner(aTHX_ packWARN(WARN_MISC),
- "\"%s\" %s %"PNf" masks earlier declaration in same %s",
+ Perl_warner(aTHX_ packWARN(WARN_SHADOW),
+ "\"%s\" %s %" PNf " masks earlier declaration in same %s",
( is_our ? "our" :
PL_parser->in_my == KEY_my ? "my" :
PL_parser->in_my == KEY_sigvar ? "my" :
&& SvOURSTASH(sv) == ourstash
&& memEQ(PadnamePV(sv), PadnamePV(name), PadnameLEN(name)))
{
- Perl_warner(aTHX_ packWARN(WARN_MISC),
- "\"our\" variable %"PNf" redeclared", PNfARG(sv));
+ Perl_warner(aTHX_ packWARN(WARN_SHADOW),
+ "\"our\" variable %" PNf " redeclared", PNfARG(sv));
if (off <= PL_comppad_name_floor)
- Perl_warner(aTHX_ packWARN(WARN_MISC),
+ Perl_warner(aTHX_ packWARN(WARN_SHADOW),
"\t(Did you mean \"local\" instead of \"our\"?)\n");
break;
}
Until the lexical C<$_> feature was removed, this function would
find the position of the lexical C<$_> in the pad of the
-currently-executing function and returns the offset in the current pad,
+currently-executing function and return the offset in the current pad,
or C<NOT_IN_PAD>.
Now it always returns C<NOT_IN_PAD>.
{
/* diag_listed_as: Variable "%s" is not available */
Perl_ck_warner(aTHX_ packWARN(WARN_CLOSURE),
- "%se \"%"PNf"\" is not available",
+ "%se \"%" PNf "\" is not available",
*PadnamePV(name) == '&'
? "Subroutin"
: "Variabl",
*out_flags = 0;
DEBUG_Xv(PerlIO_printf(Perl_debug_log,
- "Pad findlex cv=0x%"UVxf" searching \"%.*s\" seq=%d%s\n",
+ "Pad findlex cv=0x%" UVxf " searching \"%.*s\" seq=%d%s\n",
PTR2UV(cv), (int)namelen, namepv, (int)seq,
out_capture ? " capturing" : "" ));
? PAD_FAKELEX_MULTI : 0;
DEBUG_Xv(PerlIO_printf(Perl_debug_log,
- "Pad findlex cv=0x%"UVxf" matched: offset=%ld (%lu,%lu)\n",
+ "Pad findlex cv=0x%" UVxf " matched: offset=%ld (%lu,%lu)\n",
PTR2UV(cv), (long)offset,
(unsigned long)COP_SEQ_RANGE_LOW(*out_name),
(unsigned long)COP_SEQ_RANGE_HIGH(*out_name)));
*out_name = name_p[offset]; /* return the name */
*out_flags = PARENT_FAKELEX_FLAGS(*out_name);
DEBUG_Xv(PerlIO_printf(Perl_debug_log,
- "Pad findlex cv=0x%"UVxf" matched: offset=%ld flags=0x%lx index=%lu\n",
+ "Pad findlex cv=0x%" UVxf " matched: offset=%ld flags=0x%lx index=%lu\n",
PTR2UV(cv), (long)offset, (unsigned long)*out_flags,
(unsigned long) PARENT_PAD_INDEX(*out_name)
));
/* diag_listed_as: Variable "%s" will not stay
shared */
Perl_warner(aTHX_ packWARN(WARN_CLOSURE),
- "%se \"%"UTF8f"\" will not stay shared",
+ "%se \"%" UTF8f "\" will not stay shared",
*namepv == '&' ? "Subroutin" : "Variabl",
UTF8fARG(1, namelen, namepv));
}
PADNAME *n;
/* not yet caught - look further up */
DEBUG_Xv(PerlIO_printf(Perl_debug_log,
- "Pad findlex cv=0x%"UVxf" chasing lex in outer pad\n",
+ "Pad findlex cv=0x%" UVxf " chasing lex in outer pad\n",
PTR2UV(cv)));
n = *out_name;
(void) pad_findlex(namepv, namelen, flags, CvOUTSIDE(cv),
*out_capture = AvARRAY(PadlistARRAY(padlist)[
CvDEPTH(cv) ? CvDEPTH(cv) : 1])[offset];
DEBUG_Xv(PerlIO_printf(Perl_debug_log,
- "Pad findlex cv=0x%"UVxf" found lex=0x%"UVxf"\n",
+ "Pad findlex cv=0x%" UVxf " found lex=0x%" UVxf "\n",
PTR2UV(cv), PTR2UV(*out_capture)));
if (SvPADSTALE(*out_capture)
/* But also note the offset, as newMYSUB needs it */
PARENT_PAD_INDEX_set(new_name, offset);
DEBUG_Xv(PerlIO_printf(Perl_debug_log,
- "Pad findlex cv=0x%"UVxf" saved captured sv 0x%"UVxf" at offset %ld\n",
+ "Pad findlex cv=0x%" UVxf " saved captured sv 0x%" UVxf " at offset %ld\n",
PTR2UV(cv), PTR2UV(*new_capturep), (long)new_offset));
}
*out_name = new_name;
if (!po)
Perl_croak(aTHX_ "panic: pad_sv po");
DEBUG_X(PerlIO_printf(Perl_debug_log,
- "Pad 0x%"UVxf"[0x%"UVxf"] sv: %ld sv=0x%"UVxf"\n",
+ "Pad 0x%" UVxf "[0x%" UVxf "] sv: %ld sv=0x%" UVxf "\n",
PTR2UV(PL_comppad), PTR2UV(PL_curpad), (long)po, PTR2UV(PL_curpad[po]))
);
return PL_curpad[po];
ASSERT_CURPAD_ACTIVE("pad_setsv");
DEBUG_X(PerlIO_printf(Perl_debug_log,
- "Pad 0x%"UVxf"[0x%"UVxf"] setsv: %ld sv=0x%"UVxf"\n",
+ "Pad 0x%" UVxf "[0x%" UVxf "] setsv: %ld sv=0x%" UVxf "\n",
PTR2UV(PL_comppad), PTR2UV(PL_curpad), (long)po, PTR2UV(sv))
);
PL_curpad[po] = sv;
const PADNAME * const name = svp[off];
if (name && PadnameLEN(name) && !PadnameOUTER(name))
Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL),
- "%"PNf" never introduced",
+ "%" PNf " never introduced",
PNfARG(name));
}
}
(long)po, (long)AvFILLp(PL_comppad));
DEBUG_X(PerlIO_printf(Perl_debug_log,
- "Pad 0x%"UVxf"[0x%"UVxf"] swipe: %ld\n",
+ "Pad 0x%" UVxf "[0x%" UVxf "] swipe: %ld\n",
PTR2UV(PL_comppad), PTR2UV(PL_curpad), (long)po));
if (refadjust)
AvARRAY(PL_comppad), PL_curpad);
DEBUG_X(PerlIO_printf(Perl_debug_log,
- "Pad 0x%"UVxf"[0x%"UVxf"] reset: padix %ld -> %ld",
+ "Pad 0x%" UVxf "[0x%" UVxf "] reset: padix %ld -> %ld",
PTR2UV(PL_comppad), PTR2UV(PL_curpad),
(long)PL_padix, (long)PL_padix_floor
)
break; /* no need to mark already-compiled code */
if (CvANON(cv)) {
DEBUG_Xv(PerlIO_printf(Perl_debug_log,
- "Pad clone on cv=0x%"UVxf"\n", PTR2UV(cv)));
+ "Pad clone on cv=0x%" UVxf "\n", PTR2UV(cv)));
CvCLONE_on(cv);
}
CvHASEVAL_on(cv);
Perl_croak(aTHX_ "panic: pad_free po");
DEBUG_X(PerlIO_printf(Perl_debug_log,
- "Pad 0x%"UVxf"[0x%"UVxf"] free: %ld\n",
+ "Pad 0x%" UVxf "[0x%" UVxf "] free: %ld\n",
PTR2UV(PL_comppad), PTR2UV(PL_curpad), (long)po)
);
pname = PadnamelistARRAY(pad_name);
ppad = AvARRAY(pad);
Perl_dump_indent(aTHX_ level, file,
- "PADNAME = 0x%"UVxf"(0x%"UVxf") PAD = 0x%"UVxf"(0x%"UVxf")\n",
+ "PADNAME = 0x%" UVxf "(0x%" UVxf ") PAD = 0x%" UVxf "(0x%" UVxf ")\n",
PTR2UV(pad_name), PTR2UV(pname), PTR2UV(pad), PTR2UV(ppad)
);
if (namesv) {
if (PadnameOUTER(namesv))
Perl_dump_indent(aTHX_ level+1, file,
- "%2d. 0x%"UVxf"<%lu> FAKE \"%s\" flags=0x%lx index=%lu\n",
+ "%2d. 0x%" UVxf "<%lu> FAKE \"%s\" flags=0x%lx index=%lu\n",
(int) ix,
PTR2UV(ppad[ix]),
(unsigned long) (ppad[ix] ? SvREFCNT(ppad[ix]) : 0),
);
else
Perl_dump_indent(aTHX_ level+1, file,
- "%2d. 0x%"UVxf"<%lu> (%lu,%lu) \"%s\"\n",
+ "%2d. 0x%" UVxf "<%lu> (%lu,%lu) \"%s\"\n",
(int) ix,
PTR2UV(ppad[ix]),
(unsigned long) (ppad[ix] ? SvREFCNT(ppad[ix]) : 0),
}
else if (full) {
Perl_dump_indent(aTHX_ level+1, file,
- "%2d. 0x%"UVxf"<%lu>\n",
+ "%2d. 0x%" UVxf "<%lu>\n",
(int) ix,
PTR2UV(ppad[ix]),
(unsigned long) (ppad[ix] ? SvREFCNT(ppad[ix]) : 0)
PERL_ARGS_ASSERT_CV_DUMP;
PerlIO_printf(Perl_debug_log,
- " %s: CV=0x%"UVxf" (%s), OUTSIDE=0x%"UVxf" (%s)\n",
+ " %s: CV=0x%" UVxf " (%s), OUTSIDE=0x%" UVxf " (%s)\n",
title,
PTR2UV(cv),
(CvANON(cv) ? "ANON"
: CvGV(outside) ? GvNAME(CvGV(outside)) : "UNDEFINED"));
PerlIO_printf(Perl_debug_log,
- " PADLIST = 0x%"UVxf"\n", PTR2UV(padlist));
+ " PADLIST = 0x%" UVxf "\n", PTR2UV(padlist));
do_dump_pad(1, Perl_debug_log, padlist, 1);
}
{
/* my sub */
/* Just provide a stub, but name it. It will be
- upgrade to the real thing on scope entry. */
+ upgraded to the real thing on scope entry. */
dVAR;
U32 hash;
PERL_HASH(hash, PadnamePV(namesv)+1,
"Constants from lexical "
"variables potentially "
"modified elsewhere are "
- "deprecated");
+ "deprecated. This will not "
+ "be allowed in Perl 5.32");
/* We *copy* the lexical variable, and donate the
copy to newCONSTSUB. Yes, this is ugly, and
should be killed. We need to do this for the
if (CvLEXICAL(cv) || flags & CV_NAME_NOTQUAL)
sv_sethek(retsv, CvNAME_HEK(cv));
else {
- sv_sethek(retsv, HvNAME_HEK(CvSTASH(cv)));
+ if (CvSTASH(cv) && HvNAME_HEK(CvSTASH(cv)))
+ sv_sethek(retsv, HvNAME_HEK(CvSTASH(cv)));
+ else
+ sv_setpvs(retsv, "__ANON__");
sv_catpvs(retsv, "::");
sv_cathek(retsv, CvNAME_HEK(cv));
}