3 * Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007 by Larry Wall and others
5 * You may distribute under the terms of either the GNU General Public
6 * License or the Artistic License, as specified in the README file.
8 * "Anyway: there was this Mr Frodo left an orphan and stranded, as you
9 * might say, among those queer Bucklanders, being brought up anyhow in
10 * Brandy Hall. A regular warren, by all accounts. Old Master Gorbadoc
11 * never had fewer than a couple of hundred relations in the place. Mr
12 * Bilbo never did a kinder deed than when he brought the lad back to
13 * live among decent folk." --the Gaffer
17 * As of Sept 2002, this file is new and may be in a state of flux for
18 * a while. I've marked things I intent to come back and look at further
19 * with an 'XXX DAPM' comment.
23 =head1 Pad Data Structures
25 This file contains the functions that create and manipulate scratchpads,
26 which are array-of-array data structures attached to a CV (ie a sub)
27 and which store lexical variables and opcode temporary and per-thread
30 =for apidoc m|AV *|CvPADLIST|CV *cv
31 CV's can have CvPADLIST(cv) set to point to an AV.
33 For these purposes "forms" are a kind-of CV, eval""s are too (except they're
34 not callable at will and are always thrown away after the eval"" is done
35 executing). Require'd files are simply evals without any outer lexical
38 XSUBs don't have CvPADLIST set - dXSTARG fetches values from PL_curpad,
39 but that is really the callers pad (a slot of which is allocated by
42 The CvPADLIST AV has does not have AvREAL set, so REFCNT of component items
43 is managed "manual" (mostly in pad.c) rather than normal av.c rules.
44 The items in the AV are not SVs as for a normal AV, but other AVs:
46 0'th Entry of the CvPADLIST is an AV which represents the "names" or rather
47 the "static type information" for lexicals.
49 The CvDEPTH'th entry of CvPADLIST AV is an AV which is the stack frame at that
50 depth of recursion into the CV.
51 The 0'th slot of a frame AV is an AV which is @_.
52 other entries are storage for variables and op targets.
55 C<PL_comppad_name> is set to the names AV.
56 C<PL_comppad> is set to the frame AV for the frame CvDEPTH == 1.
57 C<PL_curpad> is set to the body of the frame AV (i.e. AvARRAY(PL_comppad)).
59 During execution, C<PL_comppad> and C<PL_curpad> refer to the live
60 frame of the currently executing sub.
62 Iterating over the names AV iterates over all possible pad
63 items. Pad slots that are SVs_PADTMP (targets/GVs/constants) end up having
64 &PL_sv_undef "names" (see pad_alloc()).
66 Only my/our variable (SVs_PADMY/SVs_PADOUR) slots get valid names.
67 The rest are op targets/GVs/constants which are statically allocated
68 or resolved at compile time. These don't have names by which they
69 can be looked up from Perl code at run time through eval"" like
70 my/our variables can be. Since they can't be looked up by "name"
71 but only by their index allocated at compile time (which is usually
72 in PL_op->op_targ), wasting a name SV for them doesn't make sense.
74 The SVs in the names AV have their PV being the name of the variable.
75 xlow+1..xhigh inclusive in the NV union is a range of cop_seq numbers for
76 which the name is valid. For typed lexicals name SV is SVt_PVMG and SvSTASH
77 points at the type. For C<our> lexicals, the type is also SVt_PVMG, with the
78 SvOURSTASH slot pointing at the stash of the associated global (so that
79 duplicate C<our> declarations in the same package can be detected). SvUVX is
80 sometimes hijacked to store the generation number during compilation.
82 If SvFAKE is set on the name SV, then that slot in the frame AV is
83 a REFCNT'ed reference to a lexical from "outside". In this case,
84 the name SV does not use xlow and xhigh to store a cop_seq range, since it is
85 in scope throughout. Instead xhigh stores some flags containing info about
86 the real lexical (is it declared in an anon, and is it capable of being
87 instantiated multiple times?), and for fake ANONs, xlow contains the index
88 within the parent's pad where the lexical's value is stored, to make
91 If the 'name' is '&' the corresponding entry in frame AV
92 is a CV representing a possible closure.
93 (SvFAKE and name of '&' is not a meaningful combination currently but could
94 become so if C<my sub foo {}> is implemented.)
96 Note that formats are treated as anon subs, and are cloned each time
97 write is called (if necessary).
99 The flag SVf_PADSTALE is cleared on lexicals each time the my() is executed,
100 and set on scope exit. This allows the 'Variable $x is not available' warning
101 to be generated in evals, such as
103 { my $x = 1; sub f { eval '$x'} } f();
105 For state vars, SVf_PADSTALE is overloaded to mean 'not yet initialised'
112 #define PERL_IN_PAD_C
114 #include "keywords.h"
116 #define COP_SEQ_RANGE_LOW_set(sv,val) \
117 STMT_START { ((XPVNV*)SvANY(sv))->xnv_u.xpad_cop_seq.xlow = (val); } STMT_END
118 #define COP_SEQ_RANGE_HIGH_set(sv,val) \
119 STMT_START { ((XPVNV*)SvANY(sv))->xnv_u.xpad_cop_seq.xhigh = (val); } STMT_END
121 #define PARENT_PAD_INDEX_set(sv,val) \
122 STMT_START { ((XPVNV*)SvANY(sv))->xnv_u.xpad_cop_seq.xlow = (val); } STMT_END
123 #define PARENT_FAKELEX_FLAGS_set(sv,val) \
124 STMT_START { ((XPVNV*)SvANY(sv))->xnv_u.xpad_cop_seq.xhigh = (val); } STMT_END
126 #define PAD_MAX I32_MAX
129 void pad_peg(const char* s) {
132 PERL_ARGS_ASSERT_PAD_PEG;
141 Create a new compiling padlist, saving and updating the various global
142 vars at the same time as creating the pad itself. The following flags
143 can be OR'ed together:
145 padnew_CLONE this pad is for a cloned CV
146 padnew_SAVE save old globals
147 padnew_SAVESUB also save extra stuff for start of sub
153 Perl_pad_new(pTHX_ int flags)
156 AV *padlist, *padname, *pad;
158 ASSERT_CURPAD_LEGAL("pad_new");
160 /* XXX DAPM really need a new SAVEt_PAD which restores all or most
161 * vars (based on flags) rather than storing vals + addresses for
162 * each individually. Also see pad_block_start.
163 * XXX DAPM Try to see whether all these conditionals are required
166 /* save existing state, ... */
168 if (flags & padnew_SAVE) {
170 SAVESPTR(PL_comppad_name);
171 if (! (flags & padnew_CLONE)) {
173 SAVEI32(PL_comppad_name_fill);
174 SAVEI32(PL_min_intro_pending);
175 SAVEI32(PL_max_intro_pending);
176 SAVEBOOL(PL_cv_has_eval);
177 if (flags & padnew_SAVESUB) {
178 SAVEI32(PL_pad_reset_pending);
182 /* XXX DAPM interestingly, PL_comppad_name_floor never seems to be
183 * saved - check at some pt that this is okay */
185 /* ... create new pad ... */
191 if (flags & padnew_CLONE) {
192 /* XXX DAPM I dont know why cv_clone needs it
193 * doing differently yet - perhaps this separate branch can be
194 * dispensed with eventually ???
197 AV * const a0 = newAV(); /* will be @_ */
199 av_store(pad, 0, (SV*)a0);
203 av_store(pad, 0, NULL);
207 av_store(padlist, 0, (SV*)padname);
208 av_store(padlist, 1, (SV*)pad);
210 /* ... then update state variables */
212 PL_comppad_name = (AV*)(*av_fetch(padlist, 0, FALSE));
213 PL_comppad = (AV*)(*av_fetch(padlist, 1, FALSE));
214 PL_curpad = AvARRAY(PL_comppad);
216 if (! (flags & padnew_CLONE)) {
217 PL_comppad_name_fill = 0;
218 PL_min_intro_pending = 0;
223 DEBUG_X(PerlIO_printf(Perl_debug_log,
224 "Pad 0x%"UVxf"[0x%"UVxf"] new: compcv=0x%"UVxf
225 " name=0x%"UVxf" flags=0x%"UVxf"\n",
226 PTR2UV(PL_comppad), PTR2UV(PL_curpad), PTR2UV(PL_compcv),
227 PTR2UV(padname), (UV)flags
231 return (PADLIST*)padlist;
235 =for apidoc pad_undef
237 Free the padlist associated with a CV.
238 If parts of it happen to be current, we null the relevant
239 PL_*pad* global vars so that we don't have any dangling references left.
240 We also repoint the CvOUTSIDE of any about-to-be-orphaned
241 inner subs to the outer of this cv.
243 (This function should really be called pad_free, but the name was already
250 Perl_pad_undef(pTHX_ CV* cv)
254 const PADLIST * const padlist = CvPADLIST(cv);
256 PERL_ARGS_ASSERT_PAD_UNDEF;
258 pad_peg("pad_undef");
261 if (SvIS_FREED(padlist)) /* may be during global destruction */
264 DEBUG_X(PerlIO_printf(Perl_debug_log,
265 "Pad undef: cv=0x%"UVxf" padlist=0x%"UVxf" comppad=0x%"UVxf"\n",
266 PTR2UV(cv), PTR2UV(padlist), PTR2UV(PL_comppad))
269 /* detach any '&' anon children in the pad; if afterwards they
270 * are still live, fix up their CvOUTSIDEs to point to our outside,
272 /* XXX DAPM for efficiency, we should only do this if we know we have
273 * children, or integrate this loop with general cleanup */
275 if (!PL_dirty) { /* don't bother during global destruction */
276 CV * const outercv = CvOUTSIDE(cv);
277 const U32 seq = CvOUTSIDE_SEQ(cv);
278 AV * const comppad_name = (AV*)AvARRAY(padlist)[0];
279 SV ** const namepad = AvARRAY(comppad_name);
280 AV * const comppad = (AV*)AvARRAY(padlist)[1];
281 SV ** const curpad = AvARRAY(comppad);
282 for (ix = AvFILLp(comppad_name); ix > 0; ix--) {
283 SV * const namesv = namepad[ix];
284 if (namesv && namesv != &PL_sv_undef
285 && *SvPVX_const(namesv) == '&')
287 CV * const innercv = (CV*)curpad[ix];
288 U32 inner_rc = SvREFCNT(innercv);
291 SvREFCNT_dec(namesv);
293 if (SvREFCNT(comppad) < 2) { /* allow for /(?{ sub{} })/ */
295 SvREFCNT_dec(innercv);
299 /* in use, not just a prototype */
300 if (inner_rc && (CvOUTSIDE(innercv) == cv)) {
301 assert(CvWEAKOUTSIDE(innercv));
302 /* don't relink to grandfather if he's being freed */
303 if (outercv && SvREFCNT(outercv)) {
304 CvWEAKOUTSIDE_off(innercv);
305 CvOUTSIDE(innercv) = outercv;
306 CvOUTSIDE_SEQ(innercv) = seq;
307 SvREFCNT_inc_simple_void_NN(outercv);
310 CvOUTSIDE(innercv) = NULL;
317 ix = AvFILLp(padlist);
319 const SV* const sv = AvARRAY(padlist)[ix--];
321 if (sv == (SV*)PL_comppad_name)
322 PL_comppad_name = NULL;
323 else if (sv == (SV*)PL_comppad) {
330 SvREFCNT_dec((SV*)CvPADLIST(cv));
331 CvPADLIST(cv) = NULL;
338 =for apidoc pad_add_name
340 Create a new name and associated PADMY SV in the current pad; return the
342 If C<typestash> is valid, the name is for a typed lexical; set the
343 name's stash to that value.
344 If C<ourstash> is valid, it's an our lexical, set the name's
345 SvOURSTASH to that value
347 If fake, it means we're cloning an existing entry
353 Perl_pad_add_name(pTHX_ const char *name, HV* typestash, HV* ourstash, bool fake, bool state)
356 const PADOFFSET offset = pad_alloc(OP_PADSV, SVs_PADMY);
358 = newSV_type((ourstash || typestash) ? SVt_PVMG : SVt_PVNV);
360 PERL_ARGS_ASSERT_PAD_ADD_NAME;
362 ASSERT_CURPAD_ACTIVE("pad_add_name");
364 sv_setpv(namesv, name);
367 assert(SvTYPE(namesv) == SVt_PVMG);
368 SvPAD_TYPED_on(namesv);
369 SvSTASH_set(namesv, (HV*)SvREFCNT_inc_simple_NN((SV*)typestash));
372 SvPAD_OUR_on(namesv);
373 SvOURSTASH_set(namesv, ourstash);
374 SvREFCNT_inc_simple_void_NN(ourstash);
377 SvPAD_STATE_on(namesv);
380 av_store(PL_comppad_name, offset, namesv);
383 DEBUG_Xv(PerlIO_printf(Perl_debug_log,
384 "Pad addname: %ld \"%s\" FAKE\n", (long)offset, name));
387 /* not yet introduced */
388 COP_SEQ_RANGE_LOW_set(namesv, PAD_MAX); /* min */
389 COP_SEQ_RANGE_HIGH_set(namesv, 0); /* max */
391 if (!PL_min_intro_pending)
392 PL_min_intro_pending = offset;
393 PL_max_intro_pending = offset;
394 /* if it's not a simple scalar, replace with an AV or HV */
395 /* XXX DAPM since slot has been allocated, replace
396 * av_store with PL_curpad[offset] ? */
398 av_store(PL_comppad, offset, (SV*)newAV());
399 else if (*name == '%')
400 av_store(PL_comppad, offset, (SV*)newHV());
401 SvPADMY_on(PL_curpad[offset]);
402 DEBUG_Xv(PerlIO_printf(Perl_debug_log,
403 "Pad addname: %ld \"%s\" new lex=0x%"UVxf"\n",
404 (long)offset, name, PTR2UV(PL_curpad[offset])));
414 =for apidoc pad_alloc
416 Allocate a new my or tmp pad entry. For a my, simply push a null SV onto
417 the end of PL_comppad, but for a tmp, scan the pad from PL_padix upwards
418 for a slot which has no name and no active value.
423 /* XXX DAPM integrate alloc(), add_name() and add_anon(),
424 * or at least rationalise ??? */
425 /* And flag whether the incoming name is UTF8 or 8 bit?
426 Could do this either with the +ve/-ve hack of the HV code, or expanding
427 the flag bits. Either way, this makes proper Unicode safe pad support.
432 Perl_pad_alloc(pTHX_ I32 optype, U32 tmptype)
438 PERL_UNUSED_ARG(optype);
439 ASSERT_CURPAD_ACTIVE("pad_alloc");
441 if (AvARRAY(PL_comppad) != PL_curpad)
442 Perl_croak(aTHX_ "panic: pad_alloc");
443 if (PL_pad_reset_pending)
445 if (tmptype & SVs_PADMY) {
446 sv = *av_fetch(PL_comppad, AvFILLp(PL_comppad) + 1, TRUE);
447 retval = AvFILLp(PL_comppad);
450 SV * const * const names = AvARRAY(PL_comppad_name);
451 const SSize_t names_fill = AvFILLp(PL_comppad_name);
454 * "foreach" index vars temporarily become aliases to non-"my"
455 * values. Thus we must skip, not just pad values that are
456 * marked as current pad values, but also those with names.
458 /* HVDS why copy to sv here? we don't seem to use it */
459 if (++PL_padix <= names_fill &&
460 (sv = names[PL_padix]) && sv != &PL_sv_undef)
462 sv = *av_fetch(PL_comppad, PL_padix, TRUE);
463 if (!(SvFLAGS(sv) & (SVs_PADTMP | SVs_PADMY)) &&
464 !IS_PADGV(sv) && !IS_PADCONST(sv))
469 SvFLAGS(sv) |= tmptype;
470 PL_curpad = AvARRAY(PL_comppad);
472 DEBUG_X(PerlIO_printf(Perl_debug_log,
473 "Pad 0x%"UVxf"[0x%"UVxf"] alloc: %ld for %s\n",
474 PTR2UV(PL_comppad), PTR2UV(PL_curpad), (long) retval,
475 PL_op_name[optype]));
476 #ifdef DEBUG_LEAKING_SCALARS
477 sv->sv_debug_optype = optype;
478 sv->sv_debug_inpad = 1;
480 return (PADOFFSET)retval;
484 =for apidoc pad_add_anon
486 Add an anon code entry to the current compiling pad
492 Perl_pad_add_anon(pTHX_ SV* sv, OPCODE op_type)
496 SV* const name = newSV_type(SVt_PVNV);
498 PERL_ARGS_ASSERT_PAD_ADD_ANON;
501 sv_setpvn(name, "&", 1);
502 /* Are these two actually ever read? */
503 COP_SEQ_RANGE_HIGH_set(name, ~0);
504 COP_SEQ_RANGE_LOW_set(name, 1);
505 ix = pad_alloc(op_type, SVs_PADMY);
506 av_store(PL_comppad_name, ix, name);
507 /* XXX DAPM use PL_curpad[] ? */
508 av_store(PL_comppad, ix, sv);
511 /* to avoid ref loops, we never have parent + child referencing each
512 * other simultaneously */
513 if (CvOUTSIDE((CV*)sv)) {
514 assert(!CvWEAKOUTSIDE((CV*)sv));
515 CvWEAKOUTSIDE_on((CV*)sv);
516 SvREFCNT_dec(CvOUTSIDE((CV*)sv));
524 =for apidoc pad_check_dup
526 Check for duplicate declarations: report any of:
527 * a my in the current scope with the same name;
528 * an our (anywhere in the pad) with the same name and the same stash
530 C<is_our> indicates that the name to check is an 'our' declaration
535 /* XXX DAPM integrate this into pad_add_name ??? */
538 Perl_pad_check_dup(pTHX_ const char *name, bool is_our, const HV *ourstash)
544 PERL_ARGS_ASSERT_PAD_CHECK_DUP;
546 ASSERT_CURPAD_ACTIVE("pad_check_dup");
547 if (AvFILLp(PL_comppad_name) < 0 || !ckWARN(WARN_MISC))
548 return; /* nothing to check */
550 svp = AvARRAY(PL_comppad_name);
551 top = AvFILLp(PL_comppad_name);
552 /* check the current scope */
553 /* XXX DAPM - why the (I32) cast - shouldn't we ensure they're the same
555 for (off = top; (I32)off > PL_comppad_name_floor; off--) {
556 SV * const sv = svp[off];
558 && sv != &PL_sv_undef
560 && (COP_SEQ_RANGE_HIGH(sv) == PAD_MAX || COP_SEQ_RANGE_HIGH(sv) == 0)
561 && strEQ(name, SvPVX_const(sv)))
563 if (is_our && (SvPAD_OUR(sv)))
564 break; /* "our" masking "our" */
565 Perl_warner(aTHX_ packWARN(WARN_MISC),
566 "\"%s\" variable %s masks earlier declaration in same %s",
567 (is_our ? "our" : PL_parser->in_my == KEY_my ? "my" : "state"),
569 (COP_SEQ_RANGE_HIGH(sv) == PAD_MAX ? "scope" : "statement"));
574 /* check the rest of the pad */
577 SV * const sv = svp[off];
579 && sv != &PL_sv_undef
581 && (COP_SEQ_RANGE_HIGH(sv) == PAD_MAX || COP_SEQ_RANGE_HIGH(sv) == 0)
582 && SvOURSTASH(sv) == ourstash
583 && strEQ(name, SvPVX_const(sv)))
585 Perl_warner(aTHX_ packWARN(WARN_MISC),
586 "\"our\" variable %s redeclared", name);
587 if ((I32)off <= PL_comppad_name_floor)
588 Perl_warner(aTHX_ packWARN(WARN_MISC),
589 "\t(Did you mean \"local\" instead of \"our\"?)\n");
592 } while ( off-- > 0 );
598 =for apidoc pad_findmy
600 Given a lexical name, try to find its offset, first in the current pad,
601 or failing that, in the pads of any lexically enclosing subs (including
602 the complications introduced by eval). If the name is found in an outer pad,
603 then a fake entry is added to the current pad.
604 Returns the offset in the current pad, or NOT_IN_PAD on failure.
610 Perl_pad_findmy(pTHX_ const char *name)
619 PERL_ARGS_ASSERT_PAD_FINDMY;
621 pad_peg("pad_findmy");
622 offset = pad_findlex(name, PL_compcv, PL_cop_seqmax, 1,
623 NULL, &out_sv, &out_flags);
624 if ((PADOFFSET)offset != NOT_IN_PAD)
627 /* look for an our that's being introduced; this allows
628 * our $foo = 0 unless defined $foo;
629 * to not give a warning. (Yes, this is a hack) */
631 nameav = (AV*)AvARRAY(CvPADLIST(PL_compcv))[0];
632 name_svp = AvARRAY(nameav);
633 for (offset = AvFILLp(nameav); offset > 0; offset--) {
634 const SV * const namesv = name_svp[offset];
635 if (namesv && namesv != &PL_sv_undef
637 && (SvPAD_OUR(namesv))
638 && strEQ(SvPVX_const(namesv), name)
639 && COP_SEQ_RANGE_LOW(namesv) == PAD_MAX /* min */
647 * Returns the offset of a lexical $_, if there is one, at run time.
648 * Used by the UNDERBAR XS macro.
652 Perl_find_rundefsvoffset(pTHX)
657 return pad_findlex("$_", find_runcv(NULL), PL_curcop->cop_seq, 1,
658 NULL, &out_sv, &out_flags);
662 =for apidoc pad_findlex
664 Find a named lexical anywhere in a chain of nested pads. Add fake entries
665 in the inner pads if it's found in an outer one.
667 Returns the offset in the bottom pad of the lex or the fake lex.
668 cv is the CV in which to start the search, and seq is the current cop_seq
669 to match against. If warn is true, print appropriate warnings. The out_*
670 vars return values, and so are pointers to where the returned values
671 should be stored. out_capture, if non-null, requests that the innermost
672 instance of the lexical is captured; out_name_sv is set to the innermost
673 matched namesv or fake namesv; out_flags returns the flags normally
674 associated with the IVX field of a fake namesv.
676 Note that pad_findlex() is recursive; it recurses up the chain of CVs,
677 then comes back down, adding fake entries as it goes. It has to be this way
678 because fake namesvs in anon protoypes have to store in xlow the index into
684 /* the CV has finished being compiled. This is not a sufficient test for
685 * all CVs (eg XSUBs), but suffices for the CVs found in a lexical chain */
686 #define CvCOMPILED(cv) CvROOT(cv)
688 /* the CV does late binding of its lexicals */
689 #define CvLATE(cv) (CvANON(cv) || SvTYPE(cv) == SVt_PVFM)
693 S_pad_findlex(pTHX_ const char *name, const CV* cv, U32 seq, int warn,
694 SV** out_capture, SV** out_name_sv, int *out_flags)
697 I32 offset, new_offset;
700 const AV * const padlist = CvPADLIST(cv);
702 PERL_ARGS_ASSERT_PAD_FINDLEX;
706 DEBUG_Xv(PerlIO_printf(Perl_debug_log,
707 "Pad findlex cv=0x%"UVxf" searching \"%s\" seq=%d%s\n",
708 PTR2UV(cv), name, (int)seq, out_capture ? " capturing" : "" ));
710 /* first, search this pad */
712 if (padlist) { /* not an undef CV */
714 const AV * const nameav = (AV*)AvARRAY(padlist)[0];
715 SV * const * const name_svp = AvARRAY(nameav);
717 for (offset = AvFILLp(nameav); offset > 0; offset--) {
718 const SV * const namesv = name_svp[offset];
719 if (namesv && namesv != &PL_sv_undef
720 && strEQ(SvPVX_const(namesv), name))
723 fake_offset = offset; /* in case we don't find a real one */
724 else if ( seq > COP_SEQ_RANGE_LOW(namesv) /* min */
725 && seq <= COP_SEQ_RANGE_HIGH(namesv)) /* max */
730 if (offset > 0 || fake_offset > 0 ) { /* a match! */
731 if (offset > 0) { /* not fake */
733 *out_name_sv = name_svp[offset]; /* return the namesv */
735 /* set PAD_FAKELEX_MULTI if this lex can have multiple
736 * instances. For now, we just test !CvUNIQUE(cv), but
737 * ideally, we should detect my's declared within loops
738 * etc - this would allow a wider range of 'not stayed
739 * shared' warnings. We also treated alreadly-compiled
740 * lexes as not multi as viewed from evals. */
742 *out_flags = CvANON(cv) ?
744 (!CvUNIQUE(cv) && ! CvCOMPILED(cv))
745 ? PAD_FAKELEX_MULTI : 0;
747 DEBUG_Xv(PerlIO_printf(Perl_debug_log,
748 "Pad findlex cv=0x%"UVxf" matched: offset=%ld (%lu,%lu)\n",
749 PTR2UV(cv), (long)offset,
750 (unsigned long)COP_SEQ_RANGE_LOW(*out_name_sv),
751 (unsigned long)COP_SEQ_RANGE_HIGH(*out_name_sv)));
753 else { /* fake match */
754 offset = fake_offset;
755 *out_name_sv = name_svp[offset]; /* return the namesv */
756 *out_flags = PARENT_FAKELEX_FLAGS(*out_name_sv);
757 DEBUG_Xv(PerlIO_printf(Perl_debug_log,
758 "Pad findlex cv=0x%"UVxf" matched: offset=%ld flags=0x%lx index=%lu\n",
759 PTR2UV(cv), (long)offset, (unsigned long)*out_flags,
760 (unsigned long) PARENT_PAD_INDEX(*out_name_sv)
764 /* return the lex? */
769 if (SvPAD_OUR(*out_name_sv)) {
774 /* trying to capture from an anon prototype? */
776 ? CvANON(cv) && CvCLONE(cv) && !CvCLONED(cv)
777 : *out_flags & PAD_FAKELEX_ANON)
779 if (warn && ckWARN(WARN_CLOSURE))
780 Perl_warner(aTHX_ packWARN(WARN_CLOSURE),
781 "Variable \"%s\" is not available", name);
788 if (!CvCOMPILED(cv) && (*out_flags & PAD_FAKELEX_MULTI)
789 && !SvPAD_STATE(name_svp[offset])
790 && warn && ckWARN(WARN_CLOSURE)) {
792 Perl_warner(aTHX_ packWARN(WARN_CLOSURE),
793 "Variable \"%s\" will not stay shared", name);
796 if (fake_offset && CvANON(cv)
797 && CvCLONE(cv) &&!CvCLONED(cv))
800 /* not yet caught - look further up */
801 DEBUG_Xv(PerlIO_printf(Perl_debug_log,
802 "Pad findlex cv=0x%"UVxf" chasing lex in outer pad\n",
805 (void) pad_findlex(name, CvOUTSIDE(cv),
807 newwarn, out_capture, out_name_sv, out_flags);
812 *out_capture = AvARRAY((AV*)AvARRAY(padlist)[
813 CvDEPTH(cv) ? CvDEPTH(cv) : 1])[offset];
814 DEBUG_Xv(PerlIO_printf(Perl_debug_log,
815 "Pad findlex cv=0x%"UVxf" found lex=0x%"UVxf"\n",
816 PTR2UV(cv), PTR2UV(*out_capture)));
818 if (SvPADSTALE(*out_capture)
819 && !SvPAD_STATE(name_svp[offset]))
821 if (ckWARN(WARN_CLOSURE))
822 Perl_warner(aTHX_ packWARN(WARN_CLOSURE),
823 "Variable \"%s\" is not available", name);
829 *out_capture = sv_2mortal((SV*)newAV());
830 else if (*name == '%')
831 *out_capture = sv_2mortal((SV*)newHV());
833 *out_capture = sv_newmortal();
841 /* it's not in this pad - try above */
846 /* out_capture non-null means caller wants us to capture lex; in
847 * addition we capture ourselves unless it's an ANON/format */
848 new_capturep = out_capture ? out_capture :
849 CvLATE(cv) ? NULL : &new_capture;
851 offset = pad_findlex(name, CvOUTSIDE(cv), CvOUTSIDE_SEQ(cv), 1,
852 new_capturep, out_name_sv, out_flags);
853 if ((PADOFFSET)offset == NOT_IN_PAD)
856 /* found in an outer CV. Add appropriate fake entry to this pad */
858 /* don't add new fake entries (via eval) to CVs that we have already
859 * finished compiling, or to undef CVs */
860 if (CvCOMPILED(cv) || !padlist)
861 return 0; /* this dummy (and invalid) value isnt used by the caller */
865 AV * const ocomppad_name = PL_comppad_name;
866 PAD * const ocomppad = PL_comppad;
867 PL_comppad_name = (AV*)AvARRAY(padlist)[0];
868 PL_comppad = (AV*)AvARRAY(padlist)[1];
869 PL_curpad = AvARRAY(PL_comppad);
871 new_offset = pad_add_name(
872 SvPVX_const(*out_name_sv),
873 SvPAD_TYPED(*out_name_sv)
874 ? SvSTASH(*out_name_sv) : NULL,
875 SvOURSTASH(*out_name_sv),
877 SvPAD_STATE(*out_name_sv) ? 1 : 0 /* state variable ? */
880 new_namesv = AvARRAY(PL_comppad_name)[new_offset];
881 PARENT_FAKELEX_FLAGS_set(new_namesv, *out_flags);
883 PARENT_PAD_INDEX_set(new_namesv, 0);
884 if (SvPAD_OUR(new_namesv)) {
885 NOOP; /* do nothing */
887 else if (CvLATE(cv)) {
888 /* delayed creation - just note the offset within parent pad */
889 PARENT_PAD_INDEX_set(new_namesv, offset);
893 /* immediate creation - capture outer value right now */
894 av_store(PL_comppad, new_offset, SvREFCNT_inc(*new_capturep));
895 DEBUG_Xv(PerlIO_printf(Perl_debug_log,
896 "Pad findlex cv=0x%"UVxf" saved captured sv 0x%"UVxf" at offset %ld\n",
897 PTR2UV(cv), PTR2UV(*new_capturep), (long)new_offset));
899 *out_name_sv = new_namesv;
900 *out_flags = PARENT_FAKELEX_FLAGS(new_namesv);
902 PL_comppad_name = ocomppad_name;
903 PL_comppad = ocomppad;
904 PL_curpad = ocomppad ? AvARRAY(ocomppad) : NULL;
914 Get the value at offset po in the current pad.
915 Use macro PAD_SV instead of calling this function directly.
922 Perl_pad_sv(pTHX_ PADOFFSET po)
925 ASSERT_CURPAD_ACTIVE("pad_sv");
928 Perl_croak(aTHX_ "panic: pad_sv po");
929 DEBUG_X(PerlIO_printf(Perl_debug_log,
930 "Pad 0x%"UVxf"[0x%"UVxf"] sv: %ld sv=0x%"UVxf"\n",
931 PTR2UV(PL_comppad), PTR2UV(PL_curpad), (long)po, PTR2UV(PL_curpad[po]))
933 return PL_curpad[po];
938 =for apidoc pad_setsv
940 Set the entry at offset po in the current pad to sv.
941 Use the macro PAD_SETSV() rather than calling this function directly.
947 Perl_pad_setsv(pTHX_ PADOFFSET po, SV* sv)
951 PERL_ARGS_ASSERT_PAD_SETSV;
953 ASSERT_CURPAD_ACTIVE("pad_setsv");
955 DEBUG_X(PerlIO_printf(Perl_debug_log,
956 "Pad 0x%"UVxf"[0x%"UVxf"] setsv: %ld sv=0x%"UVxf"\n",
957 PTR2UV(PL_comppad), PTR2UV(PL_curpad), (long)po, PTR2UV(sv))
966 =for apidoc pad_block_start
968 Update the pad compilation state variables on entry to a new block
974 * - integrate this in general state-saving routine ???
975 * - combine with the state-saving going on in pad_new ???
976 * - introduce a new SAVE type that does all this in one go ?
980 Perl_pad_block_start(pTHX_ int full)
983 ASSERT_CURPAD_ACTIVE("pad_block_start");
984 SAVEI32(PL_comppad_name_floor);
985 PL_comppad_name_floor = AvFILLp(PL_comppad_name);
987 PL_comppad_name_fill = PL_comppad_name_floor;
988 if (PL_comppad_name_floor < 0)
989 PL_comppad_name_floor = 0;
990 SAVEI32(PL_min_intro_pending);
991 SAVEI32(PL_max_intro_pending);
992 PL_min_intro_pending = 0;
993 SAVEI32(PL_comppad_name_fill);
994 SAVEI32(PL_padix_floor);
995 PL_padix_floor = PL_padix;
996 PL_pad_reset_pending = FALSE;
1001 =for apidoc intro_my
1003 "Introduce" my variables to visible status.
1015 ASSERT_CURPAD_ACTIVE("intro_my");
1016 if (! PL_min_intro_pending)
1017 return PL_cop_seqmax;
1019 svp = AvARRAY(PL_comppad_name);
1020 for (i = PL_min_intro_pending; i <= PL_max_intro_pending; i++) {
1021 SV * const sv = svp[i];
1023 if (sv && sv != &PL_sv_undef && !SvFAKE(sv) && !COP_SEQ_RANGE_HIGH(sv)) {
1024 COP_SEQ_RANGE_HIGH_set(sv, PAD_MAX); /* Don't know scope end yet. */
1025 COP_SEQ_RANGE_LOW_set(sv, PL_cop_seqmax);
1026 DEBUG_Xv(PerlIO_printf(Perl_debug_log,
1027 "Pad intromy: %ld \"%s\", (%lu,%lu)\n",
1028 (long)i, SvPVX_const(sv),
1029 (unsigned long)COP_SEQ_RANGE_LOW(sv),
1030 (unsigned long)COP_SEQ_RANGE_HIGH(sv))
1034 PL_min_intro_pending = 0;
1035 PL_comppad_name_fill = PL_max_intro_pending; /* Needn't search higher */
1036 DEBUG_Xv(PerlIO_printf(Perl_debug_log,
1037 "Pad intromy: seq -> %ld\n", (long)(PL_cop_seqmax+1)));
1039 return PL_cop_seqmax++;
1043 =for apidoc pad_leavemy
1045 Cleanup at end of scope during compilation: set the max seq number for
1046 lexicals in this scope and warn of any lexicals that never got introduced.
1052 Perl_pad_leavemy(pTHX)
1056 SV * const * const svp = AvARRAY(PL_comppad_name);
1058 PL_pad_reset_pending = FALSE;
1060 ASSERT_CURPAD_ACTIVE("pad_leavemy");
1061 if (PL_min_intro_pending && PL_comppad_name_fill < PL_min_intro_pending) {
1062 for (off = PL_max_intro_pending; off >= PL_min_intro_pending; off--) {
1063 const SV * const sv = svp[off];
1064 if (sv && sv != &PL_sv_undef
1065 && !SvFAKE(sv) && ckWARN_d(WARN_INTERNAL))
1066 Perl_warner(aTHX_ packWARN(WARN_INTERNAL),
1067 "%"SVf" never introduced",
1071 /* "Deintroduce" my variables that are leaving with this scope. */
1072 for (off = AvFILLp(PL_comppad_name); off > PL_comppad_name_fill; off--) {
1073 const SV * const sv = svp[off];
1074 if (sv && sv != &PL_sv_undef && !SvFAKE(sv) && COP_SEQ_RANGE_HIGH(sv) == PAD_MAX) {
1075 COP_SEQ_RANGE_HIGH_set(sv, PL_cop_seqmax);
1076 DEBUG_Xv(PerlIO_printf(Perl_debug_log,
1077 "Pad leavemy: %ld \"%s\", (%lu,%lu)\n",
1078 (long)off, SvPVX_const(sv),
1079 (unsigned long)COP_SEQ_RANGE_LOW(sv),
1080 (unsigned long)COP_SEQ_RANGE_HIGH(sv))
1085 DEBUG_Xv(PerlIO_printf(Perl_debug_log,
1086 "Pad leavemy: seq = %ld\n", (long)PL_cop_seqmax));
1091 =for apidoc pad_swipe
1093 Abandon the tmp in the current pad at offset po and replace with a
1100 Perl_pad_swipe(pTHX_ PADOFFSET po, bool refadjust)
1103 ASSERT_CURPAD_LEGAL("pad_swipe");
1106 if (AvARRAY(PL_comppad) != PL_curpad)
1107 Perl_croak(aTHX_ "panic: pad_swipe curpad");
1109 Perl_croak(aTHX_ "panic: pad_swipe po");
1111 DEBUG_X(PerlIO_printf(Perl_debug_log,
1112 "Pad 0x%"UVxf"[0x%"UVxf"] swipe: %ld\n",
1113 PTR2UV(PL_comppad), PTR2UV(PL_curpad), (long)po));
1116 SvPADTMP_off(PL_curpad[po]);
1118 SvREFCNT_dec(PL_curpad[po]);
1121 /* if pad tmps aren't shared between ops, then there's no need to
1122 * create a new tmp when an existing op is freed */
1123 #ifdef USE_BROKEN_PAD_RESET
1124 PL_curpad[po] = newSV(0);
1125 SvPADTMP_on(PL_curpad[po]);
1127 PL_curpad[po] = &PL_sv_undef;
1129 if ((I32)po < PL_padix)
1135 =for apidoc pad_reset
1137 Mark all the current temporaries for reuse
1142 /* XXX pad_reset() is currently disabled because it results in serious bugs.
1143 * It causes pad temp TARGs to be shared between OPs. Since TARGs are pushed
1144 * on the stack by OPs that use them, there are several ways to get an alias
1145 * to a shared TARG. Such an alias will change randomly and unpredictably.
1146 * We avoid doing this until we can think of a Better Way.
1149 Perl_pad_reset(pTHX)
1152 #ifdef USE_BROKEN_PAD_RESET
1153 if (AvARRAY(PL_comppad) != PL_curpad)
1154 Perl_croak(aTHX_ "panic: pad_reset curpad");
1156 DEBUG_X(PerlIO_printf(Perl_debug_log,
1157 "Pad 0x%"UVxf"[0x%"UVxf"] reset: padix %ld -> %ld",
1158 PTR2UV(PL_comppad), PTR2UV(PL_curpad),
1159 (long)PL_padix, (long)PL_padix_floor
1163 if (!PL_tainting) { /* Can't mix tainted and non-tainted temporaries. */
1165 for (po = AvMAX(PL_comppad); po > PL_padix_floor; po--) {
1166 if (PL_curpad[po] && !SvIMMORTAL(PL_curpad[po]))
1167 SvPADTMP_off(PL_curpad[po]);
1169 PL_padix = PL_padix_floor;
1172 PL_pad_reset_pending = FALSE;
1177 =for apidoc pad_tidy
1179 Tidy up a pad after we've finished compiling it:
1180 * remove most stuff from the pads of anonsub prototypes;
1182 * mark tmps as such.
1187 /* XXX DAPM surely most of this stuff should be done properly
1188 * at the right time beforehand, rather than going around afterwards
1189 * cleaning up our mistakes ???
1193 Perl_pad_tidy(pTHX_ padtidy_type type)
1197 ASSERT_CURPAD_ACTIVE("pad_tidy");
1199 /* If this CV has had any 'eval-capable' ops planted in it
1200 * (ie it contains eval '...', //ee, /$var/ or /(?{..})/), Then any
1201 * anon prototypes in the chain of CVs should be marked as cloneable,
1202 * so that for example the eval's CV in C<< sub { eval '$x' } >> gets
1203 * the right CvOUTSIDE.
1204 * If running with -d, *any* sub may potentially have an eval
1205 * excuted within it.
1208 if (PL_cv_has_eval || PL_perldb) {
1210 for (cv = PL_compcv ;cv; cv = CvOUTSIDE(cv)) {
1211 if (cv != PL_compcv && CvCOMPILED(cv))
1212 break; /* no need to mark already-compiled code */
1214 DEBUG_Xv(PerlIO_printf(Perl_debug_log,
1215 "Pad clone on cv=0x%"UVxf"\n", PTR2UV(cv)));
1221 /* extend curpad to match namepad */
1222 if (AvFILLp(PL_comppad_name) < AvFILLp(PL_comppad))
1223 av_store(PL_comppad_name, AvFILLp(PL_comppad), NULL);
1225 if (type == padtidy_SUBCLONE) {
1226 SV * const * const namep = AvARRAY(PL_comppad_name);
1229 for (ix = AvFILLp(PL_comppad); ix > 0; ix--) {
1232 if (SvIMMORTAL(PL_curpad[ix]) || IS_PADGV(PL_curpad[ix]) || IS_PADCONST(PL_curpad[ix]))
1235 * The only things that a clonable function needs in its
1236 * pad are anonymous subs.
1237 * The rest are created anew during cloning.
1239 if (!((namesv = namep[ix]) != NULL &&
1240 namesv != &PL_sv_undef &&
1241 *SvPVX_const(namesv) == '&'))
1243 SvREFCNT_dec(PL_curpad[ix]);
1244 PL_curpad[ix] = NULL;
1248 else if (type == padtidy_SUB) {
1249 /* XXX DAPM this same bit of code keeps appearing !!! Rationalise? */
1250 AV * const av = newAV(); /* Will be @_ */
1252 av_store(PL_comppad, 0, (SV*)av);
1256 /* XXX DAPM rationalise these two similar branches */
1258 if (type == padtidy_SUB) {
1260 for (ix = AvFILLp(PL_comppad); ix > 0; ix--) {
1261 if (SvIMMORTAL(PL_curpad[ix]) || IS_PADGV(PL_curpad[ix]) || IS_PADCONST(PL_curpad[ix]))
1263 if (!SvPADMY(PL_curpad[ix]))
1264 SvPADTMP_on(PL_curpad[ix]);
1267 else if (type == padtidy_FORMAT) {
1269 for (ix = AvFILLp(PL_comppad); ix > 0; ix--) {
1270 if (!SvPADMY(PL_curpad[ix]) && !SvIMMORTAL(PL_curpad[ix]))
1271 SvPADTMP_on(PL_curpad[ix]);
1274 PL_curpad = AvARRAY(PL_comppad);
1279 =for apidoc pad_free
1281 Free the SV at offset po in the current pad.
1286 /* XXX DAPM integrate with pad_swipe ???? */
1288 Perl_pad_free(pTHX_ PADOFFSET po)
1291 ASSERT_CURPAD_LEGAL("pad_free");
1294 if (AvARRAY(PL_comppad) != PL_curpad)
1295 Perl_croak(aTHX_ "panic: pad_free curpad");
1297 Perl_croak(aTHX_ "panic: pad_free po");
1299 DEBUG_X(PerlIO_printf(Perl_debug_log,
1300 "Pad 0x%"UVxf"[0x%"UVxf"] free: %ld\n",
1301 PTR2UV(PL_comppad), PTR2UV(PL_curpad), (long)po)
1304 if (PL_curpad[po] && PL_curpad[po] != &PL_sv_undef) {
1305 SvPADTMP_off(PL_curpad[po]);
1307 /* SV could be a shared hash key (eg bugid #19022) */
1309 #ifdef PERL_OLD_COPY_ON_WRITE
1310 !SvIsCOW(PL_curpad[po])
1312 !SvFAKE(PL_curpad[po])
1315 SvREADONLY_off(PL_curpad[po]); /* could be a freed constant */
1318 if ((I32)po < PL_padix)
1325 =for apidoc do_dump_pad
1327 Dump the contents of a padlist
1333 Perl_do_dump_pad(pTHX_ I32 level, PerlIO *file, PADLIST *padlist, int full)
1342 PERL_ARGS_ASSERT_DO_DUMP_PAD;
1347 pad_name = (AV*)*av_fetch((AV*)padlist, 0, FALSE);
1348 pad = (AV*)*av_fetch((AV*)padlist, 1, FALSE);
1349 pname = AvARRAY(pad_name);
1350 ppad = AvARRAY(pad);
1351 Perl_dump_indent(aTHX_ level, file,
1352 "PADNAME = 0x%"UVxf"(0x%"UVxf") PAD = 0x%"UVxf"(0x%"UVxf")\n",
1353 PTR2UV(pad_name), PTR2UV(pname), PTR2UV(pad), PTR2UV(ppad)
1356 for (ix = 1; ix <= AvFILLp(pad_name); ix++) {
1357 const SV *namesv = pname[ix];
1358 if (namesv && namesv == &PL_sv_undef) {
1363 Perl_dump_indent(aTHX_ level+1, file,
1364 "%2d. 0x%"UVxf"<%lu> FAKE \"%s\" flags=0x%lx index=%lu\n",
1367 (unsigned long) (ppad[ix] ? SvREFCNT(ppad[ix]) : 0),
1368 SvPVX_const(namesv),
1369 (unsigned long)PARENT_FAKELEX_FLAGS(namesv),
1370 (unsigned long)PARENT_PAD_INDEX(namesv)
1374 Perl_dump_indent(aTHX_ level+1, file,
1375 "%2d. 0x%"UVxf"<%lu> (%lu,%lu) \"%s\"\n",
1378 (unsigned long) (ppad[ix] ? SvREFCNT(ppad[ix]) : 0),
1379 (unsigned long)COP_SEQ_RANGE_LOW(namesv),
1380 (unsigned long)COP_SEQ_RANGE_HIGH(namesv),
1385 Perl_dump_indent(aTHX_ level+1, file,
1386 "%2d. 0x%"UVxf"<%lu>\n",
1389 (unsigned long) (ppad[ix] ? SvREFCNT(ppad[ix]) : 0)
1400 dump the contents of a CV
1407 S_cv_dump(pTHX_ const CV *cv, const char *title)
1410 const CV * const outside = CvOUTSIDE(cv);
1411 AV* const padlist = CvPADLIST(cv);
1413 PERL_ARGS_ASSERT_CV_DUMP;
1415 PerlIO_printf(Perl_debug_log,
1416 " %s: CV=0x%"UVxf" (%s), OUTSIDE=0x%"UVxf" (%s)\n",
1419 (CvANON(cv) ? "ANON"
1420 : (SvTYPE(cv) == SVt_PVFM) ? "FORMAT"
1421 : (cv == PL_main_cv) ? "MAIN"
1422 : CvUNIQUE(cv) ? "UNIQUE"
1423 : CvGV(cv) ? GvNAME(CvGV(cv)) : "UNDEFINED"),
1426 : CvANON(outside) ? "ANON"
1427 : (outside == PL_main_cv) ? "MAIN"
1428 : CvUNIQUE(outside) ? "UNIQUE"
1429 : CvGV(outside) ? GvNAME(CvGV(outside)) : "UNDEFINED"));
1431 PerlIO_printf(Perl_debug_log,
1432 " PADLIST = 0x%"UVxf"\n", PTR2UV(padlist));
1433 do_dump_pad(1, Perl_debug_log, padlist, 1);
1435 #endif /* DEBUGGING */
1442 =for apidoc cv_clone
1444 Clone a CV: make a new CV which points to the same code etc, but which
1445 has a newly-created pad built by copying the prototype pad and capturing
1452 Perl_cv_clone(pTHX_ CV *proto)
1456 AV* const protopadlist = CvPADLIST(proto);
1457 const AV* const protopad_name = (AV*)*av_fetch(protopadlist, 0, FALSE);
1458 const AV* const protopad = (AV*)*av_fetch(protopadlist, 1, FALSE);
1459 SV** const pname = AvARRAY(protopad_name);
1460 SV** const ppad = AvARRAY(protopad);
1461 const I32 fname = AvFILLp(protopad_name);
1462 const I32 fpad = AvFILLp(protopad);
1468 PERL_ARGS_ASSERT_CV_CLONE;
1470 assert(!CvUNIQUE(proto));
1472 /* Since cloneable anon subs can be nested, CvOUTSIDE may point
1473 * to a prototype; we instead want the cloned parent who called us.
1474 * Note that in general for formats, CvOUTSIDE != find_runcv */
1476 outside = CvOUTSIDE(proto);
1477 if (outside && CvCLONE(outside) && ! CvCLONED(outside))
1478 outside = find_runcv(NULL);
1479 depth = CvDEPTH(outside);
1480 assert(depth || SvTYPE(proto) == SVt_PVFM);
1483 assert(CvPADLIST(outside));
1486 SAVESPTR(PL_compcv);
1488 cv = PL_compcv = (CV*)newSV_type(SvTYPE(proto));
1489 CvFLAGS(cv) = CvFLAGS(proto) & ~(CVf_CLONE|CVf_WEAKOUTSIDE);
1493 CvFILE(cv) = CvISXSUB(proto) ? CvFILE(proto)
1494 : savepv(CvFILE(proto));
1496 CvFILE(cv) = CvFILE(proto);
1498 CvGV(cv) = CvGV(proto);
1499 CvSTASH(cv) = CvSTASH(proto);
1501 CvROOT(cv) = OpREFCNT_inc(CvROOT(proto));
1503 CvSTART(cv) = CvSTART(proto);
1504 CvOUTSIDE(cv) = (CV*)SvREFCNT_inc_simple(outside);
1505 CvOUTSIDE_SEQ(cv) = CvOUTSIDE_SEQ(proto);
1508 sv_setpvn((SV*)cv, SvPVX_const(proto), SvCUR(proto));
1510 CvPADLIST(cv) = pad_new(padnew_CLONE|padnew_SAVE);
1512 av_fill(PL_comppad, fpad);
1513 for (ix = fname; ix >= 0; ix--)
1514 av_store(PL_comppad_name, ix, SvREFCNT_inc(pname[ix]));
1516 PL_curpad = AvARRAY(PL_comppad);
1518 outpad = AvARRAY(AvARRAY(CvPADLIST(outside))[depth]);
1520 for (ix = fpad; ix > 0; ix--) {
1521 SV* const namesv = (ix <= fname) ? pname[ix] : NULL;
1523 if (namesv && namesv != &PL_sv_undef) { /* lexical */
1524 if (SvFAKE(namesv)) { /* lexical from outside? */
1525 sv = outpad[PARENT_PAD_INDEX(namesv)];
1527 /* formats may have an inactive parent,
1528 while my $x if $false can leave an active var marked as
1529 stale. And state vars are always available */
1530 if (SvPADSTALE(sv) && !SvPAD_STATE(namesv)) {
1531 if (ckWARN(WARN_CLOSURE))
1532 Perl_warner(aTHX_ packWARN(WARN_CLOSURE),
1533 "Variable \"%s\" is not available", SvPVX_const(namesv));
1537 SvREFCNT_inc_simple_void_NN(sv);
1540 const char sigil = SvPVX_const(namesv)[0];
1542 sv = SvREFCNT_inc(ppad[ix]);
1543 else if (sigil == '@')
1545 else if (sigil == '%')
1550 /* reset the 'assign only once' flag on each state var */
1551 if (SvPAD_STATE(namesv))
1555 else if (IS_PADGV(ppad[ix]) || IS_PADCONST(ppad[ix])) {
1556 sv = SvREFCNT_inc_NN(ppad[ix]);
1566 PerlIO_printf(Perl_debug_log, "\nPad CV clone\n");
1567 cv_dump(outside, "Outside");
1568 cv_dump(proto, "Proto");
1575 /* Constant sub () { $x } closing over $x - see lib/constant.pm:
1576 * The prototype was marked as a candiate for const-ization,
1577 * so try to grab the current const value, and if successful,
1578 * turn into a const sub:
1580 SV* const const_sv = op_const_sv(CvSTART(cv), cv);
1583 cv = newCONSTSUB(CvSTASH(proto), NULL, const_sv);
1595 =for apidoc pad_fixup_inner_anons
1597 For any anon CVs in the pad, change CvOUTSIDE of that CV from
1598 old_cv to new_cv if necessary. Needed when a newly-compiled CV has to be
1599 moved to a pre-existing CV struct.
1605 Perl_pad_fixup_inner_anons(pTHX_ PADLIST *padlist, CV *old_cv, CV *new_cv)
1609 AV * const comppad_name = (AV*)AvARRAY(padlist)[0];
1610 AV * const comppad = (AV*)AvARRAY(padlist)[1];
1611 SV ** const namepad = AvARRAY(comppad_name);
1612 SV ** const curpad = AvARRAY(comppad);
1614 PERL_ARGS_ASSERT_PAD_FIXUP_INNER_ANONS;
1615 PERL_UNUSED_ARG(old_cv);
1617 for (ix = AvFILLp(comppad_name); ix > 0; ix--) {
1618 const SV * const namesv = namepad[ix];
1619 if (namesv && namesv != &PL_sv_undef
1620 && *SvPVX_const(namesv) == '&')
1622 CV * const innercv = (CV*)curpad[ix];
1623 assert(CvWEAKOUTSIDE(innercv));
1624 assert(CvOUTSIDE(innercv) == old_cv);
1625 CvOUTSIDE(innercv) = new_cv;
1632 =for apidoc pad_push
1634 Push a new pad frame onto the padlist, unless there's already a pad at
1635 this depth, in which case don't bother creating a new one. Then give
1636 the new pad an @_ in slot zero.
1642 Perl_pad_push(pTHX_ PADLIST *padlist, int depth)
1646 PERL_ARGS_ASSERT_PAD_PUSH;
1648 if (depth > AvFILLp(padlist)) {
1649 SV** const svp = AvARRAY(padlist);
1650 AV* const newpad = newAV();
1651 SV** const oldpad = AvARRAY(svp[depth-1]);
1652 I32 ix = AvFILLp((AV*)svp[1]);
1653 const I32 names_fill = AvFILLp((AV*)svp[0]);
1654 SV** const names = AvARRAY(svp[0]);
1657 for ( ;ix > 0; ix--) {
1658 if (names_fill >= ix && names[ix] != &PL_sv_undef) {
1659 const char sigil = SvPVX_const(names[ix])[0];
1660 if ((SvFLAGS(names[ix]) & SVf_FAKE)
1661 || (SvFLAGS(names[ix]) & SVpad_STATE)
1664 /* outer lexical or anon code */
1665 av_store(newpad, ix, SvREFCNT_inc(oldpad[ix]));
1667 else { /* our own lexical */
1671 else if (sigil == '%')
1675 av_store(newpad, ix, sv);
1679 else if (IS_PADGV(oldpad[ix]) || IS_PADCONST(oldpad[ix])) {
1680 av_store(newpad, ix, SvREFCNT_inc_NN(oldpad[ix]));
1683 /* save temporaries on recursion? */
1684 SV * const sv = newSV(0);
1685 av_store(newpad, ix, sv);
1691 av_store(newpad, 0, (SV*)av);
1694 av_store(padlist, depth, (SV*)newpad);
1695 AvFILLp(padlist) = depth;
1701 Perl_pad_compname_type(pTHX_ const PADOFFSET po)
1704 SV* const * const av = av_fetch(PL_comppad_name, po, FALSE);
1705 if ( SvPAD_TYPED(*av) ) {
1706 return SvSTASH(*av);
1713 * c-indentation-style: bsd
1715 * indent-tabs-mode: t
1718 * ex: set ts=8 sts=4 sw=4 noet: