This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
regexec.c: Clarify comments; remove stray ';'
[perl5.git] / pad.c
1 /*    pad.c
2  *
3  *    Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008
4  *    by Larry Wall and others
5  *
6  *    You may distribute under the terms of either the GNU General Public
7  *    License or the Artistic License, as specified in the README file.
8  */
9
10 /*
11  *  'Anyway: there was this Mr. Frodo left an orphan and stranded, as you
12  *   might say, among those queer Bucklanders, being brought up anyhow in
13  *   Brandy Hall.  A regular warren, by all accounts.  Old Master Gorbadoc
14  *   never had fewer than a couple of hundred relations in the place.
15  *   Mr. Bilbo never did a kinder deed than when he brought the lad back
16  *   to live among decent folk.'                           --the Gaffer
17  *
18  *     [p.23 of _The Lord of the Rings_, I/i: "A Long-Expected Party"]
19  */
20
21 /*
22 =head1 Pad Data Structures
23
24 =for apidoc Amx|PADLIST *|CvPADLIST|CV *cv
25
26 CV's can have CvPADLIST(cv) set to point to a PADLIST.  This is the CV's
27 scratchpad, which stores lexical variables and opcode temporary and
28 per-thread values.
29
30 For these purposes "formats" are a kind-of CV; eval""s are too (except they're
31 not callable at will and are always thrown away after the eval"" is done
32 executing).  Require'd files are simply evals without any outer lexical
33 scope.
34
35 XSUBs do not have a C<CvPADLIST>.  C<dXSTARG> fetches values from C<PL_curpad>,
36 but that is really the callers pad (a slot of which is allocated by
37 every entersub). Do not get or set C<CvPADLIST> if a CV is an XSUB (as
38 determined by C<CvISXSUB()>), C<CvPADLIST> slot is reused for a different
39 internal purpose in XSUBs.
40
41 The PADLIST has a C array where pads are stored.
42
43 The 0th entry of the PADLIST is a PADNAMELIST
44 which represents the "names" or rather
45 the "static type information" for lexicals.  The individual elements of a
46 PADNAMELIST are PADNAMEs.  Future
47 refactorings might stop the PADNAMELIST from being stored in the PADLIST's
48 array, so don't rely on it.  See L</PadlistNAMES>.
49
50 The CvDEPTH'th entry of a PADLIST is a PAD (an AV) which is the stack frame
51 at that depth of recursion into the CV.  The 0th slot of a frame AV is an
52 AV which is C<@_>.  Other entries are storage for variables and op targets.
53
54 Iterating over the PADNAMELIST iterates over all possible pad
55 items.  Pad slots for targets (C<SVs_PADTMP>)
56 and GVs end up having &PL_padname_undef "names", while slots for constants 
57 have C<&PL_padname_const> "names" (see C<L</pad_alloc>>).  That
58 C<&PL_padname_undef>
59 and C<&PL_padname_const> are used is an implementation detail subject to
60 change.  To test for them, use C<!PadnamePV(name)> and
61 S<C<PadnamePV(name) && !PadnameLEN(name)>>, respectively.
62
63 Only C<my>/C<our> variable slots get valid names.
64 The rest are op targets/GVs/constants which are statically allocated
65 or resolved at compile time.  These don't have names by which they
66 can be looked up from Perl code at run time through eval"" the way
67 C<my>/C<our> variables can be.  Since they can't be looked up by "name"
68 but only by their index allocated at compile time (which is usually
69 in C<PL_op->op_targ>), wasting a name SV for them doesn't make sense.
70
71 The pad names in the PADNAMELIST have their PV holding the name of
72 the variable.  The C<COP_SEQ_RANGE_LOW> and C<_HIGH> fields form a range
73 (low+1..high inclusive) of cop_seq numbers for which the name is
74 valid.  During compilation, these fields may hold the special value
75 PERL_PADSEQ_INTRO to indicate various stages:
76
77  COP_SEQ_RANGE_LOW        _HIGH
78  -----------------        -----
79  PERL_PADSEQ_INTRO            0   variable not yet introduced:
80                                   { my ($x
81  valid-seq#   PERL_PADSEQ_INTRO   variable in scope:
82                                   { my ($x);
83  valid-seq#          valid-seq#   compilation of scope complete:
84                                   { my ($x); .... }
85
86 When a lexical var hasn't yet been introduced, it already exists from the
87 perspective of duplicate declarations, but not for variable lookups, e.g.
88
89     my ($x, $x); # '"my" variable $x masks earlier declaration'
90     my $x = $x;  # equal to my $x = $::x;
91
92 For typed lexicals C<PadnameTYPE> points at the type stash.  For C<our>
93 lexicals, C<PadnameOURSTASH> points at the stash of the associated global (so
94 that duplicate C<our> declarations in the same package can be detected).
95 C<PadnameGEN> is sometimes used to store the generation number during
96 compilation.
97
98 If C<PadnameOUTER> is set on the pad name, then that slot in the frame AV
99 is a REFCNT'ed reference to a lexical from "outside".  Such entries
100 are sometimes referred to as 'fake'.  In this case, the name does not
101 use 'low' and 'high' to store a cop_seq range, since it is in scope
102 throughout.  Instead 'high' stores some flags containing info about
103 the real lexical (is it declared in an anon, and is it capable of being
104 instantiated multiple times?), and for fake ANONs, 'low' contains the index
105 within the parent's pad where the lexical's value is stored, to make
106 cloning quicker.
107
108 If the 'name' is C<&> the corresponding entry in the PAD
109 is a CV representing a possible closure.
110
111 Note that formats are treated as anon subs, and are cloned each time
112 write is called (if necessary).
113
114 The flag C<SVs_PADSTALE> is cleared on lexicals each time the C<my()> is executed,
115 and set on scope exit.  This allows the
116 C<"Variable $x is not available"> warning
117 to be generated in evals, such as 
118
119     { my $x = 1; sub f { eval '$x'} } f();
120
121 For state vars, C<SVs_PADSTALE> is overloaded to mean 'not yet initialised',
122 but this internal state is stored in a separate pad entry.
123
124 =for apidoc AmxU|PADNAMELIST *|PL_comppad_name
125
126 During compilation, this points to the array containing the names part
127 of the pad for the currently-compiling code.
128
129 =for apidoc AmxU|PAD *|PL_comppad
130
131 During compilation, this points to the array containing the values
132 part of the pad for the currently-compiling code.  (At runtime a CV may
133 have many such value arrays; at compile time just one is constructed.)
134 At runtime, this points to the array containing the currently-relevant
135 values for the pad for the currently-executing code.
136
137 =for apidoc AmxU|SV **|PL_curpad
138
139 Points directly to the body of the L</PL_comppad> array.
140 (I.e., this is C<PAD_ARRAY(PL_comppad)>.)
141
142 =cut
143 */
144
145
146 #include "EXTERN.h"
147 #define PERL_IN_PAD_C
148 #include "perl.h"
149 #include "keywords.h"
150
151 #define COP_SEQ_RANGE_LOW_set(sv,val)           \
152   STMT_START { (sv)->xpadn_low = (val); } STMT_END
153 #define COP_SEQ_RANGE_HIGH_set(sv,val)          \
154   STMT_START { (sv)->xpadn_high = (val); } STMT_END
155
156 #define PARENT_PAD_INDEX_set            COP_SEQ_RANGE_LOW_set
157 #define PARENT_FAKELEX_FLAGS_set        COP_SEQ_RANGE_HIGH_set
158
159 #ifdef DEBUGGING
160 void
161 Perl_set_padlist(CV * cv, PADLIST *padlist){
162     PERL_ARGS_ASSERT_SET_PADLIST;
163 #  if PTRSIZE == 8
164     assert((Size_t)padlist != UINT64_C(0xEFEFEFEFEFEFEFEF));
165 #  elif PTRSIZE == 4
166     assert((Size_t)padlist != 0xEFEFEFEF);
167 #  else
168 #    error unknown pointer size
169 #  endif
170     assert(!CvISXSUB(cv));
171     ((XPVCV*)MUTABLE_PTR(SvANY(cv)))->xcv_padlist_u.xcv_padlist = padlist;
172 }
173 #endif
174
175 /*
176 =for apidoc Am|PADLIST *|pad_new|int flags
177
178 Create a new padlist, updating the global variables for the
179 currently-compiling padlist to point to the new padlist.  The following
180 flags can be OR'ed together:
181
182     padnew_CLONE        this pad is for a cloned CV
183     padnew_SAVE         save old globals on the save stack
184     padnew_SAVESUB      also save extra stuff for start of sub
185
186 =cut
187 */
188
189 PADLIST *
190 Perl_pad_new(pTHX_ int flags)
191 {
192     PADLIST *padlist;
193     PADNAMELIST *padname;
194     PAD *pad;
195     PAD **ary;
196
197     ASSERT_CURPAD_LEGAL("pad_new");
198
199     /* save existing state, ... */
200
201     if (flags & padnew_SAVE) {
202         SAVECOMPPAD();
203         if (! (flags & padnew_CLONE)) {
204             SAVESPTR(PL_comppad_name);
205             save_strlen((STRLEN *)&PL_padix);
206             save_strlen((STRLEN *)&PL_constpadix);
207             save_strlen((STRLEN *)&PL_comppad_name_fill);
208             save_strlen((STRLEN *)&PL_min_intro_pending);
209             save_strlen((STRLEN *)&PL_max_intro_pending);
210             SAVEBOOL(PL_cv_has_eval);
211             if (flags & padnew_SAVESUB) {
212                 SAVEBOOL(PL_pad_reset_pending);
213             }
214         }
215     }
216
217     /* ... create new pad ... */
218
219     Newxz(padlist, 1, PADLIST);
220     pad         = newAV();
221
222     if (flags & padnew_CLONE) {
223         AV * const a0 = newAV();                        /* will be @_ */
224         av_store(pad, 0, MUTABLE_SV(a0));
225         AvREIFY_only(a0);
226
227         PadnamelistREFCNT(padname = PL_comppad_name)++;
228     }
229     else {
230         padlist->xpadl_id = PL_padlist_generation++;
231         av_store(pad, 0, NULL);
232         padname = newPADNAMELIST(0);
233         padnamelist_store(padname, 0, &PL_padname_undef);
234     }
235
236     /* Most subroutines never recurse, hence only need 2 entries in the padlist
237        array - names, and depth=1.  The default for av_store() is to allocate
238        0..3, and even an explicit call to av_extend() with <3 will be rounded
239        up, so we inline the allocation of the array here.  */
240     Newx(ary, 2, PAD *);
241     PadlistMAX(padlist) = 1;
242     PadlistARRAY(padlist) = ary;
243     ary[0] = (PAD *)padname;
244     ary[1] = pad;
245
246     /* ... then update state variables */
247
248     PL_comppad          = pad;
249     PL_curpad           = AvARRAY(pad);
250
251     if (! (flags & padnew_CLONE)) {
252         PL_comppad_name      = padname;
253         PL_comppad_name_fill = 0;
254         PL_min_intro_pending = 0;
255         PL_padix             = 0;
256         PL_constpadix        = 0;
257         PL_cv_has_eval       = 0;
258     }
259
260     DEBUG_X(PerlIO_printf(Perl_debug_log,
261           "Pad 0x%" UVxf "[0x%" UVxf "] new:       compcv=0x%" UVxf
262               " name=0x%" UVxf " flags=0x%" UVxf "\n",
263           PTR2UV(PL_comppad), PTR2UV(PL_curpad), PTR2UV(PL_compcv),
264               PTR2UV(padname), (UV)flags
265         )
266     );
267
268     return (PADLIST*)padlist;
269 }
270
271
272 /*
273 =head1 Embedding Functions
274
275 =for apidoc cv_undef
276
277 Clear out all the active components of a CV.  This can happen either
278 by an explicit C<undef &foo>, or by the reference count going to zero.
279 In the former case, we keep the C<CvOUTSIDE> pointer, so that any anonymous
280 children can still follow the full lexical scope chain.
281
282 =cut
283 */
284
285 void
286 Perl_cv_undef(pTHX_ CV *cv)
287 {
288     PERL_ARGS_ASSERT_CV_UNDEF;
289     cv_undef_flags(cv, 0);
290 }
291
292 void
293 Perl_cv_undef_flags(pTHX_ CV *cv, U32 flags)
294 {
295     CV cvbody;/*CV body will never be realloced inside this func,
296                so dont read it more than once, use fake CV so existing macros
297                will work, the indirection and CV head struct optimized away*/
298     SvANY(&cvbody) = SvANY(cv);
299
300     PERL_ARGS_ASSERT_CV_UNDEF_FLAGS;
301
302     DEBUG_X(PerlIO_printf(Perl_debug_log,
303           "CV undef: cv=0x%" UVxf " comppad=0x%" UVxf "\n",
304             PTR2UV(cv), PTR2UV(PL_comppad))
305     );
306
307     if (CvFILE(&cvbody)) {
308         char * file = CvFILE(&cvbody);
309         CvFILE(&cvbody) = NULL;
310         if(CvDYNFILE(&cvbody))
311             Safefree(file);
312     }
313
314     /* CvSLABBED_off(&cvbody); *//* turned off below */
315     /* release the sub's body */
316     if (!CvISXSUB(&cvbody)) {
317         if(CvROOT(&cvbody)) {
318             assert(SvTYPE(cv) == SVt_PVCV || SvTYPE(cv) == SVt_PVFM); /*unsafe is safe */
319             if (CvDEPTHunsafe(&cvbody)) {
320                 assert(SvTYPE(cv) == SVt_PVCV);
321                 Perl_croak_nocontext("Can't undef active subroutine");
322             }
323             ENTER;
324
325             PAD_SAVE_SETNULLPAD();
326
327             if (CvSLABBED(&cvbody)) OpslabREFCNT_dec_padok(OpSLAB(CvROOT(&cvbody)));
328             op_free(CvROOT(&cvbody));
329             CvROOT(&cvbody) = NULL;
330             CvSTART(&cvbody) = NULL;
331             LEAVE;
332         }
333         else if (CvSLABBED(&cvbody)) {
334             if( CvSTART(&cvbody)) {
335                 ENTER;
336                 PAD_SAVE_SETNULLPAD();
337
338                 /* discard any leaked ops */
339                 if (PL_parser)
340                     parser_free_nexttoke_ops(PL_parser, (OPSLAB *)CvSTART(&cvbody));
341                 opslab_force_free((OPSLAB *)CvSTART(&cvbody));
342                 CvSTART(&cvbody) = NULL;
343
344                 LEAVE;
345             }
346 #ifdef DEBUGGING
347             else Perl_warn(aTHX_ "Slab leaked from cv %p", (void*)cv);
348 #endif
349         }
350     }
351     else { /* dont bother checking if CvXSUB(cv) is true, less branching */
352         CvXSUB(&cvbody) = NULL;
353     }
354     SvPOK_off(MUTABLE_SV(cv));          /* forget prototype */
355     sv_unmagic((SV *)cv, PERL_MAGIC_checkcall);
356     if (!(flags & CV_UNDEF_KEEP_NAME)) {
357         if (CvNAMED(&cvbody)) {
358             CvNAME_HEK_set(&cvbody, NULL);
359             CvNAMED_off(&cvbody);
360         }
361         else CvGV_set(cv, NULL);
362     }
363
364     /* This statement and the subsequence if block was pad_undef().  */
365     pad_peg("pad_undef");
366
367     if (!CvISXSUB(&cvbody) && CvPADLIST(&cvbody)) {
368         PADOFFSET ix;
369         const PADLIST *padlist = CvPADLIST(&cvbody);
370
371         /* Free the padlist associated with a CV.
372            If parts of it happen to be current, we null the relevant PL_*pad*
373            global vars so that we don't have any dangling references left.
374            We also repoint the CvOUTSIDE of any about-to-be-orphaned inner
375            subs to the outer of this cv.  */
376
377         DEBUG_X(PerlIO_printf(Perl_debug_log,
378                               "Pad undef: cv=0x%" UVxf " padlist=0x%" UVxf " comppad=0x%" UVxf "\n",
379                               PTR2UV(cv), PTR2UV(padlist), PTR2UV(PL_comppad))
380                 );
381
382         /* detach any '&' anon children in the pad; if afterwards they
383          * are still live, fix up their CvOUTSIDEs to point to our outside,
384          * bypassing us. */
385
386         if (PL_phase != PERL_PHASE_DESTRUCT) { /* don't bother during global destruction */
387             CV * const outercv = CvOUTSIDE(&cvbody);
388             const U32 seq = CvOUTSIDE_SEQ(&cvbody);
389             PADNAMELIST * const comppad_name = PadlistNAMES(padlist);
390             PADNAME ** const namepad = PadnamelistARRAY(comppad_name);
391             PAD * const comppad = PadlistARRAY(padlist)[1];
392             SV ** const curpad = AvARRAY(comppad);
393             for (ix = PadnamelistMAX(comppad_name); ix > 0; ix--) {
394                 PADNAME * const name = namepad[ix];
395                 if (name && PadnamePV(name) && *PadnamePV(name) == '&')
396                     {
397                         CV * const innercv = MUTABLE_CV(curpad[ix]);
398                         U32 inner_rc;
399                         assert(innercv);
400                         assert(SvTYPE(innercv) != SVt_PVFM);
401                         inner_rc = SvREFCNT(innercv);
402                         assert(inner_rc);
403
404                         if (SvREFCNT(comppad) < 2) { /* allow for /(?{ sub{} })/  */
405                             curpad[ix] = NULL;
406                             SvREFCNT_dec_NN(innercv);
407                             inner_rc--;
408                         }
409
410                         /* in use, not just a prototype */
411                         if (inner_rc && SvTYPE(innercv) == SVt_PVCV
412                          && (CvOUTSIDE(innercv) == cv))
413                         {
414                             assert(CvWEAKOUTSIDE(innercv));
415                             /* don't relink to grandfather if he's being freed */
416                             if (outercv && SvREFCNT(outercv)) {
417                                 CvWEAKOUTSIDE_off(innercv);
418                                 CvOUTSIDE(innercv) = outercv;
419                                 CvOUTSIDE_SEQ(innercv) = seq;
420                                 SvREFCNT_inc_simple_void_NN(outercv);
421                             }
422                             else {
423                                 CvOUTSIDE(innercv) = NULL;
424                             }
425                         }
426                     }
427             }
428         }
429
430         ix = PadlistMAX(padlist);
431         while (ix > 0) {
432             PAD * const sv = PadlistARRAY(padlist)[ix--];
433             if (sv) {
434                 if (sv == PL_comppad) {
435                     PL_comppad = NULL;
436                     PL_curpad = NULL;
437                 }
438                 SvREFCNT_dec_NN(sv);
439             }
440         }
441         {
442             PADNAMELIST * const names = PadlistNAMES(padlist);
443             if (names == PL_comppad_name && PadnamelistREFCNT(names) == 1)
444                 PL_comppad_name = NULL;
445             PadnamelistREFCNT_dec(names);
446         }
447         if (PadlistARRAY(padlist)) Safefree(PadlistARRAY(padlist));
448         Safefree(padlist);
449         CvPADLIST_set(&cvbody, NULL);
450     }
451     else if (CvISXSUB(&cvbody))
452         CvHSCXT(&cvbody) = NULL;
453     /* else is (!CvISXSUB(&cvbody) && !CvPADLIST(&cvbody)) {do nothing;} */
454
455
456     /* remove CvOUTSIDE unless this is an undef rather than a free */
457     if (!SvREFCNT(cv)) {
458         CV * outside = CvOUTSIDE(&cvbody);
459         if(outside) {
460             CvOUTSIDE(&cvbody) = NULL;
461             if (!CvWEAKOUTSIDE(&cvbody))
462                 SvREFCNT_dec_NN(outside);
463         }
464     }
465     if (CvCONST(&cvbody)) {
466         SvREFCNT_dec(MUTABLE_SV(CvXSUBANY(&cvbody).any_ptr));
467         /* CvCONST_off(cv); *//* turned off below */
468     }
469     /* delete all flags except WEAKOUTSIDE and CVGV_RC, which indicate the
470      * ref status of CvOUTSIDE and CvGV, and ANON, NAMED and
471      * LEXICAL, which are used to determine the sub's name.  */
472     CvFLAGS(&cvbody) &= (CVf_WEAKOUTSIDE|CVf_CVGV_RC|CVf_ANON|CVf_LEXICAL
473                    |CVf_NAMED);
474 }
475
476 /*
477 =for apidoc cv_forget_slab
478
479 When a CV has a reference count on its slab (C<CvSLABBED>), it is responsible
480 for making sure it is freed.  (Hence, no two CVs should ever have a
481 reference count on the same slab.)  The CV only needs to reference the slab
482 during compilation.  Once it is compiled and C<CvROOT> attached, it has
483 finished its job, so it can forget the slab.
484
485 =cut
486 */
487
488 void
489 Perl_cv_forget_slab(pTHX_ CV *cv)
490 {
491     bool slabbed;
492     OPSLAB *slab = NULL;
493
494     if (!cv)
495         return;
496     slabbed = cBOOL(CvSLABBED(cv));
497     if (!slabbed) return;
498
499     CvSLABBED_off(cv);
500
501     if      (CvROOT(cv))  slab = OpSLAB(CvROOT(cv));
502     else if (CvSTART(cv)) slab = (OPSLAB *)CvSTART(cv);
503 #ifdef DEBUGGING
504     else if (slabbed)     Perl_warn(aTHX_ "Slab leaked from cv %p", (void*)cv);
505 #endif
506
507     if (slab) {
508 #ifdef PERL_DEBUG_READONLY_OPS
509         const size_t refcnt = slab->opslab_refcnt;
510 #endif
511         OpslabREFCNT_dec(slab);
512 #ifdef PERL_DEBUG_READONLY_OPS
513         if (refcnt > 1) Slab_to_ro(slab);
514 #endif
515     }
516 }
517
518 /*
519 =for apidoc m|PADOFFSET|pad_alloc_name|PADNAME *name|U32 flags|HV *typestash|HV *ourstash
520
521 Allocates a place in the currently-compiling
522 pad (via L<perlapi/pad_alloc>) and
523 then stores a name for that entry.  C<name> is adopted and
524 becomes the name entry; it must already contain the name
525 string.  C<typestash> and C<ourstash> and the C<padadd_STATE>
526 flag get added to C<name>.  None of the other
527 processing of L<perlapi/pad_add_name_pvn>
528 is done.  Returns the offset of the allocated pad slot.
529
530 =cut
531 */
532
533 static PADOFFSET
534 S_pad_alloc_name(pTHX_ PADNAME *name, U32 flags, HV *typestash,
535                        HV *ourstash)
536 {
537     const PADOFFSET offset = pad_alloc(OP_PADSV, SVs_PADMY);
538
539     PERL_ARGS_ASSERT_PAD_ALLOC_NAME;
540
541     ASSERT_CURPAD_ACTIVE("pad_alloc_name");
542
543     if (typestash) {
544         SvPAD_TYPED_on(name);
545         PadnameTYPE(name) =
546             MUTABLE_HV(SvREFCNT_inc_simple_NN(MUTABLE_SV(typestash)));
547     }
548     if (ourstash) {
549         SvPAD_OUR_on(name);
550         SvOURSTASH_set(name, ourstash);
551         SvREFCNT_inc_simple_void_NN(ourstash);
552     }
553     else if (flags & padadd_STATE) {
554         SvPAD_STATE_on(name);
555     }
556
557     padnamelist_store(PL_comppad_name, offset, name);
558     if (PadnameLEN(name) > 1)
559         PadnamelistMAXNAMED(PL_comppad_name) = offset;
560     return offset;
561 }
562
563 /*
564 =for apidoc Am|PADOFFSET|pad_add_name_pvn|const char *namepv|STRLEN namelen|U32 flags|HV *typestash|HV *ourstash
565
566 Allocates a place in the currently-compiling pad for a named lexical
567 variable.  Stores the name and other metadata in the name part of the
568 pad, and makes preparations to manage the variable's lexical scoping.
569 Returns the offset of the allocated pad slot.
570
571 C<namepv>/C<namelen> specify the variable's name, including leading sigil.
572 If C<typestash> is non-null, the name is for a typed lexical, and this
573 identifies the type.  If C<ourstash> is non-null, it's a lexical reference
574 to a package variable, and this identifies the package.  The following
575 flags can be OR'ed together:
576
577  padadd_OUR          redundantly specifies if it's a package var
578  padadd_STATE        variable will retain value persistently
579  padadd_NO_DUP_CHECK skip check for lexical shadowing
580
581 =cut
582 */
583
584 PADOFFSET
585 Perl_pad_add_name_pvn(pTHX_ const char *namepv, STRLEN namelen,
586                 U32 flags, HV *typestash, HV *ourstash)
587 {
588     PADOFFSET offset;
589     PADNAME *name;
590
591     PERL_ARGS_ASSERT_PAD_ADD_NAME_PVN;
592
593     if (flags & ~(padadd_OUR|padadd_STATE|padadd_NO_DUP_CHECK))
594         Perl_croak(aTHX_ "panic: pad_add_name_pvn illegal flag bits 0x%" UVxf,
595                    (UV)flags);
596
597     name = newPADNAMEpvn(namepv, namelen);
598
599     if ((flags & padadd_NO_DUP_CHECK) == 0) {
600         ENTER;
601         SAVEFREEPADNAME(name); /* in case of fatal warnings */
602         /* check for duplicate declaration */
603         pad_check_dup(name, flags & padadd_OUR, ourstash);
604         PadnameREFCNT(name)++;
605         LEAVE;
606     }
607
608     offset = pad_alloc_name(name, flags, typestash, ourstash);
609
610     /* not yet introduced */
611     COP_SEQ_RANGE_LOW_set(name, PERL_PADSEQ_INTRO);
612     COP_SEQ_RANGE_HIGH_set(name, 0);
613
614     if (!PL_min_intro_pending)
615         PL_min_intro_pending = offset;
616     PL_max_intro_pending = offset;
617     /* if it's not a simple scalar, replace with an AV or HV */
618     assert(SvTYPE(PL_curpad[offset]) == SVt_NULL);
619     assert(SvREFCNT(PL_curpad[offset]) == 1);
620     if (namelen != 0 && *namepv == '@')
621         sv_upgrade(PL_curpad[offset], SVt_PVAV);
622     else if (namelen != 0 && *namepv == '%')
623         sv_upgrade(PL_curpad[offset], SVt_PVHV);
624     else if (namelen != 0 && *namepv == '&')
625         sv_upgrade(PL_curpad[offset], SVt_PVCV);
626     assert(SvPADMY(PL_curpad[offset]));
627     DEBUG_Xv(PerlIO_printf(Perl_debug_log,
628                            "Pad addname: %ld \"%s\" new lex=0x%" UVxf "\n",
629                            (long)offset, PadnamePV(name),
630                            PTR2UV(PL_curpad[offset])));
631
632     return offset;
633 }
634
635 /*
636 =for apidoc Am|PADOFFSET|pad_add_name_pv|const char *name|U32 flags|HV *typestash|HV *ourstash
637
638 Exactly like L</pad_add_name_pvn>, but takes a nul-terminated string
639 instead of a string/length pair.
640
641 =cut
642 */
643
644 PADOFFSET
645 Perl_pad_add_name_pv(pTHX_ const char *name,
646                      const U32 flags, HV *typestash, HV *ourstash)
647 {
648     PERL_ARGS_ASSERT_PAD_ADD_NAME_PV;
649     return pad_add_name_pvn(name, strlen(name), flags, typestash, ourstash);
650 }
651
652 /*
653 =for apidoc Am|PADOFFSET|pad_add_name_sv|SV *name|U32 flags|HV *typestash|HV *ourstash
654
655 Exactly like L</pad_add_name_pvn>, but takes the name string in the form
656 of an SV instead of a string/length pair.
657
658 =cut
659 */
660
661 PADOFFSET
662 Perl_pad_add_name_sv(pTHX_ SV *name, U32 flags, HV *typestash, HV *ourstash)
663 {
664     char *namepv;
665     STRLEN namelen;
666     PERL_ARGS_ASSERT_PAD_ADD_NAME_SV;
667     namepv = SvPVutf8(name, namelen);
668     return pad_add_name_pvn(namepv, namelen, flags, typestash, ourstash);
669 }
670
671 /*
672 =for apidoc Amx|PADOFFSET|pad_alloc|I32 optype|U32 tmptype
673
674 Allocates a place in the currently-compiling pad,
675 returning the offset of the allocated pad slot.
676 No name is initially attached to the pad slot.
677 C<tmptype> is a set of flags indicating the kind of pad entry required,
678 which will be set in the value SV for the allocated pad entry:
679
680     SVs_PADMY    named lexical variable ("my", "our", "state")
681     SVs_PADTMP   unnamed temporary store
682     SVf_READONLY constant shared between recursion levels
683
684 C<SVf_READONLY> has been supported here only since perl 5.20.  To work with
685 earlier versions as well, use C<SVf_READONLY|SVs_PADTMP>.  C<SVf_READONLY>
686 does not cause the SV in the pad slot to be marked read-only, but simply
687 tells C<pad_alloc> that it I<will> be made read-only (by the caller), or at
688 least should be treated as such.
689
690 C<optype> should be an opcode indicating the type of operation that the
691 pad entry is to support.  This doesn't affect operational semantics,
692 but is used for debugging.
693
694 =cut
695 */
696
697 PADOFFSET
698 Perl_pad_alloc(pTHX_ I32 optype, U32 tmptype)
699 {
700     SV *sv;
701     PADOFFSET retval;
702
703     PERL_UNUSED_ARG(optype);
704     ASSERT_CURPAD_ACTIVE("pad_alloc");
705
706     if (AvARRAY(PL_comppad) != PL_curpad)
707         Perl_croak(aTHX_ "panic: pad_alloc, %p!=%p",
708                    AvARRAY(PL_comppad), PL_curpad);
709     if (PL_pad_reset_pending)
710         pad_reset();
711     if (tmptype == SVs_PADMY) { /* Not & because this ‘flag’ is 0.  */
712         /* For a my, simply push a null SV onto the end of PL_comppad. */
713         sv = *av_fetch(PL_comppad, AvFILLp(PL_comppad) + 1, TRUE);
714         retval = (PADOFFSET)AvFILLp(PL_comppad);
715     }
716     else {
717         /* For a tmp, scan the pad from PL_padix upwards
718          * for a slot which has no name and no active value.
719          * For a constant, likewise, but use PL_constpadix.
720          */
721         PADNAME * const * const names = PadnamelistARRAY(PL_comppad_name);
722         const SSize_t names_fill = PadnamelistMAX(PL_comppad_name);
723         const bool konst = cBOOL(tmptype & SVf_READONLY);
724         retval = konst ? PL_constpadix : PL_padix;
725         for (;;) {
726             /*
727              * Entries that close over unavailable variables
728              * in outer subs contain values not marked PADMY.
729              * Thus we must skip, not just pad values that are
730              * marked as current pad values, but also those with names.
731              * If pad_reset is enabled, ‘current’ means different
732              * things depending on whether we are allocating a con-
733              * stant or a target.  For a target, things marked PADTMP
734              * can be reused; not so for constants.
735              */
736             PADNAME *pn;
737             if (++retval <= names_fill &&
738                    (pn = names[retval]) && PadnamePV(pn))
739                 continue;
740             sv = *av_fetch(PL_comppad, retval, TRUE);
741             if (!(SvFLAGS(sv) &
742 #ifdef USE_PAD_RESET
743                     (konst ? SVs_PADTMP : 0)
744 #else
745                     SVs_PADTMP
746 #endif
747                  ))
748                 break;
749         }
750         if (konst) {
751             padnamelist_store(PL_comppad_name, retval, &PL_padname_const);
752             tmptype &= ~SVf_READONLY;
753             tmptype |= SVs_PADTMP;
754         }
755         *(konst ? &PL_constpadix : &PL_padix) = retval;
756     }
757     SvFLAGS(sv) |= tmptype;
758     PL_curpad = AvARRAY(PL_comppad);
759
760     DEBUG_X(PerlIO_printf(Perl_debug_log,
761           "Pad 0x%" UVxf "[0x%" UVxf "] alloc:   %ld for %s\n",
762           PTR2UV(PL_comppad), PTR2UV(PL_curpad), (long) retval,
763           PL_op_name[optype]));
764 #ifdef DEBUG_LEAKING_SCALARS
765     sv->sv_debug_optype = optype;
766     sv->sv_debug_inpad = 1;
767 #endif
768     return retval;
769 }
770
771 /*
772 =for apidoc Am|PADOFFSET|pad_add_anon|CV *func|I32 optype
773
774 Allocates a place in the currently-compiling pad (via L</pad_alloc>)
775 for an anonymous function that is lexically scoped inside the
776 currently-compiling function.
777 The function C<func> is linked into the pad, and its C<CvOUTSIDE> link
778 to the outer scope is weakened to avoid a reference loop.
779
780 One reference count is stolen, so you may need to do C<SvREFCNT_inc(func)>.
781
782 C<optype> should be an opcode indicating the type of operation that the
783 pad entry is to support.  This doesn't affect operational semantics,
784 but is used for debugging.
785
786 =cut
787 */
788
789 PADOFFSET
790 Perl_pad_add_anon(pTHX_ CV* func, I32 optype)
791 {
792     PADOFFSET ix;
793     PADNAME * const name = newPADNAMEpvn("&", 1);
794
795     PERL_ARGS_ASSERT_PAD_ADD_ANON;
796     assert (SvTYPE(func) == SVt_PVCV);
797
798     pad_peg("add_anon");
799     /* These two aren't used; just make sure they're not equal to
800      * PERL_PADSEQ_INTRO.  They should be 0 by default.  */
801     assert(COP_SEQ_RANGE_LOW (name) != PERL_PADSEQ_INTRO);
802     assert(COP_SEQ_RANGE_HIGH(name) != PERL_PADSEQ_INTRO);
803     ix = pad_alloc(optype, SVs_PADMY);
804     padnamelist_store(PL_comppad_name, ix, name);
805     av_store(PL_comppad, ix, (SV*)func);
806
807     /* to avoid ref loops, we never have parent + child referencing each
808      * other simultaneously */
809     if (CvOUTSIDE(func)) {
810         assert(!CvWEAKOUTSIDE(func));
811         CvWEAKOUTSIDE_on(func);
812         SvREFCNT_dec_NN(CvOUTSIDE(func));
813     }
814     return ix;
815 }
816
817 void
818 Perl_pad_add_weakref(pTHX_ CV* func)
819 {
820     const PADOFFSET ix = pad_alloc(OP_NULL, SVs_PADMY);
821     PADNAME * const name = newPADNAMEpvn("&", 1);
822     SV * const rv = newRV_inc((SV *)func);
823
824     PERL_ARGS_ASSERT_PAD_ADD_WEAKREF;
825
826     /* These two aren't used; just make sure they're not equal to
827      * PERL_PADSEQ_INTRO.  They should be 0 by default.  */
828     assert(COP_SEQ_RANGE_LOW (name) != PERL_PADSEQ_INTRO);
829     assert(COP_SEQ_RANGE_HIGH(name) != PERL_PADSEQ_INTRO);
830     padnamelist_store(PL_comppad_name, ix, name);
831     sv_rvweaken(rv);
832     av_store(PL_comppad, ix, rv);
833 }
834
835 /*
836 =for apidoc pad_check_dup
837
838 Check for duplicate declarations: report any of:
839
840      * a 'my' in the current scope with the same name;
841      * an 'our' (anywhere in the pad) with the same name and the
842        same stash as 'ourstash'
843
844 C<is_our> indicates that the name to check is an C<"our"> declaration.
845
846 =cut
847 */
848
849 STATIC void
850 S_pad_check_dup(pTHX_ PADNAME *name, U32 flags, const HV *ourstash)
851 {
852     PADNAME     **svp;
853     PADOFFSET   top, off;
854     const U32   is_our = flags & padadd_OUR;
855
856     PERL_ARGS_ASSERT_PAD_CHECK_DUP;
857
858     ASSERT_CURPAD_ACTIVE("pad_check_dup");
859
860     assert((flags & ~padadd_OUR) == 0);
861
862     if (PadnamelistMAX(PL_comppad_name) < 0 || !ckWARN(WARN_SHADOW))
863         return; /* nothing to check */
864
865     svp = PadnamelistARRAY(PL_comppad_name);
866     top = PadnamelistMAX(PL_comppad_name);
867     /* check the current scope */
868     for (off = top; off > PL_comppad_name_floor; off--) {
869         PADNAME * const sv = svp[off];
870         if (sv
871             && PadnameLEN(sv) == PadnameLEN(name)
872             && !PadnameOUTER(sv)
873             && (   COP_SEQ_RANGE_LOW(sv)  == PERL_PADSEQ_INTRO
874                 || COP_SEQ_RANGE_HIGH(sv) == PERL_PADSEQ_INTRO)
875             && memEQ(PadnamePV(sv), PadnamePV(name), PadnameLEN(name)))
876         {
877             if (is_our && (SvPAD_OUR(sv)))
878                 break; /* "our" masking "our" */
879             /* diag_listed_as: "%s" variable %s masks earlier declaration in same %s */
880             Perl_warner(aTHX_ packWARN(WARN_SHADOW),
881                 "\"%s\" %s %" PNf " masks earlier declaration in same %s",
882                 (   is_our                         ? "our"   :
883                     PL_parser->in_my == KEY_my     ? "my"    :
884                     PL_parser->in_my == KEY_sigvar ? "my"    :
885                                                      "state" ),
886                 *PadnamePV(sv) == '&' ? "subroutine" : "variable",
887                 PNfARG(sv),
888                 (COP_SEQ_RANGE_HIGH(sv) == PERL_PADSEQ_INTRO
889                     ? "scope" : "statement"));
890             --off;
891             break;
892         }
893     }
894     /* check the rest of the pad */
895     if (is_our) {
896         while (off > 0) {
897             PADNAME * const sv = svp[off];
898             if (sv
899                 && PadnameLEN(sv) == PadnameLEN(name)
900                 && !PadnameOUTER(sv)
901                 && (   COP_SEQ_RANGE_LOW(sv)  == PERL_PADSEQ_INTRO
902                     || COP_SEQ_RANGE_HIGH(sv) == PERL_PADSEQ_INTRO)
903                 && SvOURSTASH(sv) == ourstash
904                 && memEQ(PadnamePV(sv), PadnamePV(name), PadnameLEN(name)))
905             {
906                 Perl_warner(aTHX_ packWARN(WARN_SHADOW),
907                     "\"our\" variable %" PNf " redeclared", PNfARG(sv));
908                 if (off <= PL_comppad_name_floor)
909                     Perl_warner(aTHX_ packWARN(WARN_SHADOW),
910                         "\t(Did you mean \"local\" instead of \"our\"?)\n");
911                 break;
912             }
913             --off;
914         }
915     }
916 }
917
918
919 /*
920 =for apidoc Am|PADOFFSET|pad_findmy_pvn|const char *namepv|STRLEN namelen|U32 flags
921
922 Given the name of a lexical variable, find its position in the
923 currently-compiling pad.
924 C<namepv>/C<namelen> specify the variable's name, including leading sigil.
925 C<flags> is reserved and must be zero.
926 If it is not in the current pad but appears in the pad of any lexically
927 enclosing scope, then a pseudo-entry for it is added in the current pad.
928 Returns the offset in the current pad,
929 or C<NOT_IN_PAD> if no such lexical is in scope.
930
931 =cut
932 */
933
934 PADOFFSET
935 Perl_pad_findmy_pvn(pTHX_ const char *namepv, STRLEN namelen, U32 flags)
936 {
937     PADNAME *out_pn;
938     int out_flags;
939     PADOFFSET offset;
940     const PADNAMELIST *namelist;
941     PADNAME **name_p;
942
943     PERL_ARGS_ASSERT_PAD_FINDMY_PVN;
944
945     pad_peg("pad_findmy_pvn");
946
947     if (flags)
948         Perl_croak(aTHX_ "panic: pad_findmy_pvn illegal flag bits 0x%" UVxf,
949                    (UV)flags);
950
951     /* compilation errors can zero PL_compcv */
952     if (!PL_compcv)
953         return NOT_IN_PAD;
954
955     offset = pad_findlex(namepv, namelen, flags,
956                 PL_compcv, PL_cop_seqmax, 1, NULL, &out_pn, &out_flags);
957     if (offset != NOT_IN_PAD)
958         return offset;
959
960     /* Skip the ‘our’ hack for subroutines, as the warning does not apply.
961      */
962     if (*namepv == '&') return NOT_IN_PAD;
963
964     /* look for an our that's being introduced; this allows
965      *    our $foo = 0 unless defined $foo;
966      * to not give a warning. (Yes, this is a hack) */
967
968     namelist = PadlistNAMES(CvPADLIST(PL_compcv));
969     name_p = PadnamelistARRAY(namelist);
970     for (offset = PadnamelistMAXNAMED(namelist); offset > 0; offset--) {
971         const PADNAME * const name = name_p[offset];
972         if (name && PadnameLEN(name) == namelen
973             && !PadnameOUTER(name)
974             && (PadnameIsOUR(name))
975             && (  PadnamePV(name) == namepv
976                || memEQ(PadnamePV(name), namepv, namelen)  )
977             && COP_SEQ_RANGE_LOW(name) == PERL_PADSEQ_INTRO
978         )
979             return offset;
980     }
981     return NOT_IN_PAD;
982 }
983
984 /*
985 =for apidoc Am|PADOFFSET|pad_findmy_pv|const char *name|U32 flags
986
987 Exactly like L</pad_findmy_pvn>, but takes a nul-terminated string
988 instead of a string/length pair.
989
990 =cut
991 */
992
993 PADOFFSET
994 Perl_pad_findmy_pv(pTHX_ const char *name, U32 flags)
995 {
996     PERL_ARGS_ASSERT_PAD_FINDMY_PV;
997     return pad_findmy_pvn(name, strlen(name), flags);
998 }
999
1000 /*
1001 =for apidoc Am|PADOFFSET|pad_findmy_sv|SV *name|U32 flags
1002
1003 Exactly like L</pad_findmy_pvn>, but takes the name string in the form
1004 of an SV instead of a string/length pair.
1005
1006 =cut
1007 */
1008
1009 PADOFFSET
1010 Perl_pad_findmy_sv(pTHX_ SV *name, U32 flags)
1011 {
1012     char *namepv;
1013     STRLEN namelen;
1014     PERL_ARGS_ASSERT_PAD_FINDMY_SV;
1015     namepv = SvPVutf8(name, namelen);
1016     return pad_findmy_pvn(namepv, namelen, flags);
1017 }
1018
1019 /*
1020 =for apidoc Amp|PADOFFSET|find_rundefsvoffset
1021
1022 Until the lexical C<$_> feature was removed, this function would
1023 find the position of the lexical C<$_> in the pad of the
1024 currently-executing function and return the offset in the current pad,
1025 or C<NOT_IN_PAD>.
1026
1027 Now it always returns C<NOT_IN_PAD>.
1028
1029 =cut
1030 */
1031
1032 PADOFFSET
1033 Perl_find_rundefsvoffset(pTHX)
1034 {
1035     PERL_UNUSED_CONTEXT; /* Can we just remove the pTHX from the sig? */
1036     return NOT_IN_PAD;
1037 }
1038
1039 /*
1040 =for apidoc Am|SV *|find_rundefsv
1041
1042 Returns the global variable C<$_>.
1043
1044 =cut
1045 */
1046
1047 SV *
1048 Perl_find_rundefsv(pTHX)
1049 {
1050     return DEFSV;
1051 }
1052
1053 /*
1054 =for apidoc m|PADOFFSET|pad_findlex|const char *namepv|STRLEN namelen|U32 flags|const CV* cv|U32 seq|int warn|SV** out_capture|PADNAME** out_name|int *out_flags
1055
1056 Find a named lexical anywhere in a chain of nested pads.  Add fake entries
1057 in the inner pads if it's found in an outer one.
1058
1059 Returns the offset in the bottom pad of the lex or the fake lex.
1060 C<cv> is the CV in which to start the search, and seq is the current C<cop_seq>
1061 to match against.  If C<warn> is true, print appropriate warnings.  The C<out_>*
1062 vars return values, and so are pointers to where the returned values
1063 should be stored.  C<out_capture>, if non-null, requests that the innermost
1064 instance of the lexical is captured; C<out_name> is set to the innermost
1065 matched pad name or fake pad name; C<out_flags> returns the flags normally
1066 associated with the C<PARENT_FAKELEX_FLAGS> field of a fake pad name.
1067
1068 Note that C<pad_findlex()> is recursive; it recurses up the chain of CVs,
1069 then comes back down, adding fake entries
1070 as it goes.  It has to be this way
1071 because fake names in anon protoypes have to store in C<xpadn_low> the
1072 index into the parent pad.
1073
1074 =cut
1075 */
1076
1077 /* the CV has finished being compiled. This is not a sufficient test for
1078  * all CVs (eg XSUBs), but suffices for the CVs found in a lexical chain */
1079 #define CvCOMPILED(cv)  CvROOT(cv)
1080
1081 /* the CV does late binding of its lexicals */
1082 #define CvLATE(cv) (CvANON(cv) || CvCLONE(cv) || SvTYPE(cv) == SVt_PVFM)
1083
1084 static void
1085 S_unavailable(pTHX_ PADNAME *name)
1086 {
1087     /* diag_listed_as: Variable "%s" is not available */
1088     Perl_ck_warner(aTHX_ packWARN(WARN_CLOSURE),
1089                         "%se \"%" PNf "\" is not available",
1090                          *PadnamePV(name) == '&'
1091                                          ? "Subroutin"
1092                                          : "Variabl",
1093                          PNfARG(name));
1094 }
1095
1096 STATIC PADOFFSET
1097 S_pad_findlex(pTHX_ const char *namepv, STRLEN namelen, U32 flags, const CV* cv, U32 seq,
1098         int warn, SV** out_capture, PADNAME** out_name, int *out_flags)
1099 {
1100     PADOFFSET offset, new_offset;
1101     SV *new_capture;
1102     SV **new_capturep;
1103     const PADLIST * const padlist = CvPADLIST(cv);
1104     const bool staleok = !!(flags & padadd_STALEOK);
1105
1106     PERL_ARGS_ASSERT_PAD_FINDLEX;
1107
1108     flags &= ~ padadd_STALEOK; /* one-shot flag */
1109     if (flags)
1110         Perl_croak(aTHX_ "panic: pad_findlex illegal flag bits 0x%" UVxf,
1111                    (UV)flags);
1112
1113     *out_flags = 0;
1114
1115     DEBUG_Xv(PerlIO_printf(Perl_debug_log,
1116         "Pad findlex cv=0x%" UVxf " searching \"%.*s\" seq=%d%s\n",
1117                            PTR2UV(cv), (int)namelen, namepv, (int)seq,
1118         out_capture ? " capturing" : "" ));
1119
1120     /* first, search this pad */
1121
1122     if (padlist) { /* not an undef CV */
1123         PADOFFSET fake_offset = 0;
1124         const PADNAMELIST * const names = PadlistNAMES(padlist);
1125         PADNAME * const * const name_p = PadnamelistARRAY(names);
1126
1127         for (offset = PadnamelistMAXNAMED(names); offset > 0; offset--) {
1128             const PADNAME * const name = name_p[offset];
1129             if (name && PadnameLEN(name) == namelen
1130                      && (  PadnamePV(name) == namepv
1131                         || memEQ(PadnamePV(name), namepv, namelen)  ))
1132             {
1133                 if (PadnameOUTER(name)) {
1134                     fake_offset = offset; /* in case we don't find a real one */
1135                     continue;
1136                 }
1137                 if (PadnameIN_SCOPE(name, seq))
1138                     break;
1139             }
1140         }
1141
1142         if (offset > 0 || fake_offset > 0 ) { /* a match! */
1143             if (offset > 0) { /* not fake */
1144                 fake_offset = 0;
1145                 *out_name = name_p[offset]; /* return the name */
1146
1147                 /* set PAD_FAKELEX_MULTI if this lex can have multiple
1148                  * instances. For now, we just test !CvUNIQUE(cv), but
1149                  * ideally, we should detect my's declared within loops
1150                  * etc - this would allow a wider range of 'not stayed
1151                  * shared' warnings. We also treated already-compiled
1152                  * lexes as not multi as viewed from evals. */
1153
1154                 *out_flags = CvANON(cv) ?
1155                         PAD_FAKELEX_ANON :
1156                             (!CvUNIQUE(cv) && ! CvCOMPILED(cv))
1157                                 ? PAD_FAKELEX_MULTI : 0;
1158
1159                 DEBUG_Xv(PerlIO_printf(Perl_debug_log,
1160                     "Pad findlex cv=0x%" UVxf " matched: offset=%ld (%lu,%lu)\n",
1161                     PTR2UV(cv), (long)offset,
1162                     (unsigned long)COP_SEQ_RANGE_LOW(*out_name),
1163                     (unsigned long)COP_SEQ_RANGE_HIGH(*out_name)));
1164             }
1165             else { /* fake match */
1166                 offset = fake_offset;
1167                 *out_name = name_p[offset]; /* return the name */
1168                 *out_flags = PARENT_FAKELEX_FLAGS(*out_name);
1169                 DEBUG_Xv(PerlIO_printf(Perl_debug_log,
1170                     "Pad findlex cv=0x%" UVxf " matched: offset=%ld flags=0x%lx index=%lu\n",
1171                     PTR2UV(cv), (long)offset, (unsigned long)*out_flags,
1172                     (unsigned long) PARENT_PAD_INDEX(*out_name) 
1173                 ));
1174             }
1175
1176             /* return the lex? */
1177
1178             if (out_capture) {
1179
1180                 /* our ? */
1181                 if (PadnameIsOUR(*out_name)) {
1182                     *out_capture = NULL;
1183                     return offset;
1184                 }
1185
1186                 /* trying to capture from an anon prototype? */
1187                 if (CvCOMPILED(cv)
1188                         ? CvANON(cv) && CvCLONE(cv) && !CvCLONED(cv)
1189                         : *out_flags & PAD_FAKELEX_ANON)
1190                 {
1191                     if (warn)
1192                         S_unavailable(aTHX_
1193                                       *out_name);
1194
1195                     *out_capture = NULL;
1196                 }
1197
1198                 /* real value */
1199                 else {
1200                     int newwarn = warn;
1201                     if (!CvCOMPILED(cv) && (*out_flags & PAD_FAKELEX_MULTI)
1202                          && !PadnameIsSTATE(name_p[offset])
1203                          && warn && ckWARN(WARN_CLOSURE)) {
1204                         newwarn = 0;
1205                         /* diag_listed_as: Variable "%s" will not stay
1206                                            shared */
1207                         Perl_warner(aTHX_ packWARN(WARN_CLOSURE),
1208                             "%se \"%" UTF8f "\" will not stay shared",
1209                              *namepv == '&' ? "Subroutin" : "Variabl",
1210                              UTF8fARG(1, namelen, namepv));
1211                     }
1212
1213                     if (fake_offset && CvANON(cv)
1214                             && CvCLONE(cv) &&!CvCLONED(cv))
1215                     {
1216                         PADNAME *n;
1217                         /* not yet caught - look further up */
1218                         DEBUG_Xv(PerlIO_printf(Perl_debug_log,
1219                             "Pad findlex cv=0x%" UVxf " chasing lex in outer pad\n",
1220                             PTR2UV(cv)));
1221                         n = *out_name;
1222                         (void) pad_findlex(namepv, namelen, flags, CvOUTSIDE(cv),
1223                             CvOUTSIDE_SEQ(cv),
1224                             newwarn, out_capture, out_name, out_flags);
1225                         *out_name = n;
1226                         return offset;
1227                     }
1228
1229                     *out_capture = AvARRAY(PadlistARRAY(padlist)[
1230                                     CvDEPTH(cv) ? CvDEPTH(cv) : 1])[offset];
1231                     DEBUG_Xv(PerlIO_printf(Perl_debug_log,
1232                         "Pad findlex cv=0x%" UVxf " found lex=0x%" UVxf "\n",
1233                         PTR2UV(cv), PTR2UV(*out_capture)));
1234
1235                     if (SvPADSTALE(*out_capture)
1236                         && (!CvDEPTH(cv) || !staleok)
1237                         && !PadnameIsSTATE(name_p[offset]))
1238                     {
1239                         S_unavailable(aTHX_
1240                                       name_p[offset]);
1241                         *out_capture = NULL;
1242                     }
1243                 }
1244                 if (!*out_capture) {
1245                     if (namelen != 0 && *namepv == '@')
1246                         *out_capture = sv_2mortal(MUTABLE_SV(newAV()));
1247                     else if (namelen != 0 && *namepv == '%')
1248                         *out_capture = sv_2mortal(MUTABLE_SV(newHV()));
1249                     else if (namelen != 0 && *namepv == '&')
1250                         *out_capture = sv_2mortal(newSV_type(SVt_PVCV));
1251                     else
1252                         *out_capture = sv_newmortal();
1253                 }
1254             }
1255
1256             return offset;
1257         }
1258     }
1259
1260     /* it's not in this pad - try above */
1261
1262     if (!CvOUTSIDE(cv))
1263         return NOT_IN_PAD;
1264
1265     /* out_capture non-null means caller wants us to capture lex; in
1266      * addition we capture ourselves unless it's an ANON/format */
1267     new_capturep = out_capture ? out_capture :
1268                 CvLATE(cv) ? NULL : &new_capture;
1269
1270     offset = pad_findlex(namepv, namelen,
1271                 flags | padadd_STALEOK*(new_capturep == &new_capture),
1272                 CvOUTSIDE(cv), CvOUTSIDE_SEQ(cv), 1,
1273                 new_capturep, out_name, out_flags);
1274     if (offset == NOT_IN_PAD)
1275         return NOT_IN_PAD;
1276
1277     /* found in an outer CV. Add appropriate fake entry to this pad */
1278
1279     /* don't add new fake entries (via eval) to CVs that we have already
1280      * finished compiling, or to undef CVs */
1281     if (CvCOMPILED(cv) || !padlist)
1282         return 0; /* this dummy (and invalid) value isnt used by the caller */
1283
1284     {
1285         PADNAME *new_name = newPADNAMEouter(*out_name);
1286         PADNAMELIST * const ocomppad_name = PL_comppad_name;
1287         PAD * const ocomppad = PL_comppad;
1288         PL_comppad_name = PadlistNAMES(padlist);
1289         PL_comppad = PadlistARRAY(padlist)[1];
1290         PL_curpad = AvARRAY(PL_comppad);
1291
1292         new_offset
1293             = pad_alloc_name(new_name,
1294                               PadnameIsSTATE(*out_name) ? padadd_STATE : 0,
1295                               PadnameTYPE(*out_name),
1296                               PadnameOURSTASH(*out_name)
1297                               );
1298
1299         DEBUG_Xv(PerlIO_printf(Perl_debug_log,
1300                                "Pad addname: %ld \"%.*s\" FAKE\n",
1301                                (long)new_offset,
1302                                (int) PadnameLEN(new_name),
1303                                PadnamePV(new_name)));
1304         PARENT_FAKELEX_FLAGS_set(new_name, *out_flags);
1305
1306         PARENT_PAD_INDEX_set(new_name, 0);
1307         if (PadnameIsOUR(new_name)) {
1308             NOOP;   /* do nothing */
1309         }
1310         else if (CvLATE(cv)) {
1311             /* delayed creation - just note the offset within parent pad */
1312             PARENT_PAD_INDEX_set(new_name, offset);
1313             CvCLONE_on(cv);
1314         }
1315         else {
1316             /* immediate creation - capture outer value right now */
1317             av_store(PL_comppad, new_offset, SvREFCNT_inc(*new_capturep));
1318             /* But also note the offset, as newMYSUB needs it */
1319             PARENT_PAD_INDEX_set(new_name, offset);
1320             DEBUG_Xv(PerlIO_printf(Perl_debug_log,
1321                 "Pad findlex cv=0x%" UVxf " saved captured sv 0x%" UVxf " at offset %ld\n",
1322                 PTR2UV(cv), PTR2UV(*new_capturep), (long)new_offset));
1323         }
1324         *out_name = new_name;
1325         *out_flags = PARENT_FAKELEX_FLAGS(new_name);
1326
1327         PL_comppad_name = ocomppad_name;
1328         PL_comppad = ocomppad;
1329         PL_curpad = ocomppad ? AvARRAY(ocomppad) : NULL;
1330     }
1331     return new_offset;
1332 }
1333
1334 #ifdef DEBUGGING
1335
1336 /*
1337 =for apidoc Am|SV *|pad_sv|PADOFFSET po
1338
1339 Get the value at offset C<po> in the current (compiling or executing) pad.
1340 Use macro C<PAD_SV> instead of calling this function directly.
1341
1342 =cut
1343 */
1344
1345 SV *
1346 Perl_pad_sv(pTHX_ PADOFFSET po)
1347 {
1348     ASSERT_CURPAD_ACTIVE("pad_sv");
1349
1350     if (!po)
1351         Perl_croak(aTHX_ "panic: pad_sv po");
1352     DEBUG_X(PerlIO_printf(Perl_debug_log,
1353         "Pad 0x%" UVxf "[0x%" UVxf "] sv:      %ld sv=0x%" UVxf "\n",
1354         PTR2UV(PL_comppad), PTR2UV(PL_curpad), (long)po, PTR2UV(PL_curpad[po]))
1355     );
1356     return PL_curpad[po];
1357 }
1358
1359 /*
1360 =for apidoc Am|void|pad_setsv|PADOFFSET po|SV *sv
1361
1362 Set the value at offset C<po> in the current (compiling or executing) pad.
1363 Use the macro C<PAD_SETSV()> rather than calling this function directly.
1364
1365 =cut
1366 */
1367
1368 void
1369 Perl_pad_setsv(pTHX_ PADOFFSET po, SV* sv)
1370 {
1371     PERL_ARGS_ASSERT_PAD_SETSV;
1372
1373     ASSERT_CURPAD_ACTIVE("pad_setsv");
1374
1375     DEBUG_X(PerlIO_printf(Perl_debug_log,
1376         "Pad 0x%" UVxf "[0x%" UVxf "] setsv:   %ld sv=0x%" UVxf "\n",
1377         PTR2UV(PL_comppad), PTR2UV(PL_curpad), (long)po, PTR2UV(sv))
1378     );
1379     PL_curpad[po] = sv;
1380 }
1381
1382 #endif /* DEBUGGING */
1383
1384 /*
1385 =for apidoc m|void|pad_block_start|int full
1386
1387 Update the pad compilation state variables on entry to a new block.
1388
1389 =cut
1390 */
1391
1392 void
1393 Perl_pad_block_start(pTHX_ int full)
1394 {
1395     ASSERT_CURPAD_ACTIVE("pad_block_start");
1396     save_strlen((STRLEN *)&PL_comppad_name_floor);
1397     PL_comppad_name_floor = PadnamelistMAX(PL_comppad_name);
1398     if (full)
1399         PL_comppad_name_fill = PL_comppad_name_floor;
1400     if (PL_comppad_name_floor < 0)
1401         PL_comppad_name_floor = 0;
1402     save_strlen((STRLEN *)&PL_min_intro_pending);
1403     save_strlen((STRLEN *)&PL_max_intro_pending);
1404     PL_min_intro_pending = 0;
1405     save_strlen((STRLEN *)&PL_comppad_name_fill);
1406     save_strlen((STRLEN *)&PL_padix_floor);
1407     /* PL_padix_floor is what PL_padix is reset to at the start of each
1408        statement, by pad_reset().  We set it when entering a new scope
1409        to keep things like this working:
1410             print "$foo$bar", do { this(); that() . "foo" };
1411        We must not let "$foo$bar" and the later concatenation share the
1412        same target.  */
1413     PL_padix_floor = PL_padix;
1414     PL_pad_reset_pending = FALSE;
1415 }
1416
1417 /*
1418 =for apidoc Am|U32|intro_my
1419
1420 "Introduce" C<my> variables to visible status.  This is called during parsing
1421 at the end of each statement to make lexical variables visible to subsequent
1422 statements.
1423
1424 =cut
1425 */
1426
1427 U32
1428 Perl_intro_my(pTHX)
1429 {
1430     PADNAME **svp;
1431     PADOFFSET i;
1432     U32 seq;
1433
1434     ASSERT_CURPAD_ACTIVE("intro_my");
1435     if (PL_compiling.cop_seq) {
1436         seq = PL_compiling.cop_seq;
1437         PL_compiling.cop_seq = 0;
1438     }
1439     else
1440         seq = PL_cop_seqmax;
1441     if (! PL_min_intro_pending)
1442         return seq;
1443
1444     svp = PadnamelistARRAY(PL_comppad_name);
1445     for (i = PL_min_intro_pending; i <= PL_max_intro_pending; i++) {
1446         PADNAME * const sv = svp[i];
1447
1448         if (sv && PadnameLEN(sv) && !PadnameOUTER(sv)
1449             && COP_SEQ_RANGE_LOW(sv) == PERL_PADSEQ_INTRO)
1450         {
1451             COP_SEQ_RANGE_HIGH_set(sv, PERL_PADSEQ_INTRO); /* Don't know scope end yet. */
1452             COP_SEQ_RANGE_LOW_set(sv, PL_cop_seqmax);
1453             DEBUG_Xv(PerlIO_printf(Perl_debug_log,
1454                 "Pad intromy: %ld \"%s\", (%lu,%lu)\n",
1455                 (long)i, PadnamePV(sv),
1456                 (unsigned long)COP_SEQ_RANGE_LOW(sv),
1457                 (unsigned long)COP_SEQ_RANGE_HIGH(sv))
1458             );
1459         }
1460     }
1461     COP_SEQMAX_INC;
1462     PL_min_intro_pending = 0;
1463     PL_comppad_name_fill = PL_max_intro_pending; /* Needn't search higher */
1464     DEBUG_Xv(PerlIO_printf(Perl_debug_log,
1465                 "Pad intromy: seq -> %ld\n", (long)(PL_cop_seqmax)));
1466
1467     return seq;
1468 }
1469
1470 /*
1471 =for apidoc m|void|pad_leavemy
1472
1473 Cleanup at end of scope during compilation: set the max seq number for
1474 lexicals in this scope and warn of any lexicals that never got introduced.
1475
1476 =cut
1477 */
1478
1479 OP *
1480 Perl_pad_leavemy(pTHX)
1481 {
1482     PADOFFSET off;
1483     OP *o = NULL;
1484     PADNAME * const * const svp = PadnamelistARRAY(PL_comppad_name);
1485
1486     PL_pad_reset_pending = FALSE;
1487
1488     ASSERT_CURPAD_ACTIVE("pad_leavemy");
1489     if (PL_min_intro_pending && PL_comppad_name_fill < PL_min_intro_pending) {
1490         for (off = PL_max_intro_pending; off >= PL_min_intro_pending; off--) {
1491             const PADNAME * const name = svp[off];
1492             if (name && PadnameLEN(name) && !PadnameOUTER(name))
1493                 Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL),
1494                                       "%" PNf " never introduced",
1495                                        PNfARG(name));
1496         }
1497     }
1498     /* "Deintroduce" my variables that are leaving with this scope. */
1499     for (off = PadnamelistMAX(PL_comppad_name);
1500          off > PL_comppad_name_fill; off--) {
1501         PADNAME * const sv = svp[off];
1502         if (sv && PadnameLEN(sv) && !PadnameOUTER(sv)
1503             && COP_SEQ_RANGE_HIGH(sv) == PERL_PADSEQ_INTRO)
1504         {
1505             COP_SEQ_RANGE_HIGH_set(sv, PL_cop_seqmax);
1506             DEBUG_Xv(PerlIO_printf(Perl_debug_log,
1507                 "Pad leavemy: %ld \"%s\", (%lu,%lu)\n",
1508                 (long)off, PadnamePV(sv),
1509                 (unsigned long)COP_SEQ_RANGE_LOW(sv),
1510                 (unsigned long)COP_SEQ_RANGE_HIGH(sv))
1511             );
1512             if (!PadnameIsSTATE(sv) && !PadnameIsOUR(sv)
1513              && *PadnamePV(sv) == '&' && PadnameLEN(sv) > 1) {
1514                 OP *kid = newOP(OP_INTROCV, 0);
1515                 kid->op_targ = off;
1516                 o = op_prepend_elem(OP_LINESEQ, kid, o);
1517             }
1518         }
1519     }
1520     COP_SEQMAX_INC;
1521     DEBUG_Xv(PerlIO_printf(Perl_debug_log,
1522             "Pad leavemy: seq = %ld\n", (long)PL_cop_seqmax));
1523     return o;
1524 }
1525
1526 /*
1527 =for apidoc m|void|pad_swipe|PADOFFSET po|bool refadjust
1528
1529 Abandon the tmp in the current pad at offset C<po> and replace with a
1530 new one.
1531
1532 =cut
1533 */
1534
1535 void
1536 Perl_pad_swipe(pTHX_ PADOFFSET po, bool refadjust)
1537 {
1538     ASSERT_CURPAD_LEGAL("pad_swipe");
1539     if (!PL_curpad)
1540         return;
1541     if (AvARRAY(PL_comppad) != PL_curpad)
1542         Perl_croak(aTHX_ "panic: pad_swipe curpad, %p!=%p",
1543                    AvARRAY(PL_comppad), PL_curpad);
1544     if (!po || ((SSize_t)po) > AvFILLp(PL_comppad))
1545         Perl_croak(aTHX_ "panic: pad_swipe po=%ld, fill=%ld",
1546                    (long)po, (long)AvFILLp(PL_comppad));
1547
1548     DEBUG_X(PerlIO_printf(Perl_debug_log,
1549                 "Pad 0x%" UVxf "[0x%" UVxf "] swipe:   %ld\n",
1550                 PTR2UV(PL_comppad), PTR2UV(PL_curpad), (long)po));
1551
1552     if (refadjust)
1553         SvREFCNT_dec(PL_curpad[po]);
1554
1555
1556     /* if pad tmps aren't shared between ops, then there's no need to
1557      * create a new tmp when an existing op is freed */
1558 #ifdef USE_PAD_RESET
1559     PL_curpad[po] = newSV(0);
1560     SvPADTMP_on(PL_curpad[po]);
1561 #else
1562     PL_curpad[po] = NULL;
1563 #endif
1564     if (PadnamelistMAX(PL_comppad_name) != -1
1565      && (PADOFFSET)PadnamelistMAX(PL_comppad_name) >= po) {
1566         if (PadnamelistARRAY(PL_comppad_name)[po]) {
1567             assert(!PadnameLEN(PadnamelistARRAY(PL_comppad_name)[po]));
1568         }
1569         PadnamelistARRAY(PL_comppad_name)[po] = &PL_padname_undef;
1570     }
1571     /* Use PL_constpadix here, not PL_padix.  The latter may have been
1572        reset by pad_reset.  We don’t want pad_alloc to have to scan the
1573        whole pad when allocating a constant. */
1574     if (po < PL_constpadix)
1575         PL_constpadix = po - 1;
1576 }
1577
1578 /*
1579 =for apidoc m|void|pad_reset
1580
1581 Mark all the current temporaries for reuse
1582
1583 =cut
1584 */
1585
1586 /* pad_reset() causes pad temp TARGs (operator targets) to be shared
1587  * between OPs from different statements.  During compilation, at the start
1588  * of each statement pad_reset resets PL_padix back to its previous value.
1589  * When allocating a target, pad_alloc begins its scan through the pad at
1590  * PL_padix+1.  */
1591 static void
1592 S_pad_reset(pTHX)
1593 {
1594 #ifdef USE_PAD_RESET
1595     if (AvARRAY(PL_comppad) != PL_curpad)
1596         Perl_croak(aTHX_ "panic: pad_reset curpad, %p!=%p",
1597                    AvARRAY(PL_comppad), PL_curpad);
1598
1599     DEBUG_X(PerlIO_printf(Perl_debug_log,
1600             "Pad 0x%" UVxf "[0x%" UVxf "] reset:     padix %ld -> %ld",
1601             PTR2UV(PL_comppad), PTR2UV(PL_curpad),
1602                 (long)PL_padix, (long)PL_padix_floor
1603             )
1604     );
1605
1606     if (!TAINTING_get) {        /* Can't mix tainted and non-tainted temporaries. */
1607         PL_padix = PL_padix_floor;
1608     }
1609 #endif
1610     PL_pad_reset_pending = FALSE;
1611 }
1612
1613 /*
1614 =for apidoc Amx|void|pad_tidy|padtidy_type type
1615
1616 Tidy up a pad at the end of compilation of the code to which it belongs.
1617 Jobs performed here are: remove most stuff from the pads of anonsub
1618 prototypes; give it a C<@_>; mark temporaries as such.  C<type> indicates
1619 the kind of subroutine:
1620
1621     padtidy_SUB        ordinary subroutine
1622     padtidy_SUBCLONE   prototype for lexical closure
1623     padtidy_FORMAT     format
1624
1625 =cut
1626 */
1627
1628 void
1629 Perl_pad_tidy(pTHX_ padtidy_type type)
1630 {
1631     dVAR;
1632
1633     ASSERT_CURPAD_ACTIVE("pad_tidy");
1634
1635     /* If this CV has had any 'eval-capable' ops planted in it:
1636      * i.e. it contains any of:
1637      *
1638      *     * eval '...',
1639      *     * //ee,
1640      *     * use re 'eval'; /$var/
1641      *     * /(?{..})/),
1642      *
1643      * Then any anon prototypes in the chain of CVs should be marked as
1644      * cloneable, so that for example the eval's CV in
1645      *
1646      *    sub { eval '$x' }
1647      *
1648      * gets the right CvOUTSIDE.  If running with -d, *any* sub may
1649      * potentially have an eval executed within it.
1650      */
1651
1652     if (PL_cv_has_eval || PL_perldb) {
1653         const CV *cv;
1654         for (cv = PL_compcv ;cv; cv = CvOUTSIDE(cv)) {
1655             if (cv != PL_compcv && CvCOMPILED(cv))
1656                 break; /* no need to mark already-compiled code */
1657             if (CvANON(cv)) {
1658                 DEBUG_Xv(PerlIO_printf(Perl_debug_log,
1659                     "Pad clone on cv=0x%" UVxf "\n", PTR2UV(cv)));
1660                 CvCLONE_on(cv);
1661             }
1662             CvHASEVAL_on(cv);
1663         }
1664     }
1665
1666     /* extend namepad to match curpad */
1667     if (PadnamelistMAX(PL_comppad_name) < AvFILLp(PL_comppad))
1668         padnamelist_store(PL_comppad_name, AvFILLp(PL_comppad), NULL);
1669
1670     if (type == padtidy_SUBCLONE) {
1671         PADNAME ** const namep = PadnamelistARRAY(PL_comppad_name);
1672         PADOFFSET ix;
1673
1674         for (ix = AvFILLp(PL_comppad); ix > 0; ix--) {
1675             PADNAME *namesv;
1676             if (!namep[ix]) namep[ix] = &PL_padname_undef;
1677
1678             /*
1679              * The only things that a clonable function needs in its
1680              * pad are anonymous subs, constants and GVs.
1681              * The rest are created anew during cloning.
1682              */
1683             if (!PL_curpad[ix] || SvIMMORTAL(PL_curpad[ix]))
1684                 continue;
1685             namesv = namep[ix];
1686             if (!(PadnamePV(namesv) &&
1687                    (!PadnameLEN(namesv) || *PadnamePV(namesv) == '&')))
1688             {
1689                 SvREFCNT_dec(PL_curpad[ix]);
1690                 PL_curpad[ix] = NULL;
1691             }
1692         }
1693     }
1694     else if (type == padtidy_SUB) {
1695         AV * const av = newAV();                        /* Will be @_ */
1696         av_store(PL_comppad, 0, MUTABLE_SV(av));
1697         AvREIFY_only(av);
1698     }
1699
1700     if (type == padtidy_SUB || type == padtidy_FORMAT) {
1701         PADNAME ** const namep = PadnamelistARRAY(PL_comppad_name);
1702         PADOFFSET ix;
1703         for (ix = AvFILLp(PL_comppad); ix > 0; ix--) {
1704             if (!namep[ix]) namep[ix] = &PL_padname_undef;
1705             if (!PL_curpad[ix] || SvIMMORTAL(PL_curpad[ix]))
1706                 continue;
1707             if (SvPADMY(PL_curpad[ix]) && !PadnameOUTER(namep[ix])) {
1708                 /* This is a work around for how the current implementation of
1709                    ?{ } blocks in regexps interacts with lexicals.
1710
1711                    One of our lexicals.
1712                    Can't do this on all lexicals, otherwise sub baz() won't
1713                    compile in
1714
1715                    my $foo;
1716
1717                    sub bar { ++$foo; }
1718
1719                    sub baz { ++$foo; }
1720
1721                    because completion of compiling &bar calling pad_tidy()
1722                    would cause (top level) $foo to be marked as stale, and
1723                    "no longer available".  */
1724                 SvPADSTALE_on(PL_curpad[ix]);
1725             }
1726         }
1727     }
1728     PL_curpad = AvARRAY(PL_comppad);
1729 }
1730
1731 /*
1732 =for apidoc m|void|pad_free|PADOFFSET po
1733
1734 Free the SV at offset po in the current pad.
1735
1736 =cut
1737 */
1738
1739 void
1740 Perl_pad_free(pTHX_ PADOFFSET po)
1741 {
1742 #ifndef USE_PAD_RESET
1743     SV *sv;
1744 #endif
1745     ASSERT_CURPAD_LEGAL("pad_free");
1746     if (!PL_curpad)
1747         return;
1748     if (AvARRAY(PL_comppad) != PL_curpad)
1749         Perl_croak(aTHX_ "panic: pad_free curpad, %p!=%p",
1750                    AvARRAY(PL_comppad), PL_curpad);
1751     if (!po)
1752         Perl_croak(aTHX_ "panic: pad_free po");
1753
1754     DEBUG_X(PerlIO_printf(Perl_debug_log,
1755             "Pad 0x%" UVxf "[0x%" UVxf "] free:    %ld\n",
1756             PTR2UV(PL_comppad), PTR2UV(PL_curpad), (long)po)
1757     );
1758
1759 #ifndef USE_PAD_RESET
1760     sv = PL_curpad[po];
1761     if (sv && sv != &PL_sv_undef && !SvPADMY(sv))
1762         SvFLAGS(sv) &= ~SVs_PADTMP;
1763
1764     if (po < PL_padix)
1765         PL_padix = po - 1;
1766 #endif
1767 }
1768
1769 /*
1770 =for apidoc m|void|do_dump_pad|I32 level|PerlIO *file|PADLIST *padlist|int full
1771
1772 Dump the contents of a padlist
1773
1774 =cut
1775 */
1776
1777 void
1778 Perl_do_dump_pad(pTHX_ I32 level, PerlIO *file, PADLIST *padlist, int full)
1779 {
1780     const PADNAMELIST *pad_name;
1781     const AV *pad;
1782     PADNAME **pname;
1783     SV **ppad;
1784     PADOFFSET ix;
1785
1786     PERL_ARGS_ASSERT_DO_DUMP_PAD;
1787
1788     if (!padlist) {
1789         return;
1790     }
1791     pad_name = PadlistNAMES(padlist);
1792     pad = PadlistARRAY(padlist)[1];
1793     pname = PadnamelistARRAY(pad_name);
1794     ppad = AvARRAY(pad);
1795     Perl_dump_indent(aTHX_ level, file,
1796             "PADNAME = 0x%" UVxf "(0x%" UVxf ") PAD = 0x%" UVxf "(0x%" UVxf ")\n",
1797             PTR2UV(pad_name), PTR2UV(pname), PTR2UV(pad), PTR2UV(ppad)
1798     );
1799
1800     for (ix = 1; ix <= PadnamelistMAX(pad_name); ix++) {
1801         const PADNAME *namesv = pname[ix];
1802         if (namesv && !PadnameLEN(namesv)) {
1803             namesv = NULL;
1804         }
1805         if (namesv) {
1806             if (PadnameOUTER(namesv))
1807                 Perl_dump_indent(aTHX_ level+1, file,
1808                     "%2d. 0x%" UVxf "<%lu> FAKE \"%s\" flags=0x%lx index=%lu\n",
1809                     (int) ix,
1810                     PTR2UV(ppad[ix]),
1811                     (unsigned long) (ppad[ix] ? SvREFCNT(ppad[ix]) : 0),
1812                     PadnamePV(namesv),
1813                     (unsigned long)PARENT_FAKELEX_FLAGS(namesv),
1814                     (unsigned long)PARENT_PAD_INDEX(namesv)
1815
1816                 );
1817             else
1818                 Perl_dump_indent(aTHX_ level+1, file,
1819                     "%2d. 0x%" UVxf "<%lu> (%lu,%lu) \"%s\"\n",
1820                     (int) ix,
1821                     PTR2UV(ppad[ix]),
1822                     (unsigned long) (ppad[ix] ? SvREFCNT(ppad[ix]) : 0),
1823                     (unsigned long)COP_SEQ_RANGE_LOW(namesv),
1824                     (unsigned long)COP_SEQ_RANGE_HIGH(namesv),
1825                     PadnamePV(namesv)
1826                 );
1827         }
1828         else if (full) {
1829             Perl_dump_indent(aTHX_ level+1, file,
1830                 "%2d. 0x%" UVxf "<%lu>\n",
1831                 (int) ix,
1832                 PTR2UV(ppad[ix]),
1833                 (unsigned long) (ppad[ix] ? SvREFCNT(ppad[ix]) : 0)
1834             );
1835         }
1836     }
1837 }
1838
1839 #ifdef DEBUGGING
1840
1841 /*
1842 =for apidoc m|void|cv_dump|CV *cv|const char *title
1843
1844 dump the contents of a CV
1845
1846 =cut
1847 */
1848
1849 STATIC void
1850 S_cv_dump(pTHX_ const CV *cv, const char *title)
1851 {
1852     const CV * const outside = CvOUTSIDE(cv);
1853     PADLIST* const padlist = CvPADLIST(cv);
1854
1855     PERL_ARGS_ASSERT_CV_DUMP;
1856
1857     PerlIO_printf(Perl_debug_log,
1858                   "  %s: CV=0x%" UVxf " (%s), OUTSIDE=0x%" UVxf " (%s)\n",
1859                   title,
1860                   PTR2UV(cv),
1861                   (CvANON(cv) ? "ANON"
1862                    : (SvTYPE(cv) == SVt_PVFM) ? "FORMAT"
1863                    : (cv == PL_main_cv) ? "MAIN"
1864                    : CvUNIQUE(cv) ? "UNIQUE"
1865                    : CvGV(cv) ? GvNAME(CvGV(cv)) : "UNDEFINED"),
1866                   PTR2UV(outside),
1867                   (!outside ? "null"
1868                    : CvANON(outside) ? "ANON"
1869                    : (outside == PL_main_cv) ? "MAIN"
1870                    : CvUNIQUE(outside) ? "UNIQUE"
1871                    : CvGV(outside) ? GvNAME(CvGV(outside)) : "UNDEFINED"));
1872
1873     PerlIO_printf(Perl_debug_log,
1874                     "    PADLIST = 0x%" UVxf "\n", PTR2UV(padlist));
1875     do_dump_pad(1, Perl_debug_log, padlist, 1);
1876 }
1877
1878 #endif /* DEBUGGING */
1879
1880 /*
1881 =for apidoc Am|CV *|cv_clone|CV *proto
1882
1883 Clone a CV, making a lexical closure.  C<proto> supplies the prototype
1884 of the function: its code, pad structure, and other attributes.
1885 The prototype is combined with a capture of outer lexicals to which the
1886 code refers, which are taken from the currently-executing instance of
1887 the immediately surrounding code.
1888
1889 =cut
1890 */
1891
1892 static CV *S_cv_clone(pTHX_ CV *proto, CV *cv, CV *outside, HV *cloned);
1893
1894 static CV *
1895 S_cv_clone_pad(pTHX_ CV *proto, CV *cv, CV *outside, HV *cloned,
1896                      bool newcv)
1897 {
1898     PADOFFSET ix;
1899     PADLIST* const protopadlist = CvPADLIST(proto);
1900     PADNAMELIST *const protopad_name = PadlistNAMES(protopadlist);
1901     const PAD *const protopad = PadlistARRAY(protopadlist)[1];
1902     PADNAME** const pname = PadnamelistARRAY(protopad_name);
1903     SV** const ppad = AvARRAY(protopad);
1904     const PADOFFSET fname = PadnamelistMAX(protopad_name);
1905     const PADOFFSET fpad = AvFILLp(protopad);
1906     SV** outpad;
1907     long depth;
1908     U32 subclones = 0;
1909     bool trouble = FALSE;
1910
1911     assert(!CvUNIQUE(proto));
1912
1913     /* Anonymous subs have a weak CvOUTSIDE pointer, so its value is not
1914      * reliable.  The currently-running sub is always the one we need to
1915      * close over.
1916      * For my subs, the currently-running sub may not be the one we want.
1917      * We have to check whether it is a clone of CvOUTSIDE.
1918      * Note that in general for formats, CvOUTSIDE != find_runcv.
1919      * Since formats may be nested inside closures, CvOUTSIDE may point
1920      * to a prototype; we instead want the cloned parent who called us.
1921      */
1922
1923     if (!outside) {
1924       if (CvWEAKOUTSIDE(proto))
1925         outside = find_runcv(NULL);
1926       else {
1927         outside = CvOUTSIDE(proto);
1928         if ((CvCLONE(outside) && ! CvCLONED(outside))
1929             || !CvPADLIST(outside)
1930             || CvPADLIST(outside)->xpadl_id != protopadlist->xpadl_outid) {
1931             outside = find_runcv_where(
1932                 FIND_RUNCV_padid_eq, PTR2IV(protopadlist->xpadl_outid), NULL
1933             );
1934             /* outside could be null */
1935         }
1936       }
1937     }
1938     depth = outside ? CvDEPTH(outside) : 0;
1939     if (!depth)
1940         depth = 1;
1941
1942     ENTER;
1943     SAVESPTR(PL_compcv);
1944     PL_compcv = cv;
1945     if (newcv) SAVEFREESV(cv); /* in case of fatal warnings */
1946
1947     if (CvHASEVAL(cv))
1948         CvOUTSIDE(cv)   = MUTABLE_CV(SvREFCNT_inc_simple(outside));
1949
1950     SAVESPTR(PL_comppad_name);
1951     PL_comppad_name = protopad_name;
1952     CvPADLIST_set(cv, pad_new(padnew_CLONE|padnew_SAVE));
1953     CvPADLIST(cv)->xpadl_id = protopadlist->xpadl_id;
1954
1955     av_fill(PL_comppad, fpad);
1956
1957     PL_curpad = AvARRAY(PL_comppad);
1958
1959     outpad = outside && CvPADLIST(outside)
1960         ? AvARRAY(PadlistARRAY(CvPADLIST(outside))[depth])
1961         : NULL;
1962     if (outpad) CvPADLIST(cv)->xpadl_outid = CvPADLIST(outside)->xpadl_id;
1963
1964     for (ix = fpad; ix > 0; ix--) {
1965         PADNAME* const namesv = (ix <= fname) ? pname[ix] : NULL;
1966         SV *sv = NULL;
1967         if (namesv && PadnameLEN(namesv)) { /* lexical */
1968           if (PadnameIsOUR(namesv)) { /* or maybe not so lexical */
1969                 NOOP;
1970           }
1971           else {
1972             if (PadnameOUTER(namesv)) {   /* lexical from outside? */
1973                 /* formats may have an inactive, or even undefined, parent;
1974                    but state vars are always available. */
1975                 if (!outpad || !(sv = outpad[PARENT_PAD_INDEX(namesv)])
1976                  || (  SvPADSTALE(sv) && !SvPAD_STATE(namesv)
1977                     && (!outside || !CvDEPTH(outside)))  ) {
1978                     S_unavailable(aTHX_ namesv);
1979                     sv = NULL;
1980                 }
1981                 else 
1982                     SvREFCNT_inc_simple_void_NN(sv);
1983             }
1984             if (!sv) {
1985                 const char sigil = PadnamePV(namesv)[0];
1986                 if (sigil == '&')
1987                     /* If there are state subs, we need to clone them, too.
1988                        But they may need to close over variables we have
1989                        not cloned yet.  So we will have to do a second
1990                        pass.  Furthermore, there may be state subs clos-
1991                        ing over other state subs’ entries, so we have
1992                        to put a stub here and then clone into it on the
1993                        second pass. */
1994                     if (SvPAD_STATE(namesv) && !CvCLONED(ppad[ix])) {
1995                         assert(SvTYPE(ppad[ix]) == SVt_PVCV);
1996                         subclones ++;
1997                         if (CvOUTSIDE(ppad[ix]) != proto)
1998                              trouble = TRUE;
1999                         sv = newSV_type(SVt_PVCV);
2000                         CvLEXICAL_on(sv);
2001                     }
2002                     else if (PadnameLEN(namesv)>1 && !PadnameIsOUR(namesv))
2003                     {
2004                         /* my sub */
2005                         /* Just provide a stub, but name it.  It will be
2006                            upgraded to the real thing on scope entry. */
2007                         dVAR;
2008                         U32 hash;
2009                         PERL_HASH(hash, PadnamePV(namesv)+1,
2010                                   PadnameLEN(namesv) - 1);
2011                         sv = newSV_type(SVt_PVCV);
2012                         CvNAME_HEK_set(
2013                             sv,
2014                             share_hek(PadnamePV(namesv)+1,
2015                                       1 - PadnameLEN(namesv),
2016                                       hash)
2017                         );
2018                         CvLEXICAL_on(sv);
2019                     }
2020                     else sv = SvREFCNT_inc(ppad[ix]);
2021                 else if (sigil == '@')
2022                     sv = MUTABLE_SV(newAV());
2023                 else if (sigil == '%')
2024                     sv = MUTABLE_SV(newHV());
2025                 else
2026                     sv = newSV(0);
2027                 /* reset the 'assign only once' flag on each state var */
2028                 if (sigil != '&' && SvPAD_STATE(namesv))
2029                     SvPADSTALE_on(sv);
2030             }
2031           }
2032         }
2033         else if (namesv && PadnamePV(namesv)) {
2034             sv = SvREFCNT_inc_NN(ppad[ix]);
2035         }
2036         else {
2037             sv = newSV(0);
2038             SvPADTMP_on(sv);
2039         }
2040         PL_curpad[ix] = sv;
2041     }
2042
2043     if (subclones)
2044     {
2045         if (trouble || cloned) {
2046             /* Uh-oh, we have trouble!  At least one of the state subs here
2047                has its CvOUTSIDE pointer pointing somewhere unexpected.  It
2048                could be pointing to another state protosub that we are
2049                about to clone.  So we have to track which sub clones come
2050                from which protosubs.  If the CvOUTSIDE pointer for a parti-
2051                cular sub points to something we have not cloned yet, we
2052                delay cloning it.  We must loop through the pad entries,
2053                until we get a full pass with no cloning.  If any uncloned
2054                subs remain (probably nested inside anonymous or ‘my’ subs),
2055                then they get cloned in a final pass.
2056              */
2057             bool cloned_in_this_pass;
2058             if (!cloned)
2059                 cloned = (HV *)sv_2mortal((SV *)newHV());
2060             do {
2061                 cloned_in_this_pass = FALSE;
2062                 for (ix = fpad; ix > 0; ix--) {
2063                     PADNAME * const name =
2064                         (ix <= fname) ? pname[ix] : NULL;
2065                     if (name && name != &PL_padname_undef
2066                      && !PadnameOUTER(name) && PadnamePV(name)[0] == '&'
2067                      && PadnameIsSTATE(name) && !CvCLONED(PL_curpad[ix]))
2068                     {
2069                         CV * const protokey = CvOUTSIDE(ppad[ix]);
2070                         CV ** const cvp = protokey == proto
2071                             ? &cv
2072                             : (CV **)hv_fetch(cloned, (char *)&protokey,
2073                                               sizeof(CV *), 0);
2074                         if (cvp && *cvp) {
2075                             S_cv_clone(aTHX_ (CV *)ppad[ix],
2076                                              (CV *)PL_curpad[ix],
2077                                              *cvp, cloned);
2078                             (void)hv_store(cloned, (char *)&ppad[ix],
2079                                      sizeof(CV *),
2080                                      SvREFCNT_inc_simple_NN(PL_curpad[ix]),
2081                                      0);
2082                             subclones--;
2083                             cloned_in_this_pass = TRUE;
2084                         }
2085                     }
2086                 }
2087             } while (cloned_in_this_pass);
2088             if (subclones)
2089                 for (ix = fpad; ix > 0; ix--) {
2090                     PADNAME * const name =
2091                         (ix <= fname) ? pname[ix] : NULL;
2092                     if (name && name != &PL_padname_undef
2093                      && !PadnameOUTER(name) && PadnamePV(name)[0] == '&'
2094                      && PadnameIsSTATE(name) && !CvCLONED(PL_curpad[ix]))
2095                         S_cv_clone(aTHX_ (CV *)ppad[ix],
2096                                          (CV *)PL_curpad[ix],
2097                                          CvOUTSIDE(ppad[ix]), cloned);
2098                 }
2099         }
2100         else for (ix = fpad; ix > 0; ix--) {
2101             PADNAME * const name = (ix <= fname) ? pname[ix] : NULL;
2102             if (name && name != &PL_padname_undef && !PadnameOUTER(name)
2103              && PadnamePV(name)[0] == '&' && PadnameIsSTATE(name))
2104                 S_cv_clone(aTHX_ (CV *)ppad[ix], (CV *)PL_curpad[ix], cv,
2105                                  NULL);
2106         }
2107     }
2108
2109     if (newcv) SvREFCNT_inc_simple_void_NN(cv);
2110     LEAVE;
2111
2112     if (CvCONST(cv)) {
2113         /* Constant sub () { $x } closing over $x:
2114          * The prototype was marked as a candiate for const-ization,
2115          * so try to grab the current const value, and if successful,
2116          * turn into a const sub:
2117          */
2118         SV* const_sv;
2119         OP *o = CvSTART(cv);
2120         assert(newcv);
2121         for (; o; o = o->op_next)
2122             if (o->op_type == OP_PADSV)
2123                 break;
2124         ASSUME(o->op_type == OP_PADSV);
2125         const_sv = PAD_BASE_SV(CvPADLIST(cv), o->op_targ);
2126         /* the candidate should have 1 ref from this pad and 1 ref
2127          * from the parent */
2128         if (const_sv && SvREFCNT(const_sv) == 2) {
2129             const bool was_method = cBOOL(CvMETHOD(cv));
2130             bool copied = FALSE;
2131             if (outside) {
2132                 PADNAME * const pn =
2133                     PadlistNAMESARRAY(CvPADLIST(outside))
2134                         [PARENT_PAD_INDEX(PadlistNAMESARRAY(
2135                             CvPADLIST(cv))[o->op_targ])];
2136                 assert(PadnameOUTER(PadlistNAMESARRAY(CvPADLIST(cv))
2137                                         [o->op_targ]));
2138                 if (PadnameLVALUE(pn)) {
2139                     /* We have a lexical that is potentially modifiable
2140                        elsewhere, so making a constant will break clo-
2141                        sure behaviour.  If this is a ‘simple lexical
2142                        op tree’, i.e., sub(){$x}, emit a deprecation
2143                        warning, but continue to exhibit the old behav-
2144                        iour of making it a constant based on the ref-
2145                        count of the candidate variable.
2146
2147                        A simple lexical op tree looks like this:
2148
2149                          leavesub
2150                            lineseq
2151                              nextstate
2152                              padsv
2153                      */
2154                     if (OpSIBLING(
2155                          cUNOPx(cUNOPx(CvROOT(cv))->op_first)->op_first
2156                         ) == o
2157                      && !OpSIBLING(o))
2158                     {
2159                         Perl_ck_warner_d(aTHX_
2160                                           packWARN(WARN_DEPRECATED),
2161                                          "Constants from lexical "
2162                                          "variables potentially "
2163                                          "modified elsewhere are "
2164                                          "deprecated. This will not "
2165                                          "be allowed in Perl 5.32");
2166                         /* We *copy* the lexical variable, and donate the
2167                            copy to newCONSTSUB.  Yes, this is ugly, and
2168                            should be killed.  We need to do this for the
2169                            time being, however, because turning on SvPADTMP
2170                            on a lexical will have observable effects
2171                            elsewhere.  */
2172                         const_sv = newSVsv(const_sv);
2173                         copied = TRUE;
2174                     }
2175                     else
2176                         goto constoff;
2177                 }
2178             }
2179             if (!copied)
2180                 SvREFCNT_inc_simple_void_NN(const_sv);
2181             /* If the lexical is not used elsewhere, it is safe to turn on
2182                SvPADTMP, since it is only when it is used in lvalue con-
2183                text that the difference is observable.  */
2184             SvREADONLY_on(const_sv);
2185             SvPADTMP_on(const_sv);
2186             SvREFCNT_dec_NN(cv);
2187             cv = newCONSTSUB(CvSTASH(proto), NULL, const_sv);
2188             if (was_method)
2189                 CvMETHOD_on(cv);
2190         }
2191         else {
2192           constoff:
2193             CvCONST_off(cv);
2194         }
2195     }
2196
2197     return cv;
2198 }
2199
2200 static CV *
2201 S_cv_clone(pTHX_ CV *proto, CV *cv, CV *outside, HV *cloned)
2202 {
2203 #ifdef USE_ITHREADS
2204     dVAR;
2205 #endif
2206     const bool newcv = !cv;
2207
2208     assert(!CvUNIQUE(proto));
2209
2210     if (!cv) cv = MUTABLE_CV(newSV_type(SvTYPE(proto)));
2211     CvFLAGS(cv) = CvFLAGS(proto) & ~(CVf_CLONE|CVf_WEAKOUTSIDE|CVf_CVGV_RC
2212                                     |CVf_SLABBED);
2213     CvCLONED_on(cv);
2214
2215     CvFILE(cv)          = CvDYNFILE(proto) ? savepv(CvFILE(proto))
2216                                            : CvFILE(proto);
2217     if (CvNAMED(proto))
2218          CvNAME_HEK_set(cv, share_hek_hek(CvNAME_HEK(proto)));
2219     else CvGV_set(cv,CvGV(proto));
2220     CvSTASH_set(cv, CvSTASH(proto));
2221     OP_REFCNT_LOCK;
2222     CvROOT(cv)          = OpREFCNT_inc(CvROOT(proto));
2223     OP_REFCNT_UNLOCK;
2224     CvSTART(cv)         = CvSTART(proto);
2225     CvOUTSIDE_SEQ(cv) = CvOUTSIDE_SEQ(proto);
2226
2227     if (SvPOK(proto)) {
2228         sv_setpvn(MUTABLE_SV(cv), SvPVX_const(proto), SvCUR(proto));
2229         if (SvUTF8(proto))
2230            SvUTF8_on(MUTABLE_SV(cv));
2231     }
2232     if (SvMAGIC(proto))
2233         mg_copy((SV *)proto, (SV *)cv, 0, 0);
2234
2235     if (CvPADLIST(proto))
2236         cv = S_cv_clone_pad(aTHX_ proto, cv, outside, cloned, newcv);
2237
2238     DEBUG_Xv(
2239         PerlIO_printf(Perl_debug_log, "\nPad CV clone\n");
2240         if (CvOUTSIDE(cv)) cv_dump(CvOUTSIDE(cv), "Outside");
2241         cv_dump(proto,   "Proto");
2242         cv_dump(cv,      "To");
2243     );
2244
2245     return cv;
2246 }
2247
2248 CV *
2249 Perl_cv_clone(pTHX_ CV *proto)
2250 {
2251     PERL_ARGS_ASSERT_CV_CLONE;
2252
2253     if (!CvPADLIST(proto)) Perl_croak(aTHX_ "panic: no pad in cv_clone");
2254     return S_cv_clone(aTHX_ proto, NULL, NULL, NULL);
2255 }
2256
2257 /* Called only by pp_clonecv */
2258 CV *
2259 Perl_cv_clone_into(pTHX_ CV *proto, CV *target)
2260 {
2261     PERL_ARGS_ASSERT_CV_CLONE_INTO;
2262     cv_undef(target);
2263     return S_cv_clone(aTHX_ proto, target, NULL, NULL);
2264 }
2265
2266 /*
2267 =for apidoc cv_name
2268
2269 Returns an SV containing the name of the CV, mainly for use in error
2270 reporting.  The CV may actually be a GV instead, in which case the returned
2271 SV holds the GV's name.  Anything other than a GV or CV is treated as a
2272 string already holding the sub name, but this could change in the future.
2273
2274 An SV may be passed as a second argument.  If so, the name will be assigned
2275 to it and it will be returned.  Otherwise the returned SV will be a new
2276 mortal.
2277
2278 If C<flags> has the C<CV_NAME_NOTQUAL> bit set, then the package name will not be
2279 included.  If the first argument is neither a CV nor a GV, this flag is
2280 ignored (subject to change).
2281
2282 =cut
2283 */
2284
2285 SV *
2286 Perl_cv_name(pTHX_ CV *cv, SV *sv, U32 flags)
2287 {
2288     PERL_ARGS_ASSERT_CV_NAME;
2289     if (!isGV_with_GP(cv) && SvTYPE(cv) != SVt_PVCV) {
2290         if (sv) sv_setsv(sv,(SV *)cv);
2291         return sv ? (sv) : (SV *)cv;
2292     }
2293     {
2294         SV * const retsv = sv ? (sv) : sv_newmortal();
2295         if (SvTYPE(cv) == SVt_PVCV) {
2296             if (CvNAMED(cv)) {
2297                 if (CvLEXICAL(cv) || flags & CV_NAME_NOTQUAL)
2298                     sv_sethek(retsv, CvNAME_HEK(cv));
2299                 else {
2300                     if (CvSTASH(cv) && HvNAME_HEK(CvSTASH(cv)))
2301                         sv_sethek(retsv, HvNAME_HEK(CvSTASH(cv)));
2302                     else
2303                         sv_setpvs(retsv, "__ANON__");
2304                     sv_catpvs(retsv, "::");
2305                     sv_cathek(retsv, CvNAME_HEK(cv));
2306                 }
2307             }
2308             else if (CvLEXICAL(cv) || flags & CV_NAME_NOTQUAL)
2309                 sv_sethek(retsv, GvNAME_HEK(GvEGV(CvGV(cv))));
2310             else gv_efullname3(retsv, CvGV(cv), NULL);
2311         }
2312         else if (flags & CV_NAME_NOTQUAL) sv_sethek(retsv, GvNAME_HEK(cv));
2313         else gv_efullname3(retsv,(GV *)cv,NULL);
2314         return retsv;
2315     }
2316 }
2317
2318 /*
2319 =for apidoc m|void|pad_fixup_inner_anons|PADLIST *padlist|CV *old_cv|CV *new_cv
2320
2321 For any anon CVs in the pad, change C<CvOUTSIDE> of that CV from
2322 C<old_cv> to C<new_cv> if necessary.  Needed when a newly-compiled CV has to be
2323 moved to a pre-existing CV struct.
2324
2325 =cut
2326 */
2327
2328 void
2329 Perl_pad_fixup_inner_anons(pTHX_ PADLIST *padlist, CV *old_cv, CV *new_cv)
2330 {
2331     PADOFFSET ix;
2332     PADNAMELIST * const comppad_name = PadlistNAMES(padlist);
2333     AV * const comppad = PadlistARRAY(padlist)[1];
2334     PADNAME ** const namepad = PadnamelistARRAY(comppad_name);
2335     SV ** const curpad = AvARRAY(comppad);
2336
2337     PERL_ARGS_ASSERT_PAD_FIXUP_INNER_ANONS;
2338     PERL_UNUSED_ARG(old_cv);
2339
2340     for (ix = PadnamelistMAX(comppad_name); ix > 0; ix--) {
2341         const PADNAME *name = namepad[ix];
2342         if (name && name != &PL_padname_undef && !PadnameIsOUR(name)
2343             && *PadnamePV(name) == '&')
2344         {
2345           CV *innercv = MUTABLE_CV(curpad[ix]);
2346           if (UNLIKELY(PadnameOUTER(name))) {
2347             CV *cv = new_cv;
2348             PADNAME **names = namepad;
2349             PADOFFSET i = ix;
2350             while (PadnameOUTER(name)) {
2351                 assert(SvTYPE(cv) == SVt_PVCV);
2352                 cv = CvOUTSIDE(cv);
2353                 names = PadlistNAMESARRAY(CvPADLIST(cv));
2354                 i = PARENT_PAD_INDEX(name);
2355                 name = names[i];
2356             }
2357             innercv = (CV *)PadARRAY(PadlistARRAY(CvPADLIST(cv))[1])[i];
2358           }
2359           if (SvTYPE(innercv) == SVt_PVCV) {
2360             /* XXX 0afba48f added code here to check for a proto CV
2361                    attached to the pad entry by magic.  But shortly there-
2362                    after 81df9f6f95 moved the magic to the pad name.  The
2363                    code here was never updated, so it wasn’t doing anything
2364                    and got deleted when PADNAME became a distinct type.  Is
2365                    there any bug as a result?  */
2366             if (CvOUTSIDE(innercv) == old_cv) {
2367                 if (!CvWEAKOUTSIDE(innercv)) {
2368                     SvREFCNT_dec(old_cv);
2369                     SvREFCNT_inc_simple_void_NN(new_cv);
2370                 }
2371                 CvOUTSIDE(innercv) = new_cv;
2372             }
2373           }
2374           else { /* format reference */
2375             SV * const rv = curpad[ix];
2376             CV *innercv;
2377             if (!SvOK(rv)) continue;
2378             assert(SvROK(rv));
2379             assert(SvWEAKREF(rv));
2380             innercv = (CV *)SvRV(rv);
2381             assert(!CvWEAKOUTSIDE(innercv));
2382             assert(CvOUTSIDE(innercv) == old_cv);
2383             SvREFCNT_dec(CvOUTSIDE(innercv));
2384             CvOUTSIDE(innercv) = (CV *)SvREFCNT_inc_simple_NN(new_cv);
2385           }
2386         }
2387     }
2388 }
2389
2390 /*
2391 =for apidoc m|void|pad_push|PADLIST *padlist|int depth
2392
2393 Push a new pad frame onto the padlist, unless there's already a pad at
2394 this depth, in which case don't bother creating a new one.  Then give
2395 the new pad an C<@_> in slot zero.
2396
2397 =cut
2398 */
2399
2400 void
2401 Perl_pad_push(pTHX_ PADLIST *padlist, int depth)
2402 {
2403     PERL_ARGS_ASSERT_PAD_PUSH;
2404
2405     if (depth > PadlistMAX(padlist) || !PadlistARRAY(padlist)[depth]) {
2406         PAD** const svp = PadlistARRAY(padlist);
2407         AV* const newpad = newAV();
2408         SV** const oldpad = AvARRAY(svp[depth-1]);
2409         PADOFFSET ix = AvFILLp((const AV *)svp[1]);
2410         const PADOFFSET names_fill = PadnamelistMAX((PADNAMELIST *)svp[0]);
2411         PADNAME ** const names = PadnamelistARRAY((PADNAMELIST *)svp[0]);
2412         AV *av;
2413
2414         for ( ;ix > 0; ix--) {
2415             if (names_fill >= ix && PadnameLEN(names[ix])) {
2416                 const char sigil = PadnamePV(names[ix])[0];
2417                 if (PadnameOUTER(names[ix])
2418                         || PadnameIsSTATE(names[ix])
2419                         || sigil == '&')
2420                 {
2421                     /* outer lexical or anon code */
2422                     av_store(newpad, ix, SvREFCNT_inc(oldpad[ix]));
2423                 }
2424                 else {          /* our own lexical */
2425                     SV *sv; 
2426                     if (sigil == '@')
2427                         sv = MUTABLE_SV(newAV());
2428                     else if (sigil == '%')
2429                         sv = MUTABLE_SV(newHV());
2430                     else
2431                         sv = newSV(0);
2432                     av_store(newpad, ix, sv);
2433                 }
2434             }
2435             else if (PadnamePV(names[ix])) {
2436                 av_store(newpad, ix, SvREFCNT_inc_NN(oldpad[ix]));
2437             }
2438             else {
2439                 /* save temporaries on recursion? */
2440                 SV * const sv = newSV(0);
2441                 av_store(newpad, ix, sv);
2442                 SvPADTMP_on(sv);
2443             }
2444         }
2445         av = newAV();
2446         av_store(newpad, 0, MUTABLE_SV(av));
2447         AvREIFY_only(av);
2448
2449         padlist_store(padlist, depth, newpad);
2450     }
2451 }
2452
2453 #if defined(USE_ITHREADS)
2454
2455 #  define av_dup_inc(s,t)       MUTABLE_AV(sv_dup_inc((const SV *)s,t))
2456
2457 /*
2458 =for apidoc padlist_dup
2459
2460 Duplicates a pad.
2461
2462 =cut
2463 */
2464
2465 PADLIST *
2466 Perl_padlist_dup(pTHX_ PADLIST *srcpad, CLONE_PARAMS *param)
2467 {
2468     PADLIST *dstpad;
2469     bool cloneall;
2470     PADOFFSET max;
2471
2472     PERL_ARGS_ASSERT_PADLIST_DUP;
2473
2474     cloneall = cBOOL(param->flags & CLONEf_COPY_STACKS);
2475     assert (SvREFCNT(PadlistARRAY(srcpad)[1]) == 1);
2476
2477     max = cloneall ? PadlistMAX(srcpad) : 1;
2478
2479     Newx(dstpad, 1, PADLIST);
2480     ptr_table_store(PL_ptr_table, srcpad, dstpad);
2481     PadlistMAX(dstpad) = max;
2482     Newx(PadlistARRAY(dstpad), max + 1, PAD *);
2483
2484     PadlistARRAY(dstpad)[0] = (PAD *)
2485             padnamelist_dup(PadlistNAMES(srcpad), param);
2486     PadnamelistREFCNT(PadlistNAMES(dstpad))++;
2487     if (cloneall) {
2488         PADOFFSET depth;
2489         for (depth = 1; depth <= max; ++depth)
2490             PadlistARRAY(dstpad)[depth] =
2491                 av_dup_inc(PadlistARRAY(srcpad)[depth], param);
2492     } else {
2493         /* CvDEPTH() on our subroutine will be set to 0, so there's no need
2494            to build anything other than the first level of pads.  */
2495         PADOFFSET ix = AvFILLp(PadlistARRAY(srcpad)[1]);
2496         AV *pad1;
2497         const PADOFFSET names_fill = PadnamelistMAX(PadlistNAMES(srcpad));
2498         const PAD *const srcpad1 = PadlistARRAY(srcpad)[1];
2499         SV **oldpad = AvARRAY(srcpad1);
2500         PADNAME ** const names = PadnamelistARRAY(PadlistNAMES(dstpad));
2501         SV **pad1a;
2502         AV *args;
2503
2504         pad1 = newAV();
2505
2506         av_extend(pad1, ix);
2507         PadlistARRAY(dstpad)[1] = pad1;
2508         pad1a = AvARRAY(pad1);
2509
2510         if (ix > -1) {
2511             AvFILLp(pad1) = ix;
2512
2513             for ( ;ix > 0; ix--) {
2514                 if (!oldpad[ix]) {
2515                     pad1a[ix] = NULL;
2516                 } else if (names_fill >= ix && names[ix] &&
2517                            PadnameLEN(names[ix])) {
2518                     const char sigil = PadnamePV(names[ix])[0];
2519                     if (PadnameOUTER(names[ix])
2520                         || PadnameIsSTATE(names[ix])
2521                         || sigil == '&')
2522                         {
2523                             /* outer lexical or anon code */
2524                             pad1a[ix] = sv_dup_inc(oldpad[ix], param);
2525                         }
2526                     else {              /* our own lexical */
2527                         if(SvPADSTALE(oldpad[ix]) && SvREFCNT(oldpad[ix]) > 1) {
2528                             /* This is a work around for how the current
2529                                implementation of ?{ } blocks in regexps
2530                                interacts with lexicals.  */
2531                             pad1a[ix] = sv_dup_inc(oldpad[ix], param);
2532                         } else {
2533                             SV *sv; 
2534                             
2535                             if (sigil == '@')
2536                                 sv = MUTABLE_SV(newAV());
2537                             else if (sigil == '%')
2538                                 sv = MUTABLE_SV(newHV());
2539                             else
2540                                 sv = newSV(0);
2541                             pad1a[ix] = sv;
2542                         }
2543                     }
2544                 }
2545                 else if ((  names_fill >= ix && names[ix]
2546                          && PadnamePV(names[ix])  )) {
2547                     pad1a[ix] = sv_dup_inc(oldpad[ix], param);
2548                 }
2549                 else {
2550                     /* save temporaries on recursion? */
2551                     SV * const sv = newSV(0);
2552                     pad1a[ix] = sv;
2553
2554                     /* SvREFCNT(oldpad[ix]) != 1 for some code in threads.xs
2555                        FIXTHAT before merging this branch.
2556                        (And I know how to) */
2557                     if (SvPADTMP(oldpad[ix]))
2558                         SvPADTMP_on(sv);
2559                 }
2560             }
2561
2562             if (oldpad[0]) {
2563                 args = newAV();                 /* Will be @_ */
2564                 AvREIFY_only(args);
2565                 pad1a[0] = (SV *)args;
2566             }
2567         }
2568     }
2569
2570     return dstpad;
2571 }
2572
2573 #endif /* USE_ITHREADS */
2574
2575 PAD **
2576 Perl_padlist_store(pTHX_ PADLIST *padlist, I32 key, PAD *val)
2577 {
2578     PAD **ary;
2579     SSize_t const oldmax = PadlistMAX(padlist);
2580
2581     PERL_ARGS_ASSERT_PADLIST_STORE;
2582
2583     assert(key >= 0);
2584
2585     if (key > PadlistMAX(padlist)) {
2586         av_extend_guts(NULL,key,&PadlistMAX(padlist),
2587                        (SV ***)&PadlistARRAY(padlist),
2588                        (SV ***)&PadlistARRAY(padlist));
2589         Zero(PadlistARRAY(padlist)+oldmax+1, PadlistMAX(padlist)-oldmax,
2590              PAD *);
2591     }
2592     ary = PadlistARRAY(padlist);
2593     SvREFCNT_dec(ary[key]);
2594     ary[key] = val;
2595     return &ary[key];
2596 }
2597
2598 /*
2599 =for apidoc newPADNAMELIST
2600
2601 Creates a new pad name list.  C<max> is the highest index for which space
2602 is allocated.
2603
2604 =cut
2605 */
2606
2607 PADNAMELIST *
2608 Perl_newPADNAMELIST(size_t max)
2609 {
2610     PADNAMELIST *pnl;
2611     Newx(pnl, 1, PADNAMELIST);
2612     Newxz(PadnamelistARRAY(pnl), max+1, PADNAME *);
2613     PadnamelistMAX(pnl) = -1;
2614     PadnamelistREFCNT(pnl) = 1;
2615     PadnamelistMAXNAMED(pnl) = 0;
2616     pnl->xpadnl_max = max;
2617     return pnl;
2618 }
2619
2620 /*
2621 =for apidoc padnamelist_store
2622
2623 Stores the pad name (which may be null) at the given index, freeing any
2624 existing pad name in that slot.
2625
2626 =cut
2627 */
2628
2629 PADNAME **
2630 Perl_padnamelist_store(pTHX_ PADNAMELIST *pnl, SSize_t key, PADNAME *val)
2631 {
2632     PADNAME **ary;
2633
2634     PERL_ARGS_ASSERT_PADNAMELIST_STORE;
2635
2636     assert(key >= 0);
2637
2638     if (key > pnl->xpadnl_max)
2639         av_extend_guts(NULL,key,&pnl->xpadnl_max,
2640                        (SV ***)&PadnamelistARRAY(pnl),
2641                        (SV ***)&PadnamelistARRAY(pnl));
2642     if (PadnamelistMAX(pnl) < key) {
2643         Zero(PadnamelistARRAY(pnl)+PadnamelistMAX(pnl)+1,
2644              key-PadnamelistMAX(pnl), PADNAME *);
2645         PadnamelistMAX(pnl) = key;
2646     }
2647     ary = PadnamelistARRAY(pnl);
2648     if (ary[key])
2649         PadnameREFCNT_dec(ary[key]);
2650     ary[key] = val;
2651     return &ary[key];
2652 }
2653
2654 /*
2655 =for apidoc padnamelist_fetch
2656
2657 Fetches the pad name from the given index.
2658
2659 =cut
2660 */
2661
2662 PADNAME *
2663 Perl_padnamelist_fetch(PADNAMELIST *pnl, SSize_t key)
2664 {
2665     PERL_ARGS_ASSERT_PADNAMELIST_FETCH;
2666     ASSUME(key >= 0);
2667
2668     return key > PadnamelistMAX(pnl) ? NULL : PadnamelistARRAY(pnl)[key];
2669 }
2670
2671 void
2672 Perl_padnamelist_free(pTHX_ PADNAMELIST *pnl)
2673 {
2674     PERL_ARGS_ASSERT_PADNAMELIST_FREE;
2675     if (!--PadnamelistREFCNT(pnl)) {
2676         while(PadnamelistMAX(pnl) >= 0)
2677         {
2678             PADNAME * const pn =
2679                 PadnamelistARRAY(pnl)[PadnamelistMAX(pnl)--];
2680             if (pn)
2681                 PadnameREFCNT_dec(pn);
2682         }
2683         Safefree(PadnamelistARRAY(pnl));
2684         Safefree(pnl);
2685     }
2686 }
2687
2688 #if defined(USE_ITHREADS)
2689
2690 /*
2691 =for apidoc padnamelist_dup
2692
2693 Duplicates a pad name list.
2694
2695 =cut
2696 */
2697
2698 PADNAMELIST *
2699 Perl_padnamelist_dup(pTHX_ PADNAMELIST *srcpad, CLONE_PARAMS *param)
2700 {
2701     PADNAMELIST *dstpad;
2702     SSize_t max = PadnamelistMAX(srcpad);
2703
2704     PERL_ARGS_ASSERT_PADNAMELIST_DUP;
2705
2706     /* look for it in the table first */
2707     dstpad = (PADNAMELIST *)ptr_table_fetch(PL_ptr_table, srcpad);
2708     if (dstpad)
2709         return dstpad;
2710
2711     dstpad = newPADNAMELIST(max);
2712     PadnamelistREFCNT(dstpad) = 0; /* The caller will increment it.  */
2713     PadnamelistMAXNAMED(dstpad) = PadnamelistMAXNAMED(srcpad);
2714     PadnamelistMAX(dstpad) = max;
2715
2716     ptr_table_store(PL_ptr_table, srcpad, dstpad);
2717     for (; max >= 0; max--)
2718       if (PadnamelistARRAY(srcpad)[max]) {
2719         PadnamelistARRAY(dstpad)[max] =
2720             padname_dup(PadnamelistARRAY(srcpad)[max], param);
2721         PadnameREFCNT(PadnamelistARRAY(dstpad)[max])++;
2722       }
2723
2724     return dstpad;
2725 }
2726
2727 #endif /* USE_ITHREADS */
2728
2729 /*
2730 =for apidoc newPADNAMEpvn
2731
2732 Constructs and returns a new pad name.  C<s> must be a UTF-8 string.  Do not
2733 use this for pad names that point to outer lexicals.  See
2734 C<L</newPADNAMEouter>>.
2735
2736 =cut
2737 */
2738
2739 PADNAME *
2740 Perl_newPADNAMEpvn(const char *s, STRLEN len)
2741 {
2742     struct padname_with_str *alloc;
2743     char *alloc2; /* for Newxz */
2744     PADNAME *pn;
2745     PERL_ARGS_ASSERT_NEWPADNAMEPVN;
2746     Newxz(alloc2,
2747           STRUCT_OFFSET(struct padname_with_str, xpadn_str[0]) + len + 1,
2748           char);
2749     alloc = (struct padname_with_str *)alloc2;
2750     pn = (PADNAME *)alloc;
2751     PadnameREFCNT(pn) = 1;
2752     PadnamePV(pn) = alloc->xpadn_str;
2753     Copy(s, PadnamePV(pn), len, char);
2754     *(PadnamePV(pn) + len) = '\0';
2755     PadnameLEN(pn) = len;
2756     return pn;
2757 }
2758
2759 /*
2760 =for apidoc newPADNAMEouter
2761
2762 Constructs and returns a new pad name.  Only use this function for names
2763 that refer to outer lexicals.  (See also L</newPADNAMEpvn>.)  C<outer> is
2764 the outer pad name that this one mirrors.  The returned pad name has the
2765 C<PADNAMEt_OUTER> flag already set.
2766
2767 =cut
2768 */
2769
2770 PADNAME *
2771 Perl_newPADNAMEouter(PADNAME *outer)
2772 {
2773     PADNAME *pn;
2774     PERL_ARGS_ASSERT_NEWPADNAMEOUTER;
2775     Newxz(pn, 1, PADNAME);
2776     PadnameREFCNT(pn) = 1;
2777     PadnamePV(pn) = PadnamePV(outer);
2778     /* Not PadnameREFCNT(outer), because ‘outer’ may itself close over
2779        another entry.  The original pad name owns the buffer.  */
2780     PadnameREFCNT(PADNAME_FROM_PV(PadnamePV(outer)))++;
2781     PadnameFLAGS(pn) = PADNAMEt_OUTER;
2782     PadnameLEN(pn) = PadnameLEN(outer);
2783     return pn;
2784 }
2785
2786 void
2787 Perl_padname_free(pTHX_ PADNAME *pn)
2788 {
2789     PERL_ARGS_ASSERT_PADNAME_FREE;
2790     if (!--PadnameREFCNT(pn)) {
2791         if (UNLIKELY(pn == &PL_padname_undef || pn == &PL_padname_const)) {
2792             PadnameREFCNT(pn) = SvREFCNT_IMMORTAL;
2793             return;
2794         }
2795         SvREFCNT_dec(PadnameTYPE(pn)); /* Takes care of protocv, too.  */
2796         SvREFCNT_dec(PadnameOURSTASH(pn));
2797         if (PadnameOUTER(pn))
2798             PadnameREFCNT_dec(PADNAME_FROM_PV(PadnamePV(pn)));
2799         Safefree(pn);
2800     }
2801 }
2802
2803 #if defined(USE_ITHREADS)
2804
2805 /*
2806 =for apidoc padname_dup
2807
2808 Duplicates a pad name.
2809
2810 =cut
2811 */
2812
2813 PADNAME *
2814 Perl_padname_dup(pTHX_ PADNAME *src, CLONE_PARAMS *param)
2815 {
2816     PADNAME *dst;
2817
2818     PERL_ARGS_ASSERT_PADNAME_DUP;
2819
2820     /* look for it in the table first */
2821     dst = (PADNAME *)ptr_table_fetch(PL_ptr_table, src);
2822     if (dst)
2823         return dst;
2824
2825     if (!PadnamePV(src)) {
2826         dst = &PL_padname_undef;
2827         ptr_table_store(PL_ptr_table, src, dst);
2828         return dst;
2829     }
2830
2831     dst = PadnameOUTER(src)
2832      ? newPADNAMEouter(padname_dup(PADNAME_FROM_PV(PadnamePV(src)), param))
2833      : newPADNAMEpvn(PadnamePV(src), PadnameLEN(src));
2834     ptr_table_store(PL_ptr_table, src, dst);
2835     PadnameLEN(dst) = PadnameLEN(src);
2836     PadnameFLAGS(dst) = PadnameFLAGS(src);
2837     PadnameREFCNT(dst) = 0; /* The caller will increment it.  */
2838     PadnameTYPE   (dst) = (HV *)sv_dup_inc((SV *)PadnameTYPE(src), param);
2839     PadnameOURSTASH(dst) = (HV *)sv_dup_inc((SV *)PadnameOURSTASH(src),
2840                                             param);
2841     dst->xpadn_low  = src->xpadn_low;
2842     dst->xpadn_high = src->xpadn_high;
2843     dst->xpadn_gen  = src->xpadn_gen;
2844     return dst;
2845 }
2846
2847 #endif /* USE_ITHREADS */
2848
2849 /*
2850  * ex: set ts=8 sts=4 sw=4 et:
2851  */