4 * Copyright (C) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
5 * 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 by Larry Wall and others
7 * You may distribute under the terms of either the GNU General Public
8 * License or the Artistic License, as specified in the README file.
13 * 'You see: Mr. Drogo, he married poor Miss Primula Brandybuck. She was
14 * our Mr. Bilbo's first cousin on the mother's side (her mother being the
15 * youngest of the Old Took's daughters); and Mr. Drogo was his second
16 * cousin. So Mr. Frodo is his first *and* second cousin, once removed
17 * either way, as the saying is, if you follow me.' --the Gaffer
19 * [p.23 of _The Lord of the Rings_, I/i: "A Long-Expected Party"]
22 /* This file contains the functions that create, manipulate and optimize
23 * the OP structures that hold a compiled perl program.
25 * Note that during the build of miniperl, a temporary copy of this file
26 * is made, called opmini.c.
28 * A Perl program is compiled into a tree of OP nodes. Each op contains:
29 * * structural OP pointers to its children and siblings (op_sibling,
30 * op_first etc) that define the tree structure;
31 * * execution order OP pointers (op_next, plus sometimes op_other,
32 * op_lastop etc) that define the execution sequence plus variants;
33 * * a pointer to the C "pp" function that would execute the op;
34 * * any data specific to that op.
35 * For example, an OP_CONST op points to the pp_const() function and to an
36 * SV containing the constant value. When pp_const() is executed, its job
37 * is to push that SV onto the stack.
39 * OPs are mainly created by the newFOO() functions, which are mainly
40 * called from the parser (in perly.y) as the code is parsed. For example
41 * the Perl code $a + $b * $c would cause the equivalent of the following
42 * to be called (oversimplifying a bit):
44 * newBINOP(OP_ADD, flags,
46 * newBINOP(OP_MULTIPLY, flags, newSVREF($b), newSVREF($c))
49 * As the parser reduces low-level rules, it creates little op subtrees;
50 * as higher-level rules are resolved, these subtrees get joined together
51 * as branches on a bigger subtree, until eventually a top-level rule like
52 * a subroutine definition is reduced, at which point there is one large
55 * The execution order pointers (op_next) are generated as the subtrees
56 * are joined together. Consider this sub-expression: A*B + C/D: at the
57 * point when it's just been parsed, the op tree looks like:
65 * with the intended execution order being:
67 * [PREV] => A => B => [*] => C => D => [/] => [+] => [NEXT]
69 * At this point all the nodes' op_next pointers will have been set,
71 * * we don't know what the [NEXT] node will be yet;
72 * * we don't know what the [PREV] node will be yet, but when it gets
73 * created and needs its op_next set, it needs to be set to point to
74 * A, which is non-obvious.
75 * To handle both those cases, we temporarily set the top node's
76 * op_next to point to the first node to be executed in this subtree (A in
77 * this case). This means that initially a subtree's op_next chain,
78 * starting from the top node, will visit each node in execution sequence
79 * then point back at the top node.
80 * When we embed this subtree in a larger tree, its top op_next is used
81 * to get the start node, then is set to point to its new neighbour.
82 * For example the two separate [*],A,B and [/],C,D subtrees would
84 * [*] => A; A => B; B => [*]
86 * [/] => C; C => D; D => [/]
87 * When these two subtrees were joined together to make the [+] subtree,
88 * [+]'s op_next was set to [*]'s op_next, i.e. A; then [*]'s op_next was
89 * set to point to [/]'s op_next, i.e. C.
91 * This op_next linking is done by the LINKLIST() macro and its underlying
92 * op_linklist() function. Given a top-level op, if its op_next is
93 * non-null, it's already been linked, so leave it. Otherwise link it with
94 * its children as described above, possibly recursively if any of the
95 * children have a null op_next.
97 * In summary: given a subtree, its top-level node's op_next will either
99 * NULL: the subtree hasn't been LINKLIST()ed yet;
100 * fake: points to the start op for this subtree;
101 * real: once the subtree has been embedded into a larger tree
106 Here's an older description from Larry.
108 Perl's compiler is essentially a 3-pass compiler with interleaved phases:
112 An execution-order pass
114 The bottom-up pass is represented by all the "newOP" routines and
115 the ck_ routines. The bottom-upness is actually driven by yacc.
116 So at the point that a ck_ routine fires, we have no idea what the
117 context is, either upward in the syntax tree, or either forward or
118 backward in the execution order. (The bottom-up parser builds that
119 part of the execution order it knows about, but if you follow the "next"
120 links around, you'll find it's actually a closed loop through the
123 Whenever the bottom-up parser gets to a node that supplies context to
124 its components, it invokes that portion of the top-down pass that applies
125 to that part of the subtree (and marks the top node as processed, so
126 if a node further up supplies context, it doesn't have to take the
127 plunge again). As a particular subcase of this, as the new node is
128 built, it takes all the closed execution loops of its subcomponents
129 and links them into a new closed loop for the higher level node. But
130 it's still not the real execution order.
132 The actual execution order is not known till we get a grammar reduction
133 to a top-level unit like a subroutine or file that will be called by
134 "name" rather than via a "next" pointer. At that point, we can call
135 into peep() to do that code's portion of the 3rd pass. It has to be
136 recursive, but it's recursive on basic blocks, not on tree nodes.
139 /* To implement user lexical pragmas, there needs to be a way at run time to
140 get the compile time state of %^H for that block. Storing %^H in every
141 block (or even COP) would be very expensive, so a different approach is
142 taken. The (running) state of %^H is serialised into a tree of HE-like
143 structs. Stores into %^H are chained onto the current leaf as a struct
144 refcounted_he * with the key and the value. Deletes from %^H are saved
145 with a value of PL_sv_placeholder. The state of %^H at any point can be
146 turned back into a regular HV by walking back up the tree from that point's
147 leaf, ignoring any key you've already seen (placeholder or not), storing
148 the rest into the HV structure, then removing the placeholders. Hence
149 memory is only used to store the %^H deltas from the enclosing COP, rather
150 than the entire %^H on each COP.
152 To cause actions on %^H to write out the serialisation records, it has
153 magic type 'H'. This magic (itself) does nothing, but its presence causes
154 the values to gain magic type 'h', which has entries for set and clear.
155 C<Perl_magic_sethint> updates C<PL_compiling.cop_hints_hash> with a store
156 record, with deletes written by C<Perl_magic_clearhint>. C<SAVEHINTS>
157 saves the current C<PL_compiling.cop_hints_hash> on the save stack, so that
158 it will be correctly restored when any inner compiling scope is exited.
164 #include "keywords.h"
167 #include "invlist_inline.h"
169 #define CALL_PEEP(o) PL_peepp(aTHX_ o)
170 #define CALL_RPEEP(o) PL_rpeepp(aTHX_ o)
171 #define CALL_OPFREEHOOK(o) if (PL_opfreehook) PL_opfreehook(aTHX_ o)
173 static const char array_passed_to_stat[] = "Array passed to stat will be coerced to a scalar";
175 /* remove any leading "empty" ops from the op_next chain whose first
176 * node's address is stored in op_p. Store the updated address of the
177 * first node in op_p.
181 S_prune_chain_head(OP** op_p)
184 && ( (*op_p)->op_type == OP_NULL
185 || (*op_p)->op_type == OP_SCOPE
186 || (*op_p)->op_type == OP_SCALAR
187 || (*op_p)->op_type == OP_LINESEQ)
189 *op_p = (*op_p)->op_next;
193 /* See the explanatory comments above struct opslab in op.h. */
195 #ifdef PERL_DEBUG_READONLY_OPS
196 # define PERL_SLAB_SIZE 128
197 # define PERL_MAX_SLAB_SIZE 4096
198 # include <sys/mman.h>
201 #ifndef PERL_SLAB_SIZE
202 # define PERL_SLAB_SIZE 64
204 #ifndef PERL_MAX_SLAB_SIZE
205 # define PERL_MAX_SLAB_SIZE 2048
208 /* rounds up to nearest pointer */
209 #define SIZE_TO_PSIZE(x) (((x) + sizeof(I32 *) - 1)/sizeof(I32 *))
210 #define DIFF(o,p) ((size_t)((I32 **)(p) - (I32**)(o)))
212 /* requires double parens and aTHX_ */
213 #define DEBUG_S_warn(args) \
215 PerlIO_printf(Perl_debug_log, "%s", SvPVx_nolen(Perl_mess args)) \
219 /* malloc a new op slab (suitable for attaching to PL_compcv).
220 * sz is in units of pointers */
223 S_new_slab(pTHX_ OPSLAB *head, size_t sz)
227 /* opslot_offset is only U16 */
228 assert(sz < U16_MAX);
230 #ifdef PERL_DEBUG_READONLY_OPS
231 slab = (OPSLAB *) mmap(0, sz * sizeof(I32 *),
232 PROT_READ|PROT_WRITE,
233 MAP_ANON|MAP_PRIVATE, -1, 0);
234 DEBUG_m(PerlIO_printf(Perl_debug_log, "mapped %lu at %p\n",
235 (unsigned long) sz, slab));
236 if (slab == MAP_FAILED) {
237 perror("mmap failed");
241 slab = (OPSLAB *)PerlMemShared_calloc(sz, sizeof(I32 *));
243 slab->opslab_size = (U16)sz;
246 /* The context is unused in non-Windows */
249 slab->opslab_free_space = sz - DIFF(slab, &slab->opslab_slots);
250 slab->opslab_head = head ? head : slab;
251 DEBUG_S_warn((aTHX_ "allocated new op slab sz 0x%x, %p, head slab %p",
252 (unsigned int)slab->opslab_size, (void*)slab,
253 (void*)(slab->opslab_head)));
258 /* Returns a sz-sized block of memory (suitable for holding an op) from
259 * a free slot in the chain of op slabs attached to PL_compcv.
260 * Allocates a new slab if necessary.
261 * if PL_compcv isn't compiling, malloc() instead.
265 Perl_Slab_Alloc(pTHX_ size_t sz)
267 OPSLAB *head_slab; /* first slab in the chain */
273 /* We only allocate ops from the slab during subroutine compilation.
274 We find the slab via PL_compcv, hence that must be non-NULL. It could
275 also be pointing to a subroutine which is now fully set up (CvROOT()
276 pointing to the top of the optree for that sub), or a subroutine
277 which isn't using the slab allocator. If our sanity checks aren't met,
278 don't use a slab, but allocate the OP directly from the heap. */
279 if (!PL_compcv || CvROOT(PL_compcv)
280 || (CvSTART(PL_compcv) && !CvSLABBED(PL_compcv)))
282 o = (OP*)PerlMemShared_calloc(1, sz);
286 /* While the subroutine is under construction, the slabs are accessed via
287 CvSTART(), to avoid needing to expand PVCV by one pointer for something
288 unneeded at runtime. Once a subroutine is constructed, the slabs are
289 accessed via CvROOT(). So if CvSTART() is NULL, no slab has been
290 allocated yet. See the commit message for 8be227ab5eaa23f2 for more
292 if (!CvSTART(PL_compcv)) {
294 (OP *)(head_slab = S_new_slab(aTHX_ NULL, PERL_SLAB_SIZE));
295 CvSLABBED_on(PL_compcv);
296 head_slab->opslab_refcnt = 2; /* one for the CV; one for the new OP */
298 else ++(head_slab = (OPSLAB *)CvSTART(PL_compcv))->opslab_refcnt;
300 opsz = SIZE_TO_PSIZE(sz);
301 sz = opsz + OPSLOT_HEADER_P;
303 /* The slabs maintain a free list of OPs. In particular, constant folding
304 will free up OPs, so it makes sense to re-use them where possible. A
305 freed up slot is used in preference to a new allocation. */
306 if (head_slab->opslab_freed) {
307 OP **too = &head_slab->opslab_freed;
309 DEBUG_S_warn((aTHX_ "found free op at %p, slab %p, head slab %p",
311 (I32**)OpSLOT(o) - OpSLOT(o)->opslot_offset,
314 while (o && OpSLOT(o)->opslot_size < sz) {
315 DEBUG_S_warn((aTHX_ "Alas! too small"));
316 o = *(too = &o->op_next);
317 if (o) { DEBUG_S_warn((aTHX_ "found another free op at %p", (void*)o)); }
320 DEBUG_S_warn((aTHX_ "realloced op at %p, slab %p, head slab %p",
322 (I32**)OpSLOT(o) - OpSLOT(o)->opslot_offset,
325 Zero(o, opsz, I32 *);
331 #define INIT_OPSLOT(s) \
332 slot->opslot_offset = DIFF(slab2, slot) ; \
333 slot->opslot_size = s; \
334 slab2->opslab_free_space -= s; \
335 o = &slot->opslot_op; \
338 /* The partially-filled slab is next in the chain. */
339 slab2 = head_slab->opslab_next ? head_slab->opslab_next : head_slab;
340 if (slab2->opslab_free_space < sz) {
341 /* Remaining space is too small. */
342 /* If we can fit a BASEOP, add it to the free chain, so as not
344 if (slab2->opslab_free_space >= SIZE_TO_PSIZE(sizeof(OP)) + OPSLOT_HEADER_P) {
345 slot = &slab2->opslab_slots;
346 INIT_OPSLOT(slab2->opslab_free_space);
347 o->op_type = OP_FREED;
348 o->op_next = head_slab->opslab_freed;
349 head_slab->opslab_freed = o;
352 /* Create a new slab. Make this one twice as big. */
353 slab2 = S_new_slab(aTHX_ head_slab,
354 slab2->opslab_size > PERL_MAX_SLAB_SIZE / 2
356 : slab2->opslab_size * 2);
357 slab2->opslab_next = head_slab->opslab_next;
358 head_slab->opslab_next = slab2;
360 assert(slab2->opslab_size >= sz);
362 /* Create a new op slot */
364 ((I32 **)&slab2->opslab_slots
365 + slab2->opslab_free_space - sz);
366 assert(slot >= &slab2->opslab_slots);
368 DEBUG_S_warn((aTHX_ "allocating op at %p, slab %p, head slab %p",
369 (void*)o, (void*)slab2, (void*)head_slab));
372 /* moresib == 0, op_sibling == 0 implies a solitary unattached op */
373 assert(!o->op_moresib);
374 assert(!o->op_sibparent);
381 #ifdef PERL_DEBUG_READONLY_OPS
383 Perl_Slab_to_ro(pTHX_ OPSLAB *slab)
385 PERL_ARGS_ASSERT_SLAB_TO_RO;
387 if (slab->opslab_readonly) return;
388 slab->opslab_readonly = 1;
389 for (; slab; slab = slab->opslab_next) {
390 /*DEBUG_U(PerlIO_printf(Perl_debug_log,"mprotect ->ro %lu at %p\n",
391 (unsigned long) slab->opslab_size, slab));*/
392 if (mprotect(slab, slab->opslab_size * sizeof(I32 *), PROT_READ))
393 Perl_warn(aTHX_ "mprotect for %p %lu failed with %d", slab,
394 (unsigned long)slab->opslab_size, errno);
399 Perl_Slab_to_rw(pTHX_ OPSLAB *const slab)
403 PERL_ARGS_ASSERT_SLAB_TO_RW;
405 if (!slab->opslab_readonly) return;
407 for (; slab2; slab2 = slab2->opslab_next) {
408 /*DEBUG_U(PerlIO_printf(Perl_debug_log,"mprotect ->rw %lu at %p\n",
409 (unsigned long) size, slab2));*/
410 if (mprotect((void *)slab2, slab2->opslab_size * sizeof(I32 *),
411 PROT_READ|PROT_WRITE)) {
412 Perl_warn(aTHX_ "mprotect RW for %p %lu failed with %d", slab,
413 (unsigned long)slab2->opslab_size, errno);
416 slab->opslab_readonly = 0;
420 # define Slab_to_rw(op) NOOP
423 /* This cannot possibly be right, but it was copied from the old slab
424 allocator, to which it was originally added, without explanation, in
427 # define PerlMemShared PerlMem
430 /* make freed ops die if they're inadvertently executed */
435 DIE(aTHX_ "panic: freed op 0x%p called\n", PL_op);
440 /* Return the block of memory used by an op to the free list of
441 * the OP slab associated with that op.
445 Perl_Slab_Free(pTHX_ void *op)
447 OP * const o = (OP *)op;
450 PERL_ARGS_ASSERT_SLAB_FREE;
453 o->op_ppaddr = S_pp_freed;
456 if (!o->op_slabbed) {
458 PerlMemShared_free(op);
463 /* If this op is already freed, our refcount will get screwy. */
464 assert(o->op_type != OP_FREED);
465 o->op_type = OP_FREED;
466 o->op_next = slab->opslab_freed;
467 slab->opslab_freed = o;
468 DEBUG_S_warn((aTHX_ "freeing op at %p, slab %p, head slab %p",
470 (I32**)OpSLOT(o) - OpSLOT(o)->opslot_offset,
472 OpslabREFCNT_dec_padok(slab);
476 Perl_opslab_free_nopad(pTHX_ OPSLAB *slab)
478 const bool havepad = !!PL_comppad;
479 PERL_ARGS_ASSERT_OPSLAB_FREE_NOPAD;
482 PAD_SAVE_SETNULLPAD();
488 /* Free a chain of OP slabs. Should only be called after all ops contained
489 * in it have been freed. At this point, its reference count should be 1,
490 * because OpslabREFCNT_dec() skips doing rc-- when it detects that rc == 1,
491 * and just directly calls opslab_free().
492 * (Note that the reference count which PL_compcv held on the slab should
493 * have been removed once compilation of the sub was complete).
499 Perl_opslab_free(pTHX_ OPSLAB *slab)
502 PERL_ARGS_ASSERT_OPSLAB_FREE;
504 DEBUG_S_warn((aTHX_ "freeing slab %p", (void*)slab));
505 assert(slab->opslab_refcnt == 1);
507 slab2 = slab->opslab_next;
509 slab->opslab_refcnt = ~(size_t)0;
511 #ifdef PERL_DEBUG_READONLY_OPS
512 DEBUG_m(PerlIO_printf(Perl_debug_log, "Deallocate slab at %p\n",
514 if (munmap(slab, slab->opslab_size * sizeof(I32 *))) {
515 perror("munmap failed");
519 PerlMemShared_free(slab);
525 /* like opslab_free(), but first calls op_free() on any ops in the slab
526 * not marked as OP_FREED
530 Perl_opslab_force_free(pTHX_ OPSLAB *slab)
534 size_t savestack_count = 0;
536 PERL_ARGS_ASSERT_OPSLAB_FORCE_FREE;
539 OPSLOT *slot = (OPSLOT*)
540 ((I32**)&slab2->opslab_slots + slab2->opslab_free_space);
541 OPSLOT *end = (OPSLOT*)
542 ((I32**)slab2 + slab2->opslab_size);
544 slot = (OPSLOT*) ((I32**)slot + slot->opslot_size) )
546 if (slot->opslot_op.op_type != OP_FREED
547 && !(slot->opslot_op.op_savefree
553 assert(slot->opslot_op.op_slabbed);
554 op_free(&slot->opslot_op);
555 if (slab->opslab_refcnt == 1) goto free;
558 } while ((slab2 = slab2->opslab_next));
559 /* > 1 because the CV still holds a reference count. */
560 if (slab->opslab_refcnt > 1) { /* still referenced by the savestack */
562 assert(savestack_count == slab->opslab_refcnt-1);
564 /* Remove the CV’s reference count. */
565 slab->opslab_refcnt--;
572 #ifdef PERL_DEBUG_READONLY_OPS
574 Perl_op_refcnt_inc(pTHX_ OP *o)
577 OPSLAB *const slab = o->op_slabbed ? OpSLAB(o) : NULL;
578 if (slab && slab->opslab_readonly) {
591 Perl_op_refcnt_dec(pTHX_ OP *o)
594 OPSLAB *const slab = o->op_slabbed ? OpSLAB(o) : NULL;
596 PERL_ARGS_ASSERT_OP_REFCNT_DEC;
598 if (slab && slab->opslab_readonly) {
600 result = --o->op_targ;
603 result = --o->op_targ;
609 * In the following definition, the ", (OP*)0" is just to make the compiler
610 * think the expression is of the right type: croak actually does a Siglongjmp.
612 #define CHECKOP(type,o) \
613 ((PL_op_mask && PL_op_mask[type]) \
614 ? ( op_free((OP*)o), \
615 Perl_croak(aTHX_ "'%s' trapped by operation mask", PL_op_desc[type]), \
617 : PL_check[type](aTHX_ (OP*)o))
619 #define RETURN_UNLIMITED_NUMBER (PERL_INT_MAX / 2)
621 #define OpTYPE_set(o,type) \
623 o->op_type = (OPCODE)type; \
624 o->op_ppaddr = PL_ppaddr[type]; \
628 S_no_fh_allowed(pTHX_ OP *o)
630 PERL_ARGS_ASSERT_NO_FH_ALLOWED;
632 yyerror(Perl_form(aTHX_ "Missing comma after first argument to %s function",
638 S_too_few_arguments_pv(pTHX_ OP *o, const char* name, U32 flags)
640 PERL_ARGS_ASSERT_TOO_FEW_ARGUMENTS_PV;
641 yyerror_pv(Perl_form(aTHX_ "Not enough arguments for %s", name), flags);
646 S_too_many_arguments_pv(pTHX_ OP *o, const char *name, U32 flags)
648 PERL_ARGS_ASSERT_TOO_MANY_ARGUMENTS_PV;
650 yyerror_pv(Perl_form(aTHX_ "Too many arguments for %s", name), flags);
655 S_bad_type_pv(pTHX_ I32 n, const char *t, const OP *o, const OP *kid)
657 PERL_ARGS_ASSERT_BAD_TYPE_PV;
659 yyerror_pv(Perl_form(aTHX_ "Type of arg %d to %s must be %s (not %s)",
660 (int)n, PL_op_desc[(o)->op_type], t, OP_DESC(kid)), 0);
663 /* remove flags var, its unused in all callers, move to to right end since gv
664 and kid are always the same */
666 S_bad_type_gv(pTHX_ I32 n, GV *gv, const OP *kid, const char *t)
668 SV * const namesv = cv_name((CV *)gv, NULL, 0);
669 PERL_ARGS_ASSERT_BAD_TYPE_GV;
671 yyerror_pv(Perl_form(aTHX_ "Type of arg %d to %" SVf " must be %s (not %s)",
672 (int)n, SVfARG(namesv), t, OP_DESC(kid)), SvUTF8(namesv));
676 S_no_bareword_allowed(pTHX_ OP *o)
678 PERL_ARGS_ASSERT_NO_BAREWORD_ALLOWED;
680 qerror(Perl_mess(aTHX_
681 "Bareword \"%" SVf "\" not allowed while \"strict subs\" in use",
683 o->op_private &= ~OPpCONST_STRICT; /* prevent warning twice about the same OP */
686 /* "register" allocation */
689 Perl_allocmy(pTHX_ const char *const name, const STRLEN len, const U32 flags)
692 const bool is_our = (PL_parser->in_my == KEY_our);
694 PERL_ARGS_ASSERT_ALLOCMY;
696 if (flags & ~SVf_UTF8)
697 Perl_croak(aTHX_ "panic: allocmy illegal flag bits 0x%" UVxf,
700 /* complain about "my $<special_var>" etc etc */
704 || ( (flags & SVf_UTF8)
705 && isIDFIRST_utf8_safe((U8 *)name+1, name + len))
706 || (name[1] == '_' && len > 2)))
708 const char * const type =
709 PL_parser->in_my == KEY_sigvar ? "subroutine signature" :
710 PL_parser->in_my == KEY_state ? "\"state\"" : "\"my\"";
712 if (!(flags & SVf_UTF8 && UTF8_IS_START(name[1]))
714 && (!isPRINT(name[1]) || strchr("\t\n\r\f", name[1]))) {
715 /* diag_listed_as: Can't use global %s in %s */
716 yyerror(Perl_form(aTHX_ "Can't use global %c^%c%.*s in %s",
717 name[0], toCTRL(name[1]),
718 (int)(len - 2), name + 2,
721 yyerror_pv(Perl_form(aTHX_ "Can't use global %.*s in %s",
723 type), flags & SVf_UTF8);
727 /* allocate a spare slot and store the name in that slot */
729 off = pad_add_name_pvn(name, len,
730 (is_our ? padadd_OUR :
731 PL_parser->in_my == KEY_state ? padadd_STATE : 0),
732 PL_parser->in_my_stash,
734 /* $_ is always in main::, even with our */
735 ? (PL_curstash && !memEQs(name,len,"$_")
741 /* anon sub prototypes contains state vars should always be cloned,
742 * otherwise the state var would be shared between anon subs */
744 if (PL_parser->in_my == KEY_state && CvANON(PL_compcv))
745 CvCLONE_on(PL_compcv);
751 =head1 Optree Manipulation Functions
753 =for apidoc alloccopstash
755 Available only under threaded builds, this function allocates an entry in
756 C<PL_stashpad> for the stash passed to it.
763 Perl_alloccopstash(pTHX_ HV *hv)
765 PADOFFSET off = 0, o = 1;
766 bool found_slot = FALSE;
768 PERL_ARGS_ASSERT_ALLOCCOPSTASH;
770 if (PL_stashpad[PL_stashpadix] == hv) return PL_stashpadix;
772 for (; o < PL_stashpadmax; ++o) {
773 if (PL_stashpad[o] == hv) return PL_stashpadix = o;
774 if (!PL_stashpad[o] || SvTYPE(PL_stashpad[o]) != SVt_PVHV)
775 found_slot = TRUE, off = o;
778 Renew(PL_stashpad, PL_stashpadmax + 10, HV *);
779 Zero(PL_stashpad + PL_stashpadmax, 10, HV *);
780 off = PL_stashpadmax;
781 PL_stashpadmax += 10;
784 PL_stashpad[PL_stashpadix = off] = hv;
789 /* free the body of an op without examining its contents.
790 * Always use this rather than FreeOp directly */
793 S_op_destroy(pTHX_ OP *o)
803 Free an op and its children. Only use this when an op is no longer linked
810 Perl_op_free(pTHX_ OP *o)
816 bool went_up = FALSE; /* whether we reached the current node by
817 following the parent pointer from a child, and
818 so have already seen this node */
820 if (!o || o->op_type == OP_FREED)
823 if (o->op_private & OPpREFCOUNTED) {
824 /* if base of tree is refcounted, just decrement */
825 switch (o->op_type) {
835 refcnt = OpREFCNT_dec(o);
838 /* Need to find and remove any pattern match ops from
839 * the list we maintain for reset(). */
840 find_and_forget_pmops(o);
853 /* free child ops before ourself, (then free ourself "on the
856 if (!went_up && o->op_flags & OPf_KIDS) {
857 next_op = cUNOPo->op_first;
861 /* find the next node to visit, *then* free the current node
862 * (can't rely on o->op_* fields being valid after o has been
865 /* The next node to visit will be either the sibling, or the
866 * parent if no siblings left, or NULL if we've worked our way
867 * back up to the top node in the tree */
868 next_op = (o == top_op) ? NULL : o->op_sibparent;
869 went_up = cBOOL(!OpHAS_SIBLING(o)); /* parents are already visited */
871 /* Now process the current node */
873 /* Though ops may be freed twice, freeing the op after its slab is a
875 assert(!o->op_slabbed || OpSLAB(o)->opslab_refcnt != ~(size_t)0);
876 /* During the forced freeing of ops after compilation failure, kidops
877 may be freed before their parents. */
878 if (!o || o->op_type == OP_FREED)
883 /* an op should only ever acquire op_private flags that we know about.
884 * If this fails, you may need to fix something in regen/op_private.
885 * Don't bother testing if:
886 * * the op_ppaddr doesn't match the op; someone may have
887 * overridden the op and be doing strange things with it;
888 * * we've errored, as op flags are often left in an
889 * inconsistent state then. Note that an error when
890 * compiling the main program leaves PL_parser NULL, so
891 * we can't spot faults in the main code, only
892 * evaled/required code */
894 if ( o->op_ppaddr == PL_ppaddr[type]
896 && !PL_parser->error_count)
898 assert(!(o->op_private & ~PL_op_private_valid[type]));
903 /* Call the op_free hook if it has been set. Do it now so that it's called
904 * at the right time for refcounted ops, but still before all of the kids
909 type = (OPCODE)o->op_targ;
912 Slab_to_rw(OpSLAB(o));
914 /* COP* is not cleared by op_clear() so that we may track line
915 * numbers etc even after null() */
916 if (type == OP_NEXTSTATE || type == OP_DBSTATE) {
928 /* S_op_clear_gv(): free a GV attached to an OP */
932 void S_op_clear_gv(pTHX_ OP *o, PADOFFSET *ixp)
934 void S_op_clear_gv(pTHX_ OP *o, SV**svp)
938 GV *gv = (o->op_type == OP_GV || o->op_type == OP_GVSV
939 || o->op_type == OP_MULTIDEREF)
942 ? ((GV*)PAD_SVl(*ixp)) : NULL;
944 ? (GV*)(*svp) : NULL;
946 /* It's possible during global destruction that the GV is freed
947 before the optree. Whilst the SvREFCNT_inc is happy to bump from
948 0 to 1 on a freed SV, the corresponding SvREFCNT_dec from 1 to 0
949 will trigger an assertion failure, because the entry to sv_clear
950 checks that the scalar is not already freed. A check of for
951 !SvIS_FREED(gv) turns out to be invalid, because during global
952 destruction the reference count can be forced down to zero
953 (with SVf_BREAK set). In which case raising to 1 and then
954 dropping to 0 triggers cleanup before it should happen. I
955 *think* that this might actually be a general, systematic,
956 weakness of the whole idea of SVf_BREAK, in that code *is*
957 allowed to raise and lower references during global destruction,
958 so any *valid* code that happens to do this during global
959 destruction might well trigger premature cleanup. */
960 bool still_valid = gv && SvREFCNT(gv);
963 SvREFCNT_inc_simple_void(gv);
966 pad_swipe(*ixp, TRUE);
974 int try_downgrade = SvREFCNT(gv) == 2;
977 gv_try_downgrade(gv);
983 Perl_op_clear(pTHX_ OP *o)
988 PERL_ARGS_ASSERT_OP_CLEAR;
990 switch (o->op_type) {
991 case OP_NULL: /* Was holding old type, if any. */
994 case OP_ENTEREVAL: /* Was holding hints. */
995 case OP_ARGDEFELEM: /* Was holding signature index. */
999 if (!(o->op_flags & OPf_REF) || !OP_IS_STAT(o->op_type))
1006 S_op_clear_gv(aTHX_ o, &(cPADOPx(o)->op_padix));
1008 S_op_clear_gv(aTHX_ o, &(cSVOPx(o)->op_sv));
1011 case OP_METHOD_REDIR:
1012 case OP_METHOD_REDIR_SUPER:
1014 if (cMETHOPx(o)->op_rclass_targ) {
1015 pad_swipe(cMETHOPx(o)->op_rclass_targ, 1);
1016 cMETHOPx(o)->op_rclass_targ = 0;
1019 SvREFCNT_dec(cMETHOPx(o)->op_rclass_sv);
1020 cMETHOPx(o)->op_rclass_sv = NULL;
1023 case OP_METHOD_NAMED:
1024 case OP_METHOD_SUPER:
1025 SvREFCNT_dec(cMETHOPx(o)->op_u.op_meth_sv);
1026 cMETHOPx(o)->op_u.op_meth_sv = NULL;
1029 pad_swipe(o->op_targ, 1);
1036 SvREFCNT_dec(cSVOPo->op_sv);
1037 cSVOPo->op_sv = NULL;
1040 Even if op_clear does a pad_free for the target of the op,
1041 pad_free doesn't actually remove the sv that exists in the pad;
1042 instead it lives on. This results in that it could be reused as
1043 a target later on when the pad was reallocated.
1046 pad_swipe(o->op_targ,1);
1056 if (o->op_flags & (OPf_SPECIAL|OPf_STACKED|OPf_KIDS))
1061 if ( (o->op_type == OP_TRANS || o->op_type == OP_TRANSR)
1062 && (o->op_private & OPpTRANS_USE_SVOP))
1065 if (cPADOPo->op_padix > 0) {
1066 pad_swipe(cPADOPo->op_padix, TRUE);
1067 cPADOPo->op_padix = 0;
1070 SvREFCNT_dec(cSVOPo->op_sv);
1071 cSVOPo->op_sv = NULL;
1075 PerlMemShared_free(cPVOPo->op_pv);
1076 cPVOPo->op_pv = NULL;
1080 op_free(cPMOPo->op_pmreplrootu.op_pmreplroot);
1084 if ( (o->op_private & OPpSPLIT_ASSIGN) /* @array = split */
1085 && !(o->op_flags & OPf_STACKED)) /* @{expr} = split */
1087 if (o->op_private & OPpSPLIT_LEX)
1088 pad_free(cPMOPo->op_pmreplrootu.op_pmtargetoff);
1091 pad_swipe(cPMOPo->op_pmreplrootu.op_pmtargetoff, TRUE);
1093 SvREFCNT_dec(MUTABLE_SV(cPMOPo->op_pmreplrootu.op_pmtargetgv));
1100 if (!(cPMOPo->op_pmflags & PMf_CODELIST_PRIVATE))
1101 op_free(cPMOPo->op_code_list);
1102 cPMOPo->op_code_list = NULL;
1103 forget_pmop(cPMOPo);
1104 cPMOPo->op_pmreplrootu.op_pmreplroot = NULL;
1105 /* we use the same protection as the "SAFE" version of the PM_ macros
1106 * here since sv_clean_all might release some PMOPs
1107 * after PL_regex_padav has been cleared
1108 * and the clearing of PL_regex_padav needs to
1109 * happen before sv_clean_all
1112 if(PL_regex_pad) { /* We could be in destruction */
1113 const IV offset = (cPMOPo)->op_pmoffset;
1114 ReREFCNT_dec(PM_GETRE(cPMOPo));
1115 PL_regex_pad[offset] = &PL_sv_undef;
1116 sv_catpvn_nomg(PL_regex_pad[0], (const char *)&offset,
1120 ReREFCNT_dec(PM_GETRE(cPMOPo));
1121 PM_SETRE(cPMOPo, NULL);
1127 PerlMemShared_free(cUNOP_AUXo->op_aux);
1130 case OP_MULTICONCAT:
1132 UNOP_AUX_item *aux = cUNOP_AUXo->op_aux;
1133 /* aux[PERL_MULTICONCAT_IX_PLAIN_PV] and/or
1134 * aux[PERL_MULTICONCAT_IX_UTF8_PV] point to plain and/or
1135 * utf8 shared strings */
1136 char *p1 = aux[PERL_MULTICONCAT_IX_PLAIN_PV].pv;
1137 char *p2 = aux[PERL_MULTICONCAT_IX_UTF8_PV].pv;
1139 PerlMemShared_free(p1);
1141 PerlMemShared_free(p2);
1142 PerlMemShared_free(aux);
1148 UNOP_AUX_item *items = cUNOP_AUXo->op_aux;
1149 UV actions = items->uv;
1151 bool is_hash = FALSE;
1154 switch (actions & MDEREF_ACTION_MASK) {
1157 actions = (++items)->uv;
1160 case MDEREF_HV_padhv_helem:
1163 case MDEREF_AV_padav_aelem:
1164 pad_free((++items)->pad_offset);
1167 case MDEREF_HV_gvhv_helem:
1170 case MDEREF_AV_gvav_aelem:
1172 S_op_clear_gv(aTHX_ o, &((++items)->pad_offset));
1174 S_op_clear_gv(aTHX_ o, &((++items)->sv));
1178 case MDEREF_HV_gvsv_vivify_rv2hv_helem:
1181 case MDEREF_AV_gvsv_vivify_rv2av_aelem:
1183 S_op_clear_gv(aTHX_ o, &((++items)->pad_offset));
1185 S_op_clear_gv(aTHX_ o, &((++items)->sv));
1187 goto do_vivify_rv2xv_elem;
1189 case MDEREF_HV_padsv_vivify_rv2hv_helem:
1192 case MDEREF_AV_padsv_vivify_rv2av_aelem:
1193 pad_free((++items)->pad_offset);
1194 goto do_vivify_rv2xv_elem;
1196 case MDEREF_HV_pop_rv2hv_helem:
1197 case MDEREF_HV_vivify_rv2hv_helem:
1200 do_vivify_rv2xv_elem:
1201 case MDEREF_AV_pop_rv2av_aelem:
1202 case MDEREF_AV_vivify_rv2av_aelem:
1204 switch (actions & MDEREF_INDEX_MASK) {
1205 case MDEREF_INDEX_none:
1208 case MDEREF_INDEX_const:
1212 pad_swipe((++items)->pad_offset, 1);
1214 SvREFCNT_dec((++items)->sv);
1220 case MDEREF_INDEX_padsv:
1221 pad_free((++items)->pad_offset);
1223 case MDEREF_INDEX_gvsv:
1225 S_op_clear_gv(aTHX_ o, &((++items)->pad_offset));
1227 S_op_clear_gv(aTHX_ o, &((++items)->sv));
1232 if (actions & MDEREF_FLAG_last)
1245 actions >>= MDEREF_SHIFT;
1248 /* start of malloc is at op_aux[-1], where the length is
1250 PerlMemShared_free(cUNOP_AUXo->op_aux - 1);
1255 if (o->op_targ > 0) {
1256 pad_free(o->op_targ);
1262 S_cop_free(pTHX_ COP* cop)
1264 PERL_ARGS_ASSERT_COP_FREE;
1267 if (! specialWARN(cop->cop_warnings))
1268 PerlMemShared_free(cop->cop_warnings);
1269 cophh_free(CopHINTHASH_get(cop));
1270 if (PL_curcop == cop)
1275 S_forget_pmop(pTHX_ PMOP *const o)
1277 HV * const pmstash = PmopSTASH(o);
1279 PERL_ARGS_ASSERT_FORGET_PMOP;
1281 if (pmstash && !SvIS_FREED(pmstash) && SvMAGICAL(pmstash)) {
1282 MAGIC * const mg = mg_find((const SV *)pmstash, PERL_MAGIC_symtab);
1284 PMOP **const array = (PMOP**) mg->mg_ptr;
1285 U32 count = mg->mg_len / sizeof(PMOP**);
1289 if (array[i] == o) {
1290 /* Found it. Move the entry at the end to overwrite it. */
1291 array[i] = array[--count];
1292 mg->mg_len = count * sizeof(PMOP**);
1293 /* Could realloc smaller at this point always, but probably
1294 not worth it. Probably worth free()ing if we're the
1297 Safefree(mg->mg_ptr);
1311 S_find_and_forget_pmops(pTHX_ OP *o)
1315 PERL_ARGS_ASSERT_FIND_AND_FORGET_PMOPS;
1318 switch (o->op_type) {
1323 forget_pmop((PMOP*)o);
1326 if (o->op_flags & OPf_KIDS) {
1327 o = cUNOPo->op_first;
1333 return; /* at top; no parents/siblings to try */
1334 if (OpHAS_SIBLING(o)) {
1335 o = o->op_sibparent; /* process next sibling */
1338 o = o->op_sibparent; /*try parent's next sibling */
1347 Neutralizes an op when it is no longer needed, but is still linked to from
1354 Perl_op_null(pTHX_ OP *o)
1358 PERL_ARGS_ASSERT_OP_NULL;
1360 if (o->op_type == OP_NULL)
1363 o->op_targ = o->op_type;
1364 OpTYPE_set(o, OP_NULL);
1368 Perl_op_refcnt_lock(pTHX)
1369 PERL_TSA_ACQUIRE(PL_op_mutex)
1374 PERL_UNUSED_CONTEXT;
1379 Perl_op_refcnt_unlock(pTHX)
1380 PERL_TSA_RELEASE(PL_op_mutex)
1385 PERL_UNUSED_CONTEXT;
1391 =for apidoc op_sibling_splice
1393 A general function for editing the structure of an existing chain of
1394 op_sibling nodes. By analogy with the perl-level C<splice()> function, allows
1395 you to delete zero or more sequential nodes, replacing them with zero or
1396 more different nodes. Performs the necessary op_first/op_last
1397 housekeeping on the parent node and op_sibling manipulation on the
1398 children. The last deleted node will be marked as as the last node by
1399 updating the op_sibling/op_sibparent or op_moresib field as appropriate.
1401 Note that op_next is not manipulated, and nodes are not freed; that is the
1402 responsibility of the caller. It also won't create a new list op for an
1403 empty list etc; use higher-level functions like op_append_elem() for that.
1405 C<parent> is the parent node of the sibling chain. It may passed as C<NULL> if
1406 the splicing doesn't affect the first or last op in the chain.
1408 C<start> is the node preceding the first node to be spliced. Node(s)
1409 following it will be deleted, and ops will be inserted after it. If it is
1410 C<NULL>, the first node onwards is deleted, and nodes are inserted at the
1413 C<del_count> is the number of nodes to delete. If zero, no nodes are deleted.
1414 If -1 or greater than or equal to the number of remaining kids, all
1415 remaining kids are deleted.
1417 C<insert> is the first of a chain of nodes to be inserted in place of the nodes.
1418 If C<NULL>, no nodes are inserted.
1420 The head of the chain of deleted ops is returned, or C<NULL> if no ops were
1425 action before after returns
1426 ------ ----- ----- -------
1429 splice(P, A, 2, X-Y-Z) | | B-C
1433 splice(P, NULL, 1, X-Y) | | A
1437 splice(P, NULL, 3, NULL) | | A-B-C
1441 splice(P, B, 0, X-Y) | | NULL
1445 For lower-level direct manipulation of C<op_sibparent> and C<op_moresib>,
1446 see C<L</OpMORESIB_set>>, C<L</OpLASTSIB_set>>, C<L</OpMAYBESIB_set>>.
1452 Perl_op_sibling_splice(OP *parent, OP *start, int del_count, OP* insert)
1456 OP *last_del = NULL;
1457 OP *last_ins = NULL;
1460 first = OpSIBLING(start);
1464 first = cLISTOPx(parent)->op_first;
1466 assert(del_count >= -1);
1468 if (del_count && first) {
1470 while (--del_count && OpHAS_SIBLING(last_del))
1471 last_del = OpSIBLING(last_del);
1472 rest = OpSIBLING(last_del);
1473 OpLASTSIB_set(last_del, NULL);
1480 while (OpHAS_SIBLING(last_ins))
1481 last_ins = OpSIBLING(last_ins);
1482 OpMAYBESIB_set(last_ins, rest, NULL);
1488 OpMAYBESIB_set(start, insert, NULL);
1492 cLISTOPx(parent)->op_first = insert;
1494 parent->op_flags |= OPf_KIDS;
1496 parent->op_flags &= ~OPf_KIDS;
1500 /* update op_last etc */
1507 /* ought to use OP_CLASS(parent) here, but that can't handle
1508 * ex-foo OP_NULL ops. Also note that XopENTRYCUSTOM() can't
1510 type = parent->op_type;
1511 if (type == OP_CUSTOM) {
1513 type = XopENTRYCUSTOM(parent, xop_class);
1516 if (type == OP_NULL)
1517 type = parent->op_targ;
1518 type = PL_opargs[type] & OA_CLASS_MASK;
1521 lastop = last_ins ? last_ins : start ? start : NULL;
1522 if ( type == OA_BINOP
1523 || type == OA_LISTOP
1527 cLISTOPx(parent)->op_last = lastop;
1530 OpLASTSIB_set(lastop, parent);
1532 return last_del ? first : NULL;
1535 Perl_croak_nocontext("panic: op_sibling_splice(): NULL parent");
1539 =for apidoc op_parent
1541 Returns the parent OP of C<o>, if it has a parent. Returns C<NULL> otherwise.
1547 Perl_op_parent(OP *o)
1549 PERL_ARGS_ASSERT_OP_PARENT;
1550 while (OpHAS_SIBLING(o))
1552 return o->op_sibparent;
1555 /* replace the sibling following start with a new UNOP, which becomes
1556 * the parent of the original sibling; e.g.
1558 * op_sibling_newUNOP(P, A, unop-args...)
1566 * where U is the new UNOP.
1568 * parent and start args are the same as for op_sibling_splice();
1569 * type and flags args are as newUNOP().
1571 * Returns the new UNOP.
1575 S_op_sibling_newUNOP(pTHX_ OP *parent, OP *start, I32 type, I32 flags)
1579 kid = op_sibling_splice(parent, start, 1, NULL);
1580 newop = newUNOP(type, flags, kid);
1581 op_sibling_splice(parent, start, 0, newop);
1586 /* lowest-level newLOGOP-style function - just allocates and populates
1587 * the struct. Higher-level stuff should be done by S_new_logop() /
1588 * newLOGOP(). This function exists mainly to avoid op_first assignment
1589 * being spread throughout this file.
1593 Perl_alloc_LOGOP(pTHX_ I32 type, OP *first, OP* other)
1598 NewOp(1101, logop, 1, LOGOP);
1599 OpTYPE_set(logop, type);
1600 logop->op_first = first;
1601 logop->op_other = other;
1603 logop->op_flags = OPf_KIDS;
1604 while (kid && OpHAS_SIBLING(kid))
1605 kid = OpSIBLING(kid);
1607 OpLASTSIB_set(kid, (OP*)logop);
1612 /* Contextualizers */
1615 =for apidoc op_contextualize
1617 Applies a syntactic context to an op tree representing an expression.
1618 C<o> is the op tree, and C<context> must be C<G_SCALAR>, C<G_ARRAY>,
1619 or C<G_VOID> to specify the context to apply. The modified op tree
1626 Perl_op_contextualize(pTHX_ OP *o, I32 context)
1628 PERL_ARGS_ASSERT_OP_CONTEXTUALIZE;
1630 case G_SCALAR: return scalar(o);
1631 case G_ARRAY: return list(o);
1632 case G_VOID: return scalarvoid(o);
1634 Perl_croak(aTHX_ "panic: op_contextualize bad context %ld",
1641 =for apidoc op_linklist
1642 This function is the implementation of the L</LINKLIST> macro. It should
1643 not be called directly.
1650 Perl_op_linklist(pTHX_ OP *o)
1657 PERL_ARGS_ASSERT_OP_LINKLIST;
1660 /* Descend down the tree looking for any unprocessed subtrees to
1663 if (o->op_flags & OPf_KIDS) {
1664 o = cUNOPo->op_first;
1667 o->op_next = o; /* leaf node; link to self initially */
1670 /* if we're at the top level, there either weren't any children
1671 * to process, or we've worked our way back to the top. */
1675 /* o is now processed. Next, process any sibling subtrees */
1677 if (OpHAS_SIBLING(o)) {
1682 /* Done all the subtrees at this level. Go back up a level and
1683 * link the parent in with all its (processed) children.
1686 o = o->op_sibparent;
1687 assert(!o->op_next);
1688 prevp = &(o->op_next);
1689 kid = (o->op_flags & OPf_KIDS) ? cUNOPo->op_first : NULL;
1691 *prevp = kid->op_next;
1692 prevp = &(kid->op_next);
1693 kid = OpSIBLING(kid);
1701 S_scalarkids(pTHX_ OP *o)
1703 if (o && o->op_flags & OPf_KIDS) {
1705 for (kid = cLISTOPo->op_first; kid; kid = OpSIBLING(kid))
1712 S_scalarboolean(pTHX_ OP *o)
1714 PERL_ARGS_ASSERT_SCALARBOOLEAN;
1716 if ((o->op_type == OP_SASSIGN && cBINOPo->op_first->op_type == OP_CONST &&
1717 !(cBINOPo->op_first->op_flags & OPf_SPECIAL)) ||
1718 (o->op_type == OP_NOT && cUNOPo->op_first->op_type == OP_SASSIGN &&
1719 cBINOPx(cUNOPo->op_first)->op_first->op_type == OP_CONST &&
1720 !(cBINOPx(cUNOPo->op_first)->op_first->op_flags & OPf_SPECIAL))) {
1721 if (ckWARN(WARN_SYNTAX)) {
1722 const line_t oldline = CopLINE(PL_curcop);
1724 if (PL_parser && PL_parser->copline != NOLINE) {
1725 /* This ensures that warnings are reported at the first line
1726 of the conditional, not the last. */
1727 CopLINE_set(PL_curcop, PL_parser->copline);
1729 Perl_warner(aTHX_ packWARN(WARN_SYNTAX), "Found = in conditional, should be ==");
1730 CopLINE_set(PL_curcop, oldline);
1737 S_op_varname_subscript(pTHX_ const OP *o, int subscript_type)
1740 assert(o->op_type == OP_PADAV || o->op_type == OP_RV2AV ||
1741 o->op_type == OP_PADHV || o->op_type == OP_RV2HV);
1743 const char funny = o->op_type == OP_PADAV
1744 || o->op_type == OP_RV2AV ? '@' : '%';
1745 if (o->op_type == OP_RV2AV || o->op_type == OP_RV2HV) {
1747 if (cUNOPo->op_first->op_type != OP_GV
1748 || !(gv = cGVOPx_gv(cUNOPo->op_first)))
1750 return varname(gv, funny, 0, NULL, 0, subscript_type);
1753 varname(MUTABLE_GV(PL_compcv), funny, o->op_targ, NULL, 0, subscript_type);
1758 S_op_varname(pTHX_ const OP *o)
1760 return S_op_varname_subscript(aTHX_ o, 1);
1764 S_op_pretty(pTHX_ const OP *o, SV **retsv, const char **retpv)
1765 { /* or not so pretty :-) */
1766 if (o->op_type == OP_CONST) {
1768 if (SvPOK(*retsv)) {
1770 *retsv = sv_newmortal();
1771 pv_pretty(*retsv, SvPVX_const(sv), SvCUR(sv), 32, NULL, NULL,
1772 PERL_PV_PRETTY_DUMP |PERL_PV_ESCAPE_UNI_DETECT);
1774 else if (!SvOK(*retsv))
1777 else *retpv = "...";
1781 S_scalar_slice_warning(pTHX_ const OP *o)
1784 const bool h = o->op_type == OP_HSLICE
1785 || (o->op_type == OP_NULL && o->op_targ == OP_HSLICE);
1791 SV *keysv = NULL; /* just to silence compiler warnings */
1792 const char *key = NULL;
1794 if (!(o->op_private & OPpSLICEWARNING))
1796 if (PL_parser && PL_parser->error_count)
1797 /* This warning can be nonsensical when there is a syntax error. */
1800 kid = cLISTOPo->op_first;
1801 kid = OpSIBLING(kid); /* get past pushmark */
1802 /* weed out false positives: any ops that can return lists */
1803 switch (kid->op_type) {
1829 /* Don't warn if we have a nulled list either. */
1830 if (kid->op_type == OP_NULL && kid->op_targ == OP_LIST)
1833 assert(OpSIBLING(kid));
1834 name = S_op_varname(aTHX_ OpSIBLING(kid));
1835 if (!name) /* XS module fiddling with the op tree */
1837 S_op_pretty(aTHX_ kid, &keysv, &key);
1838 assert(SvPOK(name));
1839 sv_chop(name,SvPVX(name)+1);
1841 /* diag_listed_as: Scalar value @%s[%s] better written as $%s[%s] */
1842 Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
1843 "Scalar value @%" SVf "%c%s%c better written as $%" SVf
1845 SVfARG(name), lbrack, key, rbrack, SVfARG(name),
1846 lbrack, key, rbrack);
1848 /* diag_listed_as: Scalar value @%s[%s] better written as $%s[%s] */
1849 Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
1850 "Scalar value @%" SVf "%c%" SVf "%c better written as $%"
1852 SVfARG(name), lbrack, SVfARG(keysv), rbrack,
1853 SVfARG(name), lbrack, SVfARG(keysv), rbrack);
1858 /* apply scalar context to the o subtree */
1861 Perl_scalar(pTHX_ OP *o)
1866 OP *next_kid = NULL; /* what op (if any) to process next */
1869 /* assumes no premature commitment */
1870 if (!o || (PL_parser && PL_parser->error_count)
1871 || (o->op_flags & OPf_WANT)
1872 || o->op_type == OP_RETURN)
1877 o->op_flags = (o->op_flags & ~OPf_WANT) | OPf_WANT_SCALAR;
1879 switch (o->op_type) {
1881 scalar(cBINOPo->op_first);
1882 /* convert what initially looked like a list repeat into a
1883 * scalar repeat, e.g. $s = (1) x $n
1885 if (o->op_private & OPpREPEAT_DOLIST) {
1886 kid = cLISTOPx(cUNOPo->op_first)->op_first;
1887 assert(kid->op_type == OP_PUSHMARK);
1888 if (OpHAS_SIBLING(kid) && !OpHAS_SIBLING(OpSIBLING(kid))) {
1889 op_null(cLISTOPx(cUNOPo->op_first)->op_first);
1890 o->op_private &=~ OPpREPEAT_DOLIST;
1898 /* impose scalar context on everything except the condition */
1899 next_kid = OpSIBLING(cUNOPo->op_first);
1903 if (o->op_flags & OPf_KIDS)
1904 next_kid = cUNOPo->op_first; /* do all kids */
1907 /* the children of these ops are usually a list of statements,
1908 * except the leaves, whose first child is a corresponding enter
1913 kid = cLISTOPo->op_first;
1917 kid = cLISTOPo->op_first;
1919 kid = OpSIBLING(kid);
1922 OP *sib = OpSIBLING(kid);
1923 /* Apply void context to all kids except the last, which
1924 * is scalar (ignoring a trailing ex-nextstate in determining
1925 * if it's the last kid). E.g.
1926 * $scalar = do { void; void; scalar }
1927 * Except that 'when's are always scalar, e.g.
1928 * $scalar = do { given(..) {
1929 * when (..) { scalar }
1930 * when (..) { scalar }
1935 || ( !OpHAS_SIBLING(sib)
1936 && sib->op_type == OP_NULL
1937 && ( sib->op_targ == OP_NEXTSTATE
1938 || sib->op_targ == OP_DBSTATE )
1942 /* tail call optimise calling scalar() on the last kid */
1946 else if (kid->op_type == OP_LEAVEWHEN)
1952 NOT_REACHED; /* NOTREACHED */
1956 Perl_ck_warner(aTHX_ packWARN(WARN_VOID), "Useless use of sort in scalar context");
1962 /* Warn about scalar context */
1963 const char lbrack = o->op_type == OP_KVHSLICE ? '{' : '[';
1964 const char rbrack = o->op_type == OP_KVHSLICE ? '}' : ']';
1967 const char *key = NULL;
1969 /* This warning can be nonsensical when there is a syntax error. */
1970 if (PL_parser && PL_parser->error_count)
1973 if (!ckWARN(WARN_SYNTAX)) break;
1975 kid = cLISTOPo->op_first;
1976 kid = OpSIBLING(kid); /* get past pushmark */
1977 assert(OpSIBLING(kid));
1978 name = S_op_varname(aTHX_ OpSIBLING(kid));
1979 if (!name) /* XS module fiddling with the op tree */
1981 S_op_pretty(aTHX_ kid, &keysv, &key);
1982 assert(SvPOK(name));
1983 sv_chop(name,SvPVX(name)+1);
1985 /* diag_listed_as: %%s[%s] in scalar context better written as $%s[%s] */
1986 Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
1987 "%%%" SVf "%c%s%c in scalar context better written "
1988 "as $%" SVf "%c%s%c",
1989 SVfARG(name), lbrack, key, rbrack, SVfARG(name),
1990 lbrack, key, rbrack);
1992 /* diag_listed_as: %%s[%s] in scalar context better written as $%s[%s] */
1993 Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
1994 "%%%" SVf "%c%" SVf "%c in scalar context better "
1995 "written as $%" SVf "%c%" SVf "%c",
1996 SVfARG(name), lbrack, SVfARG(keysv), rbrack,
1997 SVfARG(name), lbrack, SVfARG(keysv), rbrack);
2001 /* If next_kid is set, someone in the code above wanted us to process
2002 * that kid and all its remaining siblings. Otherwise, work our way
2003 * back up the tree */
2007 return top_op; /* at top; no parents/siblings to try */
2008 if (OpHAS_SIBLING(o))
2009 next_kid = o->op_sibparent;
2011 o = o->op_sibparent; /*try parent's next sibling */
2012 switch (o->op_type) {
2018 /* should really restore PL_curcop to its old value, but
2019 * setting it to PL_compiling is better than do nothing */
2020 PL_curcop = &PL_compiling;
2029 /* apply void context to the optree arg */
2032 Perl_scalarvoid(pTHX_ OP *arg)
2039 PERL_ARGS_ASSERT_SCALARVOID;
2043 SV *useless_sv = NULL;
2044 const char* useless = NULL;
2045 OP * next_kid = NULL;
2047 if (o->op_type == OP_NEXTSTATE
2048 || o->op_type == OP_DBSTATE
2049 || (o->op_type == OP_NULL && (o->op_targ == OP_NEXTSTATE
2050 || o->op_targ == OP_DBSTATE)))
2051 PL_curcop = (COP*)o; /* for warning below */
2053 /* assumes no premature commitment */
2054 want = o->op_flags & OPf_WANT;
2055 if ((want && want != OPf_WANT_SCALAR)
2056 || (PL_parser && PL_parser->error_count)
2057 || o->op_type == OP_RETURN || o->op_type == OP_REQUIRE || o->op_type == OP_LEAVEWHEN)
2062 if ((o->op_private & OPpTARGET_MY)
2063 && (PL_opargs[o->op_type] & OA_TARGLEX))/* OPp share the meaning */
2065 /* newASSIGNOP has already applied scalar context, which we
2066 leave, as if this op is inside SASSIGN. */
2070 o->op_flags = (o->op_flags & ~OPf_WANT) | OPf_WANT_VOID;
2072 switch (o->op_type) {
2074 if (!(PL_opargs[o->op_type] & OA_FOLDCONST))
2078 if (o->op_flags & OPf_STACKED)
2080 if (o->op_type == OP_REPEAT)
2081 scalar(cBINOPo->op_first);
2084 if ((o->op_flags & OPf_STACKED) &&
2085 !(o->op_private & OPpCONCAT_NESTED))
2089 if (o->op_private == 4)
2124 case OP_GETSOCKNAME:
2125 case OP_GETPEERNAME:
2130 case OP_GETPRIORITY:
2155 useless = OP_DESC(o);
2165 case OP_AELEMFAST_LEX:
2169 if (!(o->op_private & (OPpLVAL_INTRO|OPpOUR_INTRO)))
2170 /* Otherwise it's "Useless use of grep iterator" */
2171 useless = OP_DESC(o);
2175 if (!(o->op_private & OPpSPLIT_ASSIGN))
2176 useless = OP_DESC(o);
2180 kid = cUNOPo->op_first;
2181 if (kid->op_type != OP_MATCH && kid->op_type != OP_SUBST &&
2182 kid->op_type != OP_TRANS && kid->op_type != OP_TRANSR) {
2185 useless = "negative pattern binding (!~)";
2189 if (cPMOPo->op_pmflags & PMf_NONDESTRUCT)
2190 useless = "non-destructive substitution (s///r)";
2194 useless = "non-destructive transliteration (tr///r)";
2201 if (!(o->op_private & (OPpLVAL_INTRO|OPpOUR_INTRO)) &&
2202 (!OpHAS_SIBLING(o) || OpSIBLING(o)->op_type != OP_READLINE))
2203 useless = "a variable";
2208 if (cSVOPo->op_private & OPpCONST_STRICT)
2209 no_bareword_allowed(o);
2211 if (ckWARN(WARN_VOID)) {
2213 /* don't warn on optimised away booleans, eg
2214 * use constant Foo, 5; Foo || print; */
2215 if (cSVOPo->op_private & OPpCONST_SHORTCIRCUIT)
2217 /* the constants 0 and 1 are permitted as they are
2218 conventionally used as dummies in constructs like
2219 1 while some_condition_with_side_effects; */
2220 else if (SvNIOK(sv) && ((nv = SvNV(sv)) == 0.0 || nv == 1.0))
2222 else if (SvPOK(sv)) {
2223 SV * const dsv = newSVpvs("");
2225 = Perl_newSVpvf(aTHX_
2227 pv_pretty(dsv, SvPVX_const(sv),
2228 SvCUR(sv), 32, NULL, NULL,
2230 | PERL_PV_ESCAPE_NOCLEAR
2231 | PERL_PV_ESCAPE_UNI_DETECT));
2232 SvREFCNT_dec_NN(dsv);
2234 else if (SvOK(sv)) {
2235 useless_sv = Perl_newSVpvf(aTHX_ "a constant (%" SVf ")", SVfARG(sv));
2238 useless = "a constant (undef)";
2241 op_null(o); /* don't execute or even remember it */
2245 OpTYPE_set(o, OP_PREINC); /* pre-increment is faster */
2249 OpTYPE_set(o, OP_PREDEC); /* pre-decrement is faster */
2253 OpTYPE_set(o, OP_I_PREINC); /* pre-increment is faster */
2257 OpTYPE_set(o, OP_I_PREDEC); /* pre-decrement is faster */
2262 UNOP *refgen, *rv2cv;
2265 if ((o->op_private & ~OPpASSIGN_BACKWARDS) != 2)
2268 rv2gv = ((BINOP *)o)->op_last;
2269 if (!rv2gv || rv2gv->op_type != OP_RV2GV)
2272 refgen = (UNOP *)((BINOP *)o)->op_first;
2274 if (!refgen || (refgen->op_type != OP_REFGEN
2275 && refgen->op_type != OP_SREFGEN))
2278 exlist = (LISTOP *)refgen->op_first;
2279 if (!exlist || exlist->op_type != OP_NULL
2280 || exlist->op_targ != OP_LIST)
2283 if (exlist->op_first->op_type != OP_PUSHMARK
2284 && exlist->op_first != exlist->op_last)
2287 rv2cv = (UNOP*)exlist->op_last;
2289 if (rv2cv->op_type != OP_RV2CV)
2292 assert ((rv2gv->op_private & OPpDONT_INIT_GV) == 0);
2293 assert ((o->op_private & OPpASSIGN_CV_TO_GV) == 0);
2294 assert ((rv2cv->op_private & OPpMAY_RETURN_CONSTANT) == 0);
2296 o->op_private |= OPpASSIGN_CV_TO_GV;
2297 rv2gv->op_private |= OPpDONT_INIT_GV;
2298 rv2cv->op_private |= OPpMAY_RETURN_CONSTANT;
2310 kid = cLOGOPo->op_first;
2311 if (kid->op_type == OP_NOT
2312 && (kid->op_flags & OPf_KIDS)) {
2313 if (o->op_type == OP_AND) {
2314 OpTYPE_set(o, OP_OR);
2316 OpTYPE_set(o, OP_AND);
2326 next_kid = OpSIBLING(cUNOPo->op_first);
2330 if (o->op_flags & OPf_STACKED)
2337 if (!(o->op_flags & OPf_KIDS))
2348 next_kid = cLISTOPo->op_first;
2351 /* If the first kid after pushmark is something that the padrange
2352 optimisation would reject, then null the list and the pushmark.
2354 if ((kid = cLISTOPo->op_first)->op_type == OP_PUSHMARK
2355 && ( !(kid = OpSIBLING(kid))
2356 || ( kid->op_type != OP_PADSV
2357 && kid->op_type != OP_PADAV
2358 && kid->op_type != OP_PADHV)
2359 || kid->op_private & ~OPpLVAL_INTRO
2360 || !(kid = OpSIBLING(kid))
2361 || ( kid->op_type != OP_PADSV
2362 && kid->op_type != OP_PADAV
2363 && kid->op_type != OP_PADHV)
2364 || kid->op_private & ~OPpLVAL_INTRO)
2366 op_null(cUNOPo->op_first); /* NULL the pushmark */
2367 op_null(o); /* NULL the list */
2379 /* mortalise it, in case warnings are fatal. */
2380 Perl_ck_warner(aTHX_ packWARN(WARN_VOID),
2381 "Useless use of %" SVf " in void context",
2382 SVfARG(sv_2mortal(useless_sv)));
2385 Perl_ck_warner(aTHX_ packWARN(WARN_VOID),
2386 "Useless use of %s in void context",
2391 /* if a kid hasn't been nominated to process, continue with the
2392 * next sibling, or if no siblings left, go back to the parent's
2393 * siblings and so on
2397 return arg; /* at top; no parents/siblings to try */
2398 if (OpHAS_SIBLING(o))
2399 next_kid = o->op_sibparent;
2401 o = o->op_sibparent; /*try parent's next sibling */
2411 S_listkids(pTHX_ OP *o)
2413 if (o && o->op_flags & OPf_KIDS) {
2415 for (kid = cLISTOPo->op_first; kid; kid = OpSIBLING(kid))
2422 /* apply list context to the o subtree */
2425 Perl_list(pTHX_ OP *o)
2430 OP *next_kid = NULL; /* what op (if any) to process next */
2434 /* assumes no premature commitment */
2435 if (!o || (o->op_flags & OPf_WANT)
2436 || (PL_parser && PL_parser->error_count)
2437 || o->op_type == OP_RETURN)
2442 if ((o->op_private & OPpTARGET_MY)
2443 && (PL_opargs[o->op_type] & OA_TARGLEX))/* OPp share the meaning */
2445 goto do_next; /* As if inside SASSIGN */
2448 o->op_flags = (o->op_flags & ~OPf_WANT) | OPf_WANT_LIST;
2450 switch (o->op_type) {
2452 if (o->op_private & OPpREPEAT_DOLIST
2453 && !(o->op_flags & OPf_STACKED))
2455 list(cBINOPo->op_first);
2456 kid = cBINOPo->op_last;
2457 /* optimise away (.....) x 1 */
2458 if (kid->op_type == OP_CONST && SvIOK(kSVOP_sv)
2459 && SvIVX(kSVOP_sv) == 1)
2461 op_null(o); /* repeat */
2462 op_null(cUNOPx(cBINOPo->op_first)->op_first);/* pushmark */
2464 op_free(op_sibling_splice(o, cBINOPo->op_first, 1, NULL));
2472 /* impose list context on everything except the condition */
2473 next_kid = OpSIBLING(cUNOPo->op_first);
2477 if (!(o->op_flags & OPf_KIDS))
2479 /* possibly flatten 1..10 into a constant array */
2480 if (!o->op_next && cUNOPo->op_first->op_type == OP_FLOP) {
2481 list(cBINOPo->op_first);
2482 gen_constant_list(o);
2485 next_kid = cUNOPo->op_first; /* do all kids */
2489 if (cLISTOPo->op_first->op_type == OP_PUSHMARK) {
2490 op_null(cUNOPo->op_first); /* NULL the pushmark */
2491 op_null(o); /* NULL the list */
2493 if (o->op_flags & OPf_KIDS)
2494 next_kid = cUNOPo->op_first; /* do all kids */
2497 /* the children of these ops are usually a list of statements,
2498 * except the leaves, whose first child is a corresponding enter
2502 kid = cLISTOPo->op_first;
2506 kid = cLISTOPo->op_first;
2508 kid = OpSIBLING(kid);
2511 OP *sib = OpSIBLING(kid);
2512 /* Apply void context to all kids except the last, which
2514 * @a = do { void; void; list }
2515 * Except that 'when's are always list context, e.g.
2516 * @a = do { given(..) {
2517 * when (..) { list }
2518 * when (..) { list }
2523 /* tail call optimise calling list() on the last kid */
2527 else if (kid->op_type == OP_LEAVEWHEN)
2533 NOT_REACHED; /* NOTREACHED */
2538 /* If next_kid is set, someone in the code above wanted us to process
2539 * that kid and all its remaining siblings. Otherwise, work our way
2540 * back up the tree */
2544 return top_op; /* at top; no parents/siblings to try */
2545 if (OpHAS_SIBLING(o))
2546 next_kid = o->op_sibparent;
2548 o = o->op_sibparent; /*try parent's next sibling */
2549 switch (o->op_type) {
2555 /* should really restore PL_curcop to its old value, but
2556 * setting it to PL_compiling is better than do nothing */
2557 PL_curcop = &PL_compiling;
2569 S_scalarseq(pTHX_ OP *o)
2572 const OPCODE type = o->op_type;
2574 if (type == OP_LINESEQ || type == OP_SCOPE ||
2575 type == OP_LEAVE || type == OP_LEAVETRY)
2578 for (kid = cLISTOPo->op_first; kid; kid = sib) {
2579 if ((sib = OpSIBLING(kid))
2580 && ( OpHAS_SIBLING(sib) || sib->op_type != OP_NULL
2581 || ( sib->op_targ != OP_NEXTSTATE
2582 && sib->op_targ != OP_DBSTATE )))
2587 PL_curcop = &PL_compiling;
2589 o->op_flags &= ~OPf_PARENS;
2590 if (PL_hints & HINT_BLOCK_SCOPE)
2591 o->op_flags |= OPf_PARENS;
2594 o = newOP(OP_STUB, 0);
2599 S_modkids(pTHX_ OP *o, I32 type)
2601 if (o && o->op_flags & OPf_KIDS) {
2603 for (kid = cLISTOPo->op_first; kid; kid = OpSIBLING(kid))
2604 op_lvalue(kid, type);
2610 /* for a helem/hslice/kvslice, if its a fixed hash, croak on invalid
2611 * const fields. Also, convert CONST keys to HEK-in-SVs.
2612 * rop is the op that retrieves the hash;
2613 * key_op is the first key
2614 * real if false, only check (and possibly croak); don't update op
2618 S_check_hash_fields_and_hekify(pTHX_ UNOP *rop, SVOP *key_op, int real)
2624 /* find the padsv corresponding to $lex->{} or @{$lex}{} */
2626 if (rop->op_first->op_type == OP_PADSV)
2627 /* @$hash{qw(keys here)} */
2628 rop = (UNOP*)rop->op_first;
2630 /* @{$hash}{qw(keys here)} */
2631 if (rop->op_first->op_type == OP_SCOPE
2632 && cLISTOPx(rop->op_first)->op_last->op_type == OP_PADSV)
2634 rop = (UNOP*)cLISTOPx(rop->op_first)->op_last;
2641 lexname = NULL; /* just to silence compiler warnings */
2642 fields = NULL; /* just to silence compiler warnings */
2646 && (lexname = padnamelist_fetch(PL_comppad_name, rop->op_targ),
2647 SvPAD_TYPED(lexname))
2648 && (fields = (GV**)hv_fetchs(PadnameTYPE(lexname), "FIELDS", FALSE))
2649 && isGV(*fields) && GvHV(*fields);
2651 for (; key_op; key_op = (SVOP*)OpSIBLING(key_op)) {
2653 if (key_op->op_type != OP_CONST)
2655 svp = cSVOPx_svp(key_op);
2657 /* make sure it's not a bareword under strict subs */
2658 if (key_op->op_private & OPpCONST_BARE &&
2659 key_op->op_private & OPpCONST_STRICT)
2661 no_bareword_allowed((OP*)key_op);
2664 /* Make the CONST have a shared SV */
2665 if ( !SvIsCOW_shared_hash(sv = *svp)
2666 && SvTYPE(sv) < SVt_PVMG
2672 const char * const key = SvPV_const(sv, *(STRLEN*)&keylen);
2673 SV *nsv = newSVpvn_share(key, SvUTF8(sv) ? -keylen : keylen, 0);
2674 SvREFCNT_dec_NN(sv);
2679 && !hv_fetch_ent(GvHV(*fields), *svp, FALSE, 0))
2681 Perl_croak(aTHX_ "No such class field \"%" SVf "\" "
2682 "in variable %" PNf " of type %" HEKf,
2683 SVfARG(*svp), PNfARG(lexname),
2684 HEKfARG(HvNAME_HEK(PadnameTYPE(lexname))));
2689 /* info returned by S_sprintf_is_multiconcatable() */
2691 struct sprintf_ismc_info {
2692 SSize_t nargs; /* num of args to sprintf (not including the format) */
2693 char *start; /* start of raw format string */
2694 char *end; /* bytes after end of raw format string */
2695 STRLEN total_len; /* total length (in bytes) of format string, not
2696 including '%s' and half of '%%' */
2697 STRLEN variant; /* number of bytes by which total_len_p would grow
2698 if upgraded to utf8 */
2699 bool utf8; /* whether the format is utf8 */
2703 /* is the OP_SPRINTF o suitable for converting into a multiconcat op?
2704 * i.e. its format argument is a const string with only '%s' and '%%'
2705 * formats, and the number of args is known, e.g.
2706 * sprintf "a=%s f=%s", $a[0], scalar(f());
2708 * sprintf "i=%d a=%s f=%s", $i, @a, f();
2710 * If successful, the sprintf_ismc_info struct pointed to by info will be
2715 S_sprintf_is_multiconcatable(pTHX_ OP *o,struct sprintf_ismc_info *info)
2717 OP *pm, *constop, *kid;
2720 SSize_t nargs, nformats;
2721 STRLEN cur, total_len, variant;
2724 /* if sprintf's behaviour changes, die here so that someone
2725 * can decide whether to enhance this function or skip optimising
2726 * under those new circumstances */
2727 assert(!(o->op_flags & OPf_STACKED));
2728 assert(!(PL_opargs[OP_SPRINTF] & OA_TARGLEX));
2729 assert(!(o->op_private & ~OPpARG4_MASK));
2731 pm = cUNOPo->op_first;
2732 if (pm->op_type != OP_PUSHMARK) /* weird coreargs stuff */
2734 constop = OpSIBLING(pm);
2735 if (!constop || constop->op_type != OP_CONST)
2737 sv = cSVOPx_sv(constop);
2738 if (SvMAGICAL(sv) || !SvPOK(sv))
2744 /* Scan format for %% and %s and work out how many %s there are.
2745 * Abandon if other format types are found.
2752 for (p = s; p < e; p++) {
2755 if (!UTF8_IS_INVARIANT(*p))
2761 return FALSE; /* lone % at end gives "Invalid conversion" */
2770 if (!nformats || nformats > PERL_MULTICONCAT_MAXARG)
2773 utf8 = cBOOL(SvUTF8(sv));
2777 /* scan args; they must all be in scalar cxt */
2780 kid = OpSIBLING(constop);
2783 if ((kid->op_flags & OPf_WANT) != OPf_WANT_SCALAR)
2786 kid = OpSIBLING(kid);
2789 if (nargs != nformats)
2790 return FALSE; /* e.g. sprintf("%s%s", $a); */
2793 info->nargs = nargs;
2796 info->total_len = total_len;
2797 info->variant = variant;
2805 /* S_maybe_multiconcat():
2807 * given an OP_STRINGIFY, OP_SASSIGN, OP_CONCAT or OP_SPRINTF op, possibly
2808 * convert it (and its children) into an OP_MULTICONCAT. See the code
2809 * comments just before pp_multiconcat() for the full details of what
2810 * OP_MULTICONCAT supports.
2812 * Basically we're looking for an optree with a chain of OP_CONCATS down
2813 * the LHS (or an OP_SPRINTF), with possibly an OP_SASSIGN, and/or
2814 * OP_STRINGIFY, and/or OP_CONCAT acting as '.=' at its head, e.g.
2822 * STRINGIFY -- PADSV[$x]
2825 * ex-PUSHMARK -- CONCAT/S
2827 * CONCAT/S -- PADSV[$d]
2829 * CONCAT -- CONST["-"]
2831 * PADSV[$a] -- PADSV[$b]
2833 * Note that at this stage the OP_SASSIGN may have already been optimised
2834 * away with OPpTARGET_MY set on the OP_STRINGIFY or OP_CONCAT.
2838 S_maybe_multiconcat(pTHX_ OP *o)
2841 OP *lastkidop; /* the right-most of any kids unshifted onto o */
2842 OP *topop; /* the top-most op in the concat tree (often equals o,
2843 unless there are assign/stringify ops above it */
2844 OP *parentop; /* the parent op of topop (or itself if no parent) */
2845 OP *targmyop; /* the op (if any) with the OPpTARGET_MY flag */
2846 OP *targetop; /* the op corresponding to target=... or target.=... */
2847 OP *stringop; /* the OP_STRINGIFY op, if any */
2848 OP *nextop; /* used for recreating the op_next chain without consts */
2849 OP *kid; /* general-purpose op pointer */
2851 UNOP_AUX_item *lenp;
2852 char *const_str, *p;
2853 struct sprintf_ismc_info sprintf_info;
2855 /* store info about each arg in args[];
2856 * toparg is the highest used slot; argp is a general
2857 * pointer to args[] slots */
2859 void *p; /* initially points to const sv (or null for op);
2860 later, set to SvPV(constsv), with ... */
2861 STRLEN len; /* ... len set to SvPV(..., len) */
2862 } *argp, *toparg, args[PERL_MULTICONCAT_MAXARG*2 + 1];
2866 SSize_t nadjconst = 0; /* adjacent consts - may be demoted to args */
2869 bool kid_is_last = FALSE; /* most args will be the RHS kid of a concat op;
2870 the last-processed arg will the LHS of one,
2871 as args are processed in reverse order */
2872 U8 stacked_last = 0; /* whether the last seen concat op was STACKED */
2873 STRLEN total_len = 0; /* sum of the lengths of the const segments */
2874 U8 flags = 0; /* what will become the op_flags and ... */
2875 U8 private_flags = 0; /* ... op_private of the multiconcat op */
2876 bool is_sprintf = FALSE; /* we're optimising an sprintf */
2877 bool is_targable = FALSE; /* targetop is an OPpTARGET_MY candidate */
2878 bool prev_was_const = FALSE; /* previous arg was a const */
2880 /* -----------------------------------------------------------------
2883 * Examine the optree non-destructively to determine whether it's
2884 * suitable to be converted into an OP_MULTICONCAT. Accumulate
2885 * information about the optree in args[].
2895 assert( o->op_type == OP_SASSIGN
2896 || o->op_type == OP_CONCAT
2897 || o->op_type == OP_SPRINTF
2898 || o->op_type == OP_STRINGIFY);
2900 Zero(&sprintf_info, 1, struct sprintf_ismc_info);
2902 /* first see if, at the top of the tree, there is an assign,
2903 * append and/or stringify */
2905 if (topop->op_type == OP_SASSIGN) {
2907 if (o->op_ppaddr != PL_ppaddr[OP_SASSIGN])
2909 if (o->op_private & (OPpASSIGN_BACKWARDS|OPpASSIGN_CV_TO_GV))
2911 assert(!(o->op_private & ~OPpARG2_MASK)); /* barf on unknown flags */
2914 topop = cBINOPo->op_first;
2915 targetop = OpSIBLING(topop);
2916 if (!targetop) /* probably some sort of syntax error */
2919 else if ( topop->op_type == OP_CONCAT
2920 && (topop->op_flags & OPf_STACKED)
2921 && (!(topop->op_private & OPpCONCAT_NESTED))
2926 /* OPpTARGET_MY shouldn't be able to be set here. If it is,
2927 * decide what to do about it */
2928 assert(!(o->op_private & OPpTARGET_MY));
2930 /* barf on unknown flags */
2931 assert(!(o->op_private & ~(OPpARG2_MASK|OPpTARGET_MY)));
2932 private_flags |= OPpMULTICONCAT_APPEND;
2933 targetop = cBINOPo->op_first;
2935 topop = OpSIBLING(targetop);
2937 /* $x .= <FOO> gets optimised to rcatline instead */
2938 if (topop->op_type == OP_READLINE)
2943 /* Can targetop (the LHS) if it's a padsv, be be optimised
2944 * away and use OPpTARGET_MY instead?
2946 if ( (targetop->op_type == OP_PADSV)
2947 && !(targetop->op_private & OPpDEREF)
2948 && !(targetop->op_private & OPpPAD_STATE)
2949 /* we don't support 'my $x .= ...' */
2950 && ( o->op_type == OP_SASSIGN
2951 || !(targetop->op_private & OPpLVAL_INTRO))
2956 if (topop->op_type == OP_STRINGIFY) {
2957 if (topop->op_ppaddr != PL_ppaddr[OP_STRINGIFY])
2961 /* barf on unknown flags */
2962 assert(!(o->op_private & ~(OPpARG4_MASK|OPpTARGET_MY)));
2964 if ((topop->op_private & OPpTARGET_MY)) {
2965 if (o->op_type == OP_SASSIGN)
2966 return; /* can't have two assigns */
2970 private_flags |= OPpMULTICONCAT_STRINGIFY;
2972 topop = cBINOPx(topop)->op_first;
2973 assert(OP_TYPE_IS_OR_WAS_NN(topop, OP_PUSHMARK));
2974 topop = OpSIBLING(topop);
2977 if (topop->op_type == OP_SPRINTF) {
2978 if (topop->op_ppaddr != PL_ppaddr[OP_SPRINTF])
2980 if (S_sprintf_is_multiconcatable(aTHX_ topop, &sprintf_info)) {
2981 nargs = sprintf_info.nargs;
2982 total_len = sprintf_info.total_len;
2983 variant = sprintf_info.variant;
2984 utf8 = sprintf_info.utf8;
2986 private_flags |= OPpMULTICONCAT_FAKE;
2988 /* we have an sprintf op rather than a concat optree.
2989 * Skip most of the code below which is associated with
2990 * processing that optree. We also skip phase 2, determining
2991 * whether its cost effective to optimise, since for sprintf,
2992 * multiconcat is *always* faster */
2995 /* note that even if the sprintf itself isn't multiconcatable,
2996 * the expression as a whole may be, e.g. in
2997 * $x .= sprintf("%d",...)
2998 * the sprintf op will be left as-is, but the concat/S op may
2999 * be upgraded to multiconcat
3002 else if (topop->op_type == OP_CONCAT) {
3003 if (topop->op_ppaddr != PL_ppaddr[OP_CONCAT])
3006 if ((topop->op_private & OPpTARGET_MY)) {
3007 if (o->op_type == OP_SASSIGN || targmyop)
3008 return; /* can't have two assigns */
3013 /* Is it safe to convert a sassign/stringify/concat op into
3015 assert((PL_opargs[OP_SASSIGN] & OA_CLASS_MASK) == OA_BINOP);
3016 assert((PL_opargs[OP_CONCAT] & OA_CLASS_MASK) == OA_BINOP);
3017 assert((PL_opargs[OP_STRINGIFY] & OA_CLASS_MASK) == OA_LISTOP);
3018 assert((PL_opargs[OP_SPRINTF] & OA_CLASS_MASK) == OA_LISTOP);
3019 STATIC_ASSERT_STMT( STRUCT_OFFSET(BINOP, op_last)
3020 == STRUCT_OFFSET(UNOP_AUX, op_aux));
3021 STATIC_ASSERT_STMT( STRUCT_OFFSET(LISTOP, op_last)
3022 == STRUCT_OFFSET(UNOP_AUX, op_aux));
3024 /* Now scan the down the tree looking for a series of
3025 * CONCAT/OPf_STACKED ops on the LHS (with the last one not
3026 * stacked). For example this tree:
3031 * CONCAT/STACKED -- EXPR5
3033 * CONCAT/STACKED -- EXPR4
3039 * corresponds to an expression like
3041 * (EXPR1 . EXPR2 . EXPR3 . EXPR4 . EXPR5)
3043 * Record info about each EXPR in args[]: in particular, whether it is
3044 * a stringifiable OP_CONST and if so what the const sv is.
3046 * The reason why the last concat can't be STACKED is the difference
3049 * ((($a .= $a) .= $a) .= $a) .= $a
3052 * $a . $a . $a . $a . $a
3054 * The main difference between the optrees for those two constructs
3055 * is the presence of the last STACKED. As well as modifying $a,
3056 * the former sees the changed $a between each concat, so if $s is
3057 * initially 'a', the first returns 'a' x 16, while the latter returns
3058 * 'a' x 5. And pp_multiconcat can't handle that kind of thing.
3068 if ( kid->op_type == OP_CONCAT
3072 k1 = cUNOPx(kid)->op_first;
3074 /* shouldn't happen except maybe after compile err? */
3078 /* avoid turning (A . B . ($lex = C) ...) into (A . B . C ...) */
3079 if (kid->op_private & OPpTARGET_MY)
3082 stacked_last = (kid->op_flags & OPf_STACKED);
3094 if ( nargs + nadjconst > PERL_MULTICONCAT_MAXARG - 2
3095 || (argp - args + 1) > (PERL_MULTICONCAT_MAXARG*2 + 1) - 2)
3097 /* At least two spare slots are needed to decompose both
3098 * concat args. If there are no slots left, continue to
3099 * examine the rest of the optree, but don't push new values
3100 * on args[]. If the optree as a whole is legal for conversion
3101 * (in particular that the last concat isn't STACKED), then
3102 * the first PERL_MULTICONCAT_MAXARG elements of the optree
3103 * can be converted into an OP_MULTICONCAT now, with the first
3104 * child of that op being the remainder of the optree -
3105 * which may itself later be converted to a multiconcat op
3109 /* the last arg is the rest of the optree */
3114 else if ( argop->op_type == OP_CONST
3115 && ((sv = cSVOPx_sv(argop)))
3116 /* defer stringification until runtime of 'constant'
3117 * things that might stringify variantly, e.g. the radix
3118 * point of NVs, or overloaded RVs */
3119 && (SvPOK(sv) || SvIOK(sv))
3120 && (!SvGMAGICAL(sv))
3122 if (argop->op_private & OPpCONST_STRICT)
3123 no_bareword_allowed(argop);
3125 utf8 |= cBOOL(SvUTF8(sv));
3128 /* this const may be demoted back to a plain arg later;
3129 * make sure we have enough arg slots left */
3131 prev_was_const = !prev_was_const;
3136 prev_was_const = FALSE;
3146 return; /* we don't support ((A.=B).=C)...) */
3148 /* look for two adjacent consts and don't fold them together:
3151 * $o->concat("a")->concat("b")
3154 * (but $o .= "a" . "b" should still fold)
3157 bool seen_nonconst = FALSE;
3158 for (argp = toparg; argp >= args; argp--) {
3159 if (argp->p == NULL) {
3160 seen_nonconst = TRUE;
3166 /* both previous and current arg were constants;
3167 * leave the current OP_CONST as-is */
3175 /* -----------------------------------------------------------------
3178 * At this point we have determined that the optree *can* be converted
3179 * into a multiconcat. Having gathered all the evidence, we now decide
3180 * whether it *should*.
3184 /* we need at least one concat action, e.g.:
3190 * otherwise we could be doing something like $x = "foo", which
3191 * if treated as as a concat, would fail to COW.
3193 if (nargs + nconst + cBOOL(private_flags & OPpMULTICONCAT_APPEND) < 2)
3196 /* Benchmarking seems to indicate that we gain if:
3197 * * we optimise at least two actions into a single multiconcat
3198 * (e.g concat+concat, sassign+concat);
3199 * * or if we can eliminate at least 1 OP_CONST;
3200 * * or if we can eliminate a padsv via OPpTARGET_MY
3204 /* eliminated at least one OP_CONST */
3206 /* eliminated an OP_SASSIGN */
3207 || o->op_type == OP_SASSIGN
3208 /* eliminated an OP_PADSV */
3209 || (!targmyop && is_targable)
3211 /* definitely a net gain to optimise */
3214 /* ... if not, what else? */
3216 /* special-case '$lex1 = expr . $lex1' (where expr isn't lex1):
3217 * multiconcat is faster (due to not creating a temporary copy of
3218 * $lex1), whereas for a general $lex1 = $lex2 . $lex3, concat is
3224 && topop->op_type == OP_CONCAT
3226 PADOFFSET t = targmyop->op_targ;
3227 OP *k1 = cBINOPx(topop)->op_first;
3228 OP *k2 = cBINOPx(topop)->op_last;
3229 if ( k2->op_type == OP_PADSV
3231 && ( k1->op_type != OP_PADSV
3232 || k1->op_targ != t)
3237 /* need at least two concats */
3238 if (nargs + nconst + cBOOL(private_flags & OPpMULTICONCAT_APPEND) < 3)
3243 /* -----------------------------------------------------------------
3246 * At this point the optree has been verified as ok to be optimised
3247 * into an OP_MULTICONCAT. Now start changing things.
3252 /* stringify all const args and determine utf8ness */
3255 for (argp = args; argp <= toparg; argp++) {
3256 SV *sv = (SV*)argp->p;
3258 continue; /* not a const op */
3259 if (utf8 && !SvUTF8(sv))
3260 sv_utf8_upgrade_nomg(sv);
3261 argp->p = SvPV_nomg(sv, argp->len);
3262 total_len += argp->len;
3264 /* see if any strings would grow if converted to utf8 */
3266 variant += variant_under_utf8_count((U8 *) argp->p,
3267 (U8 *) argp->p + argp->len);
3271 /* create and populate aux struct */
3275 aux = (UNOP_AUX_item*)PerlMemShared_malloc(
3276 sizeof(UNOP_AUX_item)
3278 PERL_MULTICONCAT_HEADER_SIZE
3279 + ((nargs + 1) * (variant ? 2 : 1))
3282 const_str = (char *)PerlMemShared_malloc(total_len ? total_len : 1);
3284 /* Extract all the non-const expressions from the concat tree then
3285 * dispose of the old tree, e.g. convert the tree from this:
3289 * STRINGIFY -- TARGET
3291 * ex-PUSHMARK -- CONCAT
3306 * ex-PUSHMARK -- EXPR1 -- EXPR2 -- EXPR3 -- EXPR4 -- EXPR5 -- TARGET
3308 * except that if EXPRi is an OP_CONST, it's discarded.
3310 * During the conversion process, EXPR ops are stripped from the tree
3311 * and unshifted onto o. Finally, any of o's remaining original
3312 * childen are discarded and o is converted into an OP_MULTICONCAT.
3314 * In this middle of this, o may contain both: unshifted args on the
3315 * left, and some remaining original args on the right. lastkidop
3316 * is set to point to the right-most unshifted arg to delineate
3317 * between the two sets.
3322 /* create a copy of the format with the %'s removed, and record
3323 * the sizes of the const string segments in the aux struct */
3325 lenp = aux + PERL_MULTICONCAT_IX_LENGTHS;
3327 p = sprintf_info.start;
3330 for (; p < sprintf_info.end; p++) {
3334 (lenp++)->ssize = q - oldq;
3341 lenp->ssize = q - oldq;
3342 assert((STRLEN)(q - const_str) == total_len);
3344 /* Attach all the args (i.e. the kids of the sprintf) to o (which
3345 * may or may not be topop) The pushmark and const ops need to be
3346 * kept in case they're an op_next entry point.
3348 lastkidop = cLISTOPx(topop)->op_last;
3349 kid = cUNOPx(topop)->op_first; /* pushmark */
3351 op_null(OpSIBLING(kid)); /* const */
3353 kid = op_sibling_splice(topop, NULL, -1, NULL); /* cut all args */
3354 op_sibling_splice(o, NULL, 0, kid); /* and attach to o */
3355 lastkidop->op_next = o;
3360 lenp = aux + PERL_MULTICONCAT_IX_LENGTHS;
3364 /* Concatenate all const strings into const_str.
3365 * Note that args[] contains the RHS args in reverse order, so
3366 * we scan args[] from top to bottom to get constant strings
3369 for (argp = toparg; argp >= args; argp--) {
3371 /* not a const op */
3372 (++lenp)->ssize = -1;
3374 STRLEN l = argp->len;
3375 Copy(argp->p, p, l, char);
3377 if (lenp->ssize == -1)
3388 for (argp = args; argp <= toparg; argp++) {
3389 /* only keep non-const args, except keep the first-in-next-chain
3390 * arg no matter what it is (but nulled if OP_CONST), because it
3391 * may be the entry point to this subtree from the previous
3394 bool last = (argp == toparg);
3397 /* set prev to the sibling *before* the arg to be cut out,
3398 * e.g. when cutting EXPR:
3403 * prev= CONCAT -- EXPR
3406 if (argp == args && kid->op_type != OP_CONCAT) {
3407 /* in e.g. '$x .= f(1)' there's no RHS concat tree
3408 * so the expression to be cut isn't kid->op_last but
3411 /* find the op before kid */
3413 o2 = cUNOPx(parentop)->op_first;
3414 while (o2 && o2 != kid) {
3422 else if (kid == o && lastkidop)
3423 prev = last ? lastkidop : OpSIBLING(lastkidop);
3425 prev = last ? NULL : cUNOPx(kid)->op_first;
3427 if (!argp->p || last) {
3429 OP *aop = op_sibling_splice(kid, prev, 1, NULL);
3430 /* and unshift to front of o */
3431 op_sibling_splice(o, NULL, 0, aop);
3432 /* record the right-most op added to o: later we will
3433 * free anything to the right of it */
3436 aop->op_next = nextop;
3439 /* null the const at start of op_next chain */
3443 nextop = prev->op_next;
3446 /* the last two arguments are both attached to the same concat op */
3447 if (argp < toparg - 1)
3452 /* Populate the aux struct */
3454 aux[PERL_MULTICONCAT_IX_NARGS].ssize = nargs;
3455 aux[PERL_MULTICONCAT_IX_PLAIN_PV].pv = utf8 ? NULL : const_str;
3456 aux[PERL_MULTICONCAT_IX_PLAIN_LEN].ssize = utf8 ? 0 : total_len;
3457 aux[PERL_MULTICONCAT_IX_UTF8_PV].pv = const_str;
3458 aux[PERL_MULTICONCAT_IX_UTF8_LEN].ssize = total_len;
3460 /* if variant > 0, calculate a variant const string and lengths where
3461 * the utf8 version of the string will take 'variant' more bytes than
3465 char *p = const_str;
3466 STRLEN ulen = total_len + variant;
3467 UNOP_AUX_item *lens = aux + PERL_MULTICONCAT_IX_LENGTHS;
3468 UNOP_AUX_item *ulens = lens + (nargs + 1);
3469 char *up = (char*)PerlMemShared_malloc(ulen);
3472 aux[PERL_MULTICONCAT_IX_UTF8_PV].pv = up;
3473 aux[PERL_MULTICONCAT_IX_UTF8_LEN].ssize = ulen;
3475 for (n = 0; n < (nargs + 1); n++) {
3477 char * orig_up = up;
3478 for (i = (lens++)->ssize; i > 0; i--) {
3480 append_utf8_from_native_byte(c, (U8**)&up);
3482 (ulens++)->ssize = (i < 0) ? i : up - orig_up;
3487 /* if there was a top(ish)-level OP_STRINGIFY, we need to keep
3488 * that op's first child - an ex-PUSHMARK - because the op_next of
3489 * the previous op may point to it (i.e. it's the entry point for
3494 ? op_sibling_splice(o, lastkidop, 1, NULL)
3495 : op_sibling_splice(stringop, NULL, 1, NULL);
3496 assert(OP_TYPE_IS_OR_WAS_NN(pmop, OP_PUSHMARK));
3497 op_sibling_splice(o, NULL, 0, pmop);
3504 * target .= A.B.C...
3510 if (o->op_type == OP_SASSIGN) {
3511 /* Move the target subtree from being the last of o's children
3512 * to being the last of o's preserved children.
3513 * Note the difference between 'target = ...' and 'target .= ...':
3514 * for the former, target is executed last; for the latter,
3517 kid = OpSIBLING(lastkidop);
3518 op_sibling_splice(o, kid, 1, NULL); /* cut target op */
3519 op_sibling_splice(o, lastkidop, 0, targetop); /* and paste */
3520 lastkidop->op_next = kid->op_next;
3521 lastkidop = targetop;
3524 /* Move the target subtree from being the first of o's
3525 * original children to being the first of *all* o's children.
3528 op_sibling_splice(o, lastkidop, 1, NULL); /* cut target op */
3529 op_sibling_splice(o, NULL, 0, targetop); /* and paste*/
3532 /* if the RHS of .= doesn't contain a concat (e.g.
3533 * $x .= "foo"), it gets missed by the "strip ops from the
3534 * tree and add to o" loop earlier */
3535 assert(topop->op_type != OP_CONCAT);
3537 /* in e.g. $x .= "$y", move the $y expression
3538 * from being a child of OP_STRINGIFY to being the
3539 * second child of the OP_CONCAT
3541 assert(cUNOPx(stringop)->op_first == topop);
3542 op_sibling_splice(stringop, NULL, 1, NULL);
3543 op_sibling_splice(o, cUNOPo->op_first, 0, topop);
3545 assert(topop == OpSIBLING(cBINOPo->op_first));
3554 * my $lex = A.B.C...
3557 * The original padsv op is kept but nulled in case it's the
3558 * entry point for the optree (which it will be for
3561 private_flags |= OPpTARGET_MY;
3562 private_flags |= (targetop->op_private & OPpLVAL_INTRO);
3563 o->op_targ = targetop->op_targ;
3564 targetop->op_targ = 0;
3568 flags |= OPf_STACKED;
3570 else if (targmyop) {
3571 private_flags |= OPpTARGET_MY;
3572 if (o != targmyop) {
3573 o->op_targ = targmyop->op_targ;
3574 targmyop->op_targ = 0;
3578 /* detach the emaciated husk of the sprintf/concat optree and free it */
3580 kid = op_sibling_splice(o, lastkidop, 1, NULL);
3586 /* and convert o into a multiconcat */
3588 o->op_flags = (flags|OPf_KIDS|stacked_last
3589 |(o->op_flags & (OPf_WANT|OPf_PARENS)));
3590 o->op_private = private_flags;
3591 o->op_type = OP_MULTICONCAT;
3592 o->op_ppaddr = PL_ppaddr[OP_MULTICONCAT];
3593 cUNOP_AUXo->op_aux = aux;
3597 /* do all the final processing on an optree (e.g. running the peephole
3598 * optimiser on it), then attach it to cv (if cv is non-null)
3602 S_process_optree(pTHX_ CV *cv, OP *optree, OP* start)
3606 /* XXX for some reason, evals, require and main optrees are
3607 * never attached to their CV; instead they just hang off
3608 * PL_main_root + PL_main_start or PL_eval_root + PL_eval_start
3609 * and get manually freed when appropriate */
3611 startp = &CvSTART(cv);
3613 startp = PL_in_eval? &PL_eval_start : &PL_main_start;
3616 optree->op_private |= OPpREFCOUNTED;
3617 OpREFCNT_set(optree, 1);
3618 optimize_optree(optree);
3620 finalize_optree(optree);
3621 S_prune_chain_head(startp);
3624 /* now that optimizer has done its work, adjust pad values */
3625 pad_tidy(optree->op_type == OP_LEAVEWRITE ? padtidy_FORMAT
3626 : CvCLONE(cv) ? padtidy_SUBCLONE : padtidy_SUB);
3632 =for apidoc optimize_optree
3634 This function applies some optimisations to the optree in top-down order.
3635 It is called before the peephole optimizer, which processes ops in
3636 execution order. Note that finalize_optree() also does a top-down scan,
3637 but is called *after* the peephole optimizer.
3643 Perl_optimize_optree(pTHX_ OP* o)
3645 PERL_ARGS_ASSERT_OPTIMIZE_OPTREE;
3648 SAVEVPTR(PL_curcop);
3656 /* helper for optimize_optree() which optimises one op then recurses
3657 * to optimise any children.
3661 S_optimize_op(pTHX_ OP* o)
3665 PERL_ARGS_ASSERT_OPTIMIZE_OP;
3668 OP * next_kid = NULL;
3670 assert(o->op_type != OP_FREED);
3672 switch (o->op_type) {
3675 PL_curcop = ((COP*)o); /* for warnings */
3683 S_maybe_multiconcat(aTHX_ o);
3687 if (cPMOPo->op_pmreplrootu.op_pmreplroot) {
3688 /* we can't assume that op_pmreplroot->op_sibparent == o
3689 * and that it is thus possible to walk back up the tree
3690 * past op_pmreplroot. So, although we try to avoid
3691 * recursing through op trees, do it here. After all,
3692 * there are unlikely to be many nested s///e's within
3693 * the replacement part of a s///e.
3695 optimize_op(cPMOPo->op_pmreplrootu.op_pmreplroot);
3703 if (o->op_flags & OPf_KIDS)
3704 next_kid = cUNOPo->op_first;
3706 /* if a kid hasn't been nominated to process, continue with the
3707 * next sibling, or if no siblings left, go back to the parent's
3708 * siblings and so on
3712 return; /* at top; no parents/siblings to try */
3713 if (OpHAS_SIBLING(o))
3714 next_kid = o->op_sibparent;
3716 o = o->op_sibparent; /*try parent's next sibling */
3719 /* this label not yet used. Goto here if any code above sets
3729 =for apidoc finalize_optree
3731 This function finalizes the optree. Should be called directly after
3732 the complete optree is built. It does some additional
3733 checking which can't be done in the normal C<ck_>xxx functions and makes
3734 the tree thread-safe.
3739 Perl_finalize_optree(pTHX_ OP* o)
3741 PERL_ARGS_ASSERT_FINALIZE_OPTREE;
3744 SAVEVPTR(PL_curcop);
3752 /* Relocate sv to the pad for thread safety.
3753 * Despite being a "constant", the SV is written to,
3754 * for reference counts, sv_upgrade() etc. */
3755 PERL_STATIC_INLINE void
3756 S_op_relocate_sv(pTHX_ SV** svp, PADOFFSET* targp)
3759 PERL_ARGS_ASSERT_OP_RELOCATE_SV;
3761 ix = pad_alloc(OP_CONST, SVf_READONLY);
3762 SvREFCNT_dec(PAD_SVl(ix));
3763 PAD_SETSV(ix, *svp);
3764 /* XXX I don't know how this isn't readonly already. */
3765 if (!SvIsCOW(PAD_SVl(ix))) SvREADONLY_on(PAD_SVl(ix));
3772 =for apidoc traverse_op_tree
3774 Return the next op in a depth-first traversal of the op tree,
3775 returning NULL when the traversal is complete.
3777 The initial call must supply the root of the tree as both top and o.
3779 For now it's static, but it may be exposed to the API in the future.
3785 S_traverse_op_tree(pTHX_ OP *top, OP *o) {
3788 PERL_ARGS_ASSERT_TRAVERSE_OP_TREE;
3790 if ((o->op_flags & OPf_KIDS) && cUNOPo->op_first) {
3791 return cUNOPo->op_first;
3793 else if ((sib = OpSIBLING(o))) {
3797 OP *parent = o->op_sibparent;
3798 assert(!(o->op_moresib));
3799 while (parent && parent != top) {
3800 OP *sib = OpSIBLING(parent);
3803 parent = parent->op_sibparent;
3811 S_finalize_op(pTHX_ OP* o)
3814 PERL_ARGS_ASSERT_FINALIZE_OP;
3817 assert(o->op_type != OP_FREED);
3819 switch (o->op_type) {
3822 PL_curcop = ((COP*)o); /* for warnings */
3825 if (OpHAS_SIBLING(o)) {
3826 OP *sib = OpSIBLING(o);
3827 if (( sib->op_type == OP_NEXTSTATE || sib->op_type == OP_DBSTATE)
3828 && ckWARN(WARN_EXEC)
3829 && OpHAS_SIBLING(sib))
3831 const OPCODE type = OpSIBLING(sib)->op_type;
3832 if (type != OP_EXIT && type != OP_WARN && type != OP_DIE) {
3833 const line_t oldline = CopLINE(PL_curcop);
3834 CopLINE_set(PL_curcop, CopLINE((COP*)sib));
3835 Perl_warner(aTHX_ packWARN(WARN_EXEC),
3836 "Statement unlikely to be reached");
3837 Perl_warner(aTHX_ packWARN(WARN_EXEC),
3838 "\t(Maybe you meant system() when you said exec()?)\n");
3839 CopLINE_set(PL_curcop, oldline);
3846 if ((o->op_private & OPpEARLY_CV) && ckWARN(WARN_PROTOTYPE)) {
3847 GV * const gv = cGVOPo_gv;
3848 if (SvTYPE(gv) == SVt_PVGV && GvCV(gv) && SvPVX_const(GvCV(gv))) {
3849 /* XXX could check prototype here instead of just carping */
3850 SV * const sv = sv_newmortal();
3851 gv_efullname3(sv, gv, NULL);
3852 Perl_warner(aTHX_ packWARN(WARN_PROTOTYPE),
3853 "%" SVf "() called too early to check prototype",
3860 if (cSVOPo->op_private & OPpCONST_STRICT)
3861 no_bareword_allowed(o);
3865 op_relocate_sv(&cSVOPo->op_sv, &o->op_targ);
3870 /* Relocate all the METHOP's SVs to the pad for thread safety. */
3871 case OP_METHOD_NAMED:
3872 case OP_METHOD_SUPER:
3873 case OP_METHOD_REDIR:
3874 case OP_METHOD_REDIR_SUPER:
3875 op_relocate_sv(&cMETHOPx(o)->op_u.op_meth_sv, &o->op_targ);
3884 if ((key_op = cSVOPx(((BINOP*)o)->op_last))->op_type != OP_CONST)
3887 rop = (UNOP*)((BINOP*)o)->op_first;
3892 S_scalar_slice_warning(aTHX_ o);
3896 kid = OpSIBLING(cLISTOPo->op_first);
3897 if (/* I bet there's always a pushmark... */
3898 OP_TYPE_ISNT_AND_WASNT_NN(kid, OP_LIST)
3899 && OP_TYPE_ISNT_NN(kid, OP_CONST))
3904 key_op = (SVOP*)(kid->op_type == OP_CONST
3906 : OpSIBLING(kLISTOP->op_first));
3908 rop = (UNOP*)((LISTOP*)o)->op_last;
3911 if (o->op_private & OPpLVAL_INTRO || rop->op_type != OP_RV2HV)
3913 S_check_hash_fields_and_hekify(aTHX_ rop, key_op, 1);
3917 if (o->op_targ != OP_HSLICE && o->op_targ != OP_ASLICE)
3921 S_scalar_slice_warning(aTHX_ o);
3925 if (cPMOPo->op_pmreplrootu.op_pmreplroot)
3926 finalize_op(cPMOPo->op_pmreplrootu.op_pmreplroot);
3934 if (o->op_flags & OPf_KIDS) {
3937 /* check that op_last points to the last sibling, and that
3938 * the last op_sibling/op_sibparent field points back to the
3939 * parent, and that the only ops with KIDS are those which are
3940 * entitled to them */
3941 U32 type = o->op_type;
3945 if (type == OP_NULL) {
3947 /* ck_glob creates a null UNOP with ex-type GLOB
3948 * (which is a list op. So pretend it wasn't a listop */
3949 if (type == OP_GLOB)
3952 family = PL_opargs[type] & OA_CLASS_MASK;
3954 has_last = ( family == OA_BINOP
3955 || family == OA_LISTOP
3956 || family == OA_PMOP
3957 || family == OA_LOOP
3959 assert( has_last /* has op_first and op_last, or ...
3960 ... has (or may have) op_first: */
3961 || family == OA_UNOP
3962 || family == OA_UNOP_AUX
3963 || family == OA_LOGOP
3964 || family == OA_BASEOP_OR_UNOP
3965 || family == OA_FILESTATOP
3966 || family == OA_LOOPEXOP
3967 || family == OA_METHOP
3968 || type == OP_CUSTOM
3969 || type == OP_NULL /* new_logop does this */
3972 for (kid = cUNOPo->op_first; kid; kid = OpSIBLING(kid)) {
3973 if (!OpHAS_SIBLING(kid)) {
3975 assert(kid == cLISTOPo->op_last);
3976 assert(kid->op_sibparent == o);
3981 } while (( o = traverse_op_tree(top, o)) != NULL);
3985 S_mark_padname_lvalue(pTHX_ PADNAME *pn)
3988 PadnameLVALUE_on(pn);
3989 while (PadnameOUTER(pn) && PARENT_PAD_INDEX(pn)) {
3991 /* RT #127786: cv can be NULL due to an eval within the DB package
3992 * called from an anon sub - anon subs don't have CvOUTSIDE() set
3993 * unless they contain an eval, but calling eval within DB
3994 * pretends the eval was done in the caller's scope.
3998 assert(CvPADLIST(cv));
4000 PadlistNAMESARRAY(CvPADLIST(cv))[PARENT_PAD_INDEX(pn)];
4001 assert(PadnameLEN(pn));
4002 PadnameLVALUE_on(pn);
4007 S_vivifies(const OPCODE type)
4010 case OP_RV2AV: case OP_ASLICE:
4011 case OP_RV2HV: case OP_KVASLICE:
4012 case OP_RV2SV: case OP_HSLICE:
4013 case OP_AELEMFAST: case OP_KVHSLICE:
4022 /* apply lvalue reference (aliasing) context to the optree o.
4025 * o would be the list ($x,$y) and type would be OP_AASSIGN.
4026 * It may descend and apply this to children too, for example in
4027 * \( $cond ? $x, $y) = (...)
4031 S_lvref(pTHX_ OP *o, I32 type)
4038 switch (o->op_type) {
4040 o = OpSIBLING(cUNOPo->op_first);
4047 if (cUNOPo->op_first->op_type != OP_GV) goto badref;
4048 o->op_flags |= OPf_STACKED;
4049 if (o->op_flags & OPf_PARENS) {
4050 if (o->op_private & OPpLVAL_INTRO) {
4051 yyerror(Perl_form(aTHX_ "Can't modify reference to "
4052 "localized parenthesized array in list assignment"));
4056 OpTYPE_set(o, OP_LVAVREF);
4057 o->op_private &= OPpLVAL_INTRO|OPpPAD_STATE;
4058 o->op_flags |= OPf_MOD|OPf_REF;
4061 o->op_private |= OPpLVREF_AV;
4065 kid = cUNOPo->op_first;
4066 if (kid->op_type == OP_NULL)
4067 kid = cUNOPx(OpSIBLING(kUNOP->op_first))
4069 o->op_private = OPpLVREF_CV;
4070 if (kid->op_type == OP_GV)
4071 o->op_flags |= OPf_STACKED;
4072 else if (kid->op_type == OP_PADCV) {
4073 o->op_targ = kid->op_targ;
4075 op_free(cUNOPo->op_first);
4076 cUNOPo->op_first = NULL;
4077 o->op_flags &=~ OPf_KIDS;
4083 if (o->op_flags & OPf_PARENS) {
4085 yyerror(Perl_form(aTHX_ "Can't modify reference to "
4086 "parenthesized hash in list assignment"));
4089 o->op_private |= OPpLVREF_HV;
4093 if (cUNOPo->op_first->op_type != OP_GV) goto badref;
4094 o->op_flags |= OPf_STACKED;
4098 if (o->op_flags & OPf_PARENS) goto parenhash;
4099 o->op_private |= OPpLVREF_HV;
4102 PAD_COMPNAME_GEN_set(o->op_targ, PERL_INT_MAX);
4106 PAD_COMPNAME_GEN_set(o->op_targ, PERL_INT_MAX);
4107 if (o->op_flags & OPf_PARENS) goto slurpy;
4108 o->op_private |= OPpLVREF_AV;
4113 o->op_private |= OPpLVREF_ELEM;
4114 o->op_flags |= OPf_STACKED;
4119 OpTYPE_set(o, OP_LVREFSLICE);
4120 o->op_private &= OPpLVAL_INTRO;
4124 if (o->op_flags & OPf_SPECIAL) /* do BLOCK */
4126 else if (!(o->op_flags & OPf_KIDS))
4129 /* the code formerly only recursed into the first child of
4130 * a non ex-list OP_NULL. if we ever encounter such a null op with
4131 * more than one child, need to decide whether its ok to process
4132 * *all* its kids or not */
4133 assert(o->op_targ == OP_LIST
4134 || !(OpHAS_SIBLING(cBINOPo->op_first)));
4137 o = cLISTOPo->op_first;
4141 if (o->op_flags & OPf_PARENS)
4146 /* diag_listed_as: Can't modify reference to %s in %s assignment */
4147 yyerror(Perl_form(aTHX_ "Can't modify reference to %s in %s",
4148 o->op_type == OP_NULL && o->op_flags & OPf_SPECIAL
4155 OpTYPE_set(o, OP_LVREF);
4157 OPpLVAL_INTRO|OPpLVREF_ELEM|OPpLVREF_TYPE|OPpPAD_STATE;
4158 if (type == OP_ENTERLOOP)
4159 o->op_private |= OPpLVREF_ITER;
4164 return; /* at top; no parents/siblings to try */
4165 if (OpHAS_SIBLING(o)) {
4166 o = o->op_sibparent;
4169 o = o->op_sibparent; /*try parent's next sibling */
4175 PERL_STATIC_INLINE bool
4176 S_potential_mod_type(I32 type)
4178 /* Types that only potentially result in modification. */
4179 return type == OP_GREPSTART || type == OP_ENTERSUB
4180 || type == OP_REFGEN || type == OP_LEAVESUBLV;
4185 =for apidoc op_lvalue
4187 Propagate lvalue ("modifiable") context to an op and its children.
4188 C<type> represents the context type, roughly based on the type of op that
4189 would do the modifying, although C<local()> is represented by C<OP_NULL>,
4190 because it has no op type of its own (it is signalled by a flag on
4193 This function detects things that can't be modified, such as C<$x+1>, and
4194 generates errors for them. For example, C<$x+1 = 2> would cause it to be
4195 called with an op of type C<OP_ADD> and a C<type> argument of C<OP_SASSIGN>.
4197 It also flags things that need to behave specially in an lvalue context,
4198 such as C<$$x = 5> which might have to vivify a reference in C<$x>.
4202 Perl_op_lvalue_flags() is a non-API lower-level interface to
4203 op_lvalue(). The flags param has these bits:
4204 OP_LVALUE_NO_CROAK: return rather than croaking on error
4209 Perl_op_lvalue_flags(pTHX_ OP *o, I32 type, U32 flags)
4214 if (!o || (PL_parser && PL_parser->error_count))
4219 /* -1 = error on localize, 0 = ignore localize, 1 = ok to localize */
4221 OP *next_kid = NULL;
4223 if ((o->op_private & OPpTARGET_MY)
4224 && (PL_opargs[o->op_type] & OA_TARGLEX))/* OPp share the meaning */
4229 /* elements of a list might be in void context because the list is
4230 in scalar context or because they are attribute sub calls */
4231 if ((o->op_flags & OPf_WANT) == OPf_WANT_VOID)
4234 if (type == OP_PRTF || type == OP_SPRINTF) type = OP_ENTERSUB;
4236 switch (o->op_type) {
4242 if ((o->op_flags & OPf_PARENS))
4247 if ((type == OP_UNDEF || type == OP_REFGEN || type == OP_LOCK) &&
4248 !(o->op_flags & OPf_STACKED)) {
4249 OpTYPE_set(o, OP_RV2CV); /* entersub => rv2cv */
4250 assert(cUNOPo->op_first->op_type == OP_NULL);
4251 op_null(((LISTOP*)cUNOPo->op_first)->op_first);/* disable pushmark */
4254 else { /* lvalue subroutine call */
4255 o->op_private |= OPpLVAL_INTRO;
4256 PL_modcount = RETURN_UNLIMITED_NUMBER;
4257 if (S_potential_mod_type(type)) {
4258 o->op_private |= OPpENTERSUB_INARGS;
4261 else { /* Compile-time error message: */
4262 OP *kid = cUNOPo->op_first;
4267 if (kid->op_type != OP_PUSHMARK) {
4268 if (kid->op_type != OP_NULL || kid->op_targ != OP_LIST)
4270 "panic: unexpected lvalue entersub "
4271 "args: type/targ %ld:%" UVuf,
4272 (long)kid->op_type, (UV)kid->op_targ);
4273 kid = kLISTOP->op_first;
4275 while (OpHAS_SIBLING(kid))
4276 kid = OpSIBLING(kid);
4277 if (!(kid->op_type == OP_NULL && kid->op_targ == OP_RV2CV)) {
4278 break; /* Postpone until runtime */
4281 kid = kUNOP->op_first;
4282 if (kid->op_type == OP_NULL && kid->op_targ == OP_RV2SV)
4283 kid = kUNOP->op_first;
4284 if (kid->op_type == OP_NULL)
4286 "Unexpected constant lvalue entersub "
4287 "entry via type/targ %ld:%" UVuf,
4288 (long)kid->op_type, (UV)kid->op_targ);
4289 if (kid->op_type != OP_GV) {
4296 : SvROK(gv) && SvTYPE(SvRV(gv)) == SVt_PVCV
4297 ? MUTABLE_CV(SvRV(gv))
4303 if (flags & OP_LVALUE_NO_CROAK)
4306 namesv = cv_name(cv, NULL, 0);
4307 yyerror_pv(Perl_form(aTHX_ "Can't modify non-lvalue "
4308 "subroutine call of &%" SVf " in %s",
4309 SVfARG(namesv), PL_op_desc[type]),
4317 if (flags & OP_LVALUE_NO_CROAK) return NULL;
4318 /* grep, foreach, subcalls, refgen */
4319 if (S_potential_mod_type(type))
4321 yyerror(Perl_form(aTHX_ "Can't modify %s in %s",
4322 (o->op_type == OP_NULL && (o->op_flags & OPf_SPECIAL)
4325 type ? PL_op_desc[type] : "local"));
4338 case OP_RIGHT_SHIFT:
4347 if (!(o->op_flags & OPf_STACKED))
4353 if (o->op_flags & OPf_STACKED) {
4357 if (!(o->op_private & OPpREPEAT_DOLIST))
4360 const I32 mods = PL_modcount;
4361 /* we recurse rather than iterate here because we need to
4362 * calculate and use the delta applied to PL_modcount by the
4363 * first child. So in something like
4364 * ($x, ($y) x 3) = split;
4365 * split knows that 4 elements are wanted
4367 modkids(cBINOPo->op_first, type);
4368 if (type != OP_AASSIGN)
4370 kid = cBINOPo->op_last;
4371 if (kid->op_type == OP_CONST && SvIOK(kSVOP_sv)) {
4372 const IV iv = SvIV(kSVOP_sv);
4373 if (PL_modcount != RETURN_UNLIMITED_NUMBER)
4375 mods + (PL_modcount - mods) * (iv < 0 ? 0 : iv);
4378 PL_modcount = RETURN_UNLIMITED_NUMBER;
4384 next_kid = OpSIBLING(cUNOPo->op_first);
4389 if (type == OP_REFGEN && o->op_flags & OPf_PARENS) {
4390 PL_modcount = RETURN_UNLIMITED_NUMBER;
4391 /* Treat \(@foo) like ordinary list, but still mark it as modi-
4392 fiable since some contexts need to know. */
4393 o->op_flags |= OPf_MOD;
4398 if (scalar_mod_type(o, type))
4400 ref(cUNOPo->op_first, o->op_type);
4407 /* Do not apply the lvsub flag for rv2[ah]v in scalar context. */
4408 if (type == OP_LEAVESUBLV && (
4409 (o->op_type != OP_RV2AV && o->op_type != OP_RV2HV)
4410 || (o->op_flags & OPf_WANT) != OPf_WANT_SCALAR
4412 o->op_private |= OPpMAYBE_LVSUB;
4416 PL_modcount = RETURN_UNLIMITED_NUMBER;
4422 if (type == OP_LEAVESUBLV)
4423 o->op_private |= OPpMAYBE_LVSUB;
4427 if (type == OP_LEAVESUBLV
4428 && (o->op_private & OPpAVHVSWITCH_MASK) + OP_EACH == OP_KEYS)
4429 o->op_private |= OPpMAYBE_LVSUB;
4433 PL_hints |= HINT_BLOCK_SCOPE;
4434 if (type == OP_LEAVESUBLV)
4435 o->op_private |= OPpMAYBE_LVSUB;
4440 ref(cUNOPo->op_first, o->op_type);
4444 PL_hints |= HINT_BLOCK_SCOPE;
4454 case OP_AELEMFAST_LEX:
4461 PL_modcount = RETURN_UNLIMITED_NUMBER;
4462 if (type == OP_REFGEN && o->op_flags & OPf_PARENS)
4464 /* Treat \(@foo) like ordinary list, but still mark it as modi-
4465 fiable since some contexts need to know. */
4466 o->op_flags |= OPf_MOD;
4469 if (scalar_mod_type(o, type))
4471 if ((o->op_flags & OPf_WANT) != OPf_WANT_SCALAR
4472 && type == OP_LEAVESUBLV)
4473 o->op_private |= OPpMAYBE_LVSUB;
4477 if (!type) /* local() */
4478 Perl_croak(aTHX_ "Can't localize lexical variable %" PNf,
4479 PNfARG(PAD_COMPNAME(o->op_targ)));
4480 if (!(o->op_private & OPpLVAL_INTRO)
4481 || ( type != OP_SASSIGN && type != OP_AASSIGN
4482 && PadnameIsSTATE(PAD_COMPNAME_SV(o->op_targ)) ))
4483 S_mark_padname_lvalue(aTHX_ PAD_COMPNAME_SV(o->op_targ));
4491 if (type != OP_LEAVESUBLV && !scalar_mod_type(NULL, type))
4495 if (o->op_private == 4) /* don't allow 4 arg substr as lvalue */
4501 if (type == OP_LEAVESUBLV)
4502 o->op_private |= OPpMAYBE_LVSUB;
4503 if (o->op_flags & OPf_KIDS && OpHAS_SIBLING(cBINOPo->op_first)) {
4504 /* we recurse rather than iterate here because the child
4505 * needs to be processed with a different 'type' parameter */
4507 /* substr and vec */
4508 /* If this op is in merely potential (non-fatal) modifiable
4509 context, then apply OP_ENTERSUB context to
4510 the kid op (to avoid croaking). Other-
4511 wise pass this op’s own type so the correct op is mentioned
4512 in error messages. */
4513 op_lvalue(OpSIBLING(cBINOPo->op_first),
4514 S_potential_mod_type(type)
4522 ref(cBINOPo->op_first, o->op_type);
4523 if (type == OP_ENTERSUB &&
4524 !(o->op_private & (OPpLVAL_INTRO | OPpDEREF)))
4525 o->op_private |= OPpLVAL_DEFER;
4526 if (type == OP_LEAVESUBLV)
4527 o->op_private |= OPpMAYBE_LVSUB;
4534 o->op_private |= OPpLVALUE;
4540 if (o->op_flags & OPf_KIDS)
4541 next_kid = cLISTOPo->op_last;
4546 if (o->op_flags & OPf_SPECIAL) /* do BLOCK */
4548 else if (!(o->op_flags & OPf_KIDS))
4551 if (o->op_targ != OP_LIST) {
4552 OP *sib = OpSIBLING(cLISTOPo->op_first);
4553 /* OP_TRANS and OP_TRANSR with argument have a weird optree
4560 * compared with things like OP_MATCH which have the argument
4566 * so handle specially to correctly get "Can't modify" croaks etc
4569 if (sib && (sib->op_type == OP_TRANS || sib->op_type == OP_TRANSR))
4571 /* this should trigger a "Can't modify transliteration" err */
4572 op_lvalue(sib, type);
4574 next_kid = cBINOPo->op_first;
4575 /* we assume OP_NULLs which aren't ex-list have no more than 2
4576 * children. If this assumption is wrong, increase the scan
4578 assert( !OpHAS_SIBLING(next_kid)
4579 || !OpHAS_SIBLING(OpSIBLING(next_kid)));
4585 next_kid = cLISTOPo->op_first;
4593 if (type == OP_LEAVESUBLV
4594 || !S_vivifies(cLOGOPo->op_first->op_type))
4595 next_kid = cLOGOPo->op_first;
4596 else if (type == OP_LEAVESUBLV
4597 || !S_vivifies(OpSIBLING(cLOGOPo->op_first)->op_type))
4598 next_kid = OpSIBLING(cLOGOPo->op_first);
4602 if (type == OP_NULL) { /* local */
4604 if (!FEATURE_MYREF_IS_ENABLED)
4605 Perl_croak(aTHX_ "The experimental declared_refs "
4606 "feature is not enabled");
4607 Perl_ck_warner_d(aTHX_
4608 packWARN(WARN_EXPERIMENTAL__DECLARED_REFS),
4609 "Declaring references is experimental");
4610 next_kid = cUNOPo->op_first;
4613 if (type != OP_AASSIGN && type != OP_SASSIGN
4614 && type != OP_ENTERLOOP)
4616 /* Don’t bother applying lvalue context to the ex-list. */
4617 kid = cUNOPx(cUNOPo->op_first)->op_first;
4618 assert (!OpHAS_SIBLING(kid));
4621 if (type == OP_NULL) /* local */
4623 if (type != OP_AASSIGN) goto nomod;
4624 kid = cUNOPo->op_first;
4627 const U8 ec = PL_parser ? PL_parser->error_count : 0;
4628 S_lvref(aTHX_ kid, type);
4629 if (!PL_parser || PL_parser->error_count == ec) {
4630 if (!FEATURE_REFALIASING_IS_ENABLED)
4632 "Experimental aliasing via reference not enabled");
4633 Perl_ck_warner_d(aTHX_
4634 packWARN(WARN_EXPERIMENTAL__REFALIASING),
4635 "Aliasing via reference is experimental");
4638 if (o->op_type == OP_REFGEN)
4639 op_null(cUNOPx(cUNOPo->op_first)->op_first); /* pushmark */
4644 if ((o->op_private & OPpSPLIT_ASSIGN)) {
4645 /* This is actually @array = split. */
4646 PL_modcount = RETURN_UNLIMITED_NUMBER;
4652 op_lvalue(cUNOPo->op_first, OP_ENTERSUB);
4656 /* [20011101.069 (#7861)] File test operators interpret OPf_REF to mean that
4657 their argument is a filehandle; thus \stat(".") should not set
4659 if (type == OP_REFGEN && OP_IS_STAT(o->op_type))
4662 if (type != OP_LEAVESUBLV)
4663 o->op_flags |= OPf_MOD;
4665 if (type == OP_AASSIGN || type == OP_SASSIGN)
4666 o->op_flags |= OPf_SPECIAL