4 * Copyright (C) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
5 * 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 by Larry Wall and others
7 * You may distribute under the terms of either the GNU General Public
8 * License or the Artistic License, as specified in the README file.
13 * 'You see: Mr. Drogo, he married poor Miss Primula Brandybuck. She was
14 * our Mr. Bilbo's first cousin on the mother's side (her mother being the
15 * youngest of the Old Took's daughters); and Mr. Drogo was his second
16 * cousin. So Mr. Frodo is his first *and* second cousin, once removed
17 * either way, as the saying is, if you follow me.' --the Gaffer
19 * [p.23 of _The Lord of the Rings_, I/i: "A Long-Expected Party"]
22 /* This file contains the functions that create, manipulate and optimize
23 * the OP structures that hold a compiled perl program.
25 * Note that during the build of miniperl, a temporary copy of this file
26 * is made, called opmini.c.
28 * A Perl program is compiled into a tree of OP nodes. Each op contains:
29 * * structural OP pointers to its children and siblings (op_sibling,
30 * op_first etc) that define the tree structure;
31 * * execution order OP pointers (op_next, plus sometimes op_other,
32 * op_lastop etc) that define the execution sequence plus variants;
33 * * a pointer to the C "pp" function that would execute the op;
34 * * any data specific to that op.
35 * For example, an OP_CONST op points to the pp_const() function and to an
36 * SV containing the constant value. When pp_const() is executed, its job
37 * is to push that SV onto the stack.
39 * OPs are mainly created by the newFOO() functions, which are mainly
40 * called from the parser (in perly.y) as the code is parsed. For example
41 * the Perl code $a + $b * $c would cause the equivalent of the following
42 * to be called (oversimplifying a bit):
44 * newBINOP(OP_ADD, flags,
46 * newBINOP(OP_MULTIPLY, flags, newSVREF($b), newSVREF($c))
49 * As the parser reduces low-level rules, it creates little op subtrees;
50 * as higher-level rules are resolved, these subtrees get joined together
51 * as branches on a bigger subtree, until eventually a top-level rule like
52 * a subroutine definition is reduced, at which point there is one large
55 * The execution order pointers (op_next) are generated as the subtrees
56 * are joined together. Consider this sub-expression: A*B + C/D: at the
57 * point when it's just been parsed, the op tree looks like:
65 * with the intended execution order being:
67 * [PREV] => A => B => [*] => C => D => [/] => [+] => [NEXT]
69 * At this point all the nodes' op_next pointers will have been set,
71 * * we don't know what the [NEXT] node will be yet;
72 * * we don't know what the [PREV] node will be yet, but when it gets
73 * created and needs its op_next set, it needs to be set to point to
74 * A, which is non-obvious.
75 * To handle both those cases, we temporarily set the top node's
76 * op_next to point to the first node to be executed in this subtree (A in
77 * this case). This means that initially a subtree's op_next chain,
78 * starting from the top node, will visit each node in execution sequence
79 * then point back at the top node.
80 * When we embed this subtree in a larger tree, its top op_next is used
81 * to get the start node, then is set to point to its new neighbour.
82 * For example the two separate [*],A,B and [/],C,D subtrees would
84 * [*] => A; A => B; B => [*]
86 * [/] => C; C => D; D => [/]
87 * When these two subtrees were joined together to make the [+] subtree,
88 * [+]'s op_next was set to [*]'s op_next, i.e. A; then [*]'s op_next was
89 * set to point to [/]'s op_next, i.e. C.
91 * This op_next linking is done by the LINKLIST() macro and its underlying
92 * op_linklist() function. Given a top-level op, if its op_next is
93 * non-null, it's already been linked, so leave it. Otherwise link it with
94 * its children as described above, possibly recursively if any of the
95 * children have a null op_next.
97 * In summary: given a subtree, its top-level node's op_next will either
99 * NULL: the subtree hasn't been LINKLIST()ed yet;
100 * fake: points to the start op for this subtree;
101 * real: once the subtree has been embedded into a larger tree
106 Here's an older description from Larry.
108 Perl's compiler is essentially a 3-pass compiler with interleaved phases:
112 An execution-order pass
114 The bottom-up pass is represented by all the "newOP" routines and
115 the ck_ routines. The bottom-upness is actually driven by yacc.
116 So at the point that a ck_ routine fires, we have no idea what the
117 context is, either upward in the syntax tree, or either forward or
118 backward in the execution order. (The bottom-up parser builds that
119 part of the execution order it knows about, but if you follow the "next"
120 links around, you'll find it's actually a closed loop through the
123 Whenever the bottom-up parser gets to a node that supplies context to
124 its components, it invokes that portion of the top-down pass that applies
125 to that part of the subtree (and marks the top node as processed, so
126 if a node further up supplies context, it doesn't have to take the
127 plunge again). As a particular subcase of this, as the new node is
128 built, it takes all the closed execution loops of its subcomponents
129 and links them into a new closed loop for the higher level node. But
130 it's still not the real execution order.
132 The actual execution order is not known till we get a grammar reduction
133 to a top-level unit like a subroutine or file that will be called by
134 "name" rather than via a "next" pointer. At that point, we can call
135 into peep() to do that code's portion of the 3rd pass. It has to be
136 recursive, but it's recursive on basic blocks, not on tree nodes.
139 /* To implement user lexical pragmas, there needs to be a way at run time to
140 get the compile time state of %^H for that block. Storing %^H in every
141 block (or even COP) would be very expensive, so a different approach is
142 taken. The (running) state of %^H is serialised into a tree of HE-like
143 structs. Stores into %^H are chained onto the current leaf as a struct
144 refcounted_he * with the key and the value. Deletes from %^H are saved
145 with a value of PL_sv_placeholder. The state of %^H at any point can be
146 turned back into a regular HV by walking back up the tree from that point's
147 leaf, ignoring any key you've already seen (placeholder or not), storing
148 the rest into the HV structure, then removing the placeholders. Hence
149 memory is only used to store the %^H deltas from the enclosing COP, rather
150 than the entire %^H on each COP.
152 To cause actions on %^H to write out the serialisation records, it has
153 magic type 'H'. This magic (itself) does nothing, but its presence causes
154 the values to gain magic type 'h', which has entries for set and clear.
155 C<Perl_magic_sethint> updates C<PL_compiling.cop_hints_hash> with a store
156 record, with deletes written by C<Perl_magic_clearhint>. C<SAVEHINTS>
157 saves the current C<PL_compiling.cop_hints_hash> on the save stack, so that
158 it will be correctly restored when any inner compiling scope is exited.
164 #include "keywords.h"
168 #define CALL_PEEP(o) PL_peepp(aTHX_ o)
169 #define CALL_RPEEP(o) PL_rpeepp(aTHX_ o)
170 #define CALL_OPFREEHOOK(o) if (PL_opfreehook) PL_opfreehook(aTHX_ o)
172 static const char array_passed_to_stat[] = "Array passed to stat will be coerced to a scalar";
174 /* remove any leading "empty" ops from the op_next chain whose first
175 * node's address is stored in op_p. Store the updated address of the
176 * first node in op_p.
180 S_prune_chain_head(OP** op_p)
183 && ( (*op_p)->op_type == OP_NULL
184 || (*op_p)->op_type == OP_SCOPE
185 || (*op_p)->op_type == OP_SCALAR
186 || (*op_p)->op_type == OP_LINESEQ)
188 *op_p = (*op_p)->op_next;
192 /* See the explanatory comments above struct opslab in op.h. */
194 #ifdef PERL_DEBUG_READONLY_OPS
195 # define PERL_SLAB_SIZE 128
196 # define PERL_MAX_SLAB_SIZE 4096
197 # include <sys/mman.h>
200 #ifndef PERL_SLAB_SIZE
201 # define PERL_SLAB_SIZE 64
203 #ifndef PERL_MAX_SLAB_SIZE
204 # define PERL_MAX_SLAB_SIZE 2048
207 /* rounds up to nearest pointer */
208 #define SIZE_TO_PSIZE(x) (((x) + sizeof(I32 *) - 1)/sizeof(I32 *))
209 #define DIFF(o,p) ((size_t)((I32 **)(p) - (I32**)(o)))
211 /* requires double parens and aTHX_ */
212 #define DEBUG_S_warn(args) \
214 PerlIO_printf(Perl_debug_log, "%s", SvPVx_nolen(Perl_mess args)) \
218 /* malloc a new op slab (suitable for attaching to PL_compcv).
219 * sz is in units of pointers */
222 S_new_slab(pTHX_ OPSLAB *head, size_t sz)
226 /* opslot_offset is only U16 */
227 assert(sz < U16_MAX);
229 #ifdef PERL_DEBUG_READONLY_OPS
230 slab = (OPSLAB *) mmap(0, sz * sizeof(I32 *),
231 PROT_READ|PROT_WRITE,
232 MAP_ANON|MAP_PRIVATE, -1, 0);
233 DEBUG_m(PerlIO_printf(Perl_debug_log, "mapped %lu at %p\n",
234 (unsigned long) sz, slab));
235 if (slab == MAP_FAILED) {
236 perror("mmap failed");
240 slab = (OPSLAB *)PerlMemShared_calloc(sz, sizeof(I32 *));
242 slab->opslab_size = (U16)sz;
245 /* The context is unused in non-Windows */
248 slab->opslab_free_space = sz - DIFF(slab, &slab->opslab_slots);
249 slab->opslab_head = head ? head : slab;
250 DEBUG_S_warn((aTHX_ "allocated new op slab sz 0x%x, %p, head slab %p",
251 (unsigned int)slab->opslab_size, (void*)slab,
252 (void*)(slab->opslab_head)));
257 /* Returns a sz-sized block of memory (suitable for holding an op) from
258 * a free slot in the chain of op slabs attached to PL_compcv.
259 * Allocates a new slab if necessary.
260 * if PL_compcv isn't compiling, malloc() instead.
264 Perl_Slab_Alloc(pTHX_ size_t sz)
266 OPSLAB *head_slab; /* first slab in the chain */
272 /* We only allocate ops from the slab during subroutine compilation.
273 We find the slab via PL_compcv, hence that must be non-NULL. It could
274 also be pointing to a subroutine which is now fully set up (CvROOT()
275 pointing to the top of the optree for that sub), or a subroutine
276 which isn't using the slab allocator. If our sanity checks aren't met,
277 don't use a slab, but allocate the OP directly from the heap. */
278 if (!PL_compcv || CvROOT(PL_compcv)
279 || (CvSTART(PL_compcv) && !CvSLABBED(PL_compcv)))
281 o = (OP*)PerlMemShared_calloc(1, sz);
285 /* While the subroutine is under construction, the slabs are accessed via
286 CvSTART(), to avoid needing to expand PVCV by one pointer for something
287 unneeded at runtime. Once a subroutine is constructed, the slabs are
288 accessed via CvROOT(). So if CvSTART() is NULL, no slab has been
289 allocated yet. See the commit message for 8be227ab5eaa23f2 for more
291 if (!CvSTART(PL_compcv)) {
293 (OP *)(head_slab = S_new_slab(aTHX_ NULL, PERL_SLAB_SIZE));
294 CvSLABBED_on(PL_compcv);
295 head_slab->opslab_refcnt = 2; /* one for the CV; one for the new OP */
297 else ++(head_slab = (OPSLAB *)CvSTART(PL_compcv))->opslab_refcnt;
299 opsz = SIZE_TO_PSIZE(sz);
300 sz = opsz + OPSLOT_HEADER_P;
302 /* The slabs maintain a free list of OPs. In particular, constant folding
303 will free up OPs, so it makes sense to re-use them where possible. A
304 freed up slot is used in preference to a new allocation. */
305 if (head_slab->opslab_freed) {
306 OP **too = &head_slab->opslab_freed;
308 DEBUG_S_warn((aTHX_ "found free op at %p, slab %p, head slab %p",
310 (I32**)OpSLOT(o) - OpSLOT(o)->opslot_offset,
313 while (o && DIFF(OpSLOT(o), OpSLOT(o)->opslot_next) < sz) {
314 DEBUG_S_warn((aTHX_ "Alas! too small"));
315 o = *(too = &o->op_next);
316 if (o) { DEBUG_S_warn((aTHX_ "found another free op at %p", (void*)o)); }
320 Zero(o, opsz, I32 *);
326 #define INIT_OPSLOT(s) \
327 slot->opslot_offset = DIFF(slab2, slot) ; \
328 slot->opslot_next = ((OPSLOT*)( (I32**)slot + s )); \
329 slab2->opslab_free_space -= s; \
330 o = &slot->opslot_op; \
333 /* The partially-filled slab is next in the chain. */
334 slab2 = head_slab->opslab_next ? head_slab->opslab_next : head_slab;
335 if (slab2->opslab_free_space < sz) {
336 /* Remaining space is too small. */
337 /* If we can fit a BASEOP, add it to the free chain, so as not
339 if (slab2->opslab_free_space >= SIZE_TO_PSIZE(sizeof(OP)) + OPSLOT_HEADER_P) {
340 slot = &slab2->opslab_slots;
341 INIT_OPSLOT(slab2->opslab_free_space);
342 o->op_type = OP_FREED;
343 o->op_next = head_slab->opslab_freed;
344 head_slab->opslab_freed = o;
347 /* Create a new slab. Make this one twice as big. */
348 slab2 = S_new_slab(aTHX_ head_slab,
349 slab2->opslab_size > PERL_MAX_SLAB_SIZE / 2
351 : slab2->opslab_size * 2);
352 slab2->opslab_next = head_slab->opslab_next;
353 head_slab->opslab_next = slab2;
355 assert(slab2->opslab_size >= sz);
357 /* Create a new op slot */
359 ((I32 **)&slab2->opslab_slots
360 + slab2->opslab_free_space - sz);
361 assert(slot >= &slab2->opslab_slots);
363 DEBUG_S_warn((aTHX_ "allocating op at %p, slab %p, head slab %p",
364 (void*)o, (void*)slab2, (void*)head_slab));
367 /* moresib == 0, op_sibling == 0 implies a solitary unattached op */
368 assert(!o->op_moresib);
369 assert(!o->op_sibparent);
376 #ifdef PERL_DEBUG_READONLY_OPS
378 Perl_Slab_to_ro(pTHX_ OPSLAB *slab)
380 PERL_ARGS_ASSERT_SLAB_TO_RO;
382 if (slab->opslab_readonly) return;
383 slab->opslab_readonly = 1;
384 for (; slab; slab = slab->opslab_next) {
385 /*DEBUG_U(PerlIO_printf(Perl_debug_log,"mprotect ->ro %lu at %p\n",
386 (unsigned long) slab->opslab_size, slab));*/
387 if (mprotect(slab, slab->opslab_size * sizeof(I32 *), PROT_READ))
388 Perl_warn(aTHX_ "mprotect for %p %lu failed with %d", slab,
389 (unsigned long)slab->opslab_size, errno);
394 Perl_Slab_to_rw(pTHX_ OPSLAB *const slab)
398 PERL_ARGS_ASSERT_SLAB_TO_RW;
400 if (!slab->opslab_readonly) return;
402 for (; slab2; slab2 = slab2->opslab_next) {
403 /*DEBUG_U(PerlIO_printf(Perl_debug_log,"mprotect ->rw %lu at %p\n",
404 (unsigned long) size, slab2));*/
405 if (mprotect((void *)slab2, slab2->opslab_size * sizeof(I32 *),
406 PROT_READ|PROT_WRITE)) {
407 Perl_warn(aTHX_ "mprotect RW for %p %lu failed with %d", slab,
408 (unsigned long)slab2->opslab_size, errno);
411 slab->opslab_readonly = 0;
415 # define Slab_to_rw(op) NOOP
418 /* This cannot possibly be right, but it was copied from the old slab
419 allocator, to which it was originally added, without explanation, in
422 # define PerlMemShared PerlMem
425 /* make freed ops die if they're inadvertently executed */
430 DIE(aTHX_ "panic: freed op 0x%p called\n", PL_op);
435 /* Return the block of memory used by an op to the free list of
436 * the OP slab associated with that op.
440 Perl_Slab_Free(pTHX_ void *op)
442 OP * const o = (OP *)op;
445 PERL_ARGS_ASSERT_SLAB_FREE;
448 o->op_ppaddr = S_pp_freed;
451 if (!o->op_slabbed) {
453 PerlMemShared_free(op);
458 /* If this op is already freed, our refcount will get screwy. */
459 assert(o->op_type != OP_FREED);
460 o->op_type = OP_FREED;
461 o->op_next = slab->opslab_freed;
462 slab->opslab_freed = o;
463 DEBUG_S_warn((aTHX_ "freeing op at %p, slab %p, head slab %p",
465 (I32**)OpSLOT(o) - OpSLOT(o)->opslot_offset,
467 OpslabREFCNT_dec_padok(slab);
471 Perl_opslab_free_nopad(pTHX_ OPSLAB *slab)
473 const bool havepad = !!PL_comppad;
474 PERL_ARGS_ASSERT_OPSLAB_FREE_NOPAD;
477 PAD_SAVE_SETNULLPAD();
483 /* Free a chain of OP slabs. Should only be called after all ops contained
484 * in it have been freed. At this point, its reference count should be 1,
485 * because OpslabREFCNT_dec() skips doing rc-- when it detects that rc == 1,
486 * and just directly calls opslab_free().
487 * (Note that the reference count which PL_compcv held on the slab should
488 * have been removed once compilation of the sub was complete).
494 Perl_opslab_free(pTHX_ OPSLAB *slab)
497 PERL_ARGS_ASSERT_OPSLAB_FREE;
499 DEBUG_S_warn((aTHX_ "freeing slab %p", (void*)slab));
500 assert(slab->opslab_refcnt == 1);
502 slab2 = slab->opslab_next;
504 slab->opslab_refcnt = ~(size_t)0;
506 #ifdef PERL_DEBUG_READONLY_OPS
507 DEBUG_m(PerlIO_printf(Perl_debug_log, "Deallocate slab at %p\n",
509 if (munmap(slab, slab->opslab_size * sizeof(I32 *))) {
510 perror("munmap failed");
514 PerlMemShared_free(slab);
520 /* like opslab_free(), but first calls op_free() on any ops in the slab
521 * not marked as OP_FREED
525 Perl_opslab_force_free(pTHX_ OPSLAB *slab)
529 size_t savestack_count = 0;
531 PERL_ARGS_ASSERT_OPSLAB_FORCE_FREE;
534 OPSLOT *slot = (OPSLOT*)
535 ((I32**)&slab2->opslab_slots + slab2->opslab_free_space);
536 OPSLOT *end = (OPSLOT*)
537 ((I32**)slab2 + slab2->opslab_size);
538 for (; slot <= end -1; slot = slot->opslot_next) {
539 if (slot->opslot_op.op_type != OP_FREED
540 && !(slot->opslot_op.op_savefree
546 assert(slot->opslot_op.op_slabbed);
547 op_free(&slot->opslot_op);
548 if (slab->opslab_refcnt == 1) goto free;
551 } while ((slab2 = slab2->opslab_next));
552 /* > 1 because the CV still holds a reference count. */
553 if (slab->opslab_refcnt > 1) { /* still referenced by the savestack */
555 assert(savestack_count == slab->opslab_refcnt-1);
557 /* Remove the CV’s reference count. */
558 slab->opslab_refcnt--;
565 #ifdef PERL_DEBUG_READONLY_OPS
567 Perl_op_refcnt_inc(pTHX_ OP *o)
570 OPSLAB *const slab = o->op_slabbed ? OpSLAB(o) : NULL;
571 if (slab && slab->opslab_readonly) {
584 Perl_op_refcnt_dec(pTHX_ OP *o)
587 OPSLAB *const slab = o->op_slabbed ? OpSLAB(o) : NULL;
589 PERL_ARGS_ASSERT_OP_REFCNT_DEC;
591 if (slab && slab->opslab_readonly) {
593 result = --o->op_targ;
596 result = --o->op_targ;
602 * In the following definition, the ", (OP*)0" is just to make the compiler
603 * think the expression is of the right type: croak actually does a Siglongjmp.
605 #define CHECKOP(type,o) \
606 ((PL_op_mask && PL_op_mask[type]) \
607 ? ( op_free((OP*)o), \
608 Perl_croak(aTHX_ "'%s' trapped by operation mask", PL_op_desc[type]), \
610 : PL_check[type](aTHX_ (OP*)o))
612 #define RETURN_UNLIMITED_NUMBER (PERL_INT_MAX / 2)
614 #define OpTYPE_set(o,type) \
616 o->op_type = (OPCODE)type; \
617 o->op_ppaddr = PL_ppaddr[type]; \
621 S_no_fh_allowed(pTHX_ OP *o)
623 PERL_ARGS_ASSERT_NO_FH_ALLOWED;
625 yyerror(Perl_form(aTHX_ "Missing comma after first argument to %s function",
631 S_too_few_arguments_pv(pTHX_ OP *o, const char* name, U32 flags)
633 PERL_ARGS_ASSERT_TOO_FEW_ARGUMENTS_PV;
634 yyerror_pv(Perl_form(aTHX_ "Not enough arguments for %s", name), flags);
639 S_too_many_arguments_pv(pTHX_ OP *o, const char *name, U32 flags)
641 PERL_ARGS_ASSERT_TOO_MANY_ARGUMENTS_PV;
643 yyerror_pv(Perl_form(aTHX_ "Too many arguments for %s", name), flags);
648 S_bad_type_pv(pTHX_ I32 n, const char *t, const OP *o, const OP *kid)
650 PERL_ARGS_ASSERT_BAD_TYPE_PV;
652 yyerror_pv(Perl_form(aTHX_ "Type of arg %d to %s must be %s (not %s)",
653 (int)n, PL_op_desc[(o)->op_type], t, OP_DESC(kid)), 0);
656 /* remove flags var, its unused in all callers, move to to right end since gv
657 and kid are always the same */
659 S_bad_type_gv(pTHX_ I32 n, GV *gv, const OP *kid, const char *t)
661 SV * const namesv = cv_name((CV *)gv, NULL, 0);
662 PERL_ARGS_ASSERT_BAD_TYPE_GV;
664 yyerror_pv(Perl_form(aTHX_ "Type of arg %d to %" SVf " must be %s (not %s)",
665 (int)n, SVfARG(namesv), t, OP_DESC(kid)), SvUTF8(namesv));
669 S_no_bareword_allowed(pTHX_ OP *o)
671 PERL_ARGS_ASSERT_NO_BAREWORD_ALLOWED;
673 qerror(Perl_mess(aTHX_
674 "Bareword \"%" SVf "\" not allowed while \"strict subs\" in use",
676 o->op_private &= ~OPpCONST_STRICT; /* prevent warning twice about the same OP */
679 /* "register" allocation */
682 Perl_allocmy(pTHX_ const char *const name, const STRLEN len, const U32 flags)
685 const bool is_our = (PL_parser->in_my == KEY_our);
687 PERL_ARGS_ASSERT_ALLOCMY;
689 if (flags & ~SVf_UTF8)
690 Perl_croak(aTHX_ "panic: allocmy illegal flag bits 0x%" UVxf,
693 /* complain about "my $<special_var>" etc etc */
697 || ( (flags & SVf_UTF8)
698 && isIDFIRST_utf8_safe((U8 *)name+1, name + len))
699 || (name[1] == '_' && len > 2)))
701 if (!(flags & SVf_UTF8 && UTF8_IS_START(name[1]))
703 && (!isPRINT(name[1]) || strchr("\t\n\r\f", name[1]))) {
704 /* diag_listed_as: Can't use global %s in "%s" */
705 yyerror(Perl_form(aTHX_ "Can't use global %c^%c%.*s in \"%s\"",
706 name[0], toCTRL(name[1]), (int)(len - 2), name + 2,
707 PL_parser->in_my == KEY_state ? "state" : "my"));
709 yyerror_pv(Perl_form(aTHX_ "Can't use global %.*s in \"%s\"", (int) len, name,
710 PL_parser->in_my == KEY_state ? "state" : "my"), flags & SVf_UTF8);
714 /* allocate a spare slot and store the name in that slot */
716 off = pad_add_name_pvn(name, len,
717 (is_our ? padadd_OUR :
718 PL_parser->in_my == KEY_state ? padadd_STATE : 0),
719 PL_parser->in_my_stash,
721 /* $_ is always in main::, even with our */
722 ? (PL_curstash && !memEQs(name,len,"$_")
728 /* anon sub prototypes contains state vars should always be cloned,
729 * otherwise the state var would be shared between anon subs */
731 if (PL_parser->in_my == KEY_state && CvANON(PL_compcv))
732 CvCLONE_on(PL_compcv);
738 =head1 Optree Manipulation Functions
740 =for apidoc alloccopstash
742 Available only under threaded builds, this function allocates an entry in
743 C<PL_stashpad> for the stash passed to it.
750 Perl_alloccopstash(pTHX_ HV *hv)
752 PADOFFSET off = 0, o = 1;
753 bool found_slot = FALSE;
755 PERL_ARGS_ASSERT_ALLOCCOPSTASH;
757 if (PL_stashpad[PL_stashpadix] == hv) return PL_stashpadix;
759 for (; o < PL_stashpadmax; ++o) {
760 if (PL_stashpad[o] == hv) return PL_stashpadix = o;
761 if (!PL_stashpad[o] || SvTYPE(PL_stashpad[o]) != SVt_PVHV)
762 found_slot = TRUE, off = o;
765 Renew(PL_stashpad, PL_stashpadmax + 10, HV *);
766 Zero(PL_stashpad + PL_stashpadmax, 10, HV *);
767 off = PL_stashpadmax;
768 PL_stashpadmax += 10;
771 PL_stashpad[PL_stashpadix = off] = hv;
776 /* free the body of an op without examining its contents.
777 * Always use this rather than FreeOp directly */
780 S_op_destroy(pTHX_ OP *o)
790 Free an op and its children. Only use this when an op is no longer linked
797 Perl_op_free(pTHX_ OP *o)
803 bool went_up = FALSE; /* whether we reached the current node by
804 following the parent pointer from a child, and
805 so have already seen this node */
807 if (!o || o->op_type == OP_FREED)
810 if (o->op_private & OPpREFCOUNTED) {
811 /* if base of tree is refcounted, just decrement */
812 switch (o->op_type) {
822 refcnt = OpREFCNT_dec(o);
825 /* Need to find and remove any pattern match ops from
826 * the list we maintain for reset(). */
827 find_and_forget_pmops(o);
840 /* free child ops before ourself, (then free ourself "on the
843 if (!went_up && o->op_flags & OPf_KIDS) {
844 next_op = cUNOPo->op_first;
848 /* find the next node to visit, *then* free the current node
849 * (can't rely on o->op_* fields being valid after o has been
852 /* The next node to visit will be either the sibling, or the
853 * parent if no siblings left, or NULL if we've worked our way
854 * back up to the top node in the tree */
855 next_op = (o == top_op) ? NULL : o->op_sibparent;
856 went_up = cBOOL(!OpHAS_SIBLING(o)); /* parents are already visited */
858 /* Now process the current node */
860 /* Though ops may be freed twice, freeing the op after its slab is a
862 assert(!o->op_slabbed || OpSLAB(o)->opslab_refcnt != ~(size_t)0);
863 /* During the forced freeing of ops after compilation failure, kidops
864 may be freed before their parents. */
865 if (!o || o->op_type == OP_FREED)
870 /* an op should only ever acquire op_private flags that we know about.
871 * If this fails, you may need to fix something in regen/op_private.
872 * Don't bother testing if:
873 * * the op_ppaddr doesn't match the op; someone may have
874 * overridden the op and be doing strange things with it;
875 * * we've errored, as op flags are often left in an
876 * inconsistent state then. Note that an error when
877 * compiling the main program leaves PL_parser NULL, so
878 * we can't spot faults in the main code, only
879 * evaled/required code */
881 if ( o->op_ppaddr == PL_ppaddr[type]
883 && !PL_parser->error_count)
885 assert(!(o->op_private & ~PL_op_private_valid[type]));
890 /* Call the op_free hook if it has been set. Do it now so that it's called
891 * at the right time for refcounted ops, but still before all of the kids
896 type = (OPCODE)o->op_targ;
899 Slab_to_rw(OpSLAB(o));
901 /* COP* is not cleared by op_clear() so that we may track line
902 * numbers etc even after null() */
903 if (type == OP_NEXTSTATE || type == OP_DBSTATE) {
915 /* S_op_clear_gv(): free a GV attached to an OP */
919 void S_op_clear_gv(pTHX_ OP *o, PADOFFSET *ixp)
921 void S_op_clear_gv(pTHX_ OP *o, SV**svp)
925 GV *gv = (o->op_type == OP_GV || o->op_type == OP_GVSV
926 || o->op_type == OP_MULTIDEREF)
929 ? ((GV*)PAD_SVl(*ixp)) : NULL;
931 ? (GV*)(*svp) : NULL;
933 /* It's possible during global destruction that the GV is freed
934 before the optree. Whilst the SvREFCNT_inc is happy to bump from
935 0 to 1 on a freed SV, the corresponding SvREFCNT_dec from 1 to 0
936 will trigger an assertion failure, because the entry to sv_clear
937 checks that the scalar is not already freed. A check of for
938 !SvIS_FREED(gv) turns out to be invalid, because during global
939 destruction the reference count can be forced down to zero
940 (with SVf_BREAK set). In which case raising to 1 and then
941 dropping to 0 triggers cleanup before it should happen. I
942 *think* that this might actually be a general, systematic,
943 weakness of the whole idea of SVf_BREAK, in that code *is*
944 allowed to raise and lower references during global destruction,
945 so any *valid* code that happens to do this during global
946 destruction might well trigger premature cleanup. */
947 bool still_valid = gv && SvREFCNT(gv);
950 SvREFCNT_inc_simple_void(gv);
953 pad_swipe(*ixp, TRUE);
961 int try_downgrade = SvREFCNT(gv) == 2;
964 gv_try_downgrade(gv);
970 Perl_op_clear(pTHX_ OP *o)
975 PERL_ARGS_ASSERT_OP_CLEAR;
977 switch (o->op_type) {
978 case OP_NULL: /* Was holding old type, if any. */
981 case OP_ENTEREVAL: /* Was holding hints. */
982 case OP_ARGDEFELEM: /* Was holding signature index. */
986 if (!(o->op_flags & OPf_REF) || !OP_IS_STAT(o->op_type))
993 S_op_clear_gv(aTHX_ o, &(cPADOPx(o)->op_padix));
995 S_op_clear_gv(aTHX_ o, &(cSVOPx(o)->op_sv));
998 case OP_METHOD_REDIR:
999 case OP_METHOD_REDIR_SUPER:
1001 if (cMETHOPx(o)->op_rclass_targ) {
1002 pad_swipe(cMETHOPx(o)->op_rclass_targ, 1);
1003 cMETHOPx(o)->op_rclass_targ = 0;
1006 SvREFCNT_dec(cMETHOPx(o)->op_rclass_sv);
1007 cMETHOPx(o)->op_rclass_sv = NULL;
1010 case OP_METHOD_NAMED:
1011 case OP_METHOD_SUPER:
1012 SvREFCNT_dec(cMETHOPx(o)->op_u.op_meth_sv);
1013 cMETHOPx(o)->op_u.op_meth_sv = NULL;
1016 pad_swipe(o->op_targ, 1);
1023 SvREFCNT_dec(cSVOPo->op_sv);
1024 cSVOPo->op_sv = NULL;
1027 Even if op_clear does a pad_free for the target of the op,
1028 pad_free doesn't actually remove the sv that exists in the pad;
1029 instead it lives on. This results in that it could be reused as
1030 a target later on when the pad was reallocated.
1033 pad_swipe(o->op_targ,1);
1043 if (o->op_flags & (OPf_SPECIAL|OPf_STACKED|OPf_KIDS))
1048 if ( (o->op_type == OP_TRANS || o->op_type == OP_TRANSR)
1049 && (o->op_private & (OPpTRANS_FROM_UTF|OPpTRANS_TO_UTF)))
1052 if (cPADOPo->op_padix > 0) {
1053 pad_swipe(cPADOPo->op_padix, TRUE);
1054 cPADOPo->op_padix = 0;
1057 SvREFCNT_dec(cSVOPo->op_sv);
1058 cSVOPo->op_sv = NULL;
1062 PerlMemShared_free(cPVOPo->op_pv);
1063 cPVOPo->op_pv = NULL;
1067 op_free(cPMOPo->op_pmreplrootu.op_pmreplroot);
1071 if ( (o->op_private & OPpSPLIT_ASSIGN) /* @array = split */
1072 && !(o->op_flags & OPf_STACKED)) /* @{expr} = split */
1074 if (o->op_private & OPpSPLIT_LEX)
1075 pad_free(cPMOPo->op_pmreplrootu.op_pmtargetoff);
1078 pad_swipe(cPMOPo->op_pmreplrootu.op_pmtargetoff, TRUE);
1080 SvREFCNT_dec(MUTABLE_SV(cPMOPo->op_pmreplrootu.op_pmtargetgv));
1087 if (!(cPMOPo->op_pmflags & PMf_CODELIST_PRIVATE))
1088 op_free(cPMOPo->op_code_list);
1089 cPMOPo->op_code_list = NULL;
1090 forget_pmop(cPMOPo);
1091 cPMOPo->op_pmreplrootu.op_pmreplroot = NULL;
1092 /* we use the same protection as the "SAFE" version of the PM_ macros
1093 * here since sv_clean_all might release some PMOPs
1094 * after PL_regex_padav has been cleared
1095 * and the clearing of PL_regex_padav needs to
1096 * happen before sv_clean_all
1099 if(PL_regex_pad) { /* We could be in destruction */
1100 const IV offset = (cPMOPo)->op_pmoffset;
1101 ReREFCNT_dec(PM_GETRE(cPMOPo));
1102 PL_regex_pad[offset] = &PL_sv_undef;
1103 sv_catpvn_nomg(PL_regex_pad[0], (const char *)&offset,
1107 ReREFCNT_dec(PM_GETRE(cPMOPo));
1108 PM_SETRE(cPMOPo, NULL);
1114 PerlMemShared_free(cUNOP_AUXo->op_aux);
1117 case OP_MULTICONCAT:
1119 UNOP_AUX_item *aux = cUNOP_AUXo->op_aux;
1120 /* aux[PERL_MULTICONCAT_IX_PLAIN_PV] and/or
1121 * aux[PERL_MULTICONCAT_IX_UTF8_PV] point to plain and/or
1122 * utf8 shared strings */
1123 char *p1 = aux[PERL_MULTICONCAT_IX_PLAIN_PV].pv;
1124 char *p2 = aux[PERL_MULTICONCAT_IX_UTF8_PV].pv;
1126 PerlMemShared_free(p1);
1128 PerlMemShared_free(p2);
1129 PerlMemShared_free(aux);
1135 UNOP_AUX_item *items = cUNOP_AUXo->op_aux;
1136 UV actions = items->uv;
1138 bool is_hash = FALSE;
1141 switch (actions & MDEREF_ACTION_MASK) {
1144 actions = (++items)->uv;
1147 case MDEREF_HV_padhv_helem:
1150 case MDEREF_AV_padav_aelem:
1151 pad_free((++items)->pad_offset);
1154 case MDEREF_HV_gvhv_helem:
1157 case MDEREF_AV_gvav_aelem:
1159 S_op_clear_gv(aTHX_ o, &((++items)->pad_offset));
1161 S_op_clear_gv(aTHX_ o, &((++items)->sv));
1165 case MDEREF_HV_gvsv_vivify_rv2hv_helem:
1168 case MDEREF_AV_gvsv_vivify_rv2av_aelem:
1170 S_op_clear_gv(aTHX_ o, &((++items)->pad_offset));
1172 S_op_clear_gv(aTHX_ o, &((++items)->sv));
1174 goto do_vivify_rv2xv_elem;
1176 case MDEREF_HV_padsv_vivify_rv2hv_helem:
1179 case MDEREF_AV_padsv_vivify_rv2av_aelem:
1180 pad_free((++items)->pad_offset);
1181 goto do_vivify_rv2xv_elem;
1183 case MDEREF_HV_pop_rv2hv_helem:
1184 case MDEREF_HV_vivify_rv2hv_helem:
1187 do_vivify_rv2xv_elem:
1188 case MDEREF_AV_pop_rv2av_aelem:
1189 case MDEREF_AV_vivify_rv2av_aelem:
1191 switch (actions & MDEREF_INDEX_MASK) {
1192 case MDEREF_INDEX_none:
1195 case MDEREF_INDEX_const:
1199 pad_swipe((++items)->pad_offset, 1);
1201 SvREFCNT_dec((++items)->sv);
1207 case MDEREF_INDEX_padsv:
1208 pad_free((++items)->pad_offset);
1210 case MDEREF_INDEX_gvsv:
1212 S_op_clear_gv(aTHX_ o, &((++items)->pad_offset));
1214 S_op_clear_gv(aTHX_ o, &((++items)->sv));
1219 if (actions & MDEREF_FLAG_last)
1232 actions >>= MDEREF_SHIFT;
1235 /* start of malloc is at op_aux[-1], where the length is
1237 PerlMemShared_free(cUNOP_AUXo->op_aux - 1);
1242 if (o->op_targ > 0) {
1243 pad_free(o->op_targ);
1249 S_cop_free(pTHX_ COP* cop)
1251 PERL_ARGS_ASSERT_COP_FREE;
1254 if (! specialWARN(cop->cop_warnings))
1255 PerlMemShared_free(cop->cop_warnings);
1256 cophh_free(CopHINTHASH_get(cop));
1257 if (PL_curcop == cop)
1262 S_forget_pmop(pTHX_ PMOP *const o)
1264 HV * const pmstash = PmopSTASH(o);
1266 PERL_ARGS_ASSERT_FORGET_PMOP;
1268 if (pmstash && !SvIS_FREED(pmstash) && SvMAGICAL(pmstash)) {
1269 MAGIC * const mg = mg_find((const SV *)pmstash, PERL_MAGIC_symtab);
1271 PMOP **const array = (PMOP**) mg->mg_ptr;
1272 U32 count = mg->mg_len / sizeof(PMOP**);
1276 if (array[i] == o) {
1277 /* Found it. Move the entry at the end to overwrite it. */
1278 array[i] = array[--count];
1279 mg->mg_len = count * sizeof(PMOP**);
1280 /* Could realloc smaller at this point always, but probably
1281 not worth it. Probably worth free()ing if we're the
1284 Safefree(mg->mg_ptr);
1298 S_find_and_forget_pmops(pTHX_ OP *o)
1302 PERL_ARGS_ASSERT_FIND_AND_FORGET_PMOPS;
1305 switch (o->op_type) {
1310 forget_pmop((PMOP*)o);
1313 if (o->op_flags & OPf_KIDS) {
1314 o = cUNOPo->op_first;
1320 return; /* at top; no parents/siblings to try */
1321 if (OpHAS_SIBLING(o)) {
1322 o = o->op_sibparent; /* process next sibling */
1325 o = o->op_sibparent; /*try parent's next sibling */
1334 Neutralizes an op when it is no longer needed, but is still linked to from
1341 Perl_op_null(pTHX_ OP *o)
1345 PERL_ARGS_ASSERT_OP_NULL;
1347 if (o->op_type == OP_NULL)
1350 o->op_targ = o->op_type;
1351 OpTYPE_set(o, OP_NULL);
1355 Perl_op_refcnt_lock(pTHX)
1356 PERL_TSA_ACQUIRE(PL_op_mutex)
1361 PERL_UNUSED_CONTEXT;
1366 Perl_op_refcnt_unlock(pTHX)
1367 PERL_TSA_RELEASE(PL_op_mutex)
1372 PERL_UNUSED_CONTEXT;
1378 =for apidoc op_sibling_splice
1380 A general function for editing the structure of an existing chain of
1381 op_sibling nodes. By analogy with the perl-level C<splice()> function, allows
1382 you to delete zero or more sequential nodes, replacing them with zero or
1383 more different nodes. Performs the necessary op_first/op_last
1384 housekeeping on the parent node and op_sibling manipulation on the
1385 children. The last deleted node will be marked as as the last node by
1386 updating the op_sibling/op_sibparent or op_moresib field as appropriate.
1388 Note that op_next is not manipulated, and nodes are not freed; that is the
1389 responsibility of the caller. It also won't create a new list op for an
1390 empty list etc; use higher-level functions like op_append_elem() for that.
1392 C<parent> is the parent node of the sibling chain. It may passed as C<NULL> if
1393 the splicing doesn't affect the first or last op in the chain.
1395 C<start> is the node preceding the first node to be spliced. Node(s)
1396 following it will be deleted, and ops will be inserted after it. If it is
1397 C<NULL>, the first node onwards is deleted, and nodes are inserted at the
1400 C<del_count> is the number of nodes to delete. If zero, no nodes are deleted.
1401 If -1 or greater than or equal to the number of remaining kids, all
1402 remaining kids are deleted.
1404 C<insert> is the first of a chain of nodes to be inserted in place of the nodes.
1405 If C<NULL>, no nodes are inserted.
1407 The head of the chain of deleted ops is returned, or C<NULL> if no ops were
1412 action before after returns
1413 ------ ----- ----- -------
1416 splice(P, A, 2, X-Y-Z) | | B-C
1420 splice(P, NULL, 1, X-Y) | | A
1424 splice(P, NULL, 3, NULL) | | A-B-C
1428 splice(P, B, 0, X-Y) | | NULL
1432 For lower-level direct manipulation of C<op_sibparent> and C<op_moresib>,
1433 see C<L</OpMORESIB_set>>, C<L</OpLASTSIB_set>>, C<L</OpMAYBESIB_set>>.
1439 Perl_op_sibling_splice(OP *parent, OP *start, int del_count, OP* insert)
1443 OP *last_del = NULL;
1444 OP *last_ins = NULL;
1447 first = OpSIBLING(start);
1451 first = cLISTOPx(parent)->op_first;
1453 assert(del_count >= -1);
1455 if (del_count && first) {
1457 while (--del_count && OpHAS_SIBLING(last_del))
1458 last_del = OpSIBLING(last_del);
1459 rest = OpSIBLING(last_del);
1460 OpLASTSIB_set(last_del, NULL);
1467 while (OpHAS_SIBLING(last_ins))
1468 last_ins = OpSIBLING(last_ins);
1469 OpMAYBESIB_set(last_ins, rest, NULL);
1475 OpMAYBESIB_set(start, insert, NULL);
1479 cLISTOPx(parent)->op_first = insert;
1481 parent->op_flags |= OPf_KIDS;
1483 parent->op_flags &= ~OPf_KIDS;
1487 /* update op_last etc */
1494 /* ought to use OP_CLASS(parent) here, but that can't handle
1495 * ex-foo OP_NULL ops. Also note that XopENTRYCUSTOM() can't
1497 type = parent->op_type;
1498 if (type == OP_CUSTOM) {
1500 type = XopENTRYCUSTOM(parent, xop_class);
1503 if (type == OP_NULL)
1504 type = parent->op_targ;
1505 type = PL_opargs[type] & OA_CLASS_MASK;
1508 lastop = last_ins ? last_ins : start ? start : NULL;
1509 if ( type == OA_BINOP
1510 || type == OA_LISTOP
1514 cLISTOPx(parent)->op_last = lastop;
1517 OpLASTSIB_set(lastop, parent);
1519 return last_del ? first : NULL;
1522 Perl_croak_nocontext("panic: op_sibling_splice(): NULL parent");
1526 =for apidoc op_parent
1528 Returns the parent OP of C<o>, if it has a parent. Returns C<NULL> otherwise.
1534 Perl_op_parent(OP *o)
1536 PERL_ARGS_ASSERT_OP_PARENT;
1537 while (OpHAS_SIBLING(o))
1539 return o->op_sibparent;
1542 /* replace the sibling following start with a new UNOP, which becomes
1543 * the parent of the original sibling; e.g.
1545 * op_sibling_newUNOP(P, A, unop-args...)
1553 * where U is the new UNOP.
1555 * parent and start args are the same as for op_sibling_splice();
1556 * type and flags args are as newUNOP().
1558 * Returns the new UNOP.
1562 S_op_sibling_newUNOP(pTHX_ OP *parent, OP *start, I32 type, I32 flags)
1566 kid = op_sibling_splice(parent, start, 1, NULL);
1567 newop = newUNOP(type, flags, kid);
1568 op_sibling_splice(parent, start, 0, newop);
1573 /* lowest-level newLOGOP-style function - just allocates and populates
1574 * the struct. Higher-level stuff should be done by S_new_logop() /
1575 * newLOGOP(). This function exists mainly to avoid op_first assignment
1576 * being spread throughout this file.
1580 Perl_alloc_LOGOP(pTHX_ I32 type, OP *first, OP* other)
1585 NewOp(1101, logop, 1, LOGOP);
1586 OpTYPE_set(logop, type);
1587 logop->op_first = first;
1588 logop->op_other = other;
1590 logop->op_flags = OPf_KIDS;
1591 while (kid && OpHAS_SIBLING(kid))
1592 kid = OpSIBLING(kid);
1594 OpLASTSIB_set(kid, (OP*)logop);
1599 /* Contextualizers */
1602 =for apidoc op_contextualize
1604 Applies a syntactic context to an op tree representing an expression.
1605 C<o> is the op tree, and C<context> must be C<G_SCALAR>, C<G_ARRAY>,
1606 or C<G_VOID> to specify the context to apply. The modified op tree
1613 Perl_op_contextualize(pTHX_ OP *o, I32 context)
1615 PERL_ARGS_ASSERT_OP_CONTEXTUALIZE;
1617 case G_SCALAR: return scalar(o);
1618 case G_ARRAY: return list(o);
1619 case G_VOID: return scalarvoid(o);
1621 Perl_croak(aTHX_ "panic: op_contextualize bad context %ld",
1628 =for apidoc op_linklist
1629 This function is the implementation of the L</LINKLIST> macro. It should
1630 not be called directly.
1637 Perl_op_linklist(pTHX_ OP *o)
1644 PERL_ARGS_ASSERT_OP_LINKLIST;
1647 /* Descend down the tree looking for any unprocessed subtrees to
1650 if (o->op_flags & OPf_KIDS) {
1651 o = cUNOPo->op_first;
1654 o->op_next = o; /* leaf node; link to self initially */
1657 /* if we're at the top level, there either weren't any children
1658 * to process, or we've worked our way back to the top. */
1662 /* o is now processed. Next, process any sibling subtrees */
1664 if (OpHAS_SIBLING(o)) {
1669 /* Done all the subtrees at this level. Go back up a level and
1670 * link the parent in with all its (processed) children.
1673 o = o->op_sibparent;
1674 assert(!o->op_next);
1675 prevp = &(o->op_next);
1676 kid = (o->op_flags & OPf_KIDS) ? cUNOPo->op_first : NULL;
1678 *prevp = kid->op_next;
1679 prevp = &(kid->op_next);
1680 kid = OpSIBLING(kid);
1688 S_scalarkids(pTHX_ OP *o)
1690 if (o && o->op_flags & OPf_KIDS) {
1692 for (kid = cLISTOPo->op_first; kid; kid = OpSIBLING(kid))
1699 S_scalarboolean(pTHX_ OP *o)
1701 PERL_ARGS_ASSERT_SCALARBOOLEAN;
1703 if ((o->op_type == OP_SASSIGN && cBINOPo->op_first->op_type == OP_CONST &&
1704 !(cBINOPo->op_first->op_flags & OPf_SPECIAL)) ||
1705 (o->op_type == OP_NOT && cUNOPo->op_first->op_type == OP_SASSIGN &&
1706 cBINOPx(cUNOPo->op_first)->op_first->op_type == OP_CONST &&
1707 !(cBINOPx(cUNOPo->op_first)->op_first->op_flags & OPf_SPECIAL))) {
1708 if (ckWARN(WARN_SYNTAX)) {
1709 const line_t oldline = CopLINE(PL_curcop);
1711 if (PL_parser && PL_parser->copline != NOLINE) {
1712 /* This ensures that warnings are reported at the first line
1713 of the conditional, not the last. */
1714 CopLINE_set(PL_curcop, PL_parser->copline);
1716 Perl_warner(aTHX_ packWARN(WARN_SYNTAX), "Found = in conditional, should be ==");
1717 CopLINE_set(PL_curcop, oldline);
1724 S_op_varname_subscript(pTHX_ const OP *o, int subscript_type)
1727 assert(o->op_type == OP_PADAV || o->op_type == OP_RV2AV ||
1728 o->op_type == OP_PADHV || o->op_type == OP_RV2HV);
1730 const char funny = o->op_type == OP_PADAV
1731 || o->op_type == OP_RV2AV ? '@' : '%';
1732 if (o->op_type == OP_RV2AV || o->op_type == OP_RV2HV) {
1734 if (cUNOPo->op_first->op_type != OP_GV
1735 || !(gv = cGVOPx_gv(cUNOPo->op_first)))
1737 return varname(gv, funny, 0, NULL, 0, subscript_type);
1740 varname(MUTABLE_GV(PL_compcv), funny, o->op_targ, NULL, 0, subscript_type);
1745 S_op_varname(pTHX_ const OP *o)
1747 return S_op_varname_subscript(aTHX_ o, 1);
1751 S_op_pretty(pTHX_ const OP *o, SV **retsv, const char **retpv)
1752 { /* or not so pretty :-) */
1753 if (o->op_type == OP_CONST) {
1755 if (SvPOK(*retsv)) {
1757 *retsv = sv_newmortal();
1758 pv_pretty(*retsv, SvPVX_const(sv), SvCUR(sv), 32, NULL, NULL,
1759 PERL_PV_PRETTY_DUMP |PERL_PV_ESCAPE_UNI_DETECT);
1761 else if (!SvOK(*retsv))
1764 else *retpv = "...";
1768 S_scalar_slice_warning(pTHX_ const OP *o)
1771 const bool h = o->op_type == OP_HSLICE
1772 || (o->op_type == OP_NULL && o->op_targ == OP_HSLICE);
1778 SV *keysv = NULL; /* just to silence compiler warnings */
1779 const char *key = NULL;
1781 if (!(o->op_private & OPpSLICEWARNING))
1783 if (PL_parser && PL_parser->error_count)
1784 /* This warning can be nonsensical when there is a syntax error. */
1787 kid = cLISTOPo->op_first;
1788 kid = OpSIBLING(kid); /* get past pushmark */
1789 /* weed out false positives: any ops that can return lists */
1790 switch (kid->op_type) {
1816 /* Don't warn if we have a nulled list either. */
1817 if (kid->op_type == OP_NULL && kid->op_targ == OP_LIST)
1820 assert(OpSIBLING(kid));
1821 name = S_op_varname(aTHX_ OpSIBLING(kid));
1822 if (!name) /* XS module fiddling with the op tree */
1824 S_op_pretty(aTHX_ kid, &keysv, &key);
1825 assert(SvPOK(name));
1826 sv_chop(name,SvPVX(name)+1);
1828 /* diag_listed_as: Scalar value @%s[%s] better written as $%s[%s] */
1829 Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
1830 "Scalar value @%" SVf "%c%s%c better written as $%" SVf
1832 SVfARG(name), lbrack, key, rbrack, SVfARG(name),
1833 lbrack, key, rbrack);
1835 /* diag_listed_as: Scalar value @%s[%s] better written as $%s[%s] */
1836 Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
1837 "Scalar value @%" SVf "%c%" SVf "%c better written as $%"
1839 SVfARG(name), lbrack, SVfARG(keysv), rbrack,
1840 SVfARG(name), lbrack, SVfARG(keysv), rbrack);
1845 /* apply scalar context to the o subtree */
1848 Perl_scalar(pTHX_ OP *o)
1853 OP *next_kid = NULL; /* what op (if any) to process next */
1856 /* assumes no premature commitment */
1857 if (!o || (PL_parser && PL_parser->error_count)
1858 || (o->op_flags & OPf_WANT)
1859 || o->op_type == OP_RETURN)
1864 o->op_flags = (o->op_flags & ~OPf_WANT) | OPf_WANT_SCALAR;
1866 switch (o->op_type) {
1868 scalar(cBINOPo->op_first);
1869 /* convert what initially looked like a list repeat into a
1870 * scalar repeat, e.g. $s = (1) x $n
1872 if (o->op_private & OPpREPEAT_DOLIST) {
1873 kid = cLISTOPx(cUNOPo->op_first)->op_first;
1874 assert(kid->op_type == OP_PUSHMARK);
1875 if (OpHAS_SIBLING(kid) && !OpHAS_SIBLING(OpSIBLING(kid))) {
1876 op_null(cLISTOPx(cUNOPo->op_first)->op_first);
1877 o->op_private &=~ OPpREPEAT_DOLIST;
1885 /* impose scalar context on everything except the condition */
1886 next_kid = OpSIBLING(cUNOPo->op_first);
1890 if (o->op_flags & OPf_KIDS)
1891 next_kid = cUNOPo->op_first; /* do all kids */
1894 /* the children of these ops are usually a list of statements,
1895 * except the leaves, whose first child is a corresponding enter
1900 kid = cLISTOPo->op_first;
1904 kid = cLISTOPo->op_first;
1906 kid = OpSIBLING(kid);
1909 OP *sib = OpSIBLING(kid);
1910 /* Apply void context to all kids except the last, which
1911 * is scalar (ignoring a trailing ex-nextstate in determining
1912 * if it's the last kid). E.g.
1913 * $scalar = do { void; void; scalar }
1914 * Except that 'when's are always scalar, e.g.
1915 * $scalar = do { given(..) {
1916 * when (..) { scalar }
1917 * when (..) { scalar }
1922 || ( !OpHAS_SIBLING(sib)
1923 && sib->op_type == OP_NULL
1924 && ( sib->op_targ == OP_NEXTSTATE
1925 || sib->op_targ == OP_DBSTATE )
1929 /* tail call optimise calling scalar() on the last kid */
1933 else if (kid->op_type == OP_LEAVEWHEN)
1939 NOT_REACHED; /* NOTREACHED */
1943 Perl_ck_warner(aTHX_ packWARN(WARN_VOID), "Useless use of sort in scalar context");
1949 /* Warn about scalar context */
1950 const char lbrack = o->op_type == OP_KVHSLICE ? '{' : '[';
1951 const char rbrack = o->op_type == OP_KVHSLICE ? '}' : ']';
1954 const char *key = NULL;
1956 /* This warning can be nonsensical when there is a syntax error. */
1957 if (PL_parser && PL_parser->error_count)
1960 if (!ckWARN(WARN_SYNTAX)) break;
1962 kid = cLISTOPo->op_first;
1963 kid = OpSIBLING(kid); /* get past pushmark */
1964 assert(OpSIBLING(kid));
1965 name = S_op_varname(aTHX_ OpSIBLING(kid));
1966 if (!name) /* XS module fiddling with the op tree */
1968 S_op_pretty(aTHX_ kid, &keysv, &key);
1969 assert(SvPOK(name));
1970 sv_chop(name,SvPVX(name)+1);
1972 /* diag_listed_as: %%s[%s] in scalar context better written as $%s[%s] */
1973 Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
1974 "%%%" SVf "%c%s%c in scalar context better written "
1975 "as $%" SVf "%c%s%c",
1976 SVfARG(name), lbrack, key, rbrack, SVfARG(name),
1977 lbrack, key, rbrack);
1979 /* diag_listed_as: %%s[%s] in scalar context better written as $%s[%s] */
1980 Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
1981 "%%%" SVf "%c%" SVf "%c in scalar context better "
1982 "written as $%" SVf "%c%" SVf "%c",
1983 SVfARG(name), lbrack, SVfARG(keysv), rbrack,
1984 SVfARG(name), lbrack, SVfARG(keysv), rbrack);
1988 /* If next_kid is set, someone in the code above wanted us to process
1989 * that kid and all its remaining siblings. Otherwise, work our way
1990 * back up the tree */
1994 return top_op; /* at top; no parents/siblings to try */
1995 if (OpHAS_SIBLING(o))
1996 next_kid = o->op_sibparent;
1998 o = o->op_sibparent; /*try parent's next sibling */
1999 switch (o->op_type) {
2005 /* should really restore PL_curcop to its old value, but
2006 * setting it to PL_compiling is better than do nothing */
2007 PL_curcop = &PL_compiling;
2016 /* apply void context to the optree arg */
2019 Perl_scalarvoid(pTHX_ OP *arg)
2026 PERL_ARGS_ASSERT_SCALARVOID;
2030 SV *useless_sv = NULL;
2031 const char* useless = NULL;
2032 OP * next_kid = NULL;
2034 if (o->op_type == OP_NEXTSTATE
2035 || o->op_type == OP_DBSTATE
2036 || (o->op_type == OP_NULL && (o->op_targ == OP_NEXTSTATE
2037 || o->op_targ == OP_DBSTATE)))
2038 PL_curcop = (COP*)o; /* for warning below */
2040 /* assumes no premature commitment */
2041 want = o->op_flags & OPf_WANT;
2042 if ((want && want != OPf_WANT_SCALAR)
2043 || (PL_parser && PL_parser->error_count)
2044 || o->op_type == OP_RETURN || o->op_type == OP_REQUIRE || o->op_type == OP_LEAVEWHEN)
2049 if ((o->op_private & OPpTARGET_MY)
2050 && (PL_opargs[o->op_type] & OA_TARGLEX))/* OPp share the meaning */
2052 /* newASSIGNOP has already applied scalar context, which we
2053 leave, as if this op is inside SASSIGN. */
2057 o->op_flags = (o->op_flags & ~OPf_WANT) | OPf_WANT_VOID;
2059 switch (o->op_type) {
2061 if (!(PL_opargs[o->op_type] & OA_FOLDCONST))
2065 if (o->op_flags & OPf_STACKED)
2067 if (o->op_type == OP_REPEAT)
2068 scalar(cBINOPo->op_first);
2071 if ((o->op_flags & OPf_STACKED) &&
2072 !(o->op_private & OPpCONCAT_NESTED))
2076 if (o->op_private == 4)
2111 case OP_GETSOCKNAME:
2112 case OP_GETPEERNAME:
2117 case OP_GETPRIORITY:
2142 useless = OP_DESC(o);
2152 case OP_AELEMFAST_LEX:
2156 if (!(o->op_private & (OPpLVAL_INTRO|OPpOUR_INTRO)))
2157 /* Otherwise it's "Useless use of grep iterator" */
2158 useless = OP_DESC(o);
2162 if (!(o->op_private & OPpSPLIT_ASSIGN))
2163 useless = OP_DESC(o);
2167 kid = cUNOPo->op_first;
2168 if (kid->op_type != OP_MATCH && kid->op_type != OP_SUBST &&
2169 kid->op_type != OP_TRANS && kid->op_type != OP_TRANSR) {
2172 useless = "negative pattern binding (!~)";
2176 if (cPMOPo->op_pmflags & PMf_NONDESTRUCT)
2177 useless = "non-destructive substitution (s///r)";
2181 useless = "non-destructive transliteration (tr///r)";
2188 if (!(o->op_private & (OPpLVAL_INTRO|OPpOUR_INTRO)) &&
2189 (!OpHAS_SIBLING(o) || OpSIBLING(o)->op_type != OP_READLINE))
2190 useless = "a variable";
2195 if (cSVOPo->op_private & OPpCONST_STRICT)
2196 no_bareword_allowed(o);
2198 if (ckWARN(WARN_VOID)) {
2200 /* don't warn on optimised away booleans, eg
2201 * use constant Foo, 5; Foo || print; */
2202 if (cSVOPo->op_private & OPpCONST_SHORTCIRCUIT)
2204 /* the constants 0 and 1 are permitted as they are
2205 conventionally used as dummies in constructs like
2206 1 while some_condition_with_side_effects; */
2207 else if (SvNIOK(sv) && ((nv = SvNV(sv)) == 0.0 || nv == 1.0))
2209 else if (SvPOK(sv)) {
2210 SV * const dsv = newSVpvs("");
2212 = Perl_newSVpvf(aTHX_
2214 pv_pretty(dsv, SvPVX_const(sv),
2215 SvCUR(sv), 32, NULL, NULL,
2217 | PERL_PV_ESCAPE_NOCLEAR
2218 | PERL_PV_ESCAPE_UNI_DETECT));
2219 SvREFCNT_dec_NN(dsv);
2221 else if (SvOK(sv)) {
2222 useless_sv = Perl_newSVpvf(aTHX_ "a constant (%" SVf ")", SVfARG(sv));
2225 useless = "a constant (undef)";
2228 op_null(o); /* don't execute or even remember it */
2232 OpTYPE_set(o, OP_PREINC); /* pre-increment is faster */
2236 OpTYPE_set(o, OP_PREDEC); /* pre-decrement is faster */
2240 OpTYPE_set(o, OP_I_PREINC); /* pre-increment is faster */
2244 OpTYPE_set(o, OP_I_PREDEC); /* pre-decrement is faster */
2249 UNOP *refgen, *rv2cv;
2252 if ((o->op_private & ~OPpASSIGN_BACKWARDS) != 2)
2255 rv2gv = ((BINOP *)o)->op_last;
2256 if (!rv2gv || rv2gv->op_type != OP_RV2GV)
2259 refgen = (UNOP *)((BINOP *)o)->op_first;
2261 if (!refgen || (refgen->op_type != OP_REFGEN
2262 && refgen->op_type != OP_SREFGEN))
2265 exlist = (LISTOP *)refgen->op_first;
2266 if (!exlist || exlist->op_type != OP_NULL
2267 || exlist->op_targ != OP_LIST)
2270 if (exlist->op_first->op_type != OP_PUSHMARK
2271 && exlist->op_first != exlist->op_last)
2274 rv2cv = (UNOP*)exlist->op_last;
2276 if (rv2cv->op_type != OP_RV2CV)
2279 assert ((rv2gv->op_private & OPpDONT_INIT_GV) == 0);
2280 assert ((o->op_private & OPpASSIGN_CV_TO_GV) == 0);
2281 assert ((rv2cv->op_private & OPpMAY_RETURN_CONSTANT) == 0);
2283 o->op_private |= OPpASSIGN_CV_TO_GV;
2284 rv2gv->op_private |= OPpDONT_INIT_GV;
2285 rv2cv->op_private |= OPpMAY_RETURN_CONSTANT;
2297 kid = cLOGOPo->op_first;
2298 if (kid->op_type == OP_NOT
2299 && (kid->op_flags & OPf_KIDS)) {
2300 if (o->op_type == OP_AND) {
2301 OpTYPE_set(o, OP_OR);
2303 OpTYPE_set(o, OP_AND);
2313 next_kid = OpSIBLING(cUNOPo->op_first);
2317 if (o->op_flags & OPf_STACKED)
2324 if (!(o->op_flags & OPf_KIDS))
2335 next_kid = cLISTOPo->op_first;
2338 /* If the first kid after pushmark is something that the padrange
2339 optimisation would reject, then null the list and the pushmark.
2341 if ((kid = cLISTOPo->op_first)->op_type == OP_PUSHMARK
2342 && ( !(kid = OpSIBLING(kid))
2343 || ( kid->op_type != OP_PADSV
2344 && kid->op_type != OP_PADAV
2345 && kid->op_type != OP_PADHV)
2346 || kid->op_private & ~OPpLVAL_INTRO
2347 || !(kid = OpSIBLING(kid))
2348 || ( kid->op_type != OP_PADSV
2349 && kid->op_type != OP_PADAV
2350 && kid->op_type != OP_PADHV)
2351 || kid->op_private & ~OPpLVAL_INTRO)
2353 op_null(cUNOPo->op_first); /* NULL the pushmark */
2354 op_null(o); /* NULL the list */
2366 /* mortalise it, in case warnings are fatal. */
2367 Perl_ck_warner(aTHX_ packWARN(WARN_VOID),
2368 "Useless use of %" SVf " in void context",
2369 SVfARG(sv_2mortal(useless_sv)));
2372 Perl_ck_warner(aTHX_ packWARN(WARN_VOID),
2373 "Useless use of %s in void context",
2378 /* if a kid hasn't been nominated to process, continue with the
2379 * next sibling, or if no siblings left, go back to the parent's
2380 * siblings and so on
2384 return arg; /* at top; no parents/siblings to try */
2385 if (OpHAS_SIBLING(o))
2386 next_kid = o->op_sibparent;
2388 o = o->op_sibparent; /*try parent's next sibling */
2398 S_listkids(pTHX_ OP *o)
2400 if (o && o->op_flags & OPf_KIDS) {
2402 for (kid = cLISTOPo->op_first; kid; kid = OpSIBLING(kid))
2409 /* apply list context to the o subtree */
2412 Perl_list(pTHX_ OP *o)
2417 OP *next_kid = NULL; /* what op (if any) to process next */
2421 /* assumes no premature commitment */
2422 if (!o || (o->op_flags & OPf_WANT)
2423 || (PL_parser && PL_parser->error_count)
2424 || o->op_type == OP_RETURN)
2429 if ((o->op_private & OPpTARGET_MY)
2430 && (PL_opargs[o->op_type] & OA_TARGLEX))/* OPp share the meaning */
2432 goto do_next; /* As if inside SASSIGN */
2435 o->op_flags = (o->op_flags & ~OPf_WANT) | OPf_WANT_LIST;
2437 switch (o->op_type) {
2439 if (o->op_private & OPpREPEAT_DOLIST
2440 && !(o->op_flags & OPf_STACKED))
2442 list(cBINOPo->op_first);
2443 kid = cBINOPo->op_last;
2444 /* optimise away (.....) x 1 */
2445 if (kid->op_type == OP_CONST && SvIOK(kSVOP_sv)
2446 && SvIVX(kSVOP_sv) == 1)
2448 op_null(o); /* repeat */
2449 op_null(cUNOPx(cBINOPo->op_first)->op_first);/* pushmark */
2451 op_free(op_sibling_splice(o, cBINOPo->op_first, 1, NULL));
2459 /* impose list context on everything except the condition */
2460 next_kid = OpSIBLING(cUNOPo->op_first);
2464 if (!(o->op_flags & OPf_KIDS))
2466 /* possibly flatten 1..10 into a constant array */
2467 if (!o->op_next && cUNOPo->op_first->op_type == OP_FLOP) {
2468 list(cBINOPo->op_first);
2469 gen_constant_list(o);
2472 next_kid = cUNOPo->op_first; /* do all kids */
2476 if (cLISTOPo->op_first->op_type == OP_PUSHMARK) {
2477 op_null(cUNOPo->op_first); /* NULL the pushmark */
2478 op_null(o); /* NULL the list */
2480 if (o->op_flags & OPf_KIDS)
2481 next_kid = cUNOPo->op_first; /* do all kids */
2484 /* the children of these ops are usually a list of statements,
2485 * except the leaves, whose first child is a corresponding enter
2489 kid = cLISTOPo->op_first;
2493 kid = cLISTOPo->op_first;
2495 kid = OpSIBLING(kid);
2498 OP *sib = OpSIBLING(kid);
2499 /* Apply void context to all kids except the last, which
2501 * @a = do { void; void; list }
2502 * Except that 'when's are always list context, e.g.
2503 * @a = do { given(..) {
2504 * when (..) { list }
2505 * when (..) { list }
2510 /* tail call optimise calling list() on the last kid */
2514 else if (kid->op_type == OP_LEAVEWHEN)
2520 NOT_REACHED; /* NOTREACHED */
2525 /* If next_kid is set, someone in the code above wanted us to process
2526 * that kid and all its remaining siblings. Otherwise, work our way
2527 * back up the tree */
2531 return top_op; /* at top; no parents/siblings to try */
2532 if (OpHAS_SIBLING(o))
2533 next_kid = o->op_sibparent;
2535 o = o->op_sibparent; /*try parent's next sibling */
2536 switch (o->op_type) {
2542 /* should really restore PL_curcop to its old value, but
2543 * setting it to PL_compiling is better than do nothing */
2544 PL_curcop = &PL_compiling;
2556 S_scalarseq(pTHX_ OP *o)
2559 const OPCODE type = o->op_type;
2561 if (type == OP_LINESEQ || type == OP_SCOPE ||
2562 type == OP_LEAVE || type == OP_LEAVETRY)
2565 for (kid = cLISTOPo->op_first; kid; kid = sib) {
2566 if ((sib = OpSIBLING(kid))
2567 && ( OpHAS_SIBLING(sib) || sib->op_type != OP_NULL
2568 || ( sib->op_targ != OP_NEXTSTATE
2569 && sib->op_targ != OP_DBSTATE )))
2574 PL_curcop = &PL_compiling;
2576 o->op_flags &= ~OPf_PARENS;
2577 if (PL_hints & HINT_BLOCK_SCOPE)
2578 o->op_flags |= OPf_PARENS;
2581 o = newOP(OP_STUB, 0);
2586 S_modkids(pTHX_ OP *o, I32 type)
2588 if (o && o->op_flags & OPf_KIDS) {
2590 for (kid = cLISTOPo->op_first; kid; kid = OpSIBLING(kid))
2591 op_lvalue(kid, type);
2597 /* for a helem/hslice/kvslice, if its a fixed hash, croak on invalid
2598 * const fields. Also, convert CONST keys to HEK-in-SVs.
2599 * rop is the op that retrieves the hash;
2600 * key_op is the first key
2601 * real if false, only check (and possibly croak); don't update op
2605 S_check_hash_fields_and_hekify(pTHX_ UNOP *rop, SVOP *key_op, int real)
2611 /* find the padsv corresponding to $lex->{} or @{$lex}{} */
2613 if (rop->op_first->op_type == OP_PADSV)
2614 /* @$hash{qw(keys here)} */
2615 rop = (UNOP*)rop->op_first;
2617 /* @{$hash}{qw(keys here)} */
2618 if (rop->op_first->op_type == OP_SCOPE
2619 && cLISTOPx(rop->op_first)->op_last->op_type == OP_PADSV)
2621 rop = (UNOP*)cLISTOPx(rop->op_first)->op_last;
2628 lexname = NULL; /* just to silence compiler warnings */
2629 fields = NULL; /* just to silence compiler warnings */
2633 && (lexname = padnamelist_fetch(PL_comppad_name, rop->op_targ),
2634 SvPAD_TYPED(lexname))
2635 && (fields = (GV**)hv_fetchs(PadnameTYPE(lexname), "FIELDS", FALSE))
2636 && isGV(*fields) && GvHV(*fields);
2638 for (; key_op; key_op = (SVOP*)OpSIBLING(key_op)) {
2640 if (key_op->op_type != OP_CONST)
2642 svp = cSVOPx_svp(key_op);
2644 /* make sure it's not a bareword under strict subs */
2645 if (key_op->op_private & OPpCONST_BARE &&
2646 key_op->op_private & OPpCONST_STRICT)
2648 no_bareword_allowed((OP*)key_op);
2651 /* Make the CONST have a shared SV */
2652 if ( !SvIsCOW_shared_hash(sv = *svp)
2653 && SvTYPE(sv) < SVt_PVMG
2659 const char * const key = SvPV_const(sv, *(STRLEN*)&keylen);
2660 SV *nsv = newSVpvn_share(key, SvUTF8(sv) ? -keylen : keylen, 0);
2661 SvREFCNT_dec_NN(sv);
2666 && !hv_fetch_ent(GvHV(*fields), *svp, FALSE, 0))
2668 Perl_croak(aTHX_ "No such class field \"%" SVf "\" "
2669 "in variable %" PNf " of type %" HEKf,
2670 SVfARG(*svp), PNfARG(lexname),
2671 HEKfARG(HvNAME_HEK(PadnameTYPE(lexname))));
2676 /* info returned by S_sprintf_is_multiconcatable() */
2678 struct sprintf_ismc_info {
2679 SSize_t nargs; /* num of args to sprintf (not including the format) */
2680 char *start; /* start of raw format string */
2681 char *end; /* bytes after end of raw format string */
2682 STRLEN total_len; /* total length (in bytes) of format string, not
2683 including '%s' and half of '%%' */
2684 STRLEN variant; /* number of bytes by which total_len_p would grow
2685 if upgraded to utf8 */
2686 bool utf8; /* whether the format is utf8 */
2690 /* is the OP_SPRINTF o suitable for converting into a multiconcat op?
2691 * i.e. its format argument is a const string with only '%s' and '%%'
2692 * formats, and the number of args is known, e.g.
2693 * sprintf "a=%s f=%s", $a[0], scalar(f());
2695 * sprintf "i=%d a=%s f=%s", $i, @a, f();
2697 * If successful, the sprintf_ismc_info struct pointed to by info will be
2702 S_sprintf_is_multiconcatable(pTHX_ OP *o,struct sprintf_ismc_info *info)
2704 OP *pm, *constop, *kid;
2707 SSize_t nargs, nformats;
2708 STRLEN cur, total_len, variant;
2711 /* if sprintf's behaviour changes, die here so that someone
2712 * can decide whether to enhance this function or skip optimising
2713 * under those new circumstances */
2714 assert(!(o->op_flags & OPf_STACKED));
2715 assert(!(PL_opargs[OP_SPRINTF] & OA_TARGLEX));
2716 assert(!(o->op_private & ~OPpARG4_MASK));
2718 pm = cUNOPo->op_first;
2719 if (pm->op_type != OP_PUSHMARK) /* weird coreargs stuff */
2721 constop = OpSIBLING(pm);
2722 if (!constop || constop->op_type != OP_CONST)
2724 sv = cSVOPx_sv(constop);
2725 if (SvMAGICAL(sv) || !SvPOK(sv))
2731 /* Scan format for %% and %s and work out how many %s there are.
2732 * Abandon if other format types are found.
2739 for (p = s; p < e; p++) {
2742 if (!UTF8_IS_INVARIANT(*p))
2748 return FALSE; /* lone % at end gives "Invalid conversion" */
2757 if (!nformats || nformats > PERL_MULTICONCAT_MAXARG)
2760 utf8 = cBOOL(SvUTF8(sv));
2764 /* scan args; they must all be in scalar cxt */
2767 kid = OpSIBLING(constop);
2770 if ((kid->op_flags & OPf_WANT) != OPf_WANT_SCALAR)
2773 kid = OpSIBLING(kid);
2776 if (nargs != nformats)
2777 return FALSE; /* e.g. sprintf("%s%s", $a); */
2780 info->nargs = nargs;
2783 info->total_len = total_len;
2784 info->variant = variant;
2792 /* S_maybe_multiconcat():
2794 * given an OP_STRINGIFY, OP_SASSIGN, OP_CONCAT or OP_SPRINTF op, possibly
2795 * convert it (and its children) into an OP_MULTICONCAT. See the code
2796 * comments just before pp_multiconcat() for the full details of what
2797 * OP_MULTICONCAT supports.
2799 * Basically we're looking for an optree with a chain of OP_CONCATS down
2800 * the LHS (or an OP_SPRINTF), with possibly an OP_SASSIGN, and/or
2801 * OP_STRINGIFY, and/or OP_CONCAT acting as '.=' at its head, e.g.
2809 * STRINGIFY -- PADSV[$x]
2812 * ex-PUSHMARK -- CONCAT/S
2814 * CONCAT/S -- PADSV[$d]
2816 * CONCAT -- CONST["-"]
2818 * PADSV[$a] -- PADSV[$b]
2820 * Note that at this stage the OP_SASSIGN may have already been optimised
2821 * away with OPpTARGET_MY set on the OP_STRINGIFY or OP_CONCAT.
2825 S_maybe_multiconcat(pTHX_ OP *o)
2828 OP *lastkidop; /* the right-most of any kids unshifted onto o */
2829 OP *topop; /* the top-most op in the concat tree (often equals o,
2830 unless there are assign/stringify ops above it */
2831 OP *parentop; /* the parent op of topop (or itself if no parent) */
2832 OP *targmyop; /* the op (if any) with the OPpTARGET_MY flag */
2833 OP *targetop; /* the op corresponding to target=... or target.=... */
2834 OP *stringop; /* the OP_STRINGIFY op, if any */
2835 OP *nextop; /* used for recreating the op_next chain without consts */
2836 OP *kid; /* general-purpose op pointer */
2838 UNOP_AUX_item *lenp;
2839 char *const_str, *p;
2840 struct sprintf_ismc_info sprintf_info;
2842 /* store info about each arg in args[];
2843 * toparg is the highest used slot; argp is a general
2844 * pointer to args[] slots */
2846 void *p; /* initially points to const sv (or null for op);
2847 later, set to SvPV(constsv), with ... */
2848 STRLEN len; /* ... len set to SvPV(..., len) */
2849 } *argp, *toparg, args[PERL_MULTICONCAT_MAXARG*2 + 1];
2853 SSize_t nadjconst = 0; /* adjacent consts - may be demoted to args */
2856 bool kid_is_last = FALSE; /* most args will be the RHS kid of a concat op;
2857 the last-processed arg will the LHS of one,
2858 as args are processed in reverse order */
2859 U8 stacked_last = 0; /* whether the last seen concat op was STACKED */
2860 STRLEN total_len = 0; /* sum of the lengths of the const segments */
2861 U8 flags = 0; /* what will become the op_flags and ... */
2862 U8 private_flags = 0; /* ... op_private of the multiconcat op */
2863 bool is_sprintf = FALSE; /* we're optimising an sprintf */
2864 bool is_targable = FALSE; /* targetop is an OPpTARGET_MY candidate */
2865 bool prev_was_const = FALSE; /* previous arg was a const */
2867 /* -----------------------------------------------------------------
2870 * Examine the optree non-destructively to determine whether it's
2871 * suitable to be converted into an OP_MULTICONCAT. Accumulate
2872 * information about the optree in args[].
2882 assert( o->op_type == OP_SASSIGN
2883 || o->op_type == OP_CONCAT
2884 || o->op_type == OP_SPRINTF
2885 || o->op_type == OP_STRINGIFY);
2887 Zero(&sprintf_info, 1, struct sprintf_ismc_info);
2889 /* first see if, at the top of the tree, there is an assign,
2890 * append and/or stringify */
2892 if (topop->op_type == OP_SASSIGN) {
2894 if (o->op_ppaddr != PL_ppaddr[OP_SASSIGN])
2896 if (o->op_private & (OPpASSIGN_BACKWARDS|OPpASSIGN_CV_TO_GV))
2898 assert(!(o->op_private & ~OPpARG2_MASK)); /* barf on unknown flags */
2901 topop = cBINOPo->op_first;
2902 targetop = OpSIBLING(topop);
2903 if (!targetop) /* probably some sort of syntax error */
2906 else if ( topop->op_type == OP_CONCAT
2907 && (topop->op_flags & OPf_STACKED)
2908 && (!(topop->op_private & OPpCONCAT_NESTED))
2913 /* OPpTARGET_MY shouldn't be able to be set here. If it is,
2914 * decide what to do about it */
2915 assert(!(o->op_private & OPpTARGET_MY));
2917 /* barf on unknown flags */
2918 assert(!(o->op_private & ~(OPpARG2_MASK|OPpTARGET_MY)));
2919 private_flags |= OPpMULTICONCAT_APPEND;
2920 targetop = cBINOPo->op_first;
2922 topop = OpSIBLING(targetop);
2924 /* $x .= <FOO> gets optimised to rcatline instead */
2925 if (topop->op_type == OP_READLINE)
2930 /* Can targetop (the LHS) if it's a padsv, be be optimised
2931 * away and use OPpTARGET_MY instead?
2933 if ( (targetop->op_type == OP_PADSV)
2934 && !(targetop->op_private & OPpDEREF)
2935 && !(targetop->op_private & OPpPAD_STATE)
2936 /* we don't support 'my $x .= ...' */
2937 && ( o->op_type == OP_SASSIGN
2938 || !(targetop->op_private & OPpLVAL_INTRO))
2943 if (topop->op_type == OP_STRINGIFY) {
2944 if (topop->op_ppaddr != PL_ppaddr[OP_STRINGIFY])
2948 /* barf on unknown flags */
2949 assert(!(o->op_private & ~(OPpARG4_MASK|OPpTARGET_MY)));
2951 if ((topop->op_private & OPpTARGET_MY)) {
2952 if (o->op_type == OP_SASSIGN)
2953 return; /* can't have two assigns */
2957 private_flags |= OPpMULTICONCAT_STRINGIFY;
2959 topop = cBINOPx(topop)->op_first;
2960 assert(OP_TYPE_IS_OR_WAS_NN(topop, OP_PUSHMARK));
2961 topop = OpSIBLING(topop);
2964 if (topop->op_type == OP_SPRINTF) {
2965 if (topop->op_ppaddr != PL_ppaddr[OP_SPRINTF])
2967 if (S_sprintf_is_multiconcatable(aTHX_ topop, &sprintf_info)) {
2968 nargs = sprintf_info.nargs;
2969 total_len = sprintf_info.total_len;
2970 variant = sprintf_info.variant;
2971 utf8 = sprintf_info.utf8;
2973 private_flags |= OPpMULTICONCAT_FAKE;
2975 /* we have an sprintf op rather than a concat optree.
2976 * Skip most of the code below which is associated with
2977 * processing that optree. We also skip phase 2, determining
2978 * whether its cost effective to optimise, since for sprintf,
2979 * multiconcat is *always* faster */
2982 /* note that even if the sprintf itself isn't multiconcatable,
2983 * the expression as a whole may be, e.g. in
2984 * $x .= sprintf("%d",...)
2985 * the sprintf op will be left as-is, but the concat/S op may
2986 * be upgraded to multiconcat
2989 else if (topop->op_type == OP_CONCAT) {
2990 if (topop->op_ppaddr != PL_ppaddr[OP_CONCAT])
2993 if ((topop->op_private & OPpTARGET_MY)) {
2994 if (o->op_type == OP_SASSIGN || targmyop)
2995 return; /* can't have two assigns */
3000 /* Is it safe to convert a sassign/stringify/concat op into
3002 assert((PL_opargs[OP_SASSIGN] & OA_CLASS_MASK) == OA_BINOP);
3003 assert((PL_opargs[OP_CONCAT] & OA_CLASS_MASK) == OA_BINOP);
3004 assert((PL_opargs[OP_STRINGIFY] & OA_CLASS_MASK) == OA_LISTOP);
3005 assert((PL_opargs[OP_SPRINTF] & OA_CLASS_MASK) == OA_LISTOP);
3006 STATIC_ASSERT_STMT( STRUCT_OFFSET(BINOP, op_last)
3007 == STRUCT_OFFSET(UNOP_AUX, op_aux));
3008 STATIC_ASSERT_STMT( STRUCT_OFFSET(LISTOP, op_last)
3009 == STRUCT_OFFSET(UNOP_AUX, op_aux));
3011 /* Now scan the down the tree looking for a series of
3012 * CONCAT/OPf_STACKED ops on the LHS (with the last one not
3013 * stacked). For example this tree:
3018 * CONCAT/STACKED -- EXPR5
3020 * CONCAT/STACKED -- EXPR4
3026 * corresponds to an expression like
3028 * (EXPR1 . EXPR2 . EXPR3 . EXPR4 . EXPR5)
3030 * Record info about each EXPR in args[]: in particular, whether it is
3031 * a stringifiable OP_CONST and if so what the const sv is.
3033 * The reason why the last concat can't be STACKED is the difference
3036 * ((($a .= $a) .= $a) .= $a) .= $a
3039 * $a . $a . $a . $a . $a
3041 * The main difference between the optrees for those two constructs
3042 * is the presence of the last STACKED. As well as modifying $a,
3043 * the former sees the changed $a between each concat, so if $s is
3044 * initially 'a', the first returns 'a' x 16, while the latter returns
3045 * 'a' x 5. And pp_multiconcat can't handle that kind of thing.
3055 if ( kid->op_type == OP_CONCAT
3059 k1 = cUNOPx(kid)->op_first;
3061 /* shouldn't happen except maybe after compile err? */
3065 /* avoid turning (A . B . ($lex = C) ...) into (A . B . C ...) */
3066 if (kid->op_private & OPpTARGET_MY)
3069 stacked_last = (kid->op_flags & OPf_STACKED);
3081 if ( nargs + nadjconst > PERL_MULTICONCAT_MAXARG - 2
3082 || (argp - args + 1) > (PERL_MULTICONCAT_MAXARG*2 + 1) - 2)
3084 /* At least two spare slots are needed to decompose both
3085 * concat args. If there are no slots left, continue to
3086 * examine the rest of the optree, but don't push new values
3087 * on args[]. If the optree as a whole is legal for conversion
3088 * (in particular that the last concat isn't STACKED), then
3089 * the first PERL_MULTICONCAT_MAXARG elements of the optree
3090 * can be converted into an OP_MULTICONCAT now, with the first
3091 * child of that op being the remainder of the optree -
3092 * which may itself later be converted to a multiconcat op
3096 /* the last arg is the rest of the optree */
3101 else if ( argop->op_type == OP_CONST
3102 && ((sv = cSVOPx_sv(argop)))
3103 /* defer stringification until runtime of 'constant'
3104 * things that might stringify variantly, e.g. the radix
3105 * point of NVs, or overloaded RVs */
3106 && (SvPOK(sv) || SvIOK(sv))
3107 && (!SvGMAGICAL(sv))
3110 utf8 |= cBOOL(SvUTF8(sv));
3113 /* this const may be demoted back to a plain arg later;
3114 * make sure we have enough arg slots left */
3116 prev_was_const = !prev_was_const;
3121 prev_was_const = FALSE;
3131 return; /* we don't support ((A.=B).=C)...) */
3133 /* look for two adjacent consts and don't fold them together:
3136 * $o->concat("a")->concat("b")
3139 * (but $o .= "a" . "b" should still fold)
3142 bool seen_nonconst = FALSE;
3143 for (argp = toparg; argp >= args; argp--) {
3144 if (argp->p == NULL) {
3145 seen_nonconst = TRUE;
3151 /* both previous and current arg were constants;
3152 * leave the current OP_CONST as-is */
3160 /* -----------------------------------------------------------------
3163 * At this point we have determined that the optree *can* be converted
3164 * into a multiconcat. Having gathered all the evidence, we now decide
3165 * whether it *should*.
3169 /* we need at least one concat action, e.g.:
3175 * otherwise we could be doing something like $x = "foo", which
3176 * if treated as as a concat, would fail to COW.
3178 if (nargs + nconst + cBOOL(private_flags & OPpMULTICONCAT_APPEND) < 2)
3181 /* Benchmarking seems to indicate that we gain if:
3182 * * we optimise at least two actions into a single multiconcat
3183 * (e.g concat+concat, sassign+concat);
3184 * * or if we can eliminate at least 1 OP_CONST;
3185 * * or if we can eliminate a padsv via OPpTARGET_MY
3189 /* eliminated at least one OP_CONST */
3191 /* eliminated an OP_SASSIGN */
3192 || o->op_type == OP_SASSIGN
3193 /* eliminated an OP_PADSV */
3194 || (!targmyop && is_targable)
3196 /* definitely a net gain to optimise */
3199 /* ... if not, what else? */
3201 /* special-case '$lex1 = expr . $lex1' (where expr isn't lex1):
3202 * multiconcat is faster (due to not creating a temporary copy of
3203 * $lex1), whereas for a general $lex1 = $lex2 . $lex3, concat is
3209 && topop->op_type == OP_CONCAT
3211 PADOFFSET t = targmyop->op_targ;
3212 OP *k1 = cBINOPx(topop)->op_first;
3213 OP *k2 = cBINOPx(topop)->op_last;
3214 if ( k2->op_type == OP_PADSV
3216 && ( k1->op_type != OP_PADSV
3217 || k1->op_targ != t)
3222 /* need at least two concats */
3223 if (nargs + nconst + cBOOL(private_flags & OPpMULTICONCAT_APPEND) < 3)
3228 /* -----------------------------------------------------------------
3231 * At this point the optree has been verified as ok to be optimised
3232 * into an OP_MULTICONCAT. Now start changing things.
3237 /* stringify all const args and determine utf8ness */
3240 for (argp = args; argp <= toparg; argp++) {
3241 SV *sv = (SV*)argp->p;
3243 continue; /* not a const op */
3244 if (utf8 && !SvUTF8(sv))
3245 sv_utf8_upgrade_nomg(sv);
3246 argp->p = SvPV_nomg(sv, argp->len);
3247 total_len += argp->len;
3249 /* see if any strings would grow if converted to utf8 */
3251 variant += variant_under_utf8_count((U8 *) argp->p,
3252 (U8 *) argp->p + argp->len);
3256 /* create and populate aux struct */
3260 aux = (UNOP_AUX_item*)PerlMemShared_malloc(
3261 sizeof(UNOP_AUX_item)
3263 PERL_MULTICONCAT_HEADER_SIZE
3264 + ((nargs + 1) * (variant ? 2 : 1))
3267 const_str = (char *)PerlMemShared_malloc(total_len ? total_len : 1);
3269 /* Extract all the non-const expressions from the concat tree then
3270 * dispose of the old tree, e.g. convert the tree from this:
3274 * STRINGIFY -- TARGET
3276 * ex-PUSHMARK -- CONCAT
3291 * ex-PUSHMARK -- EXPR1 -- EXPR2 -- EXPR3 -- EXPR4 -- EXPR5 -- TARGET
3293 * except that if EXPRi is an OP_CONST, it's discarded.
3295 * During the conversion process, EXPR ops are stripped from the tree
3296 * and unshifted onto o. Finally, any of o's remaining original
3297 * childen are discarded and o is converted into an OP_MULTICONCAT.
3299 * In this middle of this, o may contain both: unshifted args on the
3300 * left, and some remaining original args on the right. lastkidop
3301 * is set to point to the right-most unshifted arg to delineate
3302 * between the two sets.
3307 /* create a copy of the format with the %'s removed, and record
3308 * the sizes of the const string segments in the aux struct */
3310 lenp = aux + PERL_MULTICONCAT_IX_LENGTHS;
3312 p = sprintf_info.start;
3315 for (; p < sprintf_info.end; p++) {
3319 (lenp++)->ssize = q - oldq;
3326 lenp->ssize = q - oldq;
3327 assert((STRLEN)(q - const_str) == total_len);
3329 /* Attach all the args (i.e. the kids of the sprintf) to o (which
3330 * may or may not be topop) The pushmark and const ops need to be
3331 * kept in case they're an op_next entry point.
3333 lastkidop = cLISTOPx(topop)->op_last;
3334 kid = cUNOPx(topop)->op_first; /* pushmark */
3336 op_null(OpSIBLING(kid)); /* const */
3338 kid = op_sibling_splice(topop, NULL, -1, NULL); /* cut all args */
3339 op_sibling_splice(o, NULL, 0, kid); /* and attach to o */
3340 lastkidop->op_next = o;
3345 lenp = aux + PERL_MULTICONCAT_IX_LENGTHS;
3349 /* Concatenate all const strings into const_str.
3350 * Note that args[] contains the RHS args in reverse order, so
3351 * we scan args[] from top to bottom to get constant strings
3354 for (argp = toparg; argp >= args; argp--) {
3356 /* not a const op */
3357 (++lenp)->ssize = -1;
3359 STRLEN l = argp->len;
3360 Copy(argp->p, p, l, char);
3362 if (lenp->ssize == -1)
3373 for (argp = args; argp <= toparg; argp++) {
3374 /* only keep non-const args, except keep the first-in-next-chain
3375 * arg no matter what it is (but nulled if OP_CONST), because it
3376 * may be the entry point to this subtree from the previous
3379 bool last = (argp == toparg);
3382 /* set prev to the sibling *before* the arg to be cut out,
3383 * e.g. when cutting EXPR:
3388 * prev= CONCAT -- EXPR
3391 if (argp == args && kid->op_type != OP_CONCAT) {
3392 /* in e.g. '$x .= f(1)' there's no RHS concat tree
3393 * so the expression to be cut isn't kid->op_last but
3396 /* find the op before kid */
3398 o2 = cUNOPx(parentop)->op_first;
3399 while (o2 && o2 != kid) {
3407 else if (kid == o && lastkidop)
3408 prev = last ? lastkidop : OpSIBLING(lastkidop);
3410 prev = last ? NULL : cUNOPx(kid)->op_first;
3412 if (!argp->p || last) {
3414 OP *aop = op_sibling_splice(kid, prev, 1, NULL);
3415 /* and unshift to front of o */
3416 op_sibling_splice(o, NULL, 0, aop);
3417 /* record the right-most op added to o: later we will
3418 * free anything to the right of it */
3421 aop->op_next = nextop;
3424 /* null the const at start of op_next chain */
3428 nextop = prev->op_next;
3431 /* the last two arguments are both attached to the same concat op */
3432 if (argp < toparg - 1)
3437 /* Populate the aux struct */
3439 aux[PERL_MULTICONCAT_IX_NARGS].ssize = nargs;
3440 aux[PERL_MULTICONCAT_IX_PLAIN_PV].pv = utf8 ? NULL : const_str;
3441 aux[PERL_MULTICONCAT_IX_PLAIN_LEN].ssize = utf8 ? 0 : total_len;
3442 aux[PERL_MULTICONCAT_IX_UTF8_PV].pv = const_str;
3443 aux[PERL_MULTICONCAT_IX_UTF8_LEN].ssize = total_len;
3445 /* if variant > 0, calculate a variant const string and lengths where
3446 * the utf8 version of the string will take 'variant' more bytes than
3450 char *p = const_str;
3451 STRLEN ulen = total_len + variant;
3452 UNOP_AUX_item *lens = aux + PERL_MULTICONCAT_IX_LENGTHS;
3453 UNOP_AUX_item *ulens = lens + (nargs + 1);
3454 char *up = (char*)PerlMemShared_malloc(ulen);
3457 aux[PERL_MULTICONCAT_IX_UTF8_PV].pv = up;
3458 aux[PERL_MULTICONCAT_IX_UTF8_LEN].ssize = ulen;
3460 for (n = 0; n < (nargs + 1); n++) {
3462 char * orig_up = up;
3463 for (i = (lens++)->ssize; i > 0; i--) {
3465 append_utf8_from_native_byte(c, (U8**)&up);
3467 (ulens++)->ssize = (i < 0) ? i : up - orig_up;
3472 /* if there was a top(ish)-level OP_STRINGIFY, we need to keep
3473 * that op's first child - an ex-PUSHMARK - because the op_next of
3474 * the previous op may point to it (i.e. it's the entry point for
3479 ? op_sibling_splice(o, lastkidop, 1, NULL)
3480 : op_sibling_splice(stringop, NULL, 1, NULL);
3481 assert(OP_TYPE_IS_OR_WAS_NN(pmop, OP_PUSHMARK));
3482 op_sibling_splice(o, NULL, 0, pmop);
3489 * target .= A.B.C...
3495 if (o->op_type == OP_SASSIGN) {
3496 /* Move the target subtree from being the last of o's children
3497 * to being the last of o's preserved children.
3498 * Note the difference between 'target = ...' and 'target .= ...':
3499 * for the former, target is executed last; for the latter,
3502 kid = OpSIBLING(lastkidop);
3503 op_sibling_splice(o, kid, 1, NULL); /* cut target op */
3504 op_sibling_splice(o, lastkidop, 0, targetop); /* and paste */
3505 lastkidop->op_next = kid->op_next;
3506 lastkidop = targetop;
3509 /* Move the target subtree from being the first of o's
3510 * original children to being the first of *all* o's children.
3513 op_sibling_splice(o, lastkidop, 1, NULL); /* cut target op */
3514 op_sibling_splice(o, NULL, 0, targetop); /* and paste*/
3517 /* if the RHS of .= doesn't contain a concat (e.g.
3518 * $x .= "foo"), it gets missed by the "strip ops from the
3519 * tree and add to o" loop earlier */
3520 assert(topop->op_type != OP_CONCAT);
3522 /* in e.g. $x .= "$y", move the $y expression
3523 * from being a child of OP_STRINGIFY to being the
3524 * second child of the OP_CONCAT
3526 assert(cUNOPx(stringop)->op_first == topop);
3527 op_sibling_splice(stringop, NULL, 1, NULL);
3528 op_sibling_splice(o, cUNOPo->op_first, 0, topop);
3530 assert(topop == OpSIBLING(cBINOPo->op_first));
3539 * my $lex = A.B.C...
3542 * The original padsv op is kept but nulled in case it's the
3543 * entry point for the optree (which it will be for
3546 private_flags |= OPpTARGET_MY;
3547 private_flags |= (targetop->op_private & OPpLVAL_INTRO);
3548 o->op_targ = targetop->op_targ;
3549 targetop->op_targ = 0;
3553 flags |= OPf_STACKED;
3555 else if (targmyop) {
3556 private_flags |= OPpTARGET_MY;
3557 if (o != targmyop) {
3558 o->op_targ = targmyop->op_targ;
3559 targmyop->op_targ = 0;
3563 /* detach the emaciated husk of the sprintf/concat optree and free it */
3565 kid = op_sibling_splice(o, lastkidop, 1, NULL);
3571 /* and convert o into a multiconcat */
3573 o->op_flags = (flags|OPf_KIDS|stacked_last
3574 |(o->op_flags & (OPf_WANT|OPf_PARENS)));
3575 o->op_private = private_flags;
3576 o->op_type = OP_MULTICONCAT;
3577 o->op_ppaddr = PL_ppaddr[OP_MULTICONCAT];
3578 cUNOP_AUXo->op_aux = aux;
3582 /* do all the final processing on an optree (e.g. running the peephole
3583 * optimiser on it), then attach it to cv (if cv is non-null)
3587 S_process_optree(pTHX_ CV *cv, OP *optree, OP* start)
3591 /* XXX for some reason, evals, require and main optrees are
3592 * never attached to their CV; instead they just hang off
3593 * PL_main_root + PL_main_start or PL_eval_root + PL_eval_start
3594 * and get manually freed when appropriate */
3596 startp = &CvSTART(cv);
3598 startp = PL_in_eval? &PL_eval_start : &PL_main_start;
3601 optree->op_private |= OPpREFCOUNTED;
3602 OpREFCNT_set(optree, 1);
3603 optimize_optree(optree);
3605 finalize_optree(optree);
3606 S_prune_chain_head(startp);
3609 /* now that optimizer has done its work, adjust pad values */
3610 pad_tidy(optree->op_type == OP_LEAVEWRITE ? padtidy_FORMAT
3611 : CvCLONE(cv) ? padtidy_SUBCLONE : padtidy_SUB);
3617 =for apidoc optimize_optree
3619 This function applies some optimisations to the optree in top-down order.
3620 It is called before the peephole optimizer, which processes ops in
3621 execution order. Note that finalize_optree() also does a top-down scan,
3622 but is called *after* the peephole optimizer.
3628 Perl_optimize_optree(pTHX_ OP* o)
3630 PERL_ARGS_ASSERT_OPTIMIZE_OPTREE;
3633 SAVEVPTR(PL_curcop);
3641 /* helper for optimize_optree() which optimises one op then recurses
3642 * to optimise any children.
3646 S_optimize_op(pTHX_ OP* o)
3650 PERL_ARGS_ASSERT_OPTIMIZE_OP;
3653 OP * next_kid = NULL;
3655 assert(o->op_type != OP_FREED);
3657 switch (o->op_type) {
3660 PL_curcop = ((COP*)o); /* for warnings */
3668 S_maybe_multiconcat(aTHX_ o);
3672 if (cPMOPo->op_pmreplrootu.op_pmreplroot) {
3673 /* we can't assume that op_pmreplroot->op_sibparent == o
3674 * and that it is thus possible to walk back up the tree
3675 * past op_pmreplroot. So, although we try to avoid
3676 * recursing through op trees, do it here. After all,
3677 * there are unlikely to be many nested s///e's within
3678 * the replacement part of a s///e.
3680 optimize_op(cPMOPo->op_pmreplrootu.op_pmreplroot);
3688 if (o->op_flags & OPf_KIDS)
3689 next_kid = cUNOPo->op_first;
3691 /* if a kid hasn't been nominated to process, continue with the
3692 * next sibling, or if no siblings left, go back to the parent's
3693 * siblings and so on
3697 return; /* at top; no parents/siblings to try */
3698 if (OpHAS_SIBLING(o))
3699 next_kid = o->op_sibparent;
3701 o = o->op_sibparent; /*try parent's next sibling */
3704 /* this label not yet used. Goto here if any code above sets
3714 =for apidoc finalize_optree
3716 This function finalizes the optree. Should be called directly after
3717 the complete optree is built. It does some additional
3718 checking which can't be done in the normal C<ck_>xxx functions and makes
3719 the tree thread-safe.
3724 Perl_finalize_optree(pTHX_ OP* o)
3726 PERL_ARGS_ASSERT_FINALIZE_OPTREE;
3729 SAVEVPTR(PL_curcop);
3737 /* Relocate sv to the pad for thread safety.
3738 * Despite being a "constant", the SV is written to,
3739 * for reference counts, sv_upgrade() etc. */
3740 PERL_STATIC_INLINE void
3741 S_op_relocate_sv(pTHX_ SV** svp, PADOFFSET* targp)
3744 PERL_ARGS_ASSERT_OP_RELOCATE_SV;
3746 ix = pad_alloc(OP_CONST, SVf_READONLY);
3747 SvREFCNT_dec(PAD_SVl(ix));
3748 PAD_SETSV(ix, *svp);
3749 /* XXX I don't know how this isn't readonly already. */
3750 if (!SvIsCOW(PAD_SVl(ix))) SvREADONLY_on(PAD_SVl(ix));
3757 =for apidoc traverse_op_tree
3759 Return the next op in a depth-first traversal of the op tree,
3760 returning NULL when the traversal is complete.
3762 The initial call must supply the root of the tree as both top and o.
3764 For now it's static, but it may be exposed to the API in the future.
3770 S_traverse_op_tree(pTHX_ OP *top, OP *o) {
3773 PERL_ARGS_ASSERT_TRAVERSE_OP_TREE;
3775 if ((o->op_flags & OPf_KIDS) && cUNOPo->op_first) {
3776 return cUNOPo->op_first;
3778 else if ((sib = OpSIBLING(o))) {
3782 OP *parent = o->op_sibparent;
3783 assert(!(o->op_moresib));
3784 while (parent && parent != top) {
3785 OP *sib = OpSIBLING(parent);
3788 parent = parent->op_sibparent;
3796 S_finalize_op(pTHX_ OP* o)
3799 PERL_ARGS_ASSERT_FINALIZE_OP;
3802 assert(o->op_type != OP_FREED);
3804 switch (o->op_type) {
3807 PL_curcop = ((COP*)o); /* for warnings */
3810 if (OpHAS_SIBLING(o)) {
3811 OP *sib = OpSIBLING(o);
3812 if (( sib->op_type == OP_NEXTSTATE || sib->op_type == OP_DBSTATE)
3813 && ckWARN(WARN_EXEC)
3814 && OpHAS_SIBLING(sib))
3816 const OPCODE type = OpSIBLING(sib)->op_type;
3817 if (type != OP_EXIT && type != OP_WARN && type != OP_DIE) {
3818 const line_t oldline = CopLINE(PL_curcop);
3819 CopLINE_set(PL_curcop, CopLINE((COP*)sib));
3820 Perl_warner(aTHX_ packWARN(WARN_EXEC),
3821 "Statement unlikely to be reached");
3822 Perl_warner(aTHX_ packWARN(WARN_EXEC),
3823 "\t(Maybe you meant system() when you said exec()?)\n");
3824 CopLINE_set(PL_curcop, oldline);
3831 if ((o->op_private & OPpEARLY_CV) && ckWARN(WARN_PROTOTYPE)) {
3832 GV * const gv = cGVOPo_gv;
3833 if (SvTYPE(gv) == SVt_PVGV && GvCV(gv) && SvPVX_const(GvCV(gv))) {
3834 /* XXX could check prototype here instead of just carping */
3835 SV * const sv = sv_newmortal();
3836 gv_efullname3(sv, gv, NULL);
3837 Perl_warner(aTHX_ packWARN(WARN_PROTOTYPE),
3838 "%" SVf "() called too early to check prototype",
3845 if (cSVOPo->op_private & OPpCONST_STRICT)
3846 no_bareword_allowed(o);
3850 op_relocate_sv(&cSVOPo->op_sv, &o->op_targ);
3855 /* Relocate all the METHOP's SVs to the pad for thread safety. */
3856 case OP_METHOD_NAMED:
3857 case OP_METHOD_SUPER:
3858 case OP_METHOD_REDIR:
3859 case OP_METHOD_REDIR_SUPER:
3860 op_relocate_sv(&cMETHOPx(o)->op_u.op_meth_sv, &o->op_targ);
3869 if ((key_op = cSVOPx(((BINOP*)o)->op_last))->op_type != OP_CONST)
3872 rop = (UNOP*)((BINOP*)o)->op_first;
3877 S_scalar_slice_warning(aTHX_ o);
3881 kid = OpSIBLING(cLISTOPo->op_first);
3882 if (/* I bet there's always a pushmark... */
3883 OP_TYPE_ISNT_AND_WASNT_NN(kid, OP_LIST)
3884 && OP_TYPE_ISNT_NN(kid, OP_CONST))
3889 key_op = (SVOP*)(kid->op_type == OP_CONST
3891 : OpSIBLING(kLISTOP->op_first));
3893 rop = (UNOP*)((LISTOP*)o)->op_last;
3896 if (o->op_private & OPpLVAL_INTRO || rop->op_type != OP_RV2HV)
3898 S_check_hash_fields_and_hekify(aTHX_ rop, key_op, 1);
3902 if (o->op_targ != OP_HSLICE && o->op_targ != OP_ASLICE)
3906 S_scalar_slice_warning(aTHX_ o);
3910 if (cPMOPo->op_pmreplrootu.op_pmreplroot)
3911 finalize_op(cPMOPo->op_pmreplrootu.op_pmreplroot);
3919 if (o->op_flags & OPf_KIDS) {
3922 /* check that op_last points to the last sibling, and that
3923 * the last op_sibling/op_sibparent field points back to the
3924 * parent, and that the only ops with KIDS are those which are
3925 * entitled to them */
3926 U32 type = o->op_type;
3930 if (type == OP_NULL) {
3932 /* ck_glob creates a null UNOP with ex-type GLOB
3933 * (which is a list op. So pretend it wasn't a listop */
3934 if (type == OP_GLOB)
3937 family = PL_opargs[type] & OA_CLASS_MASK;
3939 has_last = ( family == OA_BINOP
3940 || family == OA_LISTOP
3941 || family == OA_PMOP
3942 || family == OA_LOOP
3944 assert( has_last /* has op_first and op_last, or ...
3945 ... has (or may have) op_first: */
3946 || family == OA_UNOP
3947 || family == OA_UNOP_AUX
3948 || family == OA_LOGOP
3949 || family == OA_BASEOP_OR_UNOP
3950 || family == OA_FILESTATOP
3951 || family == OA_LOOPEXOP
3952 || family == OA_METHOP
3953 || type == OP_CUSTOM
3954 || type == OP_NULL /* new_logop does this */
3957 for (kid = cUNOPo->op_first; kid; kid = OpSIBLING(kid)) {
3958 if (!OpHAS_SIBLING(kid)) {
3960 assert(kid == cLISTOPo->op_last);
3961 assert(kid->op_sibparent == o);
3966 } while (( o = traverse_op_tree(top, o)) != NULL);
3970 S_mark_padname_lvalue(pTHX_ PADNAME *pn)
3973 PadnameLVALUE_on(pn);
3974 while (PadnameOUTER(pn) && PARENT_PAD_INDEX(pn)) {
3976 /* RT #127786: cv can be NULL due to an eval within the DB package
3977 * called from an anon sub - anon subs don't have CvOUTSIDE() set
3978 * unless they contain an eval, but calling eval within DB
3979 * pretends the eval was done in the caller's scope.
3983 assert(CvPADLIST(cv));
3985 PadlistNAMESARRAY(CvPADLIST(cv))[PARENT_PAD_INDEX(pn)];
3986 assert(PadnameLEN(pn));
3987 PadnameLVALUE_on(pn);
3992 S_vivifies(const OPCODE type)
3995 case OP_RV2AV: case OP_ASLICE:
3996 case OP_RV2HV: case OP_KVASLICE:
3997 case OP_RV2SV: case OP_HSLICE:
3998 case OP_AELEMFAST: case OP_KVHSLICE:
4007 /* apply lvalue reference (aliasing) context to the optree o.
4010 * o would be the list ($x,$y) and type would be OP_AASSIGN.
4011 * It may descend and apply this to children too, for example in
4012 * \( $cond ? $x, $y) = (...)
4016 S_lvref(pTHX_ OP *o, I32 type)
4023 switch (o->op_type) {
4025 o = OpSIBLING(cUNOPo->op_first);
4032 if (cUNOPo->op_first->op_type != OP_GV) goto badref;
4033 o->op_flags |= OPf_STACKED;
4034 if (o->op_flags & OPf_PARENS) {
4035 if (o->op_private & OPpLVAL_INTRO) {
4036 yyerror(Perl_form(aTHX_ "Can't modify reference to "
4037 "localized parenthesized array in list assignment"));
4041 OpTYPE_set(o, OP_LVAVREF);
4042 o->op_private &= OPpLVAL_INTRO|OPpPAD_STATE;
4043 o->op_flags |= OPf_MOD|OPf_REF;
4046 o->op_private |= OPpLVREF_AV;
4050 kid = cUNOPo->op_first;
4051 if (kid->op_type == OP_NULL)
4052 kid = cUNOPx(OpSIBLING(kUNOP->op_first))
4054 o->op_private = OPpLVREF_CV;
4055 if (kid->op_type == OP_GV)
4056 o->op_flags |= OPf_STACKED;
4057 else if (kid->op_type == OP_PADCV) {
4058 o->op_targ = kid->op_targ;
4060 op_free(cUNOPo->op_first);
4061 cUNOPo->op_first = NULL;
4062 o->op_flags &=~ OPf_KIDS;
4068 if (o->op_flags & OPf_PARENS) {
4070 yyerror(Perl_form(aTHX_ "Can't modify reference to "
4071 "parenthesized hash in list assignment"));
4074 o->op_private |= OPpLVREF_HV;
4078 if (cUNOPo->op_first->op_type != OP_GV) goto badref;
4079 o->op_flags |= OPf_STACKED;
4083 if (o->op_flags & OPf_PARENS) goto parenhash;
4084 o->op_private |= OPpLVREF_HV;
4087 PAD_COMPNAME_GEN_set(o->op_targ, PERL_INT_MAX);
4091 PAD_COMPNAME_GEN_set(o->op_targ, PERL_INT_MAX);
4092 if (o->op_flags & OPf_PARENS) goto slurpy;
4093 o->op_private |= OPpLVREF_AV;
4098 o->op_private |= OPpLVREF_ELEM;
4099 o->op_flags |= OPf_STACKED;
4104 OpTYPE_set(o, OP_LVREFSLICE);
4105 o->op_private &= OPpLVAL_INTRO;
4109 if (o->op_flags & OPf_SPECIAL) /* do BLOCK */
4111 else if (!(o->op_flags & OPf_KIDS))
4114 /* the code formerly only recursed into the first child of
4115 * a non ex-list OP_NULL. if we ever encounter such a null op with
4116 * more than one child, need to decide whether its ok to process
4117 * *all* its kids or not */
4118 assert(o->op_targ == OP_LIST
4119 || !(OpHAS_SIBLING(cBINOPo->op_first)));
4122 o = cLISTOPo->op_first;
4126 if (o->op_flags & OPf_PARENS)
4131 /* diag_listed_as: Can't modify reference to %s in %s assignment */
4132 yyerror(Perl_form(aTHX_ "Can't modify reference to %s in %s",
4133 o->op_type == OP_NULL && o->op_flags & OPf_SPECIAL
4140 OpTYPE_set(o, OP_LVREF);
4142 OPpLVAL_INTRO|OPpLVREF_ELEM|OPpLVREF_TYPE|OPpPAD_STATE;
4143 if (type == OP_ENTERLOOP)
4144 o->op_private |= OPpLVREF_ITER;
4149 return; /* at top; no parents/siblings to try */
4150 if (OpHAS_SIBLING(o)) {
4151 o = o->op_sibparent;
4154 o = o->op_sibparent; /*try parent's next sibling */
4160 PERL_STATIC_INLINE bool
4161 S_potential_mod_type(I32 type)
4163 /* Types that only potentially result in modification. */
4164 return type == OP_GREPSTART || type == OP_ENTERSUB
4165 || type == OP_REFGEN || type == OP_LEAVESUBLV;
4170 =for apidoc op_lvalue
4172 Propagate lvalue ("modifiable") context to an op and its children.
4173 C<type> represents the context type, roughly based on the type of op that
4174 would do the modifying, although C<local()> is represented by C<OP_NULL>,
4175 because it has no op type of its own (it is signalled by a flag on
4178 This function detects things that can't be modified, such as C<$x+1>, and
4179 generates errors for them. For example, C<$x+1 = 2> would cause it to be
4180 called with an op of type C<OP_ADD> and a C<type> argument of C<OP_SASSIGN>.
4182 It also flags things that need to behave specially in an lvalue context,
4183 such as C<$$x = 5> which might have to vivify a reference in C<$x>.
4187 Perl_op_lvalue_flags() is a non-API lower-level interface to
4188 op_lvalue(). The flags param has these bits:
4189 OP_LVALUE_NO_CROAK: return rather than croaking on error
4194 Perl_op_lvalue_flags(pTHX_ OP *o, I32 type, U32 flags)
4199 if (!o || (PL_parser && PL_parser->error_count))
4204 /* -1 = error on localize, 0 = ignore localize, 1 = ok to localize */
4206 OP *next_kid = NULL;
4208 if ((o->op_private & OPpTARGET_MY)
4209 && (PL_opargs[o->op_type] & OA_TARGLEX))/* OPp share the meaning */
4214 /* elements of a list might be in void context because the list is
4215 in scalar context or because they are attribute sub calls */
4216 if ((o->op_flags & OPf_WANT) == OPf_WANT_VOID)
4219 if (type == OP_PRTF || type == OP_SPRINTF) type = OP_ENTERSUB;
4221 switch (o->op_type) {
4227 if ((o->op_flags & OPf_PARENS))
4232 if ((type == OP_UNDEF || type == OP_REFGEN || type == OP_LOCK) &&
4233 !(o->op_flags & OPf_STACKED)) {
4234 OpTYPE_set(o, OP_RV2CV); /* entersub => rv2cv */
4235 assert(cUNOPo->op_first->op_type == OP_NULL);
4236 op_null(((LISTOP*)cUNOPo->op_first)->op_first);/* disable pushmark */
4239 else { /* lvalue subroutine call */
4240 o->op_private |= OPpLVAL_INTRO;
4241 PL_modcount = RETURN_UNLIMITED_NUMBER;
4242 if (S_potential_mod_type(type)) {
4243 o->op_private |= OPpENTERSUB_INARGS;
4246 else { /* Compile-time error message: */
4247 OP *kid = cUNOPo->op_first;
4252 if (kid->op_type != OP_PUSHMARK) {
4253 if (kid->op_type != OP_NULL || kid->op_targ != OP_LIST)
4255 "panic: unexpected lvalue entersub "
4256 "args: type/targ %ld:%" UVuf,
4257 (long)kid->op_type, (UV)kid->op_targ);
4258 kid = kLISTOP->op_first;
4260 while (OpHAS_SIBLING(kid))
4261 kid = OpSIBLING(kid);
4262 if (!(kid->op_type == OP_NULL && kid->op_targ == OP_RV2CV)) {
4263 break; /* Postpone until runtime */
4266 kid = kUNOP->op_first;
4267 if (kid->op_type == OP_NULL && kid->op_targ == OP_RV2SV)
4268 kid = kUNOP->op_first;
4269 if (kid->op_type == OP_NULL)
4271 "Unexpected constant lvalue entersub "
4272 "entry via type/targ %ld:%" UVuf,
4273 (long)kid->op_type, (UV)kid->op_targ);
4274 if (kid->op_type != OP_GV) {
4281 : SvROK(gv) && SvTYPE(SvRV(gv)) == SVt_PVCV
4282 ? MUTABLE_CV(SvRV(gv))
4288 if (flags & OP_LVALUE_NO_CROAK)
4291 namesv = cv_name(cv, NULL, 0);
4292 yyerror_pv(Perl_form(aTHX_ "Can't modify non-lvalue "
4293 "subroutine call of &%" SVf " in %s",
4294 SVfARG(namesv), PL_op_desc[type]),
4302 if (flags & OP_LVALUE_NO_CROAK) return NULL;
4303 /* grep, foreach, subcalls, refgen */
4304 if (S_potential_mod_type(type))
4306 yyerror(Perl_form(aTHX_ "Can't modify %s in %s",
4307 (o->op_type == OP_NULL && (o->op_flags & OPf_SPECIAL)
4310 type ? PL_op_desc[type] : "local"));
4323 case OP_RIGHT_SHIFT:
4332 if (!(o->op_flags & OPf_STACKED))
4338 if (o->op_flags & OPf_STACKED) {
4342 if (!(o->op_private & OPpREPEAT_DOLIST))
4345 const I32 mods = PL_modcount;
4346 /* we recurse rather than iterate here because we need to
4347 * calculate and use the delta applied to PL_modcount by the
4348 * first child. So in something like
4349 * ($x, ($y) x 3) = split;
4350 * split knows that 4 elements are wanted
4352 modkids(cBINOPo->op_first, type);
4353 if (type != OP_AASSIGN)
4355 kid = cBINOPo->op_last;
4356 if (kid->op_type == OP_CONST && SvIOK(kSVOP_sv)) {
4357 const IV iv = SvIV(kSVOP_sv);
4358 if (PL_modcount != RETURN_UNLIMITED_NUMBER)
4360 mods + (PL_modcount - mods) * (iv < 0 ? 0 : iv);
4363 PL_modcount = RETURN_UNLIMITED_NUMBER;
4369 next_kid = OpSIBLING(cUNOPo->op_first);
4374 if (type == OP_REFGEN && o->op_flags & OPf_PARENS) {
4375 PL_modcount = RETURN_UNLIMITED_NUMBER;
4376 /* Treat \(@foo) like ordinary list, but still mark it as modi-
4377 fiable since some contexts need to know. */
4378 o->op_flags |= OPf_MOD;
4383 if (scalar_mod_type(o, type))
4385 ref(cUNOPo->op_first, o->op_type);
4392 /* Do not apply the lvsub flag for rv2[ah]v in scalar context. */
4393 if (type == OP_LEAVESUBLV && (
4394 (o->op_type != OP_RV2AV && o->op_type != OP_RV2HV)
4395 || (o->op_flags & OPf_WANT) != OPf_WANT_SCALAR
4397 o->op_private |= OPpMAYBE_LVSUB;
4401 PL_modcount = RETURN_UNLIMITED_NUMBER;
4407 if (type == OP_LEAVESUBLV)
4408 o->op_private |= OPpMAYBE_LVSUB;
4412 if (type == OP_LEAVESUBLV
4413 && (o->op_private & OPpAVHVSWITCH_MASK) + OP_EACH == OP_KEYS)
4414 o->op_private |= OPpMAYBE_LVSUB;
4418 PL_hints |= HINT_BLOCK_SCOPE;
4419 if (type == OP_LEAVESUBLV)
4420 o->op_private |= OPpMAYBE_LVSUB;
4425 ref(cUNOPo->op_first, o->op_type);
4429 PL_hints |= HINT_BLOCK_SCOPE;
4439 case OP_AELEMFAST_LEX:
4446 PL_modcount = RETURN_UNLIMITED_NUMBER;
4447 if (type == OP_REFGEN && o->op_flags & OPf_PARENS)
4449 /* Treat \(@foo) like ordinary list, but still mark it as modi-
4450 fiable since some contexts need to know. */
4451 o->op_flags |= OPf_MOD;
4454 if (scalar_mod_type(o, type))
4456 if ((o->op_flags & OPf_WANT) != OPf_WANT_SCALAR
4457 && type == OP_LEAVESUBLV)
4458 o->op_private |= OPpMAYBE_LVSUB;
4462 if (!type) /* local() */
4463 Perl_croak(aTHX_ "Can't localize lexical variable %" PNf,
4464 PNfARG(PAD_COMPNAME(o->op_targ)));
4465 if (!(o->op_private & OPpLVAL_INTRO)
4466 || ( type != OP_SASSIGN && type != OP_AASSIGN
4467 && PadnameIsSTATE(PAD_COMPNAME_SV(o->op_targ)) ))
4468 S_mark_padname_lvalue(aTHX_ PAD_COMPNAME_SV(o->op_targ));
4476 if (type != OP_LEAVESUBLV && !scalar_mod_type(NULL, type))
4480 if (o->op_private == 4) /* don't allow 4 arg substr as lvalue */
4486 if (type == OP_LEAVESUBLV)
4487 o->op_private |= OPpMAYBE_LVSUB;
4488 if (o->op_flags & OPf_KIDS && OpHAS_SIBLING(cBINOPo->op_first)) {
4489 /* we recurse rather than iterate here because the child
4490 * needs to be processed with a different 'type' parameter */
4492 /* substr and vec */
4493 /* If this op is in merely potential (non-fatal) modifiable
4494 context, then apply OP_ENTERSUB context to
4495 the kid op (to avoid croaking). Other-
4496 wise pass this op’s own type so the correct op is mentioned
4497 in error messages. */
4498 op_lvalue(OpSIBLING(cBINOPo->op_first),
4499 S_potential_mod_type(type)
4507 ref(cBINOPo->op_first, o->op_type);
4508 if (type == OP_ENTERSUB &&
4509 !(o->op_private & (OPpLVAL_INTRO | OPpDEREF)))
4510 o->op_private |= OPpLVAL_DEFER;
4511 if (type == OP_LEAVESUBLV)
4512 o->op_private |= OPpMAYBE_LVSUB;
4519 o->op_private |= OPpLVALUE;
4525 if (o->op_flags & OPf_KIDS)
4526 next_kid = cLISTOPo->op_last;
4531 if (o->op_flags & OPf_SPECIAL) /* do BLOCK */
4533 else if (!(o->op_flags & OPf_KIDS))
4536 if (o->op_targ != OP_LIST) {
4537 OP *sib = OpSIBLING(cLISTOPo->op_first);
4538 /* OP_TRANS and OP_TRANSR with argument have a weird optree
4545 * compared with things like OP_MATCH which have the argument
4551 * so handle specially to correctly get "Can't modify" croaks etc
4554 if (sib && (sib->op_type == OP_TRANS || sib->op_type == OP_TRANSR))
4556 /* this should trigger a "Can't modify transliteration" err */
4557 op_lvalue(sib, type);
4559 next_kid = cBINOPo->op_first;
4560 /* we assume OP_NULLs which aren't ex-list have no more than 2
4561 * children. If this assumption is wrong, increase the scan
4563 assert( !OpHAS_SIBLING(next_kid)
4564 || !OpHAS_SIBLING(OpSIBLING(next_kid)));
4570 next_kid = cLISTOPo->op_first;
4578 if (type == OP_LEAVESUBLV
4579 || !S_vivifies(cLOGOPo->op_first->op_type))
4580 next_kid = cLOGOPo->op_first;
4581 else if (type == OP_LEAVESUBLV
4582 || !S_vivifies(OpSIBLING(cLOGOPo->op_first)->op_type))
4583 next_kid = OpSIBLING(cLOGOPo->op_first);
4587 if (type == OP_NULL) { /* local */
4589 if (!FEATURE_MYREF_IS_ENABLED)
4590 Perl_croak(aTHX_ "The experimental declared_refs "
4591 "feature is not enabled");
4592 Perl_ck_warner_d(aTHX_
4593 packWARN(WARN_EXPERIMENTAL__DECLARED_REFS),
4594 "Declaring references is experimental");
4595 next_kid = cUNOPo->op_first;
4598 if (type != OP_AASSIGN && type != OP_SASSIGN
4599 && type != OP_ENTERLOOP)
4601 /* Don’t bother applying lvalue context to the ex-list. */
4602 kid = cUNOPx(cUNOPo->op_first)->op_first;
4603 assert (!OpHAS_SIBLING(kid));
4606 if (type == OP_NULL) /* local */
4608 if (type != OP_AASSIGN) goto nomod;
4609 kid = cUNOPo->op_first;
4612 const U8 ec = PL_parser ? PL_parser->error_count : 0;
4613 S_lvref(aTHX_ kid, type);
4614 if (!PL_parser || PL_parser->error_count == ec) {
4615 if (!FEATURE_REFALIASING_IS_ENABLED)
4617 "Experimental aliasing via reference not enabled");
4618 Perl_ck_warner_d(aTHX_
4619 packWARN(WARN_EXPERIMENTAL__REFALIASING),
4620 "Aliasing via reference is experimental");
4623 if (o->op_type == OP_REFGEN)
4624 op_null(cUNOPx(cUNOPo->op_first)->op_first); /* pushmark */
4629 if ((o->op_private & OPpSPLIT_ASSIGN)) {
4630 /* This is actually @array = split. */
4631 PL_modcount = RETURN_UNLIMITED_NUMBER;
4637 op_lvalue(cUNOPo->op_first, OP_ENTERSUB);
4641 /* [20011101.069 (#7861)] File test operators interpret OPf_REF to mean that
4642 their argument is a filehandle; thus \stat(".") should not set
4644 if (type == OP_REFGEN && OP_IS_STAT(o->op_type))
4647 if (type != OP_LEAVESUBLV)
4648 o->op_flags |= OPf_MOD;
4650 if (type == OP_AASSIGN || type == OP_SASSIGN)
4651 o->op_flags |= OPf_SPECIAL
4652 |(o->op_type == OP_ENTERSUB ? 0 : OPf_REF);
4653 else if (!type) { /* local() */
4656 o->op_private |= OPpLVAL_INTRO;
4657 o->op_flags &= ~OPf_SPECIAL;
4658 PL_hints |= HINT_BLOCK_SCOPE;
4663 Perl_ck_warner(aTHX_ packWARN(WARN_SYNTAX),
4664 "Useless localization of %s", OP_DESC(o));
4667 else if (type != OP_GREPSTART && type != OP_ENTERSUB
4668 && type != OP_LEAVESUBLV && o->op_type != OP_ENTERSUB)
4669 o->op_flags |= OPf_REF;
4674 return top_op; /* at top; no parents/siblings to try */
4675 if (OpHAS_SIBLING(o)) {
4676 next_kid = o->op_sibparent;
4677 if (!OpHAS_SIBLING(next_kid)) {
4678 /* a few node types don't recurse into their second child */
4679 OP *parent = next_kid->op_sibparent;
4680 I32 ptype = parent->op_type;
4681 if ( (ptype == OP_NULL && parent->op_targ != OP_LIST)