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