4 * Copyright (C) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
5 * 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 by Larry Wall and others
7 * You may distribute under the terms of either the GNU General Public
8 * License or the Artistic License, as specified in the README file.
13 * 'You see: Mr. Drogo, he married poor Miss Primula Brandybuck. She was
14 * our Mr. Bilbo's first cousin on the mother's side (her mother being the
15 * youngest of the Old Took's daughters); and Mr. Drogo was his second
16 * cousin. So Mr. Frodo is his first *and* second cousin, once removed
17 * either way, as the saying is, if you follow me.' --the Gaffer
19 * [p.23 of _The Lord of the Rings_, I/i: "A Long-Expected Party"]
22 /* This file contains the functions that create, manipulate and optimize
23 * the OP structures that hold a compiled perl program.
25 * Note that during the build of miniperl, a temporary copy of this file
26 * is made, called opmini.c.
28 * A Perl program is compiled into a tree of OP nodes. Each op contains:
29 * * structural OP pointers to its children and siblings (op_sibling,
30 * op_first etc) that define the tree structure;
31 * * execution order OP pointers (op_next, plus sometimes op_other,
32 * op_lastop etc) that define the execution sequence plus variants;
33 * * a pointer to the C "pp" function that would execute the op;
34 * * any data specific to that op.
35 * For example, an OP_CONST op points to the pp_const() function and to an
36 * SV containing the constant value. When pp_const() is executed, its job
37 * is to push that SV onto the stack.
39 * OPs are mainly created by the newFOO() functions, which are mainly
40 * called from the parser (in perly.y) as the code is parsed. For example
41 * the Perl code $a + $b * $c would cause the equivalent of the following
42 * to be called (oversimplifying a bit):
44 * newBINOP(OP_ADD, flags,
46 * newBINOP(OP_MULTIPLY, flags, newSVREF($b), newSVREF($c))
49 * As the parser reduces low-level rules, it creates little op subtrees;
50 * as higher-level rules are resolved, these subtrees get joined together
51 * as branches on a bigger subtree, until eventually a top-level rule like
52 * a subroutine definition is reduced, at which point there is one large
55 * The execution order pointers (op_next) are generated as the subtrees
56 * are joined together. Consider this sub-expression: A*B + C/D: at the
57 * point when it's just been parsed, the op tree looks like:
65 * with the intended execution order being:
67 * [PREV] => A => B => [*] => C => D => [/] => [+] => [NEXT]
69 * At this point all the nodes' op_next pointers will have been set,
71 * * we don't know what the [NEXT] node will be yet;
72 * * we don't know what the [PREV] node will be yet, but when it gets
73 * created and needs its op_next set, it needs to be set to point to
74 * A, which is non-obvious.
75 * To handle both those cases, we temporarily set the top node's
76 * op_next to point to the first node to be executed in this subtree (A in
77 * this case). This means that initially a subtree's op_next chain,
78 * starting from the top node, will visit each node in execution sequence
79 * then point back at the top node.
80 * When we embed this subtree in a larger tree, its top op_next is used
81 * to get the start node, then is set to point to its new neighbour.
82 * For example the two separate [*],A,B and [/],C,D subtrees would
84 * [*] => A; A => B; B => [*]
86 * [/] => C; C => D; D => [/]
87 * When these two subtrees were joined together to make the [+] subtree,
88 * [+]'s op_next was set to [*]'s op_next, i.e. A; then [*]'s op_next was
89 * set to point to [/]'s op_next, i.e. C.
91 * This op_next linking is done by the LINKLIST() macro and its underlying
92 * op_linklist() function. Given a top-level op, if its op_next is
93 * non-null, it's already been linked, so leave it. Otherwise link it with
94 * its children as described above, possibly recursively if any of the
95 * children have a null op_next.
97 * In summary: given a subtree, its top-level node's op_next will either
99 * NULL: the subtree hasn't been LINKLIST()ed yet;
100 * fake: points to the start op for this subtree;
101 * real: once the subtree has been embedded into a larger tree
106 Here's an older description from Larry.
108 Perl's compiler is essentially a 3-pass compiler with interleaved phases:
112 An execution-order pass
114 The bottom-up pass is represented by all the "newOP" routines and
115 the ck_ routines. The bottom-upness is actually driven by yacc.
116 So at the point that a ck_ routine fires, we have no idea what the
117 context is, either upward in the syntax tree, or either forward or
118 backward in the execution order. (The bottom-up parser builds that
119 part of the execution order it knows about, but if you follow the "next"
120 links around, you'll find it's actually a closed loop through the
123 Whenever the bottom-up parser gets to a node that supplies context to
124 its components, it invokes that portion of the top-down pass that applies
125 to that part of the subtree (and marks the top node as processed, so
126 if a node further up supplies context, it doesn't have to take the
127 plunge again). As a particular subcase of this, as the new node is
128 built, it takes all the closed execution loops of its subcomponents
129 and links them into a new closed loop for the higher level node. But
130 it's still not the real execution order.
132 The actual execution order is not known till we get a grammar reduction
133 to a top-level unit like a subroutine or file that will be called by
134 "name" rather than via a "next" pointer. At that point, we can call
135 into peep() to do that code's portion of the 3rd pass. It has to be
136 recursive, but it's recursive on basic blocks, not on tree nodes.
139 /* To implement user lexical pragmas, there needs to be a way at run time to
140 get the compile time state of %^H for that block. Storing %^H in every
141 block (or even COP) would be very expensive, so a different approach is
142 taken. The (running) state of %^H is serialised into a tree of HE-like
143 structs. Stores into %^H are chained onto the current leaf as a struct
144 refcounted_he * with the key and the value. Deletes from %^H are saved
145 with a value of PL_sv_placeholder. The state of %^H at any point can be
146 turned back into a regular HV by walking back up the tree from that point's
147 leaf, ignoring any key you've already seen (placeholder or not), storing
148 the rest into the HV structure, then removing the placeholders. Hence
149 memory is only used to store the %^H deltas from the enclosing COP, rather
150 than the entire %^H on each COP.
152 To cause actions on %^H to write out the serialisation records, it has
153 magic type 'H'. This magic (itself) does nothing, but its presence causes
154 the values to gain magic type 'h', which has entries for set and clear.
155 C<Perl_magic_sethint> updates C<PL_compiling.cop_hints_hash> with a store
156 record, with deletes written by C<Perl_magic_clearhint>. C<SAVEHINTS>
157 saves the current C<PL_compiling.cop_hints_hash> on the save stack, so that
158 it will be correctly restored when any inner compiling scope is exited.
164 #include "keywords.h"
168 #define CALL_PEEP(o) PL_peepp(aTHX_ o)
169 #define CALL_RPEEP(o) PL_rpeepp(aTHX_ o)
170 #define CALL_OPFREEHOOK(o) if (PL_opfreehook) PL_opfreehook(aTHX_ o)
172 static const char array_passed_to_stat[] = "Array passed to stat will be coerced to a scalar";
174 /* remove any leading "empty" ops from the op_next chain whose first
175 * node's address is stored in op_p. Store the updated address of the
176 * first node in op_p.
180 S_prune_chain_head(OP** op_p)
183 && ( (*op_p)->op_type == OP_NULL
184 || (*op_p)->op_type == OP_SCOPE
185 || (*op_p)->op_type == OP_SCALAR
186 || (*op_p)->op_type == OP_LINESEQ)
188 *op_p = (*op_p)->op_next;
192 /* See the explanatory comments above struct opslab in op.h. */
194 #ifdef PERL_DEBUG_READONLY_OPS
195 # define PERL_SLAB_SIZE 128
196 # define PERL_MAX_SLAB_SIZE 4096
197 # include <sys/mman.h>
200 #ifndef PERL_SLAB_SIZE
201 # define PERL_SLAB_SIZE 64
203 #ifndef PERL_MAX_SLAB_SIZE
204 # define PERL_MAX_SLAB_SIZE 2048
207 /* rounds up to nearest pointer */
208 #define SIZE_TO_PSIZE(x) (((x) + sizeof(I32 *) - 1)/sizeof(I32 *))
209 #define DIFF(o,p) ((size_t)((I32 **)(p) - (I32**)(o)))
211 /* malloc a new op slab (suitable for attaching to PL_compcv) */
214 S_new_slab(pTHX_ size_t sz)
216 #ifdef PERL_DEBUG_READONLY_OPS
217 OPSLAB *slab = (OPSLAB *) mmap(0, sz * sizeof(I32 *),
218 PROT_READ|PROT_WRITE,
219 MAP_ANON|MAP_PRIVATE, -1, 0);
220 DEBUG_m(PerlIO_printf(Perl_debug_log, "mapped %lu at %p\n",
221 (unsigned long) sz, slab));
222 if (slab == MAP_FAILED) {
223 perror("mmap failed");
226 slab->opslab_size = (U16)sz;
228 OPSLAB *slab = (OPSLAB *)PerlMemShared_calloc(sz, sizeof(I32 *));
231 /* The context is unused in non-Windows */
234 slab->opslab_first = (OPSLOT *)((I32 **)slab + sz - 1);
238 /* requires double parens and aTHX_ */
239 #define DEBUG_S_warn(args) \
241 PerlIO_printf(Perl_debug_log, "%s", SvPVx_nolen(Perl_mess args)) \
244 /* Returns a sz-sized block of memory (suitable for holding an op) from
245 * a free slot in the chain of op slabs attached to PL_compcv.
246 * Allocates a new slab if necessary.
247 * if PL_compcv isn't compiling, malloc() instead.
251 Perl_Slab_Alloc(pTHX_ size_t sz)
253 OPSLAB *head_slab; /* first slab in the chain */
259 /* We only allocate ops from the slab during subroutine compilation.
260 We find the slab via PL_compcv, hence that must be non-NULL. It could
261 also be pointing to a subroutine which is now fully set up (CvROOT()
262 pointing to the top of the optree for that sub), or a subroutine
263 which isn't using the slab allocator. If our sanity checks aren't met,
264 don't use a slab, but allocate the OP directly from the heap. */
265 if (!PL_compcv || CvROOT(PL_compcv)
266 || (CvSTART(PL_compcv) && !CvSLABBED(PL_compcv)))
268 o = (OP*)PerlMemShared_calloc(1, sz);
272 /* While the subroutine is under construction, the slabs are accessed via
273 CvSTART(), to avoid needing to expand PVCV by one pointer for something
274 unneeded at runtime. Once a subroutine is constructed, the slabs are
275 accessed via CvROOT(). So if CvSTART() is NULL, no slab has been
276 allocated yet. See the commit message for 8be227ab5eaa23f2 for more
278 if (!CvSTART(PL_compcv)) {
280 (OP *)(head_slab = S_new_slab(aTHX_ PERL_SLAB_SIZE));
281 CvSLABBED_on(PL_compcv);
282 head_slab->opslab_refcnt = 2; /* one for the CV; one for the new OP */
284 else ++(head_slab = (OPSLAB *)CvSTART(PL_compcv))->opslab_refcnt;
286 opsz = SIZE_TO_PSIZE(sz);
287 sz = opsz + OPSLOT_HEADER_P;
289 /* The slabs maintain a free list of OPs. In particular, constant folding
290 will free up OPs, so it makes sense to re-use them where possible. A
291 freed up slot is used in preference to a new allocation. */
292 if (head_slab->opslab_freed) {
293 OP **too = &head_slab->opslab_freed;
295 DEBUG_S_warn((aTHX_ "found free op at %p, head slab %p", (void*)o,
297 while (o && DIFF(OpSLOT(o), OpSLOT(o)->opslot_next) < sz) {
298 DEBUG_S_warn((aTHX_ "Alas! too small"));
299 o = *(too = &o->op_next);
300 if (o) { DEBUG_S_warn((aTHX_ "found another free op at %p", (void*)o)); }
304 Zero(o, opsz, I32 *);
310 #define INIT_OPSLOT \
311 slot->opslot_slab = head_slab; \
312 slot->opslot_next = slab2->opslab_first; \
313 slab2->opslab_first = slot; \
314 o = &slot->opslot_op; \
317 /* The partially-filled slab is next in the chain. */
318 slab2 = head_slab->opslab_next ? head_slab->opslab_next : head_slab;
319 if ((space = DIFF(&slab2->opslab_slots, slab2->opslab_first)) < sz) {
320 /* Remaining space is too small. */
322 /* If we can fit a BASEOP, add it to the free chain, so as not
324 if (space >= SIZE_TO_PSIZE(sizeof(OP)) + OPSLOT_HEADER_P) {
325 slot = &slab2->opslab_slots;
327 o->op_type = OP_FREED;
328 o->op_next = head_slab->opslab_freed;
329 head_slab->opslab_freed = o;
332 /* Create a new slab. Make this one twice as big. */
333 slot = slab2->opslab_first;
334 while (slot->opslot_next) slot = slot->opslot_next;
335 slab2 = S_new_slab(aTHX_
336 (DIFF(slab2, slot)+1)*2 > PERL_MAX_SLAB_SIZE
338 : (DIFF(slab2, slot)+1)*2);
339 slab2->opslab_next = head_slab->opslab_next;
340 head_slab->opslab_next = slab2;
342 assert(DIFF(&slab2->opslab_slots, slab2->opslab_first) >= sz);
344 /* Create a new op slot */
345 slot = (OPSLOT *)((I32 **)slab2->opslab_first - sz);
346 assert(slot >= &slab2->opslab_slots);
347 if (DIFF(&slab2->opslab_slots, slot)
348 < SIZE_TO_PSIZE(sizeof(OP)) + OPSLOT_HEADER_P)
349 slot = &slab2->opslab_slots;
351 DEBUG_S_warn((aTHX_ "allocating op at %p, head slab %p", (void*)o,
355 /* moresib == 0, op_sibling == 0 implies a solitary unattached op */
356 assert(!o->op_moresib);
357 assert(!o->op_sibparent);
364 #ifdef PERL_DEBUG_READONLY_OPS
366 Perl_Slab_to_ro(pTHX_ OPSLAB *slab)
368 PERL_ARGS_ASSERT_SLAB_TO_RO;
370 if (slab->opslab_readonly) return;
371 slab->opslab_readonly = 1;
372 for (; slab; slab = slab->opslab_next) {
373 /*DEBUG_U(PerlIO_printf(Perl_debug_log,"mprotect ->ro %lu at %p\n",
374 (unsigned long) slab->opslab_size, slab));*/
375 if (mprotect(slab, slab->opslab_size * sizeof(I32 *), PROT_READ))
376 Perl_warn(aTHX_ "mprotect for %p %lu failed with %d", slab,
377 (unsigned long)slab->opslab_size, errno);
382 Perl_Slab_to_rw(pTHX_ OPSLAB *const slab)
386 PERL_ARGS_ASSERT_SLAB_TO_RW;
388 if (!slab->opslab_readonly) return;
390 for (; slab2; slab2 = slab2->opslab_next) {
391 /*DEBUG_U(PerlIO_printf(Perl_debug_log,"mprotect ->rw %lu at %p\n",
392 (unsigned long) size, slab2));*/
393 if (mprotect((void *)slab2, slab2->opslab_size * sizeof(I32 *),
394 PROT_READ|PROT_WRITE)) {
395 Perl_warn(aTHX_ "mprotect RW for %p %lu failed with %d", slab,
396 (unsigned long)slab2->opslab_size, errno);
399 slab->opslab_readonly = 0;
403 # define Slab_to_rw(op) NOOP
406 /* This cannot possibly be right, but it was copied from the old slab
407 allocator, to which it was originally added, without explanation, in
410 # define PerlMemShared PerlMem
413 /* make freed ops die if they're inadvertently executed */
418 DIE(aTHX_ "panic: freed op 0x%p called\n", PL_op);
423 /* Return the block of memory used by an op to the free list of
424 * the OP slab associated with that op.
428 Perl_Slab_Free(pTHX_ void *op)
430 OP * const o = (OP *)op;
433 PERL_ARGS_ASSERT_SLAB_FREE;
436 o->op_ppaddr = S_pp_freed;
439 if (!o->op_slabbed) {
441 PerlMemShared_free(op);
446 /* If this op is already freed, our refcount will get screwy. */
447 assert(o->op_type != OP_FREED);
448 o->op_type = OP_FREED;
449 o->op_next = slab->opslab_freed;
450 slab->opslab_freed = o;
451 DEBUG_S_warn((aTHX_ "free op at %p, recorded in slab %p", (void*)o, (void*)slab));
452 OpslabREFCNT_dec_padok(slab);
456 Perl_opslab_free_nopad(pTHX_ OPSLAB *slab)
458 const bool havepad = !!PL_comppad;
459 PERL_ARGS_ASSERT_OPSLAB_FREE_NOPAD;
462 PAD_SAVE_SETNULLPAD();
468 /* Free a chain of OP slabs. Should only be called after all ops contained
469 * in it have been freed. At this point, its reference count should be 1,
470 * because OpslabREFCNT_dec() skips doing rc-- when it detects that rc == 1,
471 * and just directly calls opslab_free().
472 * (Note that the reference count which PL_compcv held on the slab should
473 * have been removed once compilation of the sub was complete).
479 Perl_opslab_free(pTHX_ OPSLAB *slab)
482 PERL_ARGS_ASSERT_OPSLAB_FREE;
484 DEBUG_S_warn((aTHX_ "freeing slab %p", (void*)slab));
485 assert(slab->opslab_refcnt == 1);
487 slab2 = slab->opslab_next;
489 slab->opslab_refcnt = ~(size_t)0;
491 #ifdef PERL_DEBUG_READONLY_OPS
492 DEBUG_m(PerlIO_printf(Perl_debug_log, "Deallocate slab at %p\n",
494 if (munmap(slab, slab->opslab_size * sizeof(I32 *))) {
495 perror("munmap failed");
499 PerlMemShared_free(slab);
505 /* like opslab_free(), but first calls op_free() on any ops in the slab
506 * not marked as OP_FREED
510 Perl_opslab_force_free(pTHX_ OPSLAB *slab)
514 size_t savestack_count = 0;
516 PERL_ARGS_ASSERT_OPSLAB_FORCE_FREE;
520 for (slot = slab2->opslab_first;
522 slot = slot->opslot_next) {
523 if (slot->opslot_op.op_type != OP_FREED
524 && !(slot->opslot_op.op_savefree
530 assert(slot->opslot_op.op_slabbed);
531 op_free(&slot->opslot_op);
532 if (slab->opslab_refcnt == 1) goto free;
535 } while ((slab2 = slab2->opslab_next));
536 /* > 1 because the CV still holds a reference count. */
537 if (slab->opslab_refcnt > 1) { /* still referenced by the savestack */
539 assert(savestack_count == slab->opslab_refcnt-1);
541 /* Remove the CV’s reference count. */
542 slab->opslab_refcnt--;
549 #ifdef PERL_DEBUG_READONLY_OPS
551 Perl_op_refcnt_inc(pTHX_ OP *o)
554 OPSLAB *const slab = o->op_slabbed ? OpSLAB(o) : NULL;
555 if (slab && slab->opslab_readonly) {
568 Perl_op_refcnt_dec(pTHX_ OP *o)
571 OPSLAB *const slab = o->op_slabbed ? OpSLAB(o) : NULL;
573 PERL_ARGS_ASSERT_OP_REFCNT_DEC;
575 if (slab && slab->opslab_readonly) {
577 result = --o->op_targ;
580 result = --o->op_targ;
586 * In the following definition, the ", (OP*)0" is just to make the compiler
587 * think the expression is of the right type: croak actually does a Siglongjmp.
589 #define CHECKOP(type,o) \
590 ((PL_op_mask && PL_op_mask[type]) \
591 ? ( op_free((OP*)o), \
592 Perl_croak(aTHX_ "'%s' trapped by operation mask", PL_op_desc[type]), \
594 : PL_check[type](aTHX_ (OP*)o))
596 #define RETURN_UNLIMITED_NUMBER (PERL_INT_MAX / 2)
598 #define OpTYPE_set(o,type) \
600 o->op_type = (OPCODE)type; \
601 o->op_ppaddr = PL_ppaddr[type]; \
605 S_no_fh_allowed(pTHX_ OP *o)
607 PERL_ARGS_ASSERT_NO_FH_ALLOWED;
609 yyerror(Perl_form(aTHX_ "Missing comma after first argument to %s function",
615 S_too_few_arguments_pv(pTHX_ OP *o, const char* name, U32 flags)
617 PERL_ARGS_ASSERT_TOO_FEW_ARGUMENTS_PV;
618 yyerror_pv(Perl_form(aTHX_ "Not enough arguments for %s", name), flags);
623 S_too_many_arguments_pv(pTHX_ OP *o, const char *name, U32 flags)
625 PERL_ARGS_ASSERT_TOO_MANY_ARGUMENTS_PV;
627 yyerror_pv(Perl_form(aTHX_ "Too many arguments for %s", name), flags);
632 S_bad_type_pv(pTHX_ I32 n, const char *t, const OP *o, const OP *kid)
634 PERL_ARGS_ASSERT_BAD_TYPE_PV;
636 yyerror_pv(Perl_form(aTHX_ "Type of arg %d to %s must be %s (not %s)",
637 (int)n, PL_op_desc[(o)->op_type], t, OP_DESC(kid)), 0);
640 /* remove flags var, its unused in all callers, move to to right end since gv
641 and kid are always the same */
643 S_bad_type_gv(pTHX_ I32 n, GV *gv, const OP *kid, const char *t)
645 SV * const namesv = cv_name((CV *)gv, NULL, 0);
646 PERL_ARGS_ASSERT_BAD_TYPE_GV;
648 yyerror_pv(Perl_form(aTHX_ "Type of arg %d to %" SVf " must be %s (not %s)",
649 (int)n, SVfARG(namesv), t, OP_DESC(kid)), SvUTF8(namesv));
653 S_no_bareword_allowed(pTHX_ OP *o)
655 PERL_ARGS_ASSERT_NO_BAREWORD_ALLOWED;
657 qerror(Perl_mess(aTHX_
658 "Bareword \"%" SVf "\" not allowed while \"strict subs\" in use",
660 o->op_private &= ~OPpCONST_STRICT; /* prevent warning twice about the same OP */
663 /* "register" allocation */
666 Perl_allocmy(pTHX_ const char *const name, const STRLEN len, const U32 flags)
669 const bool is_our = (PL_parser->in_my == KEY_our);
671 PERL_ARGS_ASSERT_ALLOCMY;
673 if (flags & ~SVf_UTF8)
674 Perl_croak(aTHX_ "panic: allocmy illegal flag bits 0x%" UVxf,
677 /* complain about "my $<special_var>" etc etc */
681 || ( (flags & SVf_UTF8)
682 && isIDFIRST_utf8_safe((U8 *)name+1, name + len))
683 || (name[1] == '_' && len > 2)))
685 if (!(flags & SVf_UTF8 && UTF8_IS_START(name[1]))
687 && (!isPRINT(name[1]) || strchr("\t\n\r\f", name[1]))) {
688 /* diag_listed_as: Can't use global %s in "%s" */
689 yyerror(Perl_form(aTHX_ "Can't use global %c^%c%.*s in \"%s\"",
690 name[0], toCTRL(name[1]), (int)(len - 2), name + 2,
691 PL_parser->in_my == KEY_state ? "state" : "my"));
693 yyerror_pv(Perl_form(aTHX_ "Can't use global %.*s in \"%s\"", (int) len, name,
694 PL_parser->in_my == KEY_state ? "state" : "my"), flags & SVf_UTF8);
698 /* allocate a spare slot and store the name in that slot */
700 off = pad_add_name_pvn(name, len,
701 (is_our ? padadd_OUR :
702 PL_parser->in_my == KEY_state ? padadd_STATE : 0),
703 PL_parser->in_my_stash,
705 /* $_ is always in main::, even with our */
706 ? (PL_curstash && !memEQs(name,len,"$_")
712 /* anon sub prototypes contains state vars should always be cloned,
713 * otherwise the state var would be shared between anon subs */
715 if (PL_parser->in_my == KEY_state && CvANON(PL_compcv))
716 CvCLONE_on(PL_compcv);
722 =head1 Optree Manipulation Functions
724 =for apidoc alloccopstash
726 Available only under threaded builds, this function allocates an entry in
727 C<PL_stashpad> for the stash passed to it.
734 Perl_alloccopstash(pTHX_ HV *hv)
736 PADOFFSET off = 0, o = 1;
737 bool found_slot = FALSE;
739 PERL_ARGS_ASSERT_ALLOCCOPSTASH;
741 if (PL_stashpad[PL_stashpadix] == hv) return PL_stashpadix;
743 for (; o < PL_stashpadmax; ++o) {
744 if (PL_stashpad[o] == hv) return PL_stashpadix = o;
745 if (!PL_stashpad[o] || SvTYPE(PL_stashpad[o]) != SVt_PVHV)
746 found_slot = TRUE, off = o;
749 Renew(PL_stashpad, PL_stashpadmax + 10, HV *);
750 Zero(PL_stashpad + PL_stashpadmax, 10, HV *);
751 off = PL_stashpadmax;
752 PL_stashpadmax += 10;
755 PL_stashpad[PL_stashpadix = off] = hv;
760 /* free the body of an op without examining its contents.
761 * Always use this rather than FreeOp directly */
764 S_op_destroy(pTHX_ OP *o)
774 Free an op and its children. Only use this when an op is no longer linked
781 Perl_op_free(pTHX_ OP *o)
787 bool went_up = FALSE; /* whether we reached the current node by
788 following the parent pointer from a child, and
789 so have already seen this node */
791 if (!o || o->op_type == OP_FREED)
794 if (o->op_private & OPpREFCOUNTED) {
795 /* if base of tree is refcounted, just decrement */
796 switch (o->op_type) {
806 refcnt = OpREFCNT_dec(o);
809 /* Need to find and remove any pattern match ops from
810 * the list we maintain for reset(). */
811 find_and_forget_pmops(o);
824 /* free child ops before ourself, (then free ourself "on the
827 if (!went_up && o->op_flags & OPf_KIDS) {
828 next_op = cUNOPo->op_first;
832 /* find the next node to visit, *then* free the current node
833 * (can't rely on o->op_* fields being valid after o has been
836 /* The next node to visit will be either the sibling, or the
837 * parent if no siblings left, or NULL if we've worked our way
838 * back up to the top node in the tree */
839 next_op = (o == top_op) ? NULL : o->op_sibparent;
840 went_up = cBOOL(!OpHAS_SIBLING(o)); /* parents are already visited */
842 /* Now process the current node */
844 /* Though ops may be freed twice, freeing the op after its slab is a
846 assert(!o->op_slabbed || OpSLAB(o)->opslab_refcnt != ~(size_t)0);
847 /* During the forced freeing of ops after compilation failure, kidops
848 may be freed before their parents. */
849 if (!o || o->op_type == OP_FREED)
854 /* an op should only ever acquire op_private flags that we know about.
855 * If this fails, you may need to fix something in regen/op_private.
856 * Don't bother testing if:
857 * * the op_ppaddr doesn't match the op; someone may have
858 * overridden the op and be doing strange things with it;
859 * * we've errored, as op flags are often left in an
860 * inconsistent state then. Note that an error when
861 * compiling the main program leaves PL_parser NULL, so
862 * we can't spot faults in the main code, only
863 * evaled/required code */
865 if ( o->op_ppaddr == PL_ppaddr[type]
867 && !PL_parser->error_count)
869 assert(!(o->op_private & ~PL_op_private_valid[type]));
874 /* Call the op_free hook if it has been set. Do it now so that it's called
875 * at the right time for refcounted ops, but still before all of the kids
880 type = (OPCODE)o->op_targ;
883 Slab_to_rw(OpSLAB(o));
885 /* COP* is not cleared by op_clear() so that we may track line
886 * numbers etc even after null() */
887 if (type == OP_NEXTSTATE || type == OP_DBSTATE) {
899 /* S_op_clear_gv(): free a GV attached to an OP */
903 void S_op_clear_gv(pTHX_ OP *o, PADOFFSET *ixp)
905 void S_op_clear_gv(pTHX_ OP *o, SV**svp)
909 GV *gv = (o->op_type == OP_GV || o->op_type == OP_GVSV
910 || o->op_type == OP_MULTIDEREF)
913 ? ((GV*)PAD_SVl(*ixp)) : NULL;
915 ? (GV*)(*svp) : NULL;
917 /* It's possible during global destruction that the GV is freed
918 before the optree. Whilst the SvREFCNT_inc is happy to bump from
919 0 to 1 on a freed SV, the corresponding SvREFCNT_dec from 1 to 0
920 will trigger an assertion failure, because the entry to sv_clear
921 checks that the scalar is not already freed. A check of for
922 !SvIS_FREED(gv) turns out to be invalid, because during global
923 destruction the reference count can be forced down to zero
924 (with SVf_BREAK set). In which case raising to 1 and then
925 dropping to 0 triggers cleanup before it should happen. I
926 *think* that this might actually be a general, systematic,
927 weakness of the whole idea of SVf_BREAK, in that code *is*
928 allowed to raise and lower references during global destruction,
929 so any *valid* code that happens to do this during global
930 destruction might well trigger premature cleanup. */
931 bool still_valid = gv && SvREFCNT(gv);
934 SvREFCNT_inc_simple_void(gv);
937 pad_swipe(*ixp, TRUE);
945 int try_downgrade = SvREFCNT(gv) == 2;
948 gv_try_downgrade(gv);
954 Perl_op_clear(pTHX_ OP *o)
959 PERL_ARGS_ASSERT_OP_CLEAR;
961 switch (o->op_type) {
962 case OP_NULL: /* Was holding old type, if any. */
965 case OP_ENTEREVAL: /* Was holding hints. */
966 case OP_ARGDEFELEM: /* Was holding signature index. */
970 if (!(o->op_flags & OPf_REF) || !OP_IS_STAT(o->op_type))
977 S_op_clear_gv(aTHX_ o, &(cPADOPx(o)->op_padix));
979 S_op_clear_gv(aTHX_ o, &(cSVOPx(o)->op_sv));
982 case OP_METHOD_REDIR:
983 case OP_METHOD_REDIR_SUPER:
985 if (cMETHOPx(o)->op_rclass_targ) {
986 pad_swipe(cMETHOPx(o)->op_rclass_targ, 1);
987 cMETHOPx(o)->op_rclass_targ = 0;
990 SvREFCNT_dec(cMETHOPx(o)->op_rclass_sv);
991 cMETHOPx(o)->op_rclass_sv = NULL;
994 case OP_METHOD_NAMED:
995 case OP_METHOD_SUPER:
996 SvREFCNT_dec(cMETHOPx(o)->op_u.op_meth_sv);
997 cMETHOPx(o)->op_u.op_meth_sv = NULL;
1000 pad_swipe(o->op_targ, 1);
1007 SvREFCNT_dec(cSVOPo->op_sv);
1008 cSVOPo->op_sv = NULL;
1011 Even if op_clear does a pad_free for the target of the op,
1012 pad_free doesn't actually remove the sv that exists in the pad;
1013 instead it lives on. This results in that it could be reused as
1014 a target later on when the pad was reallocated.
1017 pad_swipe(o->op_targ,1);
1027 if (o->op_flags & (OPf_SPECIAL|OPf_STACKED|OPf_KIDS))
1032 if ( (o->op_type == OP_TRANS || o->op_type == OP_TRANSR)
1033 && (o->op_private & (OPpTRANS_FROM_UTF|OPpTRANS_TO_UTF)))
1036 if (cPADOPo->op_padix > 0) {
1037 pad_swipe(cPADOPo->op_padix, TRUE);
1038 cPADOPo->op_padix = 0;
1041 SvREFCNT_dec(cSVOPo->op_sv);
1042 cSVOPo->op_sv = NULL;
1046 PerlMemShared_free(cPVOPo->op_pv);
1047 cPVOPo->op_pv = NULL;
1051 op_free(cPMOPo->op_pmreplrootu.op_pmreplroot);
1055 if ( (o->op_private & OPpSPLIT_ASSIGN) /* @array = split */
1056 && !(o->op_flags & OPf_STACKED)) /* @{expr} = split */
1058 if (o->op_private & OPpSPLIT_LEX)
1059 pad_free(cPMOPo->op_pmreplrootu.op_pmtargetoff);
1062 pad_swipe(cPMOPo->op_pmreplrootu.op_pmtargetoff, TRUE);
1064 SvREFCNT_dec(MUTABLE_SV(cPMOPo->op_pmreplrootu.op_pmtargetgv));
1071 if (!(cPMOPo->op_pmflags & PMf_CODELIST_PRIVATE))
1072 op_free(cPMOPo->op_code_list);
1073 cPMOPo->op_code_list = NULL;
1074 forget_pmop(cPMOPo);
1075 cPMOPo->op_pmreplrootu.op_pmreplroot = NULL;
1076 /* we use the same protection as the "SAFE" version of the PM_ macros
1077 * here since sv_clean_all might release some PMOPs
1078 * after PL_regex_padav has been cleared
1079 * and the clearing of PL_regex_padav needs to
1080 * happen before sv_clean_all
1083 if(PL_regex_pad) { /* We could be in destruction */
1084 const IV offset = (cPMOPo)->op_pmoffset;
1085 ReREFCNT_dec(PM_GETRE(cPMOPo));
1086 PL_regex_pad[offset] = &PL_sv_undef;
1087 sv_catpvn_nomg(PL_regex_pad[0], (const char *)&offset,
1091 ReREFCNT_dec(PM_GETRE(cPMOPo));
1092 PM_SETRE(cPMOPo, NULL);
1098 PerlMemShared_free(cUNOP_AUXo->op_aux);
1101 case OP_MULTICONCAT:
1103 UNOP_AUX_item *aux = cUNOP_AUXo->op_aux;
1104 /* aux[PERL_MULTICONCAT_IX_PLAIN_PV] and/or
1105 * aux[PERL_MULTICONCAT_IX_UTF8_PV] point to plain and/or
1106 * utf8 shared strings */
1107 char *p1 = aux[PERL_MULTICONCAT_IX_PLAIN_PV].pv;
1108 char *p2 = aux[PERL_MULTICONCAT_IX_UTF8_PV].pv;
1110 PerlMemShared_free(p1);
1112 PerlMemShared_free(p2);
1113 PerlMemShared_free(aux);
1119 UNOP_AUX_item *items = cUNOP_AUXo->op_aux;
1120 UV actions = items->uv;
1122 bool is_hash = FALSE;
1125 switch (actions & MDEREF_ACTION_MASK) {
1128 actions = (++items)->uv;
1131 case MDEREF_HV_padhv_helem:
1134 case MDEREF_AV_padav_aelem:
1135 pad_free((++items)->pad_offset);
1138 case MDEREF_HV_gvhv_helem:
1141 case MDEREF_AV_gvav_aelem:
1143 S_op_clear_gv(aTHX_ o, &((++items)->pad_offset));
1145 S_op_clear_gv(aTHX_ o, &((++items)->sv));
1149 case MDEREF_HV_gvsv_vivify_rv2hv_helem:
1152 case MDEREF_AV_gvsv_vivify_rv2av_aelem:
1154 S_op_clear_gv(aTHX_ o, &((++items)->pad_offset));
1156 S_op_clear_gv(aTHX_ o, &((++items)->sv));
1158 goto do_vivify_rv2xv_elem;
1160 case MDEREF_HV_padsv_vivify_rv2hv_helem:
1163 case MDEREF_AV_padsv_vivify_rv2av_aelem:
1164 pad_free((++items)->pad_offset);
1165 goto do_vivify_rv2xv_elem;
1167 case MDEREF_HV_pop_rv2hv_helem:
1168 case MDEREF_HV_vivify_rv2hv_helem:
1171 do_vivify_rv2xv_elem:
1172 case MDEREF_AV_pop_rv2av_aelem:
1173 case MDEREF_AV_vivify_rv2av_aelem:
1175 switch (actions & MDEREF_INDEX_MASK) {
1176 case MDEREF_INDEX_none:
1179 case MDEREF_INDEX_const:
1183 pad_swipe((++items)->pad_offset, 1);
1185 SvREFCNT_dec((++items)->sv);
1191 case MDEREF_INDEX_padsv:
1192 pad_free((++items)->pad_offset);
1194 case MDEREF_INDEX_gvsv:
1196 S_op_clear_gv(aTHX_ o, &((++items)->pad_offset));
1198 S_op_clear_gv(aTHX_ o, &((++items)->sv));
1203 if (actions & MDEREF_FLAG_last)
1216 actions >>= MDEREF_SHIFT;
1219 /* start of malloc is at op_aux[-1], where the length is
1221 PerlMemShared_free(cUNOP_AUXo->op_aux - 1);
1226 if (o->op_targ > 0) {
1227 pad_free(o->op_targ);
1233 S_cop_free(pTHX_ COP* cop)
1235 PERL_ARGS_ASSERT_COP_FREE;
1238 if (! specialWARN(cop->cop_warnings))
1239 PerlMemShared_free(cop->cop_warnings);
1240 cophh_free(CopHINTHASH_get(cop));
1241 if (PL_curcop == cop)
1246 S_forget_pmop(pTHX_ PMOP *const o)
1248 HV * const pmstash = PmopSTASH(o);
1250 PERL_ARGS_ASSERT_FORGET_PMOP;
1252 if (pmstash && !SvIS_FREED(pmstash) && SvMAGICAL(pmstash)) {
1253 MAGIC * const mg = mg_find((const SV *)pmstash, PERL_MAGIC_symtab);
1255 PMOP **const array = (PMOP**) mg->mg_ptr;
1256 U32 count = mg->mg_len / sizeof(PMOP**);
1260 if (array[i] == o) {
1261 /* Found it. Move the entry at the end to overwrite it. */
1262 array[i] = array[--count];
1263 mg->mg_len = count * sizeof(PMOP**);
1264 /* Could realloc smaller at this point always, but probably
1265 not worth it. Probably worth free()ing if we're the
1268 Safefree(mg->mg_ptr);
1282 S_find_and_forget_pmops(pTHX_ OP *o)
1286 PERL_ARGS_ASSERT_FIND_AND_FORGET_PMOPS;
1289 switch (o->op_type) {
1294 forget_pmop((PMOP*)o);
1297 if (o->op_flags & OPf_KIDS) {
1298 o = cUNOPo->op_first;
1304 return; /* at top; no parents/siblings to try */
1305 if (OpHAS_SIBLING(o)) {
1306 o = o->op_sibparent; /* process next sibling */
1309 o = o->op_sibparent; /*try parent's next sibling */
1318 Neutralizes an op when it is no longer needed, but is still linked to from
1325 Perl_op_null(pTHX_ OP *o)
1329 PERL_ARGS_ASSERT_OP_NULL;
1331 if (o->op_type == OP_NULL)
1334 o->op_targ = o->op_type;
1335 OpTYPE_set(o, OP_NULL);
1339 Perl_op_refcnt_lock(pTHX)
1340 PERL_TSA_ACQUIRE(PL_op_mutex)
1345 PERL_UNUSED_CONTEXT;
1350 Perl_op_refcnt_unlock(pTHX)
1351 PERL_TSA_RELEASE(PL_op_mutex)
1356 PERL_UNUSED_CONTEXT;
1362 =for apidoc op_sibling_splice
1364 A general function for editing the structure of an existing chain of
1365 op_sibling nodes. By analogy with the perl-level C<splice()> function, allows
1366 you to delete zero or more sequential nodes, replacing them with zero or
1367 more different nodes. Performs the necessary op_first/op_last
1368 housekeeping on the parent node and op_sibling manipulation on the
1369 children. The last deleted node will be marked as as the last node by
1370 updating the op_sibling/op_sibparent or op_moresib field as appropriate.
1372 Note that op_next is not manipulated, and nodes are not freed; that is the
1373 responsibility of the caller. It also won't create a new list op for an
1374 empty list etc; use higher-level functions like op_append_elem() for that.
1376 C<parent> is the parent node of the sibling chain. It may passed as C<NULL> if
1377 the splicing doesn't affect the first or last op in the chain.
1379 C<start> is the node preceding the first node to be spliced. Node(s)
1380 following it will be deleted, and ops will be inserted after it. If it is
1381 C<NULL>, the first node onwards is deleted, and nodes are inserted at the
1384 C<del_count> is the number of nodes to delete. If zero, no nodes are deleted.
1385 If -1 or greater than or equal to the number of remaining kids, all
1386 remaining kids are deleted.
1388 C<insert> is the first of a chain of nodes to be inserted in place of the nodes.
1389 If C<NULL>, no nodes are inserted.
1391 The head of the chain of deleted ops is returned, or C<NULL> if no ops were
1396 action before after returns
1397 ------ ----- ----- -------
1400 splice(P, A, 2, X-Y-Z) | | B-C
1404 splice(P, NULL, 1, X-Y) | | A
1408 splice(P, NULL, 3, NULL) | | A-B-C
1412 splice(P, B, 0, X-Y) | | NULL
1416 For lower-level direct manipulation of C<op_sibparent> and C<op_moresib>,
1417 see C<L</OpMORESIB_set>>, C<L</OpLASTSIB_set>>, C<L</OpMAYBESIB_set>>.
1423 Perl_op_sibling_splice(OP *parent, OP *start, int del_count, OP* insert)
1427 OP *last_del = NULL;
1428 OP *last_ins = NULL;
1431 first = OpSIBLING(start);
1435 first = cLISTOPx(parent)->op_first;
1437 assert(del_count >= -1);
1439 if (del_count && first) {
1441 while (--del_count && OpHAS_SIBLING(last_del))
1442 last_del = OpSIBLING(last_del);
1443 rest = OpSIBLING(last_del);
1444 OpLASTSIB_set(last_del, NULL);
1451 while (OpHAS_SIBLING(last_ins))
1452 last_ins = OpSIBLING(last_ins);
1453 OpMAYBESIB_set(last_ins, rest, NULL);
1459 OpMAYBESIB_set(start, insert, NULL);
1463 cLISTOPx(parent)->op_first = insert;
1465 parent->op_flags |= OPf_KIDS;
1467 parent->op_flags &= ~OPf_KIDS;
1471 /* update op_last etc */
1478 /* ought to use OP_CLASS(parent) here, but that can't handle
1479 * ex-foo OP_NULL ops. Also note that XopENTRYCUSTOM() can't
1481 type = parent->op_type;
1482 if (type == OP_CUSTOM) {
1484 type = XopENTRYCUSTOM(parent, xop_class);
1487 if (type == OP_NULL)
1488 type = parent->op_targ;
1489 type = PL_opargs[type] & OA_CLASS_MASK;
1492 lastop = last_ins ? last_ins : start ? start : NULL;
1493 if ( type == OA_BINOP
1494 || type == OA_LISTOP
1498 cLISTOPx(parent)->op_last = lastop;
1501 OpLASTSIB_set(lastop, parent);
1503 return last_del ? first : NULL;
1506 Perl_croak_nocontext("panic: op_sibling_splice(): NULL parent");
1510 =for apidoc op_parent
1512 Returns the parent OP of C<o>, if it has a parent. Returns C<NULL> otherwise.
1518 Perl_op_parent(OP *o)
1520 PERL_ARGS_ASSERT_OP_PARENT;
1521 while (OpHAS_SIBLING(o))
1523 return o->op_sibparent;
1526 /* replace the sibling following start with a new UNOP, which becomes
1527 * the parent of the original sibling; e.g.
1529 * op_sibling_newUNOP(P, A, unop-args...)
1537 * where U is the new UNOP.
1539 * parent and start args are the same as for op_sibling_splice();
1540 * type and flags args are as newUNOP().
1542 * Returns the new UNOP.
1546 S_op_sibling_newUNOP(pTHX_ OP *parent, OP *start, I32 type, I32 flags)
1550 kid = op_sibling_splice(parent, start, 1, NULL);
1551 newop = newUNOP(type, flags, kid);
1552 op_sibling_splice(parent, start, 0, newop);
1557 /* lowest-level newLOGOP-style function - just allocates and populates
1558 * the struct. Higher-level stuff should be done by S_new_logop() /
1559 * newLOGOP(). This function exists mainly to avoid op_first assignment
1560 * being spread throughout this file.
1564 Perl_alloc_LOGOP(pTHX_ I32 type, OP *first, OP* other)
1569 NewOp(1101, logop, 1, LOGOP);
1570 OpTYPE_set(logop, type);
1571 logop->op_first = first;
1572 logop->op_other = other;
1574 logop->op_flags = OPf_KIDS;
1575 while (kid && OpHAS_SIBLING(kid))
1576 kid = OpSIBLING(kid);
1578 OpLASTSIB_set(kid, (OP*)logop);
1583 /* Contextualizers */
1586 =for apidoc op_contextualize
1588 Applies a syntactic context to an op tree representing an expression.
1589 C<o> is the op tree, and C<context> must be C<G_SCALAR>, C<G_ARRAY>,
1590 or C<G_VOID> to specify the context to apply. The modified op tree
1597 Perl_op_contextualize(pTHX_ OP *o, I32 context)
1599 PERL_ARGS_ASSERT_OP_CONTEXTUALIZE;
1601 case G_SCALAR: return scalar(o);
1602 case G_ARRAY: return list(o);
1603 case G_VOID: return scalarvoid(o);
1605 Perl_croak(aTHX_ "panic: op_contextualize bad context %ld",
1612 =for apidoc op_linklist
1613 This function is the implementation of the L</LINKLIST> macro. It should
1614 not be called directly.
1621 Perl_op_linklist(pTHX_ OP *o)
1628 PERL_ARGS_ASSERT_OP_LINKLIST;
1631 /* Descend down the tree looking for any unprocessed subtrees to
1634 if (o->op_flags & OPf_KIDS) {
1635 o = cUNOPo->op_first;
1638 o->op_next = o; /* leaf node; link to self initially */
1641 /* if we're at the top level, there either weren't any children
1642 * to process, or we've worked our way back to the top. */
1646 /* o is now processed. Next, process any sibling subtrees */
1648 if (OpHAS_SIBLING(o)) {
1653 /* Done all the subtrees at this level. Go back up a level and
1654 * link the parent in with all its (processed) children.
1657 o = o->op_sibparent;
1658 assert(!o->op_next);
1659 prevp = &(o->op_next);
1660 kid = (o->op_flags & OPf_KIDS) ? cUNOPo->op_first : NULL;
1662 *prevp = kid->op_next;
1663 prevp = &(kid->op_next);
1664 kid = OpSIBLING(kid);
1672 S_scalarkids(pTHX_ OP *o)
1674 if (o && o->op_flags & OPf_KIDS) {
1676 for (kid = cLISTOPo->op_first; kid; kid = OpSIBLING(kid))
1683 S_scalarboolean(pTHX_ OP *o)
1685 PERL_ARGS_ASSERT_SCALARBOOLEAN;
1687 if ((o->op_type == OP_SASSIGN && cBINOPo->op_first->op_type == OP_CONST &&
1688 !(cBINOPo->op_first->op_flags & OPf_SPECIAL)) ||
1689 (o->op_type == OP_NOT && cUNOPo->op_first->op_type == OP_SASSIGN &&
1690 cBINOPx(cUNOPo->op_first)->op_first->op_type == OP_CONST &&
1691 !(cBINOPx(cUNOPo->op_first)->op_first->op_flags & OPf_SPECIAL))) {
1692 if (ckWARN(WARN_SYNTAX)) {
1693 const line_t oldline = CopLINE(PL_curcop);
1695 if (PL_parser && PL_parser->copline != NOLINE) {
1696 /* This ensures that warnings are reported at the first line
1697 of the conditional, not the last. */
1698 CopLINE_set(PL_curcop, PL_parser->copline);
1700 Perl_warner(aTHX_ packWARN(WARN_SYNTAX), "Found = in conditional, should be ==");
1701 CopLINE_set(PL_curcop, oldline);
1708 S_op_varname_subscript(pTHX_ const OP *o, int subscript_type)
1711 assert(o->op_type == OP_PADAV || o->op_type == OP_RV2AV ||
1712 o->op_type == OP_PADHV || o->op_type == OP_RV2HV);
1714 const char funny = o->op_type == OP_PADAV
1715 || o->op_type == OP_RV2AV ? '@' : '%';
1716 if (o->op_type == OP_RV2AV || o->op_type == OP_RV2HV) {
1718 if (cUNOPo->op_first->op_type != OP_GV
1719 || !(gv = cGVOPx_gv(cUNOPo->op_first)))
1721 return varname(gv, funny, 0, NULL, 0, subscript_type);
1724 varname(MUTABLE_GV(PL_compcv), funny, o->op_targ, NULL, 0, subscript_type);
1729 S_op_varname(pTHX_ const OP *o)
1731 return S_op_varname_subscript(aTHX_ o, 1);
1735 S_op_pretty(pTHX_ const OP *o, SV **retsv, const char **retpv)
1736 { /* or not so pretty :-) */
1737 if (o->op_type == OP_CONST) {
1739 if (SvPOK(*retsv)) {
1741 *retsv = sv_newmortal();
1742 pv_pretty(*retsv, SvPVX_const(sv), SvCUR(sv), 32, NULL, NULL,
1743 PERL_PV_PRETTY_DUMP |PERL_PV_ESCAPE_UNI_DETECT);
1745 else if (!SvOK(*retsv))
1748 else *retpv = "...";
1752 S_scalar_slice_warning(pTHX_ const OP *o)
1755 const bool h = o->op_type == OP_HSLICE
1756 || (o->op_type == OP_NULL && o->op_targ == OP_HSLICE);
1762 SV *keysv = NULL; /* just to silence compiler warnings */
1763 const char *key = NULL;
1765 if (!(o->op_private & OPpSLICEWARNING))
1767 if (PL_parser && PL_parser->error_count)
1768 /* This warning can be nonsensical when there is a syntax error. */
1771 kid = cLISTOPo->op_first;
1772 kid = OpSIBLING(kid); /* get past pushmark */
1773 /* weed out false positives: any ops that can return lists */
1774 switch (kid->op_type) {
1800 /* Don't warn if we have a nulled list either. */
1801 if (kid->op_type == OP_NULL && kid->op_targ == OP_LIST)
1804 assert(OpSIBLING(kid));
1805 name = S_op_varname(aTHX_ OpSIBLING(kid));
1806 if (!name) /* XS module fiddling with the op tree */
1808 S_op_pretty(aTHX_ kid, &keysv, &key);
1809 assert(SvPOK(name));
1810 sv_chop(name,SvPVX(name)+1);
1812 /* diag_listed_as: Scalar value @%s[%s] better written as $%s[%s] */
1813 Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
1814 "Scalar value @%" SVf "%c%s%c better written as $%" SVf
1816 SVfARG(name), lbrack, key, rbrack, SVfARG(name),
1817 lbrack, key, rbrack);
1819 /* diag_listed_as: Scalar value @%s[%s] better written as $%s[%s] */
1820 Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
1821 "Scalar value @%" SVf "%c%" SVf "%c better written as $%"
1823 SVfARG(name), lbrack, SVfARG(keysv), rbrack,
1824 SVfARG(name), lbrack, SVfARG(keysv), rbrack);
1829 /* apply scalar context to the o subtree */
1832 Perl_scalar(pTHX_ OP *o)
1837 OP *next_kid = NULL; /* what op (if any) to process next */
1840 /* assumes no premature commitment */
1841 if (!o || (PL_parser && PL_parser->error_count)
1842 || (o->op_flags & OPf_WANT)
1843 || o->op_type == OP_RETURN)
1848 o->op_flags = (o->op_flags & ~OPf_WANT) | OPf_WANT_SCALAR;
1850 switch (o->op_type) {
1852 scalar(cBINOPo->op_first);
1853 /* convert what initially looked like a list repeat into a
1854 * scalar repeat, e.g. $s = (1) x $n
1856 if (o->op_private & OPpREPEAT_DOLIST) {
1857 kid = cLISTOPx(cUNOPo->op_first)->op_first;
1858 assert(kid->op_type == OP_PUSHMARK);
1859 if (OpHAS_SIBLING(kid) && !OpHAS_SIBLING(OpSIBLING(kid))) {
1860 op_null(cLISTOPx(cUNOPo->op_first)->op_first);
1861 o->op_private &=~ OPpREPEAT_DOLIST;
1869 /* impose scalar context on everything except the condition */
1870 next_kid = OpSIBLING(cUNOPo->op_first);
1874 if (o->op_flags & OPf_KIDS)
1875 next_kid = cUNOPo->op_first; /* do all kids */
1878 /* the children of these ops are usually a list of statements,
1879 * except the leaves, whose first child is a corresponding enter
1884 kid = cLISTOPo->op_first;
1888 kid = cLISTOPo->op_first;
1890 kid = OpSIBLING(kid);
1893 OP *sib = OpSIBLING(kid);
1894 /* Apply void context to all kids except the last, which
1895 * is scalar (ignoring a trailing ex-nextstate in determining
1896 * if it's the last kid). E.g.
1897 * $scalar = do { void; void; scalar }
1898 * Except that 'when's are always scalar, e.g.
1899 * $scalar = do { given(..) {
1900 * when (..) { scalar }
1901 * when (..) { scalar }
1906 || ( !OpHAS_SIBLING(sib)
1907 && sib->op_type == OP_NULL
1908 && ( sib->op_targ == OP_NEXTSTATE
1909 || sib->op_targ == OP_DBSTATE )
1913 /* tail call optimise calling scalar() on the last kid */
1917 else if (kid->op_type == OP_LEAVEWHEN)
1923 NOT_REACHED; /* NOTREACHED */
1927 Perl_ck_warner(aTHX_ packWARN(WARN_VOID), "Useless use of sort in scalar context");
1933 /* Warn about scalar context */
1934 const char lbrack = o->op_type == OP_KVHSLICE ? '{' : '[';
1935 const char rbrack = o->op_type == OP_KVHSLICE ? '}' : ']';
1938 const char *key = NULL;
1940 /* This warning can be nonsensical when there is a syntax error. */
1941 if (PL_parser && PL_parser->error_count)
1944 if (!ckWARN(WARN_SYNTAX)) break;
1946 kid = cLISTOPo->op_first;
1947 kid = OpSIBLING(kid); /* get past pushmark */
1948 assert(OpSIBLING(kid));
1949 name = S_op_varname(aTHX_ OpSIBLING(kid));
1950 if (!name) /* XS module fiddling with the op tree */
1952 S_op_pretty(aTHX_ kid, &keysv, &key);
1953 assert(SvPOK(name));
1954 sv_chop(name,SvPVX(name)+1);
1956 /* diag_listed_as: %%s[%s] in scalar context better written as $%s[%s] */
1957 Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
1958 "%%%" SVf "%c%s%c in scalar context better written "
1959 "as $%" SVf "%c%s%c",
1960 SVfARG(name), lbrack, key, rbrack, SVfARG(name),
1961 lbrack, key, rbrack);
1963 /* diag_listed_as: %%s[%s] in scalar context better written as $%s[%s] */
1964 Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
1965 "%%%" SVf "%c%" SVf "%c in scalar context better "
1966 "written as $%" SVf "%c%" SVf "%c",
1967 SVfARG(name), lbrack, SVfARG(keysv), rbrack,
1968 SVfARG(name), lbrack, SVfARG(keysv), rbrack);
1972 /* If next_kid is set, someone in the code above wanted us to process
1973 * that kid and all its remaining siblings. Otherwise, work our way
1974 * back up the tree */
1978 return top_op; /* at top; no parents/siblings to try */
1979 if (OpHAS_SIBLING(o))
1980 next_kid = o->op_sibparent;
1982 o = o->op_sibparent; /*try parent's next sibling */
1983 switch (o->op_type) {
1989 /* should really restore PL_curcop to its old value, but
1990 * setting it to PL_compiling is better than do nothing */
1991 PL_curcop = &PL_compiling;
2000 /* apply void context to the optree arg */
2003 Perl_scalarvoid(pTHX_ OP *arg)
2010 PERL_ARGS_ASSERT_SCALARVOID;
2014 SV *useless_sv = NULL;
2015 const char* useless = NULL;
2016 OP * next_kid = NULL;
2018 if (o->op_type == OP_NEXTSTATE
2019 || o->op_type == OP_DBSTATE
2020 || (o->op_type == OP_NULL && (o->op_targ == OP_NEXTSTATE
2021 || o->op_targ == OP_DBSTATE)))
2022 PL_curcop = (COP*)o; /* for warning below */
2024 /* assumes no premature commitment */
2025 want = o->op_flags & OPf_WANT;
2026 if ((want && want != OPf_WANT_SCALAR)
2027 || (PL_parser && PL_parser->error_count)
2028 || o->op_type == OP_RETURN || o->op_type == OP_REQUIRE || o->op_type == OP_LEAVEWHEN)
2033 if ((o->op_private & OPpTARGET_MY)
2034 && (PL_opargs[o->op_type] & OA_TARGLEX))/* OPp share the meaning */
2036 /* newASSIGNOP has already applied scalar context, which we
2037 leave, as if this op is inside SASSIGN. */
2041 o->op_flags = (o->op_flags & ~OPf_WANT) | OPf_WANT_VOID;
2043 switch (o->op_type) {
2045 if (!(PL_opargs[o->op_type] & OA_FOLDCONST))
2049 if (o->op_flags & OPf_STACKED)
2051 if (o->op_type == OP_REPEAT)
2052 scalar(cBINOPo->op_first);
2055 if ((o->op_flags & OPf_STACKED) &&
2056 !(o->op_private & OPpCONCAT_NESTED))
2060 if (o->op_private == 4)
2095 case OP_GETSOCKNAME:
2096 case OP_GETPEERNAME:
2101 case OP_GETPRIORITY:
2126 useless = OP_DESC(o);
2136 case OP_AELEMFAST_LEX:
2140 if (!(o->op_private & (OPpLVAL_INTRO|OPpOUR_INTRO)))
2141 /* Otherwise it's "Useless use of grep iterator" */
2142 useless = OP_DESC(o);
2146 if (!(o->op_private & OPpSPLIT_ASSIGN))
2147 useless = OP_DESC(o);
2151 kid = cUNOPo->op_first;
2152 if (kid->op_type != OP_MATCH && kid->op_type != OP_SUBST &&
2153 kid->op_type != OP_TRANS && kid->op_type != OP_TRANSR) {
2156 useless = "negative pattern binding (!~)";
2160 if (cPMOPo->op_pmflags & PMf_NONDESTRUCT)
2161 useless = "non-destructive substitution (s///r)";
2165 useless = "non-destructive transliteration (tr///r)";
2172 if (!(o->op_private & (OPpLVAL_INTRO|OPpOUR_INTRO)) &&
2173 (!OpHAS_SIBLING(o) || OpSIBLING(o)->op_type != OP_READLINE))
2174 useless = "a variable";
2179 if (cSVOPo->op_private & OPpCONST_STRICT)
2180 no_bareword_allowed(o);
2182 if (ckWARN(WARN_VOID)) {
2184 /* don't warn on optimised away booleans, eg
2185 * use constant Foo, 5; Foo || print; */
2186 if (cSVOPo->op_private & OPpCONST_SHORTCIRCUIT)
2188 /* the constants 0 and 1 are permitted as they are
2189 conventionally used as dummies in constructs like
2190 1 while some_condition_with_side_effects; */
2191 else if (SvNIOK(sv) && ((nv = SvNV(sv)) == 0.0 || nv == 1.0))
2193 else if (SvPOK(sv)) {
2194 SV * const dsv = newSVpvs("");
2196 = Perl_newSVpvf(aTHX_
2198 pv_pretty(dsv, SvPVX_const(sv),
2199 SvCUR(sv), 32, NULL, NULL,
2201 | PERL_PV_ESCAPE_NOCLEAR
2202 | PERL_PV_ESCAPE_UNI_DETECT));
2203 SvREFCNT_dec_NN(dsv);
2205 else if (SvOK(sv)) {
2206 useless_sv = Perl_newSVpvf(aTHX_ "a constant (%" SVf ")", SVfARG(sv));
2209 useless = "a constant (undef)";
2212 op_null(o); /* don't execute or even remember it */
2216 OpTYPE_set(o, OP_PREINC); /* pre-increment is faster */
2220 OpTYPE_set(o, OP_PREDEC); /* pre-decrement is faster */
2224 OpTYPE_set(o, OP_I_PREINC); /* pre-increment is faster */
2228 OpTYPE_set(o, OP_I_PREDEC); /* pre-decrement is faster */
2233 UNOP *refgen, *rv2cv;
2236 if ((o->op_private & ~OPpASSIGN_BACKWARDS) != 2)
2239 rv2gv = ((BINOP *)o)->op_last;
2240 if (!rv2gv || rv2gv->op_type != OP_RV2GV)
2243 refgen = (UNOP *)((BINOP *)o)->op_first;
2245 if (!refgen || (refgen->op_type != OP_REFGEN
2246 && refgen->op_type != OP_SREFGEN))
2249 exlist = (LISTOP *)refgen->op_first;
2250 if (!exlist || exlist->op_type != OP_NULL
2251 || exlist->op_targ != OP_LIST)
2254 if (exlist->op_first->op_type != OP_PUSHMARK
2255 && exlist->op_first != exlist->op_last)
2258 rv2cv = (UNOP*)exlist->op_last;
2260 if (rv2cv->op_type != OP_RV2CV)
2263 assert ((rv2gv->op_private & OPpDONT_INIT_GV) == 0);
2264 assert ((o->op_private & OPpASSIGN_CV_TO_GV) == 0);
2265 assert ((rv2cv->op_private & OPpMAY_RETURN_CONSTANT) == 0);
2267 o->op_private |= OPpASSIGN_CV_TO_GV;
2268 rv2gv->op_private |= OPpDONT_INIT_GV;
2269 rv2cv->op_private |= OPpMAY_RETURN_CONSTANT;
2281 kid = cLOGOPo->op_first;
2282 if (kid->op_type == OP_NOT
2283 && (kid->op_flags & OPf_KIDS)) {
2284 if (o->op_type == OP_AND) {
2285 OpTYPE_set(o, OP_OR);
2287 OpTYPE_set(o, OP_AND);
2297 next_kid = OpSIBLING(cUNOPo->op_first);
2301 if (o->op_flags & OPf_STACKED)
2308 if (!(o->op_flags & OPf_KIDS))
2319 next_kid = cLISTOPo->op_first;
2322 /* If the first kid after pushmark is something that the padrange
2323 optimisation would reject, then null the list and the pushmark.
2325 if ((kid = cLISTOPo->op_first)->op_type == OP_PUSHMARK
2326 && ( !(kid = OpSIBLING(kid))
2327 || ( kid->op_type != OP_PADSV
2328 && kid->op_type != OP_PADAV
2329 && kid->op_type != OP_PADHV)
2330 || kid->op_private & ~OPpLVAL_INTRO
2331 || !(kid = OpSIBLING(kid))
2332 || ( kid->op_type != OP_PADSV
2333 && kid->op_type != OP_PADAV
2334 && kid->op_type != OP_PADHV)
2335 || kid->op_private & ~OPpLVAL_INTRO)
2337 op_null(cUNOPo->op_first); /* NULL the pushmark */
2338 op_null(o); /* NULL the list */
2350 /* mortalise it, in case warnings are fatal. */
2351 Perl_ck_warner(aTHX_ packWARN(WARN_VOID),
2352 "Useless use of %" SVf " in void context",
2353 SVfARG(sv_2mortal(useless_sv)));
2356 Perl_ck_warner(aTHX_ packWARN(WARN_VOID),
2357 "Useless use of %s in void context",
2362 /* if a kid hasn't been nominated to process, continue with the
2363 * next sibling, or if no siblings left, go back to the parent's
2364 * siblings and so on
2368 return arg; /* at top; no parents/siblings to try */
2369 if (OpHAS_SIBLING(o))
2370 next_kid = o->op_sibparent;
2372 o = o->op_sibparent; /*try parent's next sibling */
2382 S_listkids(pTHX_ OP *o)
2384 if (o && o->op_flags & OPf_KIDS) {
2386 for (kid = cLISTOPo->op_first; kid; kid = OpSIBLING(kid))
2393 /* apply list context to the o subtree */
2396 Perl_list(pTHX_ OP *o)
2401 OP *next_kid = NULL; /* what op (if any) to process next */
2405 /* assumes no premature commitment */
2406 if (!o || (o->op_flags & OPf_WANT)
2407 || (PL_parser && PL_parser->error_count)
2408 || o->op_type == OP_RETURN)
2413 if ((o->op_private & OPpTARGET_MY)
2414 && (PL_opargs[o->op_type] & OA_TARGLEX))/* OPp share the meaning */
2416 goto do_next; /* As if inside SASSIGN */
2419 o->op_flags = (o->op_flags & ~OPf_WANT) | OPf_WANT_LIST;
2421 switch (o->op_type) {
2423 if (o->op_private & OPpREPEAT_DOLIST
2424 && !(o->op_flags & OPf_STACKED))
2426 list(cBINOPo->op_first);
2427 kid = cBINOPo->op_last;
2428 /* optimise away (.....) x 1 */
2429 if (kid->op_type == OP_CONST && SvIOK(kSVOP_sv)
2430 && SvIVX(kSVOP_sv) == 1)
2432 op_null(o); /* repeat */
2433 op_null(cUNOPx(cBINOPo->op_first)->op_first);/* pushmark */
2435 op_free(op_sibling_splice(o, cBINOPo->op_first, 1, NULL));
2443 /* impose list context on everything except the condition */
2444 next_kid = OpSIBLING(cUNOPo->op_first);
2448 if (!(o->op_flags & OPf_KIDS))
2450 /* possibly flatten 1..10 into a constant array */
2451 if (!o->op_next && cUNOPo->op_first->op_type == OP_FLOP) {
2452 list(cBINOPo->op_first);
2453 gen_constant_list(o);
2456 next_kid = cUNOPo->op_first; /* do all kids */
2460 if (cLISTOPo->op_first->op_type == OP_PUSHMARK) {
2461 op_null(cUNOPo->op_first); /* NULL the pushmark */
2462 op_null(o); /* NULL the list */
2464 if (o->op_flags & OPf_KIDS)
2465 next_kid = cUNOPo->op_first; /* do all kids */
2468 /* the children of these ops are usually a list of statements,
2469 * except the leaves, whose first child is a corresponding enter
2473 kid = cLISTOPo->op_first;
2477 kid = cLISTOPo->op_first;
2479 kid = OpSIBLING(kid);
2482 OP *sib = OpSIBLING(kid);
2483 /* Apply void context to all kids except the last, which
2485 * @a = do { void; void; list }
2486 * Except that 'when's are always list context, e.g.
2487 * @a = do { given(..) {
2488 * when (..) { list }
2489 * when (..) { list }
2494 /* tail call optimise calling list() on the last kid */
2498 else if (kid->op_type == OP_LEAVEWHEN)
2504 NOT_REACHED; /* NOTREACHED */
2509 /* If next_kid is set, someone in the code above wanted us to process
2510 * that kid and all its remaining siblings. Otherwise, work our way
2511 * back up the tree */
2515 return top_op; /* at top; no parents/siblings to try */
2516 if (OpHAS_SIBLING(o))
2517 next_kid = o->op_sibparent;
2519 o = o->op_sibparent; /*try parent's next sibling */
2520 switch (o->op_type) {
2526 /* should really restore PL_curcop to its old value, but
2527 * setting it to PL_compiling is better than do nothing */
2528 PL_curcop = &PL_compiling;
2540 S_scalarseq(pTHX_ OP *o)
2543 const OPCODE type = o->op_type;
2545 if (type == OP_LINESEQ || type == OP_SCOPE ||
2546 type == OP_LEAVE || type == OP_LEAVETRY)
2549 for (kid = cLISTOPo->op_first; kid; kid = sib) {
2550 if ((sib = OpSIBLING(kid))
2551 && ( OpHAS_SIBLING(sib) || sib->op_type != OP_NULL
2552 || ( sib->op_targ != OP_NEXTSTATE
2553 && sib->op_targ != OP_DBSTATE )))
2558 PL_curcop = &PL_compiling;
2560 o->op_flags &= ~OPf_PARENS;
2561 if (PL_hints & HINT_BLOCK_SCOPE)
2562 o->op_flags |= OPf_PARENS;
2565 o = newOP(OP_STUB, 0);
2570 S_modkids(pTHX_ OP *o, I32 type)
2572 if (o && o->op_flags & OPf_KIDS) {
2574 for (kid = cLISTOPo->op_first; kid; kid = OpSIBLING(kid))
2575 op_lvalue(kid, type);
2581 /* for a helem/hslice/kvslice, if its a fixed hash, croak on invalid
2582 * const fields. Also, convert CONST keys to HEK-in-SVs.
2583 * rop is the op that retrieves the hash;
2584 * key_op is the first key
2585 * real if false, only check (and possibly croak); don't update op
2589 S_check_hash_fields_and_hekify(pTHX_ UNOP *rop, SVOP *key_op, int real)
2595 /* find the padsv corresponding to $lex->{} or @{$lex}{} */
2597 if (rop->op_first->op_type == OP_PADSV)
2598 /* @$hash{qw(keys here)} */
2599 rop = (UNOP*)rop->op_first;
2601 /* @{$hash}{qw(keys here)} */
2602 if (rop->op_first->op_type == OP_SCOPE
2603 && cLISTOPx(rop->op_first)->op_last->op_type == OP_PADSV)
2605 rop = (UNOP*)cLISTOPx(rop->op_first)->op_last;
2612 lexname = NULL; /* just to silence compiler warnings */
2613 fields = NULL; /* just to silence compiler warnings */
2617 && (lexname = padnamelist_fetch(PL_comppad_name, rop->op_targ),
2618 SvPAD_TYPED(lexname))
2619 && (fields = (GV**)hv_fetchs(PadnameTYPE(lexname), "FIELDS", FALSE))
2620 && isGV(*fields) && GvHV(*fields);
2622 for (; key_op; key_op = (SVOP*)OpSIBLING(key_op)) {
2624 if (key_op->op_type != OP_CONST)
2626 svp = cSVOPx_svp(key_op);
2628 /* make sure it's not a bareword under strict subs */
2629 if (key_op->op_private & OPpCONST_BARE &&
2630 key_op->op_private & OPpCONST_STRICT)
2632 no_bareword_allowed((OP*)key_op);
2635 /* Make the CONST have a shared SV */
2636 if ( !SvIsCOW_shared_hash(sv = *svp)
2637 && SvTYPE(sv) < SVt_PVMG
2643 const char * const key = SvPV_const(sv, *(STRLEN*)&keylen);
2644 SV *nsv = newSVpvn_share(key, SvUTF8(sv) ? -keylen : keylen, 0);
2645 SvREFCNT_dec_NN(sv);
2650 && !hv_fetch_ent(GvHV(*fields), *svp, FALSE, 0))
2652 Perl_croak(aTHX_ "No such class field \"%" SVf "\" "
2653 "in variable %" PNf " of type %" HEKf,
2654 SVfARG(*svp), PNfARG(lexname),
2655 HEKfARG(HvNAME_HEK(PadnameTYPE(lexname))));
2660 /* info returned by S_sprintf_is_multiconcatable() */
2662 struct sprintf_ismc_info {
2663 SSize_t nargs; /* num of args to sprintf (not including the format) */
2664 char *start; /* start of raw format string */
2665 char *end; /* bytes after end of raw format string */
2666 STRLEN total_len; /* total length (in bytes) of format string, not
2667 including '%s' and half of '%%' */
2668 STRLEN variant; /* number of bytes by which total_len_p would grow
2669 if upgraded to utf8 */
2670 bool utf8; /* whether the format is utf8 */
2674 /* is the OP_SPRINTF o suitable for converting into a multiconcat op?
2675 * i.e. its format argument is a const string with only '%s' and '%%'
2676 * formats, and the number of args is known, e.g.
2677 * sprintf "a=%s f=%s", $a[0], scalar(f());
2679 * sprintf "i=%d a=%s f=%s", $i, @a, f();
2681 * If successful, the sprintf_ismc_info struct pointed to by info will be
2686 S_sprintf_is_multiconcatable(pTHX_ OP *o,struct sprintf_ismc_info *info)
2688 OP *pm, *constop, *kid;
2691 SSize_t nargs, nformats;
2692 STRLEN cur, total_len, variant;
2695 /* if sprintf's behaviour changes, die here so that someone
2696 * can decide whether to enhance this function or skip optimising
2697 * under those new circumstances */
2698 assert(!(o->op_flags & OPf_STACKED));
2699 assert(!(PL_opargs[OP_SPRINTF] & OA_TARGLEX));
2700 assert(!(o->op_private & ~OPpARG4_MASK));
2702 pm = cUNOPo->op_first;
2703 if (pm->op_type != OP_PUSHMARK) /* weird coreargs stuff */
2705 constop = OpSIBLING(pm);
2706 if (!constop || constop->op_type != OP_CONST)
2708 sv = cSVOPx_sv(constop);
2709 if (SvMAGICAL(sv) || !SvPOK(sv))
2715 /* Scan format for %% and %s and work out how many %s there are.
2716 * Abandon if other format types are found.
2723 for (p = s; p < e; p++) {
2726 if (!UTF8_IS_INVARIANT(*p))
2732 return FALSE; /* lone % at end gives "Invalid conversion" */
2741 if (!nformats || nformats > PERL_MULTICONCAT_MAXARG)
2744 utf8 = cBOOL(SvUTF8(sv));
2748 /* scan args; they must all be in scalar cxt */
2751 kid = OpSIBLING(constop);
2754 if ((kid->op_flags & OPf_WANT) != OPf_WANT_SCALAR)
2757 kid = OpSIBLING(kid);
2760 if (nargs != nformats)
2761 return FALSE; /* e.g. sprintf("%s%s", $a); */
2764 info->nargs = nargs;
2767 info->total_len = total_len;
2768 info->variant = variant;
2776 /* S_maybe_multiconcat():
2778 * given an OP_STRINGIFY, OP_SASSIGN, OP_CONCAT or OP_SPRINTF op, possibly
2779 * convert it (and its children) into an OP_MULTICONCAT. See the code
2780 * comments just before pp_multiconcat() for the full details of what
2781 * OP_MULTICONCAT supports.
2783 * Basically we're looking for an optree with a chain of OP_CONCATS down
2784 * the LHS (or an OP_SPRINTF), with possibly an OP_SASSIGN, and/or
2785 * OP_STRINGIFY, and/or OP_CONCAT acting as '.=' at its head, e.g.
2793 * STRINGIFY -- PADSV[$x]
2796 * ex-PUSHMARK -- CONCAT/S
2798 * CONCAT/S -- PADSV[$d]
2800 * CONCAT -- CONST["-"]
2802 * PADSV[$a] -- PADSV[$b]
2804 * Note that at this stage the OP_SASSIGN may have already been optimised
2805 * away with OPpTARGET_MY set on the OP_STRINGIFY or OP_CONCAT.
2809 S_maybe_multiconcat(pTHX_ OP *o)
2812 OP *lastkidop; /* the right-most of any kids unshifted onto o */
2813 OP *topop; /* the top-most op in the concat tree (often equals o,
2814 unless there are assign/stringify ops above it */
2815 OP *parentop; /* the parent op of topop (or itself if no parent) */
2816 OP *targmyop; /* the op (if any) with the OPpTARGET_MY flag */
2817 OP *targetop; /* the op corresponding to target=... or target.=... */
2818 OP *stringop; /* the OP_STRINGIFY op, if any */
2819 OP *nextop; /* used for recreating the op_next chain without consts */
2820 OP *kid; /* general-purpose op pointer */
2822 UNOP_AUX_item *lenp;
2823 char *const_str, *p;
2824 struct sprintf_ismc_info sprintf_info;
2826 /* store info about each arg in args[];
2827 * toparg is the highest used slot; argp is a general
2828 * pointer to args[] slots */
2830 void *p; /* initially points to const sv (or null for op);
2831 later, set to SvPV(constsv), with ... */
2832 STRLEN len; /* ... len set to SvPV(..., len) */
2833 } *argp, *toparg, args[PERL_MULTICONCAT_MAXARG*2 + 1];
2837 SSize_t nadjconst = 0; /* adjacent consts - may be demoted to args */
2840 bool kid_is_last = FALSE; /* most args will be the RHS kid of a concat op;
2841 the last-processed arg will the LHS of one,
2842 as args are processed in reverse order */
2843 U8 stacked_last = 0; /* whether the last seen concat op was STACKED */
2844 STRLEN total_len = 0; /* sum of the lengths of the const segments */
2845 U8 flags = 0; /* what will become the op_flags and ... */
2846 U8 private_flags = 0; /* ... op_private of the multiconcat op */
2847 bool is_sprintf = FALSE; /* we're optimising an sprintf */
2848 bool is_targable = FALSE; /* targetop is an OPpTARGET_MY candidate */
2849 bool prev_was_const = FALSE; /* previous arg was a const */
2851 /* -----------------------------------------------------------------
2854 * Examine the optree non-destructively to determine whether it's
2855 * suitable to be converted into an OP_MULTICONCAT. Accumulate
2856 * information about the optree in args[].
2866 assert( o->op_type == OP_SASSIGN
2867 || o->op_type == OP_CONCAT
2868 || o->op_type == OP_SPRINTF
2869 || o->op_type == OP_STRINGIFY);
2871 Zero(&sprintf_info, 1, struct sprintf_ismc_info);
2873 /* first see if, at the top of the tree, there is an assign,
2874 * append and/or stringify */
2876 if (topop->op_type == OP_SASSIGN) {
2878 if (o->op_ppaddr != PL_ppaddr[OP_SASSIGN])
2880 if (o->op_private & (OPpASSIGN_BACKWARDS|OPpASSIGN_CV_TO_GV))
2882 assert(!(o->op_private & ~OPpARG2_MASK)); /* barf on unknown flags */
2885 topop = cBINOPo->op_first;
2886 targetop = OpSIBLING(topop);
2887 if (!targetop) /* probably some sort of syntax error */
2890 else if ( topop->op_type == OP_CONCAT
2891 && (topop->op_flags & OPf_STACKED)
2892 && (!(topop->op_private & OPpCONCAT_NESTED))
2897 /* OPpTARGET_MY shouldn't be able to be set here. If it is,
2898 * decide what to do about it */
2899 assert(!(o->op_private & OPpTARGET_MY));
2901 /* barf on unknown flags */
2902 assert(!(o->op_private & ~(OPpARG2_MASK|OPpTARGET_MY)));
2903 private_flags |= OPpMULTICONCAT_APPEND;
2904 targetop = cBINOPo->op_first;
2906 topop = OpSIBLING(targetop);
2908 /* $x .= <FOO> gets optimised to rcatline instead */
2909 if (topop->op_type == OP_READLINE)
2914 /* Can targetop (the LHS) if it's a padsv, be be optimised
2915 * away and use OPpTARGET_MY instead?
2917 if ( (targetop->op_type == OP_PADSV)
2918 && !(targetop->op_private & OPpDEREF)
2919 && !(targetop->op_private & OPpPAD_STATE)
2920 /* we don't support 'my $x .= ...' */
2921 && ( o->op_type == OP_SASSIGN
2922 || !(targetop->op_private & OPpLVAL_INTRO))
2927 if (topop->op_type == OP_STRINGIFY) {
2928 if (topop->op_ppaddr != PL_ppaddr[OP_STRINGIFY])
2932 /* barf on unknown flags */
2933 assert(!(o->op_private & ~(OPpARG4_MASK|OPpTARGET_MY)));
2935 if ((topop->op_private & OPpTARGET_MY)) {
2936 if (o->op_type == OP_SASSIGN)
2937 return; /* can't have two assigns */
2941 private_flags |= OPpMULTICONCAT_STRINGIFY;
2943 topop = cBINOPx(topop)->op_first;
2944 assert(OP_TYPE_IS_OR_WAS_NN(topop, OP_PUSHMARK));
2945 topop = OpSIBLING(topop);
2948 if (topop->op_type == OP_SPRINTF) {
2949 if (topop->op_ppaddr != PL_ppaddr[OP_SPRINTF])
2951 if (S_sprintf_is_multiconcatable(aTHX_ topop, &sprintf_info)) {
2952 nargs = sprintf_info.nargs;
2953 total_len = sprintf_info.total_len;
2954 variant = sprintf_info.variant;
2955 utf8 = sprintf_info.utf8;
2957 private_flags |= OPpMULTICONCAT_FAKE;
2959 /* we have an sprintf op rather than a concat optree.
2960 * Skip most of the code below which is associated with
2961 * processing that optree. We also skip phase 2, determining
2962 * whether its cost effective to optimise, since for sprintf,
2963 * multiconcat is *always* faster */
2966 /* note that even if the sprintf itself isn't multiconcatable,
2967 * the expression as a whole may be, e.g. in
2968 * $x .= sprintf("%d",...)
2969 * the sprintf op will be left as-is, but the concat/S op may
2970 * be upgraded to multiconcat
2973 else if (topop->op_type == OP_CONCAT) {
2974 if (topop->op_ppaddr != PL_ppaddr[OP_CONCAT])
2977 if ((topop->op_private & OPpTARGET_MY)) {
2978 if (o->op_type == OP_SASSIGN || targmyop)
2979 return; /* can't have two assigns */
2984 /* Is it safe to convert a sassign/stringify/concat op into
2986 assert((PL_opargs[OP_SASSIGN] & OA_CLASS_MASK) == OA_BINOP);
2987 assert((PL_opargs[OP_CONCAT] & OA_CLASS_MASK) == OA_BINOP);
2988 assert((PL_opargs[OP_STRINGIFY] & OA_CLASS_MASK) == OA_LISTOP);
2989 assert((PL_opargs[OP_SPRINTF] & OA_CLASS_MASK) == OA_LISTOP);
2990 STATIC_ASSERT_STMT( STRUCT_OFFSET(BINOP, op_last)
2991 == STRUCT_OFFSET(UNOP_AUX, op_aux));
2992 STATIC_ASSERT_STMT( STRUCT_OFFSET(LISTOP, op_last)
2993 == STRUCT_OFFSET(UNOP_AUX, op_aux));
2995 /* Now scan the down the tree looking for a series of
2996 * CONCAT/OPf_STACKED ops on the LHS (with the last one not
2997 * stacked). For example this tree:
3002 * CONCAT/STACKED -- EXPR5
3004 * CONCAT/STACKED -- EXPR4
3010 * corresponds to an expression like
3012 * (EXPR1 . EXPR2 . EXPR3 . EXPR4 . EXPR5)
3014 * Record info about each EXPR in args[]: in particular, whether it is
3015 * a stringifiable OP_CONST and if so what the const sv is.
3017 * The reason why the last concat can't be STACKED is the difference
3020 * ((($a .= $a) .= $a) .= $a) .= $a
3023 * $a . $a . $a . $a . $a
3025 * The main difference between the optrees for those two constructs
3026 * is the presence of the last STACKED. As well as modifying $a,
3027 * the former sees the changed $a between each concat, so if $s is
3028 * initially 'a', the first returns 'a' x 16, while the latter returns
3029 * 'a' x 5. And pp_multiconcat can't handle that kind of thing.
3039 if ( kid->op_type == OP_CONCAT
3043 k1 = cUNOPx(kid)->op_first;
3045 /* shouldn't happen except maybe after compile err? */
3049 /* avoid turning (A . B . ($lex = C) ...) into (A . B . C ...) */
3050 if (kid->op_private & OPpTARGET_MY)
3053 stacked_last = (kid->op_flags & OPf_STACKED);
3065 if ( nargs + nadjconst > PERL_MULTICONCAT_MAXARG - 2
3066 || (argp - args + 1) > (PERL_MULTICONCAT_MAXARG*2 + 1) - 2)
3068 /* At least two spare slots are needed to decompose both
3069 * concat args. If there are no slots left, continue to
3070 * examine the rest of the optree, but don't push new values
3071 * on args[]. If the optree as a whole is legal for conversion
3072 * (in particular that the last concat isn't STACKED), then
3073 * the first PERL_MULTICONCAT_MAXARG elements of the optree
3074 * can be converted into an OP_MULTICONCAT now, with the first
3075 * child of that op being the remainder of the optree -
3076 * which may itself later be converted to a multiconcat op
3080 /* the last arg is the rest of the optree */
3085 else if ( argop->op_type == OP_CONST
3086 && ((sv = cSVOPx_sv(argop)))
3087 /* defer stringification until runtime of 'constant'
3088 * things that might stringify variantly, e.g. the radix
3089 * point of NVs, or overloaded RVs */
3090 && (SvPOK(sv) || SvIOK(sv))
3091 && (!SvGMAGICAL(sv))
3094 utf8 |= cBOOL(SvUTF8(sv));
3097 /* this const may be demoted back to a plain arg later;
3098 * make sure we have enough arg slots left */
3100 prev_was_const = !prev_was_const;
3105 prev_was_const = FALSE;
3115 return; /* we don't support ((A.=B).=C)...) */
3117 /* look for two adjacent consts and don't fold them together:
3120 * $o->concat("a")->concat("b")
3123 * (but $o .= "a" . "b" should still fold)
3126 bool seen_nonconst = FALSE;
3127 for (argp = toparg; argp >= args; argp--) {
3128 if (argp->p == NULL) {
3129 seen_nonconst = TRUE;
3135 /* both previous and current arg were constants;
3136 * leave the current OP_CONST as-is */
3144 /* -----------------------------------------------------------------
3147 * At this point we have determined that the optree *can* be converted
3148 * into a multiconcat. Having gathered all the evidence, we now decide
3149 * whether it *should*.
3153 /* we need at least one concat action, e.g.:
3159 * otherwise we could be doing something like $x = "foo", which
3160 * if treated as as a concat, would fail to COW.
3162 if (nargs + nconst + cBOOL(private_flags & OPpMULTICONCAT_APPEND) < 2)
3165 /* Benchmarking seems to indicate that we gain if:
3166 * * we optimise at least two actions into a single multiconcat
3167 * (e.g concat+concat, sassign+concat);
3168 * * or if we can eliminate at least 1 OP_CONST;
3169 * * or if we can eliminate a padsv via OPpTARGET_MY
3173 /* eliminated at least one OP_CONST */
3175 /* eliminated an OP_SASSIGN */
3176 || o->op_type == OP_SASSIGN
3177 /* eliminated an OP_PADSV */
3178 || (!targmyop && is_targable)
3180 /* definitely a net gain to optimise */
3183 /* ... if not, what else? */
3185 /* special-case '$lex1 = expr . $lex1' (where expr isn't lex1):
3186 * multiconcat is faster (due to not creating a temporary copy of
3187 * $lex1), whereas for a general $lex1 = $lex2 . $lex3, concat is
3193 && topop->op_type == OP_CONCAT
3195 PADOFFSET t = targmyop->op_targ;
3196 OP *k1 = cBINOPx(topop)->op_first;
3197 OP *k2 = cBINOPx(topop)->op_last;
3198 if ( k2->op_type == OP_PADSV
3200 && ( k1->op_type != OP_PADSV
3201 || k1->op_targ != t)
3206 /* need at least two concats */
3207 if (nargs + nconst + cBOOL(private_flags & OPpMULTICONCAT_APPEND) < 3)
3212 /* -----------------------------------------------------------------
3215 * At this point the optree has been verified as ok to be optimised
3216 * into an OP_MULTICONCAT. Now start changing things.
3221 /* stringify all const args and determine utf8ness */
3224 for (argp = args; argp <= toparg; argp++) {
3225 SV *sv = (SV*)argp->p;
3227 continue; /* not a const op */
3228 if (utf8 && !SvUTF8(sv))
3229 sv_utf8_upgrade_nomg(sv);
3230 argp->p = SvPV_nomg(sv, argp->len);
3231 total_len += argp->len;
3233 /* see if any strings would grow if converted to utf8 */
3235 variant += variant_under_utf8_count((U8 *) argp->p,
3236 (U8 *) argp->p + argp->len);
3240 /* create and populate aux struct */
3244 aux = (UNOP_AUX_item*)PerlMemShared_malloc(
3245 sizeof(UNOP_AUX_item)
3247 PERL_MULTICONCAT_HEADER_SIZE
3248 + ((nargs + 1) * (variant ? 2 : 1))
3251 const_str = (char *)PerlMemShared_malloc(total_len ? total_len : 1);
3253 /* Extract all the non-const expressions from the concat tree then
3254 * dispose of the old tree, e.g. convert the tree from this:
3258 * STRINGIFY -- TARGET
3260 * ex-PUSHMARK -- CONCAT
3275 * ex-PUSHMARK -- EXPR1 -- EXPR2 -- EXPR3 -- EXPR4 -- EXPR5 -- TARGET
3277 * except that if EXPRi is an OP_CONST, it's discarded.
3279 * During the conversion process, EXPR ops are stripped from the tree
3280 * and unshifted onto o. Finally, any of o's remaining original
3281 * childen are discarded and o is converted into an OP_MULTICONCAT.
3283 * In this middle of this, o may contain both: unshifted args on the
3284 * left, and some remaining original args on the right. lastkidop
3285 * is set to point to the right-most unshifted arg to delineate
3286 * between the two sets.
3291 /* create a copy of the format with the %'s removed, and record
3292 * the sizes of the const string segments in the aux struct */
3294 lenp = aux + PERL_MULTICONCAT_IX_LENGTHS;
3296 p = sprintf_info.start;
3299 for (; p < sprintf_info.end; p++) {
3303 (lenp++)->ssize = q - oldq;
3310 lenp->ssize = q - oldq;
3311 assert((STRLEN)(q - const_str) == total_len);
3313 /* Attach all the args (i.e. the kids of the sprintf) to o (which
3314 * may or may not be topop) The pushmark and const ops need to be
3315 * kept in case they're an op_next entry point.
3317 lastkidop = cLISTOPx(topop)->op_last;
3318 kid = cUNOPx(topop)->op_first; /* pushmark */
3320 op_null(OpSIBLING(kid)); /* const */
3322 kid = op_sibling_splice(topop, NULL, -1, NULL); /* cut all args */
3323 op_sibling_splice(o, NULL, 0, kid); /* and attach to o */
3324 lastkidop->op_next = o;
3329 lenp = aux + PERL_MULTICONCAT_IX_LENGTHS;
3333 /* Concatenate all const strings into const_str.
3334 * Note that args[] contains the RHS args in reverse order, so
3335 * we scan args[] from top to bottom to get constant strings
3338 for (argp = toparg; argp >= args; argp--) {
3340 /* not a const op */
3341 (++lenp)->ssize = -1;
3343 STRLEN l = argp->len;
3344 Copy(argp->p, p, l, char);
3346 if (lenp->ssize == -1)
3357 for (argp = args; argp <= toparg; argp++) {
3358 /* only keep non-const args, except keep the first-in-next-chain
3359 * arg no matter what it is (but nulled if OP_CONST), because it
3360 * may be the entry point to this subtree from the previous
3363 bool last = (argp == toparg);
3366 /* set prev to the sibling *before* the arg to be cut out,
3367 * e.g. when cutting EXPR:
3372 * prev= CONCAT -- EXPR
3375 if (argp == args && kid->op_type != OP_CONCAT) {
3376 /* in e.g. '$x .= f(1)' there's no RHS concat tree
3377 * so the expression to be cut isn't kid->op_last but
3380 /* find the op before kid */
3382 o2 = cUNOPx(parentop)->op_first;
3383 while (o2 && o2 != kid) {
3391 else if (kid == o && lastkidop)
3392 prev = last ? lastkidop : OpSIBLING(lastkidop);
3394 prev = last ? NULL : cUNOPx(kid)->op_first;
3396 if (!argp->p || last) {
3398 OP *aop = op_sibling_splice(kid, prev, 1, NULL);
3399 /* and unshift to front of o */
3400 op_sibling_splice(o, NULL, 0, aop);
3401 /* record the right-most op added to o: later we will
3402 * free anything to the right of it */
3405 aop->op_next = nextop;
3408 /* null the const at start of op_next chain */
3412 nextop = prev->op_next;
3415 /* the last two arguments are both attached to the same concat op */
3416 if (argp < toparg - 1)
3421 /* Populate the aux struct */
3423 aux[PERL_MULTICONCAT_IX_NARGS].ssize = nargs;
3424 aux[PERL_MULTICONCAT_IX_PLAIN_PV].pv = utf8 ? NULL : const_str;
3425 aux[PERL_MULTICONCAT_IX_PLAIN_LEN].ssize = utf8 ? 0 : total_len;
3426 aux[PERL_MULTICONCAT_IX_UTF8_PV].pv = const_str;
3427 aux[PERL_MULTICONCAT_IX_UTF8_LEN].ssize = total_len;
3429 /* if variant > 0, calculate a variant const string and lengths where
3430 * the utf8 version of the string will take 'variant' more bytes than
3434 char *p = const_str;
3435 STRLEN ulen = total_len + variant;
3436 UNOP_AUX_item *lens = aux + PERL_MULTICONCAT_IX_LENGTHS;
3437 UNOP_AUX_item *ulens = lens + (nargs + 1);
3438 char *up = (char*)PerlMemShared_malloc(ulen);
3441 aux[PERL_MULTICONCAT_IX_UTF8_PV].pv = up;
3442 aux[PERL_MULTICONCAT_IX_UTF8_LEN].ssize = ulen;
3444 for (n = 0; n < (nargs + 1); n++) {
3446 char * orig_up = up;
3447 for (i = (lens++)->ssize; i > 0; i--) {
3449 append_utf8_from_native_byte(c, (U8**)&up);
3451 (ulens++)->ssize = (i < 0) ? i : up - orig_up;
3456 /* if there was a top(ish)-level OP_STRINGIFY, we need to keep
3457 * that op's first child - an ex-PUSHMARK - because the op_next of
3458 * the previous op may point to it (i.e. it's the entry point for
3463 ? op_sibling_splice(o, lastkidop, 1, NULL)
3464 : op_sibling_splice(stringop, NULL, 1, NULL);
3465 assert(OP_TYPE_IS_OR_WAS_NN(pmop, OP_PUSHMARK));
3466 op_sibling_splice(o, NULL, 0, pmop);
3473 * target .= A.B.C...
3479 if (o->op_type == OP_SASSIGN) {
3480 /* Move the target subtree from being the last of o's children
3481 * to being the last of o's preserved children.
3482 * Note the difference between 'target = ...' and 'target .= ...':
3483 * for the former, target is executed last; for the latter,
3486 kid = OpSIBLING(lastkidop);
3487 op_sibling_splice(o, kid, 1, NULL); /* cut target op */
3488 op_sibling_splice(o, lastkidop, 0, targetop); /* and paste */
3489 lastkidop->op_next = kid->op_next;
3490 lastkidop = targetop;
3493 /* Move the target subtree from being the first of o's
3494 * original children to being the first of *all* o's children.
3497 op_sibling_splice(o, lastkidop, 1, NULL); /* cut target op */
3498 op_sibling_splice(o, NULL, 0, targetop); /* and paste*/
3501 /* if the RHS of .= doesn't contain a concat (e.g.
3502 * $x .= "foo"), it gets missed by the "strip ops from the
3503 * tree and add to o" loop earlier */
3504 assert(topop->op_type != OP_CONCAT);
3506 /* in e.g. $x .= "$y", move the $y expression
3507 * from being a child of OP_STRINGIFY to being the
3508 * second child of the OP_CONCAT
3510 assert(cUNOPx(stringop)->op_first == topop);
3511 op_sibling_splice(stringop, NULL, 1, NULL);
3512 op_sibling_splice(o, cUNOPo->op_first, 0, topop);
3514 assert(topop == OpSIBLING(cBINOPo->op_first));
3523 * my $lex = A.B.C...
3526 * The original padsv op is kept but nulled in case it's the
3527 * entry point for the optree (which it will be for
3530 private_flags |= OPpTARGET_MY;
3531 private_flags |= (targetop->op_private & OPpLVAL_INTRO);
3532 o->op_targ = targetop->op_targ;
3533 targetop->op_targ = 0;
3537 flags |= OPf_STACKED;
3539 else if (targmyop) {
3540 private_flags |= OPpTARGET_MY;
3541 if (o != targmyop) {
3542 o->op_targ = targmyop->op_targ;
3543 targmyop->op_targ = 0;
3547 /* detach the emaciated husk of the sprintf/concat optree and free it */
3549 kid = op_sibling_splice(o, lastkidop, 1, NULL);
3555 /* and convert o into a multiconcat */
3557 o->op_flags = (flags|OPf_KIDS|stacked_last
3558 |(o->op_flags & (OPf_WANT|OPf_PARENS)));
3559 o->op_private = private_flags;
3560 o->op_type = OP_MULTICONCAT;
3561 o->op_ppaddr = PL_ppaddr[OP_MULTICONCAT];
3562 cUNOP_AUXo->op_aux = aux;
3566 /* do all the final processing on an optree (e.g. running the peephole
3567 * optimiser on it), then attach it to cv (if cv is non-null)
3571 S_process_optree(pTHX_ CV *cv, OP *optree, OP* start)
3575 /* XXX for some reason, evals, require and main optrees are
3576 * never attached to their CV; instead they just hang off
3577 * PL_main_root + PL_main_start or PL_eval_root + PL_eval_start
3578 * and get manually freed when appropriate */
3580 startp = &CvSTART(cv);
3582 startp = PL_in_eval? &PL_eval_start : &PL_main_start;
3585 optree->op_private |= OPpREFCOUNTED;
3586 OpREFCNT_set(optree, 1);
3587 optimize_optree(optree);
3589 finalize_optree(optree);
3590 S_prune_chain_head(startp);
3593 /* now that optimizer has done its work, adjust pad values */
3594 pad_tidy(optree->op_type == OP_LEAVEWRITE ? padtidy_FORMAT
3595 : CvCLONE(cv) ? padtidy_SUBCLONE : padtidy_SUB);
3601 =for apidoc optimize_optree
3603 This function applies some optimisations to the optree in top-down order.
3604 It is called before the peephole optimizer, which processes ops in
3605 execution order. Note that finalize_optree() also does a top-down scan,
3606 but is called *after* the peephole optimizer.
3612 Perl_optimize_optree(pTHX_ OP* o)
3614 PERL_ARGS_ASSERT_OPTIMIZE_OPTREE;
3617 SAVEVPTR(PL_curcop);
3625 /* helper for optimize_optree() which optimises one op then recurses
3626 * to optimise any children.
3630 S_optimize_op(pTHX_ OP* o)
3634 PERL_ARGS_ASSERT_OPTIMIZE_OP;
3637 OP * next_kid = NULL;
3639 assert(o->op_type != OP_FREED);
3641 switch (o->op_type) {
3644 PL_curcop = ((COP*)o); /* for warnings */
3652 S_maybe_multiconcat(aTHX_ o);
3656 if (cPMOPo->op_pmreplrootu.op_pmreplroot) {
3657 /* we can't assume that op_pmreplroot->op_sibparent == o
3658 * and that it is thus possible to walk back up the tree
3659 * past op_pmreplroot. So, although we try to avoid
3660 * recursing through op trees, do it here. After all,
3661 * there are unlikely to be many nested s///e's within
3662 * the replacement part of a s///e.
3664 optimize_op(cPMOPo->op_pmreplrootu.op_pmreplroot);
3672 if (o->op_flags & OPf_KIDS)
3673 next_kid = cUNOPo->op_first;
3675 /* if a kid hasn't been nominated to process, continue with the
3676 * next sibling, or if no siblings left, go back to the parent's
3677 * siblings and so on
3681 return; /* at top; no parents/siblings to try */
3682 if (OpHAS_SIBLING(o))
3683 next_kid = o->op_sibparent;
3685 o = o->op_sibparent; /*try parent's next sibling */
3688 /* this label not yet used. Goto here if any code above sets
3698 =for apidoc finalize_optree
3700 This function finalizes the optree. Should be called directly after
3701 the complete optree is built. It does some additional
3702 checking which can't be done in the normal C<ck_>xxx functions and makes
3703 the tree thread-safe.
3708 Perl_finalize_optree(pTHX_ OP* o)
3710 PERL_ARGS_ASSERT_FINALIZE_OPTREE;
3713 SAVEVPTR(PL_curcop);
3721 /* Relocate sv to the pad for thread safety.
3722 * Despite being a "constant", the SV is written to,
3723 * for reference counts, sv_upgrade() etc. */
3724 PERL_STATIC_INLINE void
3725 S_op_relocate_sv(pTHX_ SV** svp, PADOFFSET* targp)
3728 PERL_ARGS_ASSERT_OP_RELOCATE_SV;
3730 ix = pad_alloc(OP_CONST, SVf_READONLY);
3731 SvREFCNT_dec(PAD_SVl(ix));
3732 PAD_SETSV(ix, *svp);
3733 /* XXX I don't know how this isn't readonly already. */
3734 if (!SvIsCOW(PAD_SVl(ix))) SvREADONLY_on(PAD_SVl(ix));
3741 =for apidoc traverse_op_tree
3743 Return the next op in a depth-first traversal of the op tree,
3744 returning NULL when the traversal is complete.
3746 The initial call must supply the root of the tree as both top and o.
3748 For now it's static, but it may be exposed to the API in the future.
3754 S_traverse_op_tree(pTHX_ OP *top, OP *o) {
3757 PERL_ARGS_ASSERT_TRAVERSE_OP_TREE;
3759 if ((o->op_flags & OPf_KIDS) && cUNOPo->op_first) {
3760 return cUNOPo->op_first;
3762 else if ((sib = OpSIBLING(o))) {
3766 OP *parent = o->op_sibparent;
3767 assert(!(o->op_moresib));
3768 while (parent && parent != top) {
3769 OP *sib = OpSIBLING(parent);
3772 parent = parent->op_sibparent;
3780 S_finalize_op(pTHX_ OP* o)
3783 PERL_ARGS_ASSERT_FINALIZE_OP;
3786 assert(o->op_type != OP_FREED);
3788 switch (o->op_type) {
3791 PL_curcop = ((COP*)o); /* for warnings */
3794 if (OpHAS_SIBLING(o)) {
3795 OP *sib = OpSIBLING(o);
3796 if (( sib->op_type == OP_NEXTSTATE || sib->op_type == OP_DBSTATE)
3797 && ckWARN(WARN_EXEC)
3798 && OpHAS_SIBLING(sib))
3800 const OPCODE type = OpSIBLING(sib)->op_type;
3801 if (type != OP_EXIT && type != OP_WARN && type != OP_DIE) {
3802 const line_t oldline = CopLINE(PL_curcop);
3803 CopLINE_set(PL_curcop, CopLINE((COP*)sib));
3804 Perl_warner(aTHX_ packWARN(WARN_EXEC),
3805 "Statement unlikely to be reached");
3806 Perl_warner(aTHX_ packWARN(WARN_EXEC),
3807 "\t(Maybe you meant system() when you said exec()?)\n");
3808 CopLINE_set(PL_curcop, oldline);
3815 if ((o->op_private & OPpEARLY_CV) && ckWARN(WARN_PROTOTYPE)) {
3816 GV * const gv = cGVOPo_gv;
3817 if (SvTYPE(gv) == SVt_PVGV && GvCV(gv) && SvPVX_const(GvCV(gv))) {
3818 /* XXX could check prototype here instead of just carping */
3819 SV * const sv = sv_newmortal();
3820 gv_efullname3(sv, gv, NULL);
3821 Perl_warner(aTHX_ packWARN(WARN_PROTOTYPE),
3822 "%" SVf "() called too early to check prototype",
3829 if (cSVOPo->op_private & OPpCONST_STRICT)
3830 no_bareword_allowed(o);
3834 op_relocate_sv(&cSVOPo->op_sv, &o->op_targ);
3839 /* Relocate all the METHOP's SVs to the pad for thread safety. */
3840 case OP_METHOD_NAMED:
3841 case OP_METHOD_SUPER:
3842 case OP_METHOD_REDIR:
3843 case OP_METHOD_REDIR_SUPER:
3844 op_relocate_sv(&cMETHOPx(o)->op_u.op_meth_sv, &o->op_targ);
3853 if ((key_op = cSVOPx(((BINOP*)o)->op_last))->op_type != OP_CONST)
3856 rop = (UNOP*)((BINOP*)o)->op_first;
3861 S_scalar_slice_warning(aTHX_ o);
3865 kid = OpSIBLING(cLISTOPo->op_first);
3866 if (/* I bet there's always a pushmark... */
3867 OP_TYPE_ISNT_AND_WASNT_NN(kid, OP_LIST)
3868 && OP_TYPE_ISNT_NN(kid, OP_CONST))
3873 key_op = (SVOP*)(kid->op_type == OP_CONST
3875 : OpSIBLING(kLISTOP->op_first));
3877 rop = (UNOP*)((LISTOP*)o)->op_last;
3880 if (o->op_private & OPpLVAL_INTRO || rop->op_type != OP_RV2HV)
3882 S_check_hash_fields_and_hekify(aTHX_ rop, key_op, 1);
3886 if (o->op_targ != OP_HSLICE && o->op_targ != OP_ASLICE)
3890 S_scalar_slice_warning(aTHX_ o);
3894 if (cPMOPo->op_pmreplrootu.op_pmreplroot)
3895 finalize_op(cPMOPo->op_pmreplrootu.op_pmreplroot);
3903 if (o->op_flags & OPf_KIDS) {
3906 /* check that op_last points to the last sibling, and that
3907 * the last op_sibling/op_sibparent field points back to the
3908 * parent, and that the only ops with KIDS are those which are
3909 * entitled to them */
3910 U32 type = o->op_type;
3914 if (type == OP_NULL) {
3916 /* ck_glob creates a null UNOP with ex-type GLOB
3917 * (which is a list op. So pretend it wasn't a listop */
3918 if (type == OP_GLOB)
3921 family = PL_opargs[type] & OA_CLASS_MASK;
3923 has_last = ( family == OA_BINOP
3924 || family == OA_LISTOP
3925 || family == OA_PMOP
3926 || family == OA_LOOP
3928 assert( has_last /* has op_first and op_last, or ...
3929 ... has (or may have) op_first: */
3930 || family == OA_UNOP
3931 || family == OA_UNOP_AUX
3932 || family == OA_LOGOP
3933 || family == OA_BASEOP_OR_UNOP
3934 || family == OA_FILESTATOP
3935 || family == OA_LOOPEXOP
3936 || family == OA_METHOP
3937 || type == OP_CUSTOM
3938 || type == OP_NULL /* new_logop does this */
3941 for (kid = cUNOPo->op_first; kid; kid = OpSIBLING(kid)) {
3942 if (!OpHAS_SIBLING(kid)) {
3944 assert(kid == cLISTOPo->op_last);
3945 assert(kid->op_sibparent == o);
3950 } while (( o = traverse_op_tree(top, o)) != NULL);
3954 S_mark_padname_lvalue(pTHX_ PADNAME *pn)
3957 PadnameLVALUE_on(pn);
3958 while (PadnameOUTER(pn) && PARENT_PAD_INDEX(pn)) {
3960 /* RT #127786: cv can be NULL due to an eval within the DB package
3961 * called from an anon sub - anon subs don't have CvOUTSIDE() set
3962 * unless they contain an eval, but calling eval within DB
3963 * pretends the eval was done in the caller's scope.
3967 assert(CvPADLIST(cv));
3969 PadlistNAMESARRAY(CvPADLIST(cv))[PARENT_PAD_INDEX(pn)];
3970 assert(PadnameLEN(pn));
3971 PadnameLVALUE_on(pn);
3976 S_vivifies(const OPCODE type)
3979 case OP_RV2AV: case OP_ASLICE:
3980 case OP_RV2HV: case OP_KVASLICE:
3981 case OP_RV2SV: case OP_HSLICE:
3982 case OP_AELEMFAST: case OP_KVHSLICE:
3991 /* apply lvalue reference (aliasing) context to the optree o.
3994 * o would be the list ($x,$y) and type would be OP_AASSIGN.
3995 * It may descend and apply this to children too, for example in
3996 * \( $cond ? $x, $y) = (...)
4000 S_lvref(pTHX_ OP *o, I32 type)
4007 switch (o->op_type) {
4009 o = OpSIBLING(cUNOPo->op_first);
4016 if (cUNOPo->op_first->op_type != OP_GV) goto badref;
4017 o->op_flags |= OPf_STACKED;
4018 if (o->op_flags & OPf_PARENS) {
4019 if (o->op_private & OPpLVAL_INTRO) {
4020 yyerror(Perl_form(aTHX_ "Can't modify reference to "
4021 "localized parenthesized array in list assignment"));
4025 OpTYPE_set(o, OP_LVAVREF);
4026 o->op_private &= OPpLVAL_INTRO|OPpPAD_STATE;
4027 o->op_flags |= OPf_MOD|OPf_REF;
4030 o->op_private |= OPpLVREF_AV;
4034 kid = cUNOPo->op_first;
4035 if (kid->op_type == OP_NULL)
4036 kid = cUNOPx(OpSIBLING(kUNOP->op_first))
4038 o->op_private = OPpLVREF_CV;
4039 if (kid->op_type == OP_GV)
4040 o->op_flags |= OPf_STACKED;
4041 else if (kid->op_type == OP_PADCV) {
4042 o->op_targ = kid->op_targ;
4044 op_free(cUNOPo->op_first);
4045 cUNOPo->op_first = NULL;
4046 o->op_flags &=~ OPf_KIDS;
4052 if (o->op_flags & OPf_PARENS) {
4054 yyerror(Perl_form(aTHX_ "Can't modify reference to "
4055 "parenthesized hash in list assignment"));
4058 o->op_private |= OPpLVREF_HV;
4062 if (cUNOPo->op_first->op_type != OP_GV) goto badref;
4063 o->op_flags |= OPf_STACKED;
4067 if (o->op_flags & OPf_PARENS) goto parenhash;
4068 o->op_private |= OPpLVREF_HV;
4071 PAD_COMPNAME_GEN_set(o->op_targ, PERL_INT_MAX);
4075 PAD_COMPNAME_GEN_set(o->op_targ, PERL_INT_MAX);
4076 if (o->op_flags & OPf_PARENS) goto slurpy;
4077 o->op_private |= OPpLVREF_AV;
4082 o->op_private |= OPpLVREF_ELEM;
4083 o->op_flags |= OPf_STACKED;
4088 OpTYPE_set(o, OP_LVREFSLICE);
4089 o->op_private &= OPpLVAL_INTRO;
4093 if (o->op_flags & OPf_SPECIAL) /* do BLOCK */
4095 else if (!(o->op_flags & OPf_KIDS))
4098 /* the code formerly only recursed into the first child of
4099 * a non ex-list OP_NULL. if we ever encounter such a null op with
4100 * more than one child, need to decide whether its ok to process
4101 * *all* its kids or not */
4102 assert(o->op_targ == OP_LIST
4103 || !(OpHAS_SIBLING(cBINOPo->op_first)));
4106 o = cLISTOPo->op_first;
4110 if (o->op_flags & OPf_PARENS)
4115 /* diag_listed_as: Can't modify reference to %s in %s assignment */
4116 yyerror(Perl_form(aTHX_ "Can't modify reference to %s in %s",
4117 o->op_type == OP_NULL && o->op_flags & OPf_SPECIAL
4124 OpTYPE_set(o, OP_LVREF);
4126 OPpLVAL_INTRO|OPpLVREF_ELEM|OPpLVREF_TYPE|OPpPAD_STATE;
4127 if (type == OP_ENTERLOOP)
4128 o->op_private |= OPpLVREF_ITER;
4133 return; /* at top; no parents/siblings to try */
4134 if (OpHAS_SIBLING(o)) {
4135 o = o->op_sibparent;
4138 o = o->op_sibparent; /*try parent's next sibling */
4144 PERL_STATIC_INLINE bool
4145 S_potential_mod_type(I32 type)
4147 /* Types that only potentially result in modification. */
4148 return type == OP_GREPSTART || type == OP_ENTERSUB
4149 || type == OP_REFGEN || type == OP_LEAVESUBLV;
4154 =for apidoc op_lvalue
4156 Propagate lvalue ("modifiable") context to an op and its children.
4157 C<type> represents the context type, roughly based on the type of op that
4158 would do the modifying, although C<local()> is represented by C<OP_NULL>,
4159 because it has no op type of its own (it is signalled by a flag on
4162 This function detects things that can't be modified, such as C<$x+1>, and
4163 generates errors for them. For example, C<$x+1 = 2> would cause it to be
4164 called with an op of type C<OP_ADD> and a C<type> argument of C<OP_SASSIGN>.
4166 It also flags things that need to behave specially in an lvalue context,
4167 such as C<$$x = 5> which might have to vivify a reference in C<$x>.
4171 Perl_op_lvalue_flags() is a non-API lower-level interface to
4172 op_lvalue(). The flags param has these bits:
4173 OP_LVALUE_NO_CROAK: return rather than croaking on error
4178 Perl_op_lvalue_flags(pTHX_ OP *o, I32 type, U32 flags)
4183 if (!o || (PL_parser && PL_parser->error_count))
4188 /* -1 = error on localize, 0 = ignore localize, 1 = ok to localize */
4190 OP *next_kid = NULL;
4192 if ((o->op_private & OPpTARGET_MY)
4193 && (PL_opargs[o->op_type] & OA_TARGLEX))/* OPp share the meaning */
4198 /* elements of a list might be in void context because the list is
4199 in scalar context or because they are attribute sub calls */
4200 if ((o->op_flags & OPf_WANT) == OPf_WANT_VOID)
4203 if (type == OP_PRTF || type == OP_SPRINTF) type = OP_ENTERSUB;
4205 switch (o->op_type) {
4211 if ((o->op_flags & OPf_PARENS))
4216 if ((type == OP_UNDEF || type == OP_REFGEN || type == OP_LOCK) &&
4217 !(o->op_flags & OPf_STACKED)) {
4218 OpTYPE_set(o, OP_RV2CV); /* entersub => rv2cv */
4219 assert(cUNOPo->op_first->op_type == OP_NULL);
4220 op_null(((LISTOP*)cUNOPo->op_first)->op_first);/* disable pushmark */
4223 else { /* lvalue subroutine call */
4224 o->op_private |= OPpLVAL_INTRO;
4225 PL_modcount = RETURN_UNLIMITED_NUMBER;
4226 if (S_potential_mod_type(type)) {
4227 o->op_private |= OPpENTERSUB_INARGS;
4230 else { /* Compile-time error message: */
4231 OP *kid = cUNOPo->op_first;
4236 if (kid->op_type != OP_PUSHMARK) {
4237 if (kid->op_type != OP_NULL || kid->op_targ != OP_LIST)
4239 "panic: unexpected lvalue entersub "
4240 "args: type/targ %ld:%" UVuf,
4241 (long)kid->op_type, (UV)kid->op_targ);
4242 kid = kLISTOP->op_first;
4244 while (OpHAS_SIBLING(kid))
4245 kid = OpSIBLING(kid);
4246 if (!(kid->op_type == OP_NULL && kid->op_targ == OP_RV2CV)) {
4247 break; /* Postpone until runtime */
4250 kid = kUNOP->op_first;
4251 if (kid->op_type == OP_NULL && kid->op_targ == OP_RV2SV)
4252 kid = kUNOP->op_first;
4253 if (kid->op_type == OP_NULL)
4255 "Unexpected constant lvalue entersub "
4256 "entry via type/targ %ld:%" UVuf,
4257 (long)kid->op_type, (UV)kid->op_targ);
4258 if (kid->op_type != OP_GV) {
4265 : SvROK(gv) && SvTYPE(SvRV(gv)) == SVt_PVCV
4266 ? MUTABLE_CV(SvRV(gv))
4272 if (flags & OP_LVALUE_NO_CROAK)
4275 namesv = cv_name(cv, NULL, 0);
4276 yyerror_pv(Perl_form(aTHX_ "Can't modify non-lvalue "
4277 "subroutine call of &%" SVf " in %s",
4278 SVfARG(namesv), PL_op_desc[type]),
4286 if (flags & OP_LVALUE_NO_CROAK) return NULL;
4287 /* grep, foreach, subcalls, refgen */
4288 if (S_potential_mod_type(type))
4290 yyerror(Perl_form(aTHX_ "Can't modify %s in %s",
4291 (o->op_type == OP_NULL && (o->op_flags & OPf_SPECIAL)
4294 type ? PL_op_desc[type] : "local"));
4307 case OP_RIGHT_SHIFT:
4316 if (!(o->op_flags & OPf_STACKED))
4322 if (o->op_flags & OPf_STACKED) {
4326 if (!(o->op_private & OPpREPEAT_DOLIST))
4329 const I32 mods = PL_modcount;
4330 /* we recurse rather than iterate here because we need to
4331 * calculate and use the delta applied to PL_modcount by the
4332 * first child. So in something like
4333 * ($x, ($y) x 3) = split;
4334 * split knows that 4 elements are wanted
4336 modkids(cBINOPo->op_first, type);
4337 if (type != OP_AASSIGN)
4339 kid = cBINOPo->op_last;
4340 if (kid->op_type == OP_CONST && SvIOK(kSVOP_sv)) {
4341 const IV iv = SvIV(kSVOP_sv);
4342 if (PL_modcount != RETURN_UNLIMITED_NUMBER)
4344 mods + (PL_modcount - mods) * (iv < 0 ? 0 : iv);
4347 PL_modcount = RETURN_UNLIMITED_NUMBER;
4353 next_kid = OpSIBLING(cUNOPo->op_first);
4358 if (type == OP_REFGEN && o->op_flags & OPf_PARENS) {
4359 PL_modcount = RETURN_UNLIMITED_NUMBER;
4360 /* Treat \(@foo) like ordinary list, but still mark it as modi-
4361 fiable since some contexts need to know. */
4362 o->op_flags |= OPf_MOD;
4367 if (scalar_mod_type(o, type))
4369 ref(cUNOPo->op_first, o->op_type);
4376 /* Do not apply the lvsub flag for rv2[ah]v in scalar context. */
4377 if (type == OP_LEAVESUBLV && (
4378 (o->op_type != OP_RV2AV && o->op_type != OP_RV2HV)
4379 || (o->op_flags & OPf_WANT) != OPf_WANT_SCALAR
4381 o->op_private |= OPpMAYBE_LVSUB;
4385 PL_modcount = RETURN_UNLIMITED_NUMBER;
4391 if (type == OP_LEAVESUBLV)
4392 o->op_private |= OPpMAYBE_LVSUB;
4396 if (type == OP_LEAVESUBLV
4397 && (o->op_private & OPpAVHVSWITCH_MASK) + OP_EACH == OP_KEYS)
4398 o->op_private |= OPpMAYBE_LVSUB;
4402 PL_hints |= HINT_BLOCK_SCOPE;
4403 if (type == OP_LEAVESUBLV)
4404 o->op_private |= OPpMAYBE_LVSUB;
4409 ref(cUNOPo->op_first, o->op_type);
4413 PL_hints |= HINT_BLOCK_SCOPE;
4423 case OP_AELEMFAST_LEX:
4430 PL_modcount = RETURN_UNLIMITED_NUMBER;
4431 if (type == OP_REFGEN && o->op_flags & OPf_PARENS)
4433 /* Treat \(@foo) like ordinary list, but still mark it as modi-
4434 fiable since some contexts need to know. */
4435 o->op_flags |= OPf_MOD;
4438 if (scalar_mod_type(o, type))
4440 if ((o->op_flags & OPf_WANT) != OPf_WANT_SCALAR
4441 && type == OP_LEAVESUBLV)
4442 o->op_private |= OPpMAYBE_LVSUB;
4446 if (!type) /* local() */
4447 Perl_croak(aTHX_ "Can't localize lexical variable %" PNf,
4448 PNfARG(PAD_COMPNAME(o->op_targ)));
4449 if (!(o->op_private & OPpLVAL_INTRO)
4450 || ( type != OP_SASSIGN && type != OP_AASSIGN
4451 && PadnameIsSTATE(PAD_COMPNAME_SV(o->op_targ)) ))
4452 S_mark_padname_lvalue(aTHX_ PAD_COMPNAME_SV(o->op_targ));
4460 if (type != OP_LEAVESUBLV && !scalar_mod_type(NULL, type))
4464 if (o->op_private == 4) /* don't allow 4 arg substr as lvalue */
4470 if (type == OP_LEAVESUBLV)
4471 o->op_private |= OPpMAYBE_LVSUB;
4472 if (o->op_flags & OPf_KIDS && OpHAS_SIBLING(cBINOPo->op_first)) {
4473 /* we recurse rather than iterate here because the child
4474 * needs to be processed with a different 'type' parameter */
4476 /* substr and vec */
4477 /* If this op is in merely potential (non-fatal) modifiable
4478 context, then apply OP_ENTERSUB context to
4479 the kid op (to avoid croaking). Other-
4480 wise pass this op’s own type so the correct op is mentioned
4481 in error messages. */
4482 op_lvalue(OpSIBLING(cBINOPo->op_first),
4483 S_potential_mod_type(type)
4491 ref(cBINOPo->op_first, o->op_type);
4492 if (type == OP_ENTERSUB &&
4493 !(o->op_private & (OPpLVAL_INTRO | OPpDEREF)))
4494 o->op_private |= OPpLVAL_DEFER;
4495 if (type == OP_LEAVESUBLV)
4496 o->op_private |= OPpMAYBE_LVSUB;
4503 o->op_private |= OPpLVALUE;
4509 if (o->op_flags & OPf_KIDS)
4510 next_kid = cLISTOPo->op_last;
4515 if (o->op_flags & OPf_SPECIAL) /* do BLOCK */
4517 else if (!(o->op_flags & OPf_KIDS))
4520 if (o->op_targ != OP_LIST) {
4521 OP *sib = OpSIBLING(cLISTOPo->op_first);
4522 /* OP_TRANS and OP_TRANSR with argument have a weird optree
4529 * compared with things like OP_MATCH which have the argument
4535 * so handle specially to correctly get "Can't modify" croaks etc
4538 if (sib && (sib->op_type == OP_TRANS || sib->op_type == OP_TRANSR))
4540 /* this should trigger a "Can't modify transliteration" err */
4541 op_lvalue(sib, type);
4543 next_kid = cBINOPo->op_first;
4544 /* we assume OP_NULLs which aren't ex-list have no more than 2
4545 * children. If this assumption is wrong, increase the scan
4547 assert( !OpHAS_SIBLING(next_kid)
4548 || !OpHAS_SIBLING(OpSIBLING(next_kid)));
4554 next_kid = cLISTOPo->op_first;
4562 if (type == OP_LEAVESUBLV
4563 || !S_vivifies(cLOGOPo->op_first->op_type))
4564 next_kid = cLOGOPo->op_first;
4565 else if (type == OP_LEAVESUBLV
4566 || !S_vivifies(OpSIBLING(cLOGOPo->op_first)->op_type))
4567 next_kid = OpSIBLING(cLOGOPo->op_first);
4571 if (type == OP_NULL) { /* local */
4573 if (!FEATURE_MYREF_IS_ENABLED)
4574 Perl_croak(aTHX_ "The experimental declared_refs "
4575 "feature is not enabled");
4576 Perl_ck_warner_d(aTHX_
4577 packWARN(WARN_EXPERIMENTAL__DECLARED_REFS),
4578 "Declaring references is experimental");
4579 next_kid = cUNOPo->op_first;
4582 if (type != OP_AASSIGN && type != OP_SASSIGN
4583 && type != OP_ENTERLOOP)
4585 /* Don’t bother applying lvalue context to the ex-list. */
4586 kid = cUNOPx(cUNOPo->op_first)->op_first;
4587 assert (!OpHAS_SIBLING(kid));
4590 if (type == OP_NULL) /* local */
4592 if (type != OP_AASSIGN) goto nomod;
4593 kid = cUNOPo->op_first;
4596 const U8 ec = PL_parser ? PL_parser->error_count : 0;
4597 S_lvref(aTHX_ kid, type);
4598 if (!PL_parser || PL_parser->error_count == ec) {
4599 if (!FEATURE_REFALIASING_IS_ENABLED)
4601 "Experimental aliasing via reference not enabled");
4602 Perl_ck_warner_d(aTHX_
4603 packWARN(WARN_EXPERIMENTAL__REFALIASING),
4604 "Aliasing via reference is experimental");
4607 if (o->op_type == OP_REFGEN)
4608 op_null(cUNOPx(cUNOPo->op_first)->op_first); /* pushmark */
4613 if ((o->op_private & OPpSPLIT_ASSIGN)) {
4614 /* This is actually @array = split. */
4615 PL_modcount = RETURN_UNLIMITED_NUMBER;
4621 op_lvalue(cUNOPo->op_first, OP_ENTERSUB);
4625 /* [20011101.069 (#7861)] File test operators interpret OPf_REF to mean that
4626 their argument is a filehandle; thus \stat(".") should not set
4628 if (type == OP_REFGEN && OP_IS_STAT(o->op_type))
4631 if (type != OP_LEAVESUBLV)
4632 o->op_flags |= OPf_MOD;
4634 if (type == OP_AASSIGN || type == OP_SASSIGN)
4635 o->op_flags |= OPf_SPECIAL
4636 |(o->op_type == OP_ENTERSUB ? 0 : OPf_REF);
4637 else if (!type) { /* local() */
4640 o->op_private |= OPpLVAL_INTRO;
4641 o->op_flags &= ~OPf_SPECIAL;
4642 PL_hints |= HINT_BLOCK_SCOPE;
4647 Perl_ck_warner(aTHX_ packWARN(WARN_SYNTAX),
4648 "Useless localization of %s", OP_DESC(o));
4651 else if (type != OP_GREPSTART && type != OP_ENTERSUB
4652 && type != OP_LEAVESUBLV && o->op_type != OP_ENTERSUB)
4653 o->op_flags |= OPf_REF;
4658 return top_op; /* at top; no parents/siblings to try */
4659 if (OpHAS_SIBLING(o)) {
4660 next_kid = o->op_sibparent;
4661 if (!OpHAS_SIBLING(next_kid)) {
4662 /* a few node types don't recurse into their second child */
4663 OP *parent = next_kid->op_sibparent;
4664 I32 ptype = parent->op_type;
4665 if ( (ptype == OP_NULL && parent->op_targ != OP_LIST)
4666 || ( (ptype == OP_AND || ptype == OP_OR)
4667 && (type != OP_LEAVESUBLV
4668 && S_vivifies(next_kid->op_type))
4671 /*try parent's next sibling */
4678 o = o->op_sibparent; /*try parent's next sibling */