This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Special compiler settings only change for 64bitall, not for 64bitint
[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     SV *use_version = NULL;
4226
4227     PERL_ARGS_ASSERT_UTILIZE;
4228
4229     if (idop->op_type != OP_CONST)
4230         Perl_croak(aTHX_ "Module name must be constant");
4231
4232     if (PL_madskills)
4233         op_getmad(idop,pegop,'U');
4234
4235     veop = NULL;
4236
4237     if (version) {
4238         SV * const vesv = ((SVOP*)version)->op_sv;
4239
4240         if (PL_madskills)
4241             op_getmad(version,pegop,'V');
4242         if (!arg && !SvNIOKp(vesv)) {
4243             arg = version;
4244         }
4245         else {
4246             OP *pack;
4247             SV *meth;
4248
4249             if (version->op_type != OP_CONST || !SvNIOKp(vesv))
4250                 Perl_croak(aTHX_ "Version number must be a constant number");
4251
4252             /* Make copy of idop so we don't free it twice */
4253             pack = newSVOP(OP_CONST, 0, newSVsv(((SVOP*)idop)->op_sv));
4254
4255             /* Fake up a method call to VERSION */
4256             meth = newSVpvs_share("VERSION");
4257             veop = convert(OP_ENTERSUB, OPf_STACKED|OPf_SPECIAL,
4258                             op_append_elem(OP_LIST,
4259                                         op_prepend_elem(OP_LIST, pack, list(version)),
4260                                         newSVOP(OP_METHOD_NAMED, 0, meth)));
4261         }
4262     }
4263
4264     /* Fake up an import/unimport */
4265     if (arg && arg->op_type == OP_STUB) {
4266         if (PL_madskills)
4267             op_getmad(arg,pegop,'S');
4268         imop = arg;             /* no import on explicit () */
4269     }
4270     else if (SvNIOKp(((SVOP*)idop)->op_sv)) {
4271         imop = NULL;            /* use 5.0; */
4272         if (aver)
4273             use_version = ((SVOP*)idop)->op_sv;
4274         else
4275             idop->op_private |= OPpCONST_NOVER;
4276     }
4277     else {
4278         SV *meth;
4279
4280         if (PL_madskills)
4281             op_getmad(arg,pegop,'A');
4282
4283         /* Make copy of idop so we don't free it twice */
4284         pack = newSVOP(OP_CONST, 0, newSVsv(((SVOP*)idop)->op_sv));
4285
4286         /* Fake up a method call to import/unimport */
4287         meth = aver
4288             ? newSVpvs_share("import") : newSVpvs_share("unimport");
4289         imop = convert(OP_ENTERSUB, OPf_STACKED|OPf_SPECIAL,
4290                        op_append_elem(OP_LIST,
4291                                    op_prepend_elem(OP_LIST, pack, list(arg)),
4292                                    newSVOP(OP_METHOD_NAMED, 0, meth)));
4293     }
4294
4295     /* Fake up the BEGIN {}, which does its thing immediately. */
4296     newATTRSUB(floor,
4297         newSVOP(OP_CONST, 0, newSVpvs_share("BEGIN")),
4298         NULL,
4299         NULL,
4300         op_append_elem(OP_LINESEQ,
4301             op_append_elem(OP_LINESEQ,
4302                 newSTATEOP(0, NULL, newUNOP(OP_REQUIRE, 0, idop)),
4303                 newSTATEOP(0, NULL, veop)),
4304             newSTATEOP(0, NULL, imop) ));
4305
4306     if (use_version) {
4307         /* If we request a version >= 5.9.5, load feature.pm with the
4308          * feature bundle that corresponds to the required version. */
4309         use_version = sv_2mortal(new_version(use_version));
4310
4311         if (vcmp(use_version,
4312                  sv_2mortal(upg_version(newSVnv(5.009005), FALSE))) >= 0) {
4313             SV *const importsv = vnormal(use_version);
4314             *SvPVX_mutable(importsv) = ':';
4315             ENTER_with_name("load_feature");
4316             Perl_load_module(aTHX_ 0, newSVpvs("feature"), NULL, importsv, NULL);
4317             LEAVE_with_name("load_feature");
4318         }
4319         /* If a version >= 5.11.0 is requested, strictures are on by default! */
4320         if (vcmp(use_version,
4321                  sv_2mortal(upg_version(newSVnv(5.011000), FALSE))) >= 0) {
4322             PL_hints |= (HINT_STRICT_REFS | HINT_STRICT_SUBS | HINT_STRICT_VARS);
4323         }
4324     }
4325
4326     /* The "did you use incorrect case?" warning used to be here.
4327      * The problem is that on case-insensitive filesystems one
4328      * might get false positives for "use" (and "require"):
4329      * "use Strict" or "require CARP" will work.  This causes
4330      * portability problems for the script: in case-strict
4331      * filesystems the script will stop working.
4332      *
4333      * The "incorrect case" warning checked whether "use Foo"
4334      * imported "Foo" to your namespace, but that is wrong, too:
4335      * there is no requirement nor promise in the language that
4336      * a Foo.pm should or would contain anything in package "Foo".
4337      *
4338      * There is very little Configure-wise that can be done, either:
4339      * the case-sensitivity of the build filesystem of Perl does not
4340      * help in guessing the case-sensitivity of the runtime environment.
4341      */
4342
4343     PL_hints |= HINT_BLOCK_SCOPE;
4344     PL_parser->copline = NOLINE;
4345     PL_parser->expect = XSTATE;
4346     PL_cop_seqmax++; /* Purely for B::*'s benefit */
4347
4348 #ifdef PERL_MAD
4349     if (!PL_madskills) {
4350         /* FIXME - don't allocate pegop if !PL_madskills */
4351         op_free(pegop);
4352         return NULL;
4353     }
4354     return pegop;
4355 #endif
4356 }
4357
4358 /*
4359 =head1 Embedding Functions
4360
4361 =for apidoc load_module
4362
4363 Loads the module whose name is pointed to by the string part of name.
4364 Note that the actual module name, not its filename, should be given.
4365 Eg, "Foo::Bar" instead of "Foo/Bar.pm".  flags can be any of
4366 PERL_LOADMOD_DENY, PERL_LOADMOD_NOIMPORT, or PERL_LOADMOD_IMPORT_OPS
4367 (or 0 for no flags). ver, if specified, provides version semantics
4368 similar to C<use Foo::Bar VERSION>.  The optional trailing SV*
4369 arguments can be used to specify arguments to the module's import()
4370 method, similar to C<use Foo::Bar VERSION LIST>.  They must be
4371 terminated with a final NULL pointer.  Note that this list can only
4372 be omitted when the PERL_LOADMOD_NOIMPORT flag has been used.
4373 Otherwise at least a single NULL pointer to designate the default
4374 import list is required.
4375
4376 =cut */
4377
4378 void
4379 Perl_load_module(pTHX_ U32 flags, SV *name, SV *ver, ...)
4380 {
4381     va_list args;
4382
4383     PERL_ARGS_ASSERT_LOAD_MODULE;
4384
4385     va_start(args, ver);
4386     vload_module(flags, name, ver, &args);
4387     va_end(args);
4388 }
4389
4390 #ifdef PERL_IMPLICIT_CONTEXT
4391 void
4392 Perl_load_module_nocontext(U32 flags, SV *name, SV *ver, ...)
4393 {
4394     dTHX;
4395     va_list args;
4396     PERL_ARGS_ASSERT_LOAD_MODULE_NOCONTEXT;
4397     va_start(args, ver);
4398     vload_module(flags, name, ver, &args);
4399     va_end(args);
4400 }
4401 #endif
4402
4403 void
4404 Perl_vload_module(pTHX_ U32 flags, SV *name, SV *ver, va_list *args)
4405 {
4406     dVAR;
4407     OP *veop, *imop;
4408     OP * const modname = newSVOP(OP_CONST, 0, name);
4409
4410     PERL_ARGS_ASSERT_VLOAD_MODULE;
4411
4412     modname->op_private |= OPpCONST_BARE;
4413     if (ver) {
4414         veop = newSVOP(OP_CONST, 0, ver);
4415     }
4416     else
4417         veop = NULL;
4418     if (flags & PERL_LOADMOD_NOIMPORT) {
4419         imop = sawparens(newNULLLIST());
4420     }
4421     else if (flags & PERL_LOADMOD_IMPORT_OPS) {
4422         imop = va_arg(*args, OP*);
4423     }
4424     else {
4425         SV *sv;
4426         imop = NULL;
4427         sv = va_arg(*args, SV*);
4428         while (sv) {
4429             imop = op_append_elem(OP_LIST, imop, newSVOP(OP_CONST, 0, sv));
4430             sv = va_arg(*args, SV*);
4431         }
4432     }
4433
4434     /* utilize() fakes up a BEGIN { require ..; import ... }, so make sure
4435      * that it has a PL_parser to play with while doing that, and also
4436      * that it doesn't mess with any existing parser, by creating a tmp
4437      * new parser with lex_start(). This won't actually be used for much,
4438      * since pp_require() will create another parser for the real work. */
4439
4440     ENTER;
4441     SAVEVPTR(PL_curcop);
4442     lex_start(NULL, NULL, 0);
4443     utilize(!(flags & PERL_LOADMOD_DENY), start_subparse(FALSE, 0),
4444             veop, modname, imop);
4445     LEAVE;
4446 }
4447
4448 OP *
4449 Perl_dofile(pTHX_ OP *term, I32 force_builtin)
4450 {
4451     dVAR;
4452     OP *doop;
4453     GV *gv = NULL;
4454
4455     PERL_ARGS_ASSERT_DOFILE;
4456
4457     if (!force_builtin) {
4458         gv = gv_fetchpvs("do", GV_NOTQUAL, SVt_PVCV);
4459         if (!(gv && GvCVu(gv) && GvIMPORTED_CV(gv))) {
4460             GV * const * const gvp = (GV**)hv_fetchs(PL_globalstash, "do", FALSE);
4461             gv = gvp ? *gvp : NULL;
4462         }
4463     }
4464
4465     if (gv && GvCVu(gv) && GvIMPORTED_CV(gv)) {
4466         doop = ck_subr(newUNOP(OP_ENTERSUB, OPf_STACKED,
4467                                op_append_elem(OP_LIST, term,
4468                                            scalar(newUNOP(OP_RV2CV, 0,
4469                                                           newGVOP(OP_GV, 0, gv))))));
4470     }
4471     else {
4472         doop = newUNOP(OP_DOFILE, 0, scalar(term));
4473     }
4474     return doop;
4475 }
4476
4477 /*
4478 =head1 Optree construction
4479
4480 =for apidoc Am|OP *|newSLICEOP|I32 flags|OP *subscript|OP *listval
4481
4482 Constructs, checks, and returns an C<lslice> (list slice) op.  I<flags>
4483 gives the eight bits of C<op_flags>, except that C<OPf_KIDS> will
4484 be set automatically, and, shifted up eight bits, the eight bits of
4485 C<op_private>, except that the bit with value 1 or 2 is automatically
4486 set as required.  I<listval> and I<subscript> supply the parameters of
4487 the slice; they are consumed by this function and become part of the
4488 constructed op tree.
4489
4490 =cut
4491 */
4492
4493 OP *
4494 Perl_newSLICEOP(pTHX_ I32 flags, OP *subscript, OP *listval)
4495 {
4496     return newBINOP(OP_LSLICE, flags,
4497             list(force_list(subscript)),
4498             list(force_list(listval)) );
4499 }
4500
4501 STATIC I32
4502 S_is_list_assignment(pTHX_ register const OP *o)
4503 {
4504     unsigned type;
4505     U8 flags;
4506
4507     if (!o)
4508         return TRUE;
4509
4510     if ((o->op_type == OP_NULL) && (o->op_flags & OPf_KIDS))
4511         o = cUNOPo->op_first;
4512
4513     flags = o->op_flags;
4514     type = o->op_type;
4515     if (type == OP_COND_EXPR) {
4516         const I32 t = is_list_assignment(cLOGOPo->op_first->op_sibling);
4517         const I32 f = is_list_assignment(cLOGOPo->op_first->op_sibling->op_sibling);
4518
4519         if (t && f)
4520             return TRUE;
4521         if (t || f)
4522             yyerror("Assignment to both a list and a scalar");
4523         return FALSE;
4524     }
4525
4526     if (type == OP_LIST &&
4527         (flags & OPf_WANT) == OPf_WANT_SCALAR &&
4528         o->op_private & OPpLVAL_INTRO)
4529         return FALSE;
4530
4531     if (type == OP_LIST || flags & OPf_PARENS ||
4532         type == OP_RV2AV || type == OP_RV2HV ||
4533         type == OP_ASLICE || type == OP_HSLICE)
4534         return TRUE;
4535
4536     if (type == OP_PADAV || type == OP_PADHV)
4537         return TRUE;
4538
4539     if (type == OP_RV2SV)
4540         return FALSE;
4541
4542     return FALSE;
4543 }
4544
4545 /*
4546 =for apidoc Am|OP *|newASSIGNOP|I32 flags|OP *left|I32 optype|OP *right
4547
4548 Constructs, checks, and returns an assignment op.  I<left> and I<right>
4549 supply the parameters of the assignment; they are consumed by this
4550 function and become part of the constructed op tree.
4551
4552 If I<optype> is C<OP_ANDASSIGN>, C<OP_ORASSIGN>, or C<OP_DORASSIGN>, then
4553 a suitable conditional optree is constructed.  If I<optype> is the opcode
4554 of a binary operator, such as C<OP_BIT_OR>, then an op is constructed that
4555 performs the binary operation and assigns the result to the left argument.
4556 Either way, if I<optype> is non-zero then I<flags> has no effect.
4557
4558 If I<optype> is zero, then a plain scalar or list assignment is
4559 constructed.  Which type of assignment it is is automatically determined.
4560 I<flags> gives the eight bits of C<op_flags>, except that C<OPf_KIDS>
4561 will be set automatically, and, shifted up eight bits, the eight bits
4562 of C<op_private>, except that the bit with value 1 or 2 is automatically
4563 set as required.
4564
4565 =cut
4566 */
4567
4568 OP *
4569 Perl_newASSIGNOP(pTHX_ I32 flags, OP *left, I32 optype, OP *right)
4570 {
4571     dVAR;
4572     OP *o;
4573
4574     if (optype) {
4575         if (optype == OP_ANDASSIGN || optype == OP_ORASSIGN || optype == OP_DORASSIGN) {
4576             return newLOGOP(optype, 0,
4577                 op_lvalue(scalar(left), optype),
4578                 newUNOP(OP_SASSIGN, 0, scalar(right)));
4579         }
4580         else {
4581             return newBINOP(optype, OPf_STACKED,
4582                 op_lvalue(scalar(left), optype), scalar(right));
4583         }
4584     }
4585
4586     if (is_list_assignment(left)) {
4587         static const char no_list_state[] = "Initialization of state variables"
4588             " in list context currently forbidden";
4589         OP *curop;
4590         bool maybe_common_vars = TRUE;
4591
4592         PL_modcount = 0;
4593         /* Grandfathering $[ assignment here.  Bletch.*/
4594         /* Only simple assignments like C<< ($[) = 1 >> are allowed */
4595         PL_eval_start = (left->op_type == OP_CONST) ? right : NULL;
4596         left = op_lvalue(left, OP_AASSIGN);
4597         if (PL_eval_start)
4598             PL_eval_start = 0;
4599         else if (left->op_type == OP_CONST) {
4600             deprecate("assignment to $[");
4601             /* FIXME for MAD */
4602             /* Result of assignment is always 1 (or we'd be dead already) */
4603             return newSVOP(OP_CONST, 0, newSViv(1));
4604         }
4605         curop = list(force_list(left));
4606         o = newBINOP(OP_AASSIGN, flags, list(force_list(right)), curop);
4607         o->op_private = (U8)(0 | (flags >> 8));
4608
4609         if ((left->op_type == OP_LIST
4610              || (left->op_type == OP_NULL && left->op_targ == OP_LIST)))
4611         {
4612             OP* lop = ((LISTOP*)left)->op_first;
4613             maybe_common_vars = FALSE;
4614             while (lop) {
4615                 if (lop->op_type == OP_PADSV ||
4616                     lop->op_type == OP_PADAV ||
4617                     lop->op_type == OP_PADHV ||
4618                     lop->op_type == OP_PADANY) {
4619                     if (!(lop->op_private & OPpLVAL_INTRO))
4620                         maybe_common_vars = TRUE;
4621
4622                     if (lop->op_private & OPpPAD_STATE) {
4623                         if (left->op_private & OPpLVAL_INTRO) {
4624                             /* Each variable in state($a, $b, $c) = ... */
4625                         }
4626                         else {
4627                             /* Each state variable in
4628                                (state $a, my $b, our $c, $d, undef) = ... */
4629                         }
4630                         yyerror(no_list_state);
4631                     } else {
4632                         /* Each my variable in
4633                            (state $a, my $b, our $c, $d, undef) = ... */
4634                     }
4635                 } else if (lop->op_type == OP_UNDEF ||
4636                            lop->op_type == OP_PUSHMARK) {
4637                     /* undef may be interesting in
4638                        (state $a, undef, state $c) */
4639                 } else {
4640                     /* Other ops in the list. */
4641                     maybe_common_vars = TRUE;
4642                 }
4643                 lop = lop->op_sibling;
4644             }
4645         }
4646         else if ((left->op_private & OPpLVAL_INTRO)
4647                 && (   left->op_type == OP_PADSV
4648                     || left->op_type == OP_PADAV
4649                     || left->op_type == OP_PADHV
4650                     || left->op_type == OP_PADANY))
4651         {
4652             if (left->op_type == OP_PADSV) maybe_common_vars = FALSE;
4653             if (left->op_private & OPpPAD_STATE) {
4654                 /* All single variable list context state assignments, hence
4655                    state ($a) = ...
4656                    (state $a) = ...
4657                    state @a = ...
4658                    state (@a) = ...
4659                    (state @a) = ...
4660                    state %a = ...
4661                    state (%a) = ...
4662                    (state %a) = ...
4663                 */
4664                 yyerror(no_list_state);
4665             }
4666         }
4667
4668         /* PL_generation sorcery:
4669          * an assignment like ($a,$b) = ($c,$d) is easier than
4670          * ($a,$b) = ($c,$a), since there is no need for temporary vars.
4671          * To detect whether there are common vars, the global var
4672          * PL_generation is incremented for each assign op we compile.
4673          * Then, while compiling the assign op, we run through all the
4674          * variables on both sides of the assignment, setting a spare slot
4675          * in each of them to PL_generation. If any of them already have
4676          * that value, we know we've got commonality.  We could use a
4677          * single bit marker, but then we'd have to make 2 passes, first
4678          * to clear the flag, then to test and set it.  To find somewhere
4679          * to store these values, evil chicanery is done with SvUVX().
4680          */
4681
4682         if (maybe_common_vars) {
4683             OP *lastop = o;
4684             PL_generation++;
4685             for (curop = LINKLIST(o); curop != o; curop = LINKLIST(curop)) {
4686                 if (PL_opargs[curop->op_type] & OA_DANGEROUS) {
4687                     if (curop->op_type == OP_GV) {
4688                         GV *gv = cGVOPx_gv(curop);
4689                         if (gv == PL_defgv
4690                             || (int)GvASSIGN_GENERATION(gv) == PL_generation)
4691                             break;
4692                         GvASSIGN_GENERATION_set(gv, PL_generation);
4693                     }
4694                     else if (curop->op_type == OP_PADSV ||
4695                              curop->op_type == OP_PADAV ||
4696                              curop->op_type == OP_PADHV ||
4697                              curop->op_type == OP_PADANY)
4698                     {
4699                         if (PAD_COMPNAME_GEN(curop->op_targ)
4700                                                     == (STRLEN)PL_generation)
4701                             break;
4702                         PAD_COMPNAME_GEN_set(curop->op_targ, PL_generation);
4703
4704                     }
4705                     else if (curop->op_type == OP_RV2CV)
4706                         break;
4707                     else if (curop->op_type == OP_RV2SV ||
4708                              curop->op_type == OP_RV2AV ||
4709                              curop->op_type == OP_RV2HV ||
4710                              curop->op_type == OP_RV2GV) {
4711                         if (lastop->op_type != OP_GV)   /* funny deref? */
4712                             break;
4713                     }
4714                     else if (curop->op_type == OP_PUSHRE) {
4715 #ifdef USE_ITHREADS
4716                         if (((PMOP*)curop)->op_pmreplrootu.op_pmtargetoff) {
4717                             GV *const gv = MUTABLE_GV(PAD_SVl(((PMOP*)curop)->op_pmreplrootu.op_pmtargetoff));
4718                             if (gv == PL_defgv
4719                                 || (int)GvASSIGN_GENERATION(gv) == PL_generation)
4720                                 break;
4721                             GvASSIGN_GENERATION_set(gv, PL_generation);
4722                         }
4723 #else
4724                         GV *const gv
4725                             = ((PMOP*)curop)->op_pmreplrootu.op_pmtargetgv;
4726                         if (gv) {
4727                             if (gv == PL_defgv
4728                                 || (int)GvASSIGN_GENERATION(gv) == PL_generation)
4729                                 break;
4730                             GvASSIGN_GENERATION_set(gv, PL_generation);
4731                         }
4732 #endif
4733                     }
4734                     else
4735                         break;
4736                 }
4737                 lastop = curop;
4738             }
4739             if (curop != o)
4740                 o->op_private |= OPpASSIGN_COMMON;
4741         }
4742
4743         if (right && right->op_type == OP_SPLIT && !PL_madskills) {
4744             OP* tmpop = ((LISTOP*)right)->op_first;
4745             if (tmpop && (tmpop->op_type == OP_PUSHRE)) {
4746                 PMOP * const pm = (PMOP*)tmpop;
4747                 if (left->op_type == OP_RV2AV &&
4748                     !(left->op_private & OPpLVAL_INTRO) &&
4749                     !(o->op_private & OPpASSIGN_COMMON) )
4750                 {
4751                     tmpop = ((UNOP*)left)->op_first;
4752                     if (tmpop->op_type == OP_GV
4753 #ifdef USE_ITHREADS
4754                         && !pm->op_pmreplrootu.op_pmtargetoff
4755 #else
4756                         && !pm->op_pmreplrootu.op_pmtargetgv
4757 #endif
4758                         ) {
4759 #ifdef USE_ITHREADS
4760                         pm->op_pmreplrootu.op_pmtargetoff
4761                             = cPADOPx(tmpop)->op_padix;
4762                         cPADOPx(tmpop)->op_padix = 0;   /* steal it */
4763 #else
4764                         pm->op_pmreplrootu.op_pmtargetgv
4765                             = MUTABLE_GV(cSVOPx(tmpop)->op_sv);
4766                         cSVOPx(tmpop)->op_sv = NULL;    /* steal it */
4767 #endif
4768                         pm->op_pmflags |= PMf_ONCE;
4769                         tmpop = cUNOPo->op_first;       /* to list (nulled) */
4770                         tmpop = ((UNOP*)tmpop)->op_first; /* to pushmark */
4771                         tmpop->op_sibling = NULL;       /* don't free split */
4772                         right->op_next = tmpop->op_next;  /* fix starting loc */
4773                         op_free(o);                     /* blow off assign */
4774                         right->op_flags &= ~OPf_WANT;
4775                                 /* "I don't know and I don't care." */
4776                         return right;
4777                     }
4778                 }
4779                 else {
4780                    if (PL_modcount < RETURN_UNLIMITED_NUMBER &&
4781                       ((LISTOP*)right)->op_last->op_type == OP_CONST)
4782                     {
4783                         SV *sv = ((SVOP*)((LISTOP*)right)->op_last)->op_sv;
4784                         if (SvIOK(sv) && SvIVX(sv) == 0)
4785                             sv_setiv(sv, PL_modcount+1);
4786                     }
4787                 }
4788             }
4789         }
4790         return o;
4791     }
4792     if (!right)
4793         right = newOP(OP_UNDEF, 0);
4794     if (right->op_type == OP_READLINE) {
4795         right->op_flags |= OPf_STACKED;
4796         return newBINOP(OP_NULL, flags, op_lvalue(scalar(left), OP_SASSIGN),
4797                 scalar(right));
4798     }
4799     else {
4800         PL_eval_start = right;  /* Grandfathering $[ assignment here.  Bletch.*/
4801         o = newBINOP(OP_SASSIGN, flags,
4802             scalar(right), op_lvalue(scalar(left), OP_SASSIGN) );
4803         if (PL_eval_start)
4804             PL_eval_start = 0;
4805         else {
4806             if (!PL_madskills) { /* assignment to $[ is ignored when making a mad dump */
4807                 deprecate("assignment to $[");
4808                 op_free(o);
4809                 o = newSVOP(OP_CONST, 0, newSViv(CopARYBASE_get(&PL_compiling)));
4810                 o->op_private |= OPpCONST_ARYBASE;
4811             }
4812         }
4813     }
4814     return o;
4815 }
4816
4817 /*
4818 =for apidoc Am|OP *|newSTATEOP|I32 flags|char *label|OP *o
4819
4820 Constructs a state op (COP).  The state op is normally a C<nextstate> op,
4821 but will be a C<dbstate> op if debugging is enabled for currently-compiled
4822 code.  The state op is populated from L</PL_curcop> (or L</PL_compiling>).
4823 If I<label> is non-null, it supplies the name of a label to attach to
4824 the state op; this function takes ownership of the memory pointed at by
4825 I<label>, and will free it.  I<flags> gives the eight bits of C<op_flags>
4826 for the state op.
4827
4828 If I<o> is null, the state op is returned.  Otherwise the state op is
4829 combined with I<o> into a C<lineseq> list op, which is returned.  I<o>
4830 is consumed by this function and becomes part of the returned op tree.
4831
4832 =cut
4833 */
4834
4835 OP *
4836 Perl_newSTATEOP(pTHX_ I32 flags, char *label, OP *o)
4837 {
4838     dVAR;
4839     const U32 seq = intro_my();
4840     register COP *cop;
4841
4842     NewOp(1101, cop, 1, COP);
4843     if (PERLDB_LINE && CopLINE(PL_curcop) && PL_curstash != PL_debstash) {
4844         cop->op_type = OP_DBSTATE;
4845         cop->op_ppaddr = PL_ppaddr[ OP_DBSTATE ];
4846     }
4847     else {
4848         cop->op_type = OP_NEXTSTATE;
4849         cop->op_ppaddr = PL_ppaddr[ OP_NEXTSTATE ];
4850     }
4851     cop->op_flags = (U8)flags;
4852     CopHINTS_set(cop, PL_hints);
4853 #ifdef NATIVE_HINTS
4854     cop->op_private |= NATIVE_HINTS;
4855 #endif
4856     CopHINTS_set(&PL_compiling, CopHINTS_get(cop));
4857     cop->op_next = (OP*)cop;
4858
4859     cop->cop_seq = seq;
4860     /* CopARYBASE is now "virtual", in that it's stored as a flag bit in
4861        CopHINTS and a possible value in cop_hints_hash, so no need to copy it.
4862     */
4863     cop->cop_warnings = DUP_WARNINGS(PL_curcop->cop_warnings);
4864     CopHINTHASH_set(cop, cophh_copy(CopHINTHASH_get(PL_curcop)));
4865     if (label) {
4866         Perl_store_cop_label(aTHX_ cop, label, strlen(label), 0);
4867                                                      
4868         PL_hints |= HINT_BLOCK_SCOPE;
4869         /* It seems that we need to defer freeing this pointer, as other parts
4870            of the grammar end up wanting to copy it after this op has been
4871            created. */
4872         SAVEFREEPV(label);
4873     }
4874
4875     if (PL_parser && PL_parser->copline == NOLINE)
4876         CopLINE_set(cop, CopLINE(PL_curcop));
4877     else {
4878         CopLINE_set(cop, PL_parser->copline);
4879         if (PL_parser)
4880             PL_parser->copline = NOLINE;
4881     }
4882 #ifdef USE_ITHREADS
4883     CopFILE_set(cop, CopFILE(PL_curcop));       /* XXX share in a pvtable? */
4884 #else
4885     CopFILEGV_set(cop, CopFILEGV(PL_curcop));
4886 #endif
4887     CopSTASH_set(cop, PL_curstash);
4888
4889     if ((PERLDB_LINE || PERLDB_SAVESRC) && PL_curstash != PL_debstash) {
4890         /* this line can have a breakpoint - store the cop in IV */
4891         AV *av = CopFILEAVx(PL_curcop);
4892         if (av) {
4893             SV * const * const svp = av_fetch(av, (I32)CopLINE(cop), FALSE);
4894             if (svp && *svp != &PL_sv_undef ) {
4895                 (void)SvIOK_on(*svp);
4896                 SvIV_set(*svp, PTR2IV(cop));
4897             }
4898         }
4899     }
4900
4901     if (flags & OPf_SPECIAL)
4902         op_null((OP*)cop);
4903     return op_prepend_elem(OP_LINESEQ, (OP*)cop, o);
4904 }
4905
4906 /*
4907 =for apidoc Am|OP *|newLOGOP|I32 type|I32 flags|OP *first|OP *other
4908
4909 Constructs, checks, and returns a logical (flow control) op.  I<type>
4910 is the opcode.  I<flags> gives the eight bits of C<op_flags>, except
4911 that C<OPf_KIDS> will be set automatically, and, shifted up eight bits,
4912 the eight bits of C<op_private>, except that the bit with value 1 is
4913 automatically set.  I<first> supplies the expression controlling the
4914 flow, and I<other> supplies the side (alternate) chain of ops; they are
4915 consumed by this function and become part of the constructed op tree.
4916
4917 =cut
4918 */
4919
4920 OP *
4921 Perl_newLOGOP(pTHX_ I32 type, I32 flags, OP *first, OP *other)
4922 {
4923     dVAR;
4924
4925     PERL_ARGS_ASSERT_NEWLOGOP;
4926
4927     return new_logop(type, flags, &first, &other);
4928 }
4929
4930 STATIC OP *
4931 S_search_const(pTHX_ OP *o)
4932 {
4933     PERL_ARGS_ASSERT_SEARCH_CONST;
4934
4935     switch (o->op_type) {
4936         case OP_CONST:
4937             return o;
4938         case OP_NULL:
4939             if (o->op_flags & OPf_KIDS)
4940                 return search_const(cUNOPo->op_first);
4941             break;
4942         case OP_LEAVE:
4943         case OP_SCOPE:
4944         case OP_LINESEQ:
4945         {
4946             OP *kid;
4947             if (!(o->op_flags & OPf_KIDS))
4948                 return NULL;
4949             kid = cLISTOPo->op_first;
4950             do {
4951                 switch (kid->op_type) {
4952                     case OP_ENTER:
4953                     case OP_NULL:
4954                     case OP_NEXTSTATE:
4955                         kid = kid->op_sibling;
4956                         break;
4957                     default:
4958                         if (kid != cLISTOPo->op_last)
4959                             return NULL;
4960                         goto last;
4961                 }
4962             } while (kid);
4963             if (!kid)
4964                 kid = cLISTOPo->op_last;
4965 last:
4966             return search_const(kid);
4967         }
4968     }
4969
4970     return NULL;
4971 }
4972
4973 STATIC OP *
4974 S_new_logop(pTHX_ I32 type, I32 flags, OP** firstp, OP** otherp)
4975 {
4976     dVAR;
4977     LOGOP *logop;
4978     OP *o;
4979     OP *first;
4980     OP *other;
4981     OP *cstop = NULL;
4982     int prepend_not = 0;
4983
4984     PERL_ARGS_ASSERT_NEW_LOGOP;
4985
4986     first = *firstp;
4987     other = *otherp;
4988
4989     if (type == OP_XOR)         /* Not short circuit, but here by precedence. */
4990         return newBINOP(type, flags, scalar(first), scalar(other));
4991
4992     assert((PL_opargs[type] & OA_CLASS_MASK) == OA_LOGOP);
4993
4994     scalarboolean(first);
4995     /* optimize AND and OR ops that have NOTs as children */
4996     if (first->op_type == OP_NOT
4997         && (first->op_flags & OPf_KIDS)
4998         && ((first->op_flags & OPf_SPECIAL) /* unless ($x) { } */
4999             || (other->op_type == OP_NOT))  /* if (!$x && !$y) { } */
5000         && !PL_madskills) {
5001         if (type == OP_AND || type == OP_OR) {
5002             if (type == OP_AND)
5003                 type = OP_OR;
5004             else
5005                 type = OP_AND;
5006             op_null(first);
5007             if (other->op_type == OP_NOT) { /* !a AND|OR !b => !(a OR|AND b) */
5008                 op_null(other);
5009                 prepend_not = 1; /* prepend a NOT op later */
5010             }
5011         }
5012     }
5013     /* search for a constant op that could let us fold the test */
5014     if ((cstop = search_const(first))) {
5015         if (cstop->op_private & OPpCONST_STRICT)
5016             no_bareword_allowed(cstop);
5017         else if ((cstop->op_private & OPpCONST_BARE))
5018                 Perl_ck_warner(aTHX_ packWARN(WARN_BAREWORD), "Bareword found in conditional");
5019         if ((type == OP_AND &&  SvTRUE(((SVOP*)cstop)->op_sv)) ||
5020             (type == OP_OR  && !SvTRUE(((SVOP*)cstop)->op_sv)) ||
5021             (type == OP_DOR && !SvOK(((SVOP*)cstop)->op_sv))) {
5022             *firstp = NULL;
5023             if (other->op_type == OP_CONST)
5024                 other->op_private |= OPpCONST_SHORTCIRCUIT;
5025             if (PL_madskills) {
5026                 OP *newop = newUNOP(OP_NULL, 0, other);
5027                 op_getmad(first, newop, '1');
5028                 newop->op_targ = type;  /* set "was" field */
5029                 return newop;
5030             }
5031             op_free(first);
5032             if (other->op_type == OP_LEAVE)
5033                 other = newUNOP(OP_NULL, OPf_SPECIAL, other);
5034             else if (other->op_type == OP_MATCH
5035                   || other->op_type == OP_SUBST
5036                   || other->op_type == OP_TRANSR
5037                   || other->op_type == OP_TRANS)
5038                 /* Mark the op as being unbindable with =~ */
5039                 other->op_flags |= OPf_SPECIAL;
5040             return other;
5041         }
5042         else {
5043             /* check for C<my $x if 0>, or C<my($x,$y) if 0> */
5044             const OP *o2 = other;
5045             if ( ! (o2->op_type == OP_LIST
5046                     && (( o2 = cUNOPx(o2)->op_first))
5047                     && o2->op_type == OP_PUSHMARK
5048                     && (( o2 = o2->op_sibling)) )
5049             )
5050                 o2 = other;
5051             if ((o2->op_type == OP_PADSV || o2->op_type == OP_PADAV
5052                         || o2->op_type == OP_PADHV)
5053                 && o2->op_private & OPpLVAL_INTRO
5054                 && !(o2->op_private & OPpPAD_STATE))
5055             {
5056                 Perl_ck_warner_d(aTHX_ packWARN(WARN_DEPRECATED),
5057                                  "Deprecated use of my() in false conditional");
5058             }
5059
5060             *otherp = NULL;
5061             if (first->op_type == OP_CONST)
5062                 first->op_private |= OPpCONST_SHORTCIRCUIT;
5063             if (PL_madskills) {
5064                 first = newUNOP(OP_NULL, 0, first);
5065                 op_getmad(other, first, '2');
5066                 first->op_targ = type;  /* set "was" field */
5067             }
5068             else
5069                 op_free(other);
5070             return first;
5071         }
5072     }
5073     else if ((first->op_flags & OPf_KIDS) && type != OP_DOR
5074         && ckWARN(WARN_MISC)) /* [#24076] Don't warn for <FH> err FOO. */
5075     {
5076         const OP * const k1 = ((UNOP*)first)->op_first;
5077         const OP * const k2 = k1->op_sibling;
5078         OPCODE warnop = 0;
5079         switch (first->op_type)
5080         {
5081         case OP_NULL:
5082             if (k2 && k2->op_type == OP_READLINE
5083                   && (k2->op_flags & OPf_STACKED)
5084                   && ((k1->op_flags & OPf_WANT) == OPf_WANT_SCALAR))
5085             {
5086                 warnop = k2->op_type;
5087             }
5088             break;
5089
5090         case OP_SASSIGN:
5091             if (k1->op_type == OP_READDIR
5092                   || k1->op_type == OP_GLOB
5093                   || (k1->op_type == OP_NULL && k1->op_targ == OP_GLOB)
5094                   || k1->op_type == OP_EACH)
5095             {
5096                 warnop = ((k1->op_type == OP_NULL)
5097                           ? (OPCODE)k1->op_targ : k1->op_type);
5098             }
5099             break;
5100         }
5101         if (warnop) {
5102             const line_t oldline = CopLINE(PL_curcop);
5103             CopLINE_set(PL_curcop, PL_parser->copline);
5104             Perl_warner(aTHX_ packWARN(WARN_MISC),
5105                  "Value of %s%s can be \"0\"; test with defined()",
5106                  PL_op_desc[warnop],
5107                  ((warnop == OP_READLINE || warnop == OP_GLOB)
5108                   ? " construct" : "() operator"));
5109             CopLINE_set(PL_curcop, oldline);
5110         }
5111     }
5112
5113     if (!other)
5114         return first;
5115
5116     if (type == OP_ANDASSIGN || type == OP_ORASSIGN || type == OP_DORASSIGN)
5117         other->op_private |= OPpASSIGN_BACKWARDS;  /* other is an OP_SASSIGN */
5118
5119     NewOp(1101, logop, 1, LOGOP);
5120
5121     logop->op_type = (OPCODE)type;
5122     logop->op_ppaddr = PL_ppaddr[type];
5123     logop->op_first = first;
5124     logop->op_flags = (U8)(flags | OPf_KIDS);
5125     logop->op_other = LINKLIST(other);
5126     logop->op_private = (U8)(1 | (flags >> 8));
5127
5128     /* establish postfix order */
5129     logop->op_next = LINKLIST(first);
5130     first->op_next = (OP*)logop;
5131     first->op_sibling = other;
5132
5133     CHECKOP(type,logop);
5134
5135     o = newUNOP(prepend_not ? OP_NOT : OP_NULL, 0, (OP*)logop);
5136     other->op_next = o;
5137
5138     return o;
5139 }
5140
5141 /*
5142 =for apidoc Am|OP *|newCONDOP|I32 flags|OP *first|OP *trueop|OP *falseop
5143
5144 Constructs, checks, and returns a conditional-expression (C<cond_expr>)
5145 op.  I<flags> gives the eight bits of C<op_flags>, except that C<OPf_KIDS>
5146 will be set automatically, and, shifted up eight bits, the eight bits of
5147 C<op_private>, except that the bit with value 1 is automatically set.
5148 I<first> supplies the expression selecting between the two branches,
5149 and I<trueop> and I<falseop> supply the branches; they are consumed by
5150 this function and become part of the constructed op tree.
5151
5152 =cut
5153 */
5154
5155 OP *
5156 Perl_newCONDOP(pTHX_ I32 flags, OP *first, OP *trueop, OP *falseop)
5157 {
5158     dVAR;
5159     LOGOP *logop;
5160     OP *start;
5161     OP *o;
5162     OP *cstop;
5163
5164     PERL_ARGS_ASSERT_NEWCONDOP;
5165
5166     if (!falseop)
5167         return newLOGOP(OP_AND, 0, first, trueop);
5168     if (!trueop)
5169         return newLOGOP(OP_OR, 0, first, falseop);
5170
5171     scalarboolean(first);
5172     if ((cstop = search_const(first))) {
5173         /* Left or right arm of the conditional?  */
5174         const bool left = SvTRUE(((SVOP*)cstop)->op_sv);
5175         OP *live = left ? trueop : falseop;
5176         OP *const dead = left ? falseop : trueop;
5177         if (cstop->op_private & OPpCONST_BARE &&
5178             cstop->op_private & OPpCONST_STRICT) {
5179             no_bareword_allowed(cstop);
5180         }
5181         if (PL_madskills) {
5182             /* This is all dead code when PERL_MAD is not defined.  */
5183             live = newUNOP(OP_NULL, 0, live);
5184             op_getmad(first, live, 'C');
5185             op_getmad(dead, live, left ? 'e' : 't');
5186         } else {
5187             op_free(first);
5188             op_free(dead);
5189         }
5190         if (live->op_type == OP_LEAVE)
5191             live = newUNOP(OP_NULL, OPf_SPECIAL, live);
5192         else if (live->op_type == OP_MATCH || live->op_type == OP_SUBST
5193               || live->op_type == OP_TRANS || live->op_type == OP_TRANSR)
5194             /* Mark the op as being unbindable with =~ */
5195             live->op_flags |= OPf_SPECIAL;
5196         return live;
5197     }
5198     NewOp(1101, logop, 1, LOGOP);
5199     logop->op_type = OP_COND_EXPR;
5200     logop->op_ppaddr = PL_ppaddr[OP_COND_EXPR];
5201     logop->op_first = first;
5202     logop->op_flags = (U8)(flags | OPf_KIDS);
5203     logop->op_private = (U8)(1 | (flags >> 8));
5204     logop->op_other = LINKLIST(trueop);
5205     logop->op_next = LINKLIST(falseop);
5206
5207     CHECKOP(OP_COND_EXPR, /* that's logop->op_type */
5208             logop);
5209
5210     /* establish postfix order */
5211     start = LINKLIST(first);
5212     first->op_next = (OP*)logop;
5213
5214     first->op_sibling = trueop;
5215     trueop->op_sibling = falseop;
5216     o = newUNOP(OP_NULL, 0, (OP*)logop);
5217
5218     trueop->op_next = falseop->op_next = o;
5219
5220     o->op_next = start;
5221     return o;
5222 }
5223
5224 /*
5225 =for apidoc Am|OP *|newRANGE|I32 flags|OP *left|OP *right
5226
5227 Constructs and returns a C<range> op, with subordinate C<flip> and
5228 C<flop> ops.  I<flags> gives the eight bits of C<op_flags> for the
5229 C<flip> op and, shifted up eight bits, the eight bits of C<op_private>
5230 for both the C<flip> and C<range> ops, except that the bit with value
5231 1 is automatically set.  I<left> and I<right> supply the expressions
5232 controlling the endpoints of the range; they are consumed by this function
5233 and become part of the constructed op tree.
5234
5235 =cut
5236 */
5237
5238 OP *
5239 Perl_newRANGE(pTHX_ I32 flags, OP *left, OP *right)
5240 {
5241     dVAR;
5242     LOGOP *range;
5243     OP *flip;
5244     OP *flop;
5245     OP *leftstart;
5246     OP *o;
5247
5248     PERL_ARGS_ASSERT_NEWRANGE;
5249
5250     NewOp(1101, range, 1, LOGOP);
5251
5252     range->op_type = OP_RANGE;
5253     range->op_ppaddr = PL_ppaddr[OP_RANGE];
5254     range->op_first = left;
5255     range->op_flags = OPf_KIDS;
5256     leftstart = LINKLIST(left);
5257     range->op_other = LINKLIST(right);
5258     range->op_private = (U8)(1 | (flags >> 8));
5259
5260     left->op_sibling = right;
5261
5262     range->op_next = (OP*)range;
5263     flip = newUNOP(OP_FLIP, flags, (OP*)range);
5264     flop = newUNOP(OP_FLOP, 0, flip);
5265     o = newUNOP(OP_NULL, 0, flop);
5266     LINKLIST(flop);
5267     range->op_next = leftstart;
5268
5269     left->op_next = flip;
5270     right->op_next = flop;
5271
5272     range->op_targ = pad_alloc(OP_RANGE, SVs_PADMY);
5273     sv_upgrade(PAD_SV(range->op_targ), SVt_PVNV);
5274     flip->op_targ = pad_alloc(OP_RANGE, SVs_PADMY);
5275     sv_upgrade(PAD_SV(flip->op_targ), SVt_PVNV);
5276
5277     flip->op_private =  left->op_type == OP_CONST ? OPpFLIP_LINENUM : 0;
5278     flop->op_private = right->op_type == OP_CONST ? OPpFLIP_LINENUM : 0;
5279
5280     flip->op_next = o;
5281     if (!flip->op_private || !flop->op_private)
5282         LINKLIST(o);            /* blow off optimizer unless constant */
5283
5284     return o;
5285 }
5286
5287 /*
5288 =for apidoc Am|OP *|newLOOPOP|I32 flags|I32 debuggable|OP *expr|OP *block
5289
5290 Constructs, checks, and returns an op tree expressing a loop.  This is
5291 only a loop in the control flow through the op tree; it does not have
5292 the heavyweight loop structure that allows exiting the loop by C<last>
5293 and suchlike.  I<flags> gives the eight bits of C<op_flags> for the
5294 top-level op, except that some bits will be set automatically as required.
5295 I<expr> supplies the expression controlling loop iteration, and I<block>
5296 supplies the body of the loop; they are consumed by this function and
5297 become part of the constructed op tree.  I<debuggable> is currently
5298 unused and should always be 1.
5299
5300 =cut
5301 */
5302
5303 OP *
5304 Perl_newLOOPOP(pTHX_ I32 flags, I32 debuggable, OP *expr, OP *block)
5305 {
5306     dVAR;
5307     OP* listop;
5308     OP* o;
5309     const bool once = block && block->op_flags & OPf_SPECIAL &&
5310       (block->op_type == OP_ENTERSUB || block->op_type == OP_NULL);
5311
5312     PERL_UNUSED_ARG(debuggable);
5313
5314     if (expr) {
5315         if (once && expr->op_type == OP_CONST && !SvTRUE(((SVOP*)expr)->op_sv))
5316             return block;       /* do {} while 0 does once */
5317         if (expr->op_type == OP_READLINE
5318             || expr->op_type == OP_READDIR
5319             || expr->op_type == OP_GLOB
5320             || (expr->op_type == OP_NULL && expr->op_targ == OP_GLOB)) {
5321             expr = newUNOP(OP_DEFINED, 0,
5322                 newASSIGNOP(0, newDEFSVOP(), 0, expr) );
5323         } else if (expr->op_flags & OPf_KIDS) {
5324             const OP * const k1 = ((UNOP*)expr)->op_first;
5325             const OP * const k2 = k1 ? k1->op_sibling : NULL;
5326             switch (expr->op_type) {
5327               case OP_NULL:
5328                 if (k2 && (k2->op_type == OP_READLINE || k2->op_type == OP_READDIR)
5329                       && (k2->op_flags & OPf_STACKED)
5330                       && ((k1->op_flags & OPf_WANT) == OPf_WANT_SCALAR))
5331                     expr = newUNOP(OP_DEFINED, 0, expr);
5332                 break;
5333
5334               case OP_SASSIGN:
5335                 if (k1 && (k1->op_type == OP_READDIR
5336                       || k1->op_type == OP_GLOB
5337                       || (k1->op_type == OP_NULL && k1->op_targ == OP_GLOB)
5338                       || k1->op_type == OP_EACH))
5339                     expr = newUNOP(OP_DEFINED, 0, expr);
5340                 break;
5341             }
5342         }
5343     }
5344
5345     /* if block is null, the next op_append_elem() would put UNSTACK, a scalar
5346      * op, in listop. This is wrong. [perl #27024] */
5347     if (!block)
5348         block = newOP(OP_NULL, 0);
5349     listop = op_append_elem(OP_LINESEQ, block, newOP(OP_UNSTACK, 0));
5350     o = new_logop(OP_AND, 0, &expr, &listop);
5351
5352     if (listop)
5353         ((LISTOP*)listop)->op_last->op_next = LINKLIST(o);
5354
5355     if (once && o != listop)
5356         o->op_next = ((LOGOP*)cUNOPo->op_first)->op_other;
5357
5358     if (o == listop)
5359         o = newUNOP(OP_NULL, 0, o);     /* or do {} while 1 loses outer block */
5360
5361     o->op_flags |= flags;
5362     o = op_scope(o);
5363     o->op_flags |= OPf_SPECIAL; /* suppress POPBLOCK curpm restoration*/
5364     return o;
5365 }
5366
5367 /*
5368 =for apidoc Am|OP *|newWHILEOP|I32 flags|I32 debuggable|LOOP *loop|OP *expr|OP *block|OP *cont|I32 has_my
5369
5370 Constructs, checks, and returns an op tree expressing a C<while> loop.
5371 This is a heavyweight loop, with structure that allows exiting the loop
5372 by C<last> and suchlike.
5373
5374 I<loop> is an optional preconstructed C<enterloop> op to use in the
5375 loop; if it is null then a suitable op will be constructed automatically.
5376 I<expr> supplies the loop's controlling expression.  I<block> supplies the
5377 main body of the loop, and I<cont> optionally supplies a C<continue> block
5378 that operates as a second half of the body.  All of these optree inputs
5379 are consumed by this function and become part of the constructed op tree.
5380
5381 I<flags> gives the eight bits of C<op_flags> for the C<leaveloop>
5382 op and, shifted up eight bits, the eight bits of C<op_private> for
5383 the C<leaveloop> op, except that (in both cases) some bits will be set
5384 automatically.  I<debuggable> is currently unused and should always be 1.
5385 I<has_my> can be supplied as true to force the
5386 loop body to be enclosed in its own scope.
5387
5388 =cut
5389 */
5390
5391 OP *
5392 Perl_newWHILEOP(pTHX_ I32 flags, I32 debuggable, LOOP *loop,
5393         OP *expr, OP *block, OP *cont, I32 has_my)
5394 {
5395     dVAR;
5396     OP *redo;
5397     OP *next = NULL;
5398     OP *listop;
5399     OP *o;
5400     U8 loopflags = 0;
5401
5402     PERL_UNUSED_ARG(debuggable);
5403
5404     if (expr) {
5405         if (expr->op_type == OP_READLINE
5406          || expr->op_type == OP_READDIR
5407          || expr->op_type == OP_GLOB
5408                      || (expr->op_type == OP_NULL && expr->op_targ == OP_GLOB)) {
5409             expr = newUNOP(OP_DEFINED, 0,
5410                 newASSIGNOP(0, newDEFSVOP(), 0, expr) );
5411         } else if (expr->op_flags & OPf_KIDS) {
5412             const OP * const k1 = ((UNOP*)expr)->op_first;
5413             const OP * const k2 = (k1) ? k1->op_sibling : NULL;
5414             switch (expr->op_type) {
5415               case OP_NULL:
5416                 if (k2 && (k2->op_type == OP_READLINE || k2->op_type == OP_READDIR)
5417                       && (k2->op_flags & OPf_STACKED)
5418                       && ((k1->op_flags & OPf_WANT) == OPf_WANT_SCALAR))
5419                     expr = newUNOP(OP_DEFINED, 0, expr);
5420                 break;
5421
5422               case OP_SASSIGN:
5423                 if (k1 && (k1->op_type == OP_READDIR
5424                       || k1->op_type == OP_GLOB
5425                       || (k1->op_type == OP_NULL && k1->op_targ == OP_GLOB)
5426                       || k1->op_type == OP_EACH))
5427                     expr = newUNOP(OP_DEFINED, 0, expr);
5428                 break;
5429             }
5430         }
5431     }
5432
5433     if (!block)
5434         block = newOP(OP_NULL, 0);
5435     else if (cont || has_my) {
5436         block = op_scope(block);
5437     }
5438
5439     if (cont) {
5440         next = LINKLIST(cont);
5441     }
5442     if (expr) {
5443         OP * const unstack = newOP(OP_UNSTACK, 0);
5444         if (!next)
5445             next = unstack;
5446         cont = op_append_elem(OP_LINESEQ, cont, unstack);
5447     }
5448
5449     assert(block);
5450     listop = op_append_list(OP_LINESEQ, block, cont);
5451     assert(listop);
5452     redo = LINKLIST(listop);
5453
5454     if (expr) {
5455         scalar(listop);
5456         o = new_logop(OP_AND, 0, &expr, &listop);
5457         if (o == expr && o->op_type == OP_CONST && !SvTRUE(cSVOPo->op_sv)) {
5458             op_free(expr);              /* oops, it's a while (0) */
5459             op_free((OP*)loop);
5460             return NULL;                /* listop already freed by new_logop */
5461         }
5462         if (listop)
5463             ((LISTOP*)listop)->op_last->op_next =
5464                 (o == listop ? redo : LINKLIST(o));
5465     }
5466     else
5467         o = listop;
5468
5469     if (!loop) {
5470         NewOp(1101,loop,1,LOOP);
5471         loop->op_type = OP_ENTERLOOP;
5472         loop->op_ppaddr = PL_ppaddr[OP_ENTERLOOP];
5473         loop->op_private = 0;
5474         loop->op_next = (OP*)loop;
5475     }
5476
5477     o = newBINOP(OP_LEAVELOOP, 0, (OP*)loop, o);
5478
5479     loop->op_redoop = redo;
5480     loop->op_lastop = o;
5481     o->op_private |= loopflags;
5482
5483     if (next)
5484         loop->op_nextop = next;
5485     else
5486         loop->op_nextop = o;
5487
5488     o->op_flags |= flags;
5489     o->op_private |= (flags >> 8);
5490     return o;
5491 }
5492
5493 /*
5494 =for apidoc Am|OP *|newFOROP|I32 flags|OP *sv|OP *expr|OP *block|OP *cont
5495
5496 Constructs, checks, and returns an op tree expressing a C<foreach>
5497 loop (iteration through a list of values).  This is a heavyweight loop,
5498 with structure that allows exiting the loop by C<last> and suchlike.
5499
5500 I<sv> optionally supplies the variable that will be aliased to each
5501 item in turn; if null, it defaults to C<$_> (either lexical or global).
5502 I<expr> supplies the list of values to iterate over.  I<block> supplies
5503 the main body of the loop, and I<cont> optionally supplies a C<continue>
5504 block that operates as a second half of the body.  All of these optree
5505 inputs are consumed by this function and become part of the constructed
5506 op tree.
5507
5508 I<flags> gives the eight bits of C<op_flags> for the C<leaveloop>
5509 op and, shifted up eight bits, the eight bits of C<op_private> for
5510 the C<leaveloop> op, except that (in both cases) some bits will be set
5511 automatically.
5512
5513 =cut
5514 */
5515
5516 OP *
5517 Perl_newFOROP(pTHX_ I32 flags, OP *sv, OP *expr, OP *block, OP *cont)
5518 {
5519     dVAR;
5520     LOOP *loop;
5521     OP *wop;
5522     PADOFFSET padoff = 0;
5523     I32 iterflags = 0;
5524     I32 iterpflags = 0;
5525     OP *madsv = NULL;
5526
5527     PERL_ARGS_ASSERT_NEWFOROP;
5528
5529     if (sv) {
5530         if (sv->op_type == OP_RV2SV) {  /* symbol table variable */
5531             iterpflags = sv->op_private & OPpOUR_INTRO; /* for our $x () */
5532             sv->op_type = OP_RV2GV;
5533             sv->op_ppaddr = PL_ppaddr[OP_RV2GV];
5534
5535             /* The op_type check is needed to prevent a possible segfault
5536              * if the loop variable is undeclared and 'strict vars' is in
5537              * effect. This is illegal but is nonetheless parsed, so we
5538              * may reach this point with an OP_CONST where we're expecting
5539              * an OP_GV.
5540              */
5541             if (cUNOPx(sv)->op_first->op_type == OP_GV
5542              && cGVOPx_gv(cUNOPx(sv)->op_first) == PL_defgv)
5543                 iterpflags |= OPpITER_DEF;
5544         }
5545         else if (sv->op_type == OP_PADSV) { /* private variable */
5546             iterpflags = sv->op_private & OPpLVAL_INTRO; /* for my $x () */
5547             padoff = sv->op_targ;
5548             if (PL_madskills)
5549                 madsv = sv;
5550             else {
5551                 sv->op_targ = 0;
5552                 op_free(sv);
5553             }
5554             sv = NULL;
5555         }
5556         else
5557             Perl_croak(aTHX_ "Can't use %s for loop variable", PL_op_desc[sv->op_type]);
5558         if (padoff) {
5559             SV *const namesv = PAD_COMPNAME_SV(padoff);
5560             STRLEN len;
5561             const char *const name = SvPV_const(namesv, len);
5562
5563             if (len == 2 && name[0] == '$' && name[1] == '_')
5564                 iterpflags |= OPpITER_DEF;
5565         }
5566     }
5567     else {
5568         const PADOFFSET offset = Perl_pad_findmy(aTHX_ STR_WITH_LEN("$_"), 0);
5569         if (offset == NOT_IN_PAD || PAD_COMPNAME_FLAGS_isOUR(offset)) {
5570             sv = newGVOP(OP_GV, 0, PL_defgv);
5571         }
5572         else {
5573             padoff = offset;
5574         }
5575         iterpflags |= OPpITER_DEF;
5576     }
5577     if (expr->op_type == OP_RV2AV || expr->op_type == OP_PADAV) {
5578         expr = op_lvalue(force_list(scalar(ref(expr, OP_ITER))), OP_GREPSTART);
5579         iterflags |= OPf_STACKED;
5580     }
5581     else if (expr->op_type == OP_NULL &&
5582              (expr->op_flags & OPf_KIDS) &&
5583              ((BINOP*)expr)->op_first->op_type == OP_FLOP)
5584     {
5585         /* Basically turn for($x..$y) into the same as for($x,$y), but we
5586          * set the STACKED flag to indicate that these values are to be
5587          * treated as min/max values by 'pp_iterinit'.
5588          */
5589         const UNOP* const flip = (UNOP*)((UNOP*)((BINOP*)expr)->op_first)->op_first;
5590         LOGOP* const range = (LOGOP*) flip->op_first;
5591         OP* const left  = range->op_first;
5592         OP* const right = left->op_sibling;
5593         LISTOP* listop;
5594
5595         range->op_flags &= ~OPf_KIDS;
5596         range->op_first = NULL;
5597
5598         listop = (LISTOP*)newLISTOP(OP_LIST, 0, left, right);
5599         listop->op_first->op_next = range->op_next;
5600         left->op_next = range->op_other;
5601         right->op_next = (OP*)listop;
5602         listop->op_next = listop->op_first;
5603
5604 #ifdef PERL_MAD
5605         op_getmad(expr,(OP*)listop,'O');
5606 #else
5607         op_free(expr);
5608 #endif
5609         expr = (OP*)(listop);
5610         op_null(expr);
5611         iterflags |= OPf_STACKED;
5612     }
5613     else {
5614         expr = op_lvalue(force_list(expr), OP_GREPSTART);
5615     }
5616
5617     loop = (LOOP*)list(convert(OP_ENTERITER, iterflags,
5618                                op_append_elem(OP_LIST, expr, scalar(sv))));
5619     assert(!loop->op_next);
5620     /* for my  $x () sets OPpLVAL_INTRO;
5621      * for our $x () sets OPpOUR_INTRO */
5622     loop->op_private = (U8)iterpflags;
5623 #ifdef PL_OP_SLAB_ALLOC
5624     {
5625         LOOP *tmp;
5626         NewOp(1234,tmp,1,LOOP);
5627         Copy(loop,tmp,1,LISTOP);
5628         S_op_destroy(aTHX_ (OP*)loop);
5629         loop = tmp;
5630     }
5631 #else
5632     loop = (LOOP*)PerlMemShared_realloc(loop, sizeof(LOOP));
5633 #endif
5634     loop->op_targ = padoff;
5635     wop = newWHILEOP(flags, 1, loop, newOP(OP_ITER, 0), block, cont, 0);
5636     if (madsv)
5637         op_getmad(madsv, (OP*)loop, 'v');
5638     return wop;
5639 }
5640
5641 /*
5642 =for apidoc Am|OP *|newLOOPEX|I32 type|OP *label
5643
5644 Constructs, checks, and returns a loop-exiting op (such as C<goto>
5645 or C<last>).  I<type> is the opcode.  I<label> supplies the parameter
5646 determining the target of the op; it is consumed by this function and
5647 become part of the constructed op tree.
5648
5649 =cut
5650 */
5651
5652 OP*
5653 Perl_newLOOPEX(pTHX_ I32 type, OP *label)
5654 {
5655     dVAR;
5656     OP *o;
5657
5658     PERL_ARGS_ASSERT_NEWLOOPEX;
5659
5660     assert((PL_opargs[type] & OA_CLASS_MASK) == OA_LOOPEXOP);
5661
5662     if (type != OP_GOTO || label->op_type == OP_CONST) {
5663         /* "last()" means "last" */
5664         if (label->op_type == OP_STUB && (label->op_flags & OPf_PARENS))
5665             o = newOP(type, OPf_SPECIAL);
5666         else {
5667             o = newPVOP(type, 0, savesharedpv(label->op_type == OP_CONST
5668                                         ? SvPV_nolen_const(((SVOP*)label)->op_sv)
5669                                         : ""));
5670         }
5671 #ifdef PERL_MAD
5672         op_getmad(label,o,'L');
5673 #else
5674         op_free(label);
5675 #endif
5676     }
5677     else {
5678         /* Check whether it's going to be a goto &function */
5679         if (label->op_type == OP_ENTERSUB
5680                 && !(label->op_flags & OPf_STACKED))
5681             label = newUNOP(OP_REFGEN, 0, op_lvalue(label, OP_REFGEN));
5682         o = newUNOP(type, OPf_STACKED, label);
5683     }
5684     PL_hints |= HINT_BLOCK_SCOPE;
5685     return o;
5686 }
5687
5688 /* if the condition is a literal array or hash
5689    (or @{ ... } etc), make a reference to it.
5690  */
5691 STATIC OP *
5692 S_ref_array_or_hash(pTHX_ OP *cond)
5693 {
5694     if (cond
5695     && (cond->op_type == OP_RV2AV
5696     ||  cond->op_type == OP_PADAV
5697     ||  cond->op_type == OP_RV2HV
5698     ||  cond->op_type == OP_PADHV))
5699
5700         return newUNOP(OP_REFGEN, 0, op_lvalue(cond, OP_REFGEN));
5701
5702     else if(cond
5703     && (cond->op_type == OP_ASLICE
5704     ||  cond->op_type == OP_HSLICE)) {
5705
5706         /* anonlist now needs a list from this op, was previously used in
5707          * scalar context */
5708         cond->op_flags |= ~(OPf_WANT_SCALAR | OPf_REF);
5709         cond->op_flags |= OPf_WANT_LIST;
5710
5711         return newANONLIST(op_lvalue(cond, OP_ANONLIST));
5712     }
5713
5714     else
5715         return cond;
5716 }
5717
5718 /* These construct the optree fragments representing given()
5719    and when() blocks.
5720
5721    entergiven and enterwhen are LOGOPs; the op_other pointer
5722    points up to the associated leave op. We need this so we
5723    can put it in the context and make break/continue work.
5724    (Also, of course, pp_enterwhen will jump straight to
5725    op_other if the match fails.)
5726  */
5727
5728 STATIC OP *
5729 S_newGIVWHENOP(pTHX_ OP *cond, OP *block,
5730                    I32 enter_opcode, I32 leave_opcode,
5731                    PADOFFSET entertarg)
5732 {
5733     dVAR;
5734     LOGOP *enterop;
5735     OP *o;
5736
5737     PERL_ARGS_ASSERT_NEWGIVWHENOP;
5738
5739     NewOp(1101, enterop, 1, LOGOP);
5740     enterop->op_type = (Optype)enter_opcode;
5741     enterop->op_ppaddr = PL_ppaddr[enter_opcode];
5742     enterop->op_flags =  (U8) OPf_KIDS;
5743     enterop->op_targ = ((entertarg == NOT_IN_PAD) ? 0 : entertarg);
5744     enterop->op_private = 0;
5745
5746     o = newUNOP(leave_opcode, 0, (OP *) enterop);
5747
5748     if (cond) {
5749         enterop->op_first = scalar(cond);
5750         cond->op_sibling = block;
5751
5752         o->op_next = LINKLIST(cond);
5753         cond->op_next = (OP *) enterop;
5754     }
5755     else {
5756         /* This is a default {} block */
5757         enterop->op_first = block;
5758         enterop->op_flags |= OPf_SPECIAL;
5759
5760         o->op_next = (OP *) enterop;
5761     }
5762
5763     CHECKOP(enter_opcode, enterop); /* Currently does nothing, since
5764                                        entergiven and enterwhen both
5765                                        use ck_null() */
5766
5767     enterop->op_next = LINKLIST(block);
5768     block->op_next = enterop->op_other = o;
5769
5770     return o;
5771 }
5772
5773 /* Does this look like a boolean operation? For these purposes
5774    a boolean operation is:
5775      - a subroutine call [*]
5776      - a logical connective
5777      - a comparison operator
5778      - a filetest operator, with the exception of -s -M -A -C
5779      - defined(), exists() or eof()
5780      - /$re/ or $foo =~ /$re/
5781    
5782    [*] possibly surprising
5783  */
5784 STATIC bool
5785 S_looks_like_bool(pTHX_ const OP *o)
5786 {
5787     dVAR;
5788
5789     PERL_ARGS_ASSERT_LOOKS_LIKE_BOOL;
5790
5791     switch(o->op_type) {
5792         case OP_OR:
5793         case OP_DOR:
5794             return looks_like_bool(cLOGOPo->op_first);
5795
5796         case OP_AND:
5797             return (
5798                 looks_like_bool(cLOGOPo->op_first)
5799              && looks_like_bool(cLOGOPo->op_first->op_sibling));
5800
5801         case OP_NULL:
5802         case OP_SCALAR:
5803             return (
5804                 o->op_flags & OPf_KIDS
5805             && looks_like_bool(cUNOPo->op_first));
5806
5807         case OP_ENTERSUB:
5808
5809         case OP_NOT:    case OP_XOR:
5810
5811         case OP_EQ:     case OP_NE:     case OP_LT:
5812         case OP_GT:     case OP_LE:     case OP_GE:
5813
5814         case OP_I_EQ:   case OP_I_NE:   case OP_I_LT:
5815         case OP_I_GT:   case OP_I_LE:   case OP_I_GE:
5816
5817         case OP_SEQ:    case OP_SNE:    case OP_SLT:
5818         case OP_SGT:    case OP_SLE:    case OP_SGE:
5819         
5820         case OP_SMARTMATCH:
5821         
5822         case OP_FTRREAD:  case OP_FTRWRITE: case OP_FTREXEC:
5823         case OP_FTEREAD:  case OP_FTEWRITE: case OP_FTEEXEC:
5824         case OP_FTIS:     case OP_FTEOWNED: case OP_FTROWNED:
5825         case OP_FTZERO:   case OP_FTSOCK:   case OP_FTCHR:
5826         case OP_FTBLK:    case OP_FTFILE:   case OP_FTDIR:
5827         case OP_FTPIPE:   case OP_FTLINK:   case OP_FTSUID:
5828         case OP_FTSGID:   case OP_FTSVTX:   case OP_FTTTY:
5829         case OP_FTTEXT:   case OP_FTBINARY:
5830         
5831         case OP_DEFINED: case OP_EXISTS:
5832         case OP_MATCH:   case OP_EOF:
5833
5834         case OP_FLOP:
5835
5836             return TRUE;
5837         
5838         case OP_CONST:
5839             /* Detect comparisons that have been optimized away */
5840             if (cSVOPo->op_sv == &PL_sv_yes
5841             ||  cSVOPo->op_sv == &PL_sv_no)
5842             
5843                 return TRUE;
5844             else
5845                 return FALSE;
5846
5847         /* FALL THROUGH */
5848         default:
5849             return FALSE;
5850     }
5851 }
5852
5853 /*
5854 =for apidoc Am|OP *|newGIVENOP|OP *cond|OP *block|PADOFFSET defsv_off
5855
5856 Constructs, checks, and returns an op tree expressing a C<given> block.
5857 I<cond> supplies the expression that will be locally assigned to a lexical
5858 variable, and I<block> supplies the body of the C<given> construct; they
5859 are consumed by this function and become part of the constructed op tree.
5860 I<defsv_off> is the pad offset of the scalar lexical variable that will
5861 be affected.
5862
5863 =cut
5864 */
5865
5866 OP *
5867 Perl_newGIVENOP(pTHX_ OP *cond, OP *block, PADOFFSET defsv_off)
5868 {
5869     dVAR;
5870     PERL_ARGS_ASSERT_NEWGIVENOP;
5871     return newGIVWHENOP(
5872         ref_array_or_hash(cond),
5873         block,
5874         OP_ENTERGIVEN, OP_LEAVEGIVEN,
5875         defsv_off);
5876 }
5877
5878 /*
5879 =for apidoc Am|OP *|newWHENOP|OP *cond|OP *block
5880
5881 Constructs, checks, and returns an op tree expressing a C<when> block.
5882 I<cond> supplies the test expression, and I<block> supplies the block
5883 that will be executed if the test evaluates to true; they are consumed
5884 by this function and become part of the constructed op tree.  I<cond>
5885 will be interpreted DWIMically, often as a comparison against C<$_>,
5886 and may be null to generate a C<default> block.
5887
5888 =cut
5889 */
5890
5891 OP *
5892 Perl_newWHENOP(pTHX_ OP *cond, OP *block)
5893 {
5894     const bool cond_llb = (!cond || looks_like_bool(cond));
5895     OP *cond_op;
5896
5897     PERL_ARGS_ASSERT_NEWWHENOP;
5898
5899     if (cond_llb)
5900         cond_op = cond;
5901     else {
5902         cond_op = newBINOP(OP_SMARTMATCH, OPf_SPECIAL,
5903                 newDEFSVOP(),
5904                 scalar(ref_array_or_hash(cond)));
5905     }
5906     
5907     return newGIVWHENOP(
5908         cond_op,
5909         op_append_elem(block->op_type, block, newOP(OP_BREAK, OPf_SPECIAL)),
5910         OP_ENTERWHEN, OP_LEAVEWHEN, 0);
5911 }
5912
5913 void
5914 Perl_cv_ckproto_len(pTHX_ const CV *cv, const GV *gv, const char *p,
5915                     const STRLEN len)
5916 {
5917     PERL_ARGS_ASSERT_CV_CKPROTO_LEN;
5918
5919     /* Can't just use a strcmp on the prototype, as CONSTSUBs "cheat" by
5920        relying on SvCUR, and doubling up the buffer to hold CvFILE().  */
5921     if (((!p != !SvPOK(cv)) /* One has prototype, one has not.  */
5922          || (p && (len != SvCUR(cv) /* Not the same length.  */
5923                    || memNE(p, SvPVX_const(cv), len))))
5924          && ckWARN_d(WARN_PROTOTYPE)) {
5925         SV* const msg = sv_newmortal();
5926         SV* name = NULL;
5927
5928         if (gv)
5929             gv_efullname3(name = sv_newmortal(), gv, NULL);
5930         sv_setpvs(msg, "Prototype mismatch:");
5931         if (name)
5932             Perl_sv_catpvf(aTHX_ msg, " sub %"SVf, SVfARG(name));
5933         if (SvPOK(cv))
5934             Perl_sv_catpvf(aTHX_ msg, " (%"SVf")", SVfARG(cv));
5935         else
5936             sv_catpvs(msg, ": none");
5937         sv_catpvs(msg, " vs ");
5938         if (p)
5939             Perl_sv_catpvf(aTHX_ msg, "(%.*s)", (int) len, p);
5940         else
5941             sv_catpvs(msg, "none");
5942         Perl_warner(aTHX_ packWARN(WARN_PROTOTYPE), "%"SVf, SVfARG(msg));
5943     }
5944 }
5945
5946 static void const_sv_xsub(pTHX_ CV* cv);
5947
5948 /*
5949
5950 =head1 Optree Manipulation Functions
5951
5952 =for apidoc cv_const_sv
5953
5954 If C<cv> is a constant sub eligible for inlining. returns the constant
5955 value returned by the sub.  Otherwise, returns NULL.
5956
5957 Constant subs can be created with C<newCONSTSUB> or as described in
5958 L<perlsub/"Constant Functions">.
5959
5960 =cut
5961 */
5962 SV *
5963 Perl_cv_const_sv(pTHX_ const CV *const cv)
5964 {
5965     PERL_UNUSED_CONTEXT;
5966     if (!cv)
5967         return NULL;
5968     if (!(SvTYPE(cv) == SVt_PVCV || SvTYPE(cv) == SVt_PVFM))
5969         return NULL;
5970     return CvCONST(cv) ? MUTABLE_SV(CvXSUBANY(cv).any_ptr) : NULL;
5971 }
5972
5973 /* op_const_sv:  examine an optree to determine whether it's in-lineable.
5974  * Can be called in 3 ways:
5975  *
5976  * !cv
5977  *      look for a single OP_CONST with attached value: return the value
5978  *
5979  * cv && CvCLONE(cv) && !CvCONST(cv)
5980  *
5981  *      examine the clone prototype, and if contains only a single
5982  *      OP_CONST referencing a pad const, or a single PADSV referencing
5983  *      an outer lexical, return a non-zero value to indicate the CV is
5984  *      a candidate for "constizing" at clone time
5985  *
5986  * cv && CvCONST(cv)
5987  *
5988  *      We have just cloned an anon prototype that was marked as a const
5989  *      candidiate. Try to grab the current value, and in the case of
5990  *      PADSV, ignore it if it has multiple references. Return the value.
5991  */
5992
5993 SV *
5994 Perl_op_const_sv(pTHX_ const OP *o, CV *cv)
5995 {
5996     dVAR;
5997     SV *sv = NULL;
5998
5999     if (PL_madskills)
6000         return NULL;
6001
6002     if (!o)
6003         return NULL;
6004
6005     if (o->op_type == OP_LINESEQ && cLISTOPo->op_first)
6006         o = cLISTOPo->op_first->op_sibling;
6007
6008     for (; o; o = o->op_next) {
6009         const OPCODE type = o->op_type;
6010
6011         if (sv && o->op_next == o)
6012             return sv;
6013         if (o->op_next != o) {
6014             if (type == OP_NEXTSTATE || type == OP_NULL || type == OP_PUSHMARK)
6015                 continue;
6016             if (type == OP_DBSTATE)
6017                 continue;
6018         }
6019         if (type == OP_LEAVESUB || type == OP_RETURN)
6020             break;
6021         if (sv)
6022             return NULL;
6023         if (type == OP_CONST && cSVOPo->op_sv)
6024             sv = cSVOPo->op_sv;
6025         else if (cv && type == OP_CONST) {
6026             sv = PAD_BASE_SV(CvPADLIST(cv), o->op_targ);
6027             if (!sv)
6028                 return NULL;
6029         }
6030         else if (cv && type == OP_PADSV) {
6031             if (CvCONST(cv)) { /* newly cloned anon */
6032                 sv = PAD_BASE_SV(CvPADLIST(cv), o->op_targ);
6033                 /* the candidate should have 1 ref from this pad and 1 ref
6034                  * from the parent */
6035                 if (!sv || SvREFCNT(sv) != 2)
6036                     return NULL;
6037                 sv = newSVsv(sv);
6038                 SvREADONLY_on(sv);
6039                 return sv;
6040             }
6041             else {
6042                 if (PAD_COMPNAME_FLAGS(o->op_targ) & SVf_FAKE)
6043                     sv = &PL_sv_undef; /* an arbitrary non-null value */
6044             }
6045         }
6046         else {
6047             return NULL;
6048         }
6049     }
6050     return sv;
6051 }
6052
6053 #ifdef PERL_MAD
6054 OP *
6055 #else
6056 void
6057 #endif
6058 Perl_newMYSUB(pTHX_ I32 floor, OP *o, OP *proto, OP *attrs, OP *block)
6059 {
6060 #if 0
6061     /* This would be the return value, but the return cannot be reached.  */
6062     OP* pegop = newOP(OP_NULL, 0);
6063 #endif
6064
6065     PERL_UNUSED_ARG(floor);
6066
6067     if (o)
6068         SAVEFREEOP(o);
6069     if (proto)
6070         SAVEFREEOP(proto);
6071     if (attrs)
6072         SAVEFREEOP(attrs);
6073     if (block)
6074         SAVEFREEOP(block);
6075     Perl_croak(aTHX_ "\"my sub\" not yet implemented");
6076 #ifdef PERL_MAD
6077     NORETURN_FUNCTION_END;
6078 #endif
6079 }
6080
6081 CV *
6082 Perl_newATTRSUB(pTHX_ I32 floor, OP *o, OP *proto, OP *attrs, OP *block)
6083 {
6084     dVAR;
6085     GV *gv;
6086     const char *ps;
6087     STRLEN ps_len = 0; /* init it to avoid false uninit warning from icc */
6088     register CV *cv = NULL;
6089     SV *const_sv;
6090     /* If the subroutine has no body, no attributes, and no builtin attributes
6091        then it's just a sub declaration, and we may be able to get away with
6092        storing with a placeholder scalar in the symbol table, rather than a
6093        full GV and CV.  If anything is present then it will take a full CV to
6094        store it.  */
6095     const I32 gv_fetch_flags
6096         = (block || attrs || (CvFLAGS(PL_compcv) & CVf_BUILTIN_ATTRS)
6097            || PL_madskills)
6098         ? GV_ADDMULTI : GV_ADDMULTI | GV_NOINIT;
6099     const char * const name = o ? SvPV_nolen_const(cSVOPo->op_sv) : NULL;
6100     bool has_name;
6101
6102     if (proto) {
6103         assert(proto->op_type == OP_CONST);
6104         ps = SvPV_const(((SVOP*)proto)->op_sv, ps_len);
6105     }
6106     else
6107         ps = NULL;
6108
6109     if (name) {
6110         gv = gv_fetchsv(cSVOPo->op_sv, gv_fetch_flags, SVt_PVCV);
6111         has_name = TRUE;
6112     } else if (PERLDB_NAMEANON && CopLINE(PL_curcop)) {
6113         SV * const sv = sv_newmortal();
6114         Perl_sv_setpvf(aTHX_ sv, "%s[%s:%"IVdf"]",
6115                        PL_curstash ? "__ANON__" : "__ANON__::__ANON__",
6116                        CopFILE(PL_curcop), (IV)CopLINE(PL_curcop));
6117         gv = gv_fetchsv(sv, gv_fetch_flags, SVt_PVCV);
6118         has_name = TRUE;
6119     } else if (PL_curstash) {
6120         gv = gv_fetchpvs("__ANON__", gv_fetch_flags, SVt_PVCV);
6121         has_name = FALSE;
6122     } else {
6123         gv = gv_fetchpvs("__ANON__::__ANON__", gv_fetch_flags, SVt_PVCV);
6124         has_name = FALSE;
6125     }
6126
6127     if (!PL_madskills) {
6128         if (o)
6129             SAVEFREEOP(o);
6130         if (proto)
6131             SAVEFREEOP(proto);
6132         if (attrs)
6133             SAVEFREEOP(attrs);
6134     }
6135
6136     if (SvTYPE(gv) != SVt_PVGV) {       /* Maybe prototype now, and had at
6137                                            maximum a prototype before. */
6138         if (SvTYPE(gv) > SVt_NULL) {
6139             if (!SvPOK((const SV *)gv)
6140                 && !(SvIOK((const SV *)gv) && SvIVX((const SV *)gv) == -1))
6141             {
6142                 Perl_ck_warner_d(aTHX_ packWARN(WARN_PROTOTYPE), "Runaway prototype");
6143             }
6144             cv_ckproto_len((const CV *)gv, NULL, ps, ps_len);
6145         }
6146         if (ps)
6147             sv_setpvn(MUTABLE_SV(gv), ps, ps_len);
6148         else
6149             sv_setiv(MUTABLE_SV(gv), -1);
6150
6151         SvREFCNT_dec(PL_compcv);
6152         cv = PL_compcv = NULL;
6153         goto done;
6154     }
6155
6156     cv = (!name || GvCVGEN(gv)) ? NULL : GvCV(gv);
6157
6158     if (!block || !ps || *ps || attrs
6159         || (CvFLAGS(PL_compcv) & CVf_BUILTIN_ATTRS)
6160 #ifdef PERL_MAD
6161         || block->op_type == OP_NULL
6162 #endif
6163         )
6164         const_sv = NULL;
6165     else
6166         const_sv = op_const_sv(block, NULL);
6167
6168     if (cv) {
6169         const bool exists = CvROOT(cv) || CvXSUB(cv);
6170
6171         /* if the subroutine doesn't exist and wasn't pre-declared
6172          * with a prototype, assume it will be AUTOLOADed,
6173          * skipping the prototype check
6174          */
6175         if (exists || SvPOK(cv))
6176             cv_ckproto_len(cv, gv, ps, ps_len);
6177         /* already defined (or promised)? */
6178         if (exists || GvASSUMECV(gv)) {
6179             if ((!block
6180 #ifdef PERL_MAD
6181                  || block->op_type == OP_NULL
6182 #endif
6183                  )&& !attrs) {
6184                 if (CvFLAGS(PL_compcv)) {
6185                     /* might have had built-in attrs applied */
6186                     if (CvLVALUE(PL_compcv) && ! CvLVALUE(cv) && ckWARN(WARN_MISC))
6187                         Perl_warner(aTHX_ packWARN(WARN_MISC), "lvalue attribute ignored after the subroutine has been defined");
6188                     CvFLAGS(cv) |= (CvFLAGS(PL_compcv) & CVf_BUILTIN_ATTRS & ~CVf_LVALUE);
6189                 }
6190                 /* just a "sub foo;" when &foo is already defined */
6191                 SAVEFREESV(PL_compcv);
6192                 goto done;
6193             }
6194             if (block
6195 #ifdef PERL_MAD
6196                 && block->op_type != OP_NULL
6197 #endif
6198                 ) {
6199                 if (ckWARN(WARN_REDEFINE)
6200                     || (CvCONST(cv)
6201                         && (!const_sv || sv_cmp(cv_const_sv(cv), const_sv))))
6202                 {
6203                     const line_t oldline = CopLINE(PL_curcop);
6204                     if (PL_parser && PL_parser->copline != NOLINE)
6205                         CopLINE_set(PL_curcop, PL_parser->copline);
6206                     Perl_warner(aTHX_ packWARN(WARN_REDEFINE),
6207                         CvCONST(cv) ? "Constant subroutine %s redefined"
6208                                     : "Subroutine %s redefined", name);
6209                     CopLINE_set(PL_curcop, oldline);
6210                 }
6211 #ifdef PERL_MAD
6212                 if (!PL_minus_c)        /* keep old one around for madskills */
6213 #endif
6214                     {
6215                         /* (PL_madskills unset in used file.) */
6216                         SvREFCNT_dec(cv);
6217                     }
6218                 cv = NULL;
6219             }
6220         }
6221     }
6222     if (const_sv) {
6223         SvREFCNT_inc_simple_void_NN(const_sv);
6224         if (cv) {
6225             assert(!CvROOT(cv) && !CvCONST(cv));
6226             sv_setpvs(MUTABLE_SV(cv), "");  /* prototype is "" */
6227             CvXSUBANY(cv).any_ptr = const_sv;
6228             CvXSUB(cv) = const_sv_xsub;
6229             CvCONST_on(cv);
6230             CvISXSUB_on(cv);
6231         }
6232         else {
6233             GvCV(gv) = NULL;
6234             cv = newCONSTSUB(NULL, name, const_sv);
6235         }
6236         mro_method_changed_in( /* sub Foo::Bar () { 123 } */
6237             (CvGV(cv) && GvSTASH(CvGV(cv)))
6238                 ? GvSTASH(CvGV(cv))
6239                 : CvSTASH(cv)
6240                     ? CvSTASH(cv)
6241                     : PL_curstash
6242         );
6243         if (PL_madskills)
6244             goto install_block;
6245         op_free(block);
6246         SvREFCNT_dec(PL_compcv);
6247         PL_compcv = NULL;
6248         goto done;
6249     }
6250     if (cv) {                           /* must reuse cv if autoloaded */
6251         /* transfer PL_compcv to cv */
6252         if (block
6253 #ifdef PERL_MAD
6254                   && block->op_type != OP_NULL
6255 #endif
6256         ) {
6257             cv_flags_t existing_builtin_attrs = CvFLAGS(cv) & CVf_BUILTIN_ATTRS;
6258             AV *const temp_av = CvPADLIST(cv);
6259             CV *const temp_cv = CvOUTSIDE(cv);
6260
6261             assert(!CvWEAKOUTSIDE(cv));
6262             assert(!CvCVGV_RC(cv));
6263             assert(CvGV(cv) == gv);
6264
6265             SvPOK_off(cv);
6266             CvFLAGS(cv) = CvFLAGS(PL_compcv) | existing_builtin_attrs;
6267             CvOUTSIDE(cv) = CvOUTSIDE(PL_compcv);
6268             CvOUTSIDE_SEQ(cv) = CvOUTSIDE_SEQ(PL_compcv);
6269             CvPADLIST(cv) = CvPADLIST(PL_compcv);
6270             CvOUTSIDE(PL_compcv) = temp_cv;
6271             CvPADLIST(PL_compcv) = temp_av;
6272
6273 #ifdef USE_ITHREADS
6274             if (CvFILE(cv) && !CvISXSUB(cv)) {
6275                 /* for XSUBs CvFILE point directly to static memory; __FILE__ */
6276                 Safefree(CvFILE(cv));
6277     }
6278 #endif
6279             CvFILE_set_from_cop(cv, PL_curcop);
6280             CvSTASH_set(cv, PL_curstash);
6281
6282             /* inner references to PL_compcv must be fixed up ... */
6283             pad_fixup_inner_anons(CvPADLIST(cv), PL_compcv, cv);
6284             if (PERLDB_INTER)/* Advice debugger on the new sub. */
6285               ++PL_sub_generation;
6286         }
6287         else {
6288             /* Might have had built-in attributes applied -- propagate them. */
6289             CvFLAGS(cv) |= (CvFLAGS(PL_compcv) & CVf_BUILTIN_ATTRS);
6290         }
6291         /* ... before we throw it away */
6292         SvREFCNT_dec(PL_compcv);
6293         PL_compcv = cv;
6294     }
6295     else {
6296         cv = PL_compcv;
6297         if (name) {
6298             GvCV(gv) = cv;
6299             if (PL_madskills) {
6300                 if (strEQ(name, "import")) {
6301                     PL_formfeed = MUTABLE_SV(cv);
6302                     /* diag_listed_as: SKIPME */
6303                     Perl_warner(aTHX_ packWARN(WARN_VOID), "0x%"UVxf"\n", PTR2UV(cv));
6304                 }
6305             }
6306             GvCVGEN(gv) = 0;
6307             mro_method_changed_in(GvSTASH(gv)); /* sub Foo::bar { (shift)+1 } */
6308         }
6309     }
6310     if (!CvGV(cv)) {
6311         CvGV_set(cv, gv);
6312         CvFILE_set_from_cop(cv, PL_curcop);
6313         CvSTASH_set(cv, PL_curstash);
6314     }
6315     if (attrs) {
6316         /* Need to do a C<use attributes $stash_of_cv,\&cv,@attrs>. */
6317         HV *stash = name && GvSTASH(CvGV(cv)) ? GvSTASH(CvGV(cv)) : PL_curstash;
6318         apply_attrs(stash, MUTABLE_SV(cv), attrs, FALSE);
6319     }
6320
6321     if (ps)
6322         sv_setpvn(MUTABLE_SV(cv), ps, ps_len);
6323
6324     if (PL_parser && PL_parser->error_count) {
6325         op_free(block);
6326         block = NULL;
6327         if (name) {
6328             const char *s = strrchr(name, ':');
6329             s = s ? s+1 : name;
6330             if (strEQ(s, "BEGIN")) {
6331                 const char not_safe[] =
6332                     "BEGIN not safe after errors--compilation aborted";
6333                 if (PL_in_eval & EVAL_KEEPERR)
6334                     Perl_croak(aTHX_ not_safe);
6335                 else {
6336                     /* force display of errors found but not reported */
6337                     sv_catpv(ERRSV, not_safe);
6338                     Perl_croak(aTHX_ "%"SVf, SVfARG(ERRSV));
6339                 }
6340             }
6341         }
6342     }
6343  install_block:
6344     if (!block)
6345         goto done;
6346
6347     /* If we assign an optree to a PVCV, then we've defined a subroutine that
6348        the debugger could be able to set a breakpoint in, so signal to
6349        pp_entereval that it should not throw away any saved lines at scope
6350        exit.  */
6351        
6352     PL_breakable_sub_gen++;
6353     if (CvLVALUE(cv)) {
6354         CvROOT(cv) = newUNOP(OP_LEAVESUBLV, 0,
6355                              op_lvalue(scalarseq(block), OP_LEAVESUBLV));
6356         block->op_attached = 1;
6357     }
6358     else {
6359         /* This makes sub {}; work as expected.  */
6360         if (block->op_type == OP_STUB) {
6361             OP* const newblock = newSTATEOP(0, NULL, 0);
6362 #ifdef PERL_MAD
6363             op_getmad(block,newblock,'B');
6364 #else
6365             op_free(block);
6366 #endif
6367             block = newblock;
6368         }
6369         else
6370             block->op_attached = 1;
6371         CvROOT(cv) = newUNOP(OP_LEAVESUB, 0, scalarseq(block));
6372     }
6373     CvROOT(cv)->op_private |= OPpREFCOUNTED;
6374     OpREFCNT_set(CvROOT(cv), 1);
6375     CvSTART(cv) = LINKLIST(CvROOT(cv));
6376     CvROOT(cv)->op_next = 0;
6377     CALL_PEEP(CvSTART(cv));
6378
6379     /* now that optimizer has done its work, adjust pad values */
6380
6381     pad_tidy(CvCLONE(cv) ? padtidy_SUBCLONE : padtidy_SUB);
6382
6383     if (CvCLONE(cv)) {
6384         assert(!CvCONST(cv));
6385         if (ps && !*ps && op_const_sv(block, cv))
6386             CvCONST_on(cv);
6387     }
6388
6389     if (has_name) {
6390         if (PERLDB_SUBLINE && PL_curstash != PL_debstash) {
6391             SV * const tmpstr = sv_newmortal();
6392             GV * const db_postponed = gv_fetchpvs("DB::postponed",
6393                                                   GV_ADDMULTI, SVt_PVHV);
6394             HV *hv;
6395             SV * const sv = Perl_newSVpvf(aTHX_ "%s:%ld-%ld",
6396                                           CopFILE(PL_curcop),
6397                                           (long)PL_subline,
6398                                           (long)CopLINE(PL_curcop));
6399             gv_efullname3(tmpstr, gv, NULL);
6400             (void)hv_store(GvHV(PL_DBsub), SvPVX_const(tmpstr),
6401                     SvCUR(tmpstr), sv, 0);
6402             hv = GvHVn(db_postponed);
6403             if (HvTOTALKEYS(hv) > 0 && hv_exists(hv, SvPVX_const(tmpstr), SvCUR(tmpstr))) {
6404                 CV * const pcv = GvCV(db_postponed);
6405                 if (pcv) {
6406                     dSP;
6407                     PUSHMARK(SP);
6408                     XPUSHs(tmpstr);
6409                     PUTBACK;
6410                     call_sv(MUTABLE_SV(pcv), G_DISCARD);
6411                 }
6412             }
6413         }
6414
6415         if (name && ! (PL_parser && PL_parser->error_count))
6416             process_special_blocks(name, gv, cv);
6417     }
6418
6419   done:
6420     if (PL_parser)
6421         PL_parser->copline = NOLINE;
6422     LEAVE_SCOPE(floor);
6423     return cv;
6424 }
6425
6426 STATIC void
6427 S_process_special_blocks(pTHX_ const char *const fullname, GV *const gv,
6428                          CV *const cv)
6429 {
6430     const char *const colon = strrchr(fullname,':');
6431     const char *const name = colon ? colon + 1 : fullname;
6432
6433     PERL_ARGS_ASSERT_PROCESS_SPECIAL_BLOCKS;
6434
6435     if (*name == 'B') {
6436         if (strEQ(name, "BEGIN")) {
6437             const I32 oldscope = PL_scopestack_ix;
6438             ENTER;
6439             SAVECOPFILE(&PL_compiling);
6440             SAVECOPLINE(&PL_compiling);
6441
6442             DEBUG_x( dump_sub(gv) );
6443             Perl_av_create_and_push(aTHX_ &PL_beginav, MUTABLE_SV(cv));
6444             GvCV(gv) = 0;               /* cv has been hijacked */
6445             call_list(oldscope, PL_beginav);
6446
6447             PL_curcop = &PL_compiling;
6448             CopHINTS_set(&PL_compiling, PL_hints);
6449             LEAVE;
6450         }
6451         else
6452             return;
6453     } else {
6454         if (*name == 'E') {
6455             if strEQ(name, "END") {
6456                 DEBUG_x( dump_sub(gv) );
6457                 Perl_av_create_and_unshift_one(aTHX_ &PL_endav, MUTABLE_SV(cv));
6458             } else
6459                 return;
6460         } else if (*name == 'U') {
6461             if (strEQ(name, "UNITCHECK")) {
6462                 /* It's never too late to run a unitcheck block */
6463                 Perl_av_create_and_unshift_one(aTHX_ &PL_unitcheckav, MUTABLE_SV(cv));
6464             }
6465             else
6466                 return;
6467         } else if (*name == 'C') {
6468             if (strEQ(name, "CHECK")) {
6469                 if (PL_main_start)
6470                     Perl_ck_warner(aTHX_ packWARN(WARN_VOID),
6471                                    "Too late to run CHECK block");
6472                 Perl_av_create_and_unshift_one(aTHX_ &PL_checkav, MUTABLE_SV(cv));
6473             }
6474             else
6475                 return;
6476         } else if (*name == 'I') {
6477             if (strEQ(name, "INIT")) {
6478                 if (PL_main_start)
6479                     Perl_ck_warner(aTHX_ packWARN(WARN_VOID),
6480                                    "Too late to run INIT block");
6481                 Perl_av_create_and_push(aTHX_ &PL_initav, MUTABLE_SV(cv));
6482             }
6483             else
6484                 return;
6485         } else
6486             return;
6487         DEBUG_x( dump_sub(gv) );
6488         GvCV(gv) = 0;           /* cv has been hijacked */
6489     }
6490 }
6491
6492 /*
6493 =for apidoc newCONSTSUB
6494
6495 Creates a constant sub equivalent to Perl C<sub FOO () { 123 }> which is
6496 eligible for inlining at compile-time.
6497
6498 Passing NULL for SV creates a constant sub equivalent to C<sub BAR () {}>,
6499 which won't be called if used as a destructor, but will suppress the overhead
6500 of a call to C<AUTOLOAD>.  (This form, however, isn't eligible for inlining at
6501 compile time.)
6502
6503 =cut
6504 */
6505
6506 CV *
6507 Perl_newCONSTSUB(pTHX_ HV *stash, const char *name, SV *sv)
6508 {
6509     dVAR;
6510     CV* cv;
6511 #ifdef USE_ITHREADS
6512     const char *const file = CopFILE(PL_curcop);
6513 #else
6514     SV *const temp_sv = CopFILESV(PL_curcop);
6515     const char *const file = temp_sv ? SvPV_nolen_const(temp_sv) : NULL;
6516 #endif
6517
6518     ENTER;
6519
6520     if (IN_PERL_RUNTIME) {
6521         /* at runtime, it's not safe to manipulate PL_curcop: it may be
6522          * an op shared between threads. Use a non-shared COP for our
6523          * dirty work */
6524          SAVEVPTR(PL_curcop);
6525          PL_curcop = &PL_compiling;
6526     }
6527     SAVECOPLINE(PL_curcop);
6528     CopLINE_set(PL_curcop, PL_parser ? PL_parser->copline : NOLINE);
6529
6530     SAVEHINTS();
6531     PL_hints &= ~HINT_BLOCK_SCOPE;
6532
6533     if (stash) {
6534         SAVESPTR(PL_curstash);
6535         SAVECOPSTASH(PL_curcop);
6536         PL_curstash = stash;
6537         CopSTASH_set(PL_curcop,stash);
6538     }
6539
6540     /* file becomes the CvFILE. For an XS, it's supposed to be static storage,
6541        and so doesn't get free()d.  (It's expected to be from the C pre-
6542        processor __FILE__ directive). But we need a dynamically allocated one,
6543        and we need it to get freed.  */
6544     cv = newXS_flags(name, const_sv_xsub, file ? file : "", "",
6545                      XS_DYNAMIC_FILENAME);
6546     CvXSUBANY(cv).any_ptr = sv;
6547     CvCONST_on(cv);
6548
6549 #ifdef USE_ITHREADS
6550     if (stash)
6551         CopSTASH_free(PL_curcop);
6552 #endif
6553     LEAVE;
6554
6555     return cv;
6556 }
6557
6558 CV *
6559 Perl_newXS_flags(pTHX_ const char *name, XSUBADDR_t subaddr,
6560                  const char *const filename, const char *const proto,
6561                  U32 flags)
6562 {
6563     CV *cv = newXS(name, subaddr, filename);
6564
6565     PERL_ARGS_ASSERT_NEWXS_FLAGS;
6566
6567     if (flags & XS_DYNAMIC_FILENAME) {
6568         /* We need to "make arrangements" (ie cheat) to ensure that the
6569            filename lasts as long as the PVCV we just created, but also doesn't
6570            leak  */
6571         STRLEN filename_len = strlen(filename);
6572         STRLEN proto_and_file_len = filename_len;
6573         char *proto_and_file;
6574         STRLEN proto_len;
6575
6576         if (proto) {
6577             proto_len = strlen(proto);
6578             proto_and_file_len += proto_len;
6579
6580             Newx(proto_and_file, proto_and_file_len + 1, char);
6581             Copy(proto, proto_and_file, proto_len, char);
6582             Copy(filename, proto_and_file + proto_len, filename_len + 1, char);
6583         } else {
6584             proto_len = 0;
6585             proto_and_file = savepvn(filename, filename_len);
6586         }
6587
6588         /* This gets free()d.  :-)  */
6589         sv_usepvn_flags(MUTABLE_SV(cv), proto_and_file, proto_and_file_len,
6590                         SV_HAS_TRAILING_NUL);
6591         if (proto) {
6592             /* This gives us the correct prototype, rather than one with the
6593                file name appended.  */
6594             SvCUR_set(cv, proto_len);
6595         } else {
6596             SvPOK_off(cv);
6597         }
6598         CvFILE(cv) = proto_and_file + proto_len;
6599     } else {
6600         sv_setpv(MUTABLE_SV(cv), proto);
6601     }
6602     return cv;
6603 }
6604
6605 /*
6606 =for apidoc U||newXS
6607
6608 Used by C<xsubpp> to hook up XSUBs as Perl subs.  I<filename> needs to be
6609 static storage, as it is used directly as CvFILE(), without a copy being made.
6610
6611 =cut
6612 */
6613
6614 CV *
6615 Perl_newXS(pTHX_ const char *name, XSUBADDR_t subaddr, const char *filename)
6616 {
6617     dVAR;
6618     GV * const gv = gv_fetchpv(name ? name :
6619                         (PL_curstash ? "__ANON__" : "__ANON__::__ANON__"),
6620                         GV_ADDMULTI, SVt_PVCV);
6621     register CV *cv;
6622
6623     PERL_ARGS_ASSERT_NEWXS;
6624
6625     if (!subaddr)
6626         Perl_croak(aTHX_ "panic: no address for '%s' in '%s'", name, filename);
6627
6628     if ((cv = (name ? GvCV(gv) : NULL))) {
6629         if (GvCVGEN(gv)) {
6630             /* just a cached method */
6631             SvREFCNT_dec(cv);
6632             cv = NULL;
6633         }
6634         else if (CvROOT(cv) || CvXSUB(cv) || GvASSUMECV(gv)) {
6635             /* already defined (or promised) */
6636             /* XXX It's possible for this HvNAME_get to return null, and get passed into strEQ */
6637             if (ckWARN(WARN_REDEFINE)) {
6638                 GV * const gvcv = CvGV(cv);
6639                 if (gvcv) {
6640                     HV * const stash = GvSTASH(gvcv);
6641                     if (stash) {
6642                         const char *redefined_name = HvNAME_get(stash);
6643                         if ( strEQ(redefined_name,"autouse") ) {
6644                             const line_t oldline = CopLINE(PL_curcop);
6645                             if (PL_parser && PL_parser->copline != NOLINE)
6646                                 CopLINE_set(PL_curcop, PL_parser->copline);
6647                             Perl_warner(aTHX_ packWARN(WARN_REDEFINE),
6648                                         CvCONST(cv) ? "Constant subroutine %s redefined"
6649                                                     : "Subroutine %s redefined"
6650                                         ,name);
6651                             CopLINE_set(PL_curcop, oldline);
6652                         }
6653                     }
6654                 }
6655             }
6656             SvREFCNT_dec(cv);
6657             cv = NULL;
6658         }
6659     }
6660
6661     if (cv)                             /* must reuse cv if autoloaded */
6662         cv_undef(cv);
6663     else {
6664         cv = MUTABLE_CV(newSV_type(SVt_PVCV));
6665         if (name) {
6666             GvCV(gv) = cv;
6667             GvCVGEN(gv) = 0;
6668             mro_method_changed_in(GvSTASH(gv)); /* newXS */
6669         }
6670     }
6671     if (!name)
6672         CvANON_on(cv);
6673     CvGV_set(cv, gv);
6674     (void)gv_fetchfile(filename);
6675     CvFILE(cv) = (char *)filename; /* NOTE: not copied, as it is expected to be
6676                                    an external constant string */
6677     CvISXSUB_on(cv);
6678     CvXSUB(cv) = subaddr;
6679
6680     if (name)
6681         process_special_blocks(name, gv, cv);
6682
6683     return cv;
6684 }
6685
6686 #ifdef PERL_MAD
6687 OP *
6688 #else
6689 void
6690 #endif
6691 Perl_newFORM(pTHX_ I32 floor, OP *o, OP *block)
6692 {
6693     dVAR;
6694     register CV *cv;
6695 #ifdef PERL_MAD
6696     OP* pegop = newOP(OP_NULL, 0);
6697 #endif
6698
6699     GV * const gv = o
6700         ? gv_fetchsv(cSVOPo->op_sv, GV_ADD, SVt_PVFM)
6701         : gv_fetchpvs("STDOUT", GV_ADD|GV_NOTQUAL, SVt_PVFM);
6702
6703     GvMULTI_on(gv);
6704     if ((cv = GvFORM(gv))) {
6705         if (ckWARN(WARN_REDEFINE)) {
6706             const line_t oldline = CopLINE(PL_curcop);
6707             if (PL_parser && PL_parser->copline != NOLINE)
6708                 CopLINE_set(PL_curcop, PL_parser->copline);
6709             if (o) {
6710                 Perl_warner(aTHX_ packWARN(WARN_REDEFINE),
6711                             "Format %"SVf" redefined", SVfARG(cSVOPo->op_sv));
6712             } else {
6713                 Perl_warner(aTHX_ packWARN(WARN_REDEFINE),
6714                             "Format STDOUT redefined");
6715             }
6716             CopLINE_set(PL_curcop, oldline);
6717         }
6718         SvREFCNT_dec(cv);
6719     }
6720     cv = PL_compcv;
6721     GvFORM(gv) = cv;
6722     CvGV_set(cv, gv);
6723     CvFILE_set_from_cop(cv, PL_curcop);
6724
6725
6726     pad_tidy(padtidy_FORMAT);
6727     CvROOT(cv) = newUNOP(OP_LEAVEWRITE, 0, scalarseq(block));
6728     CvROOT(cv)->op_private |= OPpREFCOUNTED;
6729     OpREFCNT_set(CvROOT(cv), 1);
6730     CvSTART(cv) = LINKLIST(CvROOT(cv));
6731     CvROOT(cv)->op_next = 0;
6732     CALL_PEEP(CvSTART(cv));
6733 #ifdef PERL_MAD
6734     op_getmad(o,pegop,'n');
6735     op_getmad_weak(block, pegop, 'b');
6736 #else
6737     op_free(o);
6738 #endif
6739     if (PL_parser)
6740         PL_parser->copline = NOLINE;
6741     LEAVE_SCOPE(floor);
6742 #ifdef PERL_MAD
6743     return pegop;
6744 #endif
6745 }
6746
6747 OP *
6748 Perl_newANONLIST(pTHX_ OP *o)
6749 {
6750     return convert(OP_ANONLIST, OPf_SPECIAL, o);
6751 }
6752
6753 OP *
6754 Perl_newANONHASH(pTHX_ OP *o)
6755 {
6756     return convert(OP_ANONHASH, OPf_SPECIAL, o);
6757 }
6758
6759 OP *
6760 Perl_newANONSUB(pTHX_ I32 floor, OP *proto, OP *block)
6761 {
6762     return newANONATTRSUB(floor, proto, NULL, block);
6763 }
6764
6765 OP *
6766 Perl_newANONATTRSUB(pTHX_ I32 floor, OP *proto, OP *attrs, OP *block)
6767 {
6768     return newUNOP(OP_REFGEN, 0,
6769         newSVOP(OP_ANONCODE, 0,
6770                 MUTABLE_SV(newATTRSUB(floor, 0, proto, attrs, block))));
6771 }
6772
6773 OP *
6774 Perl_oopsAV(pTHX_ OP *o)
6775 {
6776     dVAR;
6777
6778     PERL_ARGS_ASSERT_OOPSAV;
6779
6780     switch (o->op_type) {
6781     case OP_PADSV:
6782         o->op_type = OP_PADAV;
6783         o->op_ppaddr = PL_ppaddr[OP_PADAV];
6784         return ref(o, OP_RV2AV);
6785
6786     case OP_RV2SV:
6787         o->op_type = OP_RV2AV;
6788         o->op_ppaddr = PL_ppaddr[OP_RV2AV];
6789         ref(o, OP_RV2AV);
6790         break;
6791
6792     default:
6793         Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL), "oops: oopsAV");
6794         break;
6795     }
6796     return o;
6797 }
6798
6799 OP *
6800 Perl_oopsHV(pTHX_ OP *o)
6801 {
6802     dVAR;
6803
6804     PERL_ARGS_ASSERT_OOPSHV;
6805
6806     switch (o->op_type) {
6807     case OP_PADSV:
6808     case OP_PADAV:
6809         o->op_type = OP_PADHV;
6810         o->op_ppaddr = PL_ppaddr[OP_PADHV];
6811         return ref(o, OP_RV2HV);
6812
6813     case OP_RV2SV:
6814     case OP_RV2AV:
6815         o->op_type = OP_RV2HV;
6816         o->op_ppaddr = PL_ppaddr[OP_RV2HV];
6817         ref(o, OP_RV2HV);
6818         break;
6819
6820     default:
6821         Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL), "oops: oopsHV");
6822         break;
6823     }
6824     return o;
6825 }
6826
6827 OP *
6828 Perl_newAVREF(pTHX_ OP *o)
6829 {
6830     dVAR;
6831
6832     PERL_ARGS_ASSERT_NEWAVREF;
6833
6834     if (o->op_type == OP_PADANY) {
6835         o->op_type = OP_PADAV;
6836         o->op_ppaddr = PL_ppaddr[OP_PADAV];
6837         return o;
6838     }
6839     else if ((o->op_type == OP_RV2AV || o->op_type == OP_PADAV)) {
6840         Perl_ck_warner_d(aTHX_ packWARN(WARN_DEPRECATED),
6841                        "Using an array as a reference is deprecated");
6842     }
6843     return newUNOP(OP_RV2AV, 0, scalar(o));
6844 }
6845
6846 OP *
6847 Perl_newGVREF(pTHX_ I32 type, OP *o)
6848 {
6849     if (type == OP_MAPSTART || type == OP_GREPSTART || type == OP_SORT)
6850         return newUNOP(OP_NULL, 0, o);
6851     return ref(newUNOP(OP_RV2GV, OPf_REF, o), type);
6852 }
6853
6854 OP *
6855 Perl_newHVREF(pTHX_ OP *o)
6856 {
6857     dVAR;
6858
6859     PERL_ARGS_ASSERT_NEWHVREF;
6860
6861     if (o->op_type == OP_PADANY) {
6862         o->op_type = OP_PADHV;
6863         o->op_ppaddr = PL_ppaddr[OP_PADHV];
6864         return o;
6865     }
6866     else if ((o->op_type == OP_RV2HV || o->op_type == OP_PADHV)) {
6867         Perl_ck_warner_d(aTHX_ packWARN(WARN_DEPRECATED),
6868                        "Using a hash as a reference is deprecated");
6869     }
6870     return newUNOP(OP_RV2HV, 0, scalar(o));
6871 }
6872
6873 OP *
6874 Perl_newCVREF(pTHX_ I32 flags, OP *o)
6875 {
6876     return newUNOP(OP_RV2CV, flags, scalar(o));
6877 }
6878
6879 OP *
6880 Perl_newSVREF(pTHX_ OP *o)
6881 {
6882     dVAR;
6883
6884     PERL_ARGS_ASSERT_NEWSVREF;
6885
6886     if (o->op_type == OP_PADANY) {
6887         o->op_type = OP_PADSV;
6888         o->op_ppaddr = PL_ppaddr[OP_PADSV];
6889         return o;
6890     }
6891     return newUNOP(OP_RV2SV, 0, scalar(o));
6892 }
6893
6894 /* Check routines. See the comments at the top of this file for details
6895  * on when these are called */
6896
6897 OP *
6898 Perl_ck_anoncode(pTHX_ OP *o)
6899 {
6900     PERL_ARGS_ASSERT_CK_ANONCODE;
6901
6902     cSVOPo->op_targ = pad_add_anon(cSVOPo->op_sv, o->op_type);
6903     if (!PL_madskills)
6904         cSVOPo->op_sv = NULL;
6905     return o;
6906 }
6907
6908 OP *
6909 Perl_ck_bitop(pTHX_ OP *o)
6910 {
6911     dVAR;
6912
6913     PERL_ARGS_ASSERT_CK_BITOP;
6914
6915 #define OP_IS_NUMCOMPARE(op) \
6916         ((op) == OP_LT   || (op) == OP_I_LT || \
6917          (op) == OP_GT   || (op) == OP_I_GT || \
6918          (op) == OP_LE   || (op) == OP_I_LE || \
6919          (op) == OP_GE   || (op) == OP_I_GE || \
6920          (op) == OP_EQ   || (op) == OP_I_EQ || \
6921          (op) == OP_NE   || (op) == OP_I_NE || \
6922          (op) == OP_NCMP || (op) == OP_I_NCMP)
6923     o->op_private = (U8)(PL_hints & HINT_INTEGER);
6924     if (!(o->op_flags & OPf_STACKED) /* Not an assignment */
6925             && (o->op_type == OP_BIT_OR
6926              || o->op_type == OP_BIT_AND
6927              || o->op_type == OP_BIT_XOR))
6928     {
6929         const OP * const left = cBINOPo->op_first;
6930         const OP * const right = left->op_sibling;
6931         if ((OP_IS_NUMCOMPARE(left->op_type) &&
6932                 (left->op_flags & OPf_PARENS) == 0) ||
6933             (OP_IS_NUMCOMPARE(right->op_type) &&
6934                 (right->op_flags & OPf_PARENS) == 0))
6935             Perl_ck_warner(aTHX_ packWARN(WARN_PRECEDENCE),
6936                            "Possible precedence problem on bitwise %c operator",
6937                            o->op_type == OP_BIT_OR ? '|'
6938                            : o->op_type == OP_BIT_AND ? '&' : '^'
6939                            );
6940     }
6941     return o;
6942 }
6943
6944 OP *
6945 Perl_ck_concat(pTHX_ OP *o)
6946 {
6947     const OP * const kid = cUNOPo->op_first;
6948
6949     PERL_ARGS_ASSERT_CK_CONCAT;
6950     PERL_UNUSED_CONTEXT;
6951
6952     if (kid->op_type == OP_CONCAT && !(kid->op_private & OPpTARGET_MY) &&
6953             !(kUNOP->op_first->op_flags & OPf_MOD))
6954         o->op_flags |= OPf_STACKED;
6955     return o;
6956 }
6957
6958 OP *
6959 Perl_ck_spair(pTHX_ OP *o)
6960 {
6961     dVAR;
6962
6963     PERL_ARGS_ASSERT_CK_SPAIR;
6964
6965     if (o->op_flags & OPf_KIDS) {
6966         OP* newop;
6967         OP* kid;
6968         const OPCODE type = o->op_type;
6969         o = modkids(ck_fun(o), type);
6970         kid = cUNOPo->op_first;
6971         newop = kUNOP->op_first->op_sibling;
6972         if (newop) {
6973             const OPCODE type = newop->op_type;
6974             if (newop->op_sibling || !(PL_opargs[type] & OA_RETSCALAR) ||
6975                     type == OP_PADAV || type == OP_PADHV ||
6976                     type == OP_RV2AV || type == OP_RV2HV)
6977                 return o;
6978         }
6979 #ifdef PERL_MAD
6980         op_getmad(kUNOP->op_first,newop,'K');
6981 #else
6982         op_free(kUNOP->op_first);
6983 #endif
6984         kUNOP->op_first = newop;
6985     }
6986     o->op_ppaddr = PL_ppaddr[++o->op_type];
6987     return ck_fun(o);
6988 }
6989
6990 OP *
6991 Perl_ck_delete(pTHX_ OP *o)
6992 {
6993     PERL_ARGS_ASSERT_CK_DELETE;
6994
6995     o = ck_fun(o);
6996     o->op_private = 0;
6997     if (o->op_flags & OPf_KIDS) {
6998         OP * const kid = cUNOPo->op_first;
6999         switch (kid->op_type) {
7000         case OP_ASLICE:
7001             o->op_flags |= OPf_SPECIAL;
7002             /* FALL THROUGH */
7003         case OP_HSLICE:
7004             o->op_private |= OPpSLICE;
7005             break;
7006         case OP_AELEM:
7007             o->op_flags |= OPf_SPECIAL;
7008             /* FALL THROUGH */
7009         case OP_HELEM:
7010             break;
7011         default:
7012             Perl_croak(aTHX_ "%s argument is not a HASH or ARRAY element or slice",
7013                   OP_DESC(o));
7014         }
7015         if (kid->op_private & OPpLVAL_INTRO)
7016             o->op_private |= OPpLVAL_INTRO;
7017         op_null(kid);
7018     }
7019     return o;
7020 }
7021
7022 OP *
7023 Perl_ck_die(pTHX_ OP *o)
7024 {
7025     PERL_ARGS_ASSERT_CK_DIE;
7026
7027 #ifdef VMS
7028     if (VMSISH_HUSHED) o->op_private |= OPpHUSH_VMSISH;
7029 #endif
7030     return ck_fun(o);
7031 }
7032
7033 OP *
7034 Perl_ck_eof(pTHX_ OP *o)
7035 {
7036     dVAR;
7037
7038     PERL_ARGS_ASSERT_CK_EOF;
7039
7040     if (o->op_flags & OPf_KIDS) {
7041         if (cLISTOPo->op_first->op_type == OP_STUB) {
7042             OP * const newop
7043                 = newUNOP(o->op_type, OPf_SPECIAL, newGVOP(OP_GV, 0, PL_argvgv));
7044 #ifdef PERL_MAD
7045             op_getmad(o,newop,'O');
7046 #else
7047             op_free(o);
7048 #endif
7049             o = newop;
7050         }
7051         return ck_fun(o);
7052     }
7053     return o;
7054 }
7055
7056 OP *
7057 Perl_ck_eval(pTHX_ OP *o)
7058 {
7059     dVAR;
7060
7061     PERL_ARGS_ASSERT_CK_EVAL;
7062
7063     PL_hints |= HINT_BLOCK_SCOPE;
7064     if (o->op_flags & OPf_KIDS) {
7065         SVOP * const kid = (SVOP*)cUNOPo->op_first;
7066
7067         if (!kid) {
7068             o->op_flags &= ~OPf_KIDS;
7069             op_null(o);
7070         }
7071         else if (kid->op_type == OP_LINESEQ || kid->op_type == OP_STUB) {
7072             LOGOP *enter;
7073 #ifdef PERL_MAD
7074             OP* const oldo = o;
7075 #endif
7076
7077             cUNOPo->op_first = 0;
7078 #ifndef PERL_MAD
7079             op_free(o);
7080 #endif
7081
7082             NewOp(1101, enter, 1, LOGOP);
7083             enter->op_type = OP_ENTERTRY;
7084             enter->op_ppaddr = PL_ppaddr[OP_ENTERTRY];
7085             enter->op_private = 0;
7086
7087             /* establish postfix order */
7088             enter->op_next = (OP*)enter;
7089
7090             o = op_prepend_elem(OP_LINESEQ, (OP*)enter, (OP*)kid);
7091             o->op_type = OP_LEAVETRY;
7092             o->op_ppaddr = PL_ppaddr[OP_LEAVETRY];
7093             enter->op_other = o;
7094             op_getmad(oldo,o,'O');
7095             return o;
7096         }
7097         else {
7098             scalar((OP*)kid);
7099             PL_cv_has_eval = 1;
7100         }
7101     }
7102     else {
7103 #ifdef PERL_MAD
7104         OP* const oldo = o;
7105 #else
7106         op_free(o);
7107 #endif
7108         o = newUNOP(OP_ENTEREVAL, 0, newDEFSVOP());
7109         op_getmad(oldo,o,'O');
7110     }
7111     o->op_targ = (PADOFFSET)PL_hints;
7112     if ((PL_hints & HINT_LOCALIZE_HH) != 0 && GvHV(PL_hintgv)) {
7113         /* Store a copy of %^H that pp_entereval can pick up. */
7114         OP *hhop = newSVOP(OP_HINTSEVAL, 0,
7115                            MUTABLE_SV(hv_copy_hints_hv(GvHV(PL_hintgv))));
7116         cUNOPo->op_first->op_sibling = hhop;
7117         o->op_private |= OPpEVAL_HAS_HH;
7118     }
7119     return o;
7120 }
7121
7122 OP *
7123 Perl_ck_exit(pTHX_ OP *o)
7124 {
7125     PERL_ARGS_ASSERT_CK_EXIT;
7126
7127 #ifdef VMS
7128     HV * const table = GvHV(PL_hintgv);
7129     if (table) {
7130        SV * const * const svp = hv_fetchs(table, "vmsish_exit", FALSE);
7131        if (svp && *svp && SvTRUE(*svp))
7132            o->op_private |= OPpEXIT_VMSISH;
7133     }
7134     if (VMSISH_HUSHED) o->op_private |= OPpHUSH_VMSISH;
7135 #endif
7136     return ck_fun(o);
7137 }
7138
7139 OP *
7140 Perl_ck_exec(pTHX_ OP *o)
7141 {
7142     PERL_ARGS_ASSERT_CK_EXEC;
7143
7144     if (o->op_flags & OPf_STACKED) {
7145         OP *kid;
7146         o = ck_fun(o);
7147         kid = cUNOPo->op_first->op_sibling;
7148         if (kid->op_type == OP_RV2GV)
7149             op_null(kid);
7150     }
7151     else
7152         o = listkids(o);
7153     return o;
7154 }
7155
7156 OP *
7157 Perl_ck_exists(pTHX_ OP *o)
7158 {
7159     dVAR;
7160
7161     PERL_ARGS_ASSERT_CK_EXISTS;
7162
7163     o = ck_fun(o);
7164     if (o->op_flags & OPf_KIDS) {
7165         OP * const kid = cUNOPo->op_first;
7166         if (kid->op_type == OP_ENTERSUB) {
7167             (void) ref(kid, o->op_type);
7168             if (kid->op_type != OP_RV2CV
7169                         && !(PL_parser && PL_parser->error_count))
7170                 Perl_croak(aTHX_ "%s argument is not a subroutine name",
7171                             OP_DESC(o));
7172             o->op_private |= OPpEXISTS_SUB;
7173         }
7174         else if (kid->op_type == OP_AELEM)
7175             o->op_flags |= OPf_SPECIAL;
7176         else if (kid->op_type != OP_HELEM)
7177             Perl_croak(aTHX_ "%s argument is not a HASH or ARRAY element or a subroutine",
7178                         OP_DESC(o));
7179         op_null(kid);
7180     }
7181     return o;
7182 }
7183
7184 OP *
7185 Perl_ck_rvconst(pTHX_ register OP *o)
7186 {
7187     dVAR;
7188     SVOP * const kid = (SVOP*)cUNOPo->op_first;
7189
7190     PERL_ARGS_ASSERT_CK_RVCONST;
7191
7192     o->op_private |= (PL_hints & HINT_STRICT_REFS);
7193     if (o->op_type == OP_RV2CV)
7194         o->op_private &= ~1;
7195
7196     if (kid->op_type == OP_CONST) {
7197         int iscv;
7198         GV *gv;
7199         SV * const kidsv = kid->op_sv;
7200
7201         /* Is it a constant from cv_const_sv()? */
7202         if (SvROK(kidsv) && SvREADONLY(kidsv)) {
7203             SV * const rsv = SvRV(kidsv);
7204             const svtype type = SvTYPE(rsv);
7205             const char *badtype = NULL;
7206
7207             switch (o->op_type) {
7208             case OP_RV2SV:
7209                 if (type > SVt_PVMG)
7210                     badtype = "a SCALAR";
7211                 break;
7212             case OP_RV2AV:
7213                 if (type != SVt_PVAV)
7214                     badtype = "an ARRAY";
7215                 break;
7216             case OP_RV2HV:
7217                 if (type != SVt_PVHV)
7218                     badtype = "a HASH";
7219                 break;
7220             case OP_RV2CV:
7221                 if (type != SVt_PVCV)
7222                     badtype = "a CODE";
7223                 break;
7224             }
7225             if (badtype)
7226                 Perl_croak(aTHX_ "Constant is not %s reference", badtype);
7227             return o;
7228         }
7229         if ((o->op_private & HINT_STRICT_REFS) && (kid->op_private & OPpCONST_BARE)) {
7230             const char *badthing;
7231             switch (o->op_type) {
7232             case OP_RV2SV:
7233                 badthing = "a SCALAR";
7234                 break;
7235             case OP_RV2AV:
7236                 badthing = "an ARRAY";
7237                 break;
7238             case OP_RV2HV:
7239                 badthing = "a HASH";
7240                 break;
7241             default:
7242                 badthing = NULL;
7243                 break;
7244             }
7245             if (badthing)
7246                 Perl_croak(aTHX_
7247                            "Can't use bareword (\"%"SVf"\") as %s ref while \"strict refs\" in use",
7248                            SVfARG(kidsv), badthing);
7249         }
7250         /*
7251          * This is a little tricky.  We only want to add the symbol if we
7252          * didn't add it in the lexer.  Otherwise we get duplicate strict
7253          * warnings.  But if we didn't add it in the lexer, we must at
7254          * least pretend like we wanted to add it even if it existed before,
7255          * or we get possible typo warnings.  OPpCONST_ENTERED says
7256          * whether the lexer already added THIS instance of this symbol.
7257          */
7258         iscv = (o->op_type == OP_RV2CV) * 2;
7259         do {
7260             gv = gv_fetchsv(kidsv,
7261                 iscv | !(kid->op_private & OPpCONST_ENTERED),
7262                 iscv
7263                     ? SVt_PVCV
7264                     : o->op_type == OP_RV2SV
7265                         ? SVt_PV
7266                         : o->op_type == OP_RV2AV
7267                             ? SVt_PVAV
7268                             : o->op_type == OP_RV2HV
7269                                 ? SVt_PVHV
7270                                 : SVt_PVGV);
7271         } while (!gv && !(kid->op_private & OPpCONST_ENTERED) && !iscv++);
7272         if (gv) {
7273             kid->op_type = OP_GV;
7274             SvREFCNT_dec(kid->op_sv);
7275 #ifdef USE_ITHREADS
7276             /* XXX hack: dependence on sizeof(PADOP) <= sizeof(SVOP) */
7277             kPADOP->op_padix = pad_alloc(OP_GV, SVs_PADTMP);
7278             SvREFCNT_dec(PAD_SVl(kPADOP->op_padix));
7279             GvIN_PAD_on(gv);
7280             PAD_SETSV(kPADOP->op_padix, MUTABLE_SV(SvREFCNT_inc_simple_NN(gv)));
7281 #else
7282             kid->op_sv = SvREFCNT_inc_simple_NN(gv);
7283 #endif
7284             kid->op_private = 0;
7285             kid->op_ppaddr = PL_ppaddr[OP_GV];
7286             /* FAKE globs in the symbol table cause weird bugs (#77810) */
7287             SvFAKE_off(gv);
7288         }
7289     }
7290     return o;
7291 }
7292
7293 OP *
7294 Perl_ck_ftst(pTHX_ OP *o)
7295 {
7296     dVAR;
7297     const I32 type = o->op_type;
7298
7299     PERL_ARGS_ASSERT_CK_FTST;
7300
7301     if (o->op_flags & OPf_REF) {
7302         NOOP;
7303     }
7304     else if (o->op_flags & OPf_KIDS && cUNOPo->op_first->op_type != OP_STUB) {
7305         SVOP * const kid = (SVOP*)cUNOPo->op_first;
7306         const OPCODE kidtype = kid->op_type;
7307
7308         if (kidtype == OP_CONST && (kid->op_private & OPpCONST_BARE)) {
7309             OP * const newop = newGVOP(type, OPf_REF,
7310                 gv_fetchsv(kid->op_sv, GV_ADD, SVt_PVIO));
7311 #ifdef PERL_MAD
7312             op_getmad(o,newop,'O');
7313 #else
7314             op_free(o);
7315 #endif
7316             return newop;
7317         }
7318         if ((PL_hints & HINT_FILETEST_ACCESS) && OP_IS_FILETEST_ACCESS(o->op_type))
7319             o->op_private |= OPpFT_ACCESS;
7320         if (PL_check[kidtype] == Perl_ck_ftst
7321                 && kidtype != OP_STAT && kidtype != OP_LSTAT)
7322             o->op_private |= OPpFT_STACKED;
7323     }
7324     else {
7325 #ifdef PERL_MAD
7326         OP* const oldo = o;
7327 #else
7328         op_free(o);
7329 #endif
7330         if (type == OP_FTTTY)
7331             o = newGVOP(type, OPf_REF, PL_stdingv);
7332         else
7333             o = newUNOP(type, 0, newDEFSVOP());
7334         op_getmad(oldo,o,'O');
7335     }
7336     return o;
7337 }
7338
7339 OP *
7340 Perl_ck_fun(pTHX_ OP *o)
7341 {
7342     dVAR;
7343     const int type = o->op_type;
7344     register I32 oa = PL_opargs[type] >> OASHIFT;
7345
7346     PERL_ARGS_ASSERT_CK_FUN;
7347
7348     if (o->op_flags & OPf_STACKED) {
7349         if ((oa & OA_OPTIONAL) && (oa >> 4) && !((oa >> 4) & OA_OPTIONAL))
7350             oa &= ~OA_OPTIONAL;
7351         else
7352             return no_fh_allowed(o);
7353     }
7354
7355     if (o->op_flags & OPf_KIDS) {
7356         OP **tokid = &cLISTOPo->op_first;
7357         register OP *kid = cLISTOPo->op_first;
7358         OP *sibl;
7359         I32 numargs = 0;
7360
7361         if (kid->op_type == OP_PUSHMARK ||
7362             (kid->op_type == OP_NULL && kid->op_targ == OP_PUSHMARK))
7363         {
7364             tokid = &kid->op_sibling;
7365             kid = kid->op_sibling;
7366         }
7367         if (!kid && PL_opargs[type] & OA_DEFGV)
7368             *tokid = kid = newDEFSVOP();
7369
7370         while (oa && kid) {
7371             numargs++;
7372             sibl = kid->op_sibling;
7373 #ifdef PERL_MAD
7374             if (!sibl && kid->op_type == OP_STUB) {
7375                 numargs--;
7376                 break;
7377             }
7378 #endif
7379             switch (oa & 7) {
7380             case OA_SCALAR:
7381                 /* list seen where single (scalar) arg expected? */
7382                 if (numargs == 1 && !(oa >> 4)
7383                     && kid->op_type == OP_LIST && type != OP_SCALAR)
7384                 {
7385                     return too_many_arguments(o,PL_op_desc[type]);
7386                 }
7387                 scalar(kid);
7388                 break;
7389             case OA_LIST:
7390                 if (oa < 16) {
7391                     kid = 0;
7392                     continue;
7393                 }
7394                 else
7395                     list(kid);
7396                 break;
7397             case OA_AVREF:
7398                 if ((type == OP_PUSH || type == OP_UNSHIFT)
7399                     && !kid->op_sibling)
7400                     Perl_ck_warner(aTHX_ packWARN(WARN_SYNTAX),
7401                                    "Useless use of %s with no values",
7402                                    PL_op_desc[type]);
7403
7404                 if (kid->op_type == OP_CONST &&
7405                     (kid->op_private & OPpCONST_BARE))
7406                 {
7407                     OP * const newop = newAVREF(newGVOP(OP_GV, 0,
7408                         gv_fetchsv(((SVOP*)kid)->op_sv, GV_ADD, SVt_PVAV) ));
7409                     Perl_ck_warner_d(aTHX_ packWARN(WARN_DEPRECATED),
7410                                    "Array @%"SVf" missing the @ in argument %"IVdf" of %s()",
7411                                    SVfARG(((SVOP*)kid)->op_sv), (IV)numargs, PL_op_desc[type]);
7412 #ifdef PERL_MAD
7413                     op_getmad(kid,newop,'K');
7414 #else
7415                     op_free(kid);
7416 #endif
7417                     kid = newop;
7418                     kid->op_sibling = sibl;
7419                     *tokid = kid;
7420                 }
7421                 else if (kid->op_type != OP_RV2AV && kid->op_type != OP_PADAV)
7422                     bad_type(numargs, "array", PL_op_desc[type], kid);
7423                 op_lvalue(kid, type);
7424                 break;
7425             case OA_HVREF:
7426                 if (kid->op_type == OP_CONST &&
7427                     (kid->op_private & OPpCONST_BARE))
7428                 {
7429                     OP * const newop = newHVREF(newGVOP(OP_GV, 0,
7430                         gv_fetchsv(((SVOP*)kid)->op_sv, GV_ADD, SVt_PVHV) ));
7431                     Perl_ck_warner_d(aTHX_ packWARN(WARN_DEPRECATED),
7432                                    "Hash %%%"SVf" missing the %% in argument %"IVdf" of %s()",
7433                                    SVfARG(((SVOP*)kid)->op_sv), (IV)numargs, PL_op_desc[type]);
7434 #ifdef PERL_MAD
7435                     op_getmad(kid,newop,'K');
7436 #else
7437                     op_free(kid);
7438 #endif
7439                     kid = newop;
7440                     kid->op_sibling = sibl;
7441                     *tokid = kid;
7442                 }
7443                 else if (kid->op_type != OP_RV2HV && kid->op_type != OP_PADHV)
7444                     bad_type(numargs, "hash", PL_op_desc[type], kid);
7445                 op_lvalue(kid, type);
7446                 break;
7447             case OA_CVREF:
7448                 {
7449                     OP * const newop = newUNOP(OP_NULL, 0, kid);
7450                     kid->op_sibling = 0;
7451                     LINKLIST(kid);
7452                     newop->op_next = newop;
7453                     kid = newop;
7454                     kid->op_sibling = sibl;
7455                     *tokid = kid;
7456                 }
7457                 break;
7458             case OA_FILEREF:
7459                 if (kid->op_type != OP_GV && kid->op_type != OP_RV2GV) {
7460                     if (kid->op_type == OP_CONST &&
7461                         (kid->op_private & OPpCONST_BARE))
7462                     {
7463                         OP * const newop = newGVOP(OP_GV, 0,
7464                             gv_fetchsv(((SVOP*)kid)->op_sv, GV_ADD, SVt_PVIO));
7465                         if (!(o->op_private & 1) && /* if not unop */
7466                             kid == cLISTOPo->op_last)
7467                             cLISTOPo->op_last = newop;
7468 #ifdef PERL_MAD
7469                         op_getmad(kid,newop,'K');
7470 #else
7471                         op_free(kid);
7472 #endif
7473                         kid = newop;
7474                     }
7475                     else if (kid->op_type == OP_READLINE) {
7476                         /* neophyte patrol: open(<FH>), close(<FH>) etc. */
7477                         bad_type(numargs, "HANDLE", OP_DESC(o), kid);
7478                     }
7479                     else {
7480                         I32 flags = OPf_SPECIAL;
7481                         I32 priv = 0;
7482                         PADOFFSET targ = 0;
7483
7484                         /* is this op a FH constructor? */
7485                         if (is_handle_constructor(o,numargs)) {
7486                             const char *name = NULL;
7487                             STRLEN len = 0;
7488
7489                             flags = 0;
7490                             /* Set a flag to tell rv2gv to vivify
7491                              * need to "prove" flag does not mean something
7492                              * else already - NI-S 1999/05/07
7493                              */
7494                             priv = OPpDEREF;
7495                             if (kid->op_type == OP_PADSV) {
7496                                 SV *const namesv
7497                                     = PAD_COMPNAME_SV(kid->op_targ);
7498                                 name = SvPV_const(namesv, len);
7499                             }
7500                             else if (kid->op_type == OP_RV2SV
7501                                      && kUNOP->op_first->op_type == OP_GV)
7502                             {
7503                                 GV * const gv = cGVOPx_gv(kUNOP->op_first);
7504                                 name = GvNAME(gv);
7505                                 len = GvNAMELEN(gv);
7506                             }
7507                             else if (kid->op_type == OP_AELEM
7508                                      || kid->op_type == OP_HELEM)
7509                             {
7510                                  OP *firstop;
7511                                  OP *op = ((BINOP*)kid)->op_first;
7512                                  name = NULL;
7513                                  if (op) {
7514                                       SV *tmpstr = NULL;
7515                                       const char * const a =
7516                                            kid->op_type == OP_AELEM ?
7517                                            "[]" : "{}";
7518                                       if (((op->op_type == OP_RV2AV) ||
7519                                            (op->op_type == OP_RV2HV)) &&
7520                                           (firstop = ((UNOP*)op)->op_first) &&
7521                                           (firstop->op_type == OP_GV)) {
7522                                            /* packagevar $a[] or $h{} */
7523                                            GV * const gv = cGVOPx_gv(firstop);
7524                                            if (gv)
7525                                                 tmpstr =
7526                                                      Perl_newSVpvf(aTHX_
7527                                                                    "%s%c...%c",
7528                                                                    GvNAME(gv),
7529                                                                    a[0], a[1]);
7530                                       }
7531                                       else if (op->op_type == OP_PADAV
7532                                                || op->op_type == OP_PADHV) {
7533                                            /* lexicalvar $a[] or $h{} */
7534                                            const char * const padname =
7535                                                 PAD_COMPNAME_PV(op->op_targ);
7536                                            if (padname)
7537                                                 tmpstr =
7538                                                      Perl_newSVpvf(aTHX_
7539                                                                    "%s%c...%c",
7540                                                                    padname + 1,
7541                                                                    a[0], a[1]);
7542                                       }
7543                                       if (tmpstr) {
7544                                            name = SvPV_const(tmpstr, len);
7545                                            sv_2mortal(tmpstr);
7546                                       }
7547                                  }
7548                                  if (!name) {
7549                                       name = "__ANONIO__";
7550                                       len = 10;
7551                                  }
7552                                  op_lvalue(kid, type);
7553                             }
7554                             if (name) {
7555                                 SV *namesv;
7556                                 targ = pad_alloc(OP_RV2GV, SVs_PADTMP);
7557                                 namesv = PAD_SVl(targ);
7558                                 SvUPGRADE(namesv, SVt_PV);
7559                                 if (*name != '$')
7560                                     sv_setpvs(namesv, "$");
7561                                 sv_catpvn(namesv, name, len);
7562                             }
7563                         }
7564                         kid->op_sibling = 0;
7565                         kid = newUNOP(OP_RV2GV, flags, scalar(kid));
7566                         kid->op_targ = targ;
7567                         kid->op_private |= priv;
7568                     }
7569                     kid->op_sibling = sibl;
7570                     *tokid = kid;
7571                 }
7572                 scalar(kid);
7573                 break;
7574             case OA_SCALARREF:
7575                 op_lvalue(scalar(kid), type);
7576                 break;
7577             }
7578             oa >>= 4;
7579             tokid = &kid->op_sibling;
7580             kid = kid->op_sibling;
7581         }
7582 #ifdef PERL_MAD
7583         if (kid && kid->op_type != OP_STUB)
7584             return too_many_arguments(o,OP_DESC(o));
7585         o->op_private |= numargs;
7586 #else
7587         /* FIXME - should the numargs move as for the PERL_MAD case?  */
7588         o->op_private |= numargs;
7589         if (kid)
7590             return too_many_arguments(o,OP_DESC(o));
7591 #endif
7592         listkids(o);
7593     }
7594     else if (PL_opargs[type] & OA_DEFGV) {
7595 #ifdef PERL_MAD
7596         OP *newop = newUNOP(type, 0, newDEFSVOP());
7597         op_getmad(o,newop,'O');
7598         return newop;
7599 #else
7600         /* Ordering of these two is important to keep f_map.t passing.  */
7601         op_free(o);
7602         return newUNOP(type, 0, newDEFSVOP());
7603 #endif
7604     }
7605
7606     if (oa) {
7607         while (oa & OA_OPTIONAL)
7608             oa >>= 4;
7609         if (oa && oa != OA_LIST)
7610             return too_few_arguments(o,OP_DESC(o));
7611     }
7612     return o;
7613 }
7614
7615 OP *
7616 Perl_ck_glob(pTHX_ OP *o)
7617 {
7618     dVAR;
7619     GV *gv;
7620
7621     PERL_ARGS_ASSERT_CK_GLOB;
7622
7623     o = ck_fun(o);
7624     if ((o->op_flags & OPf_KIDS) && !cLISTOPo->op_first->op_sibling)
7625         op_append_elem(OP_GLOB, o, newDEFSVOP());
7626
7627     if (!((gv = gv_fetchpvs("glob", GV_NOTQUAL, SVt_PVCV))
7628           && GvCVu(gv) && GvIMPORTED_CV(gv)))
7629     {
7630         gv = gv_fetchpvs("CORE::GLOBAL::glob", 0, SVt_PVCV);
7631     }
7632
7633 #if !defined(PERL_EXTERNAL_GLOB)
7634     /* XXX this can be tightened up and made more failsafe. */
7635     if (!(gv && GvCVu(gv) && GvIMPORTED_CV(gv))) {
7636         GV *glob_gv;
7637         ENTER;
7638         Perl_load_module(aTHX_ PERL_LOADMOD_NOIMPORT,
7639                 newSVpvs("File::Glob"), NULL, NULL, NULL);
7640         if((glob_gv = gv_fetchpvs("File::Glob::csh_glob", 0, SVt_PVCV))) {
7641             gv = gv_fetchpvs("CORE::GLOBAL::glob", 0, SVt_PVCV);
7642             GvCV(gv) = GvCV(glob_gv);
7643             SvREFCNT_inc_void(MUTABLE_SV(GvCV(gv)));
7644             GvIMPORTED_CV_on(gv);
7645         }
7646         LEAVE;
7647     }
7648 #endif /* PERL_EXTERNAL_GLOB */
7649
7650     if (gv && GvCVu(gv) && GvIMPORTED_CV(gv)) {
7651         op_append_elem(OP_GLOB, o,
7652                     newSVOP(OP_CONST, 0, newSViv(PL_glob_index++)));
7653         o->op_type = OP_LIST;
7654         o->op_ppaddr = PL_ppaddr[OP_LIST];
7655         cLISTOPo->op_first->op_type = OP_PUSHMARK;
7656         cLISTOPo->op_first->op_ppaddr = PL_ppaddr[OP_PUSHMARK];
7657         cLISTOPo->op_first->op_targ = 0;
7658         o = newUNOP(OP_ENTERSUB, OPf_STACKED,
7659                     op_append_elem(OP_LIST, o,
7660                                 scalar(newUNOP(OP_RV2CV, 0,
7661                                                newGVOP(OP_GV, 0, gv)))));
7662         o = newUNOP(OP_NULL, 0, ck_subr(o));
7663         o->op_targ = OP_GLOB;           /* hint at what it used to be */
7664         return o;
7665     }
7666     gv = newGVgen("main");
7667     gv_IOadd(gv);
7668     op_append_elem(OP_GLOB, o, newGVOP(OP_GV, 0, gv));
7669     scalarkids(o);
7670     return o;
7671 }
7672
7673 OP *
7674 Perl_ck_grep(pTHX_ OP *o)
7675 {
7676     dVAR;
7677     LOGOP *gwop = NULL;
7678     OP *kid;
7679     const OPCODE type = o->op_type == OP_GREPSTART ? OP_GREPWHILE : OP_MAPWHILE;
7680     PADOFFSET offset;
7681
7682     PERL_ARGS_ASSERT_CK_GREP;
7683
7684     o->op_ppaddr = PL_ppaddr[OP_GREPSTART];
7685     /* don't allocate gwop here, as we may leak it if PL_parser->error_count > 0 */
7686
7687     if (o->op_flags & OPf_STACKED) {
7688         OP* k;
7689         o = ck_sort(o);
7690         kid = cUNOPx(cLISTOPo->op_first->op_sibling)->op_first;
7691         if (kid->op_type != OP_SCOPE && kid->op_type != OP_LEAVE)
7692             return no_fh_allowed(o);
7693         for (k = kid; k; k = k->op_next) {
7694             kid = k;
7695         }
7696         NewOp(1101, gwop, 1, LOGOP);
7697         kid->op_next = (OP*)gwop;
7698         o->op_flags &= ~OPf_STACKED;
7699     }
7700     kid = cLISTOPo->op_first->op_sibling;
7701     if (type == OP_MAPWHILE)
7702         list(kid);
7703     else
7704         scalar(kid);
7705     o = ck_fun(o);
7706     if (PL_parser && PL_parser->error_count)
7707         return o;
7708     kid = cLISTOPo->op_first->op_sibling;
7709     if (kid->op_type != OP_NULL)
7710         Perl_croak(aTHX_ "panic: ck_grep");
7711     kid = kUNOP->op_first;
7712
7713     if (!gwop)
7714         NewOp(1101, gwop, 1, LOGOP);
7715     gwop->op_type = type;
7716     gwop->op_ppaddr = PL_ppaddr[type];
7717     gwop->op_first = listkids(o);
7718     gwop->op_flags |= OPf_KIDS;
7719     gwop->op_other = LINKLIST(kid);
7720     kid->op_next = (OP*)gwop;
7721     offset = Perl_pad_findmy(aTHX_ STR_WITH_LEN("$_"), 0);
7722     if (offset == NOT_IN_PAD || PAD_COMPNAME_FLAGS_isOUR(offset)) {
7723         o->op_private = gwop->op_private = 0;
7724         gwop->op_targ = pad_alloc(type, SVs_PADTMP);
7725     }
7726     else {
7727         o->op_private = gwop->op_private = OPpGREP_LEX;
7728         gwop->op_targ = o->op_targ = offset;
7729     }
7730
7731     kid = cLISTOPo->op_first->op_sibling;
7732     if (!kid || !kid->op_sibling)
7733         return too_few_arguments(o,OP_DESC(o));
7734     for (kid = kid->op_sibling; kid; kid = kid->op_sibling)
7735         op_lvalue(kid, OP_GREPSTART);
7736
7737     return (OP*)gwop;
7738 }
7739
7740 OP *
7741 Perl_ck_index(pTHX_ OP *o)
7742 {
7743     PERL_ARGS_ASSERT_CK_INDEX;
7744
7745     if (o->op_flags & OPf_KIDS) {
7746         OP *kid = cLISTOPo->op_first->op_sibling;       /* get past pushmark */
7747         if (kid)
7748             kid = kid->op_sibling;                      /* get past "big" */
7749         if (kid && kid->op_type == OP_CONST)
7750             fbm_compile(((SVOP*)kid)->op_sv, 0);
7751     }
7752     return ck_fun(o);
7753 }
7754
7755 OP *
7756 Perl_ck_lfun(pTHX_ OP *o)
7757 {
7758     const OPCODE type = o->op_type;
7759
7760     PERL_ARGS_ASSERT_CK_LFUN;
7761
7762     return modkids(ck_fun(o), type);
7763 }
7764
7765 OP *
7766 Perl_ck_defined(pTHX_ OP *o)            /* 19990527 MJD */
7767 {
7768     PERL_ARGS_ASSERT_CK_DEFINED;
7769
7770     if ((o->op_flags & OPf_KIDS)) {
7771         switch (cUNOPo->op_first->op_type) {
7772         case OP_RV2AV:
7773             /* This is needed for
7774                if (defined %stash::)
7775                to work.   Do not break Tk.
7776                */
7777             break;                      /* Globals via GV can be undef */
7778         case OP_PADAV:
7779         case OP_AASSIGN:                /* Is this a good idea? */
7780             Perl_ck_warner_d(aTHX_ packWARN(WARN_DEPRECATED),
7781                            "defined(@array) is deprecated");
7782             Perl_ck_warner_d(aTHX_ packWARN(WARN_DEPRECATED),
7783                            "\t(Maybe you should just omit the defined()?)\n");
7784         break;
7785         case OP_RV2HV:
7786         case OP_PADHV:
7787             Perl_ck_warner_d(aTHX_ packWARN(WARN_DEPRECATED),
7788                            "defined(%%hash) is deprecated");
7789             Perl_ck_warner_d(aTHX_ packWARN(WARN_DEPRECATED),
7790                            "\t(Maybe you should just omit the defined()?)\n");
7791             break;
7792         default:
7793             /* no warning */
7794             break;
7795         }
7796     }
7797     return ck_rfun(o);
7798 }
7799
7800 OP *
7801 Perl_ck_readline(pTHX_ OP *o)
7802 {
7803     PERL_ARGS_ASSERT_CK_READLINE;
7804
7805     if (!(o->op_flags & OPf_KIDS)) {
7806         OP * const newop
7807             = newUNOP(OP_READLINE, 0, newGVOP(OP_GV, 0, PL_argvgv));
7808 #ifdef PERL_MAD
7809         op_getmad(o,newop,'O');
7810 #else
7811         op_free(o);
7812 #endif
7813         return newop;
7814     }
7815     return o;
7816 }
7817
7818 OP *
7819 Perl_ck_rfun(pTHX_ OP *o)
7820 {
7821     const OPCODE type = o->op_type;
7822
7823     PERL_ARGS_ASSERT_CK_RFUN;
7824
7825     return refkids(ck_fun(o), type);
7826 }
7827
7828 OP *
7829 Perl_ck_listiob(pTHX_ OP *o)
7830 {
7831     register OP *kid;
7832
7833     PERL_ARGS_ASSERT_CK_LISTIOB;
7834
7835     kid = cLISTOPo->op_first;
7836     if (!kid) {
7837         o = force_list(o);
7838         kid = cLISTOPo->op_first;
7839     }
7840     if (kid->op_type == OP_PUSHMARK)
7841         kid = kid->op_sibling;
7842     if (kid && o->op_flags & OPf_STACKED)
7843         kid = kid->op_sibling;
7844     else if (kid && !kid->op_sibling) {         /* print HANDLE; */
7845         if (kid->op_type == OP_CONST && kid->op_private & OPpCONST_BARE) {
7846             o->op_flags |= OPf_STACKED; /* make it a filehandle */
7847             kid = newUNOP(OP_RV2GV, OPf_REF, scalar(kid));
7848             cLISTOPo->op_first->op_sibling = kid;
7849             cLISTOPo->op_last = kid;
7850             kid = kid->op_sibling;
7851         }
7852     }
7853
7854     if (!kid)
7855         op_append_elem(o->op_type, o, newDEFSVOP());
7856
7857     return listkids(o);
7858 }
7859
7860 OP *
7861 Perl_ck_smartmatch(pTHX_ OP *o)
7862 {
7863     dVAR;
7864     PERL_ARGS_ASSERT_CK_SMARTMATCH;
7865     if (0 == (o->op_flags & OPf_SPECIAL)) {
7866         OP *first  = cBINOPo->op_first;
7867         OP *second = first->op_sibling;
7868         
7869         /* Implicitly take a reference to an array or hash */
7870         first->op_sibling = NULL;
7871         first = cBINOPo->op_first = ref_array_or_hash(first);
7872         second = first->op_sibling = ref_array_or_hash(second);
7873         
7874         /* Implicitly take a reference to a regular expression */
7875         if (first->op_type == OP_MATCH) {
7876             first->op_type = OP_QR;
7877             first->op_ppaddr = PL_ppaddr[OP_QR];
7878         }
7879         if (second->op_type == OP_MATCH) {
7880             second->op_type = OP_QR;
7881             second->op_ppaddr = PL_ppaddr[OP_QR];
7882         }
7883     }
7884     
7885     return o;
7886 }
7887
7888
7889 OP *
7890 Perl_ck_sassign(pTHX_ OP *o)
7891 {
7892     dVAR;
7893     OP * const kid = cLISTOPo->op_first;
7894
7895     PERL_ARGS_ASSERT_CK_SASSIGN;
7896
7897     /* has a disposable target? */
7898     if ((PL_opargs[kid->op_type] & OA_TARGLEX)
7899         && !(kid->op_flags & OPf_STACKED)
7900         /* Cannot steal the second time! */
7901         && !(kid->op_private & OPpTARGET_MY)
7902         /* Keep the full thing for madskills */
7903         && !PL_madskills
7904         )
7905     {
7906         OP * const kkid = kid->op_sibling;
7907
7908         /* Can just relocate the target. */
7909         if (kkid && kkid->op_type == OP_PADSV
7910             && !(kkid->op_private & OPpLVAL_INTRO))
7911         {
7912             kid->op_targ = kkid->op_targ;
7913             kkid->op_targ = 0;
7914             /* Now we do not need PADSV and SASSIGN. */
7915             kid->op_sibling = o->op_sibling;    /* NULL */
7916             cLISTOPo->op_first = NULL;
7917             op_free(o);
7918             op_free(kkid);
7919             kid->op_private |= OPpTARGET_MY;    /* Used for context settings */
7920             return kid;
7921         }
7922     }
7923     if (kid->op_sibling) {
7924         OP *kkid = kid->op_sibling;
7925         if (kkid->op_type == OP_PADSV
7926                 && (kkid->op_private & OPpLVAL_INTRO)
7927                 && SvPAD_STATE(*av_fetch(PL_comppad_name, kkid->op_targ, FALSE))) {
7928             const PADOFFSET target = kkid->op_targ;
7929             OP *const other = newOP(OP_PADSV,
7930                                     kkid->op_flags
7931                                     | ((kkid->op_private & ~OPpLVAL_INTRO) << 8));
7932             OP *const first = newOP(OP_NULL, 0);
7933             OP *const nullop = newCONDOP(0, first, o, other);
7934             OP *const condop = first->op_next;
7935             /* hijacking PADSTALE for uninitialized state variables */
7936             SvPADSTALE_on(PAD_SVl(target));
7937
7938             condop->op_type = OP_ONCE;
7939             condop->op_ppaddr = PL_ppaddr[OP_ONCE];
7940             condop->op_targ = target;
7941             other->op_targ = target;
7942
7943             /* Because we change the type of the op here, we will skip the
7944                assinment binop->op_last = binop->op_first->op_sibling; at the
7945                end of Perl_newBINOP(). So need to do it here. */
7946             cBINOPo->op_last = cBINOPo->op_first->op_sibling;
7947
7948             return nullop;
7949         }
7950     }
7951     return o;
7952 }
7953
7954 OP *
7955 Perl_ck_match(pTHX_ OP *o)
7956 {
7957     dVAR;
7958
7959     PERL_ARGS_ASSERT_CK_MATCH;
7960
7961     if (o->op_type != OP_QR && PL_compcv) {
7962         const PADOFFSET offset = Perl_pad_findmy(aTHX_ STR_WITH_LEN("$_"), 0);
7963         if (offset != NOT_IN_PAD && !(PAD_COMPNAME_FLAGS_isOUR(offset))) {
7964             o->op_targ = offset;
7965             o->op_private |= OPpTARGET_MY;
7966         }
7967     }
7968     if (o->op_type == OP_MATCH || o->op_type == OP_QR)
7969         o->op_private |= OPpRUNTIME;
7970     return o;
7971 }
7972
7973 OP *
7974 Perl_ck_method(pTHX_ OP *o)
7975 {
7976     OP * const kid = cUNOPo->op_first;
7977
7978     PERL_ARGS_ASSERT_CK_METHOD;
7979
7980     if (kid->op_type == OP_CONST) {
7981         SV* sv = kSVOP->op_sv;
7982         const char * const method = SvPVX_const(sv);
7983         if (!(strchr(method, ':') || strchr(method, '\''))) {
7984             OP *cmop;
7985             if (!SvREADONLY(sv) || !SvFAKE(sv)) {
7986                 sv = newSVpvn_share(method, SvCUR(sv), 0);
7987             }
7988             else {
7989                 kSVOP->op_sv = NULL;
7990             }
7991             cmop = newSVOP(OP_METHOD_NAMED, 0, sv);
7992 #ifdef PERL_MAD
7993             op_getmad(o,cmop,'O');
7994 #else
7995             op_free(o);
7996 #endif
7997             return cmop;
7998         }
7999     }
8000     return o;
8001 }
8002
8003 OP *
8004 Perl_ck_null(pTHX_ OP *o)
8005 {
8006     PERL_ARGS_ASSERT_CK_NULL;
8007     PERL_UNUSED_CONTEXT;
8008     return o;
8009 }
8010
8011 OP *
8012 Perl_ck_open(pTHX_ OP *o)
8013 {
8014     dVAR;
8015     HV * const table = GvHV(PL_hintgv);
8016
8017     PERL_ARGS_ASSERT_CK_OPEN;
8018
8019     if (table) {
8020         SV **svp = hv_fetchs(table, "open_IN", FALSE);
8021         if (svp && *svp) {
8022             STRLEN len = 0;
8023             const char *d = SvPV_const(*svp, len);
8024             const I32 mode = mode_from_discipline(d, len);
8025             if (mode & O_BINARY)
8026                 o->op_private |= OPpOPEN_IN_RAW;
8027             else if (mode & O_TEXT)
8028                 o->op_private |= OPpOPEN_IN_CRLF;
8029         }
8030
8031         svp = hv_fetchs(table, "open_OUT", FALSE);
8032         if (svp && *svp) {
8033             STRLEN len = 0;
8034             const char *d = SvPV_const(*svp, len);
8035             const I32 mode = mode_from_discipline(d, len);
8036             if (mode & O_BINARY)
8037                 o->op_private |= OPpOPEN_OUT_RAW;
8038             else if (mode & O_TEXT)
8039                 o->op_private |= OPpOPEN_OUT_CRLF;
8040         }
8041     }
8042     if (o->op_type == OP_BACKTICK) {
8043         if (!(o->op_flags & OPf_KIDS)) {
8044             OP * const newop = newUNOP(OP_BACKTICK, 0, newDEFSVOP());
8045 #ifdef PERL_MAD
8046             op_getmad(o,newop,'O');
8047 #else
8048             op_free(o);
8049 #endif
8050             return newop;
8051         }
8052         return o;
8053     }
8054     {
8055          /* In case of three-arg dup open remove strictness
8056           * from the last arg if it is a bareword. */
8057          OP * const first = cLISTOPx(o)->op_first; /* The pushmark. */
8058          OP * const last  = cLISTOPx(o)->op_last;  /* The bareword. */
8059          OP *oa;
8060          const char *mode;
8061
8062          if ((last->op_type == OP_CONST) &&             /* The bareword. */
8063              (last->op_private & OPpCONST_BARE) &&
8064              (last->op_private & OPpCONST_STRICT) &&
8065              (oa = first->op_sibling) &&                /* The fh. */
8066              (oa = oa->op_sibling) &&                   /* The mode. */
8067              (oa->op_type == OP_CONST) &&
8068              SvPOK(((SVOP*)oa)->op_sv) &&
8069              (mode = SvPVX_const(((SVOP*)oa)->op_sv)) &&
8070              mode[0] == '>' && mode[1] == '&' &&        /* A dup open. */
8071              (last == oa->op_sibling))                  /* The bareword. */
8072               last->op_private &= ~OPpCONST_STRICT;
8073     }
8074     return ck_fun(o);
8075 }
8076
8077 OP *
8078 Perl_ck_repeat(pTHX_ OP *o)
8079 {
8080     PERL_ARGS_ASSERT_CK_REPEAT;
8081
8082     if (cBINOPo->op_first->op_flags & OPf_PARENS) {
8083         o->op_private |= OPpREPEAT_DOLIST;
8084         cBINOPo->op_first = force_list(cBINOPo->op_first);
8085     }
8086     else
8087         scalar(o);
8088     return o;
8089 }
8090
8091 OP *
8092 Perl_ck_require(pTHX_ OP *o)
8093 {
8094     dVAR;
8095     GV* gv = NULL;
8096
8097     PERL_ARGS_ASSERT_CK_REQUIRE;
8098
8099     if (o->op_flags & OPf_KIDS) {       /* Shall we supply missing .pm? */
8100         SVOP * const kid = (SVOP*)cUNOPo->op_first;
8101
8102         if (kid->op_type == OP_CONST && (kid->op_private & OPpCONST_BARE)) {
8103             SV * const sv = kid->op_sv;
8104             U32 was_readonly = SvREADONLY(sv);
8105             char *s;
8106             STRLEN len;
8107             const char *end;
8108
8109             if (was_readonly) {
8110                 if (SvFAKE(sv)) {
8111                     sv_force_normal_flags(sv, 0);
8112                     assert(!SvREADONLY(sv));
8113                     was_readonly = 0;
8114                 } else {
8115                     SvREADONLY_off(sv);
8116                 }
8117             }   
8118
8119             s = SvPVX(sv);
8120             len = SvCUR(sv);
8121             end = s + len;
8122             for (; s < end; s++) {
8123                 if (*s == ':' && s[1] == ':') {
8124                     *s = '/';
8125                     Move(s+2, s+1, end - s - 1, char);
8126                     --end;
8127                 }
8128             }
8129             SvEND_set(sv, end);
8130             sv_catpvs(sv, ".pm");
8131             SvFLAGS(sv) |= was_readonly;
8132         }
8133     }
8134
8135     if (!(o->op_flags & OPf_SPECIAL)) { /* Wasn't written as CORE::require */
8136         /* handle override, if any */
8137         gv = gv_fetchpvs("require", GV_NOTQUAL, SVt_PVCV);
8138         if (!(gv && GvCVu(gv) && GvIMPORTED_CV(gv))) {
8139             GV * const * const gvp = (GV**)hv_fetchs(PL_globalstash, "require", FALSE);
8140             gv = gvp ? *gvp : NULL;
8141         }
8142     }
8143
8144     if (gv && GvCVu(gv) && GvIMPORTED_CV(gv)) {
8145         OP * const kid = cUNOPo->op_first;
8146         OP * newop;
8147
8148         cUNOPo->op_first = 0;
8149 #ifndef PERL_MAD
8150         op_free(o);
8151 #endif
8152         newop = ck_subr(newUNOP(OP_ENTERSUB, OPf_STACKED,
8153                                 op_append_elem(OP_LIST, kid,
8154                                             scalar(newUNOP(OP_RV2CV, 0,
8155                                                            newGVOP(OP_GV, 0,
8156                                                                    gv))))));
8157         op_getmad(o,newop,'O');
8158         return newop;
8159     }
8160
8161     return scalar(ck_fun(o));
8162 }
8163
8164 OP *
8165 Perl_ck_return(pTHX_ OP *o)
8166 {
8167     dVAR;
8168     OP *kid;
8169
8170     PERL_ARGS_ASSERT_CK_RETURN;
8171
8172     kid = cLISTOPo->op_first->op_sibling;
8173     if (CvLVALUE(PL_compcv)) {
8174         for (; kid; kid = kid->op_sibling)
8175             op_lvalue(kid, OP_LEAVESUBLV);
8176     } else {
8177         for (; kid; kid = kid->op_sibling)
8178             if ((kid->op_type == OP_NULL)
8179                 && ((kid->op_flags & (OPf_SPECIAL|OPf_KIDS)) == (OPf_SPECIAL|OPf_KIDS))) {
8180                 /* This is a do block */
8181                 OP *op = kUNOP->op_first;
8182                 if (op->op_type == OP_LEAVE && op->op_flags & OPf_KIDS) {
8183                     op = cUNOPx(op)->op_first;
8184                     assert(op->op_type == OP_ENTER && !(op->op_flags & OPf_SPECIAL));
8185                     /* Force the use of the caller's context */
8186                     op->op_flags |= OPf_SPECIAL;
8187                 }
8188             }
8189     }
8190
8191     return o;
8192 }
8193
8194 OP *
8195 Perl_ck_select(pTHX_ OP *o)
8196 {
8197     dVAR;
8198     OP* kid;
8199
8200     PERL_ARGS_ASSERT_CK_SELECT;
8201
8202     if (o->op_flags & OPf_KIDS) {
8203         kid = cLISTOPo->op_first->op_sibling;   /* get past pushmark */
8204         if (kid && kid->op_sibling) {
8205             o->op_type = OP_SSELECT;
8206             o->op_ppaddr = PL_ppaddr[OP_SSELECT];
8207             o = ck_fun(o);
8208             return fold_constants(o);
8209         }
8210     }
8211     o = ck_fun(o);
8212     kid = cLISTOPo->op_first->op_sibling;    /* get past pushmark */
8213     if (kid && kid->op_type == OP_RV2GV)
8214         kid->op_private &= ~HINT_STRICT_REFS;
8215     return o;
8216 }
8217
8218 OP *
8219 Perl_ck_shift(pTHX_ OP *o)
8220 {
8221     dVAR;
8222     const I32 type = o->op_type;
8223
8224     PERL_ARGS_ASSERT_CK_SHIFT;
8225
8226     if (!(o->op_flags & OPf_KIDS)) {
8227         OP *argop;
8228
8229         if (!CvUNIQUE(PL_compcv)) {
8230             o->op_flags |= OPf_SPECIAL;
8231             return o;
8232         }
8233
8234         argop = newUNOP(OP_RV2AV, 0, scalar(newGVOP(OP_GV, 0, PL_argvgv)));
8235 #ifdef PERL_MAD
8236         {
8237             OP * const oldo = o;
8238             o = newUNOP(type, 0, scalar(argop));
8239             op_getmad(oldo,o,'O');
8240             return o;
8241         }
8242 #else
8243         op_free(o);
8244         return newUNOP(type, 0, scalar(argop));
8245 #endif
8246     }
8247     return scalar(modkids(ck_push(o), type));
8248 }
8249
8250 OP *
8251 Perl_ck_sort(pTHX_ OP *o)
8252 {
8253     dVAR;
8254     OP *firstkid;
8255
8256     PERL_ARGS_ASSERT_CK_SORT;
8257
8258     if (o->op_type == OP_SORT && (PL_hints & HINT_LOCALIZE_HH) != 0) {
8259         HV * const hinthv = GvHV(PL_hintgv);
8260         if (hinthv) {
8261             SV ** const svp = hv_fetchs(hinthv, "sort", FALSE);
8262             if (svp) {
8263                 const I32 sorthints = (I32)SvIV(*svp);
8264                 if ((sorthints & HINT_SORT_QUICKSORT) != 0)
8265                     o->op_private |= OPpSORT_QSORT;
8266                 if ((sorthints & HINT_SORT_STABLE) != 0)
8267                     o->op_private |= OPpSORT_STABLE;
8268             }
8269         }
8270     }
8271
8272     if (o->op_type == OP_SORT && o->op_flags & OPf_STACKED)
8273         simplify_sort(o);
8274     firstkid = cLISTOPo->op_first->op_sibling;          /* get past pushmark */
8275     if (o->op_flags & OPf_STACKED) {                    /* may have been cleared */
8276         OP *k = NULL;
8277         OP *kid = cUNOPx(firstkid)->op_first;           /* get past null */
8278
8279         if (kid->op_type == OP_SCOPE || kid->op_type == OP_LEAVE) {
8280             LINKLIST(kid);
8281             if (kid->op_type == OP_SCOPE) {
8282                 k = kid->op_next;
8283                 kid->op_next = 0;
8284             }
8285             else if (kid->op_type == OP_LEAVE) {
8286                 if (o->op_type == OP_SORT) {
8287                     op_null(kid);                       /* wipe out leave */
8288                     kid->op_next = kid;
8289
8290                     for (k = kLISTOP->op_first->op_next; k; k = k->op_next) {
8291                         if (k->op_next == kid)
8292                             k->op_next = 0;
8293                         /* don't descend into loops */
8294                         else if (k->op_type == OP_ENTERLOOP
8295                                  || k->op_type == OP_ENTERITER)
8296                         {
8297                             k = cLOOPx(k)->op_lastop;
8298                         }
8299                     }
8300                 }
8301                 else
8302                     kid->op_next = 0;           /* just disconnect the leave */
8303                 k = kLISTOP->op_first;
8304             }
8305             CALL_PEEP(k);
8306
8307             kid = firstkid;
8308             if (o->op_type == OP_SORT) {
8309                 /* provide scalar context for comparison function/block */
8310                 kid = scalar(kid);
8311                 kid->op_next = kid;
8312             }
8313             else
8314                 kid->op_next = k;
8315             o->op_flags |= OPf_SPECIAL;
8316         }
8317         else if (kid->op_type == OP_RV2SV || kid->op_type == OP_PADSV)
8318             op_null(firstkid);
8319
8320         firstkid = firstkid->op_sibling;
8321     }
8322
8323     /* provide list context for arguments */
8324     if (o->op_type == OP_SORT)
8325         list(firstkid);
8326
8327     return o;
8328 }
8329
8330 STATIC void
8331 S_simplify_sort(pTHX_ OP *o)
8332 {
8333     dVAR;
8334     register OP *kid = cLISTOPo->op_first->op_sibling;  /* get past pushmark */
8335     OP *k;
8336     int descending;
8337     GV *gv;
8338     const char *gvname;
8339
8340     PERL_ARGS_ASSERT_SIMPLIFY_SORT;
8341
8342     if (!(o->op_flags & OPf_STACKED))
8343         return;
8344     GvMULTI_on(gv_fetchpvs("a", GV_ADD|GV_NOTQUAL, SVt_PV));
8345     GvMULTI_on(gv_fetchpvs("b", GV_ADD|GV_NOTQUAL, SVt_PV));
8346     kid = kUNOP->op_first;                              /* get past null */
8347     if (kid->op_type != OP_SCOPE)
8348         return;
8349     kid = kLISTOP->op_last;                             /* get past scope */
8350     switch(kid->op_type) {
8351         case OP_NCMP:
8352         case OP_I_NCMP:
8353         case OP_SCMP:
8354             break;
8355         default:
8356             return;
8357     }
8358     k = kid;                                            /* remember this node*/
8359     if (kBINOP->op_first->op_type != OP_RV2SV)
8360         return;
8361     kid = kBINOP->op_first;                             /* get past cmp */
8362     if (kUNOP->op_first->op_type != OP_GV)
8363         return;
8364     kid = kUNOP->op_first;                              /* get past rv2sv */
8365     gv = kGVOP_gv;
8366     if (GvSTASH(gv) != PL_curstash)
8367         return;
8368     gvname = GvNAME(gv);
8369     if (*gvname == 'a' && gvname[1] == '\0')
8370         descending = 0;
8371     else if (*gvname == 'b' && gvname[1] == '\0')
8372         descending = 1;
8373     else
8374         return;
8375
8376     kid = k;                                            /* back to cmp */
8377     if (kBINOP->op_last->op_type != OP_RV2SV)
8378         return;
8379     kid = kBINOP->op_last;                              /* down to 2nd arg */
8380     if (kUNOP->op_first->op_type != OP_GV)
8381         return;
8382     kid = kUNOP->op_first;                              /* get past rv2sv */
8383     gv = kGVOP_gv;
8384     if (GvSTASH(gv) != PL_curstash)
8385         return;
8386     gvname = GvNAME(gv);
8387     if ( descending
8388          ? !(*gvname == 'a' && gvname[1] == '\0')
8389          : !(*gvname == 'b' && gvname[1] == '\0'))
8390         return;
8391     o->op_flags &= ~(OPf_STACKED | OPf_SPECIAL);
8392     if (descending)
8393         o->op_private |= OPpSORT_DESCEND;
8394     if (k->op_type == OP_NCMP)
8395         o->op_private |= OPpSORT_NUMERIC;
8396     if (k->op_type == OP_I_NCMP)
8397         o->op_private |= OPpSORT_NUMERIC | OPpSORT_INTEGER;
8398     kid = cLISTOPo->op_first->op_sibling;
8399     cLISTOPo->op_first->op_sibling = kid->op_sibling; /* bypass old block */
8400 #ifdef PERL_MAD
8401     op_getmad(kid,o,'S');                             /* then delete it */
8402 #else
8403     op_free(kid);                                     /* then delete it */
8404 #endif
8405 }
8406
8407 OP *
8408 Perl_ck_split(pTHX_ OP *o)
8409 {
8410     dVAR;
8411     register OP *kid;
8412
8413     PERL_ARGS_ASSERT_CK_SPLIT;
8414
8415     if (o->op_flags & OPf_STACKED)
8416         return no_fh_allowed(o);
8417
8418     kid = cLISTOPo->op_first;
8419     if (kid->op_type != OP_NULL)
8420         Perl_croak(aTHX_ "panic: ck_split");
8421     kid = kid->op_sibling;
8422     op_free(cLISTOPo->op_first);
8423     cLISTOPo->op_first = kid;
8424     if (!kid) {
8425         cLISTOPo->op_first = kid = newSVOP(OP_CONST, 0, newSVpvs(" "));
8426         cLISTOPo->op_last = kid; /* There was only one element previously */
8427     }
8428
8429     if (kid->op_type != OP_MATCH || kid->op_flags & OPf_STACKED) {
8430         OP * const sibl = kid->op_sibling;
8431         kid->op_sibling = 0;
8432         kid = pmruntime( newPMOP(OP_MATCH, OPf_SPECIAL), kid, 0);
8433         if (cLISTOPo->op_first == cLISTOPo->op_last)
8434             cLISTOPo->op_last = kid;
8435         cLISTOPo->op_first = kid;
8436         kid->op_sibling = sibl;
8437     }
8438
8439     kid->op_type = OP_PUSHRE;
8440     kid->op_ppaddr = PL_ppaddr[OP_PUSHRE];
8441     scalar(kid);
8442     if (((PMOP *)kid)->op_pmflags & PMf_GLOBAL) {
8443       Perl_ck_warner(aTHX_ packWARN(WARN_REGEXP),
8444                      "Use of /g modifier is meaningless in split");
8445     }
8446
8447     if (!kid->op_sibling)
8448         op_append_elem(OP_SPLIT, o, newDEFSVOP());
8449
8450     kid = kid->op_sibling;
8451     scalar(kid);
8452
8453     if (!kid->op_sibling)
8454         op_append_elem(OP_SPLIT, o, newSVOP(OP_CONST, 0, newSViv(0)));
8455     assert(kid->op_sibling);
8456
8457     kid = kid->op_sibling;
8458     scalar(kid);
8459
8460     if (kid->op_sibling)
8461         return too_many_arguments(o,OP_DESC(o));
8462
8463     return o;
8464 }
8465
8466 OP *
8467 Perl_ck_join(pTHX_ OP *o)
8468 {
8469     const OP * const kid = cLISTOPo->op_first->op_sibling;
8470
8471     PERL_ARGS_ASSERT_CK_JOIN;
8472
8473     if (kid && kid->op_type == OP_MATCH) {
8474         if (ckWARN(WARN_SYNTAX)) {
8475             const REGEXP *re = PM_GETRE(kPMOP);
8476             const char *pmstr = re ? RX_PRECOMP_const(re) : "STRING";
8477             const STRLEN len = re ? RX_PRELEN(re) : 6;
8478             Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
8479                         "/%.*s/ should probably be written as \"%.*s\"",
8480                         (int)len, pmstr, (int)len, pmstr);
8481         }
8482     }
8483     return ck_fun(o);
8484 }
8485
8486 /*
8487 =for apidoc Am|CV *|rv2cv_op_cv|OP *cvop|U32 flags
8488
8489 Examines an op, which is expected to identify a subroutine at runtime,
8490 and attempts to determine at compile time which subroutine it identifies.
8491 This is normally used during Perl compilation to determine whether
8492 a prototype can be applied to a function call.  I<cvop> is the op
8493 being considered, normally an C<rv2cv> op.  A pointer to the identified
8494 subroutine is returned, if it could be determined statically, and a null
8495 pointer is returned if it was not possible to determine statically.
8496
8497 Currently, the subroutine can be identified statically if the RV that the
8498 C<rv2cv> is to operate on is provided by a suitable C<gv> or C<const> op.
8499 A C<gv> op is suitable if the GV's CV slot is populated.  A C<const> op is
8500 suitable if the constant value must be an RV pointing to a CV.  Details of
8501 this process may change in future versions of Perl.  If the C<rv2cv> op
8502 has the C<OPpENTERSUB_AMPER> flag set then no attempt is made to identify
8503 the subroutine statically: this flag is used to suppress compile-time
8504 magic on a subroutine call, forcing it to use default runtime behaviour.
8505
8506 If I<flags> has the bit C<RV2CVOPCV_MARK_EARLY> set, then the handling
8507 of a GV reference is modified.  If a GV was examined and its CV slot was
8508 found to be empty, then the C<gv> op has the C<OPpEARLY_CV> flag set.
8509 If the op is not optimised away, and the CV slot is later populated with
8510 a subroutine having a prototype, that flag eventually triggers the warning
8511 "called too early to check prototype".
8512
8513 If I<flags> has the bit C<RV2CVOPCV_RETURN_NAME_GV> set, then instead
8514 of returning a pointer to the subroutine it returns a pointer to the
8515 GV giving the most appropriate name for the subroutine in this context.
8516 Normally this is just the C<CvGV> of the subroutine, but for an anonymous
8517 (C<CvANON>) subroutine that is referenced through a GV it will be the
8518 referencing GV.  The resulting C<GV*> is cast to C<CV*> to be returned.
8519 A null pointer is returned as usual if there is no statically-determinable
8520 subroutine.
8521
8522 =cut
8523 */
8524
8525 CV *
8526 Perl_rv2cv_op_cv(pTHX_ OP *cvop, U32 flags)
8527 {
8528     OP *rvop;
8529     CV *cv;
8530     GV *gv;
8531     PERL_ARGS_ASSERT_RV2CV_OP_CV;
8532     if (flags & ~(RV2CVOPCV_MARK_EARLY|RV2CVOPCV_RETURN_NAME_GV))
8533         Perl_croak(aTHX_ "panic: rv2cv_op_cv bad flags %x", (unsigned)flags);
8534     if (cvop->op_type != OP_RV2CV)
8535         return NULL;
8536     if (cvop->op_private & OPpENTERSUB_AMPER)
8537         return NULL;
8538     if (!(cvop->op_flags & OPf_KIDS))
8539         return NULL;
8540     rvop = cUNOPx(cvop)->op_first;
8541     switch (rvop->op_type) {
8542         case OP_GV: {
8543             gv = cGVOPx_gv(rvop);
8544             cv = GvCVu(gv);
8545             if (!cv) {
8546                 if (flags & RV2CVOPCV_MARK_EARLY)
8547                     rvop->op_private |= OPpEARLY_CV;
8548                 return NULL;
8549             }
8550         } break;
8551         case OP_CONST: {
8552             SV *rv = cSVOPx_sv(rvop);
8553             if (!SvROK(rv))
8554                 return NULL;
8555             cv = (CV*)SvRV(rv);
8556             gv = NULL;
8557         } break;
8558         default: {
8559             return NULL;
8560         } break;
8561     }
8562     if (SvTYPE((SV*)cv) != SVt_PVCV)
8563         return NULL;
8564     if (flags & RV2CVOPCV_RETURN_NAME_GV) {
8565         if (!CvANON(cv) || !gv)
8566             gv = CvGV(cv);
8567         return (CV*)gv;
8568     } else {
8569         return cv;
8570     }
8571 }
8572
8573 /*
8574 =for apidoc Am|OP *|ck_entersub_args_list|OP *entersubop
8575
8576 Performs the default fixup of the arguments part of an C<entersub>
8577 op tree.  This consists of applying list context to each of the
8578 argument ops.  This is the standard treatment used on a call marked
8579 with C<&>, or a method call, or a call through a subroutine reference,
8580 or any other call where the callee can't be identified at compile time,
8581 or a call where the callee has no prototype.
8582
8583 =cut
8584 */
8585
8586 OP *
8587 Perl_ck_entersub_args_list(pTHX_ OP *entersubop)
8588 {
8589     OP *aop;
8590     PERL_ARGS_ASSERT_CK_ENTERSUB_ARGS_LIST;
8591     aop = cUNOPx(entersubop)->op_first;
8592     if (!aop->op_sibling)
8593         aop = cUNOPx(aop)->op_first;
8594     for (aop = aop->op_sibling; aop->op_sibling; aop = aop->op_sibling) {
8595         if (!(PL_madskills && aop->op_type == OP_STUB)) {
8596             list(aop);
8597             op_lvalue(aop, OP_ENTERSUB);
8598         }
8599     }
8600     return entersubop;
8601 }
8602
8603 /*
8604 =for apidoc Am|OP *|ck_entersub_args_proto|OP *entersubop|GV *namegv|SV *protosv
8605
8606 Performs the fixup of the arguments part of an C<entersub> op tree
8607 based on a subroutine prototype.  This makes various modifications to
8608 the argument ops, from applying context up to inserting C<refgen> ops,
8609 and checking the number and syntactic types of arguments, as directed by
8610 the prototype.  This is the standard treatment used on a subroutine call,
8611 not marked with C<&>, where the callee can be identified at compile time
8612 and has a prototype.
8613
8614 I<protosv> supplies the subroutine prototype to be applied to the call.
8615 It may be a normal defined scalar, of which the string value will be used.
8616 Alternatively, for convenience, it may be a subroutine object (a C<CV*>
8617 that has been cast to C<SV*>) which has a prototype.  The prototype
8618 supplied, in whichever form, does not need to match the actual callee
8619 referenced by the op tree.
8620
8621 If the argument ops disagree with the prototype, for example by having
8622 an unacceptable number of arguments, a valid op tree is returned anyway.
8623 The error is reflected in the parser state, normally resulting in a single
8624 exception at the top level of parsing which covers all the compilation
8625 errors that occurred.  In the error message, the callee is referred to
8626 by the name defined by the I<namegv> parameter.
8627
8628 =cut
8629 */
8630
8631 OP *
8632 Perl_ck_entersub_args_proto(pTHX_ OP *entersubop, GV *namegv, SV *protosv)
8633 {
8634     STRLEN proto_len;
8635     const char *proto, *proto_end;
8636     OP *aop, *prev, *cvop;
8637     int optional = 0;
8638     I32 arg = 0;
8639     I32 contextclass = 0;
8640     const char *e = NULL;
8641     PERL_ARGS_ASSERT_CK_ENTERSUB_ARGS_PROTO;
8642     if (SvTYPE(protosv) == SVt_PVCV ? !SvPOK(protosv) : !SvOK(protosv))
8643         Perl_croak(aTHX_ "panic: ck_entersub_args_proto CV with no proto");
8644     proto = SvPV(protosv, proto_len);
8645     proto_end = proto + proto_len;
8646     aop = cUNOPx(entersubop)->op_first;
8647     if (!aop->op_sibling)
8648         aop = cUNOPx(aop)->op_first;
8649     prev = aop;
8650     aop = aop->op_sibling;
8651     for (cvop = aop; cvop->op_sibling; cvop = cvop->op_sibling) ;
8652     while (aop != cvop) {
8653         OP* o3;
8654         if (PL_madskills && aop->op_type == OP_STUB) {
8655             aop = aop->op_sibling;
8656             continue;
8657         }
8658         if (PL_madskills && aop->op_type == OP_NULL)
8659             o3 = ((UNOP*)aop)->op_first;
8660         else
8661             o3 = aop;
8662
8663         if (proto >= proto_end)
8664             return too_many_arguments(entersubop, gv_ename(namegv));
8665
8666         switch (*proto) {
8667             case ';':
8668                 optional = 1;
8669                 proto++;
8670                 continue;
8671             case '_':
8672                 /* _ must be at the end */
8673                 if (proto[1] && proto[1] != ';')
8674                     goto oops;
8675             case '$':
8676                 proto++;
8677                 arg++;
8678                 scalar(aop);
8679                 break;
8680             case '%':
8681             case '@':
8682                 list(aop);
8683                 arg++;
8684                 break;
8685             case '&':
8686                 proto++;
8687                 arg++;
8688                 if (o3->op_type != OP_REFGEN && o3->op_type != OP_UNDEF)
8689                     bad_type(arg,
8690                             arg == 1 ? "block or sub {}" : "sub {}",
8691                             gv_ename(namegv), o3);
8692                 break;
8693             case '*':
8694                 /* '*' allows any scalar type, including bareword */
8695                 proto++;
8696                 arg++;
8697                 if (o3->op_type == OP_RV2GV)
8698                     goto wrapref;       /* autoconvert GLOB -> GLOBref */
8699                 else if (o3->op_type == OP_CONST)
8700                     o3->op_private &= ~OPpCONST_STRICT;
8701                 else if (o3->op_type == OP_ENTERSUB) {
8702                     /* accidental subroutine, revert to bareword */
8703                     OP *gvop = ((UNOP*)o3)->op_first;
8704                     if (gvop && gvop->op_type == OP_NULL) {
8705                         gvop = ((UNOP*)gvop)->op_first;
8706                         if (gvop) {
8707                             for (; gvop->op_sibling; gvop = gvop->op_sibling)
8708                                 ;
8709                             if (gvop &&
8710                                     (gvop->op_private & OPpENTERSUB_NOPAREN) &&
8711                                     (gvop = ((UNOP*)gvop)->op_first) &&
8712                                     gvop->op_type == OP_GV)
8713                             {
8714                                 GV * const gv = cGVOPx_gv(gvop);
8715                                 OP * const sibling = aop->op_sibling;
8716                                 SV * const n = newSVpvs("");
8717 #ifdef PERL_MAD
8718                                 OP * const oldaop = aop;
8719 #else
8720                                 op_free(aop);
8721 #endif
8722                                 gv_fullname4(n, gv, "", FALSE);
8723                                 aop = newSVOP(OP_CONST, 0, n);
8724                                 op_getmad(oldaop,aop,'O');
8725                                 prev->op_sibling = aop;
8726                                 aop->op_sibling = sibling;
8727                             }
8728                         }
8729                     }
8730                 }
8731                 scalar(aop);
8732                 break;
8733             case '+':
8734                 proto++;
8735                 arg++;
8736                 if (o3->op_type == OP_RV2AV ||
8737                     o3->op_type == OP_PADAV ||
8738                     o3->op_type == OP_RV2HV ||
8739                     o3->op_type == OP_PADHV
8740                 ) {
8741                     goto wrapref;
8742                 }
8743                 scalar(aop);
8744                 break;
8745             case '[': case ']':
8746                 goto oops;
8747                 break;
8748             case '\\':
8749                 proto++;
8750                 arg++;
8751             again:
8752                 switch (*proto++) {
8753                     case '[':
8754                         if (contextclass++ == 0) {
8755                             e = strchr(proto, ']');
8756                             if (!e || e == proto)
8757                                 goto oops;
8758                         }
8759                         else
8760                             goto oops;
8761                         goto again;
8762                         break;
8763                     case ']':
8764                         if (contextclass) {
8765                             const char *p = proto;
8766                             const char *const end = proto;
8767                             contextclass = 0;
8768                             while (*--p != '[') {}
8769                             bad_type(arg, Perl_form(aTHX_ "one of %.*s",
8770                                         (int)(end - p), p),
8771                                     gv_ename(namegv), o3);
8772                         } else
8773                             goto oops;
8774                         break;
8775                     case '*':
8776                         if (o3->op_type == OP_RV2GV)
8777                             goto wrapref;
8778                         if (!contextclass)
8779                             bad_type(arg, "symbol", gv_ename(namegv), o3);
8780                         break;
8781                     case '&':
8782                         if (o3->op_type == OP_ENTERSUB)
8783                             goto wrapref;
8784                         if (!contextclass)
8785                             bad_type(arg, "subroutine entry", gv_ename(namegv),
8786                                     o3);
8787                         break;
8788                     case '$':
8789                         if (o3->op_type == OP_RV2SV ||
8790                                 o3->op_type == OP_PADSV ||
8791                                 o3->op_type == OP_HELEM ||
8792                                 o3->op_type == OP_AELEM)
8793                             goto wrapref;
8794                         if (!contextclass)
8795                             bad_type(arg, "scalar", gv_ename(namegv), o3);
8796                         break;
8797                     case '@':
8798                         if (o3->op_type == OP_RV2AV ||
8799                                 o3->op_type == OP_PADAV)
8800                             goto wrapref;
8801                         if (!contextclass)
8802                             bad_type(arg, "array", gv_ename(namegv), o3);
8803                         break;
8804                     case '%':
8805                         if (o3->op_type == OP_RV2HV ||
8806                                 o3->op_type == OP_PADHV)
8807                             goto wrapref;
8808                         if (!contextclass)
8809                             bad_type(arg, "hash", gv_ename(namegv), o3);
8810                         break;
8811                     wrapref:
8812                         {
8813                             OP* const kid = aop;
8814                             OP* const sib = kid->op_sibling;
8815                             kid->op_sibling = 0;
8816                             aop = newUNOP(OP_REFGEN, 0, kid);
8817                             aop->op_sibling = sib;
8818                             prev->op_sibling = aop;
8819                         }
8820                         if (contextclass && e) {
8821                             proto = e + 1;
8822                             contextclass = 0;
8823                         }
8824                         break;
8825                     default: goto oops;
8826                 }
8827                 if (contextclass)
8828                     goto again;
8829                 break;
8830             case ' ':
8831                 proto++;
8832                 continue;
8833             default:
8834             oops:
8835                 Perl_croak(aTHX_ "Malformed prototype for %s: %"SVf,
8836                         gv_ename(namegv), SVfARG(protosv));
8837         }
8838
8839         op_lvalue(aop, OP_ENTERSUB);
8840         prev = aop;
8841         aop = aop->op_sibling;
8842     }
8843     if (aop == cvop && *proto == '_') {
8844         /* generate an access to $_ */
8845         aop = newDEFSVOP();
8846         aop->op_sibling = prev->op_sibling;
8847         prev->op_sibling = aop; /* instead of cvop */
8848     }
8849     if (!optional && proto_end > proto &&
8850         (*proto != '@' && *proto != '%' && *proto != ';' && *proto != '_'))
8851         return too_few_arguments(entersubop, gv_ename(namegv));
8852     return entersubop;
8853 }
8854
8855 /*
8856 =for apidoc Am|OP *|ck_entersub_args_proto_or_list|OP *entersubop|GV *namegv|SV *protosv
8857
8858 Performs the fixup of the arguments part of an C<entersub> op tree either
8859 based on a subroutine prototype or using default list-context processing.
8860 This is the standard treatment used on a subroutine call, not marked
8861 with C<&>, where the callee can be identified at compile time.
8862
8863 I<protosv> supplies the subroutine prototype to be applied to the call,
8864 or indicates that there is no prototype.  It may be a normal scalar,
8865 in which case if it is defined then the string value will be used
8866 as a prototype, and if it is undefined then there is no prototype.
8867 Alternatively, for convenience, it may be a subroutine object (a C<CV*>
8868 that has been cast to C<SV*>), of which the prototype will be used if it
8869 has one.  The prototype (or lack thereof) supplied, in whichever form,
8870 does not need to match the actual callee referenced by the op tree.
8871
8872 If the argument ops disagree with the prototype, for example by having
8873 an unacceptable number of arguments, a valid op tree is returned anyway.
8874 The error is reflected in the parser state, normally resulting in a single
8875 exception at the top level of parsing which covers all the compilation
8876 errors that occurred.  In the error message, the callee is referred to
8877 by the name defined by the I<namegv> parameter.
8878
8879 =cut
8880 */
8881
8882 OP *
8883 Perl_ck_entersub_args_proto_or_list(pTHX_ OP *entersubop,
8884         GV *namegv, SV *protosv)
8885 {
8886     PERL_ARGS_ASSERT_CK_ENTERSUB_ARGS_PROTO_OR_LIST;
8887     if (SvTYPE(protosv) == SVt_PVCV ? SvPOK(protosv) : SvOK(protosv))
8888         return ck_entersub_args_proto(entersubop, namegv, protosv);
8889     else
8890         return ck_entersub_args_list(entersubop);
8891 }
8892
8893 /*
8894 =for apidoc Am|void|cv_get_call_checker|CV *cv|Perl_call_checker *ckfun_p|SV **ckobj_p
8895
8896 Retrieves the function that will be used to fix up a call to I<cv>.
8897 Specifically, the function is applied to an C<entersub> op tree for a
8898 subroutine call, not marked with C<&>, where the callee can be identified
8899 at compile time as I<cv>.
8900
8901 The C-level function pointer is returned in I<*ckfun_p>, and an SV
8902 argument for it is returned in I<*ckobj_p>.  The function is intended
8903 to be called in this manner:
8904
8905     entersubop = (*ckfun_p)(aTHX_ entersubop, namegv, (*ckobj_p));
8906
8907 In this call, I<entersubop> is a pointer to the C<entersub> op,
8908 which may be replaced by the check function, and I<namegv> is a GV
8909 supplying the name that should be used by the check function to refer
8910 to the callee of the C<entersub> op if it needs to emit any diagnostics.
8911 It is permitted to apply the check function in non-standard situations,
8912 such as to a call to a different subroutine or to a method call.
8913
8914 By default, the function is
8915 L<Perl_ck_entersub_args_proto_or_list|/ck_entersub_args_proto_or_list>,
8916 and the SV parameter is I<cv> itself.  This implements standard
8917 prototype processing.  It can be changed, for a particular subroutine,
8918 by L</cv_set_call_checker>.
8919
8920 =cut
8921 */
8922
8923 void
8924 Perl_cv_get_call_checker(pTHX_ CV *cv, Perl_call_checker *ckfun_p, SV **ckobj_p)
8925 {
8926     MAGIC *callmg;
8927     PERL_ARGS_ASSERT_CV_GET_CALL_CHECKER;
8928     callmg = SvMAGICAL((SV*)cv) ? mg_find((SV*)cv, PERL_MAGIC_checkcall) : NULL;
8929     if (callmg) {
8930         *ckfun_p = DPTR2FPTR(Perl_call_checker, callmg->mg_ptr);
8931         *ckobj_p = callmg->mg_obj;
8932     } else {
8933         *ckfun_p = Perl_ck_entersub_args_proto_or_list;
8934         *ckobj_p = (SV*)cv;
8935     }
8936 }
8937
8938 /*
8939 =for apidoc Am|void|cv_set_call_checker|CV *cv|Perl_call_checker ckfun|SV *ckobj
8940
8941 Sets the function that will be used to fix up a call to I<cv>.
8942 Specifically, the function is applied to an C<entersub> op tree for a
8943 subroutine call, not marked with C<&>, where the callee can be identified
8944 at compile time as I<cv>.
8945
8946 The C-level function pointer is supplied in I<ckfun>, and an SV argument
8947 for it is supplied in I<ckobj>.  The function is intended to be called
8948 in this manner:
8949
8950     entersubop = ckfun(aTHX_ entersubop, namegv, ckobj);
8951
8952 In this call, I<entersubop> is a pointer to the C<entersub> op,
8953 which may be replaced by the check function, and I<namegv> is a GV
8954 supplying the name that should be used by the check function to refer
8955 to the callee of the C<entersub> op if it needs to emit any diagnostics.
8956 It is permitted to apply the check function in non-standard situations,
8957 such as to a call to a different subroutine or to a method call.
8958
8959 The current setting for a particular CV can be retrieved by
8960 L</cv_get_call_checker>.
8961
8962 =cut
8963 */
8964
8965 void
8966 Perl_cv_set_call_checker(pTHX_ CV *cv, Perl_call_checker ckfun, SV *ckobj)
8967 {
8968     PERL_ARGS_ASSERT_CV_SET_CALL_CHECKER;
8969     if (ckfun == Perl_ck_entersub_args_proto_or_list && ckobj == (SV*)cv) {
8970         if (SvMAGICAL((SV*)cv))
8971             mg_free_type((SV*)cv, PERL_MAGIC_checkcall);
8972     } else {
8973         MAGIC *callmg;
8974         sv_magic((SV*)cv, &PL_sv_undef, PERL_MAGIC_checkcall, NULL, 0);
8975         callmg = mg_find((SV*)cv, PERL_MAGIC_checkcall);
8976         if (callmg->mg_flags & MGf_REFCOUNTED) {
8977             SvREFCNT_dec(callmg->mg_obj);
8978             callmg->mg_flags &= ~MGf_REFCOUNTED;
8979         }
8980         callmg->mg_ptr = FPTR2DPTR(char *, ckfun);
8981         callmg->mg_obj = ckobj;
8982         if (ckobj != (SV*)cv) {
8983             SvREFCNT_inc_simple_void_NN(ckobj);
8984             callmg->mg_flags |= MGf_REFCOUNTED;
8985         }
8986     }
8987 }
8988
8989 OP *
8990 Perl_ck_subr(pTHX_ OP *o)
8991 {
8992     OP *aop, *cvop;
8993     CV *cv;
8994     GV *namegv;
8995
8996     PERL_ARGS_ASSERT_CK_SUBR;
8997
8998     aop = cUNOPx(o)->op_first;
8999     if (!aop->op_sibling)
9000         aop = cUNOPx(aop)->op_first;
9001     aop = aop->op_sibling;
9002     for (cvop = aop; cvop->op_sibling; cvop = cvop->op_sibling) ;
9003     cv = rv2cv_op_cv(cvop, RV2CVOPCV_MARK_EARLY);
9004     namegv = cv ? (GV*)rv2cv_op_cv(cvop, RV2CVOPCV_RETURN_NAME_GV) : NULL;
9005
9006     o->op_private |= OPpENTERSUB_HASTARG;
9007     o->op_private |= (PL_hints & HINT_STRICT_REFS);
9008     if (PERLDB_SUB && PL_curstash != PL_debstash)
9009         o->op_private |= OPpENTERSUB_DB;
9010     if (cvop->op_type == OP_RV2CV) {
9011         o->op_private |= (cvop->op_private & OPpENTERSUB_AMPER);
9012         op_null(cvop);
9013     } else if (cvop->op_type == OP_METHOD || cvop->op_type == OP_METHOD_NAMED) {
9014         if (aop->op_type == OP_CONST)
9015             aop->op_private &= ~OPpCONST_STRICT;
9016         else if (aop->op_type == OP_LIST) {
9017             OP * const sib = ((UNOP*)aop)->op_first->op_sibling;
9018             if (sib && sib->op_type == OP_CONST)
9019                 sib->op_private &= ~OPpCONST_STRICT;
9020         }
9021     }
9022
9023     if (!cv) {
9024         return ck_entersub_args_list(o);
9025     } else {
9026         Perl_call_checker ckfun;
9027         SV *ckobj;
9028         cv_get_call_checker(cv, &ckfun, &ckobj);
9029         return ckfun(aTHX_ o, namegv, ckobj);
9030     }
9031 }
9032
9033 OP *
9034 Perl_ck_svconst(pTHX_ OP *o)
9035 {
9036     PERL_ARGS_ASSERT_CK_SVCONST;
9037     PERL_UNUSED_CONTEXT;
9038     SvREADONLY_on(cSVOPo->op_sv);
9039     return o;
9040 }
9041
9042 OP *
9043 Perl_ck_chdir(pTHX_ OP *o)
9044 {
9045     PERL_ARGS_ASSERT_CK_CHDIR;
9046     if (o->op_flags & OPf_KIDS) {
9047         SVOP * const kid = (SVOP*)cUNOPo->op_first;
9048
9049         if (kid && kid->op_type == OP_CONST &&
9050             (kid->op_private & OPpCONST_BARE))
9051         {
9052             o->op_flags |= OPf_SPECIAL;
9053             kid->op_private &= ~OPpCONST_STRICT;
9054         }
9055     }
9056     return ck_fun(o);
9057 }
9058
9059 OP *
9060 Perl_ck_trunc(pTHX_ OP *o)
9061 {
9062     PERL_ARGS_ASSERT_CK_TRUNC;
9063
9064     if (o->op_flags & OPf_KIDS) {
9065         SVOP *kid = (SVOP*)cUNOPo->op_first;
9066
9067         if (kid->op_type == OP_NULL)
9068             kid = (SVOP*)kid->op_sibling;
9069         if (kid && kid->op_type == OP_CONST &&
9070             (kid->op_private & OPpCONST_BARE))
9071         {
9072             o->op_flags |= OPf_SPECIAL;
9073             kid->op_private &= ~OPpCONST_STRICT;
9074         }
9075     }
9076     return ck_fun(o);
9077 }
9078
9079 OP *
9080 Perl_ck_unpack(pTHX_ OP *o)
9081 {
9082     OP *kid = cLISTOPo->op_first;
9083
9084     PERL_ARGS_ASSERT_CK_UNPACK;
9085
9086     if (kid->op_sibling) {
9087         kid = kid->op_sibling;
9088         if (!kid->op_sibling)
9089             kid->op_sibling = newDEFSVOP();
9090     }
9091     return ck_fun(o);
9092 }
9093
9094 OP *
9095 Perl_ck_substr(pTHX_ OP *o)
9096 {
9097     PERL_ARGS_ASSERT_CK_SUBSTR;
9098
9099     o = ck_fun(o);
9100     if ((o->op_flags & OPf_KIDS) && (o->op_private == 4)) {
9101         OP *kid = cLISTOPo->op_first;
9102
9103         if (kid->op_type == OP_NULL)
9104             kid = kid->op_sibling;
9105         if (kid)
9106             kid->op_flags |= OPf_MOD;
9107
9108     }
9109     return o;
9110 }
9111
9112 OP *
9113 Perl_ck_push(pTHX_ OP *o)
9114 {
9115     dVAR;
9116     OP *kid = o->op_flags & OPf_KIDS ? cLISTOPo->op_first : NULL;
9117     OP *cursor = NULL;
9118     OP *proxy = NULL;
9119
9120     PERL_ARGS_ASSERT_CK_PUSH;
9121
9122     /* If 1st kid is pushmark (e.g. push, unshift, splice), we need 2nd kid */
9123     if (kid) {
9124         cursor = kid->op_type == OP_PUSHMARK ? kid->op_sibling : kid;
9125     }
9126
9127     /* If not array or array deref, wrap it with an array deref.
9128      * For OP_CONST, we only wrap arrayrefs */
9129     if (cursor) {
9130         if ( (    cursor->op_type != OP_PADAV
9131                && cursor->op_type != OP_RV2AV
9132                && cursor->op_type != OP_CONST
9133              )
9134              ||
9135              (    cursor->op_type == OP_CONST
9136                && SvROK(cSVOPx_sv(cursor))
9137                && SvTYPE(SvRV(cSVOPx_sv(cursor))) == SVt_PVAV
9138              )
9139         ) {
9140             proxy = newAVREF(cursor);
9141             if ( cursor == kid ) {
9142                 cLISTOPx(o)->op_first = proxy;
9143             }
9144             else {
9145                 cLISTOPx(kid)->op_sibling = proxy;
9146             }
9147             cLISTOPx(proxy)->op_sibling = cLISTOPx(cursor)->op_sibling;
9148             cLISTOPx(cursor)->op_sibling = NULL;
9149         }
9150     }
9151     return ck_fun(o);
9152 }
9153
9154 OP *
9155 Perl_ck_each(pTHX_ OP *o)
9156 {
9157     dVAR;
9158     OP *kid = o->op_flags & OPf_KIDS ? cUNOPo->op_first : NULL;
9159     const unsigned orig_type  = o->op_type;
9160     const unsigned array_type = orig_type == OP_EACH ? OP_AEACH
9161                               : orig_type == OP_KEYS ? OP_AKEYS : OP_AVALUES;
9162     const unsigned ref_type   = orig_type == OP_EACH ? OP_REACH
9163                               : orig_type == OP_KEYS ? OP_RKEYS : OP_RVALUES;
9164
9165     PERL_ARGS_ASSERT_CK_EACH;
9166
9167     if (kid) {
9168         switch (kid->op_type) {
9169             case OP_PADHV:
9170             case OP_RV2HV:
9171                 break;
9172             case OP_PADAV:
9173             case OP_RV2AV:
9174                 CHANGE_TYPE(o, array_type);
9175                 break;
9176             case OP_CONST:
9177                 if (kid->op_private == OPpCONST_BARE)
9178                     /* we let ck_fun treat as hash */
9179                     break;
9180             default:
9181                 CHANGE_TYPE(o, ref_type);
9182         }
9183     }
9184     /* if treating as a reference, defer additional checks to runtime */
9185     return o->op_type == ref_type ? o : ck_fun(o);
9186 }
9187
9188 /* caller is supposed to assign the return to the 
9189    container of the rep_op var */
9190 STATIC OP *
9191 S_opt_scalarhv(pTHX_ OP *rep_op) {
9192     dVAR;
9193     UNOP *unop;
9194
9195     PERL_ARGS_ASSERT_OPT_SCALARHV;
9196
9197     NewOp(1101, unop, 1, UNOP);
9198     unop->op_type = (OPCODE)OP_BOOLKEYS;
9199     unop->op_ppaddr = PL_ppaddr[OP_BOOLKEYS];
9200     unop->op_flags = (U8)(OPf_WANT_SCALAR | OPf_KIDS );
9201     unop->op_private = (U8)(1 | ((OPf_WANT_SCALAR | OPf_KIDS) >> 8));
9202     unop->op_first = rep_op;
9203     unop->op_next = rep_op->op_next;
9204     rep_op->op_next = (OP*)unop;
9205     rep_op->op_flags|=(OPf_REF | OPf_MOD);
9206     unop->op_sibling = rep_op->op_sibling;
9207     rep_op->op_sibling = NULL;
9208     /* unop->op_targ = pad_alloc(OP_BOOLKEYS, SVs_PADTMP); */
9209     if (rep_op->op_type == OP_PADHV) { 
9210         rep_op->op_flags &= ~OPf_WANT_SCALAR;
9211         rep_op->op_flags |= OPf_WANT_LIST;
9212     }
9213     return (OP*)unop;
9214 }                        
9215
9216 /* Checks if o acts as an in-place operator on an array. oright points to the
9217  * beginning of the right-hand side. Returns the left-hand side of the
9218  * assignment if o acts in-place, or NULL otherwise. */
9219
9220 STATIC OP *
9221 S_is_inplace_av(pTHX_ OP *o, OP *oright) {
9222     OP *o2;
9223     OP *oleft = NULL;
9224
9225     PERL_ARGS_ASSERT_IS_INPLACE_AV;
9226
9227     if (!oright ||
9228         (oright->op_type != OP_RV2AV && oright->op_type != OP_PADAV)
9229         || oright->op_next != o
9230         || (oright->op_private & OPpLVAL_INTRO)
9231     )
9232         return NULL;
9233
9234     /* o2 follows the chain of op_nexts through the LHS of the
9235      * assign (if any) to the aassign op itself */
9236     o2 = o->op_next;
9237     if (!o2 || o2->op_type != OP_NULL)
9238         return NULL;
9239     o2 = o2->op_next;
9240     if (!o2 || o2->op_type != OP_PUSHMARK)
9241         return NULL;
9242     o2 = o2->op_next;
9243     if (o2 && o2->op_type == OP_GV)
9244         o2 = o2->op_next;
9245     if (!o2
9246         || (o2->op_type != OP_PADAV && o2->op_type != OP_RV2AV)
9247         || (o2->op_private & OPpLVAL_INTRO)
9248     )
9249         return NULL;
9250     oleft = o2;
9251     o2 = o2->op_next;
9252     if (!o2 || o2->op_type != OP_NULL)
9253         return NULL;
9254     o2 = o2->op_next;
9255     if (!o2 || o2->op_type != OP_AASSIGN
9256             || (o2->op_flags & OPf_WANT) != OPf_WANT_VOID)
9257         return NULL;
9258
9259     /* check that the sort is the first arg on RHS of assign */
9260
9261     o2 = cUNOPx(o2)->op_first;
9262     if (!o2 || o2->op_type != OP_NULL)
9263         return NULL;
9264     o2 = cUNOPx(o2)->op_first;
9265     if (!o2 || o2->op_type != OP_PUSHMARK)
9266         return NULL;
9267     if (o2->op_sibling != o)
9268         return NULL;
9269
9270     /* check the array is the same on both sides */
9271     if (oleft->op_type == OP_RV2AV) {
9272         if (oright->op_type != OP_RV2AV
9273             || !cUNOPx(oright)->op_first
9274             || cUNOPx(oright)->op_first->op_type != OP_GV
9275             || cGVOPx_gv(cUNOPx(oleft)->op_first) !=
9276                cGVOPx_gv(cUNOPx(oright)->op_first)
9277         )
9278             return NULL;
9279     }
9280     else if (oright->op_type != OP_PADAV
9281         || oright->op_targ != oleft->op_targ
9282     )
9283         return NULL;
9284
9285     return oleft;
9286 }
9287
9288 /* A peephole optimizer.  We visit the ops in the order they're to execute.
9289  * See the comments at the top of this file for more details about when
9290  * peep() is called */
9291
9292 void
9293 Perl_rpeep(pTHX_ register OP *o)
9294 {
9295     dVAR;
9296     register OP* oldop = NULL;
9297
9298     if (!o || o->op_opt)
9299         return;
9300     ENTER;
9301     SAVEOP();
9302     SAVEVPTR(PL_curcop);
9303     for (; o; o = o->op_next) {
9304         if (o->op_opt)
9305             break;
9306         /* By default, this op has now been optimised. A couple of cases below
9307            clear this again.  */
9308         o->op_opt = 1;
9309         PL_op = o;
9310         switch (o->op_type) {
9311         case OP_DBSTATE:
9312             PL_curcop = ((COP*)o);              /* for warnings */
9313             break;
9314         case OP_NEXTSTATE:
9315             PL_curcop = ((COP*)o);              /* for warnings */
9316
9317             /* Two NEXTSTATEs in a row serve no purpose. Except if they happen
9318                to carry two labels. For now, take the easier option, and skip
9319                this optimisation if the first NEXTSTATE has a label.  */
9320             if (!CopLABEL((COP*)o)) {
9321                 OP *nextop = o->op_next;
9322                 while (nextop && nextop->op_type == OP_NULL)
9323                     nextop = nextop->op_next;
9324
9325                 if (nextop && (nextop->op_type == OP_NEXTSTATE)) {
9326                     COP *firstcop = (COP *)o;
9327                     COP *secondcop = (COP *)nextop;
9328                     /* We want the COP pointed to by o (and anything else) to
9329                        become the next COP down the line.  */
9330                     cop_free(firstcop);
9331
9332                     firstcop->op_next = secondcop->op_next;
9333
9334                     /* Now steal all its pointers, and duplicate the other
9335                        data.  */
9336                     firstcop->cop_line = secondcop->cop_line;
9337 #ifdef USE_ITHREADS
9338                     firstcop->cop_stashpv = secondcop->cop_stashpv;
9339                     firstcop->cop_file = secondcop->cop_file;
9340 #else
9341                     firstcop->cop_stash = secondcop->cop_stash;
9342                     firstcop->cop_filegv = secondcop->cop_filegv;
9343 #endif
9344                     firstcop->cop_hints = secondcop->cop_hints;
9345                     firstcop->cop_seq = secondcop->cop_seq;
9346                     firstcop->cop_warnings = secondcop->cop_warnings;
9347                     firstcop->cop_hints_hash = secondcop->cop_hints_hash;
9348
9349 #ifdef USE_ITHREADS
9350                     secondcop->cop_stashpv = NULL;
9351                     secondcop->cop_file = NULL;
9352 #else
9353                     secondcop->cop_stash = NULL;
9354                     secondcop->cop_filegv = NULL;
9355 #endif
9356                     secondcop->cop_warnings = NULL;
9357                     secondcop->cop_hints_hash = NULL;
9358
9359                     /* If we use op_null(), and hence leave an ex-COP, some
9360                        warnings are misreported. For example, the compile-time
9361                        error in 'use strict; no strict refs;'  */
9362                     secondcop->op_type = OP_NULL;
9363                     secondcop->op_ppaddr = PL_ppaddr[OP_NULL];
9364                 }
9365             }
9366             break;
9367
9368         case OP_CONST:
9369             if (cSVOPo->op_private & OPpCONST_STRICT)
9370                 no_bareword_allowed(o);
9371 #ifdef USE_ITHREADS
9372         case OP_HINTSEVAL:
9373         case OP_METHOD_NAMED:
9374             /* Relocate sv to the pad for thread safety.
9375              * Despite being a "constant", the SV is written to,
9376              * for reference counts, sv_upgrade() etc. */
9377             if (cSVOP->op_sv) {
9378                 const PADOFFSET ix = pad_alloc(OP_CONST, SVs_PADTMP);
9379                 if (o->op_type != OP_METHOD_NAMED && SvPADTMP(cSVOPo->op_sv)) {
9380                     /* If op_sv is already a PADTMP then it is being used by
9381                      * some pad, so make a copy. */
9382                     sv_setsv(PAD_SVl(ix),cSVOPo->op_sv);
9383                     SvREADONLY_on(PAD_SVl(ix));
9384                     SvREFCNT_dec(cSVOPo->op_sv);
9385                 }
9386                 else if (o->op_type != OP_METHOD_NAMED
9387                          && cSVOPo->op_sv == &PL_sv_undef) {
9388                     /* PL_sv_undef is hack - it's unsafe to store it in the
9389                        AV that is the pad, because av_fetch treats values of
9390                        PL_sv_undef as a "free" AV entry and will merrily
9391                        replace them with a new SV, causing pad_alloc to think
9392                        that this pad slot is free. (When, clearly, it is not)
9393                     */
9394                     SvOK_off(PAD_SVl(ix));
9395                     SvPADTMP_on(PAD_SVl(ix));
9396                     SvREADONLY_on(PAD_SVl(ix));
9397                 }
9398                 else {
9399                     SvREFCNT_dec(PAD_SVl(ix));
9400                     SvPADTMP_on(cSVOPo->op_sv);
9401                     PAD_SETSV(ix, cSVOPo->op_sv);
9402                     /* XXX I don't know how this isn't readonly already. */
9403                     SvREADONLY_on(PAD_SVl(ix));
9404                 }
9405                 cSVOPo->op_sv = NULL;
9406                 o->op_targ = ix;
9407             }
9408 #endif
9409             break;
9410
9411         case OP_CONCAT:
9412             if (o->op_next && o->op_next->op_type == OP_STRINGIFY) {
9413                 if (o->op_next->op_private & OPpTARGET_MY) {
9414                     if (o->op_flags & OPf_STACKED) /* chained concats */
9415                         break; /* ignore_optimization */
9416                     else {
9417                         /* assert(PL_opargs[o->op_type] & OA_TARGLEX); */
9418                         o->op_targ = o->op_next->op_targ;
9419                         o->op_next->op_targ = 0;
9420                         o->op_private |= OPpTARGET_MY;
9421                     }
9422                 }
9423                 op_null(o->op_next);
9424             }
9425             break;
9426         case OP_STUB:
9427             if ((o->op_flags & OPf_WANT) != OPf_WANT_LIST) {
9428                 break; /* Scalar stub must produce undef.  List stub is noop */
9429             }
9430             goto nothin;
9431         case OP_NULL:
9432             if (o->op_targ == OP_NEXTSTATE
9433                 || o->op_targ == OP_DBSTATE)
9434             {
9435                 PL_curcop = ((COP*)o);
9436             }
9437             /* XXX: We avoid setting op_seq here to prevent later calls
9438                to rpeep() from mistakenly concluding that optimisation
9439                has already occurred. This doesn't fix the real problem,
9440                though (See 20010220.007). AMS 20010719 */
9441             /* op_seq functionality is now replaced by op_opt */
9442             o->op_opt = 0;
9443             /* FALL THROUGH */
9444         case OP_SCALAR:
9445         case OP_LINESEQ:
9446         case OP_SCOPE:
9447         nothin:
9448             if (oldop && o->op_next) {
9449                 oldop->op_next = o->op_next;
9450                 o->op_opt = 0;
9451                 continue;
9452             }
9453             break;
9454
9455         case OP_PADAV:
9456         case OP_GV:
9457             if (o->op_type == OP_PADAV || o->op_next->op_type == OP_RV2AV) {
9458                 OP* const pop = (o->op_type == OP_PADAV) ?
9459                             o->op_next : o->op_next->op_next;
9460                 IV i;
9461                 if (pop && pop->op_type == OP_CONST &&
9462                     ((PL_op = pop->op_next)) &&
9463                     pop->op_next->op_type == OP_AELEM &&
9464                     !(pop->op_next->op_private &
9465                       (OPpLVAL_INTRO|OPpLVAL_DEFER|OPpDEREF|OPpMAYBE_LVSUB)) &&
9466                     (i = SvIV(((SVOP*)pop)->op_sv) - CopARYBASE_get(PL_curcop))
9467                                 <= 255 &&
9468                     i >= 0)
9469                 {
9470                     GV *gv;
9471                     if (cSVOPx(pop)->op_private & OPpCONST_STRICT)
9472                         no_bareword_allowed(pop);
9473                     if (o->op_type == OP_GV)
9474                         op_null(o->op_next);
9475                     op_null(pop->op_next);
9476                     op_null(pop);
9477                     o->op_flags |= pop->op_next->op_flags & OPf_MOD;
9478                     o->op_next = pop->op_next->op_next;
9479                     o->op_ppaddr = PL_ppaddr[OP_AELEMFAST];
9480                     o->op_private = (U8)i;
9481                     if (o->op_type == OP_GV) {
9482                         gv = cGVOPo_gv;
9483                         GvAVn(gv);
9484                     }
9485                     else
9486                         o->op_flags |= OPf_SPECIAL;
9487                     o->op_type = OP_AELEMFAST;
9488                 }
9489                 break;
9490             }
9491
9492             if (o->op_next->op_type == OP_RV2SV) {
9493                 if (!(o->op_next->op_private & OPpDEREF)) {
9494                     op_null(o->op_next);
9495                     o->op_private |= o->op_next->op_private & (OPpLVAL_INTRO
9496                                                                | OPpOUR_INTRO);
9497                     o->op_next = o->op_next->op_next;
9498                     o->op_type = OP_GVSV;
9499                     o->op_ppaddr = PL_ppaddr[OP_GVSV];
9500                 }
9501             }
9502             else if ((o->op_private & OPpEARLY_CV) && ckWARN(WARN_PROTOTYPE)) {
9503                 GV * const gv = cGVOPo_gv;
9504                 if (SvTYPE(gv) == SVt_PVGV && GvCV(gv) && SvPVX_const(GvCV(gv))) {
9505                     /* XXX could check prototype here instead of just carping */
9506                     SV * const sv = sv_newmortal();
9507                     gv_efullname3(sv, gv, NULL);
9508                     Perl_warner(aTHX_ packWARN(WARN_PROTOTYPE),
9509                                 "%"SVf"() called too early to check prototype",
9510                                 SVfARG(sv));
9511                 }
9512             }
9513             else if (o->op_next->op_type == OP_READLINE
9514                     && o->op_next->op_next->op_type == OP_CONCAT
9515                     && (o->op_next->op_next->op_flags & OPf_STACKED))
9516             {
9517                 /* Turn "$a .= <FH>" into an OP_RCATLINE. AMS 20010917 */
9518                 o->op_type   = OP_RCATLINE;
9519                 o->op_flags |= OPf_STACKED;
9520                 o->op_ppaddr = PL_ppaddr[OP_RCATLINE];
9521                 op_null(o->op_next->op_next);
9522                 op_null(o->op_next);
9523             }
9524
9525             break;
9526         
9527         {
9528             OP *fop;
9529             OP *sop;
9530             
9531         case OP_NOT:
9532             fop = cUNOP->op_first;
9533             sop = NULL;
9534             goto stitch_keys;
9535             break;
9536
9537         case OP_AND:
9538         case OP_OR:
9539         case OP_DOR:
9540             fop = cLOGOP->op_first;
9541             sop = fop->op_sibling;
9542             while (cLOGOP->op_other->op_type == OP_NULL)
9543                 cLOGOP->op_other = cLOGOP->op_other->op_next;
9544             CALL_RPEEP(cLOGOP->op_other);
9545           
9546           stitch_keys:      
9547             o->op_opt = 1;
9548             if ((fop->op_type == OP_PADHV || fop->op_type == OP_RV2HV)
9549                 || ( sop && 
9550                      (sop->op_type == OP_PADHV || sop->op_type == OP_RV2HV)
9551                     )
9552             ){  
9553                 OP * nop = o;
9554                 OP * lop = o;
9555                 if (!((nop->op_flags & OPf_WANT) == OPf_WANT_VOID)) {
9556                     while (nop && nop->op_next) {
9557                         switch (nop->op_next->op_type) {
9558                             case OP_NOT:
9559                             case OP_AND:
9560                             case OP_OR:
9561                             case OP_DOR:
9562                                 lop = nop = nop->op_next;
9563                                 break;
9564                             case OP_NULL:
9565                                 nop = nop->op_next;
9566                                 break;
9567                             default:
9568                                 nop = NULL;
9569                                 break;
9570                         }
9571                     }            
9572                 }
9573                 if ((lop->op_flags & OPf_WANT) == OPf_WANT_VOID) {
9574                     if (fop->op_type == OP_PADHV || fop->op_type == OP_RV2HV) 
9575                         cLOGOP->op_first = opt_scalarhv(fop);
9576                     if (sop && (sop->op_type == OP_PADHV || sop->op_type == OP_RV2HV)) 
9577                         cLOGOP->op_first->op_sibling = opt_scalarhv(sop);
9578                 }                                        
9579             }                  
9580             
9581             
9582             break;
9583         }    
9584         
9585         case OP_MAPWHILE:
9586         case OP_GREPWHILE:
9587         case OP_ANDASSIGN:
9588         case OP_ORASSIGN:
9589         case OP_DORASSIGN:
9590         case OP_COND_EXPR:
9591         case OP_RANGE:
9592         case OP_ONCE:
9593             while (cLOGOP->op_other->op_type == OP_NULL)
9594                 cLOGOP->op_other = cLOGOP->op_other->op_next;
9595             CALL_RPEEP(cLOGOP->op_other);
9596             break;
9597
9598         case OP_ENTERLOOP:
9599         case OP_ENTERITER:
9600             while (cLOOP->op_redoop->op_type == OP_NULL)
9601                 cLOOP->op_redoop = cLOOP->op_redoop->op_next;
9602             CALL_RPEEP(cLOOP->op_redoop);
9603             while (cLOOP->op_nextop->op_type == OP_NULL)
9604                 cLOOP->op_nextop = cLOOP->op_nextop->op_next;
9605             CALL_RPEEP(cLOOP->op_nextop);
9606             while (cLOOP->op_lastop->op_type == OP_NULL)
9607                 cLOOP->op_lastop = cLOOP->op_lastop->op_next;
9608             CALL_RPEEP(cLOOP->op_lastop);
9609             break;
9610
9611         case OP_SUBST:
9612             assert(!(cPMOP->op_pmflags & PMf_ONCE));
9613             while (cPMOP->op_pmstashstartu.op_pmreplstart &&
9614                    cPMOP->op_pmstashstartu.op_pmreplstart->op_type == OP_NULL)
9615                 cPMOP->op_pmstashstartu.op_pmreplstart
9616                     = cPMOP->op_pmstashstartu.op_pmreplstart->op_next;
9617             CALL_RPEEP(cPMOP->op_pmstashstartu.op_pmreplstart);
9618             break;
9619
9620         case OP_EXEC:
9621             if (o->op_next && o->op_next->op_type == OP_NEXTSTATE
9622                 && ckWARN(WARN_SYNTAX))
9623             {
9624                 if (o->op_next->op_sibling) {
9625                     const OPCODE type = o->op_next->op_sibling->op_type;
9626                     if (type != OP_EXIT && type != OP_WARN && type != OP_DIE) {
9627                         const line_t oldline = CopLINE(PL_curcop);
9628                         CopLINE_set(PL_curcop, CopLINE((COP*)o->op_next));
9629                         Perl_warner(aTHX_ packWARN(WARN_EXEC),
9630                                     "Statement unlikely to be reached");
9631                         Perl_warner(aTHX_ packWARN(WARN_EXEC),
9632                                     "\t(Maybe you meant system() when you said exec()?)\n");
9633                         CopLINE_set(PL_curcop, oldline);
9634                     }
9635                 }
9636             }
9637             break;
9638
9639         case OP_HELEM: {
9640             UNOP *rop;
9641             SV *lexname;
9642             GV **fields;
9643             SV **svp, *sv;
9644             const char *key = NULL;
9645             STRLEN keylen;
9646
9647             if (((BINOP*)o)->op_last->op_type != OP_CONST)
9648                 break;
9649
9650             /* Make the CONST have a shared SV */
9651             svp = cSVOPx_svp(((BINOP*)o)->op_last);
9652             if (!SvFAKE(sv = *svp) || !SvREADONLY(sv)) {
9653                 key = SvPV_const(sv, keylen);
9654                 lexname = newSVpvn_share(key,
9655                                          SvUTF8(sv) ? -(I32)keylen : (I32)keylen,
9656                                          0);
9657                 SvREFCNT_dec(sv);
9658                 *svp = lexname;
9659             }
9660
9661             if ((o->op_private & (OPpLVAL_INTRO)))
9662                 break;
9663
9664             rop = (UNOP*)((BINOP*)o)->op_first;
9665             if (rop->op_type != OP_RV2HV || rop->op_first->op_type != OP_PADSV)
9666                 break;
9667             lexname = *av_fetch(PL_comppad_name, rop->op_first->op_targ, TRUE);
9668             if (!SvPAD_TYPED(lexname))
9669                 break;
9670             fields = (GV**)hv_fetchs(SvSTASH(lexname), "FIELDS", FALSE);
9671             if (!fields || !GvHV(*fields))
9672                 break;
9673             key = SvPV_const(*svp, keylen);
9674             if (!hv_fetch(GvHV(*fields), key,
9675                         SvUTF8(*svp) ? -(I32)keylen : (I32)keylen, FALSE))
9676             {
9677                 Perl_croak(aTHX_ "No such class field \"%s\" " 
9678                            "in variable %s of type %s", 
9679                       key, SvPV_nolen_const(lexname), HvNAME_get(SvSTASH(lexname)));
9680             }
9681
9682             break;
9683         }
9684
9685         case OP_HSLICE: {
9686             UNOP *rop;
9687             SV *lexname;
9688             GV **fields;
9689             SV **svp;
9690             const char *key;
9691             STRLEN keylen;
9692             SVOP *first_key_op, *key_op;
9693
9694             if ((o->op_private & (OPpLVAL_INTRO))
9695                 /* I bet there's always a pushmark... */
9696                 || ((LISTOP*)o)->op_first->op_sibling->op_type != OP_LIST)
9697                 /* hmmm, no optimization if list contains only one key. */
9698                 break;
9699             rop = (UNOP*)((LISTOP*)o)->op_last;
9700             if (rop->op_type != OP_RV2HV)
9701                 break;
9702             if (rop->op_first->op_type == OP_PADSV)
9703                 /* @$hash{qw(keys here)} */
9704                 rop = (UNOP*)rop->op_first;
9705             else {
9706                 /* @{$hash}{qw(keys here)} */
9707                 if (rop->op_first->op_type == OP_SCOPE 
9708                     && cLISTOPx(rop->op_first)->op_last->op_type == OP_PADSV)
9709                 {
9710                     rop = (UNOP*)cLISTOPx(rop->op_first)->op_last;
9711                 }
9712                 else
9713                     break;
9714             }
9715                     
9716             lexname = *av_fetch(PL_comppad_name, rop->op_targ, TRUE);
9717             if (!SvPAD_TYPED(lexname))
9718                 break;
9719             fields = (GV**)hv_fetchs(SvSTASH(lexname), "FIELDS", FALSE);
9720             if (!fields || !GvHV(*fields))
9721                 break;
9722             /* Again guessing that the pushmark can be jumped over.... */
9723             first_key_op = (SVOP*)((LISTOP*)((LISTOP*)o)->op_first->op_sibling)
9724                 ->op_first->op_sibling;
9725             for (key_op = first_key_op; key_op;
9726                  key_op = (SVOP*)key_op->op_sibling) {
9727                 if (key_op->op_type != OP_CONST)
9728                     continue;
9729                 svp = cSVOPx_svp(key_op);
9730                 key = SvPV_const(*svp, keylen);
9731                 if (!hv_fetch(GvHV(*fields), key, 
9732                             SvUTF8(*svp) ? -(I32)keylen : (I32)keylen, FALSE))
9733                 {
9734                     Perl_croak(aTHX_ "No such class field \"%s\" "
9735                                "in variable %s of type %s",
9736                           key, SvPV_nolen(lexname), HvNAME_get(SvSTASH(lexname)));
9737                 }
9738             }
9739             break;
9740         }
9741         case OP_RV2SV:
9742         case OP_RV2AV:
9743         case OP_RV2HV:
9744             if (oldop
9745                  && (  oldop->op_type == OP_AELEM
9746                     || oldop->op_type == OP_PADSV
9747                     || oldop->op_type == OP_RV2SV
9748                     || oldop->op_type == OP_RV2GV
9749                     || oldop->op_type == OP_HELEM
9750                     )
9751                  && (oldop->op_private & OPpDEREF)
9752             ) {
9753                 o->op_private |= OPpDEREFed;
9754             }
9755
9756         case OP_SORT: {
9757             /* will point to RV2AV or PADAV op on LHS/RHS of assign */
9758             OP *oleft;
9759             OP *o2;
9760
9761             /* check that RHS of sort is a single plain array */
9762             OP *oright = cUNOPo->op_first;
9763             if (!oright || oright->op_type != OP_PUSHMARK)
9764                 break;
9765
9766             /* reverse sort ... can be optimised.  */
9767             if (!cUNOPo->op_sibling) {
9768                 /* Nothing follows us on the list. */
9769                 OP * const reverse = o->op_next;
9770
9771                 if (reverse->op_type == OP_REVERSE &&
9772                     (reverse->op_flags & OPf_WANT) == OPf_WANT_LIST) {
9773                     OP * const pushmark = cUNOPx(reverse)->op_first;
9774                     if (pushmark && (pushmark->op_type == OP_PUSHMARK)
9775                         && (cUNOPx(pushmark)->op_sibling == o)) {
9776                         /* reverse -> pushmark -> sort */
9777                         o->op_private |= OPpSORT_REVERSE;
9778                         op_null(reverse);
9779                         pushmark->op_next = oright->op_next;
9780                         op_null(oright);
9781                     }
9782                 }
9783             }
9784
9785             /* make @a = sort @a act in-place */
9786
9787             oright = cUNOPx(oright)->op_sibling;
9788             if (!oright)
9789                 break;
9790             if (oright->op_type == OP_NULL) { /* skip sort block/sub */
9791                 oright = cUNOPx(oright)->op_sibling;
9792             }
9793
9794             oleft = is_inplace_av(o, oright);
9795             if (!oleft)
9796                 break;
9797
9798             /* transfer MODishness etc from LHS arg to RHS arg */
9799             oright->op_flags = oleft->op_flags;
9800             o->op_private |= OPpSORT_INPLACE;
9801
9802             /* excise push->gv->rv2av->null->aassign */
9803             o2 = o->op_next->op_next;
9804             op_null(o2); /* PUSHMARK */
9805             o2 = o2->op_next;
9806             if (o2->op_type == OP_GV) {
9807                 op_null(o2); /* GV */
9808                 o2 = o2->op_next;
9809             }
9810             op_null(o2); /* RV2AV or PADAV */
9811             o2 = o2->op_next->op_next;
9812             op_null(o2); /* AASSIGN */
9813
9814             o->op_next = o2->op_next;
9815
9816             break;
9817         }
9818
9819         case OP_REVERSE: {
9820             OP *ourmark, *theirmark, *ourlast, *iter, *expushmark, *rv2av;
9821             OP *gvop = NULL;
9822             OP *oleft, *oright;
9823             LISTOP *enter, *exlist;
9824
9825             /* @a = reverse @a */
9826             if ((oright = cLISTOPo->op_first)
9827                     && (oright->op_type == OP_PUSHMARK)
9828                     && (oright = oright->op_sibling)
9829                     && (oleft = is_inplace_av(o, oright))) {
9830                 OP *o2;
9831
9832                 /* transfer MODishness etc from LHS arg to RHS arg */
9833                 oright->op_flags = oleft->op_flags;
9834                 o->op_private |= OPpREVERSE_INPLACE;
9835
9836                 /* excise push->gv->rv2av->null->aassign */
9837                 o2 = o->op_next->op_next;
9838                 op_null(o2); /* PUSHMARK */
9839                 o2 = o2->op_next;
9840                 if (o2->op_type == OP_GV) {
9841                     op_null(o2); /* GV */
9842                     o2 = o2->op_next;
9843                 }
9844                 op_null(o2); /* RV2AV or PADAV */
9845                 o2 = o2->op_next->op_next;
9846                 op_null(o2); /* AASSIGN */
9847
9848                 o->op_next = o2->op_next;
9849                 break;
9850             }
9851
9852             enter = (LISTOP *) o->op_next;
9853             if (!enter)
9854                 break;
9855             if (enter->op_type == OP_NULL) {
9856                 enter = (LISTOP *) enter->op_next;
9857                 if (!enter)
9858                     break;
9859             }
9860             /* for $a (...) will have OP_GV then OP_RV2GV here.
9861                for (...) just has an OP_GV.  */
9862             if (enter->op_type == OP_GV) {
9863                 gvop = (OP *) enter;
9864                 enter = (LISTOP *) enter->op_next;
9865                 if (!enter)
9866                     break;
9867                 if (enter->op_type == OP_RV2GV) {
9868                   enter = (LISTOP *) enter->op_next;
9869                   if (!enter)
9870                     break;
9871                 }
9872             }
9873
9874             if (enter->op_type != OP_ENTERITER)
9875                 break;
9876
9877             iter = enter->op_next;
9878             if (!iter || iter->op_type != OP_ITER)
9879                 break;
9880             
9881             expushmark = enter->op_first;
9882             if (!expushmark || expushmark->op_type != OP_NULL
9883                 || expushmark->op_targ != OP_PUSHMARK)
9884                 break;
9885
9886             exlist = (LISTOP *) expushmark->op_sibling;
9887             if (!exlist || exlist->op_type != OP_NULL
9888                 || exlist->op_targ != OP_LIST)
9889                 break;
9890
9891             if (exlist->op_last != o) {
9892                 /* Mmm. Was expecting to point back to this op.  */
9893                 break;
9894             }
9895             theirmark = exlist->op_first;
9896             if (!theirmark || theirmark->op_type != OP_PUSHMARK)
9897                 break;
9898
9899             if (theirmark->op_sibling != o) {
9900                 /* There's something between the mark and the reverse, eg
9901                    for (1, reverse (...))
9902                    so no go.  */
9903                 break;
9904             }
9905
9906             ourmark = ((LISTOP *)o)->op_first;
9907             if (!ourmark || ourmark->op_type != OP_PUSHMARK)
9908                 break;
9909
9910             ourlast = ((LISTOP *)o)->op_last;
9911             if (!ourlast || ourlast->op_next != o)
9912                 break;
9913
9914             rv2av = ourmark->op_sibling;
9915             if (rv2av && rv2av->op_type == OP_RV2AV && rv2av->op_sibling == 0
9916                 && rv2av->op_flags == (OPf_WANT_LIST | OPf_KIDS)
9917                 && enter->op_flags == (OPf_WANT_LIST | OPf_KIDS)) {
9918                 /* We're just reversing a single array.  */
9919                 rv2av->op_flags = OPf_WANT_SCALAR | OPf_KIDS | OPf_REF;
9920                 enter->op_flags |= OPf_STACKED;
9921             }
9922
9923             /* We don't have control over who points to theirmark, so sacrifice
9924                ours.  */
9925             theirmark->op_next = ourmark->op_next;
9926             theirmark->op_flags = ourmark->op_flags;
9927             ourlast->op_next = gvop ? gvop : (OP *) enter;
9928             op_null(ourmark);
9929             op_null(o);
9930             enter->op_private |= OPpITER_REVERSED;
9931             iter->op_private |= OPpITER_REVERSED;
9932             
9933             break;
9934         }
9935
9936         case OP_SASSIGN: {
9937             OP *rv2gv;
9938             UNOP *refgen, *rv2cv;
9939             LISTOP *exlist;
9940
9941             if ((o->op_flags & OPf_WANT) != OPf_WANT_VOID)
9942                 break;
9943
9944             if ((o->op_private & ~OPpASSIGN_BACKWARDS) != 2)
9945                 break;
9946
9947             rv2gv = ((BINOP *)o)->op_last;
9948             if (!rv2gv || rv2gv->op_type != OP_RV2GV)
9949                 break;
9950
9951             refgen = (UNOP *)((BINOP *)o)->op_first;
9952
9953             if (!refgen || refgen->op_type != OP_REFGEN)
9954                 break;
9955
9956             exlist = (LISTOP *)refgen->op_first;
9957             if (!exlist || exlist->op_type != OP_NULL
9958                 || exlist->op_targ != OP_LIST)
9959                 break;
9960
9961             if (exlist->op_first->op_type != OP_PUSHMARK)
9962                 break;
9963
9964             rv2cv = (UNOP*)exlist->op_last;
9965
9966             if (rv2cv->op_type != OP_RV2CV)
9967                 break;
9968
9969             assert ((rv2gv->op_private & OPpDONT_INIT_GV) == 0);
9970             assert ((o->op_private & OPpASSIGN_CV_TO_GV) == 0);
9971             assert ((rv2cv->op_private & OPpMAY_RETURN_CONSTANT) == 0);
9972
9973             o->op_private |= OPpASSIGN_CV_TO_GV;
9974             rv2gv->op_private |= OPpDONT_INIT_GV;
9975             rv2cv->op_private |= OPpMAY_RETURN_CONSTANT;
9976
9977             break;
9978         }
9979
9980         
9981         case OP_QR:
9982         case OP_MATCH:
9983             if (!(cPMOP->op_pmflags & PMf_ONCE)) {
9984                 assert (!cPMOP->op_pmstashstartu.op_pmreplstart);
9985             }
9986             break;
9987
9988         case OP_CUSTOM: {
9989             Perl_cpeep_t cpeep = 
9990                 XopENTRY(Perl_custom_op_xop(aTHX_ o), xop_peep);
9991             if (cpeep)
9992                 cpeep(aTHX_ o, oldop);
9993             break;
9994         }
9995             
9996         }
9997         oldop = o;
9998     }
9999     LEAVE;
10000 }
10001
10002 void
10003 Perl_peep(pTHX_ register OP *o)
10004 {
10005     CALL_RPEEP(o);
10006 }
10007
10008 /*
10009 =head1 Custom Operators
10010
10011 =for apidoc Ao||custom_op_xop
10012 Return the XOP structure for a given custom op. This function should be
10013 considered internal to OP_NAME and the other access macros: use them instead.
10014
10015 =cut
10016 */
10017
10018 const XOP *
10019 Perl_custom_op_xop(pTHX_ const OP *o)
10020 {
10021     SV *keysv;
10022     HE *he = NULL;
10023     XOP *xop;
10024
10025     static const XOP xop_null = { 0, 0, 0, 0, 0 };
10026
10027     PERL_ARGS_ASSERT_CUSTOM_OP_XOP;
10028     assert(o->op_type == OP_CUSTOM);
10029
10030     /* This is wrong. It assumes a function pointer can be cast to IV,
10031      * which isn't guaranteed, but this is what the old custom OP code
10032      * did. In principle it should be safer to Copy the bytes of the
10033      * pointer into a PV: since the new interface is hidden behind
10034      * functions, this can be changed later if necessary.  */
10035     /* Change custom_op_xop if this ever happens */
10036     keysv = sv_2mortal(newSViv(PTR2IV(o->op_ppaddr)));
10037
10038     if (PL_custom_ops)
10039         he = hv_fetch_ent(PL_custom_ops, keysv, 0, 0);
10040
10041     /* assume noone will have just registered a desc */
10042     if (!he && PL_custom_op_names &&
10043         (he = hv_fetch_ent(PL_custom_op_names, keysv, 0, 0))
10044     ) {
10045         const char *pv;
10046         STRLEN l;
10047
10048         /* XXX does all this need to be shared mem? */
10049         Newxz(xop, 1, XOP);
10050         pv = SvPV(HeVAL(he), l);
10051         XopENTRY_set(xop, xop_name, savepvn(pv, l));
10052         if (PL_custom_op_descs &&
10053             (he = hv_fetch_ent(PL_custom_op_descs, keysv, 0, 0))
10054         ) {
10055             pv = SvPV(HeVAL(he), l);
10056             XopENTRY_set(xop, xop_desc, savepvn(pv, l));
10057         }
10058         Perl_custom_op_register(aTHX_ o->op_ppaddr, xop);
10059         return xop;
10060     }
10061
10062     if (!he) return &xop_null;
10063
10064     xop = INT2PTR(XOP *, SvIV(HeVAL(he)));
10065     return xop;
10066 }
10067
10068 /*
10069 =for apidoc Ao||custom_op_register
10070 Register a custom op. See L<perlguts/"Custom Operators">.
10071
10072 =cut
10073 */
10074
10075 void
10076 Perl_custom_op_register(pTHX_ Perl_ppaddr_t ppaddr, const XOP *xop)
10077 {
10078     SV *keysv;
10079
10080     PERL_ARGS_ASSERT_CUSTOM_OP_REGISTER;
10081
10082     /* see the comment in custom_op_xop */
10083     keysv = sv_2mortal(newSViv(PTR2IV(ppaddr)));
10084
10085     if (!PL_custom_ops)
10086         PL_custom_ops = newHV();
10087
10088     if (!hv_store_ent(PL_custom_ops, keysv, newSViv(PTR2IV(xop)), 0))
10089         Perl_croak(aTHX_ "panic: can't register custom OP %s", xop->xop_name);
10090 }
10091
10092 #include "XSUB.h"
10093
10094 /* Efficient sub that returns a constant scalar value. */
10095 static void
10096 const_sv_xsub(pTHX_ CV* cv)
10097 {
10098     dVAR;
10099     dXSARGS;
10100     SV *const sv = MUTABLE_SV(XSANY.any_ptr);
10101     if (items != 0) {
10102         NOOP;
10103 #if 0
10104         /* diag_listed_as: SKIPME */
10105         Perl_croak(aTHX_ "usage: %s::%s()",
10106                    HvNAME_get(GvSTASH(CvGV(cv))), GvNAME(CvGV(cv)));
10107 #endif
10108     }
10109     if (!sv) {
10110         XSRETURN(0);
10111     }
10112     EXTEND(sp, 1);
10113     ST(0) = sv;
10114     XSRETURN(1);
10115 }
10116
10117 /*
10118  * Local variables:
10119  * c-indentation-style: bsd
10120  * c-basic-offset: 4
10121  * indent-tabs-mode: t
10122  * End:
10123  *
10124  * ex: set ts=8 sts=4 sw=4 noet:
10125  */