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