This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
[perl #122107] test that BEGIN blocks with errors don't remain named subs
[perl5.git] / op.c
1 #line 2 "op.c"
2 /*    op.c
3  *
4  *    Copyright (C) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
5  *    2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 by Larry Wall and others
6  *
7  *    You may distribute under the terms of either the GNU General Public
8  *    License or the Artistic License, as specified in the README file.
9  *
10  */
11
12 /*
13  * 'You see: Mr. Drogo, he married poor Miss Primula Brandybuck.  She was
14  *  our Mr. Bilbo's first cousin on the mother's side (her mother being the
15  *  youngest of the Old Took's daughters); and Mr. Drogo was his second
16  *  cousin.  So Mr. Frodo is his first *and* second cousin, once removed
17  *  either way, as the saying is, if you follow me.'       --the Gaffer
18  *
19  *     [p.23 of _The Lord of the Rings_, I/i: "A Long-Expected Party"]
20  */
21
22 /* This file contains the functions that create, manipulate and optimize
23  * the OP structures that hold a compiled perl program.
24  *
25  * 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 /* remove any leading "empty" ops from the op_next chain whose first
113  * node's address is stored in op_p. Store the updated address of the
114  * first node in op_p.
115  */
116
117 STATIC void
118 S_prune_chain_head(OP** op_p)
119 {
120     while (*op_p
121         && (   (*op_p)->op_type == OP_NULL
122             || (*op_p)->op_type == OP_SCOPE
123             || (*op_p)->op_type == OP_SCALAR
124             || (*op_p)->op_type == OP_LINESEQ)
125     )
126         *op_p = (*op_p)->op_next;
127 }
128
129
130 /* See the explanatory comments above struct opslab in op.h. */
131
132 #ifdef PERL_DEBUG_READONLY_OPS
133 #  define PERL_SLAB_SIZE 128
134 #  define PERL_MAX_SLAB_SIZE 4096
135 #  include <sys/mman.h>
136 #endif
137
138 #ifndef PERL_SLAB_SIZE
139 #  define PERL_SLAB_SIZE 64
140 #endif
141 #ifndef PERL_MAX_SLAB_SIZE
142 #  define PERL_MAX_SLAB_SIZE 2048
143 #endif
144
145 /* rounds up to nearest pointer */
146 #define SIZE_TO_PSIZE(x)        (((x) + sizeof(I32 *) - 1)/sizeof(I32 *))
147 #define DIFF(o,p)               ((size_t)((I32 **)(p) - (I32**)(o)))
148
149 static OPSLAB *
150 S_new_slab(pTHX_ size_t sz)
151 {
152 #ifdef PERL_DEBUG_READONLY_OPS
153     OPSLAB *slab = (OPSLAB *) mmap(0, sz * sizeof(I32 *),
154                                    PROT_READ|PROT_WRITE,
155                                    MAP_ANON|MAP_PRIVATE, -1, 0);
156     DEBUG_m(PerlIO_printf(Perl_debug_log, "mapped %lu at %p\n",
157                           (unsigned long) sz, slab));
158     if (slab == MAP_FAILED) {
159         perror("mmap failed");
160         abort();
161     }
162     slab->opslab_size = (U16)sz;
163 #else
164     OPSLAB *slab = (OPSLAB *)PerlMemShared_calloc(sz, sizeof(I32 *));
165 #endif
166 #ifndef WIN32
167     /* The context is unused in non-Windows */
168     PERL_UNUSED_CONTEXT;
169 #endif
170     slab->opslab_first = (OPSLOT *)((I32 **)slab + sz - 1);
171     return slab;
172 }
173
174 /* requires double parens and aTHX_ */
175 #define DEBUG_S_warn(args)                                             \
176     DEBUG_S(                                                            \
177         PerlIO_printf(Perl_debug_log, "%s", SvPVx_nolen(Perl_mess args)) \
178     )
179
180 void *
181 Perl_Slab_Alloc(pTHX_ size_t sz)
182 {
183     OPSLAB *slab;
184     OPSLAB *slab2;
185     OPSLOT *slot;
186     OP *o;
187     size_t opsz, space;
188
189     /* We only allocate ops from the slab during subroutine compilation.
190        We find the slab via PL_compcv, hence that must be non-NULL. It could
191        also be pointing to a subroutine which is now fully set up (CvROOT()
192        pointing to the top of the optree for that sub), or a subroutine
193        which isn't using the slab allocator. If our sanity checks aren't met,
194        don't use a slab, but allocate the OP directly from the heap.  */
195     if (!PL_compcv || CvROOT(PL_compcv)
196      || (CvSTART(PL_compcv) && !CvSLABBED(PL_compcv)))
197     {
198         o = (OP*)PerlMemShared_calloc(1, sz);
199         goto gotit;
200     }
201
202     /* While the subroutine is under construction, the slabs are accessed via
203        CvSTART(), to avoid needing to expand PVCV by one pointer for something
204        unneeded at runtime. Once a subroutine is constructed, the slabs are
205        accessed via CvROOT(). So if CvSTART() is NULL, no slab has been
206        allocated yet.  See the commit message for 8be227ab5eaa23f2 for more
207        details.  */
208     if (!CvSTART(PL_compcv)) {
209         CvSTART(PL_compcv) =
210             (OP *)(slab = S_new_slab(aTHX_ PERL_SLAB_SIZE));
211         CvSLABBED_on(PL_compcv);
212         slab->opslab_refcnt = 2; /* one for the CV; one for the new OP */
213     }
214     else ++(slab = (OPSLAB *)CvSTART(PL_compcv))->opslab_refcnt;
215
216     opsz = SIZE_TO_PSIZE(sz);
217     sz = opsz + OPSLOT_HEADER_P;
218
219     /* The slabs maintain a free list of OPs. In particular, constant folding
220        will free up OPs, so it makes sense to re-use them where possible. A
221        freed up slot is used in preference to a new allocation.  */
222     if (slab->opslab_freed) {
223         OP **too = &slab->opslab_freed;
224         o = *too;
225         DEBUG_S_warn((aTHX_ "found free op at %p, slab %p", (void*)o, (void*)slab));
226         while (o && DIFF(OpSLOT(o), OpSLOT(o)->opslot_next) < sz) {
227             DEBUG_S_warn((aTHX_ "Alas! too small"));
228             o = *(too = &o->op_next);
229             if (o) { DEBUG_S_warn((aTHX_ "found another free op at %p", (void*)o)); }
230         }
231         if (o) {
232             *too = o->op_next;
233             Zero(o, opsz, I32 *);
234             o->op_slabbed = 1;
235             goto gotit;
236         }
237     }
238
239 #define INIT_OPSLOT \
240             slot->opslot_slab = slab;                   \
241             slot->opslot_next = slab2->opslab_first;    \
242             slab2->opslab_first = slot;                 \
243             o = &slot->opslot_op;                       \
244             o->op_slabbed = 1
245
246     /* The partially-filled slab is next in the chain. */
247     slab2 = slab->opslab_next ? slab->opslab_next : slab;
248     if ((space = DIFF(&slab2->opslab_slots, slab2->opslab_first)) < sz) {
249         /* Remaining space is too small. */
250
251         /* If we can fit a BASEOP, add it to the free chain, so as not
252            to waste it. */
253         if (space >= SIZE_TO_PSIZE(sizeof(OP)) + OPSLOT_HEADER_P) {
254             slot = &slab2->opslab_slots;
255             INIT_OPSLOT;
256             o->op_type = OP_FREED;
257             o->op_next = slab->opslab_freed;
258             slab->opslab_freed = o;
259         }
260
261         /* Create a new slab.  Make this one twice as big. */
262         slot = slab2->opslab_first;
263         while (slot->opslot_next) slot = slot->opslot_next;
264         slab2 = S_new_slab(aTHX_
265                             (DIFF(slab2, slot)+1)*2 > PERL_MAX_SLAB_SIZE
266                                         ? PERL_MAX_SLAB_SIZE
267                                         : (DIFF(slab2, slot)+1)*2);
268         slab2->opslab_next = slab->opslab_next;
269         slab->opslab_next = slab2;
270     }
271     assert(DIFF(&slab2->opslab_slots, slab2->opslab_first) >= sz);
272
273     /* Create a new op slot */
274     slot = (OPSLOT *)((I32 **)slab2->opslab_first - sz);
275     assert(slot >= &slab2->opslab_slots);
276     if (DIFF(&slab2->opslab_slots, slot)
277          < SIZE_TO_PSIZE(sizeof(OP)) + OPSLOT_HEADER_P)
278         slot = &slab2->opslab_slots;
279     INIT_OPSLOT;
280     DEBUG_S_warn((aTHX_ "allocating op at %p, slab %p", (void*)o, (void*)slab));
281
282   gotit:
283     /* lastsib == 1, op_sibling == 0 implies a solitary unattached op */
284     o->op_lastsib = 1;
285     assert(!o->op_sibling);
286
287     return (void *)o;
288 }
289
290 #undef INIT_OPSLOT
291
292 #ifdef PERL_DEBUG_READONLY_OPS
293 void
294 Perl_Slab_to_ro(pTHX_ OPSLAB *slab)
295 {
296     PERL_ARGS_ASSERT_SLAB_TO_RO;
297
298     if (slab->opslab_readonly) return;
299     slab->opslab_readonly = 1;
300     for (; slab; slab = slab->opslab_next) {
301         /*DEBUG_U(PerlIO_printf(Perl_debug_log,"mprotect ->ro %lu at %p\n",
302                               (unsigned long) slab->opslab_size, slab));*/
303         if (mprotect(slab, slab->opslab_size * sizeof(I32 *), PROT_READ))
304             Perl_warn(aTHX_ "mprotect for %p %lu failed with %d", slab,
305                              (unsigned long)slab->opslab_size, errno);
306     }
307 }
308
309 void
310 Perl_Slab_to_rw(pTHX_ OPSLAB *const slab)
311 {
312     OPSLAB *slab2;
313
314     PERL_ARGS_ASSERT_SLAB_TO_RW;
315
316     if (!slab->opslab_readonly) return;
317     slab2 = slab;
318     for (; slab2; slab2 = slab2->opslab_next) {
319         /*DEBUG_U(PerlIO_printf(Perl_debug_log,"mprotect ->rw %lu at %p\n",
320                               (unsigned long) size, slab2));*/
321         if (mprotect((void *)slab2, slab2->opslab_size * sizeof(I32 *),
322                      PROT_READ|PROT_WRITE)) {
323             Perl_warn(aTHX_ "mprotect RW for %p %lu failed with %d", slab,
324                              (unsigned long)slab2->opslab_size, errno);
325         }
326     }
327     slab->opslab_readonly = 0;
328 }
329
330 #else
331 #  define Slab_to_rw(op)    NOOP
332 #endif
333
334 /* This cannot possibly be right, but it was copied from the old slab
335    allocator, to which it was originally added, without explanation, in
336    commit 083fcd5. */
337 #ifdef NETWARE
338 #    define PerlMemShared PerlMem
339 #endif
340
341 void
342 Perl_Slab_Free(pTHX_ void *op)
343 {
344     OP * const o = (OP *)op;
345     OPSLAB *slab;
346
347     PERL_ARGS_ASSERT_SLAB_FREE;
348
349     if (!o->op_slabbed) {
350         if (!o->op_static)
351             PerlMemShared_free(op);
352         return;
353     }
354
355     slab = OpSLAB(o);
356     /* If this op is already freed, our refcount will get screwy. */
357     assert(o->op_type != OP_FREED);
358     o->op_type = OP_FREED;
359     o->op_next = slab->opslab_freed;
360     slab->opslab_freed = o;
361     DEBUG_S_warn((aTHX_ "free op at %p, recorded in slab %p", (void*)o, (void*)slab));
362     OpslabREFCNT_dec_padok(slab);
363 }
364
365 void
366 Perl_opslab_free_nopad(pTHX_ OPSLAB *slab)
367 {
368     const bool havepad = !!PL_comppad;
369     PERL_ARGS_ASSERT_OPSLAB_FREE_NOPAD;
370     if (havepad) {
371         ENTER;
372         PAD_SAVE_SETNULLPAD();
373     }
374     opslab_free(slab);
375     if (havepad) LEAVE;
376 }
377
378 void
379 Perl_opslab_free(pTHX_ OPSLAB *slab)
380 {
381     OPSLAB *slab2;
382     PERL_ARGS_ASSERT_OPSLAB_FREE;
383     PERL_UNUSED_CONTEXT;
384     DEBUG_S_warn((aTHX_ "freeing slab %p", (void*)slab));
385     assert(slab->opslab_refcnt == 1);
386     for (; slab; slab = slab2) {
387         slab2 = slab->opslab_next;
388 #ifdef DEBUGGING
389         slab->opslab_refcnt = ~(size_t)0;
390 #endif
391 #ifdef PERL_DEBUG_READONLY_OPS
392         DEBUG_m(PerlIO_printf(Perl_debug_log, "Deallocate slab at %p\n",
393                                                (void*)slab));
394         if (munmap(slab, slab->opslab_size * sizeof(I32 *))) {
395             perror("munmap failed");
396             abort();
397         }
398 #else
399         PerlMemShared_free(slab);
400 #endif
401     }
402 }
403
404 void
405 Perl_opslab_force_free(pTHX_ OPSLAB *slab)
406 {
407     OPSLAB *slab2;
408     OPSLOT *slot;
409 #ifdef DEBUGGING
410     size_t savestack_count = 0;
411 #endif
412     PERL_ARGS_ASSERT_OPSLAB_FORCE_FREE;
413     slab2 = slab;
414     do {
415         for (slot = slab2->opslab_first;
416              slot->opslot_next;
417              slot = slot->opslot_next) {
418             if (slot->opslot_op.op_type != OP_FREED
419              && !(slot->opslot_op.op_savefree
420 #ifdef DEBUGGING
421                   && ++savestack_count
422 #endif
423                  )
424             ) {
425                 assert(slot->opslot_op.op_slabbed);
426                 op_free(&slot->opslot_op);
427                 if (slab->opslab_refcnt == 1) goto free;
428             }
429         }
430     } while ((slab2 = slab2->opslab_next));
431     /* > 1 because the CV still holds a reference count. */
432     if (slab->opslab_refcnt > 1) { /* still referenced by the savestack */
433 #ifdef DEBUGGING
434         assert(savestack_count == slab->opslab_refcnt-1);
435 #endif
436         /* Remove the CV’s reference count. */
437         slab->opslab_refcnt--;
438         return;
439     }
440    free:
441     opslab_free(slab);
442 }
443
444 #ifdef PERL_DEBUG_READONLY_OPS
445 OP *
446 Perl_op_refcnt_inc(pTHX_ OP *o)
447 {
448     if(o) {
449         OPSLAB *const slab = o->op_slabbed ? OpSLAB(o) : NULL;
450         if (slab && slab->opslab_readonly) {
451             Slab_to_rw(slab);
452             ++o->op_targ;
453             Slab_to_ro(slab);
454         } else {
455             ++o->op_targ;
456         }
457     }
458     return o;
459
460 }
461
462 PADOFFSET
463 Perl_op_refcnt_dec(pTHX_ OP *o)
464 {
465     PADOFFSET result;
466     OPSLAB *const slab = o->op_slabbed ? OpSLAB(o) : NULL;
467
468     PERL_ARGS_ASSERT_OP_REFCNT_DEC;
469
470     if (slab && slab->opslab_readonly) {
471         Slab_to_rw(slab);
472         result = --o->op_targ;
473         Slab_to_ro(slab);
474     } else {
475         result = --o->op_targ;
476     }
477     return result;
478 }
479 #endif
480 /*
481  * In the following definition, the ", (OP*)0" is just to make the compiler
482  * think the expression is of the right type: croak actually does a Siglongjmp.
483  */
484 #define CHECKOP(type,o) \
485     ((PL_op_mask && PL_op_mask[type])                           \
486      ? ( op_free((OP*)o),                                       \
487          Perl_croak(aTHX_ "'%s' trapped by operation mask", PL_op_desc[type]),  \
488          (OP*)0 )                                               \
489      : PL_check[type](aTHX_ (OP*)o))
490
491 #define RETURN_UNLIMITED_NUMBER (PERL_INT_MAX / 2)
492
493 #define CHANGE_TYPE(o,type) \
494     STMT_START {                                \
495         o->op_type = (OPCODE)type;              \
496         o->op_ppaddr = PL_ppaddr[type];         \
497     } STMT_END
498
499 STATIC SV*
500 S_gv_ename(pTHX_ GV *gv)
501 {
502     SV* const tmpsv = sv_newmortal();
503
504     PERL_ARGS_ASSERT_GV_ENAME;
505
506     gv_efullname3(tmpsv, gv, NULL);
507     return tmpsv;
508 }
509
510 STATIC OP *
511 S_no_fh_allowed(pTHX_ OP *o)
512 {
513     PERL_ARGS_ASSERT_NO_FH_ALLOWED;
514
515     yyerror(Perl_form(aTHX_ "Missing comma after first argument to %s function",
516                  OP_DESC(o)));
517     return o;
518 }
519
520 STATIC OP *
521 S_too_few_arguments_sv(pTHX_ OP *o, SV *namesv, U32 flags)
522 {
523     PERL_ARGS_ASSERT_TOO_FEW_ARGUMENTS_SV;
524     yyerror_pv(Perl_form(aTHX_ "Not enough arguments for %"SVf, SVfARG(namesv)),
525                                     SvUTF8(namesv) | flags);
526     return o;
527 }
528
529 STATIC OP *
530 S_too_few_arguments_pv(pTHX_ OP *o, const char* name, U32 flags)
531 {
532     PERL_ARGS_ASSERT_TOO_FEW_ARGUMENTS_PV;
533     yyerror_pv(Perl_form(aTHX_ "Not enough arguments for %s", name), flags);
534     return o;
535 }
536  
537 STATIC OP *
538 S_too_many_arguments_pv(pTHX_ OP *o, const char *name, U32 flags)
539 {
540     PERL_ARGS_ASSERT_TOO_MANY_ARGUMENTS_PV;
541
542     yyerror_pv(Perl_form(aTHX_ "Too many arguments for %s", name), flags);
543     return o;
544 }
545
546 STATIC OP *
547 S_too_many_arguments_sv(pTHX_ OP *o, SV *namesv, U32 flags)
548 {
549     PERL_ARGS_ASSERT_TOO_MANY_ARGUMENTS_SV;
550
551     yyerror_pv(Perl_form(aTHX_ "Too many arguments for %"SVf, SVfARG(namesv)),
552                 SvUTF8(namesv) | flags);
553     return o;
554 }
555
556 STATIC void
557 S_bad_type_pv(pTHX_ I32 n, const char *t, const char *name, U32 flags, const OP *kid)
558 {
559     PERL_ARGS_ASSERT_BAD_TYPE_PV;
560
561     yyerror_pv(Perl_form(aTHX_ "Type of arg %d to %s must be %s (not %s)",
562                  (int)n, name, t, OP_DESC(kid)), flags);
563 }
564
565 STATIC void
566 S_bad_type_gv(pTHX_ I32 n, const char *t, GV *gv, U32 flags, const OP *kid)
567 {
568     SV * const namesv = gv_ename(gv);
569     PERL_ARGS_ASSERT_BAD_TYPE_GV;
570  
571     yyerror_pv(Perl_form(aTHX_ "Type of arg %d to %"SVf" must be %s (not %s)",
572                  (int)n, SVfARG(namesv), t, OP_DESC(kid)), SvUTF8(namesv) | flags);
573 }
574
575 STATIC void
576 S_no_bareword_allowed(pTHX_ OP *o)
577 {
578     PERL_ARGS_ASSERT_NO_BAREWORD_ALLOWED;
579
580     qerror(Perl_mess(aTHX_
581                      "Bareword \"%"SVf"\" not allowed while \"strict subs\" in use",
582                      SVfARG(cSVOPo_sv)));
583     o->op_private &= ~OPpCONST_STRICT; /* prevent warning twice about the same OP */
584 }
585
586 /* "register" allocation */
587
588 PADOFFSET
589 Perl_allocmy(pTHX_ const char *const name, const STRLEN len, const U32 flags)
590 {
591     PADOFFSET off;
592     const bool is_our = (PL_parser->in_my == KEY_our);
593
594     PERL_ARGS_ASSERT_ALLOCMY;
595
596     if (flags & ~SVf_UTF8)
597         Perl_croak(aTHX_ "panic: allocmy illegal flag bits 0x%" UVxf,
598                    (UV)flags);
599
600     /* Until we're using the length for real, cross check that we're being
601        told the truth.  */
602     assert(strlen(name) == len);
603
604     /* complain about "my $<special_var>" etc etc */
605     if (len &&
606         !(is_our ||
607           isALPHA(name[1]) ||
608           ((flags & SVf_UTF8) && isIDFIRST_utf8((U8 *)name+1)) ||
609           (name[1] == '_' && (*name == '$' || len > 2))))
610     {
611         /* name[2] is true if strlen(name) > 2  */
612         if (!(flags & SVf_UTF8 && UTF8_IS_START(name[1]))
613          && (!isPRINT(name[1]) || strchr("\t\n\r\f", name[1]))) {
614             yyerror(Perl_form(aTHX_ "Can't use global %c^%c%.*s in \"%s\"",
615                               name[0], toCTRL(name[1]), (int)(len - 2), name + 2,
616                               PL_parser->in_my == KEY_state ? "state" : "my"));
617         } else {
618             yyerror_pv(Perl_form(aTHX_ "Can't use global %.*s in \"%s\"", (int) len, name,
619                               PL_parser->in_my == KEY_state ? "state" : "my"), flags & SVf_UTF8);
620         }
621     }
622     else if (len == 2 && name[1] == '_' && !is_our)
623         /* diag_listed_as: Use of my $_ is experimental */
624         Perl_ck_warner_d(aTHX_ packWARN(WARN_EXPERIMENTAL__LEXICAL_TOPIC),
625                               "Use of %s $_ is experimental",
626                                PL_parser->in_my == KEY_state
627                                  ? "state"
628                                  : "my");
629
630     /* allocate a spare slot and store the name in that slot */
631
632     off = pad_add_name_pvn(name, len,
633                        (is_our ? padadd_OUR :
634                         PL_parser->in_my == KEY_state ? padadd_STATE : 0)
635                             | ( flags & SVf_UTF8 ? SVf_UTF8 : 0 ),
636                     PL_parser->in_my_stash,
637                     (is_our
638                         /* $_ is always in main::, even with our */
639                         ? (PL_curstash && !strEQ(name,"$_") ? PL_curstash : PL_defstash)
640                         : NULL
641                     )
642     );
643     /* anon sub prototypes contains state vars should always be cloned,
644      * otherwise the state var would be shared between anon subs */
645
646     if (PL_parser->in_my == KEY_state && CvANON(PL_compcv))
647         CvCLONE_on(PL_compcv);
648
649     return off;
650 }
651
652 /*
653 =head1 Optree Manipulation Functions
654
655 =for apidoc alloccopstash
656
657 Available only under threaded builds, this function allocates an entry in
658 C<PL_stashpad> for the stash passed to it.
659
660 =cut
661 */
662
663 #ifdef USE_ITHREADS
664 PADOFFSET
665 Perl_alloccopstash(pTHX_ HV *hv)
666 {
667     PADOFFSET off = 0, o = 1;
668     bool found_slot = FALSE;
669
670     PERL_ARGS_ASSERT_ALLOCCOPSTASH;
671
672     if (PL_stashpad[PL_stashpadix] == hv) return PL_stashpadix;
673
674     for (; o < PL_stashpadmax; ++o) {
675         if (PL_stashpad[o] == hv) return PL_stashpadix = o;
676         if (!PL_stashpad[o] || SvTYPE(PL_stashpad[o]) != SVt_PVHV)
677             found_slot = TRUE, off = o;
678     }
679     if (!found_slot) {
680         Renew(PL_stashpad, PL_stashpadmax + 10, HV *);
681         Zero(PL_stashpad + PL_stashpadmax, 10, HV *);
682         off = PL_stashpadmax;
683         PL_stashpadmax += 10;
684     }
685
686     PL_stashpad[PL_stashpadix = off] = hv;
687     return off;
688 }
689 #endif
690
691 /* free the body of an op without examining its contents.
692  * Always use this rather than FreeOp directly */
693
694 static void
695 S_op_destroy(pTHX_ OP *o)
696 {
697     FreeOp(o);
698 }
699
700 /* Destructor */
701
702 /*
703 =for apidoc Am|void|op_free|OP *o
704
705 Free an op.  Only use this when an op is no longer linked to from any
706 optree.
707
708 =cut
709 */
710
711 void
712 Perl_op_free(pTHX_ OP *o)
713 {
714 #ifdef USE_ITHREADS
715     dVAR;
716 #endif
717     OPCODE type;
718
719     /* Though ops may be freed twice, freeing the op after its slab is a
720        big no-no. */
721     assert(!o || !o->op_slabbed || OpSLAB(o)->opslab_refcnt != ~(size_t)0); 
722     /* During the forced freeing of ops after compilation failure, kidops
723        may be freed before their parents. */
724     if (!o || o->op_type == OP_FREED)
725         return;
726
727     type = o->op_type;
728     if (o->op_private & OPpREFCOUNTED) {
729         switch (type) {
730         case OP_LEAVESUB:
731         case OP_LEAVESUBLV:
732         case OP_LEAVEEVAL:
733         case OP_LEAVE:
734         case OP_SCOPE:
735         case OP_LEAVEWRITE:
736             {
737             PADOFFSET refcnt;
738             OP_REFCNT_LOCK;
739             refcnt = OpREFCNT_dec(o);
740             OP_REFCNT_UNLOCK;
741             if (refcnt) {
742                 /* Need to find and remove any pattern match ops from the list
743                    we maintain for reset().  */
744                 find_and_forget_pmops(o);
745                 return;
746             }
747             }
748             break;
749         default:
750             break;
751         }
752     }
753
754     /* Call the op_free hook if it has been set. Do it now so that it's called
755      * at the right time for refcounted ops, but still before all of the kids
756      * are freed. */
757     CALL_OPFREEHOOK(o);
758
759     if (o->op_flags & OPf_KIDS) {
760         OP *kid, *nextkid;
761         for (kid = cUNOPo->op_first; kid; kid = nextkid) {
762             nextkid = OP_SIBLING(kid); /* Get before next freeing kid */
763             op_free(kid);
764         }
765     }
766     if (type == OP_NULL)
767         type = (OPCODE)o->op_targ;
768
769     if (o->op_slabbed)
770         Slab_to_rw(OpSLAB(o));
771
772     /* COP* is not cleared by op_clear() so that we may track line
773      * numbers etc even after null() */
774     if (type == OP_NEXTSTATE || type == OP_DBSTATE) {
775         cop_free((COP*)o);
776     }
777
778     op_clear(o);
779     FreeOp(o);
780 #ifdef DEBUG_LEAKING_SCALARS
781     if (PL_op == o)
782         PL_op = NULL;
783 #endif
784 }
785
786 void
787 Perl_op_clear(pTHX_ OP *o)
788 {
789
790     dVAR;
791
792     PERL_ARGS_ASSERT_OP_CLEAR;
793
794     switch (o->op_type) {
795     case OP_NULL:       /* Was holding old type, if any. */
796         /* FALLTHROUGH */
797     case OP_ENTERTRY:
798     case OP_ENTEREVAL:  /* Was holding hints. */
799         o->op_targ = 0;
800         break;
801     default:
802         if (!(o->op_flags & OPf_REF)
803             || (PL_check[o->op_type] != Perl_ck_ftst))
804             break;
805         /* FALLTHROUGH */
806     case OP_GVSV:
807     case OP_GV:
808     case OP_AELEMFAST:
809         {
810             GV *gv = (o->op_type == OP_GV || o->op_type == OP_GVSV)
811 #ifdef USE_ITHREADS
812                         && PL_curpad
813 #endif
814                         ? cGVOPo_gv : NULL;
815             /* It's possible during global destruction that the GV is freed
816                before the optree. Whilst the SvREFCNT_inc is happy to bump from
817                0 to 1 on a freed SV, the corresponding SvREFCNT_dec from 1 to 0
818                will trigger an assertion failure, because the entry to sv_clear
819                checks that the scalar is not already freed.  A check of for
820                !SvIS_FREED(gv) turns out to be invalid, because during global
821                destruction the reference count can be forced down to zero
822                (with SVf_BREAK set).  In which case raising to 1 and then
823                dropping to 0 triggers cleanup before it should happen.  I
824                *think* that this might actually be a general, systematic,
825                weakness of the whole idea of SVf_BREAK, in that code *is*
826                allowed to raise and lower references during global destruction,
827                so any *valid* code that happens to do this during global
828                destruction might well trigger premature cleanup.  */
829             bool still_valid = gv && SvREFCNT(gv);
830
831             if (still_valid)
832                 SvREFCNT_inc_simple_void(gv);
833 #ifdef USE_ITHREADS
834             if (cPADOPo->op_padix > 0) {
835                 /* No GvIN_PAD_off(cGVOPo_gv) here, because other references
836                  * may still exist on the pad */
837                 pad_swipe(cPADOPo->op_padix, TRUE);
838                 cPADOPo->op_padix = 0;
839             }
840 #else
841             SvREFCNT_dec(cSVOPo->op_sv);
842             cSVOPo->op_sv = NULL;
843 #endif
844             if (still_valid) {
845                 int try_downgrade = SvREFCNT(gv) == 2;
846                 SvREFCNT_dec_NN(gv);
847                 if (try_downgrade)
848                     gv_try_downgrade(gv);
849             }
850         }
851         break;
852     case OP_METHOD_NAMED:
853     case OP_CONST:
854     case OP_HINTSEVAL:
855         SvREFCNT_dec(cSVOPo->op_sv);
856         cSVOPo->op_sv = NULL;
857 #ifdef USE_ITHREADS
858         /** Bug #15654
859           Even if op_clear does a pad_free for the target of the op,
860           pad_free doesn't actually remove the sv that exists in the pad;
861           instead it lives on. This results in that it could be reused as 
862           a target later on when the pad was reallocated.
863         **/
864         if(o->op_targ) {
865           pad_swipe(o->op_targ,1);
866           o->op_targ = 0;
867         }
868 #endif
869         break;
870     case OP_DUMP:
871     case OP_GOTO:
872     case OP_NEXT:
873     case OP_LAST:
874     case OP_REDO:
875         if (o->op_flags & (OPf_SPECIAL|OPf_STACKED|OPf_KIDS))
876             break;
877         /* FALLTHROUGH */
878     case OP_TRANS:
879     case OP_TRANSR:
880         if (o->op_private & (OPpTRANS_FROM_UTF|OPpTRANS_TO_UTF)) {
881             assert(o->op_type == OP_TRANS || o->op_type == OP_TRANSR);
882 #ifdef USE_ITHREADS
883             if (cPADOPo->op_padix > 0) {
884                 pad_swipe(cPADOPo->op_padix, TRUE);
885                 cPADOPo->op_padix = 0;
886             }
887 #else
888             SvREFCNT_dec(cSVOPo->op_sv);
889             cSVOPo->op_sv = NULL;
890 #endif
891         }
892         else {
893             PerlMemShared_free(cPVOPo->op_pv);
894             cPVOPo->op_pv = NULL;
895         }
896         break;
897     case OP_SUBST:
898         op_free(cPMOPo->op_pmreplrootu.op_pmreplroot);
899         goto clear_pmop;
900     case OP_PUSHRE:
901 #ifdef USE_ITHREADS
902         if (cPMOPo->op_pmreplrootu.op_pmtargetoff) {
903             /* No GvIN_PAD_off here, because other references may still
904              * exist on the pad */
905             pad_swipe(cPMOPo->op_pmreplrootu.op_pmtargetoff, TRUE);
906         }
907 #else
908         SvREFCNT_dec(MUTABLE_SV(cPMOPo->op_pmreplrootu.op_pmtargetgv));
909 #endif
910         /* FALLTHROUGH */
911     case OP_MATCH:
912     case OP_QR:
913 clear_pmop:
914         if (!(cPMOPo->op_pmflags & PMf_CODELIST_PRIVATE))
915             op_free(cPMOPo->op_code_list);
916         cPMOPo->op_code_list = NULL;
917         forget_pmop(cPMOPo);
918         cPMOPo->op_pmreplrootu.op_pmreplroot = NULL;
919         /* we use the same protection as the "SAFE" version of the PM_ macros
920          * here since sv_clean_all might release some PMOPs
921          * after PL_regex_padav has been cleared
922          * and the clearing of PL_regex_padav needs to
923          * happen before sv_clean_all
924          */
925 #ifdef USE_ITHREADS
926         if(PL_regex_pad) {        /* We could be in destruction */
927             const IV offset = (cPMOPo)->op_pmoffset;
928             ReREFCNT_dec(PM_GETRE(cPMOPo));
929             PL_regex_pad[offset] = &PL_sv_undef;
930             sv_catpvn_nomg(PL_regex_pad[0], (const char *)&offset,
931                            sizeof(offset));
932         }
933 #else
934         ReREFCNT_dec(PM_GETRE(cPMOPo));
935         PM_SETRE(cPMOPo, NULL);
936 #endif
937
938         break;
939     }
940
941     if (o->op_targ > 0) {
942         pad_free(o->op_targ);
943         o->op_targ = 0;
944     }
945 }
946
947 STATIC void
948 S_cop_free(pTHX_ COP* cop)
949 {
950     PERL_ARGS_ASSERT_COP_FREE;
951
952     CopFILE_free(cop);
953     if (! specialWARN(cop->cop_warnings))
954         PerlMemShared_free(cop->cop_warnings);
955     cophh_free(CopHINTHASH_get(cop));
956     if (PL_curcop == cop)
957        PL_curcop = NULL;
958 }
959
960 STATIC void
961 S_forget_pmop(pTHX_ PMOP *const o
962               )
963 {
964     HV * const pmstash = PmopSTASH(o);
965
966     PERL_ARGS_ASSERT_FORGET_PMOP;
967
968     if (pmstash && !SvIS_FREED(pmstash) && SvMAGICAL(pmstash)) {
969         MAGIC * const mg = mg_find((const SV *)pmstash, PERL_MAGIC_symtab);
970         if (mg) {
971             PMOP **const array = (PMOP**) mg->mg_ptr;
972             U32 count = mg->mg_len / sizeof(PMOP**);
973             U32 i = count;
974
975             while (i--) {
976                 if (array[i] == o) {
977                     /* Found it. Move the entry at the end to overwrite it.  */
978                     array[i] = array[--count];
979                     mg->mg_len = count * sizeof(PMOP**);
980                     /* Could realloc smaller at this point always, but probably
981                        not worth it. Probably worth free()ing if we're the
982                        last.  */
983                     if(!count) {
984                         Safefree(mg->mg_ptr);
985                         mg->mg_ptr = NULL;
986                     }
987                     break;
988                 }
989             }
990         }
991     }
992     if (PL_curpm == o) 
993         PL_curpm = NULL;
994 }
995
996 STATIC void
997 S_find_and_forget_pmops(pTHX_ OP *o)
998 {
999     PERL_ARGS_ASSERT_FIND_AND_FORGET_PMOPS;
1000
1001     if (o->op_flags & OPf_KIDS) {
1002         OP *kid = cUNOPo->op_first;
1003         while (kid) {
1004             switch (kid->op_type) {
1005             case OP_SUBST:
1006             case OP_PUSHRE:
1007             case OP_MATCH:
1008             case OP_QR:
1009                 forget_pmop((PMOP*)kid);
1010             }
1011             find_and_forget_pmops(kid);
1012             kid = OP_SIBLING(kid);
1013         }
1014     }
1015 }
1016
1017 /*
1018 =for apidoc Am|void|op_null|OP *o
1019
1020 Neutralizes an op when it is no longer needed, but is still linked to from
1021 other ops.
1022
1023 =cut
1024 */
1025
1026 void
1027 Perl_op_null(pTHX_ OP *o)
1028 {
1029     dVAR;
1030
1031     PERL_ARGS_ASSERT_OP_NULL;
1032
1033     if (o->op_type == OP_NULL)
1034         return;
1035     op_clear(o);
1036     o->op_targ = o->op_type;
1037     o->op_type = OP_NULL;
1038     o->op_ppaddr = PL_ppaddr[OP_NULL];
1039 }
1040
1041 void
1042 Perl_op_refcnt_lock(pTHX)
1043 {
1044 #ifdef USE_ITHREADS
1045     dVAR;
1046 #endif
1047     PERL_UNUSED_CONTEXT;
1048     OP_REFCNT_LOCK;
1049 }
1050
1051 void
1052 Perl_op_refcnt_unlock(pTHX)
1053 {
1054 #ifdef USE_ITHREADS
1055     dVAR;
1056 #endif
1057     PERL_UNUSED_CONTEXT;
1058     OP_REFCNT_UNLOCK;
1059 }
1060
1061
1062 /*
1063 =for apidoc op_sibling_splice
1064
1065 A general function for editing the structure of an existing chain of
1066 op_sibling nodes. By analogy with the perl-level splice() function, allows
1067 you to delete zero or more sequential nodes, replacing them with zero or
1068 more different nodes.  Performs the necessary op_first/op_last
1069 housekeeping on the parent node and op_sibling manipulation on the
1070 children. The last deleted node will be marked as as the last node by
1071 updating the op_sibling or op_lastsib field as appropriate.
1072
1073 Note that op_next is not manipulated, and nodes are not freed; that is the
1074 responsibility of the caller. It also won't create a new list op for an
1075 empty list etc; use higher-level functions like op_append_elem() for that.
1076
1077 parent is the parent node of the sibling chain.
1078
1079 start is the node preceding the first node to be spliced. Node(s)
1080 following it will be deleted, and ops will be inserted after it. If it is
1081 NULL, the first node onwards is deleted, and nodes are inserted at the
1082 beginning.
1083
1084 del_count is the number of nodes to delete. If zero, no nodes are deleted.
1085 If -1 or greater than or equal to the number of remaining kids, all
1086 remaining kids are deleted.
1087
1088 insert is the first of a chain of nodes to be inserted in place of the nodes.
1089 If NULL, no nodes are inserted.
1090
1091 The head of the chain of deleted ops is returned, or NULL if no ops were
1092 deleted.
1093
1094 For example:
1095
1096     action                    before      after         returns
1097     ------                    -----       -----         -------
1098
1099                               P           P
1100     splice(P, A, 2, X-Y-Z)    |           |             B-C
1101                               A-B-C-D     A-X-Y-Z-D
1102
1103                               P           P
1104     splice(P, NULL, 1, X-Y)   |           |             A
1105                               A-B-C-D     X-Y-B-C-D
1106
1107                               P           P
1108     splice(P, NULL, 3, NULL)  |           |             A-B-C
1109                               A-B-C-D     D
1110
1111                               P           P
1112     splice(P, B, 0, X-Y)      |           |             NULL
1113                               A-B-C-D     A-B-X-Y-C-D
1114
1115 =cut
1116 */
1117
1118 OP *
1119 Perl_op_sibling_splice(OP *parent, OP *start, int del_count, OP* insert)
1120 {
1121     OP *first = start ? OP_SIBLING(start) : cLISTOPx(parent)->op_first;
1122     OP *rest;
1123     OP *last_del = NULL;
1124     OP *last_ins = NULL;
1125
1126     PERL_ARGS_ASSERT_OP_SIBLING_SPLICE;
1127
1128     assert(del_count >= -1);
1129
1130     if (del_count && first) {
1131         last_del = first;
1132         while (--del_count && OP_HAS_SIBLING(last_del))
1133             last_del = OP_SIBLING(last_del);
1134         rest = OP_SIBLING(last_del);
1135         OP_SIBLING_set(last_del, NULL);
1136         last_del->op_lastsib = 1;
1137     }
1138     else
1139         rest = first;
1140
1141     if (insert) {
1142         last_ins = insert;
1143         while (OP_HAS_SIBLING(last_ins))
1144             last_ins = OP_SIBLING(last_ins);
1145         OP_SIBLING_set(last_ins, rest);
1146         last_ins->op_lastsib = rest ? 0 : 1;
1147     }
1148     else
1149         insert = rest;
1150
1151     if (start) {
1152         OP_SIBLING_set(start, insert);
1153         start->op_lastsib = insert ? 0 : 1;
1154     }
1155     else
1156         cLISTOPx(parent)->op_first = insert;
1157
1158     if (!rest) {
1159         /* update op_last etc */
1160         U32 type = parent->op_type;
1161         OP *lastop;
1162
1163         if (type == OP_NULL)
1164             type = parent->op_targ;
1165         type = PL_opargs[type] & OA_CLASS_MASK;
1166
1167         lastop = last_ins ? last_ins : start ? start : NULL;
1168         if (   type == OA_BINOP
1169             || type == OA_LISTOP
1170             || type == OA_PMOP
1171             || type == OA_LOOP
1172         )
1173             cLISTOPx(parent)->op_last = lastop;
1174
1175         if (lastop) {
1176             lastop->op_lastsib = 1;
1177 #ifdef PERL_OP_PARENT
1178             lastop->op_sibling = parent;
1179 #endif
1180         }
1181     }
1182     return last_del ? first : NULL;
1183 }
1184
1185 /*
1186 =for apidoc op_parent
1187
1188 returns the parent OP of o, if it has a parent. Returns NULL otherwise.
1189 (Currently perl must be built with C<-DPERL_OP_PARENT> for this feature to
1190 work.
1191
1192 =cut
1193 */
1194
1195 OP *
1196 Perl_op_parent(OP *o)
1197 {
1198     PERL_ARGS_ASSERT_OP_PARENT;
1199 #ifdef PERL_OP_PARENT
1200     while (OP_HAS_SIBLING(o))
1201         o = OP_SIBLING(o);
1202     return o->op_sibling;
1203 #else
1204     PERL_UNUSED_ARG(o);
1205     return NULL;
1206 #endif
1207 }
1208
1209
1210 /* replace the sibling following start with a new UNOP, which becomes
1211  * the parent of the original sibling; e.g.
1212  *
1213  *  op_sibling_newUNOP(P, A, unop-args...)
1214  *
1215  *  P              P
1216  *  |      becomes |
1217  *  A-B-C          A-U-C
1218  *                   |
1219  *                   B
1220  *
1221  * where U is the new UNOP.
1222  *
1223  * parent and start args are the same as for op_sibling_splice();
1224  * type and flags args are as newUNOP().
1225  *
1226  * Returns the new UNOP.
1227  */
1228
1229 OP *
1230 S_op_sibling_newUNOP(pTHX_ OP *parent, OP *start, I32 type, I32 flags)
1231 {
1232     OP *kid, *newop;
1233
1234     kid = op_sibling_splice(parent, start, 1, NULL);
1235     newop = newUNOP(type, flags, kid);
1236     op_sibling_splice(parent, start, 0, newop);
1237     return newop;
1238 }
1239
1240
1241 /* lowest-level newLOGOP-style function - just allocates and populates
1242  * the struct. Higher-level stuff should be done by S_new_logop() /
1243  * newLOGOP(). This function exists mainly to avoid op_first assignment
1244  * being spread throughout this file.
1245  */
1246
1247 LOGOP *
1248 S_alloc_LOGOP(pTHX_ I32 type, OP *first, OP* other)
1249 {
1250     LOGOP *logop;
1251     OP *kid = first;
1252     NewOp(1101, logop, 1, LOGOP);
1253     logop->op_type = (OPCODE)type;
1254     logop->op_first = first;
1255     logop->op_other = other;
1256     logop->op_flags = OPf_KIDS;
1257     while (kid && OP_HAS_SIBLING(kid))
1258         kid = OP_SIBLING(kid);
1259     if (kid) {
1260         kid->op_lastsib = 1;
1261 #ifdef PERL_OP_PARENT
1262         kid->op_sibling = (OP*)logop;
1263 #endif
1264     }
1265     return logop;
1266 }
1267
1268
1269 /* Contextualizers */
1270
1271 /*
1272 =for apidoc Am|OP *|op_contextualize|OP *o|I32 context
1273
1274 Applies a syntactic context to an op tree representing an expression.
1275 I<o> is the op tree, and I<context> must be C<G_SCALAR>, C<G_ARRAY>,
1276 or C<G_VOID> to specify the context to apply.  The modified op tree
1277 is returned.
1278
1279 =cut
1280 */
1281
1282 OP *
1283 Perl_op_contextualize(pTHX_ OP *o, I32 context)
1284 {
1285     PERL_ARGS_ASSERT_OP_CONTEXTUALIZE;
1286     switch (context) {
1287         case G_SCALAR: return scalar(o);
1288         case G_ARRAY:  return list(o);
1289         case G_VOID:   return scalarvoid(o);
1290         default:
1291             Perl_croak(aTHX_ "panic: op_contextualize bad context %ld",
1292                        (long) context);
1293     }
1294 }
1295
1296 /*
1297
1298 =for apidoc Am|OP*|op_linklist|OP *o
1299 This function is the implementation of the L</LINKLIST> macro.  It should
1300 not be called directly.
1301
1302 =cut
1303 */
1304
1305 OP *
1306 Perl_op_linklist(pTHX_ OP *o)
1307 {
1308     OP *first;
1309
1310     PERL_ARGS_ASSERT_OP_LINKLIST;
1311
1312     if (o->op_next)
1313         return o->op_next;
1314
1315     /* establish postfix order */
1316     first = cUNOPo->op_first;
1317     if (first) {
1318         OP *kid;
1319         o->op_next = LINKLIST(first);
1320         kid = first;
1321         for (;;) {
1322             OP *sibl = OP_SIBLING(kid);
1323             if (sibl) {
1324                 kid->op_next = LINKLIST(sibl);
1325                 kid = sibl;
1326             } else {
1327                 kid->op_next = o;
1328                 break;
1329             }
1330         }
1331     }
1332     else
1333         o->op_next = o;
1334
1335     return o->op_next;
1336 }
1337
1338 static OP *
1339 S_scalarkids(pTHX_ OP *o)
1340 {
1341     if (o && o->op_flags & OPf_KIDS) {
1342         OP *kid;
1343         for (kid = cLISTOPo->op_first; kid; kid = OP_SIBLING(kid))
1344             scalar(kid);
1345     }
1346     return o;
1347 }
1348
1349 STATIC OP *
1350 S_scalarboolean(pTHX_ OP *o)
1351 {
1352     PERL_ARGS_ASSERT_SCALARBOOLEAN;
1353
1354     if (o->op_type == OP_SASSIGN && cBINOPo->op_first->op_type == OP_CONST
1355      && !(cBINOPo->op_first->op_flags & OPf_SPECIAL)) {
1356         if (ckWARN(WARN_SYNTAX)) {
1357             const line_t oldline = CopLINE(PL_curcop);
1358
1359             if (PL_parser && PL_parser->copline != NOLINE) {
1360                 /* This ensures that warnings are reported at the first line
1361                    of the conditional, not the last.  */
1362                 CopLINE_set(PL_curcop, PL_parser->copline);
1363             }
1364             Perl_warner(aTHX_ packWARN(WARN_SYNTAX), "Found = in conditional, should be ==");
1365             CopLINE_set(PL_curcop, oldline);
1366         }
1367     }
1368     return scalar(o);
1369 }
1370
1371 static SV *
1372 S_op_varname(pTHX_ const OP *o)
1373 {
1374     assert(o);
1375     assert(o->op_type == OP_PADAV || o->op_type == OP_RV2AV ||
1376            o->op_type == OP_PADHV || o->op_type == OP_RV2HV);
1377     {
1378         const char funny  = o->op_type == OP_PADAV
1379                          || o->op_type == OP_RV2AV ? '@' : '%';
1380         if (o->op_type == OP_RV2AV || o->op_type == OP_RV2HV) {
1381             GV *gv;
1382             if (cUNOPo->op_first->op_type != OP_GV
1383              || !(gv = cGVOPx_gv(cUNOPo->op_first)))
1384                 return NULL;
1385             return varname(gv, funny, 0, NULL, 0, 1);
1386         }
1387         return
1388             varname(MUTABLE_GV(PL_compcv), funny, o->op_targ, NULL, 0, 1);
1389     }
1390 }
1391
1392 static void
1393 S_op_pretty(pTHX_ const OP *o, SV **retsv, const char **retpv)
1394 { /* or not so pretty :-) */
1395     if (o->op_type == OP_CONST) {
1396         *retsv = cSVOPo_sv;
1397         if (SvPOK(*retsv)) {
1398             SV *sv = *retsv;
1399             *retsv = sv_newmortal();
1400             pv_pretty(*retsv, SvPVX_const(sv), SvCUR(sv), 32, NULL, NULL,
1401                       PERL_PV_PRETTY_DUMP |PERL_PV_ESCAPE_UNI_DETECT);
1402         }
1403         else if (!SvOK(*retsv))
1404             *retpv = "undef";
1405     }
1406     else *retpv = "...";
1407 }
1408
1409 static void
1410 S_scalar_slice_warning(pTHX_ const OP *o)
1411 {
1412     OP *kid;
1413     const char lbrack =
1414         o->op_type == OP_HSLICE ? '{' : '[';
1415     const char rbrack =
1416         o->op_type == OP_HSLICE ? '}' : ']';
1417     SV *name;
1418     SV *keysv = NULL; /* just to silence compiler warnings */
1419     const char *key = NULL;
1420
1421     if (!(o->op_private & OPpSLICEWARNING))
1422         return;
1423     if (PL_parser && PL_parser->error_count)
1424         /* This warning can be nonsensical when there is a syntax error. */
1425         return;
1426
1427     kid = cLISTOPo->op_first;
1428     kid = OP_SIBLING(kid); /* get past pushmark */
1429     /* weed out false positives: any ops that can return lists */
1430     switch (kid->op_type) {
1431     case OP_BACKTICK:
1432     case OP_GLOB:
1433     case OP_READLINE:
1434     case OP_MATCH:
1435     case OP_RV2AV:
1436     case OP_EACH:
1437     case OP_VALUES:
1438     case OP_KEYS:
1439     case OP_SPLIT:
1440     case OP_LIST:
1441     case OP_SORT:
1442     case OP_REVERSE:
1443     case OP_ENTERSUB:
1444     case OP_CALLER:
1445     case OP_LSTAT:
1446     case OP_STAT:
1447     case OP_READDIR:
1448     case OP_SYSTEM:
1449     case OP_TMS:
1450     case OP_LOCALTIME:
1451     case OP_GMTIME:
1452     case OP_ENTEREVAL:
1453     case OP_REACH:
1454     case OP_RKEYS:
1455     case OP_RVALUES:
1456         return;
1457     }
1458
1459     /* Don't warn if we have a nulled list either. */
1460     if (kid->op_type == OP_NULL && kid->op_targ == OP_LIST)
1461         return;
1462
1463     assert(OP_SIBLING(kid));
1464     name = S_op_varname(aTHX_ OP_SIBLING(kid));
1465     if (!name) /* XS module fiddling with the op tree */
1466         return;
1467     S_op_pretty(aTHX_ kid, &keysv, &key);
1468     assert(SvPOK(name));
1469     sv_chop(name,SvPVX(name)+1);
1470     if (key)
1471        /* diag_listed_as: Scalar value @%s[%s] better written as $%s[%s] */
1472         Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
1473                    "Scalar value @%"SVf"%c%s%c better written as $%"SVf
1474                    "%c%s%c",
1475                     SVfARG(name), lbrack, key, rbrack, SVfARG(name),
1476                     lbrack, key, rbrack);
1477     else
1478        /* diag_listed_as: Scalar value @%s[%s] better written as $%s[%s] */
1479         Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
1480                    "Scalar value @%"SVf"%c%"SVf"%c better written as $%"
1481                     SVf"%c%"SVf"%c",
1482                     SVfARG(name), lbrack, SVfARG(keysv), rbrack,
1483                     SVfARG(name), lbrack, SVfARG(keysv), rbrack);
1484 }
1485
1486 OP *
1487 Perl_scalar(pTHX_ OP *o)
1488 {
1489     OP *kid;
1490
1491     /* assumes no premature commitment */
1492     if (!o || (PL_parser && PL_parser->error_count)
1493          || (o->op_flags & OPf_WANT)
1494          || o->op_type == OP_RETURN)
1495     {
1496         return o;
1497     }
1498
1499     o->op_flags = (o->op_flags & ~OPf_WANT) | OPf_WANT_SCALAR;
1500
1501     switch (o->op_type) {
1502     case OP_REPEAT:
1503         scalar(cBINOPo->op_first);
1504         break;
1505     case OP_OR:
1506     case OP_AND:
1507     case OP_COND_EXPR:
1508         for (kid = OP_SIBLING(cUNOPo->op_first); kid; kid = OP_SIBLING(kid))
1509             scalar(kid);
1510         break;
1511         /* FALLTHROUGH */
1512     case OP_SPLIT:
1513     case OP_MATCH:
1514     case OP_QR:
1515     case OP_SUBST:
1516     case OP_NULL:
1517     default:
1518         if (o->op_flags & OPf_KIDS) {
1519             for (kid = cUNOPo->op_first; kid; kid = OP_SIBLING(kid))
1520                 scalar(kid);
1521         }
1522         break;
1523     case OP_LEAVE:
1524     case OP_LEAVETRY:
1525         kid = cLISTOPo->op_first;
1526         scalar(kid);
1527         kid = OP_SIBLING(kid);
1528     do_kids:
1529         while (kid) {
1530             OP *sib = OP_SIBLING(kid);
1531             if (sib && kid->op_type != OP_LEAVEWHEN)
1532                 scalarvoid(kid);
1533             else
1534                 scalar(kid);
1535             kid = sib;
1536         }
1537         PL_curcop = &PL_compiling;
1538         break;
1539     case OP_SCOPE:
1540     case OP_LINESEQ:
1541     case OP_LIST:
1542         kid = cLISTOPo->op_first;
1543         goto do_kids;
1544     case OP_SORT:
1545         Perl_ck_warner(aTHX_ packWARN(WARN_VOID), "Useless use of sort in scalar context");
1546         break;
1547     case OP_KVHSLICE:
1548     case OP_KVASLICE:
1549     {
1550         /* Warn about scalar context */
1551         const char lbrack = o->op_type == OP_KVHSLICE ? '{' : '[';
1552         const char rbrack = o->op_type == OP_KVHSLICE ? '}' : ']';
1553         SV *name;
1554         SV *keysv;
1555         const char *key = NULL;
1556
1557         /* This warning can be nonsensical when there is a syntax error. */
1558         if (PL_parser && PL_parser->error_count)
1559             break;
1560
1561         if (!ckWARN(WARN_SYNTAX)) break;
1562
1563         kid = cLISTOPo->op_first;
1564         kid = OP_SIBLING(kid); /* get past pushmark */
1565         assert(OP_SIBLING(kid));
1566         name = S_op_varname(aTHX_ OP_SIBLING(kid));
1567         if (!name) /* XS module fiddling with the op tree */
1568             break;
1569         S_op_pretty(aTHX_ kid, &keysv, &key);
1570         assert(SvPOK(name));
1571         sv_chop(name,SvPVX(name)+1);
1572         if (key)
1573   /* diag_listed_as: %%s[%s] in scalar context better written as $%s[%s] */
1574             Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
1575                        "%%%"SVf"%c%s%c in scalar context better written "
1576                        "as $%"SVf"%c%s%c",
1577                         SVfARG(name), lbrack, key, rbrack, SVfARG(name),
1578                         lbrack, key, rbrack);
1579         else
1580   /* diag_listed_as: %%s[%s] in scalar context better written as $%s[%s] */
1581             Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
1582                        "%%%"SVf"%c%"SVf"%c in scalar context better "
1583                        "written as $%"SVf"%c%"SVf"%c",
1584                         SVfARG(name), lbrack, SVfARG(keysv), rbrack,
1585                         SVfARG(name), lbrack, SVfARG(keysv), rbrack);
1586     }
1587     }
1588     return o;
1589 }
1590
1591 OP *
1592 Perl_scalarvoid(pTHX_ OP *o)
1593 {
1594     dVAR;
1595     OP *kid;
1596     SV *useless_sv = NULL;
1597     const char* useless = NULL;
1598     SV* sv;
1599     U8 want;
1600
1601     PERL_ARGS_ASSERT_SCALARVOID;
1602
1603     if (o->op_type == OP_NEXTSTATE
1604         || o->op_type == OP_DBSTATE
1605         || (o->op_type == OP_NULL && (o->op_targ == OP_NEXTSTATE
1606                                       || o->op_targ == OP_DBSTATE)))
1607         PL_curcop = (COP*)o;            /* for warning below */
1608
1609     /* assumes no premature commitment */
1610     want = o->op_flags & OPf_WANT;
1611     if ((want && want != OPf_WANT_SCALAR)
1612          || (PL_parser && PL_parser->error_count)
1613          || o->op_type == OP_RETURN || o->op_type == OP_REQUIRE || o->op_type == OP_LEAVEWHEN)
1614     {
1615         return o;
1616     }
1617
1618     if ((o->op_private & OPpTARGET_MY)
1619         && (PL_opargs[o->op_type] & OA_TARGLEX))/* OPp share the meaning */
1620     {
1621         return scalar(o);                       /* As if inside SASSIGN */
1622     }
1623
1624     o->op_flags = (o->op_flags & ~OPf_WANT) | OPf_WANT_VOID;
1625
1626     switch (o->op_type) {
1627     default:
1628         if (!(PL_opargs[o->op_type] & OA_FOLDCONST))
1629             break;
1630         /* FALLTHROUGH */
1631     case OP_REPEAT:
1632         if (o->op_flags & OPf_STACKED)
1633             break;
1634         goto func_ops;
1635     case OP_SUBSTR:
1636         if (o->op_private == 4)
1637             break;
1638         /* FALLTHROUGH */
1639     case OP_GVSV:
1640     case OP_WANTARRAY:
1641     case OP_GV:
1642     case OP_SMARTMATCH:
1643     case OP_PADSV:
1644     case OP_PADAV:
1645     case OP_PADHV:
1646     case OP_PADANY:
1647     case OP_AV2ARYLEN:
1648     case OP_REF:
1649     case OP_REFGEN:
1650     case OP_SREFGEN:
1651     case OP_DEFINED:
1652     case OP_HEX:
1653     case OP_OCT:
1654     case OP_LENGTH:
1655     case OP_VEC:
1656     case OP_INDEX:
1657     case OP_RINDEX:
1658     case OP_SPRINTF:
1659     case OP_AELEM:
1660     case OP_AELEMFAST:
1661     case OP_AELEMFAST_LEX:
1662     case OP_ASLICE:
1663     case OP_KVASLICE:
1664     case OP_HELEM:
1665     case OP_HSLICE:
1666     case OP_KVHSLICE:
1667     case OP_UNPACK:
1668     case OP_PACK:
1669     case OP_JOIN:
1670     case OP_LSLICE:
1671     case OP_ANONLIST:
1672     case OP_ANONHASH:
1673     case OP_SORT:
1674     case OP_REVERSE:
1675     case OP_RANGE:
1676     case OP_FLIP:
1677     case OP_FLOP:
1678     case OP_CALLER:
1679     case OP_FILENO:
1680     case OP_EOF:
1681     case OP_TELL:
1682     case OP_GETSOCKNAME:
1683     case OP_GETPEERNAME:
1684     case OP_READLINK:
1685     case OP_TELLDIR:
1686     case OP_GETPPID:
1687     case OP_GETPGRP:
1688     case OP_GETPRIORITY:
1689     case OP_TIME:
1690     case OP_TMS:
1691     case OP_LOCALTIME:
1692     case OP_GMTIME:
1693     case OP_GHBYNAME:
1694     case OP_GHBYADDR:
1695     case OP_GHOSTENT:
1696     case OP_GNBYNAME:
1697     case OP_GNBYADDR:
1698     case OP_GNETENT:
1699     case OP_GPBYNAME:
1700     case OP_GPBYNUMBER:
1701     case OP_GPROTOENT:
1702     case OP_GSBYNAME:
1703     case OP_GSBYPORT:
1704     case OP_GSERVENT:
1705     case OP_GPWNAM:
1706     case OP_GPWUID:
1707     case OP_GGRNAM:
1708     case OP_GGRGID:
1709     case OP_GETLOGIN:
1710     case OP_PROTOTYPE:
1711     case OP_RUNCV:
1712       func_ops:
1713         if (!(o->op_private & (OPpLVAL_INTRO|OPpOUR_INTRO)))
1714             /* Otherwise it's "Useless use of grep iterator" */
1715             useless = OP_DESC(o);
1716         break;
1717
1718     case OP_SPLIT:
1719         kid = cLISTOPo->op_first;
1720         if (kid && kid->op_type == OP_PUSHRE
1721 #ifdef USE_ITHREADS
1722                 && !((PMOP*)kid)->op_pmreplrootu.op_pmtargetoff)
1723 #else
1724                 && !((PMOP*)kid)->op_pmreplrootu.op_pmtargetgv)
1725 #endif
1726             useless = OP_DESC(o);
1727         break;
1728
1729     case OP_NOT:
1730        kid = cUNOPo->op_first;
1731        if (kid->op_type != OP_MATCH && kid->op_type != OP_SUBST &&
1732            kid->op_type != OP_TRANS && kid->op_type != OP_TRANSR) {
1733                 goto func_ops;
1734        }
1735        useless = "negative pattern binding (!~)";
1736        break;
1737
1738     case OP_SUBST:
1739         if (cPMOPo->op_pmflags & PMf_NONDESTRUCT)
1740             useless = "non-destructive substitution (s///r)";
1741         break;
1742
1743     case OP_TRANSR:
1744         useless = "non-destructive transliteration (tr///r)";
1745         break;
1746
1747     case OP_RV2GV:
1748     case OP_RV2SV:
1749     case OP_RV2AV:
1750     case OP_RV2HV:
1751         if (!(o->op_private & (OPpLVAL_INTRO|OPpOUR_INTRO)) &&
1752                 (!OP_HAS_SIBLING(o) || OP_SIBLING(o)->op_type != OP_READLINE))
1753             useless = "a variable";
1754         break;
1755
1756     case OP_CONST:
1757         sv = cSVOPo_sv;
1758         if (cSVOPo->op_private & OPpCONST_STRICT)
1759             no_bareword_allowed(o);
1760         else {
1761             if (ckWARN(WARN_VOID)) {
1762                 /* don't warn on optimised away booleans, eg 
1763                  * use constant Foo, 5; Foo || print; */
1764                 if (cSVOPo->op_private & OPpCONST_SHORTCIRCUIT)
1765                     useless = NULL;
1766                 /* the constants 0 and 1 are permitted as they are
1767                    conventionally used as dummies in constructs like
1768                         1 while some_condition_with_side_effects;  */
1769                 else if (SvNIOK(sv) && (SvNV(sv) == 0.0 || SvNV(sv) == 1.0))
1770                     useless = NULL;
1771                 else if (SvPOK(sv)) {
1772                     SV * const dsv = newSVpvs("");
1773                     useless_sv
1774                         = Perl_newSVpvf(aTHX_
1775                                         "a constant (%s)",
1776                                         pv_pretty(dsv, SvPVX_const(sv),
1777                                                   SvCUR(sv), 32, NULL, NULL,
1778                                                   PERL_PV_PRETTY_DUMP
1779                                                   | PERL_PV_ESCAPE_NOCLEAR
1780                                                   | PERL_PV_ESCAPE_UNI_DETECT));
1781                     SvREFCNT_dec_NN(dsv);
1782                 }
1783                 else if (SvOK(sv)) {
1784                     useless_sv = Perl_newSVpvf(aTHX_ "a constant (%"SVf")", SVfARG(sv));
1785                 }
1786                 else
1787                     useless = "a constant (undef)";
1788             }
1789         }
1790         op_null(o);             /* don't execute or even remember it */
1791         break;
1792
1793     case OP_POSTINC:
1794         o->op_type = OP_PREINC;         /* pre-increment is faster */
1795         o->op_ppaddr = PL_ppaddr[OP_PREINC];
1796         break;
1797
1798     case OP_POSTDEC:
1799         o->op_type = OP_PREDEC;         /* pre-decrement is faster */
1800         o->op_ppaddr = PL_ppaddr[OP_PREDEC];
1801         break;
1802
1803     case OP_I_POSTINC:
1804         o->op_type = OP_I_PREINC;       /* pre-increment is faster */
1805         o->op_ppaddr = PL_ppaddr[OP_I_PREINC];
1806         break;
1807
1808     case OP_I_POSTDEC:
1809         o->op_type = OP_I_PREDEC;       /* pre-decrement is faster */
1810         o->op_ppaddr = PL_ppaddr[OP_I_PREDEC];
1811         break;
1812
1813     case OP_SASSIGN: {
1814         OP *rv2gv;
1815         UNOP *refgen, *rv2cv;
1816         LISTOP *exlist;
1817
1818         if ((o->op_private & ~OPpASSIGN_BACKWARDS) != 2)
1819             break;
1820
1821         rv2gv = ((BINOP *)o)->op_last;
1822         if (!rv2gv || rv2gv->op_type != OP_RV2GV)
1823             break;
1824
1825         refgen = (UNOP *)((BINOP *)o)->op_first;
1826
1827         if (!refgen || refgen->op_type != OP_REFGEN)
1828             break;
1829
1830         exlist = (LISTOP *)refgen->op_first;
1831         if (!exlist || exlist->op_type != OP_NULL
1832             || exlist->op_targ != OP_LIST)
1833             break;
1834
1835         if (exlist->op_first->op_type != OP_PUSHMARK)
1836             break;
1837
1838         rv2cv = (UNOP*)exlist->op_last;
1839
1840         if (rv2cv->op_type != OP_RV2CV)
1841             break;
1842
1843         assert ((rv2gv->op_private & OPpDONT_INIT_GV) == 0);
1844         assert ((o->op_private & OPpASSIGN_CV_TO_GV) == 0);
1845         assert ((rv2cv->op_private & OPpMAY_RETURN_CONSTANT) == 0);
1846
1847         o->op_private |= OPpASSIGN_CV_TO_GV;
1848         rv2gv->op_private |= OPpDONT_INIT_GV;
1849         rv2cv->op_private |= OPpMAY_RETURN_CONSTANT;
1850
1851         break;
1852     }
1853
1854     case OP_AASSIGN: {
1855         inplace_aassign(o);
1856         break;
1857     }
1858
1859     case OP_OR:
1860     case OP_AND:
1861         kid = cLOGOPo->op_first;
1862         if (kid->op_type == OP_NOT
1863             && (kid->op_flags & OPf_KIDS)) {
1864             if (o->op_type == OP_AND) {
1865                 o->op_type = OP_OR;
1866                 o->op_ppaddr = PL_ppaddr[OP_OR];
1867             } else {
1868                 o->op_type = OP_AND;
1869                 o->op_ppaddr = PL_ppaddr[OP_AND];
1870             }
1871             op_null(kid);
1872         }
1873         /* FALLTHROUGH */
1874
1875     case OP_DOR:
1876     case OP_COND_EXPR:
1877     case OP_ENTERGIVEN:
1878     case OP_ENTERWHEN:
1879         for (kid = OP_SIBLING(cUNOPo->op_first); kid; kid = OP_SIBLING(kid))
1880             scalarvoid(kid);
1881         break;
1882
1883     case OP_NULL:
1884         if (o->op_flags & OPf_STACKED)
1885             break;
1886         /* FALLTHROUGH */
1887     case OP_NEXTSTATE:
1888     case OP_DBSTATE:
1889     case OP_ENTERTRY:
1890     case OP_ENTER:
1891         if (!(o->op_flags & OPf_KIDS))
1892             break;
1893         /* FALLTHROUGH */
1894     case OP_SCOPE:
1895     case OP_LEAVE:
1896     case OP_LEAVETRY:
1897     case OP_LEAVELOOP:
1898     case OP_LINESEQ:
1899     case OP_LIST:
1900     case OP_LEAVEGIVEN:
1901     case OP_LEAVEWHEN:
1902         for (kid = cLISTOPo->op_first; kid; kid = OP_SIBLING(kid))
1903             scalarvoid(kid);
1904         break;
1905     case OP_ENTEREVAL:
1906         scalarkids(o);
1907         break;
1908     case OP_SCALAR:
1909         return scalar(o);
1910     }
1911
1912     if (useless_sv) {
1913         /* mortalise it, in case warnings are fatal.  */
1914         Perl_ck_warner(aTHX_ packWARN(WARN_VOID),
1915                        "Useless use of %"SVf" in void context",
1916                        SVfARG(sv_2mortal(useless_sv)));
1917     }
1918     else if (useless) {
1919        Perl_ck_warner(aTHX_ packWARN(WARN_VOID),
1920                       "Useless use of %s in void context",
1921                       useless);
1922     }
1923     return o;
1924 }
1925
1926 static OP *
1927 S_listkids(pTHX_ OP *o)
1928 {
1929     if (o && o->op_flags & OPf_KIDS) {
1930         OP *kid;
1931         for (kid = cLISTOPo->op_first; kid; kid = OP_SIBLING(kid))
1932             list(kid);
1933     }
1934     return o;
1935 }
1936
1937 OP *
1938 Perl_list(pTHX_ OP *o)
1939 {
1940     OP *kid;
1941
1942     /* assumes no premature commitment */
1943     if (!o || (o->op_flags & OPf_WANT)
1944          || (PL_parser && PL_parser->error_count)
1945          || o->op_type == OP_RETURN)
1946     {
1947         return o;
1948     }
1949
1950     if ((o->op_private & OPpTARGET_MY)
1951         && (PL_opargs[o->op_type] & OA_TARGLEX))/* OPp share the meaning */
1952     {
1953         return o;                               /* As if inside SASSIGN */
1954     }
1955
1956     o->op_flags = (o->op_flags & ~OPf_WANT) | OPf_WANT_LIST;
1957
1958     switch (o->op_type) {
1959     case OP_FLOP:
1960     case OP_REPEAT:
1961         list(cBINOPo->op_first);
1962         break;
1963     case OP_OR:
1964     case OP_AND:
1965     case OP_COND_EXPR:
1966         for (kid = OP_SIBLING(cUNOPo->op_first); kid; kid = OP_SIBLING(kid))
1967             list(kid);
1968         break;
1969     default:
1970     case OP_MATCH:
1971     case OP_QR:
1972     case OP_SUBST:
1973     case OP_NULL:
1974         if (!(o->op_flags & OPf_KIDS))
1975             break;
1976         if (!o->op_next && cUNOPo->op_first->op_type == OP_FLOP) {
1977             list(cBINOPo->op_first);
1978             return gen_constant_list(o);
1979         }
1980     case OP_LIST:
1981         listkids(o);
1982         break;
1983     case OP_LEAVE:
1984     case OP_LEAVETRY:
1985         kid = cLISTOPo->op_first;
1986         list(kid);
1987         kid = OP_SIBLING(kid);
1988     do_kids:
1989         while (kid) {
1990             OP *sib = OP_SIBLING(kid);
1991             if (sib && kid->op_type != OP_LEAVEWHEN)
1992                 scalarvoid(kid);
1993             else
1994                 list(kid);
1995             kid = sib;
1996         }
1997         PL_curcop = &PL_compiling;
1998         break;
1999     case OP_SCOPE:
2000     case OP_LINESEQ:
2001         kid = cLISTOPo->op_first;
2002         goto do_kids;
2003     }
2004     return o;
2005 }
2006
2007 static OP *
2008 S_scalarseq(pTHX_ OP *o)
2009 {
2010     if (o) {
2011         const OPCODE type = o->op_type;
2012
2013         if (type == OP_LINESEQ || type == OP_SCOPE ||
2014             type == OP_LEAVE || type == OP_LEAVETRY)
2015         {
2016             OP *kid;
2017             for (kid = cLISTOPo->op_first; kid; kid = OP_SIBLING(kid)) {
2018                 if (OP_HAS_SIBLING(kid)) {
2019                     scalarvoid(kid);
2020                 }
2021             }
2022             PL_curcop = &PL_compiling;
2023         }
2024         o->op_flags &= ~OPf_PARENS;
2025         if (PL_hints & HINT_BLOCK_SCOPE)
2026             o->op_flags |= OPf_PARENS;
2027     }
2028     else
2029         o = newOP(OP_STUB, 0);
2030     return o;
2031 }
2032
2033 STATIC OP *
2034 S_modkids(pTHX_ OP *o, I32 type)
2035 {
2036     if (o && o->op_flags & OPf_KIDS) {
2037         OP *kid;
2038         for (kid = cLISTOPo->op_first; kid; kid = OP_SIBLING(kid))
2039             op_lvalue(kid, type);
2040     }
2041     return o;
2042 }
2043
2044 /*
2045 =for apidoc finalize_optree
2046
2047 This function finalizes the optree.  Should be called directly after
2048 the complete optree is built.  It does some additional
2049 checking which can't be done in the normal ck_xxx functions and makes
2050 the tree thread-safe.
2051
2052 =cut
2053 */
2054 void
2055 Perl_finalize_optree(pTHX_ OP* o)
2056 {
2057     PERL_ARGS_ASSERT_FINALIZE_OPTREE;
2058
2059     ENTER;
2060     SAVEVPTR(PL_curcop);
2061
2062     finalize_op(o);
2063
2064     LEAVE;
2065 }
2066
2067 STATIC void
2068 S_finalize_op(pTHX_ OP* o)
2069 {
2070     PERL_ARGS_ASSERT_FINALIZE_OP;
2071
2072
2073     switch (o->op_type) {
2074     case OP_NEXTSTATE:
2075     case OP_DBSTATE:
2076         PL_curcop = ((COP*)o);          /* for warnings */
2077         break;
2078     case OP_EXEC:
2079         if (OP_HAS_SIBLING(o)) {
2080             OP *sib = OP_SIBLING(o);
2081             if ((  sib->op_type == OP_NEXTSTATE || sib->op_type == OP_DBSTATE)
2082                 && ckWARN(WARN_EXEC)
2083                 && OP_HAS_SIBLING(sib))
2084             {
2085                     const OPCODE type = OP_SIBLING(sib)->op_type;
2086                     if (type != OP_EXIT && type != OP_WARN && type != OP_DIE) {
2087                         const line_t oldline = CopLINE(PL_curcop);
2088                         CopLINE_set(PL_curcop, CopLINE((COP*)sib));
2089                         Perl_warner(aTHX_ packWARN(WARN_EXEC),
2090                             "Statement unlikely to be reached");
2091                         Perl_warner(aTHX_ packWARN(WARN_EXEC),
2092                             "\t(Maybe you meant system() when you said exec()?)\n");
2093                         CopLINE_set(PL_curcop, oldline);
2094                     }
2095             }
2096         }
2097         break;
2098
2099     case OP_GV:
2100         if ((o->op_private & OPpEARLY_CV) && ckWARN(WARN_PROTOTYPE)) {
2101             GV * const gv = cGVOPo_gv;
2102             if (SvTYPE(gv) == SVt_PVGV && GvCV(gv) && SvPVX_const(GvCV(gv))) {
2103                 /* XXX could check prototype here instead of just carping */
2104                 SV * const sv = sv_newmortal();
2105                 gv_efullname3(sv, gv, NULL);
2106                 Perl_warner(aTHX_ packWARN(WARN_PROTOTYPE),
2107                     "%"SVf"() called too early to check prototype",
2108                     SVfARG(sv));
2109             }
2110         }
2111         break;
2112
2113     case OP_CONST:
2114         if (cSVOPo->op_private & OPpCONST_STRICT)
2115             no_bareword_allowed(o);
2116         /* FALLTHROUGH */
2117 #ifdef USE_ITHREADS
2118     case OP_HINTSEVAL:
2119     case OP_METHOD_NAMED:
2120         /* Relocate sv to the pad for thread safety.
2121          * Despite being a "constant", the SV is written to,
2122          * for reference counts, sv_upgrade() etc. */
2123         if (cSVOPo->op_sv) {
2124             const PADOFFSET ix = pad_alloc(OP_CONST, SVf_READONLY);
2125             SvREFCNT_dec(PAD_SVl(ix));
2126             PAD_SETSV(ix, cSVOPo->op_sv);
2127             /* XXX I don't know how this isn't readonly already. */
2128             if (!SvIsCOW(PAD_SVl(ix))) SvREADONLY_on(PAD_SVl(ix));
2129             cSVOPo->op_sv = NULL;
2130             o->op_targ = ix;
2131         }
2132 #endif
2133         break;
2134
2135     case OP_HELEM: {
2136         UNOP *rop;
2137         SV *lexname;
2138         GV **fields;
2139         SVOP *key_op;
2140         OP *kid;
2141         bool check_fields;
2142
2143         if ((key_op = cSVOPx(((BINOP*)o)->op_last))->op_type != OP_CONST)
2144             break;
2145
2146         rop = (UNOP*)((BINOP*)o)->op_first;
2147
2148         goto check_keys;
2149
2150     case OP_HSLICE:
2151         S_scalar_slice_warning(aTHX_ o);
2152         /* FALLTHROUGH */
2153
2154     case OP_KVHSLICE:
2155         kid = OP_SIBLING(cLISTOPo->op_first);
2156         if (/* I bet there's always a pushmark... */
2157             OP_TYPE_ISNT_AND_WASNT_NN(kid, OP_LIST)
2158             && OP_TYPE_ISNT_NN(kid, OP_CONST))
2159         {
2160             break;
2161         }
2162
2163         key_op = (SVOP*)(kid->op_type == OP_CONST
2164                                 ? kid
2165                                 : OP_SIBLING(kLISTOP->op_first));
2166
2167         rop = (UNOP*)((LISTOP*)o)->op_last;
2168
2169       check_keys:       
2170         if (o->op_private & OPpLVAL_INTRO || rop->op_type != OP_RV2HV)
2171             rop = NULL;
2172         else if (rop->op_first->op_type == OP_PADSV)
2173             /* @$hash{qw(keys here)} */
2174             rop = (UNOP*)rop->op_first;
2175         else {
2176             /* @{$hash}{qw(keys here)} */
2177             if (rop->op_first->op_type == OP_SCOPE
2178                 && cLISTOPx(rop->op_first)->op_last->op_type == OP_PADSV)
2179                 {
2180                     rop = (UNOP*)cLISTOPx(rop->op_first)->op_last;
2181                 }
2182             else
2183                 rop = NULL;
2184         }
2185
2186         lexname = NULL; /* just to silence compiler warnings */
2187         fields  = NULL; /* just to silence compiler warnings */
2188
2189         check_fields =
2190             rop
2191          && (lexname = *av_fetch(PL_comppad_name, rop->op_targ, TRUE),
2192              SvPAD_TYPED(lexname))
2193          && (fields = (GV**)hv_fetchs(SvSTASH(lexname), "FIELDS", FALSE))
2194          && isGV(*fields) && GvHV(*fields);
2195         for (; key_op;
2196              key_op = (SVOP*)OP_SIBLING(key_op)) {
2197             SV **svp, *sv;
2198             if (key_op->op_type != OP_CONST)
2199                 continue;
2200             svp = cSVOPx_svp(key_op);
2201
2202             /* Make the CONST have a shared SV */
2203             if ((!SvIsCOW_shared_hash(sv = *svp))
2204              && SvTYPE(sv) < SVt_PVMG && SvOK(sv) && !SvROK(sv)) {
2205                 SSize_t keylen;
2206                 const char * const key = SvPV_const(sv, *(STRLEN*)&keylen);
2207                 SV *nsv = newSVpvn_share(key,
2208                                          SvUTF8(sv) ? -keylen : keylen, 0);
2209                 SvREFCNT_dec_NN(sv);
2210                 *svp = nsv;
2211             }
2212
2213             if (check_fields
2214              && !hv_fetch_ent(GvHV(*fields), *svp, FALSE, 0)) {
2215                 Perl_croak(aTHX_ "No such class field \"%"SVf"\" " 
2216                            "in variable %"SVf" of type %"HEKf, 
2217                       SVfARG(*svp), SVfARG(lexname),
2218                       HEKfARG(HvNAME_HEK(SvSTASH(lexname))));
2219             }
2220         }
2221         break;
2222     }
2223     case OP_ASLICE:
2224         S_scalar_slice_warning(aTHX_ o);
2225         break;
2226
2227     case OP_SUBST: {
2228         if (cPMOPo->op_pmreplrootu.op_pmreplroot)
2229             finalize_op(cPMOPo->op_pmreplrootu.op_pmreplroot);
2230         break;
2231     }
2232     default:
2233         break;
2234     }
2235
2236     if (o->op_flags & OPf_KIDS) {
2237         OP *kid;
2238
2239 #ifdef DEBUGGING
2240         /* check that op_last points to the last sibling, and that
2241          * the last op_sibling field points back to the parent, and
2242          * that the only ops with KIDS are those which are entitled to
2243          * them */
2244         U32 type = o->op_type;
2245         U32 family;
2246         bool has_last;
2247
2248         if (type == OP_NULL) {
2249             type = o->op_targ;
2250             /* ck_glob creates a null UNOP with ex-type GLOB
2251              * (which is a list op. So pretend it wasn't a listop */
2252             if (type == OP_GLOB)
2253                 type = OP_NULL;
2254         }
2255         family = PL_opargs[type] & OA_CLASS_MASK;
2256
2257         has_last = (   family == OA_BINOP
2258                     || family == OA_LISTOP
2259                     || family == OA_PMOP
2260                     || family == OA_LOOP
2261                    );
2262         assert(  has_last /* has op_first and op_last, or ...
2263               ... has (or may have) op_first: */
2264               || family == OA_UNOP
2265               || family == OA_LOGOP
2266               || family == OA_BASEOP_OR_UNOP
2267               || family == OA_FILESTATOP
2268               || family == OA_LOOPEXOP
2269               /* I don't know why SASSIGN is tagged as OA_BASEOP - DAPM */
2270               || type == OP_SASSIGN
2271               || type == OP_CUSTOM
2272               || type == OP_NULL /* new_logop does this */
2273               );
2274         /* XXX list form of 'x' is has a null op_last. This is wrong,
2275          * but requires too much hacking (e.g. in Deparse) to fix for
2276          * now */
2277         if (type == OP_REPEAT && (o->op_private & OPpREPEAT_DOLIST)) {
2278             assert(has_last);
2279             has_last = 0;
2280         }
2281
2282         for (kid = cUNOPo->op_first; kid; kid = OP_SIBLING(kid)) {
2283 #  ifdef PERL_OP_PARENT
2284             if (!OP_HAS_SIBLING(kid)) {
2285                 if (has_last)
2286                     assert(kid == cLISTOPo->op_last);
2287                 assert(kid->op_sibling == o);
2288             }
2289 #  else
2290             if (OP_HAS_SIBLING(kid)) {
2291                 assert(!kid->op_lastsib);
2292             }
2293             else {
2294                 assert(kid->op_lastsib);
2295                 if (has_last)
2296                     assert(kid == cLISTOPo->op_last);
2297             }
2298 #  endif
2299         }
2300 #endif
2301
2302         for (kid = cUNOPo->op_first; kid; kid = OP_SIBLING(kid))
2303             finalize_op(kid);
2304     }
2305 }
2306
2307 /*
2308 =for apidoc Amx|OP *|op_lvalue|OP *o|I32 type
2309
2310 Propagate lvalue ("modifiable") context to an op and its children.
2311 I<type> represents the context type, roughly based on the type of op that
2312 would do the modifying, although C<local()> is represented by OP_NULL,
2313 because it has no op type of its own (it is signalled by a flag on
2314 the lvalue op).
2315
2316 This function detects things that can't be modified, such as C<$x+1>, and
2317 generates errors for them.  For example, C<$x+1 = 2> would cause it to be
2318 called with an op of type OP_ADD and a C<type> argument of OP_SASSIGN.
2319
2320 It also flags things that need to behave specially in an lvalue context,
2321 such as C<$$x = 5> which might have to vivify a reference in C<$x>.
2322
2323 =cut
2324 */
2325
2326 static bool
2327 S_vivifies(const OPCODE type)
2328 {
2329     switch(type) {
2330     case OP_RV2AV:     case   OP_ASLICE:
2331     case OP_RV2HV:     case OP_KVASLICE:
2332     case OP_RV2SV:     case   OP_HSLICE:
2333     case OP_AELEMFAST: case OP_KVHSLICE:
2334     case OP_HELEM:
2335     case OP_AELEM:
2336         return 1;
2337     }
2338     return 0;
2339 }
2340
2341 OP *
2342 Perl_op_lvalue_flags(pTHX_ OP *o, I32 type, U32 flags)
2343 {
2344     dVAR;
2345     OP *kid;
2346     /* -1 = error on localize, 0 = ignore localize, 1 = ok to localize */
2347     int localize = -1;
2348
2349     if (!o || (PL_parser && PL_parser->error_count))
2350         return o;
2351
2352     if ((o->op_private & OPpTARGET_MY)
2353         && (PL_opargs[o->op_type] & OA_TARGLEX))/* OPp share the meaning */
2354     {
2355         return o;
2356     }
2357
2358     assert( (o->op_flags & OPf_WANT) != OPf_WANT_VOID );
2359
2360     if (type == OP_PRTF || type == OP_SPRINTF) type = OP_ENTERSUB;
2361
2362     switch (o->op_type) {
2363     case OP_UNDEF:
2364         PL_modcount++;
2365         return o;
2366     case OP_STUB:
2367         if ((o->op_flags & OPf_PARENS))
2368             break;
2369         goto nomod;
2370     case OP_ENTERSUB:
2371         if ((type == OP_UNDEF || type == OP_REFGEN || type == OP_LOCK) &&
2372             !(o->op_flags & OPf_STACKED)) {
2373             o->op_type = OP_RV2CV;              /* entersub => rv2cv */
2374             /* Both ENTERSUB and RV2CV use this bit, but for different pur-
2375                poses, so we need it clear.  */
2376             o->op_private &= ~1;
2377             o->op_ppaddr = PL_ppaddr[OP_RV2CV];
2378             assert(cUNOPo->op_first->op_type == OP_NULL);
2379             op_null(((LISTOP*)cUNOPo->op_first)->op_first);/* disable pushmark */
2380             break;
2381         }
2382         else {                          /* lvalue subroutine call */
2383             o->op_private |= OPpLVAL_INTRO
2384                            |(OPpENTERSUB_INARGS * (type == OP_LEAVESUBLV));
2385             PL_modcount = RETURN_UNLIMITED_NUMBER;
2386             if (type == OP_GREPSTART || type == OP_ENTERSUB || type == OP_REFGEN) {
2387                 /* Potential lvalue context: */
2388                 o->op_private |= OPpENTERSUB_INARGS;
2389                 break;
2390             }
2391             else {                      /* Compile-time error message: */
2392                 OP *kid = cUNOPo->op_first;
2393                 CV *cv;
2394
2395                 if (kid->op_type != OP_PUSHMARK) {
2396                     if (kid->op_type != OP_NULL || kid->op_targ != OP_LIST)
2397                         Perl_croak(aTHX_
2398                                 "panic: unexpected lvalue entersub "
2399                                 "args: type/targ %ld:%"UVuf,
2400                                 (long)kid->op_type, (UV)kid->op_targ);
2401                     kid = kLISTOP->op_first;
2402                 }
2403                 while (OP_HAS_SIBLING(kid))
2404                     kid = OP_SIBLING(kid);
2405                 if (!(kid->op_type == OP_NULL && kid->op_targ == OP_RV2CV)) {
2406                     break;      /* Postpone until runtime */
2407                 }
2408
2409                 kid = kUNOP->op_first;
2410                 if (kid->op_type == OP_NULL && kid->op_targ == OP_RV2SV)
2411                     kid = kUNOP->op_first;
2412                 if (kid->op_type == OP_NULL)
2413                     Perl_croak(aTHX_
2414                                "Unexpected constant lvalue entersub "
2415                                "entry via type/targ %ld:%"UVuf,
2416                                (long)kid->op_type, (UV)kid->op_targ);
2417                 if (kid->op_type != OP_GV) {
2418                     break;
2419                 }
2420
2421                 cv = GvCV(kGVOP_gv);
2422                 if (!cv)
2423                     break;
2424                 if (CvLVALUE(cv))
2425                     break;
2426             }
2427         }
2428         /* FALLTHROUGH */
2429     default:
2430       nomod:
2431         if (flags & OP_LVALUE_NO_CROAK) return NULL;
2432         /* grep, foreach, subcalls, refgen */
2433         if (type == OP_GREPSTART || type == OP_ENTERSUB
2434          || type == OP_REFGEN    || type == OP_LEAVESUBLV)
2435             break;
2436         yyerror(Perl_form(aTHX_ "Can't modify %s in %s",
2437                      (o->op_type == OP_NULL && (o->op_flags & OPf_SPECIAL)
2438                       ? "do block"
2439                       : (o->op_type == OP_ENTERSUB
2440                         ? "non-lvalue subroutine call"
2441                         : OP_DESC(o))),
2442                      type ? PL_op_desc[type] : "local"));
2443         return o;
2444
2445     case OP_PREINC:
2446     case OP_PREDEC:
2447     case OP_POW:
2448     case OP_MULTIPLY:
2449     case OP_DIVIDE:
2450     case OP_MODULO:
2451     case OP_REPEAT:
2452     case OP_ADD:
2453     case OP_SUBTRACT:
2454     case OP_CONCAT:
2455     case OP_LEFT_SHIFT:
2456     case OP_RIGHT_SHIFT:
2457     case OP_BIT_AND:
2458     case OP_BIT_XOR:
2459     case OP_BIT_OR:
2460     case OP_I_MULTIPLY:
2461     case OP_I_DIVIDE:
2462     case OP_I_MODULO:
2463     case OP_I_ADD:
2464     case OP_I_SUBTRACT:
2465         if (!(o->op_flags & OPf_STACKED))
2466             goto nomod;
2467         PL_modcount++;
2468         break;
2469
2470     case OP_COND_EXPR:
2471         localize = 1;
2472         for (kid = OP_SIBLING(cUNOPo->op_first); kid; kid = OP_SIBLING(kid))
2473             op_lvalue(kid, type);
2474         break;
2475
2476     case OP_RV2AV:
2477     case OP_RV2HV:
2478         if (type == OP_REFGEN && o->op_flags & OPf_PARENS) {
2479            PL_modcount = RETURN_UNLIMITED_NUMBER;
2480             return o;           /* Treat \(@foo) like ordinary list. */
2481         }
2482         /* FALLTHROUGH */
2483     case OP_RV2GV:
2484         if (scalar_mod_type(o, type))
2485             goto nomod;
2486         ref(cUNOPo->op_first, o->op_type);
2487         /* FALLTHROUGH */
2488     case OP_ASLICE:
2489     case OP_HSLICE:
2490         localize = 1;
2491         /* FALLTHROUGH */
2492     case OP_AASSIGN:
2493         /* Do not apply the lvsub flag for rv2[ah]v in scalar context.  */
2494         if (type == OP_LEAVESUBLV && (
2495                 (o->op_type != OP_RV2AV && o->op_type != OP_RV2HV)
2496              || (o->op_flags & OPf_WANT) != OPf_WANT_SCALAR
2497            ))
2498             o->op_private |= OPpMAYBE_LVSUB;
2499         /* FALLTHROUGH */
2500     case OP_NEXTSTATE:
2501     case OP_DBSTATE:
2502        PL_modcount = RETURN_UNLIMITED_NUMBER;
2503         break;
2504     case OP_KVHSLICE:
2505     case OP_KVASLICE:
2506         if (type == OP_LEAVESUBLV)
2507             o->op_private |= OPpMAYBE_LVSUB;
2508         goto nomod;
2509     case OP_AV2ARYLEN:
2510         PL_hints |= HINT_BLOCK_SCOPE;
2511         if (type == OP_LEAVESUBLV)
2512             o->op_private |= OPpMAYBE_LVSUB;
2513         PL_modcount++;
2514         break;
2515     case OP_RV2SV:
2516         ref(cUNOPo->op_first, o->op_type);
2517         localize = 1;
2518         /* FALLTHROUGH */
2519     case OP_GV:
2520         PL_hints |= HINT_BLOCK_SCOPE;
2521         /* FALLTHROUGH */
2522     case OP_SASSIGN:
2523     case OP_ANDASSIGN:
2524     case OP_ORASSIGN:
2525     case OP_DORASSIGN:
2526         PL_modcount++;
2527         break;
2528
2529     case OP_AELEMFAST:
2530     case OP_AELEMFAST_LEX:
2531         localize = -1;
2532         PL_modcount++;
2533         break;
2534
2535     case OP_PADAV:
2536     case OP_PADHV:
2537        PL_modcount = RETURN_UNLIMITED_NUMBER;
2538         if (type == OP_REFGEN && o->op_flags & OPf_PARENS)
2539             return o;           /* Treat \(@foo) like ordinary list. */
2540         if (scalar_mod_type(o, type))
2541             goto nomod;
2542         if ((o->op_flags & OPf_WANT) != OPf_WANT_SCALAR
2543           && type == OP_LEAVESUBLV)
2544             o->op_private |= OPpMAYBE_LVSUB;
2545         /* FALLTHROUGH */
2546     case OP_PADSV:
2547         PL_modcount++;
2548         if (!type) /* local() */
2549             Perl_croak(aTHX_ "Can't localize lexical variable %"SVf,
2550                  PAD_COMPNAME_SV(o->op_targ));
2551         break;
2552
2553     case OP_PUSHMARK:
2554         localize = 0;
2555         break;
2556
2557     case OP_KEYS:
2558     case OP_RKEYS:
2559         if (type != OP_SASSIGN && type != OP_LEAVESUBLV)
2560             goto nomod;
2561         goto lvalue_func;
2562     case OP_SUBSTR:
2563         if (o->op_private == 4) /* don't allow 4 arg substr as lvalue */
2564             goto nomod;
2565         /* FALLTHROUGH */
2566     case OP_POS:
2567     case OP_VEC:
2568       lvalue_func:
2569         if (type == OP_LEAVESUBLV)
2570             o->op_private |= OPpMAYBE_LVSUB;
2571         if (o->op_flags & OPf_KIDS)
2572             op_lvalue(OP_SIBLING(cBINOPo->op_first), type);
2573         break;
2574
2575     case OP_AELEM:
2576     case OP_HELEM:
2577         ref(cBINOPo->op_first, o->op_type);
2578         if (type == OP_ENTERSUB &&
2579              !(o->op_private & (OPpLVAL_INTRO | OPpDEREF)))
2580             o->op_private |= OPpLVAL_DEFER;
2581         if (type == OP_LEAVESUBLV)
2582             o->op_private |= OPpMAYBE_LVSUB;
2583         localize = 1;
2584         PL_modcount++;
2585         break;
2586
2587     case OP_LEAVE:
2588     case OP_LEAVELOOP:
2589         o->op_private |= OPpLVALUE;
2590         /* FALLTHROUGH */
2591     case OP_SCOPE:
2592     case OP_ENTER:
2593     case OP_LINESEQ:
2594         localize = 0;
2595         if (o->op_flags & OPf_KIDS)
2596             op_lvalue(cLISTOPo->op_last, type);
2597         break;
2598
2599     case OP_NULL:
2600         localize = 0;
2601         if (o->op_flags & OPf_SPECIAL)          /* do BLOCK */
2602             goto nomod;
2603         else if (!(o->op_flags & OPf_KIDS))
2604             break;
2605         if (o->op_targ != OP_LIST) {
2606             op_lvalue(cBINOPo->op_first, type);
2607             break;
2608         }
2609         /* FALLTHROUGH */
2610     case OP_LIST:
2611         localize = 0;
2612         for (kid = cLISTOPo->op_first; kid; kid = OP_SIBLING(kid))
2613             /* elements might be in void context because the list is
2614                in scalar context or because they are attribute sub calls */
2615             if ( (kid->op_flags & OPf_WANT) != OPf_WANT_VOID )
2616                 op_lvalue(kid, type);
2617         break;
2618
2619     case OP_RETURN:
2620         if (type != OP_LEAVESUBLV)
2621             goto nomod;
2622         break; /* op_lvalue()ing was handled by ck_return() */
2623
2624     case OP_COREARGS:
2625         return o;
2626
2627     case OP_AND:
2628     case OP_OR:
2629         if (type == OP_LEAVESUBLV
2630          || !S_vivifies(cLOGOPo->op_first->op_type))
2631             op_lvalue(cLOGOPo->op_first, type);
2632         if (type == OP_LEAVESUBLV
2633          || !S_vivifies(OP_SIBLING(cLOGOPo->op_first)->op_type))
2634             op_lvalue(OP_SIBLING(cLOGOPo->op_first), type);
2635         goto nomod;
2636     }
2637
2638     /* [20011101.069] File test operators interpret OPf_REF to mean that
2639        their argument is a filehandle; thus \stat(".") should not set
2640        it. AMS 20011102 */
2641     if (type == OP_REFGEN &&
2642         PL_check[o->op_type] == Perl_ck_ftst)
2643         return o;
2644
2645     if (type != OP_LEAVESUBLV)
2646         o->op_flags |= OPf_MOD;
2647
2648     if (type == OP_AASSIGN || type == OP_SASSIGN)
2649         o->op_flags |= OPf_SPECIAL|OPf_REF;
2650     else if (!type) { /* local() */
2651         switch (localize) {
2652         case 1:
2653             o->op_private |= OPpLVAL_INTRO;
2654             o->op_flags &= ~OPf_SPECIAL;
2655             PL_hints |= HINT_BLOCK_SCOPE;
2656             break;
2657         case 0:
2658             break;
2659         case -1:
2660             Perl_ck_warner(aTHX_ packWARN(WARN_SYNTAX),
2661                            "Useless localization of %s", OP_DESC(o));
2662         }
2663     }
2664     else if (type != OP_GREPSTART && type != OP_ENTERSUB
2665              && type != OP_LEAVESUBLV)
2666         o->op_flags |= OPf_REF;
2667     return o;
2668 }
2669
2670 STATIC bool
2671 S_scalar_mod_type(const OP *o, I32 type)
2672 {
2673     switch (type) {
2674     case OP_POS:
2675     case OP_SASSIGN:
2676         if (o && o->op_type == OP_RV2GV)
2677             return FALSE;
2678         /* FALLTHROUGH */
2679     case OP_PREINC:
2680     case OP_PREDEC:
2681     case OP_POSTINC:
2682     case OP_POSTDEC:
2683     case OP_I_PREINC:
2684     case OP_I_PREDEC:
2685     case OP_I_POSTINC:
2686     case OP_I_POSTDEC:
2687     case OP_POW:
2688     case OP_MULTIPLY:
2689     case OP_DIVIDE:
2690     case OP_MODULO:
2691     case OP_REPEAT:
2692     case OP_ADD:
2693     case OP_SUBTRACT:
2694     case OP_I_MULTIPLY:
2695     case OP_I_DIVIDE:
2696     case OP_I_MODULO:
2697     case OP_I_ADD:
2698     case OP_I_SUBTRACT:
2699     case OP_LEFT_SHIFT:
2700     case OP_RIGHT_SHIFT:
2701     case OP_BIT_AND:
2702     case OP_BIT_XOR:
2703     case OP_BIT_OR:
2704     case OP_CONCAT:
2705     case OP_SUBST:
2706     case OP_TRANS:
2707     case OP_TRANSR:
2708     case OP_READ:
2709     case OP_SYSREAD:
2710     case OP_RECV:
2711     case OP_ANDASSIGN:
2712     case OP_ORASSIGN:
2713     case OP_DORASSIGN:
2714         return TRUE;
2715     default:
2716         return FALSE;
2717     }
2718 }
2719
2720 STATIC bool
2721 S_is_handle_constructor(const OP *o, I32 numargs)
2722 {
2723     PERL_ARGS_ASSERT_IS_HANDLE_CONSTRUCTOR;
2724
2725     switch (o->op_type) {
2726     case OP_PIPE_OP:
2727     case OP_SOCKPAIR:
2728         if (numargs == 2)
2729             return TRUE;
2730         /* FALLTHROUGH */
2731     case OP_SYSOPEN:
2732     case OP_OPEN:
2733     case OP_SELECT:             /* XXX c.f. SelectSaver.pm */
2734     case OP_SOCKET:
2735     case OP_OPEN_DIR:
2736     case OP_ACCEPT:
2737         if (numargs == 1)
2738             return TRUE;
2739         /* FALLTHROUGH */
2740     default:
2741         return FALSE;
2742     }
2743 }
2744
2745 static OP *
2746 S_refkids(pTHX_ OP *o, I32 type)
2747 {
2748     if (o && o->op_flags & OPf_KIDS) {
2749         OP *kid;
2750         for (kid = cLISTOPo->op_first; kid; kid = OP_SIBLING(kid))
2751             ref(kid, type);
2752     }
2753     return o;
2754 }
2755
2756 OP *
2757 Perl_doref(pTHX_ OP *o, I32 type, bool set_op_ref)
2758 {
2759     dVAR;
2760     OP *kid;
2761
2762     PERL_ARGS_ASSERT_DOREF;
2763
2764     if (!o || (PL_parser && PL_parser->error_count))
2765         return o;
2766
2767     switch (o->op_type) {
2768     case OP_ENTERSUB:
2769         if ((type == OP_EXISTS || type == OP_DEFINED) &&
2770             !(o->op_flags & OPf_STACKED)) {
2771             o->op_type = OP_RV2CV;             /* entersub => rv2cv */
2772             o->op_ppaddr = PL_ppaddr[OP_RV2CV];
2773             assert(cUNOPo->op_first->op_type == OP_NULL);
2774             op_null(((LISTOP*)cUNOPo->op_first)->op_first);     /* disable pushmark */
2775             o->op_flags |= OPf_SPECIAL;
2776             o->op_private &= ~1;
2777         }
2778         else if (type == OP_RV2SV || type == OP_RV2AV || type == OP_RV2HV){
2779             o->op_private |= (type == OP_RV2AV ? OPpDEREF_AV
2780                               : type == OP_RV2HV ? OPpDEREF_HV
2781                               : OPpDEREF_SV);
2782             o->op_flags |= OPf_MOD;
2783         }
2784
2785         break;
2786
2787     case OP_COND_EXPR:
2788         for (kid = OP_SIBLING(cUNOPo->op_first); kid; kid = OP_SIBLING(kid))
2789             doref(kid, type, set_op_ref);
2790         break;
2791     case OP_RV2SV:
2792         if (type == OP_DEFINED)
2793             o->op_flags |= OPf_SPECIAL;         /* don't create GV */
2794         doref(cUNOPo->op_first, o->op_type, set_op_ref);
2795         /* FALLTHROUGH */
2796     case OP_PADSV:
2797         if (type == OP_RV2SV || type == OP_RV2AV || type == OP_RV2HV) {
2798             o->op_private |= (type == OP_RV2AV ? OPpDEREF_AV
2799                               : type == OP_RV2HV ? OPpDEREF_HV
2800                               : OPpDEREF_SV);
2801             o->op_flags |= OPf_MOD;
2802         }
2803         break;
2804
2805     case OP_RV2AV:
2806     case OP_RV2HV:
2807         if (set_op_ref)
2808             o->op_flags |= OPf_REF;
2809         /* FALLTHROUGH */
2810     case OP_RV2GV:
2811         if (type == OP_DEFINED)
2812             o->op_flags |= OPf_SPECIAL;         /* don't create GV */
2813         doref(cUNOPo->op_first, o->op_type, set_op_ref);
2814         break;
2815
2816     case OP_PADAV:
2817     case OP_PADHV:
2818         if (set_op_ref)
2819             o->op_flags |= OPf_REF;
2820         break;
2821
2822     case OP_SCALAR:
2823     case OP_NULL:
2824         if (!(o->op_flags & OPf_KIDS) || type == OP_DEFINED)
2825             break;
2826         doref(cBINOPo->op_first, type, set_op_ref);
2827         break;
2828     case OP_AELEM:
2829     case OP_HELEM:
2830         doref(cBINOPo->op_first, o->op_type, set_op_ref);
2831         if (type == OP_RV2SV || type == OP_RV2AV || type == OP_RV2HV) {
2832             o->op_private |= (type == OP_RV2AV ? OPpDEREF_AV
2833                               : type == OP_RV2HV ? OPpDEREF_HV
2834                               : OPpDEREF_SV);
2835             o->op_flags |= OPf_MOD;
2836         }
2837         break;
2838
2839     case OP_SCOPE:
2840     case OP_LEAVE:
2841         set_op_ref = FALSE;
2842         /* FALLTHROUGH */
2843     case OP_ENTER:
2844     case OP_LIST:
2845         if (!(o->op_flags & OPf_KIDS))
2846             break;
2847         doref(cLISTOPo->op_last, type, set_op_ref);
2848         break;
2849     default:
2850         break;
2851     }
2852     return scalar(o);
2853
2854 }
2855
2856 STATIC OP *
2857 S_dup_attrlist(pTHX_ OP *o)
2858 {
2859     OP *rop;
2860
2861     PERL_ARGS_ASSERT_DUP_ATTRLIST;
2862
2863     /* An attrlist is either a simple OP_CONST or an OP_LIST with kids,
2864      * where the first kid is OP_PUSHMARK and the remaining ones
2865      * are OP_CONST.  We need to push the OP_CONST values.
2866      */
2867     if (o->op_type == OP_CONST)
2868         rop = newSVOP(OP_CONST, o->op_flags, SvREFCNT_inc_NN(cSVOPo->op_sv));
2869     else {
2870         assert((o->op_type == OP_LIST) && (o->op_flags & OPf_KIDS));
2871         rop = NULL;
2872         for (o = cLISTOPo->op_first; o; o = OP_SIBLING(o)) {
2873             if (o->op_type == OP_CONST)
2874                 rop = op_append_elem(OP_LIST, rop,
2875                                   newSVOP(OP_CONST, o->op_flags,
2876                                           SvREFCNT_inc_NN(cSVOPo->op_sv)));
2877         }
2878     }
2879     return rop;
2880 }
2881
2882 STATIC void
2883 S_apply_attrs(pTHX_ HV *stash, SV *target, OP *attrs)
2884 {
2885     SV * const stashsv = stash ? newSVhek(HvNAME_HEK(stash)) : &PL_sv_no;
2886
2887     PERL_ARGS_ASSERT_APPLY_ATTRS;
2888
2889     /* fake up C<use attributes $pkg,$rv,@attrs> */
2890
2891 #define ATTRSMODULE "attributes"
2892 #define ATTRSMODULE_PM "attributes.pm"
2893
2894     Perl_load_module(aTHX_ PERL_LOADMOD_IMPORT_OPS,
2895                          newSVpvs(ATTRSMODULE),
2896                          NULL,
2897                          op_prepend_elem(OP_LIST,
2898                                       newSVOP(OP_CONST, 0, stashsv),
2899                                       op_prepend_elem(OP_LIST,
2900                                                    newSVOP(OP_CONST, 0,
2901                                                            newRV(target)),
2902                                                    dup_attrlist(attrs))));
2903 }
2904
2905 STATIC void
2906 S_apply_attrs_my(pTHX_ HV *stash, OP *target, OP *attrs, OP **imopsp)
2907 {
2908     OP *pack, *imop, *arg;
2909     SV *meth, *stashsv, **svp;
2910
2911     PERL_ARGS_ASSERT_APPLY_ATTRS_MY;
2912
2913     if (!attrs)
2914         return;
2915
2916     assert(target->op_type == OP_PADSV ||
2917            target->op_type == OP_PADHV ||
2918            target->op_type == OP_PADAV);
2919
2920     /* Ensure that attributes.pm is loaded. */
2921     /* Don't force the C<use> if we don't need it. */
2922     svp = hv_fetchs(GvHVn(PL_incgv), ATTRSMODULE_PM, FALSE);
2923     if (svp && *svp != &PL_sv_undef)
2924         NOOP;   /* already in %INC */
2925     else
2926         Perl_load_module(aTHX_ PERL_LOADMOD_NOIMPORT,
2927                                newSVpvs(ATTRSMODULE), NULL);
2928
2929     /* Need package name for method call. */
2930     pack = newSVOP(OP_CONST, 0, newSVpvs(ATTRSMODULE));
2931
2932     /* Build up the real arg-list. */
2933     stashsv = stash ? newSVhek(HvNAME_HEK(stash)) : &PL_sv_no;
2934
2935     arg = newOP(OP_PADSV, 0);
2936     arg->op_targ = target->op_targ;
2937     arg = op_prepend_elem(OP_LIST,
2938                        newSVOP(OP_CONST, 0, stashsv),
2939                        op_prepend_elem(OP_LIST,
2940                                     newUNOP(OP_REFGEN, 0,
2941                                             op_lvalue(arg, OP_REFGEN)),
2942                                     dup_attrlist(attrs)));
2943
2944     /* Fake up a method call to import */
2945     meth = newSVpvs_share("import");
2946     imop = convert(OP_ENTERSUB, OPf_STACKED|OPf_SPECIAL|OPf_WANT_VOID,
2947                    op_append_elem(OP_LIST,
2948                                op_prepend_elem(OP_LIST, pack, list(arg)),
2949                                newSVOP(OP_METHOD_NAMED, 0, meth)));
2950
2951     /* Combine the ops. */
2952     *imopsp = op_append_elem(OP_LIST, *imopsp, imop);
2953 }
2954
2955 /*
2956 =notfor apidoc apply_attrs_string
2957
2958 Attempts to apply a list of attributes specified by the C<attrstr> and
2959 C<len> arguments to the subroutine identified by the C<cv> argument which
2960 is expected to be associated with the package identified by the C<stashpv>
2961 argument (see L<attributes>).  It gets this wrong, though, in that it
2962 does not correctly identify the boundaries of the individual attribute
2963 specifications within C<attrstr>.  This is not really intended for the
2964 public API, but has to be listed here for systems such as AIX which
2965 need an explicit export list for symbols.  (It's called from XS code
2966 in support of the C<ATTRS:> keyword from F<xsubpp>.)  Patches to fix it
2967 to respect attribute syntax properly would be welcome.
2968
2969 =cut
2970 */
2971
2972 void
2973 Perl_apply_attrs_string(pTHX_ const char *stashpv, CV *cv,
2974                         const char *attrstr, STRLEN len)
2975 {
2976     OP *attrs = NULL;
2977
2978     PERL_ARGS_ASSERT_APPLY_ATTRS_STRING;
2979
2980     if (!len) {
2981         len = strlen(attrstr);
2982     }
2983
2984     while (len) {
2985         for (; isSPACE(*attrstr) && len; --len, ++attrstr) ;
2986         if (len) {
2987             const char * const sstr = attrstr;
2988             for (; !isSPACE(*attrstr) && len; --len, ++attrstr) ;
2989             attrs = op_append_elem(OP_LIST, attrs,
2990                                 newSVOP(OP_CONST, 0,
2991                                         newSVpvn(sstr, attrstr-sstr)));
2992         }
2993     }
2994
2995     Perl_load_module(aTHX_ PERL_LOADMOD_IMPORT_OPS,
2996                      newSVpvs(ATTRSMODULE),
2997                      NULL, op_prepend_elem(OP_LIST,
2998                                   newSVOP(OP_CONST, 0, newSVpv(stashpv,0)),
2999                                   op_prepend_elem(OP_LIST,
3000                                                newSVOP(OP_CONST, 0,
3001                                                        newRV(MUTABLE_SV(cv))),
3002                                                attrs)));
3003 }
3004
3005 STATIC void
3006 S_move_proto_attr(pTHX_ OP **proto, OP **attrs, const GV * name)
3007 {
3008     OP *new_proto = NULL;
3009     STRLEN pvlen;
3010     char *pv;
3011     OP *o;
3012
3013     PERL_ARGS_ASSERT_MOVE_PROTO_ATTR;
3014
3015     if (!*attrs)
3016         return;
3017
3018     o = *attrs;
3019     if (o->op_type == OP_CONST) {
3020         pv = SvPV(cSVOPo_sv, pvlen);
3021         if (pvlen >= 10 && memEQ(pv, "prototype(", 10)) {
3022             SV * const tmpsv = newSVpvn_flags(pv + 10, pvlen - 11, SvUTF8(cSVOPo_sv));
3023             SV ** const tmpo = cSVOPx_svp(o);
3024             SvREFCNT_dec(cSVOPo_sv);
3025             *tmpo = tmpsv;
3026             new_proto = o;
3027             *attrs = NULL;
3028         }
3029     } else if (o->op_type == OP_LIST) {
3030         OP * lasto;
3031         assert(o->op_flags & OPf_KIDS);
3032         lasto = cLISTOPo->op_first;
3033         assert(lasto->op_type == OP_PUSHMARK);
3034         for (o = OP_SIBLING(lasto); o; o = OP_SIBLING(o)) {
3035             if (o->op_type == OP_CONST) {
3036                 pv = SvPV(cSVOPo_sv, pvlen);
3037                 if (pvlen >= 10 && memEQ(pv, "prototype(", 10)) {
3038                     SV * const tmpsv = newSVpvn_flags(pv + 10, pvlen - 11, SvUTF8(cSVOPo_sv));
3039                     SV ** const tmpo = cSVOPx_svp(o);
3040                     SvREFCNT_dec(cSVOPo_sv);
3041                     *tmpo = tmpsv;
3042                     if (new_proto && ckWARN(WARN_MISC)) {
3043                         STRLEN new_len;
3044                         const char * newp = SvPV(cSVOPo_sv, new_len);
3045                         Perl_warner(aTHX_ packWARN(WARN_MISC),
3046                             "Attribute prototype(%"UTF8f") discards earlier prototype attribute in same sub",
3047                             UTF8fARG(SvUTF8(cSVOPo_sv), new_len, newp));
3048                         op_free(new_proto);
3049                     }
3050                     else if (new_proto)
3051                         op_free(new_proto);
3052                     new_proto = o;
3053                     /* excise new_proto from the list */
3054                     op_sibling_splice(*attrs, lasto, 1, NULL);
3055                     o = lasto;
3056                     continue;
3057                 }
3058             }
3059             lasto = o;
3060         }
3061         /* If the list is now just the PUSHMARK, scrap the whole thing; otherwise attributes.xs
3062            would get pulled in with no real need */
3063         if (!OP_HAS_SIBLING(cLISTOPx(*attrs)->op_first)) {
3064             op_free(*attrs);
3065             *attrs = NULL;
3066         }
3067     }
3068
3069     if (new_proto) {
3070         SV *svname;
3071         if (isGV(name)) {
3072             svname = sv_newmortal();
3073             gv_efullname3(svname, name, NULL);
3074         }
3075         else if (SvPOK(name) && *SvPVX((SV *)name) == '&')
3076             svname = newSVpvn_flags(SvPVX((SV *)name)+1, SvCUR(name)-1, SvUTF8(name)|SVs_TEMP);
3077         else
3078             svname = (SV *)name;
3079         if (ckWARN(WARN_ILLEGALPROTO))
3080             (void)validate_proto(svname, cSVOPx_sv(new_proto), TRUE);
3081         if (*proto && ckWARN(WARN_PROTOTYPE)) {
3082             STRLEN old_len, new_len;
3083             const char * oldp = SvPV(cSVOPx_sv(*proto), old_len);
3084             const char * newp = SvPV(cSVOPx_sv(new_proto), new_len);
3085
3086             Perl_warner(aTHX_ packWARN(WARN_PROTOTYPE),
3087                 "Prototype '%"UTF8f"' overridden by attribute 'prototype(%"UTF8f")'"
3088                 " in %"SVf,
3089                 UTF8fARG(SvUTF8(cSVOPx_sv(*proto)), old_len, oldp),
3090                 UTF8fARG(SvUTF8(cSVOPx_sv(new_proto)), new_len, newp),
3091                 SVfARG(svname));
3092         }
3093         if (*proto)
3094             op_free(*proto);
3095         *proto = new_proto;
3096     }
3097 }
3098
3099 static void
3100 S_cant_declare(pTHX_ OP *o)
3101 {
3102     if (o->op_type == OP_NULL
3103      && (o->op_flags & (OPf_SPECIAL|OPf_KIDS)) == OPf_KIDS)
3104         o = cUNOPo->op_first;
3105     yyerror(Perl_form(aTHX_ "Can't declare %s in \"%s\"",
3106                              o->op_type == OP_NULL
3107                                && o->op_flags & OPf_SPECIAL
3108                                  ? "do block"
3109                                  : OP_DESC(o),
3110                              PL_parser->in_my == KEY_our   ? "our"   :
3111                              PL_parser->in_my == KEY_state ? "state" :
3112                                                              "my"));
3113 }
3114
3115 STATIC OP *
3116 S_my_kid(pTHX_ OP *o, OP *attrs, OP **imopsp)
3117 {
3118     I32 type;
3119     const bool stately = PL_parser && PL_parser->in_my == KEY_state;
3120
3121     PERL_ARGS_ASSERT_MY_KID;
3122
3123     if (!o || (PL_parser && PL_parser->error_count))
3124         return o;
3125
3126     type = o->op_type;
3127
3128     if (type == OP_LIST) {
3129         OP *kid;
3130         for (kid = cLISTOPo->op_first; kid; kid = OP_SIBLING(kid))
3131             my_kid(kid, attrs, imopsp);
3132         return o;
3133     } else if (type == OP_UNDEF || type == OP_STUB) {
3134         return o;
3135     } else if (type == OP_RV2SV ||      /* "our" declaration */
3136                type == OP_RV2AV ||
3137                type == OP_RV2HV) { /* XXX does this let anything illegal in? */
3138         if (cUNOPo->op_first->op_type != OP_GV) { /* MJD 20011224 */
3139             S_cant_declare(aTHX_ o);
3140         } else if (attrs) {
3141             GV * const gv = cGVOPx_gv(cUNOPo->op_first);
3142             assert(PL_parser);
3143             PL_parser->in_my = FALSE;
3144             PL_parser->in_my_stash = NULL;
3145             apply_attrs(GvSTASH(gv),
3146                         (type == OP_RV2SV ? GvSV(gv) :
3147                          type == OP_RV2AV ? MUTABLE_SV(GvAV(gv)) :
3148                          type == OP_RV2HV ? MUTABLE_SV(GvHV(gv)) : MUTABLE_SV(gv)),
3149                         attrs);
3150         }
3151         o->op_private |= OPpOUR_INTRO;
3152         return o;
3153     }
3154     else if (type != OP_PADSV &&
3155              type != OP_PADAV &&
3156              type != OP_PADHV &&
3157              type != OP_PUSHMARK)
3158     {
3159         S_cant_declare(aTHX_ o);
3160         return o;
3161     }
3162     else if (attrs && type != OP_PUSHMARK) {
3163         HV *stash;
3164
3165         assert(PL_parser);
3166         PL_parser->in_my = FALSE;
3167         PL_parser->in_my_stash = NULL;
3168
3169         /* check for C<my Dog $spot> when deciding package */
3170         stash = PAD_COMPNAME_TYPE(o->op_targ);
3171         if (!stash)
3172             stash = PL_curstash;
3173         apply_attrs_my(stash, o, attrs, imopsp);
3174     }
3175     o->op_flags |= OPf_MOD;
3176     o->op_private |= OPpLVAL_INTRO;
3177     if (stately)
3178         o->op_private |= OPpPAD_STATE;
3179     return o;
3180 }
3181
3182 OP *
3183 Perl_my_attrs(pTHX_ OP *o, OP *attrs)
3184 {
3185     OP *rops;
3186     int maybe_scalar = 0;
3187
3188     PERL_ARGS_ASSERT_MY_ATTRS;
3189
3190 /* [perl #17376]: this appears to be premature, and results in code such as
3191    C< our(%x); > executing in list mode rather than void mode */
3192 #if 0
3193     if (o->op_flags & OPf_PARENS)
3194         list(o);
3195     else
3196         maybe_scalar = 1;
3197 #else
3198     maybe_scalar = 1;
3199 #endif
3200     if (attrs)
3201         SAVEFREEOP(attrs);
3202     rops = NULL;
3203     o = my_kid(o, attrs, &rops);
3204     if (rops) {
3205         if (maybe_scalar && o->op_type == OP_PADSV) {
3206             o = scalar(op_append_list(OP_LIST, rops, o));
3207             o->op_private |= OPpLVAL_INTRO;
3208         }
3209         else {
3210             /* The listop in rops might have a pushmark at the beginning,
3211                which will mess up list assignment. */
3212             LISTOP * const lrops = (LISTOP *)rops; /* for brevity */
3213             if (rops->op_type == OP_LIST && 
3214                 lrops->op_first && lrops->op_first->op_type == OP_PUSHMARK)
3215             {
3216                 OP * const pushmark = lrops->op_first;
3217                 /* excise pushmark */
3218                 op_sibling_splice(rops, NULL, 1, NULL);
3219                 op_free(pushmark);
3220             }
3221             o = op_append_list(OP_LIST, o, rops);
3222         }
3223     }
3224     PL_parser->in_my = FALSE;
3225     PL_parser->in_my_stash = NULL;
3226     return o;
3227 }
3228
3229 OP *
3230 Perl_sawparens(pTHX_ OP *o)
3231 {
3232     PERL_UNUSED_CONTEXT;
3233     if (o)
3234         o->op_flags |= OPf_PARENS;
3235     return o;
3236 }
3237
3238 OP *
3239 Perl_bind_match(pTHX_ I32 type, OP *left, OP *right)
3240 {
3241     OP *o;
3242     bool ismatchop = 0;
3243     const OPCODE ltype = left->op_type;
3244     const OPCODE rtype = right->op_type;
3245
3246     PERL_ARGS_ASSERT_BIND_MATCH;
3247
3248     if ( (ltype == OP_RV2AV || ltype == OP_RV2HV || ltype == OP_PADAV
3249           || ltype == OP_PADHV) && ckWARN(WARN_MISC))
3250     {
3251       const char * const desc
3252           = PL_op_desc[(
3253                           rtype == OP_SUBST || rtype == OP_TRANS
3254                        || rtype == OP_TRANSR
3255                        )
3256                        ? (int)rtype : OP_MATCH];
3257       const bool isary = ltype == OP_RV2AV || ltype == OP_PADAV;
3258       SV * const name =
3259         S_op_varname(aTHX_ left);
3260       if (name)
3261         Perl_warner(aTHX_ packWARN(WARN_MISC),
3262              "Applying %s to %"SVf" will act on scalar(%"SVf")",
3263              desc, SVfARG(name), SVfARG(name));
3264       else {
3265         const char * const sample = (isary
3266              ? "@array" : "%hash");
3267         Perl_warner(aTHX_ packWARN(WARN_MISC),
3268              "Applying %s to %s will act on scalar(%s)",
3269              desc, sample, sample);
3270       }
3271     }
3272
3273     if (rtype == OP_CONST &&
3274         cSVOPx(right)->op_private & OPpCONST_BARE &&
3275         cSVOPx(right)->op_private & OPpCONST_STRICT)
3276     {
3277         no_bareword_allowed(right);
3278     }
3279
3280     /* !~ doesn't make sense with /r, so error on it for now */
3281     if (rtype == OP_SUBST && (cPMOPx(right)->op_pmflags & PMf_NONDESTRUCT) &&
3282         type == OP_NOT)
3283         /* diag_listed_as: Using !~ with %s doesn't make sense */
3284         yyerror("Using !~ with s///r doesn't make sense");
3285     if (rtype == OP_TRANSR && type == OP_NOT)
3286         /* diag_listed_as: Using !~ with %s doesn't make sense */
3287         yyerror("Using !~ with tr///r doesn't make sense");
3288
3289     ismatchop = (rtype == OP_MATCH ||
3290                  rtype == OP_SUBST ||
3291                  rtype == OP_TRANS || rtype == OP_TRANSR)
3292              && !(right->op_flags & OPf_SPECIAL);
3293     if (ismatchop && right->op_private & OPpTARGET_MY) {
3294         right->op_targ = 0;
3295         right->op_private &= ~OPpTARGET_MY;
3296     }
3297     if (!(right->op_flags & OPf_STACKED) && ismatchop) {
3298         OP *newleft;
3299
3300         right->op_flags |= OPf_STACKED;
3301         if (rtype != OP_MATCH && rtype != OP_TRANSR &&
3302             ! (rtype == OP_TRANS &&
3303                right->op_private & OPpTRANS_IDENTICAL) &&
3304             ! (rtype == OP_SUBST &&
3305                (cPMOPx(right)->op_pmflags & PMf_NONDESTRUCT)))
3306             newleft = op_lvalue(left, rtype);
3307         else
3308             newleft = left;
3309         if (right->op_type == OP_TRANS || right->op_type == OP_TRANSR)
3310             o = newBINOP(OP_NULL, OPf_STACKED, scalar(newleft), right);
3311         else
3312             o = op_prepend_elem(rtype, scalar(newleft), right);
3313         if (type == OP_NOT)
3314             return newUNOP(OP_NOT, 0, scalar(o));
3315         return o;
3316     }
3317     else
3318         return bind_match(type, left,
3319                 pmruntime(newPMOP(OP_MATCH, 0), right, 0, 0));
3320 }
3321
3322 OP *
3323 Perl_invert(pTHX_ OP *o)
3324 {
3325     if (!o)
3326         return NULL;
3327     return newUNOP(OP_NOT, OPf_SPECIAL, scalar(o));
3328 }
3329
3330 /*
3331 =for apidoc Amx|OP *|op_scope|OP *o
3332
3333 Wraps up an op tree with some additional ops so that at runtime a dynamic
3334 scope will be created.  The original ops run in the new dynamic scope,
3335 and then, provided that they exit normally, the scope will be unwound.
3336 The additional ops used to create and unwind the dynamic scope will
3337 normally be an C<enter>/C<leave> pair, but a C<scope> op may be used
3338 instead if the ops are simple enough to not need the full dynamic scope
3339 structure.
3340
3341 =cut
3342 */
3343
3344 OP *
3345 Perl_op_scope(pTHX_ OP *o)
3346 {
3347     dVAR;
3348     if (o) {
3349         if (o->op_flags & OPf_PARENS || PERLDB_NOOPT || TAINTING_get) {
3350             o = op_prepend_elem(OP_LINESEQ, newOP(OP_ENTER, 0), o);
3351             o->op_type = OP_LEAVE;
3352             o->op_ppaddr = PL_ppaddr[OP_LEAVE];
3353         }
3354         else if (o->op_type == OP_LINESEQ) {
3355             OP *kid;
3356             o->op_type = OP_SCOPE;
3357             o->op_ppaddr = PL_ppaddr[OP_SCOPE];
3358             kid = ((LISTOP*)o)->op_first;
3359             if (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) {
3360                 op_null(kid);
3361
3362                 /* The following deals with things like 'do {1 for 1}' */
3363                 kid = OP_SIBLING(kid);
3364                 if (kid &&
3365                     (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE))
3366                     op_null(kid);
3367             }
3368         }
3369         else
3370             o = newLISTOP(OP_SCOPE, 0, o, NULL);
3371     }
3372     return o;
3373 }
3374
3375 OP *
3376 Perl_op_unscope(pTHX_ OP *o)
3377 {
3378     if (o && o->op_type == OP_LINESEQ) {
3379         OP *kid = cLISTOPo->op_first;
3380         for(; kid; kid = OP_SIBLING(kid))
3381             if (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE)
3382                 op_null(kid);
3383     }
3384     return o;
3385 }
3386
3387 int
3388 Perl_block_start(pTHX_ int full)
3389 {
3390     const int retval = PL_savestack_ix;
3391
3392     pad_block_start(full);
3393     SAVEHINTS();
3394     PL_hints &= ~HINT_BLOCK_SCOPE;
3395     SAVECOMPILEWARNINGS();
3396     PL_compiling.cop_warnings = DUP_WARNINGS(PL_compiling.cop_warnings);
3397
3398     CALL_BLOCK_HOOKS(bhk_start, full);
3399
3400     return retval;
3401 }
3402
3403 OP*
3404 Perl_block_end(pTHX_ I32 floor, OP *seq)
3405 {
3406     const int needblockscope = PL_hints & HINT_BLOCK_SCOPE;
3407     OP* retval = scalarseq(seq);
3408     OP *o;
3409
3410     CALL_BLOCK_HOOKS(bhk_pre_end, &retval);
3411
3412     LEAVE_SCOPE(floor);
3413     if (needblockscope)
3414         PL_hints |= HINT_BLOCK_SCOPE; /* propagate out */
3415     o = pad_leavemy();
3416
3417     if (o) {
3418         /* pad_leavemy has created a sequence of introcv ops for all my
3419            subs declared in the block.  We have to replicate that list with
3420            clonecv ops, to deal with this situation:
3421
3422                sub {
3423                    my sub s1;
3424                    my sub s2;
3425                    sub s1 { state sub foo { \&s2 } }
3426                }->()
3427
3428            Originally, I was going to have introcv clone the CV and turn
3429            off the stale flag.  Since &s1 is declared before &s2, the
3430            introcv op for &s1 is executed (on sub entry) before the one for
3431            &s2.  But the &foo sub inside &s1 (which is cloned when &s1 is
3432            cloned, since it is a state sub) closes over &s2 and expects
3433            to see it in its outer CV’s pad.  If the introcv op clones &s1,
3434            then &s2 is still marked stale.  Since &s1 is not active, and
3435            &foo closes over &s1’s implicit entry for &s2, we get a â€˜Varia-
3436            ble will not stay shared’ warning.  Because it is the same stub
3437            that will be used when the introcv op for &s2 is executed, clos-
3438            ing over it is safe.  Hence, we have to turn off the stale flag
3439            on all lexical subs in the block before we clone any of them.
3440            Hence, having introcv clone the sub cannot work.  So we create a
3441            list of ops like this:
3442
3443                lineseq
3444                   |
3445                   +-- introcv
3446                   |
3447                   +-- introcv
3448                   |
3449                   +-- introcv
3450                   |
3451                   .
3452                   .
3453                   .
3454                   |
3455                   +-- clonecv
3456                   |
3457                   +-- clonecv
3458                   |
3459                   +-- clonecv
3460                   |
3461                   .
3462                   .
3463                   .
3464          */
3465         OP *kid = o->op_flags & OPf_KIDS ? cLISTOPo->op_first : o;
3466         OP * const last = o->op_flags & OPf_KIDS ? cLISTOPo->op_last : o;
3467         for (;; kid = OP_SIBLING(kid)) {
3468             OP *newkid = newOP(OP_CLONECV, 0);
3469             newkid->op_targ = kid->op_targ;
3470             o = op_append_elem(OP_LINESEQ, o, newkid);
3471             if (kid == last) break;
3472         }
3473         retval = op_prepend_elem(OP_LINESEQ, o, retval);
3474     }
3475
3476     CALL_BLOCK_HOOKS(bhk_post_end, &retval);
3477
3478     return retval;
3479 }
3480
3481 /*
3482 =head1 Compile-time scope hooks
3483
3484 =for apidoc Aox||blockhook_register
3485
3486 Register a set of hooks to be called when the Perl lexical scope changes
3487 at compile time.  See L<perlguts/"Compile-time scope hooks">.
3488
3489 =cut
3490 */
3491
3492 void
3493 Perl_blockhook_register(pTHX_ BHK *hk)
3494 {
3495     PERL_ARGS_ASSERT_BLOCKHOOK_REGISTER;
3496
3497     Perl_av_create_and_push(aTHX_ &PL_blockhooks, newSViv(PTR2IV(hk)));
3498 }
3499
3500 STATIC OP *
3501 S_newDEFSVOP(pTHX)
3502 {
3503     const PADOFFSET offset = pad_findmy_pvs("$_", 0);
3504     if (offset == NOT_IN_PAD || PAD_COMPNAME_FLAGS_isOUR(offset)) {
3505         return newSVREF(newGVOP(OP_GV, 0, PL_defgv));
3506     }
3507     else {
3508         OP * const o = newOP(OP_PADSV, 0);
3509         o->op_targ = offset;
3510         return o;
3511     }
3512 }
3513
3514 void
3515 Perl_newPROG(pTHX_ OP *o)
3516 {
3517     PERL_ARGS_ASSERT_NEWPROG;
3518
3519     if (PL_in_eval) {
3520         PERL_CONTEXT *cx;
3521         I32 i;
3522         if (PL_eval_root)
3523                 return;
3524         PL_eval_root = newUNOP(OP_LEAVEEVAL,
3525                                ((PL_in_eval & EVAL_KEEPERR)
3526                                 ? OPf_SPECIAL : 0), o);
3527
3528         cx = &cxstack[cxstack_ix];
3529         assert(CxTYPE(cx) == CXt_EVAL);
3530
3531         if ((cx->blk_gimme & G_WANT) == G_VOID)
3532             scalarvoid(PL_eval_root);
3533         else if ((cx->blk_gimme & G_WANT) == G_ARRAY)
3534             list(PL_eval_root);
3535         else
3536             scalar(PL_eval_root);
3537
3538         PL_eval_start = op_linklist(PL_eval_root);
3539         PL_eval_root->op_private |= OPpREFCOUNTED;
3540         OpREFCNT_set(PL_eval_root, 1);
3541         PL_eval_root->op_next = 0;
3542         i = PL_savestack_ix;
3543         SAVEFREEOP(o);
3544         ENTER;
3545         CALL_PEEP(PL_eval_start);
3546         finalize_optree(PL_eval_root);
3547         S_prune_chain_head(&PL_eval_start);
3548         LEAVE;
3549         PL_savestack_ix = i;
3550     }
3551     else {
3552         if (o->op_type == OP_STUB) {
3553             /* This block is entered if nothing is compiled for the main
3554                program. This will be the case for an genuinely empty main
3555                program, or one which only has BEGIN blocks etc, so already
3556                run and freed.
3557
3558                Historically (5.000) the guard above was !o. However, commit
3559                f8a08f7b8bd67b28 (Jun 2001), integrated to blead as
3560                c71fccf11fde0068, changed perly.y so that newPROG() is now
3561                called with the output of block_end(), which returns a new
3562                OP_STUB for the case of an empty optree. ByteLoader (and
3563                maybe other things) also take this path, because they set up
3564                PL_main_start and PL_main_root directly, without generating an
3565                optree.
3566
3567                If the parsing the main program aborts (due to parse errors,
3568                or due to BEGIN or similar calling exit), then newPROG()
3569                isn't even called, and hence this code path and its cleanups
3570                are skipped. This shouldn't make a make a difference:
3571                * a non-zero return from perl_parse is a failure, and
3572                  perl_destruct() should be called immediately.
3573                * however, if exit(0) is called during the parse, then
3574                  perl_parse() returns 0, and perl_run() is called. As
3575                  PL_main_start will be NULL, perl_run() will return
3576                  promptly, and the exit code will remain 0.
3577             */
3578
3579             PL_comppad_name = 0;
3580             PL_compcv = 0;
3581             S_op_destroy(aTHX_ o);
3582             return;
3583         }
3584         PL_main_root = op_scope(sawparens(scalarvoid(o)));
3585         PL_curcop = &PL_compiling;
3586         PL_main_start = LINKLIST(PL_main_root);
3587         PL_main_root->op_private |= OPpREFCOUNTED;
3588         OpREFCNT_set(PL_main_root, 1);
3589         PL_main_root->op_next = 0;
3590         CALL_PEEP(PL_main_start);
3591         finalize_optree(PL_main_root);
3592         S_prune_chain_head(&PL_main_start);
3593         cv_forget_slab(PL_compcv);
3594         PL_compcv = 0;
3595
3596         /* Register with debugger */
3597         if (PERLDB_INTER) {
3598             CV * const cv = get_cvs("DB::postponed", 0);
3599             if (cv) {
3600                 dSP;
3601                 PUSHMARK(SP);
3602                 XPUSHs(MUTABLE_SV(CopFILEGV(&PL_compiling)));
3603                 PUTBACK;
3604                 call_sv(MUTABLE_SV(cv), G_DISCARD);
3605             }
3606         }
3607     }
3608 }
3609
3610 OP *
3611 Perl_localize(pTHX_ OP *o, I32 lex)
3612 {
3613     PERL_ARGS_ASSERT_LOCALIZE;
3614
3615     if (o->op_flags & OPf_PARENS)
3616 /* [perl #17376]: this appears to be premature, and results in code such as
3617    C< our(%x); > executing in list mode rather than void mode */
3618 #if 0
3619         list(o);
3620 #else
3621         NOOP;
3622 #endif
3623     else {
3624         if ( PL_parser->bufptr > PL_parser->oldbufptr
3625             && PL_parser->bufptr[-1] == ','
3626             && ckWARN(WARN_PARENTHESIS))
3627         {
3628             char *s = PL_parser->bufptr;
3629             bool sigil = FALSE;
3630
3631             /* some heuristics to detect a potential error */
3632             while (*s && (strchr(", \t\n", *s)))
3633                 s++;
3634
3635             while (1) {
3636                 if (*s && strchr("@$%*", *s) && *++s
3637                        && (isWORDCHAR(*s) || UTF8_IS_CONTINUED(*s))) {
3638                     s++;
3639                     sigil = TRUE;
3640                     while (*s && (isWORDCHAR(*s) || UTF8_IS_CONTINUED(*s)))
3641                         s++;
3642                     while (*s && (strchr(", \t\n", *s)))
3643                         s++;
3644                 }
3645                 else
3646                     break;
3647             }
3648             if (sigil && (*s == ';' || *s == '=')) {
3649                 Perl_warner(aTHX_ packWARN(WARN_PARENTHESIS),
3650                                 "Parentheses missing around \"%s\" list",
3651                                 lex
3652                                     ? (PL_parser->in_my == KEY_our
3653                                         ? "our"
3654                                         : PL_parser->in_my == KEY_state
3655                                             ? "state"
3656                                             : "my")
3657                                     : "local");
3658             }
3659         }
3660     }
3661     if (lex)
3662         o = my(o);
3663     else
3664         o = op_lvalue(o, OP_NULL);              /* a bit kludgey */
3665     PL_parser->in_my = FALSE;
3666     PL_parser->in_my_stash = NULL;
3667     return o;
3668 }
3669
3670 OP *
3671 Perl_jmaybe(pTHX_ OP *o)
3672 {
3673     PERL_ARGS_ASSERT_JMAYBE;
3674
3675     if (o->op_type == OP_LIST) {
3676         OP * const o2
3677             = newSVREF(newGVOP(OP_GV, 0, gv_fetchpvs(";", GV_ADD|GV_NOTQUAL, SVt_PV)));
3678         o = convert(OP_JOIN, 0, op_prepend_elem(OP_LIST, o2, o));
3679     }
3680     return o;
3681 }
3682
3683 PERL_STATIC_INLINE OP *
3684 S_op_std_init(pTHX_ OP *o)
3685 {
3686     I32 type = o->op_type;
3687
3688     PERL_ARGS_ASSERT_OP_STD_INIT;
3689
3690     if (PL_opargs[type] & OA_RETSCALAR)
3691         scalar(o);
3692     if (PL_opargs[type] & OA_TARGET && !o->op_targ)
3693         o->op_targ = pad_alloc(type, SVs_PADTMP);
3694
3695     return o;
3696 }
3697
3698 PERL_STATIC_INLINE OP *
3699 S_op_integerize(pTHX_ OP *o)
3700 {
3701     I32 type = o->op_type;
3702
3703     PERL_ARGS_ASSERT_OP_INTEGERIZE;
3704
3705     /* integerize op. */
3706     if ((PL_opargs[type] & OA_OTHERINT) && (PL_hints & HINT_INTEGER))
3707     {
3708         dVAR;
3709         o->op_ppaddr = PL_ppaddr[++(o->op_type)];
3710     }
3711
3712     if (type == OP_NEGATE)
3713         /* XXX might want a ck_negate() for this */
3714         cUNOPo->op_first->op_private &= ~OPpCONST_STRICT;
3715
3716     return o;
3717 }
3718
3719 static OP *
3720 S_fold_constants(pTHX_ OP *o)
3721 {
3722     dVAR;
3723     OP * VOL curop;
3724     OP *newop;
3725     VOL I32 type = o->op_type;
3726     SV * VOL sv = NULL;
3727     int ret = 0;
3728     I32 oldscope;
3729     OP *old_next;
3730     SV * const oldwarnhook = PL_warnhook;
3731     SV * const olddiehook  = PL_diehook;
3732     COP not_compiling;
3733     dJMPENV;
3734
3735     PERL_ARGS_ASSERT_FOLD_CONSTANTS;
3736
3737     if (!(PL_opargs[type] & OA_FOLDCONST))
3738         goto nope;
3739
3740     switch (type) {
3741     case OP_UCFIRST:
3742     case OP_LCFIRST:
3743     case OP_UC:
3744     case OP_LC:
3745     case OP_FC:
3746 #ifdef USE_LOCALE_CTYPE
3747         if (IN_LC_COMPILETIME(LC_CTYPE))
3748             goto nope;
3749 #endif
3750         break;
3751     case OP_SLT:
3752     case OP_SGT:
3753     case OP_SLE:
3754     case OP_SGE:
3755     case OP_SCMP:
3756 #ifdef USE_LOCALE_COLLATE
3757         if (IN_LC_COMPILETIME(LC_COLLATE))
3758             goto nope;
3759 #endif
3760         break;
3761     case OP_SPRINTF:
3762         /* XXX what about the numeric ops? */
3763 #ifdef USE_LOCALE_NUMERIC
3764         if (IN_LC_COMPILETIME(LC_NUMERIC))
3765             goto nope;
3766 #endif
3767         break;
3768     case OP_PACK:
3769         if (!OP_HAS_SIBLING(cLISTOPo->op_first)
3770           || OP_SIBLING(cLISTOPo->op_first)->op_type != OP_CONST)
3771             goto nope;
3772         {
3773             SV * const sv = cSVOPx_sv(OP_SIBLING(cLISTOPo->op_first));
3774             if (!SvPOK(sv) || SvGMAGICAL(sv)) goto nope;
3775             {
3776                 const char *s = SvPVX_const(sv);
3777                 while (s < SvEND(sv)) {
3778                     if (*s == 'p' || *s == 'P') goto nope;
3779                     s++;
3780                 }
3781             }
3782         }
3783         break;
3784     case OP_REPEAT:
3785         if (o->op_private & OPpREPEAT_DOLIST) goto nope;
3786         break;
3787     case OP_SREFGEN:
3788         if (cUNOPx(cUNOPo->op_first)->op_first->op_type != OP_CONST
3789          || SvPADTMP(cSVOPx_sv(cUNOPx(cUNOPo->op_first)->op_first)))
3790             goto nope;
3791     }
3792
3793     if (PL_parser && PL_parser->error_count)
3794         goto nope;              /* Don't try to run w/ errors */
3795
3796     for (curop = LINKLIST(o); curop != o; curop = LINKLIST(curop)) {
3797         const OPCODE type = curop->op_type;
3798         if ((type != OP_CONST || (curop->op_private & OPpCONST_BARE)) &&
3799             type != OP_LIST &&
3800             type != OP_SCALAR &&
3801             type != OP_NULL &&
3802             type != OP_PUSHMARK)
3803         {
3804             goto nope;
3805         }
3806     }
3807
3808     curop = LINKLIST(o);
3809     old_next = o->op_next;
3810     o->op_next = 0;
3811     PL_op = curop;
3812
3813     oldscope = PL_scopestack_ix;
3814     create_eval_scope(G_FAKINGEVAL);
3815
3816     /* Verify that we don't need to save it:  */
3817     assert(PL_curcop == &PL_compiling);
3818     StructCopy(&PL_compiling, &not_compiling, COP);
3819     PL_curcop = &not_compiling;
3820     /* The above ensures that we run with all the correct hints of the
3821        currently compiling COP, but that IN_PERL_RUNTIME is not true. */
3822     assert(IN_PERL_RUNTIME);
3823     PL_warnhook = PERL_WARNHOOK_FATAL;
3824     PL_diehook  = NULL;
3825     JMPENV_PUSH(ret);
3826
3827     switch (ret) {
3828     case 0:
3829         CALLRUNOPS(aTHX);
3830         sv = *(PL_stack_sp--);
3831         if (o->op_targ && sv == PAD_SV(o->op_targ)) {   /* grab pad temp? */
3832             pad_swipe(o->op_targ,  FALSE);
3833         }
3834         else if (SvTEMP(sv)) {                  /* grab mortal temp? */
3835             SvREFCNT_inc_simple_void(sv);
3836             SvTEMP_off(sv);
3837         }
3838         else { assert(SvIMMORTAL(sv)); }
3839         break;
3840     case 3:
3841         /* Something tried to die.  Abandon constant folding.  */
3842         /* Pretend the error never happened.  */
3843         CLEAR_ERRSV();
3844         o->op_next = old_next;
3845         break;
3846     default:
3847         JMPENV_POP;
3848         /* Don't expect 1 (setjmp failed) or 2 (something called my_exit)  */
3849         PL_warnhook = oldwarnhook;
3850         PL_diehook  = olddiehook;
3851         /* XXX note that this croak may fail as we've already blown away
3852          * the stack - eg any nested evals */
3853         Perl_croak(aTHX_ "panic: fold_constants JMPENV_PUSH returned %d", ret);
3854     }
3855     JMPENV_POP;
3856     PL_warnhook = oldwarnhook;
3857     PL_diehook  = olddiehook;
3858     PL_curcop = &PL_compiling;
3859
3860     if (PL_scopestack_ix > oldscope)
3861         delete_eval_scope();
3862
3863     if (ret)
3864         goto nope;
3865
3866     op_free(o);
3867     assert(sv);
3868     if (type == OP_STRINGIFY) SvPADTMP_off(sv);
3869     else if (!SvIMMORTAL(sv)) {
3870         SvPADTMP_on(sv);
3871         SvREADONLY_on(sv);
3872     }
3873     if (type == OP_RV2GV)
3874         newop = newGVOP(OP_GV, 0, MUTABLE_GV(sv));
3875     else
3876     {
3877         newop = newSVOP(OP_CONST, 0, MUTABLE_SV(sv));
3878         if (type != OP_STRINGIFY) newop->op_folded = 1;
3879     }
3880     return newop;
3881
3882  nope:
3883     return o;
3884 }
3885
3886 static OP *
3887 S_gen_constant_list(pTHX_ OP *o)
3888 {
3889     dVAR;
3890     OP *curop;
3891     const SSize_t oldtmps_floor = PL_tmps_floor;
3892     SV **svp;
3893     AV *av;
3894
3895     list(o);
3896     if (PL_parser && PL_parser->error_count)
3897         return o;               /* Don't attempt to run with errors */
3898
3899     curop = LINKLIST(o);
3900     o->op_next = 0;
3901     CALL_PEEP(curop);
3902     S_prune_chain_head(&curop);
3903     PL_op = curop;
3904     Perl_pp_pushmark(aTHX);
3905     CALLRUNOPS(aTHX);
3906     PL_op = curop;
3907     assert (!(curop->op_flags & OPf_SPECIAL));
3908     assert(curop->op_type == OP_RANGE);
3909     Perl_pp_anonlist(aTHX);
3910     PL_tmps_floor = oldtmps_floor;
3911
3912     o->op_type = OP_RV2AV;
3913     o->op_ppaddr = PL_ppaddr[OP_RV2AV];
3914     o->op_flags &= ~OPf_REF;    /* treat \(1..2) like an ordinary list */
3915     o->op_flags |= OPf_PARENS;  /* and flatten \(1..2,3) */
3916     o->op_opt = 0;              /* needs to be revisited in rpeep() */
3917     av = (AV *)SvREFCNT_inc_NN(*PL_stack_sp--);
3918
3919     /* replace subtree with an OP_CONST */
3920     curop = ((UNOP*)o)->op_first;
3921     op_sibling_splice(o, NULL, -1, newSVOP(OP_CONST, 0, (SV *)av));
3922     op_free(curop);
3923
3924     if (AvFILLp(av) != -1)
3925         for (svp = AvARRAY(av) + AvFILLp(av); svp >= AvARRAY(av); --svp)
3926         {
3927             SvPADTMP_on(*svp);
3928             SvREADONLY_on(*svp);
3929         }
3930     LINKLIST(o);
3931     return list(o);
3932 }
3933
3934 /* convert o (and any siblings) into a list if not already, then
3935  * convert the parent OP_LIST to type 'type', and CHECKOP() and fold it
3936  */
3937
3938 OP *
3939 Perl_convert(pTHX_ I32 type, I32 flags, OP *o)
3940 {
3941     dVAR;
3942     if (type < 0) type = -type, flags |= OPf_SPECIAL;
3943     if (!o || o->op_type != OP_LIST)
3944         o = force_list(o, 0);
3945     else
3946         o->op_flags &= ~OPf_WANT;
3947
3948     if (!(PL_opargs[type] & OA_MARK))
3949         op_null(cLISTOPo->op_first);
3950     else {
3951         OP * const kid2 = OP_SIBLING(cLISTOPo->op_first);
3952         if (kid2 && kid2->op_type == OP_COREARGS) {
3953             op_null(cLISTOPo->op_first);
3954             kid2->op_private |= OPpCOREARGS_PUSHMARK;
3955         }
3956     }   
3957
3958     o->op_type = (OPCODE)type;
3959     o->op_ppaddr = PL_ppaddr[type];
3960     o->op_flags |= flags;
3961
3962     o = CHECKOP(type, o);
3963     if (o->op_type != (unsigned)type)
3964         return o;
3965
3966     return fold_constants(op_integerize(op_std_init(o)));
3967 }
3968
3969 /*
3970 =head1 Optree Manipulation Functions
3971 */
3972
3973 /* List constructors */
3974
3975 /*
3976 =for apidoc Am|OP *|op_append_elem|I32 optype|OP *first|OP *last
3977
3978 Append an item to the list of ops contained directly within a list-type
3979 op, returning the lengthened list.  I<first> is the list-type op,
3980 and I<last> is the op to append to the list.  I<optype> specifies the
3981 intended opcode for the list.  If I<first> is not already a list of the
3982 right type, it will be upgraded into one.  If either I<first> or I<last>
3983 is null, the other is returned unchanged.
3984
3985 =cut
3986 */
3987
3988 OP *
3989 Perl_op_append_elem(pTHX_ I32 type, OP *first, OP *last)
3990 {
3991     if (!first)
3992         return last;
3993
3994     if (!last)
3995         return first;
3996
3997     if (first->op_type != (unsigned)type
3998         || (type == OP_LIST && (first->op_flags & OPf_PARENS)))
3999     {
4000         return newLISTOP(type, 0, first, last);
4001     }
4002
4003     op_sibling_splice(first, ((LISTOP*)first)->op_last, 0, last);
4004     first->op_flags |= OPf_KIDS;
4005     return first;
4006 }
4007
4008 /*
4009 =for apidoc Am|OP *|op_append_list|I32 optype|OP *first|OP *last
4010
4011 Concatenate the lists of ops contained directly within two list-type ops,
4012 returning the combined list.  I<first> and I<last> are the list-type ops
4013 to concatenate.  I<optype> specifies the intended opcode for the list.
4014 If either I<first> or I<last> is not already a list of the right type,
4015 it will be upgraded into one.  If either I<first> or I<last> is null,
4016 the other is returned unchanged.
4017
4018 =cut
4019 */
4020
4021 OP *
4022 Perl_op_append_list(pTHX_ I32 type, OP *first, OP *last)
4023 {
4024     if (!first)
4025         return last;
4026
4027     if (!last)
4028         return first;
4029
4030     if (first->op_type != (unsigned)type)
4031         return op_prepend_elem(type, first, last);
4032
4033     if (last->op_type != (unsigned)type)
4034         return op_append_elem(type, first, last);
4035
4036     ((LISTOP*)first)->op_last->op_lastsib = 0;
4037     OP_SIBLING_set(((LISTOP*)first)->op_last, ((LISTOP*)last)->op_first);
4038     ((LISTOP*)first)->op_last = ((LISTOP*)last)->op_last;
4039     ((LISTOP*)first)->op_last->op_lastsib = 1;
4040 #ifdef PERL_OP_PARENT
4041     ((LISTOP*)first)->op_last->op_sibling = first;
4042 #endif
4043     first->op_flags |= (last->op_flags & OPf_KIDS);
4044
4045
4046     S_op_destroy(aTHX_ last);
4047
4048     return first;
4049 }
4050
4051 /*
4052 =for apidoc Am|OP *|op_prepend_elem|I32 optype|OP *first|OP *last
4053
4054 Prepend an item to the list of ops contained directly within a list-type
4055 op, returning the lengthened list.  I<first> is the op to prepend to the
4056 list, and I<last> is the list-type op.  I<optype> specifies the intended
4057 opcode for the list.  If I<last> is not already a list of the right type,
4058 it will be upgraded into one.  If either I<first> or I<last> is null,
4059 the other is returned unchanged.
4060
4061 =cut
4062 */
4063
4064 OP *
4065 Perl_op_prepend_elem(pTHX_ I32 type, OP *first, OP *last)
4066 {
4067     if (!first)
4068         return last;
4069
4070     if (!last)
4071         return first;
4072
4073     if (last->op_type == (unsigned)type) {
4074         if (type == OP_LIST) {  /* already a PUSHMARK there */
4075             /* insert 'first' after pushmark */
4076             op_sibling_splice(last, cLISTOPx(last)->op_first, 0, first);
4077             if (!(first->op_flags & OPf_PARENS))
4078                 last->op_flags &= ~OPf_PARENS;
4079         }
4080         else
4081             op_sibling_splice(last, NULL, 0, first);
4082         last->op_flags |= OPf_KIDS;
4083         return last;
4084     }
4085
4086     return newLISTOP(type, 0, first, last);
4087 }
4088
4089 /* Constructors */
4090
4091
4092 /*
4093 =head1 Optree construction
4094
4095 =for apidoc Am|OP *|newNULLLIST
4096
4097 Constructs, checks, and returns a new C<stub> op, which represents an
4098 empty list expression.
4099
4100 =cut
4101 */
4102
4103 OP *
4104 Perl_newNULLLIST(pTHX)
4105 {
4106     return newOP(OP_STUB, 0);
4107 }
4108
4109 /* promote o and any siblings to be a list if its not already; i.e.
4110  *
4111  *  o - A - B
4112  *
4113  * becomes
4114  *
4115  *  list
4116  *    |
4117  *  pushmark - o - A - B
4118  *
4119  * If nullit it true, the list op is nulled.
4120  */
4121
4122 static OP *
4123 S_force_list(pTHX_ OP *o, bool nullit)
4124 {
4125     if (!o || o->op_type != OP_LIST) {
4126         OP *rest = NULL;
4127         if (o) {
4128             /* manually detach any siblings then add them back later */
4129             rest = OP_SIBLING(o);
4130             OP_SIBLING_set(o, NULL);
4131             o->op_lastsib = 1;
4132         }
4133         o = newLISTOP(OP_LIST, 0, o, NULL);
4134         if (rest)
4135             op_sibling_splice(o, cLISTOPo->op_last, 0, rest);
4136     }
4137     if (nullit)
4138         op_null(o);
4139     return o;
4140 }
4141
4142 /*
4143 =for apidoc Am|OP *|newLISTOP|I32 type|I32 flags|OP *first|OP *last
4144
4145 Constructs, checks, and returns an op of any list type.  I<type> is
4146 the opcode.  I<flags> gives the eight bits of C<op_flags>, except that
4147 C<OPf_KIDS> will be set automatically if required.  I<first> and I<last>
4148 supply up to two ops to be direct children of the list op; they are
4149 consumed by this function and become part of the constructed op tree.
4150
4151 =cut
4152 */
4153
4154 OP *
4155 Perl_newLISTOP(pTHX_ I32 type, I32 flags, OP *first, OP *last)
4156 {
4157     dVAR;
4158     LISTOP *listop;
4159
4160     assert((PL_opargs[type] & OA_CLASS_MASK) == OA_LISTOP);
4161
4162     NewOp(1101, listop, 1, LISTOP);
4163
4164     listop->op_type = (OPCODE)type;
4165     listop->op_ppaddr = PL_ppaddr[type];
4166     if (first || last)
4167         flags |= OPf_KIDS;
4168     listop->op_flags = (U8)flags;
4169
4170     if (!last && first)
4171         last = first;
4172     else if (!first && last)
4173         first = last;
4174     else if (first)
4175         OP_SIBLING_set(first, last);
4176     listop->op_first = first;
4177     listop->op_last = last;
4178     if (type == OP_LIST) {
4179         OP* const pushop = newOP(OP_PUSHMARK, 0);
4180         pushop->op_lastsib = 0;
4181         OP_SIBLING_set(pushop, first);
4182         listop->op_first = pushop;
4183         listop->op_flags |= OPf_KIDS;
4184         if (!last)
4185             listop->op_last = pushop;
4186     }
4187     if (first)
4188         first->op_lastsib = 0;
4189     if (listop->op_last) {
4190         listop->op_last->op_lastsib = 1;
4191 #ifdef PERL_OP_PARENT
4192         listop->op_last->op_sibling = (OP*)listop;
4193 #endif
4194     }
4195
4196     return CHECKOP(type, listop);
4197 }
4198
4199 /*
4200 =for apidoc Am|OP *|newOP|I32 type|I32 flags
4201
4202 Constructs, checks, and returns an op of any base type (any type that
4203 has no extra fields).  I<type> is the opcode.  I<flags> gives the
4204 eight bits of C<op_flags>, and, shifted up eight bits, the eight bits
4205 of C<op_private>.
4206
4207 =cut
4208 */
4209
4210 OP *
4211 Perl_newOP(pTHX_ I32 type, I32 flags)
4212 {
4213     dVAR;
4214     OP *o;
4215
4216     if (type == -OP_ENTEREVAL) {
4217         type = OP_ENTEREVAL;
4218         flags |= OPpEVAL_BYTES<<8;
4219     }
4220
4221     assert((PL_opargs[type] & OA_CLASS_MASK) == OA_BASEOP
4222         || (PL_opargs[type] & OA_CLASS_MASK) == OA_BASEOP_OR_UNOP
4223         || (PL_opargs[type] & OA_CLASS_MASK) == OA_FILESTATOP
4224         || (PL_opargs[type] & OA_CLASS_MASK) == OA_LOOPEXOP);
4225
4226     NewOp(1101, o, 1, OP);
4227     o->op_type = (OPCODE)type;
4228     o->op_ppaddr = PL_ppaddr[type];
4229     o->op_flags = (U8)flags;
4230
4231     o->op_next = o;
4232     o->op_private = (U8)(0 | (flags >> 8));
4233     if (PL_opargs[type] & OA_RETSCALAR)
4234         scalar(o);
4235     if (PL_opargs[type] & OA_TARGET)
4236         o->op_targ = pad_alloc(type, SVs_PADTMP);
4237     return CHECKOP(type, o);
4238 }
4239
4240 /*
4241 =for apidoc Am|OP *|newUNOP|I32 type|I32 flags|OP *first
4242
4243 Constructs, checks, and returns an op of any unary type.  I<type> is
4244 the opcode.  I<flags> gives the eight bits of C<op_flags>, except that
4245 C<OPf_KIDS> will be set automatically if required, and, shifted up eight
4246 bits, the eight bits of C<op_private>, except that the bit with value 1
4247 is automatically set.  I<first> supplies an optional op to be the direct
4248 child of the unary op; it is consumed by this function and become part
4249 of the constructed op tree.
4250
4251 =cut
4252 */
4253
4254 OP *
4255 Perl_newUNOP(pTHX_ I32 type, I32 flags, OP *first)
4256 {
4257     dVAR;
4258     UNOP *unop;
4259
4260     if (type == -OP_ENTEREVAL) {
4261         type = OP_ENTEREVAL;
4262         flags |= OPpEVAL_BYTES<<8;
4263     }
4264
4265     assert((PL_opargs[type] & OA_CLASS_MASK) == OA_UNOP
4266         || (PL_opargs[type] & OA_CLASS_MASK) == OA_BASEOP_OR_UNOP
4267         || (PL_opargs[type] & OA_CLASS_MASK) == OA_FILESTATOP
4268         || (PL_opargs[type] & OA_CLASS_MASK) == OA_LOOPEXOP
4269         || type == OP_SASSIGN
4270         || type == OP_ENTERTRY
4271         || type == OP_NULL );
4272
4273     if (!first)
4274         first = newOP(OP_STUB, 0);
4275     if (PL_opargs[type] & OA_MARK)
4276         first = force_list(first, 1);
4277
4278     NewOp(1101, unop, 1, UNOP);
4279     unop->op_type = (OPCODE)type;
4280     unop->op_ppaddr = PL_ppaddr[type];
4281     unop->op_first = first;
4282     unop->op_flags = (U8)(flags | OPf_KIDS);
4283     unop->op_private = (U8)(1 | (flags >> 8));
4284
4285 #ifdef PERL_OP_PARENT
4286     if (!OP_HAS_SIBLING(first)) /* true unless weird syntax error */
4287         first->op_sibling = (OP*)unop;
4288 #endif
4289
4290     unop = (UNOP*) CHECKOP(type, unop);
4291     if (unop->op_next)
4292         return (OP*)unop;
4293
4294     return fold_constants(op_integerize(op_std_init((OP *) unop)));
4295 }
4296
4297 /*
4298 =for apidoc Am|OP *|newBINOP|I32 type|I32 flags|OP *first|OP *last
4299
4300 Constructs, checks, and returns an op of any binary type.  I<type>
4301 is the opcode.  I<flags> gives the eight bits of C<op_flags>, except
4302 that C<OPf_KIDS> will be set automatically, and, shifted up eight bits,
4303 the eight bits of C<op_private>, except that the bit with value 1 or
4304 2 is automatically set as required.  I<first> and I<last> supply up to
4305 two ops to be the direct children of the binary op; they are consumed
4306 by this function and become part of the constructed op tree.
4307
4308 =cut
4309 */
4310
4311 OP *
4312 Perl_newBINOP(pTHX_ I32 type, I32 flags, OP *first, OP *last)
4313 {
4314     dVAR;
4315     BINOP *binop;
4316
4317     ASSUME((PL_opargs[type] & OA_CLASS_MASK) == OA_BINOP
4318         || type == OP_SASSIGN || type == OP_NULL );
4319
4320     NewOp(1101, binop, 1, BINOP);
4321
4322     if (!first)
4323         first = newOP(OP_NULL, 0);
4324
4325     binop->op_type = (OPCODE)type;
4326     binop->op_ppaddr = PL_ppaddr[type];
4327     binop->op_first = first;
4328     binop->op_flags = (U8)(flags | OPf_KIDS);
4329     if (!last) {
4330         last = first;
4331         binop->op_private = (U8)(1 | (flags >> 8));
4332     }
4333     else {
4334         binop->op_private = (U8)(2 | (flags >> 8));
4335         OP_SIBLING_set(first, last);
4336         first->op_lastsib = 0;
4337     }
4338
4339 #ifdef PERL_OP_PARENT
4340     if (!OP_HAS_SIBLING(last)) /* true unless weird syntax error */
4341         last->op_sibling = (OP*)binop;
4342 #endif
4343
4344     binop = (BINOP*)CHECKOP(type, binop);
4345     if (binop->op_next || binop->op_type != (OPCODE)type)
4346         return (OP*)binop;
4347
4348     binop->op_last = OP_SIBLING(binop->op_first);
4349 #ifdef PERL_OP_PARENT
4350     if (binop->op_last)
4351         binop->op_last->op_sibling = (OP*)binop;
4352 #endif
4353
4354     return fold_constants(op_integerize(op_std_init((OP *)binop)));
4355 }
4356
4357 static int uvcompare(const void *a, const void *b)
4358     __attribute__nonnull__(1)
4359     __attribute__nonnull__(2)
4360     __attribute__pure__;
4361 static int uvcompare(const void *a, const void *b)
4362 {
4363     if (*((const UV *)a) < (*(const UV *)b))
4364         return -1;
4365     if (*((const UV *)a) > (*(const UV *)b))
4366         return 1;
4367     if (*((const UV *)a+1) < (*(const UV *)b+1))
4368         return -1;
4369     if (*((const UV *)a+1) > (*(const UV *)b+1))
4370         return 1;
4371     return 0;
4372 }
4373
4374 static OP *
4375 S_pmtrans(pTHX_ OP *o, OP *expr, OP *repl)
4376 {
4377     SV * const tstr = ((SVOP*)expr)->op_sv;
4378     SV * const rstr =
4379                               ((SVOP*)repl)->op_sv;
4380     STRLEN tlen;
4381     STRLEN rlen;
4382     const U8 *t = (U8*)SvPV_const(tstr, tlen);
4383     const U8 *r = (U8*)SvPV_const(rstr, rlen);
4384     I32 i;
4385     I32 j;
4386     I32 grows = 0;
4387     short *tbl;
4388
4389     const I32 complement = o->op_private & OPpTRANS_COMPLEMENT;
4390     const I32 squash     = o->op_private & OPpTRANS_SQUASH;
4391     I32 del              = o->op_private & OPpTRANS_DELETE;
4392     SV* swash;
4393
4394     PERL_ARGS_ASSERT_PMTRANS;
4395
4396     PL_hints |= HINT_BLOCK_SCOPE;
4397
4398     if (SvUTF8(tstr))
4399         o->op_private |= OPpTRANS_FROM_UTF;
4400
4401     if (SvUTF8(rstr))
4402         o->op_private |= OPpTRANS_TO_UTF;
4403
4404     if (o->op_private & (OPpTRANS_FROM_UTF|OPpTRANS_TO_UTF)) {
4405         SV* const listsv = newSVpvs("# comment\n");
4406         SV* transv = NULL;
4407         const U8* tend = t + tlen;
4408         const U8* rend = r + rlen;
4409         STRLEN ulen;
4410         UV tfirst = 1;
4411         UV tlast = 0;
4412         IV tdiff;
4413         UV rfirst = 1;
4414         UV rlast = 0;
4415         IV rdiff;
4416         IV diff;
4417         I32 none = 0;
4418         U32 max = 0;
4419         I32 bits;
4420         I32 havefinal = 0;
4421         U32 final = 0;
4422         const I32 from_utf  = o->op_private & OPpTRANS_FROM_UTF;
4423         const I32 to_utf    = o->op_private & OPpTRANS_TO_UTF;
4424         U8* tsave = NULL;
4425         U8* rsave = NULL;
4426         const U32 flags = UTF8_ALLOW_DEFAULT;
4427
4428         if (!from_utf) {
4429             STRLEN len = tlen;
4430             t = tsave = bytes_to_utf8(t, &len);
4431             tend = t + len;
4432         }
4433         if (!to_utf && rlen) {
4434             STRLEN len = rlen;
4435             r = rsave = bytes_to_utf8(r, &len);
4436             rend = r + len;
4437         }
4438
4439 /* There is a snag with this code on EBCDIC: scan_const() in toke.c has
4440  * encoded chars in native encoding which makes ranges in the EBCDIC 0..255
4441  * odd.  */
4442
4443         if (complement) {
4444             U8 tmpbuf[UTF8_MAXBYTES+1];
4445             UV *cp;
4446             UV nextmin = 0;
4447             Newx(cp, 2*tlen, UV);
4448             i = 0;
4449             transv = newSVpvs("");
4450             while (t < tend) {
4451                 cp[2*i] = utf8n_to_uvchr(t, tend-t, &ulen, flags);
4452                 t += ulen;
4453                 if (t < tend && *t == ILLEGAL_UTF8_BYTE) {
4454                     t++;
4455                     cp[2*i+1] = utf8n_to_uvchr(t, tend-t, &ulen, flags);
4456                     t += ulen;
4457                 }
4458                 else {
4459                  cp[2*i+1] = cp[2*i];
4460                 }
4461                 i++;
4462             }
4463             qsort(cp, i, 2*sizeof(UV), uvcompare);
4464             for (j = 0; j < i; j++) {
4465                 UV  val = cp[2*j];
4466                 diff = val - nextmin;
4467                 if (diff > 0) {
4468                     t = uvchr_to_utf8(tmpbuf,nextmin);
4469                     sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf);
4470                     if (diff > 1) {
4471                         U8  range_mark = ILLEGAL_UTF8_BYTE;
4472                         t = uvchr_to_utf8(tmpbuf, val - 1);
4473                         sv_catpvn(transv, (char *)&range_mark, 1);
4474                         sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf);
4475                     }
4476                 }
4477                 val = cp[2*j+1];
4478                 if (val >= nextmin)
4479                     nextmin = val + 1;
4480             }
4481             t = uvchr_to_utf8(tmpbuf,nextmin);
4482             sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf);
4483             {
4484                 U8 range_mark = ILLEGAL_UTF8_BYTE;
4485                 sv_catpvn(transv, (char *)&range_mark, 1);
4486             }
4487             t = uvchr_to_utf8(tmpbuf, 0x7fffffff);
4488             sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf);
4489             t = (const U8*)SvPVX_const(transv);
4490             tlen = SvCUR(transv);
4491             tend = t + tlen;
4492             Safefree(cp);
4493         }
4494         else if (!rlen && !del) {
4495             r = t; rlen = tlen; rend = tend;
4496         }
4497         if (!squash) {
4498                 if ((!rlen && !del) || t == r ||
4499                     (tlen == rlen && memEQ((char *)t, (char *)r, tlen)))
4500                 {
4501                     o->op_private |= OPpTRANS_IDENTICAL;
4502                 }
4503         }
4504
4505         while (t < tend || tfirst <= tlast) {
4506             /* see if we need more "t" chars */
4507             if (tfirst > tlast) {
4508                 tfirst = (I32)utf8n_to_uvchr(t, tend - t, &ulen, flags);
4509                 t += ulen;
4510                 if (t < tend && *t == ILLEGAL_UTF8_BYTE) {      /* illegal utf8 val indicates range */
4511                     t++;
4512                     tlast = (I32)utf8n_to_uvchr(t, tend - t, &ulen, flags);
4513                     t += ulen;
4514                 }
4515                 else
4516                     tlast = tfirst;
4517             }
4518
4519             /* now see if we need more "r" chars */
4520             if (rfirst > rlast) {
4521                 if (r < rend) {
4522                     rfirst = (I32)utf8n_to_uvchr(r, rend - r, &ulen, flags);
4523                     r += ulen;
4524                     if (r < rend && *r == ILLEGAL_UTF8_BYTE) {  /* illegal utf8 val indicates range */
4525                         r++;
4526                         rlast = (I32)utf8n_to_uvchr(r, rend - r, &ulen, flags);
4527                         r += ulen;
4528                     }
4529                     else
4530                         rlast = rfirst;
4531                 }
4532                 else {
4533                     if (!havefinal++)
4534                         final = rlast;
4535                     rfirst = rlast = 0xffffffff;
4536                 }
4537             }
4538
4539             /* now see which range will peter our first, if either. */
4540             tdiff = tlast - tfirst;
4541             rdiff = rlast - rfirst;
4542
4543             if (tdiff <= rdiff)
4544                 diff = tdiff;
4545             else
4546                 diff = rdiff;
4547
4548             if (rfirst == 0xffffffff) {
4549                 diff = tdiff;   /* oops, pretend rdiff is infinite */
4550                 if (diff > 0)
4551                     Perl_sv_catpvf(aTHX_ listsv, "%04lx\t%04lx\tXXXX\n",
4552                                    (long)tfirst, (long)tlast);
4553                 else
4554                     Perl_sv_catpvf(aTHX_ listsv, "%04lx\t\tXXXX\n", (long)tfirst);
4555             }
4556             else {
4557                 if (diff > 0)
4558                     Perl_sv_catpvf(aTHX_ listsv, "%04lx\t%04lx\t%04lx\n",
4559                                    (long)tfirst, (long)(tfirst + diff),
4560                                    (long)rfirst);
4561                 else
4562                     Perl_sv_catpvf(aTHX_ listsv, "%04lx\t\t%04lx\n",
4563                                    (long)tfirst, (long)rfirst);
4564
4565                 if (rfirst + diff > max)
4566                     max = rfirst + diff;
4567                 if (!grows)
4568                     grows = (tfirst < rfirst &&
4569                              UNISKIP(tfirst) < UNISKIP(rfirst + diff));
4570                 rfirst += diff + 1;
4571             }
4572             tfirst += diff + 1;
4573         }
4574
4575         none = ++max;
4576         if (del)
4577             del = ++max;
4578
4579         if (max > 0xffff)
4580             bits = 32;
4581         else if (max > 0xff)
4582             bits = 16;
4583         else
4584             bits = 8;
4585
4586         swash = MUTABLE_SV(swash_init("utf8", "", listsv, bits, none));
4587 #ifdef USE_ITHREADS
4588         cPADOPo->op_padix = pad_alloc(OP_TRANS, SVf_READONLY);
4589         SvREFCNT_dec(PAD_SVl(cPADOPo->op_padix));
4590         PAD_SETSV(cPADOPo->op_padix, swash);
4591         SvPADTMP_on(swash);
4592         SvREADONLY_on(swash);
4593 #else
4594         cSVOPo->op_sv = swash;
4595 #endif
4596         SvREFCNT_dec(listsv);
4597         SvREFCNT_dec(transv);
4598
4599         if (!del && havefinal && rlen)
4600             (void)hv_store(MUTABLE_HV(SvRV(swash)), "FINAL", 5,
4601                            newSVuv((UV)final), 0);
4602
4603         if (grows)
4604             o->op_private |= OPpTRANS_GROWS;
4605
4606         Safefree(tsave);
4607         Safefree(rsave);
4608
4609         op_free(expr);
4610         op_free(repl);
4611         return o;
4612     }
4613
4614     tbl = (short*)PerlMemShared_calloc(
4615         (o->op_private & OPpTRANS_COMPLEMENT) &&
4616             !(o->op_private & OPpTRANS_DELETE) ? 258 : 256,
4617         sizeof(short));
4618     cPVOPo->op_pv = (char*)tbl;
4619     if (complement) {
4620         for (i = 0; i < (I32)tlen; i++)
4621             tbl[t[i]] = -1;
4622         for (i = 0, j = 0; i < 256; i++) {
4623             if (!tbl[i]) {
4624                 if (j >= (I32)rlen) {
4625                     if (del)
4626                         tbl[i] = -2;
4627                     else if (rlen)
4628                         tbl[i] = r[j-1];
4629                     else
4630                         tbl[i] = (short)i;
4631                 }
4632                 else {
4633                     if (i < 128 && r[j] >= 128)
4634                         grows = 1;
4635                     tbl[i] = r[j++];
4636                 }
4637             }
4638         }
4639         if (!del) {
4640             if (!rlen) {
4641                 j = rlen;
4642                 if (!squash)
4643                     o->op_private |= OPpTRANS_IDENTICAL;
4644             }
4645             else if (j >= (I32)rlen)
4646                 j = rlen - 1;
4647             else {
4648                 tbl = 
4649                     (short *)
4650                     PerlMemShared_realloc(tbl,
4651                                           (0x101+rlen-j) * sizeof(short));
4652                 cPVOPo->op_pv = (char*)tbl;
4653             }
4654             tbl[0x100] = (short)(rlen - j);
4655             for (i=0; i < (I32)rlen - j; i++)
4656                 tbl[0x101+i] = r[j+i];
4657         }
4658     }
4659     else {
4660         if (!rlen && !del) {
4661             r = t; rlen = tlen;
4662             if (!squash)
4663                 o->op_private |= OPpTRANS_IDENTICAL;
4664         }
4665         else if (!squash && rlen == tlen && memEQ((char*)t, (char*)r, tlen)) {
4666             o->op_private |= OPpTRANS_IDENTICAL;
4667         }
4668         for (i = 0; i < 256; i++)
4669             tbl[i] = -1;
4670         for (i = 0, j = 0; i < (I32)tlen; i++,j++) {
4671             if (j >= (I32)rlen) {
4672                 if (del) {
4673                     if (tbl[t[i]] == -1)
4674                         tbl[t[i]] = -2;
4675                     continue;
4676                 }
4677                 --j;
4678             }
4679             if (tbl[t[i]] == -1) {
4680                 if (t[i] < 128 && r[j] >= 128)
4681                     grows = 1;
4682                 tbl[t[i]] = r[j];
4683             }
4684         }
4685     }
4686
4687     if(del && rlen == tlen) {
4688         Perl_ck_warner(aTHX_ packWARN(WARN_MISC), "Useless use of /d modifier in transliteration operator"); 
4689     } else if(rlen > tlen && !complement) {
4690         Perl_ck_warner(aTHX_ packWARN(WARN_MISC), "Replacement list is longer than search list");
4691     }
4692
4693     if (grows)
4694         o->op_private |= OPpTRANS_GROWS;
4695     op_free(expr);
4696     op_free(repl);
4697
4698     return o;
4699 }
4700
4701 /*
4702 =for apidoc Am|OP *|newPMOP|I32 type|I32 flags
4703
4704 Constructs, checks, and returns an op of any pattern matching type.
4705 I<type> is the opcode.  I<flags> gives the eight bits of C<op_flags>
4706 and, shifted up eight bits, the eight bits of C<op_private>.
4707
4708 =cut
4709 */
4710
4711 OP *
4712 Perl_newPMOP(pTHX_ I32 type, I32 flags)
4713 {
4714     dVAR;
4715     PMOP *pmop;
4716
4717     assert((PL_opargs[type] & OA_CLASS_MASK) == OA_PMOP);
4718
4719     NewOp(1101, pmop, 1, PMOP);
4720     pmop->op_type = (OPCODE)type;
4721     pmop->op_ppaddr = PL_ppaddr[type];
4722     pmop->op_flags = (U8)flags;
4723     pmop->op_private = (U8)(0 | (flags >> 8));
4724
4725     if (PL_hints & HINT_RE_TAINT)
4726         pmop->op_pmflags |= PMf_RETAINT;
4727 #ifdef USE_LOCALE_CTYPE
4728     if (IN_LC_COMPILETIME(LC_CTYPE)) {
4729         set_regex_charset(&(pmop->op_pmflags), REGEX_LOCALE_CHARSET);
4730     }
4731     else
4732 #endif
4733          if (IN_UNI_8_BIT) {
4734         set_regex_charset(&(pmop->op_pmflags), REGEX_UNICODE_CHARSET);
4735     }
4736     if (PL_hints & HINT_RE_FLAGS) {
4737         SV *reflags = Perl_refcounted_he_fetch_pvn(aTHX_
4738          PL_compiling.cop_hints_hash, STR_WITH_LEN("reflags"), 0, 0
4739         );
4740         if (reflags && SvOK(reflags)) pmop->op_pmflags |= SvIV(reflags);
4741         reflags = Perl_refcounted_he_fetch_pvn(aTHX_
4742          PL_compiling.cop_hints_hash, STR_WITH_LEN("reflags_charset"), 0, 0
4743         );
4744         if (reflags && SvOK(reflags)) {
4745             set_regex_charset(&(pmop->op_pmflags), (regex_charset)SvIV(reflags));
4746         }
4747     }
4748
4749
4750 #ifdef USE_ITHREADS
4751     assert(SvPOK(PL_regex_pad[0]));
4752     if (SvCUR(PL_regex_pad[0])) {
4753         /* Pop off the "packed" IV from the end.  */
4754         SV *const repointer_list = PL_regex_pad[0];
4755         const char *p = SvEND(repointer_list) - sizeof(IV);
4756         const IV offset = *((IV*)p);
4757
4758         assert(SvCUR(repointer_list) % sizeof(IV) == 0);
4759
4760         SvEND_set(repointer_list, p);
4761
4762         pmop->op_pmoffset = offset;
4763         /* This slot should be free, so assert this:  */
4764         assert(PL_regex_pad[offset] == &PL_sv_undef);
4765     } else {
4766         SV * const repointer = &PL_sv_undef;
4767         av_push(PL_regex_padav, repointer);
4768         pmop->op_pmoffset = av_tindex(PL_regex_padav);
4769         PL_regex_pad = AvARRAY(PL_regex_padav);
4770     }
4771 #endif
4772
4773     return CHECKOP(type, pmop);
4774 }
4775
4776 /* Given some sort of match op o, and an expression expr containing a
4777  * pattern, either compile expr into a regex and attach it to o (if it's
4778  * constant), or convert expr into a runtime regcomp op sequence (if it's
4779  * not)
4780  *
4781  * isreg indicates that the pattern is part of a regex construct, eg
4782  * $x =~ /pattern/ or split /pattern/, as opposed to $x =~ $pattern or
4783  * split "pattern", which aren't. In the former case, expr will be a list
4784  * if the pattern contains more than one term (eg /a$b/) or if it contains
4785  * a replacement, ie s/// or tr///.
4786  *
4787  * When the pattern has been compiled within a new anon CV (for
4788  * qr/(?{...})/ ), then floor indicates the savestack level just before
4789  * the new sub was created
4790  */
4791
4792 OP *
4793 Perl_pmruntime(pTHX_ OP *o, OP *expr, bool isreg, I32 floor)
4794 {
4795     dVAR;
4796     PMOP *pm;
4797     LOGOP *rcop;
4798     I32 repl_has_vars = 0;
4799     OP* repl = NULL;
4800     bool is_trans = (o->op_type == OP_TRANS || o->op_type == OP_TRANSR);
4801     bool is_compiletime;
4802     bool has_code;
4803
4804     PERL_ARGS_ASSERT_PMRUNTIME;
4805
4806     /* for s/// and tr///, last element in list is the replacement; pop it */
4807
4808     if (is_trans || o->op_type == OP_SUBST) {
4809         OP* kid;
4810         repl = cLISTOPx(expr)->op_last;
4811         kid = cLISTOPx(expr)->op_first;
4812         while (OP_SIBLING(kid) != repl)
4813             kid = OP_SIBLING(kid);
4814         op_sibling_splice(expr, kid, 1, NULL);
4815     }
4816
4817     /* for TRANS, convert LIST/PUSH/CONST into CONST, and pass to pmtrans() */
4818
4819     if (is_trans) {
4820         OP *first, *last;
4821
4822         assert(expr->op_type == OP_LIST);
4823         first = cLISTOPx(expr)->op_first;
4824         last  = cLISTOPx(expr)->op_last;
4825         assert(first->op_type == OP_PUSHMARK);
4826         assert(OP_SIBLING(first) == last);
4827
4828         /* cut 'last' from sibling chain, then free everything else */
4829         op_sibling_splice(expr, first, 1, NULL);
4830         op_free(expr);
4831
4832         return pmtrans(o, last, repl);
4833     }
4834
4835     /* find whether we have any runtime or code elements;
4836      * at the same time, temporarily set the op_next of each DO block;
4837      * then when we LINKLIST, this will cause the DO blocks to be excluded
4838      * from the op_next chain (and from having LINKLIST recursively
4839      * applied to them). We fix up the DOs specially later */
4840
4841     is_compiletime = 1;
4842     has_code = 0;
4843     if (expr->op_type == OP_LIST) {
4844         OP *o;
4845         for (o = cLISTOPx(expr)->op_first; o; o = OP_SIBLING(o)) {
4846             if (o->op_type == OP_NULL && (o->op_flags & OPf_SPECIAL)) {
4847                 has_code = 1;
4848                 assert(!o->op_next && OP_HAS_SIBLING(o));
4849                 o->op_next = OP_SIBLING(o);
4850             }
4851             else if (o->op_type != OP_CONST && o->op_type != OP_PUSHMARK)
4852                 is_compiletime = 0;
4853         }
4854     }
4855     else if (expr->op_type != OP_CONST)
4856         is_compiletime = 0;
4857
4858     LINKLIST(expr);
4859
4860     /* fix up DO blocks; treat each one as a separate little sub;
4861      * also, mark any arrays as LIST/REF */
4862
4863     if (expr->op_type == OP_LIST) {
4864         OP *o;
4865         for (o = cLISTOPx(expr)->op_first; o; o = OP_SIBLING(o)) {
4866
4867             if (o->op_type == OP_PADAV || o->op_type == OP_RV2AV) {
4868                 assert( !(o->op_flags  & OPf_WANT));
4869                 /* push the array rather than its contents. The regex
4870                  * engine will retrieve and join the elements later */
4871                 o->op_flags |= (OPf_WANT_LIST | OPf_REF);
4872                 continue;
4873             }
4874
4875             if (!(o->op_type == OP_NULL && (o->op_flags & OPf_SPECIAL)))
4876                 continue;
4877             o->op_next = NULL; /* undo temporary hack from above */
4878             scalar(o);
4879             LINKLIST(o);
4880             if (cLISTOPo->op_first->op_type == OP_LEAVE) {
4881                 LISTOP *leaveop = cLISTOPx(cLISTOPo->op_first);
4882                 /* skip ENTER */
4883                 assert(leaveop->op_first->op_type == OP_ENTER);
4884                 assert(OP_HAS_SIBLING(leaveop->op_first));
4885                 o->op_next = OP_SIBLING(leaveop->op_first);
4886                 /* skip leave */
4887                 assert(leaveop->op_flags & OPf_KIDS);
4888                 assert(leaveop->op_last->op_next == (OP*)leaveop);
4889                 leaveop->op_next = NULL; /* stop on last op */
4890                 op_null((OP*)leaveop);
4891             }
4892             else {
4893                 /* skip SCOPE */
4894                 OP *scope = cLISTOPo->op_first;
4895                 assert(scope->op_type == OP_SCOPE);
4896                 assert(scope->op_flags & OPf_KIDS);
4897                 scope->op_next = NULL; /* stop on last op */
4898                 op_null(scope);
4899             }
4900             /* have to peep the DOs individually as we've removed it from
4901              * the op_next chain */
4902             CALL_PEEP(o);
4903             S_prune_chain_head(&(o->op_next));
4904             if (is_compiletime)
4905                 /* runtime finalizes as part of finalizing whole tree */
4906                 finalize_optree(o);
4907         }
4908     }
4909     else if (expr->op_type == OP_PADAV || expr->op_type == OP_RV2AV) {
4910         assert( !(expr->op_flags  & OPf_WANT));
4911         /* push the array rather than its contents. The regex
4912          * engine will retrieve and join the elements later */
4913         expr->op_flags |= (OPf_WANT_LIST | OPf_REF);
4914     }
4915
4916     PL_hints |= HINT_BLOCK_SCOPE;
4917     pm = (PMOP*)o;
4918     assert(floor==0 || (pm->op_pmflags & PMf_HAS_CV));
4919
4920     if (is_compiletime) {
4921         U32 rx_flags = pm->op_pmflags & RXf_PMf_COMPILETIME;
4922         regexp_engine const *eng = current_re_engine();
4923
4924         if (o->op_flags & OPf_SPECIAL)
4925             rx_flags |= RXf_SPLIT;
4926
4927         if (!has_code || !eng->op_comp) {
4928             /* compile-time simple constant pattern */
4929
4930             if ((pm->op_pmflags & PMf_HAS_CV) && !has_code) {
4931                 /* whoops! we guessed that a qr// had a code block, but we
4932                  * were wrong (e.g. /[(?{}]/ ). Throw away the PL_compcv
4933                  * that isn't required now. Note that we have to be pretty
4934                  * confident that nothing used that CV's pad while the
4935                  * regex was parsed */
4936                 assert(AvFILLp(PL_comppad) == 0); /* just @_ */
4937                 /* But we know that one op is using this CV's slab. */
4938                 cv_forget_slab(PL_compcv);
4939                 LEAVE_SCOPE(floor);
4940                 pm->op_pmflags &= ~PMf_HAS_CV;
4941             }
4942
4943             PM_SETRE(pm,
4944                 eng->op_comp
4945                     ? eng->op_comp(aTHX_ NULL, 0, expr, eng, NULL, NULL,
4946                                         rx_flags, pm->op_pmflags)
4947                     : Perl_re_op_compile(aTHX_ NULL, 0, expr, eng, NULL, NULL,
4948                                         rx_flags, pm->op_pmflags)
4949             );
4950             op_free(expr);
4951         }
4952         else {
4953             /* compile-time pattern that includes literal code blocks */
4954             REGEXP* re = eng->op_comp(aTHX_ NULL, 0, expr, eng, NULL, NULL,
4955                         rx_flags,
4956                         (pm->op_pmflags |
4957                             ((PL_hints & HINT_RE_EVAL) ? PMf_USE_RE_EVAL : 0))
4958                     );
4959             PM_SETRE(pm, re);
4960             if (pm->op_pmflags & PMf_HAS_CV) {
4961                 CV *cv;
4962                 /* this QR op (and the anon sub we embed it in) is never
4963                  * actually executed. It's just a placeholder where we can
4964                  * squirrel away expr in op_code_list without the peephole
4965                  * optimiser etc processing it for a second time */
4966                 OP *qr = newPMOP(OP_QR, 0);
4967                 ((PMOP*)qr)->op_code_list = expr;
4968
4969                 /* handle the implicit sub{} wrapped round the qr/(?{..})/ */
4970                 SvREFCNT_inc_simple_void(PL_compcv);
4971                 cv = newATTRSUB(floor, 0, NULL, NULL, qr);
4972                 ReANY(re)->qr_anoncv = cv;
4973
4974                 /* attach the anon CV to the pad so that
4975                  * pad_fixup_inner_anons() can find it */
4976                 (void)pad_add_anon(cv, o->op_type);
4977                 SvREFCNT_inc_simple_void(cv);
4978             }
4979             else {
4980                 pm->op_code_list = expr;
4981             }
4982         }
4983     }
4984     else {
4985         /* runtime pattern: build chain of regcomp etc ops */
4986         bool reglist;
4987         PADOFFSET cv_targ = 0;
4988
4989         reglist = isreg && expr->op_type == OP_LIST;
4990         if (reglist)
4991             op_null(expr);
4992
4993         if (has_code) {
4994             pm->op_code_list = expr;
4995             /* don't free op_code_list; its ops are embedded elsewhere too */
4996             pm->op_pmflags |= PMf_CODELIST_PRIVATE;
4997         }
4998
4999         if (o->op_flags & OPf_SPECIAL)
5000             pm->op_pmflags |= PMf_SPLIT;
5001
5002         /* the OP_REGCMAYBE is a placeholder in the non-threaded case
5003          * to allow its op_next to be pointed past the regcomp and
5004          * preceding stacking ops;
5005          * OP_REGCRESET is there to reset taint before executing the
5006          * stacking ops */
5007         if (pm->op_pmflags & PMf_KEEP || TAINTING_get)
5008             expr = newUNOP((TAINTING_get ? OP_REGCRESET : OP_REGCMAYBE),0,expr);
5009
5010         if (pm->op_pmflags & PMf_HAS_CV) {
5011             /* we have a runtime qr with literal code. This means
5012              * that the qr// has been wrapped in a new CV, which
5013              * means that runtime consts, vars etc will have been compiled
5014              * against a new pad. So... we need to execute those ops
5015              * within the environment of the new CV. So wrap them in a call
5016              * to a new anon sub. i.e. for
5017              *
5018              *     qr/a$b(?{...})/,
5019              *
5020              * we build an anon sub that looks like
5021              *
5022              *     sub { "a", $b, '(?{...})' }
5023              *
5024              * and call it, passing the returned list to regcomp.
5025              * Or to put it another way, the list of ops that get executed
5026              * are:
5027              *
5028              *     normal              PMf_HAS_CV
5029              *     ------              -------------------
5030              *                         pushmark (for regcomp)
5031              *                         pushmark (for entersub)
5032              *                         pushmark (for refgen)
5033              *                         anoncode
5034              *                         refgen
5035              *                         entersub
5036              *     regcreset                  regcreset
5037              *     pushmark                   pushmark
5038              *     const("a")                 const("a")
5039              *     gvsv(b)                    gvsv(b)
5040              *     const("(?{...})")          const("(?{...})")
5041              *                                leavesub
5042              *     regcomp             regcomp
5043              */
5044
5045             SvREFCNT_inc_simple_void(PL_compcv);
5046             /* these lines are just an unrolled newANONATTRSUB */
5047             expr = newSVOP(OP_ANONCODE, 0,
5048                     MUTABLE_SV(newATTRSUB(floor, 0, NULL, NULL, expr)));
5049             cv_targ = expr->op_targ;
5050             expr = newUNOP(OP_REFGEN, 0, expr);
5051
5052             expr = list(force_list(newUNOP(OP_ENTERSUB, 0, scalar(expr)), 1));
5053         }
5054
5055         rcop = S_alloc_LOGOP(aTHX_ OP_REGCOMP, scalar(expr), o);
5056         rcop->op_ppaddr = PL_ppaddr[OP_REGCOMP];
5057         rcop->op_flags |=  ((PL_hints & HINT_RE_EVAL) ? OPf_SPECIAL : 0)
5058                            | (reglist ? OPf_STACKED : 0);
5059         rcop->op_targ = cv_targ;
5060
5061         /* /$x/ may cause an eval, since $x might be qr/(?{..})/  */
5062         if (PL_hints & HINT_RE_EVAL) PL_cv_has_eval = 1;
5063
5064         /* establish postfix order */
5065         if (expr->op_type == OP_REGCRESET || expr->op_type == OP_REGCMAYBE) {
5066             LINKLIST(expr);
5067             rcop->op_next = expr;
5068             ((UNOP*)expr)->op_first->op_next = (OP*)rcop;
5069         }
5070         else {
5071             rcop->op_next = LINKLIST(expr);
5072             expr->op_next = (OP*)rcop;
5073         }
5074
5075         op_prepend_elem(o->op_type, scalar((OP*)rcop), o);
5076     }
5077
5078     if (repl) {
5079         OP *curop = repl;
5080         bool konst;
5081         /* If we are looking at s//.../e with a single statement, get past
5082            the implicit do{}. */
5083         if (curop->op_type == OP_NULL && curop->op_flags & OPf_KIDS
5084              && cUNOPx(curop)->op_first->op_type == OP_SCOPE
5085              && cUNOPx(curop)->op_first->op_flags & OPf_KIDS)
5086          {
5087             OP *sib;
5088             OP *kid = cUNOPx(cUNOPx(curop)->op_first)->op_first;
5089             if (kid->op_type == OP_NULL && (sib = OP_SIBLING(kid))
5090                      && !OP_HAS_SIBLING(sib))
5091                 curop = sib;
5092         }
5093         if (curop->op_type == OP_CONST)
5094             konst = TRUE;
5095         else if (( (curop->op_type == OP_RV2SV ||
5096                     curop->op_type == OP_RV2AV ||
5097                     curop->op_type == OP_RV2HV ||
5098                     curop->op_type == OP_RV2GV)
5099                    && cUNOPx(curop)->op_first
5100                    && cUNOPx(curop)->op_first->op_type == OP_GV )
5101                 || curop->op_type == OP_PADSV
5102                 || curop->op_type == OP_PADAV
5103                 || curop->op_type == OP_PADHV
5104                 || curop->op_type == OP_PADANY) {
5105             repl_has_vars = 1;
5106             konst = TRUE;
5107         }
5108         else konst = FALSE;
5109         if (konst
5110             && !(repl_has_vars
5111                  && (!PM_GETRE(pm)
5112                      || !RX_PRELEN(PM_GETRE(pm))
5113                      || RX_EXTFLAGS(PM_GETRE(pm)) & RXf_EVAL_SEEN)))
5114         {
5115             pm->op_pmflags |= PMf_CONST;        /* const for long enough */
5116             op_prepend_elem(o->op_type, scalar(repl), o);
5117         }
5118         else {
5119             rcop = S_alloc_LOGOP(aTHX_ OP_SUBSTCONT, scalar(repl), o);
5120             rcop->op_ppaddr = PL_ppaddr[OP_SUBSTCONT];
5121             rcop->op_private = 1;
5122
5123             /* establish postfix order */
5124             rcop->op_next = LINKLIST(repl);
5125             repl->op_next = (OP*)rcop;
5126
5127             pm->op_pmreplrootu.op_pmreplroot = scalar((OP*)rcop);
5128             assert(!(pm->op_pmflags & PMf_ONCE));
5129             pm->op_pmstashstartu.op_pmreplstart = LINKLIST(rcop);
5130             rcop->op_next = 0;
5131         }
5132     }
5133
5134     return (OP*)pm;
5135 }
5136
5137 /*
5138 =for apidoc Am|OP *|newSVOP|I32 type|I32 flags|SV *sv
5139
5140 Constructs, checks, and returns an op of any type that involves an
5141 embedded SV.  I<type> is the opcode.  I<flags> gives the eight bits
5142 of C<op_flags>.  I<sv> gives the SV to embed in the op; this function
5143 takes ownership of one reference to it.
5144
5145 =cut
5146 */
5147
5148 OP *
5149 Perl_newSVOP(pTHX_ I32 type, I32 flags, SV *sv)
5150 {
5151     dVAR;
5152     SVOP *svop;
5153
5154     PERL_ARGS_ASSERT_NEWSVOP;
5155
5156     assert((PL_opargs[type] & OA_CLASS_MASK) == OA_SVOP
5157         || (PL_opargs[type] & OA_CLASS_MASK) == OA_PVOP_OR_SVOP
5158         || (PL_opargs[type] & OA_CLASS_MASK) == OA_FILESTATOP);
5159
5160     NewOp(1101, svop, 1, SVOP);
5161     svop->op_type = (OPCODE)type;
5162     svop->op_ppaddr = PL_ppaddr[type];
5163     svop->op_sv = sv;
5164     svop->op_next = (OP*)svop;
5165     svop->op_flags = (U8)flags;
5166     svop->op_private = (U8)(0 | (flags >> 8));
5167     if (PL_opargs[type] & OA_RETSCALAR)
5168         scalar((OP*)svop);
5169     if (PL_opargs[type] & OA_TARGET)
5170         svop->op_targ = pad_alloc(type, SVs_PADTMP);
5171     return CHECKOP(type, svop);
5172 }
5173
5174 #ifdef USE_ITHREADS
5175
5176 /*
5177 =for apidoc Am|OP *|newPADOP|I32 type|I32 flags|SV *sv
5178
5179 Constructs, checks, and returns an op of any type that involves a
5180 reference to a pad element.  I<type> is the opcode.  I<flags> gives the
5181 eight bits of C<op_flags>.  A pad slot is automatically allocated, and
5182 is populated with I<sv>; this function takes ownership of one reference
5183 to it.
5184
5185 This function only exists if Perl has been compiled to use ithreads.
5186
5187 =cut
5188 */
5189
5190 OP *
5191 Perl_newPADOP(pTHX_ I32 type, I32 flags, SV *sv)
5192 {
5193     dVAR;
5194     PADOP *padop;
5195
5196     PERL_ARGS_ASSERT_NEWPADOP;
5197
5198     assert((PL_opargs[type] & OA_CLASS_MASK) == OA_SVOP
5199         || (PL_opargs[type] & OA_CLASS_MASK) == OA_PVOP_OR_SVOP
5200         || (PL_opargs[type] & OA_CLASS_MASK) == OA_FILESTATOP);
5201
5202     NewOp(1101, padop, 1, PADOP);
5203     padop->op_type = (OPCODE)type;
5204     padop->op_ppaddr = PL_ppaddr[type];
5205     padop->op_padix = pad_alloc(type, SVs_PADTMP);
5206     SvREFCNT_dec(PAD_SVl(padop->op_padix));
5207     PAD_SETSV(padop->op_padix, sv);
5208     assert(sv);
5209     padop->op_next = (OP*)padop;
5210     padop->op_flags = (U8)flags;
5211     if (PL_opargs[type] & OA_RETSCALAR)
5212         scalar((OP*)padop);
5213     if (PL_opargs[type] & OA_TARGET)
5214         padop->op_targ = pad_alloc(type, SVs_PADTMP);
5215     return CHECKOP(type, padop);
5216 }
5217
5218 #endif /* USE_ITHREADS */
5219
5220 /*
5221 =for apidoc Am|OP *|newGVOP|I32 type|I32 flags|GV *gv
5222
5223 Constructs, checks, and returns an op of any type that involves an
5224 embedded reference to a GV.  I<type> is the opcode.  I<flags> gives the
5225 eight bits of C<op_flags>.  I<gv> identifies the GV that the op should
5226 reference; calling this function does not transfer ownership of any
5227 reference to it.
5228
5229 =cut
5230 */
5231
5232 OP *
5233 Perl_newGVOP(pTHX_ I32 type, I32 flags, GV *gv)
5234 {
5235     PERL_ARGS_ASSERT_NEWGVOP;
5236
5237 #ifdef USE_ITHREADS
5238     GvIN_PAD_on(gv);
5239     return newPADOP(type, flags, SvREFCNT_inc_simple_NN(gv));
5240 #else
5241     return newSVOP(type, flags, SvREFCNT_inc_simple_NN(gv));
5242 #endif
5243 }
5244
5245 /*
5246 =for apidoc Am|OP *|newPVOP|I32 type|I32 flags|char *pv
5247
5248 Constructs, checks, and returns an op of any type that involves an
5249 embedded C-level pointer (PV).  I<type> is the opcode.  I<flags> gives
5250 the eight bits of C<op_flags>.  I<pv> supplies the C-level pointer, which
5251 must have been allocated using C<PerlMemShared_malloc>; the memory will
5252 be freed when the op is destroyed.
5253
5254 =cut
5255 */
5256
5257 OP *
5258 Perl_newPVOP(pTHX_ I32 type, I32 flags, char *pv)
5259 {
5260     dVAR;
5261     const bool utf8 = cBOOL(flags & SVf_UTF8);
5262     PVOP *pvop;
5263
5264     flags &= ~SVf_UTF8;
5265
5266     assert((PL_opargs[type] & OA_CLASS_MASK) == OA_PVOP_OR_SVOP
5267         || type == OP_RUNCV
5268         || (PL_opargs[type] & OA_CLASS_MASK) == OA_LOOPEXOP);
5269
5270     NewOp(1101, pvop, 1, PVOP);
5271     pvop->op_type = (OPCODE)type;
5272     pvop->op_ppaddr = PL_ppaddr[type];
5273     pvop->op_pv = pv;
5274     pvop->op_next = (OP*)pvop;
5275     pvop->op_flags = (U8)flags;
5276     pvop->op_private = utf8 ? OPpPV_IS_UTF8 : 0;
5277     if (PL_opargs[type] & OA_RETSCALAR)
5278         scalar((OP*)pvop);
5279     if (PL_opargs[type] & OA_TARGET)
5280         pvop->op_targ = pad_alloc(type, SVs_PADTMP);
5281     return CHECKOP(type, pvop);
5282 }
5283
5284 void
5285 Perl_package(pTHX_ OP *o)
5286 {
5287     SV *const sv = cSVOPo->op_sv;
5288
5289     PERL_ARGS_ASSERT_PACKAGE;
5290
5291     SAVEGENERICSV(PL_curstash);
5292     save_item(PL_curstname);
5293
5294     PL_curstash = (HV *)SvREFCNT_inc(gv_stashsv(sv, GV_ADD));
5295
5296     sv_setsv(PL_curstname, sv);
5297
5298     PL_hints |= HINT_BLOCK_SCOPE;
5299     PL_parser->copline = NOLINE;
5300     PL_parser->expect = XSTATE;
5301
5302     op_free(o);
5303 }
5304
5305 void
5306 Perl_package_version( pTHX_ OP *v )
5307 {
5308     U32 savehints = PL_hints;
5309     PERL_ARGS_ASSERT_PACKAGE_VERSION;
5310     PL_hints &= ~HINT_STRICT_VARS;
5311     sv_setsv( GvSV(gv_fetchpvs("VERSION", GV_ADDMULTI, SVt_PV)), cSVOPx(v)->op_sv );
5312     PL_hints = savehints;
5313     op_free(v);
5314 }
5315
5316 void
5317 Perl_utilize(pTHX_ int aver, I32 floor, OP *version, OP *idop, OP *arg)
5318 {
5319     OP *pack;
5320     OP *imop;
5321     OP *veop;
5322     SV *use_version = NULL;
5323
5324     PERL_ARGS_ASSERT_UTILIZE;
5325
5326     if (idop->op_type != OP_CONST)
5327         Perl_croak(aTHX_ "Module name must be constant");
5328
5329     veop = NULL;
5330
5331     if (version) {
5332         SV * const vesv = ((SVOP*)version)->op_sv;
5333
5334         if (!arg && !SvNIOKp(vesv)) {
5335             arg = version;
5336         }
5337         else {
5338             OP *pack;
5339             SV *meth;
5340
5341             if (version->op_type != OP_CONST || !SvNIOKp(vesv))
5342                 Perl_croak(aTHX_ "Version number must be a constant number");
5343
5344             /* Make copy of idop so we don't free it twice */
5345             pack = newSVOP(OP_CONST, 0, newSVsv(((SVOP*)idop)->op_sv));
5346
5347             /* Fake up a method call to VERSION */
5348             meth = newSVpvs_share("VERSION");
5349             veop = convert(OP_ENTERSUB, OPf_STACKED|OPf_SPECIAL,
5350                             op_append_elem(OP_LIST,
5351                                         op_prepend_elem(OP_LIST, pack, list(version)),
5352                                         newSVOP(OP_METHOD_NAMED, 0, meth)));
5353         }
5354     }
5355
5356     /* Fake up an import/unimport */
5357     if (arg && arg->op_type == OP_STUB) {
5358         imop = arg;             /* no import on explicit () */
5359     }
5360     else if (SvNIOKp(((SVOP*)idop)->op_sv)) {
5361         imop = NULL;            /* use 5.0; */
5362         if (aver)
5363             use_version = ((SVOP*)idop)->op_sv;
5364         else
5365             idop->op_private |= OPpCONST_NOVER;
5366     }
5367     else {
5368         SV *meth;
5369
5370         /* Make copy of idop so we don't free it twice */
5371         pack = newSVOP(OP_CONST, 0, newSVsv(((SVOP*)idop)->op_sv));
5372
5373         /* Fake up a method call to import/unimport */
5374         meth = aver
5375             ? newSVpvs_share("import") : newSVpvs_share("unimport");
5376         imop = convert(OP_ENTERSUB, OPf_STACKED|OPf_SPECIAL,
5377                        op_append_elem(OP_LIST,
5378                                    op_prepend_elem(OP_LIST, pack, list(arg)),
5379                                    newSVOP(OP_METHOD_NAMED, 0, meth)));
5380     }
5381
5382     /* Fake up the BEGIN {}, which does its thing immediately. */
5383     newATTRSUB(floor,
5384         newSVOP(OP_CONST, 0, newSVpvs_share("BEGIN")),
5385         NULL,
5386         NULL,
5387         op_append_elem(OP_LINESEQ,
5388             op_append_elem(OP_LINESEQ,
5389                 newSTATEOP(0, NULL, newUNOP(OP_REQUIRE, 0, idop)),
5390                 newSTATEOP(0, NULL, veop)),
5391             newSTATEOP(0, NULL, imop) ));
5392
5393     if (use_version) {
5394         /* Enable the
5395          * feature bundle that corresponds to the required version. */
5396         use_version = sv_2mortal(new_version(use_version));
5397         S_enable_feature_bundle(aTHX_ use_version);
5398
5399         /* If a version >= 5.11.0 is requested, strictures are on by default! */
5400         if (vcmp(use_version,
5401                  sv_2mortal(upg_version(newSVnv(5.011000), FALSE))) >= 0) {
5402             if (!(PL_hints & HINT_EXPLICIT_STRICT_REFS))
5403                 PL_hints |= HINT_STRICT_REFS;
5404             if (!(PL_hints & HINT_EXPLICIT_STRICT_SUBS))
5405                 PL_hints |= HINT_STRICT_SUBS;
5406             if (!(PL_hints & HINT_EXPLICIT_STRICT_VARS))
5407                 PL_hints |= HINT_STRICT_VARS;
5408         }
5409         /* otherwise they are off */
5410         else {
5411             if (!(PL_hints & HINT_EXPLICIT_STRICT_REFS))
5412                 PL_hints &= ~HINT_STRICT_REFS;
5413             if (!(PL_hints & HINT_EXPLICIT_STRICT_SUBS))
5414                 PL_hints &= ~HINT_STRICT_SUBS;
5415             if (!(PL_hints & HINT_EXPLICIT_STRICT_VARS))
5416                 PL_hints &= ~HINT_STRICT_VARS;
5417         }
5418     }
5419
5420     /* The "did you use incorrect case?" warning used to be here.
5421      * The problem is that on case-insensitive filesystems one
5422      * might get false positives for "use" (and "require"):
5423      * "use Strict" or "require CARP" will work.  This causes
5424      * portability problems for the script: in case-strict
5425      * filesystems the script will stop working.
5426      *
5427      * The "incorrect case" warning checked whether "use Foo"
5428      * imported "Foo" to your namespace, but that is wrong, too:
5429      * there is no requirement nor promise in the language that
5430      * a Foo.pm should or would contain anything in package "Foo".
5431      *
5432      * There is very little Configure-wise that can be done, either:
5433      * the case-sensitivity of the build filesystem of Perl does not
5434      * help in guessing the case-sensitivity of the runtime environment.
5435      */
5436
5437     PL_hints |= HINT_BLOCK_SCOPE;
5438     PL_parser->copline = NOLINE;
5439     PL_parser->expect = XSTATE;
5440     PL_cop_seqmax++; /* Purely for B::*'s benefit */
5441     if (PL_cop_seqmax == PERL_PADSEQ_INTRO) /* not a legal value */
5442         PL_cop_seqmax++;
5443
5444 }
5445
5446 /*
5447 =head1 Embedding Functions
5448
5449 =for apidoc load_module
5450
5451 Loads the module whose name is pointed to by the string part of name.
5452 Note that the actual module name, not its filename, should be given.
5453 Eg, "Foo::Bar" instead of "Foo/Bar.pm".  flags can be any of
5454 PERL_LOADMOD_DENY, PERL_LOADMOD_NOIMPORT, or PERL_LOADMOD_IMPORT_OPS
5455 (or 0 for no flags).  ver, if specified
5456 and not NULL, provides version semantics
5457 similar to C<use Foo::Bar VERSION>.  The optional trailing SV*
5458 arguments can be used to specify arguments to the module's import()
5459 method, similar to C<use Foo::Bar VERSION LIST>.  They must be
5460 terminated with a final NULL pointer.  Note that this list can only
5461 be omitted when the PERL_LOADMOD_NOIMPORT flag has been used.
5462 Otherwise at least a single NULL pointer to designate the default
5463 import list is required.
5464
5465 The reference count for each specified C<SV*> parameter is decremented.
5466
5467 =cut */
5468
5469 void
5470 Perl_load_module(pTHX_ U32 flags, SV *name, SV *ver, ...)
5471 {
5472     va_list args;
5473
5474     PERL_ARGS_ASSERT_LOAD_MODULE;
5475
5476     va_start(args, ver);
5477     vload_module(flags, name, ver, &args);
5478     va_end(args);
5479 }
5480
5481 #ifdef PERL_IMPLICIT_CONTEXT
5482 void
5483 Perl_load_module_nocontext(U32 flags, SV *name, SV *ver, ...)
5484 {
5485     dTHX;
5486     va_list args;
5487     PERL_ARGS_ASSERT_LOAD_MODULE_NOCONTEXT;
5488     va_start(args, ver);
5489     vload_module(flags, name, ver, &args);
5490     va_end(args);
5491 }
5492 #endif
5493
5494 void
5495 Perl_vload_module(pTHX_ U32 flags, SV *name, SV *ver, va_list *args)
5496 {
5497     OP *veop, *imop;
5498     OP * const modname = newSVOP(OP_CONST, 0, name);
5499
5500     PERL_ARGS_ASSERT_VLOAD_MODULE;
5501
5502     modname->op_private |= OPpCONST_BARE;
5503     if (ver) {
5504         veop = newSVOP(OP_CONST, 0, ver);
5505     }
5506     else
5507         veop = NULL;
5508     if (flags & PERL_LOADMOD_NOIMPORT) {
5509         imop = sawparens(newNULLLIST());
5510     }
5511     else if (flags & PERL_LOADMOD_IMPORT_OPS) {
5512         imop = va_arg(*args, OP*);
5513     }
5514     else {
5515         SV *sv;
5516         imop = NULL;
5517         sv = va_arg(*args, SV*);
5518         while (sv) {
5519             imop = op_append_elem(OP_LIST, imop, newSVOP(OP_CONST, 0, sv));
5520             sv = va_arg(*args, SV*);
5521         }
5522     }
5523
5524     /* utilize() fakes up a BEGIN { require ..; import ... }, so make sure
5525      * that it has a PL_parser to play with while doing that, and also
5526      * that it doesn't mess with any existing parser, by creating a tmp
5527      * new parser with lex_start(). This won't actually be used for much,
5528      * since pp_require() will create another parser for the real work.
5529      * The ENTER/LEAVE pair protect callers from any side effects of use.  */
5530
5531     ENTER;
5532     SAVEVPTR(PL_curcop);
5533     lex_start(NULL, NULL, LEX_START_SAME_FILTER);
5534     utilize(!(flags & PERL_LOADMOD_DENY), start_subparse(FALSE, 0),
5535             veop, modname, imop);
5536     LEAVE;
5537 }
5538
5539 PERL_STATIC_INLINE OP *
5540 S_new_entersubop(pTHX_ GV *gv, OP *arg)
5541 {
5542     return newUNOP(OP_ENTERSUB, OPf_STACKED,
5543                    newLISTOP(OP_LIST, 0, arg,
5544                              newUNOP(OP_RV2CV, 0,
5545                                      newGVOP(OP_GV, 0, gv))));
5546 }
5547
5548 OP *
5549 Perl_dofile(pTHX_ OP *term, I32 force_builtin)
5550 {
5551     OP *doop;
5552     GV *gv;
5553
5554     PERL_ARGS_ASSERT_DOFILE;
5555
5556     if (!force_builtin && (gv = gv_override("do", 2))) {
5557         doop = S_new_entersubop(aTHX_ gv, term);
5558     }
5559     else {
5560         doop = newUNOP(OP_DOFILE, 0, scalar(term));
5561     }
5562     return doop;
5563 }
5564
5565 /*
5566 =head1 Optree construction
5567
5568 =for apidoc Am|OP *|newSLICEOP|I32 flags|OP *subscript|OP *listval
5569
5570 Constructs, checks, and returns an C<lslice> (list slice) op.  I<flags>
5571 gives the eight bits of C<op_flags>, except that C<OPf_KIDS> will
5572 be set automatically, and, shifted up eight bits, the eight bits of
5573 C<op_private>, except that the bit with value 1 or 2 is automatically
5574 set as required.  I<listval> and I<subscript> supply the parameters of
5575 the slice; they are consumed by this function and become part of the
5576 constructed op tree.
5577
5578 =cut
5579 */
5580
5581 OP *
5582 Perl_newSLICEOP(pTHX_ I32 flags, OP *subscript, OP *listval)
5583 {
5584     return newBINOP(OP_LSLICE, flags,
5585             list(force_list(subscript, 1)),
5586             list(force_list(listval,   1)) );
5587 }
5588
5589 STATIC I32
5590 S_is_list_assignment(pTHX_ const OP *o)
5591 {
5592     unsigned type;
5593     U8 flags;
5594
5595     if (!o)
5596         return TRUE;
5597
5598     if ((o->op_type == OP_NULL) && (o->op_flags & OPf_KIDS))
5599         o = cUNOPo->op_first;
5600
5601     flags = o->op_flags;
5602     type = o->op_type;
5603     if (type == OP_COND_EXPR) {
5604         OP * const sib = OP_SIBLING(cLOGOPo->op_first);
5605         const I32 t = is_list_assignment(sib);
5606         const I32 f = is_list_assignment(OP_SIBLING(sib));
5607
5608         if (t && f)
5609             return TRUE;
5610         if (t || f)
5611             yyerror("Assignment to both a list and a scalar");
5612         return FALSE;
5613     }
5614
5615     if (type == OP_LIST &&
5616         (flags & OPf_WANT) == OPf_WANT_SCALAR &&
5617         o->op_private & OPpLVAL_INTRO)
5618         return FALSE;
5619
5620     if (type == OP_LIST || flags & OPf_PARENS ||
5621         type == OP_RV2AV || type == OP_RV2HV ||
5622         type == OP_ASLICE || type == OP_HSLICE ||
5623         type == OP_KVASLICE || type == OP_KVHSLICE)
5624         return TRUE;
5625
5626     if (type == OP_PADAV || type == OP_PADHV)
5627         return TRUE;
5628
5629     if (type == OP_RV2SV)
5630         return FALSE;
5631
5632     return FALSE;
5633 }
5634
5635 /*
5636   Helper function for newASSIGNOP to detection commonality between the
5637   lhs and the rhs.  Marks all variables with PL_generation.  If it
5638   returns TRUE the assignment must be able to handle common variables.
5639 */
5640 PERL_STATIC_INLINE bool
5641 S_aassign_common_vars(pTHX_ OP* o)
5642 {
5643     OP *curop;
5644     for (curop = cUNOPo->op_first; curop; curop = OP_SIBLING(curop)) {
5645         if (PL_opargs[curop->op_type] & OA_DANGEROUS) {
5646             if (curop->op_type == OP_GV) {
5647                 GV *gv = cGVOPx_gv(curop);
5648                 if (gv == PL_defgv
5649                     || (int)GvASSIGN_GENERATION(gv) == PL_generation)
5650                     return TRUE;
5651                 GvASSIGN_GENERATION_set(gv, PL_generation);
5652             }
5653             else if (curop->op_type == OP_PADSV ||
5654                 curop->op_type == OP_PADAV ||
5655                 curop->op_type == OP_PADHV ||
5656                 curop->op_type == OP_PADANY)
5657                 {
5658                     if (PAD_COMPNAME_GEN(curop->op_targ)
5659                         == (STRLEN)PL_generation)
5660                         return TRUE;
5661                     PAD_COMPNAME_GEN_set(curop->op_targ, PL_generation);
5662
5663                 }
5664             else if (curop->op_type == OP_RV2CV)
5665                 return TRUE;
5666             else if (curop->op_type == OP_RV2SV ||
5667                 curop->op_type == OP_RV2AV ||
5668                 curop->op_type == OP_RV2HV ||
5669                 curop->op_type == OP_RV2GV) {
5670                 if (cUNOPx(curop)->op_first->op_type != OP_GV)  /* funny deref? */
5671                     return TRUE;
5672             }
5673             else if (curop->op_type == OP_PUSHRE) {
5674                 GV *const gv =
5675 #ifdef USE_ITHREADS
5676                     ((PMOP*)curop)->op_pmreplrootu.op_pmtargetoff
5677                         ? MUTABLE_GV(PAD_SVl(((PMOP*)curop)->op_pmreplrootu.op_pmtargetoff))
5678                         : NULL;
5679 #else
5680                     ((PMOP*)curop)->op_pmreplrootu.op_pmtargetgv;
5681 #endif
5682                 if (gv) {
5683                     if (gv == PL_defgv
5684                         || (int)GvASSIGN_GENERATION(gv) == PL_generation)
5685                         return TRUE;
5686                     GvASSIGN_GENERATION_set(gv, PL_generation);
5687                 }
5688             }
5689             else
5690                 return TRUE;
5691         }
5692
5693         if (curop->op_flags & OPf_KIDS) {
5694             if (aassign_common_vars(curop))
5695                 return TRUE;
5696         }
5697     }
5698     return FALSE;
5699 }
5700
5701 /*
5702 =for apidoc Am|OP *|newASSIGNOP|I32 flags|OP *left|I32 optype|OP *right
5703
5704 Constructs, checks, and returns an assignment op.  I<left> and I<right>
5705 supply the parameters of the assignment; they are consumed by this
5706 function and become part of the constructed op tree.
5707
5708 If I<optype> is C<OP_ANDASSIGN>, C<OP_ORASSIGN>, or C<OP_DORASSIGN>, then
5709 a suitable conditional optree is constructed.  If I<optype> is the opcode
5710 of a binary operator, such as C<OP_BIT_OR>, then an op is constructed that
5711 performs the binary operation and assigns the result to the left argument.
5712 Either way, if I<optype> is non-zero then I<flags> has no effect.
5713
5714 If I<optype> is zero, then a plain scalar or list assignment is
5715 constructed.  Which type of assignment it is is automatically determined.
5716 I<flags> gives the eight bits of C<op_flags>, except that C<OPf_KIDS>
5717 will be set automatically, and, shifted up eight bits, the eight bits
5718 of C<op_private>, except that the bit with value 1 or 2 is automatically
5719 set as required.
5720
5721 =cut
5722 */
5723
5724 OP *
5725 Perl_newASSIGNOP(pTHX_ I32 flags, OP *left, I32 optype, OP *right)
5726 {
5727     OP *o;
5728
5729     if (optype) {
5730         if (optype == OP_ANDASSIGN || optype == OP_ORASSIGN || optype == OP_DORASSIGN) {
5731             return newLOGOP(optype, 0,
5732                 op_lvalue(scalar(left), optype),
5733                 newUNOP(OP_SASSIGN, 0, scalar(right)));
5734         }
5735         else {
5736             return newBINOP(optype, OPf_STACKED,
5737                 op_lvalue(scalar(left), optype), scalar(right));
5738         }
5739     }
5740
5741     if (is_list_assignment(left)) {
5742         static const char no_list_state[] = "Initialization of state variables"
5743             " in list context currently forbidden";
5744         OP *curop;
5745         bool maybe_common_vars = TRUE;
5746
5747         if (left->op_type == OP_ASLICE || left->op_type == OP_HSLICE)
5748             left->op_private &= ~ OPpSLICEWARNING;
5749
5750         PL_modcount = 0;
5751         left = op_lvalue(left, OP_AASSIGN);
5752         curop = list(force_list(left, 1));
5753         o = newBINOP(OP_AASSIGN, flags, list(force_list(right, 1)), curop);
5754         o->op_private = (U8)(0 | (flags >> 8));
5755
5756         if (OP_TYPE_IS_OR_WAS(left, OP_LIST))
5757         {
5758             OP* lop = ((LISTOP*)left)->op_first;
5759             maybe_common_vars = FALSE;
5760             while (lop) {
5761                 if (lop->op_type == OP_PADSV ||
5762                     lop->op_type == OP_PADAV ||
5763                     lop->op_type == OP_PADHV ||
5764                     lop->op_type == OP_PADANY) {
5765                     if (!(lop->op_private & OPpLVAL_INTRO))
5766                         maybe_common_vars = TRUE;
5767
5768                     if (lop->op_private & OPpPAD_STATE) {
5769                         if (left->op_private & OPpLVAL_INTRO) {
5770                             /* Each variable in state($a, $b, $c) = ... */
5771                         }
5772                         else {
5773                             /* Each state variable in
5774                                (state $a, my $b, our $c, $d, undef) = ... */
5775                         }
5776                         yyerror(no_list_state);
5777                     } else {
5778                         /* Each my variable in
5779                            (state $a, my $b, our $c, $d, undef) = ... */
5780                     }
5781                 } else if (lop->op_type == OP_UNDEF ||
5782                            OP_TYPE_IS_OR_WAS(lop, OP_PUSHMARK)) {
5783                     /* undef may be interesting in
5784                        (state $a, undef, state $c) */
5785                 } else {
5786                     /* Other ops in the list. */
5787                     maybe_common_vars = TRUE;
5788                 }
5789                 lop = OP_SIBLING(lop);
5790             }
5791         }
5792         else if ((left->op_private & OPpLVAL_INTRO)
5793                 && (   left->op_type == OP_PADSV
5794                     || left->op_type == OP_PADAV
5795                     || left->op_type == OP_PADHV
5796                     || left->op_type == OP_PADANY))
5797         {
5798             if (left->op_type == OP_PADSV) maybe_common_vars = FALSE;
5799             if (left->op_private & OPpPAD_STATE) {
5800                 /* All single variable list context state assignments, hence
5801                    state ($a) = ...
5802                    (state $a) = ...
5803                    state @a = ...
5804                    state (@a) = ...
5805                    (state @a) = ...
5806                    state %a = ...
5807                    state (%a) = ...
5808                    (state %a) = ...
5809                 */
5810                 yyerror(no_list_state);
5811             }
5812         }
5813
5814         /* PL_generation sorcery:
5815          * an assignment like ($a,$b) = ($c,$d) is easier than
5816          * ($a,$b) = ($c,$a), since there is no need for temporary vars.
5817          * To detect whether there are common vars, the global var
5818          * PL_generation is incremented for each assign op we compile.
5819          * Then, while compiling the assign op, we run through all the
5820          * variables on both sides of the assignment, setting a spare slot
5821          * in each of them to PL_generation. If any of them already have
5822          * that value, we know we've got commonality.  We could use a
5823          * single bit marker, but then we'd have to make 2 passes, first
5824          * to clear the flag, then to test and set it.  To find somewhere
5825          * to store these values, evil chicanery is done with SvUVX().
5826          */
5827
5828         if (maybe_common_vars) {
5829             PL_generation++;
5830             if (aassign_common_vars(o))
5831                 o->op_private |= OPpASSIGN_COMMON;
5832             LINKLIST(o);
5833         }
5834
5835         if (right && right->op_type == OP_SPLIT) {
5836             OP* tmpop = ((LISTOP*)right)->op_first;
5837             if (tmpop && (tmpop->op_type == OP_PUSHRE)) {
5838                 PMOP * const pm = (PMOP*)tmpop;
5839                 if (left->op_type == OP_RV2AV &&
5840                     !(left->op_private & OPpLVAL_INTRO) &&
5841                     !(o->op_private & OPpASSIGN_COMMON) )
5842                 {
5843                     tmpop = ((UNOP*)left)->op_first;
5844                     if (tmpop->op_type == OP_GV
5845 #ifdef USE_ITHREADS
5846                         && !pm->op_pmreplrootu.op_pmtargetoff
5847 #else
5848                         && !pm->op_pmreplrootu.op_pmtargetgv
5849 #endif
5850                         ) {
5851 #ifdef USE_ITHREADS
5852                         pm->op_pmreplrootu.op_pmtargetoff
5853                             = cPADOPx(tmpop)->op_padix;
5854                         cPADOPx(tmpop)->op_padix = 0;   /* steal it */
5855 #else
5856                         pm->op_pmreplrootu.op_pmtargetgv
5857                             = MUTABLE_GV(cSVOPx(tmpop)->op_sv);
5858                         cSVOPx(tmpop)->op_sv = NULL;    /* steal it */
5859 #endif
5860                         tmpop = cUNOPo->op_first;       /* to list (nulled) */
5861                         tmpop = ((UNOP*)tmpop)->op_first; /* to pushmark */
5862                         /* detach rest of siblings from o subtree,
5863                          * and free subtree */
5864                         op_sibling_splice(cUNOPo->op_first, tmpop, -1, NULL);
5865                         right->op_next = tmpop->op_next;  /* fix starting loc */
5866                         op_free(o);                     /* blow off assign */
5867                         right->op_flags &= ~OPf_WANT;
5868                                 /* "I don't know and I don't care." */
5869                         return right;
5870                     }
5871                 }
5872                 else {
5873                    if (PL_modcount < RETURN_UNLIMITED_NUMBER &&
5874                       ((LISTOP*)right)->op_last->op_type == OP_CONST)
5875                     {
5876                         SV ** const svp =
5877                             &((SVOP*)((LISTOP*)right)->op_last)->op_sv;
5878                         SV * const sv = *svp;
5879                         if (SvIOK(sv) && SvIVX(sv) == 0)
5880                         {
5881                           if (right->op_private & OPpSPLIT_IMPLIM) {
5882                             /* our own SV, created in ck_split */
5883                             SvREADONLY_off(sv);
5884                             sv_setiv(sv, PL_modcount+1);
5885                           }
5886                           else {
5887                             /* SV may belong to someone else */
5888                             SvREFCNT_dec(sv);
5889                             *svp = newSViv(PL_modcount+1);
5890                           }
5891                         }
5892                     }
5893                 }
5894             }
5895         }
5896         return o;
5897     }
5898     if (!right)
5899         right = newOP(OP_UNDEF, 0);
5900     if (right->op_type == OP_READLINE) {
5901         right->op_flags |= OPf_STACKED;
5902         return newBINOP(OP_NULL, flags, op_lvalue(scalar(left), OP_SASSIGN),
5903                 scalar(right));
5904     }
5905     else {
5906         o = newBINOP(OP_SASSIGN, flags,
5907             scalar(right), op_lvalue(scalar(left), OP_SASSIGN) );
5908     }
5909     return o;
5910 }
5911
5912 /*
5913 =for apidoc Am|OP *|newSTATEOP|I32 flags|char *label|OP *o
5914
5915 Constructs a state op (COP).  The state op is normally a C<nextstate> op,
5916 but will be a C<dbstate> op if debugging is enabled for currently-compiled
5917 code.  The state op is populated from C<PL_curcop> (or C<PL_compiling>).
5918 If I<label> is non-null, it supplies the name of a label to attach to
5919 the state op; this function takes ownership of the memory pointed at by
5920 I<label>, and will free it.  I<flags> gives the eight bits of C<op_flags>
5921 for the state op.
5922
5923 If I<o> is null, the state op is returned.  Otherwise the state op is
5924 combined with I<o> into a C<lineseq> list op, which is returned.  I<o>
5925 is consumed by this function and becomes part of the returned op tree.
5926
5927 =cut
5928 */
5929
5930 OP *
5931 Perl_newSTATEOP(pTHX_ I32 flags, char *label, OP *o)
5932 {
5933     dVAR;
5934     const U32 seq = intro_my();
5935     const U32 utf8 = flags & SVf_UTF8;
5936     COP *cop;
5937
5938     flags &= ~SVf_UTF8;
5939
5940     NewOp(1101, cop, 1, COP);
5941     if (PERLDB_LINE && CopLINE(PL_curcop) && PL_curstash != PL_debstash) {
5942         cop->op_type = OP_DBSTATE;
5943         cop->op_ppaddr = PL_ppaddr[ OP_DBSTATE ];
5944     }
5945     else {
5946         cop->op_type = OP_NEXTSTATE;
5947         cop->op_ppaddr = PL_ppaddr[ OP_NEXTSTATE ];
5948     }
5949     cop->op_flags = (U8)flags;
5950     CopHINTS_set(cop, PL_hints);
5951 #ifdef NATIVE_HINTS
5952     cop->op_private |= NATIVE_HINTS;
5953 #endif
5954 #ifdef VMS
5955     if (VMSISH_HUSHED) cop->op_private |= OPpHUSH_VMSISH;
5956 #endif
5957     cop->op_next = (OP*)cop;
5958
5959     cop->cop_seq = seq;
5960     cop->cop_warnings = DUP_WARNINGS(PL_curcop->cop_warnings);
5961     CopHINTHASH_set(cop, cophh_copy(CopHINTHASH_get(PL_curcop)));
5962     if (label) {
5963         Perl_cop_store_label(aTHX_ cop, label, strlen(label), utf8);
5964
5965         PL_hints |= HINT_BLOCK_SCOPE;
5966         /* It seems that we need to defer freeing this pointer, as other parts
5967            of the grammar end up wanting to copy it after this op has been
5968            created. */
5969         SAVEFREEPV(label);
5970     }
5971
5972     if (PL_parser->preambling != NOLINE) {
5973         CopLINE_set(cop, PL_parser->preambling);
5974         PL_parser->copline = NOLINE;
5975     }
5976     else if (PL_parser->copline == NOLINE)
5977         CopLINE_set(cop, CopLINE(PL_curcop));
5978     else {
5979         CopLINE_set(cop, PL_parser->copline);
5980         PL_parser->copline = NOLINE;
5981     }
5982 #ifdef USE_ITHREADS
5983     CopFILE_set(cop, CopFILE(PL_curcop));       /* XXX share in a pvtable? */
5984 #else
5985     CopFILEGV_set(cop, CopFILEGV(PL_curcop));
5986 #endif
5987     CopSTASH_set(cop, PL_curstash);
5988
5989     if (cop->op_type == OP_DBSTATE) {
5990         /* this line can have a breakpoint - store the cop in IV */
5991         AV *av = CopFILEAVx(PL_curcop);
5992         if (av) {
5993             SV * const * const svp = av_fetch(av, CopLINE(cop), FALSE);
5994             if (svp && *svp != &PL_sv_undef ) {
5995                 (void)SvIOK_on(*svp);
5996                 SvIV_set(*svp, PTR2IV(cop));
5997             }
5998         }
5999     }
6000
6001     if (flags & OPf_SPECIAL)
6002         op_null((OP*)cop);
6003     return op_prepend_elem(OP_LINESEQ, (OP*)cop, o);
6004 }
6005
6006 /*
6007 =for apidoc Am|OP *|newLOGOP|I32 type|I32 flags|OP *first|OP *other
6008
6009 Constructs, checks, and returns a logical (flow control) op.  I<type>
6010 is the opcode.  I<flags> gives the eight bits of C<op_flags>, except
6011 that C<OPf_KIDS> will be set automatically, and, shifted up eight bits,
6012 the eight bits of C<op_private>, except that the bit with value 1 is
6013 automatically set.  I<first> supplies the expression controlling the
6014 flow, and I<other> supplies the side (alternate) chain of ops; they are
6015 consumed by this function and become part of the constructed op tree.
6016
6017 =cut
6018 */
6019
6020 OP *
6021 Perl_newLOGOP(pTHX_ I32 type, I32 flags, OP *first, OP *other)
6022 {
6023     PERL_ARGS_ASSERT_NEWLOGOP;
6024
6025     return new_logop(type, flags, &first, &other);
6026 }
6027
6028 STATIC OP *
6029 S_search_const(pTHX_ OP *o)
6030 {
6031     PERL_ARGS_ASSERT_SEARCH_CONST;
6032
6033     switch (o->op_type) {
6034         case OP_CONST:
6035             return o;
6036         case OP_NULL:
6037             if (o->op_flags & OPf_KIDS)
6038                 return search_const(cUNOPo->op_first);
6039             break;
6040         case OP_LEAVE:
6041         case OP_SCOPE:
6042         case OP_LINESEQ:
6043         {
6044             OP *kid;
6045             if (!(o->op_flags & OPf_KIDS))
6046                 return NULL;
6047             kid = cLISTOPo->op_first;
6048             do {
6049                 switch (kid->op_type) {
6050                     case OP_ENTER:
6051                     case OP_NULL:
6052                     case OP_NEXTSTATE:
6053                         kid = OP_SIBLING(kid);
6054                         break;
6055                     default:
6056                         if (kid != cLISTOPo->op_last)
6057                             return NULL;
6058                         goto last;
6059                 }
6060             } while (kid);
6061             if (!kid)
6062                 kid = cLISTOPo->op_last;
6063 last:
6064             return search_const(kid);
6065         }
6066     }
6067
6068     return NULL;
6069 }
6070
6071 STATIC OP *
6072 S_new_logop(pTHX_ I32 type, I32 flags, OP** firstp, OP** otherp)
6073 {
6074     dVAR;
6075     LOGOP *logop;
6076     OP *o;
6077     OP *first;
6078     OP *other;
6079     OP *cstop = NULL;
6080     int prepend_not = 0;
6081
6082     PERL_ARGS_ASSERT_NEW_LOGOP;
6083
6084     first = *firstp;
6085     other = *otherp;
6086
6087     /* [perl #59802]: Warn about things like "return $a or $b", which
6088        is parsed as "(return $a) or $b" rather than "return ($a or
6089        $b)".  NB: This also applies to xor, which is why we do it
6090        here.
6091      */
6092     switch (first->op_type) {
6093     case OP_NEXT:
6094     case OP_LAST:
6095     case OP_REDO:
6096         /* XXX: Perhaps we should emit a stronger warning for these.
6097            Even with the high-precedence operator they don't seem to do
6098            anything sensible.
6099
6100            But until we do, fall through here.
6101          */
6102     case OP_RETURN:
6103     case OP_EXIT:
6104     case OP_DIE:
6105     case OP_GOTO:
6106         /* XXX: Currently we allow people to "shoot themselves in the
6107            foot" by explicitly writing "(return $a) or $b".
6108
6109            Warn unless we are looking at the result from folding or if
6110            the programmer explicitly grouped the operators like this.
6111            The former can occur with e.g.
6112
6113                 use constant FEATURE => ( $] >= ... );
6114                 sub { not FEATURE and return or do_stuff(); }
6115          */
6116         if (!first->op_folded && !(first->op_flags & OPf_PARENS))
6117             Perl_ck_warner(aTHX_ packWARN(WARN_SYNTAX),
6118                            "Possible precedence issue with control flow operator");
6119         /* XXX: Should we optimze this to "return $a;" (i.e. remove
6120            the "or $b" part)?
6121         */
6122         break;
6123     }
6124
6125     if (type == OP_XOR)         /* Not short circuit, but here by precedence. */
6126         return newBINOP(type, flags, scalar(first), scalar(other));
6127
6128     assert((PL_opargs[type] & OA_CLASS_MASK) == OA_LOGOP);
6129
6130     scalarboolean(first);
6131     /* optimize AND and OR ops that have NOTs as children */
6132     if (first->op_type == OP_NOT
6133         && (first->op_flags & OPf_KIDS)
6134         && ((first->op_flags & OPf_SPECIAL) /* unless ($x) { } */
6135             || (other->op_type == OP_NOT))  /* if (!$x && !$y) { } */
6136         ) {
6137         if (type == OP_AND || type == OP_OR) {
6138             if (type == OP_AND)
6139                 type = OP_OR;
6140             else
6141                 type = OP_AND;
6142             op_null(first);
6143             if (other->op_type == OP_NOT) { /* !a AND|OR !b => !(a OR|AND b) */
6144                 op_null(other);
6145                 prepend_not = 1; /* prepend a NOT op later */
6146             }
6147         }
6148     }
6149     /* search for a constant op that could let us fold the test */
6150     if ((cstop = search_const(first))) {
6151         if (cstop->op_private & OPpCONST_STRICT)
6152             no_bareword_allowed(cstop);
6153         else if ((cstop->op_private & OPpCONST_BARE))
6154                 Perl_ck_warner(aTHX_ packWARN(WARN_BAREWORD), "Bareword found in conditional");
6155         if ((type == OP_AND &&  SvTRUE(((SVOP*)cstop)->op_sv)) ||
6156             (type == OP_OR  && !SvTRUE(((SVOP*)cstop)->op_sv)) ||
6157             (type == OP_DOR && !SvOK(((SVOP*)cstop)->op_sv))) {
6158             *firstp = NULL;
6159             if (other->op_type == OP_CONST)
6160                 other->op_private |= OPpCONST_SHORTCIRCUIT;
6161             op_free(first);
6162             if (other->op_type == OP_LEAVE)
6163                 other = newUNOP(OP_NULL, OPf_SPECIAL, other);
6164             else if (other->op_type == OP_MATCH
6165                   || other->op_type == OP_SUBST
6166                   || other->op_type == OP_TRANSR
6167                   || other->op_type == OP_TRANS)
6168                 /* Mark the op as being unbindable with =~ */
6169                 other->op_flags |= OPf_SPECIAL;
6170
6171             other->op_folded = 1;
6172             return other;
6173         }
6174         else {
6175             /* check for C<my $x if 0>, or C<my($x,$y) if 0> */
6176             const OP *o2 = other;
6177             if ( ! (o2->op_type == OP_LIST
6178                     && (( o2 = cUNOPx(o2)->op_first))
6179                     && o2->op_type == OP_PUSHMARK
6180                     && (( o2 = OP_SIBLING(o2))) )
6181             )
6182                 o2 = other;
6183             if ((o2->op_type == OP_PADSV || o2->op_type == OP_PADAV
6184                         || o2->op_type == OP_PADHV)
6185                 && o2->op_private & OPpLVAL_INTRO
6186                 && !(o2->op_private & OPpPAD_STATE))
6187             {
6188                 Perl_ck_warner_d(aTHX_ packWARN(WARN_DEPRECATED),
6189                                  "Deprecated use of my() in false conditional");
6190             }
6191
6192             *otherp = NULL;
6193             if (cstop->op_type == OP_CONST)
6194                 cstop->op_private |= OPpCONST_SHORTCIRCUIT;
6195                 op_free(other);
6196             return first;
6197         }
6198     }
6199     else if ((first->op_flags & OPf_KIDS) && type != OP_DOR
6200         && ckWARN(WARN_MISC)) /* [#24076] Don't warn for <FH> err FOO. */
6201     {
6202         const OP * const k1 = ((UNOP*)first)->op_first;
6203         const OP * const k2 = OP_SIBLING(k1);
6204         OPCODE warnop = 0;
6205         switch (first->op_type)
6206         {
6207         case OP_NULL:
6208             if (k2 && k2->op_type == OP_READLINE
6209                   && (k2->op_flags & OPf_STACKED)
6210                   && ((k1->op_flags & OPf_WANT) == OPf_WANT_SCALAR))
6211             {
6212                 warnop = k2->op_type;
6213             }
6214             break;
6215
6216         case OP_SASSIGN:
6217             if (k1->op_type == OP_READDIR
6218                   || k1->op_type == OP_GLOB
6219                   || (k1->op_type == OP_NULL && k1->op_targ == OP_GLOB)
6220                  || k1->op_type == OP_EACH
6221                  || k1->op_type == OP_AEACH)
6222             {
6223                 warnop = ((k1->op_type == OP_NULL)
6224                           ? (OPCODE)k1->op_targ : k1->op_type);
6225             }
6226             break;
6227         }
6228         if (warnop) {
6229             const line_t oldline = CopLINE(PL_curcop);
6230             /* This ensures that warnings are reported at the first line
6231                of the construction, not the last.  */
6232             CopLINE_set(PL_curcop, PL_parser->copline);
6233             Perl_warner(aTHX_ packWARN(WARN_MISC),
6234                  "Value of %s%s can be \"0\"; test with defined()",
6235                  PL_op_desc[warnop],
6236                  ((warnop == OP_READLINE || warnop == OP_GLOB)
6237                   ? " construct" : "() operator"));
6238             CopLINE_set(PL_curcop, oldline);
6239         }
6240     }
6241
6242     if (!other)
6243         return first;
6244
6245     if (type == OP_ANDASSIGN || type == OP_ORASSIGN || type == OP_DORASSIGN)
6246         other->op_private |= OPpASSIGN_BACKWARDS;  /* other is an OP_SASSIGN */
6247
6248     logop = S_alloc_LOGOP(aTHX_ type, first, LINKLIST(other));
6249     logop->op_ppaddr = PL_ppaddr[type];
6250     logop->op_flags |= (U8)flags;
6251     logop->op_private = (U8)(1 | (flags >> 8));
6252
6253     /* establish postfix order */
6254     logop->op_next = LINKLIST(first);
6255     first->op_next = (OP*)logop;
6256     assert(!OP_HAS_SIBLING(first));
6257     op_sibling_splice((OP*)logop, first, 0, other);
6258
6259     CHECKOP(type,logop);
6260
6261     o = newUNOP(prepend_not ? OP_NOT : OP_NULL, 0, (OP*)logop);
6262     other->op_next = o;
6263
6264     return o;
6265 }
6266
6267 /*
6268 =for apidoc Am|OP *|newCONDOP|I32 flags|OP *first|OP *trueop|OP *falseop
6269
6270 Constructs, checks, and returns a conditional-expression (C<cond_expr>)
6271 op.  I<flags> gives the eight bits of C<op_flags>, except that C<OPf_KIDS>
6272 will be set automatically, and, shifted up eight bits, the eight bits of
6273 C<op_private>, except that the bit with value 1 is automatically set.
6274 I<first> supplies the expression selecting between the two branches,
6275 and I<trueop> and I<falseop> supply the branches; they are consumed by
6276 this function and become part of the constructed op tree.
6277
6278 =cut
6279 */
6280
6281 OP *
6282 Perl_newCONDOP(pTHX_ I32 flags, OP *first, OP *trueop, OP *falseop)
6283 {
6284     dVAR;
6285     LOGOP *logop;
6286     OP *start;
6287     OP *o;
6288     OP *cstop;
6289
6290     PERL_ARGS_ASSERT_NEWCONDOP;
6291
6292     if (!falseop)
6293         return newLOGOP(OP_AND, 0, first, trueop);
6294     if (!trueop)
6295         return newLOGOP(OP_OR, 0, first, falseop);
6296
6297     scalarboolean(first);
6298     if ((cstop = search_const(first))) {
6299         /* Left or right arm of the conditional?  */
6300         const bool left = SvTRUE(((SVOP*)cstop)->op_sv);
6301         OP *live = left ? trueop : falseop;
6302         OP *const dead = left ? falseop : trueop;
6303         if (cstop->op_private & OPpCONST_BARE &&
6304             cstop->op_private & OPpCONST_STRICT) {
6305             no_bareword_allowed(cstop);
6306         }
6307         op_free(first);
6308         op_free(dead);
6309         if (live->op_type == OP_LEAVE)
6310             live = newUNOP(OP_NULL, OPf_SPECIAL, live);
6311         else if (live->op_type == OP_MATCH || live->op_type == OP_SUBST
6312               || live->op_type == OP_TRANS || live->op_type == OP_TRANSR)
6313             /* Mark the op as being unbindable with =~ */
6314             live->op_flags |= OPf_SPECIAL;
6315         live->op_folded = 1;
6316         return live;
6317     }
6318     logop = S_alloc_LOGOP(aTHX_ OP_COND_EXPR, first, LINKLIST(trueop));
6319     logop->op_ppaddr = PL_ppaddr[OP_COND_EXPR];
6320     logop->op_flags |= (U8)flags;
6321     logop->op_private = (U8)(1 | (flags >> 8));
6322     logop->op_next = LINKLIST(falseop);
6323
6324     CHECKOP(OP_COND_EXPR, /* that's logop->op_type */
6325             logop);
6326
6327     /* establish postfix order */
6328     start = LINKLIST(first);
6329     first->op_next = (OP*)logop;
6330
6331     /* make first, trueop, falseop siblings */
6332     op_sibling_splice((OP*)logop, first,  0, trueop);
6333     op_sibling_splice((OP*)logop, trueop, 0, falseop);
6334
6335     o = newUNOP(OP_NULL, 0, (OP*)logop);
6336
6337     trueop->op_next = falseop->op_next = o;
6338
6339     o->op_next = start;
6340     return o;
6341 }
6342
6343 /*
6344 =for apidoc Am|OP *|newRANGE|I32 flags|OP *left|OP *right
6345
6346 Constructs and returns a C<range> op, with subordinate C<flip> and
6347 C<flop> ops.  I<flags> gives the eight bits of C<op_flags> for the
6348 C<flip> op and, shifted up eight bits, the eight bits of C<op_private>
6349 for both the C<flip> and C<range> ops, except that the bit with value
6350 1 is automatically set.  I<left> and I<right> supply the expressions
6351 controlling the endpoints of the range; they are consumed by this function
6352 and become part of the constructed op tree.
6353
6354 =cut
6355 */
6356
6357 OP *
6358 Perl_newRANGE(pTHX_ I32 flags, OP *left, OP *right)
6359 {
6360     dVAR;
6361     LOGOP *range;
6362     OP *flip;
6363     OP *flop;
6364     OP *leftstart;
6365     OP *o;
6366
6367     PERL_ARGS_ASSERT_NEWRANGE;
6368
6369     range = S_alloc_LOGOP(aTHX_ OP_RANGE, left, LINKLIST(right));
6370     range->op_ppaddr = PL_ppaddr[OP_RANGE];
6371     range->op_flags = OPf_KIDS;
6372     leftstart = LINKLIST(left);
6373     range->op_private = (U8)(1 | (flags >> 8));
6374
6375     /* make left and right siblings */
6376     op_sibling_splice((OP*)range, left, 0, right);
6377
6378     range->op_next = (OP*)range;
6379     flip = newUNOP(OP_FLIP, flags, (OP*)range);
6380     flop = newUNOP(OP_FLOP, 0, flip);
6381     o = newUNOP(OP_NULL, 0, flop);
6382     LINKLIST(flop);
6383     range->op_next = leftstart;
6384
6385     left->op_next = flip;
6386     right->op_next = flop;
6387
6388     range->op_targ = pad_alloc(OP_RANGE, SVs_PADMY);
6389     sv_upgrade(PAD_SV(range->op_targ), SVt_PVNV);
6390     flip->op_targ = pad_alloc(OP_RANGE, SVs_PADMY);
6391     sv_upgrade(PAD_SV(flip->op_targ), SVt_PVNV);
6392
6393     flip->op_private =  left->op_type == OP_CONST ? OPpFLIP_LINENUM : 0;
6394     flop->op_private = right->op_type == OP_CONST ? OPpFLIP_LINENUM : 0;
6395
6396     /* check barewords before they might be optimized aways */
6397     if (flip->op_private && cSVOPx(left)->op_private & OPpCONST_STRICT)
6398         no_bareword_allowed(left);
6399     if (flop->op_private && cSVOPx(right)->op_private & OPpCONST_STRICT)
6400         no_bareword_allowed(right);
6401
6402     flip->op_next = o;
6403     if (!flip->op_private || !flop->op_private)
6404         LINKLIST(o);            /* blow off optimizer unless constant */
6405
6406     return o;
6407 }
6408
6409 /*
6410 =for apidoc Am|OP *|newLOOPOP|I32 flags|I32 debuggable|OP *expr|OP *block
6411
6412 Constructs, checks, and returns an op tree expressing a loop.  This is
6413 only a loop in the control flow through the op tree; it does not have
6414 the heavyweight loop structure that allows exiting the loop by C<last>
6415 and suchlike.  I<flags> gives the eight bits of C<op_flags> for the
6416 top-level op, except that some bits will be set automatically as required.
6417 I<expr> supplies the expression controlling loop iteration, and I<block>
6418 supplies the body of the loop; they are consumed by this function and
6419 become part of the constructed op tree.  I<debuggable> is currently
6420 unused and should always be 1.
6421
6422 =cut
6423 */
6424
6425 OP *
6426 Perl_newLOOPOP(pTHX_ I32 flags, I32 debuggable, OP *expr, OP *block)
6427 {
6428     OP* listop;
6429     OP* o;
6430     const bool once = block && block->op_flags & OPf_SPECIAL &&
6431                       block->op_type == OP_NULL;
6432
6433     PERL_UNUSED_ARG(debuggable);
6434
6435     if (expr) {
6436         if (once && (
6437               (expr->op_type == OP_CONST && !SvTRUE(((SVOP*)expr)->op_sv))
6438            || (  expr->op_type == OP_NOT
6439               && cUNOPx(expr)->op_first->op_type == OP_CONST
6440               && SvTRUE(cSVOPx_sv(cUNOPx(expr)->op_first))
6441               )
6442            ))
6443             /* Return the block now, so that S_new_logop does not try to
6444                fold it away. */
6445             return block;       /* do {} while 0 does once */
6446         if (expr->op_type == OP_READLINE
6447             || expr->op_type == OP_READDIR
6448             || expr->op_type == OP_GLOB
6449             || expr->op_type == OP_EACH || expr->op_type == OP_AEACH
6450             || (expr->op_type == OP_NULL && expr->op_targ == OP_GLOB)) {
6451             expr = newUNOP(OP_DEFINED, 0,
6452                 newASSIGNOP(0, newDEFSVOP(), 0, expr) );
6453         } else if (expr->op_flags & OPf_KIDS) {
6454             const OP * const k1 = ((UNOP*)expr)->op_first;
6455             const OP * const k2 = k1 ? OP_SIBLING(k1) : NULL;
6456             switch (expr->op_type) {
6457               case OP_NULL:
6458                 if (k2 && (k2->op_type == OP_READLINE || k2->op_type == OP_READDIR)
6459                       && (k2->op_flags & OPf_STACKED)
6460                       && ((k1->op_flags & OPf_WANT) == OPf_WANT_SCALAR))
6461                     expr = newUNOP(OP_DEFINED, 0, expr);
6462                 break;
6463
6464               case OP_SASSIGN:
6465                 if (k1 && (k1->op_type == OP_READDIR
6466                       || k1->op_type == OP_GLOB
6467                       || (k1->op_type == OP_NULL && k1->op_targ == OP_GLOB)
6468                      || k1->op_type == OP_EACH
6469                      || k1->op_type == OP_AEACH))
6470                     expr = newUNOP(OP_DEFINED, 0, expr);
6471                 break;
6472             }
6473         }
6474     }
6475
6476     /* if block is null, the next op_append_elem() would put UNSTACK, a scalar
6477      * op, in listop. This is wrong. [perl #27024] */
6478     if (!block)
6479         block = newOP(OP_NULL, 0);
6480     listop = op_append_elem(OP_LINESEQ, block, newOP(OP_UNSTACK, 0));
6481     o = new_logop(OP_AND, 0, &expr, &listop);
6482
6483     if (once) {
6484         ASSUME(listop);
6485     }
6486
6487     if (listop)
6488         ((LISTOP*)listop)->op_last->op_next = LINKLIST(o);
6489
6490     if (once && o != listop)
6491     {
6492         assert(cUNOPo->op_first->op_type == OP_AND
6493             || cUNOPo->op_first->op_type == OP_OR);
6494         o->op_next = ((LOGOP*)cUNOPo->op_first)->op_other;
6495     }
6496
6497     if (o == listop)
6498         o = newUNOP(OP_NULL, 0, o);     /* or do {} while 1 loses outer block */
6499
6500     o->op_flags |= flags;
6501     o = op_scope(o);
6502     o->op_flags |= OPf_SPECIAL; /* suppress POPBLOCK curpm restoration*/
6503     return o;
6504 }
6505
6506 /*
6507 =for apidoc Am|OP *|newWHILEOP|I32 flags|I32 debuggable|LOOP *loop|OP *expr|OP *block|OP *cont|I32 has_my
6508
6509 Constructs, checks, and returns an op tree expressing a C<while> loop.
6510 This is a heavyweight loop, with structure that allows exiting the loop
6511 by C<last> and suchlike.
6512
6513 I<loop> is an optional preconstructed C<enterloop> op to use in the
6514 loop; if it is null then a suitable op will be constructed automatically.
6515 I<expr> supplies the loop's controlling expression.  I<block> supplies the
6516 main body of the loop, and I<cont> optionally supplies a C<continue> block
6517 that operates as a second half of the body.  All of these optree inputs
6518 are consumed by this function and become part of the constructed op tree.
6519
6520 I<flags> gives the eight bits of C<op_flags> for the C<leaveloop>
6521 op and, shifted up eight bits, the eight bits of C<op_private> for
6522 the C<leaveloop> op, except that (in both cases) some bits will be set
6523 automatically.  I<debuggable> is currently unused and should always be 1.
6524 I<has_my> can be supplied as true to force the
6525 loop body to be enclosed in its own scope.
6526
6527 =cut
6528 */
6529
6530 OP *
6531 Perl_newWHILEOP(pTHX_ I32 flags, I32 debuggable, LOOP *loop,
6532         OP *expr, OP *block, OP *cont, I32 has_my)
6533 {
6534     dVAR;
6535     OP *redo;
6536     OP *next = NULL;
6537     OP *listop;
6538     OP *o;
6539     U8 loopflags = 0;
6540
6541     PERL_UNUSED_ARG(debuggable);
6542
6543     if (expr) {
6544         if (expr->op_type == OP_READLINE
6545          || expr->op_type == OP_READDIR
6546          || expr->op_type == OP_GLOB
6547          || expr->op_type == OP_EACH || expr->op_type == OP_AEACH
6548                      || (expr->op_type == OP_NULL && expr->op_targ == OP_GLOB)) {
6549             expr = newUNOP(OP_DEFINED, 0,
6550                 newASSIGNOP(0, newDEFSVOP(), 0, expr) );
6551         } else if (expr->op_flags & OPf_KIDS) {
6552             const OP * const k1 = ((UNOP*)expr)->op_first;
6553             const OP * const k2 = (k1) ? OP_SIBLING(k1) : NULL;
6554             switch (expr->op_type) {
6555               case OP_NULL:
6556                 if (k2 && (k2->op_type == OP_READLINE || k2->op_type == OP_READDIR)
6557                       && (k2->op_flags & OPf_STACKED)
6558                       && ((k1->op_flags & OPf_WANT) == OPf_WANT_SCALAR))
6559                     expr = newUNOP(OP_DEFINED, 0, expr);
6560                 break;
6561
6562               case OP_SASSIGN:
6563                 if (k1 && (k1->op_type == OP_READDIR
6564                       || k1->op_type == OP_GLOB
6565                       || (k1->op_type == OP_NULL && k1->op_targ == OP_GLOB)
6566                      || k1->op_type == OP_EACH
6567                      || k1->op_type == OP_AEACH))
6568                     expr = newUNOP(OP_DEFINED, 0, expr);
6569                 break;
6570             }
6571         }
6572     }
6573
6574     if (!block)
6575         block = newOP(OP_NULL, 0);
6576     else if (cont || has_my) {
6577         block = op_scope(block);
6578     }
6579
6580     if (cont) {
6581         next = LINKLIST(cont);
6582     }
6583     if (expr) {
6584         OP * const unstack = newOP(OP_UNSTACK, 0);
6585         if (!next)
6586             next = unstack;
6587         cont = op_append_elem(OP_LINESEQ, cont, unstack);
6588     }
6589
6590     assert(block);
6591     listop = op_append_list(OP_LINESEQ, block, cont);
6592     assert(listop);
6593     redo = LINKLIST(listop);
6594
6595     if (expr) {
6596         scalar(listop);
6597         o = new_logop(OP_AND, 0, &expr, &listop);
6598         if (o == expr && o->op_type == OP_CONST && !SvTRUE(cSVOPo->op_sv)) {
6599             op_free((OP*)loop);
6600             return expr;                /* listop already freed by new_logop */
6601         }
6602         if (listop)
6603             ((LISTOP*)listop)->op_last->op_next =
6604                 (o == listop ? redo : LINKLIST(o));
6605     }
6606     else
6607         o = listop;
6608
6609     if (!loop) {
6610         NewOp(1101,loop,1,LOOP);
6611         loop->op_type = OP_ENTERLOOP;
6612         loop->op_ppaddr = PL_ppaddr[OP_ENTERLOOP];
6613         loop->op_private = 0;
6614         loop->op_next = (OP*)loop;
6615     }
6616
6617     o = newBINOP(OP_LEAVELOOP, 0, (OP*)loop, o);
6618
6619     loop->op_redoop = redo;
6620     loop->op_lastop = o;
6621     o->op_private |= loopflags;
6622
6623     if (next)
6624         loop->op_nextop = next;
6625     else
6626         loop->op_nextop = o;
6627
6628     o->op_flags |= flags;
6629     o->op_private |= (flags >> 8);
6630     return o;
6631 }
6632
6633 /*
6634 =for apidoc Am|OP *|newFOROP|I32 flags|OP *sv|OP *expr|OP *block|OP *cont
6635
6636 Constructs, checks, and returns an op tree expressing a C<foreach>
6637 loop (iteration through a list of values).  This is a heavyweight loop,
6638 with structure that allows exiting the loop by C<last> and suchlike.
6639
6640 I<sv> optionally supplies the variable that will be aliased to each
6641 item in turn; if null, it defaults to C<$_> (either lexical or global).
6642 I<expr> supplies the list of values to iterate over.  I<block> supplies
6643 the main body of the loop, and I<cont> optionally supplies a C<continue>
6644 block that operates as a second half of the body.  All of these optree
6645 inputs are consumed by this function and become part of the constructed
6646 op tree.
6647
6648 I<flags> gives the eight bits of C<op_flags> for the C<leaveloop>
6649 op and, shifted up eight bits, the eight bits of C<op_private> for
6650 the C<leaveloop> op, except that (in both cases) some bits will be set
6651 automatically.
6652
6653 =cut
6654 */
6655
6656 OP *
6657 Perl_newFOROP(pTHX_ I32 flags, OP *sv, OP *expr, OP *block, OP *cont)
6658 {
6659     dVAR;
6660     LOOP *loop;
6661     OP *wop;
6662     PADOFFSET padoff = 0;
6663     I32 iterflags = 0;
6664     I32 iterpflags = 0;
6665
6666     PERL_ARGS_ASSERT_NEWFOROP;
6667
6668     if (sv) {
6669         if (sv->op_type == OP_RV2SV) {  /* symbol table variable */
6670             iterpflags = sv->op_private & OPpOUR_INTRO; /* for our $x () */
6671             sv->op_type = OP_RV2GV;
6672             sv->op_ppaddr = PL_ppaddr[OP_RV2GV];
6673
6674             /* The op_type check is needed to prevent a possible segfault
6675              * if the loop variable is undeclared and 'strict vars' is in
6676              * effect. This is illegal but is nonetheless parsed, so we
6677              * may reach this point with an OP_CONST where we're expecting
6678              * an OP_GV.
6679              */
6680             if (cUNOPx(sv)->op_first->op_type == OP_GV
6681              && cGVOPx_gv(cUNOPx(sv)->op_first) == PL_defgv)
6682                 iterpflags |= OPpITER_DEF;
6683         }
6684         else if (sv->op_type == OP_PADSV) { /* private variable */
6685             iterpflags = sv->op_private & OPpLVAL_INTRO; /* for my $x () */
6686             padoff = sv->op_targ;
6687             sv->op_targ = 0;
6688             op_free(sv);
6689             sv = NULL;
6690         }
6691         else
6692             Perl_croak(aTHX_ "Can't use %s for loop variable", PL_op_desc[sv->op_type]);
6693         if (padoff) {
6694             SV *const namesv = PAD_COMPNAME_SV(padoff);
6695             STRLEN len;
6696             const char *const name = SvPV_const(namesv, len);
6697
6698             if (len == 2 && name[0] == '$' && name[1] == '_')
6699                 iterpflags |= OPpITER_DEF;
6700         }
6701     }
6702     else {
6703         const PADOFFSET offset = pad_findmy_pvs("$_", 0);
6704         if (offset == NOT_IN_PAD || PAD_COMPNAME_FLAGS_isOUR(offset)) {
6705             sv = newGVOP(OP_GV, 0, PL_defgv);
6706         }
6707         else {
6708             padoff = offset;
6709         }
6710         iterpflags |= OPpITER_DEF;
6711     }
6712
6713     if (expr->op_type == OP_RV2AV || expr->op_type == OP_PADAV) {
6714         expr = op_lvalue(force_list(scalar(ref(expr, OP_ITER)), 1), OP_GREPSTART);
6715         iterflags |= OPf_STACKED;
6716     }
6717     else if (expr->op_type == OP_NULL &&
6718              (expr->op_flags & OPf_KIDS) &&
6719              ((BINOP*)expr)->op_first->op_type == OP_FLOP)
6720     {
6721         /* Basically turn for($x..$y) into the same as for($x,$y), but we
6722          * set the STACKED flag to indicate that these values are to be
6723          * treated as min/max values by 'pp_enteriter'.
6724          */
6725         const UNOP* const flip = (UNOP*)((UNOP*)((BINOP*)expr)->op_first)->op_first;
6726         LOGOP* const range = (LOGOP*) flip->op_first;
6727         OP* const left  = range->op_first;
6728         OP* const right = OP_SIBLING(left);
6729         LISTOP* listop;
6730
6731         range->op_flags &= ~OPf_KIDS;
6732         /* detach range's children */
6733         op_sibling_splice((OP*)range, NULL, -1, NULL);
6734
6735         listop = (LISTOP*)newLISTOP(OP_LIST, 0, left, right);
6736         listop->op_first->op_next = range->op_next;
6737         left->op_next = range->op_other;
6738         right->op_next = (OP*)listop;
6739         listop->op_next = listop->op_first;
6740
6741         op_free(expr);
6742         expr = (OP*)(listop);
6743         op_null(expr);
6744         iterflags |= OPf_STACKED;
6745     }
6746     else {
6747         expr = op_lvalue(force_list(expr, 1), OP_GREPSTART);
6748     }
6749
6750     loop = (LOOP*)list(convert(OP_ENTERITER, iterflags,
6751                                op_append_elem(OP_LIST, expr, scalar(sv))));
6752     assert(!loop->op_next);
6753     /* for my  $x () sets OPpLVAL_INTRO;
6754      * for our $x () sets OPpOUR_INTRO */
6755     loop->op_private = (U8)iterpflags;
6756     if (loop->op_slabbed
6757      && DIFF(loop, OpSLOT(loop)->opslot_next)
6758          < SIZE_TO_PSIZE(sizeof(LOOP)))
6759     {
6760         LOOP *tmp;
6761         NewOp(1234,tmp,1,LOOP);
6762         Copy(loop,tmp,1,LISTOP);
6763 #ifdef PERL_OP_PARENT
6764         assert(loop->op_last->op_sibling == (OP*)loop);
6765         loop->op_last->op_sibling = (OP*)tmp; /*point back to new parent */
6766 #endif
6767         S_op_destroy(aTHX_ (OP*)loop);
6768         loop = tmp;
6769     }
6770     else if (!loop->op_slabbed)
6771         loop = (LOOP*)PerlMemShared_realloc(loop, sizeof(LOOP));
6772     loop->op_targ = padoff;
6773     wop = newWHILEOP(flags, 1, loop, newOP(OP_ITER, 0), block, cont, 0);
6774     return wop;
6775 }
6776
6777 /*
6778 =for apidoc Am|OP *|newLOOPEX|I32 type|OP *label
6779
6780 Constructs, checks, and returns a loop-exiting op (such as C<goto>
6781 or C<last>).  I<type> is the opcode.  I<label> supplies the parameter
6782 determining the target of the op; it is consumed by this function and
6783 becomes part of the constructed op tree.
6784
6785 =cut
6786 */
6787
6788 OP*
6789 Perl_newLOOPEX(pTHX_ I32 type, OP *label)
6790 {
6791     OP *o = NULL;
6792
6793     PERL_ARGS_ASSERT_NEWLOOPEX;
6794
6795     assert((PL_opargs[type] & OA_CLASS_MASK) == OA_LOOPEXOP);
6796
6797     if (type != OP_GOTO) {
6798         /* "last()" means "last" */
6799         if (label->op_type == OP_STUB && (label->op_flags & OPf_PARENS)) {
6800             o = newOP(type, OPf_SPECIAL);
6801         }
6802     }
6803     else {
6804         /* Check whether it's going to be a goto &function */
6805         if (label->op_type == OP_ENTERSUB
6806                 && !(label->op_flags & OPf_STACKED))
6807             label = newUNOP(OP_REFGEN, 0, op_lvalue(label, OP_REFGEN));
6808     }
6809
6810     /* Check for a constant argument */
6811     if (label->op_type == OP_CONST) {
6812             SV * const sv = ((SVOP *)label)->op_sv;
6813             STRLEN l;
6814             const char *s = SvPV_const(sv,l);
6815             if (l == strlen(s)) {
6816                 o = newPVOP(type,
6817                             SvUTF8(((SVOP*)label)->op_sv),
6818                             savesharedpv(
6819                                 SvPV_nolen_const(((SVOP*)label)->op_sv)));
6820             }
6821     }
6822     
6823     /* If we have already created an op, we do not need the label. */
6824     if (o)
6825                 op_free(label);
6826     else o = newUNOP(type, OPf_STACKED, label);
6827
6828     PL_hints |= HINT_BLOCK_SCOPE;
6829     return o;
6830 }
6831
6832 /* if the condition is a literal array or hash
6833    (or @{ ... } etc), make a reference to it.
6834  */
6835 STATIC OP *
6836 S_ref_array_or_hash(pTHX_ OP *cond)
6837 {
6838     if (cond
6839     && (cond->op_type == OP_RV2AV
6840     ||  cond->op_type == OP_PADAV
6841     ||  cond->op_type == OP_RV2HV
6842     ||  cond->op_type == OP_PADHV))
6843
6844         return newUNOP(OP_REFGEN, 0, op_lvalue(cond, OP_REFGEN));
6845
6846     else if(cond
6847     && (cond->op_type == OP_ASLICE
6848     ||  cond->op_type == OP_KVASLICE
6849     ||  cond->op_type == OP_HSLICE
6850     ||  cond->op_type == OP_KVHSLICE)) {
6851
6852         /* anonlist now needs a list from this op, was previously used in
6853          * scalar context */
6854         cond->op_flags |= ~(OPf_WANT_SCALAR | OPf_REF);
6855         cond->op_flags |= OPf_WANT_LIST;
6856
6857         return newANONLIST(op_lvalue(cond, OP_ANONLIST));
6858     }
6859
6860     else
6861         return cond;
6862 }
6863
6864 /* These construct the optree fragments representing given()
6865    and when() blocks.
6866
6867    entergiven and enterwhen are LOGOPs; the op_other pointer
6868    points up to the associated leave op. We need this so we
6869    can put it in the context and make break/continue work.
6870    (Also, of course, pp_enterwhen will jump straight to
6871    op_other if the match fails.)
6872  */
6873
6874 STATIC OP *
6875 S_newGIVWHENOP(pTHX_ OP *cond, OP *block,
6876                    I32 enter_opcode, I32 leave_opcode,
6877                    PADOFFSET entertarg)
6878 {
6879     dVAR;
6880     LOGOP *enterop;
6881     OP *o;
6882
6883     PERL_ARGS_ASSERT_NEWGIVWHENOP;
6884
6885     enterop = S_alloc_LOGOP(aTHX_ enter_opcode, block, NULL);
6886     enterop->op_ppaddr = PL_ppaddr[enter_opcode];
6887     enterop->op_targ = ((entertarg == NOT_IN_PAD) ? 0 : entertarg);
6888     enterop->op_private = 0;
6889
6890     o = newUNOP(leave_opcode, 0, (OP *) enterop);
6891
6892     if (cond) {
6893         /* prepend cond if we have one */
6894         op_sibling_splice((OP*)enterop, NULL, 0, scalar(cond));
6895
6896         o->op_next = LINKLIST(cond);
6897         cond->op_next = (OP *) enterop;
6898     }
6899     else {
6900         /* This is a default {} block */
6901         enterop->op_flags |= OPf_SPECIAL;
6902         o      ->op_flags |= OPf_SPECIAL;
6903
6904         o->op_next = (OP *) enterop;
6905     }
6906
6907     CHECKOP(enter_opcode, enterop); /* Currently does nothing, since
6908                                        entergiven and enterwhen both
6909                                        use ck_null() */
6910
6911     enterop->op_next = LINKLIST(block);
6912     block->op_next = enterop->op_other = o;
6913
6914     return o;
6915 }
6916
6917 /* Does this look like a boolean operation? For these purposes
6918    a boolean operation is:
6919      - a subroutine call [*]
6920      - a logical connective
6921      - a comparison operator
6922      - a filetest operator, with the exception of -s -M -A -C
6923      - defined(), exists() or eof()
6924      - /$re/ or $foo =~ /$re/
6925    
6926    [*] possibly surprising
6927  */
6928 STATIC bool
6929 S_looks_like_bool(pTHX_ const OP *o)
6930 {
6931     PERL_ARGS_ASSERT_LOOKS_LIKE_BOOL;
6932
6933     switch(o->op_type) {
6934         case OP_OR:
6935         case OP_DOR:
6936             return looks_like_bool(cLOGOPo->op_first);
6937
6938         case OP_AND:
6939         {
6940             OP* sibl = OP_SIBLING(cLOGOPo->op_first);
6941             ASSUME(sibl);
6942             return (
6943                 looks_like_bool(cLOGOPo->op_first)
6944              && looks_like_bool(sibl));
6945         }
6946
6947         case OP_NULL:
6948         case OP_SCALAR:
6949             return (
6950                 o->op_flags & OPf_KIDS
6951             && looks_like_bool(cUNOPo->op_first));
6952
6953         case OP_ENTERSUB:
6954
6955         case OP_NOT:    case OP_XOR:
6956
6957         case OP_EQ:     case OP_NE:     case OP_LT:
6958         case OP_GT:     case OP_LE:     case OP_GE:
6959
6960         case OP_I_EQ:   case OP_I_NE:   case OP_I_LT:
6961         case OP_I_GT:   case OP_I_LE:   case OP_I_GE:
6962
6963         case OP_SEQ:    case OP_SNE:    case OP_SLT:
6964         case OP_SGT:    case OP_SLE:    case OP_SGE:
6965         
6966         case OP_SMARTMATCH:
6967         
6968         case OP_FTRREAD:  case OP_FTRWRITE: case OP_FTREXEC:
6969         case OP_FTEREAD:  case OP_FTEWRITE: case OP_FTEEXEC:
6970         case OP_FTIS:     case OP_FTEOWNED: case OP_FTROWNED:
6971         case OP_FTZERO:   case OP_FTSOCK:   case OP_FTCHR:
6972         case OP_FTBLK:    case OP_FTFILE:   case OP_FTDIR:
6973         case OP_FTPIPE:   case OP_FTLINK:   case OP_FTSUID:
6974         case OP_FTSGID:   case OP_FTSVTX:   case OP_FTTTY:
6975         case OP_FTTEXT:   case OP_FTBINARY:
6976         
6977         case OP_DEFINED: case OP_EXISTS:
6978         case OP_MATCH:   case OP_EOF:
6979
6980         case OP_FLOP:
6981
6982             return TRUE;
6983         
6984         case OP_CONST:
6985             /* Detect comparisons that have been optimized away */
6986             if (cSVOPo->op_sv == &PL_sv_yes
6987             ||  cSVOPo->op_sv == &PL_sv_no)
6988             
6989                 return TRUE;
6990             else
6991                 return FALSE;
6992
6993         /* FALLTHROUGH */
6994         default:
6995             return FALSE;
6996     }
6997 }
6998
6999 /*
7000 =for apidoc Am|OP *|newGIVENOP|OP *cond|OP *block|PADOFFSET defsv_off
7001
7002 Constructs, checks, and returns an op tree expressing a C<given> block.
7003 I<cond> supplies the expression that will be locally assigned to a lexical
7004 variable, and I<block> supplies the body of the C<given> construct; they
7005 are consumed by this function and become part of the constructed op tree.
7006 I<defsv_off> is the pad offset of the scalar lexical variable that will
7007 be affected.  If it is 0, the global $_ will be used.
7008
7009 =cut
7010 */
7011
7012 OP *
7013 Perl_newGIVENOP(pTHX_ OP *cond, OP *block, PADOFFSET defsv_off)
7014 {
7015     PERL_ARGS_ASSERT_NEWGIVENOP;
7016     return newGIVWHENOP(
7017         ref_array_or_hash(cond),
7018         block,
7019         OP_ENTERGIVEN, OP_LEAVEGIVEN,
7020         defsv_off);
7021 }
7022
7023 /*
7024 =for apidoc Am|OP *|newWHENOP|OP *cond|OP *block
7025
7026 Constructs, checks, and returns an op tree expressing a C<when> block.
7027 I<cond> supplies the test expression, and I<block> supplies the block
7028 that will be executed if the test evaluates to true; they are consumed
7029 by this function and become part of the constructed op tree.  I<cond>
7030 will be interpreted DWIMically, often as a comparison against C<$_>,
7031 and may be null to generate a C<default> block.
7032
7033 =cut
7034 */
7035
7036 OP *
7037 Perl_newWHENOP(pTHX_ OP *cond, OP *block)
7038 {
7039     const bool cond_llb = (!cond || looks_like_bool(cond));
7040     OP *cond_op;
7041
7042     PERL_ARGS_ASSERT_NEWWHENOP;
7043
7044     if (cond_llb)
7045         cond_op = cond;
7046     else {
7047         cond_op = newBINOP(OP_SMARTMATCH, OPf_SPECIAL,
7048                 newDEFSVOP(),
7049                 scalar(ref_array_or_hash(cond)));
7050     }
7051     
7052     return newGIVWHENOP(cond_op, block, OP_ENTERWHEN, OP_LEAVEWHEN, 0);
7053 }
7054
7055 void
7056 Perl_cv_ckproto_len_flags(pTHX_ const CV *cv, const GV *gv, const char *p,
7057                     const STRLEN len, const U32 flags)
7058 {
7059     SV *name = NULL, *msg;
7060     const char * cvp = SvROK(cv) ? "" : CvPROTO(cv);
7061     STRLEN clen = CvPROTOLEN(cv), plen = len;
7062
7063     PERL_ARGS_ASSERT_CV_CKPROTO_LEN_FLAGS;
7064
7065     if (p == NULL && cvp == NULL)
7066         return;
7067
7068     if (!ckWARN_d(WARN_PROTOTYPE))
7069         return;
7070
7071     if (p && cvp) {
7072         p = S_strip_spaces(aTHX_ p, &plen);
7073         cvp = S_strip_spaces(aTHX_ cvp, &clen);
7074         if ((flags & SVf_UTF8) == SvUTF8(cv)) {
7075             if (plen == clen && memEQ(cvp, p, plen))
7076                 return;
7077         } else {
7078             if (flags & SVf_UTF8) {
7079                 if (bytes_cmp_utf8((const U8 *)cvp, clen, (const U8 *)p, plen) == 0)
7080                     return;
7081             }
7082             else {
7083                 if (bytes_cmp_utf8((const U8 *)p, plen, (const U8 *)cvp, clen) == 0)
7084                     return;
7085             }
7086         }
7087     }
7088
7089     msg = sv_newmortal();
7090
7091     if (gv)
7092     {
7093         if (isGV(gv))
7094             gv_efullname3(name = sv_newmortal(), gv, NULL);
7095         else if (SvPOK(gv) && *SvPVX((SV *)gv) == '&')
7096             name = newSVpvn_flags(SvPVX((SV *)gv)+1, SvCUR(gv)-1, SvUTF8(gv)|SVs_TEMP);
7097         else name = (SV *)gv;
7098     }
7099     sv_setpvs(msg, "Prototype mismatch:");
7100     if (name)
7101         Perl_sv_catpvf(aTHX_ msg, " sub %"SVf, SVfARG(name));
7102     if (cvp)
7103         Perl_sv_catpvf(aTHX_ msg, " (%"UTF8f")", 
7104             UTF8fARG(SvUTF8(cv),clen,cvp)
7105         );
7106     else
7107         sv_catpvs(msg, ": none");
7108     sv_catpvs(msg, " vs ");
7109     if (p)
7110         Perl_sv_catpvf(aTHX_ msg, "(%"UTF8f")", UTF8fARG(flags & SVf_UTF8,len,p));
7111     else
7112         sv_catpvs(msg, "none");
7113     Perl_warner(aTHX_ packWARN(WARN_PROTOTYPE), "%"SVf, SVfARG(msg));
7114 }
7115
7116 static void const_sv_xsub(pTHX_ CV* cv);
7117 static void const_av_xsub(pTHX_ CV* cv);
7118
7119 /*
7120
7121 =head1 Optree Manipulation Functions
7122
7123 =for apidoc cv_const_sv
7124
7125 If C<cv> is a constant sub eligible for inlining, returns the constant
7126 value returned by the sub.  Otherwise, returns NULL.
7127
7128 Constant subs can be created with C<newCONSTSUB> or as described in
7129 L<perlsub/"Constant Functions">.
7130
7131 =cut
7132 */
7133 SV *
7134 Perl_cv_const_sv(const CV *const cv)
7135 {
7136     SV *sv;
7137     if (!cv)
7138         return NULL;
7139     if (!(SvTYPE(cv) == SVt_PVCV || SvTYPE(cv) == SVt_PVFM))
7140         return NULL;
7141     sv = CvCONST(cv) ? MUTABLE_SV(CvXSUBANY(cv).any_ptr) : NULL;
7142     if (sv && SvTYPE(sv) == SVt_PVAV) return NULL;
7143     return sv;
7144 }
7145
7146 SV *
7147 Perl_cv_const_sv_or_av(const CV * const cv)
7148 {
7149     if (!cv)
7150         return NULL;
7151     assert (SvTYPE(cv) == SVt_PVCV || SvTYPE(cv) == SVt_PVFM);
7152     return CvCONST(cv) ? MUTABLE_SV(CvXSUBANY(cv).any_ptr) : NULL;
7153 }
7154
7155 /* op_const_sv:  examine an optree to determine whether it's in-lineable.
7156  * Can be called in 3 ways:
7157  *
7158  * !cv
7159  *      look for a single OP_CONST with attached value: return the value
7160  *
7161  * cv && CvCLONE(cv) && !CvCONST(cv)
7162  *
7163  *      examine the clone prototype, and if contains only a single
7164  *      OP_CONST referencing a pad const, or a single PADSV referencing
7165  *      an outer lexical, return a non-zero value to indicate the CV is
7166  *      a candidate for "constizing" at clone time
7167  *
7168  * cv && CvCONST(cv)
7169  *
7170  *      We have just cloned an anon prototype that was marked as a const
7171  *      candidate. Try to grab the current value, and in the case of
7172  *      PADSV, ignore it if it has multiple references. In this case we
7173  *      return a newly created *copy* of the value.
7174  */
7175
7176 SV *
7177 Perl_op_const_sv(pTHX_ const OP *o, CV *cv)
7178 {
7179     SV *sv = NULL;
7180
7181     if (!o)
7182         return NULL;
7183
7184     if (o->op_type == OP_LINESEQ && cLISTOPo->op_first)
7185         o = OP_SIBLING(cLISTOPo->op_first);
7186
7187     for (; o; o = o->op_next) {
7188         const OPCODE type = o->op_type;
7189
7190         if (sv && o->op_next == o)
7191             return sv;
7192         if (o->op_next != o) {
7193             if (type == OP_NEXTSTATE
7194              || (type == OP_NULL && !(o->op_flags & OPf_KIDS))
7195              || type == OP_PUSHMARK)
7196                 continue;
7197             if (type == OP_DBSTATE)
7198                 continue;
7199         }
7200         if (type == OP_LEAVESUB || type == OP_RETURN)
7201             break;
7202         if (sv)
7203             return NULL;
7204         if (type == OP_CONST && cSVOPo->op_sv)
7205             sv = cSVOPo->op_sv;
7206         else if (cv && type == OP_CONST) {
7207             sv = PAD_BASE_SV(CvPADLIST(cv), o->op_targ);
7208             if (!sv)
7209                 return NULL;
7210         }
7211         else if (cv && type == OP_PADSV) {
7212             if (CvCONST(cv)) { /* newly cloned anon */
7213                 sv = PAD_BASE_SV(CvPADLIST(cv), o->op_targ);
7214                 /* the candidate should have 1 ref from this pad and 1 ref
7215                  * from the parent */
7216                 if (!sv || SvREFCNT(sv) != 2)
7217                     return NULL;
7218                 sv = newSVsv(sv);
7219                 SvREADONLY_on(sv);
7220                 return sv;
7221             }
7222             else {
7223                 if (PAD_COMPNAME_FLAGS(o->op_targ) & SVf_FAKE)
7224                     sv = &PL_sv_undef; /* an arbitrary non-null value */
7225             }
7226         }
7227         else {
7228             return NULL;
7229         }
7230     }
7231     return sv;
7232 }
7233
7234 static bool
7235 S_already_defined(pTHX_ CV *const cv, OP * const block, OP * const o,
7236                         PADNAME * const name, SV ** const const_svp)
7237 {
7238     assert (cv);
7239     assert (o || name);
7240     assert (const_svp);
7241     if ((!block
7242          )) {
7243         if (CvFLAGS(PL_compcv)) {
7244             /* might have had built-in attrs applied */
7245             const bool pureperl = !CvISXSUB(cv) && CvROOT(cv);
7246             if (CvLVALUE(PL_compcv) && ! CvLVALUE(cv) && pureperl
7247              && ckWARN(WARN_MISC))
7248             {
7249                 /* protect against fatal warnings leaking compcv */
7250                 SAVEFREESV(PL_compcv);
7251                 Perl_warner(aTHX_ packWARN(WARN_MISC), "lvalue attribute ignored after the subroutine has been defined");
7252                 SvREFCNT_inc_simple_void_NN(PL_compcv);
7253             }
7254             CvFLAGS(cv) |=
7255                 (CvFLAGS(PL_compcv) & CVf_BUILTIN_ATTRS
7256                   & ~(CVf_LVALUE * pureperl));
7257         }
7258         return FALSE;
7259     }
7260
7261     /* redundant check for speed: */
7262     if (CvCONST(cv) || ckWARN(WARN_REDEFINE)) {
7263         const line_t oldline = CopLINE(PL_curcop);
7264         SV *namesv = o
7265             ? cSVOPo->op_sv
7266             : sv_2mortal(newSVpvn_utf8(
7267                 PadnamePV(name)+1,PadnameLEN(name)-1, PadnameUTF8(name)
7268               ));
7269         if (PL_parser && PL_parser->copline != NOLINE)
7270             /* This ensures that warnings are reported at the first
7271                line of a redefinition, not the last.  */
7272             CopLINE_set(PL_curcop, PL_parser->copline);
7273         /* protect against fatal warnings leaking compcv */
7274         SAVEFREESV(PL_compcv);
7275         report_redefined_cv(namesv, cv, const_svp);
7276         SvREFCNT_inc_simple_void_NN(PL_compcv);
7277         CopLINE_set(PL_curcop, oldline);
7278     }
7279     SAVEFREESV(cv);
7280     return TRUE;
7281 }
7282
7283 CV *
7284 Perl_newMYSUB(pTHX_ I32 floor, OP *o, OP *proto, OP *attrs, OP *block)
7285 {
7286     CV **spot;
7287     SV **svspot;
7288     const char *ps;
7289     STRLEN ps_len = 0; /* init it to avoid false uninit warning from icc */
7290     U32 ps_utf8 = 0;
7291     CV *cv = NULL;
7292     CV *compcv = PL_compcv;
7293     SV *const_sv;
7294     PADNAME *name;
7295     PADOFFSET pax = o->op_targ;
7296     CV *outcv = CvOUTSIDE(PL_compcv);
7297     CV *clonee = NULL;
7298     HEK *hek = NULL;
7299     bool reusable = FALSE;
7300
7301     PERL_ARGS_ASSERT_NEWMYSUB;
7302
7303     /* Find the pad slot for storing the new sub.
7304        We cannot use PL_comppad, as it is the pad owned by the new sub.  We
7305        need to look in CvOUTSIDE and find the pad belonging to the enclos-
7306        ing sub.  And then we need to dig deeper if this is a lexical from
7307        outside, as in:
7308            my sub foo; sub { sub foo { } }
7309      */
7310    redo:
7311     name = PadlistNAMESARRAY(CvPADLIST(outcv))[pax];
7312     if (PadnameOUTER(name) && PARENT_PAD_INDEX(name)) {
7313         pax = PARENT_PAD_INDEX(name);
7314         outcv = CvOUTSIDE(outcv);
7315         assert(outcv);
7316         goto redo;
7317     }
7318     svspot =
7319         &PadARRAY(PadlistARRAY(CvPADLIST(outcv))
7320                         [CvDEPTH(outcv) ? CvDEPTH(outcv) : 1])[pax];
7321     spot = (CV **)svspot;
7322
7323     if (!(PL_parser && PL_parser->error_count))
7324         move_proto_attr(&proto, &attrs, (GV *)name);
7325
7326     if (proto) {
7327         assert(proto->op_type == OP_CONST);
7328         ps = SvPV_const(((SVOP*)proto)->op_sv, ps_len);
7329         ps_utf8 = SvUTF8(((SVOP*)proto)->op_sv);
7330     }
7331     else
7332         ps = NULL;
7333
7334     if (proto)
7335         SAVEFREEOP(proto);
7336     if (attrs)
7337         SAVEFREEOP(attrs);
7338
7339     if (PL_parser && PL_parser->error_count) {
7340         op_free(block);
7341         SvREFCNT_dec(PL_compcv);
7342         PL_compcv = 0;
7343         goto done;
7344     }
7345
7346     if (CvDEPTH(outcv) && CvCLONE(compcv)) {
7347         cv = *spot;
7348         svspot = (SV **)(spot = &clonee);
7349     }
7350     else if (PadnameIsSTATE(name) || CvDEPTH(outcv))
7351         cv = *spot;
7352     else {
7353         MAGIC *mg;
7354         SvUPGRADE(name, SVt_PVMG);
7355         mg = mg_find(name, PERL_MAGIC_proto);
7356         assert (SvTYPE(*spot) == SVt_PVCV);
7357         if (CvNAMED(*spot))
7358             hek = CvNAME_HEK(*spot);
7359         else {
7360             CvNAME_HEK_set(*spot, hek =
7361                 share_hek(
7362                     PadnamePV(name)+1,
7363                     PadnameLEN(name)-1 * (PadnameUTF8(name) ? -1 : 1), 0
7364                 )
7365             );
7366         }
7367         if (mg) {
7368             assert(mg->mg_obj);
7369             cv = (CV *)mg->mg_obj;
7370         }
7371         else {
7372             sv_magic(name, &PL_sv_undef, PERL_MAGIC_proto, NULL, 0);
7373             mg = mg_find(name, PERL_MAGIC_proto);
7374         }
7375         spot = (CV **)(svspot = &mg->mg_obj);
7376     }
7377
7378     if (!block || !ps || *ps || attrs
7379         || (CvFLAGS(compcv) & CVf_BUILTIN_ATTRS)
7380         )
7381         const_sv = NULL;
7382     else
7383         const_sv = op_const_sv(block, NULL);
7384
7385     if (cv) {
7386         const bool exists = CvROOT(cv) || CvXSUB(cv);
7387
7388         /* if the subroutine doesn't exist and wasn't pre-declared
7389          * with a prototype, assume it will be AUTOLOADed,
7390          * skipping the prototype check
7391          */
7392         if (exists || SvPOK(cv))
7393             cv_ckproto_len_flags(cv, (GV *)name, ps, ps_len, ps_utf8);
7394         /* already defined? */
7395         if (exists) {
7396             if (S_already_defined(aTHX_ cv,block,NULL,name,&const_sv))
7397                 cv = NULL;
7398             else {
7399                 if (attrs) goto attrs;
7400                 /* just a "sub foo;" when &foo is already defined */
7401                 SAVEFREESV(compcv);
7402                 goto done;
7403             }
7404         }
7405         else if (CvDEPTH(outcv) && CvCLONE(compcv)) {
7406             cv = NULL;
7407             reusable = TRUE;
7408         }
7409     }
7410     if (const_sv) {
7411         SvREFCNT_inc_simple_void_NN(const_sv);
7412         SvFLAGS(const_sv) = (SvFLAGS(const_sv) & ~SVs_PADMY) | SVs_PADTMP;
7413         if (cv) {
7414             assert(!CvROOT(cv) && !CvCONST(cv));
7415             cv_forget_slab(cv);
7416         }
7417         else {
7418             cv = MUTABLE_CV(newSV_type(SVt_PVCV));
7419             CvFILE_set_from_cop(cv, PL_curcop);
7420             CvSTASH_set(cv, PL_curstash);
7421             *spot = cv;
7422         }
7423         sv_setpvs(MUTABLE_SV(cv), "");  /* prototype is "" */
7424         CvXSUBANY(cv).any_ptr = const_sv;
7425         CvXSUB(cv) = const_sv_xsub;
7426         CvCONST_on(cv);
7427         CvISXSUB_on(cv);
7428         op_free(block);
7429         SvREFCNT_dec(compcv);
7430         PL_compcv = NULL;
7431         goto setname;
7432     }
7433     /* Checking whether outcv is CvOUTSIDE(compcv) is not sufficient to
7434        determine whether this sub definition is in the same scope as its
7435        declaration.  If this sub definition is inside an inner named pack-
7436        age sub (my sub foo; sub bar { sub foo { ... } }), outcv points to
7437        the package sub.  So check PadnameOUTER(name) too.
7438      */
7439     if (outcv == CvOUTSIDE(compcv) && !PadnameOUTER(name)) { 
7440         assert(!CvWEAKOUTSIDE(compcv));
7441         SvREFCNT_dec(CvOUTSIDE(compcv));
7442         CvWEAKOUTSIDE_on(compcv);
7443     }
7444     /* XXX else do we have a circular reference? */
7445     if (cv) {   /* must reuse cv in case stub is referenced elsewhere */
7446         /* transfer PL_compcv to cv */
7447         if (block
7448         ) {
7449             cv_flags_t preserved_flags =
7450                 CvFLAGS(cv) & (CVf_BUILTIN_ATTRS|CVf_NAMED);
7451             PADLIST *const temp_padl = CvPADLIST(cv);
7452             CV *const temp_cv = CvOUTSIDE(cv);
7453             const cv_flags_t other_flags =
7454                 CvFLAGS(cv) & (CVf_SLABBED|CVf_WEAKOUTSIDE);
7455             OP * const cvstart = CvSTART(cv);
7456
7457             SvPOK_off(cv);
7458             CvFLAGS(cv) =
7459                 CvFLAGS(compcv) | preserved_flags;
7460             CvOUTSIDE(cv) = CvOUTSIDE(compcv);
7461             CvOUTSIDE_SEQ(cv) = CvOUTSIDE_SEQ(compcv);
7462             CvPADLIST(cv) = CvPADLIST(compcv);
7463             CvOUTSIDE(compcv) = temp_cv;
7464             CvPADLIST(compcv) = temp_padl;
7465             CvSTART(cv) = CvSTART(compcv);
7466             CvSTART(compcv) = cvstart;
7467             CvFLAGS(compcv) &= ~(CVf_SLABBED|CVf_WEAKOUTSIDE);
7468             CvFLAGS(compcv) |= other_flags;
7469
7470             if (CvFILE(cv) && CvDYNFILE(cv)) {
7471                 Safefree(CvFILE(cv));
7472             }
7473
7474             /* inner references to compcv must be fixed up ... */
7475             pad_fixup_inner_anons(CvPADLIST(cv), compcv, cv);
7476             if (PERLDB_INTER)/* Advice debugger on the new sub. */
7477               ++PL_sub_generation;
7478         }
7479         else {
7480             /* Might have had built-in attributes applied -- propagate them. */
7481             CvFLAGS(cv) |= (CvFLAGS(compcv) & CVf_BUILTIN_ATTRS);
7482         }
7483         /* ... before we throw it away */
7484         SvREFCNT_dec(compcv);
7485         PL_compcv = compcv = cv;
7486     }
7487     else {
7488         cv = compcv;
7489         *spot = cv;
7490     }
7491    setname:
7492     if (!CvNAME_HEK(cv)) {
7493         CvNAME_HEK_set(cv,
7494          hek
7495           ? share_hek_hek(hek)
7496           : share_hek(PadnamePV(name)+1,
7497                       PadnameLEN(name)-1 * (PadnameUTF8(name) ? -1 : 1),
7498                       0)
7499         );
7500     }
7501     if (const_sv) goto clone;
7502
7503     CvFILE_set_from_cop(cv, PL_curcop);
7504     CvSTASH_set(cv, PL_curstash);
7505
7506     if (ps) {
7507         sv_setpvn(MUTABLE_SV(cv), ps, ps_len);
7508         if ( ps_utf8 ) SvUTF8_on(MUTABLE_SV(cv));
7509     }
7510
7511     if (!block)
7512         goto attrs;
7513
7514     /* If we assign an optree to a PVCV, then we've defined a subroutine that
7515        the debugger could be able to set a breakpoint in, so signal to
7516        pp_entereval that it should not throw away any saved lines at scope
7517        exit.  */
7518        
7519     PL_breakable_sub_gen++;
7520     /* This makes sub {}; work as expected.  */
7521     if (block->op_type == OP_STUB) {
7522             OP* const newblock = newSTATEOP(0, NULL, 0);
7523             op_free(block);
7524             block = newblock;
7525     }
7526     CvROOT(cv) = CvLVALUE(cv)
7527                    ? newUNOP(OP_LEAVESUBLV, 0,
7528                              op_lvalue(scalarseq(block), OP_LEAVESUBLV))
7529                    : newUNOP(OP_LEAVESUB, 0, scalarseq(block));
7530     CvROOT(cv)->op_private |= OPpREFCOUNTED;
7531     OpREFCNT_set(CvROOT(cv), 1);
7532     /* The cv no longer needs to hold a refcount on the slab, as CvROOT
7533        itself has a refcount. */
7534     CvSLABBED_off(cv);
7535     OpslabREFCNT_dec_padok((OPSLAB *)CvSTART(cv));
7536     CvSTART(cv) = LINKLIST(CvROOT(cv));
7537     CvROOT(cv)->op_next = 0;
7538     CALL_PEEP(CvSTART(cv));
7539     finalize_optree(CvROOT(cv));
7540     S_prune_chain_head(&CvSTART(cv));
7541
7542     /* now that optimizer has done its work, adjust pad values */
7543
7544     pad_tidy(CvCLONE(cv) ? padtidy_SUBCLONE : padtidy_SUB);
7545
7546     if (CvCLONE(cv)) {
7547         assert(!CvCONST(cv));
7548         if (ps && !*ps && op_const_sv(block, cv))
7549             CvCONST_on(cv);
7550     }
7551
7552   attrs:
7553     if (attrs) {
7554         /* Need to do a C<use attributes $stash_of_cv,\&cv,@attrs>. */
7555         apply_attrs(PL_curstash, MUTABLE_SV(cv), attrs);
7556     }
7557
7558     if (block) {
7559         if (PERLDB_SUBLINE && PL_curstash != PL_debstash) {
7560             SV * const tmpstr = sv_newmortal();
7561             GV * const db_postponed = gv_fetchpvs("DB::postponed",
7562                                                   GV_ADDMULTI, SVt_PVHV);
7563             HV *hv;
7564             SV * const sv = Perl_newSVpvf(aTHX_ "%s:%ld-%ld",
7565                                           CopFILE(PL_curcop),
7566                                           (long)PL_subline,
7567                                           (long)CopLINE(PL_curcop));
7568             if (HvNAME_HEK(PL_curstash)) {
7569                 sv_sethek(tmpstr, HvNAME_HEK(PL_curstash));
7570                 sv_catpvs(tmpstr, "::");
7571             }
7572             else sv_setpvs(tmpstr, "__ANON__::");
7573             sv_catpvn_flags(tmpstr, PadnamePV(name)+1, PadnameLEN(name)-1,
7574                             PadnameUTF8(name) ? SV_CATUTF8 : SV_CATBYTES);
7575             (void)hv_store(GvHV(PL_DBsub), SvPVX_const(tmpstr),
7576                     SvUTF8(tmpstr) ? -(I32)SvCUR(tmpstr) : (I32)SvCUR(tmpstr), sv, 0);
7577             hv = GvHVn(db_postponed);
7578             if (HvTOTALKEYS(hv) > 0 && hv_exists(hv, SvPVX_const(tmpstr), SvUTF8(tmpstr) ? -(I32)SvCUR(tmpstr) : (I32)SvCUR(tmpstr))) {
7579                 CV * const pcv = GvCV(db_postponed);
7580                 if (pcv) {
7581                     dSP;
7582                     PUSHMARK(SP);
7583                     XPUSHs(tmpstr);
7584                     PUTBACK;
7585                     call_sv(MUTABLE_SV(pcv), G_DISCARD);
7586                 }
7587             }
7588         }
7589     }
7590
7591   clone:
7592     if (clonee) {
7593         assert(CvDEPTH(outcv));
7594         spot = (CV **)
7595             &PadARRAY(PadlistARRAY(CvPADLIST(outcv))[CvDEPTH(outcv)])[pax];
7596         if (reusable) cv_clone_into(clonee, *spot);
7597         else *spot = cv_clone(clonee);
7598         SvREFCNT_dec_NN(clonee);
7599         cv = *spot;
7600         SvPADMY_on(cv);
7601     }
7602     if (CvDEPTH(outcv) && !reusable && PadnameIsSTATE(name)) {
7603         PADOFFSET depth = CvDEPTH(outcv);
7604         while (--depth) {
7605             SV *oldcv;
7606             svspot = &PadARRAY(PadlistARRAY(CvPADLIST(outcv))[depth])[pax];
7607             oldcv = *svspot;
7608             *svspot = SvREFCNT_inc_simple_NN(cv);
7609             SvREFCNT_dec(oldcv);
7610         }
7611     }
7612
7613   done:
7614     if (PL_parser)
7615         PL_parser->copline = NOLINE;
7616     LEAVE_SCOPE(floor);
7617     if (o) op_free(o);
7618     return cv;
7619 }
7620
7621 /* _x = extended */
7622 CV *
7623 Perl_newATTRSUB_x(pTHX_ I32 floor, OP *o, OP *proto, OP *attrs,
7624                             OP *block, bool o_is_gv)
7625 {
7626     GV *gv;
7627     const char *ps;
7628     STRLEN ps_len = 0; /* init it to avoid false uninit warning from icc */
7629     U32 ps_utf8 = 0;
7630     CV *cv = NULL;
7631     SV *const_sv;
7632     const bool ec = PL_parser && PL_parser->error_count;
7633     /* If the subroutine has no body, no attributes, and no builtin attributes
7634        then it's just a sub declaration, and we may be able to get away with
7635        storing with a placeholder scalar in the symbol table, rather than a
7636        full GV and CV.  If anything is present then it will take a full CV to
7637        store it.  */
7638     const I32 gv_fetch_flags
7639         = ec ? GV_NOADD_NOINIT :
7640         (block || attrs || (CvFLAGS(PL_compcv) & CVf_BUILTIN_ATTRS))
7641         ? GV_ADDMULTI : GV_ADDMULTI | GV_NOINIT;
7642     STRLEN namlen = 0;
7643     const char * const name =
7644          o ? SvPV_const(o_is_gv ? (SV *)o : cSVOPo->op_sv, namlen) : NULL;
7645     bool has_name;
7646     bool name_is_utf8 = o && !o_is_gv && SvUTF8(cSVOPo->op_sv);
7647 #ifdef PERL_DEBUG_READONLY_OPS
7648     OPSLAB *slab = NULL;
7649 #endif
7650
7651     if (o_is_gv) {
7652         gv = (GV*)o;
7653         o = NULL;
7654         has_name = TRUE;
7655     } else if (name) {
7656         gv = gv_fetchsv(cSVOPo->op_sv, gv_fetch_flags, SVt_PVCV);
7657         has_name = TRUE;
7658     } else if (PERLDB_NAMEANON && CopLINE(PL_curcop)) {
7659         SV * const sv = sv_newmortal();
7660         Perl_sv_setpvf(aTHX_ sv, "%s[%s:%"IVdf"]",
7661                        PL_curstash ? "__ANON__" : "__ANON__::__ANON__",
7662                        CopFILE(PL_curcop), (IV)CopLINE(PL_curcop));
7663         gv = gv_fetchsv(sv, gv_fetch_flags, SVt_PVCV);
7664         has_name = TRUE;
7665     } else if (PL_curstash) {
7666         gv = gv_fetchpvs("__ANON__", gv_fetch_flags, SVt_PVCV);
7667         has_name = FALSE;
7668     } else {
7669         gv = gv_fetchpvs("__ANON__::__ANON__", gv_fetch_flags, SVt_PVCV);
7670         has_name = FALSE;
7671     }
7672
7673     if (!ec)
7674         move_proto_attr(&proto, &attrs, gv);
7675
7676     if (proto) {
7677         assert(proto->op_type == OP_CONST);
7678         ps = SvPV_const(((SVOP*)proto)->op_sv, ps_len);
7679         ps_utf8 = SvUTF8(((SVOP*)proto)->op_sv);
7680     }
7681     else
7682         ps = NULL;
7683
7684     if (o)
7685         SAVEFREEOP(o);
7686     if (proto)
7687         SAVEFREEOP(proto);
7688     if (attrs)
7689         SAVEFREEOP(attrs);
7690
7691     if (ec) {
7692         op_free(block);
7693         if (name) SvREFCNT_dec(PL_compcv);
7694         else cv = PL_compcv;
7695         PL_compcv = 0;
7696         if (name && block) {
7697             const char *s = strrchr(name, ':');
7698             s = s ? s+1 : name;
7699             if (strEQ(s, "BEGIN")) {
7700                 if (PL_in_eval & EVAL_KEEPERR)
7701                     Perl_croak_nocontext("BEGIN not safe after errors--compilation aborted");
7702                 else {
7703                     SV * const errsv = ERRSV;
7704                     /* force display of errors found but not reported */
7705                     sv_catpvs(errsv, "BEGIN not safe after errors--compilation aborted");
7706                     Perl_croak_nocontext("%"SVf, SVfARG(errsv));
7707                 }
7708             }
7709         }
7710         goto done;
7711     }
7712
7713     if (SvTYPE(gv) != SVt_PVGV) {       /* Maybe prototype now, and had at
7714                                            maximum a prototype before. */
7715         if (SvTYPE(gv) > SVt_NULL) {
7716             cv_ckproto_len_flags((const CV *)gv,
7717                                  o ? (const GV *)cSVOPo->op_sv : NULL, ps,
7718                                  ps_len, ps_utf8);
7719         }
7720         if (ps) {
7721             sv_setpvn(MUTABLE_SV(gv), ps, ps_len);
7722             if ( ps_utf8 ) SvUTF8_on(MUTABLE_SV(gv));
7723         }
7724         else
7725             sv_setiv(MUTABLE_SV(gv), -1);
7726
7727         SvREFCNT_dec(PL_compcv);
7728         cv = PL_compcv = NULL;
7729         goto done;
7730     }
7731
7732     cv = (!name || GvCVGEN(gv)) ? NULL : GvCV(gv);
7733
7734     if (!block || !ps || *ps || attrs
7735         || (CvFLAGS(PL_compcv) & CVf_BUILTIN_ATTRS)
7736         )
7737         const_sv = NULL;
7738     else
7739         const_sv = op_const_sv(block, NULL);
7740
7741     if (cv) {
7742         const bool exists = CvROOT(cv) || CvXSUB(cv);
7743
7744         /* if the subroutine doesn't exist and wasn't pre-declared
7745          * with a prototype, assume it will be AUTOLOADed,
7746          * skipping the prototype check
7747          */
7748         if (exists || SvPOK(cv))
7749             cv_ckproto_len_flags(cv, gv, ps, ps_len, ps_utf8);
7750         /* already defined (or promised)? */
7751         if (exists || GvASSUMECV(gv)) {
7752             if (S_already_defined(aTHX_ cv, block, o, NULL, &const_sv))
7753                 cv = NULL;
7754             else {
7755                 if (attrs) goto attrs;
7756                 /* just a "sub foo;" when &foo is already defined */
7757                 SAVEFREESV(PL_compcv);
7758                 goto done;
7759             }
7760         }
7761     }
7762     if (const_sv) {
7763         SvREFCNT_inc_simple_void_NN(const_sv);
7764         SvFLAGS(const_sv) = (SvFLAGS(const_sv) & ~SVs_PADMY) | SVs_PADTMP;
7765         if (cv) {
7766             assert(!CvROOT(cv) && !CvCONST(cv));
7767             cv_forget_slab(cv);
7768             sv_setpvs(MUTABLE_SV(cv), "");  /* prototype is "" */
7769             CvXSUBANY(cv).any_ptr = const_sv;
7770             CvXSUB(cv) = const_sv_xsub;
7771             CvCONST_on(cv);
7772             CvISXSUB_on(cv);
7773         }
7774         else {
7775             GvCV_set(gv, NULL);
7776             cv = newCONSTSUB_flags(
7777                 NULL, name, namlen, name_is_utf8 ? SVf_UTF8 : 0,
7778                 const_sv
7779             );
7780         }
7781         op_free(block);
7782         SvREFCNT_dec(PL_compcv);
7783         PL_compcv = NULL;
7784         goto done;
7785     }
7786     if (cv) {                           /* must reuse cv if autoloaded */
7787         /* transfer PL_compcv to cv */
7788         if (block
7789         ) {
7790             cv_flags_t existing_builtin_attrs = CvFLAGS(cv) & CVf_BUILTIN_ATTRS;
7791             PADLIST *const temp_av = CvPADLIST(cv);
7792             CV *const temp_cv = CvOUTSIDE(cv);
7793             const cv_flags_t other_flags =
7794                 CvFLAGS(cv) & (CVf_SLABBED|CVf_WEAKOUTSIDE);
7795             OP * const cvstart = CvSTART(cv);
7796
7797             CvGV_set(cv,gv);
7798             assert(!CvCVGV_RC(cv));
7799             assert(CvGV(cv) == gv);
7800
7801             SvPOK_off(cv);
7802             CvFLAGS(cv) = CvFLAGS(PL_compcv) | existing_builtin_attrs;
7803             CvOUTSIDE(cv) = CvOUTSIDE(PL_compcv);
7804             CvOUTSIDE_SEQ(cv) = CvOUTSIDE_SEQ(PL_compcv);
7805             CvPADLIST(cv) = CvPADLIST(PL_compcv);
7806             CvOUTSIDE(PL_compcv) = temp_cv;
7807             CvPADLIST(PL_compcv) = temp_av;
7808             CvSTART(cv) = CvSTART(PL_compcv);
7809             CvSTART(PL_compcv) = cvstart;
7810             CvFLAGS(PL_compcv) &= ~(CVf_SLABBED|CVf_WEAKOUTSIDE);
7811             CvFLAGS(PL_compcv) |= other_flags;
7812
7813             if (CvFILE(cv) && CvDYNFILE(cv)) {
7814                 Safefree(CvFILE(cv));
7815     }
7816             CvFILE_set_from_cop(cv, PL_curcop);
7817             CvSTASH_set(cv, PL_curstash);
7818
7819             /* inner references to PL_compcv must be fixed up ... */
7820             pad_fixup_inner_anons(CvPADLIST(cv), PL_compcv, cv);
7821             if (PERLDB_INTER)/* Advice debugger on the new sub. */
7822               ++PL_sub_generation;
7823         }
7824         else {
7825             /* Might have had built-in attributes applied -- propagate them. */
7826             CvFLAGS(cv) |= (CvFLAGS(PL_compcv) & CVf_BUILTIN_ATTRS);
7827         }
7828         /* ... before we throw it away */
7829         SvREFCNT_dec(PL_compcv);
7830         PL_compcv = cv;
7831     }
7832     else {
7833         cv = PL_compcv;
7834         if (name) {
7835             GvCV_set(gv, cv);
7836             GvCVGEN(gv) = 0;
7837             if (HvENAME_HEK(GvSTASH(gv)))
7838                 /* sub Foo::bar { (shift)+1 } */
7839                 gv_method_changed(gv);
7840         }
7841     }
7842     if (!CvGV(cv)) {
7843         CvGV_set(cv, gv);
7844         CvFILE_set_from_cop(cv, PL_curcop);
7845         CvSTASH_set(cv, PL_curstash);
7846     }
7847
7848     if (ps) {
7849         sv_setpvn(MUTABLE_SV(cv), ps, ps_len);
7850         if ( ps_utf8 ) SvUTF8_on(MUTABLE_SV(cv));
7851     }
7852
7853     if (!block)
7854         goto attrs;
7855
7856     /* If we assign an optree to a PVCV, then we've defined a subroutine that
7857        the debugger could be able to set a breakpoint in, so signal to
7858        pp_entereval that it should not throw away any saved lines at scope
7859        exit.  */
7860        
7861     PL_breakable_sub_gen++;
7862     /* This makes sub {}; work as expected.  */
7863     if (block->op_type == OP_STUB) {
7864             OP* const newblock = newSTATEOP(0, NULL, 0);
7865             op_free(block);
7866             block = newblock;
7867     }
7868     CvROOT(cv) = CvLVALUE(cv)
7869                    ? newUNOP(OP_LEAVESUBLV, 0,
7870                              op_lvalue(scalarseq(block), OP_LEAVESUBLV))
7871                    : newUNOP(OP_LEAVESUB, 0, scalarseq(block));
7872     CvROOT(cv)->op_private |= OPpREFCOUNTED;
7873     OpREFCNT_set(CvROOT(cv), 1);
7874     /* The cv no longer needs to hold a refcount on the slab, as CvROOT
7875        itself has a refcount. */
7876     CvSLABBED_off(cv);
7877     OpslabREFCNT_dec_padok((OPSLAB *)CvSTART(cv));
7878 #ifdef PERL_DEBUG_READONLY_OPS
7879     slab = (OPSLAB *)CvSTART(cv);
7880 #endif
7881     CvSTART(cv) = LINKLIST(CvROOT(cv));
7882     CvROOT(cv)->op_next = 0;
7883     CALL_PEEP(CvSTART(cv));
7884     finalize_optree(CvROOT(cv));
7885     S_prune_chain_head(&CvSTART(cv));
7886
7887     /* now that optimizer has done its work, adjust pad values */
7888
7889     pad_tidy(CvCLONE(cv) ? padtidy_SUBCLONE : padtidy_SUB);
7890
7891     if (CvCLONE(cv)) {
7892         assert(!CvCONST(cv));
7893         if (ps && !*ps && op_const_sv(block, cv))
7894             CvCONST_on(cv);
7895     }
7896
7897   attrs:
7898     if (attrs) {
7899         /* Need to do a C<use attributes $stash_of_cv,\&cv,@attrs>. */
7900         HV *stash = name && GvSTASH(CvGV(cv)) ? GvSTASH(CvGV(cv)) : PL_curstash;
7901         if (!name) SAVEFREESV(cv);
7902         apply_attrs(stash, MUTABLE_SV(cv), attrs);
7903         if (!name) SvREFCNT_inc_simple_void_NN(cv);
7904     }
7905
7906     if (block && has_name) {
7907         if (PERLDB_SUBLINE && PL_curstash != PL_debstash) {
7908             SV * const tmpstr = sv_newmortal();
7909             GV * const db_postponed = gv_fetchpvs("DB::postponed",
7910                                                   GV_ADDMULTI, SVt_PVHV);
7911             HV *hv;
7912             SV * const sv = Perl_newSVpvf(aTHX_ "%s:%ld-%ld",
7913                                           CopFILE(PL_curcop),
7914                                           (long)PL_subline,
7915                                           (long)CopLINE(PL_curcop));
7916             gv_efullname3(tmpstr, gv, NULL);
7917             (void)hv_store(GvHV(PL_DBsub), SvPVX_const(tmpstr),
7918                     SvUTF8(tmpstr) ? -(I32)SvCUR(tmpstr) : (I32)SvCUR(tmpstr), sv, 0);
7919             hv = GvHVn(db_postponed);
7920             if (HvTOTALKEYS(hv) > 0 && hv_exists(hv, SvPVX_const(tmpstr), SvUTF8(tmpstr) ? -(I32)SvCUR(tmpstr) : (I32)SvCUR(tmpstr))) {
7921                 CV * const pcv = GvCV(db_postponed);
7922                 if (pcv) {
7923                     dSP;
7924                     PUSHMARK(SP);
7925                     XPUSHs(tmpstr);
7926                     PUTBACK;
7927                     call_sv(MUTABLE_SV(pcv), G_DISCARD);
7928                 }
7929             }
7930         }
7931
7932         if (name && ! (PL_parser && PL_parser->error_count))
7933             process_special_blocks(floor, name, gv, cv);
7934     }
7935
7936   done:
7937     if (PL_parser)
7938         PL_parser->copline = NOLINE;
7939     LEAVE_SCOPE(floor);
7940 #ifdef PERL_DEBUG_READONLY_OPS
7941     /* Watch out for BEGIN blocks */
7942     if (slab && gv && isGV(gv) && GvCV(gv)) Slab_to_ro(slab);
7943 #endif
7944     return cv;
7945 }
7946
7947 STATIC void
7948 S_process_special_blocks(pTHX_ I32 floor, const char *const fullname,
7949                          GV *const gv,
7950                          CV *const cv)
7951 {
7952     const char *const colon = strrchr(fullname,':');
7953     const char *const name = colon ? colon + 1 : fullname;
7954
7955     PERL_ARGS_ASSERT_PROCESS_SPECIAL_BLOCKS;
7956
7957     if (*name == 'B') {
7958         if (strEQ(name, "BEGIN")) {
7959             const I32 oldscope = PL_scopestack_ix;
7960             dSP;
7961             if (floor) LEAVE_SCOPE(floor);
7962             ENTER;
7963             PUSHSTACKi(PERLSI_REQUIRE);
7964             SAVECOPFILE(&PL_compiling);
7965             SAVECOPLINE(&PL_compiling);
7966             SAVEVPTR(PL_curcop);
7967
7968             DEBUG_x( dump_sub(gv) );
7969             Perl_av_create_and_push(aTHX_ &PL_beginav, MUTABLE_SV(cv));
7970             GvCV_set(gv,0);             /* cv has been hijacked */
7971             call_list(oldscope, PL_beginav);
7972
7973             POPSTACK;
7974             LEAVE;
7975         }
7976         else
7977             return;
7978     } else {
7979         if (*name == 'E') {
7980             if strEQ(name, "END") {
7981                 DEBUG_x( dump_sub(gv) );
7982                 Perl_av_create_and_unshift_one(aTHX_ &PL_endav, MUTABLE_SV(cv));
7983             } else
7984                 return;
7985         } else if (*name == 'U') {
7986             if (strEQ(name, "UNITCHECK")) {
7987                 /* It's never too late to run a unitcheck block */
7988                 Perl_av_create_and_unshift_one(aTHX_ &PL_unitcheckav, MUTABLE_SV(cv));
7989             }
7990             else
7991                 return;
7992         } else if (*name == 'C') {
7993             if (strEQ(name, "CHECK")) {
7994                 if (PL_main_start)
7995                     /* diag_listed_as: Too late to run %s block */
7996                     Perl_ck_warner(aTHX_ packWARN(WARN_VOID),
7997                                    "Too late to run CHECK block");
7998                 Perl_av_create_and_unshift_one(aTHX_ &PL_checkav, MUTABLE_SV(cv));
7999             }
8000             else
8001                 return;
8002         } else if (*name == 'I') {
8003             if (strEQ(name, "INIT")) {
8004                 if (PL_main_start)
8005                     /* diag_listed_as: Too late to run %s block */
8006                     Perl_ck_warner(aTHX_ packWARN(WARN_VOID),
8007                                    "Too late to run INIT block");
8008                 Perl_av_create_and_push(aTHX_ &PL_initav, MUTABLE_SV(cv));
8009             }
8010             else
8011                 return;
8012         } else
8013             return;
8014         DEBUG_x( dump_sub(gv) );
8015         GvCV_set(gv,0);         /* cv has been hijacked */
8016     }
8017 }
8018
8019 /*
8020 =for apidoc newCONSTSUB
8021
8022 See L</newCONSTSUB_flags>.
8023
8024 =cut
8025 */
8026
8027 CV *
8028 Perl_newCONSTSUB(pTHX_ HV *stash, const char *name, SV *sv)
8029 {
8030     return newCONSTSUB_flags(stash, name, name ? strlen(name) : 0, 0, sv);
8031 }
8032
8033 /*
8034 =for apidoc newCONSTSUB_flags
8035
8036 Creates a constant sub equivalent to Perl C<sub FOO () { 123 }> which is
8037 eligible for inlining at compile-time.
8038
8039 Currently, the only useful value for C<flags> is SVf_UTF8.
8040
8041 The newly created subroutine takes ownership of a reference to the passed in
8042 SV.
8043
8044 Passing NULL for SV creates a constant sub equivalent to C<sub BAR () {}>,
8045 which won't be called if used as a destructor, but will suppress the overhead
8046 of a call to C<AUTOLOAD>.  (This form, however, isn't eligible for inlining at
8047 compile time.)
8048
8049 =cut
8050 */
8051
8052 CV *
8053 Perl_newCONSTSUB_flags(pTHX_ HV *stash, const char *name, STRLEN len,
8054                              U32 flags, SV *sv)
8055 {
8056     CV* cv;
8057     const char *const file = CopFILE(PL_curcop);
8058
8059     ENTER;
8060
8061     if (IN_PERL_RUNTIME) {
8062         /* at runtime, it's not safe to manipulate PL_curcop: it may be
8063          * an op shared between threads. Use a non-shared COP for our
8064          * dirty work */
8065          SAVEVPTR(PL_curcop);
8066          SAVECOMPILEWARNINGS();
8067          PL_compiling.cop_warnings = DUP_WARNINGS(PL_curcop->cop_warnings);
8068          PL_curcop = &PL_compiling;
8069     }
8070     SAVECOPLINE(PL_curcop);
8071     CopLINE_set(PL_curcop, PL_parser ? PL_parser->copline : NOLINE);
8072
8073     SAVEHINTS();
8074     PL_hints &= ~HINT_BLOCK_SCOPE;
8075
8076     if (stash) {
8077         SAVEGENERICSV(PL_curstash);
8078         PL_curstash = (HV *)SvREFCNT_inc_simple_NN(stash);
8079     }
8080
8081     /* Protect sv against leakage caused by fatal warnings. */
8082     if (sv) SAVEFREESV(sv);
8083
8084     /* file becomes the CvFILE. For an XS, it's usually static storage,
8085        and so doesn't get free()d.  (It's expected to be from the C pre-
8086        processor __FILE__ directive). But we need a dynamically allocated one,
8087        and we need it to get freed.  */
8088     cv = newXS_len_flags(name, len,
8089                          sv && SvTYPE(sv) == SVt_PVAV
8090                              ? const_av_xsub
8091                              : const_sv_xsub,
8092                          file ? file : "", "",
8093                          &sv, XS_DYNAMIC_FILENAME | flags);
8094     CvXSUBANY(cv).any_ptr = SvREFCNT_inc_simple(sv);
8095     CvCONST_on(cv);
8096
8097     LEAVE;
8098
8099     return cv;
8100 }
8101
8102 CV *
8103 Perl_newXS_flags(pTHX_ const char *name, XSUBADDR_t subaddr,
8104                  const char *const filename, const char *const proto,
8105                  U32 flags)
8106 {
8107     PERL_ARGS_ASSERT_NEWXS_FLAGS;
8108     return newXS_len_flags(
8109        name, name ? strlen(name) : 0, subaddr, filename, proto, NULL, flags
8110     );
8111 }
8112
8113 CV *
8114 Perl_newXS_len_flags(pTHX_ const char *name, STRLEN len,
8115                            XSUBADDR_t subaddr, const char *const filename,
8116                            const char *const proto, SV **const_svp,
8117                            U32 flags)
8118 {
8119     CV *cv;
8120     bool interleave = FALSE;
8121
8122     PERL_ARGS_ASSERT_NEWXS_LEN_FLAGS;
8123
8124     {
8125         GV * const gv = gv_fetchpvn(
8126                             name ? name : PL_curstash ? "__ANON__" : "__ANON__::__ANON__",
8127                             name ? len : PL_curstash ? sizeof("__ANON__") - 1:
8128                                 sizeof("__ANON__::__ANON__") - 1,
8129                             GV_ADDMULTI | flags, SVt_PVCV);
8130     
8131         if (!subaddr)
8132             Perl_croak(aTHX_ "panic: no address for '%s' in '%s'", name, filename);
8133     
8134         if ((cv = (name ? GvCV(gv) : NULL))) {
8135             if (GvCVGEN(gv)) {
8136                 /* just a cached method */
8137                 SvREFCNT_dec(cv);
8138                 cv = NULL;
8139             }
8140             else if (CvROOT(cv) || CvXSUB(cv) || GvASSUMECV(gv)) {
8141                 /* already defined (or promised) */
8142                 /* Redundant check that allows us to avoid creating an SV
8143                    most of the time: */
8144                 if (CvCONST(cv) || ckWARN(WARN_REDEFINE)) {
8145                     report_redefined_cv(newSVpvn_flags(
8146                                          name,len,(flags&SVf_UTF8)|SVs_TEMP
8147                                         ),
8148                                         cv, const_svp);
8149                 }
8150                 interleave = TRUE;
8151                 ENTER;
8152                 SAVEFREESV(cv);
8153                 cv = NULL;
8154             }
8155         }
8156     
8157         if (cv)                         /* must reuse cv if autoloaded */
8158             cv_undef(cv);
8159         else {
8160             cv = MUTABLE_CV(newSV_type(SVt_PVCV));
8161             if (name) {
8162                 GvCV_set(gv,cv);
8163                 GvCVGEN(gv) = 0;
8164                 if (HvENAME_HEK(GvSTASH(gv)))
8165                     gv_method_changed(gv); /* newXS */
8166             }
8167         }
8168         if (!name)
8169             CvANON_on(cv);
8170         CvGV_set(cv, gv);
8171         (void)gv_fetchfile(filename);
8172         CvFILE(cv) = (char *)filename; /* NOTE: not copied, as it is expected to be
8173                                     an external constant string */
8174         assert(!CvDYNFILE(cv)); /* cv_undef should have turned it off */
8175         CvISXSUB_on(cv);
8176         CvXSUB(cv) = subaddr;
8177     
8178         if (name)
8179             process_special_blocks(0, name, gv, cv);
8180     }
8181
8182     if (flags & XS_DYNAMIC_FILENAME) {
8183         CvFILE(cv) = savepv(filename);
8184         CvDYNFILE_on(cv);
8185     }
8186     sv_setpv(MUTABLE_SV(cv), proto);
8187     if (interleave) LEAVE;
8188     return cv;
8189 }
8190
8191 CV *
8192 Perl_newSTUB(pTHX_ GV *gv, bool fake)
8193 {
8194     CV *cv = MUTABLE_CV(newSV_type(SVt_PVCV));
8195     GV *cvgv;
8196     PERL_ARGS_ASSERT_NEWSTUB;
8197     assert(!GvCVu(gv));
8198     GvCV_set(gv, cv);
8199     GvCVGEN(gv) = 0;
8200     if (!fake && HvENAME_HEK(GvSTASH(gv)))
8201         gv_method_changed(gv);
8202     if (SvFAKE(gv)) {
8203         cvgv = gv_fetchsv((SV *)gv, GV_ADDMULTI, SVt_PVCV);
8204         SvFAKE_off(cvgv);
8205     }
8206     else cvgv = gv;
8207     CvGV_set(cv, cvgv);
8208     CvFILE_set_from_cop(cv, PL_curcop);
8209     CvSTASH_set(cv, PL_curstash);
8210     GvMULTI_on(gv);
8211     return cv;
8212 }
8213
8214 /*
8215 =for apidoc U||newXS
8216
8217 Used by C<xsubpp> to hook up XSUBs as Perl subs.  I<filename> needs to be
8218 static storage, as it is used directly as CvFILE(), without a copy being made.
8219
8220 =cut
8221 */
8222
8223 CV *
8224 Perl_newXS(pTHX_ const char *name, XSUBADDR_t subaddr, const char *filename)
8225 {
8226     PERL_ARGS_ASSERT_NEWXS;
8227     return newXS_len_flags(
8228         name, name ? strlen(name) : 0, subaddr, filename, NULL, NULL, 0
8229     );
8230 }
8231
8232 void
8233 Perl_newFORM(pTHX_ I32 floor, OP *o, OP *block)
8234 {
8235     CV *cv;
8236
8237     GV *gv;
8238
8239     if (PL_parser && PL_parser->error_count) {
8240         op_free(block);
8241         goto finish;
8242     }
8243
8244     gv = o
8245         ? gv_fetchsv(cSVOPo->op_sv, GV_ADD, SVt_PVFM)
8246         : gv_fetchpvs("STDOUT", GV_ADD|GV_NOTQUAL, SVt_PVFM);
8247
8248     GvMULTI_on(gv);
8249     if ((cv = GvFORM(gv))) {
8250         if (ckWARN(WARN_REDEFINE)) {
8251             const line_t oldline = CopLINE(PL_curcop);
8252             if (PL_parser && PL_parser->copline != NOLINE)
8253                 CopLINE_set(PL_curcop, PL_parser->copline);
8254             if (o) {
8255                 Perl_warner(aTHX_ packWARN(WARN_REDEFINE),
8256                             "Format %"SVf" redefined", SVfARG(cSVOPo->op_sv));
8257             } else {
8258                 /* diag_listed_as: Format %s redefined */
8259                 Perl_warner(aTHX_ packWARN(WARN_REDEFINE),
8260                             "Format STDOUT redefined");
8261             }
8262             CopLINE_set(PL_curcop, oldline);
8263         }
8264         SvREFCNT_dec(cv);
8265     }
8266     cv = PL_compcv;
8267     GvFORM(gv) = (CV *)SvREFCNT_inc_simple_NN(cv);
8268     CvGV_set(cv, gv);
8269     CvFILE_set_from_cop(cv, PL_curcop);
8270
8271
8272     pad_tidy(padtidy_FORMAT);
8273     CvROOT(cv) = newUNOP(OP_LEAVEWRITE, 0, scalarseq(block));
8274     CvROOT(cv)->op_private |= OPpREFCOUNTED;
8275     OpREFCNT_set(CvROOT(cv), 1);
8276     CvSTART(cv) = LINKLIST(CvROOT(cv));
8277     CvROOT(cv)->op_next = 0;
8278     CALL_PEEP(CvSTART(cv));
8279     finalize_optree(CvROOT(cv));
8280     S_prune_chain_head(&CvSTART(cv));
8281     cv_forget_slab(cv);
8282
8283   finish:
8284     op_free(o);
8285     if (PL_parser)
8286         PL_parser->copline = NOLINE;
8287     LEAVE_SCOPE(floor);
8288 }
8289
8290 OP *
8291 Perl_newANONLIST(pTHX_ OP *o)
8292 {
8293     return convert(OP_ANONLIST, OPf_SPECIAL, o);
8294 }
8295
8296 OP *
8297 Perl_newANONHASH(pTHX_ OP *o)
8298 {
8299     return convert(OP_ANONHASH, OPf_SPECIAL, o);
8300 }
8301
8302 OP *
8303 Perl_newANONSUB(pTHX_ I32 floor, OP *proto, OP *block)
8304 {
8305     return newANONATTRSUB(floor, proto, NULL, block);
8306 }
8307
8308 OP *
8309 Perl_newANONATTRSUB(pTHX_ I32 floor, OP *proto, OP *attrs, OP *block)
8310 {
8311     return newUNOP(OP_REFGEN, 0,
8312         newSVOP(OP_ANONCODE, 0,
8313                 MUTABLE_SV(newATTRSUB(floor, 0, proto, attrs, block))));
8314 }
8315
8316 OP *
8317 Perl_oopsAV(pTHX_ OP *o)
8318 {
8319     dVAR;
8320
8321     PERL_ARGS_ASSERT_OOPSAV;
8322
8323     switch (o->op_type) {
8324     case OP_PADSV:
8325     case OP_PADHV:
8326         o->op_type = OP_PADAV;
8327         o->op_ppaddr = PL_ppaddr[OP_PADAV];
8328         return ref(o, OP_RV2AV);
8329
8330     case OP_RV2SV:
8331     case OP_RV2HV:
8332         o->op_type = OP_RV2AV;
8333         o->op_ppaddr = PL_ppaddr[OP_RV2AV];
8334         ref(o, OP_RV2AV);
8335         break;
8336
8337     default:
8338         Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL), "oops: oopsAV");
8339         break;
8340     }
8341     return o;
8342 }
8343
8344 OP *
8345 Perl_oopsHV(pTHX_ OP *o)
8346 {
8347     dVAR;
8348
8349     PERL_ARGS_ASSERT_OOPSHV;
8350
8351     switch (o->op_type) {
8352     case OP_PADSV:
8353     case OP_PADAV:
8354         o->op_type = OP_PADHV;
8355         o->op_ppaddr = PL_ppaddr[OP_PADHV];
8356         return ref(o, OP_RV2HV);
8357
8358     case OP_RV2SV:
8359     case OP_RV2AV:
8360         o->op_type = OP_RV2HV;
8361         o->op_ppaddr = PL_ppaddr[OP_RV2HV];
8362         ref(o, OP_RV2HV);
8363         break;
8364
8365     default:
8366         Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL), "oops: oopsHV");
8367         break;
8368     }
8369     return o;
8370 }
8371
8372 OP *
8373 Perl_newAVREF(pTHX_ OP *o)
8374 {
8375     dVAR;
8376
8377     PERL_ARGS_ASSERT_NEWAVREF;
8378
8379     if (o->op_type == OP_PADANY) {
8380         o->op_type = OP_PADAV;
8381         o->op_ppaddr = PL_ppaddr[OP_PADAV];
8382         return o;
8383     }
8384     else if ((o->op_type == OP_RV2AV || o->op_type == OP_PADAV)) {
8385         Perl_croak(aTHX_ "Can't use an array as a reference");
8386     }
8387     return newUNOP(OP_RV2AV, 0, scalar(o));
8388 }
8389
8390 OP *
8391 Perl_newGVREF(pTHX_ I32 type, OP *o)
8392 {
8393     if (type == OP_MAPSTART || type == OP_GREPSTART || type == OP_SORT)
8394         return newUNOP(OP_NULL, 0, o);
8395     return ref(newUNOP(OP_RV2GV, OPf_REF, o), type);
8396 }
8397
8398 OP *
8399 Perl_newHVREF(pTHX_ OP *o)
8400 {
8401     dVAR;
8402
8403     PERL_ARGS_ASSERT_NEWHVREF;
8404
8405     if (o->op_type == OP_PADANY) {
8406         o->op_type = OP_PADHV;
8407         o->op_ppaddr = PL_ppaddr[OP_PADHV];
8408         return o;
8409     }
8410     else if ((o->op_type == OP_RV2HV || o->op_type == OP_PADHV)) {
8411         Perl_croak(aTHX_ "Can't use a hash as a reference");
8412     }
8413     return newUNOP(OP_RV2HV, 0, scalar(o));
8414 }
8415
8416 OP *
8417 Perl_newCVREF(pTHX_ I32 flags, OP *o)
8418 {
8419     if (o->op_type == OP_PADANY) {
8420         dVAR;
8421         o->op_type = OP_PADCV;
8422         o->op_ppaddr = PL_ppaddr[OP_PADCV];
8423     }
8424     return newUNOP(OP_RV2CV, flags, scalar(o));
8425 }
8426
8427 OP *
8428 Perl_newSVREF(pTHX_ OP *o)
8429 {
8430     dVAR;
8431
8432     PERL_ARGS_ASSERT_NEWSVREF;
8433
8434     if (o->op_type == OP_PADANY) {
8435         o->op_type = OP_PADSV;
8436         o->op_ppaddr = PL_ppaddr[OP_PADSV];
8437         return o;
8438     }
8439     return newUNOP(OP_RV2SV, 0, scalar(o));
8440 }
8441
8442 /* Check routines. See the comments at the top of this file for details
8443  * on when these are called */
8444
8445 OP *
8446 Perl_ck_anoncode(pTHX_ OP *o)
8447 {
8448     PERL_ARGS_ASSERT_CK_ANONCODE;
8449
8450     cSVOPo->op_targ = pad_add_anon((CV*)cSVOPo->op_sv, o->op_type);
8451     cSVOPo->op_sv = NULL;
8452     return o;
8453 }
8454
8455 static void
8456 S_io_hints(pTHX_ OP *o)
8457 {
8458 #if O_BINARY != 0 || O_TEXT != 0
8459     HV * const table =
8460         PL_hints & HINT_LOCALIZE_HH ? GvHV(PL_hintgv) : NULL;;
8461     if (table) {
8462         SV **svp = hv_fetchs(table, "open_IN", FALSE);
8463         if (svp && *svp) {
8464             STRLEN len = 0;
8465             const char *d = SvPV_const(*svp, len);
8466             const I32 mode = mode_from_discipline(d, len);
8467             /* bit-and:ing with zero O_BINARY or O_TEXT would be useless. */
8468 #  if O_BINARY != 0
8469             if (mode & O_BINARY)
8470                 o->op_private |= OPpOPEN_IN_RAW;
8471 #  endif
8472 #  if O_TEXT != 0
8473             if (mode & O_TEXT)
8474                 o->op_private |= OPpOPEN_IN_CRLF;
8475 #  endif
8476         }
8477
8478         svp = hv_fetchs(table, "open_OUT", FALSE);
8479         if (svp && *svp) {
8480             STRLEN len = 0;
8481             const char *d = SvPV_const(*svp, len);
8482             const I32 mode = mode_from_discipline(d, len);
8483             /* bit-and:ing with zero O_BINARY or O_TEXT would be useless. */
8484 #  if O_BINARY != 0
8485             if (mode & O_BINARY)
8486                 o->op_private |= OPpOPEN_OUT_RAW;
8487 #  endif
8488 #  if O_TEXT != 0
8489             if (mode & O_TEXT)
8490                 o->op_private |= OPpOPEN_OUT_CRLF;
8491 #  endif
8492         }
8493     }
8494 #else
8495     PERL_UNUSED_CONTEXT;
8496     PERL_UNUSED_ARG(o);
8497 #endif
8498 }
8499
8500 OP *
8501 Perl_ck_backtick(pTHX_ OP *o)
8502 {
8503     GV *gv;
8504     OP *newop = NULL;
8505     OP *sibl;
8506     PERL_ARGS_ASSERT_CK_BACKTICK;
8507     /* qx and `` have a null pushmark; CORE::readpipe has only one kid. */
8508     if (o->op_flags & OPf_KIDS && (sibl = OP_SIBLING(cUNOPo->op_first))
8509      && (gv = gv_override("readpipe",8)))
8510     {
8511         /* detach rest of siblings from o and its first child */
8512         op_sibling_splice(o, cUNOPo->op_first, -1, NULL);
8513         newop = S_new_entersubop(aTHX_ gv, sibl);
8514     }
8515     else if (!(o->op_flags & OPf_KIDS))
8516         newop = newUNOP(OP_BACKTICK, 0, newDEFSVOP());
8517     if (newop) {
8518         op_free(o);
8519         return newop;
8520     }
8521     S_io_hints(aTHX_ o);
8522     return o;
8523 }
8524
8525 OP *
8526 Perl_ck_bitop(pTHX_ OP *o)
8527 {
8528     PERL_ARGS_ASSERT_CK_BITOP;
8529
8530     o->op_private = (U8)(PL_hints & HINT_INTEGER);
8531     if (!(o->op_flags & OPf_STACKED) /* Not an assignment */
8532             && (o->op_type == OP_BIT_OR
8533              || o->op_type == OP_BIT_AND
8534              || o->op_type == OP_BIT_XOR))
8535     {
8536         const OP * const left = cBINOPo->op_first;
8537         const OP * const right = OP_SIBLING(left);
8538         if ((OP_IS_NUMCOMPARE(left->op_type) &&
8539                 (left->op_flags & OPf_PARENS) == 0) ||
8540             (OP_IS_NUMCOMPARE(right->op_type) &&
8541                 (right->op_flags & OPf_PARENS) == 0))
8542             Perl_ck_warner(aTHX_ packWARN(WARN_PRECEDENCE),
8543                            "Possible precedence problem on bitwise %c operator",
8544                            o->op_type == OP_BIT_OR ? '|'
8545                            : o->op_type == OP_BIT_AND ? '&' : '^'
8546                            );
8547     }
8548     return o;
8549 }
8550
8551 PERL_STATIC_INLINE bool
8552 is_dollar_bracket(pTHX_ const OP * const o)
8553 {
8554     const OP *kid;
8555     PERL_UNUSED_CONTEXT;
8556     return o->op_type == OP_RV2SV && o->op_flags & OPf_KIDS
8557         && (kid = cUNOPx(o)->op_first)
8558         && kid->op_type == OP_GV
8559         && strEQ(GvNAME(cGVOPx_gv(kid)), "[");
8560 }
8561
8562 OP *
8563 Perl_ck_cmp(pTHX_ OP *o)
8564 {
8565     PERL_ARGS_ASSERT_CK_CMP;
8566     if (ckWARN(WARN_SYNTAX)) {
8567         const OP *kid = cUNOPo->op_first;
8568         if (kid &&
8569             (
8570                 (   is_dollar_bracket(aTHX_ kid)
8571                  && OP_SIBLING(kid) && OP_SIBLING(kid)->op_type == OP_CONST
8572                 )
8573              || (   kid->op_type == OP_CONST
8574                  && (kid = OP_SIBLING(kid)) && is_dollar_bracket(aTHX_ kid)
8575                 )
8576            )
8577         )
8578             Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
8579                         "$[ used in %s (did you mean $] ?)", OP_DESC(o));
8580     }
8581     return o;
8582 }
8583
8584 OP *
8585 Perl_ck_concat(pTHX_ OP *o)
8586 {
8587     const OP * const kid = cUNOPo->op_first;
8588
8589     PERL_ARGS_ASSERT_CK_CONCAT;
8590     PERL_UNUSED_CONTEXT;
8591
8592     if (kid->op_type == OP_CONCAT && !(kid->op_private & OPpTARGET_MY) &&
8593             !(kUNOP->op_first->op_flags & OPf_MOD))
8594         o->op_flags |= OPf_STACKED;
8595     return o;
8596 }
8597
8598 OP *
8599 Perl_ck_spair(pTHX_ OP *o)
8600 {
8601     dVAR;
8602
8603     PERL_ARGS_ASSERT_CK_SPAIR;
8604
8605     if (o->op_flags & OPf_KIDS) {
8606         OP* newop;
8607         OP* kid;
8608         OP* kidkid;
8609         const OPCODE type = o->op_type;
8610         o = modkids(ck_fun(o), type);
8611         kid    = cUNOPo->op_first;
8612         kidkid = kUNOP->op_first;
8613         newop = OP_SIBLING(kidkid);
8614         if (newop) {
8615             const OPCODE type = newop->op_type;
8616             if (OP_HAS_SIBLING(newop) || !(PL_opargs[type] & OA_RETSCALAR) ||
8617                     type == OP_PADAV || type == OP_PADHV ||
8618                     type == OP_RV2AV || type == OP_RV2HV)
8619                 return o;
8620         }
8621         /* excise first sibling */
8622         op_sibling_splice(kid, NULL, 1, NULL);
8623         op_free(kidkid);
8624     }
8625     /* transforms OP_REFGEN into OP_SREFGEN, OP_CHOP into OP_SCHOP,
8626      * and OP_CHOMP into OP_SCHOMP */
8627     o->op_ppaddr = PL_ppaddr[++o->op_type];
8628     return ck_fun(o);
8629 }
8630
8631 OP *
8632 Perl_ck_delete(pTHX_ OP *o)
8633 {
8634     PERL_ARGS_ASSERT_CK_DELETE;
8635
8636     o = ck_fun(o);
8637     o->op_private = 0;
8638     if (o->op_flags & OPf_KIDS) {
8639         OP * const kid = cUNOPo->op_first;
8640         switch (kid->op_type) {
8641         case OP_ASLICE:
8642             o->op_flags |= OPf_SPECIAL;
8643             /* FALLTHROUGH */
8644         case OP_HSLICE:
8645             o->op_private |= OPpSLICE;
8646             break;
8647         case OP_AELEM:
8648             o->op_flags |= OPf_SPECIAL;
8649             /* FALLTHROUGH */
8650         case OP_HELEM:
8651             break;
8652         case OP_KVASLICE:
8653             Perl_croak(aTHX_ "delete argument is index/value array slice,"
8654                              " use array slice");
8655         case OP_KVHSLICE:
8656             Perl_croak(aTHX_ "delete argument is key/value hash slice, use"
8657                              " hash slice");
8658         default:
8659             Perl_croak(aTHX_ "delete argument is not a HASH or ARRAY "
8660                              "element or slice");
8661         }
8662         if (kid->op_private & OPpLVAL_INTRO)
8663             o->op_private |= OPpLVAL_INTRO;
8664         op_null(kid);
8665     }
8666     return o;
8667 }
8668
8669 OP *
8670 Perl_ck_eof(pTHX_ OP *o)
8671 {
8672     PERL_ARGS_ASSERT_CK_EOF;
8673
8674     if (o->op_flags & OPf_KIDS) {
8675         OP *kid;
8676         if (cLISTOPo->op_first->op_type == OP_STUB) {
8677             OP * const newop
8678                 = newUNOP(o->op_type, OPf_SPECIAL, newGVOP(OP_GV, 0, PL_argvgv));
8679             op_free(o);
8680             o = newop;
8681         }
8682         o = ck_fun(o);
8683         kid = cLISTOPo->op_first;
8684         if (kid->op_type == OP_RV2GV)
8685             kid->op_private |= OPpALLOW_FAKE;
8686     }
8687     return o;
8688 }
8689
8690 OP *
8691 Perl_ck_eval(pTHX_ OP *o)
8692 {
8693     dVAR;
8694
8695     PERL_ARGS_ASSERT_CK_EVAL;
8696
8697     PL_hints |= HINT_BLOCK_SCOPE;
8698     if (o->op_flags & OPf_KIDS) {
8699         SVOP * const kid = (SVOP*)cUNOPo->op_first;
8700         assert(kid);
8701
8702         if (kid->op_type == OP_LINESEQ || kid->op_type == OP_STUB) {
8703             LOGOP *enter;
8704
8705             /* cut whole sibling chain free from o */
8706             op_sibling_splice(o, NULL, -1, NULL);
8707             op_free(o);
8708
8709             enter = S_alloc_LOGOP(aTHX_ OP_ENTERTRY, NULL, NULL);
8710             enter->op_ppaddr = PL_ppaddr[OP_ENTERTRY];
8711
8712             /* establish postfix order */
8713             enter->op_next = (OP*)enter;
8714
8715             o = op_prepend_elem(OP_LINESEQ, (OP*)enter, (OP*)kid);
8716             o->op_type = OP_LEAVETRY;
8717             o->op_ppaddr = PL_ppaddr[OP_LEAVETRY];
8718             enter->op_other = o;
8719             return o;
8720         }
8721         else {
8722             scalar((OP*)kid);
8723             PL_cv_has_eval = 1;
8724         }
8725     }
8726     else {
8727         const U8 priv = o->op_private;
8728         op_free(o);
8729         /* the newUNOP will recursively call ck_eval(), which will handle
8730          * all the stuff at the end of this function, like adding
8731          * OP_HINTSEVAL
8732          */
8733         return newUNOP(OP_ENTEREVAL, priv <<8, newDEFSVOP());
8734     }
8735     o->op_targ = (PADOFFSET)PL_hints;
8736     if (o->op_private & OPpEVAL_BYTES) o->op_targ &= ~HINT_UTF8;
8737     if ((PL_hints & HINT_LOCALIZE_HH) != 0
8738      && !(o->op_private & OPpEVAL_COPHH) && GvHV(PL_hintgv)) {
8739         /* Store a copy of %^H that pp_entereval can pick up. */
8740         OP *hhop = newSVOP(OP_HINTSEVAL, 0,
8741                            MUTABLE_SV(hv_copy_hints_hv(GvHV(PL_hintgv))));
8742         /* append hhop to only child  */
8743         op_sibling_splice(o, cUNOPo->op_first, 0, hhop);
8744
8745         o->op_private |= OPpEVAL_HAS_HH;
8746     }
8747     if (!(o->op_private & OPpEVAL_BYTES)
8748          && FEATURE_UNIEVAL_IS_ENABLED)
8749             o->op_private |= OPpEVAL_UNICODE;
8750     return o;
8751 }
8752
8753 OP *
8754 Perl_ck_exec(pTHX_ OP *o)
8755 {
8756     PERL_ARGS_ASSERT_CK_EXEC;
8757
8758     if (o->op_flags & OPf_STACKED) {
8759         OP *kid;
8760         o = ck_fun(o);
8761         kid = OP_SIBLING(cUNOPo->op_first);
8762         if (kid->op_type == OP_RV2GV)
8763             op_null(kid);
8764     }
8765     else
8766         o = listkids(o);
8767     return o;
8768 }
8769
8770 OP *
8771 Perl_ck_exists(pTHX_ OP *o)
8772 {
8773     PERL_ARGS_ASSERT_CK_EXISTS;
8774
8775     o = ck_fun(o);
8776     if (o->op_flags & OPf_KIDS) {
8777         OP * const kid = cUNOPo->op_first;
8778         if (kid->op_type == OP_ENTERSUB) {
8779             (void) ref(kid, o->op_type);
8780             if (kid->op_type != OP_RV2CV
8781                         && !(PL_parser && PL_parser->error_count))
8782                 Perl_croak(aTHX_
8783                           "exists argument is not a subroutine name");
8784             o->op_private |= OPpEXISTS_SUB;
8785         }
8786         else if (kid->op_type == OP_AELEM)
8787             o->op_flags |= OPf_SPECIAL;
8788         else if (kid->op_type != OP_HELEM)
8789             Perl_croak(aTHX_ "exists argument is not a HASH or ARRAY "
8790                              "element or a subroutine");
8791         op_null(kid);
8792     }
8793     return o;
8794 }
8795
8796 OP *
8797 Perl_ck_rvconst(pTHX_ OP *o)
8798 {
8799     dVAR;
8800     SVOP * const kid = (SVOP*)cUNOPo->op_first;
8801
8802     PERL_ARGS_ASSERT_CK_RVCONST;
8803
8804     o->op_private |= (PL_hints & HINT_STRICT_REFS);
8805     if (o->op_type == OP_RV2CV)
8806         o->op_private &= ~1;
8807
8808     if (kid->op_type == OP_CONST) {
8809         int iscv;
8810         GV *gv;
8811         SV * const kidsv = kid->op_sv;
8812
8813         /* Is it a constant from cv_const_sv()? */
8814         if (SvROK(kidsv) && SvREADONLY(kidsv)) {
8815             SV * const rsv = SvRV(kidsv);
8816             const svtype type = SvTYPE(rsv);
8817             const char *badtype = NULL;
8818
8819             switch (o->op_type) {
8820             case OP_RV2SV:
8821                 if (type > SVt_PVMG)
8822                     badtype = "a SCALAR";
8823                 break;
8824             case OP_RV2AV:
8825                 if (type != SVt_PVAV)
8826                     badtype = "an ARRAY";
8827                 break;
8828             case OP_RV2HV:
8829                 if (type != SVt_PVHV)
8830                     badtype = "a HASH";
8831                 break;
8832             case OP_RV2CV:
8833                 if (type != SVt_PVCV)
8834                     badtype = "a CODE";
8835                 break;
8836             }
8837             if (badtype)
8838                 Perl_croak(aTHX_ "Constant is not %s reference", badtype);
8839             return o;
8840         }
8841         if (SvTYPE(kidsv) == SVt_PVAV) return o;
8842         if ((o->op_private & HINT_STRICT_REFS) && (kid->op_private & OPpCONST_BARE)) {
8843             const char *badthing;
8844             switch (o->op_type) {
8845             case OP_RV2SV:
8846                 badthing = "a SCALAR";
8847                 break;
8848             case OP_RV2AV:
8849                 badthing = "an ARRAY";
8850                 break;
8851             case OP_RV2HV:
8852                 badthing = "a HASH";
8853                 break;
8854             default:
8855                 badthing = NULL;
8856                 break;
8857             }
8858             if (badthing)
8859                 Perl_croak(aTHX_
8860                            "Can't use bareword (\"%"SVf"\") as %s ref while \"strict refs\" in use",
8861                            SVfARG(kidsv), badthing);
8862         }
8863         /*
8864          * This is a little tricky.  We only want to add the symbol if we
8865          * didn't add it in the lexer.  Otherwise we get duplicate strict
8866          * warnings.  But if we didn't add it in the lexer, we must at
8867          * least pretend like we wanted to add it even if it existed before,
8868          * or we get possible typo warnings.  OPpCONST_ENTERED says
8869          * whether the lexer already added THIS instance of this symbol.
8870          */
8871         iscv = (o->op_type == OP_RV2CV) * 2;
8872         do {
8873             gv = gv_fetchsv(kidsv,
8874                 iscv | !(kid->op_private & OPpCONST_ENTERED),
8875                 iscv
8876                     ? SVt_PVCV
8877                     : o->op_type == OP_RV2SV
8878                         ? SVt_PV
8879                         : o->op_type == OP_RV2AV
8880                             ? SVt_PVAV
8881                             : o->op_type == OP_RV2HV
8882                                 ? SVt_PVHV
8883                                 : SVt_PVGV);
8884         } while (!gv && !(kid->op_private & OPpCONST_ENTERED) && !iscv++);
8885         if (gv) {
8886             kid->op_type = OP_GV;
8887             SvREFCNT_dec(kid->op_sv);
8888 #ifdef USE_ITHREADS
8889             /* XXX hack: dependence on sizeof(PADOP) <= sizeof(SVOP) */
8890             assert (sizeof(PADOP) <= sizeof(SVOP));
8891             kPADOP->op_padix = pad_alloc(OP_GV, SVs_PADTMP);
8892             SvREFCNT_dec(PAD_SVl(kPADOP->op_padix));
8893             GvIN_PAD_on(gv);
8894             PAD_SETSV(kPADOP->op_padix, MUTABLE_SV(SvREFCNT_inc_simple_NN(gv)));
8895 #else
8896             kid->op_sv = SvREFCNT_inc_simple_NN(gv);
8897 #endif
8898             kid->op_private = 0;
8899             kid->op_ppaddr = PL_ppaddr[OP_GV];
8900             /* FAKE globs in the symbol table cause weird bugs (#77810) */
8901             SvFAKE_off(gv);
8902         }
8903     }
8904     return o;
8905 }
8906
8907 OP *
8908 Perl_ck_ftst(pTHX_ OP *o)
8909 {
8910     dVAR;
8911     const I32 type = o->op_type;
8912
8913     PERL_ARGS_ASSERT_CK_FTST;
8914
8915     if (o->op_flags & OPf_REF) {
8916         NOOP;
8917     }
8918     else if (o->op_flags & OPf_KIDS && cUNOPo->op_first->op_type != OP_STUB) {
8919         SVOP * const kid = (SVOP*)cUNOPo->op_first;
8920         const OPCODE kidtype = kid->op_type;
8921
8922         if (kidtype == OP_CONST && (kid->op_private & OPpCONST_BARE)
8923          && !kid->op_folded) {
8924             OP * const newop = newGVOP(type, OPf_REF,
8925                 gv_fetchsv(kid->op_sv, GV_ADD, SVt_PVIO));
8926             op_free(o);
8927             return newop;
8928         }
8929         if ((PL_hints & HINT_FILETEST_ACCESS) && OP_IS_FILETEST_ACCESS(o->op_type))
8930             o->op_private |= OPpFT_ACCESS;
8931         if (PL_check[kidtype] == Perl_ck_ftst
8932                 && kidtype != OP_STAT && kidtype != OP_LSTAT) {
8933             o->op_private |= OPpFT_STACKED;
8934             kid->op_private |= OPpFT_STACKING;
8935             if (kidtype == OP_FTTTY && (
8936                    !(kid->op_private & OPpFT_STACKED)
8937                 || kid->op_private & OPpFT_AFTER_t
8938                ))
8939                 o->op_private |= OPpFT_AFTER_t;
8940         }
8941     }
8942     else {
8943         op_free(o);
8944         if (type == OP_FTTTY)
8945             o = newGVOP(type, OPf_REF, PL_stdingv);
8946         else
8947             o = newUNOP(type, 0, newDEFSVOP());
8948     }
8949     return o;
8950 }
8951
8952 OP *
8953 Perl_ck_fun(pTHX_ OP *o)
8954 {
8955     const int type = o->op_type;
8956     I32 oa = PL_opargs[type] >> OASHIFT;
8957
8958     PERL_ARGS_ASSERT_CK_FUN;
8959
8960     if (o->op_flags & OPf_STACKED) {
8961         if ((oa & OA_OPTIONAL) && (oa >> 4) && !((oa >> 4) & OA_OPTIONAL))
8962             oa &= ~OA_OPTIONAL;
8963         else
8964             return no_fh_allowed(o);
8965     }
8966
8967     if (o->op_flags & OPf_KIDS) {
8968         OP *prev_kid = NULL;
8969         OP *kid = cLISTOPo->op_first;
8970         I32 numargs = 0;
8971         bool seen_optional = FALSE;
8972
8973         if (kid->op_type == OP_PUSHMARK ||
8974             (kid->op_type == OP_NULL && kid->op_targ == OP_PUSHMARK))
8975         {
8976             prev_kid = kid;
8977             kid = OP_SIBLING(kid);
8978         }
8979         if (kid && kid->op_type == OP_COREARGS) {
8980             bool optional = FALSE;
8981             while (oa) {
8982                 numargs++;
8983                 if (oa & OA_OPTIONAL) optional = TRUE;
8984                 oa = oa >> 4;
8985             }
8986             if (optional) o->op_private |= numargs;
8987             return o;
8988         }
8989
8990         while (oa) {
8991             if (oa & OA_OPTIONAL || (oa & 7) == OA_LIST) {
8992                 if (!kid && !seen_optional && PL_opargs[type] & OA_DEFGV) {
8993                     kid = newDEFSVOP();
8994                     /* append kid to chain */
8995                     op_sibling_splice(o, prev_kid, 0, kid);
8996                 }
8997                 seen_optional = TRUE;
8998             }
8999             if (!kid) break;
9000
9001             numargs++;
9002             switch (oa & 7) {
9003             case OA_SCALAR:
9004                 /* list seen where single (scalar) arg expected? */
9005                 if (numargs == 1 && !(oa >> 4)
9006                     && kid->op_type == OP_LIST && type != OP_SCALAR)
9007                 {
9008                     return too_many_arguments_pv(o,PL_op_desc[type], 0);
9009                 }
9010                 if (type != OP_DELETE) scalar(kid);
9011                 break;
9012             case OA_LIST:
9013                 if (oa < 16) {
9014                     kid = 0;
9015                     continue;
9016                 }
9017                 else
9018                     list(kid);
9019                 break;
9020             case OA_AVREF:
9021                 if ((type == OP_PUSH || type == OP_UNSHIFT)
9022                     && !OP_HAS_SIBLING(kid))
9023                     Perl_ck_warner(aTHX_ packWARN(WARN_SYNTAX),
9024                                    "Useless use of %s with no values",
9025                                    PL_op_desc[type]);
9026
9027                 if (kid->op_type == OP_CONST
9028                       && (  !SvROK(cSVOPx_sv(kid)) 
9029                          || SvTYPE(SvRV(cSVOPx_sv(kid))) != SVt_PVAV  )
9030                         )
9031                     bad_type_pv(numargs, "array", PL_op_desc[type], 0, kid);
9032                 /* Defer checks to run-time if we have a scalar arg */
9033                 if (kid->op_type == OP_RV2AV || kid->op_type == OP_PADAV)
9034                     op_lvalue(kid, type);
9035                 else {
9036                     scalar(kid);
9037                     /* diag_listed_as: push on reference is experimental */
9038                     Perl_ck_warner_d(aTHX_
9039                                      packWARN(WARN_EXPERIMENTAL__AUTODEREF),
9040                                     "%s on reference is experimental",
9041                                      PL_op_desc[type]);
9042                 }
9043                 break;
9044             case OA_HVREF:
9045                 if (kid->op_type != OP_RV2HV && kid->op_type != OP_PADHV)
9046                     bad_type_pv(numargs, "hash", PL_op_desc[type], 0, kid);
9047                 op_lvalue(kid, type);
9048                 break;
9049             case OA_CVREF:
9050                 {
9051                     /* replace kid with newop in chain */
9052                     OP * const newop =
9053                         S_op_sibling_newUNOP(aTHX_ o, prev_kid, OP_NULL, 0);
9054                     newop->op_next = newop;
9055                     kid = newop;
9056                 }
9057                 break;
9058             case OA_FILEREF:
9059                 if (kid->op_type != OP_GV && kid->op_type != OP_RV2GV) {
9060                     if (kid->op_type == OP_CONST &&
9061                         (kid->op_private & OPpCONST_BARE))
9062                     {
9063                         OP * const newop = newGVOP(OP_GV, 0,
9064                             gv_fetchsv(((SVOP*)kid)->op_sv, GV_ADD, SVt_PVIO));
9065                         /* replace kid with newop in chain */
9066                         op_sibling_splice(o, prev_kid, 1, newop);
9067                         op_free(kid);
9068                         kid = newop;
9069                     }
9070                     else if (kid->op_type == OP_READLINE) {
9071                         /* neophyte patrol: open(<FH>), close(<FH>) etc. */
9072                         bad_type_pv(numargs, "HANDLE", OP_DESC(o), 0, kid);
9073                     }
9074                     else {
9075                         I32 flags = OPf_SPECIAL;
9076                         I32 priv = 0;
9077                         PADOFFSET targ = 0;
9078
9079                         /* is this op a FH constructor? */
9080                         if (is_handle_constructor(o,numargs)) {
9081                             const char *name = NULL;
9082                             STRLEN len = 0;
9083                             U32 name_utf8 = 0;
9084                             bool want_dollar = TRUE;
9085
9086                             flags = 0;
9087                             /* Set a flag to tell rv2gv to vivify
9088                              * need to "prove" flag does not mean something
9089                              * else already - NI-S 1999/05/07
9090                              */
9091                             priv = OPpDEREF;
9092                             if (kid->op_type == OP_PADSV) {
9093                                 SV *const namesv
9094                                     = PAD_COMPNAME_SV(kid->op_targ);
9095                                 name = SvPV_const(namesv, len);
9096                                 name_utf8 = SvUTF8(namesv);
9097                             }
9098                             else if (kid->op_type == OP_RV2SV
9099                                      && kUNOP->op_first->op_type == OP_GV)
9100                             {
9101                                 GV * const gv = cGVOPx_gv(kUNOP->op_first);
9102                                 name = GvNAME(gv);
9103                                 len = GvNAMELEN(gv);
9104                                 name_utf8 = GvNAMEUTF8(gv) ? SVf_UTF8 : 0;
9105                             }
9106                             else if (kid->op_type == OP_AELEM
9107                                      || kid->op_type == OP_HELEM)
9108                             {
9109                                  OP *firstop;
9110                                  OP *op = ((BINOP*)kid)->op_first;
9111                                  name = NULL;
9112                                  if (op) {
9113                                       SV *tmpstr = NULL;
9114                                       const char * const a =
9115                                            kid->op_type == OP_AELEM ?
9116                                            "[]" : "{}";
9117                                       if (((op->op_type == OP_RV2AV) ||
9118                                            (op->op_type == OP_RV2HV)) &&
9119                                           (firstop = ((UNOP*)op)->op_first) &&
9120                                           (firstop->op_type == OP_GV)) {
9121                                            /* packagevar $a[] or $h{} */
9122                                            GV * const gv = cGVOPx_gv(firstop);
9123                                            if (gv)
9124                                                 tmpstr =
9125                                                      Perl_newSVpvf(aTHX_
9126                                                                    "%s%c...%c",
9127                                                                    GvNAME(gv),
9128                                                                    a[0], a[1]);
9129                                       }
9130                                       else if (op->op_type == OP_PADAV
9131                                                || op->op_type == OP_PADHV) {
9132                                            /* lexicalvar $a[] or $h{} */
9133                                            const char * const padname =
9134                                                 PAD_COMPNAME_PV(op->op_targ);
9135                                            if (padname)
9136                                                 tmpstr =
9137                                                      Perl_newSVpvf(aTHX_
9138                                                                    "%s%c...%c",
9139                                                                    padname + 1,
9140                                                                    a[0], a[1]);
9141                                       }
9142                                       if (tmpstr) {
9143                                            name = SvPV_const(tmpstr, len);
9144                                            name_utf8 = SvUTF8(tmpstr);
9145                                            sv_2mortal(tmpstr);
9146                                       }
9147                                  }
9148                                  if (!name) {
9149                                       name = "__ANONIO__";
9150                                       len = 10;
9151                                       want_dollar = FALSE;
9152                                  }
9153                                  op_lvalue(kid, type);
9154                             }
9155                             if (name) {
9156                                 SV *namesv;
9157                                 targ = pad_alloc(OP_RV2GV, SVf_READONLY);
9158                                 namesv = PAD_SVl(targ);
9159                                 if (want_dollar && *name != '$')
9160                                     sv_setpvs(namesv, "$");
9161                                 else
9162                                     sv_setpvs(namesv, "");
9163                                 sv_catpvn(namesv, name, len);
9164                                 if ( name_utf8 ) SvUTF8_on(namesv);
9165                             }
9166                         }
9167                         scalar(kid);
9168                         kid = S_op_sibling_newUNOP(aTHX_ o, prev_kid,
9169                                     OP_RV2GV, flags);
9170                         kid->op_targ = targ;
9171                         kid->op_private |= priv;
9172                     }
9173                 }
9174                 scalar(kid);
9175                 break;
9176             case OA_SCALARREF:
9177                 if ((type == OP_UNDEF || type == OP_POS)
9178                     && numargs == 1 && !(oa >> 4)
9179                     && kid->op_type == OP_LIST)
9180                     return too_many_arguments_pv(o,PL_op_desc[type], 0);
9181                 op_lvalue(scalar(kid), type);
9182                 break;
9183             }
9184             oa >>= 4;
9185             prev_kid = kid;
9186             kid = OP_SIBLING(kid);
9187         }
9188         /* FIXME - should the numargs or-ing move after the too many
9189          * arguments check? */
9190         o->op_private |= numargs;
9191         if (kid)
9192             return too_many_arguments_pv(o,OP_DESC(o), 0);
9193         listkids(o);
9194     }
9195     else if (PL_opargs[type] & OA_DEFGV) {
9196         /* Ordering of these two is important to keep f_map.t passing.  */
9197         op_free(o);
9198         return newUNOP(type, 0, newDEFSVOP());
9199     }
9200
9201     if (oa) {
9202         while (oa & OA_OPTIONAL)
9203             oa >>= 4;
9204         if (oa && oa != OA_LIST)
9205             return too_few_arguments_pv(o,OP_DESC(o), 0);
9206     }
9207     return o;
9208 }
9209
9210 OP *
9211 Perl_ck_glob(pTHX_ OP *o)
9212 {
9213     GV *gv;
9214
9215     PERL_ARGS_ASSERT_CK_GLOB;
9216
9217     o = ck_fun(o);
9218     if ((o->op_flags & OPf_KIDS) && !OP_HAS_SIBLING(cLISTOPo->op_first))
9219         op_append_elem(OP_GLOB, o, newDEFSVOP()); /* glob() => glob($_) */
9220
9221     if (!(o->op_flags & OPf_SPECIAL) && (gv = gv_override("glob", 4)))
9222     {
9223         /* convert
9224          *     glob
9225          *       \ null - const(wildcard)
9226          * into
9227          *     null
9228          *       \ enter
9229          *            \ list
9230          *                 \ mark - glob - rv2cv
9231          *                             |        \ gv(CORE::GLOBAL::glob)
9232          *                             |
9233          *                              \ null - const(wildcard)
9234          */
9235         o->op_flags |= OPf_SPECIAL;
9236         o->op_targ = pad_alloc(OP_GLOB, SVs_PADTMP);
9237         o = S_new_entersubop(aTHX_ gv, o);
9238         o = newUNOP(OP_NULL, 0, o);
9239         o->op_targ = OP_GLOB; /* hint at what it used to be: eg in newWHILEOP */
9240         return o;
9241     }
9242     else o->op_flags &= ~OPf_SPECIAL;
9243 #if !defined(PERL_EXTERNAL_GLOB)
9244     if (!PL_globhook) {
9245         ENTER;
9246         Perl_load_module(aTHX_ PERL_LOADMOD_NOIMPORT,
9247                                newSVpvs("File::Glob"), NULL, NULL, NULL);
9248         LEAVE;
9249     }
9250 #endif /* !PERL_EXTERNAL_GLOB */
9251     gv = (GV *)newSV(0);
9252     gv_init(gv, 0, "", 0, 0);
9253     gv_IOadd(gv);
9254     op_append_elem(OP_GLOB, o, newGVOP(OP_GV, 0, gv));
9255     SvREFCNT_dec_NN(gv); /* newGVOP increased it */
9256     scalarkids(o);
9257     return o;
9258 }
9259
9260 OP *
9261 Perl_ck_grep(pTHX_ OP *o)
9262 {
9263     dVAR;
9264     LOGOP *gwop;
9265     OP *kid;
9266     const OPCODE type = o->op_type == OP_GREPSTART ? OP_GREPWHILE : OP_MAPWHILE;
9267     PADOFFSET offset;
9268
9269     PERL_ARGS_ASSERT_CK_GREP;
9270
9271     o->op_ppaddr = PL_ppaddr[OP_GREPSTART];
9272     /* don't allocate gwop here, as we may leak it if PL_parser->error_count > 0 */
9273
9274     if (o->op_flags & OPf_STACKED) {
9275         kid = cUNOPx(OP_SIBLING(cLISTOPo->op_first))->op_first;
9276         if (kid->op_type != OP_SCOPE && kid->op_type != OP_LEAVE)
9277             return no_fh_allowed(o);
9278         o->op_flags &= ~OPf_STACKED;
9279     }
9280     kid = OP_SIBLING(cLISTOPo->op_first);
9281     if (type == OP_MAPWHILE)
9282         list(kid);
9283     else
9284         scalar(kid);
9285     o = ck_fun(o);
9286     if (PL_parser && PL_parser->error_count)
9287         return o;
9288     kid = OP_SIBLING(cLISTOPo->op_first);
9289     if (kid->op_type != OP_NULL)
9290         Perl_croak(aTHX_ "panic: ck_grep, type=%u", (unsigned) kid->op_type);
9291     kid = kUNOP->op_first;
9292
9293     gwop = S_alloc_LOGOP(aTHX_ type, o, LINKLIST(kid));
9294     gwop->op_ppaddr = PL_ppaddr[type];
9295     kid->op_next = (OP*)gwop;
9296     offset = pad_findmy_pvs("$_", 0);
9297     if (offset == NOT_IN_PAD || PAD_COMPNAME_FLAGS_isOUR(offset)) {
9298         o->op_private = gwop->op_private = 0;
9299         gwop->op_targ = pad_alloc(type, SVs_PADTMP);
9300     }
9301     else {
9302         o->op_private = gwop->op_private = OPpGREP_LEX;
9303         gwop->op_targ = o->op_targ = offset;
9304     }
9305
9306     kid = OP_SIBLING(cLISTOPo->op_first);
9307     for (kid = OP_SIBLING(kid); kid; kid = OP_SIBLING(kid))
9308         op_lvalue(kid, OP_GREPSTART);
9309
9310     return (OP*)gwop;
9311 }
9312
9313 OP *
9314 Perl_ck_index(pTHX_ OP *o)
9315 {
9316     PERL_ARGS_ASSERT_CK_INDEX;
9317
9318     if (o->op_flags & OPf_KIDS) {
9319         OP *kid = OP_SIBLING(cLISTOPo->op_first);       /* get past pushmark */
9320         if (kid)
9321             kid = OP_SIBLING(kid);                      /* get past "big" */
9322         if (kid && kid->op_type == OP_CONST) {
9323             const bool save_taint = TAINT_get;
9324             SV *sv = kSVOP->op_sv;
9325             if ((!SvPOK(sv) || SvNIOKp(sv)) && SvOK(sv) && !SvROK(sv)) {
9326                 sv = newSV(0);
9327                 sv_copypv(sv, kSVOP->op_sv);
9328                 SvREFCNT_dec_NN(kSVOP->op_sv);
9329                 kSVOP->op_sv = sv;
9330             }
9331             if (SvOK(sv)) fbm_compile(sv, 0);
9332             TAINT_set(save_taint);
9333 #ifdef NO_TAINT_SUPPORT
9334             PERL_UNUSED_VAR(save_taint);
9335 #endif
9336         }
9337     }
9338     return ck_fun(o);
9339 }
9340
9341 OP *
9342 Perl_ck_lfun(pTHX_ OP *o)
9343 {
9344     const OPCODE type = o->op_type;
9345
9346     PERL_ARGS_ASSERT_CK_LFUN;
9347
9348     return modkids(ck_fun(o), type);
9349 }
9350
9351 OP *
9352 Perl_ck_defined(pTHX_ OP *o)            /* 19990527 MJD */
9353 {
9354     PERL_ARGS_ASSERT_CK_DEFINED;
9355
9356     if ((o->op_flags & OPf_KIDS)) {
9357         switch (cUNOPo->op_first->op_type) {
9358         case OP_RV2AV:
9359         case OP_PADAV:
9360         case OP_AASSIGN:                /* Is this a good idea? */
9361             Perl_croak(aTHX_ "Can't use 'defined(@array)'"
9362                              " (Maybe you should just omit the defined()?)");
9363         break;
9364         case OP_RV2HV:
9365         case OP_PADHV:
9366             Perl_croak(aTHX_ "Can't use 'defined(%%hash)'"
9367                              " (Maybe you should just omit the defined()?)");
9368             break;
9369         default:
9370             /* no warning */
9371             break;
9372         }
9373     }
9374     return ck_rfun(o);
9375 }
9376
9377 OP *
9378 Perl_ck_readline(pTHX_ OP *o)
9379 {
9380     PERL_ARGS_ASSERT_CK_READLINE;
9381
9382     if (o->op_flags & OPf_KIDS) {
9383          OP *kid = cLISTOPo->op_first;
9384          if (kid->op_type == OP_RV2GV) kid->op_private |= OPpALLOW_FAKE;
9385     }
9386     else {
9387         OP * const newop
9388             = newUNOP(OP_READLINE, 0, newGVOP(OP_GV, 0, PL_argvgv));
9389         op_free(o);
9390         return newop;
9391     }
9392     return o;
9393 }
9394
9395 OP *
9396 Perl_ck_rfun(pTHX_ OP *o)
9397 {
9398     const OPCODE type = o->op_type;
9399
9400     PERL_ARGS_ASSERT_CK_RFUN;
9401
9402     return refkids(ck_fun(o), type);
9403 }
9404
9405 OP *
9406 Perl_ck_listiob(pTHX_ OP *o)
9407 {
9408     OP *kid;
9409
9410     PERL_ARGS_ASSERT_CK_LISTIOB;
9411
9412     kid = cLISTOPo->op_first;
9413     if (!kid) {
9414         o = force_list(o, 1);
9415         kid = cLISTOPo->op_first;
9416     }
9417     if (kid->op_type == OP_PUSHMARK)
9418         kid = OP_SIBLING(kid);
9419     if (kid && o->op_flags & OPf_STACKED)
9420         kid = OP_SIBLING(kid);
9421     else if (kid && !OP_HAS_SIBLING(kid)) {             /* print HANDLE; */
9422         if (kid->op_type == OP_CONST && kid->op_private & OPpCONST_BARE
9423          && !kid->op_folded) {
9424             o->op_flags |= OPf_STACKED; /* make it a filehandle */
9425             scalar(kid);
9426             /* replace old const op with new OP_RV2GV parent */
9427             kid = S_op_sibling_newUNOP(aTHX_ o, cLISTOPo->op_first,
9428                                         OP_RV2GV, OPf_REF);
9429             kid = OP_SIBLING(kid);
9430         }
9431     }
9432
9433     if (!kid)
9434         op_append_elem(o->op_type, o, newDEFSVOP());
9435
9436     if (o->op_type == OP_PRTF) return modkids(listkids(o), OP_PRTF);
9437     return listkids(o);
9438 }
9439
9440 OP *
9441 Perl_ck_smartmatch(pTHX_ OP *o)
9442 {
9443     dVAR;
9444     PERL_ARGS_ASSERT_CK_SMARTMATCH;
9445     if (0 == (o->op_flags & OPf_SPECIAL)) {
9446         OP *first  = cBINOPo->op_first;
9447         OP *second = OP_SIBLING(first);
9448         
9449         /* Implicitly take a reference to an array or hash */
9450
9451         /* remove the original two siblings, then add back the
9452          * (possibly different) first and second sibs.
9453          */
9454         op_sibling_splice(o, NULL, 1, NULL);
9455         op_sibling_splice(o, NULL, 1, NULL);
9456         first  = ref_array_or_hash(first);
9457         second = ref_array_or_hash(second);
9458         op_sibling_splice(o, NULL, 0, second);
9459         op_sibling_splice(o, NULL, 0, first);
9460         
9461         /* Implicitly take a reference to a regular expression */
9462         if (first->op_type == OP_MATCH) {
9463             first->op_type = OP_QR;
9464             first->op_ppaddr = PL_ppaddr[OP_QR];
9465         }
9466         if (second->op_type == OP_MATCH) {
9467             second->op_type = OP_QR;
9468             second->op_ppaddr = PL_ppaddr[OP_QR];
9469         }
9470     }
9471     
9472     return o;
9473 }
9474
9475
9476 OP *
9477 Perl_ck_sassign(pTHX_ OP *o)
9478 {
9479     dVAR;
9480     OP * const kid = cLISTOPo->op_first;
9481
9482     PERL_ARGS_ASSERT_CK_SASSIGN;
9483
9484     /* has a disposable target? */
9485     if ((PL_opargs[kid->op_type] & OA_TARGLEX)
9486         && !(kid->op_flags & OPf_STACKED)
9487         /* Cannot steal the second time! */
9488         && !(kid->op_private & OPpTARGET_MY)
9489         )
9490     {
9491         OP * const kkid = OP_SIBLING(kid);
9492
9493         /* Can just relocate the target. */
9494         if (kkid && kkid->op_type == OP_PADSV
9495             && !(kkid->op_private & OPpLVAL_INTRO))
9496         {
9497             kid->op_targ = kkid->op_targ;
9498             kkid->op_targ = 0;
9499             /* Now we do not need PADSV and SASSIGN.
9500              * first replace the PADSV with OP_SIBLING(o), then
9501              * detach kid and OP_SIBLING(o) from o */
9502             op_sibling_splice(o, kid, 1, OP_SIBLING(o));
9503             op_sibling_splice(o, NULL, -1, NULL);
9504             op_free(o);
9505             op_free(kkid);
9506             kid->op_private |= OPpTARGET_MY;    /* Used for context settings */
9507             return kid;
9508         }
9509     }
9510     if (OP_HAS_SIBLING(kid)) {
9511         OP *kkid = OP_SIBLING(kid);
9512         /* For state variable assignment, kkid is a list op whose op_last
9513            is a padsv. */
9514         if ((kkid->op_type == OP_PADSV ||
9515              (OP_TYPE_IS_OR_WAS(kkid, OP_LIST) &&
9516               (kkid = cLISTOPx(kkid)->op_last)->op_type == OP_PADSV
9517              )
9518             )
9519                 && (kkid->op_private & OPpLVAL_INTRO)
9520                 && SvPAD_STATE(PAD_COMPNAME_SV(kkid->op_targ))) {
9521             const PADOFFSET target = kkid->op_targ;
9522             OP *const other = newOP(OP_PADSV,
9523                                     kkid->op_flags
9524                                     | ((kkid->op_private & ~OPpLVAL_INTRO) << 8));
9525             OP *const first = newOP(OP_NULL, 0);
9526             OP *const nullop = newCONDOP(0, first, o, other);
9527             OP *const condop = first->op_next;
9528             /* hijacking PADSTALE for uninitialized state variables */
9529             SvPADSTALE_on(PAD_SVl(target));
9530
9531             condop->op_type = OP_ONCE;
9532             condop->op_ppaddr = PL_ppaddr[OP_ONCE];
9533             condop->op_targ = target;
9534             other->op_targ = target;
9535
9536             /* Because we change the type of the op here, we will skip the
9537                assignment binop->op_last = OP_SIBLING(binop->op_first); at the
9538                end of Perl_newBINOP(). So need to do it here. */
9539             cBINOPo->op_last = OP_SIBLING(cBINOPo->op_first);
9540             cBINOPo->op_first->op_lastsib = 0;
9541             cBINOPo->op_last ->op_lastsib = 1;
9542 #ifdef PERL_OP_PARENT
9543             cBINOPo->op_last->op_sibling = o;
9544 #endif
9545             return nullop;
9546         }
9547     }
9548     return o;
9549 }
9550
9551 OP *
9552 Perl_ck_match(pTHX_ OP *o)
9553 {
9554     PERL_ARGS_ASSERT_CK_MATCH;
9555
9556     if (o->op_type != OP_QR && PL_compcv) {
9557         const PADOFFSET offset = pad_findmy_pvs("$_", 0);
9558         if (offset != NOT_IN_PAD && !(PAD_COMPNAME_FLAGS_isOUR(offset))) {
9559             o->op_targ = offset;
9560             o->op_private |= OPpTARGET_MY;
9561         }
9562     }
9563     if (o->op_type == OP_MATCH || o->op_type == OP_QR)
9564         o->op_private |= OPpRUNTIME;
9565     return o;
9566 }
9567
9568 OP *
9569 Perl_ck_method(pTHX_ OP *o)
9570 {
9571     OP * const kid = cUNOPo->op_first;
9572
9573     PERL_ARGS_ASSERT_CK_METHOD;
9574
9575     if (kid->op_type == OP_CONST) {
9576         SV* sv = kSVOP->op_sv;
9577         const char * const method = SvPVX_const(sv);
9578         if (!(strchr(method, ':') || strchr(method, '\''))) {
9579             OP *cmop;
9580             if (!SvIsCOW_shared_hash(sv)) {
9581                 sv = newSVpvn_share(method, SvUTF8(sv) ? -(I32)SvCUR(sv) : (I32)SvCUR(sv), 0);
9582             }
9583             else {
9584                 kSVOP->op_sv = NULL;
9585             }
9586             cmop = newSVOP(OP_METHOD_NAMED, 0, sv);
9587             op_free(o);
9588             return cmop;
9589         }
9590     }
9591     return o;
9592 }
9593
9594 OP *
9595 Perl_ck_null(pTHX_ OP *o)
9596 {
9597     PERL_ARGS_ASSERT_CK_NULL;
9598     PERL_UNUSED_CONTEXT;
9599     return o;
9600 }
9601
9602 OP *
9603 Perl_ck_open(pTHX_ OP *o)
9604 {
9605     PERL_ARGS_ASSERT_CK_OPEN;
9606
9607     S_io_hints(aTHX_ o);
9608     {
9609          /* In case of three-arg dup open remove strictness
9610           * from the last arg if it is a bareword. */
9611          OP * const first = cLISTOPx(o)->op_first; /* The pushmark. */
9612          OP * const last  = cLISTOPx(o)->op_last;  /* The bareword. */
9613          OP *oa;
9614          const char *mode;
9615
9616          if ((last->op_type == OP_CONST) &&             /* The bareword. */
9617              (last->op_private & OPpCONST_BARE) &&
9618              (last->op_private & OPpCONST_STRICT) &&
9619              (oa = OP_SIBLING(first)) &&                /* The fh. */
9620              (oa = OP_SIBLING(oa)) &&                   /* The mode. */
9621              (oa->op_type == OP_CONST) &&
9622              SvPOK(((SVOP*)oa)->op_sv) &&
9623              (mode = SvPVX_const(((SVOP*)oa)->op_sv)) &&
9624              mode[0] == '>' && mode[1] == '&' &&        /* A dup open. */
9625              (last == OP_SIBLING(oa)))                  /* The bareword. */
9626               last->op_private &= ~OPpCONST_STRICT;
9627     }
9628     return ck_fun(o);
9629 }
9630
9631 OP *
9632 Perl_ck_repeat(pTHX_ OP *o)
9633 {
9634     PERL_ARGS_ASSERT_CK_REPEAT;
9635
9636     if (cBINOPo->op_first->op_flags & OPf_PARENS) {
9637         OP* kids;
9638         o->op_private |= OPpREPEAT_DOLIST;
9639         kids = op_sibling_splice(o, NULL, -1, NULL); /* detach all kids */
9640         kids = force_list(kids, 1); /* promote them to a list */
9641         op_sibling_splice(o, NULL, 0, kids); /* and add back */
9642     }
9643     else
9644         scalar(o);
9645     return o;
9646 }
9647
9648 OP *
9649 Perl_ck_require(pTHX_ OP *o)
9650 {
9651     GV* gv;
9652
9653     PERL_ARGS_ASSERT_CK_REQUIRE;
9654
9655     if (o->op_flags & OPf_KIDS) {       /* Shall we supply missing .pm? */
9656         SVOP * const kid = (SVOP*)cUNOPo->op_first;
9657
9658         if (kid->op_type == OP_CONST && (kid->op_private & OPpCONST_BARE)) {
9659             SV * const sv = kid->op_sv;
9660             U32 was_readonly = SvREADONLY(sv);
9661             char *s;
9662             STRLEN len;
9663             const char *end;
9664
9665             if (was_readonly) {
9666                     SvREADONLY_off(sv);
9667             }   
9668             if (SvIsCOW(sv)) sv_force_normal_flags(sv, 0);
9669
9670             s = SvPVX(sv);
9671             len = SvCUR(sv);
9672             end = s + len;
9673             for (; s < end; s++) {
9674                 if (*s == ':' && s[1] == ':') {
9675                     *s = '/';
9676                     Move(s+2, s+1, end - s - 1, char);
9677                     --end;
9678                 }
9679             }
9680             SvEND_set(sv, end);
9681             sv_catpvs(sv, ".pm");
9682             SvFLAGS(sv) |= was_readonly;
9683         }
9684     }
9685
9686     if (!(o->op_flags & OPf_SPECIAL) /* Wasn't written as CORE::require */
9687         /* handle override, if any */
9688      && (gv = gv_override("require", 7))) {
9689         OP *kid, *newop;
9690         if (o->op_flags & OPf_KIDS) {
9691             kid = cUNOPo->op_first;
9692             op_sibling_splice(o, NULL, -1, NULL);
9693         }
9694         else {
9695             kid = newDEFSVOP();
9696         }
9697         op_free(o);
9698         newop = S_new_entersubop(aTHX_ gv, kid);
9699         return newop;
9700     }
9701
9702     return scalar(ck_fun(o));
9703 }
9704
9705 OP *
9706 Perl_ck_return(pTHX_ OP *o)
9707 {
9708     OP *kid;
9709
9710     PERL_ARGS_ASSERT_CK_RETURN;
9711
9712     kid = OP_SIBLING(cLISTOPo->op_first);
9713     if (CvLVALUE(PL_compcv)) {
9714         for (; kid; kid = OP_SIBLING(kid))
9715             op_lvalue(kid, OP_LEAVESUBLV);
9716     }
9717
9718     return o;
9719 }
9720
9721 OP *
9722 Perl_ck_select(pTHX_ OP *o)
9723 {
9724     dVAR;
9725     OP* kid;
9726
9727     PERL_ARGS_ASSERT_CK_SELECT;
9728
9729     if (o->op_flags & OPf_KIDS) {
9730         kid = OP_SIBLING(cLISTOPo->op_first);   /* get past pushmark */
9731         if (kid && OP_HAS_SIBLING(kid)) {
9732             o->op_type = OP_SSELECT;
9733             o->op_ppaddr = PL_ppaddr[OP_SSELECT];
9734             o = ck_fun(o);
9735             return fold_constants(op_integerize(op_std_init(o)));
9736         }
9737     }
9738     o = ck_fun(o);
9739     kid = OP_SIBLING(cLISTOPo->op_first);    /* get past pushmark */
9740     if (kid && kid->op_type == OP_RV2GV)
9741         kid->op_private &= ~HINT_STRICT_REFS;
9742     return o;
9743 }
9744
9745 OP *
9746 Perl_ck_shift(pTHX_ OP *o)
9747 {
9748     const I32 type = o->op_type;
9749
9750     PERL_ARGS_ASSERT_CK_SHIFT;
9751
9752     if (!(o->op_flags & OPf_KIDS)) {
9753         OP *argop;
9754
9755         if (!CvUNIQUE(PL_compcv)) {
9756             o->op_flags |= OPf_SPECIAL;
9757             return o;
9758         }
9759
9760         argop = newUNOP(OP_RV2AV, 0, scalar(newGVOP(OP_GV, 0, PL_argvgv)));
9761         op_free(o);
9762         return newUNOP(type, 0, scalar(argop));
9763     }
9764     return scalar(ck_fun(o));
9765 }
9766
9767 OP *
9768 Perl_ck_sort(pTHX_ OP *o)
9769 {
9770     OP *firstkid;
9771     OP *kid;
9772     HV * const hinthv =
9773         PL_hints & HINT_LOCALIZE_HH ? GvHV(PL_hintgv) : NULL;
9774     U8 stacked;
9775
9776     PERL_ARGS_ASSERT_CK_SORT;
9777
9778     if (hinthv) {
9779             SV ** const svp = hv_fetchs(hinthv, "sort", FALSE);
9780             if (svp) {
9781                 const I32 sorthints = (I32)SvIV(*svp);
9782                 if ((sorthints & HINT_SORT_QUICKSORT) != 0)
9783                     o->op_private |= OPpSORT_QSORT;
9784                 if ((sorthints & HINT_SORT_STABLE) != 0)
9785                     o->op_private |= OPpSORT_STABLE;
9786             }
9787     }
9788
9789     if (o->op_flags & OPf_STACKED)
9790         simplify_sort(o);
9791     firstkid = OP_SIBLING(cLISTOPo->op_first);          /* get past pushmark */
9792
9793     if ((stacked = o->op_flags & OPf_STACKED)) {        /* may have been cleared */
9794         OP *kid = cUNOPx(firstkid)->op_first;           /* get past null */
9795
9796         /* if the first arg is a code block, process it and mark sort as
9797          * OPf_SPECIAL */
9798         if (kid->op_type == OP_SCOPE || kid->op_type == OP_LEAVE) {
9799             LINKLIST(kid);
9800             if (kid->op_type == OP_LEAVE)
9801                     op_null(kid);                       /* wipe out leave */
9802             /* Prevent execution from escaping out of the sort block. */
9803             kid->op_next = 0;
9804
9805             /* provide scalar context for comparison function/block */
9806             kid = scalar(firstkid);
9807             kid->op_next = kid;
9808             o->op_flags |= OPf_SPECIAL;
9809         }
9810
9811         firstkid = OP_SIBLING(firstkid);
9812     }
9813
9814     for (kid = firstkid; kid; kid = OP_SIBLING(kid)) {
9815         /* provide list context for arguments */
9816         list(kid);
9817         if (stacked)
9818             op_lvalue(kid, OP_GREPSTART);
9819     }
9820
9821     return o;
9822 }
9823
9824 /* for sort { X } ..., where X is one of
9825  *   $a <=> $b, $b <= $a, $a cmp $b, $b cmp $a
9826  * elide the second child of the sort (the one containing X),
9827  * and set these flags as appropriate
9828         OPpSORT_NUMERIC;
9829         OPpSORT_INTEGER;
9830         OPpSORT_DESCEND;
9831  * Also, check and warn on lexical $a, $b.
9832  */
9833
9834 STATIC void
9835 S_simplify_sort(pTHX_ OP *o)
9836 {
9837     OP *kid = OP_SIBLING(cLISTOPo->op_first);   /* get past pushmark */
9838     OP *k;
9839     int descending;
9840     GV *gv;
9841     const char *gvname;
9842     bool have_scopeop;
9843
9844     PERL_ARGS_ASSERT_SIMPLIFY_SORT;
9845
9846     kid = kUNOP->op_first;                              /* get past null */
9847     if (!(have_scopeop = kid->op_type == OP_SCOPE)
9848      && kid->op_type != OP_LEAVE)
9849         return;
9850     kid = kLISTOP->op_last;                             /* get past scope */
9851     switch(kid->op_type) {
9852         case OP_NCMP:
9853         case OP_I_NCMP:
9854         case OP_SCMP:
9855             if (!have_scopeop) goto padkids;
9856             break;
9857         default:
9858             return;
9859     }
9860     k = kid;                                            /* remember this node*/
9861     if (kBINOP->op_first->op_type != OP_RV2SV
9862      || kBINOP->op_last ->op_type != OP_RV2SV)
9863     {
9864         /*
9865            Warn about my($a) or my($b) in a sort block, *if* $a or $b is
9866            then used in a comparison.  This catches most, but not
9867            all cases.  For instance, it catches
9868                sort { my($a); $a <=> $b }
9869            but not
9870                sort { my($a); $a < $b ? -1 : $a == $b ? 0 : 1; }
9871            (although why you'd do that is anyone's guess).
9872         */
9873
9874        padkids:
9875         if (!ckWARN(WARN_SYNTAX)) return;
9876         kid = kBINOP->op_first;
9877         do {
9878             if (kid->op_type == OP_PADSV) {
9879                 SV * const name = PAD_COMPNAME_SV(kid->op_targ);
9880                 if (SvCUR(name) == 2 && *SvPVX(name) == '$'
9881                  && (SvPVX(name)[1] == 'a' || SvPVX(name)[1] == 'b'))
9882                     /* diag_listed_as: "my %s" used in sort comparison */
9883                     Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
9884                                      "\"%s %s\" used in sort comparison",
9885                                       SvPAD_STATE(name) ? "state" : "my",
9886                                       SvPVX(name));
9887             }
9888         } while ((kid = OP_SIBLING(kid)));
9889         return;
9890     }
9891     kid = kBINOP->op_first;                             /* get past cmp */
9892     if (kUNOP->op_first->op_type != OP_GV)
9893         return;
9894     kid = kUNOP->op_first;                              /* get past rv2sv */
9895     gv = kGVOP_gv;
9896     if (GvSTASH(gv) != PL_curstash)
9897         return;
9898     gvname = GvNAME(gv);
9899     if (*gvname == 'a' && gvname[1] == '\0')
9900         descending = 0;
9901     else if (*gvname == 'b' && gvname[1] == '\0')
9902         descending = 1;
9903     else
9904         return;
9905
9906     kid = k;                                            /* back to cmp */
9907     /* already checked above that it is rv2sv */
9908     kid = kBINOP->op_last;                              /* down to 2nd arg */
9909     if (kUNOP->op_first->op_type != OP_GV)
9910         return;
9911     kid = kUNOP->op_first;                              /* get past rv2sv */
9912     gv = kGVOP_gv;
9913     if (GvSTASH(gv) != PL_curstash)
9914         return;
9915     gvname = GvNAME(gv);
9916     if ( descending
9917          ? !(*gvname == 'a' && gvname[1] == '\0')
9918          : !(*gvname == 'b' && gvname[1] == '\0'))
9919         return;
9920     o->op_flags &= ~(OPf_STACKED | OPf_SPECIAL);
9921     if (descending)
9922         o->op_private |= OPpSORT_DESCEND;
9923     if (k->op_type == OP_NCMP)
9924         o->op_private |= OPpSORT_NUMERIC;
9925     if (k->op_type == OP_I_NCMP)
9926         o->op_private |= OPpSORT_NUMERIC | OPpSORT_INTEGER;
9927     kid = OP_SIBLING(cLISTOPo->op_first);
9928     /* cut out and delete old block (second sibling) */
9929     op_sibling_splice(o, cLISTOPo->op_first, 1, NULL);
9930     op_free(kid);
9931 }
9932
9933 OP *
9934 Perl_ck_split(pTHX_ OP *o)
9935 {
9936     dVAR;
9937     OP *kid;
9938
9939     PERL_ARGS_ASSERT_CK_SPLIT;
9940
9941     if (o->op_flags & OPf_STACKED)
9942         return no_fh_allowed(o);
9943
9944     kid = cLISTOPo->op_first;
9945     if (kid->op_type != OP_NULL)
9946         Perl_croak(aTHX_ "panic: ck_split, type=%u", (unsigned) kid->op_type);
9947     /* delete leading NULL node, then add a CONST if no other nodes */
9948     op_sibling_splice(o, NULL, 1,
9949             OP_HAS_SIBLING(kid) ? NULL : newSVOP(OP_CONST, 0, newSVpvs(" ")));
9950     op_free(kid);
9951     kid = cLISTOPo->op_first;
9952
9953     if (kid->op_type != OP_MATCH || kid->op_flags & OPf_STACKED) {
9954         /* remove kid, and replace with new optree */
9955         op_sibling_splice(o, NULL, 1, NULL);
9956         /* OPf_SPECIAL is used to trigger split " " behavior */
9957         kid = pmruntime( newPMOP(OP_MATCH, OPf_SPECIAL), kid, 0, 0);
9958         op_sibling_splice(o, NULL, 0, kid);
9959     }
9960
9961     kid->op_type = OP_PUSHRE;
9962     kid->op_ppaddr = PL_ppaddr[OP_PUSHRE];
9963     scalar(kid);
9964     if (((PMOP *)kid)->op_pmflags & PMf_GLOBAL) {
9965       Perl_ck_warner(aTHX_ packWARN(WARN_REGEXP),
9966                      "Use of /g modifier is meaningless in split");
9967     }
9968
9969     if (!OP_HAS_SIBLING(kid))
9970         op_append_elem(OP_SPLIT, o, newDEFSVOP());
9971
9972     kid = OP_SIBLING(kid);
9973     assert(kid);
9974     scalar(kid);
9975
9976     if (!OP_HAS_SIBLING(kid))
9977     {
9978         op_append_elem(OP_SPLIT, o, newSVOP(OP_CONST, 0, newSViv(0)));
9979         o->op_private |= OPpSPLIT_IMPLIM;
9980     }
9981     assert(OP_HAS_SIBLING(kid));
9982
9983     kid = OP_SIBLING(kid);
9984     scalar(kid);
9985
9986     if (OP_HAS_SIBLING(kid))
9987         return too_many_arguments_pv(o,OP_DESC(o), 0);
9988
9989     return o;
9990 }
9991
9992 OP *
9993 Perl_ck_join(pTHX_ OP *o)
9994 {
9995     const OP * const kid = OP_SIBLING(cLISTOPo->op_first);
9996
9997     PERL_ARGS_ASSERT_CK_JOIN;
9998
9999     if (kid && kid->op_type == OP_MATCH) {
10000         if (ckWARN(WARN_SYNTAX)) {
10001             const REGEXP *re = PM_GETRE(kPMOP);
10002             const SV *msg = re
10003                     ? newSVpvn_flags( RX_PRECOMP_const(re), RX_PRELEN(re),
10004                                             SVs_TEMP | ( RX_UTF8(re) ? SVf_UTF8 : 0 ) )
10005                     : newSVpvs_flags( "STRING", SVs_TEMP );
10006             Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
10007                         "/%"SVf"/ should probably be written as \"%"SVf"\"",
10008                         SVfARG(msg), SVfARG(msg));
10009         }
10010     }
10011     return ck_fun(o);
10012 }
10013
10014 /*
10015 =for apidoc Am|CV *|rv2cv_op_cv|OP *cvop|U32 flags
10016
10017 Examines an op, which is expected to identify a subroutine at runtime,
10018 and attempts to determine at compile time which subroutine it identifies.
10019 This is normally used during Perl compilation to determine whether
10020 a prototype can be applied to a function call.  I<cvop> is the op
10021 being considered, normally an C<rv2cv> op.  A pointer to the identified
10022 subroutine is returned, if it could be determined statically, and a null
10023 pointer is returned if it was not possible to determine statically.
10024
10025 Currently, the subroutine can be identified statically if the RV that the
10026 C<rv2cv> is to operate on is provided by a suitable C<gv> or C<const> op.
10027 A C<gv> op is suitable if the GV's CV slot is populated.  A C<const> op is
10028 suitable if the constant value must be an RV pointing to a CV.  Details of
10029 this process may change in future versions of Perl.  If the C<rv2cv> op
10030 has the C<OPpENTERSUB_AMPER> flag set then no attempt is made to identify
10031 the subroutine statically: this flag is used to suppress compile-time
10032 magic on a subroutine call, forcing it to use default runtime behaviour.
10033
10034 If I<flags> has the bit C<RV2CVOPCV_MARK_EARLY> set, then the handling
10035 of a GV reference is modified.  If a GV was examined and its CV slot was
10036 found to be empty, then the C<gv> op has the C<OPpEARLY_CV> flag set.
10037 If the op is not optimised away, and the CV slot is later populated with
10038 a subroutine having a prototype, that flag eventually triggers the warning
10039 "called too early to check prototype".
10040
10041 If I<flags> has the bit C<RV2CVOPCV_RETURN_NAME_GV> set, then instead
10042 of returning a pointer to the subroutine it returns a pointer to the
10043 GV giving the most appropriate name for the subroutine in this context.
10044 Normally this is just the C<CvGV> of the subroutine, but for an anonymous
10045 (C<CvANON>) subroutine that is referenced through a GV it will be the
10046 referencing GV.  The resulting C<GV*> is cast to C<CV*> to be returned.
10047 A null pointer is returned as usual if there is no statically-determinable
10048 subroutine.
10049
10050 =cut
10051 */
10052
10053 /* shared by toke.c:yylex */
10054 CV *
10055 Perl_find_lexical_cv(pTHX_ PADOFFSET off)
10056 {
10057     PADNAME *name = PAD_COMPNAME(off);
10058     CV *compcv = PL_compcv;
10059     while (PadnameOUTER(name)) {
10060         assert(PARENT_PAD_INDEX(name));
10061         compcv = CvOUTSIDE(PL_compcv);
10062         name = PadlistNAMESARRAY(CvPADLIST(compcv))
10063                 [off = PARENT_PAD_INDEX(name)];
10064     }
10065     assert(!PadnameIsOUR(name));
10066     if (!PadnameIsSTATE(name) && SvMAGICAL(name)) {
10067         MAGIC * mg = mg_find(name, PERL_MAGIC_proto);
10068         assert(mg);
10069         assert(mg->mg_obj);
10070         return (CV *)mg->mg_obj;
10071     }
10072     return (CV *)AvARRAY(PadlistARRAY(CvPADLIST(compcv))[1])[off];
10073 }
10074
10075 CV *
10076 Perl_rv2cv_op_cv(pTHX_ OP *cvop, U32 flags)
10077 {
10078     OP *rvop;
10079     CV *cv;
10080     GV *gv;
10081     PERL_ARGS_ASSERT_RV2CV_OP_CV;
10082     if (flags & ~(RV2CVOPCV_MARK_EARLY|RV2CVOPCV_RETURN_NAME_GV))
10083         Perl_croak(aTHX_ "panic: rv2cv_op_cv bad flags %x", (unsigned)flags);
10084     if (cvop->op_type != OP_RV2CV)
10085         return NULL;
10086     if (cvop->op_private & OPpENTERSUB_AMPER)
10087         return NULL;
10088     if (!(cvop->op_flags & OPf_KIDS))
10089         return NULL;
10090     rvop = cUNOPx(cvop)->op_first;
10091     switch (rvop->op_type) {
10092         case OP_GV: {
10093             gv = cGVOPx_gv(rvop);
10094             cv = GvCVu(gv);
10095             if (!cv) {
10096                 if (flags & RV2CVOPCV_MARK_EARLY)
10097                     rvop->op_private |= OPpEARLY_CV;
10098                 return NULL;
10099             }
10100         } break;
10101         case OP_CONST: {
10102             SV *rv = cSVOPx_sv(rvop);
10103             if (!SvROK(rv))
10104                 return NULL;
10105             cv = (CV*)SvRV(rv);
10106             gv = NULL;
10107         } break;
10108         case OP_PADCV: {
10109             cv = find_lexical_cv(rvop->op_targ);
10110             gv = NULL;
10111         } break;
10112         default: {
10113             return NULL;
10114         } NOT_REACHED; /* NOTREACHED */
10115     }
10116     if (SvTYPE((SV*)cv) != SVt_PVCV)
10117         return NULL;
10118     if (flags & RV2CVOPCV_RETURN_NAME_GV) {
10119         if (!CvANON(cv) || !gv)
10120             gv = CvGV(cv);
10121         return (CV*)gv;
10122     } else {
10123         return cv;
10124     }
10125 }
10126
10127 /*
10128 =for apidoc Am|OP *|ck_entersub_args_list|OP *entersubop
10129
10130 Performs the default fixup of the arguments part of an C<entersub>
10131 op tree.  This consists of applying list context to each of the
10132 argument ops.  This is the standard treatment used on a call marked
10133 with C<&>, or a method call, or a call through a subroutine reference,
10134 or any other call where the callee can't be identified at compile time,
10135 or a call where the callee has no prototype.
10136
10137 =cut
10138 */
10139
10140 OP *
10141 Perl_ck_entersub_args_list(pTHX_ OP *entersubop)
10142 {
10143     OP *aop;
10144     PERL_ARGS_ASSERT_CK_ENTERSUB_ARGS_LIST;
10145     aop = cUNOPx(entersubop)->op_first;
10146     if (!OP_HAS_SIBLING(aop))
10147         aop = cUNOPx(aop)->op_first;
10148     for (aop = OP_SIBLING(aop); OP_HAS_SIBLING(aop); aop = OP_SIBLING(aop)) {
10149         list(aop);
10150         op_lvalue(aop, OP_ENTERSUB);
10151     }
10152     return entersubop;
10153 }
10154
10155 /*
10156 =for apidoc Am|OP *|ck_entersub_args_proto|OP *entersubop|GV *namegv|SV *protosv
10157
10158 Performs the fixup of the arguments part of an C<entersub> op tree
10159 based on a subroutine prototype.  This makes various modifications to
10160 the argument ops, from applying context up to inserting C<refgen> ops,
10161 and checking the number and syntactic types of arguments, as directed by
10162 the prototype.  This is the standard treatment used on a subroutine call,
10163 not marked with C<&>, where the callee can be identified at compile time
10164 and has a prototype.
10165
10166 I<protosv> supplies the subroutine prototype to be applied to the call.
10167 It may be a normal defined scalar, of which the string value will be used.
10168 Alternatively, for convenience, it may be a subroutine object (a C<CV*>
10169 that has been cast to C<SV*>) which has a prototype.  The prototype
10170 supplied, in whichever form, does not need to match the actual callee
10171 referenced by the op tree.
10172
10173 If the argument ops disagree with the prototype, for example by having
10174 an unacceptable number of arguments, a valid op tree is returned anyway.
10175 The error is reflected in the parser state, normally resulting in a single
10176 exception at the top level of parsing which covers all the compilation
10177 errors that occurred.  In the error message, the callee is referred to
10178 by the name defined by the I<namegv> parameter.
10179
10180 =cut
10181 */
10182
10183 OP *
10184 Perl_ck_entersub_args_proto(pTHX_ OP *entersubop, GV *namegv, SV *protosv)
10185 {
10186     STRLEN proto_len;
10187     const char *proto, *proto_end;
10188     OP *aop, *prev, *cvop, *parent;
10189     int optional = 0;
10190     I32 arg = 0;
10191     I32 contextclass = 0;
10192     const char *e = NULL;
10193     PERL_ARGS_ASSERT_CK_ENTERSUB_ARGS_PROTO;
10194     if (SvTYPE(protosv) == SVt_PVCV ? !SvPOK(protosv) : !SvOK(protosv))
10195         Perl_croak(aTHX_ "panic: ck_entersub_args_proto CV with no proto, "
10196                    "flags=%lx", (unsigned long) SvFLAGS(protosv));
10197     if (SvTYPE(protosv) == SVt_PVCV)
10198          proto = CvPROTO(protosv), proto_len = CvPROTOLEN(protosv);
10199     else proto = SvPV(protosv, proto_len);
10200     proto = S_strip_spaces(aTHX_ proto, &proto_len);
10201     proto_end = proto + proto_len;
10202     parent = entersubop;
10203     aop = cUNOPx(entersubop)->op_first;
10204     if (!OP_HAS_SIBLING(aop)) {
10205         parent = aop;
10206         aop = cUNOPx(aop)->op_first;
10207     }
10208     prev = aop;
10209     aop = OP_SIBLING(aop);
10210     for (cvop = aop; OP_HAS_SIBLING(cvop); cvop = OP_SIBLING(cvop)) ;
10211     while (aop != cvop) {
10212         OP* o3 = aop;
10213
10214         if (proto >= proto_end)
10215             return too_many_arguments_sv(entersubop, gv_ename(namegv), 0);
10216
10217         switch (*proto) {
10218             case ';':
10219                 optional = 1;
10220                 proto++;
10221                 continue;
10222             case '_':
10223                 /* _ must be at the end */
10224                 if (proto[1] && !strchr(";@%", proto[1]))
10225                     goto oops;
10226                 /* FALLTHROUGH */
10227             case '$':
10228                 proto++;
10229                 arg++;
10230                 scalar(aop);
10231                 break;
10232             case '%':
10233             case '@':
10234                 list(aop);
10235                 arg++;
10236                 break;
10237             case '&':
10238                 proto++;
10239                 arg++;
10240                 if (o3->op_type != OP_REFGEN && o3->op_type != OP_UNDEF)
10241                     bad_type_gv(arg,
10242                             arg == 1 ? "block or sub {}" : "sub {}",
10243                             namegv, 0, o3);
10244                 break;
10245             case '*':
10246                 /* '*' allows any scalar type, including bareword */
10247                 proto++;
10248                 arg++;
10249                 if (o3->op_type == OP_RV2GV)
10250                     goto wrapref;       /* autoconvert GLOB -> GLOBref */
10251                 else if (o3->op_type == OP_CONST)
10252                     o3->op_private &= ~OPpCONST_STRICT;
10253                 else if (o3->op_type == OP_ENTERSUB) {
10254                     /* accidental subroutine, revert to bareword */
10255                     OP *gvop = ((UNOP*)o3)->op_first;
10256                     if (gvop && gvop->op_type == OP_NULL) {
10257                         gvop = ((UNOP*)gvop)->op_first;
10258                         if (gvop) {
10259                             for (; OP_HAS_SIBLING(gvop); gvop = OP_SIBLING(gvop))
10260                                 ;
10261                             if (gvop &&
10262                                     (gvop->op_private & OPpENTERSUB_NOPAREN) &&
10263                                     (gvop = ((UNOP*)gvop)->op_first) &&
10264                                     gvop->op_type == OP_GV)
10265                             {
10266                                 OP * newop;
10267                                 GV * const gv = cGVOPx_gv(gvop);
10268                                 SV * const n = newSVpvs("");
10269                                 gv_fullname4(n, gv, "", FALSE);
10270                                 /* replace the aop subtree with a const op */
10271                                 newop = newSVOP(OP_CONST, 0, n);
10272                                 op_sibling_splice(parent, prev, 1, newop);
10273                                 op_free(aop);
10274                                 aop = newop;
10275                             }
10276                         }
10277                     }
10278                 }
10279                 scalar(aop);
10280                 break;
10281             case '+':
10282                 proto++;
10283                 arg++;
10284                 if (o3->op_type == OP_RV2AV ||
10285                     o3->op_type == OP_PADAV ||
10286                     o3->op_type == OP_RV2HV ||
10287                     o3->op_type == OP_PADHV
10288                 ) {
10289                     goto wrapref;
10290                 }
10291                 scalar(aop);
10292                 break;
10293             case '[': case ']':
10294                 goto oops;
10295
10296             case '\\':
10297                 proto++;
10298                 arg++;
10299             again:
10300                 switch (*proto++) {
10301                     case '[':
10302                         if (contextclass++ == 0) {
10303                             e = strchr(proto, ']');
10304                             if (!e || e == proto)
10305                                 goto oops;
10306                         }
10307                         else
10308                             goto oops;
10309                         goto again;
10310
10311                     case ']':
10312                         if (contextclass) {
10313                             const char *p = proto;
10314                             const char *const end = proto;
10315                             contextclass = 0;
10316                             while (*--p != '[')
10317                                 /* \[$] accepts any scalar lvalue */
10318                                 if (*p == '$'
10319                                  && Perl_op_lvalue_flags(aTHX_
10320                                      scalar(o3),
10321                                      OP_READ, /* not entersub */
10322                                      OP_LVALUE_NO_CROAK
10323                                     )) goto wrapref;
10324                             bad_type_gv(arg, Perl_form(aTHX_ "one of %.*s",
10325                                         (int)(end - p), p),
10326                                     namegv, 0, o3);
10327                         } else
10328                             goto oops;
10329                         break;
10330                     case '*':
10331                         if (o3->op_type == OP_RV2GV)
10332                             goto wrapref;
10333                         if (!contextclass)
10334                             bad_type_gv(arg, "symbol", namegv, 0, o3);
10335                         break;
10336                     case '&':
10337                         if (o3->op_type == OP_ENTERSUB)
10338                             goto wrapref;
10339                         if (!contextclass)
10340                             bad_type_gv(arg, "subroutine entry", namegv, 0,
10341                                     o3);
10342                         break;
10343                     case '$':
10344                         if (o3->op_type == OP_RV2SV ||
10345                                 o3->op_type == OP_PADSV ||
10346                                 o3->op_type == OP_HELEM ||
10347                                 o3->op_type == OP_AELEM)
10348                             goto wrapref;
10349                         if (!contextclass) {
10350                             /* \$ accepts any scalar lvalue */
10351                             if (Perl_op_lvalue_flags(aTHX_
10352                                     scalar(o3),
10353                                     OP_READ,  /* not entersub */
10354                                     OP_LVALUE_NO_CROAK
10355                                )) goto wrapref;
10356                             bad_type_gv(arg, "scalar", namegv, 0, o3);
10357                         }
10358                         break;
10359                     case '@':
10360                         if (o3->op_type == OP_RV2AV ||
10361                                 o3->op_type == OP_PADAV)
10362                             goto wrapref;
10363                         if (!contextclass)
10364                             bad_type_gv(arg, "array", namegv, 0, o3);
10365                         break;
10366                     case '%':
10367                         if (o3->op_type == OP_RV2HV ||
10368                                 o3->op_type == OP_PADHV)
10369                             goto wrapref;
10370                         if (!contextclass)
10371                             bad_type_gv(arg, "hash", namegv, 0, o3);
10372                         break;
10373                     wrapref:
10374                             aop = S_op_sibling_newUNOP(aTHX_ parent, prev,
10375                                                 OP_REFGEN, 0);
10376                         if (contextclass && e) {
10377                             proto = e + 1;
10378                             contextclass = 0;
10379                         }
10380                         break;
10381                     default: goto oops;
10382                 }
10383                 if (contextclass)
10384                     goto again;
10385                 break;
10386             case ' ':
10387                 proto++;
10388                 continue;
10389             default:
10390             oops: {
10391                 SV* const tmpsv = sv_newmortal();
10392                 gv_efullname3(tmpsv, namegv, NULL);
10393                 Perl_croak(aTHX_ "Malformed prototype for %"SVf": %"SVf,
10394                         SVfARG(tmpsv), SVfARG(protosv));
10395             }
10396         }
10397
10398         op_lvalue(aop, OP_ENTERSUB);
10399         prev = aop;
10400         aop = OP_SIBLING(aop);
10401     }
10402     if (aop == cvop && *proto == '_') {
10403         /* generate an access to $_ */
10404         op_sibling_splice(parent, prev, 0, newDEFSVOP());
10405     }
10406     if (!optional && proto_end > proto &&
10407         (*proto != '@' && *proto != '%' && *proto != ';' && *proto != '_'))
10408         return too_few_arguments_sv(entersubop, gv_ename(namegv), 0);
10409     return entersubop;
10410 }
10411
10412 /*
10413 =for apidoc Am|OP *|ck_entersub_args_proto_or_list|OP *entersubop|GV *namegv|SV *protosv
10414
10415 Performs the fixup of the arguments part of an C<entersub> op tree either
10416 based on a subroutine prototype or using default list-context processing.
10417 This is the standard treatment used on a subroutine call, not marked
10418 with C<&>, where the callee can be identified at compile time.
10419
10420 I<protosv> supplies the subroutine prototype to be applied to the call,
10421 or indicates that there is no prototype.  It may be a normal scalar,
10422 in which case if it is defined then the string value will be used
10423 as a prototype, and if it is undefined then there is no prototype.
10424 Alternatively, for convenience, it may be a subroutine object (a C<CV*>
10425 that has been cast to C<SV*>), of which the prototype will be used if it
10426 has one.  The prototype (or lack thereof) supplied, in whichever form,
10427 does not need to match the actual callee referenced by the op tree.
10428
10429 If the argument ops disagree with the prototype, for example by having
10430 an unacceptable number of arguments, a valid op tree is returned anyway.
10431 The error is reflected in the parser state, normally resulting in a single
10432 exception at the top level of parsing which covers all the compilation
10433 errors that occurred.  In the error message, the callee is referred to
10434 by the name defined by the I<namegv> parameter.
10435
10436 =cut
10437 */
10438
10439 OP *
10440 Perl_ck_entersub_args_proto_or_list(pTHX_ OP *entersubop,
10441         GV *namegv, SV *protosv)
10442 {
10443     PERL_ARGS_ASSERT_CK_ENTERSUB_ARGS_PROTO_OR_LIST;
10444     if (SvTYPE(protosv) == SVt_PVCV ? SvPOK(protosv) : SvOK(protosv))
10445         return ck_entersub_args_proto(entersubop, namegv, protosv);
10446     else
10447         return ck_entersub_args_list(entersubop);
10448 }
10449
10450 OP *
10451 Perl_ck_entersub_args_core(pTHX_ OP *entersubop, GV *namegv, SV *protosv)
10452 {
10453     int opnum = SvTYPE(protosv) == SVt_PVCV ? 0 : (int)SvUV(protosv);
10454     OP *aop = cUNOPx(entersubop)->op_first;
10455
10456     PERL_ARGS_ASSERT_CK_ENTERSUB_ARGS_CORE;
10457
10458     if (!opnum) {
10459         OP *cvop;
10460         if (!OP_HAS_SIBLING(aop))
10461             aop = cUNOPx(aop)->op_first;
10462         aop = OP_SIBLING(aop);
10463         for (cvop = aop; OP_SIBLING(cvop); cvop = OP_SIBLING(cvop)) ;
10464         if (aop != cvop)
10465             (void)too_many_arguments_pv(entersubop, GvNAME(namegv), 0);
10466         
10467         op_free(entersubop);
10468         switch(GvNAME(namegv)[2]) {
10469         case 'F': return newSVOP(OP_CONST, 0,
10470                                         newSVpv(CopFILE(PL_curcop),0));
10471         case 'L': return newSVOP(
10472                            OP_CONST, 0,
10473                            Perl_newSVpvf(aTHX_
10474                              "%"IVdf, (IV)CopLINE(PL_curcop)
10475                            )
10476                          );
10477         case 'P': return newSVOP(OP_CONST, 0,
10478                                    (PL_curstash
10479                                      ? newSVhek(HvNAME_HEK(PL_curstash))
10480                                      : &PL_sv_undef
10481                                    )
10482                                 );
10483         }
10484         NOT_REACHED;
10485     }
10486     else {
10487         OP *prev, *cvop, *first, *parent;
10488         U32 flags = 0;
10489
10490         parent = entersubop;
10491         if (!OP_HAS_SIBLING(aop)) {
10492             parent = aop;
10493             aop = cUNOPx(aop)->op_first;
10494         }
10495         
10496         first = prev = aop;
10497         aop = OP_SIBLING(aop);
10498         /* find last sibling */
10499         for (cvop = aop;
10500              OP_HAS_SIBLING(cvop);
10501              prev = cvop, cvop = OP_SIBLING(cvop))
10502             ;
10503         if (!(cvop->op_private & OPpENTERSUB_NOPAREN)
10504             /* Usually, OPf_SPECIAL on a UNOP means that its arg had no
10505              * parens, but these have their own meaning for that flag: */
10506             && opnum != OP_VALUES && opnum != OP_KEYS && opnum != OP_EACH
10507             && opnum != OP_DELETE && opnum != OP_EXISTS)
10508                 flags |= OPf_SPECIAL;
10509         /* excise cvop from end of sibling chain */
10510         op_sibling_splice(parent, prev, 1, NULL);
10511         op_free(cvop);
10512         if (aop == cvop) aop = NULL;
10513
10514         /* detach remaining siblings from the first sibling, then
10515          * dispose of original optree */
10516
10517         if (aop)
10518             op_sibling_splice(parent, first, -1, NULL);
10519         op_free(entersubop);
10520
10521         if (opnum == OP_ENTEREVAL
10522          && GvNAMELEN(namegv)==9 && strnEQ(GvNAME(namegv), "evalbytes", 9))
10523             flags |= OPpEVAL_BYTES <<8;
10524         
10525         switch (PL_opargs[opnum] & OA_CLASS_MASK) {
10526         case OA_UNOP:
10527         case OA_BASEOP_OR_UNOP:
10528         case OA_FILESTATOP:
10529             return aop ? newUNOP(opnum,flags,aop) : newOP(opnum,flags);
10530         case OA_BASEOP:
10531             if (aop) {
10532                     (void)too_many_arguments_pv(aop, GvNAME(namegv), 0);
10533                 op_free(aop);
10534             }
10535             return opnum == OP_RUNCV
10536                 ? newPVOP(OP_RUNCV,0,NULL)
10537                 : newOP(opnum,0);
10538         default:
10539             return convert(opnum,0,aop);
10540         }
10541     }
10542     assert(0);
10543     return entersubop;
10544 }
10545
10546 /*
10547 =for apidoc Am|void|cv_get_call_checker|CV *cv|Perl_call_checker *ckfun_p|SV **ckobj_p
10548
10549 Retrieves the function that will be used to fix up a call to I<cv>.
10550 Specifically, the function is applied to an C<entersub> op tree for a
10551 subroutine call, not marked with C<&>, where the callee can be identified
10552 at compile time as I<cv>.
10553
10554 The C-level function pointer is returned in I<*ckfun_p>, and an SV
10555 argument for it is returned in I<*ckobj_p>.  The function is intended
10556 to be called in this manner:
10557
10558     entersubop = (*ckfun_p)(aTHX_ entersubop, namegv, (*ckobj_p));
10559
10560 In this call, I<entersubop> is a pointer to the C<entersub> op,
10561 which may be replaced by the check function, and I<namegv> is a GV
10562 supplying the name that should be used by the check function to refer
10563 to the callee of the C<entersub> op if it needs to emit any diagnostics.
10564 It is permitted to apply the check function in non-standard situations,
10565 such as to a call to a different subroutine or to a method call.
10566
10567 By default, the function is
10568 L<Perl_ck_entersub_args_proto_or_list|/ck_entersub_args_proto_or_list>,
10569 and the SV parameter is I<cv> itself.  This implements standard
10570 prototype processing.  It can be changed, for a particular subroutine,
10571 by L</cv_set_call_checker>.
10572
10573 =cut
10574 */
10575
10576 void
10577 Perl_cv_get_call_checker(pTHX_ CV *cv, Perl_call_checker *ckfun_p, SV **ckobj_p)
10578 {
10579     MAGIC *callmg;
10580     PERL_ARGS_ASSERT_CV_GET_CALL_CHECKER;
10581     PERL_UNUSED_CONTEXT;
10582     callmg = SvMAGICAL((SV*)cv) ? mg_find((SV*)cv, PERL_MAGIC_checkcall) : NULL;
10583     if (callmg) {
10584         *ckfun_p = DPTR2FPTR(Perl_call_checker, callmg->mg_ptr);
10585         *ckobj_p = callmg->mg_obj;
10586     } else {
10587         *ckfun_p = Perl_ck_entersub_args_proto_or_list;
10588         *ckobj_p = (SV*)cv;
10589     }
10590 }
10591
10592 /*
10593 =for apidoc Am|void|cv_set_call_checker|CV *cv|Perl_call_checker ckfun|SV *ckobj
10594
10595 Sets the function that will be used to fix up a call to I<cv>.
10596 Specifically, the function is applied to an C<entersub> op tree for a
10597 subroutine call, not marked with C<&>, where the callee can be identified
10598 at compile time as I<cv>.
10599
10600 The C-level function pointer is supplied in I<ckfun>, and an SV argument
10601 for it is supplied in I<ckobj>.  The function should be defined like this:
10602
10603     STATIC OP * ckfun(pTHX_ OP *op, GV *namegv, SV *ckobj)
10604
10605 It is intended to be called in this manner:
10606
10607     entersubop = ckfun(aTHX_ entersubop, namegv, ckobj);
10608
10609 In this call, I<entersubop> is a pointer to the C<entersub> op,
10610 which may be replaced by the check function, and I<namegv> is a GV
10611 supplying the name that should be used by the check function to refer
10612 to the callee of the C<entersub> op if it needs to emit any diagnostics.
10613 It is permitted to apply the check function in non-standard situations,
10614 such as to a call to a different subroutine or to a method call.
10615
10616 The current setting for a particular CV can be retrieved by
10617 L</cv_get_call_checker>.
10618
10619 =cut
10620 */
10621
10622 void
10623 Perl_cv_set_call_checker(pTHX_ CV *cv, Perl_call_checker ckfun, SV *ckobj)
10624 {
10625     PERL_ARGS_ASSERT_CV_SET_CALL_CHECKER;
10626     if (ckfun == Perl_ck_entersub_args_proto_or_list && ckobj == (SV*)cv) {
10627         if (SvMAGICAL((SV*)cv))
10628             mg_free_type((SV*)cv, PERL_MAGIC_checkcall);
10629     } else {
10630         MAGIC *callmg;
10631         sv_magic((SV*)cv, &PL_sv_undef, PERL_MAGIC_checkcall, NULL, 0);
10632         callmg = mg_find((SV*)cv, PERL_MAGIC_checkcall);
10633         assert(callmg);
10634         if (callmg->mg_flags & MGf_REFCOUNTED) {
10635             SvREFCNT_dec(callmg->mg_obj);
10636             callmg->mg_flags &= ~MGf_REFCOUNTED;
10637         }
10638         callmg->mg_ptr = FPTR2DPTR(char *, ckfun);
10639         callmg->mg_obj = ckobj;
10640         if (ckobj != (SV*)cv) {
10641             SvREFCNT_inc_simple_void_NN(ckobj);
10642             callmg->mg_flags |= MGf_REFCOUNTED;
10643         }
10644         callmg->mg_flags |= MGf_COPY;
10645     }
10646 }
10647
10648 OP *
10649 Perl_ck_subr(pTHX_ OP *o)
10650 {
10651     OP *aop, *cvop;
10652     CV *cv;
10653     GV *namegv;
10654
10655     PERL_ARGS_ASSERT_CK_SUBR;
10656
10657     aop = cUNOPx(o)->op_first;
10658     if (!OP_HAS_SIBLING(aop))
10659         aop = cUNOPx(aop)->op_first;
10660     aop = OP_SIBLING(aop);
10661     for (cvop = aop; OP_HAS_SIBLING(cvop); cvop = OP_SIBLING(cvop)) ;
10662     cv = rv2cv_op_cv(cvop, RV2CVOPCV_MARK_EARLY);
10663     namegv = cv ? (GV*)rv2cv_op_cv(cvop, RV2CVOPCV_RETURN_NAME_GV) : NULL;
10664
10665     o->op_private &= ~1;
10666     o->op_private |= OPpENTERSUB_HASTARG;
10667     o->op_private |= (PL_hints & HINT_STRICT_REFS);
10668     if (PERLDB_SUB && PL_curstash != PL_debstash)
10669         o->op_private |= OPpENTERSUB_DB;
10670     if (cvop->op_type == OP_RV2CV) {
10671         o->op_private |= (cvop->op_private & OPpENTERSUB_AMPER);
10672         op_null(cvop);
10673     } else if (cvop->op_type == OP_METHOD || cvop->op_type == OP_METHOD_NAMED) {
10674         if (aop->op_type == OP_CONST)
10675             aop->op_private &= ~OPpCONST_STRICT;
10676         else if (aop->op_type == OP_LIST) {
10677             OP * const sib = OP_SIBLING(((UNOP*)aop)->op_first);
10678             if (sib && sib->op_type == OP_CONST)
10679                 sib->op_private &= ~OPpCONST_STRICT;
10680         }
10681     }
10682
10683     if (!cv) {
10684         return ck_entersub_args_list(o);
10685     } else {
10686         Perl_call_checker ckfun;
10687         SV *ckobj;
10688         cv_get_call_checker(cv, &ckfun, &ckobj);
10689         if (!namegv) { /* expletive! */
10690             /* XXX The call checker API is public.  And it guarantees that
10691                    a GV will be provided with the right name.  So we have
10692                    to create a GV.  But it is still not correct, as its
10693                    stringification will include the package.  What we
10694                    really need is a new call checker API that accepts a
10695                    GV or string (or GV or CV). */
10696             HEK * const hek = CvNAME_HEK(cv);
10697             /* After a syntax error in a lexical sub, the cv that
10698                rv2cv_op_cv returns may be a nameless stub. */
10699             if (!hek) return ck_entersub_args_list(o);;
10700             namegv = (GV *)sv_newmortal();
10701             gv_init_pvn(namegv, PL_curstash, HEK_KEY(hek), HEK_LEN(hek),
10702                         SVf_UTF8 * !!HEK_UTF8(hek));
10703         }
10704         return ckfun(aTHX_ o, namegv, ckobj);
10705     }
10706 }
10707
10708 OP *
10709 Perl_ck_svconst(pTHX_ OP *o)
10710 {
10711     SV * const sv = cSVOPo->op_sv;
10712     PERL_ARGS_ASSERT_CK_SVCONST;
10713     PERL_UNUSED_CONTEXT;
10714 #ifdef PERL_OLD_COPY_ON_WRITE
10715     if (SvIsCOW(sv)) sv_force_normal(sv);
10716 #elif defined(PERL_NEW_COPY_ON_WRITE)
10717     /* Since the read-only flag may be used to protect a string buffer, we
10718        cannot do copy-on-write with existing read-only scalars that are not
10719        already copy-on-write scalars.  To allow $_ = "hello" to do COW with
10720        that constant, mark the constant as COWable here, if it is not
10721        already read-only. */
10722     if (!SvREADONLY(sv) && !SvIsCOW(sv) && SvCANCOW(sv)) {
10723         SvIsCOW_on(sv);
10724         CowREFCNT(sv) = 0;
10725 # ifdef PERL_DEBUG_READONLY_COW
10726         sv_buf_to_ro(sv);
10727 # endif
10728     }
10729 #endif
10730     SvREADONLY_on(sv);
10731     return o;
10732 }
10733
10734 OP *
10735 Perl_ck_trunc(pTHX_ OP *o)
10736 {
10737     PERL_ARGS_ASSERT_CK_TRUNC;
10738
10739     if (o->op_flags & OPf_KIDS) {
10740         SVOP *kid = (SVOP*)cUNOPo->op_first;
10741
10742         if (kid->op_type == OP_NULL)
10743             kid = (SVOP*)OP_SIBLING(kid);
10744         if (kid && kid->op_type == OP_CONST &&
10745             (kid->op_private & OPpCONST_BARE) &&
10746             !kid->op_folded)
10747         {
10748             o->op_flags |= OPf_SPECIAL;
10749             kid->op_private &= ~OPpCONST_STRICT;
10750         }
10751     }
10752     return ck_fun(o);
10753 }
10754
10755 OP *
10756 Perl_ck_substr(pTHX_ OP *o)
10757 {
10758     PERL_ARGS_ASSERT_CK_SUBSTR;
10759
10760     o = ck_fun(o);
10761     if ((o->op_flags & OPf_KIDS) && (o->op_private == 4)) {
10762         OP *kid = cLISTOPo->op_first;
10763
10764         if (kid->op_type == OP_NULL)
10765             kid = OP_SIBLING(kid);
10766         if (kid)
10767             kid->op_flags |= OPf_MOD;
10768
10769     }
10770     return o;
10771 }
10772
10773 OP *
10774 Perl_ck_tell(pTHX_ OP *o)
10775 {
10776     PERL_ARGS_ASSERT_CK_TELL;
10777     o = ck_fun(o);
10778     if (o->op_flags & OPf_KIDS) {
10779      OP *kid = cLISTOPo->op_first;
10780      if (kid->op_type == OP_NULL && OP_HAS_SIBLING(kid)) kid = OP_SIBLING(kid);
10781      if (kid->op_type == OP_RV2GV) kid->op_private |= OPpALLOW_FAKE;
10782     }
10783     return o;
10784 }
10785
10786 OP *
10787 Perl_ck_each(pTHX_ OP *o)
10788 {
10789     dVAR;
10790     OP *kid = o->op_flags & OPf_KIDS ? cUNOPo->op_first : NULL;
10791     const unsigned orig_type  = o->op_type;
10792     const unsigned array_type = orig_type == OP_EACH ? OP_AEACH
10793                               : orig_type == OP_KEYS ? OP_AKEYS : OP_AVALUES;
10794     const unsigned ref_type   = orig_type == OP_EACH ? OP_REACH
10795                               : orig_type == OP_KEYS ? OP_RKEYS : OP_RVALUES;
10796
10797     PERL_ARGS_ASSERT_CK_EACH;
10798
10799     if (kid) {
10800         switch (kid->op_type) {
10801             case OP_PADHV:
10802             case OP_RV2HV:
10803                 break;
10804             case OP_PADAV:
10805             case OP_RV2AV:
10806                 CHANGE_TYPE(o, array_type);
10807                 break;
10808             case OP_CONST:
10809                 if (kid->op_private == OPpCONST_BARE
10810                  || !SvROK(cSVOPx_sv(kid))
10811                  || (  SvTYPE(SvRV(cSVOPx_sv(kid))) != SVt_PVAV
10812                     && SvTYPE(SvRV(cSVOPx_sv(kid))) != SVt_PVHV  )
10813                    )
10814                     /* we let ck_fun handle it */
10815                     break;
10816             default:
10817                 CHANGE_TYPE(o, ref_type);
10818                 scalar(kid);
10819         }
10820     }
10821     /* if treating as a reference, defer additional checks to runtime */
10822     if (o->op_type == ref_type) {
10823         /* diag_listed_as: keys on reference is experimental */
10824         Perl_ck_warner_d(aTHX_ packWARN(WARN_EXPERIMENTAL__AUTODEREF),
10825                               "%s is experimental", PL_op_desc[ref_type]);
10826         return o;
10827     }
10828     return ck_fun(o);
10829 }
10830
10831 OP *
10832 Perl_ck_length(pTHX_ OP *o)
10833 {
10834     PERL_ARGS_ASSERT_CK_LENGTH;
10835
10836     o = ck_fun(o);
10837
10838     if (ckWARN(WARN_SYNTAX)) {
10839         const OP *kid = o->op_flags & OPf_KIDS ? cLISTOPo->op_first : NULL;
10840
10841         if (kid) {
10842             SV *name = NULL;
10843             const bool hash = kid->op_type == OP_PADHV
10844                            || kid->op_type == OP_RV2HV;
10845             switch (kid->op_type) {
10846                 case OP_PADHV:
10847                 case OP_PADAV:
10848                 case OP_RV2HV:
10849                 case OP_RV2AV:
10850                     name = S_op_varname(aTHX_ kid);
10851                     break;
10852                 default:
10853                     return o;
10854             }
10855             if (name)
10856                 Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
10857                     "length() used on %"SVf" (did you mean \"scalar(%s%"SVf
10858                     ")\"?)",
10859                     SVfARG(name), hash ? "keys " : "", SVfARG(name)
10860                 );
10861             else if (hash)
10862      /* diag_listed_as: length() used on %s (did you mean "scalar(%s)"?) */
10863                 Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
10864                     "length() used on %%hash (did you mean \"scalar(keys %%hash)\"?)");
10865             else
10866      /* diag_listed_as: length() used on %s (did you mean "scalar(%s)"?) */
10867                 Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
10868                     "length() used on @array (did you mean \"scalar(@array)\"?)");
10869         }
10870     }
10871
10872     return o;
10873 }
10874
10875 /* Check for in place reverse and sort assignments like "@a = reverse @a"
10876    and modify the optree to make them work inplace */
10877
10878 STATIC void
10879 S_inplace_aassign(pTHX_ OP *o) {
10880
10881     OP *modop, *modop_pushmark;
10882     OP *oright;
10883     OP *oleft, *oleft_pushmark;
10884
10885     PERL_ARGS_ASSERT_INPLACE_AASSIGN;
10886
10887     assert((o->op_flags & OPf_WANT) == OPf_WANT_VOID);
10888
10889     assert(cUNOPo->op_first->op_type == OP_NULL);
10890     modop_pushmark = cUNOPx(cUNOPo->op_first)->op_first;
10891     assert(modop_pushmark->op_type == OP_PUSHMARK);
10892     modop = OP_SIBLING(modop_pushmark);
10893
10894     if (modop->op_type != OP_SORT && modop->op_type != OP_REVERSE)
10895         return;
10896
10897     /* no other operation except sort/reverse */
10898     if (OP_HAS_SIBLING(modop))
10899         return;
10900
10901     assert(cUNOPx(modop)->op_first->op_type == OP_PUSHMARK);
10902     if (!(oright = OP_SIBLING(cUNOPx(modop)->op_first))) return;
10903
10904     if (modop->op_flags & OPf_STACKED) {
10905         /* skip sort subroutine/block */
10906         assert(oright->op_type == OP_NULL);
10907         oright = OP_SIBLING(oright);
10908     }
10909
10910     assert(OP_SIBLING(cUNOPo->op_first)->op_type == OP_NULL);
10911     oleft_pushmark = cUNOPx(OP_SIBLING(cUNOPo->op_first))->op_first;
10912     assert(oleft_pushmark->op_type == OP_PUSHMARK);
10913     oleft = OP_SIBLING(oleft_pushmark);
10914
10915     /* Check the lhs is an array */
10916     if (!oleft ||
10917         (oleft->op_type != OP_RV2AV && oleft->op_type != OP_PADAV)
10918         || OP_HAS_SIBLING(oleft)
10919         || (oleft->op_private & OPpLVAL_INTRO)
10920     )
10921         return;
10922
10923     /* Only one thing on the rhs */
10924     if (OP_HAS_SIBLING(oright))
10925         return;
10926
10927     /* check the array is the same on both sides */
10928     if (oleft->op_type == OP_RV2AV) {
10929         if (oright->op_type != OP_RV2AV
10930             || !cUNOPx(oright)->op_first
10931             || cUNOPx(oright)->op_first->op_type != OP_GV
10932             || cUNOPx(oleft )->op_first->op_type != OP_GV
10933             || cGVOPx_gv(cUNOPx(oleft)->op_first) !=
10934                cGVOPx_gv(cUNOPx(oright)->op_first)
10935         )
10936             return;
10937     }
10938     else if (oright->op_type != OP_PADAV
10939         || oright->op_targ != oleft->op_targ
10940     )
10941         return;
10942
10943     /* This actually is an inplace assignment */
10944
10945     modop->op_private |= OPpSORT_INPLACE;
10946
10947     /* transfer MODishness etc from LHS arg to RHS arg */
10948     oright->op_flags = oleft->op_flags;
10949
10950     /* remove the aassign op and the lhs */
10951     op_null(o);
10952     op_null(oleft_pushmark);
10953     if (oleft->op_type == OP_RV2AV && cUNOPx(oleft)->op_first)
10954         op_null(cUNOPx(oleft)->op_first);
10955     op_null(oleft);
10956 }
10957
10958
10959
10960 /* mechanism for deferring recursion in rpeep() */
10961
10962 #define MAX_DEFERRED 4
10963
10964 #define DEFER(o) \
10965   STMT_START { \
10966     if (defer_ix == (MAX_DEFERRED-1)) { \
10967         OP **defer = defer_queue[defer_base]; \
10968         CALL_RPEEP(*defer); \
10969         S_prune_chain_head(defer); \
10970         defer_base = (defer_base + 1) % MAX_DEFERRED; \
10971         defer_ix--; \
10972     } \
10973     defer_queue[(defer_base + ++defer_ix) % MAX_DEFERRED] = &(o); \
10974   } STMT_END
10975
10976 #define IS_AND_OP(o)   (o->op_type == OP_AND)
10977 #define IS_OR_OP(o)    (o->op_type == OP_OR)
10978
10979
10980 STATIC void
10981 S_null_listop_in_list_context(pTHX_ OP *o)
10982 {
10983     OP *kid;
10984
10985     PERL_ARGS_ASSERT_NULL_LISTOP_IN_LIST_CONTEXT;
10986
10987     /* This is an OP_LIST in list context. That means we
10988      * can ditch the OP_LIST and the OP_PUSHMARK within. */
10989
10990     kid = cLISTOPo->op_first;
10991     /* Find the end of the chain of OPs executed within the OP_LIST. */
10992     while (kid->op_next != o)
10993         kid = kid->op_next;
10994
10995     kid->op_next = o->op_next; /* patch list out of exec chain */
10996     op_null(cUNOPo->op_first); /* NULL the pushmark */
10997     op_null(o); /* NULL the list */
10998 }
10999
11000 /* A peephole optimizer.  We visit the ops in the order they're to execute.
11001  * See the comments at the top of this file for more details about when
11002  * peep() is called */
11003
11004 void
11005 Perl_rpeep(pTHX_ OP *o)
11006 {
11007     dVAR;
11008     OP* oldop = NULL;
11009     OP* oldoldop = NULL;
11010     OP** defer_queue[MAX_DEFERRED]; /* small queue of deferred branches */
11011     int defer_base = 0;
11012     int defer_ix = -1;
11013     OP *fop;
11014     OP *sop;
11015
11016     if (!o || o->op_opt)
11017         return;
11018     ENTER;
11019     SAVEOP();
11020     SAVEVPTR(PL_curcop);
11021     for (;; o = o->op_next) {
11022         if (o && o->op_opt)
11023             o = NULL;
11024         if (!o) {
11025             while (defer_ix >= 0) {
11026                 OP **defer =
11027                         defer_queue[(defer_base + defer_ix--) % MAX_DEFERRED];
11028                 CALL_RPEEP(*defer);
11029                 S_prune_chain_head(defer);
11030             }
11031             break;
11032         }
11033
11034         /* By default, this op has now been optimised. A couple of cases below
11035            clear this again.  */
11036         o->op_opt = 1;
11037         PL_op = o;
11038
11039
11040         /* The following will have the OP_LIST and OP_PUSHMARK
11041          * patched out later IF the OP_LIST is in list context.
11042          * So in that case, we can set the this OP's op_next
11043          * to skip to after the OP_PUSHMARK:
11044          *   a THIS -> b
11045          *   d list -> e
11046          *   b   pushmark -> c
11047          *   c   whatever -> d
11048          *   e whatever
11049          * will eventually become:
11050          *   a THIS -> c
11051          *   - ex-list -> -
11052          *   -   ex-pushmark -> -
11053          *   c   whatever -> e
11054          *   e whatever
11055          */
11056         {
11057             OP *sibling;
11058             OP *other_pushmark;
11059             if (OP_TYPE_IS(o->op_next, OP_PUSHMARK)
11060                 && (sibling = OP_SIBLING(o))
11061                 && sibling->op_type == OP_LIST
11062                 /* This KIDS check is likely superfluous since OP_LIST
11063                  * would otherwise be an OP_STUB. */
11064                 && sibling->op_flags & OPf_KIDS
11065                 && (sibling->op_flags & OPf_WANT) == OPf_WANT_LIST
11066                 && (other_pushmark = cLISTOPx(sibling)->op_first)
11067                 /* Pointer equality also effectively checks that it's a
11068                  * pushmark. */
11069                 && other_pushmark == o->op_next)
11070             {
11071                 o->op_next = other_pushmark->op_next;
11072                 null_listop_in_list_context(sibling);
11073             }
11074         }
11075
11076         switch (o->op_type) {
11077         case OP_DBSTATE:
11078             PL_curcop = ((COP*)o);              /* for warnings */
11079             break;
11080         case OP_NEXTSTATE:
11081             PL_curcop = ((COP*)o);              /* for warnings */
11082
11083             /* Optimise a "return ..." at the end of a sub to just be "...".
11084              * This saves 2 ops. Before:
11085              * 1  <;> nextstate(main 1 -e:1) v ->2
11086              * 4  <@> return K ->5
11087              * 2    <0> pushmark s ->3
11088              * -    <1> ex-rv2sv sK/1 ->4
11089              * 3      <#> gvsv[*cat] s ->4
11090              *
11091              * After:
11092              * -  <@> return K ->-
11093              * -    <0> pushmark s ->2
11094              * -    <1> ex-rv2sv sK/1 ->-
11095              * 2      <$> gvsv(*cat) s ->3
11096              */
11097             {
11098                 OP *next = o->op_next;
11099                 OP *sibling = OP_SIBLING(o);
11100                 if (   OP_TYPE_IS(next, OP_PUSHMARK)
11101                     && OP_TYPE_IS(sibling, OP_RETURN)
11102                     && OP_TYPE_IS(sibling->op_next, OP_LINESEQ)
11103                     && OP_TYPE_IS(sibling->op_next->op_next, OP_LEAVESUB)
11104                     && cUNOPx(sibling)->op_first == next
11105                     && OP_HAS_SIBLING(next) && OP_SIBLING(next)->op_next
11106                     && next->op_next
11107                 ) {
11108                     /* Look through the PUSHMARK's siblings for one that
11109                      * points to the RETURN */
11110                     OP *top = OP_SIBLING(next);
11111                     while (top && top->op_next) {
11112                         if (top->op_next == sibling) {
11113                             top->op_next = sibling->op_next;
11114                             o->op_next = next->op_next;
11115                             break;
11116                         }
11117                         top = OP_SIBLING(top);
11118                     }
11119                 }
11120             }
11121
11122             /* Optimise 'my $x; my $y;' into 'my ($x, $y);'
11123              *
11124              * This latter form is then suitable for conversion into padrange
11125              * later on. Convert:
11126              *
11127              *   nextstate1 -> padop1 -> nextstate2 -> padop2 -> nextstate3
11128              *
11129              * into:
11130              *
11131              *   nextstate1 ->     listop     -> nextstate3
11132              *                 /            \
11133              *         pushmark -> padop1 -> padop2
11134              */
11135             if (o->op_next && (
11136                     o->op_next->op_type == OP_PADSV
11137                  || o->op_next->op_type == OP_PADAV
11138                  || o->op_next->op_type == OP_PADHV
11139                 )
11140                 && !(o->op_next->op_private & ~OPpLVAL_INTRO)
11141                 && o->op_next->op_next && o->op_next->op_next->op_type == OP_NEXTSTATE
11142                 && o->op_next->op_next->op_next && (
11143                     o->op_next->op_next->op_next->op_type == OP_PADSV
11144                  || o->op_next->op_next->op_next->op_type == OP_PADAV
11145                  || o->op_next->op_next->op_next->op_type == OP_PADHV
11146                 )
11147                 && !(o->op_next->op_next->op_next->op_private & ~OPpLVAL_INTRO)
11148                 && o->op_next->op_next->op_next->op_next && o->op_next->op_next->op_next->op_next->op_type == OP_NEXTSTATE
11149                 && (!CopLABEL((COP*)o)) /* Don't mess with labels */
11150                 && (!CopLABEL((COP*)o->op_next->op_next)) /* ... */
11151             ) {
11152                 OP *pad1, *ns2, *pad2, *ns3, *newop, *newpm;
11153
11154                 pad1 =    o->op_next;
11155                 ns2  = pad1->op_next;
11156                 pad2 =  ns2->op_next;
11157                 ns3  = pad2->op_next;
11158
11159                 /* we assume here that the op_next chain is the same as
11160                  * the op_sibling chain */
11161                 assert(OP_SIBLING(o)    == pad1);
11162                 assert(OP_SIBLING(pad1) == ns2);
11163                 assert(OP_SIBLING(ns2)  == pad2);
11164                 assert(OP_SIBLING(pad2) == ns3);
11165
11166                 /* create new listop, with children consisting of:
11167                  * a new pushmark, pad1, pad2. */
11168                 OP_SIBLING_set(pad2, NULL);
11169                 newop = newLISTOP(OP_LIST, 0, pad1, pad2);
11170                 newop->op_flags |= OPf_PARENS;
11171                 newop->op_flags = (newop->op_flags & ~OPf_WANT) | OPf_WANT_VOID;
11172                 newpm = cUNOPx(newop)->op_first; /* pushmark */
11173
11174                 /* Kill nextstate2 between padop1/padop2 */
11175                 op_free(ns2);
11176
11177                 o    ->op_next = newpm;
11178                 newpm->op_next = pad1;
11179                 pad1 ->op_next = pad2;
11180                 pad2 ->op_next = newop; /* listop */
11181                 newop->op_next = ns3;
11182
11183                 OP_SIBLING_set(o, newop);
11184                 OP_SIBLING_set(newop, ns3);
11185                 newop->op_lastsib = 0;
11186
11187                 newop->op_flags = (newop->op_flags & ~OPf_WANT) | OPf_WANT_VOID;
11188
11189                 /* Ensure pushmark has this flag if padops do */
11190                 if (pad1->op_flags & OPf_MOD && pad2->op_flags & OPf_MOD) {
11191                     o->op_next->op_flags |= OPf_MOD;
11192                 }
11193
11194                 break;
11195             }
11196
11197             /* Two NEXTSTATEs in a row serve no purpose. Except if they happen
11198                to carry two labels. For now, take the easier option, and skip
11199                this optimisation if the first NEXTSTATE has a label.  */
11200             if (!CopLABEL((COP*)o) && !PERLDB_NOOPT) {
11201                 OP *nextop = o->op_next;
11202                 while (nextop && nextop->op_type == OP_NULL)
11203                     nextop = nextop->op_next;
11204
11205                 if (nextop && (nextop->op_type == OP_NEXTSTATE)) {
11206                     COP *firstcop = (COP *)o;
11207                     COP *secondcop = (COP *)nextop;
11208                     /* We want the COP pointed to by o (and anything else) to
11209                        become the next COP down the line.  */
11210                     cop_free(firstcop);
11211
11212                     firstcop->op_next = secondcop->op_next;
11213
11214                     /* Now steal all its pointers, and duplicate the other
11215                        data.  */
11216                     firstcop->cop_line = secondcop->cop_line;
11217 #ifdef USE_ITHREADS
11218                     firstcop->cop_stashoff = secondcop->cop_stashoff;
11219                     firstcop->cop_file = secondcop->cop_file;
11220 #else
11221                     firstcop->cop_stash = secondcop->cop_stash;
11222                     firstcop->cop_filegv = secondcop->cop_filegv;
11223 #endif
11224                     firstcop->cop_hints = secondcop->cop_hints;
11225                     firstcop->cop_seq = secondcop->cop_seq;
11226                     firstcop->cop_warnings = secondcop->cop_warnings;
11227                     firstcop->cop_hints_hash = secondcop->cop_hints_hash;
11228
11229 #ifdef USE_ITHREADS
11230                     secondcop->cop_stashoff = 0;
11231                     secondcop->cop_file = NULL;
11232 #else
11233                     secondcop->cop_stash = NULL;
11234                     secondcop->cop_filegv = NULL;
11235 #endif
11236                     secondcop->cop_warnings = NULL;
11237                     secondcop->cop_hints_hash = NULL;
11238
11239                     /* If we use op_null(), and hence leave an ex-COP, some
11240                        warnings are misreported. For example, the compile-time
11241                        error in 'use strict; no strict refs;'  */
11242                     secondcop->op_type = OP_NULL;
11243                     secondcop->op_ppaddr = PL_ppaddr[OP_NULL];
11244                 }
11245             }
11246             break;
11247
11248         case OP_CONCAT:
11249             if (o->op_next && o->op_next->op_type == OP_STRINGIFY) {
11250                 if (o->op_next->op_private & OPpTARGET_MY) {
11251                     if (o->op_flags & OPf_STACKED) /* chained concats */
11252                         break; /* ignore_optimization */
11253                     else {
11254                         /* assert(PL_opargs[o->op_type] & OA_TARGLEX); */
11255                         o->op_targ = o->op_next->op_targ;
11256                         o->op_next->op_targ = 0;
11257                         o->op_private |= OPpTARGET_MY;
11258                     }
11259                 }
11260                 op_null(o->op_next);
11261             }
11262             break;
11263         case OP_STUB:
11264             if ((o->op_flags & OPf_WANT) != OPf_WANT_LIST) {
11265                 break; /* Scalar stub must produce undef.  List stub is noop */
11266             }
11267             goto nothin;
11268         case OP_NULL:
11269             if (o->op_targ == OP_NEXTSTATE
11270                 || o->op_targ == OP_DBSTATE)
11271             {
11272                 PL_curcop = ((COP*)o);
11273             }
11274             /* XXX: We avoid setting op_seq here to prevent later calls
11275                to rpeep() from mistakenly concluding that optimisation
11276                has already occurred. This doesn't fix the real problem,
11277                though (See 20010220.007). AMS 20010719 */
11278             /* op_seq functionality is now replaced by op_opt */
11279             o->op_opt = 0;
11280             /* FALLTHROUGH */
11281         case OP_SCALAR:
11282         case OP_LINESEQ:
11283         case OP_SCOPE:
11284         nothin:
11285             if (oldop) {
11286                 oldop->op_next = o->op_next;
11287                 o->op_opt = 0;
11288                 continue;
11289             }
11290             break;
11291
11292         case OP_PUSHMARK:
11293
11294             /* Convert a series of PAD ops for my vars plus support into a
11295              * single padrange op. Basically
11296              *
11297              *    pushmark -> pad[ahs]v -> pad[ahs]?v -> ... -> (list) -> rest
11298              *
11299              * becomes, depending on circumstances, one of
11300              *
11301              *    padrange  ----------------------------------> (list) -> rest
11302              *    padrange  --------------------------------------------> rest
11303              *
11304              * where all the pad indexes are sequential and of the same type
11305              * (INTRO or not).
11306              * We convert the pushmark into a padrange op, then skip
11307              * any other pad ops, and possibly some trailing ops.
11308              * Note that we don't null() the skipped ops, to make it
11309              * easier for Deparse to undo this optimisation (and none of
11310              * the skipped ops are holding any resourses). It also makes
11311              * it easier for find_uninit_var(), as it can just ignore
11312              * padrange, and examine the original pad ops.
11313              */
11314         {
11315             OP *p;
11316             OP *followop = NULL; /* the op that will follow the padrange op */
11317             U8 count = 0;
11318             U8 intro = 0;
11319             PADOFFSET base = 0; /* init only to stop compiler whining */
11320             U8 gimme       = 0; /* init only to stop compiler whining */
11321             bool defav = 0;  /* seen (...) = @_ */
11322             bool reuse = 0;  /* reuse an existing padrange op */
11323
11324             /* look for a pushmark -> gv[_] -> rv2av */
11325
11326             {
11327                 GV *gv;
11328                 OP *rv2av, *q;
11329                 p = o->op_next;
11330                 if (   p->op_type == OP_GV
11331                     && (gv = cGVOPx_gv(p))
11332                     && GvNAMELEN_get(gv) == 1
11333                     && *GvNAME_get(gv) == '_'
11334                     && GvSTASH(gv) == PL_defstash
11335                     && (rv2av = p->op_next)
11336                     && rv2av->op_type == OP_RV2AV
11337                     && !(rv2av->op_flags & OPf_REF)
11338                     && !(rv2av->op_private & (OPpLVAL_INTRO|OPpMAYBE_LVSUB))
11339                     && ((rv2av->op_flags & OPf_WANT) == OPf_WANT_LIST)
11340                     && OP_SIBLING(o) == rv2av /* these two for Deparse */
11341                     && cUNOPx(rv2av)->op_first == p
11342                 ) {
11343                     q = rv2av->op_next;
11344                     if (q->op_type == OP_NULL)
11345                         q = q->op_next;
11346                     if (q->op_type == OP_PUSHMARK) {
11347                         defav = 1;
11348                         p = q;
11349                     }
11350                 }
11351             }
11352             if (!defav) {
11353                 /* To allow Deparse to pessimise this, it needs to be able
11354                  * to restore the pushmark's original op_next, which it
11355                  * will assume to be the same as OP_SIBLING. */
11356                 if (o->op_next != OP_SIBLING(o))
11357                     break;
11358                 p = o;
11359             }
11360
11361             /* scan for PAD ops */
11362
11363             for (p = p->op_next; p; p = p->op_next) {
11364                 if (p->op_type == OP_NULL)
11365                     continue;
11366
11367                 if ((     p->op_type != OP_PADSV
11368                        && p->op_type != OP_PADAV
11369                        && p->op_type != OP_PADHV
11370                     )
11371                       /* any private flag other than INTRO? e.g. STATE */
11372                    || (p->op_private & ~OPpLVAL_INTRO)
11373                 )
11374                     break;
11375
11376                 /* let $a[N] potentially be optimised into AELEMFAST_LEX
11377                  * instead */
11378                 if (   p->op_type == OP_PADAV
11379                     && p->op_next
11380                     && p->op_next->op_type == OP_CONST
11381                     && p->op_next->op_next
11382                     && p->op_next->op_next->op_type == OP_AELEM
11383                 )
11384                     break;
11385
11386                 /* for 1st padop, note what type it is and the range
11387                  * start; for the others, check that it's the same type
11388                  * and that the targs are contiguous */
11389                 if (count == 0) {
11390                     intro = (p->op_private & OPpLVAL_INTRO);
11391                     base = p->op_targ;
11392                     gimme = (p->op_flags & OPf_WANT);
11393                 }
11394                 else {
11395                     if ((p->op_private & OPpLVAL_INTRO) != intro)
11396                         break;
11397                     /* Note that you'd normally  expect targs to be
11398                      * contiguous in my($a,$b,$c), but that's not the case
11399                      * when external modules start doing things, e.g.
11400                      i* Function::Parameters */
11401                     if (p->op_targ != base + count)
11402                         break;
11403                     assert(p->op_targ == base + count);
11404                     /* all the padops should be in the same context */
11405                     if (gimme != (p->op_flags & OPf_WANT))
11406                         break;
11407                 }
11408
11409                 /* for AV, HV, only when we're not flattening */
11410                 if (   p->op_type != OP_PADSV
11411                     && gimme != OPf_WANT_VOID
11412                     && !(p->op_flags & OPf_REF)
11413                 )
11414                     break;
11415
11416                 if (count >= OPpPADRANGE_COUNTMASK)
11417                     break;
11418
11419                 /* there's a biggest base we can fit into a
11420                  * SAVEt_CLEARPADRANGE in pp_padrange */
11421                 if (intro && base >
11422                         (UV_MAX >> (OPpPADRANGE_COUNTSHIFT+SAVE_TIGHT_SHIFT)))
11423                     break;
11424
11425                 /* Success! We've got another valid pad op to optimise away */
11426                 count++;
11427                 followop = p->op_next;
11428             }
11429
11430             if (count < 1)
11431                 break;
11432
11433             /* pp_padrange in specifically compile-time void context
11434              * skips pushing a mark and lexicals; in all other contexts
11435              * (including unknown till runtime) it pushes a mark and the
11436              * lexicals. We must be very careful then, that the ops we
11437              * optimise away would have exactly the same effect as the
11438              * padrange.
11439              * In particular in void context, we can only optimise to
11440              * a padrange if see see the complete sequence
11441              *     pushmark, pad*v, ...., list, nextstate
11442              * which has the net effect of of leaving the stack empty
11443              * (for now we leave the nextstate in the execution chain, for
11444              * its other side-effects).
11445              */
11446             assert(followop);
11447             if (gimme == OPf_WANT_VOID) {
11448                 if (OP_TYPE_IS_OR_WAS(followop, OP_LIST)
11449                         && gimme == (followop->op_flags & OPf_WANT)
11450                         && (   followop->op_next->op_type == OP_NEXTSTATE
11451                             || followop->op_next->op_type == OP_DBSTATE))
11452                 {
11453                     followop = followop->op_next; /* skip OP_LIST */
11454
11455                     /* consolidate two successive my(...);'s */
11456
11457                     if (   oldoldop
11458                         && oldoldop->op_type == OP_PADRANGE
11459                         && (oldoldop->op_flags & OPf_WANT) == OPf_WANT_VOID
11460                         && (oldoldop->op_private & OPpLVAL_INTRO) == intro
11461                         && !(oldoldop->op_flags & OPf_SPECIAL)
11462                     ) {
11463                         U8 old_count;
11464                         assert(oldoldop->op_next == oldop);
11465                         assert(   oldop->op_type == OP_NEXTSTATE
11466                                || oldop->op_type == OP_DBSTATE);
11467                         assert(oldop->op_next == o);
11468
11469                         old_count
11470                             = (oldoldop->op_private & OPpPADRANGE_COUNTMASK);
11471
11472                        /* Do not assume pad offsets for $c and $d are con-
11473                           tiguous in
11474                             my ($a,$b,$c);
11475                             my ($d,$e,$f);
11476                         */
11477                         if (  oldoldop->op_targ + old_count == base
11478                            && old_count < OPpPADRANGE_COUNTMASK - count) {
11479                             base = oldoldop->op_targ;
11480                             count += old_count;
11481                             reuse = 1;
11482                         }
11483                     }
11484
11485                     /* if there's any immediately following singleton
11486                      * my var's; then swallow them and the associated
11487                      * nextstates; i.e.
11488                      *    my ($a,$b); my $c; my $d;
11489                      * is treated as
11490                      *    my ($a,$b,$c,$d);
11491                      */
11492
11493                     while (    ((p = followop->op_next))
11494                             && (  p->op_type == OP_PADSV
11495                                || p->op_type == OP_PADAV
11496                                || p->op_type == OP_PADHV)
11497                             && (p->op_flags & OPf_WANT) == OPf_WANT_VOID
11498                             && (p->op_private & OPpLVAL_INTRO) == intro
11499                             && !(p->op_private & ~OPpLVAL_INTRO)
11500                             && p->op_next
11501                             && (   p->op_next->op_type == OP_NEXTSTATE
11502                                 || p->op_next->op_type == OP_DBSTATE)
11503                             && count < OPpPADRANGE_COUNTMASK
11504                             && base + count == p->op_targ
11505                     ) {
11506                         count++;
11507                         followop = p->op_next;
11508                     }
11509                 }
11510                 else
11511                     break;
11512             }
11513
11514             if (reuse) {
11515                 assert(oldoldop->op_type == OP_PADRANGE);
11516                 oldoldop->op_next = followop;
11517                 oldoldop->op_private = (intro | count);
11518                 o = oldoldop;
11519                 oldop = NULL;
11520                 oldoldop = NULL;
11521             }
11522             else {
11523                 /* Convert the pushmark into a padrange.
11524                  * To make Deparse easier, we guarantee that a padrange was
11525                  * *always* formerly a pushmark */
11526                 assert(o->op_type == OP_PUSHMARK);
11527                 o->op_next = followop;
11528                 o->op_type = OP_PADRANGE;
11529                 o->op_ppaddr = PL_ppaddr[OP_PADRANGE];
11530                 o->op_targ = base;
11531                 /* bit 7: INTRO; bit 6..0: count */
11532                 o->op_private = (intro | count);
11533                 o->op_flags = ((o->op_flags & ~(OPf_WANT|OPf_SPECIAL))
11534                                     | gimme | (defav ? OPf_SPECIAL : 0));
11535             }
11536             break;
11537         }
11538
11539         case OP_PADAV:
11540         case OP_GV:
11541             if (o->op_type == OP_PADAV || o->op_next->op_type == OP_RV2AV) {
11542                 OP* const pop = (o->op_type == OP_PADAV) ?
11543                             o->op_next : o->op_next->op_next;
11544                 IV i;
11545                 if (pop && pop->op_type == OP_CONST &&
11546                     ((PL_op = pop->op_next)) &&
11547                     pop->op_next->op_type == OP_AELEM &&
11548                     !(pop->op_next->op_private &
11549                       (OPpLVAL_INTRO|OPpLVAL_DEFER|OPpDEREF|OPpMAYBE_LVSUB)) &&
11550                     (i = SvIV(((SVOP*)pop)->op_sv)) >= -128 && i <= 127)
11551                 {
11552                     GV *gv;
11553                     if (cSVOPx(pop)->op_private & OPpCONST_STRICT)
11554                         no_bareword_allowed(pop);
11555                     if (o->op_type == OP_GV)
11556                         op_null(o->op_next);
11557                     op_null(pop->op_next);
11558                     op_null(pop);
11559                     o->op_flags |= pop->op_next->op_flags & OPf_MOD;
11560                     o->op_next = pop->op_next->op_next;
11561                     o->op_ppaddr = PL_ppaddr[OP_AELEMFAST];
11562                     o->op_private = (U8)i;
11563                     if (o->op_type == OP_GV) {
11564                         gv = cGVOPo_gv;
11565                         GvAVn(gv);
11566                         o->op_type = OP_AELEMFAST;
11567                     }
11568                     else
11569                         o->op_type = OP_AELEMFAST_LEX;
11570                 }
11571                 break;
11572             }
11573
11574             if (o->op_next->op_type == OP_RV2SV) {
11575                 if (!(o->op_next->op_private & OPpDEREF)) {
11576                     op_null(o->op_next);
11577                     o->op_private |= o->op_next->op_private & (OPpLVAL_INTRO
11578                                                                | OPpOUR_INTRO);
11579                     o->op_next = o->op_next->op_next;
11580                     o->op_type = OP_GVSV;
11581                     o->op_ppaddr = PL_ppaddr[OP_GVSV];
11582                 }
11583             }
11584             else if (o->op_next->op_type == OP_READLINE
11585                     && o->op_next->op_next->op_type == OP_CONCAT
11586                     && (o->op_next->op_next->op_flags & OPf_STACKED))
11587             {
11588                 /* Turn "$a .= <FH>" into an OP_RCATLINE. AMS 20010917 */
11589                 o->op_type   = OP_RCATLINE;
11590                 o->op_flags |= OPf_STACKED;
11591                 o->op_ppaddr = PL_ppaddr[OP_RCATLINE];
11592                 op_null(o->op_next->op_next);
11593                 op_null(o->op_next);
11594             }
11595
11596             break;
11597         
11598 #define HV_OR_SCALARHV(op)                                   \
11599     (  (op)->op_type == OP_PADHV || (op)->op_type == OP_RV2HV \
11600        ? (op)                                                  \
11601        : (op)->op_type == OP_SCALAR && (op)->op_flags & OPf_KIDS \
11602        && (  cUNOPx(op)->op_first->op_type == OP_PADHV          \
11603           || cUNOPx(op)->op_first->op_type == OP_RV2HV)          \
11604          ? cUNOPx(op)->op_first                                   \
11605          : NULL)
11606
11607         case OP_NOT:
11608             if ((fop = HV_OR_SCALARHV(cUNOP->op_first)))
11609                 fop->op_private |= OPpTRUEBOOL;
11610             break;
11611
11612         case OP_AND:
11613         case OP_OR:
11614         case OP_DOR:
11615             fop = cLOGOP->op_first;
11616             sop = OP_SIBLING(fop);
11617             while (cLOGOP->op_other->op_type == OP_NULL)
11618                 cLOGOP->op_other = cLOGOP->op_other->op_next;
11619             while (o->op_next && (   o->op_type == o->op_next->op_type
11620                                   || o->op_next->op_type == OP_NULL))
11621                 o->op_next = o->op_next->op_next;
11622
11623             /* if we're an OR and our next is a AND in void context, we'll
11624                follow it's op_other on short circuit, same for reverse.
11625                We can't do this with OP_DOR since if it's true, its return
11626                value is the underlying value which must be evaluated
11627                by the next op */
11628             if (o->op_next &&
11629                 (
11630                     (IS_AND_OP(o) && IS_OR_OP(o->op_next))
11631                  || (IS_OR_OP(o) && IS_AND_OP(o->op_next))
11632                 )
11633                 && (o->op_next->op_flags & OPf_WANT) == OPf_WANT_VOID
11634             ) {
11635                 o->op_next = ((LOGOP*)o->op_next)->op_other;
11636             }
11637             DEFER(cLOGOP->op_other);
11638           
11639             o->op_opt = 1;
11640             fop = HV_OR_SCALARHV(fop);
11641             if (sop) sop = HV_OR_SCALARHV(sop);
11642             if (fop || sop
11643             ){  
11644                 OP * nop = o;
11645                 OP * lop = o;
11646                 if (!((nop->op_flags & OPf_WANT) == OPf_WANT_VOID)) {
11647                     while (nop && nop->op_next) {
11648                         switch (nop->op_next->op_type) {
11649                             case OP_NOT:
11650                             case OP_AND:
11651                             case OP_OR:
11652                             case OP_DOR:
11653                                 lop = nop = nop->op_next;
11654                                 break;
11655                             case OP_NULL:
11656                                 nop = nop->op_next;
11657                                 break;
11658                             default:
11659                                 nop = NULL;
11660                                 break;
11661                         }
11662                     }            
11663                 }
11664                 if (fop) {
11665                     if (  (lop->op_flags & OPf_WANT) == OPf_WANT_VOID
11666                       || o->op_type == OP_AND  )
11667                         fop->op_private |= OPpTRUEBOOL;
11668                     else if (!(lop->op_flags & OPf_WANT))
11669                         fop->op_private |= OPpMAYBE_TRUEBOOL;
11670                 }
11671                 if (  (lop->op_flags & OPf_WANT) == OPf_WANT_VOID
11672                    && sop)
11673                     sop->op_private |= OPpTRUEBOOL;
11674             }                  
11675             
11676             
11677             break;
11678         
11679         case OP_COND_EXPR:
11680             if ((fop = HV_OR_SCALARHV(cLOGOP->op_first)))
11681                 fop->op_private |= OPpTRUEBOOL;
11682 #undef HV_OR_SCALARHV
11683             /* GERONIMO! */ /* FALLTHROUGH */
11684
11685         case OP_MAPWHILE:
11686         case OP_GREPWHILE:
11687         case OP_ANDASSIGN:
11688         case OP_ORASSIGN:
11689         case OP_DORASSIGN:
11690         case OP_RANGE:
11691         case OP_ONCE:
11692             while (cLOGOP->op_other->op_type == OP_NULL)
11693                 cLOGOP->op_other = cLOGOP->op_other->op_next;
11694             DEFER(cLOGOP->op_other);
11695             break;
11696
11697         case OP_ENTERLOOP:
11698         case OP_ENTERITER:
11699             while (cLOOP->op_redoop->op_type == OP_NULL)
11700                 cLOOP->op_redoop = cLOOP->op_redoop->op_next;
11701             while (cLOOP->op_nextop->op_type == OP_NULL)
11702                 cLOOP->op_nextop = cLOOP->op_nextop->op_next;
11703             while (cLOOP->op_lastop->op_type == OP_NULL)
11704                 cLOOP->op_lastop = cLOOP->op_lastop->op_next;
11705             /* a while(1) loop doesn't have an op_next that escapes the
11706              * loop, so we have to explicitly follow the op_lastop to
11707              * process the rest of the code */
11708             DEFER(cLOOP->op_lastop);
11709             break;
11710
11711         case OP_ENTERTRY:
11712             assert(cLOGOPo->op_other->op_type == OP_LEAVETRY);
11713             DEFER(cLOGOPo->op_other);
11714             break;
11715
11716         case OP_SUBST:
11717             assert(!(cPMOP->op_pmflags & PMf_ONCE));
11718             while (cPMOP->op_pmstashstartu.op_pmreplstart &&
11719                    cPMOP->op_pmstashstartu.op_pmreplstart->op_type == OP_NULL)
11720                 cPMOP->op_pmstashstartu.op_pmreplstart
11721                     = cPMOP->op_pmstashstartu.op_pmreplstart->op_next;
11722             DEFER(cPMOP->op_pmstashstartu.op_pmreplstart);
11723             break;
11724
11725         case OP_SORT: {
11726             OP *oright;
11727
11728             if (o->op_flags & OPf_SPECIAL) {
11729                 /* first arg is a code block */
11730                 OP * const nullop = OP_SIBLING(cLISTOP->op_first);
11731                 OP * kid          = cUNOPx(nullop)->op_first;
11732
11733                 assert(nullop->op_type == OP_NULL);
11734                 assert(kid->op_type == OP_SCOPE
11735                  || (kid->op_type == OP_NULL && kid->op_targ == OP_LEAVE));
11736                 /* since OP_SORT doesn't have a handy op_other-style
11737                  * field that can point directly to the start of the code
11738                  * block, store it in the otherwise-unused op_next field
11739                  * of the top-level OP_NULL. This will be quicker at
11740                  * run-time, and it will also allow us to remove leading
11741                  * OP_NULLs by just messing with op_nexts without
11742                  * altering the basic op_first/op_sibling layout. */
11743                 kid = kLISTOP->op_first;
11744                 assert(
11745                       (kid->op_type == OP_NULL && kid->op_targ == OP_NEXTSTATE)
11746                     || kid->op_type == OP_STUB
11747                     || kid->op_type == OP_ENTER);
11748                 nullop->op_next = kLISTOP->op_next;
11749                 DEFER(nullop->op_next);
11750             }
11751
11752             /* check that RHS of sort is a single plain array */
11753             oright = cUNOPo->op_first;
11754             if (!oright || oright->op_type != OP_PUSHMARK)
11755                 break;
11756
11757             if (o->op_private & OPpSORT_INPLACE)
11758                 break;
11759
11760             /* reverse sort ... can be optimised.  */
11761             if (!OP_HAS_SIBLING(cUNOPo)) {
11762                 /* Nothing follows us on the list. */
11763                 OP * const reverse = o->op_next;
11764
11765                 if (reverse->op_type == OP_REVERSE &&
11766                     (reverse->op_flags & OPf_WANT) == OPf_WANT_LIST) {
11767                     OP * const pushmark = cUNOPx(reverse)->op_first;
11768                     if (pushmark && (pushmark->op_type == OP_PUSHMARK)
11769                         && (OP_SIBLING(cUNOPx(pushmark)) == o)) {
11770                         /* reverse -> pushmark -> sort */
11771                         o->op_private |= OPpSORT_REVERSE;
11772                         op_null(reverse);
11773                         pushmark->op_next = oright->op_next;
11774                         op_null(oright);
11775                     }
11776                 }
11777             }
11778
11779             break;
11780         }
11781
11782         case OP_REVERSE: {
11783             OP *ourmark, *theirmark, *ourlast, *iter, *expushmark, *rv2av;
11784             OP *gvop = NULL;
11785             LISTOP *enter, *exlist;
11786
11787             if (o->op_private & OPpSORT_INPLACE)
11788                 break;
11789
11790             enter = (LISTOP *) o->op_next;
11791             if (!enter)
11792                 break;
11793             if (enter->op_type == OP_NULL) {
11794                 enter = (LISTOP *) enter->op_next;
11795                 if (!enter)
11796                     break;
11797             }
11798             /* for $a (...) will have OP_GV then OP_RV2GV here.
11799                for (...) just has an OP_GV.  */
11800             if (enter->op_type == OP_GV) {
11801                 gvop = (OP *) enter;
11802                 enter = (LISTOP *) enter->op_next;
11803                 if (!enter)
11804                     break;
11805                 if (enter->op_type == OP_RV2GV) {
11806                   enter = (LISTOP *) enter->op_next;
11807                   if (!enter)
11808                     break;
11809                 }
11810             }
11811
11812             if (enter->op_type != OP_ENTERITER)
11813                 break;
11814
11815             iter = enter->op_next;
11816             if (!iter || iter->op_type != OP_ITER)
11817                 break;
11818             
11819             expushmark = enter->op_first;
11820             if (!expushmark || expushmark->op_type != OP_NULL
11821                 || expushmark->op_targ != OP_PUSHMARK)
11822                 break;
11823
11824             exlist = (LISTOP *) OP_SIBLING(expushmark);
11825             if (!exlist || exlist->op_type != OP_NULL
11826                 || exlist->op_targ != OP_LIST)
11827                 break;
11828
11829             if (exlist->op_last != o) {
11830                 /* Mmm. Was expecting to point back to this op.  */
11831                 break;
11832             }
11833             theirmark = exlist->op_first;
11834             if (!theirmark || theirmark->op_type != OP_PUSHMARK)
11835                 break;
11836
11837             if (OP_SIBLING(theirmark) != o) {
11838                 /* There's something between the mark and the reverse, eg
11839                    for (1, reverse (...))
11840                    so no go.  */
11841                 break;
11842             }
11843
11844             ourmark = ((LISTOP *)o)->op_first;
11845             if (!ourmark || ourmark->op_type != OP_PUSHMARK)
11846                 break;
11847
11848             ourlast = ((LISTOP *)o)->op_last;
11849             if (!ourlast || ourlast->op_next != o)
11850                 break;
11851
11852             rv2av = OP_SIBLING(ourmark);
11853             if (rv2av && rv2av->op_type == OP_RV2AV && !OP_HAS_SIBLING(rv2av)
11854                 && rv2av->op_flags == (OPf_WANT_LIST | OPf_KIDS)
11855                 && enter->op_flags == (OPf_WANT_LIST | OPf_KIDS)) {
11856                 /* We're just reversing a single array.  */
11857                 rv2av->op_flags = OPf_WANT_SCALAR | OPf_KIDS | OPf_REF;
11858                 enter->op_flags |= OPf_STACKED;
11859             }
11860
11861             /* We don't have control over who points to theirmark, so sacrifice
11862                ours.  */
11863             theirmark->op_next = ourmark->op_next;
11864             theirmark->op_flags = ourmark->op_flags;
11865             ourlast->op_next = gvop ? gvop : (OP *) enter;
11866             op_null(ourmark);
11867             op_null(o);
11868             enter->op_private |= OPpITER_REVERSED;
11869             iter->op_private |= OPpITER_REVERSED;
11870             
11871             break;
11872         }
11873
11874         case OP_QR:
11875         case OP_MATCH:
11876             if (!(cPMOP->op_pmflags & PMf_ONCE)) {
11877                 assert (!cPMOP->op_pmstashstartu.op_pmreplstart);
11878             }
11879             break;
11880
11881         case OP_RUNCV:
11882             if (!(o->op_private & OPpOFFBYONE) && !CvCLONE(PL_compcv)) {
11883                 SV *sv;
11884                 if (CvEVAL(PL_compcv)) sv = &PL_sv_undef;
11885                 else {
11886                     sv = newRV((SV *)PL_compcv);
11887                     sv_rvweaken(sv);
11888                     SvREADONLY_on(sv);
11889                 }
11890                 o->op_type = OP_CONST;
11891                 o->op_ppaddr = PL_ppaddr[OP_CONST];
11892                 o->op_flags |= OPf_SPECIAL;
11893                 cSVOPo->op_sv = sv;
11894             }
11895             break;
11896
11897         case OP_SASSIGN:
11898             if (OP_GIMME(o,0) == G_VOID) {
11899                 OP *right = cBINOP->op_first;
11900                 if (right) {
11901                     /*   sassign
11902                     *      RIGHT
11903                     *      substr
11904                     *         pushmark
11905                     *         arg1
11906                     *         arg2
11907                     *         ...
11908                     * becomes
11909                     *
11910                     *  ex-sassign
11911                     *     substr
11912                     *        pushmark
11913                     *        RIGHT
11914                     *        arg1
11915                     *        arg2
11916                     *        ...
11917                     */
11918                     OP *left = OP_SIBLING(right);
11919                     if (left->op_type == OP_SUBSTR
11920                          && (left->op_private & 7) < 4) {
11921                         op_null(o);
11922                         /* cut out right */
11923                         op_sibling_splice(o, NULL, 1, NULL);
11924                         /* and insert it as second child of OP_SUBSTR */
11925                         op_sibling_splice(left, cBINOPx(left)->op_first, 0,
11926                                     right);
11927                         left->op_private |= OPpSUBSTR_REPL_FIRST;
11928                         left->op_flags =
11929                             (o->op_flags & ~OPf_WANT) | OPf_WANT_VOID;
11930                     }
11931                 }
11932             }
11933             break;
11934
11935         case OP_CUSTOM: {
11936             Perl_cpeep_t cpeep = 
11937                 XopENTRYCUSTOM(o, xop_peep);
11938             if (cpeep)
11939                 cpeep(aTHX_ o, oldop);
11940             break;
11941         }
11942             
11943         }
11944         /* did we just null the current op? If so, re-process it to handle
11945          * eliding "empty" ops from the chain */
11946         if (o->op_type == OP_NULL && oldop && oldop->op_next == o) {
11947             o->op_opt = 0;
11948             o = oldop;
11949         }
11950         else {
11951             oldoldop = oldop;
11952             oldop = o;
11953         }
11954     }
11955     LEAVE;
11956 }
11957
11958 void
11959 Perl_peep(pTHX_ OP *o)
11960 {
11961     CALL_RPEEP(o);
11962 }
11963
11964 /*
11965 =head1 Custom Operators
11966
11967 =for apidoc Ao||custom_op_xop
11968 Return the XOP structure for a given custom op.  This macro should be
11969 considered internal to OP_NAME and the other access macros: use them instead.
11970 This macro does call a function.  Prior
11971 to 5.19.6, this was implemented as a
11972 function.
11973
11974 =cut
11975 */
11976
11977 XOPRETANY
11978 Perl_custom_op_get_field(pTHX_ const OP *o, const xop_flags_enum field)
11979 {
11980     SV *keysv;
11981     HE *he = NULL;
11982     XOP *xop;
11983
11984     static const XOP xop_null = { 0, 0, 0, 0, 0 };
11985
11986     PERL_ARGS_ASSERT_CUSTOM_OP_GET_FIELD;
11987     assert(o->op_type == OP_CUSTOM);
11988
11989     /* This is wrong. It assumes a function pointer can be cast to IV,
11990      * which isn't guaranteed, but this is what the old custom OP code
11991      * did. In principle it should be safer to Copy the bytes of the
11992      * pointer into a PV: since the new interface is hidden behind
11993      * functions, this can be changed later if necessary.  */
11994     /* Change custom_op_xop if this ever happens */
11995     keysv = sv_2mortal(newSViv(PTR2IV(o->op_ppaddr)));
11996
11997     if (PL_custom_ops)
11998         he = hv_fetch_ent(PL_custom_ops, keysv, 0, 0);
11999
12000     /* assume noone will have just registered a desc */
12001     if (!he && PL_custom_op_names &&
12002         (he = hv_fetch_ent(PL_custom_op_names, keysv, 0, 0))
12003     ) {
12004         const char *pv;
12005         STRLEN l;
12006
12007         /* XXX does all this need to be shared mem? */
12008         Newxz(xop, 1, XOP);
12009         pv = SvPV(HeVAL(he), l);
12010         XopENTRY_set(xop, xop_name, savepvn(pv, l));
12011         if (PL_custom_op_descs &&
12012             (he = hv_fetch_ent(PL_custom_op_descs, keysv, 0, 0))
12013         ) {
12014             pv = SvPV(HeVAL(he), l);
12015             XopENTRY_set(xop, xop_desc, savepvn(pv, l));
12016         }
12017         Perl_custom_op_register(aTHX_ o->op_ppaddr, xop);
12018     }
12019     else {
12020         if (!he)
12021             xop = (XOP *)&xop_null;
12022         else
12023             xop = INT2PTR(XOP *, SvIV(HeVAL(he)));
12024     }
12025     {
12026         XOPRETANY any;
12027         if(field == XOPe_xop_ptr) {
12028             any.xop_ptr = xop;
12029         } else {
12030             const U32 flags = XopFLAGS(xop);
12031             if(flags & field) {
12032                 switch(field) {
12033                 case XOPe_xop_name:
12034                     any.xop_name = xop->xop_name;
12035                     break;
12036                 case XOPe_xop_desc:
12037                     any.xop_desc = xop->xop_desc;
12038                     break;
12039                 case XOPe_xop_class:
12040                     any.xop_class = xop->xop_class;
12041                     break;
12042                 case XOPe_xop_peep:
12043                     any.xop_peep = xop->xop_peep;
12044                     break;
12045                 default:
12046                     NOT_REACHED;
12047                     break;
12048                 }
12049             } else {
12050                 switch(field) {
12051                 case XOPe_xop_name:
12052                     any.xop_name = XOPd_xop_name;
12053                     break;
12054                 case XOPe_xop_desc:
12055                     any.xop_desc = XOPd_xop_desc;
12056                     break;
12057                 case XOPe_xop_class:
12058                     any.xop_class = XOPd_xop_class;
12059                     break;
12060                 case XOPe_xop_peep:
12061                     any.xop_peep = XOPd_xop_peep;
12062                     break;
12063                 default:
12064                     NOT_REACHED;
12065                     break;
12066                 }
12067             }
12068         }
12069         /* Some gcc releases emit a warning for this function:
12070          * op.c: In function 'Perl_custom_op_get_field':
12071          * op.c:...: warning: 'any.xop_name' may be used uninitialized in this function [-Wmaybe-uninitialized]
12072          * Whether this is true, is currently unknown. */
12073         return any;
12074     }
12075 }
12076
12077 /*
12078 =for apidoc Ao||custom_op_register
12079 Register a custom op.  See L<perlguts/"Custom Operators">.
12080
12081 =cut
12082 */
12083
12084 void
12085 Perl_custom_op_register(pTHX_ Perl_ppaddr_t ppaddr, const XOP *xop)
12086 {
12087     SV *keysv;
12088
12089     PERL_ARGS_ASSERT_CUSTOM_OP_REGISTER;
12090
12091     /* see the comment in custom_op_xop */
12092     keysv = sv_2mortal(newSViv(PTR2IV(ppaddr)));
12093
12094     if (!PL_custom_ops)
12095         PL_custom_ops = newHV();
12096
12097     if (!hv_store_ent(PL_custom_ops, keysv, newSViv(PTR2IV(xop)), 0))
12098         Perl_croak(aTHX_ "panic: can't register custom OP %s", xop->xop_name);
12099 }
12100
12101 /*
12102
12103 =for apidoc core_prototype
12104
12105 This function assigns the prototype of the named core function to C<sv>, or
12106 to a new mortal SV if C<sv> is NULL.  It returns the modified C<sv>, or
12107 NULL if the core function has no prototype.  C<code> is a code as returned
12108 by C<keyword()>.  It must not be equal to 0.
12109
12110 =cut
12111 */
12112
12113 SV *
12114 Perl_core_prototype(pTHX_ SV *sv, const char *name, const int code,
12115                           int * const opnum)
12116 {
12117     int i = 0, n = 0, seen_question = 0, defgv = 0;
12118     I32 oa;
12119 #define MAX_ARGS_OP ((sizeof(I32) - 1) * 2)
12120     char str[ MAX_ARGS_OP * 2 + 2 ]; /* One ';', one '\0' */
12121     bool nullret = FALSE;
12122
12123     PERL_ARGS_ASSERT_CORE_PROTOTYPE;
12124
12125     assert (code);
12126
12127     if (!sv) sv = sv_newmortal();
12128
12129 #define retsetpvs(x,y) sv_setpvs(sv, x); if(opnum) *opnum=(y); return sv
12130
12131     switch (code < 0 ? -code : code) {
12132     case KEY_and   : case KEY_chop: case KEY_chomp:
12133     case KEY_cmp   : case KEY_defined: case KEY_delete: case KEY_exec  :
12134     case KEY_exists: case KEY_eq     : case KEY_ge    : case KEY_goto  :
12135     case KEY_grep  : case KEY_gt     : case KEY_last  : case KEY_le    :
12136     case KEY_lt    : case KEY_map    : case KEY_ne    : case KEY_next  :
12137     case KEY_or    : case KEY_print  : case KEY_printf: case KEY_qr    :
12138     case KEY_redo  : case KEY_require: case KEY_return: case KEY_say   :
12139     case KEY_select: case KEY_sort   : case KEY_split : case KEY_system:
12140     case KEY_x     : case KEY_xor    :
12141         if (!opnum) return NULL; nullret = TRUE; goto findopnum;
12142     case KEY_glob:    retsetpvs("_;", OP_GLOB);
12143     case KEY_keys:    retsetpvs("+", OP_KEYS);
12144     case KEY_values:  retsetpvs("+", OP_VALUES);
12145     case KEY_each:    retsetpvs("+", OP_EACH);
12146     case KEY_push:    retsetpvs("+@", OP_PUSH);
12147     case KEY_unshift: retsetpvs("+@", OP_UNSHIFT);
12148     case KEY_pop:     retsetpvs(";+", OP_POP);
12149     case KEY_shift:   retsetpvs(";+", OP_SHIFT);
12150     case KEY_pos:     retsetpvs(";\\[$*]", OP_POS);
12151     case KEY_splice:
12152         retsetpvs("+;$$@", OP_SPLICE);
12153     case KEY___FILE__: case KEY___LINE__: case KEY___PACKAGE__:
12154         retsetpvs("", 0);
12155     case KEY_evalbytes:
12156         name = "entereval"; break;
12157     case KEY_readpipe:
12158         name = "backtick";
12159     }
12160
12161 #undef retsetpvs
12162
12163   findopnum:
12164     while (i < MAXO) {  /* The slow way. */
12165         if (strEQ(name, PL_op_name[i])
12166             || strEQ(name, PL_op_desc[i]))
12167         {
12168             if (nullret) { assert(opnum); *opnum = i; return NULL; }
12169             goto found;
12170         }
12171         i++;
12172     }
12173     return NULL;
12174   found:
12175     defgv = PL_opargs[i] & OA_DEFGV;
12176     oa = PL_opargs[i] >> OASHIFT;
12177     while (oa) {
12178         if (oa & OA_OPTIONAL && !seen_question && (
12179               !defgv || (oa & (OA_OPTIONAL - 1)) == OA_FILEREF
12180         )) {
12181             seen_question = 1;
12182             str[n++] = ';';
12183         }
12184         if ((oa & (OA_OPTIONAL - 1)) >= OA_AVREF
12185             && (oa & (OA_OPTIONAL - 1)) <= OA_SCALARREF
12186             /* But globs are already references (kinda) */
12187             && (oa & (OA_OPTIONAL - 1)) != OA_FILEREF
12188         ) {
12189             str[n++] = '\\';
12190         }
12191         if ((oa & (OA_OPTIONAL - 1)) == OA_SCALARREF
12192          && !scalar_mod_type(NULL, i)) {
12193             str[n++] = '[';
12194             str[n++] = '$';
12195             str[n++] = '@';
12196             str[n++] = '%';
12197             if (i == OP_LOCK || i == OP_UNDEF) str[n++] = '&';
12198             str[n++] = '*';
12199             str[n++] = ']';
12200         }
12201         else str[n++] = ("?$@@%&*$")[oa & (OA_OPTIONAL - 1)];
12202         if (oa & OA_OPTIONAL && defgv && str[n-1] == '$') {
12203             str[n-1] = '_'; defgv = 0;
12204         }
12205         oa = oa >> 4;
12206     }
12207     if (code == -KEY_not || code == -KEY_getprotobynumber) str[n++] = ';';
12208     str[n++] = '\0';
12209     sv_setpvn(sv, str, n - 1);
12210     if (opnum) *opnum = i;
12211     return sv;
12212 }
12213
12214 OP *
12215 Perl_coresub_op(pTHX_ SV * const coreargssv, const int code,
12216                       const int opnum)
12217 {
12218     OP * const argop = newSVOP(OP_COREARGS,0,coreargssv);
12219     OP *o;
12220
12221     PERL_ARGS_ASSERT_CORESUB_OP;
12222
12223     switch(opnum) {
12224     case 0:
12225         return op_append_elem(OP_LINESEQ,
12226                        argop,
12227                        newSLICEOP(0,
12228                                   newSVOP(OP_CONST, 0, newSViv(-code % 3)),
12229                                   newOP(OP_CALLER,0)
12230                        )
12231                );
12232     case OP_SELECT: /* which represents OP_SSELECT as well */
12233         if (code)
12234             return newCONDOP(
12235                          0,
12236                          newBINOP(OP_GT, 0,
12237                                   newAVREF(newGVOP(OP_GV, 0, PL_defgv)),
12238                                   newSVOP(OP_CONST, 0, newSVuv(1))
12239                                  ),
12240                          coresub_op(newSVuv((UV)OP_SSELECT), 0,
12241                                     OP_SSELECT),
12242                          coresub_op(coreargssv, 0, OP_SELECT)
12243                    );
12244         /* FALLTHROUGH */
12245     default:
12246         switch (PL_opargs[opnum] & OA_CLASS_MASK) {
12247         case OA_BASEOP:
12248             return op_append_elem(
12249                         OP_LINESEQ, argop,
12250                         newOP(opnum,
12251                               opnum == OP_WANTARRAY || opnum == OP_RUNCV
12252                                 ? OPpOFFBYONE << 8 : 0)
12253                    );
12254         case OA_BASEOP_OR_UNOP:
12255             if (opnum == OP_ENTEREVAL) {
12256                 o = newUNOP(OP_ENTEREVAL,OPpEVAL_COPHH<<8,argop);
12257                 if (code == -KEY_evalbytes) o->op_private |= OPpEVAL_BYTES;
12258             }
12259             else o = newUNOP(opnum,0,argop);
12260             if (opnum == OP_CALLER) o->op_private |= OPpOFFBYONE;
12261             else {
12262           onearg:
12263               if (is_handle_constructor(o, 1))
12264                 argop->op_private |= OPpCOREARGS_DEREF1;
12265               if (scalar_mod_type(NULL, opnum))
12266                 argop->op_private |= OPpCOREARGS_SCALARMOD;
12267             }
12268             return o;
12269         default:
12270             o = convert(opnum,OPf_SPECIAL*(opnum == OP_GLOB),argop);
12271             if (is_handle_constructor(o, 2))
12272                 argop->op_private |= OPpCOREARGS_DEREF2;
12273             if (opnum == OP_SUBSTR) {
12274                 o->op_private |= OPpMAYBE_LVSUB;
12275                 return o;
12276             }
12277             else goto onearg;
12278         }
12279     }
12280 }
12281
12282 void
12283 Perl_report_redefined_cv(pTHX_ const SV *name, const CV *old_cv,
12284                                SV * const *new_const_svp)
12285 {
12286     const char *hvname;
12287     bool is_const = !!CvCONST(old_cv);
12288     SV *old_const_sv = is_const ? cv_const_sv(old_cv) : NULL;
12289
12290     PERL_ARGS_ASSERT_REPORT_REDEFINED_CV;
12291
12292     if (is_const && new_const_svp && old_const_sv == *new_const_svp)
12293         return;
12294         /* They are 2 constant subroutines generated from
12295            the same constant. This probably means that
12296            they are really the "same" proxy subroutine
12297            instantiated in 2 places. Most likely this is
12298            when a constant is exported twice.  Don't warn.
12299         */
12300     if (
12301         (ckWARN(WARN_REDEFINE)
12302          && !(
12303                 CvGV(old_cv) && GvSTASH(CvGV(old_cv))
12304              && HvNAMELEN(GvSTASH(CvGV(old_cv))) == 7
12305              && (hvname = HvNAME(GvSTASH(CvGV(old_cv))),
12306                  strEQ(hvname, "autouse"))
12307              )
12308         )
12309      || (is_const
12310          && ckWARN_d(WARN_REDEFINE)
12311          && (!new_const_svp || sv_cmp(old_const_sv, *new_const_svp))
12312         )
12313     )
12314         Perl_warner(aTHX_ packWARN(WARN_REDEFINE),
12315                           is_const
12316                             ? "Constant subroutine %"SVf" redefined"
12317                             : "Subroutine %"SVf" redefined",
12318                           SVfARG(name));
12319 }
12320
12321 /*
12322 =head1 Hook manipulation
12323
12324 These functions provide convenient and thread-safe means of manipulating
12325 hook variables.
12326
12327 =cut
12328 */
12329
12330 /*
12331 =for apidoc Am|void|wrap_op_checker|Optype opcode|Perl_check_t new_checker|Perl_check_t *old_checker_p
12332
12333 Puts a C function into the chain of check functions for a specified op
12334 type.  This is the preferred way to manipulate the L</PL_check> array.
12335 I<opcode> specifies which type of op is to be affected.  I<new_checker>
12336 is a pointer to the C function that is to be added to that opcode's
12337 check chain, and I<old_checker_p> points to the storage location where a
12338 pointer to the next function in the chain will be stored.  The value of
12339 I<new_pointer> is written into the L</PL_check> array, while the value
12340 previously stored there is written to I<*old_checker_p>.
12341
12342 The function should be defined like this:
12343
12344     static OP *new_checker(pTHX_ OP *op) { ... }
12345
12346 It is intended to be called in this manner:
12347
12348     new_checker(aTHX_ op)
12349
12350 I<old_checker_p> should be defined like this:
12351
12352     static Perl_check_t old_checker_p;
12353
12354 L</PL_check> is global to an entire process, and a module wishing to
12355 hook op checking may find itself invoked more than once per process,
12356 typically in different threads.  To handle that situation, this function
12357 is idempotent.  The location I<*old_checker_p> must initially (once
12358 per process) contain a null pointer.  A C variable of static duration
12359 (declared at file scope, typically also marked C<static> to give
12360 it internal linkage) will be implicitly initialised appropriately,
12361 if it does not have an explicit initialiser.  This function will only
12362 actually modify the check chain if it finds I<*old_checker_p> to be null.
12363 This function is also thread safe on the small scale.  It uses appropriate
12364 locking to avoid race conditions in accessing L</PL_check>.
12365
12366 When this function is called, the function referenced by I<new_checker>
12367 must be ready to be called, except for I<*old_checker_p> being unfilled.
12368 In a threading situation, I<new_checker> may be called immediately,
12369 even before this function has returned.  I<*old_checker_p> will always
12370 be appropriately set before I<new_checker> is called.  If I<new_checker>
12371 decides not to do anything special with an op that it is given (which
12372 is the usual case for most uses of op check hooking), it must chain the
12373 check function referenced by I<*old_checker_p>.
12374
12375 If you want to influence compilation of calls to a specific subroutine,
12376 then use L</cv_set_call_checker> rather than hooking checking of all
12377 C<entersub> ops.
12378
12379 =cut
12380 */
12381
12382 void
12383 Perl_wrap_op_checker(pTHX_ Optype opcode,
12384     Perl_check_t new_checker, Perl_check_t *old_checker_p)
12385 {
12386     dVAR;
12387
12388     PERL_UNUSED_CONTEXT;
12389     PERL_ARGS_ASSERT_WRAP_OP_CHECKER;
12390     if (*old_checker_p) return;
12391     OP_CHECK_MUTEX_LOCK;
12392     if (!*old_checker_p) {
12393         *old_checker_p = PL_check[opcode];
12394         PL_check[opcode] = new_checker;
12395     }
12396     OP_CHECK_MUTEX_UNLOCK;
12397 }
12398
12399 #include "XSUB.h"
12400
12401 /* Efficient sub that returns a constant scalar value. */
12402 static void
12403 const_sv_xsub(pTHX_ CV* cv)
12404 {
12405     dXSARGS;
12406     SV *const sv = MUTABLE_SV(XSANY.any_ptr);
12407     PERL_UNUSED_ARG(items);
12408     if (!sv) {
12409         XSRETURN(0);
12410     }
12411     EXTEND(sp, 1);
12412     ST(0) = sv;
12413     XSRETURN(1);
12414 }
12415
12416 static void
12417 const_av_xsub(pTHX_ CV* cv)
12418 {
12419     dXSARGS;
12420     AV * const av = MUTABLE_AV(XSANY.any_ptr);
12421     SP -= items;
12422     assert(av);
12423 #ifndef DEBUGGING
12424     if (!av) {
12425         XSRETURN(0);
12426     }
12427 #endif
12428     if (SvRMAGICAL(av))
12429         Perl_croak(aTHX_ "Magical list constants are not supported");
12430     if (GIMME_V != G_ARRAY) {
12431         EXTEND(SP, 1);
12432         ST(0) = sv_2mortal(newSViv((IV)AvFILLp(av)+1));
12433         XSRETURN(1);
12434     }
12435     EXTEND(SP, AvFILLp(av)+1);
12436     Copy(AvARRAY(av), &ST(0), AvFILLp(av)+1, SV *);
12437     XSRETURN(AvFILLp(av)+1);
12438 }
12439
12440 /*
12441  * Local variables:
12442  * c-indentation-style: bsd
12443  * c-basic-offset: 4
12444  * indent-tabs-mode: nil
12445  * End:
12446  *
12447  * ex: set ts=8 sts=4 sw=4 et:
12448  */