xref: /openbsd-src/gnu/usr.bin/perl/op.c (revision d59bb9942320b767f2a19aaa7690c8c6e30b724c)
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  * A Perl program is compiled into a tree of OPs. Each op contains
26  * structural pointers (eg to its siblings and the next op in the
27  * execution sequence), a pointer to the function that would execute the
28  * op, plus any data specific to that op. For example, an OP_CONST op
29  * points to the pp_const() function and to an SV containing the constant
30  * value. When pp_const() is executed, its job is to push that SV onto the
31  * stack.
32  *
33  * OPs are mainly created by the newFOO() functions, which are mainly
34  * called from the parser (in perly.y) as the code is parsed. For example
35  * the Perl code $a + $b * $c would cause the equivalent of the following
36  * to be called (oversimplifying a bit):
37  *
38  *  newBINOP(OP_ADD, flags,
39  *	newSVREF($a),
40  *	newBINOP(OP_MULTIPLY, flags, newSVREF($b), newSVREF($c))
41  *  )
42  *
43  * Note that during the build of miniperl, a temporary copy of this file
44  * is made, called opmini.c.
45  */
46 
47 /*
48 Perl's compiler is essentially a 3-pass compiler with interleaved phases:
49 
50     A bottom-up pass
51     A top-down pass
52     An execution-order pass
53 
54 The bottom-up pass is represented by all the "newOP" routines and
55 the ck_ routines.  The bottom-upness is actually driven by yacc.
56 So at the point that a ck_ routine fires, we have no idea what the
57 context is, either upward in the syntax tree, or either forward or
58 backward in the execution order.  (The bottom-up parser builds that
59 part of the execution order it knows about, but if you follow the "next"
60 links around, you'll find it's actually a closed loop through the
61 top level node.)
62 
63 Whenever the bottom-up parser gets to a node that supplies context to
64 its components, it invokes that portion of the top-down pass that applies
65 to that part of the subtree (and marks the top node as processed, so
66 if a node further up supplies context, it doesn't have to take the
67 plunge again).  As a particular subcase of this, as the new node is
68 built, it takes all the closed execution loops of its subcomponents
69 and links them into a new closed loop for the higher level node.  But
70 it's still not the real execution order.
71 
72 The actual execution order is not known till we get a grammar reduction
73 to a top-level unit like a subroutine or file that will be called by
74 "name" rather than via a "next" pointer.  At that point, we can call
75 into peep() to do that code's portion of the 3rd pass.  It has to be
76 recursive, but it's recursive on basic blocks, not on tree nodes.
77 */
78 
79 /* To implement user lexical pragmas, there needs to be a way at run time to
80    get the compile time state of %^H for that block.  Storing %^H in every
81    block (or even COP) would be very expensive, so a different approach is
82    taken.  The (running) state of %^H is serialised into a tree of HE-like
83    structs.  Stores into %^H are chained onto the current leaf as a struct
84    refcounted_he * with the key and the value.  Deletes from %^H are saved
85    with a value of PL_sv_placeholder.  The state of %^H at any point can be
86    turned back into a regular HV by walking back up the tree from that point's
87    leaf, ignoring any key you've already seen (placeholder or not), storing
88    the rest into the HV structure, then removing the placeholders. Hence
89    memory is only used to store the %^H deltas from the enclosing COP, rather
90    than the entire %^H on each COP.
91 
92    To cause actions on %^H to write out the serialisation records, it has
93    magic type 'H'. This magic (itself) does nothing, but its presence causes
94    the values to gain magic type 'h', which has entries for set and clear.
95    C<Perl_magic_sethint> updates C<PL_compiling.cop_hints_hash> with a store
96    record, with deletes written by C<Perl_magic_clearhint>. C<SAVEHINTS>
97    saves the current C<PL_compiling.cop_hints_hash> on the save stack, so that
98    it will be correctly restored when any inner compiling scope is exited.
99 */
100 
101 #include "EXTERN.h"
102 #define PERL_IN_OP_C
103 #include "perl.h"
104 #include "keywords.h"
105 #include "feature.h"
106 #include "regcomp.h"
107 
108 #define CALL_PEEP(o) PL_peepp(aTHX_ o)
109 #define CALL_RPEEP(o) PL_rpeepp(aTHX_ o)
110 #define CALL_OPFREEHOOK(o) if (PL_opfreehook) PL_opfreehook(aTHX_ o)
111 
112 static const char array_passed_to_stat[] = "Array passed to stat will be coerced to a scalar";
113 
114 /* Used to avoid recursion through the op tree in scalarvoid() and
115    op_free()
116 */
117 
118 #define DEFERRED_OP_STEP 100
119 #define DEFER_OP(o) \
120   STMT_START { \
121     if (UNLIKELY(defer_ix == (defer_stack_alloc-1))) {    \
122         defer_stack_alloc += DEFERRED_OP_STEP; \
123         assert(defer_stack_alloc > 0); \
124         Renew(defer_stack, defer_stack_alloc, OP *); \
125     } \
126     defer_stack[++defer_ix] = o; \
127   } STMT_END
128 
129 #define POP_DEFERRED_OP() (defer_ix >= 0 ? defer_stack[defer_ix--] : (OP *)NULL)
130 
131 /* remove any leading "empty" ops from the op_next chain whose first
132  * node's address is stored in op_p. Store the updated address of the
133  * first node in op_p.
134  */
135 
136 STATIC void
137 S_prune_chain_head(OP** op_p)
138 {
139     while (*op_p
140         && (   (*op_p)->op_type == OP_NULL
141             || (*op_p)->op_type == OP_SCOPE
142             || (*op_p)->op_type == OP_SCALAR
143             || (*op_p)->op_type == OP_LINESEQ)
144     )
145         *op_p = (*op_p)->op_next;
146 }
147 
148 
149 /* See the explanatory comments above struct opslab in op.h. */
150 
151 #ifdef PERL_DEBUG_READONLY_OPS
152 #  define PERL_SLAB_SIZE 128
153 #  define PERL_MAX_SLAB_SIZE 4096
154 #  include <sys/mman.h>
155 #endif
156 
157 #ifndef PERL_SLAB_SIZE
158 #  define PERL_SLAB_SIZE 64
159 #endif
160 #ifndef PERL_MAX_SLAB_SIZE
161 #  define PERL_MAX_SLAB_SIZE 2048
162 #endif
163 
164 /* rounds up to nearest pointer */
165 #define SIZE_TO_PSIZE(x)	(((x) + sizeof(I32 *) - 1)/sizeof(I32 *))
166 #define DIFF(o,p)		((size_t)((I32 **)(p) - (I32**)(o)))
167 
168 static OPSLAB *
169 S_new_slab(pTHX_ size_t sz)
170 {
171 #ifdef PERL_DEBUG_READONLY_OPS
172     OPSLAB *slab = (OPSLAB *) mmap(0, sz * sizeof(I32 *),
173 				   PROT_READ|PROT_WRITE,
174 				   MAP_ANON|MAP_PRIVATE, -1, 0);
175     DEBUG_m(PerlIO_printf(Perl_debug_log, "mapped %lu at %p\n",
176 			  (unsigned long) sz, slab));
177     if (slab == MAP_FAILED) {
178 	perror("mmap failed");
179 	abort();
180     }
181     slab->opslab_size = (U16)sz;
182 #else
183     OPSLAB *slab = (OPSLAB *)PerlMemShared_calloc(sz, sizeof(I32 *));
184 #endif
185 #ifndef WIN32
186     /* The context is unused in non-Windows */
187     PERL_UNUSED_CONTEXT;
188 #endif
189     slab->opslab_first = (OPSLOT *)((I32 **)slab + sz - 1);
190     return slab;
191 }
192 
193 /* requires double parens and aTHX_ */
194 #define DEBUG_S_warn(args)					       \
195     DEBUG_S( 								\
196 	PerlIO_printf(Perl_debug_log, "%s", SvPVx_nolen(Perl_mess args)) \
197     )
198 
199 void *
200 Perl_Slab_Alloc(pTHX_ size_t sz)
201 {
202     OPSLAB *slab;
203     OPSLAB *slab2;
204     OPSLOT *slot;
205     OP *o;
206     size_t opsz, space;
207 
208     /* We only allocate ops from the slab during subroutine compilation.
209        We find the slab via PL_compcv, hence that must be non-NULL. It could
210        also be pointing to a subroutine which is now fully set up (CvROOT()
211        pointing to the top of the optree for that sub), or a subroutine
212        which isn't using the slab allocator. If our sanity checks aren't met,
213        don't use a slab, but allocate the OP directly from the heap.  */
214     if (!PL_compcv || CvROOT(PL_compcv)
215      || (CvSTART(PL_compcv) && !CvSLABBED(PL_compcv)))
216     {
217 	o = (OP*)PerlMemShared_calloc(1, sz);
218         goto gotit;
219     }
220 
221     /* While the subroutine is under construction, the slabs are accessed via
222        CvSTART(), to avoid needing to expand PVCV by one pointer for something
223        unneeded at runtime. Once a subroutine is constructed, the slabs are
224        accessed via CvROOT(). So if CvSTART() is NULL, no slab has been
225        allocated yet.  See the commit message for 8be227ab5eaa23f2 for more
226        details.  */
227     if (!CvSTART(PL_compcv)) {
228 	CvSTART(PL_compcv) =
229 	    (OP *)(slab = S_new_slab(aTHX_ PERL_SLAB_SIZE));
230 	CvSLABBED_on(PL_compcv);
231 	slab->opslab_refcnt = 2; /* one for the CV; one for the new OP */
232     }
233     else ++(slab = (OPSLAB *)CvSTART(PL_compcv))->opslab_refcnt;
234 
235     opsz = SIZE_TO_PSIZE(sz);
236     sz = opsz + OPSLOT_HEADER_P;
237 
238     /* The slabs maintain a free list of OPs. In particular, constant folding
239        will free up OPs, so it makes sense to re-use them where possible. A
240        freed up slot is used in preference to a new allocation.  */
241     if (slab->opslab_freed) {
242 	OP **too = &slab->opslab_freed;
243 	o = *too;
244 	DEBUG_S_warn((aTHX_ "found free op at %p, slab %p", (void*)o, (void*)slab));
245 	while (o && DIFF(OpSLOT(o), OpSLOT(o)->opslot_next) < sz) {
246 	    DEBUG_S_warn((aTHX_ "Alas! too small"));
247 	    o = *(too = &o->op_next);
248 	    if (o) { DEBUG_S_warn((aTHX_ "found another free op at %p", (void*)o)); }
249 	}
250 	if (o) {
251 	    *too = o->op_next;
252 	    Zero(o, opsz, I32 *);
253 	    o->op_slabbed = 1;
254 	    goto gotit;
255 	}
256     }
257 
258 #define INIT_OPSLOT \
259 	    slot->opslot_slab = slab;			\
260 	    slot->opslot_next = slab2->opslab_first;	\
261 	    slab2->opslab_first = slot;			\
262 	    o = &slot->opslot_op;			\
263 	    o->op_slabbed = 1
264 
265     /* The partially-filled slab is next in the chain. */
266     slab2 = slab->opslab_next ? slab->opslab_next : slab;
267     if ((space = DIFF(&slab2->opslab_slots, slab2->opslab_first)) < sz) {
268 	/* Remaining space is too small. */
269 
270 	/* If we can fit a BASEOP, add it to the free chain, so as not
271 	   to waste it. */
272 	if (space >= SIZE_TO_PSIZE(sizeof(OP)) + OPSLOT_HEADER_P) {
273 	    slot = &slab2->opslab_slots;
274 	    INIT_OPSLOT;
275 	    o->op_type = OP_FREED;
276 	    o->op_next = slab->opslab_freed;
277 	    slab->opslab_freed = o;
278 	}
279 
280 	/* Create a new slab.  Make this one twice as big. */
281 	slot = slab2->opslab_first;
282 	while (slot->opslot_next) slot = slot->opslot_next;
283 	slab2 = S_new_slab(aTHX_
284 			    (DIFF(slab2, slot)+1)*2 > PERL_MAX_SLAB_SIZE
285 					? PERL_MAX_SLAB_SIZE
286 					: (DIFF(slab2, slot)+1)*2);
287 	slab2->opslab_next = slab->opslab_next;
288 	slab->opslab_next = slab2;
289     }
290     assert(DIFF(&slab2->opslab_slots, slab2->opslab_first) >= sz);
291 
292     /* Create a new op slot */
293     slot = (OPSLOT *)((I32 **)slab2->opslab_first - sz);
294     assert(slot >= &slab2->opslab_slots);
295     if (DIFF(&slab2->opslab_slots, slot)
296 	 < SIZE_TO_PSIZE(sizeof(OP)) + OPSLOT_HEADER_P)
297 	slot = &slab2->opslab_slots;
298     INIT_OPSLOT;
299     DEBUG_S_warn((aTHX_ "allocating op at %p, slab %p", (void*)o, (void*)slab));
300 
301   gotit:
302 #ifdef PERL_OP_PARENT
303     /* moresib == 0, op_sibling == 0 implies a solitary unattached op */
304     assert(!o->op_moresib);
305     assert(!o->op_sibparent);
306 #endif
307 
308     return (void *)o;
309 }
310 
311 #undef INIT_OPSLOT
312 
313 #ifdef PERL_DEBUG_READONLY_OPS
314 void
315 Perl_Slab_to_ro(pTHX_ OPSLAB *slab)
316 {
317     PERL_ARGS_ASSERT_SLAB_TO_RO;
318 
319     if (slab->opslab_readonly) return;
320     slab->opslab_readonly = 1;
321     for (; slab; slab = slab->opslab_next) {
322 	/*DEBUG_U(PerlIO_printf(Perl_debug_log,"mprotect ->ro %lu at %p\n",
323 			      (unsigned long) slab->opslab_size, slab));*/
324 	if (mprotect(slab, slab->opslab_size * sizeof(I32 *), PROT_READ))
325 	    Perl_warn(aTHX_ "mprotect for %p %lu failed with %d", slab,
326 			     (unsigned long)slab->opslab_size, errno);
327     }
328 }
329 
330 void
331 Perl_Slab_to_rw(pTHX_ OPSLAB *const slab)
332 {
333     OPSLAB *slab2;
334 
335     PERL_ARGS_ASSERT_SLAB_TO_RW;
336 
337     if (!slab->opslab_readonly) return;
338     slab2 = slab;
339     for (; slab2; slab2 = slab2->opslab_next) {
340 	/*DEBUG_U(PerlIO_printf(Perl_debug_log,"mprotect ->rw %lu at %p\n",
341 			      (unsigned long) size, slab2));*/
342 	if (mprotect((void *)slab2, slab2->opslab_size * sizeof(I32 *),
343 		     PROT_READ|PROT_WRITE)) {
344 	    Perl_warn(aTHX_ "mprotect RW for %p %lu failed with %d", slab,
345 			     (unsigned long)slab2->opslab_size, errno);
346 	}
347     }
348     slab->opslab_readonly = 0;
349 }
350 
351 #else
352 #  define Slab_to_rw(op)    NOOP
353 #endif
354 
355 /* This cannot possibly be right, but it was copied from the old slab
356    allocator, to which it was originally added, without explanation, in
357    commit 083fcd5. */
358 #ifdef NETWARE
359 #    define PerlMemShared PerlMem
360 #endif
361 
362 void
363 Perl_Slab_Free(pTHX_ void *op)
364 {
365     OP * const o = (OP *)op;
366     OPSLAB *slab;
367 
368     PERL_ARGS_ASSERT_SLAB_FREE;
369 
370     if (!o->op_slabbed) {
371         if (!o->op_static)
372 	    PerlMemShared_free(op);
373 	return;
374     }
375 
376     slab = OpSLAB(o);
377     /* If this op is already freed, our refcount will get screwy. */
378     assert(o->op_type != OP_FREED);
379     o->op_type = OP_FREED;
380     o->op_next = slab->opslab_freed;
381     slab->opslab_freed = o;
382     DEBUG_S_warn((aTHX_ "free op at %p, recorded in slab %p", (void*)o, (void*)slab));
383     OpslabREFCNT_dec_padok(slab);
384 }
385 
386 void
387 Perl_opslab_free_nopad(pTHX_ OPSLAB *slab)
388 {
389     const bool havepad = !!PL_comppad;
390     PERL_ARGS_ASSERT_OPSLAB_FREE_NOPAD;
391     if (havepad) {
392 	ENTER;
393 	PAD_SAVE_SETNULLPAD();
394     }
395     opslab_free(slab);
396     if (havepad) LEAVE;
397 }
398 
399 void
400 Perl_opslab_free(pTHX_ OPSLAB *slab)
401 {
402     OPSLAB *slab2;
403     PERL_ARGS_ASSERT_OPSLAB_FREE;
404     PERL_UNUSED_CONTEXT;
405     DEBUG_S_warn((aTHX_ "freeing slab %p", (void*)slab));
406     assert(slab->opslab_refcnt == 1);
407     do {
408 	slab2 = slab->opslab_next;
409 #ifdef DEBUGGING
410 	slab->opslab_refcnt = ~(size_t)0;
411 #endif
412 #ifdef PERL_DEBUG_READONLY_OPS
413 	DEBUG_m(PerlIO_printf(Perl_debug_log, "Deallocate slab at %p\n",
414 					       (void*)slab));
415 	if (munmap(slab, slab->opslab_size * sizeof(I32 *))) {
416 	    perror("munmap failed");
417 	    abort();
418 	}
419 #else
420 	PerlMemShared_free(slab);
421 #endif
422         slab = slab2;
423     } while (slab);
424 }
425 
426 void
427 Perl_opslab_force_free(pTHX_ OPSLAB *slab)
428 {
429     OPSLAB *slab2;
430     OPSLOT *slot;
431 #ifdef DEBUGGING
432     size_t savestack_count = 0;
433 #endif
434     PERL_ARGS_ASSERT_OPSLAB_FORCE_FREE;
435     slab2 = slab;
436     do {
437 	for (slot = slab2->opslab_first;
438 	     slot->opslot_next;
439 	     slot = slot->opslot_next) {
440 	    if (slot->opslot_op.op_type != OP_FREED
441 	     && !(slot->opslot_op.op_savefree
442 #ifdef DEBUGGING
443 		  && ++savestack_count
444 #endif
445 		 )
446 	    ) {
447 		assert(slot->opslot_op.op_slabbed);
448 		op_free(&slot->opslot_op);
449 		if (slab->opslab_refcnt == 1) goto free;
450 	    }
451 	}
452     } while ((slab2 = slab2->opslab_next));
453     /* > 1 because the CV still holds a reference count. */
454     if (slab->opslab_refcnt > 1) { /* still referenced by the savestack */
455 #ifdef DEBUGGING
456 	assert(savestack_count == slab->opslab_refcnt-1);
457 #endif
458 	/* Remove the CV’s reference count. */
459 	slab->opslab_refcnt--;
460 	return;
461     }
462    free:
463     opslab_free(slab);
464 }
465 
466 #ifdef PERL_DEBUG_READONLY_OPS
467 OP *
468 Perl_op_refcnt_inc(pTHX_ OP *o)
469 {
470     if(o) {
471         OPSLAB *const slab = o->op_slabbed ? OpSLAB(o) : NULL;
472         if (slab && slab->opslab_readonly) {
473             Slab_to_rw(slab);
474             ++o->op_targ;
475             Slab_to_ro(slab);
476         } else {
477             ++o->op_targ;
478         }
479     }
480     return o;
481 
482 }
483 
484 PADOFFSET
485 Perl_op_refcnt_dec(pTHX_ OP *o)
486 {
487     PADOFFSET result;
488     OPSLAB *const slab = o->op_slabbed ? OpSLAB(o) : NULL;
489 
490     PERL_ARGS_ASSERT_OP_REFCNT_DEC;
491 
492     if (slab && slab->opslab_readonly) {
493         Slab_to_rw(slab);
494         result = --o->op_targ;
495         Slab_to_ro(slab);
496     } else {
497         result = --o->op_targ;
498     }
499     return result;
500 }
501 #endif
502 /*
503  * In the following definition, the ", (OP*)0" is just to make the compiler
504  * think the expression is of the right type: croak actually does a Siglongjmp.
505  */
506 #define CHECKOP(type,o) \
507     ((PL_op_mask && PL_op_mask[type])				\
508      ? ( op_free((OP*)o),					\
509 	 Perl_croak(aTHX_ "'%s' trapped by operation mask", PL_op_desc[type]),	\
510 	 (OP*)0 )						\
511      : PL_check[type](aTHX_ (OP*)o))
512 
513 #define RETURN_UNLIMITED_NUMBER (PERL_INT_MAX / 2)
514 
515 #define OpTYPE_set(o,type) \
516     STMT_START {				\
517 	o->op_type = (OPCODE)type;		\
518 	o->op_ppaddr = PL_ppaddr[type];		\
519     } STMT_END
520 
521 STATIC OP *
522 S_no_fh_allowed(pTHX_ OP *o)
523 {
524     PERL_ARGS_ASSERT_NO_FH_ALLOWED;
525 
526     yyerror(Perl_form(aTHX_ "Missing comma after first argument to %s function",
527 		 OP_DESC(o)));
528     return o;
529 }
530 
531 STATIC OP *
532 S_too_few_arguments_pv(pTHX_ OP *o, const char* name, U32 flags)
533 {
534     PERL_ARGS_ASSERT_TOO_FEW_ARGUMENTS_PV;
535     yyerror_pv(Perl_form(aTHX_ "Not enough arguments for %s", name), flags);
536     return o;
537 }
538 
539 STATIC OP *
540 S_too_many_arguments_pv(pTHX_ OP *o, const char *name, U32 flags)
541 {
542     PERL_ARGS_ASSERT_TOO_MANY_ARGUMENTS_PV;
543 
544     yyerror_pv(Perl_form(aTHX_ "Too many arguments for %s", name), flags);
545     return o;
546 }
547 
548 STATIC void
549 S_bad_type_pv(pTHX_ I32 n, const char *t, const OP *o, const OP *kid)
550 {
551     PERL_ARGS_ASSERT_BAD_TYPE_PV;
552 
553     yyerror_pv(Perl_form(aTHX_ "Type of arg %d to %s must be %s (not %s)",
554 		 (int)n, PL_op_desc[(o)->op_type], t, OP_DESC(kid)), 0);
555 }
556 
557 /* remove flags var, its unused in all callers, move to to right end since gv
558   and kid are always the same */
559 STATIC void
560 S_bad_type_gv(pTHX_ I32 n, GV *gv, const OP *kid, const char *t)
561 {
562     SV * const namesv = cv_name((CV *)gv, NULL, 0);
563     PERL_ARGS_ASSERT_BAD_TYPE_GV;
564 
565     yyerror_pv(Perl_form(aTHX_ "Type of arg %d to %"SVf" must be %s (not %s)",
566 		 (int)n, SVfARG(namesv), t, OP_DESC(kid)), SvUTF8(namesv));
567 }
568 
569 STATIC void
570 S_no_bareword_allowed(pTHX_ OP *o)
571 {
572     PERL_ARGS_ASSERT_NO_BAREWORD_ALLOWED;
573 
574     qerror(Perl_mess(aTHX_
575 		     "Bareword \"%"SVf"\" not allowed while \"strict subs\" in use",
576 		     SVfARG(cSVOPo_sv)));
577     o->op_private &= ~OPpCONST_STRICT; /* prevent warning twice about the same OP */
578 }
579 
580 /* "register" allocation */
581 
582 PADOFFSET
583 Perl_allocmy(pTHX_ const char *const name, const STRLEN len, const U32 flags)
584 {
585     PADOFFSET off;
586     const bool is_our = (PL_parser->in_my == KEY_our);
587 
588     PERL_ARGS_ASSERT_ALLOCMY;
589 
590     if (flags & ~SVf_UTF8)
591 	Perl_croak(aTHX_ "panic: allocmy illegal flag bits 0x%" UVxf,
592 		   (UV)flags);
593 
594     /* complain about "my $<special_var>" etc etc */
595     if (len &&
596 	!(is_our ||
597 	  isALPHA(name[1]) ||
598 	  ((flags & SVf_UTF8) && isIDFIRST_utf8((U8 *)name+1)) ||
599 	  (name[1] == '_' && len > 2)))
600     {
601 	if (!(flags & SVf_UTF8 && UTF8_IS_START(name[1]))
602 	 && isASCII(name[1])
603 	 && (!isPRINT(name[1]) || strchr("\t\n\r\f", name[1]))) {
604 	    yyerror(Perl_form(aTHX_ "Can't use global %c^%c%.*s in \"%s\"",
605 			      name[0], toCTRL(name[1]), (int)(len - 2), name + 2,
606 			      PL_parser->in_my == KEY_state ? "state" : "my"));
607 	} else {
608 	    yyerror_pv(Perl_form(aTHX_ "Can't use global %.*s in \"%s\"", (int) len, name,
609 			      PL_parser->in_my == KEY_state ? "state" : "my"), flags & SVf_UTF8);
610 	}
611     }
612 
613     /* allocate a spare slot and store the name in that slot */
614 
615     off = pad_add_name_pvn(name, len,
616 		       (is_our ? padadd_OUR :
617 		        PL_parser->in_my == KEY_state ? padadd_STATE : 0),
618 		    PL_parser->in_my_stash,
619 		    (is_our
620 		        /* $_ is always in main::, even with our */
621 			? (PL_curstash && !memEQs(name,len,"$_")
622 			    ? PL_curstash
623 			    : PL_defstash)
624 			: NULL
625 		    )
626     );
627     /* anon sub prototypes contains state vars should always be cloned,
628      * otherwise the state var would be shared between anon subs */
629 
630     if (PL_parser->in_my == KEY_state && CvANON(PL_compcv))
631 	CvCLONE_on(PL_compcv);
632 
633     return off;
634 }
635 
636 /*
637 =head1 Optree Manipulation Functions
638 
639 =for apidoc alloccopstash
640 
641 Available only under threaded builds, this function allocates an entry in
642 C<PL_stashpad> for the stash passed to it.
643 
644 =cut
645 */
646 
647 #ifdef USE_ITHREADS
648 PADOFFSET
649 Perl_alloccopstash(pTHX_ HV *hv)
650 {
651     PADOFFSET off = 0, o = 1;
652     bool found_slot = FALSE;
653 
654     PERL_ARGS_ASSERT_ALLOCCOPSTASH;
655 
656     if (PL_stashpad[PL_stashpadix] == hv) return PL_stashpadix;
657 
658     for (; o < PL_stashpadmax; ++o) {
659 	if (PL_stashpad[o] == hv) return PL_stashpadix = o;
660 	if (!PL_stashpad[o] || SvTYPE(PL_stashpad[o]) != SVt_PVHV)
661 	    found_slot = TRUE, off = o;
662     }
663     if (!found_slot) {
664 	Renew(PL_stashpad, PL_stashpadmax + 10, HV *);
665 	Zero(PL_stashpad + PL_stashpadmax, 10, HV *);
666 	off = PL_stashpadmax;
667 	PL_stashpadmax += 10;
668     }
669 
670     PL_stashpad[PL_stashpadix = off] = hv;
671     return off;
672 }
673 #endif
674 
675 /* free the body of an op without examining its contents.
676  * Always use this rather than FreeOp directly */
677 
678 static void
679 S_op_destroy(pTHX_ OP *o)
680 {
681     FreeOp(o);
682 }
683 
684 /* Destructor */
685 
686 /*
687 =for apidoc Am|void|op_free|OP *o
688 
689 Free an op.  Only use this when an op is no longer linked to from any
690 optree.
691 
692 =cut
693 */
694 
695 void
696 Perl_op_free(pTHX_ OP *o)
697 {
698     dVAR;
699     OPCODE type;
700     SSize_t defer_ix = -1;
701     SSize_t defer_stack_alloc = 0;
702     OP **defer_stack = NULL;
703 
704     do {
705 
706         /* Though ops may be freed twice, freeing the op after its slab is a
707            big no-no. */
708         assert(!o || !o->op_slabbed || OpSLAB(o)->opslab_refcnt != ~(size_t)0);
709         /* During the forced freeing of ops after compilation failure, kidops
710            may be freed before their parents. */
711         if (!o || o->op_type == OP_FREED)
712             continue;
713 
714         type = o->op_type;
715 
716         /* an op should only ever acquire op_private flags that we know about.
717          * If this fails, you may need to fix something in regen/op_private.
718          * Don't bother testing if:
719          *   * the op_ppaddr doesn't match the op; someone may have
720          *     overridden the op and be doing strange things with it;
721          *   * we've errored, as op flags are often left in an
722          *     inconsistent state then. Note that an error when
723          *     compiling the main program leaves PL_parser NULL, so
724          *     we can't spot faults in the main code, only
725          *     evaled/required code */
726 #ifdef DEBUGGING
727         if (   o->op_ppaddr == PL_ppaddr[o->op_type]
728             && PL_parser
729             && !PL_parser->error_count)
730         {
731             assert(!(o->op_private & ~PL_op_private_valid[type]));
732         }
733 #endif
734 
735         if (o->op_private & OPpREFCOUNTED) {
736             switch (type) {
737             case OP_LEAVESUB:
738             case OP_LEAVESUBLV:
739             case OP_LEAVEEVAL:
740             case OP_LEAVE:
741             case OP_SCOPE:
742             case OP_LEAVEWRITE:
743                 {
744                 PADOFFSET refcnt;
745                 OP_REFCNT_LOCK;
746                 refcnt = OpREFCNT_dec(o);
747                 OP_REFCNT_UNLOCK;
748                 if (refcnt) {
749                     /* Need to find and remove any pattern match ops from the list
750                        we maintain for reset().  */
751                     find_and_forget_pmops(o);
752                     continue;
753                 }
754                 }
755                 break;
756             default:
757                 break;
758             }
759         }
760 
761         /* Call the op_free hook if it has been set. Do it now so that it's called
762          * at the right time for refcounted ops, but still before all of the kids
763          * are freed. */
764         CALL_OPFREEHOOK(o);
765 
766         if (o->op_flags & OPf_KIDS) {
767             OP *kid, *nextkid;
768             for (kid = cUNOPo->op_first; kid; kid = nextkid) {
769                 nextkid = OpSIBLING(kid); /* Get before next freeing kid */
770                 if (!kid || kid->op_type == OP_FREED)
771                     /* During the forced freeing of ops after
772                        compilation failure, kidops may be freed before
773                        their parents. */
774                     continue;
775                 if (!(kid->op_flags & OPf_KIDS))
776                     /* If it has no kids, just free it now */
777                     op_free(kid);
778                 else
779                     DEFER_OP(kid);
780             }
781         }
782         if (type == OP_NULL)
783             type = (OPCODE)o->op_targ;
784 
785         if (o->op_slabbed)
786             Slab_to_rw(OpSLAB(o));
787 
788         /* COP* is not cleared by op_clear() so that we may track line
789          * numbers etc even after null() */
790         if (type == OP_NEXTSTATE || type == OP_DBSTATE) {
791             cop_free((COP*)o);
792         }
793 
794         op_clear(o);
795         FreeOp(o);
796 #ifdef DEBUG_LEAKING_SCALARS
797         if (PL_op == o)
798             PL_op = NULL;
799 #endif
800     } while ( (o = POP_DEFERRED_OP()) );
801 
802     Safefree(defer_stack);
803 }
804 
805 /* S_op_clear_gv(): free a GV attached to an OP */
806 
807 STATIC
808 #ifdef USE_ITHREADS
809 void S_op_clear_gv(pTHX_ OP *o, PADOFFSET *ixp)
810 #else
811 void S_op_clear_gv(pTHX_ OP *o, SV**svp)
812 #endif
813 {
814 
815     GV *gv = (o->op_type == OP_GV || o->op_type == OP_GVSV
816             || o->op_type == OP_MULTIDEREF)
817 #ifdef USE_ITHREADS
818                 && PL_curpad
819                 ? ((GV*)PAD_SVl(*ixp)) : NULL;
820 #else
821                 ? (GV*)(*svp) : NULL;
822 #endif
823     /* It's possible during global destruction that the GV is freed
824        before the optree. Whilst the SvREFCNT_inc is happy to bump from
825        0 to 1 on a freed SV, the corresponding SvREFCNT_dec from 1 to 0
826        will trigger an assertion failure, because the entry to sv_clear
827        checks that the scalar is not already freed.  A check of for
828        !SvIS_FREED(gv) turns out to be invalid, because during global
829        destruction the reference count can be forced down to zero
830        (with SVf_BREAK set).  In which case raising to 1 and then
831        dropping to 0 triggers cleanup before it should happen.  I
832        *think* that this might actually be a general, systematic,
833        weakness of the whole idea of SVf_BREAK, in that code *is*
834        allowed to raise and lower references during global destruction,
835        so any *valid* code that happens to do this during global
836        destruction might well trigger premature cleanup.  */
837     bool still_valid = gv && SvREFCNT(gv);
838 
839     if (still_valid)
840         SvREFCNT_inc_simple_void(gv);
841 #ifdef USE_ITHREADS
842     if (*ixp > 0) {
843         pad_swipe(*ixp, TRUE);
844         *ixp = 0;
845     }
846 #else
847     SvREFCNT_dec(*svp);
848     *svp = NULL;
849 #endif
850     if (still_valid) {
851         int try_downgrade = SvREFCNT(gv) == 2;
852         SvREFCNT_dec_NN(gv);
853         if (try_downgrade)
854             gv_try_downgrade(gv);
855     }
856 }
857 
858 
859 void
860 Perl_op_clear(pTHX_ OP *o)
861 {
862 
863     dVAR;
864 
865     PERL_ARGS_ASSERT_OP_CLEAR;
866 
867     switch (o->op_type) {
868     case OP_NULL:	/* Was holding old type, if any. */
869         /* FALLTHROUGH */
870     case OP_ENTERTRY:
871     case OP_ENTEREVAL:	/* Was holding hints. */
872 	o->op_targ = 0;
873 	break;
874     default:
875 	if (!(o->op_flags & OPf_REF)
876 	    || (PL_check[o->op_type] != Perl_ck_ftst))
877 	    break;
878 	/* FALLTHROUGH */
879     case OP_GVSV:
880     case OP_GV:
881     case OP_AELEMFAST:
882 #ifdef USE_ITHREADS
883             S_op_clear_gv(aTHX_ o, &(cPADOPx(o)->op_padix));
884 #else
885             S_op_clear_gv(aTHX_ o, &(cSVOPx(o)->op_sv));
886 #endif
887 	break;
888     case OP_METHOD_REDIR:
889     case OP_METHOD_REDIR_SUPER:
890 #ifdef USE_ITHREADS
891 	if (cMETHOPx(o)->op_rclass_targ) {
892 	    pad_swipe(cMETHOPx(o)->op_rclass_targ, 1);
893 	    cMETHOPx(o)->op_rclass_targ = 0;
894 	}
895 #else
896 	SvREFCNT_dec(cMETHOPx(o)->op_rclass_sv);
897 	cMETHOPx(o)->op_rclass_sv = NULL;
898 #endif
899     case OP_METHOD_NAMED:
900     case OP_METHOD_SUPER:
901         SvREFCNT_dec(cMETHOPx(o)->op_u.op_meth_sv);
902         cMETHOPx(o)->op_u.op_meth_sv = NULL;
903 #ifdef USE_ITHREADS
904         if (o->op_targ) {
905             pad_swipe(o->op_targ, 1);
906             o->op_targ = 0;
907         }
908 #endif
909         break;
910     case OP_CONST:
911     case OP_HINTSEVAL:
912 	SvREFCNT_dec(cSVOPo->op_sv);
913 	cSVOPo->op_sv = NULL;
914 #ifdef USE_ITHREADS
915 	/** Bug #15654
916 	  Even if op_clear does a pad_free for the target of the op,
917 	  pad_free doesn't actually remove the sv that exists in the pad;
918 	  instead it lives on. This results in that it could be reused as
919 	  a target later on when the pad was reallocated.
920 	**/
921         if(o->op_targ) {
922           pad_swipe(o->op_targ,1);
923           o->op_targ = 0;
924         }
925 #endif
926 	break;
927     case OP_DUMP:
928     case OP_GOTO:
929     case OP_NEXT:
930     case OP_LAST:
931     case OP_REDO:
932 	if (o->op_flags & (OPf_SPECIAL|OPf_STACKED|OPf_KIDS))
933 	    break;
934 	/* FALLTHROUGH */
935     case OP_TRANS:
936     case OP_TRANSR:
937 	if (o->op_private & (OPpTRANS_FROM_UTF|OPpTRANS_TO_UTF)) {
938 	    assert(o->op_type == OP_TRANS || o->op_type == OP_TRANSR);
939 #ifdef USE_ITHREADS
940 	    if (cPADOPo->op_padix > 0) {
941 		pad_swipe(cPADOPo->op_padix, TRUE);
942 		cPADOPo->op_padix = 0;
943 	    }
944 #else
945 	    SvREFCNT_dec(cSVOPo->op_sv);
946 	    cSVOPo->op_sv = NULL;
947 #endif
948 	}
949 	else {
950 	    PerlMemShared_free(cPVOPo->op_pv);
951 	    cPVOPo->op_pv = NULL;
952 	}
953 	break;
954     case OP_SUBST:
955 	op_free(cPMOPo->op_pmreplrootu.op_pmreplroot);
956 	goto clear_pmop;
957     case OP_PUSHRE:
958 #ifdef USE_ITHREADS
959         if (cPMOPo->op_pmreplrootu.op_pmtargetoff) {
960 	    pad_swipe(cPMOPo->op_pmreplrootu.op_pmtargetoff, TRUE);
961 	}
962 #else
963 	SvREFCNT_dec(MUTABLE_SV(cPMOPo->op_pmreplrootu.op_pmtargetgv));
964 #endif
965 	/* FALLTHROUGH */
966     case OP_MATCH:
967     case OP_QR:
968     clear_pmop:
969 	if (!(cPMOPo->op_pmflags & PMf_CODELIST_PRIVATE))
970 	    op_free(cPMOPo->op_code_list);
971 	cPMOPo->op_code_list = NULL;
972 	forget_pmop(cPMOPo);
973 	cPMOPo->op_pmreplrootu.op_pmreplroot = NULL;
974         /* we use the same protection as the "SAFE" version of the PM_ macros
975          * here since sv_clean_all might release some PMOPs
976          * after PL_regex_padav has been cleared
977          * and the clearing of PL_regex_padav needs to
978          * happen before sv_clean_all
979          */
980 #ifdef USE_ITHREADS
981 	if(PL_regex_pad) {        /* We could be in destruction */
982 	    const IV offset = (cPMOPo)->op_pmoffset;
983 	    ReREFCNT_dec(PM_GETRE(cPMOPo));
984 	    PL_regex_pad[offset] = &PL_sv_undef;
985             sv_catpvn_nomg(PL_regex_pad[0], (const char *)&offset,
986 			   sizeof(offset));
987         }
988 #else
989 	ReREFCNT_dec(PM_GETRE(cPMOPo));
990 	PM_SETRE(cPMOPo, NULL);
991 #endif
992 
993 	break;
994 
995     case OP_MULTIDEREF:
996         {
997             UNOP_AUX_item *items = cUNOP_AUXo->op_aux;
998             UV actions = items->uv;
999             bool last = 0;
1000             bool is_hash = FALSE;
1001 
1002             while (!last) {
1003                 switch (actions & MDEREF_ACTION_MASK) {
1004 
1005                 case MDEREF_reload:
1006                     actions = (++items)->uv;
1007                     continue;
1008 
1009                 case MDEREF_HV_padhv_helem:
1010                     is_hash = TRUE;
1011                 case MDEREF_AV_padav_aelem:
1012                     pad_free((++items)->pad_offset);
1013                     goto do_elem;
1014 
1015                 case MDEREF_HV_gvhv_helem:
1016                     is_hash = TRUE;
1017                 case MDEREF_AV_gvav_aelem:
1018 #ifdef USE_ITHREADS
1019                     S_op_clear_gv(aTHX_ o, &((++items)->pad_offset));
1020 #else
1021                     S_op_clear_gv(aTHX_ o, &((++items)->sv));
1022 #endif
1023                     goto do_elem;
1024 
1025                 case MDEREF_HV_gvsv_vivify_rv2hv_helem:
1026                     is_hash = TRUE;
1027                 case MDEREF_AV_gvsv_vivify_rv2av_aelem:
1028 #ifdef USE_ITHREADS
1029                     S_op_clear_gv(aTHX_ o, &((++items)->pad_offset));
1030 #else
1031                     S_op_clear_gv(aTHX_ o, &((++items)->sv));
1032 #endif
1033                     goto do_vivify_rv2xv_elem;
1034 
1035                 case MDEREF_HV_padsv_vivify_rv2hv_helem:
1036                     is_hash = TRUE;
1037                 case MDEREF_AV_padsv_vivify_rv2av_aelem:
1038                     pad_free((++items)->pad_offset);
1039                     goto do_vivify_rv2xv_elem;
1040 
1041                 case MDEREF_HV_pop_rv2hv_helem:
1042                 case MDEREF_HV_vivify_rv2hv_helem:
1043                     is_hash = TRUE;
1044                 do_vivify_rv2xv_elem:
1045                 case MDEREF_AV_pop_rv2av_aelem:
1046                 case MDEREF_AV_vivify_rv2av_aelem:
1047                 do_elem:
1048                     switch (actions & MDEREF_INDEX_MASK) {
1049                     case MDEREF_INDEX_none:
1050                         last = 1;
1051                         break;
1052                     case MDEREF_INDEX_const:
1053                         if (is_hash) {
1054 #ifdef USE_ITHREADS
1055                             /* see RT #15654 */
1056                             pad_swipe((++items)->pad_offset, 1);
1057 #else
1058                             SvREFCNT_dec((++items)->sv);
1059 #endif
1060                         }
1061                         else
1062                             items++;
1063                         break;
1064                     case MDEREF_INDEX_padsv:
1065                         pad_free((++items)->pad_offset);
1066                         break;
1067                     case MDEREF_INDEX_gvsv:
1068 #ifdef USE_ITHREADS
1069                         S_op_clear_gv(aTHX_ o, &((++items)->pad_offset));
1070 #else
1071                         S_op_clear_gv(aTHX_ o, &((++items)->sv));
1072 #endif
1073                         break;
1074                     }
1075 
1076                     if (actions & MDEREF_FLAG_last)
1077                         last = 1;
1078                     is_hash = FALSE;
1079 
1080                     break;
1081 
1082                 default:
1083                     assert(0);
1084                     last = 1;
1085                     break;
1086 
1087                 } /* switch */
1088 
1089                 actions >>= MDEREF_SHIFT;
1090             } /* while */
1091 
1092             /* start of malloc is at op_aux[-1], where the length is
1093              * stored */
1094             PerlMemShared_free(cUNOP_AUXo->op_aux - 1);
1095         }
1096         break;
1097     }
1098 
1099     if (o->op_targ > 0) {
1100 	pad_free(o->op_targ);
1101 	o->op_targ = 0;
1102     }
1103 }
1104 
1105 STATIC void
1106 S_cop_free(pTHX_ COP* cop)
1107 {
1108     PERL_ARGS_ASSERT_COP_FREE;
1109 
1110     CopFILE_free(cop);
1111     if (! specialWARN(cop->cop_warnings))
1112 	PerlMemShared_free(cop->cop_warnings);
1113     cophh_free(CopHINTHASH_get(cop));
1114     if (PL_curcop == cop)
1115        PL_curcop = NULL;
1116 }
1117 
1118 STATIC void
1119 S_forget_pmop(pTHX_ PMOP *const o
1120 	      )
1121 {
1122     HV * const pmstash = PmopSTASH(o);
1123 
1124     PERL_ARGS_ASSERT_FORGET_PMOP;
1125 
1126     if (pmstash && !SvIS_FREED(pmstash) && SvMAGICAL(pmstash)) {
1127 	MAGIC * const mg = mg_find((const SV *)pmstash, PERL_MAGIC_symtab);
1128 	if (mg) {
1129 	    PMOP **const array = (PMOP**) mg->mg_ptr;
1130 	    U32 count = mg->mg_len / sizeof(PMOP**);
1131 	    U32 i = count;
1132 
1133 	    while (i--) {
1134 		if (array[i] == o) {
1135 		    /* Found it. Move the entry at the end to overwrite it.  */
1136 		    array[i] = array[--count];
1137 		    mg->mg_len = count * sizeof(PMOP**);
1138 		    /* Could realloc smaller at this point always, but probably
1139 		       not worth it. Probably worth free()ing if we're the
1140 		       last.  */
1141 		    if(!count) {
1142 			Safefree(mg->mg_ptr);
1143 			mg->mg_ptr = NULL;
1144 		    }
1145 		    break;
1146 		}
1147 	    }
1148 	}
1149     }
1150     if (PL_curpm == o)
1151 	PL_curpm = NULL;
1152 }
1153 
1154 STATIC void
1155 S_find_and_forget_pmops(pTHX_ OP *o)
1156 {
1157     PERL_ARGS_ASSERT_FIND_AND_FORGET_PMOPS;
1158 
1159     if (o->op_flags & OPf_KIDS) {
1160         OP *kid = cUNOPo->op_first;
1161 	while (kid) {
1162 	    switch (kid->op_type) {
1163 	    case OP_SUBST:
1164 	    case OP_PUSHRE:
1165 	    case OP_MATCH:
1166 	    case OP_QR:
1167 		forget_pmop((PMOP*)kid);
1168 	    }
1169 	    find_and_forget_pmops(kid);
1170 	    kid = OpSIBLING(kid);
1171 	}
1172     }
1173 }
1174 
1175 /*
1176 =for apidoc Am|void|op_null|OP *o
1177 
1178 Neutralizes an op when it is no longer needed, but is still linked to from
1179 other ops.
1180 
1181 =cut
1182 */
1183 
1184 void
1185 Perl_op_null(pTHX_ OP *o)
1186 {
1187     dVAR;
1188 
1189     PERL_ARGS_ASSERT_OP_NULL;
1190 
1191     if (o->op_type == OP_NULL)
1192 	return;
1193     op_clear(o);
1194     o->op_targ = o->op_type;
1195     OpTYPE_set(o, OP_NULL);
1196 }
1197 
1198 void
1199 Perl_op_refcnt_lock(pTHX)
1200   PERL_TSA_ACQUIRE(PL_op_mutex)
1201 {
1202 #ifdef USE_ITHREADS
1203     dVAR;
1204 #endif
1205     PERL_UNUSED_CONTEXT;
1206     OP_REFCNT_LOCK;
1207 }
1208 
1209 void
1210 Perl_op_refcnt_unlock(pTHX)
1211   PERL_TSA_RELEASE(PL_op_mutex)
1212 {
1213 #ifdef USE_ITHREADS
1214     dVAR;
1215 #endif
1216     PERL_UNUSED_CONTEXT;
1217     OP_REFCNT_UNLOCK;
1218 }
1219 
1220 
1221 /*
1222 =for apidoc op_sibling_splice
1223 
1224 A general function for editing the structure of an existing chain of
1225 op_sibling nodes.  By analogy with the perl-level C<splice()> function, allows
1226 you to delete zero or more sequential nodes, replacing them with zero or
1227 more different nodes.  Performs the necessary op_first/op_last
1228 housekeeping on the parent node and op_sibling manipulation on the
1229 children.  The last deleted node will be marked as as the last node by
1230 updating the op_sibling/op_sibparent or op_moresib field as appropriate.
1231 
1232 Note that op_next is not manipulated, and nodes are not freed; that is the
1233 responsibility of the caller.  It also won't create a new list op for an
1234 empty list etc; use higher-level functions like op_append_elem() for that.
1235 
1236 C<parent> is the parent node of the sibling chain. It may passed as C<NULL> if
1237 the splicing doesn't affect the first or last op in the chain.
1238 
1239 C<start> is the node preceding the first node to be spliced.  Node(s)
1240 following it will be deleted, and ops will be inserted after it.  If it is
1241 C<NULL>, the first node onwards is deleted, and nodes are inserted at the
1242 beginning.
1243 
1244 C<del_count> is the number of nodes to delete.  If zero, no nodes are deleted.
1245 If -1 or greater than or equal to the number of remaining kids, all
1246 remaining kids are deleted.
1247 
1248 C<insert> is the first of a chain of nodes to be inserted in place of the nodes.
1249 If C<NULL>, no nodes are inserted.
1250 
1251 The head of the chain of deleted ops is returned, or C<NULL> if no ops were
1252 deleted.
1253 
1254 For example:
1255 
1256     action                    before      after         returns
1257     ------                    -----       -----         -------
1258 
1259                               P           P
1260     splice(P, A, 2, X-Y-Z)    |           |             B-C
1261                               A-B-C-D     A-X-Y-Z-D
1262 
1263                               P           P
1264     splice(P, NULL, 1, X-Y)   |           |             A
1265                               A-B-C-D     X-Y-B-C-D
1266 
1267                               P           P
1268     splice(P, NULL, 3, NULL)  |           |             A-B-C
1269                               A-B-C-D     D
1270 
1271                               P           P
1272     splice(P, B, 0, X-Y)      |           |             NULL
1273                               A-B-C-D     A-B-X-Y-C-D
1274 
1275 
1276 For lower-level direct manipulation of C<op_sibparent> and C<op_moresib>,
1277 see C<L</OpMORESIB_set>>, C<L</OpLASTSIB_set>>, C<L</OpMAYBESIB_set>>.
1278 
1279 =cut
1280 */
1281 
1282 OP *
1283 Perl_op_sibling_splice(OP *parent, OP *start, int del_count, OP* insert)
1284 {
1285     OP *first;
1286     OP *rest;
1287     OP *last_del = NULL;
1288     OP *last_ins = NULL;
1289 
1290     if (start)
1291         first = OpSIBLING(start);
1292     else if (!parent)
1293         goto no_parent;
1294     else
1295         first = cLISTOPx(parent)->op_first;
1296 
1297     assert(del_count >= -1);
1298 
1299     if (del_count && first) {
1300         last_del = first;
1301         while (--del_count && OpHAS_SIBLING(last_del))
1302             last_del = OpSIBLING(last_del);
1303         rest = OpSIBLING(last_del);
1304         OpLASTSIB_set(last_del, NULL);
1305     }
1306     else
1307         rest = first;
1308 
1309     if (insert) {
1310         last_ins = insert;
1311         while (OpHAS_SIBLING(last_ins))
1312             last_ins = OpSIBLING(last_ins);
1313         OpMAYBESIB_set(last_ins, rest, NULL);
1314     }
1315     else
1316         insert = rest;
1317 
1318     if (start) {
1319         OpMAYBESIB_set(start, insert, NULL);
1320     }
1321     else {
1322         if (!parent)
1323             goto no_parent;
1324         cLISTOPx(parent)->op_first = insert;
1325         if (insert)
1326             parent->op_flags |= OPf_KIDS;
1327         else
1328             parent->op_flags &= ~OPf_KIDS;
1329     }
1330 
1331     if (!rest) {
1332         /* update op_last etc */
1333         U32 type;
1334         OP *lastop;
1335 
1336         if (!parent)
1337             goto no_parent;
1338 
1339         /* ought to use OP_CLASS(parent) here, but that can't handle
1340          * ex-foo OP_NULL ops. Also note that XopENTRYCUSTOM() can't
1341          * either */
1342         type = parent->op_type;
1343         if (type == OP_CUSTOM) {
1344             dTHX;
1345             type = XopENTRYCUSTOM(parent, xop_class);
1346         }
1347         else {
1348             if (type == OP_NULL)
1349                 type = parent->op_targ;
1350             type = PL_opargs[type] & OA_CLASS_MASK;
1351         }
1352 
1353         lastop = last_ins ? last_ins : start ? start : NULL;
1354         if (   type == OA_BINOP
1355             || type == OA_LISTOP
1356             || type == OA_PMOP
1357             || type == OA_LOOP
1358         )
1359             cLISTOPx(parent)->op_last = lastop;
1360 
1361         if (lastop)
1362             OpLASTSIB_set(lastop, parent);
1363     }
1364     return last_del ? first : NULL;
1365 
1366   no_parent:
1367     Perl_croak_nocontext("panic: op_sibling_splice(): NULL parent");
1368 }
1369 
1370 
1371 #ifdef PERL_OP_PARENT
1372 
1373 /*
1374 =for apidoc op_parent
1375 
1376 Returns the parent OP of C<o>, if it has a parent. Returns C<NULL> otherwise.
1377 This function is only available on perls built with C<-DPERL_OP_PARENT>.
1378 
1379 =cut
1380 */
1381 
1382 OP *
1383 Perl_op_parent(OP *o)
1384 {
1385     PERL_ARGS_ASSERT_OP_PARENT;
1386     while (OpHAS_SIBLING(o))
1387         o = OpSIBLING(o);
1388     return o->op_sibparent;
1389 }
1390 
1391 #endif
1392 
1393 
1394 /* replace the sibling following start with a new UNOP, which becomes
1395  * the parent of the original sibling; e.g.
1396  *
1397  *  op_sibling_newUNOP(P, A, unop-args...)
1398  *
1399  *  P              P
1400  *  |      becomes |
1401  *  A-B-C          A-U-C
1402  *                   |
1403  *                   B
1404  *
1405  * where U is the new UNOP.
1406  *
1407  * parent and start args are the same as for op_sibling_splice();
1408  * type and flags args are as newUNOP().
1409  *
1410  * Returns the new UNOP.
1411  */
1412 
1413 STATIC OP *
1414 S_op_sibling_newUNOP(pTHX_ OP *parent, OP *start, I32 type, I32 flags)
1415 {
1416     OP *kid, *newop;
1417 
1418     kid = op_sibling_splice(parent, start, 1, NULL);
1419     newop = newUNOP(type, flags, kid);
1420     op_sibling_splice(parent, start, 0, newop);
1421     return newop;
1422 }
1423 
1424 
1425 /* lowest-level newLOGOP-style function - just allocates and populates
1426  * the struct. Higher-level stuff should be done by S_new_logop() /
1427  * newLOGOP(). This function exists mainly to avoid op_first assignment
1428  * being spread throughout this file.
1429  */
1430 
1431 STATIC LOGOP *
1432 S_alloc_LOGOP(pTHX_ I32 type, OP *first, OP* other)
1433 {
1434     dVAR;
1435     LOGOP *logop;
1436     OP *kid = first;
1437     NewOp(1101, logop, 1, LOGOP);
1438     OpTYPE_set(logop, type);
1439     logop->op_first = first;
1440     logop->op_other = other;
1441     logop->op_flags = OPf_KIDS;
1442     while (kid && OpHAS_SIBLING(kid))
1443         kid = OpSIBLING(kid);
1444     if (kid)
1445         OpLASTSIB_set(kid, (OP*)logop);
1446     return logop;
1447 }
1448 
1449 
1450 /* Contextualizers */
1451 
1452 /*
1453 =for apidoc Am|OP *|op_contextualize|OP *o|I32 context
1454 
1455 Applies a syntactic context to an op tree representing an expression.
1456 C<o> is the op tree, and C<context> must be C<G_SCALAR>, C<G_ARRAY>,
1457 or C<G_VOID> to specify the context to apply.  The modified op tree
1458 is returned.
1459 
1460 =cut
1461 */
1462 
1463 OP *
1464 Perl_op_contextualize(pTHX_ OP *o, I32 context)
1465 {
1466     PERL_ARGS_ASSERT_OP_CONTEXTUALIZE;
1467     switch (context) {
1468 	case G_SCALAR: return scalar(o);
1469 	case G_ARRAY:  return list(o);
1470 	case G_VOID:   return scalarvoid(o);
1471 	default:
1472 	    Perl_croak(aTHX_ "panic: op_contextualize bad context %ld",
1473 		       (long) context);
1474     }
1475 }
1476 
1477 /*
1478 
1479 =for apidoc Am|OP*|op_linklist|OP *o
1480 This function is the implementation of the L</LINKLIST> macro.  It should
1481 not be called directly.
1482 
1483 =cut
1484 */
1485 
1486 OP *
1487 Perl_op_linklist(pTHX_ OP *o)
1488 {
1489     OP *first;
1490 
1491     PERL_ARGS_ASSERT_OP_LINKLIST;
1492 
1493     if (o->op_next)
1494 	return o->op_next;
1495 
1496     /* establish postfix order */
1497     first = cUNOPo->op_first;
1498     if (first) {
1499         OP *kid;
1500 	o->op_next = LINKLIST(first);
1501 	kid = first;
1502 	for (;;) {
1503             OP *sibl = OpSIBLING(kid);
1504             if (sibl) {
1505                 kid->op_next = LINKLIST(sibl);
1506                 kid = sibl;
1507 	    } else {
1508 		kid->op_next = o;
1509 		break;
1510 	    }
1511 	}
1512     }
1513     else
1514 	o->op_next = o;
1515 
1516     return o->op_next;
1517 }
1518 
1519 static OP *
1520 S_scalarkids(pTHX_ OP *o)
1521 {
1522     if (o && o->op_flags & OPf_KIDS) {
1523         OP *kid;
1524         for (kid = cLISTOPo->op_first; kid; kid = OpSIBLING(kid))
1525 	    scalar(kid);
1526     }
1527     return o;
1528 }
1529 
1530 STATIC OP *
1531 S_scalarboolean(pTHX_ OP *o)
1532 {
1533     PERL_ARGS_ASSERT_SCALARBOOLEAN;
1534 
1535     if (o->op_type == OP_SASSIGN && cBINOPo->op_first->op_type == OP_CONST
1536      && !(cBINOPo->op_first->op_flags & OPf_SPECIAL)) {
1537 	if (ckWARN(WARN_SYNTAX)) {
1538 	    const line_t oldline = CopLINE(PL_curcop);
1539 
1540 	    if (PL_parser && PL_parser->copline != NOLINE) {
1541 		/* This ensures that warnings are reported at the first line
1542                    of the conditional, not the last.  */
1543 		CopLINE_set(PL_curcop, PL_parser->copline);
1544             }
1545 	    Perl_warner(aTHX_ packWARN(WARN_SYNTAX), "Found = in conditional, should be ==");
1546 	    CopLINE_set(PL_curcop, oldline);
1547 	}
1548     }
1549     return scalar(o);
1550 }
1551 
1552 static SV *
1553 S_op_varname_subscript(pTHX_ const OP *o, int subscript_type)
1554 {
1555     assert(o);
1556     assert(o->op_type == OP_PADAV || o->op_type == OP_RV2AV ||
1557 	   o->op_type == OP_PADHV || o->op_type == OP_RV2HV);
1558     {
1559 	const char funny  = o->op_type == OP_PADAV
1560 			 || o->op_type == OP_RV2AV ? '@' : '%';
1561 	if (o->op_type == OP_RV2AV || o->op_type == OP_RV2HV) {
1562 	    GV *gv;
1563 	    if (cUNOPo->op_first->op_type != OP_GV
1564 	     || !(gv = cGVOPx_gv(cUNOPo->op_first)))
1565 		return NULL;
1566 	    return varname(gv, funny, 0, NULL, 0, subscript_type);
1567 	}
1568 	return
1569 	    varname(MUTABLE_GV(PL_compcv), funny, o->op_targ, NULL, 0, subscript_type);
1570     }
1571 }
1572 
1573 static SV *
1574 S_op_varname(pTHX_ const OP *o)
1575 {
1576     return S_op_varname_subscript(aTHX_ o, 1);
1577 }
1578 
1579 static void
1580 S_op_pretty(pTHX_ const OP *o, SV **retsv, const char **retpv)
1581 { /* or not so pretty :-) */
1582     if (o->op_type == OP_CONST) {
1583 	*retsv = cSVOPo_sv;
1584 	if (SvPOK(*retsv)) {
1585 	    SV *sv = *retsv;
1586 	    *retsv = sv_newmortal();
1587 	    pv_pretty(*retsv, SvPVX_const(sv), SvCUR(sv), 32, NULL, NULL,
1588 		      PERL_PV_PRETTY_DUMP |PERL_PV_ESCAPE_UNI_DETECT);
1589 	}
1590 	else if (!SvOK(*retsv))
1591 	    *retpv = "undef";
1592     }
1593     else *retpv = "...";
1594 }
1595 
1596 static void
1597 S_scalar_slice_warning(pTHX_ const OP *o)
1598 {
1599     OP *kid;
1600     const char lbrack =
1601 	o->op_type == OP_HSLICE ? '{' : '[';
1602     const char rbrack =
1603 	o->op_type == OP_HSLICE ? '}' : ']';
1604     SV *name;
1605     SV *keysv = NULL; /* just to silence compiler warnings */
1606     const char *key = NULL;
1607 
1608     if (!(o->op_private & OPpSLICEWARNING))
1609 	return;
1610     if (PL_parser && PL_parser->error_count)
1611 	/* This warning can be nonsensical when there is a syntax error. */
1612 	return;
1613 
1614     kid = cLISTOPo->op_first;
1615     kid = OpSIBLING(kid); /* get past pushmark */
1616     /* weed out false positives: any ops that can return lists */
1617     switch (kid->op_type) {
1618     case OP_BACKTICK:
1619     case OP_GLOB:
1620     case OP_READLINE:
1621     case OP_MATCH:
1622     case OP_RV2AV:
1623     case OP_EACH:
1624     case OP_VALUES:
1625     case OP_KEYS:
1626     case OP_SPLIT:
1627     case OP_LIST:
1628     case OP_SORT:
1629     case OP_REVERSE:
1630     case OP_ENTERSUB:
1631     case OP_CALLER:
1632     case OP_LSTAT:
1633     case OP_STAT:
1634     case OP_READDIR:
1635     case OP_SYSTEM:
1636     case OP_TMS:
1637     case OP_LOCALTIME:
1638     case OP_GMTIME:
1639     case OP_ENTEREVAL:
1640 	return;
1641     }
1642 
1643     /* Don't warn if we have a nulled list either. */
1644     if (kid->op_type == OP_NULL && kid->op_targ == OP_LIST)
1645         return;
1646 
1647     assert(OpSIBLING(kid));
1648     name = S_op_varname(aTHX_ OpSIBLING(kid));
1649     if (!name) /* XS module fiddling with the op tree */
1650 	return;
1651     S_op_pretty(aTHX_ kid, &keysv, &key);
1652     assert(SvPOK(name));
1653     sv_chop(name,SvPVX(name)+1);
1654     if (key)
1655        /* diag_listed_as: Scalar value @%s[%s] better written as $%s[%s] */
1656 	Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
1657 		   "Scalar value @%"SVf"%c%s%c better written as $%"SVf
1658 		   "%c%s%c",
1659 		    SVfARG(name), lbrack, key, rbrack, SVfARG(name),
1660 		    lbrack, key, rbrack);
1661     else
1662        /* diag_listed_as: Scalar value @%s[%s] better written as $%s[%s] */
1663 	Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
1664 		   "Scalar value @%"SVf"%c%"SVf"%c better written as $%"
1665 		    SVf"%c%"SVf"%c",
1666 		    SVfARG(name), lbrack, SVfARG(keysv), rbrack,
1667 		    SVfARG(name), lbrack, SVfARG(keysv), rbrack);
1668 }
1669 
1670 OP *
1671 Perl_scalar(pTHX_ OP *o)
1672 {
1673     OP *kid;
1674 
1675     /* assumes no premature commitment */
1676     if (!o || (PL_parser && PL_parser->error_count)
1677 	 || (o->op_flags & OPf_WANT)
1678 	 || o->op_type == OP_RETURN)
1679     {
1680 	return o;
1681     }
1682 
1683     o->op_flags = (o->op_flags & ~OPf_WANT) | OPf_WANT_SCALAR;
1684 
1685     switch (o->op_type) {
1686     case OP_REPEAT:
1687 	scalar(cBINOPo->op_first);
1688 	if (o->op_private & OPpREPEAT_DOLIST) {
1689 	    kid = cLISTOPx(cUNOPo->op_first)->op_first;
1690 	    assert(kid->op_type == OP_PUSHMARK);
1691 	    if (OpHAS_SIBLING(kid) && !OpHAS_SIBLING(OpSIBLING(kid))) {
1692 		op_null(cLISTOPx(cUNOPo->op_first)->op_first);
1693 		o->op_private &=~ OPpREPEAT_DOLIST;
1694 	    }
1695 	}
1696 	break;
1697     case OP_OR:
1698     case OP_AND:
1699     case OP_COND_EXPR:
1700 	for (kid = OpSIBLING(cUNOPo->op_first); kid; kid = OpSIBLING(kid))
1701 	    scalar(kid);
1702 	break;
1703 	/* FALLTHROUGH */
1704     case OP_SPLIT:
1705     case OP_MATCH:
1706     case OP_QR:
1707     case OP_SUBST:
1708     case OP_NULL:
1709     default:
1710 	if (o->op_flags & OPf_KIDS) {
1711 	    for (kid = cUNOPo->op_first; kid; kid = OpSIBLING(kid))
1712 		scalar(kid);
1713 	}
1714 	break;
1715     case OP_LEAVE:
1716     case OP_LEAVETRY:
1717 	kid = cLISTOPo->op_first;
1718 	scalar(kid);
1719 	kid = OpSIBLING(kid);
1720     do_kids:
1721 	while (kid) {
1722 	    OP *sib = OpSIBLING(kid);
1723 	    if (sib && kid->op_type != OP_LEAVEWHEN
1724 	     && (  OpHAS_SIBLING(sib) || sib->op_type != OP_NULL
1725 		|| (  sib->op_targ != OP_NEXTSTATE
1726 		   && sib->op_targ != OP_DBSTATE  )))
1727 		scalarvoid(kid);
1728 	    else
1729 		scalar(kid);
1730 	    kid = sib;
1731 	}
1732 	PL_curcop = &PL_compiling;
1733 	break;
1734     case OP_SCOPE:
1735     case OP_LINESEQ:
1736     case OP_LIST:
1737 	kid = cLISTOPo->op_first;
1738 	goto do_kids;
1739     case OP_SORT:
1740 	Perl_ck_warner(aTHX_ packWARN(WARN_VOID), "Useless use of sort in scalar context");
1741 	break;
1742     case OP_KVHSLICE:
1743     case OP_KVASLICE:
1744     {
1745 	/* Warn about scalar context */
1746 	const char lbrack = o->op_type == OP_KVHSLICE ? '{' : '[';
1747 	const char rbrack = o->op_type == OP_KVHSLICE ? '}' : ']';
1748 	SV *name;
1749 	SV *keysv;
1750 	const char *key = NULL;
1751 
1752 	/* This warning can be nonsensical when there is a syntax error. */
1753 	if (PL_parser && PL_parser->error_count)
1754 	    break;
1755 
1756 	if (!ckWARN(WARN_SYNTAX)) break;
1757 
1758 	kid = cLISTOPo->op_first;
1759 	kid = OpSIBLING(kid); /* get past pushmark */
1760 	assert(OpSIBLING(kid));
1761 	name = S_op_varname(aTHX_ OpSIBLING(kid));
1762 	if (!name) /* XS module fiddling with the op tree */
1763 	    break;
1764 	S_op_pretty(aTHX_ kid, &keysv, &key);
1765 	assert(SvPOK(name));
1766 	sv_chop(name,SvPVX(name)+1);
1767 	if (key)
1768   /* diag_listed_as: %%s[%s] in scalar context better written as $%s[%s] */
1769 	    Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
1770 		       "%%%"SVf"%c%s%c in scalar context better written "
1771 		       "as $%"SVf"%c%s%c",
1772 			SVfARG(name), lbrack, key, rbrack, SVfARG(name),
1773 			lbrack, key, rbrack);
1774 	else
1775   /* diag_listed_as: %%s[%s] in scalar context better written as $%s[%s] */
1776 	    Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
1777 		       "%%%"SVf"%c%"SVf"%c in scalar context better "
1778 		       "written as $%"SVf"%c%"SVf"%c",
1779 			SVfARG(name), lbrack, SVfARG(keysv), rbrack,
1780 			SVfARG(name), lbrack, SVfARG(keysv), rbrack);
1781     }
1782     }
1783     return o;
1784 }
1785 
1786 OP *
1787 Perl_scalarvoid(pTHX_ OP *arg)
1788 {
1789     dVAR;
1790     OP *kid;
1791     SV* sv;
1792     U8 want;
1793     SSize_t defer_stack_alloc = 0;
1794     SSize_t defer_ix = -1;
1795     OP **defer_stack = NULL;
1796     OP *o = arg;
1797 
1798     PERL_ARGS_ASSERT_SCALARVOID;
1799 
1800     do {
1801         SV *useless_sv = NULL;
1802         const char* useless = NULL;
1803 
1804         if (o->op_type == OP_NEXTSTATE
1805             || o->op_type == OP_DBSTATE
1806             || (o->op_type == OP_NULL && (o->op_targ == OP_NEXTSTATE
1807                                           || o->op_targ == OP_DBSTATE)))
1808             PL_curcop = (COP*)o;                /* for warning below */
1809 
1810         /* assumes no premature commitment */
1811         want = o->op_flags & OPf_WANT;
1812         if ((want && want != OPf_WANT_SCALAR)
1813             || (PL_parser && PL_parser->error_count)
1814             || o->op_type == OP_RETURN || o->op_type == OP_REQUIRE || o->op_type == OP_LEAVEWHEN)
1815         {
1816             continue;
1817         }
1818 
1819         if ((o->op_private & OPpTARGET_MY)
1820             && (PL_opargs[o->op_type] & OA_TARGLEX))/* OPp share the meaning */
1821         {
1822             /* newASSIGNOP has already applied scalar context, which we
1823                leave, as if this op is inside SASSIGN.  */
1824             continue;
1825         }
1826 
1827         o->op_flags = (o->op_flags & ~OPf_WANT) | OPf_WANT_VOID;
1828 
1829         switch (o->op_type) {
1830         default:
1831             if (!(PL_opargs[o->op_type] & OA_FOLDCONST))
1832                 break;
1833             /* FALLTHROUGH */
1834         case OP_REPEAT:
1835             if (o->op_flags & OPf_STACKED)
1836                 break;
1837             if (o->op_type == OP_REPEAT)
1838                 scalar(cBINOPo->op_first);
1839             goto func_ops;
1840         case OP_SUBSTR:
1841             if (o->op_private == 4)
1842                 break;
1843             /* FALLTHROUGH */
1844         case OP_WANTARRAY:
1845         case OP_GV:
1846         case OP_SMARTMATCH:
1847         case OP_AV2ARYLEN:
1848         case OP_REF:
1849         case OP_REFGEN:
1850         case OP_SREFGEN:
1851         case OP_DEFINED:
1852         case OP_HEX:
1853         case OP_OCT:
1854         case OP_LENGTH:
1855         case OP_VEC:
1856         case OP_INDEX:
1857         case OP_RINDEX:
1858         case OP_SPRINTF:
1859         case OP_KVASLICE:
1860         case OP_KVHSLICE:
1861         case OP_UNPACK:
1862         case OP_PACK:
1863         case OP_JOIN:
1864         case OP_LSLICE:
1865         case OP_ANONLIST:
1866         case OP_ANONHASH:
1867         case OP_SORT:
1868         case OP_REVERSE:
1869         case OP_RANGE:
1870         case OP_FLIP:
1871         case OP_FLOP:
1872         case OP_CALLER:
1873         case OP_FILENO:
1874         case OP_EOF:
1875         case OP_TELL:
1876         case OP_GETSOCKNAME:
1877         case OP_GETPEERNAME:
1878         case OP_READLINK:
1879         case OP_TELLDIR:
1880         case OP_GETPPID:
1881         case OP_GETPGRP:
1882         case OP_GETPRIORITY:
1883         case OP_TIME:
1884         case OP_TMS:
1885         case OP_LOCALTIME:
1886         case OP_GMTIME:
1887         case OP_GHBYNAME:
1888         case OP_GHBYADDR:
1889         case OP_GHOSTENT:
1890         case OP_GNBYNAME:
1891         case OP_GNBYADDR:
1892         case OP_GNETENT:
1893         case OP_GPBYNAME:
1894         case OP_GPBYNUMBER:
1895         case OP_GPROTOENT:
1896         case OP_GSBYNAME:
1897         case OP_GSBYPORT:
1898         case OP_GSERVENT:
1899         case OP_GPWNAM:
1900         case OP_GPWUID:
1901         case OP_GGRNAM:
1902         case OP_GGRGID:
1903         case OP_GETLOGIN:
1904         case OP_PROTOTYPE:
1905         case OP_RUNCV:
1906         func_ops:
1907             useless = OP_DESC(o);
1908             break;
1909 
1910         case OP_GVSV:
1911         case OP_PADSV:
1912         case OP_PADAV:
1913         case OP_PADHV:
1914         case OP_PADANY:
1915         case OP_AELEM:
1916         case OP_AELEMFAST:
1917         case OP_AELEMFAST_LEX:
1918         case OP_ASLICE:
1919         case OP_HELEM:
1920         case OP_HSLICE:
1921             if (!(o->op_private & (OPpLVAL_INTRO|OPpOUR_INTRO)))
1922                 /* Otherwise it's "Useless use of grep iterator" */
1923                 useless = OP_DESC(o);
1924             break;
1925 
1926         case OP_SPLIT:
1927             kid = cLISTOPo->op_first;
1928             if (kid && kid->op_type == OP_PUSHRE
1929                 && !kid->op_targ
1930                 && !(o->op_flags & OPf_STACKED)
1931 #ifdef USE_ITHREADS
1932                 && !((PMOP*)kid)->op_pmreplrootu.op_pmtargetoff
1933 #else
1934                 && !((PMOP*)kid)->op_pmreplrootu.op_pmtargetgv
1935 #endif
1936                 )
1937                 useless = OP_DESC(o);
1938             break;
1939 
1940         case OP_NOT:
1941             kid = cUNOPo->op_first;
1942             if (kid->op_type != OP_MATCH && kid->op_type != OP_SUBST &&
1943                 kid->op_type != OP_TRANS && kid->op_type != OP_TRANSR) {
1944                 goto func_ops;
1945             }
1946             useless = "negative pattern binding (!~)";
1947             break;
1948 
1949         case OP_SUBST:
1950             if (cPMOPo->op_pmflags & PMf_NONDESTRUCT)
1951                 useless = "non-destructive substitution (s///r)";
1952             break;
1953 
1954         case OP_TRANSR:
1955             useless = "non-destructive transliteration (tr///r)";
1956             break;
1957 
1958         case OP_RV2GV:
1959         case OP_RV2SV:
1960         case OP_RV2AV:
1961         case OP_RV2HV:
1962             if (!(o->op_private & (OPpLVAL_INTRO|OPpOUR_INTRO)) &&
1963                 (!OpHAS_SIBLING(o) || OpSIBLING(o)->op_type != OP_READLINE))
1964                 useless = "a variable";
1965             break;
1966 
1967         case OP_CONST:
1968             sv = cSVOPo_sv;
1969             if (cSVOPo->op_private & OPpCONST_STRICT)
1970                 no_bareword_allowed(o);
1971             else {
1972                 if (ckWARN(WARN_VOID)) {
1973                     NV nv;
1974                     /* don't warn on optimised away booleans, eg
1975                      * use constant Foo, 5; Foo || print; */
1976                     if (cSVOPo->op_private & OPpCONST_SHORTCIRCUIT)
1977                         useless = NULL;
1978                     /* the constants 0 and 1 are permitted as they are
1979                        conventionally used as dummies in constructs like
1980                        1 while some_condition_with_side_effects;  */
1981                     else if (SvNIOK(sv) && ((nv = SvNV(sv)) == 0.0 || nv == 1.0))
1982                         useless = NULL;
1983                     else if (SvPOK(sv)) {
1984                         SV * const dsv = newSVpvs("");
1985                         useless_sv
1986                             = Perl_newSVpvf(aTHX_
1987                                             "a constant (%s)",
1988                                             pv_pretty(dsv, SvPVX_const(sv),
1989                                                       SvCUR(sv), 32, NULL, NULL,
1990                                                       PERL_PV_PRETTY_DUMP
1991                                                       | PERL_PV_ESCAPE_NOCLEAR
1992                                                       | PERL_PV_ESCAPE_UNI_DETECT));
1993                         SvREFCNT_dec_NN(dsv);
1994                     }
1995                     else if (SvOK(sv)) {
1996                         useless_sv = Perl_newSVpvf(aTHX_ "a constant (%"SVf")", SVfARG(sv));
1997                     }
1998                     else
1999                         useless = "a constant (undef)";
2000                 }
2001             }
2002             op_null(o);         /* don't execute or even remember it */
2003             break;
2004 
2005         case OP_POSTINC:
2006             OpTYPE_set(o, OP_PREINC);  /* pre-increment is faster */
2007             break;
2008 
2009         case OP_POSTDEC:
2010             OpTYPE_set(o, OP_PREDEC);  /* pre-decrement is faster */
2011             break;
2012 
2013         case OP_I_POSTINC:
2014             OpTYPE_set(o, OP_I_PREINC);        /* pre-increment is faster */
2015             break;
2016 
2017         case OP_I_POSTDEC:
2018             OpTYPE_set(o, OP_I_PREDEC);        /* pre-decrement is faster */
2019             break;
2020 
2021         case OP_SASSIGN: {
2022             OP *rv2gv;
2023             UNOP *refgen, *rv2cv;
2024             LISTOP *exlist;
2025 
2026             if ((o->op_private & ~OPpASSIGN_BACKWARDS) != 2)
2027                 break;
2028 
2029             rv2gv = ((BINOP *)o)->op_last;
2030             if (!rv2gv || rv2gv->op_type != OP_RV2GV)
2031                 break;
2032 
2033             refgen = (UNOP *)((BINOP *)o)->op_first;
2034 
2035             if (!refgen || (refgen->op_type != OP_REFGEN
2036                             && refgen->op_type != OP_SREFGEN))
2037                 break;
2038 
2039             exlist = (LISTOP *)refgen->op_first;
2040             if (!exlist || exlist->op_type != OP_NULL
2041                 || exlist->op_targ != OP_LIST)
2042                 break;
2043 
2044             if (exlist->op_first->op_type != OP_PUSHMARK
2045                 && exlist->op_first != exlist->op_last)
2046                 break;
2047 
2048             rv2cv = (UNOP*)exlist->op_last;
2049 
2050             if (rv2cv->op_type != OP_RV2CV)
2051                 break;
2052 
2053             assert ((rv2gv->op_private & OPpDONT_INIT_GV) == 0);
2054             assert ((o->op_private & OPpASSIGN_CV_TO_GV) == 0);
2055             assert ((rv2cv->op_private & OPpMAY_RETURN_CONSTANT) == 0);
2056 
2057             o->op_private |= OPpASSIGN_CV_TO_GV;
2058             rv2gv->op_private |= OPpDONT_INIT_GV;
2059             rv2cv->op_private |= OPpMAY_RETURN_CONSTANT;
2060 
2061             break;
2062         }
2063 
2064         case OP_AASSIGN: {
2065             inplace_aassign(o);
2066             break;
2067         }
2068 
2069         case OP_OR:
2070         case OP_AND:
2071             kid = cLOGOPo->op_first;
2072             if (kid->op_type == OP_NOT
2073                 && (kid->op_flags & OPf_KIDS)) {
2074                 if (o->op_type == OP_AND) {
2075                     OpTYPE_set(o, OP_OR);
2076                 } else {
2077                     OpTYPE_set(o, OP_AND);
2078                 }
2079                 op_null(kid);
2080             }
2081             /* FALLTHROUGH */
2082 
2083         case OP_DOR:
2084         case OP_COND_EXPR:
2085         case OP_ENTERGIVEN:
2086         case OP_ENTERWHEN:
2087             for (kid = OpSIBLING(cUNOPo->op_first); kid; kid = OpSIBLING(kid))
2088                 if (!(kid->op_flags & OPf_KIDS))
2089                     scalarvoid(kid);
2090                 else
2091                     DEFER_OP(kid);
2092         break;
2093 
2094         case OP_NULL:
2095             if (o->op_flags & OPf_STACKED)
2096                 break;
2097             /* FALLTHROUGH */
2098         case OP_NEXTSTATE:
2099         case OP_DBSTATE:
2100         case OP_ENTERTRY:
2101         case OP_ENTER:
2102             if (!(o->op_flags & OPf_KIDS))
2103                 break;
2104             /* FALLTHROUGH */
2105         case OP_SCOPE:
2106         case OP_LEAVE:
2107         case OP_LEAVETRY:
2108         case OP_LEAVELOOP:
2109         case OP_LINESEQ:
2110         case OP_LEAVEGIVEN:
2111         case OP_LEAVEWHEN:
2112         kids:
2113             for (kid = cLISTOPo->op_first; kid; kid = OpSIBLING(kid))
2114                 if (!(kid->op_flags & OPf_KIDS))
2115                     scalarvoid(kid);
2116                 else
2117                     DEFER_OP(kid);
2118             break;
2119         case OP_LIST:
2120             /* If the first kid after pushmark is something that the padrange
2121                optimisation would reject, then null the list and the pushmark.
2122             */
2123             if ((kid = cLISTOPo->op_first)->op_type == OP_PUSHMARK
2124                 && (  !(kid = OpSIBLING(kid))
2125                       || (  kid->op_type != OP_PADSV
2126                             && kid->op_type != OP_PADAV
2127                             && kid->op_type != OP_PADHV)
2128                       || kid->op_private & ~OPpLVAL_INTRO
2129                       || !(kid = OpSIBLING(kid))
2130                       || (  kid->op_type != OP_PADSV
2131                             && kid->op_type != OP_PADAV
2132                             && kid->op_type != OP_PADHV)
2133                       || kid->op_private & ~OPpLVAL_INTRO)
2134             ) {
2135                 op_null(cUNOPo->op_first); /* NULL the pushmark */
2136                 op_null(o); /* NULL the list */
2137             }
2138             goto kids;
2139         case OP_ENTEREVAL:
2140             scalarkids(o);
2141             break;
2142         case OP_SCALAR:
2143             scalar(o);
2144             break;
2145         }
2146 
2147         if (useless_sv) {
2148             /* mortalise it, in case warnings are fatal.  */
2149             Perl_ck_warner(aTHX_ packWARN(WARN_VOID),
2150                            "Useless use of %"SVf" in void context",
2151                            SVfARG(sv_2mortal(useless_sv)));
2152         }
2153         else if (useless) {
2154             Perl_ck_warner(aTHX_ packWARN(WARN_VOID),
2155                            "Useless use of %s in void context",
2156                            useless);
2157         }
2158     } while ( (o = POP_DEFERRED_OP()) );
2159 
2160     Safefree(defer_stack);
2161 
2162     return arg;
2163 }
2164 
2165 static OP *
2166 S_listkids(pTHX_ OP *o)
2167 {
2168     if (o && o->op_flags & OPf_KIDS) {
2169         OP *kid;
2170 	for (kid = cLISTOPo->op_first; kid; kid = OpSIBLING(kid))
2171 	    list(kid);
2172     }
2173     return o;
2174 }
2175 
2176 OP *
2177 Perl_list(pTHX_ OP *o)
2178 {
2179     OP *kid;
2180 
2181     /* assumes no premature commitment */
2182     if (!o || (o->op_flags & OPf_WANT)
2183 	 || (PL_parser && PL_parser->error_count)
2184 	 || o->op_type == OP_RETURN)
2185     {
2186 	return o;
2187     }
2188 
2189     if ((o->op_private & OPpTARGET_MY)
2190 	&& (PL_opargs[o->op_type] & OA_TARGLEX))/* OPp share the meaning */
2191     {
2192 	return o;				/* As if inside SASSIGN */
2193     }
2194 
2195     o->op_flags = (o->op_flags & ~OPf_WANT) | OPf_WANT_LIST;
2196 
2197     switch (o->op_type) {
2198     case OP_FLOP:
2199 	list(cBINOPo->op_first);
2200 	break;
2201     case OP_REPEAT:
2202 	if (o->op_private & OPpREPEAT_DOLIST
2203 	 && !(o->op_flags & OPf_STACKED))
2204 	{
2205 	    list(cBINOPo->op_first);
2206 	    kid = cBINOPo->op_last;
2207 	    if (kid->op_type == OP_CONST && SvIOK(kSVOP_sv)
2208 	     && SvIVX(kSVOP_sv) == 1)
2209 	    {
2210 		op_null(o); /* repeat */
2211 		op_null(cUNOPx(cBINOPo->op_first)->op_first);/* pushmark */
2212 		/* const (rhs): */
2213 		op_free(op_sibling_splice(o, cBINOPo->op_first, 1, NULL));
2214 	    }
2215 	}
2216 	break;
2217     case OP_OR:
2218     case OP_AND:
2219     case OP_COND_EXPR:
2220 	for (kid = OpSIBLING(cUNOPo->op_first); kid; kid = OpSIBLING(kid))
2221 	    list(kid);
2222 	break;
2223     default:
2224     case OP_MATCH:
2225     case OP_QR:
2226     case OP_SUBST:
2227     case OP_NULL:
2228 	if (!(o->op_flags & OPf_KIDS))
2229 	    break;
2230 	if (!o->op_next && cUNOPo->op_first->op_type == OP_FLOP) {
2231 	    list(cBINOPo->op_first);
2232 	    return gen_constant_list(o);
2233 	}
2234 	listkids(o);
2235 	break;
2236     case OP_LIST:
2237 	listkids(o);
2238 	if (cLISTOPo->op_first->op_type == OP_PUSHMARK) {
2239 	    op_null(cUNOPo->op_first); /* NULL the pushmark */
2240 	    op_null(o); /* NULL the list */
2241 	}
2242 	break;
2243     case OP_LEAVE:
2244     case OP_LEAVETRY:
2245 	kid = cLISTOPo->op_first;
2246 	list(kid);
2247 	kid = OpSIBLING(kid);
2248     do_kids:
2249 	while (kid) {
2250 	    OP *sib = OpSIBLING(kid);
2251 	    if (sib && kid->op_type != OP_LEAVEWHEN)
2252 		scalarvoid(kid);
2253 	    else
2254 		list(kid);
2255 	    kid = sib;
2256 	}
2257 	PL_curcop = &PL_compiling;
2258 	break;
2259     case OP_SCOPE:
2260     case OP_LINESEQ:
2261 	kid = cLISTOPo->op_first;
2262 	goto do_kids;
2263     }
2264     return o;
2265 }
2266 
2267 static OP *
2268 S_scalarseq(pTHX_ OP *o)
2269 {
2270     if (o) {
2271 	const OPCODE type = o->op_type;
2272 
2273 	if (type == OP_LINESEQ || type == OP_SCOPE ||
2274 	    type == OP_LEAVE || type == OP_LEAVETRY)
2275 	{
2276      	    OP *kid, *sib;
2277 	    for (kid = cLISTOPo->op_first; kid; kid = sib) {
2278 		if ((sib = OpSIBLING(kid))
2279 		 && (  OpHAS_SIBLING(sib) || sib->op_type != OP_NULL
2280 		    || (  sib->op_targ != OP_NEXTSTATE
2281 		       && sib->op_targ != OP_DBSTATE  )))
2282 		{
2283 		    scalarvoid(kid);
2284 		}
2285 	    }
2286 	    PL_curcop = &PL_compiling;
2287 	}
2288 	o->op_flags &= ~OPf_PARENS;
2289 	if (PL_hints & HINT_BLOCK_SCOPE)
2290 	    o->op_flags |= OPf_PARENS;
2291     }
2292     else
2293 	o = newOP(OP_STUB, 0);
2294     return o;
2295 }
2296 
2297 STATIC OP *
2298 S_modkids(pTHX_ OP *o, I32 type)
2299 {
2300     if (o && o->op_flags & OPf_KIDS) {
2301         OP *kid;
2302         for (kid = cLISTOPo->op_first; kid; kid = OpSIBLING(kid))
2303 	    op_lvalue(kid, type);
2304     }
2305     return o;
2306 }
2307 
2308 
2309 /* for a helem/hslice/kvslice, if its a fixed hash, croak on invalid
2310  * const fields. Also, convert CONST keys to HEK-in-SVs.
2311  * rop is the op that retrieves the hash;
2312  * key_op is the first key
2313  */
2314 
2315 STATIC void
2316 S_check_hash_fields_and_hekify(pTHX_ UNOP *rop, SVOP *key_op)
2317 {
2318     PADNAME *lexname;
2319     GV **fields;
2320     bool check_fields;
2321 
2322     /* find the padsv corresponding to $lex->{} or @{$lex}{} */
2323     if (rop) {
2324         if (rop->op_first->op_type == OP_PADSV)
2325             /* @$hash{qw(keys here)} */
2326             rop = (UNOP*)rop->op_first;
2327         else {
2328             /* @{$hash}{qw(keys here)} */
2329             if (rop->op_first->op_type == OP_SCOPE
2330                 && cLISTOPx(rop->op_first)->op_last->op_type == OP_PADSV)
2331                 {
2332                     rop = (UNOP*)cLISTOPx(rop->op_first)->op_last;
2333                 }
2334             else
2335                 rop = NULL;
2336         }
2337     }
2338 
2339     lexname = NULL; /* just to silence compiler warnings */
2340     fields  = NULL; /* just to silence compiler warnings */
2341 
2342     check_fields =
2343             rop
2344          && (lexname = padnamelist_fetch(PL_comppad_name, rop->op_targ),
2345              SvPAD_TYPED(lexname))
2346          && (fields = (GV**)hv_fetchs(PadnameTYPE(lexname), "FIELDS", FALSE))
2347          && isGV(*fields) && GvHV(*fields);
2348 
2349     for (; key_op; key_op = (SVOP*)OpSIBLING(key_op)) {
2350         SV **svp, *sv;
2351         if (key_op->op_type != OP_CONST)
2352             continue;
2353         svp = cSVOPx_svp(key_op);
2354 
2355         /* make sure it's not a bareword under strict subs */
2356         if (key_op->op_private & OPpCONST_BARE &&
2357             key_op->op_private & OPpCONST_STRICT)
2358         {
2359             no_bareword_allowed((OP*)key_op);
2360         }
2361 
2362         /* Make the CONST have a shared SV */
2363         if (   !SvIsCOW_shared_hash(sv = *svp)
2364             && SvTYPE(sv) < SVt_PVMG
2365             && SvOK(sv)
2366             && !SvROK(sv))
2367         {
2368             SSize_t keylen;
2369             const char * const key = SvPV_const(sv, *(STRLEN*)&keylen);
2370             SV *nsv = newSVpvn_share(key, SvUTF8(sv) ? -keylen : keylen, 0);
2371             SvREFCNT_dec_NN(sv);
2372             *svp = nsv;
2373         }
2374 
2375         if (   check_fields
2376             && !hv_fetch_ent(GvHV(*fields), *svp, FALSE, 0))
2377         {
2378             Perl_croak(aTHX_ "No such class field \"%"SVf"\" "
2379                         "in variable %"PNf" of type %"HEKf,
2380                         SVfARG(*svp), PNfARG(lexname),
2381                         HEKfARG(HvNAME_HEK(PadnameTYPE(lexname))));
2382         }
2383     }
2384 }
2385 
2386 
2387 /*
2388 =for apidoc finalize_optree
2389 
2390 This function finalizes the optree.  Should be called directly after
2391 the complete optree is built.  It does some additional
2392 checking which can't be done in the normal C<ck_>xxx functions and makes
2393 the tree thread-safe.
2394 
2395 =cut
2396 */
2397 void
2398 Perl_finalize_optree(pTHX_ OP* o)
2399 {
2400     PERL_ARGS_ASSERT_FINALIZE_OPTREE;
2401 
2402     ENTER;
2403     SAVEVPTR(PL_curcop);
2404 
2405     finalize_op(o);
2406 
2407     LEAVE;
2408 }
2409 
2410 #ifdef USE_ITHREADS
2411 /* Relocate sv to the pad for thread safety.
2412  * Despite being a "constant", the SV is written to,
2413  * for reference counts, sv_upgrade() etc. */
2414 PERL_STATIC_INLINE void
2415 S_op_relocate_sv(pTHX_ SV** svp, PADOFFSET* targp)
2416 {
2417     PADOFFSET ix;
2418     PERL_ARGS_ASSERT_OP_RELOCATE_SV;
2419     if (!*svp) return;
2420     ix = pad_alloc(OP_CONST, SVf_READONLY);
2421     SvREFCNT_dec(PAD_SVl(ix));
2422     PAD_SETSV(ix, *svp);
2423     /* XXX I don't know how this isn't readonly already. */
2424     if (!SvIsCOW(PAD_SVl(ix))) SvREADONLY_on(PAD_SVl(ix));
2425     *svp = NULL;
2426     *targp = ix;
2427 }
2428 #endif
2429 
2430 
2431 STATIC void
2432 S_finalize_op(pTHX_ OP* o)
2433 {
2434     PERL_ARGS_ASSERT_FINALIZE_OP;
2435 
2436 
2437     switch (o->op_type) {
2438     case OP_NEXTSTATE:
2439     case OP_DBSTATE:
2440 	PL_curcop = ((COP*)o);		/* for warnings */
2441 	break;
2442     case OP_EXEC:
2443         if (OpHAS_SIBLING(o)) {
2444             OP *sib = OpSIBLING(o);
2445             if ((  sib->op_type == OP_NEXTSTATE || sib->op_type == OP_DBSTATE)
2446                 && ckWARN(WARN_EXEC)
2447                 && OpHAS_SIBLING(sib))
2448             {
2449 		    const OPCODE type = OpSIBLING(sib)->op_type;
2450 		    if (type != OP_EXIT && type != OP_WARN && type != OP_DIE) {
2451 			const line_t oldline = CopLINE(PL_curcop);
2452 			CopLINE_set(PL_curcop, CopLINE((COP*)sib));
2453 			Perl_warner(aTHX_ packWARN(WARN_EXEC),
2454 			    "Statement unlikely to be reached");
2455 			Perl_warner(aTHX_ packWARN(WARN_EXEC),
2456 			    "\t(Maybe you meant system() when you said exec()?)\n");
2457 			CopLINE_set(PL_curcop, oldline);
2458 		    }
2459 	    }
2460         }
2461 	break;
2462 
2463     case OP_GV:
2464 	if ((o->op_private & OPpEARLY_CV) && ckWARN(WARN_PROTOTYPE)) {
2465 	    GV * const gv = cGVOPo_gv;
2466 	    if (SvTYPE(gv) == SVt_PVGV && GvCV(gv) && SvPVX_const(GvCV(gv))) {
2467 		/* XXX could check prototype here instead of just carping */
2468 		SV * const sv = sv_newmortal();
2469 		gv_efullname3(sv, gv, NULL);
2470 		Perl_warner(aTHX_ packWARN(WARN_PROTOTYPE),
2471 		    "%"SVf"() called too early to check prototype",
2472 		    SVfARG(sv));
2473 	    }
2474 	}
2475 	break;
2476 
2477     case OP_CONST:
2478 	if (cSVOPo->op_private & OPpCONST_STRICT)
2479 	    no_bareword_allowed(o);
2480 	/* FALLTHROUGH */
2481 #ifdef USE_ITHREADS
2482     case OP_HINTSEVAL:
2483         op_relocate_sv(&cSVOPo->op_sv, &o->op_targ);
2484 #endif
2485         break;
2486 
2487 #ifdef USE_ITHREADS
2488     /* Relocate all the METHOP's SVs to the pad for thread safety. */
2489     case OP_METHOD_NAMED:
2490     case OP_METHOD_SUPER:
2491     case OP_METHOD_REDIR:
2492     case OP_METHOD_REDIR_SUPER:
2493         op_relocate_sv(&cMETHOPx(o)->op_u.op_meth_sv, &o->op_targ);
2494         break;
2495 #endif
2496 
2497     case OP_HELEM: {
2498 	UNOP *rop;
2499 	SVOP *key_op;
2500 	OP *kid;
2501 
2502 	if ((key_op = cSVOPx(((BINOP*)o)->op_last))->op_type != OP_CONST)
2503 	    break;
2504 
2505 	rop = (UNOP*)((BINOP*)o)->op_first;
2506 
2507 	goto check_keys;
2508 
2509     case OP_HSLICE:
2510 	S_scalar_slice_warning(aTHX_ o);
2511         /* FALLTHROUGH */
2512 
2513     case OP_KVHSLICE:
2514         kid = OpSIBLING(cLISTOPo->op_first);
2515 	if (/* I bet there's always a pushmark... */
2516 	    OP_TYPE_ISNT_AND_WASNT_NN(kid, OP_LIST)
2517 	    && OP_TYPE_ISNT_NN(kid, OP_CONST))
2518         {
2519 	    break;
2520         }
2521 
2522 	key_op = (SVOP*)(kid->op_type == OP_CONST
2523 				? kid
2524 				: OpSIBLING(kLISTOP->op_first));
2525 
2526 	rop = (UNOP*)((LISTOP*)o)->op_last;
2527 
2528       check_keys:
2529         if (o->op_private & OPpLVAL_INTRO || rop->op_type != OP_RV2HV)
2530             rop = NULL;
2531         S_check_hash_fields_and_hekify(aTHX_ rop, key_op);
2532 	break;
2533     }
2534     case OP_ASLICE:
2535 	S_scalar_slice_warning(aTHX_ o);
2536 	break;
2537 
2538     case OP_SUBST: {
2539 	if (cPMOPo->op_pmreplrootu.op_pmreplroot)
2540 	    finalize_op(cPMOPo->op_pmreplrootu.op_pmreplroot);
2541 	break;
2542     }
2543     default:
2544 	break;
2545     }
2546 
2547     if (o->op_flags & OPf_KIDS) {
2548 	OP *kid;
2549 
2550 #ifdef DEBUGGING
2551         /* check that op_last points to the last sibling, and that
2552          * the last op_sibling/op_sibparent field points back to the
2553          * parent, and that the only ops with KIDS are those which are
2554          * entitled to them */
2555         U32 type = o->op_type;
2556         U32 family;
2557         bool has_last;
2558 
2559         if (type == OP_NULL) {
2560             type = o->op_targ;
2561             /* ck_glob creates a null UNOP with ex-type GLOB
2562              * (which is a list op. So pretend it wasn't a listop */
2563             if (type == OP_GLOB)
2564                 type = OP_NULL;
2565         }
2566         family = PL_opargs[type] & OA_CLASS_MASK;
2567 
2568         has_last = (   family == OA_BINOP
2569                     || family == OA_LISTOP
2570                     || family == OA_PMOP
2571                     || family == OA_LOOP
2572                    );
2573         assert(  has_last /* has op_first and op_last, or ...
2574               ... has (or may have) op_first: */
2575               || family == OA_UNOP
2576               || family == OA_UNOP_AUX
2577               || family == OA_LOGOP
2578               || family == OA_BASEOP_OR_UNOP
2579               || family == OA_FILESTATOP
2580               || family == OA_LOOPEXOP
2581               || family == OA_METHOP
2582               /* I don't know why SASSIGN is tagged as OA_BASEOP - DAPM */
2583               || type == OP_SASSIGN
2584               || type == OP_CUSTOM
2585               || type == OP_NULL /* new_logop does this */
2586               );
2587 
2588         for (kid = cUNOPo->op_first; kid; kid = OpSIBLING(kid)) {
2589 #  ifdef PERL_OP_PARENT
2590             if (!OpHAS_SIBLING(kid)) {
2591                 if (has_last)
2592                     assert(kid == cLISTOPo->op_last);
2593                 assert(kid->op_sibparent == o);
2594             }
2595 #  else
2596             if (has_last && !OpHAS_SIBLING(kid))
2597                 assert(kid == cLISTOPo->op_last);
2598 #  endif
2599         }
2600 #endif
2601 
2602 	for (kid = cUNOPo->op_first; kid; kid = OpSIBLING(kid))
2603 	    finalize_op(kid);
2604     }
2605 }
2606 
2607 /*
2608 =for apidoc Amx|OP *|op_lvalue|OP *o|I32 type
2609 
2610 Propagate lvalue ("modifiable") context to an op and its children.
2611 C<type> represents the context type, roughly based on the type of op that
2612 would do the modifying, although C<local()> is represented by C<OP_NULL>,
2613 because it has no op type of its own (it is signalled by a flag on
2614 the lvalue op).
2615 
2616 This function detects things that can't be modified, such as C<$x+1>, and
2617 generates errors for them.  For example, C<$x+1 = 2> would cause it to be
2618 called with an op of type C<OP_ADD> and a C<type> argument of C<OP_SASSIGN>.
2619 
2620 It also flags things that need to behave specially in an lvalue context,
2621 such as C<$$x = 5> which might have to vivify a reference in C<$x>.
2622 
2623 =cut
2624 */
2625 
2626 static void
2627 S_mark_padname_lvalue(pTHX_ PADNAME *pn)
2628 {
2629     CV *cv = PL_compcv;
2630     PadnameLVALUE_on(pn);
2631     while (PadnameOUTER(pn) && PARENT_PAD_INDEX(pn)) {
2632 	cv = CvOUTSIDE(cv);
2633         /* RT #127786: cv can be NULL due to an eval within the DB package
2634          * called from an anon sub - anon subs don't have CvOUTSIDE() set
2635          * unless they contain an eval, but calling eval within DB
2636          * pretends the eval was done in the caller's scope.
2637          */
2638 	if (!cv)
2639             break;
2640 	assert(CvPADLIST(cv));
2641 	pn =
2642 	   PadlistNAMESARRAY(CvPADLIST(cv))[PARENT_PAD_INDEX(pn)];
2643 	assert(PadnameLEN(pn));
2644 	PadnameLVALUE_on(pn);
2645     }
2646 }
2647 
2648 static bool
2649 S_vivifies(const OPCODE type)
2650 {
2651     switch(type) {
2652     case OP_RV2AV:     case   OP_ASLICE:
2653     case OP_RV2HV:     case OP_KVASLICE:
2654     case OP_RV2SV:     case   OP_HSLICE:
2655     case OP_AELEMFAST: case OP_KVHSLICE:
2656     case OP_HELEM:
2657     case OP_AELEM:
2658 	return 1;
2659     }
2660     return 0;
2661 }
2662 
2663 static void
2664 S_lvref(pTHX_ OP *o, I32 type)
2665 {
2666     dVAR;
2667     OP *kid;
2668     switch (o->op_type) {
2669     case OP_COND_EXPR:
2670 	for (kid = OpSIBLING(cUNOPo->op_first); kid;
2671 	     kid = OpSIBLING(kid))
2672 	    S_lvref(aTHX_ kid, type);
2673 	/* FALLTHROUGH */
2674     case OP_PUSHMARK:
2675 	return;
2676     case OP_RV2AV:
2677 	if (cUNOPo->op_first->op_type != OP_GV) goto badref;
2678 	o->op_flags |= OPf_STACKED;
2679 	if (o->op_flags & OPf_PARENS) {
2680 	    if (o->op_private & OPpLVAL_INTRO) {
2681 		 yyerror(Perl_form(aTHX_ "Can't modify reference to "
2682 		      "localized parenthesized array in list assignment"));
2683 		return;
2684 	    }
2685 	  slurpy:
2686             OpTYPE_set(o, OP_LVAVREF);
2687 	    o->op_private &= OPpLVAL_INTRO|OPpPAD_STATE;
2688 	    o->op_flags |= OPf_MOD|OPf_REF;
2689 	    return;
2690 	}
2691 	o->op_private |= OPpLVREF_AV;
2692 	goto checkgv;
2693     case OP_RV2CV:
2694 	kid = cUNOPo->op_first;
2695 	if (kid->op_type == OP_NULL)
2696 	    kid = cUNOPx(OpSIBLING(kUNOP->op_first))
2697 		->op_first;
2698 	o->op_private = OPpLVREF_CV;
2699 	if (kid->op_type == OP_GV)
2700 	    o->op_flags |= OPf_STACKED;
2701 	else if (kid->op_type == OP_PADCV) {
2702 	    o->op_targ = kid->op_targ;
2703 	    kid->op_targ = 0;
2704 	    op_free(cUNOPo->op_first);
2705 	    cUNOPo->op_first = NULL;
2706 	    o->op_flags &=~ OPf_KIDS;
2707 	}
2708 	else goto badref;
2709 	break;
2710     case OP_RV2HV:
2711 	if (o->op_flags & OPf_PARENS) {
2712 	  parenhash:
2713 	    yyerror(Perl_form(aTHX_ "Can't modify reference to "
2714 				 "parenthesized hash in list assignment"));
2715 		return;
2716 	}
2717 	o->op_private |= OPpLVREF_HV;
2718 	/* FALLTHROUGH */
2719     case OP_RV2SV:
2720       checkgv:
2721 	if (cUNOPo->op_first->op_type != OP_GV) goto badref;
2722 	o->op_flags |= OPf_STACKED;
2723 	break;
2724     case OP_PADHV:
2725 	if (o->op_flags & OPf_PARENS) goto parenhash;
2726 	o->op_private |= OPpLVREF_HV;
2727 	/* FALLTHROUGH */
2728     case OP_PADSV:
2729 	PAD_COMPNAME_GEN_set(o->op_targ, PERL_INT_MAX);
2730 	break;
2731     case OP_PADAV:
2732 	PAD_COMPNAME_GEN_set(o->op_targ, PERL_INT_MAX);
2733 	if (o->op_flags & OPf_PARENS) goto slurpy;
2734 	o->op_private |= OPpLVREF_AV;
2735 	break;
2736     case OP_AELEM:
2737     case OP_HELEM:
2738 	o->op_private |= OPpLVREF_ELEM;
2739 	o->op_flags   |= OPf_STACKED;
2740 	break;
2741     case OP_ASLICE:
2742     case OP_HSLICE:
2743         OpTYPE_set(o, OP_LVREFSLICE);
2744 	o->op_private &= OPpLVAL_INTRO|OPpLVREF_ELEM;
2745 	return;
2746     case OP_NULL:
2747 	if (o->op_flags & OPf_SPECIAL)		/* do BLOCK */
2748 	    goto badref;
2749 	else if (!(o->op_flags & OPf_KIDS))
2750 	    return;
2751 	if (o->op_targ != OP_LIST) {
2752 	    S_lvref(aTHX_ cBINOPo->op_first, type);
2753 	    return;
2754 	}
2755 	/* FALLTHROUGH */
2756     case OP_LIST:
2757 	for (kid = cLISTOPo->op_first; kid; kid = OpSIBLING(kid)) {
2758 	    assert((kid->op_flags & OPf_WANT) != OPf_WANT_VOID);
2759 	    S_lvref(aTHX_ kid, type);
2760 	}
2761 	return;
2762     case OP_STUB:
2763 	if (o->op_flags & OPf_PARENS)
2764 	    return;
2765 	/* FALLTHROUGH */
2766     default:
2767       badref:
2768 	/* diag_listed_as: Can't modify reference to %s in %s assignment */
2769 	yyerror(Perl_form(aTHX_ "Can't modify reference to %s in %s",
2770 		     o->op_type == OP_NULL && o->op_flags & OPf_SPECIAL
2771 		      ? "do block"
2772 		      : OP_DESC(o),
2773 		     PL_op_desc[type]));
2774     }
2775     OpTYPE_set(o, OP_LVREF);
2776     o->op_private &=
2777 	OPpLVAL_INTRO|OPpLVREF_ELEM|OPpLVREF_TYPE|OPpPAD_STATE;
2778     if (type == OP_ENTERLOOP)
2779 	o->op_private |= OPpLVREF_ITER;
2780 }
2781 
2782 OP *
2783 Perl_op_lvalue_flags(pTHX_ OP *o, I32 type, U32 flags)
2784 {
2785     dVAR;
2786     OP *kid;
2787     /* -1 = error on localize, 0 = ignore localize, 1 = ok to localize */
2788     int localize = -1;
2789 
2790     if (!o || (PL_parser && PL_parser->error_count))
2791 	return o;
2792 
2793     if ((o->op_private & OPpTARGET_MY)
2794 	&& (PL_opargs[o->op_type] & OA_TARGLEX))/* OPp share the meaning */
2795     {
2796 	return o;
2797     }
2798 
2799     assert( (o->op_flags & OPf_WANT) != OPf_WANT_VOID );
2800 
2801     if (type == OP_PRTF || type == OP_SPRINTF) type = OP_ENTERSUB;
2802 
2803     switch (o->op_type) {
2804     case OP_UNDEF:
2805 	PL_modcount++;
2806 	return o;
2807     case OP_STUB:
2808 	if ((o->op_flags & OPf_PARENS))
2809 	    break;
2810 	goto nomod;
2811     case OP_ENTERSUB:
2812 	if ((type == OP_UNDEF || type == OP_REFGEN || type == OP_LOCK) &&
2813 	    !(o->op_flags & OPf_STACKED)) {
2814             OpTYPE_set(o, OP_RV2CV);		/* entersub => rv2cv */
2815 	    assert(cUNOPo->op_first->op_type == OP_NULL);
2816 	    op_null(((LISTOP*)cUNOPo->op_first)->op_first);/* disable pushmark */
2817 	    break;
2818 	}
2819 	else {				/* lvalue subroutine call */
2820 	    o->op_private |= OPpLVAL_INTRO;
2821 	    PL_modcount = RETURN_UNLIMITED_NUMBER;
2822 	    if (type == OP_GREPSTART || type == OP_ENTERSUB
2823 	     || type == OP_REFGEN    || type == OP_LEAVESUBLV) {
2824 		/* Potential lvalue context: */
2825 		o->op_private |= OPpENTERSUB_INARGS;
2826 		break;
2827 	    }
2828 	    else {                      /* Compile-time error message: */
2829 		OP *kid = cUNOPo->op_first;
2830 		CV *cv;
2831 		GV *gv;
2832                 SV *namesv;
2833 
2834 		if (kid->op_type != OP_PUSHMARK) {
2835 		    if (kid->op_type != OP_NULL || kid->op_targ != OP_LIST)
2836 			Perl_croak(aTHX_
2837 				"panic: unexpected lvalue entersub "
2838 				"args: type/targ %ld:%"UVuf,
2839 				(long)kid->op_type, (UV)kid->op_targ);
2840 		    kid = kLISTOP->op_first;
2841 		}
2842 		while (OpHAS_SIBLING(kid))
2843 		    kid = OpSIBLING(kid);
2844 		if (!(kid->op_type == OP_NULL && kid->op_targ == OP_RV2CV)) {
2845 		    break;	/* Postpone until runtime */
2846 		}
2847 
2848 		kid = kUNOP->op_first;
2849 		if (kid->op_type == OP_NULL && kid->op_targ == OP_RV2SV)
2850 		    kid = kUNOP->op_first;
2851 		if (kid->op_type == OP_NULL)
2852 		    Perl_croak(aTHX_
2853 			       "Unexpected constant lvalue entersub "
2854 			       "entry via type/targ %ld:%"UVuf,
2855 			       (long)kid->op_type, (UV)kid->op_targ);
2856 		if (kid->op_type != OP_GV) {
2857 		    break;
2858 		}
2859 
2860 		gv = kGVOP_gv;
2861 		cv = isGV(gv)
2862 		    ? GvCV(gv)
2863 		    : SvROK(gv) && SvTYPE(SvRV(gv)) == SVt_PVCV
2864 			? MUTABLE_CV(SvRV(gv))
2865 			: NULL;
2866 		if (!cv)
2867 		    break;
2868 		if (CvLVALUE(cv))
2869 		    break;
2870                 if (flags & OP_LVALUE_NO_CROAK)
2871                     return NULL;
2872 
2873                 namesv = cv_name(cv, NULL, 0);
2874                 yyerror_pv(Perl_form(aTHX_ "Can't modify non-lvalue "
2875                                      "subroutine call of &%"SVf" in %s",
2876                                      SVfARG(namesv), PL_op_desc[type]),
2877                            SvUTF8(namesv));
2878                 return o;
2879 	    }
2880 	}
2881 	/* FALLTHROUGH */
2882     default:
2883       nomod:
2884 	if (flags & OP_LVALUE_NO_CROAK) return NULL;
2885 	/* grep, foreach, subcalls, refgen */
2886 	if (type == OP_GREPSTART || type == OP_ENTERSUB
2887 	 || type == OP_REFGEN    || type == OP_LEAVESUBLV)
2888 	    break;
2889 	yyerror(Perl_form(aTHX_ "Can't modify %s in %s",
2890 		     (o->op_type == OP_NULL && (o->op_flags & OPf_SPECIAL)
2891 		      ? "do block"
2892 		      : OP_DESC(o)),
2893 		     type ? PL_op_desc[type] : "local"));
2894 	return o;
2895 
2896     case OP_PREINC:
2897     case OP_PREDEC:
2898     case OP_POW:
2899     case OP_MULTIPLY:
2900     case OP_DIVIDE:
2901     case OP_MODULO:
2902     case OP_ADD:
2903     case OP_SUBTRACT:
2904     case OP_CONCAT:
2905     case OP_LEFT_SHIFT:
2906     case OP_RIGHT_SHIFT:
2907     case OP_BIT_AND:
2908     case OP_BIT_XOR:
2909     case OP_BIT_OR:
2910     case OP_I_MULTIPLY:
2911     case OP_I_DIVIDE:
2912     case OP_I_MODULO:
2913     case OP_I_ADD:
2914     case OP_I_SUBTRACT:
2915 	if (!(o->op_flags & OPf_STACKED))
2916 	    goto nomod;
2917 	PL_modcount++;
2918 	break;
2919 
2920     case OP_REPEAT:
2921 	if (o->op_flags & OPf_STACKED) {
2922 	    PL_modcount++;
2923 	    break;
2924 	}
2925 	if (!(o->op_private & OPpREPEAT_DOLIST))
2926 	    goto nomod;
2927 	else {
2928 	    const I32 mods = PL_modcount;
2929 	    modkids(cBINOPo->op_first, type);
2930 	    if (type != OP_AASSIGN)
2931 		goto nomod;
2932 	    kid = cBINOPo->op_last;
2933 	    if (kid->op_type == OP_CONST && SvIOK(kSVOP_sv)) {
2934 		const IV iv = SvIV(kSVOP_sv);
2935 		if (PL_modcount != RETURN_UNLIMITED_NUMBER)
2936 		    PL_modcount =
2937 			mods + (PL_modcount - mods) * (iv < 0 ? 0 : iv);
2938 	    }
2939 	    else
2940 		PL_modcount = RETURN_UNLIMITED_NUMBER;
2941 	}
2942 	break;
2943 
2944     case OP_COND_EXPR:
2945 	localize = 1;
2946 	for (kid = OpSIBLING(cUNOPo->op_first); kid; kid = OpSIBLING(kid))
2947 	    op_lvalue(kid, type);
2948 	break;
2949 
2950     case OP_RV2AV:
2951     case OP_RV2HV:
2952 	if (type == OP_REFGEN && o->op_flags & OPf_PARENS) {
2953            PL_modcount = RETURN_UNLIMITED_NUMBER;
2954 	    return o;		/* Treat \(@foo) like ordinary list. */
2955 	}
2956 	/* FALLTHROUGH */
2957     case OP_RV2GV:
2958 	if (scalar_mod_type(o, type))
2959 	    goto nomod;
2960 	ref(cUNOPo->op_first, o->op_type);
2961 	/* FALLTHROUGH */
2962     case OP_ASLICE:
2963     case OP_HSLICE:
2964 	localize = 1;
2965 	/* FALLTHROUGH */
2966     case OP_AASSIGN:
2967 	/* Do not apply the lvsub flag for rv2[ah]v in scalar context.  */
2968 	if (type == OP_LEAVESUBLV && (
2969 		(o->op_type != OP_RV2AV && o->op_type != OP_RV2HV)
2970 	     || (o->op_flags & OPf_WANT) != OPf_WANT_SCALAR
2971 	   ))
2972 	    o->op_private |= OPpMAYBE_LVSUB;
2973 	/* FALLTHROUGH */
2974     case OP_NEXTSTATE:
2975     case OP_DBSTATE:
2976        PL_modcount = RETURN_UNLIMITED_NUMBER;
2977 	break;
2978     case OP_KVHSLICE:
2979     case OP_KVASLICE:
2980 	if (type == OP_LEAVESUBLV)
2981 	    o->op_private |= OPpMAYBE_LVSUB;
2982         goto nomod;
2983     case OP_AV2ARYLEN:
2984 	PL_hints |= HINT_BLOCK_SCOPE;
2985 	if (type == OP_LEAVESUBLV)
2986 	    o->op_private |= OPpMAYBE_LVSUB;
2987 	PL_modcount++;
2988 	break;
2989     case OP_RV2SV:
2990 	ref(cUNOPo->op_first, o->op_type);
2991 	localize = 1;
2992 	/* FALLTHROUGH */
2993     case OP_GV:
2994 	PL_hints |= HINT_BLOCK_SCOPE;
2995         /* FALLTHROUGH */
2996     case OP_SASSIGN:
2997     case OP_ANDASSIGN:
2998     case OP_ORASSIGN:
2999     case OP_DORASSIGN:
3000 	PL_modcount++;
3001 	break;
3002 
3003     case OP_AELEMFAST:
3004     case OP_AELEMFAST_LEX:
3005 	localize = -1;
3006 	PL_modcount++;
3007 	break;
3008 
3009     case OP_PADAV:
3010     case OP_PADHV:
3011        PL_modcount = RETURN_UNLIMITED_NUMBER;
3012 	if (type == OP_REFGEN && o->op_flags & OPf_PARENS)
3013 	    return o;		/* Treat \(@foo) like ordinary list. */
3014 	if (scalar_mod_type(o, type))
3015 	    goto nomod;
3016 	if ((o->op_flags & OPf_WANT) != OPf_WANT_SCALAR
3017 	  && type == OP_LEAVESUBLV)
3018 	    o->op_private |= OPpMAYBE_LVSUB;
3019 	/* FALLTHROUGH */
3020     case OP_PADSV:
3021 	PL_modcount++;
3022 	if (!type) /* local() */
3023 	    Perl_croak(aTHX_ "Can't localize lexical variable %"PNf,
3024 			      PNfARG(PAD_COMPNAME(o->op_targ)));
3025 	if (!(o->op_private & OPpLVAL_INTRO)
3026 	 || (  type != OP_SASSIGN && type != OP_AASSIGN
3027 	    && PadnameIsSTATE(PAD_COMPNAME_SV(o->op_targ))  ))
3028 	    S_mark_padname_lvalue(aTHX_ PAD_COMPNAME_SV(o->op_targ));
3029 	break;
3030 
3031     case OP_PUSHMARK:
3032 	localize = 0;
3033 	break;
3034 
3035     case OP_KEYS:
3036 	if (type != OP_SASSIGN && type != OP_LEAVESUBLV)
3037 	    goto nomod;
3038 	goto lvalue_func;
3039     case OP_SUBSTR:
3040 	if (o->op_private == 4) /* don't allow 4 arg substr as lvalue */
3041 	    goto nomod;
3042 	/* FALLTHROUGH */
3043     case OP_POS:
3044     case OP_VEC:
3045       lvalue_func:
3046 	if (type == OP_LEAVESUBLV)
3047 	    o->op_private |= OPpMAYBE_LVSUB;
3048 	if (o->op_flags & OPf_KIDS)
3049 	    op_lvalue(OpSIBLING(cBINOPo->op_first), type);
3050 	break;
3051 
3052     case OP_AELEM:
3053     case OP_HELEM:
3054 	ref(cBINOPo->op_first, o->op_type);
3055 	if (type == OP_ENTERSUB &&
3056 	     !(o->op_private & (OPpLVAL_INTRO | OPpDEREF)))
3057 	    o->op_private |= OPpLVAL_DEFER;
3058 	if (type == OP_LEAVESUBLV)
3059 	    o->op_private |= OPpMAYBE_LVSUB;
3060 	localize = 1;
3061 	PL_modcount++;
3062 	break;
3063 
3064     case OP_LEAVE:
3065     case OP_LEAVELOOP:
3066 	o->op_private |= OPpLVALUE;
3067         /* FALLTHROUGH */
3068     case OP_SCOPE:
3069     case OP_ENTER:
3070     case OP_LINESEQ:
3071 	localize = 0;
3072 	if (o->op_flags & OPf_KIDS)
3073 	    op_lvalue(cLISTOPo->op_last, type);
3074 	break;
3075 
3076     case OP_NULL:
3077 	localize = 0;
3078 	if (o->op_flags & OPf_SPECIAL)		/* do BLOCK */
3079 	    goto nomod;
3080 	else if (!(o->op_flags & OPf_KIDS))
3081 	    break;
3082 	if (o->op_targ != OP_LIST) {
3083 	    op_lvalue(cBINOPo->op_first, type);
3084 	    break;
3085 	}
3086 	/* FALLTHROUGH */
3087     case OP_LIST:
3088 	localize = 0;
3089 	for (kid = cLISTOPo->op_first; kid; kid = OpSIBLING(kid))
3090 	    /* elements might be in void context because the list is
3091 	       in scalar context or because they are attribute sub calls */
3092 	    if ( (kid->op_flags & OPf_WANT) != OPf_WANT_VOID )
3093 		op_lvalue(kid, type);
3094 	break;
3095 
3096     case OP_COREARGS:
3097 	return o;
3098 
3099     case OP_AND:
3100     case OP_OR:
3101 	if (type == OP_LEAVESUBLV
3102 	 || !S_vivifies(cLOGOPo->op_first->op_type))
3103 	    op_lvalue(cLOGOPo->op_first, type);
3104 	if (type == OP_LEAVESUBLV
3105 	 || !S_vivifies(OpSIBLING(cLOGOPo->op_first)->op_type))
3106 	    op_lvalue(OpSIBLING(cLOGOPo->op_first), type);
3107 	goto nomod;
3108 
3109     case OP_SREFGEN:
3110 	if (type != OP_AASSIGN && type != OP_SASSIGN
3111 	 && type != OP_ENTERLOOP)
3112 	    goto nomod;
3113 	/* Don’t bother applying lvalue context to the ex-list.  */
3114 	kid = cUNOPx(cUNOPo->op_first)->op_first;
3115 	assert (!OpHAS_SIBLING(kid));
3116 	goto kid_2lvref;
3117     case OP_REFGEN:
3118 	if (type != OP_AASSIGN) goto nomod;
3119 	kid = cUNOPo->op_first;
3120       kid_2lvref:
3121 	{
3122 	    const U8 ec = PL_parser ? PL_parser->error_count : 0;
3123 	    S_lvref(aTHX_ kid, type);
3124 	    if (!PL_parser || PL_parser->error_count == ec) {
3125 		if (!FEATURE_REFALIASING_IS_ENABLED)
3126 		    Perl_croak(aTHX_
3127 		       "Experimental aliasing via reference not enabled");
3128 		Perl_ck_warner_d(aTHX_
3129 				 packWARN(WARN_EXPERIMENTAL__REFALIASING),
3130 				"Aliasing via reference is experimental");
3131 	    }
3132 	}
3133 	if (o->op_type == OP_REFGEN)
3134 	    op_null(cUNOPx(cUNOPo->op_first)->op_first); /* pushmark */
3135 	op_null(o);
3136 	return o;
3137 
3138     case OP_SPLIT:
3139 	kid = cLISTOPo->op_first;
3140 	if (kid && kid->op_type == OP_PUSHRE &&
3141 		(  kid->op_targ
3142 		|| o->op_flags & OPf_STACKED
3143 #ifdef USE_ITHREADS
3144 		|| ((PMOP*)kid)->op_pmreplrootu.op_pmtargetoff
3145 #else
3146 		|| ((PMOP*)kid)->op_pmreplrootu.op_pmtargetgv
3147 #endif
3148 	)) {
3149 	    /* This is actually @array = split.  */
3150 	    PL_modcount = RETURN_UNLIMITED_NUMBER;
3151 	    break;
3152 	}
3153 	goto nomod;
3154 
3155     case OP_SCALAR:
3156 	op_lvalue(cUNOPo->op_first, OP_ENTERSUB);
3157 	goto nomod;
3158     }
3159 
3160     /* [20011101.069] File test operators interpret OPf_REF to mean that
3161        their argument is a filehandle; thus \stat(".") should not set
3162        it. AMS 20011102 */
3163     if (type == OP_REFGEN &&
3164         PL_check[o->op_type] == Perl_ck_ftst)
3165         return o;
3166 
3167     if (type != OP_LEAVESUBLV)
3168         o->op_flags |= OPf_MOD;
3169 
3170     if (type == OP_AASSIGN || type == OP_SASSIGN)
3171 	o->op_flags |= OPf_SPECIAL|OPf_REF;
3172     else if (!type) { /* local() */
3173 	switch (localize) {
3174 	case 1:
3175 	    o->op_private |= OPpLVAL_INTRO;
3176 	    o->op_flags &= ~OPf_SPECIAL;
3177 	    PL_hints |= HINT_BLOCK_SCOPE;
3178 	    break;
3179 	case 0:
3180 	    break;
3181 	case -1:
3182 	    Perl_ck_warner(aTHX_ packWARN(WARN_SYNTAX),
3183 			   "Useless localization of %s", OP_DESC(o));
3184 	}
3185     }
3186     else if (type != OP_GREPSTART && type != OP_ENTERSUB
3187              && type != OP_LEAVESUBLV)
3188 	o->op_flags |= OPf_REF;
3189     return o;
3190 }
3191 
3192 STATIC bool
3193 S_scalar_mod_type(const OP *o, I32 type)
3194 {
3195     switch (type) {
3196     case OP_POS:
3197     case OP_SASSIGN:
3198 	if (o && o->op_type == OP_RV2GV)
3199 	    return FALSE;
3200 	/* FALLTHROUGH */
3201     case OP_PREINC:
3202     case OP_PREDEC:
3203     case OP_POSTINC:
3204     case OP_POSTDEC:
3205     case OP_I_PREINC:
3206     case OP_I_PREDEC:
3207     case OP_I_POSTINC:
3208     case OP_I_POSTDEC:
3209     case OP_POW:
3210     case OP_MULTIPLY:
3211     case OP_DIVIDE:
3212     case OP_MODULO:
3213     case OP_REPEAT:
3214     case OP_ADD:
3215     case OP_SUBTRACT:
3216     case OP_I_MULTIPLY:
3217     case OP_I_DIVIDE:
3218     case OP_I_MODULO:
3219     case OP_I_ADD:
3220     case OP_I_SUBTRACT:
3221     case OP_LEFT_SHIFT:
3222     case OP_RIGHT_SHIFT:
3223     case OP_BIT_AND:
3224     case OP_BIT_XOR:
3225     case OP_BIT_OR:
3226     case OP_CONCAT:
3227     case OP_SUBST:
3228     case OP_TRANS:
3229     case OP_TRANSR:
3230     case OP_READ:
3231     case OP_SYSREAD:
3232     case OP_RECV:
3233     case OP_ANDASSIGN:
3234     case OP_ORASSIGN:
3235     case OP_DORASSIGN:
3236 	return TRUE;
3237     default:
3238 	return FALSE;
3239     }
3240 }
3241 
3242 STATIC bool
3243 S_is_handle_constructor(const OP *o, I32 numargs)
3244 {
3245     PERL_ARGS_ASSERT_IS_HANDLE_CONSTRUCTOR;
3246 
3247     switch (o->op_type) {
3248     case OP_PIPE_OP:
3249     case OP_SOCKPAIR:
3250 	if (numargs == 2)
3251 	    return TRUE;
3252 	/* FALLTHROUGH */
3253     case OP_SYSOPEN:
3254     case OP_OPEN:
3255     case OP_SELECT:		/* XXX c.f. SelectSaver.pm */
3256     case OP_SOCKET:
3257     case OP_OPEN_DIR:
3258     case OP_ACCEPT:
3259 	if (numargs == 1)
3260 	    return TRUE;
3261 	/* FALLTHROUGH */
3262     default:
3263 	return FALSE;
3264     }
3265 }
3266 
3267 static OP *
3268 S_refkids(pTHX_ OP *o, I32 type)
3269 {
3270     if (o && o->op_flags & OPf_KIDS) {
3271         OP *kid;
3272         for (kid = cLISTOPo->op_first; kid; kid = OpSIBLING(kid))
3273 	    ref(kid, type);
3274     }
3275     return o;
3276 }
3277 
3278 OP *
3279 Perl_doref(pTHX_ OP *o, I32 type, bool set_op_ref)
3280 {
3281     dVAR;
3282     OP *kid;
3283 
3284     PERL_ARGS_ASSERT_DOREF;
3285 
3286     if (PL_parser && PL_parser->error_count)
3287 	return o;
3288 
3289     switch (o->op_type) {
3290     case OP_ENTERSUB:
3291 	if ((type == OP_EXISTS || type == OP_DEFINED) &&
3292 	    !(o->op_flags & OPf_STACKED)) {
3293             OpTYPE_set(o, OP_RV2CV);             /* entersub => rv2cv */
3294 	    assert(cUNOPo->op_first->op_type == OP_NULL);
3295 	    op_null(((LISTOP*)cUNOPo->op_first)->op_first);	/* disable pushmark */
3296 	    o->op_flags |= OPf_SPECIAL;
3297 	}
3298 	else if (type == OP_RV2SV || type == OP_RV2AV || type == OP_RV2HV){
3299 	    o->op_private |= (type == OP_RV2AV ? OPpDEREF_AV
3300 			      : type == OP_RV2HV ? OPpDEREF_HV
3301 			      : OPpDEREF_SV);
3302 	    o->op_flags |= OPf_MOD;
3303 	}
3304 
3305 	break;
3306 
3307     case OP_COND_EXPR:
3308 	for (kid = OpSIBLING(cUNOPo->op_first); kid; kid = OpSIBLING(kid))
3309 	    doref(kid, type, set_op_ref);
3310 	break;
3311     case OP_RV2SV:
3312 	if (type == OP_DEFINED)
3313 	    o->op_flags |= OPf_SPECIAL;		/* don't create GV */
3314 	doref(cUNOPo->op_first, o->op_type, set_op_ref);
3315 	/* FALLTHROUGH */
3316     case OP_PADSV:
3317 	if (type == OP_RV2SV || type == OP_RV2AV || type == OP_RV2HV) {
3318 	    o->op_private |= (type == OP_RV2AV ? OPpDEREF_AV
3319 			      : type == OP_RV2HV ? OPpDEREF_HV
3320 			      : OPpDEREF_SV);
3321 	    o->op_flags |= OPf_MOD;
3322 	}
3323 	break;
3324 
3325     case OP_RV2AV:
3326     case OP_RV2HV:
3327 	if (set_op_ref)
3328 	    o->op_flags |= OPf_REF;
3329 	/* FALLTHROUGH */
3330     case OP_RV2GV:
3331 	if (type == OP_DEFINED)
3332 	    o->op_flags |= OPf_SPECIAL;		/* don't create GV */
3333 	doref(cUNOPo->op_first, o->op_type, set_op_ref);
3334 	break;
3335 
3336     case OP_PADAV:
3337     case OP_PADHV:
3338 	if (set_op_ref)
3339 	    o->op_flags |= OPf_REF;
3340 	break;
3341 
3342     case OP_SCALAR:
3343     case OP_NULL:
3344 	if (!(o->op_flags & OPf_KIDS) || type == OP_DEFINED)
3345 	    break;
3346 	doref(cBINOPo->op_first, type, set_op_ref);
3347 	break;
3348     case OP_AELEM:
3349     case OP_HELEM:
3350 	doref(cBINOPo->op_first, o->op_type, set_op_ref);
3351 	if (type == OP_RV2SV || type == OP_RV2AV || type == OP_RV2HV) {
3352 	    o->op_private |= (type == OP_RV2AV ? OPpDEREF_AV
3353 			      : type == OP_RV2HV ? OPpDEREF_HV
3354 			      : OPpDEREF_SV);
3355 	    o->op_flags |= OPf_MOD;
3356 	}
3357 	break;
3358 
3359     case OP_SCOPE:
3360     case OP_LEAVE:
3361 	set_op_ref = FALSE;
3362 	/* FALLTHROUGH */
3363     case OP_ENTER:
3364     case OP_LIST:
3365 	if (!(o->op_flags & OPf_KIDS))
3366 	    break;
3367 	doref(cLISTOPo->op_last, type, set_op_ref);
3368 	break;
3369     default:
3370 	break;
3371     }
3372     return scalar(o);
3373 
3374 }
3375 
3376 STATIC OP *
3377 S_dup_attrlist(pTHX_ OP *o)
3378 {
3379     OP *rop;
3380 
3381     PERL_ARGS_ASSERT_DUP_ATTRLIST;
3382 
3383     /* An attrlist is either a simple OP_CONST or an OP_LIST with kids,
3384      * where the first kid is OP_PUSHMARK and the remaining ones
3385      * are OP_CONST.  We need to push the OP_CONST values.
3386      */
3387     if (o->op_type == OP_CONST)
3388 	rop = newSVOP(OP_CONST, o->op_flags, SvREFCNT_inc_NN(cSVOPo->op_sv));
3389     else {
3390 	assert((o->op_type == OP_LIST) && (o->op_flags & OPf_KIDS));
3391 	rop = NULL;
3392 	for (o = cLISTOPo->op_first; o; o = OpSIBLING(o)) {
3393 	    if (o->op_type == OP_CONST)
3394 		rop = op_append_elem(OP_LIST, rop,
3395 				  newSVOP(OP_CONST, o->op_flags,
3396 					  SvREFCNT_inc_NN(cSVOPo->op_sv)));
3397 	}
3398     }
3399     return rop;
3400 }
3401 
3402 STATIC void
3403 S_apply_attrs(pTHX_ HV *stash, SV *target, OP *attrs)
3404 {
3405     PERL_ARGS_ASSERT_APPLY_ATTRS;
3406     {
3407         SV * const stashsv = newSVhek(HvNAME_HEK(stash));
3408 
3409         /* fake up C<use attributes $pkg,$rv,@attrs> */
3410 
3411 #define ATTRSMODULE "attributes"
3412 #define ATTRSMODULE_PM "attributes.pm"
3413 
3414         Perl_load_module(
3415           aTHX_ PERL_LOADMOD_IMPORT_OPS,
3416           newSVpvs(ATTRSMODULE),
3417           NULL,
3418           op_prepend_elem(OP_LIST,
3419                           newSVOP(OP_CONST, 0, stashsv),
3420                           op_prepend_elem(OP_LIST,
3421                                           newSVOP(OP_CONST, 0,
3422                                                   newRV(target)),
3423                                           dup_attrlist(attrs))));
3424     }
3425 }
3426 
3427 STATIC void
3428 S_apply_attrs_my(pTHX_ HV *stash, OP *target, OP *attrs, OP **imopsp)
3429 {
3430     OP *pack, *imop, *arg;
3431     SV *meth, *stashsv, **svp;
3432 
3433     PERL_ARGS_ASSERT_APPLY_ATTRS_MY;
3434 
3435     if (!attrs)
3436 	return;
3437 
3438     assert(target->op_type == OP_PADSV ||
3439 	   target->op_type == OP_PADHV ||
3440 	   target->op_type == OP_PADAV);
3441 
3442     /* Ensure that attributes.pm is loaded. */
3443     /* Don't force the C<use> if we don't need it. */
3444     svp = hv_fetchs(GvHVn(PL_incgv), ATTRSMODULE_PM, FALSE);
3445     if (svp && *svp != &PL_sv_undef)
3446 	NOOP;	/* already in %INC */
3447     else
3448 	Perl_load_module(aTHX_ PERL_LOADMOD_NOIMPORT,
3449 			       newSVpvs(ATTRSMODULE), NULL);
3450 
3451     /* Need package name for method call. */
3452     pack = newSVOP(OP_CONST, 0, newSVpvs(ATTRSMODULE));
3453 
3454     /* Build up the real arg-list. */
3455     stashsv = newSVhek(HvNAME_HEK(stash));
3456 
3457     arg = newOP(OP_PADSV, 0);
3458     arg->op_targ = target->op_targ;
3459     arg = op_prepend_elem(OP_LIST,
3460 		       newSVOP(OP_CONST, 0, stashsv),
3461 		       op_prepend_elem(OP_LIST,
3462 				    newUNOP(OP_REFGEN, 0,
3463 					    arg),
3464 				    dup_attrlist(attrs)));
3465 
3466     /* Fake up a method call to import */
3467     meth = newSVpvs_share("import");
3468     imop = op_convert_list(OP_ENTERSUB, OPf_STACKED|OPf_SPECIAL|OPf_WANT_VOID,
3469 		   op_append_elem(OP_LIST,
3470 			       op_prepend_elem(OP_LIST, pack, arg),
3471 			       newMETHOP_named(OP_METHOD_NAMED, 0, meth)));
3472 
3473     /* Combine the ops. */
3474     *imopsp = op_append_elem(OP_LIST, *imopsp, imop);
3475 }
3476 
3477 /*
3478 =notfor apidoc apply_attrs_string
3479 
3480 Attempts to apply a list of attributes specified by the C<attrstr> and
3481 C<len> arguments to the subroutine identified by the C<cv> argument which
3482 is expected to be associated with the package identified by the C<stashpv>
3483 argument (see L<attributes>).  It gets this wrong, though, in that it
3484 does not correctly identify the boundaries of the individual attribute
3485 specifications within C<attrstr>.  This is not really intended for the
3486 public API, but has to be listed here for systems such as AIX which
3487 need an explicit export list for symbols.  (It's called from XS code
3488 in support of the C<ATTRS:> keyword from F<xsubpp>.)  Patches to fix it
3489 to respect attribute syntax properly would be welcome.
3490 
3491 =cut
3492 */
3493 
3494 void
3495 Perl_apply_attrs_string(pTHX_ const char *stashpv, CV *cv,
3496                         const char *attrstr, STRLEN len)
3497 {
3498     OP *attrs = NULL;
3499 
3500     PERL_ARGS_ASSERT_APPLY_ATTRS_STRING;
3501 
3502     if (!len) {
3503         len = strlen(attrstr);
3504     }
3505 
3506     while (len) {
3507         for (; isSPACE(*attrstr) && len; --len, ++attrstr) ;
3508         if (len) {
3509             const char * const sstr = attrstr;
3510             for (; !isSPACE(*attrstr) && len; --len, ++attrstr) ;
3511             attrs = op_append_elem(OP_LIST, attrs,
3512                                 newSVOP(OP_CONST, 0,
3513                                         newSVpvn(sstr, attrstr-sstr)));
3514         }
3515     }
3516 
3517     Perl_load_module(aTHX_ PERL_LOADMOD_IMPORT_OPS,
3518 		     newSVpvs(ATTRSMODULE),
3519                      NULL, op_prepend_elem(OP_LIST,
3520 				  newSVOP(OP_CONST, 0, newSVpv(stashpv,0)),
3521 				  op_prepend_elem(OP_LIST,
3522 					       newSVOP(OP_CONST, 0,
3523 						       newRV(MUTABLE_SV(cv))),
3524                                                attrs)));
3525 }
3526 
3527 STATIC void
3528 S_move_proto_attr(pTHX_ OP **proto, OP **attrs, const GV * name)
3529 {
3530     OP *new_proto = NULL;
3531     STRLEN pvlen;
3532     char *pv;
3533     OP *o;
3534 
3535     PERL_ARGS_ASSERT_MOVE_PROTO_ATTR;
3536 
3537     if (!*attrs)
3538         return;
3539 
3540     o = *attrs;
3541     if (o->op_type == OP_CONST) {
3542         pv = SvPV(cSVOPo_sv, pvlen);
3543         if (pvlen >= 10 && memEQ(pv, "prototype(", 10)) {
3544             SV * const tmpsv = newSVpvn_flags(pv + 10, pvlen - 11, SvUTF8(cSVOPo_sv));
3545             SV ** const tmpo = cSVOPx_svp(o);
3546             SvREFCNT_dec(cSVOPo_sv);
3547             *tmpo = tmpsv;
3548             new_proto = o;
3549             *attrs = NULL;
3550         }
3551     } else if (o->op_type == OP_LIST) {
3552         OP * lasto;
3553         assert(o->op_flags & OPf_KIDS);
3554         lasto = cLISTOPo->op_first;
3555         assert(lasto->op_type == OP_PUSHMARK);
3556         for (o = OpSIBLING(lasto); o; o = OpSIBLING(o)) {
3557             if (o->op_type == OP_CONST) {
3558                 pv = SvPV(cSVOPo_sv, pvlen);
3559                 if (pvlen >= 10 && memEQ(pv, "prototype(", 10)) {
3560                     SV * const tmpsv = newSVpvn_flags(pv + 10, pvlen - 11, SvUTF8(cSVOPo_sv));
3561                     SV ** const tmpo = cSVOPx_svp(o);
3562                     SvREFCNT_dec(cSVOPo_sv);
3563                     *tmpo = tmpsv;
3564                     if (new_proto && ckWARN(WARN_MISC)) {
3565                         STRLEN new_len;
3566                         const char * newp = SvPV(cSVOPo_sv, new_len);
3567                         Perl_warner(aTHX_ packWARN(WARN_MISC),
3568                             "Attribute prototype(%"UTF8f") discards earlier prototype attribute in same sub",
3569                             UTF8fARG(SvUTF8(cSVOPo_sv), new_len, newp));
3570                         op_free(new_proto);
3571                     }
3572                     else if (new_proto)
3573                         op_free(new_proto);
3574                     new_proto = o;
3575                     /* excise new_proto from the list */
3576                     op_sibling_splice(*attrs, lasto, 1, NULL);
3577                     o = lasto;
3578                     continue;
3579                 }
3580             }
3581             lasto = o;
3582         }
3583         /* If the list is now just the PUSHMARK, scrap the whole thing; otherwise attributes.xs
3584            would get pulled in with no real need */
3585         if (!OpHAS_SIBLING(cLISTOPx(*attrs)->op_first)) {
3586             op_free(*attrs);
3587             *attrs = NULL;
3588         }
3589     }
3590 
3591     if (new_proto) {
3592         SV *svname;
3593         if (isGV(name)) {
3594             svname = sv_newmortal();
3595             gv_efullname3(svname, name, NULL);
3596         }
3597         else if (SvPOK(name) && *SvPVX((SV *)name) == '&')
3598             svname = newSVpvn_flags(SvPVX((SV *)name)+1, SvCUR(name)-1, SvUTF8(name)|SVs_TEMP);
3599         else
3600             svname = (SV *)name;
3601         if (ckWARN(WARN_ILLEGALPROTO))
3602             (void)validate_proto(svname, cSVOPx_sv(new_proto), TRUE);
3603         if (*proto && ckWARN(WARN_PROTOTYPE)) {
3604             STRLEN old_len, new_len;
3605             const char * oldp = SvPV(cSVOPx_sv(*proto), old_len);
3606             const char * newp = SvPV(cSVOPx_sv(new_proto), new_len);
3607 
3608             Perl_warner(aTHX_ packWARN(WARN_PROTOTYPE),
3609                 "Prototype '%"UTF8f"' overridden by attribute 'prototype(%"UTF8f")'"
3610                 " in %"SVf,
3611                 UTF8fARG(SvUTF8(cSVOPx_sv(*proto)), old_len, oldp),
3612                 UTF8fARG(SvUTF8(cSVOPx_sv(new_proto)), new_len, newp),
3613                 SVfARG(svname));
3614         }
3615         if (*proto)
3616             op_free(*proto);
3617         *proto = new_proto;
3618     }
3619 }
3620 
3621 static void
3622 S_cant_declare(pTHX_ OP *o)
3623 {
3624     if (o->op_type == OP_NULL
3625      && (o->op_flags & (OPf_SPECIAL|OPf_KIDS)) == OPf_KIDS)
3626         o = cUNOPo->op_first;
3627     yyerror(Perl_form(aTHX_ "Can't declare %s in \"%s\"",
3628                              o->op_type == OP_NULL
3629                                && o->op_flags & OPf_SPECIAL
3630                                  ? "do block"
3631                                  : OP_DESC(o),
3632                              PL_parser->in_my == KEY_our   ? "our"   :
3633                              PL_parser->in_my == KEY_state ? "state" :
3634                                                              "my"));
3635 }
3636 
3637 STATIC OP *
3638 S_my_kid(pTHX_ OP *o, OP *attrs, OP **imopsp)
3639 {
3640     I32 type;
3641     const bool stately = PL_parser && PL_parser->in_my == KEY_state;
3642 
3643     PERL_ARGS_ASSERT_MY_KID;
3644 
3645     if (!o || (PL_parser && PL_parser->error_count))
3646 	return o;
3647 
3648     type = o->op_type;
3649 
3650     if (type == OP_LIST) {
3651         OP *kid;
3652         for (kid = cLISTOPo->op_first; kid; kid = OpSIBLING(kid))
3653 	    my_kid(kid, attrs, imopsp);
3654 	return o;
3655     } else if (type == OP_UNDEF || type == OP_STUB) {
3656 	return o;
3657     } else if (type == OP_RV2SV ||	/* "our" declaration */
3658 	       type == OP_RV2AV ||
3659 	       type == OP_RV2HV) { /* XXX does this let anything illegal in? */
3660 	if (cUNOPo->op_first->op_type != OP_GV) { /* MJD 20011224 */
3661 	    S_cant_declare(aTHX_ o);
3662 	} else if (attrs) {
3663 	    GV * const gv = cGVOPx_gv(cUNOPo->op_first);
3664 	    assert(PL_parser);
3665 	    PL_parser->in_my = FALSE;
3666 	    PL_parser->in_my_stash = NULL;
3667 	    apply_attrs(GvSTASH(gv),
3668 			(type == OP_RV2SV ? GvSV(gv) :
3669 			 type == OP_RV2AV ? MUTABLE_SV(GvAV(gv)) :
3670 			 type == OP_RV2HV ? MUTABLE_SV(GvHV(gv)) : MUTABLE_SV(gv)),
3671 			attrs);
3672 	}
3673 	o->op_private |= OPpOUR_INTRO;
3674 	return o;
3675     }
3676     else if (type != OP_PADSV &&
3677 	     type != OP_PADAV &&
3678 	     type != OP_PADHV &&
3679 	     type != OP_PUSHMARK)
3680     {
3681 	S_cant_declare(aTHX_ o);
3682 	return o;
3683     }
3684     else if (attrs && type != OP_PUSHMARK) {
3685 	HV *stash;
3686 
3687         assert(PL_parser);
3688 	PL_parser->in_my = FALSE;
3689 	PL_parser->in_my_stash = NULL;
3690 
3691 	/* check for C<my Dog $spot> when deciding package */
3692 	stash = PAD_COMPNAME_TYPE(o->op_targ);
3693 	if (!stash)
3694 	    stash = PL_curstash;
3695 	apply_attrs_my(stash, o, attrs, imopsp);
3696     }
3697     o->op_flags |= OPf_MOD;
3698     o->op_private |= OPpLVAL_INTRO;
3699     if (stately)
3700 	o->op_private |= OPpPAD_STATE;
3701     return o;
3702 }
3703 
3704 OP *
3705 Perl_my_attrs(pTHX_ OP *o, OP *attrs)
3706 {
3707     OP *rops;
3708     int maybe_scalar = 0;
3709 
3710     PERL_ARGS_ASSERT_MY_ATTRS;
3711 
3712 /* [perl #17376]: this appears to be premature, and results in code such as
3713    C< our(%x); > executing in list mode rather than void mode */
3714 #if 0
3715     if (o->op_flags & OPf_PARENS)
3716 	list(o);
3717     else
3718 	maybe_scalar = 1;
3719 #else
3720     maybe_scalar = 1;
3721 #endif
3722     if (attrs)
3723 	SAVEFREEOP(attrs);
3724     rops = NULL;
3725     o = my_kid(o, attrs, &rops);
3726     if (rops) {
3727 	if (maybe_scalar && o->op_type == OP_PADSV) {
3728 	    o = scalar(op_append_list(OP_LIST, rops, o));
3729 	    o->op_private |= OPpLVAL_INTRO;
3730 	}
3731 	else {
3732 	    /* The listop in rops might have a pushmark at the beginning,
3733 	       which will mess up list assignment. */
3734 	    LISTOP * const lrops = (LISTOP *)rops; /* for brevity */
3735 	    if (rops->op_type == OP_LIST &&
3736 	        lrops->op_first && lrops->op_first->op_type == OP_PUSHMARK)
3737 	    {
3738 		OP * const pushmark = lrops->op_first;
3739                 /* excise pushmark */
3740                 op_sibling_splice(rops, NULL, 1, NULL);
3741 		op_free(pushmark);
3742 	    }
3743 	    o = op_append_list(OP_LIST, o, rops);
3744 	}
3745     }
3746     PL_parser->in_my = FALSE;
3747     PL_parser->in_my_stash = NULL;
3748     return o;
3749 }
3750 
3751 OP *
3752 Perl_sawparens(pTHX_ OP *o)
3753 {
3754     PERL_UNUSED_CONTEXT;
3755     if (o)
3756 	o->op_flags |= OPf_PARENS;
3757     return o;
3758 }
3759 
3760 OP *
3761 Perl_bind_match(pTHX_ I32 type, OP *left, OP *right)
3762 {
3763     OP *o;
3764     bool ismatchop = 0;
3765     const OPCODE ltype = left->op_type;
3766     const OPCODE rtype = right->op_type;
3767 
3768     PERL_ARGS_ASSERT_BIND_MATCH;
3769 
3770     if ( (ltype == OP_RV2AV || ltype == OP_RV2HV || ltype == OP_PADAV
3771 	  || ltype == OP_PADHV) && ckWARN(WARN_MISC))
3772     {
3773       const char * const desc
3774 	  = PL_op_desc[(
3775 		          rtype == OP_SUBST || rtype == OP_TRANS
3776 		       || rtype == OP_TRANSR
3777 		       )
3778 		       ? (int)rtype : OP_MATCH];
3779       const bool isary = ltype == OP_RV2AV || ltype == OP_PADAV;
3780       SV * const name =
3781 	S_op_varname(aTHX_ left);
3782       if (name)
3783 	Perl_warner(aTHX_ packWARN(WARN_MISC),
3784              "Applying %s to %"SVf" will act on scalar(%"SVf")",
3785              desc, SVfARG(name), SVfARG(name));
3786       else {
3787 	const char * const sample = (isary
3788 	     ? "@array" : "%hash");
3789 	Perl_warner(aTHX_ packWARN(WARN_MISC),
3790              "Applying %s to %s will act on scalar(%s)",
3791              desc, sample, sample);
3792       }
3793     }
3794 
3795     if (rtype == OP_CONST &&
3796 	cSVOPx(right)->op_private & OPpCONST_BARE &&
3797 	cSVOPx(right)->op_private & OPpCONST_STRICT)
3798     {
3799 	no_bareword_allowed(right);
3800     }
3801 
3802     /* !~ doesn't make sense with /r, so error on it for now */
3803     if (rtype == OP_SUBST && (cPMOPx(right)->op_pmflags & PMf_NONDESTRUCT) &&
3804 	type == OP_NOT)
3805 	/* diag_listed_as: Using !~ with %s doesn't make sense */
3806 	yyerror("Using !~ with s///r doesn't make sense");
3807     if (rtype == OP_TRANSR && type == OP_NOT)
3808 	/* diag_listed_as: Using !~ with %s doesn't make sense */
3809 	yyerror("Using !~ with tr///r doesn't make sense");
3810 
3811     ismatchop = (rtype == OP_MATCH ||
3812 		 rtype == OP_SUBST ||
3813 		 rtype == OP_TRANS || rtype == OP_TRANSR)
3814 	     && !(right->op_flags & OPf_SPECIAL);
3815     if (ismatchop && right->op_private & OPpTARGET_MY) {
3816 	right->op_targ = 0;
3817 	right->op_private &= ~OPpTARGET_MY;
3818     }
3819     if (!(right->op_flags & OPf_STACKED) && !right->op_targ && ismatchop) {
3820         if (left->op_type == OP_PADSV
3821          && !(left->op_private & OPpLVAL_INTRO))
3822         {
3823             right->op_targ = left->op_targ;
3824             op_free(left);
3825             o = right;
3826         }
3827         else {
3828             right->op_flags |= OPf_STACKED;
3829             if (rtype != OP_MATCH && rtype != OP_TRANSR &&
3830             ! (rtype == OP_TRANS &&
3831                right->op_private & OPpTRANS_IDENTICAL) &&
3832 	    ! (rtype == OP_SUBST &&
3833 	       (cPMOPx(right)->op_pmflags & PMf_NONDESTRUCT)))
3834 		left = op_lvalue(left, rtype);
3835 	    if (right->op_type == OP_TRANS || right->op_type == OP_TRANSR)
3836 		o = newBINOP(OP_NULL, OPf_STACKED, scalar(left), right);
3837 	    else
3838 		o = op_prepend_elem(rtype, scalar(left), right);
3839 	}
3840 	if (type == OP_NOT)
3841 	    return newUNOP(OP_NOT, 0, scalar(o));
3842 	return o;
3843     }
3844     else
3845 	return bind_match(type, left,
3846 		pmruntime(newPMOP(OP_MATCH, 0), right, NULL, 0, 0));
3847 }
3848 
3849 OP *
3850 Perl_invert(pTHX_ OP *o)
3851 {
3852     if (!o)
3853 	return NULL;
3854     return newUNOP(OP_NOT, OPf_SPECIAL, scalar(o));
3855 }
3856 
3857 /*
3858 =for apidoc Amx|OP *|op_scope|OP *o
3859 
3860 Wraps up an op tree with some additional ops so that at runtime a dynamic
3861 scope will be created.  The original ops run in the new dynamic scope,
3862 and then, provided that they exit normally, the scope will be unwound.
3863 The additional ops used to create and unwind the dynamic scope will
3864 normally be an C<enter>/C<leave> pair, but a C<scope> op may be used
3865 instead if the ops are simple enough to not need the full dynamic scope
3866 structure.
3867 
3868 =cut
3869 */
3870 
3871 OP *
3872 Perl_op_scope(pTHX_ OP *o)
3873 {
3874     dVAR;
3875     if (o) {
3876 	if (o->op_flags & OPf_PARENS || PERLDB_NOOPT || TAINTING_get) {
3877 	    o = op_prepend_elem(OP_LINESEQ, newOP(OP_ENTER, 0), o);
3878             OpTYPE_set(o, OP_LEAVE);
3879 	}
3880 	else if (o->op_type == OP_LINESEQ) {
3881 	    OP *kid;
3882             OpTYPE_set(o, OP_SCOPE);
3883 	    kid = ((LISTOP*)o)->op_first;
3884 	    if (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) {
3885 		op_null(kid);
3886 
3887 		/* The following deals with things like 'do {1 for 1}' */
3888 		kid = OpSIBLING(kid);
3889 		if (kid &&
3890 		    (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE))
3891 		    op_null(kid);
3892 	    }
3893 	}
3894 	else
3895 	    o = newLISTOP(OP_SCOPE, 0, o, NULL);
3896     }
3897     return o;
3898 }
3899 
3900 OP *
3901 Perl_op_unscope(pTHX_ OP *o)
3902 {
3903     if (o && o->op_type == OP_LINESEQ) {
3904 	OP *kid = cLISTOPo->op_first;
3905 	for(; kid; kid = OpSIBLING(kid))
3906 	    if (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE)
3907 		op_null(kid);
3908     }
3909     return o;
3910 }
3911 
3912 /*
3913 =for apidoc Am|int|block_start|int full
3914 
3915 Handles compile-time scope entry.
3916 Arranges for hints to be restored on block
3917 exit and also handles pad sequence numbers to make lexical variables scope
3918 right.  Returns a savestack index for use with C<block_end>.
3919 
3920 =cut
3921 */
3922 
3923 int
3924 Perl_block_start(pTHX_ int full)
3925 {
3926     const int retval = PL_savestack_ix;
3927 
3928     PL_compiling.cop_seq = PL_cop_seqmax;
3929     COP_SEQMAX_INC;
3930     pad_block_start(full);
3931     SAVEHINTS();
3932     PL_hints &= ~HINT_BLOCK_SCOPE;
3933     SAVECOMPILEWARNINGS();
3934     PL_compiling.cop_warnings = DUP_WARNINGS(PL_compiling.cop_warnings);
3935     SAVEI32(PL_compiling.cop_seq);
3936     PL_compiling.cop_seq = 0;
3937 
3938     CALL_BLOCK_HOOKS(bhk_start, full);
3939 
3940     return retval;
3941 }
3942 
3943 /*
3944 =for apidoc Am|OP *|block_end|I32 floor|OP *seq
3945 
3946 Handles compile-time scope exit.  C<floor>
3947 is the savestack index returned by
3948 C<block_start>, and C<seq> is the body of the block.  Returns the block,
3949 possibly modified.
3950 
3951 =cut
3952 */
3953 
3954 OP*
3955 Perl_block_end(pTHX_ I32 floor, OP *seq)
3956 {
3957     const int needblockscope = PL_hints & HINT_BLOCK_SCOPE;
3958     OP* retval = scalarseq(seq);
3959     OP *o;
3960 
3961     /* XXX Is the null PL_parser check necessary here? */
3962     assert(PL_parser); /* Let’s find out under debugging builds.  */
3963     if (PL_parser && PL_parser->parsed_sub) {
3964 	o = newSTATEOP(0, NULL, NULL);
3965 	op_null(o);
3966 	retval = op_append_elem(OP_LINESEQ, retval, o);
3967     }
3968 
3969     CALL_BLOCK_HOOKS(bhk_pre_end, &retval);
3970 
3971     LEAVE_SCOPE(floor);
3972     if (needblockscope)
3973 	PL_hints |= HINT_BLOCK_SCOPE; /* propagate out */
3974     o = pad_leavemy();
3975 
3976     if (o) {
3977 	/* pad_leavemy has created a sequence of introcv ops for all my
3978 	   subs declared in the block.  We have to replicate that list with
3979 	   clonecv ops, to deal with this situation:
3980 
3981 	       sub {
3982 		   my sub s1;
3983 		   my sub s2;
3984 		   sub s1 { state sub foo { \&s2 } }
3985 	       }->()
3986 
3987 	   Originally, I was going to have introcv clone the CV and turn
3988 	   off the stale flag.  Since &s1 is declared before &s2, the
3989 	   introcv op for &s1 is executed (on sub entry) before the one for
3990 	   &s2.  But the &foo sub inside &s1 (which is cloned when &s1 is
3991 	   cloned, since it is a state sub) closes over &s2 and expects
3992 	   to see it in its outer CV’s pad.  If the introcv op clones &s1,
3993 	   then &s2 is still marked stale.  Since &s1 is not active, and
3994 	   &foo closes over &s1’s implicit entry for &s2, we get a ‘Varia-
3995 	   ble will not stay shared’ warning.  Because it is the same stub
3996 	   that will be used when the introcv op for &s2 is executed, clos-
3997 	   ing over it is safe.  Hence, we have to turn off the stale flag
3998 	   on all lexical subs in the block before we clone any of them.
3999 	   Hence, having introcv clone the sub cannot work.  So we create a
4000 	   list of ops like this:
4001 
4002 	       lineseq
4003 		  |
4004 		  +-- introcv
4005 		  |
4006 		  +-- introcv
4007 		  |
4008 		  +-- introcv
4009 		  |
4010 		  .
4011 		  .
4012 		  .
4013 		  |
4014 		  +-- clonecv
4015 		  |
4016 		  +-- clonecv
4017 		  |
4018 		  +-- clonecv
4019 		  |
4020 		  .
4021 		  .
4022 		  .
4023 	 */
4024 	OP *kid = o->op_flags & OPf_KIDS ? cLISTOPo->op_first : o;
4025 	OP * const last = o->op_flags & OPf_KIDS ? cLISTOPo->op_last : o;
4026 	for (;; kid = OpSIBLING(kid)) {
4027 	    OP *newkid = newOP(OP_CLONECV, 0);
4028 	    newkid->op_targ = kid->op_targ;
4029 	    o = op_append_elem(OP_LINESEQ, o, newkid);
4030 	    if (kid == last) break;
4031 	}
4032 	retval = op_prepend_elem(OP_LINESEQ, o, retval);
4033     }
4034 
4035     CALL_BLOCK_HOOKS(bhk_post_end, &retval);
4036 
4037     return retval;
4038 }
4039 
4040 /*
4041 =head1 Compile-time scope hooks
4042 
4043 =for apidoc Aox||blockhook_register
4044 
4045 Register a set of hooks to be called when the Perl lexical scope changes
4046 at compile time.  See L<perlguts/"Compile-time scope hooks">.
4047 
4048 =cut
4049 */
4050 
4051 void
4052 Perl_blockhook_register(pTHX_ BHK *hk)
4053 {
4054     PERL_ARGS_ASSERT_BLOCKHOOK_REGISTER;
4055 
4056     Perl_av_create_and_push(aTHX_ &PL_blockhooks, newSViv(PTR2IV(hk)));
4057 }
4058 
4059 void
4060 Perl_newPROG(pTHX_ OP *o)
4061 {
4062     PERL_ARGS_ASSERT_NEWPROG;
4063 
4064     if (PL_in_eval) {
4065 	PERL_CONTEXT *cx;
4066 	I32 i;
4067 	if (PL_eval_root)
4068 		return;
4069 	PL_eval_root = newUNOP(OP_LEAVEEVAL,
4070 			       ((PL_in_eval & EVAL_KEEPERR)
4071 				? OPf_SPECIAL : 0), o);
4072 
4073 	cx = CX_CUR();
4074 	assert(CxTYPE(cx) == CXt_EVAL);
4075 
4076 	if ((cx->blk_gimme & G_WANT) == G_VOID)
4077 	    scalarvoid(PL_eval_root);
4078 	else if ((cx->blk_gimme & G_WANT) == G_ARRAY)
4079 	    list(PL_eval_root);
4080 	else
4081 	    scalar(PL_eval_root);
4082 
4083 	PL_eval_start = op_linklist(PL_eval_root);
4084 	PL_eval_root->op_private |= OPpREFCOUNTED;
4085 	OpREFCNT_set(PL_eval_root, 1);
4086 	PL_eval_root->op_next = 0;
4087 	i = PL_savestack_ix;
4088 	SAVEFREEOP(o);
4089 	ENTER;
4090 	CALL_PEEP(PL_eval_start);
4091 	finalize_optree(PL_eval_root);
4092         S_prune_chain_head(&PL_eval_start);
4093 	LEAVE;
4094 	PL_savestack_ix = i;
4095     }
4096     else {
4097 	if (o->op_type == OP_STUB) {
4098             /* This block is entered if nothing is compiled for the main
4099                program. This will be the case for an genuinely empty main
4100                program, or one which only has BEGIN blocks etc, so already
4101                run and freed.
4102 
4103                Historically (5.000) the guard above was !o. However, commit
4104                f8a08f7b8bd67b28 (Jun 2001), integrated to blead as
4105                c71fccf11fde0068, changed perly.y so that newPROG() is now
4106                called with the output of block_end(), which returns a new
4107                OP_STUB for the case of an empty optree. ByteLoader (and
4108                maybe other things) also take this path, because they set up
4109                PL_main_start and PL_main_root directly, without generating an
4110                optree.
4111 
4112                If the parsing the main program aborts (due to parse errors,
4113                or due to BEGIN or similar calling exit), then newPROG()
4114                isn't even called, and hence this code path and its cleanups
4115                are skipped. This shouldn't make a make a difference:
4116                * a non-zero return from perl_parse is a failure, and
4117                  perl_destruct() should be called immediately.
4118                * however, if exit(0) is called during the parse, then
4119                  perl_parse() returns 0, and perl_run() is called. As
4120                  PL_main_start will be NULL, perl_run() will return
4121                  promptly, and the exit code will remain 0.
4122             */
4123 
4124 	    PL_comppad_name = 0;
4125 	    PL_compcv = 0;
4126 	    S_op_destroy(aTHX_ o);
4127 	    return;
4128 	}
4129 	PL_main_root = op_scope(sawparens(scalarvoid(o)));
4130 	PL_curcop = &PL_compiling;
4131 	PL_main_start = LINKLIST(PL_main_root);
4132 	PL_main_root->op_private |= OPpREFCOUNTED;
4133 	OpREFCNT_set(PL_main_root, 1);
4134 	PL_main_root->op_next = 0;
4135 	CALL_PEEP(PL_main_start);
4136 	finalize_optree(PL_main_root);
4137         S_prune_chain_head(&PL_main_start);
4138 	cv_forget_slab(PL_compcv);
4139 	PL_compcv = 0;
4140 
4141 	/* Register with debugger */
4142 	if (PERLDB_INTER) {
4143 	    CV * const cv = get_cvs("DB::postponed", 0);
4144 	    if (cv) {
4145 		dSP;
4146 		PUSHMARK(SP);
4147 		XPUSHs(MUTABLE_SV(CopFILEGV(&PL_compiling)));
4148 		PUTBACK;
4149 		call_sv(MUTABLE_SV(cv), G_DISCARD);
4150 	    }
4151 	}
4152     }
4153 }
4154 
4155 OP *
4156 Perl_localize(pTHX_ OP *o, I32 lex)
4157 {
4158     PERL_ARGS_ASSERT_LOCALIZE;
4159 
4160     if (o->op_flags & OPf_PARENS)
4161 /* [perl #17376]: this appears to be premature, and results in code such as
4162    C< our(%x); > executing in list mode rather than void mode */
4163 #if 0
4164 	list(o);
4165 #else
4166 	NOOP;
4167 #endif
4168     else {
4169 	if ( PL_parser->bufptr > PL_parser->oldbufptr
4170 	    && PL_parser->bufptr[-1] == ','
4171 	    && ckWARN(WARN_PARENTHESIS))
4172 	{
4173 	    char *s = PL_parser->bufptr;
4174 	    bool sigil = FALSE;
4175 
4176 	    /* some heuristics to detect a potential error */
4177 	    while (*s && (strchr(", \t\n", *s)))
4178 		s++;
4179 
4180 	    while (1) {
4181 		if (*s && (strchr("@$%", *s) || (!lex && *s == '*'))
4182 		       && *++s
4183 		       && (isWORDCHAR(*s) || UTF8_IS_CONTINUED(*s))) {
4184 		    s++;
4185 		    sigil = TRUE;
4186 		    while (*s && (isWORDCHAR(*s) || UTF8_IS_CONTINUED(*s)))
4187 			s++;
4188 		    while (*s && (strchr(", \t\n", *s)))
4189 			s++;
4190 		}
4191 		else
4192 		    break;
4193 	    }
4194 	    if (sigil && (*s == ';' || *s == '=')) {
4195 		Perl_warner(aTHX_ packWARN(WARN_PARENTHESIS),
4196 				"Parentheses missing around \"%s\" list",
4197 				lex
4198 				    ? (PL_parser->in_my == KEY_our
4199 					? "our"
4200 					: PL_parser->in_my == KEY_state
4201 					    ? "state"
4202 					    : "my")
4203 				    : "local");
4204 	    }
4205 	}
4206     }
4207     if (lex)
4208 	o = my(o);
4209     else
4210 	o = op_lvalue(o, OP_NULL);		/* a bit kludgey */
4211     PL_parser->in_my = FALSE;
4212     PL_parser->in_my_stash = NULL;
4213     return o;
4214 }
4215 
4216 OP *
4217 Perl_jmaybe(pTHX_ OP *o)
4218 {
4219     PERL_ARGS_ASSERT_JMAYBE;
4220 
4221     if (o->op_type == OP_LIST) {
4222 	OP * const o2
4223 	    = newSVREF(newGVOP(OP_GV, 0, gv_fetchpvs(";", GV_ADD|GV_NOTQUAL, SVt_PV)));
4224 	o = op_convert_list(OP_JOIN, 0, op_prepend_elem(OP_LIST, o2, o));
4225     }
4226     return o;
4227 }
4228 
4229 PERL_STATIC_INLINE OP *
4230 S_op_std_init(pTHX_ OP *o)
4231 {
4232     I32 type = o->op_type;
4233 
4234     PERL_ARGS_ASSERT_OP_STD_INIT;
4235 
4236     if (PL_opargs[type] & OA_RETSCALAR)
4237 	scalar(o);
4238     if (PL_opargs[type] & OA_TARGET && !o->op_targ)
4239 	o->op_targ = pad_alloc(type, SVs_PADTMP);
4240 
4241     return o;
4242 }
4243 
4244 PERL_STATIC_INLINE OP *
4245 S_op_integerize(pTHX_ OP *o)
4246 {
4247     I32 type = o->op_type;
4248 
4249     PERL_ARGS_ASSERT_OP_INTEGERIZE;
4250 
4251     /* integerize op. */
4252     if ((PL_opargs[type] & OA_OTHERINT) && (PL_hints & HINT_INTEGER))
4253     {
4254 	dVAR;
4255 	o->op_ppaddr = PL_ppaddr[++(o->op_type)];
4256     }
4257 
4258     if (type == OP_NEGATE)
4259 	/* XXX might want a ck_negate() for this */
4260 	cUNOPo->op_first->op_private &= ~OPpCONST_STRICT;
4261 
4262     return o;
4263 }
4264 
4265 static OP *
4266 S_fold_constants(pTHX_ OP *o)
4267 {
4268     dVAR;
4269     OP * VOL curop;
4270     OP *newop;
4271     VOL I32 type = o->op_type;
4272     bool is_stringify;
4273     SV * VOL sv = NULL;
4274     int ret = 0;
4275     OP *old_next;
4276     SV * const oldwarnhook = PL_warnhook;
4277     SV * const olddiehook  = PL_diehook;
4278     COP not_compiling;
4279     U8 oldwarn = PL_dowarn;
4280     I32 old_cxix;
4281     dJMPENV;
4282 
4283     PERL_ARGS_ASSERT_FOLD_CONSTANTS;
4284 
4285     if (!(PL_opargs[type] & OA_FOLDCONST))
4286 	goto nope;
4287 
4288     switch (type) {
4289     case OP_UCFIRST:
4290     case OP_LCFIRST:
4291     case OP_UC:
4292     case OP_LC:
4293     case OP_FC:
4294 #ifdef USE_LOCALE_CTYPE
4295 	if (IN_LC_COMPILETIME(LC_CTYPE))
4296 	    goto nope;
4297 #endif
4298         break;
4299     case OP_SLT:
4300     case OP_SGT:
4301     case OP_SLE:
4302     case OP_SGE:
4303     case OP_SCMP:
4304 #ifdef USE_LOCALE_COLLATE
4305 	if (IN_LC_COMPILETIME(LC_COLLATE))
4306 	    goto nope;
4307 #endif
4308         break;
4309     case OP_SPRINTF:
4310 	/* XXX what about the numeric ops? */
4311 #ifdef USE_LOCALE_NUMERIC
4312 	if (IN_LC_COMPILETIME(LC_NUMERIC))
4313 	    goto nope;
4314 #endif
4315 	break;
4316     case OP_PACK:
4317 	if (!OpHAS_SIBLING(cLISTOPo->op_first)
4318 	  || OpSIBLING(cLISTOPo->op_first)->op_type != OP_CONST)
4319 	    goto nope;
4320 	{
4321 	    SV * const sv = cSVOPx_sv(OpSIBLING(cLISTOPo->op_first));
4322 	    if (!SvPOK(sv) || SvGMAGICAL(sv)) goto nope;
4323 	    {
4324 		const char *s = SvPVX_const(sv);
4325 		while (s < SvEND(sv)) {
4326 		    if (isALPHA_FOLD_EQ(*s, 'p')) goto nope;
4327 		    s++;
4328 		}
4329 	    }
4330 	}
4331 	break;
4332     case OP_REPEAT:
4333 	if (o->op_private & OPpREPEAT_DOLIST) goto nope;
4334 	break;
4335     case OP_SREFGEN:
4336 	if (cUNOPx(cUNOPo->op_first)->op_first->op_type != OP_CONST
4337 	 || SvPADTMP(cSVOPx_sv(cUNOPx(cUNOPo->op_first)->op_first)))
4338 	    goto nope;
4339     }
4340 
4341     if (PL_parser && PL_parser->error_count)
4342 	goto nope;		/* Don't try to run w/ errors */
4343 
4344     for (curop = LINKLIST(o); curop != o; curop = LINKLIST(curop)) {
4345 	const OPCODE type = curop->op_type;
4346 	if ((type != OP_CONST || (curop->op_private & OPpCONST_BARE)) &&
4347 	    type != OP_LIST &&
4348 	    type != OP_SCALAR &&
4349 	    type != OP_NULL &&
4350 	    type != OP_PUSHMARK)
4351 	{
4352 	    goto nope;
4353 	}
4354     }
4355 
4356     curop = LINKLIST(o);
4357     old_next = o->op_next;
4358     o->op_next = 0;
4359     PL_op = curop;
4360 
4361     old_cxix = cxstack_ix;
4362     create_eval_scope(NULL, G_FAKINGEVAL);
4363 
4364     /* Verify that we don't need to save it:  */
4365     assert(PL_curcop == &PL_compiling);
4366     StructCopy(&PL_compiling, &not_compiling, COP);
4367     PL_curcop = &not_compiling;
4368     /* The above ensures that we run with all the correct hints of the
4369        currently compiling COP, but that IN_PERL_RUNTIME is true. */
4370     assert(IN_PERL_RUNTIME);
4371     PL_warnhook = PERL_WARNHOOK_FATAL;
4372     PL_diehook  = NULL;
4373     JMPENV_PUSH(ret);
4374 
4375     /* Effective $^W=1.  */
4376     if ( ! (PL_dowarn & G_WARN_ALL_MASK))
4377 	PL_dowarn |= G_WARN_ON;
4378 
4379     switch (ret) {
4380     case 0:
4381 	CALLRUNOPS(aTHX);
4382 	sv = *(PL_stack_sp--);
4383 	if (o->op_targ && sv == PAD_SV(o->op_targ)) {	/* grab pad temp? */
4384 	    pad_swipe(o->op_targ,  FALSE);
4385 	}
4386 	else if (SvTEMP(sv)) {			/* grab mortal temp? */
4387 	    SvREFCNT_inc_simple_void(sv);
4388 	    SvTEMP_off(sv);
4389 	}
4390 	else { assert(SvIMMORTAL(sv)); }
4391 	break;
4392     case 3:
4393 	/* Something tried to die.  Abandon constant folding.  */
4394 	/* Pretend the error never happened.  */
4395 	CLEAR_ERRSV();
4396 	o->op_next = old_next;
4397 	break;
4398     default:
4399 	JMPENV_POP;
4400 	/* Don't expect 1 (setjmp failed) or 2 (something called my_exit)  */
4401 	PL_warnhook = oldwarnhook;
4402 	PL_diehook  = olddiehook;
4403 	/* XXX note that this croak may fail as we've already blown away
4404 	 * the stack - eg any nested evals */
4405 	Perl_croak(aTHX_ "panic: fold_constants JMPENV_PUSH returned %d", ret);
4406     }
4407     JMPENV_POP;
4408     PL_dowarn   = oldwarn;
4409     PL_warnhook = oldwarnhook;
4410     PL_diehook  = olddiehook;
4411     PL_curcop = &PL_compiling;
4412 
4413     /* if we croaked, depending on how we croaked the eval scope
4414      * may or may not have already been popped */
4415     if (cxstack_ix > old_cxix) {
4416         assert(cxstack_ix == old_cxix + 1);
4417         assert(CxTYPE(CX_CUR()) == CXt_EVAL);
4418         delete_eval_scope();
4419     }
4420     if (ret)
4421 	goto nope;
4422 
4423     /* OP_STRINGIFY and constant folding are used to implement qq.
4424        Here the constant folding is an implementation detail that we
4425        want to hide.  If the stringify op is itself already marked
4426        folded, however, then it is actually a folded join.  */
4427     is_stringify = type == OP_STRINGIFY && !o->op_folded;
4428     op_free(o);
4429     assert(sv);
4430     if (is_stringify)
4431 	SvPADTMP_off(sv);
4432     else if (!SvIMMORTAL(sv)) {
4433 	SvPADTMP_on(sv);
4434 	SvREADONLY_on(sv);
4435     }
4436     newop = newSVOP(OP_CONST, 0, MUTABLE_SV(sv));
4437     if (!is_stringify) newop->op_folded = 1;
4438     return newop;
4439 
4440  nope:
4441     return o;
4442 }
4443 
4444 static OP *
4445 S_gen_constant_list(pTHX_ OP *o)
4446 {
4447     dVAR;
4448     OP *curop;
4449     const SSize_t oldtmps_floor = PL_tmps_floor;
4450     SV **svp;
4451     AV *av;
4452 
4453     list(o);
4454     if (PL_parser && PL_parser->error_count)
4455 	return o;		/* Don't attempt to run with errors */
4456 
4457     curop = LINKLIST(o);
4458     o->op_next = 0;
4459     CALL_PEEP(curop);
4460     S_prune_chain_head(&curop);
4461     PL_op = curop;
4462     Perl_pp_pushmark(aTHX);
4463     CALLRUNOPS(aTHX);
4464     PL_op = curop;
4465     assert (!(curop->op_flags & OPf_SPECIAL));
4466     assert(curop->op_type == OP_RANGE);
4467     Perl_pp_anonlist(aTHX);
4468     PL_tmps_floor = oldtmps_floor;
4469 
4470     OpTYPE_set(o, OP_RV2AV);
4471     o->op_flags &= ~OPf_REF;	/* treat \(1..2) like an ordinary list */
4472     o->op_flags |= OPf_PARENS;	/* and flatten \(1..2,3) */
4473     o->op_opt = 0;		/* needs to be revisited in rpeep() */
4474     av = (AV *)SvREFCNT_inc_NN(*PL_stack_sp--);
4475 
4476     /* replace subtree with an OP_CONST */
4477     curop = ((UNOP*)o)->op_first;
4478     op_sibling_splice(o, NULL, -1, newSVOP(OP_CONST, 0, (SV *)av));
4479     op_free(curop);
4480 
4481     if (AvFILLp(av) != -1)
4482 	for (svp = AvARRAY(av) + AvFILLp(av); svp >= AvARRAY(av); --svp)
4483 	{
4484 	    SvPADTMP_on(*svp);
4485 	    SvREADONLY_on(*svp);
4486 	}
4487     LINKLIST(o);
4488     return list(o);
4489 }
4490 
4491 /*
4492 =head1 Optree Manipulation Functions
4493 */
4494 
4495 /* List constructors */
4496 
4497 /*
4498 =for apidoc Am|OP *|op_append_elem|I32 optype|OP *first|OP *last
4499 
4500 Append an item to the list of ops contained directly within a list-type
4501 op, returning the lengthened list.  C<first> is the list-type op,
4502 and C<last> is the op to append to the list.  C<optype> specifies the
4503 intended opcode for the list.  If C<first> is not already a list of the
4504 right type, it will be upgraded into one.  If either C<first> or C<last>
4505 is null, the other is returned unchanged.
4506 
4507 =cut
4508 */
4509 
4510 OP *
4511 Perl_op_append_elem(pTHX_ I32 type, OP *first, OP *last)
4512 {
4513     if (!first)
4514 	return last;
4515 
4516     if (!last)
4517 	return first;
4518 
4519     if (first->op_type != (unsigned)type
4520 	|| (type == OP_LIST && (first->op_flags & OPf_PARENS)))
4521     {
4522 	return newLISTOP(type, 0, first, last);
4523     }
4524 
4525     op_sibling_splice(first, ((LISTOP*)first)->op_last, 0, last);
4526     first->op_flags |= OPf_KIDS;
4527     return first;
4528 }
4529 
4530 /*
4531 =for apidoc Am|OP *|op_append_list|I32 optype|OP *first|OP *last
4532 
4533 Concatenate the lists of ops contained directly within two list-type ops,
4534 returning the combined list.  C<first> and C<last> are the list-type ops
4535 to concatenate.  C<optype> specifies the intended opcode for the list.
4536 If either C<first> or C<last> is not already a list of the right type,
4537 it will be upgraded into one.  If either C<first> or C<last> is null,
4538 the other is returned unchanged.
4539 
4540 =cut
4541 */
4542 
4543 OP *
4544 Perl_op_append_list(pTHX_ I32 type, OP *first, OP *last)
4545 {
4546     if (!first)
4547 	return last;
4548 
4549     if (!last)
4550 	return first;
4551 
4552     if (first->op_type != (unsigned)type)
4553 	return op_prepend_elem(type, first, last);
4554 
4555     if (last->op_type != (unsigned)type)
4556 	return op_append_elem(type, first, last);
4557 
4558     OpMORESIB_set(((LISTOP*)first)->op_last, ((LISTOP*)last)->op_first);
4559     ((LISTOP*)first)->op_last = ((LISTOP*)last)->op_last;
4560     OpLASTSIB_set(((LISTOP*)first)->op_last, first);
4561     first->op_flags |= (last->op_flags & OPf_KIDS);
4562 
4563     S_op_destroy(aTHX_ last);
4564 
4565     return first;
4566 }
4567 
4568 /*
4569 =for apidoc Am|OP *|op_prepend_elem|I32 optype|OP *first|OP *last
4570 
4571 Prepend an item to the list of ops contained directly within a list-type
4572 op, returning the lengthened list.  C<first> is the op to prepend to the
4573 list, and C<last> is the list-type op.  C<optype> specifies the intended
4574 opcode for the list.  If C<last> is not already a list of the right type,
4575 it will be upgraded into one.  If either C<first> or C<last> is null,
4576 the other is returned unchanged.
4577 
4578 =cut
4579 */
4580 
4581 OP *
4582 Perl_op_prepend_elem(pTHX_ I32 type, OP *first, OP *last)
4583 {
4584     if (!first)
4585 	return last;
4586 
4587     if (!last)
4588 	return first;
4589 
4590     if (last->op_type == (unsigned)type) {
4591 	if (type == OP_LIST) {	/* already a PUSHMARK there */
4592             /* insert 'first' after pushmark */
4593             op_sibling_splice(last, cLISTOPx(last)->op_first, 0, first);
4594             if (!(first->op_flags & OPf_PARENS))
4595                 last->op_flags &= ~OPf_PARENS;
4596 	}
4597 	else
4598             op_sibling_splice(last, NULL, 0, first);
4599 	last->op_flags |= OPf_KIDS;
4600 	return last;
4601     }
4602 
4603     return newLISTOP(type, 0, first, last);
4604 }
4605 
4606 /*
4607 =for apidoc Am|OP *|op_convert_list|I32 type|I32 flags|OP *o
4608 
4609 Converts C<o> into a list op if it is not one already, and then converts it
4610 into the specified C<type>, calling its check function, allocating a target if
4611 it needs one, and folding constants.
4612 
4613 A list-type op is usually constructed one kid at a time via C<newLISTOP>,
4614 C<op_prepend_elem> and C<op_append_elem>.  Then finally it is passed to
4615 C<op_convert_list> to make it the right type.
4616 
4617 =cut
4618 */
4619 
4620 OP *
4621 Perl_op_convert_list(pTHX_ I32 type, I32 flags, OP *o)
4622 {
4623     dVAR;
4624     if (type < 0) type = -type, flags |= OPf_SPECIAL;
4625     if (!o || o->op_type != OP_LIST)
4626         o = force_list(o, 0);
4627     else
4628     {
4629 	o->op_flags &= ~OPf_WANT;
4630 	o->op_private &= ~OPpLVAL_INTRO;
4631     }
4632 
4633     if (!(PL_opargs[type] & OA_MARK))
4634 	op_null(cLISTOPo->op_first);
4635     else {
4636 	OP * const kid2 = OpSIBLING(cLISTOPo->op_first);
4637 	if (kid2 && kid2->op_type == OP_COREARGS) {
4638 	    op_null(cLISTOPo->op_first);
4639 	    kid2->op_private |= OPpCOREARGS_PUSHMARK;
4640 	}
4641     }
4642 
4643     OpTYPE_set(o, type);
4644     o->op_flags |= flags;
4645     if (flags & OPf_FOLDED)
4646 	o->op_folded = 1;
4647 
4648     o = CHECKOP(type, o);
4649     if (o->op_type != (unsigned)type)
4650 	return o;
4651 
4652     return fold_constants(op_integerize(op_std_init(o)));
4653 }
4654 
4655 /* Constructors */
4656 
4657 
4658 /*
4659 =head1 Optree construction
4660 
4661 =for apidoc Am|OP *|newNULLLIST
4662 
4663 Constructs, checks, and returns a new C<stub> op, which represents an
4664 empty list expression.
4665 
4666 =cut
4667 */
4668 
4669 OP *
4670 Perl_newNULLLIST(pTHX)
4671 {
4672     return newOP(OP_STUB, 0);
4673 }
4674 
4675 /* promote o and any siblings to be a list if its not already; i.e.
4676  *
4677  *  o - A - B
4678  *
4679  * becomes
4680  *
4681  *  list
4682  *    |
4683  *  pushmark - o - A - B
4684  *
4685  * If nullit it true, the list op is nulled.
4686  */
4687 
4688 static OP *
4689 S_force_list(pTHX_ OP *o, bool nullit)
4690 {
4691     if (!o || o->op_type != OP_LIST) {
4692         OP *rest = NULL;
4693         if (o) {
4694             /* manually detach any siblings then add them back later */
4695             rest = OpSIBLING(o);
4696             OpLASTSIB_set(o, NULL);
4697         }
4698 	o = newLISTOP(OP_LIST, 0, o, NULL);
4699         if (rest)
4700             op_sibling_splice(o, cLISTOPo->op_last, 0, rest);
4701     }
4702     if (nullit)
4703         op_null(o);
4704     return o;
4705 }
4706 
4707 /*
4708 =for apidoc Am|OP *|newLISTOP|I32 type|I32 flags|OP *first|OP *last
4709 
4710 Constructs, checks, and returns an op of any list type.  C<type> is
4711 the opcode.  C<flags> gives the eight bits of C<op_flags>, except that
4712 C<OPf_KIDS> will be set automatically if required.  C<first> and C<last>
4713 supply up to two ops to be direct children of the list op; they are
4714 consumed by this function and become part of the constructed op tree.
4715 
4716 For most list operators, the check function expects all the kid ops to be
4717 present already, so calling C<newLISTOP(OP_JOIN, ...)> (e.g.) is not
4718 appropriate.  What you want to do in that case is create an op of type
4719 C<OP_LIST>, append more children to it, and then call L</op_convert_list>.
4720 See L</op_convert_list> for more information.
4721 
4722 
4723 =cut
4724 */
4725 
4726 OP *
4727 Perl_newLISTOP(pTHX_ I32 type, I32 flags, OP *first, OP *last)
4728 {
4729     dVAR;
4730     LISTOP *listop;
4731 
4732     assert((PL_opargs[type] & OA_CLASS_MASK) == OA_LISTOP
4733 	|| type == OP_CUSTOM);
4734 
4735     NewOp(1101, listop, 1, LISTOP);
4736 
4737     OpTYPE_set(listop, type);
4738     if (first || last)
4739 	flags |= OPf_KIDS;
4740     listop->op_flags = (U8)flags;
4741 
4742     if (!last && first)
4743 	last = first;
4744     else if (!first && last)
4745 	first = last;
4746     else if (first)
4747 	OpMORESIB_set(first, last);
4748     listop->op_first = first;
4749     listop->op_last = last;
4750     if (type == OP_LIST) {
4751 	OP* const pushop = newOP(OP_PUSHMARK, 0);
4752 	OpMORESIB_set(pushop, first);
4753 	listop->op_first = pushop;
4754 	listop->op_flags |= OPf_KIDS;
4755 	if (!last)
4756 	    listop->op_last = pushop;
4757     }
4758     if (listop->op_last)
4759         OpLASTSIB_set(listop->op_last, (OP*)listop);
4760 
4761     return CHECKOP(type, listop);
4762 }
4763 
4764 /*
4765 =for apidoc Am|OP *|newOP|I32 type|I32 flags
4766 
4767 Constructs, checks, and returns an op of any base type (any type that
4768 has no extra fields).  C<type> is the opcode.  C<flags> gives the
4769 eight bits of C<op_flags>, and, shifted up eight bits, the eight bits
4770 of C<op_private>.
4771 
4772 =cut
4773 */
4774 
4775 OP *
4776 Perl_newOP(pTHX_ I32 type, I32 flags)
4777 {
4778     dVAR;
4779     OP *o;
4780 
4781     if (type == -OP_ENTEREVAL) {
4782 	type = OP_ENTEREVAL;
4783 	flags |= OPpEVAL_BYTES<<8;
4784     }
4785 
4786     assert((PL_opargs[type] & OA_CLASS_MASK) == OA_BASEOP
4787 	|| (PL_opargs[type] & OA_CLASS_MASK) == OA_BASEOP_OR_UNOP
4788 	|| (PL_opargs[type] & OA_CLASS_MASK) == OA_FILESTATOP
4789 	|| (PL_opargs[type] & OA_CLASS_MASK) == OA_LOOPEXOP);
4790 
4791     NewOp(1101, o, 1, OP);
4792     OpTYPE_set(o, type);
4793     o->op_flags = (U8)flags;
4794 
4795     o->op_next = o;
4796     o->op_private = (U8)(0 | (flags >> 8));
4797     if (PL_opargs[type] & OA_RETSCALAR)
4798 	scalar(o);
4799     if (PL_opargs[type] & OA_TARGET)
4800 	o->op_targ = pad_alloc(type, SVs_PADTMP);
4801     return CHECKOP(type, o);
4802 }
4803 
4804 /*
4805 =for apidoc Am|OP *|newUNOP|I32 type|I32 flags|OP *first
4806 
4807 Constructs, checks, and returns an op of any unary type.  C<type> is
4808 the opcode.  C<flags> gives the eight bits of C<op_flags>, except that
4809 C<OPf_KIDS> will be set automatically if required, and, shifted up eight
4810 bits, the eight bits of C<op_private>, except that the bit with value 1
4811 is automatically set.  C<first> supplies an optional op to be the direct
4812 child of the unary op; it is consumed by this function and become part
4813 of the constructed op tree.
4814 
4815 =cut
4816 */
4817 
4818 OP *
4819 Perl_newUNOP(pTHX_ I32 type, I32 flags, OP *first)
4820 {
4821     dVAR;
4822     UNOP *unop;
4823 
4824     if (type == -OP_ENTEREVAL) {
4825 	type = OP_ENTEREVAL;
4826 	flags |= OPpEVAL_BYTES<<8;
4827     }
4828 
4829     assert((PL_opargs[type] & OA_CLASS_MASK) == OA_UNOP
4830 	|| (PL_opargs[type] & OA_CLASS_MASK) == OA_BASEOP_OR_UNOP
4831 	|| (PL_opargs[type] & OA_CLASS_MASK) == OA_FILESTATOP
4832 	|| (PL_opargs[type] & OA_CLASS_MASK) == OA_LOOPEXOP
4833 	|| type == OP_SASSIGN
4834 	|| type == OP_ENTERTRY
4835 	|| type == OP_CUSTOM
4836 	|| type == OP_NULL );
4837 
4838     if (!first)
4839 	first = newOP(OP_STUB, 0);
4840     if (PL_opargs[type] & OA_MARK)
4841 	first = force_list(first, 1);
4842 
4843     NewOp(1101, unop, 1, UNOP);
4844     OpTYPE_set(unop, type);
4845     unop->op_first = first;
4846     unop->op_flags = (U8)(flags | OPf_KIDS);
4847     unop->op_private = (U8)(1 | (flags >> 8));
4848 
4849     if (!OpHAS_SIBLING(first)) /* true unless weird syntax error */
4850         OpLASTSIB_set(first, (OP*)unop);
4851 
4852     unop = (UNOP*) CHECKOP(type, unop);
4853     if (unop->op_next)
4854 	return (OP*)unop;
4855 
4856     return fold_constants(op_integerize(op_std_init((OP *) unop)));
4857 }
4858 
4859 /*
4860 =for apidoc newUNOP_AUX
4861 
4862 Similar to C<newUNOP>, but creates an C<UNOP_AUX> struct instead, with C<op_aux>
4863 initialised to C<aux>
4864 
4865 =cut
4866 */
4867 
4868 OP *
4869 Perl_newUNOP_AUX(pTHX_ I32 type, I32 flags, OP *first, UNOP_AUX_item *aux)
4870 {
4871     dVAR;
4872     UNOP_AUX *unop;
4873 
4874     assert((PL_opargs[type] & OA_CLASS_MASK) == OA_UNOP_AUX
4875         || type == OP_CUSTOM);
4876 
4877     NewOp(1101, unop, 1, UNOP_AUX);
4878     unop->op_type = (OPCODE)type;
4879     unop->op_ppaddr = PL_ppaddr[type];
4880     unop->op_first = first;
4881     unop->op_flags = (U8)(flags | (first ? OPf_KIDS : 0));
4882     unop->op_private = (U8)((first ? 1 : 0) | (flags >> 8));
4883     unop->op_aux = aux;
4884 
4885     if (first && !OpHAS_SIBLING(first)) /* true unless weird syntax error */
4886         OpLASTSIB_set(first, (OP*)unop);
4887 
4888     unop = (UNOP_AUX*) CHECKOP(type, unop);
4889 
4890     return op_std_init((OP *) unop);
4891 }
4892 
4893 /*
4894 =for apidoc Am|OP *|newMETHOP|I32 type|I32 flags|OP *first
4895 
4896 Constructs, checks, and returns an op of method type with a method name
4897 evaluated at runtime.  C<type> is the opcode.  C<flags> gives the eight
4898 bits of C<op_flags>, except that C<OPf_KIDS> will be set automatically,
4899 and, shifted up eight bits, the eight bits of C<op_private>, except that
4900 the bit with value 1 is automatically set.  C<dynamic_meth> supplies an
4901 op which evaluates method name; it is consumed by this function and
4902 become part of the constructed op tree.
4903 Supported optypes: C<OP_METHOD>.
4904 
4905 =cut
4906 */
4907 
4908 static OP*
4909 S_newMETHOP_internal(pTHX_ I32 type, I32 flags, OP* dynamic_meth, SV* const_meth) {
4910     dVAR;
4911     METHOP *methop;
4912 
4913     assert((PL_opargs[type] & OA_CLASS_MASK) == OA_METHOP
4914         || type == OP_CUSTOM);
4915 
4916     NewOp(1101, methop, 1, METHOP);
4917     if (dynamic_meth) {
4918         if (PL_opargs[type] & OA_MARK) dynamic_meth = force_list(dynamic_meth, 1);
4919         methop->op_flags = (U8)(flags | OPf_KIDS);
4920         methop->op_u.op_first = dynamic_meth;
4921         methop->op_private = (U8)(1 | (flags >> 8));
4922 
4923         if (!OpHAS_SIBLING(dynamic_meth))
4924             OpLASTSIB_set(dynamic_meth, (OP*)methop);
4925     }
4926     else {
4927         assert(const_meth);
4928         methop->op_flags = (U8)(flags & ~OPf_KIDS);
4929         methop->op_u.op_meth_sv = const_meth;
4930         methop->op_private = (U8)(0 | (flags >> 8));
4931         methop->op_next = (OP*)methop;
4932     }
4933 
4934 #ifdef USE_ITHREADS
4935     methop->op_rclass_targ = 0;
4936 #else
4937     methop->op_rclass_sv = NULL;
4938 #endif
4939 
4940     OpTYPE_set(methop, type);
4941     return CHECKOP(type, methop);
4942 }
4943 
4944 OP *
4945 Perl_newMETHOP (pTHX_ I32 type, I32 flags, OP* dynamic_meth) {
4946     PERL_ARGS_ASSERT_NEWMETHOP;
4947     return newMETHOP_internal(type, flags, dynamic_meth, NULL);
4948 }
4949 
4950 /*
4951 =for apidoc Am|OP *|newMETHOP_named|I32 type|I32 flags|SV *const_meth
4952 
4953 Constructs, checks, and returns an op of method type with a constant
4954 method name.  C<type> is the opcode.  C<flags> gives the eight bits of
4955 C<op_flags>, and, shifted up eight bits, the eight bits of
4956 C<op_private>.  C<const_meth> supplies a constant method name;
4957 it must be a shared COW string.
4958 Supported optypes: C<OP_METHOD_NAMED>.
4959 
4960 =cut
4961 */
4962 
4963 OP *
4964 Perl_newMETHOP_named (pTHX_ I32 type, I32 flags, SV* const_meth) {
4965     PERL_ARGS_ASSERT_NEWMETHOP_NAMED;
4966     return newMETHOP_internal(type, flags, NULL, const_meth);
4967 }
4968 
4969 /*
4970 =for apidoc Am|OP *|newBINOP|I32 type|I32 flags|OP *first|OP *last
4971 
4972 Constructs, checks, and returns an op of any binary type.  C<type>
4973 is the opcode.  C<flags> gives the eight bits of C<op_flags>, except
4974 that C<OPf_KIDS> will be set automatically, and, shifted up eight bits,
4975 the eight bits of C<op_private>, except that the bit with value 1 or
4976 2 is automatically set as required.  C<first> and C<last> supply up to
4977 two ops to be the direct children of the binary op; they are consumed
4978 by this function and become part of the constructed op tree.
4979 
4980 =cut
4981 */
4982 
4983 OP *
4984 Perl_newBINOP(pTHX_ I32 type, I32 flags, OP *first, OP *last)
4985 {
4986     dVAR;
4987     BINOP *binop;
4988 
4989     ASSUME((PL_opargs[type] & OA_CLASS_MASK) == OA_BINOP
4990 	|| type == OP_SASSIGN || type == OP_NULL || type == OP_CUSTOM);
4991 
4992     NewOp(1101, binop, 1, BINOP);
4993 
4994     if (!first)
4995 	first = newOP(OP_NULL, 0);
4996 
4997     OpTYPE_set(binop, type);
4998     binop->op_first = first;
4999     binop->op_flags = (U8)(flags | OPf_KIDS);
5000     if (!last) {
5001 	last = first;
5002 	binop->op_private = (U8)(1 | (flags >> 8));
5003     }
5004     else {
5005 	binop->op_private = (U8)(2 | (flags >> 8));
5006         OpMORESIB_set(first, last);
5007     }
5008 
5009     if (!OpHAS_SIBLING(last)) /* true unless weird syntax error */
5010         OpLASTSIB_set(last, (OP*)binop);
5011 
5012     binop->op_last = OpSIBLING(binop->op_first);
5013     if (binop->op_last)
5014         OpLASTSIB_set(binop->op_last, (OP*)binop);
5015 
5016     binop = (BINOP*)CHECKOP(type, binop);
5017     if (binop->op_next || binop->op_type != (OPCODE)type)
5018 	return (OP*)binop;
5019 
5020     return fold_constants(op_integerize(op_std_init((OP *)binop)));
5021 }
5022 
5023 static int uvcompare(const void *a, const void *b)
5024     __attribute__nonnull__(1)
5025     __attribute__nonnull__(2)
5026     __attribute__pure__;
5027 static int uvcompare(const void *a, const void *b)
5028 {
5029     if (*((const UV *)a) < (*(const UV *)b))
5030 	return -1;
5031     if (*((const UV *)a) > (*(const UV *)b))
5032 	return 1;
5033     if (*((const UV *)a+1) < (*(const UV *)b+1))
5034 	return -1;
5035     if (*((const UV *)a+1) > (*(const UV *)b+1))
5036 	return 1;
5037     return 0;
5038 }
5039 
5040 static OP *
5041 S_pmtrans(pTHX_ OP *o, OP *expr, OP *repl)
5042 {
5043     SV * const tstr = ((SVOP*)expr)->op_sv;
5044     SV * const rstr =
5045 			      ((SVOP*)repl)->op_sv;
5046     STRLEN tlen;
5047     STRLEN rlen;
5048     const U8 *t = (U8*)SvPV_const(tstr, tlen);
5049     const U8 *r = (U8*)SvPV_const(rstr, rlen);
5050     I32 i;
5051     I32 j;
5052     I32 grows = 0;
5053     short *tbl;
5054 
5055     const I32 complement = o->op_private & OPpTRANS_COMPLEMENT;
5056     const I32 squash     = o->op_private & OPpTRANS_SQUASH;
5057     I32 del              = o->op_private & OPpTRANS_DELETE;
5058     SV* swash;
5059 
5060     PERL_ARGS_ASSERT_PMTRANS;
5061 
5062     PL_hints |= HINT_BLOCK_SCOPE;
5063 
5064     if (SvUTF8(tstr))
5065         o->op_private |= OPpTRANS_FROM_UTF;
5066 
5067     if (SvUTF8(rstr))
5068         o->op_private |= OPpTRANS_TO_UTF;
5069 
5070     if (o->op_private & (OPpTRANS_FROM_UTF|OPpTRANS_TO_UTF)) {
5071 	SV* const listsv = newSVpvs("# comment\n");
5072 	SV* transv = NULL;
5073 	const U8* tend = t + tlen;
5074 	const U8* rend = r + rlen;
5075 	STRLEN ulen;
5076 	UV tfirst = 1;
5077 	UV tlast = 0;
5078 	IV tdiff;
5079 	STRLEN tcount = 0;
5080 	UV rfirst = 1;
5081 	UV rlast = 0;
5082 	IV rdiff;
5083 	STRLEN rcount = 0;
5084 	IV diff;
5085 	I32 none = 0;
5086 	U32 max = 0;
5087 	I32 bits;
5088 	I32 havefinal = 0;
5089 	U32 final = 0;
5090 	const I32 from_utf  = o->op_private & OPpTRANS_FROM_UTF;
5091 	const I32 to_utf    = o->op_private & OPpTRANS_TO_UTF;
5092 	U8* tsave = NULL;
5093 	U8* rsave = NULL;
5094 	const U32 flags = UTF8_ALLOW_DEFAULT;
5095 
5096 	if (!from_utf) {
5097 	    STRLEN len = tlen;
5098 	    t = tsave = bytes_to_utf8(t, &len);
5099 	    tend = t + len;
5100 	}
5101 	if (!to_utf && rlen) {
5102 	    STRLEN len = rlen;
5103 	    r = rsave = bytes_to_utf8(r, &len);
5104 	    rend = r + len;
5105 	}
5106 
5107 /* There is a snag with this code on EBCDIC: scan_const() in toke.c has
5108  * encoded chars in native encoding which makes ranges in the EBCDIC 0..255
5109  * odd.  */
5110 
5111 	if (complement) {
5112 	    U8 tmpbuf[UTF8_MAXBYTES+1];
5113 	    UV *cp;
5114 	    UV nextmin = 0;
5115 	    Newx(cp, 2*tlen, UV);
5116 	    i = 0;
5117 	    transv = newSVpvs("");
5118 	    while (t < tend) {
5119 		cp[2*i] = utf8n_to_uvchr(t, tend-t, &ulen, flags);
5120 		t += ulen;
5121 		if (t < tend && *t == ILLEGAL_UTF8_BYTE) {
5122 		    t++;
5123 		    cp[2*i+1] = utf8n_to_uvchr(t, tend-t, &ulen, flags);
5124 		    t += ulen;
5125 		}
5126 		else {
5127 		 cp[2*i+1] = cp[2*i];
5128 		}
5129 		i++;
5130 	    }
5131 	    qsort(cp, i, 2*sizeof(UV), uvcompare);
5132 	    for (j = 0; j < i; j++) {
5133 		UV  val = cp[2*j];
5134 		diff = val - nextmin;
5135 		if (diff > 0) {
5136 		    t = uvchr_to_utf8(tmpbuf,nextmin);
5137 		    sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf);
5138 		    if (diff > 1) {
5139 			U8  range_mark = ILLEGAL_UTF8_BYTE;
5140 			t = uvchr_to_utf8(tmpbuf, val - 1);
5141 			sv_catpvn(transv, (char *)&range_mark, 1);
5142 			sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf);
5143 		    }
5144 	        }
5145 		val = cp[2*j+1];
5146 		if (val >= nextmin)
5147 		    nextmin = val + 1;
5148 	    }
5149 	    t = uvchr_to_utf8(tmpbuf,nextmin);
5150 	    sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf);
5151 	    {
5152 		U8 range_mark = ILLEGAL_UTF8_BYTE;
5153 		sv_catpvn(transv, (char *)&range_mark, 1);
5154 	    }
5155 	    t = uvchr_to_utf8(tmpbuf, 0x7fffffff);
5156 	    sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf);
5157 	    t = (const U8*)SvPVX_const(transv);
5158 	    tlen = SvCUR(transv);
5159 	    tend = t + tlen;
5160 	    Safefree(cp);
5161 	}
5162 	else if (!rlen && !del) {
5163 	    r = t; rlen = tlen; rend = tend;
5164 	}
5165 	if (!squash) {
5166 		if ((!rlen && !del) || t == r ||
5167 		    (tlen == rlen && memEQ((char *)t, (char *)r, tlen)))
5168 		{
5169 		    o->op_private |= OPpTRANS_IDENTICAL;
5170 		}
5171 	}
5172 
5173 	while (t < tend || tfirst <= tlast) {
5174 	    /* see if we need more "t" chars */
5175 	    if (tfirst > tlast) {
5176 		tfirst = (I32)utf8n_to_uvchr(t, tend - t, &ulen, flags);
5177 		t += ulen;
5178 		if (t < tend && *t == ILLEGAL_UTF8_BYTE) {	/* illegal utf8 val indicates range */
5179 		    t++;
5180 		    tlast = (I32)utf8n_to_uvchr(t, tend - t, &ulen, flags);
5181 		    t += ulen;
5182 		}
5183 		else
5184 		    tlast = tfirst;
5185 	    }
5186 
5187 	    /* now see if we need more "r" chars */
5188 	    if (rfirst > rlast) {
5189 		if (r < rend) {
5190 		    rfirst = (I32)utf8n_to_uvchr(r, rend - r, &ulen, flags);
5191 		    r += ulen;
5192 		    if (r < rend && *r == ILLEGAL_UTF8_BYTE) {	/* illegal utf8 val indicates range */
5193 			r++;
5194 			rlast = (I32)utf8n_to_uvchr(r, rend - r, &ulen, flags);
5195 			r += ulen;
5196 		    }
5197 		    else
5198 			rlast = rfirst;
5199 		}
5200 		else {
5201 		    if (!havefinal++)
5202 			final = rlast;
5203 		    rfirst = rlast = 0xffffffff;
5204 		}
5205 	    }
5206 
5207 	    /* now see which range will peter out first, if either. */
5208 	    tdiff = tlast - tfirst;
5209 	    rdiff = rlast - rfirst;
5210 	    tcount += tdiff + 1;
5211 	    rcount += rdiff + 1;
5212 
5213 	    if (tdiff <= rdiff)
5214 		diff = tdiff;
5215 	    else
5216 		diff = rdiff;
5217 
5218 	    if (rfirst == 0xffffffff) {
5219 		diff = tdiff;	/* oops, pretend rdiff is infinite */
5220 		if (diff > 0)
5221 		    Perl_sv_catpvf(aTHX_ listsv, "%04lx\t%04lx\tXXXX\n",
5222 				   (long)tfirst, (long)tlast);
5223 		else
5224 		    Perl_sv_catpvf(aTHX_ listsv, "%04lx\t\tXXXX\n", (long)tfirst);
5225 	    }
5226 	    else {
5227 		if (diff > 0)
5228 		    Perl_sv_catpvf(aTHX_ listsv, "%04lx\t%04lx\t%04lx\n",
5229 				   (long)tfirst, (long)(tfirst + diff),
5230 				   (long)rfirst);
5231 		else
5232 		    Perl_sv_catpvf(aTHX_ listsv, "%04lx\t\t%04lx\n",
5233 				   (long)tfirst, (long)rfirst);
5234 
5235 		if (rfirst + diff > max)
5236 		    max = rfirst + diff;
5237 		if (!grows)
5238 		    grows = (tfirst < rfirst &&
5239 			     UVCHR_SKIP(tfirst) < UVCHR_SKIP(rfirst + diff));
5240 		rfirst += diff + 1;
5241 	    }
5242 	    tfirst += diff + 1;
5243 	}
5244 
5245 	none = ++max;
5246 	if (del)
5247 	    del = ++max;
5248 
5249 	if (max > 0xffff)
5250 	    bits = 32;
5251 	else if (max > 0xff)
5252 	    bits = 16;
5253 	else
5254 	    bits = 8;
5255 
5256 	swash = MUTABLE_SV(swash_init("utf8", "", listsv, bits, none));
5257 #ifdef USE_ITHREADS
5258 	cPADOPo->op_padix = pad_alloc(OP_TRANS, SVf_READONLY);
5259 	SvREFCNT_dec(PAD_SVl(cPADOPo->op_padix));
5260 	PAD_SETSV(cPADOPo->op_padix, swash);
5261 	SvPADTMP_on(swash);
5262 	SvREADONLY_on(swash);
5263 #else
5264 	cSVOPo->op_sv = swash;
5265 #endif
5266 	SvREFCNT_dec(listsv);
5267 	SvREFCNT_dec(transv);
5268 
5269 	if (!del && havefinal && rlen)
5270 	    (void)hv_store(MUTABLE_HV(SvRV(swash)), "FINAL", 5,
5271 			   newSVuv((UV)final), 0);
5272 
5273 	Safefree(tsave);
5274 	Safefree(rsave);
5275 
5276 	tlen = tcount;
5277 	rlen = rcount;
5278 	if (r < rend)
5279 	    rlen++;
5280 	else if (rlast == 0xffffffff)
5281 	    rlen = 0;
5282 
5283 	goto warnins;
5284     }
5285 
5286     tbl = (short*)PerlMemShared_calloc(
5287 	(o->op_private & OPpTRANS_COMPLEMENT) &&
5288 	    !(o->op_private & OPpTRANS_DELETE) ? 258 : 256,
5289 	sizeof(short));
5290     cPVOPo->op_pv = (char*)tbl;
5291     if (complement) {
5292 	for (i = 0; i < (I32)tlen; i++)
5293 	    tbl[t[i]] = -1;
5294 	for (i = 0, j = 0; i < 256; i++) {
5295 	    if (!tbl[i]) {
5296 		if (j >= (I32)rlen) {
5297 		    if (del)
5298 			tbl[i] = -2;
5299 		    else if (rlen)
5300 			tbl[i] = r[j-1];
5301 		    else
5302 			tbl[i] = (short)i;
5303 		}
5304 		else {
5305 		    if (i < 128 && r[j] >= 128)
5306 			grows = 1;
5307 		    tbl[i] = r[j++];
5308 		}
5309 	    }
5310 	}
5311 	if (!del) {
5312 	    if (!rlen) {
5313 		j = rlen;
5314 		if (!squash)
5315 		    o->op_private |= OPpTRANS_IDENTICAL;
5316 	    }
5317 	    else if (j >= (I32)rlen)
5318 		j = rlen - 1;
5319 	    else {
5320 		tbl =
5321 		    (short *)
5322 		    PerlMemShared_realloc(tbl,
5323 					  (0x101+rlen-j) * sizeof(short));
5324 		cPVOPo->op_pv = (char*)tbl;
5325 	    }
5326 	    tbl[0x100] = (short)(rlen - j);
5327 	    for (i=0; i < (I32)rlen - j; i++)
5328 		tbl[0x101+i] = r[j+i];
5329 	}
5330     }
5331     else {
5332 	if (!rlen && !del) {
5333 	    r = t; rlen = tlen;
5334 	    if (!squash)
5335 		o->op_private |= OPpTRANS_IDENTICAL;
5336 	}
5337 	else if (!squash && rlen == tlen && memEQ((char*)t, (char*)r, tlen)) {
5338 	    o->op_private |= OPpTRANS_IDENTICAL;
5339 	}
5340 	for (i = 0; i < 256; i++)
5341 	    tbl[i] = -1;
5342 	for (i = 0, j = 0; i < (I32)tlen; i++,j++) {
5343 	    if (j >= (I32)rlen) {
5344 		if (del) {
5345 		    if (tbl[t[i]] == -1)
5346 			tbl[t[i]] = -2;
5347 		    continue;
5348 		}
5349 		--j;
5350 	    }
5351 	    if (tbl[t[i]] == -1) {
5352 		if (t[i] < 128 && r[j] >= 128)
5353 		    grows = 1;
5354 		tbl[t[i]] = r[j];
5355 	    }
5356 	}
5357     }
5358 
5359   warnins:
5360     if(del && rlen == tlen) {
5361 	Perl_ck_warner(aTHX_ packWARN(WARN_MISC), "Useless use of /d modifier in transliteration operator");
5362     } else if(rlen > tlen && !complement) {
5363 	Perl_ck_warner(aTHX_ packWARN(WARN_MISC), "Replacement list is longer than search list");
5364     }
5365 
5366     if (grows)
5367 	o->op_private |= OPpTRANS_GROWS;
5368     op_free(expr);
5369     op_free(repl);
5370 
5371     return o;
5372 }
5373 
5374 /*
5375 =for apidoc Am|OP *|newPMOP|I32 type|I32 flags
5376 
5377 Constructs, checks, and returns an op of any pattern matching type.
5378 C<type> is the opcode.  C<flags> gives the eight bits of C<op_flags>
5379 and, shifted up eight bits, the eight bits of C<op_private>.
5380 
5381 =cut
5382 */
5383 
5384 OP *
5385 Perl_newPMOP(pTHX_ I32 type, I32 flags)
5386 {
5387     dVAR;
5388     PMOP *pmop;
5389 
5390     assert((PL_opargs[type] & OA_CLASS_MASK) == OA_PMOP
5391 	|| type == OP_CUSTOM);
5392 
5393     NewOp(1101, pmop, 1, PMOP);
5394     OpTYPE_set(pmop, type);
5395     pmop->op_flags = (U8)flags;
5396     pmop->op_private = (U8)(0 | (flags >> 8));
5397     if (PL_opargs[type] & OA_RETSCALAR)
5398 	scalar((OP *)pmop);
5399 
5400     if (PL_hints & HINT_RE_TAINT)
5401 	pmop->op_pmflags |= PMf_RETAINT;
5402 #ifdef USE_LOCALE_CTYPE
5403     if (IN_LC_COMPILETIME(LC_CTYPE)) {
5404 	set_regex_charset(&(pmop->op_pmflags), REGEX_LOCALE_CHARSET);
5405     }
5406     else
5407 #endif
5408          if (IN_UNI_8_BIT) {
5409 	set_regex_charset(&(pmop->op_pmflags), REGEX_UNICODE_CHARSET);
5410     }
5411     if (PL_hints & HINT_RE_FLAGS) {
5412         SV *reflags = Perl_refcounted_he_fetch_pvn(aTHX_
5413          PL_compiling.cop_hints_hash, STR_WITH_LEN("reflags"), 0, 0
5414         );
5415         if (reflags && SvOK(reflags)) pmop->op_pmflags |= SvIV(reflags);
5416         reflags = Perl_refcounted_he_fetch_pvn(aTHX_
5417          PL_compiling.cop_hints_hash, STR_WITH_LEN("reflags_charset"), 0, 0
5418         );
5419         if (reflags && SvOK(reflags)) {
5420             set_regex_charset(&(pmop->op_pmflags), (regex_charset)SvIV(reflags));
5421         }
5422     }
5423 
5424 
5425 #ifdef USE_ITHREADS
5426     assert(SvPOK(PL_regex_pad[0]));
5427     if (SvCUR(PL_regex_pad[0])) {
5428 	/* Pop off the "packed" IV from the end.  */
5429 	SV *const repointer_list = PL_regex_pad[0];
5430 	const char *p = SvEND(repointer_list) - sizeof(IV);
5431 	const IV offset = *((IV*)p);
5432 
5433 	assert(SvCUR(repointer_list) % sizeof(IV) == 0);
5434 
5435 	SvEND_set(repointer_list, p);
5436 
5437 	pmop->op_pmoffset = offset;
5438 	/* This slot should be free, so assert this:  */
5439 	assert(PL_regex_pad[offset] == &PL_sv_undef);
5440     } else {
5441 	SV * const repointer = &PL_sv_undef;
5442 	av_push(PL_regex_padav, repointer);
5443 	pmop->op_pmoffset = av_tindex(PL_regex_padav);
5444 	PL_regex_pad = AvARRAY(PL_regex_padav);
5445     }
5446 #endif
5447 
5448     return CHECKOP(type, pmop);
5449 }
5450 
5451 static void
5452 S_set_haseval(pTHX)
5453 {
5454     PADOFFSET i = 1;
5455     PL_cv_has_eval = 1;
5456     /* Any pad names in scope are potentially lvalues.  */
5457     for (; i < PadnamelistMAXNAMED(PL_comppad_name); i++) {
5458 	PADNAME *pn = PAD_COMPNAME_SV(i);
5459 	if (!pn || !PadnameLEN(pn))
5460 	    continue;
5461 	if (PadnameOUTER(pn) || PadnameIN_SCOPE(pn, PL_cop_seqmax))
5462 	    S_mark_padname_lvalue(aTHX_ pn);
5463     }
5464 }
5465 
5466 /* Given some sort of match op o, and an expression expr containing a
5467  * pattern, either compile expr into a regex and attach it to o (if it's
5468  * constant), or convert expr into a runtime regcomp op sequence (if it's
5469  * not)
5470  *
5471  * isreg indicates that the pattern is part of a regex construct, eg
5472  * $x =~ /pattern/ or split /pattern/, as opposed to $x =~ $pattern or
5473  * split "pattern", which aren't. In the former case, expr will be a list
5474  * if the pattern contains more than one term (eg /a$b/).
5475  *
5476  * When the pattern has been compiled within a new anon CV (for
5477  * qr/(?{...})/ ), then floor indicates the savestack level just before
5478  * the new sub was created
5479  */
5480 
5481 OP *
5482 Perl_pmruntime(pTHX_ OP *o, OP *expr, OP *repl, bool isreg, I32 floor)
5483 {
5484     PMOP *pm;
5485     LOGOP *rcop;
5486     I32 repl_has_vars = 0;
5487     bool is_trans = (o->op_type == OP_TRANS || o->op_type == OP_TRANSR);
5488     bool is_compiletime;
5489     bool has_code;
5490 
5491     PERL_ARGS_ASSERT_PMRUNTIME;
5492 
5493     if (is_trans) {
5494         return pmtrans(o, expr, repl);
5495     }
5496 
5497     /* find whether we have any runtime or code elements;
5498      * at the same time, temporarily set the op_next of each DO block;
5499      * then when we LINKLIST, this will cause the DO blocks to be excluded
5500      * from the op_next chain (and from having LINKLIST recursively
5501      * applied to them). We fix up the DOs specially later */
5502 
5503     is_compiletime = 1;
5504     has_code = 0;
5505     if (expr->op_type == OP_LIST) {
5506 	OP *o;
5507 	for (o = cLISTOPx(expr)->op_first; o; o = OpSIBLING(o)) {
5508 	    if (o->op_type == OP_NULL && (o->op_flags & OPf_SPECIAL)) {
5509 		has_code = 1;
5510 		assert(!o->op_next);
5511 		if (UNLIKELY(!OpHAS_SIBLING(o))) {
5512 		    assert(PL_parser && PL_parser->error_count);
5513 		    /* This can happen with qr/ (?{(^{})/.  Just fake up
5514 		       the op we were expecting to see, to avoid crashing
5515 		       elsewhere.  */
5516 		    op_sibling_splice(expr, o, 0,
5517 				      newSVOP(OP_CONST, 0, &PL_sv_no));
5518 		}
5519 		o->op_next = OpSIBLING(o);
5520 	    }
5521 	    else if (o->op_type != OP_CONST && o->op_type != OP_PUSHMARK)
5522 		is_compiletime = 0;
5523 	}
5524     }
5525     else if (expr->op_type != OP_CONST)
5526 	is_compiletime = 0;
5527 
5528     LINKLIST(expr);
5529 
5530     /* fix up DO blocks; treat each one as a separate little sub;
5531      * also, mark any arrays as LIST/REF */
5532 
5533     if (expr->op_type == OP_LIST) {
5534 	OP *o;
5535 	for (o = cLISTOPx(expr)->op_first; o; o = OpSIBLING(o)) {
5536 
5537             if (o->op_type == OP_PADAV || o->op_type == OP_RV2AV) {
5538                 assert( !(o->op_flags  & OPf_WANT));
5539                 /* push the array rather than its contents. The regex
5540                  * engine will retrieve and join the elements later */
5541                 o->op_flags |= (OPf_WANT_LIST | OPf_REF);
5542                 continue;
5543             }
5544 
5545 	    if (!(o->op_type == OP_NULL && (o->op_flags & OPf_SPECIAL)))
5546 		continue;
5547 	    o->op_next = NULL; /* undo temporary hack from above */
5548 	    scalar(o);
5549 	    LINKLIST(o);
5550 	    if (cLISTOPo->op_first->op_type == OP_LEAVE) {
5551 		LISTOP *leaveop = cLISTOPx(cLISTOPo->op_first);
5552 		/* skip ENTER */
5553 		assert(leaveop->op_first->op_type == OP_ENTER);
5554 		assert(OpHAS_SIBLING(leaveop->op_first));
5555 		o->op_next = OpSIBLING(leaveop->op_first);
5556 		/* skip leave */
5557 		assert(leaveop->op_flags & OPf_KIDS);
5558 		assert(leaveop->op_last->op_next == (OP*)leaveop);
5559 		leaveop->op_next = NULL; /* stop on last op */
5560 		op_null((OP*)leaveop);
5561 	    }
5562 	    else {
5563 		/* skip SCOPE */
5564 		OP *scope = cLISTOPo->op_first;
5565 		assert(scope->op_type == OP_SCOPE);
5566 		assert(scope->op_flags & OPf_KIDS);
5567 		scope->op_next = NULL; /* stop on last op */
5568 		op_null(scope);
5569 	    }
5570 	    /* have to peep the DOs individually as we've removed it from
5571 	     * the op_next chain */
5572 	    CALL_PEEP(o);
5573             S_prune_chain_head(&(o->op_next));
5574 	    if (is_compiletime)
5575 		/* runtime finalizes as part of finalizing whole tree */
5576 		finalize_optree(o);
5577 	}
5578     }
5579     else if (expr->op_type == OP_PADAV || expr->op_type == OP_RV2AV) {
5580         assert( !(expr->op_flags  & OPf_WANT));
5581         /* push the array rather than its contents. The regex
5582          * engine will retrieve and join the elements later */
5583         expr->op_flags |= (OPf_WANT_LIST | OPf_REF);
5584     }
5585 
5586     PL_hints |= HINT_BLOCK_SCOPE;
5587     pm = (PMOP*)o;
5588     assert(floor==0 || (pm->op_pmflags & PMf_HAS_CV));
5589 
5590     if (is_compiletime) {
5591 	U32 rx_flags = pm->op_pmflags & RXf_PMf_COMPILETIME;
5592 	regexp_engine const *eng = current_re_engine();
5593 
5594         if (o->op_flags & OPf_SPECIAL)
5595             rx_flags |= RXf_SPLIT;
5596 
5597 	if (!has_code || !eng->op_comp) {
5598 	    /* compile-time simple constant pattern */
5599 
5600 	    if ((pm->op_pmflags & PMf_HAS_CV) && !has_code) {
5601 		/* whoops! we guessed that a qr// had a code block, but we
5602 		 * were wrong (e.g. /[(?{}]/ ). Throw away the PL_compcv
5603 		 * that isn't required now. Note that we have to be pretty
5604 		 * confident that nothing used that CV's pad while the
5605 		 * regex was parsed, except maybe op targets for \Q etc.
5606 		 * If there were any op targets, though, they should have
5607 		 * been stolen by constant folding.
5608 		 */
5609 #ifdef DEBUGGING
5610 		SSize_t i = 0;
5611 		assert(PadnamelistMAXNAMED(PL_comppad_name) == 0);
5612 		while (++i <= AvFILLp(PL_comppad)) {
5613 		    assert(!PL_curpad[i]);
5614 		}
5615 #endif
5616 		/* But we know that one op is using this CV's slab. */
5617 		cv_forget_slab(PL_compcv);
5618 		LEAVE_SCOPE(floor);
5619 		pm->op_pmflags &= ~PMf_HAS_CV;
5620 	    }
5621 
5622 	    PM_SETRE(pm,
5623 		eng->op_comp
5624 		    ? eng->op_comp(aTHX_ NULL, 0, expr, eng, NULL, NULL,
5625 					rx_flags, pm->op_pmflags)
5626 		    : Perl_re_op_compile(aTHX_ NULL, 0, expr, eng, NULL, NULL,
5627 					rx_flags, pm->op_pmflags)
5628 	    );
5629 	    op_free(expr);
5630 	}
5631 	else {
5632 	    /* compile-time pattern that includes literal code blocks */
5633 	    REGEXP* re = eng->op_comp(aTHX_ NULL, 0, expr, eng, NULL, NULL,
5634 			rx_flags,
5635 			(pm->op_pmflags |
5636 			    ((PL_hints & HINT_RE_EVAL) ? PMf_USE_RE_EVAL : 0))
5637 		    );
5638 	    PM_SETRE(pm, re);
5639 	    if (pm->op_pmflags & PMf_HAS_CV) {
5640 		CV *cv;
5641 		/* this QR op (and the anon sub we embed it in) is never
5642 		 * actually executed. It's just a placeholder where we can
5643 		 * squirrel away expr in op_code_list without the peephole
5644 		 * optimiser etc processing it for a second time */
5645 		OP *qr = newPMOP(OP_QR, 0);
5646 		((PMOP*)qr)->op_code_list = expr;
5647 
5648 		/* handle the implicit sub{} wrapped round the qr/(?{..})/ */
5649 		SvREFCNT_inc_simple_void(PL_compcv);
5650 		cv = newATTRSUB(floor, 0, NULL, NULL, qr);
5651 		ReANY(re)->qr_anoncv = cv;
5652 
5653 		/* attach the anon CV to the pad so that
5654 		 * pad_fixup_inner_anons() can find it */
5655 		(void)pad_add_anon(cv, o->op_type);
5656 		SvREFCNT_inc_simple_void(cv);
5657 	    }
5658 	    else {
5659 		pm->op_code_list = expr;
5660 	    }
5661 	}
5662     }
5663     else {
5664 	/* runtime pattern: build chain of regcomp etc ops */
5665 	bool reglist;
5666 	PADOFFSET cv_targ = 0;
5667 
5668 	reglist = isreg && expr->op_type == OP_LIST;
5669 	if (reglist)
5670 	    op_null(expr);
5671 
5672 	if (has_code) {
5673 	    pm->op_code_list = expr;
5674 	    /* don't free op_code_list; its ops are embedded elsewhere too */
5675 	    pm->op_pmflags |= PMf_CODELIST_PRIVATE;
5676 	}
5677 
5678         if (o->op_flags & OPf_SPECIAL)
5679             pm->op_pmflags |= PMf_SPLIT;
5680 
5681 	/* the OP_REGCMAYBE is a placeholder in the non-threaded case
5682 	 * to allow its op_next to be pointed past the regcomp and
5683 	 * preceding stacking ops;
5684 	 * OP_REGCRESET is there to reset taint before executing the
5685 	 * stacking ops */
5686 	if (pm->op_pmflags & PMf_KEEP || TAINTING_get)
5687 	    expr = newUNOP((TAINTING_get ? OP_REGCRESET : OP_REGCMAYBE),0,expr);
5688 
5689 	if (pm->op_pmflags & PMf_HAS_CV) {
5690 	    /* we have a runtime qr with literal code. This means
5691 	     * that the qr// has been wrapped in a new CV, which
5692 	     * means that runtime consts, vars etc will have been compiled
5693 	     * against a new pad. So... we need to execute those ops
5694 	     * within the environment of the new CV. So wrap them in a call
5695 	     * to a new anon sub. i.e. for
5696 	     *
5697 	     *     qr/a$b(?{...})/,
5698 	     *
5699 	     * we build an anon sub that looks like
5700 	     *
5701 	     *     sub { "a", $b, '(?{...})' }
5702 	     *
5703 	     * and call it, passing the returned list to regcomp.
5704 	     * Or to put it another way, the list of ops that get executed
5705 	     * are:
5706 	     *
5707 	     *     normal              PMf_HAS_CV
5708 	     *     ------              -------------------
5709 	     *                         pushmark (for regcomp)
5710 	     *                         pushmark (for entersub)
5711 	     *                         anoncode
5712 	     *                         srefgen
5713 	     *                         entersub
5714 	     *     regcreset                  regcreset
5715 	     *     pushmark                   pushmark
5716 	     *     const("a")                 const("a")
5717 	     *     gvsv(b)                    gvsv(b)
5718 	     *     const("(?{...})")          const("(?{...})")
5719 	     *                                leavesub
5720 	     *     regcomp             regcomp
5721 	     */
5722 
5723 	    SvREFCNT_inc_simple_void(PL_compcv);
5724 	    CvLVALUE_on(PL_compcv);
5725 	    /* these lines are just an unrolled newANONATTRSUB */
5726 	    expr = newSVOP(OP_ANONCODE, 0,
5727 		    MUTABLE_SV(newATTRSUB(floor, 0, NULL, NULL, expr)));
5728 	    cv_targ = expr->op_targ;
5729 	    expr = newUNOP(OP_REFGEN, 0, expr);
5730 
5731 	    expr = list(force_list(newUNOP(OP_ENTERSUB, 0, scalar(expr)), 1));
5732 	}
5733 
5734         rcop = S_alloc_LOGOP(aTHX_ OP_REGCOMP, scalar(expr), o);
5735 	rcop->op_flags |=  ((PL_hints & HINT_RE_EVAL) ? OPf_SPECIAL : 0)
5736 			   | (reglist ? OPf_STACKED : 0);
5737 	rcop->op_targ = cv_targ;
5738 
5739 	/* /$x/ may cause an eval, since $x might be qr/(?{..})/  */
5740 	if (PL_hints & HINT_RE_EVAL)
5741 	    S_set_haseval(aTHX);
5742 
5743 	/* establish postfix order */
5744 	if (expr->op_type == OP_REGCRESET || expr->op_type == OP_REGCMAYBE) {
5745 	    LINKLIST(expr);
5746 	    rcop->op_next = expr;
5747 	    ((UNOP*)expr)->op_first->op_next = (OP*)rcop;
5748 	}
5749 	else {
5750 	    rcop->op_next = LINKLIST(expr);
5751 	    expr->op_next = (OP*)rcop;
5752 	}
5753 
5754 	op_prepend_elem(o->op_type, scalar((OP*)rcop), o);
5755     }
5756 
5757     if (repl) {
5758 	OP *curop = repl;
5759 	bool konst;
5760 	/* If we are looking at s//.../e with a single statement, get past
5761 	   the implicit do{}. */
5762 	if (curop->op_type == OP_NULL && curop->op_flags & OPf_KIDS
5763              && cUNOPx(curop)->op_first->op_type == OP_SCOPE
5764              && cUNOPx(curop)->op_first->op_flags & OPf_KIDS)
5765          {
5766             OP *sib;
5767 	    OP *kid = cUNOPx(cUNOPx(curop)->op_first)->op_first;
5768 	    if (kid->op_type == OP_NULL && (sib = OpSIBLING(kid))
5769 	     && !OpHAS_SIBLING(sib))
5770 		curop = sib;
5771 	}
5772 	if (curop->op_type == OP_CONST)
5773 	    konst = TRUE;
5774 	else if (( (curop->op_type == OP_RV2SV ||
5775 		    curop->op_type == OP_RV2AV ||
5776 		    curop->op_type == OP_RV2HV ||
5777 		    curop->op_type == OP_RV2GV)
5778 		   && cUNOPx(curop)->op_first
5779 		   && cUNOPx(curop)->op_first->op_type == OP_GV )
5780 		|| curop->op_type == OP_PADSV
5781 		|| curop->op_type == OP_PADAV
5782 		|| curop->op_type == OP_PADHV
5783 		|| curop->op_type == OP_PADANY) {
5784 	    repl_has_vars = 1;
5785 	    konst = TRUE;
5786 	}
5787 	else konst = FALSE;
5788 	if (konst
5789 	    && !(repl_has_vars
5790 		 && (!PM_GETRE(pm)
5791 		     || !RX_PRELEN(PM_GETRE(pm))
5792 		     || RX_EXTFLAGS(PM_GETRE(pm)) & RXf_EVAL_SEEN)))
5793 	{
5794 	    pm->op_pmflags |= PMf_CONST;	/* const for long enough */
5795 	    op_prepend_elem(o->op_type, scalar(repl), o);
5796 	}
5797 	else {
5798             rcop = S_alloc_LOGOP(aTHX_ OP_SUBSTCONT, scalar(repl), o);
5799 	    rcop->op_private = 1;
5800 
5801 	    /* establish postfix order */
5802 	    rcop->op_next = LINKLIST(repl);
5803 	    repl->op_next = (OP*)rcop;
5804 
5805 	    pm->op_pmreplrootu.op_pmreplroot = scalar((OP*)rcop);
5806 	    assert(!(pm->op_pmflags & PMf_ONCE));
5807 	    pm->op_pmstashstartu.op_pmreplstart = LINKLIST(rcop);
5808 	    rcop->op_next = 0;
5809 	}
5810     }
5811 
5812     return (OP*)pm;
5813 }
5814 
5815 /*
5816 =for apidoc Am|OP *|newSVOP|I32 type|I32 flags|SV *sv
5817 
5818 Constructs, checks, and returns an op of any type that involves an
5819 embedded SV.  C<type> is the opcode.  C<flags> gives the eight bits
5820 of C<op_flags>.  C<sv> gives the SV to embed in the op; this function
5821 takes ownership of one reference to it.
5822 
5823 =cut
5824 */
5825 
5826 OP *
5827 Perl_newSVOP(pTHX_ I32 type, I32 flags, SV *sv)
5828 {
5829     dVAR;
5830     SVOP *svop;
5831 
5832     PERL_ARGS_ASSERT_NEWSVOP;
5833 
5834     assert((PL_opargs[type] & OA_CLASS_MASK) == OA_SVOP
5835 	|| (PL_opargs[type] & OA_CLASS_MASK) == OA_PVOP_OR_SVOP
5836 	|| (PL_opargs[type] & OA_CLASS_MASK) == OA_FILESTATOP
5837 	|| type == OP_CUSTOM);
5838 
5839     NewOp(1101, svop, 1, SVOP);
5840     OpTYPE_set(svop, type);
5841     svop->op_sv = sv;
5842     svop->op_next = (OP*)svop;
5843     svop->op_flags = (U8)flags;
5844     svop->op_private = (U8)(0 | (flags >> 8));
5845     if (PL_opargs[type] & OA_RETSCALAR)
5846 	scalar((OP*)svop);
5847     if (PL_opargs[type] & OA_TARGET)
5848 	svop->op_targ = pad_alloc(type, SVs_PADTMP);
5849     return CHECKOP(type, svop);
5850 }
5851 
5852 /*
5853 =for apidoc Am|OP *|newDEFSVOP|
5854 
5855 Constructs and returns an op to access C<$_>.
5856 
5857 =cut
5858 */
5859 
5860 OP *
5861 Perl_newDEFSVOP(pTHX)
5862 {
5863 	return newSVREF(newGVOP(OP_GV, 0, PL_defgv));
5864 }
5865 
5866 #ifdef USE_ITHREADS
5867 
5868 /*
5869 =for apidoc Am|OP *|newPADOP|I32 type|I32 flags|SV *sv
5870 
5871 Constructs, checks, and returns an op of any type that involves a
5872 reference to a pad element.  C<type> is the opcode.  C<flags> gives the
5873 eight bits of C<op_flags>.  A pad slot is automatically allocated, and
5874 is populated with C<sv>; this function takes ownership of one reference
5875 to it.
5876 
5877 This function only exists if Perl has been compiled to use ithreads.
5878 
5879 =cut
5880 */
5881 
5882 OP *
5883 Perl_newPADOP(pTHX_ I32 type, I32 flags, SV *sv)
5884 {
5885     dVAR;
5886     PADOP *padop;
5887 
5888     PERL_ARGS_ASSERT_NEWPADOP;
5889 
5890     assert((PL_opargs[type] & OA_CLASS_MASK) == OA_SVOP
5891 	|| (PL_opargs[type] & OA_CLASS_MASK) == OA_PVOP_OR_SVOP
5892 	|| (PL_opargs[type] & OA_CLASS_MASK) == OA_FILESTATOP
5893 	|| type == OP_CUSTOM);
5894 
5895     NewOp(1101, padop, 1, PADOP);
5896     OpTYPE_set(padop, type);
5897     padop->op_padix =
5898 	pad_alloc(type, isGV(sv) ? SVf_READONLY : SVs_PADTMP);
5899     SvREFCNT_dec(PAD_SVl(padop->op_padix));
5900     PAD_SETSV(padop->op_padix, sv);
5901     assert(sv);
5902     padop->op_next = (OP*)padop;
5903     padop->op_flags = (U8)flags;
5904     if (PL_opargs[type] & OA_RETSCALAR)
5905 	scalar((OP*)padop);
5906     if (PL_opargs[type] & OA_TARGET)
5907 	padop->op_targ = pad_alloc(type, SVs_PADTMP);
5908     return CHECKOP(type, padop);
5909 }
5910 
5911 #endif /* USE_ITHREADS */
5912 
5913 /*
5914 =for apidoc Am|OP *|newGVOP|I32 type|I32 flags|GV *gv
5915 
5916 Constructs, checks, and returns an op of any type that involves an
5917 embedded reference to a GV.  C<type> is the opcode.  C<flags> gives the
5918 eight bits of C<op_flags>.  C<gv> identifies the GV that the op should
5919 reference; calling this function does not transfer ownership of any
5920 reference to it.
5921 
5922 =cut
5923 */
5924 
5925 OP *
5926 Perl_newGVOP(pTHX_ I32 type, I32 flags, GV *gv)
5927 {
5928     PERL_ARGS_ASSERT_NEWGVOP;
5929 
5930 #ifdef USE_ITHREADS
5931     return newPADOP(type, flags, SvREFCNT_inc_simple_NN(gv));
5932 #else
5933     return newSVOP(type, flags, SvREFCNT_inc_simple_NN(gv));
5934 #endif
5935 }
5936 
5937 /*
5938 =for apidoc Am|OP *|newPVOP|I32 type|I32 flags|char *pv
5939 
5940 Constructs, checks, and returns an op of any type that involves an
5941 embedded C-level pointer (PV).  C<type> is the opcode.  C<flags> gives
5942 the eight bits of C<op_flags>.  C<pv> supplies the C-level pointer, which
5943 must have been allocated using C<PerlMemShared_malloc>; the memory will
5944 be freed when the op is destroyed.
5945 
5946 =cut
5947 */
5948 
5949 OP *
5950 Perl_newPVOP(pTHX_ I32 type, I32 flags, char *pv)
5951 {
5952     dVAR;
5953     const bool utf8 = cBOOL(flags & SVf_UTF8);
5954     PVOP *pvop;
5955 
5956     flags &= ~SVf_UTF8;
5957 
5958     assert((PL_opargs[type] & OA_CLASS_MASK) == OA_PVOP_OR_SVOP
5959 	|| type == OP_RUNCV || type == OP_CUSTOM
5960 	|| (PL_opargs[type] & OA_CLASS_MASK) == OA_LOOPEXOP);
5961 
5962     NewOp(1101, pvop, 1, PVOP);
5963     OpTYPE_set(pvop, type);
5964     pvop->op_pv = pv;
5965     pvop->op_next = (OP*)pvop;
5966     pvop->op_flags = (U8)flags;
5967     pvop->op_private = utf8 ? OPpPV_IS_UTF8 : 0;
5968     if (PL_opargs[type] & OA_RETSCALAR)
5969 	scalar((OP*)pvop);
5970     if (PL_opargs[type] & OA_TARGET)
5971 	pvop->op_targ = pad_alloc(type, SVs_PADTMP);
5972     return CHECKOP(type, pvop);
5973 }
5974 
5975 void
5976 Perl_package(pTHX_ OP *o)
5977 {
5978     SV *const sv = cSVOPo->op_sv;
5979 
5980     PERL_ARGS_ASSERT_PACKAGE;
5981 
5982     SAVEGENERICSV(PL_curstash);
5983     save_item(PL_curstname);
5984 
5985     PL_curstash = (HV *)SvREFCNT_inc(gv_stashsv(sv, GV_ADD));
5986 
5987     sv_setsv(PL_curstname, sv);
5988 
5989     PL_hints |= HINT_BLOCK_SCOPE;
5990     PL_parser->copline = NOLINE;
5991 
5992     op_free(o);
5993 }
5994 
5995 void
5996 Perl_package_version( pTHX_ OP *v )
5997 {
5998     U32 savehints = PL_hints;
5999     PERL_ARGS_ASSERT_PACKAGE_VERSION;
6000     PL_hints &= ~HINT_STRICT_VARS;
6001     sv_setsv( GvSV(gv_fetchpvs("VERSION", GV_ADDMULTI, SVt_PV)), cSVOPx(v)->op_sv );
6002     PL_hints = savehints;
6003     op_free(v);
6004 }
6005 
6006 void
6007 Perl_utilize(pTHX_ int aver, I32 floor, OP *version, OP *idop, OP *arg)
6008 {
6009     OP *pack;
6010     OP *imop;
6011     OP *veop;
6012     SV *use_version = NULL;
6013 
6014     PERL_ARGS_ASSERT_UTILIZE;
6015 
6016     if (idop->op_type != OP_CONST)
6017 	Perl_croak(aTHX_ "Module name must be constant");
6018 
6019     veop = NULL;
6020 
6021     if (version) {
6022 	SV * const vesv = ((SVOP*)version)->op_sv;
6023 
6024 	if (!arg && !SvNIOKp(vesv)) {
6025 	    arg = version;
6026 	}
6027 	else {
6028 	    OP *pack;
6029 	    SV *meth;
6030 
6031 	    if (version->op_type != OP_CONST || !SvNIOKp(vesv))
6032 		Perl_croak(aTHX_ "Version number must be a constant number");
6033 
6034 	    /* Make copy of idop so we don't free it twice */
6035 	    pack = newSVOP(OP_CONST, 0, newSVsv(((SVOP*)idop)->op_sv));
6036 
6037 	    /* Fake up a method call to VERSION */
6038 	    meth = newSVpvs_share("VERSION");
6039 	    veop = op_convert_list(OP_ENTERSUB, OPf_STACKED|OPf_SPECIAL,
6040 			    op_append_elem(OP_LIST,
6041 					op_prepend_elem(OP_LIST, pack, version),
6042 					newMETHOP_named(OP_METHOD_NAMED, 0, meth)));
6043 	}
6044     }
6045 
6046     /* Fake up an import/unimport */
6047     if (arg && arg->op_type == OP_STUB) {
6048 	imop = arg;		/* no import on explicit () */
6049     }
6050     else if (SvNIOKp(((SVOP*)idop)->op_sv)) {
6051 	imop = NULL;		/* use 5.0; */
6052 	if (aver)
6053 	    use_version = ((SVOP*)idop)->op_sv;
6054 	else
6055 	    idop->op_private |= OPpCONST_NOVER;
6056     }
6057     else {
6058 	SV *meth;
6059 
6060 	/* Make copy of idop so we don't free it twice */
6061 	pack = newSVOP(OP_CONST, 0, newSVsv(((SVOP*)idop)->op_sv));
6062 
6063 	/* Fake up a method call to import/unimport */
6064 	meth = aver
6065 	    ? newSVpvs_share("import") : newSVpvs_share("unimport");
6066 	imop = op_convert_list(OP_ENTERSUB, OPf_STACKED|OPf_SPECIAL,
6067 		       op_append_elem(OP_LIST,
6068 				   op_prepend_elem(OP_LIST, pack, arg),
6069 				   newMETHOP_named(OP_METHOD_NAMED, 0, meth)
6070 		       ));
6071     }
6072 
6073     /* Fake up the BEGIN {}, which does its thing immediately. */
6074     newATTRSUB(floor,
6075 	newSVOP(OP_CONST, 0, newSVpvs_share("BEGIN")),
6076 	NULL,
6077 	NULL,
6078 	op_append_elem(OP_LINESEQ,
6079 	    op_append_elem(OP_LINESEQ,
6080 	        newSTATEOP(0, NULL, newUNOP(OP_REQUIRE, 0, idop)),
6081 	        newSTATEOP(0, NULL, veop)),
6082 	    newSTATEOP(0, NULL, imop) ));
6083 
6084     if (use_version) {
6085 	/* Enable the
6086 	 * feature bundle that corresponds to the required version. */
6087 	use_version = sv_2mortal(new_version(use_version));
6088 	S_enable_feature_bundle(aTHX_ use_version);
6089 
6090 	/* If a version >= 5.11.0 is requested, strictures are on by default! */
6091 	if (vcmp(use_version,
6092 		 sv_2mortal(upg_version(newSVnv(5.011000), FALSE))) >= 0) {
6093 	    if (!(PL_hints & HINT_EXPLICIT_STRICT_REFS))
6094 		PL_hints |= HINT_STRICT_REFS;
6095 	    if (!(PL_hints & HINT_EXPLICIT_STRICT_SUBS))
6096 		PL_hints |= HINT_STRICT_SUBS;
6097 	    if (!(PL_hints & HINT_EXPLICIT_STRICT_VARS))
6098 		PL_hints |= HINT_STRICT_VARS;
6099 	}
6100 	/* otherwise they are off */
6101 	else {
6102 	    if (!(PL_hints & HINT_EXPLICIT_STRICT_REFS))
6103 		PL_hints &= ~HINT_STRICT_REFS;
6104 	    if (!(PL_hints & HINT_EXPLICIT_STRICT_SUBS))
6105 		PL_hints &= ~HINT_STRICT_SUBS;
6106 	    if (!(PL_hints & HINT_EXPLICIT_STRICT_VARS))
6107 		PL_hints &= ~HINT_STRICT_VARS;
6108 	}
6109     }
6110 
6111     /* The "did you use incorrect case?" warning used to be here.
6112      * The problem is that on case-insensitive filesystems one
6113      * might get false positives for "use" (and "require"):
6114      * "use Strict" or "require CARP" will work.  This causes
6115      * portability problems for the script: in case-strict
6116      * filesystems the script will stop working.
6117      *
6118      * The "incorrect case" warning checked whether "use Foo"
6119      * imported "Foo" to your namespace, but that is wrong, too:
6120      * there is no requirement nor promise in the language that
6121      * a Foo.pm should or would contain anything in package "Foo".
6122      *
6123      * There is very little Configure-wise that can be done, either:
6124      * the case-sensitivity of the build filesystem of Perl does not
6125      * help in guessing the case-sensitivity of the runtime environment.
6126      */
6127 
6128     PL_hints |= HINT_BLOCK_SCOPE;
6129     PL_parser->copline = NOLINE;
6130     COP_SEQMAX_INC; /* Purely for B::*'s benefit */
6131 }
6132 
6133 /*
6134 =head1 Embedding Functions
6135 
6136 =for apidoc load_module
6137 
6138 Loads the module whose name is pointed to by the string part of name.
6139 Note that the actual module name, not its filename, should be given.
6140 Eg, "Foo::Bar" instead of "Foo/Bar.pm".  flags can be any of
6141 C<PERL_LOADMOD_DENY>, C<PERL_LOADMOD_NOIMPORT>, or C<PERL_LOADMOD_IMPORT_OPS>
6142 (or 0 for no flags).  ver, if specified
6143 and not NULL, provides version semantics
6144 similar to C<use Foo::Bar VERSION>.  The optional trailing SV*
6145 arguments can be used to specify arguments to the module's C<import()>
6146 method, similar to C<use Foo::Bar VERSION LIST>.  They must be
6147 terminated with a final C<NULL> pointer.  Note that this list can only
6148 be omitted when the C<PERL_LOADMOD_NOIMPORT> flag has been used.
6149 Otherwise at least a single C<NULL> pointer to designate the default
6150 import list is required.
6151 
6152 The reference count for each specified C<SV*> parameter is decremented.
6153 
6154 =cut */
6155 
6156 void
6157 Perl_load_module(pTHX_ U32 flags, SV *name, SV *ver, ...)
6158 {
6159     va_list args;
6160 
6161     PERL_ARGS_ASSERT_LOAD_MODULE;
6162 
6163     va_start(args, ver);
6164     vload_module(flags, name, ver, &args);
6165     va_end(args);
6166 }
6167 
6168 #ifdef PERL_IMPLICIT_CONTEXT
6169 void
6170 Perl_load_module_nocontext(U32 flags, SV *name, SV *ver, ...)
6171 {
6172     dTHX;
6173     va_list args;
6174     PERL_ARGS_ASSERT_LOAD_MODULE_NOCONTEXT;
6175     va_start(args, ver);
6176     vload_module(flags, name, ver, &args);
6177     va_end(args);
6178 }
6179 #endif
6180 
6181 void
6182 Perl_vload_module(pTHX_ U32 flags, SV *name, SV *ver, va_list *args)
6183 {
6184     OP *veop, *imop;
6185     OP * const modname = newSVOP(OP_CONST, 0, name);
6186 
6187     PERL_ARGS_ASSERT_VLOAD_MODULE;
6188 
6189     modname->op_private |= OPpCONST_BARE;
6190     if (ver) {
6191 	veop = newSVOP(OP_CONST, 0, ver);
6192     }
6193     else
6194 	veop = NULL;
6195     if (flags & PERL_LOADMOD_NOIMPORT) {
6196 	imop = sawparens(newNULLLIST());
6197     }
6198     else if (flags & PERL_LOADMOD_IMPORT_OPS) {
6199 	imop = va_arg(*args, OP*);
6200     }
6201     else {
6202 	SV *sv;
6203 	imop = NULL;
6204 	sv = va_arg(*args, SV*);
6205 	while (sv) {
6206 	    imop = op_append_elem(OP_LIST, imop, newSVOP(OP_CONST, 0, sv));
6207 	    sv = va_arg(*args, SV*);
6208 	}
6209     }
6210 
6211     /* utilize() fakes up a BEGIN { require ..; import ... }, so make sure
6212      * that it has a PL_parser to play with while doing that, and also
6213      * that it doesn't mess with any existing parser, by creating a tmp
6214      * new parser with lex_start(). This won't actually be used for much,
6215      * since pp_require() will create another parser for the real work.
6216      * The ENTER/LEAVE pair protect callers from any side effects of use.  */
6217 
6218     ENTER;
6219     SAVEVPTR(PL_curcop);
6220     lex_start(NULL, NULL, LEX_START_SAME_FILTER);
6221     utilize(!(flags & PERL_LOADMOD_DENY), start_subparse(FALSE, 0),
6222 	    veop, modname, imop);
6223     LEAVE;
6224 }
6225 
6226 PERL_STATIC_INLINE OP *
6227 S_new_entersubop(pTHX_ GV *gv, OP *arg)
6228 {
6229     return newUNOP(OP_ENTERSUB, OPf_STACKED,
6230 		   newLISTOP(OP_LIST, 0, arg,
6231 			     newUNOP(OP_RV2CV, 0,
6232 				     newGVOP(OP_GV, 0, gv))));
6233 }
6234 
6235 OP *
6236 Perl_dofile(pTHX_ OP *term, I32 force_builtin)
6237 {
6238     OP *doop;
6239     GV *gv;
6240 
6241     PERL_ARGS_ASSERT_DOFILE;
6242 
6243     if (!force_builtin && (gv = gv_override("do", 2))) {
6244 	doop = S_new_entersubop(aTHX_ gv, term);
6245     }
6246     else {
6247 	doop = newUNOP(OP_DOFILE, 0, scalar(term));
6248     }
6249     return doop;
6250 }
6251 
6252 /*
6253 =head1 Optree construction
6254 
6255 =for apidoc Am|OP *|newSLICEOP|I32 flags|OP *subscript|OP *listval
6256 
6257 Constructs, checks, and returns an C<lslice> (list slice) op.  C<flags>
6258 gives the eight bits of C<op_flags>, except that C<OPf_KIDS> will
6259 be set automatically, and, shifted up eight bits, the eight bits of
6260 C<op_private>, except that the bit with value 1 or 2 is automatically
6261 set as required.  C<listval> and C<subscript> supply the parameters of
6262 the slice; they are consumed by this function and become part of the
6263 constructed op tree.
6264 
6265 =cut
6266 */
6267 
6268 OP *
6269 Perl_newSLICEOP(pTHX_ I32 flags, OP *subscript, OP *listval)
6270 {
6271     return newBINOP(OP_LSLICE, flags,
6272 	    list(force_list(subscript, 1)),
6273 	    list(force_list(listval,   1)) );
6274 }
6275 
6276 #define ASSIGN_LIST   1
6277 #define ASSIGN_REF    2
6278 
6279 STATIC I32
6280 S_assignment_type(pTHX_ const OP *o)
6281 {
6282     unsigned type;
6283     U8 flags;
6284     U8 ret;
6285 
6286     if (!o)
6287 	return TRUE;
6288 
6289     if ((o->op_type == OP_NULL) && (o->op_flags & OPf_KIDS))
6290 	o = cUNOPo->op_first;
6291 
6292     flags = o->op_flags;
6293     type = o->op_type;
6294     if (type == OP_COND_EXPR) {
6295         OP * const sib = OpSIBLING(cLOGOPo->op_first);
6296         const I32 t = assignment_type(sib);
6297         const I32 f = assignment_type(OpSIBLING(sib));
6298 
6299 	if (t == ASSIGN_LIST && f == ASSIGN_LIST)
6300 	    return ASSIGN_LIST;
6301 	if ((t == ASSIGN_LIST) ^ (f == ASSIGN_LIST))
6302 	    yyerror("Assignment to both a list and a scalar");
6303 	return FALSE;
6304     }
6305 
6306     if (type == OP_SREFGEN)
6307     {
6308 	OP * const kid = cUNOPx(cUNOPo->op_first)->op_first;
6309 	type = kid->op_type;
6310 	flags |= kid->op_flags;
6311 	if (!(flags & OPf_PARENS)
6312 	  && (kid->op_type == OP_RV2AV || kid->op_type == OP_PADAV ||
6313 	      kid->op_type == OP_RV2HV || kid->op_type == OP_PADHV ))
6314 	    return ASSIGN_REF;
6315 	ret = ASSIGN_REF;
6316     }
6317     else ret = 0;
6318 
6319     if (type == OP_LIST &&
6320 	(flags & OPf_WANT) == OPf_WANT_SCALAR &&
6321 	o->op_private & OPpLVAL_INTRO)
6322 	return ret;
6323 
6324     if (type == OP_LIST || flags & OPf_PARENS ||
6325 	type == OP_RV2AV || type == OP_RV2HV ||
6326 	type == OP_ASLICE || type == OP_HSLICE ||
6327         type == OP_KVASLICE || type == OP_KVHSLICE || type == OP_REFGEN)
6328 	return TRUE;
6329 
6330     if (type == OP_PADAV || type == OP_PADHV)
6331 	return TRUE;
6332 
6333     if (type == OP_RV2SV)
6334 	return ret;
6335 
6336     return ret;
6337 }
6338 
6339 
6340 /*
6341 =for apidoc Am|OP *|newASSIGNOP|I32 flags|OP *left|I32 optype|OP *right
6342 
6343 Constructs, checks, and returns an assignment op.  C<left> and C<right>
6344 supply the parameters of the assignment; they are consumed by this
6345 function and become part of the constructed op tree.
6346 
6347 If C<optype> is C<OP_ANDASSIGN>, C<OP_ORASSIGN>, or C<OP_DORASSIGN>, then
6348 a suitable conditional optree is constructed.  If C<optype> is the opcode
6349 of a binary operator, such as C<OP_BIT_OR>, then an op is constructed that
6350 performs the binary operation and assigns the result to the left argument.
6351 Either way, if C<optype> is non-zero then C<flags> has no effect.
6352 
6353 If C<optype> is zero, then a plain scalar or list assignment is
6354 constructed.  Which type of assignment it is is automatically determined.
6355 C<flags> gives the eight bits of C<op_flags>, except that C<OPf_KIDS>
6356 will be set automatically, and, shifted up eight bits, the eight bits
6357 of C<op_private>, except that the bit with value 1 or 2 is automatically
6358 set as required.
6359 
6360 =cut
6361 */
6362 
6363 OP *
6364 Perl_newASSIGNOP(pTHX_ I32 flags, OP *left, I32 optype, OP *right)
6365 {
6366     OP *o;
6367     I32 assign_type;
6368 
6369     if (optype) {
6370 	if (optype == OP_ANDASSIGN || optype == OP_ORASSIGN || optype == OP_DORASSIGN) {
6371 	    return newLOGOP(optype, 0,
6372 		op_lvalue(scalar(left), optype),
6373 		newUNOP(OP_SASSIGN, 0, scalar(right)));
6374 	}
6375 	else {
6376 	    return newBINOP(optype, OPf_STACKED,
6377 		op_lvalue(scalar(left), optype), scalar(right));
6378 	}
6379     }
6380 
6381     if ((assign_type = assignment_type(left)) == ASSIGN_LIST) {
6382 	static const char no_list_state[] = "Initialization of state variables"
6383 	    " in list context currently forbidden";
6384 	OP *curop;
6385 
6386 	if (left->op_type == OP_ASLICE || left->op_type == OP_HSLICE)
6387 	    left->op_private &= ~ OPpSLICEWARNING;
6388 
6389 	PL_modcount = 0;
6390 	left = op_lvalue(left, OP_AASSIGN);
6391 	curop = list(force_list(left, 1));
6392 	o = newBINOP(OP_AASSIGN, flags, list(force_list(right, 1)), curop);
6393 	o->op_private = (U8)(0 | (flags >> 8));
6394 
6395 	if (OP_TYPE_IS_OR_WAS(left, OP_LIST))
6396 	{
6397 	    OP* lop = ((LISTOP*)left)->op_first;
6398 	    while (lop) {
6399 		if ((lop->op_type == OP_PADSV ||
6400 		     lop->op_type == OP_PADAV ||
6401 		     lop->op_type == OP_PADHV ||
6402 		     lop->op_type == OP_PADANY)
6403 		  && (lop->op_private & OPpPAD_STATE)
6404                 )
6405                     yyerror(no_list_state);
6406 		lop = OpSIBLING(lop);
6407 	    }
6408 	}
6409 	else if (  (left->op_private & OPpLVAL_INTRO)
6410                 && (left->op_private & OPpPAD_STATE)
6411 		&& (   left->op_type == OP_PADSV
6412 		    || left->op_type == OP_PADAV
6413 		    || left->op_type == OP_PADHV
6414 		    || left->op_type == OP_PADANY)
6415         ) {
6416 		/* All single variable list context state assignments, hence
6417 		   state ($a) = ...
6418 		   (state $a) = ...
6419 		   state @a = ...
6420 		   state (@a) = ...
6421 		   (state @a) = ...
6422 		   state %a = ...
6423 		   state (%a) = ...
6424 		   (state %a) = ...
6425 		*/
6426 		yyerror(no_list_state);
6427 	}
6428 
6429 	if (right && right->op_type == OP_SPLIT
6430 	 && !(right->op_flags & OPf_STACKED)) {
6431 	    OP* tmpop = ((LISTOP*)right)->op_first;
6432 	    PMOP * const pm = (PMOP*)tmpop;
6433 	    assert (tmpop && (tmpop->op_type == OP_PUSHRE));
6434 	    if (
6435 #ifdef USE_ITHREADS
6436 		    !pm->op_pmreplrootu.op_pmtargetoff
6437 #else
6438 		    !pm->op_pmreplrootu.op_pmtargetgv
6439 #endif
6440 		 && !pm->op_targ
6441 		) {
6442 		    if (!(left->op_private & OPpLVAL_INTRO) &&
6443 		        ( (left->op_type == OP_RV2AV &&
6444 			  (tmpop=((UNOP*)left)->op_first)->op_type==OP_GV)
6445 		        || left->op_type == OP_PADAV )
6446 			) {
6447 			if (tmpop != (OP *)pm) {
6448 #ifdef USE_ITHREADS
6449 			  pm->op_pmreplrootu.op_pmtargetoff
6450 			    = cPADOPx(tmpop)->op_padix;
6451 			  cPADOPx(tmpop)->op_padix = 0;	/* steal it */
6452 #else
6453 			  pm->op_pmreplrootu.op_pmtargetgv
6454 			    = MUTABLE_GV(cSVOPx(tmpop)->op_sv);
6455 			  cSVOPx(tmpop)->op_sv = NULL;	/* steal it */
6456 #endif
6457 			  right->op_private |=
6458 			    left->op_private & OPpOUR_INTRO;
6459 			}
6460 			else {
6461 			    pm->op_targ = left->op_targ;
6462 			    left->op_targ = 0; /* filch it */
6463 			}
6464 		      detach_split:
6465 			tmpop = cUNOPo->op_first;	/* to list (nulled) */
6466 			tmpop = ((UNOP*)tmpop)->op_first; /* to pushmark */
6467                         /* detach rest of siblings from o subtree,
6468                          * and free subtree */
6469                         op_sibling_splice(cUNOPo->op_first, tmpop, -1, NULL);
6470 			op_free(o);			/* blow off assign */
6471 			right->op_flags &= ~OPf_WANT;
6472 				/* "I don't know and I don't care." */
6473 			return right;
6474 		    }
6475 		    else if (left->op_type == OP_RV2AV
6476 			  || left->op_type == OP_PADAV)
6477 		    {
6478 			/* Detach the array.  */
6479 #ifdef DEBUGGING
6480 			OP * const ary =
6481 #endif
6482 			op_sibling_splice(cBINOPo->op_last,
6483 					  cUNOPx(cBINOPo->op_last)
6484 						->op_first, 1, NULL);
6485 			assert(ary == left);
6486 			/* Attach it to the split.  */
6487 			op_sibling_splice(right, cLISTOPx(right)->op_last,
6488 					  0, left);
6489 			right->op_flags |= OPf_STACKED;
6490 			/* Detach split and expunge aassign as above.  */
6491 			goto detach_split;
6492 		    }
6493 		    else if (PL_modcount < RETURN_UNLIMITED_NUMBER &&
6494 			    ((LISTOP*)right)->op_last->op_type == OP_CONST)
6495 		    {
6496 			SV ** const svp =
6497 			    &((SVOP*)((LISTOP*)right)->op_last)->op_sv;
6498 			SV * const sv = *svp;
6499 			if (SvIOK(sv) && SvIVX(sv) == 0)
6500 			{
6501 			  if (right->op_private & OPpSPLIT_IMPLIM) {
6502 			    /* our own SV, created in ck_split */
6503 			    SvREADONLY_off(sv);
6504 			    sv_setiv(sv, PL_modcount+1);
6505 			  }
6506 			  else {
6507 			    /* SV may belong to someone else */
6508 			    SvREFCNT_dec(sv);
6509 			    *svp = newSViv(PL_modcount+1);
6510 			  }
6511 			}
6512 		    }
6513 	    }
6514 	}
6515 	return o;
6516     }
6517     if (assign_type == ASSIGN_REF)
6518 	return newBINOP(OP_REFASSIGN, flags, scalar(right), left);
6519     if (!right)
6520 	right = newOP(OP_UNDEF, 0);
6521     if (right->op_type == OP_READLINE) {
6522 	right->op_flags |= OPf_STACKED;
6523 	return newBINOP(OP_NULL, flags, op_lvalue(scalar(left), OP_SASSIGN),
6524 		scalar(right));
6525     }
6526     else {
6527 	o = newBINOP(OP_SASSIGN, flags,
6528 	    scalar(right), op_lvalue(scalar(left), OP_SASSIGN) );
6529     }
6530     return o;
6531 }
6532 
6533 /*
6534 =for apidoc Am|OP *|newSTATEOP|I32 flags|char *label|OP *o
6535 
6536 Constructs a state op (COP).  The state op is normally a C<nextstate> op,
6537 but will be a C<dbstate> op if debugging is enabled for currently-compiled
6538 code.  The state op is populated from C<PL_curcop> (or C<PL_compiling>).
6539 If C<label> is non-null, it supplies the name of a label to attach to
6540 the state op; this function takes ownership of the memory pointed at by
6541 C<label>, and will free it.  C<flags> gives the eight bits of C<op_flags>
6542 for the state op.
6543 
6544 If C<o> is null, the state op is returned.  Otherwise the state op is
6545 combined with C<o> into a C<lineseq> list op, which is returned.  C<o>
6546 is consumed by this function and becomes part of the returned op tree.
6547 
6548 =cut
6549 */
6550 
6551 OP *
6552 Perl_newSTATEOP(pTHX_ I32 flags, char *label, OP *o)
6553 {
6554     dVAR;
6555     const U32 seq = intro_my();
6556     const U32 utf8 = flags & SVf_UTF8;
6557     COP *cop;
6558 
6559     PL_parser->parsed_sub = 0;
6560 
6561     flags &= ~SVf_UTF8;
6562 
6563     NewOp(1101, cop, 1, COP);
6564     if (PERLDB_LINE && CopLINE(PL_curcop) && PL_curstash != PL_debstash) {
6565         OpTYPE_set(cop, OP_DBSTATE);
6566     }
6567     else {
6568         OpTYPE_set(cop, OP_NEXTSTATE);
6569     }
6570     cop->op_flags = (U8)flags;
6571     CopHINTS_set(cop, PL_hints);
6572 #ifdef VMS
6573     if (VMSISH_HUSHED) cop->op_private |= OPpHUSH_VMSISH;
6574 #endif
6575     cop->op_next = (OP*)cop;
6576 
6577     cop->cop_seq = seq;
6578     cop->cop_warnings = DUP_WARNINGS(PL_curcop->cop_warnings);
6579     CopHINTHASH_set(cop, cophh_copy(CopHINTHASH_get(PL_curcop)));
6580     if (label) {
6581 	Perl_cop_store_label(aTHX_ cop, label, strlen(label), utf8);
6582 
6583 	PL_hints |= HINT_BLOCK_SCOPE;
6584 	/* It seems that we need to defer freeing this pointer, as other parts
6585 	   of the grammar end up wanting to copy it after this op has been
6586 	   created. */
6587 	SAVEFREEPV(label);
6588     }
6589 
6590     if (PL_parser->preambling != NOLINE) {
6591         CopLINE_set(cop, PL_parser->preambling);
6592         PL_parser->copline = NOLINE;
6593     }
6594     else if (PL_parser->copline == NOLINE)
6595         CopLINE_set(cop, CopLINE(PL_curcop));
6596     else {
6597 	CopLINE_set(cop, PL_parser->copline);
6598 	PL_parser->copline = NOLINE;
6599     }
6600 #ifdef USE_ITHREADS
6601     CopFILE_set(cop, CopFILE(PL_curcop));	/* XXX share in a pvtable? */
6602 #else
6603     CopFILEGV_set(cop, CopFILEGV(PL_curcop));
6604 #endif
6605     CopSTASH_set(cop, PL_curstash);
6606 
6607     if (cop->op_type == OP_DBSTATE) {
6608 	/* this line can have a breakpoint - store the cop in IV */
6609 	AV *av = CopFILEAVx(PL_curcop);
6610 	if (av) {
6611 	    SV * const * const svp = av_fetch(av, CopLINE(cop), FALSE);
6612 	    if (svp && *svp != &PL_sv_undef ) {
6613 		(void)SvIOK_on(*svp);
6614 		SvIV_set(*svp, PTR2IV(cop));
6615 	    }
6616 	}
6617     }
6618 
6619     if (flags & OPf_SPECIAL)
6620 	op_null((OP*)cop);
6621     return op_prepend_elem(OP_LINESEQ, (OP*)cop, o);
6622 }
6623 
6624 /*
6625 =for apidoc Am|OP *|newLOGOP|I32 type|I32 flags|OP *first|OP *other
6626 
6627 Constructs, checks, and returns a logical (flow control) op.  C<type>
6628 is the opcode.  C<flags> gives the eight bits of C<op_flags>, except
6629 that C<OPf_KIDS> will be set automatically, and, shifted up eight bits,
6630 the eight bits of C<op_private>, except that the bit with value 1 is
6631 automatically set.  C<first> supplies the expression controlling the
6632 flow, and C<other> supplies the side (alternate) chain of ops; they are
6633 consumed by this function and become part of the constructed op tree.
6634 
6635 =cut
6636 */
6637 
6638 OP *
6639 Perl_newLOGOP(pTHX_ I32 type, I32 flags, OP *first, OP *other)
6640 {
6641     PERL_ARGS_ASSERT_NEWLOGOP;
6642 
6643     return new_logop(type, flags, &first, &other);
6644 }
6645 
6646 STATIC OP *
6647 S_search_const(pTHX_ OP *o)
6648 {
6649     PERL_ARGS_ASSERT_SEARCH_CONST;
6650 
6651     switch (o->op_type) {
6652 	case OP_CONST:
6653 	    return o;
6654 	case OP_NULL:
6655 	    if (o->op_flags & OPf_KIDS)
6656 		return search_const(cUNOPo->op_first);
6657 	    break;
6658 	case OP_LEAVE:
6659 	case OP_SCOPE:
6660 	case OP_LINESEQ:
6661 	{
6662 	    OP *kid;
6663 	    if (!(o->op_flags & OPf_KIDS))
6664 		return NULL;
6665 	    kid = cLISTOPo->op_first;
6666 	    do {
6667 		switch (kid->op_type) {
6668 		    case OP_ENTER:
6669 		    case OP_NULL:
6670 		    case OP_NEXTSTATE:
6671 			kid = OpSIBLING(kid);
6672 			break;
6673 		    default:
6674 			if (kid != cLISTOPo->op_last)
6675 			    return NULL;
6676 			goto last;
6677 		}
6678 	    } while (kid);
6679 	    if (!kid)
6680 		kid = cLISTOPo->op_last;
6681           last:
6682 	    return search_const(kid);
6683 	}
6684     }
6685 
6686     return NULL;
6687 }
6688 
6689 STATIC OP *
6690 S_new_logop(pTHX_ I32 type, I32 flags, OP** firstp, OP** otherp)
6691 {
6692     dVAR;
6693     LOGOP *logop;
6694     OP *o;
6695     OP *first;
6696     OP *other;
6697     OP *cstop = NULL;
6698     int prepend_not = 0;
6699 
6700     PERL_ARGS_ASSERT_NEW_LOGOP;
6701 
6702     first = *firstp;
6703     other = *otherp;
6704 
6705     /* [perl #59802]: Warn about things like "return $a or $b", which
6706        is parsed as "(return $a) or $b" rather than "return ($a or
6707        $b)".  NB: This also applies to xor, which is why we do it
6708        here.
6709      */
6710     switch (first->op_type) {
6711     case OP_NEXT:
6712     case OP_LAST:
6713     case OP_REDO:
6714 	/* XXX: Perhaps we should emit a stronger warning for these.
6715 	   Even with the high-precedence operator they don't seem to do
6716 	   anything sensible.
6717 
6718 	   But until we do, fall through here.
6719          */
6720     case OP_RETURN:
6721     case OP_EXIT:
6722     case OP_DIE:
6723     case OP_GOTO:
6724 	/* XXX: Currently we allow people to "shoot themselves in the
6725 	   foot" by explicitly writing "(return $a) or $b".
6726 
6727 	   Warn unless we are looking at the result from folding or if
6728 	   the programmer explicitly grouped the operators like this.
6729 	   The former can occur with e.g.
6730 
6731 		use constant FEATURE => ( $] >= ... );
6732 		sub { not FEATURE and return or do_stuff(); }
6733 	 */
6734 	if (!first->op_folded && !(first->op_flags & OPf_PARENS))
6735 	    Perl_ck_warner(aTHX_ packWARN(WARN_SYNTAX),
6736 	                   "Possible precedence issue with control flow operator");
6737 	/* XXX: Should we optimze this to "return $a;" (i.e. remove
6738 	   the "or $b" part)?
6739 	*/
6740 	break;
6741     }
6742 
6743     if (type == OP_XOR)		/* Not short circuit, but here by precedence. */
6744 	return newBINOP(type, flags, scalar(first), scalar(other));
6745 
6746     assert((PL_opargs[type] & OA_CLASS_MASK) == OA_LOGOP
6747 	|| type == OP_CUSTOM);
6748 
6749     scalarboolean(first);
6750     /* optimize AND and OR ops that have NOTs as children */
6751     if (first->op_type == OP_NOT
6752 	&& (first->op_flags & OPf_KIDS)
6753 	&& ((first->op_flags & OPf_SPECIAL) /* unless ($x) { } */
6754 	    || (other->op_type == OP_NOT))  /* if (!$x && !$y) { } */
6755 	) {
6756 	if (type == OP_AND || type == OP_OR) {
6757 	    if (type == OP_AND)
6758 		type = OP_OR;
6759 	    else
6760 		type = OP_AND;
6761 	    op_null(first);
6762 	    if (other->op_type == OP_NOT) { /* !a AND|OR !b => !(a OR|AND b) */
6763 		op_null(other);
6764 		prepend_not = 1; /* prepend a NOT op later */
6765 	    }
6766 	}
6767     }
6768     /* search for a constant op that could let us fold the test */
6769     if ((cstop = search_const(first))) {
6770 	if (cstop->op_private & OPpCONST_STRICT)
6771 	    no_bareword_allowed(cstop);
6772 	else if ((cstop->op_private & OPpCONST_BARE))
6773 		Perl_ck_warner(aTHX_ packWARN(WARN_BAREWORD), "Bareword found in conditional");
6774 	if ((type == OP_AND &&  SvTRUE(((SVOP*)cstop)->op_sv)) ||
6775 	    (type == OP_OR  && !SvTRUE(((SVOP*)cstop)->op_sv)) ||
6776 	    (type == OP_DOR && !SvOK(((SVOP*)cstop)->op_sv))) {
6777 	    *firstp = NULL;
6778 	    if (other->op_type == OP_CONST)
6779 		other->op_private |= OPpCONST_SHORTCIRCUIT;
6780 	    op_free(first);
6781 	    if (other->op_type == OP_LEAVE)
6782 		other = newUNOP(OP_NULL, OPf_SPECIAL, other);
6783 	    else if (other->op_type == OP_MATCH
6784 	          || other->op_type == OP_SUBST
6785 	          || other->op_type == OP_TRANSR
6786 	          || other->op_type == OP_TRANS)
6787 		/* Mark the op as being unbindable with =~ */
6788 		other->op_flags |= OPf_SPECIAL;
6789 
6790 	    other->op_folded = 1;
6791 	    return other;
6792 	}
6793 	else {
6794 	    /* check for C<my $x if 0>, or C<my($x,$y) if 0> */
6795 	    const OP *o2 = other;
6796 	    if ( ! (o2->op_type == OP_LIST
6797 		    && (( o2 = cUNOPx(o2)->op_first))
6798 		    && o2->op_type == OP_PUSHMARK
6799 		    && (( o2 = OpSIBLING(o2))) )
6800 	    )
6801 		o2 = other;
6802 	    if ((o2->op_type == OP_PADSV || o2->op_type == OP_PADAV
6803 			|| o2->op_type == OP_PADHV)
6804 		&& o2->op_private & OPpLVAL_INTRO
6805 		&& !(o2->op_private & OPpPAD_STATE))
6806 	    {
6807 		Perl_ck_warner_d(aTHX_ packWARN(WARN_DEPRECATED),
6808 				 "Deprecated use of my() in false conditional");
6809 	    }
6810 
6811 	    *otherp = NULL;
6812 	    if (cstop->op_type == OP_CONST)
6813 		cstop->op_private |= OPpCONST_SHORTCIRCUIT;
6814 	        op_free(other);
6815 	    return first;
6816 	}
6817     }
6818     else if ((first->op_flags & OPf_KIDS) && type != OP_DOR
6819 	&& ckWARN(WARN_MISC)) /* [#24076] Don't warn for <FH> err FOO. */
6820     {
6821 	const OP * const k1 = ((UNOP*)first)->op_first;
6822 	const OP * const k2 = OpSIBLING(k1);
6823 	OPCODE warnop = 0;
6824 	switch (first->op_type)
6825 	{
6826 	case OP_NULL:
6827 	    if (k2 && k2->op_type == OP_READLINE
6828 		  && (k2->op_flags & OPf_STACKED)
6829 		  && ((k1->op_flags & OPf_WANT) == OPf_WANT_SCALAR))
6830 	    {
6831 		warnop = k2->op_type;
6832 	    }
6833 	    break;
6834 
6835 	case OP_SASSIGN:
6836 	    if (k1->op_type == OP_READDIR
6837 		  || k1->op_type == OP_GLOB
6838 		  || (k1->op_type == OP_NULL && k1->op_targ == OP_GLOB)
6839                  || k1->op_type == OP_EACH
6840                  || k1->op_type == OP_AEACH)
6841 	    {
6842 		warnop = ((k1->op_type == OP_NULL)
6843 			  ? (OPCODE)k1->op_targ : k1->op_type);
6844 	    }
6845 	    break;
6846 	}
6847 	if (warnop) {
6848 	    const line_t oldline = CopLINE(PL_curcop);
6849             /* This ensures that warnings are reported at the first line
6850                of the construction, not the last.  */
6851 	    CopLINE_set(PL_curcop, PL_parser->copline);
6852 	    Perl_warner(aTHX_ packWARN(WARN_MISC),
6853 		 "Value of %s%s can be \"0\"; test with defined()",
6854 		 PL_op_desc[warnop],
6855 		 ((warnop == OP_READLINE || warnop == OP_GLOB)
6856 		  ? " construct" : "() operator"));
6857 	    CopLINE_set(PL_curcop, oldline);
6858 	}
6859     }
6860 
6861     if (!other)
6862 	return first;
6863 
6864     if (type == OP_ANDASSIGN || type == OP_ORASSIGN || type == OP_DORASSIGN)
6865 	other->op_private |= OPpASSIGN_BACKWARDS;  /* other is an OP_SASSIGN */
6866 
6867     logop = S_alloc_LOGOP(aTHX_ type, first, LINKLIST(other));
6868     logop->op_flags |= (U8)flags;
6869     logop->op_private = (U8)(1 | (flags >> 8));
6870 
6871     /* establish postfix order */
6872     logop->op_next = LINKLIST(first);
6873     first->op_next = (OP*)logop;
6874     assert(!OpHAS_SIBLING(first));
6875     op_sibling_splice((OP*)logop, first, 0, other);
6876 
6877     CHECKOP(type,logop);
6878 
6879     o = newUNOP(prepend_not ? OP_NOT : OP_NULL,
6880 		PL_opargs[type] & OA_RETSCALAR ? OPf_WANT_SCALAR : 0,
6881 		(OP*)logop);
6882     other->op_next = o;
6883 
6884     return o;
6885 }
6886 
6887 /*
6888 =for apidoc Am|OP *|newCONDOP|I32 flags|OP *first|OP *trueop|OP *falseop
6889 
6890 Constructs, checks, and returns a conditional-expression (C<cond_expr>)
6891 op.  C<flags> gives the eight bits of C<op_flags>, except that C<OPf_KIDS>
6892 will be set automatically, and, shifted up eight bits, the eight bits of
6893 C<op_private>, except that the bit with value 1 is automatically set.
6894 C<first> supplies the expression selecting between the two branches,
6895 and C<trueop> and C<falseop> supply the branches; they are consumed by
6896 this function and become part of the constructed op tree.
6897 
6898 =cut
6899 */
6900 
6901 OP *
6902 Perl_newCONDOP(pTHX_ I32 flags, OP *first, OP *trueop, OP *falseop)
6903 {
6904     dVAR;
6905     LOGOP *logop;
6906     OP *start;
6907     OP *o;
6908     OP *cstop;
6909 
6910     PERL_ARGS_ASSERT_NEWCONDOP;
6911 
6912     if (!falseop)
6913 	return newLOGOP(OP_AND, 0, first, trueop);
6914     if (!trueop)
6915 	return newLOGOP(OP_OR, 0, first, falseop);
6916 
6917     scalarboolean(first);
6918     if ((cstop = search_const(first))) {
6919 	/* Left or right arm of the conditional?  */
6920 	const bool left = SvTRUE(((SVOP*)cstop)->op_sv);
6921 	OP *live = left ? trueop : falseop;
6922 	OP *const dead = left ? falseop : trueop;
6923         if (cstop->op_private & OPpCONST_BARE &&
6924 	    cstop->op_private & OPpCONST_STRICT) {
6925 	    no_bareword_allowed(cstop);
6926 	}
6927         op_free(first);
6928         op_free(dead);
6929 	if (live->op_type == OP_LEAVE)
6930 	    live = newUNOP(OP_NULL, OPf_SPECIAL, live);
6931 	else if (live->op_type == OP_MATCH || live->op_type == OP_SUBST
6932 	      || live->op_type == OP_TRANS || live->op_type == OP_TRANSR)
6933 	    /* Mark the op as being unbindable with =~ */
6934 	    live->op_flags |= OPf_SPECIAL;
6935 	live->op_folded = 1;
6936 	return live;
6937     }
6938     logop = S_alloc_LOGOP(aTHX_ OP_COND_EXPR, first, LINKLIST(trueop));
6939     logop->op_flags |= (U8)flags;
6940     logop->op_private = (U8)(1 | (flags >> 8));
6941     logop->op_next = LINKLIST(falseop);
6942 
6943     CHECKOP(OP_COND_EXPR, /* that's logop->op_type */
6944 	    logop);
6945 
6946     /* establish postfix order */
6947     start = LINKLIST(first);
6948     first->op_next = (OP*)logop;
6949 
6950     /* make first, trueop, falseop siblings */
6951     op_sibling_splice((OP*)logop, first,  0, trueop);
6952     op_sibling_splice((OP*)logop, trueop, 0, falseop);
6953 
6954     o = newUNOP(OP_NULL, 0, (OP*)logop);
6955 
6956     trueop->op_next = falseop->op_next = o;
6957 
6958     o->op_next = start;
6959     return o;
6960 }
6961 
6962 /*
6963 =for apidoc Am|OP *|newRANGE|I32 flags|OP *left|OP *right
6964 
6965 Constructs and returns a C<range> op, with subordinate C<flip> and
6966 C<flop> ops.  C<flags> gives the eight bits of C<op_flags> for the
6967 C<flip> op and, shifted up eight bits, the eight bits of C<op_private>
6968 for both the C<flip> and C<range> ops, except that the bit with value
6969 1 is automatically set.  C<left> and C<right> supply the expressions
6970 controlling the endpoints of the range; they are consumed by this function
6971 and become part of the constructed op tree.
6972 
6973 =cut
6974 */
6975 
6976 OP *
6977 Perl_newRANGE(pTHX_ I32 flags, OP *left, OP *right)
6978 {
6979     LOGOP *range;
6980     OP *flip;
6981     OP *flop;
6982     OP *leftstart;
6983     OP *o;
6984 
6985     PERL_ARGS_ASSERT_NEWRANGE;
6986 
6987     range = S_alloc_LOGOP(aTHX_ OP_RANGE, left, LINKLIST(right));
6988     range->op_flags = OPf_KIDS;
6989     leftstart = LINKLIST(left);
6990     range->op_private = (U8)(1 | (flags >> 8));
6991 
6992     /* make left and right siblings */
6993     op_sibling_splice((OP*)range, left, 0, right);
6994 
6995     range->op_next = (OP*)range;
6996     flip = newUNOP(OP_FLIP, flags, (OP*)range);
6997     flop = newUNOP(OP_FLOP, 0, flip);
6998     o = newUNOP(OP_NULL, 0, flop);
6999     LINKLIST(flop);
7000     range->op_next = leftstart;
7001 
7002     left->op_next = flip;
7003     right->op_next = flop;
7004 
7005     range->op_targ =
7006 	pad_add_name_pvn("$", 1, padadd_NO_DUP_CHECK|padadd_STATE, 0, 0);
7007     sv_upgrade(PAD_SV(range->op_targ), SVt_PVNV);
7008     flip->op_targ =
7009 	pad_add_name_pvn("$", 1, padadd_NO_DUP_CHECK|padadd_STATE, 0, 0);;
7010     sv_upgrade(PAD_SV(flip->op_targ), SVt_PVNV);
7011     SvPADTMP_on(PAD_SV(flip->op_targ));
7012 
7013     flip->op_private =  left->op_type == OP_CONST ? OPpFLIP_LINENUM : 0;
7014     flop->op_private = right->op_type == OP_CONST ? OPpFLIP_LINENUM : 0;
7015 
7016     /* check barewords before they might be optimized aways */
7017     if (flip->op_private && cSVOPx(left)->op_private & OPpCONST_STRICT)
7018 	no_bareword_allowed(left);
7019     if (flop->op_private && cSVOPx(right)->op_private & OPpCONST_STRICT)
7020 	no_bareword_allowed(right);
7021 
7022     flip->op_next = o;
7023     if (!flip->op_private || !flop->op_private)
7024 	LINKLIST(o);		/* blow off optimizer unless constant */
7025 
7026     return o;
7027 }
7028 
7029 /*
7030 =for apidoc Am|OP *|newLOOPOP|I32 flags|I32 debuggable|OP *expr|OP *block
7031 
7032 Constructs, checks, and returns an op tree expressing a loop.  This is
7033 only a loop in the control flow through the op tree; it does not have
7034 the heavyweight loop structure that allows exiting the loop by C<last>
7035 and suchlike.  C<flags> gives the eight bits of C<op_flags> for the
7036 top-level op, except that some bits will be set automatically as required.
7037 C<expr> supplies the expression controlling loop iteration, and C<block>
7038 supplies the body of the loop; they are consumed by this function and
7039 become part of the constructed op tree.  C<debuggable> is currently
7040 unused and should always be 1.
7041 
7042 =cut
7043 */
7044 
7045 OP *
7046 Perl_newLOOPOP(pTHX_ I32 flags, I32 debuggable, OP *expr, OP *block)
7047 {
7048     OP* listop;
7049     OP* o;
7050     const bool once = block && block->op_flags & OPf_SPECIAL &&
7051 		      block->op_type == OP_NULL;
7052 
7053     PERL_UNUSED_ARG(debuggable);
7054 
7055     if (expr) {
7056 	if (once && (
7057 	      (expr->op_type == OP_CONST && !SvTRUE(((SVOP*)expr)->op_sv))
7058 	   || (  expr->op_type == OP_NOT
7059 	      && cUNOPx(expr)->op_first->op_type == OP_CONST
7060 	      && SvTRUE(cSVOPx_sv(cUNOPx(expr)->op_first))
7061 	      )
7062 	   ))
7063 	    /* Return the block now, so that S_new_logop does not try to
7064 	       fold it away. */
7065 	    return block;	/* do {} while 0 does once */
7066 	if (expr->op_type == OP_READLINE
7067 	    || expr->op_type == OP_READDIR
7068 	    || expr->op_type == OP_GLOB
7069 	    || expr->op_type == OP_EACH || expr->op_type == OP_AEACH
7070 	    || (expr->op_type == OP_NULL && expr->op_targ == OP_GLOB)) {
7071 	    expr = newUNOP(OP_DEFINED, 0,
7072 		newASSIGNOP(0, newDEFSVOP(), 0, expr) );
7073 	} else if (expr->op_flags & OPf_KIDS) {
7074 	    const OP * const k1 = ((UNOP*)expr)->op_first;
7075 	    const OP * const k2 = k1 ? OpSIBLING(k1) : NULL;
7076 	    switch (expr->op_type) {
7077 	      case OP_NULL:
7078 		if (k2 && (k2->op_type == OP_READLINE || k2->op_type == OP_READDIR)
7079 		      && (k2->op_flags & OPf_STACKED)
7080 		      && ((k1->op_flags & OPf_WANT) == OPf_WANT_SCALAR))
7081 		    expr = newUNOP(OP_DEFINED, 0, expr);
7082 		break;
7083 
7084 	      case OP_SASSIGN:
7085 		if (k1 && (k1->op_type == OP_READDIR
7086 		      || k1->op_type == OP_GLOB
7087 		      || (k1->op_type == OP_NULL && k1->op_targ == OP_GLOB)
7088                      || k1->op_type == OP_EACH
7089                      || k1->op_type == OP_AEACH))
7090 		    expr = newUNOP(OP_DEFINED, 0, expr);
7091 		break;
7092 	    }
7093 	}
7094     }
7095 
7096     /* if block is null, the next op_append_elem() would put UNSTACK, a scalar
7097      * op, in listop. This is wrong. [perl #27024] */
7098     if (!block)
7099 	block = newOP(OP_NULL, 0);
7100     listop = op_append_elem(OP_LINESEQ, block, newOP(OP_UNSTACK, 0));
7101     o = new_logop(OP_AND, 0, &expr, &listop);
7102 
7103     if (once) {
7104 	ASSUME(listop);
7105     }
7106 
7107     if (listop)
7108 	((LISTOP*)listop)->op_last->op_next = LINKLIST(o);
7109 
7110     if (once && o != listop)
7111     {
7112 	assert(cUNOPo->op_first->op_type == OP_AND
7113 	    || cUNOPo->op_first->op_type == OP_OR);
7114 	o->op_next = ((LOGOP*)cUNOPo->op_first)->op_other;
7115     }
7116 
7117     if (o == listop)
7118 	o = newUNOP(OP_NULL, 0, o);	/* or do {} while 1 loses outer block */
7119 
7120     o->op_flags |= flags;
7121     o = op_scope(o);
7122     o->op_flags |= OPf_SPECIAL;	/* suppress cx_popblock() curpm restoration*/
7123     return o;
7124 }
7125 
7126 /*
7127 =for apidoc Am|OP *|newWHILEOP|I32 flags|I32 debuggable|LOOP *loop|OP *expr|OP *block|OP *cont|I32 has_my
7128 
7129 Constructs, checks, and returns an op tree expressing a C<while> loop.
7130 This is a heavyweight loop, with structure that allows exiting the loop
7131 by C<last> and suchlike.
7132 
7133 C<loop> is an optional preconstructed C<enterloop> op to use in the
7134 loop; if it is null then a suitable op will be constructed automatically.
7135 C<expr> supplies the loop's controlling expression.  C<block> supplies the
7136 main body of the loop, and C<cont> optionally supplies a C<continue> block
7137 that operates as a second half of the body.  All of these optree inputs
7138 are consumed by this function and become part of the constructed op tree.
7139 
7140 C<flags> gives the eight bits of C<op_flags> for the C<leaveloop>
7141 op and, shifted up eight bits, the eight bits of C<op_private> for
7142 the C<leaveloop> op, except that (in both cases) some bits will be set
7143 automatically.  C<debuggable> is currently unused and should always be 1.
7144 C<has_my> can be supplied as true to force the
7145 loop body to be enclosed in its own scope.
7146 
7147 =cut
7148 */
7149 
7150 OP *
7151 Perl_newWHILEOP(pTHX_ I32 flags, I32 debuggable, LOOP *loop,
7152 	OP *expr, OP *block, OP *cont, I32 has_my)
7153 {
7154     dVAR;
7155     OP *redo;
7156     OP *next = NULL;
7157     OP *listop;
7158     OP *o;
7159     U8 loopflags = 0;
7160 
7161     PERL_UNUSED_ARG(debuggable);
7162 
7163     if (expr) {
7164 	if (expr->op_type == OP_READLINE
7165          || expr->op_type == OP_READDIR
7166          || expr->op_type == OP_GLOB
7167 	 || expr->op_type == OP_EACH || expr->op_type == OP_AEACH
7168 		     || (expr->op_type == OP_NULL && expr->op_targ == OP_GLOB)) {
7169 	    expr = newUNOP(OP_DEFINED, 0,
7170 		newASSIGNOP(0, newDEFSVOP(), 0, expr) );
7171 	} else if (expr->op_flags & OPf_KIDS) {
7172 	    const OP * const k1 = ((UNOP*)expr)->op_first;
7173 	    const OP * const k2 = (k1) ? OpSIBLING(k1) : NULL;
7174 	    switch (expr->op_type) {
7175 	      case OP_NULL:
7176 		if (k2 && (k2->op_type == OP_READLINE || k2->op_type == OP_READDIR)
7177 		      && (k2->op_flags & OPf_STACKED)
7178 		      && ((k1->op_flags & OPf_WANT) == OPf_WANT_SCALAR))
7179 		    expr = newUNOP(OP_DEFINED, 0, expr);
7180 		break;
7181 
7182 	      case OP_SASSIGN:
7183 		if (k1 && (k1->op_type == OP_READDIR
7184 		      || k1->op_type == OP_GLOB
7185 		      || (k1->op_type == OP_NULL && k1->op_targ == OP_GLOB)
7186                      || k1->op_type == OP_EACH
7187                      || k1->op_type == OP_AEACH))
7188 		    expr = newUNOP(OP_DEFINED, 0, expr);
7189 		break;
7190 	    }
7191 	}
7192     }
7193 
7194     if (!block)
7195 	block = newOP(OP_NULL, 0);
7196     else if (cont || has_my) {
7197 	block = op_scope(block);
7198     }
7199 
7200     if (cont) {
7201 	next = LINKLIST(cont);
7202     }
7203     if (expr) {
7204 	OP * const unstack = newOP(OP_UNSTACK, 0);
7205 	if (!next)
7206 	    next = unstack;
7207 	cont = op_append_elem(OP_LINESEQ, cont, unstack);
7208     }
7209 
7210     assert(block);
7211     listop = op_append_list(OP_LINESEQ, block, cont);
7212     assert(listop);
7213     redo = LINKLIST(listop);
7214 
7215     if (expr) {
7216 	scalar(listop);
7217 	o = new_logop(OP_AND, 0, &expr, &listop);
7218 	if (o == expr && o->op_type == OP_CONST && !SvTRUE(cSVOPo->op_sv)) {
7219 	    op_free((OP*)loop);
7220 	    return expr;		/* listop already freed by new_logop */
7221 	}
7222 	if (listop)
7223 	    ((LISTOP*)listop)->op_last->op_next =
7224 		(o == listop ? redo : LINKLIST(o));
7225     }
7226     else
7227 	o = listop;
7228 
7229     if (!loop) {
7230 	NewOp(1101,loop,1,LOOP);
7231         OpTYPE_set(loop, OP_ENTERLOOP);
7232 	loop->op_private = 0;
7233 	loop->op_next = (OP*)loop;
7234     }
7235 
7236     o = newBINOP(OP_LEAVELOOP, 0, (OP*)loop, o);
7237 
7238     loop->op_redoop = redo;
7239     loop->op_lastop = o;
7240     o->op_private |= loopflags;
7241 
7242     if (next)
7243 	loop->op_nextop = next;
7244     else
7245 	loop->op_nextop = o;
7246 
7247     o->op_flags |= flags;
7248     o->op_private |= (flags >> 8);
7249     return o;
7250 }
7251 
7252 /*
7253 =for apidoc Am|OP *|newFOROP|I32 flags|OP *sv|OP *expr|OP *block|OP *cont
7254 
7255 Constructs, checks, and returns an op tree expressing a C<foreach>
7256 loop (iteration through a list of values).  This is a heavyweight loop,
7257 with structure that allows exiting the loop by C<last> and suchlike.
7258 
7259 C<sv> optionally supplies the variable that will be aliased to each
7260 item in turn; if null, it defaults to C<$_>.
7261 C<expr> supplies the list of values to iterate over.  C<block> supplies
7262 the main body of the loop, and C<cont> optionally supplies a C<continue>
7263 block that operates as a second half of the body.  All of these optree
7264 inputs are consumed by this function and become part of the constructed
7265 op tree.
7266 
7267 C<flags> gives the eight bits of C<op_flags> for the C<leaveloop>
7268 op and, shifted up eight bits, the eight bits of C<op_private> for
7269 the C<leaveloop> op, except that (in both cases) some bits will be set
7270 automatically.
7271 
7272 =cut
7273 */
7274 
7275 OP *
7276 Perl_newFOROP(pTHX_ I32 flags, OP *sv, OP *expr, OP *block, OP *cont)
7277 {
7278     dVAR;
7279     LOOP *loop;
7280     OP *wop;
7281     PADOFFSET padoff = 0;
7282     I32 iterflags = 0;
7283     I32 iterpflags = 0;
7284 
7285     PERL_ARGS_ASSERT_NEWFOROP;
7286 
7287     if (sv) {
7288 	if (sv->op_type == OP_RV2SV) {	/* symbol table variable */
7289 	    iterpflags = sv->op_private & OPpOUR_INTRO; /* for our $x () */
7290             OpTYPE_set(sv, OP_RV2GV);
7291 
7292 	    /* The op_type check is needed to prevent a possible segfault
7293 	     * if the loop variable is undeclared and 'strict vars' is in
7294 	     * effect. This is illegal but is nonetheless parsed, so we
7295 	     * may reach this point with an OP_CONST where we're expecting
7296 	     * an OP_GV.
7297 	     */
7298 	    if (cUNOPx(sv)->op_first->op_type == OP_GV
7299 	     && cGVOPx_gv(cUNOPx(sv)->op_first) == PL_defgv)
7300 		iterpflags |= OPpITER_DEF;
7301 	}
7302 	else if (sv->op_type == OP_PADSV) { /* private variable */
7303 	    iterpflags = sv->op_private & OPpLVAL_INTRO; /* for my $x () */
7304 	    padoff = sv->op_targ;
7305             sv->op_targ = 0;
7306             op_free(sv);
7307 	    sv = NULL;
7308 	    PAD_COMPNAME_GEN_set(padoff, PERL_INT_MAX);
7309 	}
7310 	else if (sv->op_type == OP_NULL && sv->op_targ == OP_SREFGEN)
7311 	    NOOP;
7312 	else
7313 	    Perl_croak(aTHX_ "Can't use %s for loop variable", PL_op_desc[sv->op_type]);
7314 	if (padoff) {
7315 	    PADNAME * const pn = PAD_COMPNAME(padoff);
7316 	    const char * const name = PadnamePV(pn);
7317 
7318 	    if (PadnameLEN(pn) == 2 && name[0] == '$' && name[1] == '_')
7319 		iterpflags |= OPpITER_DEF;
7320 	}
7321     }
7322     else {
7323 	sv = newGVOP(OP_GV, 0, PL_defgv);
7324 	iterpflags |= OPpITER_DEF;
7325     }
7326 
7327     if (expr->op_type == OP_RV2AV || expr->op_type == OP_PADAV) {
7328 	expr = op_lvalue(force_list(scalar(ref(expr, OP_ITER)), 1), OP_GREPSTART);
7329 	iterflags |= OPf_STACKED;
7330     }
7331     else if (expr->op_type == OP_NULL &&
7332              (expr->op_flags & OPf_KIDS) &&
7333              ((BINOP*)expr)->op_first->op_type == OP_FLOP)
7334     {
7335 	/* Basically turn for($x..$y) into the same as for($x,$y), but we
7336 	 * set the STACKED flag to indicate that these values are to be
7337 	 * treated as min/max values by 'pp_enteriter'.
7338 	 */
7339 	const UNOP* const flip = (UNOP*)((UNOP*)((BINOP*)expr)->op_first)->op_first;
7340 	LOGOP* const range = (LOGOP*) flip->op_first;
7341 	OP* const left  = range->op_first;
7342 	OP* const right = OpSIBLING(left);
7343 	LISTOP* listop;
7344 
7345 	range->op_flags &= ~OPf_KIDS;
7346         /* detach range's children */
7347         op_sibling_splice((OP*)range, NULL, -1, NULL);
7348 
7349 	listop = (LISTOP*)newLISTOP(OP_LIST, 0, left, right);
7350 	listop->op_first->op_next = range->op_next;
7351 	left->op_next = range->op_other;
7352 	right->op_next = (OP*)listop;
7353 	listop->op_next = listop->op_first;
7354 
7355 	op_free(expr);
7356 	expr = (OP*)(listop);
7357         op_null(expr);
7358 	iterflags |= OPf_STACKED;
7359     }
7360     else {
7361         expr = op_lvalue(force_list(expr, 1), OP_GREPSTART);
7362     }
7363 
7364     loop = (LOOP*)op_convert_list(OP_ENTERITER, iterflags,
7365                                   op_append_elem(OP_LIST, list(expr),
7366                                                  scalar(sv)));
7367     assert(!loop->op_next);
7368     /* for my  $x () sets OPpLVAL_INTRO;
7369      * for our $x () sets OPpOUR_INTRO */
7370     loop->op_private = (U8)iterpflags;
7371     if (loop->op_slabbed
7372      && DIFF(loop, OpSLOT(loop)->opslot_next)
7373 	 < SIZE_TO_PSIZE(sizeof(LOOP)))
7374     {
7375 	LOOP *tmp;
7376 	NewOp(1234,tmp,1,LOOP);
7377 	Copy(loop,tmp,1,LISTOP);
7378 #ifdef PERL_OP_PARENT
7379         assert(loop->op_last->op_sibparent == (OP*)loop);
7380         OpLASTSIB_set(loop->op_last, (OP*)tmp); /*point back to new parent */
7381 #endif
7382 	S_op_destroy(aTHX_ (OP*)loop);
7383 	loop = tmp;
7384     }
7385     else if (!loop->op_slabbed)
7386     {
7387 	loop = (LOOP*)PerlMemShared_realloc(loop, sizeof(LOOP));
7388 #ifdef PERL_OP_PARENT
7389         OpLASTSIB_set(loop->op_last, (OP*)loop);
7390 #endif
7391     }
7392     loop->op_targ = padoff;
7393     wop = newWHILEOP(flags, 1, loop, newOP(OP_ITER, 0), block, cont, 0);
7394     return wop;
7395 }
7396 
7397 /*
7398 =for apidoc Am|OP *|newLOOPEX|I32 type|OP *label
7399 
7400 Constructs, checks, and returns a loop-exiting op (such as C<goto>
7401 or C<last>).  C<type> is the opcode.  C<label> supplies the parameter
7402 determining the target of the op; it is consumed by this function and
7403 becomes part of the constructed op tree.
7404 
7405 =cut
7406 */
7407 
7408 OP*
7409 Perl_newLOOPEX(pTHX_ I32 type, OP *label)
7410 {
7411     OP *o = NULL;
7412 
7413     PERL_ARGS_ASSERT_NEWLOOPEX;
7414 
7415     assert((PL_opargs[type] & OA_CLASS_MASK) == OA_LOOPEXOP
7416 	|| type == OP_CUSTOM);
7417 
7418     if (type != OP_GOTO) {
7419 	/* "last()" means "last" */
7420 	if (label->op_type == OP_STUB && (label->op_flags & OPf_PARENS)) {
7421 	    o = newOP(type, OPf_SPECIAL);
7422 	}
7423     }
7424     else {
7425 	/* Check whether it's going to be a goto &function */
7426 	if (label->op_type == OP_ENTERSUB
7427 		&& !(label->op_flags & OPf_STACKED))
7428 	    label = newUNOP(OP_REFGEN, 0, op_lvalue(label, OP_REFGEN));
7429     }
7430 
7431     /* Check for a constant argument */
7432     if (label->op_type == OP_CONST) {
7433 	    SV * const sv = ((SVOP *)label)->op_sv;
7434 	    STRLEN l;
7435 	    const char *s = SvPV_const(sv,l);
7436 	    if (l == strlen(s)) {
7437 		o = newPVOP(type,
7438 			    SvUTF8(((SVOP*)label)->op_sv),
7439 			    savesharedpv(
7440 				SvPV_nolen_const(((SVOP*)label)->op_sv)));
7441 	    }
7442     }
7443 
7444     /* If we have already created an op, we do not need the label. */
7445     if (o)
7446 		op_free(label);
7447     else o = newUNOP(type, OPf_STACKED, label);
7448 
7449     PL_hints |= HINT_BLOCK_SCOPE;
7450     return o;
7451 }
7452 
7453 /* if the condition is a literal array or hash
7454    (or @{ ... } etc), make a reference to it.
7455  */
7456 STATIC OP *
7457 S_ref_array_or_hash(pTHX_ OP *cond)
7458 {
7459     if (cond
7460     && (cond->op_type == OP_RV2AV
7461     ||  cond->op_type == OP_PADAV
7462     ||  cond->op_type == OP_RV2HV
7463     ||  cond->op_type == OP_PADHV))
7464 
7465 	return newUNOP(OP_REFGEN, 0, op_lvalue(cond, OP_REFGEN));
7466 
7467     else if(cond
7468     && (cond->op_type == OP_ASLICE
7469     ||  cond->op_type == OP_KVASLICE
7470     ||  cond->op_type == OP_HSLICE
7471     ||  cond->op_type == OP_KVHSLICE)) {
7472 
7473 	/* anonlist now needs a list from this op, was previously used in
7474 	 * scalar context */
7475 	cond->op_flags &= ~(OPf_WANT_SCALAR | OPf_REF);
7476 	cond->op_flags |= OPf_WANT_LIST;
7477 
7478 	return newANONLIST(op_lvalue(cond, OP_ANONLIST));
7479     }
7480 
7481     else
7482 	return cond;
7483 }
7484 
7485 /* These construct the optree fragments representing given()
7486    and when() blocks.
7487 
7488    entergiven and enterwhen are LOGOPs; the op_other pointer
7489    points up to the associated leave op. We need this so we
7490    can put it in the context and make break/continue work.
7491    (Also, of course, pp_enterwhen will jump straight to
7492    op_other if the match fails.)
7493  */
7494 
7495 STATIC OP *
7496 S_newGIVWHENOP(pTHX_ OP *cond, OP *block,
7497 		   I32 enter_opcode, I32 leave_opcode,
7498 		   PADOFFSET entertarg)
7499 {
7500     dVAR;
7501     LOGOP *enterop;
7502     OP *o;
7503 
7504     PERL_ARGS_ASSERT_NEWGIVWHENOP;
7505     PERL_UNUSED_ARG(entertarg); /* used to indicate targ of lexical $_ */
7506 
7507     enterop = S_alloc_LOGOP(aTHX_ enter_opcode, block, NULL);
7508     enterop->op_targ = 0;
7509     enterop->op_private = 0;
7510 
7511     o = newUNOP(leave_opcode, 0, (OP *) enterop);
7512 
7513     if (cond) {
7514         /* prepend cond if we have one */
7515         op_sibling_splice((OP*)enterop, NULL, 0, scalar(cond));
7516 
7517 	o->op_next = LINKLIST(cond);
7518 	cond->op_next = (OP *) enterop;
7519     }
7520     else {
7521 	/* This is a default {} block */
7522 	enterop->op_flags |= OPf_SPECIAL;
7523 	o      ->op_flags |= OPf_SPECIAL;
7524 
7525 	o->op_next = (OP *) enterop;
7526     }
7527 
7528     CHECKOP(enter_opcode, enterop); /* Currently does nothing, since
7529     				       entergiven and enterwhen both
7530     				       use ck_null() */
7531 
7532     enterop->op_next = LINKLIST(block);
7533     block->op_next = enterop->op_other = o;
7534 
7535     return o;
7536 }
7537 
7538 /* Does this look like a boolean operation? For these purposes
7539    a boolean operation is:
7540      - a subroutine call [*]
7541      - a logical connective
7542      - a comparison operator
7543      - a filetest operator, with the exception of -s -M -A -C
7544      - defined(), exists() or eof()
7545      - /$re/ or $foo =~ /$re/
7546 
7547    [*] possibly surprising
7548  */
7549 STATIC bool
7550 S_looks_like_bool(pTHX_ const OP *o)
7551 {
7552     PERL_ARGS_ASSERT_LOOKS_LIKE_BOOL;
7553 
7554     switch(o->op_type) {
7555 	case OP_OR:
7556 	case OP_DOR:
7557 	    return looks_like_bool(cLOGOPo->op_first);
7558 
7559 	case OP_AND:
7560         {
7561             OP* sibl = OpSIBLING(cLOGOPo->op_first);
7562             ASSUME(sibl);
7563 	    return (
7564 	    	looks_like_bool(cLOGOPo->op_first)
7565 	     && looks_like_bool(sibl));
7566         }
7567 
7568 	case OP_NULL:
7569 	case OP_SCALAR:
7570 	    return (
7571 		o->op_flags & OPf_KIDS
7572 	    && looks_like_bool(cUNOPo->op_first));
7573 
7574 	case OP_ENTERSUB:
7575 
7576 	case OP_NOT:	case OP_XOR:
7577 
7578 	case OP_EQ:	case OP_NE:	case OP_LT:
7579 	case OP_GT:	case OP_LE:	case OP_GE:
7580 
7581 	case OP_I_EQ:	case OP_I_NE:	case OP_I_LT:
7582 	case OP_I_GT:	case OP_I_LE:	case OP_I_GE:
7583 
7584 	case OP_SEQ:	case OP_SNE:	case OP_SLT:
7585 	case OP_SGT:	case OP_SLE:	case OP_SGE:
7586 
7587 	case OP_SMARTMATCH:
7588 
7589 	case OP_FTRREAD:  case OP_FTRWRITE: case OP_FTREXEC:
7590 	case OP_FTEREAD:  case OP_FTEWRITE: case OP_FTEEXEC:
7591 	case OP_FTIS:     case OP_FTEOWNED: case OP_FTROWNED:
7592 	case OP_FTZERO:   case OP_FTSOCK:   case OP_FTCHR:
7593 	case OP_FTBLK:    case OP_FTFILE:   case OP_FTDIR:
7594 	case OP_FTPIPE:   case OP_FTLINK:   case OP_FTSUID:
7595 	case OP_FTSGID:   case OP_FTSVTX:   case OP_FTTTY:
7596 	case OP_FTTEXT:   case OP_FTBINARY:
7597 
7598 	case OP_DEFINED: case OP_EXISTS:
7599 	case OP_MATCH:	 case OP_EOF:
7600 
7601 	case OP_FLOP:
7602 
7603 	    return TRUE;
7604 
7605 	case OP_CONST:
7606 	    /* Detect comparisons that have been optimized away */
7607 	    if (cSVOPo->op_sv == &PL_sv_yes
7608 	    ||  cSVOPo->op_sv == &PL_sv_no)
7609 
7610 		return TRUE;
7611 	    else
7612 		return FALSE;
7613 
7614 	/* FALLTHROUGH */
7615 	default:
7616 	    return FALSE;
7617     }
7618 }
7619 
7620 /*
7621 =for apidoc Am|OP *|newGIVENOP|OP *cond|OP *block|PADOFFSET defsv_off
7622 
7623 Constructs, checks, and returns an op tree expressing a C<given> block.
7624 C<cond> supplies the expression that will be locally assigned to a lexical
7625 variable, and C<block> supplies the body of the C<given> construct; they
7626 are consumed by this function and become part of the constructed op tree.
7627 C<defsv_off> must be zero (it used to identity the pad slot of lexical $_).
7628 
7629 =cut
7630 */
7631 
7632 OP *
7633 Perl_newGIVENOP(pTHX_ OP *cond, OP *block, PADOFFSET defsv_off)
7634 {
7635     PERL_ARGS_ASSERT_NEWGIVENOP;
7636     PERL_UNUSED_ARG(defsv_off);
7637 
7638     assert(!defsv_off);
7639     return newGIVWHENOP(
7640     	ref_array_or_hash(cond),
7641     	block,
7642 	OP_ENTERGIVEN, OP_LEAVEGIVEN,
7643 	0);
7644 }
7645 
7646 /*
7647 =for apidoc Am|OP *|newWHENOP|OP *cond|OP *block
7648 
7649 Constructs, checks, and returns an op tree expressing a C<when> block.
7650 C<cond> supplies the test expression, and C<block> supplies the block
7651 that will be executed if the test evaluates to true; they are consumed
7652 by this function and become part of the constructed op tree.  C<cond>
7653 will be interpreted DWIMically, often as a comparison against C<$_>,
7654 and may be null to generate a C<default> block.
7655 
7656 =cut
7657 */
7658 
7659 OP *
7660 Perl_newWHENOP(pTHX_ OP *cond, OP *block)
7661 {
7662     const bool cond_llb = (!cond || looks_like_bool(cond));
7663     OP *cond_op;
7664 
7665     PERL_ARGS_ASSERT_NEWWHENOP;
7666 
7667     if (cond_llb)
7668 	cond_op = cond;
7669     else {
7670 	cond_op = newBINOP(OP_SMARTMATCH, OPf_SPECIAL,
7671 		newDEFSVOP(),
7672 		scalar(ref_array_or_hash(cond)));
7673     }
7674 
7675     return newGIVWHENOP(cond_op, block, OP_ENTERWHEN, OP_LEAVEWHEN, 0);
7676 }
7677 
7678 /* must not conflict with SVf_UTF8 */
7679 #define CV_CKPROTO_CURSTASH	0x1
7680 
7681 void
7682 Perl_cv_ckproto_len_flags(pTHX_ const CV *cv, const GV *gv, const char *p,
7683 		    const STRLEN len, const U32 flags)
7684 {
7685     SV *name = NULL, *msg;
7686     const char * cvp = SvROK(cv)
7687 			? SvTYPE(SvRV_const(cv)) == SVt_PVCV
7688 			   ? (cv = (const CV *)SvRV_const(cv), CvPROTO(cv))
7689 			   : ""
7690 			: CvPROTO(cv);
7691     STRLEN clen = CvPROTOLEN(cv), plen = len;
7692 
7693     PERL_ARGS_ASSERT_CV_CKPROTO_LEN_FLAGS;
7694 
7695     if (p == NULL && cvp == NULL)
7696 	return;
7697 
7698     if (!ckWARN_d(WARN_PROTOTYPE))
7699 	return;
7700 
7701     if (p && cvp) {
7702 	p = S_strip_spaces(aTHX_ p, &plen);
7703 	cvp = S_strip_spaces(aTHX_ cvp, &clen);
7704 	if ((flags & SVf_UTF8) == SvUTF8(cv)) {
7705 	    if (plen == clen && memEQ(cvp, p, plen))
7706 		return;
7707 	} else {
7708 	    if (flags & SVf_UTF8) {
7709 		if (bytes_cmp_utf8((const U8 *)cvp, clen, (const U8 *)p, plen) == 0)
7710 		    return;
7711             }
7712 	    else {
7713 		if (bytes_cmp_utf8((const U8 *)p, plen, (const U8 *)cvp, clen) == 0)
7714 		    return;
7715 	    }
7716 	}
7717     }
7718 
7719     msg = sv_newmortal();
7720 
7721     if (gv)
7722     {
7723 	if (isGV(gv))
7724 	    gv_efullname3(name = sv_newmortal(), gv, NULL);
7725 	else if (SvPOK(gv) && *SvPVX((SV *)gv) == '&')
7726 	    name = newSVpvn_flags(SvPVX((SV *)gv)+1, SvCUR(gv)-1, SvUTF8(gv)|SVs_TEMP);
7727 	else if (flags & CV_CKPROTO_CURSTASH || SvROK(gv)) {
7728 	    name = sv_2mortal(newSVhek(HvNAME_HEK(PL_curstash)));
7729 	    sv_catpvs(name, "::");
7730 	    if (SvROK(gv)) {
7731 		assert (SvTYPE(SvRV_const(gv)) == SVt_PVCV);
7732 		assert (CvNAMED(SvRV_const(gv)));
7733 		sv_cathek(name, CvNAME_HEK(MUTABLE_CV(SvRV_const(gv))));
7734 	    }
7735 	    else sv_catsv(name, (SV *)gv);
7736 	}
7737 	else name = (SV *)gv;
7738     }
7739     sv_setpvs(msg, "Prototype mismatch:");
7740     if (name)
7741 	Perl_sv_catpvf(aTHX_ msg, " sub %"SVf, SVfARG(name));
7742     if (cvp)
7743 	Perl_sv_catpvf(aTHX_ msg, " (%"UTF8f")",
7744 	    UTF8fARG(SvUTF8(cv),clen,cvp)
7745 	);
7746     else
7747 	sv_catpvs(msg, ": none");
7748     sv_catpvs(msg, " vs ");
7749     if (p)
7750 	Perl_sv_catpvf(aTHX_ msg, "(%"UTF8f")", UTF8fARG(flags & SVf_UTF8,len,p));
7751     else
7752 	sv_catpvs(msg, "none");
7753     Perl_warner(aTHX_ packWARN(WARN_PROTOTYPE), "%"SVf, SVfARG(msg));
7754 }
7755 
7756 static void const_sv_xsub(pTHX_ CV* cv);
7757 static void const_av_xsub(pTHX_ CV* cv);
7758 
7759 /*
7760 
7761 =head1 Optree Manipulation Functions
7762 
7763 =for apidoc cv_const_sv
7764 
7765 If C<cv> is a constant sub eligible for inlining, returns the constant
7766 value returned by the sub.  Otherwise, returns C<NULL>.
7767 
7768 Constant subs can be created with C<newCONSTSUB> or as described in
7769 L<perlsub/"Constant Functions">.
7770 
7771 =cut
7772 */
7773 SV *
7774 Perl_cv_const_sv(const CV *const cv)
7775 {
7776     SV *sv;
7777     if (!cv)
7778 	return NULL;
7779     if (!(SvTYPE(cv) == SVt_PVCV || SvTYPE(cv) == SVt_PVFM))
7780 	return NULL;
7781     sv = CvCONST(cv) ? MUTABLE_SV(CvXSUBANY(cv).any_ptr) : NULL;
7782     if (sv && SvTYPE(sv) == SVt_PVAV) return NULL;
7783     return sv;
7784 }
7785 
7786 SV *
7787 Perl_cv_const_sv_or_av(const CV * const cv)
7788 {
7789     if (!cv)
7790 	return NULL;
7791     if (SvROK(cv)) return SvRV((SV *)cv);
7792     assert (SvTYPE(cv) == SVt_PVCV || SvTYPE(cv) == SVt_PVFM);
7793     return CvCONST(cv) ? MUTABLE_SV(CvXSUBANY(cv).any_ptr) : NULL;
7794 }
7795 
7796 /* op_const_sv:  examine an optree to determine whether it's in-lineable.
7797  * Can be called in 2 ways:
7798  *
7799  * !allow_lex
7800  * 	look for a single OP_CONST with attached value: return the value
7801  *
7802  * allow_lex && !CvCONST(cv);
7803  *
7804  * 	examine the clone prototype, and if contains only a single
7805  * 	OP_CONST, return the value; or if it contains a single PADSV ref-
7806  * 	erencing an outer lexical, turn on CvCONST to indicate the CV is
7807  * 	a candidate for "constizing" at clone time, and return NULL.
7808  */
7809 
7810 static SV *
7811 S_op_const_sv(pTHX_ const OP *o, CV *cv, bool allow_lex)
7812 {
7813     SV *sv = NULL;
7814     bool padsv = FALSE;
7815 
7816     assert(o);
7817     assert(cv);
7818 
7819     for (; o; o = o->op_next) {
7820 	const OPCODE type = o->op_type;
7821 
7822 	if (type == OP_NEXTSTATE || type == OP_LINESEQ
7823 	     || type == OP_NULL
7824 	     || type == OP_PUSHMARK)
7825 		continue;
7826 	if (type == OP_DBSTATE)
7827 		continue;
7828 	if (type == OP_LEAVESUB)
7829 	    break;
7830 	if (sv)
7831 	    return NULL;
7832 	if (type == OP_CONST && cSVOPo->op_sv)
7833 	    sv = cSVOPo->op_sv;
7834 	else if (type == OP_UNDEF && !o->op_private) {
7835 	    sv = newSV(0);
7836 	    SAVEFREESV(sv);
7837 	}
7838 	else if (allow_lex && type == OP_PADSV) {
7839 		if (PAD_COMPNAME_FLAGS(o->op_targ) & PADNAMEt_OUTER)
7840 		{
7841 		    sv = &PL_sv_undef; /* an arbitrary non-null value */
7842 		    padsv = TRUE;
7843 		}
7844 		else
7845 		    return NULL;
7846 	}
7847 	else {
7848 	    return NULL;
7849 	}
7850     }
7851     if (padsv) {
7852 	CvCONST_on(cv);
7853 	return NULL;
7854     }
7855     return sv;
7856 }
7857 
7858 static bool
7859 S_already_defined(pTHX_ CV *const cv, OP * const block, OP * const o,
7860 			PADNAME * const name, SV ** const const_svp)
7861 {
7862     assert (cv);
7863     assert (o || name);
7864     assert (const_svp);
7865     if ((!block
7866 	 )) {
7867 	if (CvFLAGS(PL_compcv)) {
7868 	    /* might have had built-in attrs applied */
7869 	    const bool pureperl = !CvISXSUB(cv) && CvROOT(cv);
7870 	    if (CvLVALUE(PL_compcv) && ! CvLVALUE(cv) && pureperl
7871 	     && ckWARN(WARN_MISC))
7872 	    {
7873 		/* protect against fatal warnings leaking compcv */
7874 		SAVEFREESV(PL_compcv);
7875 		Perl_warner(aTHX_ packWARN(WARN_MISC), "lvalue attribute ignored after the subroutine has been defined");
7876 		SvREFCNT_inc_simple_void_NN(PL_compcv);
7877 	    }
7878 	    CvFLAGS(cv) |=
7879 		(CvFLAGS(PL_compcv) & CVf_BUILTIN_ATTRS
7880 		  & ~(CVf_LVALUE * pureperl));
7881 	}
7882 	return FALSE;
7883     }
7884 
7885     /* redundant check for speed: */
7886     if (CvCONST(cv) || ckWARN(WARN_REDEFINE)) {
7887 	const line_t oldline = CopLINE(PL_curcop);
7888 	SV *namesv = o
7889 	    ? cSVOPo->op_sv
7890 	    : sv_2mortal(newSVpvn_utf8(
7891 		PadnamePV(name)+1,PadnameLEN(name)-1, PadnameUTF8(name)
7892 	      ));
7893 	if (PL_parser && PL_parser->copline != NOLINE)
7894             /* This ensures that warnings are reported at the first
7895                line of a redefinition, not the last.  */
7896 	    CopLINE_set(PL_curcop, PL_parser->copline);
7897 	/* protect against fatal warnings leaking compcv */
7898 	SAVEFREESV(PL_compcv);
7899 	report_redefined_cv(namesv, cv, const_svp);
7900 	SvREFCNT_inc_simple_void_NN(PL_compcv);
7901 	CopLINE_set(PL_curcop, oldline);
7902     }
7903     SAVEFREESV(cv);
7904     return TRUE;
7905 }
7906 
7907 CV *
7908 Perl_newMYSUB(pTHX_ I32 floor, OP *o, OP *proto, OP *attrs, OP *block)
7909 {
7910     CV **spot;
7911     SV **svspot;
7912     const char *ps;
7913     STRLEN ps_len = 0; /* init it to avoid false uninit warning from icc */
7914     U32 ps_utf8 = 0;
7915     CV *cv = NULL;
7916     CV *compcv = PL_compcv;
7917     SV *const_sv;
7918     PADNAME *name;
7919     PADOFFSET pax = o->op_targ;
7920     CV *outcv = CvOUTSIDE(PL_compcv);
7921     CV *clonee = NULL;
7922     HEK *hek = NULL;
7923     bool reusable = FALSE;
7924     OP *start = NULL;
7925 #ifdef PERL_DEBUG_READONLY_OPS
7926     OPSLAB *slab = NULL;
7927 #endif
7928 
7929     PERL_ARGS_ASSERT_NEWMYSUB;
7930 
7931     /* Find the pad slot for storing the new sub.
7932        We cannot use PL_comppad, as it is the pad owned by the new sub.  We
7933        need to look in CvOUTSIDE and find the pad belonging to the enclos-
7934        ing sub.  And then we need to dig deeper if this is a lexical from
7935        outside, as in:
7936 	   my sub foo; sub { sub foo { } }
7937      */
7938    redo:
7939     name = PadlistNAMESARRAY(CvPADLIST(outcv))[pax];
7940     if (PadnameOUTER(name) && PARENT_PAD_INDEX(name)) {
7941 	pax = PARENT_PAD_INDEX(name);
7942 	outcv = CvOUTSIDE(outcv);
7943 	assert(outcv);
7944 	goto redo;
7945     }
7946     svspot =
7947 	&PadARRAY(PadlistARRAY(CvPADLIST(outcv))
7948 			[CvDEPTH(outcv) ? CvDEPTH(outcv) : 1])[pax];
7949     spot = (CV **)svspot;
7950 
7951     if (!(PL_parser && PL_parser->error_count))
7952         move_proto_attr(&proto, &attrs, (GV *)PadnameSV(name));
7953 
7954     if (proto) {
7955 	assert(proto->op_type == OP_CONST);
7956 	ps = SvPV_const(((SVOP*)proto)->op_sv, ps_len);
7957         ps_utf8 = SvUTF8(((SVOP*)proto)->op_sv);
7958     }
7959     else
7960 	ps = NULL;
7961 
7962     if (proto)
7963         SAVEFREEOP(proto);
7964     if (attrs)
7965         SAVEFREEOP(attrs);
7966 
7967     if (PL_parser && PL_parser->error_count) {
7968 	op_free(block);
7969 	SvREFCNT_dec(PL_compcv);
7970 	PL_compcv = 0;
7971 	goto done;
7972     }
7973 
7974     if (CvDEPTH(outcv) && CvCLONE(compcv)) {
7975 	cv = *spot;
7976 	svspot = (SV **)(spot = &clonee);
7977     }
7978     else if (PadnameIsSTATE(name) || CvDEPTH(outcv))
7979 	cv = *spot;
7980     else {
7981 	assert (SvTYPE(*spot) == SVt_PVCV);
7982 	if (CvNAMED(*spot))
7983 	    hek = CvNAME_HEK(*spot);
7984 	else {
7985             dVAR;
7986 	    U32 hash;
7987 	    PERL_HASH(hash, PadnamePV(name)+1, PadnameLEN(name)-1);
7988 	    CvNAME_HEK_set(*spot, hek =
7989 		share_hek(
7990 		    PadnamePV(name)+1,
7991 		    (PadnameLEN(name)-1) * (PadnameUTF8(name) ? -1 : 1),
7992 		    hash
7993 		)
7994 	    );
7995 	    CvLEXICAL_on(*spot);
7996 	}
7997 	cv = PadnamePROTOCV(name);
7998 	svspot = (SV **)(spot = &PadnamePROTOCV(name));
7999     }
8000 
8001     if (block) {
8002 	/* This makes sub {}; work as expected.  */
8003 	if (block->op_type == OP_STUB) {
8004 	    const line_t l = PL_parser->copline;
8005 	    op_free(block);
8006 	    block = newSTATEOP(0, NULL, 0);
8007 	    PL_parser->copline = l;
8008 	}
8009 	block = CvLVALUE(compcv)
8010 	     || (cv && CvLVALUE(cv) && !CvROOT(cv) && !CvXSUB(cv))
8011 		   ? newUNOP(OP_LEAVESUBLV, 0,
8012 			     op_lvalue(scalarseq(block), OP_LEAVESUBLV))
8013 		   : newUNOP(OP_LEAVESUB, 0, scalarseq(block));
8014 	start = LINKLIST(block);
8015 	block->op_next = 0;
8016         if (ps && !*ps && !attrs && !CvLVALUE(compcv))
8017             const_sv = S_op_const_sv(aTHX_ start, compcv, FALSE);
8018         else
8019             const_sv = NULL;
8020     }
8021     else
8022         const_sv = NULL;
8023 
8024     if (cv) {
8025         const bool exists = CvROOT(cv) || CvXSUB(cv);
8026 
8027         /* if the subroutine doesn't exist and wasn't pre-declared
8028          * with a prototype, assume it will be AUTOLOADed,
8029          * skipping the prototype check
8030          */
8031         if (exists || SvPOK(cv))
8032             cv_ckproto_len_flags(cv, (GV *)PadnameSV(name), ps, ps_len,
8033                                  ps_utf8);
8034 	/* already defined? */
8035 	if (exists) {
8036 	    if (S_already_defined(aTHX_ cv,block,NULL,name,&const_sv))
8037 		cv = NULL;
8038 	    else {
8039 		if (attrs) goto attrs;
8040 		/* just a "sub foo;" when &foo is already defined */
8041 		SAVEFREESV(compcv);
8042 		goto done;
8043 	    }
8044 	}
8045 	else if (CvDEPTH(outcv) && CvCLONE(compcv)) {
8046 	    cv = NULL;
8047 	    reusable = TRUE;
8048 	}
8049     }
8050     if (const_sv) {
8051 	SvREFCNT_inc_simple_void_NN(const_sv);
8052 	SvFLAGS(const_sv) |= SVs_PADTMP;
8053 	if (cv) {
8054 	    assert(!CvROOT(cv) && !CvCONST(cv));
8055 	    cv_forget_slab(cv);
8056 	}
8057 	else {
8058 	    cv = MUTABLE_CV(newSV_type(SVt_PVCV));
8059 	    CvFILE_set_from_cop(cv, PL_curcop);
8060 	    CvSTASH_set(cv, PL_curstash);
8061 	    *spot = cv;
8062 	}
8063 	sv_setpvs(MUTABLE_SV(cv), "");  /* prototype is "" */
8064 	CvXSUBANY(cv).any_ptr = const_sv;
8065 	CvXSUB(cv) = const_sv_xsub;
8066 	CvCONST_on(cv);
8067 	CvISXSUB_on(cv);
8068 	PoisonPADLIST(cv);
8069 	CvFLAGS(cv) |= CvMETHOD(compcv);
8070 	op_free(block);
8071 	SvREFCNT_dec(compcv);
8072 	PL_compcv = NULL;
8073 	goto setname;
8074     }
8075     /* Checking whether outcv is CvOUTSIDE(compcv) is not sufficient to
8076        determine whether this sub definition is in the same scope as its
8077        declaration.  If this sub definition is inside an inner named pack-
8078        age sub (my sub foo; sub bar { sub foo { ... } }), outcv points to
8079        the package sub.  So check PadnameOUTER(name) too.
8080      */
8081     if (outcv == CvOUTSIDE(compcv) && !PadnameOUTER(name)) {
8082 	assert(!CvWEAKOUTSIDE(compcv));
8083 	SvREFCNT_dec(CvOUTSIDE(compcv));
8084 	CvWEAKOUTSIDE_on(compcv);
8085     }
8086     /* XXX else do we have a circular reference? */
8087     if (cv) {	/* must reuse cv in case stub is referenced elsewhere */
8088 	/* transfer PL_compcv to cv */
8089 	if (block
8090 	) {
8091 	    cv_flags_t preserved_flags =
8092 		CvFLAGS(cv) & (CVf_BUILTIN_ATTRS|CVf_NAMED);
8093 	    PADLIST *const temp_padl = CvPADLIST(cv);
8094 	    CV *const temp_cv = CvOUTSIDE(cv);
8095 	    const cv_flags_t other_flags =
8096 		CvFLAGS(cv) & (CVf_SLABBED|CVf_WEAKOUTSIDE);
8097 	    OP * const cvstart = CvSTART(cv);
8098 
8099 	    SvPOK_off(cv);
8100 	    CvFLAGS(cv) =
8101 		CvFLAGS(compcv) | preserved_flags;
8102 	    CvOUTSIDE(cv) = CvOUTSIDE(compcv);
8103 	    CvOUTSIDE_SEQ(cv) = CvOUTSIDE_SEQ(compcv);
8104 	    CvPADLIST_set(cv, CvPADLIST(compcv));
8105 	    CvOUTSIDE(compcv) = temp_cv;
8106 	    CvPADLIST_set(compcv, temp_padl);
8107 	    CvSTART(cv) = CvSTART(compcv);
8108 	    CvSTART(compcv) = cvstart;
8109 	    CvFLAGS(compcv) &= ~(CVf_SLABBED|CVf_WEAKOUTSIDE);
8110 	    CvFLAGS(compcv) |= other_flags;
8111 
8112 	    if (CvFILE(cv) && CvDYNFILE(cv)) {
8113 		Safefree(CvFILE(cv));
8114 	    }
8115 
8116 	    /* inner references to compcv must be fixed up ... */
8117 	    pad_fixup_inner_anons(CvPADLIST(cv), compcv, cv);
8118 	    if (PERLDB_INTER)/* Advice debugger on the new sub. */
8119 	      ++PL_sub_generation;
8120 	}
8121 	else {
8122 	    /* Might have had built-in attributes applied -- propagate them. */
8123 	    CvFLAGS(cv) |= (CvFLAGS(compcv) & CVf_BUILTIN_ATTRS);
8124 	}
8125 	/* ... before we throw it away */
8126 	SvREFCNT_dec(compcv);
8127 	PL_compcv = compcv = cv;
8128     }
8129     else {
8130 	cv = compcv;
8131 	*spot = cv;
8132     }
8133    setname:
8134     CvLEXICAL_on(cv);
8135     if (!CvNAME_HEK(cv)) {
8136 	if (hek) (void)share_hek_hek(hek);
8137 	else {
8138             dVAR;
8139 	    U32 hash;
8140 	    PERL_HASH(hash, PadnamePV(name)+1, PadnameLEN(name)-1);
8141 	    hek = share_hek(PadnamePV(name)+1,
8142 		      (PadnameLEN(name)-1) * (PadnameUTF8(name) ? -1 : 1),
8143 		      hash);
8144 	}
8145 	CvNAME_HEK_set(cv, hek);
8146     }
8147     if (const_sv) goto clone;
8148 
8149     CvFILE_set_from_cop(cv, PL_curcop);
8150     CvSTASH_set(cv, PL_curstash);
8151 
8152     if (ps) {
8153 	sv_setpvn(MUTABLE_SV(cv), ps, ps_len);
8154         if ( ps_utf8 ) SvUTF8_on(MUTABLE_SV(cv));
8155     }
8156 
8157     if (!block)
8158 	goto attrs;
8159 
8160     /* If we assign an optree to a PVCV, then we've defined a subroutine that
8161        the debugger could be able to set a breakpoint in, so signal to
8162        pp_entereval that it should not throw away any saved lines at scope
8163        exit.  */
8164 
8165     PL_breakable_sub_gen++;
8166     CvROOT(cv) = block;
8167     CvROOT(cv)->op_private |= OPpREFCOUNTED;
8168     OpREFCNT_set(CvROOT(cv), 1);
8169     /* The cv no longer needs to hold a refcount on the slab, as CvROOT
8170        itself has a refcount. */
8171     CvSLABBED_off(cv);
8172     OpslabREFCNT_dec_padok((OPSLAB *)CvSTART(cv));
8173 #ifdef PERL_DEBUG_READONLY_OPS
8174     slab = (OPSLAB *)CvSTART(cv);
8175 #endif
8176     CvSTART(cv) = start;
8177     CALL_PEEP(start);
8178     finalize_optree(CvROOT(cv));
8179     S_prune_chain_head(&CvSTART(cv));
8180 
8181     /* now that optimizer has done its work, adjust pad values */
8182 
8183     pad_tidy(CvCLONE(cv) ? padtidy_SUBCLONE : padtidy_SUB);
8184 
8185   attrs:
8186     if (attrs) {
8187 	/* Need to do a C<use attributes $stash_of_cv,\&cv,@attrs>. */
8188 	apply_attrs(PL_curstash, MUTABLE_SV(cv), attrs);
8189     }
8190 
8191     if (block) {
8192 	if (PERLDB_SUBLINE && PL_curstash != PL_debstash) {
8193 	    SV * const tmpstr = sv_newmortal();
8194 	    GV * const db_postponed = gv_fetchpvs("DB::postponed",
8195 						  GV_ADDMULTI, SVt_PVHV);
8196 	    HV *hv;
8197 	    SV * const sv = Perl_newSVpvf(aTHX_ "%s:%ld-%ld",
8198 					  CopFILE(PL_curcop),
8199 					  (long)PL_subline,
8200 					  (long)CopLINE(PL_curcop));
8201 	    if (HvNAME_HEK(PL_curstash)) {
8202 		sv_sethek(tmpstr, HvNAME_HEK(PL_curstash));
8203 		sv_catpvs(tmpstr, "::");
8204 	    }
8205 	    else sv_setpvs(tmpstr, "__ANON__::");
8206 	    sv_catpvn_flags(tmpstr, PadnamePV(name)+1, PadnameLEN(name)-1,
8207 			    PadnameUTF8(name) ? SV_CATUTF8 : SV_CATBYTES);
8208 	    (void)hv_store(GvHV(PL_DBsub), SvPVX_const(tmpstr),
8209 		    SvUTF8(tmpstr) ? -(I32)SvCUR(tmpstr) : (I32)SvCUR(tmpstr), sv, 0);
8210 	    hv = GvHVn(db_postponed);
8211 	    if (HvTOTALKEYS(hv) > 0 && hv_exists(hv, SvPVX_const(tmpstr), SvUTF8(tmpstr) ? -(I32)SvCUR(tmpstr) : (I32)SvCUR(tmpstr))) {
8212 		CV * const pcv = GvCV(db_postponed);
8213 		if (pcv) {
8214 		    dSP;
8215 		    PUSHMARK(SP);
8216 		    XPUSHs(tmpstr);
8217 		    PUTBACK;
8218 		    call_sv(MUTABLE_SV(pcv), G_DISCARD);
8219 		}
8220 	    }
8221 	}
8222     }
8223 
8224   clone:
8225     if (clonee) {
8226 	assert(CvDEPTH(outcv));
8227 	spot = (CV **)
8228 	    &PadARRAY(PadlistARRAY(CvPADLIST(outcv))[CvDEPTH(outcv)])[pax];
8229 	if (reusable) cv_clone_into(clonee, *spot);
8230 	else *spot = cv_clone(clonee);
8231 	SvREFCNT_dec_NN(clonee);
8232 	cv = *spot;
8233     }
8234     if (CvDEPTH(outcv) && !reusable && PadnameIsSTATE(name)) {
8235 	PADOFFSET depth = CvDEPTH(outcv);
8236 	while (--depth) {
8237 	    SV *oldcv;
8238 	    svspot = &PadARRAY(PadlistARRAY(CvPADLIST(outcv))[depth])[pax];
8239 	    oldcv = *svspot;
8240 	    *svspot = SvREFCNT_inc_simple_NN(cv);
8241 	    SvREFCNT_dec(oldcv);
8242 	}
8243     }
8244 
8245   done:
8246     if (PL_parser)
8247 	PL_parser->copline = NOLINE;
8248     LEAVE_SCOPE(floor);
8249 #ifdef PERL_DEBUG_READONLY_OPS
8250     if (slab)
8251 	Slab_to_ro(slab);
8252 #endif
8253     op_free(o);
8254     return cv;
8255 }
8256 
8257 /* _x = extended */
8258 CV *
8259 Perl_newATTRSUB_x(pTHX_ I32 floor, OP *o, OP *proto, OP *attrs,
8260 			    OP *block, bool o_is_gv)
8261 {
8262     GV *gv;
8263     const char *ps;
8264     STRLEN ps_len = 0; /* init it to avoid false uninit warning from icc */
8265     U32 ps_utf8 = 0;
8266     CV *cv = NULL;
8267     SV *const_sv;
8268     const bool ec = PL_parser && PL_parser->error_count;
8269     /* If the subroutine has no body, no attributes, and no builtin attributes
8270        then it's just a sub declaration, and we may be able to get away with
8271        storing with a placeholder scalar in the symbol table, rather than a
8272        full CV.  If anything is present then it will take a full CV to
8273        store it.  */
8274     const I32 gv_fetch_flags
8275 	= ec ? GV_NOADD_NOINIT :
8276         (block || attrs || (CvFLAGS(PL_compcv) & CVf_BUILTIN_ATTRS))
8277 	? GV_ADDMULTI : GV_ADDMULTI | GV_NOINIT;
8278     STRLEN namlen = 0;
8279     const char * const name =
8280 	 o ? SvPV_const(o_is_gv ? (SV *)o : cSVOPo->op_sv, namlen) : NULL;
8281     bool has_name;
8282     bool name_is_utf8 = o && !o_is_gv && SvUTF8(cSVOPo->op_sv);
8283     bool evanescent = FALSE;
8284     OP *start = NULL;
8285 #ifdef PERL_DEBUG_READONLY_OPS
8286     OPSLAB *slab = NULL;
8287 #endif
8288 
8289     if (o_is_gv) {
8290 	gv = (GV*)o;
8291 	o = NULL;
8292 	has_name = TRUE;
8293     } else if (name) {
8294 	/* Try to optimise and avoid creating a GV.  Instead, the CV’s name
8295 	   hek and CvSTASH pointer together can imply the GV.  If the name
8296 	   contains a package name, then GvSTASH(CvGV(cv)) may differ from
8297 	   CvSTASH, so forego the optimisation if we find any.
8298 	   Also, we may be called from load_module at run time, so
8299 	   PL_curstash (which sets CvSTASH) may not point to the stash the
8300 	   sub is stored in.  */
8301 	const I32 flags =
8302 	   ec ? GV_NOADD_NOINIT
8303 	      :   PL_curstash != CopSTASH(PL_curcop)
8304 	       || memchr(name, ':', namlen) || memchr(name, '\'', namlen)
8305 		    ? gv_fetch_flags
8306 		    : GV_ADDMULTI | GV_NOINIT | GV_NOTQUAL;
8307 	gv = gv_fetchsv(cSVOPo->op_sv, flags, SVt_PVCV);
8308 	has_name = TRUE;
8309     } else if (PERLDB_NAMEANON && CopLINE(PL_curcop)) {
8310 	SV * const sv = sv_newmortal();
8311 	Perl_sv_setpvf(aTHX_ sv, "%s[%s:%"IVdf"]",
8312 		       PL_curstash ? "__ANON__" : "__ANON__::__ANON__",
8313 		       CopFILE(PL_curcop), (IV)CopLINE(PL_curcop));
8314 	gv = gv_fetchsv(sv, gv_fetch_flags, SVt_PVCV);
8315 	has_name = TRUE;
8316     } else if (PL_curstash) {
8317 	gv = gv_fetchpvs("__ANON__", gv_fetch_flags, SVt_PVCV);
8318 	has_name = FALSE;
8319     } else {
8320 	gv = gv_fetchpvs("__ANON__::__ANON__", gv_fetch_flags, SVt_PVCV);
8321 	has_name = FALSE;
8322     }
8323     if (!ec) {
8324         if (isGV(gv)) {
8325             move_proto_attr(&proto, &attrs, gv);
8326         } else {
8327             assert(cSVOPo);
8328             move_proto_attr(&proto, &attrs, (GV *)cSVOPo->op_sv);
8329         }
8330     }
8331 
8332     if (proto) {
8333 	assert(proto->op_type == OP_CONST);
8334 	ps = SvPV_const(((SVOP*)proto)->op_sv, ps_len);
8335         ps_utf8 = SvUTF8(((SVOP*)proto)->op_sv);
8336     }
8337     else
8338 	ps = NULL;
8339 
8340     if (o)
8341         SAVEFREEOP(o);
8342     if (proto)
8343         SAVEFREEOP(proto);
8344     if (attrs)
8345         SAVEFREEOP(attrs);
8346 
8347     if (ec) {
8348 	op_free(block);
8349 	if (name) SvREFCNT_dec(PL_compcv);
8350 	else cv = PL_compcv;
8351 	PL_compcv = 0;
8352 	if (name && block) {
8353 	    const char *s = strrchr(name, ':');
8354 	    s = s ? s+1 : name;
8355 	    if (strEQ(s, "BEGIN")) {
8356 		if (PL_in_eval & EVAL_KEEPERR)
8357 		    Perl_croak_nocontext("BEGIN not safe after errors--compilation aborted");
8358 		else {
8359                     SV * const errsv = ERRSV;
8360 		    /* force display of errors found but not reported */
8361 		    sv_catpvs(errsv, "BEGIN not safe after errors--compilation aborted");
8362 		    Perl_croak_nocontext("%"SVf, SVfARG(errsv));
8363 		}
8364 	    }
8365 	}
8366 	goto done;
8367     }
8368 
8369     if (!block && SvTYPE(gv) != SVt_PVGV) {
8370       /* If we are not defining a new sub and the existing one is not a
8371          full GV + CV... */
8372       if (attrs || (CvFLAGS(PL_compcv) & CVf_BUILTIN_ATTRS)) {
8373 	/* We are applying attributes to an existing sub, so we need it
8374 	   upgraded if it is a constant.  */
8375 	if (SvROK(gv) && SvTYPE(SvRV(gv)) != SVt_PVCV)
8376 	    gv_init_pvn(gv, PL_curstash, name, namlen,
8377 			SVf_UTF8 * name_is_utf8);
8378       }
8379       else {			/* Maybe prototype now, and had at maximum
8380 				   a prototype or const/sub ref before.  */
8381 	if (SvTYPE(gv) > SVt_NULL) {
8382 	    cv_ckproto_len_flags((const CV *)gv,
8383 				 o ? (const GV *)cSVOPo->op_sv : NULL, ps,
8384 				 ps_len, ps_utf8);
8385 	}
8386 	if (!SvROK(gv)) {
8387 	  if (ps) {
8388 	    sv_setpvn(MUTABLE_SV(gv), ps, ps_len);
8389             if ( ps_utf8 ) SvUTF8_on(MUTABLE_SV(gv));
8390           }
8391 	  else
8392 	    sv_setiv(MUTABLE_SV(gv), -1);
8393 	}
8394 
8395 	SvREFCNT_dec(PL_compcv);
8396 	cv = PL_compcv = NULL;
8397 	goto done;
8398       }
8399     }
8400 
8401     cv = (!name || (isGV(gv) && GvCVGEN(gv)))
8402 	? NULL
8403 	: isGV(gv)
8404 	    ? GvCV(gv)
8405 	    : SvROK(gv) && SvTYPE(SvRV(gv)) == SVt_PVCV
8406 		? (CV *)SvRV(gv)
8407 		: NULL;
8408 
8409     if (block) {
8410 	assert(PL_parser);
8411 	/* This makes sub {}; work as expected.  */
8412 	if (block->op_type == OP_STUB) {
8413 	    const line_t l = PL_parser->copline;
8414 	    op_free(block);
8415 	    block = newSTATEOP(0, NULL, 0);
8416 	    PL_parser->copline = l;
8417 	}
8418 	block = CvLVALUE(PL_compcv)
8419 	     || (cv && CvLVALUE(cv) && !CvROOT(cv) && !CvXSUB(cv)
8420 		    && (!isGV(gv) || !GvASSUMECV(gv)))
8421 		   ? newUNOP(OP_LEAVESUBLV, 0,
8422 			     op_lvalue(scalarseq(block), OP_LEAVESUBLV))
8423 		   : newUNOP(OP_LEAVESUB, 0, scalarseq(block));
8424 	start = LINKLIST(block);
8425 	block->op_next = 0;
8426         if (ps && !*ps && !attrs && !CvLVALUE(PL_compcv))
8427             const_sv =
8428                 S_op_const_sv(aTHX_ start, PL_compcv,
8429                                         cBOOL(CvCLONE(PL_compcv)));
8430         else
8431             const_sv = NULL;
8432     }
8433     else
8434         const_sv = NULL;
8435 
8436     if (SvPOK(gv) || (SvROK(gv) && SvTYPE(SvRV(gv)) != SVt_PVCV)) {
8437 	cv_ckproto_len_flags((const CV *)gv,
8438 			     o ? (const GV *)cSVOPo->op_sv : NULL, ps,
8439 			     ps_len, ps_utf8|CV_CKPROTO_CURSTASH);
8440 	if (SvROK(gv)) {
8441 	    /* All the other code for sub redefinition warnings expects the
8442 	       clobbered sub to be a CV.  Instead of making all those code
8443 	       paths more complex, just inline the RV version here.  */
8444 	    const line_t oldline = CopLINE(PL_curcop);
8445 	    assert(IN_PERL_COMPILETIME);
8446 	    if (PL_parser && PL_parser->copline != NOLINE)
8447 		/* This ensures that warnings are reported at the first
8448 		   line of a redefinition, not the last.  */
8449 		CopLINE_set(PL_curcop, PL_parser->copline);
8450 	    /* protect against fatal warnings leaking compcv */
8451 	    SAVEFREESV(PL_compcv);
8452 
8453 	    if (ckWARN(WARN_REDEFINE)
8454 	     || (  ckWARN_d(WARN_REDEFINE)
8455 		&& (  !const_sv || SvRV(gv) == const_sv
8456 		   || sv_cmp(SvRV(gv), const_sv)  )))
8457 		Perl_warner(aTHX_ packWARN(WARN_REDEFINE),
8458 			  "Constant subroutine %"SVf" redefined",
8459 			  SVfARG(cSVOPo->op_sv));
8460 
8461 	    SvREFCNT_inc_simple_void_NN(PL_compcv);
8462 	    CopLINE_set(PL_curcop, oldline);
8463 	    SvREFCNT_dec(SvRV(gv));
8464 	}
8465     }
8466 
8467     if (cv) {
8468         const bool exists = CvROOT(cv) || CvXSUB(cv);
8469 
8470         /* if the subroutine doesn't exist and wasn't pre-declared
8471          * with a prototype, assume it will be AUTOLOADed,
8472          * skipping the prototype check
8473          */
8474         if (exists || SvPOK(cv))
8475             cv_ckproto_len_flags(cv, gv, ps, ps_len, ps_utf8);
8476 	/* already defined (or promised)? */
8477 	if (exists || (isGV(gv) && GvASSUMECV(gv))) {
8478 	    if (S_already_defined(aTHX_ cv, block, o, NULL, &const_sv))
8479 		cv = NULL;
8480 	    else {
8481 		if (attrs) goto attrs;
8482 		/* just a "sub foo;" when &foo is already defined */
8483 		SAVEFREESV(PL_compcv);
8484 		goto done;
8485 	    }
8486 	}
8487     }
8488     if (const_sv) {
8489 	SvREFCNT_inc_simple_void_NN(const_sv);
8490 	SvFLAGS(const_sv) |= SVs_PADTMP;
8491 	if (cv) {
8492 	    assert(!CvROOT(cv) && !CvCONST(cv));
8493 	    cv_forget_slab(cv);
8494 	    sv_setpvs(MUTABLE_SV(cv), "");  /* prototype is "" */
8495 	    CvXSUBANY(cv).any_ptr = const_sv;
8496 	    CvXSUB(cv) = const_sv_xsub;
8497 	    CvCONST_on(cv);
8498 	    CvISXSUB_on(cv);
8499 	    PoisonPADLIST(cv);
8500 	    CvFLAGS(cv) |= CvMETHOD(PL_compcv);
8501 	}
8502 	else {
8503 	    if (isGV(gv) || CvMETHOD(PL_compcv)) {
8504 		if (name && isGV(gv))
8505 		    GvCV_set(gv, NULL);
8506 		cv = newCONSTSUB_flags(
8507 		    NULL, name, namlen, name_is_utf8 ? SVf_UTF8 : 0,
8508 		    const_sv
8509 		);
8510 		CvFLAGS(cv) |= CvMETHOD(PL_compcv);
8511 	    }
8512 	    else {
8513 		if (!SvROK(gv)) {
8514 		    SV_CHECK_THINKFIRST_COW_DROP((SV *)gv);
8515 		    prepare_SV_for_RV((SV *)gv);
8516 		    SvOK_off((SV *)gv);
8517 		    SvROK_on(gv);
8518 		}
8519 		SvRV_set(gv, const_sv);
8520 	    }
8521 	}
8522 	op_free(block);
8523 	SvREFCNT_dec(PL_compcv);
8524 	PL_compcv = NULL;
8525 	goto done;
8526     }
8527     if (cv) {				/* must reuse cv if autoloaded */
8528 	/* transfer PL_compcv to cv */
8529 	if (block
8530 	) {
8531 	    cv_flags_t existing_builtin_attrs = CvFLAGS(cv) & CVf_BUILTIN_ATTRS;
8532 	    PADLIST *const temp_av = CvPADLIST(cv);
8533 	    CV *const temp_cv = CvOUTSIDE(cv);
8534 	    const cv_flags_t other_flags =
8535 		CvFLAGS(cv) & (CVf_SLABBED|CVf_WEAKOUTSIDE);
8536 	    OP * const cvstart = CvSTART(cv);
8537 
8538 	    if (isGV(gv)) {
8539 		CvGV_set(cv,gv);
8540 		assert(!CvCVGV_RC(cv));
8541 		assert(CvGV(cv) == gv);
8542 	    }
8543 	    else {
8544 		dVAR;
8545 		U32 hash;
8546 		PERL_HASH(hash, name, namlen);
8547 		CvNAME_HEK_set(cv,
8548 			       share_hek(name,
8549 					 name_is_utf8
8550 					    ? -(SSize_t)namlen
8551 					    :  (SSize_t)namlen,
8552 					 hash));
8553 	    }
8554 
8555 	    SvPOK_off(cv);
8556 	    CvFLAGS(cv) = CvFLAGS(PL_compcv) | existing_builtin_attrs
8557 					     | CvNAMED(cv);
8558 	    CvOUTSIDE(cv) = CvOUTSIDE(PL_compcv);
8559 	    CvOUTSIDE_SEQ(cv) = CvOUTSIDE_SEQ(PL_compcv);
8560 	    CvPADLIST_set(cv,CvPADLIST(PL_compcv));
8561 	    CvOUTSIDE(PL_compcv) = temp_cv;
8562 	    CvPADLIST_set(PL_compcv, temp_av);
8563 	    CvSTART(cv) = CvSTART(PL_compcv);
8564 	    CvSTART(PL_compcv) = cvstart;
8565 	    CvFLAGS(PL_compcv) &= ~(CVf_SLABBED|CVf_WEAKOUTSIDE);
8566 	    CvFLAGS(PL_compcv) |= other_flags;
8567 
8568 	    if (CvFILE(cv) && CvDYNFILE(cv)) {
8569 		Safefree(CvFILE(cv));
8570     }
8571 	    CvFILE_set_from_cop(cv, PL_curcop);
8572 	    CvSTASH_set(cv, PL_curstash);
8573 
8574 	    /* inner references to PL_compcv must be fixed up ... */
8575 	    pad_fixup_inner_anons(CvPADLIST(cv), PL_compcv, cv);
8576 	    if (PERLDB_INTER)/* Advice debugger on the new sub. */
8577 	      ++PL_sub_generation;
8578 	}
8579 	else {
8580 	    /* Might have had built-in attributes applied -- propagate them. */
8581 	    CvFLAGS(cv) |= (CvFLAGS(PL_compcv) & CVf_BUILTIN_ATTRS);
8582 	}
8583 	/* ... before we throw it away */
8584 	SvREFCNT_dec(PL_compcv);
8585 	PL_compcv = cv;
8586     }
8587     else {
8588 	cv = PL_compcv;
8589 	if (name && isGV(gv)) {
8590 	    GvCV_set(gv, cv);
8591 	    GvCVGEN(gv) = 0;
8592 	    if (HvENAME_HEK(GvSTASH(gv)))
8593 		/* sub Foo::bar { (shift)+1 } */
8594 		gv_method_changed(gv);
8595 	}
8596 	else if (name) {
8597 	    if (!SvROK(gv)) {
8598 		SV_CHECK_THINKFIRST_COW_DROP((SV *)gv);
8599 		prepare_SV_for_RV((SV *)gv);
8600 		SvOK_off((SV *)gv);
8601 		SvROK_on(gv);
8602 	    }
8603 	    SvRV_set(gv, (SV *)cv);
8604 	}
8605     }
8606     if (!CvHASGV(cv)) {
8607 	if (isGV(gv)) CvGV_set(cv, gv);
8608 	else {
8609             dVAR;
8610 	    U32 hash;
8611 	    PERL_HASH(hash, name, namlen);
8612 	    CvNAME_HEK_set(cv, share_hek(name,
8613 					 name_is_utf8
8614 					    ? -(SSize_t)namlen
8615 					    :  (SSize_t)namlen,
8616 					 hash));
8617 	}
8618 	CvFILE_set_from_cop(cv, PL_curcop);
8619 	CvSTASH_set(cv, PL_curstash);
8620     }
8621 
8622     if (ps) {
8623 	sv_setpvn(MUTABLE_SV(cv), ps, ps_len);
8624         if ( ps_utf8 ) SvUTF8_on(MUTABLE_SV(cv));
8625     }
8626 
8627     if (!block)
8628 	goto attrs;
8629 
8630     /* If we assign an optree to a PVCV, then we've defined a subroutine that
8631        the debugger could be able to set a breakpoint in, so signal to
8632        pp_entereval that it should not throw away any saved lines at scope
8633        exit.  */
8634 
8635     PL_breakable_sub_gen++;
8636     CvROOT(cv) = block;
8637     CvROOT(cv)->op_private |= OPpREFCOUNTED;
8638     OpREFCNT_set(CvROOT(cv), 1);
8639     /* The cv no longer needs to hold a refcount on the slab, as CvROOT
8640        itself has a refcount. */
8641     CvSLABBED_off(cv);
8642     OpslabREFCNT_dec_padok((OPSLAB *)CvSTART(cv));
8643 #ifdef PERL_DEBUG_READONLY_OPS
8644     slab = (OPSLAB *)CvSTART(cv);
8645 #endif
8646     CvSTART(cv) = start;
8647     CALL_PEEP(start);
8648     finalize_optree(CvROOT(cv));
8649     S_prune_chain_head(&CvSTART(cv));
8650 
8651     /* now that optimizer has done its work, adjust pad values */
8652 
8653     pad_tidy(CvCLONE(cv) ? padtidy_SUBCLONE : padtidy_SUB);
8654 
8655   attrs:
8656     if (attrs) {
8657 	/* Need to do a C<use attributes $stash_of_cv,\&cv,@attrs>. */
8658 	HV *stash = name && !CvNAMED(cv) && GvSTASH(CvGV(cv))
8659 			? GvSTASH(CvGV(cv))
8660 			: PL_curstash;
8661 	if (!name) SAVEFREESV(cv);
8662 	apply_attrs(stash, MUTABLE_SV(cv), attrs);
8663 	if (!name) SvREFCNT_inc_simple_void_NN(cv);
8664     }
8665 
8666     if (block && has_name) {
8667 	if (PERLDB_SUBLINE && PL_curstash != PL_debstash) {
8668 	    SV * const tmpstr = cv_name(cv,NULL,0);
8669 	    GV * const db_postponed = gv_fetchpvs("DB::postponed",
8670 						  GV_ADDMULTI, SVt_PVHV);
8671 	    HV *hv;
8672 	    SV * const sv = Perl_newSVpvf(aTHX_ "%s:%ld-%ld",
8673 					  CopFILE(PL_curcop),
8674 					  (long)PL_subline,
8675 					  (long)CopLINE(PL_curcop));
8676 	    (void)hv_store(GvHV(PL_DBsub), SvPVX_const(tmpstr),
8677 		    SvUTF8(tmpstr) ? -(I32)SvCUR(tmpstr) : (I32)SvCUR(tmpstr), sv, 0);
8678 	    hv = GvHVn(db_postponed);
8679 	    if (HvTOTALKEYS(hv) > 0 && hv_exists(hv, SvPVX_const(tmpstr), SvUTF8(tmpstr) ? -(I32)SvCUR(tmpstr) : (I32)SvCUR(tmpstr))) {
8680 		CV * const pcv = GvCV(db_postponed);
8681 		if (pcv) {
8682 		    dSP;
8683 		    PUSHMARK(SP);
8684 		    XPUSHs(tmpstr);
8685 		    PUTBACK;
8686 		    call_sv(MUTABLE_SV(pcv), G_DISCARD);
8687 		}
8688 	    }
8689 	}
8690 
8691         if (name) {
8692             if (PL_parser && PL_parser->error_count)
8693                 clear_special_blocks(name, gv, cv);
8694             else
8695                 evanescent =
8696                     process_special_blocks(floor, name, gv, cv);
8697         }
8698     }
8699 
8700   done:
8701     if (PL_parser)
8702 	PL_parser->copline = NOLINE;
8703     LEAVE_SCOPE(floor);
8704     if (!evanescent) {
8705 #ifdef PERL_DEBUG_READONLY_OPS
8706       if (slab)
8707 	Slab_to_ro(slab);
8708 #endif
8709       if (cv && name && CvOUTSIDE(cv) && !CvEVAL(CvOUTSIDE(cv)))
8710 	pad_add_weakref(cv);
8711     }
8712     return cv;
8713 }
8714 
8715 STATIC void
8716 S_clear_special_blocks(pTHX_ const char *const fullname,
8717                        GV *const gv, CV *const cv) {
8718     const char *colon;
8719     const char *name;
8720 
8721     PERL_ARGS_ASSERT_CLEAR_SPECIAL_BLOCKS;
8722 
8723     colon = strrchr(fullname,':');
8724     name = colon ? colon + 1 : fullname;
8725 
8726     if ((*name == 'B' && strEQ(name, "BEGIN"))
8727         || (*name == 'E' && strEQ(name, "END"))
8728         || (*name == 'U' && strEQ(name, "UNITCHECK"))
8729         || (*name == 'C' && strEQ(name, "CHECK"))
8730         || (*name == 'I' && strEQ(name, "INIT"))) {
8731         if (!isGV(gv)) {
8732             (void)CvGV(cv);
8733             assert(isGV(gv));
8734         }
8735         GvCV_set(gv, NULL);
8736         SvREFCNT_dec_NN(MUTABLE_SV(cv));
8737     }
8738 }
8739 
8740 /* Returns true if the sub has been freed.  */
8741 STATIC bool
8742 S_process_special_blocks(pTHX_ I32 floor, const char *const fullname,
8743 			 GV *const gv,
8744 			 CV *const cv)
8745 {
8746     const char *const colon = strrchr(fullname,':');
8747     const char *const name = colon ? colon + 1 : fullname;
8748 
8749     PERL_ARGS_ASSERT_PROCESS_SPECIAL_BLOCKS;
8750 
8751     if (*name == 'B') {
8752 	if (strEQ(name, "BEGIN")) {
8753 	    const I32 oldscope = PL_scopestack_ix;
8754             dSP;
8755             (void)CvGV(cv);
8756 	    if (floor) LEAVE_SCOPE(floor);
8757 	    ENTER;
8758             PUSHSTACKi(PERLSI_REQUIRE);
8759 	    SAVECOPFILE(&PL_compiling);
8760 	    SAVECOPLINE(&PL_compiling);
8761 	    SAVEVPTR(PL_curcop);
8762 
8763 	    DEBUG_x( dump_sub(gv) );
8764 	    Perl_av_create_and_push(aTHX_ &PL_beginav, MUTABLE_SV(cv));
8765 	    GvCV_set(gv,0);		/* cv has been hijacked */
8766 	    call_list(oldscope, PL_beginav);
8767 
8768             POPSTACK;
8769 	    LEAVE;
8770 	    return !PL_savebegin;
8771 	}
8772 	else
8773 	    return FALSE;
8774     } else {
8775 	if (*name == 'E') {
8776 	    if strEQ(name, "END") {
8777 		DEBUG_x( dump_sub(gv) );
8778 		Perl_av_create_and_unshift_one(aTHX_ &PL_endav, MUTABLE_SV(cv));
8779 	    } else
8780 		return FALSE;
8781 	} else if (*name == 'U') {
8782 	    if (strEQ(name, "UNITCHECK")) {
8783 		/* It's never too late to run a unitcheck block */
8784 		Perl_av_create_and_unshift_one(aTHX_ &PL_unitcheckav, MUTABLE_SV(cv));
8785 	    }
8786 	    else
8787 		return FALSE;
8788 	} else if (*name == 'C') {
8789 	    if (strEQ(name, "CHECK")) {
8790 		if (PL_main_start)
8791 		    /* diag_listed_as: Too late to run %s block */
8792 		    Perl_ck_warner(aTHX_ packWARN(WARN_VOID),
8793 				   "Too late to run CHECK block");
8794 		Perl_av_create_and_unshift_one(aTHX_ &PL_checkav, MUTABLE_SV(cv));
8795 	    }
8796 	    else
8797 		return FALSE;
8798 	} else if (*name == 'I') {
8799 	    if (strEQ(name, "INIT")) {
8800 		if (PL_main_start)
8801 		    /* diag_listed_as: Too late to run %s block */
8802 		    Perl_ck_warner(aTHX_ packWARN(WARN_VOID),
8803 				   "Too late to run INIT block");
8804 		Perl_av_create_and_push(aTHX_ &PL_initav, MUTABLE_SV(cv));
8805 	    }
8806 	    else
8807 		return FALSE;
8808 	} else
8809 	    return FALSE;
8810 	DEBUG_x( dump_sub(gv) );
8811 	(void)CvGV(cv);
8812 	GvCV_set(gv,0);		/* cv has been hijacked */
8813 	return FALSE;
8814     }
8815 }
8816 
8817 /*
8818 =for apidoc newCONSTSUB
8819 
8820 See L</newCONSTSUB_flags>.
8821 
8822 =cut
8823 */
8824 
8825 CV *
8826 Perl_newCONSTSUB(pTHX_ HV *stash, const char *name, SV *sv)
8827 {
8828     return newCONSTSUB_flags(stash, name, name ? strlen(name) : 0, 0, sv);
8829 }
8830 
8831 /*
8832 =for apidoc newCONSTSUB_flags
8833 
8834 Creates a constant sub equivalent to Perl S<C<sub FOO () { 123 }>> which is
8835 eligible for inlining at compile-time.
8836 
8837 Currently, the only useful value for C<flags> is C<SVf_UTF8>.
8838 
8839 The newly created subroutine takes ownership of a reference to the passed in
8840 SV.
8841 
8842 Passing C<NULL> for SV creates a constant sub equivalent to S<C<sub BAR () {}>>,
8843 which won't be called if used as a destructor, but will suppress the overhead
8844 of a call to C<AUTOLOAD>.  (This form, however, isn't eligible for inlining at
8845 compile time.)
8846 
8847 =cut
8848 */
8849 
8850 CV *
8851 Perl_newCONSTSUB_flags(pTHX_ HV *stash, const char *name, STRLEN len,
8852                              U32 flags, SV *sv)
8853 {
8854     CV* cv;
8855     const char *const file = CopFILE(PL_curcop);
8856 
8857     ENTER;
8858 
8859     if (IN_PERL_RUNTIME) {
8860 	/* at runtime, it's not safe to manipulate PL_curcop: it may be
8861 	 * an op shared between threads. Use a non-shared COP for our
8862 	 * dirty work */
8863 	 SAVEVPTR(PL_curcop);
8864 	 SAVECOMPILEWARNINGS();
8865 	 PL_compiling.cop_warnings = DUP_WARNINGS(PL_curcop->cop_warnings);
8866 	 PL_curcop = &PL_compiling;
8867     }
8868     SAVECOPLINE(PL_curcop);
8869     CopLINE_set(PL_curcop, PL_parser ? PL_parser->copline : NOLINE);
8870 
8871     SAVEHINTS();
8872     PL_hints &= ~HINT_BLOCK_SCOPE;
8873 
8874     if (stash) {
8875 	SAVEGENERICSV(PL_curstash);
8876 	PL_curstash = (HV *)SvREFCNT_inc_simple_NN(stash);
8877     }
8878 
8879     /* Protect sv against leakage caused by fatal warnings. */
8880     if (sv) SAVEFREESV(sv);
8881 
8882     /* file becomes the CvFILE. For an XS, it's usually static storage,
8883        and so doesn't get free()d.  (It's expected to be from the C pre-
8884        processor __FILE__ directive). But we need a dynamically allocated one,
8885        and we need it to get freed.  */
8886     cv = newXS_len_flags(name, len,
8887 			 sv && SvTYPE(sv) == SVt_PVAV
8888 			     ? const_av_xsub
8889 			     : const_sv_xsub,
8890 			 file ? file : "", "",
8891 			 &sv, XS_DYNAMIC_FILENAME | flags);
8892     CvXSUBANY(cv).any_ptr = SvREFCNT_inc_simple(sv);
8893     CvCONST_on(cv);
8894 
8895     LEAVE;
8896 
8897     return cv;
8898 }
8899 
8900 /*
8901 =for apidoc U||newXS
8902 
8903 Used by C<xsubpp> to hook up XSUBs as Perl subs.  C<filename> needs to be
8904 static storage, as it is used directly as CvFILE(), without a copy being made.
8905 
8906 =cut
8907 */
8908 
8909 CV *
8910 Perl_newXS(pTHX_ const char *name, XSUBADDR_t subaddr, const char *filename)
8911 {
8912     PERL_ARGS_ASSERT_NEWXS;
8913     return newXS_len_flags(
8914 	name, name ? strlen(name) : 0, subaddr, filename, NULL, NULL, 0
8915     );
8916 }
8917 
8918 CV *
8919 Perl_newXS_flags(pTHX_ const char *name, XSUBADDR_t subaddr,
8920 		 const char *const filename, const char *const proto,
8921 		 U32 flags)
8922 {
8923     PERL_ARGS_ASSERT_NEWXS_FLAGS;
8924     return newXS_len_flags(
8925        name, name ? strlen(name) : 0, subaddr, filename, proto, NULL, flags
8926     );
8927 }
8928 
8929 CV *
8930 Perl_newXS_deffile(pTHX_ const char *name, XSUBADDR_t subaddr)
8931 {
8932     PERL_ARGS_ASSERT_NEWXS_DEFFILE;
8933     return newXS_len_flags(
8934         name, strlen(name), subaddr, NULL, NULL, NULL, 0
8935     );
8936 }
8937 
8938 CV *
8939 Perl_newXS_len_flags(pTHX_ const char *name, STRLEN len,
8940 			   XSUBADDR_t subaddr, const char *const filename,
8941 			   const char *const proto, SV **const_svp,
8942 			   U32 flags)
8943 {
8944     CV *cv;
8945     bool interleave = FALSE;
8946 
8947     PERL_ARGS_ASSERT_NEWXS_LEN_FLAGS;
8948 
8949     {
8950         GV * const gv = gv_fetchpvn(
8951 			    name ? name : PL_curstash ? "__ANON__" : "__ANON__::__ANON__",
8952 			    name ? len : PL_curstash ? sizeof("__ANON__") - 1:
8953 				sizeof("__ANON__::__ANON__") - 1,
8954 			    GV_ADDMULTI | flags, SVt_PVCV);
8955 
8956         if ((cv = (name ? GvCV(gv) : NULL))) {
8957             if (GvCVGEN(gv)) {
8958                 /* just a cached method */
8959                 SvREFCNT_dec(cv);
8960                 cv = NULL;
8961             }
8962             else if (CvROOT(cv) || CvXSUB(cv) || GvASSUMECV(gv)) {
8963                 /* already defined (or promised) */
8964                 /* Redundant check that allows us to avoid creating an SV
8965                    most of the time: */
8966                 if (CvCONST(cv) || ckWARN(WARN_REDEFINE)) {
8967                     report_redefined_cv(newSVpvn_flags(
8968                                          name,len,(flags&SVf_UTF8)|SVs_TEMP
8969                                         ),
8970                                         cv, const_svp);
8971                 }
8972                 interleave = TRUE;
8973                 ENTER;
8974                 SAVEFREESV(cv);
8975                 cv = NULL;
8976             }
8977         }
8978 
8979         if (cv)				/* must reuse cv if autoloaded */
8980             cv_undef(cv);
8981         else {
8982             cv = MUTABLE_CV(newSV_type(SVt_PVCV));
8983             if (name) {
8984                 GvCV_set(gv,cv);
8985                 GvCVGEN(gv) = 0;
8986                 if (HvENAME_HEK(GvSTASH(gv)))
8987                     gv_method_changed(gv); /* newXS */
8988             }
8989         }
8990 
8991         CvGV_set(cv, gv);
8992         if(filename) {
8993             /* XSUBs can't be perl lang/perl5db.pl debugged
8994             if (PERLDB_LINE_OR_SAVESRC)
8995                 (void)gv_fetchfile(filename); */
8996             assert(!CvDYNFILE(cv)); /* cv_undef should have turned it off */
8997             if (flags & XS_DYNAMIC_FILENAME) {
8998                 CvDYNFILE_on(cv);
8999                 CvFILE(cv) = savepv(filename);
9000             } else {
9001             /* NOTE: not copied, as it is expected to be an external constant string */
9002                 CvFILE(cv) = (char *)filename;
9003             }
9004         } else {
9005             assert((flags & XS_DYNAMIC_FILENAME) == 0 && PL_xsubfilename);
9006             CvFILE(cv) = (char*)PL_xsubfilename;
9007         }
9008         CvISXSUB_on(cv);
9009         CvXSUB(cv) = subaddr;
9010 #ifndef PERL_IMPLICIT_CONTEXT
9011         CvHSCXT(cv) = &PL_stack_sp;
9012 #else
9013         PoisonPADLIST(cv);
9014 #endif
9015 
9016         if (name)
9017             process_special_blocks(0, name, gv, cv);
9018         else
9019             CvANON_on(cv);
9020     } /* <- not a conditional branch */
9021 
9022 
9023     sv_setpv(MUTABLE_SV(cv), proto);
9024     if (interleave) LEAVE;
9025     return cv;
9026 }
9027 
9028 CV *
9029 Perl_newSTUB(pTHX_ GV *gv, bool fake)
9030 {
9031     CV *cv = MUTABLE_CV(newSV_type(SVt_PVCV));
9032     GV *cvgv;
9033     PERL_ARGS_ASSERT_NEWSTUB;
9034     assert(!GvCVu(gv));
9035     GvCV_set(gv, cv);
9036     GvCVGEN(gv) = 0;
9037     if (!fake && HvENAME_HEK(GvSTASH(gv)))
9038 	gv_method_changed(gv);
9039     if (SvFAKE(gv)) {
9040 	cvgv = gv_fetchsv((SV *)gv, GV_ADDMULTI, SVt_PVCV);
9041 	SvFAKE_off(cvgv);
9042     }
9043     else cvgv = gv;
9044     CvGV_set(cv, cvgv);
9045     CvFILE_set_from_cop(cv, PL_curcop);
9046     CvSTASH_set(cv, PL_curstash);
9047     GvMULTI_on(gv);
9048     return cv;
9049 }
9050 
9051 void
9052 Perl_newFORM(pTHX_ I32 floor, OP *o, OP *block)
9053 {
9054     CV *cv;
9055 
9056     GV *gv;
9057 
9058     if (PL_parser && PL_parser->error_count) {
9059 	op_free(block);
9060 	goto finish;
9061     }
9062 
9063     gv = o
9064 	? gv_fetchsv(cSVOPo->op_sv, GV_ADD, SVt_PVFM)
9065 	: gv_fetchpvs("STDOUT", GV_ADD|GV_NOTQUAL, SVt_PVFM);
9066 
9067     GvMULTI_on(gv);
9068     if ((cv = GvFORM(gv))) {
9069 	if (ckWARN(WARN_REDEFINE)) {
9070 	    const line_t oldline = CopLINE(PL_curcop);
9071 	    if (PL_parser && PL_parser->copline != NOLINE)
9072 		CopLINE_set(PL_curcop, PL_parser->copline);
9073 	    if (o) {
9074 		Perl_warner(aTHX_ packWARN(WARN_REDEFINE),
9075 			    "Format %"SVf" redefined", SVfARG(cSVOPo->op_sv));
9076 	    } else {
9077 		/* diag_listed_as: Format %s redefined */
9078 		Perl_warner(aTHX_ packWARN(WARN_REDEFINE),
9079 			    "Format STDOUT redefined");
9080 	    }
9081 	    CopLINE_set(PL_curcop, oldline);
9082 	}
9083 	SvREFCNT_dec(cv);
9084     }
9085     cv = PL_compcv;
9086     GvFORM(gv) = (CV *)SvREFCNT_inc_simple_NN(cv);
9087     CvGV_set(cv, gv);
9088     CvFILE_set_from_cop(cv, PL_curcop);
9089 
9090 
9091     pad_tidy(padtidy_FORMAT);
9092     CvROOT(cv) = newUNOP(OP_LEAVEWRITE, 0, scalarseq(block));
9093     CvROOT(cv)->op_private |= OPpREFCOUNTED;
9094     OpREFCNT_set(CvROOT(cv), 1);
9095     CvSTART(cv) = LINKLIST(CvROOT(cv));
9096     CvROOT(cv)->op_next = 0;
9097     CALL_PEEP(CvSTART(cv));
9098     finalize_optree(CvROOT(cv));
9099     S_prune_chain_head(&CvSTART(cv));
9100     cv_forget_slab(cv);
9101 
9102   finish:
9103     op_free(o);
9104     if (PL_parser)
9105 	PL_parser->copline = NOLINE;
9106     LEAVE_SCOPE(floor);
9107     PL_compiling.cop_seq = 0;
9108 }
9109 
9110 OP *
9111 Perl_newANONLIST(pTHX_ OP *o)
9112 {
9113     return op_convert_list(OP_ANONLIST, OPf_SPECIAL, o);
9114 }
9115 
9116 OP *
9117 Perl_newANONHASH(pTHX_ OP *o)
9118 {
9119     return op_convert_list(OP_ANONHASH, OPf_SPECIAL, o);
9120 }
9121 
9122 OP *
9123 Perl_newANONSUB(pTHX_ I32 floor, OP *proto, OP *block)
9124 {
9125     return newANONATTRSUB(floor, proto, NULL, block);
9126 }
9127 
9128 OP *
9129 Perl_newANONATTRSUB(pTHX_ I32 floor, OP *proto, OP *attrs, OP *block)
9130 {
9131     SV * const cv = MUTABLE_SV(newATTRSUB(floor, 0, proto, attrs, block));
9132     OP * anoncode =
9133 	newSVOP(OP_ANONCODE, 0,
9134 		cv);
9135     if (CvANONCONST(cv))
9136 	anoncode = newUNOP(OP_ANONCONST, 0,
9137 			   op_convert_list(OP_ENTERSUB,
9138 					   OPf_STACKED|OPf_WANT_SCALAR,
9139 					   anoncode));
9140     return newUNOP(OP_REFGEN, 0, anoncode);
9141 }
9142 
9143 OP *
9144 Perl_oopsAV(pTHX_ OP *o)
9145 {
9146     dVAR;
9147 
9148     PERL_ARGS_ASSERT_OOPSAV;
9149 
9150     switch (o->op_type) {
9151     case OP_PADSV:
9152     case OP_PADHV:
9153         OpTYPE_set(o, OP_PADAV);
9154 	return ref(o, OP_RV2AV);
9155 
9156     case OP_RV2SV:
9157     case OP_RV2HV:
9158         OpTYPE_set(o, OP_RV2AV);
9159 	ref(o, OP_RV2AV);
9160 	break;
9161 
9162     default:
9163 	Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL), "oops: oopsAV");
9164 	break;
9165     }
9166     return o;
9167 }
9168 
9169 OP *
9170 Perl_oopsHV(pTHX_ OP *o)
9171 {
9172     dVAR;
9173 
9174     PERL_ARGS_ASSERT_OOPSHV;
9175 
9176     switch (o->op_type) {
9177     case OP_PADSV:
9178     case OP_PADAV:
9179         OpTYPE_set(o, OP_PADHV);
9180 	return ref(o, OP_RV2HV);
9181 
9182     case OP_RV2SV:
9183     case OP_RV2AV:
9184         OpTYPE_set(o, OP_RV2HV);
9185 	ref(o, OP_RV2HV);
9186 	break;
9187 
9188     default:
9189 	Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL), "oops: oopsHV");
9190 	break;
9191     }
9192     return o;
9193 }
9194 
9195 OP *
9196 Perl_newAVREF(pTHX_ OP *o)
9197 {
9198     dVAR;
9199 
9200     PERL_ARGS_ASSERT_NEWAVREF;
9201 
9202     if (o->op_type == OP_PADANY) {
9203         OpTYPE_set(o, OP_PADAV);
9204 	return o;
9205     }
9206     else if ((o->op_type == OP_RV2AV || o->op_type == OP_PADAV)) {
9207 	Perl_croak(aTHX_ "Can't use an array as a reference");
9208     }
9209     return newUNOP(OP_RV2AV, 0, scalar(o));
9210 }
9211 
9212 OP *
9213 Perl_newGVREF(pTHX_ I32 type, OP *o)
9214 {
9215     if (type == OP_MAPSTART || type == OP_GREPSTART || type == OP_SORT)
9216 	return newUNOP(OP_NULL, 0, o);
9217     return ref(newUNOP(OP_RV2GV, OPf_REF, o), type);
9218 }
9219 
9220 OP *
9221 Perl_newHVREF(pTHX_ OP *o)
9222 {
9223     dVAR;
9224 
9225     PERL_ARGS_ASSERT_NEWHVREF;
9226 
9227     if (o->op_type == OP_PADANY) {
9228         OpTYPE_set(o, OP_PADHV);
9229 	return o;
9230     }
9231     else if ((o->op_type == OP_RV2HV || o->op_type == OP_PADHV)) {
9232 	Perl_croak(aTHX_ "Can't use a hash as a reference");
9233     }
9234     return newUNOP(OP_RV2HV, 0, scalar(o));
9235 }
9236 
9237 OP *
9238 Perl_newCVREF(pTHX_ I32 flags, OP *o)
9239 {
9240     if (o->op_type == OP_PADANY) {
9241 	dVAR;
9242         OpTYPE_set(o, OP_PADCV);
9243     }
9244     return newUNOP(OP_RV2CV, flags, scalar(o));
9245 }
9246 
9247 OP *
9248 Perl_newSVREF(pTHX_ OP *o)
9249 {
9250     dVAR;
9251 
9252     PERL_ARGS_ASSERT_NEWSVREF;
9253 
9254     if (o->op_type == OP_PADANY) {
9255         OpTYPE_set(o, OP_PADSV);
9256         scalar(o);
9257 	return o;
9258     }
9259     return newUNOP(OP_RV2SV, 0, scalar(o));
9260 }
9261 
9262 /* Check routines. See the comments at the top of this file for details
9263  * on when these are called */
9264 
9265 OP *
9266 Perl_ck_anoncode(pTHX_ OP *o)
9267 {
9268     PERL_ARGS_ASSERT_CK_ANONCODE;
9269 
9270     cSVOPo->op_targ = pad_add_anon((CV*)cSVOPo->op_sv, o->op_type);
9271     cSVOPo->op_sv = NULL;
9272     return o;
9273 }
9274 
9275 static void
9276 S_io_hints(pTHX_ OP *o)
9277 {
9278 #if O_BINARY != 0 || O_TEXT != 0
9279     HV * const table =
9280 	PL_hints & HINT_LOCALIZE_HH ? GvHV(PL_hintgv) : NULL;;
9281     if (table) {
9282 	SV **svp = hv_fetchs(table, "open_IN", FALSE);
9283 	if (svp && *svp) {
9284 	    STRLEN len = 0;
9285 	    const char *d = SvPV_const(*svp, len);
9286 	    const I32 mode = mode_from_discipline(d, len);
9287             /* bit-and:ing with zero O_BINARY or O_TEXT would be useless. */
9288 #  if O_BINARY != 0
9289 	    if (mode & O_BINARY)
9290 		o->op_private |= OPpOPEN_IN_RAW;
9291 #  endif
9292 #  if O_TEXT != 0
9293 	    if (mode & O_TEXT)
9294 		o->op_private |= OPpOPEN_IN_CRLF;
9295 #  endif
9296 	}
9297 
9298 	svp = hv_fetchs(table, "open_OUT", FALSE);
9299 	if (svp && *svp) {
9300 	    STRLEN len = 0;
9301 	    const char *d = SvPV_const(*svp, len);
9302 	    const I32 mode = mode_from_discipline(d, len);
9303             /* bit-and:ing with zero O_BINARY or O_TEXT would be useless. */
9304 #  if O_BINARY != 0
9305 	    if (mode & O_BINARY)
9306 		o->op_private |= OPpOPEN_OUT_RAW;
9307 #  endif
9308 #  if O_TEXT != 0
9309 	    if (mode & O_TEXT)
9310 		o->op_private |= OPpOPEN_OUT_CRLF;
9311 #  endif
9312 	}
9313     }
9314 #else
9315     PERL_UNUSED_CONTEXT;
9316     PERL_UNUSED_ARG(o);
9317 #endif
9318 }
9319 
9320 OP *
9321 Perl_ck_backtick(pTHX_ OP *o)
9322 {
9323     GV *gv;
9324     OP *newop = NULL;
9325     OP *sibl;
9326     PERL_ARGS_ASSERT_CK_BACKTICK;
9327     /* qx and `` have a null pushmark; CORE::readpipe has only one kid. */
9328     if (o->op_flags & OPf_KIDS && (sibl = OpSIBLING(cUNOPo->op_first))
9329      && (gv = gv_override("readpipe",8)))
9330     {
9331         /* detach rest of siblings from o and its first child */
9332         op_sibling_splice(o, cUNOPo->op_first, -1, NULL);
9333 	newop = S_new_entersubop(aTHX_ gv, sibl);
9334     }
9335     else if (!(o->op_flags & OPf_KIDS))
9336 	newop = newUNOP(OP_BACKTICK, 0,	newDEFSVOP());
9337     if (newop) {
9338 	op_free(o);
9339 	return newop;
9340     }
9341     S_io_hints(aTHX_ o);
9342     return o;
9343 }
9344 
9345 OP *
9346 Perl_ck_bitop(pTHX_ OP *o)
9347 {
9348     PERL_ARGS_ASSERT_CK_BITOP;
9349 
9350     o->op_private = (U8)(PL_hints & HINT_INTEGER);
9351 
9352     if (o->op_type == OP_NBIT_OR     || o->op_type == OP_SBIT_OR
9353      || o->op_type == OP_NBIT_XOR    || o->op_type == OP_SBIT_XOR
9354      || o->op_type == OP_NBIT_AND    || o->op_type == OP_SBIT_AND
9355      || o->op_type == OP_NCOMPLEMENT || o->op_type == OP_SCOMPLEMENT)
9356 	Perl_ck_warner_d(aTHX_ packWARN(WARN_EXPERIMENTAL__BITWISE),
9357 			      "The bitwise feature is experimental");
9358     if (!(o->op_flags & OPf_STACKED) /* Not an assignment */
9359 	    && OP_IS_INFIX_BIT(o->op_type))
9360     {
9361 	const OP * const left = cBINOPo->op_first;
9362 	const OP * const right = OpSIBLING(left);
9363 	if ((OP_IS_NUMCOMPARE(left->op_type) &&
9364 		(left->op_flags & OPf_PARENS) == 0) ||
9365 	    (OP_IS_NUMCOMPARE(right->op_type) &&
9366 		(right->op_flags & OPf_PARENS) == 0))
9367 	    Perl_ck_warner(aTHX_ packWARN(WARN_PRECEDENCE),
9368 			  "Possible precedence problem on bitwise %s operator",
9369 			   o->op_type ==  OP_BIT_OR
9370 			 ||o->op_type == OP_NBIT_OR  ? "|"
9371 			:  o->op_type ==  OP_BIT_AND
9372 			 ||o->op_type == OP_NBIT_AND ? "&"
9373 			:  o->op_type ==  OP_BIT_XOR
9374 			 ||o->op_type == OP_NBIT_XOR ? "^"
9375 			:  o->op_type == OP_SBIT_OR  ? "|."
9376 			:  o->op_type == OP_SBIT_AND ? "&." : "^."
9377 			   );
9378     }
9379     return o;
9380 }
9381 
9382 PERL_STATIC_INLINE bool
9383 is_dollar_bracket(pTHX_ const OP * const o)
9384 {
9385     const OP *kid;
9386     PERL_UNUSED_CONTEXT;
9387     return o->op_type == OP_RV2SV && o->op_flags & OPf_KIDS
9388 	&& (kid = cUNOPx(o)->op_first)
9389 	&& kid->op_type == OP_GV
9390 	&& strEQ(GvNAME(cGVOPx_gv(kid)), "[");
9391 }
9392 
9393 OP *
9394 Perl_ck_cmp(pTHX_ OP *o)
9395 {
9396     PERL_ARGS_ASSERT_CK_CMP;
9397     if (ckWARN(WARN_SYNTAX)) {
9398 	const OP *kid = cUNOPo->op_first;
9399 	if (kid &&
9400             (
9401 		(   is_dollar_bracket(aTHX_ kid)
9402                  && OpSIBLING(kid) && OpSIBLING(kid)->op_type == OP_CONST
9403 		)
9404 	     || (   kid->op_type == OP_CONST
9405 		 && (kid = OpSIBLING(kid)) && is_dollar_bracket(aTHX_ kid)
9406                 )
9407 	   )
9408         )
9409 	    Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
9410 			"$[ used in %s (did you mean $] ?)", OP_DESC(o));
9411     }
9412     return o;
9413 }
9414 
9415 OP *
9416 Perl_ck_concat(pTHX_ OP *o)
9417 {
9418     const OP * const kid = cUNOPo->op_first;
9419 
9420     PERL_ARGS_ASSERT_CK_CONCAT;
9421     PERL_UNUSED_CONTEXT;
9422 
9423     if (kid->op_type == OP_CONCAT && !(kid->op_private & OPpTARGET_MY) &&
9424 	    !(kUNOP->op_first->op_flags & OPf_MOD))
9425         o->op_flags |= OPf_STACKED;
9426     return o;
9427 }
9428 
9429 OP *
9430 Perl_ck_spair(pTHX_ OP *o)
9431 {
9432     dVAR;
9433 
9434     PERL_ARGS_ASSERT_CK_SPAIR;
9435 
9436     if (o->op_flags & OPf_KIDS) {
9437 	OP* newop;
9438 	OP* kid;
9439         OP* kidkid;
9440 	const OPCODE type = o->op_type;
9441 	o = modkids(ck_fun(o), type);
9442 	kid    = cUNOPo->op_first;
9443 	kidkid = kUNOP->op_first;
9444 	newop = OpSIBLING(kidkid);
9445 	if (newop) {
9446 	    const OPCODE type = newop->op_type;
9447 	    if (OpHAS_SIBLING(newop))
9448 		return o;
9449 	    if (o->op_type == OP_REFGEN
9450 	     && (  type == OP_RV2CV
9451 		|| (  !(newop->op_flags & OPf_PARENS)
9452 		   && (  type == OP_RV2AV || type == OP_PADAV
9453 		      || type == OP_RV2HV || type == OP_PADHV))))
9454 	    	NOOP; /* OK (allow srefgen for \@a and \%h) */
9455 	    else if (OP_GIMME(newop,0) != G_SCALAR)
9456 		return o;
9457 	}
9458         /* excise first sibling */
9459         op_sibling_splice(kid, NULL, 1, NULL);
9460 	op_free(kidkid);
9461     }
9462     /* transforms OP_REFGEN into OP_SREFGEN, OP_CHOP into OP_SCHOP,
9463      * and OP_CHOMP into OP_SCHOMP */
9464     o->op_ppaddr = PL_ppaddr[++o->op_type];
9465     return ck_fun(o);
9466 }
9467 
9468 OP *
9469 Perl_ck_delete(pTHX_ OP *o)
9470 {
9471     PERL_ARGS_ASSERT_CK_DELETE;
9472 
9473     o = ck_fun(o);
9474     o->op_private = 0;
9475     if (o->op_flags & OPf_KIDS) {
9476 	OP * const kid = cUNOPo->op_first;
9477 	switch (kid->op_type) {
9478 	case OP_ASLICE:
9479 	    o->op_flags |= OPf_SPECIAL;
9480 	    /* FALLTHROUGH */
9481 	case OP_HSLICE:
9482 	    o->op_private |= OPpSLICE;
9483 	    break;
9484 	case OP_AELEM:
9485 	    o->op_flags |= OPf_SPECIAL;
9486 	    /* FALLTHROUGH */
9487 	case OP_HELEM:
9488 	    break;
9489 	case OP_KVASLICE:
9490 	    Perl_croak(aTHX_ "delete argument is index/value array slice,"
9491 			     " use array slice");
9492 	case OP_KVHSLICE:
9493 	    Perl_croak(aTHX_ "delete argument is key/value hash slice, use"
9494 			     " hash slice");
9495 	default:
9496 	    Perl_croak(aTHX_ "delete argument is not a HASH or ARRAY "
9497 			     "element or slice");
9498 	}
9499 	if (kid->op_private & OPpLVAL_INTRO)
9500 	    o->op_private |= OPpLVAL_INTRO;
9501 	op_null(kid);
9502     }
9503     return o;
9504 }
9505 
9506 OP *
9507 Perl_ck_eof(pTHX_ OP *o)
9508 {
9509     PERL_ARGS_ASSERT_CK_EOF;
9510 
9511     if (o->op_flags & OPf_KIDS) {
9512 	OP *kid;
9513 	if (cLISTOPo->op_first->op_type == OP_STUB) {
9514 	    OP * const newop
9515 		= newUNOP(o->op_type, OPf_SPECIAL, newGVOP(OP_GV, 0, PL_argvgv));
9516 	    op_free(o);
9517 	    o = newop;
9518 	}
9519 	o = ck_fun(o);
9520 	kid = cLISTOPo->op_first;
9521 	if (kid->op_type == OP_RV2GV)
9522 	    kid->op_private |= OPpALLOW_FAKE;
9523     }
9524     return o;
9525 }
9526 
9527 OP *
9528 Perl_ck_eval(pTHX_ OP *o)
9529 {
9530     dVAR;
9531 
9532     PERL_ARGS_ASSERT_CK_EVAL;
9533 
9534     PL_hints |= HINT_BLOCK_SCOPE;
9535     if (o->op_flags & OPf_KIDS) {
9536 	SVOP * const kid = (SVOP*)cUNOPo->op_first;
9537 	assert(kid);
9538 
9539 	if (o->op_type == OP_ENTERTRY) {
9540 	    LOGOP *enter;
9541 
9542             /* cut whole sibling chain free from o */
9543             op_sibling_splice(o, NULL, -1, NULL);
9544 	    op_free(o);
9545 
9546             enter = S_alloc_LOGOP(aTHX_ OP_ENTERTRY, NULL, NULL);
9547 
9548 	    /* establish postfix order */
9549 	    enter->op_next = (OP*)enter;
9550 
9551 	    o = op_prepend_elem(OP_LINESEQ, (OP*)enter, (OP*)kid);
9552             OpTYPE_set(o, OP_LEAVETRY);
9553 	    enter->op_other = o;
9554 	    return o;
9555 	}
9556 	else {
9557 	    scalar((OP*)kid);
9558 	    S_set_haseval(aTHX);
9559 	}
9560     }
9561     else {
9562 	const U8 priv = o->op_private;
9563 	op_free(o);
9564         /* the newUNOP will recursively call ck_eval(), which will handle
9565          * all the stuff at the end of this function, like adding
9566          * OP_HINTSEVAL
9567          */
9568 	return newUNOP(OP_ENTEREVAL, priv <<8, newDEFSVOP());
9569     }
9570     o->op_targ = (PADOFFSET)PL_hints;
9571     if (o->op_private & OPpEVAL_BYTES) o->op_targ &= ~HINT_UTF8;
9572     if ((PL_hints & HINT_LOCALIZE_HH) != 0
9573      && !(o->op_private & OPpEVAL_COPHH) && GvHV(PL_hintgv)) {
9574 	/* Store a copy of %^H that pp_entereval can pick up. */
9575 	OP *hhop = newSVOP(OP_HINTSEVAL, 0,
9576 			   MUTABLE_SV(hv_copy_hints_hv(GvHV(PL_hintgv))));
9577         /* append hhop to only child  */
9578         op_sibling_splice(o, cUNOPo->op_first, 0, hhop);
9579 
9580 	o->op_private |= OPpEVAL_HAS_HH;
9581     }
9582     if (!(o->op_private & OPpEVAL_BYTES)
9583 	 && FEATURE_UNIEVAL_IS_ENABLED)
9584 	    o->op_private |= OPpEVAL_UNICODE;
9585     return o;
9586 }
9587 
9588 OP *
9589 Perl_ck_exec(pTHX_ OP *o)
9590 {
9591     PERL_ARGS_ASSERT_CK_EXEC;
9592 
9593     if (o->op_flags & OPf_STACKED) {
9594         OP *kid;
9595 	o = ck_fun(o);
9596 	kid = OpSIBLING(cUNOPo->op_first);
9597 	if (kid->op_type == OP_RV2GV)
9598 	    op_null(kid);
9599     }
9600     else
9601 	o = listkids(o);
9602     return o;
9603 }
9604 
9605 OP *
9606 Perl_ck_exists(pTHX_ OP *o)
9607 {
9608     PERL_ARGS_ASSERT_CK_EXISTS;
9609 
9610     o = ck_fun(o);
9611     if (o->op_flags & OPf_KIDS) {
9612 	OP * const kid = cUNOPo->op_first;
9613 	if (kid->op_type == OP_ENTERSUB) {
9614 	    (void) ref(kid, o->op_type);
9615 	    if (kid->op_type != OP_RV2CV
9616 			&& !(PL_parser && PL_parser->error_count))
9617 		Perl_croak(aTHX_
9618 			  "exists argument is not a subroutine name");
9619 	    o->op_private |= OPpEXISTS_SUB;
9620 	}
9621 	else if (kid->op_type == OP_AELEM)
9622 	    o->op_flags |= OPf_SPECIAL;
9623 	else if (kid->op_type != OP_HELEM)
9624 	    Perl_croak(aTHX_ "exists argument is not a HASH or ARRAY "
9625 			     "element or a subroutine");
9626 	op_null(kid);
9627     }
9628     return o;
9629 }
9630 
9631 OP *
9632 Perl_ck_rvconst(pTHX_ OP *o)
9633 {
9634     dVAR;
9635     SVOP * const kid = (SVOP*)cUNOPo->op_first;
9636 
9637     PERL_ARGS_ASSERT_CK_RVCONST;
9638 
9639     o->op_private |= (PL_hints & HINT_STRICT_REFS);
9640 
9641     if (kid->op_type == OP_CONST) {
9642 	int iscv;
9643 	GV *gv;
9644 	SV * const kidsv = kid->op_sv;
9645 
9646 	/* Is it a constant from cv_const_sv()? */
9647 	if ((SvROK(kidsv) || isGV_with_GP(kidsv)) && SvREADONLY(kidsv)) {
9648 	    return o;
9649 	}
9650 	if (SvTYPE(kidsv) == SVt_PVAV) return o;
9651 	if ((o->op_private & HINT_STRICT_REFS) && (kid->op_private & OPpCONST_BARE)) {
9652 	    const char *badthing;
9653 	    switch (o->op_type) {
9654 	    case OP_RV2SV:
9655 		badthing = "a SCALAR";
9656 		break;
9657 	    case OP_RV2AV:
9658 		badthing = "an ARRAY";
9659 		break;
9660 	    case OP_RV2HV:
9661 		badthing = "a HASH";
9662 		break;
9663 	    default:
9664 		badthing = NULL;
9665 		break;
9666 	    }
9667 	    if (badthing)
9668 		Perl_croak(aTHX_
9669 			   "Can't use bareword (\"%"SVf"\") as %s ref while \"strict refs\" in use",
9670 			   SVfARG(kidsv), badthing);
9671 	}
9672 	/*
9673 	 * This is a little tricky.  We only want to add the symbol if we
9674 	 * didn't add it in the lexer.  Otherwise we get duplicate strict
9675 	 * warnings.  But if we didn't add it in the lexer, we must at
9676 	 * least pretend like we wanted to add it even if it existed before,
9677 	 * or we get possible typo warnings.  OPpCONST_ENTERED says
9678 	 * whether the lexer already added THIS instance of this symbol.
9679 	 */
9680 	iscv = o->op_type == OP_RV2CV ? GV_NOEXPAND|GV_ADDMULTI : 0;
9681 	gv = gv_fetchsv(kidsv,
9682 		o->op_type == OP_RV2CV
9683 			&& o->op_private & OPpMAY_RETURN_CONSTANT
9684 		    ? GV_NOEXPAND
9685 		    : iscv | !(kid->op_private & OPpCONST_ENTERED),
9686 		iscv
9687 		    ? SVt_PVCV
9688 		    : o->op_type == OP_RV2SV
9689 			? SVt_PV
9690 			: o->op_type == OP_RV2AV
9691 			    ? SVt_PVAV
9692 			    : o->op_type == OP_RV2HV
9693 				? SVt_PVHV
9694 				: SVt_PVGV);
9695 	if (gv) {
9696 	    if (!isGV(gv)) {
9697 		assert(iscv);
9698 		assert(SvROK(gv));
9699 		if (!(o->op_private & OPpMAY_RETURN_CONSTANT)
9700 		  && SvTYPE(SvRV(gv)) != SVt_PVCV)
9701 		    gv_fetchsv(kidsv, GV_ADDMULTI, SVt_PVCV);
9702 	    }
9703             OpTYPE_set(kid, OP_GV);
9704 	    SvREFCNT_dec(kid->op_sv);
9705 #ifdef USE_ITHREADS
9706 	    /* XXX hack: dependence on sizeof(PADOP) <= sizeof(SVOP) */
9707 	    STATIC_ASSERT_STMT(sizeof(PADOP) <= sizeof(SVOP));
9708 	    kPADOP->op_padix = pad_alloc(OP_GV, SVf_READONLY);
9709 	    SvREFCNT_dec(PAD_SVl(kPADOP->op_padix));
9710 	    PAD_SETSV(kPADOP->op_padix, MUTABLE_SV(SvREFCNT_inc_simple_NN(gv)));
9711 #else
9712 	    kid->op_sv = SvREFCNT_inc_simple_NN(gv);
9713 #endif
9714 	    kid->op_private = 0;
9715 	    /* FAKE globs in the symbol table cause weird bugs (#77810) */
9716 	    SvFAKE_off(gv);
9717 	}
9718     }
9719     return o;
9720 }
9721 
9722 OP *
9723 Perl_ck_ftst(pTHX_ OP *o)
9724 {
9725     dVAR;
9726     const I32 type = o->op_type;
9727 
9728     PERL_ARGS_ASSERT_CK_FTST;
9729 
9730     if (o->op_flags & OPf_REF) {
9731 	NOOP;
9732     }
9733     else if (o->op_flags & OPf_KIDS && cUNOPo->op_first->op_type != OP_STUB) {
9734 	SVOP * const kid = (SVOP*)cUNOPo->op_first;
9735 	const OPCODE kidtype = kid->op_type;
9736 
9737 	if (kidtype == OP_CONST && (kid->op_private & OPpCONST_BARE)
9738 	 && !kid->op_folded) {
9739 	    OP * const newop = newGVOP(type, OPf_REF,
9740 		gv_fetchsv(kid->op_sv, GV_ADD, SVt_PVIO));
9741 	    op_free(o);
9742 	    return newop;
9743 	}
9744 
9745         if ((kidtype == OP_RV2AV || kidtype == OP_PADAV) && ckWARN(WARN_SYNTAX)) {
9746             SV *name = S_op_varname_subscript(aTHX_ (OP*)kid, 2);
9747             if (name) {
9748                 /* diag_listed_as: Array passed to stat will be coerced to a scalar%s */
9749                 Perl_warner(aTHX_ packWARN(WARN_SYNTAX), "%s (did you want stat %" SVf "?)",
9750                             array_passed_to_stat, name);
9751             }
9752             else {
9753                 /* diag_listed_as: Array passed to stat will be coerced to a scalar%s */
9754                 Perl_warner(aTHX_ packWARN(WARN_SYNTAX), "%s", array_passed_to_stat);
9755             }
9756        }
9757 	scalar((OP *) kid);
9758 	if ((PL_hints & HINT_FILETEST_ACCESS) && OP_IS_FILETEST_ACCESS(o->op_type))
9759 	    o->op_private |= OPpFT_ACCESS;
9760 	if (type != OP_STAT && type != OP_LSTAT
9761             && PL_check[kidtype] == Perl_ck_ftst
9762             && kidtype != OP_STAT && kidtype != OP_LSTAT
9763         ) {
9764 	    o->op_private |= OPpFT_STACKED;
9765 	    kid->op_private |= OPpFT_STACKING;
9766 	    if (kidtype == OP_FTTTY && (
9767 		   !(kid->op_private & OPpFT_STACKED)
9768 		|| kid->op_private & OPpFT_AFTER_t
9769 	       ))
9770 		o->op_private |= OPpFT_AFTER_t;
9771 	}
9772     }
9773     else {
9774 	op_free(o);
9775 	if (type == OP_FTTTY)
9776 	    o = newGVOP(type, OPf_REF, PL_stdingv);
9777 	else
9778 	    o = newUNOP(type, 0, newDEFSVOP());
9779     }
9780     return o;
9781 }
9782 
9783 OP *
9784 Perl_ck_fun(pTHX_ OP *o)
9785 {
9786     const int type = o->op_type;
9787     I32 oa = PL_opargs[type] >> OASHIFT;
9788 
9789     PERL_ARGS_ASSERT_CK_FUN;
9790 
9791     if (o->op_flags & OPf_STACKED) {
9792 	if ((oa & OA_OPTIONAL) && (oa >> 4) && !((oa >> 4) & OA_OPTIONAL))
9793 	    oa &= ~OA_OPTIONAL;
9794 	else
9795 	    return no_fh_allowed(o);
9796     }
9797 
9798     if (o->op_flags & OPf_KIDS) {
9799         OP *prev_kid = NULL;
9800         OP *kid = cLISTOPo->op_first;
9801         I32 numargs = 0;
9802 	bool seen_optional = FALSE;
9803 
9804 	if (kid->op_type == OP_PUSHMARK ||
9805 	    (kid->op_type == OP_NULL && kid->op_targ == OP_PUSHMARK))
9806 	{
9807 	    prev_kid = kid;
9808 	    kid = OpSIBLING(kid);
9809 	}
9810 	if (kid && kid->op_type == OP_COREARGS) {
9811 	    bool optional = FALSE;
9812 	    while (oa) {
9813 		numargs++;
9814 		if (oa & OA_OPTIONAL) optional = TRUE;
9815 		oa = oa >> 4;
9816 	    }
9817 	    if (optional) o->op_private |= numargs;
9818 	    return o;
9819 	}
9820 
9821 	while (oa) {
9822 	    if (oa & OA_OPTIONAL || (oa & 7) == OA_LIST) {
9823 		if (!kid && !seen_optional && PL_opargs[type] & OA_DEFGV) {
9824 		    kid = newDEFSVOP();
9825                     /* append kid to chain */
9826                     op_sibling_splice(o, prev_kid, 0, kid);
9827                 }
9828 		seen_optional = TRUE;
9829 	    }
9830 	    if (!kid) break;
9831 
9832 	    numargs++;
9833 	    switch (oa & 7) {
9834 	    case OA_SCALAR:
9835 		/* list seen where single (scalar) arg expected? */
9836 		if (numargs == 1 && !(oa >> 4)
9837 		    && kid->op_type == OP_LIST && type != OP_SCALAR)
9838 		{
9839 		    return too_many_arguments_pv(o,PL_op_desc[type], 0);
9840 		}
9841 		if (type != OP_DELETE) scalar(kid);
9842 		break;
9843 	    case OA_LIST:
9844 		if (oa < 16) {
9845 		    kid = 0;
9846 		    continue;
9847 		}
9848 		else
9849 		    list(kid);
9850 		break;
9851 	    case OA_AVREF:
9852 		if ((type == OP_PUSH || type == OP_UNSHIFT)
9853 		    && !OpHAS_SIBLING(kid))
9854 		    Perl_ck_warner(aTHX_ packWARN(WARN_SYNTAX),
9855 				   "Useless use of %s with no values",
9856 				   PL_op_desc[type]);
9857 
9858 		if (kid->op_type == OP_CONST
9859 		      && (  !SvROK(cSVOPx_sv(kid))
9860 		         || SvTYPE(SvRV(cSVOPx_sv(kid))) != SVt_PVAV  )
9861 		        )
9862 		    bad_type_pv(numargs, "array", o, kid);
9863 		else if (kid->op_type != OP_RV2AV && kid->op_type != OP_PADAV) {
9864                     yyerror_pv(Perl_form(aTHX_ "Experimental %s on scalar is now forbidden",
9865                                          PL_op_desc[type]), 0);
9866 		}
9867                 else {
9868                     op_lvalue(kid, type);
9869                 }
9870 		break;
9871 	    case OA_HVREF:
9872 		if (kid->op_type != OP_RV2HV && kid->op_type != OP_PADHV)
9873 		    bad_type_pv(numargs, "hash", o, kid);
9874 		op_lvalue(kid, type);
9875 		break;
9876 	    case OA_CVREF:
9877 		{
9878                     /* replace kid with newop in chain */
9879 		    OP * const newop =
9880                         S_op_sibling_newUNOP(aTHX_ o, prev_kid, OP_NULL, 0);
9881 		    newop->op_next = newop;
9882 		    kid = newop;
9883 		}
9884 		break;
9885 	    case OA_FILEREF:
9886 		if (kid->op_type != OP_GV && kid->op_type != OP_RV2GV) {
9887 		    if (kid->op_type == OP_CONST &&
9888 			(kid->op_private & OPpCONST_BARE))
9889 		    {
9890 			OP * const newop = newGVOP(OP_GV, 0,
9891 			    gv_fetchsv(((SVOP*)kid)->op_sv, GV_ADD, SVt_PVIO));
9892                         /* replace kid with newop in chain */
9893                         op_sibling_splice(o, prev_kid, 1, newop);
9894 			op_free(kid);
9895 			kid = newop;
9896 		    }
9897 		    else if (kid->op_type == OP_READLINE) {
9898 			/* neophyte patrol: open(<FH>), close(<FH>) etc. */
9899 			bad_type_pv(numargs, "HANDLE", o, kid);
9900 		    }
9901 		    else {
9902 			I32 flags = OPf_SPECIAL;
9903 			I32 priv = 0;
9904 			PADOFFSET targ = 0;
9905 
9906 			/* is this op a FH constructor? */
9907 			if (is_handle_constructor(o,numargs)) {
9908                             const char *name = NULL;
9909 			    STRLEN len = 0;
9910                             U32 name_utf8 = 0;
9911 			    bool want_dollar = TRUE;
9912 
9913 			    flags = 0;
9914 			    /* Set a flag to tell rv2gv to vivify
9915 			     * need to "prove" flag does not mean something
9916 			     * else already - NI-S 1999/05/07
9917 			     */
9918 			    priv = OPpDEREF;
9919 			    if (kid->op_type == OP_PADSV) {
9920 				PADNAME * const pn
9921 				    = PAD_COMPNAME_SV(kid->op_targ);
9922 				name = PadnamePV (pn);
9923 				len  = PadnameLEN(pn);
9924 				name_utf8 = PadnameUTF8(pn);
9925 			    }
9926 			    else if (kid->op_type == OP_RV2SV
9927 				     && kUNOP->op_first->op_type == OP_GV)
9928 			    {
9929 				GV * const gv = cGVOPx_gv(kUNOP->op_first);
9930 				name = GvNAME(gv);
9931 				len = GvNAMELEN(gv);
9932                                 name_utf8 = GvNAMEUTF8(gv) ? SVf_UTF8 : 0;
9933 			    }
9934 			    else if (kid->op_type == OP_AELEM
9935 				     || kid->op_type == OP_HELEM)
9936 			    {
9937 				 OP *firstop;
9938 				 OP *op = ((BINOP*)kid)->op_first;
9939 				 name = NULL;
9940 				 if (op) {
9941 				      SV *tmpstr = NULL;
9942 				      const char * const a =
9943 					   kid->op_type == OP_AELEM ?
9944 					   "[]" : "{}";
9945 				      if (((op->op_type == OP_RV2AV) ||
9946 					   (op->op_type == OP_RV2HV)) &&
9947 					  (firstop = ((UNOP*)op)->op_first) &&
9948 					  (firstop->op_type == OP_GV)) {
9949 					   /* packagevar $a[] or $h{} */
9950 					   GV * const gv = cGVOPx_gv(firstop);
9951 					   if (gv)
9952 						tmpstr =
9953 						     Perl_newSVpvf(aTHX_
9954 								   "%s%c...%c",
9955 								   GvNAME(gv),
9956 								   a[0], a[1]);
9957 				      }
9958 				      else if (op->op_type == OP_PADAV
9959 					       || op->op_type == OP_PADHV) {
9960 					   /* lexicalvar $a[] or $h{} */
9961 					   const char * const padname =
9962 						PAD_COMPNAME_PV(op->op_targ);
9963 					   if (padname)
9964 						tmpstr =
9965 						     Perl_newSVpvf(aTHX_
9966 								   "%s%c...%c",
9967 								   padname + 1,
9968 								   a[0], a[1]);
9969 				      }
9970 				      if (tmpstr) {
9971 					   name = SvPV_const(tmpstr, len);
9972                                            name_utf8 = SvUTF8(tmpstr);
9973 					   sv_2mortal(tmpstr);
9974 				      }
9975 				 }
9976 				 if (!name) {
9977 				      name = "__ANONIO__";
9978 				      len = 10;
9979 				      want_dollar = FALSE;
9980 				 }
9981 				 op_lvalue(kid, type);
9982 			    }
9983 			    if (name) {
9984 				SV *namesv;
9985 				targ = pad_alloc(OP_RV2GV, SVf_READONLY);
9986 				namesv = PAD_SVl(targ);
9987 				if (want_dollar && *name != '$')
9988 				    sv_setpvs(namesv, "$");
9989 				else
9990 				    sv_setpvs(namesv, "");
9991 				sv_catpvn(namesv, name, len);
9992                                 if ( name_utf8 ) SvUTF8_on(namesv);
9993 			    }
9994 			}
9995                         scalar(kid);
9996                         kid = S_op_sibling_newUNOP(aTHX_ o, prev_kid,
9997                                     OP_RV2GV, flags);
9998                         kid->op_targ = targ;
9999                         kid->op_private |= priv;
10000 		    }
10001 		}
10002 		scalar(kid);
10003 		break;
10004 	    case OA_SCALARREF:
10005 		if ((type == OP_UNDEF || type == OP_POS)
10006 		    && numargs == 1 && !(oa >> 4)
10007 		    && kid->op_type == OP_LIST)
10008 		    return too_many_arguments_pv(o,PL_op_desc[type], 0);
10009 		op_lvalue(scalar(kid), type);
10010 		break;
10011 	    }
10012 	    oa >>= 4;
10013 	    prev_kid = kid;
10014 	    kid = OpSIBLING(kid);
10015 	}
10016 	/* FIXME - should the numargs or-ing move after the too many
10017          * arguments check? */
10018 	o->op_private |= numargs;
10019 	if (kid)
10020 	    return too_many_arguments_pv(o,OP_DESC(o), 0);
10021 	listkids(o);
10022     }
10023     else if (PL_opargs[type] & OA_DEFGV) {
10024 	/* Ordering of these two is important to keep f_map.t passing.  */
10025 	op_free(o);
10026 	return newUNOP(type, 0, newDEFSVOP());
10027     }
10028 
10029     if (oa) {
10030 	while (oa & OA_OPTIONAL)
10031 	    oa >>= 4;
10032 	if (oa && oa != OA_LIST)
10033 	    return too_few_arguments_pv(o,OP_DESC(o), 0);
10034     }
10035     return o;
10036 }
10037 
10038 OP *
10039 Perl_ck_glob(pTHX_ OP *o)
10040 {
10041     GV *gv;
10042 
10043     PERL_ARGS_ASSERT_CK_GLOB;
10044 
10045     o = ck_fun(o);
10046     if ((o->op_flags & OPf_KIDS) && !OpHAS_SIBLING(cLISTOPo->op_first))
10047 	op_append_elem(OP_GLOB, o, newDEFSVOP()); /* glob() => glob($_) */
10048 
10049     if (!(o->op_flags & OPf_SPECIAL) && (gv = gv_override("glob", 4)))
10050     {
10051 	/* convert
10052 	 *     glob
10053 	 *       \ null - const(wildcard)
10054 	 * into
10055 	 *     null
10056 	 *       \ enter
10057 	 *            \ list
10058 	 *                 \ mark - glob - rv2cv
10059 	 *                             |        \ gv(CORE::GLOBAL::glob)
10060 	 *                             |
10061 	 *                              \ null - const(wildcard)
10062 	 */
10063 	o->op_flags |= OPf_SPECIAL;
10064 	o->op_targ = pad_alloc(OP_GLOB, SVs_PADTMP);
10065 	o = S_new_entersubop(aTHX_ gv, o);
10066 	o = newUNOP(OP_NULL, 0, o);
10067 	o->op_targ = OP_GLOB; /* hint at what it used to be: eg in newWHILEOP */
10068 	return o;
10069     }
10070     else o->op_flags &= ~OPf_SPECIAL;
10071 #if !defined(PERL_EXTERNAL_GLOB)
10072     if (!PL_globhook) {
10073 	ENTER;
10074 	Perl_load_module(aTHX_ PERL_LOADMOD_NOIMPORT,
10075 			       newSVpvs("File::Glob"), NULL, NULL, NULL);
10076 	LEAVE;
10077     }
10078 #endif /* !PERL_EXTERNAL_GLOB */
10079     gv = (GV *)newSV(0);
10080     gv_init(gv, 0, "", 0, 0);
10081     gv_IOadd(gv);
10082     op_append_elem(OP_GLOB, o, newGVOP(OP_GV, 0, gv));
10083     SvREFCNT_dec_NN(gv); /* newGVOP increased it */
10084     scalarkids(o);
10085     return o;
10086 }
10087 
10088 OP *
10089 Perl_ck_grep(pTHX_ OP *o)
10090 {
10091     LOGOP *gwop;
10092     OP *kid;
10093     const OPCODE type = o->op_type == OP_GREPSTART ? OP_GREPWHILE : OP_MAPWHILE;
10094 
10095     PERL_ARGS_ASSERT_CK_GREP;
10096 
10097     /* don't allocate gwop here, as we may leak it if PL_parser->error_count > 0 */
10098 
10099     if (o->op_flags & OPf_STACKED) {
10100 	kid = cUNOPx(OpSIBLING(cLISTOPo->op_first))->op_first;
10101 	if (kid->op_type != OP_SCOPE && kid->op_type != OP_LEAVE)
10102 	    return no_fh_allowed(o);
10103 	o->op_flags &= ~OPf_STACKED;
10104     }
10105     kid = OpSIBLING(cLISTOPo->op_first);
10106     if (type == OP_MAPWHILE)
10107 	list(kid);
10108     else
10109 	scalar(kid);
10110     o = ck_fun(o);
10111     if (PL_parser && PL_parser->error_count)
10112 	return o;
10113     kid = OpSIBLING(cLISTOPo->op_first);
10114     if (kid->op_type != OP_NULL)
10115 	Perl_croak(aTHX_ "panic: ck_grep, type=%u", (unsigned) kid->op_type);
10116     kid = kUNOP->op_first;
10117 
10118     gwop = S_alloc_LOGOP(aTHX_ type, o, LINKLIST(kid));
10119     kid->op_next = (OP*)gwop;
10120     o->op_private = gwop->op_private = 0;
10121     gwop->op_targ = pad_alloc(type, SVs_PADTMP);
10122 
10123     kid = OpSIBLING(cLISTOPo->op_first);
10124     for (kid = OpSIBLING(kid); kid; kid = OpSIBLING(kid))
10125 	op_lvalue(kid, OP_GREPSTART);
10126 
10127     return (OP*)gwop;
10128 }
10129 
10130 OP *
10131 Perl_ck_index(pTHX_ OP *o)
10132 {
10133     PERL_ARGS_ASSERT_CK_INDEX;
10134 
10135     if (o->op_flags & OPf_KIDS) {
10136 	OP *kid = OpSIBLING(cLISTOPo->op_first);	/* get past pushmark */
10137 	if (kid)
10138 	    kid = OpSIBLING(kid);			/* get past "big" */
10139 	if (kid && kid->op_type == OP_CONST) {
10140 	    const bool save_taint = TAINT_get;
10141 	    SV *sv = kSVOP->op_sv;
10142 	    if ((!SvPOK(sv) || SvNIOKp(sv)) && SvOK(sv) && !SvROK(sv)) {
10143 		sv = newSV(0);
10144 		sv_copypv(sv, kSVOP->op_sv);
10145 		SvREFCNT_dec_NN(kSVOP->op_sv);
10146 		kSVOP->op_sv = sv;
10147 	    }
10148 	    if (SvOK(sv)) fbm_compile(sv, 0);
10149 	    TAINT_set(save_taint);
10150 #ifdef NO_TAINT_SUPPORT
10151             PERL_UNUSED_VAR(save_taint);
10152 #endif
10153 	}
10154     }
10155     return ck_fun(o);
10156 }
10157 
10158 OP *
10159 Perl_ck_lfun(pTHX_ OP *o)
10160 {
10161     const OPCODE type = o->op_type;
10162 
10163     PERL_ARGS_ASSERT_CK_LFUN;
10164 
10165     return modkids(ck_fun(o), type);
10166 }
10167 
10168 OP *
10169 Perl_ck_defined(pTHX_ OP *o)		/* 19990527 MJD */
10170 {
10171     PERL_ARGS_ASSERT_CK_DEFINED;
10172 
10173     if ((o->op_flags & OPf_KIDS)) {
10174 	switch (cUNOPo->op_first->op_type) {
10175 	case OP_RV2AV:
10176 	case OP_PADAV:
10177 	    Perl_croak(aTHX_ "Can't use 'defined(@array)'"
10178 			     " (Maybe you should just omit the defined()?)");
10179 	break;
10180 	case OP_RV2HV:
10181 	case OP_PADHV:
10182 	    Perl_croak(aTHX_ "Can't use 'defined(%%hash)'"
10183 			     " (Maybe you should just omit the defined()?)");
10184 	    break;
10185 	default:
10186 	    /* no warning */
10187 	    break;
10188 	}
10189     }
10190     return ck_rfun(o);
10191 }
10192 
10193 OP *
10194 Perl_ck_readline(pTHX_ OP *o)
10195 {
10196     PERL_ARGS_ASSERT_CK_READLINE;
10197 
10198     if (o->op_flags & OPf_KIDS) {
10199 	 OP *kid = cLISTOPo->op_first;
10200 	 if (kid->op_type == OP_RV2GV) kid->op_private |= OPpALLOW_FAKE;
10201     }
10202     else {
10203 	OP * const newop
10204 	    = newUNOP(OP_READLINE, 0, newGVOP(OP_GV, 0, PL_argvgv));
10205 	op_free(o);
10206 	return newop;
10207     }
10208     return o;
10209 }
10210 
10211 OP *
10212 Perl_ck_rfun(pTHX_ OP *o)
10213 {
10214     const OPCODE type = o->op_type;
10215 
10216     PERL_ARGS_ASSERT_CK_RFUN;
10217 
10218     return refkids(ck_fun(o), type);
10219 }
10220 
10221 OP *
10222 Perl_ck_listiob(pTHX_ OP *o)
10223 {
10224     OP *kid;
10225 
10226     PERL_ARGS_ASSERT_CK_LISTIOB;
10227 
10228     kid = cLISTOPo->op_first;
10229     if (!kid) {
10230 	o = force_list(o, 1);
10231 	kid = cLISTOPo->op_first;
10232     }
10233     if (kid->op_type == OP_PUSHMARK)
10234 	kid = OpSIBLING(kid);
10235     if (kid && o->op_flags & OPf_STACKED)
10236 	kid = OpSIBLING(kid);
10237     else if (kid && !OpHAS_SIBLING(kid)) {		/* print HANDLE; */
10238 	if (kid->op_type == OP_CONST && kid->op_private & OPpCONST_BARE
10239 	 && !kid->op_folded) {
10240 	    o->op_flags |= OPf_STACKED;	/* make it a filehandle */
10241             scalar(kid);
10242             /* replace old const op with new OP_RV2GV parent */
10243             kid = S_op_sibling_newUNOP(aTHX_ o, cLISTOPo->op_first,
10244                                         OP_RV2GV, OPf_REF);
10245             kid = OpSIBLING(kid);
10246 	}
10247     }
10248 
10249     if (!kid)
10250 	op_append_elem(o->op_type, o, newDEFSVOP());
10251 
10252     if (o->op_type == OP_PRTF) return modkids(listkids(o), OP_PRTF);
10253     return listkids(o);
10254 }
10255 
10256 OP *
10257 Perl_ck_smartmatch(pTHX_ OP *o)
10258 {
10259     dVAR;
10260     PERL_ARGS_ASSERT_CK_SMARTMATCH;
10261     if (0 == (o->op_flags & OPf_SPECIAL)) {
10262 	OP *first  = cBINOPo->op_first;
10263 	OP *second = OpSIBLING(first);
10264 
10265 	/* Implicitly take a reference to an array or hash */
10266 
10267         /* remove the original two siblings, then add back the
10268          * (possibly different) first and second sibs.
10269          */
10270         op_sibling_splice(o, NULL, 1, NULL);
10271         op_sibling_splice(o, NULL, 1, NULL);
10272 	first  = ref_array_or_hash(first);
10273 	second = ref_array_or_hash(second);
10274         op_sibling_splice(o, NULL, 0, second);
10275         op_sibling_splice(o, NULL, 0, first);
10276 
10277 	/* Implicitly take a reference to a regular expression */
10278 	if (first->op_type == OP_MATCH) {
10279             OpTYPE_set(first, OP_QR);
10280 	}
10281 	if (second->op_type == OP_MATCH) {
10282             OpTYPE_set(second, OP_QR);
10283         }
10284     }
10285 
10286     return o;
10287 }
10288 
10289 
10290 static OP *
10291 S_maybe_targlex(pTHX_ OP *o)
10292 {
10293     OP * const kid = cLISTOPo->op_first;
10294     /* has a disposable target? */
10295     if ((PL_opargs[kid->op_type] & OA_TARGLEX)
10296 	&& !(kid->op_flags & OPf_STACKED)
10297 	/* Cannot steal the second time! */
10298 	&& !(kid->op_private & OPpTARGET_MY)
10299 	)
10300     {
10301 	OP * const kkid = OpSIBLING(kid);
10302 
10303 	/* Can just relocate the target. */
10304 	if (kkid && kkid->op_type == OP_PADSV
10305 	    && (!(kkid->op_private & OPpLVAL_INTRO)
10306 	       || kkid->op_private & OPpPAD_STATE))
10307 	{
10308 	    kid->op_targ = kkid->op_targ;
10309 	    kkid->op_targ = 0;
10310 	    /* Now we do not need PADSV and SASSIGN.
10311 	     * Detach kid and free the rest. */
10312 	    op_sibling_splice(o, NULL, 1, NULL);
10313 	    op_free(o);
10314 	    kid->op_private |= OPpTARGET_MY;	/* Used for context settings */
10315 	    return kid;
10316 	}
10317     }
10318     return o;
10319 }
10320 
10321 OP *
10322 Perl_ck_sassign(pTHX_ OP *o)
10323 {
10324     dVAR;
10325     OP * const kid = cLISTOPo->op_first;
10326 
10327     PERL_ARGS_ASSERT_CK_SASSIGN;
10328 
10329     if (OpHAS_SIBLING(kid)) {
10330 	OP *kkid = OpSIBLING(kid);
10331 	/* For state variable assignment with attributes, kkid is a list op
10332 	   whose op_last is a padsv. */
10333 	if ((kkid->op_type == OP_PADSV ||
10334 	     (OP_TYPE_IS_OR_WAS(kkid, OP_LIST) &&
10335 	      (kkid = cLISTOPx(kkid)->op_last)->op_type == OP_PADSV
10336 	     )
10337 	    )
10338 		&& (kkid->op_private & (OPpLVAL_INTRO|OPpPAD_STATE))
10339 		    == (OPpLVAL_INTRO|OPpPAD_STATE)) {
10340 	    const PADOFFSET target = kkid->op_targ;
10341 	    OP *const other = newOP(OP_PADSV,
10342 				    kkid->op_flags
10343 				    | ((kkid->op_private & ~OPpLVAL_INTRO) << 8));
10344 	    OP *const first = newOP(OP_NULL, 0);
10345 	    OP *const nullop =
10346 		newCONDOP(0, first, o, other);
10347 	    /* XXX targlex disabled for now; see ticket #124160
10348 		newCONDOP(0, first, S_maybe_targlex(aTHX_ o), other);
10349 	     */
10350 	    OP *const condop = first->op_next;
10351 
10352             OpTYPE_set(condop, OP_ONCE);
10353 	    other->op_targ = target;
10354 	    nullop->op_flags |= OPf_WANT_SCALAR;
10355 
10356 	    /* Store the initializedness of state vars in a separate
10357 	       pad entry.  */
10358 	    condop->op_targ =
10359 	      pad_add_name_pvn("$",1,padadd_NO_DUP_CHECK|padadd_STATE,0,0);
10360 	    /* hijacking PADSTALE for uninitialized state variables */
10361 	    SvPADSTALE_on(PAD_SVl(condop->op_targ));
10362 
10363 	    return nullop;
10364 	}
10365     }
10366     return S_maybe_targlex(aTHX_ o);
10367 }
10368 
10369 OP *
10370 Perl_ck_match(pTHX_ OP *o)
10371 {
10372     PERL_UNUSED_CONTEXT;
10373     PERL_ARGS_ASSERT_CK_MATCH;
10374 
10375     if (o->op_type == OP_MATCH || o->op_type == OP_QR)
10376 	o->op_private |= OPpRUNTIME;
10377     return o;
10378 }
10379 
10380 OP *
10381 Perl_ck_method(pTHX_ OP *o)
10382 {
10383     SV *sv, *methsv, *rclass;
10384     const char* method;
10385     char* compatptr;
10386     int utf8;
10387     STRLEN len, nsplit = 0, i;
10388     OP* new_op;
10389     OP * const kid = cUNOPo->op_first;
10390 
10391     PERL_ARGS_ASSERT_CK_METHOD;
10392     if (kid->op_type != OP_CONST) return o;
10393 
10394     sv = kSVOP->op_sv;
10395 
10396     /* replace ' with :: */
10397     while ((compatptr = strchr(SvPVX(sv), '\''))) {
10398         *compatptr = ':';
10399         sv_insert(sv, compatptr - SvPVX_const(sv), 0, ":", 1);
10400     }
10401 
10402     method = SvPVX_const(sv);
10403     len = SvCUR(sv);
10404     utf8 = SvUTF8(sv) ? -1 : 1;
10405 
10406     for (i = len - 1; i > 0; --i) if (method[i] == ':') {
10407         nsplit = i+1;
10408         break;
10409     }
10410 
10411     methsv = newSVpvn_share(method+nsplit, utf8*(len - nsplit), 0);
10412 
10413     if (!nsplit) { /* $proto->method() */
10414         op_free(o);
10415         return newMETHOP_named(OP_METHOD_NAMED, 0, methsv);
10416     }
10417 
10418     if (nsplit == 7 && memEQ(method, "SUPER::", nsplit)) { /* $proto->SUPER::method() */
10419         op_free(o);
10420         return newMETHOP_named(OP_METHOD_SUPER, 0, methsv);
10421     }
10422 
10423     /* $proto->MyClass::method() and $proto->MyClass::SUPER::method() */
10424     if (nsplit >= 9 && strnEQ(method+nsplit-9, "::SUPER::", 9)) {
10425         rclass = newSVpvn_share(method, utf8*(nsplit-9), 0);
10426         new_op = newMETHOP_named(OP_METHOD_REDIR_SUPER, 0, methsv);
10427     } else {
10428         rclass = newSVpvn_share(method, utf8*(nsplit-2), 0);
10429         new_op = newMETHOP_named(OP_METHOD_REDIR, 0, methsv);
10430     }
10431 #ifdef USE_ITHREADS
10432     op_relocate_sv(&rclass, &cMETHOPx(new_op)->op_rclass_targ);
10433 #else
10434     cMETHOPx(new_op)->op_rclass_sv = rclass;
10435 #endif
10436     op_free(o);
10437     return new_op;
10438 }
10439 
10440 OP *
10441 Perl_ck_null(pTHX_ OP *o)
10442 {
10443     PERL_ARGS_ASSERT_CK_NULL;
10444     PERL_UNUSED_CONTEXT;
10445     return o;
10446 }
10447 
10448 OP *
10449 Perl_ck_open(pTHX_ OP *o)
10450 {
10451     PERL_ARGS_ASSERT_CK_OPEN;
10452 
10453     S_io_hints(aTHX_ o);
10454     {
10455 	 /* In case of three-arg dup open remove strictness
10456 	  * from the last arg if it is a bareword. */
10457 	 OP * const first = cLISTOPx(o)->op_first; /* The pushmark. */
10458 	 OP * const last  = cLISTOPx(o)->op_last;  /* The bareword. */
10459 	 OP *oa;
10460 	 const char *mode;
10461 
10462 	 if ((last->op_type == OP_CONST) &&		/* The bareword. */
10463 	     (last->op_private & OPpCONST_BARE) &&
10464 	     (last->op_private & OPpCONST_STRICT) &&
10465 	     (oa = OpSIBLING(first)) &&		/* The fh. */
10466 	     (oa = OpSIBLING(oa)) &&			/* The mode. */
10467 	     (oa->op_type == OP_CONST) &&
10468 	     SvPOK(((SVOP*)oa)->op_sv) &&
10469 	     (mode = SvPVX_const(((SVOP*)oa)->op_sv)) &&
10470 	     mode[0] == '>' && mode[1] == '&' &&	/* A dup open. */
10471 	     (last == OpSIBLING(oa)))			/* The bareword. */
10472 	      last->op_private &= ~OPpCONST_STRICT;
10473     }
10474     return ck_fun(o);
10475 }
10476 
10477 OP *
10478 Perl_ck_prototype(pTHX_ OP *o)
10479 {
10480     PERL_ARGS_ASSERT_CK_PROTOTYPE;
10481     if (!(o->op_flags & OPf_KIDS)) {
10482 	op_free(o);
10483 	return newUNOP(OP_PROTOTYPE, 0, newDEFSVOP());
10484     }
10485     return o;
10486 }
10487 
10488 OP *
10489 Perl_ck_refassign(pTHX_ OP *o)
10490 {
10491     OP * const right = cLISTOPo->op_first;
10492     OP * const left = OpSIBLING(right);
10493     OP *varop = cUNOPx(cUNOPx(left)->op_first)->op_first;
10494     bool stacked = 0;
10495 
10496     PERL_ARGS_ASSERT_CK_REFASSIGN;
10497     assert (left);
10498     assert (left->op_type == OP_SREFGEN);
10499 
10500     o->op_private = 0;
10501     /* we use OPpPAD_STATE in refassign to mean either of those things,
10502      * and the code assumes the two flags occupy the same bit position
10503      * in the various ops below */
10504     assert(OPpPAD_STATE == OPpOUR_INTRO);
10505 
10506     switch (varop->op_type) {
10507     case OP_PADAV:
10508 	o->op_private |= OPpLVREF_AV;
10509 	goto settarg;
10510     case OP_PADHV:
10511 	o->op_private |= OPpLVREF_HV;
10512         /* FALLTHROUGH */
10513     case OP_PADSV:
10514       settarg:
10515         o->op_private |= (varop->op_private & (OPpLVAL_INTRO|OPpPAD_STATE));
10516 	o->op_targ = varop->op_targ;
10517 	varop->op_targ = 0;
10518 	PAD_COMPNAME_GEN_set(o->op_targ, PERL_INT_MAX);
10519 	break;
10520 
10521     case OP_RV2AV:
10522 	o->op_private |= OPpLVREF_AV;
10523 	goto checkgv;
10524         NOT_REACHED; /* NOTREACHED */
10525     case OP_RV2HV:
10526 	o->op_private |= OPpLVREF_HV;
10527         /* FALLTHROUGH */
10528     case OP_RV2SV:
10529       checkgv:
10530         o->op_private |= (varop->op_private & (OPpLVAL_INTRO|OPpOUR_INTRO));
10531 	if (cUNOPx(varop)->op_first->op_type != OP_GV) goto bad;
10532       detach_and_stack:
10533 	/* Point varop to its GV kid, detached.  */
10534 	varop = op_sibling_splice(varop, NULL, -1, NULL);
10535 	stacked = TRUE;
10536 	break;
10537     case OP_RV2CV: {
10538 	OP * const kidparent =
10539 	    OpSIBLING(cUNOPx(cUNOPx(varop)->op_first)->op_first);
10540 	OP * const kid = cUNOPx(kidparent)->op_first;
10541 	o->op_private |= OPpLVREF_CV;
10542 	if (kid->op_type == OP_GV) {
10543 	    varop = kidparent;
10544 	    goto detach_and_stack;
10545 	}
10546 	if (kid->op_type != OP_PADCV)	goto bad;
10547 	o->op_targ = kid->op_targ;
10548 	kid->op_targ = 0;
10549 	break;
10550     }
10551     case OP_AELEM:
10552     case OP_HELEM:
10553         o->op_private |= (varop->op_private & OPpLVAL_INTRO);
10554 	o->op_private |= OPpLVREF_ELEM;
10555 	op_null(varop);
10556 	stacked = TRUE;
10557 	/* Detach varop.  */
10558 	op_sibling_splice(cUNOPx(left)->op_first, NULL, -1, NULL);
10559 	break;
10560     default:
10561       bad:
10562 	/* diag_listed_as: Can't modify reference to %s in %s assignment */
10563 	yyerror(Perl_form(aTHX_ "Can't modify reference to %s in scalar "
10564 				"assignment",
10565 				 OP_DESC(varop)));
10566 	return o;
10567     }
10568     if (!FEATURE_REFALIASING_IS_ENABLED)
10569 	Perl_croak(aTHX_
10570 		  "Experimental aliasing via reference not enabled");
10571     Perl_ck_warner_d(aTHX_
10572 		     packWARN(WARN_EXPERIMENTAL__REFALIASING),
10573 		    "Aliasing via reference is experimental");
10574     if (stacked) {
10575 	o->op_flags |= OPf_STACKED;
10576 	op_sibling_splice(o, right, 1, varop);
10577     }
10578     else {
10579 	o->op_flags &=~ OPf_STACKED;
10580 	op_sibling_splice(o, right, 1, NULL);
10581     }
10582     op_free(left);
10583     return o;
10584 }
10585 
10586 OP *
10587 Perl_ck_repeat(pTHX_ OP *o)
10588 {
10589     PERL_ARGS_ASSERT_CK_REPEAT;
10590 
10591     if (cBINOPo->op_first->op_flags & OPf_PARENS) {
10592         OP* kids;
10593 	o->op_private |= OPpREPEAT_DOLIST;
10594         kids = op_sibling_splice(o, NULL, 1, NULL); /* detach first kid */
10595         kids = force_list(kids, 1); /* promote it to a list */
10596         op_sibling_splice(o, NULL, 0, kids); /* and add back */
10597     }
10598     else
10599 	scalar(o);
10600     return o;
10601 }
10602 
10603 OP *
10604 Perl_ck_require(pTHX_ OP *o)
10605 {
10606     GV* gv;
10607 
10608     PERL_ARGS_ASSERT_CK_REQUIRE;
10609 
10610     if (o->op_flags & OPf_KIDS) {	/* Shall we supply missing .pm? */
10611 	SVOP * const kid = (SVOP*)cUNOPo->op_first;
10612 	HEK *hek;
10613 	U32 hash;
10614 	char *s;
10615 	STRLEN len;
10616 	if (kid->op_type == OP_CONST) {
10617 	  SV * const sv = kid->op_sv;
10618 	  U32 const was_readonly = SvREADONLY(sv);
10619 	  if (kid->op_private & OPpCONST_BARE) {
10620             dVAR;
10621 	    const char *end;
10622 
10623 	    if (was_readonly) {
10624 		    SvREADONLY_off(sv);
10625 	    }
10626 	    if (SvIsCOW(sv)) sv_force_normal_flags(sv, 0);
10627 
10628 	    s = SvPVX(sv);
10629 	    len = SvCUR(sv);
10630 	    end = s + len;
10631 	    for (; s < end; s++) {
10632 		if (*s == ':' && s[1] == ':') {
10633 		    *s = '/';
10634 		    Move(s+2, s+1, end - s - 1, char);
10635 		    --end;
10636 		}
10637 	    }
10638 	    SvEND_set(sv, end);
10639 	    sv_catpvs(sv, ".pm");
10640 	    PERL_HASH(hash, SvPVX(sv), SvCUR(sv));
10641 	    hek = share_hek(SvPVX(sv),
10642 			    (SSize_t)SvCUR(sv) * (SvUTF8(sv) ? -1 : 1),
10643 			    hash);
10644 	    sv_sethek(sv, hek);
10645 	    unshare_hek(hek);
10646 	    SvFLAGS(sv) |= was_readonly;
10647 	  }
10648 	  else if (SvPOK(sv) && !SvNIOK(sv) && !SvGMAGICAL(sv)
10649 		&& !SvVOK(sv)) {
10650 	    s = SvPV(sv, len);
10651 	    if (SvREFCNT(sv) > 1) {
10652 		kid->op_sv = newSVpvn_share(
10653 		    s, SvUTF8(sv) ? -(SSize_t)len : (SSize_t)len, 0);
10654 		SvREFCNT_dec_NN(sv);
10655 	    }
10656 	    else {
10657                 dVAR;
10658 		if (was_readonly) SvREADONLY_off(sv);
10659 		PERL_HASH(hash, s, len);
10660 		hek = share_hek(s,
10661 				SvUTF8(sv) ? -(SSize_t)len : (SSize_t)len,
10662 				hash);
10663 		sv_sethek(sv, hek);
10664 		unshare_hek(hek);
10665 		SvFLAGS(sv) |= was_readonly;
10666 	    }
10667 	  }
10668 	}
10669     }
10670 
10671     if (!(o->op_flags & OPf_SPECIAL) /* Wasn't written as CORE::require */
10672 	/* handle override, if any */
10673      && (gv = gv_override("require", 7))) {
10674 	OP *kid, *newop;
10675 	if (o->op_flags & OPf_KIDS) {
10676 	    kid = cUNOPo->op_first;
10677             op_sibling_splice(o, NULL, -1, NULL);
10678 	}
10679 	else {
10680 	    kid = newDEFSVOP();
10681 	}
10682 	op_free(o);
10683 	newop = S_new_entersubop(aTHX_ gv, kid);
10684 	return newop;
10685     }
10686 
10687     return ck_fun(o);
10688 }
10689 
10690 OP *
10691 Perl_ck_return(pTHX_ OP *o)
10692 {
10693     OP *kid;
10694 
10695     PERL_ARGS_ASSERT_CK_RETURN;
10696 
10697     kid = OpSIBLING(cLISTOPo->op_first);
10698     if (CvLVALUE(PL_compcv)) {
10699 	for (; kid; kid = OpSIBLING(kid))
10700 	    op_lvalue(kid, OP_LEAVESUBLV);
10701     }
10702 
10703     return o;
10704 }
10705 
10706 OP *
10707 Perl_ck_select(pTHX_ OP *o)
10708 {
10709     dVAR;
10710     OP* kid;
10711 
10712     PERL_ARGS_ASSERT_CK_SELECT;
10713 
10714     if (o->op_flags & OPf_KIDS) {
10715         kid = OpSIBLING(cLISTOPo->op_first);     /* get past pushmark */
10716         if (kid && OpHAS_SIBLING(kid)) {
10717             OpTYPE_set(o, OP_SSELECT);
10718 	    o = ck_fun(o);
10719 	    return fold_constants(op_integerize(op_std_init(o)));
10720 	}
10721     }
10722     o = ck_fun(o);
10723     kid = OpSIBLING(cLISTOPo->op_first);    /* get past pushmark */
10724     if (kid && kid->op_type == OP_RV2GV)
10725 	kid->op_private &= ~HINT_STRICT_REFS;
10726     return o;
10727 }
10728 
10729 OP *
10730 Perl_ck_shift(pTHX_ OP *o)
10731 {
10732     const I32 type = o->op_type;
10733 
10734     PERL_ARGS_ASSERT_CK_SHIFT;
10735 
10736     if (!(o->op_flags & OPf_KIDS)) {
10737 	OP *argop;
10738 
10739 	if (!CvUNIQUE(PL_compcv)) {
10740 	    o->op_flags |= OPf_SPECIAL;
10741 	    return o;
10742 	}
10743 
10744 	argop = newUNOP(OP_RV2AV, 0, scalar(newGVOP(OP_GV, 0, PL_argvgv)));
10745 	op_free(o);
10746 	return newUNOP(type, 0, scalar(argop));
10747     }
10748     return scalar(ck_fun(o));
10749 }
10750 
10751 OP *
10752 Perl_ck_sort(pTHX_ OP *o)
10753 {
10754     OP *firstkid;
10755     OP *kid;
10756     HV * const hinthv =
10757 	PL_hints & HINT_LOCALIZE_HH ? GvHV(PL_hintgv) : NULL;
10758     U8 stacked;
10759 
10760     PERL_ARGS_ASSERT_CK_SORT;
10761 
10762     if (hinthv) {
10763 	    SV ** const svp = hv_fetchs(hinthv, "sort", FALSE);
10764 	    if (svp) {
10765 		const I32 sorthints = (I32)SvIV(*svp);
10766 		if ((sorthints & HINT_SORT_QUICKSORT) != 0)
10767 		    o->op_private |= OPpSORT_QSORT;
10768 		if ((sorthints & HINT_SORT_STABLE) != 0)
10769 		    o->op_private |= OPpSORT_STABLE;
10770 	    }
10771     }
10772 
10773     if (o->op_flags & OPf_STACKED)
10774 	simplify_sort(o);
10775     firstkid = OpSIBLING(cLISTOPo->op_first);		/* get past pushmark */
10776 
10777     if ((stacked = o->op_flags & OPf_STACKED)) {	/* may have been cleared */
10778 	OP *kid = cUNOPx(firstkid)->op_first;		/* get past null */
10779 
10780         /* if the first arg is a code block, process it and mark sort as
10781          * OPf_SPECIAL */
10782 	if (kid->op_type == OP_SCOPE || kid->op_type == OP_LEAVE) {
10783 	    LINKLIST(kid);
10784 	    if (kid->op_type == OP_LEAVE)
10785 		    op_null(kid);			/* wipe out leave */
10786 	    /* Prevent execution from escaping out of the sort block. */
10787 	    kid->op_next = 0;
10788 
10789 	    /* provide scalar context for comparison function/block */
10790 	    kid = scalar(firstkid);
10791 	    kid->op_next = kid;
10792 	    o->op_flags |= OPf_SPECIAL;
10793 	}
10794 	else if (kid->op_type == OP_CONST
10795 	      && kid->op_private & OPpCONST_BARE) {
10796 	    char tmpbuf[256];
10797 	    STRLEN len;
10798 	    PADOFFSET off;
10799 	    const char * const name = SvPV(kSVOP_sv, len);
10800 	    *tmpbuf = '&';
10801 	    assert (len < 256);
10802 	    Copy(name, tmpbuf+1, len, char);
10803 	    off = pad_findmy_pvn(tmpbuf, len+1, SvUTF8(kSVOP_sv));
10804 	    if (off != NOT_IN_PAD) {
10805 		if (PAD_COMPNAME_FLAGS_isOUR(off)) {
10806 		    SV * const fq =
10807 			newSVhek(HvNAME_HEK(PAD_COMPNAME_OURSTASH(off)));
10808 		    sv_catpvs(fq, "::");
10809 		    sv_catsv(fq, kSVOP_sv);
10810 		    SvREFCNT_dec_NN(kSVOP_sv);
10811 		    kSVOP->op_sv = fq;
10812 		}
10813 		else {
10814 		    OP * const padop = newOP(OP_PADCV, 0);
10815 		    padop->op_targ = off;
10816                     /* replace the const op with the pad op */
10817                     op_sibling_splice(firstkid, NULL, 1, padop);
10818 		    op_free(kid);
10819 		}
10820 	    }
10821 	}
10822 
10823 	firstkid = OpSIBLING(firstkid);
10824     }
10825 
10826     for (kid = firstkid; kid; kid = OpSIBLING(kid)) {
10827 	/* provide list context for arguments */
10828 	list(kid);
10829 	if (stacked)
10830 	    op_lvalue(kid, OP_GREPSTART);
10831     }
10832 
10833     return o;
10834 }
10835 
10836 /* for sort { X } ..., where X is one of
10837  *   $a <=> $b, $b <= $a, $a cmp $b, $b cmp $a
10838  * elide the second child of the sort (the one containing X),
10839  * and set these flags as appropriate
10840 	OPpSORT_NUMERIC;
10841 	OPpSORT_INTEGER;
10842 	OPpSORT_DESCEND;
10843  * Also, check and warn on lexical $a, $b.
10844  */
10845 
10846 STATIC void
10847 S_simplify_sort(pTHX_ OP *o)
10848 {
10849     OP *kid = OpSIBLING(cLISTOPo->op_first);	/* get past pushmark */
10850     OP *k;
10851     int descending;
10852     GV *gv;
10853     const char *gvname;
10854     bool have_scopeop;
10855 
10856     PERL_ARGS_ASSERT_SIMPLIFY_SORT;
10857 
10858     kid = kUNOP->op_first;				/* get past null */
10859     if (!(have_scopeop = kid->op_type == OP_SCOPE)
10860      && kid->op_type != OP_LEAVE)
10861 	return;
10862     kid = kLISTOP->op_last;				/* get past scope */
10863     switch(kid->op_type) {
10864 	case OP_NCMP:
10865 	case OP_I_NCMP:
10866 	case OP_SCMP:
10867 	    if (!have_scopeop) goto padkids;
10868 	    break;
10869 	default:
10870 	    return;
10871     }
10872     k = kid;						/* remember this node*/
10873     if (kBINOP->op_first->op_type != OP_RV2SV
10874      || kBINOP->op_last ->op_type != OP_RV2SV)
10875     {
10876 	/*
10877 	   Warn about my($a) or my($b) in a sort block, *if* $a or $b is
10878 	   then used in a comparison.  This catches most, but not
10879 	   all cases.  For instance, it catches
10880 	       sort { my($a); $a <=> $b }
10881 	   but not
10882 	       sort { my($a); $a < $b ? -1 : $a == $b ? 0 : 1; }
10883 	   (although why you'd do that is anyone's guess).
10884 	*/
10885 
10886        padkids:
10887 	if (!ckWARN(WARN_SYNTAX)) return;
10888 	kid = kBINOP->op_first;
10889 	do {
10890 	    if (kid->op_type == OP_PADSV) {
10891 		PADNAME * const name = PAD_COMPNAME(kid->op_targ);
10892 		if (PadnameLEN(name) == 2 && *PadnamePV(name) == '$'
10893 		 && (  PadnamePV(name)[1] == 'a'
10894 		    || PadnamePV(name)[1] == 'b'  ))
10895 		    /* diag_listed_as: "my %s" used in sort comparison */
10896 		    Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
10897 				     "\"%s %s\" used in sort comparison",
10898 				      PadnameIsSTATE(name)
10899 					? "state"
10900 					: "my",
10901 				      PadnamePV(name));
10902 	    }
10903 	} while ((kid = OpSIBLING(kid)));
10904 	return;
10905     }
10906     kid = kBINOP->op_first;				/* get past cmp */
10907     if (kUNOP->op_first->op_type != OP_GV)
10908 	return;
10909     kid = kUNOP->op_first;				/* get past rv2sv */
10910     gv = kGVOP_gv;
10911     if (GvSTASH(gv) != PL_curstash)
10912 	return;
10913     gvname = GvNAME(gv);
10914     if (*gvname == 'a' && gvname[1] == '\0')
10915 	descending = 0;
10916     else if (*gvname == 'b' && gvname[1] == '\0')
10917 	descending = 1;
10918     else
10919 	return;
10920 
10921     kid = k;						/* back to cmp */
10922     /* already checked above that it is rv2sv */
10923     kid = kBINOP->op_last;				/* down to 2nd arg */
10924     if (kUNOP->op_first->op_type != OP_GV)
10925 	return;
10926     kid = kUNOP->op_first;				/* get past rv2sv */
10927     gv = kGVOP_gv;
10928     if (GvSTASH(gv) != PL_curstash)
10929 	return;
10930     gvname = GvNAME(gv);
10931     if ( descending
10932 	 ? !(*gvname == 'a' && gvname[1] == '\0')
10933 	 : !(*gvname == 'b' && gvname[1] == '\0'))
10934 	return;
10935     o->op_flags &= ~(OPf_STACKED | OPf_SPECIAL);
10936     if (descending)
10937 	o->op_private |= OPpSORT_DESCEND;
10938     if (k->op_type == OP_NCMP)
10939 	o->op_private |= OPpSORT_NUMERIC;
10940     if (k->op_type == OP_I_NCMP)
10941 	o->op_private |= OPpSORT_NUMERIC | OPpSORT_INTEGER;
10942     kid = OpSIBLING(cLISTOPo->op_first);
10943     /* cut out and delete old block (second sibling) */
10944     op_sibling_splice(o, cLISTOPo->op_first, 1, NULL);
10945     op_free(kid);
10946 }
10947 
10948 OP *
10949 Perl_ck_split(pTHX_ OP *o)
10950 {
10951     dVAR;
10952     OP *kid;
10953 
10954     PERL_ARGS_ASSERT_CK_SPLIT;
10955 
10956     if (o->op_flags & OPf_STACKED)
10957 	return no_fh_allowed(o);
10958 
10959     kid = cLISTOPo->op_first;
10960     if (kid->op_type != OP_NULL)
10961 	Perl_croak(aTHX_ "panic: ck_split, type=%u", (unsigned) kid->op_type);
10962     /* delete leading NULL node, then add a CONST if no other nodes */
10963     op_sibling_splice(o, NULL, 1,
10964 	OpHAS_SIBLING(kid) ? NULL : newSVOP(OP_CONST, 0, newSVpvs(" ")));
10965     op_free(kid);
10966     kid = cLISTOPo->op_first;
10967 
10968     if (kid->op_type != OP_MATCH || kid->op_flags & OPf_STACKED) {
10969         /* remove kid, and replace with new optree */
10970         op_sibling_splice(o, NULL, 1, NULL);
10971         /* OPf_SPECIAL is used to trigger split " " behavior */
10972         kid = pmruntime( newPMOP(OP_MATCH, OPf_SPECIAL), kid, NULL, 0, 0);
10973         op_sibling_splice(o, NULL, 0, kid);
10974     }
10975     OpTYPE_set(kid, OP_PUSHRE);
10976     /* target implies @ary=..., so wipe it */
10977     kid->op_targ = 0;
10978     scalar(kid);
10979     if (((PMOP *)kid)->op_pmflags & PMf_GLOBAL) {
10980       Perl_ck_warner(aTHX_ packWARN(WARN_REGEXP),
10981 		     "Use of /g modifier is meaningless in split");
10982     }
10983 
10984     if (!OpHAS_SIBLING(kid))
10985 	op_append_elem(OP_SPLIT, o, newDEFSVOP());
10986 
10987     kid = OpSIBLING(kid);
10988     assert(kid);
10989     scalar(kid);
10990 
10991     if (!OpHAS_SIBLING(kid))
10992     {
10993 	op_append_elem(OP_SPLIT, o, newSVOP(OP_CONST, 0, newSViv(0)));
10994 	o->op_private |= OPpSPLIT_IMPLIM;
10995     }
10996     assert(OpHAS_SIBLING(kid));
10997 
10998     kid = OpSIBLING(kid);
10999     scalar(kid);
11000 
11001     if (OpHAS_SIBLING(kid))
11002 	return too_many_arguments_pv(o,OP_DESC(o), 0);
11003 
11004     return o;
11005 }
11006 
11007 OP *
11008 Perl_ck_stringify(pTHX_ OP *o)
11009 {
11010     OP * const kid = OpSIBLING(cUNOPo->op_first);
11011     PERL_ARGS_ASSERT_CK_STRINGIFY;
11012     if ((   kid->op_type == OP_JOIN || kid->op_type == OP_QUOTEMETA
11013          || kid->op_type == OP_LC   || kid->op_type == OP_LCFIRST
11014          || kid->op_type == OP_UC   || kid->op_type == OP_UCFIRST)
11015 	&& !OpHAS_SIBLING(kid)) /* syntax errs can leave extra children */
11016     {
11017 	op_sibling_splice(o, cUNOPo->op_first, -1, NULL);
11018 	op_free(o);
11019 	return kid;
11020     }
11021     return ck_fun(o);
11022 }
11023 
11024 OP *
11025 Perl_ck_join(pTHX_ OP *o)
11026 {
11027     OP * const kid = OpSIBLING(cLISTOPo->op_first);
11028 
11029     PERL_ARGS_ASSERT_CK_JOIN;
11030 
11031     if (kid && kid->op_type == OP_MATCH) {
11032 	if (ckWARN(WARN_SYNTAX)) {
11033             const REGEXP *re = PM_GETRE(kPMOP);
11034             const SV *msg = re
11035                     ? newSVpvn_flags( RX_PRECOMP_const(re), RX_PRELEN(re),
11036                                             SVs_TEMP | ( RX_UTF8(re) ? SVf_UTF8 : 0 ) )
11037                     : newSVpvs_flags( "STRING", SVs_TEMP );
11038 	    Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
11039 			"/%"SVf"/ should probably be written as \"%"SVf"\"",
11040 			SVfARG(msg), SVfARG(msg));
11041 	}
11042     }
11043     if (kid
11044      && (kid->op_type == OP_CONST /* an innocent, unsuspicious separator */
11045 	|| (kid->op_type == OP_PADSV && !(kid->op_private & OPpLVAL_INTRO))
11046 	|| (  kid->op_type==OP_RV2SV && kUNOP->op_first->op_type == OP_GV
11047 	   && !(kid->op_private & (OPpLVAL_INTRO|OPpOUR_INTRO)))))
11048     {
11049 	const OP * const bairn = OpSIBLING(kid); /* the list */
11050 	if (bairn && !OpHAS_SIBLING(bairn) /* single-item list */
11051 	 && OP_GIMME(bairn,0) == G_SCALAR)
11052 	{
11053 	    OP * const ret = op_convert_list(OP_STRINGIFY, OPf_FOLDED,
11054 				     op_sibling_splice(o, kid, 1, NULL));
11055 	    op_free(o);
11056 	    return ret;
11057 	}
11058     }
11059 
11060     return ck_fun(o);
11061 }
11062 
11063 /*
11064 =for apidoc Am|CV *|rv2cv_op_cv|OP *cvop|U32 flags
11065 
11066 Examines an op, which is expected to identify a subroutine at runtime,
11067 and attempts to determine at compile time which subroutine it identifies.
11068 This is normally used during Perl compilation to determine whether
11069 a prototype can be applied to a function call.  C<cvop> is the op
11070 being considered, normally an C<rv2cv> op.  A pointer to the identified
11071 subroutine is returned, if it could be determined statically, and a null
11072 pointer is returned if it was not possible to determine statically.
11073 
11074 Currently, the subroutine can be identified statically if the RV that the
11075 C<rv2cv> is to operate on is provided by a suitable C<gv> or C<const> op.
11076 A C<gv> op is suitable if the GV's CV slot is populated.  A C<const> op is
11077 suitable if the constant value must be an RV pointing to a CV.  Details of
11078 this process may change in future versions of Perl.  If the C<rv2cv> op
11079 has the C<OPpENTERSUB_AMPER> flag set then no attempt is made to identify
11080 the subroutine statically: this flag is used to suppress compile-time
11081 magic on a subroutine call, forcing it to use default runtime behaviour.
11082 
11083 If C<flags> has the bit C<RV2CVOPCV_MARK_EARLY> set, then the handling
11084 of a GV reference is modified.  If a GV was examined and its CV slot was
11085 found to be empty, then the C<gv> op has the C<OPpEARLY_CV> flag set.
11086 If the op is not optimised away, and the CV slot is later populated with
11087 a subroutine having a prototype, that flag eventually triggers the warning
11088 "called too early to check prototype".
11089 
11090 If C<flags> has the bit C<RV2CVOPCV_RETURN_NAME_GV> set, then instead
11091 of returning a pointer to the subroutine it returns a pointer to the
11092 GV giving the most appropriate name for the subroutine in this context.
11093 Normally this is just the C<CvGV> of the subroutine, but for an anonymous
11094 (C<CvANON>) subroutine that is referenced through a GV it will be the
11095 referencing GV.  The resulting C<GV*> is cast to C<CV*> to be returned.
11096 A null pointer is returned as usual if there is no statically-determinable
11097 subroutine.
11098 
11099 =cut
11100 */
11101 
11102 /* shared by toke.c:yylex */
11103 CV *
11104 Perl_find_lexical_cv(pTHX_ PADOFFSET off)
11105 {
11106     PADNAME *name = PAD_COMPNAME(off);
11107     CV *compcv = PL_compcv;
11108     while (PadnameOUTER(name)) {
11109 	assert(PARENT_PAD_INDEX(name));
11110 	compcv = CvOUTSIDE(compcv);
11111 	name = PadlistNAMESARRAY(CvPADLIST(compcv))
11112 		[off = PARENT_PAD_INDEX(name)];
11113     }
11114     assert(!PadnameIsOUR(name));
11115     if (!PadnameIsSTATE(name) && PadnamePROTOCV(name)) {
11116 	return PadnamePROTOCV(name);
11117     }
11118     return (CV *)AvARRAY(PadlistARRAY(CvPADLIST(compcv))[1])[off];
11119 }
11120 
11121 CV *
11122 Perl_rv2cv_op_cv(pTHX_ OP *cvop, U32 flags)
11123 {
11124     OP *rvop;
11125     CV *cv;
11126     GV *gv;
11127     PERL_ARGS_ASSERT_RV2CV_OP_CV;
11128     if (flags & ~RV2CVOPCV_FLAG_MASK)
11129 	Perl_croak(aTHX_ "panic: rv2cv_op_cv bad flags %x", (unsigned)flags);
11130     if (cvop->op_type != OP_RV2CV)
11131 	return NULL;
11132     if (cvop->op_private & OPpENTERSUB_AMPER)
11133 	return NULL;
11134     if (!(cvop->op_flags & OPf_KIDS))
11135 	return NULL;
11136     rvop = cUNOPx(cvop)->op_first;
11137     switch (rvop->op_type) {
11138 	case OP_GV: {
11139 	    gv = cGVOPx_gv(rvop);
11140 	    if (!isGV(gv)) {
11141 		if (SvROK(gv) && SvTYPE(SvRV(gv)) == SVt_PVCV) {
11142 		    cv = MUTABLE_CV(SvRV(gv));
11143 		    gv = NULL;
11144 		    break;
11145 		}
11146 		if (flags & RV2CVOPCV_RETURN_STUB)
11147 		    return (CV *)gv;
11148 		else return NULL;
11149 	    }
11150 	    cv = GvCVu(gv);
11151 	    if (!cv) {
11152 		if (flags & RV2CVOPCV_MARK_EARLY)
11153 		    rvop->op_private |= OPpEARLY_CV;
11154 		return NULL;
11155 	    }
11156 	} break;
11157 	case OP_CONST: {
11158 	    SV *rv = cSVOPx_sv(rvop);
11159 	    if (!SvROK(rv))
11160 		return NULL;
11161 	    cv = (CV*)SvRV(rv);
11162 	    gv = NULL;
11163 	} break;
11164 	case OP_PADCV: {
11165 	    cv = find_lexical_cv(rvop->op_targ);
11166 	    gv = NULL;
11167 	} break;
11168 	default: {
11169 	    return NULL;
11170 	} NOT_REACHED; /* NOTREACHED */
11171     }
11172     if (SvTYPE((SV*)cv) != SVt_PVCV)
11173 	return NULL;
11174     if (flags & (RV2CVOPCV_RETURN_NAME_GV|RV2CVOPCV_MAYBE_NAME_GV)) {
11175 	if ((!CvANON(cv) || !gv) && !CvLEXICAL(cv)
11176 	 && ((flags & RV2CVOPCV_RETURN_NAME_GV) || !CvNAMED(cv)))
11177 	    gv = CvGV(cv);
11178 	return (CV*)gv;
11179     } else {
11180 	return cv;
11181     }
11182 }
11183 
11184 /*
11185 =for apidoc Am|OP *|ck_entersub_args_list|OP *entersubop
11186 
11187 Performs the default fixup of the arguments part of an C<entersub>
11188 op tree.  This consists of applying list context to each of the
11189 argument ops.  This is the standard treatment used on a call marked
11190 with C<&>, or a method call, or a call through a subroutine reference,
11191 or any other call where the callee can't be identified at compile time,
11192 or a call where the callee has no prototype.
11193 
11194 =cut
11195 */
11196 
11197 OP *
11198 Perl_ck_entersub_args_list(pTHX_ OP *entersubop)
11199 {
11200     OP *aop;
11201 
11202     PERL_ARGS_ASSERT_CK_ENTERSUB_ARGS_LIST;
11203 
11204     aop = cUNOPx(entersubop)->op_first;
11205     if (!OpHAS_SIBLING(aop))
11206 	aop = cUNOPx(aop)->op_first;
11207     for (aop = OpSIBLING(aop); OpHAS_SIBLING(aop); aop = OpSIBLING(aop)) {
11208         /* skip the extra attributes->import() call implicitly added in
11209          * something like foo(my $x : bar)
11210          */
11211         if (   aop->op_type == OP_ENTERSUB
11212             && (aop->op_flags & OPf_WANT) == OPf_WANT_VOID
11213         )
11214             continue;
11215         list(aop);
11216         op_lvalue(aop, OP_ENTERSUB);
11217     }
11218     return entersubop;
11219 }
11220 
11221 /*
11222 =for apidoc Am|OP *|ck_entersub_args_proto|OP *entersubop|GV *namegv|SV *protosv
11223 
11224 Performs the fixup of the arguments part of an C<entersub> op tree
11225 based on a subroutine prototype.  This makes various modifications to
11226 the argument ops, from applying context up to inserting C<refgen> ops,
11227 and checking the number and syntactic types of arguments, as directed by
11228 the prototype.  This is the standard treatment used on a subroutine call,
11229 not marked with C<&>, where the callee can be identified at compile time
11230 and has a prototype.
11231 
11232 C<protosv> supplies the subroutine prototype to be applied to the call.
11233 It may be a normal defined scalar, of which the string value will be used.
11234 Alternatively, for convenience, it may be a subroutine object (a C<CV*>
11235 that has been cast to C<SV*>) which has a prototype.  The prototype
11236 supplied, in whichever form, does not need to match the actual callee
11237 referenced by the op tree.
11238 
11239 If the argument ops disagree with the prototype, for example by having
11240 an unacceptable number of arguments, a valid op tree is returned anyway.
11241 The error is reflected in the parser state, normally resulting in a single
11242 exception at the top level of parsing which covers all the compilation
11243 errors that occurred.  In the error message, the callee is referred to
11244 by the name defined by the C<namegv> parameter.
11245 
11246 =cut
11247 */
11248 
11249 OP *
11250 Perl_ck_entersub_args_proto(pTHX_ OP *entersubop, GV *namegv, SV *protosv)
11251 {
11252     STRLEN proto_len;
11253     const char *proto, *proto_end;
11254     OP *aop, *prev, *cvop, *parent;
11255     int optional = 0;
11256     I32 arg = 0;
11257     I32 contextclass = 0;
11258     const char *e = NULL;
11259     PERL_ARGS_ASSERT_CK_ENTERSUB_ARGS_PROTO;
11260     if (SvTYPE(protosv) == SVt_PVCV ? !SvPOK(protosv) : !SvOK(protosv))
11261 	Perl_croak(aTHX_ "panic: ck_entersub_args_proto CV with no proto, "
11262 		   "flags=%lx", (unsigned long) SvFLAGS(protosv));
11263     if (SvTYPE(protosv) == SVt_PVCV)
11264 	 proto = CvPROTO(protosv), proto_len = CvPROTOLEN(protosv);
11265     else proto = SvPV(protosv, proto_len);
11266     proto = S_strip_spaces(aTHX_ proto, &proto_len);
11267     proto_end = proto + proto_len;
11268     parent = entersubop;
11269     aop = cUNOPx(entersubop)->op_first;
11270     if (!OpHAS_SIBLING(aop)) {
11271         parent = aop;
11272 	aop = cUNOPx(aop)->op_first;
11273     }
11274     prev = aop;
11275     aop = OpSIBLING(aop);
11276     for (cvop = aop; OpHAS_SIBLING(cvop); cvop = OpSIBLING(cvop)) ;
11277     while (aop != cvop) {
11278 	OP* o3 = aop;
11279 
11280 	if (proto >= proto_end)
11281 	{
11282 	    SV * const namesv = cv_name((CV *)namegv, NULL, 0);
11283 	    yyerror_pv(Perl_form(aTHX_ "Too many arguments for %"SVf,
11284 					SVfARG(namesv)), SvUTF8(namesv));
11285 	    return entersubop;
11286 	}
11287 
11288 	switch (*proto) {
11289 	    case ';':
11290 		optional = 1;
11291 		proto++;
11292 		continue;
11293 	    case '_':
11294 		/* _ must be at the end */
11295 		if (proto[1] && !strchr(";@%", proto[1]))
11296 		    goto oops;
11297                 /* FALLTHROUGH */
11298 	    case '$':
11299 		proto++;
11300 		arg++;
11301 		scalar(aop);
11302 		break;
11303 	    case '%':
11304 	    case '@':
11305 		list(aop);
11306 		arg++;
11307 		break;
11308 	    case '&':
11309 		proto++;
11310 		arg++;
11311 		if (    o3->op_type != OP_UNDEF
11312                     && (o3->op_type != OP_SREFGEN
11313                         || (  cUNOPx(cUNOPx(o3)->op_first)->op_first->op_type
11314                                 != OP_ANONCODE
11315                             && cUNOPx(cUNOPx(o3)->op_first)->op_first->op_type
11316                                 != OP_RV2CV)))
11317 		    bad_type_gv(arg, namegv, o3,
11318 			    arg == 1 ? "block or sub {}" : "sub {}");
11319 		break;
11320 	    case '*':
11321 		/* '*' allows any scalar type, including bareword */
11322 		proto++;
11323 		arg++;
11324 		if (o3->op_type == OP_RV2GV)
11325 		    goto wrapref;	/* autoconvert GLOB -> GLOBref */
11326 		else if (o3->op_type == OP_CONST)
11327 		    o3->op_private &= ~OPpCONST_STRICT;
11328 		scalar(aop);
11329 		break;
11330 	    case '+':
11331 		proto++;
11332 		arg++;
11333 		if (o3->op_type == OP_RV2AV ||
11334 		    o3->op_type == OP_PADAV ||
11335 		    o3->op_type == OP_RV2HV ||
11336 		    o3->op_type == OP_PADHV
11337 		) {
11338 		    goto wrapref;
11339 		}
11340 		scalar(aop);
11341 		break;
11342 	    case '[': case ']':
11343 		goto oops;
11344 
11345 	    case '\\':
11346 		proto++;
11347 		arg++;
11348 	    again:
11349 		switch (*proto++) {
11350 		    case '[':
11351 			if (contextclass++ == 0) {
11352 			    e = strchr(proto, ']');
11353 			    if (!e || e == proto)
11354 				goto oops;
11355 			}
11356 			else
11357 			    goto oops;
11358 			goto again;
11359 
11360 		    case ']':
11361 			if (contextclass) {
11362 			    const char *p = proto;
11363 			    const char *const end = proto;
11364 			    contextclass = 0;
11365 			    while (*--p != '[')
11366 				/* \[$] accepts any scalar lvalue */
11367 				if (*p == '$'
11368 				 && Perl_op_lvalue_flags(aTHX_
11369 				     scalar(o3),
11370 				     OP_READ, /* not entersub */
11371 				     OP_LVALUE_NO_CROAK
11372 				    )) goto wrapref;
11373 			    bad_type_gv(arg, namegv, o3,
11374 				    Perl_form(aTHX_ "one of %.*s",(int)(end - p), p));
11375 			} else
11376 			    goto oops;
11377 			break;
11378 		    case '*':
11379 			if (o3->op_type == OP_RV2GV)
11380 			    goto wrapref;
11381 			if (!contextclass)
11382 			    bad_type_gv(arg, namegv, o3, "symbol");
11383 			break;
11384 		    case '&':
11385 			if (o3->op_type == OP_ENTERSUB
11386 			 && !(o3->op_flags & OPf_STACKED))
11387 			    goto wrapref;
11388 			if (!contextclass)
11389 			    bad_type_gv(arg, namegv, o3, "subroutine");
11390 			break;
11391 		    case '$':
11392 			if (o3->op_type == OP_RV2SV ||
11393 				o3->op_type == OP_PADSV ||
11394 				o3->op_type == OP_HELEM ||
11395 				o3->op_type == OP_AELEM)
11396 			    goto wrapref;
11397 			if (!contextclass) {
11398 			    /* \$ accepts any scalar lvalue */
11399 			    if (Perl_op_lvalue_flags(aTHX_
11400 				    scalar(o3),
11401 				    OP_READ,  /* not entersub */
11402 				    OP_LVALUE_NO_CROAK
11403 			       )) goto wrapref;
11404 			    bad_type_gv(arg, namegv, o3, "scalar");
11405 			}
11406 			break;
11407 		    case '@':
11408 			if (o3->op_type == OP_RV2AV ||
11409 				o3->op_type == OP_PADAV)
11410 			{
11411 			    o3->op_flags &=~ OPf_PARENS;
11412 			    goto wrapref;
11413 			}
11414 			if (!contextclass)
11415 			    bad_type_gv(arg, namegv, o3, "array");
11416 			break;
11417 		    case '%':
11418 			if (o3->op_type == OP_RV2HV ||
11419 				o3->op_type == OP_PADHV)
11420 			{
11421 			    o3->op_flags &=~ OPf_PARENS;
11422 			    goto wrapref;
11423 			}
11424 			if (!contextclass)
11425 			    bad_type_gv(arg, namegv, o3, "hash");
11426 			break;
11427 		    wrapref:
11428                             aop = S_op_sibling_newUNOP(aTHX_ parent, prev,
11429                                                 OP_REFGEN, 0);
11430 			if (contextclass && e) {
11431 			    proto = e + 1;
11432 			    contextclass = 0;
11433 			}
11434 			break;
11435 		    default: goto oops;
11436 		}
11437 		if (contextclass)
11438 		    goto again;
11439 		break;
11440 	    case ' ':
11441 		proto++;
11442 		continue;
11443 	    default:
11444 	    oops: {
11445 		Perl_croak(aTHX_ "Malformed prototype for %"SVf": %"SVf,
11446 				  SVfARG(cv_name((CV *)namegv, NULL, 0)),
11447 				  SVfARG(protosv));
11448             }
11449 	}
11450 
11451 	op_lvalue(aop, OP_ENTERSUB);
11452 	prev = aop;
11453 	aop = OpSIBLING(aop);
11454     }
11455     if (aop == cvop && *proto == '_') {
11456 	/* generate an access to $_ */
11457         op_sibling_splice(parent, prev, 0, newDEFSVOP());
11458     }
11459     if (!optional && proto_end > proto &&
11460 	(*proto != '@' && *proto != '%' && *proto != ';' && *proto != '_'))
11461     {
11462 	SV * const namesv = cv_name((CV *)namegv, NULL, 0);
11463 	yyerror_pv(Perl_form(aTHX_ "Not enough arguments for %"SVf,
11464 				    SVfARG(namesv)), SvUTF8(namesv));
11465     }
11466     return entersubop;
11467 }
11468 
11469 /*
11470 =for apidoc Am|OP *|ck_entersub_args_proto_or_list|OP *entersubop|GV *namegv|SV *protosv
11471 
11472 Performs the fixup of the arguments part of an C<entersub> op tree either
11473 based on a subroutine prototype or using default list-context processing.
11474 This is the standard treatment used on a subroutine call, not marked
11475 with C<&>, where the callee can be identified at compile time.
11476 
11477 C<protosv> supplies the subroutine prototype to be applied to the call,
11478 or indicates that there is no prototype.  It may be a normal scalar,
11479 in which case if it is defined then the string value will be used
11480 as a prototype, and if it is undefined then there is no prototype.
11481 Alternatively, for convenience, it may be a subroutine object (a C<CV*>
11482 that has been cast to C<SV*>), of which the prototype will be used if it
11483 has one.  The prototype (or lack thereof) supplied, in whichever form,
11484 does not need to match the actual callee referenced by the op tree.
11485 
11486 If the argument ops disagree with the prototype, for example by having
11487 an unacceptable number of arguments, a valid op tree is returned anyway.
11488 The error is reflected in the parser state, normally resulting in a single
11489 exception at the top level of parsing which covers all the compilation
11490 errors that occurred.  In the error message, the callee is referred to
11491 by the name defined by the C<namegv> parameter.
11492 
11493 =cut
11494 */
11495 
11496 OP *
11497 Perl_ck_entersub_args_proto_or_list(pTHX_ OP *entersubop,
11498 	GV *namegv, SV *protosv)
11499 {
11500     PERL_ARGS_ASSERT_CK_ENTERSUB_ARGS_PROTO_OR_LIST;
11501     if (SvTYPE(protosv) == SVt_PVCV ? SvPOK(protosv) : SvOK(protosv))
11502 	return ck_entersub_args_proto(entersubop, namegv, protosv);
11503     else
11504 	return ck_entersub_args_list(entersubop);
11505 }
11506 
11507 OP *
11508 Perl_ck_entersub_args_core(pTHX_ OP *entersubop, GV *namegv, SV *protosv)
11509 {
11510     int opnum = SvTYPE(protosv) == SVt_PVCV ? 0 : (int)SvUV(protosv);
11511     OP *aop = cUNOPx(entersubop)->op_first;
11512 
11513     PERL_ARGS_ASSERT_CK_ENTERSUB_ARGS_CORE;
11514 
11515     if (!opnum) {
11516 	OP *cvop;
11517 	if (!OpHAS_SIBLING(aop))
11518 	    aop = cUNOPx(aop)->op_first;
11519 	aop = OpSIBLING(aop);
11520 	for (cvop = aop; OpSIBLING(cvop); cvop = OpSIBLING(cvop)) ;
11521 	if (aop != cvop)
11522 	    (void)too_many_arguments_pv(entersubop, GvNAME(namegv), 0);
11523 
11524 	op_free(entersubop);
11525 	switch(GvNAME(namegv)[2]) {
11526 	case 'F': return newSVOP(OP_CONST, 0,
11527 					newSVpv(CopFILE(PL_curcop),0));
11528 	case 'L': return newSVOP(
11529 	                   OP_CONST, 0,
11530                            Perl_newSVpvf(aTHX_
11531 	                     "%"IVdf, (IV)CopLINE(PL_curcop)
11532 	                   )
11533 	                 );
11534 	case 'P': return newSVOP(OP_CONST, 0,
11535 	                           (PL_curstash
11536 	                             ? newSVhek(HvNAME_HEK(PL_curstash))
11537 	                             : &PL_sv_undef
11538 	                           )
11539 	                        );
11540 	}
11541 	NOT_REACHED; /* NOTREACHED */
11542     }
11543     else {
11544 	OP *prev, *cvop, *first, *parent;
11545 	U32 flags = 0;
11546 
11547         parent = entersubop;
11548         if (!OpHAS_SIBLING(aop)) {
11549             parent = aop;
11550 	    aop = cUNOPx(aop)->op_first;
11551         }
11552 
11553 	first = prev = aop;
11554 	aop = OpSIBLING(aop);
11555         /* find last sibling */
11556 	for (cvop = aop;
11557 	     OpHAS_SIBLING(cvop);
11558 	     prev = cvop, cvop = OpSIBLING(cvop))
11559 	    ;
11560         if (!(cvop->op_private & OPpENTERSUB_NOPAREN)
11561             /* Usually, OPf_SPECIAL on an op with no args means that it had
11562              * parens, but these have their own meaning for that flag: */
11563             && opnum != OP_VALUES && opnum != OP_KEYS && opnum != OP_EACH
11564             && opnum != OP_DELETE && opnum != OP_EXISTS)
11565                 flags |= OPf_SPECIAL;
11566         /* excise cvop from end of sibling chain */
11567         op_sibling_splice(parent, prev, 1, NULL);
11568 	op_free(cvop);
11569 	if (aop == cvop) aop = NULL;
11570 
11571         /* detach remaining siblings from the first sibling, then
11572          * dispose of original optree */
11573 
11574         if (aop)
11575             op_sibling_splice(parent, first, -1, NULL);
11576 	op_free(entersubop);
11577 
11578 	if (opnum == OP_ENTEREVAL
11579 	 && GvNAMELEN(namegv)==9 && strnEQ(GvNAME(namegv), "evalbytes", 9))
11580 	    flags |= OPpEVAL_BYTES <<8;
11581 
11582 	switch (PL_opargs[opnum] & OA_CLASS_MASK) {
11583 	case OA_UNOP:
11584 	case OA_BASEOP_OR_UNOP:
11585 	case OA_FILESTATOP:
11586 	    return aop ? newUNOP(opnum,flags,aop) : newOP(opnum,flags);
11587 	case OA_BASEOP:
11588 	    if (aop) {
11589 		    (void)too_many_arguments_pv(aop, GvNAME(namegv), 0);
11590 		op_free(aop);
11591 	    }
11592 	    return opnum == OP_RUNCV
11593 		? newPVOP(OP_RUNCV,0,NULL)
11594 		: newOP(opnum,0);
11595 	default:
11596 	    return op_convert_list(opnum,0,aop);
11597 	}
11598     }
11599     NOT_REACHED; /* NOTREACHED */
11600     return entersubop;
11601 }
11602 
11603 /*
11604 =for apidoc Am|void|cv_get_call_checker|CV *cv|Perl_call_checker *ckfun_p|SV **ckobj_p
11605 
11606 Retrieves the function that will be used to fix up a call to C<cv>.
11607 Specifically, the function is applied to an C<entersub> op tree for a
11608 subroutine call, not marked with C<&>, where the callee can be identified
11609 at compile time as C<cv>.
11610 
11611 The C-level function pointer is returned in C<*ckfun_p>, and an SV
11612 argument for it is returned in C<*ckobj_p>.  The function is intended
11613 to be called in this manner:
11614 
11615  entersubop = (*ckfun_p)(aTHX_ entersubop, namegv, (*ckobj_p));
11616 
11617 In this call, C<entersubop> is a pointer to the C<entersub> op,
11618 which may be replaced by the check function, and C<namegv> is a GV
11619 supplying the name that should be used by the check function to refer
11620 to the callee of the C<entersub> op if it needs to emit any diagnostics.
11621 It is permitted to apply the check function in non-standard situations,
11622 such as to a call to a different subroutine or to a method call.
11623 
11624 By default, the function is
11625 L<Perl_ck_entersub_args_proto_or_list|/ck_entersub_args_proto_or_list>,
11626 and the SV parameter is C<cv> itself.  This implements standard
11627 prototype processing.  It can be changed, for a particular subroutine,
11628 by L</cv_set_call_checker>.
11629 
11630 =cut
11631 */
11632 
11633 static void
11634 S_cv_get_call_checker(CV *cv, Perl_call_checker *ckfun_p, SV **ckobj_p,
11635 		      U8 *flagsp)
11636 {
11637     MAGIC *callmg;
11638     callmg = SvMAGICAL((SV*)cv) ? mg_find((SV*)cv, PERL_MAGIC_checkcall) : NULL;
11639     if (callmg) {
11640 	*ckfun_p = DPTR2FPTR(Perl_call_checker, callmg->mg_ptr);
11641 	*ckobj_p = callmg->mg_obj;
11642 	if (flagsp) *flagsp = callmg->mg_flags;
11643     } else {
11644 	*ckfun_p = Perl_ck_entersub_args_proto_or_list;
11645 	*ckobj_p = (SV*)cv;
11646 	if (flagsp) *flagsp = 0;
11647     }
11648 }
11649 
11650 void
11651 Perl_cv_get_call_checker(pTHX_ CV *cv, Perl_call_checker *ckfun_p, SV **ckobj_p)
11652 {
11653     PERL_ARGS_ASSERT_CV_GET_CALL_CHECKER;
11654     PERL_UNUSED_CONTEXT;
11655     S_cv_get_call_checker(cv, ckfun_p, ckobj_p, NULL);
11656 }
11657 
11658 /*
11659 =for apidoc Am|void|cv_set_call_checker_flags|CV *cv|Perl_call_checker ckfun|SV *ckobj|U32 flags
11660 
11661 Sets the function that will be used to fix up a call to C<cv>.
11662 Specifically, the function is applied to an C<entersub> op tree for a
11663 subroutine call, not marked with C<&>, where the callee can be identified
11664 at compile time as C<cv>.
11665 
11666 The C-level function pointer is supplied in C<ckfun>, and an SV argument
11667 for it is supplied in C<ckobj>.  The function should be defined like this:
11668 
11669     STATIC OP * ckfun(pTHX_ OP *op, GV *namegv, SV *ckobj)
11670 
11671 It is intended to be called in this manner:
11672 
11673     entersubop = ckfun(aTHX_ entersubop, namegv, ckobj);
11674 
11675 In this call, C<entersubop> is a pointer to the C<entersub> op,
11676 which may be replaced by the check function, and C<namegv> supplies
11677 the name that should be used by the check function to refer
11678 to the callee of the C<entersub> op if it needs to emit any diagnostics.
11679 It is permitted to apply the check function in non-standard situations,
11680 such as to a call to a different subroutine or to a method call.
11681 
11682 C<namegv> may not actually be a GV.  For efficiency, perl may pass a
11683 CV or other SV instead.  Whatever is passed can be used as the first
11684 argument to L</cv_name>.  You can force perl to pass a GV by including
11685 C<CALL_CHECKER_REQUIRE_GV> in the C<flags>.
11686 
11687 The current setting for a particular CV can be retrieved by
11688 L</cv_get_call_checker>.
11689 
11690 =for apidoc Am|void|cv_set_call_checker|CV *cv|Perl_call_checker ckfun|SV *ckobj
11691 
11692 The original form of L</cv_set_call_checker_flags>, which passes it the
11693 C<CALL_CHECKER_REQUIRE_GV> flag for backward-compatibility.
11694 
11695 =cut
11696 */
11697 
11698 void
11699 Perl_cv_set_call_checker(pTHX_ CV *cv, Perl_call_checker ckfun, SV *ckobj)
11700 {
11701     PERL_ARGS_ASSERT_CV_SET_CALL_CHECKER;
11702     cv_set_call_checker_flags(cv, ckfun, ckobj, CALL_CHECKER_REQUIRE_GV);
11703 }
11704 
11705 void
11706 Perl_cv_set_call_checker_flags(pTHX_ CV *cv, Perl_call_checker ckfun,
11707 				     SV *ckobj, U32 flags)
11708 {
11709     PERL_ARGS_ASSERT_CV_SET_CALL_CHECKER_FLAGS;
11710     if (ckfun == Perl_ck_entersub_args_proto_or_list && ckobj == (SV*)cv) {
11711 	if (SvMAGICAL((SV*)cv))
11712 	    mg_free_type((SV*)cv, PERL_MAGIC_checkcall);
11713     } else {
11714 	MAGIC *callmg;
11715 	sv_magic((SV*)cv, &PL_sv_undef, PERL_MAGIC_checkcall, NULL, 0);
11716 	callmg = mg_find((SV*)cv, PERL_MAGIC_checkcall);
11717 	assert(callmg);
11718 	if (callmg->mg_flags & MGf_REFCOUNTED) {
11719 	    SvREFCNT_dec(callmg->mg_obj);
11720 	    callmg->mg_flags &= ~MGf_REFCOUNTED;
11721 	}
11722 	callmg->mg_ptr = FPTR2DPTR(char *, ckfun);
11723 	callmg->mg_obj = ckobj;
11724 	if (ckobj != (SV*)cv) {
11725 	    SvREFCNT_inc_simple_void_NN(ckobj);
11726 	    callmg->mg_flags |= MGf_REFCOUNTED;
11727 	}
11728 	callmg->mg_flags = (callmg->mg_flags &~ MGf_REQUIRE_GV)
11729 			 | (U8)(flags & MGf_REQUIRE_GV) | MGf_COPY;
11730     }
11731 }
11732 
11733 static void
11734 S_entersub_alloc_targ(pTHX_ OP * const o)
11735 {
11736     o->op_targ = pad_alloc(OP_ENTERSUB, SVs_PADTMP);
11737     o->op_private |= OPpENTERSUB_HASTARG;
11738 }
11739 
11740 OP *
11741 Perl_ck_subr(pTHX_ OP *o)
11742 {
11743     OP *aop, *cvop;
11744     CV *cv;
11745     GV *namegv;
11746     SV **const_class = NULL;
11747 
11748     PERL_ARGS_ASSERT_CK_SUBR;
11749 
11750     aop = cUNOPx(o)->op_first;
11751     if (!OpHAS_SIBLING(aop))
11752 	aop = cUNOPx(aop)->op_first;
11753     aop = OpSIBLING(aop);
11754     for (cvop = aop; OpHAS_SIBLING(cvop); cvop = OpSIBLING(cvop)) ;
11755     cv = rv2cv_op_cv(cvop, RV2CVOPCV_MARK_EARLY);
11756     namegv = cv ? (GV*)rv2cv_op_cv(cvop, RV2CVOPCV_MAYBE_NAME_GV) : NULL;
11757 
11758     o->op_private &= ~1;
11759     o->op_private |= (PL_hints & HINT_STRICT_REFS);
11760     if (PERLDB_SUB && PL_curstash != PL_debstash)
11761 	o->op_private |= OPpENTERSUB_DB;
11762     switch (cvop->op_type) {
11763 	case OP_RV2CV:
11764 	    o->op_private |= (cvop->op_private & OPpENTERSUB_AMPER);
11765 	    op_null(cvop);
11766 	    break;
11767 	case OP_METHOD:
11768 	case OP_METHOD_NAMED:
11769 	case OP_METHOD_SUPER:
11770 	case OP_METHOD_REDIR:
11771 	case OP_METHOD_REDIR_SUPER:
11772 	    if (aop->op_type == OP_CONST) {
11773 		aop->op_private &= ~OPpCONST_STRICT;
11774 		const_class = &cSVOPx(aop)->op_sv;
11775 	    }
11776 	    else if (aop->op_type == OP_LIST) {
11777 		OP * const sib = OpSIBLING(((UNOP*)aop)->op_first);
11778 		if (sib && sib->op_type == OP_CONST) {
11779 		    sib->op_private &= ~OPpCONST_STRICT;
11780 		    const_class = &cSVOPx(sib)->op_sv;
11781 		}
11782 	    }
11783 	    /* make class name a shared cow string to speedup method calls */
11784 	    /* constant string might be replaced with object, f.e. bigint */
11785 	    if (const_class && SvPOK(*const_class)) {
11786 		STRLEN len;
11787 		const char* str = SvPV(*const_class, len);
11788 		if (len) {
11789 		    SV* const shared = newSVpvn_share(
11790 			str, SvUTF8(*const_class)
11791                                     ? -(SSize_t)len : (SSize_t)len,
11792                         0
11793 		    );
11794                     if (SvREADONLY(*const_class))
11795                         SvREADONLY_on(shared);
11796 		    SvREFCNT_dec(*const_class);
11797 		    *const_class = shared;
11798 		}
11799 	    }
11800 	    break;
11801     }
11802 
11803     if (!cv) {
11804 	S_entersub_alloc_targ(aTHX_ o);
11805 	return ck_entersub_args_list(o);
11806     } else {
11807 	Perl_call_checker ckfun;
11808 	SV *ckobj;
11809 	U8 flags;
11810 	S_cv_get_call_checker(cv, &ckfun, &ckobj, &flags);
11811 	if (CvISXSUB(cv) || !CvROOT(cv))
11812 	    S_entersub_alloc_targ(aTHX_ o);
11813 	if (!namegv) {
11814 	    /* The original call checker API guarantees that a GV will be
11815 	       be provided with the right name.  So, if the old API was
11816 	       used (or the REQUIRE_GV flag was passed), we have to reify
11817 	       the CV’s GV, unless this is an anonymous sub.  This is not
11818 	       ideal for lexical subs, as its stringification will include
11819 	       the package.  But it is the best we can do.  */
11820 	    if (flags & MGf_REQUIRE_GV) {
11821 		if (!CvANON(cv) && (!CvNAMED(cv) || CvNAME_HEK(cv)))
11822 		    namegv = CvGV(cv);
11823 	    }
11824 	    else namegv = MUTABLE_GV(cv);
11825 	    /* After a syntax error in a lexical sub, the cv that
11826 	       rv2cv_op_cv returns may be a nameless stub. */
11827 	    if (!namegv) return ck_entersub_args_list(o);
11828 
11829 	}
11830 	return ckfun(aTHX_ o, namegv, ckobj);
11831     }
11832 }
11833 
11834 OP *
11835 Perl_ck_svconst(pTHX_ OP *o)
11836 {
11837     SV * const sv = cSVOPo->op_sv;
11838     PERL_ARGS_ASSERT_CK_SVCONST;
11839     PERL_UNUSED_CONTEXT;
11840 #ifdef PERL_COPY_ON_WRITE
11841     /* Since the read-only flag may be used to protect a string buffer, we
11842        cannot do copy-on-write with existing read-only scalars that are not
11843        already copy-on-write scalars.  To allow $_ = "hello" to do COW with
11844        that constant, mark the constant as COWable here, if it is not
11845        already read-only. */
11846     if (!SvREADONLY(sv) && !SvIsCOW(sv) && SvCANCOW(sv)) {
11847 	SvIsCOW_on(sv);
11848 	CowREFCNT(sv) = 0;
11849 # ifdef PERL_DEBUG_READONLY_COW
11850 	sv_buf_to_ro(sv);
11851 # endif
11852     }
11853 #endif
11854     SvREADONLY_on(sv);
11855     return o;
11856 }
11857 
11858 OP *
11859 Perl_ck_trunc(pTHX_ OP *o)
11860 {
11861     PERL_ARGS_ASSERT_CK_TRUNC;
11862 
11863     if (o->op_flags & OPf_KIDS) {
11864 	SVOP *kid = (SVOP*)cUNOPo->op_first;
11865 
11866 	if (kid->op_type == OP_NULL)
11867 	    kid = (SVOP*)OpSIBLING(kid);
11868 	if (kid && kid->op_type == OP_CONST &&
11869 	    (kid->op_private & OPpCONST_BARE) &&
11870 	    !kid->op_folded)
11871 	{
11872 	    o->op_flags |= OPf_SPECIAL;
11873 	    kid->op_private &= ~OPpCONST_STRICT;
11874 	}
11875     }
11876     return ck_fun(o);
11877 }
11878 
11879 OP *
11880 Perl_ck_substr(pTHX_ OP *o)
11881 {
11882     PERL_ARGS_ASSERT_CK_SUBSTR;
11883 
11884     o = ck_fun(o);
11885     if ((o->op_flags & OPf_KIDS) && (o->op_private == 4)) {
11886 	OP *kid = cLISTOPo->op_first;
11887 
11888 	if (kid->op_type == OP_NULL)
11889 	    kid = OpSIBLING(kid);
11890 	if (kid)
11891 	    kid->op_flags |= OPf_MOD;
11892 
11893     }
11894     return o;
11895 }
11896 
11897 OP *
11898 Perl_ck_tell(pTHX_ OP *o)
11899 {
11900     PERL_ARGS_ASSERT_CK_TELL;
11901     o = ck_fun(o);
11902     if (o->op_flags & OPf_KIDS) {
11903      OP *kid = cLISTOPo->op_first;
11904      if (kid->op_type == OP_NULL && OpHAS_SIBLING(kid)) kid = OpSIBLING(kid);
11905      if (kid->op_type == OP_RV2GV) kid->op_private |= OPpALLOW_FAKE;
11906     }
11907     return o;
11908 }
11909 
11910 OP *
11911 Perl_ck_each(pTHX_ OP *o)
11912 {
11913     dVAR;
11914     OP *kid = o->op_flags & OPf_KIDS ? cUNOPo->op_first : NULL;
11915     const unsigned orig_type  = o->op_type;
11916 
11917     PERL_ARGS_ASSERT_CK_EACH;
11918 
11919     if (kid) {
11920 	switch (kid->op_type) {
11921 	    case OP_PADHV:
11922 	    case OP_RV2HV:
11923 		break;
11924 	    case OP_PADAV:
11925 	    case OP_RV2AV:
11926                 OpTYPE_set(o, orig_type == OP_EACH ? OP_AEACH
11927                             : orig_type == OP_KEYS ? OP_AKEYS
11928                             :                        OP_AVALUES);
11929 		break;
11930 	    case OP_CONST:
11931 		if (kid->op_private == OPpCONST_BARE
11932 		 || !SvROK(cSVOPx_sv(kid))
11933 		 || (  SvTYPE(SvRV(cSVOPx_sv(kid))) != SVt_PVAV
11934 		    && SvTYPE(SvRV(cSVOPx_sv(kid))) != SVt_PVHV  )
11935 		   )
11936 		    /* we let ck_fun handle it */
11937 		    break;
11938 	    default:
11939                 Perl_croak_nocontext(
11940                     "Experimental %s on scalar is now forbidden",
11941                     PL_op_desc[orig_type]);
11942                 break;
11943 	}
11944     }
11945     return ck_fun(o);
11946 }
11947 
11948 OP *
11949 Perl_ck_length(pTHX_ OP *o)
11950 {
11951     PERL_ARGS_ASSERT_CK_LENGTH;
11952 
11953     o = ck_fun(o);
11954 
11955     if (ckWARN(WARN_SYNTAX)) {
11956         const OP *kid = o->op_flags & OPf_KIDS ? cLISTOPo->op_first : NULL;
11957 
11958         if (kid) {
11959             SV *name = NULL;
11960             const bool hash = kid->op_type == OP_PADHV
11961                            || kid->op_type == OP_RV2HV;
11962             switch (kid->op_type) {
11963                 case OP_PADHV:
11964                 case OP_PADAV:
11965                 case OP_RV2HV:
11966                 case OP_RV2AV:
11967 		    name = S_op_varname(aTHX_ kid);
11968                     break;
11969                 default:
11970                     return o;
11971             }
11972             if (name)
11973                 Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
11974                     "length() used on %"SVf" (did you mean \"scalar(%s%"SVf
11975                     ")\"?)",
11976                     SVfARG(name), hash ? "keys " : "", SVfARG(name)
11977                 );
11978             else if (hash)
11979      /* diag_listed_as: length() used on %s (did you mean "scalar(%s)"?) */
11980                 Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
11981                     "length() used on %%hash (did you mean \"scalar(keys %%hash)\"?)");
11982             else
11983      /* diag_listed_as: length() used on %s (did you mean "scalar(%s)"?) */
11984                 Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
11985                     "length() used on @array (did you mean \"scalar(@array)\"?)");
11986         }
11987     }
11988 
11989     return o;
11990 }
11991 
11992 
11993 
11994 /*
11995    ---------------------------------------------------------
11996 
11997    Common vars in list assignment
11998 
11999    There now follows some enums and static functions for detecting
12000    common variables in list assignments. Here is a little essay I wrote
12001    for myself when trying to get my head around this. DAPM.
12002 
12003    ----
12004 
12005    First some random observations:
12006 
12007    * If a lexical var is an alias of something else, e.g.
12008        for my $x ($lex, $pkg, $a[0]) {...}
12009      then the act of aliasing will increase the reference count of the SV
12010 
12011    * If a package var is an alias of something else, it may still have a
12012      reference count of 1, depending on how the alias was created, e.g.
12013      in *a = *b, $a may have a refcount of 1 since the GP is shared
12014      with a single GvSV pointer to the SV. So If it's an alias of another
12015      package var, then RC may be 1; if it's an alias of another scalar, e.g.
12016      a lexical var or an array element, then it will have RC > 1.
12017 
12018    * There are many ways to create a package alias; ultimately, XS code
12019      may quite legally do GvSV(gv) = SvREFCNT_inc(sv) for example, so
12020      run-time tracing mechanisms are unlikely to be able to catch all cases.
12021 
12022    * When the LHS is all my declarations, the same vars can't appear directly
12023      on the RHS, but they can indirectly via closures, aliasing and lvalue
12024      subs. But those techniques all involve an increase in the lexical
12025      scalar's ref count.
12026 
12027    * When the LHS is all lexical vars (but not necessarily my declarations),
12028      it is possible for the same lexicals to appear directly on the RHS, and
12029      without an increased ref count, since the stack isn't refcounted.
12030      This case can be detected at compile time by scanning for common lex
12031      vars with PL_generation.
12032 
12033    * lvalue subs defeat common var detection, but they do at least
12034      return vars with a temporary ref count increment. Also, you can't
12035      tell at compile time whether a sub call is lvalue.
12036 
12037 
12038    So...
12039 
12040    A: There are a few circumstances where there definitely can't be any
12041      commonality:
12042 
12043        LHS empty:  () = (...);
12044        RHS empty:  (....) = ();
12045        RHS contains only constants or other 'can't possibly be shared'
12046            elements (e.g. ops that return PADTMPs):  (...) = (1,2, length)
12047            i.e. they only contain ops not marked as dangerous, whose children
12048            are also not dangerous;
12049        LHS ditto;
12050        LHS contains a single scalar element: e.g. ($x) = (....); because
12051            after $x has been modified, it won't be used again on the RHS;
12052        RHS contains a single element with no aggregate on LHS: e.g.
12053            ($a,$b,$c)  = ($x); again, once $a has been modified, its value
12054            won't be used again.
12055 
12056    B: If LHS are all 'my' lexical var declarations (or safe ops, which
12057      we can ignore):
12058 
12059        my ($a, $b, @c) = ...;
12060 
12061        Due to closure and goto tricks, these vars may already have content.
12062        For the same reason, an element on the RHS may be a lexical or package
12063        alias of one of the vars on the left, or share common elements, for
12064        example:
12065 
12066            my ($x,$y) = f(); # $x and $y on both sides
12067            sub f : lvalue { ($x,$y) = (1,2); $y, $x }
12068 
12069        and
12070 
12071            my $ra = f();
12072            my @a = @$ra;  # elements of @a on both sides
12073            sub f { @a = 1..4; \@a }
12074 
12075 
12076        First, just consider scalar vars on LHS:
12077 
12078            RHS is safe only if (A), or in addition,
12079                * contains only lexical *scalar* vars, where neither side's
12080                  lexicals have been flagged as aliases
12081 
12082            If RHS is not safe, then it's always legal to check LHS vars for
12083            RC==1, since the only RHS aliases will always be associated
12084            with an RC bump.
12085 
12086            Note that in particular, RHS is not safe if:
12087 
12088                * it contains package scalar vars; e.g.:
12089 
12090                    f();
12091                    my ($x, $y) = (2, $x_alias);
12092                    sub f { $x = 1; *x_alias = \$x; }
12093 
12094                * It contains other general elements, such as flattened or
12095                * spliced or single array or hash elements, e.g.
12096 
12097                    f();
12098                    my ($x,$y) = @a; # or $a[0] or @a{@b} etc
12099 
12100                    sub f {
12101                        ($x, $y) = (1,2);
12102                        use feature 'refaliasing';
12103                        \($a[0], $a[1]) = \($y,$x);
12104                    }
12105 
12106                  It doesn't matter if the array/hash is lexical or package.
12107 
12108                * it contains a function call that happens to be an lvalue
12109                  sub which returns one or more of the above, e.g.
12110 
12111                    f();
12112                    my ($x,$y) = f();
12113 
12114                    sub f : lvalue {
12115                        ($x, $y) = (1,2);
12116                        *x1 = \$x;
12117                        $y, $x1;
12118                    }
12119 
12120                    (so a sub call on the RHS should be treated the same
12121                    as having a package var on the RHS).
12122 
12123                * any other "dangerous" thing, such an op or built-in that
12124                  returns one of the above, e.g. pp_preinc
12125 
12126 
12127            If RHS is not safe, what we can do however is at compile time flag
12128            that the LHS are all my declarations, and at run time check whether
12129            all the LHS have RC == 1, and if so skip the full scan.
12130 
12131        Now consider array and hash vars on LHS: e.g. my (...,@a) = ...;
12132 
12133            Here the issue is whether there can be elements of @a on the RHS
12134            which will get prematurely freed when @a is cleared prior to
12135            assignment. This is only a problem if the aliasing mechanism
12136            is one which doesn't increase the refcount - only if RC == 1
12137            will the RHS element be prematurely freed.
12138 
12139            Because the array/hash is being INTROed, it or its elements
12140            can't directly appear on the RHS:
12141 
12142                my (@a) = ($a[0], @a, etc) # NOT POSSIBLE
12143 
12144            but can indirectly, e.g.:
12145 
12146                my $r = f();
12147                my (@a) = @$r;
12148                sub f { @a = 1..3; \@a }
12149 
12150            So if the RHS isn't safe as defined by (A), we must always
12151            mortalise and bump the ref count of any remaining RHS elements
12152            when assigning to a non-empty LHS aggregate.
12153 
12154            Lexical scalars on the RHS aren't safe if they've been involved in
12155            aliasing, e.g.
12156 
12157                use feature 'refaliasing';
12158 
12159                f();
12160                \(my $lex) = \$pkg;
12161                my @a = ($lex,3); # equivalent to ($a[0],3)
12162 
12163                sub f {
12164                    @a = (1,2);
12165                    \$pkg = \$a[0];
12166                }
12167 
12168            Similarly with lexical arrays and hashes on the RHS:
12169 
12170                f();
12171                my @b;
12172                my @a = (@b);
12173 
12174                sub f {
12175                    @a = (1,2);
12176                    \$b[0] = \$a[1];
12177                    \$b[1] = \$a[0];
12178                }
12179 
12180 
12181 
12182    C: As (B), but in addition the LHS may contain non-intro lexicals, e.g.
12183        my $a; ($a, my $b) = (....);
12184 
12185        The difference between (B) and (C) is that it is now physically
12186        possible for the LHS vars to appear on the RHS too, where they
12187        are not reference counted; but in this case, the compile-time
12188        PL_generation sweep will detect such common vars.
12189 
12190        So the rules for (C) differ from (B) in that if common vars are
12191        detected, the runtime "test RC==1" optimisation can no longer be used,
12192        and a full mark and sweep is required
12193 
12194    D: As (C), but in addition the LHS may contain package vars.
12195 
12196        Since package vars can be aliased without a corresponding refcount
12197        increase, all bets are off. It's only safe if (A). E.g.
12198 
12199            my ($x, $y) = (1,2);
12200 
12201            for $x_alias ($x) {
12202                ($x_alias, $y) = (3, $x); # whoops
12203            }
12204 
12205        Ditto for LHS aggregate package vars.
12206 
12207    E: Any other dangerous ops on LHS, e.g.
12208            (f(), $a[0], @$r) = (...);
12209 
12210        this is similar to (E) in that all bets are off. In addition, it's
12211        impossible to determine at compile time whether the LHS
12212        contains a scalar or an aggregate, e.g.
12213 
12214            sub f : lvalue { @a }
12215            (f()) = 1..3;
12216 
12217 * ---------------------------------------------------------
12218 */
12219 
12220 
12221 /* A set of bit flags returned by S_aassign_scan(). Each flag indicates
12222  * that at least one of the things flagged was seen.
12223  */
12224 
12225 enum {
12226     AAS_MY_SCALAR       = 0x001, /* my $scalar */
12227     AAS_MY_AGG          = 0x002, /* aggregate: my @array or my %hash */
12228     AAS_LEX_SCALAR      = 0x004, /* $lexical */
12229     AAS_LEX_AGG         = 0x008, /* @lexical or %lexical aggregate */
12230     AAS_LEX_SCALAR_COMM = 0x010, /* $lexical seen on both sides */
12231     AAS_PKG_SCALAR      = 0x020, /* $scalar (where $scalar is pkg var) */
12232     AAS_PKG_AGG         = 0x040, /* package @array or %hash aggregate */
12233     AAS_DANGEROUS       = 0x080, /* an op (other than the above)
12234                                          that's flagged OA_DANGEROUS */
12235     AAS_SAFE_SCALAR     = 0x100, /* produces at least one scalar SV that's
12236                                         not in any of the categories above */
12237     AAS_DEFAV           = 0x200  /* contains just a single '@_' on RHS */
12238 };
12239 
12240 
12241 
12242 /* helper function for S_aassign_scan().
12243  * check a PAD-related op for commonality and/or set its generation number.
12244  * Returns a boolean indicating whether its shared */
12245 
12246 static bool
12247 S_aassign_padcheck(pTHX_ OP* o, bool rhs)
12248 {
12249     if (PAD_COMPNAME_GEN(o->op_targ) == PERL_INT_MAX)
12250         /* lexical used in aliasing */
12251         return TRUE;
12252 
12253     if (rhs)
12254         return cBOOL(PAD_COMPNAME_GEN(o->op_targ) == (STRLEN)PL_generation);
12255     else
12256         PAD_COMPNAME_GEN_set(o->op_targ, PL_generation);
12257 
12258     return FALSE;
12259 }
12260 
12261 
12262 /*
12263   Helper function for OPpASSIGN_COMMON* detection in rpeep().
12264   It scans the left or right hand subtree of the aassign op, and returns a
12265   set of flags indicating what sorts of things it found there.
12266   'rhs' indicates whether we're scanning the LHS or RHS. If the former, we
12267   set PL_generation on lexical vars; if the latter, we see if
12268   PL_generation matches.
12269   'top' indicates whether we're recursing or at the top level.
12270   'scalars_p' is a pointer to a counter of the number of scalar SVs seen.
12271   This fn will increment it by the number seen. It's not intended to
12272   be an accurate count (especially as many ops can push a variable
12273   number of SVs onto the stack); rather it's used as to test whether there
12274   can be at most 1 SV pushed; so it's only meanings are "0, 1, many".
12275 */
12276 
12277 static int
12278 S_aassign_scan(pTHX_ OP* o, bool rhs, bool top, int *scalars_p)
12279 {
12280     int flags = 0;
12281     bool kid_top = FALSE;
12282 
12283     /* first, look for a solitary @_ on the RHS */
12284     if (   rhs
12285         && top
12286         && (o->op_flags & OPf_KIDS)
12287         && OP_TYPE_IS_OR_WAS(o, OP_LIST)
12288     ) {
12289         OP *kid = cUNOPo->op_first;
12290         if (   (   kid->op_type == OP_PUSHMARK
12291                 || kid->op_type == OP_PADRANGE) /* ex-pushmark */
12292             && ((kid = OpSIBLING(kid)))
12293             && !OpHAS_SIBLING(kid)
12294             && kid->op_type == OP_RV2AV
12295             && !(kid->op_flags & OPf_REF)
12296             && !(kid->op_private & (OPpLVAL_INTRO|OPpMAYBE_LVSUB))
12297             && ((kid->op_flags & OPf_WANT) == OPf_WANT_LIST)
12298             && ((kid = cUNOPx(kid)->op_first))
12299             && kid->op_type == OP_GV
12300             && cGVOPx_gv(kid) == PL_defgv
12301         )
12302             flags |= AAS_DEFAV;
12303     }
12304 
12305     switch (o->op_type) {
12306     case OP_GVSV:
12307         (*scalars_p)++;
12308         return AAS_PKG_SCALAR;
12309 
12310     case OP_PADAV:
12311     case OP_PADHV:
12312         (*scalars_p) += 2;
12313         if (top && (o->op_flags & OPf_REF))
12314             return (o->op_private & OPpLVAL_INTRO)
12315                 ? AAS_MY_AGG : AAS_LEX_AGG;
12316         return AAS_DANGEROUS;
12317 
12318     case OP_PADSV:
12319         {
12320             int comm = S_aassign_padcheck(aTHX_ o, rhs)
12321                         ?  AAS_LEX_SCALAR_COMM : 0;
12322             (*scalars_p)++;
12323             return (o->op_private & OPpLVAL_INTRO)
12324                 ? (AAS_MY_SCALAR|comm) : (AAS_LEX_SCALAR|comm);
12325         }
12326 
12327     case OP_RV2AV:
12328     case OP_RV2HV:
12329         (*scalars_p) += 2;
12330         if (cUNOPx(o)->op_first->op_type != OP_GV)
12331             return AAS_DANGEROUS; /* @{expr}, %{expr} */
12332         /* @pkg, %pkg */
12333         if (top && (o->op_flags & OPf_REF))
12334             return AAS_PKG_AGG;
12335         return AAS_DANGEROUS;
12336 
12337     case OP_RV2SV:
12338         (*scalars_p)++;
12339         if (cUNOPx(o)->op_first->op_type != OP_GV) {
12340             (*scalars_p) += 2;
12341             return AAS_DANGEROUS; /* ${expr} */
12342         }
12343         return AAS_PKG_SCALAR; /* $pkg */
12344 
12345     case OP_SPLIT:
12346         if (cLISTOPo->op_first->op_type == OP_PUSHRE) {
12347             /* "@foo = split... " optimises away the aassign and stores its
12348              * destination array in the OP_PUSHRE that precedes it.
12349              * A flattened array is always dangerous.
12350              */
12351             (*scalars_p) += 2;
12352             return AAS_DANGEROUS;
12353         }
12354         break;
12355 
12356     case OP_UNDEF:
12357         /* undef counts as a scalar on the RHS:
12358          *   (undef, $x) = ...;         # only 1 scalar on LHS: always safe
12359          *   ($x, $y)    = (undef, $x); # 2 scalars on RHS: unsafe
12360          */
12361         if (rhs)
12362             (*scalars_p)++;
12363         flags = AAS_SAFE_SCALAR;
12364         break;
12365 
12366     case OP_PUSHMARK:
12367     case OP_STUB:
12368         /* these are all no-ops; they don't push a potentially common SV
12369          * onto the stack, so they are neither AAS_DANGEROUS nor
12370          * AAS_SAFE_SCALAR */
12371         return 0;
12372 
12373     case OP_PADRANGE: /* Ignore padrange; checking its siblings is enough */
12374         break;
12375 
12376     case OP_NULL:
12377     case OP_LIST:
12378         /* these do nothing but may have children; but their children
12379          * should also be treated as top-level */
12380         kid_top = top;
12381         break;
12382 
12383     default:
12384         if (PL_opargs[o->op_type] & OA_DANGEROUS) {
12385             (*scalars_p) += 2;
12386             flags = AAS_DANGEROUS;
12387             break;
12388         }
12389 
12390         if (   (PL_opargs[o->op_type] & OA_TARGLEX)
12391             && (o->op_private & OPpTARGET_MY))
12392         {
12393             (*scalars_p)++;
12394             return S_aassign_padcheck(aTHX_ o, rhs)
12395                 ? AAS_LEX_SCALAR_COMM : AAS_LEX_SCALAR;
12396         }
12397 
12398         /* if its an unrecognised, non-dangerous op, assume that it
12399          * it the cause of at least one safe scalar */
12400         (*scalars_p)++;
12401         flags = AAS_SAFE_SCALAR;
12402         break;
12403     }
12404 
12405     if (o->op_flags & OPf_KIDS) {
12406         OP *kid;
12407         for (kid = cUNOPo->op_first; kid; kid = OpSIBLING(kid))
12408             flags |= S_aassign_scan(aTHX_ kid, rhs, kid_top, scalars_p);
12409     }
12410     return flags;
12411 }
12412 
12413 
12414 /* Check for in place reverse and sort assignments like "@a = reverse @a"
12415    and modify the optree to make them work inplace */
12416 
12417 STATIC void
12418 S_inplace_aassign(pTHX_ OP *o) {
12419 
12420     OP *modop, *modop_pushmark;
12421     OP *oright;
12422     OP *oleft, *oleft_pushmark;
12423 
12424     PERL_ARGS_ASSERT_INPLACE_AASSIGN;
12425 
12426     assert((o->op_flags & OPf_WANT) == OPf_WANT_VOID);
12427 
12428     assert(cUNOPo->op_first->op_type == OP_NULL);
12429     modop_pushmark = cUNOPx(cUNOPo->op_first)->op_first;
12430     assert(modop_pushmark->op_type == OP_PUSHMARK);
12431     modop = OpSIBLING(modop_pushmark);
12432 
12433     if (modop->op_type != OP_SORT && modop->op_type != OP_REVERSE)
12434 	return;
12435 
12436     /* no other operation except sort/reverse */
12437     if (OpHAS_SIBLING(modop))
12438 	return;
12439 
12440     assert(cUNOPx(modop)->op_first->op_type == OP_PUSHMARK);
12441     if (!(oright = OpSIBLING(cUNOPx(modop)->op_first))) return;
12442 
12443     if (modop->op_flags & OPf_STACKED) {
12444 	/* skip sort subroutine/block */
12445 	assert(oright->op_type == OP_NULL);
12446 	oright = OpSIBLING(oright);
12447     }
12448 
12449     assert(OpSIBLING(cUNOPo->op_first)->op_type == OP_NULL);
12450     oleft_pushmark = cUNOPx(OpSIBLING(cUNOPo->op_first))->op_first;
12451     assert(oleft_pushmark->op_type == OP_PUSHMARK);
12452     oleft = OpSIBLING(oleft_pushmark);
12453 
12454     /* Check the lhs is an array */
12455     if (!oleft ||
12456 	(oleft->op_type != OP_RV2AV && oleft->op_type != OP_PADAV)
12457 	|| OpHAS_SIBLING(oleft)
12458 	|| (oleft->op_private & OPpLVAL_INTRO)
12459     )
12460 	return;
12461 
12462     /* Only one thing on the rhs */
12463     if (OpHAS_SIBLING(oright))
12464 	return;
12465 
12466     /* check the array is the same on both sides */
12467     if (oleft->op_type == OP_RV2AV) {
12468 	if (oright->op_type != OP_RV2AV
12469 	    || !cUNOPx(oright)->op_first
12470 	    || cUNOPx(oright)->op_first->op_type != OP_GV
12471 	    || cUNOPx(oleft )->op_first->op_type != OP_GV
12472 	    || cGVOPx_gv(cUNOPx(oleft)->op_first) !=
12473 	       cGVOPx_gv(cUNOPx(oright)->op_first)
12474 	)
12475 	    return;
12476     }
12477     else if (oright->op_type != OP_PADAV
12478 	|| oright->op_targ != oleft->op_targ
12479     )
12480 	return;
12481 
12482     /* This actually is an inplace assignment */
12483 
12484     modop->op_private |= OPpSORT_INPLACE;
12485 
12486     /* transfer MODishness etc from LHS arg to RHS arg */
12487     oright->op_flags = oleft->op_flags;
12488 
12489     /* remove the aassign op and the lhs */
12490     op_null(o);
12491     op_null(oleft_pushmark);
12492     if (oleft->op_type == OP_RV2AV && cUNOPx(oleft)->op_first)
12493 	op_null(cUNOPx(oleft)->op_first);
12494     op_null(oleft);
12495 }
12496 
12497 
12498 
12499 /* S_maybe_multideref(): given an op_next chain of ops beginning at 'start'
12500  * that potentially represent a series of one or more aggregate derefs
12501  * (such as $a->[1]{$key}), examine the chain, and if appropriate, convert
12502  * the whole chain to a single OP_MULTIDEREF op (maybe with a few
12503  * additional ops left in too).
12504  *
12505  * The caller will have already verified that the first few ops in the
12506  * chain following 'start' indicate a multideref candidate, and will have
12507  * set 'orig_o' to the point further on in the chain where the first index
12508  * expression (if any) begins.  'orig_action' specifies what type of
12509  * beginning has already been determined by the ops between start..orig_o
12510  * (e.g.  $lex_ary[], $pkg_ary->{}, expr->[], etc).
12511  *
12512  * 'hints' contains any hints flags that need adding (currently just
12513  * OPpHINT_STRICT_REFS) as found in any rv2av/hv skipped by the caller.
12514  */
12515 
12516 STATIC void
12517 S_maybe_multideref(pTHX_ OP *start, OP *orig_o, UV orig_action, U8 hints)
12518 {
12519     dVAR;
12520     int pass;
12521     UNOP_AUX_item *arg_buf = NULL;
12522     bool reset_start_targ  = FALSE; /* start->op_targ needs zeroing */
12523     int index_skip         = -1;    /* don't output index arg on this action */
12524 
12525     /* similar to regex compiling, do two passes; the first pass
12526      * determines whether the op chain is convertible and calculates the
12527      * buffer size; the second pass populates the buffer and makes any
12528      * changes necessary to ops (such as moving consts to the pad on
12529      * threaded builds).
12530      *
12531      * NB: for things like Coverity, note that both passes take the same
12532      * path through the logic tree (except for 'if (pass)' bits), since
12533      * both passes are following the same op_next chain; and in
12534      * particular, if it would return early on the second pass, it would
12535      * already have returned early on the first pass.
12536      */
12537     for (pass = 0; pass < 2; pass++) {
12538         OP *o                = orig_o;
12539         UV action            = orig_action;
12540         OP *first_elem_op    = NULL;  /* first seen aelem/helem */
12541         OP *top_op           = NULL;  /* highest [ah]elem/exists/del/rv2[ah]v */
12542         int action_count     = 0;     /* number of actions seen so far */
12543         int action_ix        = 0;     /* action_count % (actions per IV) */
12544         bool next_is_hash    = FALSE; /* is the next lookup to be a hash? */
12545         bool is_last         = FALSE; /* no more derefs to follow */
12546         bool maybe_aelemfast = FALSE; /* we can replace with aelemfast? */
12547         UNOP_AUX_item *arg     = arg_buf;
12548         UNOP_AUX_item *action_ptr = arg_buf;
12549 
12550         if (pass)
12551             action_ptr->uv = 0;
12552         arg++;
12553 
12554         switch (action) {
12555         case MDEREF_HV_gvsv_vivify_rv2hv_helem:
12556         case MDEREF_HV_gvhv_helem:
12557             next_is_hash = TRUE;
12558             /* FALLTHROUGH */
12559         case MDEREF_AV_gvsv_vivify_rv2av_aelem:
12560         case MDEREF_AV_gvav_aelem:
12561             if (pass) {
12562 #ifdef USE_ITHREADS
12563                 arg->pad_offset = cPADOPx(start)->op_padix;
12564                 /* stop it being swiped when nulled */
12565                 cPADOPx(start)->op_padix = 0;
12566 #else
12567                 arg->sv = cSVOPx(start)->op_sv;
12568                 cSVOPx(start)->op_sv = NULL;
12569 #endif
12570             }
12571             arg++;
12572             break;
12573 
12574         case MDEREF_HV_padhv_helem:
12575         case MDEREF_HV_padsv_vivify_rv2hv_helem:
12576             next_is_hash = TRUE;
12577             /* FALLTHROUGH */
12578         case MDEREF_AV_padav_aelem:
12579         case MDEREF_AV_padsv_vivify_rv2av_aelem:
12580             if (pass) {
12581                 arg->pad_offset = start->op_targ;
12582                 /* we skip setting op_targ = 0 for now, since the intact
12583                  * OP_PADXV is needed by S_check_hash_fields_and_hekify */
12584                 reset_start_targ = TRUE;
12585             }
12586             arg++;
12587             break;
12588 
12589         case MDEREF_HV_pop_rv2hv_helem:
12590             next_is_hash = TRUE;
12591             /* FALLTHROUGH */
12592         case MDEREF_AV_pop_rv2av_aelem:
12593             break;
12594 
12595         default:
12596             NOT_REACHED; /* NOTREACHED */
12597             return;
12598         }
12599 
12600         while (!is_last) {
12601             /* look for another (rv2av/hv; get index;
12602              * aelem/helem/exists/delele) sequence */
12603 
12604             OP *kid;
12605             bool is_deref;
12606             bool ok;
12607             UV index_type = MDEREF_INDEX_none;
12608 
12609             if (action_count) {
12610                 /* if this is not the first lookup, consume the rv2av/hv  */
12611 
12612                 /* for N levels of aggregate lookup, we normally expect
12613                  * that the first N-1 [ah]elem ops will be flagged as
12614                  * /DEREF (so they autovivifiy if necessary), and the last
12615                  * lookup op not to be.
12616                  * For other things (like @{$h{k1}{k2}}) extra scope or
12617                  * leave ops can appear, so abandon the effort in that
12618                  * case */
12619                 if (o->op_type != OP_RV2AV && o->op_type != OP_RV2HV)
12620                     return;
12621 
12622                 /* rv2av or rv2hv sKR/1 */
12623 
12624                 ASSUME(!(o->op_flags & ~(OPf_WANT|OPf_KIDS|OPf_PARENS
12625                                             |OPf_REF|OPf_MOD|OPf_SPECIAL)));
12626                 if (o->op_flags != (OPf_WANT_SCALAR|OPf_KIDS|OPf_REF))
12627                     return;
12628 
12629                 /* at this point, we wouldn't expect any of these
12630                  * possible private flags:
12631                  * OPpMAYBE_LVSUB, OPpOUR_INTRO, OPpLVAL_INTRO
12632                  * OPpTRUEBOOL, OPpMAYBE_TRUEBOOL (rv2hv only)
12633                  */
12634                 ASSUME(!(o->op_private &
12635                     ~(OPpHINT_STRICT_REFS|OPpARG1_MASK|OPpSLICEWARNING)));
12636 
12637                 hints = (o->op_private & OPpHINT_STRICT_REFS);
12638 
12639                 /* make sure the type of the previous /DEREF matches the
12640                  * type of the next lookup */
12641                 ASSUME(o->op_type == (next_is_hash ? OP_RV2HV : OP_RV2AV));
12642                 top_op = o;
12643 
12644                 action = next_is_hash
12645                             ? MDEREF_HV_vivify_rv2hv_helem
12646                             : MDEREF_AV_vivify_rv2av_aelem;
12647                 o = o->op_next;
12648             }
12649 
12650             /* if this is the second pass, and we're at the depth where
12651              * previously we encountered a non-simple index expression,
12652              * stop processing the index at this point */
12653             if (action_count != index_skip) {
12654 
12655                 /* look for one or more simple ops that return an array
12656                  * index or hash key */
12657 
12658                 switch (o->op_type) {
12659                 case OP_PADSV:
12660                     /* it may be a lexical var index */
12661                     ASSUME(!(o->op_flags & ~(OPf_WANT|OPf_PARENS
12662                                             |OPf_REF|OPf_MOD|OPf_SPECIAL)));
12663                     ASSUME(!(o->op_private &
12664                             ~(OPpPAD_STATE|OPpDEREF|OPpLVAL_INTRO)));
12665 
12666                     if (   OP_GIMME(o,0) == G_SCALAR
12667                         && !(o->op_flags & (OPf_REF|OPf_MOD))
12668                         && o->op_private == 0)
12669                     {
12670                         if (pass)
12671                             arg->pad_offset = o->op_targ;
12672                         arg++;
12673                         index_type = MDEREF_INDEX_padsv;
12674                         o = o->op_next;
12675                     }
12676                     break;
12677 
12678                 case OP_CONST:
12679                     if (next_is_hash) {
12680                         /* it's a constant hash index */
12681                         if (!(SvFLAGS(cSVOPo_sv) & (SVf_IOK|SVf_NOK|SVf_POK)))
12682                             /* "use constant foo => FOO; $h{+foo}" for
12683                              * some weird FOO, can leave you with constants
12684                              * that aren't simple strings. It's not worth
12685                              * the extra hassle for those edge cases */
12686                             break;
12687 
12688                         if (pass) {
12689                             UNOP *rop = NULL;
12690                             OP * helem_op = o->op_next;
12691 
12692                             ASSUME(   helem_op->op_type == OP_HELEM
12693                                    || helem_op->op_type == OP_NULL);
12694                             if (helem_op->op_type == OP_HELEM) {
12695                                 rop = (UNOP*)(((BINOP*)helem_op)->op_first);
12696                                 if (   helem_op->op_private & OPpLVAL_INTRO
12697                                     || rop->op_type != OP_RV2HV
12698                                 )
12699                                     rop = NULL;
12700                             }
12701                             S_check_hash_fields_and_hekify(aTHX_ rop, cSVOPo);
12702 
12703 #ifdef USE_ITHREADS
12704                             /* Relocate sv to the pad for thread safety */
12705                             op_relocate_sv(&cSVOPo->op_sv, &o->op_targ);
12706                             arg->pad_offset = o->op_targ;
12707                             o->op_targ = 0;
12708 #else
12709                             arg->sv = cSVOPx_sv(o);
12710 #endif
12711                         }
12712                     }
12713                     else {
12714                         /* it's a constant array index */
12715                         IV iv;
12716                         SV *ix_sv = cSVOPo->op_sv;
12717                         if (!SvIOK(ix_sv))
12718                             break;
12719                         iv = SvIV(ix_sv);
12720 
12721                         if (   action_count == 0
12722                             && iv >= -128
12723                             && iv <= 127
12724                             && (   action == MDEREF_AV_padav_aelem
12725                                 || action == MDEREF_AV_gvav_aelem)
12726                         )
12727                             maybe_aelemfast = TRUE;
12728 
12729                         if (pass) {
12730                             arg->iv = iv;
12731                             SvREFCNT_dec_NN(cSVOPo->op_sv);
12732                         }
12733                     }
12734                     if (pass)
12735                         /* we've taken ownership of the SV */
12736                         cSVOPo->op_sv = NULL;
12737                     arg++;
12738                     index_type = MDEREF_INDEX_const;
12739                     o = o->op_next;
12740                     break;
12741 
12742                 case OP_GV:
12743                     /* it may be a package var index */
12744 
12745                     ASSUME(!(o->op_flags & ~(OPf_WANT|OPf_SPECIAL)));
12746                     ASSUME(!(o->op_private & ~(OPpEARLY_CV)));
12747                     if (  (o->op_flags &~ OPf_SPECIAL) != OPf_WANT_SCALAR
12748                         || o->op_private != 0
12749                     )
12750                         break;
12751 
12752                     kid = o->op_next;
12753                     if (kid->op_type != OP_RV2SV)
12754                         break;
12755 
12756                     ASSUME(!(kid->op_flags &
12757                             ~(OPf_WANT|OPf_KIDS|OPf_MOD|OPf_REF
12758                              |OPf_SPECIAL|OPf_PARENS)));
12759                     ASSUME(!(kid->op_private &
12760                                     ~(OPpARG1_MASK
12761                                      |OPpHINT_STRICT_REFS|OPpOUR_INTRO
12762                                      |OPpDEREF|OPpLVAL_INTRO)));
12763                     if(   (kid->op_flags &~ OPf_PARENS)
12764                             != (OPf_WANT_SCALAR|OPf_KIDS)
12765                        || (kid->op_private & ~(OPpARG1_MASK|HINT_STRICT_REFS))
12766                     )
12767                         break;
12768 
12769                     if (pass) {
12770 #ifdef USE_ITHREADS
12771                         arg->pad_offset = cPADOPx(o)->op_padix;
12772                         /* stop it being swiped when nulled */
12773                         cPADOPx(o)->op_padix = 0;
12774 #else
12775                         arg->sv = cSVOPx(o)->op_sv;
12776                         cSVOPo->op_sv = NULL;
12777 #endif
12778                     }
12779                     arg++;
12780                     index_type = MDEREF_INDEX_gvsv;
12781                     o = kid->op_next;
12782                     break;
12783 
12784                 } /* switch */
12785             } /* action_count != index_skip */
12786 
12787             action |= index_type;
12788 
12789 
12790             /* at this point we have either:
12791              *   * detected what looks like a simple index expression,
12792              *     and expect the next op to be an [ah]elem, or
12793              *     an nulled  [ah]elem followed by a delete or exists;
12794              *  * found a more complex expression, so something other
12795              *    than the above follows.
12796              */
12797 
12798             /* possibly an optimised away [ah]elem (where op_next is
12799              * exists or delete) */
12800             if (o->op_type == OP_NULL)
12801                 o = o->op_next;
12802 
12803             /* at this point we're looking for an OP_AELEM, OP_HELEM,
12804              * OP_EXISTS or OP_DELETE */
12805 
12806             /* if something like arybase (a.k.a $[ ) is in scope,
12807              * abandon optimisation attempt */
12808             if (  (o->op_type == OP_AELEM || o->op_type == OP_HELEM)
12809                && PL_check[o->op_type] != Perl_ck_null)
12810                 return;
12811 
12812             if (   o->op_type != OP_AELEM
12813                 || (o->op_private &
12814 		      (OPpLVAL_INTRO|OPpLVAL_DEFER|OPpDEREF|OPpMAYBE_LVSUB))
12815                 )
12816                 maybe_aelemfast = FALSE;
12817 
12818             /* look for aelem/helem/exists/delete. If it's not the last elem
12819              * lookup, it *must* have OPpDEREF_AV/HV, but not many other
12820              * flags; if it's the last, then it mustn't have
12821              * OPpDEREF_AV/HV, but may have lots of other flags, like
12822              * OPpLVAL_INTRO etc
12823              */
12824 
12825             if (   index_type == MDEREF_INDEX_none
12826                 || (   o->op_type != OP_AELEM  && o->op_type != OP_HELEM
12827                     && o->op_type != OP_EXISTS && o->op_type != OP_DELETE)
12828             )
12829                 ok = FALSE;
12830             else {
12831                 /* we have aelem/helem/exists/delete with valid simple index */
12832 
12833                 is_deref =    (o->op_type == OP_AELEM || o->op_type == OP_HELEM)
12834                            && (   (o->op_private & OPpDEREF) == OPpDEREF_AV
12835                                || (o->op_private & OPpDEREF) == OPpDEREF_HV);
12836 
12837                 if (is_deref) {
12838                     ASSUME(!(o->op_flags &
12839                                  ~(OPf_WANT|OPf_KIDS|OPf_MOD|OPf_PARENS)));
12840                     ASSUME(!(o->op_private & ~(OPpARG2_MASK|OPpDEREF)));
12841 
12842                     ok =    (o->op_flags &~ OPf_PARENS)
12843                                == (OPf_WANT_SCALAR|OPf_KIDS|OPf_MOD)
12844                          && !(o->op_private & ~(OPpDEREF|OPpARG2_MASK));
12845                 }
12846                 else if (o->op_type == OP_EXISTS) {
12847                     ASSUME(!(o->op_flags & ~(OPf_WANT|OPf_KIDS|OPf_PARENS
12848                                 |OPf_REF|OPf_MOD|OPf_SPECIAL)));
12849                     ASSUME(!(o->op_private & ~(OPpARG1_MASK|OPpEXISTS_SUB)));
12850                     ok =  !(o->op_private & ~OPpARG1_MASK);
12851                 }
12852                 else if (o->op_type == OP_DELETE) {
12853                     ASSUME(!(o->op_flags & ~(OPf_WANT|OPf_KIDS|OPf_PARENS
12854                                 |OPf_REF|OPf_MOD|OPf_SPECIAL)));
12855                     ASSUME(!(o->op_private &
12856                                     ~(OPpARG1_MASK|OPpSLICE|OPpLVAL_INTRO)));
12857                     /* don't handle slices or 'local delete'; the latter
12858                      * is fairly rare, and has a complex runtime */
12859                     ok =  !(o->op_private & ~OPpARG1_MASK);
12860                     if (OP_TYPE_IS_OR_WAS(cUNOPo->op_first, OP_AELEM))
12861                         /* skip handling run-tome error */
12862                         ok = (ok && cBOOL(o->op_flags & OPf_SPECIAL));
12863                 }
12864                 else {
12865                     ASSUME(o->op_type == OP_AELEM || o->op_type == OP_HELEM);
12866                     ASSUME(!(o->op_flags & ~(OPf_WANT|OPf_KIDS|OPf_MOD
12867                                             |OPf_PARENS|OPf_REF|OPf_SPECIAL)));
12868                     ASSUME(!(o->op_private & ~(OPpARG2_MASK|OPpMAYBE_LVSUB
12869                                     |OPpLVAL_DEFER|OPpDEREF|OPpLVAL_INTRO)));
12870                     ok = (o->op_private & OPpDEREF) != OPpDEREF_SV;
12871                 }
12872             }
12873 
12874             if (ok) {
12875                 if (!first_elem_op)
12876                     first_elem_op = o;
12877                 top_op = o;
12878                 if (is_deref) {
12879                     next_is_hash = cBOOL((o->op_private & OPpDEREF) == OPpDEREF_HV);
12880                     o = o->op_next;
12881                 }
12882                 else {
12883                     is_last = TRUE;
12884                     action |= MDEREF_FLAG_last;
12885                 }
12886             }
12887             else {
12888                 /* at this point we have something that started
12889                  * promisingly enough (with rv2av or whatever), but failed
12890                  * to find a simple index followed by an
12891                  * aelem/helem/exists/delete. If this is the first action,
12892                  * give up; but if we've already seen at least one
12893                  * aelem/helem, then keep them and add a new action with
12894                  * MDEREF_INDEX_none, which causes it to do the vivify
12895                  * from the end of the previous lookup, and do the deref,
12896                  * but stop at that point. So $a[0][expr] will do one
12897                  * av_fetch, vivify and deref, then continue executing at
12898                  * expr */
12899                 if (!action_count)
12900                     return;
12901                 is_last = TRUE;
12902                 index_skip = action_count;
12903                 action |= MDEREF_FLAG_last;
12904             }
12905 
12906             if (pass)
12907                 action_ptr->uv |= (action << (action_ix * MDEREF_SHIFT));
12908             action_ix++;
12909             action_count++;
12910             /* if there's no space for the next action, create a new slot
12911              * for it *before* we start adding args for that action */
12912             if ((action_ix + 1) * MDEREF_SHIFT > UVSIZE*8) {
12913                 action_ptr = arg;
12914                 if (pass)
12915                     arg->uv = 0;
12916                 arg++;
12917                 action_ix = 0;
12918             }
12919         } /* while !is_last */
12920 
12921         /* success! */
12922 
12923         if (pass) {
12924             OP *mderef;
12925             OP *p, *q;
12926 
12927             mderef = newUNOP_AUX(OP_MULTIDEREF, 0, NULL, arg_buf);
12928             if (index_skip == -1) {
12929                 mderef->op_flags = o->op_flags
12930                         & (OPf_WANT|OPf_MOD|(next_is_hash ? OPf_SPECIAL : 0));
12931                 if (o->op_type == OP_EXISTS)
12932                     mderef->op_private = OPpMULTIDEREF_EXISTS;
12933                 else if (o->op_type == OP_DELETE)
12934                     mderef->op_private = OPpMULTIDEREF_DELETE;
12935                 else
12936                     mderef->op_private = o->op_private
12937                         & (OPpMAYBE_LVSUB|OPpLVAL_DEFER|OPpLVAL_INTRO);
12938             }
12939             /* accumulate strictness from every level (although I don't think
12940              * they can actually vary) */
12941             mderef->op_private |= hints;
12942 
12943             /* integrate the new multideref op into the optree and the
12944              * op_next chain.
12945              *
12946              * In general an op like aelem or helem has two child
12947              * sub-trees: the aggregate expression (a_expr) and the
12948              * index expression (i_expr):
12949              *
12950              *     aelem
12951              *       |
12952              *     a_expr - i_expr
12953              *
12954              * The a_expr returns an AV or HV, while the i-expr returns an
12955              * index. In general a multideref replaces most or all of a
12956              * multi-level tree, e.g.
12957              *
12958              *     exists
12959              *       |
12960              *     ex-aelem
12961              *       |
12962              *     rv2av  - i_expr1
12963              *       |
12964              *     helem
12965              *       |
12966              *     rv2hv  - i_expr2
12967              *       |
12968              *     aelem
12969              *       |
12970              *     a_expr - i_expr3
12971              *
12972              * With multideref, all the i_exprs will be simple vars or
12973              * constants, except that i_expr1 may be arbitrary in the case
12974              * of MDEREF_INDEX_none.
12975              *
12976              * The bottom-most a_expr will be either:
12977              *   1) a simple var (so padXv or gv+rv2Xv);
12978              *   2) a simple scalar var dereferenced (e.g. $r->[0]):
12979              *      so a simple var with an extra rv2Xv;
12980              *   3) or an arbitrary expression.
12981              *
12982              * 'start', the first op in the execution chain, will point to
12983              *   1),2): the padXv or gv op;
12984              *   3):    the rv2Xv which forms the last op in the a_expr
12985              *          execution chain, and the top-most op in the a_expr
12986              *          subtree.
12987              *
12988              * For all cases, the 'start' node is no longer required,
12989              * but we can't free it since one or more external nodes
12990              * may point to it. E.g. consider
12991              *     $h{foo} = $a ? $b : $c
12992              * Here, both the op_next and op_other branches of the
12993              * cond_expr point to the gv[*h] of the hash expression, so
12994              * we can't free the 'start' op.
12995              *
12996              * For expr->[...], we need to save the subtree containing the
12997              * expression; for the other cases, we just need to save the
12998              * start node.
12999              * So in all cases, we null the start op and keep it around by
13000              * making it the child of the multideref op; for the expr->
13001              * case, the expr will be a subtree of the start node.
13002              *
13003              * So in the simple 1,2 case the  optree above changes to
13004              *
13005              *     ex-exists
13006              *       |
13007              *     multideref
13008              *       |
13009              *     ex-gv (or ex-padxv)
13010              *
13011              *  with the op_next chain being
13012              *
13013              *  -> ex-gv -> multideref -> op-following-ex-exists ->
13014              *
13015              *  In the 3 case, we have
13016              *
13017              *     ex-exists
13018              *       |
13019              *     multideref
13020              *       |
13021              *     ex-rv2xv
13022              *       |
13023              *    rest-of-a_expr
13024              *      subtree
13025              *
13026              *  and
13027              *
13028              *  -> rest-of-a_expr subtree ->
13029              *    ex-rv2xv -> multideref -> op-following-ex-exists ->
13030              *
13031              *
13032              * Where the last i_expr is non-simple (i.e. MDEREF_INDEX_none,
13033              * e.g. $a[0]{foo}[$x+1], the next rv2xv is nulled and the
13034              * multideref attached as the child, e.g.
13035              *
13036              *     exists
13037              *       |
13038              *     ex-aelem
13039              *       |
13040              *     ex-rv2av  - i_expr1
13041              *       |
13042              *     multideref
13043              *       |
13044              *     ex-whatever
13045              *
13046              */
13047 
13048             /* if we free this op, don't free the pad entry */
13049             if (reset_start_targ)
13050                 start->op_targ = 0;
13051 
13052 
13053             /* Cut the bit we need to save out of the tree and attach to
13054              * the multideref op, then free the rest of the tree */
13055 
13056             /* find parent of node to be detached (for use by splice) */
13057             p = first_elem_op;
13058             if (   orig_action == MDEREF_AV_pop_rv2av_aelem
13059                 || orig_action == MDEREF_HV_pop_rv2hv_helem)
13060             {
13061                 /* there is an arbitrary expression preceding us, e.g.
13062                  * expr->[..]? so we need to save the 'expr' subtree */
13063                 if (p->op_type == OP_EXISTS || p->op_type == OP_DELETE)
13064                     p = cUNOPx(p)->op_first;
13065                 ASSUME(   start->op_type == OP_RV2AV
13066                        || start->op_type == OP_RV2HV);
13067             }
13068             else {
13069                 /* either a padXv or rv2Xv+gv, maybe with an ex-Xelem
13070                  * above for exists/delete. */
13071                 while (   (p->op_flags & OPf_KIDS)
13072                        && cUNOPx(p)->op_first != start
13073                 )
13074                     p = cUNOPx(p)->op_first;
13075             }
13076             ASSUME(cUNOPx(p)->op_first == start);
13077 
13078             /* detach from main tree, and re-attach under the multideref */
13079             op_sibling_splice(mderef, NULL, 0,
13080                     op_sibling_splice(p, NULL, 1, NULL));
13081             op_null(start);
13082 
13083             start->op_next = mderef;
13084 
13085             mderef->op_next = index_skip == -1 ? o->op_next : o;
13086 
13087             /* excise and free the original tree, and replace with
13088              * the multideref op */
13089             p = op_sibling_splice(top_op, NULL, -1, mderef);
13090             while (p) {
13091                 q = OpSIBLING(p);
13092                 op_free(p);
13093                 p = q;
13094             }
13095             op_null(top_op);
13096         }
13097         else {
13098             Size_t size = arg - arg_buf;
13099 
13100             if (maybe_aelemfast && action_count == 1)
13101                 return;
13102 
13103             arg_buf = (UNOP_AUX_item*)PerlMemShared_malloc(
13104                                 sizeof(UNOP_AUX_item) * (size + 1));
13105             /* for dumping etc: store the length in a hidden first slot;
13106              * we set the op_aux pointer to the second slot */
13107             arg_buf->uv = size;
13108             arg_buf++;
13109         }
13110     } /* for (pass = ...) */
13111 }
13112 
13113 
13114 
13115 /* mechanism for deferring recursion in rpeep() */
13116 
13117 #define MAX_DEFERRED 4
13118 
13119 #define DEFER(o) \
13120   STMT_START { \
13121     if (defer_ix == (MAX_DEFERRED-1)) { \
13122         OP **defer = defer_queue[defer_base]; \
13123         CALL_RPEEP(*defer); \
13124         S_prune_chain_head(defer); \
13125 	defer_base = (defer_base + 1) % MAX_DEFERRED; \
13126 	defer_ix--; \
13127     } \
13128     defer_queue[(defer_base + ++defer_ix) % MAX_DEFERRED] = &(o); \
13129   } STMT_END
13130 
13131 #define IS_AND_OP(o)   (o->op_type == OP_AND)
13132 #define IS_OR_OP(o)    (o->op_type == OP_OR)
13133 
13134 
13135 /* A peephole optimizer.  We visit the ops in the order they're to execute.
13136  * See the comments at the top of this file for more details about when
13137  * peep() is called */
13138 
13139 void
13140 Perl_rpeep(pTHX_ OP *o)
13141 {
13142     dVAR;
13143     OP* oldop = NULL;
13144     OP* oldoldop = NULL;
13145     OP** defer_queue[MAX_DEFERRED]; /* small queue of deferred branches */
13146     int defer_base = 0;
13147     int defer_ix = -1;
13148     OP *fop;
13149     OP *sop;
13150 
13151     if (!o || o->op_opt)
13152 	return;
13153     ENTER;
13154     SAVEOP();
13155     SAVEVPTR(PL_curcop);
13156     for (;; o = o->op_next) {
13157 	if (o && o->op_opt)
13158 	    o = NULL;
13159 	if (!o) {
13160 	    while (defer_ix >= 0) {
13161                 OP **defer =
13162                         defer_queue[(defer_base + defer_ix--) % MAX_DEFERRED];
13163                 CALL_RPEEP(*defer);
13164                 S_prune_chain_head(defer);
13165             }
13166 	    break;
13167 	}
13168 
13169       redo:
13170 
13171         /* oldoldop -> oldop -> o should be a chain of 3 adjacent ops */
13172         assert(!oldoldop || oldoldop->op_next == oldop);
13173         assert(!oldop    || oldop->op_next    == o);
13174 
13175 	/* By default, this op has now been optimised. A couple of cases below
13176 	   clear this again.  */
13177 	o->op_opt = 1;
13178 	PL_op = o;
13179 
13180         /* look for a series of 1 or more aggregate derefs, e.g.
13181          *   $a[1]{foo}[$i]{$k}
13182          * and replace with a single OP_MULTIDEREF op.
13183          * Each index must be either a const, or a simple variable,
13184          *
13185          * First, look for likely combinations of starting ops,
13186          * corresponding to (global and lexical variants of)
13187          *     $a[...]   $h{...}
13188          *     $r->[...] $r->{...}
13189          *     (preceding expression)->[...]
13190          *     (preceding expression)->{...}
13191          * and if so, call maybe_multideref() to do a full inspection
13192          * of the op chain and if appropriate, replace with an
13193          * OP_MULTIDEREF
13194          */
13195         {
13196             UV action;
13197             OP *o2 = o;
13198             U8 hints = 0;
13199 
13200             switch (o2->op_type) {
13201             case OP_GV:
13202                 /* $pkg[..]   :   gv[*pkg]
13203                  * $pkg->[...]:   gv[*pkg]; rv2sv sKM/DREFAV */
13204 
13205                 /* Fail if there are new op flag combinations that we're
13206                  * not aware of, rather than:
13207                  *  * silently failing to optimise, or
13208                  *  * silently optimising the flag away.
13209                  * If this ASSUME starts failing, examine what new flag
13210                  * has been added to the op, and decide whether the
13211                  * optimisation should still occur with that flag, then
13212                  * update the code accordingly. This applies to all the
13213                  * other ASSUMEs in the block of code too.
13214                  */
13215                 ASSUME(!(o2->op_flags &
13216                             ~(OPf_WANT|OPf_MOD|OPf_PARENS|OPf_SPECIAL)));
13217                 ASSUME(!(o2->op_private & ~OPpEARLY_CV));
13218 
13219                 o2 = o2->op_next;
13220 
13221                 if (o2->op_type == OP_RV2AV) {
13222                     action = MDEREF_AV_gvav_aelem;
13223                     goto do_deref;
13224                 }
13225 
13226                 if (o2->op_type == OP_RV2HV) {
13227                     action = MDEREF_HV_gvhv_helem;
13228                     goto do_deref;
13229                 }
13230 
13231                 if (o2->op_type != OP_RV2SV)
13232                     break;
13233 
13234                 /* at this point we've seen gv,rv2sv, so the only valid
13235                  * construct left is $pkg->[] or $pkg->{} */
13236 
13237                 ASSUME(!(o2->op_flags & OPf_STACKED));
13238                 if ((o2->op_flags & (OPf_WANT|OPf_REF|OPf_MOD|OPf_SPECIAL))
13239                             != (OPf_WANT_SCALAR|OPf_MOD))
13240                     break;
13241 
13242                 ASSUME(!(o2->op_private & ~(OPpARG1_MASK|HINT_STRICT_REFS
13243                                     |OPpOUR_INTRO|OPpDEREF|OPpLVAL_INTRO)));
13244                 if (o2->op_private & (OPpOUR_INTRO|OPpLVAL_INTRO))
13245                     break;
13246                 if (   (o2->op_private & OPpDEREF) != OPpDEREF_AV
13247                     && (o2->op_private & OPpDEREF) != OPpDEREF_HV)
13248                     break;
13249 
13250                 o2 = o2->op_next;
13251                 if (o2->op_type == OP_RV2AV) {
13252                     action = MDEREF_AV_gvsv_vivify_rv2av_aelem;
13253                     goto do_deref;
13254                 }
13255                 if (o2->op_type == OP_RV2HV) {
13256                     action = MDEREF_HV_gvsv_vivify_rv2hv_helem;
13257                     goto do_deref;
13258                 }
13259                 break;
13260 
13261             case OP_PADSV:
13262                 /* $lex->[...]: padsv[$lex] sM/DREFAV */
13263 
13264                 ASSUME(!(o2->op_flags &
13265                     ~(OPf_WANT|OPf_PARENS|OPf_REF|OPf_MOD|OPf_SPECIAL)));
13266                 if ((o2->op_flags &
13267                         (OPf_WANT|OPf_REF|OPf_MOD|OPf_SPECIAL))
13268                      != (OPf_WANT_SCALAR|OPf_MOD))
13269                     break;
13270 
13271                 ASSUME(!(o2->op_private &
13272                                 ~(OPpPAD_STATE|OPpDEREF|OPpLVAL_INTRO)));
13273                 /* skip if state or intro, or not a deref */
13274                 if (      o2->op_private != OPpDEREF_AV
13275                        && o2->op_private != OPpDEREF_HV)
13276                     break;
13277 
13278                 o2 = o2->op_next;
13279                 if (o2->op_type == OP_RV2AV) {
13280                     action = MDEREF_AV_padsv_vivify_rv2av_aelem;
13281                     goto do_deref;
13282                 }
13283                 if (o2->op_type == OP_RV2HV) {
13284                     action = MDEREF_HV_padsv_vivify_rv2hv_helem;
13285                     goto do_deref;
13286                 }
13287                 break;
13288 
13289             case OP_PADAV:
13290             case OP_PADHV:
13291                 /*    $lex[..]:  padav[@lex:1,2] sR *
13292                  * or $lex{..}:  padhv[%lex:1,2] sR */
13293                 ASSUME(!(o2->op_flags & ~(OPf_WANT|OPf_MOD|OPf_PARENS|
13294                                             OPf_REF|OPf_SPECIAL)));
13295                 if ((o2->op_flags &
13296                         (OPf_WANT|OPf_REF|OPf_MOD|OPf_SPECIAL))
13297                      != (OPf_WANT_SCALAR|OPf_REF))
13298                     break;
13299                 if (o2->op_flags != (OPf_WANT_SCALAR|OPf_REF))
13300                     break;
13301                 /* OPf_PARENS isn't currently used in this case;
13302                  * if that changes, let us know! */
13303                 ASSUME(!(o2->op_flags & OPf_PARENS));
13304 
13305                 /* at this point, we wouldn't expect any of the remaining
13306                  * possible private flags:
13307                  * OPpPAD_STATE, OPpLVAL_INTRO, OPpTRUEBOOL,
13308                  * OPpMAYBE_TRUEBOOL, OPpMAYBE_LVSUB
13309                  *
13310                  * OPpSLICEWARNING shouldn't affect runtime
13311                  */
13312                 ASSUME(!(o2->op_private & ~(OPpSLICEWARNING)));
13313 
13314                 action = o2->op_type == OP_PADAV
13315                             ? MDEREF_AV_padav_aelem
13316                             : MDEREF_HV_padhv_helem;
13317                 o2 = o2->op_next;
13318                 S_maybe_multideref(aTHX_ o, o2, action, 0);
13319                 break;
13320 
13321 
13322             case OP_RV2AV:
13323             case OP_RV2HV:
13324                 action = o2->op_type == OP_RV2AV
13325                             ? MDEREF_AV_pop_rv2av_aelem
13326                             : MDEREF_HV_pop_rv2hv_helem;
13327                 /* FALLTHROUGH */
13328             do_deref:
13329                 /* (expr)->[...]:  rv2av sKR/1;
13330                  * (expr)->{...}:  rv2hv sKR/1; */
13331 
13332                 ASSUME(o2->op_type == OP_RV2AV || o2->op_type == OP_RV2HV);
13333 
13334                 ASSUME(!(o2->op_flags & ~(OPf_WANT|OPf_KIDS|OPf_PARENS
13335                                 |OPf_REF|OPf_MOD|OPf_STACKED|OPf_SPECIAL)));
13336                 if (o2->op_flags != (OPf_WANT_SCALAR|OPf_KIDS|OPf_REF))
13337                     break;
13338 
13339                 /* at this point, we wouldn't expect any of these
13340                  * possible private flags:
13341                  * OPpMAYBE_LVSUB, OPpLVAL_INTRO
13342                  * OPpTRUEBOOL, OPpMAYBE_TRUEBOOL, (rv2hv only)
13343                  */
13344                 ASSUME(!(o2->op_private &
13345                     ~(OPpHINT_STRICT_REFS|OPpARG1_MASK|OPpSLICEWARNING
13346                      |OPpOUR_INTRO)));
13347                 hints |= (o2->op_private & OPpHINT_STRICT_REFS);
13348 
13349                 o2 = o2->op_next;
13350 
13351                 S_maybe_multideref(aTHX_ o, o2, action, hints);
13352                 break;
13353 
13354             default:
13355                 break;
13356             }
13357         }
13358 
13359 
13360 	switch (o->op_type) {
13361 	case OP_DBSTATE:
13362 	    PL_curcop = ((COP*)o);		/* for warnings */
13363 	    break;
13364 	case OP_NEXTSTATE:
13365 	    PL_curcop = ((COP*)o);		/* for warnings */
13366 
13367 	    /* Optimise a "return ..." at the end of a sub to just be "...".
13368 	     * This saves 2 ops. Before:
13369 	     * 1  <;> nextstate(main 1 -e:1) v ->2
13370 	     * 4  <@> return K ->5
13371 	     * 2    <0> pushmark s ->3
13372 	     * -    <1> ex-rv2sv sK/1 ->4
13373 	     * 3      <#> gvsv[*cat] s ->4
13374 	     *
13375 	     * After:
13376 	     * -  <@> return K ->-
13377 	     * -    <0> pushmark s ->2
13378 	     * -    <1> ex-rv2sv sK/1 ->-
13379 	     * 2      <$> gvsv(*cat) s ->3
13380 	     */
13381 	    {
13382 		OP *next = o->op_next;
13383 		OP *sibling = OpSIBLING(o);
13384 		if (   OP_TYPE_IS(next, OP_PUSHMARK)
13385 		    && OP_TYPE_IS(sibling, OP_RETURN)
13386 		    && OP_TYPE_IS(sibling->op_next, OP_LINESEQ)
13387 		    && ( OP_TYPE_IS(sibling->op_next->op_next, OP_LEAVESUB)
13388 		       ||OP_TYPE_IS(sibling->op_next->op_next,
13389 				    OP_LEAVESUBLV))
13390 		    && cUNOPx(sibling)->op_first == next
13391 		    && OpHAS_SIBLING(next) && OpSIBLING(next)->op_next
13392 		    && next->op_next
13393 		) {
13394 		    /* Look through the PUSHMARK's siblings for one that
13395 		     * points to the RETURN */
13396 		    OP *top = OpSIBLING(next);
13397 		    while (top && top->op_next) {
13398 			if (top->op_next == sibling) {
13399 			    top->op_next = sibling->op_next;
13400 			    o->op_next = next->op_next;
13401 			    break;
13402 			}
13403 			top = OpSIBLING(top);
13404 		    }
13405 		}
13406 	    }
13407 
13408 	    /* Optimise 'my $x; my $y;' into 'my ($x, $y);'
13409              *
13410 	     * This latter form is then suitable for conversion into padrange
13411 	     * later on. Convert:
13412 	     *
13413 	     *   nextstate1 -> padop1 -> nextstate2 -> padop2 -> nextstate3
13414 	     *
13415 	     * into:
13416 	     *
13417 	     *   nextstate1 ->     listop     -> nextstate3
13418 	     *                 /            \
13419 	     *         pushmark -> padop1 -> padop2
13420 	     */
13421 	    if (o->op_next && (
13422 		    o->op_next->op_type == OP_PADSV
13423 		 || o->op_next->op_type == OP_PADAV
13424 		 || o->op_next->op_type == OP_PADHV
13425 		)
13426 		&& !(o->op_next->op_private & ~OPpLVAL_INTRO)
13427 		&& o->op_next->op_next && o->op_next->op_next->op_type == OP_NEXTSTATE
13428 		&& o->op_next->op_next->op_next && (
13429 		    o->op_next->op_next->op_next->op_type == OP_PADSV
13430 		 || o->op_next->op_next->op_next->op_type == OP_PADAV
13431 		 || o->op_next->op_next->op_next->op_type == OP_PADHV
13432 		)
13433 		&& !(o->op_next->op_next->op_next->op_private & ~OPpLVAL_INTRO)
13434 		&& o->op_next->op_next->op_next->op_next && o->op_next->op_next->op_next->op_next->op_type == OP_NEXTSTATE
13435 		&& (!CopLABEL((COP*)o)) /* Don't mess with labels */
13436 		&& (!CopLABEL((COP*)o->op_next->op_next)) /* ... */
13437 	    ) {
13438 		OP *pad1, *ns2, *pad2, *ns3, *newop, *newpm;
13439 
13440 		pad1 =    o->op_next;
13441 		ns2  = pad1->op_next;
13442 		pad2 =  ns2->op_next;
13443 		ns3  = pad2->op_next;
13444 
13445                 /* we assume here that the op_next chain is the same as
13446                  * the op_sibling chain */
13447                 assert(OpSIBLING(o)    == pad1);
13448                 assert(OpSIBLING(pad1) == ns2);
13449                 assert(OpSIBLING(ns2)  == pad2);
13450                 assert(OpSIBLING(pad2) == ns3);
13451 
13452                 /* excise and delete ns2 */
13453                 op_sibling_splice(NULL, pad1, 1, NULL);
13454                 op_free(ns2);
13455 
13456                 /* excise pad1 and pad2 */
13457                 op_sibling_splice(NULL, o, 2, NULL);
13458 
13459                 /* create new listop, with children consisting of:
13460                  * a new pushmark, pad1, pad2. */
13461 		newop = newLISTOP(OP_LIST, 0, pad1, pad2);
13462 		newop->op_flags |= OPf_PARENS;
13463 		newop->op_flags = (newop->op_flags & ~OPf_WANT) | OPf_WANT_VOID;
13464 
13465                 /* insert newop between o and ns3 */
13466                 op_sibling_splice(NULL, o, 0, newop);
13467 
13468                 /*fixup op_next chain */
13469                 newpm = cUNOPx(newop)->op_first; /* pushmark */
13470 		o    ->op_next = newpm;
13471 		newpm->op_next = pad1;
13472 		pad1 ->op_next = pad2;
13473 		pad2 ->op_next = newop; /* listop */
13474 		newop->op_next = ns3;
13475 
13476 		/* Ensure pushmark has this flag if padops do */
13477 		if (pad1->op_flags & OPf_MOD && pad2->op_flags & OPf_MOD) {
13478 		    newpm->op_flags |= OPf_MOD;
13479 		}
13480 
13481 		break;
13482 	    }
13483 
13484 	    /* Two NEXTSTATEs in a row serve no purpose. Except if they happen
13485 	       to carry two labels. For now, take the easier option, and skip
13486 	       this optimisation if the first NEXTSTATE has a label.  */
13487 	    if (!CopLABEL((COP*)o) && !PERLDB_NOOPT) {
13488 		OP *nextop = o->op_next;
13489 		while (nextop && nextop->op_type == OP_NULL)
13490 		    nextop = nextop->op_next;
13491 
13492 		if (nextop && (nextop->op_type == OP_NEXTSTATE)) {
13493 		    op_null(o);
13494 		    if (oldop)
13495 			oldop->op_next = nextop;
13496                     o = nextop;
13497 		    /* Skip (old)oldop assignment since the current oldop's
13498 		       op_next already points to the next op.  */
13499 		    goto redo;
13500 		}
13501 	    }
13502 	    break;
13503 
13504 	case OP_CONCAT:
13505 	    if (o->op_next && o->op_next->op_type == OP_STRINGIFY) {
13506 		if (o->op_next->op_private & OPpTARGET_MY) {
13507 		    if (o->op_flags & OPf_STACKED) /* chained concats */
13508 			break; /* ignore_optimization */
13509 		    else {
13510 			/* assert(PL_opargs[o->op_type] & OA_TARGLEX); */
13511 			o->op_targ = o->op_next->op_targ;
13512 			o->op_next->op_targ = 0;
13513 			o->op_private |= OPpTARGET_MY;
13514 		    }
13515 		}
13516 		op_null(o->op_next);
13517 	    }
13518 	    break;
13519 	case OP_STUB:
13520 	    if ((o->op_flags & OPf_WANT) != OPf_WANT_LIST) {
13521 		break; /* Scalar stub must produce undef.  List stub is noop */
13522 	    }
13523 	    goto nothin;
13524 	case OP_NULL:
13525 	    if (o->op_targ == OP_NEXTSTATE
13526 		|| o->op_targ == OP_DBSTATE)
13527 	    {
13528 		PL_curcop = ((COP*)o);
13529 	    }
13530 	    /* XXX: We avoid setting op_seq here to prevent later calls
13531 	       to rpeep() from mistakenly concluding that optimisation
13532 	       has already occurred. This doesn't fix the real problem,
13533 	       though (See 20010220.007). AMS 20010719 */
13534 	    /* op_seq functionality is now replaced by op_opt */
13535 	    o->op_opt = 0;
13536 	    /* FALLTHROUGH */
13537 	case OP_SCALAR:
13538 	case OP_LINESEQ:
13539 	case OP_SCOPE:
13540 	nothin:
13541 	    if (oldop) {
13542 		oldop->op_next = o->op_next;
13543 		o->op_opt = 0;
13544 		continue;
13545 	    }
13546 	    break;
13547 
13548         case OP_PUSHMARK:
13549 
13550             /* Given
13551                  5 repeat/DOLIST
13552                  3   ex-list
13553                  1     pushmark
13554                  2     scalar or const
13555                  4   const[0]
13556                convert repeat into a stub with no kids.
13557              */
13558             if (o->op_next->op_type == OP_CONST
13559              || (  o->op_next->op_type == OP_PADSV
13560                 && !(o->op_next->op_private & OPpLVAL_INTRO))
13561              || (  o->op_next->op_type == OP_GV
13562                 && o->op_next->op_next->op_type == OP_RV2SV
13563                 && !(o->op_next->op_next->op_private
13564                         & (OPpLVAL_INTRO|OPpOUR_INTRO))))
13565             {
13566                 const OP *kid = o->op_next->op_next;
13567                 if (o->op_next->op_type == OP_GV)
13568                    kid = kid->op_next;
13569                 /* kid is now the ex-list.  */
13570                 if (kid->op_type == OP_NULL
13571                  && (kid = kid->op_next)->op_type == OP_CONST
13572                     /* kid is now the repeat count.  */
13573                  && kid->op_next->op_type == OP_REPEAT
13574                  && kid->op_next->op_private & OPpREPEAT_DOLIST
13575                  && (kid->op_next->op_flags & OPf_WANT) == OPf_WANT_LIST
13576                  && SvIOK(kSVOP_sv) && SvIVX(kSVOP_sv) == 0)
13577                 {
13578                     o = kid->op_next; /* repeat */
13579                     assert(oldop);
13580                     oldop->op_next = o;
13581                     op_free(cBINOPo->op_first);
13582                     op_free(cBINOPo->op_last );
13583                     o->op_flags &=~ OPf_KIDS;
13584                     /* stub is a baseop; repeat is a binop */
13585                     STATIC_ASSERT_STMT(sizeof(OP) <= sizeof(BINOP));
13586                     OpTYPE_set(o, OP_STUB);
13587                     o->op_private = 0;
13588                     break;
13589                 }
13590             }
13591 
13592             /* Convert a series of PAD ops for my vars plus support into a
13593              * single padrange op. Basically
13594              *
13595              *    pushmark -> pad[ahs]v -> pad[ahs]?v -> ... -> (list) -> rest
13596              *
13597              * becomes, depending on circumstances, one of
13598              *
13599              *    padrange  ----------------------------------> (list) -> rest
13600              *    padrange  --------------------------------------------> rest
13601              *
13602              * where all the pad indexes are sequential and of the same type
13603              * (INTRO or not).
13604              * We convert the pushmark into a padrange op, then skip
13605              * any other pad ops, and possibly some trailing ops.
13606              * Note that we don't null() the skipped ops, to make it
13607              * easier for Deparse to undo this optimisation (and none of
13608              * the skipped ops are holding any resourses). It also makes
13609              * it easier for find_uninit_var(), as it can just ignore
13610              * padrange, and examine the original pad ops.
13611              */
13612         {
13613             OP *p;
13614             OP *followop = NULL; /* the op that will follow the padrange op */
13615             U8 count = 0;
13616             U8 intro = 0;
13617             PADOFFSET base = 0; /* init only to stop compiler whining */
13618             bool gvoid = 0;     /* init only to stop compiler whining */
13619             bool defav = 0;  /* seen (...) = @_ */
13620             bool reuse = 0;  /* reuse an existing padrange op */
13621 
13622             /* look for a pushmark -> gv[_] -> rv2av */
13623 
13624             {
13625                 OP *rv2av, *q;
13626                 p = o->op_next;
13627                 if (   p->op_type == OP_GV
13628                     && cGVOPx_gv(p) == PL_defgv
13629                     && (rv2av = p->op_next)
13630                     && rv2av->op_type == OP_RV2AV
13631                     && !(rv2av->op_flags & OPf_REF)
13632                     && !(rv2av->op_private & (OPpLVAL_INTRO|OPpMAYBE_LVSUB))
13633                     && ((rv2av->op_flags & OPf_WANT) == OPf_WANT_LIST)
13634                 ) {
13635                     q = rv2av->op_next;
13636                     if (q->op_type == OP_NULL)
13637                         q = q->op_next;
13638                     if (q->op_type == OP_PUSHMARK) {
13639                         defav = 1;
13640                         p = q;
13641                     }
13642                 }
13643             }
13644             if (!defav) {
13645                 p = o;
13646             }
13647 
13648             /* scan for PAD ops */
13649 
13650             for (p = p->op_next; p; p = p->op_next) {
13651                 if (p->op_type == OP_NULL)
13652                     continue;
13653 
13654                 if ((     p->op_type != OP_PADSV
13655                        && p->op_type != OP_PADAV
13656                        && p->op_type != OP_PADHV
13657                     )
13658                       /* any private flag other than INTRO? e.g. STATE */
13659                    || (p->op_private & ~OPpLVAL_INTRO)
13660                 )
13661                     break;
13662 
13663                 /* let $a[N] potentially be optimised into AELEMFAST_LEX
13664                  * instead */
13665                 if (   p->op_type == OP_PADAV
13666                     && p->op_next
13667                     && p->op_next->op_type == OP_CONST
13668                     && p->op_next->op_next
13669                     && p->op_next->op_next->op_type == OP_AELEM
13670                 )
13671                     break;
13672 
13673                 /* for 1st padop, note what type it is and the range
13674                  * start; for the others, check that it's the same type
13675                  * and that the targs are contiguous */
13676                 if (count == 0) {
13677                     intro = (p->op_private & OPpLVAL_INTRO);
13678                     base = p->op_targ;
13679                     gvoid = OP_GIMME(p,0) == G_VOID;
13680                 }
13681                 else {
13682                     if ((p->op_private & OPpLVAL_INTRO) != intro)
13683                         break;
13684                     /* Note that you'd normally  expect targs to be
13685                      * contiguous in my($a,$b,$c), but that's not the case
13686                      * when external modules start doing things, e.g.
13687                      * Function::Parameters */
13688                     if (p->op_targ != base + count)
13689                         break;
13690                     assert(p->op_targ == base + count);
13691                     /* Either all the padops or none of the padops should
13692                        be in void context.  Since we only do the optimisa-
13693                        tion for av/hv when the aggregate itself is pushed
13694                        on to the stack (one item), there is no need to dis-
13695                        tinguish list from scalar context.  */
13696                     if (gvoid != (OP_GIMME(p,0) == G_VOID))
13697                         break;
13698                 }
13699 
13700                 /* for AV, HV, only when we're not flattening */
13701                 if (   p->op_type != OP_PADSV
13702                     && !gvoid
13703                     && !(p->op_flags & OPf_REF)
13704                 )
13705                     break;
13706 
13707                 if (count >= OPpPADRANGE_COUNTMASK)
13708                     break;
13709 
13710                 /* there's a biggest base we can fit into a
13711                  * SAVEt_CLEARPADRANGE in pp_padrange.
13712                  * (The sizeof() stuff will be constant-folded, and is
13713                  * intended to avoid getting "comparison is always false"
13714                  * compiler warnings. See the comments above
13715                  * MEM_WRAP_CHECK for more explanation on why we do this
13716                  * in a weird way to avoid compiler warnings.)
13717                  */
13718                 if (   intro
13719                     && (8*sizeof(base) >
13720                         8*sizeof(UV)-OPpPADRANGE_COUNTSHIFT-SAVE_TIGHT_SHIFT
13721                         ? base
13722                         : (UV_MAX >> (OPpPADRANGE_COUNTSHIFT+SAVE_TIGHT_SHIFT))
13723                         ) >
13724                         (UV_MAX >> (OPpPADRANGE_COUNTSHIFT+SAVE_TIGHT_SHIFT))
13725                 )
13726                     break;
13727 
13728                 /* Success! We've got another valid pad op to optimise away */
13729                 count++;
13730                 followop = p->op_next;
13731             }
13732 
13733             if (count < 1 || (count == 1 && !defav))
13734                 break;
13735 
13736             /* pp_padrange in specifically compile-time void context
13737              * skips pushing a mark and lexicals; in all other contexts
13738              * (including unknown till runtime) it pushes a mark and the
13739              * lexicals. We must be very careful then, that the ops we
13740              * optimise away would have exactly the same effect as the
13741              * padrange.
13742              * In particular in void context, we can only optimise to
13743              * a padrange if we see the complete sequence
13744              *     pushmark, pad*v, ...., list
13745              * which has the net effect of leaving the markstack as it
13746              * was.  Not pushing onto the stack (whereas padsv does touch
13747              * the stack) makes no difference in void context.
13748              */
13749             assert(followop);
13750             if (gvoid) {
13751                 if (followop->op_type == OP_LIST
13752                         && OP_GIMME(followop,0) == G_VOID
13753                    )
13754                 {
13755                     followop = followop->op_next; /* skip OP_LIST */
13756 
13757                     /* consolidate two successive my(...);'s */
13758 
13759                     if (   oldoldop
13760                         && oldoldop->op_type == OP_PADRANGE
13761                         && (oldoldop->op_flags & OPf_WANT) == OPf_WANT_VOID
13762                         && (oldoldop->op_private & OPpLVAL_INTRO) == intro
13763                         && !(oldoldop->op_flags & OPf_SPECIAL)
13764                     ) {
13765                         U8 old_count;
13766                         assert(oldoldop->op_next == oldop);
13767                         assert(   oldop->op_type == OP_NEXTSTATE
13768                                || oldop->op_type == OP_DBSTATE);
13769                         assert(oldop->op_next == o);
13770 
13771                         old_count
13772                             = (oldoldop->op_private & OPpPADRANGE_COUNTMASK);
13773 
13774                        /* Do not assume pad offsets for $c and $d are con-
13775                           tiguous in
13776                             my ($a,$b,$c);
13777                             my ($d,$e,$f);
13778                         */
13779                         if (  oldoldop->op_targ + old_count == base
13780                            && old_count < OPpPADRANGE_COUNTMASK - count) {
13781                             base = oldoldop->op_targ;
13782                             count += old_count;
13783                             reuse = 1;
13784                         }
13785                     }
13786 
13787                     /* if there's any immediately following singleton
13788                      * my var's; then swallow them and the associated
13789                      * nextstates; i.e.
13790                      *    my ($a,$b); my $c; my $d;
13791                      * is treated as
13792                      *    my ($a,$b,$c,$d);
13793                      */
13794 
13795                     while (    ((p = followop->op_next))
13796                             && (  p->op_type == OP_PADSV
13797                                || p->op_type == OP_PADAV
13798                                || p->op_type == OP_PADHV)
13799                             && (p->op_flags & OPf_WANT) == OPf_WANT_VOID
13800                             && (p->op_private & OPpLVAL_INTRO) == intro
13801                             && !(p->op_private & ~OPpLVAL_INTRO)
13802                             && p->op_next
13803                             && (   p->op_next->op_type == OP_NEXTSTATE
13804                                 || p->op_next->op_type == OP_DBSTATE)
13805                             && count < OPpPADRANGE_COUNTMASK
13806                             && base + count == p->op_targ
13807                     ) {
13808                         count++;
13809                         followop = p->op_next;
13810                     }
13811                 }
13812                 else
13813                     break;
13814             }
13815 
13816             if (reuse) {
13817                 assert(oldoldop->op_type == OP_PADRANGE);
13818                 oldoldop->op_next = followop;
13819                 oldoldop->op_private = (intro | count);
13820                 o = oldoldop;
13821                 oldop = NULL;
13822                 oldoldop = NULL;
13823             }
13824             else {
13825                 /* Convert the pushmark into a padrange.
13826                  * To make Deparse easier, we guarantee that a padrange was
13827                  * *always* formerly a pushmark */
13828                 assert(o->op_type == OP_PUSHMARK);
13829                 o->op_next = followop;
13830                 OpTYPE_set(o, OP_PADRANGE);
13831                 o->op_targ = base;
13832                 /* bit 7: INTRO; bit 6..0: count */
13833                 o->op_private = (intro | count);
13834                 o->op_flags = ((o->op_flags & ~(OPf_WANT|OPf_SPECIAL))
13835                               | gvoid * OPf_WANT_VOID
13836                               | (defav ? OPf_SPECIAL : 0));
13837             }
13838             break;
13839         }
13840 
13841 	case OP_PADAV:
13842 	case OP_PADSV:
13843 	case OP_PADHV:
13844 	/* Skip over state($x) in void context.  */
13845 	if (oldop && o->op_private == (OPpPAD_STATE|OPpLVAL_INTRO)
13846 	 && (o->op_flags & OPf_WANT) == OPf_WANT_VOID)
13847 	{
13848 	    oldop->op_next = o->op_next;
13849 	    goto redo_nextstate;
13850 	}
13851 	if (o->op_type != OP_PADAV)
13852 	    break;
13853 	/* FALLTHROUGH */
13854 	case OP_GV:
13855 	    if (o->op_type == OP_PADAV || o->op_next->op_type == OP_RV2AV) {
13856 		OP* const pop = (o->op_type == OP_PADAV) ?
13857 			    o->op_next : o->op_next->op_next;
13858 		IV i;
13859 		if (pop && pop->op_type == OP_CONST &&
13860 		    ((PL_op = pop->op_next)) &&
13861 		    pop->op_next->op_type == OP_AELEM &&
13862 		    !(pop->op_next->op_private &
13863 		      (OPpLVAL_INTRO|OPpLVAL_DEFER|OPpDEREF|OPpMAYBE_LVSUB)) &&
13864 		    (i = SvIV(((SVOP*)pop)->op_sv)) >= -128 && i <= 127)
13865 		{
13866 		    GV *gv;
13867 		    if (cSVOPx(pop)->op_private & OPpCONST_STRICT)
13868 			no_bareword_allowed(pop);
13869 		    if (o->op_type == OP_GV)
13870 			op_null(o->op_next);
13871 		    op_null(pop->op_next);
13872 		    op_null(pop);
13873 		    o->op_flags |= pop->op_next->op_flags & OPf_MOD;
13874 		    o->op_next = pop->op_next->op_next;
13875 		    o->op_ppaddr = PL_ppaddr[OP_AELEMFAST];
13876 		    o->op_private = (U8)i;
13877 		    if (o->op_type == OP_GV) {
13878 			gv = cGVOPo_gv;
13879 			GvAVn(gv);
13880 			o->op_type = OP_AELEMFAST;
13881 		    }
13882 		    else
13883 			o->op_type = OP_AELEMFAST_LEX;
13884 		}
13885 		if (o->op_type != OP_GV)
13886 		    break;
13887 	    }
13888 
13889 	    /* Remove $foo from the op_next chain in void context.  */
13890 	    if (oldop
13891 	     && (  o->op_next->op_type == OP_RV2SV
13892 		|| o->op_next->op_type == OP_RV2AV
13893 		|| o->op_next->op_type == OP_RV2HV  )
13894 	     && (o->op_next->op_flags & OPf_WANT) == OPf_WANT_VOID
13895 	     && !(o->op_next->op_private & OPpLVAL_INTRO))
13896 	    {
13897 		oldop->op_next = o->op_next->op_next;
13898 		/* Reprocess the previous op if it is a nextstate, to
13899 		   allow double-nextstate optimisation.  */
13900 	      redo_nextstate:
13901 		if (oldop->op_type == OP_NEXTSTATE) {
13902 		    oldop->op_opt = 0;
13903 		    o = oldop;
13904 		    oldop = oldoldop;
13905 		    oldoldop = NULL;
13906 		    goto redo;
13907 		}
13908 		o = oldop->op_next;
13909                 goto redo;
13910 	    }
13911 	    else if (o->op_next->op_type == OP_RV2SV) {
13912 		if (!(o->op_next->op_private & OPpDEREF)) {
13913 		    op_null(o->op_next);
13914 		    o->op_private |= o->op_next->op_private & (OPpLVAL_INTRO
13915 							       | OPpOUR_INTRO);
13916 		    o->op_next = o->op_next->op_next;
13917                     OpTYPE_set(o, OP_GVSV);
13918 		}
13919 	    }
13920 	    else if (o->op_next->op_type == OP_READLINE
13921 		    && o->op_next->op_next->op_type == OP_CONCAT
13922 		    && (o->op_next->op_next->op_flags & OPf_STACKED))
13923 	    {
13924 		/* Turn "$a .= <FH>" into an OP_RCATLINE. AMS 20010917 */
13925                 OpTYPE_set(o, OP_RCATLINE);
13926 		o->op_flags |= OPf_STACKED;
13927 		op_null(o->op_next->op_next);
13928 		op_null(o->op_next);
13929 	    }
13930 
13931 	    break;
13932 
13933 #define HV_OR_SCALARHV(op)                                   \
13934     (  (op)->op_type == OP_PADHV || (op)->op_type == OP_RV2HV \
13935        ? (op)                                                  \
13936        : (op)->op_type == OP_SCALAR && (op)->op_flags & OPf_KIDS \
13937        && (  cUNOPx(op)->op_first->op_type == OP_PADHV          \
13938           || cUNOPx(op)->op_first->op_type == OP_RV2HV)          \
13939          ? cUNOPx(op)->op_first                                   \
13940          : NULL)
13941 
13942         case OP_NOT:
13943             if ((fop = HV_OR_SCALARHV(cUNOP->op_first)))
13944                 fop->op_private |= OPpTRUEBOOL;
13945             break;
13946 
13947         case OP_AND:
13948 	case OP_OR:
13949 	case OP_DOR:
13950             fop = cLOGOP->op_first;
13951             sop = OpSIBLING(fop);
13952 	    while (cLOGOP->op_other->op_type == OP_NULL)
13953 		cLOGOP->op_other = cLOGOP->op_other->op_next;
13954 	    while (o->op_next && (   o->op_type == o->op_next->op_type
13955 				  || o->op_next->op_type == OP_NULL))
13956 		o->op_next = o->op_next->op_next;
13957 
13958 	    /* If we're an OR and our next is an AND in void context, we'll
13959 	       follow its op_other on short circuit, same for reverse.
13960 	       We can't do this with OP_DOR since if it's true, its return
13961 	       value is the underlying value which must be evaluated
13962 	       by the next op. */
13963 	    if (o->op_next &&
13964 	        (
13965 		    (IS_AND_OP(o) && IS_OR_OP(o->op_next))
13966 	         || (IS_OR_OP(o) && IS_AND_OP(o->op_next))
13967 	        )
13968 	        && (o->op_next->op_flags & OPf_WANT) == OPf_WANT_VOID
13969 	    ) {
13970 	        o->op_next = ((LOGOP*)o->op_next)->op_other;
13971 	    }
13972 	    DEFER(cLOGOP->op_other);
13973 
13974 	    o->op_opt = 1;
13975             fop = HV_OR_SCALARHV(fop);
13976             if (sop) sop = HV_OR_SCALARHV(sop);
13977             if (fop || sop
13978             ){
13979                 OP * nop = o;
13980                 OP * lop = o;
13981                 if (!((nop->op_flags & OPf_WANT) == OPf_WANT_VOID)) {
13982                     while (nop && nop->op_next) {
13983                         switch (nop->op_next->op_type) {
13984                             case OP_NOT:
13985                             case OP_AND:
13986                             case OP_OR:
13987                             case OP_DOR:
13988                                 lop = nop = nop->op_next;
13989                                 break;
13990                             case OP_NULL:
13991                                 nop = nop->op_next;
13992                                 break;
13993                             default:
13994                                 nop = NULL;
13995                                 break;
13996                         }
13997                     }
13998                 }
13999                 if (fop) {
14000                     if (  (lop->op_flags & OPf_WANT) == OPf_WANT_VOID
14001                       || o->op_type == OP_AND  )
14002                         fop->op_private |= OPpTRUEBOOL;
14003                     else if (!(lop->op_flags & OPf_WANT))
14004                         fop->op_private |= OPpMAYBE_TRUEBOOL;
14005                 }
14006                 if (  (lop->op_flags & OPf_WANT) == OPf_WANT_VOID
14007                    && sop)
14008                     sop->op_private |= OPpTRUEBOOL;
14009             }
14010 
14011 
14012 	    break;
14013 
14014 	case OP_COND_EXPR:
14015 	    if ((fop = HV_OR_SCALARHV(cLOGOP->op_first)))
14016 		fop->op_private |= OPpTRUEBOOL;
14017 #undef HV_OR_SCALARHV
14018 	    /* GERONIMO! */ /* FALLTHROUGH */
14019 
14020 	case OP_MAPWHILE:
14021 	case OP_GREPWHILE:
14022 	case OP_ANDASSIGN:
14023 	case OP_ORASSIGN:
14024 	case OP_DORASSIGN:
14025 	case OP_RANGE:
14026 	case OP_ONCE:
14027 	    while (cLOGOP->op_other->op_type == OP_NULL)
14028 		cLOGOP->op_other = cLOGOP->op_other->op_next;
14029 	    DEFER(cLOGOP->op_other);
14030 	    break;
14031 
14032 	case OP_ENTERLOOP:
14033 	case OP_ENTERITER:
14034 	    while (cLOOP->op_redoop->op_type == OP_NULL)
14035 		cLOOP->op_redoop = cLOOP->op_redoop->op_next;
14036 	    while (cLOOP->op_nextop->op_type == OP_NULL)
14037 		cLOOP->op_nextop = cLOOP->op_nextop->op_next;
14038 	    while (cLOOP->op_lastop->op_type == OP_NULL)
14039 		cLOOP->op_lastop = cLOOP->op_lastop->op_next;
14040 	    /* a while(1) loop doesn't have an op_next that escapes the
14041 	     * loop, so we have to explicitly follow the op_lastop to
14042 	     * process the rest of the code */
14043 	    DEFER(cLOOP->op_lastop);
14044 	    break;
14045 
14046         case OP_ENTERTRY:
14047 	    assert(cLOGOPo->op_other->op_type == OP_LEAVETRY);
14048 	    DEFER(cLOGOPo->op_other);
14049 	    break;
14050 
14051 	case OP_SUBST:
14052 	    assert(!(cPMOP->op_pmflags & PMf_ONCE));
14053 	    while (cPMOP->op_pmstashstartu.op_pmreplstart &&
14054 		   cPMOP->op_pmstashstartu.op_pmreplstart->op_type == OP_NULL)
14055 		cPMOP->op_pmstashstartu.op_pmreplstart
14056 		    = cPMOP->op_pmstashstartu.op_pmreplstart->op_next;
14057 	    DEFER(cPMOP->op_pmstashstartu.op_pmreplstart);
14058 	    break;
14059 
14060 	case OP_SORT: {
14061 	    OP *oright;
14062 
14063 	    if (o->op_flags & OPf_SPECIAL) {
14064                 /* first arg is a code block */
14065                 OP * const nullop = OpSIBLING(cLISTOP->op_first);
14066                 OP * kid          = cUNOPx(nullop)->op_first;
14067 
14068                 assert(nullop->op_type == OP_NULL);
14069 		assert(kid->op_type == OP_SCOPE
14070 		 || (kid->op_type == OP_NULL && kid->op_targ == OP_LEAVE));
14071                 /* since OP_SORT doesn't have a handy op_other-style
14072                  * field that can point directly to the start of the code
14073                  * block, store it in the otherwise-unused op_next field
14074                  * of the top-level OP_NULL. This will be quicker at
14075                  * run-time, and it will also allow us to remove leading
14076                  * OP_NULLs by just messing with op_nexts without
14077                  * altering the basic op_first/op_sibling layout. */
14078                 kid = kLISTOP->op_first;
14079                 assert(
14080                       (kid->op_type == OP_NULL
14081                       && (  kid->op_targ == OP_NEXTSTATE
14082                          || kid->op_targ == OP_DBSTATE  ))
14083                     || kid->op_type == OP_STUB
14084                     || kid->op_type == OP_ENTER);
14085                 nullop->op_next = kLISTOP->op_next;
14086                 DEFER(nullop->op_next);
14087 	    }
14088 
14089 	    /* check that RHS of sort is a single plain array */
14090 	    oright = cUNOPo->op_first;
14091 	    if (!oright || oright->op_type != OP_PUSHMARK)
14092 		break;
14093 
14094 	    if (o->op_private & OPpSORT_INPLACE)
14095 		break;
14096 
14097 	    /* reverse sort ... can be optimised.  */
14098 	    if (!OpHAS_SIBLING(cUNOPo)) {
14099 		/* Nothing follows us on the list. */
14100 		OP * const reverse = o->op_next;
14101 
14102 		if (reverse->op_type == OP_REVERSE &&
14103 		    (reverse->op_flags & OPf_WANT) == OPf_WANT_LIST) {
14104 		    OP * const pushmark = cUNOPx(reverse)->op_first;
14105 		    if (pushmark && (pushmark->op_type == OP_PUSHMARK)
14106 			&& (OpSIBLING(cUNOPx(pushmark)) == o)) {
14107 			/* reverse -> pushmark -> sort */
14108 			o->op_private |= OPpSORT_REVERSE;
14109 			op_null(reverse);
14110 			pushmark->op_next = oright->op_next;
14111 			op_null(oright);
14112 		    }
14113 		}
14114 	    }
14115 
14116 	    break;
14117 	}
14118 
14119 	case OP_REVERSE: {
14120 	    OP *ourmark, *theirmark, *ourlast, *iter, *expushmark, *rv2av;
14121 	    OP *gvop = NULL;
14122 	    LISTOP *enter, *exlist;
14123 
14124 	    if (o->op_private & OPpSORT_INPLACE)
14125 		break;
14126 
14127 	    enter = (LISTOP *) o->op_next;
14128 	    if (!enter)
14129 		break;
14130 	    if (enter->op_type == OP_NULL) {
14131 		enter = (LISTOP *) enter->op_next;
14132 		if (!enter)
14133 		    break;
14134 	    }
14135 	    /* for $a (...) will have OP_GV then OP_RV2GV here.
14136 	       for (...) just has an OP_GV.  */
14137 	    if (enter->op_type == OP_GV) {
14138 		gvop = (OP *) enter;
14139 		enter = (LISTOP *) enter->op_next;
14140 		if (!enter)
14141 		    break;
14142 		if (enter->op_type == OP_RV2GV) {
14143 		  enter = (LISTOP *) enter->op_next;
14144 		  if (!enter)
14145 		    break;
14146 		}
14147 	    }
14148 
14149 	    if (enter->op_type != OP_ENTERITER)
14150 		break;
14151 
14152 	    iter = enter->op_next;
14153 	    if (!iter || iter->op_type != OP_ITER)
14154 		break;
14155 
14156 	    expushmark = enter->op_first;
14157 	    if (!expushmark || expushmark->op_type != OP_NULL
14158 		|| expushmark->op_targ != OP_PUSHMARK)
14159 		break;
14160 
14161 	    exlist = (LISTOP *) OpSIBLING(expushmark);
14162 	    if (!exlist || exlist->op_type != OP_NULL
14163 		|| exlist->op_targ != OP_LIST)
14164 		break;
14165 
14166 	    if (exlist->op_last != o) {
14167 		/* Mmm. Was expecting to point back to this op.  */
14168 		break;
14169 	    }
14170 	    theirmark = exlist->op_first;
14171 	    if (!theirmark || theirmark->op_type != OP_PUSHMARK)
14172 		break;
14173 
14174 	    if (OpSIBLING(theirmark) != o) {
14175 		/* There's something between the mark and the reverse, eg
14176 		   for (1, reverse (...))
14177 		   so no go.  */
14178 		break;
14179 	    }
14180 
14181 	    ourmark = ((LISTOP *)o)->op_first;
14182 	    if (!ourmark || ourmark->op_type != OP_PUSHMARK)
14183 		break;
14184 
14185 	    ourlast = ((LISTOP *)o)->op_last;
14186 	    if (!ourlast || ourlast->op_next != o)
14187 		break;
14188 
14189 	    rv2av = OpSIBLING(ourmark);
14190 	    if (rv2av && rv2av->op_type == OP_RV2AV && !OpHAS_SIBLING(rv2av)
14191 		&& rv2av->op_flags == (OPf_WANT_LIST | OPf_KIDS)) {
14192 		/* We're just reversing a single array.  */
14193 		rv2av->op_flags = OPf_WANT_SCALAR | OPf_KIDS | OPf_REF;
14194 		enter->op_flags |= OPf_STACKED;
14195 	    }
14196 
14197 	    /* We don't have control over who points to theirmark, so sacrifice
14198 	       ours.  */
14199 	    theirmark->op_next = ourmark->op_next;
14200 	    theirmark->op_flags = ourmark->op_flags;
14201 	    ourlast->op_next = gvop ? gvop : (OP *) enter;
14202 	    op_null(ourmark);
14203 	    op_null(o);
14204 	    enter->op_private |= OPpITER_REVERSED;
14205 	    iter->op_private |= OPpITER_REVERSED;
14206 
14207             oldoldop = NULL;
14208             oldop    = ourlast;
14209             o        = oldop->op_next;
14210             goto redo;
14211 
14212 	    break;
14213 	}
14214 
14215 	case OP_QR:
14216 	case OP_MATCH:
14217 	    if (!(cPMOP->op_pmflags & PMf_ONCE)) {
14218 		assert (!cPMOP->op_pmstashstartu.op_pmreplstart);
14219 	    }
14220 	    break;
14221 
14222 	case OP_RUNCV:
14223 	    if (!(o->op_private & OPpOFFBYONE) && !CvCLONE(PL_compcv)
14224 	     && (!CvANON(PL_compcv) || (!PL_cv_has_eval && !PL_perldb)))
14225 	    {
14226 		SV *sv;
14227 		if (CvEVAL(PL_compcv)) sv = &PL_sv_undef;
14228 		else {
14229 		    sv = newRV((SV *)PL_compcv);
14230 		    sv_rvweaken(sv);
14231 		    SvREADONLY_on(sv);
14232 		}
14233                 OpTYPE_set(o, OP_CONST);
14234 		o->op_flags |= OPf_SPECIAL;
14235 		cSVOPo->op_sv = sv;
14236 	    }
14237 	    break;
14238 
14239 	case OP_SASSIGN:
14240 	    if (OP_GIMME(o,0) == G_VOID
14241 	     || (  o->op_next->op_type == OP_LINESEQ
14242 		&& (  o->op_next->op_next->op_type == OP_LEAVESUB
14243 		   || (  o->op_next->op_next->op_type == OP_RETURN
14244 		      && !CvLVALUE(PL_compcv)))))
14245 	    {
14246 		OP *right = cBINOP->op_first;
14247 		if (right) {
14248                     /*   sassign
14249                     *      RIGHT
14250                     *      substr
14251                     *         pushmark
14252                     *         arg1
14253                     *         arg2
14254                     *         ...
14255                     * becomes
14256                     *
14257                     *  ex-sassign
14258                     *     substr
14259                     *        pushmark
14260                     *        RIGHT
14261                     *        arg1
14262                     *        arg2
14263                     *        ...
14264                     */
14265 		    OP *left = OpSIBLING(right);
14266 		    if (left->op_type == OP_SUBSTR
14267 			 && (left->op_private & 7) < 4) {
14268 			op_null(o);
14269                         /* cut out right */
14270                         op_sibling_splice(o, NULL, 1, NULL);
14271                         /* and insert it as second child of OP_SUBSTR */
14272                         op_sibling_splice(left, cBINOPx(left)->op_first, 0,
14273                                     right);
14274 			left->op_private |= OPpSUBSTR_REPL_FIRST;
14275 			left->op_flags =
14276 			    (o->op_flags & ~OPf_WANT) | OPf_WANT_VOID;
14277 		    }
14278 		}
14279 	    }
14280 	    break;
14281 
14282 	case OP_AASSIGN: {
14283             int l, r, lr, lscalars, rscalars;
14284 
14285             /* handle common vars detection, e.g. ($a,$b) = ($b,$a).
14286                Note that we do this now rather than in newASSIGNOP(),
14287                since only by now are aliased lexicals flagged as such
14288 
14289                See the essay "Common vars in list assignment" above for
14290                the full details of the rationale behind all the conditions
14291                below.
14292 
14293                PL_generation sorcery:
14294                To detect whether there are common vars, the global var
14295                PL_generation is incremented for each assign op we scan.
14296                Then we run through all the lexical variables on the LHS,
14297                of the assignment, setting a spare slot in each of them to
14298                PL_generation.  Then we scan the RHS, and if any lexicals
14299                already have that value, we know we've got commonality.
14300                Also, if the generation number is already set to
14301                PERL_INT_MAX, then the variable is involved in aliasing, so
14302                we also have potential commonality in that case.
14303              */
14304 
14305             PL_generation++;
14306             /* scan LHS */
14307             lscalars = 0;
14308             l = S_aassign_scan(aTHX_ cLISTOPo->op_last,  FALSE, 1, &lscalars);
14309             /* scan RHS */
14310             rscalars = 0;
14311             r = S_aassign_scan(aTHX_ cLISTOPo->op_first, TRUE, 1, &rscalars);
14312             lr = (l|r);
14313 
14314 
14315             /* After looking for things which are *always* safe, this main
14316              * if/else chain selects primarily based on the type of the
14317              * LHS, gradually working its way down from the more dangerous
14318              * to the more restrictive and thus safer cases */
14319 
14320             if (   !l                      /* () = ....; */
14321                 || !r                      /* .... = (); */
14322                 || !(l & ~AAS_SAFE_SCALAR) /* (undef, pos()) = ...; */
14323                 || !(r & ~AAS_SAFE_SCALAR) /* ... = (1,2,length,undef); */
14324                 || (lscalars < 2)          /* ($x, undef) = ... */
14325             ) {
14326                 NOOP; /* always safe */
14327             }
14328             else if (l & AAS_DANGEROUS) {
14329                 /* always dangerous */
14330                 o->op_private |= OPpASSIGN_COMMON_SCALAR;
14331                 o->op_private |= OPpASSIGN_COMMON_AGG;
14332             }
14333             else if (l & (AAS_PKG_SCALAR|AAS_PKG_AGG)) {
14334                 /* package vars are always dangerous - too many
14335                  * aliasing possibilities */
14336                 if (l & AAS_PKG_SCALAR)
14337                     o->op_private |= OPpASSIGN_COMMON_SCALAR;
14338                 if (l & AAS_PKG_AGG)
14339                     o->op_private |= OPpASSIGN_COMMON_AGG;
14340             }
14341             else if (l & ( AAS_MY_SCALAR|AAS_MY_AGG
14342                           |AAS_LEX_SCALAR|AAS_LEX_AGG))
14343             {
14344                 /* LHS contains only lexicals and safe ops */
14345 
14346                 if (l & (AAS_MY_AGG|AAS_LEX_AGG))
14347                     o->op_private |= OPpASSIGN_COMMON_AGG;
14348 
14349                 if (l & (AAS_MY_SCALAR|AAS_LEX_SCALAR)) {
14350                     if (lr & AAS_LEX_SCALAR_COMM)
14351                         o->op_private |= OPpASSIGN_COMMON_SCALAR;
14352                     else if (   !(l & AAS_LEX_SCALAR)
14353                              && (r & AAS_DEFAV))
14354                     {
14355                         /* falsely mark
14356                          *    my (...) = @_
14357                          * as scalar-safe for performance reasons.
14358                          * (it will still have been marked _AGG if necessary */
14359                         NOOP;
14360                     }
14361                     else if (r  & (AAS_PKG_SCALAR|AAS_PKG_AGG|AAS_DANGEROUS))
14362                         o->op_private |= OPpASSIGN_COMMON_RC1;
14363                 }
14364             }
14365 
14366             /* ... = ($x)
14367              * may have to handle aggregate on LHS, but we can't
14368              * have common scalars. */
14369             if (rscalars < 2)
14370                 o->op_private &=
14371                         ~(OPpASSIGN_COMMON_SCALAR|OPpASSIGN_COMMON_RC1);
14372 
14373 	    break;
14374         }
14375 
14376 	case OP_CUSTOM: {
14377 	    Perl_cpeep_t cpeep =
14378 		XopENTRYCUSTOM(o, xop_peep);
14379 	    if (cpeep)
14380 		cpeep(aTHX_ o, oldop);
14381 	    break;
14382 	}
14383 
14384 	}
14385         /* did we just null the current op? If so, re-process it to handle
14386          * eliding "empty" ops from the chain */
14387         if (o->op_type == OP_NULL && oldop && oldop->op_next == o) {
14388             o->op_opt = 0;
14389             o = oldop;
14390         }
14391         else {
14392             oldoldop = oldop;
14393             oldop = o;
14394         }
14395     }
14396     LEAVE;
14397 }
14398 
14399 void
14400 Perl_peep(pTHX_ OP *o)
14401 {
14402     CALL_RPEEP(o);
14403 }
14404 
14405 /*
14406 =head1 Custom Operators
14407 
14408 =for apidoc Ao||custom_op_xop
14409 Return the XOP structure for a given custom op.  This macro should be
14410 considered internal to C<OP_NAME> and the other access macros: use them instead.
14411 This macro does call a function.  Prior
14412 to 5.19.6, this was implemented as a
14413 function.
14414 
14415 =cut
14416 */
14417 
14418 XOPRETANY
14419 Perl_custom_op_get_field(pTHX_ const OP *o, const xop_flags_enum field)
14420 {
14421     SV *keysv;
14422     HE *he = NULL;
14423     XOP *xop;
14424 
14425     static const XOP xop_null = { 0, 0, 0, 0, 0 };
14426 
14427     PERL_ARGS_ASSERT_CUSTOM_OP_GET_FIELD;
14428     assert(o->op_type == OP_CUSTOM);
14429 
14430     /* This is wrong. It assumes a function pointer can be cast to IV,
14431      * which isn't guaranteed, but this is what the old custom OP code
14432      * did. In principle it should be safer to Copy the bytes of the
14433      * pointer into a PV: since the new interface is hidden behind
14434      * functions, this can be changed later if necessary.  */
14435     /* Change custom_op_xop if this ever happens */
14436     keysv = sv_2mortal(newSViv(PTR2IV(o->op_ppaddr)));
14437 
14438     if (PL_custom_ops)
14439 	he = hv_fetch_ent(PL_custom_ops, keysv, 0, 0);
14440 
14441     /* assume noone will have just registered a desc */
14442     if (!he && PL_custom_op_names &&
14443 	(he = hv_fetch_ent(PL_custom_op_names, keysv, 0, 0))
14444     ) {
14445 	const char *pv;
14446 	STRLEN l;
14447 
14448 	/* XXX does all this need to be shared mem? */
14449 	Newxz(xop, 1, XOP);
14450 	pv = SvPV(HeVAL(he), l);
14451 	XopENTRY_set(xop, xop_name, savepvn(pv, l));
14452 	if (PL_custom_op_descs &&
14453 	    (he = hv_fetch_ent(PL_custom_op_descs, keysv, 0, 0))
14454 	) {
14455 	    pv = SvPV(HeVAL(he), l);
14456 	    XopENTRY_set(xop, xop_desc, savepvn(pv, l));
14457 	}
14458 	Perl_custom_op_register(aTHX_ o->op_ppaddr, xop);
14459     }
14460     else {
14461 	if (!he)
14462 	    xop = (XOP *)&xop_null;
14463 	else
14464 	    xop = INT2PTR(XOP *, SvIV(HeVAL(he)));
14465     }
14466     {
14467 	XOPRETANY any;
14468 	if(field == XOPe_xop_ptr) {
14469 	    any.xop_ptr = xop;
14470 	} else {
14471 	    const U32 flags = XopFLAGS(xop);
14472 	    if(flags & field) {
14473 		switch(field) {
14474 		case XOPe_xop_name:
14475 		    any.xop_name = xop->xop_name;
14476 		    break;
14477 		case XOPe_xop_desc:
14478 		    any.xop_desc = xop->xop_desc;
14479 		    break;
14480 		case XOPe_xop_class:
14481 		    any.xop_class = xop->xop_class;
14482 		    break;
14483 		case XOPe_xop_peep:
14484 		    any.xop_peep = xop->xop_peep;
14485 		    break;
14486 		default:
14487 		    NOT_REACHED; /* NOTREACHED */
14488 		    break;
14489 		}
14490 	    } else {
14491 		switch(field) {
14492 		case XOPe_xop_name:
14493 		    any.xop_name = XOPd_xop_name;
14494 		    break;
14495 		case XOPe_xop_desc:
14496 		    any.xop_desc = XOPd_xop_desc;
14497 		    break;
14498 		case XOPe_xop_class:
14499 		    any.xop_class = XOPd_xop_class;
14500 		    break;
14501 		case XOPe_xop_peep:
14502 		    any.xop_peep = XOPd_xop_peep;
14503 		    break;
14504 		default:
14505 		    NOT_REACHED; /* NOTREACHED */
14506 		    break;
14507 		}
14508 	    }
14509 	}
14510         /* On some platforms (HP-UX, IA64) gcc emits a warning for this function:
14511          * op.c: In function 'Perl_custom_op_get_field':
14512          * op.c:...: warning: 'any.xop_name' may be used uninitialized in this function [-Wmaybe-uninitialized]
14513          * This is because on those platforms (with -DEBUGGING) NOT_REACHED
14514          * expands to assert(0), which expands to ((0) ? (void)0 :
14515          * __assert(...)), and gcc doesn't know that __assert can never return. */
14516 	return any;
14517     }
14518 }
14519 
14520 /*
14521 =for apidoc Ao||custom_op_register
14522 Register a custom op.  See L<perlguts/"Custom Operators">.
14523 
14524 =cut
14525 */
14526 
14527 void
14528 Perl_custom_op_register(pTHX_ Perl_ppaddr_t ppaddr, const XOP *xop)
14529 {
14530     SV *keysv;
14531 
14532     PERL_ARGS_ASSERT_CUSTOM_OP_REGISTER;
14533 
14534     /* see the comment in custom_op_xop */
14535     keysv = sv_2mortal(newSViv(PTR2IV(ppaddr)));
14536 
14537     if (!PL_custom_ops)
14538 	PL_custom_ops = newHV();
14539 
14540     if (!hv_store_ent(PL_custom_ops, keysv, newSViv(PTR2IV(xop)), 0))
14541 	Perl_croak(aTHX_ "panic: can't register custom OP %s", xop->xop_name);
14542 }
14543 
14544 /*
14545 
14546 =for apidoc core_prototype
14547 
14548 This function assigns the prototype of the named core function to C<sv>, or
14549 to a new mortal SV if C<sv> is C<NULL>.  It returns the modified C<sv>, or
14550 C<NULL> if the core function has no prototype.  C<code> is a code as returned
14551 by C<keyword()>.  It must not be equal to 0.
14552 
14553 =cut
14554 */
14555 
14556 SV *
14557 Perl_core_prototype(pTHX_ SV *sv, const char *name, const int code,
14558                           int * const opnum)
14559 {
14560     int i = 0, n = 0, seen_question = 0, defgv = 0;
14561     I32 oa;
14562 #define MAX_ARGS_OP ((sizeof(I32) - 1) * 2)
14563     char str[ MAX_ARGS_OP * 2 + 2 ]; /* One ';', one '\0' */
14564     bool nullret = FALSE;
14565 
14566     PERL_ARGS_ASSERT_CORE_PROTOTYPE;
14567 
14568     assert (code);
14569 
14570     if (!sv) sv = sv_newmortal();
14571 
14572 #define retsetpvs(x,y) sv_setpvs(sv, x); if(opnum) *opnum=(y); return sv
14573 
14574     switch (code < 0 ? -code : code) {
14575     case KEY_and   : case KEY_chop: case KEY_chomp:
14576     case KEY_cmp   : case KEY_defined: case KEY_delete: case KEY_exec  :
14577     case KEY_exists: case KEY_eq     : case KEY_ge    : case KEY_goto  :
14578     case KEY_grep  : case KEY_gt     : case KEY_last  : case KEY_le    :
14579     case KEY_lt    : case KEY_map    : case KEY_ne    : case KEY_next  :
14580     case KEY_or    : case KEY_print  : case KEY_printf: case KEY_qr    :
14581     case KEY_redo  : case KEY_require: case KEY_return: case KEY_say   :
14582     case KEY_select: case KEY_sort   : case KEY_split : case KEY_system:
14583     case KEY_x     : case KEY_xor    :
14584 	if (!opnum) return NULL; nullret = TRUE; goto findopnum;
14585     case KEY_glob:    retsetpvs("_;", OP_GLOB);
14586     case KEY_keys:    retsetpvs("\\[%@]", OP_KEYS);
14587     case KEY_values:  retsetpvs("\\[%@]", OP_VALUES);
14588     case KEY_each:    retsetpvs("\\[%@]", OP_EACH);
14589     case KEY_push:    retsetpvs("\\@@", OP_PUSH);
14590     case KEY_unshift: retsetpvs("\\@@", OP_UNSHIFT);
14591     case KEY_pop:     retsetpvs(";\\@", OP_POP);
14592     case KEY_shift:   retsetpvs(";\\@", OP_SHIFT);
14593     case KEY_pos:     retsetpvs(";\\[$*]", OP_POS);
14594     case KEY_splice:
14595 	retsetpvs("\\@;$$@", OP_SPLICE);
14596     case KEY___FILE__: case KEY___LINE__: case KEY___PACKAGE__:
14597 	retsetpvs("", 0);
14598     case KEY_evalbytes:
14599 	name = "entereval"; break;
14600     case KEY_readpipe:
14601 	name = "backtick";
14602     }
14603 
14604 #undef retsetpvs
14605 
14606   findopnum:
14607     while (i < MAXO) {	/* The slow way. */
14608 	if (strEQ(name, PL_op_name[i])
14609 	    || strEQ(name, PL_op_desc[i]))
14610 	{
14611 	    if (nullret) { assert(opnum); *opnum = i; return NULL; }
14612 	    goto found;
14613 	}
14614 	i++;
14615     }
14616     return NULL;
14617   found:
14618     defgv = PL_opargs[i] & OA_DEFGV;
14619     oa = PL_opargs[i] >> OASHIFT;
14620     while (oa) {
14621 	if (oa & OA_OPTIONAL && !seen_question && (
14622 	      !defgv || (oa & (OA_OPTIONAL - 1)) == OA_FILEREF
14623 	)) {
14624 	    seen_question = 1;
14625 	    str[n++] = ';';
14626 	}
14627 	if ((oa & (OA_OPTIONAL - 1)) >= OA_AVREF
14628 	    && (oa & (OA_OPTIONAL - 1)) <= OA_SCALARREF
14629 	    /* But globs are already references (kinda) */
14630 	    && (oa & (OA_OPTIONAL - 1)) != OA_FILEREF
14631 	) {
14632 	    str[n++] = '\\';
14633 	}
14634 	if ((oa & (OA_OPTIONAL - 1)) == OA_SCALARREF
14635 	 && !scalar_mod_type(NULL, i)) {
14636 	    str[n++] = '[';
14637 	    str[n++] = '$';
14638 	    str[n++] = '@';
14639 	    str[n++] = '%';
14640 	    if (i == OP_LOCK || i == OP_UNDEF) str[n++] = '&';
14641 	    str[n++] = '*';
14642 	    str[n++] = ']';
14643 	}
14644 	else str[n++] = ("?$@@%&*$")[oa & (OA_OPTIONAL - 1)];
14645 	if (oa & OA_OPTIONAL && defgv && str[n-1] == '$') {
14646 	    str[n-1] = '_'; defgv = 0;
14647 	}
14648 	oa = oa >> 4;
14649     }
14650     if (code == -KEY_not || code == -KEY_getprotobynumber) str[n++] = ';';
14651     str[n++] = '\0';
14652     sv_setpvn(sv, str, n - 1);
14653     if (opnum) *opnum = i;
14654     return sv;
14655 }
14656 
14657 OP *
14658 Perl_coresub_op(pTHX_ SV * const coreargssv, const int code,
14659                       const int opnum)
14660 {
14661     OP * const argop = newSVOP(OP_COREARGS,0,coreargssv);
14662     OP *o;
14663 
14664     PERL_ARGS_ASSERT_CORESUB_OP;
14665 
14666     switch(opnum) {
14667     case 0:
14668 	return op_append_elem(OP_LINESEQ,
14669 	               argop,
14670 	               newSLICEOP(0,
14671 	                          newSVOP(OP_CONST, 0, newSViv(-code % 3)),
14672 	                          newOP(OP_CALLER,0)
14673 	               )
14674 	       );
14675     case OP_SELECT: /* which represents OP_SSELECT as well */
14676 	if (code)
14677 	    return newCONDOP(
14678 	                 0,
14679 	                 newBINOP(OP_GT, 0,
14680 	                          newAVREF(newGVOP(OP_GV, 0, PL_defgv)),
14681 	                          newSVOP(OP_CONST, 0, newSVuv(1))
14682 	                         ),
14683 	                 coresub_op(newSVuv((UV)OP_SSELECT), 0,
14684 	                            OP_SSELECT),
14685 	                 coresub_op(coreargssv, 0, OP_SELECT)
14686 	           );
14687 	/* FALLTHROUGH */
14688     default:
14689 	switch (PL_opargs[opnum] & OA_CLASS_MASK) {
14690 	case OA_BASEOP:
14691 	    return op_append_elem(
14692 	                OP_LINESEQ, argop,
14693 	                newOP(opnum,
14694 	                      opnum == OP_WANTARRAY || opnum == OP_RUNCV
14695 	                        ? OPpOFFBYONE << 8 : 0)
14696 	           );
14697 	case OA_BASEOP_OR_UNOP:
14698 	    if (opnum == OP_ENTEREVAL) {
14699 		o = newUNOP(OP_ENTEREVAL,OPpEVAL_COPHH<<8,argop);
14700 		if (code == -KEY_evalbytes) o->op_private |= OPpEVAL_BYTES;
14701 	    }
14702 	    else o = newUNOP(opnum,0,argop);
14703 	    if (opnum == OP_CALLER) o->op_private |= OPpOFFBYONE;
14704 	    else {
14705 	  onearg:
14706 	      if (is_handle_constructor(o, 1))
14707 		argop->op_private |= OPpCOREARGS_DEREF1;
14708 	      if (scalar_mod_type(NULL, opnum))
14709 		argop->op_private |= OPpCOREARGS_SCALARMOD;
14710 	    }
14711 	    return o;
14712 	default:
14713 	    o = op_convert_list(opnum,OPf_SPECIAL*(opnum == OP_GLOB),argop);
14714 	    if (is_handle_constructor(o, 2))
14715 		argop->op_private |= OPpCOREARGS_DEREF2;
14716 	    if (opnum == OP_SUBSTR) {
14717 		o->op_private |= OPpMAYBE_LVSUB;
14718 		return o;
14719 	    }
14720 	    else goto onearg;
14721 	}
14722     }
14723 }
14724 
14725 void
14726 Perl_report_redefined_cv(pTHX_ const SV *name, const CV *old_cv,
14727 			       SV * const *new_const_svp)
14728 {
14729     const char *hvname;
14730     bool is_const = !!CvCONST(old_cv);
14731     SV *old_const_sv = is_const ? cv_const_sv(old_cv) : NULL;
14732 
14733     PERL_ARGS_ASSERT_REPORT_REDEFINED_CV;
14734 
14735     if (is_const && new_const_svp && old_const_sv == *new_const_svp)
14736 	return;
14737 	/* They are 2 constant subroutines generated from
14738 	   the same constant. This probably means that
14739 	   they are really the "same" proxy subroutine
14740 	   instantiated in 2 places. Most likely this is
14741 	   when a constant is exported twice.  Don't warn.
14742 	*/
14743     if (
14744 	(ckWARN(WARN_REDEFINE)
14745 	 && !(
14746 		CvGV(old_cv) && GvSTASH(CvGV(old_cv))
14747 	     && HvNAMELEN(GvSTASH(CvGV(old_cv))) == 7
14748 	     && (hvname = HvNAME(GvSTASH(CvGV(old_cv))),
14749 		 strEQ(hvname, "autouse"))
14750 	     )
14751 	)
14752      || (is_const
14753 	 && ckWARN_d(WARN_REDEFINE)
14754 	 && (!new_const_svp || sv_cmp(old_const_sv, *new_const_svp))
14755 	)
14756     )
14757 	Perl_warner(aTHX_ packWARN(WARN_REDEFINE),
14758 			  is_const
14759 			    ? "Constant subroutine %"SVf" redefined"
14760 			    : "Subroutine %"SVf" redefined",
14761 			  SVfARG(name));
14762 }
14763 
14764 /*
14765 =head1 Hook manipulation
14766 
14767 These functions provide convenient and thread-safe means of manipulating
14768 hook variables.
14769 
14770 =cut
14771 */
14772 
14773 /*
14774 =for apidoc Am|void|wrap_op_checker|Optype opcode|Perl_check_t new_checker|Perl_check_t *old_checker_p
14775 
14776 Puts a C function into the chain of check functions for a specified op
14777 type.  This is the preferred way to manipulate the L</PL_check> array.
14778 C<opcode> specifies which type of op is to be affected.  C<new_checker>
14779 is a pointer to the C function that is to be added to that opcode's
14780 check chain, and C<old_checker_p> points to the storage location where a
14781 pointer to the next function in the chain will be stored.  The value of
14782 C<new_pointer> is written into the L</PL_check> array, while the value
14783 previously stored there is written to C<*old_checker_p>.
14784 
14785 The function should be defined like this:
14786 
14787     static OP *new_checker(pTHX_ OP *op) { ... }
14788 
14789 It is intended to be called in this manner:
14790 
14791     new_checker(aTHX_ op)
14792 
14793 C<old_checker_p> should be defined like this:
14794 
14795     static Perl_check_t old_checker_p;
14796 
14797 L</PL_check> is global to an entire process, and a module wishing to
14798 hook op checking may find itself invoked more than once per process,
14799 typically in different threads.  To handle that situation, this function
14800 is idempotent.  The location C<*old_checker_p> must initially (once
14801 per process) contain a null pointer.  A C variable of static duration
14802 (declared at file scope, typically also marked C<static> to give
14803 it internal linkage) will be implicitly initialised appropriately,
14804 if it does not have an explicit initialiser.  This function will only
14805 actually modify the check chain if it finds C<*old_checker_p> to be null.
14806 This function is also thread safe on the small scale.  It uses appropriate
14807 locking to avoid race conditions in accessing L</PL_check>.
14808 
14809 When this function is called, the function referenced by C<new_checker>
14810 must be ready to be called, except for C<*old_checker_p> being unfilled.
14811 In a threading situation, C<new_checker> may be called immediately,
14812 even before this function has returned.  C<*old_checker_p> will always
14813 be appropriately set before C<new_checker> is called.  If C<new_checker>
14814 decides not to do anything special with an op that it is given (which
14815 is the usual case for most uses of op check hooking), it must chain the
14816 check function referenced by C<*old_checker_p>.
14817 
14818 If you want to influence compilation of calls to a specific subroutine,
14819 then use L</cv_set_call_checker> rather than hooking checking of all
14820 C<entersub> ops.
14821 
14822 =cut
14823 */
14824 
14825 void
14826 Perl_wrap_op_checker(pTHX_ Optype opcode,
14827     Perl_check_t new_checker, Perl_check_t *old_checker_p)
14828 {
14829     dVAR;
14830 
14831     PERL_UNUSED_CONTEXT;
14832     PERL_ARGS_ASSERT_WRAP_OP_CHECKER;
14833     if (*old_checker_p) return;
14834     OP_CHECK_MUTEX_LOCK;
14835     if (!*old_checker_p) {
14836 	*old_checker_p = PL_check[opcode];
14837 	PL_check[opcode] = new_checker;
14838     }
14839     OP_CHECK_MUTEX_UNLOCK;
14840 }
14841 
14842 #include "XSUB.h"
14843 
14844 /* Efficient sub that returns a constant scalar value. */
14845 static void
14846 const_sv_xsub(pTHX_ CV* cv)
14847 {
14848     dXSARGS;
14849     SV *const sv = MUTABLE_SV(XSANY.any_ptr);
14850     PERL_UNUSED_ARG(items);
14851     if (!sv) {
14852 	XSRETURN(0);
14853     }
14854     EXTEND(sp, 1);
14855     ST(0) = sv;
14856     XSRETURN(1);
14857 }
14858 
14859 static void
14860 const_av_xsub(pTHX_ CV* cv)
14861 {
14862     dXSARGS;
14863     AV * const av = MUTABLE_AV(XSANY.any_ptr);
14864     SP -= items;
14865     assert(av);
14866 #ifndef DEBUGGING
14867     if (!av) {
14868 	XSRETURN(0);
14869     }
14870 #endif
14871     if (SvRMAGICAL(av))
14872 	Perl_croak(aTHX_ "Magical list constants are not supported");
14873     if (GIMME_V != G_ARRAY) {
14874 	EXTEND(SP, 1);
14875 	ST(0) = sv_2mortal(newSViv((IV)AvFILLp(av)+1));
14876 	XSRETURN(1);
14877     }
14878     EXTEND(SP, AvFILLp(av)+1);
14879     Copy(AvARRAY(av), &ST(0), AvFILLp(av)+1, SV *);
14880     XSRETURN(AvFILLp(av)+1);
14881 }
14882 
14883 /*
14884  * ex: set ts=8 sts=4 sw=4 et:
14885  */
14886