4 * Copyright (C) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
5 * 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 by Larry Wall and others
7 * You may distribute under the terms of either the GNU General Public
8 * License or the Artistic License, as specified in the README file.
13 * 'You see: Mr. Drogo, he married poor Miss Primula Brandybuck. She was
14 * our Mr. Bilbo's first cousin on the mother's side (her mother being the
15 * youngest of the Old Took's daughters); and Mr. Drogo was his second
16 * cousin. So Mr. Frodo is his first *and* second cousin, once removed
17 * either way, as the saying is, if you follow me.' --the Gaffer
19 * [p.23 of _The Lord of the Rings_, I/i: "A Long-Expected Party"]
22 /* This file contains the functions that create, manipulate and optimize
23 * the OP structures that hold a compiled perl program.
25 * Note that during the build of miniperl, a temporary copy of this file
26 * is made, called opmini.c.
28 * A Perl program is compiled into a tree of OP nodes. Each op contains:
29 * * structural OP pointers to its children and siblings (op_sibling,
30 * op_first etc) that define the tree structure;
31 * * execution order OP pointers (op_next, plus sometimes op_other,
32 * op_lastop etc) that define the execution sequence plus variants;
33 * * a pointer to the C "pp" function that would execute the op;
34 * * any data specific to that op.
35 * For example, an OP_CONST op points to the pp_const() function and to an
36 * SV containing the constant value. When pp_const() is executed, its job
37 * is to push that SV onto the stack.
39 * OPs are mainly created by the newFOO() functions, which are mainly
40 * called from the parser (in perly.y) as the code is parsed. For example
41 * the Perl code $a + $b * $c would cause the equivalent of the following
42 * to be called (oversimplifying a bit):
44 * newBINOP(OP_ADD, flags,
46 * newBINOP(OP_MULTIPLY, flags, newSVREF($b), newSVREF($c))
49 * As the parser reduces low-level rules, it creates little op subtrees;
50 * as higher-level rules are resolved, these subtrees get joined together
51 * as branches on a bigger subtree, until eventually a top-level rule like
52 * a subroutine definition is reduced, at which point there is one large
55 * The execution order pointers (op_next) are generated as the subtrees
56 * are joined together. Consider this sub-expression: A*B + C/D: at the
57 * point when it's just been parsed, the op tree looks like:
65 * with the intended execution order being:
67 * [PREV] => A => B => [*] => C => D => [/] => [+] => [NEXT]
69 * At this point all the nodes' op_next pointers will have been set,
71 * * we don't know what the [NEXT] node will be yet;
72 * * we don't know what the [PREV] node will be yet, but when it gets
73 * created and needs its op_next set, it needs to be set to point to
74 * A, which is non-obvious.
75 * To handle both those cases, we temporarily set the top node's
76 * op_next to point to the first node to be executed in this subtree (A in
77 * this case). This means that initially a subtree's op_next chain,
78 * starting from the top node, will visit each node in execution sequence
79 * then point back at the top node.
80 * When we embed this subtree in a larger tree, its top op_next is used
81 * to get the start node, then is set to point to its new neighbour.
82 * For example the two separate [*],A,B and [/],C,D subtrees would
84 * [*] => A; A => B; B => [*]
86 * [/] => C; C => D; D => [/]
87 * When these two subtrees were joined together to make the [+] subtree,
88 * [+]'s op_next was set to [*]'s op_next, i.e. A; then [*]'s op_next was
89 * set to point to [/]'s op_next, i.e. C.
91 * This op_next linking is done by the LINKLIST() macro and its underlying
92 * op_linklist() function. Given a top-level op, if its op_next is
93 * non-null, it's already been linked, so leave it. Otherwise link it with
94 * its children as described above, possibly recursively if any of the
95 * children have a null op_next.
97 * In summary: given a subtree, its top-level node's op_next will either
99 * NULL: the subtree hasn't been LINKLIST()ed yet;
100 * fake: points to the start op for this subtree;
101 * real: once the subtree has been embedded into a larger tree
106 Here's an older description from Larry.
108 Perl's compiler is essentially a 3-pass compiler with interleaved phases:
112 An execution-order pass
114 The bottom-up pass is represented by all the "newOP" routines and
115 the ck_ routines. The bottom-upness is actually driven by yacc.
116 So at the point that a ck_ routine fires, we have no idea what the
117 context is, either upward in the syntax tree, or either forward or
118 backward in the execution order. (The bottom-up parser builds that
119 part of the execution order it knows about, but if you follow the "next"
120 links around, you'll find it's actually a closed loop through the
123 Whenever the bottom-up parser gets to a node that supplies context to
124 its components, it invokes that portion of the top-down pass that applies
125 to that part of the subtree (and marks the top node as processed, so
126 if a node further up supplies context, it doesn't have to take the
127 plunge again). As a particular subcase of this, as the new node is
128 built, it takes all the closed execution loops of its subcomponents
129 and links them into a new closed loop for the higher level node. But
130 it's still not the real execution order.
132 The actual execution order is not known till we get a grammar reduction
133 to a top-level unit like a subroutine or file that will be called by
134 "name" rather than via a "next" pointer. At that point, we can call
135 into peep() to do that code's portion of the 3rd pass. It has to be
136 recursive, but it's recursive on basic blocks, not on tree nodes.
139 /* To implement user lexical pragmas, there needs to be a way at run time to
140 get the compile time state of %^H for that block. Storing %^H in every
141 block (or even COP) would be very expensive, so a different approach is
142 taken. The (running) state of %^H is serialised into a tree of HE-like
143 structs. Stores into %^H are chained onto the current leaf as a struct
144 refcounted_he * with the key and the value. Deletes from %^H are saved
145 with a value of PL_sv_placeholder. The state of %^H at any point can be
146 turned back into a regular HV by walking back up the tree from that point's
147 leaf, ignoring any key you've already seen (placeholder or not), storing
148 the rest into the HV structure, then removing the placeholders. Hence
149 memory is only used to store the %^H deltas from the enclosing COP, rather
150 than the entire %^H on each COP.
152 To cause actions on %^H to write out the serialisation records, it has
153 magic type 'H'. This magic (itself) does nothing, but its presence causes
154 the values to gain magic type 'h', which has entries for set and clear.
155 C<Perl_magic_sethint> updates C<PL_compiling.cop_hints_hash> with a store
156 record, with deletes written by C<Perl_magic_clearhint>. C<SAVEHINTS>
157 saves the current C<PL_compiling.cop_hints_hash> on the save stack, so that
158 it will be correctly restored when any inner compiling scope is exited.
164 #include "keywords.h"
168 #define CALL_PEEP(o) PL_peepp(aTHX_ o)
169 #define CALL_RPEEP(o) PL_rpeepp(aTHX_ o)
170 #define CALL_OPFREEHOOK(o) if (PL_opfreehook) PL_opfreehook(aTHX_ o)
172 static const char array_passed_to_stat[] = "Array passed to stat will be coerced to a scalar";
174 /* remove any leading "empty" ops from the op_next chain whose first
175 * node's address is stored in op_p. Store the updated address of the
176 * first node in op_p.
180 S_prune_chain_head(OP** op_p)
183 && ( (*op_p)->op_type == OP_NULL
184 || (*op_p)->op_type == OP_SCOPE
185 || (*op_p)->op_type == OP_SCALAR
186 || (*op_p)->op_type == OP_LINESEQ)
188 *op_p = (*op_p)->op_next;
192 /* See the explanatory comments above struct opslab in op.h. */
194 #ifdef PERL_DEBUG_READONLY_OPS
195 # define PERL_SLAB_SIZE 128
196 # define PERL_MAX_SLAB_SIZE 4096
197 # include <sys/mman.h>
200 #ifndef PERL_SLAB_SIZE
201 # define PERL_SLAB_SIZE 64
203 #ifndef PERL_MAX_SLAB_SIZE
204 # define PERL_MAX_SLAB_SIZE 2048
207 /* rounds up to nearest pointer */
208 #define SIZE_TO_PSIZE(x) (((x) + sizeof(I32 *) - 1)/sizeof(I32 *))
209 #define DIFF(o,p) ((size_t)((I32 **)(p) - (I32**)(o)))
211 /* requires double parens and aTHX_ */
212 #define DEBUG_S_warn(args) \
214 PerlIO_printf(Perl_debug_log, "%s", SvPVx_nolen(Perl_mess args)) \
218 /* malloc a new op slab (suitable for attaching to PL_compcv).
219 * sz is in units of pointers */
222 S_new_slab(pTHX_ OPSLAB *head, size_t sz)
226 /* opslot_offset is only U16 */
227 assert(sz < U16_MAX);
229 #ifdef PERL_DEBUG_READONLY_OPS
230 slab = (OPSLAB *) mmap(0, sz * sizeof(I32 *),
231 PROT_READ|PROT_WRITE,
232 MAP_ANON|MAP_PRIVATE, -1, 0);
233 DEBUG_m(PerlIO_printf(Perl_debug_log, "mapped %lu at %p\n",
234 (unsigned long) sz, slab));
235 if (slab == MAP_FAILED) {
236 perror("mmap failed");
240 slab = (OPSLAB *)PerlMemShared_calloc(sz, sizeof(I32 *));
242 slab->opslab_size = (U16)sz;
245 /* The context is unused in non-Windows */
248 slab->opslab_free_space = sz - DIFF(slab, &slab->opslab_slots);
249 slab->opslab_head = head ? head : slab;
250 DEBUG_S_warn((aTHX_ "allocated new op slab sz 0x%x, %p, head slab %p",
251 (unsigned int)slab->opslab_size, (void*)slab,
252 (void*)(slab->opslab_head)));
257 /* Returns a sz-sized block of memory (suitable for holding an op) from
258 * a free slot in the chain of op slabs attached to PL_compcv.
259 * Allocates a new slab if necessary.
260 * if PL_compcv isn't compiling, malloc() instead.
264 Perl_Slab_Alloc(pTHX_ size_t sz)
266 OPSLAB *head_slab; /* first slab in the chain */
272 /* We only allocate ops from the slab during subroutine compilation.
273 We find the slab via PL_compcv, hence that must be non-NULL. It could
274 also be pointing to a subroutine which is now fully set up (CvROOT()
275 pointing to the top of the optree for that sub), or a subroutine
276 which isn't using the slab allocator. If our sanity checks aren't met,
277 don't use a slab, but allocate the OP directly from the heap. */
278 if (!PL_compcv || CvROOT(PL_compcv)
279 || (CvSTART(PL_compcv) && !CvSLABBED(PL_compcv)))
281 o = (OP*)PerlMemShared_calloc(1, sz);
285 /* While the subroutine is under construction, the slabs are accessed via
286 CvSTART(), to avoid needing to expand PVCV by one pointer for something
287 unneeded at runtime. Once a subroutine is constructed, the slabs are
288 accessed via CvROOT(). So if CvSTART() is NULL, no slab has been
289 allocated yet. See the commit message for 8be227ab5eaa23f2 for more
291 if (!CvSTART(PL_compcv)) {
293 (OP *)(head_slab = S_new_slab(aTHX_ NULL, PERL_SLAB_SIZE));
294 CvSLABBED_on(PL_compcv);
295 head_slab->opslab_refcnt = 2; /* one for the CV; one for the new OP */
297 else ++(head_slab = (OPSLAB *)CvSTART(PL_compcv))->opslab_refcnt;
299 opsz = SIZE_TO_PSIZE(sz);
300 sz = opsz + OPSLOT_HEADER_P;
302 /* The slabs maintain a free list of OPs. In particular, constant folding
303 will free up OPs, so it makes sense to re-use them where possible. A
304 freed up slot is used in preference to a new allocation. */
305 if (head_slab->opslab_freed) {
306 OP **too = &head_slab->opslab_freed;
308 DEBUG_S_warn((aTHX_ "found free op at %p, slab %p, head slab %p",
310 (I32**)OpSLOT(o) - OpSLOT(o)->opslot_offset,
313 while (o && OpSLOT(o)->opslot_size < sz) {
314 DEBUG_S_warn((aTHX_ "Alas! too small"));
315 o = *(too = &o->op_next);
316 if (o) { DEBUG_S_warn((aTHX_ "found another free op at %p", (void*)o)); }
319 DEBUG_S_warn((aTHX_ "realloced op at %p, slab %p, head slab %p",
321 (I32**)OpSLOT(o) - OpSLOT(o)->opslot_offset,
324 Zero(o, opsz, I32 *);
330 #define INIT_OPSLOT(s) \
331 slot->opslot_offset = DIFF(slab2, slot) ; \
332 slot->opslot_size = s; \
333 slab2->opslab_free_space -= s; \
334 o = &slot->opslot_op; \
337 /* The partially-filled slab is next in the chain. */
338 slab2 = head_slab->opslab_next ? head_slab->opslab_next : head_slab;
339 if (slab2->opslab_free_space < sz) {
340 /* Remaining space is too small. */
341 /* If we can fit a BASEOP, add it to the free chain, so as not
343 if (slab2->opslab_free_space >= SIZE_TO_PSIZE(sizeof(OP)) + OPSLOT_HEADER_P) {
344 slot = &slab2->opslab_slots;
345 INIT_OPSLOT(slab2->opslab_free_space);
346 o->op_type = OP_FREED;
347 o->op_next = head_slab->opslab_freed;
348 head_slab->opslab_freed = o;
351 /* Create a new slab. Make this one twice as big. */
352 slab2 = S_new_slab(aTHX_ head_slab,
353 slab2->opslab_size > PERL_MAX_SLAB_SIZE / 2
355 : slab2->opslab_size * 2);
356 slab2->opslab_next = head_slab->opslab_next;
357 head_slab->opslab_next = slab2;
359 assert(slab2->opslab_size >= sz);
361 /* Create a new op slot */
363 ((I32 **)&slab2->opslab_slots
364 + slab2->opslab_free_space - sz);
365 assert(slot >= &slab2->opslab_slots);
367 DEBUG_S_warn((aTHX_ "allocating op at %p, slab %p, head slab %p",
368 (void*)o, (void*)slab2, (void*)head_slab));
371 /* moresib == 0, op_sibling == 0 implies a solitary unattached op */
372 assert(!o->op_moresib);
373 assert(!o->op_sibparent);
380 #ifdef PERL_DEBUG_READONLY_OPS
382 Perl_Slab_to_ro(pTHX_ OPSLAB *slab)
384 PERL_ARGS_ASSERT_SLAB_TO_RO;
386 if (slab->opslab_readonly) return;
387 slab->opslab_readonly = 1;
388 for (; slab; slab = slab->opslab_next) {
389 /*DEBUG_U(PerlIO_printf(Perl_debug_log,"mprotect ->ro %lu at %p\n",
390 (unsigned long) slab->opslab_size, slab));*/
391 if (mprotect(slab, slab->opslab_size * sizeof(I32 *), PROT_READ))
392 Perl_warn(aTHX_ "mprotect for %p %lu failed with %d", slab,
393 (unsigned long)slab->opslab_size, errno);
398 Perl_Slab_to_rw(pTHX_ OPSLAB *const slab)
402 PERL_ARGS_ASSERT_SLAB_TO_RW;
404 if (!slab->opslab_readonly) return;
406 for (; slab2; slab2 = slab2->opslab_next) {
407 /*DEBUG_U(PerlIO_printf(Perl_debug_log,"mprotect ->rw %lu at %p\n",
408 (unsigned long) size, slab2));*/
409 if (mprotect((void *)slab2, slab2->opslab_size * sizeof(I32 *),
410 PROT_READ|PROT_WRITE)) {
411 Perl_warn(aTHX_ "mprotect RW for %p %lu failed with %d", slab,
412 (unsigned long)slab2->opslab_size, errno);
415 slab->opslab_readonly = 0;
419 # define Slab_to_rw(op) NOOP
422 /* This cannot possibly be right, but it was copied from the old slab
423 allocator, to which it was originally added, without explanation, in
426 # define PerlMemShared PerlMem
429 /* make freed ops die if they're inadvertently executed */
434 DIE(aTHX_ "panic: freed op 0x%p called\n", PL_op);
439 /* Return the block of memory used by an op to the free list of
440 * the OP slab associated with that op.
444 Perl_Slab_Free(pTHX_ void *op)
446 OP * const o = (OP *)op;
449 PERL_ARGS_ASSERT_SLAB_FREE;
452 o->op_ppaddr = S_pp_freed;
455 if (!o->op_slabbed) {
457 PerlMemShared_free(op);
462 /* If this op is already freed, our refcount will get screwy. */
463 assert(o->op_type != OP_FREED);
464 o->op_type = OP_FREED;
465 o->op_next = slab->opslab_freed;
466 slab->opslab_freed = o;
467 DEBUG_S_warn((aTHX_ "freeing op at %p, slab %p, head slab %p",
469 (I32**)OpSLOT(o) - OpSLOT(o)->opslot_offset,
471 OpslabREFCNT_dec_padok(slab);
475 Perl_opslab_free_nopad(pTHX_ OPSLAB *slab)
477 const bool havepad = !!PL_comppad;
478 PERL_ARGS_ASSERT_OPSLAB_FREE_NOPAD;
481 PAD_SAVE_SETNULLPAD();
487 /* Free a chain of OP slabs. Should only be called after all ops contained
488 * in it have been freed. At this point, its reference count should be 1,
489 * because OpslabREFCNT_dec() skips doing rc-- when it detects that rc == 1,
490 * and just directly calls opslab_free().
491 * (Note that the reference count which PL_compcv held on the slab should
492 * have been removed once compilation of the sub was complete).
498 Perl_opslab_free(pTHX_ OPSLAB *slab)
501 PERL_ARGS_ASSERT_OPSLAB_FREE;
503 DEBUG_S_warn((aTHX_ "freeing slab %p", (void*)slab));
504 assert(slab->opslab_refcnt == 1);
506 slab2 = slab->opslab_next;
508 slab->opslab_refcnt = ~(size_t)0;
510 #ifdef PERL_DEBUG_READONLY_OPS
511 DEBUG_m(PerlIO_printf(Perl_debug_log, "Deallocate slab at %p\n",
513 if (munmap(slab, slab->opslab_size * sizeof(I32 *))) {
514 perror("munmap failed");
518 PerlMemShared_free(slab);
524 /* like opslab_free(), but first calls op_free() on any ops in the slab
525 * not marked as OP_FREED
529 Perl_opslab_force_free(pTHX_ OPSLAB *slab)
533 size_t savestack_count = 0;
535 PERL_ARGS_ASSERT_OPSLAB_FORCE_FREE;
538 OPSLOT *slot = (OPSLOT*)
539 ((I32**)&slab2->opslab_slots + slab2->opslab_free_space);
540 OPSLOT *end = (OPSLOT*)
541 ((I32**)slab2 + slab2->opslab_size);
543 slot = (OPSLOT*) ((I32**)slot + slot->opslot_size) )
545 if (slot->opslot_op.op_type != OP_FREED
546 && !(slot->opslot_op.op_savefree
552 assert(slot->opslot_op.op_slabbed);
553 op_free(&slot->opslot_op);
554 if (slab->opslab_refcnt == 1) goto free;
557 } while ((slab2 = slab2->opslab_next));
558 /* > 1 because the CV still holds a reference count. */
559 if (slab->opslab_refcnt > 1) { /* still referenced by the savestack */
561 assert(savestack_count == slab->opslab_refcnt-1);
563 /* Remove the CV’s reference count. */
564 slab->opslab_refcnt--;
571 #ifdef PERL_DEBUG_READONLY_OPS
573 Perl_op_refcnt_inc(pTHX_ OP *o)
576 OPSLAB *const slab = o->op_slabbed ? OpSLAB(o) : NULL;
577 if (slab && slab->opslab_readonly) {
590 Perl_op_refcnt_dec(pTHX_ OP *o)
593 OPSLAB *const slab = o->op_slabbed ? OpSLAB(o) : NULL;
595 PERL_ARGS_ASSERT_OP_REFCNT_DEC;
597 if (slab && slab->opslab_readonly) {
599 result = --o->op_targ;
602 result = --o->op_targ;
608 * In the following definition, the ", (OP*)0" is just to make the compiler
609 * think the expression is of the right type: croak actually does a Siglongjmp.
611 #define CHECKOP(type,o) \
612 ((PL_op_mask && PL_op_mask[type]) \
613 ? ( op_free((OP*)o), \
614 Perl_croak(aTHX_ "'%s' trapped by operation mask", PL_op_desc[type]), \
616 : PL_check[type](aTHX_ (OP*)o))
618 #define RETURN_UNLIMITED_NUMBER (PERL_INT_MAX / 2)
620 #define OpTYPE_set(o,type) \
622 o->op_type = (OPCODE)type; \
623 o->op_ppaddr = PL_ppaddr[type]; \
627 S_no_fh_allowed(pTHX_ OP *o)
629 PERL_ARGS_ASSERT_NO_FH_ALLOWED;
631 yyerror(Perl_form(aTHX_ "Missing comma after first argument to %s function",
637 S_too_few_arguments_pv(pTHX_ OP *o, const char* name, U32 flags)
639 PERL_ARGS_ASSERT_TOO_FEW_ARGUMENTS_PV;
640 yyerror_pv(Perl_form(aTHX_ "Not enough arguments for %s", name), flags);
645 S_too_many_arguments_pv(pTHX_ OP *o, const char *name, U32 flags)
647 PERL_ARGS_ASSERT_TOO_MANY_ARGUMENTS_PV;
649 yyerror_pv(Perl_form(aTHX_ "Too many arguments for %s", name), flags);
654 S_bad_type_pv(pTHX_ I32 n, const char *t, const OP *o, const OP *kid)
656 PERL_ARGS_ASSERT_BAD_TYPE_PV;
658 yyerror_pv(Perl_form(aTHX_ "Type of arg %d to %s must be %s (not %s)",
659 (int)n, PL_op_desc[(o)->op_type], t, OP_DESC(kid)), 0);
662 /* remove flags var, its unused in all callers, move to to right end since gv
663 and kid are always the same */
665 S_bad_type_gv(pTHX_ I32 n, GV *gv, const OP *kid, const char *t)
667 SV * const namesv = cv_name((CV *)gv, NULL, 0);
668 PERL_ARGS_ASSERT_BAD_TYPE_GV;
670 yyerror_pv(Perl_form(aTHX_ "Type of arg %d to %" SVf " must be %s (not %s)",
671 (int)n, SVfARG(namesv), t, OP_DESC(kid)), SvUTF8(namesv));
675 S_no_bareword_allowed(pTHX_ OP *o)
677 PERL_ARGS_ASSERT_NO_BAREWORD_ALLOWED;
679 qerror(Perl_mess(aTHX_
680 "Bareword \"%" SVf "\" not allowed while \"strict subs\" in use",
682 o->op_private &= ~OPpCONST_STRICT; /* prevent warning twice about the same OP */
685 /* "register" allocation */
688 Perl_allocmy(pTHX_ const char *const name, const STRLEN len, const U32 flags)
691 const bool is_our = (PL_parser->in_my == KEY_our);
693 PERL_ARGS_ASSERT_ALLOCMY;
695 if (flags & ~SVf_UTF8)
696 Perl_croak(aTHX_ "panic: allocmy illegal flag bits 0x%" UVxf,
699 /* complain about "my $<special_var>" etc etc */
703 || ( (flags & SVf_UTF8)
704 && isIDFIRST_utf8_safe((U8 *)name+1, name + len))
705 || (name[1] == '_' && len > 2)))
707 const char * const type =
708 PL_parser->in_my == KEY_sigvar ? "subroutine signature" :
709 PL_parser->in_my == KEY_state ? "\"state\"" : "\"my\"";
711 if (!(flags & SVf_UTF8 && UTF8_IS_START(name[1]))
713 && (!isPRINT(name[1]) || strchr("\t\n\r\f", name[1]))) {
714 /* diag_listed_as: Can't use global %s in %s */
715 yyerror(Perl_form(aTHX_ "Can't use global %c^%c%.*s in %s",
716 name[0], toCTRL(name[1]),
717 (int)(len - 2), name + 2,
720 yyerror_pv(Perl_form(aTHX_ "Can't use global %.*s in %s",
722 type), flags & SVf_UTF8);
726 /* allocate a spare slot and store the name in that slot */
728 off = pad_add_name_pvn(name, len,
729 (is_our ? padadd_OUR :
730 PL_parser->in_my == KEY_state ? padadd_STATE : 0),
731 PL_parser->in_my_stash,
733 /* $_ is always in main::, even with our */
734 ? (PL_curstash && !memEQs(name,len,"$_")
740 /* anon sub prototypes contains state vars should always be cloned,
741 * otherwise the state var would be shared between anon subs */
743 if (PL_parser->in_my == KEY_state && CvANON(PL_compcv))
744 CvCLONE_on(PL_compcv);
750 =head1 Optree Manipulation Functions
752 =for apidoc alloccopstash
754 Available only under threaded builds, this function allocates an entry in
755 C<PL_stashpad> for the stash passed to it.
762 Perl_alloccopstash(pTHX_ HV *hv)
764 PADOFFSET off = 0, o = 1;
765 bool found_slot = FALSE;
767 PERL_ARGS_ASSERT_ALLOCCOPSTASH;
769 if (PL_stashpad[PL_stashpadix] == hv) return PL_stashpadix;
771 for (; o < PL_stashpadmax; ++o) {
772 if (PL_stashpad[o] == hv) return PL_stashpadix = o;
773 if (!PL_stashpad[o] || SvTYPE(PL_stashpad[o]) != SVt_PVHV)
774 found_slot = TRUE, off = o;
777 Renew(PL_stashpad, PL_stashpadmax + 10, HV *);
778 Zero(PL_stashpad + PL_stashpadmax, 10, HV *);
779 off = PL_stashpadmax;
780 PL_stashpadmax += 10;
783 PL_stashpad[PL_stashpadix = off] = hv;
788 /* free the body of an op without examining its contents.
789 * Always use this rather than FreeOp directly */
792 S_op_destroy(pTHX_ OP *o)
802 Free an op and its children. Only use this when an op is no longer linked
809 Perl_op_free(pTHX_ OP *o)
815 bool went_up = FALSE; /* whether we reached the current node by
816 following the parent pointer from a child, and
817 so have already seen this node */
819 if (!o || o->op_type == OP_FREED)
822 if (o->op_private & OPpREFCOUNTED) {
823 /* if base of tree is refcounted, just decrement */
824 switch (o->op_type) {
834 refcnt = OpREFCNT_dec(o);
837 /* Need to find and remove any pattern match ops from
838 * the list we maintain for reset(). */
839 find_and_forget_pmops(o);
852 /* free child ops before ourself, (then free ourself "on the
855 if (!went_up && o->op_flags & OPf_KIDS) {
856 next_op = cUNOPo->op_first;
860 /* find the next node to visit, *then* free the current node
861 * (can't rely on o->op_* fields being valid after o has been
864 /* The next node to visit will be either the sibling, or the
865 * parent if no siblings left, or NULL if we've worked our way
866 * back up to the top node in the tree */
867 next_op = (o == top_op) ? NULL : o->op_sibparent;
868 went_up = cBOOL(!OpHAS_SIBLING(o)); /* parents are already visited */
870 /* Now process the current node */
872 /* Though ops may be freed twice, freeing the op after its slab is a
874 assert(!o->op_slabbed || OpSLAB(o)->opslab_refcnt != ~(size_t)0);
875 /* During the forced freeing of ops after compilation failure, kidops
876 may be freed before their parents. */
877 if (!o || o->op_type == OP_FREED)
882 /* an op should only ever acquire op_private flags that we know about.
883 * If this fails, you may need to fix something in regen/op_private.
884 * Don't bother testing if:
885 * * the op_ppaddr doesn't match the op; someone may have
886 * overridden the op and be doing strange things with it;
887 * * we've errored, as op flags are often left in an
888 * inconsistent state then. Note that an error when
889 * compiling the main program leaves PL_parser NULL, so
890 * we can't spot faults in the main code, only
891 * evaled/required code */
893 if ( o->op_ppaddr == PL_ppaddr[type]
895 && !PL_parser->error_count)
897 assert(!(o->op_private & ~PL_op_private_valid[type]));
902 /* Call the op_free hook if it has been set. Do it now so that it's called
903 * at the right time for refcounted ops, but still before all of the kids
908 type = (OPCODE)o->op_targ;
911 Slab_to_rw(OpSLAB(o));
913 /* COP* is not cleared by op_clear() so that we may track line
914 * numbers etc even after null() */
915 if (type == OP_NEXTSTATE || type == OP_DBSTATE) {
927 /* S_op_clear_gv(): free a GV attached to an OP */
931 void S_op_clear_gv(pTHX_ OP *o, PADOFFSET *ixp)
933 void S_op_clear_gv(pTHX_ OP *o, SV**svp)
937 GV *gv = (o->op_type == OP_GV || o->op_type == OP_GVSV
938 || o->op_type == OP_MULTIDEREF)
941 ? ((GV*)PAD_SVl(*ixp)) : NULL;
943 ? (GV*)(*svp) : NULL;
945 /* It's possible during global destruction that the GV is freed
946 before the optree. Whilst the SvREFCNT_inc is happy to bump from
947 0 to 1 on a freed SV, the corresponding SvREFCNT_dec from 1 to 0
948 will trigger an assertion failure, because the entry to sv_clear
949 checks that the scalar is not already freed. A check of for
950 !SvIS_FREED(gv) turns out to be invalid, because during global
951 destruction the reference count can be forced down to zero
952 (with SVf_BREAK set). In which case raising to 1 and then
953 dropping to 0 triggers cleanup before it should happen. I
954 *think* that this might actually be a general, systematic,
955 weakness of the whole idea of SVf_BREAK, in that code *is*
956 allowed to raise and lower references during global destruction,
957 so any *valid* code that happens to do this during global
958 destruction might well trigger premature cleanup. */
959 bool still_valid = gv && SvREFCNT(gv);
962 SvREFCNT_inc_simple_void(gv);
965 pad_swipe(*ixp, TRUE);
973 int try_downgrade = SvREFCNT(gv) == 2;
976 gv_try_downgrade(gv);
982 Perl_op_clear(pTHX_ OP *o)
987 PERL_ARGS_ASSERT_OP_CLEAR;
989 switch (o->op_type) {
990 case OP_NULL: /* Was holding old type, if any. */
993 case OP_ENTEREVAL: /* Was holding hints. */
994 case OP_ARGDEFELEM: /* Was holding signature index. */
998 if (!(o->op_flags & OPf_REF) || !OP_IS_STAT(o->op_type))
1005 S_op_clear_gv(aTHX_ o, &(cPADOPx(o)->op_padix));
1007 S_op_clear_gv(aTHX_ o, &(cSVOPx(o)->op_sv));
1010 case OP_METHOD_REDIR:
1011 case OP_METHOD_REDIR_SUPER:
1013 if (cMETHOPx(o)->op_rclass_targ) {
1014 pad_swipe(cMETHOPx(o)->op_rclass_targ, 1);
1015 cMETHOPx(o)->op_rclass_targ = 0;
1018 SvREFCNT_dec(cMETHOPx(o)->op_rclass_sv);
1019 cMETHOPx(o)->op_rclass_sv = NULL;
1022 case OP_METHOD_NAMED:
1023 case OP_METHOD_SUPER:
1024 SvREFCNT_dec(cMETHOPx(o)->op_u.op_meth_sv);
1025 cMETHOPx(o)->op_u.op_meth_sv = NULL;
1028 pad_swipe(o->op_targ, 1);
1035 SvREFCNT_dec(cSVOPo->op_sv);
1036 cSVOPo->op_sv = NULL;
1039 Even if op_clear does a pad_free for the target of the op,
1040 pad_free doesn't actually remove the sv that exists in the pad;
1041 instead it lives on. This results in that it could be reused as
1042 a target later on when the pad was reallocated.
1045 pad_swipe(o->op_targ,1);
1055 if (o->op_flags & (OPf_SPECIAL|OPf_STACKED|OPf_KIDS))
1060 if ( (o->op_type == OP_TRANS || o->op_type == OP_TRANSR)
1061 && (o->op_private & (OPpTRANS_FROM_UTF|OPpTRANS_TO_UTF)))
1064 if (cPADOPo->op_padix > 0) {
1065 pad_swipe(cPADOPo->op_padix, TRUE);
1066 cPADOPo->op_padix = 0;
1069 SvREFCNT_dec(cSVOPo->op_sv);
1070 cSVOPo->op_sv = NULL;
1074 PerlMemShared_free(cPVOPo->op_pv);
1075 cPVOPo->op_pv = NULL;
1079 op_free(cPMOPo->op_pmreplrootu.op_pmreplroot);
1083 if ( (o->op_private & OPpSPLIT_ASSIGN) /* @array = split */
1084 && !(o->op_flags & OPf_STACKED)) /* @{expr} = split */
1086 if (o->op_private & OPpSPLIT_LEX)
1087 pad_free(cPMOPo->op_pmreplrootu.op_pmtargetoff);
1090 pad_swipe(cPMOPo->op_pmreplrootu.op_pmtargetoff, TRUE);
1092 SvREFCNT_dec(MUTABLE_SV(cPMOPo->op_pmreplrootu.op_pmtargetgv));
1099 if (!(cPMOPo->op_pmflags & PMf_CODELIST_PRIVATE))
1100 op_free(cPMOPo->op_code_list);
1101 cPMOPo->op_code_list = NULL;
1102 forget_pmop(cPMOPo);
1103 cPMOPo->op_pmreplrootu.op_pmreplroot = NULL;
1104 /* we use the same protection as the "SAFE" version of the PM_ macros
1105 * here since sv_clean_all might release some PMOPs
1106 * after PL_regex_padav has been cleared
1107 * and the clearing of PL_regex_padav needs to
1108 * happen before sv_clean_all
1111 if(PL_regex_pad) { /* We could be in destruction */
1112 const IV offset = (cPMOPo)->op_pmoffset;
1113 ReREFCNT_dec(PM_GETRE(cPMOPo));
1114 PL_regex_pad[offset] = &PL_sv_undef;
1115 sv_catpvn_nomg(PL_regex_pad[0], (const char *)&offset,
1119 ReREFCNT_dec(PM_GETRE(cPMOPo));
1120 PM_SETRE(cPMOPo, NULL);
1126 PerlMemShared_free(cUNOP_AUXo->op_aux);
1129 case OP_MULTICONCAT:
1131 UNOP_AUX_item *aux = cUNOP_AUXo->op_aux;
1132 /* aux[PERL_MULTICONCAT_IX_PLAIN_PV] and/or
1133 * aux[PERL_MULTICONCAT_IX_UTF8_PV] point to plain and/or
1134 * utf8 shared strings */
1135 char *p1 = aux[PERL_MULTICONCAT_IX_PLAIN_PV].pv;
1136 char *p2 = aux[PERL_MULTICONCAT_IX_UTF8_PV].pv;
1138 PerlMemShared_free(p1);
1140 PerlMemShared_free(p2);
1141 PerlMemShared_free(aux);
1147 UNOP_AUX_item *items = cUNOP_AUXo->op_aux;
1148 UV actions = items->uv;
1150 bool is_hash = FALSE;
1153 switch (actions & MDEREF_ACTION_MASK) {
1156 actions = (++items)->uv;
1159 case MDEREF_HV_padhv_helem:
1162 case MDEREF_AV_padav_aelem:
1163 pad_free((++items)->pad_offset);
1166 case MDEREF_HV_gvhv_helem:
1169 case MDEREF_AV_gvav_aelem:
1171 S_op_clear_gv(aTHX_ o, &((++items)->pad_offset));
1173 S_op_clear_gv(aTHX_ o, &((++items)->sv));
1177 case MDEREF_HV_gvsv_vivify_rv2hv_helem:
1180 case MDEREF_AV_gvsv_vivify_rv2av_aelem:
1182 S_op_clear_gv(aTHX_ o, &((++items)->pad_offset));
1184 S_op_clear_gv(aTHX_ o, &((++items)->sv));
1186 goto do_vivify_rv2xv_elem;
1188 case MDEREF_HV_padsv_vivify_rv2hv_helem:
1191 case MDEREF_AV_padsv_vivify_rv2av_aelem:
1192 pad_free((++items)->pad_offset);
1193 goto do_vivify_rv2xv_elem;
1195 case MDEREF_HV_pop_rv2hv_helem:
1196 case MDEREF_HV_vivify_rv2hv_helem:
1199 do_vivify_rv2xv_elem:
1200 case MDEREF_AV_pop_rv2av_aelem:
1201 case MDEREF_AV_vivify_rv2av_aelem:
1203 switch (actions & MDEREF_INDEX_MASK) {
1204 case MDEREF_INDEX_none:
1207 case MDEREF_INDEX_const:
1211 pad_swipe((++items)->pad_offset, 1);
1213 SvREFCNT_dec((++items)->sv);
1219 case MDEREF_INDEX_padsv:
1220 pad_free((++items)->pad_offset);
1222 case MDEREF_INDEX_gvsv:
1224 S_op_clear_gv(aTHX_ o, &((++items)->pad_offset));
1226 S_op_clear_gv(aTHX_ o, &((++items)->sv));
1231 if (actions & MDEREF_FLAG_last)
1244 actions >>= MDEREF_SHIFT;
1247 /* start of malloc is at op_aux[-1], where the length is
1249 PerlMemShared_free(cUNOP_AUXo->op_aux - 1);
1254 if (o->op_targ > 0) {
1255 pad_free(o->op_targ);
1261 S_cop_free(pTHX_ COP* cop)
1263 PERL_ARGS_ASSERT_COP_FREE;
1266 if (! specialWARN(cop->cop_warnings))
1267 PerlMemShared_free(cop->cop_warnings);
1268 cophh_free(CopHINTHASH_get(cop));
1269 if (PL_curcop == cop)
1274 S_forget_pmop(pTHX_ PMOP *const o)
1276 HV * const pmstash = PmopSTASH(o);
1278 PERL_ARGS_ASSERT_FORGET_PMOP;
1280 if (pmstash && !SvIS_FREED(pmstash) && SvMAGICAL(pmstash)) {
1281 MAGIC * const mg = mg_find((const SV *)pmstash, PERL_MAGIC_symtab);
1283 PMOP **const array = (PMOP**) mg->mg_ptr;
1284 U32 count = mg->mg_len / sizeof(PMOP**);
1288 if (array[i] == o) {
1289 /* Found it. Move the entry at the end to overwrite it. */
1290 array[i] = array[--count];
1291 mg->mg_len = count * sizeof(PMOP**);
1292 /* Could realloc smaller at this point always, but probably
1293 not worth it. Probably worth free()ing if we're the
1296 Safefree(mg->mg_ptr);
1310 S_find_and_forget_pmops(pTHX_ OP *o)
1314 PERL_ARGS_ASSERT_FIND_AND_FORGET_PMOPS;
1317 switch (o->op_type) {
1322 forget_pmop((PMOP*)o);
1325 if (o->op_flags & OPf_KIDS) {
1326 o = cUNOPo->op_first;
1332 return; /* at top; no parents/siblings to try */
1333 if (OpHAS_SIBLING(o)) {
1334 o = o->op_sibparent; /* process next sibling */
1337 o = o->op_sibparent; /*try parent's next sibling */
1346 Neutralizes an op when it is no longer needed, but is still linked to from
1353 Perl_op_null(pTHX_ OP *o)
1357 PERL_ARGS_ASSERT_OP_NULL;
1359 if (o->op_type == OP_NULL)
1362 o->op_targ = o->op_type;
1363 OpTYPE_set(o, OP_NULL);
1367 Perl_op_refcnt_lock(pTHX)
1368 PERL_TSA_ACQUIRE(PL_op_mutex)
1373 PERL_UNUSED_CONTEXT;
1378 Perl_op_refcnt_unlock(pTHX)
1379 PERL_TSA_RELEASE(PL_op_mutex)
1384 PERL_UNUSED_CONTEXT;
1390 =for apidoc op_sibling_splice
1392 A general function for editing the structure of an existing chain of
1393 op_sibling nodes. By analogy with the perl-level C<splice()> function, allows
1394 you to delete zero or more sequential nodes, replacing them with zero or
1395 more different nodes. Performs the necessary op_first/op_last
1396 housekeeping on the parent node and op_sibling manipulation on the
1397 children. The last deleted node will be marked as as the last node by
1398 updating the op_sibling/op_sibparent or op_moresib field as appropriate.
1400 Note that op_next is not manipulated, and nodes are not freed; that is the
1401 responsibility of the caller. It also won't create a new list op for an
1402 empty list etc; use higher-level functions like op_append_elem() for that.
1404 C<parent> is the parent node of the sibling chain. It may passed as C<NULL> if
1405 the splicing doesn't affect the first or last op in the chain.
1407 C<start> is the node preceding the first node to be spliced. Node(s)
1408 following it will be deleted, and ops will be inserted after it. If it is
1409 C<NULL>, the first node onwards is deleted, and nodes are inserted at the
1412 C<del_count> is the number of nodes to delete. If zero, no nodes are deleted.
1413 If -1 or greater than or equal to the number of remaining kids, all
1414 remaining kids are deleted.
1416 C<insert> is the first of a chain of nodes to be inserted in place of the nodes.
1417 If C<NULL>, no nodes are inserted.
1419 The head of the chain of deleted ops is returned, or C<NULL> if no ops were
1424 action before after returns
1425 ------ ----- ----- -------
1428 splice(P, A, 2, X-Y-Z) | | B-C
1432 splice(P, NULL, 1, X-Y) | | A
1436 splice(P, NULL, 3, NULL) | | A-B-C
1440 splice(P, B, 0, X-Y) | | NULL
1444 For lower-level direct manipulation of C<op_sibparent> and C<op_moresib>,
1445 see C<L</OpMORESIB_set>>, C<L</OpLASTSIB_set>>, C<L</OpMAYBESIB_set>>.
1451 Perl_op_sibling_splice(OP *parent, OP *start, int del_count, OP* insert)
1455 OP *last_del = NULL;
1456 OP *last_ins = NULL;
1459 first = OpSIBLING(start);
1463 first = cLISTOPx(parent)->op_first;
1465 assert(del_count >= -1);
1467 if (del_count && first) {
1469 while (--del_count && OpHAS_SIBLING(last_del))
1470 last_del = OpSIBLING(last_del);
1471 rest = OpSIBLING(last_del);
1472 OpLASTSIB_set(last_del, NULL);
1479 while (OpHAS_SIBLING(last_ins))
1480 last_ins = OpSIBLING(last_ins);
1481 OpMAYBESIB_set(last_ins, rest, NULL);
1487 OpMAYBESIB_set(start, insert, NULL);
1491 cLISTOPx(parent)->op_first = insert;
1493 parent->op_flags |= OPf_KIDS;
1495 parent->op_flags &= ~OPf_KIDS;
1499 /* update op_last etc */
1506 /* ought to use OP_CLASS(parent) here, but that can't handle
1507 * ex-foo OP_NULL ops. Also note that XopENTRYCUSTOM() can't
1509 type = parent->op_type;
1510 if (type == OP_CUSTOM) {
1512 type = XopENTRYCUSTOM(parent, xop_class);
1515 if (type == OP_NULL)
1516 type = parent->op_targ;
1517 type = PL_opargs[type] & OA_CLASS_MASK;
1520 lastop = last_ins ? last_ins : start ? start : NULL;
1521 if ( type == OA_BINOP
1522 || type == OA_LISTOP
1526 cLISTOPx(parent)->op_last = lastop;
1529 OpLASTSIB_set(lastop, parent);
1531 return last_del ? first : NULL;
1534 Perl_croak_nocontext("panic: op_sibling_splice(): NULL parent");
1538 =for apidoc op_parent
1540 Returns the parent OP of C<o>, if it has a parent. Returns C<NULL> otherwise.
1546 Perl_op_parent(OP *o)
1548 PERL_ARGS_ASSERT_OP_PARENT;
1549 while (OpHAS_SIBLING(o))
1551 return o->op_sibparent;
1554 /* replace the sibling following start with a new UNOP, which becomes
1555 * the parent of the original sibling; e.g.
1557 * op_sibling_newUNOP(P, A, unop-args...)
1565 * where U is the new UNOP.
1567 * parent and start args are the same as for op_sibling_splice();
1568 * type and flags args are as newUNOP().
1570 * Returns the new UNOP.
1574 S_op_sibling_newUNOP(pTHX_ OP *parent, OP *start, I32 type, I32 flags)
1578 kid = op_sibling_splice(parent, start, 1, NULL);
1579 newop = newUNOP(type, flags, kid);
1580 op_sibling_splice(parent, start, 0, newop);
1585 /* lowest-level newLOGOP-style function - just allocates and populates
1586 * the struct. Higher-level stuff should be done by S_new_logop() /
1587 * newLOGOP(). This function exists mainly to avoid op_first assignment
1588 * being spread throughout this file.
1592 Perl_alloc_LOGOP(pTHX_ I32 type, OP *first, OP* other)
1597 NewOp(1101, logop, 1, LOGOP);
1598 OpTYPE_set(logop, type);
1599 logop->op_first = first;
1600 logop->op_other = other;
1602 logop->op_flags = OPf_KIDS;
1603 while (kid && OpHAS_SIBLING(kid))
1604 kid = OpSIBLING(kid);
1606 OpLASTSIB_set(kid, (OP*)logop);
1611 /* Contextualizers */
1614 =for apidoc op_contextualize
1616 Applies a syntactic context to an op tree representing an expression.
1617 C<o> is the op tree, and C<context> must be C<G_SCALAR>, C<G_ARRAY>,
1618 or C<G_VOID> to specify the context to apply. The modified op tree
1625 Perl_op_contextualize(pTHX_ OP *o, I32 context)
1627 PERL_ARGS_ASSERT_OP_CONTEXTUALIZE;
1629 case G_SCALAR: return scalar(o);
1630 case G_ARRAY: return list(o);
1631 case G_VOID: return scalarvoid(o);
1633 Perl_croak(aTHX_ "panic: op_contextualize bad context %ld",
1640 =for apidoc op_linklist
1641 This function is the implementation of the L</LINKLIST> macro. It should
1642 not be called directly.
1649 Perl_op_linklist(pTHX_ OP *o)
1656 PERL_ARGS_ASSERT_OP_LINKLIST;
1659 /* Descend down the tree looking for any unprocessed subtrees to
1662 if (o->op_flags & OPf_KIDS) {
1663 o = cUNOPo->op_first;
1666 o->op_next = o; /* leaf node; link to self initially */
1669 /* if we're at the top level, there either weren't any children
1670 * to process, or we've worked our way back to the top. */
1674 /* o is now processed. Next, process any sibling subtrees */
1676 if (OpHAS_SIBLING(o)) {
1681 /* Done all the subtrees at this level. Go back up a level and
1682 * link the parent in with all its (processed) children.
1685 o = o->op_sibparent;
1686 assert(!o->op_next);
1687 prevp = &(o->op_next);
1688 kid = (o->op_flags & OPf_KIDS) ? cUNOPo->op_first : NULL;
1690 *prevp = kid->op_next;
1691 prevp = &(kid->op_next);
1692 kid = OpSIBLING(kid);
1700 S_scalarkids(pTHX_ OP *o)
1702 if (o && o->op_flags & OPf_KIDS) {
1704 for (kid = cLISTOPo->op_first; kid; kid = OpSIBLING(kid))
1711 S_scalarboolean(pTHX_ OP *o)
1713 PERL_ARGS_ASSERT_SCALARBOOLEAN;
1715 if ((o->op_type == OP_SASSIGN && cBINOPo->op_first->op_type == OP_CONST &&
1716 !(cBINOPo->op_first->op_flags & OPf_SPECIAL)) ||
1717 (o->op_type == OP_NOT && cUNOPo->op_first->op_type == OP_SASSIGN &&
1718 cBINOPx(cUNOPo->op_first)->op_first->op_type == OP_CONST &&
1719 !(cBINOPx(cUNOPo->op_first)->op_first->op_flags & OPf_SPECIAL))) {
1720 if (ckWARN(WARN_SYNTAX)) {
1721 const line_t oldline = CopLINE(PL_curcop);
1723 if (PL_parser && PL_parser->copline != NOLINE) {
1724 /* This ensures that warnings are reported at the first line
1725 of the conditional, not the last. */
1726 CopLINE_set(PL_curcop, PL_parser->copline);
1728 Perl_warner(aTHX_ packWARN(WARN_SYNTAX), "Found = in conditional, should be ==");
1729 CopLINE_set(PL_curcop, oldline);
1736 S_op_varname_subscript(pTHX_ const OP *o, int subscript_type)
1739 assert(o->op_type == OP_PADAV || o->op_type == OP_RV2AV ||
1740 o->op_type == OP_PADHV || o->op_type == OP_RV2HV);
1742 const char funny = o->op_type == OP_PADAV
1743 || o->op_type == OP_RV2AV ? '@' : '%';
1744 if (o->op_type == OP_RV2AV || o->op_type == OP_RV2HV) {
1746 if (cUNOPo->op_first->op_type != OP_GV
1747 || !(gv = cGVOPx_gv(cUNOPo->op_first)))
1749 return varname(gv, funny, 0, NULL, 0, subscript_type);
1752 varname(MUTABLE_GV(PL_compcv), funny, o->op_targ, NULL, 0, subscript_type);
1757 S_op_varname(pTHX_ const OP *o)
1759 return S_op_varname_subscript(aTHX_ o, 1);
1763 S_op_pretty(pTHX_ const OP *o, SV **retsv, const char **retpv)
1764 { /* or not so pretty :-) */
1765 if (o->op_type == OP_CONST) {
1767 if (SvPOK(*retsv)) {
1769 *retsv = sv_newmortal();
1770 pv_pretty(*retsv, SvPVX_const(sv), SvCUR(sv), 32, NULL, NULL,
1771 PERL_PV_PRETTY_DUMP |PERL_PV_ESCAPE_UNI_DETECT);
1773 else if (!SvOK(*retsv))
1776 else *retpv = "...";
1780 S_scalar_slice_warning(pTHX_ const OP *o)
1783 const bool h = o->op_type == OP_HSLICE
1784 || (o->op_type == OP_NULL && o->op_targ == OP_HSLICE);
1790 SV *keysv = NULL; /* just to silence compiler warnings */
1791 const char *key = NULL;
1793 if (!(o->op_private & OPpSLICEWARNING))
1795 if (PL_parser && PL_parser->error_count)
1796 /* This warning can be nonsensical when there is a syntax error. */
1799 kid = cLISTOPo->op_first;
1800 kid = OpSIBLING(kid); /* get past pushmark */
1801 /* weed out false positives: any ops that can return lists */
1802 switch (kid->op_type) {
1828 /* Don't warn if we have a nulled list either. */
1829 if (kid->op_type == OP_NULL && kid->op_targ == OP_LIST)
1832 assert(OpSIBLING(kid));
1833 name = S_op_varname(aTHX_ OpSIBLING(kid));
1834 if (!name) /* XS module fiddling with the op tree */
1836 S_op_pretty(aTHX_ kid, &keysv, &key);
1837 assert(SvPOK(name));
1838 sv_chop(name,SvPVX(name)+1);
1840 /* diag_listed_as: Scalar value @%s[%s] better written as $%s[%s] */
1841 Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
1842 "Scalar value @%" SVf "%c%s%c better written as $%" SVf
1844 SVfARG(name), lbrack, key, rbrack, SVfARG(name),
1845 lbrack, key, rbrack);
1847 /* diag_listed_as: Scalar value @%s[%s] better written as $%s[%s] */
1848 Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
1849 "Scalar value @%" SVf "%c%" SVf "%c better written as $%"
1851 SVfARG(name), lbrack, SVfARG(keysv), rbrack,
1852 SVfARG(name), lbrack, SVfARG(keysv), rbrack);
1857 /* apply scalar context to the o subtree */
1860 Perl_scalar(pTHX_ OP *o)
1865 OP *next_kid = NULL; /* what op (if any) to process next */
1868 /* assumes no premature commitment */
1869 if (!o || (PL_parser && PL_parser->error_count)
1870 || (o->op_flags & OPf_WANT)
1871 || o->op_type == OP_RETURN)
1876 o->op_flags = (o->op_flags & ~OPf_WANT) | OPf_WANT_SCALAR;
1878 switch (o->op_type) {
1880 scalar(cBINOPo->op_first);
1881 /* convert what initially looked like a list repeat into a
1882 * scalar repeat, e.g. $s = (1) x $n
1884 if (o->op_private & OPpREPEAT_DOLIST) {
1885 kid = cLISTOPx(cUNOPo->op_first)->op_first;
1886 assert(kid->op_type == OP_PUSHMARK);
1887 if (OpHAS_SIBLING(kid) && !OpHAS_SIBLING(OpSIBLING(kid))) {
1888 op_null(cLISTOPx(cUNOPo->op_first)->op_first);
1889 o->op_private &=~ OPpREPEAT_DOLIST;
1897 /* impose scalar context on everything except the condition */
1898 next_kid = OpSIBLING(cUNOPo->op_first);
1902 if (o->op_flags & OPf_KIDS)
1903 next_kid = cUNOPo->op_first; /* do all kids */
1906 /* the children of these ops are usually a list of statements,
1907 * except the leaves, whose first child is a corresponding enter
1912 kid = cLISTOPo->op_first;
1916 kid = cLISTOPo->op_first;
1918 kid = OpSIBLING(kid);
1921 OP *sib = OpSIBLING(kid);
1922 /* Apply void context to all kids except the last, which
1923 * is scalar (ignoring a trailing ex-nextstate in determining
1924 * if it's the last kid). E.g.
1925 * $scalar = do { void; void; scalar }
1926 * Except that 'when's are always scalar, e.g.
1927 * $scalar = do { given(..) {
1928 * when (..) { scalar }
1929 * when (..) { scalar }
1934 || ( !OpHAS_SIBLING(sib)
1935 && sib->op_type == OP_NULL
1936 && ( sib->op_targ == OP_NEXTSTATE
1937 || sib->op_targ == OP_DBSTATE )
1941 /* tail call optimise calling scalar() on the last kid */
1945 else if (kid->op_type == OP_LEAVEWHEN)
1951 NOT_REACHED; /* NOTREACHED */
1955 Perl_ck_warner(aTHX_ packWARN(WARN_VOID), "Useless use of sort in scalar context");
1961 /* Warn about scalar context */
1962 const char lbrack = o->op_type == OP_KVHSLICE ? '{' : '[';
1963 const char rbrack = o->op_type == OP_KVHSLICE ? '}' : ']';
1966 const char *key = NULL;
1968 /* This warning can be nonsensical when there is a syntax error. */
1969 if (PL_parser && PL_parser->error_count)
1972 if (!ckWARN(WARN_SYNTAX)) break;
1974 kid = cLISTOPo->op_first;
1975 kid = OpSIBLING(kid); /* get past pushmark */
1976 assert(OpSIBLING(kid));
1977 name = S_op_varname(aTHX_ OpSIBLING(kid));
1978 if (!name) /* XS module fiddling with the op tree */
1980 S_op_pretty(aTHX_ kid, &keysv, &key);
1981 assert(SvPOK(name));
1982 sv_chop(name,SvPVX(name)+1);
1984 /* diag_listed_as: %%s[%s] in scalar context better written as $%s[%s] */
1985 Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
1986 "%%%" SVf "%c%s%c in scalar context better written "
1987 "as $%" SVf "%c%s%c",
1988 SVfARG(name), lbrack, key, rbrack, SVfARG(name),
1989 lbrack, key, rbrack);
1991 /* diag_listed_as: %%s[%s] in scalar context better written as $%s[%s] */
1992 Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
1993 "%%%" SVf "%c%" SVf "%c in scalar context better "
1994 "written as $%" SVf "%c%" SVf "%c",
1995 SVfARG(name), lbrack, SVfARG(keysv), rbrack,
1996 SVfARG(name), lbrack, SVfARG(keysv), rbrack);
2000 /* If next_kid is set, someone in the code above wanted us to process
2001 * that kid and all its remaining siblings. Otherwise, work our way
2002 * back up the tree */
2006 return top_op; /* at top; no parents/siblings to try */
2007 if (OpHAS_SIBLING(o))
2008 next_kid = o->op_sibparent;
2010 o = o->op_sibparent; /*try parent's next sibling */
2011 switch (o->op_type) {
2017 /* should really restore PL_curcop to its old value, but
2018 * setting it to PL_compiling is better than do nothing */
2019 PL_curcop = &PL_compiling;
2028 /* apply void context to the optree arg */
2031 Perl_scalarvoid(pTHX_ OP *arg)
2038 PERL_ARGS_ASSERT_SCALARVOID;
2042 SV *useless_sv = NULL;
2043 const char* useless = NULL;
2044 OP * next_kid = NULL;
2046 if (o->op_type == OP_NEXTSTATE
2047 || o->op_type == OP_DBSTATE
2048 || (o->op_type == OP_NULL && (o->op_targ == OP_NEXTSTATE
2049 || o->op_targ == OP_DBSTATE)))
2050 PL_curcop = (COP*)o; /* for warning below */
2052 /* assumes no premature commitment */
2053 want = o->op_flags & OPf_WANT;
2054 if ((want && want != OPf_WANT_SCALAR)
2055 || (PL_parser && PL_parser->error_count)
2056 || o->op_type == OP_RETURN || o->op_type == OP_REQUIRE || o->op_type == OP_LEAVEWHEN)
2061 if ((o->op_private & OPpTARGET_MY)
2062 && (PL_opargs[o->op_type] & OA_TARGLEX))/* OPp share the meaning */
2064 /* newASSIGNOP has already applied scalar context, which we
2065 leave, as if this op is inside SASSIGN. */
2069 o->op_flags = (o->op_flags & ~OPf_WANT) | OPf_WANT_VOID;
2071 switch (o->op_type) {
2073 if (!(PL_opargs[o->op_type] & OA_FOLDCONST))
2077 if (o->op_flags & OPf_STACKED)
2079 if (o->op_type == OP_REPEAT)
2080 scalar(cBINOPo->op_first);
2083 if ((o->op_flags & OPf_STACKED) &&
2084 !(o->op_private & OPpCONCAT_NESTED))
2088 if (o->op_private == 4)
2123 case OP_GETSOCKNAME:
2124 case OP_GETPEERNAME:
2129 case OP_GETPRIORITY:
2154 useless = OP_DESC(o);
2164 case OP_AELEMFAST_LEX:
2168 if (!(o->op_private & (OPpLVAL_INTRO|OPpOUR_INTRO)))
2169 /* Otherwise it's "Useless use of grep iterator" */
2170 useless = OP_DESC(o);
2174 if (!(o->op_private & OPpSPLIT_ASSIGN))
2175 useless = OP_DESC(o);
2179 kid = cUNOPo->op_first;
2180 if (kid->op_type != OP_MATCH && kid->op_type != OP_SUBST &&
2181 kid->op_type != OP_TRANS && kid->op_type != OP_TRANSR) {
2184 useless = "negative pattern binding (!~)";
2188 if (cPMOPo->op_pmflags & PMf_NONDESTRUCT)
2189 useless = "non-destructive substitution (s///r)";
2193 useless = "non-destructive transliteration (tr///r)";
2200 if (!(o->op_private & (OPpLVAL_INTRO|OPpOUR_INTRO)) &&
2201 (!OpHAS_SIBLING(o) || OpSIBLING(o)->op_type != OP_READLINE))
2202 useless = "a variable";
2207 if (cSVOPo->op_private & OPpCONST_STRICT)
2208 no_bareword_allowed(o);
2210 if (ckWARN(WARN_VOID)) {
2212 /* don't warn on optimised away booleans, eg
2213 * use constant Foo, 5; Foo || print; */
2214 if (cSVOPo->op_private & OPpCONST_SHORTCIRCUIT)
2216 /* the constants 0 and 1 are permitted as they are
2217 conventionally used as dummies in constructs like
2218 1 while some_condition_with_side_effects; */
2219 else if (SvNIOK(sv) && ((nv = SvNV(sv)) == 0.0 || nv == 1.0))
2221 else if (SvPOK(sv)) {
2222 SV * const dsv = newSVpvs("");
2224 = Perl_newSVpvf(aTHX_
2226 pv_pretty(dsv, SvPVX_const(sv),
2227 SvCUR(sv), 32, NULL, NULL,
2229 | PERL_PV_ESCAPE_NOCLEAR
2230 | PERL_PV_ESCAPE_UNI_DETECT));
2231 SvREFCNT_dec_NN(dsv);
2233 else if (SvOK(sv)) {
2234 useless_sv = Perl_newSVpvf(aTHX_ "a constant (%" SVf ")", SVfARG(sv));
2237 useless = "a constant (undef)";
2240 op_null(o); /* don't execute or even remember it */
2244 OpTYPE_set(o, OP_PREINC); /* pre-increment is faster */
2248 OpTYPE_set(o, OP_PREDEC); /* pre-decrement is faster */
2252 OpTYPE_set(o, OP_I_PREINC); /* pre-increment is faster */
2256 OpTYPE_set(o, OP_I_PREDEC); /* pre-decrement is faster */
2261 UNOP *refgen, *rv2cv;
2264 if ((o->op_private & ~OPpASSIGN_BACKWARDS) != 2)
2267 rv2gv = ((BINOP *)o)->op_last;
2268 if (!rv2gv || rv2gv->op_type != OP_RV2GV)
2271 refgen = (UNOP *)((BINOP *)o)->op_first;
2273 if (!refgen || (refgen->op_type != OP_REFGEN
2274 && refgen->op_type != OP_SREFGEN))
2277 exlist = (LISTOP *)refgen->op_first;
2278 if (!exlist || exlist->op_type != OP_NULL
2279 || exlist->op_targ != OP_LIST)
2282 if (exlist->op_first->op_type != OP_PUSHMARK
2283 && exlist->op_first != exlist->op_last)
2286 rv2cv = (UNOP*)exlist->op_last;
2288 if (rv2cv->op_type != OP_RV2CV)
2291 assert ((rv2gv->op_private & OPpDONT_INIT_GV) == 0);
2292 assert ((o->op_private & OPpASSIGN_CV_TO_GV) == 0);
2293 assert ((rv2cv->op_private & OPpMAY_RETURN_CONSTANT) == 0);
2295 o->op_private |= OPpASSIGN_CV_TO_GV;
2296 rv2gv->op_private |= OPpDONT_INIT_GV;
2297 rv2cv->op_private |= OPpMAY_RETURN_CONSTANT;
2309 kid = cLOGOPo->op_first;
2310 if (kid->op_type == OP_NOT
2311 && (kid->op_flags & OPf_KIDS)) {
2312 if (o->op_type == OP_AND) {
2313 OpTYPE_set(o, OP_OR);
2315 OpTYPE_set(o, OP_AND);
2325 next_kid = OpSIBLING(cUNOPo->op_first);
2329 if (o->op_flags & OPf_STACKED)
2336 if (!(o->op_flags & OPf_KIDS))
2347 next_kid = cLISTOPo->op_first;
2350 /* If the first kid after pushmark is something that the padrange
2351 optimisation would reject, then null the list and the pushmark.
2353 if ((kid = cLISTOPo->op_first)->op_type == OP_PUSHMARK
2354 && ( !(kid = OpSIBLING(kid))
2355 || ( kid->op_type != OP_PADSV
2356 && kid->op_type != OP_PADAV
2357 && kid->op_type != OP_PADHV)
2358 || kid->op_private & ~OPpLVAL_INTRO
2359 || !(kid = OpSIBLING(kid))
2360 || ( kid->op_type != OP_PADSV
2361 && kid->op_type != OP_PADAV
2362 && kid->op_type != OP_PADHV)
2363 || kid->op_private & ~OPpLVAL_INTRO)
2365 op_null(cUNOPo->op_first); /* NULL the pushmark */
2366 op_null(o); /* NULL the list */
2378 /* mortalise it, in case warnings are fatal. */
2379 Perl_ck_warner(aTHX_ packWARN(WARN_VOID),
2380 "Useless use of %" SVf " in void context",
2381 SVfARG(sv_2mortal(useless_sv)));
2384 Perl_ck_warner(aTHX_ packWARN(WARN_VOID),
2385 "Useless use of %s in void context",
2390 /* if a kid hasn't been nominated to process, continue with the
2391 * next sibling, or if no siblings left, go back to the parent's
2392 * siblings and so on
2396 return arg; /* at top; no parents/siblings to try */
2397 if (OpHAS_SIBLING(o))
2398 next_kid = o->op_sibparent;
2400 o = o->op_sibparent; /*try parent's next sibling */
2410 S_listkids(pTHX_ OP *o)
2412 if (o && o->op_flags & OPf_KIDS) {
2414 for (kid = cLISTOPo->op_first; kid; kid = OpSIBLING(kid))
2421 /* apply list context to the o subtree */
2424 Perl_list(pTHX_ OP *o)
2429 OP *next_kid = NULL; /* what op (if any) to process next */
2433 /* assumes no premature commitment */
2434 if (!o || (o->op_flags & OPf_WANT)
2435 || (PL_parser && PL_parser->error_count)
2436 || o->op_type == OP_RETURN)
2441 if ((o->op_private & OPpTARGET_MY)
2442 && (PL_opargs[o->op_type] & OA_TARGLEX))/* OPp share the meaning */
2444 goto do_next; /* As if inside SASSIGN */
2447 o->op_flags = (o->op_flags & ~OPf_WANT) | OPf_WANT_LIST;
2449 switch (o->op_type) {
2451 if (o->op_private & OPpREPEAT_DOLIST
2452 && !(o->op_flags & OPf_STACKED))
2454 list(cBINOPo->op_first);
2455 kid = cBINOPo->op_last;
2456 /* optimise away (.....) x 1 */
2457 if (kid->op_type == OP_CONST && SvIOK(kSVOP_sv)
2458 && SvIVX(kSVOP_sv) == 1)
2460 op_null(o); /* repeat */
2461 op_null(cUNOPx(cBINOPo->op_first)->op_first);/* pushmark */
2463 op_free(op_sibling_splice(o, cBINOPo->op_first, 1, NULL));
2471 /* impose list context on everything except the condition */
2472 next_kid = OpSIBLING(cUNOPo->op_first);
2476 if (!(o->op_flags & OPf_KIDS))
2478 /* possibly flatten 1..10 into a constant array */
2479 if (!o->op_next && cUNOPo->op_first->op_type == OP_FLOP) {
2480 list(cBINOPo->op_first);
2481 gen_constant_list(o);
2484 next_kid = cUNOPo->op_first; /* do all kids */
2488 if (cLISTOPo->op_first->op_type == OP_PUSHMARK) {
2489 op_null(cUNOPo->op_first); /* NULL the pushmark */
2490 op_null(o); /* NULL the list */
2492 if (o->op_flags & OPf_KIDS)
2493 next_kid = cUNOPo->op_first; /* do all kids */
2496 /* the children of these ops are usually a list of statements,
2497 * except the leaves, whose first child is a corresponding enter
2501 kid = cLISTOPo->op_first;
2505 kid = cLISTOPo->op_first;
2507 kid = OpSIBLING(kid);
2510 OP *sib = OpSIBLING(kid);
2511 /* Apply void context to all kids except the last, which
2513 * @a = do { void; void; list }
2514 * Except that 'when's are always list context, e.g.
2515 * @a = do { given(..) {
2516 * when (..) { list }
2517 * when (..) { list }
2522 /* tail call optimise calling list() on the last kid */
2526 else if (kid->op_type == OP_LEAVEWHEN)
2532 NOT_REACHED; /* NOTREACHED */
2537 /* If next_kid is set, someone in the code above wanted us to process
2538 * that kid and all its remaining siblings. Otherwise, work our way
2539 * back up the tree */
2543 return top_op; /* at top; no parents/siblings to try */
2544 if (OpHAS_SIBLING(o))
2545 next_kid = o->op_sibparent;
2547 o = o->op_sibparent; /*try parent's next sibling */
2548 switch (o->op_type) {
2554 /* should really restore PL_curcop to its old value, but
2555 * setting it to PL_compiling is better than do nothing */
2556 PL_curcop = &PL_compiling;
2568 S_scalarseq(pTHX_ OP *o)
2571 const OPCODE type = o->op_type;
2573 if (type == OP_LINESEQ || type == OP_SCOPE ||
2574 type == OP_LEAVE || type == OP_LEAVETRY)
2577 for (kid = cLISTOPo->op_first; kid; kid = sib) {
2578 if ((sib = OpSIBLING(kid))
2579 && ( OpHAS_SIBLING(sib) || sib->op_type != OP_NULL
2580 || ( sib->op_targ != OP_NEXTSTATE
2581 && sib->op_targ != OP_DBSTATE )))
2586 PL_curcop = &PL_compiling;
2588 o->op_flags &= ~OPf_PARENS;
2589 if (PL_hints & HINT_BLOCK_SCOPE)
2590 o->op_flags |= OPf_PARENS;
2593 o = newOP(OP_STUB, 0);
2598 S_modkids(pTHX_ OP *o, I32 type)
2600 if (o && o->op_flags & OPf_KIDS) {
2602 for (kid = cLISTOPo->op_first; kid; kid = OpSIBLING(kid))
2603 op_lvalue(kid, type);
2609 /* for a helem/hslice/kvslice, if its a fixed hash, croak on invalid
2610 * const fields. Also, convert CONST keys to HEK-in-SVs.
2611 * rop is the op that retrieves the hash;
2612 * key_op is the first key
2613 * real if false, only check (and possibly croak); don't update op
2617 S_check_hash_fields_and_hekify(pTHX_ UNOP *rop, SVOP *key_op, int real)
2623 /* find the padsv corresponding to $lex->{} or @{$lex}{} */
2625 if (rop->op_first->op_type == OP_PADSV)
2626 /* @$hash{qw(keys here)} */
2627 rop = (UNOP*)rop->op_first;
2629 /* @{$hash}{qw(keys here)} */
2630 if (rop->op_first->op_type == OP_SCOPE
2631 && cLISTOPx(rop->op_first)->op_last->op_type == OP_PADSV)
2633 rop = (UNOP*)cLISTOPx(rop->op_first)->op_last;
2640 lexname = NULL; /* just to silence compiler warnings */
2641 fields = NULL; /* just to silence compiler warnings */
2645 && (lexname = padnamelist_fetch(PL_comppad_name, rop->op_targ),
2646 SvPAD_TYPED(lexname))
2647 && (fields = (GV**)hv_fetchs(PadnameTYPE(lexname), "FIELDS", FALSE))
2648 && isGV(*fields) && GvHV(*fields);
2650 for (; key_op; key_op = (SVOP*)OpSIBLING(key_op)) {
2652 if (key_op->op_type != OP_CONST)
2654 svp = cSVOPx_svp(key_op);
2656 /* make sure it's not a bareword under strict subs */
2657 if (key_op->op_private & OPpCONST_BARE &&
2658 key_op->op_private & OPpCONST_STRICT)
2660 no_bareword_allowed((OP*)key_op);
2663 /* Make the CONST have a shared SV */
2664 if ( !SvIsCOW_shared_hash(sv = *svp)
2665 && SvTYPE(sv) < SVt_PVMG
2671 const char * const key = SvPV_const(sv, *(STRLEN*)&keylen);
2672 SV *nsv = newSVpvn_share(key, SvUTF8(sv) ? -keylen : keylen, 0);
2673 SvREFCNT_dec_NN(sv);
2678 && !hv_fetch_ent(GvHV(*fields), *svp, FALSE, 0))
2680 Perl_croak(aTHX_ "No such class field \"%" SVf "\" "
2681 "in variable %" PNf " of type %" HEKf,
2682 SVfARG(*svp), PNfARG(lexname),
2683 HEKfARG(HvNAME_HEK(PadnameTYPE(lexname))));
2688 /* info returned by S_sprintf_is_multiconcatable() */
2690 struct sprintf_ismc_info {
2691 SSize_t nargs; /* num of args to sprintf (not including the format) */
2692 char *start; /* start of raw format string */
2693 char *end; /* bytes after end of raw format string */
2694 STRLEN total_len; /* total length (in bytes) of format string, not
2695 including '%s' and half of '%%' */
2696 STRLEN variant; /* number of bytes by which total_len_p would grow
2697 if upgraded to utf8 */
2698 bool utf8; /* whether the format is utf8 */
2702 /* is the OP_SPRINTF o suitable for converting into a multiconcat op?
2703 * i.e. its format argument is a const string with only '%s' and '%%'
2704 * formats, and the number of args is known, e.g.
2705 * sprintf "a=%s f=%s", $a[0], scalar(f());
2707 * sprintf "i=%d a=%s f=%s", $i, @a, f();
2709 * If successful, the sprintf_ismc_info struct pointed to by info will be
2714 S_sprintf_is_multiconcatable(pTHX_ OP *o,struct sprintf_ismc_info *info)
2716 OP *pm, *constop, *kid;
2719 SSize_t nargs, nformats;
2720 STRLEN cur, total_len, variant;
2723 /* if sprintf's behaviour changes, die here so that someone
2724 * can decide whether to enhance this function or skip optimising
2725 * under those new circumstances */
2726 assert(!(o->op_flags & OPf_STACKED));
2727 assert(!(PL_opargs[OP_SPRINTF] & OA_TARGLEX));
2728 assert(!(o->op_private & ~OPpARG4_MASK));
2730 pm = cUNOPo->op_first;
2731 if (pm->op_type != OP_PUSHMARK) /* weird coreargs stuff */
2733 constop = OpSIBLING(pm);
2734 if (!constop || constop->op_type != OP_CONST)
2736 sv = cSVOPx_sv(constop);
2737 if (SvMAGICAL(sv) || !SvPOK(sv))
2743 /* Scan format for %% and %s and work out how many %s there are.
2744 * Abandon if other format types are found.
2751 for (p = s; p < e; p++) {
2754 if (!UTF8_IS_INVARIANT(*p))
2760 return FALSE; /* lone % at end gives "Invalid conversion" */
2769 if (!nformats || nformats > PERL_MULTICONCAT_MAXARG)
2772 utf8 = cBOOL(SvUTF8(sv));
2776 /* scan args; they must all be in scalar cxt */
2779 kid = OpSIBLING(constop);
2782 if ((kid->op_flags & OPf_WANT) != OPf_WANT_SCALAR)
2785 kid = OpSIBLING(kid);
2788 if (nargs != nformats)
2789 return FALSE; /* e.g. sprintf("%s%s", $a); */
2792 info->nargs = nargs;
2795 info->total_len = total_len;
2796 info->variant = variant;
2804 /* S_maybe_multiconcat():
2806 * given an OP_STRINGIFY, OP_SASSIGN, OP_CONCAT or OP_SPRINTF op, possibly
2807 * convert it (and its children) into an OP_MULTICONCAT. See the code
2808 * comments just before pp_multiconcat() for the full details of what
2809 * OP_MULTICONCAT supports.
2811 * Basically we're looking for an optree with a chain of OP_CONCATS down
2812 * the LHS (or an OP_SPRINTF), with possibly an OP_SASSIGN, and/or
2813 * OP_STRINGIFY, and/or OP_CONCAT acting as '.=' at its head, e.g.
2821 * STRINGIFY -- PADSV[$x]
2824 * ex-PUSHMARK -- CONCAT/S
2826 * CONCAT/S -- PADSV[$d]
2828 * CONCAT -- CONST["-"]
2830 * PADSV[$a] -- PADSV[$b]
2832 * Note that at this stage the OP_SASSIGN may have already been optimised
2833 * away with OPpTARGET_MY set on the OP_STRINGIFY or OP_CONCAT.
2837 S_maybe_multiconcat(pTHX_ OP *o)
2840 OP *lastkidop; /* the right-most of any kids unshifted onto o */
2841 OP *topop; /* the top-most op in the concat tree (often equals o,
2842 unless there are assign/stringify ops above it */
2843 OP *parentop; /* the parent op of topop (or itself if no parent) */
2844 OP *targmyop; /* the op (if any) with the OPpTARGET_MY flag */
2845 OP *targetop; /* the op corresponding to target=... or target.=... */
2846 OP *stringop; /* the OP_STRINGIFY op, if any */
2847 OP *nextop; /* used for recreating the op_next chain without consts */
2848 OP *kid; /* general-purpose op pointer */
2850 UNOP_AUX_item *lenp;
2851 char *const_str, *p;
2852 struct sprintf_ismc_info sprintf_info;
2854 /* store info about each arg in args[];
2855 * toparg is the highest used slot; argp is a general
2856 * pointer to args[] slots */
2858 void *p; /* initially points to const sv (or null for op);
2859 later, set to SvPV(constsv), with ... */
2860 STRLEN len; /* ... len set to SvPV(..., len) */
2861 } *argp, *toparg, args[PERL_MULTICONCAT_MAXARG*2 + 1];
2865 SSize_t nadjconst = 0; /* adjacent consts - may be demoted to args */
2868 bool kid_is_last = FALSE; /* most args will be the RHS kid of a concat op;
2869 the last-processed arg will the LHS of one,
2870 as args are processed in reverse order */
2871 U8 stacked_last = 0; /* whether the last seen concat op was STACKED */
2872 STRLEN total_len = 0; /* sum of the lengths of the const segments */
2873 U8 flags = 0; /* what will become the op_flags and ... */
2874 U8 private_flags = 0; /* ... op_private of the multiconcat op */
2875 bool is_sprintf = FALSE; /* we're optimising an sprintf */
2876 bool is_targable = FALSE; /* targetop is an OPpTARGET_MY candidate */
2877 bool prev_was_const = FALSE; /* previous arg was a const */
2879 /* -----------------------------------------------------------------
2882 * Examine the optree non-destructively to determine whether it's
2883 * suitable to be converted into an OP_MULTICONCAT. Accumulate
2884 * information about the optree in args[].
2894 assert( o->op_type == OP_SASSIGN
2895 || o->op_type == OP_CONCAT
2896 || o->op_type == OP_SPRINTF
2897 || o->op_type == OP_STRINGIFY);
2899 Zero(&sprintf_info, 1, struct sprintf_ismc_info);
2901 /* first see if, at the top of the tree, there is an assign,
2902 * append and/or stringify */
2904 if (topop->op_type == OP_SASSIGN) {
2906 if (o->op_ppaddr != PL_ppaddr[OP_SASSIGN])
2908 if (o->op_private & (OPpASSIGN_BACKWARDS|OPpASSIGN_CV_TO_GV))
2910 assert(!(o->op_private & ~OPpARG2_MASK)); /* barf on unknown flags */
2913 topop = cBINOPo->op_first;
2914 targetop = OpSIBLING(topop);
2915 if (!targetop) /* probably some sort of syntax error */
2918 else if ( topop->op_type == OP_CONCAT
2919 && (topop->op_flags & OPf_STACKED)
2920 && (!(topop->op_private & OPpCONCAT_NESTED))
2925 /* OPpTARGET_MY shouldn't be able to be set here. If it is,
2926 * decide what to do about it */
2927 assert(!(o->op_private & OPpTARGET_MY));
2929 /* barf on unknown flags */
2930 assert(!(o->op_private & ~(OPpARG2_MASK|OPpTARGET_MY)));
2931 private_flags |= OPpMULTICONCAT_APPEND;
2932 targetop = cBINOPo->op_first;
2934 topop = OpSIBLING(targetop);
2936 /* $x .= <FOO> gets optimised to rcatline instead */
2937 if (topop->op_type == OP_READLINE)
2942 /* Can targetop (the LHS) if it's a padsv, be be optimised
2943 * away and use OPpTARGET_MY instead?
2945 if ( (targetop->op_type == OP_PADSV)
2946 && !(targetop->op_private & OPpDEREF)
2947 && !(targetop->op_private & OPpPAD_STATE)
2948 /* we don't support 'my $x .= ...' */
2949 && ( o->op_type == OP_SASSIGN
2950 || !(targetop->op_private & OPpLVAL_INTRO))
2955 if (topop->op_type == OP_STRINGIFY) {
2956 if (topop->op_ppaddr != PL_ppaddr[OP_STRINGIFY])
2960 /* barf on unknown flags */
2961 assert(!(o->op_private & ~(OPpARG4_MASK|OPpTARGET_MY)));
2963 if ((topop->op_private & OPpTARGET_MY)) {
2964 if (o->op_type == OP_SASSIGN)
2965 return; /* can't have two assigns */
2969 private_flags |= OPpMULTICONCAT_STRINGIFY;
2971 topop = cBINOPx(topop)->op_first;
2972 assert(OP_TYPE_IS_OR_WAS_NN(topop, OP_PUSHMARK));
2973 topop = OpSIBLING(topop);
2976 if (topop->op_type == OP_SPRINTF) {
2977 if (topop->op_ppaddr != PL_ppaddr[OP_SPRINTF])
2979 if (S_sprintf_is_multiconcatable(aTHX_ topop, &sprintf_info)) {
2980 nargs = sprintf_info.nargs;
2981 total_len = sprintf_info.total_len;
2982 variant = sprintf_info.variant;
2983 utf8 = sprintf_info.utf8;
2985 private_flags |= OPpMULTICONCAT_FAKE;
2987 /* we have an sprintf op rather than a concat optree.
2988 * Skip most of the code below which is associated with
2989 * processing that optree. We also skip phase 2, determining
2990 * whether its cost effective to optimise, since for sprintf,
2991 * multiconcat is *always* faster */
2994 /* note that even if the sprintf itself isn't multiconcatable,
2995 * the expression as a whole may be, e.g. in
2996 * $x .= sprintf("%d",...)
2997 * the sprintf op will be left as-is, but the concat/S op may
2998 * be upgraded to multiconcat
3001 else if (topop->op_type == OP_CONCAT) {
3002 if (topop->op_ppaddr != PL_ppaddr[OP_CONCAT])
3005 if ((topop->op_private & OPpTARGET_MY)) {
3006 if (o->op_type == OP_SASSIGN || targmyop)
3007 return; /* can't have two assigns */
3012 /* Is it safe to convert a sassign/stringify/concat op into
3014 assert((PL_opargs[OP_SASSIGN] & OA_CLASS_MASK) == OA_BINOP);
3015 assert((PL_opargs[OP_CONCAT] & OA_CLASS_MASK) == OA_BINOP);
3016 assert((PL_opargs[OP_STRINGIFY] & OA_CLASS_MASK) == OA_LISTOP);
3017 assert((PL_opargs[OP_SPRINTF] & OA_CLASS_MASK) == OA_LISTOP);
3018 STATIC_ASSERT_STMT( STRUCT_OFFSET(BINOP, op_last)
3019 == STRUCT_OFFSET(UNOP_AUX, op_aux));
3020 STATIC_ASSERT_STMT( STRUCT_OFFSET(LISTOP, op_last)
3021 == STRUCT_OFFSET(UNOP_AUX, op_aux));
3023 /* Now scan the down the tree looking for a series of
3024 * CONCAT/OPf_STACKED ops on the LHS (with the last one not
3025 * stacked). For example this tree:
3030 * CONCAT/STACKED -- EXPR5
3032 * CONCAT/STACKED -- EXPR4
3038 * corresponds to an expression like
3040 * (EXPR1 . EXPR2 . EXPR3 . EXPR4 . EXPR5)
3042 * Record info about each EXPR in args[]: in particular, whether it is
3043 * a stringifiable OP_CONST and if so what the const sv is.
3045 * The reason why the last concat can't be STACKED is the difference
3048 * ((($a .= $a) .= $a) .= $a) .= $a
3051 * $a . $a . $a . $a . $a
3053 * The main difference between the optrees for those two constructs
3054 * is the presence of the last STACKED. As well as modifying $a,
3055 * the former sees the changed $a between each concat, so if $s is
3056 * initially 'a', the first returns 'a' x 16, while the latter returns
3057 * 'a' x 5. And pp_multiconcat can't handle that kind of thing.
3067 if ( kid->op_type == OP_CONCAT
3071 k1 = cUNOPx(kid)->op_first;
3073 /* shouldn't happen except maybe after compile err? */
3077 /* avoid turning (A . B . ($lex = C) ...) into (A . B . C ...) */
3078 if (kid->op_private & OPpTARGET_MY)
3081 stacked_last = (kid->op_flags & OPf_STACKED);
3093 if ( nargs + nadjconst > PERL_MULTICONCAT_MAXARG - 2
3094 || (argp - args + 1) > (PERL_MULTICONCAT_MAXARG*2 + 1) - 2)
3096 /* At least two spare slots are needed to decompose both
3097 * concat args. If there are no slots left, continue to
3098 * examine the rest of the optree, but don't push new values
3099 * on args[]. If the optree as a whole is legal for conversion
3100 * (in particular that the last concat isn't STACKED), then
3101 * the first PERL_MULTICONCAT_MAXARG elements of the optree
3102 * can be converted into an OP_MULTICONCAT now, with the first
3103 * child of that op being the remainder of the optree -
3104 * which may itself later be converted to a multiconcat op
3108 /* the last arg is the rest of the optree */
3113 else if ( argop->op_type == OP_CONST
3114 && ((sv = cSVOPx_sv(argop)))
3115 /* defer stringification until runtime of 'constant'
3116 * things that might stringify variantly, e.g. the radix
3117 * point of NVs, or overloaded RVs */
3118 && (SvPOK(sv) || SvIOK(sv))
3119 && (!SvGMAGICAL(sv))
3121 if (argop->op_private & OPpCONST_STRICT)
3122 no_bareword_allowed(argop);
3124 utf8 |= cBOOL(SvUTF8(sv));
3127 /* this const may be demoted back to a plain arg later;
3128 * make sure we have enough arg slots left */
3130 prev_was_const = !prev_was_const;
3135 prev_was_const = FALSE;
3145 return; /* we don't support ((A.=B).=C)...) */
3147 /* look for two adjacent consts and don't fold them together:
3150 * $o->concat("a")->concat("b")
3153 * (but $o .= "a" . "b" should still fold)
3156 bool seen_nonconst = FALSE;
3157 for (argp = toparg; argp >= args; argp--) {
3158 if (argp->p == NULL) {
3159 seen_nonconst = TRUE;
3165 /* both previous and current arg were constants;
3166 * leave the current OP_CONST as-is */
3174 /* -----------------------------------------------------------------
3177 * At this point we have determined that the optree *can* be converted
3178 * into a multiconcat. Having gathered all the evidence, we now decide
3179 * whether it *should*.
3183 /* we need at least one concat action, e.g.:
3189 * otherwise we could be doing something like $x = "foo", which
3190 * if treated as as a concat, would fail to COW.
3192 if (nargs + nconst + cBOOL(private_flags & OPpMULTICONCAT_APPEND) < 2)
3195 /* Benchmarking seems to indicate that we gain if:
3196 * * we optimise at least two actions into a single multiconcat
3197 * (e.g concat+concat, sassign+concat);
3198 * * or if we can eliminate at least 1 OP_CONST;
3199 * * or if we can eliminate a padsv via OPpTARGET_MY
3203 /* eliminated at least one OP_CONST */
3205 /* eliminated an OP_SASSIGN */
3206 || o->op_type == OP_SASSIGN
3207 /* eliminated an OP_PADSV */
3208 || (!targmyop && is_targable)
3210 /* definitely a net gain to optimise */
3213 /* ... if not, what else? */
3215 /* special-case '$lex1 = expr . $lex1' (where expr isn't lex1):
3216 * multiconcat is faster (due to not creating a temporary copy of
3217 * $lex1), whereas for a general $lex1 = $lex2 . $lex3, concat is
3223 && topop->op_type == OP_CONCAT
3225 PADOFFSET t = targmyop->op_targ;
3226 OP *k1 = cBINOPx(topop)->op_first;
3227 OP *k2 = cBINOPx(topop)->op_last;
3228 if ( k2->op_type == OP_PADSV
3230 && ( k1->op_type != OP_PADSV
3231 || k1->op_targ != t)
3236 /* need at least two concats */
3237 if (nargs + nconst + cBOOL(private_flags & OPpMULTICONCAT_APPEND) < 3)
3242 /* -----------------------------------------------------------------
3245 * At this point the optree has been verified as ok to be optimised
3246 * into an OP_MULTICONCAT. Now start changing things.
3251 /* stringify all const args and determine utf8ness */
3254 for (argp = args; argp <= toparg; argp++) {
3255 SV *sv = (SV*)argp->p;
3257 continue; /* not a const op */
3258 if (utf8 && !SvUTF8(sv))
3259 sv_utf8_upgrade_nomg(sv);
3260 argp->p = SvPV_nomg(sv, argp->len);
3261 total_len += argp->len;
3263 /* see if any strings would grow if converted to utf8 */
3265 variant += variant_under_utf8_count((U8 *) argp->p,
3266 (U8 *) argp->p + argp->len);
3270 /* create and populate aux struct */
3274 aux = (UNOP_AUX_item*)PerlMemShared_malloc(
3275 sizeof(UNOP_AUX_item)
3277 PERL_MULTICONCAT_HEADER_SIZE
3278 + ((nargs + 1) * (variant ? 2 : 1))
3281 const_str = (char *)PerlMemShared_malloc(total_len ? total_len : 1);
3283 /* Extract all the non-const expressions from the concat tree then
3284 * dispose of the old tree, e.g. convert the tree from this:
3288 * STRINGIFY -- TARGET
3290 * ex-PUSHMARK -- CONCAT
3305 * ex-PUSHMARK -- EXPR1 -- EXPR2 -- EXPR3 -- EXPR4 -- EXPR5 -- TARGET
3307 * except that if EXPRi is an OP_CONST, it's discarded.
3309 * During the conversion process, EXPR ops are stripped from the tree
3310 * and unshifted onto o. Finally, any of o's remaining original
3311 * childen are discarded and o is converted into an OP_MULTICONCAT.
3313 * In this middle of this, o may contain both: unshifted args on the
3314 * left, and some remaining original args on the right. lastkidop
3315 * is set to point to the right-most unshifted arg to delineate
3316 * between the two sets.
3321 /* create a copy of the format with the %'s removed, and record
3322 * the sizes of the const string segments in the aux struct */
3324 lenp = aux + PERL_MULTICONCAT_IX_LENGTHS;
3326 p = sprintf_info.start;
3329 for (; p < sprintf_info.end; p++) {
3333 (lenp++)->ssize = q - oldq;
3340 lenp->ssize = q - oldq;
3341 assert((STRLEN)(q - const_str) == total_len);
3343 /* Attach all the args (i.e. the kids of the sprintf) to o (which
3344 * may or may not be topop) The pushmark and const ops need to be
3345 * kept in case they're an op_next entry point.
3347 lastkidop = cLISTOPx(topop)->op_last;
3348 kid = cUNOPx(topop)->op_first; /* pushmark */
3350 op_null(OpSIBLING(kid)); /* const */
3352 kid = op_sibling_splice(topop, NULL, -1, NULL); /* cut all args */
3353 op_sibling_splice(o, NULL, 0, kid); /* and attach to o */
3354 lastkidop->op_next = o;
3359 lenp = aux + PERL_MULTICONCAT_IX_LENGTHS;
3363 /* Concatenate all const strings into const_str.
3364 * Note that args[] contains the RHS args in reverse order, so
3365 * we scan args[] from top to bottom to get constant strings
3368 for (argp = toparg; argp >= args; argp--) {
3370 /* not a const op */
3371 (++lenp)->ssize = -1;
3373 STRLEN l = argp->len;
3374 Copy(argp->p, p, l, char);
3376 if (lenp->ssize == -1)
3387 for (argp = args; argp <= toparg; argp++) {
3388 /* only keep non-const args, except keep the first-in-next-chain
3389 * arg no matter what it is (but nulled if OP_CONST), because it
3390 * may be the entry point to this subtree from the previous
3393 bool last = (argp == toparg);
3396 /* set prev to the sibling *before* the arg to be cut out,
3397 * e.g. when cutting EXPR:
3402 * prev= CONCAT -- EXPR
3405 if (argp == args && kid->op_type != OP_CONCAT) {
3406 /* in e.g. '$x .= f(1)' there's no RHS concat tree
3407 * so the expression to be cut isn't kid->op_last but
3410 /* find the op before kid */
3412 o2 = cUNOPx(parentop)->op_first;
3413 while (o2 && o2 != kid) {
3421 else if (kid == o && lastkidop)
3422 prev = last ? lastkidop : OpSIBLING(lastkidop);
3424 prev = last ? NULL : cUNOPx(kid)->op_first;
3426 if (!argp->p || last) {
3428 OP *aop = op_sibling_splice(kid, prev, 1, NULL);
3429 /* and unshift to front of o */
3430 op_sibling_splice(o, NULL, 0, aop);
3431 /* record the right-most op added to o: later we will
3432 * free anything to the right of it */
3435 aop->op_next = nextop;
3438 /* null the const at start of op_next chain */
3442 nextop = prev->op_next;
3445 /* the last two arguments are both attached to the same concat op */
3446 if (argp < toparg - 1)
3451 /* Populate the aux struct */
3453 aux[PERL_MULTICONCAT_IX_NARGS].ssize = nargs;
3454 aux[PERL_MULTICONCAT_IX_PLAIN_PV].pv = utf8 ? NULL : const_str;
3455 aux[PERL_MULTICONCAT_IX_PLAIN_LEN].ssize = utf8 ? 0 : total_len;
3456 aux[PERL_MULTICONCAT_IX_UTF8_PV].pv = const_str;
3457 aux[PERL_MULTICONCAT_IX_UTF8_LEN].ssize = total_len;
3459 /* if variant > 0, calculate a variant const string and lengths where
3460 * the utf8 version of the string will take 'variant' more bytes than
3464 char *p = const_str;
3465 STRLEN ulen = total_len + variant;
3466 UNOP_AUX_item *lens = aux + PERL_MULTICONCAT_IX_LENGTHS;
3467 UNOP_AUX_item *ulens = lens + (nargs + 1);
3468 char *up = (char*)PerlMemShared_malloc(ulen);
3471 aux[PERL_MULTICONCAT_IX_UTF8_PV].pv = up;
3472 aux[PERL_MULTICONCAT_IX_UTF8_LEN].ssize = ulen;
3474 for (n = 0; n < (nargs + 1); n++) {
3476 char * orig_up = up;
3477 for (i = (lens++)->ssize; i > 0; i--) {
3479 append_utf8_from_native_byte(c, (U8**)&up);
3481 (ulens++)->ssize = (i < 0) ? i : up - orig_up;
3486 /* if there was a top(ish)-level OP_STRINGIFY, we need to keep
3487 * that op's first child - an ex-PUSHMARK - because the op_next of
3488 * the previous op may point to it (i.e. it's the entry point for
3493 ? op_sibling_splice(o, lastkidop, 1, NULL)
3494 : op_sibling_splice(stringop, NULL, 1, NULL);
3495 assert(OP_TYPE_IS_OR_WAS_NN(pmop, OP_PUSHMARK));
3496 op_sibling_splice(o, NULL, 0, pmop);
3503 * target .= A.B.C...
3509 if (o->op_type == OP_SASSIGN) {
3510 /* Move the target subtree from being the last of o's children
3511 * to being the last of o's preserved children.
3512 * Note the difference between 'target = ...' and 'target .= ...':
3513 * for the former, target is executed last; for the latter,
3516 kid = OpSIBLING(lastkidop);
3517 op_sibling_splice(o, kid, 1, NULL); /* cut target op */
3518 op_sibling_splice(o, lastkidop, 0, targetop); /* and paste */
3519 lastkidop->op_next = kid->op_next;
3520 lastkidop = targetop;
3523 /* Move the target subtree from being the first of o's
3524 * original children to being the first of *all* o's children.
3527 op_sibling_splice(o, lastkidop, 1, NULL); /* cut target op */
3528 op_sibling_splice(o, NULL, 0, targetop); /* and paste*/
3531 /* if the RHS of .= doesn't contain a concat (e.g.
3532 * $x .= "foo"), it gets missed by the "strip ops from the
3533 * tree and add to o" loop earlier */
3534 assert(topop->op_type != OP_CONCAT);
3536 /* in e.g. $x .= "$y", move the $y expression
3537 * from being a child of OP_STRINGIFY to being the
3538 * second child of the OP_CONCAT
3540 assert(cUNOPx(stringop)->op_first == topop);
3541 op_sibling_splice(stringop, NULL, 1, NULL);
3542 op_sibling_splice(o, cUNOPo->op_first, 0, topop);
3544 assert(topop == OpSIBLING(cBINOPo->op_first));
3553 * my $lex = A.B.C...
3556 * The original padsv op is kept but nulled in case it's the
3557 * entry point for the optree (which it will be for
3560 private_flags |= OPpTARGET_MY;
3561 private_flags |= (targetop->op_private & OPpLVAL_INTRO);
3562 o->op_targ = targetop->op_targ;
3563 targetop->op_targ = 0;
3567 flags |= OPf_STACKED;
3569 else if (targmyop) {
3570 private_flags |= OPpTARGET_MY;
3571 if (o != targmyop) {
3572 o->op_targ = targmyop->op_targ;
3573 targmyop->op_targ = 0;
3577 /* detach the emaciated husk of the sprintf/concat optree and free it */
3579 kid = op_sibling_splice(o, lastkidop, 1, NULL);
3585 /* and convert o into a multiconcat */
3587 o->op_flags = (flags|OPf_KIDS|stacked_last
3588 |(o->op_flags & (OPf_WANT|OPf_PARENS)));
3589 o->op_private = private_flags;
3590 o->op_type = OP_MULTICONCAT;
3591 o->op_ppaddr = PL_ppaddr[OP_MULTICONCAT];
3592 cUNOP_AUXo->op_aux = aux;
3596 /* do all the final processing on an optree (e.g. running the peephole
3597 * optimiser on it), then attach it to cv (if cv is non-null)
3601 S_process_optree(pTHX_ CV *cv, OP *optree, OP* start)
3605 /* XXX for some reason, evals, require and main optrees are
3606 * never attached to their CV; instead they just hang off
3607 * PL_main_root + PL_main_start or PL_eval_root + PL_eval_start
3608 * and get manually freed when appropriate */
3610 startp = &CvSTART(cv);
3612 startp = PL_in_eval? &PL_eval_start : &PL_main_start;
3615 optree->op_private |= OPpREFCOUNTED;
3616 OpREFCNT_set(optree, 1);
3617 optimize_optree(optree);
3619 finalize_optree(optree);
3620 S_prune_chain_head(startp);
3623 /* now that optimizer has done its work, adjust pad values */
3624 pad_tidy(optree->op_type == OP_LEAVEWRITE ? padtidy_FORMAT
3625 : CvCLONE(cv) ? padtidy_SUBCLONE : padtidy_SUB);
3631 =for apidoc optimize_optree
3633 This function applies some optimisations to the optree in top-down order.
3634 It is called before the peephole optimizer, which processes ops in
3635 execution order. Note that finalize_optree() also does a top-down scan,
3636 but is called *after* the peephole optimizer.
3642 Perl_optimize_optree(pTHX_ OP* o)
3644 PERL_ARGS_ASSERT_OPTIMIZE_OPTREE;
3647 SAVEVPTR(PL_curcop);
3655 /* helper for optimize_optree() which optimises one op then recurses
3656 * to optimise any children.
3660 S_optimize_op(pTHX_ OP* o)
3664 PERL_ARGS_ASSERT_OPTIMIZE_OP;
3667 OP * next_kid = NULL;
3669 assert(o->op_type != OP_FREED);
3671 switch (o->op_type) {
3674 PL_curcop = ((COP*)o); /* for warnings */
3682 S_maybe_multiconcat(aTHX_ o);
3686 if (cPMOPo->op_pmreplrootu.op_pmreplroot) {
3687 /* we can't assume that op_pmreplroot->op_sibparent == o
3688 * and that it is thus possible to walk back up the tree
3689 * past op_pmreplroot. So, although we try to avoid
3690 * recursing through op trees, do it here. After all,
3691 * there are unlikely to be many nested s///e's within
3692 * the replacement part of a s///e.
3694 optimize_op(cPMOPo->op_pmreplrootu.op_pmreplroot);
3702 if (o->op_flags & OPf_KIDS)
3703 next_kid = cUNOPo->op_first;
3705 /* if a kid hasn't been nominated to process, continue with the
3706 * next sibling, or if no siblings left, go back to the parent's
3707 * siblings and so on
3711 return; /* at top; no parents/siblings to try */
3712 if (OpHAS_SIBLING(o))
3713 next_kid = o->op_sibparent;
3715 o = o->op_sibparent; /*try parent's next sibling */
3718 /* this label not yet used. Goto here if any code above sets
3728 =for apidoc finalize_optree
3730 This function finalizes the optree. Should be called directly after
3731 the complete optree is built. It does some additional
3732 checking which can't be done in the normal C<ck_>xxx functions and makes
3733 the tree thread-safe.
3738 Perl_finalize_optree(pTHX_ OP* o)
3740 PERL_ARGS_ASSERT_FINALIZE_OPTREE;
3743 SAVEVPTR(PL_curcop);
3751 /* Relocate sv to the pad for thread safety.
3752 * Despite being a "constant", the SV is written to,
3753 * for reference counts, sv_upgrade() etc. */
3754 PERL_STATIC_INLINE void
3755 S_op_relocate_sv(pTHX_ SV** svp, PADOFFSET* targp)
3758 PERL_ARGS_ASSERT_OP_RELOCATE_SV;
3760 ix = pad_alloc(OP_CONST, SVf_READONLY);
3761 SvREFCNT_dec(PAD_SVl(ix));
3762 PAD_SETSV(ix, *svp);
3763 /* XXX I don't know how this isn't readonly already. */
3764 if (!SvIsCOW(PAD_SVl(ix))) SvREADONLY_on(PAD_SVl(ix));
3771 =for apidoc traverse_op_tree
3773 Return the next op in a depth-first traversal of the op tree,
3774 returning NULL when the traversal is complete.
3776 The initial call must supply the root of the tree as both top and o.
3778 For now it's static, but it may be exposed to the API in the future.
3784 S_traverse_op_tree(pTHX_ OP *top, OP *o) {
3787 PERL_ARGS_ASSERT_TRAVERSE_OP_TREE;
3789 if ((o->op_flags & OPf_KIDS) && cUNOPo->op_first) {
3790 return cUNOPo->op_first;
3792 else if ((sib = OpSIBLING(o))) {
3796 OP *parent = o->op_sibparent;
3797 assert(!(o->op_moresib));
3798 while (parent && parent != top) {
3799 OP *sib = OpSIBLING(parent);
3802 parent = parent->op_sibparent;
3810 S_finalize_op(pTHX_ OP* o)
3813 PERL_ARGS_ASSERT_FINALIZE_OP;
3816 assert(o->op_type != OP_FREED);
3818 switch (o->op_type) {
3821 PL_curcop = ((COP*)o); /* for warnings */
3824 if (OpHAS_SIBLING(o)) {
3825 OP *sib = OpSIBLING(o);
3826 if (( sib->op_type == OP_NEXTSTATE || sib->op_type == OP_DBSTATE)
3827 && ckWARN(WARN_EXEC)
3828 && OpHAS_SIBLING(sib))
3830 const OPCODE type = OpSIBLING(sib)->op_type;
3831 if (type != OP_EXIT && type != OP_WARN && type != OP_DIE) {
3832 const line_t oldline = CopLINE(PL_curcop);
3833 CopLINE_set(PL_curcop, CopLINE((COP*)sib));
3834 Perl_warner(aTHX_ packWARN(WARN_EXEC),
3835 "Statement unlikely to be reached");
3836 Perl_warner(aTHX_ packWARN(WARN_EXEC),
3837 "\t(Maybe you meant system() when you said exec()?)\n");
3838 CopLINE_set(PL_curcop, oldline);
3845 if ((o->op_private & OPpEARLY_CV) && ckWARN(WARN_PROTOTYPE)) {
3846 GV * const gv = cGVOPo_gv;
3847 if (SvTYPE(gv) == SVt_PVGV && GvCV(gv) && SvPVX_const(GvCV(gv))) {
3848 /* XXX could check prototype here instead of just carping */
3849 SV * const sv = sv_newmortal();
3850 gv_efullname3(sv, gv, NULL);
3851 Perl_warner(aTHX_ packWARN(WARN_PROTOTYPE),
3852 "%" SVf "() called too early to check prototype",
3859 if (cSVOPo->op_private & OPpCONST_STRICT)
3860 no_bareword_allowed(o);
3864 op_relocate_sv(&cSVOPo->op_sv, &o->op_targ);
3869 /* Relocate all the METHOP's SVs to the pad for thread safety. */
3870 case OP_METHOD_NAMED:
3871 case OP_METHOD_SUPER:
3872 case OP_METHOD_REDIR:
3873 case OP_METHOD_REDIR_SUPER:
3874 op_relocate_sv(&cMETHOPx(o)->op_u.op_meth_sv, &o->op_targ);
3883 if ((key_op = cSVOPx(((BINOP*)o)->op_last))->op_type != OP_CONST)
3886 rop = (UNOP*)((BINOP*)o)->op_first;
3891 S_scalar_slice_warning(aTHX_ o);
3895 kid = OpSIBLING(cLISTOPo->op_first);
3896 if (/* I bet there's always a pushmark... */
3897 OP_TYPE_ISNT_AND_WASNT_NN(kid, OP_LIST)
3898 && OP_TYPE_ISNT_NN(kid, OP_CONST))
3903 key_op = (SVOP*)(kid->op_type == OP_CONST
3905 : OpSIBLING(kLISTOP->op_first));
3907 rop = (UNOP*)((LISTOP*)o)->op_last;
3910 if (o->op_private & OPpLVAL_INTRO || rop->op_type != OP_RV2HV)
3912 S_check_hash_fields_and_hekify(aTHX_ rop, key_op, 1);
3916 if (o->op_targ != OP_HSLICE && o->op_targ != OP_ASLICE)
3920 S_scalar_slice_warning(aTHX_ o);
3924 if (cPMOPo->op_pmreplrootu.op_pmreplroot)
3925 finalize_op(cPMOPo->op_pmreplrootu.op_pmreplroot);
3933 if (o->op_flags & OPf_KIDS) {
3936 /* check that op_last points to the last sibling, and that
3937 * the last op_sibling/op_sibparent field points back to the
3938 * parent, and that the only ops with KIDS are those which are
3939 * entitled to them */
3940 U32 type = o->op_type;
3944 if (type == OP_NULL) {
3946 /* ck_glob creates a null UNOP with ex-type GLOB
3947 * (which is a list op. So pretend it wasn't a listop */
3948 if (type == OP_GLOB)
3951 family = PL_opargs[type] & OA_CLASS_MASK;
3953 has_last = ( family == OA_BINOP
3954 || family == OA_LISTOP
3955 || family == OA_PMOP
3956 || family == OA_LOOP
3958 assert( has_last /* has op_first and op_last, or ...
3959 ... has (or may have) op_first: */
3960 || family == OA_UNOP
3961 || family == OA_UNOP_AUX
3962 || family == OA_LOGOP
3963 || family == OA_BASEOP_OR_UNOP
3964 || family == OA_FILESTATOP
3965 || family == OA_LOOPEXOP
3966 || family == OA_METHOP
3967 || type == OP_CUSTOM
3968 || type == OP_NULL /* new_logop does this */
3971 for (kid = cUNOPo->op_first; kid; kid = OpSIBLING(kid)) {
3972 if (!OpHAS_SIBLING(kid)) {
3974 assert(kid == cLISTOPo->op_last);
3975 assert(kid->op_sibparent == o);
3980 } while (( o = traverse_op_tree(top, o)) != NULL);
3984 S_mark_padname_lvalue(pTHX_ PADNAME *pn)
3987 PadnameLVALUE_on(pn);
3988 while (PadnameOUTER(pn) && PARENT_PAD_INDEX(pn)) {
3990 /* RT #127786: cv can be NULL due to an eval within the DB package
3991 * called from an anon sub - anon subs don't have CvOUTSIDE() set
3992 * unless they contain an eval, but calling eval within DB
3993 * pretends the eval was done in the caller's scope.
3997 assert(CvPADLIST(cv));
3999 PadlistNAMESARRAY(CvPADLIST(cv))[PARENT_PAD_INDEX(pn)];
4000 assert(PadnameLEN(pn));
4001 PadnameLVALUE_on(pn);
4006 S_vivifies(const OPCODE type)
4009 case OP_RV2AV: case OP_ASLICE:
4010 case OP_RV2HV: case OP_KVASLICE:
4011 case OP_RV2SV: case OP_HSLICE:
4012 case OP_AELEMFAST: case OP_KVHSLICE:
4021 /* apply lvalue reference (aliasing) context to the optree o.
4024 * o would be the list ($x,$y) and type would be OP_AASSIGN.
4025 * It may descend and apply this to children too, for example in
4026 * \( $cond ? $x, $y) = (...)
4030 S_lvref(pTHX_ OP *o, I32 type)
4037 switch (o->op_type) {
4039 o = OpSIBLING(cUNOPo->op_first);
4046 if (cUNOPo->op_first->op_type != OP_GV) goto badref;
4047 o->op_flags |= OPf_STACKED;
4048 if (o->op_flags & OPf_PARENS) {
4049 if (o->op_private & OPpLVAL_INTRO) {
4050 yyerror(Perl_form(aTHX_ "Can't modify reference to "
4051 "localized parenthesized array in list assignment"));
4055 OpTYPE_set(o, OP_LVAVREF);
4056 o->op_private &= OPpLVAL_INTRO|OPpPAD_STATE;
4057 o->op_flags |= OPf_MOD|OPf_REF;
4060 o->op_private |= OPpLVREF_AV;
4064 kid = cUNOPo->op_first;
4065 if (kid->op_type == OP_NULL)
4066 kid = cUNOPx(OpSIBLING(kUNOP->op_first))
4068 o->op_private = OPpLVREF_CV;
4069 if (kid->op_type == OP_GV)
4070 o->op_flags |= OPf_STACKED;
4071 else if (kid->op_type == OP_PADCV) {
4072 o->op_targ = kid->op_targ;
4074 op_free(cUNOPo->op_first);
4075 cUNOPo->op_first = NULL;
4076 o->op_flags &=~ OPf_KIDS;
4082 if (o->op_flags & OPf_PARENS) {
4084 yyerror(Perl_form(aTHX_ "Can't modify reference to "
4085 "parenthesized hash in list assignment"));
4088 o->op_private |= OPpLVREF_HV;
4092 if (cUNOPo->op_first->op_type != OP_GV) goto badref;
4093 o->op_flags |= OPf_STACKED;
4097 if (o->op_flags & OPf_PARENS) goto parenhash;
4098 o->op_private |= OPpLVREF_HV;
4101 PAD_COMPNAME_GEN_set(o->op_targ, PERL_INT_MAX);
4105 PAD_COMPNAME_GEN_set(o->op_targ, PERL_INT_MAX);
4106 if (o->op_flags & OPf_PARENS) goto slurpy;
4107 o->op_private |= OPpLVREF_AV;
4112 o->op_private |= OPpLVREF_ELEM;
4113 o->op_flags |= OPf_STACKED;
4118 OpTYPE_set(o, OP_LVREFSLICE);
4119 o->op_private &= OPpLVAL_INTRO;
4123 if (o->op_flags & OPf_SPECIAL) /* do BLOCK */
4125 else if (!(o->op_flags & OPf_KIDS))
4128 /* the code formerly only recursed into the first child of
4129 * a non ex-list OP_NULL. if we ever encounter such a null op with
4130 * more than one child, need to decide whether its ok to process
4131 * *all* its kids or not */
4132 assert(o->op_targ == OP_LIST
4133 || !(OpHAS_SIBLING(cBINOPo->op_first)));
4136 o = cLISTOPo->op_first;
4140 if (o->op_flags & OPf_PARENS)
4145 /* diag_listed_as: Can't modify reference to %s in %s assignment */
4146 yyerror(Perl_form(aTHX_ "Can't modify reference to %s in %s",
4147 o->op_type == OP_NULL && o->op_flags & OPf_SPECIAL
4154 OpTYPE_set(o, OP_LVREF);
4156 OPpLVAL_INTRO|OPpLVREF_ELEM|OPpLVREF_TYPE|OPpPAD_STATE;
4157 if (type == OP_ENTERLOOP)
4158 o->op_private |= OPpLVREF_ITER;
4163 return; /* at top; no parents/siblings to try */
4164 if (OpHAS_SIBLING(o)) {
4165 o = o->op_sibparent;
4168 o = o->op_sibparent; /*try parent's next sibling */
4174 PERL_STATIC_INLINE bool
4175 S_potential_mod_type(I32 type)
4177 /* Types that only potentially result in modification. */
4178 return type == OP_GREPSTART || type == OP_ENTERSUB
4179 || type == OP_REFGEN || type == OP_LEAVESUBLV;
4184 =for apidoc op_lvalue
4186 Propagate lvalue ("modifiable") context to an op and its children.
4187 C<type> represents the context type, roughly based on the type of op that
4188 would do the modifying, although C<local()> is represented by C<OP_NULL>,
4189 because it has no op type of its own (it is signalled by a flag on
4192 This function detects things that can't be modified, such as C<$x+1>, and
4193 generates errors for them. For example, C<$x+1 = 2> would cause it to be
4194 called with an op of type C<OP_ADD> and a C<type> argument of C<OP_SASSIGN>.
4196 It also flags things that need to behave specially in an lvalue context,
4197 such as C<$$x = 5> which might have to vivify a reference in C<$x>.
4201 Perl_op_lvalue_flags() is a non-API lower-level interface to
4202 op_lvalue(). The flags param has these bits:
4203 OP_LVALUE_NO_CROAK: return rather than croaking on error
4208 Perl_op_lvalue_flags(pTHX_ OP *o, I32 type, U32 flags)
4213 if (!o || (PL_parser && PL_parser->error_count))
4218 /* -1 = error on localize, 0 = ignore localize, 1 = ok to localize */
4220 OP *next_kid = NULL;
4222 if ((o->op_private & OPpTARGET_MY)
4223 && (PL_opargs[o->op_type] & OA_TARGLEX))/* OPp share the meaning */
4228 /* elements of a list might be in void context because the list is
4229 in scalar context or because they are attribute sub calls */
4230 if ((o->op_flags & OPf_WANT) == OPf_WANT_VOID)
4233 if (type == OP_PRTF || type == OP_SPRINTF) type = OP_ENTERSUB;
4235 switch (o->op_type) {
4241 if ((o->op_flags & OPf_PARENS))
4246 if ((type == OP_UNDEF || type == OP_REFGEN || type == OP_LOCK) &&
4247 !(o->op_flags & OPf_STACKED)) {
4248 OpTYPE_set(o, OP_RV2CV); /* entersub => rv2cv */
4249 assert(cUNOPo->op_first->op_type == OP_NULL);
4250 op_null(((LISTOP*)cUNOPo->op_first)->op_first);/* disable pushmark */
4253 else { /* lvalue subroutine call */
4254 o->op_private |= OPpLVAL_INTRO;
4255 PL_modcount = RETURN_UNLIMITED_NUMBER;
4256 if (S_potential_mod_type(type)) {
4257 o->op_private |= OPpENTERSUB_INARGS;
4260 else { /* Compile-time error message: */
4261 OP *kid = cUNOPo->op_first;
4266 if (kid->op_type != OP_PUSHMARK) {
4267 if (kid->op_type != OP_NULL || kid->op_targ != OP_LIST)
4269 "panic: unexpected lvalue entersub "
4270 "args: type/targ %ld:%" UVuf,
4271 (long)kid->op_type, (UV)kid->op_targ);
4272 kid = kLISTOP->op_first;
4274 while (OpHAS_SIBLING(kid))
4275 kid = OpSIBLING(kid);
4276 if (!(kid->op_type == OP_NULL && kid->op_targ == OP_RV2CV)) {
4277 break; /* Postpone until runtime */
4280 kid = kUNOP->op_first;
4281 if (kid->op_type == OP_NULL && kid->op_targ == OP_RV2SV)
4282 kid = kUNOP->op_first;
4283 if (kid->op_type == OP_NULL)
4285 "Unexpected constant lvalue entersub "
4286 "entry via type/targ %ld:%" UVuf,
4287 (long)kid->op_type, (UV)kid->op_targ);
4288 if (kid->op_type != OP_GV) {
4295 : SvROK(gv) && SvTYPE(SvRV(gv)) == SVt_PVCV
4296 ? MUTABLE_CV(SvRV(gv))
4302 if (flags & OP_LVALUE_NO_CROAK)
4305 namesv = cv_name(cv, NULL, 0);
4306 yyerror_pv(Perl_form(aTHX_ "Can't modify non-lvalue "
4307 "subroutine call of &%" SVf " in %s",
4308 SVfARG(namesv), PL_op_desc[type]),
4316 if (flags & OP_LVALUE_NO_CROAK) return NULL;
4317 /* grep, foreach, subcalls, refgen */
4318 if (S_potential_mod_type(type))
4320 yyerror(Perl_form(aTHX_ "Can't modify %s in %s",
4321 (o->op_type == OP_NULL && (o->op_flags & OPf_SPECIAL)
4324 type ? PL_op_desc[type] : "local"));
4337 case OP_RIGHT_SHIFT:
4346 if (!(o->op_flags & OPf_STACKED))
4352 if (o->op_flags & OPf_STACKED) {
4356 if (!(o->op_private & OPpREPEAT_DOLIST))
4359 const I32 mods = PL_modcount;
4360 /* we recurse rather than iterate here because we need to
4361 * calculate and use the delta applied to PL_modcount by the
4362 * first child. So in something like
4363 * ($x, ($y) x 3) = split;
4364 * split knows that 4 elements are wanted
4366 modkids(cBINOPo->op_first, type);
4367 if (type != OP_AASSIGN)
4369 kid = cBINOPo->op_last;
4370 if (kid->op_type == OP_CONST && SvIOK(kSVOP_sv)) {
4371 const IV iv = SvIV(kSVOP_sv);
4372 if (PL_modcount != RETURN_UNLIMITED_NUMBER)
4374 mods + (PL_modcount - mods) * (iv < 0 ? 0 : iv);
4377 PL_modcount = RETURN_UNLIMITED_NUMBER;
4383 next_kid = OpSIBLING(cUNOPo->op_first);
4388 if (type == OP_REFGEN && o->op_flags & OPf_PARENS) {
4389 PL_modcount = RETURN_UNLIMITED_NUMBER;
4390 /* Treat \(@foo) like ordinary list, but still mark it as modi-
4391 fiable since some contexts need to know. */
4392 o->op_flags |= OPf_MOD;
4397 if (scalar_mod_type(o, type))
4399 ref(cUNOPo->op_first, o->op_type);
4406 /* Do not apply the lvsub flag for rv2[ah]v in scalar context. */
4407 if (type == OP_LEAVESUBLV && (
4408 (o->op_type != OP_RV2AV && o->op_type != OP_RV2HV)
4409 || (o->op_flags & OPf_WANT) != OPf_WANT_SCALAR
4411 o->op_private |= OPpMAYBE_LVSUB;
4415 PL_modcount = RETURN_UNLIMITED_NUMBER;
4421 if (type == OP_LEAVESUBLV)
4422 o->op_private |= OPpMAYBE_LVSUB;
4426 if (type == OP_LEAVESUBLV
4427 && (o->op_private & OPpAVHVSWITCH_MASK) + OP_EACH == OP_KEYS)
4428 o->op_private |= OPpMAYBE_LVSUB;
4432 PL_hints |= HINT_BLOCK_SCOPE;
4433 if (type == OP_LEAVESUBLV)
4434 o->op_private |= OPpMAYBE_LVSUB;
4439 ref(cUNOPo->op_first, o->op_type);
4443 PL_hints |= HINT_BLOCK_SCOPE;
4453 case OP_AELEMFAST_LEX:
4460 PL_modcount = RETURN_UNLIMITED_NUMBER;
4461 if (type == OP_REFGEN && o->op_flags & OPf_PARENS)
4463 /* Treat \(@foo) like ordinary list, but still mark it as modi-
4464 fiable since some contexts need to know. */
4465 o->op_flags |= OPf_MOD;
4468 if (scalar_mod_type(o, type))
4470 if ((o->op_flags & OPf_WANT) != OPf_WANT_SCALAR
4471 && type == OP_LEAVESUBLV)
4472 o->op_private |= OPpMAYBE_LVSUB;
4476 if (!type) /* local() */
4477 Perl_croak(aTHX_ "Can't localize lexical variable %" PNf,
4478 PNfARG(PAD_COMPNAME(o->op_targ)));
4479 if (!(o->op_private & OPpLVAL_INTRO)
4480 || ( type != OP_SASSIGN && type != OP_AASSIGN
4481 && PadnameIsSTATE(PAD_COMPNAME_SV(o->op_targ)) ))
4482 S_mark_padname_lvalue(aTHX_ PAD_COMPNAME_SV(o->op_targ));
4490 if (type != OP_LEAVESUBLV && !scalar_mod_type(NULL, type))
4494 if (o->op_private == 4) /* don't allow 4 arg substr as lvalue */
4500 if (type == OP_LEAVESUBLV)
4501 o->op_private |= OPpMAYBE_LVSUB;
4502 if (o->op_flags & OPf_KIDS && OpHAS_SIBLING(cBINOPo->op_first)) {
4503 /* we recurse rather than iterate here because the child
4504 * needs to be processed with a different 'type' parameter */
4506 /* substr and vec */
4507 /* If this op is in merely potential (non-fatal) modifiable
4508 context, then apply OP_ENTERSUB context to
4509 the kid op (to avoid croaking). Other-
4510 wise pass this op’s own type so the correct op is mentioned
4511 in error messages. */
4512 op_lvalue(OpSIBLING(cBINOPo->op_first),
4513 S_potential_mod_type(type)
4521 ref(cBINOPo->op_first, o->op_type);
4522 if (type == OP_ENTERSUB &&
4523 !(o->op_private & (OPpLVAL_INTRO | OPpDEREF)))
4524 o->op_private |= OPpLVAL_DEFER;
4525 if (type == OP_LEAVESUBLV)
4526 o->op_private |= OPpMAYBE_LVSUB;
4533 o->op_private |= OPpLVALUE;
4539 if (o->op_flags & OPf_KIDS)
4540 next_kid = cLISTOPo->op_last;
4545 if (o->op_flags & OPf_SPECIAL) /* do BLOCK */
4547 else if (!(o->op_flags & OPf_KIDS))
4550 if (o->op_targ != OP_LIST) {
4551 OP *sib = OpSIBLING(cLISTOPo->op_first);
4552 /* OP_TRANS and OP_TRANSR with argument have a weird optree
4559 * compared with things like OP_MATCH which have the argument
4565 * so handle specially to correctly get "Can't modify" croaks etc
4568 if (sib && (sib->op_type == OP_TRANS || sib->op_type == OP_TRANSR))
4570 /* this should trigger a "Can't modify transliteration" err */
4571 op_lvalue(sib, type);
4573 next_kid = cBINOPo->op_first;
4574 /* we assume OP_NULLs which aren't ex-list have no more than 2
4575 * children. If this assumption is wrong, increase the scan
4577 assert( !OpHAS_SIBLING(next_kid)
4578 || !OpHAS_SIBLING(OpSIBLING(next_kid)));
4584 next_kid = cLISTOPo->op_first;
4592 if (type == OP_LEAVESUBLV
4593 || !S_vivifies(cLOGOPo->op_first->op_type))
4594 next_kid = cLOGOPo->op_first;
4595 else if (type == OP_LEAVESUBLV
4596 || !S_vivifies(OpSIBLING(cLOGOPo->op_first)->op_type))
4597 next_kid = OpSIBLING(cLOGOPo->op_first);
4601 if (type == OP_NULL) { /* local */
4603 if (!FEATURE_MYREF_IS_ENABLED)
4604 Perl_croak(aTHX_ "The experimental declared_refs "
4605 "feature is not enabled");
4606 Perl_ck_warner_d(aTHX_
4607 packWARN(WARN_EXPERIMENTAL__DECLARED_REFS),
4608 "Declaring references is experimental");
4609 next_kid = cUNOPo->op_first;
4612 if (type != OP_AASSIGN && type != OP_SASSIGN
4613 && type != OP_ENTERLOOP)
4615 /* Don’t bother applying lvalue context to the ex-list. */
4616 kid = cUNOPx(cUNOPo->op_first)->op_first;
4617 assert (!OpHAS_SIBLING(kid));
4620 if (type == OP_NULL) /* local */
4622 if (type != OP_AASSIGN) goto nomod;
4623 kid = cUNOPo->op_first;
4626 const U8 ec = PL_parser ? PL_parser->error_count : 0;
4627 S_lvref(aTHX_ kid, type);
4628 if (!PL_parser || PL_parser->error_count == ec) {
4629 if (!FEATURE_REFALIASING_IS_ENABLED)
4631 "Experimental aliasing via reference not enabled");
4632 Perl_ck_warner_d(aTHX_
4633 packWARN(WARN_EXPERIMENTAL__REFALIASING),
4634 "Aliasing via reference is experimental");
4637 if (o->op_type == OP_REFGEN)
4638 op_null(cUNOPx(cUNOPo->op_first)->op_first); /* pushmark */
4643 if ((o->op_private & OPpSPLIT_ASSIGN)) {
4644 /* This is actually @array = split. */
4645 PL_modcount = RETURN_UNLIMITED_NUMBER;
4651 op_lvalue(cUNOPo->op_first, OP_ENTERSUB);
4655 /* [20011101.069 (#7861)] File test operators interpret OPf_REF to mean that
4656 their argument is a filehandle; thus \stat(".") should not set
4658 if (type == OP_REFGEN && OP_IS_STAT(o->op_type))
4661 if (type != OP_LEAVESUBLV)
4662 o->op_flags |= OPf_MOD;
4664 if (type == OP_AASSIGN || type == OP_SASSIGN)
4665 o->op_flags |= OPf_SPECIAL