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 /* Apply void context to all kids except the last, which
2391 * @a = do { void; void; list }
2392 * Except that 'when's are always list context, e.g.
2393 * @a = do { given(..) {
2394 * when (..) { list }
2395 * when (..) { list }
2401 else if (kid->op_type == OP_LEAVEWHEN)
2407 PL_curcop = &PL_compiling;
2412 /* If next_kid is set, someone in the code above wanted us to process
2413 * that kid and all its remaining siblings. Otherwise, work our way
2414 * back up the tree */
2418 return top_op; /* at top; no parents/siblings to try */
2419 if (OpHAS_SIBLING(o))
2420 next_kid = o->op_sibparent;
2422 o = o->op_sibparent; /*try parent's next sibling */
2431 S_scalarseq(pTHX_ OP *o)
2434 const OPCODE type = o->op_type;
2436 if (type == OP_LINESEQ || type == OP_SCOPE ||
2437 type == OP_LEAVE || type == OP_LEAVETRY)
2440 for (kid = cLISTOPo->op_first; kid; kid = sib) {
2441 if ((sib = OpSIBLING(kid))
2442 && ( OpHAS_SIBLING(sib) || sib->op_type != OP_NULL
2443 || ( sib->op_targ != OP_NEXTSTATE
2444 && sib->op_targ != OP_DBSTATE )))
2449 PL_curcop = &PL_compiling;
2451 o->op_flags &= ~OPf_PARENS;
2452 if (PL_hints & HINT_BLOCK_SCOPE)
2453 o->op_flags |= OPf_PARENS;
2456 o = newOP(OP_STUB, 0);
2461 S_modkids(pTHX_ OP *o, I32 type)
2463 if (o && o->op_flags & OPf_KIDS) {
2465 for (kid = cLISTOPo->op_first; kid; kid = OpSIBLING(kid))
2466 op_lvalue(kid, type);
2472 /* for a helem/hslice/kvslice, if its a fixed hash, croak on invalid
2473 * const fields. Also, convert CONST keys to HEK-in-SVs.
2474 * rop is the op that retrieves the hash;
2475 * key_op is the first key
2476 * real if false, only check (and possibly croak); don't update op
2480 S_check_hash_fields_and_hekify(pTHX_ UNOP *rop, SVOP *key_op, int real)
2486 /* find the padsv corresponding to $lex->{} or @{$lex}{} */
2488 if (rop->op_first->op_type == OP_PADSV)
2489 /* @$hash{qw(keys here)} */
2490 rop = (UNOP*)rop->op_first;
2492 /* @{$hash}{qw(keys here)} */
2493 if (rop->op_first->op_type == OP_SCOPE
2494 && cLISTOPx(rop->op_first)->op_last->op_type == OP_PADSV)
2496 rop = (UNOP*)cLISTOPx(rop->op_first)->op_last;
2503 lexname = NULL; /* just to silence compiler warnings */
2504 fields = NULL; /* just to silence compiler warnings */
2508 && (lexname = padnamelist_fetch(PL_comppad_name, rop->op_targ),
2509 SvPAD_TYPED(lexname))
2510 && (fields = (GV**)hv_fetchs(PadnameTYPE(lexname), "FIELDS", FALSE))
2511 && isGV(*fields) && GvHV(*fields);
2513 for (; key_op; key_op = (SVOP*)OpSIBLING(key_op)) {
2515 if (key_op->op_type != OP_CONST)
2517 svp = cSVOPx_svp(key_op);
2519 /* make sure it's not a bareword under strict subs */
2520 if (key_op->op_private & OPpCONST_BARE &&
2521 key_op->op_private & OPpCONST_STRICT)
2523 no_bareword_allowed((OP*)key_op);
2526 /* Make the CONST have a shared SV */
2527 if ( !SvIsCOW_shared_hash(sv = *svp)
2528 && SvTYPE(sv) < SVt_PVMG
2534 const char * const key = SvPV_const(sv, *(STRLEN*)&keylen);
2535 SV *nsv = newSVpvn_share(key, SvUTF8(sv) ? -keylen : keylen, 0);
2536 SvREFCNT_dec_NN(sv);
2541 && !hv_fetch_ent(GvHV(*fields), *svp, FALSE, 0))
2543 Perl_croak(aTHX_ "No such class field \"%" SVf "\" "
2544 "in variable %" PNf " of type %" HEKf,
2545 SVfARG(*svp), PNfARG(lexname),
2546 HEKfARG(HvNAME_HEK(PadnameTYPE(lexname))));
2551 /* info returned by S_sprintf_is_multiconcatable() */
2553 struct sprintf_ismc_info {
2554 SSize_t nargs; /* num of args to sprintf (not including the format) */
2555 char *start; /* start of raw format string */
2556 char *end; /* bytes after end of raw format string */
2557 STRLEN total_len; /* total length (in bytes) of format string, not
2558 including '%s' and half of '%%' */
2559 STRLEN variant; /* number of bytes by which total_len_p would grow
2560 if upgraded to utf8 */
2561 bool utf8; /* whether the format is utf8 */
2565 /* is the OP_SPRINTF o suitable for converting into a multiconcat op?
2566 * i.e. its format argument is a const string with only '%s' and '%%'
2567 * formats, and the number of args is known, e.g.
2568 * sprintf "a=%s f=%s", $a[0], scalar(f());
2570 * sprintf "i=%d a=%s f=%s", $i, @a, f();
2572 * If successful, the sprintf_ismc_info struct pointed to by info will be
2577 S_sprintf_is_multiconcatable(pTHX_ OP *o,struct sprintf_ismc_info *info)
2579 OP *pm, *constop, *kid;
2582 SSize_t nargs, nformats;
2583 STRLEN cur, total_len, variant;
2586 /* if sprintf's behaviour changes, die here so that someone
2587 * can decide whether to enhance this function or skip optimising
2588 * under those new circumstances */
2589 assert(!(o->op_flags & OPf_STACKED));
2590 assert(!(PL_opargs[OP_SPRINTF] & OA_TARGLEX));
2591 assert(!(o->op_private & ~OPpARG4_MASK));
2593 pm = cUNOPo->op_first;
2594 if (pm->op_type != OP_PUSHMARK) /* weird coreargs stuff */
2596 constop = OpSIBLING(pm);
2597 if (!constop || constop->op_type != OP_CONST)
2599 sv = cSVOPx_sv(constop);
2600 if (SvMAGICAL(sv) || !SvPOK(sv))
2606 /* Scan format for %% and %s and work out how many %s there are.
2607 * Abandon if other format types are found.
2614 for (p = s; p < e; p++) {
2617 if (!UTF8_IS_INVARIANT(*p))
2623 return FALSE; /* lone % at end gives "Invalid conversion" */
2632 if (!nformats || nformats > PERL_MULTICONCAT_MAXARG)
2635 utf8 = cBOOL(SvUTF8(sv));
2639 /* scan args; they must all be in scalar cxt */
2642 kid = OpSIBLING(constop);
2645 if ((kid->op_flags & OPf_WANT) != OPf_WANT_SCALAR)
2648 kid = OpSIBLING(kid);
2651 if (nargs != nformats)
2652 return FALSE; /* e.g. sprintf("%s%s", $a); */
2655 info->nargs = nargs;
2658 info->total_len = total_len;
2659 info->variant = variant;
2667 /* S_maybe_multiconcat():
2669 * given an OP_STRINGIFY, OP_SASSIGN, OP_CONCAT or OP_SPRINTF op, possibly
2670 * convert it (and its children) into an OP_MULTICONCAT. See the code
2671 * comments just before pp_multiconcat() for the full details of what
2672 * OP_MULTICONCAT supports.
2674 * Basically we're looking for an optree with a chain of OP_CONCATS down
2675 * the LHS (or an OP_SPRINTF), with possibly an OP_SASSIGN, and/or
2676 * OP_STRINGIFY, and/or OP_CONCAT acting as '.=' at its head, e.g.
2684 * STRINGIFY -- PADSV[$x]
2687 * ex-PUSHMARK -- CONCAT/S
2689 * CONCAT/S -- PADSV[$d]
2691 * CONCAT -- CONST["-"]
2693 * PADSV[$a] -- PADSV[$b]
2695 * Note that at this stage the OP_SASSIGN may have already been optimised
2696 * away with OPpTARGET_MY set on the OP_STRINGIFY or OP_CONCAT.
2700 S_maybe_multiconcat(pTHX_ OP *o)
2703 OP *lastkidop; /* the right-most of any kids unshifted onto o */
2704 OP *topop; /* the top-most op in the concat tree (often equals o,
2705 unless there are assign/stringify ops above it */
2706 OP *parentop; /* the parent op of topop (or itself if no parent) */
2707 OP *targmyop; /* the op (if any) with the OPpTARGET_MY flag */
2708 OP *targetop; /* the op corresponding to target=... or target.=... */
2709 OP *stringop; /* the OP_STRINGIFY op, if any */
2710 OP *nextop; /* used for recreating the op_next chain without consts */
2711 OP *kid; /* general-purpose op pointer */
2713 UNOP_AUX_item *lenp;
2714 char *const_str, *p;
2715 struct sprintf_ismc_info sprintf_info;
2717 /* store info about each arg in args[];
2718 * toparg is the highest used slot; argp is a general
2719 * pointer to args[] slots */
2721 void *p; /* initially points to const sv (or null for op);
2722 later, set to SvPV(constsv), with ... */
2723 STRLEN len; /* ... len set to SvPV(..., len) */
2724 } *argp, *toparg, args[PERL_MULTICONCAT_MAXARG*2 + 1];
2728 SSize_t nadjconst = 0; /* adjacent consts - may be demoted to args */
2731 bool kid_is_last = FALSE; /* most args will be the RHS kid of a concat op;
2732 the last-processed arg will the LHS of one,
2733 as args are processed in reverse order */
2734 U8 stacked_last = 0; /* whether the last seen concat op was STACKED */
2735 STRLEN total_len = 0; /* sum of the lengths of the const segments */
2736 U8 flags = 0; /* what will become the op_flags and ... */
2737 U8 private_flags = 0; /* ... op_private of the multiconcat op */
2738 bool is_sprintf = FALSE; /* we're optimising an sprintf */
2739 bool is_targable = FALSE; /* targetop is an OPpTARGET_MY candidate */
2740 bool prev_was_const = FALSE; /* previous arg was a const */
2742 /* -----------------------------------------------------------------
2745 * Examine the optree non-destructively to determine whether it's
2746 * suitable to be converted into an OP_MULTICONCAT. Accumulate
2747 * information about the optree in args[].
2757 assert( o->op_type == OP_SASSIGN
2758 || o->op_type == OP_CONCAT
2759 || o->op_type == OP_SPRINTF
2760 || o->op_type == OP_STRINGIFY);
2762 Zero(&sprintf_info, 1, struct sprintf_ismc_info);
2764 /* first see if, at the top of the tree, there is an assign,
2765 * append and/or stringify */
2767 if (topop->op_type == OP_SASSIGN) {
2769 if (o->op_ppaddr != PL_ppaddr[OP_SASSIGN])
2771 if (o->op_private & (OPpASSIGN_BACKWARDS|OPpASSIGN_CV_TO_GV))
2773 assert(!(o->op_private & ~OPpARG2_MASK)); /* barf on unknown flags */
2776 topop = cBINOPo->op_first;
2777 targetop = OpSIBLING(topop);
2778 if (!targetop) /* probably some sort of syntax error */
2781 else if ( topop->op_type == OP_CONCAT
2782 && (topop->op_flags & OPf_STACKED)
2783 && (!(topop->op_private & OPpCONCAT_NESTED))
2788 /* OPpTARGET_MY shouldn't be able to be set here. If it is,
2789 * decide what to do about it */
2790 assert(!(o->op_private & OPpTARGET_MY));
2792 /* barf on unknown flags */
2793 assert(!(o->op_private & ~(OPpARG2_MASK|OPpTARGET_MY)));
2794 private_flags |= OPpMULTICONCAT_APPEND;
2795 targetop = cBINOPo->op_first;
2797 topop = OpSIBLING(targetop);
2799 /* $x .= <FOO> gets optimised to rcatline instead */
2800 if (topop->op_type == OP_READLINE)
2805 /* Can targetop (the LHS) if it's a padsv, be be optimised
2806 * away and use OPpTARGET_MY instead?
2808 if ( (targetop->op_type == OP_PADSV)
2809 && !(targetop->op_private & OPpDEREF)
2810 && !(targetop->op_private & OPpPAD_STATE)
2811 /* we don't support 'my $x .= ...' */
2812 && ( o->op_type == OP_SASSIGN
2813 || !(targetop->op_private & OPpLVAL_INTRO))
2818 if (topop->op_type == OP_STRINGIFY) {
2819 if (topop->op_ppaddr != PL_ppaddr[OP_STRINGIFY])
2823 /* barf on unknown flags */
2824 assert(!(o->op_private & ~(OPpARG4_MASK|OPpTARGET_MY)));
2826 if ((topop->op_private & OPpTARGET_MY)) {
2827 if (o->op_type == OP_SASSIGN)
2828 return; /* can't have two assigns */
2832 private_flags |= OPpMULTICONCAT_STRINGIFY;
2834 topop = cBINOPx(topop)->op_first;
2835 assert(OP_TYPE_IS_OR_WAS_NN(topop, OP_PUSHMARK));
2836 topop = OpSIBLING(topop);
2839 if (topop->op_type == OP_SPRINTF) {
2840 if (topop->op_ppaddr != PL_ppaddr[OP_SPRINTF])
2842 if (S_sprintf_is_multiconcatable(aTHX_ topop, &sprintf_info)) {
2843 nargs = sprintf_info.nargs;
2844 total_len = sprintf_info.total_len;
2845 variant = sprintf_info.variant;
2846 utf8 = sprintf_info.utf8;
2848 private_flags |= OPpMULTICONCAT_FAKE;
2850 /* we have an sprintf op rather than a concat optree.
2851 * Skip most of the code below which is associated with
2852 * processing that optree. We also skip phase 2, determining
2853 * whether its cost effective to optimise, since for sprintf,
2854 * multiconcat is *always* faster */
2857 /* note that even if the sprintf itself isn't multiconcatable,
2858 * the expression as a whole may be, e.g. in
2859 * $x .= sprintf("%d",...)
2860 * the sprintf op will be left as-is, but the concat/S op may
2861 * be upgraded to multiconcat
2864 else if (topop->op_type == OP_CONCAT) {
2865 if (topop->op_ppaddr != PL_ppaddr[OP_CONCAT])
2868 if ((topop->op_private & OPpTARGET_MY)) {
2869 if (o->op_type == OP_SASSIGN || targmyop)
2870 return; /* can't have two assigns */
2875 /* Is it safe to convert a sassign/stringify/concat op into
2877 assert((PL_opargs[OP_SASSIGN] & OA_CLASS_MASK) == OA_BINOP);
2878 assert((PL_opargs[OP_CONCAT] & OA_CLASS_MASK) == OA_BINOP);
2879 assert((PL_opargs[OP_STRINGIFY] & OA_CLASS_MASK) == OA_LISTOP);
2880 assert((PL_opargs[OP_SPRINTF] & OA_CLASS_MASK) == OA_LISTOP);
2881 STATIC_ASSERT_STMT( STRUCT_OFFSET(BINOP, op_last)
2882 == STRUCT_OFFSET(UNOP_AUX, op_aux));
2883 STATIC_ASSERT_STMT( STRUCT_OFFSET(LISTOP, op_last)
2884 == STRUCT_OFFSET(UNOP_AUX, op_aux));
2886 /* Now scan the down the tree looking for a series of
2887 * CONCAT/OPf_STACKED ops on the LHS (with the last one not
2888 * stacked). For example this tree:
2893 * CONCAT/STACKED -- EXPR5
2895 * CONCAT/STACKED -- EXPR4
2901 * corresponds to an expression like
2903 * (EXPR1 . EXPR2 . EXPR3 . EXPR4 . EXPR5)
2905 * Record info about each EXPR in args[]: in particular, whether it is
2906 * a stringifiable OP_CONST and if so what the const sv is.
2908 * The reason why the last concat can't be STACKED is the difference
2911 * ((($a .= $a) .= $a) .= $a) .= $a
2914 * $a . $a . $a . $a . $a
2916 * The main difference between the optrees for those two constructs
2917 * is the presence of the last STACKED. As well as modifying $a,
2918 * the former sees the changed $a between each concat, so if $s is
2919 * initially 'a', the first returns 'a' x 16, while the latter returns
2920 * 'a' x 5. And pp_multiconcat can't handle that kind of thing.
2930 if ( kid->op_type == OP_CONCAT
2934 k1 = cUNOPx(kid)->op_first;
2936 /* shouldn't happen except maybe after compile err? */
2940 /* avoid turning (A . B . ($lex = C) ...) into (A . B . C ...) */
2941 if (kid->op_private & OPpTARGET_MY)
2944 stacked_last = (kid->op_flags & OPf_STACKED);
2956 if ( nargs + nadjconst > PERL_MULTICONCAT_MAXARG - 2
2957 || (argp - args + 1) > (PERL_MULTICONCAT_MAXARG*2 + 1) - 2)
2959 /* At least two spare slots are needed to decompose both
2960 * concat args. If there are no slots left, continue to
2961 * examine the rest of the optree, but don't push new values
2962 * on args[]. If the optree as a whole is legal for conversion
2963 * (in particular that the last concat isn't STACKED), then
2964 * the first PERL_MULTICONCAT_MAXARG elements of the optree
2965 * can be converted into an OP_MULTICONCAT now, with the first
2966 * child of that op being the remainder of the optree -
2967 * which may itself later be converted to a multiconcat op
2971 /* the last arg is the rest of the optree */
2976 else if ( argop->op_type == OP_CONST
2977 && ((sv = cSVOPx_sv(argop)))
2978 /* defer stringification until runtime of 'constant'
2979 * things that might stringify variantly, e.g. the radix
2980 * point of NVs, or overloaded RVs */
2981 && (SvPOK(sv) || SvIOK(sv))
2982 && (!SvGMAGICAL(sv))
2985 utf8 |= cBOOL(SvUTF8(sv));
2988 /* this const may be demoted back to a plain arg later;
2989 * make sure we have enough arg slots left */
2991 prev_was_const = !prev_was_const;
2996 prev_was_const = FALSE;
3006 return; /* we don't support ((A.=B).=C)...) */
3008 /* look for two adjacent consts and don't fold them together:
3011 * $o->concat("a")->concat("b")
3014 * (but $o .= "a" . "b" should still fold)
3017 bool seen_nonconst = FALSE;
3018 for (argp = toparg; argp >= args; argp--) {
3019 if (argp->p == NULL) {
3020 seen_nonconst = TRUE;
3026 /* both previous and current arg were constants;
3027 * leave the current OP_CONST as-is */
3035 /* -----------------------------------------------------------------
3038 * At this point we have determined that the optree *can* be converted
3039 * into a multiconcat. Having gathered all the evidence, we now decide
3040 * whether it *should*.
3044 /* we need at least one concat action, e.g.:
3050 * otherwise we could be doing something like $x = "foo", which
3051 * if treated as as a concat, would fail to COW.
3053 if (nargs + nconst + cBOOL(private_flags & OPpMULTICONCAT_APPEND) < 2)
3056 /* Benchmarking seems to indicate that we gain if:
3057 * * we optimise at least two actions into a single multiconcat
3058 * (e.g concat+concat, sassign+concat);
3059 * * or if we can eliminate at least 1 OP_CONST;
3060 * * or if we can eliminate a padsv via OPpTARGET_MY
3064 /* eliminated at least one OP_CONST */
3066 /* eliminated an OP_SASSIGN */
3067 || o->op_type == OP_SASSIGN
3068 /* eliminated an OP_PADSV */
3069 || (!targmyop && is_targable)
3071 /* definitely a net gain to optimise */
3074 /* ... if not, what else? */
3076 /* special-case '$lex1 = expr . $lex1' (where expr isn't lex1):
3077 * multiconcat is faster (due to not creating a temporary copy of
3078 * $lex1), whereas for a general $lex1 = $lex2 . $lex3, concat is
3084 && topop->op_type == OP_CONCAT
3086 PADOFFSET t = targmyop->op_targ;
3087 OP *k1 = cBINOPx(topop)->op_first;
3088 OP *k2 = cBINOPx(topop)->op_last;
3089 if ( k2->op_type == OP_PADSV
3091 && ( k1->op_type != OP_PADSV
3092 || k1->op_targ != t)
3097 /* need at least two concats */
3098 if (nargs + nconst + cBOOL(private_flags & OPpMULTICONCAT_APPEND) < 3)
3103 /* -----------------------------------------------------------------
3106 * At this point the optree has been verified as ok to be optimised
3107 * into an OP_MULTICONCAT. Now start changing things.
3112 /* stringify all const args and determine utf8ness */
3115 for (argp = args; argp <= toparg; argp++) {
3116 SV *sv = (SV*)argp->p;
3118 continue; /* not a const op */
3119 if (utf8 && !SvUTF8(sv))
3120 sv_utf8_upgrade_nomg(sv);
3121 argp->p = SvPV_nomg(sv, argp->len);
3122 total_len += argp->len;
3124 /* see if any strings would grow if converted to utf8 */
3126 variant += variant_under_utf8_count((U8 *) argp->p,
3127 (U8 *) argp->p + argp->len);
3131 /* create and populate aux struct */
3135 aux = (UNOP_AUX_item*)PerlMemShared_malloc(
3136 sizeof(UNOP_AUX_item)
3138 PERL_MULTICONCAT_HEADER_SIZE
3139 + ((nargs + 1) * (variant ? 2 : 1))
3142 const_str = (char *)PerlMemShared_malloc(total_len ? total_len : 1);
3144 /* Extract all the non-const expressions from the concat tree then
3145 * dispose of the old tree, e.g. convert the tree from this:
3149 * STRINGIFY -- TARGET
3151 * ex-PUSHMARK -- CONCAT
3166 * ex-PUSHMARK -- EXPR1 -- EXPR2 -- EXPR3 -- EXPR4 -- EXPR5 -- TARGET
3168 * except that if EXPRi is an OP_CONST, it's discarded.
3170 * During the conversion process, EXPR ops are stripped from the tree
3171 * and unshifted onto o. Finally, any of o's remaining original
3172 * childen are discarded and o is converted into an OP_MULTICONCAT.
3174 * In this middle of this, o may contain both: unshifted args on the
3175 * left, and some remaining original args on the right. lastkidop
3176 * is set to point to the right-most unshifted arg to delineate
3177 * between the two sets.
3182 /* create a copy of the format with the %'s removed, and record
3183 * the sizes of the const string segments in the aux struct */
3185 lenp = aux + PERL_MULTICONCAT_IX_LENGTHS;
3187 p = sprintf_info.start;
3190 for (; p < sprintf_info.end; p++) {
3194 (lenp++)->ssize = q - oldq;
3201 lenp->ssize = q - oldq;
3202 assert((STRLEN)(q - const_str) == total_len);
3204 /* Attach all the args (i.e. the kids of the sprintf) to o (which
3205 * may or may not be topop) The pushmark and const ops need to be
3206 * kept in case they're an op_next entry point.
3208 lastkidop = cLISTOPx(topop)->op_last;
3209 kid = cUNOPx(topop)->op_first; /* pushmark */
3211 op_null(OpSIBLING(kid)); /* const */
3213 kid = op_sibling_splice(topop, NULL, -1, NULL); /* cut all args */
3214 op_sibling_splice(o, NULL, 0, kid); /* and attach to o */
3215 lastkidop->op_next = o;
3220 lenp = aux + PERL_MULTICONCAT_IX_LENGTHS;
3224 /* Concatenate all const strings into const_str.
3225 * Note that args[] contains the RHS args in reverse order, so
3226 * we scan args[] from top to bottom to get constant strings
3229 for (argp = toparg; argp >= args; argp--) {
3231 /* not a const op */
3232 (++lenp)->ssize = -1;
3234 STRLEN l = argp->len;
3235 Copy(argp->p, p, l, char);
3237 if (lenp->ssize == -1)
3248 for (argp = args; argp <= toparg; argp++) {
3249 /* only keep non-const args, except keep the first-in-next-chain
3250 * arg no matter what it is (but nulled if OP_CONST), because it
3251 * may be the entry point to this subtree from the previous
3254 bool last = (argp == toparg);
3257 /* set prev to the sibling *before* the arg to be cut out,
3258 * e.g. when cutting EXPR:
3263 * prev= CONCAT -- EXPR
3266 if (argp == args && kid->op_type != OP_CONCAT) {
3267 /* in e.g. '$x .= f(1)' there's no RHS concat tree
3268 * so the expression to be cut isn't kid->op_last but
3271 /* find the op before kid */
3273 o2 = cUNOPx(parentop)->op_first;
3274 while (o2 && o2 != kid) {
3282 else if (kid == o && lastkidop)
3283 prev = last ? lastkidop : OpSIBLING(lastkidop);
3285 prev = last ? NULL : cUNOPx(kid)->op_first;
3287 if (!argp->p || last) {
3289 OP *aop = op_sibling_splice(kid, prev, 1, NULL);
3290 /* and unshift to front of o */
3291 op_sibling_splice(o, NULL, 0, aop);
3292 /* record the right-most op added to o: later we will
3293 * free anything to the right of it */
3296 aop->op_next = nextop;
3299 /* null the const at start of op_next chain */
3303 nextop = prev->op_next;
3306 /* the last two arguments are both attached to the same concat op */
3307 if (argp < toparg - 1)
3312 /* Populate the aux struct */
3314 aux[PERL_MULTICONCAT_IX_NARGS].ssize = nargs;
3315 aux[PERL_MULTICONCAT_IX_PLAIN_PV].pv = utf8 ? NULL : const_str;
3316 aux[PERL_MULTICONCAT_IX_PLAIN_LEN].ssize = utf8 ? 0 : total_len;
3317 aux[PERL_MULTICONCAT_IX_UTF8_PV].pv = const_str;
3318 aux[PERL_MULTICONCAT_IX_UTF8_LEN].ssize = total_len;
3320 /* if variant > 0, calculate a variant const string and lengths where
3321 * the utf8 version of the string will take 'variant' more bytes than
3325 char *p = const_str;
3326 STRLEN ulen = total_len + variant;
3327 UNOP_AUX_item *lens = aux + PERL_MULTICONCAT_IX_LENGTHS;
3328 UNOP_AUX_item *ulens = lens + (nargs + 1);
3329 char *up = (char*)PerlMemShared_malloc(ulen);
3332 aux[PERL_MULTICONCAT_IX_UTF8_PV].pv = up;
3333 aux[PERL_MULTICONCAT_IX_UTF8_LEN].ssize = ulen;
3335 for (n = 0; n < (nargs + 1); n++) {
3337 char * orig_up = up;
3338 for (i = (lens++)->ssize; i > 0; i--) {
3340 append_utf8_from_native_byte(c, (U8**)&up);
3342 (ulens++)->ssize = (i < 0) ? i : up - orig_up;
3347 /* if there was a top(ish)-level OP_STRINGIFY, we need to keep
3348 * that op's first child - an ex-PUSHMARK - because the op_next of
3349 * the previous op may point to it (i.e. it's the entry point for
3354 ? op_sibling_splice(o, lastkidop, 1, NULL)
3355 : op_sibling_splice(stringop, NULL, 1, NULL);
3356 assert(OP_TYPE_IS_OR_WAS_NN(pmop, OP_PUSHMARK));
3357 op_sibling_splice(o, NULL, 0, pmop);
3364 * target .= A.B.C...
3370 if (o->op_type == OP_SASSIGN) {
3371 /* Move the target subtree from being the last of o's children
3372 * to being the last of o's preserved children.
3373 * Note the difference between 'target = ...' and 'target .= ...':
3374 * for the former, target is executed last; for the latter,
3377 kid = OpSIBLING(lastkidop);
3378 op_sibling_splice(o, kid, 1, NULL); /* cut target op */
3379 op_sibling_splice(o, lastkidop, 0, targetop); /* and paste */
3380 lastkidop->op_next = kid->op_next;
3381 lastkidop = targetop;
3384 /* Move the target subtree from being the first of o's
3385 * original children to being the first of *all* o's children.
3388 op_sibling_splice(o, lastkidop, 1, NULL); /* cut target op */
3389 op_sibling_splice(o, NULL, 0, targetop); /* and paste*/
3392 /* if the RHS of .= doesn't contain a concat (e.g.
3393 * $x .= "foo"), it gets missed by the "strip ops from the
3394 * tree and add to o" loop earlier */
3395 assert(topop->op_type != OP_CONCAT);
3397 /* in e.g. $x .= "$y", move the $y expression
3398 * from being a child of OP_STRINGIFY to being the
3399 * second child of the OP_CONCAT
3401 assert(cUNOPx(stringop)->op_first == topop);
3402 op_sibling_splice(stringop, NULL, 1, NULL);
3403 op_sibling_splice(o, cUNOPo->op_first, 0, topop);
3405 assert(topop == OpSIBLING(cBINOPo->op_first));
3414 * my $lex = A.B.C...
3417 * The original padsv op is kept but nulled in case it's the
3418 * entry point for the optree (which it will be for
3421 private_flags |= OPpTARGET_MY;
3422 private_flags |= (targetop->op_private & OPpLVAL_INTRO);
3423 o->op_targ = targetop->op_targ;
3424 targetop->op_targ = 0;
3428 flags |= OPf_STACKED;
3430 else if (targmyop) {
3431 private_flags |= OPpTARGET_MY;
3432 if (o != targmyop) {
3433 o->op_targ = targmyop->op_targ;
3434 targmyop->op_targ = 0;
3438 /* detach the emaciated husk of the sprintf/concat optree and free it */
3440 kid = op_sibling_splice(o, lastkidop, 1, NULL);
3446 /* and convert o into a multiconcat */
3448 o->op_flags = (flags|OPf_KIDS|stacked_last
3449 |(o->op_flags & (OPf_WANT|OPf_PARENS)));
3450 o->op_private = private_flags;
3451 o->op_type = OP_MULTICONCAT;
3452 o->op_ppaddr = PL_ppaddr[OP_MULTICONCAT];
3453 cUNOP_AUXo->op_aux = aux;
3457 /* do all the final processing on an optree (e.g. running the peephole
3458 * optimiser on it), then attach it to cv (if cv is non-null)
3462 S_process_optree(pTHX_ CV *cv, OP *optree, OP* start)
3466 /* XXX for some reason, evals, require and main optrees are
3467 * never attached to their CV; instead they just hang off
3468 * PL_main_root + PL_main_start or PL_eval_root + PL_eval_start
3469 * and get manually freed when appropriate */
3471 startp = &CvSTART(cv);
3473 startp = PL_in_eval? &PL_eval_start : &PL_main_start;
3476 optree->op_private |= OPpREFCOUNTED;
3477 OpREFCNT_set(optree, 1);
3478 optimize_optree(optree);
3480 finalize_optree(optree);
3481 S_prune_chain_head(startp);
3484 /* now that optimizer has done its work, adjust pad values */
3485 pad_tidy(optree->op_type == OP_LEAVEWRITE ? padtidy_FORMAT
3486 : CvCLONE(cv) ? padtidy_SUBCLONE : padtidy_SUB);
3492 =for apidoc optimize_optree
3494 This function applies some optimisations to the optree in top-down order.
3495 It is called before the peephole optimizer, which processes ops in
3496 execution order. Note that finalize_optree() also does a top-down scan,
3497 but is called *after* the peephole optimizer.
3503 Perl_optimize_optree(pTHX_ OP* o)
3505 PERL_ARGS_ASSERT_OPTIMIZE_OPTREE;
3508 SAVEVPTR(PL_curcop);
3516 /* helper for optimize_optree() which optimises one op then recurses
3517 * to optimise any children.
3521 S_optimize_op(pTHX_ OP* o)
3525 PERL_ARGS_ASSERT_OPTIMIZE_OP;
3528 OP * next_kid = NULL;
3530 assert(o->op_type != OP_FREED);
3532 switch (o->op_type) {
3535 PL_curcop = ((COP*)o); /* for warnings */
3543 S_maybe_multiconcat(aTHX_ o);
3547 if (cPMOPo->op_pmreplrootu.op_pmreplroot) {
3548 /* we can't assume that op_pmreplroot->op_sibparent == o
3549 * and that it is thus possible to walk back up the tree
3550 * past op_pmreplroot. So, although we try to avoid
3551 * recursing through op trees, do it here. After all,
3552 * there are unlikely to be many nested s///e's within
3553 * the replacement part of a s///e.
3555 optimize_op(cPMOPo->op_pmreplrootu.op_pmreplroot);
3563 if (o->op_flags & OPf_KIDS)
3564 next_kid = cUNOPo->op_first;
3566 /* if a kid hasn't been nominated to process, continue with the
3567 * next sibling, or if no siblings left, go back to the parent's
3568 * siblings and so on
3572 return; /* at top; no parents/siblings to try */
3573 if (OpHAS_SIBLING(o))
3574 next_kid = o->op_sibparent;
3576 o = o->op_sibparent; /*try parent's next sibling */
3579 /* this label not yet used. Goto here if any code above sets
3589 =for apidoc finalize_optree
3591 This function finalizes the optree. Should be called directly after
3592 the complete optree is built. It does some additional
3593 checking which can't be done in the normal C<ck_>xxx functions and makes
3594 the tree thread-safe.
3599 Perl_finalize_optree(pTHX_ OP* o)
3601 PERL_ARGS_ASSERT_FINALIZE_OPTREE;
3604 SAVEVPTR(PL_curcop);
3612 /* Relocate sv to the pad for thread safety.
3613 * Despite being a "constant", the SV is written to,
3614 * for reference counts, sv_upgrade() etc. */
3615 PERL_STATIC_INLINE void
3616 S_op_relocate_sv(pTHX_ SV** svp, PADOFFSET* targp)
3619 PERL_ARGS_ASSERT_OP_RELOCATE_SV;
3621 ix = pad_alloc(OP_CONST, SVf_READONLY);
3622 SvREFCNT_dec(PAD_SVl(ix));
3623 PAD_SETSV(ix, *svp);
3624 /* XXX I don't know how this isn't readonly already. */
3625 if (!SvIsCOW(PAD_SVl(ix))) SvREADONLY_on(PAD_SVl(ix));
3632 =for apidoc traverse_op_tree
3634 Return the next op in a depth-first traversal of the op tree,
3635 returning NULL when the traversal is complete.
3637 The initial call must supply the root of the tree as both top and o.
3639 For now it's static, but it may be exposed to the API in the future.
3645 S_traverse_op_tree(pTHX_ OP *top, OP *o) {
3648 PERL_ARGS_ASSERT_TRAVERSE_OP_TREE;
3650 if ((o->op_flags & OPf_KIDS) && cUNOPo->op_first) {
3651 return cUNOPo->op_first;
3653 else if ((sib = OpSIBLING(o))) {
3657 OP *parent = o->op_sibparent;
3658 assert(!(o->op_moresib));
3659 while (parent && parent != top) {
3660 OP *sib = OpSIBLING(parent);
3663 parent = parent->op_sibparent;
3671 S_finalize_op(pTHX_ OP* o)
3674 PERL_ARGS_ASSERT_FINALIZE_OP;
3677 assert(o->op_type != OP_FREED);
3679 switch (o->op_type) {
3682 PL_curcop = ((COP*)o); /* for warnings */
3685 if (OpHAS_SIBLING(o)) {
3686 OP *sib = OpSIBLING(o);
3687 if (( sib->op_type == OP_NEXTSTATE || sib->op_type == OP_DBSTATE)
3688 && ckWARN(WARN_EXEC)
3689 && OpHAS_SIBLING(sib))
3691 const OPCODE type = OpSIBLING(sib)->op_type;
3692 if (type != OP_EXIT && type != OP_WARN && type != OP_DIE) {
3693 const line_t oldline = CopLINE(PL_curcop);
3694 CopLINE_set(PL_curcop, CopLINE((COP*)sib));
3695 Perl_warner(aTHX_ packWARN(WARN_EXEC),
3696 "Statement unlikely to be reached");
3697 Perl_warner(aTHX_ packWARN(WARN_EXEC),
3698 "\t(Maybe you meant system() when you said exec()?)\n");
3699 CopLINE_set(PL_curcop, oldline);
3706 if ((o->op_private & OPpEARLY_CV) && ckWARN(WARN_PROTOTYPE)) {
3707 GV * const gv = cGVOPo_gv;
3708 if (SvTYPE(gv) == SVt_PVGV && GvCV(gv) && SvPVX_const(GvCV(gv))) {
3709 /* XXX could check prototype here instead of just carping */
3710 SV * const sv = sv_newmortal();
3711 gv_efullname3(sv, gv, NULL);
3712 Perl_warner(aTHX_ packWARN(WARN_PROTOTYPE),
3713 "%" SVf "() called too early to check prototype",
3720 if (cSVOPo->op_private & OPpCONST_STRICT)
3721 no_bareword_allowed(o);
3725 op_relocate_sv(&cSVOPo->op_sv, &o->op_targ);
3730 /* Relocate all the METHOP's SVs to the pad for thread safety. */
3731 case OP_METHOD_NAMED:
3732 case OP_METHOD_SUPER:
3733 case OP_METHOD_REDIR:
3734 case OP_METHOD_REDIR_SUPER:
3735 op_relocate_sv(&cMETHOPx(o)->op_u.op_meth_sv, &o->op_targ);
3744 if ((key_op = cSVOPx(((BINOP*)o)->op_last))->op_type != OP_CONST)
3747 rop = (UNOP*)((BINOP*)o)->op_first;
3752 S_scalar_slice_warning(aTHX_ o);
3756 kid = OpSIBLING(cLISTOPo->op_first);
3757 if (/* I bet there's always a pushmark... */
3758 OP_TYPE_ISNT_AND_WASNT_NN(kid, OP_LIST)
3759 && OP_TYPE_ISNT_NN(kid, OP_CONST))
3764 key_op = (SVOP*)(kid->op_type == OP_CONST
3766 : OpSIBLING(kLISTOP->op_first));
3768 rop = (UNOP*)((LISTOP*)o)->op_last;
3771 if (o->op_private & OPpLVAL_INTRO || rop->op_type != OP_RV2HV)
3773 S_check_hash_fields_and_hekify(aTHX_ rop, key_op, 1);
3777 if (o->op_targ != OP_HSLICE && o->op_targ != OP_ASLICE)
3781 S_scalar_slice_warning(aTHX_ o);
3785 if (cPMOPo->op_pmreplrootu.op_pmreplroot)
3786 finalize_op(cPMOPo->op_pmreplrootu.op_pmreplroot);
3794 if (o->op_flags & OPf_KIDS) {
3797 /* check that op_last points to the last sibling, and that
3798 * the last op_sibling/op_sibparent field points back to the
3799 * parent, and that the only ops with KIDS are those which are
3800 * entitled to them */
3801 U32 type = o->op_type;
3805 if (type == OP_NULL) {
3807 /* ck_glob creates a null UNOP with ex-type GLOB
3808 * (which is a list op. So pretend it wasn't a listop */
3809 if (type == OP_GLOB)
3812 family = PL_opargs[type] & OA_CLASS_MASK;
3814 has_last = ( family == OA_BINOP
3815 || family == OA_LISTOP
3816 || family == OA_PMOP
3817 || family == OA_LOOP
3819 assert( has_last /* has op_first and op_last, or ...
3820 ... has (or may have) op_first: */
3821 || family == OA_UNOP
3822 || family == OA_UNOP_AUX
3823 || family == OA_LOGOP
3824 || family == OA_BASEOP_OR_UNOP
3825 || family == OA_FILESTATOP
3826 || family == OA_LOOPEXOP
3827 || family == OA_METHOP
3828 || type == OP_CUSTOM
3829 || type == OP_NULL /* new_logop does this */
3832 for (kid = cUNOPo->op_first; kid; kid = OpSIBLING(kid)) {
3833 if (!OpHAS_SIBLING(kid)) {
3835 assert(kid == cLISTOPo->op_last);
3836 assert(kid->op_sibparent == o);
3841 } while (( o = traverse_op_tree(top, o)) != NULL);
3845 =for apidoc op_lvalue
3847 Propagate lvalue ("modifiable") context to an op and its children.
3848 C<type> represents the context type, roughly based on the type of op that
3849 would do the modifying, although C<local()> is represented by C<OP_NULL>,
3850 because it has no op type of its own (it is signalled by a flag on
3853 This function detects things that can't be modified, such as C<$x+1>, and
3854 generates errors for them. For example, C<$x+1 = 2> would cause it to be
3855 called with an op of type C<OP_ADD> and a C<type> argument of C<OP_SASSIGN>.
3857 It also flags things that need to behave specially in an lvalue context,
3858 such as C<$$x = 5> which might have to vivify a reference in C<$x>.
3864 S_mark_padname_lvalue(pTHX_ PADNAME *pn)
3867 PadnameLVALUE_on(pn);
3868 while (PadnameOUTER(pn) && PARENT_PAD_INDEX(pn)) {
3870 /* RT #127786: cv can be NULL due to an eval within the DB package
3871 * called from an anon sub - anon subs don't have CvOUTSIDE() set
3872 * unless they contain an eval, but calling eval within DB
3873 * pretends the eval was done in the caller's scope.
3877 assert(CvPADLIST(cv));
3879 PadlistNAMESARRAY(CvPADLIST(cv))[PARENT_PAD_INDEX(pn)];
3880 assert(PadnameLEN(pn));
3881 PadnameLVALUE_on(pn);
3886 S_vivifies(const OPCODE type)
3889 case OP_RV2AV: case OP_ASLICE:
3890 case OP_RV2HV: case OP_KVASLICE:
3891 case OP_RV2SV: case OP_HSLICE:
3892 case OP_AELEMFAST: case OP_KVHSLICE:
3901 S_lvref(pTHX_ OP *o, I32 type)
3905 switch (o->op_type) {
3907 for (kid = OpSIBLING(cUNOPo->op_first); kid;
3908 kid = OpSIBLING(kid))
3909 S_lvref(aTHX_ kid, type);
3914 if (cUNOPo->op_first->op_type != OP_GV) goto badref;
3915 o->op_flags |= OPf_STACKED;
3916 if (o->op_flags & OPf_PARENS) {
3917 if (o->op_private & OPpLVAL_INTRO) {
3918 yyerror(Perl_form(aTHX_ "Can't modify reference to "
3919 "localized parenthesized array in list assignment"));
3923 OpTYPE_set(o, OP_LVAVREF);
3924 o->op_private &= OPpLVAL_INTRO|OPpPAD_STATE;
3925 o->op_flags |= OPf_MOD|OPf_REF;
3928 o->op_private |= OPpLVREF_AV;
3931 kid = cUNOPo->op_first;
3932 if (kid->op_type == OP_NULL)
3933 kid = cUNOPx(OpSIBLING(kUNOP->op_first))
3935 o->op_private = OPpLVREF_CV;
3936 if (kid->op_type == OP_GV)
3937 o->op_flags |= OPf_STACKED;
3938 else if (kid->op_type == OP_PADCV) {
3939 o->op_targ = kid->op_targ;
3941 op_free(cUNOPo->op_first);
3942 cUNOPo->op_first = NULL;
3943 o->op_flags &=~ OPf_KIDS;
3948 if (o->op_flags & OPf_PARENS) {
3950 yyerror(Perl_form(aTHX_ "Can't modify reference to "
3951 "parenthesized hash in list assignment"));
3954 o->op_private |= OPpLVREF_HV;
3958 if (cUNOPo->op_first->op_type != OP_GV) goto badref;
3959 o->op_flags |= OPf_STACKED;
3962 if (o->op_flags & OPf_PARENS) goto parenhash;
3963 o->op_private |= OPpLVREF_HV;
3966 PAD_COMPNAME_GEN_set(o->op_targ, PERL_INT_MAX);
3969 PAD_COMPNAME_GEN_set(o->op_targ, PERL_INT_MAX);
3970 if (o->op_flags & OPf_PARENS) goto slurpy;
3971 o->op_private |= OPpLVREF_AV;
3975 o->op_private |= OPpLVREF_ELEM;
3976 o->op_flags |= OPf_STACKED;
3980 OpTYPE_set(o, OP_LVREFSLICE);
3981 o->op_private &= OPpLVAL_INTRO;
3984 if (o->op_flags & OPf_SPECIAL) /* do BLOCK */
3986 else if (!(o->op_flags & OPf_KIDS))
3988 if (o->op_targ != OP_LIST) {
3989 S_lvref(aTHX_ cBINOPo->op_first, type);
3994 for (kid = cLISTOPo->op_first; kid; kid = OpSIBLING(kid)) {
3995 assert((kid->op_flags & OPf_WANT) != OPf_WANT_VOID);
3996 S_lvref(aTHX_ kid, type);
4000 if (o->op_flags & OPf_PARENS)
4005 /* diag_listed_as: Can't modify reference to %s in %s assignment */
4006 yyerror(Perl_form(aTHX_ "Can't modify reference to %s in %s",
4007 o->op_type == OP_NULL && o->op_flags & OPf_SPECIAL
4013 OpTYPE_set(o, OP_LVREF);
4015 OPpLVAL_INTRO|OPpLVREF_ELEM|OPpLVREF_TYPE|OPpPAD_STATE;
4016 if (type == OP_ENTERLOOP)
4017 o->op_private |= OPpLVREF_ITER;
4020 PERL_STATIC_INLINE bool
4021 S_potential_mod_type(I32 type)
4023 /* Types that only potentially result in modification. */
4024 return type == OP_GREPSTART || type == OP_ENTERSUB
4025 || type == OP_REFGEN || type == OP_LEAVESUBLV;
4029 Perl_op_lvalue_flags(pTHX_ OP *o, I32 type, U32 flags)
4033 /* -1 = error on localize, 0 = ignore localize, 1 = ok to localize */
4036 if (!o || (PL_parser && PL_parser->error_count))
4039 if ((o->op_private & OPpTARGET_MY)
4040 && (PL_opargs[o->op_type] & OA_TARGLEX))/* OPp share the meaning */
4045 assert( (o->op_flags & OPf_WANT) != OPf_WANT_VOID );
4047 if (type == OP_PRTF || type == OP_SPRINTF) type = OP_ENTERSUB;
4049 switch (o->op_type) {
4054 if ((o->op_flags & OPf_PARENS))
4058 if ((type == OP_UNDEF || type == OP_REFGEN || type == OP_LOCK) &&
4059 !(o->op_flags & OPf_STACKED)) {
4060 OpTYPE_set(o, OP_RV2CV); /* entersub => rv2cv */
4061 assert(cUNOPo->op_first->op_type == OP_NULL);
4062 op_null(((LISTOP*)cUNOPo->op_first)->op_first);/* disable pushmark */
4065 else { /* lvalue subroutine call */
4066 o->op_private |= OPpLVAL_INTRO;
4067 PL_modcount = RETURN_UNLIMITED_NUMBER;
4068 if (S_potential_mod_type(type)) {
4069 o->op_private |= OPpENTERSUB_INARGS;
4072 else { /* Compile-time error message: */
4073 OP *kid = cUNOPo->op_first;
4078 if (kid->op_type != OP_PUSHMARK) {
4079 if (kid->op_type != OP_NULL || kid->op_targ != OP_LIST)
4081 "panic: unexpected lvalue entersub "
4082 "args: type/targ %ld:%" UVuf,
4083 (long)kid->op_type, (UV)kid->op_targ);
4084 kid = kLISTOP->op_first;
4086 while (OpHAS_SIBLING(kid))
4087 kid = OpSIBLING(kid);
4088 if (!(kid->op_type == OP_NULL && kid->op_targ == OP_RV2CV)) {
4089 break; /* Postpone until runtime */
4092 kid = kUNOP->op_first;
4093 if (kid->op_type == OP_NULL && kid->op_targ == OP_RV2SV)
4094 kid = kUNOP->op_first;
4095 if (kid->op_type == OP_NULL)
4097 "Unexpected constant lvalue entersub "
4098 "entry via type/targ %ld:%" UVuf,
4099 (long)kid->op_type, (UV)kid->op_targ);
4100 if (kid->op_type != OP_GV) {
4107 : SvROK(gv) && SvTYPE(SvRV(gv)) == SVt_PVCV
4108 ? MUTABLE_CV(SvRV(gv))
4114 if (flags & OP_LVALUE_NO_CROAK)
4117 namesv = cv_name(cv, NULL, 0);
4118 yyerror_pv(Perl_form(aTHX_ "Can't modify non-lvalue "
4119 "subroutine call of &%" SVf " in %s",
4120 SVfARG(namesv), PL_op_desc[type]),
4128 if (flags & OP_LVALUE_NO_CROAK) return NULL;
4129 /* grep, foreach, subcalls, refgen */
4130 if (S_potential_mod_type(type))
4132 yyerror(Perl_form(aTHX_ "Can't modify %s in %s",
4133 (o->op_type == OP_NULL && (o->op_flags & OPf_SPECIAL)
4136 type ? PL_op_desc[type] : "local"));
4149 case OP_RIGHT_SHIFT:
4158 if (!(o->op_flags & OPf_STACKED))
4164 if (o->op_flags & OPf_STACKED) {
4168 if (!(o->op_private & OPpREPEAT_DOLIST))
4171 const I32 mods = PL_modcount;
4172 modkids(cBINOPo->op_first, type);
4173 if (type != OP_AASSIGN)
4175 kid = cBINOPo->op_last;
4176 if (kid->op_type == OP_CONST && SvIOK(kSVOP_sv)) {
4177 const IV iv = SvIV(kSVOP_sv);
4178 if (PL_modcount != RETURN_UNLIMITED_NUMBER)
4180 mods + (PL_modcount - mods) * (iv < 0 ? 0 : iv);
4183 PL_modcount = RETURN_UNLIMITED_NUMBER;
4189 for (kid = OpSIBLING(cUNOPo->op_first); kid; kid = OpSIBLING(kid))
4190 op_lvalue(kid, type);
4195 if (type == OP_REFGEN && o->op_flags & OPf_PARENS) {
4196 PL_modcount = RETURN_UNLIMITED_NUMBER;
4197 /* Treat \(@foo) like ordinary list, but still mark it as modi-
4198 fiable since some contexts need to know. */
4199 o->op_flags |= OPf_MOD;
4204 if (scalar_mod_type(o, type))
4206 ref(cUNOPo->op_first, o->op_type);
4213 /* Do not apply the lvsub flag for rv2[ah]v in scalar context. */
4214 if (type == OP_LEAVESUBLV && (
4215 (o->op_type != OP_RV2AV && o->op_type != OP_RV2HV)
4216 || (o->op_flags & OPf_WANT) != OPf_WANT_SCALAR
4218 o->op_private |= OPpMAYBE_LVSUB;
4222 PL_modcount = RETURN_UNLIMITED_NUMBER;
4227 if (type == OP_LEAVESUBLV)
4228 o->op_private |= OPpMAYBE_LVSUB;
4231 if (type == OP_LEAVESUBLV
4232 && (o->op_private & OPpAVHVSWITCH_MASK) + OP_EACH == OP_KEYS)
4233 o->op_private |= OPpMAYBE_LVSUB;
4236 PL_hints |= HINT_BLOCK_SCOPE;
4237 if (type == OP_LEAVESUBLV)
4238 o->op_private |= OPpMAYBE_LVSUB;
4242 ref(cUNOPo->op_first, o->op_type);
4246 PL_hints |= HINT_BLOCK_SCOPE;
4256 case OP_AELEMFAST_LEX:
4263 PL_modcount = RETURN_UNLIMITED_NUMBER;
4264 if (type == OP_REFGEN && o->op_flags & OPf_PARENS)
4266 /* Treat \(@foo) like ordinary list, but still mark it as modi-
4267 fiable since some contexts need to know. */
4268 o->op_flags |= OPf_MOD;
4271 if (scalar_mod_type(o, type))
4273 if ((o->op_flags & OPf_WANT) != OPf_WANT_SCALAR
4274 && type == OP_LEAVESUBLV)
4275 o->op_private |= OPpMAYBE_LVSUB;
4279 if (!type) /* local() */
4280 Perl_croak(aTHX_ "Can't localize lexical variable %" PNf,
4281 PNfARG(PAD_COMPNAME(o->op_targ)));
4282 if (!(o->op_private & OPpLVAL_INTRO)
4283 || ( type != OP_SASSIGN && type != OP_AASSIGN
4284 && PadnameIsSTATE(PAD_COMPNAME_SV(o->op_targ)) ))
4285 S_mark_padname_lvalue(aTHX_ PAD_COMPNAME_SV(o->op_targ));
4293 if (type != OP_LEAVESUBLV && !scalar_mod_type(NULL, type))
4297 if (o->op_private == 4) /* don't allow 4 arg substr as lvalue */
4303 if (type == OP_LEAVESUBLV)
4304 o->op_private |= OPpMAYBE_LVSUB;
4305 if (o->op_flags & OPf_KIDS && OpHAS_SIBLING(cBINOPo->op_first)) {
4306 /* substr and vec */
4307 /* If this op is in merely potential (non-fatal) modifiable
4308 context, then apply OP_ENTERSUB context to
4309 the kid op (to avoid croaking). Other-
4310 wise pass this op’s own type so the correct op is mentioned
4311 in error messages. */
4312 op_lvalue(OpSIBLING(cBINOPo->op_first),
4313 S_potential_mod_type(type)
4321 ref(cBINOPo->op_first, o->op_type);
4322 if (type == OP_ENTERSUB &&
4323 !(o->op_private & (OPpLVAL_INTRO | OPpDEREF)))
4324 o->op_private |= OPpLVAL_DEFER;
4325 if (type == OP_LEAVESUBLV)
4326 o->op_private |= OPpMAYBE_LVSUB;
4333 o->op_private |= OPpLVALUE;
4339 if (o->op_flags & OPf_KIDS)
4340 op_lvalue(cLISTOPo->op_last, type);
4345 if (o->op_flags & OPf_SPECIAL) /* do BLOCK */
4347 else if (!(o->op_flags & OPf_KIDS))
4350 if (o->op_targ != OP_LIST) {
4351 OP *sib = OpSIBLING(cLISTOPo->op_first);
4352 /* OP_TRANS and OP_TRANSR with argument have a weird optree
4359 * compared with things like OP_MATCH which have the argument
4365 * so handle specially to correctly get "Can't modify" croaks etc
4368 if (sib && (sib->op_type == OP_TRANS || sib->op_type == OP_TRANSR))
4370 /* this should trigger a "Can't modify transliteration" err */
4371 op_lvalue(sib, type);
4373 op_lvalue(cBINOPo->op_first, type);
4379 for (kid = cLISTOPo->op_first; kid; kid = OpSIBLING(kid))
4380 /* elements might be in void context because the list is
4381 in scalar context or because they are attribute sub calls */
4382 if ( (kid->op_flags & OPf_WANT) != OPf_WANT_VOID )
4383 op_lvalue(kid, type);
4391 if (type == OP_LEAVESUBLV
4392 || !S_vivifies(cLOGOPo->op_first->op_type))
4393 op_lvalue(cLOGOPo->op_first, type);
4394 if (type == OP_LEAVESUBLV
4395 || !S_vivifies(OpSIBLING(cLOGOPo->op_first)->op_type))
4396 op_lvalue(OpSIBLING(cLOGOPo->op_first), type);
4400 if (type == OP_NULL) { /* local */
4402 if (!FEATURE_MYREF_IS_ENABLED)
4403 Perl_croak(aTHX_ "The experimental declared_refs "
4404 "feature is not enabled");
4405 Perl_ck_warner_d(aTHX_
4406 packWARN(WARN_EXPERIMENTAL__DECLARED_REFS),
4407 "Declaring references is experimental");
4408 op_lvalue(cUNOPo->op_first, OP_NULL);
4411 if (type != OP_AASSIGN && type != OP_SASSIGN
4412 && type != OP_ENTERLOOP)
4414 /* Don’t bother applying lvalue context to the ex-list. */
4415 kid = cUNOPx(cUNOPo->op_first)->op_first;
4416 assert (!OpHAS_SIBLING(kid));
4419 if (type == OP_NULL) /* local */
4421 if (type != OP_AASSIGN) goto nomod;
4422 kid = cUNOPo->op_first;
4425 const U8 ec = PL_parser ? PL_parser->error_count : 0;
4426 S_lvref(aTHX_ kid, type);
4427 if (!PL_parser || PL_parser->error_count == ec) {
4428 if (!FEATURE_REFALIASING_IS_ENABLED)
4430 "Experimental aliasing via reference not enabled");
4431 Perl_ck_warner_d(aTHX_
4432 packWARN(WARN_EXPERIMENTAL__REFALIASING),
4433 "Aliasing via reference is experimental");
4436 if (o->op_type == OP_REFGEN)
4437 op_null(cUNOPx(cUNOPo->op_first)->op_first); /* pushmark */
4442 if ((o->op_private & OPpSPLIT_ASSIGN)) {
4443 /* This is actually @array = split. */
4444 PL_modcount = RETURN_UNLIMITED_NUMBER;
4450 op_lvalue(cUNOPo->op_first, OP_ENTERSUB);
4454 /* [20011101.069 (#7861)] File test operators interpret OPf_REF to mean that
4455 their argument is a filehandle; thus \stat(".") should not set
4457 if (type == OP_REFGEN && OP_IS_STAT(o->op_type))
4460 if (type != OP_LEAVESUBLV)
4461 o->op_flags |= OPf_MOD;
4463 if (type == OP_AASSIGN || type == OP_SASSIGN)
4464 o->op_flags |= OPf_SPECIAL
4465 |(o->op_type == OP_ENTERSUB ? 0 : OPf_REF);
4466 else if (!type) { /* local() */
4469 o->op_private |= OPpLVAL_INTRO;
4470 o->op_flags &= ~OPf_SPECIAL;
4471 PL_hints |= HINT_BLOCK_SCOPE;
4476 Perl_ck_warner(aTHX_ packWARN(WARN_SYNTAX),
4477 "Useless localization of %s", OP_DESC(o));
4480 else if (type != OP_GREPSTART && type != OP_ENTERSUB
4481 && type != OP_LEAVESUBLV && o->op_type != OP_ENTERSUB)
4482 o->op_flags |= OPf_REF;
4487 S_scalar_mod_type(const OP *o, I32 type)
4492 if (o && o->op_type == OP_RV2GV)
4516 case OP_RIGHT_SHIFT:
4545 S_is_handle_constructor(const OP *o, I32 numargs)
4547 PERL_ARGS_ASSERT_IS_HANDLE_CONSTRUCTOR;
4549 switch (o->op_type) {
4557 case OP_SELECT: /* XXX c.f. SelectSaver.pm */
4570 S_refkids(pTHX_ OP *o, I32 type)
4572 if (o && o->op_flags & OPf_KIDS) {
4574 for (kid = cLISTOPo->op_first; kid; kid = OpSIBLING(kid))
4581 Perl_doref(pTHX_ OP *o, I32 type, bool set_op_ref)
4586 PERL_ARGS_ASSERT_DOREF;
4588 if (PL_parser && PL_parser->error_count)
4591 switch (o->op_type) {
4593 if ((type == OP_EXISTS || type == OP_DEFINED) &&
4594 !(o->op_flags & OPf_STACKED)) {
4595 OpTYPE_set(o, OP_RV2CV); /* entersub => rv2cv */
4596 assert(cUNOPo->op_first->op_type == OP_NULL);
4597 op_null(((LISTOP*)cUNOPo->op_first)->op_first); /* disable pushmark */
4598 o->op_flags |= OPf_SPECIAL;
4600 else if (type == OP_RV2SV || type == OP_RV2AV || type == OP_RV2HV){
4601 o->op_private |= (type == OP_RV2AV ? OPpDEREF_AV
4602 : type == OP_RV2HV ? OPpDEREF_HV
4604 o->op_flags |= OPf_MOD;
4610 for (kid = OpSIBLING(cUNOPo->op_first); kid; kid = OpSIBLING(kid))
4611 doref(kid, type, set_op_ref);
4614 if (type == OP_DEFINED)
4615 o->op_flags |= OPf_SPECIAL; /* don't create GV */
4616 doref(cUNOPo->op_first, o->op_type, set_op_ref);
4619 if (type == OP_RV2SV || type == OP_RV2AV || type == OP_RV2HV) {
4620 o->op_private |= (type == OP_RV2AV ? OPpDEREF_AV
4621 : type == OP_RV2HV ? OPpDEREF_HV
4623 o->op_flags |= OPf_MOD;
4630 o->op_flags |= OPf_REF;
4633 if (type == OP_DEFINED)
4634 o->op_flags |= OPf_SPECIAL; /* don't create GV */
4635 doref(cUNOPo->op_first, o->op_type, set_op_ref);
4641 o->op_flags |= OPf_REF;
4646 if (!(o->op_flags & OPf_KIDS) || type == OP_DEFINED)
4648 doref(cBINOPo->op_first, type, set_op_ref);
4652 doref(cBINOPo->op_first, o->op_type, set_op_ref);
4653 if (type == OP_RV2SV || type == OP_RV2AV || type == OP_RV2HV) {
4654 o->op_private |= (type == OP_RV2AV ? OPpDEREF_AV
4655 : type == OP_RV2HV ? OPpDEREF_HV
4657 o->op_flags |= OPf_MOD;
4667 if (!(o->op_flags & OPf_KIDS))
4669 doref(cLISTOPo->op_last, type, set_op_ref);
4679 S_dup_attrlist(pTHX_ OP *o)
4683 PERL_ARGS_ASSERT_DUP_ATTRLIST;
4685 /* An attrlist is either a simple OP_CONST or an OP_LIST with kids,
4686 * where the first kid is OP_PUSHMARK and the remaining ones
4687 * are OP_CONST. We need to push the OP_CONST values.
4689 if (o->op_type == OP_CONST)
4690 rop = newSVOP(OP_CONST, o->op_flags, SvREFCNT_inc_NN(cSVOPo->op_sv));
4692 assert((o->op_type == OP_LIST) && (o->op_flags & OPf_KIDS));
4694 for (o = cLISTOPo->op_first; o; o = OpSIBLING(o)) {
4695 if (o->op_type == OP_CONST)
4696 rop = op_append_elem(OP_LIST, rop,
4697 newSVOP(OP_CONST, o->op_flags,
4698 SvREFCNT_inc_NN(cSVOPo->op_sv)));
4705 S_apply_attrs(pTHX_ HV *stash, SV *target, OP *attrs)
4707 PERL_ARGS_ASSERT_APPLY_ATTRS;
4709 SV * const stashsv = newSVhek(HvNAME_HEK(stash));
4711 /* fake up C<use attributes $pkg,$rv,@attrs> */
4713 #define ATTRSMODULE "attributes"
4714 #define ATTRSMODULE_PM "attributes.pm"
4717 aTHX_ PERL_LOADMOD_IMPORT_OPS,
4718 newSVpvs(ATTRSMODULE),
4720 op_prepend_elem(OP_LIST,
4721 newSVOP(OP_CONST, 0, stashsv),
4722 op_prepend_elem(OP_LIST,
4723 newSVOP(OP_CONST, 0,
4725 dup_attrlist(attrs))));
4730 S_apply_attrs_my(pTHX_ HV *stash, OP *target,