4 * Copyright (C) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
5 * 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 by Larry Wall and others
7 * You may distribute under the terms of either the GNU General Public
8 * License or the Artistic License, as specified in the README file.
13 * 'You see: Mr. Drogo, he married poor Miss Primula Brandybuck. She was
14 * our Mr. Bilbo's first cousin on the mother's side (her mother being the
15 * youngest of the Old Took's daughters); and Mr. Drogo was his second
16 * cousin. So Mr. Frodo is his first *and* second cousin, once removed
17 * either way, as the saying is, if you follow me.' --the Gaffer
19 * [p.23 of _The Lord of the Rings_, I/i: "A Long-Expected Party"]
22 /* This file contains the functions that create, manipulate and optimize
23 * the OP structures that hold a compiled perl program.
25 * Note that during the build of miniperl, a temporary copy of this file
26 * is made, called opmini.c.
28 * A Perl program is compiled into a tree of OP nodes. Each op contains:
29 * * structural OP pointers to its children and siblings (op_sibling,
30 * op_first etc) that define the tree structure;
31 * * execution order OP pointers (op_next, plus sometimes op_other,
32 * op_lastop etc) that define the execution sequence plus variants;
33 * * a pointer to the C "pp" function that would execute the op;
34 * * any data specific to that op.
35 * For example, an OP_CONST op points to the pp_const() function and to an
36 * SV containing the constant value. When pp_const() is executed, its job
37 * is to push that SV onto the stack.
39 * OPs are mainly created by the newFOO() functions, which are mainly
40 * called from the parser (in perly.y) as the code is parsed. For example
41 * the Perl code $a + $b * $c would cause the equivalent of the following
42 * to be called (oversimplifying a bit):
44 * newBINOP(OP_ADD, flags,
46 * newBINOP(OP_MULTIPLY, flags, newSVREF($b), newSVREF($c))
49 * As the parser reduces low-level rules, it creates little op subtrees;
50 * as higher-level rules are resolved, these subtrees get joined together
51 * as branches on a bigger subtree, until eventually a top-level rule like
52 * a subroutine definition is reduced, at which point there is one large
55 * The execution order pointers (op_next) are generated as the subtrees
56 * are joined together. Consider this sub-expression: A*B + C/D: at the
57 * point when it's just been parsed, the op tree looks like:
65 * with the intended execution order being:
67 * [PREV] => A => B => [*] => C => D => [/] => [+] => [NEXT]
69 * At this point all the nodes' op_next pointers will have been set,
71 * * we don't know what the [NEXT] node will be yet;
72 * * we don't know what the [PREV] node will be yet, but when it gets
73 * created and needs its op_next set, it needs to be set to point to
74 * A, which is non-obvious.
75 * To handle both those cases, we temporarily set the top node's
76 * op_next to point to the first node to be executed in this subtree (A in
77 * this case). This means that initially a subtree's op_next chain,
78 * starting from the top node, will visit each node in execution sequence
79 * then point back at the top node.
80 * When we embed this subtree in a larger tree, its top op_next is used
81 * to get the start node, then is set to point to its new neighbour.
82 * For example the two separate [*],A,B and [/],C,D subtrees would
84 * [*] => A; A => B; B => [*]
86 * [/] => C; C => D; D => [/]
87 * When these two subtrees were joined together to make the [+] subtree,
88 * [+]'s op_next was set to [*]'s op_next, i.e. A; then [*]'s op_next was
89 * set to point to [/]'s op_next, i.e. C.
91 * This op_next linking is done by the LINKLIST() macro and its underlying
92 * op_linklist() function. Given a top-level op, if its op_next is
93 * non-null, it's already been linked, so leave it. Otherwise link it with
94 * its children as described above, possibly recursively if any of the
95 * children have a null op_next.
97 * In summary: given a subtree, its top-level node's op_next will either
99 * NULL: the subtree hasn't been LINKLIST()ed yet;
100 * fake: points to the start op for this subtree;
101 * real: once the subtree has been embedded into a larger tree
106 Here's an older description from Larry.
108 Perl's compiler is essentially a 3-pass compiler with interleaved phases:
112 An execution-order pass
114 The bottom-up pass is represented by all the "newOP" routines and
115 the ck_ routines. The bottom-upness is actually driven by yacc.
116 So at the point that a ck_ routine fires, we have no idea what the
117 context is, either upward in the syntax tree, or either forward or
118 backward in the execution order. (The bottom-up parser builds that
119 part of the execution order it knows about, but if you follow the "next"
120 links around, you'll find it's actually a closed loop through the
123 Whenever the bottom-up parser gets to a node that supplies context to
124 its components, it invokes that portion of the top-down pass that applies
125 to that part of the subtree (and marks the top node as processed, so
126 if a node further up supplies context, it doesn't have to take the
127 plunge again). As a particular subcase of this, as the new node is
128 built, it takes all the closed execution loops of its subcomponents
129 and links them into a new closed loop for the higher level node. But
130 it's still not the real execution order.
132 The actual execution order is not known till we get a grammar reduction
133 to a top-level unit like a subroutine or file that will be called by
134 "name" rather than via a "next" pointer. At that point, we can call
135 into peep() to do that code's portion of the 3rd pass. It has to be
136 recursive, but it's recursive on basic blocks, not on tree nodes.
139 /* To implement user lexical pragmas, there needs to be a way at run time to
140 get the compile time state of %^H for that block. Storing %^H in every
141 block (or even COP) would be very expensive, so a different approach is
142 taken. The (running) state of %^H is serialised into a tree of HE-like
143 structs. Stores into %^H are chained onto the current leaf as a struct
144 refcounted_he * with the key and the value. Deletes from %^H are saved
145 with a value of PL_sv_placeholder. The state of %^H at any point can be
146 turned back into a regular HV by walking back up the tree from that point's
147 leaf, ignoring any key you've already seen (placeholder or not), storing
148 the rest into the HV structure, then removing the placeholders. Hence
149 memory is only used to store the %^H deltas from the enclosing COP, rather
150 than the entire %^H on each COP.
152 To cause actions on %^H to write out the serialisation records, it has
153 magic type 'H'. This magic (itself) does nothing, but its presence causes
154 the values to gain magic type 'h', which has entries for set and clear.
155 C<Perl_magic_sethint> updates C<PL_compiling.cop_hints_hash> with a store
156 record, with deletes written by C<Perl_magic_clearhint>. C<SAVEHINTS>
157 saves the current C<PL_compiling.cop_hints_hash> on the save stack, so that
158 it will be correctly restored when any inner compiling scope is exited.
164 #include "keywords.h"
168 #define CALL_PEEP(o) PL_peepp(aTHX_ o)
169 #define CALL_RPEEP(o) PL_rpeepp(aTHX_ o)
170 #define CALL_OPFREEHOOK(o) if (PL_opfreehook) PL_opfreehook(aTHX_ o)
172 static const char array_passed_to_stat[] = "Array passed to stat will be coerced to a scalar";
174 /* Used to avoid recursion through the op tree in scalarvoid() and
178 #define DEFERRED_OP_STEP 100
179 #define DEFER_OP(o) \
181 if (UNLIKELY(defer_ix == (defer_stack_alloc-1))) { \
182 defer_stack_alloc += DEFERRED_OP_STEP; \
183 assert(defer_stack_alloc > 0); \
184 Renew(defer_stack, defer_stack_alloc, OP *); \
186 defer_stack[++defer_ix] = o; \
189 #define POP_DEFERRED_OP() (defer_ix >= 0 ? defer_stack[defer_ix--] : (OP *)NULL)
191 /* remove any leading "empty" ops from the op_next chain whose first
192 * node's address is stored in op_p. Store the updated address of the
193 * first node in op_p.
197 S_prune_chain_head(OP** op_p)
200 && ( (*op_p)->op_type == OP_NULL
201 || (*op_p)->op_type == OP_SCOPE
202 || (*op_p)->op_type == OP_SCALAR
203 || (*op_p)->op_type == OP_LINESEQ)
205 *op_p = (*op_p)->op_next;
209 /* See the explanatory comments above struct opslab in op.h. */
211 #ifdef PERL_DEBUG_READONLY_OPS
212 # define PERL_SLAB_SIZE 128
213 # define PERL_MAX_SLAB_SIZE 4096
214 # include <sys/mman.h>
217 #ifndef PERL_SLAB_SIZE
218 # define PERL_SLAB_SIZE 64
220 #ifndef PERL_MAX_SLAB_SIZE
221 # define PERL_MAX_SLAB_SIZE 2048
224 /* rounds up to nearest pointer */
225 #define SIZE_TO_PSIZE(x) (((x) + sizeof(I32 *) - 1)/sizeof(I32 *))
226 #define DIFF(o,p) ((size_t)((I32 **)(p) - (I32**)(o)))
229 S_new_slab(pTHX_ size_t sz)
231 #ifdef PERL_DEBUG_READONLY_OPS
232 OPSLAB *slab = (OPSLAB *) mmap(0, sz * sizeof(I32 *),
233 PROT_READ|PROT_WRITE,
234 MAP_ANON|MAP_PRIVATE, -1, 0);
235 DEBUG_m(PerlIO_printf(Perl_debug_log, "mapped %lu at %p\n",
236 (unsigned long) sz, slab));
237 if (slab == MAP_FAILED) {
238 perror("mmap failed");
241 slab->opslab_size = (U16)sz;
243 OPSLAB *slab = (OPSLAB *)PerlMemShared_calloc(sz, sizeof(I32 *));
246 /* The context is unused in non-Windows */
249 slab->opslab_first = (OPSLOT *)((I32 **)slab + sz - 1);
253 /* requires double parens and aTHX_ */
254 #define DEBUG_S_warn(args) \
256 PerlIO_printf(Perl_debug_log, "%s", SvPVx_nolen(Perl_mess args)) \
260 Perl_Slab_Alloc(pTHX_ size_t sz)
268 /* We only allocate ops from the slab during subroutine compilation.
269 We find the slab via PL_compcv, hence that must be non-NULL. It could
270 also be pointing to a subroutine which is now fully set up (CvROOT()
271 pointing to the top of the optree for that sub), or a subroutine
272 which isn't using the slab allocator. If our sanity checks aren't met,
273 don't use a slab, but allocate the OP directly from the heap. */
274 if (!PL_compcv || CvROOT(PL_compcv)
275 || (CvSTART(PL_compcv) && !CvSLABBED(PL_compcv)))
277 o = (OP*)PerlMemShared_calloc(1, sz);
281 /* While the subroutine is under construction, the slabs are accessed via
282 CvSTART(), to avoid needing to expand PVCV by one pointer for something
283 unneeded at runtime. Once a subroutine is constructed, the slabs are
284 accessed via CvROOT(). So if CvSTART() is NULL, no slab has been
285 allocated yet. See the commit message for 8be227ab5eaa23f2 for more
287 if (!CvSTART(PL_compcv)) {
289 (OP *)(slab = S_new_slab(aTHX_ PERL_SLAB_SIZE));
290 CvSLABBED_on(PL_compcv);
291 slab->opslab_refcnt = 2; /* one for the CV; one for the new OP */
293 else ++(slab = (OPSLAB *)CvSTART(PL_compcv))->opslab_refcnt;
295 opsz = SIZE_TO_PSIZE(sz);
296 sz = opsz + OPSLOT_HEADER_P;
298 /* The slabs maintain a free list of OPs. In particular, constant folding
299 will free up OPs, so it makes sense to re-use them where possible. A
300 freed up slot is used in preference to a new allocation. */
301 if (slab->opslab_freed) {
302 OP **too = &slab->opslab_freed;
304 DEBUG_S_warn((aTHX_ "found free op at %p, slab %p", (void*)o, (void*)slab));
305 while (o && DIFF(OpSLOT(o), OpSLOT(o)->opslot_next) < sz) {
306 DEBUG_S_warn((aTHX_ "Alas! too small"));
307 o = *(too = &o->op_next);
308 if (o) { DEBUG_S_warn((aTHX_ "found another free op at %p", (void*)o)); }
312 Zero(o, opsz, I32 *);
318 #define INIT_OPSLOT \
319 slot->opslot_slab = slab; \
320 slot->opslot_next = slab2->opslab_first; \
321 slab2->opslab_first = slot; \
322 o = &slot->opslot_op; \
325 /* The partially-filled slab is next in the chain. */
326 slab2 = slab->opslab_next ? slab->opslab_next : slab;
327 if ((space = DIFF(&slab2->opslab_slots, slab2->opslab_first)) < sz) {
328 /* Remaining space is too small. */
330 /* If we can fit a BASEOP, add it to the free chain, so as not
332 if (space >= SIZE_TO_PSIZE(sizeof(OP)) + OPSLOT_HEADER_P) {
333 slot = &slab2->opslab_slots;
335 o->op_type = OP_FREED;
336 o->op_next = slab->opslab_freed;
337 slab->opslab_freed = o;
340 /* Create a new slab. Make this one twice as big. */
341 slot = slab2->opslab_first;
342 while (slot->opslot_next) slot = slot->opslot_next;
343 slab2 = S_new_slab(aTHX_
344 (DIFF(slab2, slot)+1)*2 > PERL_MAX_SLAB_SIZE
346 : (DIFF(slab2, slot)+1)*2);
347 slab2->opslab_next = slab->opslab_next;
348 slab->opslab_next = slab2;
350 assert(DIFF(&slab2->opslab_slots, slab2->opslab_first) >= sz);
352 /* Create a new op slot */
353 slot = (OPSLOT *)((I32 **)slab2->opslab_first - sz);
354 assert(slot >= &slab2->opslab_slots);
355 if (DIFF(&slab2->opslab_slots, slot)
356 < SIZE_TO_PSIZE(sizeof(OP)) + OPSLOT_HEADER_P)
357 slot = &slab2->opslab_slots;
359 DEBUG_S_warn((aTHX_ "allocating op at %p, slab %p", (void*)o, (void*)slab));
362 #ifdef PERL_OP_PARENT
363 /* moresib == 0, op_sibling == 0 implies a solitary unattached op */
364 assert(!o->op_moresib);
365 assert(!o->op_sibparent);
373 #ifdef PERL_DEBUG_READONLY_OPS
375 Perl_Slab_to_ro(pTHX_ OPSLAB *slab)
377 PERL_ARGS_ASSERT_SLAB_TO_RO;
379 if (slab->opslab_readonly) return;
380 slab->opslab_readonly = 1;
381 for (; slab; slab = slab->opslab_next) {
382 /*DEBUG_U(PerlIO_printf(Perl_debug_log,"mprotect ->ro %lu at %p\n",
383 (unsigned long) slab->opslab_size, slab));*/
384 if (mprotect(slab, slab->opslab_size * sizeof(I32 *), PROT_READ))
385 Perl_warn(aTHX_ "mprotect for %p %lu failed with %d", slab,
386 (unsigned long)slab->opslab_size, errno);
391 Perl_Slab_to_rw(pTHX_ OPSLAB *const slab)
395 PERL_ARGS_ASSERT_SLAB_TO_RW;
397 if (!slab->opslab_readonly) return;
399 for (; slab2; slab2 = slab2->opslab_next) {
400 /*DEBUG_U(PerlIO_printf(Perl_debug_log,"mprotect ->rw %lu at %p\n",
401 (unsigned long) size, slab2));*/
402 if (mprotect((void *)slab2, slab2->opslab_size * sizeof(I32 *),
403 PROT_READ|PROT_WRITE)) {
404 Perl_warn(aTHX_ "mprotect RW for %p %lu failed with %d", slab,
405 (unsigned long)slab2->opslab_size, errno);
408 slab->opslab_readonly = 0;
412 # define Slab_to_rw(op) NOOP
415 /* This cannot possibly be right, but it was copied from the old slab
416 allocator, to which it was originally added, without explanation, in
419 # define PerlMemShared PerlMem
423 Perl_Slab_Free(pTHX_ void *op)
425 OP * const o = (OP *)op;
428 PERL_ARGS_ASSERT_SLAB_FREE;
430 if (!o->op_slabbed) {
432 PerlMemShared_free(op);
437 /* If this op is already freed, our refcount will get screwy. */
438 assert(o->op_type != OP_FREED);
439 o->op_type = OP_FREED;
440 o->op_next = slab->opslab_freed;
441 slab->opslab_freed = o;
442 DEBUG_S_warn((aTHX_ "free op at %p, recorded in slab %p", (void*)o, (void*)slab));
443 OpslabREFCNT_dec_padok(slab);
447 Perl_opslab_free_nopad(pTHX_ OPSLAB *slab)
449 const bool havepad = !!PL_comppad;
450 PERL_ARGS_ASSERT_OPSLAB_FREE_NOPAD;
453 PAD_SAVE_SETNULLPAD();
460 Perl_opslab_free(pTHX_ OPSLAB *slab)
463 PERL_ARGS_ASSERT_OPSLAB_FREE;
465 DEBUG_S_warn((aTHX_ "freeing slab %p", (void*)slab));
466 assert(slab->opslab_refcnt == 1);
468 slab2 = slab->opslab_next;
470 slab->opslab_refcnt = ~(size_t)0;
472 #ifdef PERL_DEBUG_READONLY_OPS
473 DEBUG_m(PerlIO_printf(Perl_debug_log, "Deallocate slab at %p\n",
475 if (munmap(slab, slab->opslab_size * sizeof(I32 *))) {
476 perror("munmap failed");
480 PerlMemShared_free(slab);
487 Perl_opslab_force_free(pTHX_ OPSLAB *slab)
492 size_t savestack_count = 0;
494 PERL_ARGS_ASSERT_OPSLAB_FORCE_FREE;
497 for (slot = slab2->opslab_first;
499 slot = slot->opslot_next) {
500 if (slot->opslot_op.op_type != OP_FREED
501 && !(slot->opslot_op.op_savefree
507 assert(slot->opslot_op.op_slabbed);
508 op_free(&slot->opslot_op);
509 if (slab->opslab_refcnt == 1) goto free;
512 } while ((slab2 = slab2->opslab_next));
513 /* > 1 because the CV still holds a reference count. */
514 if (slab->opslab_refcnt > 1) { /* still referenced by the savestack */
516 assert(savestack_count == slab->opslab_refcnt-1);
518 /* Remove the CV’s reference count. */
519 slab->opslab_refcnt--;
526 #ifdef PERL_DEBUG_READONLY_OPS
528 Perl_op_refcnt_inc(pTHX_ OP *o)
531 OPSLAB *const slab = o->op_slabbed ? OpSLAB(o) : NULL;
532 if (slab && slab->opslab_readonly) {
545 Perl_op_refcnt_dec(pTHX_ OP *o)
548 OPSLAB *const slab = o->op_slabbed ? OpSLAB(o) : NULL;
550 PERL_ARGS_ASSERT_OP_REFCNT_DEC;
552 if (slab && slab->opslab_readonly) {
554 result = --o->op_targ;
557 result = --o->op_targ;
563 * In the following definition, the ", (OP*)0" is just to make the compiler
564 * think the expression is of the right type: croak actually does a Siglongjmp.
566 #define CHECKOP(type,o) \
567 ((PL_op_mask && PL_op_mask[type]) \
568 ? ( op_free((OP*)o), \
569 Perl_croak(aTHX_ "'%s' trapped by operation mask", PL_op_desc[type]), \
571 : PL_check[type](aTHX_ (OP*)o))
573 #define RETURN_UNLIMITED_NUMBER (PERL_INT_MAX / 2)
575 #define OpTYPE_set(o,type) \
577 o->op_type = (OPCODE)type; \
578 o->op_ppaddr = PL_ppaddr[type]; \
582 S_no_fh_allowed(pTHX_ OP *o)
584 PERL_ARGS_ASSERT_NO_FH_ALLOWED;
586 yyerror(Perl_form(aTHX_ "Missing comma after first argument to %s function",
592 S_too_few_arguments_pv(pTHX_ OP *o, const char* name, U32 flags)
594 PERL_ARGS_ASSERT_TOO_FEW_ARGUMENTS_PV;
595 yyerror_pv(Perl_form(aTHX_ "Not enough arguments for %s", name), flags);
600 S_too_many_arguments_pv(pTHX_ OP *o, const char *name, U32 flags)
602 PERL_ARGS_ASSERT_TOO_MANY_ARGUMENTS_PV;
604 yyerror_pv(Perl_form(aTHX_ "Too many arguments for %s", name), flags);
609 S_bad_type_pv(pTHX_ I32 n, const char *t, const OP *o, const OP *kid)
611 PERL_ARGS_ASSERT_BAD_TYPE_PV;
613 yyerror_pv(Perl_form(aTHX_ "Type of arg %d to %s must be %s (not %s)",
614 (int)n, PL_op_desc[(o)->op_type], t, OP_DESC(kid)), 0);
617 /* remove flags var, its unused in all callers, move to to right end since gv
618 and kid are always the same */
620 S_bad_type_gv(pTHX_ I32 n, GV *gv, const OP *kid, const char *t)
622 SV * const namesv = cv_name((CV *)gv, NULL, 0);
623 PERL_ARGS_ASSERT_BAD_TYPE_GV;
625 yyerror_pv(Perl_form(aTHX_ "Type of arg %d to %"SVf" must be %s (not %s)",
626 (int)n, SVfARG(namesv), t, OP_DESC(kid)), SvUTF8(namesv));
630 S_no_bareword_allowed(pTHX_ OP *o)
632 PERL_ARGS_ASSERT_NO_BAREWORD_ALLOWED;
634 qerror(Perl_mess(aTHX_
635 "Bareword \"%"SVf"\" not allowed while \"strict subs\" in use",
637 o->op_private &= ~OPpCONST_STRICT; /* prevent warning twice about the same OP */
640 /* "register" allocation */
643 Perl_allocmy(pTHX_ const char *const name, const STRLEN len, const U32 flags)
646 const bool is_our = (PL_parser->in_my == KEY_our);
648 PERL_ARGS_ASSERT_ALLOCMY;
650 if (flags & ~SVf_UTF8)
651 Perl_croak(aTHX_ "panic: allocmy illegal flag bits 0x%" UVxf,
654 /* complain about "my $<special_var>" etc etc */
658 ((flags & SVf_UTF8) && isIDFIRST_utf8((U8 *)name+1)) ||
659 (name[1] == '_' && len > 2)))
661 if (!(flags & SVf_UTF8 && UTF8_IS_START(name[1]))
663 && (!isPRINT(name[1]) || strchr("\t\n\r\f", name[1]))) {
664 yyerror(Perl_form(aTHX_ "Can't use global %c^%c%.*s in \"%s\"",
665 name[0], toCTRL(name[1]), (int)(len - 2), name + 2,
666 PL_parser->in_my == KEY_state ? "state" : "my"));
668 yyerror_pv(Perl_form(aTHX_ "Can't use global %.*s in \"%s\"", (int) len, name,
669 PL_parser->in_my == KEY_state ? "state" : "my"), flags & SVf_UTF8);
673 /* allocate a spare slot and store the name in that slot */
675 off = pad_add_name_pvn(name, len,
676 (is_our ? padadd_OUR :
677 PL_parser->in_my == KEY_state ? padadd_STATE : 0),
678 PL_parser->in_my_stash,
680 /* $_ is always in main::, even with our */
681 ? (PL_curstash && !memEQs(name,len,"$_")
687 /* anon sub prototypes contains state vars should always be cloned,
688 * otherwise the state var would be shared between anon subs */
690 if (PL_parser->in_my == KEY_state && CvANON(PL_compcv))
691 CvCLONE_on(PL_compcv);
697 =head1 Optree Manipulation Functions
699 =for apidoc alloccopstash
701 Available only under threaded builds, this function allocates an entry in
702 C<PL_stashpad> for the stash passed to it.
709 Perl_alloccopstash(pTHX_ HV *hv)
711 PADOFFSET off = 0, o = 1;
712 bool found_slot = FALSE;
714 PERL_ARGS_ASSERT_ALLOCCOPSTASH;
716 if (PL_stashpad[PL_stashpadix] == hv) return PL_stashpadix;
718 for (; o < PL_stashpadmax; ++o) {
719 if (PL_stashpad[o] == hv) return PL_stashpadix = o;
720 if (!PL_stashpad[o] || SvTYPE(PL_stashpad[o]) != SVt_PVHV)
721 found_slot = TRUE, off = o;
724 Renew(PL_stashpad, PL_stashpadmax + 10, HV *);
725 Zero(PL_stashpad + PL_stashpadmax, 10, HV *);
726 off = PL_stashpadmax;
727 PL_stashpadmax += 10;
730 PL_stashpad[PL_stashpadix = off] = hv;
735 /* free the body of an op without examining its contents.
736 * Always use this rather than FreeOp directly */
739 S_op_destroy(pTHX_ OP *o)
747 =for apidoc Am|void|op_free|OP *o
749 Free an op. Only use this when an op is no longer linked to from any
756 Perl_op_free(pTHX_ OP *o)
760 SSize_t defer_ix = -1;
761 SSize_t defer_stack_alloc = 0;
762 OP **defer_stack = NULL;
766 /* Though ops may be freed twice, freeing the op after its slab is a
768 assert(!o || !o->op_slabbed || OpSLAB(o)->opslab_refcnt != ~(size_t)0);
769 /* During the forced freeing of ops after compilation failure, kidops
770 may be freed before their parents. */
771 if (!o || o->op_type == OP_FREED)
776 /* an op should only ever acquire op_private flags that we know about.
777 * If this fails, you may need to fix something in regen/op_private.
778 * Don't bother testing if:
779 * * the op_ppaddr doesn't match the op; someone may have
780 * overridden the op and be doing strange things with it;
781 * * we've errored, as op flags are often left in an
782 * inconsistent state then. Note that an error when
783 * compiling the main program leaves PL_parser NULL, so
784 * we can't spot faults in the main code, only
785 * evaled/required code */
787 if ( o->op_ppaddr == PL_ppaddr[o->op_type]
789 && !PL_parser->error_count)
791 assert(!(o->op_private & ~PL_op_private_valid[type]));
795 if (o->op_private & OPpREFCOUNTED) {
806 refcnt = OpREFCNT_dec(o);
809 /* Need to find and remove any pattern match ops from the list
810 we maintain for reset(). */
811 find_and_forget_pmops(o);
821 /* Call the op_free hook if it has been set. Do it now so that it's called
822 * at the right time for refcounted ops, but still before all of the kids
826 if (o->op_flags & OPf_KIDS) {
828 for (kid = cUNOPo->op_first; kid; kid = nextkid) {
829 nextkid = OpSIBLING(kid); /* Get before next freeing kid */
830 if (!kid || kid->op_type == OP_FREED)
831 /* During the forced freeing of ops after
832 compilation failure, kidops may be freed before
835 if (!(kid->op_flags & OPf_KIDS))
836 /* If it has no kids, just free it now */
843 type = (OPCODE)o->op_targ;
846 Slab_to_rw(OpSLAB(o));
848 /* COP* is not cleared by op_clear() so that we may track line
849 * numbers etc even after null() */
850 if (type == OP_NEXTSTATE || type == OP_DBSTATE) {
856 #ifdef DEBUG_LEAKING_SCALARS
860 } while ( (o = POP_DEFERRED_OP()) );
862 Safefree(defer_stack);
865 /* S_op_clear_gv(): free a GV attached to an OP */
869 void S_op_clear_gv(pTHX_ OP *o, PADOFFSET *ixp)
871 void S_op_clear_gv(pTHX_ OP *o, SV**svp)
875 GV *gv = (o->op_type == OP_GV || o->op_type == OP_GVSV
876 || o->op_type == OP_MULTIDEREF)
879 ? ((GV*)PAD_SVl(*ixp)) : NULL;
881 ? (GV*)(*svp) : NULL;
883 /* It's possible during global destruction that the GV is freed
884 before the optree. Whilst the SvREFCNT_inc is happy to bump from
885 0 to 1 on a freed SV, the corresponding SvREFCNT_dec from 1 to 0
886 will trigger an assertion failure, because the entry to sv_clear
887 checks that the scalar is not already freed. A check of for
888 !SvIS_FREED(gv) turns out to be invalid, because during global
889 destruction the reference count can be forced down to zero
890 (with SVf_BREAK set). In which case raising to 1 and then
891 dropping to 0 triggers cleanup before it should happen. I
892 *think* that this might actually be a general, systematic,
893 weakness of the whole idea of SVf_BREAK, in that code *is*
894 allowed to raise and lower references during global destruction,
895 so any *valid* code that happens to do this during global
896 destruction might well trigger premature cleanup. */
897 bool still_valid = gv && SvREFCNT(gv);
900 SvREFCNT_inc_simple_void(gv);
903 pad_swipe(*ixp, TRUE);
911 int try_downgrade = SvREFCNT(gv) == 2;
914 gv_try_downgrade(gv);
920 Perl_op_clear(pTHX_ OP *o)
925 PERL_ARGS_ASSERT_OP_CLEAR;
927 switch (o->op_type) {
928 case OP_NULL: /* Was holding old type, if any. */
931 case OP_ENTEREVAL: /* Was holding hints. */
932 case OP_ARGDEFELEM: /* Was holding signature index. */
936 if (!(o->op_flags & OPf_REF)
937 || (PL_check[o->op_type] != Perl_ck_ftst))
944 S_op_clear_gv(aTHX_ o, &(cPADOPx(o)->op_padix));
946 S_op_clear_gv(aTHX_ o, &(cSVOPx(o)->op_sv));
949 case OP_METHOD_REDIR:
950 case OP_METHOD_REDIR_SUPER:
952 if (cMETHOPx(o)->op_rclass_targ) {
953 pad_swipe(cMETHOPx(o)->op_rclass_targ, 1);
954 cMETHOPx(o)->op_rclass_targ = 0;
957 SvREFCNT_dec(cMETHOPx(o)->op_rclass_sv);
958 cMETHOPx(o)->op_rclass_sv = NULL;
960 case OP_METHOD_NAMED:
961 case OP_METHOD_SUPER:
962 SvREFCNT_dec(cMETHOPx(o)->op_u.op_meth_sv);
963 cMETHOPx(o)->op_u.op_meth_sv = NULL;
966 pad_swipe(o->op_targ, 1);
973 SvREFCNT_dec(cSVOPo->op_sv);
974 cSVOPo->op_sv = NULL;
977 Even if op_clear does a pad_free for the target of the op,
978 pad_free doesn't actually remove the sv that exists in the pad;
979 instead it lives on. This results in that it could be reused as
980 a target later on when the pad was reallocated.
983 pad_swipe(o->op_targ,1);
993 if (o->op_flags & (OPf_SPECIAL|OPf_STACKED|OPf_KIDS))
998 if (o->op_private & (OPpTRANS_FROM_UTF|OPpTRANS_TO_UTF)) {
999 assert(o->op_type == OP_TRANS || o->op_type == OP_TRANSR);
1001 if (cPADOPo->op_padix > 0) {
1002 pad_swipe(cPADOPo->op_padix, TRUE);
1003 cPADOPo->op_padix = 0;
1006 SvREFCNT_dec(cSVOPo->op_sv);
1007 cSVOPo->op_sv = NULL;
1011 PerlMemShared_free(cPVOPo->op_pv);
1012 cPVOPo->op_pv = NULL;
1016 op_free(cPMOPo->op_pmreplrootu.op_pmreplroot);
1020 if (cPMOPo->op_pmreplrootu.op_pmtargetoff) {
1021 pad_swipe(cPMOPo->op_pmreplrootu.op_pmtargetoff, TRUE);
1024 SvREFCNT_dec(MUTABLE_SV(cPMOPo->op_pmreplrootu.op_pmtargetgv));
1030 if (!(cPMOPo->op_pmflags & PMf_CODELIST_PRIVATE))
1031 op_free(cPMOPo->op_code_list);
1032 cPMOPo->op_code_list = NULL;
1033 forget_pmop(cPMOPo);
1034 cPMOPo->op_pmreplrootu.op_pmreplroot = NULL;
1035 /* we use the same protection as the "SAFE" version of the PM_ macros
1036 * here since sv_clean_all might release some PMOPs
1037 * after PL_regex_padav has been cleared
1038 * and the clearing of PL_regex_padav needs to
1039 * happen before sv_clean_all
1042 if(PL_regex_pad) { /* We could be in destruction */
1043 const IV offset = (cPMOPo)->op_pmoffset;
1044 ReREFCNT_dec(PM_GETRE(cPMOPo));
1045 PL_regex_pad[offset] = &PL_sv_undef;
1046 sv_catpvn_nomg(PL_regex_pad[0], (const char *)&offset,
1050 ReREFCNT_dec(PM_GETRE(cPMOPo));
1051 PM_SETRE(cPMOPo, NULL);
1057 PerlMemShared_free(cUNOP_AUXo->op_aux);
1062 UNOP_AUX_item *items = cUNOP_AUXo->op_aux;
1063 UV actions = items->uv;
1065 bool is_hash = FALSE;
1068 switch (actions & MDEREF_ACTION_MASK) {
1071 actions = (++items)->uv;
1074 case MDEREF_HV_padhv_helem:
1076 case MDEREF_AV_padav_aelem:
1077 pad_free((++items)->pad_offset);
1080 case MDEREF_HV_gvhv_helem:
1082 case MDEREF_AV_gvav_aelem:
1084 S_op_clear_gv(aTHX_ o, &((++items)->pad_offset));
1086 S_op_clear_gv(aTHX_ o, &((++items)->sv));
1090 case MDEREF_HV_gvsv_vivify_rv2hv_helem:
1092 case MDEREF_AV_gvsv_vivify_rv2av_aelem:
1094 S_op_clear_gv(aTHX_ o, &((++items)->pad_offset));
1096 S_op_clear_gv(aTHX_ o, &((++items)->sv));
1098 goto do_vivify_rv2xv_elem;
1100 case MDEREF_HV_padsv_vivify_rv2hv_helem:
1102 case MDEREF_AV_padsv_vivify_rv2av_aelem:
1103 pad_free((++items)->pad_offset);
1104 goto do_vivify_rv2xv_elem;
1106 case MDEREF_HV_pop_rv2hv_helem:
1107 case MDEREF_HV_vivify_rv2hv_helem:
1109 do_vivify_rv2xv_elem:
1110 case MDEREF_AV_pop_rv2av_aelem:
1111 case MDEREF_AV_vivify_rv2av_aelem:
1113 switch (actions & MDEREF_INDEX_MASK) {
1114 case MDEREF_INDEX_none:
1117 case MDEREF_INDEX_const:
1121 pad_swipe((++items)->pad_offset, 1);
1123 SvREFCNT_dec((++items)->sv);
1129 case MDEREF_INDEX_padsv:
1130 pad_free((++items)->pad_offset);
1132 case MDEREF_INDEX_gvsv:
1134 S_op_clear_gv(aTHX_ o, &((++items)->pad_offset));
1136 S_op_clear_gv(aTHX_ o, &((++items)->sv));
1141 if (actions & MDEREF_FLAG_last)
1154 actions >>= MDEREF_SHIFT;
1157 /* start of malloc is at op_aux[-1], where the length is
1159 PerlMemShared_free(cUNOP_AUXo->op_aux - 1);
1164 if (o->op_targ > 0) {
1165 pad_free(o->op_targ);
1171 S_cop_free(pTHX_ COP* cop)
1173 PERL_ARGS_ASSERT_COP_FREE;
1176 if (! specialWARN(cop->cop_warnings))
1177 PerlMemShared_free(cop->cop_warnings);
1178 cophh_free(CopHINTHASH_get(cop));
1179 if (PL_curcop == cop)
1184 S_forget_pmop(pTHX_ PMOP *const o
1187 HV * const pmstash = PmopSTASH(o);
1189 PERL_ARGS_ASSERT_FORGET_PMOP;
1191 if (pmstash && !SvIS_FREED(pmstash) && SvMAGICAL(pmstash)) {
1192 MAGIC * const mg = mg_find((const SV *)pmstash, PERL_MAGIC_symtab);
1194 PMOP **const array = (PMOP**) mg->mg_ptr;
1195 U32 count = mg->mg_len / sizeof(PMOP**);
1199 if (array[i] == o) {
1200 /* Found it. Move the entry at the end to overwrite it. */
1201 array[i] = array[--count];
1202 mg->mg_len = count * sizeof(PMOP**);
1203 /* Could realloc smaller at this point always, but probably
1204 not worth it. Probably worth free()ing if we're the
1207 Safefree(mg->mg_ptr);
1220 S_find_and_forget_pmops(pTHX_ OP *o)
1222 PERL_ARGS_ASSERT_FIND_AND_FORGET_PMOPS;
1224 if (o->op_flags & OPf_KIDS) {
1225 OP *kid = cUNOPo->op_first;
1227 switch (kid->op_type) {
1232 forget_pmop((PMOP*)kid);
1234 find_and_forget_pmops(kid);
1235 kid = OpSIBLING(kid);
1241 =for apidoc Am|void|op_null|OP *o
1243 Neutralizes an op when it is no longer needed, but is still linked to from
1250 Perl_op_null(pTHX_ OP *o)
1254 PERL_ARGS_ASSERT_OP_NULL;
1256 if (o->op_type == OP_NULL)
1259 o->op_targ = o->op_type;
1260 OpTYPE_set(o, OP_NULL);
1264 Perl_op_refcnt_lock(pTHX)
1265 PERL_TSA_ACQUIRE(PL_op_mutex)
1270 PERL_UNUSED_CONTEXT;
1275 Perl_op_refcnt_unlock(pTHX)
1276 PERL_TSA_RELEASE(PL_op_mutex)
1281 PERL_UNUSED_CONTEXT;
1287 =for apidoc op_sibling_splice
1289 A general function for editing the structure of an existing chain of
1290 op_sibling nodes. By analogy with the perl-level C<splice()> function, allows
1291 you to delete zero or more sequential nodes, replacing them with zero or
1292 more different nodes. Performs the necessary op_first/op_last
1293 housekeeping on the parent node and op_sibling manipulation on the
1294 children. The last deleted node will be marked as as the last node by
1295 updating the op_sibling/op_sibparent or op_moresib field as appropriate.
1297 Note that op_next is not manipulated, and nodes are not freed; that is the
1298 responsibility of the caller. It also won't create a new list op for an
1299 empty list etc; use higher-level functions like op_append_elem() for that.
1301 C<parent> is the parent node of the sibling chain. It may passed as C<NULL> if
1302 the splicing doesn't affect the first or last op in the chain.
1304 C<start> is the node preceding the first node to be spliced. Node(s)
1305 following it will be deleted, and ops will be inserted after it. If it is
1306 C<NULL>, the first node onwards is deleted, and nodes are inserted at the
1309 C<del_count> is the number of nodes to delete. If zero, no nodes are deleted.
1310 If -1 or greater than or equal to the number of remaining kids, all
1311 remaining kids are deleted.
1313 C<insert> is the first of a chain of nodes to be inserted in place of the nodes.
1314 If C<NULL>, no nodes are inserted.
1316 The head of the chain of deleted ops is returned, or C<NULL> if no ops were
1321 action before after returns
1322 ------ ----- ----- -------
1325 splice(P, A, 2, X-Y-Z) | | B-C
1329 splice(P, NULL, 1, X-Y) | | A
1333 splice(P, NULL, 3, NULL) | | A-B-C
1337 splice(P, B, 0, X-Y) | | NULL
1341 For lower-level direct manipulation of C<op_sibparent> and C<op_moresib>,
1342 see C<L</OpMORESIB_set>>, C<L</OpLASTSIB_set>>, C<L</OpMAYBESIB_set>>.
1348 Perl_op_sibling_splice(OP *parent, OP *start, int del_count, OP* insert)
1352 OP *last_del = NULL;
1353 OP *last_ins = NULL;
1356 first = OpSIBLING(start);
1360 first = cLISTOPx(parent)->op_first;
1362 assert(del_count >= -1);
1364 if (del_count && first) {
1366 while (--del_count && OpHAS_SIBLING(last_del))
1367 last_del = OpSIBLING(last_del);
1368 rest = OpSIBLING(last_del);
1369 OpLASTSIB_set(last_del, NULL);
1376 while (OpHAS_SIBLING(last_ins))
1377 last_ins = OpSIBLING(last_ins);
1378 OpMAYBESIB_set(last_ins, rest, NULL);
1384 OpMAYBESIB_set(start, insert, NULL);
1389 cLISTOPx(parent)->op_first = insert;
1391 parent->op_flags |= OPf_KIDS;
1393 parent->op_flags &= ~OPf_KIDS;
1397 /* update op_last etc */
1404 /* ought to use OP_CLASS(parent) here, but that can't handle
1405 * ex-foo OP_NULL ops. Also note that XopENTRYCUSTOM() can't
1407 type = parent->op_type;
1408 if (type == OP_CUSTOM) {
1410 type = XopENTRYCUSTOM(parent, xop_class);
1413 if (type == OP_NULL)
1414 type = parent->op_targ;
1415 type = PL_opargs[type] & OA_CLASS_MASK;
1418 lastop = last_ins ? last_ins : start ? start : NULL;
1419 if ( type == OA_BINOP
1420 || type == OA_LISTOP
1424 cLISTOPx(parent)->op_last = lastop;
1427 OpLASTSIB_set(lastop, parent);
1429 return last_del ? first : NULL;
1432 Perl_croak_nocontext("panic: op_sibling_splice(): NULL parent");
1436 #ifdef PERL_OP_PARENT
1439 =for apidoc op_parent
1441 Returns the parent OP of C<o>, if it has a parent. Returns C<NULL> otherwise.
1442 This function is only available on perls built with C<-DPERL_OP_PARENT>.
1448 Perl_op_parent(OP *o)
1450 PERL_ARGS_ASSERT_OP_PARENT;
1451 while (OpHAS_SIBLING(o))
1453 return o->op_sibparent;
1459 /* replace the sibling following start with a new UNOP, which becomes
1460 * the parent of the original sibling; e.g.
1462 * op_sibling_newUNOP(P, A, unop-args...)
1470 * where U is the new UNOP.
1472 * parent and start args are the same as for op_sibling_splice();
1473 * type and flags args are as newUNOP().
1475 * Returns the new UNOP.
1479 S_op_sibling_newUNOP(pTHX_ OP *parent, OP *start, I32 type, I32 flags)
1483 kid = op_sibling_splice(parent, start, 1, NULL);
1484 newop = newUNOP(type, flags, kid);
1485 op_sibling_splice(parent, start, 0, newop);
1490 /* lowest-level newLOGOP-style function - just allocates and populates
1491 * the struct. Higher-level stuff should be done by S_new_logop() /
1492 * newLOGOP(). This function exists mainly to avoid op_first assignment
1493 * being spread throughout this file.
1497 Perl_alloc_LOGOP(pTHX_ I32 type, OP *first, OP* other)
1502 NewOp(1101, logop, 1, LOGOP);
1503 OpTYPE_set(logop, type);
1504 logop->op_first = first;
1505 logop->op_other = other;
1506 logop->op_flags = OPf_KIDS;
1507 while (kid && OpHAS_SIBLING(kid))
1508 kid = OpSIBLING(kid);
1510 OpLASTSIB_set(kid, (OP*)logop);
1515 /* Contextualizers */
1518 =for apidoc Am|OP *|op_contextualize|OP *o|I32 context
1520 Applies a syntactic context to an op tree representing an expression.
1521 C<o> is the op tree, and C<context> must be C<G_SCALAR>, C<G_ARRAY>,
1522 or C<G_VOID> to specify the context to apply. The modified op tree
1529 Perl_op_contextualize(pTHX_ OP *o, I32 context)
1531 PERL_ARGS_ASSERT_OP_CONTEXTUALIZE;
1533 case G_SCALAR: return scalar(o);
1534 case G_ARRAY: return list(o);
1535 case G_VOID: return scalarvoid(o);
1537 Perl_croak(aTHX_ "panic: op_contextualize bad context %ld",
1544 =for apidoc Am|OP*|op_linklist|OP *o
1545 This function is the implementation of the L</LINKLIST> macro. It should
1546 not be called directly.
1552 Perl_op_linklist(pTHX_ OP *o)
1556 PERL_ARGS_ASSERT_OP_LINKLIST;
1561 /* establish postfix order */
1562 first = cUNOPo->op_first;
1565 o->op_next = LINKLIST(first);
1568 OP *sibl = OpSIBLING(kid);
1570 kid->op_next = LINKLIST(sibl);
1585 S_scalarkids(pTHX_ OP *o)
1587 if (o && o->op_flags & OPf_KIDS) {
1589 for (kid = cLISTOPo->op_first; kid; kid = OpSIBLING(kid))
1596 S_scalarboolean(pTHX_ OP *o)
1598 PERL_ARGS_ASSERT_SCALARBOOLEAN;
1600 if ((o->op_type == OP_SASSIGN && cBINOPo->op_first->op_type == OP_CONST &&
1601 !(cBINOPo->op_first->op_flags & OPf_SPECIAL)) ||
1602 (o->op_type == OP_NOT && cUNOPo->op_first->op_type == OP_SASSIGN &&
1603 cBINOPx(cUNOPo->op_first)->op_first->op_type == OP_CONST &&
1604 !(cBINOPx(cUNOPo->op_first)->op_first->op_flags & OPf_SPECIAL))) {
1605 if (ckWARN(WARN_SYNTAX)) {
1606 const line_t oldline = CopLINE(PL_curcop);
1608 if (PL_parser && PL_parser->copline != NOLINE) {
1609 /* This ensures that warnings are reported at the first line
1610 of the conditional, not the last. */
1611 CopLINE_set(PL_curcop, PL_parser->copline);
1613 Perl_warner(aTHX_ packWARN(WARN_SYNTAX), "Found = in conditional, should be ==");
1614 CopLINE_set(PL_curcop, oldline);
1621 S_op_varname_subscript(pTHX_ const OP *o, int subscript_type)
1624 assert(o->op_type == OP_PADAV || o->op_type == OP_RV2AV ||
1625 o->op_type == OP_PADHV || o->op_type == OP_RV2HV);
1627 const char funny = o->op_type == OP_PADAV
1628 || o->op_type == OP_RV2AV ? '@' : '%';
1629 if (o->op_type == OP_RV2AV || o->op_type == OP_RV2HV) {
1631 if (cUNOPo->op_first->op_type != OP_GV
1632 || !(gv = cGVOPx_gv(cUNOPo->op_first)))
1634 return varname(gv, funny, 0, NULL, 0, subscript_type);
1637 varname(MUTABLE_GV(PL_compcv), funny, o->op_targ, NULL, 0, subscript_type);
1642 S_op_varname(pTHX_ const OP *o)
1644 return S_op_varname_subscript(aTHX_ o, 1);
1648 S_op_pretty(pTHX_ const OP *o, SV **retsv, const char **retpv)
1649 { /* or not so pretty :-) */
1650 if (o->op_type == OP_CONST) {
1652 if (SvPOK(*retsv)) {
1654 *retsv = sv_newmortal();
1655 pv_pretty(*retsv, SvPVX_const(sv), SvCUR(sv), 32, NULL, NULL,
1656 PERL_PV_PRETTY_DUMP |PERL_PV_ESCAPE_UNI_DETECT);
1658 else if (!SvOK(*retsv))
1661 else *retpv = "...";
1665 S_scalar_slice_warning(pTHX_ const OP *o)
1669 o->op_type == OP_HSLICE ? '{' : '[';
1671 o->op_type == OP_HSLICE ? '}' : ']';
1673 SV *keysv = NULL; /* just to silence compiler warnings */
1674 const char *key = NULL;
1676 if (!(o->op_private & OPpSLICEWARNING))
1678 if (PL_parser && PL_parser->error_count)
1679 /* This warning can be nonsensical when there is a syntax error. */
1682 kid = cLISTOPo->op_first;
1683 kid = OpSIBLING(kid); /* get past pushmark */
1684 /* weed out false positives: any ops that can return lists */
1685 switch (kid->op_type) {
1711 /* Don't warn if we have a nulled list either. */
1712 if (kid->op_type == OP_NULL && kid->op_targ == OP_LIST)
1715 assert(OpSIBLING(kid));
1716 name = S_op_varname(aTHX_ OpSIBLING(kid));
1717 if (!name) /* XS module fiddling with the op tree */
1719 S_op_pretty(aTHX_ kid, &keysv, &key);
1720 assert(SvPOK(name));
1721 sv_chop(name,SvPVX(name)+1);
1723 /* diag_listed_as: Scalar value @%s[%s] better written as $%s[%s] */
1724 Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
1725 "Scalar value @%"SVf"%c%s%c better written as $%"SVf
1727 SVfARG(name), lbrack, key, rbrack, SVfARG(name),
1728 lbrack, key, rbrack);
1730 /* diag_listed_as: Scalar value @%s[%s] better written as $%s[%s] */
1731 Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
1732 "Scalar value @%"SVf"%c%"SVf"%c better written as $%"
1734 SVfARG(name), lbrack, SVfARG(keysv), rbrack,
1735 SVfARG(name), lbrack, SVfARG(keysv), rbrack);
1739 Perl_scalar(pTHX_ OP *o)
1743 /* assumes no premature commitment */
1744 if (!o || (PL_parser && PL_parser->error_count)
1745 || (o->op_flags & OPf_WANT)
1746 || o->op_type == OP_RETURN)
1751 o->op_flags = (o->op_flags & ~OPf_WANT) | OPf_WANT_SCALAR;
1753 switch (o->op_type) {
1755 scalar(cBINOPo->op_first);
1756 if (o->op_private & OPpREPEAT_DOLIST) {
1757 kid = cLISTOPx(cUNOPo->op_first)->op_first;
1758 assert(kid->op_type == OP_PUSHMARK);
1759 if (OpHAS_SIBLING(kid) && !OpHAS_SIBLING(OpSIBLING(kid))) {
1760 op_null(cLISTOPx(cUNOPo->op_first)->op_first);
1761 o->op_private &=~ OPpREPEAT_DOLIST;
1768 for (kid = OpSIBLING(cUNOPo->op_first); kid; kid = OpSIBLING(kid))
1778 if (o->op_flags & OPf_KIDS) {
1779 for (kid = cUNOPo->op_first; kid; kid = OpSIBLING(kid))
1785 kid = cLISTOPo->op_first;
1787 kid = OpSIBLING(kid);
1790 OP *sib = OpSIBLING(kid);
1791 if (sib && kid->op_type != OP_LEAVEWHEN
1792 && ( OpHAS_SIBLING(sib) || sib->op_type != OP_NULL
1793 || ( sib->op_targ != OP_NEXTSTATE
1794 && sib->op_targ != OP_DBSTATE )))
1800 PL_curcop = &PL_compiling;
1805 kid = cLISTOPo->op_first;
1808 Perl_ck_warner(aTHX_ packWARN(WARN_VOID), "Useless use of sort in scalar context");
1813 /* Warn about scalar context */
1814 const char lbrack = o->op_type == OP_KVHSLICE ? '{' : '[';
1815 const char rbrack = o->op_type == OP_KVHSLICE ? '}' : ']';
1818 const char *key = NULL;
1820 /* This warning can be nonsensical when there is a syntax error. */
1821 if (PL_parser && PL_parser->error_count)
1824 if (!ckWARN(WARN_SYNTAX)) break;
1826 kid = cLISTOPo->op_first;
1827 kid = OpSIBLING(kid); /* get past pushmark */
1828 assert(OpSIBLING(kid));
1829 name = S_op_varname(aTHX_ OpSIBLING(kid));
1830 if (!name) /* XS module fiddling with the op tree */
1832 S_op_pretty(aTHX_ kid, &keysv, &key);
1833 assert(SvPOK(name));
1834 sv_chop(name,SvPVX(name)+1);
1836 /* diag_listed_as: %%s[%s] in scalar context better written as $%s[%s] */
1837 Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
1838 "%%%"SVf"%c%s%c in scalar context better written "
1840 SVfARG(name), lbrack, key, rbrack, SVfARG(name),
1841 lbrack, key, rbrack);
1843 /* diag_listed_as: %%s[%s] in scalar context better written as $%s[%s] */
1844 Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
1845 "%%%"SVf"%c%"SVf"%c in scalar context better "
1846 "written as $%"SVf"%c%"SVf"%c",
1847 SVfARG(name), lbrack, SVfARG(keysv), rbrack,
1848 SVfARG(name), lbrack, SVfARG(keysv), rbrack);
1855 Perl_scalarvoid(pTHX_ OP *arg)
1861 SSize_t defer_stack_alloc = 0;
1862 SSize_t defer_ix = -1;
1863 OP **defer_stack = NULL;
1866 PERL_ARGS_ASSERT_SCALARVOID;
1869 SV *useless_sv = NULL;
1870 const char* useless = NULL;
1872 if (o->op_type == OP_NEXTSTATE
1873 || o->op_type == OP_DBSTATE
1874 || (o->op_type == OP_NULL && (o->op_targ == OP_NEXTSTATE
1875 || o->op_targ == OP_DBSTATE)))
1876 PL_curcop = (COP*)o; /* for warning below */
1878 /* assumes no premature commitment */
1879 want = o->op_flags & OPf_WANT;
1880 if ((want && want != OPf_WANT_SCALAR)
1881 || (PL_parser && PL_parser->error_count)
1882 || o->op_type == OP_RETURN || o->op_type == OP_REQUIRE || o->op_type == OP_LEAVEWHEN)
1887 if ((o->op_private & OPpTARGET_MY)
1888 && (PL_opargs[o->op_type] & OA_TARGLEX))/* OPp share the meaning */
1890 /* newASSIGNOP has already applied scalar context, which we
1891 leave, as if this op is inside SASSIGN. */
1895 o->op_flags = (o->op_flags & ~OPf_WANT) | OPf_WANT_VOID;
1897 switch (o->op_type) {
1899 if (!(PL_opargs[o->op_type] & OA_FOLDCONST))
1903 if (o->op_flags & OPf_STACKED)
1905 if (o->op_type == OP_REPEAT)
1906 scalar(cBINOPo->op_first);
1909 if (o->op_private == 4)
1944 case OP_GETSOCKNAME:
1945 case OP_GETPEERNAME:
1950 case OP_GETPRIORITY:
1975 useless = OP_DESC(o);
1985 case OP_AELEMFAST_LEX:
1989 if (!(o->op_private & (OPpLVAL_INTRO|OPpOUR_INTRO)))
1990 /* Otherwise it's "Useless use of grep iterator" */
1991 useless = OP_DESC(o);
1995 kid = cLISTOPo->op_first;
1996 if (kid && kid->op_type == OP_PUSHRE
1998 && !(o->op_flags & OPf_STACKED)
2000 && !((PMOP*)kid)->op_pmreplrootu.op_pmtargetoff
2002 && !((PMOP*)kid)->op_pmreplrootu.op_pmtargetgv
2005 useless = OP_DESC(o);
2009 kid = cUNOPo->op_first;
2010 if (kid->op_type != OP_MATCH && kid->op_type != OP_SUBST &&
2011 kid->op_type != OP_TRANS && kid->op_type != OP_TRANSR) {
2014 useless = "negative pattern binding (!~)";
2018 if (cPMOPo->op_pmflags & PMf_NONDESTRUCT)
2019 useless = "non-destructive substitution (s///r)";
2023 useless = "non-destructive transliteration (tr///r)";
2030 if (!(o->op_private & (OPpLVAL_INTRO|OPpOUR_INTRO)) &&
2031 (!OpHAS_SIBLING(o) || OpSIBLING(o)->op_type != OP_READLINE))
2032 useless = "a variable";
2037 if (cSVOPo->op_private & OPpCONST_STRICT)
2038 no_bareword_allowed(o);
2040 if (ckWARN(WARN_VOID)) {
2042 /* don't warn on optimised away booleans, eg
2043 * use constant Foo, 5; Foo || print; */
2044 if (cSVOPo->op_private & OPpCONST_SHORTCIRCUIT)
2046 /* the constants 0 and 1 are permitted as they are
2047 conventionally used as dummies in constructs like
2048 1 while some_condition_with_side_effects; */
2049 else if (SvNIOK(sv) && ((nv = SvNV(sv)) == 0.0 || nv == 1.0))
2051 else if (SvPOK(sv)) {
2052 SV * const dsv = newSVpvs("");
2054 = Perl_newSVpvf(aTHX_
2056 pv_pretty(dsv, SvPVX_const(sv),
2057 SvCUR(sv), 32, NULL, NULL,
2059 | PERL_PV_ESCAPE_NOCLEAR
2060 | PERL_PV_ESCAPE_UNI_DETECT));
2061 SvREFCNT_dec_NN(dsv);
2063 else if (SvOK(sv)) {
2064 useless_sv = Perl_newSVpvf(aTHX_ "a constant (%"SVf")", SVfARG(sv));
2067 useless = "a constant (undef)";
2070 op_null(o); /* don't execute or even remember it */
2074 OpTYPE_set(o, OP_PREINC); /* pre-increment is faster */
2078 OpTYPE_set(o, OP_PREDEC); /* pre-decrement is faster */
2082 OpTYPE_set(o, OP_I_PREINC); /* pre-increment is faster */
2086 OpTYPE_set(o, OP_I_PREDEC); /* pre-decrement is faster */
2091 UNOP *refgen, *rv2cv;
2094 if ((o->op_private & ~OPpASSIGN_BACKWARDS) != 2)
2097 rv2gv = ((BINOP *)o)->op_last;
2098 if (!rv2gv || rv2gv->op_type != OP_RV2GV)
2101 refgen = (UNOP *)((BINOP *)o)->op_first;
2103 if (!refgen || (refgen->op_type != OP_REFGEN
2104 && refgen->op_type != OP_SREFGEN))
2107 exlist = (LISTOP *)refgen->op_first;
2108 if (!exlist || exlist->op_type != OP_NULL
2109 || exlist->op_targ != OP_LIST)
2112 if (exlist->op_first->op_type != OP_PUSHMARK
2113 && exlist->op_first != exlist->op_last)
2116 rv2cv = (UNOP*)exlist->op_last;
2118 if (rv2cv->op_type != OP_RV2CV)
2121 assert ((rv2gv->op_private & OPpDONT_INIT_GV) == 0);
2122 assert ((o->op_private & OPpASSIGN_CV_TO_GV) == 0);
2123 assert ((rv2cv->op_private & OPpMAY_RETURN_CONSTANT) == 0);
2125 o->op_private |= OPpASSIGN_CV_TO_GV;
2126 rv2gv->op_private |= OPpDONT_INIT_GV;
2127 rv2cv->op_private |= OPpMAY_RETURN_CONSTANT;
2139 kid = cLOGOPo->op_first;
2140 if (kid->op_type == OP_NOT
2141 && (kid->op_flags & OPf_KIDS)) {
2142 if (o->op_type == OP_AND) {
2143 OpTYPE_set(o, OP_OR);
2145 OpTYPE_set(o, OP_AND);
2155 for (kid = OpSIBLING(cUNOPo->op_first); kid; kid = OpSIBLING(kid))
2156 if (!(kid->op_flags & OPf_KIDS))
2163 if (o->op_flags & OPf_STACKED)
2170 if (!(o->op_flags & OPf_KIDS))
2181 for (kid = cLISTOPo->op_first; kid; kid = OpSIBLING(kid))
2182 if (!(kid->op_flags & OPf_KIDS))
2188 /* If the first kid after pushmark is something that the padrange
2189 optimisation would reject, then null the list and the pushmark.
2191 if ((kid = cLISTOPo->op_first)->op_type == OP_PUSHMARK
2192 && ( !(kid = OpSIBLING(kid))
2193 || ( kid->op_type != OP_PADSV
2194 && kid->op_type != OP_PADAV
2195 && kid->op_type != OP_PADHV)
2196 || kid->op_private & ~OPpLVAL_INTRO
2197 || !(kid = OpSIBLING(kid))
2198 || ( kid->op_type != OP_PADSV
2199 && kid->op_type != OP_PADAV
2200 && kid->op_type != OP_PADHV)
2201 || kid->op_private & ~OPpLVAL_INTRO)
2203 op_null(cUNOPo->op_first); /* NULL the pushmark */
2204 op_null(o); /* NULL the list */
2216 /* mortalise it, in case warnings are fatal. */
2217 Perl_ck_warner(aTHX_ packWARN(WARN_VOID),
2218 "Useless use of %"SVf" in void context",
2219 SVfARG(sv_2mortal(useless_sv)));
2222 Perl_ck_warner(aTHX_ packWARN(WARN_VOID),
2223 "Useless use of %s in void context",
2226 } while ( (o = POP_DEFERRED_OP()) );
2228 Safefree(defer_stack);
2234 S_listkids(pTHX_ OP *o)
2236 if (o && o->op_flags & OPf_KIDS) {
2238 for (kid = cLISTOPo->op_first; kid; kid = OpSIBLING(kid))
2245 Perl_list(pTHX_ OP *o)
2249 /* assumes no premature commitment */
2250 if (!o || (o->op_flags & OPf_WANT)
2251 || (PL_parser && PL_parser->error_count)
2252 || o->op_type == OP_RETURN)
2257 if ((o->op_private & OPpTARGET_MY)
2258 && (PL_opargs[o->op_type] & OA_TARGLEX))/* OPp share the meaning */
2260 return o; /* As if inside SASSIGN */
2263 o->op_flags = (o->op_flags & ~OPf_WANT) | OPf_WANT_LIST;
2265 switch (o->op_type) {
2267 list(cBINOPo->op_first);
2270 if (o->op_private & OPpREPEAT_DOLIST
2271 && !(o->op_flags & OPf_STACKED))
2273 list(cBINOPo->op_first);
2274 kid = cBINOPo->op_last;
2275 if (kid->op_type == OP_CONST && SvIOK(kSVOP_sv)
2276 && SvIVX(kSVOP_sv) == 1)
2278 op_null(o); /* repeat */
2279 op_null(cUNOPx(cBINOPo->op_first)->op_first);/* pushmark */
2281 op_free(op_sibling_splice(o, cBINOPo->op_first, 1, NULL));
2288 for (kid = OpSIBLING(cUNOPo->op_first); kid; kid = OpSIBLING(kid))
2296 if (!(o->op_flags & OPf_KIDS))
2298 if (!o->op_next && cUNOPo->op_first->op_type == OP_FLOP) {
2299 list(cBINOPo->op_first);
2300 return gen_constant_list(o);
2306 if (cLISTOPo->op_first->op_type == OP_PUSHMARK) {
2307 op_null(cUNOPo->op_first); /* NULL the pushmark */
2308 op_null(o); /* NULL the list */
2313 kid = cLISTOPo->op_first;
2315 kid = OpSIBLING(kid);
2318 OP *sib = OpSIBLING(kid);
2319 if (sib && kid->op_type != OP_LEAVEWHEN)
2325 PL_curcop = &PL_compiling;
2329 kid = cLISTOPo->op_first;
2336 S_scalarseq(pTHX_ OP *o)
2339 const OPCODE type = o->op_type;
2341 if (type == OP_LINESEQ || type == OP_SCOPE ||
2342 type == OP_LEAVE || type == OP_LEAVETRY)
2345 for (kid = cLISTOPo->op_first; kid; kid = sib) {
2346 if ((sib = OpSIBLING(kid))
2347 && ( OpHAS_SIBLING(sib) || sib->op_type != OP_NULL
2348 || ( sib->op_targ != OP_NEXTSTATE
2349 && sib->op_targ != OP_DBSTATE )))
2354 PL_curcop = &PL_compiling;
2356 o->op_flags &= ~OPf_PARENS;
2357 if (PL_hints & HINT_BLOCK_SCOPE)
2358 o->op_flags |= OPf_PARENS;
2361 o = newOP(OP_STUB, 0);
2366 S_modkids(pTHX_ OP *o, I32 type)
2368 if (o && o->op_flags & OPf_KIDS) {
2370 for (kid = cLISTOPo->op_first; kid; kid = OpSIBLING(kid))
2371 op_lvalue(kid, type);
2377 /* for a helem/hslice/kvslice, if its a fixed hash, croak on invalid
2378 * const fields. Also, convert CONST keys to HEK-in-SVs.
2379 * rop is the op that retrieves the hash;
2380 * key_op is the first key
2384 S_check_hash_fields_and_hekify(pTHX_ UNOP *rop, SVOP *key_op)
2390 /* find the padsv corresponding to $lex->{} or @{$lex}{} */
2392 if (rop->op_first->op_type == OP_PADSV)
2393 /* @$hash{qw(keys here)} */
2394 rop = (UNOP*)rop->op_first;
2396 /* @{$hash}{qw(keys here)} */
2397 if (rop->op_first->op_type == OP_SCOPE
2398 && cLISTOPx(rop->op_first)->op_last->op_type == OP_PADSV)
2400 rop = (UNOP*)cLISTOPx(rop->op_first)->op_last;
2407 lexname = NULL; /* just to silence compiler warnings */
2408 fields = NULL; /* just to silence compiler warnings */
2412 && (lexname = padnamelist_fetch(PL_comppad_name, rop->op_targ),
2413 SvPAD_TYPED(lexname))
2414 && (fields = (GV**)hv_fetchs(PadnameTYPE(lexname), "FIELDS", FALSE))
2415 && isGV(*fields) && GvHV(*fields);
2417 for (; key_op; key_op = (SVOP*)OpSIBLING(key_op)) {
2419 if (key_op->op_type != OP_CONST)
2421 svp = cSVOPx_svp(key_op);
2423 /* make sure it's not a bareword under strict subs */
2424 if (key_op->op_private & OPpCONST_BARE &&
2425 key_op->op_private & OPpCONST_STRICT)
2427 no_bareword_allowed((OP*)key_op);
2430 /* Make the CONST have a shared SV */
2431 if ( !SvIsCOW_shared_hash(sv = *svp)
2432 && SvTYPE(sv) < SVt_PVMG
2437 const char * const key = SvPV_const(sv, *(STRLEN*)&keylen);
2438 SV *nsv = newSVpvn_share(key, SvUTF8(sv) ? -keylen : keylen, 0);
2439 SvREFCNT_dec_NN(sv);
2444 && !hv_fetch_ent(GvHV(*fields), *svp, FALSE, 0))
2446 Perl_croak(aTHX_ "No such class field \"%"SVf"\" "
2447 "in variable %"PNf" of type %"HEKf,
2448 SVfARG(*svp), PNfARG(lexname),
2449 HEKfARG(HvNAME_HEK(PadnameTYPE(lexname))));
2456 =for apidoc finalize_optree
2458 This function finalizes the optree. Should be called directly after
2459 the complete optree is built. It does some additional
2460 checking which can't be done in the normal C<ck_>xxx functions and makes
2461 the tree thread-safe.
2466 Perl_finalize_optree(pTHX_ OP* o)
2468 PERL_ARGS_ASSERT_FINALIZE_OPTREE;
2471 SAVEVPTR(PL_curcop);
2479 /* Relocate sv to the pad for thread safety.
2480 * Despite being a "constant", the SV is written to,
2481 * for reference counts, sv_upgrade() etc. */
2482 PERL_STATIC_INLINE void
2483 S_op_relocate_sv(pTHX_ SV** svp, PADOFFSET* targp)
2486 PERL_ARGS_ASSERT_OP_RELOCATE_SV;
2488 ix = pad_alloc(OP_CONST, SVf_READONLY);
2489 SvREFCNT_dec(PAD_SVl(ix));
2490 PAD_SETSV(ix, *svp);
2491 /* XXX I don't know how this isn't readonly already. */
2492 if (!SvIsCOW(PAD_SVl(ix))) SvREADONLY_on(PAD_SVl(ix));
2500 S_finalize_op(pTHX_ OP* o)
2502 PERL_ARGS_ASSERT_FINALIZE_OP;
2504 assert(o->op_type != OP_FREED);
2506 switch (o->op_type) {
2509 PL_curcop = ((COP*)o); /* for warnings */
2512 if (OpHAS_SIBLING(o)) {
2513 OP *sib = OpSIBLING(o);
2514 if (( sib->op_type == OP_NEXTSTATE || sib->op_type == OP_DBSTATE)
2515 && ckWARN(WARN_EXEC)
2516 && OpHAS_SIBLING(sib))
2518 const OPCODE type = OpSIBLING(sib)->op_type;
2519 if (type != OP_EXIT && type != OP_WARN && type != OP_DIE) {
2520 const line_t oldline = CopLINE(PL_curcop);
2521 CopLINE_set(PL_curcop, CopLINE((COP*)sib));
2522 Perl_warner(aTHX_ packWARN(WARN_EXEC),
2523 "Statement unlikely to be reached");
2524 Perl_warner(aTHX_ packWARN(WARN_EXEC),
2525 "\t(Maybe you meant system() when you said exec()?)\n");
2526 CopLINE_set(PL_curcop, oldline);
2533 if ((o->op_private & OPpEARLY_CV) && ckWARN(WARN_PROTOTYPE)) {
2534 GV * const gv = cGVOPo_gv;
2535 if (SvTYPE(gv) == SVt_PVGV && GvCV(gv) && SvPVX_const(GvCV(gv))) {
2536 /* XXX could check prototype here instead of just carping */
2537 SV * const sv = sv_newmortal();
2538 gv_efullname3(sv, gv, NULL);
2539 Perl_warner(aTHX_ packWARN(WARN_PROTOTYPE),
2540 "%"SVf"() called too early to check prototype",
2547 if (cSVOPo->op_private & OPpCONST_STRICT)
2548 no_bareword_allowed(o);
2552 op_relocate_sv(&cSVOPo->op_sv, &o->op_targ);
2557 /* Relocate all the METHOP's SVs to the pad for thread safety. */
2558 case OP_METHOD_NAMED:
2559 case OP_METHOD_SUPER:
2560 case OP_METHOD_REDIR:
2561 case OP_METHOD_REDIR_SUPER:
2562 op_relocate_sv(&cMETHOPx(o)->op_u.op_meth_sv, &o->op_targ);
2571 if ((key_op = cSVOPx(((BINOP*)o)->op_last))->op_type != OP_CONST)
2574 rop = (UNOP*)((BINOP*)o)->op_first;
2579 S_scalar_slice_warning(aTHX_ o);
2583 kid = OpSIBLING(cLISTOPo->op_first);
2584 if (/* I bet there's always a pushmark... */
2585 OP_TYPE_ISNT_AND_WASNT_NN(kid, OP_LIST)
2586 && OP_TYPE_ISNT_NN(kid, OP_CONST))
2591 key_op = (SVOP*)(kid->op_type == OP_CONST
2593 : OpSIBLING(kLISTOP->op_first));
2595 rop = (UNOP*)((LISTOP*)o)->op_last;
2598 if (o->op_private & OPpLVAL_INTRO || rop->op_type != OP_RV2HV)
2600 S_check_hash_fields_and_hekify(aTHX_ rop, key_op);
2604 S_scalar_slice_warning(aTHX_ o);
2608 if (cPMOPo->op_pmreplrootu.op_pmreplroot)
2609 finalize_op(cPMOPo->op_pmreplrootu.op_pmreplroot);
2616 if (o->op_flags & OPf_KIDS) {
2620 /* check that op_last points to the last sibling, and that
2621 * the last op_sibling/op_sibparent field points back to the
2622 * parent, and that the only ops with KIDS are those which are
2623 * entitled to them */
2624 U32 type = o->op_type;
2628 if (type == OP_NULL) {
2630 /* ck_glob creates a null UNOP with ex-type GLOB
2631 * (which is a list op. So pretend it wasn't a listop */
2632 if (type == OP_GLOB)
2635 family = PL_opargs[type] & OA_CLASS_MASK;
2637 has_last = ( family == OA_BINOP
2638 || family == OA_LISTOP
2639 || family == OA_PMOP
2640 || family == OA_LOOP
2642 assert( has_last /* has op_first and op_last, or ...
2643 ... has (or may have) op_first: */
2644 || family == OA_UNOP
2645 || family == OA_UNOP_AUX
2646 || family == OA_LOGOP
2647 || family == OA_BASEOP_OR_UNOP
2648 || family == OA_FILESTATOP
2649 || family == OA_LOOPEXOP
2650 || family == OA_METHOP
2651 /* I don't know why SASSIGN is tagged as OA_BASEOP - DAPM */
2652 || type == OP_SASSIGN
2653 || type == OP_CUSTOM
2654 || type == OP_NULL /* new_logop does this */
2657 for (kid = cUNOPo->op_first; kid; kid = OpSIBLING(kid)) {
2658 # ifdef PERL_OP_PARENT
2659 if (!OpHAS_SIBLING(kid)) {
2661 assert(kid == cLISTOPo->op_last);
2662 assert(kid->op_sibparent == o);
2665 if (has_last && !OpHAS_SIBLING(kid))
2666 assert(kid == cLISTOPo->op_last);
2671 for (kid = cUNOPo->op_first; kid; kid = OpSIBLING(kid))
2677 =for apidoc Amx|OP *|op_lvalue|OP *o|I32 type
2679 Propagate lvalue ("modifiable") context to an op and its children.
2680 C<type> represents the context type, roughly based on the type of op that
2681 would do the modifying, although C<local()> is represented by C<OP_NULL>,
2682 because it has no op type of its own (it is signalled by a flag on
2685 This function detects things that can't be modified, such as C<$x+1>, and
2686 generates errors for them. For example, C<$x+1 = 2> would cause it to be
2687 called with an op of type C<OP_ADD> and a C<type> argument of C<OP_SASSIGN>.
2689 It also flags things that need to behave specially in an lvalue context,
2690 such as C<$$x = 5> which might have to vivify a reference in C<$x>.
2696 S_mark_padname_lvalue(pTHX_ PADNAME *pn)
2699 PadnameLVALUE_on(pn);
2700 while (PadnameOUTER(pn) && PARENT_PAD_INDEX(pn)) {
2702 /* RT #127786: cv can be NULL due to an eval within the DB package
2703 * called from an anon sub - anon subs don't have CvOUTSIDE() set
2704 * unless they contain an eval, but calling eval within DB
2705 * pretends the eval was done in the caller's scope.
2709 assert(CvPADLIST(cv));
2711 PadlistNAMESARRAY(CvPADLIST(cv))[PARENT_PAD_INDEX(pn)];
2712 assert(PadnameLEN(pn));
2713 PadnameLVALUE_on(pn);
2718 S_vivifies(const OPCODE type)
2721 case OP_RV2AV: case OP_ASLICE:
2722 case OP_RV2HV: case OP_KVASLICE:
2723 case OP_RV2SV: case OP_HSLICE:
2724 case OP_AELEMFAST: case OP_KVHSLICE:
2733 S_lvref(pTHX_ OP *o, I32 type)
2737 switch (o->op_type) {
2739 for (kid = OpSIBLING(cUNOPo->op_first); kid;
2740 kid = OpSIBLING(kid))
2741 S_lvref(aTHX_ kid, type);
2746 if (cUNOPo->op_first->op_type != OP_GV) goto badref;
2747 o->op_flags |= OPf_STACKED;
2748 if (o->op_flags & OPf_PARENS) {
2749 if (o->op_private & OPpLVAL_INTRO) {
2750 yyerror(Perl_form(aTHX_ "Can't modify reference to "
2751 "localized parenthesized array in list assignment"));
2755 OpTYPE_set(o, OP_LVAVREF);
2756 o->op_private &= OPpLVAL_INTRO|OPpPAD_STATE;
2757 o->op_flags |= OPf_MOD|OPf_REF;
2760 o->op_private |= OPpLVREF_AV;
2763 kid = cUNOPo->op_first;
2764 if (kid->op_type == OP_NULL)
2765 kid = cUNOPx(OpSIBLING(kUNOP->op_first))
2767 o->op_private = OPpLVREF_CV;
2768 if (kid->op_type == OP_GV)
2769 o->op_flags |= OPf_STACKED;
2770 else if (kid->op_type == OP_PADCV) {
2771 o->op_targ = kid->op_targ;
2773 op_free(cUNOPo->op_first);
2774 cUNOPo->op_first = NULL;
2775 o->op_flags &=~ OPf_KIDS;
2780 if (o->op_flags & OPf_PARENS) {
2782 yyerror(Perl_form(aTHX_ "Can't modify reference to "
2783 "parenthesized hash in list assignment"));
2786 o->op_private |= OPpLVREF_HV;
2790 if (cUNOPo->op_first->op_type != OP_GV) goto badref;
2791 o->op_flags |= OPf_STACKED;
2794 if (o->op_flags & OPf_PARENS) goto parenhash;
2795 o->op_private |= OPpLVREF_HV;
2798 PAD_COMPNAME_GEN_set(o->op_targ, PERL_INT_MAX);
2801 PAD_COMPNAME_GEN_set(o->op_targ, PERL_INT_MAX);
2802 if (o->op_flags & OPf_PARENS) goto slurpy;
2803 o->op_private |= OPpLVREF_AV;
2807 o->op_private |= OPpLVREF_ELEM;
2808 o->op_flags |= OPf_STACKED;
2812 OpTYPE_set(o, OP_LVREFSLICE);
2813 o->op_private &= OPpLVAL_INTRO;
2816 if (o->op_flags & OPf_SPECIAL) /* do BLOCK */
2818 else if (!(o->op_flags & OPf_KIDS))
2820 if (o->op_targ != OP_LIST) {
2821 S_lvref(aTHX_ cBINOPo->op_first, type);
2826 for (kid = cLISTOPo->op_first; kid; kid = OpSIBLING(kid)) {
2827 assert((kid->op_flags & OPf_WANT) != OPf_WANT_VOID);
2828 S_lvref(aTHX_ kid, type);
2832 if (o->op_flags & OPf_PARENS)
2837 /* diag_listed_as: Can't modify reference to %s in %s assignment */
2838 yyerror(Perl_form(aTHX_ "Can't modify reference to %s in %s",
2839 o->op_type == OP_NULL && o->op_flags & OPf_SPECIAL
2845 OpTYPE_set(o, OP_LVREF);
2847 OPpLVAL_INTRO|OPpLVREF_ELEM|OPpLVREF_TYPE|OPpPAD_STATE;
2848 if (type == OP_ENTERLOOP)
2849 o->op_private |= OPpLVREF_ITER;
2852 PERL_STATIC_INLINE bool
2853 S_potential_mod_type(I32 type)
2855 /* Types that only potentially result in modification. */
2856 return type == OP_GREPSTART || type == OP_ENTERSUB
2857 || type == OP_REFGEN || type == OP_LEAVESUBLV;
2861 Perl_op_lvalue_flags(pTHX_ OP *o, I32 type, U32 flags)
2865 /* -1 = error on localize, 0 = ignore localize, 1 = ok to localize */
2868 if (!o || (PL_parser && PL_parser->error_count))
2871 if ((o->op_private & OPpTARGET_MY)
2872 && (PL_opargs[o->op_type] & OA_TARGLEX))/* OPp share the meaning */
2877 assert( (o->op_flags & OPf_WANT) != OPf_WANT_VOID );
2879 if (type == OP_PRTF || type == OP_SPRINTF) type = OP_ENTERSUB;
2881 switch (o->op_type) {
2886 if ((o->op_flags & OPf_PARENS))
2890 if ((type == OP_UNDEF || type == OP_REFGEN || type == OP_LOCK) &&
2891 !(o->op_flags & OPf_STACKED)) {
2892 OpTYPE_set(o, OP_RV2CV); /* entersub => rv2cv */
2893 assert(cUNOPo->op_first->op_type == OP_NULL);
2894 op_null(((LISTOP*)cUNOPo->op_first)->op_first);/* disable pushmark */
2897 else { /* lvalue subroutine call */
2898 o->op_private |= OPpLVAL_INTRO;
2899 PL_modcount = RETURN_UNLIMITED_NUMBER;
2900 if (S_potential_mod_type(type)) {
2901 o->op_private |= OPpENTERSUB_INARGS;
2904 else { /* Compile-time error message: */
2905 OP *kid = cUNOPo->op_first;
2910 if (kid->op_type != OP_PUSHMARK) {
2911 if (kid->op_type != OP_NULL || kid->op_targ != OP_LIST)
2913 "panic: unexpected lvalue entersub "
2914 "args: type/targ %ld:%"UVuf,
2915 (long)kid->op_type, (UV)kid->op_targ);
2916 kid = kLISTOP->op_first;
2918 while (OpHAS_SIBLING(kid))
2919 kid = OpSIBLING(kid);
2920 if (!(kid->op_type == OP_NULL && kid->op_targ == OP_RV2CV)) {
2921 break; /* Postpone until runtime */
2924 kid = kUNOP->op_first;
2925 if (kid->op_type == OP_NULL && kid->op_targ == OP_RV2SV)
2926 kid = kUNOP->op_first;
2927 if (kid->op_type == OP_NULL)
2929 "Unexpected constant lvalue entersub "
2930 "entry via type/targ %ld:%"UVuf,
2931 (long)kid->op_type, (UV)kid->op_targ);
2932 if (kid->op_type != OP_GV) {
2939 : SvROK(gv) && SvTYPE(SvRV(gv)) == SVt_PVCV
2940 ? MUTABLE_CV(SvRV(gv))
2946 if (flags & OP_LVALUE_NO_CROAK)
2949 namesv = cv_name(cv, NULL, 0);
2950 yyerror_pv(Perl_form(aTHX_ "Can't modify non-lvalue "
2951 "subroutine call of &%"SVf" in %s",
2952 SVfARG(namesv), PL_op_desc[type]),
2960 if (flags & OP_LVALUE_NO_CROAK) return NULL;
2961 /* grep, foreach, subcalls, refgen */
2962 if (S_potential_mod_type(type))
2964 yyerror(Perl_form(aTHX_ "Can't modify %s in %s",
2965 (o->op_type == OP_NULL && (o->op_flags & OPf_SPECIAL)
2968 type ? PL_op_desc[type] : "local"));
2981 case OP_RIGHT_SHIFT:
2990 if (!(o->op_flags & OPf_STACKED))
2996 if (o->op_flags & OPf_STACKED) {
3000 if (!(o->op_private & OPpREPEAT_DOLIST))
3003 const I32 mods = PL_modcount;
3004 modkids(cBINOPo->op_first, type);
3005 if (type != OP_AASSIGN)
3007 kid = cBINOPo->op_last;
3008 if (kid->op_type == OP_CONST && SvIOK(kSVOP_sv)) {
3009 const IV iv = SvIV(kSVOP_sv);
3010 if (PL_modcount != RETURN_UNLIMITED_NUMBER)
3012 mods + (PL_modcount - mods) * (iv < 0 ? 0 : iv);
3015 PL_modcount = RETURN_UNLIMITED_NUMBER;
3021 for (kid = OpSIBLING(cUNOPo->op_first); kid; kid = OpSIBLING(kid))
3022 op_lvalue(kid, type);
3027 if (type == OP_REFGEN && o->op_flags & OPf_PARENS) {
3028 PL_modcount = RETURN_UNLIMITED_NUMBER;
3029 return o; /* Treat \(@foo) like ordinary list. */
3033 if (scalar_mod_type(o, type))
3035 ref(cUNOPo->op_first, o->op_type);
3042 /* Do not apply the lvsub flag for rv2[ah]v in scalar context. */
3043 if (type == OP_LEAVESUBLV && (
3044 (o->op_type != OP_RV2AV && o->op_type != OP_RV2HV)
3045 || (o->op_flags & OPf_WANT) != OPf_WANT_SCALAR
3047 o->op_private |= OPpMAYBE_LVSUB;
3051 PL_modcount = RETURN_UNLIMITED_NUMBER;
3056 if (type == OP_LEAVESUBLV)
3057 o->op_private |= OPpMAYBE_LVSUB;
3060 if (type == OP_LEAVESUBLV
3061 && (o->op_private & 3) + OP_EACH == OP_KEYS)
3062 o->op_private |= OPpMAYBE_LVSUB;
3065 PL_hints |= HINT_BLOCK_SCOPE;
3066 if (type == OP_LEAVESUBLV)
3067 o->op_private |= OPpMAYBE_LVSUB;
3071 ref(cUNOPo->op_first, o->op_type);
3075 PL_hints |= HINT_BLOCK_SCOPE;
3085 case OP_AELEMFAST_LEX:
3092 PL_modcount = RETURN_UNLIMITED_NUMBER;
3093 if (type == OP_REFGEN && o->op_flags & OPf_PARENS)
3094 return o; /* Treat \(@foo) like ordinary list. */
3095 if (scalar_mod_type(o, type))
3097 if ((o->op_flags & OPf_WANT) != OPf_WANT_SCALAR
3098 && type == OP_LEAVESUBLV)
3099 o->op_private |= OPpMAYBE_LVSUB;
3103 if (!type) /* local() */
3104 Perl_croak(aTHX_ "Can't localize lexical variable %"PNf,
3105 PNfARG(PAD_COMPNAME(o->op_targ)));
3106 if (!(o->op_private & OPpLVAL_INTRO)
3107 || ( type != OP_SASSIGN && type != OP_AASSIGN
3108 && PadnameIsSTATE(PAD_COMPNAME_SV(o->op_targ)) ))
3109 S_mark_padname_lvalue(aTHX_ PAD_COMPNAME_SV(o->op_targ));
3117 if (type != OP_LEAVESUBLV && !scalar_mod_type(NULL, type))
3121 if (o->op_private == 4) /* don't allow 4 arg substr as lvalue */
3127 if (type == OP_LEAVESUBLV)
3128 o->op_private |= OPpMAYBE_LVSUB;
3129 if (o->op_flags & OPf_KIDS && OpHAS_SIBLING(cBINOPo->op_first)) {
3130 /* substr and vec */
3131 /* If this op is in merely potential (non-fatal) modifiable
3132 context, then apply OP_ENTERSUB context to
3133 the kid op (to avoid croaking). Other-
3134 wise pass this op’s own type so the correct op is mentioned
3135 in error messages. */
3136 op_lvalue(OpSIBLING(cBINOPo->op_first),
3137 S_potential_mod_type(type)
3145 ref(cBINOPo->op_first, o->op_type);
3146 if (type == OP_ENTERSUB &&
3147 !(o->op_private & (OPpLVAL_INTRO | OPpDEREF)))
3148 o->op_private |= OPpLVAL_DEFER;
3149 if (type == OP_LEAVESUBLV)
3150 o->op_private |= OPpMAYBE_LVSUB;
3157 o->op_private |= OPpLVALUE;
3163 if (o->op_flags & OPf_KIDS)
3164 op_lvalue(cLISTOPo->op_last, type);
3169 if (o->op_flags & OPf_SPECIAL) /* do BLOCK */
3171 else if (!(o->op_flags & OPf_KIDS))
3173 if (o->op_targ != OP_LIST) {
3174 op_lvalue(cBINOPo->op_first, type);
3180 for (kid = cLISTOPo->op_first; kid; kid = OpSIBLING(kid))
3181 /* elements might be in void context because the list is
3182 in scalar context or because they are attribute sub calls */
3183 if ( (kid->op_flags & OPf_WANT) != OPf_WANT_VOID )
3184 op_lvalue(kid, type);
3192 if (type == OP_LEAVESUBLV
3193 || !S_vivifies(cLOGOPo->op_first->op_type))
3194 op_lvalue(cLOGOPo->op_first, type);
3195 if (type == OP_LEAVESUBLV
3196 || !S_vivifies(OpSIBLING(cLOGOPo->op_first)->op_type))
3197 op_lvalue(OpSIBLING(cLOGOPo->op_first), type);
3201 if (type == OP_NULL) { /* local */
3203 if (!FEATURE_MYREF_IS_ENABLED)
3204 Perl_croak(aTHX_ "The experimental declared_refs "
3205 "feature is not enabled");
3206 Perl_ck_warner_d(aTHX_
3207 packWARN(WARN_EXPERIMENTAL__DECLARED_REFS),
3208 "Declaring references is experimental");
3209 op_lvalue(cUNOPo->op_first, OP_NULL);
3212 if (type != OP_AASSIGN && type != OP_SASSIGN
3213 && type != OP_ENTERLOOP)
3215 /* Don’t bother applying lvalue context to the ex-list. */
3216 kid = cUNOPx(cUNOPo->op_first)->op_first;
3217 assert (!OpHAS_SIBLING(kid));
3220 if (type == OP_NULL) /* local */
3222 if (type != OP_AASSIGN) goto nomod;
3223 kid = cUNOPo->op_first;
3226 const U8 ec = PL_parser ? PL_parser->error_count : 0;
3227 S_lvref(aTHX_ kid, type);
3228 if (!PL_parser || PL_parser->error_count == ec) {
3229 if (!FEATURE_REFALIASING_IS_ENABLED)
3231 "Experimental aliasing via reference not enabled");
3232 Perl_ck_warner_d(aTHX_
3233 packWARN(WARN_EXPERIMENTAL__REFALIASING),
3234 "Aliasing via reference is experimental");
3237 if (o->op_type == OP_REFGEN)
3238 op_null(cUNOPx(cUNOPo->op_first)->op_first); /* pushmark */
3243 kid = cLISTOPo->op_first;
3244 if (kid && kid->op_type == OP_PUSHRE &&
3246 || o->op_flags & OPf_STACKED
3248 || ((PMOP*)kid)->op_pmreplrootu.op_pmtargetoff
3250 || ((PMOP*)kid)->op_pmreplrootu.op_pmtargetgv
3253 /* This is actually @array = split. */
3254 PL_modcount = RETURN_UNLIMITED_NUMBER;
3260 op_lvalue(cUNOPo->op_first, OP_ENTERSUB);
3264 /* [20011101.069 (#7861)] File test operators interpret OPf_REF to mean that
3265 their argument is a filehandle; thus \stat(".") should not set
3267 if (type == OP_REFGEN &&
3268 PL_check[o->op_type] == Perl_ck_ftst)
3271 if (type != OP_LEAVESUBLV)
3272 o->op_flags |= OPf_MOD;
3274 if (type == OP_AASSIGN || type == OP_SASSIGN)
3275 o->op_flags |= OPf_SPECIAL
3276 |(o->op_type == OP_ENTERSUB ? 0 : OPf_REF);
3277 else if (!type) { /* local() */
3280 o->op_private |= OPpLVAL_INTRO;
3281 o->op_flags &= ~OPf_SPECIAL;
3282 PL_hints |= HINT_BLOCK_SCOPE;
3287 Perl_ck_warner(aTHX_ packWARN(WARN_SYNTAX),
3288 "Useless localization of %s", OP_DESC(o));
3291 else if (type != OP_GREPSTART && type != OP_ENTERSUB
3292 && type != OP_LEAVESUBLV && o->op_type != OP_ENTERSUB)
3293 o->op_flags |= OPf_REF;
3298 S_scalar_mod_type(const OP *o, I32 type)
3303 if (o && o->op_type == OP_RV2GV)
3327 case OP_RIGHT_SHIFT:
3356 S_is_handle_constructor(const OP *o, I32 numargs)
3358 PERL_ARGS_ASSERT_IS_HANDLE_CONSTRUCTOR;
3360 switch (o->op_type) {
3368 case OP_SELECT: /* XXX c.f. SelectSaver.pm */
3381 S_refkids(pTHX_ OP *o, I32 type)
3383 if (o && o->op_flags & OPf_KIDS) {
3385 for (kid = cLISTOPo->op_first; kid; kid = OpSIBLING(kid))
3392 Perl_doref(pTHX_ OP *o, I32 type, bool set_op_ref)
3397 PERL_ARGS_ASSERT_DOREF;
3399 if (PL_parser && PL_parser->error_count)
3402 switch (o->op_type) {
3404 if ((type == OP_EXISTS || type == OP_DEFINED) &&
3405 !(o->op_flags & OPf_STACKED)) {
3406 OpTYPE_set(o, OP_RV2CV); /* entersub => rv2cv */
3407 assert(cUNOPo->op_first->op_type == OP_NULL);
3408 op_null(((LISTOP*)cUNOPo->op_first)->op_first); /* disable pushmark */
3409 o->op_flags |= OPf_SPECIAL;
3411 else if (type == OP_RV2SV || type == OP_RV2AV || type == OP_RV2HV){
3412 o->op_private |= (type == OP_RV2AV ? OPpDEREF_AV
3413 : type == OP_RV2HV ? OPpDEREF_HV
3415 o->op_flags |= OPf_MOD;
3421 for (kid = OpSIBLING(cUNOPo->op_first); kid; kid = OpSIBLING(kid))
3422 doref(kid, type, set_op_ref);
3425 if (type == OP_DEFINED)
3426 o->op_flags |= OPf_SPECIAL; /* don't create GV */
3427 doref(cUNOPo->op_first, o->op_type, set_op_ref);
3430 if (type == OP_RV2SV || type == OP_RV2AV || type == OP_RV2HV) {
3431 o->op_private |= (type == OP_RV2AV ? OPpDEREF_AV
3432 : type == OP_RV2HV ? OPpDEREF_HV
3434 o->op_flags |= OPf_MOD;
3441 o->op_flags |= OPf_REF;
3444 if (type == OP_DEFINED)
3445 o->op_flags |= OPf_SPECIAL; /* don't create GV */
3446 doref(cUNOPo->op_first, o->op_type, set_op_ref);
3452 o->op_flags |= OPf_REF;
3457 if (!(o->op_flags & OPf_KIDS) || type == OP_DEFINED)
3459 doref(cBINOPo->op_first, type, set_op_ref);
3463 doref(cBINOPo->op_first, o->op_type, set_op_ref);
3464 if (type == OP_RV2SV || type == OP_RV2AV || type == OP_RV2HV) {
3465 o->op_private |= (type == OP_RV2AV ? OPpDEREF_AV
3466 : type == OP_RV2HV ? OPpDEREF_HV
3468 o->op_flags |= OPf_MOD;
3478 if (!(o->op_flags & OPf_KIDS))
3480 doref(cLISTOPo->op_last, type, set_op_ref);
3490 S_dup_attrlist(pTHX_ OP *o)
3494 PERL_ARGS_ASSERT_DUP_ATTRLIST;
3496 /* An attrlist is either a simple OP_CONST or an OP_LIST with kids,
3497 * where the first kid is OP_PUSHMARK and the remaining ones
3498 * are OP_CONST. We need to push the OP_CONST values.
3500 if (o->op_type == OP_CONST)
3501 rop = newSVOP(OP_CONST, o->op_flags, SvREFCNT_inc_NN(cSVOPo->op_sv));
3503 assert((o->op_type == OP_LIST) && (o->op_flags & OPf_KIDS));
3505 for (o = cLISTOPo->op_first; o; o = OpSIBLING(o)) {
3506 if (o->op_type == OP_CONST)
3507 rop = op_append_elem(OP_LIST, rop,
3508 newSVOP(OP_CONST, o->op_flags,
3509 SvREFCNT_inc_NN(cSVOPo->op_sv)));
3516 S_apply_attrs(pTHX_ HV *stash, SV *target, OP *attrs)
3518 PERL_ARGS_ASSERT_APPLY_ATTRS;
3520 SV * const stashsv = newSVhek(HvNAME_HEK(stash));
3522 /* fake up C<use attributes $pkg,$rv,@attrs> */
3524 #define ATTRSMODULE "attributes"
3525 #define ATTRSMODULE_PM "attributes.pm"
3528 aTHX_ PERL_LOADMOD_IMPORT_OPS,
3529 newSVpvs(ATTRSMODULE),
3531 op_prepend_elem(OP_LIST,
3532 newSVOP(OP_CONST, 0, stashsv),
3533 op_prepend_elem(OP_LIST,
3534 newSVOP(OP_CONST, 0,
3536 dup_attrlist(attrs))));
3541 S_apply_attrs_my(pTHX_ HV *stash, OP *target, OP *attrs, OP **imopsp)
3543 OP *pack, *imop, *arg;
3544 SV *meth, *stashsv, **svp;
3546 PERL_ARGS_ASSERT_APPLY_ATTRS_MY;
3551 assert(target->op_type == OP_PADSV ||
3552 target->op_type == OP_PADHV ||
3553 target->op_type == OP_PADAV);
3555 /* Ensure that attributes.pm is loaded. */
3556 /* Don't force the C<use> if we don't need it. */
3557 svp = hv_fetchs(GvHVn(PL_incgv), ATTRSMODULE_PM, FALSE);
3558 if (svp && *svp != &PL_sv_undef)
3559 NOOP; /* already in %INC */
3561 Perl_load_module(aTHX_ PERL_LOADMOD_NOIMPORT,
3562 newSVpvs(ATTRSMODULE), NULL);
3564 /* Need package name for method call. */
3565 pack = newSVOP(OP_CONST, 0, newSVpvs(ATTRSMODULE));
3567 /* Build up the real arg-list. */
3568 stashsv = newSVhek(HvNAME_HEK(stash));
3570 arg = newOP(OP_PADSV, 0);
3571 arg->op_targ = target->op_targ;
3572 arg = op_prepend_elem(OP_LIST,
3573 newSVOP(OP_CONST, 0, stashsv),
3574 op_prepend_elem(OP_LIST,
3575 newUNOP(OP_REFGEN, 0,
3577 dup_attrlist(attrs)));
3579 /* Fake up a method call to import */
3580 meth = newSVpvs_share("import");
3581 imop = op_convert_list(OP_ENTERSUB, OPf_STACKED|OPf_SPECIAL|OPf_WANT_VOID,
3582 op_append_elem(OP_LIST,
3583 op_prepend_elem(OP_LIST, pack, arg),
3584 newMETHOP_named(OP_METHOD_NAMED, 0, meth)));
3586 /* Combine the ops. */
3587 *imopsp = op_append_elem(OP_LIST, *imopsp, imop);
3591 =notfor apidoc apply_attrs_string
3593 Attempts to apply a list of attributes specified by the C<attrstr> and
3594 C<len> arguments to the subroutine identified by the C<cv> argument which
3595 is expected to be associated with the package identified by the C<stashpv>
3596 argument (see L<attributes>). It gets this wrong, though, in that it
3597 does not correctly identify the boundaries of the individual attribute
3598 specifications within C<attrstr>. This is not really intended for the
3599 public API, but has to be listed here for systems such as AIX which
3600 need an explicit export list for symbols. (It's called from XS code
3601 in support of the C<ATTRS:> keyword from F<xsubpp>.) Patches to fix it
3602 to respect attribute syntax properly would be welcome.
3608 Perl_apply_attrs_string(pTHX_ const char *stashpv, CV *cv,
3609 const char *attrstr, STRLEN len)
3613 PERL_ARGS_ASSERT_APPLY_ATTRS_STRING;
3616 len = strlen(attrstr);
3620 for (; isSPACE(*attrstr) && len; --len, ++attrstr) ;
3622 const char * const sstr = attrstr;
3623 for (; !isSPACE(*attrstr) && len; --len, ++attrstr) ;
3624 attrs = op_append_elem(OP_LIST, attrs,
3625 newSVOP(OP_CONST, 0,
3626 newSVpvn(sstr, attrstr-sstr)));
3630 Perl_load_module(aTHX_ PERL_LOADMOD_IMPORT_OPS,
3631 newSVpvs(ATTRSMODULE),
3632 NULL, op_prepend_elem(OP_LIST,
3633 newSVOP(OP_CONST, 0, newSVpv(stashpv,0)),
3634 op_prepend_elem(OP_LIST,
3635 newSVOP(OP_CONST, 0,
3636 newRV(MUTABLE_SV(cv))),
3641 S_move_proto_attr(pTHX_ OP **proto, OP **attrs, const GV * name)
3643 OP *new_proto = NULL;
3648 PERL_ARGS_ASSERT_MOVE_PROTO_ATTR;
3654 if (o->op_type == OP_CONST) {
3655 pv = SvPV(cSVOPo_sv, pvlen);
3656 if (pvlen >= 10 && memEQ(pv, "prototype(", 10)) {
3657 SV * const tmpsv = newSVpvn_flags(pv + 10, pvlen - 11, SvUTF8(cSVOPo_sv));
3658 SV ** const tmpo = cSVOPx_svp(o);
3659 SvREFCNT_dec(cSVOPo_sv);
3664 } else if (o->op_type == OP_LIST) {
3666 assert(o->op_flags & OPf_KIDS);
3667 lasto = cLISTOPo->op_first;
3668 assert(lasto->op_type == OP_PUSHMARK);
3669 for (o = OpSIBLING(lasto); o; o = OpSIBLING(o)) {
3670 if (o->op_type == OP_CONST) {
3671 pv = SvPV(cSVOPo_sv, pvlen);
3672 if (pvlen >= 10 && memEQ(pv, "prototype(", 10)) {
3673 SV * const tmpsv = newSVpvn_flags(pv + 10, pvlen - 11, SvUTF8(cSVOPo_sv));
3674 SV ** const tmpo = cSVOPx_svp(o);
3675 SvREFCNT_dec(cSVOPo_sv);
3677 if (new_proto && ckWARN(WARN_MISC)) {
3679 const char * newp = SvPV(cSVOPo_sv, new_len);
3680 Perl_warner(aTHX_ packWARN(WARN_MISC),
3681 "Attribute prototype(%"UTF8f") discards earlier prototype attribute in same sub",
3682 UTF8fARG(SvUTF8(cSVOPo_sv), new_len, newp));
3688 /* excise new_proto from the list */
3689 op_sibling_splice(*attrs, lasto, 1, NULL);
3696 /* If the list is now just the PUSHMARK, scrap the whole thing; otherwise attributes.xs
3697 would get pulled in with no real need */
3698 if (!OpHAS_SIBLING(cLISTOPx(*attrs)->op_first)) {
3707 svname = sv_newmortal();
3708 gv_efullname3(svname, name, NULL);
3710 else if (SvPOK(name) && *SvPVX((SV *)name) == '&')
3711 svname = newSVpvn_flags(SvPVX((SV *)name)+1, SvCUR(name)-1, SvUTF8(name)|SVs_TEMP);
3713 svname = (SV *)name;
3714 if (ckWARN(WARN_ILLEGALPROTO))
3715 (void)validate_proto(svname, cSVOPx_sv(new_proto), TRUE);
3716 if (*proto && ckWARN(WARN_PROTOTYPE)) {
3717 STRLEN old_len, new_len;
3718 const char * oldp = SvPV(cSVOPx_sv(*proto), old_len);
3719 const char * newp = SvPV(cSVOPx_sv(new_proto), new_len);
3721 Perl_warner(aTHX_ packWARN(WARN_PROTOTYPE),
3722 "Prototype '%"UTF8f"' overridden by attribute 'prototype(%"UTF8f")'"
3724 UTF8fARG(SvUTF8(cSVOPx_sv(*proto)), old_len, oldp),
3725 UTF8fARG(SvUTF8(cSVOPx_sv(new_proto)), new_len, newp),
3735 S_cant_declare(pTHX_ OP *o)
3737 if (o->op_type == OP_NULL
3738 && (o->op_flags & (OPf_SPECIAL|OPf_KIDS)) == OPf_KIDS)
3739 o = cUNOPo->op_first;
3740 yyerror(Perl_form(aTHX_ "Can't declare %s in \"%s\"",
3741 o->op_type == OP_NULL
3742 && o->op_flags & OPf_SPECIAL
3745 PL_parser->in_my == KEY_our ? "our" :
3746 PL_parser->in_my == KEY_state ? "state" :
3751 S_my_kid(pTHX_ OP *o, OP *attrs, OP **imopsp)
3754 const bool stately = PL_parser && PL_parser->in_my == KEY_state;
3756 PERL_ARGS_ASSERT_MY_KID;
3758 if (!o || (PL_parser && PL_parser->error_count))
3763 if (OP_TYPE_IS_OR_WAS(o, OP_LIST)) {
3765 for (kid = cLISTOPo->op_first; kid; kid = OpSIBLING(kid))
3766 my_kid(kid, attrs, imopsp);
3768 } else if (type == OP_UNDEF || type == OP_STUB) {
3770 } else if (type == OP_RV2SV || /* "our" declaration */
3773 if (cUNOPo->op_first->op_type != OP_GV) { /* MJD 20011224 */
3774 S_cant_declare(aTHX_ o);
3776 GV * const gv = cGVOPx_gv(cUNOPo->op_first);
3778 PL_parser->in_my = FALSE;
3779 PL_parser->in_my_stash = NULL;
3780 apply_attrs(GvSTASH(gv),
3781 (type == OP_RV2SV ? GvSV(gv) :
3782 type == OP_RV2AV ? MUTABLE_SV(GvAV(gv)) :
3783 type == OP_RV2HV ? MUTABLE_SV(GvHV(gv)) : MUTABLE_SV(gv)),
3786 o->op_private |= OPpOUR_INTRO;
3789 else if (type == OP_REFGEN || type == OP_SREFGEN) {
3790 if (!FEATURE_MYREF_IS_ENABLED)
3791 Perl_croak(aTHX_ "The experimental declared_refs "
3792 "feature is not enabled");
3793 Perl_ck_warner_d(aTHX_
3794 packWARN(WARN_EXPERIMENTAL__DECLARED_REFS),
3795 "Declaring references is experimental");
3796 /* Kid is a nulled OP_LIST, handled above. */
3797 my_kid(cUNOPo->op_first, attrs, imopsp);
3800 else if (type != OP_PADSV &&
3803 type != OP_PUSHMARK)
3805 S_cant_declare(aTHX_ o);
3808 else if (attrs && type != OP_PUSHMARK) {
3812 PL_parser->in_my = FALSE;
3813 PL_parser->in_my_stash = NULL;
3815 /* check for C<my Dog $spot> when deciding package */
3816 stash = PAD_COMPNAME_TYPE(o->op_targ);
3818 stash = PL_curstash;
3819 apply_attrs_my(stash, o, attrs, imopsp);
3821 o->op_flags |= OPf_MOD;
3822 o->op_private |= OPpLVAL_INTRO;
3824 o->op_private |= OPpPAD_STATE;
3829 Perl_my_attrs(pTHX_ OP *o, OP *attrs)
3832 int maybe_scalar = 0;
3834 PERL_ARGS_ASSERT_MY_ATTRS;
3836 /* [perl #17376]: this appears to be premature, and results in code such as
3837 C< our(%x); > executing in list mode rather than void mode */
3839 if (o->op_flags & OPf_PARENS)
3849 o = my_kid(o, attrs, &rops);
3851 if (maybe_scalar && o->op_type == OP_PADSV) {
3852 o = scalar(op_append_list(OP_LIST, rops, o));
3853 o->op_private |= OPpLVAL_INTRO;
3856 /* The listop in rops might have a pushmark at the beginning,
3857 which will mess up list assignment. */
3858 LISTOP * const lrops = (LISTOP *)rops; /* for brevity */
3859 if (rops->op_type == OP_LIST &&
3860 lrops->op_first && lrops->op_first->op_type == OP_PUSHMARK)
3862 OP * const pushmark = lrops->op_first;
3863 /* excise pushmark */
3864 op_sibling_splice(rops, NULL, 1, NULL);
3867 o = op_append_list(OP_LIST, o, rops);
3870 PL_parser->in_my = FALSE;
3871 PL_parser->in_my_stash = NULL;
3876 Perl_sawparens(pTHX_ OP *o)
3878 PERL_UNUSED_CONTEXT;
3880 o->op_flags |= OPf_PARENS;
3885 Perl_bind_match(pTHX_ I32 type, OP *left, OP *right)
3889 const OPCODE ltype = left->op_type;
3890 const OPCODE rtype = right->op_type;
3892 PERL_ARGS_ASSERT_BIND_MATCH;
3894 if ( (ltype == OP_RV2AV || ltype == OP_RV2HV || ltype == OP_PADAV
3895 || ltype == OP_PADHV) && ckWARN(WARN_MISC))
3897 const char * const desc
3899 rtype == OP_SUBST || rtype == OP_TRANS
3900 || rtype == OP_TRANSR
3902 ? (int)rtype : OP_MATCH];
3903 const bool isary = ltype == OP_RV2AV || ltype == OP_PADAV;
3905 S_op_varname(aTHX_ left);
3907 Perl_warner(aTHX_ packWARN(WARN_MISC),
3908 "Applying %s to %"SVf" will act on scalar(%"SVf")",
3909 desc, SVfARG(name), SVfARG(name));
3911 const char * const sample = (isary
3912 ? "@array" : "%hash");
3913 Perl_warner(aTHX_ packWARN(WARN_MISC),
3914 "Applying %s to %s will act on scalar(%s)",
3915 desc, sample, sample);
3919 if (rtype == OP_CONST &&
3920 cSVOPx(right)->op_private & OPpCONST_BARE &&
3921 cSVOPx(right)->op_private & OPpCONST_STRICT)
3923 no_bareword_allowed(right);
3926 /* !~ doesn't make sense with /r, so error on it for now */
3927 if (rtype == OP_SUBST && (cPMOPx(right)->op_pmflags & PMf_NONDESTRUCT) &&
3929 /* diag_listed_as: Using !~ with %s doesn't make sense */
3930 yyerror("Using !~ with s///r doesn't make sense");
3931 if (rtype == OP_TRANSR && type == OP_NOT)
3932 /* diag_listed_as: Using !~ with %s doesn't make sense */
3933 yyerror("Using !~ with tr///r doesn't make sense");
3935 ismatchop = (rtype == OP_MATCH ||
3936 rtype == OP_SUBST ||
3937 rtype == OP_TRANS || rtype == OP_TRANSR)
3938 && !(right->op_flags & OPf_SPECIAL);
3939 if (ismatchop && right->op_private & OPpTARGET_MY) {
3941 right->op_private &= ~OPpTARGET_MY;
3943 if (!(right->op_flags & OPf_STACKED) && !right->op_targ && ismatchop) {
3944 if (left->op_type == OP_PADSV
3945 && !(left->op_private & OPpLVAL_INTRO))
3947 right->op_targ = left->op_targ;
3952 right->op_flags |= OPf_STACKED;
3953 if (rtype != OP_MATCH && rtype != OP_TRANSR &&
3954 ! (rtype == OP_TRANS &&
3955 right->op_private & OPpTRANS_IDENTICAL) &&
3956 ! (rtype == OP_SUBST &&
3957 (cPMOPx(right)->op_pmflags & PMf_NONDESTRUCT)))
3958 left = op_lvalue(left, rtype);
3959 if (right->op_type == OP_TRANS || right->op_type == OP_TRANSR)
3960 o = newBINOP(OP_NULL, OPf_STACKED, scalar(left), right);
3962 o = op_prepend_elem(rtype, scalar(left), right);
3965 return newUNOP(OP_NOT, 0, scalar(o));
3969 return bind_match(type, left,
3970 pmruntime(newPMOP(OP_MATCH, 0), right, NULL, 0, 0));
3974 Perl_invert(pTHX_ OP *o)
3978 return newUNOP(OP_NOT, OPf_SPECIAL, scalar(o));
3982 =for apidoc Amx|OP *|op_scope|OP *o
3984 Wraps up an op tree with some additional ops so that at runtime a dynamic
3985 scope will be created. The original ops run in the new dynamic scope,
3986 and then, provided that they exit normally, the scope will be unwound.
3987 The additional ops used to create and unwind the dynamic scope will
3988 normally be an C<enter>/C<leave> pair, but a C<scope> op may be used
3989 instead if the ops are simple enough to not need the full dynamic scope
3996 Perl_op_scope(pTHX_ OP *o)
4000 if (o->op_flags & OPf_PARENS || PERLDB_NOOPT || TAINTING_get) {
4001 o = op_prepend_elem(OP_LINESEQ, newOP(OP_ENTER, 0), o);
4002 OpTYPE_set(o, OP_LEAVE);
4004 else if (o->op_type == OP_LINESEQ) {
4006 OpTYPE_set(o, OP_SCOPE);
4007 kid = ((LISTOP*)o)->op_first;
4008 if (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) {
4011 /* The following deals with things like 'do {1 for 1}' */
4012 kid = OpSIBLING(kid);
4014 (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE))
4019 o = newLISTOP(OP_SCOPE, 0, o, NULL);
4025 Perl_op_unscope(pTHX_ OP *o)
4027 if (o && o->op_type == OP_LINESEQ) {
4028 OP *kid = cLISTOPo->op_first;
4029 for(; kid; kid = OpSIBLING(kid))
4030 if (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE)
4037 =for apidoc Am|int|block_start|int full
4039 Handles compile-time scope entry.
4040 Arranges for hints to be restored on block
4041 exit and also handles pad sequence numbers to make lexical variables scope
4042 right. Returns a savestack index for use with C<block_end>.
4048 Perl_block_start(pTHX_ int full)
4050 const int retval = PL_savestack_ix;
4052 PL_compiling.cop_seq = PL_cop_seqmax;
4054 pad_block_start(full);
4056 PL_hints &= ~HINT_BLOCK_SCOPE;
4057 SAVECOMPILEWARNINGS();
4058 PL_compiling.cop_warnings = DUP_WARNINGS(PL_compiling.cop_warnings);
4059 SAVEI32(PL_compiling.cop_seq);
4060 PL_compiling.cop_seq = 0;
4062 CALL_BLOCK_HOOKS(bhk_start, full);
4068 =for apidoc Am|OP *|block_end|I32 floor|OP *seq
4070 Handles compile-time scope exit. C<floor>
4071 is the savestack index returned by
4072 C<block_start>, and C<seq> is the body of the block. Returns the block,
4079 Perl_block_end(pTHX_ I32 floor, OP *seq)
4081 const int needblockscope = PL_hints & HINT_BLOCK_SCOPE;
4082 OP* retval = scalarseq(seq);
4085 /* XXX Is the null PL_parser check necessary here? */
4086 assert(PL_parser); /* Let’s find out under debugging builds. */
4087 if (PL_parser && PL_parser->parsed_sub) {
4088 o = newSTATEOP(0, NULL, NULL);
4090 retval = op_append_elem(OP_LINESEQ, retval, o);
4093 CALL_BLOCK_HOOKS(bhk_pre_end, &retval);
4097 PL_hints |= HINT_BLOCK_SCOPE; /* propagate out */
4101 /* pad_leavemy has created a sequence of introcv ops for all my
4102 subs declared in the block. We have to replicate that list with
4103 clonecv ops, to deal with this situation:
4108 sub s1 { state sub foo { \&s2 } }
4111 Originally, I was going to have introcv clone the CV and turn
4112 off the stale flag. Since &s1 is declared before &s2, the
4113 introcv op for &s1 is executed (on sub entry) before the one for
4114 &s2. But the &foo sub inside &s1 (which is cloned when &s1 is
4115 cloned, since it is a state sub) closes over &s2 and expects
4116 to see it in its outer CV’s pad. If the introcv op clones &s1,
4117 then &s2 is still marked stale. Since &s1 is not active, and
4118 &foo closes over &s1’s implicit entry for &s2, we get a ‘Varia-
4119 ble will not stay shared’ warning. Because it is the same stub
4120 that will be used when the introcv op for &s2 is executed, clos-
4121 ing over it is safe. Hence, we have to turn off the stale flag
4122 on all lexical subs in the block before we clone any of them.
4123 Hence, having introcv clone the sub cannot work. So we create a
4124 list of ops like this:
4148 OP *kid = o->op_flags & OPf_KIDS ? cLISTOPo->op_first : o;
4149 OP * const last = o->op_flags & OPf_KIDS ? cLISTOPo->op_last : o;
4150 for (;; kid = OpSIBLING(kid)) {
4151 OP *newkid = newOP(OP_CLONECV, 0);
4152 newkid->op_targ = kid->op_targ;
4153 o = op_append_elem(OP_LINESEQ, o, newkid);
4154 if (kid == last) break;
4156 retval = op_prepend_elem(OP_LINESEQ, o, retval);
4159 CALL_BLOCK_HOOKS(bhk_post_end, &retval);
4165 =head1 Compile-time scope hooks
4167 =for apidoc Aox||blockhook_register
4169 Register a set of hooks to be called when the Perl lexical scope changes
4170 at compile time. See L<perlguts/"Compile-time scope hooks">.
4176 Perl_blockhook_register(pTHX_ BHK *hk)
4178 PERL_ARGS_ASSERT_BLOCKHOOK_REGISTER;
4180 Perl_av_create_and_push(aTHX_ &PL_blockhooks, newSViv(PTR2IV(hk)));
4184 Perl_newPROG(pTHX_ OP *o)
4186 PERL_ARGS_ASSERT_NEWPROG;
4193 PL_eval_root = newUNOP(OP_LEAVEEVAL,
4194 ((PL_in_eval & EVAL_KEEPERR)
4195 ? OPf_SPECIAL : 0), o);
4198 assert(CxTYPE(cx) == CXt_EVAL);
4200 if ((cx->blk_gimme & G_WANT) == G_VOID)
4201 scalarvoid(PL_eval_root);
4202 else if ((cx->blk_gimme & G_WANT) == G_ARRAY)
4205 scalar(PL_eval_root);
4207 PL_eval_start = op_linklist(PL_eval_root);
4208 PL_eval_root->op_private |= OPpREFCOUNTED;
4209 OpREFCNT_set(PL_eval_root, 1);
4210 PL_eval_root->op_next = 0;
4211 i = PL_savestack_ix;
4214 CALL_PEEP(PL_eval_start);
4215 finalize_optree(PL_eval_root);
4216 S_prune_chain_head(&PL_eval_start);
4218 PL_savestack_ix = i;
4221 if (o->op_type == OP_STUB) {
4222 /* This block is entered if nothing is compiled for the main
4223 program. This will be the case for an genuinely empty main
4224 program, or one which only has BEGIN blocks etc, so already
4227 Historically (5.000) the guard above was !o. However, commit
4228 f8a08f7b8bd67b28 (Jun 2001), integrated to blead as
4229 c71fccf11fde0068, changed perly.y so that newPROG() is now
4230 called with the output of block_end(), which returns a new
4231 OP_STUB for the case of an empty optree. ByteLoader (and
4232 maybe other things) also take this path, because they set up
4233 PL_main_start and PL_main_root directly, without generating an
4236 If the parsing the main program aborts (due to parse errors,
4237 or due to BEGIN or similar calling exit), then newPROG()
4238 isn't even called, and hence this code path and its cleanups
4239 are skipped. This shouldn't make a make a difference:
4240 * a non-zero return from perl_parse is a failure, and
4241 perl_destruct() should be called immediately.
4242 * however, if exit(0) is called during the parse, then
4243 perl_parse() returns 0, and perl_run() is called. As
4244 PL_main_start will be NULL, perl_run() will return
4245 promptly, and the exit code will remain 0.
4248 PL_comppad_name = 0;
4250 S_op_destroy(aTHX_ o);
4253 PL_main_root = op_scope(sawparens(scalarvoid(o)));
4254 PL_curcop = &PL_compiling;
4255 PL_main_start = LINKLIST(PL_main_root);
4256 PL_main_root->op_private |= OPpREFCOUNTED;
4257 OpREFCNT_set(PL_main_root, 1);
4258 PL_main_root->op_next = 0;
4259 CALL_PEEP(PL_main_start);
4260 finalize_optree(PL_main_root);
4261 S_prune_chain_head(&PL_main_start);
4262 cv_forget_slab(PL_compcv);
4265 /* Register with debugger */
4267 CV * const cv = get_cvs("DB::postponed", 0);
4271 XPUSHs(MUTABLE_SV(CopFILEGV(&PL_compiling)));
4273 call_sv(MUTABLE_SV(cv), G_DISCARD);
4280 Perl_localize(pTHX_ OP *o, I32 lex)
4282 PERL_ARGS_ASSERT_LOCALIZE;
4284 if (o->op_flags & OPf_PARENS)
4285 /* [perl #17376]: this appears to be premature, and results in code such as
4286 C< our(%x); > executing in list mode rather than void mode */
4293 if ( PL_parser->bufptr > PL_parser->oldbufptr
4294 && PL_parser->bufptr[-1] == ','
4295 && ckWARN(WARN_PARENTHESIS))
4297 char *s = PL_parser->bufptr;
4300 /* some heuristics to detect a potential error */
4301 while (*s && (strchr(", \t\n", *s)))
4305 if (*s && (strchr("@$%", *s) || (!lex && *s == '*'))
4307 && (isWORDCHAR(*s) || UTF8_IS_CONTINUED(*s))) {
4310 while (*s && (isWORDCHAR(*s) || UTF8_IS_CONTINUED(*s)))
4312 while (*s && (strchr(", \t\n", *s)))
4318 if (sigil && (*s == ';' || *s == '=')) {
4319 Perl_warner(aTHX_ packWARN(WARN_PARENTHESIS),
4320 "Parentheses missing around \"%s\" list",
4322 ? (PL_parser->in_my == KEY_our
4324 : PL_parser->in_my == KEY_state
4334 o = op_lvalue(o, OP_NULL); /* a bit kludgey */
4335 PL_parser->in_my = FALSE;
4336 PL_parser->in_my_stash = NULL;
4341 Perl_jmaybe(pTHX_ OP *o)
4343 PERL_ARGS_ASSERT_JMAYBE;
4345 if (o->op_type == OP_LIST) {
4347 = newSVREF(newGVOP(OP_GV, 0, gv_fetchpvs(";", GV_ADD|GV_NOTQUAL, SVt_PV)));
4348 o = op_convert_list(OP_JOIN, 0, op_prepend_elem(OP_LIST, o2, o));
4353 PERL_STATIC_INLINE OP *
4354 S_op_std_init(pTHX_ OP *o)
4356 I32 type = o->op_type;
4358 PERL_ARGS_ASSERT_OP_STD_INIT;
4360 if (PL_opargs[type] & OA_RETSCALAR)
4362 if (PL_opargs[type] & OA_TARGET && !o->op_targ)
4363 o->op_targ = pad_alloc(type, SVs_PADTMP);
4368 PERL_STATIC_INLINE OP *
4369 S_op_integerize(pTHX_ OP *o)
4371 I32 type = o->op_type;
4373 PERL_ARGS_ASSERT_OP_INTEGERIZE;
4375 /* integerize op. */
4376 if ((PL_opargs[type] & OA_OTHERINT) && (PL_hints & HINT_INTEGER))
4379 o->op_ppaddr = PL_ppaddr[++(o->op_type)];
4382 if (type == OP_NEGATE)
4383 /* XXX might want a ck_negate() for this */
4384 cUNOPo->op_first->op_private &= ~OPpCONST_STRICT;
4390 S_fold_constants(pTHX_ OP *o)
4395 VOL I32 type = o->op_type;
4400 SV * const oldwarnhook = PL_warnhook;
4401 SV * const olddiehook = PL_diehook;
4403 U8 oldwarn = PL_dowarn;
4407 PERL_ARGS_ASSERT_FOLD_CONSTANTS;
4409 if (!(PL_opargs[type] & OA_FOLDCONST))
4418 #ifdef USE_LOCALE_CTYPE
4419 if (IN_LC_COMPILETIME(LC_CTYPE))
4428 #ifdef USE_LOCALE_COLLATE
4429 if (IN_LC_COMPILETIME(LC_COLLATE))
4434 /* XXX what about the numeric ops? */
4435 #ifdef USE_LOCALE_NUMERIC
4436 if (IN_LC_COMPILETIME(LC_NUMERIC))
4441 if (!OpHAS_SIBLING(cLISTOPo->op_first)
4442 || OpSIBLING(cLISTOPo->op_first)->op_type != OP_CONST)
4445 SV * const sv = cSVOPx_sv(OpSIBLING(cLISTOPo->op_first));
4446 if (!SvPOK(sv) || SvGMAGICAL(sv)) goto nope;
4448 const char *s = SvPVX_const(sv);
4449 while (s < SvEND(sv)) {
4450 if (isALPHA_FOLD_EQ(*s, 'p')) goto nope;
4457 if (o->op_private & OPpREPEAT_DOLIST) goto nope;
4460 if (cUNOPx(cUNOPo->op_first)->op_first->op_type != OP_CONST
4461 || SvPADTMP(cSVOPx_sv(cUNOPx(cUNOPo->op_first)->op_first)))
4465 if (PL_parser && PL_parser->error_count)
4466 goto nope; /* Don't try to run w/ errors */
4468 for (curop = LINKLIST(o); curop != o; curop = LINKLIST(curop)) {
4469 switch (curop->op_type) {
4471 if ( (curop->op_private & OPpCONST_BARE)
4472 && (curop->op_private & OPpCONST_STRICT)) {
4473 no_bareword_allowed(curop);
4481 /* Foldable; move to next op in list */
4485 /* No other op types are considered foldable */
4490 curop = LINKLIST(o);
4491 old_next = o->op_next;
4495 old_cxix = cxstack_ix;
4496 create_eval_scope(NULL, G_FAKINGEVAL);
4498 /* Verify that we don't need to save it: */
4499 assert(PL_curcop == &PL_compiling);
4500 StructCopy(&PL_compiling, ¬_compiling, COP);
4501 PL_curcop = ¬_compiling;
4502 /* The above ensures that we run with all the correct hints of the
4503 currently compiling COP, but that IN_PERL_RUNTIME is true. */
4504 assert(IN_PERL_RUNTIME);
4505 PL_warnhook = PERL_WARNHOOK_FATAL;
4509 /* Effective $^W=1. */
4510 if ( ! (PL_dowarn & G_WARN_ALL_MASK))
4511 PL_dowarn |= G_WARN_ON;
4516 sv = *(PL_stack_sp--);
4517 if (o->op_targ && sv == PAD_SV(o->op_targ)) { /* grab pad temp? */
4518 pad_swipe(o->op_targ, FALSE);
4520 else if (SvTEMP(sv)) { /* grab mortal temp? */
4521 SvREFCNT_inc_simple_void(sv);
4524 else { assert(SvIMMORTAL(sv)); }
4527 /* Something tried to die. Abandon constant folding. */
4528 /* Pretend the error never happened. */
4530 o->op_next = old_next;
4534 /* Don't expect 1 (setjmp failed) or 2 (something called my_exit) */
4535 PL_warnhook = oldwarnhook;
4536 PL_diehook = olddiehook;
4537 /* XXX note that this croak may fail as we've already blown away
4538 * the stack - eg any nested evals */
4539 Perl_croak(aTHX_ "panic: fold_constants JMPENV_PUSH returned %d", ret);
4542 PL_dowarn = oldwarn;
4543 PL_warnhook = oldwarnhook;
4544 PL_diehook = olddiehook;
4545 PL_curcop = &PL_compiling;
4547 /* if we croaked, depending on how we croaked the eval scope
4548 * may or may not have already been popped */
4549 if (cxstack_ix > old_cxix) {
4550 assert(cxstack_ix == old_cxix + 1);
4551 assert(CxTYPE(CX_CUR()) == CXt_EVAL);
4552 delete_eval_scope();
4557 /* OP_STRINGIFY and constant folding are used to implement qq.
4558 Here the constant folding is an implementation detail that we
4559 want to hide. If the stringify op is itself already marked
4560 folded, however, then it is actually a folded join. */
4561 is_stringify = type == OP_STRINGIFY && !o->op_folded;
4566 else if (!SvIMMORTAL(sv)) {
4570 newop = newSVOP(OP_CONST, 0, MUTABLE_SV(sv));
4571 if (!is_stringify) newop->op_folded = 1;
4579 S_gen_constant_list(pTHX_ OP *o)
4583 const SSize_t oldtmps_floor = PL_tmps_floor;
4588 if (PL_parser && PL_parser->error_count)
4589 return o; /* Don't attempt to run with errors */
4591 curop = LINKLIST(o);
4594 S_prune_chain_head(&curop);
4596 Perl_pp_pushmark(aTHX);
4599 assert (!(curop->op_flags & OPf_SPECIAL));
4600 assert(curop->op_type == OP_RANGE);
4601 Perl_pp_anonlist(aTHX);
4602 PL_tmps_floor = oldtmps_floor;
4604 OpTYPE_set(o, OP_RV2AV);
4605 o->op_flags &= ~OPf_REF; /* treat \(1..2) like an ordinary list */
4606 o->op_flags |= OPf_PARENS; /* and flatten \(1..2,3) */
4607 o->op_opt = 0; /* needs to be revisited in rpeep() */
4608 av = (AV *)SvREFCNT_inc_NN(*PL_stack_sp--);
4610 /* replace subtree with an OP_CONST */
4611 curop = ((UNOP*)o)->op_first;
4612 op_sibling_splice(o, NULL, -1, newSVOP(OP_CONST, 0, (SV *)av));
4615 if (AvFILLp(av) != -1)
4616 for (svp = AvARRAY(av) + AvFILLp(av); svp >= AvARRAY(av); --svp)
4619 SvREADONLY_on(*svp);
4626 =head1 Optree Manipulation Functions
4629 /* List constructors */
4632 =for apidoc Am|OP *|op_append_elem|I32 optype|OP *first|OP *last
4634 Append an item to the list of ops contained directly within a list-type
4635 op, returning the lengthened list. C<first> is the list-type op,
4636 and C<last> is the op to append to the list. C<optype> specifies the
4637 intended opcode for the list. If C<first> is not already a list of the
4638 right type, it will be upgraded into one. If either C<first> or C<last>
4639 is null, the other is returned unchanged.
4645 Perl_op_append_elem(pTHX_ I32 type, OP *first, OP *last)
4653 if (first->op_type != (unsigned)type
4654 || (type == OP_LIST && (first->op_flags & OPf_PARENS)))
4656 return newLISTOP(type, 0, first, last);
4659 op_sibling_splice(first, ((LISTOP*)first)->op_last, 0, last);
4660 first->op_flags |= OPf_KIDS;
4665 =for apidoc Am|OP *|op_append_list|I32 optype|OP *first|OP *last
4667 Concatenate the lists of ops contained directly within two list-type ops,
4668 returning the combined list. C<first> and C<last> are the list-type ops
4669 to concatenate. C<optype> specifies the intended opcode for the list.
4670 If either C<first> or C<last> is not already a list of the right type,
4671 it will be upgraded into one. If either C<first> or C<last> is null,
4672 the other is returned unchanged.
4678 Perl_op_append_list(pTHX_ I32 type, OP *first, OP *last)
4686 if (first->op_type != (unsigned)type)
4687 return op_prepend_elem(type, first, last);
4689 if (last->op_type != (unsigned)type)
4690 return op_append_elem(type, first, last);
4692 OpMORESIB_set(((LISTOP*)first)->op_last, ((LISTOP*)last)->op_first);
4693 ((LISTOP*)first)->op_last = ((LISTOP*)last)->op_last;
4694 OpLASTSIB_set(((LISTOP*)first)->op_last, first);
4695 first->op_flags |= (last->op_flags & OPf_KIDS);
4697 S_op_destroy(aTHX_ last);
4703 =for apidoc Am|OP *|op_prepend_elem|I32 optype|OP *first|OP *last
4705 Prepend an item to the list of ops contained directly within a list-type
4706 op, returning the lengthened list. C<first> is the op to prepend to the
4707 list, and C<last> is the list-type op. C<optype> specifies the intended
4708 opcode for the list. If C<last> is not already a list of the right type,
4709 it will be upgraded into one. If either C<first> or C<last> is null,
4710 the other is returned unchanged.
4716 Perl_op_prepend_elem(pTHX_ I32 type, OP *first, OP *last)
4724 if (last->op_type == (unsigned)type) {
4725 if (type == OP_LIST) { /* already a PUSHMARK there */
4726 /* insert 'first' after pushmark */
4727 op_sibling_splice(last, cLISTOPx(last)->op_first, 0, first);
4728 if (!(first->op_flags & OPf_PARENS))
4729 last->op_flags &= ~OPf_PARENS;
4732 op_sibling_splice(last, NULL, 0, first);
4733 last->op_flags |= OPf_KIDS;
4737 return newLISTOP(type, 0, first, last);
4741 =for apidoc Am|OP *|op_convert_list|I32 type|I32 flags|OP *o
4743 Converts C<o> into a list op if it is not one already, and then converts it
4744 into the specified C<type>, calling its check function, allocating a target if
4745 it needs one, and folding constants.
4747 A list-type op is usually constructed one kid at a time via C<newLISTOP>,
4748 C<op_prepend_elem> and C<op_append_elem>. Then finally it is passed to
4749 C<op_convert_list> to make it the right type.
4755 Perl_op_convert_list(pTHX_ I32 type, I32 flags, OP *o)
4758 if (type < 0) type = -type, flags |= OPf_SPECIAL;
4759 if (!o || o->op_type != OP_LIST)
4760 o = force_list(o, 0);
4763 o->op_flags &= ~OPf_WANT;
4764 o->op_private &= ~OPpLVAL_INTRO;
4767 if (!(PL_opargs[type] & OA_MARK))
4768 op_null(cLISTOPo->op_first);
4770 OP * const kid2 = OpSIBLING(cLISTOPo->op_first);
4771 if (kid2 && kid2->op_type == OP_COREARGS) {
4772 op_null(cLISTOPo->op_first);
4773 kid2->op_private |= OPpCOREARGS_PUSHMARK;
4777 OpTYPE_set(o, type);
4778 o->op_flags |= flags;
4779 if (flags & OPf_FOLDED)
4782 o = CHECKOP(type, o);
4783 if (o->op_type != (unsigned)type)
4786 return fold_constants(op_integerize(op_std_init(o)));
4793 =head1 Optree construction
4795 =for apidoc Am|OP *|newNULLLIST
4797 Constructs, checks, and returns a new C<stub> op, which represents an
4798 empty list expression.
4804 Perl_newNULLLIST(pTHX)
4806 return newOP(OP_STUB, 0);
4809 /* promote o and any siblings to be a list if its not already; i.e.
4817 * pushmark - o - A - B
4819 * If nullit it true, the list op is nulled.