4 * Copyright (C) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
5 * 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 by Larry Wall and others
7 * You may distribute under the terms of either the GNU General Public
8 * License or the Artistic License, as specified in the README file.
13 * 'You see: Mr. Drogo, he married poor Miss Primula Brandybuck. She was
14 * our Mr. Bilbo's first cousin on the mother's side (her mother being the
15 * youngest of the Old Took's daughters); and Mr. Drogo was his second
16 * cousin. So Mr. Frodo is his first *and* second cousin, once removed
17 * either way, as the saying is, if you follow me.' --the Gaffer
19 * [p.23 of _The Lord of the Rings_, I/i: "A Long-Expected Party"]
22 /* This file contains the functions that create, manipulate and optimize
23 * the OP structures that hold a compiled perl program.
25 * Note that during the build of miniperl, a temporary copy of this file
26 * is made, called opmini.c.
28 * A Perl program is compiled into a tree of OP nodes. Each op contains:
29 * * structural OP pointers to its children and siblings (op_sibling,
30 * op_first etc) that define the tree structure;
31 * * execution order OP pointers (op_next, plus sometimes op_other,
32 * op_lastop etc) that define the execution sequence plus variants;
33 * * a pointer to the C "pp" function that would execute the op;
34 * * any data specific to that op.
35 * For example, an OP_CONST op points to the pp_const() function and to an
36 * SV containing the constant value. When pp_const() is executed, its job
37 * is to push that SV onto the stack.
39 * OPs are mainly created by the newFOO() functions, which are mainly
40 * called from the parser (in perly.y) as the code is parsed. For example
41 * the Perl code $a + $b * $c would cause the equivalent of the following
42 * to be called (oversimplifying a bit):
44 * newBINOP(OP_ADD, flags,
46 * newBINOP(OP_MULTIPLY, flags, newSVREF($b), newSVREF($c))
49 * As the parser reduces low-level rules, it creates little op subtrees;
50 * as higher-level rules are resolved, these subtrees get joined together
51 * as branches on a bigger subtree, until eventually a top-level rule like
52 * a subroutine definition is reduced, at which point there is one large
55 * The execution order pointers (op_next) are generated as the subtrees
56 * are joined together. Consider this sub-expression: A*B + C/D: at the
57 * point when it's just been parsed, the op tree looks like:
65 * with the intended execution order being:
67 * [PREV] => A => B => [*] => C => D => [/] => [+] => [NEXT]
69 * At this point all the nodes' op_next pointers will have been set,
71 * * we don't know what the [NEXT] node will be yet;
72 * * we don't know what the [PREV] node will be yet, but when it gets
73 * created and needs its op_next set, it needs to be set to point to
74 * A, which is non-obvious.
75 * To handle both those cases, we temporarily set the top node's
76 * op_next to point to the first node to be executed in this subtree (A in
77 * this case). This means that initially a subtree's op_next chain,
78 * starting from the top node, will visit each node in execution sequence
79 * then point back at the top node.
80 * When we embed this subtree in a larger tree, its top op_next is used
81 * to get the start node, then is set to point to its new neighbour.
82 * For example the two separate [*],A,B and [/],C,D subtrees would
84 * [*] => A; A => B; B => [*]
86 * [/] => C; C => D; D => [/]
87 * When these two subtrees were joined together to make the [+] subtree,
88 * [+]'s op_next was set to [*]'s op_next, i.e. A; then [*]'s op_next was
89 * set to point to [/]'s op_next, i.e. C.
91 * This op_next linking is done by the LINKLIST() macro and its underlying
92 * op_linklist() function. Given a top-level op, if its op_next is
93 * non-null, it's already been linked, so leave it. Otherwise link it with
94 * its children as described above, possibly recursively if any of the
95 * children have a null op_next.
97 * In summary: given a subtree, its top-level node's op_next will either
99 * NULL: the subtree hasn't been LINKLIST()ed yet;
100 * fake: points to the start op for this subtree;
101 * real: once the subtree has been embedded into a larger tree
106 Here's an older description from Larry.
108 Perl's compiler is essentially a 3-pass compiler with interleaved phases:
112 An execution-order pass
114 The bottom-up pass is represented by all the "newOP" routines and
115 the ck_ routines. The bottom-upness is actually driven by yacc.
116 So at the point that a ck_ routine fires, we have no idea what the
117 context is, either upward in the syntax tree, or either forward or
118 backward in the execution order. (The bottom-up parser builds that
119 part of the execution order it knows about, but if you follow the "next"
120 links around, you'll find it's actually a closed loop through the
123 Whenever the bottom-up parser gets to a node that supplies context to
124 its components, it invokes that portion of the top-down pass that applies
125 to that part of the subtree (and marks the top node as processed, so
126 if a node further up supplies context, it doesn't have to take the
127 plunge again). As a particular subcase of this, as the new node is
128 built, it takes all the closed execution loops of its subcomponents
129 and links them into a new closed loop for the higher level node. But
130 it's still not the real execution order.
132 The actual execution order is not known till we get a grammar reduction
133 to a top-level unit like a subroutine or file that will be called by
134 "name" rather than via a "next" pointer. At that point, we can call
135 into peep() to do that code's portion of the 3rd pass. It has to be
136 recursive, but it's recursive on basic blocks, not on tree nodes.
139 /* To implement user lexical pragmas, there needs to be a way at run time to
140 get the compile time state of %^H for that block. Storing %^H in every
141 block (or even COP) would be very expensive, so a different approach is
142 taken. The (running) state of %^H is serialised into a tree of HE-like
143 structs. Stores into %^H are chained onto the current leaf as a struct
144 refcounted_he * with the key and the value. Deletes from %^H are saved
145 with a value of PL_sv_placeholder. The state of %^H at any point can be
146 turned back into a regular HV by walking back up the tree from that point's
147 leaf, ignoring any key you've already seen (placeholder or not), storing
148 the rest into the HV structure, then removing the placeholders. Hence
149 memory is only used to store the %^H deltas from the enclosing COP, rather
150 than the entire %^H on each COP.
152 To cause actions on %^H to write out the serialisation records, it has
153 magic type 'H'. This magic (itself) does nothing, but its presence causes
154 the values to gain magic type 'h', which has entries for set and clear.
155 C<Perl_magic_sethint> updates C<PL_compiling.cop_hints_hash> with a store
156 record, with deletes written by C<Perl_magic_clearhint>. C<SAVEHINTS>
157 saves the current C<PL_compiling.cop_hints_hash> on the save stack, so that
158 it will be correctly restored when any inner compiling scope is exited.
164 #include "keywords.h"
168 #define CALL_PEEP(o) PL_peepp(aTHX_ o)
169 #define CALL_RPEEP(o) PL_rpeepp(aTHX_ o)
170 #define CALL_OPFREEHOOK(o) if (PL_opfreehook) PL_opfreehook(aTHX_ o)
172 static const char array_passed_to_stat[] = "Array passed to stat will be coerced to a scalar";
174 /* remove any leading "empty" ops from the op_next chain whose first
175 * node's address is stored in op_p. Store the updated address of the
176 * first node in op_p.
180 S_prune_chain_head(OP** op_p)
183 && ( (*op_p)->op_type == OP_NULL
184 || (*op_p)->op_type == OP_SCOPE
185 || (*op_p)->op_type == OP_SCALAR
186 || (*op_p)->op_type == OP_LINESEQ)
188 *op_p = (*op_p)->op_next;
192 /* See the explanatory comments above struct opslab in op.h. */
194 #ifdef PERL_DEBUG_READONLY_OPS
195 # define PERL_SLAB_SIZE 128
196 # define PERL_MAX_SLAB_SIZE 4096
197 # include <sys/mman.h>
200 #ifndef PERL_SLAB_SIZE
201 # define PERL_SLAB_SIZE 64
203 #ifndef PERL_MAX_SLAB_SIZE
204 # define PERL_MAX_SLAB_SIZE 2048
207 /* rounds up to nearest pointer */
208 #define SIZE_TO_PSIZE(x) (((x) + sizeof(I32 *) - 1)/sizeof(I32 *))
209 #define DIFF(o,p) ((size_t)((I32 **)(p) - (I32**)(o)))
211 /* requires double parens and aTHX_ */
212 #define DEBUG_S_warn(args) \
214 PerlIO_printf(Perl_debug_log, "%s", SvPVx_nolen(Perl_mess args)) \
218 /* malloc a new op slab (suitable for attaching to PL_compcv).
219 * sz is in units of pointers */
222 S_new_slab(pTHX_ OPSLAB *head, size_t sz)
226 /* opslot_offset is only U16 */
227 assert(sz < U16_MAX);
229 #ifdef PERL_DEBUG_READONLY_OPS
230 slab = (OPSLAB *) mmap(0, sz * sizeof(I32 *),
231 PROT_READ|PROT_WRITE,
232 MAP_ANON|MAP_PRIVATE, -1, 0);
233 DEBUG_m(PerlIO_printf(Perl_debug_log, "mapped %lu at %p\n",
234 (unsigned long) sz, slab));
235 if (slab == MAP_FAILED) {
236 perror("mmap failed");
240 slab = (OPSLAB *)PerlMemShared_calloc(sz, sizeof(I32 *));
242 slab->opslab_size = (U16)sz;
245 /* The context is unused in non-Windows */
248 slab->opslab_free_space = sz - DIFF(slab, &slab->opslab_slots);
249 slab->opslab_head = head ? head : slab;
250 DEBUG_S_warn((aTHX_ "allocated new op slab sz 0x%x, %p, head slab %p",
251 (unsigned int)slab->opslab_size, (void*)slab,
252 (void*)(slab->opslab_head)));
257 /* Returns a sz-sized block of memory (suitable for holding an op) from
258 * a free slot in the chain of op slabs attached to PL_compcv.
259 * Allocates a new slab if necessary.
260 * if PL_compcv isn't compiling, malloc() instead.
264 Perl_Slab_Alloc(pTHX_ size_t sz)
266 OPSLAB *head_slab; /* first slab in the chain */
272 /* We only allocate ops from the slab during subroutine compilation.
273 We find the slab via PL_compcv, hence that must be non-NULL. It could
274 also be pointing to a subroutine which is now fully set up (CvROOT()
275 pointing to the top of the optree for that sub), or a subroutine
276 which isn't using the slab allocator. If our sanity checks aren't met,
277 don't use a slab, but allocate the OP directly from the heap. */
278 if (!PL_compcv || CvROOT(PL_compcv)
279 || (CvSTART(PL_compcv) && !CvSLABBED(PL_compcv)))
281 o = (OP*)PerlMemShared_calloc(1, sz);
285 /* While the subroutine is under construction, the slabs are accessed via
286 CvSTART(), to avoid needing to expand PVCV by one pointer for something
287 unneeded at runtime. Once a subroutine is constructed, the slabs are
288 accessed via CvROOT(). So if CvSTART() is NULL, no slab has been
289 allocated yet. See the commit message for 8be227ab5eaa23f2 for more
291 if (!CvSTART(PL_compcv)) {
293 (OP *)(head_slab = S_new_slab(aTHX_ NULL, PERL_SLAB_SIZE));
294 CvSLABBED_on(PL_compcv);
295 head_slab->opslab_refcnt = 2; /* one for the CV; one for the new OP */
297 else ++(head_slab = (OPSLAB *)CvSTART(PL_compcv))->opslab_refcnt;
299 opsz = SIZE_TO_PSIZE(sz);
300 sz = opsz + OPSLOT_HEADER_P;
302 /* The slabs maintain a free list of OPs. In particular, constant folding
303 will free up OPs, so it makes sense to re-use them where possible. A
304 freed up slot is used in preference to a new allocation. */
305 if (head_slab->opslab_freed) {
306 OP **too = &head_slab->opslab_freed;
308 DEBUG_S_warn((aTHX_ "found free op at %p, slab %p, head slab %p",
310 (I32**)OpSLOT(o) - OpSLOT(o)->opslot_offset,
313 while (o && OpSLOT(o)->opslot_size < sz) {
314 DEBUG_S_warn((aTHX_ "Alas! too small"));
315 o = *(too = &o->op_next);
316 if (o) { DEBUG_S_warn((aTHX_ "found another free op at %p", (void*)o)); }
320 Zero(o, opsz, I32 *);
326 #define INIT_OPSLOT(s) \
327 slot->opslot_offset = DIFF(slab2, slot) ; \
328 slot->opslot_size = s; \
329 slab2->opslab_free_space -= s; \
330 o = &slot->opslot_op; \
333 /* The partially-filled slab is next in the chain. */
334 slab2 = head_slab->opslab_next ? head_slab->opslab_next : head_slab;
335 if (slab2->opslab_free_space < sz) {
336 /* Remaining space is too small. */
337 /* If we can fit a BASEOP, add it to the free chain, so as not
339 if (slab2->opslab_free_space >= SIZE_TO_PSIZE(sizeof(OP)) + OPSLOT_HEADER_P) {
340 slot = &slab2->opslab_slots;
341 INIT_OPSLOT(slab2->opslab_free_space);
342 o->op_type = OP_FREED;
343 o->op_next = head_slab->opslab_freed;
344 head_slab->opslab_freed = o;
347 /* Create a new slab. Make this one twice as big. */
348 slab2 = S_new_slab(aTHX_ head_slab,
349 slab2->opslab_size > PERL_MAX_SLAB_SIZE / 2
351 : slab2->opslab_size * 2);
352 slab2->opslab_next = head_slab->opslab_next;
353 head_slab->opslab_next = slab2;
355 assert(slab2->opslab_size >= sz);
357 /* Create a new op slot */
359 ((I32 **)&slab2->opslab_slots
360 + slab2->opslab_free_space - sz);
361 assert(slot >= &slab2->opslab_slots);
363 DEBUG_S_warn((aTHX_ "allocating op at %p, slab %p, head slab %p",
364 (void*)o, (void*)slab2, (void*)head_slab));
367 /* moresib == 0, op_sibling == 0 implies a solitary unattached op */
368 assert(!o->op_moresib);
369 assert(!o->op_sibparent);
376 #ifdef PERL_DEBUG_READONLY_OPS
378 Perl_Slab_to_ro(pTHX_ OPSLAB *slab)
380 PERL_ARGS_ASSERT_SLAB_TO_RO;
382 if (slab->opslab_readonly) return;
383 slab->opslab_readonly = 1;
384 for (; slab; slab = slab->opslab_next) {
385 /*DEBUG_U(PerlIO_printf(Perl_debug_log,"mprotect ->ro %lu at %p\n",
386 (unsigned long) slab->opslab_size, slab));*/
387 if (mprotect(slab, slab->opslab_size * sizeof(I32 *), PROT_READ))
388 Perl_warn(aTHX_ "mprotect for %p %lu failed with %d", slab,
389 (unsigned long)slab->opslab_size, errno);
394 Perl_Slab_to_rw(pTHX_ OPSLAB *const slab)
398 PERL_ARGS_ASSERT_SLAB_TO_RW;
400 if (!slab->opslab_readonly) return;
402 for (; slab2; slab2 = slab2->opslab_next) {
403 /*DEBUG_U(PerlIO_printf(Perl_debug_log,"mprotect ->rw %lu at %p\n",
404 (unsigned long) size, slab2));*/
405 if (mprotect((void *)slab2, slab2->opslab_size * sizeof(I32 *),
406 PROT_READ|PROT_WRITE)) {
407 Perl_warn(aTHX_ "mprotect RW for %p %lu failed with %d", slab,
408 (unsigned long)slab2->opslab_size, errno);
411 slab->opslab_readonly = 0;
415 # define Slab_to_rw(op) NOOP
418 /* This cannot possibly be right, but it was copied from the old slab
419 allocator, to which it was originally added, without explanation, in
422 # define PerlMemShared PerlMem
425 /* make freed ops die if they're inadvertently executed */
430 DIE(aTHX_ "panic: freed op 0x%p called\n", PL_op);
435 /* Return the block of memory used by an op to the free list of
436 * the OP slab associated with that op.
440 Perl_Slab_Free(pTHX_ void *op)
442 OP * const o = (OP *)op;
445 PERL_ARGS_ASSERT_SLAB_FREE;
448 o->op_ppaddr = S_pp_freed;
451 if (!o->op_slabbed) {
453 PerlMemShared_free(op);
458 /* If this op is already freed, our refcount will get screwy. */
459 assert(o->op_type != OP_FREED);
460 o->op_type = OP_FREED;
461 o->op_next = slab->opslab_freed;
462 slab->opslab_freed = o;
463 DEBUG_S_warn((aTHX_ "freeing op at %p, slab %p, head slab %p",
465 (I32**)OpSLOT(o) - OpSLOT(o)->opslot_offset,
467 OpslabREFCNT_dec_padok(slab);
471 Perl_opslab_free_nopad(pTHX_ OPSLAB *slab)
473 const bool havepad = !!PL_comppad;
474 PERL_ARGS_ASSERT_OPSLAB_FREE_NOPAD;
477 PAD_SAVE_SETNULLPAD();
483 /* Free a chain of OP slabs. Should only be called after all ops contained
484 * in it have been freed. At this point, its reference count should be 1,
485 * because OpslabREFCNT_dec() skips doing rc-- when it detects that rc == 1,
486 * and just directly calls opslab_free().
487 * (Note that the reference count which PL_compcv held on the slab should
488 * have been removed once compilation of the sub was complete).
494 Perl_opslab_free(pTHX_ OPSLAB *slab)
497 PERL_ARGS_ASSERT_OPSLAB_FREE;
499 DEBUG_S_warn((aTHX_ "freeing slab %p", (void*)slab));
500 assert(slab->opslab_refcnt == 1);
502 slab2 = slab->opslab_next;
504 slab->opslab_refcnt = ~(size_t)0;
506 #ifdef PERL_DEBUG_READONLY_OPS
507 DEBUG_m(PerlIO_printf(Perl_debug_log, "Deallocate slab at %p\n",
509 if (munmap(slab, slab->opslab_size * sizeof(I32 *))) {
510 perror("munmap failed");
514 PerlMemShared_free(slab);
520 /* like opslab_free(), but first calls op_free() on any ops in the slab
521 * not marked as OP_FREED
525 Perl_opslab_force_free(pTHX_ OPSLAB *slab)
529 size_t savestack_count = 0;
531 PERL_ARGS_ASSERT_OPSLAB_FORCE_FREE;
534 OPSLOT *slot = (OPSLOT*)
535 ((I32**)&slab2->opslab_slots + slab2->opslab_free_space);
536 OPSLOT *end = (OPSLOT*)
537 ((I32**)slab2 + slab2->opslab_size);
538 for (; slot <= end -1;
539 slot = (OPSLOT*) ((I32**)slot + slot->opslot_size) )
541 if (slot->opslot_op.op_type != OP_FREED
542 && !(slot->opslot_op.op_savefree
548 assert(slot->opslot_op.op_slabbed);
549 op_free(&slot->opslot_op);
550 if (slab->opslab_refcnt == 1) goto free;
553 } while ((slab2 = slab2->opslab_next));
554 /* > 1 because the CV still holds a reference count. */
555 if (slab->opslab_refcnt > 1) { /* still referenced by the savestack */
557 assert(savestack_count == slab->opslab_refcnt-1);
559 /* Remove the CV’s reference count. */
560 slab->opslab_refcnt--;
567 #ifdef PERL_DEBUG_READONLY_OPS
569 Perl_op_refcnt_inc(pTHX_ OP *o)
572 OPSLAB *const slab = o->op_slabbed ? OpSLAB(o) : NULL;
573 if (slab && slab->opslab_readonly) {
586 Perl_op_refcnt_dec(pTHX_ OP *o)
589 OPSLAB *const slab = o->op_slabbed ? OpSLAB(o) : NULL;
591 PERL_ARGS_ASSERT_OP_REFCNT_DEC;
593 if (slab && slab->opslab_readonly) {
595 result = --o->op_targ;
598 result = --o->op_targ;
604 * In the following definition, the ", (OP*)0" is just to make the compiler
605 * think the expression is of the right type: croak actually does a Siglongjmp.
607 #define CHECKOP(type,o) \
608 ((PL_op_mask && PL_op_mask[type]) \
609 ? ( op_free((OP*)o), \
610 Perl_croak(aTHX_ "'%s' trapped by operation mask", PL_op_desc[type]), \
612 : PL_check[type](aTHX_ (OP*)o))
614 #define RETURN_UNLIMITED_NUMBER (PERL_INT_MAX / 2)
616 #define OpTYPE_set(o,type) \
618 o->op_type = (OPCODE)type; \
619 o->op_ppaddr = PL_ppaddr[type]; \
623 S_no_fh_allowed(pTHX_ OP *o)
625 PERL_ARGS_ASSERT_NO_FH_ALLOWED;
627 yyerror(Perl_form(aTHX_ "Missing comma after first argument to %s function",
633 S_too_few_arguments_pv(pTHX_ OP *o, const char* name, U32 flags)
635 PERL_ARGS_ASSERT_TOO_FEW_ARGUMENTS_PV;
636 yyerror_pv(Perl_form(aTHX_ "Not enough arguments for %s", name), flags);
641 S_too_many_arguments_pv(pTHX_ OP *o, const char *name, U32 flags)
643 PERL_ARGS_ASSERT_TOO_MANY_ARGUMENTS_PV;
645 yyerror_pv(Perl_form(aTHX_ "Too many arguments for %s", name), flags);
650 S_bad_type_pv(pTHX_ I32 n, const char *t, const OP *o, const OP *kid)
652 PERL_ARGS_ASSERT_BAD_TYPE_PV;
654 yyerror_pv(Perl_form(aTHX_ "Type of arg %d to %s must be %s (not %s)",
655 (int)n, PL_op_desc[(o)->op_type], t, OP_DESC(kid)), 0);
658 /* remove flags var, its unused in all callers, move to to right end since gv
659 and kid are always the same */
661 S_bad_type_gv(pTHX_ I32 n, GV *gv, const OP *kid, const char *t)
663 SV * const namesv = cv_name((CV *)gv, NULL, 0);
664 PERL_ARGS_ASSERT_BAD_TYPE_GV;
666 yyerror_pv(Perl_form(aTHX_ "Type of arg %d to %" SVf " must be %s (not %s)",
667 (int)n, SVfARG(namesv), t, OP_DESC(kid)), SvUTF8(namesv));
671 S_no_bareword_allowed(pTHX_ OP *o)
673 PERL_ARGS_ASSERT_NO_BAREWORD_ALLOWED;
675 qerror(Perl_mess(aTHX_
676 "Bareword \"%" SVf "\" not allowed while \"strict subs\" in use",
678 o->op_private &= ~OPpCONST_STRICT; /* prevent warning twice about the same OP */
681 /* "register" allocation */
684 Perl_allocmy(pTHX_ const char *const name, const STRLEN len, const U32 flags)
687 const bool is_our = (PL_parser->in_my == KEY_our);
689 PERL_ARGS_ASSERT_ALLOCMY;
691 if (flags & ~SVf_UTF8)
692 Perl_croak(aTHX_ "panic: allocmy illegal flag bits 0x%" UVxf,
695 /* complain about "my $<special_var>" etc etc */
699 || ( (flags & SVf_UTF8)
700 && isIDFIRST_utf8_safe((U8 *)name+1, name + len))
701 || (name[1] == '_' && len > 2)))
703 if (!(flags & SVf_UTF8 && UTF8_IS_START(name[1]))
705 && (!isPRINT(name[1]) || strchr("\t\n\r\f", name[1]))) {
706 /* diag_listed_as: Can't use global %s in "%s" */
707 yyerror(Perl_form(aTHX_ "Can't use global %c^%c%.*s in \"%s\"",
708 name[0], toCTRL(name[1]), (int)(len - 2), name + 2,
709 PL_parser->in_my == KEY_state ? "state" : "my"));
711 yyerror_pv(Perl_form(aTHX_ "Can't use global %.*s in \"%s\"", (int) len, name,
712 PL_parser->in_my == KEY_state ? "state" : "my"), flags & SVf_UTF8);
716 /* allocate a spare slot and store the name in that slot */
718 off = pad_add_name_pvn(name, len,
719 (is_our ? padadd_OUR :
720 PL_parser->in_my == KEY_state ? padadd_STATE : 0),
721 PL_parser->in_my_stash,
723 /* $_ is always in main::, even with our */
724 ? (PL_curstash && !memEQs(name,len,"$_")
730 /* anon sub prototypes contains state vars should always be cloned,
731 * otherwise the state var would be shared between anon subs */
733 if (PL_parser->in_my == KEY_state && CvANON(PL_compcv))
734 CvCLONE_on(PL_compcv);
740 =head1 Optree Manipulation Functions
742 =for apidoc alloccopstash
744 Available only under threaded builds, this function allocates an entry in
745 C<PL_stashpad> for the stash passed to it.
752 Perl_alloccopstash(pTHX_ HV *hv)
754 PADOFFSET off = 0, o = 1;
755 bool found_slot = FALSE;
757 PERL_ARGS_ASSERT_ALLOCCOPSTASH;
759 if (PL_stashpad[PL_stashpadix] == hv) return PL_stashpadix;
761 for (; o < PL_stashpadmax; ++o) {
762 if (PL_stashpad[o] == hv) return PL_stashpadix = o;
763 if (!PL_stashpad[o] || SvTYPE(PL_stashpad[o]) != SVt_PVHV)
764 found_slot = TRUE, off = o;
767 Renew(PL_stashpad, PL_stashpadmax + 10, HV *);
768 Zero(PL_stashpad + PL_stashpadmax, 10, HV *);
769 off = PL_stashpadmax;
770 PL_stashpadmax += 10;
773 PL_stashpad[PL_stashpadix = off] = hv;
778 /* free the body of an op without examining its contents.
779 * Always use this rather than FreeOp directly */
782 S_op_destroy(pTHX_ OP *o)
792 Free an op and its children. Only use this when an op is no longer linked
799 Perl_op_free(pTHX_ OP *o)
805 bool went_up = FALSE; /* whether we reached the current node by
806 following the parent pointer from a child, and
807 so have already seen this node */
809 if (!o || o->op_type == OP_FREED)
812 if (o->op_private & OPpREFCOUNTED) {
813 /* if base of tree is refcounted, just decrement */
814 switch (o->op_type) {
824 refcnt = OpREFCNT_dec(o);
827 /* Need to find and remove any pattern match ops from
828 * the list we maintain for reset(). */
829 find_and_forget_pmops(o);
842 /* free child ops before ourself, (then free ourself "on the
845 if (!went_up && o->op_flags & OPf_KIDS) {
846 next_op = cUNOPo->op_first;
850 /* find the next node to visit, *then* free the current node
851 * (can't rely on o->op_* fields being valid after o has been
854 /* The next node to visit will be either the sibling, or the
855 * parent if no siblings left, or NULL if we've worked our way
856 * back up to the top node in the tree */
857 next_op = (o == top_op) ? NULL : o->op_sibparent;
858 went_up = cBOOL(!OpHAS_SIBLING(o)); /* parents are already visited */
860 /* Now process the current node */
862 /* Though ops may be freed twice, freeing the op after its slab is a
864 assert(!o->op_slabbed || OpSLAB(o)->opslab_refcnt != ~(size_t)0);
865 /* During the forced freeing of ops after compilation failure, kidops
866 may be freed before their parents. */
867 if (!o || o->op_type == OP_FREED)
872 /* an op should only ever acquire op_private flags that we know about.
873 * If this fails, you may need to fix something in regen/op_private.
874 * Don't bother testing if:
875 * * the op_ppaddr doesn't match the op; someone may have
876 * overridden the op and be doing strange things with it;
877 * * we've errored, as op flags are often left in an
878 * inconsistent state then. Note that an error when
879 * compiling the main program leaves PL_parser NULL, so
880 * we can't spot faults in the main code, only
881 * evaled/required code */
883 if ( o->op_ppaddr == PL_ppaddr[type]
885 && !PL_parser->error_count)
887 assert(!(o->op_private & ~PL_op_private_valid[type]));
892 /* Call the op_free hook if it has been set. Do it now so that it's called
893 * at the right time for refcounted ops, but still before all of the kids
898 type = (OPCODE)o->op_targ;
901 Slab_to_rw(OpSLAB(o));
903 /* COP* is not cleared by op_clear() so that we may track line
904 * numbers etc even after null() */
905 if (type == OP_NEXTSTATE || type == OP_DBSTATE) {
917 /* S_op_clear_gv(): free a GV attached to an OP */
921 void S_op_clear_gv(pTHX_ OP *o, PADOFFSET *ixp)
923 void S_op_clear_gv(pTHX_ OP *o, SV**svp)
927 GV *gv = (o->op_type == OP_GV || o->op_type == OP_GVSV
928 || o->op_type == OP_MULTIDEREF)
931 ? ((GV*)PAD_SVl(*ixp)) : NULL;
933 ? (GV*)(*svp) : NULL;
935 /* It's possible during global destruction that the GV is freed
936 before the optree. Whilst the SvREFCNT_inc is happy to bump from
937 0 to 1 on a freed SV, the corresponding SvREFCNT_dec from 1 to 0
938 will trigger an assertion failure, because the entry to sv_clear
939 checks that the scalar is not already freed. A check of for
940 !SvIS_FREED(gv) turns out to be invalid, because during global
941 destruction the reference count can be forced down to zero
942 (with SVf_BREAK set). In which case raising to 1 and then
943 dropping to 0 triggers cleanup before it should happen. I
944 *think* that this might actually be a general, systematic,
945 weakness of the whole idea of SVf_BREAK, in that code *is*
946 allowed to raise and lower references during global destruction,
947 so any *valid* code that happens to do this during global
948 destruction might well trigger premature cleanup. */
949 bool still_valid = gv && SvREFCNT(gv);
952 SvREFCNT_inc_simple_void(gv);
955 pad_swipe(*ixp, TRUE);
963 int try_downgrade = SvREFCNT(gv) == 2;
966 gv_try_downgrade(gv);
972 Perl_op_clear(pTHX_ OP *o)
977 PERL_ARGS_ASSERT_OP_CLEAR;
979 switch (o->op_type) {
980 case OP_NULL: /* Was holding old type, if any. */
983 case OP_ENTEREVAL: /* Was holding hints. */
984 case OP_ARGDEFELEM: /* Was holding signature index. */
988 if (!(o->op_flags & OPf_REF) || !OP_IS_STAT(o->op_type))
995 S_op_clear_gv(aTHX_ o, &(cPADOPx(o)->op_padix));
997 S_op_clear_gv(aTHX_ o, &(cSVOPx(o)->op_sv));
1000 case OP_METHOD_REDIR:
1001 case OP_METHOD_REDIR_SUPER:
1003 if (cMETHOPx(o)->op_rclass_targ) {
1004 pad_swipe(cMETHOPx(o)->op_rclass_targ, 1);
1005 cMETHOPx(o)->op_rclass_targ = 0;
1008 SvREFCNT_dec(cMETHOPx(o)->op_rclass_sv);
1009 cMETHOPx(o)->op_rclass_sv = NULL;
1012 case OP_METHOD_NAMED:
1013 case OP_METHOD_SUPER:
1014 SvREFCNT_dec(cMETHOPx(o)->op_u.op_meth_sv);
1015 cMETHOPx(o)->op_u.op_meth_sv = NULL;
1018 pad_swipe(o->op_targ, 1);
1025 SvREFCNT_dec(cSVOPo->op_sv);
1026 cSVOPo->op_sv = NULL;
1029 Even if op_clear does a pad_free for the target of the op,
1030 pad_free doesn't actually remove the sv that exists in the pad;
1031 instead it lives on. This results in that it could be reused as
1032 a target later on when the pad was reallocated.
1035 pad_swipe(o->op_targ,1);
1045 if (o->op_flags & (OPf_SPECIAL|OPf_STACKED|OPf_KIDS))
1050 if ( (o->op_type == OP_TRANS || o->op_type == OP_TRANSR)
1051 && (o->op_private & (OPpTRANS_FROM_UTF|OPpTRANS_TO_UTF)))
1054 if (cPADOPo->op_padix > 0) {
1055 pad_swipe(cPADOPo->op_padix, TRUE);
1056 cPADOPo->op_padix = 0;
1059 SvREFCNT_dec(cSVOPo->op_sv);
1060 cSVOPo->op_sv = NULL;
1064 PerlMemShared_free(cPVOPo->op_pv);
1065 cPVOPo->op_pv = NULL;
1069 op_free(cPMOPo->op_pmreplrootu.op_pmreplroot);
1073 if ( (o->op_private & OPpSPLIT_ASSIGN) /* @array = split */
1074 && !(o->op_flags & OPf_STACKED)) /* @{expr} = split */
1076 if (o->op_private & OPpSPLIT_LEX)
1077 pad_free(cPMOPo->op_pmreplrootu.op_pmtargetoff);
1080 pad_swipe(cPMOPo->op_pmreplrootu.op_pmtargetoff, TRUE);
1082 SvREFCNT_dec(MUTABLE_SV(cPMOPo->op_pmreplrootu.op_pmtargetgv));
1089 if (!(cPMOPo->op_pmflags & PMf_CODELIST_PRIVATE))
1090 op_free(cPMOPo->op_code_list);
1091 cPMOPo->op_code_list = NULL;
1092 forget_pmop(cPMOPo);
1093 cPMOPo->op_pmreplrootu.op_pmreplroot = NULL;
1094 /* we use the same protection as the "SAFE" version of the PM_ macros
1095 * here since sv_clean_all might release some PMOPs
1096 * after PL_regex_padav has been cleared
1097 * and the clearing of PL_regex_padav needs to
1098 * happen before sv_clean_all
1101 if(PL_regex_pad) { /* We could be in destruction */
1102 const IV offset = (cPMOPo)->op_pmoffset;
1103 ReREFCNT_dec(PM_GETRE(cPMOPo));
1104 PL_regex_pad[offset] = &PL_sv_undef;
1105 sv_catpvn_nomg(PL_regex_pad[0], (const char *)&offset,
1109 ReREFCNT_dec(PM_GETRE(cPMOPo));
1110 PM_SETRE(cPMOPo, NULL);
1116 PerlMemShared_free(cUNOP_AUXo->op_aux);
1119 case OP_MULTICONCAT:
1121 UNOP_AUX_item *aux = cUNOP_AUXo->op_aux;
1122 /* aux[PERL_MULTICONCAT_IX_PLAIN_PV] and/or
1123 * aux[PERL_MULTICONCAT_IX_UTF8_PV] point to plain and/or
1124 * utf8 shared strings */
1125 char *p1 = aux[PERL_MULTICONCAT_IX_PLAIN_PV].pv;
1126 char *p2 = aux[PERL_MULTICONCAT_IX_UTF8_PV].pv;
1128 PerlMemShared_free(p1);
1130 PerlMemShared_free(p2);
1131 PerlMemShared_free(aux);
1137 UNOP_AUX_item *items = cUNOP_AUXo->op_aux;
1138 UV actions = items->uv;
1140 bool is_hash = FALSE;
1143 switch (actions & MDEREF_ACTION_MASK) {
1146 actions = (++items)->uv;
1149 case MDEREF_HV_padhv_helem:
1152 case MDEREF_AV_padav_aelem:
1153 pad_free((++items)->pad_offset);
1156 case MDEREF_HV_gvhv_helem:
1159 case MDEREF_AV_gvav_aelem:
1161 S_op_clear_gv(aTHX_ o, &((++items)->pad_offset));
1163 S_op_clear_gv(aTHX_ o, &((++items)->sv));
1167 case MDEREF_HV_gvsv_vivify_rv2hv_helem:
1170 case MDEREF_AV_gvsv_vivify_rv2av_aelem:
1172 S_op_clear_gv(aTHX_ o, &((++items)->pad_offset));
1174 S_op_clear_gv(aTHX_ o, &((++items)->sv));
1176 goto do_vivify_rv2xv_elem;
1178 case MDEREF_HV_padsv_vivify_rv2hv_helem:
1181 case MDEREF_AV_padsv_vivify_rv2av_aelem:
1182 pad_free((++items)->pad_offset);
1183 goto do_vivify_rv2xv_elem;
1185 case MDEREF_HV_pop_rv2hv_helem:
1186 case MDEREF_HV_vivify_rv2hv_helem:
1189 do_vivify_rv2xv_elem:
1190 case MDEREF_AV_pop_rv2av_aelem:
1191 case MDEREF_AV_vivify_rv2av_aelem:
1193 switch (actions & MDEREF_INDEX_MASK) {
1194 case MDEREF_INDEX_none:
1197 case MDEREF_INDEX_const:
1201 pad_swipe((++items)->pad_offset, 1);
1203 SvREFCNT_dec((++items)->sv);
1209 case MDEREF_INDEX_padsv:
1210 pad_free((++items)->pad_offset);
1212 case MDEREF_INDEX_gvsv:
1214 S_op_clear_gv(aTHX_ o, &((++items)->pad_offset));
1216 S_op_clear_gv(aTHX_ o, &((++items)->sv));
1221 if (actions & MDEREF_FLAG_last)
1234 actions >>= MDEREF_SHIFT;
1237 /* start of malloc is at op_aux[-1], where the length is
1239 PerlMemShared_free(cUNOP_AUXo->op_aux - 1);
1244 if (o->op_targ > 0) {
1245 pad_free(o->op_targ);
1251 S_cop_free(pTHX_ COP* cop)
1253 PERL_ARGS_ASSERT_COP_FREE;
1256 if (! specialWARN(cop->cop_warnings))
1257 PerlMemShared_free(cop->cop_warnings);
1258 cophh_free(CopHINTHASH_get(cop));
1259 if (PL_curcop == cop)
1264 S_forget_pmop(pTHX_ PMOP *const o)
1266 HV * const pmstash = PmopSTASH(o);
1268 PERL_ARGS_ASSERT_FORGET_PMOP;
1270 if (pmstash && !SvIS_FREED(pmstash) && SvMAGICAL(pmstash)) {
1271 MAGIC * const mg = mg_find((const SV *)pmstash, PERL_MAGIC_symtab);
1273 PMOP **const array = (PMOP**) mg->mg_ptr;
1274 U32 count = mg->mg_len / sizeof(PMOP**);
1278 if (array[i] == o) {
1279 /* Found it. Move the entry at the end to overwrite it. */
1280 array[i] = array[--count];
1281 mg->mg_len = count * sizeof(PMOP**);
1282 /* Could realloc smaller at this point always, but probably
1283 not worth it. Probably worth free()ing if we're the
1286 Safefree(mg->mg_ptr);
1300 S_find_and_forget_pmops(pTHX_ OP *o)
1304 PERL_ARGS_ASSERT_FIND_AND_FORGET_PMOPS;
1307 switch (o->op_type) {
1312 forget_pmop((PMOP*)o);
1315 if (o->op_flags & OPf_KIDS) {
1316 o = cUNOPo->op_first;
1322 return; /* at top; no parents/siblings to try */
1323 if (OpHAS_SIBLING(o)) {
1324 o = o->op_sibparent; /* process next sibling */
1327 o = o->op_sibparent; /*try parent's next sibling */
1336 Neutralizes an op when it is no longer needed, but is still linked to from
1343 Perl_op_null(pTHX_ OP *o)
1347 PERL_ARGS_ASSERT_OP_NULL;
1349 if (o->op_type == OP_NULL)
1352 o->op_targ = o->op_type;
1353 OpTYPE_set(o, OP_NULL);
1357 Perl_op_refcnt_lock(pTHX)
1358 PERL_TSA_ACQUIRE(PL_op_mutex)
1363 PERL_UNUSED_CONTEXT;
1368 Perl_op_refcnt_unlock(pTHX)
1369 PERL_TSA_RELEASE(PL_op_mutex)
1374 PERL_UNUSED_CONTEXT;
1380 =for apidoc op_sibling_splice
1382 A general function for editing the structure of an existing chain of
1383 op_sibling nodes. By analogy with the perl-level C<splice()> function, allows
1384 you to delete zero or more sequential nodes, replacing them with zero or
1385 more different nodes. Performs the necessary op_first/op_last
1386 housekeeping on the parent node and op_sibling manipulation on the
1387 children. The last deleted node will be marked as as the last node by
1388 updating the op_sibling/op_sibparent or op_moresib field as appropriate.
1390 Note that op_next is not manipulated, and nodes are not freed; that is the
1391 responsibility of the caller. It also won't create a new list op for an
1392 empty list etc; use higher-level functions like op_append_elem() for that.
1394 C<parent> is the parent node of the sibling chain. It may passed as C<NULL> if
1395 the splicing doesn't affect the first or last op in the chain.
1397 C<start> is the node preceding the first node to be spliced. Node(s)
1398 following it will be deleted, and ops will be inserted after it. If it is
1399 C<NULL>, the first node onwards is deleted, and nodes are inserted at the
1402 C<del_count> is the number of nodes to delete. If zero, no nodes are deleted.
1403 If -1 or greater than or equal to the number of remaining kids, all
1404 remaining kids are deleted.
1406 C<insert> is the first of a chain of nodes to be inserted in place of the nodes.
1407 If C<NULL>, no nodes are inserted.
1409 The head of the chain of deleted ops is returned, or C<NULL> if no ops were
1414 action before after returns
1415 ------ ----- ----- -------
1418 splice(P, A, 2, X-Y-Z) | | B-C
1422 splice(P, NULL, 1, X-Y) | | A
1426 splice(P, NULL, 3, NULL) | | A-B-C
1430 splice(P, B, 0, X-Y) | | NULL
1434 For lower-level direct manipulation of C<op_sibparent> and C<op_moresib>,
1435 see C<L</OpMORESIB_set>>, C<L</OpLASTSIB_set>>, C<L</OpMAYBESIB_set>>.
1441 Perl_op_sibling_splice(OP *parent, OP *start, int del_count, OP* insert)
1445 OP *last_del = NULL;
1446 OP *last_ins = NULL;
1449 first = OpSIBLING(start);
1453 first = cLISTOPx(parent)->op_first;
1455 assert(del_count >= -1);
1457 if (del_count && first) {
1459 while (--del_count && OpHAS_SIBLING(last_del))
1460 last_del = OpSIBLING(last_del);
1461 rest = OpSIBLING(last_del);
1462 OpLASTSIB_set(last_del, NULL);
1469 while (OpHAS_SIBLING(last_ins))
1470 last_ins = OpSIBLING(last_ins);
1471 OpMAYBESIB_set(last_ins, rest, NULL);
1477 OpMAYBESIB_set(start, insert, NULL);
1481 cLISTOPx(parent)->op_first = insert;
1483 parent->op_flags |= OPf_KIDS;
1485 parent->op_flags &= ~OPf_KIDS;
1489 /* update op_last etc */
1496 /* ought to use OP_CLASS(parent) here, but that can't handle
1497 * ex-foo OP_NULL ops. Also note that XopENTRYCUSTOM() can't
1499 type = parent->op_type;
1500 if (type == OP_CUSTOM) {
1502 type = XopENTRYCUSTOM(parent, xop_class);
1505 if (type == OP_NULL)
1506 type = parent->op_targ;
1507 type = PL_opargs[type] & OA_CLASS_MASK;
1510 lastop = last_ins ? last_ins : start ? start : NULL;
1511 if ( type == OA_BINOP
1512 || type == OA_LISTOP
1516 cLISTOPx(parent)->op_last = lastop;
1519 OpLASTSIB_set(lastop, parent);
1521 return last_del ? first : NULL;
1524 Perl_croak_nocontext("panic: op_sibling_splice(): NULL parent");
1528 =for apidoc op_parent
1530 Returns the parent OP of C<o>, if it has a parent. Returns C<NULL> otherwise.
1536 Perl_op_parent(OP *o)
1538 PERL_ARGS_ASSERT_OP_PARENT;
1539 while (OpHAS_SIBLING(o))
1541 return o->op_sibparent;
1544 /* replace the sibling following start with a new UNOP, which becomes
1545 * the parent of the original sibling; e.g.
1547 * op_sibling_newUNOP(P, A, unop-args...)
1555 * where U is the new UNOP.
1557 * parent and start args are the same as for op_sibling_splice();
1558 * type and flags args are as newUNOP().
1560 * Returns the new UNOP.
1564 S_op_sibling_newUNOP(pTHX_ OP *parent, OP *start, I32 type, I32 flags)
1568 kid = op_sibling_splice(parent, start, 1, NULL);
1569 newop = newUNOP(type, flags, kid);
1570 op_sibling_splice(parent, start, 0, newop);
1575 /* lowest-level newLOGOP-style function - just allocates and populates
1576 * the struct. Higher-level stuff should be done by S_new_logop() /
1577 * newLOGOP(). This function exists mainly to avoid op_first assignment
1578 * being spread throughout this file.
1582 Perl_alloc_LOGOP(pTHX_ I32 type, OP *first, OP* other)
1587 NewOp(1101, logop, 1, LOGOP);
1588 OpTYPE_set(logop, type);
1589 logop->op_first = first;
1590 logop->op_other = other;
1592 logop->op_flags = OPf_KIDS;
1593 while (kid && OpHAS_SIBLING(kid))
1594 kid = OpSIBLING(kid);
1596 OpLASTSIB_set(kid, (OP*)logop);
1601 /* Contextualizers */
1604 =for apidoc op_contextualize
1606 Applies a syntactic context to an op tree representing an expression.
1607 C<o> is the op tree, and C<context> must be C<G_SCALAR>, C<G_ARRAY>,
1608 or C<G_VOID> to specify the context to apply. The modified op tree
1615 Perl_op_contextualize(pTHX_ OP *o, I32 context)
1617 PERL_ARGS_ASSERT_OP_CONTEXTUALIZE;
1619 case G_SCALAR: return scalar(o);
1620 case G_ARRAY: return list(o);
1621 case G_VOID: return scalarvoid(o);
1623 Perl_croak(aTHX_ "panic: op_contextualize bad context %ld",
1630 =for apidoc op_linklist
1631 This function is the implementation of the L</LINKLIST> macro. It should
1632 not be called directly.
1639 Perl_op_linklist(pTHX_ OP *o)
1646 PERL_ARGS_ASSERT_OP_LINKLIST;
1649 /* Descend down the tree looking for any unprocessed subtrees to
1652 if (o->op_flags & OPf_KIDS) {
1653 o = cUNOPo->op_first;
1656 o->op_next = o; /* leaf node; link to self initially */
1659 /* if we're at the top level, there either weren't any children
1660 * to process, or we've worked our way back to the top. */
1664 /* o is now processed. Next, process any sibling subtrees */
1666 if (OpHAS_SIBLING(o)) {
1671 /* Done all the subtrees at this level. Go back up a level and
1672 * link the parent in with all its (processed) children.
1675 o = o->op_sibparent;
1676 assert(!o->op_next);
1677 prevp = &(o->op_next);
1678 kid = (o->op_flags & OPf_KIDS) ? cUNOPo->op_first : NULL;
1680 *prevp = kid->op_next;
1681 prevp = &(kid->op_next);
1682 kid = OpSIBLING(kid);
1690 S_scalarkids(pTHX_ OP *o)
1692 if (o && o->op_flags & OPf_KIDS) {
1694 for (kid = cLISTOPo->op_first; kid; kid = OpSIBLING(kid))
1701 S_scalarboolean(pTHX_ OP *o)
1703 PERL_ARGS_ASSERT_SCALARBOOLEAN;
1705 if ((o->op_type == OP_SASSIGN && cBINOPo->op_first->op_type == OP_CONST &&
1706 !(cBINOPo->op_first->op_flags & OPf_SPECIAL)) ||
1707 (o->op_type == OP_NOT && cUNOPo->op_first->op_type == OP_SASSIGN &&
1708 cBINOPx(cUNOPo->op_first)->op_first->op_type == OP_CONST &&
1709 !(cBINOPx(cUNOPo->op_first)->op_first->op_flags & OPf_SPECIAL))) {
1710 if (ckWARN(WARN_SYNTAX)) {
1711 const line_t oldline = CopLINE(PL_curcop);
1713 if (PL_parser && PL_parser->copline != NOLINE) {
1714 /* This ensures that warnings are reported at the first line
1715 of the conditional, not the last. */
1716 CopLINE_set(PL_curcop, PL_parser->copline);
1718 Perl_warner(aTHX_ packWARN(WARN_SYNTAX), "Found = in conditional, should be ==");
1719 CopLINE_set(PL_curcop, oldline);
1726 S_op_varname_subscript(pTHX_ const OP *o, int subscript_type)
1729 assert(o->op_type == OP_PADAV || o->op_type == OP_RV2AV ||
1730 o->op_type == OP_PADHV || o->op_type == OP_RV2HV);
1732 const char funny = o->op_type == OP_PADAV
1733 || o->op_type == OP_RV2AV ? '@' : '%';
1734 if (o->op_type == OP_RV2AV || o->op_type == OP_RV2HV) {
1736 if (cUNOPo->op_first->op_type != OP_GV
1737 || !(gv = cGVOPx_gv(cUNOPo->op_first)))
1739 return varname(gv, funny, 0, NULL, 0, subscript_type);
1742 varname(MUTABLE_GV(PL_compcv), funny, o->op_targ, NULL, 0, subscript_type);
1747 S_op_varname(pTHX_ const OP *o)
1749 return S_op_varname_subscript(aTHX_ o, 1);
1753 S_op_pretty(pTHX_ const OP *o, SV **retsv, const char **retpv)
1754 { /* or not so pretty :-) */
1755 if (o->op_type == OP_CONST) {
1757 if (SvPOK(*retsv)) {
1759 *retsv = sv_newmortal();
1760 pv_pretty(*retsv, SvPVX_const(sv), SvCUR(sv), 32, NULL, NULL,
1761 PERL_PV_PRETTY_DUMP |PERL_PV_ESCAPE_UNI_DETECT);
1763 else if (!SvOK(*retsv))
1766 else *retpv = "...";
1770 S_scalar_slice_warning(pTHX_ const OP *o)
1773 const bool h = o->op_type == OP_HSLICE
1774 || (o->op_type == OP_NULL && o->op_targ == OP_HSLICE);
1780 SV *keysv = NULL; /* just to silence compiler warnings */
1781 const char *key = NULL;
1783 if (!(o->op_private & OPpSLICEWARNING))
1785 if (PL_parser && PL_parser->error_count)
1786 /* This warning can be nonsensical when there is a syntax error. */
1789 kid = cLISTOPo->op_first;
1790 kid = OpSIBLING(kid); /* get past pushmark */
1791 /* weed out false positives: any ops that can return lists */
1792 switch (kid->op_type) {
1818 /* Don't warn if we have a nulled list either. */
1819 if (kid->op_type == OP_NULL && kid->op_targ == OP_LIST)
1822 assert(OpSIBLING(kid));
1823 name = S_op_varname(aTHX_ OpSIBLING(kid));
1824 if (!name) /* XS module fiddling with the op tree */
1826 S_op_pretty(aTHX_ kid, &keysv, &key);
1827 assert(SvPOK(name));
1828 sv_chop(name,SvPVX(name)+1);
1830 /* diag_listed_as: Scalar value @%s[%s] better written as $%s[%s] */
1831 Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
1832 "Scalar value @%" SVf "%c%s%c better written as $%" SVf
1834 SVfARG(name), lbrack, key, rbrack, SVfARG(name),
1835 lbrack, key, rbrack);
1837 /* diag_listed_as: Scalar value @%s[%s] better written as $%s[%s] */
1838 Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
1839 "Scalar value @%" SVf "%c%" SVf "%c better written as $%"
1841 SVfARG(name), lbrack, SVfARG(keysv), rbrack,
1842 SVfARG(name), lbrack, SVfARG(keysv), rbrack);
1847 /* apply scalar context to the o subtree */
1850 Perl_scalar(pTHX_ OP *o)
1855 OP *next_kid = NULL; /* what op (if any) to process next */
1858 /* assumes no premature commitment */
1859 if (!o || (PL_parser && PL_parser->error_count)
1860 || (o->op_flags & OPf_WANT)
1861 || o->op_type == OP_RETURN)
1866 o->op_flags = (o->op_flags & ~OPf_WANT) | OPf_WANT_SCALAR;
1868 switch (o->op_type) {
1870 scalar(cBINOPo->op_first);
1871 /* convert what initially looked like a list repeat into a
1872 * scalar repeat, e.g. $s = (1) x $n
1874 if (o->op_private & OPpREPEAT_DOLIST) {
1875 kid = cLISTOPx(cUNOPo->op_first)->op_first;
1876 assert(kid->op_type == OP_PUSHMARK);
1877 if (OpHAS_SIBLING(kid) && !OpHAS_SIBLING(OpSIBLING(kid))) {
1878 op_null(cLISTOPx(cUNOPo->op_first)->op_first);
1879 o->op_private &=~ OPpREPEAT_DOLIST;
1887 /* impose scalar context on everything except the condition */
1888 next_kid = OpSIBLING(cUNOPo->op_first);
1892 if (o->op_flags & OPf_KIDS)
1893 next_kid = cUNOPo->op_first; /* do all kids */
1896 /* the children of these ops are usually a list of statements,
1897 * except the leaves, whose first child is a corresponding enter
1902 kid = cLISTOPo->op_first;
1906 kid = cLISTOPo->op_first;
1908 kid = OpSIBLING(kid);
1911 OP *sib = OpSIBLING(kid);
1912 /* Apply void context to all kids except the last, which
1913 * is scalar (ignoring a trailing ex-nextstate in determining
1914 * if it's the last kid). E.g.
1915 * $scalar = do { void; void; scalar }
1916 * Except that 'when's are always scalar, e.g.
1917 * $scalar = do { given(..) {
1918 * when (..) { scalar }
1919 * when (..) { scalar }
1924 || ( !OpHAS_SIBLING(sib)
1925 && sib->op_type == OP_NULL
1926 && ( sib->op_targ == OP_NEXTSTATE
1927 || sib->op_targ == OP_DBSTATE )
1931 /* tail call optimise calling scalar() on the last kid */
1935 else if (kid->op_type == OP_LEAVEWHEN)
1941 NOT_REACHED; /* NOTREACHED */
1945 Perl_ck_warner(aTHX_ packWARN(WARN_VOID), "Useless use of sort in scalar context");
1951 /* Warn about scalar context */
1952 const char lbrack = o->op_type == OP_KVHSLICE ? '{' : '[';
1953 const char rbrack = o->op_type == OP_KVHSLICE ? '}' : ']';
1956 const char *key = NULL;
1958 /* This warning can be nonsensical when there is a syntax error. */
1959 if (PL_parser && PL_parser->error_count)
1962 if (!ckWARN(WARN_SYNTAX)) break;
1964 kid = cLISTOPo->op_first;
1965 kid = OpSIBLING(kid); /* get past pushmark */
1966 assert(OpSIBLING(kid));
1967 name = S_op_varname(aTHX_ OpSIBLING(kid));
1968 if (!name) /* XS module fiddling with the op tree */
1970 S_op_pretty(aTHX_ kid, &keysv, &key);
1971 assert(SvPOK(name));
1972 sv_chop(name,SvPVX(name)+1);
1974 /* diag_listed_as: %%s[%s] in scalar context better written as $%s[%s] */
1975 Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
1976 "%%%" SVf "%c%s%c in scalar context better written "
1977 "as $%" SVf "%c%s%c",
1978 SVfARG(name), lbrack, key, rbrack, SVfARG(name),
1979 lbrack, key, rbrack);
1981 /* diag_listed_as: %%s[%s] in scalar context better written as $%s[%s] */
1982 Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
1983 "%%%" SVf "%c%" SVf "%c in scalar context better "
1984 "written as $%" SVf "%c%" SVf "%c",
1985 SVfARG(name), lbrack, SVfARG(keysv), rbrack,
1986 SVfARG(name), lbrack, SVfARG(keysv), rbrack);
1990 /* If next_kid is set, someone in the code above wanted us to process
1991 * that kid and all its remaining siblings. Otherwise, work our way
1992 * back up the tree */
1996 return top_op; /* at top; no parents/siblings to try */
1997 if (OpHAS_SIBLING(o))
1998 next_kid = o->op_sibparent;
2000 o = o->op_sibparent; /*try parent's next sibling */
2001 switch (o->op_type) {
2007 /* should really restore PL_curcop to its old value, but
2008 * setting it to PL_compiling is better than do nothing */
2009 PL_curcop = &PL_compiling;
2018 /* apply void context to the optree arg */
2021 Perl_scalarvoid(pTHX_ OP *arg)
2028 PERL_ARGS_ASSERT_SCALARVOID;
2032 SV *useless_sv = NULL;
2033 const char* useless = NULL;
2034 OP * next_kid = NULL;
2036 if (o->op_type == OP_NEXTSTATE
2037 || o->op_type == OP_DBSTATE
2038 || (o->op_type == OP_NULL && (o->op_targ == OP_NEXTSTATE
2039 || o->op_targ == OP_DBSTATE)))
2040 PL_curcop = (COP*)o; /* for warning below */
2042 /* assumes no premature commitment */
2043 want = o->op_flags & OPf_WANT;
2044 if ((want && want != OPf_WANT_SCALAR)
2045 || (PL_parser && PL_parser->error_count)
2046 || o->op_type == OP_RETURN || o->op_type == OP_REQUIRE || o->op_type == OP_LEAVEWHEN)
2051 if ((o->op_private & OPpTARGET_MY)
2052 && (PL_opargs[o->op_type] & OA_TARGLEX))/* OPp share the meaning */
2054 /* newASSIGNOP has already applied scalar context, which we
2055 leave, as if this op is inside SASSIGN. */
2059 o->op_flags = (o->op_flags & ~OPf_WANT) | OPf_WANT_VOID;
2061 switch (o->op_type) {
2063 if (!(PL_opargs[o->op_type] & OA_FOLDCONST))
2067 if (o->op_flags & OPf_STACKED)
2069 if (o->op_type == OP_REPEAT)
2070 scalar(cBINOPo->op_first);
2073 if ((o->op_flags & OPf_STACKED) &&
2074 !(o->op_private & OPpCONCAT_NESTED))
2078 if (o->op_private == 4)
2113 case OP_GETSOCKNAME:
2114 case OP_GETPEERNAME:
2119 case OP_GETPRIORITY:
2144 useless = OP_DESC(o);
2154 case OP_AELEMFAST_LEX:
2158 if (!(o->op_private & (OPpLVAL_INTRO|OPpOUR_INTRO)))
2159 /* Otherwise it's "Useless use of grep iterator" */
2160 useless = OP_DESC(o);
2164 if (!(o->op_private & OPpSPLIT_ASSIGN))
2165 useless = OP_DESC(o);
2169 kid = cUNOPo->op_first;
2170 if (kid->op_type != OP_MATCH && kid->op_type != OP_SUBST &&
2171 kid->op_type != OP_TRANS && kid->op_type != OP_TRANSR) {
2174 useless = "negative pattern binding (!~)";
2178 if (cPMOPo->op_pmflags & PMf_NONDESTRUCT)
2179 useless = "non-destructive substitution (s///r)";
2183 useless = "non-destructive transliteration (tr///r)";
2190 if (!(o->op_private & (OPpLVAL_INTRO|OPpOUR_INTRO)) &&
2191 (!OpHAS_SIBLING(o) || OpSIBLING(o)->op_type != OP_READLINE))
2192 useless = "a variable";
2197 if (cSVOPo->op_private & OPpCONST_STRICT)
2198 no_bareword_allowed(o);
2200 if (ckWARN(WARN_VOID)) {
2202 /* don't warn on optimised away booleans, eg
2203 * use constant Foo, 5; Foo || print; */
2204 if (cSVOPo->op_private & OPpCONST_SHORTCIRCUIT)
2206 /* the constants 0 and 1 are permitted as they are
2207 conventionally used as dummies in constructs like
2208 1 while some_condition_with_side_effects; */
2209 else if (SvNIOK(sv) && ((nv = SvNV(sv)) == 0.0 || nv == 1.0))
2211 else if (SvPOK(sv)) {
2212 SV * const dsv = newSVpvs("");
2214 = Perl_newSVpvf(aTHX_
2216 pv_pretty(dsv, SvPVX_const(sv),
2217 SvCUR(sv), 32, NULL, NULL,
2219 | PERL_PV_ESCAPE_NOCLEAR
2220 | PERL_PV_ESCAPE_UNI_DETECT));
2221 SvREFCNT_dec_NN(dsv);
2223 else if (SvOK(sv)) {
2224 useless_sv = Perl_newSVpvf(aTHX_ "a constant (%" SVf ")", SVfARG(sv));
2227 useless = "a constant (undef)";
2230 op_null(o); /* don't execute or even remember it */
2234 OpTYPE_set(o, OP_PREINC); /* pre-increment is faster */
2238 OpTYPE_set(o, OP_PREDEC); /* pre-decrement is faster */
2242 OpTYPE_set(o, OP_I_PREINC); /* pre-increment is faster */
2246 OpTYPE_set(o, OP_I_PREDEC); /* pre-decrement is faster */
2251 UNOP *refgen, *rv2cv;
2254 if ((o->op_private & ~OPpASSIGN_BACKWARDS) != 2)
2257 rv2gv = ((BINOP *)o)->op_last;
2258 if (!rv2gv || rv2gv->op_type != OP_RV2GV)
2261 refgen = (UNOP *)((BINOP *)o)->op_first;
2263 if (!refgen || (refgen->op_type != OP_REFGEN
2264 && refgen->op_type != OP_SREFGEN))
2267 exlist = (LISTOP *)refgen->op_first;
2268 if (!exlist || exlist->op_type != OP_NULL
2269 || exlist->op_targ != OP_LIST)
2272 if (exlist->op_first->op_type != OP_PUSHMARK
2273 && exlist->op_first != exlist->op_last)
2276 rv2cv = (UNOP*)exlist->op_last;
2278 if (rv2cv->op_type != OP_RV2CV)
2281 assert ((rv2gv->op_private & OPpDONT_INIT_GV) == 0);
2282 assert ((o->op_private & OPpASSIGN_CV_TO_GV) == 0);
2283 assert ((rv2cv->op_private & OPpMAY_RETURN_CONSTANT) == 0);
2285 o->op_private |= OPpASSIGN_CV_TO_GV;
2286 rv2gv->op_private |= OPpDONT_INIT_GV;
2287 rv2cv->op_private |= OPpMAY_RETURN_CONSTANT;
2299 kid = cLOGOPo->op_first;
2300 if (kid->op_type == OP_NOT
2301 && (kid->op_flags & OPf_KIDS)) {
2302 if (o->op_type == OP_AND) {
2303 OpTYPE_set(o, OP_OR);
2305 OpTYPE_set(o, OP_AND);
2315 next_kid = OpSIBLING(cUNOPo->op_first);
2319 if (o->op_flags & OPf_STACKED)
2326 if (!(o->op_flags & OPf_KIDS))
2337 next_kid = cLISTOPo->op_first;
2340 /* If the first kid after pushmark is something that the padrange
2341 optimisation would reject, then null the list and the pushmark.
2343 if ((kid = cLISTOPo->op_first)->op_type == OP_PUSHMARK
2344 && ( !(kid = OpSIBLING(kid))
2345 || ( kid->op_type != OP_PADSV
2346 && kid->op_type != OP_PADAV
2347 && kid->op_type != OP_PADHV)
2348 || kid->op_private & ~OPpLVAL_INTRO
2349 || !(kid = OpSIBLING(kid))
2350 || ( kid->op_type != OP_PADSV
2351 && kid->op_type != OP_PADAV
2352 && kid->op_type != OP_PADHV)
2353 || kid->op_private & ~OPpLVAL_INTRO)
2355 op_null(cUNOPo->op_first); /* NULL the pushmark */
2356 op_null(o); /* NULL the list */
2368 /* mortalise it, in case warnings are fatal. */
2369 Perl_ck_warner(aTHX_ packWARN(WARN_VOID),
2370 "Useless use of %" SVf " in void context",
2371 SVfARG(sv_2mortal(useless_sv)));
2374 Perl_ck_warner(aTHX_ packWARN(WARN_VOID),
2375 "Useless use of %s in void context",
2380 /* if a kid hasn't been nominated to process, continue with the
2381 * next sibling, or if no siblings left, go back to the parent's
2382 * siblings and so on
2386 return arg; /* at top; no parents/siblings to try */
2387 if (OpHAS_SIBLING(o))
2388 next_kid = o->op_sibparent;
2390 o = o->op_sibparent; /*try parent's next sibling */
2400 S_listkids(pTHX_ OP *o)
2402 if (o && o->op_flags & OPf_KIDS) {
2404 for (kid = cLISTOPo->op_first; kid; kid = OpSIBLING(kid))
2411 /* apply list context to the o subtree */
2414 Perl_list(pTHX_ OP *o)
2419 OP *next_kid = NULL; /* what op (if any) to process next */
2423 /* assumes no premature commitment */
2424 if (!o || (o->op_flags & OPf_WANT)
2425 || (PL_parser && PL_parser->error_count)
2426 || o->op_type == OP_RETURN)
2431 if ((o->op_private & OPpTARGET_MY)
2432 && (PL_opargs[o->op_type] & OA_TARGLEX))/* OPp share the meaning */
2434 goto do_next; /* As if inside SASSIGN */
2437 o->op_flags = (o->op_flags & ~OPf_WANT) | OPf_WANT_LIST;
2439 switch (o->op_type) {
2441 if (o->op_private & OPpREPEAT_DOLIST
2442 && !(o->op_flags & OPf_STACKED))
2444 list(cBINOPo->op_first);
2445 kid = cBINOPo->op_last;
2446 /* optimise away (.....) x 1 */
2447 if (kid->op_type == OP_CONST && SvIOK(kSVOP_sv)
2448 && SvIVX(kSVOP_sv) == 1)
2450 op_null(o); /* repeat */
2451 op_null(cUNOPx(cBINOPo->op_first)->op_first);/* pushmark */
2453 op_free(op_sibling_splice(o, cBINOPo->op_first, 1, NULL));
2461 /* impose list context on everything except the condition */
2462 next_kid = OpSIBLING(cUNOPo->op_first);
2466 if (!(o->op_flags & OPf_KIDS))
2468 /* possibly flatten 1..10 into a constant array */
2469 if (!o->op_next && cUNOPo->op_first->op_type == OP_FLOP) {
2470 list(cBINOPo->op_first);
2471 gen_constant_list(o);
2474 next_kid = cUNOPo->op_first; /* do all kids */
2478 if (cLISTOPo->op_first->op_type == OP_PUSHMARK) {
2479 op_null(cUNOPo->op_first); /* NULL the pushmark */
2480 op_null(o); /* NULL the list */
2482 if (o->op_flags & OPf_KIDS)
2483 next_kid = cUNOPo->op_first; /* do all kids */
2486 /* the children of these ops are usually a list of statements,
2487 * except the leaves, whose first child is a corresponding enter
2491 kid = cLISTOPo->op_first;
2495 kid = cLISTOPo->op_first;
2497 kid = OpSIBLING(kid);
2500 OP *sib = OpSIBLING(kid);
2501 /* Apply void context to all kids except the last, which
2503 * @a = do { void; void; list }
2504 * Except that 'when's are always list context, e.g.
2505 * @a = do { given(..) {
2506 * when (..) { list }
2507 * when (..) { list }
2512 /* tail call optimise calling list() on the last kid */
2516 else if (kid->op_type == OP_LEAVEWHEN)
2522 NOT_REACHED; /* NOTREACHED */
2527 /* If next_kid is set, someone in the code above wanted us to process
2528 * that kid and all its remaining siblings. Otherwise, work our way
2529 * back up the tree */
2533 return top_op; /* at top; no parents/siblings to try */
2534 if (OpHAS_SIBLING(o))
2535 next_kid = o->op_sibparent;
2537 o = o->op_sibparent; /*try parent's next sibling */
2538 switch (o->op_type) {
2544 /* should really restore PL_curcop to its old value, but
2545 * setting it to PL_compiling is better than do nothing */
2546 PL_curcop = &PL_compiling;
2558 S_scalarseq(pTHX_ OP *o)
2561 const OPCODE type = o->op_type;
2563 if (type == OP_LINESEQ || type == OP_SCOPE ||
2564 type == OP_LEAVE || type == OP_LEAVETRY)
2567 for (kid = cLISTOPo->op_first; kid; kid = sib) {
2568 if ((sib = OpSIBLING(kid))
2569 && ( OpHAS_SIBLING(sib) || sib->op_type != OP_NULL
2570 || ( sib->op_targ != OP_NEXTSTATE
2571 && sib->op_targ != OP_DBSTATE )))
2576 PL_curcop = &PL_compiling;
2578 o->op_flags &= ~OPf_PARENS;
2579 if (PL_hints & HINT_BLOCK_SCOPE)
2580 o->op_flags |= OPf_PARENS;
2583 o = newOP(OP_STUB, 0);
2588 S_modkids(pTHX_ OP *o, I32 type)
2590 if (o && o->op_flags & OPf_KIDS) {
2592 for (kid = cLISTOPo->op_first; kid; kid = OpSIBLING(kid))
2593 op_lvalue(kid, type);
2599 /* for a helem/hslice/kvslice, if its a fixed hash, croak on invalid
2600 * const fields. Also, convert CONST keys to HEK-in-SVs.
2601 * rop is the op that retrieves the hash;
2602 * key_op is the first key
2603 * real if false, only check (and possibly croak); don't update op
2607 S_check_hash_fields_and_hekify(pTHX_ UNOP *rop, SVOP *key_op, int real)
2613 /* find the padsv corresponding to $lex->{} or @{$lex}{} */
2615 if (rop->op_first->op_type == OP_PADSV)
2616 /* @$hash{qw(keys here)} */
2617 rop = (UNOP*)rop->op_first;
2619 /* @{$hash}{qw(keys here)} */
2620 if (rop->op_first->op_type == OP_SCOPE
2621 && cLISTOPx(rop->op_first)->op_last->op_type == OP_PADSV)
2623 rop = (UNOP*)cLISTOPx(rop->op_first)->op_last;
2630 lexname = NULL; /* just to silence compiler warnings */
2631 fields = NULL; /* just to silence compiler warnings */
2635 && (lexname = padnamelist_fetch(PL_comppad_name, rop->op_targ),
2636 SvPAD_TYPED(lexname))
2637 && (fields = (GV**)hv_fetchs(PadnameTYPE(lexname), "FIELDS", FALSE))
2638 && isGV(*fields) && GvHV(*fields);
2640 for (; key_op; key_op = (SVOP*)OpSIBLING(key_op)) {
2642 if (key_op->op_type != OP_CONST)
2644 svp = cSVOPx_svp(key_op);
2646 /* make sure it's not a bareword under strict subs */
2647 if (key_op->op_private & OPpCONST_BARE &&
2648 key_op->op_private & OPpCONST_STRICT)
2650 no_bareword_allowed((OP*)key_op);
2653 /* Make the CONST have a shared SV */
2654 if ( !SvIsCOW_shared_hash(sv = *svp)
2655 && SvTYPE(sv) < SVt_PVMG
2661 const char * const key = SvPV_const(sv, *(STRLEN*)&keylen);
2662 SV *nsv = newSVpvn_share(key, SvUTF8(sv) ? -keylen : keylen, 0);
2663 SvREFCNT_dec_NN(sv);
2668 && !hv_fetch_ent(GvHV(*fields), *svp, FALSE, 0))
2670 Perl_croak(aTHX_ "No such class field \"%" SVf "\" "
2671 "in variable %" PNf " of type %" HEKf,
2672 SVfARG(*svp), PNfARG(lexname),
2673 HEKfARG(HvNAME_HEK(PadnameTYPE(lexname))));
2678 /* info returned by S_sprintf_is_multiconcatable() */
2680 struct sprintf_ismc_info {
2681 SSize_t nargs; /* num of args to sprintf (not including the format) */
2682 char *start; /* start of raw format string */
2683 char *end; /* bytes after end of raw format string */
2684 STRLEN total_len; /* total length (in bytes) of format string, not
2685 including '%s' and half of '%%' */
2686 STRLEN variant; /* number of bytes by which total_len_p would grow
2687 if upgraded to utf8 */
2688 bool utf8; /* whether the format is utf8 */
2692 /* is the OP_SPRINTF o suitable for converting into a multiconcat op?
2693 * i.e. its format argument is a const string with only '%s' and '%%'
2694 * formats, and the number of args is known, e.g.
2695 * sprintf "a=%s f=%s", $a[0], scalar(f());
2697 * sprintf "i=%d a=%s f=%s", $i, @a, f();
2699 * If successful, the sprintf_ismc_info struct pointed to by info will be
2704 S_sprintf_is_multiconcatable(pTHX_ OP *o,struct sprintf_ismc_info *info)
2706 OP *pm, *constop, *kid;
2709 SSize_t nargs, nformats;
2710 STRLEN cur, total_len, variant;
2713 /* if sprintf's behaviour changes, die here so that someone
2714 * can decide whether to enhance this function or skip optimising
2715 * under those new circumstances */
2716 assert(!(o->op_flags & OPf_STACKED));
2717 assert(!(PL_opargs[OP_SPRINTF] & OA_TARGLEX));
2718 assert(!(o->op_private & ~OPpARG4_MASK));
2720 pm = cUNOPo->op_first;
2721 if (pm->op_type != OP_PUSHMARK) /* weird coreargs stuff */
2723 constop = OpSIBLING(pm);
2724 if (!constop || constop->op_type != OP_CONST)
2726 sv = cSVOPx_sv(constop);
2727 if (SvMAGICAL(sv) || !SvPOK(sv))
2733 /* Scan format for %% and %s and work out how many %s there are.
2734 * Abandon if other format types are found.
2741 for (p = s; p < e; p++) {
2744 if (!UTF8_IS_INVARIANT(*p))
2750 return FALSE; /* lone % at end gives "Invalid conversion" */
2759 if (!nformats || nformats > PERL_MULTICONCAT_MAXARG)
2762 utf8 = cBOOL(SvUTF8(sv));
2766 /* scan args; they must all be in scalar cxt */
2769 kid = OpSIBLING(constop);
2772 if ((kid->op_flags & OPf_WANT) != OPf_WANT_SCALAR)
2775 kid = OpSIBLING(kid);
2778 if (nargs != nformats)
2779 return FALSE; /* e.g. sprintf("%s%s", $a); */
2782 info->nargs = nargs;
2785 info->total_len = total_len;
2786 info->variant = variant;
2794 /* S_maybe_multiconcat():
2796 * given an OP_STRINGIFY, OP_SASSIGN, OP_CONCAT or OP_SPRINTF op, possibly
2797 * convert it (and its children) into an OP_MULTICONCAT. See the code
2798 * comments just before pp_multiconcat() for the full details of what
2799 * OP_MULTICONCAT supports.
2801 * Basically we're looking for an optree with a chain of OP_CONCATS down
2802 * the LHS (or an OP_SPRINTF), with possibly an OP_SASSIGN, and/or
2803 * OP_STRINGIFY, and/or OP_CONCAT acting as '.=' at its head, e.g.
2811 * STRINGIFY -- PADSV[$x]
2814 * ex-PUSHMARK -- CONCAT/S
2816 * CONCAT/S -- PADSV[$d]
2818 * CONCAT -- CONST["-"]
2820 * PADSV[$a] -- PADSV[$b]
2822 * Note that at this stage the OP_SASSIGN may have already been optimised
2823 * away with OPpTARGET_MY set on the OP_STRINGIFY or OP_CONCAT.
2827 S_maybe_multiconcat(pTHX_ OP *o)
2830 OP *lastkidop; /* the right-most of any kids unshifted onto o */
2831 OP *topop; /* the top-most op in the concat tree (often equals o,
2832 unless there are assign/stringify ops above it */
2833 OP *parentop; /* the parent op of topop (or itself if no parent) */
2834 OP *targmyop; /* the op (if any) with the OPpTARGET_MY flag */
2835 OP *targetop; /* the op corresponding to target=... or target.=... */
2836 OP *stringop; /* the OP_STRINGIFY op, if any */
2837 OP *nextop; /* used for recreating the op_next chain without consts */
2838 OP *kid; /* general-purpose op pointer */
2840 UNOP_AUX_item *lenp;
2841 char *const_str, *p;
2842 struct sprintf_ismc_info sprintf_info;
2844 /* store info about each arg in args[];
2845 * toparg is the highest used slot; argp is a general
2846 * pointer to args[] slots */
2848 void *p; /* initially points to const sv (or null for op);
2849 later, set to SvPV(constsv), with ... */
2850 STRLEN len; /* ... len set to SvPV(..., len) */
2851 } *argp, *toparg, args[PERL_MULTICONCAT_MAXARG*2 + 1];
2855 SSize_t nadjconst = 0; /* adjacent consts - may be demoted to args */
2858 bool kid_is_last = FALSE; /* most args will be the RHS kid of a concat op;
2859 the last-processed arg will the LHS of one,
2860 as args are processed in reverse order */
2861 U8 stacked_last = 0; /* whether the last seen concat op was STACKED */
2862 STRLEN total_len = 0; /* sum of the lengths of the const segments */
2863 U8 flags = 0; /* what will become the op_flags and ... */
2864 U8 private_flags = 0; /* ... op_private of the multiconcat op */
2865 bool is_sprintf = FALSE; /* we're optimising an sprintf */
2866 bool is_targable = FALSE; /* targetop is an OPpTARGET_MY candidate */
2867 bool prev_was_const = FALSE; /* previous arg was a const */
2869 /* -----------------------------------------------------------------
2872 * Examine the optree non-destructively to determine whether it's
2873 * suitable to be converted into an OP_MULTICONCAT. Accumulate
2874 * information about the optree in args[].
2884 assert( o->op_type == OP_SASSIGN
2885 || o->op_type == OP_CONCAT
2886 || o->op_type == OP_SPRINTF
2887 || o->op_type == OP_STRINGIFY);
2889 Zero(&sprintf_info, 1, struct sprintf_ismc_info);
2891 /* first see if, at the top of the tree, there is an assign,
2892 * append and/or stringify */
2894 if (topop->op_type == OP_SASSIGN) {
2896 if (o->op_ppaddr != PL_ppaddr[OP_SASSIGN])
2898 if (o->op_private & (OPpASSIGN_BACKWARDS|OPpASSIGN_CV_TO_GV))
2900 assert(!(o->op_private & ~OPpARG2_MASK)); /* barf on unknown flags */
2903 topop = cBINOPo->op_first;
2904 targetop = OpSIBLING(topop);
2905 if (!targetop) /* probably some sort of syntax error */
2908 else if ( topop->op_type == OP_CONCAT
2909 && (topop->op_flags & OPf_STACKED)
2910 && (!(topop->op_private & OPpCONCAT_NESTED))
2915 /* OPpTARGET_MY shouldn't be able to be set here. If it is,
2916 * decide what to do about it */
2917 assert(!(o->op_private & OPpTARGET_MY));
2919 /* barf on unknown flags */
2920 assert(!(o->op_private & ~(OPpARG2_MASK|OPpTARGET_MY)));
2921 private_flags |= OPpMULTICONCAT_APPEND;
2922 targetop = cBINOPo->op_first;
2924 topop = OpSIBLING(targetop);
2926 /* $x .= <FOO> gets optimised to rcatline instead */
2927 if (topop->op_type == OP_READLINE)
2932 /* Can targetop (the LHS) if it's a padsv, be be optimised
2933 * away and use OPpTARGET_MY instead?
2935 if ( (targetop->op_type == OP_PADSV)
2936 && !(targetop->op_private & OPpDEREF)
2937 && !(targetop->op_private & OPpPAD_STATE)
2938 /* we don't support 'my $x .= ...' */
2939 && ( o->op_type == OP_SASSIGN
2940 || !(targetop->op_private & OPpLVAL_INTRO))
2945 if (topop->op_type == OP_STRINGIFY) {
2946 if (topop->op_ppaddr != PL_ppaddr[OP_STRINGIFY])
2950 /* barf on unknown flags */
2951 assert(!(o->op_private & ~(OPpARG4_MASK|OPpTARGET_MY)));
2953 if ((topop->op_private & OPpTARGET_MY)) {
2954 if (o->op_type == OP_SASSIGN)
2955 return; /* can't have two assigns */
2959 private_flags |= OPpMULTICONCAT_STRINGIFY;
2961 topop = cBINOPx(topop)->op_first;
2962 assert(OP_TYPE_IS_OR_WAS_NN(topop, OP_PUSHMARK));
2963 topop = OpSIBLING(topop);
2966 if (topop->op_type == OP_SPRINTF) {
2967 if (topop->op_ppaddr != PL_ppaddr[OP_SPRINTF])
2969 if (S_sprintf_is_multiconcatable(aTHX_ topop, &sprintf_info)) {
2970 nargs = sprintf_info.nargs;
2971 total_len = sprintf_info.total_len;
2972 variant = sprintf_info.variant;
2973 utf8 = sprintf_info.utf8;
2975 private_flags |= OPpMULTICONCAT_FAKE;
2977 /* we have an sprintf op rather than a concat optree.
2978 * Skip most of the code below which is associated with
2979 * processing that optree. We also skip phase 2, determining
2980 * whether its cost effective to optimise, since for sprintf,
2981 * multiconcat is *always* faster */
2984 /* note that even if the sprintf itself isn't multiconcatable,
2985 * the expression as a whole may be, e.g. in
2986 * $x .= sprintf("%d",...)
2987 * the sprintf op will be left as-is, but the concat/S op may
2988 * be upgraded to multiconcat
2991 else if (topop->op_type == OP_CONCAT) {
2992 if (topop->op_ppaddr != PL_ppaddr[OP_CONCAT])
2995 if ((topop->op_private & OPpTARGET_MY)) {
2996 if (o->op_type == OP_SASSIGN || targmyop)
2997 return; /* can't have two assigns */
3002 /* Is it safe to convert a sassign/stringify/concat op into
3004 assert((PL_opargs[OP_SASSIGN] & OA_CLASS_MASK) == OA_BINOP);
3005 assert((PL_opargs[OP_CONCAT] & OA_CLASS_MASK) == OA_BINOP);
3006 assert((PL_opargs[OP_STRINGIFY] & OA_CLASS_MASK) == OA_LISTOP);
3007 assert((PL_opargs[OP_SPRINTF] & OA_CLASS_MASK) == OA_LISTOP);
3008 STATIC_ASSERT_STMT( STRUCT_OFFSET(BINOP, op_last)
3009 == STRUCT_OFFSET(UNOP_AUX, op_aux));
3010 STATIC_ASSERT_STMT( STRUCT_OFFSET(LISTOP, op_last)
3011 == STRUCT_OFFSET(UNOP_AUX, op_aux));
3013 /* Now scan the down the tree looking for a series of
3014 * CONCAT/OPf_STACKED ops on the LHS (with the last one not
3015 * stacked). For example this tree:
3020 * CONCAT/STACKED -- EXPR5
3022 * CONCAT/STACKED -- EXPR4
3028 * corresponds to an expression like
3030 * (EXPR1 . EXPR2 . EXPR3 . EXPR4 . EXPR5)
3032 * Record info about each EXPR in args[]: in particular, whether it is
3033 * a stringifiable OP_CONST and if so what the const sv is.
3035 * The reason why the last concat can't be STACKED is the difference
3038 * ((($a .= $a) .= $a) .= $a) .= $a
3041 * $a . $a . $a . $a . $a
3043 * The main difference between the optrees for those two constructs
3044 * is the presence of the last STACKED. As well as modifying $a,
3045 * the former sees the changed $a between each concat, so if $s is
3046 * initially 'a', the first returns 'a' x 16, while the latter returns
3047 * 'a' x 5. And pp_multiconcat can't handle that kind of thing.
3057 if ( kid->op_type == OP_CONCAT
3061 k1 = cUNOPx(kid)->op_first;
3063 /* shouldn't happen except maybe after compile err? */
3067 /* avoid turning (A . B . ($lex = C) ...) into (A . B . C ...) */
3068 if (kid->op_private & OPpTARGET_MY)
3071 stacked_last = (kid->op_flags & OPf_STACKED);
3083 if ( nargs + nadjconst > PERL_MULTICONCAT_MAXARG - 2
3084 || (argp - args + 1) > (PERL_MULTICONCAT_MAXARG*2 + 1) - 2)
3086 /* At least two spare slots are needed to decompose both
3087 * concat args. If there are no slots left, continue to
3088 * examine the rest of the optree, but don't push new values
3089 * on args[]. If the optree as a whole is legal for conversion
3090 * (in particular that the last concat isn't STACKED), then
3091 * the first PERL_MULTICONCAT_MAXARG elements of the optree
3092 * can be converted into an OP_MULTICONCAT now, with the first
3093 * child of that op being the remainder of the optree -
3094 * which may itself later be converted to a multiconcat op
3098 /* the last arg is the rest of the optree */
3103 else if ( argop->op_type == OP_CONST
3104 && ((sv = cSVOPx_sv(argop)))
3105 /* defer stringification until runtime of 'constant'
3106 * things that might stringify variantly, e.g. the radix
3107 * point of NVs, or overloaded RVs */
3108 && (SvPOK(sv) || SvIOK(sv))
3109 && (!SvGMAGICAL(sv))
3112 utf8 |= cBOOL(SvUTF8(sv));
3115 /* this const may be demoted back to a plain arg later;
3116 * make sure we have enough arg slots left */
3118 prev_was_const = !prev_was_const;
3123 prev_was_const = FALSE;
3133 return; /* we don't support ((A.=B).=C)...) */
3135 /* look for two adjacent consts and don't fold them together:
3138 * $o->concat("a")->concat("b")
3141 * (but $o .= "a" . "b" should still fold)
3144 bool seen_nonconst = FALSE;
3145 for (argp = toparg; argp >= args; argp--) {
3146 if (argp->p == NULL) {
3147 seen_nonconst = TRUE;
3153 /* both previous and current arg were constants;
3154 * leave the current OP_CONST as-is */
3162 /* -----------------------------------------------------------------
3165 * At this point we have determined that the optree *can* be converted
3166 * into a multiconcat. Having gathered all the evidence, we now decide
3167 * whether it *should*.
3171 /* we need at least one concat action, e.g.:
3177 * otherwise we could be doing something like $x = "foo", which
3178 * if treated as as a concat, would fail to COW.
3180 if (nargs + nconst + cBOOL(private_flags & OPpMULTICONCAT_APPEND) < 2)
3183 /* Benchmarking seems to indicate that we gain if:
3184 * * we optimise at least two actions into a single multiconcat
3185 * (e.g concat+concat, sassign+concat);
3186 * * or if we can eliminate at least 1 OP_CONST;
3187 * * or if we can eliminate a padsv via OPpTARGET_MY
3191 /* eliminated at least one OP_CONST */
3193 /* eliminated an OP_SASSIGN */
3194 || o->op_type == OP_SASSIGN
3195 /* eliminated an OP_PADSV */
3196 || (!targmyop && is_targable)
3198 /* definitely a net gain to optimise */
3201 /* ... if not, what else? */
3203 /* special-case '$lex1 = expr . $lex1' (where expr isn't lex1):
3204 * multiconcat is faster (due to not creating a temporary copy of
3205 * $lex1), whereas for a general $lex1 = $lex2 . $lex3, concat is
3211 && topop->op_type == OP_CONCAT
3213 PADOFFSET t = targmyop->op_targ;
3214 OP *k1 = cBINOPx(topop)->op_first;
3215 OP *k2 = cBINOPx(topop)->op_last;
3216 if ( k2->op_type == OP_PADSV
3218 && ( k1->op_type != OP_PADSV
3219 || k1->op_targ != t)
3224 /* need at least two concats */
3225 if (nargs + nconst + cBOOL(private_flags & OPpMULTICONCAT_APPEND) < 3)
3230 /* -----------------------------------------------------------------
3233 * At this point the optree has been verified as ok to be optimised
3234 * into an OP_MULTICONCAT. Now start changing things.
3239 /* stringify all const args and determine utf8ness */
3242 for (argp = args; argp <= toparg; argp++) {
3243 SV *sv = (SV*)argp->p;
3245 continue; /* not a const op */
3246 if (utf8 && !SvUTF8(sv))
3247 sv_utf8_upgrade_nomg(sv);
3248 argp->p = SvPV_nomg(sv, argp->len);
3249 total_len += argp->len;
3251 /* see if any strings would grow if converted to utf8 */
3253 variant += variant_under_utf8_count((U8 *) argp->p,
3254 (U8 *) argp->p + argp->len);
3258 /* create and populate aux struct */
3262 aux = (UNOP_AUX_item*)PerlMemShared_malloc(
3263 sizeof(UNOP_AUX_item)
3265 PERL_MULTICONCAT_HEADER_SIZE
3266 + ((nargs + 1) * (variant ? 2 : 1))
3269 const_str = (char *)PerlMemShared_malloc(total_len ? total_len : 1);
3271 /* Extract all the non-const expressions from the concat tree then
3272 * dispose of the old tree, e.g. convert the tree from this:
3276 * STRINGIFY -- TARGET
3278 * ex-PUSHMARK -- CONCAT
3293 * ex-PUSHMARK -- EXPR1 -- EXPR2 -- EXPR3 -- EXPR4 -- EXPR5 -- TARGET
3295 * except that if EXPRi is an OP_CONST, it's discarded.
3297 * During the conversion process, EXPR ops are stripped from the tree
3298 * and unshifted onto o. Finally, any of o's remaining original
3299 * childen are discarded and o is converted into an OP_MULTICONCAT.
3301 * In this middle of this, o may contain both: unshifted args on the
3302 * left, and some remaining original args on the right. lastkidop
3303 * is set to point to the right-most unshifted arg to delineate
3304 * between the two sets.
3309 /* create a copy of the format with the %'s removed, and record
3310 * the sizes of the const string segments in the aux struct */
3312 lenp = aux + PERL_MULTICONCAT_IX_LENGTHS;
3314 p = sprintf_info.start;
3317 for (; p < sprintf_info.end; p++) {
3321 (lenp++)->ssize = q - oldq;
3328 lenp->ssize = q - oldq;
3329 assert((STRLEN)(q - const_str) == total_len);
3331 /* Attach all the args (i.e. the kids of the sprintf) to o (which
3332 * may or may not be topop) The pushmark and const ops need to be
3333 * kept in case they're an op_next entry point.
3335 lastkidop = cLISTOPx(topop)->op_last;
3336 kid = cUNOPx(topop)->op_first; /* pushmark */
3338 op_null(OpSIBLING(kid)); /* const */
3340 kid = op_sibling_splice(topop, NULL, -1, NULL); /* cut all args */
3341 op_sibling_splice(o, NULL, 0, kid); /* and attach to o */
3342 lastkidop->op_next = o;
3347 lenp = aux + PERL_MULTICONCAT_IX_LENGTHS;
3351 /* Concatenate all const strings into const_str.
3352 * Note that args[] contains the RHS args in reverse order, so
3353 * we scan args[] from top to bottom to get constant strings
3356 for (argp = toparg; argp >= args; argp--) {
3358 /* not a const op */
3359 (++lenp)->ssize = -1;
3361 STRLEN l = argp->len;
3362 Copy(argp->p, p, l, char);
3364 if (lenp->ssize == -1)
3375 for (argp = args; argp <= toparg; argp++) {
3376 /* only keep non-const args, except keep the first-in-next-chain
3377 * arg no matter what it is (but nulled if OP_CONST), because it
3378 * may be the entry point to this subtree from the previous
3381 bool last = (argp == toparg);
3384 /* set prev to the sibling *before* the arg to be cut out,
3385 * e.g. when cutting EXPR:
3390 * prev= CONCAT -- EXPR
3393 if (argp == args && kid->op_type != OP_CONCAT) {
3394 /* in e.g. '$x .= f(1)' there's no RHS concat tree
3395 * so the expression to be cut isn't kid->op_last but
3398 /* find the op before kid */
3400 o2 = cUNOPx(parentop)->op_first;
3401 while (o2 && o2 != kid) {
3409 else if (kid == o && lastkidop)
3410 prev = last ? lastkidop : OpSIBLING(lastkidop);
3412 prev = last ? NULL : cUNOPx(kid)->op_first;
3414 if (!argp->p || last) {
3416 OP *aop = op_sibling_splice(kid, prev, 1, NULL);
3417 /* and unshift to front of o */
3418 op_sibling_splice(o, NULL, 0, aop);
3419 /* record the right-most op added to o: later we will
3420 * free anything to the right of it */
3423 aop->op_next = nextop;
3426 /* null the const at start of op_next chain */
3430 nextop = prev->op_next;
3433 /* the last two arguments are both attached to the same concat op */
3434 if (argp < toparg - 1)
3439 /* Populate the aux struct */
3441 aux[PERL_MULTICONCAT_IX_NARGS].ssize = nargs;
3442 aux[PERL_MULTICONCAT_IX_PLAIN_PV].pv = utf8 ? NULL : const_str;
3443 aux[PERL_MULTICONCAT_IX_PLAIN_LEN].ssize = utf8 ? 0 : total_len;
3444 aux[PERL_MULTICONCAT_IX_UTF8_PV].pv = const_str;
3445 aux[PERL_MULTICONCAT_IX_UTF8_LEN].ssize = total_len;
3447 /* if variant > 0, calculate a variant const string and lengths where
3448 * the utf8 version of the string will take 'variant' more bytes than
3452 char *p = const_str;
3453 STRLEN ulen = total_len + variant;
3454 UNOP_AUX_item *lens = aux + PERL_MULTICONCAT_IX_LENGTHS;
3455 UNOP_AUX_item *ulens = lens + (nargs + 1);
3456 char *up = (char*)PerlMemShared_malloc(ulen);
3459 aux[PERL_MULTICONCAT_IX_UTF8_PV].pv = up;
3460 aux[PERL_MULTICONCAT_IX_UTF8_LEN].ssize = ulen;
3462 for (n = 0; n < (nargs + 1); n++) {
3464 char * orig_up = up;
3465 for (i = (lens++)->ssize; i > 0; i--) {
3467 append_utf8_from_native_byte(c, (U8**)&up);
3469 (ulens++)->ssize = (i < 0) ? i : up - orig_up;
3474 /* if there was a top(ish)-level OP_STRINGIFY, we need to keep
3475 * that op's first child - an ex-PUSHMARK - because the op_next of
3476 * the previous op may point to it (i.e. it's the entry point for
3481 ? op_sibling_splice(o, lastkidop, 1, NULL)
3482 : op_sibling_splice(stringop, NULL, 1, NULL);
3483 assert(OP_TYPE_IS_OR_WAS_NN(pmop, OP_PUSHMARK));
3484 op_sibling_splice(o, NULL, 0, pmop);
3491 * target .= A.B.C...
3497 if (o->op_type == OP_SASSIGN) {
3498 /* Move the target subtree from being the last of o's children
3499 * to being the last of o's preserved children.
3500 * Note the difference between 'target = ...' and 'target .= ...':
3501 * for the former, target is executed last; for the latter,
3504 kid = OpSIBLING(lastkidop);
3505 op_sibling_splice(o, kid, 1, NULL); /* cut target op */
3506 op_sibling_splice(o, lastkidop, 0, targetop); /* and paste */
3507 lastkidop->op_next = kid->op_next;
3508 lastkidop = targetop;
3511 /* Move the target subtree from being the first of o's
3512 * original children to being the first of *all* o's children.
3515 op_sibling_splice(o, lastkidop, 1, NULL); /* cut target op */
3516 op_sibling_splice(o, NULL, 0, targetop); /* and paste*/
3519 /* if the RHS of .= doesn't contain a concat (e.g.
3520 * $x .= "foo"), it gets missed by the "strip ops from the
3521 * tree and add to o" loop earlier */
3522 assert(topop->op_type != OP_CONCAT);
3524 /* in e.g. $x .= "$y", move the $y expression
3525 * from being a child of OP_STRINGIFY to being the
3526 * second child of the OP_CONCAT
3528 assert(cUNOPx(stringop)->op_first == topop);
3529 op_sibling_splice(stringop, NULL, 1, NULL);
3530 op_sibling_splice(o, cUNOPo->op_first, 0, topop);
3532 assert(topop == OpSIBLING(cBINOPo->op_first));
3541 * my $lex = A.B.C...
3544 * The original padsv op is kept but nulled in case it's the
3545 * entry point for the optree (which it will be for
3548 private_flags |= OPpTARGET_MY;
3549 private_flags |= (targetop->op_private & OPpLVAL_INTRO);
3550 o->op_targ = targetop->op_targ;
3551 targetop->op_targ = 0;
3555 flags |= OPf_STACKED;
3557 else if (targmyop) {
3558 private_flags |= OPpTARGET_MY;
3559 if (o != targmyop) {
3560 o->op_targ = targmyop->op_targ;
3561 targmyop->op_targ = 0;
3565 /* detach the emaciated husk of the sprintf/concat optree and free it */
3567 kid = op_sibling_splice(o, lastkidop, 1, NULL);
3573 /* and convert o into a multiconcat */
3575 o->op_flags = (flags|OPf_KIDS|stacked_last
3576 |(o->op_flags & (OPf_WANT|OPf_PARENS)));
3577 o->op_private = private_flags;
3578 o->op_type = OP_MULTICONCAT;
3579 o->op_ppaddr = PL_ppaddr[OP_MULTICONCAT];
3580 cUNOP_AUXo->op_aux = aux;
3584 /* do all the final processing on an optree (e.g. running the peephole
3585 * optimiser on it), then attach it to cv (if cv is non-null)
3589 S_process_optree(pTHX_ CV *cv, OP *optree, OP* start)
3593 /* XXX for some reason, evals, require and main optrees are
3594 * never attached to their CV; instead they just hang off
3595 * PL_main_root + PL_main_start or PL_eval_root + PL_eval_start
3596 * and get manually freed when appropriate */
3598 startp = &CvSTART(cv);
3600 startp = PL_in_eval? &PL_eval_start : &PL_main_start;
3603 optree->op_private |= OPpREFCOUNTED;
3604 OpREFCNT_set(optree, 1);
3605 optimize_optree(optree);
3607 finalize_optree(optree);
3608 S_prune_chain_head(startp);
3611 /* now that optimizer has done its work, adjust pad values */
3612 pad_tidy(optree->op_type == OP_LEAVEWRITE ? padtidy_FORMAT
3613 : CvCLONE(cv) ? padtidy_SUBCLONE : padtidy_SUB);
3619 =for apidoc optimize_optree
3621 This function applies some optimisations to the optree in top-down order.
3622 It is called before the peephole optimizer, which processes ops in
3623 execution order. Note that finalize_optree() also does a top-down scan,
3624 but is called *after* the peephole optimizer.
3630 Perl_optimize_optree(pTHX_ OP* o)
3632 PERL_ARGS_ASSERT_OPTIMIZE_OPTREE;
3635 SAVEVPTR(PL_curcop);
3643 /* helper for optimize_optree() which optimises one op then recurses
3644 * to optimise any children.
3648 S_optimize_op(pTHX_ OP* o)
3652 PERL_ARGS_ASSERT_OPTIMIZE_OP;
3655 OP * next_kid = NULL;
3657 assert(o->op_type != OP_FREED);
3659 switch (o->op_type) {
3662 PL_curcop = ((COP*)o); /* for warnings */
3670 S_maybe_multiconcat(aTHX_ o);
3674 if (cPMOPo->op_pmreplrootu.op_pmreplroot) {
3675 /* we can't assume that op_pmreplroot->op_sibparent == o
3676 * and that it is thus possible to walk back up the tree
3677 * past op_pmreplroot. So, although we try to avoid
3678 * recursing through op trees, do it here. After all,
3679 * there are unlikely to be many nested s///e's within
3680 * the replacement part of a s///e.
3682 optimize_op(cPMOPo->op_pmreplrootu.op_pmreplroot);
3690 if (o->op_flags & OPf_KIDS)
3691 next_kid = cUNOPo->op_first;
3693 /* if a kid hasn't been nominated to process, continue with the
3694 * next sibling, or if no siblings left, go back to the parent's
3695 * siblings and so on
3699 return; /* at top; no parents/siblings to try */
3700 if (OpHAS_SIBLING(o))
3701 next_kid = o->op_sibparent;
3703 o = o->op_sibparent; /*try parent's next sibling */
3706 /* this label not yet used. Goto here if any code above sets
3716 =for apidoc finalize_optree
3718 This function finalizes the optree. Should be called directly after
3719 the complete optree is built. It does some additional
3720 checking which can't be done in the normal C<ck_>xxx functions and makes
3721 the tree thread-safe.
3726 Perl_finalize_optree(pTHX_ OP* o)
3728 PERL_ARGS_ASSERT_FINALIZE_OPTREE;
3731 SAVEVPTR(PL_curcop);
3739 /* Relocate sv to the pad for thread safety.
3740 * Despite being a "constant", the SV is written to,
3741 * for reference counts, sv_upgrade() etc. */
3742 PERL_STATIC_INLINE void
3743 S_op_relocate_sv(pTHX_ SV** svp, PADOFFSET* targp)
3746 PERL_ARGS_ASSERT_OP_RELOCATE_SV;
3748 ix = pad_alloc(OP_CONST, SVf_READONLY);
3749 SvREFCNT_dec(PAD_SVl(ix));
3750 PAD_SETSV(ix, *svp);
3751 /* XXX I don't know how this isn't readonly already. */
3752 if (!SvIsCOW(PAD_SVl(ix))) SvREADONLY_on(PAD_SVl(ix));
3759 =for apidoc traverse_op_tree
3761 Return the next op in a depth-first traversal of the op tree,
3762 returning NULL when the traversal is complete.
3764 The initial call must supply the root of the tree as both top and o.
3766 For now it's static, but it may be exposed to the API in the future.
3772 S_traverse_op_tree(pTHX_ OP *top, OP *o) {
3775 PERL_ARGS_ASSERT_TRAVERSE_OP_TREE;
3777 if ((o->op_flags & OPf_KIDS) && cUNOPo->op_first) {
3778 return cUNOPo->op_first;
3780 else if ((sib = OpSIBLING(o))) {
3784 OP *parent = o->op_sibparent;
3785 assert(!(o->op_moresib));
3786 while (parent && parent != top) {
3787 OP *sib = OpSIBLING(parent);
3790 parent = parent->op_sibparent;
3798 S_finalize_op(pTHX_ OP* o)
3801 PERL_ARGS_ASSERT_FINALIZE_OP;
3804 assert(o->op_type != OP_FREED);
3806 switch (o->op_type) {
3809 PL_curcop = ((COP*)o); /* for warnings */
3812 if (OpHAS_SIBLING(o)) {
3813 OP *sib = OpSIBLING(o);
3814 if (( sib->op_type == OP_NEXTSTATE || sib->op_type == OP_DBSTATE)
3815 && ckWARN(WARN_EXEC)
3816 && OpHAS_SIBLING(sib))
3818 const OPCODE type = OpSIBLING(sib)->op_type;
3819 if (type != OP_EXIT && type != OP_WARN && type != OP_DIE) {
3820 const line_t oldline = CopLINE(PL_curcop);
3821 CopLINE_set(PL_curcop, CopLINE((COP*)sib));
3822 Perl_warner(aTHX_ packWARN(WARN_EXEC),
3823 "Statement unlikely to be reached");
3824 Perl_warner(aTHX_ packWARN(WARN_EXEC),
3825 "\t(Maybe you meant system() when you said exec()?)\n");
3826 CopLINE_set(PL_curcop, oldline);
3833 if ((o->op_private & OPpEARLY_CV) && ckWARN(WARN_PROTOTYPE)) {
3834 GV * const gv = cGVOPo_gv;
3835 if (SvTYPE(gv) == SVt_PVGV && GvCV(gv) && SvPVX_const(GvCV(gv))) {
3836 /* XXX could check prototype here instead of just carping */
3837 SV * const sv = sv_newmortal();
3838 gv_efullname3(sv, gv, NULL);
3839 Perl_warner(aTHX_ packWARN(WARN_PROTOTYPE),
3840 "%" SVf "() called too early to check prototype",
3847 if (cSVOPo->op_private & OPpCONST_STRICT)
3848 no_bareword_allowed(o);
3852 op_relocate_sv(&cSVOPo->op_sv, &o->op_targ);
3857 /* Relocate all the METHOP's SVs to the pad for thread safety. */
3858 case OP_METHOD_NAMED:
3859 case OP_METHOD_SUPER:
3860 case OP_METHOD_REDIR:
3861 case OP_METHOD_REDIR_SUPER:
3862 op_relocate_sv(&cMETHOPx(o)->op_u.op_meth_sv, &o->op_targ);
3871 if ((key_op = cSVOPx(((BINOP*)o)->op_last))->op_type != OP_CONST)
3874 rop = (UNOP*)((BINOP*)o)->op_first;
3879 S_scalar_slice_warning(aTHX_ o);
3883 kid = OpSIBLING(cLISTOPo->op_first);
3884 if (/* I bet there's always a pushmark... */
3885 OP_TYPE_ISNT_AND_WASNT_NN(kid, OP_LIST)
3886 && OP_TYPE_ISNT_NN(kid, OP_CONST))
3891 key_op = (SVOP*)(kid->op_type == OP_CONST
3893 : OpSIBLING(kLISTOP->op_first));
3895 rop = (UNOP*)((LISTOP*)o)->op_last;
3898 if (o->op_private & OPpLVAL_INTRO || rop->op_type != OP_RV2HV)
3900 S_check_hash_fields_and_hekify(aTHX_ rop, key_op, 1);
3904 if (o->op_targ != OP_HSLICE && o->op_targ != OP_ASLICE)
3908 S_scalar_slice_warning(aTHX_ o);
3912 if (cPMOPo->op_pmreplrootu.op_pmreplroot)
3913 finalize_op(cPMOPo->op_pmreplrootu.op_pmreplroot);
3921 if (o->op_flags & OPf_KIDS) {
3924 /* check that op_last points to the last sibling, and that
3925 * the last op_sibling/op_sibparent field points back to the
3926 * parent, and that the only ops with KIDS are those which are
3927 * entitled to them */
3928 U32 type = o->op_type;
3932 if (type == OP_NULL) {
3934 /* ck_glob creates a null UNOP with ex-type GLOB
3935 * (which is a list op. So pretend it wasn't a listop */
3936 if (type == OP_GLOB)
3939 family = PL_opargs[type] & OA_CLASS_MASK;
3941 has_last = ( family == OA_BINOP
3942 || family == OA_LISTOP
3943 || family == OA_PMOP
3944 || family == OA_LOOP
3946 assert( has_last /* has op_first and op_last, or ...
3947 ... has (or may have) op_first: */
3948 || family == OA_UNOP
3949 || family == OA_UNOP_AUX
3950 || family == OA_LOGOP
3951 || family == OA_BASEOP_OR_UNOP
3952 || family == OA_FILESTATOP
3953 || family == OA_LOOPEXOP
3954 || family == OA_METHOP
3955 || type == OP_CUSTOM
3956 || type == OP_NULL /* new_logop does this */
3959 for (kid = cUNOPo->op_first; kid; kid = OpSIBLING(kid)) {
3960 if (!OpHAS_SIBLING(kid)) {
3962 assert(kid == cLISTOPo->op_last);
3963 assert(kid->op_sibparent == o);
3968 } while (( o = traverse_op_tree(top, o)) != NULL);
3972 S_mark_padname_lvalue(pTHX_ PADNAME *pn)
3975 PadnameLVALUE_on(pn);
3976 while (PadnameOUTER(pn) && PARENT_PAD_INDEX(pn)) {
3978 /* RT #127786: cv can be NULL due to an eval within the DB package
3979 * called from an anon sub - anon subs don't have CvOUTSIDE() set
3980 * unless they contain an eval, but calling eval within DB
3981 * pretends the eval was done in the caller's scope.
3985 assert(CvPADLIST(cv));
3987 PadlistNAMESARRAY(CvPADLIST(cv))[PARENT_PAD_INDEX(pn)];
3988 assert(PadnameLEN(pn));
3989 PadnameLVALUE_on(pn);
3994 S_vivifies(const OPCODE type)
3997 case OP_RV2AV: case OP_ASLICE:
3998 case OP_RV2HV: case OP_KVASLICE:
3999 case OP_RV2SV: case OP_HSLICE:
4000 case OP_AELEMFAST: case OP_KVHSLICE:
4009 /* apply lvalue reference (aliasing) context to the optree o.
4012 * o would be the list ($x,$y) and type would be OP_AASSIGN.
4013 * It may descend and apply this to children too, for example in
4014 * \( $cond ? $x, $y) = (...)
4018 S_lvref(pTHX_ OP *o, I32 type)
4025 switch (o->op_type) {
4027 o = OpSIBLING(cUNOPo->op_first);
4034 if (cUNOPo->op_first->op_type != OP_GV) goto badref;
4035 o->op_flags |= OPf_STACKED;
4036 if (o->op_flags & OPf_PARENS) {
4037 if (o->op_private & OPpLVAL_INTRO) {
4038 yyerror(Perl_form(aTHX_ "Can't modify reference to "
4039 "localized parenthesized array in list assignment"));
4043 OpTYPE_set(o, OP_LVAVREF);
4044 o->op_private &= OPpLVAL_INTRO|OPpPAD_STATE;
4045 o->op_flags |= OPf_MOD|OPf_REF;
4048 o->op_private |= OPpLVREF_AV;
4052 kid = cUNOPo->op_first;
4053 if (kid->op_type == OP_NULL)
4054 kid = cUNOPx(OpSIBLING(kUNOP->op_first))
4056 o->op_private = OPpLVREF_CV;
4057 if (kid->op_type == OP_GV)
4058 o->op_flags |= OPf_STACKED;
4059 else if (kid->op_type == OP_PADCV) {
4060 o->op_targ = kid->op_targ;
4062 op_free(cUNOPo->op_first);
4063 cUNOPo->op_first = NULL;
4064 o->op_flags &=~ OPf_KIDS;
4070 if (o->op_flags & OPf_PARENS) {
4072 yyerror(Perl_form(aTHX_ "Can't modify reference to "
4073 "parenthesized hash in list assignment"));
4076 o->op_private |= OPpLVREF_HV;
4080 if (cUNOPo->op_first->op_type != OP_GV) goto badref;
4081 o->op_flags |= OPf_STACKED;
4085 if (o->op_flags & OPf_PARENS) goto parenhash;
4086 o->op_private |= OPpLVREF_HV;
4089 PAD_COMPNAME_GEN_set(o->op_targ, PERL_INT_MAX);
4093 PAD_COMPNAME_GEN_set(o->op_targ, PERL_INT_MAX);
4094 if (o->op_flags & OPf_PARENS) goto slurpy;
4095 o->op_private |= OPpLVREF_AV;
4100 o->op_private |= OPpLVREF_ELEM;
4101 o->op_flags |= OPf_STACKED;
4106 OpTYPE_set(o, OP_LVREFSLICE);
4107 o->op_private &= OPpLVAL_INTRO;
4111 if (o->op_flags & OPf_SPECIAL) /* do BLOCK */
4113 else if (!(o->op_flags & OPf_KIDS))
4116 /* the code formerly only recursed into the first child of
4117 * a non ex-list OP_NULL. if we ever encounter such a null op with
4118 * more than one child, need to decide whether its ok to process
4119 * *all* its kids or not */
4120 assert(o->op_targ == OP_LIST
4121 || !(OpHAS_SIBLING(cBINOPo->op_first)));
4124 o = cLISTOPo->op_first;
4128 if (o->op_flags & OPf_PARENS)
4133 /* diag_listed_as: Can't modify reference to %s in %s assignment */
4134 yyerror(Perl_form(aTHX_ "Can't modify reference to %s in %s",
4135 o->op_type == OP_NULL && o->op_flags & OPf_SPECIAL
4142 OpTYPE_set(o, OP_LVREF);
4144 OPpLVAL_INTRO|OPpLVREF_ELEM|OPpLVREF_TYPE|OPpPAD_STATE;
4145 if (type == OP_ENTERLOOP)
4146 o->op_private |= OPpLVREF_ITER;
4151 return; /* at top; no parents/siblings to try */
4152 if (OpHAS_SIBLING(o)) {
4153 o = o->op_sibparent;
4156 o = o->op_sibparent; /*try parent's next sibling */
4162 PERL_STATIC_INLINE bool
4163 S_potential_mod_type(I32 type)
4165 /* Types that only potentially result in modification. */
4166 return type == OP_GREPSTART || type == OP_ENTERSUB
4167 || type == OP_REFGEN || type == OP_LEAVESUBLV;
4172 =for apidoc op_lvalue
4174 Propagate lvalue ("modifiable") context to an op and its children.
4175 C<type> represents the context type, roughly based on the type of op that
4176 would do the modifying, although C<local()> is represented by C<OP_NULL>,
4177 because it has no op type of its own (it is signalled by a flag on
4180 This function detects things that can't be modified, such as C<$x+1>, and
4181 generates errors for them. For example, C<$x+1 = 2> would cause it to be
4182 called with an op of type C<OP_ADD> and a C<type> argument of C<OP_SASSIGN>.
4184 It also flags things that need to behave specially in an lvalue context,
4185 such as C<$$x = 5> which might have to vivify a reference in C<$x>.
4189 Perl_op_lvalue_flags() is a non-API lower-level interface to
4190 op_lvalue(). The flags param has these bits:
4191 OP_LVALUE_NO_CROAK: return rather than croaking on error
4196 Perl_op_lvalue_flags(pTHX_ OP *o, I32 type, U32 flags)
4201 if (!o || (PL_parser && PL_parser->error_count))
4206 /* -1 = error on localize, 0 = ignore localize, 1 = ok to localize */
4208 OP *next_kid = NULL;
4210 if ((o->op_private & OPpTARGET_MY)
4211 && (PL_opargs[o->op_type] & OA_TARGLEX))/* OPp share the meaning */
4216 /* elements of a list might be in void context because the list is
4217 in scalar context or because they are attribute sub calls */
4218 if ((o->op_flags & OPf_WANT) == OPf_WANT_VOID)
4221 if (type == OP_PRTF || type == OP_SPRINTF) type = OP_ENTERSUB;
4223 switch (o->op_type) {
4229 if ((o->op_flags & OPf_PARENS))
4234 if ((type == OP_UNDEF || type == OP_REFGEN || type == OP_LOCK) &&
4235 !(o->op_flags & OPf_STACKED)) {
4236 OpTYPE_set(o, OP_RV2CV); /* entersub => rv2cv */
4237 assert(cUNOPo->op_first->op_type == OP_NULL);
4238 op_null(((LISTOP*)cUNOPo->op_first)->op_first);/* disable pushmark */
4241 else { /* lvalue subroutine call */
4242 o->op_private |= OPpLVAL_INTRO;
4243 PL_modcount = RETURN_UNLIMITED_NUMBER;
4244 if (S_potential_mod_type(type)) {
4245 o->op_private |= OPpENTERSUB_INARGS;
4248 else { /* Compile-time error message: */
4249 OP *kid = cUNOPo->op_first;
4254 if (kid->op_type != OP_PUSHMARK) {
4255 if (kid->op_type != OP_NULL || kid->op_targ != OP_LIST)
4257 "panic: unexpected lvalue entersub "
4258 "args: type/targ %ld:%" UVuf,
4259 (long)kid->op_type, (UV)kid->op_targ);
4260 kid = kLISTOP->op_first;
4262 while (OpHAS_SIBLING(kid))
4263 kid = OpSIBLING(kid);
4264 if (!(kid->op_type == OP_NULL && kid->op_targ == OP_RV2CV)) {
4265 break; /* Postpone until runtime */
4268 kid = kUNOP->op_first;
4269 if (kid->op_type == OP_NULL && kid->op_targ == OP_RV2SV)
4270 kid = kUNOP->op_first;
4271 if (kid->op_type == OP_NULL)
4273 "Unexpected constant lvalue entersub "
4274 "entry via type/targ %ld:%" UVuf,
4275 (long)kid->op_type, (UV)kid->op_targ);
4276 if (kid->op_type != OP_GV) {
4283 : SvROK(gv) && SvTYPE(SvRV(gv)) == SVt_PVCV
4284 ? MUTABLE_CV(SvRV(gv))
4290 if (flags & OP_LVALUE_NO_CROAK)
4293 namesv = cv_name(cv, NULL, 0);
4294 yyerror_pv(Perl_form(aTHX_ "Can't modify non-lvalue "
4295 "subroutine call of &%" SVf " in %s",
4296 SVfARG(namesv), PL_op_desc[type]),
4304 if (flags & OP_LVALUE_NO_CROAK) return NULL;
4305 /* grep, foreach, subcalls, refgen */
4306 if (S_potential_mod_type(type))
4308 yyerror(Perl_form(aTHX_ "Can't modify %s in %s",
4309 (o->op_type == OP_NULL && (o->op_flags & OPf_SPECIAL)
4312 type ? PL_op_desc[type] : "local"));
4325 case OP_RIGHT_SHIFT:
4334 if (!(o->op_flags & OPf_STACKED))
4340 if (o->op_flags & OPf_STACKED) {
4344 if (!(o->op_private & OPpREPEAT_DOLIST))
4347 const I32 mods = PL_modcount;
4348 /* we recurse rather than iterate here because we need to
4349 * calculate and use the delta applied to PL_modcount by the
4350 * first child. So in something like
4351 * ($x, ($y) x 3) = split;
4352 * split knows that 4 elements are wanted
4354 modkids(cBINOPo->op_first, type);
4355 if (type != OP_AASSIGN)
4357 kid = cBINOPo->op_last;
4358 if (kid->op_type == OP_CONST && SvIOK(kSVOP_sv)) {
4359 const IV iv = SvIV(kSVOP_sv);
4360 if (PL_modcount != RETURN_UNLIMITED_NUMBER)
4362 mods + (PL_modcount - mods) * (iv < 0 ? 0 : iv);
4365 PL_modcount = RETURN_UNLIMITED_NUMBER;
4371 next_kid = OpSIBLING(cUNOPo->op_first);
4376 if (type == OP_REFGEN && o->op_flags & OPf_PARENS) {
4377 PL_modcount = RETURN_UNLIMITED_NUMBER;
4378 /* Treat \(@foo) like ordinary list, but still mark it as modi-
4379 fiable since some contexts need to know. */
4380 o->op_flags |= OPf_MOD;
4385 if (scalar_mod_type(o, type))
4387 ref(cUNOPo->op_first, o->op_type);
4394 /* Do not apply the lvsub flag for rv2[ah]v in scalar context. */
4395 if (type == OP_LEAVESUBLV && (
4396 (o->op_type != OP_RV2AV && o->op_type != OP_RV2HV)
4397 || (o->op_flags & OPf_WANT) != OPf_WANT_SCALAR
4399 o->op_private |= OPpMAYBE_LVSUB;
4403 PL_modcount = RETURN_UNLIMITED_NUMBER;
4409 if (type == OP_LEAVESUBLV)
4410 o->op_private |= OPpMAYBE_LVSUB;
4414 if (type == OP_LEAVESUBLV
4415 && (o->op_private & OPpAVHVSWITCH_MASK) + OP_EACH == OP_KEYS)
4416 o->op_private |= OPpMAYBE_LVSUB;
4420 PL_hints |= HINT_BLOCK_SCOPE;
4421 if (type == OP_LEAVESUBLV)
4422 o->op_private |= OPpMAYBE_LVSUB;
4427 ref(cUNOPo->op_first, o->op_type);
4431 PL_hints |= HINT_BLOCK_SCOPE;
4441 case OP_AELEMFAST_LEX:
4448 PL_modcount = RETURN_UNLIMITED_NUMBER;
4449 if (type == OP_REFGEN && o->op_flags & OPf_PARENS)
4451 /* Treat \(@foo) like ordinary list, but still mark it as modi-
4452 fiable since some contexts need to know. */
4453 o->op_flags |= OPf_MOD;
4456 if (scalar_mod_type(o, type))
4458 if ((o->op_flags & OPf_WANT) != OPf_WANT_SCALAR
4459 && type == OP_LEAVESUBLV)
4460 o->op_private |= OPpMAYBE_LVSUB;
4464 if (!type) /* local() */
4465 Perl_croak(aTHX_ "Can't localize lexical variable %" PNf,
4466 PNfARG(PAD_COMPNAME(o->op_targ)));
4467 if (!(o->op_private & OPpLVAL_INTRO)
4468 || ( type != OP_SASSIGN && type != OP_AASSIGN
4469 && PadnameIsSTATE(PAD_COMPNAME_SV(o->op_targ)) ))
4470 S_mark_padname_lvalue(aTHX_ PAD_COMPNAME_SV(o->op_targ));
4478 if (type != OP_LEAVESUBLV && !scalar_mod_type(NULL, type))
4482 if (o->op_private == 4) /* don't allow 4 arg substr as lvalue */
4488 if (type == OP_LEAVESUBLV)
4489 o->op_private |= OPpMAYBE_LVSUB;
4490 if (o->op_flags & OPf_KIDS && OpHAS_SIBLING(cBINOPo->op_first)) {
4491 /* we recurse rather than iterate here because the child
4492 * needs to be processed with a different 'type' parameter */
4494 /* substr and vec */
4495 /* If this op is in merely potential (non-fatal) modifiable
4496 context, then apply OP_ENTERSUB context to
4497 the kid op (to avoid croaking). Other-
4498 wise pass this op’s own type so the correct op is mentioned
4499 in error messages. */
4500 op_lvalue(OpSIBLING(cBINOPo->op_first),
4501 S_potential_mod_type(type)
4509 ref(cBINOPo->op_first, o->op_type);
4510 if (type == OP_ENTERSUB &&
4511 !(o->op_private & (OPpLVAL_INTRO | OPpDEREF)))
4512 o->op_private |= OPpLVAL_DEFER;
4513 if (type == OP_LEAVESUBLV)
4514 o->op_private |= OPpMAYBE_LVSUB;
4521 o->op_private |= OPpLVALUE;
4527 if (o->op_flags & OPf_KIDS)
4528 next_kid = cLISTOPo->op_last;
4533 if (o->op_flags & OPf_SPECIAL) /* do BLOCK */
4535 else if (!(o->op_flags & OPf_KIDS))
4538 if (o->op_targ != OP_LIST) {
4539 OP *sib = OpSIBLING(cLISTOPo->op_first);
4540 /* OP_TRANS and OP_TRANSR with argument have a weird optree
4547 * compared with things like OP_MATCH which have the argument
4553 * so handle specially to correctly get "Can't modify" croaks etc
4556 if (sib && (sib->op_type == OP_TRANS || sib->op_type == OP_TRANSR))
4558 /* this should trigger a "Can't modify transliteration" err */
4559 op_lvalue(sib, type);
4561 next_kid = cBINOPo->op_first;
4562 /* we assume OP_NULLs which aren't ex-list have no more than 2
4563 * children. If this assumption is wrong, increase the scan
4565 assert( !OpHAS_SIBLING(next_kid)
4566 || !OpHAS_SIBLING(OpSIBLING(next_kid)));
4572 next_kid = cLISTOPo->op_first;
4580 if (type == OP_LEAVESUBLV
4581 || !S_vivifies(cLOGOPo->op_first->op_type))
4582 next_kid = cLOGOPo->op_first;
4583 else if (type == OP_LEAVESUBLV
4584 || !S_vivifies(OpSIBLING(cLOGOPo->op_first)->op_type))
4585 next_kid = OpSIBLING(cLOGOPo->op_first);
4589 if (type == OP_NULL) { /* local */
4591 if (!FEATURE_MYREF_IS_ENABLED)
4592 Perl_croak(aTHX_ "The experimental declared_refs "
4593 "feature is not enabled");
4594 Perl_ck_warner_d(aTHX_
4595 packWARN(WARN_EXPERIMENTAL__DECLARED_REFS),
4596 "Declaring references is experimental");
4597 next_kid = cUNOPo->op_first;
4600 if (type != OP_AASSIGN && type != OP_SASSIGN
4601 && type != OP_ENTERLOOP)
4603 /* Don’t bother applying lvalue context to the ex-list. */
4604 kid = cUNOPx(cUNOPo->op_first)->op_first;
4605 assert (!OpHAS_SIBLING(kid));
4608 if (type == OP_NULL) /* local */
4610 if (type != OP_AASSIGN) goto nomod;
4611 kid = cUNOPo->op_first;
4614 const U8 ec = PL_parser ? PL_parser->error_count : 0;
4615 S_lvref(aTHX_ kid, type);
4616 if (!PL_parser || PL_parser->error_count == ec) {
4617 if (!FEATURE_REFALIASING_IS_ENABLED)
4619 "Experimental aliasing via reference not enabled");
4620 Perl_ck_warner_d(aTHX_
4621 packWARN(WARN_EXPERIMENTAL__REFALIASING),
4622 "Aliasing via reference is experimental");
4625 if (o->op_type == OP_REFGEN)
4626 op_null(cUNOPx(cUNOPo->op_first)->op_first); /* pushmark */
4631 if ((o->op_private & OPpSPLIT_ASSIGN)) {
4632 /* This is actually @array = split. */
4633 PL_modcount = RETURN_UNLIMITED_NUMBER;
4639 op_lvalue(cUNOPo->op_first, OP_ENTERSUB);
4643 /* [20011101.069 (#7861)] File test operators interpret OPf_REF to mean that
4644 their argument is a filehandle; thus \stat(".") should not set
4646 if (type == OP_REFGEN && OP_IS_STAT(o->op_type))
4649 if (type != OP_LEAVESUBLV)
4650 o->op_flags |= OPf_MOD;
4652 if (type == OP_AASSIGN || type == OP_SASSIGN)
4653 o->op_flags |= OPf_SPECIAL
4654 |(o->op_type == OP_ENTERSUB ? 0 : OPf_REF);
4655 else if (!type) { /* local() */
4658 o->op_private |= OPpLVAL_INTRO;
4659 o->op_flags &= ~OPf_SPECIAL;
4660 PL_hints |= HINT_BLOCK_SCOPE;
4665 Perl_ck_warner(aTHX_ packWARN(WARN_SYNTAX),
4666 "Useless localization of %s", OP_DESC(o));