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