This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Update the totals in perldelta with the last few commits
[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
106 #define CALL_PEEP(o) PL_peepp(aTHX_ o)
107 #define CALL_RPEEP(o) PL_rpeepp(aTHX_ o)
108 #define CALL_OPFREEHOOK(o) if (PL_opfreehook) PL_opfreehook(aTHX_ o)
109
110 #if defined(PL_OP_SLAB_ALLOC)
111
112 #ifdef PERL_DEBUG_READONLY_OPS
113 #  define PERL_SLAB_SIZE 4096
114 #  include <sys/mman.h>
115 #endif
116
117 #ifndef PERL_SLAB_SIZE
118 #define PERL_SLAB_SIZE 2048
119 #endif
120
121 void *
122 Perl_Slab_Alloc(pTHX_ size_t sz)
123 {
124     dVAR;
125     /*
126      * To make incrementing use count easy PL_OpSlab is an I32 *
127      * To make inserting the link to slab PL_OpPtr is I32 **
128      * So compute size in units of sizeof(I32 *) as that is how Pl_OpPtr increments
129      * Add an overhead for pointer to slab and round up as a number of pointers
130      */
131     sz = (sz + 2*sizeof(I32 *) -1)/sizeof(I32 *);
132     if ((PL_OpSpace -= sz) < 0) {
133 #ifdef PERL_DEBUG_READONLY_OPS
134         /* We need to allocate chunk by chunk so that we can control the VM
135            mapping */
136         PL_OpPtr = (I32**) mmap(0, PERL_SLAB_SIZE*sizeof(I32*), PROT_READ|PROT_WRITE,
137                         MAP_ANON|MAP_PRIVATE, -1, 0);
138
139         DEBUG_m(PerlIO_printf(Perl_debug_log, "mapped %lu at %p\n",
140                               (unsigned long) PERL_SLAB_SIZE*sizeof(I32*),
141                               PL_OpPtr));
142         if(PL_OpPtr == MAP_FAILED) {
143             perror("mmap failed");
144             abort();
145         }
146 #else
147
148         PL_OpPtr = (I32 **) PerlMemShared_calloc(PERL_SLAB_SIZE,sizeof(I32*)); 
149 #endif
150         if (!PL_OpPtr) {
151             return NULL;
152         }
153         /* We reserve the 0'th I32 sized chunk as a use count */
154         PL_OpSlab = (I32 *) PL_OpPtr;
155         /* Reduce size by the use count word, and by the size we need.
156          * Latter is to mimic the '-=' in the if() above
157          */
158         PL_OpSpace = PERL_SLAB_SIZE - (sizeof(I32)+sizeof(I32 **)-1)/sizeof(I32 **) - sz;
159         /* Allocation pointer starts at the top.
160            Theory: because we build leaves before trunk allocating at end
161            means that at run time access is cache friendly upward
162          */
163         PL_OpPtr += PERL_SLAB_SIZE;
164
165 #ifdef PERL_DEBUG_READONLY_OPS
166         /* We remember this slab.  */
167         /* This implementation isn't efficient, but it is simple. */
168         PL_slabs = (I32**) realloc(PL_slabs, sizeof(I32**) * (PL_slab_count + 1));
169         PL_slabs[PL_slab_count++] = PL_OpSlab;
170         DEBUG_m(PerlIO_printf(Perl_debug_log, "Allocate %p\n", PL_OpSlab));
171 #endif
172     }
173     assert( PL_OpSpace >= 0 );
174     /* Move the allocation pointer down */
175     PL_OpPtr   -= sz;
176     assert( PL_OpPtr > (I32 **) PL_OpSlab );
177     *PL_OpPtr   = PL_OpSlab;    /* Note which slab it belongs to */
178     (*PL_OpSlab)++;             /* Increment use count of slab */
179     assert( PL_OpPtr+sz <= ((I32 **) PL_OpSlab + PERL_SLAB_SIZE) );
180     assert( *PL_OpSlab > 0 );
181     return (void *)(PL_OpPtr + 1);
182 }
183
184 #ifdef PERL_DEBUG_READONLY_OPS
185 void
186 Perl_pending_Slabs_to_ro(pTHX) {
187     /* Turn all the allocated op slabs read only.  */
188     U32 count = PL_slab_count;
189     I32 **const slabs = PL_slabs;
190
191     /* Reset the array of pending OP slabs, as we're about to turn this lot
192        read only. Also, do it ahead of the loop in case the warn triggers,
193        and a warn handler has an eval */
194
195     PL_slabs = NULL;
196     PL_slab_count = 0;
197
198     /* Force a new slab for any further allocation.  */
199     PL_OpSpace = 0;
200
201     while (count--) {
202         void *const start = slabs[count];
203         const size_t size = PERL_SLAB_SIZE* sizeof(I32*);
204         if(mprotect(start, size, PROT_READ)) {
205             Perl_warn(aTHX_ "mprotect for %p %lu failed with %d",
206                       start, (unsigned long) size, errno);
207         }
208     }
209
210     free(slabs);
211 }
212
213 STATIC void
214 S_Slab_to_rw(pTHX_ void *op)
215 {
216     I32 * const * const ptr = (I32 **) op;
217     I32 * const slab = ptr[-1];
218
219     PERL_ARGS_ASSERT_SLAB_TO_RW;
220
221     assert( ptr-1 > (I32 **) slab );
222     assert( ptr < ( (I32 **) slab + PERL_SLAB_SIZE) );
223     assert( *slab > 0 );
224     if(mprotect(slab, PERL_SLAB_SIZE*sizeof(I32*), PROT_READ|PROT_WRITE)) {
225         Perl_warn(aTHX_ "mprotect RW for %p %lu failed with %d",
226                   slab, (unsigned long) PERL_SLAB_SIZE*sizeof(I32*), errno);
227     }
228 }
229
230 OP *
231 Perl_op_refcnt_inc(pTHX_ OP *o)
232 {
233     if(o) {
234         Slab_to_rw(o);
235         ++o->op_targ;
236     }
237     return o;
238
239 }
240
241 PADOFFSET
242 Perl_op_refcnt_dec(pTHX_ OP *o)
243 {
244     PERL_ARGS_ASSERT_OP_REFCNT_DEC;
245     Slab_to_rw(o);
246     return --o->op_targ;
247 }
248 #else
249 #  define Slab_to_rw(op)
250 #endif
251
252 void
253 Perl_Slab_Free(pTHX_ void *op)
254 {
255     I32 * const * const ptr = (I32 **) op;
256     I32 * const slab = ptr[-1];
257     PERL_ARGS_ASSERT_SLAB_FREE;
258     assert( ptr-1 > (I32 **) slab );
259     assert( ptr < ( (I32 **) slab + PERL_SLAB_SIZE) );
260     assert( *slab > 0 );
261     Slab_to_rw(op);
262     if (--(*slab) == 0) {
263 #  ifdef NETWARE
264 #    define PerlMemShared PerlMem
265 #  endif
266         
267 #ifdef PERL_DEBUG_READONLY_OPS
268         U32 count = PL_slab_count;
269         /* Need to remove this slab from our list of slabs */
270         if (count) {
271             while (count--) {
272                 if (PL_slabs[count] == slab) {
273                     dVAR;
274                     /* Found it. Move the entry at the end to overwrite it.  */
275                     DEBUG_m(PerlIO_printf(Perl_debug_log,
276                                           "Deallocate %p by moving %p from %lu to %lu\n",
277                                           PL_OpSlab,
278                                           PL_slabs[PL_slab_count - 1],
279                                           PL_slab_count, count));
280                     PL_slabs[count] = PL_slabs[--PL_slab_count];
281                     /* Could realloc smaller at this point, but probably not
282                        worth it.  */
283                     if(munmap(slab, PERL_SLAB_SIZE*sizeof(I32*))) {
284                         perror("munmap failed");
285                         abort();
286                     }
287                     break;
288                 }
289             }
290         }
291 #else
292     PerlMemShared_free(slab);
293 #endif
294         if (slab == PL_OpSlab) {
295             PL_OpSpace = 0;
296         }
297     }
298 }
299 #endif
300 /*
301  * In the following definition, the ", (OP*)0" is just to make the compiler
302  * think the expression is of the right type: croak actually does a Siglongjmp.
303  */
304 #define CHECKOP(type,o) \
305     ((PL_op_mask && PL_op_mask[type])                           \
306      ? ( op_free((OP*)o),                                       \
307          Perl_croak(aTHX_ "'%s' trapped by operation mask", PL_op_desc[type]),  \
308          (OP*)0 )                                               \
309      : PL_check[type](aTHX_ (OP*)o))
310
311 #define RETURN_UNLIMITED_NUMBER (PERL_INT_MAX / 2)
312
313 #define CHANGE_TYPE(o,type) \
314     STMT_START {                                \
315         o->op_type = (OPCODE)type;              \
316         o->op_ppaddr = PL_ppaddr[type];         \
317     } STMT_END
318
319 STATIC const char*
320 S_gv_ename(pTHX_ GV *gv)
321 {
322     SV* const tmpsv = sv_newmortal();
323
324     PERL_ARGS_ASSERT_GV_ENAME;
325
326     gv_efullname3(tmpsv, gv, NULL);
327     return SvPV_nolen_const(tmpsv);
328 }
329
330 STATIC OP *
331 S_no_fh_allowed(pTHX_ OP *o)
332 {
333     PERL_ARGS_ASSERT_NO_FH_ALLOWED;
334
335     yyerror(Perl_form(aTHX_ "Missing comma after first argument to %s function",
336                  OP_DESC(o)));
337     return o;
338 }
339
340 STATIC OP *
341 S_too_few_arguments(pTHX_ OP *o, const char *name)
342 {
343     PERL_ARGS_ASSERT_TOO_FEW_ARGUMENTS;
344
345     yyerror(Perl_form(aTHX_ "Not enough arguments for %s", name));
346     return o;
347 }
348
349 STATIC OP *
350 S_too_many_arguments(pTHX_ OP *o, const char *name)
351 {
352     PERL_ARGS_ASSERT_TOO_MANY_ARGUMENTS;
353
354     yyerror(Perl_form(aTHX_ "Too many arguments for %s", name));
355     return o;
356 }
357
358 STATIC void
359 S_bad_type(pTHX_ I32 n, const char *t, const char *name, const OP *kid)
360 {
361     PERL_ARGS_ASSERT_BAD_TYPE;
362
363     yyerror(Perl_form(aTHX_ "Type of arg %d to %s must be %s (not %s)",
364                  (int)n, name, t, OP_DESC(kid)));
365 }
366
367 STATIC void
368 S_no_bareword_allowed(pTHX_ const OP *o)
369 {
370     PERL_ARGS_ASSERT_NO_BAREWORD_ALLOWED;
371
372     if (PL_madskills)
373         return;         /* various ok barewords are hidden in extra OP_NULL */
374     qerror(Perl_mess(aTHX_
375                      "Bareword \"%"SVf"\" not allowed while \"strict subs\" in use",
376                      SVfARG(cSVOPo_sv)));
377 }
378
379 /* "register" allocation */
380
381 PADOFFSET
382 Perl_allocmy(pTHX_ const char *const name, const STRLEN len, const U32 flags)
383 {
384     dVAR;
385     PADOFFSET off;
386     const bool is_our = (PL_parser->in_my == KEY_our);
387
388     PERL_ARGS_ASSERT_ALLOCMY;
389
390     if (flags)
391         Perl_croak(aTHX_ "panic: allocmy illegal flag bits 0x%" UVxf,
392                    (UV)flags);
393
394     /* Until we're using the length for real, cross check that we're being
395        told the truth.  */
396     assert(strlen(name) == len);
397
398     /* complain about "my $<special_var>" etc etc */
399     if (len &&
400         !(is_our ||
401           isALPHA(name[1]) ||
402           (USE_UTF8_IN_NAMES && UTF8_IS_START(name[1])) ||
403           (name[1] == '_' && (*name == '$' || len > 2))))
404     {
405         /* name[2] is true if strlen(name) > 2  */
406         if (!isPRINT(name[1]) || strchr("\t\n\r\f", name[1])) {
407             yyerror(Perl_form(aTHX_ "Can't use global %c^%c%.*s in \"%s\"",
408                               name[0], toCTRL(name[1]), (int)(len - 2), name + 2,
409                               PL_parser->in_my == KEY_state ? "state" : "my"));
410         } else {
411             yyerror(Perl_form(aTHX_ "Can't use global %.*s in \"%s\"", (int) len, name,
412                               PL_parser->in_my == KEY_state ? "state" : "my"));
413         }
414     }
415
416     /* allocate a spare slot and store the name in that slot */
417
418     off = pad_add_name(name, len,
419                        is_our ? padadd_OUR :
420                        PL_parser->in_my == KEY_state ? padadd_STATE : 0,
421                     PL_parser->in_my_stash,
422                     (is_our
423                         /* $_ is always in main::, even with our */
424                         ? (PL_curstash && !strEQ(name,"$_") ? PL_curstash : PL_defstash)
425                         : NULL
426                     )
427     );
428     /* anon sub prototypes contains state vars should always be cloned,
429      * otherwise the state var would be shared between anon subs */
430
431     if (PL_parser->in_my == KEY_state && CvANON(PL_compcv))
432         CvCLONE_on(PL_compcv);
433
434     return off;
435 }
436
437 /* free the body of an op without examining its contents.
438  * Always use this rather than FreeOp directly */
439
440 static void
441 S_op_destroy(pTHX_ OP *o)
442 {
443     if (o->op_latefree) {
444         o->op_latefreed = 1;
445         return;
446     }
447     FreeOp(o);
448 }
449
450 #ifdef USE_ITHREADS
451 #  define forget_pmop(a,b)      S_forget_pmop(aTHX_ a,b)
452 #else
453 #  define forget_pmop(a,b)      S_forget_pmop(aTHX_ a)
454 #endif
455
456 /* Destructor */
457
458 void
459 Perl_op_free(pTHX_ OP *o)
460 {
461     dVAR;
462     OPCODE type;
463
464     if (!o)
465         return;
466     if (o->op_latefreed) {
467         if (o->op_latefree)
468             return;
469         goto do_free;
470     }
471
472     type = o->op_type;
473     if (o->op_private & OPpREFCOUNTED) {
474         switch (type) {
475         case OP_LEAVESUB:
476         case OP_LEAVESUBLV:
477         case OP_LEAVEEVAL:
478         case OP_LEAVE:
479         case OP_SCOPE:
480         case OP_LEAVEWRITE:
481             {
482             PADOFFSET refcnt;
483             OP_REFCNT_LOCK;
484             refcnt = OpREFCNT_dec(o);
485             OP_REFCNT_UNLOCK;
486             if (refcnt) {
487                 /* Need to find and remove any pattern match ops from the list
488                    we maintain for reset().  */
489                 find_and_forget_pmops(o);
490                 return;
491             }
492             }
493             break;
494         default:
495             break;
496         }
497     }
498
499     /* Call the op_free hook if it has been set. Do it now so that it's called
500      * at the right time for refcounted ops, but still before all of the kids
501      * are freed. */
502     CALL_OPFREEHOOK(o);
503
504     if (o->op_flags & OPf_KIDS) {
505         register OP *kid, *nextkid;
506         for (kid = cUNOPo->op_first; kid; kid = nextkid) {
507             nextkid = kid->op_sibling; /* Get before next freeing kid */
508             op_free(kid);
509         }
510     }
511
512 #ifdef PERL_DEBUG_READONLY_OPS
513     Slab_to_rw(o);
514 #endif
515
516     /* COP* is not cleared by op_clear() so that we may track line
517      * numbers etc even after null() */
518     if (type == OP_NEXTSTATE || type == OP_DBSTATE
519             || (type == OP_NULL /* the COP might have been null'ed */
520                 && ((OPCODE)o->op_targ == OP_NEXTSTATE
521                     || (OPCODE)o->op_targ == OP_DBSTATE))) {
522         cop_free((COP*)o);
523     }
524
525     if (type == OP_NULL)
526         type = (OPCODE)o->op_targ;
527
528     op_clear(o);
529     if (o->op_latefree) {
530         o->op_latefreed = 1;
531         return;
532     }
533   do_free:
534     FreeOp(o);
535 #ifdef DEBUG_LEAKING_SCALARS
536     if (PL_op == o)
537         PL_op = NULL;
538 #endif
539 }
540
541 void
542 Perl_op_clear(pTHX_ OP *o)
543 {
544
545     dVAR;
546
547     PERL_ARGS_ASSERT_OP_CLEAR;
548
549 #ifdef PERL_MAD
550     /* if (o->op_madprop && o->op_madprop->mad_next)
551        abort(); */
552     /* FIXME for MAD - if I uncomment these two lines t/op/pack.t fails with
553        "modification of a read only value" for a reason I can't fathom why.
554        It's the "" stringification of $_, where $_ was set to '' in a foreach
555        loop, but it defies simplification into a small test case.
556        However, commenting them out has caused ext/List/Util/t/weak.t to fail
557        the last test.  */
558     /*
559       mad_free(o->op_madprop);
560       o->op_madprop = 0;
561     */
562 #endif    
563
564  retry:
565     switch (o->op_type) {
566     case OP_NULL:       /* Was holding old type, if any. */
567         if (PL_madskills && o->op_targ != OP_NULL) {
568             o->op_type = (Optype)o->op_targ;
569             o->op_targ = 0;
570             goto retry;
571         }
572     case OP_ENTERTRY:
573     case OP_ENTEREVAL:  /* Was holding hints. */
574         o->op_targ = 0;
575         break;
576     default:
577         if (!(o->op_flags & OPf_REF)
578             || (PL_check[o->op_type] != Perl_ck_ftst))
579             break;
580         /* FALL THROUGH */
581     case OP_GVSV:
582     case OP_GV:
583     case OP_AELEMFAST:
584         if (! (o->op_type == OP_AELEMFAST && o->op_flags & OPf_SPECIAL)) {
585             /* not an OP_PADAV replacement */
586             GV *gv = (o->op_type == OP_GV || o->op_type == OP_GVSV)
587 #ifdef USE_ITHREADS
588                         && PL_curpad
589 #endif
590                         ? cGVOPo_gv : NULL;
591             /* It's possible during global destruction that the GV is freed
592                before the optree. Whilst the SvREFCNT_inc is happy to bump from
593                0 to 1 on a freed SV, the corresponding SvREFCNT_dec from 1 to 0
594                will trigger an assertion failure, because the entry to sv_clear
595                checks that the scalar is not already freed.  A check of for
596                !SvIS_FREED(gv) turns out to be invalid, because during global
597                destruction the reference count can be forced down to zero
598                (with SVf_BREAK set).  In which case raising to 1 and then
599                dropping to 0 triggers cleanup before it should happen.  I
600                *think* that this might actually be a general, systematic,
601                weakness of the whole idea of SVf_BREAK, in that code *is*
602                allowed to raise and lower references during global destruction,
603                so any *valid* code that happens to do this during global
604                destruction might well trigger premature cleanup.  */
605             bool still_valid = gv && SvREFCNT(gv);
606
607             if (still_valid)
608                 SvREFCNT_inc_simple_void(gv);
609 #ifdef USE_ITHREADS
610             if (cPADOPo->op_padix > 0) {
611                 /* No GvIN_PAD_off(cGVOPo_gv) here, because other references
612                  * may still exist on the pad */
613                 pad_swipe(cPADOPo->op_padix, TRUE);
614                 cPADOPo->op_padix = 0;
615             }
616 #else
617             SvREFCNT_dec(cSVOPo->op_sv);
618             cSVOPo->op_sv = NULL;
619 #endif
620             if (still_valid) {
621                 int try_downgrade = SvREFCNT(gv) == 2;
622                 SvREFCNT_dec(gv);
623                 if (try_downgrade)
624                     gv_try_downgrade(gv);
625             }
626         }
627         break;
628     case OP_METHOD_NAMED:
629     case OP_CONST:
630     case OP_HINTSEVAL:
631         SvREFCNT_dec(cSVOPo->op_sv);
632         cSVOPo->op_sv = NULL;
633 #ifdef USE_ITHREADS
634         /** Bug #15654
635           Even if op_clear does a pad_free for the target of the op,
636           pad_free doesn't actually remove the sv that exists in the pad;
637           instead it lives on. This results in that it could be reused as 
638           a target later on when the pad was reallocated.
639         **/
640         if(o->op_targ) {
641           pad_swipe(o->op_targ,1);
642           o->op_targ = 0;
643         }
644 #endif
645         break;
646     case OP_GOTO:
647     case OP_NEXT:
648     case OP_LAST:
649     case OP_REDO:
650         if (o->op_flags & (OPf_SPECIAL|OPf_STACKED|OPf_KIDS))
651             break;
652         /* FALL THROUGH */
653     case OP_TRANS:
654     case OP_TRANSR:
655         if (o->op_private & (OPpTRANS_FROM_UTF|OPpTRANS_TO_UTF)) {
656 #ifdef USE_ITHREADS
657             if (cPADOPo->op_padix > 0) {
658                 pad_swipe(cPADOPo->op_padix, TRUE);
659                 cPADOPo->op_padix = 0;
660             }
661 #else
662             SvREFCNT_dec(cSVOPo->op_sv);
663             cSVOPo->op_sv = NULL;
664 #endif
665         }
666         else {
667             PerlMemShared_free(cPVOPo->op_pv);
668             cPVOPo->op_pv = NULL;
669         }
670         break;
671     case OP_SUBST:
672         op_free(cPMOPo->op_pmreplrootu.op_pmreplroot);
673         goto clear_pmop;
674     case OP_PUSHRE:
675 #ifdef USE_ITHREADS
676         if (cPMOPo->op_pmreplrootu.op_pmtargetoff) {
677             /* No GvIN_PAD_off here, because other references may still
678              * exist on the pad */
679             pad_swipe(cPMOPo->op_pmreplrootu.op_pmtargetoff, TRUE);
680         }
681 #else
682         SvREFCNT_dec(MUTABLE_SV(cPMOPo->op_pmreplrootu.op_pmtargetgv));
683 #endif
684         /* FALL THROUGH */
685     case OP_MATCH:
686     case OP_QR:
687 clear_pmop:
688         forget_pmop(cPMOPo, 1);
689         cPMOPo->op_pmreplrootu.op_pmreplroot = NULL;
690         /* we use the same protection as the "SAFE" version of the PM_ macros
691          * here since sv_clean_all might release some PMOPs
692          * after PL_regex_padav has been cleared
693          * and the clearing of PL_regex_padav needs to
694          * happen before sv_clean_all
695          */
696 #ifdef USE_ITHREADS
697         if(PL_regex_pad) {        /* We could be in destruction */
698             const IV offset = (cPMOPo)->op_pmoffset;
699             ReREFCNT_dec(PM_GETRE(cPMOPo));
700             PL_regex_pad[offset] = &PL_sv_undef;
701             sv_catpvn_nomg(PL_regex_pad[0], (const char *)&offset,
702                            sizeof(offset));
703         }
704 #else
705         ReREFCNT_dec(PM_GETRE(cPMOPo));
706         PM_SETRE(cPMOPo, NULL);
707 #endif
708
709         break;
710     }
711
712     if (o->op_targ > 0) {
713         pad_free(o->op_targ);
714         o->op_targ = 0;
715     }
716 }
717
718 STATIC void
719 S_cop_free(pTHX_ COP* cop)
720 {
721     PERL_ARGS_ASSERT_COP_FREE;
722
723     CopFILE_free(cop);
724     CopSTASH_free(cop);
725     if (! specialWARN(cop->cop_warnings))
726         PerlMemShared_free(cop->cop_warnings);
727     cophh_free(CopHINTHASH_get(cop));
728 }
729
730 STATIC void
731 S_forget_pmop(pTHX_ PMOP *const o
732 #ifdef USE_ITHREADS
733               , U32 flags
734 #endif
735               )
736 {
737     HV * const pmstash = PmopSTASH(o);
738
739     PERL_ARGS_ASSERT_FORGET_PMOP;
740
741     if (pmstash && !SvIS_FREED(pmstash)) {
742         MAGIC * const mg = mg_find((const SV *)pmstash, PERL_MAGIC_symtab);
743         if (mg) {
744             PMOP **const array = (PMOP**) mg->mg_ptr;
745             U32 count = mg->mg_len / sizeof(PMOP**);
746             U32 i = count;
747
748             while (i--) {
749                 if (array[i] == o) {
750                     /* Found it. Move the entry at the end to overwrite it.  */
751                     array[i] = array[--count];
752                     mg->mg_len = count * sizeof(PMOP**);
753                     /* Could realloc smaller at this point always, but probably
754                        not worth it. Probably worth free()ing if we're the
755                        last.  */
756                     if(!count) {
757                         Safefree(mg->mg_ptr);
758                         mg->mg_ptr = NULL;
759                     }
760                     break;
761                 }
762             }
763         }
764     }
765     if (PL_curpm == o) 
766         PL_curpm = NULL;
767 #ifdef USE_ITHREADS
768     if (flags)
769         PmopSTASH_free(o);
770 #endif
771 }
772
773 STATIC void
774 S_find_and_forget_pmops(pTHX_ OP *o)
775 {
776     PERL_ARGS_ASSERT_FIND_AND_FORGET_PMOPS;
777
778     if (o->op_flags & OPf_KIDS) {
779         OP *kid = cUNOPo->op_first;
780         while (kid) {
781             switch (kid->op_type) {
782             case OP_SUBST:
783             case OP_PUSHRE:
784             case OP_MATCH:
785             case OP_QR:
786                 forget_pmop((PMOP*)kid, 0);
787             }
788             find_and_forget_pmops(kid);
789             kid = kid->op_sibling;
790         }
791     }
792 }
793
794 void
795 Perl_op_null(pTHX_ OP *o)
796 {
797     dVAR;
798
799     PERL_ARGS_ASSERT_OP_NULL;
800
801     if (o->op_type == OP_NULL)
802         return;
803     if (!PL_madskills)
804         op_clear(o);
805     o->op_targ = o->op_type;
806     o->op_type = OP_NULL;
807     o->op_ppaddr = PL_ppaddr[OP_NULL];
808 }
809
810 void
811 Perl_op_refcnt_lock(pTHX)
812 {
813     dVAR;
814     PERL_UNUSED_CONTEXT;
815     OP_REFCNT_LOCK;
816 }
817
818 void
819 Perl_op_refcnt_unlock(pTHX)
820 {
821     dVAR;
822     PERL_UNUSED_CONTEXT;
823     OP_REFCNT_UNLOCK;
824 }
825
826 /* Contextualizers */
827
828 /*
829 =for apidoc Am|OP *|op_contextualize|OP *o|I32 context
830
831 Applies a syntactic context to an op tree representing an expression.
832 I<o> is the op tree, and I<context> must be C<G_SCALAR>, C<G_ARRAY>,
833 or C<G_VOID> to specify the context to apply.  The modified op tree
834 is returned.
835
836 =cut
837 */
838
839 OP *
840 Perl_op_contextualize(pTHX_ OP *o, I32 context)
841 {
842     PERL_ARGS_ASSERT_OP_CONTEXTUALIZE;
843     switch (context) {
844         case G_SCALAR: return scalar(o);
845         case G_ARRAY:  return list(o);
846         case G_VOID:   return scalarvoid(o);
847         default:
848             Perl_croak(aTHX_ "panic: op_contextualize bad context");
849             return o;
850     }
851 }
852
853 /*
854 =head1 Optree Manipulation Functions
855
856 =for apidoc Am|OP*|op_linklist|OP *o
857 This function is the implementation of the L</LINKLIST> macro. It should
858 not be called directly.
859
860 =cut
861 */
862
863 OP *
864 Perl_op_linklist(pTHX_ OP *o)
865 {
866     OP *first;
867
868     PERL_ARGS_ASSERT_OP_LINKLIST;
869
870     if (o->op_next)
871         return o->op_next;
872
873     /* establish postfix order */
874     first = cUNOPo->op_first;
875     if (first) {
876         register OP *kid;
877         o->op_next = LINKLIST(first);
878         kid = first;
879         for (;;) {
880             if (kid->op_sibling) {
881                 kid->op_next = LINKLIST(kid->op_sibling);
882                 kid = kid->op_sibling;
883             } else {
884                 kid->op_next = o;
885                 break;
886             }
887         }
888     }
889     else
890         o->op_next = o;
891
892     return o->op_next;
893 }
894
895 static OP *
896 S_scalarkids(pTHX_ OP *o)
897 {
898     if (o && o->op_flags & OPf_KIDS) {
899         OP *kid;
900         for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
901             scalar(kid);
902     }
903     return o;
904 }
905
906 STATIC OP *
907 S_scalarboolean(pTHX_ OP *o)
908 {
909     dVAR;
910
911     PERL_ARGS_ASSERT_SCALARBOOLEAN;
912
913     if (o->op_type == OP_SASSIGN && cBINOPo->op_first->op_type == OP_CONST) {
914         if (ckWARN(WARN_SYNTAX)) {
915             const line_t oldline = CopLINE(PL_curcop);
916
917             if (PL_parser && PL_parser->copline != NOLINE)
918                 CopLINE_set(PL_curcop, PL_parser->copline);
919             Perl_warner(aTHX_ packWARN(WARN_SYNTAX), "Found = in conditional, should be ==");
920             CopLINE_set(PL_curcop, oldline);
921         }
922     }
923     return scalar(o);
924 }
925
926 OP *
927 Perl_scalar(pTHX_ OP *o)
928 {
929     dVAR;
930     OP *kid;
931
932     /* assumes no premature commitment */
933     if (!o || (PL_parser && PL_parser->error_count)
934          || (o->op_flags & OPf_WANT)
935          || o->op_type == OP_RETURN)
936     {
937         return o;
938     }
939
940     o->op_flags = (o->op_flags & ~OPf_WANT) | OPf_WANT_SCALAR;
941
942     switch (o->op_type) {
943     case OP_REPEAT:
944         scalar(cBINOPo->op_first);
945         break;
946     case OP_OR:
947     case OP_AND:
948     case OP_COND_EXPR:
949         for (kid = cUNOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
950             scalar(kid);
951         break;
952         /* FALL THROUGH */
953     case OP_SPLIT:
954     case OP_MATCH:
955     case OP_QR:
956     case OP_SUBST:
957     case OP_NULL:
958     default:
959         if (o->op_flags & OPf_KIDS) {
960             for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling)
961                 scalar(kid);
962         }
963         break;
964     case OP_LEAVE:
965     case OP_LEAVETRY:
966         kid = cLISTOPo->op_first;
967         scalar(kid);
968         kid = kid->op_sibling;
969     do_kids:
970         while (kid) {
971             OP *sib = kid->op_sibling;
972             if (sib && kid->op_type != OP_LEAVEWHEN) {
973                 if (sib->op_type == OP_BREAK && sib->op_flags & OPf_SPECIAL) {
974                     scalar(kid);
975                     scalarvoid(sib);
976                     break;
977                 } else
978                     scalarvoid(kid);
979             } else
980                 scalar(kid);
981             kid = sib;
982         }
983         PL_curcop = &PL_compiling;
984         break;
985     case OP_SCOPE:
986     case OP_LINESEQ:
987     case OP_LIST:
988         kid = cLISTOPo->op_first;
989         goto do_kids;
990     case OP_SORT:
991         Perl_ck_warner(aTHX_ packWARN(WARN_VOID), "Useless use of sort in scalar context");
992         break;
993     }
994     return o;
995 }
996
997 OP *
998 Perl_scalarvoid(pTHX_ OP *o)
999 {
1000     dVAR;
1001     OP *kid;
1002     const char* useless = NULL;
1003     SV* sv;
1004     U8 want;
1005
1006     PERL_ARGS_ASSERT_SCALARVOID;
1007
1008     /* trailing mad null ops don't count as "there" for void processing */
1009     if (PL_madskills &&
1010         o->op_type != OP_NULL &&
1011         o->op_sibling &&
1012         o->op_sibling->op_type == OP_NULL)
1013     {
1014         OP *sib;
1015         for (sib = o->op_sibling;
1016                 sib && sib->op_type == OP_NULL;
1017                 sib = sib->op_sibling) ;
1018         
1019         if (!sib)
1020             return o;
1021     }
1022
1023     if (o->op_type == OP_NEXTSTATE
1024         || o->op_type == OP_DBSTATE
1025         || (o->op_type == OP_NULL && (o->op_targ == OP_NEXTSTATE
1026                                       || o->op_targ == OP_DBSTATE)))
1027         PL_curcop = (COP*)o;            /* for warning below */
1028
1029     /* assumes no premature commitment */
1030     want = o->op_flags & OPf_WANT;
1031     if ((want && want != OPf_WANT_SCALAR)
1032          || (PL_parser && PL_parser->error_count)
1033          || o->op_type == OP_RETURN || o->op_type == OP_REQUIRE || o->op_type == OP_LEAVEWHEN)
1034     {
1035         return o;
1036     }
1037
1038     if ((o->op_private & OPpTARGET_MY)
1039         && (PL_opargs[o->op_type] & OA_TARGLEX))/* OPp share the meaning */
1040     {
1041         return scalar(o);                       /* As if inside SASSIGN */
1042     }
1043
1044     o->op_flags = (o->op_flags & ~OPf_WANT) | OPf_WANT_VOID;
1045
1046     switch (o->op_type) {
1047     default:
1048         if (!(PL_opargs[o->op_type] & OA_FOLDCONST))
1049             break;
1050         /* FALL THROUGH */
1051     case OP_REPEAT:
1052         if (o->op_flags & OPf_STACKED)
1053             break;
1054         goto func_ops;
1055     case OP_SUBSTR:
1056         if (o->op_private == 4)
1057             break;
1058         /* FALL THROUGH */
1059     case OP_GVSV:
1060     case OP_WANTARRAY:
1061     case OP_GV:
1062     case OP_SMARTMATCH:
1063     case OP_PADSV:
1064     case OP_PADAV:
1065     case OP_PADHV:
1066     case OP_PADANY:
1067     case OP_AV2ARYLEN:
1068     case OP_REF:
1069     case OP_REFGEN:
1070     case OP_SREFGEN:
1071     case OP_DEFINED:
1072     case OP_HEX:
1073     case OP_OCT:
1074     case OP_LENGTH:
1075     case OP_VEC:
1076     case OP_INDEX:
1077     case OP_RINDEX:
1078     case OP_SPRINTF:
1079     case OP_AELEM:
1080     case OP_AELEMFAST:
1081     case OP_ASLICE:
1082     case OP_HELEM:
1083     case OP_HSLICE:
1084     case OP_UNPACK:
1085     case OP_PACK:
1086     case OP_JOIN:
1087     case OP_LSLICE:
1088     case OP_ANONLIST:
1089     case OP_ANONHASH:
1090     case OP_SORT:
1091     case OP_REVERSE:
1092     case OP_RANGE:
1093     case OP_FLIP:
1094     case OP_FLOP:
1095     case OP_CALLER:
1096     case OP_FILENO:
1097     case OP_EOF:
1098     case OP_TELL:
1099     case OP_GETSOCKNAME:
1100     case OP_GETPEERNAME:
1101     case OP_READLINK:
1102     case OP_TELLDIR:
1103     case OP_GETPPID:
1104     case OP_GETPGRP:
1105     case OP_GETPRIORITY:
1106     case OP_TIME:
1107     case OP_TMS:
1108     case OP_LOCALTIME:
1109     case OP_GMTIME:
1110     case OP_GHBYNAME:
1111     case OP_GHBYADDR:
1112     case OP_GHOSTENT:
1113     case OP_GNBYNAME:
1114     case OP_GNBYADDR:
1115     case OP_GNETENT:
1116     case OP_GPBYNAME:
1117     case OP_GPBYNUMBER:
1118     case OP_GPROTOENT:
1119     case OP_GSBYNAME:
1120     case OP_GSBYPORT:
1121     case OP_GSERVENT:
1122     case OP_GPWNAM:
1123     case OP_GPWUID:
1124     case OP_GGRNAM:
1125     case OP_GGRGID:
1126     case OP_GETLOGIN:
1127     case OP_PROTOTYPE:
1128       func_ops:
1129         if (!(o->op_private & (OPpLVAL_INTRO|OPpOUR_INTRO)))
1130             /* Otherwise it's "Useless use of grep iterator" */
1131             useless = OP_DESC(o);
1132         break;
1133
1134     case OP_SPLIT:
1135         kid = cLISTOPo->op_first;
1136         if (kid && kid->op_type == OP_PUSHRE
1137 #ifdef USE_ITHREADS
1138                 && !((PMOP*)kid)->op_pmreplrootu.op_pmtargetoff)
1139 #else
1140                 && !((PMOP*)kid)->op_pmreplrootu.op_pmtargetgv)
1141 #endif
1142             useless = OP_DESC(o);
1143         break;
1144
1145     case OP_NOT:
1146        kid = cUNOPo->op_first;
1147        if (kid->op_type != OP_MATCH && kid->op_type != OP_SUBST &&
1148            kid->op_type != OP_TRANS && kid->op_type != OP_TRANSR) {
1149                 goto func_ops;
1150        }
1151        useless = "negative pattern binding (!~)";
1152        break;
1153
1154     case OP_SUBST:
1155         if (cPMOPo->op_pmflags & PMf_NONDESTRUCT)
1156             useless = "non-destructive substitution (s///r)";
1157         break;
1158
1159     case OP_TRANSR:
1160         useless = "non-destructive transliteration (tr///r)";
1161         break;
1162
1163     case OP_RV2GV:
1164     case OP_RV2SV:
1165     case OP_RV2AV:
1166     case OP_RV2HV:
1167         if (!(o->op_private & (OPpLVAL_INTRO|OPpOUR_INTRO)) &&
1168                 (!o->op_sibling || o->op_sibling->op_type != OP_READLINE))
1169             useless = "a variable";
1170         break;
1171
1172     case OP_CONST:
1173         sv = cSVOPo_sv;
1174         if (cSVOPo->op_private & OPpCONST_STRICT)
1175             no_bareword_allowed(o);
1176         else {
1177             if (ckWARN(WARN_VOID)) {
1178                 if (SvOK(sv)) {
1179                     SV* msv = sv_2mortal(Perl_newSVpvf(aTHX_
1180                                 "a constant (%"SVf")", sv));
1181                     useless = SvPV_nolen(msv);
1182                 }
1183                 else
1184                     useless = "a constant (undef)";
1185                 if (o->op_private & OPpCONST_ARYBASE)
1186                     useless = NULL;
1187                 /* don't warn on optimised away booleans, eg 
1188                  * use constant Foo, 5; Foo || print; */
1189                 if (cSVOPo->op_private & OPpCONST_SHORTCIRCUIT)
1190                     useless = NULL;
1191                 /* the constants 0 and 1 are permitted as they are
1192                    conventionally used as dummies in constructs like
1193                         1 while some_condition_with_side_effects;  */
1194                 else if (SvNIOK(sv) && (SvNV(sv) == 0.0 || SvNV(sv) == 1.0))
1195                     useless = NULL;
1196                 else if (SvPOK(sv)) {
1197                   /* perl4's way of mixing documentation and code
1198                      (before the invention of POD) was based on a
1199                      trick to mix nroff and perl code. The trick was
1200                      built upon these three nroff macros being used in
1201                      void context. The pink camel has the details in
1202                      the script wrapman near page 319. */
1203                     const char * const maybe_macro = SvPVX_const(sv);
1204                     if (strnEQ(maybe_macro, "di", 2) ||
1205                         strnEQ(maybe_macro, "ds", 2) ||
1206                         strnEQ(maybe_macro, "ig", 2))
1207                             useless = NULL;
1208                 }
1209             }
1210         }
1211         op_null(o);             /* don't execute or even remember it */
1212         break;
1213
1214     case OP_POSTINC:
1215         o->op_type = OP_PREINC;         /* pre-increment is faster */
1216         o->op_ppaddr = PL_ppaddr[OP_PREINC];
1217         break;
1218
1219     case OP_POSTDEC:
1220         o->op_type = OP_PREDEC;         /* pre-decrement is faster */
1221         o->op_ppaddr = PL_ppaddr[OP_PREDEC];
1222         break;
1223
1224     case OP_I_POSTINC:
1225         o->op_type = OP_I_PREINC;       /* pre-increment is faster */
1226         o->op_ppaddr = PL_ppaddr[OP_I_PREINC];
1227         break;
1228
1229     case OP_I_POSTDEC:
1230         o->op_type = OP_I_PREDEC;       /* pre-decrement is faster */
1231         o->op_ppaddr = PL_ppaddr[OP_I_PREDEC];
1232         break;
1233
1234     case OP_OR:
1235     case OP_AND:
1236         kid = cLOGOPo->op_first;
1237         if (kid->op_type == OP_NOT
1238             && (kid->op_flags & OPf_KIDS)
1239             && !PL_madskills) {
1240             if (o->op_type == OP_AND) {
1241                 o->op_type = OP_OR;
1242                 o->op_ppaddr = PL_ppaddr[OP_OR];
1243             } else {
1244                 o->op_type = OP_AND;
1245                 o->op_ppaddr = PL_ppaddr[OP_AND];
1246             }
1247             op_null(kid);
1248         }
1249
1250     case OP_DOR:
1251     case OP_COND_EXPR:
1252     case OP_ENTERGIVEN:
1253     case OP_ENTERWHEN:
1254         for (kid = cUNOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
1255             scalarvoid(kid);
1256         break;
1257
1258     case OP_NULL:
1259         if (o->op_flags & OPf_STACKED)
1260             break;
1261         /* FALL THROUGH */
1262     case OP_NEXTSTATE:
1263     case OP_DBSTATE:
1264     case OP_ENTERTRY:
1265     case OP_ENTER:
1266         if (!(o->op_flags & OPf_KIDS))
1267             break;
1268         /* FALL THROUGH */
1269     case OP_SCOPE:
1270     case OP_LEAVE:
1271     case OP_LEAVETRY:
1272     case OP_LEAVELOOP:
1273     case OP_LINESEQ:
1274     case OP_LIST:
1275     case OP_LEAVEGIVEN:
1276     case OP_LEAVEWHEN:
1277         for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
1278             scalarvoid(kid);
1279         break;
1280     case OP_ENTEREVAL:
1281         scalarkids(o);
1282         break;
1283     case OP_SCALAR:
1284         return scalar(o);
1285     }
1286     if (useless)
1287         Perl_ck_warner(aTHX_ packWARN(WARN_VOID), "Useless use of %s in void context", useless);
1288     return o;
1289 }
1290
1291 static OP *
1292 S_listkids(pTHX_ OP *o)
1293 {
1294     if (o && o->op_flags & OPf_KIDS) {
1295         OP *kid;
1296         for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
1297             list(kid);
1298     }
1299     return o;
1300 }
1301
1302 OP *
1303 Perl_list(pTHX_ OP *o)
1304 {
1305     dVAR;
1306     OP *kid;
1307
1308     /* assumes no premature commitment */
1309     if (!o || (o->op_flags & OPf_WANT)
1310          || (PL_parser && PL_parser->error_count)
1311          || o->op_type == OP_RETURN)
1312     {
1313         return o;
1314     }
1315
1316     if ((o->op_private & OPpTARGET_MY)
1317         && (PL_opargs[o->op_type] & OA_TARGLEX))/* OPp share the meaning */
1318     {
1319         return o;                               /* As if inside SASSIGN */
1320     }
1321
1322     o->op_flags = (o->op_flags & ~OPf_WANT) | OPf_WANT_LIST;
1323
1324     switch (o->op_type) {
1325     case OP_FLOP:
1326     case OP_REPEAT:
1327         list(cBINOPo->op_first);
1328         break;
1329     case OP_OR:
1330     case OP_AND:
1331     case OP_COND_EXPR:
1332         for (kid = cUNOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
1333             list(kid);
1334         break;
1335     default:
1336     case OP_MATCH:
1337     case OP_QR:
1338     case OP_SUBST:
1339     case OP_NULL:
1340         if (!(o->op_flags & OPf_KIDS))
1341             break;
1342         if (!o->op_next && cUNOPo->op_first->op_type == OP_FLOP) {
1343             list(cBINOPo->op_first);
1344             return gen_constant_list(o);
1345         }
1346     case OP_LIST:
1347         listkids(o);
1348         break;
1349     case OP_LEAVE:
1350     case OP_LEAVETRY:
1351         kid = cLISTOPo->op_first;
1352         list(kid);
1353         kid = kid->op_sibling;
1354     do_kids:
1355         while (kid) {
1356             OP *sib = kid->op_sibling;
1357             if (sib && kid->op_type != OP_LEAVEWHEN) {
1358                 if (sib->op_type == OP_BREAK && sib->op_flags & OPf_SPECIAL) {
1359                     list(kid);
1360                     scalarvoid(sib);
1361                     break;
1362                 } else
1363                     scalarvoid(kid);
1364             } else
1365                 list(kid);
1366             kid = sib;
1367         }
1368         PL_curcop = &PL_compiling;
1369         break;
1370     case OP_SCOPE:
1371     case OP_LINESEQ:
1372         kid = cLISTOPo->op_first;
1373         goto do_kids;
1374     }
1375     return o;
1376 }
1377
1378 static OP *
1379 S_scalarseq(pTHX_ OP *o)
1380 {
1381     dVAR;
1382     if (o) {
1383         const OPCODE type = o->op_type;
1384
1385         if (type == OP_LINESEQ || type == OP_SCOPE ||
1386             type == OP_LEAVE || type == OP_LEAVETRY)
1387         {
1388             OP *kid;
1389             for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling) {
1390                 if (kid->op_sibling) {
1391                     scalarvoid(kid);
1392                 }
1393             }
1394             PL_curcop = &PL_compiling;
1395         }
1396         o->op_flags &= ~OPf_PARENS;
1397         if (PL_hints & HINT_BLOCK_SCOPE)
1398             o->op_flags |= OPf_PARENS;
1399     }
1400     else
1401         o = newOP(OP_STUB, 0);
1402     return o;
1403 }
1404
1405 STATIC OP *
1406 S_modkids(pTHX_ OP *o, I32 type)
1407 {
1408     if (o && o->op_flags & OPf_KIDS) {
1409         OP *kid;
1410         for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
1411             op_lvalue(kid, type);
1412     }
1413     return o;
1414 }
1415
1416 /*
1417 =for apidoc Amx|OP *|op_lvalue|OP *o|I32 type
1418
1419 Propagate lvalue ("modifiable") context to an op and its children.
1420 I<type> represents the context type, roughly based on the type of op that
1421 would do the modifying, although C<local()> is represented by OP_NULL,
1422 because it has no op type of its own (it is signalled by a flag on
1423 the lvalue op).  This function detects things that can't be modified,
1424 such as C<$x+1>, and generates errors for them.  It also flags things
1425 that need to behave specially in an lvalue context, such as C<$$x>
1426 which might have to vivify a reference in C<$x>.
1427
1428 =cut
1429 */
1430
1431 OP *
1432 Perl_op_lvalue(pTHX_ OP *o, I32 type)
1433 {
1434     dVAR;
1435     OP *kid;
1436     /* -1 = error on localize, 0 = ignore localize, 1 = ok to localize */
1437     int localize = -1;
1438
1439     if (!o || (PL_parser && PL_parser->error_count))
1440         return o;
1441
1442     if ((o->op_private & OPpTARGET_MY)
1443         && (PL_opargs[o->op_type] & OA_TARGLEX))/* OPp share the meaning */
1444     {
1445         return o;
1446     }
1447
1448     switch (o->op_type) {
1449     case OP_UNDEF:
1450         localize = 0;
1451         PL_modcount++;
1452         return o;
1453     case OP_CONST:
1454         if (!(o->op_private & OPpCONST_ARYBASE))
1455             goto nomod;
1456         localize = 0;
1457         if (PL_eval_start && PL_eval_start->op_type == OP_CONST) {
1458             CopARYBASE_set(&PL_compiling,
1459                            (I32)SvIV(cSVOPx(PL_eval_start)->op_sv));
1460             PL_eval_start = 0;
1461         }
1462         else if (!type) {
1463             SAVECOPARYBASE(&PL_compiling);
1464             CopARYBASE_set(&PL_compiling, 0);
1465         }
1466         else if (type == OP_REFGEN)
1467             goto nomod;
1468         else
1469             Perl_croak(aTHX_ "That use of $[ is unsupported");
1470         break;
1471     case OP_STUB:
1472         if ((o->op_flags & OPf_PARENS) || PL_madskills)
1473             break;
1474         goto nomod;
1475     case OP_ENTERSUB:
1476         if ((type == OP_UNDEF || type == OP_REFGEN) &&
1477             !(o->op_flags & OPf_STACKED)) {
1478             o->op_type = OP_RV2CV;              /* entersub => rv2cv */
1479             /* The default is to set op_private to the number of children,
1480                which for a UNOP such as RV2CV is always 1. And w're using
1481                the bit for a flag in RV2CV, so we need it clear.  */
1482             o->op_private &= ~1;
1483             o->op_ppaddr = PL_ppaddr[OP_RV2CV];
1484             assert(cUNOPo->op_first->op_type == OP_NULL);
1485             op_null(((LISTOP*)cUNOPo->op_first)->op_first);/* disable pushmark */
1486             break;
1487         }
1488         else if (o->op_private & OPpENTERSUB_NOMOD)
1489             return o;
1490         else {                          /* lvalue subroutine call */
1491             o->op_private |= OPpLVAL_INTRO;
1492             PL_modcount = RETURN_UNLIMITED_NUMBER;
1493             if (type == OP_GREPSTART || type == OP_ENTERSUB || type == OP_REFGEN) {
1494                 /* Backward compatibility mode: */
1495                 o->op_private |= OPpENTERSUB_INARGS;
1496                 break;
1497             }
1498             else {                      /* Compile-time error message: */
1499                 OP *kid = cUNOPo->op_first;
1500                 CV *cv;
1501                 OP *okid;
1502
1503                 if (kid->op_type != OP_PUSHMARK) {
1504                     if (kid->op_type != OP_NULL || kid->op_targ != OP_LIST)
1505                         Perl_croak(aTHX_
1506                                 "panic: unexpected lvalue entersub "
1507                                 "args: type/targ %ld:%"UVuf,
1508                                 (long)kid->op_type, (UV)kid->op_targ);
1509                     kid = kLISTOP->op_first;
1510                 }
1511                 while (kid->op_sibling)
1512                     kid = kid->op_sibling;
1513                 if (!(kid->op_type == OP_NULL && kid->op_targ == OP_RV2CV)) {
1514                     /* Indirect call */
1515                     if (kid->op_type == OP_METHOD_NAMED
1516                         || kid->op_type == OP_METHOD)
1517                     {
1518                         UNOP *newop;
1519
1520                         NewOp(1101, newop, 1, UNOP);
1521                         newop->op_type = OP_RV2CV;
1522                         newop->op_ppaddr = PL_ppaddr[OP_RV2CV];
1523                         newop->op_first = NULL;
1524                         newop->op_next = (OP*)newop;
1525                         kid->op_sibling = (OP*)newop;
1526                         newop->op_private |= OPpLVAL_INTRO;
1527                         newop->op_private &= ~1;
1528                         break;
1529                     }
1530
1531                     if (kid->op_type != OP_RV2CV)
1532                         Perl_croak(aTHX_
1533                                    "panic: unexpected lvalue entersub "
1534                                    "entry via type/targ %ld:%"UVuf,
1535                                    (long)kid->op_type, (UV)kid->op_targ);
1536                     kid->op_private |= OPpLVAL_INTRO;
1537                     break;      /* Postpone until runtime */
1538                 }
1539
1540                 okid = kid;
1541                 kid = kUNOP->op_first;
1542                 if (kid->op_type == OP_NULL && kid->op_targ == OP_RV2SV)
1543                     kid = kUNOP->op_first;
1544                 if (kid->op_type == OP_NULL)
1545                     Perl_croak(aTHX_
1546                                "Unexpected constant lvalue entersub "
1547                                "entry via type/targ %ld:%"UVuf,
1548                                (long)kid->op_type, (UV)kid->op_targ);
1549                 if (kid->op_type != OP_GV) {
1550                     /* Restore RV2CV to check lvalueness */
1551                   restore_2cv:
1552                     if (kid->op_next && kid->op_next != kid) { /* Happens? */
1553                         okid->op_next = kid->op_next;
1554                         kid->op_next = okid;
1555                     }
1556                     else
1557                         okid->op_next = NULL;
1558                     okid->op_type = OP_RV2CV;
1559                     okid->op_targ = 0;
1560                     okid->op_ppaddr = PL_ppaddr[OP_RV2CV];
1561                     okid->op_private |= OPpLVAL_INTRO;
1562                     okid->op_private &= ~1;
1563                     break;
1564                 }
1565
1566                 cv = GvCV(kGVOP_gv);
1567                 if (!cv)
1568                     goto restore_2cv;
1569                 if (CvLVALUE(cv))
1570                     break;
1571             }
1572         }
1573         /* FALL THROUGH */
1574     default:
1575       nomod:
1576         /* grep, foreach, subcalls, refgen */
1577         if (type == OP_GREPSTART || type == OP_ENTERSUB || type == OP_REFGEN)
1578             break;
1579         yyerror(Perl_form(aTHX_ "Can't modify %s in %s",
1580                      (o->op_type == OP_NULL && (o->op_flags & OPf_SPECIAL)
1581                       ? "do block"
1582                       : (o->op_type == OP_ENTERSUB
1583                         ? "non-lvalue subroutine call"
1584                         : OP_DESC(o))),
1585                      type ? PL_op_desc[type] : "local"));
1586         return o;
1587
1588     case OP_PREINC:
1589     case OP_PREDEC:
1590     case OP_POW:
1591     case OP_MULTIPLY:
1592     case OP_DIVIDE:
1593     case OP_MODULO:
1594     case OP_REPEAT:
1595     case OP_ADD:
1596     case OP_SUBTRACT:
1597     case OP_CONCAT:
1598     case OP_LEFT_SHIFT:
1599     case OP_RIGHT_SHIFT:
1600     case OP_BIT_AND:
1601     case OP_BIT_XOR:
1602     case OP_BIT_OR:
1603     case OP_I_MULTIPLY:
1604     case OP_I_DIVIDE:
1605     case OP_I_MODULO:
1606     case OP_I_ADD:
1607     case OP_I_SUBTRACT:
1608         if (!(o->op_flags & OPf_STACKED))
1609             goto nomod;
1610         PL_modcount++;
1611         break;
1612
1613     case OP_COND_EXPR:
1614         localize = 1;
1615         for (kid = cUNOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
1616             op_lvalue(kid, type);
1617         break;
1618
1619     case OP_RV2AV:
1620     case OP_RV2HV:
1621         if (type == OP_REFGEN && o->op_flags & OPf_PARENS) {
1622            PL_modcount = RETURN_UNLIMITED_NUMBER;
1623             return o;           /* Treat \(@foo) like ordinary list. */
1624         }
1625         /* FALL THROUGH */
1626     case OP_RV2GV:
1627         if (scalar_mod_type(o, type))
1628             goto nomod;
1629         ref(cUNOPo->op_first, o->op_type);
1630         /* FALL THROUGH */
1631     case OP_ASLICE:
1632     case OP_HSLICE:
1633         if (type == OP_LEAVESUBLV)
1634             o->op_private |= OPpMAYBE_LVSUB;
1635         localize = 1;
1636         /* FALL THROUGH */
1637     case OP_AASSIGN:
1638     case OP_NEXTSTATE:
1639     case OP_DBSTATE:
1640        PL_modcount = RETURN_UNLIMITED_NUMBER;
1641         break;
1642     case OP_AV2ARYLEN:
1643         PL_hints |= HINT_BLOCK_SCOPE;
1644         if (type == OP_LEAVESUBLV)
1645             o->op_private |= OPpMAYBE_LVSUB;
1646         PL_modcount++;
1647         break;
1648     case OP_RV2SV:
1649         ref(cUNOPo->op_first, o->op_type);
1650         localize = 1;
1651         /* FALL THROUGH */
1652     case OP_GV:
1653         PL_hints |= HINT_BLOCK_SCOPE;
1654     case OP_SASSIGN:
1655     case OP_ANDASSIGN:
1656     case OP_ORASSIGN:
1657     case OP_DORASSIGN:
1658         PL_modcount++;
1659         break;
1660
1661     case OP_AELEMFAST:
1662         localize = -1;
1663         PL_modcount++;
1664         break;
1665
1666     case OP_PADAV:
1667     case OP_PADHV:
1668        PL_modcount = RETURN_UNLIMITED_NUMBER;
1669         if (type == OP_REFGEN && o->op_flags & OPf_PARENS)
1670             return o;           /* Treat \(@foo) like ordinary list. */
1671         if (scalar_mod_type(o, type))
1672             goto nomod;
1673         if (type == OP_LEAVESUBLV)
1674             o->op_private |= OPpMAYBE_LVSUB;
1675         /* FALL THROUGH */
1676     case OP_PADSV:
1677         PL_modcount++;
1678         if (!type) /* local() */
1679             Perl_croak(aTHX_ "Can't localize lexical variable %s",
1680                  PAD_COMPNAME_PV(o->op_targ));
1681         break;
1682
1683     case OP_PUSHMARK:
1684         localize = 0;
1685         break;
1686
1687     case OP_KEYS:
1688         if (type != OP_SASSIGN)
1689             goto nomod;
1690         goto lvalue_func;
1691     case OP_SUBSTR:
1692         if (o->op_private == 4) /* don't allow 4 arg substr as lvalue */
1693             goto nomod;
1694         /* FALL THROUGH */
1695     case OP_POS:
1696     case OP_VEC:
1697         if (type == OP_LEAVESUBLV)
1698             o->op_private |= OPpMAYBE_LVSUB;
1699       lvalue_func:
1700         pad_free(o->op_targ);
1701         o->op_targ = pad_alloc(o->op_type, SVs_PADMY);
1702         assert(SvTYPE(PAD_SV(o->op_targ)) == SVt_NULL);
1703         if (o->op_flags & OPf_KIDS)
1704             op_lvalue(cBINOPo->op_first->op_sibling, type);
1705         break;
1706
1707     case OP_AELEM:
1708     case OP_HELEM:
1709         ref(cBINOPo->op_first, o->op_type);
1710         if (type == OP_ENTERSUB &&
1711              !(o->op_private & (OPpLVAL_INTRO | OPpDEREF)))
1712             o->op_private |= OPpLVAL_DEFER;
1713         if (type == OP_LEAVESUBLV)
1714             o->op_private |= OPpMAYBE_LVSUB;
1715         localize = 1;
1716         PL_modcount++;
1717         break;
1718
1719     case OP_SCOPE:
1720     case OP_LEAVE:
1721     case OP_ENTER:
1722     case OP_LINESEQ:
1723         localize = 0;
1724         if (o->op_flags & OPf_KIDS)
1725             op_lvalue(cLISTOPo->op_last, type);
1726         break;
1727
1728     case OP_NULL:
1729         localize = 0;
1730         if (o->op_flags & OPf_SPECIAL)          /* do BLOCK */
1731             goto nomod;
1732         else if (!(o->op_flags & OPf_KIDS))
1733             break;
1734         if (o->op_targ != OP_LIST) {
1735             op_lvalue(cBINOPo->op_first, type);
1736             break;
1737         }
1738         /* FALL THROUGH */
1739     case OP_LIST:
1740         localize = 0;
1741         for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
1742             op_lvalue(kid, type);
1743         break;
1744
1745     case OP_RETURN:
1746         if (type != OP_LEAVESUBLV)
1747             goto nomod;
1748         break; /* op_lvalue()ing was handled by ck_return() */
1749     }
1750
1751     /* [20011101.069] File test operators interpret OPf_REF to mean that
1752        their argument is a filehandle; thus \stat(".") should not set
1753        it. AMS 20011102 */
1754     if (type == OP_REFGEN &&
1755         PL_check[o->op_type] == Perl_ck_ftst)
1756         return o;
1757
1758     if (type != OP_LEAVESUBLV)
1759         o->op_flags |= OPf_MOD;
1760
1761     if (type == OP_AASSIGN || type == OP_SASSIGN)
1762         o->op_flags |= OPf_SPECIAL|OPf_REF;
1763     else if (!type) { /* local() */
1764         switch (localize) {
1765         case 1:
1766             o->op_private |= OPpLVAL_INTRO;
1767             o->op_flags &= ~OPf_SPECIAL;
1768             PL_hints |= HINT_BLOCK_SCOPE;
1769             break;
1770         case 0:
1771             break;
1772         case -1:
1773             Perl_ck_warner(aTHX_ packWARN(WARN_SYNTAX),
1774                            "Useless localization of %s", OP_DESC(o));
1775         }
1776     }
1777     else if (type != OP_GREPSTART && type != OP_ENTERSUB
1778              && type != OP_LEAVESUBLV)
1779         o->op_flags |= OPf_REF;
1780     return o;
1781 }
1782
1783 STATIC bool
1784 S_scalar_mod_type(const OP *o, I32 type)
1785 {
1786     PERL_ARGS_ASSERT_SCALAR_MOD_TYPE;
1787
1788     switch (type) {
1789     case OP_SASSIGN:
1790         if (o->op_type == OP_RV2GV)
1791             return FALSE;
1792         /* FALL THROUGH */
1793     case OP_PREINC:
1794     case OP_PREDEC:
1795     case OP_POSTINC:
1796     case OP_POSTDEC:
1797     case OP_I_PREINC:
1798     case OP_I_PREDEC:
1799     case OP_I_POSTINC:
1800     case OP_I_POSTDEC:
1801     case OP_POW:
1802     case OP_MULTIPLY:
1803     case OP_DIVIDE:
1804     case OP_MODULO:
1805     case OP_REPEAT:
1806     case OP_ADD:
1807     case OP_SUBTRACT:
1808     case OP_I_MULTIPLY:
1809     case OP_I_DIVIDE:
1810     case OP_I_MODULO:
1811     case OP_I_ADD:
1812     case OP_I_SUBTRACT:
1813     case OP_LEFT_SHIFT:
1814     case OP_RIGHT_SHIFT:
1815     case OP_BIT_AND:
1816     case OP_BIT_XOR:
1817     case OP_BIT_OR:
1818     case OP_CONCAT:
1819     case OP_SUBST:
1820     case OP_TRANS:
1821     case OP_TRANSR:
1822     case OP_READ:
1823     case OP_SYSREAD:
1824     case OP_RECV:
1825     case OP_ANDASSIGN:
1826     case OP_ORASSIGN:
1827     case OP_DORASSIGN:
1828         return TRUE;
1829     default:
1830         return FALSE;
1831     }
1832 }
1833
1834 STATIC bool
1835 S_is_handle_constructor(const OP *o, I32 numargs)
1836 {
1837     PERL_ARGS_ASSERT_IS_HANDLE_CONSTRUCTOR;
1838
1839     switch (o->op_type) {
1840     case OP_PIPE_OP:
1841     case OP_SOCKPAIR:
1842         if (numargs == 2)
1843             return TRUE;
1844         /* FALL THROUGH */
1845     case OP_SYSOPEN:
1846     case OP_OPEN:
1847     case OP_SELECT:             /* XXX c.f. SelectSaver.pm */
1848     case OP_SOCKET:
1849     case OP_OPEN_DIR:
1850     case OP_ACCEPT:
1851         if (numargs == 1)
1852             return TRUE;
1853         /* FALLTHROUGH */
1854     default:
1855         return FALSE;
1856     }
1857 }
1858
1859 static OP *
1860 S_refkids(pTHX_ OP *o, I32 type)
1861 {
1862     if (o && o->op_flags & OPf_KIDS) {
1863         OP *kid;
1864         for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
1865             ref(kid, type);
1866     }
1867     return o;
1868 }
1869
1870 OP *
1871 Perl_doref(pTHX_ OP *o, I32 type, bool set_op_ref)
1872 {
1873     dVAR;
1874     OP *kid;
1875
1876     PERL_ARGS_ASSERT_DOREF;
1877
1878     if (!o || (PL_parser && PL_parser->error_count))
1879         return o;
1880
1881     switch (o->op_type) {
1882     case OP_ENTERSUB:
1883         if ((type == OP_EXISTS || type == OP_DEFINED || type == OP_LOCK) &&
1884             !(o->op_flags & OPf_STACKED)) {
1885             o->op_type = OP_RV2CV;             /* entersub => rv2cv */
1886             o->op_ppaddr = PL_ppaddr[OP_RV2CV];
1887             assert(cUNOPo->op_first->op_type == OP_NULL);
1888             op_null(((LISTOP*)cUNOPo->op_first)->op_first);     /* disable pushmark */
1889             o->op_flags |= OPf_SPECIAL;
1890             o->op_private &= ~1;
1891         }
1892         break;
1893
1894     case OP_COND_EXPR:
1895         for (kid = cUNOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
1896             doref(kid, type, set_op_ref);
1897         break;
1898     case OP_RV2SV:
1899         if (type == OP_DEFINED)
1900             o->op_flags |= OPf_SPECIAL;         /* don't create GV */
1901         doref(cUNOPo->op_first, o->op_type, set_op_ref);
1902         /* FALL THROUGH */
1903     case OP_PADSV:
1904         if (type == OP_RV2SV || type == OP_RV2AV || type == OP_RV2HV) {
1905             o->op_private |= (type == OP_RV2AV ? OPpDEREF_AV
1906                               : type == OP_RV2HV ? OPpDEREF_HV
1907                               : OPpDEREF_SV);
1908             o->op_flags |= OPf_MOD;
1909         }
1910         break;
1911
1912     case OP_RV2AV:
1913     case OP_RV2HV:
1914         if (set_op_ref)
1915             o->op_flags |= OPf_REF;
1916         /* FALL THROUGH */
1917     case OP_RV2GV:
1918         if (type == OP_DEFINED)
1919             o->op_flags |= OPf_SPECIAL;         /* don't create GV */
1920         doref(cUNOPo->op_first, o->op_type, set_op_ref);
1921         break;
1922
1923     case OP_PADAV:
1924     case OP_PADHV:
1925         if (set_op_ref)
1926             o->op_flags |= OPf_REF;
1927         break;
1928
1929     case OP_SCALAR:
1930     case OP_NULL:
1931         if (!(o->op_flags & OPf_KIDS))
1932             break;
1933         doref(cBINOPo->op_first, type, set_op_ref);
1934         break;
1935     case OP_AELEM:
1936     case OP_HELEM:
1937         doref(cBINOPo->op_first, o->op_type, set_op_ref);
1938         if (type == OP_RV2SV || type == OP_RV2AV || type == OP_RV2HV) {
1939             o->op_private |= (type == OP_RV2AV ? OPpDEREF_AV
1940                               : type == OP_RV2HV ? OPpDEREF_HV
1941                               : OPpDEREF_SV);
1942             o->op_flags |= OPf_MOD;
1943         }
1944         break;
1945
1946     case OP_SCOPE:
1947     case OP_LEAVE:
1948         set_op_ref = FALSE;
1949         /* FALL THROUGH */
1950     case OP_ENTER:
1951     case OP_LIST:
1952         if (!(o->op_flags & OPf_KIDS))
1953             break;
1954         doref(cLISTOPo->op_last, type, set_op_ref);
1955         break;
1956     default:
1957         break;
1958     }
1959     return scalar(o);
1960
1961 }
1962
1963 STATIC OP *
1964 S_dup_attrlist(pTHX_ OP *o)
1965 {
1966     dVAR;
1967     OP *rop;
1968
1969     PERL_ARGS_ASSERT_DUP_ATTRLIST;
1970
1971     /* An attrlist is either a simple OP_CONST or an OP_LIST with kids,
1972      * where the first kid is OP_PUSHMARK and the remaining ones
1973      * are OP_CONST.  We need to push the OP_CONST values.
1974      */
1975     if (o->op_type == OP_CONST)
1976         rop = newSVOP(OP_CONST, o->op_flags, SvREFCNT_inc_NN(cSVOPo->op_sv));
1977 #ifdef PERL_MAD
1978     else if (o->op_type == OP_NULL)
1979         rop = NULL;
1980 #endif
1981     else {
1982         assert((o->op_type == OP_LIST) && (o->op_flags & OPf_KIDS));
1983         rop = NULL;
1984         for (o = cLISTOPo->op_first; o; o=o->op_sibling) {
1985             if (o->op_type == OP_CONST)
1986                 rop = op_append_elem(OP_LIST, rop,
1987                                   newSVOP(OP_CONST, o->op_flags,
1988                                           SvREFCNT_inc_NN(cSVOPo->op_sv)));
1989         }
1990     }
1991     return rop;
1992 }
1993
1994 STATIC void
1995 S_apply_attrs(pTHX_ HV *stash, SV *target, OP *attrs, bool for_my)
1996 {
1997     dVAR;
1998     SV *stashsv;
1999
2000     PERL_ARGS_ASSERT_APPLY_ATTRS;
2001
2002     /* fake up C<use attributes $pkg,$rv,@attrs> */
2003     ENTER;              /* need to protect against side-effects of 'use' */
2004     stashsv = stash ? newSVhek(HvNAME_HEK(stash)) : &PL_sv_no;
2005
2006 #define ATTRSMODULE "attributes"
2007 #define ATTRSMODULE_PM "attributes.pm"
2008
2009     if (for_my) {
2010         /* Don't force the C<use> if we don't need it. */
2011         SV * const * const svp = hv_fetchs(GvHVn(PL_incgv), ATTRSMODULE_PM, FALSE);
2012         if (svp && *svp != &PL_sv_undef)
2013             NOOP;       /* already in %INC */
2014         else
2015             Perl_load_module(aTHX_ PERL_LOADMOD_NOIMPORT,
2016                              newSVpvs(ATTRSMODULE), NULL);
2017     }
2018     else {
2019         Perl_load_module(aTHX_ PERL_LOADMOD_IMPORT_OPS,
2020                          newSVpvs(ATTRSMODULE),
2021                          NULL,
2022                          op_prepend_elem(OP_LIST,
2023                                       newSVOP(OP_CONST, 0, stashsv),
2024                                       op_prepend_elem(OP_LIST,
2025                                                    newSVOP(OP_CONST, 0,
2026                                                            newRV(target)),
2027                                                    dup_attrlist(attrs))));
2028     }
2029     LEAVE;
2030 }
2031
2032 STATIC void
2033 S_apply_attrs_my(pTHX_ HV *stash, OP *target, OP *attrs, OP **imopsp)
2034 {
2035     dVAR;
2036     OP *pack, *imop, *arg;
2037     SV *meth, *stashsv;
2038
2039     PERL_ARGS_ASSERT_APPLY_ATTRS_MY;
2040
2041     if (!attrs)
2042         return;
2043
2044     assert(target->op_type == OP_PADSV ||
2045            target->op_type == OP_PADHV ||
2046            target->op_type == OP_PADAV);
2047
2048     /* Ensure that attributes.pm is loaded. */
2049     apply_attrs(stash, PAD_SV(target->op_targ), attrs, TRUE);
2050
2051     /* Need package name for method call. */
2052     pack = newSVOP(OP_CONST, 0, newSVpvs(ATTRSMODULE));
2053
2054     /* Build up the real arg-list. */
2055     stashsv = stash ? newSVhek(HvNAME_HEK(stash)) : &PL_sv_no;
2056
2057     arg = newOP(OP_PADSV, 0);
2058     arg->op_targ = target->op_targ;
2059     arg = op_prepend_elem(OP_LIST,
2060                        newSVOP(OP_CONST, 0, stashsv),
2061                        op_prepend_elem(OP_LIST,
2062                                     newUNOP(OP_REFGEN, 0,
2063                                             op_lvalue(arg, OP_REFGEN)),
2064                                     dup_attrlist(attrs)));
2065
2066     /* Fake up a method call to import */
2067     meth = newSVpvs_share("import");
2068     imop = convert(OP_ENTERSUB, OPf_STACKED|OPf_SPECIAL|OPf_WANT_VOID,
2069                    op_append_elem(OP_LIST,
2070                                op_prepend_elem(OP_LIST, pack, list(arg)),
2071                                newSVOP(OP_METHOD_NAMED, 0, meth)));
2072     imop->op_private |= OPpENTERSUB_NOMOD;
2073
2074     /* Combine the ops. */
2075     *imopsp = op_append_elem(OP_LIST, *imopsp, imop);
2076 }
2077
2078 /*
2079 =notfor apidoc apply_attrs_string
2080
2081 Attempts to apply a list of attributes specified by the C<attrstr> and
2082 C<len> arguments to the subroutine identified by the C<cv> argument which
2083 is expected to be associated with the package identified by the C<stashpv>
2084 argument (see L<attributes>).  It gets this wrong, though, in that it
2085 does not correctly identify the boundaries of the individual attribute
2086 specifications within C<attrstr>.  This is not really intended for the
2087 public API, but has to be listed here for systems such as AIX which
2088 need an explicit export list for symbols.  (It's called from XS code
2089 in support of the C<ATTRS:> keyword from F<xsubpp>.)  Patches to fix it
2090 to respect attribute syntax properly would be welcome.
2091
2092 =cut
2093 */
2094
2095 void
2096 Perl_apply_attrs_string(pTHX_ const char *stashpv, CV *cv,
2097                         const char *attrstr, STRLEN len)
2098 {
2099     OP *attrs = NULL;
2100
2101     PERL_ARGS_ASSERT_APPLY_ATTRS_STRING;
2102
2103     if (!len) {
2104         len = strlen(attrstr);
2105     }
2106
2107     while (len) {
2108         for (; isSPACE(*attrstr) && len; --len, ++attrstr) ;
2109         if (len) {
2110             const char * const sstr = attrstr;
2111             for (; !isSPACE(*attrstr) && len; --len, ++attrstr) ;
2112             attrs = op_append_elem(OP_LIST, attrs,
2113                                 newSVOP(OP_CONST, 0,
2114                                         newSVpvn(sstr, attrstr-sstr)));
2115         }
2116     }
2117
2118     Perl_load_module(aTHX_ PERL_LOADMOD_IMPORT_OPS,
2119                      newSVpvs(ATTRSMODULE),
2120                      NULL, op_prepend_elem(OP_LIST,
2121                                   newSVOP(OP_CONST, 0, newSVpv(stashpv,0)),
2122                                   op_prepend_elem(OP_LIST,
2123                                                newSVOP(OP_CONST, 0,
2124                                                        newRV(MUTABLE_SV(cv))),
2125                                                attrs)));
2126 }
2127
2128 STATIC OP *
2129 S_my_kid(pTHX_ OP *o, OP *attrs, OP **imopsp)
2130 {
2131     dVAR;
2132     I32 type;
2133
2134     PERL_ARGS_ASSERT_MY_KID;
2135
2136     if (!o || (PL_parser && PL_parser->error_count))
2137         return o;
2138
2139     type = o->op_type;
2140     if (PL_madskills && type == OP_NULL && o->op_flags & OPf_KIDS) {
2141         (void)my_kid(cUNOPo->op_first, attrs, imopsp);
2142         return o;
2143     }
2144
2145     if (type == OP_LIST) {
2146         OP *kid;
2147         for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
2148             my_kid(kid, attrs, imopsp);
2149     } else if (type == OP_UNDEF
2150 #ifdef PERL_MAD
2151                || type == OP_STUB
2152 #endif
2153                ) {
2154         return o;
2155     } else if (type == OP_RV2SV ||      /* "our" declaration */
2156                type == OP_RV2AV ||
2157                type == OP_RV2HV) { /* XXX does this let anything illegal in? */
2158         if (cUNOPo->op_first->op_type != OP_GV) { /* MJD 20011224 */
2159             yyerror(Perl_form(aTHX_ "Can't declare %s in \"%s\"",
2160                         OP_DESC(o),
2161                         PL_parser->in_my == KEY_our
2162                             ? "our"
2163                             : PL_parser->in_my == KEY_state ? "state" : "my"));
2164         } else if (attrs) {
2165             GV * const gv = cGVOPx_gv(cUNOPo->op_first);
2166             PL_parser->in_my = FALSE;
2167             PL_parser->in_my_stash = NULL;
2168             apply_attrs(GvSTASH(gv),
2169                         (type == OP_RV2SV ? GvSV(gv) :
2170                          type == OP_RV2AV ? MUTABLE_SV(GvAV(gv)) :
2171                          type == OP_RV2HV ? MUTABLE_SV(GvHV(gv)) : MUTABLE_SV(gv)),
2172                         attrs, FALSE);
2173         }
2174         o->op_private |= OPpOUR_INTRO;
2175         return o;
2176     }
2177     else if (type != OP_PADSV &&
2178              type != OP_PADAV &&
2179              type != OP_PADHV &&
2180              type != OP_PUSHMARK)
2181     {
2182         yyerror(Perl_form(aTHX_ "Can't declare %s in \"%s\"",
2183                           OP_DESC(o),
2184                           PL_parser->in_my == KEY_our
2185                             ? "our"
2186                             : PL_parser->in_my == KEY_state ? "state" : "my"));
2187         return o;
2188     }
2189     else if (attrs && type != OP_PUSHMARK) {
2190         HV *stash;
2191
2192         PL_parser->in_my = FALSE;
2193         PL_parser->in_my_stash = NULL;
2194
2195         /* check for C<my Dog $spot> when deciding package */
2196         stash = PAD_COMPNAME_TYPE(o->op_targ);
2197         if (!stash)
2198             stash = PL_curstash;
2199         apply_attrs_my(stash, o, attrs, imopsp);
2200     }
2201     o->op_flags |= OPf_MOD;
2202     o->op_private |= OPpLVAL_INTRO;
2203     if (PL_parser->in_my == KEY_state)
2204         o->op_private |= OPpPAD_STATE;
2205     return o;
2206 }
2207
2208 OP *
2209 Perl_my_attrs(pTHX_ OP *o, OP *attrs)
2210 {
2211     dVAR;
2212     OP *rops;
2213     int maybe_scalar = 0;
2214
2215     PERL_ARGS_ASSERT_MY_ATTRS;
2216
2217 /* [perl #17376]: this appears to be premature, and results in code such as
2218    C< our(%x); > executing in list mode rather than void mode */
2219 #if 0
2220     if (o->op_flags & OPf_PARENS)
2221         list(o);
2222     else
2223         maybe_scalar = 1;
2224 #else
2225     maybe_scalar = 1;
2226 #endif
2227     if (attrs)
2228         SAVEFREEOP(attrs);
2229     rops = NULL;
2230     o = my_kid(o, attrs, &rops);
2231     if (rops) {
2232         if (maybe_scalar && o->op_type == OP_PADSV) {
2233             o = scalar(op_append_list(OP_LIST, rops, o));
2234             o->op_private |= OPpLVAL_INTRO;
2235         }
2236         else
2237             o = op_append_list(OP_LIST, o, rops);
2238     }
2239     PL_parser->in_my = FALSE;
2240     PL_parser->in_my_stash = NULL;
2241     return o;
2242 }
2243
2244 OP *
2245 Perl_sawparens(pTHX_ OP *o)
2246 {
2247     PERL_UNUSED_CONTEXT;
2248     if (o)
2249         o->op_flags |= OPf_PARENS;
2250     return o;
2251 }
2252
2253 OP *
2254 Perl_bind_match(pTHX_ I32 type, OP *left, OP *right)
2255 {
2256     OP *o;
2257     bool ismatchop = 0;
2258     const OPCODE ltype = left->op_type;
2259     const OPCODE rtype = right->op_type;
2260
2261     PERL_ARGS_ASSERT_BIND_MATCH;
2262
2263     if ( (ltype == OP_RV2AV || ltype == OP_RV2HV || ltype == OP_PADAV
2264           || ltype == OP_PADHV) && ckWARN(WARN_MISC))
2265     {
2266       const char * const desc
2267           = PL_op_desc[(
2268                           rtype == OP_SUBST || rtype == OP_TRANS
2269                        || rtype == OP_TRANSR
2270                        )
2271                        ? (int)rtype : OP_MATCH];
2272       const char * const sample = ((ltype == OP_RV2AV || ltype == OP_PADAV)
2273              ? "@array" : "%hash");
2274       Perl_warner(aTHX_ packWARN(WARN_MISC),
2275              "Applying %s to %s will act on scalar(%s)",
2276              desc, sample, sample);
2277     }
2278
2279     if (rtype == OP_CONST &&
2280         cSVOPx(right)->op_private & OPpCONST_BARE &&
2281         cSVOPx(right)->op_private & OPpCONST_STRICT)
2282     {
2283         no_bareword_allowed(right);
2284     }
2285
2286     /* !~ doesn't make sense with /r, so error on it for now */
2287     if (rtype == OP_SUBST && (cPMOPx(right)->op_pmflags & PMf_NONDESTRUCT) &&
2288         type == OP_NOT)
2289         yyerror("Using !~ with s///r doesn't make sense");
2290     if (rtype == OP_TRANSR && type == OP_NOT)
2291         yyerror("Using !~ with tr///r doesn't make sense");
2292
2293     ismatchop = (rtype == OP_MATCH ||
2294                  rtype == OP_SUBST ||
2295                  rtype == OP_TRANS || rtype == OP_TRANSR)
2296              && !(right->op_flags & OPf_SPECIAL);
2297     if (ismatchop && right->op_private & OPpTARGET_MY) {
2298         right->op_targ = 0;
2299         right->op_private &= ~OPpTARGET_MY;
2300     }
2301     if (!(right->op_flags & OPf_STACKED) && ismatchop) {
2302         OP *newleft;
2303
2304         right->op_flags |= OPf_STACKED;
2305         if (rtype != OP_MATCH && rtype != OP_TRANSR &&
2306             ! (rtype == OP_TRANS &&
2307                right->op_private & OPpTRANS_IDENTICAL) &&
2308             ! (rtype == OP_SUBST &&
2309                (cPMOPx(right)->op_pmflags & PMf_NONDESTRUCT)))
2310             newleft = op_lvalue(left, rtype);
2311         else
2312             newleft = left;
2313         if (right->op_type == OP_TRANS || right->op_type == OP_TRANSR)
2314             o = newBINOP(OP_NULL, OPf_STACKED, scalar(newleft), right);
2315         else
2316             o = op_prepend_elem(rtype, scalar(newleft), right);
2317         if (type == OP_NOT)
2318             return newUNOP(OP_NOT, 0, scalar(o));
2319         return o;
2320     }
2321     else
2322         return bind_match(type, left,
2323                 pmruntime(newPMOP(OP_MATCH, 0), right, 0));
2324 }
2325
2326 OP *
2327 Perl_invert(pTHX_ OP *o)
2328 {
2329     if (!o)
2330         return NULL;
2331     return newUNOP(OP_NOT, OPf_SPECIAL, scalar(o));
2332 }
2333
2334 /*
2335 =for apidoc Amx|OP *|op_scope|OP *o
2336
2337 Wraps up an op tree with some additional ops so that at runtime a dynamic
2338 scope will be created.  The original ops run in the new dynamic scope,
2339 and then, provided that they exit normally, the scope will be unwound.
2340 The additional ops used to create and unwind the dynamic scope will
2341 normally be an C<enter>/C<leave> pair, but a C<scope> op may be used
2342 instead if the ops are simple enough to not need the full dynamic scope
2343 structure.
2344
2345 =cut
2346 */
2347
2348 OP *
2349 Perl_op_scope(pTHX_ OP *o)
2350 {
2351     dVAR;
2352     if (o) {
2353         if (o->op_flags & OPf_PARENS || PERLDB_NOOPT || PL_tainting) {
2354             o = op_prepend_elem(OP_LINESEQ, newOP(OP_ENTER, 0), o);
2355             o->op_type = OP_LEAVE;
2356             o->op_ppaddr = PL_ppaddr[OP_LEAVE];
2357         }
2358         else if (o->op_type == OP_LINESEQ) {
2359             OP *kid;
2360             o->op_type = OP_SCOPE;
2361             o->op_ppaddr = PL_ppaddr[OP_SCOPE];
2362             kid = ((LISTOP*)o)->op_first;
2363             if (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) {
2364                 op_null(kid);
2365
2366                 /* The following deals with things like 'do {1 for 1}' */
2367                 kid = kid->op_sibling;
2368                 if (kid &&
2369                     (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE))
2370                     op_null(kid);
2371             }
2372         }
2373         else
2374             o = newLISTOP(OP_SCOPE, 0, o, NULL);
2375     }
2376     return o;
2377 }
2378
2379 int
2380 Perl_block_start(pTHX_ int full)
2381 {
2382     dVAR;
2383     const int retval = PL_savestack_ix;
2384
2385     pad_block_start(full);
2386     SAVEHINTS();
2387     PL_hints &= ~HINT_BLOCK_SCOPE;
2388     SAVECOMPILEWARNINGS();
2389     PL_compiling.cop_warnings = DUP_WARNINGS(PL_compiling.cop_warnings);
2390
2391     CALL_BLOCK_HOOKS(bhk_start, full);
2392
2393     return retval;
2394 }
2395
2396 OP*
2397 Perl_block_end(pTHX_ I32 floor, OP *seq)
2398 {
2399     dVAR;
2400     const int needblockscope = PL_hints & HINT_BLOCK_SCOPE;
2401     OP* retval = scalarseq(seq);
2402
2403     CALL_BLOCK_HOOKS(bhk_pre_end, &retval);
2404
2405     LEAVE_SCOPE(floor);
2406     CopHINTS_set(&PL_compiling, PL_hints);
2407     if (needblockscope)
2408         PL_hints |= HINT_BLOCK_SCOPE; /* propagate out */
2409     pad_leavemy();
2410
2411     CALL_BLOCK_HOOKS(bhk_post_end, &retval);
2412
2413     return retval;
2414 }
2415
2416 /*
2417 =head1 Compile-time scope hooks
2418
2419 =for apidoc Ao||blockhook_register
2420
2421 Register a set of hooks to be called when the Perl lexical scope changes
2422 at compile time. See L<perlguts/"Compile-time scope hooks">.
2423
2424 =cut
2425 */
2426
2427 void
2428 Perl_blockhook_register(pTHX_ BHK *hk)
2429 {
2430     PERL_ARGS_ASSERT_BLOCKHOOK_REGISTER;
2431
2432     Perl_av_create_and_push(aTHX_ &PL_blockhooks, newSViv(PTR2IV(hk)));
2433 }
2434
2435 STATIC OP *
2436 S_newDEFSVOP(pTHX)
2437 {
2438     dVAR;
2439     const PADOFFSET offset = Perl_pad_findmy(aTHX_ STR_WITH_LEN("$_"), 0);
2440     if (offset == NOT_IN_PAD || PAD_COMPNAME_FLAGS_isOUR(offset)) {
2441         return newSVREF(newGVOP(OP_GV, 0, PL_defgv));
2442     }
2443     else {
2444         OP * const o = newOP(OP_PADSV, 0);
2445         o->op_targ = offset;
2446         return o;
2447     }
2448 }
2449
2450 void
2451 Perl_newPROG(pTHX_ OP *o)
2452 {
2453     dVAR;
2454
2455     PERL_ARGS_ASSERT_NEWPROG;
2456
2457     if (PL_in_eval) {
2458         if (PL_eval_root)
2459                 return;
2460         PL_eval_root = newUNOP(OP_LEAVEEVAL,
2461                                ((PL_in_eval & EVAL_KEEPERR)
2462                                 ? OPf_SPECIAL : 0), o);
2463         /* don't use LINKLIST, since PL_eval_root might indirect through
2464          * a rather expensive function call and LINKLIST evaluates its
2465          * argument more than once */
2466         PL_eval_start = op_linklist(PL_eval_root);
2467         PL_eval_root->op_private |= OPpREFCOUNTED;
2468         OpREFCNT_set(PL_eval_root, 1);
2469         PL_eval_root->op_next = 0;
2470         CALL_PEEP(PL_eval_start);
2471     }
2472     else {
2473         if (o->op_type == OP_STUB) {
2474             PL_comppad_name = 0;
2475             PL_compcv = 0;
2476             S_op_destroy(aTHX_ o);
2477             return;
2478         }
2479         PL_main_root = op_scope(sawparens(scalarvoid(o)));
2480         PL_curcop = &PL_compiling;
2481         PL_main_start = LINKLIST(PL_main_root);
2482         PL_main_root->op_private |= OPpREFCOUNTED;
2483         OpREFCNT_set(PL_main_root, 1);
2484         PL_main_root->op_next = 0;
2485         CALL_PEEP(PL_main_start);
2486         PL_compcv = 0;
2487
2488         /* Register with debugger */
2489         if (PERLDB_INTER) {
2490             CV * const cv = get_cvs("DB::postponed", 0);
2491             if (cv) {
2492                 dSP;
2493                 PUSHMARK(SP);
2494                 XPUSHs(MUTABLE_SV(CopFILEGV(&PL_compiling)));
2495                 PUTBACK;
2496                 call_sv(MUTABLE_SV(cv), G_DISCARD);
2497             }
2498         }
2499     }
2500 }
2501
2502 OP *
2503 Perl_localize(pTHX_ OP *o, I32 lex)
2504 {
2505     dVAR;
2506
2507     PERL_ARGS_ASSERT_LOCALIZE;
2508
2509     if (o->op_flags & OPf_PARENS)
2510 /* [perl #17376]: this appears to be premature, and results in code such as
2511    C< our(%x); > executing in list mode rather than void mode */
2512 #if 0
2513         list(o);
2514 #else
2515         NOOP;
2516 #endif
2517     else {
2518         if ( PL_parser->bufptr > PL_parser->oldbufptr
2519             && PL_parser->bufptr[-1] == ','
2520             && ckWARN(WARN_PARENTHESIS))
2521         {
2522             char *s = PL_parser->bufptr;
2523             bool sigil = FALSE;
2524
2525             /* some heuristics to detect a potential error */
2526             while (*s && (strchr(", \t\n", *s)))
2527                 s++;
2528
2529             while (1) {
2530                 if (*s && strchr("@$%*", *s) && *++s
2531                        && (isALNUM(*s) || UTF8_IS_CONTINUED(*s))) {
2532                     s++;
2533                     sigil = TRUE;
2534                     while (*s && (isALNUM(*s) || UTF8_IS_CONTINUED(*s)))
2535                         s++;
2536                     while (*s && (strchr(", \t\n", *s)))
2537                         s++;
2538                 }
2539                 else
2540                     break;
2541             }
2542             if (sigil && (*s == ';' || *s == '=')) {
2543                 Perl_warner(aTHX_ packWARN(WARN_PARENTHESIS),
2544                                 "Parentheses missing around \"%s\" list",
2545                                 lex
2546                                     ? (PL_parser->in_my == KEY_our
2547                                         ? "our"
2548                                         : PL_parser->in_my == KEY_state
2549                                             ? "state"
2550                                             : "my")
2551                                     : "local");
2552             }
2553         }
2554     }
2555     if (lex)
2556         o = my(o);
2557     else
2558         o = op_lvalue(o, OP_NULL);              /* a bit kludgey */
2559     PL_parser->in_my = FALSE;
2560     PL_parser->in_my_stash = NULL;
2561     return o;
2562 }
2563
2564 OP *
2565 Perl_jmaybe(pTHX_ OP *o)
2566 {
2567     PERL_ARGS_ASSERT_JMAYBE;
2568
2569     if (o->op_type == OP_LIST) {
2570         OP * const o2
2571             = newSVREF(newGVOP(OP_GV, 0, gv_fetchpvs(";", GV_ADD|GV_NOTQUAL, SVt_PV)));
2572         o = convert(OP_JOIN, 0, op_prepend_elem(OP_LIST, o2, o));
2573     }
2574     return o;
2575 }
2576
2577 static OP *
2578 S_fold_constants(pTHX_ register OP *o)
2579 {
2580     dVAR;
2581     register OP * VOL curop;
2582     OP *newop;
2583     VOL I32 type = o->op_type;
2584     SV * VOL sv = NULL;
2585     int ret = 0;
2586     I32 oldscope;
2587     OP *old_next;
2588     SV * const oldwarnhook = PL_warnhook;
2589     SV * const olddiehook  = PL_diehook;
2590     COP not_compiling;
2591     dJMPENV;
2592
2593     PERL_ARGS_ASSERT_FOLD_CONSTANTS;
2594
2595     if (PL_opargs[type] & OA_RETSCALAR)
2596         scalar(o);
2597     if (PL_opargs[type] & OA_TARGET && !o->op_targ)
2598         o->op_targ = pad_alloc(type, SVs_PADTMP);
2599
2600     /* integerize op, unless it happens to be C<-foo>.
2601      * XXX should pp_i_negate() do magic string negation instead? */
2602     if ((PL_opargs[type] & OA_OTHERINT) && (PL_hints & HINT_INTEGER)
2603         && !(type == OP_NEGATE && cUNOPo->op_first->op_type == OP_CONST
2604              && (cUNOPo->op_first->op_private & OPpCONST_BARE)))
2605     {
2606         o->op_ppaddr = PL_ppaddr[type = ++(o->op_type)];
2607     }
2608
2609     if (!(PL_opargs[type] & OA_FOLDCONST))
2610         goto nope;
2611
2612     switch (type) {
2613     case OP_NEGATE:
2614         /* XXX might want a ck_negate() for this */
2615         cUNOPo->op_first->op_private &= ~OPpCONST_STRICT;
2616         break;
2617     case OP_UCFIRST:
2618     case OP_LCFIRST:
2619     case OP_UC:
2620     case OP_LC:
2621     case OP_SLT:
2622     case OP_SGT:
2623     case OP_SLE:
2624     case OP_SGE:
2625     case OP_SCMP:
2626     case OP_SPRINTF:
2627         /* XXX what about the numeric ops? */
2628         if (PL_hints & HINT_LOCALE)
2629             goto nope;
2630         break;
2631     }
2632
2633     if (PL_parser && PL_parser->error_count)
2634         goto nope;              /* Don't try to run w/ errors */
2635
2636     for (curop = LINKLIST(o); curop != o; curop = LINKLIST(curop)) {
2637         const OPCODE type = curop->op_type;
2638         if ((type != OP_CONST || (curop->op_private & OPpCONST_BARE)) &&
2639             type != OP_LIST &&
2640             type != OP_SCALAR &&
2641             type != OP_NULL &&
2642             type != OP_PUSHMARK)
2643         {
2644             goto nope;
2645         }
2646     }
2647
2648     curop = LINKLIST(o);
2649     old_next = o->op_next;
2650     o->op_next = 0;
2651     PL_op = curop;
2652
2653     oldscope = PL_scopestack_ix;
2654     create_eval_scope(G_FAKINGEVAL);
2655
2656     /* Verify that we don't need to save it:  */
2657     assert(PL_curcop == &PL_compiling);
2658     StructCopy(&PL_compiling, &not_compiling, COP);
2659     PL_curcop = &not_compiling;
2660     /* The above ensures that we run with all the correct hints of the
2661        currently compiling COP, but that IN_PERL_RUNTIME is not true. */
2662     assert(IN_PERL_RUNTIME);
2663     PL_warnhook = PERL_WARNHOOK_FATAL;
2664     PL_diehook  = NULL;
2665     JMPENV_PUSH(ret);
2666
2667     switch (ret) {
2668     case 0:
2669         CALLRUNOPS(aTHX);
2670         sv = *(PL_stack_sp--);
2671         if (o->op_targ && sv == PAD_SV(o->op_targ))     /* grab pad temp? */
2672             pad_swipe(o->op_targ,  FALSE);
2673         else if (SvTEMP(sv)) {                  /* grab mortal temp? */
2674             SvREFCNT_inc_simple_void(sv);
2675             SvTEMP_off(sv);
2676         }
2677         break;
2678     case 3:
2679         /* Something tried to die.  Abandon constant folding.  */
2680         /* Pretend the error never happened.  */
2681         CLEAR_ERRSV();
2682         o->op_next = old_next;
2683         break;
2684     default:
2685         JMPENV_POP;
2686         /* Don't expect 1 (setjmp failed) or 2 (something called my_exit)  */
2687         PL_warnhook = oldwarnhook;
2688         PL_diehook  = olddiehook;
2689         /* XXX note that this croak may fail as we've already blown away
2690          * the stack - eg any nested evals */
2691         Perl_croak(aTHX_ "panic: fold_constants JMPENV_PUSH returned %d", ret);
2692     }
2693     JMPENV_POP;
2694     PL_warnhook = oldwarnhook;
2695     PL_diehook  = olddiehook;
2696     PL_curcop = &PL_compiling;
2697
2698     if (PL_scopestack_ix > oldscope)
2699         delete_eval_scope();
2700
2701     if (ret)
2702         goto nope;
2703
2704 #ifndef PERL_MAD
2705     op_free(o);
2706 #endif
2707     assert(sv);
2708     if (type == OP_RV2GV)
2709         newop = newGVOP(OP_GV, 0, MUTABLE_GV(sv));
2710     else
2711         newop = newSVOP(OP_CONST, 0, MUTABLE_SV(sv));
2712     op_getmad(o,newop,'f');
2713     return newop;
2714
2715  nope:
2716     return o;
2717 }
2718
2719 static OP *
2720 S_gen_constant_list(pTHX_ register OP *o)
2721 {
2722     dVAR;
2723     register OP *curop;
2724     const I32 oldtmps_floor = PL_tmps_floor;
2725
2726     list(o);
2727     if (PL_parser && PL_parser->error_count)
2728         return o;               /* Don't attempt to run with errors */
2729
2730     PL_op = curop = LINKLIST(o);
2731     o->op_next = 0;
2732     CALL_PEEP(curop);
2733     pp_pushmark();
2734     CALLRUNOPS(aTHX);
2735     PL_op = curop;
2736     assert (!(curop->op_flags & OPf_SPECIAL));
2737     assert(curop->op_type == OP_RANGE);
2738     pp_anonlist();
2739     PL_tmps_floor = oldtmps_floor;
2740
2741     o->op_type = OP_RV2AV;
2742     o->op_ppaddr = PL_ppaddr[OP_RV2AV];
2743     o->op_flags &= ~OPf_REF;    /* treat \(1..2) like an ordinary list */
2744     o->op_flags |= OPf_PARENS;  /* and flatten \(1..2,3) */
2745     o->op_opt = 0;              /* needs to be revisited in rpeep() */
2746     curop = ((UNOP*)o)->op_first;
2747     ((UNOP*)o)->op_first = newSVOP(OP_CONST, 0, SvREFCNT_inc_NN(*PL_stack_sp--));
2748 #ifdef PERL_MAD
2749     op_getmad(curop,o,'O');
2750 #else
2751     op_free(curop);
2752 #endif
2753     LINKLIST(o);
2754     return list(o);
2755 }
2756
2757 OP *
2758 Perl_convert(pTHX_ I32 type, I32 flags, OP *o)
2759 {
2760     dVAR;
2761     if (!o || o->op_type != OP_LIST)
2762         o = newLISTOP(OP_LIST, 0, o, NULL);
2763     else
2764         o->op_flags &= ~OPf_WANT;
2765
2766     if (!(PL_opargs[type] & OA_MARK))
2767         op_null(cLISTOPo->op_first);
2768
2769     o->op_type = (OPCODE)type;
2770     o->op_ppaddr = PL_ppaddr[type];
2771     o->op_flags |= flags;
2772
2773     o = CHECKOP(type, o);
2774     if (o->op_type != (unsigned)type)
2775         return o;
2776
2777     return fold_constants(o);
2778 }
2779
2780 /*
2781 =head1 Optree Manipulation Functions
2782 */
2783
2784 /* List constructors */
2785
2786 /*
2787 =for apidoc Am|OP *|op_append_elem|I32 optype|OP *first|OP *last
2788
2789 Append an item to the list of ops contained directly within a list-type
2790 op, returning the lengthened list.  I<first> is the list-type op,
2791 and I<last> is the op to append to the list.  I<optype> specifies the
2792 intended opcode for the list.  If I<first> is not already a list of the
2793 right type, it will be upgraded into one.  If either I<first> or I<last>
2794 is null, the other is returned unchanged.
2795
2796 =cut
2797 */
2798
2799 OP *
2800 Perl_op_append_elem(pTHX_ I32 type, OP *first, OP *last)
2801 {
2802     if (!first)
2803         return last;
2804
2805     if (!last)
2806         return first;
2807
2808     if (first->op_type != (unsigned)type
2809         || (type == OP_LIST && (first->op_flags & OPf_PARENS)))
2810     {
2811         return newLISTOP(type, 0, first, last);
2812     }
2813
2814     if (first->op_flags & OPf_KIDS)
2815         ((LISTOP*)first)->op_last->op_sibling = last;
2816     else {
2817         first->op_flags |= OPf_KIDS;
2818         ((LISTOP*)first)->op_first = last;
2819     }
2820     ((LISTOP*)first)->op_last = last;
2821     return first;
2822 }
2823
2824 /*
2825 =for apidoc Am|OP *|op_append_list|I32 optype|OP *first|OP *last
2826
2827 Concatenate the lists of ops contained directly within two list-type ops,
2828 returning the combined list.  I<first> and I<last> are the list-type ops
2829 to concatenate.  I<optype> specifies the intended opcode for the list.
2830 If either I<first> or I<last> is not already a list of the right type,
2831 it will be upgraded into one.  If either I<first> or I<last> is null,
2832 the other is returned unchanged.
2833
2834 =cut
2835 */
2836
2837 OP *
2838 Perl_op_append_list(pTHX_ I32 type, OP *first, OP *last)
2839 {
2840     if (!first)
2841         return last;
2842
2843     if (!last)
2844         return first;
2845
2846     if (first->op_type != (unsigned)type)
2847         return op_prepend_elem(type, first, last);
2848
2849     if (last->op_type != (unsigned)type)
2850         return op_append_elem(type, first, last);
2851
2852     ((LISTOP*)first)->op_last->op_sibling = ((LISTOP*)last)->op_first;
2853     ((LISTOP*)first)->op_last = ((LISTOP*)last)->op_last;
2854     first->op_flags |= (last->op_flags & OPf_KIDS);
2855
2856 #ifdef PERL_MAD
2857     if (((LISTOP*)last)->op_first && first->op_madprop) {
2858         MADPROP *mp = ((LISTOP*)last)->op_first->op_madprop;
2859         if (mp) {
2860             while (mp->mad_next)
2861                 mp = mp->mad_next;
2862             mp->mad_next = first->op_madprop;
2863         }
2864         else {
2865             ((LISTOP*)last)->op_first->op_madprop = first->op_madprop;
2866         }
2867     }
2868     first->op_madprop = last->op_madprop;
2869     last->op_madprop = 0;
2870 #endif
2871
2872     S_op_destroy(aTHX_ last);
2873
2874     return first;
2875 }
2876
2877 /*
2878 =for apidoc Am|OP *|op_prepend_elem|I32 optype|OP *first|OP *last
2879
2880 Prepend an item to the list of ops contained directly within a list-type
2881 op, returning the lengthened list.  I<first> is the op to prepend to the
2882 list, and I<last> is the list-type op.  I<optype> specifies the intended
2883 opcode for the list.  If I<last> is not already a list of the right type,
2884 it will be upgraded into one.  If either I<first> or I<last> is null,
2885 the other is returned unchanged.
2886
2887 =cut
2888 */
2889
2890 OP *
2891 Perl_op_prepend_elem(pTHX_ I32 type, OP *first, OP *last)
2892 {
2893     if (!first)
2894         return last;
2895
2896     if (!last)
2897         return first;
2898
2899     if (last->op_type == (unsigned)type) {
2900         if (type == OP_LIST) {  /* already a PUSHMARK there */
2901             first->op_sibling = ((LISTOP*)last)->op_first->op_sibling;
2902             ((LISTOP*)last)->op_first->op_sibling = first;
2903             if (!(first->op_flags & OPf_PARENS))
2904                 last->op_flags &= ~OPf_PARENS;
2905         }
2906         else {
2907             if (!(last->op_flags & OPf_KIDS)) {
2908                 ((LISTOP*)last)->op_last = first;
2909                 last->op_flags |= OPf_KIDS;
2910             }
2911             first->op_sibling = ((LISTOP*)last)->op_first;
2912             ((LISTOP*)last)->op_first = first;
2913         }
2914         last->op_flags |= OPf_KIDS;
2915         return last;
2916     }
2917
2918     return newLISTOP(type, 0, first, last);
2919 }
2920
2921 /* Constructors */
2922
2923 #ifdef PERL_MAD
2924  
2925 TOKEN *
2926 Perl_newTOKEN(pTHX_ I32 optype, YYSTYPE lval, MADPROP* madprop)
2927 {
2928     TOKEN *tk;
2929     Newxz(tk, 1, TOKEN);
2930     tk->tk_type = (OPCODE)optype;
2931     tk->tk_type = 12345;
2932     tk->tk_lval = lval;
2933     tk->tk_mad = madprop;
2934     return tk;
2935 }
2936
2937 void
2938 Perl_token_free(pTHX_ TOKEN* tk)
2939 {
2940     PERL_ARGS_ASSERT_TOKEN_FREE;
2941
2942     if (tk->tk_type != 12345)
2943         return;
2944     mad_free(tk->tk_mad);
2945     Safefree(tk);
2946 }
2947
2948 void
2949 Perl_token_getmad(pTHX_ TOKEN* tk, OP* o, char slot)
2950 {
2951     MADPROP* mp;
2952     MADPROP* tm;
2953
2954     PERL_ARGS_ASSERT_TOKEN_GETMAD;
2955
2956     if (tk->tk_type != 12345) {
2957         Perl_warner(aTHX_ packWARN(WARN_MISC),
2958              "Invalid TOKEN object ignored");
2959         return;
2960     }
2961     tm = tk->tk_mad;
2962     if (!tm)
2963         return;
2964
2965     /* faked up qw list? */
2966     if (slot == '(' &&
2967         tm->mad_type == MAD_SV &&
2968         SvPVX((SV *)tm->mad_val)[0] == 'q')
2969             slot = 'x';
2970
2971     if (o) {
2972         mp = o->op_madprop;
2973         if (mp) {
2974             for (;;) {
2975                 /* pretend constant fold didn't happen? */
2976                 if (mp->mad_key == 'f' &&
2977                     (o->op_type == OP_CONST ||
2978                      o->op_type == OP_GV) )
2979                 {
2980                     token_getmad(tk,(OP*)mp->mad_val,slot);
2981                     return;
2982                 }
2983                 if (!mp->mad_next)
2984                     break;
2985                 mp = mp->mad_next;
2986             }
2987             mp->mad_next = tm;
2988             mp = mp->mad_next;
2989         }
2990         else {
2991             o->op_madprop = tm;
2992             mp = o->op_madprop;
2993         }
2994         if (mp->mad_key == 'X')
2995             mp->mad_key = slot; /* just change the first one */
2996
2997         tk->tk_mad = 0;
2998     }
2999     else
3000         mad_free(tm);
3001     Safefree(tk);
3002 }
3003
3004 void
3005 Perl_op_getmad_weak(pTHX_ OP* from, OP* o, char slot)
3006 {
3007     MADPROP* mp;
3008     if (!from)
3009         return;
3010     if (o) {
3011         mp = o->op_madprop;
3012         if (mp) {
3013             for (;;) {
3014                 /* pretend constant fold didn't happen? */
3015                 if (mp->mad_key == 'f' &&
3016                     (o->op_type == OP_CONST ||
3017                      o->op_type == OP_GV) )
3018                 {
3019                     op_getmad(from,(OP*)mp->mad_val,slot);
3020                     return;
3021                 }
3022                 if (!mp->mad_next)
3023                     break;
3024                 mp = mp->mad_next;
3025             }
3026             mp->mad_next = newMADPROP(slot,MAD_OP,from,0);
3027         }
3028         else {
3029             o->op_madprop = newMADPROP(slot,MAD_OP,from,0);
3030         }
3031     }
3032 }
3033
3034 void
3035 Perl_op_getmad(pTHX_ OP* from, OP* o, char slot)
3036 {
3037     MADPROP* mp;
3038     if (!from)
3039         return;
3040     if (o) {
3041         mp = o->op_madprop;
3042         if (mp) {
3043             for (;;) {
3044                 /* pretend constant fold didn't happen? */
3045                 if (mp->mad_key == 'f' &&
3046                     (o->op_type == OP_CONST ||
3047                      o->op_type == OP_GV) )
3048                 {
3049                     op_getmad(from,(OP*)mp->mad_val,slot);
3050                     return;
3051                 }
3052                 if (!mp->mad_next)
3053                     break;
3054                 mp = mp->mad_next;
3055             }
3056             mp->mad_next = newMADPROP(slot,MAD_OP,from,1);
3057         }
3058         else {
3059             o->op_madprop = newMADPROP(slot,MAD_OP,from,1);
3060         }
3061     }
3062     else {
3063         PerlIO_printf(PerlIO_stderr(),
3064                       "DESTROYING op = %0"UVxf"\n", PTR2UV(from));
3065         op_free(from);
3066     }
3067 }
3068
3069 void
3070 Perl_prepend_madprops(pTHX_ MADPROP* mp, OP* o, char slot)
3071 {
3072     MADPROP* tm;
3073     if (!mp || !o)
3074         return;
3075     if (slot)
3076         mp->mad_key = slot;
3077     tm = o->op_madprop;
3078     o->op_madprop = mp;
3079     for (;;) {
3080         if (!mp->mad_next)
3081             break;
3082         mp = mp->mad_next;
3083     }
3084     mp->mad_next = tm;
3085 }
3086
3087 void
3088 Perl_append_madprops(pTHX_ MADPROP* tm, OP* o, char slot)
3089 {
3090     if (!o)
3091         return;
3092     addmad(tm, &(o->op_madprop), slot);
3093 }
3094
3095 void
3096 Perl_addmad(pTHX_ MADPROP* tm, MADPROP** root, char slot)
3097 {
3098     MADPROP* mp;
3099     if (!tm || !root)
3100         return;
3101     if (slot)
3102         tm->mad_key = slot;
3103     mp = *root;
3104     if (!mp) {
3105         *root = tm;
3106         return;
3107     }
3108     for (;;) {
3109         if (!mp->mad_next)
3110             break;
3111         mp = mp->mad_next;
3112     }
3113     mp->mad_next = tm;
3114 }
3115
3116 MADPROP *
3117 Perl_newMADsv(pTHX_ char key, SV* sv)
3118 {
3119     PERL_ARGS_ASSERT_NEWMADSV;
3120
3121     return newMADPROP(key, MAD_SV, sv, 0);
3122 }
3123
3124 MADPROP *
3125 Perl_newMADPROP(pTHX_ char key, char type, void* val, I32 vlen)
3126 {
3127     MADPROP *mp;
3128     Newxz(mp, 1, MADPROP);
3129     mp->mad_next = 0;
3130     mp->mad_key = key;
3131     mp->mad_vlen = vlen;
3132     mp->mad_type = type;
3133     mp->mad_val = val;
3134 /*    PerlIO_printf(PerlIO_stderr(), "NEW  mp = %0x\n", mp);  */
3135     return mp;
3136 }
3137
3138 void
3139 Perl_mad_free(pTHX_ MADPROP* mp)
3140 {
3141 /*    PerlIO_printf(PerlIO_stderr(), "FREE mp = %0x\n", mp); */
3142     if (!mp)
3143         return;
3144     if (mp->mad_next)
3145         mad_free(mp->mad_next);
3146 /*    if (PL_parser && PL_parser->lex_state != LEX_NOTPARSING && mp->mad_vlen)
3147         PerlIO_printf(PerlIO_stderr(), "DESTROYING '%c'=<%s>\n", mp->mad_key & 255, mp->mad_val); */
3148     switch (mp->mad_type) {
3149     case MAD_NULL:
3150         break;
3151     case MAD_PV:
3152         Safefree((char*)mp->mad_val);
3153         break;
3154     case MAD_OP:
3155         if (mp->mad_vlen)       /* vlen holds "strong/weak" boolean */
3156             op_free((OP*)mp->mad_val);
3157         break;
3158     case MAD_SV:
3159         sv_free(MUTABLE_SV(mp->mad_val));
3160         break;
3161     default:
3162         PerlIO_printf(PerlIO_stderr(), "Unrecognized mad\n");
3163         break;
3164     }
3165     Safefree(mp);
3166 }
3167
3168 #endif
3169
3170 /*
3171 =head1 Optree construction
3172
3173 =for apidoc Am|OP *|newNULLLIST
3174
3175 Constructs, checks, and returns a new C<stub> op, which represents an
3176 empty list expression.
3177
3178 =cut
3179 */
3180
3181 OP *
3182 Perl_newNULLLIST(pTHX)
3183 {
3184     return newOP(OP_STUB, 0);
3185 }
3186
3187 static OP *
3188 S_force_list(pTHX_ OP *o)
3189 {
3190     if (!o || o->op_type != OP_LIST)
3191         o = newLISTOP(OP_LIST, 0, o, NULL);
3192     op_null(o);
3193     return o;
3194 }
3195
3196 /*
3197 =for apidoc Am|OP *|newLISTOP|I32 type|I32 flags|OP *first|OP *last
3198
3199 Constructs, checks, and returns an op of any list type.  I<type> is
3200 the opcode.  I<flags> gives the eight bits of C<op_flags>, except that
3201 C<OPf_KIDS> will be set automatically if required.  I<first> and I<last>
3202 supply up to two ops to be direct children of the list op; they are
3203 consumed by this function and become part of the constructed op tree.
3204
3205 =cut
3206 */
3207
3208 OP *
3209 Perl_newLISTOP(pTHX_ I32 type, I32 flags, OP *first, OP *last)
3210 {
3211     dVAR;
3212     LISTOP *listop;
3213
3214     assert((PL_opargs[type] & OA_CLASS_MASK) == OA_LISTOP);
3215
3216     NewOp(1101, listop, 1, LISTOP);
3217
3218     listop->op_type = (OPCODE)type;
3219     listop->op_ppaddr = PL_ppaddr[type];
3220     if (first || last)
3221         flags |= OPf_KIDS;
3222     listop->op_flags = (U8)flags;
3223
3224     if (!last && first)
3225         last = first;
3226     else if (!first && last)
3227         first = last;
3228     else if (first)
3229         first->op_sibling = last;
3230     listop->op_first = first;
3231     listop->op_last = last;
3232     if (type == OP_LIST) {
3233         OP* const pushop = newOP(OP_PUSHMARK, 0);
3234         pushop->op_sibling = first;
3235         listop->op_first = pushop;
3236         listop->op_flags |= OPf_KIDS;
3237         if (!last)
3238             listop->op_last = pushop;
3239     }
3240
3241     return CHECKOP(type, listop);
3242 }
3243
3244 /*
3245 =for apidoc Am|OP *|newOP|I32 type|I32 flags
3246
3247 Constructs, checks, and returns an op of any base type (any type that
3248 has no extra fields).  I<type> is the opcode.  I<flags> gives the
3249 eight bits of C<op_flags>, and, shifted up eight bits, the eight bits
3250 of C<op_private>.
3251
3252 =cut
3253 */
3254
3255 OP *
3256 Perl_newOP(pTHX_ I32 type, I32 flags)
3257 {
3258     dVAR;
3259     OP *o;
3260
3261     assert((PL_opargs[type] & OA_CLASS_MASK) == OA_BASEOP
3262         || (PL_opargs[type] & OA_CLASS_MASK) == OA_BASEOP_OR_UNOP
3263         || (PL_opargs[type] & OA_CLASS_MASK) == OA_FILESTATOP
3264         || (PL_opargs[type] & OA_CLASS_MASK) == OA_LOOPEXOP);
3265
3266     NewOp(1101, o, 1, OP);
3267     o->op_type = (OPCODE)type;
3268     o->op_ppaddr = PL_ppaddr[type];
3269     o->op_flags = (U8)flags;
3270     o->op_latefree = 0;
3271     o->op_latefreed = 0;
3272     o->op_attached = 0;
3273
3274     o->op_next = o;
3275     o->op_private = (U8)(0 | (flags >> 8));
3276     if (PL_opargs[type] & OA_RETSCALAR)
3277         scalar(o);
3278     if (PL_opargs[type] & OA_TARGET)
3279         o->op_targ = pad_alloc(type, SVs_PADTMP);
3280     return CHECKOP(type, o);
3281 }
3282
3283 /*
3284 =for apidoc Am|OP *|newUNOP|I32 type|I32 flags|OP *first
3285
3286 Constructs, checks, and returns an op of any unary type.  I<type> is
3287 the opcode.  I<flags> gives the eight bits of C<op_flags>, except that
3288 C<OPf_KIDS> will be set automatically if required, and, shifted up eight
3289 bits, the eight bits of C<op_private>, except that the bit with value 1
3290 is automatically set.  I<first> supplies an optional op to be the direct
3291 child of the unary op; it is consumed by this function and become part
3292 of the constructed op tree.
3293
3294 =cut
3295 */
3296
3297 OP *
3298 Perl_newUNOP(pTHX_ I32 type, I32 flags, OP *first)
3299 {
3300     dVAR;
3301     UNOP *unop;
3302
3303     assert((PL_opargs[type] & OA_CLASS_MASK) == OA_UNOP
3304         || (PL_opargs[type] & OA_CLASS_MASK) == OA_BASEOP_OR_UNOP
3305         || (PL_opargs[type] & OA_CLASS_MASK) == OA_FILESTATOP
3306         || (PL_opargs[type] & OA_CLASS_MASK) == OA_LOOPEXOP
3307         || type == OP_SASSIGN
3308         || type == OP_ENTERTRY
3309         || type == OP_NULL );
3310
3311     if (!first)
3312         first = newOP(OP_STUB, 0);
3313     if (PL_opargs[type] & OA_MARK)
3314         first = force_list(first);
3315
3316     NewOp(1101, unop, 1, UNOP);
3317     unop->op_type = (OPCODE)type;
3318     unop->op_ppaddr = PL_ppaddr[type];
3319     unop->op_first = first;
3320     unop->op_flags = (U8)(flags | OPf_KIDS);
3321     unop->op_private = (U8)(1 | (flags >> 8));
3322     unop = (UNOP*) CHECKOP(type, unop);
3323     if (unop->op_next)
3324         return (OP*)unop;
3325
3326     return fold_constants((OP *) unop);
3327 }
3328
3329 /*
3330 =for apidoc Am|OP *|newBINOP|I32 type|I32 flags|OP *first|OP *last
3331
3332 Constructs, checks, and returns an op of any binary type.  I<type>
3333 is the opcode.  I<flags> gives the eight bits of C<op_flags>, except
3334 that C<OPf_KIDS> will be set automatically, and, shifted up eight bits,
3335 the eight bits of C<op_private>, except that the bit with value 1 or
3336 2 is automatically set as required.  I<first> and I<last> supply up to
3337 two ops to be the direct children of the binary op; they are consumed
3338 by this function and become part of the constructed op tree.
3339
3340 =cut
3341 */
3342
3343 OP *
3344 Perl_newBINOP(pTHX_ I32 type, I32 flags, OP *first, OP *last)
3345 {
3346     dVAR;
3347     BINOP *binop;
3348
3349     assert((PL_opargs[type] & OA_CLASS_MASK) == OA_BINOP
3350         || type == OP_SASSIGN || type == OP_NULL );
3351
3352     NewOp(1101, binop, 1, BINOP);
3353
3354     if (!first)
3355         first = newOP(OP_NULL, 0);
3356
3357     binop->op_type = (OPCODE)type;
3358     binop->op_ppaddr = PL_ppaddr[type];
3359     binop->op_first = first;
3360     binop->op_flags = (U8)(flags | OPf_KIDS);
3361     if (!last) {
3362         last = first;
3363         binop->op_private = (U8)(1 | (flags >> 8));
3364     }
3365     else {
3366         binop->op_private = (U8)(2 | (flags >> 8));
3367         first->op_sibling = last;
3368     }
3369
3370     binop = (BINOP*)CHECKOP(type, binop);
3371     if (binop->op_next || binop->op_type != (OPCODE)type)
3372         return (OP*)binop;
3373
3374     binop->op_last = binop->op_first->op_sibling;
3375
3376     return fold_constants((OP *)binop);
3377 }
3378
3379 static int uvcompare(const void *a, const void *b)
3380     __attribute__nonnull__(1)
3381     __attribute__nonnull__(2)
3382     __attribute__pure__;
3383 static int uvcompare(const void *a, const void *b)
3384 {
3385     if (*((const UV *)a) < (*(const UV *)b))
3386         return -1;
3387     if (*((const UV *)a) > (*(const UV *)b))
3388         return 1;
3389     if (*((const UV *)a+1) < (*(const UV *)b+1))
3390         return -1;
3391     if (*((const UV *)a+1) > (*(const UV *)b+1))
3392         return 1;
3393     return 0;
3394 }
3395
3396 static OP *
3397 S_pmtrans(pTHX_ OP *o, OP *expr, OP *repl)
3398 {
3399     dVAR;
3400     SV * const tstr = ((SVOP*)expr)->op_sv;
3401     SV * const rstr =
3402 #ifdef PERL_MAD
3403                         (repl->op_type == OP_NULL)
3404                             ? ((SVOP*)((LISTOP*)repl)->op_first)->op_sv :
3405 #endif
3406                               ((SVOP*)repl)->op_sv;
3407     STRLEN tlen;
3408     STRLEN rlen;
3409     const U8 *t = (U8*)SvPV_const(tstr, tlen);
3410     const U8 *r = (U8*)SvPV_const(rstr, rlen);
3411     register I32 i;
3412     register I32 j;
3413     I32 grows = 0;
3414     register short *tbl;
3415
3416     const I32 complement = o->op_private & OPpTRANS_COMPLEMENT;
3417     const I32 squash     = o->op_private & OPpTRANS_SQUASH;
3418     I32 del              = o->op_private & OPpTRANS_DELETE;
3419     SV* swash;
3420
3421     PERL_ARGS_ASSERT_PMTRANS;
3422
3423     PL_hints |= HINT_BLOCK_SCOPE;
3424
3425     if (SvUTF8(tstr))
3426         o->op_private |= OPpTRANS_FROM_UTF;
3427
3428     if (SvUTF8(rstr))
3429         o->op_private |= OPpTRANS_TO_UTF;
3430
3431     if (o->op_private & (OPpTRANS_FROM_UTF|OPpTRANS_TO_UTF)) {
3432         SV* const listsv = newSVpvs("# comment\n");
3433         SV* transv = NULL;
3434         const U8* tend = t + tlen;
3435         const U8* rend = r + rlen;
3436         STRLEN ulen;
3437         UV tfirst = 1;
3438         UV tlast = 0;
3439         IV tdiff;
3440         UV rfirst = 1;
3441         UV rlast = 0;
3442         IV rdiff;
3443         IV diff;
3444         I32 none = 0;
3445         U32 max = 0;
3446         I32 bits;
3447         I32 havefinal = 0;
3448         U32 final = 0;
3449         const I32 from_utf  = o->op_private & OPpTRANS_FROM_UTF;
3450         const I32 to_utf    = o->op_private & OPpTRANS_TO_UTF;
3451         U8* tsave = NULL;
3452         U8* rsave = NULL;
3453         const U32 flags = UTF8_ALLOW_DEFAULT;
3454
3455         if (!from_utf) {
3456             STRLEN len = tlen;
3457             t = tsave = bytes_to_utf8(t, &len);
3458             tend = t + len;
3459         }
3460         if (!to_utf && rlen) {
3461             STRLEN len = rlen;
3462             r = rsave = bytes_to_utf8(r, &len);
3463             rend = r + len;
3464         }
3465
3466 /* There are several snags with this code on EBCDIC:
3467    1. 0xFF is a legal UTF-EBCDIC byte (there are no illegal bytes).
3468    2. scan_const() in toke.c has encoded chars in native encoding which makes
3469       ranges at least in EBCDIC 0..255 range the bottom odd.
3470 */
3471
3472         if (complement) {
3473             U8 tmpbuf[UTF8_MAXBYTES+1];
3474             UV *cp;
3475             UV nextmin = 0;
3476             Newx(cp, 2*tlen, UV);
3477             i = 0;
3478             transv = newSVpvs("");
3479             while (t < tend) {
3480                 cp[2*i] = utf8n_to_uvuni(t, tend-t, &ulen, flags);
3481                 t += ulen;
3482                 if (t < tend && NATIVE_TO_UTF(*t) == 0xff) {
3483                     t++;
3484                     cp[2*i+1] = utf8n_to_uvuni(t, tend-t, &ulen, flags);
3485                     t += ulen;
3486                 }
3487                 else {
3488                  cp[2*i+1] = cp[2*i];
3489                 }
3490                 i++;
3491             }
3492             qsort(cp, i, 2*sizeof(UV), uvcompare);
3493             for (j = 0; j < i; j++) {
3494                 UV  val = cp[2*j];
3495                 diff = val - nextmin;
3496                 if (diff > 0) {
3497                     t = uvuni_to_utf8(tmpbuf,nextmin);
3498                     sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf);
3499                     if (diff > 1) {
3500                         U8  range_mark = UTF_TO_NATIVE(0xff);
3501                         t = uvuni_to_utf8(tmpbuf, val - 1);
3502                         sv_catpvn(transv, (char *)&range_mark, 1);
3503                         sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf);
3504                     }
3505                 }
3506                 val = cp[2*j+1];
3507                 if (val >= nextmin)
3508                     nextmin = val + 1;
3509             }
3510             t = uvuni_to_utf8(tmpbuf,nextmin);
3511             sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf);
3512             {
3513                 U8 range_mark = UTF_TO_NATIVE(0xff);
3514                 sv_catpvn(transv, (char *)&range_mark, 1);
3515             }
3516             t = uvuni_to_utf8_flags(tmpbuf, 0x7fffffff,
3517                                     UNICODE_ALLOW_SUPER);
3518             sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf);
3519             t = (const U8*)SvPVX_const(transv);
3520             tlen = SvCUR(transv);
3521             tend = t + tlen;
3522             Safefree(cp);
3523         }
3524         else if (!rlen && !del) {
3525             r = t; rlen = tlen; rend = tend;
3526         }
3527         if (!squash) {
3528                 if ((!rlen && !del) || t == r ||
3529                     (tlen == rlen && memEQ((char *)t, (char *)r, tlen)))
3530                 {
3531                     o->op_private |= OPpTRANS_IDENTICAL;
3532                 }
3533         }
3534
3535         while (t < tend || tfirst <= tlast) {
3536             /* see if we need more "t" chars */
3537             if (tfirst > tlast) {
3538                 tfirst = (I32)utf8n_to_uvuni(t, tend - t, &ulen, flags);
3539                 t += ulen;
3540                 if (t < tend && NATIVE_TO_UTF(*t) == 0xff) {    /* illegal utf8 val indicates range */
3541                     t++;
3542                     tlast = (I32)utf8n_to_uvuni(t, tend - t, &ulen, flags);
3543                     t += ulen;
3544                 }
3545                 else
3546                     tlast = tfirst;
3547             }
3548
3549             /* now see if we need more "r" chars */
3550             if (rfirst > rlast) {
3551                 if (r < rend) {
3552                     rfirst = (I32)utf8n_to_uvuni(r, rend - r, &ulen, flags);
3553                     r += ulen;
3554                     if (r < rend && NATIVE_TO_UTF(*r) == 0xff) {        /* illegal utf8 val indicates range */
3555                         r++;
3556                         rlast = (I32)utf8n_to_uvuni(r, rend - r, &ulen, flags);
3557                         r += ulen;
3558                     }
3559                     else
3560                         rlast = rfirst;
3561                 }
3562                 else {
3563                     if (!havefinal++)
3564                         final = rlast;
3565                     rfirst = rlast = 0xffffffff;
3566                 }
3567             }
3568
3569             /* now see which range will peter our first, if either. */
3570             tdiff = tlast - tfirst;
3571             rdiff = rlast - rfirst;
3572
3573             if (tdiff <= rdiff)
3574                 diff = tdiff;
3575             else
3576                 diff = rdiff;
3577
3578             if (rfirst == 0xffffffff) {
3579                 diff = tdiff;   /* oops, pretend rdiff is infinite */
3580                 if (diff > 0)
3581                     Perl_sv_catpvf(aTHX_ listsv, "%04lx\t%04lx\tXXXX\n",
3582                                    (long)tfirst, (long)tlast);
3583                 else
3584                     Perl_sv_catpvf(aTHX_ listsv, "%04lx\t\tXXXX\n", (long)tfirst);
3585             }
3586             else {
3587                 if (diff > 0)
3588                     Perl_sv_catpvf(aTHX_ listsv, "%04lx\t%04lx\t%04lx\n",
3589                                    (long)tfirst, (long)(tfirst + diff),
3590                                    (long)rfirst);
3591                 else
3592                     Perl_sv_catpvf(aTHX_ listsv, "%04lx\t\t%04lx\n",
3593                                    (long)tfirst, (long)rfirst);
3594
3595                 if (rfirst + diff > max)
3596                     max = rfirst + diff;
3597                 if (!grows)
3598                     grows = (tfirst < rfirst &&
3599                              UNISKIP(tfirst) < UNISKIP(rfirst + diff));
3600                 rfirst += diff + 1;
3601             }
3602             tfirst += diff + 1;
3603         }
3604
3605         none = ++max;
3606         if (del)
3607             del = ++max;
3608
3609         if (max > 0xffff)
3610             bits = 32;
3611         else if (max > 0xff)
3612             bits = 16;
3613         else
3614             bits = 8;
3615
3616         PerlMemShared_free(cPVOPo->op_pv);
3617         cPVOPo->op_pv = NULL;
3618
3619         swash = MUTABLE_SV(swash_init("utf8", "", listsv, bits, none));
3620 #ifdef USE_ITHREADS
3621         cPADOPo->op_padix = pad_alloc(OP_TRANS, SVs_PADTMP);
3622         SvREFCNT_dec(PAD_SVl(cPADOPo->op_padix));
3623         PAD_SETSV(cPADOPo->op_padix, swash);
3624         SvPADTMP_on(swash);
3625         SvREADONLY_on(swash);
3626 #else
3627         cSVOPo->op_sv = swash;
3628 #endif
3629         SvREFCNT_dec(listsv);
3630         SvREFCNT_dec(transv);
3631
3632         if (!del && havefinal && rlen)
3633             (void)hv_store(MUTABLE_HV(SvRV(swash)), "FINAL", 5,
3634                            newSVuv((UV)final), 0);
3635
3636         if (grows)
3637             o->op_private |= OPpTRANS_GROWS;
3638
3639         Safefree(tsave);
3640         Safefree(rsave);
3641
3642 #ifdef PERL_MAD
3643         op_getmad(expr,o,'e');
3644         op_getmad(repl,o,'r');
3645 #else
3646         op_free(expr);
3647         op_free(repl);
3648 #endif
3649         return o;
3650     }
3651
3652     tbl = (short*)cPVOPo->op_pv;
3653     if (complement) {
3654         Zero(tbl, 256, short);
3655         for (i = 0; i < (I32)tlen; i++)
3656             tbl[t[i]] = -1;
3657         for (i = 0, j = 0; i < 256; i++) {
3658             if (!tbl[i]) {
3659                 if (j >= (I32)rlen) {
3660                     if (del)
3661                         tbl[i] = -2;
3662                     else if (rlen)
3663                         tbl[i] = r[j-1];
3664                     else
3665                         tbl[i] = (short)i;
3666                 }
3667                 else {
3668                     if (i < 128 && r[j] >= 128)
3669                         grows = 1;
3670                     tbl[i] = r[j++];
3671                 }
3672             }
3673         }
3674         if (!del) {
3675             if (!rlen) {
3676                 j = rlen;
3677                 if (!squash)
3678                     o->op_private |= OPpTRANS_IDENTICAL;
3679             }
3680             else if (j >= (I32)rlen)
3681                 j = rlen - 1;
3682             else {
3683                 tbl = 
3684                     (short *)
3685                     PerlMemShared_realloc(tbl,
3686                                           (0x101+rlen-j) * sizeof(short));
3687                 cPVOPo->op_pv = (char*)tbl;
3688             }
3689             tbl[0x100] = (short)(rlen - j);
3690             for (i=0; i < (I32)rlen - j; i++)
3691                 tbl[0x101+i] = r[j+i];
3692         }
3693     }
3694     else {
3695         if (!rlen && !del) {
3696             r = t; rlen = tlen;
3697             if (!squash)
3698                 o->op_private |= OPpTRANS_IDENTICAL;
3699         }
3700         else if (!squash && rlen == tlen && memEQ((char*)t, (char*)r, tlen)) {
3701             o->op_private |= OPpTRANS_IDENTICAL;
3702         }
3703         for (i = 0; i < 256; i++)
3704             tbl[i] = -1;
3705         for (i = 0, j = 0; i < (I32)tlen; i++,j++) {
3706             if (j >= (I32)rlen) {
3707                 if (del) {
3708                     if (tbl[t[i]] == -1)
3709                         tbl[t[i]] = -2;
3710                     continue;
3711                 }
3712                 --j;
3713             }
3714             if (tbl[t[i]] == -1) {
3715                 if (t[i] < 128 && r[j] >= 128)
3716                     grows = 1;
3717                 tbl[t[i]] = r[j];
3718             }
3719         }
3720     }
3721
3722     if(del && rlen == tlen) {
3723         Perl_ck_warner(aTHX_ packWARN(WARN_MISC), "Useless use of /d modifier in transliteration operator"); 
3724     } else if(rlen > tlen) {
3725         Perl_ck_warner(aTHX_ packWARN(WARN_MISC), "Replacement list is longer than search list");
3726     }
3727
3728     if (grows)
3729         o->op_private |= OPpTRANS_GROWS;
3730 #ifdef PERL_MAD
3731     op_getmad(expr,o,'e');
3732     op_getmad(repl,o,'r');
3733 #else
3734     op_free(expr);
3735     op_free(repl);
3736 #endif
3737
3738     return o;
3739 }
3740
3741 /*
3742 =for apidoc Am|OP *|newPMOP|I32 type|I32 flags
3743
3744 Constructs, checks, and returns an op of any pattern matching type.
3745 I<type> is the opcode.  I<flags> gives the eight bits of C<op_flags>
3746 and, shifted up eight bits, the eight bits of C<op_private>.
3747
3748 =cut
3749 */
3750
3751 OP *
3752 Perl_newPMOP(pTHX_ I32 type, I32 flags)
3753 {
3754     dVAR;
3755     PMOP *pmop;
3756
3757     assert((PL_opargs[type] & OA_CLASS_MASK) == OA_PMOP);
3758
3759     NewOp(1101, pmop, 1, PMOP);
3760     pmop->op_type = (OPCODE)type;
3761     pmop->op_ppaddr = PL_ppaddr[type];
3762     pmop->op_flags = (U8)flags;
3763     pmop->op_private = (U8)(0 | (flags >> 8));
3764
3765     if (PL_hints & HINT_RE_TAINT)
3766         pmop->op_pmflags |= PMf_RETAINT;
3767     if (PL_hints & HINT_LOCALE) {
3768         pmop->op_pmflags |= PMf_LOCALE;
3769     }
3770     else if ((! (PL_hints & HINT_BYTES)) && (PL_hints & HINT_UNI_8_BIT)) {
3771         pmop->op_pmflags |= RXf_PMf_UNICODE;
3772     }
3773     if (PL_hints & HINT_RE_FLAGS) {
3774         SV *reflags = Perl_refcounted_he_fetch_pvn(aTHX_
3775          PL_compiling.cop_hints_hash, STR_WITH_LEN("reflags"), 0, 0
3776         );
3777         if (reflags && SvOK(reflags)) pmop->op_pmflags |= SvIV(reflags);
3778         reflags = Perl_refcounted_he_fetch_pvn(aTHX_
3779          PL_compiling.cop_hints_hash, STR_WITH_LEN("reflags_dul"), 0, 0
3780         );
3781         if (reflags && SvOK(reflags)) {
3782             pmop->op_pmflags &= ~(RXf_PMf_LOCALE|RXf_PMf_UNICODE);
3783             pmop->op_pmflags |= SvIV(reflags);
3784         }
3785     }
3786
3787
3788 #ifdef USE_ITHREADS
3789     assert(SvPOK(PL_regex_pad[0]));
3790     if (SvCUR(PL_regex_pad[0])) {
3791         /* Pop off the "packed" IV from the end.  */
3792         SV *const repointer_list = PL_regex_pad[0];
3793         const char *p = SvEND(repointer_list) - sizeof(IV);
3794         const IV offset = *((IV*)p);
3795
3796         assert(SvCUR(repointer_list) % sizeof(IV) == 0);
3797
3798         SvEND_set(repointer_list, p);
3799
3800         pmop->op_pmoffset = offset;
3801         /* This slot should be free, so assert this:  */
3802         assert(PL_regex_pad[offset] == &PL_sv_undef);
3803     } else {
3804         SV * const repointer = &PL_sv_undef;
3805         av_push(PL_regex_padav, repointer);
3806         pmop->op_pmoffset = av_len(PL_regex_padav);
3807         PL_regex_pad = AvARRAY(PL_regex_padav);
3808     }
3809 #endif
3810
3811     return CHECKOP(type, pmop);
3812 }
3813
3814 /* Given some sort of match op o, and an expression expr containing a
3815  * pattern, either compile expr into a regex and attach it to o (if it's
3816  * constant), or convert expr into a runtime regcomp op sequence (if it's
3817  * not)
3818  *
3819  * isreg indicates that the pattern is part of a regex construct, eg
3820  * $x =~ /pattern/ or split /pattern/, as opposed to $x =~ $pattern or
3821  * split "pattern", which aren't. In the former case, expr will be a list
3822  * if the pattern contains more than one term (eg /a$b/) or if it contains
3823  * a replacement, ie s/// or tr///.
3824  */
3825
3826 OP *
3827 Perl_pmruntime(pTHX_ OP *o, OP *expr, bool isreg)
3828 {
3829     dVAR;
3830     PMOP *pm;
3831     LOGOP *rcop;
3832     I32 repl_has_vars = 0;
3833     OP* repl = NULL;
3834     bool reglist;
3835
3836     PERL_ARGS_ASSERT_PMRUNTIME;
3837
3838     if (
3839         o->op_type == OP_SUBST
3840      || o->op_type == OP_TRANS || o->op_type == OP_TRANSR
3841     ) {
3842         /* last element in list is the replacement; pop it */
3843         OP* kid;
3844         repl = cLISTOPx(expr)->op_last;
3845         kid = cLISTOPx(expr)->op_first;
3846         while (kid->op_sibling != repl)
3847             kid = kid->op_sibling;
3848         kid->op_sibling = NULL;
3849         cLISTOPx(expr)->op_last = kid;
3850     }
3851
3852     if (isreg && expr->op_type == OP_LIST &&
3853         cLISTOPx(expr)->op_first->op_sibling == cLISTOPx(expr)->op_last)
3854     {
3855         /* convert single element list to element */
3856         OP* const oe = expr;
3857         expr = cLISTOPx(oe)->op_first->op_sibling;
3858         cLISTOPx(oe)->op_first->op_sibling = NULL;
3859         cLISTOPx(oe)->op_last = NULL;
3860         op_free(oe);
3861     }
3862
3863     if (o->op_type == OP_TRANS || o->op_type == OP_TRANSR) {
3864         return pmtrans(o, expr, repl);
3865     }
3866
3867     reglist = isreg && expr->op_type == OP_LIST;
3868     if (reglist)
3869         op_null(expr);
3870
3871     PL_hints |= HINT_BLOCK_SCOPE;
3872     pm = (PMOP*)o;
3873
3874     if (expr->op_type == OP_CONST) {
3875         SV *pat = ((SVOP*)expr)->op_sv;
3876         U32 pm_flags = pm->op_pmflags & PMf_COMPILETIME;
3877
3878         if (o->op_flags & OPf_SPECIAL)
3879             pm_flags |= RXf_SPLIT;
3880
3881         if (DO_UTF8(pat)) {
3882             assert (SvUTF8(pat));
3883         } else if (SvUTF8(pat)) {
3884             /* Not doing UTF-8, despite what the SV says. Is this only if we're
3885                trapped in use 'bytes'?  */
3886             /* Make a copy of the octet sequence, but without the flag on, as
3887                the compiler now honours the SvUTF8 flag on pat.  */
3888             STRLEN len;
3889             const char *const p = SvPV(pat, len);
3890             pat = newSVpvn_flags(p, len, SVs_TEMP);
3891         }
3892
3893         PM_SETRE(pm, CALLREGCOMP(pat, pm_flags));
3894
3895 #ifdef PERL_MAD
3896         op_getmad(expr,(OP*)pm,'e');
3897 #else
3898         op_free(expr);
3899 #endif
3900     }
3901     else {
3902         if (pm->op_pmflags & PMf_KEEP || !(PL_hints & HINT_RE_EVAL))
3903             expr = newUNOP((!(PL_hints & HINT_RE_EVAL)
3904                             ? OP_REGCRESET
3905                             : OP_REGCMAYBE),0,expr);
3906
3907         NewOp(1101, rcop, 1, LOGOP);
3908         rcop->op_type = OP_REGCOMP;
3909         rcop->op_ppaddr = PL_ppaddr[OP_REGCOMP];
3910         rcop->op_first = scalar(expr);
3911         rcop->op_flags |= OPf_KIDS
3912                             | ((PL_hints & HINT_RE_EVAL) ? OPf_SPECIAL : 0)
3913                             | (reglist ? OPf_STACKED : 0);
3914         rcop->op_private = 1;
3915         rcop->op_other = o;
3916         if (reglist)
3917             rcop->op_targ = pad_alloc(rcop->op_type, SVs_PADTMP);
3918
3919         /* /$x/ may cause an eval, since $x might be qr/(?{..})/  */
3920         PL_cv_has_eval = 1;
3921
3922         /* establish postfix order */
3923         if (pm->op_pmflags & PMf_KEEP || !(PL_hints & HINT_RE_EVAL)) {
3924             LINKLIST(expr);
3925             rcop->op_next = expr;
3926             ((UNOP*)expr)->op_first->op_next = (OP*)rcop;
3927         }
3928         else {
3929             rcop->op_next = LINKLIST(expr);
3930             expr->op_next = (OP*)rcop;
3931         }
3932
3933         op_prepend_elem(o->op_type, scalar((OP*)rcop), o);
3934     }
3935
3936     if (repl) {
3937         OP *curop;
3938         if (pm->op_pmflags & PMf_EVAL) {
3939             curop = NULL;
3940             if (CopLINE(PL_curcop) < (line_t)PL_parser->multi_end)
3941                 CopLINE_set(PL_curcop, (line_t)PL_parser->multi_end);
3942         }
3943         else if (repl->op_type == OP_CONST)
3944             curop = repl;
3945         else {
3946             OP *lastop = NULL;
3947             for (curop = LINKLIST(repl); curop!=repl; curop = LINKLIST(curop)) {
3948                 if (curop->op_type == OP_SCOPE
3949                         || curop->op_type == OP_LEAVE
3950                         || (PL_opargs[curop->op_type] & OA_DANGEROUS)) {
3951                     if (curop->op_type == OP_GV) {
3952                         GV * const gv = cGVOPx_gv(curop);
3953                         repl_has_vars = 1;
3954                         if (strchr("&`'123456789+-\016\022", *GvENAME(gv)))
3955                             break;
3956                     }
3957                     else if (curop->op_type == OP_RV2CV)
3958                         break;
3959                     else if (curop->op_type == OP_RV2SV ||
3960                              curop->op_type == OP_RV2AV ||
3961                              curop->op_type == OP_RV2HV ||
3962                              curop->op_type == OP_RV2GV) {
3963                         if (lastop && lastop->op_type != OP_GV) /*funny deref?*/
3964                             break;
3965                     }
3966                     else if (curop->op_type == OP_PADSV ||
3967                              curop->op_type == OP_PADAV ||
3968                              curop->op_type == OP_PADHV ||
3969                              curop->op_type == OP_PADANY)
3970                     {
3971                         repl_has_vars = 1;
3972                     }
3973                     else if (curop->op_type == OP_PUSHRE)
3974                         NOOP; /* Okay here, dangerous in newASSIGNOP */
3975                     else
3976                         break;
3977                 }
3978                 lastop = curop;
3979             }
3980         }
3981         if (curop == repl
3982             && !(repl_has_vars
3983                  && (!PM_GETRE(pm)
3984                      || RX_EXTFLAGS(PM_GETRE(pm)) & RXf_EVAL_SEEN)))
3985         {
3986             pm->op_pmflags |= PMf_CONST;        /* const for long enough */
3987             op_prepend_elem(o->op_type, scalar(repl), o);
3988         }
3989         else {
3990             if (curop == repl && !PM_GETRE(pm)) { /* Has variables. */
3991                 pm->op_pmflags |= PMf_MAYBE_CONST;
3992             }
3993             NewOp(1101, rcop, 1, LOGOP);
3994             rcop->op_type = OP_SUBSTCONT;
3995             rcop->op_ppaddr = PL_ppaddr[OP_SUBSTCONT];
3996             rcop->op_first = scalar(repl);
3997             rcop->op_flags |= OPf_KIDS;
3998             rcop->op_private = 1;
3999             rcop->op_other = o;
4000
4001             /* establish postfix order */
4002             rcop->op_next = LINKLIST(repl);
4003             repl->op_next = (OP*)rcop;
4004
4005             pm->op_pmreplrootu.op_pmreplroot = scalar((OP*)rcop);
4006             assert(!(pm->op_pmflags & PMf_ONCE));
4007             pm->op_pmstashstartu.op_pmreplstart = LINKLIST(rcop);
4008             rcop->op_next = 0;
4009         }
4010     }
4011
4012     return (OP*)pm;
4013 }
4014
4015 /*
4016 =for apidoc Am|OP *|newSVOP|I32 type|I32 flags|SV *sv
4017
4018 Constructs, checks, and returns an op of any type that involves an
4019 embedded SV.  I<type> is the opcode.  I<flags> gives the eight bits
4020 of C<op_flags>.  I<sv> gives the SV to embed in the op; this function
4021 takes ownership of one reference to it.
4022
4023 =cut
4024 */
4025
4026 OP *
4027 Perl_newSVOP(pTHX_ I32 type, I32 flags, SV *sv)
4028 {
4029     dVAR;
4030     SVOP *svop;
4031
4032     PERL_ARGS_ASSERT_NEWSVOP;
4033
4034     assert((PL_opargs[type] & OA_CLASS_MASK) == OA_SVOP
4035         || (PL_opargs[type] & OA_CLASS_MASK) == OA_PVOP_OR_SVOP
4036         || (PL_opargs[type] & OA_CLASS_MASK) == OA_FILESTATOP);
4037
4038     NewOp(1101, svop, 1, SVOP);
4039     svop->op_type = (OPCODE)type;
4040     svop->op_ppaddr = PL_ppaddr[type];
4041     svop->op_sv = sv;
4042     svop->op_next = (OP*)svop;
4043     svop->op_flags = (U8)flags;
4044     if (PL_opargs[type] & OA_RETSCALAR)
4045         scalar((OP*)svop);
4046     if (PL_opargs[type] & OA_TARGET)
4047         svop->op_targ = pad_alloc(type, SVs_PADTMP);
4048     return CHECKOP(type, svop);
4049 }
4050
4051 #ifdef USE_ITHREADS
4052
4053 /*
4054 =for apidoc Am|OP *|newPADOP|I32 type|I32 flags|SV *sv
4055
4056 Constructs, checks, and returns an op of any type that involves a
4057 reference to a pad element.  I<type> is the opcode.  I<flags> gives the
4058 eight bits of C<op_flags>.  A pad slot is automatically allocated, and
4059 is populated with I<sv>; this function takes ownership of one reference
4060 to it.
4061
4062 This function only exists if Perl has been compiled to use ithreads.
4063
4064 =cut
4065 */
4066
4067 OP *
4068 Perl_newPADOP(pTHX_ I32 type, I32 flags, SV *sv)
4069 {
4070     dVAR;
4071     PADOP *padop;
4072
4073     PERL_ARGS_ASSERT_NEWPADOP;
4074
4075     assert((PL_opargs[type] & OA_CLASS_MASK) == OA_SVOP
4076         || (PL_opargs[type] & OA_CLASS_MASK) == OA_PVOP_OR_SVOP
4077         || (PL_opargs[type] & OA_CLASS_MASK) == OA_FILESTATOP);
4078
4079     NewOp(1101, padop, 1, PADOP);
4080     padop->op_type = (OPCODE)type;
4081     padop->op_ppaddr = PL_ppaddr[type];
4082     padop->op_padix = pad_alloc(type, SVs_PADTMP);
4083     SvREFCNT_dec(PAD_SVl(padop->op_padix));
4084     PAD_SETSV(padop->op_padix, sv);
4085     assert(sv);
4086     SvPADTMP_on(sv);
4087     padop->op_next = (OP*)padop;
4088     padop->op_flags = (U8)flags;
4089     if (PL_opargs[type] & OA_RETSCALAR)
4090         scalar((OP*)padop);
4091     if (PL_opargs[type] & OA_TARGET)
4092         padop->op_targ = pad_alloc(type, SVs_PADTMP);
4093     return CHECKOP(type, padop);
4094 }
4095
4096 #endif /* !USE_ITHREADS */
4097
4098 /*
4099 =for apidoc Am|OP *|newGVOP|I32 type|I32 flags|GV *gv
4100
4101 Constructs, checks, and returns an op of any type that involves an
4102 embedded reference to a GV.  I<type> is the opcode.  I<flags> gives the
4103 eight bits of C<op_flags>.  I<gv> identifies the GV that the op should
4104 reference; calling this function does not transfer ownership of any
4105 reference to it.
4106
4107 =cut
4108 */
4109
4110 OP *
4111 Perl_newGVOP(pTHX_ I32 type, I32 flags, GV *gv)
4112 {
4113     dVAR;
4114
4115     PERL_ARGS_ASSERT_NEWGVOP;
4116
4117 #ifdef USE_ITHREADS
4118     GvIN_PAD_on(gv);
4119     return newPADOP(type, flags, SvREFCNT_inc_simple_NN(gv));
4120 #else
4121     return newSVOP(type, flags, SvREFCNT_inc_simple_NN(gv));
4122 #endif
4123 }
4124
4125 /*
4126 =for apidoc Am|OP *|newPVOP|I32 type|I32 flags|char *pv
4127
4128 Constructs, checks, and returns an op of any type that involves an
4129 embedded C-level pointer (PV).  I<type> is the opcode.  I<flags> gives
4130 the eight bits of C<op_flags>.  I<pv> supplies the C-level pointer, which
4131 must have been allocated using L</PerlMemShared_malloc>; the memory will
4132 be freed when the op is destroyed.
4133
4134 =cut
4135 */
4136
4137 OP *
4138 Perl_newPVOP(pTHX_ I32 type, I32 flags, char *pv)
4139 {
4140     dVAR;
4141     PVOP *pvop;
4142
4143     assert((PL_opargs[type] & OA_CLASS_MASK) == OA_PVOP_OR_SVOP
4144         || (PL_opargs[type] & OA_CLASS_MASK) == OA_LOOPEXOP);
4145
4146     NewOp(1101, pvop, 1, PVOP);
4147     pvop->op_type = (OPCODE)type;
4148     pvop->op_ppaddr = PL_ppaddr[type];
4149     pvop->op_pv = pv;
4150     pvop->op_next = (OP*)pvop;
4151     pvop->op_flags = (U8)flags;
4152     if (PL_opargs[type] & OA_RETSCALAR)
4153         scalar((OP*)pvop);
4154     if (PL_opargs[type] & OA_TARGET)
4155         pvop->op_targ = pad_alloc(type, SVs_PADTMP);
4156     return CHECKOP(type, pvop);
4157 }
4158
4159 #ifdef PERL_MAD
4160 OP*
4161 #else
4162 void
4163 #endif
4164 Perl_package(pTHX_ OP *o)
4165 {
4166     dVAR;
4167     SV *const sv = cSVOPo->op_sv;
4168 #ifdef PERL_MAD
4169     OP *pegop;
4170 #endif
4171
4172     PERL_ARGS_ASSERT_PACKAGE;
4173
4174     save_hptr(&PL_curstash);
4175     save_item(PL_curstname);
4176
4177     PL_curstash = gv_stashsv(sv, GV_ADD);
4178
4179     sv_setsv(PL_curstname, sv);
4180
4181     PL_hints |= HINT_BLOCK_SCOPE;
4182     PL_parser->copline = NOLINE;
4183     PL_parser->expect = XSTATE;
4184
4185 #ifndef PERL_MAD
4186     op_free(o);
4187 #else
4188     if (!PL_madskills) {
4189         op_free(o);
4190         return NULL;
4191     }
4192
4193     pegop = newOP(OP_NULL,0);
4194     op_getmad(o,pegop,'P');
4195     return pegop;
4196 #endif
4197 }
4198
4199 void
4200 Perl_package_version( pTHX_ OP *v )
4201 {
4202     dVAR;
4203     U32 savehints = PL_hints;
4204     PERL_ARGS_ASSERT_PACKAGE_VERSION;
4205     PL_hints &= ~HINT_STRICT_VARS;
4206     sv_setsv( GvSV(gv_fetchpvs("VERSION", GV_ADDMULTI, SVt_PV)), cSVOPx(v)->op_sv );
4207     PL_hints = savehints;
4208     op_free(v);
4209 }
4210
4211 #ifdef PERL_MAD
4212 OP*
4213 #else
4214 void
4215 #endif
4216 Perl_utilize(pTHX_ int aver, I32 floor, OP *version, OP *idop, OP *arg)
4217 {
4218     dVAR;
4219     OP *pack;
4220     OP *imop;
4221     OP *veop;
4222 #ifdef PERL_MAD
4223     OP *pegop = newOP(OP_NULL,0);
4224 #endif
4225
4226     PERL_ARGS_ASSERT_UTILIZE;
4227
4228     if (idop->op_type != OP_CONST)
4229         Perl_croak(aTHX_ "Module name must be constant");
4230
4231     if (PL_madskills)
4232         op_getmad(idop,pegop,'U');
4233
4234     veop = NULL;
4235
4236     if (version) {
4237         SV * const vesv = ((SVOP*)version)->op_sv;
4238
4239         if (PL_madskills)
4240             op_getmad(version,pegop,'V');
4241         if (!arg && !SvNIOKp(vesv)) {
4242             arg = version;
4243         }
4244         else {
4245             OP *pack;
4246             SV *meth;
4247
4248             if (version->op_type != OP_CONST || !SvNIOKp(vesv))
4249                 Perl_croak(aTHX_ "Version number must be a constant number");
4250
4251             /* Make copy of idop so we don't free it twice */
4252             pack = newSVOP(OP_CONST, 0, newSVsv(((SVOP*)idop)->op_sv));
4253
4254             /* Fake up a method call to VERSION */
4255             meth = newSVpvs_share("VERSION");
4256             veop = convert(OP_ENTERSUB, OPf_STACKED|OPf_SPECIAL,
4257                             op_append_elem(OP_LIST,
4258                                         op_prepend_elem(OP_LIST, pack, list(version)),
4259                                         newSVOP(OP_METHOD_NAMED, 0, meth)));
4260         }
4261     }
4262
4263     /* Fake up an import/unimport */
4264     if (arg && arg->op_type == OP_STUB) {
4265         if (PL_madskills)
4266             op_getmad(arg,pegop,'S');
4267         imop = arg;             /* no import on explicit () */
4268     }
4269     else if (SvNIOKp(((SVOP*)idop)->op_sv)) {
4270         imop = NULL;            /* use 5.0; */
4271         if (!aver)
4272             idop->op_private |= OPpCONST_NOVER;
4273     }
4274     else {
4275         SV *meth;
4276
4277         if (PL_madskills)
4278             op_getmad(arg,pegop,'A');
4279
4280         /* Make copy of idop so we don't free it twice */
4281         pack = newSVOP(OP_CONST, 0, newSVsv(((SVOP*)idop)->op_sv));
4282
4283         /* Fake up a method call to import/unimport */
4284         meth = aver
4285             ? newSVpvs_share("import") : newSVpvs_share("unimport");
4286         imop = convert(OP_ENTERSUB, OPf_STACKED|OPf_SPECIAL,
4287                        op_append_elem(OP_LIST,
4288                                    op_prepend_elem(OP_LIST, pack, list(arg)),
4289                                    newSVOP(OP_METHOD_NAMED, 0, meth)));
4290     }
4291
4292     /* Fake up the BEGIN {}, which does its thing immediately. */
4293     newATTRSUB(floor,
4294         newSVOP(OP_CONST, 0, newSVpvs_share("BEGIN")),
4295         NULL,
4296         NULL,
4297         op_append_elem(OP_LINESEQ,
4298             op_append_elem(OP_LINESEQ,
4299                 newSTATEOP(0, NULL, newUNOP(OP_REQUIRE, 0, idop)),
4300                 newSTATEOP(0, NULL, veop)),
4301             newSTATEOP(0, NULL, imop) ));
4302
4303     /* The "did you use incorrect case?" warning used to be here.
4304      * The problem is that on case-insensitive filesystems one
4305      * might get false positives for "use" (and "require"):
4306      * "use Strict" or "require CARP" will work.  This causes
4307      * portability problems for the script: in case-strict
4308      * filesystems the script will stop working.
4309      *
4310      * The "incorrect case" warning checked whether "use Foo"
4311      * imported "Foo" to your namespace, but that is wrong, too:
4312      * there is no requirement nor promise in the language that
4313      * a Foo.pm should or would contain anything in package "Foo".
4314      *
4315      * There is very little Configure-wise that can be done, either:
4316      * the case-sensitivity of the build filesystem of Perl does not
4317      * help in guessing the case-sensitivity of the runtime environment.
4318      */
4319
4320     PL_hints |= HINT_BLOCK_SCOPE;
4321     PL_parser->copline = NOLINE;
4322     PL_parser->expect = XSTATE;
4323     PL_cop_seqmax++; /* Purely for B::*'s benefit */
4324
4325 #ifdef PERL_MAD
4326     if (!PL_madskills) {
4327         /* FIXME - don't allocate pegop if !PL_madskills */
4328         op_free(pegop);
4329         return NULL;
4330     }
4331     return pegop;
4332 #endif
4333 }
4334
4335 /*
4336 =head1 Embedding Functions
4337
4338 =for apidoc load_module
4339
4340 Loads the module whose name is pointed to by the string part of name.
4341 Note that the actual module name, not its filename, should be given.
4342 Eg, "Foo::Bar" instead of "Foo/Bar.pm".  flags can be any of
4343 PERL_LOADMOD_DENY, PERL_LOADMOD_NOIMPORT, or PERL_LOADMOD_IMPORT_OPS
4344 (or 0 for no flags). ver, if specified, provides version semantics
4345 similar to C<use Foo::Bar VERSION>.  The optional trailing SV*
4346 arguments can be used to specify arguments to the module's import()
4347 method, similar to C<use Foo::Bar VERSION LIST>.  They must be
4348 terminated with a final NULL pointer.  Note that this list can only
4349 be omitted when the PERL_LOADMOD_NOIMPORT flag has been used.
4350 Otherwise at least a single NULL pointer to designate the default
4351 import list is required.
4352
4353 =cut */
4354
4355 void
4356 Perl_load_module(pTHX_ U32 flags, SV *name, SV *ver, ...)
4357 {
4358     va_list args;
4359
4360     PERL_ARGS_ASSERT_LOAD_MODULE;
4361
4362     va_start(args, ver);
4363     vload_module(flags, name, ver, &args);
4364     va_end(args);
4365 }
4366
4367 #ifdef PERL_IMPLICIT_CONTEXT
4368 void
4369 Perl_load_module_nocontext(U32 flags, SV *name, SV *ver, ...)
4370 {
4371     dTHX;
4372     va_list args;
4373     PERL_ARGS_ASSERT_LOAD_MODULE_NOCONTEXT;
4374     va_start(args, ver);
4375     vload_module(flags, name, ver, &args);
4376     va_end(args);
4377 }
4378 #endif
4379
4380 void
4381 Perl_vload_module(pTHX_ U32 flags, SV *name, SV *ver, va_list *args)
4382 {
4383     dVAR;
4384     OP *veop, *imop;
4385     OP * const modname = newSVOP(OP_CONST, 0, name);
4386
4387     PERL_ARGS_ASSERT_VLOAD_MODULE;
4388
4389     modname->op_private |= OPpCONST_BARE;
4390     if (ver) {
4391         veop = newSVOP(OP_CONST, 0, ver);
4392     }
4393     else
4394         veop = NULL;
4395     if (flags & PERL_LOADMOD_NOIMPORT) {
4396         imop = sawparens(newNULLLIST());
4397     }
4398     else if (flags & PERL_LOADMOD_IMPORT_OPS) {
4399         imop = va_arg(*args, OP*);
4400     }
4401     else {
4402         SV *sv;
4403         imop = NULL;
4404         sv = va_arg(*args, SV*);
4405         while (sv) {
4406             imop = op_append_elem(OP_LIST, imop, newSVOP(OP_CONST, 0, sv));
4407             sv = va_arg(*args, SV*);
4408         }
4409     }
4410
4411     /* utilize() fakes up a BEGIN { require ..; import ... }, so make sure
4412      * that it has a PL_parser to play with while doing that, and also
4413      * that it doesn't mess with any existing parser, by creating a tmp
4414      * new parser with lex_start(). This won't actually be used for much,
4415      * since pp_require() will create another parser for the real work. */
4416
4417     ENTER;
4418     SAVEVPTR(PL_curcop);
4419     lex_start(NULL, NULL, 0);
4420     utilize(!(flags & PERL_LOADMOD_DENY), start_subparse(FALSE, 0),
4421             veop, modname, imop);
4422     LEAVE;
4423 }
4424
4425 OP *
4426 Perl_dofile(pTHX_ OP *term, I32 force_builtin)
4427 {
4428     dVAR;
4429     OP *doop;
4430     GV *gv = NULL;
4431
4432     PERL_ARGS_ASSERT_DOFILE;
4433
4434     if (!force_builtin) {
4435         gv = gv_fetchpvs("do", GV_NOTQUAL, SVt_PVCV);
4436         if (!(gv && GvCVu(gv) && GvIMPORTED_CV(gv))) {
4437             GV * const * const gvp = (GV**)hv_fetchs(PL_globalstash, "do", FALSE);
4438             gv = gvp ? *gvp : NULL;
4439         }
4440     }
4441
4442     if (gv && GvCVu(gv) && GvIMPORTED_CV(gv)) {
4443         doop = ck_subr(newUNOP(OP_ENTERSUB, OPf_STACKED,
4444                                op_append_elem(OP_LIST, term,
4445                                            scalar(newUNOP(OP_RV2CV, 0,
4446                                                           newGVOP(OP_GV, 0, gv))))));
4447     }
4448     else {
4449         doop = newUNOP(OP_DOFILE, 0, scalar(term));
4450     }
4451     return doop;
4452 }
4453
4454 /*
4455 =head1 Optree construction
4456
4457 =for apidoc Am|OP *|newSLICEOP|I32 flags|OP *subscript|OP *listval
4458
4459 Constructs, checks, and returns an C<lslice> (list slice) op.  I<flags>
4460 gives the eight bits of C<op_flags>, except that C<OPf_KIDS> will
4461 be set automatically, and, shifted up eight bits, the eight bits of
4462 C<op_private>, except that the bit with value 1 or 2 is automatically
4463 set as required.  I<listval> and I<subscript> supply the parameters of
4464 the slice; they are consumed by this function and become part of the
4465 constructed op tree.
4466
4467 =cut
4468 */
4469
4470 OP *
4471 Perl_newSLICEOP(pTHX_ I32 flags, OP *subscript, OP *listval)
4472 {
4473     return newBINOP(OP_LSLICE, flags,
4474             list(force_list(subscript)),
4475             list(force_list(listval)) );
4476 }
4477
4478 STATIC I32
4479 S_is_list_assignment(pTHX_ register const OP *o)
4480 {
4481     unsigned type;
4482     U8 flags;
4483
4484     if (!o)
4485         return TRUE;
4486
4487     if ((o->op_type == OP_NULL) && (o->op_flags & OPf_KIDS))
4488         o = cUNOPo->op_first;
4489
4490     flags = o->op_flags;
4491     type = o->op_type;
4492     if (type == OP_COND_EXPR) {
4493         const I32 t = is_list_assignment(cLOGOPo->op_first->op_sibling);
4494         const I32 f = is_list_assignment(cLOGOPo->op_first->op_sibling->op_sibling);
4495
4496         if (t && f)
4497             return TRUE;
4498         if (t || f)
4499             yyerror("Assignment to both a list and a scalar");
4500         return FALSE;
4501     }
4502
4503     if (type == OP_LIST &&
4504         (flags & OPf_WANT) == OPf_WANT_SCALAR &&
4505         o->op_private & OPpLVAL_INTRO)
4506         return FALSE;
4507
4508     if (type == OP_LIST || flags & OPf_PARENS ||
4509         type == OP_RV2AV || type == OP_RV2HV ||
4510         type == OP_ASLICE || type == OP_HSLICE)
4511         return TRUE;
4512
4513     if (type == OP_PADAV || type == OP_PADHV)
4514         return TRUE;
4515
4516     if (type == OP_RV2SV)
4517         return FALSE;
4518
4519     return FALSE;
4520 }
4521
4522 /*
4523 =for apidoc Am|OP *|newASSIGNOP|I32 flags|OP *left|I32 optype|OP *right
4524
4525 Constructs, checks, and returns an assignment op.  I<left> and I<right>
4526 supply the parameters of the assignment; they are consumed by this
4527 function and become part of the constructed op tree.
4528
4529 If I<optype> is C<OP_ANDASSIGN>, C<OP_ORASSIGN>, or C<OP_DORASSIGN>, then
4530 a suitable conditional optree is constructed.  If I<optype> is the opcode
4531 of a binary operator, such as C<OP_BIT_OR>, then an op is constructed that
4532 performs the binary operation and assigns the result to the left argument.
4533 Either way, if I<optype> is non-zero then I<flags> has no effect.
4534
4535 If I<optype> is zero, then a plain scalar or list assignment is
4536 constructed.  Which type of assignment it is is automatically determined.
4537 I<flags> gives the eight bits of C<op_flags>, except that C<OPf_KIDS>
4538 will be set automatically, and, shifted up eight bits, the eight bits
4539 of C<op_private>, except that the bit with value 1 or 2 is automatically
4540 set as required.
4541
4542 =cut
4543 */
4544
4545 OP *
4546 Perl_newASSIGNOP(pTHX_ I32 flags, OP *left, I32 optype, OP *right)
4547 {
4548     dVAR;
4549     OP *o;
4550
4551     if (optype) {
4552         if (optype == OP_ANDASSIGN || optype == OP_ORASSIGN || optype == OP_DORASSIGN) {
4553             return newLOGOP(optype, 0,
4554                 op_lvalue(scalar(left), optype),
4555                 newUNOP(OP_SASSIGN, 0, scalar(right)));
4556         }
4557         else {
4558             return newBINOP(optype, OPf_STACKED,
4559                 op_lvalue(scalar(left), optype), scalar(right));
4560         }
4561     }
4562
4563     if (is_list_assignment(left)) {
4564         static const char no_list_state[] = "Initialization of state variables"
4565             " in list context currently forbidden";
4566         OP *curop;
4567         bool maybe_common_vars = TRUE;
4568
4569         PL_modcount = 0;
4570         /* Grandfathering $[ assignment here.  Bletch.*/
4571         /* Only simple assignments like C<< ($[) = 1 >> are allowed */
4572         PL_eval_start = (left->op_type == OP_CONST) ? right : NULL;
4573         left = op_lvalue(left, OP_AASSIGN);
4574         if (PL_eval_start)
4575             PL_eval_start = 0;
4576         else if (left->op_type == OP_CONST) {
4577             deprecate("assignment to $[");
4578             /* FIXME for MAD */
4579             /* Result of assignment is always 1 (or we'd be dead already) */
4580             return newSVOP(OP_CONST, 0, newSViv(1));
4581         }
4582         curop = list(force_list(left));
4583         o = newBINOP(OP_AASSIGN, flags, list(force_list(right)), curop);
4584         o->op_private = (U8)(0 | (flags >> 8));
4585
4586         if ((left->op_type == OP_LIST
4587              || (left->op_type == OP_NULL && left->op_targ == OP_LIST)))
4588         {
4589             OP* lop = ((LISTOP*)left)->op_first;
4590             maybe_common_vars = FALSE;
4591             while (lop) {
4592                 if (lop->op_type == OP_PADSV ||
4593                     lop->op_type == OP_PADAV ||
4594                     lop->op_type == OP_PADHV ||
4595                     lop->op_type == OP_PADANY) {
4596                     if (!(lop->op_private & OPpLVAL_INTRO))
4597                         maybe_common_vars = TRUE;
4598
4599                     if (lop->op_private & OPpPAD_STATE) {
4600                         if (left->op_private & OPpLVAL_INTRO) {
4601                             /* Each variable in state($a, $b, $c) = ... */
4602                         }
4603                         else {
4604                             /* Each state variable in
4605                                (state $a, my $b, our $c, $d, undef) = ... */
4606                         }
4607                         yyerror(no_list_state);
4608                     } else {
4609                         /* Each my variable in
4610                            (state $a, my $b, our $c, $d, undef) = ... */
4611                     }
4612                 } else if (lop->op_type == OP_UNDEF ||
4613                            lop->op_type == OP_PUSHMARK) {
4614                     /* undef may be interesting in
4615                        (state $a, undef, state $c) */
4616                 } else {
4617                     /* Other ops in the list. */
4618                     maybe_common_vars = TRUE;
4619                 }
4620                 lop = lop->op_sibling;
4621             }
4622         }
4623         else if ((left->op_private & OPpLVAL_INTRO)
4624                 && (   left->op_type == OP_PADSV
4625                     || left->op_type == OP_PADAV
4626                     || left->op_type == OP_PADHV
4627                     || left->op_type == OP_PADANY))
4628         {
4629             if (left->op_type == OP_PADSV) maybe_common_vars = FALSE;
4630             if (left->op_private & OPpPAD_STATE) {
4631                 /* All single variable list context state assignments, hence
4632                    state ($a) = ...
4633                    (state $a) = ...
4634                    state @a = ...
4635                    state (@a) = ...
4636                    (state @a) = ...
4637                    state %a = ...
4638                    state (%a) = ...
4639                    (state %a) = ...
4640                 */
4641                 yyerror(no_list_state);
4642             }
4643         }
4644
4645         /* PL_generation sorcery:
4646          * an assignment like ($a,$b) = ($c,$d) is easier than
4647          * ($a,$b) = ($c,$a), since there is no need for temporary vars.
4648          * To detect whether there are common vars, the global var
4649          * PL_generation is incremented for each assign op we compile.
4650          * Then, while compiling the assign op, we run through all the
4651          * variables on both sides of the assignment, setting a spare slot
4652          * in each of them to PL_generation. If any of them already have
4653          * that value, we know we've got commonality.  We could use a
4654          * single bit marker, but then we'd have to make 2 passes, first
4655          * to clear the flag, then to test and set it.  To find somewhere
4656          * to store these values, evil chicanery is done with SvUVX().
4657          */
4658
4659         if (maybe_common_vars) {
4660             OP *lastop = o;
4661             PL_generation++;
4662             for (curop = LINKLIST(o); curop != o; curop = LINKLIST(curop)) {
4663                 if (PL_opargs[curop->op_type] & OA_DANGEROUS) {
4664                     if (curop->op_type == OP_GV) {
4665                         GV *gv = cGVOPx_gv(curop);
4666                         if (gv == PL_defgv
4667                             || (int)GvASSIGN_GENERATION(gv) == PL_generation)
4668                             break;
4669                         GvASSIGN_GENERATION_set(gv, PL_generation);
4670                     }
4671                     else if (curop->op_type == OP_PADSV ||
4672                              curop->op_type == OP_PADAV ||
4673                              curop->op_type == OP_PADHV ||
4674                              curop->op_type == OP_PADANY)
4675                     {
4676                         if (PAD_COMPNAME_GEN(curop->op_targ)
4677                                                     == (STRLEN)PL_generation)
4678                             break;
4679                         PAD_COMPNAME_GEN_set(curop->op_targ, PL_generation);
4680
4681                     }
4682                     else if (curop->op_type == OP_RV2CV)
4683                         break;
4684                     else if (curop->op_type == OP_RV2SV ||
4685                              curop->op_type == OP_RV2AV ||
4686                              curop->op_type == OP_RV2HV ||
4687                              curop->op_type == OP_RV2GV) {
4688                         if (lastop->op_type != OP_GV)   /* funny deref? */
4689                             break;
4690                     }
4691                     else if (curop->op_type == OP_PUSHRE) {
4692 #ifdef USE_ITHREADS
4693                         if (((PMOP*)curop)->op_pmreplrootu.op_pmtargetoff) {
4694                             GV *const gv = MUTABLE_GV(PAD_SVl(((PMOP*)curop)->op_pmreplrootu.op_pmtargetoff));
4695                             if (gv == PL_defgv
4696                                 || (int)GvASSIGN_GENERATION(gv) == PL_generation)
4697                                 break;
4698                             GvASSIGN_GENERATION_set(gv, PL_generation);
4699                         }
4700 #else
4701                         GV *const gv
4702                             = ((PMOP*)curop)->op_pmreplrootu.op_pmtargetgv;
4703                         if (gv) {
4704                             if (gv == PL_defgv
4705                                 || (int)GvASSIGN_GENERATION(gv) == PL_generation)
4706                                 break;
4707                             GvASSIGN_GENERATION_set(gv, PL_generation);
4708                         }
4709 #endif
4710                     }
4711                     else
4712                         break;
4713                 }
4714                 lastop = curop;
4715             }
4716             if (curop != o)
4717                 o->op_private |= OPpASSIGN_COMMON;
4718         }
4719
4720         if (right && right->op_type == OP_SPLIT && !PL_madskills) {
4721             OP* tmpop = ((LISTOP*)right)->op_first;
4722             if (tmpop && (tmpop->op_type == OP_PUSHRE)) {
4723                 PMOP * const pm = (PMOP*)tmpop;
4724                 if (left->op_type == OP_RV2AV &&
4725                     !(left->op_private & OPpLVAL_INTRO) &&
4726                     !(o->op_private & OPpASSIGN_COMMON) )
4727                 {
4728                     tmpop = ((UNOP*)left)->op_first;
4729                     if (tmpop->op_type == OP_GV
4730 #ifdef USE_ITHREADS
4731                         && !pm->op_pmreplrootu.op_pmtargetoff
4732 #else
4733                         && !pm->op_pmreplrootu.op_pmtargetgv
4734 #endif
4735                         ) {
4736 #ifdef USE_ITHREADS
4737                         pm->op_pmreplrootu.op_pmtargetoff
4738                             = cPADOPx(tmpop)->op_padix;
4739                         cPADOPx(tmpop)->op_padix = 0;   /* steal it */
4740 #else
4741                         pm->op_pmreplrootu.op_pmtargetgv
4742                             = MUTABLE_GV(cSVOPx(tmpop)->op_sv);
4743                         cSVOPx(tmpop)->op_sv = NULL;    /* steal it */
4744 #endif
4745                         pm->op_pmflags |= PMf_ONCE;
4746                         tmpop = cUNOPo->op_first;       /* to list (nulled) */
4747                         tmpop = ((UNOP*)tmpop)->op_first; /* to pushmark */
4748                         tmpop->op_sibling = NULL;       /* don't free split */
4749                         right->op_next = tmpop->op_next;  /* fix starting loc */
4750                         op_free(o);                     /* blow off assign */
4751                         right->op_flags &= ~OPf_WANT;
4752                                 /* "I don't know and I don't care." */
4753                         return right;
4754                     }
4755                 }
4756                 else {
4757                    if (PL_modcount < RETURN_UNLIMITED_NUMBER &&
4758                       ((LISTOP*)right)->op_last->op_type == OP_CONST)
4759                     {
4760                         SV *sv = ((SVOP*)((LISTOP*)right)->op_last)->op_sv;
4761                         if (SvIOK(sv) && SvIVX(sv) == 0)
4762                             sv_setiv(sv, PL_modcount+1);
4763                     }
4764                 }
4765             }
4766         }
4767         return o;
4768     }
4769     if (!right)
4770         right = newOP(OP_UNDEF, 0);
4771     if (right->op_type == OP_READLINE) {
4772         right->op_flags |= OPf_STACKED;
4773         return newBINOP(OP_NULL, flags, op_lvalue(scalar(left), OP_SASSIGN),
4774                 scalar(right));
4775     }
4776     else {
4777         PL_eval_start = right;  /* Grandfathering $[ assignment here.  Bletch.*/
4778         o = newBINOP(OP_SASSIGN, flags,
4779             scalar(right), op_lvalue(scalar(left), OP_SASSIGN) );
4780         if (PL_eval_start)
4781             PL_eval_start = 0;
4782         else {
4783             if (!PL_madskills) { /* assignment to $[ is ignored when making a mad dump */
4784                 deprecate("assignment to $[");
4785                 op_free(o);
4786                 o = newSVOP(OP_CONST, 0, newSViv(CopARYBASE_get(&PL_compiling)));
4787                 o->op_private |= OPpCONST_ARYBASE;
4788             }
4789         }
4790     }
4791     return o;
4792 }
4793
4794 /*
4795 =for apidoc Am|OP *|newSTATEOP|I32 flags|char *label|OP *o
4796
4797 Constructs a state op (COP).  The state op is normally a C<nextstate> op,
4798 but will be a C<dbstate> op if debugging is enabled for currently-compiled
4799 code.  The state op is populated from L</PL_curcop> (or L</PL_compiling>).
4800 If I<label> is non-null, it supplies the name of a label to attach to
4801 the state op; this function takes ownership of the memory pointed at by
4802 I<label>, and will free it.  I<flags> gives the eight bits of C<op_flags>
4803 for the state op.
4804
4805 If I<o> is null, the state op is returned.  Otherwise the state op is
4806 combined with I<o> into a C<lineseq> list op, which is returned.  I<o>
4807 is consumed by this function and becomes part of the returned op tree.
4808
4809 =cut
4810 */
4811
4812 OP *
4813 Perl_newSTATEOP(pTHX_ I32 flags, char *label, OP *o)
4814 {
4815     dVAR;
4816     const U32 seq = intro_my();
4817     register COP *cop;
4818
4819     NewOp(1101, cop, 1, COP);
4820     if (PERLDB_LINE && CopLINE(PL_curcop) && PL_curstash != PL_debstash) {
4821         cop->op_type = OP_DBSTATE;
4822         cop->op_ppaddr = PL_ppaddr[ OP_DBSTATE ];
4823     }
4824     else {
4825         cop->op_type = OP_NEXTSTATE;
4826         cop->op_ppaddr = PL_ppaddr[ OP_NEXTSTATE ];
4827     }
4828     cop->op_flags = (U8)flags;
4829     CopHINTS_set(cop, PL_hints);
4830 #ifdef NATIVE_HINTS
4831     cop->op_private |= NATIVE_HINTS;
4832 #endif
4833     CopHINTS_set(&PL_compiling, CopHINTS_get(cop));
4834     cop->op_next = (OP*)cop;
4835
4836     cop->cop_seq = seq;
4837     /* CopARYBASE is now "virtual", in that it's stored as a flag bit in
4838        CopHINTS and a possible value in cop_hints_hash, so no need to copy it.
4839     */
4840     cop->cop_warnings = DUP_WARNINGS(PL_curcop->cop_warnings);
4841     CopHINTHASH_set(cop, cophh_copy(CopHINTHASH_get(PL_curcop)));
4842     if (label) {
4843         Perl_store_cop_label(aTHX_ cop, label, strlen(label), 0);
4844                                                      
4845         PL_hints |= HINT_BLOCK_SCOPE;
4846         /* It seems that we need to defer freeing this pointer, as other parts
4847            of the grammar end up wanting to copy it after this op has been
4848            created. */
4849         SAVEFREEPV(label);
4850     }
4851
4852     if (PL_parser && PL_parser->copline == NOLINE)
4853         CopLINE_set(cop, CopLINE(PL_curcop));
4854     else {
4855         CopLINE_set(cop, PL_parser->copline);
4856         if (PL_parser)
4857             PL_parser->copline = NOLINE;
4858     }
4859 #ifdef USE_ITHREADS
4860     CopFILE_set(cop, CopFILE(PL_curcop));       /* XXX share in a pvtable? */
4861 #else
4862     CopFILEGV_set(cop, CopFILEGV(PL_curcop));
4863 #endif
4864     CopSTASH_set(cop, PL_curstash);
4865
4866     if ((PERLDB_LINE || PERLDB_SAVESRC) && PL_curstash != PL_debstash) {
4867         /* this line can have a breakpoint - store the cop in IV */
4868         AV *av = CopFILEAVx(PL_curcop);
4869         if (av) {
4870             SV * const * const svp = av_fetch(av, (I32)CopLINE(cop), FALSE);
4871             if (svp && *svp != &PL_sv_undef ) {
4872                 (void)SvIOK_on(*svp);
4873                 SvIV_set(*svp, PTR2IV(cop));
4874             }
4875         }
4876     }
4877
4878     if (flags & OPf_SPECIAL)
4879         op_null((OP*)cop);
4880     return op_prepend_elem(OP_LINESEQ, (OP*)cop, o);
4881 }
4882
4883 /*
4884 =for apidoc Am|OP *|newLOGOP|I32 type|I32 flags|OP *first|OP *other
4885
4886 Constructs, checks, and returns a logical (flow control) op.  I<type>
4887 is the opcode.  I<flags> gives the eight bits of C<op_flags>, except
4888 that C<OPf_KIDS> will be set automatically, and, shifted up eight bits,
4889 the eight bits of C<op_private>, except that the bit with value 1 is
4890 automatically set.  I<first> supplies the expression controlling the
4891 flow, and I<other> supplies the side (alternate) chain of ops; they are
4892 consumed by this function and become part of the constructed op tree.
4893
4894 =cut
4895 */
4896
4897 OP *
4898 Perl_newLOGOP(pTHX_ I32 type, I32 flags, OP *first, OP *other)
4899 {
4900     dVAR;
4901
4902     PERL_ARGS_ASSERT_NEWLOGOP;
4903
4904     return new_logop(type, flags, &first, &other);
4905 }
4906
4907 STATIC OP *
4908 S_search_const(pTHX_ OP *o)
4909 {
4910     PERL_ARGS_ASSERT_SEARCH_CONST;
4911
4912     switch (o->op_type) {
4913         case OP_CONST:
4914             return o;
4915         case OP_NULL:
4916             if (o->op_flags & OPf_KIDS)
4917                 return search_const(cUNOPo->op_first);
4918             break;
4919         case OP_LEAVE:
4920         case OP_SCOPE:
4921         case OP_LINESEQ:
4922         {
4923             OP *kid;
4924             if (!(o->op_flags & OPf_KIDS))
4925                 return NULL;
4926             kid = cLISTOPo->op_first;
4927             do {
4928                 switch (kid->op_type) {
4929                     case OP_ENTER:
4930                     case OP_NULL:
4931                     case OP_NEXTSTATE:
4932                         kid = kid->op_sibling;
4933                         break;
4934                     default:
4935                         if (kid != cLISTOPo->op_last)
4936                             return NULL;
4937                         goto last;
4938                 }
4939             } while (kid);
4940             if (!kid)
4941                 kid = cLISTOPo->op_last;
4942 last:
4943             return search_const(kid);
4944         }
4945     }
4946
4947     return NULL;
4948 }
4949
4950 STATIC OP *
4951 S_new_logop(pTHX_ I32 type, I32 flags, OP** firstp, OP** otherp)
4952 {
4953     dVAR;
4954     LOGOP *logop;
4955     OP *o;
4956     OP *first;
4957     OP *other;
4958     OP *cstop = NULL;
4959     int prepend_not = 0;
4960
4961     PERL_ARGS_ASSERT_NEW_LOGOP;
4962
4963     first = *firstp;
4964     other = *otherp;
4965
4966     if (type == OP_XOR)         /* Not short circuit, but here by precedence. */
4967         return newBINOP(type, flags, scalar(first), scalar(other));
4968
4969     assert((PL_opargs[type] & OA_CLASS_MASK) == OA_LOGOP);
4970
4971     scalarboolean(first);
4972     /* optimize AND and OR ops that have NOTs as children */
4973     if (first->op_type == OP_NOT
4974         && (first->op_flags & OPf_KIDS)
4975         && ((first->op_flags & OPf_SPECIAL) /* unless ($x) { } */
4976             || (other->op_type == OP_NOT))  /* if (!$x && !$y) { } */
4977         && !PL_madskills) {
4978         if (type == OP_AND || type == OP_OR) {
4979             if (type == OP_AND)
4980                 type = OP_OR;
4981             else
4982                 type = OP_AND;
4983             op_null(first);
4984             if (other->op_type == OP_NOT) { /* !a AND|OR !b => !(a OR|AND b) */
4985                 op_null(other);
4986                 prepend_not = 1; /* prepend a NOT op later */
4987             }
4988         }
4989     }
4990     /* search for a constant op that could let us fold the test */
4991     if ((cstop = search_const(first))) {
4992         if (cstop->op_private & OPpCONST_STRICT)
4993             no_bareword_allowed(cstop);
4994         else if ((cstop->op_private & OPpCONST_BARE))
4995                 Perl_ck_warner(aTHX_ packWARN(WARN_BAREWORD), "Bareword found in conditional");
4996         if ((type == OP_AND &&  SvTRUE(((SVOP*)cstop)->op_sv)) ||
4997             (type == OP_OR  && !SvTRUE(((SVOP*)cstop)->op_sv)) ||
4998             (type == OP_DOR && !SvOK(((SVOP*)cstop)->op_sv))) {
4999             *firstp = NULL;
5000             if (other->op_type == OP_CONST)
5001                 other->op_private |= OPpCONST_SHORTCIRCUIT;
5002             if (PL_madskills) {
5003                 OP *newop = newUNOP(OP_NULL, 0, other);
5004                 op_getmad(first, newop, '1');
5005                 newop->op_targ = type;  /* set "was" field */
5006                 return newop;
5007             }
5008             op_free(first);
5009             if (other->op_type == OP_LEAVE)
5010                 other = newUNOP(OP_NULL, OPf_SPECIAL, other);
5011             else if (other->op_type == OP_MATCH
5012                   || other->op_type == OP_SUBST
5013                   || other->op_type == OP_TRANSR
5014                   || other->op_type == OP_TRANS)
5015                 /* Mark the op as being unbindable with =~ */
5016                 other->op_flags |= OPf_SPECIAL;
5017             return other;
5018         }
5019         else {
5020             /* check for C<my $x if 0>, or C<my($x,$y) if 0> */
5021             const OP *o2 = other;
5022             if ( ! (o2->op_type == OP_LIST
5023                     && (( o2 = cUNOPx(o2)->op_first))
5024                     && o2->op_type == OP_PUSHMARK
5025                     && (( o2 = o2->op_sibling)) )
5026             )
5027                 o2 = other;
5028             if ((o2->op_type == OP_PADSV || o2->op_type == OP_PADAV
5029                         || o2->op_type == OP_PADHV)
5030                 && o2->op_private & OPpLVAL_INTRO
5031                 && !(o2->op_private & OPpPAD_STATE))
5032             {
5033                 Perl_ck_warner_d(aTHX_ packWARN(WARN_DEPRECATED),
5034                                  "Deprecated use of my() in false conditional");
5035             }
5036
5037             *otherp = NULL;
5038             if (first->op_type == OP_CONST)
5039                 first->op_private |= OPpCONST_SHORTCIRCUIT;
5040             if (PL_madskills) {
5041                 first = newUNOP(OP_NULL, 0, first);
5042                 op_getmad(other, first, '2');
5043                 first->op_targ = type;  /* set "was" field */
5044             }
5045             else
5046                 op_free(other);
5047             return first;
5048         }
5049     }
5050     else if ((first->op_flags & OPf_KIDS) && type != OP_DOR
5051         && ckWARN(WARN_MISC)) /* [#24076] Don't warn for <FH> err FOO. */
5052     {
5053         const OP * const k1 = ((UNOP*)first)->op_first;
5054         const OP * const k2 = k1->op_sibling;
5055         OPCODE warnop = 0;
5056         switch (first->op_type)
5057         {
5058         case OP_NULL:
5059             if (k2 && k2->op_type == OP_READLINE
5060                   && (k2->op_flags & OPf_STACKED)
5061                   && ((k1->op_flags & OPf_WANT) == OPf_WANT_SCALAR))
5062             {
5063                 warnop = k2->op_type;
5064             }
5065             break;
5066
5067         case OP_SASSIGN:
5068             if (k1->op_type == OP_READDIR
5069                   || k1->op_type == OP_GLOB
5070                   || (k1->op_type == OP_NULL && k1->op_targ == OP_GLOB)
5071                   || k1->op_type == OP_EACH)
5072             {
5073                 warnop = ((k1->op_type == OP_NULL)
5074                           ? (OPCODE)k1->op_targ : k1->op_type);
5075             }
5076             break;
5077         }
5078         if (warnop) {
5079             const line_t oldline = CopLINE(PL_curcop);
5080             CopLINE_set(PL_curcop, PL_parser->copline);
5081             Perl_warner(aTHX_ packWARN(WARN_MISC),
5082                  "Value of %s%s can be \"0\"; test with defined()",
5083                  PL_op_desc[warnop],
5084                  ((warnop == OP_READLINE || warnop == OP_GLOB)
5085                   ? " construct" : "() operator"));
5086             CopLINE_set(PL_curcop, oldline);
5087         }
5088     }
5089
5090     if (!other)
5091         return first;
5092
5093     if (type == OP_ANDASSIGN || type == OP_ORASSIGN || type == OP_DORASSIGN)
5094         other->op_private |= OPpASSIGN_BACKWARDS;  /* other is an OP_SASSIGN */
5095
5096     NewOp(1101, logop, 1, LOGOP);
5097
5098     logop->op_type = (OPCODE)type;
5099     logop->op_ppaddr = PL_ppaddr[type];
5100     logop->op_first = first;
5101     logop->op_flags = (U8)(flags | OPf_KIDS);
5102     logop->op_other = LINKLIST(other);
5103     logop->op_private = (U8)(1 | (flags >> 8));
5104
5105     /* establish postfix order */
5106     logop->op_next = LINKLIST(first);
5107     first->op_next = (OP*)logop;
5108     first->op_sibling = other;
5109
5110     CHECKOP(type,logop);
5111
5112     o = newUNOP(prepend_not ? OP_NOT : OP_NULL, 0, (OP*)logop);
5113     other->op_next = o;
5114
5115     return o;
5116 }
5117
5118 /*
5119 =for apidoc Am|OP *|newCONDOP|I32 flags|OP *first|OP *trueop|OP *falseop
5120
5121 Constructs, checks, and returns a conditional-expression (C<cond_expr>)
5122 op.  I<flags> gives the eight bits of C<op_flags>, except that C<OPf_KIDS>
5123 will be set automatically, and, shifted up eight bits, the eight bits of
5124 C<op_private>, except that the bit with value 1 is automatically set.
5125 I<first> supplies the expression selecting between the two branches,
5126 and I<trueop> and I<falseop> supply the branches; they are consumed by
5127 this function and become part of the constructed op tree.
5128
5129 =cut
5130 */
5131
5132 OP *
5133 Perl_newCONDOP(pTHX_ I32 flags, OP *first, OP *trueop, OP *falseop)
5134 {
5135     dVAR;
5136     LOGOP *logop;
5137     OP *start;
5138     OP *o;
5139     OP *cstop;
5140
5141     PERL_ARGS_ASSERT_NEWCONDOP;
5142
5143     if (!falseop)
5144         return newLOGOP(OP_AND, 0, first, trueop);
5145     if (!trueop)
5146         return newLOGOP(OP_OR, 0, first, falseop);
5147
5148     scalarboolean(first);
5149     if ((cstop = search_const(first))) {
5150         /* Left or right arm of the conditional?  */
5151         const bool left = SvTRUE(((SVOP*)cstop)->op_sv);
5152         OP *live = left ? trueop : falseop;
5153         OP *const dead = left ? falseop : trueop;
5154         if (cstop->op_private & OPpCONST_BARE &&
5155             cstop->op_private & OPpCONST_STRICT) {
5156             no_bareword_allowed(cstop);
5157         }
5158         if (PL_madskills) {
5159             /* This is all dead code when PERL_MAD is not defined.  */
5160             live = newUNOP(OP_NULL, 0, live);
5161             op_getmad(first, live, 'C');
5162             op_getmad(dead, live, left ? 'e' : 't');
5163         } else {
5164             op_free(first);
5165             op_free(dead);
5166         }
5167         if (live->op_type == OP_LEAVE)
5168             live = newUNOP(OP_NULL, OPf_SPECIAL, live);
5169         else if (live->op_type == OP_MATCH || live->op_type == OP_SUBST
5170               || live->op_type == OP_TRANS || live->op_type == OP_TRANSR)
5171             /* Mark the op as being unbindable with =~ */
5172             live->op_flags |= OPf_SPECIAL;
5173         return live;
5174     }
5175     NewOp(1101, logop, 1, LOGOP);
5176     logop->op_type = OP_COND_EXPR;
5177     logop->op_ppaddr = PL_ppaddr[OP_COND_EXPR];
5178     logop->op_first = first;
5179     logop->op_flags = (U8)(flags | OPf_KIDS);
5180     logop->op_private = (U8)(1 | (flags >> 8));
5181     logop->op_other = LINKLIST(trueop);
5182     logop->op_next = LINKLIST(falseop);
5183
5184     CHECKOP(OP_COND_EXPR, /* that's logop->op_type */
5185             logop);
5186
5187     /* establish postfix order */
5188     start = LINKLIST(first);
5189     first->op_next = (OP*)logop;
5190
5191     first->op_sibling = trueop;
5192     trueop->op_sibling = falseop;
5193     o = newUNOP(OP_NULL, 0, (OP*)logop);
5194
5195     trueop->op_next = falseop->op_next = o;
5196
5197     o->op_next = start;
5198     return o;
5199 }
5200
5201 /*
5202 =for apidoc Am|OP *|newRANGE|I32 flags|OP *left|OP *right
5203
5204 Constructs and returns a C<range> op, with subordinate C<flip> and
5205 C<flop> ops.  I<flags> gives the eight bits of C<op_flags> for the
5206 C<flip> op and, shifted up eight bits, the eight bits of C<op_private>
5207 for both the C<flip> and C<range> ops, except that the bit with value
5208 1 is automatically set.  I<left> and I<right> supply the expressions
5209 controlling the endpoints of the range; they are consumed by this function
5210 and become part of the constructed op tree.
5211
5212 =cut
5213 */
5214
5215 OP *
5216 Perl_newRANGE(pTHX_ I32 flags, OP *left, OP *right)
5217 {
5218     dVAR;
5219     LOGOP *range;
5220     OP *flip;
5221     OP *flop;
5222     OP *leftstart;
5223     OP *o;
5224
5225     PERL_ARGS_ASSERT_NEWRANGE;
5226
5227     NewOp(1101, range, 1, LOGOP);
5228
5229     range->op_type = OP_RANGE;
5230     range->op_ppaddr = PL_ppaddr[OP_RANGE];
5231     range->op_first = left;
5232     range->op_flags = OPf_KIDS;
5233     leftstart = LINKLIST(left);
5234     range->op_other = LINKLIST(right);
5235     range->op_private = (U8)(1 | (flags >> 8));
5236
5237     left->op_sibling = right;
5238
5239     range->op_next = (OP*)range;
5240     flip = newUNOP(OP_FLIP, flags, (OP*)range);
5241     flop = newUNOP(OP_FLOP, 0, flip);
5242     o = newUNOP(OP_NULL, 0, flop);
5243     LINKLIST(flop);
5244     range->op_next = leftstart;
5245
5246     left->op_next = flip;
5247     right->op_next = flop;
5248
5249     range->op_targ = pad_alloc(OP_RANGE, SVs_PADMY);
5250     sv_upgrade(PAD_SV(range->op_targ), SVt_PVNV);
5251     flip->op_targ = pad_alloc(OP_RANGE, SVs_PADMY);
5252     sv_upgrade(PAD_SV(flip->op_targ), SVt_PVNV);
5253
5254     flip->op_private =  left->op_type == OP_CONST ? OPpFLIP_LINENUM : 0;
5255     flop->op_private = right->op_type == OP_CONST ? OPpFLIP_LINENUM : 0;
5256
5257     flip->op_next = o;
5258     if (!flip->op_private || !flop->op_private)
5259         LINKLIST(o);            /* blow off optimizer unless constant */
5260
5261     return o;
5262 }
5263
5264 /*
5265 =for apidoc Am|OP *|newLOOPOP|I32 flags|I32 debuggable|OP *expr|OP *block
5266
5267 Constructs, checks, and returns an op tree expressing a loop.  This is
5268 only a loop in the control flow through the op tree; it does not have
5269 the heavyweight loop structure that allows exiting the loop by C<last>
5270 and suchlike.  I<flags> gives the eight bits of C<op_flags> for the
5271 top-level op, except that some bits will be set automatically as required.
5272 I<expr> supplies the expression controlling loop iteration, and I<block>
5273 supplies the body of the loop; they are consumed by this function and
5274 become part of the constructed op tree.  I<debuggable> is currently
5275 unused and should always be 1.
5276
5277 =cut
5278 */
5279
5280 OP *
5281 Perl_newLOOPOP(pTHX_ I32 flags, I32 debuggable, OP *expr, OP *block)
5282 {
5283     dVAR;
5284     OP* listop;
5285     OP* o;
5286     const bool once = block && block->op_flags & OPf_SPECIAL &&
5287       (block->op_type == OP_ENTERSUB || block->op_type == OP_NULL);
5288
5289     PERL_UNUSED_ARG(debuggable);
5290
5291     if (expr) {
5292         if (once && expr->op_type == OP_CONST && !SvTRUE(((SVOP*)expr)->op_sv))
5293             return block;       /* do {} while 0 does once */
5294         if (expr->op_type == OP_READLINE
5295             || expr->op_type == OP_READDIR
5296             || expr->op_type == OP_GLOB
5297             || (expr->op_type == OP_NULL && expr->op_targ == OP_GLOB)) {
5298             expr = newUNOP(OP_DEFINED, 0,
5299                 newASSIGNOP(0, newDEFSVOP(), 0, expr) );
5300         } else if (expr->op_flags & OPf_KIDS) {
5301             const OP * const k1 = ((UNOP*)expr)->op_first;
5302             const OP * const k2 = k1 ? k1->op_sibling : NULL;
5303             switch (expr->op_type) {
5304               case OP_NULL:
5305                 if (k2 && (k2->op_type == OP_READLINE || k2->op_type == OP_READDIR)
5306                       && (k2->op_flags & OPf_STACKED)
5307                       && ((k1->op_flags & OPf_WANT) == OPf_WANT_SCALAR))
5308                     expr = newUNOP(OP_DEFINED, 0, expr);
5309                 break;
5310
5311               case OP_SASSIGN:
5312                 if (k1 && (k1->op_type == OP_READDIR
5313                       || k1->op_type == OP_GLOB
5314                       || (k1->op_type == OP_NULL && k1->op_targ == OP_GLOB)
5315                       || k1->op_type == OP_EACH))
5316                     expr = newUNOP(OP_DEFINED, 0, expr);
5317                 break;
5318             }
5319         }
5320     }
5321
5322     /* if block is null, the next op_append_elem() would put UNSTACK, a scalar
5323      * op, in listop. This is wrong. [perl #27024] */
5324     if (!block)
5325         block = newOP(OP_NULL, 0);
5326     listop = op_append_elem(OP_LINESEQ, block, newOP(OP_UNSTACK, 0));
5327     o = new_logop(OP_AND, 0, &expr, &listop);
5328
5329     if (listop)
5330         ((LISTOP*)listop)->op_last->op_next = LINKLIST(o);
5331
5332     if (once && o != listop)
5333         o->op_next = ((LOGOP*)cUNOPo->op_first)->op_other;
5334
5335     if (o == listop)
5336         o = newUNOP(OP_NULL, 0, o);     /* or do {} while 1 loses outer block */
5337
5338     o->op_flags |= flags;
5339     o = op_scope(o);
5340     o->op_flags |= OPf_SPECIAL; /* suppress POPBLOCK curpm restoration*/
5341     return o;
5342 }
5343
5344 /*
5345 =for apidoc Am|OP *|newWHILEOP|I32 flags|I32 debuggable|LOOP *loop|OP *expr|OP *block|OP *cont|I32 has_my
5346
5347 Constructs, checks, and returns an op tree expressing a C<while> loop.
5348 This is a heavyweight loop, with structure that allows exiting the loop
5349 by C<last> and suchlike.
5350
5351 I<loop> is an optional preconstructed C<enterloop> op to use in the
5352 loop; if it is null then a suitable op will be constructed automatically.
5353 I<expr> supplies the loop's controlling expression.  I<block> supplies the
5354 main body of the loop, and I<cont> optionally supplies a C<continue> block
5355 that operates as a second half of the body.  All of these optree inputs
5356 are consumed by this function and become part of the constructed op tree.
5357
5358 I<flags> gives the eight bits of C<op_flags> for the C<leaveloop>
5359 op and, shifted up eight bits, the eight bits of C<op_private> for
5360 the C<leaveloop> op, except that (in both cases) some bits will be set
5361 automatically.  I<debuggable> is currently unused and should always be 1.
5362 I<has_my> can be supplied as true to force the
5363 loop body to be enclosed in its own scope.
5364
5365 =cut
5366 */
5367
5368 OP *
5369 Perl_newWHILEOP(pTHX_ I32 flags, I32 debuggable, LOOP *loop,
5370         OP *expr, OP *block, OP *cont, I32 has_my)
5371 {
5372     dVAR;
5373     OP *redo;
5374     OP *next = NULL;
5375     OP *listop;
5376     OP *o;
5377     U8 loopflags = 0;
5378
5379     PERL_UNUSED_ARG(debuggable);
5380
5381     if (expr) {
5382         if (expr->op_type == OP_READLINE
5383          || expr->op_type == OP_READDIR
5384          || expr->op_type == OP_GLOB
5385                      || (expr->op_type == OP_NULL && expr->op_targ == OP_GLOB)) {
5386             expr = newUNOP(OP_DEFINED, 0,
5387                 newASSIGNOP(0, newDEFSVOP(), 0, expr) );
5388         } else if (expr->op_flags & OPf_KIDS) {
5389             const OP * const k1 = ((UNOP*)expr)->op_first;
5390             const OP * const k2 = (k1) ? k1->op_sibling : NULL;
5391             switch (expr->op_type) {
5392               case OP_NULL:
5393                 if (k2 && (k2->op_type == OP_READLINE || k2->op_type == OP_READDIR)
5394                       && (k2->op_flags & OPf_STACKED)
5395                       && ((k1->op_flags & OPf_WANT) == OPf_WANT_SCALAR))
5396                     expr = newUNOP(OP_DEFINED, 0, expr);
5397                 break;
5398
5399               case OP_SASSIGN:
5400                 if (k1 && (k1->op_type == OP_READDIR
5401                       || k1->op_type == OP_GLOB
5402                       || (k1->op_type == OP_NULL && k1->op_targ == OP_GLOB)
5403                       || k1->op_type == OP_EACH))
5404                     expr = newUNOP(OP_DEFINED, 0, expr);
5405                 break;
5406             }
5407         }
5408     }
5409
5410     if (!block)
5411         block = newOP(OP_NULL, 0);
5412     else if (cont || has_my) {
5413         block = op_scope(block);
5414     }
5415
5416     if (cont) {
5417         next = LINKLIST(cont);
5418     }
5419     if (expr) {
5420         OP * const unstack = newOP(OP_UNSTACK, 0);
5421         if (!next)
5422             next = unstack;
5423         cont = op_append_elem(OP_LINESEQ, cont, unstack);
5424     }
5425
5426     assert(block);
5427     listop = op_append_list(OP_LINESEQ, block, cont);
5428     assert(listop);
5429     redo = LINKLIST(listop);
5430
5431     if (expr) {
5432         scalar(listop);
5433         o = new_logop(OP_AND, 0, &expr, &listop);
5434         if (o == expr && o->op_type == OP_CONST && !SvTRUE(cSVOPo->op_sv)) {
5435             op_free(expr);              /* oops, it's a while (0) */
5436             op_free((OP*)loop);
5437             return NULL;                /* listop already freed by new_logop */
5438         }
5439         if (listop)
5440             ((LISTOP*)listop)->op_last->op_next =
5441                 (o == listop ? redo : LINKLIST(o));
5442     }
5443     else
5444         o = listop;
5445
5446     if (!loop) {
5447         NewOp(1101,loop,1,LOOP);
5448         loop->op_type = OP_ENTERLOOP;
5449         loop->op_ppaddr = PL_ppaddr[OP_ENTERLOOP];
5450         loop->op_private = 0;
5451         loop->op_next = (OP*)loop;
5452     }
5453
5454     o = newBINOP(OP_LEAVELOOP, 0, (OP*)loop, o);
5455
5456     loop->op_redoop = redo;
5457     loop->op_lastop = o;
5458     o->op_private |= loopflags;
5459
5460     if (next)
5461         loop->op_nextop = next;
5462     else
5463         loop->op_nextop = o;
5464
5465     o->op_flags |= flags;
5466     o->op_private |= (flags >> 8);
5467     return o;
5468 }
5469
5470 /*
5471 =for apidoc Am|OP *|newFOROP|I32 flags|OP *sv|OP *expr|OP *block|OP *cont
5472
5473 Constructs, checks, and returns an op tree expressing a C<foreach>
5474 loop (iteration through a list of values).  This is a heavyweight loop,
5475 with structure that allows exiting the loop by C<last> and suchlike.
5476
5477 I<sv> optionally supplies the variable that will be aliased to each
5478 item in turn; if null, it defaults to C<$_> (either lexical or global).
5479 I<expr> supplies the list of values to iterate over.  I<block> supplies
5480 the main body of the loop, and I<cont> optionally supplies a C<continue>
5481 block that operates as a second half of the body.  All of these optree
5482 inputs are consumed by this function and become part of the constructed
5483 op tree.
5484
5485 I<flags> gives the eight bits of C<op_flags> for the C<leaveloop>
5486 op and, shifted up eight bits, the eight bits of C<op_private> for
5487 the C<leaveloop> op, except that (in both cases) some bits will be set
5488 automatically.
5489
5490 =cut
5491 */
5492
5493 OP *
5494 Perl_newFOROP(pTHX_ I32 flags, OP *sv, OP *expr, OP *block, OP *cont)
5495 {
5496     dVAR;
5497     LOOP *loop;
5498     OP *wop;
5499     PADOFFSET padoff = 0;
5500     I32 iterflags = 0;
5501     I32 iterpflags = 0;
5502     OP *madsv = NULL;
5503
5504     PERL_ARGS_ASSERT_NEWFOROP;
5505
5506     if (sv) {
5507         if (sv->op_type == OP_RV2SV) {  /* symbol table variable */
5508             iterpflags = sv->op_private & OPpOUR_INTRO; /* for our $x () */
5509             sv->op_type = OP_RV2GV;
5510             sv->op_ppaddr = PL_ppaddr[OP_RV2GV];
5511
5512             /* The op_type check is needed to prevent a possible segfault
5513              * if the loop variable is undeclared and 'strict vars' is in
5514              * effect. This is illegal but is nonetheless parsed, so we
5515              * may reach this point with an OP_CONST where we're expecting
5516              * an OP_GV.
5517              */
5518             if (cUNOPx(sv)->op_first->op_type == OP_GV
5519              && cGVOPx_gv(cUNOPx(sv)->op_first) == PL_defgv)
5520                 iterpflags |= OPpITER_DEF;
5521         }
5522         else if (sv->op_type == OP_PADSV) { /* private variable */
5523             iterpflags = sv->op_private & OPpLVAL_INTRO; /* for my $x () */
5524             padoff = sv->op_targ;
5525             if (PL_madskills)
5526                 madsv = sv;
5527             else {
5528                 sv->op_targ = 0;
5529                 op_free(sv);
5530             }
5531             sv = NULL;
5532         }
5533         else
5534             Perl_croak(aTHX_ "Can't use %s for loop variable", PL_op_desc[sv->op_type]);
5535         if (padoff) {
5536             SV *const namesv = PAD_COMPNAME_SV(padoff);
5537             STRLEN len;
5538             const char *const name = SvPV_const(namesv, len);
5539
5540             if (len == 2 && name[0] == '$' && name[1] == '_')
5541                 iterpflags |= OPpITER_DEF;
5542         }
5543     }
5544     else {
5545         const PADOFFSET offset = Perl_pad_findmy(aTHX_ STR_WITH_LEN("$_"), 0);
5546         if (offset == NOT_IN_PAD || PAD_COMPNAME_FLAGS_isOUR(offset)) {
5547             sv = newGVOP(OP_GV, 0, PL_defgv);
5548         }
5549         else {
5550             padoff = offset;
5551         }
5552         iterpflags |= OPpITER_DEF;
5553     }
5554     if (expr->op_type == OP_RV2AV || expr->op_type == OP_PADAV) {
5555         expr = op_lvalue(force_list(scalar(ref(expr, OP_ITER))), OP_GREPSTART);
5556         iterflags |= OPf_STACKED;
5557     }
5558     else if (expr->op_type == OP_NULL &&
5559              (expr->op_flags & OPf_KIDS) &&
5560              ((BINOP*)expr)->op_first->op_type == OP_FLOP)
5561     {
5562         /* Basically turn for($x..$y) into the same as for($x,$y), but we
5563          * set the STACKED flag to indicate that these values are to be
5564          * treated as min/max values by 'pp_iterinit'.
5565          */
5566         const UNOP* const flip = (UNOP*)((UNOP*)((BINOP*)expr)->op_first)->op_first;
5567         LOGOP* const range = (LOGOP*) flip->op_first;
5568         OP* const left  = range->op_first;
5569         OP* const right = left->op_sibling;
5570         LISTOP* listop;
5571
5572         range->op_flags &= ~OPf_KIDS;
5573         range->op_first = NULL;
5574
5575         listop = (LISTOP*)newLISTOP(OP_LIST, 0, left, right);
5576         listop->op_first->op_next = range->op_next;
5577         left->op_next = range->op_other;
5578         right->op_next = (OP*)listop;
5579         listop->op_next = listop->op_first;
5580
5581 #ifdef PERL_MAD
5582         op_getmad(expr,(OP*)listop,'O');
5583 #else
5584         op_free(expr);
5585 #endif
5586         expr = (OP*)(listop);
5587         op_null(expr);
5588         iterflags |= OPf_STACKED;
5589     }
5590     else {
5591         expr = op_lvalue(force_list(expr), OP_GREPSTART);
5592     }
5593
5594     loop = (LOOP*)list(convert(OP_ENTERITER, iterflags,
5595                                op_append_elem(OP_LIST, expr, scalar(sv))));
5596     assert(!loop->op_next);
5597     /* for my  $x () sets OPpLVAL_INTRO;
5598      * for our $x () sets OPpOUR_INTRO */
5599     loop->op_private = (U8)iterpflags;
5600 #ifdef PL_OP_SLAB_ALLOC
5601     {
5602         LOOP *tmp;
5603         NewOp(1234,tmp,1,LOOP);
5604         Copy(loop,tmp,1,LISTOP);
5605         S_op_destroy(aTHX_ (OP*)loop);
5606         loop = tmp;
5607     }
5608 #else
5609     loop = (LOOP*)PerlMemShared_realloc(loop, sizeof(LOOP));
5610 #endif
5611     loop->op_targ = padoff;
5612     wop = newWHILEOP(flags, 1, loop, newOP(OP_ITER, 0), block, cont, 0);
5613     if (madsv)
5614         op_getmad(madsv, (OP*)loop, 'v');
5615     return wop;
5616 }
5617
5618 /*
5619 =for apidoc Am|OP *|newLOOPEX|I32 type|OP *label
5620
5621 Constructs, checks, and returns a loop-exiting op (such as C<goto>
5622 or C<last>).  I<type> is the opcode.  I<label> supplies the parameter
5623 determining the target of the op; it is consumed by this function and
5624 become part of the constructed op tree.
5625
5626 =cut
5627 */
5628
5629 OP*
5630 Perl_newLOOPEX(pTHX_ I32 type, OP *label)
5631 {
5632     dVAR;
5633     OP *o;
5634
5635     PERL_ARGS_ASSERT_NEWLOOPEX;
5636
5637     assert((PL_opargs[type] & OA_CLASS_MASK) == OA_LOOPEXOP);
5638
5639     if (type != OP_GOTO || label->op_type == OP_CONST) {
5640         /* "last()" means "last" */
5641         if (label->op_type == OP_STUB && (label->op_flags & OPf_PARENS))
5642             o = newOP(type, OPf_SPECIAL);
5643         else {
5644             o = newPVOP(type, 0, savesharedpv(label->op_type == OP_CONST
5645                                         ? SvPV_nolen_const(((SVOP*)label)->op_sv)
5646                                         : ""));
5647         }
5648 #ifdef PERL_MAD
5649         op_getmad(label,o,'L');
5650 #else
5651         op_free(label);
5652 #endif
5653     }
5654     else {
5655         /* Check whether it's going to be a goto &function */
5656         if (label->op_type == OP_ENTERSUB
5657                 && !(label->op_flags & OPf_STACKED))
5658             label = newUNOP(OP_REFGEN, 0, op_lvalue(label, OP_REFGEN));
5659         o = newUNOP(type, OPf_STACKED, label);
5660     }
5661     PL_hints |= HINT_BLOCK_SCOPE;
5662     return o;
5663 }
5664
5665 /* if the condition is a literal array or hash
5666    (or @{ ... } etc), make a reference to it.
5667  */
5668 STATIC OP *
5669 S_ref_array_or_hash(pTHX_ OP *cond)
5670 {
5671     if (cond
5672     && (cond->op_type == OP_RV2AV
5673     ||  cond->op_type == OP_PADAV
5674     ||  cond->op_type == OP_RV2HV
5675     ||  cond->op_type == OP_PADHV))
5676
5677         return newUNOP(OP_REFGEN, 0, op_lvalue(cond, OP_REFGEN));
5678
5679     else if(cond
5680     && (cond->op_type == OP_ASLICE
5681     ||  cond->op_type == OP_HSLICE)) {
5682
5683         /* anonlist now needs a list from this op, was previously used in
5684          * scalar context */
5685         cond->op_flags |= ~(OPf_WANT_SCALAR | OPf_REF);
5686         cond->op_flags |= OPf_WANT_LIST;
5687
5688         return newANONLIST(op_lvalue(cond, OP_ANONLIST));
5689     }
5690
5691     else
5692         return cond;
5693 }
5694
5695 /* These construct the optree fragments representing given()
5696    and when() blocks.
5697
5698    entergiven and enterwhen are LOGOPs; the op_other pointer
5699    points up to the associated leave op. We need this so we
5700    can put it in the context and make break/continue work.
5701    (Also, of course, pp_enterwhen will jump straight to
5702    op_other if the match fails.)
5703  */
5704
5705 STATIC OP *
5706 S_newGIVWHENOP(pTHX_ OP *cond, OP *block,
5707                    I32 enter_opcode, I32 leave_opcode,
5708                    PADOFFSET entertarg)
5709 {
5710     dVAR;
5711     LOGOP *enterop;
5712     OP *o;
5713
5714     PERL_ARGS_ASSERT_NEWGIVWHENOP;
5715
5716     NewOp(1101, enterop, 1, LOGOP);
5717     enterop->op_type = (Optype)enter_opcode;
5718     enterop->op_ppaddr = PL_ppaddr[enter_opcode];
5719     enterop->op_flags =  (U8) OPf_KIDS;
5720     enterop->op_targ = ((entertarg == NOT_IN_PAD) ? 0 : entertarg);
5721     enterop->op_private = 0;
5722
5723     o = newUNOP(leave_opcode, 0, (OP *) enterop);
5724
5725     if (cond) {
5726         enterop->op_first = scalar(cond);
5727         cond->op_sibling = block;
5728
5729         o->op_next = LINKLIST(cond);
5730         cond->op_next = (OP *) enterop;
5731     }
5732     else {
5733         /* This is a default {} block */
5734         enterop->op_first = block;
5735         enterop->op_flags |= OPf_SPECIAL;
5736
5737         o->op_next = (OP *) enterop;
5738     }
5739
5740     CHECKOP(enter_opcode, enterop); /* Currently does nothing, since
5741                                        entergiven and enterwhen both
5742                                        use ck_null() */
5743
5744     enterop->op_next = LINKLIST(block);
5745     block->op_next = enterop->op_other = o;
5746
5747     return o;
5748 }
5749
5750 /* Does this look like a boolean operation? For these purposes
5751    a boolean operation is:
5752      - a subroutine call [*]
5753      - a logical connective
5754      - a comparison operator
5755      - a filetest operator, with the exception of -s -M -A -C
5756      - defined(), exists() or eof()
5757      - /$re/ or $foo =~ /$re/
5758    
5759    [*] possibly surprising
5760  */
5761 STATIC bool
5762 S_looks_like_bool(pTHX_ const OP *o)
5763 {
5764     dVAR;
5765
5766     PERL_ARGS_ASSERT_LOOKS_LIKE_BOOL;
5767
5768     switch(o->op_type) {
5769         case OP_OR:
5770         case OP_DOR:
5771             return looks_like_bool(cLOGOPo->op_first);
5772
5773         case OP_AND:
5774             return (
5775                 looks_like_bool(cLOGOPo->op_first)
5776              && looks_like_bool(cLOGOPo->op_first->op_sibling));
5777
5778         case OP_NULL:
5779         case OP_SCALAR:
5780             return (
5781                 o->op_flags & OPf_KIDS
5782             && looks_like_bool(cUNOPo->op_first));
5783
5784         case OP_ENTERSUB:
5785
5786         case OP_NOT:    case OP_XOR:
5787
5788         case OP_EQ:     case OP_NE:     case OP_LT:
5789         case OP_GT:     case OP_LE:     case OP_GE:
5790
5791         case OP_I_EQ:   case OP_I_NE:   case OP_I_LT:
5792         case OP_I_GT:   case OP_I_LE:   case OP_I_GE:
5793
5794         case OP_SEQ:    case OP_SNE:    case OP_SLT:
5795         case OP_SGT:    case OP_SLE:    case OP_SGE:
5796         
5797         case OP_SMARTMATCH:
5798         
5799         case OP_FTRREAD:  case OP_FTRWRITE: case OP_FTREXEC:
5800         case OP_FTEREAD:  case OP_FTEWRITE: case OP_FTEEXEC:
5801         case OP_FTIS:     case OP_FTEOWNED: case OP_FTROWNED:
5802         case OP_FTZERO:   case OP_FTSOCK:   case OP_FTCHR:
5803         case OP_FTBLK:    case OP_FTFILE:   case OP_FTDIR:
5804         case OP_FTPIPE:   case OP_FTLINK:   case OP_FTSUID:
5805         case OP_FTSGID:   case OP_FTSVTX:   case OP_FTTTY:
5806         case OP_FTTEXT:   case OP_FTBINARY:
5807         
5808         case OP_DEFINED: case OP_EXISTS:
5809         case OP_MATCH:   case OP_EOF:
5810
5811         case OP_FLOP:
5812
5813             return TRUE;
5814         
5815         case OP_CONST:
5816             /* Detect comparisons that have been optimized away */
5817             if (cSVOPo->op_sv == &PL_sv_yes
5818             ||  cSVOPo->op_sv == &PL_sv_no)
5819             
5820                 return TRUE;
5821             else
5822                 return FALSE;
5823
5824         /* FALL THROUGH */
5825         default:
5826             return FALSE;
5827     }
5828 }
5829
5830 /*
5831 =for apidoc Am|OP *|newGIVENOP|OP *cond|OP *block|PADOFFSET defsv_off
5832
5833 Constructs, checks, and returns an op tree expressing a C<given> block.
5834 I<cond> supplies the expression that will be locally assigned to a lexical
5835 variable, and I<block> supplies the body of the C<given> construct; they
5836 are consumed by this function and become part of the constructed op tree.
5837 I<defsv_off> is the pad offset of the scalar lexical variable that will
5838 be affected.
5839
5840 =cut
5841 */
5842
5843 OP *
5844 Perl_newGIVENOP(pTHX_ OP *cond, OP *block, PADOFFSET defsv_off)
5845 {
5846     dVAR;
5847     PERL_ARGS_ASSERT_NEWGIVENOP;
5848     return newGIVWHENOP(
5849         ref_array_or_hash(cond),
5850         block,
5851         OP_ENTERGIVEN, OP_LEAVEGIVEN,
5852         defsv_off);
5853 }
5854
5855 /*
5856 =for apidoc Am|OP *|newWHENOP|OP *cond|OP *block
5857
5858 Constructs, checks, and returns an op tree expressing a C<when> block.
5859 I<cond> supplies the test expression, and I<block> supplies the block
5860 that will be executed if the test evaluates to true; they are consumed
5861 by this function and become part of the constructed op tree.  I<cond>
5862 will be interpreted DWIMically, often as a comparison against C<$_>,
5863 and may be null to generate a C<default> block.
5864
5865 =cut
5866 */
5867
5868 OP *
5869 Perl_newWHENOP(pTHX_ OP *cond, OP *block)
5870 {
5871     const bool cond_llb = (!cond || looks_like_bool(cond));
5872     OP *cond_op;
5873
5874     PERL_ARGS_ASSERT_NEWWHENOP;
5875
5876     if (cond_llb)
5877         cond_op = cond;
5878     else {
5879         cond_op = newBINOP(OP_SMARTMATCH, OPf_SPECIAL,
5880                 newDEFSVOP(),
5881                 scalar(ref_array_or_hash(cond)));
5882     }
5883     
5884     return newGIVWHENOP(
5885         cond_op,
5886         op_append_elem(block->op_type, block, newOP(OP_BREAK, OPf_SPECIAL)),
5887         OP_ENTERWHEN, OP_LEAVEWHEN, 0);
5888 }
5889
5890 void
5891 Perl_cv_ckproto_len(pTHX_ const CV *cv, const GV *gv, const char *p,
5892                     const STRLEN len)
5893 {
5894     PERL_ARGS_ASSERT_CV_CKPROTO_LEN;
5895
5896     /* Can't just use a strcmp on the prototype, as CONSTSUBs "cheat" by
5897        relying on SvCUR, and doubling up the buffer to hold CvFILE().  */
5898     if (((!p != !SvPOK(cv)) /* One has prototype, one has not.  */
5899          || (p && (len != SvCUR(cv) /* Not the same length.  */
5900                    || memNE(p, SvPVX_const(cv), len))))
5901          && ckWARN_d(WARN_PROTOTYPE)) {
5902         SV* const msg = sv_newmortal();
5903         SV* name = NULL;
5904
5905         if (gv)
5906             gv_efullname3(name = sv_newmortal(), gv, NULL);
5907         sv_setpvs(msg, "Prototype mismatch:");
5908         if (name)
5909             Perl_sv_catpvf(aTHX_ msg, " sub %"SVf, SVfARG(name));
5910         if (SvPOK(cv))
5911             Perl_sv_catpvf(aTHX_ msg, " (%"SVf")", SVfARG(cv));
5912         else
5913             sv_catpvs(msg, ": none");
5914         sv_catpvs(msg, " vs ");
5915         if (p)
5916             Perl_sv_catpvf(aTHX_ msg, "(%.*s)", (int) len, p);
5917         else
5918             sv_catpvs(msg, "none");
5919         Perl_warner(aTHX_ packWARN(WARN_PROTOTYPE), "%"SVf, SVfARG(msg));
5920     }
5921 }
5922
5923 static void const_sv_xsub(pTHX_ CV* cv);
5924
5925 /*
5926
5927 =head1 Optree Manipulation Functions
5928
5929 =for apidoc cv_const_sv
5930
5931 If C<cv> is a constant sub eligible for inlining. returns the constant
5932 value returned by the sub.  Otherwise, returns NULL.
5933
5934 Constant subs can be created with C<newCONSTSUB> or as described in
5935 L<perlsub/"Constant Functions">.
5936
5937 =cut
5938 */
5939 SV *
5940 Perl_cv_const_sv(pTHX_ const CV *const cv)
5941 {
5942     PERL_UNUSED_CONTEXT;
5943     if (!cv)
5944         return NULL;
5945     if (!(SvTYPE(cv) == SVt_PVCV || SvTYPE(cv) == SVt_PVFM))
5946         return NULL;
5947     return CvCONST(cv) ? MUTABLE_SV(CvXSUBANY(cv).any_ptr) : NULL;
5948 }
5949
5950 /* op_const_sv:  examine an optree to determine whether it's in-lineable.
5951  * Can be called in 3 ways:
5952  *
5953  * !cv
5954  *      look for a single OP_CONST with attached value: return the value
5955  *
5956  * cv && CvCLONE(cv) && !CvCONST(cv)
5957  *
5958  *      examine the clone prototype, and if contains only a single
5959  *      OP_CONST referencing a pad const, or a single PADSV referencing
5960  *      an outer lexical, return a non-zero value to indicate the CV is
5961  *      a candidate for "constizing" at clone time
5962  *
5963  * cv && CvCONST(cv)
5964  *
5965  *      We have just cloned an anon prototype that was marked as a const
5966  *      candidiate. Try to grab the current value, and in the case of
5967  *      PADSV, ignore it if it has multiple references. Return the value.
5968  */
5969
5970 SV *
5971 Perl_op_const_sv(pTHX_ const OP *o, CV *cv)
5972 {
5973     dVAR;
5974     SV *sv = NULL;
5975
5976     if (PL_madskills)
5977         return NULL;
5978
5979     if (!o)
5980         return NULL;
5981
5982     if (o->op_type == OP_LINESEQ && cLISTOPo->op_first)
5983         o = cLISTOPo->op_first->op_sibling;
5984
5985     for (; o; o = o->op_next) {
5986         const OPCODE type = o->op_type;
5987
5988         if (sv && o->op_next == o)
5989             return sv;
5990         if (o->op_next != o) {
5991             if (type == OP_NEXTSTATE || type == OP_NULL || type == OP_PUSHMARK)
5992                 continue;
5993             if (type == OP_DBSTATE)
5994                 continue;
5995         }
5996         if (type == OP_LEAVESUB || type == OP_RETURN)
5997             break;
5998         if (sv)
5999             return NULL;
6000         if (type == OP_CONST && cSVOPo->op_sv)
6001             sv = cSVOPo->op_sv;
6002         else if (cv && type == OP_CONST) {
6003             sv = PAD_BASE_SV(CvPADLIST(cv), o->op_targ);
6004             if (!sv)
6005                 return NULL;
6006         }
6007         else if (cv && type == OP_PADSV) {
6008             if (CvCONST(cv)) { /* newly cloned anon */
6009                 sv = PAD_BASE_SV(CvPADLIST(cv), o->op_targ);
6010                 /* the candidate should have 1 ref from this pad and 1 ref
6011                  * from the parent */
6012                 if (!sv || SvREFCNT(sv) != 2)
6013                     return NULL;
6014                 sv = newSVsv(sv);
6015                 SvREADONLY_on(sv);
6016                 return sv;
6017             }
6018             else {
6019                 if (PAD_COMPNAME_FLAGS(o->op_targ) & SVf_FAKE)
6020                     sv = &PL_sv_undef; /* an arbitrary non-null value */
6021             }
6022         }
6023         else {
6024             return NULL;
6025         }
6026     }
6027     return sv;
6028 }
6029
6030 #ifdef PERL_MAD
6031 OP *
6032 #else
6033 void
6034 #endif
6035 Perl_newMYSUB(pTHX_ I32 floor, OP *o, OP *proto, OP *attrs, OP *block)
6036 {
6037 #if 0
6038     /* This would be the return value, but the return cannot be reached.  */
6039     OP* pegop = newOP(OP_NULL, 0);
6040 #endif
6041
6042     PERL_UNUSED_ARG(floor);
6043
6044     if (o)
6045         SAVEFREEOP(o);
6046     if (proto)
6047         SAVEFREEOP(proto);
6048     if (attrs)
6049         SAVEFREEOP(attrs);
6050     if (block)
6051         SAVEFREEOP(block);
6052     Perl_croak(aTHX_ "\"my sub\" not yet implemented");
6053 #ifdef PERL_MAD
6054     NORETURN_FUNCTION_END;
6055 #endif
6056 }
6057
6058 CV *
6059 Perl_newATTRSUB(pTHX_ I32 floor, OP *o, OP *proto, OP *attrs, OP *block)
6060 {
6061     dVAR;
6062     GV *gv;
6063     const char *ps;
6064     STRLEN ps_len = 0; /* init it to avoid false uninit warning from icc */
6065     register CV *cv = NULL;
6066     SV *const_sv;
6067     /* If the subroutine has no body, no attributes, and no builtin attributes
6068        then it's just a sub declaration, and we may be able to get away with
6069        storing with a placeholder scalar in the symbol table, rather than a
6070        full GV and CV.  If anything is present then it will take a full CV to
6071        store it.  */
6072     const I32 gv_fetch_flags
6073         = (block || attrs || (CvFLAGS(PL_compcv) & CVf_BUILTIN_ATTRS)
6074            || PL_madskills)
6075         ? GV_ADDMULTI : GV_ADDMULTI | GV_NOINIT;
6076     const char * const name = o ? SvPV_nolen_const(cSVOPo->op_sv) : NULL;
6077     bool has_name;
6078
6079     if (proto) {
6080         assert(proto->op_type == OP_CONST);
6081         ps = SvPV_const(((SVOP*)proto)->op_sv, ps_len);
6082     }
6083     else
6084         ps = NULL;
6085
6086     if (name) {
6087         gv = gv_fetchsv(cSVOPo->op_sv, gv_fetch_flags, SVt_PVCV);
6088         has_name = TRUE;
6089     } else if (PERLDB_NAMEANON && CopLINE(PL_curcop)) {
6090         SV * const sv = sv_newmortal();
6091         Perl_sv_setpvf(aTHX_ sv, "%s[%s:%"IVdf"]",
6092                        PL_curstash ? "__ANON__" : "__ANON__::__ANON__",
6093                        CopFILE(PL_curcop), (IV)CopLINE(PL_curcop));
6094         gv = gv_fetchsv(sv, gv_fetch_flags, SVt_PVCV);
6095         has_name = TRUE;
6096     } else if (PL_curstash) {
6097         gv = gv_fetchpvs("__ANON__", gv_fetch_flags, SVt_PVCV);
6098         has_name = FALSE;
6099     } else {
6100         gv = gv_fetchpvs("__ANON__::__ANON__", gv_fetch_flags, SVt_PVCV);
6101         has_name = FALSE;
6102     }
6103
6104     if (!PL_madskills) {
6105         if (o)
6106             SAVEFREEOP(o);
6107         if (proto)
6108             SAVEFREEOP(proto);
6109         if (attrs)
6110             SAVEFREEOP(attrs);
6111     }
6112
6113     if (SvTYPE(gv) != SVt_PVGV) {       /* Maybe prototype now, and had at
6114                                            maximum a prototype before. */
6115         if (SvTYPE(gv) > SVt_NULL) {
6116             if (!SvPOK((const SV *)gv)
6117                 && !(SvIOK((const SV *)gv) && SvIVX((const SV *)gv) == -1))
6118             {
6119                 Perl_ck_warner_d(aTHX_ packWARN(WARN_PROTOTYPE), "Runaway prototype");
6120             }
6121             cv_ckproto_len((const CV *)gv, NULL, ps, ps_len);
6122         }
6123         if (ps)
6124             sv_setpvn(MUTABLE_SV(gv), ps, ps_len);
6125         else
6126             sv_setiv(MUTABLE_SV(gv), -1);
6127
6128         SvREFCNT_dec(PL_compcv);
6129         cv = PL_compcv = NULL;
6130         goto done;
6131     }
6132
6133     cv = (!name || GvCVGEN(gv)) ? NULL : GvCV(gv);
6134
6135     if (!block || !ps || *ps || attrs
6136         || (CvFLAGS(PL_compcv) & CVf_BUILTIN_ATTRS)
6137 #ifdef PERL_MAD
6138         || block->op_type == OP_NULL
6139 #endif
6140         )
6141         const_sv = NULL;
6142     else
6143         const_sv = op_const_sv(block, NULL);
6144
6145     if (cv) {
6146         const bool exists = CvROOT(cv) || CvXSUB(cv);
6147
6148         /* if the subroutine doesn't exist and wasn't pre-declared
6149          * with a prototype, assume it will be AUTOLOADed,
6150          * skipping the prototype check
6151          */
6152         if (exists || SvPOK(cv))
6153             cv_ckproto_len(cv, gv, ps, ps_len);
6154         /* already defined (or promised)? */
6155         if (exists || GvASSUMECV(gv)) {
6156             if ((!block
6157 #ifdef PERL_MAD
6158                  || block->op_type == OP_NULL
6159 #endif
6160                  )&& !attrs) {
6161                 if (CvFLAGS(PL_compcv)) {
6162                     /* might have had built-in attrs applied */
6163                     if (CvLVALUE(PL_compcv) && ! CvLVALUE(cv) && ckWARN(WARN_MISC))
6164                         Perl_warner(aTHX_ packWARN(WARN_MISC), "lvalue attribute ignored after the subroutine has been defined");
6165                     CvFLAGS(cv) |= (CvFLAGS(PL_compcv) & CVf_BUILTIN_ATTRS & ~CVf_LVALUE);
6166                 }
6167                 /* just a "sub foo;" when &foo is already defined */
6168                 SAVEFREESV(PL_compcv);
6169                 goto done;
6170             }
6171             if (block
6172 #ifdef PERL_MAD
6173                 && block->op_type != OP_NULL
6174 #endif
6175                 ) {
6176                 if (ckWARN(WARN_REDEFINE)
6177                     || (CvCONST(cv)
6178                         && (!const_sv || sv_cmp(cv_const_sv(cv), const_sv))))
6179                 {
6180                     const line_t oldline = CopLINE(PL_curcop);
6181                     if (PL_parser && PL_parser->copline != NOLINE)
6182                         CopLINE_set(PL_curcop, PL_parser->copline);
6183                     Perl_warner(aTHX_ packWARN(WARN_REDEFINE),
6184                         CvCONST(cv) ? "Constant subroutine %s redefined"
6185                                     : "Subroutine %s redefined", name);
6186                     CopLINE_set(PL_curcop, oldline);
6187                 }
6188 #ifdef PERL_MAD
6189                 if (!PL_minus_c)        /* keep old one around for madskills */
6190 #endif
6191                     {
6192                         /* (PL_madskills unset in used file.) */
6193                         SvREFCNT_dec(cv);
6194                     }
6195                 cv = NULL;
6196             }
6197         }
6198     }
6199     if (const_sv) {
6200         SvREFCNT_inc_simple_void_NN(const_sv);
6201         if (cv) {
6202             assert(!CvROOT(cv) && !CvCONST(cv));
6203             sv_setpvs(MUTABLE_SV(cv), "");  /* prototype is "" */
6204             CvXSUBANY(cv).any_ptr = const_sv;
6205             CvXSUB(cv) = const_sv_xsub;
6206             CvCONST_on(cv);
6207             CvISXSUB_on(cv);
6208         }
6209         else {
6210             GvCV(gv) = NULL;
6211             cv = newCONSTSUB(NULL, name, const_sv);
6212         }
6213         mro_method_changed_in( /* sub Foo::Bar () { 123 } */
6214             (CvGV(cv) && GvSTASH(CvGV(cv)))
6215                 ? GvSTASH(CvGV(cv))
6216                 : CvSTASH(cv)
6217                     ? CvSTASH(cv)
6218                     : PL_curstash
6219         );
6220         if (PL_madskills)
6221             goto install_block;
6222         op_free(block);
6223         SvREFCNT_dec(PL_compcv);
6224         PL_compcv = NULL;
6225         goto done;
6226     }
6227     if (cv) {                           /* must reuse cv if autoloaded */
6228         /* transfer PL_compcv to cv */
6229         if (block
6230 #ifdef PERL_MAD
6231                   && block->op_type != OP_NULL
6232 #endif
6233         ) {
6234             cv_flags_t existing_builtin_attrs = CvFLAGS(cv) & CVf_BUILTIN_ATTRS;
6235             AV *const temp_av = CvPADLIST(cv);
6236             CV *const temp_cv = CvOUTSIDE(cv);
6237
6238             assert(!CvWEAKOUTSIDE(cv));
6239             assert(!CvCVGV_RC(cv));
6240             assert(CvGV(cv) == gv);
6241
6242             SvPOK_off(cv);
6243             CvFLAGS(cv) = CvFLAGS(PL_compcv) | existing_builtin_attrs;
6244             CvOUTSIDE(cv) = CvOUTSIDE(PL_compcv);
6245             CvOUTSIDE_SEQ(cv) = CvOUTSIDE_SEQ(PL_compcv);
6246             CvPADLIST(cv) = CvPADLIST(PL_compcv);
6247             CvOUTSIDE(PL_compcv) = temp_cv;
6248             CvPADLIST(PL_compcv) = temp_av;
6249
6250 #ifdef USE_ITHREADS
6251             if (CvFILE(cv) && !CvISXSUB(cv)) {
6252                 /* for XSUBs CvFILE point directly to static memory; __FILE__ */
6253                 Safefree(CvFILE(cv));
6254     }
6255 #endif
6256             CvFILE_set_from_cop(cv, PL_curcop);
6257             CvSTASH_set(cv, PL_curstash);
6258
6259             /* inner references to PL_compcv must be fixed up ... */
6260             pad_fixup_inner_anons(CvPADLIST(cv), PL_compcv, cv);
6261             if (PERLDB_INTER)/* Advice debugger on the new sub. */
6262               ++PL_sub_generation;
6263         }
6264         else {
6265             /* Might have had built-in attributes applied -- propagate them. */
6266             CvFLAGS(cv) |= (CvFLAGS(PL_compcv) & CVf_BUILTIN_ATTRS);
6267         }
6268         /* ... before we throw it away */
6269         SvREFCNT_dec(PL_compcv);
6270         PL_compcv = cv;
6271     }
6272     else {
6273         cv = PL_compcv;
6274         if (name) {
6275             GvCV(gv) = cv;
6276             if (PL_madskills) {
6277                 if (strEQ(name, "import")) {
6278                     PL_formfeed = MUTABLE_SV(cv);
6279                     /* diag_listed_as: SKIPME */
6280                     Perl_warner(aTHX_ packWARN(WARN_VOID), "0x%"UVxf"\n", PTR2UV(cv));
6281                 }
6282             }
6283             GvCVGEN(gv) = 0;
6284             mro_method_changed_in(GvSTASH(gv)); /* sub Foo::bar { (shift)+1 } */
6285         }
6286     }
6287     if (!CvGV(cv)) {
6288         CvGV_set(cv, gv);
6289         CvFILE_set_from_cop(cv, PL_curcop);
6290         CvSTASH_set(cv, PL_curstash);
6291     }
6292     if (attrs) {
6293         /* Need to do a C<use attributes $stash_of_cv,\&cv,@attrs>. */
6294         HV *stash = name && GvSTASH(CvGV(cv)) ? GvSTASH(CvGV(cv)) : PL_curstash;
6295         apply_attrs(stash, MUTABLE_SV(cv), attrs, FALSE);
6296     }
6297
6298     if (ps)
6299         sv_setpvn(MUTABLE_SV(cv), ps, ps_len);
6300
6301     if (PL_parser && PL_parser->error_count) {
6302         op_free(block);
6303         block = NULL;
6304         if (name) {
6305             const char *s = strrchr(name, ':');
6306             s = s ? s+1 : name;
6307             if (strEQ(s, "BEGIN")) {
6308                 const char not_safe[] =
6309                     "BEGIN not safe after errors--compilation aborted";
6310                 if (PL_in_eval & EVAL_KEEPERR)
6311                     Perl_croak(aTHX_ not_safe);
6312                 else {
6313                     /* force display of errors found but not reported */
6314                     sv_catpv(ERRSV, not_safe);
6315                     Perl_croak(aTHX_ "%"SVf, SVfARG(ERRSV));
6316                 }
6317             }
6318         }
6319     }
6320  install_block:
6321     if (!block)
6322         goto done;
6323
6324     /* If we assign an optree to a PVCV, then we've defined a subroutine that
6325        the debugger could be able to set a breakpoint in, so signal to
6326        pp_entereval that it should not throw away any saved lines at scope
6327        exit.  */
6328        
6329     PL_breakable_sub_gen++;
6330     if (CvLVALUE(cv)) {
6331         CvROOT(cv) = newUNOP(OP_LEAVESUBLV, 0,
6332                              op_lvalue(scalarseq(block), OP_LEAVESUBLV));
6333         block->op_attached = 1;
6334     }
6335     else {
6336         /* This makes sub {}; work as expected.  */
6337         if (block->op_type == OP_STUB) {
6338             OP* const newblock = newSTATEOP(0, NULL, 0);
6339 #ifdef PERL_MAD
6340             op_getmad(block,newblock,'B');
6341 #else
6342             op_free(block);
6343 #endif
6344             block = newblock;
6345         }
6346         else
6347             block->op_attached = 1;
6348         CvROOT(cv) = newUNOP(OP_LEAVESUB, 0, scalarseq(block));
6349     }
6350     CvROOT(cv)->op_private |= OPpREFCOUNTED;
6351     OpREFCNT_set(CvROOT(cv), 1);
6352     CvSTART(cv) = LINKLIST(CvROOT(cv));
6353     CvROOT(cv)->op_next = 0;
6354     CALL_PEEP(CvSTART(cv));
6355
6356     /* now that optimizer has done its work, adjust pad values */
6357
6358     pad_tidy(CvCLONE(cv) ? padtidy_SUBCLONE : padtidy_SUB);
6359
6360     if (CvCLONE(cv)) {
6361         assert(!CvCONST(cv));
6362         if (ps && !*ps && op_const_sv(block, cv))
6363             CvCONST_on(cv);
6364     }
6365
6366     if (has_name) {
6367         if (PERLDB_SUBLINE && PL_curstash != PL_debstash) {
6368             SV * const tmpstr = sv_newmortal();
6369             GV * const db_postponed = gv_fetchpvs("DB::postponed",
6370                                                   GV_ADDMULTI, SVt_PVHV);
6371             HV *hv;
6372             SV * const sv = Perl_newSVpvf(aTHX_ "%s:%ld-%ld",
6373                                           CopFILE(PL_curcop),
6374                                           (long)PL_subline,
6375                                           (long)CopLINE(PL_curcop));
6376             gv_efullname3(tmpstr, gv, NULL);
6377             (void)hv_store(GvHV(PL_DBsub), SvPVX_const(tmpstr),
6378                     SvCUR(tmpstr), sv, 0);
6379             hv = GvHVn(db_postponed);
6380             if (HvTOTALKEYS(hv) > 0 && hv_exists(hv, SvPVX_const(tmpstr), SvCUR(tmpstr))) {
6381                 CV * const pcv = GvCV(db_postponed);
6382                 if (pcv) {
6383                     dSP;
6384                     PUSHMARK(SP);
6385                     XPUSHs(tmpstr);
6386                     PUTBACK;
6387                     call_sv(MUTABLE_SV(pcv), G_DISCARD);
6388                 }
6389             }
6390         }
6391
6392         if (name && ! (PL_parser && PL_parser->error_count))
6393             process_special_blocks(name, gv, cv);
6394     }
6395
6396   done:
6397     if (PL_parser)
6398         PL_parser->copline = NOLINE;
6399     LEAVE_SCOPE(floor);
6400     return cv;
6401 }
6402
6403 STATIC void
6404 S_process_special_blocks(pTHX_ const char *const fullname, GV *const gv,
6405                          CV *const cv)
6406 {
6407     const char *const colon = strrchr(fullname,':');
6408     const char *const name = colon ? colon + 1 : fullname;
6409
6410     PERL_ARGS_ASSERT_PROCESS_SPECIAL_BLOCKS;
6411
6412     if (*name == 'B') {
6413         if (strEQ(name, "BEGIN")) {
6414             const I32 oldscope = PL_scopestack_ix;
6415             ENTER;
6416             SAVECOPFILE(&PL_compiling);
6417             SAVECOPLINE(&PL_compiling);
6418
6419             DEBUG_x( dump_sub(gv) );
6420             Perl_av_create_and_push(aTHX_ &PL_beginav, MUTABLE_SV(cv));
6421             GvCV(gv) = 0;               /* cv has been hijacked */
6422             call_list(oldscope, PL_beginav);
6423
6424             PL_curcop = &PL_compiling;
6425             CopHINTS_set(&PL_compiling, PL_hints);
6426             LEAVE;
6427         }
6428         else
6429             return;
6430     } else {
6431         if (*name == 'E') {
6432             if strEQ(name, "END") {
6433                 DEBUG_x( dump_sub(gv) );
6434                 Perl_av_create_and_unshift_one(aTHX_ &PL_endav, MUTABLE_SV(cv));
6435             } else
6436                 return;
6437         } else if (*name == 'U') {
6438             if (strEQ(name, "UNITCHECK")) {
6439                 /* It's never too late to run a unitcheck block */
6440                 Perl_av_create_and_unshift_one(aTHX_ &PL_unitcheckav, MUTABLE_SV(cv));
6441             }
6442             else
6443                 return;
6444         } else if (*name == 'C') {
6445             if (strEQ(name, "CHECK")) {
6446                 if (PL_main_start)
6447                     Perl_ck_warner(aTHX_ packWARN(WARN_VOID),
6448                                    "Too late to run CHECK block");
6449                 Perl_av_create_and_unshift_one(aTHX_ &PL_checkav, MUTABLE_SV(cv));
6450             }
6451             else
6452                 return;
6453         } else if (*name == 'I') {
6454             if (strEQ(name, "INIT")) {
6455                 if (PL_main_start)
6456                     Perl_ck_warner(aTHX_ packWARN(WARN_VOID),
6457                                    "Too late to run INIT block");
6458                 Perl_av_create_and_push(aTHX_ &PL_initav, MUTABLE_SV(cv));
6459             }
6460             else
6461                 return;
6462         } else
6463             return;
6464         DEBUG_x( dump_sub(gv) );
6465         GvCV(gv) = 0;           /* cv has been hijacked */
6466     }
6467 }
6468
6469 /*
6470 =for apidoc newCONSTSUB
6471
6472 Creates a constant sub equivalent to Perl C<sub FOO () { 123 }> which is
6473 eligible for inlining at compile-time.
6474
6475 Passing NULL for SV creates a constant sub equivalent to C<sub BAR () {}>,
6476 which won't be called if used as a destructor, but will suppress the overhead
6477 of a call to C<AUTOLOAD>.  (This form, however, isn't eligible for inlining at
6478 compile time.)
6479
6480 =cut
6481 */
6482
6483 CV *
6484 Perl_newCONSTSUB(pTHX_ HV *stash, const char *name, SV *sv)
6485 {
6486     dVAR;
6487     CV* cv;
6488 #ifdef USE_ITHREADS
6489     const char *const file = CopFILE(PL_curcop);
6490 #else
6491     SV *const temp_sv = CopFILESV(PL_curcop);
6492     const char *const file = temp_sv ? SvPV_nolen_const(temp_sv) : NULL;
6493 #endif
6494
6495     ENTER;
6496
6497     if (IN_PERL_RUNTIME) {
6498         /* at runtime, it's not safe to manipulate PL_curcop: it may be
6499          * an op shared between threads. Use a non-shared COP for our
6500          * dirty work */
6501          SAVEVPTR(PL_curcop);
6502          PL_curcop = &PL_compiling;
6503     }
6504     SAVECOPLINE(PL_curcop);
6505     CopLINE_set(PL_curcop, PL_parser ? PL_parser->copline : NOLINE);
6506
6507     SAVEHINTS();
6508     PL_hints &= ~HINT_BLOCK_SCOPE;
6509
6510     if (stash) {
6511         SAVESPTR(PL_curstash);
6512         SAVECOPSTASH(PL_curcop);
6513         PL_curstash = stash;
6514         CopSTASH_set(PL_curcop,stash);
6515     }
6516
6517     /* file becomes the CvFILE. For an XS, it's supposed to be static storage,
6518        and so doesn't get free()d.  (It's expected to be from the C pre-
6519        processor __FILE__ directive). But we need a dynamically allocated one,
6520        and we need it to get freed.  */
6521     cv = newXS_flags(name, const_sv_xsub, file ? file : "", "",
6522                      XS_DYNAMIC_FILENAME);
6523     CvXSUBANY(cv).any_ptr = sv;
6524     CvCONST_on(cv);
6525
6526 #ifdef USE_ITHREADS
6527     if (stash)
6528         CopSTASH_free(PL_curcop);
6529 #endif
6530     LEAVE;
6531
6532     return cv;
6533 }
6534
6535 CV *
6536 Perl_newXS_flags(pTHX_ const char *name, XSUBADDR_t subaddr,
6537                  const char *const filename, const char *const proto,
6538                  U32 flags)
6539 {
6540     CV *cv = newXS(name, subaddr, filename);
6541
6542     PERL_ARGS_ASSERT_NEWXS_FLAGS;
6543
6544     if (flags & XS_DYNAMIC_FILENAME) {
6545         /* We need to "make arrangements" (ie cheat) to ensure that the
6546            filename lasts as long as the PVCV we just created, but also doesn't
6547            leak  */
6548         STRLEN filename_len = strlen(filename);
6549         STRLEN proto_and_file_len = filename_len;
6550         char *proto_and_file;
6551         STRLEN proto_len;
6552
6553         if (proto) {
6554             proto_len = strlen(proto);
6555             proto_and_file_len += proto_len;
6556
6557             Newx(proto_and_file, proto_and_file_len + 1, char);
6558             Copy(proto, proto_and_file, proto_len, char);
6559             Copy(filename, proto_and_file + proto_len, filename_len + 1, char);
6560         } else {
6561             proto_len = 0;
6562             proto_and_file = savepvn(filename, filename_len);
6563         }
6564
6565         /* This gets free()d.  :-)  */
6566         sv_usepvn_flags(MUTABLE_SV(cv), proto_and_file, proto_and_file_len,
6567                         SV_HAS_TRAILING_NUL);
6568         if (proto) {
6569             /* This gives us the correct prototype, rather than one with the
6570                file name appended.  */
6571             SvCUR_set(cv, proto_len);
6572         } else {
6573             SvPOK_off(cv);
6574         }
6575         CvFILE(cv) = proto_and_file + proto_len;
6576     } else {
6577         sv_setpv(MUTABLE_SV(cv), proto);
6578     }
6579     return cv;
6580 }
6581
6582 /*
6583 =for apidoc U||newXS
6584
6585 Used by C<xsubpp> to hook up XSUBs as Perl subs.  I<filename> needs to be
6586 static storage, as it is used directly as CvFILE(), without a copy being made.
6587
6588 =cut
6589 */
6590
6591 CV *
6592 Perl_newXS(pTHX_ const char *name, XSUBADDR_t subaddr, const char *filename)
6593 {
6594     dVAR;
6595     GV * const gv = gv_fetchpv(name ? name :
6596                         (PL_curstash ? "__ANON__" : "__ANON__::__ANON__"),
6597                         GV_ADDMULTI, SVt_PVCV);
6598     register CV *cv;
6599
6600     PERL_ARGS_ASSERT_NEWXS;
6601
6602     if (!subaddr)
6603         Perl_croak(aTHX_ "panic: no address for '%s' in '%s'", name, filename);
6604
6605     if ((cv = (name ? GvCV(gv) : NULL))) {
6606         if (GvCVGEN(gv)) {
6607             /* just a cached method */
6608             SvREFCNT_dec(cv);
6609             cv = NULL;
6610         }
6611         else if (CvROOT(cv) || CvXSUB(cv) || GvASSUMECV(gv)) {
6612             /* already defined (or promised) */
6613             /* XXX It's possible for this HvNAME_get to return null, and get passed into strEQ */
6614             if (ckWARN(WARN_REDEFINE)) {
6615                 GV * const gvcv = CvGV(cv);
6616                 if (gvcv) {
6617                     HV * const stash = GvSTASH(gvcv);
6618                     if (stash) {
6619                         const char *redefined_name = HvNAME_get(stash);
6620                         if ( strEQ(redefined_name,"autouse") ) {
6621                             const line_t oldline = CopLINE(PL_curcop);
6622                             if (PL_parser && PL_parser->copline != NOLINE)
6623                                 CopLINE_set(PL_curcop, PL_parser->copline);
6624                             Perl_warner(aTHX_ packWARN(WARN_REDEFINE),
6625                                         CvCONST(cv) ? "Constant subroutine %s redefined"
6626                                                     : "Subroutine %s redefined"
6627                                         ,name);
6628                             CopLINE_set(PL_curcop, oldline);
6629                         }
6630                     }
6631                 }
6632             }
6633             SvREFCNT_dec(cv);
6634             cv = NULL;
6635         }
6636     }
6637
6638     if (cv)                             /* must reuse cv if autoloaded */
6639         cv_undef(cv);
6640     else {
6641         cv = MUTABLE_CV(newSV_type(SVt_PVCV));
6642         if (name) {
6643             GvCV(gv) = cv;
6644             GvCVGEN(gv) = 0;
6645             mro_method_changed_in(GvSTASH(gv)); /* newXS */
6646         }
6647     }
6648     if (!name)
6649         CvANON_on(cv);
6650     CvGV_set(cv, gv);
6651     (void)gv_fetchfile(filename);
6652     CvFILE(cv) = (char *)filename; /* NOTE: not copied, as it is expected to be
6653                                    an external constant string */
6654     CvISXSUB_on(cv);
6655     CvXSUB(cv) = subaddr;
6656
6657     if (name)
6658         process_special_blocks(name, gv, cv);
6659
6660     return cv;
6661 }
6662
6663 #ifdef PERL_MAD
6664 OP *
6665 #else
6666 void
6667 #endif
6668 Perl_newFORM(pTHX_ I32 floor, OP *o, OP *block)
6669 {
6670     dVAR;
6671     register CV *cv;
6672 #ifdef PERL_MAD
6673     OP* pegop = newOP(OP_NULL, 0);
6674 #endif
6675
6676     GV * const gv = o
6677         ? gv_fetchsv(cSVOPo->op_sv, GV_ADD, SVt_PVFM)
6678         : gv_fetchpvs("STDOUT", GV_ADD|GV_NOTQUAL, SVt_PVFM);
6679
6680     GvMULTI_on(gv);
6681     if ((cv = GvFORM(gv))) {
6682         if (ckWARN(WARN_REDEFINE)) {
6683             const line_t oldline = CopLINE(PL_curcop);
6684             if (PL_parser && PL_parser->copline != NOLINE)
6685                 CopLINE_set(PL_curcop, PL_parser->copline);
6686             if (o) {
6687                 Perl_warner(aTHX_ packWARN(WARN_REDEFINE),
6688                             "Format %"SVf" redefined", SVfARG(cSVOPo->op_sv));
6689             } else {
6690                 Perl_warner(aTHX_ packWARN(WARN_REDEFINE),
6691                             "Format STDOUT redefined");
6692             }
6693             CopLINE_set(PL_curcop, oldline);
6694         }
6695         SvREFCNT_dec(cv);
6696     }
6697     cv = PL_compcv;
6698     GvFORM(gv) = cv;
6699     CvGV_set(cv, gv);
6700     CvFILE_set_from_cop(cv, PL_curcop);
6701
6702
6703     pad_tidy(padtidy_FORMAT);
6704     CvROOT(cv) = newUNOP(OP_LEAVEWRITE, 0, scalarseq(block));
6705     CvROOT(cv)->op_private |= OPpREFCOUNTED;
6706     OpREFCNT_set(CvROOT(cv), 1);
6707     CvSTART(cv) = LINKLIST(CvROOT(cv));
6708     CvROOT(cv)->op_next = 0;
6709     CALL_PEEP(CvSTART(cv));
6710 #ifdef PERL_MAD
6711     op_getmad(o,pegop,'n');
6712     op_getmad_weak(block, pegop, 'b');
6713 #else
6714     op_free(o);
6715 #endif
6716     if (PL_parser)
6717         PL_parser->copline = NOLINE;
6718     LEAVE_SCOPE(floor);
6719 #ifdef PERL_MAD
6720     return pegop;
6721 #endif
6722 }
6723
6724 OP *
6725 Perl_newANONLIST(pTHX_ OP *o)
6726 {
6727     return convert(OP_ANONLIST, OPf_SPECIAL, o);
6728 }
6729
6730 OP *
6731 Perl_newANONHASH(pTHX_ OP *o)
6732 {
6733     return convert(OP_ANONHASH, OPf_SPECIAL, o);
6734 }
6735
6736 OP *
6737 Perl_newANONSUB(pTHX_ I32 floor, OP *proto, OP *block)
6738 {
6739     return newANONATTRSUB(floor, proto, NULL, block);
6740 }
6741
6742 OP *
6743 Perl_newANONATTRSUB(pTHX_ I32 floor, OP *proto, OP *attrs, OP *block)
6744 {
6745     return newUNOP(OP_REFGEN, 0,
6746         newSVOP(OP_ANONCODE, 0,
6747                 MUTABLE_SV(newATTRSUB(floor, 0, proto, attrs, block))));
6748 }
6749
6750 OP *
6751 Perl_oopsAV(pTHX_ OP *o)
6752 {
6753     dVAR;
6754
6755     PERL_ARGS_ASSERT_OOPSAV;
6756
6757     switch (o->op_type) {
6758     case OP_PADSV:
6759         o->op_type = OP_PADAV;
6760         o->op_ppaddr = PL_ppaddr[OP_PADAV];
6761         return ref(o, OP_RV2AV);
6762
6763     case OP_RV2SV:
6764         o->op_type = OP_RV2AV;
6765         o->op_ppaddr = PL_ppaddr[OP_RV2AV];
6766         ref(o, OP_RV2AV);
6767         break;
6768
6769     default:
6770         Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL), "oops: oopsAV");
6771         break;
6772     }
6773     return o;
6774 }
6775
6776 OP *
6777 Perl_oopsHV(pTHX_ OP *o)
6778 {
6779     dVAR;
6780
6781     PERL_ARGS_ASSERT_OOPSHV;
6782
6783     switch (o->op_type) {
6784     case OP_PADSV:
6785     case OP_PADAV:
6786         o->op_type = OP_PADHV;
6787         o->op_ppaddr = PL_ppaddr[OP_PADHV];
6788         return ref(o, OP_RV2HV);
6789
6790     case OP_RV2SV:
6791     case OP_RV2AV:
6792         o->op_type = OP_RV2HV;
6793         o->op_ppaddr = PL_ppaddr[OP_RV2HV];
6794         ref(o, OP_RV2HV);
6795         break;
6796
6797     default:
6798         Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL), "oops: oopsHV");
6799         break;
6800     }
6801     return o;
6802 }
6803
6804 OP *
6805 Perl_newAVREF(pTHX_ OP *o)
6806 {
6807     dVAR;
6808
6809     PERL_ARGS_ASSERT_NEWAVREF;
6810
6811     if (o->op_type == OP_PADANY) {
6812         o->op_type = OP_PADAV;
6813         o->op_ppaddr = PL_ppaddr[OP_PADAV];
6814         return o;
6815     }
6816     else if ((o->op_type == OP_RV2AV || o->op_type == OP_PADAV)) {
6817         Perl_ck_warner_d(aTHX_ packWARN(WARN_DEPRECATED),
6818                        "Using an array as a reference is deprecated");
6819     }
6820     return newUNOP(OP_RV2AV, 0, scalar(o));
6821 }
6822
6823 OP *
6824 Perl_newGVREF(pTHX_ I32 type, OP *o)
6825 {
6826     if (type == OP_MAPSTART || type == OP_GREPSTART || type == OP_SORT)
6827         return newUNOP(OP_NULL, 0, o);
6828     return ref(newUNOP(OP_RV2GV, OPf_REF, o), type);
6829 }
6830
6831 OP *
6832 Perl_newHVREF(pTHX_ OP *o)
6833 {
6834     dVAR;
6835
6836     PERL_ARGS_ASSERT_NEWHVREF;
6837
6838     if (o->op_type == OP_PADANY) {
6839         o->op_type = OP_PADHV;
6840         o->op_ppaddr = PL_ppaddr[OP_PADHV];
6841         return o;
6842     }
6843     else if ((o->op_type == OP_RV2HV || o->op_type == OP_PADHV)) {
6844         Perl_ck_warner_d(aTHX_ packWARN(WARN_DEPRECATED),
6845                        "Using a hash as a reference is deprecated");
6846     }
6847     return newUNOP(OP_RV2HV, 0, scalar(o));
6848 }
6849
6850 OP *
6851 Perl_newCVREF(pTHX_ I32 flags, OP *o)
6852 {
6853     return newUNOP(OP_RV2CV, flags, scalar(o));
6854 }
6855
6856 OP *
6857 Perl_newSVREF(pTHX_ OP *o)
6858 {
6859     dVAR;
6860
6861     PERL_ARGS_ASSERT_NEWSVREF;
6862
6863     if (o->op_type == OP_PADANY) {
6864         o->op_type = OP_PADSV;
6865         o->op_ppaddr = PL_ppaddr[OP_PADSV];
6866         return o;
6867     }
6868     return newUNOP(OP_RV2SV, 0, scalar(o));
6869 }
6870
6871 /* Check routines. See the comments at the top of this file for details
6872  * on when these are called */
6873
6874 OP *
6875 Perl_ck_anoncode(pTHX_ OP *o)
6876 {
6877     PERL_ARGS_ASSERT_CK_ANONCODE;
6878
6879     cSVOPo->op_targ = pad_add_anon(cSVOPo->op_sv, o->op_type);
6880     if (!PL_madskills)
6881         cSVOPo->op_sv = NULL;
6882     return o;
6883 }
6884
6885 OP *
6886 Perl_ck_bitop(pTHX_ OP *o)
6887 {
6888     dVAR;
6889
6890     PERL_ARGS_ASSERT_CK_BITOP;
6891
6892 #define OP_IS_NUMCOMPARE(op) \
6893         ((op) == OP_LT   || (op) == OP_I_LT || \
6894          (op) == OP_GT   || (op) == OP_I_GT || \
6895          (op) == OP_LE   || (op) == OP_I_LE || \
6896          (op) == OP_GE   || (op) == OP_I_GE || \
6897          (op) == OP_EQ   || (op) == OP_I_EQ || \
6898          (op) == OP_NE   || (op) == OP_I_NE || \
6899          (op) == OP_NCMP || (op) == OP_I_NCMP)
6900     o->op_private = (U8)(PL_hints & HINT_INTEGER);
6901     if (!(o->op_flags & OPf_STACKED) /* Not an assignment */
6902             && (o->op_type == OP_BIT_OR
6903              || o->op_type == OP_BIT_AND
6904              || o->op_type == OP_BIT_XOR))
6905     {
6906         const OP * const left = cBINOPo->op_first;
6907         const OP * const right = left->op_sibling;
6908         if ((OP_IS_NUMCOMPARE(left->op_type) &&
6909                 (left->op_flags & OPf_PARENS) == 0) ||
6910             (OP_IS_NUMCOMPARE(right->op_type) &&
6911                 (right->op_flags & OPf_PARENS) == 0))
6912             Perl_ck_warner(aTHX_ packWARN(WARN_PRECEDENCE),
6913                            "Possible precedence problem on bitwise %c operator",
6914                            o->op_type == OP_BIT_OR ? '|'
6915                            : o->op_type == OP_BIT_AND ? '&' : '^'
6916                            );
6917     }
6918     return o;
6919 }
6920
6921 OP *
6922 Perl_ck_concat(pTHX_ OP *o)
6923 {
6924     const OP * const kid = cUNOPo->op_first;
6925
6926     PERL_ARGS_ASSERT_CK_CONCAT;
6927     PERL_UNUSED_CONTEXT;
6928
6929     if (kid->op_type == OP_CONCAT && !(kid->op_private & OPpTARGET_MY) &&
6930             !(kUNOP->op_first->op_flags & OPf_MOD))
6931         o->op_flags |= OPf_STACKED;
6932     return o;
6933 }
6934
6935 OP *
6936 Perl_ck_spair(pTHX_ OP *o)
6937 {
6938     dVAR;
6939
6940     PERL_ARGS_ASSERT_CK_SPAIR;
6941
6942     if (o->op_flags & OPf_KIDS) {
6943         OP* newop;
6944         OP* kid;
6945         const OPCODE type = o->op_type;
6946         o = modkids(ck_fun(o), type);
6947         kid = cUNOPo->op_first;
6948         newop = kUNOP->op_first->op_sibling;
6949         if (newop) {
6950             const OPCODE type = newop->op_type;
6951             if (newop->op_sibling || !(PL_opargs[type] & OA_RETSCALAR) ||
6952                     type == OP_PADAV || type == OP_PADHV ||
6953                     type == OP_RV2AV || type == OP_RV2HV)
6954                 return o;
6955         }
6956 #ifdef PERL_MAD
6957         op_getmad(kUNOP->op_first,newop,'K');
6958 #else
6959         op_free(kUNOP->op_first);
6960 #endif
6961         kUNOP->op_first = newop;
6962     }
6963     o->op_ppaddr = PL_ppaddr[++o->op_type];
6964     return ck_fun(o);
6965 }
6966
6967 OP *
6968 Perl_ck_delete(pTHX_ OP *o)
6969 {
6970     PERL_ARGS_ASSERT_CK_DELETE;
6971
6972     o = ck_fun(o);
6973     o->op_private = 0;
6974     if (o->op_flags & OPf_KIDS) {
6975         OP * const kid = cUNOPo->op_first;
6976         switch (kid->op_type) {
6977         case OP_ASLICE:
6978             o->op_flags |= OPf_SPECIAL;
6979             /* FALL THROUGH */
6980         case OP_HSLICE:
6981             o->op_private |= OPpSLICE;
6982             break;
6983         case OP_AELEM:
6984             o->op_flags |= OPf_SPECIAL;
6985             /* FALL THROUGH */
6986         case OP_HELEM:
6987             break;
6988         default:
6989             Perl_croak(aTHX_ "%s argument is not a HASH or ARRAY element or slice",
6990                   OP_DESC(o));
6991         }
6992         if (kid->op_private & OPpLVAL_INTRO)
6993             o->op_private |= OPpLVAL_INTRO;
6994         op_null(kid);
6995     }
6996     return o;
6997 }
6998
6999 OP *
7000 Perl_ck_die(pTHX_ OP *o)
7001 {
7002     PERL_ARGS_ASSERT_CK_DIE;
7003
7004 #ifdef VMS
7005     if (VMSISH_HUSHED) o->op_private |= OPpHUSH_VMSISH;
7006 #endif
7007     return ck_fun(o);
7008 }
7009
7010 OP *
7011 Perl_ck_eof(pTHX_ OP *o)
7012 {
7013     dVAR;
7014
7015     PERL_ARGS_ASSERT_CK_EOF;
7016
7017     if (o->op_flags & OPf_KIDS) {
7018         if (cLISTOPo->op_first->op_type == OP_STUB) {
7019             OP * const newop
7020                 = newUNOP(o->op_type, OPf_SPECIAL, newGVOP(OP_GV, 0, PL_argvgv));
7021 #ifdef PERL_MAD
7022             op_getmad(o,newop,'O');
7023 #else
7024             op_free(o);
7025 #endif
7026             o = newop;
7027         }
7028         return ck_fun(o);
7029     }
7030     return o;
7031 }
7032
7033 OP *
7034 Perl_ck_eval(pTHX_ OP *o)
7035 {
7036     dVAR;
7037
7038     PERL_ARGS_ASSERT_CK_EVAL;
7039
7040     PL_hints |= HINT_BLOCK_SCOPE;
7041     if (o->op_flags & OPf_KIDS) {
7042         SVOP * const kid = (SVOP*)cUNOPo->op_first;
7043
7044         if (!kid) {
7045             o->op_flags &= ~OPf_KIDS;
7046             op_null(o);
7047         }
7048         else if (kid->op_type == OP_LINESEQ || kid->op_type == OP_STUB) {
7049             LOGOP *enter;
7050 #ifdef PERL_MAD
7051             OP* const oldo = o;
7052 #endif
7053
7054             cUNOPo->op_first = 0;
7055 #ifndef PERL_MAD
7056             op_free(o);
7057 #endif
7058
7059             NewOp(1101, enter, 1, LOGOP);
7060             enter->op_type = OP_ENTERTRY;
7061             enter->op_ppaddr = PL_ppaddr[OP_ENTERTRY];
7062             enter->op_private = 0;
7063
7064             /* establish postfix order */
7065             enter->op_next = (OP*)enter;
7066
7067             o = op_prepend_elem(OP_LINESEQ, (OP*)enter, (OP*)kid);
7068             o->op_type = OP_LEAVETRY;
7069             o->op_ppaddr = PL_ppaddr[OP_LEAVETRY];
7070             enter->op_other = o;
7071             op_getmad(oldo,o,'O');
7072             return o;
7073         }
7074         else {
7075             scalar((OP*)kid);
7076             PL_cv_has_eval = 1;
7077         }
7078     }
7079     else {
7080 #ifdef PERL_MAD
7081         OP* const oldo = o;
7082 #else
7083         op_free(o);
7084 #endif
7085         o = newUNOP(OP_ENTEREVAL, 0, newDEFSVOP());
7086         op_getmad(oldo,o,'O');
7087     }
7088     o->op_targ = (PADOFFSET)PL_hints;
7089     if ((PL_hints & HINT_LOCALIZE_HH) != 0 && GvHV(PL_hintgv)) {
7090         /* Store a copy of %^H that pp_entereval can pick up. */
7091         OP *hhop = newSVOP(OP_HINTSEVAL, 0,
7092                            MUTABLE_SV(hv_copy_hints_hv(GvHV(PL_hintgv))));
7093         cUNOPo->op_first->op_sibling = hhop;
7094         o->op_private |= OPpEVAL_HAS_HH;
7095     }
7096     return o;
7097 }
7098
7099 OP *
7100 Perl_ck_exit(pTHX_ OP *o)
7101 {
7102     PERL_ARGS_ASSERT_CK_EXIT;
7103
7104 #ifdef VMS
7105     HV * const table = GvHV(PL_hintgv);
7106     if (table) {
7107        SV * const * const svp = hv_fetchs(table, "vmsish_exit", FALSE);
7108        if (svp && *svp && SvTRUE(*svp))
7109            o->op_private |= OPpEXIT_VMSISH;
7110     }
7111     if (VMSISH_HUSHED) o->op_private |= OPpHUSH_VMSISH;
7112 #endif
7113     return ck_fun(o);
7114 }
7115
7116 OP *
7117 Perl_ck_exec(pTHX_ OP *o)
7118 {
7119     PERL_ARGS_ASSERT_CK_EXEC;
7120
7121     if (o->op_flags & OPf_STACKED) {
7122         OP *kid;
7123         o = ck_fun(o);
7124         kid = cUNOPo->op_first->op_sibling;
7125         if (kid->op_type == OP_RV2GV)
7126             op_null(kid);
7127     }
7128     else
7129         o = listkids(o);
7130     return o;
7131 }
7132
7133 OP *
7134 Perl_ck_exists(pTHX_ OP *o)
7135 {
7136     dVAR;
7137
7138     PERL_ARGS_ASSERT_CK_EXISTS;
7139
7140     o = ck_fun(o);
7141     if (o->op_flags & OPf_KIDS) {
7142         OP * const kid = cUNOPo->op_first;
7143         if (kid->op_type == OP_ENTERSUB) {
7144             (void) ref(kid, o->op_type);
7145             if (kid->op_type != OP_RV2CV
7146                         && !(PL_parser && PL_parser->error_count))
7147                 Perl_croak(aTHX_ "%s argument is not a subroutine name",
7148                             OP_DESC(o));
7149             o->op_private |= OPpEXISTS_SUB;
7150         }
7151         else if (kid->op_type == OP_AELEM)
7152             o->op_flags |= OPf_SPECIAL;
7153         else if (kid->op_type != OP_HELEM)
7154             Perl_croak(aTHX_ "%s argument is not a HASH or ARRAY element or a subroutine",
7155                         OP_DESC(o));
7156         op_null(kid);
7157     }
7158     return o;
7159 }
7160
7161 OP *
7162 Perl_ck_rvconst(pTHX_ register OP *o)
7163 {
7164     dVAR;
7165     SVOP * const kid = (SVOP*)cUNOPo->op_first;
7166
7167     PERL_ARGS_ASSERT_CK_RVCONST;
7168
7169     o->op_private |= (PL_hints & HINT_STRICT_REFS);
7170     if (o->op_type == OP_RV2CV)
7171         o->op_private &= ~1;
7172
7173     if (kid->op_type == OP_CONST) {
7174         int iscv;
7175         GV *gv;
7176         SV * const kidsv = kid->op_sv;
7177
7178         /* Is it a constant from cv_const_sv()? */
7179         if (SvROK(kidsv) && SvREADONLY(kidsv)) {
7180             SV * const rsv = SvRV(kidsv);
7181             const svtype type = SvTYPE(rsv);
7182             const char *badtype = NULL;
7183
7184             switch (o->op_type) {
7185             case OP_RV2SV:
7186                 if (type > SVt_PVMG)
7187                     badtype = "a SCALAR";
7188                 break;
7189             case OP_RV2AV:
7190                 if (type != SVt_PVAV)
7191                     badtype = "an ARRAY";
7192                 break;
7193             case OP_RV2HV:
7194                 if (type != SVt_PVHV)
7195                     badtype = "a HASH";
7196                 break;
7197             case OP_RV2CV:
7198                 if (type != SVt_PVCV)
7199                     badtype = "a CODE";
7200                 break;
7201             }
7202             if (badtype)
7203                 Perl_croak(aTHX_ "Constant is not %s reference", badtype);
7204             return o;
7205         }
7206         if ((o->op_private & HINT_STRICT_REFS) && (kid->op_private & OPpCONST_BARE)) {
7207             const char *badthing;
7208             switch (o->op_type) {
7209             case OP_RV2SV:
7210                 badthing = "a SCALAR";
7211                 break;
7212             case OP_RV2AV:
7213                 badthing = "an ARRAY";
7214                 break;
7215             case OP_RV2HV:
7216                 badthing = "a HASH";
7217                 break;
7218             default:
7219                 badthing = NULL;
7220                 break;
7221             }
7222             if (badthing)
7223                 Perl_croak(aTHX_
7224                            "Can't use bareword (\"%"SVf"\") as %s ref while \"strict refs\" in use",
7225                            SVfARG(kidsv), badthing);
7226         }
7227         /*
7228          * This is a little tricky.  We only want to add the symbol if we
7229          * didn't add it in the lexer.  Otherwise we get duplicate strict
7230          * warnings.  But if we didn't add it in the lexer, we must at
7231          * least pretend like we wanted to add it even if it existed before,
7232          * or we get possible typo warnings.  OPpCONST_ENTERED says
7233          * whether the lexer already added THIS instance of this symbol.
7234          */
7235         iscv = (o->op_type == OP_RV2CV) * 2;
7236         do {
7237             gv = gv_fetchsv(kidsv,
7238                 iscv | !(kid->op_private & OPpCONST_ENTERED),
7239                 iscv
7240                     ? SVt_PVCV
7241                     : o->op_type == OP_RV2SV
7242                         ? SVt_PV
7243                         : o->op_type == OP_RV2AV
7244                             ? SVt_PVAV
7245                             : o->op_type == OP_RV2HV
7246                                 ? SVt_PVHV
7247                                 : SVt_PVGV);
7248         } while (!gv && !(kid->op_private & OPpCONST_ENTERED) && !iscv++);
7249         if (gv) {
7250             kid->op_type = OP_GV;
7251             SvREFCNT_dec(kid->op_sv);
7252 #ifdef USE_ITHREADS
7253             /* XXX hack: dependence on sizeof(PADOP) <= sizeof(SVOP) */
7254             kPADOP->op_padix = pad_alloc(OP_GV, SVs_PADTMP);
7255             SvREFCNT_dec(PAD_SVl(kPADOP->op_padix));
7256             GvIN_PAD_on(gv);
7257             PAD_SETSV(kPADOP->op_padix, MUTABLE_SV(SvREFCNT_inc_simple_NN(gv)));
7258 #else
7259             kid->op_sv = SvREFCNT_inc_simple_NN(gv);
7260 #endif
7261             kid->op_private = 0;
7262             kid->op_ppaddr = PL_ppaddr[OP_GV];
7263             /* FAKE globs in the symbol table cause weird bugs (#77810) */
7264             SvFAKE_off(gv);
7265         }
7266     }
7267     return o;
7268 }
7269
7270 OP *
7271 Perl_ck_ftst(pTHX_ OP *o)
7272 {
7273     dVAR;
7274     const I32 type = o->op_type;
7275
7276     PERL_ARGS_ASSERT_CK_FTST;
7277
7278     if (o->op_flags & OPf_REF) {
7279         NOOP;
7280     }
7281     else if (o->op_flags & OPf_KIDS && cUNOPo->op_first->op_type != OP_STUB) {
7282         SVOP * const kid = (SVOP*)cUNOPo->op_first;
7283         const OPCODE kidtype = kid->op_type;
7284
7285         if (kidtype == OP_CONST && (kid->op_private & OPpCONST_BARE)) {
7286             OP * const newop = newGVOP(type, OPf_REF,
7287                 gv_fetchsv(kid->op_sv, GV_ADD, SVt_PVIO));
7288 #ifdef PERL_MAD
7289             op_getmad(o,newop,'O');
7290 #else
7291             op_free(o);
7292 #endif
7293             return newop;
7294         }
7295         if ((PL_hints & HINT_FILETEST_ACCESS) && OP_IS_FILETEST_ACCESS(o->op_type))
7296             o->op_private |= OPpFT_ACCESS;
7297         if (PL_check[kidtype] == Perl_ck_ftst
7298                 && kidtype != OP_STAT && kidtype != OP_LSTAT)
7299             o->op_private |= OPpFT_STACKED;
7300     }
7301     else {
7302 #ifdef PERL_MAD
7303         OP* const oldo = o;
7304 #else
7305         op_free(o);
7306 #endif
7307         if (type == OP_FTTTY)
7308             o = newGVOP(type, OPf_REF, PL_stdingv);
7309         else
7310             o = newUNOP(type, 0, newDEFSVOP());
7311         op_getmad(oldo,o,'O');
7312     }
7313     return o;
7314 }
7315
7316 OP *
7317 Perl_ck_fun(pTHX_ OP *o)
7318 {
7319     dVAR;
7320     const int type = o->op_type;
7321     register I32 oa = PL_opargs[type] >> OASHIFT;
7322
7323     PERL_ARGS_ASSERT_CK_FUN;
7324
7325     if (o->op_flags & OPf_STACKED) {
7326         if ((oa & OA_OPTIONAL) && (oa >> 4) && !((oa >> 4) & OA_OPTIONAL))
7327             oa &= ~OA_OPTIONAL;
7328         else
7329             return no_fh_allowed(o);
7330     }
7331
7332     if (o->op_flags & OPf_KIDS) {
7333         OP **tokid = &cLISTOPo->op_first;
7334         register OP *kid = cLISTOPo->op_first;
7335         OP *sibl;
7336         I32 numargs = 0;
7337
7338         if (kid->op_type == OP_PUSHMARK ||
7339             (kid->op_type == OP_NULL && kid->op_targ == OP_PUSHMARK))
7340         {
7341             tokid = &kid->op_sibling;
7342             kid = kid->op_sibling;
7343         }
7344         if (!kid && PL_opargs[type] & OA_DEFGV)
7345             *tokid = kid = newDEFSVOP();
7346
7347         while (oa && kid) {
7348             numargs++;
7349             sibl = kid->op_sibling;
7350 #ifdef PERL_MAD
7351             if (!sibl && kid->op_type == OP_STUB) {
7352                 numargs--;
7353                 break;
7354             }
7355 #endif
7356             switch (oa & 7) {
7357             case OA_SCALAR:
7358                 /* list seen where single (scalar) arg expected? */
7359                 if (numargs == 1 && !(oa >> 4)
7360                     && kid->op_type == OP_LIST && type != OP_SCALAR)
7361                 {
7362                     return too_many_arguments(o,PL_op_desc[type]);
7363                 }
7364                 scalar(kid);
7365                 break;
7366             case OA_LIST:
7367                 if (oa < 16) {
7368                     kid = 0;
7369                     continue;
7370                 }
7371                 else
7372                     list(kid);
7373                 break;
7374             case OA_AVREF:
7375                 if ((type == OP_PUSH || type == OP_UNSHIFT)
7376                     && !kid->op_sibling)
7377                     Perl_ck_warner(aTHX_ packWARN(WARN_SYNTAX),
7378                                    "Useless use of %s with no values",
7379                                    PL_op_desc[type]);
7380
7381                 if (kid->op_type == OP_CONST &&
7382                     (kid->op_private & OPpCONST_BARE))
7383                 {
7384                     OP * const newop = newAVREF(newGVOP(OP_GV, 0,
7385                         gv_fetchsv(((SVOP*)kid)->op_sv, GV_ADD, SVt_PVAV) ));
7386                     Perl_ck_warner_d(aTHX_ packWARN(WARN_DEPRECATED),
7387                                    "Array @%"SVf" missing the @ in argument %"IVdf" of %s()",
7388                                    SVfARG(((SVOP*)kid)->op_sv), (IV)numargs, PL_op_desc[type]);
7389 #ifdef PERL_MAD
7390                     op_getmad(kid,newop,'K');
7391 #else
7392                     op_free(kid);
7393 #endif
7394                     kid = newop;
7395                     kid->op_sibling = sibl;
7396                     *tokid = kid;
7397                 }
7398                 else if (kid->op_type != OP_RV2AV && kid->op_type != OP_PADAV)
7399                     bad_type(numargs, "array", PL_op_desc[type], kid);
7400                 op_lvalue(kid, type);
7401                 break;
7402             case OA_HVREF:
7403                 if (kid->op_type == OP_CONST &&
7404                     (kid->op_private & OPpCONST_BARE))
7405                 {
7406                     OP * const newop = newHVREF(newGVOP(OP_GV, 0,
7407                         gv_fetchsv(((SVOP*)kid)->op_sv, GV_ADD, SVt_PVHV) ));
7408                     Perl_ck_warner_d(aTHX_ packWARN(WARN_DEPRECATED),
7409                                    "Hash %%%"SVf" missing the %% in argument %"IVdf" of %s()",
7410                                    SVfARG(((SVOP*)kid)->op_sv), (IV)numargs, PL_op_desc[type]);
7411 #ifdef PERL_MAD
7412                     op_getmad(kid,newop,'K');
7413 #else
7414                     op_free(kid);
7415 #endif
7416                     kid = newop;
7417                     kid->op_sibling = sibl;
7418                     *tokid = kid;
7419                 }
7420                 else if (kid->op_type != OP_RV2HV && kid->op_type != OP_PADHV)
7421                     bad_type(numargs, "hash", PL_op_desc[type], kid);
7422                 op_lvalue(kid, type);
7423                 break;
7424             case OA_CVREF:
7425                 {
7426                     OP * const newop = newUNOP(OP_NULL, 0, kid);
7427                     kid->op_sibling = 0;
7428                     LINKLIST(kid);
7429                     newop->op_next = newop;
7430                     kid = newop;
7431                     kid->op_sibling = sibl;
7432                     *tokid = kid;
7433                 }
7434                 break;
7435             case OA_FILEREF:
7436                 if (kid->op_type != OP_GV && kid->op_type != OP_RV2GV) {
7437                     if (kid->op_type == OP_CONST &&
7438                         (kid->op_private & OPpCONST_BARE))
7439                     {
7440                         OP * const newop = newGVOP(OP_GV, 0,
7441                             gv_fetchsv(((SVOP*)kid)->op_sv, GV_ADD, SVt_PVIO));
7442                         if (!(o->op_private & 1) && /* if not unop */
7443                             kid == cLISTOPo->op_last)
7444                             cLISTOPo->op_last = newop;
7445 #ifdef PERL_MAD
7446                         op_getmad(kid,newop,'K');
7447 #else
7448                         op_free(kid);
7449 #endif
7450                         kid = newop;
7451                     }
7452                     else if (kid->op_type == OP_READLINE) {
7453                         /* neophyte patrol: open(<FH>), close(<FH>) etc. */
7454                         bad_type(numargs, "HANDLE", OP_DESC(o), kid);
7455                     }
7456                     else {
7457                         I32 flags = OPf_SPECIAL;
7458                         I32 priv = 0;
7459                         PADOFFSET targ = 0;
7460
7461                         /* is this op a FH constructor? */
7462                         if (is_handle_constructor(o,numargs)) {
7463                             const char *name = NULL;
7464                             STRLEN len = 0;
7465
7466                             flags = 0;
7467                             /* Set a flag to tell rv2gv to vivify
7468                              * need to "prove" flag does not mean something
7469                              * else already - NI-S 1999/05/07
7470                              */
7471                             priv = OPpDEREF;
7472                             if (kid->op_type == OP_PADSV) {
7473                                 SV *const namesv
7474                                     = PAD_COMPNAME_SV(kid->op_targ);
7475                                 name = SvPV_const(namesv, len);
7476                             }
7477                             else if (kid->op_type == OP_RV2SV
7478                                      && kUNOP->op_first->op_type == OP_GV)
7479                             {
7480                                 GV * const gv = cGVOPx_gv(kUNOP->op_first);
7481                                 name = GvNAME(gv);
7482                                 len = GvNAMELEN(gv);
7483                             }
7484                             else if (kid->op_type == OP_AELEM
7485                                      || kid->op_type == OP_HELEM)
7486                             {
7487                                  OP *firstop;
7488                                  OP *op = ((BINOP*)kid)->op_first;
7489                                  name = NULL;
7490                                  if (op) {
7491                                       SV *tmpstr = NULL;
7492                                       const char * const a =
7493                                            kid->op_type == OP_AELEM ?
7494                                            "[]" : "{}";
7495                                       if (((op->op_type == OP_RV2AV) ||
7496                                            (op->op_type == OP_RV2HV)) &&
7497                                           (firstop = ((UNOP*)op)->op_first) &&
7498                                           (firstop->op_type == OP_GV)) {
7499                                            /* packagevar $a[] or $h{} */
7500                                            GV * const gv = cGVOPx_gv(firstop);
7501                                            if (gv)
7502                                                 tmpstr =
7503                                                      Perl_newSVpvf(aTHX_
7504                                                                    "%s%c...%c",
7505                                                                    GvNAME(gv),
7506                                                                    a[0], a[1]);
7507                                       }
7508                                       else if (op->op_type == OP_PADAV
7509                                                || op->op_type == OP_PADHV) {
7510                                            /* lexicalvar $a[] or $h{} */
7511                                            const char * const padname =
7512                                                 PAD_COMPNAME_PV(op->op_targ);
7513                                            if (padname)
7514                                                 tmpstr =
7515                                                      Perl_newSVpvf(aTHX_
7516                                                                    "%s%c...%c",
7517                                                                    padname + 1,
7518                                                                    a[0], a[1]);
7519                                       }
7520                                       if (tmpstr) {
7521                                            name = SvPV_const(tmpstr, len);
7522                                            sv_2mortal(tmpstr);
7523                                       }
7524                                  }
7525                                  if (!name) {
7526                                       name = "__ANONIO__";
7527                                       len = 10;
7528                                  }
7529                                  op_lvalue(kid, type);
7530                             }
7531                             if (name) {
7532                                 SV *namesv;
7533                                 targ = pad_alloc(OP_RV2GV, SVs_PADTMP);
7534                                 namesv = PAD_SVl(targ);
7535                                 SvUPGRADE(namesv, SVt_PV);
7536                                 if (*name != '$')
7537                                     sv_setpvs(namesv, "$");
7538                                 sv_catpvn(namesv, name, len);
7539                             }
7540                         }
7541                         kid->op_sibling = 0;
7542                         kid = newUNOP(OP_RV2GV, flags, scalar(kid));
7543                         kid->op_targ = targ;
7544                         kid->op_private |= priv;
7545                     }
7546                     kid->op_sibling = sibl;
7547                     *tokid = kid;
7548                 }
7549                 scalar(kid);
7550                 break;
7551             case OA_SCALARREF:
7552                 op_lvalue(scalar(kid), type);
7553                 break;
7554             }
7555             oa >>= 4;
7556             tokid = &kid->op_sibling;
7557             kid = kid->op_sibling;
7558         }
7559 #ifdef PERL_MAD
7560         if (kid && kid->op_type != OP_STUB)
7561             return too_many_arguments(o,OP_DESC(o));
7562         o->op_private |= numargs;
7563 #else
7564         /* FIXME - should the numargs move as for the PERL_MAD case?  */
7565         o->op_private |= numargs;
7566         if (kid)
7567             return too_many_arguments(o,OP_DESC(o));
7568 #endif
7569         listkids(o);
7570     }
7571     else if (PL_opargs[type] & OA_DEFGV) {
7572 #ifdef PERL_MAD
7573         OP *newop = newUNOP(type, 0, newDEFSVOP());
7574         op_getmad(o,newop,'O');
7575         return newop;
7576 #else
7577         /* Ordering of these two is important to keep f_map.t passing.  */
7578         op_free(o);
7579         return newUNOP(type, 0, newDEFSVOP());
7580 #endif
7581     }
7582
7583     if (oa) {
7584         while (oa & OA_OPTIONAL)
7585             oa >>= 4;
7586         if (oa && oa != OA_LIST)
7587             return too_few_arguments(o,OP_DESC(o));
7588     }
7589     return o;
7590 }
7591
7592 OP *
7593 Perl_ck_glob(pTHX_ OP *o)
7594 {
7595     dVAR;
7596     GV *gv;
7597
7598     PERL_ARGS_ASSERT_CK_GLOB;
7599
7600     o = ck_fun(o);
7601     if ((o->op_flags & OPf_KIDS) && !cLISTOPo->op_first->op_sibling)
7602         op_append_elem(OP_GLOB, o, newDEFSVOP());
7603
7604     if (!((gv = gv_fetchpvs("glob", GV_NOTQUAL, SVt_PVCV))
7605           && GvCVu(gv) && GvIMPORTED_CV(gv)))
7606     {
7607         gv = gv_fetchpvs("CORE::GLOBAL::glob", 0, SVt_PVCV);
7608     }
7609
7610 #if !defined(PERL_EXTERNAL_GLOB)
7611     /* XXX this can be tightened up and made more failsafe. */
7612     if (!(gv && GvCVu(gv) && GvIMPORTED_CV(gv))) {
7613         GV *glob_gv;
7614         ENTER;
7615         Perl_load_module(aTHX_ PERL_LOADMOD_NOIMPORT,
7616                 newSVpvs("File::Glob"), NULL, NULL, NULL);
7617         if((glob_gv = gv_fetchpvs("File::Glob::csh_glob", 0, SVt_PVCV))) {
7618             gv = gv_fetchpvs("CORE::GLOBAL::glob", 0, SVt_PVCV);
7619             GvCV(gv) = GvCV(glob_gv);
7620             SvREFCNT_inc_void(MUTABLE_SV(GvCV(gv)));
7621             GvIMPORTED_CV_on(gv);
7622         }
7623         LEAVE;
7624     }
7625 #endif /* PERL_EXTERNAL_GLOB */
7626
7627     if (gv && GvCVu(gv) && GvIMPORTED_CV(gv)) {
7628         op_append_elem(OP_GLOB, o,
7629                     newSVOP(OP_CONST, 0, newSViv(PL_glob_index++)));
7630         o->op_type = OP_LIST;
7631         o->op_ppaddr = PL_ppaddr[OP_LIST];
7632         cLISTOPo->op_first->op_type = OP_PUSHMARK;
7633         cLISTOPo->op_first->op_ppaddr = PL_ppaddr[OP_PUSHMARK];
7634         cLISTOPo->op_first->op_targ = 0;
7635         o = newUNOP(OP_ENTERSUB, OPf_STACKED,
7636                     op_append_elem(OP_LIST, o,
7637                                 scalar(newUNOP(OP_RV2CV, 0,
7638                                                newGVOP(OP_GV, 0, gv)))));
7639         o = newUNOP(OP_NULL, 0, ck_subr(o));
7640         o->op_targ = OP_GLOB;           /* hint at what it used to be */
7641         return o;
7642     }
7643     gv = newGVgen("main");
7644     gv_IOadd(gv);
7645     op_append_elem(OP_GLOB, o, newGVOP(OP_GV, 0, gv));
7646     scalarkids(o);
7647     return o;
7648 }
7649
7650 OP *
7651 Perl_ck_grep(pTHX_ OP *o)
7652 {
7653     dVAR;
7654     LOGOP *gwop = NULL;
7655     OP *kid;
7656     const OPCODE type = o->op_type == OP_GREPSTART ? OP_GREPWHILE : OP_MAPWHILE;
7657     PADOFFSET offset;
7658
7659     PERL_ARGS_ASSERT_CK_GREP;
7660
7661     o->op_ppaddr = PL_ppaddr[OP_GREPSTART];
7662     /* don't allocate gwop here, as we may leak it if PL_parser->error_count > 0 */
7663
7664     if (o->op_flags & OPf_STACKED) {
7665         OP* k;
7666         o = ck_sort(o);
7667         kid = cUNOPx(cLISTOPo->op_first->op_sibling)->op_first;
7668         if (kid->op_type != OP_SCOPE && kid->op_type != OP_LEAVE)
7669             return no_fh_allowed(o);
7670         for (k = kid; k; k = k->op_next) {
7671             kid = k;
7672         }
7673         NewOp(1101, gwop, 1, LOGOP);
7674         kid->op_next = (OP*)gwop;
7675         o->op_flags &= ~OPf_STACKED;
7676     }
7677     kid = cLISTOPo->op_first->op_sibling;
7678     if (type == OP_MAPWHILE)
7679         list(kid);
7680     else
7681         scalar(kid);
7682     o = ck_fun(o);
7683     if (PL_parser && PL_parser->error_count)
7684         return o;
7685     kid = cLISTOPo->op_first->op_sibling;
7686     if (kid->op_type != OP_NULL)
7687         Perl_croak(aTHX_ "panic: ck_grep");
7688     kid = kUNOP->op_first;
7689
7690     if (!gwop)
7691         NewOp(1101, gwop, 1, LOGOP);
7692     gwop->op_type = type;
7693     gwop->op_ppaddr = PL_ppaddr[type];
7694     gwop->op_first = listkids(o);
7695     gwop->op_flags |= OPf_KIDS;
7696     gwop->op_other = LINKLIST(kid);
7697     kid->op_next = (OP*)gwop;
7698     offset = Perl_pad_findmy(aTHX_ STR_WITH_LEN("$_"), 0);
7699     if (offset == NOT_IN_PAD || PAD_COMPNAME_FLAGS_isOUR(offset)) {
7700         o->op_private = gwop->op_private = 0;
7701         gwop->op_targ = pad_alloc(type, SVs_PADTMP);
7702     }
7703     else {
7704         o->op_private = gwop->op_private = OPpGREP_LEX;
7705         gwop->op_targ = o->op_targ = offset;
7706     }
7707
7708     kid = cLISTOPo->op_first->op_sibling;
7709     if (!kid || !kid->op_sibling)
7710         return too_few_arguments(o,OP_DESC(o));
7711     for (kid = kid->op_sibling; kid; kid = kid->op_sibling)
7712         op_lvalue(kid, OP_GREPSTART);
7713
7714     return (OP*)gwop;
7715 }
7716
7717 OP *
7718 Perl_ck_index(pTHX_ OP *o)
7719 {
7720     PERL_ARGS_ASSERT_CK_INDEX;
7721
7722     if (o->op_flags & OPf_KIDS) {
7723         OP *kid = cLISTOPo->op_first->op_sibling;       /* get past pushmark */
7724         if (kid)
7725             kid = kid->op_sibling;                      /* get past "big" */
7726         if (kid && kid->op_type == OP_CONST)
7727             fbm_compile(((SVOP*)kid)->op_sv, 0);
7728     }
7729     return ck_fun(o);
7730 }
7731
7732 OP *
7733 Perl_ck_lfun(pTHX_ OP *o)
7734 {
7735     const OPCODE type = o->op_type;
7736
7737     PERL_ARGS_ASSERT_CK_LFUN;
7738
7739     return modkids(ck_fun(o), type);
7740 }
7741
7742 OP *
7743 Perl_ck_defined(pTHX_ OP *o)            /* 19990527 MJD */
7744 {
7745     PERL_ARGS_ASSERT_CK_DEFINED;
7746
7747     if ((o->op_flags & OPf_KIDS)) {
7748         switch (cUNOPo->op_first->op_type) {
7749         case OP_RV2AV:
7750             /* This is needed for
7751                if (defined %stash::)
7752                to work.   Do not break Tk.
7753                */
7754             break;                      /* Globals via GV can be undef */
7755         case OP_PADAV:
7756         case OP_AASSIGN:                /* Is this a good idea? */
7757             Perl_ck_warner_d(aTHX_ packWARN(WARN_DEPRECATED),
7758                            "defined(@array) is deprecated");
7759             Perl_ck_warner_d(aTHX_ packWARN(WARN_DEPRECATED),
7760                            "\t(Maybe you should just omit the defined()?)\n");
7761         break;
7762         case OP_RV2HV:
7763         case OP_PADHV:
7764             Perl_ck_warner_d(aTHX_ packWARN(WARN_DEPRECATED),
7765                            "defined(%%hash) is deprecated");
7766             Perl_ck_warner_d(aTHX_ packWARN(WARN_DEPRECATED),
7767                            "\t(Maybe you should just omit the defined()?)\n");
7768             break;
7769         default:
7770             /* no warning */
7771             break;
7772         }
7773     }
7774     return ck_rfun(o);
7775 }
7776
7777 OP *
7778 Perl_ck_readline(pTHX_ OP *o)
7779 {
7780     PERL_ARGS_ASSERT_CK_READLINE;
7781
7782     if (!(o->op_flags & OPf_KIDS)) {
7783         OP * const newop
7784             = newUNOP(OP_READLINE, 0, newGVOP(OP_GV, 0, PL_argvgv));
7785 #ifdef PERL_MAD
7786         op_getmad(o,newop,'O');
7787 #else
7788         op_free(o);
7789 #endif
7790         return newop;
7791     }
7792     return o;
7793 }
7794
7795 OP *
7796 Perl_ck_rfun(pTHX_ OP *o)
7797 {
7798     const OPCODE type = o->op_type;
7799
7800     PERL_ARGS_ASSERT_CK_RFUN;
7801
7802     return refkids(ck_fun(o), type);
7803 }
7804
7805 OP *
7806 Perl_ck_listiob(pTHX_ OP *o)
7807 {
7808     register OP *kid;
7809
7810     PERL_ARGS_ASSERT_CK_LISTIOB;
7811
7812     kid = cLISTOPo->op_first;
7813     if (!kid) {
7814         o = force_list(o);
7815         kid = cLISTOPo->op_first;
7816     }
7817     if (kid->op_type == OP_PUSHMARK)
7818         kid = kid->op_sibling;
7819     if (kid && o->op_flags & OPf_STACKED)
7820         kid = kid->op_sibling;
7821     else if (kid && !kid->op_sibling) {         /* print HANDLE; */
7822         if (kid->op_type == OP_CONST && kid->op_private & OPpCONST_BARE) {
7823             o->op_flags |= OPf_STACKED; /* make it a filehandle */
7824             kid = newUNOP(OP_RV2GV, OPf_REF, scalar(kid));
7825             cLISTOPo->op_first->op_sibling = kid;
7826             cLISTOPo->op_last = kid;
7827             kid = kid->op_sibling;
7828         }
7829     }
7830
7831     if (!kid)
7832         op_append_elem(o->op_type, o, newDEFSVOP());
7833
7834     return listkids(o);
7835 }
7836
7837 OP *
7838 Perl_ck_smartmatch(pTHX_ OP *o)
7839 {
7840     dVAR;
7841     PERL_ARGS_ASSERT_CK_SMARTMATCH;
7842     if (0 == (o->op_flags & OPf_SPECIAL)) {
7843         OP *first  = cBINOPo->op_first;
7844         OP *second = first->op_sibling;
7845         
7846         /* Implicitly take a reference to an array or hash */
7847         first->op_sibling = NULL;
7848         first = cBINOPo->op_first = ref_array_or_hash(first);
7849         second = first->op_sibling = ref_array_or_hash(second);
7850         
7851         /* Implicitly take a reference to a regular expression */
7852         if (first->op_type == OP_MATCH) {
7853             first->op_type = OP_QR;
7854             first->op_ppaddr = PL_ppaddr[OP_QR];
7855         }
7856         if (second->op_type == OP_MATCH) {
7857             second->op_type = OP_QR;
7858             second->op_ppaddr = PL_ppaddr[OP_QR];
7859         }
7860     }
7861     
7862     return o;
7863 }
7864
7865
7866 OP *
7867 Perl_ck_sassign(pTHX_ OP *o)
7868 {
7869     dVAR;
7870     OP * const kid = cLISTOPo->op_first;
7871
7872     PERL_ARGS_ASSERT_CK_SASSIGN;
7873
7874     /* has a disposable target? */
7875     if ((PL_opargs[kid->op_type] & OA_TARGLEX)
7876         && !(kid->op_flags & OPf_STACKED)
7877         /* Cannot steal the second time! */
7878         && !(kid->op_private & OPpTARGET_MY)
7879         /* Keep the full thing for madskills */
7880         && !PL_madskills
7881         )
7882     {
7883         OP * const kkid = kid->op_sibling;
7884
7885         /* Can just relocate the target. */
7886         if (kkid && kkid->op_type == OP_PADSV
7887             && !(kkid->op_private & OPpLVAL_INTRO))
7888         {
7889             kid->op_targ = kkid->op_targ;
7890             kkid->op_targ = 0;
7891             /* Now we do not need PADSV and SASSIGN. */
7892             kid->op_sibling = o->op_sibling;    /* NULL */
7893             cLISTOPo->op_first = NULL;
7894             op_free(o);
7895             op_free(kkid);
7896             kid->op_private |= OPpTARGET_MY;    /* Used for context settings */
7897             return kid;
7898         }
7899     }
7900     if (kid->op_sibling) {
7901         OP *kkid = kid->op_sibling;
7902         if (kkid->op_type == OP_PADSV
7903                 && (kkid->op_private & OPpLVAL_INTRO)
7904                 && SvPAD_STATE(*av_fetch(PL_comppad_name, kkid->op_targ, FALSE))) {
7905             const PADOFFSET target = kkid->op_targ;
7906             OP *const other = newOP(OP_PADSV,
7907                                     kkid->op_flags
7908                                     | ((kkid->op_private & ~OPpLVAL_INTRO) << 8));
7909             OP *const first = newOP(OP_NULL, 0);
7910             OP *const nullop = newCONDOP(0, first, o, other);
7911             OP *const condop = first->op_next;
7912             /* hijacking PADSTALE for uninitialized state variables */
7913             SvPADSTALE_on(PAD_SVl(target));
7914
7915             condop->op_type = OP_ONCE;
7916             condop->op_ppaddr = PL_ppaddr[OP_ONCE];
7917             condop->op_targ = target;
7918             other->op_targ = target;
7919
7920             /* Because we change the type of the op here, we will skip the
7921                assinment binop->op_last = binop->op_first->op_sibling; at the
7922                end of Perl_newBINOP(). So need to do it here. */
7923             cBINOPo->op_last = cBINOPo->op_first->op_sibling;
7924
7925             return nullop;
7926         }
7927     }
7928     return o;
7929 }
7930
7931 OP *
7932 Perl_ck_match(pTHX_ OP *o)
7933 {
7934     dVAR;
7935
7936     PERL_ARGS_ASSERT_CK_MATCH;
7937
7938     if (o->op_type != OP_QR && PL_compcv) {
7939         const PADOFFSET offset = Perl_pad_findmy(aTHX_ STR_WITH_LEN("$_"), 0);
7940         if (offset != NOT_IN_PAD && !(PAD_COMPNAME_FLAGS_isOUR(offset))) {
7941             o->op_targ = offset;
7942             o->op_private |= OPpTARGET_MY;
7943         }
7944     }
7945     if (o->op_type == OP_MATCH || o->op_type == OP_QR)
7946         o->op_private |= OPpRUNTIME;
7947     return o;
7948 }
7949
7950 OP *
7951 Perl_ck_method(pTHX_ OP *o)
7952 {
7953     OP * const kid = cUNOPo->op_first;
7954
7955     PERL_ARGS_ASSERT_CK_METHOD;
7956
7957     if (kid->op_type == OP_CONST) {
7958         SV* sv = kSVOP->op_sv;
7959         const char * const method = SvPVX_const(sv);
7960         if (!(strchr(method, ':') || strchr(method, '\''))) {
7961             OP *cmop;
7962             if (!SvREADONLY(sv) || !SvFAKE(sv)) {
7963                 sv = newSVpvn_share(method, SvCUR(sv), 0);
7964             }
7965             else {
7966                 kSVOP->op_sv = NULL;
7967             }
7968             cmop = newSVOP(OP_METHOD_NAMED, 0, sv);
7969 #ifdef PERL_MAD
7970             op_getmad(o,cmop,'O');
7971 #else
7972             op_free(o);
7973 #endif
7974             return cmop;
7975         }
7976     }
7977     return o;
7978 }
7979
7980 OP *
7981 Perl_ck_null(pTHX_ OP *o)
7982 {
7983     PERL_ARGS_ASSERT_CK_NULL;
7984     PERL_UNUSED_CONTEXT;
7985     return o;
7986 }
7987
7988 OP *
7989 Perl_ck_open(pTHX_ OP *o)
7990 {
7991     dVAR;
7992     HV * const table = GvHV(PL_hintgv);
7993
7994     PERL_ARGS_ASSERT_CK_OPEN;
7995
7996     if (table) {
7997         SV **svp = hv_fetchs(table, "open_IN", FALSE);
7998         if (svp && *svp) {
7999             STRLEN len = 0;
8000             const char *d = SvPV_const(*svp, len);
8001             const I32 mode = mode_from_discipline(d, len);
8002             if (mode & O_BINARY)
8003                 o->op_private |= OPpOPEN_IN_RAW;
8004             else if (mode & O_TEXT)
8005                 o->op_private |= OPpOPEN_IN_CRLF;
8006         }
8007
8008         svp = hv_fetchs(table, "open_OUT", FALSE);
8009         if (svp && *svp) {
8010             STRLEN len = 0;
8011             const char *d = SvPV_const(*svp, len);
8012             const I32 mode = mode_from_discipline(d, len);
8013             if (mode & O_BINARY)
8014                 o->op_private |= OPpOPEN_OUT_RAW;
8015             else if (mode & O_TEXT)
8016                 o->op_private |= OPpOPEN_OUT_CRLF;
8017         }
8018     }
8019     if (o->op_type == OP_BACKTICK) {
8020         if (!(o->op_flags & OPf_KIDS)) {
8021             OP * const newop = newUNOP(OP_BACKTICK, 0, newDEFSVOP());
8022 #ifdef PERL_MAD
8023             op_getmad(o,newop,'O');
8024 #else
8025             op_free(o);
8026 #endif
8027             return newop;
8028         }
8029         return o;
8030     }
8031     {
8032          /* In case of three-arg dup open remove strictness
8033           * from the last arg if it is a bareword. */
8034          OP * const first = cLISTOPx(o)->op_first; /* The pushmark. */
8035          OP * const last  = cLISTOPx(o)->op_last;  /* The bareword. */
8036          OP *oa;
8037          const char *mode;
8038
8039          if ((last->op_type == OP_CONST) &&             /* The bareword. */
8040              (last->op_private & OPpCONST_BARE) &&
8041              (last->op_private & OPpCONST_STRICT) &&
8042              (oa = first->op_sibling) &&                /* The fh. */
8043              (oa = oa->op_sibling) &&                   /* The mode. */
8044              (oa->op_type == OP_CONST) &&
8045              SvPOK(((SVOP*)oa)->op_sv) &&
8046              (mode = SvPVX_const(((SVOP*)oa)->op_sv)) &&
8047              mode[0] == '>' && mode[1] == '&' &&        /* A dup open. */
8048              (last == oa->op_sibling))                  /* The bareword. */
8049               last->op_private &= ~OPpCONST_STRICT;
8050     }
8051     return ck_fun(o);
8052 }
8053
8054 OP *
8055 Perl_ck_repeat(pTHX_ OP *o)
8056 {
8057     PERL_ARGS_ASSERT_CK_REPEAT;
8058
8059     if (cBINOPo->op_first->op_flags & OPf_PARENS) {
8060         o->op_private |= OPpREPEAT_DOLIST;
8061         cBINOPo->op_first = force_list(cBINOPo->op_first);
8062     }
8063     else
8064         scalar(o);
8065     return o;
8066 }
8067
8068 OP *
8069 Perl_ck_require(pTHX_ OP *o)
8070 {
8071     dVAR;
8072     GV* gv = NULL;
8073
8074     PERL_ARGS_ASSERT_CK_REQUIRE;
8075
8076     if (o->op_flags & OPf_KIDS) {       /* Shall we supply missing .pm? */
8077         SVOP * const kid = (SVOP*)cUNOPo->op_first;
8078
8079         if (kid->op_type == OP_CONST && (kid->op_private & OPpCONST_BARE)) {
8080             SV * const sv = kid->op_sv;
8081             U32 was_readonly = SvREADONLY(sv);
8082             char *s;
8083             STRLEN len;
8084             const char *end;
8085
8086             if (was_readonly) {
8087                 if (SvFAKE(sv)) {
8088                     sv_force_normal_flags(sv, 0);
8089                     assert(!SvREADONLY(sv));
8090                     was_readonly = 0;
8091                 } else {
8092                     SvREADONLY_off(sv);
8093                 }
8094             }   
8095
8096             s = SvPVX(sv);
8097             len = SvCUR(sv);
8098             end = s + len;
8099             for (; s < end; s++) {
8100                 if (*s == ':' && s[1] == ':') {
8101                     *s = '/';
8102                     Move(s+2, s+1, end - s - 1, char);
8103                     --end;
8104                 }
8105             }
8106             SvEND_set(sv, end);
8107             sv_catpvs(sv, ".pm");
8108             SvFLAGS(sv) |= was_readonly;
8109         }
8110     }
8111
8112     if (!(o->op_flags & OPf_SPECIAL)) { /* Wasn't written as CORE::require */
8113         /* handle override, if any */
8114         gv = gv_fetchpvs("require", GV_NOTQUAL, SVt_PVCV);
8115         if (!(gv && GvCVu(gv) && GvIMPORTED_CV(gv))) {
8116             GV * const * const gvp = (GV**)hv_fetchs(PL_globalstash, "require", FALSE);
8117             gv = gvp ? *gvp : NULL;
8118         }
8119     }
8120
8121     if (gv && GvCVu(gv) && GvIMPORTED_CV(gv)) {
8122         OP * const kid = cUNOPo->op_first;
8123         OP * newop;
8124
8125         cUNOPo->op_first = 0;
8126 #ifndef PERL_MAD
8127         op_free(o);
8128 #endif
8129         newop = ck_subr(newUNOP(OP_ENTERSUB, OPf_STACKED,
8130                                 op_append_elem(OP_LIST, kid,
8131                                             scalar(newUNOP(OP_RV2CV, 0,
8132                                                            newGVOP(OP_GV, 0,
8133                                                                    gv))))));
8134         op_getmad(o,newop,'O');
8135         return newop;
8136     }
8137
8138     return scalar(ck_fun(o));
8139 }
8140
8141 OP *
8142 Perl_ck_return(pTHX_ OP *o)
8143 {
8144     dVAR;
8145     OP *kid;
8146
8147     PERL_ARGS_ASSERT_CK_RETURN;
8148
8149     kid = cLISTOPo->op_first->op_sibling;
8150     if (CvLVALUE(PL_compcv)) {
8151         for (; kid; kid = kid->op_sibling)
8152             op_lvalue(kid, OP_LEAVESUBLV);
8153     } else {
8154         for (; kid; kid = kid->op_sibling)
8155             if ((kid->op_type == OP_NULL)
8156                 && ((kid->op_flags & (OPf_SPECIAL|OPf_KIDS)) == (OPf_SPECIAL|OPf_KIDS))) {
8157                 /* This is a do block */
8158                 OP *op = kUNOP->op_first;
8159                 if (op->op_type == OP_LEAVE && op->op_flags & OPf_KIDS) {
8160                     op = cUNOPx(op)->op_first;
8161                     assert(op->op_type == OP_ENTER && !(op->op_flags & OPf_SPECIAL));
8162                     /* Force the use of the caller's context */
8163                     op->op_flags |= OPf_SPECIAL;
8164                 }
8165             }
8166     }
8167
8168     return o;
8169 }
8170
8171 OP *
8172 Perl_ck_select(pTHX_ OP *o)
8173 {
8174     dVAR;
8175     OP* kid;
8176
8177     PERL_ARGS_ASSERT_CK_SELECT;
8178
8179     if (o->op_flags & OPf_KIDS) {
8180         kid = cLISTOPo->op_first->op_sibling;   /* get past pushmark */
8181         if (kid && kid->op_sibling) {
8182             o->op_type = OP_SSELECT;
8183             o->op_ppaddr = PL_ppaddr[OP_SSELECT];
8184             o = ck_fun(o);
8185             return fold_constants(o);
8186         }
8187     }
8188     o = ck_fun(o);
8189     kid = cLISTOPo->op_first->op_sibling;    /* get past pushmark */
8190     if (kid && kid->op_type == OP_RV2GV)
8191         kid->op_private &= ~HINT_STRICT_REFS;
8192     return o;
8193 }
8194
8195 OP *
8196 Perl_ck_shift(pTHX_ OP *o)
8197 {
8198     dVAR;
8199     const I32 type = o->op_type;
8200
8201     PERL_ARGS_ASSERT_CK_SHIFT;
8202
8203     if (!(o->op_flags & OPf_KIDS)) {
8204         OP *argop;
8205
8206         if (!CvUNIQUE(PL_compcv)) {
8207             o->op_flags |= OPf_SPECIAL;
8208             return o;
8209         }
8210
8211         argop = newUNOP(OP_RV2AV, 0, scalar(newGVOP(OP_GV, 0, PL_argvgv)));
8212 #ifdef PERL_MAD
8213         {
8214             OP * const oldo = o;
8215             o = newUNOP(type, 0, scalar(argop));
8216             op_getmad(oldo,o,'O');
8217             return o;
8218         }
8219 #else
8220         op_free(o);
8221         return newUNOP(type, 0, scalar(argop));
8222 #endif
8223     }
8224     return scalar(modkids(ck_push(o), type));
8225 }
8226
8227 OP *
8228 Perl_ck_sort(pTHX_ OP *o)
8229 {
8230     dVAR;
8231     OP *firstkid;
8232
8233     PERL_ARGS_ASSERT_CK_SORT;
8234
8235     if (o->op_type == OP_SORT && (PL_hints & HINT_LOCALIZE_HH) != 0) {
8236         HV * const hinthv = GvHV(PL_hintgv);
8237         if (hinthv) {
8238             SV ** const svp = hv_fetchs(hinthv, "sort", FALSE);
8239             if (svp) {
8240                 const I32 sorthints = (I32)SvIV(*svp);
8241                 if ((sorthints & HINT_SORT_QUICKSORT) != 0)
8242                     o->op_private |= OPpSORT_QSORT;
8243                 if ((sorthints & HINT_SORT_STABLE) != 0)
8244                     o->op_private |= OPpSORT_STABLE;
8245             }
8246         }
8247     }
8248
8249     if (o->op_type == OP_SORT && o->op_flags & OPf_STACKED)
8250         simplify_sort(o);
8251     firstkid = cLISTOPo->op_first->op_sibling;          /* get past pushmark */
8252     if (o->op_flags & OPf_STACKED) {                    /* may have been cleared */
8253         OP *k = NULL;
8254         OP *kid = cUNOPx(firstkid)->op_first;           /* get past null */
8255
8256         if (kid->op_type == OP_SCOPE || kid->op_type == OP_LEAVE) {
8257             LINKLIST(kid);
8258             if (kid->op_type == OP_SCOPE) {
8259                 k = kid->op_next;
8260                 kid->op_next = 0;
8261             }
8262             else if (kid->op_type == OP_LEAVE) {
8263                 if (o->op_type == OP_SORT) {
8264                     op_null(kid);                       /* wipe out leave */
8265                     kid->op_next = kid;
8266
8267                     for (k = kLISTOP->op_first->op_next; k; k = k->op_next) {
8268                         if (k->op_next == kid)
8269                             k->op_next = 0;
8270                         /* don't descend into loops */
8271                         else if (k->op_type == OP_ENTERLOOP
8272                                  || k->op_type == OP_ENTERITER)
8273                         {
8274                             k = cLOOPx(k)->op_lastop;
8275                         }
8276                     }
8277                 }
8278                 else
8279                     kid->op_next = 0;           /* just disconnect the leave */
8280                 k = kLISTOP->op_first;
8281             }
8282             CALL_PEEP(k);
8283
8284             kid = firstkid;
8285             if (o->op_type == OP_SORT) {
8286                 /* provide scalar context for comparison function/block */
8287                 kid = scalar(kid);
8288                 kid->op_next = kid;
8289             }
8290             else
8291                 kid->op_next = k;
8292             o->op_flags |= OPf_SPECIAL;
8293         }
8294         else if (kid->op_type == OP_RV2SV || kid->op_type == OP_PADSV)
8295             op_null(firstkid);
8296
8297         firstkid = firstkid->op_sibling;
8298     }
8299
8300     /* provide list context for arguments */
8301     if (o->op_type == OP_SORT)
8302         list(firstkid);
8303
8304     return o;
8305 }
8306
8307 STATIC void
8308 S_simplify_sort(pTHX_ OP *o)
8309 {
8310     dVAR;
8311     register OP *kid = cLISTOPo->op_first->op_sibling;  /* get past pushmark */
8312     OP *k;
8313     int descending;
8314     GV *gv;
8315     const char *gvname;
8316
8317     PERL_ARGS_ASSERT_SIMPLIFY_SORT;
8318
8319     if (!(o->op_flags & OPf_STACKED))
8320         return;
8321     GvMULTI_on(gv_fetchpvs("a", GV_ADD|GV_NOTQUAL, SVt_PV));
8322     GvMULTI_on(gv_fetchpvs("b", GV_ADD|GV_NOTQUAL, SVt_PV));
8323     kid = kUNOP->op_first;                              /* get past null */
8324     if (kid->op_type != OP_SCOPE)
8325         return;
8326     kid = kLISTOP->op_last;                             /* get past scope */
8327     switch(kid->op_type) {
8328         case OP_NCMP:
8329         case OP_I_NCMP:
8330         case OP_SCMP:
8331             break;
8332         default:
8333             return;
8334     }
8335     k = kid;                                            /* remember this node*/
8336     if (kBINOP->op_first->op_type != OP_RV2SV)
8337         return;
8338     kid = kBINOP->op_first;                             /* get past cmp */
8339     if (kUNOP->op_first->op_type != OP_GV)
8340         return;
8341     kid = kUNOP->op_first;                              /* get past rv2sv */
8342     gv = kGVOP_gv;
8343     if (GvSTASH(gv) != PL_curstash)
8344         return;
8345     gvname = GvNAME(gv);
8346     if (*gvname == 'a' && gvname[1] == '\0')
8347         descending = 0;
8348     else if (*gvname == 'b' && gvname[1] == '\0')
8349         descending = 1;
8350     else
8351         return;
8352
8353     kid = k;                                            /* back to cmp */
8354     if (kBINOP->op_last->op_type != OP_RV2SV)
8355         return;
8356     kid = kBINOP->op_last;                              /* down to 2nd arg */
8357     if (kUNOP->op_first->op_type != OP_GV)
8358         return;
8359     kid = kUNOP->op_first;                              /* get past rv2sv */
8360     gv = kGVOP_gv;
8361     if (GvSTASH(gv) != PL_curstash)
8362         return;
8363     gvname = GvNAME(gv);
8364     if ( descending
8365          ? !(*gvname == 'a' && gvname[1] == '\0')
8366          : !(*gvname == 'b' && gvname[1] == '\0'))
8367         return;
8368     o->op_flags &= ~(OPf_STACKED | OPf_SPECIAL);
8369     if (descending)
8370         o->op_private |= OPpSORT_DESCEND;
8371     if (k->op_type == OP_NCMP)
8372         o->op_private |= OPpSORT_NUMERIC;
8373     if (k->op_type == OP_I_NCMP)
8374         o->op_private |= OPpSORT_NUMERIC | OPpSORT_INTEGER;
8375     kid = cLISTOPo->op_first->op_sibling;
8376     cLISTOPo->op_first->op_sibling = kid->op_sibling; /* bypass old block */
8377 #ifdef PERL_MAD
8378     op_getmad(kid,o,'S');                             /* then delete it */
8379 #else
8380     op_free(kid);                                     /* then delete it */
8381 #endif
8382 }
8383
8384 OP *
8385 Perl_ck_split(pTHX_ OP *o)
8386 {
8387     dVAR;
8388     register OP *kid;
8389
8390     PERL_ARGS_ASSERT_CK_SPLIT;
8391
8392     if (o->op_flags & OPf_STACKED)
8393         return no_fh_allowed(o);
8394
8395     kid = cLISTOPo->op_first;
8396     if (kid->op_type != OP_NULL)
8397         Perl_croak(aTHX_ "panic: ck_split");
8398     kid = kid->op_sibling;
8399     op_free(cLISTOPo->op_first);
8400     cLISTOPo->op_first = kid;
8401     if (!kid) {
8402         cLISTOPo->op_first = kid = newSVOP(OP_CONST, 0, newSVpvs(" "));
8403         cLISTOPo->op_last = kid; /* There was only one element previously */
8404     }
8405
8406     if (kid->op_type != OP_MATCH || kid->op_flags & OPf_STACKED) {
8407         OP * const sibl = kid->op_sibling;
8408         kid->op_sibling = 0;
8409         kid = pmruntime( newPMOP(OP_MATCH, OPf_SPECIAL), kid, 0);
8410         if (cLISTOPo->op_first == cLISTOPo->op_last)
8411             cLISTOPo->op_last = kid;
8412         cLISTOPo->op_first = kid;
8413         kid->op_sibling = sibl;
8414     }
8415
8416     kid->op_type = OP_PUSHRE;
8417     kid->op_ppaddr = PL_ppaddr[OP_PUSHRE];
8418     scalar(kid);
8419     if (((PMOP *)kid)->op_pmflags & PMf_GLOBAL) {
8420       Perl_ck_warner(aTHX_ packWARN(WARN_REGEXP),
8421                      "Use of /g modifier is meaningless in split");
8422     }
8423
8424     if (!kid->op_sibling)
8425         op_append_elem(OP_SPLIT, o, newDEFSVOP());
8426
8427     kid = kid->op_sibling;
8428     scalar(kid);
8429
8430     if (!kid->op_sibling)
8431         op_append_elem(OP_SPLIT, o, newSVOP(OP_CONST, 0, newSViv(0)));
8432     assert(kid->op_sibling);
8433
8434     kid = kid->op_sibling;
8435     scalar(kid);
8436
8437     if (kid->op_sibling)
8438         return too_many_arguments(o,OP_DESC(o));
8439
8440     return o;
8441 }
8442
8443 OP *
8444 Perl_ck_join(pTHX_ OP *o)
8445 {
8446     const OP * const kid = cLISTOPo->op_first->op_sibling;
8447
8448     PERL_ARGS_ASSERT_CK_JOIN;
8449
8450     if (kid && kid->op_type == OP_MATCH) {
8451         if (ckWARN(WARN_SYNTAX)) {
8452             const REGEXP *re = PM_GETRE(kPMOP);
8453             const char *pmstr = re ? RX_PRECOMP_const(re) : "STRING";
8454             const STRLEN len = re ? RX_PRELEN(re) : 6;
8455             Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
8456                         "/%.*s/ should probably be written as \"%.*s\"",
8457                         (int)len, pmstr, (int)len, pmstr);
8458         }
8459     }
8460     return ck_fun(o);
8461 }
8462
8463 /*
8464 =for apidoc Am|CV *|rv2cv_op_cv|OP *cvop|U32 flags
8465
8466 Examines an op, which is expected to identify a subroutine at runtime,
8467 and attempts to determine at compile time which subroutine it identifies.
8468 This is normally used during Perl compilation to determine whether
8469 a prototype can be applied to a function call.  I<cvop> is the op
8470 being considered, normally an C<rv2cv> op.  A pointer to the identified
8471 subroutine is returned, if it could be determined statically, and a null
8472 pointer is returned if it was not possible to determine statically.
8473
8474 Currently, the subroutine can be identified statically if the RV that the
8475 C<rv2cv> is to operate on is provided by a suitable C<gv> or C<const> op.
8476 A C<gv> op is suitable if the GV's CV slot is populated.  A C<const> op is
8477 suitable if the constant value must be an RV pointing to a CV.  Details of
8478 this process may change in future versions of Perl.  If the C<rv2cv> op
8479 has the C<OPpENTERSUB_AMPER> flag set then no attempt is made to identify
8480 the subroutine statically: this flag is used to suppress compile-time
8481 magic on a subroutine call, forcing it to use default runtime behaviour.
8482
8483 If I<flags> has the bit C<RV2CVOPCV_MARK_EARLY> set, then the handling
8484 of a GV reference is modified.  If a GV was examined and its CV slot was
8485 found to be empty, then the C<gv> op has the C<OPpEARLY_CV> flag set.
8486 If the op is not optimised away, and the CV slot is later populated with
8487 a subroutine having a prototype, that flag eventually triggers the warning
8488 "called too early to check prototype".
8489
8490 If I<flags> has the bit C<RV2CVOPCV_RETURN_NAME_GV> set, then instead
8491 of returning a pointer to the subroutine it returns a pointer to the
8492 GV giving the most appropriate name for the subroutine in this context.
8493 Normally this is just the C<CvGV> of the subroutine, but for an anonymous
8494 (C<CvANON>) subroutine that is referenced through a GV it will be the
8495 referencing GV.  The resulting C<GV*> is cast to C<CV*> to be returned.
8496 A null pointer is returned as usual if there is no statically-determinable
8497 subroutine.
8498
8499 =cut
8500 */
8501
8502 CV *
8503 Perl_rv2cv_op_cv(pTHX_ OP *cvop, U32 flags)
8504 {
8505     OP *rvop;
8506     CV *cv;
8507     GV *gv;
8508     PERL_ARGS_ASSERT_RV2CV_OP_CV;
8509     if (flags & ~(RV2CVOPCV_MARK_EARLY|RV2CVOPCV_RETURN_NAME_GV))
8510         Perl_croak(aTHX_ "panic: rv2cv_op_cv bad flags %x", (unsigned)flags);
8511     if (cvop->op_type != OP_RV2CV)
8512         return NULL;
8513     if (cvop->op_private & OPpENTERSUB_AMPER)
8514         return NULL;
8515     if (!(cvop->op_flags & OPf_KIDS))
8516         return NULL;
8517     rvop = cUNOPx(cvop)->op_first;
8518     switch (rvop->op_type) {
8519         case OP_GV: {
8520             gv = cGVOPx_gv(rvop);
8521             cv = GvCVu(gv);
8522             if (!cv) {
8523                 if (flags & RV2CVOPCV_MARK_EARLY)
8524                     rvop->op_private |= OPpEARLY_CV;
8525                 return NULL;
8526             }
8527         } break;
8528         case OP_CONST: {
8529             SV *rv = cSVOPx_sv(rvop);
8530             if (!SvROK(rv))
8531                 return NULL;
8532             cv = (CV*)SvRV(rv);
8533             gv = NULL;
8534         } break;
8535         default: {
8536             return NULL;
8537         } break;
8538     }
8539     if (SvTYPE((SV*)cv) != SVt_PVCV)
8540         return NULL;
8541     if (flags & RV2CVOPCV_RETURN_NAME_GV) {
8542         if (!CvANON(cv) || !gv)
8543             gv = CvGV(cv);
8544         return (CV*)gv;
8545     } else {
8546         return cv;
8547     }
8548 }
8549
8550 /*
8551 =for apidoc Am|OP *|ck_entersub_args_list|OP *entersubop
8552
8553 Performs the default fixup of the arguments part of an C<entersub>
8554 op tree.  This consists of applying list context to each of the
8555 argument ops.  This is the standard treatment used on a call marked
8556 with C<&>, or a method call, or a call through a subroutine reference,
8557 or any other call where the callee can't be identified at compile time,
8558 or a call where the callee has no prototype.
8559
8560 =cut
8561 */
8562
8563 OP *
8564 Perl_ck_entersub_args_list(pTHX_ OP *entersubop)
8565 {
8566     OP *aop;
8567     PERL_ARGS_ASSERT_CK_ENTERSUB_ARGS_LIST;
8568     aop = cUNOPx(entersubop)->op_first;
8569     if (!aop->op_sibling)
8570         aop = cUNOPx(aop)->op_first;
8571     for (aop = aop->op_sibling; aop->op_sibling; aop = aop->op_sibling) {
8572         if (!(PL_madskills && aop->op_type == OP_STUB)) {
8573             list(aop);
8574             op_lvalue(aop, OP_ENTERSUB);
8575         }
8576     }
8577     return entersubop;
8578 }
8579
8580 /*
8581 =for apidoc Am|OP *|ck_entersub_args_proto|OP *entersubop|GV *namegv|SV *protosv
8582
8583 Performs the fixup of the arguments part of an C<entersub> op tree
8584 based on a subroutine prototype.  This makes various modifications to
8585 the argument ops, from applying context up to inserting C<refgen> ops,
8586 and checking the number and syntactic types of arguments, as directed by
8587 the prototype.  This is the standard treatment used on a subroutine call,
8588 not marked with C<&>, where the callee can be identified at compile time
8589 and has a prototype.
8590
8591 I<protosv> supplies the subroutine prototype to be applied to the call.
8592 It may be a normal defined scalar, of which the string value will be used.
8593 Alternatively, for convenience, it may be a subroutine object (a C<CV*>
8594 that has been cast to C<SV*>) which has a prototype.  The prototype
8595 supplied, in whichever form, does not need to match the actual callee
8596 referenced by the op tree.
8597
8598 If the argument ops disagree with the prototype, for example by having
8599 an unacceptable number of arguments, a valid op tree is returned anyway.
8600 The error is reflected in the parser state, normally resulting in a single
8601 exception at the top level of parsing which covers all the compilation
8602 errors that occurred.  In the error message, the callee is referred to
8603 by the name defined by the I<namegv> parameter.
8604
8605 =cut
8606 */
8607
8608 OP *
8609 Perl_ck_entersub_args_proto(pTHX_ OP *entersubop, GV *namegv, SV *protosv)
8610 {
8611     STRLEN proto_len;
8612     const char *proto, *proto_end;
8613     OP *aop, *prev, *cvop;
8614     int optional = 0;
8615     I32 arg = 0;
8616     I32 contextclass = 0;
8617     const char *e = NULL;
8618     PERL_ARGS_ASSERT_CK_ENTERSUB_ARGS_PROTO;
8619     if (SvTYPE(protosv) == SVt_PVCV ? !SvPOK(protosv) : !SvOK(protosv))
8620         Perl_croak(aTHX_ "panic: ck_entersub_args_proto CV with no proto");
8621     proto = SvPV(protosv, proto_len);
8622     proto_end = proto + proto_len;
8623     aop = cUNOPx(entersubop)->op_first;
8624     if (!aop->op_sibling)
8625         aop = cUNOPx(aop)->op_first;
8626     prev = aop;
8627     aop = aop->op_sibling;
8628     for (cvop = aop; cvop->op_sibling; cvop = cvop->op_sibling) ;
8629     while (aop != cvop) {
8630         OP* o3;
8631         if (PL_madskills && aop->op_type == OP_STUB) {
8632             aop = aop->op_sibling;
8633             continue;
8634         }
8635         if (PL_madskills && aop->op_type == OP_NULL)
8636             o3 = ((UNOP*)aop)->op_first;
8637         else
8638             o3 = aop;
8639
8640         if (proto >= proto_end)
8641             return too_many_arguments(entersubop, gv_ename(namegv));
8642
8643         switch (*proto) {
8644             case ';':
8645                 optional = 1;
8646                 proto++;
8647                 continue;
8648             case '_':
8649                 /* _ must be at the end */
8650                 if (proto[1] && proto[1] != ';')
8651                     goto oops;
8652             case '$':
8653                 proto++;
8654                 arg++;
8655                 scalar(aop);
8656                 break;
8657             case '%':
8658             case '@':
8659                 list(aop);
8660                 arg++;
8661                 break;
8662             case '&':
8663                 proto++;
8664                 arg++;
8665                 if (o3->op_type != OP_REFGEN && o3->op_type != OP_UNDEF)
8666                     bad_type(arg,
8667                             arg == 1 ? "block or sub {}" : "sub {}",
8668                             gv_ename(namegv), o3);
8669                 break;
8670             case '*':
8671                 /* '*' allows any scalar type, including bareword */
8672                 proto++;
8673                 arg++;
8674                 if (o3->op_type == OP_RV2GV)
8675                     goto wrapref;       /* autoconvert GLOB -> GLOBref */
8676                 else if (o3->op_type == OP_CONST)
8677                     o3->op_private &= ~OPpCONST_STRICT;
8678                 else if (o3->op_type == OP_ENTERSUB) {
8679                     /* accidental subroutine, revert to bareword */
8680                     OP *gvop = ((UNOP*)o3)->op_first;
8681                     if (gvop && gvop->op_type == OP_NULL) {
8682                         gvop = ((UNOP*)gvop)->op_first;
8683                         if (gvop) {
8684                             for (; gvop->op_sibling; gvop = gvop->op_sibling)
8685                                 ;
8686                             if (gvop &&
8687                                     (gvop->op_private & OPpENTERSUB_NOPAREN) &&
8688                                     (gvop = ((UNOP*)gvop)->op_first) &&
8689                                     gvop->op_type == OP_GV)
8690                             {
8691                                 GV * const gv = cGVOPx_gv(gvop);
8692                                 OP * const sibling = aop->op_sibling;
8693                                 SV * const n = newSVpvs("");
8694 #ifdef PERL_MAD
8695                                 OP * const oldaop = aop;
8696 #else
8697                                 op_free(aop);
8698 #endif
8699                                 gv_fullname4(n, gv, "", FALSE);
8700                                 aop = newSVOP(OP_CONST, 0, n);
8701                                 op_getmad(oldaop,aop,'O');
8702                                 prev->op_sibling = aop;
8703                                 aop->op_sibling = sibling;
8704                             }
8705                         }
8706                     }
8707                 }
8708                 scalar(aop);
8709                 break;
8710             case '+':
8711                 proto++;
8712                 arg++;
8713                 if (o3->op_type == OP_RV2AV ||
8714                     o3->op_type == OP_PADAV ||
8715                     o3->op_type == OP_RV2HV ||
8716                     o3->op_type == OP_PADHV
8717                 ) {
8718                     goto wrapref;
8719                 }
8720                 scalar(aop);
8721                 break;
8722             case '[': case ']':
8723                 goto oops;
8724                 break;
8725             case '\\':
8726                 proto++;
8727                 arg++;
8728             again:
8729                 switch (*proto++) {
8730                     case '[':
8731                         if (contextclass++ == 0) {
8732                             e = strchr(proto, ']');
8733                             if (!e || e == proto)
8734                                 goto oops;
8735                         }
8736                         else
8737                             goto oops;
8738                         goto again;
8739                         break;
8740                     case ']':
8741                         if (contextclass) {
8742                             const char *p = proto;
8743                             const char *const end = proto;
8744                             contextclass = 0;
8745                             while (*--p != '[') {}
8746                             bad_type(arg, Perl_form(aTHX_ "one of %.*s",
8747                                         (int)(end - p), p),
8748                                     gv_ename(namegv), o3);
8749                         } else
8750                             goto oops;
8751                         break;
8752                     case '*':
8753                         if (o3->op_type == OP_RV2GV)
8754                             goto wrapref;
8755                         if (!contextclass)
8756                             bad_type(arg, "symbol", gv_ename(namegv), o3);
8757                         break;
8758                     case '&':
8759                         if (o3->op_type == OP_ENTERSUB)
8760                             goto wrapref;
8761                         if (!contextclass)
8762                             bad_type(arg, "subroutine entry", gv_ename(namegv),
8763                                     o3);
8764                         break;
8765                     case '$':
8766                         if (o3->op_type == OP_RV2SV ||
8767                                 o3->op_type == OP_PADSV ||
8768                                 o3->op_type == OP_HELEM ||
8769                                 o3->op_type == OP_AELEM)
8770                             goto wrapref;
8771                         if (!contextclass)
8772                             bad_type(arg, "scalar", gv_ename(namegv), o3);
8773                         break;
8774                     case '@':
8775                         if (o3->op_type == OP_RV2AV ||
8776                                 o3->op_type == OP_PADAV)
8777                             goto wrapref;
8778                         if (!contextclass)
8779                             bad_type(arg, "array", gv_ename(namegv), o3);
8780                         break;
8781                     case '%':
8782                         if (o3->op_type == OP_RV2HV ||
8783                                 o3->op_type == OP_PADHV)
8784                             goto wrapref;
8785                         if (!contextclass)
8786                             bad_type(arg, "hash", gv_ename(namegv), o3);
8787                         break;
8788                     wrapref:
8789                         {
8790                             OP* const kid = aop;
8791                             OP* const sib = kid->op_sibling;
8792                             kid->op_sibling = 0;
8793                             aop = newUNOP(OP_REFGEN, 0, kid);
8794                             aop->op_sibling = sib;
8795                             prev->op_sibling = aop;
8796                         }
8797                         if (contextclass && e) {
8798                             proto = e + 1;
8799                             contextclass = 0;
8800                         }
8801                         break;
8802                     default: goto oops;
8803                 }
8804                 if (contextclass)
8805                     goto again;
8806                 break;
8807             case ' ':
8808                 proto++;
8809                 continue;
8810             default:
8811             oops:
8812                 Perl_croak(aTHX_ "Malformed prototype for %s: %"SVf,
8813                         gv_ename(namegv), SVfARG(protosv));
8814         }
8815
8816         op_lvalue(aop, OP_ENTERSUB);
8817         prev = aop;
8818         aop = aop->op_sibling;
8819     }
8820     if (aop == cvop && *proto == '_') {
8821         /* generate an access to $_ */
8822         aop = newDEFSVOP();
8823         aop->op_sibling = prev->op_sibling;
8824         prev->op_sibling = aop; /* instead of cvop */
8825     }
8826     if (!optional && proto_end > proto &&
8827         (*proto != '@' && *proto != '%' && *proto != ';' && *proto != '_'))
8828         return too_few_arguments(entersubop, gv_ename(namegv));
8829     return entersubop;
8830 }
8831
8832 /*
8833 =for apidoc Am|OP *|ck_entersub_args_proto_or_list|OP *entersubop|GV *namegv|SV *protosv
8834
8835 Performs the fixup of the arguments part of an C<entersub> op tree either
8836 based on a subroutine prototype or using default list-context processing.
8837 This is the standard treatment used on a subroutine call, not marked
8838 with C<&>, where the callee can be identified at compile time.
8839
8840 I<protosv> supplies the subroutine prototype to be applied to the call,
8841 or indicates that there is no prototype.  It may be a normal scalar,
8842 in which case if it is defined then the string value will be used
8843 as a prototype, and if it is undefined then there is no prototype.
8844 Alternatively, for convenience, it may be a subroutine object (a C<CV*>
8845 that has been cast to C<SV*>), of which the prototype will be used if it
8846 has one.  The prototype (or lack thereof) supplied, in whichever form,
8847 does not need to match the actual callee referenced by the op tree.
8848
8849 If the argument ops disagree with the prototype, for example by having
8850 an unacceptable number of arguments, a valid op tree is returned anyway.
8851 The error is reflected in the parser state, normally resulting in a single
8852 exception at the top level of parsing which covers all the compilation
8853 errors that occurred.  In the error message, the callee is referred to
8854 by the name defined by the I<namegv> parameter.
8855
8856 =cut
8857 */
8858
8859 OP *
8860 Perl_ck_entersub_args_proto_or_list(pTHX_ OP *entersubop,
8861         GV *namegv, SV *protosv)
8862 {
8863     PERL_ARGS_ASSERT_CK_ENTERSUB_ARGS_PROTO_OR_LIST;
8864     if (SvTYPE(protosv) == SVt_PVCV ? SvPOK(protosv) : SvOK(protosv))
8865         return ck_entersub_args_proto(entersubop, namegv, protosv);
8866     else
8867         return ck_entersub_args_list(entersubop);
8868 }
8869
8870 /*
8871 =for apidoc Am|void|cv_get_call_checker|CV *cv|Perl_call_checker *ckfun_p|SV **ckobj_p
8872
8873 Retrieves the function that will be used to fix up a call to I<cv>.
8874 Specifically, the function is applied to an C<entersub> op tree for a
8875 subroutine call, not marked with C<&>, where the callee can be identified
8876 at compile time as I<cv>.
8877
8878 The C-level function pointer is returned in I<*ckfun_p>, and an SV
8879 argument for it is returned in I<*ckobj_p>.  The function is intended
8880 to be called in this manner:
8881
8882     entersubop = (*ckfun_p)(aTHX_ entersubop, namegv, (*ckobj_p));
8883
8884 In this call, I<entersubop> is a pointer to the C<entersub> op,
8885 which may be replaced by the check function, and I<namegv> is a GV
8886 supplying the name that should be used by the check function to refer
8887 to the callee of the C<entersub> op if it needs to emit any diagnostics.
8888 It is permitted to apply the check function in non-standard situations,
8889 such as to a call to a different subroutine or to a method call.
8890
8891 By default, the function is
8892 L<Perl_ck_entersub_args_proto_or_list|/ck_entersub_args_proto_or_list>,
8893 and the SV parameter is I<cv> itself.  This implements standard
8894 prototype processing.  It can be changed, for a particular subroutine,
8895 by L</cv_set_call_checker>.
8896
8897 =cut
8898 */
8899
8900 void
8901 Perl_cv_get_call_checker(pTHX_ CV *cv, Perl_call_checker *ckfun_p, SV **ckobj_p)
8902 {
8903     MAGIC *callmg;
8904     PERL_ARGS_ASSERT_CV_GET_CALL_CHECKER;
8905     callmg = SvMAGICAL((SV*)cv) ? mg_find((SV*)cv, PERL_MAGIC_checkcall) : NULL;
8906     if (callmg) {
8907         *ckfun_p = DPTR2FPTR(Perl_call_checker, callmg->mg_ptr);
8908         *ckobj_p = callmg->mg_obj;
8909     } else {
8910         *ckfun_p = Perl_ck_entersub_args_proto_or_list;
8911         *ckobj_p = (SV*)cv;
8912     }
8913 }
8914
8915 /*
8916 =for apidoc Am|void|cv_set_call_checker|CV *cv|Perl_call_checker ckfun|SV *ckobj
8917
8918 Sets the function that will be used to fix up a call to I<cv>.
8919 Specifically, the function is applied to an C<entersub> op tree for a
8920 subroutine call, not marked with C<&>, where the callee can be identified
8921 at compile time as I<cv>.
8922
8923 The C-level function pointer is supplied in I<ckfun>, and an SV argument
8924 for it is supplied in I<ckobj>.  The function is intended to be called
8925 in this manner:
8926
8927     entersubop = ckfun(aTHX_ entersubop, namegv, ckobj);
8928
8929 In this call, I<entersubop> is a pointer to the C<entersub> op,
8930 which may be replaced by the check function, and I<namegv> is a GV
8931 supplying the name that should be used by the check function to refer
8932 to the callee of the C<entersub> op if it needs to emit any diagnostics.
8933 It is permitted to apply the check function in non-standard situations,
8934 such as to a call to a different subroutine or to a method call.
8935
8936 The current setting for a particular CV can be retrieved by
8937 L</cv_get_call_checker>.
8938
8939 =cut
8940 */
8941
8942 void
8943 Perl_cv_set_call_checker(pTHX_ CV *cv, Perl_call_checker ckfun, SV *ckobj)
8944 {
8945     PERL_ARGS_ASSERT_CV_SET_CALL_CHECKER;
8946     if (ckfun == Perl_ck_entersub_args_proto_or_list && ckobj == (SV*)cv) {
8947         if (SvMAGICAL((SV*)cv))
8948             mg_free_type((SV*)cv, PERL_MAGIC_checkcall);
8949     } else {
8950         MAGIC *callmg;
8951         sv_magic((SV*)cv, &PL_sv_undef, PERL_MAGIC_checkcall, NULL, 0);
8952         callmg = mg_find((SV*)cv, PERL_MAGIC_checkcall);
8953         if (callmg->mg_flags & MGf_REFCOUNTED) {
8954             SvREFCNT_dec(callmg->mg_obj);
8955             callmg->mg_flags &= ~MGf_REFCOUNTED;
8956         }
8957         callmg->mg_ptr = FPTR2DPTR(char *, ckfun);
8958         callmg->mg_obj = ckobj;
8959         if (ckobj != (SV*)cv) {
8960             SvREFCNT_inc_simple_void_NN(ckobj);
8961             callmg->mg_flags |= MGf_REFCOUNTED;
8962         }
8963     }
8964 }
8965
8966 OP *
8967 Perl_ck_subr(pTHX_ OP *o)
8968 {
8969     OP *aop, *cvop;
8970     CV *cv;
8971     GV *namegv;
8972
8973     PERL_ARGS_ASSERT_CK_SUBR;
8974
8975     aop = cUNOPx(o)->op_first;
8976     if (!aop->op_sibling)
8977         aop = cUNOPx(aop)->op_first;
8978     aop = aop->op_sibling;
8979     for (cvop = aop; cvop->op_sibling; cvop = cvop->op_sibling) ;
8980     cv = rv2cv_op_cv(cvop, RV2CVOPCV_MARK_EARLY);
8981     namegv = cv ? (GV*)rv2cv_op_cv(cvop, RV2CVOPCV_RETURN_NAME_GV) : NULL;
8982
8983     o->op_private |= OPpENTERSUB_HASTARG;
8984     o->op_private |= (PL_hints & HINT_STRICT_REFS);
8985     if (PERLDB_SUB && PL_curstash != PL_debstash)
8986         o->op_private |= OPpENTERSUB_DB;
8987     if (cvop->op_type == OP_RV2CV) {
8988         o->op_private |= (cvop->op_private & OPpENTERSUB_AMPER);
8989         op_null(cvop);
8990     } else if (cvop->op_type == OP_METHOD || cvop->op_type == OP_METHOD_NAMED) {
8991         if (aop->op_type == OP_CONST)
8992             aop->op_private &= ~OPpCONST_STRICT;
8993         else if (aop->op_type == OP_LIST) {
8994             OP * const sib = ((UNOP*)aop)->op_first->op_sibling;
8995             if (sib && sib->op_type == OP_CONST)
8996                 sib->op_private &= ~OPpCONST_STRICT;
8997         }
8998     }
8999
9000     if (!cv) {
9001         return ck_entersub_args_list(o);
9002     } else {
9003         Perl_call_checker ckfun;
9004         SV *ckobj;
9005         cv_get_call_checker(cv, &ckfun, &ckobj);
9006         return ckfun(aTHX_ o, namegv, ckobj);
9007     }
9008 }
9009
9010 OP *
9011 Perl_ck_svconst(pTHX_ OP *o)
9012 {
9013     PERL_ARGS_ASSERT_CK_SVCONST;
9014     PERL_UNUSED_CONTEXT;
9015     SvREADONLY_on(cSVOPo->op_sv);
9016     return o;
9017 }
9018
9019 OP *
9020 Perl_ck_chdir(pTHX_ OP *o)
9021 {
9022     PERL_ARGS_ASSERT_CK_CHDIR;
9023     if (o->op_flags & OPf_KIDS) {
9024         SVOP * const kid = (SVOP*)cUNOPo->op_first;
9025
9026         if (kid && kid->op_type == OP_CONST &&
9027             (kid->op_private & OPpCONST_BARE))
9028         {
9029             o->op_flags |= OPf_SPECIAL;
9030             kid->op_private &= ~OPpCONST_STRICT;
9031         }
9032     }
9033     return ck_fun(o);
9034 }
9035
9036 OP *
9037 Perl_ck_trunc(pTHX_ OP *o)
9038 {
9039     PERL_ARGS_ASSERT_CK_TRUNC;
9040
9041     if (o->op_flags & OPf_KIDS) {
9042         SVOP *kid = (SVOP*)cUNOPo->op_first;
9043
9044         if (kid->op_type == OP_NULL)
9045             kid = (SVOP*)kid->op_sibling;
9046         if (kid && kid->op_type == OP_CONST &&
9047             (kid->op_private & OPpCONST_BARE))
9048         {
9049             o->op_flags |= OPf_SPECIAL;
9050             kid->op_private &= ~OPpCONST_STRICT;
9051         }
9052     }
9053     return ck_fun(o);
9054 }
9055
9056 OP *
9057 Perl_ck_unpack(pTHX_ OP *o)
9058 {
9059     OP *kid = cLISTOPo->op_first;
9060
9061     PERL_ARGS_ASSERT_CK_UNPACK;
9062
9063     if (kid->op_sibling) {
9064         kid = kid->op_sibling;
9065         if (!kid->op_sibling)
9066             kid->op_sibling = newDEFSVOP();
9067     }
9068     return ck_fun(o);
9069 }
9070
9071 OP *
9072 Perl_ck_substr(pTHX_ OP *o)
9073 {
9074     PERL_ARGS_ASSERT_CK_SUBSTR;
9075
9076     o = ck_fun(o);
9077     if ((o->op_flags & OPf_KIDS) && (o->op_private == 4)) {
9078         OP *kid = cLISTOPo->op_first;
9079
9080         if (kid->op_type == OP_NULL)
9081             kid = kid->op_sibling;
9082         if (kid)
9083             kid->op_flags |= OPf_MOD;
9084
9085     }
9086     return o;
9087 }
9088
9089 OP *
9090 Perl_ck_push(pTHX_ OP *o)
9091 {
9092     dVAR;
9093     OP *kid = o->op_flags & OPf_KIDS ? cLISTOPo->op_first : NULL;
9094     OP *cursor = NULL;
9095     OP *proxy = NULL;
9096
9097     PERL_ARGS_ASSERT_CK_PUSH;
9098
9099     /* If 1st kid is pushmark (e.g. push, unshift, splice), we need 2nd kid */
9100     if (kid) {
9101         cursor = kid->op_type == OP_PUSHMARK ? kid->op_sibling : kid;
9102     }
9103
9104     /* If not array or array deref, wrap it with an array deref.
9105      * For OP_CONST, we only wrap arrayrefs */
9106     if (cursor) {
9107         if ( (    cursor->op_type != OP_PADAV
9108                && cursor->op_type != OP_RV2AV
9109                && cursor->op_type != OP_CONST
9110              )
9111              ||
9112              (    cursor->op_type == OP_CONST
9113                && SvROK(cSVOPx_sv(cursor))
9114                && SvTYPE(SvRV(cSVOPx_sv(cursor))) == SVt_PVAV
9115              )
9116         ) {
9117             proxy = newAVREF(cursor);
9118             if ( cursor == kid ) {
9119                 cLISTOPx(o)->op_first = proxy;
9120             }
9121             else {
9122                 cLISTOPx(kid)->op_sibling = proxy;
9123             }
9124             cLISTOPx(proxy)->op_sibling = cLISTOPx(cursor)->op_sibling;
9125             cLISTOPx(cursor)->op_sibling = NULL;
9126         }
9127     }
9128     return ck_fun(o);
9129 }
9130
9131 OP *
9132 Perl_ck_each(pTHX_ OP *o)
9133 {
9134     dVAR;
9135     OP *kid = o->op_flags & OPf_KIDS ? cUNOPo->op_first : NULL;
9136     const unsigned orig_type  = o->op_type;
9137     const unsigned array_type = orig_type == OP_EACH ? OP_AEACH
9138                               : orig_type == OP_KEYS ? OP_AKEYS : OP_AVALUES;
9139     const unsigned ref_type   = orig_type == OP_EACH ? OP_REACH
9140                               : orig_type == OP_KEYS ? OP_RKEYS : OP_RVALUES;
9141
9142     PERL_ARGS_ASSERT_CK_EACH;
9143
9144     if (kid) {
9145         switch (kid->op_type) {
9146             case OP_PADHV:
9147             case OP_RV2HV:
9148                 break;
9149             case OP_PADAV:
9150             case OP_RV2AV:
9151                 CHANGE_TYPE(o, array_type);
9152                 break;
9153             case OP_CONST:
9154                 if (kid->op_private == OPpCONST_BARE)
9155                     /* we let ck_fun treat as hash */
9156                     break;
9157             default:
9158                 CHANGE_TYPE(o, ref_type);
9159         }
9160     }
9161     /* if treating as a reference, defer additional checks to runtime */
9162     return o->op_type == ref_type ? o : ck_fun(o);
9163 }
9164
9165 /* caller is supposed to assign the return to the 
9166    container of the rep_op var */
9167 STATIC OP *
9168 S_opt_scalarhv(pTHX_ OP *rep_op) {
9169     dVAR;
9170     UNOP *unop;
9171
9172     PERL_ARGS_ASSERT_OPT_SCALARHV;
9173
9174     NewOp(1101, unop, 1, UNOP);
9175     unop->op_type = (OPCODE)OP_BOOLKEYS;
9176     unop->op_ppaddr = PL_ppaddr[OP_BOOLKEYS];
9177     unop->op_flags = (U8)(OPf_WANT_SCALAR | OPf_KIDS );
9178     unop->op_private = (U8)(1 | ((OPf_WANT_SCALAR | OPf_KIDS) >> 8));
9179     unop->op_first = rep_op;
9180     unop->op_next = rep_op->op_next;
9181     rep_op->op_next = (OP*)unop;
9182     rep_op->op_flags|=(OPf_REF | OPf_MOD);
9183     unop->op_sibling = rep_op->op_sibling;
9184     rep_op->op_sibling = NULL;
9185     /* unop->op_targ = pad_alloc(OP_BOOLKEYS, SVs_PADTMP); */
9186     if (rep_op->op_type == OP_PADHV) { 
9187         rep_op->op_flags &= ~OPf_WANT_SCALAR;
9188         rep_op->op_flags |= OPf_WANT_LIST;
9189     }
9190     return (OP*)unop;
9191 }                        
9192
9193 /* Checks if o acts as an in-place operator on an array. oright points to the
9194  * beginning of the right-hand side. Returns the left-hand side of the
9195  * assignment if o acts in-place, or NULL otherwise. */
9196
9197 STATIC OP *
9198 S_is_inplace_av(pTHX_ OP *o, OP *oright) {
9199     OP *o2;
9200     OP *oleft = NULL;
9201
9202     PERL_ARGS_ASSERT_IS_INPLACE_AV;
9203
9204     if (!oright ||
9205         (oright->op_type != OP_RV2AV && oright->op_type != OP_PADAV)
9206         || oright->op_next != o
9207         || (oright->op_private & OPpLVAL_INTRO)
9208     )
9209         return NULL;
9210
9211     /* o2 follows the chain of op_nexts through the LHS of the
9212      * assign (if any) to the aassign op itself */
9213     o2 = o->op_next;
9214     if (!o2 || o2->op_type != OP_NULL)
9215         return NULL;
9216     o2 = o2->op_next;
9217     if (!o2 || o2->op_type != OP_PUSHMARK)
9218         return NULL;
9219     o2 = o2->op_next;
9220     if (o2 && o2->op_type == OP_GV)
9221         o2 = o2->op_next;
9222     if (!o2
9223         || (o2->op_type != OP_PADAV && o2->op_type != OP_RV2AV)
9224         || (o2->op_private & OPpLVAL_INTRO)
9225     )
9226         return NULL;
9227     oleft = o2;
9228     o2 = o2->op_next;
9229     if (!o2 || o2->op_type != OP_NULL)
9230         return NULL;
9231     o2 = o2->op_next;
9232     if (!o2 || o2->op_type != OP_AASSIGN
9233             || (o2->op_flags & OPf_WANT) != OPf_WANT_VOID)
9234         return NULL;
9235
9236     /* check that the sort is the first arg on RHS of assign */
9237
9238     o2 = cUNOPx(o2)->op_first;
9239     if (!o2 || o2->op_type != OP_NULL)
9240         return NULL;
9241     o2 = cUNOPx(o2)->op_first;
9242     if (!o2 || o2->op_type != OP_PUSHMARK)
9243         return NULL;
9244     if (o2->op_sibling != o)
9245         return NULL;
9246
9247     /* check the array is the same on both sides */
9248     if (oleft->op_type == OP_RV2AV) {
9249         if (oright->op_type != OP_RV2AV
9250             || !cUNOPx(oright)->op_first
9251             || cUNOPx(oright)->op_first->op_type != OP_GV
9252             || cGVOPx_gv(cUNOPx(oleft)->op_first) !=
9253                cGVOPx_gv(cUNOPx(oright)->op_first)
9254         )
9255             return NULL;
9256     }
9257     else if (oright->op_type != OP_PADAV
9258         || oright->op_targ != oleft->op_targ
9259     )
9260         return NULL;
9261
9262     return oleft;
9263 }
9264
9265 /* A peephole optimizer.  We visit the ops in the order they're to execute.
9266  * See the comments at the top of this file for more details about when
9267  * peep() is called */
9268
9269 void
9270 Perl_rpeep(pTHX_ register OP *o)
9271 {
9272     dVAR;
9273     register OP* oldop = NULL;
9274
9275     if (!o || o->op_opt)
9276         return;
9277     ENTER;
9278     SAVEOP();
9279     SAVEVPTR(PL_curcop);
9280     for (; o; o = o->op_next) {
9281         if (o->op_opt)
9282             break;
9283         /* By default, this op has now been optimised. A couple of cases below
9284            clear this again.  */
9285         o->op_opt = 1;
9286         PL_op = o;
9287         switch (o->op_type) {
9288         case OP_DBSTATE:
9289             PL_curcop = ((COP*)o);              /* for warnings */
9290             break;
9291         case OP_NEXTSTATE:
9292             PL_curcop = ((COP*)o);              /* for warnings */
9293
9294             /* Two NEXTSTATEs in a row serve no purpose. Except if they happen
9295                to carry two labels. For now, take the easier option, and skip
9296                this optimisation if the first NEXTSTATE has a label.  */
9297             if (!CopLABEL((COP*)o)) {
9298                 OP *nextop = o->op_next;
9299                 while (nextop && nextop->op_type == OP_NULL)
9300                     nextop = nextop->op_next;
9301
9302                 if (nextop && (nextop->op_type == OP_NEXTSTATE)) {
9303                     COP *firstcop = (COP *)o;
9304                     COP *secondcop = (COP *)nextop;
9305                     /* We want the COP pointed to by o (and anything else) to
9306                        become the next COP down the line.  */
9307                     cop_free(firstcop);
9308
9309                     firstcop->op_next = secondcop->op_next;
9310
9311                     /* Now steal all its pointers, and duplicate the other
9312                        data.  */
9313                     firstcop->cop_line = secondcop->cop_line;
9314 #ifdef USE_ITHREADS
9315                     firstcop->cop_stashpv = secondcop->cop_stashpv;
9316                     firstcop->cop_file = secondcop->cop_file;
9317 #else
9318                     firstcop->cop_stash = secondcop->cop_stash;
9319                     firstcop->cop_filegv = secondcop->cop_filegv;
9320 #endif
9321                     firstcop->cop_hints = secondcop->cop_hints;
9322                     firstcop->cop_seq = secondcop->cop_seq;
9323                     firstcop->cop_warnings = secondcop->cop_warnings;
9324                     firstcop->cop_hints_hash = secondcop->cop_hints_hash;
9325
9326 #ifdef USE_ITHREADS
9327                     secondcop->cop_stashpv = NULL;
9328                     secondcop->cop_file = NULL;
9329 #else
9330                     secondcop->cop_stash = NULL;
9331                     secondcop->cop_filegv = NULL;
9332 #endif
9333                     secondcop->cop_warnings = NULL;
9334                     secondcop->cop_hints_hash = NULL;
9335
9336                     /* If we use op_null(), and hence leave an ex-COP, some
9337                        warnings are misreported. For example, the compile-time
9338                        error in 'use strict; no strict refs;'  */
9339                     secondcop->op_type = OP_NULL;
9340                     secondcop->op_ppaddr = PL_ppaddr[OP_NULL];
9341                 }
9342             }
9343             break;
9344
9345         case OP_CONST:
9346             if (cSVOPo->op_private & OPpCONST_STRICT)
9347                 no_bareword_allowed(o);
9348 #ifdef USE_ITHREADS
9349         case OP_HINTSEVAL:
9350         case OP_METHOD_NAMED:
9351             /* Relocate sv to the pad for thread safety.
9352              * Despite being a "constant", the SV is written to,
9353              * for reference counts, sv_upgrade() etc. */
9354             if (cSVOP->op_sv) {
9355                 const PADOFFSET ix = pad_alloc(OP_CONST, SVs_PADTMP);
9356                 if (o->op_type != OP_METHOD_NAMED && SvPADTMP(cSVOPo->op_sv)) {
9357                     /* If op_sv is already a PADTMP then it is being used by
9358                      * some pad, so make a copy. */
9359                     sv_setsv(PAD_SVl(ix),cSVOPo->op_sv);
9360                     SvREADONLY_on(PAD_SVl(ix));
9361                     SvREFCNT_dec(cSVOPo->op_sv);
9362                 }
9363                 else if (o->op_type != OP_METHOD_NAMED
9364                          && cSVOPo->op_sv == &PL_sv_undef) {
9365                     /* PL_sv_undef is hack - it's unsafe to store it in the
9366                        AV that is the pad, because av_fetch treats values of
9367                        PL_sv_undef as a "free" AV entry and will merrily
9368                        replace them with a new SV, causing pad_alloc to think
9369                        that this pad slot is free. (When, clearly, it is not)
9370                     */
9371                     SvOK_off(PAD_SVl(ix));
9372                     SvPADTMP_on(PAD_SVl(ix));
9373                     SvREADONLY_on(PAD_SVl(ix));
9374                 }
9375                 else {
9376                     SvREFCNT_dec(PAD_SVl(ix));
9377                     SvPADTMP_on(cSVOPo->op_sv);
9378                     PAD_SETSV(ix, cSVOPo->op_sv);
9379                     /* XXX I don't know how this isn't readonly already. */
9380                     SvREADONLY_on(PAD_SVl(ix));
9381                 }
9382                 cSVOPo->op_sv = NULL;
9383                 o->op_targ = ix;
9384             }
9385 #endif
9386             break;
9387
9388         case OP_CONCAT:
9389             if (o->op_next && o->op_next->op_type == OP_STRINGIFY) {
9390                 if (o->op_next->op_private & OPpTARGET_MY) {
9391                     if (o->op_flags & OPf_STACKED) /* chained concats */
9392                         break; /* ignore_optimization */
9393                     else {
9394                         /* assert(PL_opargs[o->op_type] & OA_TARGLEX); */
9395                         o->op_targ = o->op_next->op_targ;
9396                         o->op_next->op_targ = 0;
9397                         o->op_private |= OPpTARGET_MY;
9398                     }
9399                 }
9400                 op_null(o->op_next);
9401             }
9402             break;
9403         case OP_STUB:
9404             if ((o->op_flags & OPf_WANT) != OPf_WANT_LIST) {
9405                 break; /* Scalar stub must produce undef.  List stub is noop */
9406             }
9407             goto nothin;
9408         case OP_NULL:
9409             if (o->op_targ == OP_NEXTSTATE
9410                 || o->op_targ == OP_DBSTATE)
9411             {
9412                 PL_curcop = ((COP*)o);
9413             }
9414             /* XXX: We avoid setting op_seq here to prevent later calls
9415                to rpeep() from mistakenly concluding that optimisation
9416                has already occurred. This doesn't fix the real problem,
9417                though (See 20010220.007). AMS 20010719 */
9418             /* op_seq functionality is now replaced by op_opt */
9419             o->op_opt = 0;
9420             /* FALL THROUGH */
9421         case OP_SCALAR:
9422         case OP_LINESEQ:
9423         case OP_SCOPE:
9424         nothin:
9425             if (oldop && o->op_next) {
9426                 oldop->op_next = o->op_next;
9427                 o->op_opt = 0;
9428                 continue;
9429             }
9430             break;
9431
9432         case OP_PADAV:
9433         case OP_GV:
9434             if (o->op_type == OP_PADAV || o->op_next->op_type == OP_RV2AV) {
9435                 OP* const pop = (o->op_type == OP_PADAV) ?
9436                             o->op_next : o->op_next->op_next;
9437                 IV i;
9438                 if (pop && pop->op_type == OP_CONST &&
9439                     ((PL_op = pop->op_next)) &&
9440                     pop->op_next->op_type == OP_AELEM &&
9441                     !(pop->op_next->op_private &
9442                       (OPpLVAL_INTRO|OPpLVAL_DEFER|OPpDEREF|OPpMAYBE_LVSUB)) &&
9443                     (i = SvIV(((SVOP*)pop)->op_sv) - CopARYBASE_get(PL_curcop))
9444                                 <= 255 &&
9445                     i >= 0)
9446                 {
9447                     GV *gv;
9448                     if (cSVOPx(pop)->op_private & OPpCONST_STRICT)
9449                         no_bareword_allowed(pop);
9450                     if (o->op_type == OP_GV)
9451                         op_null(o->op_next);
9452                     op_null(pop->op_next);
9453                     op_null(pop);
9454                     o->op_flags |= pop->op_next->op_flags & OPf_MOD;
9455                     o->op_next = pop->op_next->op_next;
9456                     o->op_ppaddr = PL_ppaddr[OP_AELEMFAST];
9457                     o->op_private = (U8)i;
9458                     if (o->op_type == OP_GV) {
9459                         gv = cGVOPo_gv;
9460                         GvAVn(gv);
9461                     }
9462                     else
9463                         o->op_flags |= OPf_SPECIAL;
9464                     o->op_type = OP_AELEMFAST;
9465                 }
9466                 break;
9467             }
9468
9469             if (o->op_next->op_type == OP_RV2SV) {
9470                 if (!(o->op_next->op_private & OPpDEREF)) {
9471                     op_null(o->op_next);
9472                     o->op_private |= o->op_next->op_private & (OPpLVAL_INTRO
9473                                                                | OPpOUR_INTRO);
9474                     o->op_next = o->op_next->op_next;
9475                     o->op_type = OP_GVSV;
9476                     o->op_ppaddr = PL_ppaddr[OP_GVSV];
9477                 }
9478             }
9479             else if ((o->op_private & OPpEARLY_CV) && ckWARN(WARN_PROTOTYPE)) {
9480                 GV * const gv = cGVOPo_gv;
9481                 if (SvTYPE(gv) == SVt_PVGV && GvCV(gv) && SvPVX_const(GvCV(gv))) {
9482                     /* XXX could check prototype here instead of just carping */
9483                     SV * const sv = sv_newmortal();
9484                     gv_efullname3(sv, gv, NULL);
9485                     Perl_warner(aTHX_ packWARN(WARN_PROTOTYPE),
9486                                 "%"SVf"() called too early to check prototype",
9487                                 SVfARG(sv));
9488                 }
9489             }
9490             else if (o->op_next->op_type == OP_READLINE
9491                     && o->op_next->op_next->op_type == OP_CONCAT
9492                     && (o->op_next->op_next->op_flags & OPf_STACKED))
9493             {
9494                 /* Turn "$a .= <FH>" into an OP_RCATLINE. AMS 20010917 */
9495                 o->op_type   = OP_RCATLINE;
9496                 o->op_flags |= OPf_STACKED;
9497                 o->op_ppaddr = PL_ppaddr[OP_RCATLINE];
9498                 op_null(o->op_next->op_next);
9499                 op_null(o->op_next);
9500             }
9501
9502             break;
9503         
9504         {
9505             OP *fop;
9506             OP *sop;
9507             
9508         case OP_NOT:
9509             fop = cUNOP->op_first;
9510             sop = NULL;
9511             goto stitch_keys;
9512             break;
9513
9514         case OP_AND:
9515         case OP_OR:
9516         case OP_DOR:
9517             fop = cLOGOP->op_first;
9518             sop = fop->op_sibling;
9519             while (cLOGOP->op_other->op_type == OP_NULL)
9520                 cLOGOP->op_other = cLOGOP->op_other->op_next;
9521             CALL_RPEEP(cLOGOP->op_other);
9522           
9523           stitch_keys:      
9524             o->op_opt = 1;
9525             if ((fop->op_type == OP_PADHV || fop->op_type == OP_RV2HV)
9526                 || ( sop && 
9527                      (sop->op_type == OP_PADHV || sop->op_type == OP_RV2HV)
9528                     )
9529             ){  
9530                 OP * nop = o;
9531                 OP * lop = o;
9532                 if (!((nop->op_flags & OPf_WANT) == OPf_WANT_VOID)) {
9533                     while (nop && nop->op_next) {
9534                         switch (nop->op_next->op_type) {
9535                             case OP_NOT:
9536                             case OP_AND:
9537                             case OP_OR:
9538                             case OP_DOR:
9539                                 lop = nop = nop->op_next;
9540                                 break;
9541                             case OP_NULL:
9542                                 nop = nop->op_next;
9543                                 break;
9544                             default:
9545                                 nop = NULL;
9546                                 break;
9547                         }
9548                     }            
9549                 }
9550                 if ((lop->op_flags & OPf_WANT) == OPf_WANT_VOID) {
9551                     if (fop->op_type == OP_PADHV || fop->op_type == OP_RV2HV) 
9552                         cLOGOP->op_first = opt_scalarhv(fop);
9553                     if (sop && (sop->op_type == OP_PADHV || sop->op_type == OP_RV2HV)) 
9554                         cLOGOP->op_first->op_sibling = opt_scalarhv(sop);
9555                 }                                        
9556             }                  
9557             
9558             
9559             break;
9560         }    
9561         
9562         case OP_MAPWHILE:
9563         case OP_GREPWHILE:
9564         case OP_ANDASSIGN:
9565         case OP_ORASSIGN:
9566         case OP_DORASSIGN:
9567         case OP_COND_EXPR:
9568         case OP_RANGE:
9569         case OP_ONCE:
9570             while (cLOGOP->op_other->op_type == OP_NULL)
9571                 cLOGOP->op_other = cLOGOP->op_other->op_next;
9572             CALL_RPEEP(cLOGOP->op_other);
9573             break;
9574
9575         case OP_ENTERLOOP:
9576         case OP_ENTERITER:
9577             while (cLOOP->op_redoop->op_type == OP_NULL)
9578                 cLOOP->op_redoop = cLOOP->op_redoop->op_next;
9579             CALL_RPEEP(cLOOP->op_redoop);
9580             while (cLOOP->op_nextop->op_type == OP_NULL)
9581                 cLOOP->op_nextop = cLOOP->op_nextop->op_next;
9582             CALL_RPEEP(cLOOP->op_nextop);
9583             while (cLOOP->op_lastop->op_type == OP_NULL)
9584                 cLOOP->op_lastop = cLOOP->op_lastop->op_next;
9585             CALL_RPEEP(cLOOP->op_lastop);
9586             break;
9587
9588         case OP_SUBST:
9589             assert(!(cPMOP->op_pmflags & PMf_ONCE));
9590             while (cPMOP->op_pmstashstartu.op_pmreplstart &&
9591                    cPMOP->op_pmstashstartu.op_pmreplstart->op_type == OP_NULL)
9592                 cPMOP->op_pmstashstartu.op_pmreplstart
9593                     = cPMOP->op_pmstashstartu.op_pmreplstart->op_next;
9594             CALL_RPEEP(cPMOP->op_pmstashstartu.op_pmreplstart);
9595             break;
9596
9597         case OP_EXEC:
9598             if (o->op_next && o->op_next->op_type == OP_NEXTSTATE
9599                 && ckWARN(WARN_SYNTAX))
9600             {
9601                 if (o->op_next->op_sibling) {
9602                     const OPCODE type = o->op_next->op_sibling->op_type;
9603                     if (type != OP_EXIT && type != OP_WARN && type != OP_DIE) {
9604                         const line_t oldline = CopLINE(PL_curcop);
9605                         CopLINE_set(PL_curcop, CopLINE((COP*)o->op_next));
9606                         Perl_warner(aTHX_ packWARN(WARN_EXEC),
9607                                     "Statement unlikely to be reached");
9608                         Perl_warner(aTHX_ packWARN(WARN_EXEC),
9609                                     "\t(Maybe you meant system() when you said exec()?)\n");
9610                         CopLINE_set(PL_curcop, oldline);
9611                     }
9612                 }
9613             }
9614             break;
9615
9616         case OP_HELEM: {
9617             UNOP *rop;
9618             SV *lexname;
9619             GV **fields;
9620             SV **svp, *sv;
9621             const char *key = NULL;
9622             STRLEN keylen;
9623
9624             if (((BINOP*)o)->op_last->op_type != OP_CONST)
9625                 break;
9626
9627             /* Make the CONST have a shared SV */
9628             svp = cSVOPx_svp(((BINOP*)o)->op_last);
9629             if (!SvFAKE(sv = *svp) || !SvREADONLY(sv)) {
9630                 key = SvPV_const(sv, keylen);
9631                 lexname = newSVpvn_share(key,
9632                                          SvUTF8(sv) ? -(I32)keylen : (I32)keylen,
9633                                          0);
9634                 SvREFCNT_dec(sv);
9635                 *svp = lexname;
9636             }
9637
9638             if ((o->op_private & (OPpLVAL_INTRO)))
9639                 break;
9640
9641             rop = (UNOP*)((BINOP*)o)->op_first;
9642             if (rop->op_type != OP_RV2HV || rop->op_first->op_type != OP_PADSV)
9643                 break;
9644             lexname = *av_fetch(PL_comppad_name, rop->op_first->op_targ, TRUE);
9645             if (!SvPAD_TYPED(lexname))
9646                 break;
9647             fields = (GV**)hv_fetchs(SvSTASH(lexname), "FIELDS", FALSE);
9648             if (!fields || !GvHV(*fields))
9649                 break;
9650             key = SvPV_const(*svp, keylen);
9651             if (!hv_fetch(GvHV(*fields), key,
9652                         SvUTF8(*svp) ? -(I32)keylen : (I32)keylen, FALSE))
9653             {
9654                 Perl_croak(aTHX_ "No such class field \"%s\" " 
9655                            "in variable %s of type %s", 
9656                       key, SvPV_nolen_const(lexname), HvNAME_get(SvSTASH(lexname)));
9657             }
9658
9659             break;
9660         }
9661
9662         case OP_HSLICE: {
9663             UNOP *rop;
9664             SV *lexname;
9665             GV **fields;
9666             SV **svp;
9667             const char *key;
9668             STRLEN keylen;
9669             SVOP *first_key_op, *key_op;
9670
9671             if ((o->op_private & (OPpLVAL_INTRO))
9672                 /* I bet there's always a pushmark... */
9673                 || ((LISTOP*)o)->op_first->op_sibling->op_type != OP_LIST)
9674                 /* hmmm, no optimization if list contains only one key. */
9675                 break;
9676             rop = (UNOP*)((LISTOP*)o)->op_last;
9677             if (rop->op_type != OP_RV2HV)
9678                 break;
9679             if (rop->op_first->op_type == OP_PADSV)
9680                 /* @$hash{qw(keys here)} */
9681                 rop = (UNOP*)rop->op_first;
9682             else {
9683                 /* @{$hash}{qw(keys here)} */
9684                 if (rop->op_first->op_type == OP_SCOPE 
9685                     && cLISTOPx(rop->op_first)->op_last->op_type == OP_PADSV)
9686                 {
9687                     rop = (UNOP*)cLISTOPx(rop->op_first)->op_last;
9688                 }
9689                 else
9690                     break;
9691             }
9692                     
9693             lexname = *av_fetch(PL_comppad_name, rop->op_targ, TRUE);
9694             if (!SvPAD_TYPED(lexname))
9695                 break;
9696             fields = (GV**)hv_fetchs(SvSTASH(lexname), "FIELDS", FALSE);
9697             if (!fields || !GvHV(*fields))
9698                 break;
9699             /* Again guessing that the pushmark can be jumped over.... */
9700             first_key_op = (SVOP*)((LISTOP*)((LISTOP*)o)->op_first->op_sibling)
9701                 ->op_first->op_sibling;
9702             for (key_op = first_key_op; key_op;
9703                  key_op = (SVOP*)key_op->op_sibling) {
9704                 if (key_op->op_type != OP_CONST)
9705                     continue;
9706                 svp = cSVOPx_svp(key_op);
9707                 key = SvPV_const(*svp, keylen);
9708                 if (!hv_fetch(GvHV(*fields), key, 
9709                             SvUTF8(*svp) ? -(I32)keylen : (I32)keylen, FALSE))
9710                 {
9711                     Perl_croak(aTHX_ "No such class field \"%s\" "
9712                                "in variable %s of type %s",
9713                           key, SvPV_nolen(lexname), HvNAME_get(SvSTASH(lexname)));
9714                 }
9715             }
9716             break;
9717         }
9718         case OP_RV2SV:
9719         case OP_RV2AV:
9720         case OP_RV2HV:
9721             if (oldop
9722                  && (  oldop->op_type == OP_AELEM
9723                     || oldop->op_type == OP_PADSV
9724                     || oldop->op_type == OP_RV2SV
9725                     || oldop->op_type == OP_RV2GV
9726                     || oldop->op_type == OP_HELEM
9727                     )
9728                  && (oldop->op_private & OPpDEREF)
9729             ) {
9730                 o->op_private |= OPpDEREFed;
9731             }
9732
9733         case OP_SORT: {
9734             /* will point to RV2AV or PADAV op on LHS/RHS of assign */
9735             OP *oleft;
9736             OP *o2;
9737
9738             /* check that RHS of sort is a single plain array */
9739             OP *oright = cUNOPo->op_first;
9740             if (!oright || oright->op_type != OP_PUSHMARK)
9741                 break;
9742
9743             /* reverse sort ... can be optimised.  */
9744             if (!cUNOPo->op_sibling) {
9745                 /* Nothing follows us on the list. */
9746                 OP * const reverse = o->op_next;
9747
9748                 if (reverse->op_type == OP_REVERSE &&
9749                     (reverse->op_flags & OPf_WANT) == OPf_WANT_LIST) {
9750                     OP * const pushmark = cUNOPx(reverse)->op_first;
9751                     if (pushmark && (pushmark->op_type == OP_PUSHMARK)
9752                         && (cUNOPx(pushmark)->op_sibling == o)) {
9753                         /* reverse -> pushmark -> sort */
9754                         o->op_private |= OPpSORT_REVERSE;
9755                         op_null(reverse);
9756                         pushmark->op_next = oright->op_next;
9757                         op_null(oright);
9758                     }
9759                 }
9760             }
9761
9762             /* make @a = sort @a act in-place */
9763
9764             oright = cUNOPx(oright)->op_sibling;
9765             if (!oright)
9766                 break;
9767             if (oright->op_type == OP_NULL) { /* skip sort block/sub */
9768                 oright = cUNOPx(oright)->op_sibling;
9769             }
9770
9771             oleft = is_inplace_av(o, oright);
9772             if (!oleft)
9773                 break;
9774
9775             /* transfer MODishness etc from LHS arg to RHS arg */
9776             oright->op_flags = oleft->op_flags;
9777             o->op_private |= OPpSORT_INPLACE;
9778
9779             /* excise push->gv->rv2av->null->aassign */
9780             o2 = o->op_next->op_next;
9781             op_null(o2); /* PUSHMARK */
9782             o2 = o2->op_next;
9783             if (o2->op_type == OP_GV) {
9784                 op_null(o2); /* GV */
9785                 o2 = o2->op_next;
9786             }
9787             op_null(o2); /* RV2AV or PADAV */
9788             o2 = o2->op_next->op_next;
9789             op_null(o2); /* AASSIGN */
9790
9791             o->op_next = o2->op_next;
9792
9793             break;
9794         }
9795
9796         case OP_REVERSE: {
9797             OP *ourmark, *theirmark, *ourlast, *iter, *expushmark, *rv2av;
9798             OP *gvop = NULL;
9799             OP *oleft, *oright;
9800             LISTOP *enter, *exlist;
9801
9802             /* @a = reverse @a */
9803             if ((oright = cLISTOPo->op_first)
9804                     && (oright->op_type == OP_PUSHMARK)
9805                     && (oright = oright->op_sibling)
9806                     && (oleft = is_inplace_av(o, oright))) {
9807                 OP *o2;
9808
9809                 /* transfer MODishness etc from LHS arg to RHS arg */
9810                 oright->op_flags = oleft->op_flags;
9811                 o->op_private |= OPpREVERSE_INPLACE;
9812
9813                 /* excise push->gv->rv2av->null->aassign */
9814                 o2 = o->op_next->op_next;
9815                 op_null(o2); /* PUSHMARK */
9816                 o2 = o2->op_next;
9817                 if (o2->op_type == OP_GV) {
9818                     op_null(o2); /* GV */
9819                     o2 = o2->op_next;
9820                 }
9821                 op_null(o2); /* RV2AV or PADAV */
9822                 o2 = o2->op_next->op_next;
9823                 op_null(o2); /* AASSIGN */
9824
9825                 o->op_next = o2->op_next;
9826                 break;
9827             }
9828
9829             enter = (LISTOP *) o->op_next;
9830             if (!enter)
9831                 break;
9832             if (enter->op_type == OP_NULL) {
9833                 enter = (LISTOP *) enter->op_next;
9834                 if (!enter)
9835                     break;
9836             }
9837             /* for $a (...) will have OP_GV then OP_RV2GV here.
9838                for (...) just has an OP_GV.  */
9839             if (enter->op_type == OP_GV) {
9840                 gvop = (OP *) enter;
9841                 enter = (LISTOP *) enter->op_next;
9842                 if (!enter)
9843                     break;
9844                 if (enter->op_type == OP_RV2GV) {
9845                   enter = (LISTOP *) enter->op_next;
9846                   if (!enter)
9847                     break;
9848                 }
9849             }
9850
9851             if (enter->op_type != OP_ENTERITER)
9852                 break;
9853
9854             iter = enter->op_next;
9855             if (!iter || iter->op_type != OP_ITER)
9856                 break;
9857             
9858             expushmark = enter->op_first;
9859             if (!expushmark || expushmark->op_type != OP_NULL
9860                 || expushmark->op_targ != OP_PUSHMARK)
9861                 break;
9862
9863             exlist = (LISTOP *) expushmark->op_sibling;
9864             if (!exlist || exlist->op_type != OP_NULL
9865                 || exlist->op_targ != OP_LIST)
9866                 break;
9867
9868             if (exlist->op_last != o) {
9869                 /* Mmm. Was expecting to point back to this op.  */
9870                 break;
9871             }
9872             theirmark = exlist->op_first;
9873             if (!theirmark || theirmark->op_type != OP_PUSHMARK)
9874                 break;
9875
9876             if (theirmark->op_sibling != o) {
9877                 /* There's something between the mark and the reverse, eg
9878                    for (1, reverse (...))
9879                    so no go.  */
9880                 break;
9881             }
9882
9883             ourmark = ((LISTOP *)o)->op_first;
9884             if (!ourmark || ourmark->op_type != OP_PUSHMARK)
9885                 break;
9886
9887             ourlast = ((LISTOP *)o)->op_last;
9888             if (!ourlast || ourlast->op_next != o)
9889                 break;
9890
9891             rv2av = ourmark->op_sibling;
9892             if (rv2av && rv2av->op_type == OP_RV2AV && rv2av->op_sibling == 0
9893                 && rv2av->op_flags == (OPf_WANT_LIST | OPf_KIDS)
9894                 && enter->op_flags == (OPf_WANT_LIST | OPf_KIDS)) {
9895                 /* We're just reversing a single array.  */
9896                 rv2av->op_flags = OPf_WANT_SCALAR | OPf_KIDS | OPf_REF;
9897                 enter->op_flags |= OPf_STACKED;
9898             }
9899
9900             /* We don't have control over who points to theirmark, so sacrifice
9901                ours.  */
9902             theirmark->op_next = ourmark->op_next;
9903             theirmark->op_flags = ourmark->op_flags;
9904             ourlast->op_next = gvop ? gvop : (OP *) enter;
9905             op_null(ourmark);
9906             op_null(o);
9907             enter->op_private |= OPpITER_REVERSED;
9908             iter->op_private |= OPpITER_REVERSED;
9909             
9910             break;
9911         }
9912
9913         case OP_SASSIGN: {
9914             OP *rv2gv;
9915             UNOP *refgen, *rv2cv;
9916             LISTOP *exlist;
9917
9918             if ((o->op_flags & OPf_WANT) != OPf_WANT_VOID)
9919                 break;
9920
9921             if ((o->op_private & ~OPpASSIGN_BACKWARDS) != 2)
9922                 break;
9923
9924             rv2gv = ((BINOP *)o)->op_last;
9925             if (!rv2gv || rv2gv->op_type != OP_RV2GV)
9926                 break;
9927
9928             refgen = (UNOP *)((BINOP *)o)->op_first;
9929
9930             if (!refgen || refgen->op_type != OP_REFGEN)
9931                 break;
9932
9933             exlist = (LISTOP *)refgen->op_first;
9934             if (!exlist || exlist->op_type != OP_NULL
9935                 || exlist->op_targ != OP_LIST)
9936                 break;
9937
9938             if (exlist->op_first->op_type != OP_PUSHMARK)
9939                 break;
9940
9941             rv2cv = (UNOP*)exlist->op_last;
9942
9943             if (rv2cv->op_type != OP_RV2CV)
9944                 break;
9945
9946             assert ((rv2gv->op_private & OPpDONT_INIT_GV) == 0);
9947             assert ((o->op_private & OPpASSIGN_CV_TO_GV) == 0);
9948             assert ((rv2cv->op_private & OPpMAY_RETURN_CONSTANT) == 0);
9949
9950             o->op_private |= OPpASSIGN_CV_TO_GV;
9951             rv2gv->op_private |= OPpDONT_INIT_GV;
9952             rv2cv->op_private |= OPpMAY_RETURN_CONSTANT;
9953
9954             break;
9955         }
9956
9957         
9958         case OP_QR:
9959         case OP_MATCH:
9960             if (!(cPMOP->op_pmflags & PMf_ONCE)) {
9961                 assert (!cPMOP->op_pmstashstartu.op_pmreplstart);
9962             }
9963             break;
9964
9965         case OP_CUSTOM: {
9966             Perl_cpeep_t cpeep = 
9967                 XopENTRY(Perl_custom_op_xop(aTHX_ o), xop_peep);
9968             if (cpeep)
9969                 cpeep(aTHX_ o, oldop);
9970             break;
9971         }
9972             
9973         }
9974         oldop = o;
9975     }
9976     LEAVE;
9977 }
9978
9979 void
9980 Perl_peep(pTHX_ register OP *o)
9981 {
9982     CALL_RPEEP(o);
9983 }
9984
9985 /*
9986 =head1 Custom Operators
9987
9988 =for apidoc Ao||custom_op_xop
9989 Return the XOP structure for a given custom op. This function should be
9990 considered internal to OP_NAME and the other access macros: use them instead.
9991
9992 =cut
9993 */
9994
9995 const XOP *
9996 Perl_custom_op_xop(pTHX_ const OP *o)
9997 {
9998     SV *keysv;
9999     HE *he = NULL;
10000     XOP *xop;
10001
10002     static const XOP xop_null = { 0, 0, 0, 0, 0 };
10003
10004     PERL_ARGS_ASSERT_CUSTOM_OP_XOP;
10005     assert(o->op_type == OP_CUSTOM);
10006
10007     /* This is wrong. It assumes a function pointer can be cast to IV,
10008      * which isn't guaranteed, but this is what the old custom OP code
10009      * did. In principle it should be safer to Copy the bytes of the
10010      * pointer into a PV: since the new interface is hidden behind
10011      * functions, this can be changed later if necessary.  */
10012     /* Change custom_op_xop if this ever happens */
10013     keysv = sv_2mortal(newSViv(PTR2IV(o->op_ppaddr)));
10014
10015     if (PL_custom_ops)
10016         he = hv_fetch_ent(PL_custom_ops, keysv, 0, 0);
10017
10018     /* assume noone will have just registered a desc */
10019     if (!he && PL_custom_op_names &&
10020         (he = hv_fetch_ent(PL_custom_op_names, keysv, 0, 0))
10021     ) {
10022         const char *pv;
10023         STRLEN l;
10024
10025         /* XXX does all this need to be shared mem? */
10026         Newxz(xop, 1, XOP);
10027         pv = SvPV(HeVAL(he), l);
10028         XopENTRY_set(xop, xop_name, savepvn(pv, l));
10029         if (PL_custom_op_descs &&
10030             (he = hv_fetch_ent(PL_custom_op_descs, keysv, 0, 0))
10031         ) {
10032             pv = SvPV(HeVAL(he), l);
10033             XopENTRY_set(xop, xop_desc, savepvn(pv, l));
10034         }
10035         Perl_custom_op_register(aTHX_ o->op_ppaddr, xop);
10036         return xop;
10037     }
10038
10039     if (!he) return &xop_null;
10040
10041     xop = INT2PTR(XOP *, SvIV(HeVAL(he)));
10042     return xop;
10043 }
10044
10045 /*
10046 =for apidoc Ao||custom_op_register
10047 Register a custom op. See L<perlguts/"Custom Operators">.
10048
10049 =cut
10050 */
10051
10052 void
10053 Perl_custom_op_register(pTHX_ Perl_ppaddr_t ppaddr, const XOP *xop)
10054 {
10055     SV *keysv;
10056
10057     PERL_ARGS_ASSERT_CUSTOM_OP_REGISTER;
10058
10059     /* see the comment in custom_op_xop */
10060     keysv = sv_2mortal(newSViv(PTR2IV(ppaddr)));
10061
10062     if (!PL_custom_ops)
10063         PL_custom_ops = newHV();
10064
10065     if (!hv_store_ent(PL_custom_ops, keysv, newSViv(PTR2IV(xop)), 0))
10066         Perl_croak(aTHX_ "panic: can't register custom OP %s", xop->xop_name);
10067 }
10068
10069 #include "XSUB.h"
10070
10071 /* Efficient sub that returns a constant scalar value. */
10072 static void
10073 const_sv_xsub(pTHX_ CV* cv)
10074 {
10075     dVAR;
10076     dXSARGS;
10077     SV *const sv = MUTABLE_SV(XSANY.any_ptr);
10078     if (items != 0) {
10079         NOOP;
10080 #if 0
10081         /* diag_listed_as: SKIPME */
10082         Perl_croak(aTHX_ "usage: %s::%s()",
10083                    HvNAME_get(GvSTASH(CvGV(cv))), GvNAME(CvGV(cv)));
10084 #endif
10085     }
10086     if (!sv) {
10087         XSRETURN(0);
10088     }
10089     EXTEND(sp, 1);
10090     ST(0) = sv;
10091     XSRETURN(1);
10092 }
10093
10094 /*
10095  * Local variables:
10096  * c-indentation-style: bsd
10097  * c-basic-offset: 4
10098  * indent-tabs-mode: t
10099  * End:
10100  *
10101  * ex: set ts=8 sts=4 sw=4 noet:
10102  */