This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
make S_gen_constant_list() void return
[perl5.git] / op.c
1 #line 2 "op.c"
2 /*    op.c
3  *
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
6  *
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.
9  *
10  */
11
12 /*
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
18  *
19  *     [p.23 of _The Lord of the Rings_, I/i: "A Long-Expected Party"]
20  */
21
22 /* This file contains the functions that create, manipulate and optimize
23  * the OP structures that hold a compiled perl program.
24  *
25  * Note that during the build of miniperl, a temporary copy of this file
26  * is made, called opmini.c.
27  *
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.
38  *
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):
43  *
44  *  newBINOP(OP_ADD, flags,
45  *      newSVREF($a),
46  *      newBINOP(OP_MULTIPLY, flags, newSVREF($b), newSVREF($c))
47  *  )
48  *
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
53  * parse tree left.
54  *
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:
58  *
59  *   [+]
60  *    |
61  *   [*]------[/]
62  *    |        |
63  *    A---B    C---D
64  *
65  * with the intended execution order being:
66  *
67  *   [PREV] => A => B => [*] => C => D => [/] =>  [+] => [NEXT]
68  *
69  * At this point all the nodes' op_next pointers will have been set,
70  * except that:
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
83  * initially have had:
84  *   [*] => A;  A => B;  B => [*]
85  * and
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.
90  *
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.
96  *
97  * In summary: given a subtree, its top-level node's op_next will either
98  * be:
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
102  */
103
104 /*
105
106 Here's an older description from Larry.
107
108 Perl's compiler is essentially a 3-pass compiler with interleaved phases:
109
110     A bottom-up pass
111     A top-down pass
112     An execution-order pass
113
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
121 top level node.)
122
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.
131
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.
137 */
138
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.
151
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.
159 */
160
161 #include "EXTERN.h"
162 #define PERL_IN_OP_C
163 #include "perl.h"
164 #include "keywords.h"
165 #include "feature.h"
166 #include "regcomp.h"
167
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)
171
172 static const char array_passed_to_stat[] = "Array passed to stat will be coerced to a scalar";
173
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.
177  */
178
179 STATIC void
180 S_prune_chain_head(OP** op_p)
181 {
182     while (*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)
187     )
188         *op_p = (*op_p)->op_next;
189 }
190
191
192 /* See the explanatory comments above struct opslab in op.h. */
193
194 #ifdef PERL_DEBUG_READONLY_OPS
195 #  define PERL_SLAB_SIZE 128
196 #  define PERL_MAX_SLAB_SIZE 4096
197 #  include <sys/mman.h>
198 #endif
199
200 #ifndef PERL_SLAB_SIZE
201 #  define PERL_SLAB_SIZE 64
202 #endif
203 #ifndef PERL_MAX_SLAB_SIZE
204 #  define PERL_MAX_SLAB_SIZE 2048
205 #endif
206
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)))
210
211 /* malloc a new op slab (suitable for attaching to PL_compcv) */
212
213 static OPSLAB *
214 S_new_slab(pTHX_ size_t sz)
215 {
216 #ifdef PERL_DEBUG_READONLY_OPS
217     OPSLAB *slab = (OPSLAB *) mmap(0, sz * sizeof(I32 *),
218                                    PROT_READ|PROT_WRITE,
219                                    MAP_ANON|MAP_PRIVATE, -1, 0);
220     DEBUG_m(PerlIO_printf(Perl_debug_log, "mapped %lu at %p\n",
221                           (unsigned long) sz, slab));
222     if (slab == MAP_FAILED) {
223         perror("mmap failed");
224         abort();
225     }
226     slab->opslab_size = (U16)sz;
227 #else
228     OPSLAB *slab = (OPSLAB *)PerlMemShared_calloc(sz, sizeof(I32 *));
229 #endif
230 #ifndef WIN32
231     /* The context is unused in non-Windows */
232     PERL_UNUSED_CONTEXT;
233 #endif
234     slab->opslab_first = (OPSLOT *)((I32 **)slab + sz - 1);
235     return slab;
236 }
237
238 /* requires double parens and aTHX_ */
239 #define DEBUG_S_warn(args)                                             \
240     DEBUG_S(                                                            \
241         PerlIO_printf(Perl_debug_log, "%s", SvPVx_nolen(Perl_mess args)) \
242     )
243
244 /* Returns a sz-sized block of memory (suitable for holding an op) from
245  * a free slot in the chain of op slabs attached to PL_compcv.
246  * Allocates a new slab if necessary.
247  * if PL_compcv isn't compiling, malloc() instead.
248  */
249
250 void *
251 Perl_Slab_Alloc(pTHX_ size_t sz)
252 {
253     OPSLAB *slab;
254     OPSLAB *slab2;
255     OPSLOT *slot;
256     OP *o;
257     size_t opsz, space;
258
259     /* We only allocate ops from the slab during subroutine compilation.
260        We find the slab via PL_compcv, hence that must be non-NULL. It could
261        also be pointing to a subroutine which is now fully set up (CvROOT()
262        pointing to the top of the optree for that sub), or a subroutine
263        which isn't using the slab allocator. If our sanity checks aren't met,
264        don't use a slab, but allocate the OP directly from the heap.  */
265     if (!PL_compcv || CvROOT(PL_compcv)
266      || (CvSTART(PL_compcv) && !CvSLABBED(PL_compcv)))
267     {
268         o = (OP*)PerlMemShared_calloc(1, sz);
269         goto gotit;
270     }
271
272     /* While the subroutine is under construction, the slabs are accessed via
273        CvSTART(), to avoid needing to expand PVCV by one pointer for something
274        unneeded at runtime. Once a subroutine is constructed, the slabs are
275        accessed via CvROOT(). So if CvSTART() is NULL, no slab has been
276        allocated yet.  See the commit message for 8be227ab5eaa23f2 for more
277        details.  */
278     if (!CvSTART(PL_compcv)) {
279         CvSTART(PL_compcv) =
280             (OP *)(slab = S_new_slab(aTHX_ PERL_SLAB_SIZE));
281         CvSLABBED_on(PL_compcv);
282         slab->opslab_refcnt = 2; /* one for the CV; one for the new OP */
283     }
284     else ++(slab = (OPSLAB *)CvSTART(PL_compcv))->opslab_refcnt;
285
286     opsz = SIZE_TO_PSIZE(sz);
287     sz = opsz + OPSLOT_HEADER_P;
288
289     /* The slabs maintain a free list of OPs. In particular, constant folding
290        will free up OPs, so it makes sense to re-use them where possible. A
291        freed up slot is used in preference to a new allocation.  */
292     if (slab->opslab_freed) {
293         OP **too = &slab->opslab_freed;
294         o = *too;
295         DEBUG_S_warn((aTHX_ "found free op at %p, slab %p", (void*)o, (void*)slab));
296         while (o && DIFF(OpSLOT(o), OpSLOT(o)->opslot_next) < sz) {
297             DEBUG_S_warn((aTHX_ "Alas! too small"));
298             o = *(too = &o->op_next);
299             if (o) { DEBUG_S_warn((aTHX_ "found another free op at %p", (void*)o)); }
300         }
301         if (o) {
302             *too = o->op_next;
303             Zero(o, opsz, I32 *);
304             o->op_slabbed = 1;
305             goto gotit;
306         }
307     }
308
309 #define INIT_OPSLOT \
310             slot->opslot_slab = slab;                   \
311             slot->opslot_next = slab2->opslab_first;    \
312             slab2->opslab_first = slot;                 \
313             o = &slot->opslot_op;                       \
314             o->op_slabbed = 1
315
316     /* The partially-filled slab is next in the chain. */
317     slab2 = slab->opslab_next ? slab->opslab_next : slab;
318     if ((space = DIFF(&slab2->opslab_slots, slab2->opslab_first)) < sz) {
319         /* Remaining space is too small. */
320
321         /* If we can fit a BASEOP, add it to the free chain, so as not
322            to waste it. */
323         if (space >= SIZE_TO_PSIZE(sizeof(OP)) + OPSLOT_HEADER_P) {
324             slot = &slab2->opslab_slots;
325             INIT_OPSLOT;
326             o->op_type = OP_FREED;
327             o->op_next = slab->opslab_freed;
328             slab->opslab_freed = o;
329         }
330
331         /* Create a new slab.  Make this one twice as big. */
332         slot = slab2->opslab_first;
333         while (slot->opslot_next) slot = slot->opslot_next;
334         slab2 = S_new_slab(aTHX_
335                             (DIFF(slab2, slot)+1)*2 > PERL_MAX_SLAB_SIZE
336                                         ? PERL_MAX_SLAB_SIZE
337                                         : (DIFF(slab2, slot)+1)*2);
338         slab2->opslab_next = slab->opslab_next;
339         slab->opslab_next = slab2;
340     }
341     assert(DIFF(&slab2->opslab_slots, slab2->opslab_first) >= sz);
342
343     /* Create a new op slot */
344     slot = (OPSLOT *)((I32 **)slab2->opslab_first - sz);
345     assert(slot >= &slab2->opslab_slots);
346     if (DIFF(&slab2->opslab_slots, slot)
347          < SIZE_TO_PSIZE(sizeof(OP)) + OPSLOT_HEADER_P)
348         slot = &slab2->opslab_slots;
349     INIT_OPSLOT;
350     DEBUG_S_warn((aTHX_ "allocating op at %p, slab %p", (void*)o, (void*)slab));
351
352   gotit:
353     /* moresib == 0, op_sibling == 0 implies a solitary unattached op */
354     assert(!o->op_moresib);
355     assert(!o->op_sibparent);
356
357     return (void *)o;
358 }
359
360 #undef INIT_OPSLOT
361
362 #ifdef PERL_DEBUG_READONLY_OPS
363 void
364 Perl_Slab_to_ro(pTHX_ OPSLAB *slab)
365 {
366     PERL_ARGS_ASSERT_SLAB_TO_RO;
367
368     if (slab->opslab_readonly) return;
369     slab->opslab_readonly = 1;
370     for (; slab; slab = slab->opslab_next) {
371         /*DEBUG_U(PerlIO_printf(Perl_debug_log,"mprotect ->ro %lu at %p\n",
372                               (unsigned long) slab->opslab_size, slab));*/
373         if (mprotect(slab, slab->opslab_size * sizeof(I32 *), PROT_READ))
374             Perl_warn(aTHX_ "mprotect for %p %lu failed with %d", slab,
375                              (unsigned long)slab->opslab_size, errno);
376     }
377 }
378
379 void
380 Perl_Slab_to_rw(pTHX_ OPSLAB *const slab)
381 {
382     OPSLAB *slab2;
383
384     PERL_ARGS_ASSERT_SLAB_TO_RW;
385
386     if (!slab->opslab_readonly) return;
387     slab2 = slab;
388     for (; slab2; slab2 = slab2->opslab_next) {
389         /*DEBUG_U(PerlIO_printf(Perl_debug_log,"mprotect ->rw %lu at %p\n",
390                               (unsigned long) size, slab2));*/
391         if (mprotect((void *)slab2, slab2->opslab_size * sizeof(I32 *),
392                      PROT_READ|PROT_WRITE)) {
393             Perl_warn(aTHX_ "mprotect RW for %p %lu failed with %d", slab,
394                              (unsigned long)slab2->opslab_size, errno);
395         }
396     }
397     slab->opslab_readonly = 0;
398 }
399
400 #else
401 #  define Slab_to_rw(op)    NOOP
402 #endif
403
404 /* This cannot possibly be right, but it was copied from the old slab
405    allocator, to which it was originally added, without explanation, in
406    commit 083fcd5. */
407 #ifdef NETWARE
408 #    define PerlMemShared PerlMem
409 #endif
410
411 /* make freed ops die if they're inadvertently executed */
412 #ifdef DEBUGGING
413 static OP *
414 S_pp_freed(pTHX)
415 {
416     DIE(aTHX_ "panic: freed op 0x%p called\n", PL_op);
417 }
418 #endif
419
420
421 /* Return the block of memory used by an op to the free list of
422  * the OP slab associated with that op.
423  */
424
425 void
426 Perl_Slab_Free(pTHX_ void *op)
427 {
428     OP * const o = (OP *)op;
429     OPSLAB *slab;
430
431     PERL_ARGS_ASSERT_SLAB_FREE;
432
433 #ifdef DEBUGGING
434     o->op_ppaddr = S_pp_freed;
435 #endif
436
437     if (!o->op_slabbed) {
438         if (!o->op_static)
439             PerlMemShared_free(op);
440         return;
441     }
442
443     slab = OpSLAB(o);
444     /* If this op is already freed, our refcount will get screwy. */
445     assert(o->op_type != OP_FREED);
446     o->op_type = OP_FREED;
447     o->op_next = slab->opslab_freed;
448     slab->opslab_freed = o;
449     DEBUG_S_warn((aTHX_ "free op at %p, recorded in slab %p", (void*)o, (void*)slab));
450     OpslabREFCNT_dec_padok(slab);
451 }
452
453 void
454 Perl_opslab_free_nopad(pTHX_ OPSLAB *slab)
455 {
456     const bool havepad = !!PL_comppad;
457     PERL_ARGS_ASSERT_OPSLAB_FREE_NOPAD;
458     if (havepad) {
459         ENTER;
460         PAD_SAVE_SETNULLPAD();
461     }
462     opslab_free(slab);
463     if (havepad) LEAVE;
464 }
465
466 /* Free a chain of OP slabs. Should only be called after all ops contained
467  * in it have been freed. At this point, its reference count should be 1,
468  * because OpslabREFCNT_dec() skips doing rc-- when it detects that rc == 1,
469  * and just directly calls opslab_free().
470  * (Note that the reference count which PL_compcv held on the slab should
471  * have been removed once compilation of the sub was complete).
472  *
473  *
474  */
475
476 void
477 Perl_opslab_free(pTHX_ OPSLAB *slab)
478 {
479     OPSLAB *slab2;
480     PERL_ARGS_ASSERT_OPSLAB_FREE;
481     PERL_UNUSED_CONTEXT;
482     DEBUG_S_warn((aTHX_ "freeing slab %p", (void*)slab));
483     assert(slab->opslab_refcnt == 1);
484     do {
485         slab2 = slab->opslab_next;
486 #ifdef DEBUGGING
487         slab->opslab_refcnt = ~(size_t)0;
488 #endif
489 #ifdef PERL_DEBUG_READONLY_OPS
490         DEBUG_m(PerlIO_printf(Perl_debug_log, "Deallocate slab at %p\n",
491                                                (void*)slab));
492         if (munmap(slab, slab->opslab_size * sizeof(I32 *))) {
493             perror("munmap failed");
494             abort();
495         }
496 #else
497         PerlMemShared_free(slab);
498 #endif
499         slab = slab2;
500     } while (slab);
501 }
502
503 /* like opslab_free(), but first calls op_free() on any ops in the slab
504  * not marked as OP_FREED
505  */
506
507 void
508 Perl_opslab_force_free(pTHX_ OPSLAB *slab)
509 {
510     OPSLAB *slab2;
511 #ifdef DEBUGGING
512     size_t savestack_count = 0;
513 #endif
514     PERL_ARGS_ASSERT_OPSLAB_FORCE_FREE;
515     slab2 = slab;
516     do {
517         OPSLOT *slot;
518         for (slot = slab2->opslab_first;
519              slot->opslot_next;
520              slot = slot->opslot_next) {
521             if (slot->opslot_op.op_type != OP_FREED
522              && !(slot->opslot_op.op_savefree
523 #ifdef DEBUGGING
524                   && ++savestack_count
525 #endif
526                  )
527             ) {
528                 assert(slot->opslot_op.op_slabbed);
529                 op_free(&slot->opslot_op);
530                 if (slab->opslab_refcnt == 1) goto free;
531             }
532         }
533     } while ((slab2 = slab2->opslab_next));
534     /* > 1 because the CV still holds a reference count. */
535     if (slab->opslab_refcnt > 1) { /* still referenced by the savestack */
536 #ifdef DEBUGGING
537         assert(savestack_count == slab->opslab_refcnt-1);
538 #endif
539         /* Remove the CV’s reference count. */
540         slab->opslab_refcnt--;
541         return;
542     }
543    free:
544     opslab_free(slab);
545 }
546
547 #ifdef PERL_DEBUG_READONLY_OPS
548 OP *
549 Perl_op_refcnt_inc(pTHX_ OP *o)
550 {
551     if(o) {
552         OPSLAB *const slab = o->op_slabbed ? OpSLAB(o) : NULL;
553         if (slab && slab->opslab_readonly) {
554             Slab_to_rw(slab);
555             ++o->op_targ;
556             Slab_to_ro(slab);
557         } else {
558             ++o->op_targ;
559         }
560     }
561     return o;
562
563 }
564
565 PADOFFSET
566 Perl_op_refcnt_dec(pTHX_ OP *o)
567 {
568     PADOFFSET result;
569     OPSLAB *const slab = o->op_slabbed ? OpSLAB(o) : NULL;
570
571     PERL_ARGS_ASSERT_OP_REFCNT_DEC;
572
573     if (slab && slab->opslab_readonly) {
574         Slab_to_rw(slab);
575         result = --o->op_targ;
576         Slab_to_ro(slab);
577     } else {
578         result = --o->op_targ;
579     }
580     return result;
581 }
582 #endif
583 /*
584  * In the following definition, the ", (OP*)0" is just to make the compiler
585  * think the expression is of the right type: croak actually does a Siglongjmp.
586  */
587 #define CHECKOP(type,o) \
588     ((PL_op_mask && PL_op_mask[type])                           \
589      ? ( op_free((OP*)o),                                       \
590          Perl_croak(aTHX_ "'%s' trapped by operation mask", PL_op_desc[type]),  \
591          (OP*)0 )                                               \
592      : PL_check[type](aTHX_ (OP*)o))
593
594 #define RETURN_UNLIMITED_NUMBER (PERL_INT_MAX / 2)
595
596 #define OpTYPE_set(o,type) \
597     STMT_START {                                \
598         o->op_type = (OPCODE)type;              \
599         o->op_ppaddr = PL_ppaddr[type];         \
600     } STMT_END
601
602 STATIC OP *
603 S_no_fh_allowed(pTHX_ OP *o)
604 {
605     PERL_ARGS_ASSERT_NO_FH_ALLOWED;
606
607     yyerror(Perl_form(aTHX_ "Missing comma after first argument to %s function",
608                  OP_DESC(o)));
609     return o;
610 }
611
612 STATIC OP *
613 S_too_few_arguments_pv(pTHX_ OP *o, const char* name, U32 flags)
614 {
615     PERL_ARGS_ASSERT_TOO_FEW_ARGUMENTS_PV;
616     yyerror_pv(Perl_form(aTHX_ "Not enough arguments for %s", name), flags);
617     return o;
618 }
619  
620 STATIC OP *
621 S_too_many_arguments_pv(pTHX_ OP *o, const char *name, U32 flags)
622 {
623     PERL_ARGS_ASSERT_TOO_MANY_ARGUMENTS_PV;
624
625     yyerror_pv(Perl_form(aTHX_ "Too many arguments for %s", name), flags);
626     return o;
627 }
628
629 STATIC void
630 S_bad_type_pv(pTHX_ I32 n, const char *t, const OP *o, const OP *kid)
631 {
632     PERL_ARGS_ASSERT_BAD_TYPE_PV;
633
634     yyerror_pv(Perl_form(aTHX_ "Type of arg %d to %s must be %s (not %s)",
635                  (int)n, PL_op_desc[(o)->op_type], t, OP_DESC(kid)), 0);
636 }
637
638 /* remove flags var, its unused in all callers, move to to right end since gv
639   and kid are always the same */
640 STATIC void
641 S_bad_type_gv(pTHX_ I32 n, GV *gv, const OP *kid, const char *t)
642 {
643     SV * const namesv = cv_name((CV *)gv, NULL, 0);
644     PERL_ARGS_ASSERT_BAD_TYPE_GV;
645  
646     yyerror_pv(Perl_form(aTHX_ "Type of arg %d to %" SVf " must be %s (not %s)",
647                  (int)n, SVfARG(namesv), t, OP_DESC(kid)), SvUTF8(namesv));
648 }
649
650 STATIC void
651 S_no_bareword_allowed(pTHX_ OP *o)
652 {
653     PERL_ARGS_ASSERT_NO_BAREWORD_ALLOWED;
654
655     qerror(Perl_mess(aTHX_
656                      "Bareword \"%" SVf "\" not allowed while \"strict subs\" in use",
657                      SVfARG(cSVOPo_sv)));
658     o->op_private &= ~OPpCONST_STRICT; /* prevent warning twice about the same OP */
659 }
660
661 /* "register" allocation */
662
663 PADOFFSET
664 Perl_allocmy(pTHX_ const char *const name, const STRLEN len, const U32 flags)
665 {
666     PADOFFSET off;
667     const bool is_our = (PL_parser->in_my == KEY_our);
668
669     PERL_ARGS_ASSERT_ALLOCMY;
670
671     if (flags & ~SVf_UTF8)
672         Perl_croak(aTHX_ "panic: allocmy illegal flag bits 0x%" UVxf,
673                    (UV)flags);
674
675     /* complain about "my $<special_var>" etc etc */
676     if (   len
677         && !(  is_our
678             || isALPHA(name[1])
679             || (   (flags & SVf_UTF8)
680                 && isIDFIRST_utf8_safe((U8 *)name+1, name + len))
681             || (name[1] == '_' && len > 2)))
682     {
683         if (!(flags & SVf_UTF8 && UTF8_IS_START(name[1]))
684          && isASCII(name[1])
685          && (!isPRINT(name[1]) || strchr("\t\n\r\f", name[1]))) {
686             /* diag_listed_as: Can't use global %s in "%s" */
687             yyerror(Perl_form(aTHX_ "Can't use global %c^%c%.*s in \"%s\"",
688                               name[0], toCTRL(name[1]), (int)(len - 2), name + 2,
689                               PL_parser->in_my == KEY_state ? "state" : "my"));
690         } else {
691             yyerror_pv(Perl_form(aTHX_ "Can't use global %.*s in \"%s\"", (int) len, name,
692                               PL_parser->in_my == KEY_state ? "state" : "my"), flags & SVf_UTF8);
693         }
694     }
695
696     /* allocate a spare slot and store the name in that slot */
697
698     off = pad_add_name_pvn(name, len,
699                        (is_our ? padadd_OUR :
700                         PL_parser->in_my == KEY_state ? padadd_STATE : 0),
701                     PL_parser->in_my_stash,
702                     (is_our
703                         /* $_ is always in main::, even with our */
704                         ? (PL_curstash && !memEQs(name,len,"$_")
705                             ? PL_curstash
706                             : PL_defstash)
707                         : NULL
708                     )
709     );
710     /* anon sub prototypes contains state vars should always be cloned,
711      * otherwise the state var would be shared between anon subs */
712
713     if (PL_parser->in_my == KEY_state && CvANON(PL_compcv))
714         CvCLONE_on(PL_compcv);
715
716     return off;
717 }
718
719 /*
720 =head1 Optree Manipulation Functions
721
722 =for apidoc alloccopstash
723
724 Available only under threaded builds, this function allocates an entry in
725 C<PL_stashpad> for the stash passed to it.
726
727 =cut
728 */
729
730 #ifdef USE_ITHREADS
731 PADOFFSET
732 Perl_alloccopstash(pTHX_ HV *hv)
733 {
734     PADOFFSET off = 0, o = 1;
735     bool found_slot = FALSE;
736
737     PERL_ARGS_ASSERT_ALLOCCOPSTASH;
738
739     if (PL_stashpad[PL_stashpadix] == hv) return PL_stashpadix;
740
741     for (; o < PL_stashpadmax; ++o) {
742         if (PL_stashpad[o] == hv) return PL_stashpadix = o;
743         if (!PL_stashpad[o] || SvTYPE(PL_stashpad[o]) != SVt_PVHV)
744             found_slot = TRUE, off = o;
745     }
746     if (!found_slot) {
747         Renew(PL_stashpad, PL_stashpadmax + 10, HV *);
748         Zero(PL_stashpad + PL_stashpadmax, 10, HV *);
749         off = PL_stashpadmax;
750         PL_stashpadmax += 10;
751     }
752
753     PL_stashpad[PL_stashpadix = off] = hv;
754     return off;
755 }
756 #endif
757
758 /* free the body of an op without examining its contents.
759  * Always use this rather than FreeOp directly */
760
761 static void
762 S_op_destroy(pTHX_ OP *o)
763 {
764     FreeOp(o);
765 }
766
767 /* Destructor */
768
769 /*
770 =for apidoc op_free
771
772 Free an op and its children. Only use this when an op is no longer linked
773 to from any optree.
774
775 =cut
776 */
777
778 void
779 Perl_op_free(pTHX_ OP *o)
780 {
781     dVAR;
782     OPCODE type;
783     OP *top_op = o;
784     OP *next_op = o;
785     bool went_up = FALSE; /* whether we reached the current node by
786                             following the parent pointer from a child, and
787                             so have already seen this node */
788
789     if (!o || o->op_type == OP_FREED)
790         return;
791
792     if (o->op_private & OPpREFCOUNTED) {
793         /* if base of tree is refcounted, just decrement */
794         switch (o->op_type) {
795         case OP_LEAVESUB:
796         case OP_LEAVESUBLV:
797         case OP_LEAVEEVAL:
798         case OP_LEAVE:
799         case OP_SCOPE:
800         case OP_LEAVEWRITE:
801             {
802                 PADOFFSET refcnt;
803                 OP_REFCNT_LOCK;
804                 refcnt = OpREFCNT_dec(o);
805                 OP_REFCNT_UNLOCK;
806                 if (refcnt) {
807                     /* Need to find and remove any pattern match ops from
808                      * the list we maintain for reset().  */
809                     find_and_forget_pmops(o);
810                     return;
811                 }
812             }
813             break;
814         default:
815             break;
816         }
817     }
818
819     while (next_op) {
820         o = next_op;
821
822         /* free child ops before ourself, (then free ourself "on the
823          * way back up") */
824
825         if (!went_up && o->op_flags & OPf_KIDS) {
826             next_op = cUNOPo->op_first;
827             continue;
828         }
829
830         /* find the next node to visit, *then* free the current node
831          * (can't rely on o->op_* fields being valid after o has been
832          * freed) */
833
834         /* The next node to visit will be either the sibling, or the
835          * parent if no siblings left, or NULL if we've worked our way
836          * back up to the top node in the tree */
837         next_op = (o == top_op) ? NULL : o->op_sibparent;
838         went_up = cBOOL(!OpHAS_SIBLING(o)); /* parents are already visited */
839
840         /* Now process the current node */
841
842         /* Though ops may be freed twice, freeing the op after its slab is a
843            big no-no. */
844         assert(!o->op_slabbed || OpSLAB(o)->opslab_refcnt != ~(size_t)0);
845         /* During the forced freeing of ops after compilation failure, kidops
846            may be freed before their parents. */
847         if (!o || o->op_type == OP_FREED)
848             continue;
849
850         type = o->op_type;
851
852         /* an op should only ever acquire op_private flags that we know about.
853          * If this fails, you may need to fix something in regen/op_private.
854          * Don't bother testing if:
855          *   * the op_ppaddr doesn't match the op; someone may have
856          *     overridden the op and be doing strange things with it;
857          *   * we've errored, as op flags are often left in an
858          *     inconsistent state then. Note that an error when
859          *     compiling the main program leaves PL_parser NULL, so
860          *     we can't spot faults in the main code, only
861          *     evaled/required code */
862 #ifdef DEBUGGING
863         if (   o->op_ppaddr == PL_ppaddr[type]
864             && PL_parser
865             && !PL_parser->error_count)
866         {
867             assert(!(o->op_private & ~PL_op_private_valid[type]));
868         }
869 #endif
870
871
872         /* Call the op_free hook if it has been set. Do it now so that it's called
873          * at the right time for refcounted ops, but still before all of the kids
874          * are freed. */
875         CALL_OPFREEHOOK(o);
876
877         if (type == OP_NULL)
878             type = (OPCODE)o->op_targ;
879
880         if (o->op_slabbed)
881             Slab_to_rw(OpSLAB(o));
882
883         /* COP* is not cleared by op_clear() so that we may track line
884          * numbers etc even after null() */
885         if (type == OP_NEXTSTATE || type == OP_DBSTATE) {
886             cop_free((COP*)o);
887         }
888
889         op_clear(o);
890         FreeOp(o);
891         if (PL_op == o)
892             PL_op = NULL;
893     }
894 }
895
896
897 /* S_op_clear_gv(): free a GV attached to an OP */
898
899 STATIC
900 #ifdef USE_ITHREADS
901 void S_op_clear_gv(pTHX_ OP *o, PADOFFSET *ixp)
902 #else
903 void S_op_clear_gv(pTHX_ OP *o, SV**svp)
904 #endif
905 {
906
907     GV *gv = (o->op_type == OP_GV || o->op_type == OP_GVSV
908             || o->op_type == OP_MULTIDEREF)
909 #ifdef USE_ITHREADS
910                 && PL_curpad
911                 ? ((GV*)PAD_SVl(*ixp)) : NULL;
912 #else
913                 ? (GV*)(*svp) : NULL;
914 #endif
915     /* It's possible during global destruction that the GV is freed
916        before the optree. Whilst the SvREFCNT_inc is happy to bump from
917        0 to 1 on a freed SV, the corresponding SvREFCNT_dec from 1 to 0
918        will trigger an assertion failure, because the entry to sv_clear
919        checks that the scalar is not already freed.  A check of for
920        !SvIS_FREED(gv) turns out to be invalid, because during global
921        destruction the reference count can be forced down to zero
922        (with SVf_BREAK set).  In which case raising to 1 and then
923        dropping to 0 triggers cleanup before it should happen.  I
924        *think* that this might actually be a general, systematic,
925        weakness of the whole idea of SVf_BREAK, in that code *is*
926        allowed to raise and lower references during global destruction,
927        so any *valid* code that happens to do this during global
928        destruction might well trigger premature cleanup.  */
929     bool still_valid = gv && SvREFCNT(gv);
930
931     if (still_valid)
932         SvREFCNT_inc_simple_void(gv);
933 #ifdef USE_ITHREADS
934     if (*ixp > 0) {
935         pad_swipe(*ixp, TRUE);
936         *ixp = 0;
937     }
938 #else
939     SvREFCNT_dec(*svp);
940     *svp = NULL;
941 #endif
942     if (still_valid) {
943         int try_downgrade = SvREFCNT(gv) == 2;
944         SvREFCNT_dec_NN(gv);
945         if (try_downgrade)
946             gv_try_downgrade(gv);
947     }
948 }
949
950
951 void
952 Perl_op_clear(pTHX_ OP *o)
953 {
954
955     dVAR;
956
957     PERL_ARGS_ASSERT_OP_CLEAR;
958
959     switch (o->op_type) {
960     case OP_NULL:       /* Was holding old type, if any. */
961         /* FALLTHROUGH */
962     case OP_ENTERTRY:
963     case OP_ENTEREVAL:  /* Was holding hints. */
964     case OP_ARGDEFELEM: /* Was holding signature index. */
965         o->op_targ = 0;
966         break;
967     default:
968         if (!(o->op_flags & OPf_REF) || !OP_IS_STAT(o->op_type))
969             break;
970         /* FALLTHROUGH */
971     case OP_GVSV:
972     case OP_GV:
973     case OP_AELEMFAST:
974 #ifdef USE_ITHREADS
975             S_op_clear_gv(aTHX_ o, &(cPADOPx(o)->op_padix));
976 #else
977             S_op_clear_gv(aTHX_ o, &(cSVOPx(o)->op_sv));
978 #endif
979         break;
980     case OP_METHOD_REDIR:
981     case OP_METHOD_REDIR_SUPER:
982 #ifdef USE_ITHREADS
983         if (cMETHOPx(o)->op_rclass_targ) {
984             pad_swipe(cMETHOPx(o)->op_rclass_targ, 1);
985             cMETHOPx(o)->op_rclass_targ = 0;
986         }
987 #else
988         SvREFCNT_dec(cMETHOPx(o)->op_rclass_sv);
989         cMETHOPx(o)->op_rclass_sv = NULL;
990 #endif
991         /* FALLTHROUGH */
992     case OP_METHOD_NAMED:
993     case OP_METHOD_SUPER:
994         SvREFCNT_dec(cMETHOPx(o)->op_u.op_meth_sv);
995         cMETHOPx(o)->op_u.op_meth_sv = NULL;
996 #ifdef USE_ITHREADS
997         if (o->op_targ) {
998             pad_swipe(o->op_targ, 1);
999             o->op_targ = 0;
1000         }
1001 #endif
1002         break;
1003     case OP_CONST:
1004     case OP_HINTSEVAL:
1005         SvREFCNT_dec(cSVOPo->op_sv);
1006         cSVOPo->op_sv = NULL;
1007 #ifdef USE_ITHREADS
1008         /** Bug #15654
1009           Even if op_clear does a pad_free for the target of the op,
1010           pad_free doesn't actually remove the sv that exists in the pad;
1011           instead it lives on. This results in that it could be reused as 
1012           a target later on when the pad was reallocated.
1013         **/
1014         if(o->op_targ) {
1015           pad_swipe(o->op_targ,1);
1016           o->op_targ = 0;
1017         }
1018 #endif
1019         break;
1020     case OP_DUMP:
1021     case OP_GOTO:
1022     case OP_NEXT:
1023     case OP_LAST:
1024     case OP_REDO:
1025         if (o->op_flags & (OPf_SPECIAL|OPf_STACKED|OPf_KIDS))
1026             break;
1027         /* FALLTHROUGH */
1028     case OP_TRANS:
1029     case OP_TRANSR:
1030         if (   (o->op_type == OP_TRANS || o->op_type == OP_TRANSR)
1031             && (o->op_private & (OPpTRANS_FROM_UTF|OPpTRANS_TO_UTF)))
1032         {
1033 #ifdef USE_ITHREADS
1034             if (cPADOPo->op_padix > 0) {
1035                 pad_swipe(cPADOPo->op_padix, TRUE);
1036                 cPADOPo->op_padix = 0;
1037             }
1038 #else
1039             SvREFCNT_dec(cSVOPo->op_sv);
1040             cSVOPo->op_sv = NULL;
1041 #endif
1042         }
1043         else {
1044             PerlMemShared_free(cPVOPo->op_pv);
1045             cPVOPo->op_pv = NULL;
1046         }
1047         break;
1048     case OP_SUBST:
1049         op_free(cPMOPo->op_pmreplrootu.op_pmreplroot);
1050         goto clear_pmop;
1051
1052     case OP_SPLIT:
1053         if (     (o->op_private & OPpSPLIT_ASSIGN) /* @array  = split */
1054             && !(o->op_flags & OPf_STACKED))       /* @{expr} = split */
1055         {
1056             if (o->op_private & OPpSPLIT_LEX)
1057                 pad_free(cPMOPo->op_pmreplrootu.op_pmtargetoff);
1058             else
1059 #ifdef USE_ITHREADS
1060                 pad_swipe(cPMOPo->op_pmreplrootu.op_pmtargetoff, TRUE);
1061 #else
1062                 SvREFCNT_dec(MUTABLE_SV(cPMOPo->op_pmreplrootu.op_pmtargetgv));
1063 #endif
1064         }
1065         /* FALLTHROUGH */
1066     case OP_MATCH:
1067     case OP_QR:
1068     clear_pmop:
1069         if (!(cPMOPo->op_pmflags & PMf_CODELIST_PRIVATE))
1070             op_free(cPMOPo->op_code_list);
1071         cPMOPo->op_code_list = NULL;
1072         forget_pmop(cPMOPo);
1073         cPMOPo->op_pmreplrootu.op_pmreplroot = NULL;
1074         /* we use the same protection as the "SAFE" version of the PM_ macros
1075          * here since sv_clean_all might release some PMOPs
1076          * after PL_regex_padav has been cleared
1077          * and the clearing of PL_regex_padav needs to
1078          * happen before sv_clean_all
1079          */
1080 #ifdef USE_ITHREADS
1081         if(PL_regex_pad) {        /* We could be in destruction */
1082             const IV offset = (cPMOPo)->op_pmoffset;
1083             ReREFCNT_dec(PM_GETRE(cPMOPo));
1084             PL_regex_pad[offset] = &PL_sv_undef;
1085             sv_catpvn_nomg(PL_regex_pad[0], (const char *)&offset,
1086                            sizeof(offset));
1087         }
1088 #else
1089         ReREFCNT_dec(PM_GETRE(cPMOPo));
1090         PM_SETRE(cPMOPo, NULL);
1091 #endif
1092
1093         break;
1094
1095     case OP_ARGCHECK:
1096         PerlMemShared_free(cUNOP_AUXo->op_aux);
1097         break;
1098
1099     case OP_MULTICONCAT:
1100         {
1101             UNOP_AUX_item *aux = cUNOP_AUXo->op_aux;
1102             /* aux[PERL_MULTICONCAT_IX_PLAIN_PV] and/or
1103              * aux[PERL_MULTICONCAT_IX_UTF8_PV] point to plain and/or
1104              * utf8 shared strings */
1105             char *p1 = aux[PERL_MULTICONCAT_IX_PLAIN_PV].pv;
1106             char *p2 = aux[PERL_MULTICONCAT_IX_UTF8_PV].pv;
1107             if (p1)
1108                 PerlMemShared_free(p1);
1109             if (p2 && p1 != p2)
1110                 PerlMemShared_free(p2);
1111             PerlMemShared_free(aux);
1112         }
1113         break;
1114
1115     case OP_MULTIDEREF:
1116         {
1117             UNOP_AUX_item *items = cUNOP_AUXo->op_aux;
1118             UV actions = items->uv;
1119             bool last = 0;
1120             bool is_hash = FALSE;
1121
1122             while (!last) {
1123                 switch (actions & MDEREF_ACTION_MASK) {
1124
1125                 case MDEREF_reload:
1126                     actions = (++items)->uv;
1127                     continue;
1128
1129                 case MDEREF_HV_padhv_helem:
1130                     is_hash = TRUE;
1131                     /* FALLTHROUGH */
1132                 case MDEREF_AV_padav_aelem:
1133                     pad_free((++items)->pad_offset);
1134                     goto do_elem;
1135
1136                 case MDEREF_HV_gvhv_helem:
1137                     is_hash = TRUE;
1138                     /* FALLTHROUGH */
1139                 case MDEREF_AV_gvav_aelem:
1140 #ifdef USE_ITHREADS
1141                     S_op_clear_gv(aTHX_ o, &((++items)->pad_offset));
1142 #else
1143                     S_op_clear_gv(aTHX_ o, &((++items)->sv));
1144 #endif
1145                     goto do_elem;
1146
1147                 case MDEREF_HV_gvsv_vivify_rv2hv_helem:
1148                     is_hash = TRUE;
1149                     /* FALLTHROUGH */
1150                 case MDEREF_AV_gvsv_vivify_rv2av_aelem:
1151 #ifdef USE_ITHREADS
1152                     S_op_clear_gv(aTHX_ o, &((++items)->pad_offset));
1153 #else
1154                     S_op_clear_gv(aTHX_ o, &((++items)->sv));
1155 #endif
1156                     goto do_vivify_rv2xv_elem;
1157
1158                 case MDEREF_HV_padsv_vivify_rv2hv_helem:
1159                     is_hash = TRUE;
1160                     /* FALLTHROUGH */
1161                 case MDEREF_AV_padsv_vivify_rv2av_aelem:
1162                     pad_free((++items)->pad_offset);
1163                     goto do_vivify_rv2xv_elem;
1164
1165                 case MDEREF_HV_pop_rv2hv_helem:
1166                 case MDEREF_HV_vivify_rv2hv_helem:
1167                     is_hash = TRUE;
1168                     /* FALLTHROUGH */
1169                 do_vivify_rv2xv_elem:
1170                 case MDEREF_AV_pop_rv2av_aelem:
1171                 case MDEREF_AV_vivify_rv2av_aelem:
1172                 do_elem:
1173                     switch (actions & MDEREF_INDEX_MASK) {
1174                     case MDEREF_INDEX_none:
1175                         last = 1;
1176                         break;
1177                     case MDEREF_INDEX_const:
1178                         if (is_hash) {
1179 #ifdef USE_ITHREADS
1180                             /* see RT #15654 */
1181                             pad_swipe((++items)->pad_offset, 1);
1182 #else
1183                             SvREFCNT_dec((++items)->sv);
1184 #endif
1185                         }
1186                         else
1187                             items++;
1188                         break;
1189                     case MDEREF_INDEX_padsv:
1190                         pad_free((++items)->pad_offset);
1191                         break;
1192                     case MDEREF_INDEX_gvsv:
1193 #ifdef USE_ITHREADS
1194                         S_op_clear_gv(aTHX_ o, &((++items)->pad_offset));
1195 #else
1196                         S_op_clear_gv(aTHX_ o, &((++items)->sv));
1197 #endif
1198                         break;
1199                     }
1200
1201                     if (actions & MDEREF_FLAG_last)
1202                         last = 1;
1203                     is_hash = FALSE;
1204
1205                     break;
1206
1207                 default:
1208                     assert(0);
1209                     last = 1;
1210                     break;
1211
1212                 } /* switch */
1213
1214                 actions >>= MDEREF_SHIFT;
1215             } /* while */
1216
1217             /* start of malloc is at op_aux[-1], where the length is
1218              * stored */
1219             PerlMemShared_free(cUNOP_AUXo->op_aux - 1);
1220         }
1221         break;
1222     }
1223
1224     if (o->op_targ > 0) {
1225         pad_free(o->op_targ);
1226         o->op_targ = 0;
1227     }
1228 }
1229
1230 STATIC void
1231 S_cop_free(pTHX_ COP* cop)
1232 {
1233     PERL_ARGS_ASSERT_COP_FREE;
1234
1235     CopFILE_free(cop);
1236     if (! specialWARN(cop->cop_warnings))
1237         PerlMemShared_free(cop->cop_warnings);
1238     cophh_free(CopHINTHASH_get(cop));
1239     if (PL_curcop == cop)
1240        PL_curcop = NULL;
1241 }
1242
1243 STATIC void
1244 S_forget_pmop(pTHX_ PMOP *const o)
1245 {
1246     HV * const pmstash = PmopSTASH(o);
1247
1248     PERL_ARGS_ASSERT_FORGET_PMOP;
1249
1250     if (pmstash && !SvIS_FREED(pmstash) && SvMAGICAL(pmstash)) {
1251         MAGIC * const mg = mg_find((const SV *)pmstash, PERL_MAGIC_symtab);
1252         if (mg) {
1253             PMOP **const array = (PMOP**) mg->mg_ptr;
1254             U32 count = mg->mg_len / sizeof(PMOP**);
1255             U32 i = count;
1256
1257             while (i--) {
1258                 if (array[i] == o) {
1259                     /* Found it. Move the entry at the end to overwrite it.  */
1260                     array[i] = array[--count];
1261                     mg->mg_len = count * sizeof(PMOP**);
1262                     /* Could realloc smaller at this point always, but probably
1263                        not worth it. Probably worth free()ing if we're the
1264                        last.  */
1265                     if(!count) {
1266                         Safefree(mg->mg_ptr);
1267                         mg->mg_ptr = NULL;
1268                     }
1269                     break;
1270                 }
1271             }
1272         }
1273     }
1274     if (PL_curpm == o) 
1275         PL_curpm = NULL;
1276 }
1277
1278 STATIC void
1279 S_find_and_forget_pmops(pTHX_ OP *o)
1280 {
1281     PERL_ARGS_ASSERT_FIND_AND_FORGET_PMOPS;
1282
1283     if (o->op_flags & OPf_KIDS) {
1284         OP *kid = cUNOPo->op_first;
1285         while (kid) {
1286             switch (kid->op_type) {
1287             case OP_SUBST:
1288             case OP_SPLIT:
1289             case OP_MATCH:
1290             case OP_QR:
1291                 forget_pmop((PMOP*)kid);
1292             }
1293             find_and_forget_pmops(kid);
1294             kid = OpSIBLING(kid);
1295         }
1296     }
1297 }
1298
1299 /*
1300 =for apidoc op_null
1301
1302 Neutralizes an op when it is no longer needed, but is still linked to from
1303 other ops.
1304
1305 =cut
1306 */
1307
1308 void
1309 Perl_op_null(pTHX_ OP *o)
1310 {
1311     dVAR;
1312
1313     PERL_ARGS_ASSERT_OP_NULL;
1314
1315     if (o->op_type == OP_NULL)
1316         return;
1317     op_clear(o);
1318     o->op_targ = o->op_type;
1319     OpTYPE_set(o, OP_NULL);
1320 }
1321
1322 void
1323 Perl_op_refcnt_lock(pTHX)
1324   PERL_TSA_ACQUIRE(PL_op_mutex)
1325 {
1326 #ifdef USE_ITHREADS
1327     dVAR;
1328 #endif
1329     PERL_UNUSED_CONTEXT;
1330     OP_REFCNT_LOCK;
1331 }
1332
1333 void
1334 Perl_op_refcnt_unlock(pTHX)
1335   PERL_TSA_RELEASE(PL_op_mutex)
1336 {
1337 #ifdef USE_ITHREADS
1338     dVAR;
1339 #endif
1340     PERL_UNUSED_CONTEXT;
1341     OP_REFCNT_UNLOCK;
1342 }
1343
1344
1345 /*
1346 =for apidoc op_sibling_splice
1347
1348 A general function for editing the structure of an existing chain of
1349 op_sibling nodes.  By analogy with the perl-level C<splice()> function, allows
1350 you to delete zero or more sequential nodes, replacing them with zero or
1351 more different nodes.  Performs the necessary op_first/op_last
1352 housekeeping on the parent node and op_sibling manipulation on the
1353 children.  The last deleted node will be marked as as the last node by
1354 updating the op_sibling/op_sibparent or op_moresib field as appropriate.
1355
1356 Note that op_next is not manipulated, and nodes are not freed; that is the
1357 responsibility of the caller.  It also won't create a new list op for an
1358 empty list etc; use higher-level functions like op_append_elem() for that.
1359
1360 C<parent> is the parent node of the sibling chain. It may passed as C<NULL> if
1361 the splicing doesn't affect the first or last op in the chain.
1362
1363 C<start> is the node preceding the first node to be spliced.  Node(s)
1364 following it will be deleted, and ops will be inserted after it.  If it is
1365 C<NULL>, the first node onwards is deleted, and nodes are inserted at the
1366 beginning.
1367
1368 C<del_count> is the number of nodes to delete.  If zero, no nodes are deleted.
1369 If -1 or greater than or equal to the number of remaining kids, all
1370 remaining kids are deleted.
1371
1372 C<insert> is the first of a chain of nodes to be inserted in place of the nodes.
1373 If C<NULL>, no nodes are inserted.
1374
1375 The head of the chain of deleted ops is returned, or C<NULL> if no ops were
1376 deleted.
1377
1378 For example:
1379
1380     action                    before      after         returns
1381     ------                    -----       -----         -------
1382
1383                               P           P
1384     splice(P, A, 2, X-Y-Z)    |           |             B-C
1385                               A-B-C-D     A-X-Y-Z-D
1386
1387                               P           P
1388     splice(P, NULL, 1, X-Y)   |           |             A
1389                               A-B-C-D     X-Y-B-C-D
1390
1391                               P           P
1392     splice(P, NULL, 3, NULL)  |           |             A-B-C
1393                               A-B-C-D     D
1394
1395                               P           P
1396     splice(P, B, 0, X-Y)      |           |             NULL
1397                               A-B-C-D     A-B-X-Y-C-D
1398
1399
1400 For lower-level direct manipulation of C<op_sibparent> and C<op_moresib>,
1401 see C<L</OpMORESIB_set>>, C<L</OpLASTSIB_set>>, C<L</OpMAYBESIB_set>>.
1402
1403 =cut
1404 */
1405
1406 OP *
1407 Perl_op_sibling_splice(OP *parent, OP *start, int del_count, OP* insert)
1408 {
1409     OP *first;
1410     OP *rest;
1411     OP *last_del = NULL;
1412     OP *last_ins = NULL;
1413
1414     if (start)
1415         first = OpSIBLING(start);
1416     else if (!parent)
1417         goto no_parent;
1418     else
1419         first = cLISTOPx(parent)->op_first;
1420
1421     assert(del_count >= -1);
1422
1423     if (del_count && first) {
1424         last_del = first;
1425         while (--del_count && OpHAS_SIBLING(last_del))
1426             last_del = OpSIBLING(last_del);
1427         rest = OpSIBLING(last_del);
1428         OpLASTSIB_set(last_del, NULL);
1429     }
1430     else
1431         rest = first;
1432
1433     if (insert) {
1434         last_ins = insert;
1435         while (OpHAS_SIBLING(last_ins))
1436             last_ins = OpSIBLING(last_ins);
1437         OpMAYBESIB_set(last_ins, rest, NULL);
1438     }
1439     else
1440         insert = rest;
1441
1442     if (start) {
1443         OpMAYBESIB_set(start, insert, NULL);
1444     }
1445     else {
1446         assert(parent);
1447         cLISTOPx(parent)->op_first = insert;
1448         if (insert)
1449             parent->op_flags |= OPf_KIDS;
1450         else
1451             parent->op_flags &= ~OPf_KIDS;
1452     }
1453
1454     if (!rest) {
1455         /* update op_last etc */
1456         U32 type;
1457         OP *lastop;
1458
1459         if (!parent)
1460             goto no_parent;
1461
1462         /* ought to use OP_CLASS(parent) here, but that can't handle
1463          * ex-foo OP_NULL ops. Also note that XopENTRYCUSTOM() can't
1464          * either */
1465         type = parent->op_type;
1466         if (type == OP_CUSTOM) {
1467             dTHX;
1468             type = XopENTRYCUSTOM(parent, xop_class);
1469         }
1470         else {
1471             if (type == OP_NULL)
1472                 type = parent->op_targ;
1473             type = PL_opargs[type] & OA_CLASS_MASK;
1474         }
1475
1476         lastop = last_ins ? last_ins : start ? start : NULL;
1477         if (   type == OA_BINOP
1478             || type == OA_LISTOP
1479             || type == OA_PMOP
1480             || type == OA_LOOP
1481         )
1482             cLISTOPx(parent)->op_last = lastop;
1483
1484         if (lastop)
1485             OpLASTSIB_set(lastop, parent);
1486     }
1487     return last_del ? first : NULL;
1488
1489   no_parent:
1490     Perl_croak_nocontext("panic: op_sibling_splice(): NULL parent");
1491 }
1492
1493 /*
1494 =for apidoc op_parent
1495
1496 Returns the parent OP of C<o>, if it has a parent. Returns C<NULL> otherwise.
1497
1498 =cut
1499 */
1500
1501 OP *
1502 Perl_op_parent(OP *o)
1503 {
1504     PERL_ARGS_ASSERT_OP_PARENT;
1505     while (OpHAS_SIBLING(o))
1506         o = OpSIBLING(o);
1507     return o->op_sibparent;
1508 }
1509
1510 /* replace the sibling following start with a new UNOP, which becomes
1511  * the parent of the original sibling; e.g.
1512  *
1513  *  op_sibling_newUNOP(P, A, unop-args...)
1514  *
1515  *  P              P
1516  *  |      becomes |
1517  *  A-B-C          A-U-C
1518  *                   |
1519  *                   B
1520  *
1521  * where U is the new UNOP.
1522  *
1523  * parent and start args are the same as for op_sibling_splice();
1524  * type and flags args are as newUNOP().
1525  *
1526  * Returns the new UNOP.
1527  */
1528
1529 STATIC OP *
1530 S_op_sibling_newUNOP(pTHX_ OP *parent, OP *start, I32 type, I32 flags)
1531 {
1532     OP *kid, *newop;
1533
1534     kid = op_sibling_splice(parent, start, 1, NULL);
1535     newop = newUNOP(type, flags, kid);
1536     op_sibling_splice(parent, start, 0, newop);
1537     return newop;
1538 }
1539
1540
1541 /* lowest-level newLOGOP-style function - just allocates and populates
1542  * the struct. Higher-level stuff should be done by S_new_logop() /
1543  * newLOGOP(). This function exists mainly to avoid op_first assignment
1544  * being spread throughout this file.
1545  */
1546
1547 LOGOP *
1548 Perl_alloc_LOGOP(pTHX_ I32 type, OP *first, OP* other)
1549 {
1550     dVAR;
1551     LOGOP *logop;
1552     OP *kid = first;
1553     NewOp(1101, logop, 1, LOGOP);
1554     OpTYPE_set(logop, type);
1555     logop->op_first = first;
1556     logop->op_other = other;
1557     if (first)
1558         logop->op_flags = OPf_KIDS;
1559     while (kid && OpHAS_SIBLING(kid))
1560         kid = OpSIBLING(kid);
1561     if (kid)
1562         OpLASTSIB_set(kid, (OP*)logop);
1563     return logop;
1564 }
1565
1566
1567 /* Contextualizers */
1568
1569 /*
1570 =for apidoc op_contextualize
1571
1572 Applies a syntactic context to an op tree representing an expression.
1573 C<o> is the op tree, and C<context> must be C<G_SCALAR>, C<G_ARRAY>,
1574 or C<G_VOID> to specify the context to apply.  The modified op tree
1575 is returned.
1576
1577 =cut
1578 */
1579
1580 OP *
1581 Perl_op_contextualize(pTHX_ OP *o, I32 context)
1582 {
1583     PERL_ARGS_ASSERT_OP_CONTEXTUALIZE;
1584     switch (context) {
1585         case G_SCALAR: return scalar(o);
1586         case G_ARRAY:  return list(o);
1587         case G_VOID:   return scalarvoid(o);
1588         default:
1589             Perl_croak(aTHX_ "panic: op_contextualize bad context %ld",
1590                        (long) context);
1591     }
1592 }
1593
1594 /*
1595
1596 =for apidoc op_linklist
1597 This function is the implementation of the L</LINKLIST> macro.  It should
1598 not be called directly.
1599
1600 =cut
1601 */
1602
1603 OP *
1604 Perl_op_linklist(pTHX_ OP *o)
1605 {
1606     OP *first;
1607
1608     PERL_ARGS_ASSERT_OP_LINKLIST;
1609
1610     if (o->op_next)
1611         return o->op_next;
1612
1613     /* establish postfix order */
1614     first = cUNOPo->op_first;
1615     if (first) {
1616         OP *kid;
1617         o->op_next = LINKLIST(first);
1618         kid = first;
1619         for (;;) {
1620             OP *sibl = OpSIBLING(kid);
1621             if (sibl) {
1622                 kid->op_next = LINKLIST(sibl);
1623                 kid = sibl;
1624             } else {
1625                 kid->op_next = o;
1626                 break;
1627             }
1628         }
1629     }
1630     else
1631         o->op_next = o;
1632
1633     return o->op_next;
1634 }
1635
1636 static OP *
1637 S_scalarkids(pTHX_ OP *o)
1638 {
1639     if (o && o->op_flags & OPf_KIDS) {
1640         OP *kid;
1641         for (kid = cLISTOPo->op_first; kid; kid = OpSIBLING(kid))
1642             scalar(kid);
1643     }
1644     return o;
1645 }
1646
1647 STATIC OP *
1648 S_scalarboolean(pTHX_ OP *o)
1649 {
1650     PERL_ARGS_ASSERT_SCALARBOOLEAN;
1651
1652     if ((o->op_type == OP_SASSIGN && cBINOPo->op_first->op_type == OP_CONST &&
1653          !(cBINOPo->op_first->op_flags & OPf_SPECIAL)) ||
1654         (o->op_type == OP_NOT     && cUNOPo->op_first->op_type == OP_SASSIGN &&
1655          cBINOPx(cUNOPo->op_first)->op_first->op_type == OP_CONST &&
1656          !(cBINOPx(cUNOPo->op_first)->op_first->op_flags & OPf_SPECIAL))) {
1657         if (ckWARN(WARN_SYNTAX)) {
1658             const line_t oldline = CopLINE(PL_curcop);
1659
1660             if (PL_parser && PL_parser->copline != NOLINE) {
1661                 /* This ensures that warnings are reported at the first line
1662                    of the conditional, not the last.  */
1663                 CopLINE_set(PL_curcop, PL_parser->copline);
1664             }
1665             Perl_warner(aTHX_ packWARN(WARN_SYNTAX), "Found = in conditional, should be ==");
1666             CopLINE_set(PL_curcop, oldline);
1667         }
1668     }
1669     return scalar(o);
1670 }
1671
1672 static SV *
1673 S_op_varname_subscript(pTHX_ const OP *o, int subscript_type)
1674 {
1675     assert(o);
1676     assert(o->op_type == OP_PADAV || o->op_type == OP_RV2AV ||
1677            o->op_type == OP_PADHV || o->op_type == OP_RV2HV);
1678     {
1679         const char funny  = o->op_type == OP_PADAV
1680                          || o->op_type == OP_RV2AV ? '@' : '%';
1681         if (o->op_type == OP_RV2AV || o->op_type == OP_RV2HV) {
1682             GV *gv;
1683             if (cUNOPo->op_first->op_type != OP_GV
1684              || !(gv = cGVOPx_gv(cUNOPo->op_first)))
1685                 return NULL;
1686             return varname(gv, funny, 0, NULL, 0, subscript_type);
1687         }
1688         return
1689             varname(MUTABLE_GV(PL_compcv), funny, o->op_targ, NULL, 0, subscript_type);
1690     }
1691 }
1692
1693 static SV *
1694 S_op_varname(pTHX_ const OP *o)
1695 {
1696     return S_op_varname_subscript(aTHX_ o, 1);
1697 }
1698
1699 static void
1700 S_op_pretty(pTHX_ const OP *o, SV **retsv, const char **retpv)
1701 { /* or not so pretty :-) */
1702     if (o->op_type == OP_CONST) {
1703         *retsv = cSVOPo_sv;
1704         if (SvPOK(*retsv)) {
1705             SV *sv = *retsv;
1706             *retsv = sv_newmortal();
1707             pv_pretty(*retsv, SvPVX_const(sv), SvCUR(sv), 32, NULL, NULL,
1708                       PERL_PV_PRETTY_DUMP |PERL_PV_ESCAPE_UNI_DETECT);
1709         }
1710         else if (!SvOK(*retsv))
1711             *retpv = "undef";
1712     }
1713     else *retpv = "...";
1714 }
1715
1716 static void
1717 S_scalar_slice_warning(pTHX_ const OP *o)
1718 {
1719     OP *kid;
1720     const bool h = o->op_type == OP_HSLICE
1721                 || (o->op_type == OP_NULL && o->op_targ == OP_HSLICE);
1722     const char lbrack =
1723         h ? '{' : '[';
1724     const char rbrack =
1725         h ? '}' : ']';
1726     SV *name;
1727     SV *keysv = NULL; /* just to silence compiler warnings */
1728     const char *key = NULL;
1729
1730     if (!(o->op_private & OPpSLICEWARNING))
1731         return;
1732     if (PL_parser && PL_parser->error_count)
1733         /* This warning can be nonsensical when there is a syntax error. */
1734         return;
1735
1736     kid = cLISTOPo->op_first;
1737     kid = OpSIBLING(kid); /* get past pushmark */
1738     /* weed out false positives: any ops that can return lists */
1739     switch (kid->op_type) {
1740     case OP_BACKTICK:
1741     case OP_GLOB:
1742     case OP_READLINE:
1743     case OP_MATCH:
1744     case OP_RV2AV:
1745     case OP_EACH:
1746     case OP_VALUES:
1747     case OP_KEYS:
1748     case OP_SPLIT:
1749     case OP_LIST:
1750     case OP_SORT:
1751     case OP_REVERSE:
1752     case OP_ENTERSUB:
1753     case OP_CALLER:
1754     case OP_LSTAT:
1755     case OP_STAT:
1756     case OP_READDIR:
1757     case OP_SYSTEM:
1758     case OP_TMS:
1759     case OP_LOCALTIME:
1760     case OP_GMTIME:
1761     case OP_ENTEREVAL:
1762         return;
1763     }
1764
1765     /* Don't warn if we have a nulled list either. */
1766     if (kid->op_type == OP_NULL && kid->op_targ == OP_LIST)
1767         return;
1768
1769     assert(OpSIBLING(kid));
1770     name = S_op_varname(aTHX_ OpSIBLING(kid));
1771     if (!name) /* XS module fiddling with the op tree */
1772         return;
1773     S_op_pretty(aTHX_ kid, &keysv, &key);
1774     assert(SvPOK(name));
1775     sv_chop(name,SvPVX(name)+1);
1776     if (key)
1777        /* diag_listed_as: Scalar value @%s[%s] better written as $%s[%s] */
1778         Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
1779                    "Scalar value @%" SVf "%c%s%c better written as $%" SVf
1780                    "%c%s%c",
1781                     SVfARG(name), lbrack, key, rbrack, SVfARG(name),
1782                     lbrack, key, rbrack);
1783     else
1784        /* diag_listed_as: Scalar value @%s[%s] better written as $%s[%s] */
1785         Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
1786                    "Scalar value @%" SVf "%c%" SVf "%c better written as $%"
1787                     SVf "%c%" SVf "%c",
1788                     SVfARG(name), lbrack, SVfARG(keysv), rbrack,
1789                     SVfARG(name), lbrack, SVfARG(keysv), rbrack);
1790 }
1791
1792 OP *
1793 Perl_scalar(pTHX_ OP *o)
1794 {
1795     OP *kid;
1796
1797     /* assumes no premature commitment */
1798     if (!o || (PL_parser && PL_parser->error_count)
1799          || (o->op_flags & OPf_WANT)
1800          || o->op_type == OP_RETURN)
1801     {
1802         return o;
1803     }
1804
1805     o->op_flags = (o->op_flags & ~OPf_WANT) | OPf_WANT_SCALAR;
1806
1807     switch (o->op_type) {
1808     case OP_REPEAT:
1809         scalar(cBINOPo->op_first);
1810         if (o->op_private & OPpREPEAT_DOLIST) {
1811             kid = cLISTOPx(cUNOPo->op_first)->op_first;
1812             assert(kid->op_type == OP_PUSHMARK);
1813             if (OpHAS_SIBLING(kid) && !OpHAS_SIBLING(OpSIBLING(kid))) {
1814                 op_null(cLISTOPx(cUNOPo->op_first)->op_first);
1815                 o->op_private &=~ OPpREPEAT_DOLIST;
1816             }
1817         }
1818         break;
1819     case OP_OR:
1820     case OP_AND:
1821     case OP_COND_EXPR:
1822         for (kid = OpSIBLING(cUNOPo->op_first); kid; kid = OpSIBLING(kid))
1823             scalar(kid);
1824         break;
1825         /* FALLTHROUGH */
1826     case OP_SPLIT:
1827     case OP_MATCH:
1828     case OP_QR:
1829     case OP_SUBST:
1830     case OP_NULL:
1831     default:
1832         if (o->op_flags & OPf_KIDS) {
1833             for (kid = cUNOPo->op_first; kid; kid = OpSIBLING(kid))
1834                 scalar(kid);
1835         }
1836         break;
1837     case OP_LEAVE:
1838     case OP_LEAVETRY:
1839         kid = cLISTOPo->op_first;
1840         scalar(kid);
1841         kid = OpSIBLING(kid);
1842     do_kids:
1843         while (kid) {
1844             OP *sib = OpSIBLING(kid);
1845             if (sib && kid->op_type != OP_LEAVEWHEN
1846              && (  OpHAS_SIBLING(sib) || sib->op_type != OP_NULL
1847                 || (  sib->op_targ != OP_NEXTSTATE
1848                    && sib->op_targ != OP_DBSTATE  )))
1849                 scalarvoid(kid);
1850             else
1851                 scalar(kid);
1852             kid = sib;
1853         }
1854         PL_curcop = &PL_compiling;
1855         break;
1856     case OP_SCOPE:
1857     case OP_LINESEQ:
1858     case OP_LIST:
1859         kid = cLISTOPo->op_first;
1860         goto do_kids;
1861     case OP_SORT:
1862         Perl_ck_warner(aTHX_ packWARN(WARN_VOID), "Useless use of sort in scalar context");
1863         break;
1864     case OP_KVHSLICE:
1865     case OP_KVASLICE:
1866     {
1867         /* Warn about scalar context */
1868         const char lbrack = o->op_type == OP_KVHSLICE ? '{' : '[';
1869         const char rbrack = o->op_type == OP_KVHSLICE ? '}' : ']';
1870         SV *name;
1871         SV *keysv;
1872         const char *key = NULL;
1873
1874         /* This warning can be nonsensical when there is a syntax error. */
1875         if (PL_parser && PL_parser->error_count)
1876             break;
1877
1878         if (!ckWARN(WARN_SYNTAX)) break;
1879
1880         kid = cLISTOPo->op_first;
1881         kid = OpSIBLING(kid); /* get past pushmark */
1882         assert(OpSIBLING(kid));
1883         name = S_op_varname(aTHX_ OpSIBLING(kid));
1884         if (!name) /* XS module fiddling with the op tree */
1885             break;
1886         S_op_pretty(aTHX_ kid, &keysv, &key);
1887         assert(SvPOK(name));
1888         sv_chop(name,SvPVX(name)+1);
1889         if (key)
1890   /* diag_listed_as: %%s[%s] in scalar context better written as $%s[%s] */
1891             Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
1892                        "%%%" SVf "%c%s%c in scalar context better written "
1893                        "as $%" SVf "%c%s%c",
1894                         SVfARG(name), lbrack, key, rbrack, SVfARG(name),
1895                         lbrack, key, rbrack);
1896         else
1897   /* diag_listed_as: %%s[%s] in scalar context better written as $%s[%s] */
1898             Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
1899                        "%%%" SVf "%c%" SVf "%c in scalar context better "
1900                        "written as $%" SVf "%c%" SVf "%c",
1901                         SVfARG(name), lbrack, SVfARG(keysv), rbrack,
1902                         SVfARG(name), lbrack, SVfARG(keysv), rbrack);
1903     }
1904     }
1905     return o;
1906 }
1907
1908 OP *
1909 Perl_scalarvoid(pTHX_ OP *arg)
1910 {
1911     dVAR;
1912     OP *kid;
1913     SV* sv;
1914     OP *o = arg;
1915
1916     PERL_ARGS_ASSERT_SCALARVOID;
1917
1918     while (1) {
1919         U8 want;
1920         SV *useless_sv = NULL;
1921         const char* useless = NULL;
1922         OP * next_kid = NULL;
1923
1924         if (o->op_type == OP_NEXTSTATE
1925             || o->op_type == OP_DBSTATE
1926             || (o->op_type == OP_NULL && (o->op_targ == OP_NEXTSTATE
1927                                           || o->op_targ == OP_DBSTATE)))
1928             PL_curcop = (COP*)o;                /* for warning below */
1929
1930         /* assumes no premature commitment */
1931         want = o->op_flags & OPf_WANT;
1932         if ((want && want != OPf_WANT_SCALAR)
1933             || (PL_parser && PL_parser->error_count)
1934             || o->op_type == OP_RETURN || o->op_type == OP_REQUIRE || o->op_type == OP_LEAVEWHEN)
1935         {
1936             goto get_next_op;
1937         }
1938
1939         if ((o->op_private & OPpTARGET_MY)
1940             && (PL_opargs[o->op_type] & OA_TARGLEX))/* OPp share the meaning */
1941         {
1942             /* newASSIGNOP has already applied scalar context, which we
1943                leave, as if this op is inside SASSIGN.  */
1944             goto get_next_op;
1945         }
1946
1947         o->op_flags = (o->op_flags & ~OPf_WANT) | OPf_WANT_VOID;
1948
1949         switch (o->op_type) {
1950         default:
1951             if (!(PL_opargs[o->op_type] & OA_FOLDCONST))
1952                 break;
1953             /* FALLTHROUGH */
1954         case OP_REPEAT:
1955             if (o->op_flags & OPf_STACKED)
1956                 break;
1957             if (o->op_type == OP_REPEAT)
1958                 scalar(cBINOPo->op_first);
1959             goto func_ops;
1960         case OP_CONCAT:
1961             if ((o->op_flags & OPf_STACKED) &&
1962                     !(o->op_private & OPpCONCAT_NESTED))
1963                 break;
1964             goto func_ops;
1965         case OP_SUBSTR:
1966             if (o->op_private == 4)
1967                 break;
1968             /* FALLTHROUGH */
1969         case OP_WANTARRAY:
1970         case OP_GV:
1971         case OP_SMARTMATCH:
1972         case OP_AV2ARYLEN:
1973         case OP_REF:
1974         case OP_REFGEN:
1975         case OP_SREFGEN:
1976         case OP_DEFINED:
1977         case OP_HEX:
1978         case OP_OCT:
1979         case OP_LENGTH:
1980         case OP_VEC:
1981         case OP_INDEX:
1982         case OP_RINDEX:
1983         case OP_SPRINTF:
1984         case OP_KVASLICE:
1985         case OP_KVHSLICE:
1986         case OP_UNPACK:
1987         case OP_PACK:
1988         case OP_JOIN:
1989         case OP_LSLICE:
1990         case OP_ANONLIST:
1991         case OP_ANONHASH:
1992         case OP_SORT:
1993         case OP_REVERSE:
1994         case OP_RANGE:
1995         case OP_FLIP:
1996         case OP_FLOP:
1997         case OP_CALLER:
1998         case OP_FILENO:
1999         case OP_EOF:
2000         case OP_TELL:
2001         case OP_GETSOCKNAME:
2002         case OP_GETPEERNAME:
2003         case OP_READLINK:
2004         case OP_TELLDIR:
2005         case OP_GETPPID:
2006         case OP_GETPGRP:
2007         case OP_GETPRIORITY:
2008         case OP_TIME:
2009         case OP_TMS:
2010         case OP_LOCALTIME:
2011         case OP_GMTIME:
2012         case OP_GHBYNAME:
2013         case OP_GHBYADDR:
2014         case OP_GHOSTENT:
2015         case OP_GNBYNAME:
2016         case OP_GNBYADDR:
2017         case OP_GNETENT:
2018         case OP_GPBYNAME:
2019         case OP_GPBYNUMBER:
2020         case OP_GPROTOENT:
2021         case OP_GSBYNAME:
2022         case OP_GSBYPORT:
2023         case OP_GSERVENT:
2024         case OP_GPWNAM:
2025         case OP_GPWUID:
2026         case OP_GGRNAM:
2027         case OP_GGRGID:
2028         case OP_GETLOGIN:
2029         case OP_PROTOTYPE:
2030         case OP_RUNCV:
2031         func_ops:
2032             useless = OP_DESC(o);
2033             break;
2034
2035         case OP_GVSV:
2036         case OP_PADSV:
2037         case OP_PADAV:
2038         case OP_PADHV:
2039         case OP_PADANY:
2040         case OP_AELEM:
2041         case OP_AELEMFAST:
2042         case OP_AELEMFAST_LEX:
2043         case OP_ASLICE:
2044         case OP_HELEM:
2045         case OP_HSLICE:
2046             if (!(o->op_private & (OPpLVAL_INTRO|OPpOUR_INTRO)))
2047                 /* Otherwise it's "Useless use of grep iterator" */
2048                 useless = OP_DESC(o);
2049             break;
2050
2051         case OP_SPLIT:
2052             if (!(o->op_private & OPpSPLIT_ASSIGN))
2053                 useless = OP_DESC(o);
2054             break;
2055
2056         case OP_NOT:
2057             kid = cUNOPo->op_first;
2058             if (kid->op_type != OP_MATCH && kid->op_type != OP_SUBST &&
2059                 kid->op_type != OP_TRANS && kid->op_type != OP_TRANSR) {
2060                 goto func_ops;
2061             }
2062             useless = "negative pattern binding (!~)";
2063             break;
2064
2065         case OP_SUBST:
2066             if (cPMOPo->op_pmflags & PMf_NONDESTRUCT)
2067                 useless = "non-destructive substitution (s///r)";
2068             break;
2069
2070         case OP_TRANSR:
2071             useless = "non-destructive transliteration (tr///r)";
2072             break;
2073
2074         case OP_RV2GV:
2075         case OP_RV2SV:
2076         case OP_RV2AV:
2077         case OP_RV2HV:
2078             if (!(o->op_private & (OPpLVAL_INTRO|OPpOUR_INTRO)) &&
2079                 (!OpHAS_SIBLING(o) || OpSIBLING(o)->op_type != OP_READLINE))
2080                 useless = "a variable";
2081             break;
2082
2083         case OP_CONST:
2084             sv = cSVOPo_sv;
2085             if (cSVOPo->op_private & OPpCONST_STRICT)
2086                 no_bareword_allowed(o);
2087             else {
2088                 if (ckWARN(WARN_VOID)) {
2089                     NV nv;
2090                     /* don't warn on optimised away booleans, eg
2091                      * use constant Foo, 5; Foo || print; */
2092                     if (cSVOPo->op_private & OPpCONST_SHORTCIRCUIT)
2093                         useless = NULL;
2094                     /* the constants 0 and 1 are permitted as they are
2095                        conventionally used as dummies in constructs like
2096                        1 while some_condition_with_side_effects;  */
2097                     else if (SvNIOK(sv) && ((nv = SvNV(sv)) == 0.0 || nv == 1.0))
2098                         useless = NULL;
2099                     else if (SvPOK(sv)) {
2100                         SV * const dsv = newSVpvs("");
2101                         useless_sv
2102                             = Perl_newSVpvf(aTHX_
2103                                             "a constant (%s)",
2104                                             pv_pretty(dsv, SvPVX_const(sv),
2105                                                       SvCUR(sv), 32, NULL, NULL,
2106                                                       PERL_PV_PRETTY_DUMP
2107                                                       | PERL_PV_ESCAPE_NOCLEAR
2108                                                       | PERL_PV_ESCAPE_UNI_DETECT));
2109                         SvREFCNT_dec_NN(dsv);
2110                     }
2111                     else if (SvOK(sv)) {
2112                         useless_sv = Perl_newSVpvf(aTHX_ "a constant (%" SVf ")", SVfARG(sv));
2113                     }
2114                     else
2115                         useless = "a constant (undef)";
2116                 }
2117             }
2118             op_null(o);         /* don't execute or even remember it */
2119             break;
2120
2121         case OP_POSTINC:
2122             OpTYPE_set(o, OP_PREINC);  /* pre-increment is faster */
2123             break;
2124
2125         case OP_POSTDEC:
2126             OpTYPE_set(o, OP_PREDEC);  /* pre-decrement is faster */
2127             break;
2128
2129         case OP_I_POSTINC:
2130             OpTYPE_set(o, OP_I_PREINC);        /* pre-increment is faster */
2131             break;
2132
2133         case OP_I_POSTDEC:
2134             OpTYPE_set(o, OP_I_PREDEC);        /* pre-decrement is faster */
2135             break;
2136
2137         case OP_SASSIGN: {
2138             OP *rv2gv;
2139             UNOP *refgen, *rv2cv;
2140             LISTOP *exlist;
2141
2142             if ((o->op_private & ~OPpASSIGN_BACKWARDS) != 2)
2143                 break;
2144
2145             rv2gv = ((BINOP *)o)->op_last;
2146             if (!rv2gv || rv2gv->op_type != OP_RV2GV)
2147                 break;
2148
2149             refgen = (UNOP *)((BINOP *)o)->op_first;
2150
2151             if (!refgen || (refgen->op_type != OP_REFGEN
2152                             && refgen->op_type != OP_SREFGEN))
2153                 break;
2154
2155             exlist = (LISTOP *)refgen->op_first;
2156             if (!exlist || exlist->op_type != OP_NULL
2157                 || exlist->op_targ != OP_LIST)
2158                 break;
2159
2160             if (exlist->op_first->op_type != OP_PUSHMARK
2161                 && exlist->op_first != exlist->op_last)
2162                 break;
2163
2164             rv2cv = (UNOP*)exlist->op_last;
2165
2166             if (rv2cv->op_type != OP_RV2CV)
2167                 break;
2168
2169             assert ((rv2gv->op_private & OPpDONT_INIT_GV) == 0);
2170             assert ((o->op_private & OPpASSIGN_CV_TO_GV) == 0);
2171             assert ((rv2cv->op_private & OPpMAY_RETURN_CONSTANT) == 0);
2172
2173             o->op_private |= OPpASSIGN_CV_TO_GV;
2174             rv2gv->op_private |= OPpDONT_INIT_GV;
2175             rv2cv->op_private |= OPpMAY_RETURN_CONSTANT;
2176
2177             break;
2178         }
2179
2180         case OP_AASSIGN: {
2181             inplace_aassign(o);
2182             break;
2183         }
2184
2185         case OP_OR:
2186         case OP_AND:
2187             kid = cLOGOPo->op_first;
2188             if (kid->op_type == OP_NOT
2189                 && (kid->op_flags & OPf_KIDS)) {
2190                 if (o->op_type == OP_AND) {
2191                     OpTYPE_set(o, OP_OR);
2192                 } else {
2193                     OpTYPE_set(o, OP_AND);
2194                 }
2195                 op_null(kid);
2196             }
2197             /* FALLTHROUGH */
2198
2199         case OP_DOR:
2200         case OP_COND_EXPR:
2201         case OP_ENTERGIVEN:
2202         case OP_ENTERWHEN:
2203             next_kid = OpSIBLING(cUNOPo->op_first);
2204         break;
2205
2206         case OP_NULL:
2207             if (o->op_flags & OPf_STACKED)
2208                 break;
2209             /* FALLTHROUGH */
2210         case OP_NEXTSTATE:
2211         case OP_DBSTATE:
2212         case OP_ENTERTRY:
2213         case OP_ENTER:
2214             if (!(o->op_flags & OPf_KIDS))
2215                 break;
2216             /* FALLTHROUGH */
2217         case OP_SCOPE:
2218         case OP_LEAVE:
2219         case OP_LEAVETRY:
2220         case OP_LEAVELOOP:
2221         case OP_LINESEQ:
2222         case OP_LEAVEGIVEN:
2223         case OP_LEAVEWHEN:
2224         kids:
2225             next_kid = cLISTOPo->op_first;
2226             break;
2227         case OP_LIST:
2228             /* If the first kid after pushmark is something that the padrange
2229                optimisation would reject, then null the list and the pushmark.
2230             */
2231             if ((kid = cLISTOPo->op_first)->op_type == OP_PUSHMARK
2232                 && (  !(kid = OpSIBLING(kid))
2233                       || (  kid->op_type != OP_PADSV
2234                             && kid->op_type != OP_PADAV
2235                             && kid->op_type != OP_PADHV)
2236                       || kid->op_private & ~OPpLVAL_INTRO
2237                       || !(kid = OpSIBLING(kid))
2238                       || (  kid->op_type != OP_PADSV
2239                             && kid->op_type != OP_PADAV
2240                             && kid->op_type != OP_PADHV)
2241                       || kid->op_private & ~OPpLVAL_INTRO)
2242             ) {
2243                 op_null(cUNOPo->op_first); /* NULL the pushmark */
2244                 op_null(o); /* NULL the list */
2245             }
2246             goto kids;
2247         case OP_ENTEREVAL:
2248             scalarkids(o);
2249             break;
2250         case OP_SCALAR:
2251             scalar(o);
2252             break;
2253         }
2254
2255         if (useless_sv) {
2256             /* mortalise it, in case warnings are fatal.  */
2257             Perl_ck_warner(aTHX_ packWARN(WARN_VOID),
2258                            "Useless use of %" SVf " in void context",
2259                            SVfARG(sv_2mortal(useless_sv)));
2260         }
2261         else if (useless) {
2262             Perl_ck_warner(aTHX_ packWARN(WARN_VOID),
2263                            "Useless use of %s in void context",
2264                            useless);
2265         }
2266
2267       get_next_op:
2268         /* if a kid hasn't been nominated to process, continue with the
2269          * next sibling, or if no siblings left, go back to the parent's
2270          * siblings and so on
2271          */
2272         while (!next_kid) {
2273             if (o == arg)
2274                 return arg; /* at top; no parents/siblings to try */
2275             if (OpHAS_SIBLING(o))
2276                 next_kid = o->op_sibparent;
2277             else
2278                 o = o->op_sibparent; /*try parent's next sibling */
2279         }
2280         o = next_kid;
2281     }
2282
2283     return arg;
2284 }
2285
2286
2287 static OP *
2288 S_listkids(pTHX_ OP *o)
2289 {
2290     if (o && o->op_flags & OPf_KIDS) {
2291         OP *kid;
2292         for (kid = cLISTOPo->op_first; kid; kid = OpSIBLING(kid))
2293             list(kid);
2294     }
2295     return o;
2296 }
2297
2298
2299 /* apply list context to the o subtree */
2300
2301 OP *
2302 Perl_list(pTHX_ OP *o)
2303 {
2304     OP *kid;
2305
2306     /* assumes no premature commitment */
2307     if (!o || (o->op_flags & OPf_WANT)
2308          || (PL_parser && PL_parser->error_count)
2309          || o->op_type == OP_RETURN)
2310     {
2311         return o;
2312     }
2313
2314     if ((o->op_private & OPpTARGET_MY)
2315         && (PL_opargs[o->op_type] & OA_TARGLEX))/* OPp share the meaning */
2316     {
2317         return o;                               /* As if inside SASSIGN */
2318     }
2319
2320     o->op_flags = (o->op_flags & ~OPf_WANT) | OPf_WANT_LIST;
2321
2322     switch (o->op_type) {
2323     case OP_FLOP:
2324         list(cBINOPo->op_first);
2325         break;
2326     case OP_REPEAT:
2327         if (o->op_private & OPpREPEAT_DOLIST
2328          && !(o->op_flags & OPf_STACKED))
2329         {
2330             list(cBINOPo->op_first);
2331             kid = cBINOPo->op_last;
2332             /* optimise away (.....) x 1 */
2333             if (kid->op_type == OP_CONST && SvIOK(kSVOP_sv)
2334              && SvIVX(kSVOP_sv) == 1)
2335             {
2336                 op_null(o); /* repeat */
2337                 op_null(cUNOPx(cBINOPo->op_first)->op_first);/* pushmark */
2338                 /* const (rhs): */
2339                 op_free(op_sibling_splice(o, cBINOPo->op_first, 1, NULL));
2340             }
2341         }
2342         break;
2343     case OP_OR:
2344     case OP_AND:
2345     case OP_COND_EXPR:
2346         for (kid = OpSIBLING(cUNOPo->op_first); kid; kid = OpSIBLING(kid))
2347             list(kid);
2348         break;
2349     default:
2350     case OP_MATCH:
2351     case OP_QR:
2352     case OP_SUBST:
2353     case OP_NULL:
2354         if (!(o->op_flags & OPf_KIDS))
2355             break;
2356         /* possibly flatten 1..10 into a constant array */
2357         if (!o->op_next && cUNOPo->op_first->op_type == OP_FLOP) {
2358             list(cBINOPo->op_first);
2359             gen_constant_list(o);
2360             return o;
2361         }
2362         listkids(o);
2363         break;
2364     case OP_LIST:
2365         listkids(o);
2366         if (cLISTOPo->op_first->op_type == OP_PUSHMARK) {
2367             op_null(cUNOPo->op_first); /* NULL the pushmark */
2368             op_null(o); /* NULL the list */
2369         }
2370         break;
2371     case OP_LEAVE:
2372     case OP_LEAVETRY:
2373         kid = cLISTOPo->op_first;
2374         list(kid);
2375         kid = OpSIBLING(kid);
2376     do_kids:
2377         while (kid) {
2378             OP *sib = OpSIBLING(kid);
2379             if (sib && kid->op_type != OP_LEAVEWHEN)
2380                 scalarvoid(kid);
2381             else
2382                 list(kid);
2383             kid = sib;
2384         }
2385         PL_curcop = &PL_compiling;
2386         break;
2387     case OP_SCOPE:
2388     case OP_LINESEQ:
2389         kid = cLISTOPo->op_first;
2390         goto do_kids;
2391     }
2392     return o;
2393 }
2394
2395
2396 static OP *
2397 S_scalarseq(pTHX_ OP *o)
2398 {
2399     if (o) {
2400         const OPCODE type = o->op_type;
2401
2402         if (type == OP_LINESEQ || type == OP_SCOPE ||
2403             type == OP_LEAVE || type == OP_LEAVETRY)
2404         {
2405             OP *kid, *sib;
2406             for (kid = cLISTOPo->op_first; kid; kid = sib) {
2407                 if ((sib = OpSIBLING(kid))
2408                  && (  OpHAS_SIBLING(sib) || sib->op_type != OP_NULL
2409                     || (  sib->op_targ != OP_NEXTSTATE
2410                        && sib->op_targ != OP_DBSTATE  )))
2411                 {
2412                     scalarvoid(kid);
2413                 }
2414             }
2415             PL_curcop = &PL_compiling;
2416         }
2417         o->op_flags &= ~OPf_PARENS;
2418         if (PL_hints & HINT_BLOCK_SCOPE)
2419             o->op_flags |= OPf_PARENS;
2420     }
2421     else
2422         o = newOP(OP_STUB, 0);
2423     return o;
2424 }
2425
2426 STATIC OP *
2427 S_modkids(pTHX_ OP *o, I32 type)
2428 {
2429     if (o && o->op_flags & OPf_KIDS) {
2430         OP *kid;
2431         for (kid = cLISTOPo->op_first; kid; kid = OpSIBLING(kid))
2432             op_lvalue(kid, type);
2433     }
2434     return o;
2435 }
2436
2437
2438 /* for a helem/hslice/kvslice, if its a fixed hash, croak on invalid
2439  * const fields. Also, convert CONST keys to HEK-in-SVs.
2440  * rop    is the op that retrieves the hash;
2441  * key_op is the first key
2442  * real   if false, only check (and possibly croak); don't update op
2443  */
2444
2445 STATIC void
2446 S_check_hash_fields_and_hekify(pTHX_ UNOP *rop, SVOP *key_op, int real)
2447 {
2448     PADNAME *lexname;
2449     GV **fields;
2450     bool check_fields;
2451
2452     /* find the padsv corresponding to $lex->{} or @{$lex}{} */
2453     if (rop) {
2454         if (rop->op_first->op_type == OP_PADSV)
2455             /* @$hash{qw(keys here)} */
2456             rop = (UNOP*)rop->op_first;
2457         else {
2458             /* @{$hash}{qw(keys here)} */
2459             if (rop->op_first->op_type == OP_SCOPE
2460                 && cLISTOPx(rop->op_first)->op_last->op_type == OP_PADSV)
2461                 {
2462                     rop = (UNOP*)cLISTOPx(rop->op_first)->op_last;
2463                 }
2464             else
2465                 rop = NULL;
2466         }
2467     }
2468
2469     lexname = NULL; /* just to silence compiler warnings */
2470     fields  = NULL; /* just to silence compiler warnings */
2471
2472     check_fields =
2473             rop
2474          && (lexname = padnamelist_fetch(PL_comppad_name, rop->op_targ),
2475              SvPAD_TYPED(lexname))
2476          && (fields = (GV**)hv_fetchs(PadnameTYPE(lexname), "FIELDS", FALSE))
2477          && isGV(*fields) && GvHV(*fields);
2478
2479     for (; key_op; key_op = (SVOP*)OpSIBLING(key_op)) {
2480         SV **svp, *sv;
2481         if (key_op->op_type != OP_CONST)
2482             continue;
2483         svp = cSVOPx_svp(key_op);
2484
2485         /* make sure it's not a bareword under strict subs */
2486         if (key_op->op_private & OPpCONST_BARE &&
2487             key_op->op_private & OPpCONST_STRICT)
2488         {
2489             no_bareword_allowed((OP*)key_op);
2490         }
2491
2492         /* Make the CONST have a shared SV */
2493         if (   !SvIsCOW_shared_hash(sv = *svp)
2494             && SvTYPE(sv) < SVt_PVMG
2495             && SvOK(sv)
2496             && !SvROK(sv)
2497             && real)
2498         {
2499             SSize_t keylen;
2500             const char * const key = SvPV_const(sv, *(STRLEN*)&keylen);
2501             SV *nsv = newSVpvn_share(key, SvUTF8(sv) ? -keylen : keylen, 0);
2502             SvREFCNT_dec_NN(sv);
2503             *svp = nsv;
2504         }
2505
2506         if (   check_fields
2507             && !hv_fetch_ent(GvHV(*fields), *svp, FALSE, 0))
2508         {
2509             Perl_croak(aTHX_ "No such class field \"%" SVf "\" "
2510                         "in variable %" PNf " of type %" HEKf,
2511                         SVfARG(*svp), PNfARG(lexname),
2512                         HEKfARG(HvNAME_HEK(PadnameTYPE(lexname))));
2513         }
2514     }
2515 }
2516
2517 /* info returned by S_sprintf_is_multiconcatable() */
2518
2519 struct sprintf_ismc_info {
2520     SSize_t nargs;    /* num of args to sprintf (not including the format) */
2521     char  *start;     /* start of raw format string */
2522     char  *end;       /* bytes after end of raw format string */
2523     STRLEN total_len; /* total length (in bytes) of format string, not
2524                          including '%s' and  half of '%%' */
2525     STRLEN variant;   /* number of bytes by which total_len_p would grow
2526                          if upgraded to utf8 */
2527     bool   utf8;      /* whether the format is utf8 */
2528 };
2529
2530
2531 /* is the OP_SPRINTF o suitable for converting into a multiconcat op?
2532  * i.e. its format argument is a const string with only '%s' and '%%'
2533  * formats, and the number of args is known, e.g.
2534  *    sprintf "a=%s f=%s", $a[0], scalar(f());
2535  * but not
2536  *    sprintf "i=%d a=%s f=%s", $i, @a, f();
2537  *
2538  * If successful, the sprintf_ismc_info struct pointed to by info will be
2539  * populated.
2540  */
2541
2542 STATIC bool
2543 S_sprintf_is_multiconcatable(pTHX_ OP *o,struct sprintf_ismc_info *info)
2544 {
2545     OP    *pm, *constop, *kid;
2546     SV    *sv;
2547     char  *s, *e, *p;
2548     SSize_t nargs, nformats;
2549     STRLEN cur, total_len, variant;
2550     bool   utf8;
2551
2552     /* if sprintf's behaviour changes, die here so that someone
2553      * can decide whether to enhance this function or skip optimising
2554      * under those new circumstances */
2555     assert(!(o->op_flags & OPf_STACKED));
2556     assert(!(PL_opargs[OP_SPRINTF] & OA_TARGLEX));
2557     assert(!(o->op_private & ~OPpARG4_MASK));
2558
2559     pm = cUNOPo->op_first;
2560     if (pm->op_type != OP_PUSHMARK) /* weird coreargs stuff */
2561         return FALSE;
2562     constop = OpSIBLING(pm);
2563     if (!constop || constop->op_type != OP_CONST)
2564         return FALSE;
2565     sv = cSVOPx_sv(constop);
2566     if (SvMAGICAL(sv) || !SvPOK(sv))
2567         return FALSE;
2568
2569     s = SvPV(sv, cur);
2570     e = s + cur;
2571
2572     /* Scan format for %% and %s and work out how many %s there are.
2573      * Abandon if other format types are found.
2574      */
2575
2576     nformats  = 0;
2577     total_len = 0;
2578     variant   = 0;
2579
2580     for (p = s; p < e; p++) {
2581         if (*p != '%') {
2582             total_len++;
2583             if (!UTF8_IS_INVARIANT(*p))
2584                 variant++;
2585             continue;
2586         }
2587         p++;
2588         if (p >= e)
2589             return FALSE; /* lone % at end gives "Invalid conversion" */
2590         if (*p == '%')
2591             total_len++;
2592         else if (*p == 's')
2593             nformats++;
2594         else
2595             return FALSE;
2596     }
2597
2598     if (!nformats || nformats > PERL_MULTICONCAT_MAXARG)
2599         return FALSE;
2600
2601     utf8 = cBOOL(SvUTF8(sv));
2602     if (utf8)
2603         variant = 0;
2604
2605     /* scan args; they must all be in scalar cxt */
2606
2607     nargs = 0;
2608     kid = OpSIBLING(constop);
2609
2610     while (kid) {
2611         if ((kid->op_flags & OPf_WANT) != OPf_WANT_SCALAR)
2612             return FALSE;
2613         nargs++;
2614         kid = OpSIBLING(kid);
2615     }
2616
2617     if (nargs != nformats)
2618         return FALSE; /* e.g. sprintf("%s%s", $a); */
2619
2620
2621     info->nargs      = nargs;
2622     info->start      = s;
2623     info->end        = e;
2624     info->total_len  = total_len;
2625     info->variant    = variant;
2626     info->utf8       = utf8;
2627
2628     return TRUE;
2629 }
2630
2631
2632
2633 /* S_maybe_multiconcat():
2634  *
2635  * given an OP_STRINGIFY, OP_SASSIGN, OP_CONCAT or OP_SPRINTF op, possibly
2636  * convert it (and its children) into an OP_MULTICONCAT. See the code
2637  * comments just before pp_multiconcat() for the full details of what
2638  * OP_MULTICONCAT supports.
2639  *
2640  * Basically we're looking for an optree with a chain of OP_CONCATS down
2641  * the LHS (or an OP_SPRINTF), with possibly an OP_SASSIGN, and/or
2642  * OP_STRINGIFY, and/or OP_CONCAT acting as '.=' at its head, e.g.
2643  *
2644  *      $x = "$a$b-$c"
2645  *
2646  *  looks like
2647  *
2648  *      SASSIGN
2649  *         |
2650  *      STRINGIFY   -- PADSV[$x]
2651  *         |
2652  *         |
2653  *      ex-PUSHMARK -- CONCAT/S
2654  *                        |
2655  *                     CONCAT/S  -- PADSV[$d]
2656  *                        |
2657  *                     CONCAT    -- CONST["-"]
2658  *                        |
2659  *                     PADSV[$a] -- PADSV[$b]
2660  *
2661  * Note that at this stage the OP_SASSIGN may have already been optimised
2662  * away with OPpTARGET_MY set on the OP_STRINGIFY or OP_CONCAT.
2663  */
2664
2665 STATIC void
2666 S_maybe_multiconcat(pTHX_ OP *o)
2667 {
2668     dVAR;
2669     OP *lastkidop;   /* the right-most of any kids unshifted onto o */
2670     OP *topop;       /* the top-most op in the concat tree (often equals o,
2671                         unless there are assign/stringify ops above it */
2672     OP *parentop;    /* the parent op of topop (or itself if no parent) */
2673     OP *targmyop;    /* the op (if any) with the OPpTARGET_MY flag */
2674     OP *targetop;    /* the op corresponding to target=... or target.=... */
2675     OP *stringop;    /* the OP_STRINGIFY op, if any */
2676     OP *nextop;      /* used for recreating the op_next chain without consts */
2677     OP *kid;         /* general-purpose op pointer */
2678     UNOP_AUX_item *aux;
2679     UNOP_AUX_item *lenp;
2680     char *const_str, *p;
2681     struct sprintf_ismc_info sprintf_info;
2682
2683                      /* store info about each arg in args[];
2684                       * toparg is the highest used slot; argp is a general
2685                       * pointer to args[] slots */
2686     struct {
2687         void *p;      /* initially points to const sv (or null for op);
2688                          later, set to SvPV(constsv), with ... */
2689         STRLEN len;   /* ... len set to SvPV(..., len) */
2690     } *argp, *toparg, args[PERL_MULTICONCAT_MAXARG*2 + 1];
2691
2692     SSize_t nargs  = 0;
2693     SSize_t nconst = 0;
2694     SSize_t nadjconst  = 0; /* adjacent consts - may be demoted to args */
2695     STRLEN variant;
2696     bool utf8 = FALSE;
2697     bool kid_is_last = FALSE; /* most args will be the RHS kid of a concat op;
2698                                  the last-processed arg will the LHS of one,
2699                                  as args are processed in reverse order */
2700     U8   stacked_last = 0;   /* whether the last seen concat op was STACKED */
2701     STRLEN total_len  = 0;   /* sum of the lengths of the const segments */
2702     U8 flags          = 0;   /* what will become the op_flags and ... */
2703     U8 private_flags  = 0;   /* ... op_private of the multiconcat op */
2704     bool is_sprintf = FALSE; /* we're optimising an sprintf */
2705     bool is_targable  = FALSE; /* targetop is an OPpTARGET_MY candidate */
2706     bool prev_was_const = FALSE; /* previous arg was a const */
2707
2708     /* -----------------------------------------------------------------
2709      * Phase 1:
2710      *
2711      * Examine the optree non-destructively to determine whether it's
2712      * suitable to be converted into an OP_MULTICONCAT. Accumulate
2713      * information about the optree in args[].
2714      */
2715
2716     argp     = args;
2717     targmyop = NULL;
2718     targetop = NULL;
2719     stringop = NULL;
2720     topop    = o;
2721     parentop = o;
2722
2723     assert(   o->op_type == OP_SASSIGN
2724            || o->op_type == OP_CONCAT
2725            || o->op_type == OP_SPRINTF
2726            || o->op_type == OP_STRINGIFY);
2727
2728     Zero(&sprintf_info, 1, struct sprintf_ismc_info);
2729
2730     /* first see if, at the top of the tree, there is an assign,
2731      * append and/or stringify */
2732
2733     if (topop->op_type == OP_SASSIGN) {
2734         /* expr = ..... */
2735         if (o->op_ppaddr != PL_ppaddr[OP_SASSIGN])
2736             return;
2737         if (o->op_private & (OPpASSIGN_BACKWARDS|OPpASSIGN_CV_TO_GV))
2738             return;
2739         assert(!(o->op_private & ~OPpARG2_MASK)); /* barf on unknown flags */
2740
2741         parentop = topop;
2742         topop = cBINOPo->op_first;
2743         targetop = OpSIBLING(topop);
2744         if (!targetop) /* probably some sort of syntax error */
2745             return;
2746     }
2747     else if (   topop->op_type == OP_CONCAT
2748              && (topop->op_flags & OPf_STACKED)
2749              && (!(topop->op_private & OPpCONCAT_NESTED))
2750             )
2751     {
2752         /* expr .= ..... */
2753
2754         /* OPpTARGET_MY shouldn't be able to be set here. If it is,
2755          * decide what to do about it */
2756         assert(!(o->op_private & OPpTARGET_MY));
2757
2758         /* barf on unknown flags */
2759         assert(!(o->op_private & ~(OPpARG2_MASK|OPpTARGET_MY)));
2760         private_flags |= OPpMULTICONCAT_APPEND;
2761         targetop = cBINOPo->op_first;
2762         parentop = topop;
2763         topop    = OpSIBLING(targetop);
2764
2765         /* $x .= <FOO> gets optimised to rcatline instead */
2766         if (topop->op_type == OP_READLINE)
2767             return;
2768     }
2769
2770     if (targetop) {
2771         /* Can targetop (the LHS) if it's a padsv, be be optimised
2772          * away and use OPpTARGET_MY instead?
2773          */
2774         if (    (targetop->op_type == OP_PADSV)
2775             && !(targetop->op_private & OPpDEREF)
2776             && !(targetop->op_private & OPpPAD_STATE)
2777                /* we don't support 'my $x .= ...' */
2778             && (   o->op_type == OP_SASSIGN
2779                 || !(targetop->op_private & OPpLVAL_INTRO))
2780         )
2781             is_targable = TRUE;
2782     }
2783
2784     if (topop->op_type == OP_STRINGIFY) {
2785         if (topop->op_ppaddr != PL_ppaddr[OP_STRINGIFY])
2786             return;
2787         stringop = topop;
2788
2789         /* barf on unknown flags */
2790         assert(!(o->op_private & ~(OPpARG4_MASK|OPpTARGET_MY)));
2791
2792         if ((topop->op_private & OPpTARGET_MY)) {
2793             if (o->op_type == OP_SASSIGN)
2794                 return; /* can't have two assigns */
2795             targmyop = topop;
2796         }
2797
2798         private_flags |= OPpMULTICONCAT_STRINGIFY;
2799         parentop = topop;
2800         topop = cBINOPx(topop)->op_first;
2801         assert(OP_TYPE_IS_OR_WAS_NN(topop, OP_PUSHMARK));
2802         topop = OpSIBLING(topop);
2803     }
2804
2805     if (topop->op_type == OP_SPRINTF) {
2806         if (topop->op_ppaddr != PL_ppaddr[OP_SPRINTF])
2807             return;
2808         if (S_sprintf_is_multiconcatable(aTHX_ topop, &sprintf_info)) {
2809             nargs     = sprintf_info.nargs;
2810             total_len = sprintf_info.total_len;
2811             variant   = sprintf_info.variant;
2812             utf8      = sprintf_info.utf8;
2813             is_sprintf = TRUE;
2814             private_flags |= OPpMULTICONCAT_FAKE;
2815             toparg = argp;
2816             /* we have an sprintf op rather than a concat optree.
2817              * Skip most of the code below which is associated with
2818              * processing that optree. We also skip phase 2, determining
2819              * whether its cost effective to optimise, since for sprintf,
2820              * multiconcat is *always* faster */
2821             goto create_aux;
2822         }
2823         /* note that even if the sprintf itself isn't multiconcatable,
2824          * the expression as a whole may be, e.g. in
2825          *    $x .= sprintf("%d",...)
2826          * the sprintf op will be left as-is, but the concat/S op may
2827          * be upgraded to multiconcat
2828          */
2829     }
2830     else if (topop->op_type == OP_CONCAT) {
2831         if (topop->op_ppaddr != PL_ppaddr[OP_CONCAT])
2832             return;
2833
2834         if ((topop->op_private & OPpTARGET_MY)) {
2835             if (o->op_type == OP_SASSIGN || targmyop)
2836                 return; /* can't have two assigns */
2837             targmyop = topop;
2838         }
2839     }
2840
2841     /* Is it safe to convert a sassign/stringify/concat op into
2842      * a multiconcat? */
2843     assert((PL_opargs[OP_SASSIGN]   & OA_CLASS_MASK) == OA_BINOP);
2844     assert((PL_opargs[OP_CONCAT]    & OA_CLASS_MASK) == OA_BINOP);
2845     assert((PL_opargs[OP_STRINGIFY] & OA_CLASS_MASK) == OA_LISTOP);
2846     assert((PL_opargs[OP_SPRINTF]   & OA_CLASS_MASK) == OA_LISTOP);
2847     STATIC_ASSERT_STMT(   STRUCT_OFFSET(BINOP,    op_last)
2848                        == STRUCT_OFFSET(UNOP_AUX, op_aux));
2849     STATIC_ASSERT_STMT(   STRUCT_OFFSET(LISTOP,   op_last)
2850                        == STRUCT_OFFSET(UNOP_AUX, op_aux));
2851
2852     /* Now scan the down the tree looking for a series of
2853      * CONCAT/OPf_STACKED ops on the LHS (with the last one not
2854      * stacked). For example this tree:
2855      *
2856      *     |
2857      *   CONCAT/STACKED
2858      *     |
2859      *   CONCAT/STACKED -- EXPR5
2860      *     |
2861      *   CONCAT/STACKED -- EXPR4
2862      *     |
2863      *   CONCAT -- EXPR3
2864      *     |
2865      *   EXPR1  -- EXPR2
2866      *
2867      * corresponds to an expression like
2868      *
2869      *   (EXPR1 . EXPR2 . EXPR3 . EXPR4 . EXPR5)
2870      *
2871      * Record info about each EXPR in args[]: in particular, whether it is
2872      * a stringifiable OP_CONST and if so what the const sv is.
2873      *
2874      * The reason why the last concat can't be STACKED is the difference
2875      * between
2876      *
2877      *    ((($a .= $a) .= $a) .= $a) .= $a
2878      *
2879      * and
2880      *    $a . $a . $a . $a . $a
2881      *
2882      * The main difference between the optrees for those two constructs
2883      * is the presence of the last STACKED. As well as modifying $a,
2884      * the former sees the changed $a between each concat, so if $s is
2885      * initially 'a', the first returns 'a' x 16, while the latter returns
2886      * 'a' x 5. And pp_multiconcat can't handle that kind of thing.
2887      */
2888
2889     kid = topop;
2890
2891     for (;;) {
2892         OP *argop;
2893         SV *sv;
2894         bool last = FALSE;
2895
2896         if (    kid->op_type == OP_CONCAT
2897             && !kid_is_last
2898         ) {
2899             OP *k1, *k2;
2900             k1 = cUNOPx(kid)->op_first;
2901             k2 = OpSIBLING(k1);
2902             /* shouldn't happen except maybe after compile err? */
2903             if (!k2)
2904                 return;
2905
2906             /* avoid turning (A . B . ($lex = C) ...)  into  (A . B . C ...) */
2907             if (kid->op_private & OPpTARGET_MY)
2908                 kid_is_last = TRUE;
2909
2910             stacked_last = (kid->op_flags & OPf_STACKED);
2911             if (!stacked_last)
2912                 kid_is_last = TRUE;
2913
2914             kid   = k1;
2915             argop = k2;
2916         }
2917         else {
2918             argop = kid;
2919             last = TRUE;
2920         }
2921
2922         if (   nargs + nadjconst  >  PERL_MULTICONCAT_MAXARG        - 2
2923             || (argp - args + 1)  > (PERL_MULTICONCAT_MAXARG*2 + 1) - 2)
2924         {
2925             /* At least two spare slots are needed to decompose both
2926              * concat args. If there are no slots left, continue to
2927              * examine the rest of the optree, but don't push new values
2928              * on args[]. If the optree as a whole is legal for conversion
2929              * (in particular that the last concat isn't STACKED), then
2930              * the first PERL_MULTICONCAT_MAXARG elements of the optree
2931              * can be converted into an OP_MULTICONCAT now, with the first
2932              * child of that op being the remainder of the optree -
2933              * which may itself later be converted to a multiconcat op
2934              * too.
2935              */
2936             if (last) {
2937                 /* the last arg is the rest of the optree */
2938                 argp++->p = NULL;
2939                 nargs++;
2940             }
2941         }
2942         else if (   argop->op_type == OP_CONST
2943             && ((sv = cSVOPx_sv(argop)))
2944             /* defer stringification until runtime of 'constant'
2945              * things that might stringify variantly, e.g. the radix
2946              * point of NVs, or overloaded RVs */
2947             && (SvPOK(sv) || SvIOK(sv))
2948             && (!SvGMAGICAL(sv))
2949         ) {
2950             argp++->p = sv;
2951             utf8   |= cBOOL(SvUTF8(sv));
2952             nconst++;
2953             if (prev_was_const)
2954                 /* this const may be demoted back to a plain arg later;
2955                  * make sure we have enough arg slots left */
2956                 nadjconst++;
2957             prev_was_const = !prev_was_const;
2958         }
2959         else {
2960             argp++->p = NULL;
2961             nargs++;
2962             prev_was_const = FALSE;
2963         }
2964
2965         if (last)
2966             break;
2967     }
2968
2969     toparg = argp - 1;
2970
2971     if (stacked_last)
2972         return; /* we don't support ((A.=B).=C)...) */
2973
2974     /* look for two adjacent consts and don't fold them together:
2975      *     $o . "a" . "b"
2976      * should do
2977      *     $o->concat("a")->concat("b")
2978      * rather than
2979      *     $o->concat("ab")
2980      * (but $o .=  "a" . "b" should still fold)
2981      */
2982     {
2983         bool seen_nonconst = FALSE;
2984         for (argp = toparg; argp >= args; argp--) {
2985             if (argp->p == NULL) {
2986                 seen_nonconst = TRUE;
2987                 continue;
2988             }
2989             if (!seen_nonconst)
2990                 continue;
2991             if (argp[1].p) {
2992                 /* both previous and current arg were constants;
2993                  * leave the current OP_CONST as-is */
2994                 argp->p = NULL;
2995                 nconst--;
2996                 nargs++;
2997             }
2998         }
2999     }
3000
3001     /* -----------------------------------------------------------------
3002      * Phase 2:
3003      *
3004      * At this point we have determined that the optree *can* be converted
3005      * into a multiconcat. Having gathered all the evidence, we now decide
3006      * whether it *should*.
3007      */
3008
3009
3010     /* we need at least one concat action, e.g.:
3011      *
3012      *  Y . Z
3013      *  X = Y . Z
3014      *  X .= Y
3015      *
3016      * otherwise we could be doing something like $x = "foo", which
3017      * if treated as as a concat, would fail to COW.
3018      */
3019     if (nargs + nconst + cBOOL(private_flags & OPpMULTICONCAT_APPEND) < 2)
3020         return;
3021
3022     /* Benchmarking seems to indicate that we gain if:
3023      * * we optimise at least two actions into a single multiconcat
3024      *    (e.g concat+concat, sassign+concat);
3025      * * or if we can eliminate at least 1 OP_CONST;
3026      * * or if we can eliminate a padsv via OPpTARGET_MY
3027      */
3028
3029     if (
3030            /* eliminated at least one OP_CONST */
3031            nconst >= 1
3032            /* eliminated an OP_SASSIGN */
3033         || o->op_type == OP_SASSIGN
3034            /* eliminated an OP_PADSV */
3035         || (!targmyop && is_targable)
3036     )
3037         /* definitely a net gain to optimise */
3038         goto optimise;
3039
3040     /* ... if not, what else? */
3041
3042     /* special-case '$lex1 = expr . $lex1' (where expr isn't lex1):
3043      * multiconcat is faster (due to not creating a temporary copy of
3044      * $lex1), whereas for a general $lex1 = $lex2 . $lex3, concat is
3045      * faster.
3046      */
3047     if (   nconst == 0
3048          && nargs == 2
3049          && targmyop
3050          && topop->op_type == OP_CONCAT
3051     ) {
3052         PADOFFSET t = targmyop->op_targ;
3053         OP *k1 = cBINOPx(topop)->op_first;
3054         OP *k2 = cBINOPx(topop)->op_last;
3055         if (   k2->op_type == OP_PADSV
3056             && k2->op_targ == t
3057             && (   k1->op_type != OP_PADSV
3058                 || k1->op_targ != t)
3059         )
3060             goto optimise;
3061     }
3062
3063     /* need at least two concats */
3064     if (nargs + nconst + cBOOL(private_flags & OPpMULTICONCAT_APPEND) < 3)
3065         return;
3066
3067
3068
3069     /* -----------------------------------------------------------------
3070      * Phase 3:
3071      *
3072      * At this point the optree has been verified as ok to be optimised
3073      * into an OP_MULTICONCAT. Now start changing things.
3074      */
3075
3076    optimise:
3077
3078     /* stringify all const args and determine utf8ness */
3079
3080     variant = 0;
3081     for (argp = args; argp <= toparg; argp++) {
3082         SV *sv = (SV*)argp->p;
3083         if (!sv)
3084             continue; /* not a const op */
3085         if (utf8 && !SvUTF8(sv))
3086             sv_utf8_upgrade_nomg(sv);
3087         argp->p = SvPV_nomg(sv, argp->len);
3088         total_len += argp->len;
3089         
3090         /* see if any strings would grow if converted to utf8 */
3091         if (!utf8) {
3092             variant += variant_under_utf8_count((U8 *) argp->p,
3093                                                 (U8 *) argp->p + argp->len);
3094         }
3095     }
3096
3097     /* create and populate aux struct */
3098
3099   create_aux:
3100
3101     aux = (UNOP_AUX_item*)PerlMemShared_malloc(
3102                     sizeof(UNOP_AUX_item)
3103                     *  (
3104                            PERL_MULTICONCAT_HEADER_SIZE
3105                          + ((nargs + 1) * (variant ? 2 : 1))
3106                         )
3107                     );
3108     const_str = (char *)PerlMemShared_malloc(total_len ? total_len : 1);
3109
3110     /* Extract all the non-const expressions from the concat tree then
3111      * dispose of the old tree, e.g. convert the tree from this:
3112      *
3113      *  o => SASSIGN
3114      *         |
3115      *       STRINGIFY   -- TARGET
3116      *         |
3117      *       ex-PUSHMARK -- CONCAT
3118      *                        |
3119      *                      CONCAT -- EXPR5
3120      *                        |
3121      *                      CONCAT -- EXPR4
3122      *                        |
3123      *                      CONCAT -- EXPR3
3124      *                        |
3125      *                      EXPR1  -- EXPR2
3126      *
3127      *
3128      * to:
3129      *
3130      *  o => MULTICONCAT
3131      *         |
3132      *       ex-PUSHMARK -- EXPR1 -- EXPR2 -- EXPR3 -- EXPR4 -- EXPR5 -- TARGET
3133      *
3134      * except that if EXPRi is an OP_CONST, it's discarded.
3135      *
3136      * During the conversion process, EXPR ops are stripped from the tree
3137      * and unshifted onto o. Finally, any of o's remaining original
3138      * childen are discarded and o is converted into an OP_MULTICONCAT.
3139      *
3140      * In this middle of this, o may contain both: unshifted args on the
3141      * left, and some remaining original args on the right. lastkidop
3142      * is set to point to the right-most unshifted arg to delineate
3143      * between the two sets.
3144      */
3145
3146
3147     if (is_sprintf) {
3148         /* create a copy of the format with the %'s removed, and record
3149          * the sizes of the const string segments in the aux struct */
3150         char *q, *oldq;
3151         lenp = aux + PERL_MULTICONCAT_IX_LENGTHS;
3152
3153         p    = sprintf_info.start;
3154         q    = const_str;
3155         oldq = q;
3156         for (; p < sprintf_info.end; p++) {
3157             if (*p == '%') {
3158                 p++;
3159                 if (*p != '%') {
3160                     (lenp++)->ssize = q - oldq;
3161                     oldq = q;
3162                     continue;
3163                 }
3164             }
3165             *q++ = *p;
3166         }
3167         lenp->ssize = q - oldq;
3168         assert((STRLEN)(q - const_str) == total_len);
3169
3170         /* Attach all the args (i.e. the kids of the sprintf) to o (which
3171          * may or may not be topop) The pushmark and const ops need to be
3172          * kept in case they're an op_next entry point.
3173          */
3174         lastkidop = cLISTOPx(topop)->op_last;
3175         kid = cUNOPx(topop)->op_first; /* pushmark */
3176         op_null(kid);
3177         op_null(OpSIBLING(kid));       /* const */
3178         if (o != topop) {
3179             kid = op_sibling_splice(topop, NULL, -1, NULL); /* cut all args */
3180             op_sibling_splice(o, NULL, 0, kid); /* and attach to o */
3181             lastkidop->op_next = o;
3182         }
3183     }
3184     else {
3185         p = const_str;
3186         lenp = aux + PERL_MULTICONCAT_IX_LENGTHS;
3187
3188         lenp->ssize = -1;
3189
3190         /* Concatenate all const strings into const_str.
3191          * Note that args[] contains the RHS args in reverse order, so
3192          * we scan args[] from top to bottom to get constant strings
3193          * in L-R order
3194          */
3195         for (argp = toparg; argp >= args; argp--) {
3196             if (!argp->p)
3197                 /* not a const op */
3198                 (++lenp)->ssize = -1;
3199             else {
3200                 STRLEN l = argp->len;
3201                 Copy(argp->p, p, l, char);
3202                 p += l;
3203                 if (lenp->ssize == -1)
3204                     lenp->ssize = l;
3205                 else
3206                     lenp->ssize += l;
3207             }
3208         }
3209
3210         kid = topop;
3211         nextop = o;
3212         lastkidop = NULL;
3213
3214         for (argp = args; argp <= toparg; argp++) {
3215             /* only keep non-const args, except keep the first-in-next-chain
3216              * arg no matter what it is (but nulled if OP_CONST), because it
3217              * may be the entry point to this subtree from the previous
3218              * op_next.
3219              */
3220             bool last = (argp == toparg);
3221             OP *prev;
3222
3223             /* set prev to the sibling *before* the arg to be cut out,
3224              * e.g. when cutting EXPR:
3225              *
3226              *         |
3227              * kid=  CONCAT
3228              *         |
3229              * prev= CONCAT -- EXPR
3230              *         |
3231              */
3232             if (argp == args && kid->op_type != OP_CONCAT) {
3233                 /* in e.g. '$x .= f(1)' there's no RHS concat tree
3234                  * so the expression to be cut isn't kid->op_last but
3235                  * kid itself */
3236                 OP *o1, *o2;
3237                 /* find the op before kid */
3238                 o1 = NULL;
3239                 o2 = cUNOPx(parentop)->op_first;
3240                 while (o2 && o2 != kid) {
3241                     o1 = o2;
3242                     o2 = OpSIBLING(o2);
3243                 }
3244                 assert(o2 == kid);
3245                 prev = o1;
3246                 kid  = parentop;
3247             }
3248             else if (kid == o && lastkidop)
3249                 prev = last ? lastkidop : OpSIBLING(lastkidop);
3250             else
3251                 prev = last ? NULL : cUNOPx(kid)->op_first;
3252
3253             if (!argp->p || last) {
3254                 /* cut RH op */
3255                 OP *aop = op_sibling_splice(kid, prev, 1, NULL);
3256                 /* and unshift to front of o */
3257                 op_sibling_splice(o, NULL, 0, aop);
3258                 /* record the right-most op added to o: later we will
3259                  * free anything to the right of it */
3260                 if (!lastkidop)
3261                     lastkidop = aop;
3262                 aop->op_next = nextop;
3263                 if (last) {
3264                     if (argp->p)
3265                         /* null the const at start of op_next chain */
3266                         op_null(aop);
3267                 }
3268                 else if (prev)
3269                     nextop = prev->op_next;
3270             }
3271
3272             /* the last two arguments are both attached to the same concat op */
3273             if (argp < toparg - 1)
3274                 kid = prev;
3275         }
3276     }
3277
3278     /* Populate the aux struct */
3279
3280     aux[PERL_MULTICONCAT_IX_NARGS].ssize     = nargs;
3281     aux[PERL_MULTICONCAT_IX_PLAIN_PV].pv    = utf8 ? NULL : const_str;
3282     aux[PERL_MULTICONCAT_IX_PLAIN_LEN].ssize = utf8 ?    0 : total_len;
3283     aux[PERL_MULTICONCAT_IX_UTF8_PV].pv     = const_str;
3284     aux[PERL_MULTICONCAT_IX_UTF8_LEN].ssize  = total_len;
3285
3286     /* if variant > 0, calculate a variant const string and lengths where
3287      * the utf8 version of the string will take 'variant' more bytes than
3288      * the plain one. */
3289
3290     if (variant) {
3291         char              *p = const_str;
3292         STRLEN          ulen = total_len + variant;
3293         UNOP_AUX_item  *lens = aux + PERL_MULTICONCAT_IX_LENGTHS;
3294         UNOP_AUX_item *ulens = lens + (nargs + 1);
3295         char             *up = (char*)PerlMemShared_malloc(ulen);
3296         SSize_t            n;
3297
3298         aux[PERL_MULTICONCAT_IX_UTF8_PV].pv    = up;
3299         aux[PERL_MULTICONCAT_IX_UTF8_LEN].ssize = ulen;
3300
3301         for (n = 0; n < (nargs + 1); n++) {
3302             SSize_t i;
3303             char * orig_up = up;
3304             for (i = (lens++)->ssize; i > 0; i--) {
3305                 U8 c = *p++;
3306                 append_utf8_from_native_byte(c, (U8**)&up);
3307             }
3308             (ulens++)->ssize = (i < 0) ? i : up - orig_up;
3309         }
3310     }
3311
3312     if (stringop) {
3313         /* if there was a top(ish)-level OP_STRINGIFY, we need to keep
3314          * that op's first child - an ex-PUSHMARK - because the op_next of
3315          * the previous op may point to it (i.e. it's the entry point for
3316          * the o optree)
3317          */
3318         OP *pmop =
3319             (stringop == o)
3320                 ? op_sibling_splice(o, lastkidop, 1, NULL)
3321                 : op_sibling_splice(stringop, NULL, 1, NULL);
3322         assert(OP_TYPE_IS_OR_WAS_NN(pmop, OP_PUSHMARK));
3323         op_sibling_splice(o, NULL, 0, pmop);
3324         if (!lastkidop)
3325             lastkidop = pmop;
3326     }
3327
3328     /* Optimise 
3329      *    target  = A.B.C...
3330      *    target .= A.B.C...
3331      */
3332
3333     if (targetop) {
3334         assert(!targmyop);
3335
3336         if (o->op_type == OP_SASSIGN) {
3337             /* Move the target subtree from being the last of o's children
3338              * to being the last of o's preserved children.
3339              * Note the difference between 'target = ...' and 'target .= ...':
3340              * for the former, target is executed last; for the latter,
3341              * first.
3342              */
3343             kid = OpSIBLING(lastkidop);
3344             op_sibling_splice(o, kid, 1, NULL); /* cut target op */
3345             op_sibling_splice(o, lastkidop, 0, targetop); /* and paste */
3346             lastkidop->op_next = kid->op_next;
3347             lastkidop = targetop;
3348         }
3349         else {
3350             /* Move the target subtree from being the first of o's
3351              * original children to being the first of *all* o's children.
3352              */
3353             if (lastkidop) {
3354                 op_sibling_splice(o, lastkidop, 1, NULL); /* cut target op */
3355                 op_sibling_splice(o, NULL, 0, targetop);  /* and paste*/
3356             }
3357             else {
3358                 /* if the RHS of .= doesn't contain a concat (e.g.
3359                  * $x .= "foo"), it gets missed by the "strip ops from the
3360                  * tree and add to o" loop earlier */
3361                 assert(topop->op_type != OP_CONCAT);
3362                 if (stringop) {
3363                     /* in e.g. $x .= "$y", move the $y expression
3364                      * from being a child of OP_STRINGIFY to being the
3365                      * second child of the OP_CONCAT
3366                      */
3367                     assert(cUNOPx(stringop)->op_first == topop);
3368                     op_sibling_splice(stringop, NULL, 1, NULL);
3369                     op_sibling_splice(o, cUNOPo->op_first, 0, topop);
3370                 }
3371                 assert(topop == OpSIBLING(cBINOPo->op_first));
3372                 if (toparg->p)
3373                     op_null(topop);
3374                 lastkidop = topop;
3375             }
3376         }
3377
3378         if (is_targable) {
3379             /* optimise
3380              *  my $lex  = A.B.C...
3381              *     $lex  = A.B.C...
3382              *     $lex .= A.B.C...
3383              * The original padsv op is kept but nulled in case it's the
3384              * entry point for the optree (which it will be for
3385              * '$lex .=  ... '
3386              */
3387             private_flags |= OPpTARGET_MY;
3388             private_flags |= (targetop->op_private & OPpLVAL_INTRO);
3389             o->op_targ = targetop->op_targ;
3390             targetop->op_targ = 0;
3391             op_null(targetop);
3392         }
3393         else
3394             flags |= OPf_STACKED;
3395     }
3396     else if (targmyop) {
3397         private_flags |= OPpTARGET_MY;
3398         if (o != targmyop) {
3399             o->op_targ = targmyop->op_targ;
3400             targmyop->op_targ = 0;
3401         }
3402     }
3403
3404     /* detach the emaciated husk of the sprintf/concat optree and free it */
3405     for (;;) {
3406         kid = op_sibling_splice(o, lastkidop, 1, NULL);
3407         if (!kid)
3408             break;
3409         op_free(kid);
3410     }
3411
3412     /* and convert o into a multiconcat */
3413
3414     o->op_flags        = (flags|OPf_KIDS|stacked_last
3415                          |(o->op_flags & (OPf_WANT|OPf_PARENS)));
3416     o->op_private      = private_flags;
3417     o->op_type         = OP_MULTICONCAT;
3418     o->op_ppaddr       = PL_ppaddr[OP_MULTICONCAT];
3419     cUNOP_AUXo->op_aux = aux;
3420 }
3421
3422
3423 /* do all the final processing on an optree (e.g. running the peephole
3424  * optimiser on it), then attach it to cv (if cv is non-null)
3425  */
3426
3427 static void
3428 S_process_optree(pTHX_ CV *cv, OP *optree, OP* start)
3429 {
3430     OP **startp;
3431
3432     /* XXX for some reason, evals, require and main optrees are
3433      * never attached to their CV; instead they just hang off
3434      * PL_main_root + PL_main_start or PL_eval_root + PL_eval_start
3435      * and get manually freed when appropriate */
3436     if (cv)
3437         startp = &CvSTART(cv);
3438     else
3439         startp = PL_in_eval? &PL_eval_start : &PL_main_start;
3440
3441     *startp = start;
3442     optree->op_private |= OPpREFCOUNTED;
3443     OpREFCNT_set(optree, 1);
3444     optimize_optree(optree);
3445     CALL_PEEP(*startp);
3446     finalize_optree(optree);
3447     S_prune_chain_head(startp);
3448
3449     if (cv) {
3450         /* now that optimizer has done its work, adjust pad values */
3451         pad_tidy(optree->op_type == OP_LEAVEWRITE ? padtidy_FORMAT
3452                  : CvCLONE(cv) ? padtidy_SUBCLONE : padtidy_SUB);
3453     }
3454 }
3455
3456
3457 /*
3458 =for apidoc optimize_optree
3459
3460 This function applies some optimisations to the optree in top-down order.
3461 It is called before the peephole optimizer, which processes ops in
3462 execution order. Note that finalize_optree() also does a top-down scan,
3463 but is called *after* the peephole optimizer.
3464
3465 =cut
3466 */
3467
3468 void
3469 Perl_optimize_optree(pTHX_ OP* o)
3470 {
3471     PERL_ARGS_ASSERT_OPTIMIZE_OPTREE;
3472
3473     ENTER;
3474     SAVEVPTR(PL_curcop);
3475
3476     optimize_op(o);
3477
3478     LEAVE;
3479 }
3480
3481
3482 /* helper for optimize_optree() which optimises one op then recurses
3483  * to optimise any children.
3484  */
3485
3486 STATIC void
3487 S_optimize_op(pTHX_ OP* o)
3488 {
3489     OP *top_op = o;
3490
3491     PERL_ARGS_ASSERT_OPTIMIZE_OP;
3492
3493     while (1) {
3494         OP * next_kid = NULL;
3495
3496         assert(o->op_type != OP_FREED);
3497
3498         switch (o->op_type) {
3499         case OP_NEXTSTATE:
3500         case OP_DBSTATE:
3501             PL_curcop = ((COP*)o);              /* for warnings */
3502             break;
3503
3504
3505         case OP_CONCAT:
3506         case OP_SASSIGN:
3507         case OP_STRINGIFY:
3508         case OP_SPRINTF:
3509             S_maybe_multiconcat(aTHX_ o);
3510             break;
3511
3512         case OP_SUBST:
3513             if (cPMOPo->op_pmreplrootu.op_pmreplroot) {
3514                 /* we can't assume that op_pmreplroot->op_sibparent == o
3515                  * and that it is thus possible to walk back up the tree
3516                  * past op_pmreplroot. So, although we try to avoid
3517                  * recursing through op trees, do it here. After all,
3518                  * there are unlikely to be many nested s///e's within
3519                  * the replacement part of a s///e.
3520                  */
3521                 optimize_op(cPMOPo->op_pmreplrootu.op_pmreplroot);
3522             }
3523             break;
3524
3525         default:
3526             break;
3527         }
3528
3529         if (o->op_flags & OPf_KIDS)
3530             next_kid = cUNOPo->op_first;
3531
3532         /* if a kid hasn't been nominated to process, continue with the
3533          * next sibling, or if no siblings left, go back to the parent's
3534          * siblings and so on
3535          */
3536         while (!next_kid) {
3537             if (o == top_op)
3538                 return; /* at top; no parents/siblings to try */
3539             if (OpHAS_SIBLING(o))
3540                 next_kid = o->op_sibparent;
3541             else
3542                 o = o->op_sibparent; /*try parent's next sibling */
3543         }
3544
3545       /* this label not yet used. Goto here if any code above sets
3546        * next-kid
3547        get_next_op:
3548        */
3549         o = next_kid;
3550     }
3551 }
3552
3553
3554 /*
3555 =for apidoc finalize_optree
3556
3557 This function finalizes the optree.  Should be called directly after
3558 the complete optree is built.  It does some additional
3559 checking which can't be done in the normal C<ck_>xxx functions and makes
3560 the tree thread-safe.
3561
3562 =cut
3563 */
3564 void
3565 Perl_finalize_optree(pTHX_ OP* o)
3566 {
3567     PERL_ARGS_ASSERT_FINALIZE_OPTREE;
3568
3569     ENTER;
3570     SAVEVPTR(PL_curcop);
3571
3572     finalize_op(o);
3573
3574     LEAVE;
3575 }
3576
3577 #ifdef USE_ITHREADS
3578 /* Relocate sv to the pad for thread safety.
3579  * Despite being a "constant", the SV is written to,
3580  * for reference counts, sv_upgrade() etc. */
3581 PERL_STATIC_INLINE void
3582 S_op_relocate_sv(pTHX_ SV** svp, PADOFFSET* targp)
3583 {
3584     PADOFFSET ix;
3585     PERL_ARGS_ASSERT_OP_RELOCATE_SV;
3586     if (!*svp) return;
3587     ix = pad_alloc(OP_CONST, SVf_READONLY);
3588     SvREFCNT_dec(PAD_SVl(ix));
3589     PAD_SETSV(ix, *svp);
3590     /* XXX I don't know how this isn't readonly already. */
3591     if (!SvIsCOW(PAD_SVl(ix))) SvREADONLY_on(PAD_SVl(ix));
3592     *svp = NULL;
3593     *targp = ix;
3594 }
3595 #endif
3596
3597 /*
3598 =for apidoc traverse_op_tree
3599
3600 Return the next op in a depth-first traversal of the op tree,
3601 returning NULL when the traversal is complete.
3602
3603 The initial call must supply the root of the tree as both top and o.
3604
3605 For now it's static, but it may be exposed to the API in the future.
3606
3607 =cut
3608 */
3609
3610 STATIC OP*
3611 S_traverse_op_tree(pTHX_ OP *top, OP *o) {
3612     OP *sib;
3613
3614     PERL_ARGS_ASSERT_TRAVERSE_OP_TREE;
3615
3616     if ((o->op_flags & OPf_KIDS) && cUNOPo->op_first) {
3617         return cUNOPo->op_first;
3618     }
3619     else if ((sib = OpSIBLING(o))) {
3620         return sib;
3621     }
3622     else {
3623         OP *parent = o->op_sibparent;
3624         assert(!(o->op_moresib));
3625         while (parent && parent != top) {
3626             OP *sib = OpSIBLING(parent);
3627             if (sib)
3628                 return sib;
3629             parent = parent->op_sibparent;
3630         }
3631
3632         return NULL;
3633     }
3634 }
3635
3636 STATIC void
3637 S_finalize_op(pTHX_ OP* o)
3638 {
3639     OP * const top = o;
3640     PERL_ARGS_ASSERT_FINALIZE_OP;
3641
3642     do {
3643         assert(o->op_type != OP_FREED);
3644
3645         switch (o->op_type) {
3646         case OP_NEXTSTATE:
3647         case OP_DBSTATE:
3648             PL_curcop = ((COP*)o);              /* for warnings */
3649             break;
3650         case OP_EXEC:
3651             if (OpHAS_SIBLING(o)) {
3652                 OP *sib = OpSIBLING(o);
3653                 if ((  sib->op_type == OP_NEXTSTATE || sib->op_type == OP_DBSTATE)
3654                     && ckWARN(WARN_EXEC)
3655                     && OpHAS_SIBLING(sib))
3656                 {
3657                     const OPCODE type = OpSIBLING(sib)->op_type;
3658                     if (type != OP_EXIT && type != OP_WARN && type != OP_DIE) {
3659                         const line_t oldline = CopLINE(PL_curcop);
3660                         CopLINE_set(PL_curcop, CopLINE((COP*)sib));
3661                         Perl_warner(aTHX_ packWARN(WARN_EXEC),
3662                             "Statement unlikely to be reached");
3663                         Perl_warner(aTHX_ packWARN(WARN_EXEC),
3664                             "\t(Maybe you meant system() when you said exec()?)\n");
3665                         CopLINE_set(PL_curcop, oldline);
3666                     }
3667                 }
3668             }
3669             break;
3670
3671         case OP_GV:
3672             if ((o->op_private & OPpEARLY_CV) && ckWARN(WARN_PROTOTYPE)) {
3673                 GV * const gv = cGVOPo_gv;
3674                 if (SvTYPE(gv) == SVt_PVGV && GvCV(gv) && SvPVX_const(GvCV(gv))) {
3675                     /* XXX could check prototype here instead of just carping */
3676                     SV * const sv = sv_newmortal();
3677                     gv_efullname3(sv, gv, NULL);
3678                     Perl_warner(aTHX_ packWARN(WARN_PROTOTYPE),
3679                                 "%" SVf "() called too early to check prototype",
3680                                 SVfARG(sv));
3681                 }
3682             }
3683             break;
3684
3685         case OP_CONST:
3686             if (cSVOPo->op_private & OPpCONST_STRICT)
3687                 no_bareword_allowed(o);
3688 #ifdef USE_ITHREADS
3689             /* FALLTHROUGH */
3690         case OP_HINTSEVAL:
3691             op_relocate_sv(&cSVOPo->op_sv, &o->op_targ);
3692 #endif
3693             break;
3694
3695 #ifdef USE_ITHREADS
3696             /* Relocate all the METHOP's SVs to the pad for thread safety. */
3697         case OP_METHOD_NAMED:
3698         case OP_METHOD_SUPER:
3699         case OP_METHOD_REDIR:
3700         case OP_METHOD_REDIR_SUPER:
3701             op_relocate_sv(&cMETHOPx(o)->op_u.op_meth_sv, &o->op_targ);
3702             break;
3703 #endif
3704
3705         case OP_HELEM: {
3706             UNOP *rop;
3707             SVOP *key_op;
3708             OP *kid;
3709
3710             if ((key_op = cSVOPx(((BINOP*)o)->op_last))->op_type != OP_CONST)
3711                 break;
3712
3713             rop = (UNOP*)((BINOP*)o)->op_first;
3714
3715             goto check_keys;
3716
3717             case OP_HSLICE:
3718                 S_scalar_slice_warning(aTHX_ o);
3719                 /* FALLTHROUGH */
3720
3721             case OP_KVHSLICE:
3722                 kid = OpSIBLING(cLISTOPo->op_first);
3723             if (/* I bet there's always a pushmark... */
3724                 OP_TYPE_ISNT_AND_WASNT_NN(kid, OP_LIST)
3725                 && OP_TYPE_ISNT_NN(kid, OP_CONST))
3726             {
3727                 break;
3728             }
3729
3730             key_op = (SVOP*)(kid->op_type == OP_CONST
3731                              ? kid
3732                              : OpSIBLING(kLISTOP->op_first));
3733
3734             rop = (UNOP*)((LISTOP*)o)->op_last;
3735
3736         check_keys:
3737             if (o->op_private & OPpLVAL_INTRO || rop->op_type != OP_RV2HV)
3738                 rop = NULL;
3739             S_check_hash_fields_and_hekify(aTHX_ rop, key_op, 1);
3740             break;
3741         }
3742         case OP_NULL:
3743             if (o->op_targ != OP_HSLICE && o->op_targ != OP_ASLICE)
3744                 break;
3745             /* FALLTHROUGH */
3746         case OP_ASLICE:
3747             S_scalar_slice_warning(aTHX_ o);
3748             break;
3749
3750         case OP_SUBST: {
3751             if (cPMOPo->op_pmreplrootu.op_pmreplroot)
3752                 finalize_op(cPMOPo->op_pmreplrootu.op_pmreplroot);
3753             break;
3754         }
3755         default:
3756             break;
3757         }
3758
3759 #ifdef DEBUGGING
3760         if (o->op_flags & OPf_KIDS) {
3761             OP *kid;
3762
3763             /* check that op_last points to the last sibling, and that
3764              * the last op_sibling/op_sibparent field points back to the
3765              * parent, and that the only ops with KIDS are those which are
3766              * entitled to them */
3767             U32 type = o->op_type;
3768             U32 family;
3769             bool has_last;
3770
3771             if (type == OP_NULL) {
3772                 type = o->op_targ;
3773                 /* ck_glob creates a null UNOP with ex-type GLOB
3774                  * (which is a list op. So pretend it wasn't a listop */
3775                 if (type == OP_GLOB)
3776                     type = OP_NULL;
3777             }
3778             family = PL_opargs[type] & OA_CLASS_MASK;
3779
3780             has_last = (   family == OA_BINOP
3781                         || family == OA_LISTOP
3782                         || family == OA_PMOP
3783                         || family == OA_LOOP
3784                        );
3785             assert(  has_last /* has op_first and op_last, or ...
3786                   ... has (or may have) op_first: */
3787                   || family == OA_UNOP
3788                   || family == OA_UNOP_AUX
3789                   || family == OA_LOGOP
3790                   || family == OA_BASEOP_OR_UNOP
3791                   || family == OA_FILESTATOP
3792                   || family == OA_LOOPEXOP
3793                   || family == OA_METHOP
3794                   || type == OP_CUSTOM
3795                   || type == OP_NULL /* new_logop does this */
3796                   );
3797
3798             for (kid = cUNOPo->op_first; kid; kid = OpSIBLING(kid)) {
3799                 if (!OpHAS_SIBLING(kid)) {
3800                     if (has_last)
3801                         assert(kid == cLISTOPo->op_last);
3802                     assert(kid->op_sibparent == o);
3803                 }
3804             }
3805         }
3806 #endif
3807     } while (( o = traverse_op_tree(top, o)) != NULL);
3808 }
3809
3810 /*
3811 =for apidoc op_lvalue
3812
3813 Propagate lvalue ("modifiable") context to an op and its children.
3814 C<type> represents the context type, roughly based on the type of op that
3815 would do the modifying, although C<local()> is represented by C<OP_NULL>,
3816 because it has no op type of its own (it is signalled by a flag on
3817 the lvalue op).
3818
3819 This function detects things that can't be modified, such as C<$x+1>, and
3820 generates errors for them.  For example, C<$x+1 = 2> would cause it to be
3821 called with an op of type C<OP_ADD> and a C<type> argument of C<OP_SASSIGN>.
3822
3823 It also flags things that need to behave specially in an lvalue context,
3824 such as C<$$x = 5> which might have to vivify a reference in C<$x>.
3825
3826 =cut
3827 */
3828
3829 static void
3830 S_mark_padname_lvalue(pTHX_ PADNAME *pn)
3831 {
3832     CV *cv = PL_compcv;
3833     PadnameLVALUE_on(pn);
3834     while (PadnameOUTER(pn) && PARENT_PAD_INDEX(pn)) {
3835         cv = CvOUTSIDE(cv);
3836         /* RT #127786: cv can be NULL due to an eval within the DB package
3837          * called from an anon sub - anon subs don't have CvOUTSIDE() set
3838          * unless they contain an eval, but calling eval within DB
3839          * pretends the eval was done in the caller's scope.
3840          */
3841         if (!cv)
3842             break;
3843         assert(CvPADLIST(cv));
3844         pn =
3845            PadlistNAMESARRAY(CvPADLIST(cv))[PARENT_PAD_INDEX(pn)];
3846         assert(PadnameLEN(pn));
3847         PadnameLVALUE_on(pn);
3848     }
3849 }
3850
3851 static bool
3852 S_vivifies(const OPCODE type)
3853 {
3854     switch(type) {
3855     case OP_RV2AV:     case   OP_ASLICE:
3856     case OP_RV2HV:     case OP_KVASLICE:
3857     case OP_RV2SV:     case   OP_HSLICE:
3858     case OP_AELEMFAST: case OP_KVHSLICE:
3859     case OP_HELEM:
3860     case OP_AELEM:
3861         return 1;
3862     }
3863     return 0;
3864 }
3865
3866 static void
3867 S_lvref(pTHX_ OP *o, I32 type)
3868 {
3869     dVAR;
3870     OP *kid;
3871     switch (o->op_type) {
3872     case OP_COND_EXPR:
3873         for (kid = OpSIBLING(cUNOPo->op_first); kid;
3874              kid = OpSIBLING(kid))
3875             S_lvref(aTHX_ kid, type);
3876         /* FALLTHROUGH */
3877     case OP_PUSHMARK:
3878         return;
3879     case OP_RV2AV:
3880         if (cUNOPo->op_first->op_type != OP_GV) goto badref;
3881         o->op_flags |= OPf_STACKED;
3882         if (o->op_flags & OPf_PARENS) {
3883             if (o->op_private & OPpLVAL_INTRO) {
3884                  yyerror(Perl_form(aTHX_ "Can't modify reference to "
3885                       "localized parenthesized array in list assignment"));
3886                 return;
3887             }
3888           slurpy:
3889             OpTYPE_set(o, OP_LVAVREF);
3890             o->op_private &= OPpLVAL_INTRO|OPpPAD_STATE;
3891             o->op_flags |= OPf_MOD|OPf_REF;
3892             return;
3893         }
3894         o->op_private |= OPpLVREF_AV;
3895         goto checkgv;
3896     case OP_RV2CV:
3897         kid = cUNOPo->op_first;
3898         if (kid->op_type == OP_NULL)
3899             kid = cUNOPx(OpSIBLING(kUNOP->op_first))
3900                 ->op_first;
3901         o->op_private = OPpLVREF_CV;
3902         if (kid->op_type == OP_GV)
3903             o->op_flags |= OPf_STACKED;
3904         else if (kid->op_type == OP_PADCV) {
3905             o->op_targ = kid->op_targ;
3906             kid->op_targ = 0;
3907             op_free(cUNOPo->op_first);
3908             cUNOPo->op_first = NULL;
3909             o->op_flags &=~ OPf_KIDS;
3910         }
3911         else goto badref;
3912         break;
3913     case OP_RV2HV:
3914         if (o->op_flags & OPf_PARENS) {
3915           parenhash:
3916             yyerror(Perl_form(aTHX_ "Can't modify reference to "
3917                                  "parenthesized hash in list assignment"));
3918                 return;
3919         }
3920         o->op_private |= OPpLVREF_HV;
3921         /* FALLTHROUGH */
3922     case OP_RV2SV:
3923       checkgv:
3924         if (cUNOPo->op_first->op_type != OP_GV) goto badref;
3925         o->op_flags |= OPf_STACKED;
3926         break;
3927     case OP_PADHV:
3928         if (o->op_flags & OPf_PARENS) goto parenhash;
3929         o->op_private |= OPpLVREF_HV;
3930         /* FALLTHROUGH */
3931     case OP_PADSV:
3932         PAD_COMPNAME_GEN_set(o->op_targ, PERL_INT_MAX);
3933         break;
3934     case OP_PADAV:
3935         PAD_COMPNAME_GEN_set(o->op_targ, PERL_INT_MAX);
3936         if (o->op_flags & OPf_PARENS) goto slurpy;
3937         o->op_private |= OPpLVREF_AV;
3938         break;
3939     case OP_AELEM:
3940     case OP_HELEM:
3941         o->op_private |= OPpLVREF_ELEM;
3942         o->op_flags   |= OPf_STACKED;
3943         break;
3944     case OP_ASLICE:
3945     case OP_HSLICE:
3946         OpTYPE_set(o, OP_LVREFSLICE);
3947         o->op_private &= OPpLVAL_INTRO;
3948         return;
3949     case OP_NULL:
3950         if (o->op_flags & OPf_SPECIAL)          /* do BLOCK */
3951             goto badref;
3952         else if (!(o->op_flags & OPf_KIDS))
3953             return;
3954         if (o->op_targ != OP_LIST) {
3955             S_lvref(aTHX_ cBINOPo->op_first, type);
3956             return;
3957         }
3958         /* FALLTHROUGH */
3959     case OP_LIST:
3960         for (kid = cLISTOPo->op_first; kid; kid = OpSIBLING(kid)) {
3961             assert((kid->op_flags & OPf_WANT) != OPf_WANT_VOID);
3962             S_lvref(aTHX_ kid, type);
3963         }
3964         return;
3965     case OP_STUB:
3966         if (o->op_flags & OPf_PARENS)
3967             return;
3968         /* FALLTHROUGH */
3969     default:
3970       badref:
3971         /* diag_listed_as: Can't modify reference to %s in %s assignment */
3972         yyerror(Perl_form(aTHX_ "Can't modify reference to %s in %s",
3973                      o->op_type == OP_NULL && o->op_flags & OPf_SPECIAL
3974                       ? "do block"
3975                       : OP_DESC(o),
3976                      PL_op_desc[type]));
3977         return;
3978     }
3979     OpTYPE_set(o, OP_LVREF);
3980     o->op_private &=
3981         OPpLVAL_INTRO|OPpLVREF_ELEM|OPpLVREF_TYPE|OPpPAD_STATE;
3982     if (type == OP_ENTERLOOP)
3983         o->op_private |= OPpLVREF_ITER;
3984 }
3985
3986 PERL_STATIC_INLINE bool
3987 S_potential_mod_type(I32 type)
3988 {
3989     /* Types that only potentially result in modification.  */
3990     return type == OP_GREPSTART || type == OP_ENTERSUB
3991         || type == OP_REFGEN    || type == OP_LEAVESUBLV;
3992 }
3993
3994 OP *
3995 Perl_op_lvalue_flags(pTHX_ OP *o, I32 type, U32 flags)
3996 {
3997     dVAR;
3998     OP *kid;
3999     /* -1 = error on localize, 0 = ignore localize, 1 = ok to localize */
4000     int localize = -1;
4001
4002     if (!o || (PL_parser && PL_parser->error_count))
4003         return o;
4004
4005     if ((o->op_private & OPpTARGET_MY)
4006         && (PL_opargs[o->op_type] & OA_TARGLEX))/* OPp share the meaning */
4007     {
4008         return o;
4009     }
4010
4011     assert( (o->op_flags & OPf_WANT) != OPf_WANT_VOID );
4012
4013     if (type == OP_PRTF || type == OP_SPRINTF) type = OP_ENTERSUB;
4014
4015     switch (o->op_type) {
4016     case OP_UNDEF:
4017         PL_modcount++;
4018         return o;
4019     case OP_STUB:
4020         if ((o->op_flags & OPf_PARENS))
4021             break;
4022         goto nomod;
4023     case OP_ENTERSUB:
4024         if ((type == OP_UNDEF || type == OP_REFGEN || type == OP_LOCK) &&
4025             !(o->op_flags & OPf_STACKED)) {
4026             OpTYPE_set(o, OP_RV2CV);            /* entersub => rv2cv */
4027             assert(cUNOPo->op_first->op_type == OP_NULL);
4028             op_null(((LISTOP*)cUNOPo->op_first)->op_first);/* disable pushmark */
4029             break;
4030         }
4031         else {                          /* lvalue subroutine call */
4032             o->op_private |= OPpLVAL_INTRO;
4033             PL_modcount = RETURN_UNLIMITED_NUMBER;
4034             if (S_potential_mod_type(type)) {
4035                 o->op_private |= OPpENTERSUB_INARGS;
4036                 break;
4037             }
4038             else {                      /* Compile-time error message: */
4039                 OP *kid = cUNOPo->op_first;
4040                 CV *cv;
4041                 GV *gv;
4042                 SV *namesv;
4043
4044                 if (kid->op_type != OP_PUSHMARK) {
4045                     if (kid->op_type != OP_NULL || kid->op_targ != OP_LIST)
4046                         Perl_croak(aTHX_
4047                                 "panic: unexpected lvalue entersub "
4048                                 "args: type/targ %ld:%" UVuf,
4049                                 (long)kid->op_type, (UV)kid->op_targ);
4050                     kid = kLISTOP->op_first;
4051                 }
4052                 while (OpHAS_SIBLING(kid))
4053                     kid = OpSIBLING(kid);
4054                 if (!(kid->op_type == OP_NULL && kid->op_targ == OP_RV2CV)) {
4055                     break;      /* Postpone until runtime */
4056                 }
4057
4058                 kid = kUNOP->op_first;
4059                 if (kid->op_type == OP_NULL && kid->op_targ == OP_RV2SV)
4060                     kid = kUNOP->op_first;
4061                 if (kid->op_type == OP_NULL)
4062                     Perl_croak(aTHX_
4063                                "Unexpected constant lvalue entersub "
4064                                "entry via type/targ %ld:%" UVuf,
4065                                (long)kid->op_type, (UV)kid->op_targ);
4066                 if (kid->op_type != OP_GV) {
4067                     break;
4068                 }
4069
4070                 gv = kGVOP_gv;
4071                 cv = isGV(gv)
4072                     ? GvCV(gv)
4073                     : SvROK(gv) && SvTYPE(SvRV(gv)) == SVt_PVCV
4074                         ? MUTABLE_CV(SvRV(gv))
4075                         : NULL;
4076                 if (!cv)
4077                     break;
4078                 if (CvLVALUE(cv))
4079                     break;
4080                 if (flags & OP_LVALUE_NO_CROAK)
4081                     return NULL;
4082
4083                 namesv = cv_name(cv, NULL, 0);
4084                 yyerror_pv(Perl_form(aTHX_ "Can't modify non-lvalue "
4085                                      "subroutine call of &%" SVf " in %s",
4086                                      SVfARG(namesv), PL_op_desc[type]),
4087                            SvUTF8(namesv));
4088                 return o;
4089             }
4090         }
4091         /* FALLTHROUGH */
4092     default:
4093       nomod:
4094         if (flags & OP_LVALUE_NO_CROAK) return NULL;
4095         /* grep, foreach, subcalls, refgen */
4096         if (S_potential_mod_type(type))
4097             break;
4098         yyerror(Perl_form(aTHX_ "Can't modify %s in %s",
4099                      (o->op_type == OP_NULL && (o->op_flags & OPf_SPECIAL)
4100                       ? "do block"
4101                       : OP_DESC(o)),
4102                      type ? PL_op_desc[type] : "local"));
4103         return o;
4104
4105     case OP_PREINC:
4106     case OP_PREDEC:
4107     case OP_POW:
4108     case OP_MULTIPLY:
4109     case OP_DIVIDE:
4110     case OP_MODULO:
4111     case OP_ADD:
4112     case OP_SUBTRACT:
4113     case OP_CONCAT:
4114     case OP_LEFT_SHIFT:
4115     case OP_RIGHT_SHIFT:
4116     case OP_BIT_AND:
4117     case OP_BIT_XOR:
4118     case OP_BIT_OR:
4119     case OP_I_MULTIPLY:
4120     case OP_I_DIVIDE:
4121     case OP_I_MODULO:
4122     case OP_I_ADD:
4123     case OP_I_SUBTRACT:
4124         if (!(o->op_flags & OPf_STACKED))
4125             goto nomod;
4126         PL_modcount++;
4127         break;
4128
4129     case OP_REPEAT:
4130         if (o->op_flags & OPf_STACKED) {
4131             PL_modcount++;
4132             break;
4133         }
4134         if (!(o->op_private & OPpREPEAT_DOLIST))
4135             goto nomod;
4136         else {
4137             const I32 mods = PL_modcount;
4138             modkids(cBINOPo->op_first, type);
4139             if (type != OP_AASSIGN)
4140                 goto nomod;
4141             kid = cBINOPo->op_last;
4142             if (kid->op_type == OP_CONST && SvIOK(kSVOP_sv)) {
4143                 const IV iv = SvIV(kSVOP_sv);
4144                 if (PL_modcount != RETURN_UNLIMITED_NUMBER)
4145                     PL_modcount =
4146                         mods + (PL_modcount - mods) * (iv < 0 ? 0 : iv);
4147             }
4148             else
4149                 PL_modcount = RETURN_UNLIMITED_NUMBER;
4150         }
4151         break;
4152
4153     case OP_COND_EXPR:
4154         localize = 1;
4155         for (kid = OpSIBLING(cUNOPo->op_first); kid; kid = OpSIBLING(kid))
4156             op_lvalue(kid, type);
4157         break;
4158
4159     case OP_RV2AV:
4160     case OP_RV2HV:
4161         if (type == OP_REFGEN && o->op_flags & OPf_PARENS) {
4162            PL_modcount = RETURN_UNLIMITED_NUMBER;
4163            /* Treat \(@foo) like ordinary list, but still mark it as modi-
4164               fiable since some contexts need to know.  */
4165            o->op_flags |= OPf_MOD;
4166            return o;
4167         }
4168         /* FALLTHROUGH */
4169     case OP_RV2GV:
4170         if (scalar_mod_type(o, type))
4171             goto nomod;
4172         ref(cUNOPo->op_first, o->op_type);
4173         /* FALLTHROUGH */
4174     case OP_ASLICE:
4175     case OP_HSLICE:
4176         localize = 1;
4177         /* FALLTHROUGH */
4178     case OP_AASSIGN:
4179         /* Do not apply the lvsub flag for rv2[ah]v in scalar context.  */
4180         if (type == OP_LEAVESUBLV && (
4181                 (o->op_type != OP_RV2AV && o->op_type != OP_RV2HV)
4182              || (o->op_flags & OPf_WANT) != OPf_WANT_SCALAR
4183            ))
4184             o->op_private |= OPpMAYBE_LVSUB;
4185         /* FALLTHROUGH */
4186     case OP_NEXTSTATE:
4187     case OP_DBSTATE:
4188        PL_modcount = RETURN_UNLIMITED_NUMBER;
4189         break;
4190     case OP_KVHSLICE:
4191     case OP_KVASLICE:
4192     case OP_AKEYS:
4193         if (type == OP_LEAVESUBLV)
4194             o->op_private |= OPpMAYBE_LVSUB;
4195         goto nomod;
4196     case OP_AVHVSWITCH:
4197         if (type == OP_LEAVESUBLV
4198          && (o->op_private & OPpAVHVSWITCH_MASK) + OP_EACH == OP_KEYS)
4199             o->op_private |= OPpMAYBE_LVSUB;
4200         goto nomod;
4201     case OP_AV2ARYLEN:
4202         PL_hints |= HINT_BLOCK_SCOPE;
4203         if (type == OP_LEAVESUBLV)
4204             o->op_private |= OPpMAYBE_LVSUB;
4205         PL_modcount++;
4206         break;
4207     case OP_RV2SV:
4208         ref(cUNOPo->op_first, o->op_type);
4209         localize = 1;
4210         /* FALLTHROUGH */
4211     case OP_GV:
4212         PL_hints |= HINT_BLOCK_SCOPE;
4213         /* FALLTHROUGH */
4214     case OP_SASSIGN:
4215     case OP_ANDASSIGN:
4216     case OP_ORASSIGN:
4217     case OP_DORASSIGN:
4218         PL_modcount++;
4219         break;
4220
4221     case OP_AELEMFAST:
4222     case OP_AELEMFAST_LEX:
4223         localize = -1;
4224         PL_modcount++;
4225         break;
4226
4227     case OP_PADAV:
4228     case OP_PADHV:
4229        PL_modcount = RETURN_UNLIMITED_NUMBER;
4230         if (type == OP_REFGEN && o->op_flags & OPf_PARENS)
4231         {
4232            /* Treat \(@foo) like ordinary list, but still mark it as modi-
4233               fiable since some contexts need to know.  */
4234             o->op_flags |= OPf_MOD;
4235             return o;
4236         }
4237         if (scalar_mod_type(o, type))
4238             goto nomod;
4239         if ((o->op_flags & OPf_WANT) != OPf_WANT_SCALAR
4240           && type == OP_LEAVESUBLV)
4241             o->op_private |= OPpMAYBE_LVSUB;
4242         /* FALLTHROUGH */
4243     case OP_PADSV:
4244         PL_modcount++;
4245         if (!type) /* local() */
4246             Perl_croak(aTHX_ "Can't localize lexical variable %" PNf,
4247                               PNfARG(PAD_COMPNAME(o->op_targ)));
4248         if (!(o->op_private & OPpLVAL_INTRO)
4249          || (  type != OP_SASSIGN && type != OP_AASSIGN
4250             && PadnameIsSTATE(PAD_COMPNAME_SV(o->op_targ))  ))
4251             S_mark_padname_lvalue(aTHX_ PAD_COMPNAME_SV(o->op_targ));
4252         break;
4253
4254     case OP_PUSHMARK:
4255         localize = 0;
4256         break;
4257
4258     case OP_KEYS:
4259         if (type != OP_LEAVESUBLV && !scalar_mod_type(NULL, type))
4260             goto nomod;
4261         goto lvalue_func;
4262     case OP_SUBSTR:
4263         if (o->op_private == 4) /* don't allow 4 arg substr as lvalue */
4264             goto nomod;
4265         /* FALLTHROUGH */
4266     case OP_POS:
4267     case OP_VEC:
4268       lvalue_func:
4269         if (type == OP_LEAVESUBLV)
4270             o->op_private |= OPpMAYBE_LVSUB;
4271         if (o->op_flags & OPf_KIDS && OpHAS_SIBLING(cBINOPo->op_first)) {
4272             /* substr and vec */
4273             /* If this op is in merely potential (non-fatal) modifiable
4274                context, then apply OP_ENTERSUB context to
4275                the kid op (to avoid croaking).  Other-
4276                wise pass this op’s own type so the correct op is mentioned
4277                in error messages.  */
4278             op_lvalue(OpSIBLING(cBINOPo->op_first),
4279                       S_potential_mod_type(type)
4280                         ? (I32)OP_ENTERSUB
4281                         : o->op_type);
4282         }
4283         break;
4284
4285     case OP_AELEM:
4286     case OP_HELEM:
4287         ref(cBINOPo->op_first, o->op_type);
4288         if (type == OP_ENTERSUB &&
4289              !(o->op_private & (OPpLVAL_INTRO | OPpDEREF)))
4290             o->op_private |= OPpLVAL_DEFER;
4291         if (type == OP_LEAVESUBLV)
4292             o->op_private |= OPpMAYBE_LVSUB;
4293         localize = 1;
4294         PL_modcount++;
4295         break;
4296
4297     case OP_LEAVE:
4298     case OP_LEAVELOOP:
4299         o->op_private |= OPpLVALUE;
4300         /* FALLTHROUGH */
4301     case OP_SCOPE:
4302     case OP_ENTER:
4303     case OP_LINESEQ:
4304         localize = 0;
4305         if (o->op_flags & OPf_KIDS)
4306             op_lvalue(cLISTOPo->op_last, type);
4307         break;
4308
4309     case OP_NULL:
4310         localize = 0;
4311         if (o->op_flags & OPf_SPECIAL)          /* do BLOCK */
4312             goto nomod;
4313         else if (!(o->op_flags & OPf_KIDS))
4314             break;
4315
4316         if (o->op_targ != OP_LIST) {
4317             OP *sib = OpSIBLING(cLISTOPo->op_first);
4318             /* OP_TRANS and OP_TRANSR with argument have a weird optree
4319              * that looks like
4320              *
4321              *   null
4322              *      arg
4323              *      trans
4324              *
4325              * compared with things like OP_MATCH which have the argument
4326              * as a child:
4327              *
4328              *   match
4329              *      arg
4330              *
4331              * so handle specially to correctly get "Can't modify" croaks etc
4332              */
4333
4334             if (sib && (sib->op_type == OP_TRANS || sib->op_type == OP_TRANSR))
4335             {
4336                 /* this should trigger a "Can't modify transliteration" err */
4337                 op_lvalue(sib, type);
4338             }
4339             op_lvalue(cBINOPo->op_first, type);
4340             break;
4341         }
4342         /* FALLTHROUGH */
4343     case OP_LIST:
4344         localize = 0;
4345         for (kid = cLISTOPo->op_first; kid; kid = OpSIBLING(kid))
4346             /* elements might be in void context because the list is
4347                in scalar context or because they are attribute sub calls */
4348             if ( (kid->op_flags & OPf_WANT) != OPf_WANT_VOID )
4349                 op_lvalue(kid, type);
4350         break;
4351
4352     case OP_COREARGS:
4353         return o;
4354
4355     case OP_AND:
4356     case OP_OR:
4357         if (type == OP_LEAVESUBLV
4358          || !S_vivifies(cLOGOPo->op_first->op_type))
4359             op_lvalue(cLOGOPo->op_first, type);
4360         if (type == OP_LEAVESUBLV
4361          || !S_vivifies(OpSIBLING(cLOGOPo->op_first)->op_type))
4362             op_lvalue(OpSIBLING(cLOGOPo->op_first), type);
4363         goto nomod;
4364
4365     case OP_SREFGEN:
4366         if (type == OP_NULL) { /* local */
4367           local_refgen:
4368             if (!FEATURE_MYREF_IS_ENABLED)
4369                 Perl_croak(aTHX_ "The experimental declared_refs "
4370                                  "feature is not enabled");
4371             Perl_ck_warner_d(aTHX_
4372                      packWARN(WARN_EXPERIMENTAL__DECLARED_REFS),
4373                     "Declaring references is experimental");
4374             op_lvalue(cUNOPo->op_first, OP_NULL);
4375             return o;
4376         }
4377         if (type != OP_AASSIGN && type != OP_SASSIGN
4378          && type != OP_ENTERLOOP)
4379             goto nomod;
4380         /* Don’t bother applying lvalue context to the ex-list.  */
4381         kid = cUNOPx(cUNOPo->op_first)->op_first;
4382         assert (!OpHAS_SIBLING(kid));
4383         goto kid_2lvref;
4384     case OP_REFGEN:
4385         if (type == OP_NULL) /* local */
4386             goto local_refgen;
4387         if (type != OP_AASSIGN) goto nomod;
4388         kid = cUNOPo->op_first;
4389       kid_2lvref:
4390         {
4391             const U8 ec = PL_parser ? PL_parser->error_count : 0;
4392             S_lvref(aTHX_ kid, type);
4393             if (!PL_parser || PL_parser->error_count == ec) {
4394                 if (!FEATURE_REFALIASING_IS_ENABLED)
4395                     Perl_croak(aTHX_
4396                        "Experimental aliasing via reference not enabled");
4397                 Perl_ck_warner_d(aTHX_
4398                                  packWARN(WARN_EXPERIMENTAL__REFALIASING),
4399                                 "Aliasing via reference is experimental");
4400             }
4401         }
4402         if (o->op_type == OP_REFGEN)
4403             op_null(cUNOPx(cUNOPo->op_first)->op_first); /* pushmark */
4404         op_null(o);
4405         return o;
4406
4407     case OP_SPLIT:
4408         if ((o->op_private & OPpSPLIT_ASSIGN)) {
4409             /* This is actually @array = split.  */
4410             PL_modcount = RETURN_UNLIMITED_NUMBER;
4411             break;
4412         }
4413         goto nomod;
4414
4415     case OP_SCALAR:
4416         op_lvalue(cUNOPo->op_first, OP_ENTERSUB);
4417         goto nomod;
4418     }
4419
4420     /* [20011101.069 (#7861)] File test operators interpret OPf_REF to mean that
4421        their argument is a filehandle; thus \stat(".") should not set
4422        it. AMS 20011102 */
4423     if (type == OP_REFGEN && OP_IS_STAT(o->op_type))
4424         return o;
4425
4426     if (type != OP_LEAVESUBLV)
4427         o->op_flags |= OPf_MOD;
4428
4429     if (type == OP_AASSIGN || type == OP_SASSIGN)
4430         o->op_flags |= OPf_SPECIAL
4431                       |(o->op_type == OP_ENTERSUB ? 0 : OPf_REF);
4432     else if (!type) { /* local() */
4433         switch (localize) {
4434         case 1:
4435             o->op_private |= OPpLVAL_INTRO;
4436             o->op_flags &= ~OPf_SPECIAL;
4437             PL_hints |= HINT_BLOCK_SCOPE;
4438             break;
4439         case 0:
4440             break;
4441         case -1:
4442             Perl_ck_warner(aTHX_ packWARN(WARN_SYNTAX),
4443                            "Useless localization of %s", OP_DESC(o));
4444         }
4445     }
4446     else if (type != OP_GREPSTART && type != OP_ENTERSUB
4447              && type != OP_LEAVESUBLV && o->op_type != OP_ENTERSUB)
4448         o->op_flags |= OPf_REF;
4449     return o;
4450 }
4451
4452 STATIC bool
4453 S_scalar_mod_type(const OP *o, I32 type)
4454 {
4455     switch (type) {
4456     case OP_POS:
4457     case OP_SASSIGN:
4458         if (o && o->op_type == OP_RV2GV)
4459             return FALSE;
4460         /* FALLTHROUGH */
4461     case OP_PREINC:
4462     case OP_PREDEC:
4463     case OP_POSTINC:
4464     case OP_POSTDEC:
4465     case OP_I_PREINC:
4466     case OP_I_PREDEC:
4467     case OP_I_POSTINC:
4468     case OP_I_POSTDEC:
4469     case OP_POW:
4470     case OP_MULTIPLY:
4471     case OP_DIVIDE:
4472     case OP_MODULO:
4473     case OP_REPEAT:
4474     case OP_ADD:
4475     case OP_SUBTRACT:
4476     case OP_I_MULTIPLY:
4477     case OP_I_DIVIDE:
4478     case OP_I_MODULO:
4479     case OP_I_ADD:
4480     case OP_I_SUBTRACT:
4481     case OP_LEFT_SHIFT:
4482     case OP_RIGHT_SHIFT:
4483     case OP_BIT_AND:
4484     case OP_BIT_XOR:
4485     case OP_BIT_OR:
4486     case OP_NBIT_AND:
4487     case OP_NBIT_XOR:
4488     case OP_NBIT_OR:
4489     case OP_SBIT_AND:
4490     case OP_SBIT_XOR:
4491     case OP_SBIT_OR:
4492     case OP_CONCAT:
4493     case OP_SUBST:
4494     case OP_TRANS:
4495     case OP_TRANSR:
4496     case OP_READ:
4497     case OP_SYSREAD:
4498     case OP_RECV:
4499     case OP_ANDASSIGN:
4500     case OP_ORASSIGN:
4501     case OP_DORASSIGN:
4502     case OP_VEC:
4503     case OP_SUBSTR:
4504         return TRUE;
4505     default:
4506         return FALSE;
4507     }
4508 }
4509
4510 STATIC bool
4511 S_is_handle_constructor(const OP *o, I32 numargs)
4512 {
4513     PERL_ARGS_ASSERT_IS_HANDLE_CONSTRUCTOR;
4514
4515     switch (o->op_type) {
4516     case OP_PIPE_OP:
4517     case OP_SOCKPAIR:
4518         if (numargs == 2)
4519             return TRUE;
4520         /* FALLTHROUGH */
4521     case OP_SYSOPEN:
4522     case OP_OPEN:
4523     case OP_SELECT:             /* XXX c.f. SelectSaver.pm */
4524     case OP_SOCKET:
4525     case OP_OPEN_DIR:
4526     case OP_ACCEPT:
4527         if (numargs == 1)
4528             return TRUE;
4529         /* FALLTHROUGH */
4530     default:
4531         return FALSE;
4532     }
4533 }
4534
4535 static OP *
4536 S_refkids(pTHX_ OP *o, I32 type)
4537 {
4538     if (o && o->op_flags & OPf_KIDS) {
4539         OP *kid;
4540         for (kid = cLISTOPo->op_first; kid; kid = OpSIBLING(kid))
4541             ref(kid, type);
4542     }
4543     return o;
4544 }
4545
4546 OP *
4547 Perl_doref(pTHX_ OP *o, I32 type, bool set_op_ref)
4548 {
4549     dVAR;
4550     OP *kid;
4551
4552     PERL_ARGS_ASSERT_DOREF;
4553
4554     if (PL_parser && PL_parser->error_count)
4555         return o;
4556
4557     switch (o->op_type) {
4558     case OP_ENTERSUB:
4559         if ((type == OP_EXISTS || type == OP_DEFINED) &&
4560             !(o->op_flags & OPf_STACKED)) {
4561             OpTYPE_set(o, OP_RV2CV);             /* entersub => rv2cv */
4562             assert(cUNOPo->op_first->op_type == OP_NULL);
4563             op_null(((LISTOP*)cUNOPo->op_first)->op_first);     /* disable pushmark */
4564             o->op_flags |= OPf_SPECIAL;
4565         }
4566         else if (type == OP_RV2SV || type == OP_RV2AV || type == OP_RV2HV){
4567             o->op_private |= (type == OP_RV2AV ? OPpDEREF_AV
4568                               : type == OP_RV2HV ? OPpDEREF_HV
4569                               : OPpDEREF_SV);
4570             o->op_flags |= OPf_MOD;
4571         }
4572
4573         break;
4574
4575     case OP_COND_EXPR:
4576         for (kid = OpSIBLING(cUNOPo->op_first); kid; kid = OpSIBLING(kid))
4577             doref(kid, type, set_op_ref);
4578         break;
4579     case OP_RV2SV:
4580         if (type == OP_DEFINED)
4581             o->op_flags |= OPf_SPECIAL;         /* don't create GV */
4582         doref(cUNOPo->op_first, o->op_type, set_op_ref);
4583         /* FALLTHROUGH */
4584     case OP_PADSV:
4585         if (type == OP_RV2SV || type == OP_RV2AV || type == OP_RV2HV) {
4586             o->op_private |= (type == OP_RV2AV ? OPpDEREF_AV
4587                               : type == OP_RV2HV ? OPpDEREF_HV
4588                               : OPpDEREF_SV);
4589             o->op_flags |= OPf_MOD;
4590         }
4591         break;
4592
4593     case OP_RV2AV:
4594     case OP_RV2HV:
4595         if (set_op_ref)
4596             o->op_flags |= OPf_REF;
4597         /* FALLTHROUGH */
4598     case OP_RV2GV:
4599         if (type == OP_DEFINED)
4600             o->op_flags |= OPf_SPECIAL;         /* don't create GV */
4601         doref(cUNOPo->op_first, o->op_type, set_op_ref);
4602         break;
4603
4604     case OP_PADAV:
4605     case OP_PADHV:
4606         if (set_op_ref)
4607             o->op_flags |= OPf_REF;
4608         break;
4609
4610     case OP_SCALAR:
4611     case OP_NULL:
4612         if (!(o->op_flags & OPf_KIDS) || type == OP_DEFINED)
4613             break;
4614         doref(cBINOPo->op_first, type, set_op_ref);
4615         break;
4616     case OP_AELEM:
4617     case OP_HELEM:
4618         doref(cBINOPo->op_first, o->op_type, set_op_ref);
4619         if (type == OP_RV2SV || type == OP_RV2AV || type == OP_RV2HV) {
4620             o->op_private |= (type == OP_RV2AV ? OPpDEREF_AV
4621                               : type == OP_RV2HV ? OPpDEREF_HV
4622                               : OPpDEREF_SV);
4623             o->op_flags |= OPf_MOD;
4624         }
4625         break;
4626
4627     case OP_SCOPE:
4628     case OP_LEAVE:
4629         set_op_ref = FALSE;
4630         /* FALLTHROUGH */
4631     case OP_ENTER:
4632     case OP_LIST:
4633         if (!(o->op_flags & OPf_KIDS))
4634             break;
4635         doref(cLISTOPo->op_last, type, set_op_ref);
4636         break;
4637     default:
4638         break;
4639     }
4640     return scalar(o);
4641
4642 }
4643
4644 STATIC OP *
4645 S_dup_attrlist(pTHX_ OP *o)
4646 {
4647     OP *rop;
4648
4649     PERL_ARGS_ASSERT_DUP_ATTRLIST;
4650
4651     /* An attrlist is either a simple OP_CONST or an OP_LIST with kids,
4652      * where the first kid is OP_PUSHMARK and the remaining ones
4653      * are OP_CONST.  We need to push the OP_CONST values.
4654      */
4655     if (o->op_type == OP_CONST)
4656         rop = newSVOP(OP_CONST, o->op_flags, SvREFCNT_inc_NN(cSVOPo->op_sv));
4657     else {
4658         assert((o->op_type == OP_LIST) && (o->op_flags & OPf_KIDS));
4659         rop = NULL;
4660         for (o = cLISTOPo->op_first; o; o = OpSIBLING(o)) {
4661             if (o->op_type == OP_CONST)
4662                 rop = op_append_elem(OP_LIST, rop,
4663                                   newSVOP(OP_CONST, o->op_flags,
4664                                           SvREFCNT_inc_NN(cSVOPo->op_sv)));
4665         }
4666     }
4667     return rop;
4668 }
4669
4670 STATIC void
4671 S_apply_attrs(pTHX_ HV *stash, SV *target, OP *attrs)
4672 {
4673     PERL_ARGS_ASSERT_APPLY_ATTRS;
4674     {
4675         SV * const stashsv = newSVhek(HvNAME_HEK(stash));
4676
4677         /* fake up C<use attributes $pkg,$rv,@attrs> */
4678
4679 #define ATTRSMODULE "attributes"
4680 #define ATTRSMODULE_PM "attributes.pm"
4681
4682         Perl_load_module(
4683           aTHX_ PERL_LOADMOD_IMPORT_OPS,
4684           newSVpvs(ATTRSMODULE),
4685           NULL,
4686           op_prepend_elem(OP_LIST,
4687                           newSVOP(OP_CONST, 0, stashsv),
4688                           op_prepend_elem(OP_LIST,
4689                                           newSVOP(OP_CONST, 0,
4690                                                   newRV(target)),
4691                                           dup_attrlist(attrs))));
4692     }
4693 }
4694
4695 STATIC void
4696 S_apply_attrs_my(pTHX_ HV *stash, OP *target, OP *attrs, OP **imopsp)
4697 {
4698     OP *pack, *imop, *arg;
4699     SV *meth, *stashsv, **svp;
4700
4701     PERL_ARGS_ASSERT_APPLY_ATTRS_MY;
4702
4703     if (!attrs)
4704         return;
4705
4706     assert(target->op_type == OP_PADSV ||
4707            target->op_type == OP_PADHV ||
4708            target->op_type == OP_PADAV);
4709
4710     /* Ensure that attributes.pm is loaded. */
4711     /* Don't force the C<use> if we don't need it. */
4712     svp = hv_fetchs(GvHVn(PL_incgv), ATTRSMODULE_PM, FALSE);
4713     if (svp && *svp != &PL_sv_undef)
4714         NOOP;   /* already in %INC */
4715     else
4716         Perl_load_module(aTHX_ PERL_LOADMOD_NOIMPORT,
4717                                newSVpvs(ATTRSMODULE), NULL);
4718
4719     /* Need package name for method call. */
4720     pack = newSVOP(OP_CONST, 0, newSVpvs(ATTRSMODULE));
4721
4722     /* Build up the real arg-list. */
4723     stashsv = newSVhek(HvNAME_HEK(stash));
4724
4725     arg = newOP(OP_PADSV, 0);
4726     arg->op_targ = target->op_targ;
4727     arg = op_prepend_elem(OP_LIST,
4728                        newSVOP(OP_CONST, 0, stashsv),
4729                        op_prepend_elem(OP_LIST,
4730                                     newUNOP(OP_REFGEN, 0,
4731                                             arg),
4732                                     dup_attrlist(attrs)));
4733
4734     /* Fake up a method call to import */
4735     meth = newSVpvs_share("import");
4736     imop = op_convert_list(OP_ENTERSUB, OPf_STACKED|OPf_SPECIAL|OPf_WANT_VOID,
4737                    op_append_elem(OP_LIST,
4738                                op_prepend_elem(OP_LIST, pack, arg),
4739                                newMETHOP_named(OP_METHOD_NAMED, 0, meth)));
4740
4741     /* Combine the ops. */
4742     *imopsp = op_append_elem(OP_LIST, *imopsp, imop);
4743 }
4744