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"
167 #include "invlist_inline.h"
169 #define CALL_PEEP(o) PL_peepp(aTHX_ o)
170 #define CALL_RPEEP(o) PL_rpeepp(aTHX_ o)
171 #define CALL_OPFREEHOOK(o) if (PL_opfreehook) PL_opfreehook(aTHX_ o)
173 static const char array_passed_to_stat[] = "Array passed to stat will be coerced to a scalar";
175 /* remove any leading "empty" ops from the op_next chain whose first
176 * node's address is stored in op_p. Store the updated address of the
177 * first node in op_p.
181 S_prune_chain_head(OP** op_p)
184 && ( (*op_p)->op_type == OP_NULL
185 || (*op_p)->op_type == OP_SCOPE
186 || (*op_p)->op_type == OP_SCALAR
187 || (*op_p)->op_type == OP_LINESEQ)
189 *op_p = (*op_p)->op_next;
193 /* See the explanatory comments above struct opslab in op.h. */
195 #ifdef PERL_DEBUG_READONLY_OPS
196 # define PERL_SLAB_SIZE 128
197 # define PERL_MAX_SLAB_SIZE 4096
198 # include <sys/mman.h>
201 #ifndef PERL_SLAB_SIZE
202 # define PERL_SLAB_SIZE 64
204 #ifndef PERL_MAX_SLAB_SIZE
205 # define PERL_MAX_SLAB_SIZE 2048
208 /* rounds up to nearest pointer */
209 #define SIZE_TO_PSIZE(x) (((x) + sizeof(I32 *) - 1)/sizeof(I32 *))
212 (assert(((char *)(p) - (char *)(o)) % sizeof(I32**) == 0), \
213 ((size_t)((I32 **)(p) - (I32**)(o))))
215 /* requires double parens and aTHX_ */
216 #define DEBUG_S_warn(args) \
218 PerlIO_printf(Perl_debug_log, "%s", SvPVx_nolen(Perl_mess args)) \
221 /* opslot_size includes the size of the slot header, and an op can't be smaller than BASEOP */
222 #define OPSLOT_SIZE_BASE (SIZE_TO_PSIZE(sizeof(OPSLOT)))
224 /* the number of bytes to allocate for a slab with sz * sizeof(I32 **) space for op */
225 #define OpSLABSizeBytes(sz) \
226 ((sz) * sizeof(I32 *) + STRUCT_OFFSET(OPSLAB, opslab_slots))
228 /* malloc a new op slab (suitable for attaching to PL_compcv).
229 * sz is in units of pointers from the beginning of opslab_opslots */
232 S_new_slab(pTHX_ OPSLAB *head, size_t sz)
235 size_t sz_bytes = OpSLABSizeBytes(sz);
237 /* opslot_offset is only U16 */
238 assert(sz < U16_MAX);
239 /* room for at least one op */
240 assert(sz >= OPSLOT_SIZE_BASE);
242 #ifdef PERL_DEBUG_READONLY_OPS
243 slab = (OPSLAB *) mmap(0, sz_bytes,
244 PROT_READ|PROT_WRITE,
245 MAP_ANON|MAP_PRIVATE, -1, 0);
246 DEBUG_m(PerlIO_printf(Perl_debug_log, "mapped %lu at %p\n",
247 (unsigned long) sz, slab));
248 if (slab == MAP_FAILED) {
249 perror("mmap failed");
253 slab = (OPSLAB *)PerlMemShared_malloc(sz_bytes);
254 Zero(slab, sz_bytes, char);
256 slab->opslab_size = (U16)sz;
259 /* The context is unused in non-Windows */
262 slab->opslab_free_space = sz;
263 slab->opslab_head = head ? head : slab;
264 DEBUG_S_warn((aTHX_ "allocated new op slab sz 0x%x, %p, head slab %p",
265 (unsigned int)slab->opslab_size, (void*)slab,
266 (void*)(slab->opslab_head)));
270 #define OPSLOT_SIZE_TO_INDEX(sz) ((sz) - OPSLOT_SIZE_BASE)
272 #define link_freed_op(slab, o) S_link_freed_op(aTHX_ slab, o)
274 S_link_freed_op(pTHX_ OPSLAB *slab, OP *o) {
275 U16 sz = OpSLOT(o)->opslot_size;
276 U16 index = OPSLOT_SIZE_TO_INDEX(sz);
278 assert(sz >= OPSLOT_SIZE_BASE);
279 /* make sure the array is large enough to include ops this large */
280 if (!slab->opslab_freed) {
281 /* we don't have a free list array yet, make a new one */
282 slab->opslab_freed_size = index+1;
283 slab->opslab_freed = (OP**)PerlMemShared_calloc((slab->opslab_freed_size), sizeof(OP*));
285 if (!slab->opslab_freed)
288 else if (index >= slab->opslab_freed_size) {
289 /* It's probably not worth doing exponential expansion here, the number of op sizes
292 /* We already have a list that isn't large enough, expand it */
293 size_t newsize = index+1;
294 OP **p = (OP **)PerlMemShared_realloc(slab->opslab_freed, newsize * sizeof(OP*));
299 Zero(p+slab->opslab_freed_size, newsize - slab->opslab_freed_size, OP *);
301 slab->opslab_freed = p;
302 slab->opslab_freed_size = newsize;
305 o->op_next = slab->opslab_freed[index];
306 slab->opslab_freed[index] = o;
309 /* Returns a sz-sized block of memory (suitable for holding an op) from
310 * a free slot in the chain of op slabs attached to PL_compcv.
311 * Allocates a new slab if necessary.
312 * if PL_compcv isn't compiling, malloc() instead.
316 Perl_Slab_Alloc(pTHX_ size_t sz)
318 OPSLAB *head_slab; /* first slab in the chain */
322 size_t sz_in_p; /* size in pointer units, including the OPSLOT header */
324 /* We only allocate ops from the slab during subroutine compilation.
325 We find the slab via PL_compcv, hence that must be non-NULL. It could
326 also be pointing to a subroutine which is now fully set up (CvROOT()
327 pointing to the top of the optree for that sub), or a subroutine
328 which isn't using the slab allocator. If our sanity checks aren't met,
329 don't use a slab, but allocate the OP directly from the heap. */
330 if (!PL_compcv || CvROOT(PL_compcv)
331 || (CvSTART(PL_compcv) && !CvSLABBED(PL_compcv)))
333 o = (OP*)PerlMemShared_calloc(1, sz);
337 /* While the subroutine is under construction, the slabs are accessed via
338 CvSTART(), to avoid needing to expand PVCV by one pointer for something
339 unneeded at runtime. Once a subroutine is constructed, the slabs are
340 accessed via CvROOT(). So if CvSTART() is NULL, no slab has been
341 allocated yet. See the commit message for 8be227ab5eaa23f2 for more
343 if (!CvSTART(PL_compcv)) {
345 (OP *)(head_slab = S_new_slab(aTHX_ NULL, PERL_SLAB_SIZE));
346 CvSLABBED_on(PL_compcv);
347 head_slab->opslab_refcnt = 2; /* one for the CV; one for the new OP */
349 else ++(head_slab = (OPSLAB *)CvSTART(PL_compcv))->opslab_refcnt;
351 sz_in_p = SIZE_TO_PSIZE(sz + OPSLOT_HEADER);
353 /* The head slab for each CV maintains a free list of OPs. In particular, constant folding
354 will free up OPs, so it makes sense to re-use them where possible. A
355 freed up slot is used in preference to a new allocation. */
356 if (head_slab->opslab_freed &&
357 OPSLOT_SIZE_TO_INDEX(sz_in_p) < head_slab->opslab_freed_size) {
360 /* look for a large enough size with any freed ops */
361 for (base_index = OPSLOT_SIZE_TO_INDEX(sz_in_p);
362 base_index < head_slab->opslab_freed_size && !head_slab->opslab_freed[base_index];
366 if (base_index < head_slab->opslab_freed_size) {
367 /* found a freed op */
368 o = head_slab->opslab_freed[base_index];
370 DEBUG_S_warn((aTHX_ "realloced op at %p, slab %p, head slab %p",
371 (void *)o, (void *)OpMySLAB(o), (void *)head_slab));
372 head_slab->opslab_freed[base_index] = o->op_next;
379 #define INIT_OPSLOT(s) \
380 slot->opslot_offset = DIFF(&slab2->opslab_slots, slot) ; \
381 slot->opslot_size = s; \
382 slab2->opslab_free_space -= s; \
383 o = &slot->opslot_op; \
386 /* The partially-filled slab is next in the chain. */
387 slab2 = head_slab->opslab_next ? head_slab->opslab_next : head_slab;
388 if (slab2->opslab_free_space < sz_in_p) {
389 /* Remaining space is too small. */
390 /* If we can fit a BASEOP, add it to the free chain, so as not
392 if (slab2->opslab_free_space >= OPSLOT_SIZE_BASE) {
393 slot = &slab2->opslab_slots;
394 INIT_OPSLOT(slab2->opslab_free_space);
395 o->op_type = OP_FREED;
396 DEBUG_S_warn((aTHX_ "linked unused op space at %p, slab %p, head slab %p",
397 (void *)o, (void *)slab2, (void *)head_slab));
398 link_freed_op(head_slab, o);
401 /* Create a new slab. Make this one twice as big. */
402 slab2 = S_new_slab(aTHX_ head_slab,
403 slab2->opslab_size > PERL_MAX_SLAB_SIZE / 2
405 : slab2->opslab_size * 2);
406 slab2->opslab_next = head_slab->opslab_next;
407 head_slab->opslab_next = slab2;
409 assert(slab2->opslab_size >= sz_in_p);
411 /* Create a new op slot */
412 slot = OpSLOToff(slab2, slab2->opslab_free_space - sz_in_p);
413 assert(slot >= &slab2->opslab_slots);
414 INIT_OPSLOT(sz_in_p);
415 DEBUG_S_warn((aTHX_ "allocating op at %p, slab %p, head slab %p",
416 (void*)o, (void*)slab2, (void*)head_slab));
419 /* moresib == 0, op_sibling == 0 implies a solitary unattached op */
420 assert(!o->op_moresib);
421 assert(!o->op_sibparent);
428 #ifdef PERL_DEBUG_READONLY_OPS
430 Perl_Slab_to_ro(pTHX_ OPSLAB *slab)
432 PERL_ARGS_ASSERT_SLAB_TO_RO;
434 if (slab->opslab_readonly) return;
435 slab->opslab_readonly = 1;
436 for (; slab; slab = slab->opslab_next) {
437 /*DEBUG_U(PerlIO_printf(Perl_debug_log,"mprotect ->ro %lu at %p\n",
438 (unsigned long) slab->opslab_size, (void *)slab));*/
439 if (mprotect(slab, OpSLABSizeBytes(slab->opslab_size), PROT_READ))
440 Perl_warn(aTHX_ "mprotect for %p %lu failed with %d", (void *)slab,
441 (unsigned long)slab->opslab_size, errno);
446 Perl_Slab_to_rw(pTHX_ OPSLAB *const slab)
450 PERL_ARGS_ASSERT_SLAB_TO_RW;
452 if (!slab->opslab_readonly) return;
454 for (; slab2; slab2 = slab2->opslab_next) {
455 /*DEBUG_U(PerlIO_printf(Perl_debug_log,"mprotect ->rw %lu at %p\n",
456 (unsigned long) size, (void *)slab2));*/
457 if (mprotect((void *)slab2, OpSLABSizeBytes(slab2->opslab_size),
458 PROT_READ|PROT_WRITE)) {
459 Perl_warn(aTHX_ "mprotect RW for %p %lu failed with %d", (void *)slab,
460 (unsigned long)slab2->opslab_size, errno);
463 slab->opslab_readonly = 0;
467 # define Slab_to_rw(op) NOOP
470 /* This cannot possibly be right, but it was copied from the old slab
471 allocator, to which it was originally added, without explanation, in
474 # define PerlMemShared PerlMem
477 /* make freed ops die if they're inadvertently executed */
482 DIE(aTHX_ "panic: freed op 0x%p called\n", PL_op);
487 /* Return the block of memory used by an op to the free list of
488 * the OP slab associated with that op.
492 Perl_Slab_Free(pTHX_ void *op)
494 OP * const o = (OP *)op;
497 PERL_ARGS_ASSERT_SLAB_FREE;
500 o->op_ppaddr = S_pp_freed;
503 if (!o->op_slabbed) {
505 PerlMemShared_free(op);
510 /* If this op is already freed, our refcount will get screwy. */
511 assert(o->op_type != OP_FREED);
512 o->op_type = OP_FREED;
513 link_freed_op(slab, o);
514 DEBUG_S_warn((aTHX_ "freeing op at %p, slab %p, head slab %p",
515 (void*)o, (void *)OpMySLAB(o), (void*)slab));
516 OpslabREFCNT_dec_padok(slab);
520 Perl_opslab_free_nopad(pTHX_ OPSLAB *slab)
522 const bool havepad = !!PL_comppad;
523 PERL_ARGS_ASSERT_OPSLAB_FREE_NOPAD;
526 PAD_SAVE_SETNULLPAD();
532 /* Free a chain of OP slabs. Should only be called after all ops contained
533 * in it have been freed. At this point, its reference count should be 1,
534 * because OpslabREFCNT_dec() skips doing rc-- when it detects that rc == 1,
535 * and just directly calls opslab_free().
536 * (Note that the reference count which PL_compcv held on the slab should
537 * have been removed once compilation of the sub was complete).
543 Perl_opslab_free(pTHX_ OPSLAB *slab)
546 PERL_ARGS_ASSERT_OPSLAB_FREE;
548 DEBUG_S_warn((aTHX_ "freeing slab %p", (void*)slab));
549 assert(slab->opslab_refcnt == 1);
550 PerlMemShared_free(slab->opslab_freed);
552 slab2 = slab->opslab_next;
554 slab->opslab_refcnt = ~(size_t)0;
556 #ifdef PERL_DEBUG_READONLY_OPS
557 DEBUG_m(PerlIO_printf(Perl_debug_log, "Deallocate slab at %p\n",
559 if (munmap(slab, OpSLABSizeBytes(slab->opslab_size))) {
560 perror("munmap failed");
564 PerlMemShared_free(slab);
570 /* like opslab_free(), but first calls op_free() on any ops in the slab
571 * not marked as OP_FREED
575 Perl_opslab_force_free(pTHX_ OPSLAB *slab)
579 size_t savestack_count = 0;
581 PERL_ARGS_ASSERT_OPSLAB_FORCE_FREE;
584 OPSLOT *slot = OpSLOToff(slab2, slab2->opslab_free_space);
585 OPSLOT *end = OpSLOToff(slab2, slab2->opslab_size);
587 slot = (OPSLOT*) ((I32**)slot + slot->opslot_size) )
589 if (slot->opslot_op.op_type != OP_FREED
590 && !(slot->opslot_op.op_savefree
596 assert(slot->opslot_op.op_slabbed);
597 op_free(&slot->opslot_op);
598 if (slab->opslab_refcnt == 1) goto free;
601 } while ((slab2 = slab2->opslab_next));
602 /* > 1 because the CV still holds a reference count. */
603 if (slab->opslab_refcnt > 1) { /* still referenced by the savestack */
605 assert(savestack_count == slab->opslab_refcnt-1);
607 /* Remove the CV’s reference count. */
608 slab->opslab_refcnt--;
615 #ifdef PERL_DEBUG_READONLY_OPS
617 Perl_op_refcnt_inc(pTHX_ OP *o)
620 OPSLAB *const slab = o->op_slabbed ? OpSLAB(o) : NULL;
621 if (slab && slab->opslab_readonly) {
634 Perl_op_refcnt_dec(pTHX_ OP *o)
637 OPSLAB *const slab = o->op_slabbed ? OpSLAB(o) : NULL;
639 PERL_ARGS_ASSERT_OP_REFCNT_DEC;
641 if (slab && slab->opslab_readonly) {
643 result = --o->op_targ;
646 result = --o->op_targ;
652 * In the following definition, the ", (OP*)0" is just to make the compiler
653 * think the expression is of the right type: croak actually does a Siglongjmp.
655 #define CHECKOP(type,o) \
656 ((PL_op_mask && PL_op_mask[type]) \
657 ? ( op_free((OP*)o), \
658 Perl_croak(aTHX_ "'%s' trapped by operation mask", PL_op_desc[type]), \
660 : PL_check[type](aTHX_ (OP*)o))
662 #define RETURN_UNLIMITED_NUMBER (PERL_INT_MAX / 2)
664 #define OpTYPE_set(o,type) \
666 o->op_type = (OPCODE)type; \
667 o->op_ppaddr = PL_ppaddr[type]; \
671 S_no_fh_allowed(pTHX_ OP *o)
673 PERL_ARGS_ASSERT_NO_FH_ALLOWED;
675 yyerror(Perl_form(aTHX_ "Missing comma after first argument to %s function",
681 S_too_few_arguments_pv(pTHX_ OP *o, const char* name, U32 flags)
683 PERL_ARGS_ASSERT_TOO_FEW_ARGUMENTS_PV;
684 yyerror_pv(Perl_form(aTHX_ "Not enough arguments for %s", name), flags);
689 S_too_many_arguments_pv(pTHX_ OP *o, const char *name, U32 flags)
691 PERL_ARGS_ASSERT_TOO_MANY_ARGUMENTS_PV;
693 yyerror_pv(Perl_form(aTHX_ "Too many arguments for %s", name), flags);
698 S_bad_type_pv(pTHX_ I32 n, const char *t, const OP *o, const OP *kid)
700 PERL_ARGS_ASSERT_BAD_TYPE_PV;
702 yyerror_pv(Perl_form(aTHX_ "Type of arg %d to %s must be %s (not %s)",
703 (int)n, PL_op_desc[(o)->op_type], t, OP_DESC(kid)), 0);
707 S_bad_type_gv(pTHX_ I32 n, GV *gv, const OP *kid, const char *t)
709 SV * const namesv = cv_name((CV *)gv, NULL, 0);
710 PERL_ARGS_ASSERT_BAD_TYPE_GV;
712 yyerror_pv(Perl_form(aTHX_ "Type of arg %d to %" SVf " must be %s (not %s)",
713 (int)n, SVfARG(namesv), t, OP_DESC(kid)), SvUTF8(namesv));
717 S_no_bareword_allowed(pTHX_ OP *o)
719 PERL_ARGS_ASSERT_NO_BAREWORD_ALLOWED;
721 qerror(Perl_mess(aTHX_
722 "Bareword \"%" SVf "\" not allowed while \"strict subs\" in use",
724 o->op_private &= ~OPpCONST_STRICT; /* prevent warning twice about the same OP */
727 /* "register" allocation */
730 Perl_allocmy(pTHX_ const char *const name, const STRLEN len, const U32 flags)
733 bool is_idfirst, is_default;
734 const bool is_our = (PL_parser->in_my == KEY_our);
736 PERL_ARGS_ASSERT_ALLOCMY;
738 if (flags & ~SVf_UTF8)
739 Perl_croak(aTHX_ "panic: allocmy illegal flag bits 0x%" UVxf,
742 is_idfirst = flags & SVf_UTF8
743 ? isIDFIRST_utf8_safe((U8*)name + 1, name + len)
744 : isIDFIRST_A(name[1]);
747 is_default = len == 2 && name[1] == '_';
749 /* complain about "my $<special_var>" etc etc */
750 if (!is_our && (!is_idfirst || is_default)) {
751 const char * const type =
752 PL_parser->in_my == KEY_sigvar ? "subroutine signature" :
753 PL_parser->in_my == KEY_state ? "\"state\"" : "\"my\"";
755 if (!(flags & SVf_UTF8 && UTF8_IS_START(name[1]))
757 && (!isPRINT(name[1]) || memCHRs("\t\n\r\f", name[1]))) {
758 /* diag_listed_as: Can't use global %s in %s */
759 yyerror(Perl_form(aTHX_ "Can't use global %c^%c%.*s in %s",
760 name[0], toCTRL(name[1]),
761 (int)(len - 2), name + 2,
764 yyerror_pv(Perl_form(aTHX_ "Can't use global %.*s in %s",
766 type), flags & SVf_UTF8);
770 /* allocate a spare slot and store the name in that slot */
772 off = pad_add_name_pvn(name, len,
773 (is_our ? padadd_OUR :
774 PL_parser->in_my == KEY_state ? padadd_STATE : 0),
775 PL_parser->in_my_stash,
777 /* $_ is always in main::, even with our */
778 ? (PL_curstash && !memEQs(name,len,"$_")
784 /* anon sub prototypes contains state vars should always be cloned,
785 * otherwise the state var would be shared between anon subs */
787 if (PL_parser->in_my == KEY_state && CvANON(PL_compcv))
788 CvCLONE_on(PL_compcv);
794 =for apidoc_section $optree_manipulation
796 =for apidoc alloccopstash
798 Available only under threaded builds, this function allocates an entry in
799 C<PL_stashpad> for the stash passed to it.
806 Perl_alloccopstash(pTHX_ HV *hv)
808 PADOFFSET off = 0, o = 1;
809 bool found_slot = FALSE;
811 PERL_ARGS_ASSERT_ALLOCCOPSTASH;
813 if (PL_stashpad[PL_stashpadix] == hv) return PL_stashpadix;
815 for (; o < PL_stashpadmax; ++o) {
816 if (PL_stashpad[o] == hv) return PL_stashpadix = o;
817 if (!PL_stashpad[o] || SvTYPE(PL_stashpad[o]) != SVt_PVHV)
818 found_slot = TRUE, off = o;
821 Renew(PL_stashpad, PL_stashpadmax + 10, HV *);
822 Zero(PL_stashpad + PL_stashpadmax, 10, HV *);
823 off = PL_stashpadmax;
824 PL_stashpadmax += 10;
827 PL_stashpad[PL_stashpadix = off] = hv;
832 /* free the body of an op without examining its contents.
833 * Always use this rather than FreeOp directly */
836 S_op_destroy(pTHX_ OP *o)
846 Free an op and its children. Only use this when an op is no longer linked
853 Perl_op_free(pTHX_ OP *o)
858 bool went_up = FALSE; /* whether we reached the current node by
859 following the parent pointer from a child, and
860 so have already seen this node */
862 if (!o || o->op_type == OP_FREED)
865 if (o->op_private & OPpREFCOUNTED) {
866 /* if base of tree is refcounted, just decrement */
867 switch (o->op_type) {
877 refcnt = OpREFCNT_dec(o);
880 /* Need to find and remove any pattern match ops from
881 * the list we maintain for reset(). */
882 find_and_forget_pmops(o);
895 /* free child ops before ourself, (then free ourself "on the
898 if (!went_up && o->op_flags & OPf_KIDS) {
899 next_op = cUNOPo->op_first;
903 /* find the next node to visit, *then* free the current node
904 * (can't rely on o->op_* fields being valid after o has been
907 /* The next node to visit will be either the sibling, or the
908 * parent if no siblings left, or NULL if we've worked our way
909 * back up to the top node in the tree */
910 next_op = (o == top_op) ? NULL : o->op_sibparent;
911 went_up = cBOOL(!OpHAS_SIBLING(o)); /* parents are already visited */
913 /* Now process the current node */
915 /* Though ops may be freed twice, freeing the op after its slab is a
917 assert(!o->op_slabbed || OpSLAB(o)->opslab_refcnt != ~(size_t)0);
918 /* During the forced freeing of ops after compilation failure, kidops
919 may be freed before their parents. */
920 if (!o || o->op_type == OP_FREED)
925 /* an op should only ever acquire op_private flags that we know about.
926 * If this fails, you may need to fix something in regen/op_private.
927 * Don't bother testing if:
928 * * the op_ppaddr doesn't match the op; someone may have
929 * overridden the op and be doing strange things with it;
930 * * we've errored, as op flags are often left in an
931 * inconsistent state then. Note that an error when
932 * compiling the main program leaves PL_parser NULL, so
933 * we can't spot faults in the main code, only
934 * evaled/required code */
936 if ( o->op_ppaddr == PL_ppaddr[type]
938 && !PL_parser->error_count)
940 assert(!(o->op_private & ~PL_op_private_valid[type]));
945 /* Call the op_free hook if it has been set. Do it now so that it's called
946 * at the right time for refcounted ops, but still before all of the kids
951 type = (OPCODE)o->op_targ;
954 Slab_to_rw(OpSLAB(o));
956 /* COP* is not cleared by op_clear() so that we may track line
957 * numbers etc even after null() */
958 if (type == OP_NEXTSTATE || type == OP_DBSTATE) {
970 /* S_op_clear_gv(): free a GV attached to an OP */
974 void S_op_clear_gv(pTHX_ OP *o, PADOFFSET *ixp)
976 void S_op_clear_gv(pTHX_ OP *o, SV**svp)
980 GV *gv = (o->op_type == OP_GV || o->op_type == OP_GVSV
981 || o->op_type == OP_MULTIDEREF)
984 ? ((GV*)PAD_SVl(*ixp)) : NULL;
986 ? (GV*)(*svp) : NULL;
988 /* It's possible during global destruction that the GV is freed
989 before the optree. Whilst the SvREFCNT_inc is happy to bump from
990 0 to 1 on a freed SV, the corresponding SvREFCNT_dec from 1 to 0
991 will trigger an assertion failure, because the entry to sv_clear
992 checks that the scalar is not already freed. A check of for
993 !SvIS_FREED(gv) turns out to be invalid, because during global
994 destruction the reference count can be forced down to zero
995 (with SVf_BREAK set). In which case raising to 1 and then
996 dropping to 0 triggers cleanup before it should happen. I
997 *think* that this might actually be a general, systematic,
998 weakness of the whole idea of SVf_BREAK, in that code *is*
999 allowed to raise and lower references during global destruction,
1000 so any *valid* code that happens to do this during global
1001 destruction might well trigger premature cleanup. */
1002 bool still_valid = gv && SvREFCNT(gv);
1005 SvREFCNT_inc_simple_void(gv);
1008 pad_swipe(*ixp, TRUE);
1016 int try_downgrade = SvREFCNT(gv) == 2;
1017 SvREFCNT_dec_NN(gv);
1019 gv_try_downgrade(gv);
1025 Perl_op_clear(pTHX_ OP *o)
1029 PERL_ARGS_ASSERT_OP_CLEAR;
1031 switch (o->op_type) {
1032 case OP_NULL: /* Was holding old type, if any. */
1035 case OP_ENTEREVAL: /* Was holding hints. */
1036 case OP_ARGDEFELEM: /* Was holding signature index. */
1040 if (!(o->op_flags & OPf_REF) || !OP_IS_STAT(o->op_type))
1047 S_op_clear_gv(aTHX_ o, &(cPADOPx(o)->op_padix));
1049 S_op_clear_gv(aTHX_ o, &(cSVOPx(o)->op_sv));
1052 case OP_METHOD_REDIR:
1053 case OP_METHOD_REDIR_SUPER:
1055 if (cMETHOPx(o)->op_rclass_targ) {
1056 pad_swipe(cMETHOPx(o)->op_rclass_targ, 1);
1057 cMETHOPx(o)->op_rclass_targ = 0;
1060 SvREFCNT_dec(cMETHOPx(o)->op_rclass_sv);
1061 cMETHOPx(o)->op_rclass_sv = NULL;
1064 case OP_METHOD_NAMED:
1065 case OP_METHOD_SUPER:
1066 SvREFCNT_dec(cMETHOPx(o)->op_u.op_meth_sv);
1067 cMETHOPx(o)->op_u.op_meth_sv = NULL;
1070 pad_swipe(o->op_targ, 1);
1077 SvREFCNT_dec(cSVOPo->op_sv);
1078 cSVOPo->op_sv = NULL;
1081 Even if op_clear does a pad_free for the target of the op,
1082 pad_free doesn't actually remove the sv that exists in the pad;
1083 instead it lives on. This results in that it could be reused as
1084 a target later on when the pad was reallocated.
1087 pad_swipe(o->op_targ,1);
1097 if (o->op_flags & (OPf_SPECIAL|OPf_STACKED|OPf_KIDS))
1102 if ( (o->op_type == OP_TRANS || o->op_type == OP_TRANSR)
1103 && (o->op_private & OPpTRANS_USE_SVOP))
1106 if (cPADOPo->op_padix > 0) {
1107 pad_swipe(cPADOPo->op_padix, TRUE);
1108 cPADOPo->op_padix = 0;
1111 SvREFCNT_dec(cSVOPo->op_sv);
1112 cSVOPo->op_sv = NULL;
1116 PerlMemShared_free(cPVOPo->op_pv);
1117 cPVOPo->op_pv = NULL;
1121 op_free(cPMOPo->op_pmreplrootu.op_pmreplroot);
1125 if ( (o->op_private & OPpSPLIT_ASSIGN) /* @array = split */
1126 && !(o->op_flags & OPf_STACKED)) /* @{expr} = split */
1128 if (o->op_private & OPpSPLIT_LEX)
1129 pad_free(cPMOPo->op_pmreplrootu.op_pmtargetoff);
1132 pad_swipe(cPMOPo->op_pmreplrootu.op_pmtargetoff, TRUE);
1134 SvREFCNT_dec(MUTABLE_SV(cPMOPo->op_pmreplrootu.op_pmtargetgv));
1141 if (!(cPMOPo->op_pmflags & PMf_CODELIST_PRIVATE))
1142 op_free(cPMOPo->op_code_list);
1143 cPMOPo->op_code_list = NULL;
1144 forget_pmop(cPMOPo);
1145 cPMOPo->op_pmreplrootu.op_pmreplroot = NULL;
1146 /* we use the same protection as the "SAFE" version of the PM_ macros
1147 * here since sv_clean_all might release some PMOPs
1148 * after PL_regex_padav has been cleared
1149 * and the clearing of PL_regex_padav needs to
1150 * happen before sv_clean_all
1153 if(PL_regex_pad) { /* We could be in destruction */
1154 const IV offset = (cPMOPo)->op_pmoffset;
1155 ReREFCNT_dec(PM_GETRE(cPMOPo));
1156 PL_regex_pad[offset] = &PL_sv_undef;
1157 sv_catpvn_nomg(PL_regex_pad[0], (const char *)&offset,
1161 ReREFCNT_dec(PM_GETRE(cPMOPo));
1162 PM_SETRE(cPMOPo, NULL);
1168 PerlMemShared_free(cUNOP_AUXo->op_aux);
1171 case OP_MULTICONCAT:
1173 UNOP_AUX_item *aux = cUNOP_AUXo->op_aux;
1174 /* aux[PERL_MULTICONCAT_IX_PLAIN_PV] and/or
1175 * aux[PERL_MULTICONCAT_IX_UTF8_PV] point to plain and/or
1176 * utf8 shared strings */
1177 char *p1 = aux[PERL_MULTICONCAT_IX_PLAIN_PV].pv;
1178 char *p2 = aux[PERL_MULTICONCAT_IX_UTF8_PV].pv;
1180 PerlMemShared_free(p1);
1182 PerlMemShared_free(p2);
1183 PerlMemShared_free(aux);
1189 UNOP_AUX_item *items = cUNOP_AUXo->op_aux;
1190 UV actions = items->uv;
1192 bool is_hash = FALSE;
1195 switch (actions & MDEREF_ACTION_MASK) {
1198 actions = (++items)->uv;
1201 case MDEREF_HV_padhv_helem:
1204 case MDEREF_AV_padav_aelem:
1205 pad_free((++items)->pad_offset);
1208 case MDEREF_HV_gvhv_helem:
1211 case MDEREF_AV_gvav_aelem:
1213 S_op_clear_gv(aTHX_ o, &((++items)->pad_offset));
1215 S_op_clear_gv(aTHX_ o, &((++items)->sv));
1219 case MDEREF_HV_gvsv_vivify_rv2hv_helem:
1222 case MDEREF_AV_gvsv_vivify_rv2av_aelem:
1224 S_op_clear_gv(aTHX_ o, &((++items)->pad_offset));
1226 S_op_clear_gv(aTHX_ o, &((++items)->sv));
1228 goto do_vivify_rv2xv_elem;
1230 case MDEREF_HV_padsv_vivify_rv2hv_helem:
1233 case MDEREF_AV_padsv_vivify_rv2av_aelem:
1234 pad_free((++items)->pad_offset);
1235 goto do_vivify_rv2xv_elem;
1237 case MDEREF_HV_pop_rv2hv_helem:
1238 case MDEREF_HV_vivify_rv2hv_helem:
1241 do_vivify_rv2xv_elem:
1242 case MDEREF_AV_pop_rv2av_aelem:
1243 case MDEREF_AV_vivify_rv2av_aelem:
1245 switch (actions & MDEREF_INDEX_MASK) {
1246 case MDEREF_INDEX_none:
1249 case MDEREF_INDEX_const:
1253 pad_swipe((++items)->pad_offset, 1);
1255 SvREFCNT_dec((++items)->sv);
1261 case MDEREF_INDEX_padsv:
1262 pad_free((++items)->pad_offset);
1264 case MDEREF_INDEX_gvsv:
1266 S_op_clear_gv(aTHX_ o, &((++items)->pad_offset));
1268 S_op_clear_gv(aTHX_ o, &((++items)->sv));
1273 if (actions & MDEREF_FLAG_last)
1286 actions >>= MDEREF_SHIFT;
1289 /* start of malloc is at op_aux[-1], where the length is
1291 PerlMemShared_free(cUNOP_AUXo->op_aux - 1);
1296 if (o->op_targ > 0) {
1297 pad_free(o->op_targ);
1303 S_cop_free(pTHX_ COP* cop)
1305 PERL_ARGS_ASSERT_COP_FREE;
1308 if (! specialWARN(cop->cop_warnings))
1309 PerlMemShared_free(cop->cop_warnings);
1310 cophh_free(CopHINTHASH_get(cop));
1311 if (PL_curcop == cop)
1316 S_forget_pmop(pTHX_ PMOP *const o)
1318 HV * const pmstash = PmopSTASH(o);
1320 PERL_ARGS_ASSERT_FORGET_PMOP;
1322 if (pmstash && !SvIS_FREED(pmstash) && SvMAGICAL(pmstash)) {
1323 MAGIC * const mg = mg_find((const SV *)pmstash, PERL_MAGIC_symtab);
1325 PMOP **const array = (PMOP**) mg->mg_ptr;
1326 U32 count = mg->mg_len / sizeof(PMOP**);
1330 if (array[i] == o) {
1331 /* Found it. Move the entry at the end to overwrite it. */
1332 array[i] = array[--count];
1333 mg->mg_len = count * sizeof(PMOP**);
1334 /* Could realloc smaller at this point always, but probably
1335 not worth it. Probably worth free()ing if we're the
1338 Safefree(mg->mg_ptr);
1352 S_find_and_forget_pmops(pTHX_ OP *o)
1356 PERL_ARGS_ASSERT_FIND_AND_FORGET_PMOPS;
1359 switch (o->op_type) {
1364 forget_pmop((PMOP*)o);
1367 if (o->op_flags & OPf_KIDS) {
1368 o = cUNOPo->op_first;
1374 return; /* at top; no parents/siblings to try */
1375 if (OpHAS_SIBLING(o)) {
1376 o = o->op_sibparent; /* process next sibling */
1379 o = o->op_sibparent; /*try parent's next sibling */
1388 Neutralizes an op when it is no longer needed, but is still linked to from
1395 Perl_op_null(pTHX_ OP *o)
1398 PERL_ARGS_ASSERT_OP_NULL;
1400 if (o->op_type == OP_NULL)
1403 o->op_targ = o->op_type;
1404 OpTYPE_set(o, OP_NULL);
1408 Perl_op_refcnt_lock(pTHX)
1409 PERL_TSA_ACQUIRE(PL_op_mutex)
1411 PERL_UNUSED_CONTEXT;
1416 Perl_op_refcnt_unlock(pTHX)
1417 PERL_TSA_RELEASE(PL_op_mutex)
1419 PERL_UNUSED_CONTEXT;
1425 =for apidoc op_sibling_splice
1427 A general function for editing the structure of an existing chain of
1428 op_sibling nodes. By analogy with the perl-level C<splice()> function, allows
1429 you to delete zero or more sequential nodes, replacing them with zero or
1430 more different nodes. Performs the necessary op_first/op_last
1431 housekeeping on the parent node and op_sibling manipulation on the
1432 children. The last deleted node will be marked as the last node by
1433 updating the op_sibling/op_sibparent or op_moresib field as appropriate.
1435 Note that op_next is not manipulated, and nodes are not freed; that is the
1436 responsibility of the caller. It also won't create a new list op for an
1437 empty list etc; use higher-level functions like op_append_elem() for that.
1439 C<parent> is the parent node of the sibling chain. It may passed as C<NULL> if
1440 the splicing doesn't affect the first or last op in the chain.
1442 C<start> is the node preceding the first node to be spliced. Node(s)
1443 following it will be deleted, and ops will be inserted after it. If it is
1444 C<NULL>, the first node onwards is deleted, and nodes are inserted at the
1447 C<del_count> is the number of nodes to delete. If zero, no nodes are deleted.
1448 If -1 or greater than or equal to the number of remaining kids, all
1449 remaining kids are deleted.
1451 C<insert> is the first of a chain of nodes to be inserted in place of the nodes.
1452 If C<NULL>, no nodes are inserted.
1454 The head of the chain of deleted ops is returned, or C<NULL> if no ops were
1459 action before after returns
1460 ------ ----- ----- -------
1463 splice(P, A, 2, X-Y-Z) | | B-C
1467 splice(P, NULL, 1, X-Y) | | A
1471 splice(P, NULL, 3, NULL) | | A-B-C
1475 splice(P, B, 0, X-Y) | | NULL
1479 For lower-level direct manipulation of C<op_sibparent> and C<op_moresib>,
1480 see C<L</OpMORESIB_set>>, C<L</OpLASTSIB_set>>, C<L</OpMAYBESIB_set>>.
1486 Perl_op_sibling_splice(OP *parent, OP *start, int del_count, OP* insert)
1490 OP *last_del = NULL;
1491 OP *last_ins = NULL;
1494 first = OpSIBLING(start);
1498 first = cLISTOPx(parent)->op_first;
1500 assert(del_count >= -1);
1502 if (del_count && first) {
1504 while (--del_count && OpHAS_SIBLING(last_del))
1505 last_del = OpSIBLING(last_del);
1506 rest = OpSIBLING(last_del);
1507 OpLASTSIB_set(last_del, NULL);
1514 while (OpHAS_SIBLING(last_ins))
1515 last_ins = OpSIBLING(last_ins);
1516 OpMAYBESIB_set(last_ins, rest, NULL);
1522 OpMAYBESIB_set(start, insert, NULL);
1526 cLISTOPx(parent)->op_first = insert;
1528 parent->op_flags |= OPf_KIDS;
1530 parent->op_flags &= ~OPf_KIDS;
1534 /* update op_last etc */
1541 /* ought to use OP_CLASS(parent) here, but that can't handle
1542 * ex-foo OP_NULL ops. Also note that XopENTRYCUSTOM() can't
1544 type = parent->op_type;
1545 if (type == OP_CUSTOM) {
1547 type = XopENTRYCUSTOM(parent, xop_class);
1550 if (type == OP_NULL)
1551 type = parent->op_targ;
1552 type = PL_opargs[type] & OA_CLASS_MASK;
1555 lastop = last_ins ? last_ins : start ? start : NULL;
1556 if ( type == OA_BINOP
1557 || type == OA_LISTOP
1561 cLISTOPx(parent)->op_last = lastop;
1564 OpLASTSIB_set(lastop, parent);
1566 return last_del ? first : NULL;
1569 Perl_croak_nocontext("panic: op_sibling_splice(): NULL parent");
1573 =for apidoc op_parent
1575 Returns the parent OP of C<o>, if it has a parent. Returns C<NULL> otherwise.
1581 Perl_op_parent(OP *o)
1583 PERL_ARGS_ASSERT_OP_PARENT;
1584 while (OpHAS_SIBLING(o))
1586 return o->op_sibparent;
1589 /* replace the sibling following start with a new UNOP, which becomes
1590 * the parent of the original sibling; e.g.
1592 * op_sibling_newUNOP(P, A, unop-args...)
1600 * where U is the new UNOP.
1602 * parent and start args are the same as for op_sibling_splice();
1603 * type and flags args are as newUNOP().
1605 * Returns the new UNOP.
1609 S_op_sibling_newUNOP(pTHX_ OP *parent, OP *start, I32 type, I32 flags)
1613 kid = op_sibling_splice(parent, start, 1, NULL);
1614 newop = newUNOP(type, flags, kid);
1615 op_sibling_splice(parent, start, 0, newop);
1620 /* lowest-level newLOGOP-style function - just allocates and populates
1621 * the struct. Higher-level stuff should be done by S_new_logop() /
1622 * newLOGOP(). This function exists mainly to avoid op_first assignment
1623 * being spread throughout this file.
1627 Perl_alloc_LOGOP(pTHX_ I32 type, OP *first, OP* other)
1631 NewOp(1101, logop, 1, LOGOP);
1632 OpTYPE_set(logop, type);
1633 logop->op_first = first;
1634 logop->op_other = other;
1636 logop->op_flags = OPf_KIDS;
1637 while (kid && OpHAS_SIBLING(kid))
1638 kid = OpSIBLING(kid);
1640 OpLASTSIB_set(kid, (OP*)logop);
1645 /* Contextualizers */
1648 =for apidoc op_contextualize
1650 Applies a syntactic context to an op tree representing an expression.
1651 C<o> is the op tree, and C<context> must be C<G_SCALAR>, C<G_ARRAY>,
1652 or C<G_VOID> to specify the context to apply. The modified op tree
1659 Perl_op_contextualize(pTHX_ OP *o, I32 context)
1661 PERL_ARGS_ASSERT_OP_CONTEXTUALIZE;
1663 case G_SCALAR: return scalar(o);
1664 case G_ARRAY: return list(o);
1665 case G_VOID: return scalarvoid(o);
1667 Perl_croak(aTHX_ "panic: op_contextualize bad context %ld",
1674 =for apidoc op_linklist
1675 This function is the implementation of the L</LINKLIST> macro. It should
1676 not be called directly.
1683 Perl_op_linklist(pTHX_ OP *o)
1690 PERL_ARGS_ASSERT_OP_LINKLIST;
1693 /* Descend down the tree looking for any unprocessed subtrees to
1696 if (o->op_flags & OPf_KIDS) {
1697 o = cUNOPo->op_first;
1700 o->op_next = o; /* leaf node; link to self initially */
1703 /* if we're at the top level, there either weren't any children
1704 * to process, or we've worked our way back to the top. */
1708 /* o is now processed. Next, process any sibling subtrees */
1710 if (OpHAS_SIBLING(o)) {
1715 /* Done all the subtrees at this level. Go back up a level and
1716 * link the parent in with all its (processed) children.
1719 o = o->op_sibparent;
1720 assert(!o->op_next);
1721 prevp = &(o->op_next);
1722 kid = (o->op_flags & OPf_KIDS) ? cUNOPo->op_first : NULL;
1724 *prevp = kid->op_next;
1725 prevp = &(kid->op_next);
1726 kid = OpSIBLING(kid);
1734 S_scalarkids(pTHX_ OP *o)
1736 if (o && o->op_flags & OPf_KIDS) {
1738 for (kid = cLISTOPo->op_first; kid; kid = OpSIBLING(kid))
1745 S_scalarboolean(pTHX_ OP *o)
1747 PERL_ARGS_ASSERT_SCALARBOOLEAN;
1749 if ((o->op_type == OP_SASSIGN && cBINOPo->op_first->op_type == OP_CONST &&
1750 !(cBINOPo->op_first->op_flags & OPf_SPECIAL)) ||
1751 (o->op_type == OP_NOT && cUNOPo->op_first->op_type == OP_SASSIGN &&
1752 cBINOPx(cUNOPo->op_first)->op_first->op_type == OP_CONST &&
1753 !(cBINOPx(cUNOPo->op_first)->op_first->op_flags & OPf_SPECIAL))) {
1754 if (ckWARN(WARN_SYNTAX)) {
1755 const line_t oldline = CopLINE(PL_curcop);
1757 if (PL_parser && PL_parser->copline != NOLINE) {
1758 /* This ensures that warnings are reported at the first line
1759 of the conditional, not the last. */
1760 CopLINE_set(PL_curcop, PL_parser->copline);
1762 Perl_warner(aTHX_ packWARN(WARN_SYNTAX), "Found = in conditional, should be ==");
1763 CopLINE_set(PL_curcop, oldline);
1770 S_op_varname_subscript(pTHX_ const OP *o, int subscript_type)
1773 assert(o->op_type == OP_PADAV || o->op_type == OP_RV2AV ||
1774 o->op_type == OP_PADHV || o->op_type == OP_RV2HV);
1776 const char funny = o->op_type == OP_PADAV
1777 || o->op_type == OP_RV2AV ? '@' : '%';
1778 if (o->op_type == OP_RV2AV || o->op_type == OP_RV2HV) {
1780 if (cUNOPo->op_first->op_type != OP_GV
1781 || !(gv = cGVOPx_gv(cUNOPo->op_first)))
1783 return varname(gv, funny, 0, NULL, 0, subscript_type);
1786 varname(MUTABLE_GV(PL_compcv), funny, o->op_targ, NULL, 0, subscript_type);
1791 S_op_varname(pTHX_ const OP *o)
1793 return S_op_varname_subscript(aTHX_ o, 1);
1797 S_op_pretty(pTHX_ const OP *o, SV **retsv, const char **retpv)
1798 { /* or not so pretty :-) */
1799 if (o->op_type == OP_CONST) {
1801 if (SvPOK(*retsv)) {
1803 *retsv = sv_newmortal();
1804 pv_pretty(*retsv, SvPVX_const(sv), SvCUR(sv), 32, NULL, NULL,
1805 PERL_PV_PRETTY_DUMP |PERL_PV_ESCAPE_UNI_DETECT);
1807 else if (!SvOK(*retsv))
1810 else *retpv = "...";
1814 S_scalar_slice_warning(pTHX_ const OP *o)
1817 const bool h = o->op_type == OP_HSLICE
1818 || (o->op_type == OP_NULL && o->op_targ == OP_HSLICE);
1824 SV *keysv = NULL; /* just to silence compiler warnings */
1825 const char *key = NULL;
1827 if (!(o->op_private & OPpSLICEWARNING))
1829 if (PL_parser && PL_parser->error_count)
1830 /* This warning can be nonsensical when there is a syntax error. */
1833 kid = cLISTOPo->op_first;
1834 kid = OpSIBLING(kid); /* get past pushmark */
1835 /* weed out false positives: any ops that can return lists */
1836 switch (kid->op_type) {
1862 /* Don't warn if we have a nulled list either. */
1863 if (kid->op_type == OP_NULL && kid->op_targ == OP_LIST)
1866 assert(OpSIBLING(kid));
1867 name = S_op_varname(aTHX_ OpSIBLING(kid));
1868 if (!name) /* XS module fiddling with the op tree */
1870 S_op_pretty(aTHX_ kid, &keysv, &key);
1871 assert(SvPOK(name));
1872 sv_chop(name,SvPVX(name)+1);
1874 /* diag_listed_as: Scalar value @%s[%s] better written as $%s[%s] */
1875 Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
1876 "Scalar value @%" SVf "%c%s%c better written as $%" SVf
1878 SVfARG(name), lbrack, key, rbrack, SVfARG(name),
1879 lbrack, key, rbrack);
1881 /* diag_listed_as: Scalar value @%s[%s] better written as $%s[%s] */
1882 Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
1883 "Scalar value @%" SVf "%c%" SVf "%c better written as $%"
1885 SVfARG(name), lbrack, SVfARG(keysv), rbrack,
1886 SVfARG(name), lbrack, SVfARG(keysv), rbrack);
1891 /* apply scalar context to the o subtree */
1894 Perl_scalar(pTHX_ OP *o)
1899 OP *next_kid = NULL; /* what op (if any) to process next */
1902 /* assumes no premature commitment */
1903 if (!o || (PL_parser && PL_parser->error_count)
1904 || (o->op_flags & OPf_WANT)
1905 || o->op_type == OP_RETURN)
1910 o->op_flags = (o->op_flags & ~OPf_WANT) | OPf_WANT_SCALAR;
1912 switch (o->op_type) {
1914 scalar(cBINOPo->op_first);
1915 /* convert what initially looked like a list repeat into a
1916 * scalar repeat, e.g. $s = (1) x $n
1918 if (o->op_private & OPpREPEAT_DOLIST) {
1919 kid = cLISTOPx(cUNOPo->op_first)->op_first;
1920 assert(kid->op_type == OP_PUSHMARK);
1921 if (OpHAS_SIBLING(kid) && !OpHAS_SIBLING(OpSIBLING(kid))) {
1922 op_null(cLISTOPx(cUNOPo->op_first)->op_first);
1923 o->op_private &=~ OPpREPEAT_DOLIST;
1931 /* impose scalar context on everything except the condition */
1932 next_kid = OpSIBLING(cUNOPo->op_first);
1936 if (o->op_flags & OPf_KIDS)
1937 next_kid = cUNOPo->op_first; /* do all kids */
1940 /* the children of these ops are usually a list of statements,
1941 * except the leaves, whose first child is a corresponding enter
1946 kid = cLISTOPo->op_first;
1950 kid = cLISTOPo->op_first;
1952 kid = OpSIBLING(kid);
1955 OP *sib = OpSIBLING(kid);
1956 /* Apply void context to all kids except the last, which
1957 * is scalar (ignoring a trailing ex-nextstate in determining
1958 * if it's the last kid). E.g.
1959 * $scalar = do { void; void; scalar }
1960 * Except that 'when's are always scalar, e.g.
1961 * $scalar = do { given(..) {
1962 * when (..) { scalar }
1963 * when (..) { scalar }
1968 || ( !OpHAS_SIBLING(sib)
1969 && sib->op_type == OP_NULL
1970 && ( sib->op_targ == OP_NEXTSTATE
1971 || sib->op_targ == OP_DBSTATE )
1975 /* tail call optimise calling scalar() on the last kid */
1979 else if (kid->op_type == OP_LEAVEWHEN)
1985 NOT_REACHED; /* NOTREACHED */
1989 Perl_ck_warner(aTHX_ packWARN(WARN_VOID), "Useless use of sort in scalar context");
1995 /* Warn about scalar context */
1996 const char lbrack = o->op_type == OP_KVHSLICE ? '{' : '[';
1997 const char rbrack = o->op_type == OP_KVHSLICE ? '}' : ']';
2000 const char *key = NULL;
2002 /* This warning can be nonsensical when there is a syntax error. */
2003 if (PL_parser && PL_parser->error_count)
2006 if (!ckWARN(WARN_SYNTAX)) break;
2008 kid = cLISTOPo->op_first;
2009 kid = OpSIBLING(kid); /* get past pushmark */
2010 assert(OpSIBLING(kid));
2011 name = S_op_varname(aTHX_ OpSIBLING(kid));
2012 if (!name) /* XS module fiddling with the op tree */
2014 S_op_pretty(aTHX_ kid, &keysv, &key);
2015 assert(SvPOK(name));
2016 sv_chop(name,SvPVX(name)+1);
2018 /* diag_listed_as: %%s[%s] in scalar context better written as $%s[%s] */
2019 Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
2020 "%%%" SVf "%c%s%c in scalar context better written "
2021 "as $%" SVf "%c%s%c",
2022 SVfARG(name), lbrack, key, rbrack, SVfARG(name),
2023 lbrack, key, rbrack);
2025 /* diag_listed_as: %%s[%s] in scalar context better written as $%s[%s] */
2026 Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
2027 "%%%" SVf "%c%" SVf "%c in scalar context better "
2028 "written as $%" SVf "%c%" SVf "%c",
2029 SVfARG(name), lbrack, SVfARG(keysv), rbrack,
2030 SVfARG(name), lbrack, SVfARG(keysv), rbrack);
2034 /* If next_kid is set, someone in the code above wanted us to process
2035 * that kid and all its remaining siblings. Otherwise, work our way
2036 * back up the tree */
2040 return top_op; /* at top; no parents/siblings to try */
2041 if (OpHAS_SIBLING(o))
2042 next_kid = o->op_sibparent;
2044 o = o->op_sibparent; /*try parent's next sibling */
2045 switch (o->op_type) {
2051 /* should really restore PL_curcop to its old value, but
2052 * setting it to PL_compiling is better than do nothing */
2053 PL_curcop = &PL_compiling;
2062 /* apply void context to the optree arg */
2065 Perl_scalarvoid(pTHX_ OP *arg)
2071 PERL_ARGS_ASSERT_SCALARVOID;
2075 SV *useless_sv = NULL;
2076 const char* useless = NULL;
2077 OP * next_kid = NULL;
2079 if (o->op_type == OP_NEXTSTATE
2080 || o->op_type == OP_DBSTATE
2081 || (o->op_type == OP_NULL && (o->op_targ == OP_NEXTSTATE
2082 || o->op_targ == OP_DBSTATE)))
2083 PL_curcop = (COP*)o; /* for warning below */
2085 /* assumes no premature commitment */
2086 want = o->op_flags & OPf_WANT;
2087 if ((want && want != OPf_WANT_SCALAR)
2088 || (PL_parser && PL_parser->error_count)
2089 || o->op_type == OP_RETURN || o->op_type == OP_REQUIRE || o->op_type == OP_LEAVEWHEN)
2094 if ((o->op_private & OPpTARGET_MY)
2095 && (PL_opargs[o->op_type] & OA_TARGLEX))/* OPp share the meaning */
2097 /* newASSIGNOP has already applied scalar context, which we
2098 leave, as if this op is inside SASSIGN. */
2102 o->op_flags = (o->op_flags & ~OPf_WANT) | OPf_WANT_VOID;
2104 switch (o->op_type) {
2106 if (!(PL_opargs[o->op_type] & OA_FOLDCONST))
2110 if (o->op_flags & OPf_STACKED)
2112 if (o->op_type == OP_REPEAT)
2113 scalar(cBINOPo->op_first);
2116 if ((o->op_flags & OPf_STACKED) &&
2117 !(o->op_private & OPpCONCAT_NESTED))
2121 if (o->op_private == 4)
2156 case OP_GETSOCKNAME:
2157 case OP_GETPEERNAME:
2162 case OP_GETPRIORITY:
2187 useless = OP_DESC(o);
2197 case OP_AELEMFAST_LEX:
2201 if (!(o->op_private & (OPpLVAL_INTRO|OPpOUR_INTRO)))
2202 /* Otherwise it's "Useless use of grep iterator" */
2203 useless = OP_DESC(o);
2207 if (!(o->op_private & OPpSPLIT_ASSIGN))
2208 useless = OP_DESC(o);
2212 kid = cUNOPo->op_first;
2213 if (kid->op_type != OP_MATCH && kid->op_type != OP_SUBST &&
2214 kid->op_type != OP_TRANS && kid->op_type != OP_TRANSR) {
2217 useless = "negative pattern binding (!~)";
2221 if (cPMOPo->op_pmflags & PMf_NONDESTRUCT)
2222 useless = "non-destructive substitution (s///r)";
2226 useless = "non-destructive transliteration (tr///r)";
2233 if (!(o->op_private & (OPpLVAL_INTRO|OPpOUR_INTRO)) &&
2234 (!OpHAS_SIBLING(o) || OpSIBLING(o)->op_type != OP_READLINE))
2235 useless = "a variable";
2240 if (cSVOPo->op_private & OPpCONST_STRICT)
2241 no_bareword_allowed(o);
2243 if (ckWARN(WARN_VOID)) {
2245 /* don't warn on optimised away booleans, eg
2246 * use constant Foo, 5; Foo || print; */
2247 if (cSVOPo->op_private & OPpCONST_SHORTCIRCUIT)
2249 /* the constants 0 and 1 are permitted as they are
2250 conventionally used as dummies in constructs like
2251 1 while some_condition_with_side_effects; */
2252 else if (SvNIOK(sv) && ((nv = SvNV(sv)) == 0.0 || nv == 1.0))
2254 else if (SvPOK(sv)) {
2255 SV * const dsv = newSVpvs("");
2257 = Perl_newSVpvf(aTHX_
2259 pv_pretty(dsv, SvPVX_const(sv),
2260 SvCUR(sv), 32, NULL, NULL,
2262 | PERL_PV_ESCAPE_NOCLEAR
2263 | PERL_PV_ESCAPE_UNI_DETECT));
2264 SvREFCNT_dec_NN(dsv);
2266 else if (SvOK(sv)) {
2267 useless_sv = Perl_newSVpvf(aTHX_ "a constant (%" SVf ")", SVfARG(sv));
2270 useless = "a constant (undef)";
2273 op_null(o); /* don't execute or even remember it */
2277 OpTYPE_set(o, OP_PREINC); /* pre-increment is faster */
2281 OpTYPE_set(o, OP_PREDEC); /* pre-decrement is faster */
2285 OpTYPE_set(o, OP_I_PREINC); /* pre-increment is faster */
2289 OpTYPE_set(o, OP_I_PREDEC); /* pre-decrement is faster */
2294 UNOP *refgen, *rv2cv;
2297 if ((o->op_private & ~OPpASSIGN_BACKWARDS) != 2)
2300 rv2gv = ((BINOP *)o)->op_last;
2301 if (!rv2gv || rv2gv->op_type != OP_RV2GV)
2304 refgen = (UNOP *)((BINOP *)o)->op_first;
2306 if (!refgen || (refgen->op_type != OP_REFGEN
2307 && refgen->op_type != OP_SREFGEN))
2310 exlist = (LISTOP *)refgen->op_first;
2311 if (!exlist || exlist->op_type != OP_NULL
2312 || exlist->op_targ != OP_LIST)
2315 if (exlist->op_first->op_type != OP_PUSHMARK
2316 && exlist->op_first != exlist->op_last)
2319 rv2cv = (UNOP*)exlist->op_last;
2321 if (rv2cv->op_type != OP_RV2CV)
2324 assert ((rv2gv->op_private & OPpDONT_INIT_GV) == 0);
2325 assert ((o->op_private & OPpASSIGN_CV_TO_GV) == 0);
2326 assert ((rv2cv->op_private & OPpMAY_RETURN_CONSTANT) == 0);
2328 o->op_private |= OPpASSIGN_CV_TO_GV;
2329 rv2gv->op_private |= OPpDONT_INIT_GV;
2330 rv2cv->op_private |= OPpMAY_RETURN_CONSTANT;
2342 kid = cLOGOPo->op_first;
2343 if (kid->op_type == OP_NOT
2344 && (kid->op_flags & OPf_KIDS)) {
2345 if (o->op_type == OP_AND) {
2346 OpTYPE_set(o, OP_OR);
2348 OpTYPE_set(o, OP_AND);
2358 next_kid = OpSIBLING(cUNOPo->op_first);
2362 if (o->op_flags & OPf_STACKED)
2369 if (!(o->op_flags & OPf_KIDS))
2380 next_kid = cLISTOPo->op_first;
2383 /* If the first kid after pushmark is something that the padrange
2384 optimisation would reject, then null the list and the pushmark.
2386 if ((kid = cLISTOPo->op_first)->op_type == OP_PUSHMARK
2387 && ( !(kid = OpSIBLING(kid))
2388 || ( kid->op_type != OP_PADSV
2389 && kid->op_type != OP_PADAV
2390 && kid->op_type != OP_PADHV)
2391 || kid->op_private & ~OPpLVAL_INTRO
2392 || !(kid = OpSIBLING(kid))
2393 || ( kid->op_type != OP_PADSV
2394 && kid->op_type != OP_PADAV
2395 && kid->op_type != OP_PADHV)
2396 || kid->op_private & ~OPpLVAL_INTRO)
2398 op_null(cUNOPo->op_first); /* NULL the pushmark */
2399 op_null(o); /* NULL the list */
2411 /* mortalise it, in case warnings are fatal. */
2412 Perl_ck_warner(aTHX_ packWARN(WARN_VOID),
2413 "Useless use of %" SVf " in void context",
2414 SVfARG(sv_2mortal(useless_sv)));
2417 Perl_ck_warner(aTHX_ packWARN(WARN_VOID),
2418 "Useless use of %s in void context",
2423 /* if a kid hasn't been nominated to process, continue with the
2424 * next sibling, or if no siblings left, go back to the parent's
2425 * siblings and so on
2429 return arg; /* at top; no parents/siblings to try */
2430 if (OpHAS_SIBLING(o))
2431 next_kid = o->op_sibparent;
2433 o = o->op_sibparent; /*try parent's next sibling */
2443 S_listkids(pTHX_ OP *o)
2445 if (o && o->op_flags & OPf_KIDS) {
2447 for (kid = cLISTOPo->op_first; kid; kid = OpSIBLING(kid))
2454 /* apply list context to the o subtree */
2457 Perl_list(pTHX_ OP *o)
2462 OP *next_kid = NULL; /* what op (if any) to process next */
2466 /* assumes no premature commitment */
2467 if (!o || (o->op_flags & OPf_WANT)
2468 || (PL_parser && PL_parser->error_count)
2469 || o->op_type == OP_RETURN)
2474 if ((o->op_private & OPpTARGET_MY)
2475 && (PL_opargs[o->op_type] & OA_TARGLEX))/* OPp share the meaning */
2477 goto do_next; /* As if inside SASSIGN */
2480 o->op_flags = (o->op_flags & ~OPf_WANT) | OPf_WANT_LIST;
2482 switch (o->op_type) {
2484 if (o->op_private & OPpREPEAT_DOLIST
2485 && !(o->op_flags & OPf_STACKED))
2487 list(cBINOPo->op_first);
2488 kid = cBINOPo->op_last;
2489 /* optimise away (.....) x 1 */
2490 if (kid->op_type == OP_CONST && SvIOK(kSVOP_sv)
2491 && SvIVX(kSVOP_sv) == 1)
2493 op_null(o); /* repeat */
2494 op_null(cUNOPx(cBINOPo->op_first)->op_first);/* pushmark */
2496 op_free(op_sibling_splice(o, cBINOPo->op_first, 1, NULL));
2504 /* impose list context on everything except the condition */
2505 next_kid = OpSIBLING(cUNOPo->op_first);
2509 if (!(o->op_flags & OPf_KIDS))
2511 /* possibly flatten 1..10 into a constant array */
2512 if (!o->op_next && cUNOPo->op_first->op_type == OP_FLOP) {
2513 list(cBINOPo->op_first);
2514 gen_constant_list(o);
2517 next_kid = cUNOPo->op_first; /* do all kids */
2521 if (cLISTOPo->op_first->op_type == OP_PUSHMARK) {
2522 op_null(cUNOPo->op_first); /* NULL the pushmark */
2523 op_null(o); /* NULL the list */
2525 if (o->op_flags & OPf_KIDS)
2526 next_kid = cUNOPo->op_first; /* do all kids */
2529 /* the children of these ops are usually a list of statements,
2530 * except the leaves, whose first child is a corresponding enter
2534 kid = cLISTOPo->op_first;
2538 kid = cLISTOPo->op_first;
2540 kid = OpSIBLING(kid);
2543 OP *sib = OpSIBLING(kid);
2544 /* Apply void context to all kids except the last, which
2546 * @a = do { void; void; list }
2547 * Except that 'when's are always list context, e.g.
2548 * @a = do { given(..) {
2549 * when (..) { list }
2550 * when (..) { list }
2555 /* tail call optimise calling list() on the last kid */
2559 else if (kid->op_type == OP_LEAVEWHEN)
2565 NOT_REACHED; /* NOTREACHED */
2570 /* If next_kid is set, someone in the code above wanted us to process
2571 * that kid and all its remaining siblings. Otherwise, work our way
2572 * back up the tree */
2576 return top_op; /* at top; no parents/siblings to try */
2577 if (OpHAS_SIBLING(o))
2578 next_kid = o->op_sibparent;
2580 o = o->op_sibparent; /*try parent's next sibling */
2581 switch (o->op_type) {
2587 /* should really restore PL_curcop to its old value, but
2588 * setting it to PL_compiling is better than do nothing */
2589 PL_curcop = &PL_compiling;
2601 S_scalarseq(pTHX_ OP *o)
2604 const OPCODE type = o->op_type;
2606 if (type == OP_LINESEQ || type == OP_SCOPE ||
2607 type == OP_LEAVE || type == OP_LEAVETRY)
2610 for (kid = cLISTOPo->op_first; kid; kid = sib) {
2611 if ((sib = OpSIBLING(kid))
2612 && ( OpHAS_SIBLING(sib) || sib->op_type != OP_NULL
2613 || ( sib->op_targ != OP_NEXTSTATE
2614 && sib->op_targ != OP_DBSTATE )))
2619 PL_curcop = &PL_compiling;
2621 o->op_flags &= ~OPf_PARENS;
2622 if (PL_hints & HINT_BLOCK_SCOPE)
2623 o->op_flags |= OPf_PARENS;
2626 o = newOP(OP_STUB, 0);
2631 S_modkids(pTHX_ OP *o, I32 type)
2633 if (o && o->op_flags & OPf_KIDS) {
2635 for (kid = cLISTOPo->op_first; kid; kid = OpSIBLING(kid))
2636 op_lvalue(kid, type);
2642 /* for a helem/hslice/kvslice, if its a fixed hash, croak on invalid
2643 * const fields. Also, convert CONST keys to HEK-in-SVs.
2644 * rop is the op that retrieves the hash;
2645 * key_op is the first key
2646 * real if false, only check (and possibly croak); don't update op
2650 S_check_hash_fields_and_hekify(pTHX_ UNOP *rop, SVOP *key_op, int real)
2656 /* find the padsv corresponding to $lex->{} or @{$lex}{} */
2658 if (rop->op_first->op_type == OP_PADSV)
2659 /* @$hash{qw(keys here)} */
2660 rop = (UNOP*)rop->op_first;
2662 /* @{$hash}{qw(keys here)} */
2663 if (rop->op_first->op_type == OP_SCOPE
2664 && cLISTOPx(rop->op_first)->op_last->op_type == OP_PADSV)
2666 rop = (UNOP*)cLISTOPx(rop->op_first)->op_last;
2673 lexname = NULL; /* just to silence compiler warnings */
2674 fields = NULL; /* just to silence compiler warnings */
2678 && (lexname = padnamelist_fetch(PL_comppad_name, rop->op_targ),
2679 SvPAD_TYPED(lexname))
2680 && (fields = (GV**)hv_fetchs(PadnameTYPE(lexname), "FIELDS", FALSE))
2681 && isGV(*fields) && GvHV(*fields);
2683 for (; key_op; key_op = (SVOP*)OpSIBLING(key_op)) {
2685 if (key_op->op_type != OP_CONST)
2687 svp = cSVOPx_svp(key_op);
2689 /* make sure it's not a bareword under strict subs */
2690 if (key_op->op_private & OPpCONST_BARE &&
2691 key_op->op_private & OPpCONST_STRICT)
2693 no_bareword_allowed((OP*)key_op);
2696 /* Make the CONST have a shared SV */
2697 if ( !SvIsCOW_shared_hash(sv = *svp)
2698 && SvTYPE(sv) < SVt_PVMG
2704 const char * const key = SvPV_const(sv, *(STRLEN*)&keylen);
2705 SV *nsv = newSVpvn_share(key, SvUTF8(sv) ? -keylen : keylen, 0);
2706 SvREFCNT_dec_NN(sv);
2711 && !hv_fetch_ent(GvHV(*fields), *svp, FALSE, 0))
2713 Perl_croak(aTHX_ "No such class field \"%" SVf "\" "
2714 "in variable %" PNf " of type %" HEKf,
2715 SVfARG(*svp), PNfARG(lexname),
2716 HEKfARG(HvNAME_HEK(PadnameTYPE(lexname))));
2721 /* info returned by S_sprintf_is_multiconcatable() */
2723 struct sprintf_ismc_info {
2724 SSize_t nargs; /* num of args to sprintf (not including the format) */
2725 char *start; /* start of raw format string */
2726 char *end; /* bytes after end of raw format string */
2727 STRLEN total_len; /* total length (in bytes) of format string, not
2728 including '%s' and half of '%%' */
2729 STRLEN variant; /* number of bytes by which total_len_p would grow
2730 if upgraded to utf8 */
2731 bool utf8; /* whether the format is utf8 */
2735 /* is the OP_SPRINTF o suitable for converting into a multiconcat op?
2736 * i.e. its format argument is a const string with only '%s' and '%%'
2737 * formats, and the number of args is known, e.g.
2738 * sprintf "a=%s f=%s", $a[0], scalar(f());
2740 * sprintf "i=%d a=%s f=%s", $i, @a, f();
2742 * If successful, the sprintf_ismc_info struct pointed to by info will be
2747 S_sprintf_is_multiconcatable(pTHX_ OP *o,struct sprintf_ismc_info *info)
2749 OP *pm, *constop, *kid;
2752 SSize_t nargs, nformats;
2753 STRLEN cur, total_len, variant;
2756 /* if sprintf's behaviour changes, die here so that someone
2757 * can decide whether to enhance this function or skip optimising
2758 * under those new circumstances */
2759 assert(!(o->op_flags & OPf_STACKED));
2760 assert(!(PL_opargs[OP_SPRINTF] & OA_TARGLEX));
2761 assert(!(o->op_private & ~OPpARG4_MASK));
2763 pm = cUNOPo->op_first;
2764 if (pm->op_type != OP_PUSHMARK) /* weird coreargs stuff */
2766 constop = OpSIBLING(pm);
2767 if (!constop || constop->op_type != OP_CONST)
2769 sv = cSVOPx_sv(constop);
2770 if (SvMAGICAL(sv) || !SvPOK(sv))
2776 /* Scan format for %% and %s and work out how many %s there are.
2777 * Abandon if other format types are found.
2784 for (p = s; p < e; p++) {
2787 if (!UTF8_IS_INVARIANT(*p))
2793 return FALSE; /* lone % at end gives "Invalid conversion" */
2802 if (!nformats || nformats > PERL_MULTICONCAT_MAXARG)
2805 utf8 = cBOOL(SvUTF8(sv));
2809 /* scan args; they must all be in scalar cxt */
2812 kid = OpSIBLING(constop);
2815 if ((kid->op_flags & OPf_WANT) != OPf_WANT_SCALAR)
2818 kid = OpSIBLING(kid);
2821 if (nargs != nformats)
2822 return FALSE; /* e.g. sprintf("%s%s", $a); */
2825 info->nargs = nargs;
2828 info->total_len = total_len;
2829 info->variant = variant;
2837 /* S_maybe_multiconcat():
2839 * given an OP_STRINGIFY, OP_SASSIGN, OP_CONCAT or OP_SPRINTF op, possibly
2840 * convert it (and its children) into an OP_MULTICONCAT. See the code
2841 * comments just before pp_multiconcat() for the full details of what
2842 * OP_MULTICONCAT supports.
2844 * Basically we're looking for an optree with a chain of OP_CONCATS down
2845 * the LHS (or an OP_SPRINTF), with possibly an OP_SASSIGN, and/or
2846 * OP_STRINGIFY, and/or OP_CONCAT acting as '.=' at its head, e.g.
2854 * STRINGIFY -- PADSV[$x]
2857 * ex-PUSHMARK -- CONCAT/S
2859 * CONCAT/S -- PADSV[$d]
2861 * CONCAT -- CONST["-"]
2863 * PADSV[$a] -- PADSV[$b]
2865 * Note that at this stage the OP_SASSIGN may have already been optimised
2866 * away with OPpTARGET_MY set on the OP_STRINGIFY or OP_CONCAT.
2870 S_maybe_multiconcat(pTHX_ OP *o)
2872 OP *lastkidop; /* the right-most of any kids unshifted onto o */
2873 OP *topop; /* the top-most op in the concat tree (often equals o,
2874 unless there are assign/stringify ops above it */
2875 OP *parentop; /* the parent op of topop (or itself if no parent) */
2876 OP *targmyop; /* the op (if any) with the OPpTARGET_MY flag */
2877 OP *targetop; /* the op corresponding to target=... or target.=... */
2878 OP *stringop; /* the OP_STRINGIFY op, if any */
2879 OP *nextop; /* used for recreating the op_next chain without consts */
2880 OP *kid; /* general-purpose op pointer */
2882 UNOP_AUX_item *lenp;
2883 char *const_str, *p;
2884 struct sprintf_ismc_info sprintf_info;
2886 /* store info about each arg in args[];
2887 * toparg is the highest used slot; argp is a general
2888 * pointer to args[] slots */
2890 void *p; /* initially points to const sv (or null for op);
2891 later, set to SvPV(constsv), with ... */
2892 STRLEN len; /* ... len set to SvPV(..., len) */
2893 } *argp, *toparg, args[PERL_MULTICONCAT_MAXARG*2 + 1];
2897 SSize_t nadjconst = 0; /* adjacent consts - may be demoted to args */
2900 bool kid_is_last = FALSE; /* most args will be the RHS kid of a concat op;
2901 the last-processed arg will the LHS of one,
2902 as args are processed in reverse order */
2903 U8 stacked_last = 0; /* whether the last seen concat op was STACKED */
2904 STRLEN total_len = 0; /* sum of the lengths of the const segments */
2905 U8 flags = 0; /* what will become the op_flags and ... */
2906 U8 private_flags = 0; /* ... op_private of the multiconcat op */
2907 bool is_sprintf = FALSE; /* we're optimising an sprintf */
2908 bool is_targable = FALSE; /* targetop is an OPpTARGET_MY candidate */
2909 bool prev_was_const = FALSE; /* previous arg was a const */
2911 /* -----------------------------------------------------------------
2914 * Examine the optree non-destructively to determine whether it's
2915 * suitable to be converted into an OP_MULTICONCAT. Accumulate
2916 * information about the optree in args[].
2926 assert( o->op_type == OP_SASSIGN
2927 || o->op_type == OP_CONCAT
2928 || o->op_type == OP_SPRINTF
2929 || o->op_type == OP_STRINGIFY);
2931 Zero(&sprintf_info, 1, struct sprintf_ismc_info);
2933 /* first see if, at the top of the tree, there is an assign,
2934 * append and/or stringify */
2936 if (topop->op_type == OP_SASSIGN) {
2938 if (o->op_ppaddr != PL_ppaddr[OP_SASSIGN])
2940 if (o->op_private & (OPpASSIGN_BACKWARDS|OPpASSIGN_CV_TO_GV))
2942 assert(!(o->op_private & ~OPpARG2_MASK)); /* barf on unknown flags */
2945 topop = cBINOPo->op_first;
2946 targetop = OpSIBLING(topop);
2947 if (!targetop) /* probably some sort of syntax error */
2950 /* don't optimise away assign in 'local $foo = ....' */
2951 if ( (targetop->op_private & OPpLVAL_INTRO)
2952 /* these are the common ops which do 'local', but
2954 && ( targetop->op_type == OP_GVSV
2955 || targetop->op_type == OP_RV2SV
2956 || targetop->op_type == OP_AELEM
2957 || targetop->op_type == OP_HELEM
2962 else if ( topop->op_type == OP_CONCAT
2963 && (topop->op_flags & OPf_STACKED)
2964 && (!(topop->op_private & OPpCONCAT_NESTED))
2969 /* OPpTARGET_MY shouldn't be able to be set here. If it is,
2970 * decide what to do about it */
2971 assert(!(o->op_private & OPpTARGET_MY));
2973 /* barf on unknown flags */
2974 assert(!(o->op_private & ~(OPpARG2_MASK|OPpTARGET_MY)));
2975 private_flags |= OPpMULTICONCAT_APPEND;
2976 targetop = cBINOPo->op_first;
2978 topop = OpSIBLING(targetop);
2980 /* $x .= <FOO> gets optimised to rcatline instead */
2981 if (topop->op_type == OP_READLINE)
2986 /* Can targetop (the LHS) if it's a padsv, be optimised
2987 * away and use OPpTARGET_MY instead?
2989 if ( (targetop->op_type == OP_PADSV)
2990 && !(targetop->op_private & OPpDEREF)
2991 && !(targetop->op_private & OPpPAD_STATE)
2992 /* we don't support 'my $x .= ...' */
2993 && ( o->op_type == OP_SASSIGN
2994 || !(targetop->op_private & OPpLVAL_INTRO))
2999 if (topop->op_type == OP_STRINGIFY) {
3000 if (topop->op_ppaddr != PL_ppaddr[OP_STRINGIFY])
3004 /* barf on unknown flags */
3005 assert(!(o->op_private & ~(OPpARG4_MASK|OPpTARGET_MY)));
3007 if ((topop->op_private & OPpTARGET_MY)) {
3008 if (o->op_type == OP_SASSIGN)
3009 return; /* can't have two assigns */
3013 private_flags |= OPpMULTICONCAT_STRINGIFY;
3015 topop = cBINOPx(topop)->op_first;
3016 assert(OP_TYPE_IS_OR_WAS_NN(topop, OP_PUSHMARK));
3017 topop = OpSIBLING(topop);
3020 if (topop->op_type == OP_SPRINTF) {
3021 if (topop->op_ppaddr != PL_ppaddr[OP_SPRINTF])
3023 if (S_sprintf_is_multiconcatable(aTHX_ topop, &sprintf_info)) {
3024 nargs = sprintf_info.nargs;
3025 total_len = sprintf_info.total_len;
3026 variant = sprintf_info.variant;
3027 utf8 = sprintf_info.utf8;
3029 private_flags |= OPpMULTICONCAT_FAKE;
3031 /* we have an sprintf op rather than a concat optree.
3032 * Skip most of the code below which is associated with
3033 * processing that optree. We also skip phase 2, determining
3034 * whether its cost effective to optimise, since for sprintf,
3035 * multiconcat is *always* faster */
3038 /* note that even if the sprintf itself isn't multiconcatable,
3039 * the expression as a whole may be, e.g. in
3040 * $x .= sprintf("%d",...)
3041 * the sprintf op will be left as-is, but the concat/S op may
3042 * be upgraded to multiconcat
3045 else if (topop->op_type == OP_CONCAT) {
3046 if (topop->op_ppaddr != PL_ppaddr[OP_CONCAT])
3049 if ((topop->op_private & OPpTARGET_MY)) {
3050 if (o->op_type == OP_SASSIGN || targmyop)
3051 return; /* can't have two assigns */
3056 /* Is it safe to convert a sassign/stringify/concat op into
3058 assert((PL_opargs[OP_SASSIGN] & OA_CLASS_MASK) == OA_BINOP);
3059 assert((PL_opargs[OP_CONCAT] & OA_CLASS_MASK) == OA_BINOP);
3060 assert((PL_opargs[OP_STRINGIFY] & OA_CLASS_MASK) == OA_LISTOP);
3061 assert((PL_opargs[OP_SPRINTF] & OA_CLASS_MASK) == OA_LISTOP);
3062 STATIC_ASSERT_STMT( STRUCT_OFFSET(BINOP, op_last)
3063 == STRUCT_OFFSET(UNOP_AUX, op_aux));
3064 STATIC_ASSERT_STMT( STRUCT_OFFSET(LISTOP, op_last)
3065 == STRUCT_OFFSET(UNOP_AUX, op_aux));
3067 /* Now scan the down the tree looking for a series of
3068 * CONCAT/OPf_STACKED ops on the LHS (with the last one not
3069 * stacked). For example this tree:
3074 * CONCAT/STACKED -- EXPR5
3076 * CONCAT/STACKED -- EXPR4
3082 * corresponds to an expression like
3084 * (EXPR1 . EXPR2 . EXPR3 . EXPR4 . EXPR5)
3086 * Record info about each EXPR in args[]: in particular, whether it is
3087 * a stringifiable OP_CONST and if so what the const sv is.
3089 * The reason why the last concat can't be STACKED is the difference
3092 * ((($a .= $a) .= $a) .= $a) .= $a
3095 * $a . $a . $a . $a . $a
3097 * The main difference between the optrees for those two constructs
3098 * is the presence of the last STACKED. As well as modifying $a,
3099 * the former sees the changed $a between each concat, so if $s is
3100 * initially 'a', the first returns 'a' x 16, while the latter returns
3101 * 'a' x 5. And pp_multiconcat can't handle that kind of thing.
3111 if ( kid->op_type == OP_CONCAT
3115 k1 = cUNOPx(kid)->op_first;
3117 /* shouldn't happen except maybe after compile err? */
3121 /* avoid turning (A . B . ($lex = C) ...) into (A . B . C ...) */
3122 if (kid->op_private & OPpTARGET_MY)
3125 stacked_last = (kid->op_flags & OPf_STACKED);
3137 if ( nargs + nadjconst > PERL_MULTICONCAT_MAXARG - 2
3138 || (argp - args + 1) > (PERL_MULTICONCAT_MAXARG*2 + 1) - 2)
3140 /* At least two spare slots are needed to decompose both
3141 * concat args. If there are no slots left, continue to
3142 * examine the rest of the optree, but don't push new values
3143 * on args[]. If the optree as a whole is legal for conversion
3144 * (in particular that the last concat isn't STACKED), then
3145 * the first PERL_MULTICONCAT_MAXARG elements of the optree
3146 * can be converted into an OP_MULTICONCAT now, with the first
3147 * child of that op being the remainder of the optree -
3148 * which may itself later be converted to a multiconcat op
3152 /* the last arg is the rest of the optree */
3157 else if ( argop->op_type == OP_CONST
3158 && ((sv = cSVOPx_sv(argop)))
3159 /* defer stringification until runtime of 'constant'
3160 * things that might stringify variantly, e.g. the radix
3161 * point of NVs, or overloaded RVs */
3162 && (SvPOK(sv) || SvIOK(sv))
3163 && (!SvGMAGICAL(sv))
3165 if (argop->op_private & OPpCONST_STRICT)
3166 no_bareword_allowed(argop);
3168 utf8 |= cBOOL(SvUTF8(sv));
3171 /* this const may be demoted back to a plain arg later;
3172 * make sure we have enough arg slots left */
3174 prev_was_const = !prev_was_const;
3179 prev_was_const = FALSE;
3189 return; /* we don't support ((A.=B).=C)...) */
3191 /* look for two adjacent consts and don't fold them together:
3194 * $o->concat("a")->concat("b")
3197 * (but $o .= "a" . "b" should still fold)
3200 bool seen_nonconst = FALSE;
3201 for (argp = toparg; argp >= args; argp--) {
3202 if (argp->p == NULL) {
3203 seen_nonconst = TRUE;
3209 /* both previous and current arg were constants;
3210 * leave the current OP_CONST as-is */
3218 /* -----------------------------------------------------------------
3221 * At this point we have determined that the optree *can* be converted
3222 * into a multiconcat. Having gathered all the evidence, we now decide
3223 * whether it *should*.
3227 /* we need at least one concat action, e.g.:
3233 * otherwise we could be doing something like $x = "foo", which
3234 * if treated as a concat, would fail to COW.
3236 if (nargs + nconst + cBOOL(private_flags & OPpMULTICONCAT_APPEND) < 2)
3239 /* Benchmarking seems to indicate that we gain if:
3240 * * we optimise at least two actions into a single multiconcat
3241 * (e.g concat+concat, sassign+concat);
3242 * * or if we can eliminate at least 1 OP_CONST;
3243 * * or if we can eliminate a padsv via OPpTARGET_MY
3247 /* eliminated at least one OP_CONST */
3249 /* eliminated an OP_SASSIGN */
3250 || o->op_type == OP_SASSIGN
3251 /* eliminated an OP_PADSV */
3252 || (!targmyop && is_targable)
3254 /* definitely a net gain to optimise */
3257 /* ... if not, what else? */
3259 /* special-case '$lex1 = expr . $lex1' (where expr isn't lex1):
3260 * multiconcat is faster (due to not creating a temporary copy of
3261 * $lex1), whereas for a general $lex1 = $lex2 . $lex3, concat is
3267 && topop->op_type == OP_CONCAT
3269 PADOFFSET t = targmyop->op_targ;
3270 OP *k1 = cBINOPx(topop)->op_first;
3271 OP *k2 = cBINOPx(topop)->op_last;
3272 if ( k2->op_type == OP_PADSV
3274 && ( k1->op_type != OP_PADSV
3275 || k1->op_targ != t)
3280 /* need at least two concats */
3281 if (nargs + nconst + cBOOL(private_flags & OPpMULTICONCAT_APPEND) < 3)
3286 /* -----------------------------------------------------------------
3289 * At this point the optree has been verified as ok to be optimised
3290 * into an OP_MULTICONCAT. Now start changing things.
3295 /* stringify all const args and determine utf8ness */
3298 for (argp = args; argp <= toparg; argp++) {
3299 SV *sv = (SV*)argp->p;
3301 continue; /* not a const op */
3302 if (utf8 && !SvUTF8(sv))
3303 sv_utf8_upgrade_nomg(sv);
3304 argp->p = SvPV_nomg(sv, argp->len);
3305 total_len += argp->len;
3307 /* see if any strings would grow if converted to utf8 */
3309 variant += variant_under_utf8_count((U8 *) argp->p,
3310 (U8 *) argp->p + argp->len);
3314 /* create and populate aux struct */
3318 aux = (UNOP_AUX_item*)PerlMemShared_malloc(
3319 sizeof(UNOP_AUX_item)
3321 PERL_MULTICONCAT_HEADER_SIZE
3322 + ((nargs + 1) * (variant ? 2 : 1))
3325 const_str = (char *)PerlMemShared_malloc(total_len ? total_len : 1);
3327 /* Extract all the non-const expressions from the concat tree then
3328 * dispose of the old tree, e.g. convert the tree from this:
3332 * STRINGIFY -- TARGET
3334 * ex-PUSHMARK -- CONCAT
3349 * ex-PUSHMARK -- EXPR1 -- EXPR2 -- EXPR3 -- EXPR4 -- EXPR5 -- TARGET
3351 * except that if EXPRi is an OP_CONST, it's discarded.
3353 * During the conversion process, EXPR ops are stripped from the tree
3354 * and unshifted onto o. Finally, any of o's remaining original
3355 * childen are discarded and o is converted into an OP_MULTICONCAT.
3357 * In this middle of this, o may contain both: unshifted args on the
3358 * left, and some remaining original args on the right. lastkidop
3359 * is set to point to the right-most unshifted arg to delineate
3360 * between the two sets.
3365 /* create a copy of the format with the %'s removed, and record
3366 * the sizes of the const string segments in the aux struct */
3368 lenp = aux + PERL_MULTICONCAT_IX_LENGTHS;
3370 p = sprintf_info.start;
3373 for (; p < sprintf_info.end; p++) {
3377 (lenp++)->ssize = q - oldq;
3384 lenp->ssize = q - oldq;
3385 assert((STRLEN)(q - const_str) == total_len);
3387 /* Attach all the args (i.e. the kids of the sprintf) to o (which
3388 * may or may not be topop) The pushmark and const ops need to be
3389 * kept in case they're an op_next entry point.
3391 lastkidop = cLISTOPx(topop)->op_last;
3392 kid = cUNOPx(topop)->op_first; /* pushmark */
3394 op_null(OpSIBLING(kid)); /* const */
3396 kid = op_sibling_splice(topop, NULL, -1, NULL); /* cut all args */
3397 op_sibling_splice(o, NULL, 0, kid); /* and attach to o */
3398 lastkidop->op_next = o;
3403 lenp = aux + PERL_MULTICONCAT_IX_LENGTHS;
3407 /* Concatenate all const strings into const_str.
3408 * Note that args[] contains the RHS args in reverse order, so
3409 * we scan args[] from top to bottom to get constant strings
3412 for (argp = toparg; argp >= args; argp--) {
3414 /* not a const op */
3415 (++lenp)->ssize = -1;
3417 STRLEN l = argp->len;
3418 Copy(argp->p, p, l, char);
3420 if (lenp->ssize == -1)
3431 for (argp = args; argp <= toparg; argp++) {
3432 /* only keep non-const args, except keep the first-in-next-chain
3433 * arg no matter what it is (but nulled if OP_CONST), because it
3434 * may be the entry point to this subtree from the previous
3437 bool last = (argp == toparg);
3440 /* set prev to the sibling *before* the arg to be cut out,
3441 * e.g. when cutting EXPR:
3446 * prev= CONCAT -- EXPR
3449 if (argp == args && kid->op_type != OP_CONCAT) {
3450 /* in e.g. '$x .= f(1)' there's no RHS concat tree
3451 * so the expression to be cut isn't kid->op_last but
3454 /* find the op before kid */
3456 o2 = cUNOPx(parentop)->op_first;
3457 while (o2 && o2 != kid) {
3465 else if (kid == o && lastkidop)
3466 prev = last ? lastkidop : OpSIBLING(lastkidop);
3468 prev = last ? NULL : cUNOPx(kid)->op_first;
3470 if (!argp->p || last) {
3472 OP *aop = op_sibling_splice(kid, prev, 1, NULL);
3473 /* and unshift to front of o */
3474 op_sibling_splice(o, NULL, 0, aop);
3475 /* record the right-most op added to o: later we will
3476 * free anything to the right of it */
3479 aop->op_next = nextop;
3482 /* null the const at start of op_next chain */
3486 nextop = prev->op_next;
3489 /* the last two arguments are both attached to the same concat op */
3490 if (argp < toparg - 1)
3495 /* Populate the aux struct */
3497 aux[PERL_MULTICONCAT_IX_NARGS].ssize = nargs;
3498 aux[PERL_MULTICONCAT_IX_PLAIN_PV].pv = utf8 ? NULL : const_str;
3499 aux[PERL_MULTICONCAT_IX_PLAIN_LEN].ssize = utf8 ? 0 : total_len;
3500 aux[PERL_MULTICONCAT_IX_UTF8_PV].pv = const_str;
3501 aux[PERL_MULTICONCAT_IX_UTF8_LEN].ssize = total_len;
3503 /* if variant > 0, calculate a variant const string and lengths where
3504 * the utf8 version of the string will take 'variant' more bytes than
3508 char *p = const_str;
3509 STRLEN ulen = total_len + variant;
3510 UNOP_AUX_item *lens = aux + PERL_MULTICONCAT_IX_LENGTHS;
3511 UNOP_AUX_item *ulens = lens + (nargs + 1);
3512 char *up = (char*)PerlMemShared_malloc(ulen);
3515 aux[PERL_MULTICONCAT_IX_UTF8_PV].pv = up;
3516 aux[PERL_MULTICONCAT_IX_UTF8_LEN].ssize = ulen;
3518 for (n = 0; n < (nargs + 1); n++) {
3520 char * orig_up = up;
3521 for (i = (lens++)->ssize; i > 0; i--) {
3523 append_utf8_from_native_byte(c, (U8**)&up);
3525 (ulens++)->ssize = (i < 0) ? i : up - orig_up;
3530 /* if there was a top(ish)-level OP_STRINGIFY, we need to keep
3531 * that op's first child - an ex-PUSHMARK - because the op_next of
3532 * the previous op may point to it (i.e. it's the entry point for
3537 ? op_sibling_splice(o, lastkidop, 1, NULL)
3538 : op_sibling_splice(stringop, NULL, 1, NULL);
3539 assert(OP_TYPE_IS_OR_WAS_NN(pmop, OP_PUSHMARK));
3540 op_sibling_splice(o, NULL, 0, pmop);
3547 * target .= A.B.C...
3553 if (o->op_type == OP_SASSIGN) {
3554 /* Move the target subtree from being the last of o's children
3555 * to being the last of o's preserved children.
3556 * Note the difference between 'target = ...' and 'target .= ...':
3557 * for the former, target is executed last; for the latter,
3560 kid = OpSIBLING(lastkidop);
3561 op_sibling_splice(o, kid, 1, NULL); /* cut target op */
3562 op_sibling_splice(o, lastkidop, 0, targetop); /* and paste */
3563 lastkidop->op_next = kid->op_next;
3564 lastkidop = targetop;
3567 /* Move the target subtree from being the first of o's
3568 * original children to being the first of *all* o's children.
3571 op_sibling_splice(o, lastkidop, 1, NULL); /* cut target op */
3572 op_sibling_splice(o, NULL, 0, targetop); /* and paste*/
3575 /* if the RHS of .= doesn't contain a concat (e.g.
3576 * $x .= "foo"), it gets missed by the "strip ops from the
3577 * tree and add to o" loop earlier */
3578 assert(topop->op_type != OP_CONCAT);
3580 /* in e.g. $x .= "$y", move the $y expression
3581 * from being a child of OP_STRINGIFY to being the
3582 * second child of the OP_CONCAT
3584 assert(cUNOPx(stringop)->op_first == topop);
3585 op_sibling_splice(stringop, NULL, 1, NULL);
3586 op_sibling_splice(o, cUNOPo->op_first, 0, topop);
3588 assert(topop == OpSIBLING(cBINOPo->op_first));
3597 * my $lex = A.B.C...
3600 * The original padsv op is kept but nulled in case it's the
3601 * entry point for the optree (which it will be for
3604 private_flags |= OPpTARGET_MY;
3605 private_flags |= (targetop->op_private & OPpLVAL_INTRO);
3606 o->op_targ = targetop->op_targ;
3607 targetop->op_targ = 0;
3611 flags |= OPf_STACKED;
3613 else if (targmyop) {
3614 private_flags |= OPpTARGET_MY;
3615 if (o != targmyop) {
3616 o->op_targ = targmyop->op_targ;
3617 targmyop->op_targ = 0;
3621 /* detach the emaciated husk of the sprintf/concat optree and free it */
3623 kid = op_sibling_splice(o, lastkidop, 1, NULL);
3629 /* and convert o into a multiconcat */
3631 o->op_flags = (flags|OPf_KIDS|stacked_last
3632 |(o->op_flags & (OPf_WANT|OPf_PARENS)));
3633 o->op_private = private_flags;
3634 o->op_type = OP_MULTICONCAT;
3635 o->op_ppaddr = PL_ppaddr[OP_MULTICONCAT];
3636 cUNOP_AUXo->op_aux = aux;
3640 /* do all the final processing on an optree (e.g. running the peephole
3641 * optimiser on it), then attach it to cv (if cv is non-null)
3645 S_process_optree(pTHX_ CV *cv, OP *optree, OP* start)
3649 /* XXX for some reason, evals, require and main optrees are
3650 * never attached to their CV; instead they just hang off
3651 * PL_main_root + PL_main_start or PL_eval_root + PL_eval_start
3652 * and get manually freed when appropriate */
3654 startp = &CvSTART(cv);
3656 startp = PL_in_eval? &PL_eval_start : &PL_main_start;
3659 optree->op_private |= OPpREFCOUNTED;
3660 OpREFCNT_set(optree, 1);
3661 optimize_optree(optree);
3663 finalize_optree(optree);
3664 S_prune_chain_head(startp);
3667 /* now that optimizer has done its work, adjust pad values */
3668 pad_tidy(optree->op_type == OP_LEAVEWRITE ? padtidy_FORMAT
3669 : CvCLONE(cv) ? padtidy_SUBCLONE : padtidy_SUB);
3675 =for apidoc optimize_optree
3677 This function applies some optimisations to the optree in top-down order.
3678 It is called before the peephole optimizer, which processes ops in
3679 execution order. Note that finalize_optree() also does a top-down scan,
3680 but is called *after* the peephole optimizer.
3686 Perl_optimize_optree(pTHX_ OP* o)
3688 PERL_ARGS_ASSERT_OPTIMIZE_OPTREE;
3691 SAVEVPTR(PL_curcop);
3699 /* helper for optimize_optree() which optimises one op then recurses
3700 * to optimise any children.
3704 S_optimize_op(pTHX_ OP* o)
3708 PERL_ARGS_ASSERT_OPTIMIZE_OP;
3711 OP * next_kid = NULL;
3713 assert(o->op_type != OP_FREED);
3715 switch (o->op_type) {
3718 PL_curcop = ((COP*)o); /* for warnings */
3726 S_maybe_multiconcat(aTHX_ o);
3730 if (cPMOPo->op_pmreplrootu.op_pmreplroot) {
3731 /* we can't assume that op_pmreplroot->op_sibparent == o
3732 * and that it is thus possible to walk back up the tree
3733 * past op_pmreplroot. So, although we try to avoid
3734 * recursing through op trees, do it here. After all,
3735 * there are unlikely to be many nested s///e's within
3736 * the replacement part of a s///e.
3738 optimize_op(cPMOPo->op_pmreplrootu.op_pmreplroot);
3746 if (o->op_flags & OPf_KIDS)
3747 next_kid = cUNOPo->op_first;
3749 /* if a kid hasn't been nominated to process, continue with the
3750 * next sibling, or if no siblings left, go back to the parent's
3751 * siblings and so on
3755 return; /* at top; no parents/siblings to try */
3756 if (OpHAS_SIBLING(o))
3757 next_kid = o->op_sibparent;
3759 o = o->op_sibparent; /*try parent's next sibling */
3762 /* this label not yet used. Goto here if any code above sets
3772 =for apidoc finalize_optree
3774 This function finalizes the optree. Should be called directly after
3775 the complete optree is built. It does some additional
3776 checking which can't be done in the normal C<ck_>xxx functions and makes
3777 the tree thread-safe.
3782 Perl_finalize_optree(pTHX_ OP* o)
3784 PERL_ARGS_ASSERT_FINALIZE_OPTREE;
3787 SAVEVPTR(PL_curcop);
3795 /* Relocate sv to the pad for thread safety.
3796 * Despite being a "constant", the SV is written to,
3797 * for reference counts, sv_upgrade() etc. */
3798 PERL_STATIC_INLINE void
3799 S_op_relocate_sv(pTHX_ SV** svp, PADOFFSET* targp)
3802 PERL_ARGS_ASSERT_OP_RELOCATE_SV;
3804 ix = pad_alloc(OP_CONST, SVf_READONLY);
3805 SvREFCNT_dec(PAD_SVl(ix));
3806 PAD_SETSV(ix, *svp);
3807 /* XXX I don't know how this isn't readonly already. */
3808 if (!SvIsCOW(PAD_SVl(ix))) SvREADONLY_on(PAD_SVl(ix));
3815 =for apidoc traverse_op_tree
3817 Return the next op in a depth-first traversal of the op tree,
3818 returning NULL when the traversal is complete.
3820 The initial call must supply the root of the tree as both top and o.
3822 For now it's static, but it may be exposed to the API in the future.
3828 S_traverse_op_tree(pTHX_ OP *top, OP *o) {
3831 PERL_ARGS_ASSERT_TRAVERSE_OP_TREE;
3833 if ((o->op_flags & OPf_KIDS) && cUNOPo->op_first) {
3834 return cUNOPo->op_first;
3836 else if ((sib = OpSIBLING(o))) {
3840 OP *parent = o->op_sibparent;
3841 assert(!(o->op_moresib));
3842 while (parent && parent != top) {
3843 OP *sib = OpSIBLING(parent);
3846 parent = parent->op_sibparent;
3854 S_finalize_op(pTHX_ OP* o)
3857 PERL_ARGS_ASSERT_FINALIZE_OP;
3860 assert(o->op_type != OP_FREED);
3862 switch (o->op_type) {
3865 PL_curcop = ((COP*)o); /* for warnings */
3868 if (OpHAS_SIBLING(o)) {
3869 OP *sib = OpSIBLING(o);
3870 if (( sib->op_type == OP_NEXTSTATE || sib->op_type == OP_DBSTATE)
3871 && ckWARN(WARN_EXEC)
3872 && OpHAS_SIBLING(sib))
3874 const OPCODE type = OpSIBLING(sib)->op_type;
3875 if (type != OP_EXIT && type != OP_WARN && type != OP_DIE) {
3876 const line_t oldline = CopLINE(PL_curcop);
3877 CopLINE_set(PL_curcop, CopLINE((COP*)sib));
3878 Perl_warner(aTHX_ packWARN(WARN_EXEC),
3879 "Statement unlikely to be reached");
3880 Perl_warner(aTHX_ packWARN(WARN_EXEC),
3881 "\t(Maybe you meant system() when you said exec()?)\n");
3882 CopLINE_set(PL_curcop, oldline);
3889 if ((o->op_private & OPpEARLY_CV) && ckWARN(WARN_PROTOTYPE)) {
3890 GV * const gv = cGVOPo_gv;
3891 if (SvTYPE(gv) == SVt_PVGV && GvCV(gv) && SvPVX_const(GvCV(gv))) {
3892 /* XXX could check prototype here instead of just carping */
3893 SV * const sv = sv_newmortal();
3894 gv_efullname3(sv, gv, NULL);
3895 Perl_warner(aTHX_ packWARN(WARN_PROTOTYPE),
3896 "%" SVf "() called too early to check prototype",
3903 if (cSVOPo->op_private & OPpCONST_STRICT)
3904 no_bareword_allowed(o);
3908 op_relocate_sv(&cSVOPo->op_sv, &o->op_targ);
3913 /* Relocate all the METHOP's SVs to the pad for thread safety. */
3914 case OP_METHOD_NAMED:
3915 case OP_METHOD_SUPER:
3916 case OP_METHOD_REDIR:
3917 case OP_METHOD_REDIR_SUPER:
3918 op_relocate_sv(&cMETHOPx(o)->op_u.op_meth_sv, &o->op_targ);
3927 if ((key_op = cSVOPx(((BINOP*)o)->op_last))->op_type != OP_CONST)
3930 rop = (UNOP*)((BINOP*)o)->op_first;
3935 S_scalar_slice_warning(aTHX_ o);
3939 kid = OpSIBLING(cLISTOPo->op_first);
3940 if (/* I bet there's always a pushmark... */
3941 OP_TYPE_ISNT_AND_WASNT_NN(kid, OP_LIST)
3942 && OP_TYPE_ISNT_NN(kid, OP_CONST))
3947 key_op = (SVOP*)(kid->op_type == OP_CONST
3949 : OpSIBLING(kLISTOP->op_first));
3951 rop = (UNOP*)((LISTOP*)o)->op_last;
3954 if (o->op_private & OPpLVAL_INTRO || rop->op_type != OP_RV2HV)
3956 S_check_hash_fields_and_hekify(aTHX_ rop, key_op, 1);
3960 if (o->op_targ != OP_HSLICE && o->op_targ != OP_ASLICE)
3964 S_scalar_slice_warning(aTHX_ o);
3968 if (cPMOPo->op_pmreplrootu.op_pmreplroot)
3969 finalize_op(cPMOPo->op_pmreplrootu.op_pmreplroot);
3977 if (o->op_flags & OPf_KIDS) {
3980 /* check that op_last points to the last sibling, and that
3981 * the last op_sibling/op_sibparent field points back to the
3982 * parent, and that the only ops with KIDS are those which are
3983 * entitled to them */
3984 U32 type = o->op_type;
3988 if (type == OP_NULL) {
3990 /* ck_glob creates a null UNOP with ex-type GLOB
3991 * (which is a list op. So pretend it wasn't a listop */
3992 if (type == OP_GLOB)
3995 family = PL_opargs[type] & OA_CLASS_MASK;
3997 has_last = ( family == OA_BINOP
3998 || family == OA_LISTOP
3999 || family == OA_PMOP
4000 || family == OA_LOOP
4002 assert( has_last /* has op_first and op_last, or ...
4003 ... has (or may have) op_first: */
4004 || family == OA_UNOP
4005 || family == OA_UNOP_AUX
4006 || family == OA_LOGOP
4007 || family == OA_BASEOP_OR_UNOP
4008 || family == OA_FILESTATOP
4009 || family == OA_LOOPEXOP
4010 || family == OA_METHOP
4011 || type == OP_CUSTOM
4012 || type == OP_NULL /* new_logop does this */
4015 for (kid = cUNOPo->op_first; kid; kid = OpSIBLING(kid)) {
4016 if (!OpHAS_SIBLING(kid)) {
4018 assert(kid == cLISTOPo->op_last);
4019 assert(kid->op_sibparent == o);
4024 } while (( o = traverse_op_tree(top, o)) != NULL);
4028 S_mark_padname_lvalue(pTHX_ PADNAME *pn)
4031 PadnameLVALUE_on(pn);
4032 while (PadnameOUTER(pn) && PARENT_PAD_INDEX(pn)) {
4034 /* RT #127786: cv can be NULL due to an eval within the DB package
4035 * called from an anon sub - anon subs don't have CvOUTSIDE() set
4036 * unless they contain an eval, but calling eval within DB
4037 * pretends the eval was done in the caller's scope.
4041 assert(CvPADLIST(cv));
4043 PadlistNAMESARRAY(CvPADLIST(cv))[PARENT_PAD_INDEX(pn)];
4044 assert(PadnameLEN(pn));
4045 PadnameLVALUE_on(pn);
4050 S_vivifies(const OPCODE type)
4053 case OP_RV2AV: case OP_ASLICE:
4054 case OP_RV2HV: case OP_KVASLICE:
4055 case OP_RV2SV: case OP_HSLICE:
4056 case OP_AELEMFAST: case OP_KVHSLICE:
4065 /* apply lvalue reference (aliasing) context to the optree o.
4068 * o would be the list ($x,$y) and type would be OP_AASSIGN.
4069 * It may descend and apply this to children too, for example in
4070 * \( $cond ? $x, $y) = (...)
4074 S_lvref(pTHX_ OP *o, I32 type)
4080 switch (o->op_type) {
4082 o = OpSIBLING(cUNOPo->op_first);
4089 if (cUNOPo->op_first->op_type != OP_GV) goto badref;
4090 o->op_flags |= OPf_STACKED;
4091 if (o->op_flags & OPf_PARENS) {
4092 if (o->op_private & OPpLVAL_INTRO) {
4093 yyerror(Perl_form(aTHX_ "Can't modify reference to "
4094 "localized parenthesized array in list assignment"));
4098 OpTYPE_set(o, OP_LVAVREF);
4099 o->op_private &= OPpLVAL_INTRO|OPpPAD_STATE;
4100 o->op_flags |= OPf_MOD|OPf_REF;
4103 o->op_private |= OPpLVREF_AV;
4107 kid = cUNOPo->op_first;
4108 if (kid->op_type == OP_NULL)
4109 kid = cUNOPx(OpSIBLING(kUNOP->op_first))
4111 o->op_private = OPpLVREF_CV;
4112 if (kid->op_type == OP_GV)
4113 o->op_flags |= OPf_STACKED;
4114 else if (kid->op_type == OP_PADCV) {
4115 o->op_targ = kid->op_targ;
4117 op_free(cUNOPo->op_first);
4118 cUNOPo->op_first = NULL;
4119 o->op_flags &=~ OPf_KIDS;
4125 if (o->op_flags & OPf_PARENS) {
4127 yyerror(Perl_form(aTHX_ "Can't modify reference to "
4128 "parenthesized hash in list assignment"));
4131 o->op_private |= OPpLVREF_HV;
4135 if (cUNOPo->op_first->op_type != OP_GV) goto badref;
4136 o->op_flags |= OPf_STACKED;
4140 if (o->op_flags & OPf_PARENS) goto parenhash;
4141 o->op_private |= OPpLVREF_HV;
4144 PAD_COMPNAME_GEN_set(o->op_targ, PERL_INT_MAX);
4148 PAD_COMPNAME_GEN_set(o->op_targ, PERL_INT_MAX);
4149 if (o->op_flags & OPf_PARENS) goto slurpy;
4150 o->op_private |= OPpLVREF_AV;
4155 o->op_private |= OPpLVREF_ELEM;
4156 o->op_flags |= OPf_STACKED;
4161 OpTYPE_set(o, OP_LVREFSLICE);
4162 o->op_private &= OPpLVAL_INTRO;
4166 if (o->op_flags & OPf_SPECIAL) /* do BLOCK */
4168 else if (!(o->op_flags & OPf_KIDS))
4171 /* the code formerly only recursed into the first child of
4172 * a non ex-list OP_NULL. if we ever encounter such a null op with
4173 * more than one child, need to decide whether its ok to process
4174 * *all* its kids or not */
4175 assert(o->op_targ == OP_LIST
4176 || !(OpHAS_SIBLING(cBINOPo->op_first)));
4179 o = cLISTOPo->op_first;
4183 if (o->op_flags & OPf_PARENS)
4188 /* diag_listed_as: Can't modify reference to %s in %s assignment */
4189 yyerror(Perl_form(aTHX_ "Can't modify reference to %s in %s",
4190 o->op_type == OP_NULL && o->op_flags & OPf_SPECIAL
4197 OpTYPE_set(o, OP_LVREF);
4199 OPpLVAL_INTRO|OPpLVREF_ELEM|OPpLVREF_TYPE|OPpPAD_STATE;
4200 if (type == OP_ENTERLOOP)
4201 o->op_private |= OPpLVREF_ITER;
4206 return; /* at top; no parents/siblings to try */
4207 if (OpHAS_SIBLING(o)) {
4208 o = o->op_sibparent;
4211 o = o->op_sibparent; /*try parent's next sibling */
4217 PERL_STATIC_INLINE bool
4218 S_potential_mod_type(I32 type)
4220 /* Types that only potentially result in modification. */
4221 return type == OP_GREPSTART || type == OP_ENTERSUB
4222 || type == OP_REFGEN || type == OP_LEAVESUBLV;
4227 =for apidoc op_lvalue
4229 Propagate lvalue ("modifiable") context to an op and its children.
4230 C<type> represents the context type, roughly based on the type of op that
4231 would do the modifying, although C<local()> is represented by C<OP_NULL>,
4232 because it has no op type of its own (it is signalled by a flag on
4235 This function detects things that can't be modified, such as C<$x+1>, and
4236 generates errors for them. For example, C<$x+1 = 2> would cause it to be
4237 called with an op of type C<OP_ADD> and a C<type> argument of C<OP_SASSIGN>.
4239 It also flags things that need to behave specially in an lvalue context,
4240 such as C<$$x = 5> which might have to vivify a reference in C<$x>.
4244 Perl_op_lvalue_flags() is a non-API lower-level interface to
4245 op_lvalue(). The flags param has these bits:
4246 OP_LVALUE_NO_CROAK: return rather than croaking on error
4251 Perl_op_lvalue_flags(pTHX_ OP *o, I32 type, U32 flags)
4255 if (!o || (PL_parser && PL_parser->error_count))
4260 /* -1 = error on localize, 0 = ignore localize, 1 = ok to localize */
4262 OP *next_kid = NULL;
4264 if ((o->op_private & OPpTARGET_MY)
4265 && (PL_opargs[o->op_type] & OA_TARGLEX))/* OPp share the meaning */
4270 /* elements of a list might be in void context because the list is
4271 in scalar context or because they are attribute sub calls */
4272 if ((o->op_flags & OPf_WANT) == OPf_WANT_VOID)
4275 if (type == OP_PRTF || type == OP_SPRINTF) type = OP_ENTERSUB;
4277 switch (o->op_type) {
4283 if ((o->op_flags & OPf_PARENS))
4288 if ((type == OP_UNDEF || type == OP_REFGEN || type == OP_LOCK) &&
4289 !(o->op_flags & OPf_STACKED)) {
4290 OpTYPE_set(o, OP_RV2CV); /* entersub => rv2cv */
4291 assert(cUNOPo->op_first->op_type == OP_NULL);
4292 op_null(((LISTOP*)cUNOPo->op_first)->op_first);/* disable pushmark */
4295 else { /* lvalue subroutine call */
4296 o->op_private |= OPpLVAL_INTRO;
4297 PL_modcount = RETURN_UNLIMITED_NUMBER;
4298 if (S_potential_mod_type(type)) {
4299 o->op_private |= OPpENTERSUB_INARGS;
4302 else { /* Compile-time error message: */
4303 OP *kid = cUNOPo->op_first;
4308 if (kid->op_type != OP_PUSHMARK) {
4309 if (kid->op_type != OP_NULL || kid->op_targ != OP_LIST)
4311 "panic: unexpected lvalue entersub "
4312 "args: type/targ %ld:%" UVuf,
4313 (long)kid->op_type, (UV)kid->op_targ);
4314 kid = kLISTOP->op_first;
4316 while (OpHAS_SIBLING(kid))
4317 kid = OpSIBLING(kid);
4318 if (!(kid->op_type == OP_NULL && kid->op_targ == OP_RV2CV)) {
4319 break; /* Postpone until runtime */
4322 kid = kUNOP->op_first;
4323 if (kid->op_type == OP_NULL && kid->op_targ == OP_RV2SV)
4324 kid = kUNOP->op_first;
4325 if (kid->op_type == OP_NULL)
4327 "Unexpected constant lvalue entersub "
4328 "entry via type/targ %ld:%" UVuf,
4329 (long)kid->op_type, (UV)kid->op_targ);
4330 if (kid->op_type != OP_GV) {
4337 : SvROK(gv) && SvTYPE(SvRV(gv)) == SVt_PVCV
4338 ? MUTABLE_CV(SvRV(gv))
4344 if (flags & OP_LVALUE_NO_CROAK)
4347 namesv = cv_name(cv, NULL, 0);
4348 yyerror_pv(Perl_form(aTHX_ "Can't modify non-lvalue "
4349 "subroutine call of &%" SVf " in %s",
4350 SVfARG(namesv), PL_op_desc[type]),
4358 if (flags & OP_LVALUE_NO_CROAK) return NULL;
4359 /* grep, foreach, subcalls, refgen */
4360 if (S_potential_mod_type(type))
4362 yyerror(Perl_form(aTHX_ "Can't modify %s in %s",
4363 (o->op_type == OP_NULL && (o->op_flags & OPf_SPECIAL)
4366 type ? PL_op_desc[type] : "local"));
4379 case OP_RIGHT_SHIFT:
4388 if (!(o->op_flags & OPf_STACKED))
4394 if (o->op_flags & OPf_STACKED) {
4398 if (!(o->op_private & OPpREPEAT_DOLIST))
4401 const I32 mods = PL_modcount;
4402 /* we recurse rather than iterate here because we need to
4403 * calculate and use the delta applied to PL_modcount by the
4404 * first child. So in something like
4405 * ($x, ($y) x 3) = split;
4406 * split knows that 4 elements are wanted
4408 modkids(cBINOPo->op_first, type);
4409 if (type != OP_AASSIGN)
4411 kid = cBINOPo->op_last;
4412 if (kid->op_type == OP_CONST && SvIOK(kSVOP_sv)) {
4413 const IV iv = SvIV(kSVOP_sv);
4414 if (PL_modcount != RETURN_UNLIMITED_NUMBER)
4416 mods + (PL_modcount - mods) * (iv < 0 ? 0 : iv);
4419 PL_modcount = RETURN_UNLIMITED_NUMBER;
4425 next_kid = OpSIBLING(cUNOPo->op_first);
4430 if (type == OP_REFGEN && o->op_flags & OPf_PARENS) {
4431 PL_modcount = RETURN_UNLIMITED_NUMBER;
4432 /* Treat \(@foo) like ordinary list, but still mark it as modi-
4433 fiable since some contexts need to know. */
4434 o->op_flags |= OPf_MOD;
4439 if (scalar_mod_type(o, type))
4441 ref(cUNOPo->op_first, o->op_type);
4448 /* Do not apply the lvsub flag for rv2[ah]v in scalar context. */
4449 if (type == OP_LEAVESUBLV && (
4450 (o->op_type != OP_RV2AV && o->op_type != OP_RV2HV)
4451 || (o->op_flags & OPf_WANT) != OPf_WANT_SCALAR
4453 o->op_private |= OPpMAYBE_LVSUB;
4457 PL_modcount = RETURN_UNLIMITED_NUMBER;
4463 if (type == OP_LEAVESUBLV)
4464 o->op_private |= OPpMAYBE_LVSUB;
4468 if (type == OP_LEAVESUBLV
4469 && (o->op_private & OPpAVHVSWITCH_MASK) + OP_EACH == OP_KEYS)
4470 o->op_private |= OPpMAYBE_LVSUB;
4474 PL_hints |= HINT_BLOCK_SCOPE;
4475 if (type == OP_LEAVESUBLV)
4476 o->op_private |= OPpMAYBE_LVSUB;
4481 ref(cUNOPo->op_first, o->op_type);
4485 PL_hints |= HINT_BLOCK_SCOPE;
4495 case OP_AELEMFAST_LEX:
4502 PL_modcount = RETURN_UNLIMITED_NUMBER;
4503 if (type == OP_REFGEN && o->op_flags & OPf_PARENS)
4505 /* Treat \(@foo) like ordinary list, but still mark it as modi-
4506 fiable since some contexts need to know. */
4507 o->op_flags |= OPf_MOD;
4510 if (scalar_mod_type(o, type))
4512 if ((o->op_flags & OPf_WANT) != OPf_WANT_SCALAR
4513 && type == OP_LEAVESUBLV)
4514 o->op_private |= OPpMAYBE_LVSUB;
4518 if (!type) /* local() */
4519 Perl_croak(aTHX_ "Can't localize lexical variable %" PNf,
4520 PNfARG(PAD_COMPNAME(o->op_targ)));
4521 if (!(o->op_private & OPpLVAL_INTRO)
4522 || ( type != OP_SASSIGN && type != OP_AASSIGN
4523 && PadnameIsSTATE(PAD_COMPNAME_SV(o->op_targ)) ))
4524 S_mark_padname_lvalue(aTHX_ PAD_COMPNAME_SV(o->op_targ));
4532 if (type != OP_LEAVESUBLV && !scalar_mod_type(NULL, type))
4536 if (o->op_private == 4) /* don't allow 4 arg substr as lvalue */
4542 if (type == OP_LEAVESUBLV)
4543 o->op_private |= OPpMAYBE_LVSUB;
4544 if (o->op_flags & OPf_KIDS && OpHAS_SIBLING(cBINOPo->op_first)) {
4545 /* we recurse rather than iterate here because the child
4546 * needs to be processed with a different 'type' parameter */
4548 /* substr and vec */
4549 /* If this op is in merely potential (non-fatal) modifiable
4550 context, then apply OP_ENTERSUB context to
4551 the kid op (to avoid croaking). Other-
4552 wise pass this op’s own type so the correct op is mentioned
4553 in error messages. */
4554 op_lvalue(OpSIBLING(cBINOPo->op_first),
4555 S_potential_mod_type(type)
4563 ref(cBINOPo->op_first, o->op_type);
4564 if (type == OP_ENTERSUB &&
4565 !(o->op_private & (OPpLVAL_INTRO | OPpDEREF)))
4566 o->op_private |= OPpLVAL_DEFER;
4567 if (type == OP_LEAVESUBLV)
4568 o->op_private |= OPpMAYBE_LVSUB;
4575 o->op_private |= OPpLVALUE;
4581 if (o->op_flags & OPf_KIDS)
4582 next_kid = cLISTOPo->op_last;
4587 if (o->op_flags & OPf_SPECIAL) /* do BLOCK */
4589 else if (!(o->op_flags & OPf_KIDS))
4592 if (o->op_targ != OP_LIST) {
4593 OP *sib = OpSIBLING(cLISTOPo->op_first);
4594 /* OP_TRANS and OP_TRANSR with argument have a weird optree
4601 * compared with things like OP_MATCH which have the argument
4607 * so handle specially to correctly get "Can't modify" croaks etc
4610 if (sib && (sib->op_type == OP_TRANS || sib->op_type == OP_TRANSR))
4612 /* this should trigger a "Can't modify transliteration" err */
4613 op_lvalue(sib, type);
4615 next_kid = cBINOPo->op_first;
4616 /* we assume OP_NULLs which aren't ex-list have no more than 2
4617 * children. If this assumption is wrong, increase the scan
4619 assert( !OpHAS_SIBLING(next_kid)
4620 || !OpHAS_SIBLING(OpSIBLING(next_kid)));
4626 next_kid = cLISTOPo->op_first;
4634 if (type == OP_LEAVESUBLV
4635 || !S_vivifies(cLOGOPo->op_first->op_type))
4636 next_kid = cLOGOPo->op_first;
4637 else if (type == OP_LEAVESUBLV
4638 || !S_vivifies(OpSIBLING(cLOGOPo->op_first)->op_type))
4639 next_kid = OpSIBLING(cLOGOPo->op_first);
4643 if (type == OP_NULL) { /* local */
4645 if (!FEATURE_MYREF_IS_ENABLED)
4646 Perl_croak(aTHX_ "The experimental declared_refs "
4647 "feature is not enabled");
4648 Perl_ck_warner_d(aTHX_
4649 packWARN(WARN_EXPERIMENTAL__DECLARED_REFS),
4650 "Declaring references is experimental");
4651 next_kid = cUNOPo->op_first;
4654 if (type != OP_AASSIGN && type != OP_SASSIGN
4655 && type != OP_ENTERLOOP)
4657 /* Don’t bother applying lvalue context to the ex-list. */
4658 kid = cUNOPx(cUNOPo->op_first)->op_first;
4659 assert (!OpHAS_SIBLING(kid));
4662 if (type == OP_NULL) /* local */
4664 if (type != OP_AASSIGN) goto nomod;
4665 kid = cUNOPo->op_first;
4668 const U8 ec = PL_parser ? PL_parser->error_count : 0;
4669 S_lvref(aTHX_ kid, type);
4670 if (!PL_parser || PL_parser->error_count == ec) {
4671 if (!FEATURE_REFALIASING_IS_ENABLED)
4673 "Experimental aliasing via reference not enabled");
4674 Perl_ck_warner_d(aTHX_
4675 packWARN(WARN_EXPERIMENTAL__REFALIASING),
4676 "Aliasing via reference is experimental");
4679 if (o->op_type == OP_REFGEN)
4680 op_null(cUNOPx(cUNOPo->op_first)->op_first); /* pushmark */