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