4 * Copyright (C) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
5 * 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 by Larry Wall and others
7 * You may distribute under the terms of either the GNU General Public
8 * License or the Artistic License, as specified in the README file.
13 * 'You see: Mr. Drogo, he married poor Miss Primula Brandybuck. She was
14 * our Mr. Bilbo's first cousin on the mother's side (her mother being the
15 * youngest of the Old Took's daughters); and Mr. Drogo was his second
16 * cousin. So Mr. Frodo is his first *and* second cousin, once removed
17 * either way, as the saying is, if you follow me.' --the Gaffer
19 * [p.23 of _The Lord of the Rings_, I/i: "A Long-Expected Party"]
22 /* This file contains the functions that create, manipulate and optimize
23 * the OP structures that hold a compiled perl program.
25 * Note that during the build of miniperl, a temporary copy of this file
26 * is made, called opmini.c.
28 * A Perl program is compiled into a tree of OP nodes. Each op contains:
29 * * structural OP pointers to its children and siblings (op_sibling,
30 * op_first etc) that define the tree structure;
31 * * execution order OP pointers (op_next, plus sometimes op_other,
32 * op_lastop etc) that define the execution sequence plus variants;
33 * * a pointer to the C "pp" function that would execute the op;
34 * * any data specific to that op.
35 * For example, an OP_CONST op points to the pp_const() function and to an
36 * SV containing the constant value. When pp_const() is executed, its job
37 * is to push that SV onto the stack.
39 * OPs are mainly created by the newFOO() functions, which are mainly
40 * called from the parser (in perly.y) as the code is parsed. For example
41 * the Perl code $a + $b * $c would cause the equivalent of the following
42 * to be called (oversimplifying a bit):
44 * newBINOP(OP_ADD, flags,
46 * newBINOP(OP_MULTIPLY, flags, newSVREF($b), newSVREF($c))
49 * As the parser reduces low-level rules, it creates little op subtrees;
50 * as higher-level rules are resolved, these subtrees get joined together
51 * as branches on a bigger subtree, until eventually a top-level rule like
52 * a subroutine definition is reduced, at which point there is one large
55 * The execution order pointers (op_next) are generated as the subtrees
56 * are joined together. Consider this sub-expression: A*B + C/D: at the
57 * point when it's just been parsed, the op tree looks like:
65 * with the intended execution order being:
67 * [PREV] => A => B => [*] => C => D => [/] => [+] => [NEXT]
69 * At this point all the nodes' op_next pointers will have been set,
71 * * we don't know what the [NEXT] node will be yet;
72 * * we don't know what the [PREV] node will be yet, but when it gets
73 * created and needs its op_next set, it needs to be set to point to
74 * A, which is non-obvious.
75 * To handle both those cases, we temporarily set the top node's
76 * op_next to point to the first node to be executed in this subtree (A in
77 * this case). This means that initially a subtree's op_next chain,
78 * starting from the top node, will visit each node in execution sequence
79 * then point back at the top node.
80 * When we embed this subtree in a larger tree, its top op_next is used
81 * to get the start node, then is set to point to its new neighbour.
82 * For example the two separate [*],A,B and [/],C,D subtrees would
84 * [*] => A; A => B; B => [*]
86 * [/] => C; C => D; D => [/]
87 * When these two subtrees were joined together to make the [+] subtree,
88 * [+]'s op_next was set to [*]'s op_next, i.e. A; then [*]'s op_next was
89 * set to point to [/]'s op_next, i.e. C.
91 * This op_next linking is done by the LINKLIST() macro and its underlying
92 * op_linklist() function. Given a top-level op, if its op_next is
93 * non-null, it's already been linked, so leave it. Otherwise link it with
94 * its children as described above, possibly recursively if any of the
95 * children have a null op_next.
97 * In summary: given a subtree, its top-level node's op_next will either
99 * NULL: the subtree hasn't been LINKLIST()ed yet;
100 * fake: points to the start op for this subtree;
101 * real: once the subtree has been embedded into a larger tree
106 Here's an older description from Larry.
108 Perl's compiler is essentially a 3-pass compiler with interleaved phases:
112 An execution-order pass
114 The bottom-up pass is represented by all the "newOP" routines and
115 the ck_ routines. The bottom-upness is actually driven by yacc.
116 So at the point that a ck_ routine fires, we have no idea what the
117 context is, either upward in the syntax tree, or either forward or
118 backward in the execution order. (The bottom-up parser builds that
119 part of the execution order it knows about, but if you follow the "next"
120 links around, you'll find it's actually a closed loop through the
123 Whenever the bottom-up parser gets to a node that supplies context to
124 its components, it invokes that portion of the top-down pass that applies
125 to that part of the subtree (and marks the top node as processed, so
126 if a node further up supplies context, it doesn't have to take the
127 plunge again). As a particular subcase of this, as the new node is
128 built, it takes all the closed execution loops of its subcomponents
129 and links them into a new closed loop for the higher level node. But
130 it's still not the real execution order.
132 The actual execution order is not known till we get a grammar reduction
133 to a top-level unit like a subroutine or file that will be called by
134 "name" rather than via a "next" pointer. At that point, we can call
135 into peep() to do that code's portion of the 3rd pass. It has to be
136 recursive, but it's recursive on basic blocks, not on tree nodes.
139 /* To implement user lexical pragmas, there needs to be a way at run time to
140 get the compile time state of %^H for that block. Storing %^H in every
141 block (or even COP) would be very expensive, so a different approach is
142 taken. The (running) state of %^H is serialised into a tree of HE-like
143 structs. Stores into %^H are chained onto the current leaf as a struct
144 refcounted_he * with the key and the value. Deletes from %^H are saved
145 with a value of PL_sv_placeholder. The state of %^H at any point can be
146 turned back into a regular HV by walking back up the tree from that point's
147 leaf, ignoring any key you've already seen (placeholder or not), storing
148 the rest into the HV structure, then removing the placeholders. Hence
149 memory is only used to store the %^H deltas from the enclosing COP, rather
150 than the entire %^H on each COP.
152 To cause actions on %^H to write out the serialisation records, it has
153 magic type 'H'. This magic (itself) does nothing, but its presence causes
154 the values to gain magic type 'h', which has entries for set and clear.
155 C<Perl_magic_sethint> updates C<PL_compiling.cop_hints_hash> with a store
156 record, with deletes written by C<Perl_magic_clearhint>. C<SAVEHINTS>
157 saves the current C<PL_compiling.cop_hints_hash> on the save stack, so that
158 it will be correctly restored when any inner compiling scope is exited.
164 #include "keywords.h"
168 #define CALL_PEEP(o) PL_peepp(aTHX_ o)
169 #define CALL_RPEEP(o) PL_rpeepp(aTHX_ o)
170 #define CALL_OPFREEHOOK(o) if (PL_opfreehook) PL_opfreehook(aTHX_ o)
172 static const char array_passed_to_stat[] = "Array passed to stat will be coerced to a scalar";
174 /* remove any leading "empty" ops from the op_next chain whose first
175 * node's address is stored in op_p. Store the updated address of the
176 * first node in op_p.
180 S_prune_chain_head(OP** op_p)
183 && ( (*op_p)->op_type == OP_NULL
184 || (*op_p)->op_type == OP_SCOPE
185 || (*op_p)->op_type == OP_SCALAR
186 || (*op_p)->op_type == OP_LINESEQ)
188 *op_p = (*op_p)->op_next;
192 /* See the explanatory comments above struct opslab in op.h. */
194 #ifdef PERL_DEBUG_READONLY_OPS
195 # define PERL_SLAB_SIZE 128
196 # define PERL_MAX_SLAB_SIZE 4096
197 # include <sys/mman.h>
200 #ifndef PERL_SLAB_SIZE
201 # define PERL_SLAB_SIZE 64
203 #ifndef PERL_MAX_SLAB_SIZE
204 # define PERL_MAX_SLAB_SIZE 2048
207 /* rounds up to nearest pointer */
208 #define SIZE_TO_PSIZE(x) (((x) + sizeof(I32 *) - 1)/sizeof(I32 *))
209 #define DIFF(o,p) ((size_t)((I32 **)(p) - (I32**)(o)))
211 /* malloc a new op slab (suitable for attaching to PL_compcv) */
214 S_new_slab(pTHX_ size_t sz)
216 #ifdef PERL_DEBUG_READONLY_OPS
217 OPSLAB *slab = (OPSLAB *) mmap(0, sz * sizeof(I32 *),
218 PROT_READ|PROT_WRITE,
219 MAP_ANON|MAP_PRIVATE, -1, 0);
220 DEBUG_m(PerlIO_printf(Perl_debug_log, "mapped %lu at %p\n",
221 (unsigned long) sz, slab));
222 if (slab == MAP_FAILED) {
223 perror("mmap failed");
226 slab->opslab_size = (U16)sz;
228 OPSLAB *slab = (OPSLAB *)PerlMemShared_calloc(sz, sizeof(I32 *));
231 /* The context is unused in non-Windows */
234 slab->opslab_first = (OPSLOT *)((I32 **)slab + sz - 1);
238 /* requires double parens and aTHX_ */
239 #define DEBUG_S_warn(args) \
241 PerlIO_printf(Perl_debug_log, "%s", SvPVx_nolen(Perl_mess args)) \
244 /* Returns a sz-sized block of memory (suitable for holding an op) from
245 * a free slot in the chain of op slabs attached to PL_compcv.
246 * Allocates a new slab if necessary.
247 * if PL_compcv isn't compiling, malloc() instead.
251 Perl_Slab_Alloc(pTHX_ size_t sz)
259 /* We only allocate ops from the slab during subroutine compilation.
260 We find the slab via PL_compcv, hence that must be non-NULL. It could
261 also be pointing to a subroutine which is now fully set up (CvROOT()
262 pointing to the top of the optree for that sub), or a subroutine
263 which isn't using the slab allocator. If our sanity checks aren't met,
264 don't use a slab, but allocate the OP directly from the heap. */
265 if (!PL_compcv || CvROOT(PL_compcv)
266 || (CvSTART(PL_compcv) && !CvSLABBED(PL_compcv)))
268 o = (OP*)PerlMemShared_calloc(1, sz);
272 /* While the subroutine is under construction, the slabs are accessed via
273 CvSTART(), to avoid needing to expand PVCV by one pointer for something
274 unneeded at runtime. Once a subroutine is constructed, the slabs are
275 accessed via CvROOT(). So if CvSTART() is NULL, no slab has been
276 allocated yet. See the commit message for 8be227ab5eaa23f2 for more
278 if (!CvSTART(PL_compcv)) {
280 (OP *)(slab = S_new_slab(aTHX_ PERL_SLAB_SIZE));
281 CvSLABBED_on(PL_compcv);
282 slab->opslab_refcnt = 2; /* one for the CV; one for the new OP */
284 else ++(slab = (OPSLAB *)CvSTART(PL_compcv))->opslab_refcnt;
286 opsz = SIZE_TO_PSIZE(sz);
287 sz = opsz + OPSLOT_HEADER_P;
289 /* The slabs maintain a free list of OPs. In particular, constant folding
290 will free up OPs, so it makes sense to re-use them where possible. A
291 freed up slot is used in preference to a new allocation. */
292 if (slab->opslab_freed) {
293 OP **too = &slab->opslab_freed;
295 DEBUG_S_warn((aTHX_ "found free op at %p, slab %p", (void*)o, (void*)slab));
296 while (o && DIFF(OpSLOT(o), OpSLOT(o)->opslot_next) < sz) {
297 DEBUG_S_warn((aTHX_ "Alas! too small"));
298 o = *(too = &o->op_next);
299 if (o) { DEBUG_S_warn((aTHX_ "found another free op at %p", (void*)o)); }
303 Zero(o, opsz, I32 *);
309 #define INIT_OPSLOT \
310 slot->opslot_slab = slab; \
311 slot->opslot_next = slab2->opslab_first; \
312 slab2->opslab_first = slot; \
313 o = &slot->opslot_op; \
316 /* The partially-filled slab is next in the chain. */
317 slab2 = slab->opslab_next ? slab->opslab_next : slab;
318 if ((space = DIFF(&slab2->opslab_slots, slab2->opslab_first)) < sz) {
319 /* Remaining space is too small. */
321 /* If we can fit a BASEOP, add it to the free chain, so as not
323 if (space >= SIZE_TO_PSIZE(sizeof(OP)) + OPSLOT_HEADER_P) {
324 slot = &slab2->opslab_slots;
326 o->op_type = OP_FREED;
327 o->op_next = slab->opslab_freed;
328 slab->opslab_freed = o;
331 /* Create a new slab. Make this one twice as big. */
332 slot = slab2->opslab_first;
333 while (slot->opslot_next) slot = slot->opslot_next;
334 slab2 = S_new_slab(aTHX_
335 (DIFF(slab2, slot)+1)*2 > PERL_MAX_SLAB_SIZE
337 : (DIFF(slab2, slot)+1)*2);
338 slab2->opslab_next = slab->opslab_next;
339 slab->opslab_next = slab2;
341 assert(DIFF(&slab2->opslab_slots, slab2->opslab_first) >= sz);
343 /* Create a new op slot */
344 slot = (OPSLOT *)((I32 **)slab2->opslab_first - sz);
345 assert(slot >= &slab2->opslab_slots);
346 if (DIFF(&slab2->opslab_slots, slot)
347 < SIZE_TO_PSIZE(sizeof(OP)) + OPSLOT_HEADER_P)
348 slot = &slab2->opslab_slots;
350 DEBUG_S_warn((aTHX_ "allocating op at %p, slab %p", (void*)o, (void*)slab));
353 /* moresib == 0, op_sibling == 0 implies a solitary unattached op */
354 assert(!o->op_moresib);
355 assert(!o->op_sibparent);
362 #ifdef PERL_DEBUG_READONLY_OPS
364 Perl_Slab_to_ro(pTHX_ OPSLAB *slab)
366 PERL_ARGS_ASSERT_SLAB_TO_RO;
368 if (slab->opslab_readonly) return;
369 slab->opslab_readonly = 1;
370 for (; slab; slab = slab->opslab_next) {
371 /*DEBUG_U(PerlIO_printf(Perl_debug_log,"mprotect ->ro %lu at %p\n",
372 (unsigned long) slab->opslab_size, slab));*/
373 if (mprotect(slab, slab->opslab_size * sizeof(I32 *), PROT_READ))
374 Perl_warn(aTHX_ "mprotect for %p %lu failed with %d", slab,
375 (unsigned long)slab->opslab_size, errno);
380 Perl_Slab_to_rw(pTHX_ OPSLAB *const slab)
384 PERL_ARGS_ASSERT_SLAB_TO_RW;
386 if (!slab->opslab_readonly) return;
388 for (; slab2; slab2 = slab2->opslab_next) {
389 /*DEBUG_U(PerlIO_printf(Perl_debug_log,"mprotect ->rw %lu at %p\n",
390 (unsigned long) size, slab2));*/
391 if (mprotect((void *)slab2, slab2->opslab_size * sizeof(I32 *),
392 PROT_READ|PROT_WRITE)) {
393 Perl_warn(aTHX_ "mprotect RW for %p %lu failed with %d", slab,
394 (unsigned long)slab2->opslab_size, errno);
397 slab->opslab_readonly = 0;
401 # define Slab_to_rw(op) NOOP
404 /* This cannot possibly be right, but it was copied from the old slab
405 allocator, to which it was originally added, without explanation, in
408 # define PerlMemShared PerlMem
411 /* make freed ops die if they're inadvertently executed */
416 DIE(aTHX_ "panic: freed op 0x%p called\n", PL_op);
421 /* Return the block of memory used by an op to the free list of
422 * the OP slab associated with that op.
426 Perl_Slab_Free(pTHX_ void *op)
428 OP * const o = (OP *)op;
431 PERL_ARGS_ASSERT_SLAB_FREE;
434 o->op_ppaddr = S_pp_freed;
437 if (!o->op_slabbed) {
439 PerlMemShared_free(op);
444 /* If this op is already freed, our refcount will get screwy. */
445 assert(o->op_type != OP_FREED);
446 o->op_type = OP_FREED;
447 o->op_next = slab->opslab_freed;
448 slab->opslab_freed = o;
449 DEBUG_S_warn((aTHX_ "free op at %p, recorded in slab %p", (void*)o, (void*)slab));
450 OpslabREFCNT_dec_padok(slab);
454 Perl_opslab_free_nopad(pTHX_ OPSLAB *slab)
456 const bool havepad = !!PL_comppad;
457 PERL_ARGS_ASSERT_OPSLAB_FREE_NOPAD;
460 PAD_SAVE_SETNULLPAD();
466 /* Free a chain of OP slabs. Should only be called after all ops contained
467 * in it have been freed. At this point, its reference count should be 1,
468 * because OpslabREFCNT_dec() skips doing rc-- when it detects that rc == 1,
469 * and just directly calls opslab_free().
470 * (Note that the reference count which PL_compcv held on the slab should
471 * have been removed once compilation of the sub was complete).
477 Perl_opslab_free(pTHX_ OPSLAB *slab)
480 PERL_ARGS_ASSERT_OPSLAB_FREE;
482 DEBUG_S_warn((aTHX_ "freeing slab %p", (void*)slab));
483 assert(slab->opslab_refcnt == 1);
485 slab2 = slab->opslab_next;
487 slab->opslab_refcnt = ~(size_t)0;
489 #ifdef PERL_DEBUG_READONLY_OPS
490 DEBUG_m(PerlIO_printf(Perl_debug_log, "Deallocate slab at %p\n",
492 if (munmap(slab, slab->opslab_size * sizeof(I32 *))) {
493 perror("munmap failed");
497 PerlMemShared_free(slab);
503 /* like opslab_free(), but first calls op_free() on any ops in the slab
504 * not marked as OP_FREED
508 Perl_opslab_force_free(pTHX_ OPSLAB *slab)
512 size_t savestack_count = 0;
514 PERL_ARGS_ASSERT_OPSLAB_FORCE_FREE;
518 for (slot = slab2->opslab_first;
520 slot = slot->opslot_next) {
521 if (slot->opslot_op.op_type != OP_FREED
522 && !(slot->opslot_op.op_savefree
528 assert(slot->opslot_op.op_slabbed);
529 op_free(&slot->opslot_op);
530 if (slab->opslab_refcnt == 1) goto free;
533 } while ((slab2 = slab2->opslab_next));
534 /* > 1 because the CV still holds a reference count. */
535 if (slab->opslab_refcnt > 1) { /* still referenced by the savestack */
537 assert(savestack_count == slab->opslab_refcnt-1);
539 /* Remove the CV’s reference count. */
540 slab->opslab_refcnt--;
547 #ifdef PERL_DEBUG_READONLY_OPS
549 Perl_op_refcnt_inc(pTHX_ OP *o)
552 OPSLAB *const slab = o->op_slabbed ? OpSLAB(o) : NULL;
553 if (slab && slab->opslab_readonly) {
566 Perl_op_refcnt_dec(pTHX_ OP *o)
569 OPSLAB *const slab = o->op_slabbed ? OpSLAB(o) : NULL;
571 PERL_ARGS_ASSERT_OP_REFCNT_DEC;
573 if (slab && slab->opslab_readonly) {
575 result = --o->op_targ;
578 result = --o->op_targ;
584 * In the following definition, the ", (OP*)0" is just to make the compiler
585 * think the expression is of the right type: croak actually does a Siglongjmp.
587 #define CHECKOP(type,o) \
588 ((PL_op_mask && PL_op_mask[type]) \
589 ? ( op_free((OP*)o), \
590 Perl_croak(aTHX_ "'%s' trapped by operation mask", PL_op_desc[type]), \
592 : PL_check[type](aTHX_ (OP*)o))
594 #define RETURN_UNLIMITED_NUMBER (PERL_INT_MAX / 2)
596 #define OpTYPE_set(o,type) \
598 o->op_type = (OPCODE)type; \
599 o->op_ppaddr = PL_ppaddr[type]; \
603 S_no_fh_allowed(pTHX_ OP *o)
605 PERL_ARGS_ASSERT_NO_FH_ALLOWED;
607 yyerror(Perl_form(aTHX_ "Missing comma after first argument to %s function",
613 S_too_few_arguments_pv(pTHX_ OP *o, const char* name, U32 flags)
615 PERL_ARGS_ASSERT_TOO_FEW_ARGUMENTS_PV;
616 yyerror_pv(Perl_form(aTHX_ "Not enough arguments for %s", name), flags);
621 S_too_many_arguments_pv(pTHX_ OP *o, const char *name, U32 flags)
623 PERL_ARGS_ASSERT_TOO_MANY_ARGUMENTS_PV;
625 yyerror_pv(Perl_form(aTHX_ "Too many arguments for %s", name), flags);
630 S_bad_type_pv(pTHX_ I32 n, const char *t, const OP *o, const OP *kid)
632 PERL_ARGS_ASSERT_BAD_TYPE_PV;
634 yyerror_pv(Perl_form(aTHX_ "Type of arg %d to %s must be %s (not %s)",
635 (int)n, PL_op_desc[(o)->op_type], t, OP_DESC(kid)), 0);
638 /* remove flags var, its unused in all callers, move to to right end since gv
639 and kid are always the same */
641 S_bad_type_gv(pTHX_ I32 n, GV *gv, const OP *kid, const char *t)
643 SV * const namesv = cv_name((CV *)gv, NULL, 0);
644 PERL_ARGS_ASSERT_BAD_TYPE_GV;
646 yyerror_pv(Perl_form(aTHX_ "Type of arg %d to %" SVf " must be %s (not %s)",
647 (int)n, SVfARG(namesv), t, OP_DESC(kid)), SvUTF8(namesv));
651 S_no_bareword_allowed(pTHX_ OP *o)
653 PERL_ARGS_ASSERT_NO_BAREWORD_ALLOWED;
655 qerror(Perl_mess(aTHX_
656 "Bareword \"%" SVf "\" not allowed while \"strict subs\" in use",
658 o->op_private &= ~OPpCONST_STRICT; /* prevent warning twice about the same OP */
661 /* "register" allocation */
664 Perl_allocmy(pTHX_ const char *const name, const STRLEN len, const U32 flags)
667 const bool is_our = (PL_parser->in_my == KEY_our);
669 PERL_ARGS_ASSERT_ALLOCMY;
671 if (flags & ~SVf_UTF8)
672 Perl_croak(aTHX_ "panic: allocmy illegal flag bits 0x%" UVxf,
675 /* complain about "my $<special_var>" etc etc */
679 || ( (flags & SVf_UTF8)
680 && isIDFIRST_utf8_safe((U8 *)name+1, name + len))
681 || (name[1] == '_' && len > 2)))
683 if (!(flags & SVf_UTF8 && UTF8_IS_START(name[1]))
685 && (!isPRINT(name[1]) || strchr("\t\n\r\f", name[1]))) {
686 /* diag_listed_as: Can't use global %s in "%s" */
687 yyerror(Perl_form(aTHX_ "Can't use global %c^%c%.*s in \"%s\"",
688 name[0], toCTRL(name[1]), (int)(len - 2), name + 2,
689 PL_parser->in_my == KEY_state ? "state" : "my"));
691 yyerror_pv(Perl_form(aTHX_ "Can't use global %.*s in \"%s\"", (int) len, name,
692 PL_parser->in_my == KEY_state ? "state" : "my"), flags & SVf_UTF8);
696 /* allocate a spare slot and store the name in that slot */
698 off = pad_add_name_pvn(name, len,
699 (is_our ? padadd_OUR :
700 PL_parser->in_my == KEY_state ? padadd_STATE : 0),
701 PL_parser->in_my_stash,
703 /* $_ is always in main::, even with our */
704 ? (PL_curstash && !memEQs(name,len,"$_")
710 /* anon sub prototypes contains state vars should always be cloned,
711 * otherwise the state var would be shared between anon subs */
713 if (PL_parser->in_my == KEY_state && CvANON(PL_compcv))
714 CvCLONE_on(PL_compcv);
720 =head1 Optree Manipulation Functions
722 =for apidoc alloccopstash
724 Available only under threaded builds, this function allocates an entry in
725 C<PL_stashpad> for the stash passed to it.
732 Perl_alloccopstash(pTHX_ HV *hv)
734 PADOFFSET off = 0, o = 1;
735 bool found_slot = FALSE;
737 PERL_ARGS_ASSERT_ALLOCCOPSTASH;
739 if (PL_stashpad[PL_stashpadix] == hv) return PL_stashpadix;
741 for (; o < PL_stashpadmax; ++o) {
742 if (PL_stashpad[o] == hv) return PL_stashpadix = o;
743 if (!PL_stashpad[o] || SvTYPE(PL_stashpad[o]) != SVt_PVHV)
744 found_slot = TRUE, off = o;
747 Renew(PL_stashpad, PL_stashpadmax + 10, HV *);
748 Zero(PL_stashpad + PL_stashpadmax, 10, HV *);
749 off = PL_stashpadmax;
750 PL_stashpadmax += 10;
753 PL_stashpad[PL_stashpadix = off] = hv;
758 /* free the body of an op without examining its contents.
759 * Always use this rather than FreeOp directly */
762 S_op_destroy(pTHX_ OP *o)
772 Free an op and its children. Only use this when an op is no longer linked
779 Perl_op_free(pTHX_ OP *o)
785 bool went_up = FALSE; /* whether we reached the current node by
786 following the parent pointer from a child, and
787 so have already seen this node */
789 if (!o || o->op_type == OP_FREED)
792 if (o->op_private & OPpREFCOUNTED) {
793 /* if base of tree is refcounted, just decrement */
794 switch (o->op_type) {
804 refcnt = OpREFCNT_dec(o);
807 /* Need to find and remove any pattern match ops from
808 * the list we maintain for reset(). */
809 find_and_forget_pmops(o);
822 /* free child ops before ourself, (then free ourself "on the
825 if (!went_up && o->op_flags & OPf_KIDS) {
826 next_op = cUNOPo->op_first;
830 /* find the next node to visit, *then* free the current node
831 * (can't rely on o->op_* fields being valid after o has been
834 /* The next node to visit will be either the sibling, or the
835 * parent if no siblings left, or NULL if we've worked our way
836 * back up to the top node in the tree */
837 next_op = (o == top_op) ? NULL : o->op_sibparent;
838 went_up = cBOOL(!OpHAS_SIBLING(o)); /* parents are already visited */
840 /* Now process the current node */
842 /* Though ops may be freed twice, freeing the op after its slab is a
844 assert(!o->op_slabbed || OpSLAB(o)->opslab_refcnt != ~(size_t)0);
845 /* During the forced freeing of ops after compilation failure, kidops
846 may be freed before their parents. */
847 if (!o || o->op_type == OP_FREED)
852 /* an op should only ever acquire op_private flags that we know about.
853 * If this fails, you may need to fix something in regen/op_private.
854 * Don't bother testing if:
855 * * the op_ppaddr doesn't match the op; someone may have
856 * overridden the op and be doing strange things with it;
857 * * we've errored, as op flags are often left in an
858 * inconsistent state then. Note that an error when
859 * compiling the main program leaves PL_parser NULL, so
860 * we can't spot faults in the main code, only
861 * evaled/required code */
863 if ( o->op_ppaddr == PL_ppaddr[type]
865 && !PL_parser->error_count)
867 assert(!(o->op_private & ~PL_op_private_valid[type]));
872 /* Call the op_free hook if it has been set. Do it now so that it's called
873 * at the right time for refcounted ops, but still before all of the kids
878 type = (OPCODE)o->op_targ;
881 Slab_to_rw(OpSLAB(o));
883 /* COP* is not cleared by op_clear() so that we may track line
884 * numbers etc even after null() */
885 if (type == OP_NEXTSTATE || type == OP_DBSTATE) {
897 /* S_op_clear_gv(): free a GV attached to an OP */
901 void S_op_clear_gv(pTHX_ OP *o, PADOFFSET *ixp)
903 void S_op_clear_gv(pTHX_ OP *o, SV**svp)
907 GV *gv = (o->op_type == OP_GV || o->op_type == OP_GVSV
908 || o->op_type == OP_MULTIDEREF)
911 ? ((GV*)PAD_SVl(*ixp)) : NULL;
913 ? (GV*)(*svp) : NULL;
915 /* It's possible during global destruction that the GV is freed
916 before the optree. Whilst the SvREFCNT_inc is happy to bump from
917 0 to 1 on a freed SV, the corresponding SvREFCNT_dec from 1 to 0
918 will trigger an assertion failure, because the entry to sv_clear
919 checks that the scalar is not already freed. A check of for
920 !SvIS_FREED(gv) turns out to be invalid, because during global
921 destruction the reference count can be forced down to zero
922 (with SVf_BREAK set). In which case raising to 1 and then
923 dropping to 0 triggers cleanup before it should happen. I
924 *think* that this might actually be a general, systematic,
925 weakness of the whole idea of SVf_BREAK, in that code *is*
926 allowed to raise and lower references during global destruction,
927 so any *valid* code that happens to do this during global
928 destruction might well trigger premature cleanup. */
929 bool still_valid = gv && SvREFCNT(gv);
932 SvREFCNT_inc_simple_void(gv);
935 pad_swipe(*ixp, TRUE);
943 int try_downgrade = SvREFCNT(gv) == 2;
946 gv_try_downgrade(gv);
952 Perl_op_clear(pTHX_ OP *o)
957 PERL_ARGS_ASSERT_OP_CLEAR;
959 switch (o->op_type) {
960 case OP_NULL: /* Was holding old type, if any. */
963 case OP_ENTEREVAL: /* Was holding hints. */
964 case OP_ARGDEFELEM: /* Was holding signature index. */
968 if (!(o->op_flags & OPf_REF) || !OP_IS_STAT(o->op_type))
975 S_op_clear_gv(aTHX_ o, &(cPADOPx(o)->op_padix));
977 S_op_clear_gv(aTHX_ o, &(cSVOPx(o)->op_sv));
980 case OP_METHOD_REDIR:
981 case OP_METHOD_REDIR_SUPER:
983 if (cMETHOPx(o)->op_rclass_targ) {
984 pad_swipe(cMETHOPx(o)->op_rclass_targ, 1);
985 cMETHOPx(o)->op_rclass_targ = 0;
988 SvREFCNT_dec(cMETHOPx(o)->op_rclass_sv);
989 cMETHOPx(o)->op_rclass_sv = NULL;
992 case OP_METHOD_NAMED:
993 case OP_METHOD_SUPER:
994 SvREFCNT_dec(cMETHOPx(o)->op_u.op_meth_sv);
995 cMETHOPx(o)->op_u.op_meth_sv = NULL;
998 pad_swipe(o->op_targ, 1);
1005 SvREFCNT_dec(cSVOPo->op_sv);
1006 cSVOPo->op_sv = NULL;
1009 Even if op_clear does a pad_free for the target of the op,
1010 pad_free doesn't actually remove the sv that exists in the pad;
1011 instead it lives on. This results in that it could be reused as
1012 a target later on when the pad was reallocated.
1015 pad_swipe(o->op_targ,1);
1025 if (o->op_flags & (OPf_SPECIAL|OPf_STACKED|OPf_KIDS))
1030 if ( (o->op_type == OP_TRANS || o->op_type == OP_TRANSR)
1031 && (o->op_private & (OPpTRANS_FROM_UTF|OPpTRANS_TO_UTF)))
1034 if (cPADOPo->op_padix > 0) {
1035 pad_swipe(cPADOPo->op_padix, TRUE);
1036 cPADOPo->op_padix = 0;
1039 SvREFCNT_dec(cSVOPo->op_sv);
1040 cSVOPo->op_sv = NULL;
1044 PerlMemShared_free(cPVOPo->op_pv);
1045 cPVOPo->op_pv = NULL;
1049 op_free(cPMOPo->op_pmreplrootu.op_pmreplroot);
1053 if ( (o->op_private & OPpSPLIT_ASSIGN) /* @array = split */
1054 && !(o->op_flags & OPf_STACKED)) /* @{expr} = split */
1056 if (o->op_private & OPpSPLIT_LEX)
1057 pad_free(cPMOPo->op_pmreplrootu.op_pmtargetoff);
1060 pad_swipe(cPMOPo->op_pmreplrootu.op_pmtargetoff, TRUE);
1062 SvREFCNT_dec(MUTABLE_SV(cPMOPo->op_pmreplrootu.op_pmtargetgv));
1069 if (!(cPMOPo->op_pmflags & PMf_CODELIST_PRIVATE))
1070 op_free(cPMOPo->op_code_list);
1071 cPMOPo->op_code_list = NULL;
1072 forget_pmop(cPMOPo);
1073 cPMOPo->op_pmreplrootu.op_pmreplroot = NULL;
1074 /* we use the same protection as the "SAFE" version of the PM_ macros
1075 * here since sv_clean_all might release some PMOPs
1076 * after PL_regex_padav has been cleared
1077 * and the clearing of PL_regex_padav needs to
1078 * happen before sv_clean_all
1081 if(PL_regex_pad) { /* We could be in destruction */
1082 const IV offset = (cPMOPo)->op_pmoffset;
1083 ReREFCNT_dec(PM_GETRE(cPMOPo));
1084 PL_regex_pad[offset] = &PL_sv_undef;
1085 sv_catpvn_nomg(PL_regex_pad[0], (const char *)&offset,
1089 ReREFCNT_dec(PM_GETRE(cPMOPo));
1090 PM_SETRE(cPMOPo, NULL);
1096 PerlMemShared_free(cUNOP_AUXo->op_aux);
1099 case OP_MULTICONCAT:
1101 UNOP_AUX_item *aux = cUNOP_AUXo->op_aux;
1102 /* aux[PERL_MULTICONCAT_IX_PLAIN_PV] and/or
1103 * aux[PERL_MULTICONCAT_IX_UTF8_PV] point to plain and/or
1104 * utf8 shared strings */
1105 char *p1 = aux[PERL_MULTICONCAT_IX_PLAIN_PV].pv;
1106 char *p2 = aux[PERL_MULTICONCAT_IX_UTF8_PV].pv;
1108 PerlMemShared_free(p1);
1110 PerlMemShared_free(p2);
1111 PerlMemShared_free(aux);
1117 UNOP_AUX_item *items = cUNOP_AUXo->op_aux;
1118 UV actions = items->uv;
1120 bool is_hash = FALSE;
1123 switch (actions & MDEREF_ACTION_MASK) {
1126 actions = (++items)->uv;
1129 case MDEREF_HV_padhv_helem:
1132 case MDEREF_AV_padav_aelem:
1133 pad_free((++items)->pad_offset);
1136 case MDEREF_HV_gvhv_helem:
1139 case MDEREF_AV_gvav_aelem:
1141 S_op_clear_gv(aTHX_ o, &((++items)->pad_offset));
1143 S_op_clear_gv(aTHX_ o, &((++items)->sv));
1147 case MDEREF_HV_gvsv_vivify_rv2hv_helem:
1150 case MDEREF_AV_gvsv_vivify_rv2av_aelem:
1152 S_op_clear_gv(aTHX_ o, &((++items)->pad_offset));
1154 S_op_clear_gv(aTHX_ o, &((++items)->sv));
1156 goto do_vivify_rv2xv_elem;
1158 case MDEREF_HV_padsv_vivify_rv2hv_helem:
1161 case MDEREF_AV_padsv_vivify_rv2av_aelem:
1162 pad_free((++items)->pad_offset);
1163 goto do_vivify_rv2xv_elem;
1165 case MDEREF_HV_pop_rv2hv_helem:
1166 case MDEREF_HV_vivify_rv2hv_helem:
1169 do_vivify_rv2xv_elem:
1170 case MDEREF_AV_pop_rv2av_aelem:
1171 case MDEREF_AV_vivify_rv2av_aelem:
1173 switch (actions & MDEREF_INDEX_MASK) {
1174 case MDEREF_INDEX_none:
1177 case MDEREF_INDEX_const:
1181 pad_swipe((++items)->pad_offset, 1);
1183 SvREFCNT_dec((++items)->sv);
1189 case MDEREF_INDEX_padsv:
1190 pad_free((++items)->pad_offset);
1192 case MDEREF_INDEX_gvsv:
1194 S_op_clear_gv(aTHX_ o, &((++items)->pad_offset));
1196 S_op_clear_gv(aTHX_ o, &((++items)->sv));
1201 if (actions & MDEREF_FLAG_last)
1214 actions >>= MDEREF_SHIFT;
1217 /* start of malloc is at op_aux[-1], where the length is
1219 PerlMemShared_free(cUNOP_AUXo->op_aux - 1);
1224 if (o->op_targ > 0) {
1225 pad_free(o->op_targ);
1231 S_cop_free(pTHX_ COP* cop)
1233 PERL_ARGS_ASSERT_COP_FREE;
1236 if (! specialWARN(cop->cop_warnings))
1237 PerlMemShared_free(cop->cop_warnings);
1238 cophh_free(CopHINTHASH_get(cop));
1239 if (PL_curcop == cop)
1244 S_forget_pmop(pTHX_ PMOP *const o)
1246 HV * const pmstash = PmopSTASH(o);
1248 PERL_ARGS_ASSERT_FORGET_PMOP;
1250 if (pmstash && !SvIS_FREED(pmstash) && SvMAGICAL(pmstash)) {
1251 MAGIC * const mg = mg_find((const SV *)pmstash, PERL_MAGIC_symtab);
1253 PMOP **const array = (PMOP**) mg->mg_ptr;
1254 U32 count = mg->mg_len / sizeof(PMOP**);
1258 if (array[i] == o) {
1259 /* Found it. Move the entry at the end to overwrite it. */
1260 array[i] = array[--count];
1261 mg->mg_len = count * sizeof(PMOP**);
1262 /* Could realloc smaller at this point always, but probably
1263 not worth it. Probably worth free()ing if we're the
1266 Safefree(mg->mg_ptr);
1279 S_find_and_forget_pmops(pTHX_ OP *o)
1281 PERL_ARGS_ASSERT_FIND_AND_FORGET_PMOPS;
1283 if (o->op_flags & OPf_KIDS) {
1284 OP *kid = cUNOPo->op_first;
1286 switch (kid->op_type) {
1291 forget_pmop((PMOP*)kid);
1293 find_and_forget_pmops(kid);
1294 kid = OpSIBLING(kid);
1302 Neutralizes an op when it is no longer needed, but is still linked to from
1309 Perl_op_null(pTHX_ OP *o)
1313 PERL_ARGS_ASSERT_OP_NULL;
1315 if (o->op_type == OP_NULL)
1318 o->op_targ = o->op_type;
1319 OpTYPE_set(o, OP_NULL);
1323 Perl_op_refcnt_lock(pTHX)
1324 PERL_TSA_ACQUIRE(PL_op_mutex)
1329 PERL_UNUSED_CONTEXT;
1334 Perl_op_refcnt_unlock(pTHX)
1335 PERL_TSA_RELEASE(PL_op_mutex)
1340 PERL_UNUSED_CONTEXT;
1346 =for apidoc op_sibling_splice
1348 A general function for editing the structure of an existing chain of
1349 op_sibling nodes. By analogy with the perl-level C<splice()> function, allows
1350 you to delete zero or more sequential nodes, replacing them with zero or
1351 more different nodes. Performs the necessary op_first/op_last
1352 housekeeping on the parent node and op_sibling manipulation on the
1353 children. The last deleted node will be marked as as the last node by
1354 updating the op_sibling/op_sibparent or op_moresib field as appropriate.
1356 Note that op_next is not manipulated, and nodes are not freed; that is the
1357 responsibility of the caller. It also won't create a new list op for an
1358 empty list etc; use higher-level functions like op_append_elem() for that.
1360 C<parent> is the parent node of the sibling chain. It may passed as C<NULL> if
1361 the splicing doesn't affect the first or last op in the chain.
1363 C<start> is the node preceding the first node to be spliced. Node(s)
1364 following it will be deleted, and ops will be inserted after it. If it is
1365 C<NULL>, the first node onwards is deleted, and nodes are inserted at the
1368 C<del_count> is the number of nodes to delete. If zero, no nodes are deleted.
1369 If -1 or greater than or equal to the number of remaining kids, all
1370 remaining kids are deleted.
1372 C<insert> is the first of a chain of nodes to be inserted in place of the nodes.
1373 If C<NULL>, no nodes are inserted.
1375 The head of the chain of deleted ops is returned, or C<NULL> if no ops were
1380 action before after returns
1381 ------ ----- ----- -------
1384 splice(P, A, 2, X-Y-Z) | | B-C
1388 splice(P, NULL, 1, X-Y) | | A
1392 splice(P, NULL, 3, NULL) | | A-B-C
1396 splice(P, B, 0, X-Y) | | NULL
1400 For lower-level direct manipulation of C<op_sibparent> and C<op_moresib>,
1401 see C<L</OpMORESIB_set>>, C<L</OpLASTSIB_set>>, C<L</OpMAYBESIB_set>>.
1407 Perl_op_sibling_splice(OP *parent, OP *start, int del_count, OP* insert)
1411 OP *last_del = NULL;
1412 OP *last_ins = NULL;
1415 first = OpSIBLING(start);
1419 first = cLISTOPx(parent)->op_first;
1421 assert(del_count >= -1);
1423 if (del_count && first) {
1425 while (--del_count && OpHAS_SIBLING(last_del))
1426 last_del = OpSIBLING(last_del);
1427 rest = OpSIBLING(last_del);
1428 OpLASTSIB_set(last_del, NULL);
1435 while (OpHAS_SIBLING(last_ins))
1436 last_ins = OpSIBLING(last_ins);
1437 OpMAYBESIB_set(last_ins, rest, NULL);
1443 OpMAYBESIB_set(start, insert, NULL);
1447 cLISTOPx(parent)->op_first = insert;
1449 parent->op_flags |= OPf_KIDS;
1451 parent->op_flags &= ~OPf_KIDS;
1455 /* update op_last etc */
1462 /* ought to use OP_CLASS(parent) here, but that can't handle
1463 * ex-foo OP_NULL ops. Also note that XopENTRYCUSTOM() can't
1465 type = parent->op_type;
1466 if (type == OP_CUSTOM) {
1468 type = XopENTRYCUSTOM(parent, xop_class);
1471 if (type == OP_NULL)
1472 type = parent->op_targ;
1473 type = PL_opargs[type] & OA_CLASS_MASK;
1476 lastop = last_ins ? last_ins : start ? start : NULL;
1477 if ( type == OA_BINOP
1478 || type == OA_LISTOP
1482 cLISTOPx(parent)->op_last = lastop;
1485 OpLASTSIB_set(lastop, parent);
1487 return last_del ? first : NULL;
1490 Perl_croak_nocontext("panic: op_sibling_splice(): NULL parent");
1494 =for apidoc op_parent
1496 Returns the parent OP of C<o>, if it has a parent. Returns C<NULL> otherwise.
1502 Perl_op_parent(OP *o)
1504 PERL_ARGS_ASSERT_OP_PARENT;
1505 while (OpHAS_SIBLING(o))
1507 return o->op_sibparent;
1510 /* replace the sibling following start with a new UNOP, which becomes
1511 * the parent of the original sibling; e.g.
1513 * op_sibling_newUNOP(P, A, unop-args...)
1521 * where U is the new UNOP.
1523 * parent and start args are the same as for op_sibling_splice();
1524 * type and flags args are as newUNOP().
1526 * Returns the new UNOP.
1530 S_op_sibling_newUNOP(pTHX_ OP *parent, OP *start, I32 type, I32 flags)
1534 kid = op_sibling_splice(parent, start, 1, NULL);
1535 newop = newUNOP(type, flags, kid);
1536 op_sibling_splice(parent, start, 0, newop);
1541 /* lowest-level newLOGOP-style function - just allocates and populates
1542 * the struct. Higher-level stuff should be done by S_new_logop() /
1543 * newLOGOP(). This function exists mainly to avoid op_first assignment
1544 * being spread throughout this file.
1548 Perl_alloc_LOGOP(pTHX_ I32 type, OP *first, OP* other)
1553 NewOp(1101, logop, 1, LOGOP);
1554 OpTYPE_set(logop, type);
1555 logop->op_first = first;
1556 logop->op_other = other;
1558 logop->op_flags = OPf_KIDS;
1559 while (kid && OpHAS_SIBLING(kid))
1560 kid = OpSIBLING(kid);
1562 OpLASTSIB_set(kid, (OP*)logop);
1567 /* Contextualizers */
1570 =for apidoc op_contextualize
1572 Applies a syntactic context to an op tree representing an expression.
1573 C<o> is the op tree, and C<context> must be C<G_SCALAR>, C<G_ARRAY>,
1574 or C<G_VOID> to specify the context to apply. The modified op tree
1581 Perl_op_contextualize(pTHX_ OP *o, I32 context)
1583 PERL_ARGS_ASSERT_OP_CONTEXTUALIZE;
1585 case G_SCALAR: return scalar(o);
1586 case G_ARRAY: return list(o);
1587 case G_VOID: return scalarvoid(o);
1589 Perl_croak(aTHX_ "panic: op_contextualize bad context %ld",
1596 =for apidoc op_linklist
1597 This function is the implementation of the L</LINKLIST> macro. It should
1598 not be called directly.
1604 Perl_op_linklist(pTHX_ OP *o)
1608 PERL_ARGS_ASSERT_OP_LINKLIST;
1613 /* establish postfix order */
1614 first = cUNOPo->op_first;
1617 o->op_next = LINKLIST(first);
1620 OP *sibl = OpSIBLING(kid);
1622 kid->op_next = LINKLIST(sibl);
1637 S_scalarkids(pTHX_ OP *o)
1639 if (o && o->op_flags & OPf_KIDS) {
1641 for (kid = cLISTOPo->op_first; kid; kid = OpSIBLING(kid))
1648 S_scalarboolean(pTHX_ OP *o)
1650 PERL_ARGS_ASSERT_SCALARBOOLEAN;
1652 if ((o->op_type == OP_SASSIGN && cBINOPo->op_first->op_type == OP_CONST &&
1653 !(cBINOPo->op_first->op_flags & OPf_SPECIAL)) ||
1654 (o->op_type == OP_NOT && cUNOPo->op_first->op_type == OP_SASSIGN &&
1655 cBINOPx(cUNOPo->op_first)->op_first->op_type == OP_CONST &&
1656 !(cBINOPx(cUNOPo->op_first)->op_first->op_flags & OPf_SPECIAL))) {
1657 if (ckWARN(WARN_SYNTAX)) {
1658 const line_t oldline = CopLINE(PL_curcop);
1660 if (PL_parser && PL_parser->copline != NOLINE) {
1661 /* This ensures that warnings are reported at the first line
1662 of the conditional, not the last. */
1663 CopLINE_set(PL_curcop, PL_parser->copline);
1665 Perl_warner(aTHX_ packWARN(WARN_SYNTAX), "Found = in conditional, should be ==");
1666 CopLINE_set(PL_curcop, oldline);
1673 S_op_varname_subscript(pTHX_ const OP *o, int subscript_type)
1676 assert(o->op_type == OP_PADAV || o->op_type == OP_RV2AV ||
1677 o->op_type == OP_PADHV || o->op_type == OP_RV2HV);
1679 const char funny = o->op_type == OP_PADAV
1680 || o->op_type == OP_RV2AV ? '@' : '%';
1681 if (o->op_type == OP_RV2AV || o->op_type == OP_RV2HV) {
1683 if (cUNOPo->op_first->op_type != OP_GV
1684 || !(gv = cGVOPx_gv(cUNOPo->op_first)))
1686 return varname(gv, funny, 0, NULL, 0, subscript_type);
1689 varname(MUTABLE_GV(PL_compcv), funny, o->op_targ, NULL, 0, subscript_type);
1694 S_op_varname(pTHX_ const OP *o)
1696 return S_op_varname_subscript(aTHX_ o, 1);
1700 S_op_pretty(pTHX_ const OP *o, SV **retsv, const char **retpv)
1701 { /* or not so pretty :-) */
1702 if (o->op_type == OP_CONST) {
1704 if (SvPOK(*retsv)) {
1706 *retsv = sv_newmortal();
1707 pv_pretty(*retsv, SvPVX_const(sv), SvCUR(sv), 32, NULL, NULL,
1708 PERL_PV_PRETTY_DUMP |PERL_PV_ESCAPE_UNI_DETECT);
1710 else if (!SvOK(*retsv))
1713 else *retpv = "...";
1717 S_scalar_slice_warning(pTHX_ const OP *o)
1720 const bool h = o->op_type == OP_HSLICE
1721 || (o->op_type == OP_NULL && o->op_targ == OP_HSLICE);
1727 SV *keysv = NULL; /* just to silence compiler warnings */
1728 const char *key = NULL;
1730 if (!(o->op_private & OPpSLICEWARNING))
1732 if (PL_parser && PL_parser->error_count)
1733 /* This warning can be nonsensical when there is a syntax error. */
1736 kid = cLISTOPo->op_first;
1737 kid = OpSIBLING(kid); /* get past pushmark */
1738 /* weed out false positives: any ops that can return lists */
1739 switch (kid->op_type) {
1765 /* Don't warn if we have a nulled list either. */
1766 if (kid->op_type == OP_NULL && kid->op_targ == OP_LIST)
1769 assert(OpSIBLING(kid));
1770 name = S_op_varname(aTHX_ OpSIBLING(kid));
1771 if (!name) /* XS module fiddling with the op tree */
1773 S_op_pretty(aTHX_ kid, &keysv, &key);
1774 assert(SvPOK(name));
1775 sv_chop(name,SvPVX(name)+1);
1777 /* diag_listed_as: Scalar value @%s[%s] better written as $%s[%s] */
1778 Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
1779 "Scalar value @%" SVf "%c%s%c better written as $%" SVf
1781 SVfARG(name), lbrack, key, rbrack, SVfARG(name),
1782 lbrack, key, rbrack);
1784 /* diag_listed_as: Scalar value @%s[%s] better written as $%s[%s] */
1785 Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
1786 "Scalar value @%" SVf "%c%" SVf "%c better written as $%"
1788 SVfARG(name), lbrack, SVfARG(keysv), rbrack,
1789 SVfARG(name), lbrack, SVfARG(keysv), rbrack);
1793 Perl_scalar(pTHX_ OP *o)
1797 /* assumes no premature commitment */
1798 if (!o || (PL_parser && PL_parser->error_count)
1799 || (o->op_flags & OPf_WANT)
1800 || o->op_type == OP_RETURN)
1805 o->op_flags = (o->op_flags & ~OPf_WANT) | OPf_WANT_SCALAR;
1807 switch (o->op_type) {
1809 scalar(cBINOPo->op_first);
1810 if (o->op_private & OPpREPEAT_DOLIST) {
1811 kid = cLISTOPx(cUNOPo->op_first)->op_first;
1812 assert(kid->op_type == OP_PUSHMARK);
1813 if (OpHAS_SIBLING(kid) && !OpHAS_SIBLING(OpSIBLING(kid))) {
1814 op_null(cLISTOPx(cUNOPo->op_first)->op_first);
1815 o->op_private &=~ OPpREPEAT_DOLIST;
1822 for (kid = OpSIBLING(cUNOPo->op_first); kid; kid = OpSIBLING(kid))
1832 if (o->op_flags & OPf_KIDS) {
1833 for (kid = cUNOPo->op_first; kid; kid = OpSIBLING(kid))
1839 kid = cLISTOPo->op_first;
1841 kid = OpSIBLING(kid);
1844 OP *sib = OpSIBLING(kid);
1845 if (sib && kid->op_type != OP_LEAVEWHEN
1846 && ( OpHAS_SIBLING(sib) || sib->op_type != OP_NULL
1847 || ( sib->op_targ != OP_NEXTSTATE
1848 && sib->op_targ != OP_DBSTATE )))
1854 PL_curcop = &PL_compiling;
1859 kid = cLISTOPo->op_first;
1862 Perl_ck_warner(aTHX_ packWARN(WARN_VOID), "Useless use of sort in scalar context");
1867 /* Warn about scalar context */
1868 const char lbrack = o->op_type == OP_KVHSLICE ? '{' : '[';
1869 const char rbrack = o->op_type == OP_KVHSLICE ? '}' : ']';
1872 const char *key = NULL;
1874 /* This warning can be nonsensical when there is a syntax error. */
1875 if (PL_parser && PL_parser->error_count)
1878 if (!ckWARN(WARN_SYNTAX)) break;
1880 kid = cLISTOPo->op_first;
1881 kid = OpSIBLING(kid); /* get past pushmark */
1882 assert(OpSIBLING(kid));
1883 name = S_op_varname(aTHX_ OpSIBLING(kid));
1884 if (!name) /* XS module fiddling with the op tree */
1886 S_op_pretty(aTHX_ kid, &keysv, &key);
1887 assert(SvPOK(name));
1888 sv_chop(name,SvPVX(name)+1);
1890 /* diag_listed_as: %%s[%s] in scalar context better written as $%s[%s] */
1891 Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
1892 "%%%" SVf "%c%s%c in scalar context better written "
1893 "as $%" SVf "%c%s%c",
1894 SVfARG(name), lbrack, key, rbrack, SVfARG(name),
1895 lbrack, key, rbrack);
1897 /* diag_listed_as: %%s[%s] in scalar context better written as $%s[%s] */
1898 Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
1899 "%%%" SVf "%c%" SVf "%c in scalar context better "
1900 "written as $%" SVf "%c%" SVf "%c",
1901 SVfARG(name), lbrack, SVfARG(keysv), rbrack,
1902 SVfARG(name), lbrack, SVfARG(keysv), rbrack);
1909 Perl_scalarvoid(pTHX_ OP *arg)
1916 PERL_ARGS_ASSERT_SCALARVOID;
1920 SV *useless_sv = NULL;
1921 const char* useless = NULL;
1922 OP * next_kid = NULL;
1924 if (o->op_type == OP_NEXTSTATE
1925 || o->op_type == OP_DBSTATE
1926 || (o->op_type == OP_NULL && (o->op_targ == OP_NEXTSTATE
1927 || o->op_targ == OP_DBSTATE)))
1928 PL_curcop = (COP*)o; /* for warning below */
1930 /* assumes no premature commitment */
1931 want = o->op_flags & OPf_WANT;
1932 if ((want && want != OPf_WANT_SCALAR)
1933 || (PL_parser && PL_parser->error_count)
1934 || o->op_type == OP_RETURN || o->op_type == OP_REQUIRE || o->op_type == OP_LEAVEWHEN)
1939 if ((o->op_private & OPpTARGET_MY)
1940 && (PL_opargs[o->op_type] & OA_TARGLEX))/* OPp share the meaning */
1942 /* newASSIGNOP has already applied scalar context, which we
1943 leave, as if this op is inside SASSIGN. */
1947 o->op_flags = (o->op_flags & ~OPf_WANT) | OPf_WANT_VOID;
1949 switch (o->op_type) {
1951 if (!(PL_opargs[o->op_type] & OA_FOLDCONST))
1955 if (o->op_flags & OPf_STACKED)
1957 if (o->op_type == OP_REPEAT)
1958 scalar(cBINOPo->op_first);
1961 if ((o->op_flags & OPf_STACKED) &&
1962 !(o->op_private & OPpCONCAT_NESTED))
1966 if (o->op_private == 4)
2001 case OP_GETSOCKNAME:
2002 case OP_GETPEERNAME:
2007 case OP_GETPRIORITY:
2032 useless = OP_DESC(o);
2042 case OP_AELEMFAST_LEX:
2046 if (!(o->op_private & (OPpLVAL_INTRO|OPpOUR_INTRO)))
2047 /* Otherwise it's "Useless use of grep iterator" */
2048 useless = OP_DESC(o);
2052 if (!(o->op_private & OPpSPLIT_ASSIGN))
2053 useless = OP_DESC(o);
2057 kid = cUNOPo->op_first;
2058 if (kid->op_type != OP_MATCH && kid->op_type != OP_SUBST &&
2059 kid->op_type != OP_TRANS && kid->op_type != OP_TRANSR) {
2062 useless = "negative pattern binding (!~)";
2066 if (cPMOPo->op_pmflags & PMf_NONDESTRUCT)
2067 useless = "non-destructive substitution (s///r)";
2071 useless = "non-destructive transliteration (tr///r)";
2078 if (!(o->op_private & (OPpLVAL_INTRO|OPpOUR_INTRO)) &&
2079 (!OpHAS_SIBLING(o) || OpSIBLING(o)->op_type != OP_READLINE))
2080 useless = "a variable";
2085 if (cSVOPo->op_private & OPpCONST_STRICT)
2086 no_bareword_allowed(o);
2088 if (ckWARN(WARN_VOID)) {
2090 /* don't warn on optimised away booleans, eg
2091 * use constant Foo, 5; Foo || print; */
2092 if (cSVOPo->op_private & OPpCONST_SHORTCIRCUIT)
2094 /* the constants 0 and 1 are permitted as they are
2095 conventionally used as dummies in constructs like
2096 1 while some_condition_with_side_effects; */
2097 else if (SvNIOK(sv) && ((nv = SvNV(sv)) == 0.0 || nv == 1.0))
2099 else if (SvPOK(sv)) {
2100 SV * const dsv = newSVpvs("");
2102 = Perl_newSVpvf(aTHX_
2104 pv_pretty(dsv, SvPVX_const(sv),
2105 SvCUR(sv), 32, NULL, NULL,
2107 | PERL_PV_ESCAPE_NOCLEAR
2108 | PERL_PV_ESCAPE_UNI_DETECT));
2109 SvREFCNT_dec_NN(dsv);
2111 else if (SvOK(sv)) {
2112 useless_sv = Perl_newSVpvf(aTHX_ "a constant (%" SVf ")", SVfARG(sv));
2115 useless = "a constant (undef)";
2118 op_null(o); /* don't execute or even remember it */
2122 OpTYPE_set(o, OP_PREINC); /* pre-increment is faster */
2126 OpTYPE_set(o, OP_PREDEC); /* pre-decrement is faster */
2130 OpTYPE_set(o, OP_I_PREINC); /* pre-increment is faster */
2134 OpTYPE_set(o, OP_I_PREDEC); /* pre-decrement is faster */
2139 UNOP *refgen, *rv2cv;
2142 if ((o->op_private & ~OPpASSIGN_BACKWARDS) != 2)
2145 rv2gv = ((BINOP *)o)->op_last;
2146 if (!rv2gv || rv2gv->op_type != OP_RV2GV)
2149 refgen = (UNOP *)((BINOP *)o)->op_first;
2151 if (!refgen || (refgen->op_type != OP_REFGEN
2152 && refgen->op_type != OP_SREFGEN))
2155 exlist = (LISTOP *)refgen->op_first;
2156 if (!exlist || exlist->op_type != OP_NULL
2157 || exlist->op_targ != OP_LIST)
2160 if (exlist->op_first->op_type != OP_PUSHMARK
2161 && exlist->op_first != exlist->op_last)
2164 rv2cv = (UNOP*)exlist->op_last;
2166 if (rv2cv->op_type != OP_RV2CV)
2169 assert ((rv2gv->op_private & OPpDONT_INIT_GV) == 0);
2170 assert ((o->op_private & OPpASSIGN_CV_TO_GV) == 0);
2171 assert ((rv2cv->op_private & OPpMAY_RETURN_CONSTANT) == 0);
2173 o->op_private |= OPpASSIGN_CV_TO_GV;
2174 rv2gv->op_private |= OPpDONT_INIT_GV;
2175 rv2cv->op_private |= OPpMAY_RETURN_CONSTANT;
2187 kid = cLOGOPo->op_first;
2188 if (kid->op_type == OP_NOT
2189 && (kid->op_flags & OPf_KIDS)) {
2190 if (o->op_type == OP_AND) {
2191 OpTYPE_set(o, OP_OR);
2193 OpTYPE_set(o, OP_AND);
2203 next_kid = OpSIBLING(cUNOPo->op_first);
2207 if (o->op_flags & OPf_STACKED)
2214 if (!(o->op_flags & OPf_KIDS))
2225 next_kid = cLISTOPo->op_first;
2228 /* If the first kid after pushmark is something that the padrange
2229 optimisation would reject, then null the list and the pushmark.
2231 if ((kid = cLISTOPo->op_first)->op_type == OP_PUSHMARK
2232 && ( !(kid = OpSIBLING(kid))
2233 || ( kid->op_type != OP_PADSV
2234 && kid->op_type != OP_PADAV
2235 && kid->op_type != OP_PADHV)
2236 || kid->op_private & ~OPpLVAL_INTRO
2237 || !(kid = OpSIBLING(kid))
2238 || ( kid->op_type != OP_PADSV
2239 && kid->op_type != OP_PADAV
2240 && kid->op_type != OP_PADHV)
2241 || kid->op_private & ~OPpLVAL_INTRO)
2243 op_null(cUNOPo->op_first); /* NULL the pushmark */
2244 op_null(o); /* NULL the list */
2256 /* mortalise it, in case warnings are fatal. */
2257 Perl_ck_warner(aTHX_ packWARN(WARN_VOID),
2258 "Useless use of %" SVf " in void context",
2259 SVfARG(sv_2mortal(useless_sv)));
2262 Perl_ck_warner(aTHX_ packWARN(WARN_VOID),
2263 "Useless use of %s in void context",
2268 /* if a kid hasn't been nominated to process, continue with the
2269 * next sibling, or if no siblings left, go back to the parent's
2270 * siblings and so on
2274 return arg; /* at top; no parents/siblings to try */
2275 if (OpHAS_SIBLING(o))
2276 next_kid = o->op_sibparent;
2278 o = o->op_sibparent; /*try parent's next sibling */
2288 S_listkids(pTHX_ OP *o)
2290 if (o && o->op_flags & OPf_KIDS) {
2292 for (kid = cLISTOPo->op_first; kid; kid = OpSIBLING(kid))
2299 /* apply list context to the o subtree */
2302 Perl_list(pTHX_ OP *o)
2307 OP *next_kid = NULL; /* what op (if any) to process next */
2311 /* assumes no premature commitment */
2312 if (!o || (o->op_flags & OPf_WANT)
2313 || (PL_parser && PL_parser->error_count)
2314 || o->op_type == OP_RETURN)
2319 if ((o->op_private & OPpTARGET_MY)
2320 && (PL_opargs[o->op_type] & OA_TARGLEX))/* OPp share the meaning */
2322 goto do_next; /* As if inside SASSIGN */
2325 o->op_flags = (o->op_flags & ~OPf_WANT) | OPf_WANT_LIST;
2327 switch (o->op_type) {
2329 if (o->op_private & OPpREPEAT_DOLIST
2330 && !(o->op_flags & OPf_STACKED))
2332 list(cBINOPo->op_first);
2333 kid = cBINOPo->op_last;
2334 /* optimise away (.....) x 1 */
2335 if (kid->op_type == OP_CONST && SvIOK(kSVOP_sv)
2336 && SvIVX(kSVOP_sv) == 1)
2338 op_null(o); /* repeat */
2339 op_null(cUNOPx(cBINOPo->op_first)->op_first);/* pushmark */
2341 op_free(op_sibling_splice(o, cBINOPo->op_first, 1, NULL));
2349 /* impose list context on everything except the condition */
2350 next_kid = OpSIBLING(cUNOPo->op_first);
2354 if (!(o->op_flags & OPf_KIDS))
2356 /* possibly flatten 1..10 into a constant array */
2357 if (!o->op_next && cUNOPo->op_first->op_type == OP_FLOP) {
2358 list(cBINOPo->op_first);
2359 gen_constant_list(o);
2362 next_kid = cUNOPo->op_first; /* do all kids */
2366 if (cLISTOPo->op_first->op_type == OP_PUSHMARK) {
2367 op_null(cUNOPo->op_first); /* NULL the pushmark */
2368 op_null(o); /* NULL the list */
2370 if (o->op_flags & OPf_KIDS)
2371 next_kid = cUNOPo->op_first; /* do all kids */
2374 /* the children of these ops are usually a list of statements,
2375 * except the leaves, whose first child is is corresponding enter
2379 kid = cLISTOPo->op_first;
2383 kid = cLISTOPo->op_first;
2385 kid = OpSIBLING(kid);
2388 OP *sib = OpSIBLING(kid);
2389 if (sib && kid->op_type != OP_LEAVEWHEN)
2395 PL_curcop = &PL_compiling;
2400 /* If next_kid is set, someone in the code above wanted us to process
2401 * that kid and all its remaining siblings. Otherwise, work our way
2402 * back up the tree */
2406 return top_op; /* at top; no parents/siblings to try */
2407 if (OpHAS_SIBLING(o))
2408 next_kid = o->op_sibparent;
2410 o = o->op_sibparent; /*try parent's next sibling */
2419 S_scalarseq(pTHX_ OP *o)
2422 const OPCODE type = o->op_type;
2424 if (type == OP_LINESEQ || type == OP_SCOPE ||
2425 type == OP_LEAVE || type == OP_LEAVETRY)
2428 for (kid = cLISTOPo->op_first; kid; kid = sib) {
2429 if ((sib = OpSIBLING(kid))
2430 && ( OpHAS_SIBLING(sib) || sib->op_type != OP_NULL
2431 || ( sib->op_targ != OP_NEXTSTATE
2432 && sib->op_targ != OP_DBSTATE )))
2437 PL_curcop = &PL_compiling;
2439 o->op_flags &= ~OPf_PARENS;
2440 if (PL_hints & HINT_BLOCK_SCOPE)
2441 o->op_flags |= OPf_PARENS;
2444 o = newOP(OP_STUB, 0);
2449 S_modkids(pTHX_ OP *o, I32 type)
2451 if (o && o->op_flags & OPf_KIDS) {
2453 for (kid = cLISTOPo->op_first; kid; kid = OpSIBLING(kid))
2454 op_lvalue(kid, type);
2460 /* for a helem/hslice/kvslice, if its a fixed hash, croak on invalid
2461 * const fields. Also, convert CONST keys to HEK-in-SVs.
2462 * rop is the op that retrieves the hash;
2463 * key_op is the first key
2464 * real if false, only check (and possibly croak); don't update op
2468 S_check_hash_fields_and_hekify(pTHX_ UNOP *rop, SVOP *key_op, int real)
2474 /* find the padsv corresponding to $lex->{} or @{$lex}{} */
2476 if (rop->op_first->op_type == OP_PADSV)
2477 /* @$hash{qw(keys here)} */
2478 rop = (UNOP*)rop->op_first;
2480 /* @{$hash}{qw(keys here)} */
2481 if (rop->op_first->op_type == OP_SCOPE
2482 && cLISTOPx(rop->op_first)->op_last->op_type == OP_PADSV)
2484 rop = (UNOP*)cLISTOPx(rop->op_first)->op_last;
2491 lexname = NULL; /* just to silence compiler warnings */
2492 fields = NULL; /* just to silence compiler warnings */
2496 && (lexname = padnamelist_fetch(PL_comppad_name, rop->op_targ),
2497 SvPAD_TYPED(lexname))
2498 && (fields = (GV**)hv_fetchs(PadnameTYPE(lexname), "FIELDS", FALSE))
2499 && isGV(*fields) && GvHV(*fields);
2501 for (; key_op; key_op = (SVOP*)OpSIBLING(key_op)) {
2503 if (key_op->op_type != OP_CONST)
2505 svp = cSVOPx_svp(key_op);
2507 /* make sure it's not a bareword under strict subs */
2508 if (key_op->op_private & OPpCONST_BARE &&
2509 key_op->op_private & OPpCONST_STRICT)
2511 no_bareword_allowed((OP*)key_op);
2514 /* Make the CONST have a shared SV */
2515 if ( !SvIsCOW_shared_hash(sv = *svp)
2516 && SvTYPE(sv) < SVt_PVMG
2522 const char * const key = SvPV_const(sv, *(STRLEN*)&keylen);
2523 SV *nsv = newSVpvn_share(key, SvUTF8(sv) ? -keylen : keylen, 0);
2524 SvREFCNT_dec_NN(sv);
2529 && !hv_fetch_ent(GvHV(*fields), *svp, FALSE, 0))
2531 Perl_croak(aTHX_ "No such class field \"%" SVf "\" "
2532 "in variable %" PNf " of type %" HEKf,
2533 SVfARG(*svp), PNfARG(lexname),
2534 HEKfARG(HvNAME_HEK(PadnameTYPE(lexname))));
2539 /* info returned by S_sprintf_is_multiconcatable() */
2541 struct sprintf_ismc_info {
2542 SSize_t nargs; /* num of args to sprintf (not including the format) */
2543 char *start; /* start of raw format string */
2544 char *end; /* bytes after end of raw format string */
2545 STRLEN total_len; /* total length (in bytes) of format string, not
2546 including '%s' and half of '%%' */
2547 STRLEN variant; /* number of bytes by which total_len_p would grow
2548 if upgraded to utf8 */
2549 bool utf8; /* whether the format is utf8 */
2553 /* is the OP_SPRINTF o suitable for converting into a multiconcat op?
2554 * i.e. its format argument is a const string with only '%s' and '%%'
2555 * formats, and the number of args is known, e.g.
2556 * sprintf "a=%s f=%s", $a[0], scalar(f());
2558 * sprintf "i=%d a=%s f=%s", $i, @a, f();
2560 * If successful, the sprintf_ismc_info struct pointed to by info will be
2565 S_sprintf_is_multiconcatable(pTHX_ OP *o,struct sprintf_ismc_info *info)
2567 OP *pm, *constop, *kid;
2570 SSize_t nargs, nformats;
2571 STRLEN cur, total_len, variant;
2574 /* if sprintf's behaviour changes, die here so that someone
2575 * can decide whether to enhance this function or skip optimising
2576 * under those new circumstances */
2577 assert(!(o->op_flags & OPf_STACKED));
2578 assert(!(PL_opargs[OP_SPRINTF] & OA_TARGLEX));
2579 assert(!(o->op_private & ~OPpARG4_MASK));
2581 pm = cUNOPo->op_first;
2582 if (pm->op_type != OP_PUSHMARK) /* weird coreargs stuff */
2584 constop = OpSIBLING(pm);
2585 if (!constop || constop->op_type != OP_CONST)
2587 sv = cSVOPx_sv(constop);
2588 if (SvMAGICAL(sv) || !SvPOK(sv))
2594 /* Scan format for %% and %s and work out how many %s there are.
2595 * Abandon if other format types are found.
2602 for (p = s; p < e; p++) {
2605 if (!UTF8_IS_INVARIANT(*p))
2611 return FALSE; /* lone % at end gives "Invalid conversion" */
2620 if (!nformats || nformats > PERL_MULTICONCAT_MAXARG)
2623 utf8 = cBOOL(SvUTF8(sv));
2627 /* scan args; they must all be in scalar cxt */
2630 kid = OpSIBLING(constop);
2633 if ((kid->op_flags & OPf_WANT) != OPf_WANT_SCALAR)
2636 kid = OpSIBLING(kid);
2639 if (nargs != nformats)
2640 return FALSE; /* e.g. sprintf("%s%s", $a); */
2643 info->nargs = nargs;
2646 info->total_len = total_len;
2647 info->variant = variant;
2655 /* S_maybe_multiconcat():
2657 * given an OP_STRINGIFY, OP_SASSIGN, OP_CONCAT or OP_SPRINTF op, possibly
2658 * convert it (and its children) into an OP_MULTICONCAT. See the code
2659 * comments just before pp_multiconcat() for the full details of what
2660 * OP_MULTICONCAT supports.
2662 * Basically we're looking for an optree with a chain of OP_CONCATS down
2663 * the LHS (or an OP_SPRINTF), with possibly an OP_SASSIGN, and/or
2664 * OP_STRINGIFY, and/or OP_CONCAT acting as '.=' at its head, e.g.
2672 * STRINGIFY -- PADSV[$x]
2675 * ex-PUSHMARK -- CONCAT/S
2677 * CONCAT/S -- PADSV[$d]
2679 * CONCAT -- CONST["-"]
2681 * PADSV[$a] -- PADSV[$b]
2683 * Note that at this stage the OP_SASSIGN may have already been optimised
2684 * away with OPpTARGET_MY set on the OP_STRINGIFY or OP_CONCAT.
2688 S_maybe_multiconcat(pTHX_ OP *o)
2691 OP *lastkidop; /* the right-most of any kids unshifted onto o */
2692 OP *topop; /* the top-most op in the concat tree (often equals o,
2693 unless there are assign/stringify ops above it */
2694 OP *parentop; /* the parent op of topop (or itself if no parent) */
2695 OP *targmyop; /* the op (if any) with the OPpTARGET_MY flag */
2696 OP *targetop; /* the op corresponding to target=... or target.=... */
2697 OP *stringop; /* the OP_STRINGIFY op, if any */
2698 OP *nextop; /* used for recreating the op_next chain without consts */
2699 OP *kid; /* general-purpose op pointer */
2701 UNOP_AUX_item *lenp;
2702 char *const_str, *p;
2703 struct sprintf_ismc_info sprintf_info;
2705 /* store info about each arg in args[];
2706 * toparg is the highest used slot; argp is a general
2707 * pointer to args[] slots */
2709 void *p; /* initially points to const sv (or null for op);
2710 later, set to SvPV(constsv), with ... */
2711 STRLEN len; /* ... len set to SvPV(..., len) */
2712 } *argp, *toparg, args[PERL_MULTICONCAT_MAXARG*2 + 1];
2716 SSize_t nadjconst = 0; /* adjacent consts - may be demoted to args */
2719 bool kid_is_last = FALSE; /* most args will be the RHS kid of a concat op;
2720 the last-processed arg will the LHS of one,
2721 as args are processed in reverse order */
2722 U8 stacked_last = 0; /* whether the last seen concat op was STACKED */
2723 STRLEN total_len = 0; /* sum of the lengths of the const segments */
2724 U8 flags = 0; /* what will become the op_flags and ... */
2725 U8 private_flags = 0; /* ... op_private of the multiconcat op */
2726 bool is_sprintf = FALSE; /* we're optimising an sprintf */
2727 bool is_targable = FALSE; /* targetop is an OPpTARGET_MY candidate */
2728 bool prev_was_const = FALSE; /* previous arg was a const */
2730 /* -----------------------------------------------------------------
2733 * Examine the optree non-destructively to determine whether it's
2734 * suitable to be converted into an OP_MULTICONCAT. Accumulate
2735 * information about the optree in args[].
2745 assert( o->op_type == OP_SASSIGN
2746 || o->op_type == OP_CONCAT
2747 || o->op_type == OP_SPRINTF
2748 || o->op_type == OP_STRINGIFY);
2750 Zero(&sprintf_info, 1, struct sprintf_ismc_info);
2752 /* first see if, at the top of the tree, there is an assign,
2753 * append and/or stringify */
2755 if (topop->op_type == OP_SASSIGN) {
2757 if (o->op_ppaddr != PL_ppaddr[OP_SASSIGN])
2759 if (o->op_private & (OPpASSIGN_BACKWARDS|OPpASSIGN_CV_TO_GV))
2761 assert(!(o->op_private & ~OPpARG2_MASK)); /* barf on unknown flags */
2764 topop = cBINOPo->op_first;
2765 targetop = OpSIBLING(topop);
2766 if (!targetop) /* probably some sort of syntax error */
2769 else if ( topop->op_type == OP_CONCAT
2770 && (topop->op_flags & OPf_STACKED)
2771 && (!(topop->op_private & OPpCONCAT_NESTED))
2776 /* OPpTARGET_MY shouldn't be able to be set here. If it is,
2777 * decide what to do about it */
2778 assert(!(o->op_private & OPpTARGET_MY));
2780 /* barf on unknown flags */
2781 assert(!(o->op_private & ~(OPpARG2_MASK|OPpTARGET_MY)));
2782 private_flags |= OPpMULTICONCAT_APPEND;
2783 targetop = cBINOPo->op_first;
2785 topop = OpSIBLING(targetop);
2787 /* $x .= <FOO> gets optimised to rcatline instead */
2788 if (topop->op_type == OP_READLINE)
2793 /* Can targetop (the LHS) if it's a padsv, be be optimised
2794 * away and use OPpTARGET_MY instead?
2796 if ( (targetop->op_type == OP_PADSV)
2797 && !(targetop->op_private & OPpDEREF)
2798 && !(targetop->op_private & OPpPAD_STATE)
2799 /* we don't support 'my $x .= ...' */
2800 && ( o->op_type == OP_SASSIGN
2801 || !(targetop->op_private & OPpLVAL_INTRO))
2806 if (topop->op_type == OP_STRINGIFY) {
2807 if (topop->op_ppaddr != PL_ppaddr[OP_STRINGIFY])
2811 /* barf on unknown flags */
2812 assert(!(o->op_private & ~(OPpARG4_MASK|OPpTARGET_MY)));
2814 if ((topop->op_private & OPpTARGET_MY)) {
2815 if (o->op_type == OP_SASSIGN)
2816 return; /* can't have two assigns */
2820 private_flags |= OPpMULTICONCAT_STRINGIFY;
2822 topop = cBINOPx(topop)->op_first;
2823 assert(OP_TYPE_IS_OR_WAS_NN(topop, OP_PUSHMARK));
2824 topop = OpSIBLING(topop);
2827 if (topop->op_type == OP_SPRINTF) {
2828 if (topop->op_ppaddr != PL_ppaddr[OP_SPRINTF])
2830 if (S_sprintf_is_multiconcatable(aTHX_ topop, &sprintf_info)) {
2831 nargs = sprintf_info.nargs;
2832 total_len = sprintf_info.total_len;
2833 variant = sprintf_info.variant;
2834 utf8 = sprintf_info.utf8;
2836 private_flags |= OPpMULTICONCAT_FAKE;
2838 /* we have an sprintf op rather than a concat optree.
2839 * Skip most of the code below which is associated with
2840 * processing that optree. We also skip phase 2, determining
2841 * whether its cost effective to optimise, since for sprintf,
2842 * multiconcat is *always* faster */
2845 /* note that even if the sprintf itself isn't multiconcatable,
2846 * the expression as a whole may be, e.g. in
2847 * $x .= sprintf("%d",...)
2848 * the sprintf op will be left as-is, but the concat/S op may
2849 * be upgraded to multiconcat
2852 else if (topop->op_type == OP_CONCAT) {
2853 if (topop->op_ppaddr != PL_ppaddr[OP_CONCAT])
2856 if ((topop->op_private & OPpTARGET_MY)) {
2857 if (o->op_type == OP_SASSIGN || targmyop)
2858 return; /* can't have two assigns */
2863 /* Is it safe to convert a sassign/stringify/concat op into
2865 assert((PL_opargs[OP_SASSIGN] & OA_CLASS_MASK) == OA_BINOP);
2866 assert((PL_opargs[OP_CONCAT] & OA_CLASS_MASK) == OA_BINOP);
2867 assert((PL_opargs[OP_STRINGIFY] & OA_CLASS_MASK) == OA_LISTOP);
2868 assert((PL_opargs[OP_SPRINTF] & OA_CLASS_MASK) == OA_LISTOP);
2869 STATIC_ASSERT_STMT( STRUCT_OFFSET(BINOP, op_last)
2870 == STRUCT_OFFSET(UNOP_AUX, op_aux));
2871 STATIC_ASSERT_STMT( STRUCT_OFFSET(LISTOP, op_last)
2872 == STRUCT_OFFSET(UNOP_AUX, op_aux));
2874 /* Now scan the down the tree looking for a series of
2875 * CONCAT/OPf_STACKED ops on the LHS (with the last one not
2876 * stacked). For example this tree:
2881 * CONCAT/STACKED -- EXPR5
2883 * CONCAT/STACKED -- EXPR4
2889 * corresponds to an expression like
2891 * (EXPR1 . EXPR2 . EXPR3 . EXPR4 . EXPR5)
2893 * Record info about each EXPR in args[]: in particular, whether it is
2894 * a stringifiable OP_CONST and if so what the const sv is.
2896 * The reason why the last concat can't be STACKED is the difference
2899 * ((($a .= $a) .= $a) .= $a) .= $a
2902 * $a . $a . $a . $a . $a
2904 * The main difference between the optrees for those two constructs
2905 * is the presence of the last STACKED. As well as modifying $a,
2906 * the former sees the changed $a between each concat, so if $s is
2907 * initially 'a', the first returns 'a' x 16, while the latter returns
2908 * 'a' x 5. And pp_multiconcat can't handle that kind of thing.
2918 if ( kid->op_type == OP_CONCAT
2922 k1 = cUNOPx(kid)->op_first;
2924 /* shouldn't happen except maybe after compile err? */
2928 /* avoid turning (A . B . ($lex = C) ...) into (A . B . C ...) */
2929 if (kid->op_private & OPpTARGET_MY)
2932 stacked_last = (kid->op_flags & OPf_STACKED);
2944 if ( nargs + nadjconst > PERL_MULTICONCAT_MAXARG - 2
2945 || (argp - args + 1) > (PERL_MULTICONCAT_MAXARG*2 + 1) - 2)
2947 /* At least two spare slots are needed to decompose both
2948 * concat args. If there are no slots left, continue to
2949 * examine the rest of the optree, but don't push new values
2950 * on args[]. If the optree as a whole is legal for conversion
2951 * (in particular that the last concat isn't STACKED), then
2952 * the first PERL_MULTICONCAT_MAXARG elements of the optree
2953 * can be converted into an OP_MULTICONCAT now, with the first
2954 * child of that op being the remainder of the optree -
2955 * which may itself later be converted to a multiconcat op
2959 /* the last arg is the rest of the optree */
2964 else if ( argop->op_type == OP_CONST
2965 && ((sv = cSVOPx_sv(argop)))
2966 /* defer stringification until runtime of 'constant'
2967 * things that might stringify variantly, e.g. the radix
2968 * point of NVs, or overloaded RVs */
2969 && (SvPOK(sv) || SvIOK(sv))
2970 && (!SvGMAGICAL(sv))
2973 utf8 |= cBOOL(SvUTF8(sv));
2976 /* this const may be demoted back to a plain arg later;
2977 * make sure we have enough arg slots left */
2979 prev_was_const = !prev_was_const;
2984 prev_was_const = FALSE;
2994 return; /* we don't support ((A.=B).=C)...) */
2996 /* look for two adjacent consts and don't fold them together:
2999 * $o->concat("a")->concat("b")
3002 * (but $o .= "a" . "b" should still fold)
3005 bool seen_nonconst = FALSE;
3006 for (argp = toparg; argp >= args; argp--) {
3007 if (argp->p == NULL) {
3008 seen_nonconst = TRUE;
3014 /* both previous and current arg were constants;
3015 * leave the current OP_CONST as-is */
3023 /* -----------------------------------------------------------------
3026 * At this point we have determined that the optree *can* be converted
3027 * into a multiconcat. Having gathered all the evidence, we now decide
3028 * whether it *should*.
3032 /* we need at least one concat action, e.g.:
3038 * otherwise we could be doing something like $x = "foo", which
3039 * if treated as as a concat, would fail to COW.
3041 if (nargs + nconst + cBOOL(private_flags & OPpMULTICONCAT_APPEND) < 2)
3044 /* Benchmarking seems to indicate that we gain if:
3045 * * we optimise at least two actions into a single multiconcat
3046 * (e.g concat+concat, sassign+concat);
3047 * * or if we can eliminate at least 1 OP_CONST;
3048 * * or if we can eliminate a padsv via OPpTARGET_MY
3052 /* eliminated at least one OP_CONST */
3054 /* eliminated an OP_SASSIGN */
3055 || o->op_type == OP_SASSIGN
3056 /* eliminated an OP_PADSV */
3057 || (!targmyop && is_targable)
3059 /* definitely a net gain to optimise */
3062 /* ... if not, what else? */
3064 /* special-case '$lex1 = expr . $lex1' (where expr isn't lex1):
3065 * multiconcat is faster (due to not creating a temporary copy of
3066 * $lex1), whereas for a general $lex1 = $lex2 . $lex3, concat is
3072 && topop->op_type == OP_CONCAT
3074 PADOFFSET t = targmyop->op_targ;
3075 OP *k1 = cBINOPx(topop)->op_first;
3076 OP *k2 = cBINOPx(topop)->op_last;
3077 if ( k2->op_type == OP_PADSV
3079 && ( k1->op_type != OP_PADSV
3080 || k1->op_targ != t)
3085 /* need at least two concats */
3086 if (nargs + nconst + cBOOL(private_flags & OPpMULTICONCAT_APPEND) < 3)
3091 /* -----------------------------------------------------------------
3094 * At this point the optree has been verified as ok to be optimised
3095 * into an OP_MULTICONCAT. Now start changing things.
3100 /* stringify all const args and determine utf8ness */
3103 for (argp = args; argp <= toparg; argp++) {
3104 SV *sv = (SV*)argp->p;
3106 continue; /* not a const op */
3107 if (utf8 && !SvUTF8(sv))
3108 sv_utf8_upgrade_nomg(sv);
3109 argp->p = SvPV_nomg(sv, argp->len);
3110 total_len += argp->len;
3112 /* see if any strings would grow if converted to utf8 */
3114 variant += variant_under_utf8_count((U8 *) argp->p,
3115 (U8 *) argp->p + argp->len);
3119 /* create and populate aux struct */
3123 aux = (UNOP_AUX_item*)PerlMemShared_malloc(
3124 sizeof(UNOP_AUX_item)
3126 PERL_MULTICONCAT_HEADER_SIZE
3127 + ((nargs + 1) * (variant ? 2 : 1))
3130 const_str = (char *)PerlMemShared_malloc(total_len ? total_len : 1);
3132 /* Extract all the non-const expressions from the concat tree then
3133 * dispose of the old tree, e.g. convert the tree from this:
3137 * STRINGIFY -- TARGET
3139 * ex-PUSHMARK -- CONCAT
3154 * ex-PUSHMARK -- EXPR1 -- EXPR2 -- EXPR3 -- EXPR4 -- EXPR5 -- TARGET
3156 * except that if EXPRi is an OP_CONST, it's discarded.
3158 * During the conversion process, EXPR ops are stripped from the tree
3159 * and unshifted onto o. Finally, any of o's remaining original
3160 * childen are discarded and o is converted into an OP_MULTICONCAT.
3162 * In this middle of this, o may contain both: unshifted args on the
3163 * left, and some remaining original args on the right. lastkidop
3164 * is set to point to the right-most unshifted arg to delineate
3165 * between the two sets.
3170 /* create a copy of the format with the %'s removed, and record
3171 * the sizes of the const string segments in the aux struct */
3173 lenp = aux + PERL_MULTICONCAT_IX_LENGTHS;
3175 p = sprintf_info.start;
3178 for (; p < sprintf_info.end; p++) {
3182 (lenp++)->ssize = q - oldq;
3189 lenp->ssize = q - oldq;
3190 assert((STRLEN)(q - const_str) == total_len);
3192 /* Attach all the args (i.e. the kids of the sprintf) to o (which
3193 * may or may not be topop) The pushmark and const ops need to be
3194 * kept in case they're an op_next entry point.
3196 lastkidop = cLISTOPx(topop)->op_last;
3197 kid = cUNOPx(topop)->op_first; /* pushmark */
3199 op_null(OpSIBLING(kid)); /* const */
3201 kid = op_sibling_splice(topop, NULL, -1, NULL); /* cut all args */
3202 op_sibling_splice(o, NULL, 0, kid); /* and attach to o */
3203 lastkidop->op_next = o;
3208 lenp = aux + PERL_MULTICONCAT_IX_LENGTHS;
3212 /* Concatenate all const strings into const_str.
3213 * Note that args[] contains the RHS args in reverse order, so
3214 * we scan args[] from top to bottom to get constant strings
3217 for (argp = toparg; argp >= args; argp--) {
3219 /* not a const op */
3220 (++lenp)->ssize = -1;
3222 STRLEN l = argp->len;
3223 Copy(argp->p, p, l, char);
3225 if (lenp->ssize == -1)
3236 for (argp = args; argp <= toparg; argp++) {
3237 /* only keep non-const args, except keep the first-in-next-chain
3238 * arg no matter what it is (but nulled if OP_CONST), because it
3239 * may be the entry point to this subtree from the previous
3242 bool last = (argp == toparg);
3245 /* set prev to the sibling *before* the arg to be cut out,
3246 * e.g. when cutting EXPR:
3251 * prev= CONCAT -- EXPR
3254 if (argp == args && kid->op_type != OP_CONCAT) {
3255 /* in e.g. '$x .= f(1)' there's no RHS concat tree
3256 * so the expression to be cut isn't kid->op_last but
3259 /* find the op before kid */
3261 o2 = cUNOPx(parentop)->op_first;
3262 while (o2 && o2 != kid) {
3270 else if (kid == o && lastkidop)
3271 prev = last ? lastkidop : OpSIBLING(lastkidop);
3273 prev = last ? NULL : cUNOPx(kid)->op_first;
3275 if (!argp->p || last) {
3277 OP *aop = op_sibling_splice(kid, prev, 1, NULL);
3278 /* and unshift to front of o */
3279 op_sibling_splice(o, NULL, 0, aop);
3280 /* record the right-most op added to o: later we will
3281 * free anything to the right of it */
3284 aop->op_next = nextop;
3287 /* null the const at start of op_next chain */
3291 nextop = prev->op_next;
3294 /* the last two arguments are both attached to the same concat op */
3295 if (argp < toparg - 1)
3300 /* Populate the aux struct */
3302 aux[PERL_MULTICONCAT_IX_NARGS].ssize = nargs;
3303 aux[PERL_MULTICONCAT_IX_PLAIN_PV].pv = utf8 ? NULL : const_str;
3304 aux[PERL_MULTICONCAT_IX_PLAIN_LEN].ssize = utf8 ? 0 : total_len;
3305 aux[PERL_MULTICONCAT_IX_UTF8_PV].pv = const_str;
3306 aux[PERL_MULTICONCAT_IX_UTF8_LEN].ssize = total_len;
3308 /* if variant > 0, calculate a variant const string and lengths where
3309 * the utf8 version of the string will take 'variant' more bytes than
3313 char *p = const_str;
3314 STRLEN ulen = total_len + variant;
3315 UNOP_AUX_item *lens = aux + PERL_MULTICONCAT_IX_LENGTHS;
3316 UNOP_AUX_item *ulens = lens + (nargs + 1);
3317 char *up = (char*)PerlMemShared_malloc(ulen);
3320 aux[PERL_MULTICONCAT_IX_UTF8_PV].pv = up;
3321 aux[PERL_MULTICONCAT_IX_UTF8_LEN].ssize = ulen;
3323 for (n = 0; n < (nargs + 1); n++) {
3325 char * orig_up = up;
3326 for (i = (lens++)->ssize; i > 0; i--) {
3328 append_utf8_from_native_byte(c, (U8**)&up);
3330 (ulens++)->ssize = (i < 0) ? i : up - orig_up;
3335 /* if there was a top(ish)-level OP_STRINGIFY, we need to keep
3336 * that op's first child - an ex-PUSHMARK - because the op_next of
3337 * the previous op may point to it (i.e. it's the entry point for
3342 ? op_sibling_splice(o, lastkidop, 1, NULL)
3343 : op_sibling_splice(stringop, NULL, 1, NULL);
3344 assert(OP_TYPE_IS_OR_WAS_NN(pmop, OP_PUSHMARK));
3345 op_sibling_splice(o, NULL, 0, pmop);
3352 * target .= A.B.C...
3358 if (o->op_type == OP_SASSIGN) {
3359 /* Move the target subtree from being the last of o's children
3360 * to being the last of o's preserved children.
3361 * Note the difference between 'target = ...' and 'target .= ...':
3362 * for the former, target is executed last; for the latter,
3365 kid = OpSIBLING(lastkidop);
3366 op_sibling_splice(o, kid, 1, NULL); /* cut target op */
3367 op_sibling_splice(o, lastkidop, 0, targetop); /* and paste */
3368 lastkidop->op_next = kid->op_next;
3369 lastkidop = targetop;
3372 /* Move the target subtree from being the first of o's
3373 * original children to being the first of *all* o's children.
3376 op_sibling_splice(o, lastkidop, 1, NULL); /* cut target op */
3377 op_sibling_splice(o, NULL, 0, targetop); /* and paste*/
3380 /* if the RHS of .= doesn't contain a concat (e.g.
3381 * $x .= "foo"), it gets missed by the "strip ops from the
3382 * tree and add to o" loop earlier */
3383 assert(topop->op_type != OP_CONCAT);
3385 /* in e.g. $x .= "$y", move the $y expression
3386 * from being a child of OP_STRINGIFY to being the
3387 * second child of the OP_CONCAT
3389 assert(cUNOPx(stringop)->op_first == topop);
3390 op_sibling_splice(stringop, NULL, 1, NULL);
3391 op_sibling_splice(o, cUNOPo->op_first, 0, topop);
3393 assert(topop == OpSIBLING(cBINOPo->op_first));
3402 * my $lex = A.B.C...
3405 * The original padsv op is kept but nulled in case it's the
3406 * entry point for the optree (which it will be for
3409 private_flags |= OPpTARGET_MY;
3410 private_flags |= (targetop->op_private & OPpLVAL_INTRO);
3411 o->op_targ = targetop->op_targ;
3412 targetop->op_targ = 0;
3416 flags |= OPf_STACKED;
3418 else if (targmyop) {
3419 private_flags |= OPpTARGET_MY;
3420 if (o != targmyop) {
3421 o->op_targ = targmyop->op_targ;
3422 targmyop->op_targ = 0;
3426 /* detach the emaciated husk of the sprintf/concat optree and free it */
3428 kid = op_sibling_splice(o, lastkidop, 1, NULL);
3434 /* and convert o into a multiconcat */
3436 o->op_flags = (flags|OPf_KIDS|stacked_last
3437 |(o->op_flags & (OPf_WANT|OPf_PARENS)));
3438 o->op_private = private_flags;
3439 o->op_type = OP_MULTICONCAT;
3440 o->op_ppaddr = PL_ppaddr[OP_MULTICONCAT];
3441 cUNOP_AUXo->op_aux = aux;
3445 /* do all the final processing on an optree (e.g. running the peephole
3446 * optimiser on it), then attach it to cv (if cv is non-null)
3450 S_process_optree(pTHX_ CV *cv, OP *optree, OP* start)
3454 /* XXX for some reason, evals, require and main optrees are
3455 * never attached to their CV; instead they just hang off
3456 * PL_main_root + PL_main_start or PL_eval_root + PL_eval_start
3457 * and get manually freed when appropriate */
3459 startp = &CvSTART(cv);
3461 startp = PL_in_eval? &PL_eval_start : &PL_main_start;
3464 optree->op_private |= OPpREFCOUNTED;
3465 OpREFCNT_set(optree, 1);
3466 optimize_optree(optree);
3468 finalize_optree(optree);
3469 S_prune_chain_head(startp);
3472 /* now that optimizer has done its work, adjust pad values */
3473 pad_tidy(optree->op_type == OP_LEAVEWRITE ? padtidy_FORMAT
3474 : CvCLONE(cv) ? padtidy_SUBCLONE : padtidy_SUB);
3480 =for apidoc optimize_optree
3482 This function applies some optimisations to the optree in top-down order.
3483 It is called before the peephole optimizer, which processes ops in
3484 execution order. Note that finalize_optree() also does a top-down scan,
3485 but is called *after* the peephole optimizer.
3491 Perl_optimize_optree(pTHX_ OP* o)
3493 PERL_ARGS_ASSERT_OPTIMIZE_OPTREE;
3496 SAVEVPTR(PL_curcop);
3504 /* helper for optimize_optree() which optimises one op then recurses
3505 * to optimise any children.
3509 S_optimize_op(pTHX_ OP* o)
3513 PERL_ARGS_ASSERT_OPTIMIZE_OP;
3516 OP * next_kid = NULL;
3518 assert(o->op_type != OP_FREED);
3520 switch (o->op_type) {
3523 PL_curcop = ((COP*)o); /* for warnings */
3531 S_maybe_multiconcat(aTHX_ o);
3535 if (cPMOPo->op_pmreplrootu.op_pmreplroot) {
3536 /* we can't assume that op_pmreplroot->op_sibparent == o
3537 * and that it is thus possible to walk back up the tree
3538 * past op_pmreplroot. So, although we try to avoid
3539 * recursing through op trees, do it here. After all,
3540 * there are unlikely to be many nested s///e's within
3541 * the replacement part of a s///e.
3543 optimize_op(cPMOPo->op_pmreplrootu.op_pmreplroot);
3551 if (o->op_flags & OPf_KIDS)
3552 next_kid = cUNOPo->op_first;
3554 /* if a kid hasn't been nominated to process, continue with the
3555 * next sibling, or if no siblings left, go back to the parent's
3556 * siblings and so on
3560 return; /* at top; no parents/siblings to try */
3561 if (OpHAS_SIBLING(o))
3562 next_kid = o->op_sibparent;
3564 o = o->op_sibparent; /*try parent's next sibling */
3567 /* this label not yet used. Goto here if any code above sets
3577 =for apidoc finalize_optree
3579 This function finalizes the optree. Should be called directly after
3580 the complete optree is built. It does some additional
3581 checking which can't be done in the normal C<ck_>xxx functions and makes
3582 the tree thread-safe.
3587 Perl_finalize_optree(pTHX_ OP* o)
3589 PERL_ARGS_ASSERT_FINALIZE_OPTREE;
3592 SAVEVPTR(PL_curcop);
3600 /* Relocate sv to the pad for thread safety.
3601 * Despite being a "constant", the SV is written to,
3602 * for reference counts, sv_upgrade() etc. */
3603 PERL_STATIC_INLINE void
3604 S_op_relocate_sv(pTHX_ SV** svp, PADOFFSET* targp)
3607 PERL_ARGS_ASSERT_OP_RELOCATE_SV;
3609 ix = pad_alloc(OP_CONST, SVf_READONLY);
3610 SvREFCNT_dec(PAD_SVl(ix));
3611 PAD_SETSV(ix, *svp);
3612 /* XXX I don't know how this isn't readonly already. */
3613 if (!SvIsCOW(PAD_SVl(ix))) SvREADONLY_on(PAD_SVl(ix));
3620 =for apidoc traverse_op_tree
3622 Return the next op in a depth-first traversal of the op tree,
3623 returning NULL when the traversal is complete.
3625 The initial call must supply the root of the tree as both top and o.
3627 For now it's static, but it may be exposed to the API in the future.
3633 S_traverse_op_tree(pTHX_ OP *top, OP *o) {
3636 PERL_ARGS_ASSERT_TRAVERSE_OP_TREE;
3638 if ((o->op_flags & OPf_KIDS) && cUNOPo->op_first) {
3639 return cUNOPo->op_first;
3641 else if ((sib = OpSIBLING(o))) {
3645 OP *parent = o->op_sibparent;
3646 assert(!(o->op_moresib));
3647 while (parent && parent != top) {
3648 OP *sib = OpSIBLING(parent);
3651 parent = parent->op_sibparent;
3659 S_finalize_op(pTHX_ OP* o)
3662 PERL_ARGS_ASSERT_FINALIZE_OP;
3665 assert(o->op_type != OP_FREED);
3667 switch (o->op_type) {
3670 PL_curcop = ((COP*)o); /* for warnings */
3673 if (OpHAS_SIBLING(o)) {
3674 OP *sib = OpSIBLING(o);
3675 if (( sib->op_type == OP_NEXTSTATE || sib->op_type == OP_DBSTATE)
3676 && ckWARN(WARN_EXEC)
3677 && OpHAS_SIBLING(sib))
3679 const OPCODE type = OpSIBLING(sib)->op_type;
3680 if (type != OP_EXIT && type != OP_WARN && type != OP_DIE) {
3681 const line_t oldline = CopLINE(PL_curcop);
3682 CopLINE_set(PL_curcop, CopLINE((COP*)sib));
3683 Perl_warner(aTHX_ packWARN(WARN_EXEC),
3684 "Statement unlikely to be reached");
3685 Perl_warner(aTHX_ packWARN(WARN_EXEC),
3686 "\t(Maybe you meant system() when you said exec()?)\n");
3687 CopLINE_set(PL_curcop, oldline);
3694 if ((o->op_private & OPpEARLY_CV) && ckWARN(WARN_PROTOTYPE)) {
3695 GV * const gv = cGVOPo_gv;
3696 if (SvTYPE(gv) == SVt_PVGV && GvCV(gv) && SvPVX_const(GvCV(gv))) {
3697 /* XXX could check prototype here instead of just carping */
3698 SV * const sv = sv_newmortal();
3699 gv_efullname3(sv, gv, NULL);
3700 Perl_warner(aTHX_ packWARN(WARN_PROTOTYPE),
3701 "%" SVf "() called too early to check prototype",
3708 if (cSVOPo->op_private & OPpCONST_STRICT)
3709 no_bareword_allowed(o);
3713 op_relocate_sv(&cSVOPo->op_sv, &o->op_targ);
3718 /* Relocate all the METHOP's SVs to the pad for thread safety. */
3719 case OP_METHOD_NAMED:
3720 case OP_METHOD_SUPER:
3721 case OP_METHOD_REDIR:
3722 case OP_METHOD_REDIR_SUPER:
3723 op_relocate_sv(&cMETHOPx(o)->op_u.op_meth_sv, &o->op_targ);
3732 if ((key_op = cSVOPx(((BINOP*)o)->op_last))->op_type != OP_CONST)
3735 rop = (UNOP*)((BINOP*)o)->op_first;
3740 S_scalar_slice_warning(aTHX_ o);
3744 kid = OpSIBLING(cLISTOPo->op_first);
3745 if (/* I bet there's always a pushmark... */
3746 OP_TYPE_ISNT_AND_WASNT_NN(kid, OP_LIST)
3747 && OP_TYPE_ISNT_NN(kid, OP_CONST))
3752 key_op = (SVOP*)(kid->op_type == OP_CONST
3754 : OpSIBLING(kLISTOP->op_first));
3756 rop = (UNOP*)((LISTOP*)o)->op_last;
3759 if (o->op_private & OPpLVAL_INTRO || rop->op_type != OP_RV2HV)
3761 S_check_hash_fields_and_hekify(aTHX_ rop, key_op, 1);
3765 if (o->op_targ != OP_HSLICE && o->op_targ != OP_ASLICE)
3769 S_scalar_slice_warning(aTHX_ o);
3773 if (cPMOPo->op_pmreplrootu.op_pmreplroot)
3774 finalize_op(cPMOPo->op_pmreplrootu.op_pmreplroot);
3782 if (o->op_flags & OPf_KIDS) {
3785 /* check that op_last points to the last sibling, and that
3786 * the last op_sibling/op_sibparent field points back to the
3787 * parent, and that the only ops with KIDS are those which are
3788 * entitled to them */
3789 U32 type = o->op_type;
3793 if (type == OP_NULL) {
3795 /* ck_glob creates a null UNOP with ex-type GLOB
3796 * (which is a list op. So pretend it wasn't a listop */
3797 if (type == OP_GLOB)
3800 family = PL_opargs[type] & OA_CLASS_MASK;
3802 has_last = ( family == OA_BINOP
3803 || family == OA_LISTOP
3804 || family == OA_PMOP
3805 || family == OA_LOOP
3807 assert( has_last /* has op_first and op_last, or ...
3808 ... has (or may have) op_first: */
3809 || family == OA_UNOP
3810 || family == OA_UNOP_AUX
3811 || family == OA_LOGOP
3812 || family == OA_BASEOP_OR_UNOP
3813 || family == OA_FILESTATOP
3814 || family == OA_LOOPEXOP
3815 || family == OA_METHOP
3816 || type == OP_CUSTOM
3817 || type == OP_NULL /* new_logop does this */
3820 for (kid = cUNOPo->op_first; kid; kid = OpSIBLING(kid)) {
3821 if (!OpHAS_SIBLING(kid)) {
3823 assert(kid == cLISTOPo->op_last);
3824 assert(kid->op_sibparent == o);
3829 } while (( o = traverse_op_tree(top, o)) != NULL);
3833 =for apidoc op_lvalue
3835 Propagate lvalue ("modifiable") context to an op and its children.
3836 C<type> represents the context type, roughly based on the type of op that
3837 would do the modifying, although C<local()> is represented by C<OP_NULL>,
3838 because it has no op type of its own (it is signalled by a flag on
3841 This function detects things that can't be modified, such as C<$x+1>, and
3842 generates errors for them. For example, C<$x+1 = 2> would cause it to be
3843 called with an op of type C<OP_ADD> and a C<type> argument of C<OP_SASSIGN>.
3845 It also flags things that need to behave specially in an lvalue context,
3846 such as C<$$x = 5> which might have to vivify a reference in C<$x>.
3852 S_mark_padname_lvalue(pTHX_ PADNAME *pn)
3855 PadnameLVALUE_on(pn);
3856 while (PadnameOUTER(pn) && PARENT_PAD_INDEX(pn)) {
3858 /* RT #127786: cv can be NULL due to an eval within the DB package
3859 * called from an anon sub - anon subs don't have CvOUTSIDE() set
3860 * unless they contain an eval, but calling eval within DB
3861 * pretends the eval was done in the caller's scope.
3865 assert(CvPADLIST(cv));
3867 PadlistNAMESARRAY(CvPADLIST(cv))[PARENT_PAD_INDEX(pn)];
3868 assert(PadnameLEN(pn));
3869 PadnameLVALUE_on(pn);
3874 S_vivifies(const OPCODE type)
3877 case OP_RV2AV: case OP_ASLICE:
3878 case OP_RV2HV: case OP_KVASLICE:
3879 case OP_RV2SV: case OP_HSLICE:
3880 case OP_AELEMFAST: case OP_KVHSLICE:
3889 S_lvref(pTHX_ OP *o, I32 type)
3893 switch (o->op_type) {
3895 for (kid = OpSIBLING(cUNOPo->op_first); kid;
3896 kid = OpSIBLING(kid))
3897 S_lvref(aTHX_ kid, type);
3902 if (cUNOPo->op_first->op_type != OP_GV) goto badref;
3903 o->op_flags |= OPf_STACKED;
3904 if (o->op_flags & OPf_PARENS) {
3905 if (o->op_private & OPpLVAL_INTRO) {
3906 yyerror(Perl_form(aTHX_ "Can't modify reference to "
3907 "localized parenthesized array in list assignment"));
3911 OpTYPE_set(o, OP_LVAVREF);
3912 o->op_private &= OPpLVAL_INTRO|OPpPAD_STATE;
3913 o->op_flags |= OPf_MOD|OPf_REF;
3916 o->op_private |= OPpLVREF_AV;
3919 kid = cUNOPo->op_first;
3920 if (kid->op_type == OP_NULL)
3921 kid = cUNOPx(OpSIBLING(kUNOP->op_first))
3923 o->op_private = OPpLVREF_CV;
3924 if (kid->op_type == OP_GV)
3925 o->op_flags |= OPf_STACKED;
3926 else if (kid->op_type == OP_PADCV) {
3927 o->op_targ = kid->op_targ;
3929 op_free(cUNOPo->op_first);
3930 cUNOPo->op_first = NULL;
3931 o->op_flags &=~ OPf_KIDS;
3936 if (o->op_flags & OPf_PARENS) {
3938 yyerror(Perl_form(aTHX_ "Can't modify reference to "
3939 "parenthesized hash in list assignment"));
3942 o->op_private |= OPpLVREF_HV;
3946 if (cUNOPo->op_first->op_type != OP_GV) goto badref;
3947 o->op_flags |= OPf_STACKED;
3950 if (o->op_flags & OPf_PARENS) goto parenhash;
3951 o->op_private |= OPpLVREF_HV;
3954 PAD_COMPNAME_GEN_set(o->op_targ, PERL_INT_MAX);
3957 PAD_COMPNAME_GEN_set(o->op_targ, PERL_INT_MAX);
3958 if (o->op_flags & OPf_PARENS) goto slurpy;
3959 o->op_private |= OPpLVREF_AV;
3963 o->op_private |= OPpLVREF_ELEM;
3964 o->op_flags |= OPf_STACKED;
3968 OpTYPE_set(o, OP_LVREFSLICE);
3969 o->op_private &= OPpLVAL_INTRO;
3972 if (o->op_flags & OPf_SPECIAL) /* do BLOCK */
3974 else if (!(o->op_flags & OPf_KIDS))
3976 if (o->op_targ != OP_LIST) {
3977 S_lvref(aTHX_ cBINOPo->op_first, type);
3982 for (kid = cLISTOPo->op_first; kid; kid = OpSIBLING(kid)) {
3983 assert((kid->op_flags & OPf_WANT) != OPf_WANT_VOID);
3984 S_lvref(aTHX_ kid, type);
3988 if (o->op_flags & OPf_PARENS)
3993 /* diag_listed_as: Can't modify reference to %s in %s assignment */
3994 yyerror(Perl_form(aTHX_ "Can't modify reference to %s in %s",
3995 o->op_type == OP_NULL && o->op_flags & OPf_SPECIAL
4001 OpTYPE_set(o, OP_LVREF);
4003 OPpLVAL_INTRO|OPpLVREF_ELEM|OPpLVREF_TYPE|OPpPAD_STATE;
4004 if (type == OP_ENTERLOOP)
4005 o->op_private |= OPpLVREF_ITER;
4008 PERL_STATIC_INLINE bool
4009 S_potential_mod_type(I32 type)
4011 /* Types that only potentially result in modification. */
4012 return type == OP_GREPSTART || type == OP_ENTERSUB
4013 || type == OP_REFGEN || type == OP_LEAVESUBLV;
4017 Perl_op_lvalue_flags(pTHX_ OP *o, I32 type, U32 flags)
4021 /* -1 = error on localize, 0 = ignore localize, 1 = ok to localize */
4024 if (!o || (PL_parser && PL_parser->error_count))
4027 if ((o->op_private & OPpTARGET_MY)
4028 && (PL_opargs[o->op_type] & OA_TARGLEX))/* OPp share the meaning */
4033 assert( (o->op_flags & OPf_WANT) != OPf_WANT_VOID );
4035 if (type == OP_PRTF || type == OP_SPRINTF) type = OP_ENTERSUB;
4037 switch (o->op_type) {
4042 if ((o->op_flags & OPf_PARENS))
4046 if ((type == OP_UNDEF || type == OP_REFGEN || type == OP_LOCK) &&
4047 !(o->op_flags & OPf_STACKED)) {
4048 OpTYPE_set(o, OP_RV2CV); /* entersub => rv2cv */
4049 assert(cUNOPo->op_first->op_type == OP_NULL);
4050 op_null(((LISTOP*)cUNOPo->op_first)->op_first);/* disable pushmark */
4053 else { /* lvalue subroutine call */
4054 o->op_private |= OPpLVAL_INTRO;
4055 PL_modcount = RETURN_UNLIMITED_NUMBER;
4056 if (S_potential_mod_type(type)) {
4057 o->op_private |= OPpENTERSUB_INARGS;
4060 else { /* Compile-time error message: */
4061 OP *kid = cUNOPo->op_first;
4066 if (kid->op_type != OP_PUSHMARK) {
4067 if (kid->op_type != OP_NULL || kid->op_targ != OP_LIST)
4069 "panic: unexpected lvalue entersub "
4070 "args: type/targ %ld:%" UVuf,
4071 (long)kid->op_type, (UV)kid->op_targ);
4072 kid = kLISTOP->op_first;
4074 while (OpHAS_SIBLING(kid))
4075 kid = OpSIBLING(kid);
4076 if (!(kid->op_type == OP_NULL && kid->op_targ == OP_RV2CV)) {
4077 break; /* Postpone until runtime */
4080 kid = kUNOP->op_first;
4081 if (kid->op_type == OP_NULL && kid->op_targ == OP_RV2SV)
4082 kid = kUNOP->op_first;
4083 if (kid->op_type == OP_NULL)
4085 "Unexpected constant lvalue entersub "
4086 "entry via type/targ %ld:%" UVuf,
4087 (long)kid->op_type, (UV)kid->op_targ);
4088 if (kid->op_type != OP_GV) {
4095 : SvROK(gv) && SvTYPE(SvRV(gv)) == SVt_PVCV
4096 ? MUTABLE_CV(SvRV(gv))
4102 if (flags & OP_LVALUE_NO_CROAK)
4105 namesv = cv_name(cv, NULL, 0);
4106 yyerror_pv(Perl_form(aTHX_ "Can't modify non-lvalue "
4107 "subroutine call of &%" SVf " in %s",
4108 SVfARG(namesv), PL_op_desc[type]),
4116 if (flags & OP_LVALUE_NO_CROAK) return NULL;
4117 /* grep, foreach, subcalls, refgen */
4118 if (S_potential_mod_type(type))
4120 yyerror(Perl_form(aTHX_ "Can't modify %s in %s",
4121 (o->op_type == OP_NULL && (o->op_flags & OPf_SPECIAL)
4124 type ? PL_op_desc[type] : "local"));
4137 case OP_RIGHT_SHIFT:
4146 if (!(o->op_flags & OPf_STACKED))
4152 if (o->op_flags & OPf_STACKED) {
4156 if (!(o->op_private & OPpREPEAT_DOLIST))
4159 const I32 mods = PL_modcount;
4160 modkids(cBINOPo->op_first, type);
4161 if (type != OP_AASSIGN)
4163 kid = cBINOPo->op_last;
4164 if (kid->op_type == OP_CONST && SvIOK(kSVOP_sv)) {
4165 const IV iv = SvIV(kSVOP_sv);
4166 if (PL_modcount != RETURN_UNLIMITED_NUMBER)
4168 mods + (PL_modcount - mods) * (iv < 0 ? 0 : iv);
4171 PL_modcount = RETURN_UNLIMITED_NUMBER;
4177 for (kid = OpSIBLING(cUNOPo->op_first); kid; kid = OpSIBLING(kid))
4178 op_lvalue(kid, type);
4183 if (type == OP_REFGEN && o->op_flags & OPf_PARENS) {
4184 PL_modcount = RETURN_UNLIMITED_NUMBER;
4185 /* Treat \(@foo) like ordinary list, but still mark it as modi-
4186 fiable since some contexts need to know. */
4187 o->op_flags |= OPf_MOD;
4192 if (scalar_mod_type(o, type))
4194 ref(cUNOPo->op_first, o->op_type);
4201 /* Do not apply the lvsub flag for rv2[ah]v in scalar context. */
4202 if (type == OP_LEAVESUBLV && (
4203 (o->op_type != OP_RV2AV && o->op_type != OP_RV2HV)
4204 || (o->op_flags & OPf_WANT) != OPf_WANT_SCALAR
4206 o->op_private |= OPpMAYBE_LVSUB;
4210 PL_modcount = RETURN_UNLIMITED_NUMBER;
4215 if (type == OP_LEAVESUBLV)
4216 o->op_private |= OPpMAYBE_LVSUB;
4219 if (type == OP_LEAVESUBLV
4220 && (o->op_private & OPpAVHVSWITCH_MASK) + OP_EACH == OP_KEYS)
4221 o->op_private |= OPpMAYBE_LVSUB;
4224 PL_hints |= HINT_BLOCK_SCOPE;
4225 if (type == OP_LEAVESUBLV)
4226 o->op_private |= OPpMAYBE_LVSUB;
4230 ref(cUNOPo->op_first, o->op_type);
4234 PL_hints |= HINT_BLOCK_SCOPE;
4244 case OP_AELEMFAST_LEX:
4251 PL_modcount = RETURN_UNLIMITED_NUMBER;
4252 if (type == OP_REFGEN && o->op_flags & OPf_PARENS)
4254 /* Treat \(@foo) like ordinary list, but still mark it as modi-
4255 fiable since some contexts need to know. */
4256 o->op_flags |= OPf_MOD;
4259 if (scalar_mod_type(o, type))
4261 if ((o->op_flags & OPf_WANT) != OPf_WANT_SCALAR
4262 && type == OP_LEAVESUBLV)
4263 o->op_private |= OPpMAYBE_LVSUB;
4267 if (!type) /* local() */
4268 Perl_croak(aTHX_ "Can't localize lexical variable %" PNf,
4269 PNfARG(PAD_COMPNAME(o->op_targ)));
4270 if (!(o->op_private & OPpLVAL_INTRO)
4271 || ( type != OP_SASSIGN && type != OP_AASSIGN
4272 && PadnameIsSTATE(PAD_COMPNAME_SV(o->op_targ)) ))
4273 S_mark_padname_lvalue(aTHX_ PAD_COMPNAME_SV(o->op_targ));
4281 if (type != OP_LEAVESUBLV && !scalar_mod_type(NULL, type))
4285 if (o->op_private == 4) /* don't allow 4 arg substr as lvalue */
4291 if (type == OP_LEAVESUBLV)
4292 o->op_private |= OPpMAYBE_LVSUB;
4293 if (o->op_flags & OPf_KIDS && OpHAS_SIBLING(cBINOPo->op_first)) {
4294 /* substr and vec */
4295 /* If this op is in merely potential (non-fatal) modifiable
4296 context, then apply OP_ENTERSUB context to
4297 the kid op (to avoid croaking). Other-
4298 wise pass this op’s own type so the correct op is mentioned
4299 in error messages. */
4300 op_lvalue(OpSIBLING(cBINOPo->op_first),
4301 S_potential_mod_type(type)
4309 ref(cBINOPo->op_first, o->op_type);
4310 if (type == OP_ENTERSUB &&
4311 !(o->op_private & (OPpLVAL_INTRO | OPpDEREF)))
4312 o->op_private |= OPpLVAL_DEFER;
4313 if (type == OP_LEAVESUBLV)
4314 o->op_private |= OPpMAYBE_LVSUB;
4321 o->op_private |= OPpLVALUE;
4327 if (o->op_flags & OPf_KIDS)
4328 op_lvalue(cLISTOPo->op_last, type);
4333 if (o->op_flags & OPf_SPECIAL) /* do BLOCK */
4335 else if (!(o->op_flags & OPf_KIDS))
4338 if (o->op_targ != OP_LIST) {
4339 OP *sib = OpSIBLING(cLISTOPo->op_first);
4340 /* OP_TRANS and OP_TRANSR with argument have a weird optree
4347 * compared with things like OP_MATCH which have the argument
4353 * so handle specially to correctly get "Can't modify" croaks etc
4356 if (sib && (sib->op_type == OP_TRANS || sib->op_type == OP_TRANSR))
4358 /* this should trigger a "Can't modify transliteration" err */
4359 op_lvalue(sib, type);
4361 op_lvalue(cBINOPo->op_first, type);
4367 for (kid = cLISTOPo->op_first; kid; kid = OpSIBLING(kid))
4368 /* elements might be in void context because the list is
4369 in scalar context or because they are attribute sub calls */
4370 if ( (kid->op_flags & OPf_WANT) != OPf_WANT_VOID )
4371 op_lvalue(kid, type);
4379 if (type == OP_LEAVESUBLV
4380 || !S_vivifies(cLOGOPo->op_first->op_type))
4381 op_lvalue(cLOGOPo->op_first, type);
4382 if (type == OP_LEAVESUBLV
4383 || !S_vivifies(OpSIBLING(cLOGOPo->op_first)->op_type))
4384 op_lvalue(OpSIBLING(cLOGOPo->op_first), type);
4388 if (type == OP_NULL) { /* local */
4390 if (!FEATURE_MYREF_IS_ENABLED)
4391 Perl_croak(aTHX_ "The experimental declared_refs "
4392 "feature is not enabled");
4393 Perl_ck_warner_d(aTHX_
4394 packWARN(WARN_EXPERIMENTAL__DECLARED_REFS),
4395 "Declaring references is experimental");
4396 op_lvalue(cUNOPo->op_first, OP_NULL);
4399 if (type != OP_AASSIGN && type != OP_SASSIGN
4400 && type != OP_ENTERLOOP)
4402 /* Don’t bother applying lvalue context to the ex-list. */
4403 kid = cUNOPx(cUNOPo->op_first)->op_first;
4404 assert (!OpHAS_SIBLING(kid));
4407 if (type == OP_NULL) /* local */
4409 if (type != OP_AASSIGN) goto nomod;
4410 kid = cUNOPo->op_first;
4413 const U8 ec = PL_parser ? PL_parser->error_count : 0;
4414 S_lvref(aTHX_ kid, type);
4415 if (!PL_parser || PL_parser->error_count == ec) {
4416 if (!FEATURE_REFALIASING_IS_ENABLED)
4418 "Experimental aliasing via reference not enabled");
4419 Perl_ck_warner_d(aTHX_
4420 packWARN(WARN_EXPERIMENTAL__REFALIASING),
4421 "Aliasing via reference is experimental");
4424 if (o->op_type == OP_REFGEN)
4425 op_null(cUNOPx(cUNOPo->op_first)->op_first); /* pushmark */
4430 if ((o->op_private & OPpSPLIT_ASSIGN)) {
4431 /* This is actually @array = split. */
4432 PL_modcount = RETURN_UNLIMITED_NUMBER;
4438 op_lvalue(cUNOPo->op_first, OP_ENTERSUB);
4442 /* [20011101.069 (#7861)] File test operators interpret OPf_REF to mean that
4443 their argument is a filehandle; thus \stat(".") should not set
4445 if (type == OP_REFGEN && OP_IS_STAT(o->op_type))
4448 if (type != OP_LEAVESUBLV)
4449 o->op_flags |= OPf_MOD;
4451 if (type == OP_AASSIGN || type == OP_SASSIGN)
4452 o->op_flags |= OPf_SPECIAL
4453 |(o->op_type == OP_ENTERSUB ? 0 : OPf_REF);
4454 else if (!type) { /* local() */
4457 o->op_private |= OPpLVAL_INTRO;
4458 o->op_flags &= ~OPf_SPECIAL;
4459 PL_hints |= HINT_BLOCK_SCOPE;
4464 Perl_ck_warner(aTHX_ packWARN(WARN_SYNTAX),
4465 "Useless localization of %s", OP_DESC(o));
4468 else if (type != OP_GREPSTART && type != OP_ENTERSUB
4469 && type != OP_LEAVESUBLV && o->op_type != OP_ENTERSUB)
4470 o->op_flags |= OPf_REF;
4475 S_scalar_mod_type(const OP *o, I32 type)
4480 if (o && o->op_type == OP_RV2GV)
4504 case OP_RIGHT_SHIFT:
4533 S_is_handle_constructor(const OP *o, I32 numargs)
4535 PERL_ARGS_ASSERT_IS_HANDLE_CONSTRUCTOR;
4537 switch (o->op_type) {
4545 case OP_SELECT: /* XXX c.f. SelectSaver.pm */
4558 S_refkids(pTHX_ OP *o, I32 type)
4560 if (o && o->op_flags & OPf_KIDS) {
4562 for (kid = cLISTOPo->op_first; kid; kid = OpSIBLING(kid))
4569 Perl_doref(pTHX_ OP *o, I32 type, bool set_op_ref)
4574 PERL_ARGS_ASSERT_DOREF;
4576 if (PL_parser && PL_parser->error_count)
4579 switch (o->op_type) {
4581 if ((type == OP_EXISTS || type == OP_DEFINED) &&
4582 !(o->op_flags & OPf_STACKED)) {
4583 OpTYPE_set(o, OP_RV2CV); /* entersub => rv2cv */
4584 assert(cUNOPo->op_first->op_type == OP_NULL);
4585 op_null(((LISTOP*)cUNOPo->op_first)->op_first); /* disable pushmark */
4586 o->op_flags |= OPf_SPECIAL;
4588 else if (type == OP_RV2SV || type == OP_RV2AV || type == OP_RV2HV){
4589 o->op_private |= (type == OP_RV2AV ? OPpDEREF_AV
4590 : type == OP_RV2HV ? OPpDEREF_HV
4592 o->op_flags |= OPf_MOD;
4598 for (kid = OpSIBLING(cUNOPo->op_first); kid; kid = OpSIBLING(kid))
4599 doref(kid, type, set_op_ref);
4602 if (type == OP_DEFINED)
4603 o->op_flags |= OPf_SPECIAL; /* don't create GV */
4604 doref(cUNOPo->op_first, o->op_type, set_op_ref);
4607 if (type == OP_RV2SV || type == OP_RV2AV || type == OP_RV2HV) {
4608 o->op_private |= (type == OP_RV2AV ? OPpDEREF_AV
4609 : type == OP_RV2HV ? OPpDEREF_HV
4611 o->op_flags |= OPf_MOD;
4618 o->op_flags |= OPf_REF;
4621 if (type == OP_DEFINED)
4622 o->op_flags |= OPf_SPECIAL; /* don't create GV */
4623 doref(cUNOPo->op_first, o->op_type, set_op_ref);
4629 o->op_flags |= OPf_REF;
4634 if (!(o->op_flags & OPf_KIDS) || type == OP_DEFINED)
4636 doref(cBINOPo->op_first, type, set_op_ref);
4640 doref(cBINOPo->op_first, o->op_type, set_op_ref);
4641 if (type == OP_RV2SV || type == OP_RV2AV || type == OP_RV2HV) {
4642 o->op_private |= (type == OP_RV2AV ? OPpDEREF_AV
4643 : type == OP_RV2HV ? OPpDEREF_HV
4645 o->op_flags |= OPf_MOD;
4655 if (!(o->op_flags & OPf_KIDS))
4657 doref(cLISTOPo->op_last, type, set_op_ref);
4667 S_dup_attrlist(pTHX_ OP *o)
4671 PERL_ARGS_ASSERT_DUP_ATTRLIST;
4673 /* An attrlist is either a simple OP_CONST or an OP_LIST with kids,
4674 * where the first kid is OP_PUSHMARK and the remaining ones
4675 * are OP_CONST. We need to push the OP_CONST values.
4677 if (o->op_type == OP_CONST)
4678 rop = newSVOP(OP_CONST, o->op_flags, SvREFCNT_inc_NN(cSVOPo->op_sv));
4680 assert((o->op_type == OP_LIST) && (o->op_flags & OPf_KIDS));
4682 for (o = cLISTOPo->op_first; o; o = OpSIBLING(o)) {
4683 if (o->op_type == OP_CONST)
4684 rop = op_append_elem(OP_LIST, rop,
4685 newSVOP(OP_CONST, o->op_flags,
4686 SvREFCNT_inc_NN(cSVOPo->op_sv)));
4693 S_apply_attrs(pTHX_ HV *stash, SV *target, OP *attrs)
4695 PERL_ARGS_ASSERT_APPLY_ATTRS;
4697 SV * const stashsv = newSVhek(HvNAME_HEK(stash));
4699 /* fake up C<use attributes $pkg,$rv,@attrs> */
4701 #define ATTRSMODULE "attributes"
4702 #define ATTRSMODULE_PM "attributes.pm"
4705 aTHX_ PERL_LOADMOD_IMPORT_OPS,
4706 newSVpvs(ATTRSMODULE),
4708 op_prepend_elem(OP_LIST,
4709 newSVOP(OP_CONST, 0, stashsv),
4710 op_prepend_elem(OP_LIST,
4711 newSVOP(OP_CONST, 0,
4713 dup_attrlist(attrs))));
4718 S_apply_attrs_my(pTHX_ HV *stash, OP *target, OP *