use 'undef' instead of 'UNKNOWN' for -u
[perl.git] / op.c
1 #line 2 "op.c"
2 /*    op.c
3  *
4  *    Copyright (C) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
5  *    2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 by Larry Wall and others
6  *
7  *    You may distribute under the terms of either the GNU General Public
8  *    License or the Artistic License, as specified in the README file.
9  *
10  */
11
12 /*
13  * 'You see: Mr. Drogo, he married poor Miss Primula Brandybuck.  She was
14  *  our Mr. Bilbo's first cousin on the mother's side (her mother being the
15  *  youngest of the Old Took's daughters); and Mr. Drogo was his second
16  *  cousin.  So Mr. Frodo is his first *and* second cousin, once removed
17  *  either way, as the saying is, if you follow me.'       --the Gaffer
18  *
19  *     [p.23 of _The Lord of the Rings_, I/i: "A Long-Expected Party"]
20  */
21
22 /* This file contains the functions that create, manipulate and optimize
23  * the OP structures that hold a compiled perl program.
24  *
25  * A Perl program is compiled into a tree of OPs. Each op contains
26  * structural pointers (eg to its siblings and the next op in the
27  * execution sequence), a pointer to the function that would execute the
28  * op, plus any data specific to that op. For example, an OP_CONST op
29  * points to the pp_const() function and to an SV containing the constant
30  * value. When pp_const() is executed, its job is to push that SV onto the
31  * stack.
32  *
33  * OPs are mainly created by the newFOO() functions, which are mainly
34  * called from the parser (in perly.y) as the code is parsed. For example
35  * the Perl code $a + $b * $c would cause the equivalent of the following
36  * to be called (oversimplifying a bit):
37  *
38  *  newBINOP(OP_ADD, flags,
39  *      newSVREF($a),
40  *      newBINOP(OP_MULTIPLY, flags, newSVREF($b), newSVREF($c))
41  *  )
42  *
43  * Note that during the build of miniperl, a temporary copy of this file
44  * is made, called opmini.c.
45  */
46
47 /*
48 Perl's compiler is essentially a 3-pass compiler with interleaved phases:
49
50     A bottom-up pass
51     A top-down pass
52     An execution-order pass
53
54 The bottom-up pass is represented by all the "newOP" routines and
55 the ck_ routines.  The bottom-upness is actually driven by yacc.
56 So at the point that a ck_ routine fires, we have no idea what the
57 context is, either upward in the syntax tree, or either forward or
58 backward in the execution order.  (The bottom-up parser builds that
59 part of the execution order it knows about, but if you follow the "next"
60 links around, you'll find it's actually a closed loop through the
61 top level node.)
62
63 Whenever the bottom-up parser gets to a node that supplies context to
64 its components, it invokes that portion of the top-down pass that applies
65 to that part of the subtree (and marks the top node as processed, so
66 if a node further up supplies context, it doesn't have to take the
67 plunge again).  As a particular subcase of this, as the new node is
68 built, it takes all the closed execution loops of its subcomponents
69 and links them into a new closed loop for the higher level node.  But
70 it's still not the real execution order.
71
72 The actual execution order is not known till we get a grammar reduction
73 to a top-level unit like a subroutine or file that will be called by
74 "name" rather than via a "next" pointer.  At that point, we can call
75 into peep() to do that code's portion of the 3rd pass.  It has to be
76 recursive, but it's recursive on basic blocks, not on tree nodes.
77 */
78
79 /* To implement user lexical pragmas, there needs to be a way at run time to
80    get the compile time state of %^H for that block.  Storing %^H in every
81    block (or even COP) would be very expensive, so a different approach is
82    taken.  The (running) state of %^H is serialised into a tree of HE-like
83    structs.  Stores into %^H are chained onto the current leaf as a struct
84    refcounted_he * with the key and the value.  Deletes from %^H are saved
85    with a value of PL_sv_placeholder.  The state of %^H at any point can be
86    turned back into a regular HV by walking back up the tree from that point's
87    leaf, ignoring any key you've already seen (placeholder or not), storing
88    the rest into the HV structure, then removing the placeholders. Hence
89    memory is only used to store the %^H deltas from the enclosing COP, rather
90    than the entire %^H on each COP.
91
92    To cause actions on %^H to write out the serialisation records, it has
93    magic type 'H'. This magic (itself) does nothing, but its presence causes
94    the values to gain magic type 'h', which has entries for set and clear.
95    C<Perl_magic_sethint> updates C<PL_compiling.cop_hints_hash> with a store
96    record, with deletes written by C<Perl_magic_clearhint>. C<SAVEHINTS>
97    saves the current C<PL_compiling.cop_hints_hash> on the save stack, so that
98    it will be correctly restored when any inner compiling scope is exited.
99 */
100
101 #include "EXTERN.h"
102 #define PERL_IN_OP_C
103 #include "perl.h"
104 #include "keywords.h"
105 #include "feature.h"
106 #include "regcomp.h"
107
108 #define CALL_PEEP(o) PL_peepp(aTHX_ o)
109 #define CALL_RPEEP(o) PL_rpeepp(aTHX_ o)
110 #define CALL_OPFREEHOOK(o) if (PL_opfreehook) PL_opfreehook(aTHX_ o)
111
112 #if defined(PL_OP_SLAB_ALLOC)
113
114 #ifdef PERL_DEBUG_READONLY_OPS
115 #  define PERL_SLAB_SIZE 4096
116 #  include <sys/mman.h>
117 #endif
118
119 #ifndef PERL_SLAB_SIZE
120 #define PERL_SLAB_SIZE 2048
121 #endif
122
123 void *
124 Perl_Slab_Alloc(pTHX_ size_t sz)
125 {
126     dVAR;
127     /*
128      * To make incrementing use count easy PL_OpSlab is an I32 *
129      * To make inserting the link to slab PL_OpPtr is I32 **
130      * So compute size in units of sizeof(I32 *) as that is how Pl_OpPtr increments
131      * Add an overhead for pointer to slab and round up as a number of pointers
132      */
133     sz = (sz + 2*sizeof(I32 *) -1)/sizeof(I32 *);
134     if ((PL_OpSpace -= sz) < 0) {
135 #ifdef PERL_DEBUG_READONLY_OPS
136         /* We need to allocate chunk by chunk so that we can control the VM
137            mapping */
138         PL_OpPtr = (I32**) mmap(0, PERL_SLAB_SIZE*sizeof(I32*), PROT_READ|PROT_WRITE,
139                         MAP_ANON|MAP_PRIVATE, -1, 0);
140
141         DEBUG_m(PerlIO_printf(Perl_debug_log, "mapped %lu at %p\n",
142                               (unsigned long) PERL_SLAB_SIZE*sizeof(I32*),
143                               PL_OpPtr));
144         if(PL_OpPtr == MAP_FAILED) {
145             perror("mmap failed");
146             abort();
147         }
148 #else
149
150         PL_OpPtr = (I32 **) PerlMemShared_calloc(PERL_SLAB_SIZE,sizeof(I32*)); 
151 #endif
152         if (!PL_OpPtr) {
153             return NULL;
154         }
155         /* We reserve the 0'th I32 sized chunk as a use count */
156         PL_OpSlab = (I32 *) PL_OpPtr;
157         /* Reduce size by the use count word, and by the size we need.
158          * Latter is to mimic the '-=' in the if() above
159          */
160         PL_OpSpace = PERL_SLAB_SIZE - (sizeof(I32)+sizeof(I32 **)-1)/sizeof(I32 **) - sz;
161         /* Allocation pointer starts at the top.
162            Theory: because we build leaves before trunk allocating at end
163            means that at run time access is cache friendly upward
164          */
165         PL_OpPtr += PERL_SLAB_SIZE;
166
167 #ifdef PERL_DEBUG_READONLY_OPS
168         /* We remember this slab.  */
169         /* This implementation isn't efficient, but it is simple. */
170         PL_slabs = (I32**) realloc(PL_slabs, sizeof(I32**) * (PL_slab_count + 1));
171         PL_slabs[PL_slab_count++] = PL_OpSlab;
172         DEBUG_m(PerlIO_printf(Perl_debug_log, "Allocate %p\n", PL_OpSlab));
173 #endif
174     }
175     assert( PL_OpSpace >= 0 );
176     /* Move the allocation pointer down */
177     PL_OpPtr   -= sz;
178     assert( PL_OpPtr > (I32 **) PL_OpSlab );
179     *PL_OpPtr   = PL_OpSlab;    /* Note which slab it belongs to */
180     (*PL_OpSlab)++;             /* Increment use count of slab */
181     assert( PL_OpPtr+sz <= ((I32 **) PL_OpSlab + PERL_SLAB_SIZE) );
182     assert( *PL_OpSlab > 0 );
183     return (void *)(PL_OpPtr + 1);
184 }
185
186 #ifdef PERL_DEBUG_READONLY_OPS
187 void
188 Perl_pending_Slabs_to_ro(pTHX) {
189     /* Turn all the allocated op slabs read only.  */
190     U32 count = PL_slab_count;
191     I32 **const slabs = PL_slabs;
192
193     /* Reset the array of pending OP slabs, as we're about to turn this lot
194        read only. Also, do it ahead of the loop in case the warn triggers,
195        and a warn handler has an eval */
196
197     PL_slabs = NULL;
198     PL_slab_count = 0;
199
200     /* Force a new slab for any further allocation.  */
201     PL_OpSpace = 0;
202
203     while (count--) {
204         void *const start = slabs[count];
205         const size_t size = PERL_SLAB_SIZE* sizeof(I32*);
206         if(mprotect(start, size, PROT_READ)) {
207             Perl_warn(aTHX_ "mprotect for %p %lu failed with %d",
208                       start, (unsigned long) size, errno);
209         }
210     }
211
212     free(slabs);
213 }
214
215 STATIC void
216 S_Slab_to_rw(pTHX_ void *op)
217 {
218     I32 * const * const ptr = (I32 **) op;
219     I32 * const slab = ptr[-1];
220
221     PERL_ARGS_ASSERT_SLAB_TO_RW;
222
223     assert( ptr-1 > (I32 **) slab );
224     assert( ptr < ( (I32 **) slab + PERL_SLAB_SIZE) );
225     assert( *slab > 0 );
226     if(mprotect(slab, PERL_SLAB_SIZE*sizeof(I32*), PROT_READ|PROT_WRITE)) {
227         Perl_warn(aTHX_ "mprotect RW for %p %lu failed with %d",
228                   slab, (unsigned long) PERL_SLAB_SIZE*sizeof(I32*), errno);
229     }
230 }
231
232 OP *
233 Perl_op_refcnt_inc(pTHX_ OP *o)
234 {
235     if(o) {
236         Slab_to_rw(o);
237         ++o->op_targ;
238     }
239     return o;
240
241 }
242
243 PADOFFSET
244 Perl_op_refcnt_dec(pTHX_ OP *o)
245 {
246     PERL_ARGS_ASSERT_OP_REFCNT_DEC;
247     Slab_to_rw(o);
248     return --o->op_targ;
249 }
250 #else
251 #  define Slab_to_rw(op)
252 #endif
253
254 void
255 Perl_Slab_Free(pTHX_ void *op)
256 {
257     I32 * const * const ptr = (I32 **) op;
258     I32 * const slab = ptr[-1];
259     PERL_ARGS_ASSERT_SLAB_FREE;
260     assert( ptr-1 > (I32 **) slab );
261     assert( ptr < ( (I32 **) slab + PERL_SLAB_SIZE) );
262     assert( *slab > 0 );
263     Slab_to_rw(op);
264     if (--(*slab) == 0) {
265 #  ifdef NETWARE
266 #    define PerlMemShared PerlMem
267 #  endif
268         
269 #ifdef PERL_DEBUG_READONLY_OPS
270         U32 count = PL_slab_count;
271         /* Need to remove this slab from our list of slabs */
272         if (count) {
273             while (count--) {
274                 if (PL_slabs[count] == slab) {
275                     dVAR;
276                     /* Found it. Move the entry at the end to overwrite it.  */
277                     DEBUG_m(PerlIO_printf(Perl_debug_log,
278                                           "Deallocate %p by moving %p from %lu to %lu\n",
279                                           PL_OpSlab,
280                                           PL_slabs[PL_slab_count - 1],
281                                           PL_slab_count, count));
282                     PL_slabs[count] = PL_slabs[--PL_slab_count];
283                     /* Could realloc smaller at this point, but probably not
284                        worth it.  */
285                     if(munmap(slab, PERL_SLAB_SIZE*sizeof(I32*))) {
286                         perror("munmap failed");
287                         abort();
288                     }
289                     break;
290                 }
291             }
292         }
293 #else
294     PerlMemShared_free(slab);
295 #endif
296         if (slab == PL_OpSlab) {
297             PL_OpSpace = 0;
298         }
299     }
300 }
301 #endif
302 /*
303  * In the following definition, the ", (OP*)0" is just to make the compiler
304  * think the expression is of the right type: croak actually does a Siglongjmp.
305  */
306 #define CHECKOP(type,o) \
307     ((PL_op_mask && PL_op_mask[type])                           \
308      ? ( op_free((OP*)o),                                       \
309          Perl_croak(aTHX_ "'%s' trapped by operation mask", PL_op_desc[type]),  \
310          (OP*)0 )                                               \
311      : PL_check[type](aTHX_ (OP*)o))
312
313 #define RETURN_UNLIMITED_NUMBER (PERL_INT_MAX / 2)
314
315 #define CHANGE_TYPE(o,type) \
316     STMT_START {                                \
317         o->op_type = (OPCODE)type;              \
318         o->op_ppaddr = PL_ppaddr[type];         \
319     } STMT_END
320
321 STATIC SV*
322 S_gv_ename(pTHX_ GV *gv)
323 {
324     SV* const tmpsv = sv_newmortal();
325
326     PERL_ARGS_ASSERT_GV_ENAME;
327
328     gv_efullname3(tmpsv, gv, NULL);
329     return tmpsv;
330 }
331
332 STATIC OP *
333 S_no_fh_allowed(pTHX_ OP *o)
334 {
335     PERL_ARGS_ASSERT_NO_FH_ALLOWED;
336
337     yyerror(Perl_form(aTHX_ "Missing comma after first argument to %s function",
338                  OP_DESC(o)));
339     return o;
340 }
341
342 STATIC OP *
343 S_too_few_arguments_sv(pTHX_ OP *o, SV *namesv, U32 flags)
344 {
345     PERL_ARGS_ASSERT_TOO_FEW_ARGUMENTS_SV;
346     yyerror_pv(Perl_form(aTHX_ "Not enough arguments for %"SVf, namesv),
347                                     SvUTF8(namesv) | flags);
348     return o;
349 }
350
351 STATIC OP *
352 S_too_few_arguments_pv(pTHX_ OP *o, const char* name, U32 flags)
353 {
354     PERL_ARGS_ASSERT_TOO_FEW_ARGUMENTS_PV;
355     yyerror_pv(Perl_form(aTHX_ "Not enough arguments for %s", name), flags);
356     return o;
357 }
358  
359 STATIC OP *
360 S_too_many_arguments_pv(pTHX_ OP *o, const char *name, U32 flags)
361 {
362     PERL_ARGS_ASSERT_TOO_MANY_ARGUMENTS_PV;
363
364     yyerror_pv(Perl_form(aTHX_ "Too many arguments for %s", name), flags);
365     return o;
366 }
367
368 STATIC OP *
369 S_too_many_arguments_sv(pTHX_ OP *o, SV *namesv, U32 flags)
370 {
371     PERL_ARGS_ASSERT_TOO_MANY_ARGUMENTS_SV;
372
373     yyerror_pv(Perl_form(aTHX_ "Too many arguments for %"SVf, SVfARG(namesv)),
374                 SvUTF8(namesv) | flags);
375     return o;
376 }
377
378 STATIC void
379 S_bad_type_pv(pTHX_ I32 n, const char *t, const char *name, U32 flags, const OP *kid)
380 {
381     PERL_ARGS_ASSERT_BAD_TYPE_PV;
382
383     yyerror_pv(Perl_form(aTHX_ "Type of arg %d to %s must be %s (not %s)",
384                  (int)n, name, t, OP_DESC(kid)), flags);
385 }
386
387 STATIC void
388 S_bad_type_sv(pTHX_ I32 n, const char *t, SV *namesv, U32 flags, const OP *kid)
389 {
390     PERL_ARGS_ASSERT_BAD_TYPE_SV;
391  
392     yyerror_pv(Perl_form(aTHX_ "Type of arg %d to %"SVf" must be %s (not %s)",
393                  (int)n, SVfARG(namesv), t, OP_DESC(kid)), SvUTF8(namesv) | flags);
394 }
395
396 STATIC void
397 S_no_bareword_allowed(pTHX_ OP *o)
398 {
399     PERL_ARGS_ASSERT_NO_BAREWORD_ALLOWED;
400
401     if (PL_madskills)
402         return;         /* various ok barewords are hidden in extra OP_NULL */
403     qerror(Perl_mess(aTHX_
404                      "Bareword \"%"SVf"\" not allowed while \"strict subs\" in use",
405                      SVfARG(cSVOPo_sv)));
406     o->op_private &= ~OPpCONST_STRICT; /* prevent warning twice about the same OP */
407 }
408
409 /* "register" allocation */
410
411 PADOFFSET
412 Perl_allocmy(pTHX_ const char *const name, const STRLEN len, const U32 flags)
413 {
414     dVAR;
415     PADOFFSET off;
416     const bool is_our = (PL_parser->in_my == KEY_our);
417
418     PERL_ARGS_ASSERT_ALLOCMY;
419
420     if (flags & ~SVf_UTF8)
421         Perl_croak(aTHX_ "panic: allocmy illegal flag bits 0x%" UVxf,
422                    (UV)flags);
423
424     /* Until we're using the length for real, cross check that we're being
425        told the truth.  */
426     assert(strlen(name) == len);
427
428     /* complain about "my $<special_var>" etc etc */
429     if (len &&
430         !(is_our ||
431           isALPHA(name[1]) ||
432           ((flags & SVf_UTF8) && isIDFIRST_utf8((U8 *)name+1)) ||
433           (name[1] == '_' && (*name == '$' || len > 2))))
434     {
435         /* name[2] is true if strlen(name) > 2  */
436         if (!(flags & SVf_UTF8 && UTF8_IS_START(name[1]))
437          && (!isPRINT(name[1]) || strchr("\t\n\r\f", name[1]))) {
438             yyerror(Perl_form(aTHX_ "Can't use global %c^%c%.*s in \"%s\"",
439                               name[0], toCTRL(name[1]), (int)(len - 2), name + 2,
440                               PL_parser->in_my == KEY_state ? "state" : "my"));
441         } else {
442             yyerror_pv(Perl_form(aTHX_ "Can't use global %.*s in \"%s\"", (int) len, name,
443                               PL_parser->in_my == KEY_state ? "state" : "my"), flags & SVf_UTF8);
444         }
445     }
446
447     /* allocate a spare slot and store the name in that slot */
448
449     off = pad_add_name_pvn(name, len,
450                        (is_our ? padadd_OUR :
451                         PL_parser->in_my == KEY_state ? padadd_STATE : 0)
452                             | ( flags & SVf_UTF8 ? SVf_UTF8 : 0 ),
453                     PL_parser->in_my_stash,
454                     (is_our
455                         /* $_ is always in main::, even with our */
456                         ? (PL_curstash && !strEQ(name,"$_") ? PL_curstash : PL_defstash)
457                         : NULL
458                     )
459     );
460     /* anon sub prototypes contains state vars should always be cloned,
461      * otherwise the state var would be shared between anon subs */
462
463     if (PL_parser->in_my == KEY_state && CvANON(PL_compcv))
464         CvCLONE_on(PL_compcv);
465
466     return off;
467 }
468
469 /*
470 =for apidoc alloccopstash
471
472 Available only under threaded builds, this function allocates an entry in
473 C<PL_stashpad> for the stash passed to it.
474
475 =cut
476 */
477
478 #ifdef USE_ITHREADS
479 PADOFFSET
480 Perl_alloccopstash(pTHX_ HV *hv)
481 {
482     PADOFFSET off = 0, o = 1;
483     bool found_slot = FALSE;
484
485     PERL_ARGS_ASSERT_ALLOCCOPSTASH;
486
487     if (PL_stashpad[PL_stashpadix] == hv) return PL_stashpadix;
488
489     for (; o < PL_stashpadmax; ++o) {
490         if (PL_stashpad[o] == hv) return PL_stashpadix = o;
491         if (!PL_stashpad[o] || SvTYPE(PL_stashpad[o]) != SVt_PVHV)
492             found_slot = TRUE, off = o;
493     }
494     if (!found_slot) {
495         Renew(PL_stashpad, PL_stashpadmax + 10, HV *);
496         Zero(PL_stashpad + PL_stashpadmax, 10, HV *);
497         off = PL_stashpadmax;
498         PL_stashpadmax += 10;
499     }
500
501     PL_stashpad[PL_stashpadix = off] = hv;
502     return off;
503 }
504 #endif
505
506 /* free the body of an op without examining its contents.
507  * Always use this rather than FreeOp directly */
508
509 static void
510 S_op_destroy(pTHX_ OP *o)
511 {
512     if (o->op_latefree) {
513         o->op_latefreed = 1;
514         return;
515     }
516     FreeOp(o);
517 }
518
519 #ifdef USE_ITHREADS
520 #  define forget_pmop(a,b)      S_forget_pmop(aTHX_ a,b)
521 #else
522 #  define forget_pmop(a,b)      S_forget_pmop(aTHX_ a)
523 #endif
524
525 /* Destructor */
526
527 void
528 Perl_op_free(pTHX_ OP *o)
529 {
530     dVAR;
531     OPCODE type;
532
533     if (!o)
534         return;
535     if (o->op_latefreed) {
536         if (o->op_latefree)
537             return;
538         goto do_free;
539     }
540
541     type = o->op_type;
542     if (o->op_private & OPpREFCOUNTED) {
543         switch (type) {
544         case OP_LEAVESUB:
545         case OP_LEAVESUBLV:
546         case OP_LEAVEEVAL:
547         case OP_LEAVE:
548         case OP_SCOPE:
549         case OP_LEAVEWRITE:
550             {
551             PADOFFSET refcnt;
552             OP_REFCNT_LOCK;
553             refcnt = OpREFCNT_dec(o);
554             OP_REFCNT_UNLOCK;
555             if (refcnt) {
556                 /* Need to find and remove any pattern match ops from the list
557                    we maintain for reset().  */
558                 find_and_forget_pmops(o);
559                 return;
560             }
561             }
562             break;
563         default:
564             break;
565         }
566     }
567
568     /* Call the op_free hook if it has been set. Do it now so that it's called
569      * at the right time for refcounted ops, but still before all of the kids
570      * are freed. */
571     CALL_OPFREEHOOK(o);
572
573     if (o->op_flags & OPf_KIDS) {
574         register OP *kid, *nextkid;
575         for (kid = cUNOPo->op_first; kid; kid = nextkid) {
576             nextkid = kid->op_sibling; /* Get before next freeing kid */
577             op_free(kid);
578         }
579     }
580
581 #ifdef PERL_DEBUG_READONLY_OPS
582     Slab_to_rw(o);
583 #endif
584
585     /* COP* is not cleared by op_clear() so that we may track line
586      * numbers etc even after null() */
587     if (type == OP_NEXTSTATE || type == OP_DBSTATE
588             || (type == OP_NULL /* the COP might have been null'ed */
589                 && ((OPCODE)o->op_targ == OP_NEXTSTATE
590                     || (OPCODE)o->op_targ == OP_DBSTATE))) {
591         cop_free((COP*)o);
592     }
593
594     if (type == OP_NULL)
595         type = (OPCODE)o->op_targ;
596
597     op_clear(o);
598     if (o->op_latefree) {
599         o->op_latefreed = 1;
600         return;
601     }
602   do_free:
603     FreeOp(o);
604 #ifdef DEBUG_LEAKING_SCALARS
605     if (PL_op == o)
606         PL_op = NULL;
607 #endif
608 }
609
610 void
611 Perl_op_clear(pTHX_ OP *o)
612 {
613
614     dVAR;
615
616     PERL_ARGS_ASSERT_OP_CLEAR;
617
618 #ifdef PERL_MAD
619     mad_free(o->op_madprop);
620     o->op_madprop = 0;
621 #endif    
622
623  retry:
624     switch (o->op_type) {
625     case OP_NULL:       /* Was holding old type, if any. */
626         if (PL_madskills && o->op_targ != OP_NULL) {
627             o->op_type = (Optype)o->op_targ;
628             o->op_targ = 0;
629             goto retry;
630         }
631     case OP_ENTERTRY:
632     case OP_ENTEREVAL:  /* Was holding hints. */
633         o->op_targ = 0;
634         break;
635     default:
636         if (!(o->op_flags & OPf_REF)
637             || (PL_check[o->op_type] != Perl_ck_ftst))
638             break;
639         /* FALL THROUGH */
640     case OP_GVSV:
641     case OP_GV:
642     case OP_AELEMFAST:
643         {
644             GV *gv = (o->op_type == OP_GV || o->op_type == OP_GVSV)
645 #ifdef USE_ITHREADS
646                         && PL_curpad
647 #endif
648                         ? cGVOPo_gv : NULL;
649             /* It's possible during global destruction that the GV is freed
650                before the optree. Whilst the SvREFCNT_inc is happy to bump from
651                0 to 1 on a freed SV, the corresponding SvREFCNT_dec from 1 to 0
652                will trigger an assertion failure, because the entry to sv_clear
653                checks that the scalar is not already freed.  A check of for
654                !SvIS_FREED(gv) turns out to be invalid, because during global
655                destruction the reference count can be forced down to zero
656                (with SVf_BREAK set).  In which case raising to 1 and then
657                dropping to 0 triggers cleanup before it should happen.  I
658                *think* that this might actually be a general, systematic,
659                weakness of the whole idea of SVf_BREAK, in that code *is*
660                allowed to raise and lower references during global destruction,
661                so any *valid* code that happens to do this during global
662                destruction might well trigger premature cleanup.  */
663             bool still_valid = gv && SvREFCNT(gv);
664
665             if (still_valid)
666                 SvREFCNT_inc_simple_void(gv);
667 #ifdef USE_ITHREADS
668             if (cPADOPo->op_padix > 0) {
669                 /* No GvIN_PAD_off(cGVOPo_gv) here, because other references
670                  * may still exist on the pad */
671                 pad_swipe(cPADOPo->op_padix, TRUE);
672                 cPADOPo->op_padix = 0;
673             }
674 #else
675             SvREFCNT_dec(cSVOPo->op_sv);
676             cSVOPo->op_sv = NULL;
677 #endif
678             if (still_valid) {
679                 int try_downgrade = SvREFCNT(gv) == 2;
680                 SvREFCNT_dec(gv);
681                 if (try_downgrade)
682                     gv_try_downgrade(gv);
683             }
684         }
685         break;
686     case OP_METHOD_NAMED:
687     case OP_CONST:
688     case OP_HINTSEVAL:
689         SvREFCNT_dec(cSVOPo->op_sv);
690         cSVOPo->op_sv = NULL;
691 #ifdef USE_ITHREADS
692         /** Bug #15654
693           Even if op_clear does a pad_free for the target of the op,
694           pad_free doesn't actually remove the sv that exists in the pad;
695           instead it lives on. This results in that it could be reused as 
696           a target later on when the pad was reallocated.
697         **/
698         if(o->op_targ) {
699           pad_swipe(o->op_targ,1);
700           o->op_targ = 0;
701         }
702 #endif
703         break;
704     case OP_GOTO:
705     case OP_NEXT:
706     case OP_LAST:
707     case OP_REDO:
708         if (o->op_flags & (OPf_SPECIAL|OPf_STACKED|OPf_KIDS))
709             break;
710         /* FALL THROUGH */
711     case OP_TRANS:
712     case OP_TRANSR:
713         if (o->op_private & (OPpTRANS_FROM_UTF|OPpTRANS_TO_UTF)) {
714 #ifdef USE_ITHREADS
715             if (cPADOPo->op_padix > 0) {
716                 pad_swipe(cPADOPo->op_padix, TRUE);
717                 cPADOPo->op_padix = 0;
718             }
719 #else
720             SvREFCNT_dec(cSVOPo->op_sv);
721             cSVOPo->op_sv = NULL;
722 #endif
723         }
724         else {
725             PerlMemShared_free(cPVOPo->op_pv);
726             cPVOPo->op_pv = NULL;
727         }
728         break;
729     case OP_SUBST:
730         op_free(cPMOPo->op_pmreplrootu.op_pmreplroot);
731         goto clear_pmop;
732     case OP_PUSHRE:
733 #ifdef USE_ITHREADS
734         if (cPMOPo->op_pmreplrootu.op_pmtargetoff) {
735             /* No GvIN_PAD_off here, because other references may still
736              * exist on the pad */
737             pad_swipe(cPMOPo->op_pmreplrootu.op_pmtargetoff, TRUE);
738         }
739 #else
740         SvREFCNT_dec(MUTABLE_SV(cPMOPo->op_pmreplrootu.op_pmtargetgv));
741 #endif
742         /* FALL THROUGH */
743     case OP_MATCH:
744     case OP_QR:
745 clear_pmop:
746         if (!(cPMOPo->op_pmflags & PMf_CODELIST_PRIVATE))
747             op_free(cPMOPo->op_code_list);
748         cPMOPo->op_code_list = NULL;
749         forget_pmop(cPMOPo, 1);
750         cPMOPo->op_pmreplrootu.op_pmreplroot = NULL;
751         /* we use the same protection as the "SAFE" version of the PM_ macros
752          * here since sv_clean_all might release some PMOPs
753          * after PL_regex_padav has been cleared
754          * and the clearing of PL_regex_padav needs to
755          * happen before sv_clean_all
756          */
757 #ifdef USE_ITHREADS
758         if(PL_regex_pad) {        /* We could be in destruction */
759             const IV offset = (cPMOPo)->op_pmoffset;
760             ReREFCNT_dec(PM_GETRE(cPMOPo));
761             PL_regex_pad[offset] = &PL_sv_undef;
762             sv_catpvn_nomg(PL_regex_pad[0], (const char *)&offset,
763                            sizeof(offset));
764         }
765 #else
766         ReREFCNT_dec(PM_GETRE(cPMOPo));
767         PM_SETRE(cPMOPo, NULL);
768 #endif
769
770         break;
771     }
772
773     if (o->op_targ > 0) {
774         pad_free(o->op_targ);
775         o->op_targ = 0;
776     }
777 }
778
779 STATIC void
780 S_cop_free(pTHX_ COP* cop)
781 {
782     PERL_ARGS_ASSERT_COP_FREE;
783
784     CopFILE_free(cop);
785     if (! specialWARN(cop->cop_warnings))
786         PerlMemShared_free(cop->cop_warnings);
787     cophh_free(CopHINTHASH_get(cop));
788 }
789
790 STATIC void
791 S_forget_pmop(pTHX_ PMOP *const o
792 #ifdef USE_ITHREADS
793               , U32 flags
794 #endif
795               )
796 {
797     HV * const pmstash = PmopSTASH(o);
798
799     PERL_ARGS_ASSERT_FORGET_PMOP;
800
801     if (pmstash && !SvIS_FREED(pmstash) && SvMAGICAL(pmstash)) {
802         MAGIC * const mg = mg_find((const SV *)pmstash, PERL_MAGIC_symtab);
803         if (mg) {
804             PMOP **const array = (PMOP**) mg->mg_ptr;
805             U32 count = mg->mg_len / sizeof(PMOP**);
806             U32 i = count;
807
808             while (i--) {
809                 if (array[i] == o) {
810                     /* Found it. Move the entry at the end to overwrite it.  */
811                     array[i] = array[--count];
812                     mg->mg_len = count * sizeof(PMOP**);
813                     /* Could realloc smaller at this point always, but probably
814                        not worth it. Probably worth free()ing if we're the
815                        last.  */
816                     if(!count) {
817                         Safefree(mg->mg_ptr);
818                         mg->mg_ptr = NULL;
819                     }
820                     break;
821                 }
822             }
823         }
824     }
825     if (PL_curpm == o) 
826         PL_curpm = NULL;
827 #ifdef USE_ITHREADS
828     if (flags)
829         PmopSTASH_free(o);
830 #endif
831 }
832
833 STATIC void
834 S_find_and_forget_pmops(pTHX_ OP *o)
835 {
836     PERL_ARGS_ASSERT_FIND_AND_FORGET_PMOPS;
837
838     if (o->op_flags & OPf_KIDS) {
839         OP *kid = cUNOPo->op_first;
840         while (kid) {
841             switch (kid->op_type) {
842             case OP_SUBST:
843             case OP_PUSHRE:
844             case OP_MATCH:
845             case OP_QR:
846                 forget_pmop((PMOP*)kid, 0);
847             }
848             find_and_forget_pmops(kid);
849             kid = kid->op_sibling;
850         }
851     }
852 }
853
854 void
855 Perl_op_null(pTHX_ OP *o)
856 {
857     dVAR;
858
859     PERL_ARGS_ASSERT_OP_NULL;
860
861     if (o->op_type == OP_NULL)
862         return;
863     if (!PL_madskills)
864         op_clear(o);
865     o->op_targ = o->op_type;
866     o->op_type = OP_NULL;
867     o->op_ppaddr = PL_ppaddr[OP_NULL];
868 }
869
870 void
871 Perl_op_refcnt_lock(pTHX)
872 {
873     dVAR;
874     PERL_UNUSED_CONTEXT;
875     OP_REFCNT_LOCK;
876 }
877
878 void
879 Perl_op_refcnt_unlock(pTHX)
880 {
881     dVAR;
882     PERL_UNUSED_CONTEXT;
883     OP_REFCNT_UNLOCK;
884 }
885
886 /* Contextualizers */
887
888 /*
889 =for apidoc Am|OP *|op_contextualize|OP *o|I32 context
890
891 Applies a syntactic context to an op tree representing an expression.
892 I<o> is the op tree, and I<context> must be C<G_SCALAR>, C<G_ARRAY>,
893 or C<G_VOID> to specify the context to apply.  The modified op tree
894 is returned.
895
896 =cut
897 */
898
899 OP *
900 Perl_op_contextualize(pTHX_ OP *o, I32 context)
901 {
902     PERL_ARGS_ASSERT_OP_CONTEXTUALIZE;
903     switch (context) {
904         case G_SCALAR: return scalar(o);
905         case G_ARRAY:  return list(o);
906         case G_VOID:   return scalarvoid(o);
907         default:
908             Perl_croak(aTHX_ "panic: op_contextualize bad context %ld",
909                        (long) context);
910             return o;
911     }
912 }
913
914 /*
915 =head1 Optree Manipulation Functions
916
917 =for apidoc Am|OP*|op_linklist|OP *o
918 This function is the implementation of the L</LINKLIST> macro. It should
919 not be called directly.
920
921 =cut
922 */
923
924 OP *
925 Perl_op_linklist(pTHX_ OP *o)
926 {
927     OP *first;
928
929     PERL_ARGS_ASSERT_OP_LINKLIST;
930
931     if (o->op_next)
932         return o->op_next;
933
934     /* establish postfix order */
935     first = cUNOPo->op_first;
936     if (first) {
937         register OP *kid;
938         o->op_next = LINKLIST(first);
939         kid = first;
940         for (;;) {
941             if (kid->op_sibling) {
942                 kid->op_next = LINKLIST(kid->op_sibling);
943                 kid = kid->op_sibling;
944             } else {
945                 kid->op_next = o;
946                 break;
947             }
948         }
949     }
950     else
951         o->op_next = o;
952
953     return o->op_next;
954 }
955
956 static OP *
957 S_scalarkids(pTHX_ OP *o)
958 {
959     if (o && o->op_flags & OPf_KIDS) {
960         OP *kid;
961         for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
962             scalar(kid);
963     }
964     return o;
965 }
966
967 STATIC OP *
968 S_scalarboolean(pTHX_ OP *o)
969 {
970     dVAR;
971
972     PERL_ARGS_ASSERT_SCALARBOOLEAN;
973
974     if (o->op_type == OP_SASSIGN && cBINOPo->op_first->op_type == OP_CONST
975      && !(cBINOPo->op_first->op_flags & OPf_SPECIAL)) {
976         if (ckWARN(WARN_SYNTAX)) {
977             const line_t oldline = CopLINE(PL_curcop);
978
979             if (PL_parser && PL_parser->copline != NOLINE)
980                 CopLINE_set(PL_curcop, PL_parser->copline);
981             Perl_warner(aTHX_ packWARN(WARN_SYNTAX), "Found = in conditional, should be ==");
982             CopLINE_set(PL_curcop, oldline);
983         }
984     }
985     return scalar(o);
986 }
987
988 OP *
989 Perl_scalar(pTHX_ OP *o)
990 {
991     dVAR;
992     OP *kid;
993
994     /* assumes no premature commitment */
995     if (!o || (PL_parser && PL_parser->error_count)
996          || (o->op_flags & OPf_WANT)
997          || o->op_type == OP_RETURN)
998     {
999         return o;
1000     }
1001
1002     o->op_flags = (o->op_flags & ~OPf_WANT) | OPf_WANT_SCALAR;
1003
1004     switch (o->op_type) {
1005     case OP_REPEAT:
1006         scalar(cBINOPo->op_first);
1007         break;
1008     case OP_OR:
1009     case OP_AND:
1010     case OP_COND_EXPR:
1011         for (kid = cUNOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
1012             scalar(kid);
1013         break;
1014         /* FALL THROUGH */
1015     case OP_SPLIT:
1016     case OP_MATCH:
1017     case OP_QR:
1018     case OP_SUBST:
1019     case OP_NULL:
1020     default:
1021         if (o->op_flags & OPf_KIDS) {
1022             for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling)
1023                 scalar(kid);
1024         }
1025         break;
1026     case OP_LEAVE:
1027     case OP_LEAVETRY:
1028         kid = cLISTOPo->op_first;
1029         scalar(kid);
1030         kid = kid->op_sibling;
1031     do_kids:
1032         while (kid) {
1033             OP *sib = kid->op_sibling;
1034             if (sib && kid->op_type != OP_LEAVEWHEN)
1035                 scalarvoid(kid);
1036             else
1037                 scalar(kid);
1038             kid = sib;
1039         }
1040         PL_curcop = &PL_compiling;
1041         break;
1042     case OP_SCOPE:
1043     case OP_LINESEQ:
1044     case OP_LIST:
1045         kid = cLISTOPo->op_first;
1046         goto do_kids;
1047     case OP_SORT:
1048         Perl_ck_warner(aTHX_ packWARN(WARN_VOID), "Useless use of sort in scalar context");
1049         break;
1050     }
1051     return o;
1052 }
1053
1054 OP *
1055 Perl_scalarvoid(pTHX_ OP *o)
1056 {
1057     dVAR;
1058     OP *kid;
1059     const char* useless = NULL;
1060     U32 useless_is_utf8 = 0;
1061     SV* sv;
1062     U8 want;
1063
1064     PERL_ARGS_ASSERT_SCALARVOID;
1065
1066     /* trailing mad null ops don't count as "there" for void processing */
1067     if (PL_madskills &&
1068         o->op_type != OP_NULL &&
1069         o->op_sibling &&
1070         o->op_sibling->op_type == OP_NULL)
1071     {
1072         OP *sib;
1073         for (sib = o->op_sibling;
1074                 sib && sib->op_type == OP_NULL;
1075                 sib = sib->op_sibling) ;
1076         
1077         if (!sib)
1078             return o;
1079     }
1080
1081     if (o->op_type == OP_NEXTSTATE
1082         || o->op_type == OP_DBSTATE
1083         || (o->op_type == OP_NULL && (o->op_targ == OP_NEXTSTATE
1084                                       || o->op_targ == OP_DBSTATE)))
1085         PL_curcop = (COP*)o;            /* for warning below */
1086
1087     /* assumes no premature commitment */
1088     want = o->op_flags & OPf_WANT;
1089     if ((want && want != OPf_WANT_SCALAR)
1090          || (PL_parser && PL_parser->error_count)
1091          || o->op_type == OP_RETURN || o->op_type == OP_REQUIRE || o->op_type == OP_LEAVEWHEN)
1092     {
1093         return o;
1094     }
1095
1096     if ((o->op_private & OPpTARGET_MY)
1097         && (PL_opargs[o->op_type] & OA_TARGLEX))/* OPp share the meaning */
1098     {
1099         return scalar(o);                       /* As if inside SASSIGN */
1100     }
1101
1102     o->op_flags = (o->op_flags & ~OPf_WANT) | OPf_WANT_VOID;
1103
1104     switch (o->op_type) {
1105     default:
1106         if (!(PL_opargs[o->op_type] & OA_FOLDCONST))
1107             break;
1108         /* FALL THROUGH */
1109     case OP_REPEAT:
1110         if (o->op_flags & OPf_STACKED)
1111             break;
1112         goto func_ops;
1113     case OP_SUBSTR:
1114         if (o->op_private == 4)
1115             break;
1116         /* FALL THROUGH */
1117     case OP_GVSV:
1118     case OP_WANTARRAY:
1119     case OP_GV:
1120     case OP_SMARTMATCH:
1121     case OP_PADSV:
1122     case OP_PADAV:
1123     case OP_PADHV:
1124     case OP_PADANY:
1125     case OP_AV2ARYLEN:
1126     case OP_REF:
1127     case OP_REFGEN:
1128     case OP_SREFGEN:
1129     case OP_DEFINED:
1130     case OP_HEX:
1131     case OP_OCT:
1132     case OP_LENGTH:
1133     case OP_VEC:
1134     case OP_INDEX:
1135     case OP_RINDEX:
1136     case OP_SPRINTF:
1137     case OP_AELEM:
1138     case OP_AELEMFAST:
1139     case OP_AELEMFAST_LEX:
1140     case OP_ASLICE:
1141     case OP_HELEM:
1142     case OP_HSLICE:
1143     case OP_UNPACK:
1144     case OP_PACK:
1145     case OP_JOIN:
1146     case OP_LSLICE:
1147     case OP_ANONLIST:
1148     case OP_ANONHASH:
1149     case OP_SORT:
1150     case OP_REVERSE:
1151     case OP_RANGE:
1152     case OP_FLIP:
1153     case OP_FLOP:
1154     case OP_CALLER:
1155     case OP_FILENO:
1156     case OP_EOF:
1157     case OP_TELL:
1158     case OP_GETSOCKNAME:
1159     case OP_GETPEERNAME:
1160     case OP_READLINK:
1161     case OP_TELLDIR:
1162     case OP_GETPPID:
1163     case OP_GETPGRP:
1164     case OP_GETPRIORITY:
1165     case OP_TIME:
1166     case OP_TMS:
1167     case OP_LOCALTIME:
1168     case OP_GMTIME:
1169     case OP_GHBYNAME:
1170     case OP_GHBYADDR:
1171     case OP_GHOSTENT:
1172     case OP_GNBYNAME:
1173     case OP_GNBYADDR:
1174     case OP_GNETENT:
1175     case OP_GPBYNAME:
1176     case OP_GPBYNUMBER:
1177     case OP_GPROTOENT:
1178     case OP_GSBYNAME:
1179     case OP_GSBYPORT:
1180     case OP_GSERVENT:
1181     case OP_GPWNAM:
1182     case OP_GPWUID:
1183     case OP_GGRNAM:
1184     case OP_GGRGID:
1185     case OP_GETLOGIN:
1186     case OP_PROTOTYPE:
1187     case OP_RUNCV:
1188       func_ops:
1189         if (!(o->op_private & (OPpLVAL_INTRO|OPpOUR_INTRO)))
1190             /* Otherwise it's "Useless use of grep iterator" */
1191             useless = OP_DESC(o);
1192         break;
1193
1194     case OP_SPLIT:
1195         kid = cLISTOPo->op_first;
1196         if (kid && kid->op_type == OP_PUSHRE
1197 #ifdef USE_ITHREADS
1198                 && !((PMOP*)kid)->op_pmreplrootu.op_pmtargetoff)
1199 #else
1200                 && !((PMOP*)kid)->op_pmreplrootu.op_pmtargetgv)
1201 #endif
1202             useless = OP_DESC(o);
1203         break;
1204
1205     case OP_NOT:
1206        kid = cUNOPo->op_first;
1207        if (kid->op_type != OP_MATCH && kid->op_type != OP_SUBST &&
1208            kid->op_type != OP_TRANS && kid->op_type != OP_TRANSR) {
1209                 goto func_ops;
1210        }
1211        useless = "negative pattern binding (!~)";
1212        break;
1213
1214     case OP_SUBST:
1215         if (cPMOPo->op_pmflags & PMf_NONDESTRUCT)
1216             useless = "non-destructive substitution (s///r)";
1217         break;
1218
1219     case OP_TRANSR:
1220         useless = "non-destructive transliteration (tr///r)";
1221         break;
1222
1223     case OP_RV2GV:
1224     case OP_RV2SV:
1225     case OP_RV2AV:
1226     case OP_RV2HV:
1227         if (!(o->op_private & (OPpLVAL_INTRO|OPpOUR_INTRO)) &&
1228                 (!o->op_sibling || o->op_sibling->op_type != OP_READLINE))
1229             useless = "a variable";
1230         break;
1231
1232     case OP_CONST:
1233         sv = cSVOPo_sv;
1234         if (cSVOPo->op_private & OPpCONST_STRICT)
1235             no_bareword_allowed(o);
1236         else {
1237             if (ckWARN(WARN_VOID)) {
1238                 /* don't warn on optimised away booleans, eg 
1239                  * use constant Foo, 5; Foo || print; */
1240                 if (cSVOPo->op_private & OPpCONST_SHORTCIRCUIT)
1241                     useless = NULL;
1242                 /* the constants 0 and 1 are permitted as they are
1243                    conventionally used as dummies in constructs like
1244                         1 while some_condition_with_side_effects;  */
1245                 else if (SvNIOK(sv) && (SvNV(sv) == 0.0 || SvNV(sv) == 1.0))
1246                     useless = NULL;
1247                 else if (SvPOK(sv)) {
1248                   /* perl4's way of mixing documentation and code
1249                      (before the invention of POD) was based on a
1250                      trick to mix nroff and perl code. The trick was
1251                      built upon these three nroff macros being used in
1252                      void context. The pink camel has the details in
1253                      the script wrapman near page 319. */
1254                     const char * const maybe_macro = SvPVX_const(sv);
1255                     if (strnEQ(maybe_macro, "di", 2) ||
1256                         strnEQ(maybe_macro, "ds", 2) ||
1257                         strnEQ(maybe_macro, "ig", 2))
1258                             useless = NULL;
1259                     else {
1260                         SV * const dsv = newSVpvs("");
1261                         SV* msv = sv_2mortal(Perl_newSVpvf(aTHX_
1262                                     "a constant (%s)",
1263                                     pv_pretty(dsv, maybe_macro, SvCUR(sv), 32, NULL, NULL,
1264                                             PERL_PV_PRETTY_DUMP | PERL_PV_ESCAPE_NOCLEAR | PERL_PV_ESCAPE_UNI_DETECT )));
1265                         SvREFCNT_dec(dsv);
1266                         useless = SvPV_nolen(msv);
1267                         useless_is_utf8 = SvUTF8(msv);
1268                     }
1269                 }
1270                 else if (SvOK(sv)) {
1271                     SV* msv = sv_2mortal(Perl_newSVpvf(aTHX_
1272                                 "a constant (%"SVf")", sv));
1273                     useless = SvPV_nolen(msv);
1274                 }
1275                 else
1276                     useless = "a constant (undef)";
1277             }
1278         }
1279         op_null(o);             /* don't execute or even remember it */
1280         break;
1281
1282     case OP_POSTINC:
1283         o->op_type = OP_PREINC;         /* pre-increment is faster */
1284         o->op_ppaddr = PL_ppaddr[OP_PREINC];
1285         break;
1286
1287     case OP_POSTDEC:
1288         o->op_type = OP_PREDEC;         /* pre-decrement is faster */
1289         o->op_ppaddr = PL_ppaddr[OP_PREDEC];
1290         break;
1291
1292     case OP_I_POSTINC:
1293         o->op_type = OP_I_PREINC;       /* pre-increment is faster */
1294         o->op_ppaddr = PL_ppaddr[OP_I_PREINC];
1295         break;
1296
1297     case OP_I_POSTDEC:
1298         o->op_type = OP_I_PREDEC;       /* pre-decrement is faster */
1299         o->op_ppaddr = PL_ppaddr[OP_I_PREDEC];
1300         break;
1301
1302     case OP_SASSIGN: {
1303         OP *rv2gv;
1304         UNOP *refgen, *rv2cv;
1305         LISTOP *exlist;
1306
1307         if ((o->op_private & ~OPpASSIGN_BACKWARDS) != 2)
1308             break;
1309
1310         rv2gv = ((BINOP *)o)->op_last;
1311         if (!rv2gv || rv2gv->op_type != OP_RV2GV)
1312             break;
1313
1314         refgen = (UNOP *)((BINOP *)o)->op_first;
1315
1316         if (!refgen || refgen->op_type != OP_REFGEN)
1317             break;
1318
1319         exlist = (LISTOP *)refgen->op_first;
1320         if (!exlist || exlist->op_type != OP_NULL
1321             || exlist->op_targ != OP_LIST)
1322             break;
1323
1324         if (exlist->op_first->op_type != OP_PUSHMARK)
1325             break;
1326
1327         rv2cv = (UNOP*)exlist->op_last;
1328
1329         if (rv2cv->op_type != OP_RV2CV)
1330             break;
1331
1332         assert ((rv2gv->op_private & OPpDONT_INIT_GV) == 0);
1333         assert ((o->op_private & OPpASSIGN_CV_TO_GV) == 0);
1334         assert ((rv2cv->op_private & OPpMAY_RETURN_CONSTANT) == 0);
1335
1336         o->op_private |= OPpASSIGN_CV_TO_GV;
1337         rv2gv->op_private |= OPpDONT_INIT_GV;
1338         rv2cv->op_private |= OPpMAY_RETURN_CONSTANT;
1339
1340         break;
1341     }
1342
1343     case OP_AASSIGN: {
1344         inplace_aassign(o);
1345         break;
1346     }
1347
1348     case OP_OR:
1349     case OP_AND:
1350         kid = cLOGOPo->op_first;
1351         if (kid->op_type == OP_NOT
1352             && (kid->op_flags & OPf_KIDS)
1353             && !PL_madskills) {
1354             if (o->op_type == OP_AND) {
1355                 o->op_type = OP_OR;
1356                 o->op_ppaddr = PL_ppaddr[OP_OR];
1357             } else {
1358                 o->op_type = OP_AND;
1359                 o->op_ppaddr = PL_ppaddr[OP_AND];
1360             }
1361             op_null(kid);
1362         }
1363
1364     case OP_DOR:
1365     case OP_COND_EXPR:
1366     case OP_ENTERGIVEN:
1367     case OP_ENTERWHEN:
1368         for (kid = cUNOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
1369             scalarvoid(kid);
1370         break;
1371
1372     case OP_NULL:
1373         if (o->op_flags & OPf_STACKED)
1374             break;
1375         /* FALL THROUGH */
1376     case OP_NEXTSTATE:
1377     case OP_DBSTATE:
1378     case OP_ENTERTRY:
1379     case OP_ENTER:
1380         if (!(o->op_flags & OPf_KIDS))
1381             break;
1382         /* FALL THROUGH */
1383     case OP_SCOPE:
1384     case OP_LEAVE:
1385     case OP_LEAVETRY:
1386     case OP_LEAVELOOP:
1387     case OP_LINESEQ:
1388     case OP_LIST:
1389     case OP_LEAVEGIVEN:
1390     case OP_LEAVEWHEN:
1391         for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
1392             scalarvoid(kid);
1393         break;
1394     case OP_ENTEREVAL:
1395         scalarkids(o);
1396         break;
1397     case OP_SCALAR:
1398         return scalar(o);
1399     }
1400     if (useless)
1401        Perl_ck_warner(aTHX_ packWARN(WARN_VOID), "Useless use of %"SVf" in void context",
1402                        newSVpvn_flags(useless, strlen(useless),
1403                             SVs_TEMP | ( useless_is_utf8 ? SVf_UTF8 : 0 )));
1404     return o;
1405 }
1406
1407 static OP *
1408 S_listkids(pTHX_ OP *o)
1409 {
1410     if (o && o->op_flags & OPf_KIDS) {
1411         OP *kid;
1412         for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
1413             list(kid);
1414     }
1415     return o;
1416 }
1417
1418 OP *
1419 Perl_list(pTHX_ OP *o)
1420 {
1421     dVAR;
1422     OP *kid;
1423
1424     /* assumes no premature commitment */
1425     if (!o || (o->op_flags & OPf_WANT)
1426          || (PL_parser && PL_parser->error_count)
1427          || o->op_type == OP_RETURN)
1428     {
1429         return o;
1430     }
1431
1432     if ((o->op_private & OPpTARGET_MY)
1433         && (PL_opargs[o->op_type] & OA_TARGLEX))/* OPp share the meaning */
1434     {
1435         return o;                               /* As if inside SASSIGN */
1436     }
1437
1438     o->op_flags = (o->op_flags & ~OPf_WANT) | OPf_WANT_LIST;
1439
1440     switch (o->op_type) {
1441     case OP_FLOP:
1442     case OP_REPEAT:
1443         list(cBINOPo->op_first);
1444         break;
1445     case OP_OR:
1446     case OP_AND:
1447     case OP_COND_EXPR:
1448         for (kid = cUNOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
1449             list(kid);
1450         break;
1451     default:
1452     case OP_MATCH:
1453     case OP_QR:
1454     case OP_SUBST:
1455     case OP_NULL:
1456         if (!(o->op_flags & OPf_KIDS))
1457             break;
1458         if (!o->op_next && cUNOPo->op_first->op_type == OP_FLOP) {
1459             list(cBINOPo->op_first);
1460             return gen_constant_list(o);
1461         }
1462     case OP_LIST:
1463         listkids(o);
1464         break;
1465     case OP_LEAVE:
1466     case OP_LEAVETRY:
1467         kid = cLISTOPo->op_first;
1468         list(kid);
1469         kid = kid->op_sibling;
1470     do_kids:
1471         while (kid) {
1472             OP *sib = kid->op_sibling;
1473             if (sib && kid->op_type != OP_LEAVEWHEN)
1474                 scalarvoid(kid);
1475             else
1476                 list(kid);
1477             kid = sib;
1478         }
1479         PL_curcop = &PL_compiling;
1480         break;
1481     case OP_SCOPE:
1482     case OP_LINESEQ:
1483         kid = cLISTOPo->op_first;
1484         goto do_kids;
1485     }
1486     return o;
1487 }
1488
1489 static OP *
1490 S_scalarseq(pTHX_ OP *o)
1491 {
1492     dVAR;
1493     if (o) {
1494         const OPCODE type = o->op_type;
1495
1496         if (type == OP_LINESEQ || type == OP_SCOPE ||
1497             type == OP_LEAVE || type == OP_LEAVETRY)
1498         {
1499             OP *kid;
1500             for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling) {
1501                 if (kid->op_sibling) {
1502                     scalarvoid(kid);
1503                 }
1504             }
1505             PL_curcop = &PL_compiling;
1506         }
1507         o->op_flags &= ~OPf_PARENS;
1508         if (PL_hints & HINT_BLOCK_SCOPE)
1509             o->op_flags |= OPf_PARENS;
1510     }
1511     else
1512         o = newOP(OP_STUB, 0);
1513     return o;
1514 }
1515
1516 STATIC OP *
1517 S_modkids(pTHX_ OP *o, I32 type)
1518 {
1519     if (o && o->op_flags & OPf_KIDS) {
1520         OP *kid;
1521         for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
1522             op_lvalue(kid, type);
1523     }
1524     return o;
1525 }
1526
1527 /*
1528 =for apidoc finalize_optree
1529
1530 This function finalizes the optree. Should be called directly after
1531 the complete optree is built. It does some additional
1532 checking which can't be done in the normal ck_xxx functions and makes
1533 the tree thread-safe.
1534
1535 =cut
1536 */
1537 void
1538 Perl_finalize_optree(pTHX_ OP* o)
1539 {
1540     PERL_ARGS_ASSERT_FINALIZE_OPTREE;
1541
1542     ENTER;
1543     SAVEVPTR(PL_curcop);
1544
1545     finalize_op(o);
1546
1547     LEAVE;
1548 }
1549
1550 STATIC void
1551 S_finalize_op(pTHX_ OP* o)
1552 {
1553     PERL_ARGS_ASSERT_FINALIZE_OP;
1554
1555 #if defined(PERL_MAD) && defined(USE_ITHREADS)
1556     {
1557         /* Make sure mad ops are also thread-safe */
1558         MADPROP *mp = o->op_madprop;
1559         while (mp) {
1560             if (mp->mad_type == MAD_OP && mp->mad_vlen) {
1561                 OP *prop_op = (OP *) mp->mad_val;
1562                 /* We only need "Relocate sv to the pad for thread safety.", but this
1563                    easiest way to make sure it traverses everything */
1564                 if (prop_op->op_type == OP_CONST)
1565                     cSVOPx(prop_op)->op_private &= ~OPpCONST_STRICT;
1566                 finalize_op(prop_op);
1567             }
1568             mp = mp->mad_next;
1569         }
1570     }
1571 #endif
1572
1573     switch (o->op_type) {
1574     case OP_NEXTSTATE:
1575     case OP_DBSTATE:
1576         PL_curcop = ((COP*)o);          /* for warnings */
1577         break;
1578     case OP_EXEC:
1579         if ( o->op_sibling
1580             && (o->op_sibling->op_type == OP_NEXTSTATE || o->op_sibling->op_type == OP_DBSTATE)
1581             && ckWARN(WARN_SYNTAX))
1582             {
1583                 if (o->op_sibling->op_sibling) {
1584                     const OPCODE type = o->op_sibling->op_sibling->op_type;
1585                     if (type != OP_EXIT && type != OP_WARN && type != OP_DIE) {
1586                         const line_t oldline = CopLINE(PL_curcop);
1587                         CopLINE_set(PL_curcop, CopLINE((COP*)o->op_sibling));
1588                         Perl_warner(aTHX_ packWARN(WARN_EXEC),
1589                             "Statement unlikely to be reached");
1590                         Perl_warner(aTHX_ packWARN(WARN_EXEC),
1591                             "\t(Maybe you meant system() when you said exec()?)\n");
1592                         CopLINE_set(PL_curcop, oldline);
1593                     }
1594                 }
1595             }
1596         break;
1597
1598     case OP_GV:
1599         if ((o->op_private & OPpEARLY_CV) && ckWARN(WARN_PROTOTYPE)) {
1600             GV * const gv = cGVOPo_gv;
1601             if (SvTYPE(gv) == SVt_PVGV && GvCV(gv) && SvPVX_const(GvCV(gv))) {
1602                 /* XXX could check prototype here instead of just carping */
1603                 SV * const sv = sv_newmortal();
1604                 gv_efullname3(sv, gv, NULL);
1605                 Perl_warner(aTHX_ packWARN(WARN_PROTOTYPE),
1606                     "%"SVf"() called too early to check prototype",
1607                     SVfARG(sv));
1608             }
1609         }
1610         break;
1611
1612     case OP_CONST:
1613         if (cSVOPo->op_private & OPpCONST_STRICT)
1614             no_bareword_allowed(o);
1615         /* FALLTHROUGH */
1616 #ifdef USE_ITHREADS
1617     case OP_HINTSEVAL:
1618     case OP_METHOD_NAMED:
1619         /* Relocate sv to the pad for thread safety.
1620          * Despite being a "constant", the SV is written to,
1621          * for reference counts, sv_upgrade() etc. */
1622         if (cSVOPo->op_sv) {
1623             const PADOFFSET ix = pad_alloc(OP_CONST, SVs_PADTMP);
1624             if (o->op_type != OP_METHOD_NAMED &&
1625                 (SvPADTMP(cSVOPo->op_sv) || SvPADMY(cSVOPo->op_sv)))
1626             {
1627                 /* If op_sv is already a PADTMP/MY then it is being used by
1628                  * some pad, so make a copy. */
1629                 sv_setsv(PAD_SVl(ix),cSVOPo->op_sv);
1630                 SvREADONLY_on(PAD_SVl(ix));
1631                 SvREFCNT_dec(cSVOPo->op_sv);
1632             }
1633             else if (o->op_type != OP_METHOD_NAMED
1634                 && cSVOPo->op_sv == &PL_sv_undef) {
1635                 /* PL_sv_undef is hack - it's unsafe to store it in the
1636                    AV that is the pad, because av_fetch treats values of
1637                    PL_sv_undef as a "free" AV entry and will merrily
1638                    replace them with a new SV, causing pad_alloc to think
1639                    that this pad slot is free. (When, clearly, it is not)
1640                 */
1641                 SvOK_off(PAD_SVl(ix));
1642                 SvPADTMP_on(PAD_SVl(ix));
1643                 SvREADONLY_on(PAD_SVl(ix));
1644             }
1645             else {
1646                 SvREFCNT_dec(PAD_SVl(ix));
1647                 SvPADTMP_on(cSVOPo->op_sv);
1648                 PAD_SETSV(ix, cSVOPo->op_sv);
1649                 /* XXX I don't know how this isn't readonly already. */
1650                 SvREADONLY_on(PAD_SVl(ix));
1651             }
1652             cSVOPo->op_sv = NULL;
1653             o->op_targ = ix;
1654         }
1655 #endif
1656         break;
1657
1658     case OP_HELEM: {
1659         UNOP *rop;
1660         SV *lexname;
1661         GV **fields;
1662         SV **svp, *sv;
1663         const char *key = NULL;
1664         STRLEN keylen;
1665
1666         if (((BINOP*)o)->op_last->op_type != OP_CONST)
1667             break;
1668
1669         /* Make the CONST have a shared SV */
1670         svp = cSVOPx_svp(((BINOP*)o)->op_last);
1671         if ((!SvFAKE(sv = *svp) || !SvREADONLY(sv))
1672             && SvTYPE(sv) < SVt_PVMG && !SvROK(sv)) {
1673             key = SvPV_const(sv, keylen);
1674             lexname = newSVpvn_share(key,
1675                 SvUTF8(sv) ? -(I32)keylen : (I32)keylen,
1676                 0);
1677             SvREFCNT_dec(sv);
1678             *svp = lexname;
1679         }
1680
1681         if ((o->op_private & (OPpLVAL_INTRO)))
1682             break;
1683
1684         rop = (UNOP*)((BINOP*)o)->op_first;
1685         if (rop->op_type != OP_RV2HV || rop->op_first->op_type != OP_PADSV)
1686             break;
1687         lexname = *av_fetch(PL_comppad_name, rop->op_first->op_targ, TRUE);
1688         if (!SvPAD_TYPED(lexname))
1689             break;
1690         fields = (GV**)hv_fetchs(SvSTASH(lexname), "FIELDS", FALSE);
1691         if (!fields || !GvHV(*fields))
1692             break;
1693         key = SvPV_const(*svp, keylen);
1694         if (!hv_fetch(GvHV(*fields), key,
1695                 SvUTF8(*svp) ? -(I32)keylen : (I32)keylen, FALSE)) {
1696             Perl_croak(aTHX_ "No such class field \"%"SVf"\" " 
1697                            "in variable %"SVf" of type %"HEKf, 
1698                       SVfARG(*svp), SVfARG(lexname),
1699                       HEKfARG(HvNAME_HEK(SvSTASH(lexname))));
1700         }
1701         break;
1702     }
1703
1704     case OP_HSLICE: {
1705         UNOP *rop;
1706         SV *lexname;
1707         GV **fields;
1708         SV **svp;
1709         const char *key;
1710         STRLEN keylen;
1711         SVOP *first_key_op, *key_op;
1712
1713         if ((o->op_private & (OPpLVAL_INTRO))
1714             /* I bet there's always a pushmark... */
1715             || ((LISTOP*)o)->op_first->op_sibling->op_type != OP_LIST)
1716             /* hmmm, no optimization if list contains only one key. */
1717             break;
1718         rop = (UNOP*)((LISTOP*)o)->op_last;
1719         if (rop->op_type != OP_RV2HV)
1720             break;
1721         if (rop->op_first->op_type == OP_PADSV)
1722             /* @$hash{qw(keys here)} */
1723             rop = (UNOP*)rop->op_first;
1724         else {
1725             /* @{$hash}{qw(keys here)} */
1726             if (rop->op_first->op_type == OP_SCOPE
1727                 && cLISTOPx(rop->op_first)->op_last->op_type == OP_PADSV)
1728                 {
1729                     rop = (UNOP*)cLISTOPx(rop->op_first)->op_last;
1730                 }
1731             else
1732                 break;
1733         }
1734
1735         lexname = *av_fetch(PL_comppad_name, rop->op_targ, TRUE);
1736         if (!SvPAD_TYPED(lexname))
1737             break;
1738         fields = (GV**)hv_fetchs(SvSTASH(lexname), "FIELDS", FALSE);
1739         if (!fields || !GvHV(*fields))
1740             break;
1741         /* Again guessing that the pushmark can be jumped over.... */
1742         first_key_op = (SVOP*)((LISTOP*)((LISTOP*)o)->op_first->op_sibling)
1743             ->op_first->op_sibling;
1744         for (key_op = first_key_op; key_op;
1745              key_op = (SVOP*)key_op->op_sibling) {
1746             if (key_op->op_type != OP_CONST)
1747                 continue;
1748             svp = cSVOPx_svp(key_op);
1749             key = SvPV_const(*svp, keylen);
1750             if (!hv_fetch(GvHV(*fields), key,
1751                     SvUTF8(*svp) ? -(I32)keylen : (I32)keylen, FALSE)) {
1752                 Perl_croak(aTHX_ "No such class field \"%"SVf"\" " 
1753                            "in variable %"SVf" of type %"HEKf, 
1754                       SVfARG(*svp), SVfARG(lexname),
1755                       HEKfARG(HvNAME_HEK(SvSTASH(lexname))));
1756             }
1757         }
1758         break;
1759     }
1760     case OP_SUBST: {
1761         if (cPMOPo->op_pmreplrootu.op_pmreplroot)
1762             finalize_op(cPMOPo->op_pmreplrootu.op_pmreplroot);
1763         break;
1764     }
1765     default:
1766         break;
1767     }
1768
1769     if (o->op_flags & OPf_KIDS) {
1770         OP *kid;
1771         for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling)
1772             finalize_op(kid);
1773     }
1774 }
1775
1776 /*
1777 =for apidoc Amx|OP *|op_lvalue|OP *o|I32 type
1778
1779 Propagate lvalue ("modifiable") context to an op and its children.
1780 I<type> represents the context type, roughly based on the type of op that
1781 would do the modifying, although C<local()> is represented by OP_NULL,
1782 because it has no op type of its own (it is signalled by a flag on
1783 the lvalue op).
1784
1785 This function detects things that can't be modified, such as C<$x+1>, and
1786 generates errors for them. For example, C<$x+1 = 2> would cause it to be
1787 called with an op of type OP_ADD and a C<type> argument of OP_SASSIGN.
1788
1789 It also flags things that need to behave specially in an lvalue context,
1790 such as C<$$x = 5> which might have to vivify a reference in C<$x>.
1791
1792 =cut
1793 */
1794
1795 OP *
1796 Perl_op_lvalue_flags(pTHX_ OP *o, I32 type, U32 flags)
1797 {
1798     dVAR;
1799     OP *kid;
1800     /* -1 = error on localize, 0 = ignore localize, 1 = ok to localize */
1801     int localize = -1;
1802
1803     if (!o || (PL_parser && PL_parser->error_count))
1804         return o;
1805
1806     if ((o->op_private & OPpTARGET_MY)
1807         && (PL_opargs[o->op_type] & OA_TARGLEX))/* OPp share the meaning */
1808     {
1809         return o;
1810     }
1811
1812     assert( (o->op_flags & OPf_WANT) != OPf_WANT_VOID );
1813
1814     if (type == OP_PRTF || type == OP_SPRINTF) type = OP_ENTERSUB;
1815
1816     switch (o->op_type) {
1817     case OP_UNDEF:
1818         PL_modcount++;
1819         return o;
1820     case OP_STUB:
1821         if ((o->op_flags & OPf_PARENS) || PL_madskills)
1822             break;
1823         goto nomod;
1824     case OP_ENTERSUB:
1825         if ((type == OP_UNDEF || type == OP_REFGEN || type == OP_LOCK) &&
1826             !(o->op_flags & OPf_STACKED)) {
1827             o->op_type = OP_RV2CV;              /* entersub => rv2cv */
1828             /* Both ENTERSUB and RV2CV use this bit, but for different pur-
1829                poses, so we need it clear.  */
1830             o->op_private &= ~1;
1831             o->op_ppaddr = PL_ppaddr[OP_RV2CV];
1832             assert(cUNOPo->op_first->op_type == OP_NULL);
1833             op_null(((LISTOP*)cUNOPo->op_first)->op_first);/* disable pushmark */
1834             break;
1835         }
1836         else {                          /* lvalue subroutine call */
1837             o->op_private |= OPpLVAL_INTRO
1838                            |(OPpENTERSUB_INARGS * (type == OP_LEAVESUBLV));
1839             PL_modcount = RETURN_UNLIMITED_NUMBER;
1840             if (type == OP_GREPSTART || type == OP_ENTERSUB || type == OP_REFGEN) {
1841                 /* Potential lvalue context: */
1842                 o->op_private |= OPpENTERSUB_INARGS;
1843                 break;
1844             }
1845             else {                      /* Compile-time error message: */
1846                 OP *kid = cUNOPo->op_first;
1847                 CV *cv;
1848
1849                 if (kid->op_type != OP_PUSHMARK) {
1850                     if (kid->op_type != OP_NULL || kid->op_targ != OP_LIST)
1851                         Perl_croak(aTHX_
1852                                 "panic: unexpected lvalue entersub "
1853                                 "args: type/targ %ld:%"UVuf,
1854                                 (long)kid->op_type, (UV)kid->op_targ);
1855                     kid = kLISTOP->op_first;
1856                 }
1857                 while (kid->op_sibling)
1858                     kid = kid->op_sibling;
1859                 if (!(kid->op_type == OP_NULL && kid->op_targ == OP_RV2CV)) {
1860                     break;      /* Postpone until runtime */
1861                 }
1862
1863                 kid = kUNOP->op_first;
1864                 if (kid->op_type == OP_NULL && kid->op_targ == OP_RV2SV)
1865                     kid = kUNOP->op_first;
1866                 if (kid->op_type == OP_NULL)
1867                     Perl_croak(aTHX_
1868                                "Unexpected constant lvalue entersub "
1869                                "entry via type/targ %ld:%"UVuf,
1870                                (long)kid->op_type, (UV)kid->op_targ);
1871                 if (kid->op_type != OP_GV) {
1872                     break;
1873                 }
1874
1875                 cv = GvCV(kGVOP_gv);
1876                 if (!cv)
1877                     break;
1878                 if (CvLVALUE(cv))
1879                     break;
1880             }
1881         }
1882         /* FALL THROUGH */
1883     default:
1884       nomod:
1885         if (flags & OP_LVALUE_NO_CROAK) return NULL;
1886         /* grep, foreach, subcalls, refgen */
1887         if (type == OP_GREPSTART || type == OP_ENTERSUB
1888          || type == OP_REFGEN    || type == OP_LEAVESUBLV)
1889             break;
1890         yyerror(Perl_form(aTHX_ "Can't modify %s in %s",
1891                      (o->op_type == OP_NULL && (o->op_flags & OPf_SPECIAL)
1892                       ? "do block"
1893                       : (o->op_type == OP_ENTERSUB
1894                         ? "non-lvalue subroutine call"
1895                         : OP_DESC(o))),
1896                      type ? PL_op_desc[type] : "local"));
1897         return o;
1898
1899     case OP_PREINC:
1900     case OP_PREDEC:
1901     case OP_POW:
1902     case OP_MULTIPLY:
1903     case OP_DIVIDE:
1904     case OP_MODULO:
1905     case OP_REPEAT:
1906     case OP_ADD:
1907     case OP_SUBTRACT:
1908     case OP_CONCAT:
1909     case OP_LEFT_SHIFT:
1910     case OP_RIGHT_SHIFT:
1911     case OP_BIT_AND:
1912     case OP_BIT_XOR:
1913     case OP_BIT_OR:
1914     case OP_I_MULTIPLY:
1915     case OP_I_DIVIDE:
1916     case OP_I_MODULO:
1917     case OP_I_ADD:
1918     case OP_I_SUBTRACT:
1919         if (!(o->op_flags & OPf_STACKED))
1920             goto nomod;
1921         PL_modcount++;
1922         break;
1923
1924     case OP_COND_EXPR:
1925         localize = 1;
1926         for (kid = cUNOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
1927             op_lvalue(kid, type);
1928         break;
1929
1930     case OP_RV2AV:
1931     case OP_RV2HV:
1932         if (type == OP_REFGEN && o->op_flags & OPf_PARENS) {
1933            PL_modcount = RETURN_UNLIMITED_NUMBER;
1934             return o;           /* Treat \(@foo) like ordinary list. */
1935         }
1936         /* FALL THROUGH */
1937     case OP_RV2GV:
1938         if (scalar_mod_type(o, type))
1939             goto nomod;
1940         ref(cUNOPo->op_first, o->op_type);
1941         /* FALL THROUGH */
1942     case OP_ASLICE:
1943     case OP_HSLICE:
1944         if (type == OP_LEAVESUBLV)
1945             o->op_private |= OPpMAYBE_LVSUB;
1946         localize = 1;
1947         /* FALL THROUGH */
1948     case OP_AASSIGN:
1949     case OP_NEXTSTATE:
1950     case OP_DBSTATE:
1951        PL_modcount = RETURN_UNLIMITED_NUMBER;
1952         break;
1953     case OP_AV2ARYLEN:
1954         PL_hints |= HINT_BLOCK_SCOPE;
1955         if (type == OP_LEAVESUBLV)
1956             o->op_private |= OPpMAYBE_LVSUB;
1957         PL_modcount++;
1958         break;
1959     case OP_RV2SV:
1960         ref(cUNOPo->op_first, o->op_type);
1961         localize = 1;
1962         /* FALL THROUGH */
1963     case OP_GV:
1964         PL_hints |= HINT_BLOCK_SCOPE;
1965     case OP_SASSIGN:
1966     case OP_ANDASSIGN:
1967     case OP_ORASSIGN:
1968     case OP_DORASSIGN:
1969         PL_modcount++;
1970         break;
1971
1972     case OP_AELEMFAST:
1973     case OP_AELEMFAST_LEX:
1974         localize = -1;
1975         PL_modcount++;
1976         break;
1977
1978     case OP_PADAV:
1979     case OP_PADHV:
1980        PL_modcount = RETURN_UNLIMITED_NUMBER;
1981         if (type == OP_REFGEN && o->op_flags & OPf_PARENS)
1982             return o;           /* Treat \(@foo) like ordinary list. */
1983         if (scalar_mod_type(o, type))
1984             goto nomod;
1985         if (type == OP_LEAVESUBLV)
1986             o->op_private |= OPpMAYBE_LVSUB;
1987         /* FALL THROUGH */
1988     case OP_PADSV:
1989         PL_modcount++;
1990         if (!type) /* local() */
1991             Perl_croak(aTHX_ "Can't localize lexical variable %"SVf,
1992                  PAD_COMPNAME_SV(o->op_targ));
1993         break;
1994
1995     case OP_PUSHMARK:
1996         localize = 0;
1997         break;
1998
1999     case OP_KEYS:
2000     case OP_RKEYS:
2001         if (type != OP_SASSIGN && type != OP_LEAVESUBLV)
2002             goto nomod;
2003         goto lvalue_func;
2004     case OP_SUBSTR:
2005         if (o->op_private == 4) /* don't allow 4 arg substr as lvalue */
2006             goto nomod;
2007         /* FALL THROUGH */
2008     case OP_POS:
2009     case OP_VEC:
2010       lvalue_func:
2011         if (type == OP_LEAVESUBLV)
2012             o->op_private |= OPpMAYBE_LVSUB;
2013         pad_free(o->op_targ);
2014         o->op_targ = pad_alloc(o->op_type, SVs_PADMY);
2015         assert(SvTYPE(PAD_SV(o->op_targ)) == SVt_NULL);
2016         if (o->op_flags & OPf_KIDS)
2017             op_lvalue(cBINOPo->op_first->op_sibling, type);
2018         break;
2019
2020     case OP_AELEM:
2021     case OP_HELEM:
2022         ref(cBINOPo->op_first, o->op_type);
2023         if (type == OP_ENTERSUB &&
2024              !(o->op_private & (OPpLVAL_INTRO | OPpDEREF)))
2025             o->op_private |= OPpLVAL_DEFER;
2026         if (type == OP_LEAVESUBLV)
2027             o->op_private |= OPpMAYBE_LVSUB;
2028         localize = 1;
2029         PL_modcount++;
2030         break;
2031
2032     case OP_SCOPE:
2033     case OP_LEAVE:
2034     case OP_ENTER:
2035     case OP_LINESEQ:
2036         localize = 0;
2037         if (o->op_flags & OPf_KIDS)
2038             op_lvalue(cLISTOPo->op_last, type);
2039         break;
2040
2041     case OP_NULL:
2042         localize = 0;
2043         if (o->op_flags & OPf_SPECIAL)          /* do BLOCK */
2044             goto nomod;
2045         else if (!(o->op_flags & OPf_KIDS))
2046             break;
2047         if (o->op_targ != OP_LIST) {
2048             op_lvalue(cBINOPo->op_first, type);
2049             break;
2050         }
2051         /* FALL THROUGH */
2052     case OP_LIST:
2053         localize = 0;
2054         for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
2055             /* elements might be in void context because the list is
2056                in scalar context or because they are attribute sub calls */
2057             if ( (kid->op_flags & OPf_WANT) != OPf_WANT_VOID )
2058                 op_lvalue(kid, type);
2059         break;
2060
2061     case OP_RETURN:
2062         if (type != OP_LEAVESUBLV)
2063             goto nomod;
2064         break; /* op_lvalue()ing was handled by ck_return() */
2065
2066     case OP_COREARGS:
2067         return o;
2068     }
2069
2070     /* [20011101.069] File test operators interpret OPf_REF to mean that
2071        their argument is a filehandle; thus \stat(".") should not set
2072        it. AMS 20011102 */
2073     if (type == OP_REFGEN &&
2074         PL_check[o->op_type] == Perl_ck_ftst)
2075         return o;
2076
2077     if (type != OP_LEAVESUBLV)
2078         o->op_flags |= OPf_MOD;
2079
2080     if (type == OP_AASSIGN || type == OP_SASSIGN)
2081         o->op_flags |= OPf_SPECIAL|OPf_REF;
2082     else if (!type) { /* local() */
2083         switch (localize) {
2084         case 1:
2085             o->op_private |= OPpLVAL_INTRO;
2086             o->op_flags &= ~OPf_SPECIAL;
2087             PL_hints |= HINT_BLOCK_SCOPE;
2088             break;
2089         case 0:
2090             break;
2091         case -1:
2092             Perl_ck_warner(aTHX_ packWARN(WARN_SYNTAX),
2093                            "Useless localization of %s", OP_DESC(o));
2094         }
2095     }
2096     else if (type != OP_GREPSTART && type != OP_ENTERSUB
2097              && type != OP_LEAVESUBLV)
2098         o->op_flags |= OPf_REF;
2099     return o;
2100 }
2101
2102 STATIC bool
2103 S_scalar_mod_type(const OP *o, I32 type)
2104 {
2105     switch (type) {
2106     case OP_POS:
2107     case OP_SASSIGN:
2108         if (o && o->op_type == OP_RV2GV)
2109             return FALSE;
2110         /* FALL THROUGH */
2111     case OP_PREINC:
2112     case OP_PREDEC:
2113     case OP_POSTINC:
2114     case OP_POSTDEC:
2115     case OP_I_PREINC:
2116     case OP_I_PREDEC:
2117     case OP_I_POSTINC:
2118     case OP_I_POSTDEC:
2119     case OP_POW:
2120     case OP_MULTIPLY:
2121     case OP_DIVIDE:
2122     case OP_MODULO:
2123     case OP_REPEAT:
2124     case OP_ADD:
2125     case OP_SUBTRACT:
2126     case OP_I_MULTIPLY:
2127     case OP_I_DIVIDE:
2128     case OP_I_MODULO:
2129     case OP_I_ADD:
2130     case OP_I_SUBTRACT:
2131     case OP_LEFT_SHIFT:
2132     case OP_RIGHT_SHIFT:
2133     case OP_BIT_AND:
2134     case OP_BIT_XOR:
2135     case OP_BIT_OR:
2136     case OP_CONCAT:
2137     case OP_SUBST:
2138     case OP_TRANS:
2139     case OP_TRANSR:
2140     case OP_READ:
2141     case OP_SYSREAD:
2142     case OP_RECV:
2143     case OP_ANDASSIGN:
2144     case OP_ORASSIGN:
2145     case OP_DORASSIGN:
2146         return TRUE;
2147     default:
2148         return FALSE;
2149     }
2150 }
2151
2152 STATIC bool
2153 S_is_handle_constructor(const OP *o, I32 numargs)
2154 {
2155     PERL_ARGS_ASSERT_IS_HANDLE_CONSTRUCTOR;
2156
2157     switch (o->op_type) {
2158     case OP_PIPE_OP:
2159     case OP_SOCKPAIR:
2160         if (numargs == 2)
2161             return TRUE;
2162         /* FALL THROUGH */
2163     case OP_SYSOPEN:
2164     case OP_OPEN:
2165     case OP_SELECT:             /* XXX c.f. SelectSaver.pm */
2166     case OP_SOCKET:
2167     case OP_OPEN_DIR:
2168     case OP_ACCEPT:
2169         if (numargs == 1)
2170             return TRUE;
2171         /* FALLTHROUGH */
2172     default:
2173         return FALSE;
2174     }
2175 }
2176
2177 static OP *
2178 S_refkids(pTHX_ OP *o, I32 type)
2179 {
2180     if (o && o->op_flags & OPf_KIDS) {
2181         OP *kid;
2182         for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
2183             ref(kid, type);
2184     }
2185     return o;
2186 }
2187
2188 OP *
2189 Perl_doref(pTHX_ OP *o, I32 type, bool set_op_ref)
2190 {
2191     dVAR;
2192     OP *kid;
2193
2194     PERL_ARGS_ASSERT_DOREF;
2195
2196     if (!o || (PL_parser && PL_parser->error_count))
2197         return o;
2198
2199     switch (o->op_type) {
2200     case OP_ENTERSUB:
2201         if ((type == OP_EXISTS || type == OP_DEFINED) &&
2202             !(o->op_flags & OPf_STACKED)) {
2203             o->op_type = OP_RV2CV;             /* entersub => rv2cv */
2204             o->op_ppaddr = PL_ppaddr[OP_RV2CV];
2205             assert(cUNOPo->op_first->op_type == OP_NULL);
2206             op_null(((LISTOP*)cUNOPo->op_first)->op_first);     /* disable pushmark */
2207             o->op_flags |= OPf_SPECIAL;
2208             o->op_private &= ~1;
2209         }
2210         else if (type == OP_RV2SV || type == OP_RV2AV || type == OP_RV2HV){
2211             o->op_private |= (type == OP_RV2AV ? OPpDEREF_AV
2212                               : type == OP_RV2HV ? OPpDEREF_HV
2213                               : OPpDEREF_SV);
2214             o->op_flags |= OPf_MOD;
2215         }
2216
2217         break;
2218
2219     case OP_COND_EXPR:
2220         for (kid = cUNOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
2221             doref(kid, type, set_op_ref);
2222         break;
2223     case OP_RV2SV:
2224         if (type == OP_DEFINED)
2225             o->op_flags |= OPf_SPECIAL;         /* don't create GV */
2226         doref(cUNOPo->op_first, o->op_type, set_op_ref);
2227         /* FALL THROUGH */
2228     case OP_PADSV:
2229         if (type == OP_RV2SV || type == OP_RV2AV || type == OP_RV2HV) {
2230             o->op_private |= (type == OP_RV2AV ? OPpDEREF_AV
2231                               : type == OP_RV2HV ? OPpDEREF_HV
2232                               : OPpDEREF_SV);
2233             o->op_flags |= OPf_MOD;
2234         }
2235         break;
2236
2237     case OP_RV2AV:
2238     case OP_RV2HV:
2239         if (set_op_ref)
2240             o->op_flags |= OPf_REF;
2241         /* FALL THROUGH */
2242     case OP_RV2GV:
2243         if (type == OP_DEFINED)
2244             o->op_flags |= OPf_SPECIAL;         /* don't create GV */
2245         doref(cUNOPo->op_first, o->op_type, set_op_ref);
2246         break;
2247
2248     case OP_PADAV:
2249     case OP_PADHV:
2250         if (set_op_ref)
2251             o->op_flags |= OPf_REF;
2252         break;
2253
2254     case OP_SCALAR:
2255     case OP_NULL:
2256         if (!(o->op_flags & OPf_KIDS))
2257             break;
2258         doref(cBINOPo->op_first, type, set_op_ref);
2259         break;
2260     case OP_AELEM:
2261     case OP_HELEM:
2262         doref(cBINOPo->op_first, o->op_type, set_op_ref);
2263         if (type == OP_RV2SV || type == OP_RV2AV || type == OP_RV2HV) {
2264             o->op_private |= (type == OP_RV2AV ? OPpDEREF_AV
2265                               : type == OP_RV2HV ? OPpDEREF_HV
2266                               : OPpDEREF_SV);
2267             o->op_flags |= OPf_MOD;
2268         }
2269         break;
2270
2271     case OP_SCOPE:
2272     case OP_LEAVE:
2273         set_op_ref = FALSE;
2274         /* FALL THROUGH */
2275     case OP_ENTER:
2276     case OP_LIST:
2277         if (!(o->op_flags & OPf_KIDS))
2278             break;
2279         doref(cLISTOPo->op_last, type, set_op_ref);
2280         break;
2281     default:
2282         break;
2283     }
2284     return scalar(o);
2285
2286 }
2287
2288 STATIC OP *
2289 S_dup_attrlist(pTHX_ OP *o)
2290 {
2291     dVAR;
2292     OP *rop;
2293
2294     PERL_ARGS_ASSERT_DUP_ATTRLIST;
2295
2296     /* An attrlist is either a simple OP_CONST or an OP_LIST with kids,
2297      * where the first kid is OP_PUSHMARK and the remaining ones
2298      * are OP_CONST.  We need to push the OP_CONST values.
2299      */
2300     if (o->op_type == OP_CONST)
2301         rop = newSVOP(OP_CONST, o->op_flags, SvREFCNT_inc_NN(cSVOPo->op_sv));
2302 #ifdef PERL_MAD
2303     else if (o->op_type == OP_NULL)
2304         rop = NULL;
2305 #endif
2306     else {
2307         assert((o->op_type == OP_LIST) && (o->op_flags & OPf_KIDS));
2308         rop = NULL;
2309         for (o = cLISTOPo->op_first; o; o=o->op_sibling) {
2310             if (o->op_type == OP_CONST)
2311                 rop = op_append_elem(OP_LIST, rop,
2312                                   newSVOP(OP_CONST, o->op_flags,
2313                                           SvREFCNT_inc_NN(cSVOPo->op_sv)));
2314         }
2315     }
2316     return rop;
2317 }
2318
2319 STATIC void
2320 S_apply_attrs(pTHX_ HV *stash, SV *target, OP *attrs, bool for_my)
2321 {
2322     dVAR;
2323     SV *stashsv;
2324
2325     PERL_ARGS_ASSERT_APPLY_ATTRS;
2326
2327     /* fake up C<use attributes $pkg,$rv,@attrs> */
2328     ENTER;              /* need to protect against side-effects of 'use' */
2329     stashsv = stash ? newSVhek(HvNAME_HEK(stash)) : &PL_sv_no;
2330
2331 #define ATTRSMODULE "attributes"
2332 #define ATTRSMODULE_PM "attributes.pm"
2333
2334     if (for_my) {
2335         /* Don't force the C<use> if we don't need it. */
2336         SV * const * const svp = hv_fetchs(GvHVn(PL_incgv), ATTRSMODULE_PM, FALSE);
2337         if (svp && *svp != &PL_sv_undef)
2338             NOOP;       /* already in %INC */
2339         else
2340             Perl_load_module(aTHX_ PERL_LOADMOD_NOIMPORT,
2341                              newSVpvs(ATTRSMODULE), NULL);
2342     }
2343     else {
2344         Perl_load_module(aTHX_ PERL_LOADMOD_IMPORT_OPS,
2345                          newSVpvs(ATTRSMODULE),
2346                          NULL,
2347                          op_prepend_elem(OP_LIST,
2348                                       newSVOP(OP_CONST, 0, stashsv),
2349                                       op_prepend_elem(OP_LIST,
2350                                                    newSVOP(OP_CONST, 0,
2351                                                            newRV(target)),
2352                                                    dup_attrlist(attrs))));
2353     }
2354     LEAVE;
2355 }
2356
2357 STATIC void
2358 S_apply_attrs_my(pTHX_ HV *stash, OP *target, OP *attrs, OP **imopsp)
2359 {
2360     dVAR;
2361     OP *pack, *imop, *arg;
2362     SV *meth, *stashsv;
2363
2364     PERL_ARGS_ASSERT_APPLY_ATTRS_MY;
2365
2366     if (!attrs)
2367         return;
2368
2369     assert(target->op_type == OP_PADSV ||
2370            target->op_type == OP_PADHV ||
2371            target->op_type == OP_PADAV);
2372
2373     /* Ensure that attributes.pm is loaded. */
2374     apply_attrs(stash, PAD_SV(target->op_targ), attrs, TRUE);
2375
2376     /* Need package name for method call. */
2377     pack = newSVOP(OP_CONST, 0, newSVpvs(ATTRSMODULE));
2378
2379     /* Build up the real arg-list. */
2380     stashsv = stash ? newSVhek(HvNAME_HEK(stash)) : &PL_sv_no;
2381
2382     arg = newOP(OP_PADSV, 0);
2383     arg->op_targ = target->op_targ;
2384     arg = op_prepend_elem(OP_LIST,
2385                        newSVOP(OP_CONST, 0, stashsv),
2386                        op_prepend_elem(OP_LIST,
2387                                     newUNOP(OP_REFGEN, 0,
2388                                             op_lvalue(arg, OP_REFGEN)),
2389                                     dup_attrlist(attrs)));
2390
2391     /* Fake up a method call to import */
2392     meth = newSVpvs_share("import");
2393     imop = convert(OP_ENTERSUB, OPf_STACKED|OPf_SPECIAL|OPf_WANT_VOID,
2394                    op_append_elem(OP_LIST,
2395                                op_prepend_elem(OP_LIST, pack, list(arg)),
2396                                newSVOP(OP_METHOD_NAMED, 0, meth)));
2397
2398     /* Combine the ops. */
2399     *imopsp = op_append_elem(OP_LIST, *imopsp, imop);
2400 }
2401
2402 /*
2403 =notfor apidoc apply_attrs_string
2404
2405 Attempts to apply a list of attributes specified by the C<attrstr> and
2406 C<len> arguments to the subroutine identified by the C<cv> argument which
2407 is expected to be associated with the package identified by the C<stashpv>
2408 argument (see L<attributes>).  It gets this wrong, though, in that it
2409 does not correctly identify the boundaries of the individual attribute
2410 specifications within C<attrstr>.  This is not really intended for the
2411 public API, but has to be listed here for systems such as AIX which
2412 need an explicit export list for symbols.  (It's called from XS code
2413 in support of the C<ATTRS:> keyword from F<xsubpp>.)  Patches to fix it
2414 to respect attribute syntax properly would be welcome.
2415
2416 =cut
2417 */
2418
2419 void
2420 Perl_apply_attrs_string(pTHX_ const char *stashpv, CV *cv,
2421                         const char *attrstr, STRLEN len)
2422 {
2423     OP *attrs = NULL;
2424
2425     PERL_ARGS_ASSERT_APPLY_ATTRS_STRING;
2426
2427     if (!len) {
2428         len = strlen(attrstr);
2429     }
2430
2431     while (len) {
2432         for (; isSPACE(*attrstr) && len; --len, ++attrstr) ;
2433         if (len) {
2434             const char * const sstr = attrstr;
2435             for (; !isSPACE(*attrstr) && len; --len, ++attrstr) ;
2436             attrs = op_append_elem(OP_LIST, attrs,
2437                                 newSVOP(OP_CONST, 0,
2438                                         newSVpvn(sstr, attrstr-sstr)));
2439         }
2440     }
2441
2442     Perl_load_module(aTHX_ PERL_LOADMOD_IMPORT_OPS,
2443                      newSVpvs(ATTRSMODULE),
2444                      NULL, op_prepend_elem(OP_LIST,
2445                                   newSVOP(OP_CONST, 0, newSVpv(stashpv,0)),
2446                                   op_prepend_elem(OP_LIST,
2447                                                newSVOP(OP_CONST, 0,
2448                                                        newRV(MUTABLE_SV(cv))),
2449                                                attrs)));
2450 }
2451
2452 STATIC OP *
2453 S_my_kid(pTHX_ OP *o, OP *attrs, OP **imopsp)
2454 {
2455     dVAR;
2456     I32 type;
2457     const bool stately = PL_parser && PL_parser->in_my == KEY_state;
2458
2459     PERL_ARGS_ASSERT_MY_KID;
2460
2461     if (!o || (PL_parser && PL_parser->error_count))
2462         return o;
2463
2464     type = o->op_type;
2465     if (PL_madskills && type == OP_NULL && o->op_flags & OPf_KIDS) {
2466         (void)my_kid(cUNOPo->op_first, attrs, imopsp);
2467         return o;
2468     }
2469
2470     if (type == OP_LIST) {
2471         OP *kid;
2472         for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
2473             my_kid(kid, attrs, imopsp);
2474         return o;
2475     } else if (type == OP_UNDEF
2476 #ifdef PERL_MAD
2477                || type == OP_STUB
2478 #endif
2479                ) {
2480         return o;
2481     } else if (type == OP_RV2SV ||      /* "our" declaration */
2482                type == OP_RV2AV ||
2483                type == OP_RV2HV) { /* XXX does this let anything illegal in? */
2484         if (cUNOPo->op_first->op_type != OP_GV) { /* MJD 20011224 */
2485             yyerror(Perl_form(aTHX_ "Can't declare %s in \"%s\"",
2486                         OP_DESC(o),
2487                         PL_parser->in_my == KEY_our
2488                             ? "our"
2489                             : PL_parser->in_my == KEY_state ? "state" : "my"));
2490         } else if (attrs) {
2491             GV * const gv = cGVOPx_gv(cUNOPo->op_first);
2492             PL_parser->in_my = FALSE;
2493             PL_parser->in_my_stash = NULL;
2494             apply_attrs(GvSTASH(gv),
2495                         (type == OP_RV2SV ? GvSV(gv) :
2496                          type == OP_RV2AV ? MUTABLE_SV(GvAV(gv)) :
2497                          type == OP_RV2HV ? MUTABLE_SV(GvHV(gv)) : MUTABLE_SV(gv)),
2498                         attrs, FALSE);
2499         }
2500         o->op_private |= OPpOUR_INTRO;
2501         return o;
2502     }
2503     else if (type != OP_PADSV &&
2504              type != OP_PADAV &&
2505              type != OP_PADHV &&
2506              type != OP_PUSHMARK)
2507     {
2508         yyerror(Perl_form(aTHX_ "Can't declare %s in \"%s\"",
2509                           OP_DESC(o),
2510                           PL_parser->in_my == KEY_our
2511                             ? "our"
2512                             : PL_parser->in_my == KEY_state ? "state" : "my"));
2513         return o;
2514     }
2515     else if (attrs && type != OP_PUSHMARK) {
2516         HV *stash;
2517
2518         PL_parser->in_my = FALSE;
2519         PL_parser->in_my_stash = NULL;
2520
2521         /* check for C<my Dog $spot> when deciding package */
2522         stash = PAD_COMPNAME_TYPE(o->op_targ);
2523         if (!stash)
2524             stash = PL_curstash;
2525         apply_attrs_my(stash, o, attrs, imopsp);
2526     }
2527     o->op_flags |= OPf_MOD;
2528     o->op_private |= OPpLVAL_INTRO;
2529     if (stately)
2530         o->op_private |= OPpPAD_STATE;
2531     return o;
2532 }
2533
2534 OP *
2535 Perl_my_attrs(pTHX_ OP *o, OP *attrs)
2536 {
2537     dVAR;
2538     OP *rops;
2539     int maybe_scalar = 0;
2540
2541     PERL_ARGS_ASSERT_MY_ATTRS;
2542
2543 /* [perl #17376]: this appears to be premature, and results in code such as
2544    C< our(%x); > executing in list mode rather than void mode */
2545 #if 0
2546     if (o->op_flags & OPf_PARENS)
2547         list(o);
2548     else
2549         maybe_scalar = 1;
2550 #else
2551     maybe_scalar = 1;
2552 #endif
2553     if (attrs)
2554         SAVEFREEOP(attrs);
2555     rops = NULL;
2556     o = my_kid(o, attrs, &rops);
2557     if (rops) {
2558         if (maybe_scalar && o->op_type == OP_PADSV) {
2559             o = scalar(op_append_list(OP_LIST, rops, o));
2560             o->op_private |= OPpLVAL_INTRO;
2561         }
2562         else {
2563             /* The listop in rops might have a pushmark at the beginning,
2564                which will mess up list assignment. */
2565             LISTOP * const lrops = (LISTOP *)rops; /* for brevity */
2566             if (rops->op_type == OP_LIST && 
2567                 lrops->op_first && lrops->op_first->op_type == OP_PUSHMARK)
2568             {
2569                 OP * const pushmark = lrops->op_first;
2570                 lrops->op_first = pushmark->op_sibling;
2571                 op_free(pushmark);
2572             }
2573             o = op_append_list(OP_LIST, o, rops);
2574         }
2575     }
2576     PL_parser->in_my = FALSE;
2577     PL_parser->in_my_stash = NULL;
2578     return o;
2579 }
2580
2581 OP *
2582 Perl_sawparens(pTHX_ OP *o)
2583 {
2584     PERL_UNUSED_CONTEXT;
2585     if (o)
2586         o->op_flags |= OPf_PARENS;
2587     return o;
2588 }
2589
2590 OP *
2591 Perl_bind_match(pTHX_ I32 type, OP *left, OP *right)
2592 {
2593     OP *o;
2594     bool ismatchop = 0;
2595     const OPCODE ltype = left->op_type;
2596     const OPCODE rtype = right->op_type;
2597
2598     PERL_ARGS_ASSERT_BIND_MATCH;
2599
2600     if ( (ltype == OP_RV2AV || ltype == OP_RV2HV || ltype == OP_PADAV
2601           || ltype == OP_PADHV) && ckWARN(WARN_MISC))
2602     {
2603       const char * const desc
2604           = PL_op_desc[(
2605                           rtype == OP_SUBST || rtype == OP_TRANS
2606                        || rtype == OP_TRANSR
2607                        )
2608                        ? (int)rtype : OP_MATCH];
2609       const bool isary = ltype == OP_RV2AV || ltype == OP_PADAV;
2610       GV *gv;
2611       SV * const name =
2612        (ltype == OP_RV2AV || ltype == OP_RV2HV)
2613         ?    cUNOPx(left)->op_first->op_type == OP_GV
2614           && (gv = cGVOPx_gv(cUNOPx(left)->op_first))
2615               ? varname(gv, isary ? '@' : '%', 0, NULL, 0, 1)
2616               : NULL
2617         : varname(
2618            (GV *)PL_compcv, isary ? '@' : '%', left->op_targ, NULL, 0, 1
2619           );
2620       if (name)
2621         Perl_warner(aTHX_ packWARN(WARN_MISC),
2622              "Applying %s to %"SVf" will act on scalar(%"SVf")",
2623              desc, name, name);
2624       else {
2625         const char * const sample = (isary
2626              ? "@array" : "%hash");
2627         Perl_warner(aTHX_ packWARN(WARN_MISC),
2628              "Applying %s to %s will act on scalar(%s)",
2629              desc, sample, sample);
2630       }
2631     }
2632
2633     if (rtype == OP_CONST &&
2634         cSVOPx(right)->op_private & OPpCONST_BARE &&
2635         cSVOPx(right)->op_private & OPpCONST_STRICT)
2636     {
2637         no_bareword_allowed(right);
2638     }
2639
2640     /* !~ doesn't make sense with /r, so error on it for now */
2641     if (rtype == OP_SUBST && (cPMOPx(right)->op_pmflags & PMf_NONDESTRUCT) &&
2642         type == OP_NOT)
2643         yyerror("Using !~ with s///r doesn't make sense");
2644     if (rtype == OP_TRANSR && type == OP_NOT)
2645         yyerror("Using !~ with tr///r doesn't make sense");
2646
2647     ismatchop = (rtype == OP_MATCH ||
2648                  rtype == OP_SUBST ||
2649                  rtype == OP_TRANS || rtype == OP_TRANSR)
2650              && !(right->op_flags & OPf_SPECIAL);
2651     if (ismatchop && right->op_private & OPpTARGET_MY) {
2652         right->op_targ = 0;
2653         right->op_private &= ~OPpTARGET_MY;
2654     }
2655     if (!(right->op_flags & OPf_STACKED) && ismatchop) {
2656         OP *newleft;
2657
2658         right->op_flags |= OPf_STACKED;
2659         if (rtype != OP_MATCH && rtype != OP_TRANSR &&
2660             ! (rtype == OP_TRANS &&
2661                right->op_private & OPpTRANS_IDENTICAL) &&
2662             ! (rtype == OP_SUBST &&
2663                (cPMOPx(right)->op_pmflags & PMf_NONDESTRUCT)))
2664             newleft = op_lvalue(left, rtype);
2665         else
2666             newleft = left;
2667         if (right->op_type == OP_TRANS || right->op_type == OP_TRANSR)
2668             o = newBINOP(OP_NULL, OPf_STACKED, scalar(newleft), right);
2669         else
2670             o = op_prepend_elem(rtype, scalar(newleft), right);
2671         if (type == OP_NOT)
2672             return newUNOP(OP_NOT, 0, scalar(o));
2673         return o;
2674     }
2675     else
2676         return bind_match(type, left,
2677                 pmruntime(newPMOP(OP_MATCH, 0), right, 0, 0));
2678 }
2679
2680 OP *
2681 Perl_invert(pTHX_ OP *o)
2682 {
2683     if (!o)
2684         return NULL;
2685     return newUNOP(OP_NOT, OPf_SPECIAL, scalar(o));
2686 }
2687
2688 /*
2689 =for apidoc Amx|OP *|op_scope|OP *o
2690
2691 Wraps up an op tree with some additional ops so that at runtime a dynamic
2692 scope will be created.  The original ops run in the new dynamic scope,
2693 and then, provided that they exit normally, the scope will be unwound.
2694 The additional ops used to create and unwind the dynamic scope will
2695 normally be an C<enter>/C<leave> pair, but a C<scope> op may be used
2696 instead if the ops are simple enough to not need the full dynamic scope
2697 structure.
2698
2699 =cut
2700 */
2701
2702 OP *
2703 Perl_op_scope(pTHX_ OP *o)
2704 {
2705     dVAR;
2706     if (o) {
2707         if (o->op_flags & OPf_PARENS || PERLDB_NOOPT || PL_tainting) {
2708             o = op_prepend_elem(OP_LINESEQ, newOP(OP_ENTER, 0), o);
2709             o->op_type = OP_LEAVE;
2710             o->op_ppaddr = PL_ppaddr[OP_LEAVE];
2711         }
2712         else if (o->op_type == OP_LINESEQ) {
2713             OP *kid;
2714             o->op_type = OP_SCOPE;
2715             o->op_ppaddr = PL_ppaddr[OP_SCOPE];
2716             kid = ((LISTOP*)o)->op_first;
2717             if (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) {
2718                 op_null(kid);
2719
2720                 /* The following deals with things like 'do {1 for 1}' */
2721                 kid = kid->op_sibling;
2722                 if (kid &&
2723                     (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE))
2724                     op_null(kid);
2725             }
2726         }
2727         else
2728             o = newLISTOP(OP_SCOPE, 0, o, NULL);
2729     }
2730     return o;
2731 }
2732
2733 int
2734 Perl_block_start(pTHX_ int full)
2735 {
2736     dVAR;
2737     const int retval = PL_savestack_ix;
2738
2739     pad_block_start(full);
2740     SAVEHINTS();
2741     PL_hints &= ~HINT_BLOCK_SCOPE;
2742     SAVECOMPILEWARNINGS();
2743     PL_compiling.cop_warnings = DUP_WARNINGS(PL_compiling.cop_warnings);
2744
2745     CALL_BLOCK_HOOKS(bhk_start, full);
2746
2747     return retval;
2748 }
2749
2750 OP*
2751 Perl_block_end(pTHX_ I32 floor, OP *seq)
2752 {
2753     dVAR;
2754     const int needblockscope = PL_hints & HINT_BLOCK_SCOPE;
2755     OP* retval = scalarseq(seq);
2756
2757     CALL_BLOCK_HOOKS(bhk_pre_end, &retval);
2758
2759     LEAVE_SCOPE(floor);
2760     CopHINTS_set(&PL_compiling, PL_hints);
2761     if (needblockscope)
2762         PL_hints |= HINT_BLOCK_SCOPE; /* propagate out */
2763     pad_leavemy();
2764
2765     CALL_BLOCK_HOOKS(bhk_post_end, &retval);
2766
2767     return retval;
2768 }
2769
2770 /*
2771 =head1 Compile-time scope hooks
2772
2773 =for apidoc Aox||blockhook_register
2774
2775 Register a set of hooks to be called when the Perl lexical scope changes
2776 at compile time. See L<perlguts/"Compile-time scope hooks">.
2777
2778 =cut
2779 */
2780
2781 void
2782 Perl_blockhook_register(pTHX_ BHK *hk)
2783 {
2784     PERL_ARGS_ASSERT_BLOCKHOOK_REGISTER;
2785
2786     Perl_av_create_and_push(aTHX_ &PL_blockhooks, newSViv(PTR2IV(hk)));
2787 }
2788
2789 STATIC OP *
2790 S_newDEFSVOP(pTHX)
2791 {
2792     dVAR;
2793     const PADOFFSET offset = pad_findmy_pvs("$_", 0);
2794     if (offset == NOT_IN_PAD || PAD_COMPNAME_FLAGS_isOUR(offset)) {
2795         return newSVREF(newGVOP(OP_GV, 0, PL_defgv));
2796     }
2797     else {
2798         OP * const o = newOP(OP_PADSV, 0);
2799         o->op_targ = offset;
2800         return o;
2801     }
2802 }
2803
2804 void
2805 Perl_newPROG(pTHX_ OP *o)
2806 {
2807     dVAR;
2808
2809     PERL_ARGS_ASSERT_NEWPROG;
2810
2811     if (PL_in_eval) {
2812         PERL_CONTEXT *cx;
2813         I32 i;
2814         if (PL_eval_root)
2815                 return;
2816         PL_eval_root = newUNOP(OP_LEAVEEVAL,
2817                                ((PL_in_eval & EVAL_KEEPERR)
2818                                 ? OPf_SPECIAL : 0), o);
2819
2820         cx = &cxstack[cxstack_ix];
2821         assert(CxTYPE(cx) == CXt_EVAL);
2822
2823         if ((cx->blk_gimme & G_WANT) == G_VOID)
2824             scalarvoid(PL_eval_root);
2825         else if ((cx->blk_gimme & G_WANT) == G_ARRAY)
2826             list(PL_eval_root);
2827         else
2828             scalar(PL_eval_root);
2829
2830         PL_eval_start = op_linklist(PL_eval_root);
2831         PL_eval_root->op_private |= OPpREFCOUNTED;
2832         OpREFCNT_set(PL_eval_root, 1);
2833         PL_eval_root->op_next = 0;
2834         i = PL_savestack_ix;
2835         SAVEFREEOP(o);
2836         ENTER;
2837         CALL_PEEP(PL_eval_start);
2838         finalize_optree(PL_eval_root);
2839         LEAVE;
2840         PL_savestack_ix = i;
2841     }
2842     else {
2843         if (o->op_type == OP_STUB) {
2844             PL_comppad_name = 0;
2845             PL_compcv = 0;
2846             S_op_destroy(aTHX_ o);
2847             return;
2848         }
2849         PL_main_root = op_scope(sawparens(scalarvoid(o)));
2850         PL_curcop = &PL_compiling;
2851         PL_main_start = LINKLIST(PL_main_root);
2852         PL_main_root->op_private |= OPpREFCOUNTED;
2853         OpREFCNT_set(PL_main_root, 1);
2854         PL_main_root->op_next = 0;
2855         CALL_PEEP(PL_main_start);
2856         finalize_optree(PL_main_root);
2857         PL_compcv = 0;
2858
2859         /* Register with debugger */
2860         if (PERLDB_INTER) {
2861             CV * const cv = get_cvs("DB::postponed", 0);
2862             if (cv) {
2863                 dSP;
2864                 PUSHMARK(SP);
2865                 XPUSHs(MUTABLE_SV(CopFILEGV(&PL_compiling)));
2866                 PUTBACK;
2867                 call_sv(MUTABLE_SV(cv), G_DISCARD);
2868             }
2869         }
2870     }
2871 }
2872
2873 OP *
2874 Perl_localize(pTHX_ OP *o, I32 lex)
2875 {
2876     dVAR;
2877
2878     PERL_ARGS_ASSERT_LOCALIZE;
2879
2880     if (o->op_flags & OPf_PARENS)
2881 /* [perl #17376]: this appears to be premature, and results in code such as
2882    C< our(%x); > executing in list mode rather than void mode */
2883 #if 0
2884         list(o);
2885 #else
2886         NOOP;
2887 #endif
2888     else {
2889         if ( PL_parser->bufptr > PL_parser->oldbufptr
2890             && PL_parser->bufptr[-1] == ','
2891             && ckWARN(WARN_PARENTHESIS))
2892         {
2893             char *s = PL_parser->bufptr;
2894             bool sigil = FALSE;
2895
2896             /* some heuristics to detect a potential error */
2897             while (*s && (strchr(", \t\n", *s)))
2898                 s++;
2899
2900             while (1) {
2901                 if (*s && strchr("@$%*", *s) && *++s
2902                        && (isALNUM(*s) || UTF8_IS_CONTINUED(*s))) {
2903                     s++;
2904                     sigil = TRUE;
2905                     while (*s && (isALNUM(*s) || UTF8_IS_CONTINUED(*s)))
2906                         s++;
2907                     while (*s && (strchr(", \t\n", *s)))
2908                         s++;
2909                 }
2910                 else
2911                     break;
2912             }
2913             if (sigil && (*s == ';' || *s == '=')) {
2914                 Perl_warner(aTHX_ packWARN(WARN_PARENTHESIS),
2915                                 "Parentheses missing around \"%s\" list",
2916                                 lex
2917                                     ? (PL_parser->in_my == KEY_our
2918                                         ? "our"
2919                                         : PL_parser->in_my == KEY_state
2920                                             ? "state"
2921                                             : "my")
2922                                     : "local");
2923             }
2924         }
2925     }
2926     if (lex)
2927         o = my(o);
2928     else
2929         o = op_lvalue(o, OP_NULL);              /* a bit kludgey */
2930     PL_parser->in_my = FALSE;
2931     PL_parser->in_my_stash = NULL;
2932     return o;
2933 }
2934
2935 OP *
2936 Perl_jmaybe(pTHX_ OP *o)
2937 {
2938     PERL_ARGS_ASSERT_JMAYBE;
2939
2940     if (o->op_type == OP_LIST) {
2941         OP * const o2
2942             = newSVREF(newGVOP(OP_GV, 0, gv_fetchpvs(";", GV_ADD|GV_NOTQUAL, SVt_PV)));
2943         o = convert(OP_JOIN, 0, op_prepend_elem(OP_LIST, o2, o));
2944     }
2945     return o;
2946 }
2947
2948 PERL_STATIC_INLINE OP *
2949 S_op_std_init(pTHX_ OP *o)
2950 {
2951     I32 type = o->op_type;
2952
2953     PERL_ARGS_ASSERT_OP_STD_INIT;
2954
2955     if (PL_opargs[type] & OA_RETSCALAR)
2956         scalar(o);
2957     if (PL_opargs[type] & OA_TARGET && !o->op_targ)
2958         o->op_targ = pad_alloc(type, SVs_PADTMP);
2959
2960     return o;
2961 }
2962
2963 PERL_STATIC_INLINE OP *
2964 S_op_integerize(pTHX_ OP *o)
2965 {
2966     I32 type = o->op_type;
2967
2968     PERL_ARGS_ASSERT_OP_INTEGERIZE;
2969
2970     /* integerize op, unless it happens to be C<-foo>.
2971      * XXX should pp_i_negate() do magic string negation instead? */
2972     if ((PL_opargs[type] & OA_OTHERINT) && (PL_hints & HINT_INTEGER)
2973         && !(type == OP_NEGATE && cUNOPo->op_first->op_type == OP_CONST
2974              && (cUNOPo->op_first->op_private & OPpCONST_BARE)))
2975     {
2976         dVAR;
2977         o->op_ppaddr = PL_ppaddr[type = ++(o->op_type)];
2978     }
2979
2980     if (type == OP_NEGATE)
2981         /* XXX might want a ck_negate() for this */
2982         cUNOPo->op_first->op_private &= ~OPpCONST_STRICT;
2983
2984     return o;
2985 }
2986
2987 static OP *
2988 S_fold_constants(pTHX_ register OP *o)
2989 {
2990     dVAR;
2991     register OP * VOL curop;
2992     OP *newop;
2993     VOL I32 type = o->op_type;
2994     SV * VOL sv = NULL;
2995     int ret = 0;
2996     I32 oldscope;
2997     OP *old_next;
2998     SV * const oldwarnhook = PL_warnhook;
2999     SV * const olddiehook  = PL_diehook;
3000     COP not_compiling;
3001     dJMPENV;
3002
3003     PERL_ARGS_ASSERT_FOLD_CONSTANTS;
3004
3005     if (!(PL_opargs[type] & OA_FOLDCONST))
3006         goto nope;
3007
3008     switch (type) {
3009     case OP_UCFIRST:
3010     case OP_LCFIRST:
3011     case OP_UC:
3012     case OP_LC:
3013     case OP_SLT:
3014     case OP_SGT:
3015     case OP_SLE:
3016     case OP_SGE:
3017     case OP_SCMP:
3018     case OP_SPRINTF:
3019         /* XXX what about the numeric ops? */
3020         if (IN_LOCALE_COMPILETIME)
3021             goto nope;
3022         break;
3023     case OP_REPEAT:
3024         if (o->op_private & OPpREPEAT_DOLIST) goto nope;
3025     }
3026
3027     if (PL_parser && PL_parser->error_count)
3028         goto nope;              /* Don't try to run w/ errors */
3029
3030     for (curop = LINKLIST(o); curop != o; curop = LINKLIST(curop)) {
3031         const OPCODE type = curop->op_type;
3032         if ((type != OP_CONST || (curop->op_private & OPpCONST_BARE)) &&
3033             type != OP_LIST &&
3034             type != OP_SCALAR &&
3035             type != OP_NULL &&
3036             type != OP_PUSHMARK)
3037         {
3038             goto nope;
3039         }
3040     }
3041
3042     curop = LINKLIST(o);
3043     old_next = o->op_next;
3044     o->op_next = 0;
3045     PL_op = curop;
3046
3047     oldscope = PL_scopestack_ix;
3048     create_eval_scope(G_FAKINGEVAL);
3049
3050     /* Verify that we don't need to save it:  */
3051     assert(PL_curcop == &PL_compiling);
3052     StructCopy(&PL_compiling, &not_compiling, COP);
3053     PL_curcop = &not_compiling;
3054     /* The above ensures that we run with all the correct hints of the
3055        currently compiling COP, but that IN_PERL_RUNTIME is not true. */
3056     assert(IN_PERL_RUNTIME);
3057     PL_warnhook = PERL_WARNHOOK_FATAL;
3058     PL_diehook  = NULL;
3059     JMPENV_PUSH(ret);
3060
3061     switch (ret) {
3062     case 0:
3063         CALLRUNOPS(aTHX);
3064         sv = *(PL_stack_sp--);
3065         if (o->op_targ && sv == PAD_SV(o->op_targ)) {   /* grab pad temp? */
3066 #ifdef PERL_MAD
3067             /* Can't simply swipe the SV from the pad, because that relies on
3068                the op being freed "real soon now". Under MAD, this doesn't
3069                happen (see the #ifdef below).  */
3070             sv = newSVsv(sv);
3071 #else
3072             pad_swipe(o->op_targ,  FALSE);
3073 #endif
3074         }
3075         else if (SvTEMP(sv)) {                  /* grab mortal temp? */
3076             SvREFCNT_inc_simple_void(sv);
3077             SvTEMP_off(sv);
3078         }
3079         break;
3080     case 3:
3081         /* Something tried to die.  Abandon constant folding.  */
3082         /* Pretend the error never happened.  */
3083         CLEAR_ERRSV();
3084         o->op_next = old_next;
3085         break;
3086     default:
3087         JMPENV_POP;
3088         /* Don't expect 1 (setjmp failed) or 2 (something called my_exit)  */
3089         PL_warnhook = oldwarnhook;
3090         PL_diehook  = olddiehook;
3091         /* XXX note that this croak may fail as we've already blown away
3092          * the stack - eg any nested evals */
3093         Perl_croak(aTHX_ "panic: fold_constants JMPENV_PUSH returned %d", ret);
3094     }
3095     JMPENV_POP;
3096     PL_warnhook = oldwarnhook;
3097     PL_diehook  = olddiehook;
3098     PL_curcop = &PL_compiling;
3099
3100     if (PL_scopestack_ix > oldscope)
3101         delete_eval_scope();
3102
3103     if (ret)
3104         goto nope;
3105
3106 #ifndef PERL_MAD
3107     op_free(o);
3108 #endif
3109     assert(sv);
3110     if (type == OP_RV2GV)
3111         newop = newGVOP(OP_GV, 0, MUTABLE_GV(sv));
3112     else
3113         newop = newSVOP(OP_CONST, 0, MUTABLE_SV(sv));
3114     op_getmad(o,newop,'f');
3115     return newop;
3116
3117  nope:
3118     return o;
3119 }
3120
3121 static OP *
3122 S_gen_constant_list(pTHX_ register OP *o)
3123 {
3124     dVAR;
3125     register OP *curop;
3126     const I32 oldtmps_floor = PL_tmps_floor;
3127
3128     list(o);
3129     if (PL_parser && PL_parser->error_count)
3130         return o;               /* Don't attempt to run with errors */
3131
3132     PL_op = curop = LINKLIST(o);
3133     o->op_next = 0;
3134     CALL_PEEP(curop);
3135     Perl_pp_pushmark(aTHX);
3136     CALLRUNOPS(aTHX);
3137     PL_op = curop;
3138     assert (!(curop->op_flags & OPf_SPECIAL));
3139     assert(curop->op_type == OP_RANGE);
3140     Perl_pp_anonlist(aTHX);
3141     PL_tmps_floor = oldtmps_floor;
3142
3143     o->op_type = OP_RV2AV;
3144     o->op_ppaddr = PL_ppaddr[OP_RV2AV];
3145     o->op_flags &= ~OPf_REF;    /* treat \(1..2) like an ordinary list */
3146     o->op_flags |= OPf_PARENS;  /* and flatten \(1..2,3) */
3147     o->op_opt = 0;              /* needs to be revisited in rpeep() */
3148     curop = ((UNOP*)o)->op_first;
3149     ((UNOP*)o)->op_first = newSVOP(OP_CONST, 0, SvREFCNT_inc_NN(*PL_stack_sp--));
3150 #ifdef PERL_MAD
3151     op_getmad(curop,o,'O');
3152 #else
3153     op_free(curop);
3154 #endif
3155     LINKLIST(o);
3156     return list(o);
3157 }
3158
3159 OP *
3160 Perl_convert(pTHX_ I32 type, I32 flags, OP *o)
3161 {
3162     dVAR;
3163     if (type < 0) type = -type, flags |= OPf_SPECIAL;
3164     if (!o || o->op_type != OP_LIST)
3165         o = newLISTOP(OP_LIST, 0, o, NULL);
3166     else
3167         o->op_flags &= ~OPf_WANT;
3168
3169     if (!(PL_opargs[type] & OA_MARK))
3170         op_null(cLISTOPo->op_first);
3171     else {
3172         OP * const kid2 = cLISTOPo->op_first->op_sibling;
3173         if (kid2 && kid2->op_type == OP_COREARGS) {
3174             op_null(cLISTOPo->op_first);
3175             kid2->op_private |= OPpCOREARGS_PUSHMARK;
3176         }
3177     }   
3178
3179     o->op_type = (OPCODE)type;
3180     o->op_ppaddr = PL_ppaddr[type];
3181     o->op_flags |= flags;
3182
3183     o = CHECKOP(type, o);
3184     if (o->op_type != (unsigned)type)
3185         return o;
3186
3187     return fold_constants(op_integerize(op_std_init(o)));
3188 }
3189
3190 /*
3191 =head1 Optree Manipulation Functions
3192 */
3193
3194 /* List constructors */
3195
3196 /*
3197 =for apidoc Am|OP *|op_append_elem|I32 optype|OP *first|OP *last
3198
3199 Append an item to the list of ops contained directly within a list-type
3200 op, returning the lengthened list.  I<first> is the list-type op,
3201 and I<last> is the op to append to the list.  I<optype> specifies the
3202 intended opcode for the list.  If I<first> is not already a list of the
3203 right type, it will be upgraded into one.  If either I<first> or I<last>
3204 is null, the other is returned unchanged.
3205
3206 =cut
3207 */
3208
3209 OP *
3210 Perl_op_append_elem(pTHX_ I32 type, OP *first, OP *last)
3211 {
3212     if (!first)
3213         return last;
3214
3215     if (!last)
3216         return first;
3217
3218     if (first->op_type != (unsigned)type
3219         || (type == OP_LIST && (first->op_flags & OPf_PARENS)))
3220     {
3221         return newLISTOP(type, 0, first, last);
3222     }
3223
3224     if (first->op_flags & OPf_KIDS)
3225         ((LISTOP*)first)->op_last->op_sibling = last;
3226     else {
3227         first->op_flags |= OPf_KIDS;
3228         ((LISTOP*)first)->op_first = last;
3229     }
3230     ((LISTOP*)first)->op_last = last;
3231     return first;
3232 }
3233
3234 /*
3235 =for apidoc Am|OP *|op_append_list|I32 optype|OP *first|OP *last
3236
3237 Concatenate the lists of ops contained directly within two list-type ops,
3238 returning the combined list.  I<first> and I<last> are the list-type ops
3239 to concatenate.  I<optype> specifies the intended opcode for the list.
3240 If either I<first> or I<last> is not already a list of the right type,
3241 it will be upgraded into one.  If either I<first> or I<last> is null,
3242 the other is returned unchanged.
3243
3244 =cut
3245 */
3246
3247 OP *
3248 Perl_op_append_list(pTHX_ I32 type, OP *first, OP *last)
3249 {
3250     if (!first)
3251         return last;
3252
3253     if (!last)
3254         return first;
3255
3256     if (first->op_type != (unsigned)type)
3257         return op_prepend_elem(type, first, last);
3258
3259     if (last->op_type != (unsigned)type)
3260         return op_append_elem(type, first, last);
3261
3262     ((LISTOP*)first)->op_last->op_sibling = ((LISTOP*)last)->op_first;
3263     ((LISTOP*)first)->op_last = ((LISTOP*)last)->op_last;
3264     first->op_flags |= (last->op_flags & OPf_KIDS);
3265
3266 #ifdef PERL_MAD
3267     if (((LISTOP*)last)->op_first && first->op_madprop) {
3268         MADPROP *mp = ((LISTOP*)last)->op_first->op_madprop;
3269         if (mp) {
3270             while (mp->mad_next)
3271                 mp = mp->mad_next;
3272             mp->mad_next = first->op_madprop;
3273         }
3274         else {
3275             ((LISTOP*)last)->op_first->op_madprop = first->op_madprop;
3276         }
3277     }
3278     first->op_madprop = last->op_madprop;
3279     last->op_madprop = 0;
3280 #endif
3281
3282     S_op_destroy(aTHX_ last);
3283
3284     return first;
3285 }
3286
3287 /*
3288 =for apidoc Am|OP *|op_prepend_elem|I32 optype|OP *first|OP *last
3289
3290 Prepend an item to the list of ops contained directly within a list-type
3291 op, returning the lengthened list.  I<first> is the op to prepend to the
3292 list, and I<last> is the list-type op.  I<optype> specifies the intended
3293 opcode for the list.  If I<last> is not already a list of the right type,
3294 it will be upgraded into one.  If either I<first> or I<last> is null,
3295 the other is returned unchanged.
3296
3297 =cut
3298 */
3299
3300 OP *
3301 Perl_op_prepend_elem(pTHX_ I32 type, OP *first, OP *last)
3302 {
3303     if (!first)
3304         return last;
3305
3306     if (!last)
3307         return first;
3308
3309     if (last->op_type == (unsigned)type) {
3310         if (type == OP_LIST) {  /* already a PUSHMARK there */
3311             first->op_sibling = ((LISTOP*)last)->op_first->op_sibling;
3312             ((LISTOP*)last)->op_first->op_sibling = first;
3313             if (!(first->op_flags & OPf_PARENS))
3314                 last->op_flags &= ~OPf_PARENS;
3315         }
3316         else {
3317             if (!(last->op_flags & OPf_KIDS)) {
3318                 ((LISTOP*)last)->op_last = first;
3319                 last->op_flags |= OPf_KIDS;
3320             }
3321             first->op_sibling = ((LISTOP*)last)->op_first;
3322             ((LISTOP*)last)->op_first = first;
3323         }
3324         last->op_flags |= OPf_KIDS;
3325         return last;
3326     }
3327
3328     return newLISTOP(type, 0, first, last);
3329 }
3330
3331 /* Constructors */
3332
3333 #ifdef PERL_MAD
3334  
3335 TOKEN *
3336 Perl_newTOKEN(pTHX_ I32 optype, YYSTYPE lval, MADPROP* madprop)
3337 {
3338     TOKEN *tk;
3339     Newxz(tk, 1, TOKEN);
3340     tk->tk_type = (OPCODE)optype;
3341     tk->tk_type = 12345;
3342     tk->tk_lval = lval;
3343     tk->tk_mad = madprop;
3344     return tk;
3345 }
3346
3347 void
3348 Perl_token_free(pTHX_ TOKEN* tk)
3349 {
3350     PERL_ARGS_ASSERT_TOKEN_FREE;
3351
3352     if (tk->tk_type != 12345)
3353         return;
3354     mad_free(tk->tk_mad);
3355     Safefree(tk);
3356 }
3357
3358 void
3359 Perl_token_getmad(pTHX_ TOKEN* tk, OP* o, char slot)
3360 {
3361     MADPROP* mp;
3362     MADPROP* tm;
3363
3364     PERL_ARGS_ASSERT_TOKEN_GETMAD;
3365
3366     if (tk->tk_type != 12345) {
3367         Perl_warner(aTHX_ packWARN(WARN_MISC),
3368              "Invalid TOKEN object ignored");
3369         return;
3370     }
3371     tm = tk->tk_mad;
3372     if (!tm)
3373         return;
3374
3375     /* faked up qw list? */
3376     if (slot == '(' &&
3377         tm->mad_type == MAD_SV &&
3378         SvPVX((SV *)tm->mad_val)[0] == 'q')
3379             slot = 'x';
3380
3381     if (o) {
3382         mp = o->op_madprop;
3383         if (mp) {
3384             for (;;) {
3385                 /* pretend constant fold didn't happen? */
3386                 if (mp->mad_key == 'f' &&
3387                     (o->op_type == OP_CONST ||
3388                      o->op_type == OP_GV) )
3389                 {
3390                     token_getmad(tk,(OP*)mp->mad_val,slot);
3391                     return;
3392                 }
3393                 if (!mp->mad_next)
3394                     break;
3395                 mp = mp->mad_next;
3396             }
3397             mp->mad_next = tm;
3398             mp = mp->mad_next;
3399         }
3400         else {
3401             o->op_madprop = tm;
3402             mp = o->op_madprop;
3403         }
3404         if (mp->mad_key == 'X')
3405             mp->mad_key = slot; /* just change the first one */
3406
3407         tk->tk_mad = 0;
3408     }
3409     else
3410         mad_free(tm);
3411     Safefree(tk);
3412 }
3413
3414 void
3415 Perl_op_getmad_weak(pTHX_ OP* from, OP* o, char slot)
3416 {
3417     MADPROP* mp;
3418     if (!from)
3419         return;
3420     if (o) {
3421         mp = o->op_madprop;
3422         if (mp) {
3423             for (;;) {
3424                 /* pretend constant fold didn't happen? */
3425                 if (mp->mad_key == 'f' &&
3426                     (o->op_type == OP_CONST ||
3427                      o->op_type == OP_GV) )
3428                 {
3429                     op_getmad(from,(OP*)mp->mad_val,slot);
3430                     return;
3431                 }
3432                 if (!mp->mad_next)
3433                     break;
3434                 mp = mp->mad_next;
3435             }
3436             mp->mad_next = newMADPROP(slot,MAD_OP,from,0);
3437         }
3438         else {
3439             o->op_madprop = newMADPROP(slot,MAD_OP,from,0);
3440         }
3441     }
3442 }
3443
3444 void
3445 Perl_op_getmad(pTHX_ OP* from, OP* o, char slot)
3446 {
3447     MADPROP* mp;
3448     if (!from)
3449         return;
3450     if (o) {
3451         mp = o->op_madprop;
3452         if (mp) {
3453             for (;;) {
3454                 /* pretend constant fold didn't happen? */
3455                 if (mp->mad_key == 'f' &&
3456                     (o->op_type == OP_CONST ||
3457                      o->op_type == OP_GV) )
3458                 {
3459                     op_getmad(from,(OP*)mp->mad_val,slot);
3460                     return;
3461                 }
3462                 if (!mp->mad_next)
3463                     break;
3464                 mp = mp->mad_next;
3465             }
3466             mp->mad_next = newMADPROP(slot,MAD_OP,from,1);
3467         }
3468         else {
3469             o->op_madprop = newMADPROP(slot,MAD_OP,from,1);
3470         }
3471     }
3472     else {
3473         PerlIO_printf(PerlIO_stderr(),
3474                       "DESTROYING op = %0"UVxf"\n", PTR2UV(from));
3475         op_free(from);
3476     }
3477 }
3478
3479 void
3480 Perl_prepend_madprops(pTHX_ MADPROP* mp, OP* o, char slot)
3481 {
3482     MADPROP* tm;
3483     if (!mp || !o)
3484         return;
3485     if (slot)
3486         mp->mad_key = slot;
3487     tm = o->op_madprop;
3488     o->op_madprop = mp;
3489     for (;;) {
3490         if (!mp->mad_next)
3491             break;
3492         mp = mp->mad_next;
3493     }
3494     mp->mad_next = tm;
3495 }
3496
3497 void
3498 Perl_append_madprops(pTHX_ MADPROP* tm, OP* o, char slot)
3499 {
3500     if (!o)
3501         return;
3502     addmad(tm, &(o->op_madprop), slot);
3503 }
3504
3505 void
3506 Perl_addmad(pTHX_ MADPROP* tm, MADPROP** root, char slot)
3507 {
3508     MADPROP* mp;
3509     if (!tm || !root)
3510         return;
3511     if (slot)
3512         tm->mad_key = slot;
3513     mp = *root;
3514     if (!mp) {
3515         *root = tm;
3516         return;
3517     }
3518     for (;;) {
3519         if (!mp->mad_next)
3520             break;
3521         mp = mp->mad_next;
3522     }
3523     mp->mad_next = tm;
3524 }
3525
3526 MADPROP *
3527 Perl_newMADsv(pTHX_ char key, SV* sv)
3528 {
3529     PERL_ARGS_ASSERT_NEWMADSV;
3530
3531     return newMADPROP(key, MAD_SV, sv, 0);
3532 }
3533
3534 MADPROP *
3535 Perl_newMADPROP(pTHX_ char key, char type, void* val, I32 vlen)
3536 {
3537     MADPROP *const mp = (MADPROP *) PerlMemShared_malloc(sizeof(MADPROP));
3538     mp->mad_next = 0;
3539     mp->mad_key = key;
3540     mp->mad_vlen = vlen;
3541     mp->mad_type = type;
3542     mp->mad_val = val;
3543 /*    PerlIO_printf(PerlIO_stderr(), "NEW  mp = %0x\n", mp);  */
3544     return mp;
3545 }
3546
3547 void
3548 Perl_mad_free(pTHX_ MADPROP* mp)
3549 {
3550 /*    PerlIO_printf(PerlIO_stderr(), "FREE mp = %0x\n", mp); */
3551     if (!mp)
3552         return;
3553     if (mp->mad_next)
3554         mad_free(mp->mad_next);
3555 /*    if (PL_parser && PL_parser->lex_state != LEX_NOTPARSING && mp->mad_vlen)
3556         PerlIO_printf(PerlIO_stderr(), "DESTROYING '%c'=<%s>\n", mp->mad_key & 255, mp->mad_val); */
3557     switch (mp->mad_type) {
3558     case MAD_NULL:
3559         break;
3560     case MAD_PV:
3561         Safefree((char*)mp->mad_val);
3562         break;
3563     case MAD_OP:
3564         if (mp->mad_vlen)       /* vlen holds "strong/weak" boolean */
3565             op_free((OP*)mp->mad_val);
3566         break;
3567     case MAD_SV:
3568         sv_free(MUTABLE_SV(mp->mad_val));
3569         break;
3570     default:
3571         PerlIO_printf(PerlIO_stderr(), "Unrecognized mad\n");
3572         break;
3573     }
3574     PerlMemShared_free(mp);
3575 }
3576
3577 #endif
3578
3579 /*
3580 =head1 Optree construction
3581
3582 =for apidoc Am|OP *|newNULLLIST
3583
3584 Constructs, checks, and returns a new C<stub> op, which represents an
3585 empty list expression.
3586
3587 =cut
3588 */
3589
3590 OP *
3591 Perl_newNULLLIST(pTHX)
3592 {
3593     return newOP(OP_STUB, 0);
3594 }
3595
3596 static OP *
3597 S_force_list(pTHX_ OP *o)
3598 {
3599     if (!o || o->op_type != OP_LIST)
3600         o = newLISTOP(OP_LIST, 0, o, NULL);
3601     op_null(o);
3602     return o;
3603 }
3604
3605 /*
3606 =for apidoc Am|OP *|newLISTOP|I32 type|I32 flags|OP *first|OP *last
3607
3608 Constructs, checks, and returns an op of any list type.  I<type> is
3609 the opcode.  I<flags> gives the eight bits of C<op_flags>, except that
3610 C<OPf_KIDS> will be set automatically if required.  I<first> and I<last>
3611 supply up to two ops to be direct children of the list op; they are
3612 consumed by this function and become part of the constructed op tree.
3613
3614 =cut
3615 */
3616
3617 OP *
3618 Perl_newLISTOP(pTHX_ I32 type, I32 flags, OP *first, OP *last)
3619 {
3620     dVAR;
3621     LISTOP *listop;
3622
3623     assert((PL_opargs[type] & OA_CLASS_MASK) == OA_LISTOP);
3624
3625     NewOp(1101, listop, 1, LISTOP);
3626
3627     listop->op_type = (OPCODE)type;
3628     listop->op_ppaddr = PL_ppaddr[type];
3629     if (first || last)
3630         flags |= OPf_KIDS;
3631     listop->op_flags = (U8)flags;
3632
3633     if (!last && first)
3634         last = first;
3635     else if (!first && last)
3636         first = last;
3637     else if (first)
3638         first->op_sibling = last;
3639     listop->op_first = first;
3640     listop->op_last = last;
3641     if (type == OP_LIST) {
3642         OP* const pushop = newOP(OP_PUSHMARK, 0);
3643         pushop->op_sibling = first;
3644         listop->op_first = pushop;
3645         listop->op_flags |= OPf_KIDS;
3646         if (!last)
3647             listop->op_last = pushop;
3648     }
3649
3650     return CHECKOP(type, listop);
3651 }
3652
3653 /*
3654 =for apidoc Am|OP *|newOP|I32 type|I32 flags
3655
3656 Constructs, checks, and returns an op of any base type (any type that
3657 has no extra fields).  I<type> is the opcode.  I<flags> gives the
3658 eight bits of C<op_flags>, and, shifted up eight bits, the eight bits
3659 of C<op_private>.
3660
3661 =cut
3662 */
3663
3664 OP *
3665 Perl_newOP(pTHX_ I32 type, I32 flags)
3666 {
3667     dVAR;
3668     OP *o;
3669
3670     if (type == -OP_ENTEREVAL) {
3671         type = OP_ENTEREVAL;
3672         flags |= OPpEVAL_BYTES<<8;
3673     }
3674
3675     assert((PL_opargs[type] & OA_CLASS_MASK) == OA_BASEOP
3676         || (PL_opargs[type] & OA_CLASS_MASK) == OA_BASEOP_OR_UNOP
3677         || (PL_opargs[type] & OA_CLASS_MASK) == OA_FILESTATOP
3678         || (PL_opargs[type] & OA_CLASS_MASK) == OA_LOOPEXOP);
3679
3680     NewOp(1101, o, 1, OP);
3681     o->op_type = (OPCODE)type;
3682     o->op_ppaddr = PL_ppaddr[type];
3683     o->op_flags = (U8)flags;
3684     o->op_latefree = 0;
3685     o->op_latefreed = 0;
3686     o->op_attached = 0;
3687
3688     o->op_next = o;
3689     o->op_private = (U8)(0 | (flags >> 8));
3690     if (PL_opargs[type] & OA_RETSCALAR)
3691         scalar(o);
3692     if (PL_opargs[type] & OA_TARGET)
3693         o->op_targ = pad_alloc(type, SVs_PADTMP);
3694     return CHECKOP(type, o);
3695 }
3696
3697 /*
3698 =for apidoc Am|OP *|newUNOP|I32 type|I32 flags|OP *first
3699
3700 Constructs, checks, and returns an op of any unary type.  I<type> is
3701 the opcode.  I<flags> gives the eight bits of C<op_flags>, except that
3702 C<OPf_KIDS> will be set automatically if required, and, shifted up eight
3703 bits, the eight bits of C<op_private>, except that the bit with value 1
3704 is automatically set.  I<first> supplies an optional op to be the direct
3705 child of the unary op; it is consumed by this function and become part
3706 of the constructed op tree.
3707
3708 =cut
3709 */
3710
3711 OP *
3712 Perl_newUNOP(pTHX_ I32 type, I32 flags, OP *first)
3713 {
3714     dVAR;
3715     UNOP *unop;
3716
3717     if (type == -OP_ENTEREVAL) {
3718         type = OP_ENTEREVAL;
3719         flags |= OPpEVAL_BYTES<<8;
3720     }
3721
3722     assert((PL_opargs[type] & OA_CLASS_MASK) == OA_UNOP
3723         || (PL_opargs[type] & OA_CLASS_MASK) == OA_BASEOP_OR_UNOP
3724         || (PL_opargs[type] & OA_CLASS_MASK) == OA_FILESTATOP
3725         || (PL_opargs[type] & OA_CLASS_MASK) == OA_LOOPEXOP
3726         || type == OP_SASSIGN
3727         || type == OP_ENTERTRY
3728         || type == OP_NULL );
3729
3730     if (!first)
3731         first = newOP(OP_STUB, 0);
3732     if (PL_opargs[type] & OA_MARK)
3733         first = force_list(first);
3734
3735     NewOp(1101, unop, 1, UNOP);
3736     unop->op_type = (OPCODE)type;
3737     unop->op_ppaddr = PL_ppaddr[type];
3738     unop->op_first = first;
3739     unop->op_flags = (U8)(flags | OPf_KIDS);
3740     unop->op_private = (U8)(1 | (flags >> 8));
3741     unop = (UNOP*) CHECKOP(type, unop);
3742     if (unop->op_next)
3743         return (OP*)unop;
3744
3745     return fold_constants(op_integerize(op_std_init((OP *) unop)));
3746 }
3747
3748 /*
3749 =for apidoc Am|OP *|newBINOP|I32 type|I32 flags|OP *first|OP *last
3750
3751 Constructs, checks, and returns an op of any binary type.  I<type>
3752 is the opcode.  I<flags> gives the eight bits of C<op_flags>, except
3753 that C<OPf_KIDS> will be set automatically, and, shifted up eight bits,
3754 the eight bits of C<op_private>, except that the bit with value 1 or
3755 2 is automatically set as required.  I<first> and I<last> supply up to
3756 two ops to be the direct children of the binary op; they are consumed
3757 by this function and become part of the constructed op tree.
3758
3759 =cut
3760 */
3761
3762 OP *
3763 Perl_newBINOP(pTHX_ I32 type, I32 flags, OP *first, OP *last)
3764 {
3765     dVAR;
3766     BINOP *binop;
3767
3768     assert((PL_opargs[type] & OA_CLASS_MASK) == OA_BINOP
3769         || type == OP_SASSIGN || type == OP_NULL );
3770
3771     NewOp(1101, binop, 1, BINOP);
3772
3773     if (!first)
3774         first = newOP(OP_NULL, 0);
3775
3776     binop->op_type = (OPCODE)type;
3777     binop->op_ppaddr = PL_ppaddr[type];
3778     binop->op_first = first;
3779     binop->op_flags = (U8)(flags | OPf_KIDS);
3780     if (!last) {
3781         last = first;
3782         binop->op_private = (U8)(1 | (flags >> 8));
3783     }
3784     else {
3785         binop->op_private = (U8)(2 | (flags >> 8));
3786         first->op_sibling = last;
3787     }
3788
3789     binop = (BINOP*)CHECKOP(type, binop);
3790     if (binop->op_next || binop->op_type != (OPCODE)type)
3791         return (OP*)binop;
3792
3793     binop->op_last = binop->op_first->op_sibling;
3794
3795     return fold_constants(op_integerize(op_std_init((OP *)binop)));
3796 }
3797
3798 static int uvcompare(const void *a, const void *b)
3799     __attribute__nonnull__(1)
3800     __attribute__nonnull__(2)
3801     __attribute__pure__;
3802 static int uvcompare(const void *a, const void *b)
3803 {
3804     if (*((const UV *)a) < (*(const UV *)b))
3805         return -1;
3806     if (*((const UV *)a) > (*(const UV *)b))
3807         return 1;
3808     if (*((const UV *)a+1) < (*(const UV *)b+1))
3809         return -1;
3810     if (*((const UV *)a+1) > (*(const UV *)b+1))
3811         return 1;
3812     return 0;
3813 }
3814
3815 static OP *
3816 S_pmtrans(pTHX_ OP *o, OP *expr, OP *repl)
3817 {
3818     dVAR;
3819     SV * const tstr = ((SVOP*)expr)->op_sv;
3820     SV * const rstr =
3821 #ifdef PERL_MAD
3822                         (repl->op_type == OP_NULL)
3823                             ? ((SVOP*)((LISTOP*)repl)->op_first)->op_sv :
3824 #endif
3825                               ((SVOP*)repl)->op_sv;
3826     STRLEN tlen;
3827     STRLEN rlen;
3828     const U8 *t = (U8*)SvPV_const(tstr, tlen);
3829     const U8 *r = (U8*)SvPV_const(rstr, rlen);
3830     register I32 i;
3831     register I32 j;
3832     I32 grows = 0;
3833     register short *tbl;
3834
3835     const I32 complement = o->op_private & OPpTRANS_COMPLEMENT;
3836     const I32 squash     = o->op_private & OPpTRANS_SQUASH;
3837     I32 del              = o->op_private & OPpTRANS_DELETE;
3838     SV* swash;
3839
3840     PERL_ARGS_ASSERT_PMTRANS;
3841
3842     PL_hints |= HINT_BLOCK_SCOPE;
3843
3844     if (SvUTF8(tstr))
3845         o->op_private |= OPpTRANS_FROM_UTF;
3846
3847     if (SvUTF8(rstr))
3848         o->op_private |= OPpTRANS_TO_UTF;
3849
3850     if (o->op_private & (OPpTRANS_FROM_UTF|OPpTRANS_TO_UTF)) {
3851         SV* const listsv = newSVpvs("# comment\n");
3852         SV* transv = NULL;
3853         const U8* tend = t + tlen;
3854         const U8* rend = r + rlen;
3855         STRLEN ulen;
3856         UV tfirst = 1;
3857         UV tlast = 0;
3858         IV tdiff;
3859         UV rfirst = 1;
3860         UV rlast = 0;
3861         IV rdiff;
3862         IV diff;
3863         I32 none = 0;
3864         U32 max = 0;
3865         I32 bits;
3866         I32 havefinal = 0;
3867         U32 final = 0;
3868         const I32 from_utf  = o->op_private & OPpTRANS_FROM_UTF;
3869         const I32 to_utf    = o->op_private & OPpTRANS_TO_UTF;
3870         U8* tsave = NULL;
3871         U8* rsave = NULL;
3872         const U32 flags = UTF8_ALLOW_DEFAULT;
3873
3874         if (!from_utf) {
3875             STRLEN len = tlen;
3876             t = tsave = bytes_to_utf8(t, &len);
3877             tend = t + len;
3878         }
3879         if (!to_utf && rlen) {
3880             STRLEN len = rlen;
3881             r = rsave = bytes_to_utf8(r, &len);
3882             rend = r + len;
3883         }
3884
3885 /* There are several snags with this code on EBCDIC:
3886    1. 0xFF is a legal UTF-EBCDIC byte (there are no illegal bytes).
3887    2. scan_const() in toke.c has encoded chars in native encoding which makes
3888       ranges at least in EBCDIC 0..255 range the bottom odd.
3889 */
3890
3891         if (complement) {
3892             U8 tmpbuf[UTF8_MAXBYTES+1];
3893             UV *cp;
3894             UV nextmin = 0;
3895             Newx(cp, 2*tlen, UV);
3896             i = 0;
3897             transv = newSVpvs("");
3898             while (t < tend) {
3899                 cp[2*i] = utf8n_to_uvuni(t, tend-t, &ulen, flags);
3900                 t += ulen;
3901                 if (t < tend && NATIVE_TO_UTF(*t) == 0xff) {
3902                     t++;
3903                     cp[2*i+1] = utf8n_to_uvuni(t, tend-t, &ulen, flags);
3904                     t += ulen;
3905                 }
3906                 else {
3907                  cp[2*i+1] = cp[2*i];
3908                 }
3909                 i++;
3910             }
3911             qsort(cp, i, 2*sizeof(UV), uvcompare);
3912             for (j = 0; j < i; j++) {
3913                 UV  val = cp[2*j];
3914                 diff = val - nextmin;
3915                 if (diff > 0) {
3916                     t = uvuni_to_utf8(tmpbuf,nextmin);
3917                     sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf);
3918                     if (diff > 1) {
3919                         U8  range_mark = UTF_TO_NATIVE(0xff);
3920                         t = uvuni_to_utf8(tmpbuf, val - 1);
3921                         sv_catpvn(transv, (char *)&range_mark, 1);
3922                         sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf);
3923                     }
3924                 }
3925                 val = cp[2*j+1];
3926                 if (val >= nextmin)
3927                     nextmin = val + 1;
3928             }
3929             t = uvuni_to_utf8(tmpbuf,nextmin);
3930             sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf);
3931             {
3932                 U8 range_mark = UTF_TO_NATIVE(0xff);
3933                 sv_catpvn(transv, (char *)&range_mark, 1);
3934             }
3935             t = uvuni_to_utf8(tmpbuf, 0x7fffffff);
3936             sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf);
3937             t = (const U8*)SvPVX_const(transv);
3938             tlen = SvCUR(transv);
3939             tend = t + tlen;
3940             Safefree(cp);
3941         }
3942         else if (!rlen && !del) {
3943             r = t; rlen = tlen; rend = tend;
3944         }
3945         if (!squash) {
3946                 if ((!rlen && !del) || t == r ||
3947                     (tlen == rlen && memEQ((char *)t, (char *)r, tlen)))
3948                 {
3949                     o->op_private |= OPpTRANS_IDENTICAL;
3950                 }
3951         }
3952
3953         while (t < tend || tfirst <= tlast) {
3954             /* see if we need more "t" chars */
3955             if (tfirst > tlast) {
3956                 tfirst = (I32)utf8n_to_uvuni(t, tend - t, &ulen, flags);
3957                 t += ulen;
3958                 if (t < tend && NATIVE_TO_UTF(*t) == 0xff) {    /* illegal utf8 val indicates range */
3959                     t++;
3960                     tlast = (I32)utf8n_to_uvuni(t, tend - t, &ulen, flags);
3961                     t += ulen;
3962                 }
3963                 else
3964                     tlast = tfirst;
3965             }
3966
3967             /* now see if we need more "r" chars */
3968             if (rfirst > rlast) {
3969                 if (r < rend) {
3970                     rfirst = (I32)utf8n_to_uvuni(r, rend - r, &ulen, flags);
3971                     r += ulen;
3972                     if (r < rend && NATIVE_TO_UTF(*r) == 0xff) {        /* illegal utf8 val indicates range */
3973                         r++;
3974                         rlast = (I32)utf8n_to_uvuni(r, rend - r, &ulen, flags);
3975                         r += ulen;
3976                     }
3977                     else
3978                         rlast = rfirst;
3979                 }
3980                 else {
3981                     if (!havefinal++)
3982                         final = rlast;
3983                     rfirst = rlast = 0xffffffff;
3984                 }
3985             }
3986
3987             /* now see which range will peter our first, if either. */
3988             tdiff = tlast - tfirst;
3989             rdiff = rlast - rfirst;
3990
3991             if (tdiff <= rdiff)
3992                 diff = tdiff;
3993             else
3994                 diff = rdiff;
3995
3996             if (rfirst == 0xffffffff) {
3997                 diff = tdiff;   /* oops, pretend rdiff is infinite */
3998                 if (diff > 0)
3999                     Perl_sv_catpvf(aTHX_ listsv, "%04lx\t%04lx\tXXXX\n",
4000                                    (long)tfirst, (long)tlast);
4001                 else
4002                     Perl_sv_catpvf(aTHX_ listsv, "%04lx\t\tXXXX\n", (long)tfirst);
4003             }
4004             else {
4005                 if (diff > 0)
4006                     Perl_sv_catpvf(aTHX_ listsv, "%04lx\t%04lx\t%04lx\n",
4007                                    (long)tfirst, (long)(tfirst + diff),
4008                                    (long)rfirst);
4009                 else
4010                     Perl_sv_catpvf(aTHX_ listsv, "%04lx\t\t%04lx\n",
4011                                    (long)tfirst, (long)rfirst);
4012
4013                 if (rfirst + diff > max)
4014                     max = rfirst + diff;
4015                 if (!grows)
4016                     grows = (tfirst < rfirst &&
4017                              UNISKIP(tfirst) < UNISKIP(rfirst + diff));
4018                 rfirst += diff + 1;
4019             }
4020             tfirst += diff + 1;
4021         }
4022
4023         none = ++max;
4024         if (del)
4025             del = ++max;
4026
4027         if (max > 0xffff)
4028             bits = 32;
4029         else if (max > 0xff)
4030             bits = 16;
4031         else
4032             bits = 8;
4033
4034         swash = MUTABLE_SV(swash_init("utf8", "", listsv, bits, none));
4035 #ifdef USE_ITHREADS
4036         cPADOPo->op_padix = pad_alloc(OP_TRANS, SVs_PADTMP);
4037         SvREFCNT_dec(PAD_SVl(cPADOPo->op_padix));
4038         PAD_SETSV(cPADOPo->op_padix, swash);
4039         SvPADTMP_on(swash);
4040         SvREADONLY_on(swash);
4041 #else
4042         cSVOPo->op_sv = swash;
4043 #endif
4044         SvREFCNT_dec(listsv);
4045         SvREFCNT_dec(transv);
4046
4047         if (!del && havefinal && rlen)
4048             (void)hv_store(MUTABLE_HV(SvRV(swash)), "FINAL", 5,
4049                            newSVuv((UV)final), 0);
4050
4051         if (grows)
4052             o->op_private |= OPpTRANS_GROWS;
4053
4054         Safefree(tsave);
4055         Safefree(rsave);
4056
4057 #ifdef PERL_MAD
4058         op_getmad(expr,o,'e');
4059         op_getmad(repl,o,'r');
4060 #else
4061         op_free(expr);
4062         op_free(repl);
4063 #endif
4064         return o;
4065     }
4066
4067     tbl = (short*)PerlMemShared_calloc(
4068         (o->op_private & OPpTRANS_COMPLEMENT) &&
4069             !(o->op_private & OPpTRANS_DELETE) ? 258 : 256,
4070         sizeof(short));
4071     cPVOPo->op_pv = (char*)tbl;
4072     if (complement) {
4073         for (i = 0; i < (I32)tlen; i++)
4074             tbl[t[i]] = -1;
4075         for (i = 0, j = 0; i < 256; i++) {
4076             if (!tbl[i]) {
4077                 if (j >= (I32)rlen) {
4078                     if (del)
4079                         tbl[i] = -2;
4080                     else if (rlen)
4081                         tbl[i] = r[j-1];
4082                     else
4083                         tbl[i] = (short)i;
4084                 }
4085                 else {
4086                     if (i < 128 && r[j] >= 128)
4087                         grows = 1;
4088                     tbl[i] = r[j++];
4089                 }
4090             }
4091         }
4092         if (!del) {
4093             if (!rlen) {
4094                 j = rlen;
4095                 if (!squash)
4096                     o->op_private |= OPpTRANS_IDENTICAL;
4097             }
4098             else if (j >= (I32)rlen)
4099                 j = rlen - 1;
4100             else {
4101                 tbl = 
4102                     (short *)
4103                     PerlMemShared_realloc(tbl,
4104                                           (0x101+rlen-j) * sizeof(short));
4105                 cPVOPo->op_pv = (char*)tbl;
4106             }
4107             tbl[0x100] = (short)(rlen - j);
4108             for (i=0; i < (I32)rlen - j; i++)
4109                 tbl[0x101+i] = r[j+i];
4110         }
4111     }
4112     else {
4113         if (!rlen && !del) {
4114             r = t; rlen = tlen;
4115             if (!squash)
4116                 o->op_private |= OPpTRANS_IDENTICAL;
4117         }
4118         else if (!squash && rlen == tlen && memEQ((char*)t, (char*)r, tlen)) {
4119             o->op_private |= OPpTRANS_IDENTICAL;
4120         }
4121         for (i = 0; i < 256; i++)
4122             tbl[i] = -1;
4123         for (i = 0, j = 0; i < (I32)tlen; i++,j++) {
4124             if (j >= (I32)rlen) {
4125                 if (del) {
4126                     if (tbl[t[i]] == -1)
4127                         tbl[t[i]] = -2;
4128                     continue;
4129                 }
4130                 --j;
4131             }
4132             if (tbl[t[i]] == -1) {
4133                 if (t[i] < 128 && r[j] >= 128)
4134                     grows = 1;
4135                 tbl[t[i]] = r[j];
4136             }
4137         }
4138     }
4139
4140     if(del && rlen == tlen) {
4141         Perl_ck_warner(aTHX_ packWARN(WARN_MISC), "Useless use of /d modifier in transliteration operator"); 
4142     } else if(rlen > tlen) {
4143         Perl_ck_warner(aTHX_ packWARN(WARN_MISC), "Replacement list is longer than search list");
4144     }
4145
4146     if (grows)
4147         o->op_private |= OPpTRANS_GROWS;
4148 #ifdef PERL_MAD
4149     op_getmad(expr,o,'e');
4150     op_getmad(repl,o,'r');
4151 #else
4152     op_free(expr);
4153     op_free(repl);
4154 #endif
4155
4156     return o;
4157 }
4158
4159 /*
4160 =for apidoc Am|OP *|newPMOP|I32 type|I32 flags
4161
4162 Constructs, checks, and returns an op of any pattern matching type.
4163 I<type> is the opcode.  I<flags> gives the eight bits of C<op_flags>
4164 and, shifted up eight bits, the eight bits of C<op_private>.
4165
4166 =cut
4167 */
4168
4169 OP *
4170 Perl_newPMOP(pTHX_ I32 type, I32 flags)
4171 {
4172     dVAR;
4173     PMOP *pmop;
4174
4175     assert((PL_opargs[type] & OA_CLASS_MASK) == OA_PMOP);
4176
4177     NewOp(1101, pmop, 1, PMOP);
4178     pmop->op_type = (OPCODE)type;
4179     pmop->op_ppaddr = PL_ppaddr[type];
4180     pmop->op_flags = (U8)flags;
4181     pmop->op_private = (U8)(0 | (flags >> 8));
4182
4183     if (PL_hints & HINT_RE_TAINT)
4184         pmop->op_pmflags |= PMf_RETAINT;
4185     if (IN_LOCALE_COMPILETIME) {
4186         set_regex_charset(&(pmop->op_pmflags), REGEX_LOCALE_CHARSET);
4187     }
4188     else if ((! (PL_hints & HINT_BYTES))
4189                 /* Both UNI_8_BIT and locale :not_characters imply Unicode */
4190              && (PL_hints & (HINT_UNI_8_BIT|HINT_LOCALE_NOT_CHARS)))
4191     {
4192         set_regex_charset(&(pmop->op_pmflags), REGEX_UNICODE_CHARSET);
4193     }
4194     if (PL_hints & HINT_RE_FLAGS) {
4195         SV *reflags = Perl_refcounted_he_fetch_pvn(aTHX_
4196          PL_compiling.cop_hints_hash, STR_WITH_LEN("reflags"), 0, 0
4197         );
4198         if (reflags && SvOK(reflags)) pmop->op_pmflags |= SvIV(reflags);
4199         reflags = Perl_refcounted_he_fetch_pvn(aTHX_
4200          PL_compiling.cop_hints_hash, STR_WITH_LEN("reflags_charset"), 0, 0
4201         );
4202         if (reflags && SvOK(reflags)) {
4203             set_regex_charset(&(pmop->op_pmflags), (regex_charset)SvIV(reflags));
4204         }
4205     }
4206
4207
4208 #ifdef USE_ITHREADS
4209     assert(SvPOK(PL_regex_pad[0]));
4210     if (SvCUR(PL_regex_pad[0])) {
4211         /* Pop off the "packed" IV from the end.  */
4212         SV *const repointer_list = PL_regex_pad[0];
4213         const char *p = SvEND(repointer_list) - sizeof(IV);
4214         const IV offset = *((IV*)p);
4215
4216         assert(SvCUR(repointer_list) % sizeof(IV) == 0);
4217
4218         SvEND_set(repointer_list, p);
4219
4220         pmop->op_pmoffset = offset;
4221         /* This slot should be free, so assert this:  */
4222         assert(PL_regex_pad[offset] == &PL_sv_undef);
4223     } else {
4224         SV * const repointer = &PL_sv_undef;
4225         av_push(PL_regex_padav, repointer);
4226         pmop->op_pmoffset = av_len(PL_regex_padav);
4227         PL_regex_pad = AvARRAY(PL_regex_padav);
4228     }
4229 #endif
4230
4231     return CHECKOP(type, pmop);
4232 }
4233
4234 /* Given some sort of match op o, and an expression expr containing a
4235  * pattern, either compile expr into a regex and attach it to o (if it's
4236  * constant), or convert expr into a runtime regcomp op sequence (if it's
4237  * not)
4238  *
4239  * isreg indicates that the pattern is part of a regex construct, eg
4240  * $x =~ /pattern/ or split /pattern/, as opposed to $x =~ $pattern or
4241  * split "pattern", which aren't. In the former case, expr will be a list
4242  * if the pattern contains more than one term (eg /a$b/) or if it contains
4243  * a replacement, ie s/// or tr///.
4244  *
4245  * When the pattern has been compiled within a new anon CV (for
4246  * qr/(?{...})/ ), then floor indicates the savestack level just before
4247  * the new sub was created
4248  */
4249
4250 OP *
4251 Perl_pmruntime(pTHX_ OP *o, OP *expr, bool isreg, I32 floor)
4252 {
4253     dVAR;
4254     PMOP *pm;
4255     LOGOP *rcop;
4256     I32 repl_has_vars = 0;
4257     OP* repl = NULL;
4258     bool is_trans = (o->op_type == OP_TRANS || o->op_type == OP_TRANSR);
4259     bool is_compiletime;
4260     bool has_code;
4261
4262     PERL_ARGS_ASSERT_PMRUNTIME;
4263
4264     /* for s/// and tr///, last element in list is the replacement; pop it */
4265
4266     if (is_trans || o->op_type == OP_SUBST) {
4267         OP* kid;
4268         repl = cLISTOPx(expr)->op_last;
4269         kid = cLISTOPx(expr)->op_first;
4270         while (kid->op_sibling != repl)
4271             kid = kid->op_sibling;
4272         kid->op_sibling = NULL;
4273         cLISTOPx(expr)->op_last = kid;
4274     }
4275
4276     /* for TRANS, convert LIST/PUSH/CONST into CONST, and pass to pmtrans() */
4277
4278     if (is_trans) {
4279         OP* const oe = expr;
4280         assert(expr->op_type == OP_LIST);
4281         assert(cLISTOPx(expr)->op_first->op_type == OP_PUSHMARK);
4282         assert(cLISTOPx(expr)->op_first->op_sibling == cLISTOPx(expr)->op_last);
4283         expr = cLISTOPx(oe)->op_last;
4284         cLISTOPx(oe)->op_first->op_sibling = NULL;
4285         cLISTOPx(oe)->op_last = NULL;
4286         op_free(oe);
4287
4288         return pmtrans(o, expr, repl);
4289     }
4290
4291     /* find whether we have any runtime or code elements;
4292      * at the same time, temporarily set the op_next of each DO block;
4293      * then when we LINKLIST, this will cause the DO blocks to be excluded
4294      * from the op_next chain (and from having LINKLIST recursively
4295      * applied to them). We fix up the DOs specially later */
4296
4297     is_compiletime = 1;
4298     has_code = 0;
4299     if (expr->op_type == OP_LIST) {
4300         OP *o;
4301         for (o = cLISTOPx(expr)->op_first; o; o = o->op_sibling) {
4302             if (o->op_type == OP_NULL && (o->op_flags & OPf_SPECIAL)) {
4303                 has_code = 1;
4304                 assert(!o->op_next && o->op_sibling);
4305                 o->op_next = o->op_sibling;
4306             }
4307             else if (o->op_type != OP_CONST && o->op_type != OP_PUSHMARK)
4308                 is_compiletime = 0;
4309         }
4310     }
4311     else if (expr->op_type != OP_CONST)
4312         is_compiletime = 0;
4313
4314     LINKLIST(expr);
4315
4316     /* fix up DO blocks; treat each one as a separate little sub */
4317
4318     if (expr->op_type == OP_LIST) {
4319         OP *o;
4320         for (o = cLISTOPx(expr)->op_first; o; o = o->op_sibling) {
4321             if (!(o->op_type == OP_NULL && (o->op_flags & OPf_SPECIAL)))
4322                 continue;
4323             o->op_next = NULL; /* undo temporary hack from above */
4324             scalar(o);
4325             LINKLIST(o);
4326             if (cLISTOPo->op_first->op_type == OP_LEAVE) {
4327                 LISTOP *leave = cLISTOPx(cLISTOPo->op_first);
4328                 /* skip ENTER */
4329                 assert(leave->op_first->op_type == OP_ENTER);
4330                 assert(leave->op_first->op_sibling);
4331                 o->op_next = leave->op_first->op_sibling;
4332                 /* skip LEAVE */
4333                 assert(leave->op_flags & OPf_KIDS);
4334                 assert(leave->op_last->op_next = (OP*)leave);
4335                 leave->op_next = NULL; /* stop on last op */
4336                 op_null((OP*)leave);
4337             }
4338             else {
4339                 /* skip SCOPE */
4340                 OP *scope = cLISTOPo->op_first;
4341                 assert(scope->op_type == OP_SCOPE);
4342                 assert(scope->op_flags & OPf_KIDS);
4343                 scope->op_next = NULL; /* stop on last op */
4344                 op_null(scope);
4345             }
4346             /* have to peep the DOs individually as we've removed it from
4347              * the op_next chain */
4348             CALL_PEEP(o);
4349             if (is_compiletime)
4350                 /* runtime finalizes as part of finalizing whole tree */
4351                 finalize_optree(o);
4352         }
4353     }
4354
4355     PL_hints |= HINT_BLOCK_SCOPE;
4356     pm = (PMOP*)o;
4357     assert(floor==0 || (pm->op_pmflags & PMf_HAS_CV));
4358
4359     if (is_compiletime) {
4360         U32 rx_flags = pm->op_pmflags & RXf_PMf_COMPILETIME;
4361         regexp_engine const *eng = current_re_engine();
4362
4363         if (o->op_flags & OPf_SPECIAL)
4364             rx_flags |= RXf_SPLIT;
4365
4366         if (!has_code || !eng->op_comp) {
4367             /* compile-time simple constant pattern */
4368
4369             if ((pm->op_pmflags & PMf_HAS_CV) && !has_code) {
4370                 /* whoops! we guessed that a qr// had a code block, but we
4371                  * were wrong (e.g. /[(?{}]/ ). Throw away the PL_compcv
4372                  * that isn't required now. Note that we have to be pretty
4373                  * confident that nothing used that CV's pad while the
4374                  * regex was parsed */
4375                 assert(AvFILLp(PL_comppad) == 0); /* just @_ */
4376                 LEAVE_SCOPE(floor);
4377                 pm->op_pmflags &= ~PMf_HAS_CV;
4378             }
4379
4380             PM_SETRE(pm,
4381                 eng->op_comp
4382                     ? eng->op_comp(aTHX_ NULL, 0, expr, eng, NULL, NULL,
4383                                         rx_flags, pm->op_pmflags)
4384                     : Perl_re_op_compile(aTHX_ NULL, 0, expr, eng, NULL, NULL,
4385                                         rx_flags, pm->op_pmflags)
4386             );
4387 #ifdef PERL_MAD
4388             op_getmad(expr,(OP*)pm,'e');
4389 #else
4390             op_free(expr);
4391 #endif
4392         }
4393         else {
4394             /* compile-time pattern that includes literal code blocks */
4395             REGEXP* re = eng->op_comp(aTHX_ NULL, 0, expr, eng, NULL, NULL,
4396                         rx_flags,
4397                         (pm->op_pmflags |
4398                             ((PL_hints & HINT_RE_EVAL) ? PMf_USE_RE_EVAL : 0))
4399                     );
4400             PM_SETRE(pm, re);
4401             if (pm->op_pmflags & PMf_HAS_CV) {
4402                 CV *cv;
4403                 /* this QR op (and the anon sub we embed it in) is never
4404                  * actually executed. It's just a placeholder where we can
4405                  * squirrel away expr in op_code_list without the peephole
4406                  * optimiser etc processing it for a second time */
4407                 OP *qr = newPMOP(OP_QR, 0);
4408                 ((PMOP*)qr)->op_code_list = expr;
4409
4410                 /* handle the implicit sub{} wrapped round the qr/(?{..})/ */
4411                 SvREFCNT_inc_simple_void(PL_compcv);
4412                 cv = newATTRSUB(floor, 0, NULL, NULL, qr);
4413                 ((struct regexp *)SvANY(re))->qr_anoncv = cv;
4414
4415                 /* attach the anon CV to the pad so that
4416                  * pad_fixup_inner_anons() can find it */
4417                 (void)pad_add_anon(cv, o->op_type);
4418                 SvREFCNT_inc_simple_void(cv);
4419             }
4420             else {
4421                 pm->op_code_list = expr;
4422             }
4423         }
4424     }
4425     else {
4426         /* runtime pattern: build chain of regcomp etc ops */
4427         bool reglist;
4428         PADOFFSET cv_targ = 0;
4429
4430         reglist = isreg && expr->op_type == OP_LIST;
4431         if (reglist)
4432             op_null(expr);
4433
4434         if (has_code) {
4435             pm->op_code_list = expr;
4436             /* don't free op_code_list; its ops are embedded elsewhere too */
4437             pm->op_pmflags |= PMf_CODELIST_PRIVATE;
4438         }
4439
4440         /* the OP_REGCMAYBE is a placeholder in the non-threaded case
4441          * to allow its op_next to be pointed past the regcomp and
4442          * preceding stacking ops;
4443          * OP_REGCRESET is there to reset taint before executing the
4444          * stacking ops */
4445         if (pm->op_pmflags & PMf_KEEP || PL_tainting)
4446             expr = newUNOP((PL_tainting ? OP_REGCRESET : OP_REGCMAYBE),0,expr);
4447
4448         if (pm->op_pmflags & PMf_HAS_CV) {
4449             /* we have a runtime qr with literal code. This means
4450              * that the qr// has been wrapped in a new CV, which
4451              * means that runtime consts, vars etc will have been compiled
4452              * against a new pad. So... we need to execute those ops
4453              * within the environment of the new CV. So wrap them in a call
4454              * to a new anon sub. i.e. for
4455              *
4456              *     qr/a$b(?{...})/,
4457              *
4458              * we build an anon sub that looks like
4459              *
4460              *     sub { "a", $b, '(?{...})' }
4461              *
4462              * and call it, passing the returned list to regcomp.
4463              * Or to put it another way, the list of ops that get executed
4464              * are:
4465              *
4466              *     normal              PMf_HAS_CV
4467              *     ------              -------------------
4468              *                         pushmark (for regcomp)
4469              *                         pushmark (for entersub)
4470              *                         pushmark (for refgen)
4471              *                         anoncode
4472              *                         refgen
4473              *                         entersub
4474              *     regcreset                  regcreset
4475              *     pushmark                   pushmark
4476              *     const("a")                 const("a")
4477              *     gvsv(b)                    gvsv(b)
4478              *     const("(?{...})")          const("(?{...})")
4479              *                                leavesub
4480              *     regcomp             regcomp
4481              */
4482
4483             SvREFCNT_inc_simple_void(PL_compcv);
4484             /* these lines are just an unrolled newANONATTRSUB */
4485             expr = newSVOP(OP_ANONCODE, 0,
4486                     MUTABLE_SV(newATTRSUB(floor, 0, NULL, NULL, expr)));
4487             cv_targ = expr->op_targ;
4488             expr = newUNOP(OP_REFGEN, 0, expr);
4489
4490             expr = list(force_list(newUNOP(OP_ENTERSUB, 0, scalar(expr))));
4491         }
4492
4493         NewOp(1101, rcop, 1, LOGOP);
4494         rcop->op_type = OP_REGCOMP;
4495         rcop->op_ppaddr = PL_ppaddr[OP_REGCOMP];
4496         rcop->op_first = scalar(expr);
4497         rcop->op_flags |= OPf_KIDS
4498                             | ((PL_hints & HINT_RE_EVAL) ? OPf_SPECIAL : 0)
4499                             | (reglist ? OPf_STACKED : 0);
4500         rcop->op_private = 0;
4501         rcop->op_other = o;
4502         rcop->op_targ = cv_targ;
4503
4504         /* /$x/ may cause an eval, since $x might be qr/(?{..})/  */
4505         if (PL_hints & HINT_RE_EVAL) PL_cv_has_eval = 1;
4506
4507         /* establish postfix order */
4508         if (expr->op_type == OP_REGCRESET || expr->op_type == OP_REGCMAYBE) {
4509             LINKLIST(expr);
4510             rcop->op_next = expr;
4511             ((UNOP*)expr)->op_first->op_next = (OP*)rcop;
4512         }
4513         else {
4514             rcop->op_next = LINKLIST(expr);
4515             expr->op_next = (OP*)rcop;
4516         }
4517
4518         op_prepend_elem(o->op_type, scalar((OP*)rcop), o);
4519     }
4520
4521     if (repl) {
4522         OP *curop;
4523         if (pm->op_pmflags & PMf_EVAL) {
4524             curop = NULL;
4525             if (CopLINE(PL_curcop) < (line_t)PL_parser->multi_end)
4526                 CopLINE_set(PL_curcop, (line_t)PL_parser->multi_end);
4527         }
4528         else if (repl->op_type == OP_CONST)
4529             curop = repl;
4530         else {
4531             OP *lastop = NULL;
4532             for (curop = LINKLIST(repl); curop!=repl; curop = LINKLIST(curop)) {
4533                 if (curop->op_type == OP_SCOPE
4534                         || curop->op_type == OP_LEAVE
4535                         || (PL_opargs[curop->op_type] & OA_DANGEROUS)) {
4536                     if (curop->op_type == OP_GV) {
4537                         GV * const gv = cGVOPx_gv(curop);
4538                         repl_has_vars = 1;
4539                         if (strchr("&`'123456789+-\016\022", *GvENAME(gv)))
4540                             break;
4541                     }
4542                     else if (curop->op_type == OP_RV2CV)
4543                         break;
4544                     else if (curop->op_type == OP_RV2SV ||
4545                              curop->op_type == OP_RV2AV ||
4546                              curop->op_type == OP_RV2HV ||
4547                              curop->op_type == OP_RV2GV) {
4548                         if (lastop && lastop->op_type != OP_GV) /*funny deref?*/
4549                             break;
4550                     }
4551                     else if (curop->op_type == OP_PADSV ||
4552                              curop->op_type == OP_PADAV ||
4553                              curop->op_type == OP_PADHV ||
4554                              curop->op_type == OP_PADANY)
4555                     {
4556                         repl_has_vars = 1;
4557                     }
4558                     else if (curop->op_type == OP_PUSHRE)
4559                         NOOP; /* Okay here, dangerous in newASSIGNOP */
4560                     else
4561                         break;
4562                 }
4563                 lastop = curop;
4564             }
4565         }
4566         if (curop == repl
4567             && !(repl_has_vars
4568                  && (!PM_GETRE(pm)
4569                      || RX_EXTFLAGS(PM_GETRE(pm)) & RXf_EVAL_SEEN)))
4570         {
4571             pm->op_pmflags |= PMf_CONST;        /* const for long enough */
4572             op_prepend_elem(o->op_type, scalar(repl), o);
4573         }
4574         else {
4575             if (curop == repl && !PM_GETRE(pm)) { /* Has variables. */
4576                 pm->op_pmflags |= PMf_MAYBE_CONST;
4577             }
4578             NewOp(1101, rcop, 1, LOGOP);
4579             rcop->op_type = OP_SUBSTCONT;
4580             rcop->op_ppaddr = PL_ppaddr[OP_SUBSTCONT];
4581             rcop->op_first = scalar(repl);
4582             rcop->op_flags |= OPf_KIDS;
4583             rcop->op_private = 1;
4584             rcop->op_other = o;
4585
4586             /* establish postfix order */
4587             rcop->op_next = LINKLIST(repl);
4588             repl->op_next = (OP*)rcop;
4589
4590             pm->op_pmreplrootu.op_pmreplroot = scalar((OP*)rcop);
4591             assert(!(pm->op_pmflags & PMf_ONCE));
4592             pm->op_pmstashstartu.op_pmreplstart = LINKLIST(rcop);
4593             rcop->op_next = 0;
4594         }
4595     }
4596
4597     return (OP*)pm;
4598 }
4599
4600 /*
4601 =for apidoc Am|OP *|newSVOP|I32 type|I32 flags|SV *sv
4602
4603 Constructs, checks, and returns an op of any type that involves an
4604 embedded SV.  I<type> is the opcode.  I<flags> gives the eight bits
4605 of C<op_flags>.  I<sv> gives the SV to embed in the op; this function
4606 takes ownership of one reference to it.
4607
4608 =cut
4609 */
4610
4611 OP *
4612 Perl_newSVOP(pTHX_ I32 type, I32 flags, SV *sv)
4613 {
4614     dVAR;
4615     SVOP *svop;
4616
4617     PERL_ARGS_ASSERT_NEWSVOP;
4618
4619     assert((PL_opargs[type] & OA_CLASS_MASK) == OA_SVOP
4620         || (PL_opargs[type] & OA_CLASS_MASK) == OA_PVOP_OR_SVOP
4621         || (PL_opargs[type] & OA_CLASS_MASK) == OA_FILESTATOP);
4622
4623     NewOp(1101, svop, 1, SVOP);
4624     svop->op_type = (OPCODE)type;
4625     svop->op_ppaddr = PL_ppaddr[type];
4626     svop->op_sv = sv;
4627     svop->op_next = (OP*)svop;
4628     svop->op_flags = (U8)flags;
4629     if (PL_opargs[type] & OA_RETSCALAR)
4630         scalar((OP*)svop);
4631     if (PL_opargs[type] & OA_TARGET)
4632         svop->op_targ = pad_alloc(type, SVs_PADTMP);
4633     return CHECKOP(type, svop);
4634 }
4635
4636 #ifdef USE_ITHREADS
4637
4638 /*
4639 =for apidoc Am|OP *|newPADOP|I32 type|I32 flags|SV *sv
4640
4641 Constructs, checks, and returns an op of any type that involves a
4642 reference to a pad element.  I<type> is the opcode.  I<flags> gives the
4643 eight bits of C<op_flags>.  A pad slot is automatically allocated, and
4644 is populated with I<sv>; this function takes ownership of one reference
4645 to it.
4646
4647 This function only exists if Perl has been compiled to use ithreads.
4648
4649 =cut
4650 */
4651
4652 OP *
4653 Perl_newPADOP(pTHX_ I32 type, I32 flags, SV *sv)
4654 {
4655     dVAR;
4656     PADOP *padop;
4657
4658     PERL_ARGS_ASSERT_NEWPADOP;
4659
4660     assert((PL_opargs[type] & OA_CLASS_MASK) == OA_SVOP
4661         || (PL_opargs[type] & OA_CLASS_MASK) == OA_PVOP_OR_SVOP
4662         || (PL_opargs[type] & OA_CLASS_MASK) == OA_FILESTATOP);
4663
4664     NewOp(1101, padop, 1, PADOP);
4665     padop->op_type = (OPCODE)type;
4666     padop->op_ppaddr = PL_ppaddr[type];
4667     padop->op_padix = pad_alloc(type, SVs_PADTMP);
4668     SvREFCNT_dec(PAD_SVl(padop->op_padix));
4669     PAD_SETSV(padop->op_padix, sv);
4670     assert(sv);
4671     SvPADTMP_on(sv);
4672     padop->op_next = (OP*)padop;
4673     padop->op_flags = (U8)flags;
4674     if (PL_opargs[type] & OA_RETSCALAR)
4675         scalar((OP*)padop);
4676     if (PL_opargs[type] & OA_TARGET)
4677         padop->op_targ = pad_alloc(type, SVs_PADTMP);
4678     return CHECKOP(type, padop);
4679 }
4680
4681 #endif /* !USE_ITHREADS */
4682
4683 /*
4684 =for apidoc Am|OP *|newGVOP|I32 type|I32 flags|GV *gv
4685
4686 Constructs, checks, and returns an op of any type that involves an
4687 embedded reference to a GV.  I<type> is the opcode.  I<flags> gives the
4688 eight bits of C<op_flags>.  I<gv> identifies the GV that the op should
4689 reference; calling this function does not transfer ownership of any
4690 reference to it.
4691
4692 =cut
4693 */
4694
4695 OP *
4696 Perl_newGVOP(pTHX_ I32 type, I32 flags, GV *gv)
4697 {
4698     dVAR;
4699
4700     PERL_ARGS_ASSERT_NEWGVOP;
4701
4702 #ifdef USE_ITHREADS
4703     GvIN_PAD_on(gv);
4704     return newPADOP(type, flags, SvREFCNT_inc_simple_NN(gv));
4705 #else
4706     return newSVOP(type, flags, SvREFCNT_inc_simple_NN(gv));
4707 #endif
4708 }
4709
4710 /*
4711 =for apidoc Am|OP *|newPVOP|I32 type|I32 flags|char *pv
4712
4713 Constructs, checks, and returns an op of any type that involves an
4714 embedded C-level pointer (PV).  I<type> is the opcode.  I<flags> gives
4715 the eight bits of C<op_flags>.  I<pv> supplies the C-level pointer, which
4716 must have been allocated using L</PerlMemShared_malloc>; the memory will
4717 be freed when the op is destroyed.
4718
4719 =cut
4720 */
4721
4722 OP *
4723 Perl_newPVOP(pTHX_ I32 type, I32 flags, char *pv)
4724 {
4725     dVAR;
4726     const bool utf8 = cBOOL(flags & SVf_UTF8);
4727     PVOP *pvop;
4728
4729     flags &= ~SVf_UTF8;
4730
4731     assert((PL_opargs[type] & OA_CLASS_MASK) == OA_PVOP_OR_SVOP
4732         || type == OP_RUNCV
4733         || (PL_opargs[type] & OA_CLASS_MASK) == OA_LOOPEXOP);
4734
4735     NewOp(1101, pvop, 1, PVOP);
4736     pvop->op_type = (OPCODE)type;
4737     pvop->op_ppaddr = PL_ppaddr[type];
4738     pvop->op_pv = pv;
4739     pvop->op_next = (OP*)pvop;
4740     pvop->op_flags = (U8)flags;
4741     pvop->op_private = utf8 ? OPpPV_IS_UTF8 : 0;
4742     if (PL_opargs[type] & OA_RETSCALAR)
4743         scalar((OP*)pvop);
4744     if (PL_opargs[type] & OA_TARGET)
4745         pvop->op_targ = pad_alloc(type, SVs_PADTMP);
4746     return CHECKOP(type, pvop);
4747 }
4748
4749 #ifdef PERL_MAD
4750 OP*
4751 #else
4752 void
4753 #endif
4754 Perl_package(pTHX_ OP *o)
4755 {
4756     dVAR;
4757     SV *const sv = cSVOPo->op_sv;
4758 #ifdef PERL_MAD
4759     OP *pegop;
4760 #endif
4761
4762     PERL_ARGS_ASSERT_PACKAGE;
4763
4764     SAVEGENERICSV(PL_curstash);
4765     save_item(PL_curstname);
4766
4767     PL_curstash = (HV *)SvREFCNT_inc(gv_stashsv(sv, GV_ADD));
4768
4769     sv_setsv(PL_curstname, sv);
4770
4771     PL_hints |= HINT_BLOCK_SCOPE;
4772     PL_parser->copline = NOLINE;
4773     PL_parser->expect = XSTATE;
4774
4775 #ifndef PERL_MAD
4776     op_free(o);
4777 #else
4778     if (!PL_madskills) {
4779         op_free(o);
4780         return NULL;
4781     }
4782
4783     pegop = newOP(OP_NULL,0);
4784     op_getmad(o,pegop,'P');
4785     return pegop;
4786 #endif
4787 }
4788
4789 void
4790 Perl_package_version( pTHX_ OP *v )
4791 {
4792     dVAR;
4793     U32 savehints = PL_hints;
4794     PERL_ARGS_ASSERT_PACKAGE_VERSION;
4795     PL_hints &= ~HINT_STRICT_VARS;
4796     sv_setsv( GvSV(gv_fetchpvs("VERSION", GV_ADDMULTI, SVt_PV)), cSVOPx(v)->op_sv );
4797     PL_hints = savehints;
4798     op_free(v);
4799 }
4800
4801 #ifdef PERL_MAD
4802 OP*
4803 #else
4804 void
4805 #endif
4806 Perl_utilize(pTHX_ int aver, I32 floor, OP *version, OP *idop, OP *arg)
4807 {
4808     dVAR;
4809     OP *pack;
4810     OP *imop;
4811     OP *veop;
4812 #ifdef PERL_MAD
4813     OP *pegop = PL_madskills ? newOP(OP_NULL,0) : NULL;
4814 #endif
4815     SV *use_version = NULL;
4816
4817     PERL_ARGS_ASSERT_UTILIZE;
4818
4819     if (idop->op_type != OP_CONST)
4820         Perl_croak(aTHX_ "Module name must be constant");
4821
4822     if (PL_madskills)
4823         op_getmad(idop,pegop,'U');
4824
4825     veop = NULL;
4826
4827     if (version) {
4828         SV * const vesv = ((SVOP*)version)->op_sv;
4829
4830         if (PL_madskills)
4831             op_getmad(version,pegop,'V');
4832         if (!arg && !SvNIOKp(vesv)) {
4833             arg = version;
4834         }
4835         else {
4836             OP *pack;
4837             SV *meth;
4838
4839             if (version->op_type != OP_CONST || !SvNIOKp(vesv))
4840                 Perl_croak(aTHX_ "Version number must be a constant number");
4841
4842             /* Make copy of idop so we don't free it twice */
4843             pack = newSVOP(OP_CONST, 0, newSVsv(((SVOP*)idop)->op_sv));
4844
4845             /* Fake up a method call to VERSION */
4846             meth = newSVpvs_share("VERSION");
4847             veop = convert(OP_ENTERSUB, OPf_STACKED|OPf_SPECIAL,
4848                             op_append_elem(OP_LIST,
4849                                         op_prepend_elem(OP_LIST, pack, list(version)),
4850                                         newSVOP(OP_METHOD_NAMED, 0, meth)));
4851         }
4852     }
4853
4854     /* Fake up an import/unimport */
4855     if (arg && arg->op_type == OP_STUB) {
4856         if (PL_madskills)
4857             op_getmad(arg,pegop,'S');
4858         imop = arg;             /* no import on explicit () */
4859     }
4860     else if (SvNIOKp(((SVOP*)idop)->op_sv)) {
4861         imop = NULL;            /* use 5.0; */
4862         if (aver)
4863             use_version = ((SVOP*)idop)->op_sv;
4864         else
4865             idop->op_private |= OPpCONST_NOVER;
4866     }
4867     else {
4868         SV *meth;
4869
4870         if (PL_madskills)
4871             op_getmad(arg,pegop,'A');
4872
4873         /* Make copy of idop so we don't free it twice */
4874         pack = newSVOP(OP_CONST, 0, newSVsv(((SVOP*)idop)->op_sv));
4875
4876         /* Fake up a method call to import/unimport */
4877         meth = aver
4878             ? newSVpvs_share("import") : newSVpvs_share("unimport");
4879         imop = convert(OP_ENTERSUB, OPf_STACKED|OPf_SPECIAL,
4880                        op_append_elem(OP_LIST,
4881                                    op_prepend_elem(OP_LIST, pack, list(arg)),
4882                                    newSVOP(OP_METHOD_NAMED, 0, meth)));
4883     }
4884
4885     /* Fake up the BEGIN {}, which does its thing immediately. */
4886     newATTRSUB(floor,
4887      &nbs