3 * Copyright (C) 2002,2003 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 =for apidoc m|AV *|CvPADLIST|CV *cv
26 CV's can have CvPADLIST(cv) set to point to an AV.
28 For these purposes "forms" are a kind-of CV, eval""s are too (except they're
29 not callable at will and are always thrown away after the eval"" is done
30 executing). Require'd files are simply evals without any outer lexical
33 XSUBs don't have CvPADLIST set - dXSTARG fetches values from PL_curpad,
34 but that is really the callers pad (a slot of which is allocated by
37 The CvPADLIST AV has does not have AvREAL set, so REFCNT of component items
38 is managed "manual" (mostly in pad.c) rather than normal av.c rules.
39 The items in the AV are not SVs as for a normal AV, but other AVs:
41 0'th Entry of the CvPADLIST is an AV which represents the "names" or rather
42 the "static type information" for lexicals.
44 The CvDEPTH'th entry of CvPADLIST AV is an AV which is the stack frame at that
45 depth of recursion into the CV.
46 The 0'th slot of a frame AV is an AV which is @_.
47 other entries are storage for variables and op targets.
50 C<PL_comppad_name> is set to the names AV.
51 C<PL_comppad> is set to the frame AV for the frame CvDEPTH == 1.
52 C<PL_curpad> is set to the body of the frame AV (i.e. AvARRAY(PL_comppad)).
54 During execution, C<PL_comppad> and C<PL_curpad> refer to the live
55 frame of the currently executing sub.
57 Iterating over the names AV iterates over all possible pad
58 items. Pad slots that are SVs_PADTMP (targets/GVs/constants) end up having
59 &PL_sv_undef "names" (see pad_alloc()).
61 Only my/our variable (SVs_PADMY/SVs_PADOUR) slots get valid names.
62 The rest are op targets/GVs/constants which are statically allocated
63 or resolved at compile time. These don't have names by which they
64 can be looked up from Perl code at run time through eval"" like
65 my/our variables can be. Since they can't be looked up by "name"
66 but only by their index allocated at compile time (which is usually
67 in PL_op->op_targ), wasting a name SV for them doesn't make sense.
69 The SVs in the names AV have their PV being the name of the variable.
70 NV+1..IV inclusive is a range of cop_seq numbers for which the name is
71 valid. For typed lexicals name SV is SVt_PVMG and SvSTASH points at the
72 type. For C<our> lexicals, the type is SVt_PVGV, and GvSTASH points at the
73 stash of the associated global (so that duplicate C<our> delarations in the
74 same package can be detected). SvCUR is sometimes hijacked to
75 store the generation number during compilation.
77 If SvFAKE is set on the name SV, then that slot in the frame AV is
78 a REFCNT'ed reference to a lexical from "outside". In this case,
79 the name SV does not use NVX and IVX to store a cop_seq range, since it is
80 in scope throughout. Instead IVX stores some flags containing info about
81 the real lexical (is it declared in an anon, and is it capable of being
82 instantiated multiple times?), and for fake ANONs, NVX contains the index
83 within the parent's pad where the lexical's value is stored, to make
86 If the 'name' is '&' the corresponding entry in frame AV
87 is a CV representing a possible closure.
88 (SvFAKE and name of '&' is not a meaningful combination currently but could
89 become so if C<my sub foo {}> is implemented.)
91 Note that formats are treated as anon subs, and are cloned each time
92 write is called (if necessary).
103 #define PAD_MAX 999999999
110 Create a new compiling padlist, saving and updating the various global
111 vars at the same time as creating the pad itself. The following flags
112 can be OR'ed together:
114 padnew_CLONE this pad is for a cloned CV
115 padnew_SAVE save old globals
116 padnew_SAVESUB also save extra stuff for start of sub
122 Perl_pad_new(pTHX_ int flags)
124 AV *padlist, *padname, *pad, *a0;
126 ASSERT_CURPAD_LEGAL("pad_new");
128 /* XXX DAPM really need a new SAVEt_PAD which restores all or most
129 * vars (based on flags) rather than storing vals + addresses for
130 * each individually. Also see pad_block_start.
131 * XXX DAPM Try to see whether all these conditionals are required
134 /* save existing state, ... */
136 if (flags & padnew_SAVE) {
138 SAVESPTR(PL_comppad_name);
139 if (! (flags & padnew_CLONE)) {
141 SAVEI32(PL_comppad_name_fill);
142 SAVEI32(PL_min_intro_pending);
143 SAVEI32(PL_max_intro_pending);
144 SAVEI32(PL_cv_has_eval);
145 if (flags & padnew_SAVESUB) {
146 SAVEI32(PL_pad_reset_pending);
150 /* XXX DAPM interestingly, PL_comppad_name_floor never seems to be
151 * saved - check at some pt that this is okay */
153 /* ... create new pad ... */
159 if (flags & padnew_CLONE) {
160 /* XXX DAPM I dont know why cv_clone needs it
161 * doing differently yet - perhaps this separate branch can be
162 * dispensed with eventually ???
165 a0 = newAV(); /* will be @_ */
167 av_store(pad, 0, (SV*)a0);
168 AvFLAGS(a0) = AVf_REIFY;
171 av_store(pad, 0, Nullsv);
175 av_store(padlist, 0, (SV*)padname);
176 av_store(padlist, 1, (SV*)pad);
178 /* ... then update state variables */
180 PL_comppad_name = (AV*)(*av_fetch(padlist, 0, FALSE));
181 PL_comppad = (AV*)(*av_fetch(padlist, 1, FALSE));
182 PL_curpad = AvARRAY(PL_comppad);
184 if (! (flags & padnew_CLONE)) {
185 PL_comppad_name_fill = 0;
186 PL_min_intro_pending = 0;
191 DEBUG_X(PerlIO_printf(Perl_debug_log,
192 "Pad 0x%"UVxf"[0x%"UVxf"] new: compcv=0x%"UVxf
193 " name=0x%"UVxf" flags=0x%"UVxf"\n",
194 PTR2UV(PL_comppad), PTR2UV(PL_curpad), PTR2UV(PL_compcv),
195 PTR2UV(padname), (UV)flags
199 return (PADLIST*)padlist;
203 =for apidoc pad_undef
205 Free the padlist associated with a CV.
206 If parts of it happen to be current, we null the relevant
207 PL_*pad* global vars so that we don't have any dangling references left.
208 We also repoint the CvOUTSIDE of any about-to-be-orphaned
209 inner subs to the outer of this cv.
211 (This function should really be called pad_free, but the name was already
218 Perl_pad_undef(pTHX_ CV* cv)
221 PADLIST *padlist = CvPADLIST(cv);
225 if (!SvREFCNT(CvPADLIST(cv))) /* may be during global destruction */
228 DEBUG_X(PerlIO_printf(Perl_debug_log,
229 "Pad undef: cv=0x%"UVxf" padlist=0x%"UVxf"\n",
230 PTR2UV(cv), PTR2UV(padlist))
233 /* detach any '&' anon children in the pad; if afterwards they
234 * are still live, fix up their CvOUTSIDEs to point to our outside,
236 /* XXX DAPM for efficiency, we should only do this if we know we have
237 * children, or integrate this loop with general cleanup */
239 if (!PL_dirty) { /* don't bother during global destruction */
240 CV *outercv = CvOUTSIDE(cv);
241 U32 seq = CvOUTSIDE_SEQ(cv);
242 AV *comppad_name = (AV*)AvARRAY(padlist)[0];
243 SV **namepad = AvARRAY(comppad_name);
244 AV *comppad = (AV*)AvARRAY(padlist)[1];
245 SV **curpad = AvARRAY(comppad);
246 for (ix = AvFILLp(comppad_name); ix > 0; ix--) {
247 SV *namesv = namepad[ix];
248 if (namesv && namesv != &PL_sv_undef
249 && *SvPVX(namesv) == '&')
251 CV *innercv = (CV*)curpad[ix];
252 namepad[ix] = Nullsv;
253 SvREFCNT_dec(namesv);
255 SvREFCNT_dec(innercv);
256 if (SvREFCNT(innercv) /* in use, not just a prototype */
257 && CvOUTSIDE(innercv) == cv)
259 assert(CvWEAKOUTSIDE(innercv));
260 /* don't relink to grandfather if he's being freed */
261 if (outercv && SvREFCNT(outercv)) {
262 CvWEAKOUTSIDE_off(innercv);
263 CvOUTSIDE(innercv) = outercv;
264 CvOUTSIDE_SEQ(innercv) = seq;
265 SvREFCNT_inc(outercv);
268 CvOUTSIDE(innercv) = Nullcv;
277 ix = AvFILLp(padlist);
279 SV* sv = AvARRAY(padlist)[ix--];
282 if (sv == (SV*)PL_comppad_name)
283 PL_comppad_name = Nullav;
284 else if (sv == (SV*)PL_comppad) {
285 PL_comppad = Null(PAD*);
286 PL_curpad = Null(SV**);
290 SvREFCNT_dec((SV*)CvPADLIST(cv));
291 CvPADLIST(cv) = Null(PADLIST*);
298 =for apidoc pad_add_name
300 Create a new name and associated PADMY SV in the current pad; return the
302 If C<typestash> is valid, the name is for a typed lexical; set the
303 name's stash to that value.
304 If C<ourstash> is valid, it's an our lexical, set the name's
305 GvSTASH to that value
307 If fake, it means we're cloning an existing entry
313 Perl_pad_add_name(pTHX_ char *name, HV* typestash, HV* ourstash, bool fake)
315 PADOFFSET offset = pad_alloc(OP_PADSV, SVs_PADMY);
316 SV* namesv = NEWSV(1102, 0);
318 ASSERT_CURPAD_ACTIVE("pad_add_name");
321 sv_upgrade(namesv, ourstash ? SVt_PVGV : typestash ? SVt_PVMG : SVt_PVNV);
322 sv_setpv(namesv, name);
325 SvFLAGS(namesv) |= SVpad_TYPED;
326 SvSTASH(namesv) = (HV*)SvREFCNT_inc((SV*) typestash);
329 SvFLAGS(namesv) |= SVpad_OUR;
330 GvSTASH(namesv) = (HV*)SvREFCNT_inc((SV*) ourstash);
333 av_store(PL_comppad_name, offset, namesv);
336 DEBUG_Xv(PerlIO_printf(Perl_debug_log,
337 "Pad addname: %ld \"%s\" FAKE\n", (long)offset, name));
340 /* not yet introduced */
341 SvNVX(namesv) = (NV)PAD_MAX; /* min */
342 SvIVX(namesv) = 0; /* max */
344 if (!PL_min_intro_pending)
345 PL_min_intro_pending = offset;
346 PL_max_intro_pending = offset;
347 /* if it's not a simple scalar, replace with an AV or HV */
348 /* XXX DAPM since slot has been allocated, replace
349 * av_store with PL_curpad[offset] ? */
351 av_store(PL_comppad, offset, (SV*)newAV());
352 else if (*name == '%')
353 av_store(PL_comppad, offset, (SV*)newHV());
354 SvPADMY_on(PL_curpad[offset]);
355 DEBUG_Xv(PerlIO_printf(Perl_debug_log,
356 "Pad addname: %ld \"%s\" new lex=0x%"UVxf"\n",
357 (long)offset, name, PTR2UV(PL_curpad[offset])));
367 =for apidoc pad_alloc
369 Allocate a new my or tmp pad entry. For a my, simply push a null SV onto
370 the end of PL_comppad, but for a tmp, scan the pad from PL_padix upwards
371 for a slot which has no name and and no active value.
376 /* XXX DAPM integrate alloc(), add_name() and add_anon(),
377 * or at least rationalise ??? */
381 Perl_pad_alloc(pTHX_ I32 optype, U32 tmptype)
386 ASSERT_CURPAD_ACTIVE("pad_alloc");
388 if (AvARRAY(PL_comppad) != PL_curpad)
389 Perl_croak(aTHX_ "panic: pad_alloc");
390 if (PL_pad_reset_pending)
392 if (tmptype & SVs_PADMY) {
393 sv = *av_fetch(PL_comppad, AvFILLp(PL_comppad) + 1, TRUE);
394 retval = AvFILLp(PL_comppad);
397 SV **names = AvARRAY(PL_comppad_name);
398 SSize_t names_fill = AvFILLp(PL_comppad_name);
401 * "foreach" index vars temporarily become aliases to non-"my"
402 * values. Thus we must skip, not just pad values that are
403 * marked as current pad values, but also those with names.
405 /* HVDS why copy to sv here? we don't seem to use it */
406 if (++PL_padix <= names_fill &&
407 (sv = names[PL_padix]) && sv != &PL_sv_undef)
409 sv = *av_fetch(PL_comppad, PL_padix, TRUE);
410 if (!(SvFLAGS(sv) & (SVs_PADTMP | SVs_PADMY)) &&
411 !IS_PADGV(sv) && !IS_PADCONST(sv))
416 SvFLAGS(sv) |= tmptype;
417 PL_curpad = AvARRAY(PL_comppad);
419 DEBUG_X(PerlIO_printf(Perl_debug_log,
420 "Pad 0x%"UVxf"[0x%"UVxf"] alloc: %ld for %s\n",
421 PTR2UV(PL_comppad), PTR2UV(PL_curpad), (long) retval,
422 PL_op_name[optype]));
423 return (PADOFFSET)retval;
427 =for apidoc pad_add_anon
429 Add an anon code entry to the current compiling pad
435 Perl_pad_add_anon(pTHX_ SV* sv, OPCODE op_type)
440 name = NEWSV(1106, 0);
441 sv_upgrade(name, SVt_PVNV);
442 sv_setpvn(name, "&", 1);
445 ix = pad_alloc(op_type, SVs_PADMY);
446 av_store(PL_comppad_name, ix, name);
447 /* XXX DAPM use PL_curpad[] ? */
448 av_store(PL_comppad, ix, sv);
451 /* to avoid ref loops, we never have parent + child referencing each
452 * other simultaneously */
453 if (CvOUTSIDE((CV*)sv)) {
454 assert(!CvWEAKOUTSIDE((CV*)sv));
455 CvWEAKOUTSIDE_on((CV*)sv);
456 SvREFCNT_dec(CvOUTSIDE((CV*)sv));
464 =for apidoc pad_check_dup
466 Check for duplicate declarations: report any of:
467 * a my in the current scope with the same name;
468 * an our (anywhere in the pad) with the same name and the same stash
470 C<is_our> indicates that the name to check is an 'our' declaration
475 /* XXX DAPM integrate this into pad_add_name ??? */
478 Perl_pad_check_dup(pTHX_ char *name, bool is_our, HV *ourstash)
483 ASSERT_CURPAD_ACTIVE("pad_check_dup");
484 if (!ckWARN(WARN_MISC) || AvFILLp(PL_comppad_name) < 0)
485 return; /* nothing to check */
487 svp = AvARRAY(PL_comppad_name);
488 top = AvFILLp(PL_comppad_name);
489 /* check the current scope */
490 /* XXX DAPM - why the (I32) cast - shouldn't we ensure they're the same
492 for (off = top; (I32)off > PL_comppad_name_floor; off--) {
494 && sv != &PL_sv_undef
496 && (SvIVX(sv) == PAD_MAX || SvIVX(sv) == 0)
498 || ((SvFLAGS(sv) & SVpad_OUR) && GvSTASH(sv) == ourstash))
499 && strEQ(name, SvPVX(sv)))
501 Perl_warner(aTHX_ packWARN(WARN_MISC),
502 "\"%s\" variable %s masks earlier declaration in same %s",
503 (is_our ? "our" : "my"),
505 (SvIVX(sv) == PAD_MAX ? "scope" : "statement"));
510 /* check the rest of the pad */
514 && sv != &PL_sv_undef
516 && (SvIVX(sv) == PAD_MAX || SvIVX(sv) == 0)
517 && ((SvFLAGS(sv) & SVpad_OUR) && GvSTASH(sv) == ourstash)
518 && strEQ(name, SvPVX(sv)))
520 Perl_warner(aTHX_ packWARN(WARN_MISC),
521 "\"our\" variable %s redeclared", name);
522 Perl_warner(aTHX_ packWARN(WARN_MISC),
523 "\t(Did you mean \"local\" instead of \"our\"?)\n");
526 } while ( off-- > 0 );
532 =for apidoc pad_findmy
534 Given a lexical name, try to find its offset, first in the current pad,
535 or failing that, in the pads of any lexically enclosing subs (including
536 the complications introduced by eval). If the name is found in an outer pad,
537 then a fake entry is added to the current pad.
538 Returns the offset in the current pad, or NOT_IN_PAD on failure.
544 Perl_pad_findmy(pTHX_ char *name)
552 offset = pad_findlex(name, PL_compcv, PL_cop_seqmax, 1,
553 Null(SV**), &out_sv, &out_flags);
554 if (offset != NOT_IN_PAD)
557 /* look for an our that's being introduced; this allows
558 * our $foo = 0 unless defined $foo;
559 * to not give a warning. (Yes, this is a hack) */
561 nameav = (AV*)AvARRAY(CvPADLIST(PL_compcv))[0];
562 name_svp = AvARRAY(nameav);
563 for (offset = AvFILLp(nameav); offset > 0; offset--) {
564 SV *namesv = name_svp[offset];
565 if (namesv && namesv != &PL_sv_undef
567 && (SvFLAGS(namesv) & SVpad_OUR)
568 && strEQ(SvPVX(namesv), name)
569 && U_32(SvNVX(namesv)) == PAD_MAX /* min */
578 =for apidoc pad_findlex
580 Find a named lexical anywhere in a chain of nested pads. Add fake entries
581 in the inner pads if it's found in an outer one.
583 Returns the offset in the bottom pad of the lex or the fake lex.
584 cv is the CV in which to start the search, and seq is the current cop_seq
585 to match against. If warn is true, print appropriate warnings. The out_*
586 vars return values, and so are pointers to where the returned values
587 should be stored. out_capture, if non-null, requests that the innermost
588 instance of the lexical is captured; out_name_sv is set to the innermost
589 matched namesv or fake namesv; out_flags returns the flags normally
590 associated with the IVX field of a fake namesv.
592 Note that pad_findlex() is recursive; it recurses up the chain of CVs,
593 then comes back down, adding fake entries as it goes. It has to be this way
594 because fake namesvs in anon protoypes have to store in NVX the index into
600 /* Flags set in the SvIVX field of FAKE namesvs */
602 #define PAD_FAKELEX_ANON 1 /* the lex is declared in an ANON, or ... */
603 #define PAD_FAKELEX_MULTI 2 /* the lex can be instantiated multiple times */
605 /* the CV has finished being compiled. This is not a sufficient test for
606 * all CVs (eg XSUBs), but suffices for the CVs found in a lexical chain */
607 #define CvCOMPILED(cv) CvROOT(cv)
609 /* the CV does late binding of its lexicals */
610 #define CvLATE(cv) (CvANON(cv) || SvTYPE(cv) == SVt_PVFM)
614 S_pad_findlex(pTHX_ char *name, CV* cv, U32 seq, int warn,
615 SV** out_capture, SV** out_name_sv, int *out_flags)
617 I32 offset, new_offset;
620 AV *padlist = CvPADLIST(cv);
624 DEBUG_Xv(PerlIO_printf(Perl_debug_log,
625 "Pad findlex cv=0x%"UVxf" searching \"%s\" seq=%d%s\n",
626 PTR2UV(cv), name, (int)seq, out_capture ? " capturing" : "" ));
628 /* first, search this pad */
630 if (padlist) { /* not an undef CV */
632 AV *nameav = (AV*)AvARRAY(padlist)[0];
633 SV **name_svp = AvARRAY(nameav);
635 for (offset = AvFILLp(nameav); offset > 0; offset--) {
636 SV *namesv = name_svp[offset];
637 if (namesv && namesv != &PL_sv_undef
638 && strEQ(SvPVX(namesv), name))
641 fake_offset = offset; /* in case we don't find a real one */
642 else if ( seq > U_32(SvNVX(namesv)) /* min */
643 && seq <= (U32)SvIVX(namesv)) /* max */
648 if (offset > 0 || fake_offset > 0 ) { /* a match! */
649 if (offset > 0) { /* not fake */
651 *out_name_sv = name_svp[offset]; /* return the namesv */
653 /* set PAD_FAKELEX_MULTI if this lex can have multiple
654 * instances. For now, we just test !CvUNIQUE(cv), but
655 * ideally, we should detect my's declared within loops
656 * etc - this would allow a wider range of 'not stayed
657 * shared' warnings. We also treated alreadly-compiled
658 * lexes as not multi as viewed from evals. */
660 *out_flags = CvANON(cv) ?
662 (!CvUNIQUE(cv) && ! CvCOMPILED(cv))
663 ? PAD_FAKELEX_MULTI : 0;
665 DEBUG_Xv(PerlIO_printf(Perl_debug_log,
666 "Pad findlex cv=0x%"UVxf" matched: offset=%ld (%ld,%ld)\n",
667 PTR2UV(cv), (long)offset, (long)U_32(SvNVX(*out_name_sv)),
668 (long)SvIVX(*out_name_sv)));
670 else { /* fake match */
671 offset = fake_offset;
672 *out_name_sv = name_svp[offset]; /* return the namesv */
673 *out_flags = SvIVX(*out_name_sv);
674 DEBUG_Xv(PerlIO_printf(Perl_debug_log,
675 "Pad findlex cv=0x%"UVxf" matched: offset=%ld flags=0x%lx index=%lu\n",
676 PTR2UV(cv), (long)offset, (unsigned long)*out_flags,
677 (unsigned long)SvNVX(*out_name_sv)
681 /* return the lex? */
686 if ((SvFLAGS(*out_name_sv) & SVpad_OUR)) {
687 *out_capture = Nullsv;
691 /* trying to capture from an anon prototype? */
693 ? CvANON(cv) && CvCLONE(cv) && !CvCLONED(cv)
694 : *out_flags & PAD_FAKELEX_ANON)
696 if (warn && ckWARN(WARN_CLOSURE))
697 Perl_warner(aTHX_ packWARN(WARN_CLOSURE),
698 "Variable \"%s\" is not available", name);
699 *out_capture = Nullsv;
705 if (!CvCOMPILED(cv) && (*out_flags & PAD_FAKELEX_MULTI)
706 && warn && ckWARN(WARN_CLOSURE)) {
708 Perl_warner(aTHX_ packWARN(WARN_CLOSURE),
709 "Variable \"%s\" will not stay shared", name);
712 if (fake_offset && CvANON(cv)
713 && CvCLONE(cv) &&!CvCLONED(cv))
716 /* not yet caught - look further up */
717 DEBUG_Xv(PerlIO_printf(Perl_debug_log,
718 "Pad findlex cv=0x%"UVxf" chasing lex in outer pad\n",
721 pad_findlex(name, CvOUTSIDE(cv), CvOUTSIDE_SEQ(cv),
722 newwarn, out_capture, out_name_sv, out_flags);
727 *out_capture = AvARRAY((AV*)AvARRAY(padlist)[
728 CvDEPTH(cv) ? CvDEPTH(cv) : 1])[offset];
729 DEBUG_Xv(PerlIO_printf(Perl_debug_log,
730 "Pad findlex cv=0x%"UVxf" found lex=0x%"UVxf"\n",
731 PTR2UV(cv), PTR2UV(*out_capture)));
733 if (SvPADSTALE(*out_capture)) {
734 if (ckWARN(WARN_CLOSURE))
735 Perl_warner(aTHX_ packWARN(WARN_CLOSURE),
736 "Variable \"%s\" is not available", name);
737 *out_capture = Nullsv;
742 *out_capture = sv_2mortal((SV*)newAV());
743 else if (*name == '%')
744 *out_capture = sv_2mortal((SV*)newHV());
746 *out_capture = sv_newmortal();
754 /* it's not in this pad - try above */
759 /* out_capture non-null means caller wants us to capture lex; in
760 * addition we capture ourselves unless it's an ANON/format */
761 new_capturep = out_capture ? out_capture :
762 CvLATE(cv) ? Null(SV**) : &new_capture;
764 offset = pad_findlex(name, CvOUTSIDE(cv), CvOUTSIDE_SEQ(cv), 1,
765 new_capturep, out_name_sv, out_flags);
766 if (offset == NOT_IN_PAD)
769 /* found in an outer CV. Add appropriate fake entry to this pad */
771 /* don't add new fake entries (via eval) to CVs that we have already
772 * finished compiling, or to undef CVs */
773 if (CvCOMPILED(cv) || !padlist)
774 return 0; /* this dummy (and invalid) value isnt used by the caller */
778 AV *ocomppad_name = PL_comppad_name;
779 PAD *ocomppad = PL_comppad;
780 PL_comppad_name = (AV*)AvARRAY(padlist)[0];
781 PL_comppad = (AV*)AvARRAY(padlist)[1];
782 PL_curpad = AvARRAY(PL_comppad);
784 new_offset = pad_add_name(
786 (SvFLAGS(*out_name_sv) & SVpad_TYPED)
787 ? SvSTASH(*out_name_sv) : Nullhv,
788 (SvFLAGS(*out_name_sv) & SVpad_OUR)
789 ? GvSTASH(*out_name_sv) : Nullhv,
793 new_namesv = AvARRAY(PL_comppad_name)[new_offset];
794 SvIVX(new_namesv) = *out_flags;
796 SvNVX(new_namesv) = (NV)0;
797 if (SvFLAGS(new_namesv) & SVpad_OUR) {
800 else if (CvLATE(cv)) {
801 /* delayed creation - just note the offset within parent pad */
802 SvNVX(new_namesv) = (NV)offset;
806 /* immediate creation - capture outer value right now */
807 av_store(PL_comppad, new_offset, SvREFCNT_inc(*new_capturep));
808 DEBUG_Xv(PerlIO_printf(Perl_debug_log,
809 "Pad findlex cv=0x%"UVxf" saved captured sv 0x%"UVxf" at offset %ld\n",
810 PTR2UV(cv), PTR2UV(*new_capturep), (long)new_offset));
812 *out_name_sv = new_namesv;
813 *out_flags = SvIVX(new_namesv);
815 PL_comppad_name = ocomppad_name;
816 PL_comppad = ocomppad;
817 PL_curpad = ocomppad ? AvARRAY(ocomppad) : Null(SV **);
826 Get the value at offset po in the current pad.
827 Use macro PAD_SV instead of calling this function directly.
834 Perl_pad_sv(pTHX_ PADOFFSET po)
836 ASSERT_CURPAD_ACTIVE("pad_sv");
839 Perl_croak(aTHX_ "panic: pad_sv po");
840 DEBUG_X(PerlIO_printf(Perl_debug_log,
841 "Pad 0x%"UVxf"[0x%"UVxf"] sv: %ld sv=0x%"UVxf"\n",
842 PTR2UV(PL_comppad), PTR2UV(PL_curpad), (long)po, PTR2UV(PL_curpad[po]))
844 return PL_curpad[po];
849 =for apidoc pad_setsv
851 Set the entry at offset po in the current pad to sv.
852 Use the macro PAD_SETSV() rather than calling this function directly.
859 Perl_pad_setsv(pTHX_ PADOFFSET po, SV* sv)
861 ASSERT_CURPAD_ACTIVE("pad_setsv");
863 DEBUG_X(PerlIO_printf(Perl_debug_log,
864 "Pad 0x%"UVxf"[0x%"UVxf"] setsv: %ld sv=0x%"UVxf"\n",
865 PTR2UV(PL_comppad), PTR2UV(PL_curpad), (long)po, PTR2UV(sv))
874 =for apidoc pad_block_start
876 Update the pad compilation state variables on entry to a new block
882 * - integrate this in general state-saving routine ???
883 * - combine with the state-saving going on in pad_new ???
884 * - introduce a new SAVE type that does all this in one go ?
888 Perl_pad_block_start(pTHX_ int full)
890 ASSERT_CURPAD_ACTIVE("pad_block_start");
891 SAVEI32(PL_comppad_name_floor);
892 PL_comppad_name_floor = AvFILLp(PL_comppad_name);
894 PL_comppad_name_fill = PL_comppad_name_floor;
895 if (PL_comppad_name_floor < 0)
896 PL_comppad_name_floor = 0;
897 SAVEI32(PL_min_intro_pending);
898 SAVEI32(PL_max_intro_pending);
899 PL_min_intro_pending = 0;
900 SAVEI32(PL_comppad_name_fill);
901 SAVEI32(PL_padix_floor);
902 PL_padix_floor = PL_padix;
903 PL_pad_reset_pending = FALSE;
910 "Introduce" my variables to visible status.
922 ASSERT_CURPAD_ACTIVE("intro_my");
923 if (! PL_min_intro_pending)
924 return PL_cop_seqmax;
926 svp = AvARRAY(PL_comppad_name);
927 for (i = PL_min_intro_pending; i <= PL_max_intro_pending; i++) {
928 if ((sv = svp[i]) && sv != &PL_sv_undef
929 && !SvFAKE(sv) && !SvIVX(sv))
931 SvIVX(sv) = PAD_MAX; /* Don't know scope end yet. */
932 SvNVX(sv) = (NV)PL_cop_seqmax;
933 DEBUG_Xv(PerlIO_printf(Perl_debug_log,
934 "Pad intromy: %ld \"%s\", (%ld,%ld)\n",
936 (long)U_32(SvNVX(sv)), (long)SvIVX(sv))
940 PL_min_intro_pending = 0;
941 PL_comppad_name_fill = PL_max_intro_pending; /* Needn't search higher */
942 DEBUG_Xv(PerlIO_printf(Perl_debug_log,
943 "Pad intromy: seq -> %ld\n", (long)(PL_cop_seqmax+1)));
945 return PL_cop_seqmax++;
949 =for apidoc pad_leavemy
951 Cleanup at end of scope during compilation: set the max seq number for
952 lexicals in this scope and warn of any lexicals that never got introduced.
958 Perl_pad_leavemy(pTHX)
961 SV **svp = AvARRAY(PL_comppad_name);
964 PL_pad_reset_pending = FALSE;
966 ASSERT_CURPAD_ACTIVE("pad_leavemy");
967 if (PL_min_intro_pending && PL_comppad_name_fill < PL_min_intro_pending) {
968 for (off = PL_max_intro_pending; off >= PL_min_intro_pending; off--) {
969 if ((sv = svp[off]) && sv != &PL_sv_undef
970 && !SvFAKE(sv) && ckWARN_d(WARN_INTERNAL))
971 Perl_warner(aTHX_ packWARN(WARN_INTERNAL),
972 "%"SVf" never introduced", sv);
975 /* "Deintroduce" my variables that are leaving with this scope. */
976 for (off = AvFILLp(PL_comppad_name); off > PL_comppad_name_fill; off--) {
977 if ((sv = svp[off]) && sv != &PL_sv_undef
978 && !SvFAKE(sv) && SvIVX(sv) == PAD_MAX)
980 SvIVX(sv) = PL_cop_seqmax;
981 DEBUG_Xv(PerlIO_printf(Perl_debug_log,
982 "Pad leavemy: %ld \"%s\", (%ld,%ld)\n",
983 (long)off, SvPVX(sv),
984 (long)U_32(SvNVX(sv)), (long)SvIVX(sv))
989 DEBUG_Xv(PerlIO_printf(Perl_debug_log,
990 "Pad leavemy: seq = %ld\n", (long)PL_cop_seqmax));
995 =for apidoc pad_swipe
997 Abandon the tmp in the current pad at offset po and replace with a
1004 Perl_pad_swipe(pTHX_ PADOFFSET po, bool refadjust)
1006 ASSERT_CURPAD_LEGAL("pad_swipe");
1009 if (AvARRAY(PL_comppad) != PL_curpad)
1010 Perl_croak(aTHX_ "panic: pad_swipe curpad");
1012 Perl_croak(aTHX_ "panic: pad_swipe po");
1014 DEBUG_X(PerlIO_printf(Perl_debug_log,
1015 "Pad 0x%"UVxf"[0x%"UVxf"] swipe: %ld\n",
1016 PTR2UV(PL_comppad), PTR2UV(PL_curpad), (long)po));
1019 SvPADTMP_off(PL_curpad[po]);
1021 SvREFCNT_dec(PL_curpad[po]);
1023 PL_curpad[po] = NEWSV(1107,0);
1024 SvPADTMP_on(PL_curpad[po]);
1025 if ((I32)po < PL_padix)
1031 =for apidoc pad_reset
1033 Mark all the current temporaries for reuse
1038 /* XXX pad_reset() is currently disabled because it results in serious bugs.
1039 * It causes pad temp TARGs to be shared between OPs. Since TARGs are pushed
1040 * on the stack by OPs that use them, there are several ways to get an alias
1041 * to a shared TARG. Such an alias will change randomly and unpredictably.
1042 * We avoid doing this until we can think of a Better Way.
1045 Perl_pad_reset(pTHX)
1047 #ifdef USE_BROKEN_PAD_RESET
1050 if (AvARRAY(PL_comppad) != PL_curpad)
1051 Perl_croak(aTHX_ "panic: pad_reset curpad");
1053 DEBUG_X(PerlIO_printf(Perl_debug_log,
1054 "Pad 0x%"UVxf"[0x%"UVxf"] reset: padix %ld -> %ld",
1055 PTR2UV(PL_comppad), PTR2UV(PL_curpad),
1056 (long)PL_padix, (long)PL_padix_floor
1060 if (!PL_tainting) { /* Can't mix tainted and non-tainted temporaries. */
1061 for (po = AvMAX(PL_comppad); po > PL_padix_floor; po--) {
1062 if (PL_curpad[po] && !SvIMMORTAL(PL_curpad[po]))
1063 SvPADTMP_off(PL_curpad[po]);
1065 PL_padix = PL_padix_floor;
1068 PL_pad_reset_pending = FALSE;
1073 =for apidoc pad_tidy
1075 Tidy up a pad after we've finished compiling it:
1076 * remove most stuff from the pads of anonsub prototypes;
1078 * mark tmps as such.
1083 /* XXX DAPM surely most of this stuff should be done properly
1084 * at the right time beforehand, rather than going around afterwards
1085 * cleaning up our mistakes ???
1089 Perl_pad_tidy(pTHX_ padtidy_type type)
1094 ASSERT_CURPAD_ACTIVE("pad_tidy");
1096 /* If this CV has had any 'eval-capable' ops planted in it
1097 * (ie it contains eval '...', //ee, /$var/ or /(?{..})/), Then any
1098 * anon prototypes in the chain of CVs should be marked as cloneable,
1099 * so that for example the eval's CV in C<< sub { eval '$x' } >> gets
1100 * the right CvOUTSIDE.
1101 * If running with -d, *any* sub may potentially have an eval
1102 * excuted within it.
1105 if (PL_cv_has_eval || PL_perldb) {
1106 for (cv = PL_compcv ;cv; cv = CvOUTSIDE(cv)) {
1107 if (cv != PL_compcv && CvCOMPILED(cv))
1108 break; /* no need to mark already-compiled code */
1110 DEBUG_Xv(PerlIO_printf(Perl_debug_log,
1111 "Pad clone on cv=0x%"UVxf"\n", PTR2UV(cv)));
1117 /* extend curpad to match namepad */
1118 if (AvFILLp(PL_comppad_name) < AvFILLp(PL_comppad))
1119 av_store(PL_comppad_name, AvFILLp(PL_comppad), Nullsv);
1121 if (type == padtidy_SUBCLONE) {
1122 SV **namep = AvARRAY(PL_comppad_name);
1124 for (ix = AvFILLp(PL_comppad); ix > 0; ix--) {
1127 if (SvIMMORTAL(PL_curpad[ix]) || IS_PADGV(PL_curpad[ix]) || IS_PADCONST(PL_curpad[ix]))
1130 * The only things that a clonable function needs in its
1131 * pad are anonymous subs.
1132 * The rest are created anew during cloning.
1134 if (!((namesv = namep[ix]) != Nullsv &&
1135 namesv != &PL_sv_undef &&
1136 *SvPVX(namesv) == '&'))
1138 SvREFCNT_dec(PL_curpad[ix]);
1139 PL_curpad[ix] = Nullsv;
1143 else if (type == padtidy_SUB) {
1144 /* XXX DAPM this same bit of code keeps appearing !!! Rationalise? */
1145 AV *av = newAV(); /* Will be @_ */
1147 av_store(PL_comppad, 0, (SV*)av);
1148 AvFLAGS(av) = AVf_REIFY;
1151 /* XXX DAPM rationalise these two similar branches */
1153 if (type == padtidy_SUB) {
1154 for (ix = AvFILLp(PL_comppad); ix > 0; ix--) {
1155 if (SvIMMORTAL(PL_curpad[ix]) || IS_PADGV(PL_curpad[ix]) || IS_PADCONST(PL_curpad[ix]))
1157 if (!SvPADMY(PL_curpad[ix]))
1158 SvPADTMP_on(PL_curpad[ix]);
1161 else if (type == padtidy_FORMAT) {
1162 for (ix = AvFILLp(PL_comppad); ix > 0; ix--) {
1163 if (!SvPADMY(PL_curpad[ix]) && !SvIMMORTAL(PL_curpad[ix]))
1164 SvPADTMP_on(PL_curpad[ix]);
1167 PL_curpad = AvARRAY(PL_comppad);
1172 =for apidoc pad_free
1174 Free the SV at offet po in the current pad.
1179 /* XXX DAPM integrate with pad_swipe ???? */
1181 Perl_pad_free(pTHX_ PADOFFSET po)
1183 ASSERT_CURPAD_LEGAL("pad_free");
1186 if (AvARRAY(PL_comppad) != PL_curpad)
1187 Perl_croak(aTHX_ "panic: pad_free curpad");
1189 Perl_croak(aTHX_ "panic: pad_free po");
1191 DEBUG_X(PerlIO_printf(Perl_debug_log,
1192 "Pad 0x%"UVxf"[0x%"UVxf"] free: %ld\n",
1193 PTR2UV(PL_comppad), PTR2UV(PL_curpad), (long)po)
1196 if (PL_curpad[po] && PL_curpad[po] != &PL_sv_undef) {
1197 SvPADTMP_off(PL_curpad[po]);
1199 /* SV could be a shared hash key (eg bugid #19022) */
1201 #ifdef PERL_COPY_ON_WRITE
1202 !SvIsCOW(PL_curpad[po])
1204 !SvFAKE(PL_curpad[po])
1207 SvREADONLY_off(PL_curpad[po]); /* could be a freed constant */
1210 if ((I32)po < PL_padix)
1217 =for apidoc do_dump_pad
1219 Dump the contents of a padlist
1225 Perl_do_dump_pad(pTHX_ I32 level, PerlIO *file, PADLIST *padlist, int full)
1237 pad_name = (AV*)*av_fetch((AV*)padlist, 0, FALSE);
1238 pad = (AV*)*av_fetch((AV*)padlist, 1, FALSE);
1239 pname = AvARRAY(pad_name);
1240 ppad = AvARRAY(pad);
1241 Perl_dump_indent(aTHX_ level, file,
1242 "PADNAME = 0x%"UVxf"(0x%"UVxf") PAD = 0x%"UVxf"(0x%"UVxf")\n",
1243 PTR2UV(pad_name), PTR2UV(pname), PTR2UV(pad), PTR2UV(ppad)
1246 for (ix = 1; ix <= AvFILLp(pad_name); ix++) {
1248 if (namesv && namesv == &PL_sv_undef) {
1253 Perl_dump_indent(aTHX_ level+1, file,
1254 "%2d. 0x%"UVxf"<%lu> FAKE \"%s\" flags=0x%x index=%lu\n",
1257 (unsigned long) (ppad[ix] ? SvREFCNT(ppad[ix]) : 0),
1259 (unsigned long)SvIVX(namesv),
1260 (unsigned long)SvNVX(namesv)
1264 Perl_dump_indent(aTHX_ level+1, file,
1265 "%2d. 0x%"UVxf"<%lu> (%ld,%ld) \"%s\"\n",
1268 (unsigned long) (ppad[ix] ? SvREFCNT(ppad[ix]) : 0),
1269 (long)U_32(SvNVX(namesv)),
1270 (long)SvIVX(namesv),
1275 Perl_dump_indent(aTHX_ level+1, file,
1276 "%2d. 0x%"UVxf"<%lu>\n",
1279 (unsigned long) (ppad[ix] ? SvREFCNT(ppad[ix]) : 0)
1290 dump the contents of a CV
1297 S_cv_dump(pTHX_ CV *cv, char *title)
1299 CV *outside = CvOUTSIDE(cv);
1300 AV* padlist = CvPADLIST(cv);
1302 PerlIO_printf(Perl_debug_log,
1303 " %s: CV=0x%"UVxf" (%s), OUTSIDE=0x%"UVxf" (%s)\n",
1306 (CvANON(cv) ? "ANON"
1307 : (SvTYPE(cv) == SVt_PVFM) ? "FORMAT"
1308 : (cv == PL_main_cv) ? "MAIN"
1309 : CvUNIQUE(cv) ? "UNIQUE"
1310 : CvGV(cv) ? GvNAME(CvGV(cv)) : "UNDEFINED"),
1313 : CvANON(outside) ? "ANON"
1314 : (outside == PL_main_cv) ? "MAIN"
1315 : CvUNIQUE(outside) ? "UNIQUE"
1316 : CvGV(outside) ? GvNAME(CvGV(outside)) : "UNDEFINED"));
1318 PerlIO_printf(Perl_debug_log,
1319 " PADLIST = 0x%"UVxf"\n", PTR2UV(padlist));
1320 do_dump_pad(1, Perl_debug_log, padlist, 1);
1322 #endif /* DEBUGGING */
1329 =for apidoc cv_clone
1331 Clone a CV: make a new CV which points to the same code etc, but which
1332 has a newly-created pad built by copying the prototype pad and capturing
1339 Perl_cv_clone(pTHX_ CV *proto)
1342 AV* protopadlist = CvPADLIST(proto);
1343 AV* protopad_name = (AV*)*av_fetch(protopadlist, 0, FALSE);
1344 AV* protopad = (AV*)*av_fetch(protopadlist, 1, FALSE);
1345 SV** pname = AvARRAY(protopad_name);
1346 SV** ppad = AvARRAY(protopad);
1347 I32 fname = AvFILLp(protopad_name);
1348 I32 fpad = AvFILLp(protopad);
1355 assert(!CvUNIQUE(proto));
1357 /* Since cloneable anon subs can be nested, CvOUTSIDE may point
1358 * to a prototype; we instead want the cloned parent who called us.
1359 * Note that in general for formats, CvOUTSIDE != find_runcv */
1361 outside = CvOUTSIDE(proto);
1362 if (outside && CvCLONE(outside) && ! CvCLONED(outside))
1363 outside = find_runcv(NULL);
1364 depth = CvDEPTH(outside);
1365 assert(depth || SvTYPE(proto) == SVt_PVFM);
1368 assert(CvPADLIST(outside));
1371 SAVESPTR(PL_compcv);
1373 cv = PL_compcv = (CV*)NEWSV(1104, 0);
1374 sv_upgrade((SV *)cv, SvTYPE(proto));
1375 CvFLAGS(cv) = CvFLAGS(proto) & ~(CVf_CLONE|CVf_WEAKOUTSIDE);
1379 CvFILE(cv) = CvXSUB(proto) ? CvFILE(proto)
1380 : savepv(CvFILE(proto));
1382 CvFILE(cv) = CvFILE(proto);
1384 CvGV(cv) = CvGV(proto);
1385 CvSTASH(cv) = CvSTASH(proto);
1386 CvROOT(cv) = OpREFCNT_inc(CvROOT(proto));
1387 CvSTART(cv) = CvSTART(proto);
1388 CvOUTSIDE(cv) = (CV*)SvREFCNT_inc(outside);
1389 CvOUTSIDE_SEQ(cv) = CvOUTSIDE_SEQ(proto);
1392 sv_setpvn((SV*)cv, SvPVX(proto), SvCUR(proto));
1394 CvPADLIST(cv) = comppadlist = pad_new(padnew_CLONE|padnew_SAVE);
1396 av_fill(PL_comppad, fpad);
1397 for (ix = fname; ix >= 0; ix--)
1398 av_store(PL_comppad_name, ix, SvREFCNT_inc(pname[ix]));
1400 PL_curpad = AvARRAY(PL_comppad);
1402 outpad = AvARRAY(AvARRAY(CvPADLIST(outside))[depth]);
1404 for (ix = fpad; ix > 0; ix--) {
1405 SV* namesv = (ix <= fname) ? pname[ix] : Nullsv;
1407 if (namesv && namesv != &PL_sv_undef) { /* lexical */
1408 if (SvFAKE(namesv)) { /* lexical from outside? */
1409 sv = outpad[(I32)SvNVX(namesv)];
1411 /* formats may have an inactive parent */
1412 if (SvTYPE(proto) == SVt_PVFM && SvPADSTALE(sv)) {
1413 if (ckWARN(WARN_CLOSURE))
1414 Perl_warner(aTHX_ packWARN(WARN_CLOSURE),
1415 "Variable \"%s\" is not available", SvPVX(namesv));
1419 assert(!SvPADSTALE(sv));
1420 sv = SvREFCNT_inc(sv);
1424 char *name = SvPVX(namesv);
1426 sv = SvREFCNT_inc(ppad[ix]);
1427 else if (*name == '@')
1429 else if (*name == '%')
1436 else if (IS_PADGV(ppad[ix]) || IS_PADCONST(ppad[ix])) {
1437 sv = SvREFCNT_inc(ppad[ix]);
1447 PerlIO_printf(Perl_debug_log, "\nPad CV clone\n");
1448 cv_dump(outside, "Outside");
1449 cv_dump(proto, "Proto");
1456 /* Constant sub () { $x } closing over $x - see lib/constant.pm:
1457 * The prototype was marked as a candiate for const-ization,
1458 * so try to grab the current const value, and if successful,
1459 * turn into a const sub:
1461 SV* const_sv = op_const_sv(CvSTART(cv), cv);
1464 cv = newCONSTSUB(CvSTASH(proto), 0, const_sv);
1476 =for apidoc pad_fixup_inner_anons
1478 For any anon CVs in the pad, change CvOUTSIDE of that CV from
1479 old_cv to new_cv if necessary. Needed when a newly-compiled CV has to be
1480 moved to a pre-existing CV struct.
1486 Perl_pad_fixup_inner_anons(pTHX_ PADLIST *padlist, CV *old_cv, CV *new_cv)
1489 AV *comppad_name = (AV*)AvARRAY(padlist)[0];
1490 AV *comppad = (AV*)AvARRAY(padlist)[1];
1491 SV **namepad = AvARRAY(comppad_name);
1492 SV **curpad = AvARRAY(comppad);
1493 for (ix = AvFILLp(comppad_name); ix > 0; ix--) {
1494 SV *namesv = namepad[ix];
1495 if (namesv && namesv != &PL_sv_undef
1496 && *SvPVX(namesv) == '&')
1498 CV *innercv = (CV*)curpad[ix];
1499 assert(CvWEAKOUTSIDE(innercv));
1500 assert(CvOUTSIDE(innercv) == old_cv);
1501 CvOUTSIDE(innercv) = new_cv;
1508 =for apidoc pad_push
1510 Push a new pad frame onto the padlist, unless there's already a pad at
1511 this depth, in which case don't bother creating a new one.
1512 If has_args is true, give the new pad an @_ in slot zero.
1518 Perl_pad_push(pTHX_ PADLIST *padlist, int depth, int has_args)
1520 if (depth <= AvFILLp(padlist))
1524 SV** svp = AvARRAY(padlist);
1525 AV *newpad = newAV();
1526 SV **oldpad = AvARRAY(svp[depth-1]);
1527 I32 ix = AvFILLp((AV*)svp[1]);
1528 I32 names_fill = AvFILLp((AV*)svp[0]);
1529 SV** names = AvARRAY(svp[0]);
1531 for ( ;ix > 0; ix--) {
1532 if (names_fill >= ix && names[ix] != &PL_sv_undef) {
1533 char *name = SvPVX(names[ix]);
1534 if ((SvFLAGS(names[ix]) & SVf_FAKE) || *name == '&') {
1535 /* outer lexical or anon code */
1536 av_store(newpad, ix, SvREFCNT_inc(oldpad[ix]));
1538 else { /* our own lexical */
1540 av_store(newpad, ix, sv = (SV*)newAV());
1541 else if (*name == '%')
1542 av_store(newpad, ix, sv = (SV*)newHV());
1544 av_store(newpad, ix, sv = NEWSV(0, 0));
1548 else if (IS_PADGV(oldpad[ix]) || IS_PADCONST(oldpad[ix])) {
1549 av_store(newpad, ix, sv = SvREFCNT_inc(oldpad[ix]));
1552 /* save temporaries on recursion? */
1553 av_store(newpad, ix, sv = NEWSV(0, 0));
1560 av_store(newpad, 0, (SV*)av);
1561 AvFLAGS(av) = AVf_REIFY;
1563 av_store(padlist, depth, (SV*)newpad);
1564 AvFILLp(padlist) = depth;