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
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.
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
19 * [p.23 of _The Lord of the Rings_, I/i: "A Long-Expected Party"]
22 /* This file contains the functions that create, manipulate and optimize
23 * the OP structures that hold a compiled perl program.
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
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):
38 * newBINOP(OP_ADD, flags,
40 * newBINOP(OP_MULTIPLY, flags, newSVREF($b), newSVREF($c))
43 * Note that during the build of miniperl, a temporary copy of this file
44 * is made, called opmini.c.
48 Perl's compiler is essentially a 3-pass compiler with interleaved phases:
52 An execution-order pass
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
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.
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.
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.
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.
104 #include "keywords.h"
108 #define CALL_PEEP(o) PL_peepp(aTHX_ o)
109 #define CALL_RPEEP(o) PL_rpeepp(aTHX_ o)
110 #define CALL_OPFREEHOOK(o) if (PL_opfreehook) PL_opfreehook(aTHX_ o)
112 #if defined(PL_OP_SLAB_ALLOC)
114 #ifdef PERL_DEBUG_READONLY_OPS
115 # define PERL_SLAB_SIZE 4096
116 # include <sys/mman.h>
119 #ifndef PERL_SLAB_SIZE
120 #define PERL_SLAB_SIZE 2048
124 Perl_Slab_Alloc(pTHX_ size_t sz)
128 * To make incrementing use count easy PL_OpSlab is an I32 *
129 * To make inserting the link to slab PL_OpPtr is I32 **
130 * So compute size in units of sizeof(I32 *) as that is how Pl_OpPtr increments
131 * Add an overhead for pointer to slab and round up as a number of pointers
133 sz = (sz + 2*sizeof(I32 *) -1)/sizeof(I32 *);
134 if ((PL_OpSpace -= sz) < 0) {
135 #ifdef PERL_DEBUG_READONLY_OPS
136 /* We need to allocate chunk by chunk so that we can control the VM
138 PL_OpPtr = (I32**) mmap(0, PERL_SLAB_SIZE*sizeof(I32*), PROT_READ|PROT_WRITE,
139 MAP_ANON|MAP_PRIVATE, -1, 0);
141 DEBUG_m(PerlIO_printf(Perl_debug_log, "mapped %lu at %p\n",
142 (unsigned long) PERL_SLAB_SIZE*sizeof(I32*),
144 if(PL_OpPtr == MAP_FAILED) {
145 perror("mmap failed");
150 PL_OpPtr = (I32 **) PerlMemShared_calloc(PERL_SLAB_SIZE,sizeof(I32*));
155 /* We reserve the 0'th I32 sized chunk as a use count */
156 PL_OpSlab = (I32 *) PL_OpPtr;
157 /* Reduce size by the use count word, and by the size we need.
158 * Latter is to mimic the '-=' in the if() above
160 PL_OpSpace = PERL_SLAB_SIZE - (sizeof(I32)+sizeof(I32 **)-1)/sizeof(I32 **) - sz;
161 /* Allocation pointer starts at the top.
162 Theory: because we build leaves before trunk allocating at end
163 means that at run time access is cache friendly upward
165 PL_OpPtr += PERL_SLAB_SIZE;
167 #ifdef PERL_DEBUG_READONLY_OPS
168 /* We remember this slab. */
169 /* This implementation isn't efficient, but it is simple. */
170 PL_slabs = (I32**) realloc(PL_slabs, sizeof(I32**) * (PL_slab_count + 1));
171 PL_slabs[PL_slab_count++] = PL_OpSlab;
172 DEBUG_m(PerlIO_printf(Perl_debug_log, "Allocate %p\n", PL_OpSlab));
175 assert( PL_OpSpace >= 0 );
176 /* Move the allocation pointer down */
178 assert( PL_OpPtr > (I32 **) PL_OpSlab );
179 *PL_OpPtr = PL_OpSlab; /* Note which slab it belongs to */
180 (*PL_OpSlab)++; /* Increment use count of slab */
181 assert( PL_OpPtr+sz <= ((I32 **) PL_OpSlab + PERL_SLAB_SIZE) );
182 assert( *PL_OpSlab > 0 );
183 return (void *)(PL_OpPtr + 1);
186 #ifdef PERL_DEBUG_READONLY_OPS
188 Perl_pending_Slabs_to_ro(pTHX) {
189 /* Turn all the allocated op slabs read only. */
190 U32 count = PL_slab_count;
191 I32 **const slabs = PL_slabs;
193 /* Reset the array of pending OP slabs, as we're about to turn this lot
194 read only. Also, do it ahead of the loop in case the warn triggers,
195 and a warn handler has an eval */
200 /* Force a new slab for any further allocation. */
204 void *const start = slabs[count];
205 const size_t size = PERL_SLAB_SIZE* sizeof(I32*);
206 if(mprotect(start, size, PROT_READ)) {
207 Perl_warn(aTHX_ "mprotect for %p %lu failed with %d",
208 start, (unsigned long) size, errno);
216 S_Slab_to_rw(pTHX_ void *op)
218 I32 * const * const ptr = (I32 **) op;
219 I32 * const slab = ptr[-1];
221 PERL_ARGS_ASSERT_SLAB_TO_RW;
223 assert( ptr-1 > (I32 **) slab );
224 assert( ptr < ( (I32 **) slab + PERL_SLAB_SIZE) );
226 if(mprotect(slab, PERL_SLAB_SIZE*sizeof(I32*), PROT_READ|PROT_WRITE)) {
227 Perl_warn(aTHX_ "mprotect RW for %p %lu failed with %d",
228 slab, (unsigned long) PERL_SLAB_SIZE*sizeof(I32*), errno);
233 Perl_op_refcnt_inc(pTHX_ OP *o)
244 Perl_op_refcnt_dec(pTHX_ OP *o)
246 PERL_ARGS_ASSERT_OP_REFCNT_DEC;
251 # define Slab_to_rw(op)
255 Perl_Slab_Free(pTHX_ void *op)
257 I32 * const * const ptr = (I32 **) op;
258 I32 * const slab = ptr[-1];
259 PERL_ARGS_ASSERT_SLAB_FREE;
260 assert( ptr-1 > (I32 **) slab );
261 assert( ptr < ( (I32 **) slab + PERL_SLAB_SIZE) );
264 if (--(*slab) == 0) {
266 # define PerlMemShared PerlMem
269 #ifdef PERL_DEBUG_READONLY_OPS
270 U32 count = PL_slab_count;
271 /* Need to remove this slab from our list of slabs */
274 if (PL_slabs[count] == slab) {
276 /* Found it. Move the entry at the end to overwrite it. */
277 DEBUG_m(PerlIO_printf(Perl_debug_log,
278 "Deallocate %p by moving %p from %lu to %lu\n",
280 PL_slabs[PL_slab_count - 1],
281 PL_slab_count, count));
282 PL_slabs[count] = PL_slabs[--PL_slab_count];
283 /* Could realloc smaller at this point, but probably not
285 if(munmap(slab, PERL_SLAB_SIZE*sizeof(I32*))) {
286 perror("munmap failed");
294 PerlMemShared_free(slab);
296 if (slab == PL_OpSlab) {
303 * In the following definition, the ", (OP*)0" is just to make the compiler
304 * think the expression is of the right type: croak actually does a Siglongjmp.
306 #define CHECKOP(type,o) \
307 ((PL_op_mask && PL_op_mask[type]) \
308 ? ( op_free((OP*)o), \
309 Perl_croak(aTHX_ "'%s' trapped by operation mask", PL_op_desc[type]), \
311 : PL_check[type](aTHX_ (OP*)o))
313 #define RETURN_UNLIMITED_NUMBER (PERL_INT_MAX / 2)
315 #define CHANGE_TYPE(o,type) \
317 o->op_type = (OPCODE)type; \
318 o->op_ppaddr = PL_ppaddr[type]; \
322 S_gv_ename(pTHX_ GV *gv)
324 SV* const tmpsv = sv_newmortal();
326 PERL_ARGS_ASSERT_GV_ENAME;
328 gv_efullname3(tmpsv, gv, NULL);
333 S_no_fh_allowed(pTHX_ OP *o)
335 PERL_ARGS_ASSERT_NO_FH_ALLOWED;
337 yyerror(Perl_form(aTHX_ "Missing comma after first argument to %s function",
343 S_too_few_arguments_sv(pTHX_ OP *o, SV *namesv, U32 flags)
345 PERL_ARGS_ASSERT_TOO_FEW_ARGUMENTS_SV;
346 yyerror_pv(Perl_form(aTHX_ "Not enough arguments for %"SVf, namesv),
347 SvUTF8(namesv) | flags);
352 S_too_few_arguments_pv(pTHX_ OP *o, const char* name, U32 flags)
354 PERL_ARGS_ASSERT_TOO_FEW_ARGUMENTS_PV;
355 yyerror_pv(Perl_form(aTHX_ "Not enough arguments for %s", name), flags);
360 S_too_many_arguments_pv(pTHX_ OP *o, const char *name, U32 flags)
362 PERL_ARGS_ASSERT_TOO_MANY_ARGUMENTS_PV;
364 yyerror_pv(Perl_form(aTHX_ "Too many arguments for %s", name), flags);
369 S_too_many_arguments_sv(pTHX_ OP *o, SV *namesv, U32 flags)
371 PERL_ARGS_ASSERT_TOO_MANY_ARGUMENTS_SV;
373 yyerror_pv(Perl_form(aTHX_ "Too many arguments for %"SVf, SVfARG(namesv)),
374 SvUTF8(namesv) | flags);
379 S_bad_type_pv(pTHX_ I32 n, const char *t, const char *name, U32 flags, const OP *kid)
381 PERL_ARGS_ASSERT_BAD_TYPE_PV;
383 yyerror_pv(Perl_form(aTHX_ "Type of arg %d to %s must be %s (not %s)",
384 (int)n, name, t, OP_DESC(kid)), flags);
388 S_bad_type_sv(pTHX_ I32 n, const char *t, SV *namesv, U32 flags, const OP *kid)
390 PERL_ARGS_ASSERT_BAD_TYPE_SV;
392 yyerror_pv(Perl_form(aTHX_ "Type of arg %d to %"SVf" must be %s (not %s)",
393 (int)n, SVfARG(namesv), t, OP_DESC(kid)), SvUTF8(namesv) | flags);
397 S_no_bareword_allowed(pTHX_ OP *o)
399 PERL_ARGS_ASSERT_NO_BAREWORD_ALLOWED;
402 return; /* various ok barewords are hidden in extra OP_NULL */
403 qerror(Perl_mess(aTHX_
404 "Bareword \"%"SVf"\" not allowed while \"strict subs\" in use",
406 o->op_private &= ~OPpCONST_STRICT; /* prevent warning twice about the same OP */
409 /* "register" allocation */
412 Perl_allocmy(pTHX_ const char *const name, const STRLEN len, const U32 flags)
416 const bool is_our = (PL_parser->in_my == KEY_our);
418 PERL_ARGS_ASSERT_ALLOCMY;
420 if (flags & ~SVf_UTF8)
421 Perl_croak(aTHX_ "panic: allocmy illegal flag bits 0x%" UVxf,
424 /* Until we're using the length for real, cross check that we're being
426 assert(strlen(name) == len);
428 /* complain about "my $<special_var>" etc etc */
432 ((flags & SVf_UTF8) && isIDFIRST_utf8((U8 *)name+1)) ||
433 (name[1] == '_' && (*name == '$' || len > 2))))
435 /* name[2] is true if strlen(name) > 2 */
436 if (!(flags & SVf_UTF8 && UTF8_IS_START(name[1]))
437 && (!isPRINT(name[1]) || strchr("\t\n\r\f", name[1]))) {
438 yyerror(Perl_form(aTHX_ "Can't use global %c^%c%.*s in \"%s\"",
439 name[0], toCTRL(name[1]), (int)(len - 2), name + 2,
440 PL_parser->in_my == KEY_state ? "state" : "my"));
442 yyerror_pv(Perl_form(aTHX_ "Can't use global %.*s in \"%s\"", (int) len, name,
443 PL_parser->in_my == KEY_state ? "state" : "my"), flags & SVf_UTF8);
447 /* allocate a spare slot and store the name in that slot */
449 off = pad_add_name_pvn(name, len,
450 (is_our ? padadd_OUR :
451 PL_parser->in_my == KEY_state ? padadd_STATE : 0)
452 | ( flags & SVf_UTF8 ? SVf_UTF8 : 0 ),
453 PL_parser->in_my_stash,
455 /* $_ is always in main::, even with our */
456 ? (PL_curstash && !strEQ(name,"$_") ? PL_curstash : PL_defstash)
460 /* anon sub prototypes contains state vars should always be cloned,
461 * otherwise the state var would be shared between anon subs */
463 if (PL_parser->in_my == KEY_state && CvANON(PL_compcv))
464 CvCLONE_on(PL_compcv);
470 =for apidoc alloccopstash
472 Available only under threaded builds, this function allocates an entry in
473 C<PL_stashpad> for the stash passed to it.
480 Perl_alloccopstash(pTHX_ HV *hv)
482 PADOFFSET off = 0, o = 1;
483 bool found_slot = FALSE;
485 PERL_ARGS_ASSERT_ALLOCCOPSTASH;
487 if (PL_stashpad[PL_stashpadix] == hv) return PL_stashpadix;
489 for (; o < PL_stashpadmax; ++o) {
490 if (PL_stashpad[o] == hv) return PL_stashpadix = o;
491 if (!PL_stashpad[o] || SvTYPE(PL_stashpad[o]) != SVt_PVHV)
492 found_slot = TRUE, off = o;
495 Renew(PL_stashpad, PL_stashpadmax + 10, HV *);
496 Zero(PL_stashpad + PL_stashpadmax, 10, HV *);
497 off = PL_stashpadmax;
498 PL_stashpadmax += 10;
501 PL_stashpad[PL_stashpadix = off] = hv;
506 /* free the body of an op without examining its contents.
507 * Always use this rather than FreeOp directly */
510 S_op_destroy(pTHX_ OP *o)
512 if (o->op_latefree) {
520 # define forget_pmop(a,b) S_forget_pmop(aTHX_ a,b)
522 # define forget_pmop(a,b) S_forget_pmop(aTHX_ a)
528 Perl_op_free(pTHX_ OP *o)
535 if (o->op_latefreed) {
542 if (o->op_private & OPpREFCOUNTED) {
553 refcnt = OpREFCNT_dec(o);
556 /* Need to find and remove any pattern match ops from the list
557 we maintain for reset(). */
558 find_and_forget_pmops(o);
568 /* Call the op_free hook if it has been set. Do it now so that it's called
569 * at the right time for refcounted ops, but still before all of the kids
573 if (o->op_flags & OPf_KIDS) {
574 register OP *kid, *nextkid;
575 for (kid = cUNOPo->op_first; kid; kid = nextkid) {
576 nextkid = kid->op_sibling; /* Get before next freeing kid */
581 #ifdef PERL_DEBUG_READONLY_OPS
585 /* COP* is not cleared by op_clear() so that we may track line
586 * numbers etc even after null() */
587 if (type == OP_NEXTSTATE || type == OP_DBSTATE
588 || (type == OP_NULL /* the COP might have been null'ed */
589 && ((OPCODE)o->op_targ == OP_NEXTSTATE
590 || (OPCODE)o->op_targ == OP_DBSTATE))) {
595 type = (OPCODE)o->op_targ;
598 if (o->op_latefree) {
604 #ifdef DEBUG_LEAKING_SCALARS
611 Perl_op_clear(pTHX_ OP *o)
616 PERL_ARGS_ASSERT_OP_CLEAR;
619 mad_free(o->op_madprop);
624 switch (o->op_type) {
625 case OP_NULL: /* Was holding old type, if any. */
626 if (PL_madskills && o->op_targ != OP_NULL) {
627 o->op_type = (Optype)o->op_targ;
632 case OP_ENTEREVAL: /* Was holding hints. */
636 if (!(o->op_flags & OPf_REF)
637 || (PL_check[o->op_type] != Perl_ck_ftst))
644 GV *gv = (o->op_type == OP_GV || o->op_type == OP_GVSV)
649 /* It's possible during global destruction that the GV is freed
650 before the optree. Whilst the SvREFCNT_inc is happy to bump from
651 0 to 1 on a freed SV, the corresponding SvREFCNT_dec from 1 to 0
652 will trigger an assertion failure, because the entry to sv_clear
653 checks that the scalar is not already freed. A check of for
654 !SvIS_FREED(gv) turns out to be invalid, because during global
655 destruction the reference count can be forced down to zero
656 (with SVf_BREAK set). In which case raising to 1 and then
657 dropping to 0 triggers cleanup before it should happen. I
658 *think* that this might actually be a general, systematic,
659 weakness of the whole idea of SVf_BREAK, in that code *is*
660 allowed to raise and lower references during global destruction,
661 so any *valid* code that happens to do this during global
662 destruction might well trigger premature cleanup. */
663 bool still_valid = gv && SvREFCNT(gv);
666 SvREFCNT_inc_simple_void(gv);
668 if (cPADOPo->op_padix > 0) {
669 /* No GvIN_PAD_off(cGVOPo_gv) here, because other references
670 * may still exist on the pad */
671 pad_swipe(cPADOPo->op_padix, TRUE);
672 cPADOPo->op_padix = 0;
675 SvREFCNT_dec(cSVOPo->op_sv);
676 cSVOPo->op_sv = NULL;
679 int try_downgrade = SvREFCNT(gv) == 2;
682 gv_try_downgrade(gv);
686 case OP_METHOD_NAMED:
689 SvREFCNT_dec(cSVOPo->op_sv);
690 cSVOPo->op_sv = NULL;
693 Even if op_clear does a pad_free for the target of the op,
694 pad_free doesn't actually remove the sv that exists in the pad;
695 instead it lives on. This results in that it could be reused as
696 a target later on when the pad was reallocated.
699 pad_swipe(o->op_targ,1);
708 if (o->op_flags & (OPf_SPECIAL|OPf_STACKED|OPf_KIDS))
713 if (o->op_private & (OPpTRANS_FROM_UTF|OPpTRANS_TO_UTF)) {
715 if (cPADOPo->op_padix > 0) {
716 pad_swipe(cPADOPo->op_padix, TRUE);
717 cPADOPo->op_padix = 0;
720 SvREFCNT_dec(cSVOPo->op_sv);
721 cSVOPo->op_sv = NULL;
725 PerlMemShared_free(cPVOPo->op_pv);
726 cPVOPo->op_pv = NULL;
730 op_free(cPMOPo->op_pmreplrootu.op_pmreplroot);
734 if (cPMOPo->op_pmreplrootu.op_pmtargetoff) {
735 /* No GvIN_PAD_off here, because other references may still
736 * exist on the pad */
737 pad_swipe(cPMOPo->op_pmreplrootu.op_pmtargetoff, TRUE);
740 SvREFCNT_dec(MUTABLE_SV(cPMOPo->op_pmreplrootu.op_pmtargetgv));
746 if (!(cPMOPo->op_pmflags & PMf_CODELIST_PRIVATE))
747 op_free(cPMOPo->op_code_list);
748 cPMOPo->op_code_list = NULL;
749 forget_pmop(cPMOPo, 1);
750 cPMOPo->op_pmreplrootu.op_pmreplroot = NULL;
751 /* we use the same protection as the "SAFE" version of the PM_ macros
752 * here since sv_clean_all might release some PMOPs
753 * after PL_regex_padav has been cleared
754 * and the clearing of PL_regex_padav needs to
755 * happen before sv_clean_all
758 if(PL_regex_pad) { /* We could be in destruction */
759 const IV offset = (cPMOPo)->op_pmoffset;
760 ReREFCNT_dec(PM_GETRE(cPMOPo));
761 PL_regex_pad[offset] = &PL_sv_undef;
762 sv_catpvn_nomg(PL_regex_pad[0], (const char *)&offset,
766 ReREFCNT_dec(PM_GETRE(cPMOPo));
767 PM_SETRE(cPMOPo, NULL);
773 if (o->op_targ > 0) {
774 pad_free(o->op_targ);
780 S_cop_free(pTHX_ COP* cop)
782 PERL_ARGS_ASSERT_COP_FREE;
785 if (! specialWARN(cop->cop_warnings))
786 PerlMemShared_free(cop->cop_warnings);
787 cophh_free(CopHINTHASH_get(cop));
791 S_forget_pmop(pTHX_ PMOP *const o
797 HV * const pmstash = PmopSTASH(o);
799 PERL_ARGS_ASSERT_FORGET_PMOP;
801 if (pmstash && !SvIS_FREED(pmstash) && SvMAGICAL(pmstash)) {
802 MAGIC * const mg = mg_find((const SV *)pmstash, PERL_MAGIC_symtab);
804 PMOP **const array = (PMOP**) mg->mg_ptr;
805 U32 count = mg->mg_len / sizeof(PMOP**);
810 /* Found it. Move the entry at the end to overwrite it. */
811 array[i] = array[--count];
812 mg->mg_len = count * sizeof(PMOP**);
813 /* Could realloc smaller at this point always, but probably
814 not worth it. Probably worth free()ing if we're the
817 Safefree(mg->mg_ptr);
834 S_find_and_forget_pmops(pTHX_ OP *o)
836 PERL_ARGS_ASSERT_FIND_AND_FORGET_PMOPS;
838 if (o->op_flags & OPf_KIDS) {
839 OP *kid = cUNOPo->op_first;
841 switch (kid->op_type) {
846 forget_pmop((PMOP*)kid, 0);
848 find_and_forget_pmops(kid);
849 kid = kid->op_sibling;
855 Perl_op_null(pTHX_ OP *o)
859 PERL_ARGS_ASSERT_OP_NULL;
861 if (o->op_type == OP_NULL)
865 o->op_targ = o->op_type;
866 o->op_type = OP_NULL;
867 o->op_ppaddr = PL_ppaddr[OP_NULL];
871 Perl_op_refcnt_lock(pTHX)
879 Perl_op_refcnt_unlock(pTHX)
886 /* Contextualizers */
889 =for apidoc Am|OP *|op_contextualize|OP *o|I32 context
891 Applies a syntactic context to an op tree representing an expression.
892 I<o> is the op tree, and I<context> must be C<G_SCALAR>, C<G_ARRAY>,
893 or C<G_VOID> to specify the context to apply. The modified op tree
900 Perl_op_contextualize(pTHX_ OP *o, I32 context)
902 PERL_ARGS_ASSERT_OP_CONTEXTUALIZE;
904 case G_SCALAR: return scalar(o);
905 case G_ARRAY: return list(o);
906 case G_VOID: return scalarvoid(o);
908 Perl_croak(aTHX_ "panic: op_contextualize bad context %ld",
915 =head1 Optree Manipulation Functions
917 =for apidoc Am|OP*|op_linklist|OP *o
918 This function is the implementation of the L</LINKLIST> macro. It should
919 not be called directly.
925 Perl_op_linklist(pTHX_ OP *o)
929 PERL_ARGS_ASSERT_OP_LINKLIST;
934 /* establish postfix order */
935 first = cUNOPo->op_first;
938 o->op_next = LINKLIST(first);
941 if (kid->op_sibling) {
942 kid->op_next = LINKLIST(kid->op_sibling);
943 kid = kid->op_sibling;
957 S_scalarkids(pTHX_ OP *o)
959 if (o && o->op_flags & OPf_KIDS) {
961 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
968 S_scalarboolean(pTHX_ OP *o)
972 PERL_ARGS_ASSERT_SCALARBOOLEAN;
974 if (o->op_type == OP_SASSIGN && cBINOPo->op_first->op_type == OP_CONST
975 && !(cBINOPo->op_first->op_flags & OPf_SPECIAL)) {
976 if (ckWARN(WARN_SYNTAX)) {
977 const line_t oldline = CopLINE(PL_curcop);
979 if (PL_parser && PL_parser->copline != NOLINE)
980 CopLINE_set(PL_curcop, PL_parser->copline);
981 Perl_warner(aTHX_ packWARN(WARN_SYNTAX), "Found = in conditional, should be ==");
982 CopLINE_set(PL_curcop, oldline);
989 Perl_scalar(pTHX_ OP *o)
994 /* assumes no premature commitment */
995 if (!o || (PL_parser && PL_parser->error_count)
996 || (o->op_flags & OPf_WANT)
997 || o->op_type == OP_RETURN)
1002 o->op_flags = (o->op_flags & ~OPf_WANT) | OPf_WANT_SCALAR;
1004 switch (o->op_type) {
1006 scalar(cBINOPo->op_first);
1011 for (kid = cUNOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
1021 if (o->op_flags & OPf_KIDS) {
1022 for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling)
1028 kid = cLISTOPo->op_first;
1030 kid = kid->op_sibling;
1033 OP *sib = kid->op_sibling;
1034 if (sib && kid->op_type != OP_LEAVEWHEN)
1040 PL_curcop = &PL_compiling;
1045 kid = cLISTOPo->op_first;
1048 Perl_ck_warner(aTHX_ packWARN(WARN_VOID), "Useless use of sort in scalar context");
1055 Perl_scalarvoid(pTHX_ OP *o)
1059 const char* useless = NULL;
1060 U32 useless_is_utf8 = 0;
1064 PERL_ARGS_ASSERT_SCALARVOID;
1066 /* trailing mad null ops don't count as "there" for void processing */
1068 o->op_type != OP_NULL &&
1070 o->op_sibling->op_type == OP_NULL)
1073 for (sib = o->op_sibling;
1074 sib && sib->op_type == OP_NULL;
1075 sib = sib->op_sibling) ;
1081 if (o->op_type == OP_NEXTSTATE
1082 || o->op_type == OP_DBSTATE
1083 || (o->op_type == OP_NULL && (o->op_targ == OP_NEXTSTATE
1084 || o->op_targ == OP_DBSTATE)))
1085 PL_curcop = (COP*)o; /* for warning below */
1087 /* assumes no premature commitment */
1088 want = o->op_flags & OPf_WANT;
1089 if ((want && want != OPf_WANT_SCALAR)
1090 || (PL_parser && PL_parser->error_count)
1091 || o->op_type == OP_RETURN || o->op_type == OP_REQUIRE || o->op_type == OP_LEAVEWHEN)
1096 if ((o->op_private & OPpTARGET_MY)
1097 && (PL_opargs[o->op_type] & OA_TARGLEX))/* OPp share the meaning */
1099 return scalar(o); /* As if inside SASSIGN */
1102 o->op_flags = (o->op_flags & ~OPf_WANT) | OPf_WANT_VOID;
1104 switch (o->op_type) {
1106 if (!(PL_opargs[o->op_type] & OA_FOLDCONST))
1110 if (o->op_flags & OPf_STACKED)
1114 if (o->op_private == 4)
1139 case OP_AELEMFAST_LEX:
1158 case OP_GETSOCKNAME:
1159 case OP_GETPEERNAME:
1164 case OP_GETPRIORITY:
1189 if (!(o->op_private & (OPpLVAL_INTRO|OPpOUR_INTRO)))
1190 /* Otherwise it's "Useless use of grep iterator" */
1191 useless = OP_DESC(o);
1195 kid = cLISTOPo->op_first;
1196 if (kid && kid->op_type == OP_PUSHRE
1198 && !((PMOP*)kid)->op_pmreplrootu.op_pmtargetoff)
1200 && !((PMOP*)kid)->op_pmreplrootu.op_pmtargetgv)
1202 useless = OP_DESC(o);
1206 kid = cUNOPo->op_first;
1207 if (kid->op_type != OP_MATCH && kid->op_type != OP_SUBST &&
1208 kid->op_type != OP_TRANS && kid->op_type != OP_TRANSR) {
1211 useless = "negative pattern binding (!~)";
1215 if (cPMOPo->op_pmflags & PMf_NONDESTRUCT)
1216 useless = "non-destructive substitution (s///r)";
1220 useless = "non-destructive transliteration (tr///r)";
1227 if (!(o->op_private & (OPpLVAL_INTRO|OPpOUR_INTRO)) &&
1228 (!o->op_sibling || o->op_sibling->op_type != OP_READLINE))
1229 useless = "a variable";
1234 if (cSVOPo->op_private & OPpCONST_STRICT)
1235 no_bareword_allowed(o);
1237 if (ckWARN(WARN_VOID)) {
1238 /* don't warn on optimised away booleans, eg
1239 * use constant Foo, 5; Foo || print; */
1240 if (cSVOPo->op_private & OPpCONST_SHORTCIRCUIT)
1242 /* the constants 0 and 1 are permitted as they are
1243 conventionally used as dummies in constructs like
1244 1 while some_condition_with_side_effects; */
1245 else if (SvNIOK(sv) && (SvNV(sv) == 0.0 || SvNV(sv) == 1.0))
1247 else if (SvPOK(sv)) {
1248 /* perl4's way of mixing documentation and code
1249 (before the invention of POD) was based on a
1250 trick to mix nroff and perl code. The trick was
1251 built upon these three nroff macros being used in
1252 void context. The pink camel has the details in
1253 the script wrapman near page 319. */
1254 const char * const maybe_macro = SvPVX_const(sv);
1255 if (strnEQ(maybe_macro, "di", 2) ||
1256 strnEQ(maybe_macro, "ds", 2) ||
1257 strnEQ(maybe_macro, "ig", 2))
1260 SV * const dsv = newSVpvs("");
1261 SV* msv = sv_2mortal(Perl_newSVpvf(aTHX_
1263 pv_pretty(dsv, maybe_macro, SvCUR(sv), 32, NULL, NULL,
1264 PERL_PV_PRETTY_DUMP | PERL_PV_ESCAPE_NOCLEAR | PERL_PV_ESCAPE_UNI_DETECT )));
1266 useless = SvPV_nolen(msv);
1267 useless_is_utf8 = SvUTF8(msv);
1270 else if (SvOK(sv)) {
1271 SV* msv = sv_2mortal(Perl_newSVpvf(aTHX_
1272 "a constant (%"SVf")", sv));
1273 useless = SvPV_nolen(msv);
1276 useless = "a constant (undef)";
1279 op_null(o); /* don't execute or even remember it */
1283 o->op_type = OP_PREINC; /* pre-increment is faster */
1284 o->op_ppaddr = PL_ppaddr[OP_PREINC];
1288 o->op_type = OP_PREDEC; /* pre-decrement is faster */
1289 o->op_ppaddr = PL_ppaddr[OP_PREDEC];
1293 o->op_type = OP_I_PREINC; /* pre-increment is faster */
1294 o->op_ppaddr = PL_ppaddr[OP_I_PREINC];
1298 o->op_type = OP_I_PREDEC; /* pre-decrement is faster */
1299 o->op_ppaddr = PL_ppaddr[OP_I_PREDEC];
1304 UNOP *refgen, *rv2cv;
1307 if ((o->op_private & ~OPpASSIGN_BACKWARDS) != 2)
1310 rv2gv = ((BINOP *)o)->op_last;
1311 if (!rv2gv || rv2gv->op_type != OP_RV2GV)
1314 refgen = (UNOP *)((BINOP *)o)->op_first;
1316 if (!refgen || refgen->op_type != OP_REFGEN)
1319 exlist = (LISTOP *)refgen->op_first;
1320 if (!exlist || exlist->op_type != OP_NULL
1321 || exlist->op_targ != OP_LIST)
1324 if (exlist->op_first->op_type != OP_PUSHMARK)
1327 rv2cv = (UNOP*)exlist->op_last;
1329 if (rv2cv->op_type != OP_RV2CV)
1332 assert ((rv2gv->op_private & OPpDONT_INIT_GV) == 0);
1333 assert ((o->op_private & OPpASSIGN_CV_TO_GV) == 0);
1334 assert ((rv2cv->op_private & OPpMAY_RETURN_CONSTANT) == 0);
1336 o->op_private |= OPpASSIGN_CV_TO_GV;
1337 rv2gv->op_private |= OPpDONT_INIT_GV;
1338 rv2cv->op_private |= OPpMAY_RETURN_CONSTANT;
1350 kid = cLOGOPo->op_first;
1351 if (kid->op_type == OP_NOT
1352 && (kid->op_flags & OPf_KIDS)
1354 if (o->op_type == OP_AND) {
1356 o->op_ppaddr = PL_ppaddr[OP_OR];
1358 o->op_type = OP_AND;
1359 o->op_ppaddr = PL_ppaddr[OP_AND];
1368 for (kid = cUNOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
1373 if (o->op_flags & OPf_STACKED)
1380 if (!(o->op_flags & OPf_KIDS))
1391 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
1401 Perl_ck_warner(aTHX_ packWARN(WARN_VOID), "Useless use of %"SVf" in void context",
1402 newSVpvn_flags(useless, strlen(useless),
1403 SVs_TEMP | ( useless_is_utf8 ? SVf_UTF8 : 0 )));
1408 S_listkids(pTHX_ OP *o)
1410 if (o && o->op_flags & OPf_KIDS) {
1412 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
1419 Perl_list(pTHX_ OP *o)
1424 /* assumes no premature commitment */
1425 if (!o || (o->op_flags & OPf_WANT)
1426 || (PL_parser && PL_parser->error_count)
1427 || o->op_type == OP_RETURN)
1432 if ((o->op_private & OPpTARGET_MY)
1433 && (PL_opargs[o->op_type] & OA_TARGLEX))/* OPp share the meaning */
1435 return o; /* As if inside SASSIGN */
1438 o->op_flags = (o->op_flags & ~OPf_WANT) | OPf_WANT_LIST;
1440 switch (o->op_type) {
1443 list(cBINOPo->op_first);
1448 for (kid = cUNOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
1456 if (!(o->op_flags & OPf_KIDS))
1458 if (!o->op_next && cUNOPo->op_first->op_type == OP_FLOP) {
1459 list(cBINOPo->op_first);
1460 return gen_constant_list(o);
1467 kid = cLISTOPo->op_first;
1469 kid = kid->op_sibling;
1472 OP *sib = kid->op_sibling;
1473 if (sib && kid->op_type != OP_LEAVEWHEN)
1479 PL_curcop = &PL_compiling;
1483 kid = cLISTOPo->op_first;
1490 S_scalarseq(pTHX_ OP *o)
1494 const OPCODE type = o->op_type;
1496 if (type == OP_LINESEQ || type == OP_SCOPE ||
1497 type == OP_LEAVE || type == OP_LEAVETRY)
1500 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling) {
1501 if (kid->op_sibling) {
1505 PL_curcop = &PL_compiling;
1507 o->op_flags &= ~OPf_PARENS;
1508 if (PL_hints & HINT_BLOCK_SCOPE)
1509 o->op_flags |= OPf_PARENS;
1512 o = newOP(OP_STUB, 0);
1517 S_modkids(pTHX_ OP *o, I32 type)
1519 if (o && o->op_flags & OPf_KIDS) {
1521 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
1522 op_lvalue(kid, type);
1528 =for apidoc finalize_optree
1530 This function finalizes the optree. Should be called directly after
1531 the complete optree is built. It does some additional
1532 checking which can't be done in the normal ck_xxx functions and makes
1533 the tree thread-safe.
1538 Perl_finalize_optree(pTHX_ OP* o)
1540 PERL_ARGS_ASSERT_FINALIZE_OPTREE;
1543 SAVEVPTR(PL_curcop);
1551 S_finalize_op(pTHX_ OP* o)
1553 PERL_ARGS_ASSERT_FINALIZE_OP;
1555 #if defined(PERL_MAD) && defined(USE_ITHREADS)
1557 /* Make sure mad ops are also thread-safe */
1558 MADPROP *mp = o->op_madprop;
1560 if (mp->mad_type == MAD_OP && mp->mad_vlen) {
1561 OP *prop_op = (OP *) mp->mad_val;
1562 /* We only need "Relocate sv to the pad for thread safety.", but this
1563 easiest way to make sure it traverses everything */
1564 if (prop_op->op_type == OP_CONST)
1565 cSVOPx(prop_op)->op_private &= ~OPpCONST_STRICT;
1566 finalize_op(prop_op);
1573 switch (o->op_type) {
1576 PL_curcop = ((COP*)o); /* for warnings */
1580 && (o->op_sibling->op_type == OP_NEXTSTATE || o->op_sibling->op_type == OP_DBSTATE)
1581 && ckWARN(WARN_SYNTAX))
1583 if (o->op_sibling->op_sibling) {
1584 const OPCODE type = o->op_sibling->op_sibling->op_type;
1585 if (type != OP_EXIT && type != OP_WARN && type != OP_DIE) {
1586 const line_t oldline = CopLINE(PL_curcop);
1587 CopLINE_set(PL_curcop, CopLINE((COP*)o->op_sibling));
1588 Perl_warner(aTHX_ packWARN(WARN_EXEC),
1589 "Statement unlikely to be reached");
1590 Perl_warner(aTHX_ packWARN(WARN_EXEC),
1591 "\t(Maybe you meant system() when you said exec()?)\n");
1592 CopLINE_set(PL_curcop, oldline);
1599 if ((o->op_private & OPpEARLY_CV) && ckWARN(WARN_PROTOTYPE)) {
1600 GV * const gv = cGVOPo_gv;
1601 if (SvTYPE(gv) == SVt_PVGV && GvCV(gv) && SvPVX_const(GvCV(gv))) {
1602 /* XXX could check prototype here instead of just carping */
1603 SV * const sv = sv_newmortal();
1604 gv_efullname3(sv, gv, NULL);
1605 Perl_warner(aTHX_ packWARN(WARN_PROTOTYPE),
1606 "%"SVf"() called too early to check prototype",
1613 if (cSVOPo->op_private & OPpCONST_STRICT)
1614 no_bareword_allowed(o);
1618 case OP_METHOD_NAMED:
1619 /* Relocate sv to the pad for thread safety.
1620 * Despite being a "constant", the SV is written to,
1621 * for reference counts, sv_upgrade() etc. */
1622 if (cSVOPo->op_sv) {
1623 const PADOFFSET ix = pad_alloc(OP_CONST, SVs_PADTMP);
1624 if (o->op_type != OP_METHOD_NAMED &&
1625 (SvPADTMP(cSVOPo->op_sv) || SvPADMY(cSVOPo->op_sv)))
1627 /* If op_sv is already a PADTMP/MY then it is being used by
1628 * some pad, so make a copy. */
1629 sv_setsv(PAD_SVl(ix),cSVOPo->op_sv);
1630 SvREADONLY_on(PAD_SVl(ix));
1631 SvREFCNT_dec(cSVOPo->op_sv);
1633 else if (o->op_type != OP_METHOD_NAMED
1634 && cSVOPo->op_sv == &PL_sv_undef) {
1635 /* PL_sv_undef is hack - it's unsafe to store it in the
1636 AV that is the pad, because av_fetch treats values of
1637 PL_sv_undef as a "free" AV entry and will merrily
1638 replace them with a new SV, causing pad_alloc to think
1639 that this pad slot is free. (When, clearly, it is not)
1641 SvOK_off(PAD_SVl(ix));
1642 SvPADTMP_on(PAD_SVl(ix));
1643 SvREADONLY_on(PAD_SVl(ix));
1646 SvREFCNT_dec(PAD_SVl(ix));
1647 SvPADTMP_on(cSVOPo->op_sv);
1648 PAD_SETSV(ix, cSVOPo->op_sv);
1649 /* XXX I don't know how this isn't readonly already. */
1650 SvREADONLY_on(PAD_SVl(ix));
1652 cSVOPo->op_sv = NULL;
1663 const char *key = NULL;
1666 if (((BINOP*)o)->op_last->op_type != OP_CONST)
1669 /* Make the CONST have a shared SV */
1670 svp = cSVOPx_svp(((BINOP*)o)->op_last);
1671 if ((!SvFAKE(sv = *svp) || !SvREADONLY(sv))
1672 && SvTYPE(sv) < SVt_PVMG && !SvROK(sv)) {
1673 key = SvPV_const(sv, keylen);
1674 lexname = newSVpvn_share(key,
1675 SvUTF8(sv) ? -(I32)keylen : (I32)keylen,
1681 if ((o->op_private & (OPpLVAL_INTRO)))
1684 rop = (UNOP*)((BINOP*)o)->op_first;
1685 if (rop->op_type != OP_RV2HV || rop->op_first->op_type != OP_PADSV)
1687 lexname = *av_fetch(PL_comppad_name, rop->op_first->op_targ, TRUE);
1688 if (!SvPAD_TYPED(lexname))
1690 fields = (GV**)hv_fetchs(SvSTASH(lexname), "FIELDS", FALSE);
1691 if (!fields || !GvHV(*fields))
1693 key = SvPV_const(*svp, keylen);
1694 if (!hv_fetch(GvHV(*fields), key,
1695 SvUTF8(*svp) ? -(I32)keylen : (I32)keylen, FALSE)) {
1696 Perl_croak(aTHX_ "No such class field \"%"SVf"\" "
1697 "in variable %"SVf" of type %"HEKf,
1698 SVfARG(*svp), SVfARG(lexname),
1699 HEKfARG(HvNAME_HEK(SvSTASH(lexname))));
1711 SVOP *first_key_op, *key_op;
1713 if ((o->op_private & (OPpLVAL_INTRO))
1714 /* I bet there's always a pushmark... */
1715 || ((LISTOP*)o)->op_first->op_sibling->op_type != OP_LIST)
1716 /* hmmm, no optimization if list contains only one key. */
1718 rop = (UNOP*)((LISTOP*)o)->op_last;
1719 if (rop->op_type != OP_RV2HV)
1721 if (rop->op_first->op_type == OP_PADSV)
1722 /* @$hash{qw(keys here)} */
1723 rop = (UNOP*)rop->op_first;
1725 /* @{$hash}{qw(keys here)} */
1726 if (rop->op_first->op_type == OP_SCOPE
1727 && cLISTOPx(rop->op_first)->op_last->op_type == OP_PADSV)
1729 rop = (UNOP*)cLISTOPx(rop->op_first)->op_last;
1735 lexname = *av_fetch(PL_comppad_name, rop->op_targ, TRUE);
1736 if (!SvPAD_TYPED(lexname))
1738 fields = (GV**)hv_fetchs(SvSTASH(lexname), "FIELDS", FALSE);
1739 if (!fields || !GvHV(*fields))
1741 /* Again guessing that the pushmark can be jumped over.... */
1742 first_key_op = (SVOP*)((LISTOP*)((LISTOP*)o)->op_first->op_sibling)
1743 ->op_first->op_sibling;
1744 for (key_op = first_key_op; key_op;
1745 key_op = (SVOP*)key_op->op_sibling) {
1746 if (key_op->op_type != OP_CONST)
1748 svp = cSVOPx_svp(key_op);
1749 key = SvPV_const(*svp, keylen);
1750 if (!hv_fetch(GvHV(*fields), key,
1751 SvUTF8(*svp) ? -(I32)keylen : (I32)keylen, FALSE)) {
1752 Perl_croak(aTHX_ "No such class field \"%"SVf"\" "
1753 "in variable %"SVf" of type %"HEKf,
1754 SVfARG(*svp), SVfARG(lexname),
1755 HEKfARG(HvNAME_HEK(SvSTASH(lexname))));
1761 if (cPMOPo->op_pmreplrootu.op_pmreplroot)
1762 finalize_op(cPMOPo->op_pmreplrootu.op_pmreplroot);
1769 if (o->op_flags & OPf_KIDS) {
1771 for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling)
1777 =for apidoc Amx|OP *|op_lvalue|OP *o|I32 type
1779 Propagate lvalue ("modifiable") context to an op and its children.
1780 I<type> represents the context type, roughly based on the type of op that
1781 would do the modifying, although C<local()> is represented by OP_NULL,
1782 because it has no op type of its own (it is signalled by a flag on
1785 This function detects things that can't be modified, such as C<$x+1>, and
1786 generates errors for them. For example, C<$x+1 = 2> would cause it to be
1787 called with an op of type OP_ADD and a C<type> argument of OP_SASSIGN.
1789 It also flags things that need to behave specially in an lvalue context,
1790 such as C<$$x = 5> which might have to vivify a reference in C<$x>.
1796 Perl_op_lvalue_flags(pTHX_ OP *o, I32 type, U32 flags)
1800 /* -1 = error on localize, 0 = ignore localize, 1 = ok to localize */
1803 if (!o || (PL_parser && PL_parser->error_count))
1806 if ((o->op_private & OPpTARGET_MY)
1807 && (PL_opargs[o->op_type] & OA_TARGLEX))/* OPp share the meaning */
1812 assert( (o->op_flags & OPf_WANT) != OPf_WANT_VOID );
1814 if (type == OP_PRTF || type == OP_SPRINTF) type = OP_ENTERSUB;
1816 switch (o->op_type) {
1821 if ((o->op_flags & OPf_PARENS) || PL_madskills)
1825 if ((type == OP_UNDEF || type == OP_REFGEN || type == OP_LOCK) &&
1826 !(o->op_flags & OPf_STACKED)) {
1827 o->op_type = OP_RV2CV; /* entersub => rv2cv */
1828 /* Both ENTERSUB and RV2CV use this bit, but for different pur-
1829 poses, so we need it clear. */
1830 o->op_private &= ~1;
1831 o->op_ppaddr = PL_ppaddr[OP_RV2CV];
1832 assert(cUNOPo->op_first->op_type == OP_NULL);
1833 op_null(((LISTOP*)cUNOPo->op_first)->op_first);/* disable pushmark */
1836 else { /* lvalue subroutine call */
1837 o->op_private |= OPpLVAL_INTRO
1838 |(OPpENTERSUB_INARGS * (type == OP_LEAVESUBLV));
1839 PL_modcount = RETURN_UNLIMITED_NUMBER;
1840 if (type == OP_GREPSTART || type == OP_ENTERSUB || type == OP_REFGEN) {
1841 /* Potential lvalue context: */
1842 o->op_private |= OPpENTERSUB_INARGS;
1845 else { /* Compile-time error message: */
1846 OP *kid = cUNOPo->op_first;
1849 if (kid->op_type != OP_PUSHMARK) {
1850 if (kid->op_type != OP_NULL || kid->op_targ != OP_LIST)
1852 "panic: unexpected lvalue entersub "
1853 "args: type/targ %ld:%"UVuf,
1854 (long)kid->op_type, (UV)kid->op_targ);
1855 kid = kLISTOP->op_first;
1857 while (kid->op_sibling)
1858 kid = kid->op_sibling;
1859 if (!(kid->op_type == OP_NULL && kid->op_targ == OP_RV2CV)) {
1860 break; /* Postpone until runtime */
1863 kid = kUNOP->op_first;
1864 if (kid->op_type == OP_NULL && kid->op_targ == OP_RV2SV)
1865 kid = kUNOP->op_first;
1866 if (kid->op_type == OP_NULL)
1868 "Unexpected constant lvalue entersub "
1869 "entry via type/targ %ld:%"UVuf,
1870 (long)kid->op_type, (UV)kid->op_targ);
1871 if (kid->op_type != OP_GV) {
1875 cv = GvCV(kGVOP_gv);
1885 if (flags & OP_LVALUE_NO_CROAK) return NULL;
1886 /* grep, foreach, subcalls, refgen */
1887 if (type == OP_GREPSTART || type == OP_ENTERSUB
1888 || type == OP_REFGEN || type == OP_LEAVESUBLV)
1890 yyerror(Perl_form(aTHX_ "Can't modify %s in %s",
1891 (o->op_type == OP_NULL && (o->op_flags & OPf_SPECIAL)
1893 : (o->op_type == OP_ENTERSUB
1894 ? "non-lvalue subroutine call"
1896 type ? PL_op_desc[type] : "local"));
1910 case OP_RIGHT_SHIFT:
1919 if (!(o->op_flags & OPf_STACKED))
1926 for (kid = cUNOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
1927 op_lvalue(kid, type);
1932 if (type == OP_REFGEN && o->op_flags & OPf_PARENS) {
1933 PL_modcount = RETURN_UNLIMITED_NUMBER;
1934 return o; /* Treat \(@foo) like ordinary list. */
1938 if (scalar_mod_type(o, type))
1940 ref(cUNOPo->op_first, o->op_type);
1944 if (type == OP_LEAVESUBLV)
1945 o->op_private |= OPpMAYBE_LVSUB;
1951 PL_modcount = RETURN_UNLIMITED_NUMBER;
1954 PL_hints |= HINT_BLOCK_SCOPE;
1955 if (type == OP_LEAVESUBLV)
1956 o->op_private |= OPpMAYBE_LVSUB;
1960 ref(cUNOPo->op_first, o->op_type);
1964 PL_hints |= HINT_BLOCK_SCOPE;
1973 case OP_AELEMFAST_LEX:
1980 PL_modcount = RETURN_UNLIMITED_NUMBER;
1981 if (type == OP_REFGEN && o->op_flags & OPf_PARENS)
1982 return o; /* Treat \(@foo) like ordinary list. */
1983 if (scalar_mod_type(o, type))
1985 if (type == OP_LEAVESUBLV)
1986 o->op_private |= OPpMAYBE_LVSUB;
1990 if (!type) /* local() */
1991 Perl_croak(aTHX_ "Can't localize lexical variable %"SVf,
1992 PAD_COMPNAME_SV(o->op_targ));
2001 if (type != OP_SASSIGN && type != OP_LEAVESUBLV)
2005 if (o->op_private == 4) /* don't allow 4 arg substr as lvalue */
2011 if (type == OP_LEAVESUBLV)
2012 o->op_private |= OPpMAYBE_LVSUB;
2013 pad_free(o->op_targ);
2014 o->op_targ = pad_alloc(o->op_type, SVs_PADMY);
2015 assert(SvTYPE(PAD_SV(o->op_targ)) == SVt_NULL);
2016 if (o->op_flags & OPf_KIDS)
2017 op_lvalue(cBINOPo->op_first->op_sibling, type);
2022 ref(cBINOPo->op_first, o->op_type);
2023 if (type == OP_ENTERSUB &&
2024 !(o->op_private & (OPpLVAL_INTRO | OPpDEREF)))
2025 o->op_private |= OPpLVAL_DEFER;
2026 if (type == OP_LEAVESUBLV)
2027 o->op_private |= OPpMAYBE_LVSUB;
2037 if (o->op_flags & OPf_KIDS)
2038 op_lvalue(cLISTOPo->op_last, type);
2043 if (o->op_flags & OPf_SPECIAL) /* do BLOCK */
2045 else if (!(o->op_flags & OPf_KIDS))
2047 if (o->op_targ != OP_LIST) {
2048 op_lvalue(cBINOPo->op_first, type);
2054 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
2055 /* elements might be in void context because the list is
2056 in scalar context or because they are attribute sub calls */
2057 if ( (kid->op_flags & OPf_WANT) != OPf_WANT_VOID )
2058 op_lvalue(kid, type);
2062 if (type != OP_LEAVESUBLV)
2064 break; /* op_lvalue()ing was handled by ck_return() */
2070 /* [20011101.069] File test operators interpret OPf_REF to mean that
2071 their argument is a filehandle; thus \stat(".") should not set
2073 if (type == OP_REFGEN &&
2074 PL_check[o->op_type] == Perl_ck_ftst)
2077 if (type != OP_LEAVESUBLV)
2078 o->op_flags |= OPf_MOD;
2080 if (type == OP_AASSIGN || type == OP_SASSIGN)
2081 o->op_flags |= OPf_SPECIAL|OPf_REF;
2082 else if (!type) { /* local() */
2085 o->op_private |= OPpLVAL_INTRO;
2086 o->op_flags &= ~OPf_SPECIAL;
2087 PL_hints |= HINT_BLOCK_SCOPE;
2092 Perl_ck_warner(aTHX_ packWARN(WARN_SYNTAX),
2093 "Useless localization of %s", OP_DESC(o));
2096 else if (type != OP_GREPSTART && type != OP_ENTERSUB
2097 && type != OP_LEAVESUBLV)
2098 o->op_flags |= OPf_REF;
2103 S_scalar_mod_type(const OP *o, I32 type)
2108 if (o && o->op_type == OP_RV2GV)
2132 case OP_RIGHT_SHIFT:
2153 S_is_handle_constructor(const OP *o, I32 numargs)
2155 PERL_ARGS_ASSERT_IS_HANDLE_CONSTRUCTOR;
2157 switch (o->op_type) {
2165 case OP_SELECT: /* XXX c.f. SelectSaver.pm */
2178 S_refkids(pTHX_ OP *o, I32 type)
2180 if (o && o->op_flags & OPf_KIDS) {
2182 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
2189 Perl_doref(pTHX_ OP *o, I32 type, bool set_op_ref)
2194 PERL_ARGS_ASSERT_DOREF;
2196 if (!o || (PL_parser && PL_parser->error_count))
2199 switch (o->op_type) {
2201 if ((type == OP_EXISTS || type == OP_DEFINED) &&
2202 !(o->op_flags & OPf_STACKED)) {
2203 o->op_type = OP_RV2CV; /* entersub => rv2cv */
2204 o->op_ppaddr = PL_ppaddr[OP_RV2CV];
2205 assert(cUNOPo->op_first->op_type == OP_NULL);
2206 op_null(((LISTOP*)cUNOPo->op_first)->op_first); /* disable pushmark */
2207 o->op_flags |= OPf_SPECIAL;
2208 o->op_private &= ~1;
2210 else if (type == OP_RV2SV || type == OP_RV2AV || type == OP_RV2HV){
2211 o->op_private |= (type == OP_RV2AV ? OPpDEREF_AV
2212 : type == OP_RV2HV ? OPpDEREF_HV
2214 o->op_flags |= OPf_MOD;
2220 for (kid = cUNOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
2221 doref(kid, type, set_op_ref);
2224 if (type == OP_DEFINED)
2225 o->op_flags |= OPf_SPECIAL; /* don't create GV */
2226 doref(cUNOPo->op_first, o->op_type, set_op_ref);
2229 if (type == OP_RV2SV || type == OP_RV2AV || type == OP_RV2HV) {
2230 o->op_private |= (type == OP_RV2AV ? OPpDEREF_AV
2231 : type == OP_RV2HV ? OPpDEREF_HV
2233 o->op_flags |= OPf_MOD;
2240 o->op_flags |= OPf_REF;
2243 if (type == OP_DEFINED)
2244 o->op_flags |= OPf_SPECIAL; /* don't create GV */
2245 doref(cUNOPo->op_first, o->op_type, set_op_ref);
2251 o->op_flags |= OPf_REF;
2256 if (!(o->op_flags & OPf_KIDS))
2258 doref(cBINOPo->op_first, type, set_op_ref);
2262 doref(cBINOPo->op_first, o->op_type, set_op_ref);
2263 if (type == OP_RV2SV || type == OP_RV2AV || type == OP_RV2HV) {
2264 o->op_private |= (type == OP_RV2AV ? OPpDEREF_AV
2265 : type == OP_RV2HV ? OPpDEREF_HV
2267 o->op_flags |= OPf_MOD;
2277 if (!(o->op_flags & OPf_KIDS))
2279 doref(cLISTOPo->op_last, type, set_op_ref);
2289 S_dup_attrlist(pTHX_ OP *o)
2294 PERL_ARGS_ASSERT_DUP_ATTRLIST;
2296 /* An attrlist is either a simple OP_CONST or an OP_LIST with kids,
2297 * where the first kid is OP_PUSHMARK and the remaining ones
2298 * are OP_CONST. We need to push the OP_CONST values.
2300 if (o->op_type == OP_CONST)
2301 rop = newSVOP(OP_CONST, o->op_flags, SvREFCNT_inc_NN(cSVOPo->op_sv));
2303 else if (o->op_type == OP_NULL)
2307 assert((o->op_type == OP_LIST) && (o->op_flags & OPf_KIDS));
2309 for (o = cLISTOPo->op_first; o; o=o->op_sibling) {
2310 if (o->op_type == OP_CONST)
2311 rop = op_append_elem(OP_LIST, rop,
2312 newSVOP(OP_CONST, o->op_flags,
2313 SvREFCNT_inc_NN(cSVOPo->op_sv)));
2320 S_apply_attrs(pTHX_ HV *stash, SV *target, OP *attrs, bool for_my)
2325 PERL_ARGS_ASSERT_APPLY_ATTRS;
2327 /* fake up C<use attributes $pkg,$rv,@attrs> */
2328 ENTER; /* need to protect against side-effects of 'use' */
2329 stashsv = stash ? newSVhek(HvNAME_HEK(stash)) : &PL_sv_no;
2331 #define ATTRSMODULE "attributes"
2332 #define ATTRSMODULE_PM "attributes.pm"
2335 /* Don't force the C<use> if we don't need it. */
2336 SV * const * const svp = hv_fetchs(GvHVn(PL_incgv), ATTRSMODULE_PM, FALSE);
2337 if (svp && *svp != &PL_sv_undef)
2338 NOOP; /* already in %INC */
2340 Perl_load_module(aTHX_ PERL_LOADMOD_NOIMPORT,
2341 newSVpvs(ATTRSMODULE), NULL);
2344 Perl_load_module(aTHX_ PERL_LOADMOD_IMPORT_OPS,
2345 newSVpvs(ATTRSMODULE),
2347 op_prepend_elem(OP_LIST,
2348 newSVOP(OP_CONST, 0, stashsv),
2349 op_prepend_elem(OP_LIST,
2350 newSVOP(OP_CONST, 0,
2352 dup_attrlist(attrs))));
2358 S_apply_attrs_my(pTHX_ HV *stash, OP *target, OP *attrs, OP **imopsp)
2361 OP *pack, *imop, *arg;
2364 PERL_ARGS_ASSERT_APPLY_ATTRS_MY;
2369 assert(target->op_type == OP_PADSV ||
2370 target->op_type == OP_PADHV ||
2371 target->op_type == OP_PADAV);
2373 /* Ensure that attributes.pm is loaded. */
2374 apply_attrs(stash, PAD_SV(target->op_targ), attrs, TRUE);
2376 /* Need package name for method call. */
2377 pack = newSVOP(OP_CONST, 0, newSVpvs(ATTRSMODULE));
2379 /* Build up the real arg-list. */
2380 stashsv = stash ? newSVhek(HvNAME_HEK(stash)) : &PL_sv_no;
2382 arg = newOP(OP_PADSV, 0);
2383 arg->op_targ = target->op_targ;
2384 arg = op_prepend_elem(OP_LIST,
2385 newSVOP(OP_CONST, 0, stashsv),
2386 op_prepend_elem(OP_LIST,
2387 newUNOP(OP_REFGEN, 0,
2388 op_lvalue(arg, OP_REFGEN)),
2389 dup_attrlist(attrs)));
2391 /* Fake up a method call to import */
2392 meth = newSVpvs_share("import");
2393 imop = convert(OP_ENTERSUB, OPf_STACKED|OPf_SPECIAL|OPf_WANT_VOID,
2394 op_append_elem(OP_LIST,
2395 op_prepend_elem(OP_LIST, pack, list(arg)),
2396 newSVOP(OP_METHOD_NAMED, 0, meth)));
2398 /* Combine the ops. */
2399 *imopsp = op_append_elem(OP_LIST, *imopsp, imop);
2403 =notfor apidoc apply_attrs_string
2405 Attempts to apply a list of attributes specified by the C<attrstr> and
2406 C<len> arguments to the subroutine identified by the C<cv> argument which
2407 is expected to be associated with the package identified by the C<stashpv>
2408 argument (see L<attributes>). It gets this wrong, though, in that it
2409 does not correctly identify the boundaries of the individual attribute
2410 specifications within C<attrstr>. This is not really intended for the
2411 public API, but has to be listed here for systems such as AIX which
2412 need an explicit export list for symbols. (It's called from XS code
2413 in support of the C<ATTRS:> keyword from F<xsubpp>.) Patches to fix it
2414 to respect attribute syntax properly would be welcome.
2420 Perl_apply_attrs_string(pTHX_ const char *stashpv, CV *cv,
2421 const char *attrstr, STRLEN len)
2425 PERL_ARGS_ASSERT_APPLY_ATTRS_STRING;
2428 len = strlen(attrstr);
2432 for (; isSPACE(*attrstr) && len; --len, ++attrstr) ;
2434 const char * const sstr = attrstr;
2435 for (; !isSPACE(*attrstr) && len; --len, ++attrstr) ;
2436 attrs = op_append_elem(OP_LIST, attrs,
2437 newSVOP(OP_CONST, 0,
2438 newSVpvn(sstr, attrstr-sstr)));
2442 Perl_load_module(aTHX_ PERL_LOADMOD_IMPORT_OPS,
2443 newSVpvs(ATTRSMODULE),
2444 NULL, op_prepend_elem(OP_LIST,
2445 newSVOP(OP_CONST, 0, newSVpv(stashpv,0)),
2446 op_prepend_elem(OP_LIST,
2447 newSVOP(OP_CONST, 0,
2448 newRV(MUTABLE_SV(cv))),
2453 S_my_kid(pTHX_ OP *o, OP *attrs, OP **imopsp)
2457 const bool stately = PL_parser && PL_parser->in_my == KEY_state;
2459 PERL_ARGS_ASSERT_MY_KID;
2461 if (!o || (PL_parser && PL_parser->error_count))
2465 if (PL_madskills && type == OP_NULL && o->op_flags & OPf_KIDS) {
2466 (void)my_kid(cUNOPo->op_first, attrs, imopsp);
2470 if (type == OP_LIST) {
2472 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
2473 my_kid(kid, attrs, imopsp);
2475 } else if (type == OP_UNDEF
2481 } else if (type == OP_RV2SV || /* "our" declaration */
2483 type == OP_RV2HV) { /* XXX does this let anything illegal in? */
2484 if (cUNOPo->op_first->op_type != OP_GV) { /* MJD 20011224 */
2485 yyerror(Perl_form(aTHX_ "Can't declare %s in \"%s\"",
2487 PL_parser->in_my == KEY_our
2489 : PL_parser->in_my == KEY_state ? "state" : "my"));
2491 GV * const gv = cGVOPx_gv(cUNOPo->op_first);
2492 PL_parser->in_my = FALSE;
2493 PL_parser->in_my_stash = NULL;
2494 apply_attrs(GvSTASH(gv),
2495 (type == OP_RV2SV ? GvSV(gv) :
2496 type == OP_RV2AV ? MUTABLE_SV(GvAV(gv)) :
2497 type == OP_RV2HV ? MUTABLE_SV(GvHV(gv)) : MUTABLE_SV(gv)),
2500 o->op_private |= OPpOUR_INTRO;
2503 else if (type != OP_PADSV &&
2506 type != OP_PUSHMARK)
2508 yyerror(Perl_form(aTHX_ "Can't declare %s in \"%s\"",
2510 PL_parser->in_my == KEY_our
2512 : PL_parser->in_my == KEY_state ? "state" : "my"));
2515 else if (attrs && type != OP_PUSHMARK) {
2518 PL_parser->in_my = FALSE;
2519 PL_parser->in_my_stash = NULL;
2521 /* check for C<my Dog $spot> when deciding package */
2522 stash = PAD_COMPNAME_TYPE(o->op_targ);
2524 stash = PL_curstash;
2525 apply_attrs_my(stash, o, attrs, imopsp);
2527 o->op_flags |= OPf_MOD;
2528 o->op_private |= OPpLVAL_INTRO;
2530 o->op_private |= OPpPAD_STATE;
2535 Perl_my_attrs(pTHX_ OP *o, OP *attrs)
2539 int maybe_scalar = 0;
2541 PERL_ARGS_ASSERT_MY_ATTRS;
2543 /* [perl #17376]: this appears to be premature, and results in code such as
2544 C< our(%x); > executing in list mode rather than void mode */
2546 if (o->op_flags & OPf_PARENS)
2556 o = my_kid(o, attrs, &rops);
2558 if (maybe_scalar && o->op_type == OP_PADSV) {
2559 o = scalar(op_append_list(OP_LIST, rops, o));
2560 o->op_private |= OPpLVAL_INTRO;
2563 /* The listop in rops might have a pushmark at the beginning,
2564 which will mess up list assignment. */
2565 LISTOP * const lrops = (LISTOP *)rops; /* for brevity */
2566 if (rops->op_type == OP_LIST &&
2567 lrops->op_first && lrops->op_first->op_type == OP_PUSHMARK)
2569 OP * const pushmark = lrops->op_first;
2570 lrops->op_first = pushmark->op_sibling;
2573 o = op_append_list(OP_LIST, o, rops);
2576 PL_parser->in_my = FALSE;
2577 PL_parser->in_my_stash = NULL;
2582 Perl_sawparens(pTHX_ OP *o)
2584 PERL_UNUSED_CONTEXT;
2586 o->op_flags |= OPf_PARENS;
2591 Perl_bind_match(pTHX_ I32 type, OP *left, OP *right)
2595 const OPCODE ltype = left->op_type;
2596 const OPCODE rtype = right->op_type;
2598 PERL_ARGS_ASSERT_BIND_MATCH;
2600 if ( (ltype == OP_RV2AV || ltype == OP_RV2HV || ltype == OP_PADAV
2601 || ltype == OP_PADHV) && ckWARN(WARN_MISC))
2603 const char * const desc
2605 rtype == OP_SUBST || rtype == OP_TRANS
2606 || rtype == OP_TRANSR
2608 ? (int)rtype : OP_MATCH];
2609 const bool isary = ltype == OP_RV2AV || ltype == OP_PADAV;
2612 (ltype == OP_RV2AV || ltype == OP_RV2HV)
2613 ? cUNOPx(left)->op_first->op_type == OP_GV
2614 && (gv = cGVOPx_gv(cUNOPx(left)->op_first))
2615 ? varname(gv, isary ? '@' : '%', 0, NULL, 0, 1)
2618 (GV *)PL_compcv, isary ? '@' : '%', left->op_targ, NULL, 0, 1
2621 Perl_warner(aTHX_ packWARN(WARN_MISC),
2622 "Applying %s to %"SVf" will act on scalar(%"SVf")",
2625 const char * const sample = (isary
2626 ? "@array" : "%hash");
2627 Perl_warner(aTHX_ packWARN(WARN_MISC),
2628 "Applying %s to %s will act on scalar(%s)",
2629 desc, sample, sample);
2633 if (rtype == OP_CONST &&
2634 cSVOPx(right)->op_private & OPpCONST_BARE &&
2635 cSVOPx(right)->op_private & OPpCONST_STRICT)
2637 no_bareword_allowed(right);
2640 /* !~ doesn't make sense with /r, so error on it for now */
2641 if (rtype == OP_SUBST && (cPMOPx(right)->op_pmflags & PMf_NONDESTRUCT) &&
2643 yyerror("Using !~ with s///r doesn't make sense");
2644 if (rtype == OP_TRANSR && type == OP_NOT)
2645 yyerror("Using !~ with tr///r doesn't make sense");
2647 ismatchop = (rtype == OP_MATCH ||
2648 rtype == OP_SUBST ||
2649 rtype == OP_TRANS || rtype == OP_TRANSR)
2650 && !(right->op_flags & OPf_SPECIAL);
2651 if (ismatchop && right->op_private & OPpTARGET_MY) {
2653 right->op_private &= ~OPpTARGET_MY;
2655 if (!(right->op_flags & OPf_STACKED) && ismatchop) {
2658 right->op_flags |= OPf_STACKED;
2659 if (rtype != OP_MATCH && rtype != OP_TRANSR &&
2660 ! (rtype == OP_TRANS &&
2661 right->op_private & OPpTRANS_IDENTICAL) &&
2662 ! (rtype == OP_SUBST &&
2663 (cPMOPx(right)->op_pmflags & PMf_NONDESTRUCT)))
2664 newleft = op_lvalue(left, rtype);
2667 if (right->op_type == OP_TRANS || right->op_type == OP_TRANSR)
2668 o = newBINOP(OP_NULL, OPf_STACKED, scalar(newleft), right);
2670 o = op_prepend_elem(rtype, scalar(newleft), right);
2672 return newUNOP(OP_NOT, 0, scalar(o));
2676 return bind_match(type, left,
2677 pmruntime(newPMOP(OP_MATCH, 0), right, 0, 0));
2681 Perl_invert(pTHX_ OP *o)
2685 return newUNOP(OP_NOT, OPf_SPECIAL, scalar(o));
2689 =for apidoc Amx|OP *|op_scope|OP *o
2691 Wraps up an op tree with some additional ops so that at runtime a dynamic
2692 scope will be created. The original ops run in the new dynamic scope,
2693 and then, provided that they exit normally, the scope will be unwound.
2694 The additional ops used to create and unwind the dynamic scope will
2695 normally be an C<enter>/C<leave> pair, but a C<scope> op may be used
2696 instead if the ops are simple enough to not need the full dynamic scope
2703 Perl_op_scope(pTHX_ OP *o)
2707 if (o->op_flags & OPf_PARENS || PERLDB_NOOPT || PL_tainting) {
2708 o = op_prepend_elem(OP_LINESEQ, newOP(OP_ENTER, 0), o);
2709 o->op_type = OP_LEAVE;
2710 o->op_ppaddr = PL_ppaddr[OP_LEAVE];
2712 else if (o->op_type == OP_LINESEQ) {
2714 o->op_type = OP_SCOPE;
2715 o->op_ppaddr = PL_ppaddr[OP_SCOPE];
2716 kid = ((LISTOP*)o)->op_first;
2717 if (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) {
2720 /* The following deals with things like 'do {1 for 1}' */
2721 kid = kid->op_sibling;
2723 (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE))
2728 o = newLISTOP(OP_SCOPE, 0, o, NULL);
2734 Perl_block_start(pTHX_ int full)
2737 const int retval = PL_savestack_ix;
2739 pad_block_start(full);
2741 PL_hints &= ~HINT_BLOCK_SCOPE;
2742 SAVECOMPILEWARNINGS();
2743 PL_compiling.cop_warnings = DUP_WARNINGS(PL_compiling.cop_warnings);
2745 CALL_BLOCK_HOOKS(bhk_start, full);
2751 Perl_block_end(pTHX_ I32 floor, OP *seq)
2754 const int needblockscope = PL_hints & HINT_BLOCK_SCOPE;
2755 OP* retval = scalarseq(seq);
2757 CALL_BLOCK_HOOKS(bhk_pre_end, &retval);
2760 CopHINTS_set(&PL_compiling, PL_hints);
2762 PL_hints |= HINT_BLOCK_SCOPE; /* propagate out */
2765 CALL_BLOCK_HOOKS(bhk_post_end, &retval);
2771 =head1 Compile-time scope hooks
2773 =for apidoc Aox||blockhook_register
2775 Register a set of hooks to be called when the Perl lexical scope changes
2776 at compile time. See L<perlguts/"Compile-time scope hooks">.
2782 Perl_blockhook_register(pTHX_ BHK *hk)
2784 PERL_ARGS_ASSERT_BLOCKHOOK_REGISTER;
2786 Perl_av_create_and_push(aTHX_ &PL_blockhooks, newSViv(PTR2IV(hk)));
2793 const PADOFFSET offset = pad_findmy_pvs("$_", 0);
2794 if (offset == NOT_IN_PAD || PAD_COMPNAME_FLAGS_isOUR(offset)) {
2795 return newSVREF(newGVOP(OP_GV, 0, PL_defgv));
2798 OP * const o = newOP(OP_PADSV, 0);
2799 o->op_targ = offset;
2805 Perl_newPROG(pTHX_ OP *o)
2809 PERL_ARGS_ASSERT_NEWPROG;
2816 PL_eval_root = newUNOP(OP_LEAVEEVAL,
2817 ((PL_in_eval & EVAL_KEEPERR)
2818 ? OPf_SPECIAL : 0), o);
2820 cx = &cxstack[cxstack_ix];
2821 assert(CxTYPE(cx) == CXt_EVAL);
2823 if ((cx->blk_gimme & G_WANT) == G_VOID)
2824 scalarvoid(PL_eval_root);
2825 else if ((cx->blk_gimme & G_WANT) == G_ARRAY)
2828 scalar(PL_eval_root);
2830 PL_eval_start = op_linklist(PL_eval_root);
2831 PL_eval_root->op_private |= OPpREFCOUNTED;
2832 OpREFCNT_set(PL_eval_root, 1);
2833 PL_eval_root->op_next = 0;
2834 i = PL_savestack_ix;
2837 CALL_PEEP(PL_eval_start);
2838 finalize_optree(PL_eval_root);
2840 PL_savestack_ix = i;
2843 if (o->op_type == OP_STUB) {
2844 PL_comppad_name = 0;
2846 S_op_destroy(aTHX_ o);
2849 PL_main_root = op_scope(sawparens(scalarvoid(o)));
2850 PL_curcop = &PL_compiling;
2851 PL_main_start = LINKLIST(PL_main_root);
2852 PL_main_root->op_private |= OPpREFCOUNTED;
2853 OpREFCNT_set(PL_main_root, 1);
2854 PL_main_root->op_next = 0;
2855 CALL_PEEP(PL_main_start);
2856 finalize_optree(PL_main_root);
2859 /* Register with debugger */
2861 CV * const cv = get_cvs("DB::postponed", 0);
2865 XPUSHs(MUTABLE_SV(CopFILEGV(&PL_compiling)));
2867 call_sv(MUTABLE_SV(cv), G_DISCARD);
2874 Perl_localize(pTHX_ OP *o, I32 lex)
2878 PERL_ARGS_ASSERT_LOCALIZE;
2880 if (o->op_flags & OPf_PARENS)
2881 /* [perl #17376]: this appears to be premature, and results in code such as
2882 C< our(%x); > executing in list mode rather than void mode */
2889 if ( PL_parser->bufptr > PL_parser->oldbufptr
2890 && PL_parser->bufptr[-1] == ','
2891 && ckWARN(WARN_PARENTHESIS))
2893 char *s = PL_parser->bufptr;
2896 /* some heuristics to detect a potential error */
2897 while (*s && (strchr(", \t\n", *s)))
2901 if (*s && strchr("@$%*", *s) && *++s
2902 && (isALNUM(*s) || UTF8_IS_CONTINUED(*s))) {
2905 while (*s && (isALNUM(*s) || UTF8_IS_CONTINUED(*s)))
2907 while (*s && (strchr(", \t\n", *s)))
2913 if (sigil && (*s == ';' || *s == '=')) {
2914 Perl_warner(aTHX_ packWARN(WARN_PARENTHESIS),
2915 "Parentheses missing around \"%s\" list",
2917 ? (PL_parser->in_my == KEY_our
2919 : PL_parser->in_my == KEY_state
2929 o = op_lvalue(o, OP_NULL); /* a bit kludgey */
2930 PL_parser->in_my = FALSE;
2931 PL_parser->in_my_stash = NULL;
2936 Perl_jmaybe(pTHX_ OP *o)
2938 PERL_ARGS_ASSERT_JMAYBE;
2940 if (o->op_type == OP_LIST) {
2942 = newSVREF(newGVOP(OP_GV, 0, gv_fetchpvs(";", GV_ADD|GV_NOTQUAL, SVt_PV)));
2943 o = convert(OP_JOIN, 0, op_prepend_elem(OP_LIST, o2, o));
2948 PERL_STATIC_INLINE OP *
2949 S_op_std_init(pTHX_ OP *o)
2951 I32 type = o->op_type;
2953 PERL_ARGS_ASSERT_OP_STD_INIT;
2955 if (PL_opargs[type] & OA_RETSCALAR)
2957 if (PL_opargs[type] & OA_TARGET && !o->op_targ)
2958 o->op_targ = pad_alloc(type, SVs_PADTMP);
2963 PERL_STATIC_INLINE OP *
2964 S_op_integerize(pTHX_ OP *o)
2966 I32 type = o->op_type;
2968 PERL_ARGS_ASSERT_OP_INTEGERIZE;
2970 /* integerize op, unless it happens to be C<-foo>.
2971 * XXX should pp_i_negate() do magic string negation instead? */
2972 if ((PL_opargs[type] & OA_OTHERINT) && (PL_hints & HINT_INTEGER)
2973 && !(type == OP_NEGATE && cUNOPo->op_first->op_type == OP_CONST
2974 && (cUNOPo->op_first->op_private & OPpCONST_BARE)))
2977 o->op_ppaddr = PL_ppaddr[type = ++(o->op_type)];
2980 if (type == OP_NEGATE)
2981 /* XXX might want a ck_negate() for this */
2982 cUNOPo->op_first->op_private &= ~OPpCONST_STRICT;
2988 S_fold_constants(pTHX_ register OP *o)
2991 register OP * VOL curop;
2993 VOL I32 type = o->op_type;
2998 SV * const oldwarnhook = PL_warnhook;
2999 SV * const olddiehook = PL_diehook;
3003 PERL_ARGS_ASSERT_FOLD_CONSTANTS;
3005 if (!(PL_opargs[type] & OA_FOLDCONST))
3019 /* XXX what about the numeric ops? */
3020 if (IN_LOCALE_COMPILETIME)
3024 if (o->op_private & OPpREPEAT_DOLIST) goto nope;
3027 if (PL_parser && PL_parser->error_count)
3028 goto nope; /* Don't try to run w/ errors */
3030 for (curop = LINKLIST(o); curop != o; curop = LINKLIST(curop)) {
3031 const OPCODE type = curop->op_type;
3032 if ((type != OP_CONST || (curop->op_private & OPpCONST_BARE)) &&
3034 type != OP_SCALAR &&
3036 type != OP_PUSHMARK)
3042 curop = LINKLIST(o);
3043 old_next = o->op_next;
3047 oldscope = PL_scopestack_ix;
3048 create_eval_scope(G_FAKINGEVAL);
3050 /* Verify that we don't need to save it: */
3051 assert(PL_curcop == &PL_compiling);
3052 StructCopy(&PL_compiling, ¬_compiling, COP);
3053 PL_curcop = ¬_compiling;
3054 /* The above ensures that we run with all the correct hints of the
3055 currently compiling COP, but that IN_PERL_RUNTIME is not true. */
3056 assert(IN_PERL_RUNTIME);
3057 PL_warnhook = PERL_WARNHOOK_FATAL;
3064 sv = *(PL_stack_sp--);
3065 if (o->op_targ && sv == PAD_SV(o->op_targ)) { /* grab pad temp? */
3067 /* Can't simply swipe the SV from the pad, because that relies on
3068 the op being freed "real soon now". Under MAD, this doesn't
3069 happen (see the #ifdef below). */
3072 pad_swipe(o->op_targ, FALSE);
3075 else if (SvTEMP(sv)) { /* grab mortal temp? */
3076 SvREFCNT_inc_simple_void(sv);
3081 /* Something tried to die. Abandon constant folding. */
3082 /* Pretend the error never happened. */
3084 o->op_next = old_next;
3088 /* Don't expect 1 (setjmp failed) or 2 (something called my_exit) */
3089 PL_warnhook = oldwarnhook;
3090 PL_diehook = olddiehook;
3091 /* XXX note that this croak may fail as we've already blown away
3092 * the stack - eg any nested evals */
3093 Perl_croak(aTHX_ "panic: fold_constants JMPENV_PUSH returned %d", ret);
3096 PL_warnhook = oldwarnhook;
3097 PL_diehook = olddiehook;
3098 PL_curcop = &PL_compiling;
3100 if (PL_scopestack_ix > oldscope)
3101 delete_eval_scope();
3110 if (type == OP_RV2GV)
3111 newop = newGVOP(OP_GV, 0, MUTABLE_GV(sv));
3113 newop = newSVOP(OP_CONST, 0, MUTABLE_SV(sv));
3114 op_getmad(o,newop,'f');
3122 S_gen_constant_list(pTHX_ register OP *o)
3126 const I32 oldtmps_floor = PL_tmps_floor;
3129 if (PL_parser && PL_parser->error_count)
3130 return o; /* Don't attempt to run with errors */
3132 PL_op = curop = LINKLIST(o);
3135 Perl_pp_pushmark(aTHX);
3138 assert (!(curop->op_flags & OPf_SPECIAL));
3139 assert(curop->op_type == OP_RANGE);
3140 Perl_pp_anonlist(aTHX);
3141 PL_tmps_floor = oldtmps_floor;
3143 o->op_type = OP_RV2AV;
3144 o->op_ppaddr = PL_ppaddr[OP_RV2AV];
3145 o->op_flags &= ~OPf_REF; /* treat \(1..2) like an ordinary list */
3146 o->op_flags |= OPf_PARENS; /* and flatten \(1..2,3) */
3147 o->op_opt = 0; /* needs to be revisited in rpeep() */
3148 curop = ((UNOP*)o)->op_first;
3149 ((UNOP*)o)->op_first = newSVOP(OP_CONST, 0, SvREFCNT_inc_NN(*PL_stack_sp--));
3151 op_getmad(curop,o,'O');
3160 Perl_convert(pTHX_ I32 type, I32 flags, OP *o)
3163 if (type < 0) type = -type, flags |= OPf_SPECIAL;
3164 if (!o || o->op_type != OP_LIST)
3165 o = newLISTOP(OP_LIST, 0, o, NULL);
3167 o->op_flags &= ~OPf_WANT;
3169 if (!(PL_opargs[type] & OA_MARK))
3170 op_null(cLISTOPo->op_first);
3172 OP * const kid2 = cLISTOPo->op_first->op_sibling;
3173 if (kid2 && kid2->op_type == OP_COREARGS) {
3174 op_null(cLISTOPo->op_first);
3175 kid2->op_private |= OPpCOREARGS_PUSHMARK;
3179 o->op_type = (OPCODE)type;
3180 o->op_ppaddr = PL_ppaddr[type];
3181 o->op_flags |= flags;
3183 o = CHECKOP(type, o);
3184 if (o->op_type != (unsigned)type)
3187 return fold_constants(op_integerize(op_std_init(o)));
3191 =head1 Optree Manipulation Functions
3194 /* List constructors */
3197 =for apidoc Am|OP *|op_append_elem|I32 optype|OP *first|OP *last
3199 Append an item to the list of ops contained directly within a list-type
3200 op, returning the lengthened list. I<first> is the list-type op,
3201 and I<last> is the op to append to the list. I<optype> specifies the
3202 intended opcode for the list. If I<first> is not already a list of the
3203 right type, it will be upgraded into one. If either I<first> or I<last>
3204 is null, the other is returned unchanged.
3210 Perl_op_append_elem(pTHX_ I32 type, OP *first, OP *last)
3218 if (first->op_type != (unsigned)type
3219 || (type == OP_LIST && (first->op_flags & OPf_PARENS)))
3221 return newLISTOP(type, 0, first, last);
3224 if (first->op_flags & OPf_KIDS)
3225 ((LISTOP*)first)->op_last->op_sibling = last;
3227 first->op_flags |= OPf_KIDS;
3228 ((LISTOP*)first)->op_first = last;
3230 ((LISTOP*)first)->op_last = last;
3235 =for apidoc Am|OP *|op_append_list|I32 optype|OP *first|OP *last
3237 Concatenate the lists of ops contained directly within two list-type ops,
3238 returning the combined list. I<first> and I<last> are the list-type ops
3239 to concatenate. I<optype> specifies the intended opcode for the list.
3240 If either I<first> or I<last> is not already a list of the right type,
3241 it will be upgraded into one. If either I<first> or I<last> is null,
3242 the other is returned unchanged.
3248 Perl_op_append_list(pTHX_ I32 type, OP *first, OP *last)
3256 if (first->op_type != (unsigned)type)
3257 return op_prepend_elem(type, first, last);
3259 if (last->op_type != (unsigned)type)
3260 return op_append_elem(type, first, last);
3262 ((LISTOP*)first)->op_last->op_sibling = ((LISTOP*)last)->op_first;
3263 ((LISTOP*)first)->op_last = ((LISTOP*)last)->op_last;
3264 first->op_flags |= (last->op_flags & OPf_KIDS);
3267 if (((LISTOP*)last)->op_first && first->op_madprop) {
3268 MADPROP *mp = ((LISTOP*)last)->op_first->op_madprop;
3270 while (mp->mad_next)
3272 mp->mad_next = first->op_madprop;
3275 ((LISTOP*)last)->op_first->op_madprop = first->op_madprop;
3278 first->op_madprop = last->op_madprop;
3279 last->op_madprop = 0;
3282 S_op_destroy(aTHX_ last);
3288 =for apidoc Am|OP *|op_prepend_elem|I32 optype|OP *first|OP *last
3290 Prepend an item to the list of ops contained directly within a list-type
3291 op, returning the lengthened list. I<first> is the op to prepend to the
3292 list, and I<last> is the list-type op. I<optype> specifies the intended
3293 opcode for the list. If I<last> is not already a list of the right type,
3294 it will be upgraded into one. If either I<first> or I<last> is null,
3295 the other is returned unchanged.
3301 Perl_op_prepend_elem(pTHX_ I32 type, OP *first, OP *last)
3309 if (last->op_type == (unsigned)type) {
3310 if (type == OP_LIST) { /* already a PUSHMARK there */
3311 first->op_sibling = ((LISTOP*)last)->op_first->op_sibling;
3312 ((LISTOP*)last)->op_first->op_sibling = first;
3313 if (!(first->op_flags & OPf_PARENS))
3314 last->op_flags &= ~OPf_PARENS;
3317 if (!(last->op_flags & OPf_KIDS)) {
3318 ((LISTOP*)last)->op_last = first;
3319 last->op_flags |= OPf_KIDS;
3321 first->op_sibling = ((LISTOP*)last)->op_first;
3322 ((LISTOP*)last)->op_first = first;
3324 last->op_flags |= OPf_KIDS;
3328 return newLISTOP(type, 0, first, last);
3336 Perl_newTOKEN(pTHX_ I32 optype, YYSTYPE lval, MADPROP* madprop)
3339 Newxz(tk, 1, TOKEN);
3340 tk->tk_type = (OPCODE)optype;
3341 tk->tk_type = 12345;
3343 tk->tk_mad = madprop;
3348 Perl_token_free(pTHX_ TOKEN* tk)
3350 PERL_ARGS_ASSERT_TOKEN_FREE;
3352 if (tk->tk_type != 12345)
3354 mad_free(tk->tk_mad);
3359 Perl_token_getmad(pTHX_ TOKEN* tk, OP* o, char slot)
3364 PERL_ARGS_ASSERT_TOKEN_GETMAD;
3366 if (tk->tk_type != 12345) {
3367 Perl_warner(aTHX_ packWARN(WARN_MISC),
3368 "Invalid TOKEN object ignored");
3375 /* faked up qw list? */
3377 tm->mad_type == MAD_SV &&
3378 SvPVX((SV *)tm->mad_val)[0] == 'q')
3385 /* pretend constant fold didn't happen? */
3386 if (mp->mad_key == 'f' &&
3387 (o->op_type == OP_CONST ||
3388 o->op_type == OP_GV) )
3390 token_getmad(tk,(OP*)mp->mad_val,slot);
3404 if (mp->mad_key == 'X')
3405 mp->mad_key = slot; /* just change the first one */
3415 Perl_op_getmad_weak(pTHX_ OP* from, OP* o, char slot)
3424 /* pretend constant fold didn't happen? */
3425 if (mp->mad_key == 'f' &&
3426 (o->op_type == OP_CONST ||
3427 o->op_type == OP_GV) )
3429 op_getmad(from,(OP*)mp->mad_val,slot);
3436 mp->mad_next = newMADPROP(slot,MAD_OP,from,0);
3439 o->op_madprop = newMADPROP(slot,MAD_OP,from,0);
3445 Perl_op_getmad(pTHX_ OP* from, OP* o, char slot)
3454 /* pretend constant fold didn't happen? */
3455 if (mp->mad_key == 'f' &&
3456 (o->op_type == OP_CONST ||
3457 o->op_type == OP_GV) )
3459 op_getmad(from,(OP*)mp->mad_val,slot);
3466 mp->mad_next = newMADPROP(slot,MAD_OP,from,1);
3469 o->op_madprop = newMADPROP(slot,MAD_OP,from,1);
3473 PerlIO_printf(PerlIO_stderr(),
3474 "DESTROYING op = %0"UVxf"\n", PTR2UV(from));
3480 Perl_prepend_madprops(pTHX_ MADPROP* mp, OP* o, char slot)
3498 Perl_append_madprops(pTHX_ MADPROP* tm, OP* o, char slot)
3502 addmad(tm, &(o->op_madprop), slot);
3506 Perl_addmad(pTHX_ MADPROP* tm, MADPROP** root, char slot)
3527 Perl_newMADsv(pTHX_ char key, SV* sv)
3529 PERL_ARGS_ASSERT_NEWMADSV;
3531 return newMADPROP(key, MAD_SV, sv, 0);
3535 Perl_newMADPROP(pTHX_ char key, char type, void* val, I32 vlen)
3537 MADPROP *const mp = (MADPROP *) PerlMemShared_malloc(sizeof(MADPROP));
3540 mp->mad_vlen = vlen;
3541 mp->mad_type = type;
3543 /* PerlIO_printf(PerlIO_stderr(), "NEW mp = %0x\n", mp); */
3548 Perl_mad_free(pTHX_ MADPROP* mp)
3550 /* PerlIO_printf(PerlIO_stderr(), "FREE mp = %0x\n", mp); */
3554 mad_free(mp->mad_next);
3555 /* if (PL_parser && PL_parser->lex_state != LEX_NOTPARSING && mp->mad_vlen)
3556 PerlIO_printf(PerlIO_stderr(), "DESTROYING '%c'=<%s>\n", mp->mad_key & 255, mp->mad_val); */
3557 switch (mp->mad_type) {
3561 Safefree((char*)mp->mad_val);
3564 if (mp->mad_vlen) /* vlen holds "strong/weak" boolean */
3565 op_free((OP*)mp->mad_val);
3568 sv_free(MUTABLE_SV(mp->mad_val));
3571 PerlIO_printf(PerlIO_stderr(), "Unrecognized mad\n");
3574 PerlMemShared_free(mp);
3580 =head1 Optree construction
3582 =for apidoc Am|OP *|newNULLLIST
3584 Constructs, checks, and returns a new C<stub> op, which represents an
3585 empty list expression.
3591 Perl_newNULLLIST(pTHX)
3593 return newOP(OP_STUB, 0);
3597 S_force_list(pTHX_ OP *o)
3599 if (!o || o->op_type != OP_LIST)
3600 o = newLISTOP(OP_LIST, 0, o, NULL);
3606 =for apidoc Am|OP *|newLISTOP|I32 type|I32 flags|OP *first|OP *last
3608 Constructs, checks, and returns an op of any list type. I<type> is
3609 the opcode. I<flags> gives the eight bits of C<op_flags>, except that
3610 C<OPf_KIDS> will be set automatically if required. I<first> and I<last>
3611 supply up to two ops to be direct children of the list op; they are
3612 consumed by this function and become part of the constructed op tree.
3618 Perl_newLISTOP(pTHX_ I32 type, I32 flags, OP *first, OP *last)
3623 assert((PL_opargs[type] & OA_CLASS_MASK) == OA_LISTOP);
3625 NewOp(1101, listop, 1, LISTOP);
3627 listop->op_type = (OPCODE)type;
3628 listop->op_ppaddr = PL_ppaddr[type];
3631 listop->op_flags = (U8)flags;
3635 else if (!first && last)
3638 first->op_sibling = last;
3639 listop->op_first = first;
3640 listop->op_last = last;
3641 if (type == OP_LIST) {
3642 OP* const pushop = newOP(OP_PUSHMARK, 0);
3643 pushop->op_sibling = first;
3644 listop->op_first = pushop;
3645 listop->op_flags |= OPf_KIDS;
3647 listop->op_last = pushop;
3650 return CHECKOP(type, listop);
3654 =for apidoc Am|OP *|newOP|I32 type|I32 flags
3656 Constructs, checks, and returns an op of any base type (any type that
3657 has no extra fields). I<type> is the opcode. I<flags> gives the
3658 eight bits of C<op_flags>, and, shifted up eight bits, the eight bits
3665 Perl_newOP(pTHX_ I32 type, I32 flags)
3670 if (type == -OP_ENTEREVAL) {
3671 type = OP_ENTEREVAL;
3672 flags |= OPpEVAL_BYTES<<8;
3675 assert((PL_opargs[type] & OA_CLASS_MASK) == OA_BASEOP
3676 || (PL_opargs[type] & OA_CLASS_MASK) == OA_BASEOP_OR_UNOP
3677 || (PL_opargs[type] & OA_CLASS_MASK) == OA_FILESTATOP
3678 || (PL_opargs[type] & OA_CLASS_MASK) == OA_LOOPEXOP);
3680 NewOp(1101, o, 1, OP);
3681 o->op_type = (OPCODE)type;
3682 o->op_ppaddr = PL_ppaddr[type];
3683 o->op_flags = (U8)flags;
3685 o->op_latefreed = 0;
3689 o->op_private = (U8)(0 | (flags >> 8));
3690 if (PL_opargs[type] & OA_RETSCALAR)
3692 if (PL_opargs[type] & OA_TARGET)
3693 o->op_targ = pad_alloc(type, SVs_PADTMP);
3694 return CHECKOP(type, o);
3698 =for apidoc Am|OP *|newUNOP|I32 type|I32 flags|OP *first
3700 Constructs, checks, and returns an op of any unary type. I<type> is
3701 the opcode. I<flags> gives the eight bits of C<op_flags>, except that
3702 C<OPf_KIDS> will be set automatically if required, and, shifted up eight
3703 bits, the eight bits of C<op_private>, except that the bit with value 1
3704 is automatically set. I<first> supplies an optional op to be the direct
3705 child of the unary op; it is consumed by this function and become part
3706 of the constructed op tree.
3712 Perl_newUNOP(pTHX_ I32 type, I32 flags, OP *first)
3717 if (type == -OP_ENTEREVAL) {
3718 type = OP_ENTEREVAL;
3719 flags |= OPpEVAL_BYTES<<8;
3722 assert((PL_opargs[type] & OA_CLASS_MASK) == OA_UNOP
3723 || (PL_opargs[type] & OA_CLASS_MASK) == OA_BASEOP_OR_UNOP
3724 || (PL_opargs[type] & OA_CLASS_MASK) == OA_FILESTATOP
3725 || (PL_opargs[type] & OA_CLASS_MASK) == OA_LOOPEXOP
3726 || type == OP_SASSIGN
3727 || type == OP_ENTERTRY
3728 || type == OP_NULL );
3731 first = newOP(OP_STUB, 0);
3732 if (PL_opargs[type] & OA_MARK)
3733 first = force_list(first);
3735 NewOp(1101, unop, 1, UNOP);
3736 unop->op_type = (OPCODE)type;
3737 unop->op_ppaddr = PL_ppaddr[type];
3738 unop->op_first = first;
3739 unop->op_flags = (U8)(flags | OPf_KIDS);
3740 unop->op_private = (U8)(1 | (flags >> 8));
3741 unop = (UNOP*) CHECKOP(type, unop);
3745 return fold_constants(op_integerize(op_std_init((OP *) unop)));
3749 =for apidoc Am|OP *|newBINOP|I32 type|I32 flags|OP *first|OP *last
3751 Constructs, checks, and returns an op of any binary type. I<type>
3752 is the opcode. I<flags> gives the eight bits of C<op_flags>, except
3753 that C<OPf_KIDS> will be set automatically, and, shifted up eight bits,
3754 the eight bits of C<op_private>, except that the bit with value 1 or
3755 2 is automatically set as required. I<first> and I<last> supply up to
3756 two ops to be the direct children of the binary op; they are consumed
3757 by this function and become part of the constructed op tree.
3763 Perl_newBINOP(pTHX_ I32 type, I32 flags, OP *first, OP *last)
3768 assert((PL_opargs[type] & OA_CLASS_MASK) == OA_BINOP
3769 || type == OP_SASSIGN || type == OP_NULL );
3771 NewOp(1101, binop, 1, BINOP);
3774 first = newOP(OP_NULL, 0);
3776 binop->op_type = (OPCODE)type;
3777 binop->op_ppaddr = PL_ppaddr[type];
3778 binop->op_first = first;
3779 binop->op_flags = (U8)(flags | OPf_KIDS);
3782 binop->op_private = (U8)(1 | (flags >> 8));
3785 binop->op_private = (U8)(2 | (flags >> 8));
3786 first->op_sibling = last;
3789 binop = (BINOP*)CHECKOP(type, binop);
3790 if (binop->op_next || binop->op_type != (OPCODE)type)
3793 binop->op_last = binop->op_first->op_sibling;
3795 return fold_constants(op_integerize(op_std_init((OP *)binop)));
3798 static int uvcompare(const void *a, const void *b)
3799 __attribute__nonnull__(1)
3800 __attribute__nonnull__(2)
3801 __attribute__pure__;
3802 static int uvcompare(const void *a, const void *b)
3804 if (*((const UV *)a) < (*(const UV *)b))
3806 if (*((const UV *)a) > (*(const UV *)b))
3808 if (*((const UV *)a+1) < (*(const UV *)b+1))
3810 if (*((const UV *)a+1) > (*(const UV *)b+1))
3816 S_pmtrans(pTHX_ OP *o, OP *expr, OP *repl)
3819 SV * const tstr = ((SVOP*)expr)->op_sv;
3822 (repl->op_type == OP_NULL)
3823 ? ((SVOP*)((LISTOP*)repl)->op_first)->op_sv :
3825 ((SVOP*)repl)->op_sv;
3828 const U8 *t = (U8*)SvPV_const(tstr, tlen);
3829 const U8 *r = (U8*)SvPV_const(rstr, rlen);
3833 register short *tbl;
3835 const I32 complement = o->op_private & OPpTRANS_COMPLEMENT;
3836 const I32 squash = o->op_private & OPpTRANS_SQUASH;
3837 I32 del = o->op_private & OPpTRANS_DELETE;
3840 PERL_ARGS_ASSERT_PMTRANS;
3842 PL_hints |= HINT_BLOCK_SCOPE;
3845 o->op_private |= OPpTRANS_FROM_UTF;
3848 o->op_private |= OPpTRANS_TO_UTF;
3850 if (o->op_private & (OPpTRANS_FROM_UTF|OPpTRANS_TO_UTF)) {
3851 SV* const listsv = newSVpvs("# comment\n");
3853 const U8* tend = t + tlen;
3854 const U8* rend = r + rlen;
3868 const I32 from_utf = o->op_private & OPpTRANS_FROM_UTF;
3869 const I32 to_utf = o->op_private & OPpTRANS_TO_UTF;
3872 const U32 flags = UTF8_ALLOW_DEFAULT;
3876 t = tsave = bytes_to_utf8(t, &len);
3879 if (!to_utf && rlen) {
3881 r = rsave = bytes_to_utf8(r, &len);
3885 /* There are several snags with this code on EBCDIC:
3886 1. 0xFF is a legal UTF-EBCDIC byte (there are no illegal bytes).
3887 2. scan_const() in toke.c has encoded chars in native encoding which makes
3888 ranges at least in EBCDIC 0..255 range the bottom odd.
3892 U8 tmpbuf[UTF8_MAXBYTES+1];
3895 Newx(cp, 2*tlen, UV);
3897 transv = newSVpvs("");
3899 cp[2*i] = utf8n_to_uvuni(t, tend-t, &ulen, flags);
3901 if (t < tend && NATIVE_TO_UTF(*t) == 0xff) {
3903 cp[2*i+1] = utf8n_to_uvuni(t, tend-t, &ulen, flags);
3907 cp[2*i+1] = cp[2*i];
3911 qsort(cp, i, 2*sizeof(UV), uvcompare);
3912 for (j = 0; j < i; j++) {
3914 diff = val - nextmin;
3916 t = uvuni_to_utf8(tmpbuf,nextmin);
3917 sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf);
3919 U8 range_mark = UTF_TO_NATIVE(0xff);
3920 t = uvuni_to_utf8(tmpbuf, val - 1);
3921 sv_catpvn(transv, (char *)&range_mark, 1);
3922 sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf);
3929 t = uvuni_to_utf8(tmpbuf,nextmin);
3930 sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf);
3932 U8 range_mark = UTF_TO_NATIVE(0xff);
3933 sv_catpvn(transv, (char *)&range_mark, 1);
3935 t = uvuni_to_utf8(tmpbuf, 0x7fffffff);
3936 sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf);
3937 t = (const U8*)SvPVX_const(transv);
3938 tlen = SvCUR(transv);
3942 else if (!rlen && !del) {
3943 r = t; rlen = tlen; rend = tend;
3946 if ((!rlen && !del) || t == r ||
3947 (tlen == rlen && memEQ((char *)t, (char *)r, tlen)))
3949 o->op_private |= OPpTRANS_IDENTICAL;
3953 while (t < tend || tfirst <= tlast) {
3954 /* see if we need more "t" chars */
3955 if (tfirst > tlast) {
3956 tfirst = (I32)utf8n_to_uvuni(t, tend - t, &ulen, flags);
3958 if (t < tend && NATIVE_TO_UTF(*t) == 0xff) { /* illegal utf8 val indicates range */
3960 tlast = (I32)utf8n_to_uvuni(t, tend - t, &ulen, flags);
3967 /* now see if we need more "r" chars */
3968 if (rfirst > rlast) {
3970 rfirst = (I32)utf8n_to_uvuni(r, rend - r, &ulen, flags);
3972 if (r < rend && NATIVE_TO_UTF(*r) == 0xff) { /* illegal utf8 val indicates range */
3974 rlast = (I32)utf8n_to_uvuni(r, rend - r, &ulen, flags);
3983 rfirst = rlast = 0xffffffff;
3987 /* now see which range will peter our first, if either. */
3988 tdiff = tlast - tfirst;
3989 rdiff = rlast - rfirst;
3996 if (rfirst == 0xffffffff) {
3997 diff = tdiff; /* oops, pretend rdiff is infinite */
3999 Perl_sv_catpvf(aTHX_ listsv, "%04lx\t%04lx\tXXXX\n",
4000 (long)tfirst, (long)tlast);
4002 Perl_sv_catpvf(aTHX_ listsv, "%04lx\t\tXXXX\n", (long)tfirst);
4006 Perl_sv_catpvf(aTHX_ listsv, "%04lx\t%04lx\t%04lx\n",
4007 (long)tfirst, (long)(tfirst + diff),
4010 Perl_sv_catpvf(aTHX_ listsv, "%04lx\t\t%04lx\n",
4011 (long)tfirst, (long)rfirst);
4013 if (rfirst + diff > max)
4014 max = rfirst + diff;
4016 grows = (tfirst < rfirst &&
4017 UNISKIP(tfirst) < UNISKIP(rfirst + diff));
4029 else if (max > 0xff)
4034 swash = MUTABLE_SV(swash_init("utf8", "", listsv, bits, none));
4036 cPADOPo->op_padix = pad_alloc(OP_TRANS, SVs_PADTMP);
4037 SvREFCNT_dec(PAD_SVl(cPADOPo->op_padix));
4038 PAD_SETSV(cPADOPo->op_padix, swash);
4040 SvREADONLY_on(swash);
4042 cSVOPo->op_sv = swash;
4044 SvREFCNT_dec(listsv);
4045 SvREFCNT_dec(transv);
4047 if (!del && havefinal && rlen)
4048 (void)hv_store(MUTABLE_HV(SvRV(swash)), "FINAL", 5,
4049 newSVuv((UV)final), 0);
4052 o->op_private |= OPpTRANS_GROWS;
4058 op_getmad(expr,o,'e');
4059 op_getmad(repl,o,'r');
4067 tbl = (short*)PerlMemShared_calloc(
4068 (o->op_private & OPpTRANS_COMPLEMENT) &&
4069 !(o->op_private & OPpTRANS_DELETE) ? 258 : 256,
4071 cPVOPo->op_pv = (char*)tbl;
4073 for (i = 0; i < (I32)tlen; i++)
4075 for (i = 0, j = 0; i < 256; i++) {
4077 if (j >= (I32)rlen) {
4086 if (i < 128 && r[j] >= 128)
4096 o->op_private |= OPpTRANS_IDENTICAL;
4098 else if (j >= (I32)rlen)
4103 PerlMemShared_realloc(tbl,
4104 (0x101+rlen-j) * sizeof(short));
4105 cPVOPo->op_pv = (char*)tbl;
4107 tbl[0x100] = (short)(rlen - j);
4108 for (i=0; i < (I32)rlen - j; i++)
4109 tbl[0x101+i] = r[j+i];
4113 if (!rlen && !del) {
4116 o->op_private |= OPpTRANS_IDENTICAL;
4118 else if (!squash && rlen == tlen && memEQ((char*)t, (char*)r, tlen)) {
4119 o->op_private |= OPpTRANS_IDENTICAL;
4121 for (i = 0; i < 256; i++)
4123 for (i = 0, j = 0; i < (I32)tlen; i++,j++) {
4124 if (j >= (I32)rlen) {
4126 if (tbl[t[i]] == -1)
4132 if (tbl[t[i]] == -1) {
4133 if (t[i] < 128 && r[j] >= 128)
4140 if(del && rlen == tlen) {
4141 Perl_ck_warner(aTHX_ packWARN(WARN_MISC), "Useless use of /d modifier in transliteration operator");
4142 } else if(rlen > tlen) {
4143 Perl_ck_warner(aTHX_ packWARN(WARN_MISC), "Replacement list is longer than search list");
4147 o->op_private |= OPpTRANS_GROWS;
4149 op_getmad(expr,o,'e');
4150 op_getmad(repl,o,'r');
4160 =for apidoc Am|OP *|newPMOP|I32 type|I32 flags
4162 Constructs, checks, and returns an op of any pattern matching type.
4163 I<type> is the opcode. I<flags> gives the eight bits of C<op_flags>
4164 and, shifted up eight bits, the eight bits of C<op_private>.
4170 Perl_newPMOP(pTHX_ I32 type, I32 flags)
4175 assert((PL_opargs[type] & OA_CLASS_MASK) == OA_PMOP);
4177 NewOp(1101, pmop, 1, PMOP);
4178 pmop->op_type = (OPCODE)type;
4179 pmop->op_ppaddr = PL_ppaddr[type];
4180 pmop->op_flags = (U8)flags;
4181 pmop->op_private = (U8)(0 | (flags >> 8));
4183 if (PL_hints & HINT_RE_TAINT)
4184 pmop->op_pmflags |= PMf_RETAINT;
4185 if (IN_LOCALE_COMPILETIME) {
4186 set_regex_charset(&(pmop->op_pmflags), REGEX_LOCALE_CHARSET);
4188 else if ((! (PL_hints & HINT_BYTES))
4189 /* Both UNI_8_BIT and locale :not_characters imply Unicode */
4190 && (PL_hints & (HINT_UNI_8_BIT|HINT_LOCALE_NOT_CHARS)))
4192 set_regex_charset(&(pmop->op_pmflags), REGEX_UNICODE_CHARSET);
4194 if (PL_hints & HINT_RE_FLAGS) {
4195 SV *reflags = Perl_refcounted_he_fetch_pvn(aTHX_
4196 PL_compiling.cop_hints_hash, STR_WITH_LEN("reflags"), 0, 0
4198 if (reflags && SvOK(reflags)) pmop->op_pmflags |= SvIV(reflags);
4199 reflags = Perl_refcounted_he_fetch_pvn(aTHX_
4200 PL_compiling.cop_hints_hash, STR_WITH_LEN("reflags_charset"), 0, 0
4202 if (reflags && SvOK(reflags)) {
4203 set_regex_charset(&(pmop->op_pmflags), (regex_charset)SvIV(reflags));
4209 assert(SvPOK(PL_regex_pad[0]));
4210 if (SvCUR(PL_regex_pad[0])) {
4211 /* Pop off the "packed" IV from the end. */
4212 SV *const repointer_list = PL_regex_pad[0];
4213 const char *p = SvEND(repointer_list) - sizeof(IV);
4214 const IV offset = *((IV*)p);
4216 assert(SvCUR(repointer_list) % sizeof(IV) == 0);
4218 SvEND_set(repointer_list, p);
4220 pmop->op_pmoffset = offset;
4221 /* This slot should be free, so assert this: */
4222 assert(PL_regex_pad[offset] == &PL_sv_undef);
4224 SV * const repointer = &PL_sv_undef;
4225 av_push(PL_regex_padav, repointer);
4226 pmop->op_pmoffset = av_len(PL_regex_padav);
4227 PL_regex_pad = AvARRAY(PL_regex_padav);
4231 return CHECKOP(type, pmop);
4234 /* Given some sort of match op o, and an expression expr containing a
4235 * pattern, either compile expr into a regex and attach it to o (if it's
4236 * constant), or convert expr into a runtime regcomp op sequence (if it's
4239 * isreg indicates that the pattern is part of a regex construct, eg
4240 * $x =~ /pattern/ or split /pattern/, as opposed to $x =~ $pattern or
4241 * split "pattern", which aren't. In the former case, expr will be a list
4242 * if the pattern contains more than one term (eg /a$b/) or if it contains
4243 * a replacement, ie s/// or tr///.
4245 * When the pattern has been compiled within a new anon CV (for
4246 * qr/(?{...})/ ), then floor indicates the savestack level just before
4247 * the new sub was created
4251 Perl_pmruntime(pTHX_ OP *o, OP *expr, bool isreg, I32 floor)
4256 I32 repl_has_vars = 0;
4258 bool is_trans = (o->op_type == OP_TRANS || o->op_type == OP_TRANSR);
4259 bool is_compiletime;
4262 PERL_ARGS_ASSERT_PMRUNTIME;
4264 /* for s/// and tr///, last element in list is the replacement; pop it */
4266 if (is_trans || o->op_type == OP_SUBST) {
4268 repl = cLISTOPx(expr)->op_last;
4269 kid = cLISTOPx(expr)->op_first;
4270 while (kid->op_sibling != repl)
4271 kid = kid->op_sibling;
4272 kid->op_sibling = NULL;
4273 cLISTOPx(expr)->op_last = kid;
4276 /* for TRANS, convert LIST/PUSH/CONST into CONST, and pass to pmtrans() */
4279 OP* const oe = expr;
4280 assert(expr->op_type == OP_LIST);
4281 assert(cLISTOPx(expr)->op_first->op_type == OP_PUSHMARK);
4282 assert(cLISTOPx(expr)->op_first->op_sibling == cLISTOPx(expr)->op_last);
4283 expr = cLISTOPx(oe)->op_last;
4284 cLISTOPx(oe)->op_first->op_sibling = NULL;
4285 cLISTOPx(oe)->op_last = NULL;
4288 return pmtrans(o, expr, repl);
4291 /* find whether we have any runtime or code elements;
4292 * at the same time, temporarily set the op_next of each DO block;
4293 * then when we LINKLIST, this will cause the DO blocks to be excluded
4294 * from the op_next chain (and from having LINKLIST recursively
4295 * applied to them). We fix up the DOs specially later */
4299 if (expr->op_type == OP_LIST) {
4301 for (o = cLISTOPx(expr)->op_first; o; o = o->op_sibling) {
4302 if (o->op_type == OP_NULL && (o->op_flags & OPf_SPECIAL)) {
4304 assert(!o->op_next && o->op_sibling);
4305 o->op_next = o->op_sibling;
4307 else if (o->op_type != OP_CONST && o->op_type != OP_PUSHMARK)
4311 else if (expr->op_type != OP_CONST)
4316 /* fix up DO blocks; treat each one as a separate little sub */
4318 if (expr->op_type == OP_LIST) {
4320 for (o = cLISTOPx(expr)->op_first; o; o = o->op_sibling) {
4321 if (!(o->op_type == OP_NULL && (o->op_flags & OPf_SPECIAL)))
4323 o->op_next = NULL; /* undo temporary hack from above */
4326 if (cLISTOPo->op_first->op_type == OP_LEAVE) {
4327 LISTOP *leave = cLISTOPx(cLISTOPo->op_first);
4329 assert(leave->op_first->op_type == OP_ENTER);
4330 assert(leave->op_first->op_sibling);
4331 o->op_next = leave->op_first->op_sibling;
4333 assert(leave->op_flags & OPf_KIDS);
4334 assert(leave->op_last->op_next = (OP*)leave);
4335 leave->op_next = NULL; /* stop on last op */
4336 op_null((OP*)leave);
4340 OP *scope = cLISTOPo->op_first;
4341 assert(scope->op_type == OP_SCOPE);
4342 assert(scope->op_flags & OPf_KIDS);
4343 scope->op_next = NULL; /* stop on last op */
4346 /* have to peep the DOs individually as we've removed it from
4347 * the op_next chain */
4350 /* runtime finalizes as part of finalizing whole tree */
4355 PL_hints |= HINT_BLOCK_SCOPE;
4357 assert(floor==0 || (pm->op_pmflags & PMf_HAS_CV));
4359 if (is_compiletime) {
4360 U32 rx_flags = pm->op_pmflags & RXf_PMf_COMPILETIME;
4361 regexp_engine const *eng = current_re_engine();
4363 if (o->op_flags & OPf_SPECIAL)
4364 rx_flags |= RXf_SPLIT;
4366 if (!has_code || !eng->op_comp) {
4367 /* compile-time simple constant pattern */
4369 if ((pm->op_pmflags & PMf_HAS_CV) && !has_code) {
4370 /* whoops! we guessed that a qr// had a code block, but we
4371 * were wrong (e.g. /[(?{}]/ ). Throw away the PL_compcv
4372 * that isn't required now. Note that we have to be pretty
4373 * confident that nothing used that CV's pad while the
4374 * regex was parsed */
4375 assert(AvFILLp(PL_comppad) == 0); /* just @_ */
4377 pm->op_pmflags &= ~PMf_HAS_CV;
4382 ? eng->op_comp(aTHX_ NULL, 0, expr, eng, NULL, NULL,
4383 rx_flags, pm->op_pmflags)
4384 : Perl_re_op_compile(aTHX_ NULL, 0, expr, eng, NULL, NULL,
4385 rx_flags, pm->op_pmflags)
4388 op_getmad(expr,(OP*)pm,'e');
4394 /* compile-time pattern that includes literal code blocks */
4395 REGEXP* re = eng->op_comp(aTHX_ NULL, 0, expr, eng, NULL, NULL,
4398 ((PL_hints & HINT_RE_EVAL) ? PMf_USE_RE_EVAL : 0))
4401 if (pm->op_pmflags & PMf_HAS_CV) {
4403 /* this QR op (and the anon sub we embed it in) is never
4404 * actually executed. It's just a placeholder where we can
4405 * squirrel away expr in op_code_list without the peephole
4406 * optimiser etc processing it for a second time */
4407 OP *qr = newPMOP(OP_QR, 0);
4408 ((PMOP*)qr)->op_code_list = expr;
4410 /* handle the implicit sub{} wrapped round the qr/(?{..})/ */
4411 SvREFCNT_inc_simple_void(PL_compcv);
4412 cv = newATTRSUB(floor, 0, NULL, NULL, qr);
4413 ((struct regexp *)SvANY(re))->qr_anoncv = cv;
4415 /* attach the anon CV to the pad so that
4416 * pad_fixup_inner_anons() can find it */
4417 (void)pad_add_anon(cv, o->op_type);
4418 SvREFCNT_inc_simple_void(cv);
4421 pm->op_code_list = expr;
4426 /* runtime pattern: build chain of regcomp etc ops */
4428 PADOFFSET cv_targ = 0;
4430 reglist = isreg && expr->op_type == OP_LIST;
4435 pm->op_code_list = expr;
4436 /* don't free op_code_list; its ops are embedded elsewhere too */
4437 pm->op_pmflags |= PMf_CODELIST_PRIVATE;
4440 /* the OP_REGCMAYBE is a placeholder in the non-threaded case
4441 * to allow its op_next to be pointed past the regcomp and
4442 * preceding stacking ops;
4443 * OP_REGCRESET is there to reset taint before executing the
4445 if (pm->op_pmflags & PMf_KEEP || PL_tainting)
4446 expr = newUNOP((PL_tainting ? OP_REGCRESET : OP_REGCMAYBE),0,expr);
4448 if (pm->op_pmflags & PMf_HAS_CV) {
4449 /* we have a runtime qr with literal code. This means
4450 * that the qr// has been wrapped in a new CV, which
4451 * means that runtime consts, vars etc will have been compiled
4452 * against a new pad. So... we need to execute those ops
4453 * within the environment of the new CV. So wrap them in a call
4454 * to a new anon sub. i.e. for
4458 * we build an anon sub that looks like
4460 * sub { "a", $b, '(?{...})' }
4462 * and call it, passing the returned list to regcomp.
4463 * Or to put it another way, the list of ops that get executed
4467 * ------ -------------------
4468 * pushmark (for regcomp)
4469 * pushmark (for entersub)
4470 * pushmark (for refgen)
4474 * regcreset regcreset
4476 * const("a") const("a")
4478 * const("(?{...})") const("(?{...})")
4483 SvREFCNT_inc_simple_void(PL_compcv);
4484 /* these lines are just an unrolled newANONATTRSUB */
4485 expr = newSVOP(OP_ANONCODE, 0,
4486 MUTABLE_SV(newATTRSUB(floor, 0, NULL, NULL, expr)));
4487 cv_targ = expr->op_targ;
4488 expr = newUNOP(OP_REFGEN, 0, expr);
4490 expr = list(force_list(newUNOP(OP_ENTERSUB, 0, scalar(expr))));
4493 NewOp(1101, rcop, 1, LOGOP);
4494 rcop->op_type = OP_REGCOMP;
4495 rcop->op_ppaddr = PL_ppaddr[OP_REGCOMP];
4496 rcop->op_first = scalar(expr);
4497 rcop->op_flags |= OPf_KIDS
4498 | ((PL_hints & HINT_RE_EVAL) ? OPf_SPECIAL : 0)
4499 | (reglist ? OPf_STACKED : 0);
4500 rcop->op_private = 0;
4502 rcop->op_targ = cv_targ;
4504 /* /$x/ may cause an eval, since $x might be qr/(?{..})/ */
4505 if (PL_hints & HINT_RE_EVAL) PL_cv_has_eval = 1;
4507 /* establish postfix order */
4508 if (expr->op_type == OP_REGCRESET || expr->op_type == OP_REGCMAYBE) {
4510 rcop->op_next = expr;
4511 ((UNOP*)expr)->op_first->op_next = (OP*)rcop;
4514 rcop->op_next = LINKLIST(expr);
4515 expr->op_next = (OP*)rcop;
4518 op_prepend_elem(o->op_type, scalar((OP*)rcop), o);
4523 if (pm->op_pmflags & PMf_EVAL) {
4525 if (CopLINE(PL_curcop) < (line_t)PL_parser->multi_end)
4526 CopLINE_set(PL_curcop, (line_t)PL_parser->multi_end);
4528 else if (repl->op_type == OP_CONST)
4532 for (curop = LINKLIST(repl); curop!=repl; curop = LINKLIST(curop)) {
4533 if (curop->op_type == OP_SCOPE
4534 || curop->op_type == OP_LEAVE
4535 || (PL_opargs[curop->op_type] & OA_DANGEROUS)) {
4536 if (curop->op_type == OP_GV) {
4537 GV * const gv = cGVOPx_gv(curop);
4539 if (strchr("&`'123456789+-\016\022", *GvENAME(gv)))
4542 else if (curop->op_type == OP_RV2CV)
4544 else if (curop->op_type == OP_RV2SV ||
4545 curop->op_type == OP_RV2AV ||
4546 curop->op_type == OP_RV2HV ||
4547 curop->op_type == OP_RV2GV) {
4548 if (lastop && lastop->op_type != OP_GV) /*funny deref?*/
4551 else if (curop->op_type == OP_PADSV ||
4552 curop->op_type == OP_PADAV ||
4553 curop->op_type == OP_PADHV ||
4554 curop->op_type == OP_PADANY)
4558 else if (curop->op_type == OP_PUSHRE)
4559 NOOP; /* Okay here, dangerous in newASSIGNOP */
4569 || RX_EXTFLAGS(PM_GETRE(pm)) & RXf_EVAL_SEEN)))
4571 pm->op_pmflags |= PMf_CONST; /* const for long enough */
4572 op_prepend_elem(o->op_type, scalar(repl), o);
4575 if (curop == repl && !PM_GETRE(pm)) { /* Has variables. */
4576 pm->op_pmflags |= PMf_MAYBE_CONST;
4578 NewOp(1101, rcop, 1, LOGOP);
4579 rcop->op_type = OP_SUBSTCONT;
4580 rcop->op_ppaddr = PL_ppaddr[OP_SUBSTCONT];
4581 rcop->op_first = scalar(repl);
4582 rcop->op_flags |= OPf_KIDS;
4583 rcop->op_private = 1;
4586 /* establish postfix order */
4587 rcop->op_next = LINKLIST(repl);
4588 repl->op_next = (OP*)rcop;
4590 pm->op_pmreplrootu.op_pmreplroot = scalar((OP*)rcop);
4591 assert(!(pm->op_pmflags & PMf_ONCE));
4592 pm->op_pmstashstartu.op_pmreplstart = LINKLIST(rcop);
4601 =for apidoc Am|OP *|newSVOP|I32 type|I32 flags|SV *sv
4603 Constructs, checks, and returns an op of any type that involves an
4604 embedded SV. I<type> is the opcode. I<flags> gives the eight bits
4605 of C<op_flags>. I<sv> gives the SV to embed in the op; this function
4606 takes ownership of one reference to it.
4612 Perl_newSVOP(pTHX_ I32 type, I32 flags, SV *sv)
4617 PERL_ARGS_ASSERT_NEWSVOP;
4619 assert((PL_opargs[type] & OA_CLASS_MASK) == OA_SVOP
4620 || (PL_opargs[type] & OA_CLASS_MASK) == OA_PVOP_OR_SVOP
4621 || (PL_opargs[type] & OA_CLASS_MASK) == OA_FILESTATOP);
4623 NewOp(1101, svop, 1, SVOP);
4624 svop->op_type = (OPCODE)type;
4625 svop->op_ppaddr = PL_ppaddr[type];
4627 svop->op_next = (OP*)svop;
4628 svop->op_flags = (U8)flags;
4629 if (PL_opargs[type] & OA_RETSCALAR)
4631 if (PL_opargs[type] & OA_TARGET)
4632 svop->op_targ = pad_alloc(type, SVs_PADTMP);
4633 return CHECKOP(type, svop);
4639 =for apidoc Am|OP *|newPADOP|I32 type|I32 flags|SV *sv
4641 Constructs, checks, and returns an op of any type that involves a
4642 reference to a pad element. I<type> is the opcode. I<flags> gives the
4643 eight bits of C<op_flags>. A pad slot is automatically allocated, and
4644 is populated with I<sv>; this function takes ownership of one reference
4647 This function only exists if Perl has been compiled to use ithreads.
4653 Perl_newPADOP(pTHX_ I32 type, I32 flags, SV *sv)
4658 PERL_ARGS_ASSERT_NEWPADOP;
4660 assert((PL_opargs[type] & OA_CLASS_MASK) == OA_SVOP
4661 || (PL_opargs[type] & OA_CLASS_MASK) == OA_PVOP_OR_SVOP
4662 || (PL_opargs[type] & OA_CLASS_MASK) == OA_FILESTATOP);
4664 NewOp(1101, padop, 1, PADOP);
4665 padop->op_type = (OPCODE)type;
4666 padop->op_ppaddr = PL_ppaddr[type];
4667 padop->op_padix = pad_alloc(type, SVs_PADTMP);
4668 SvREFCNT_dec(PAD_SVl(padop->op_padix));
4669 PAD_SETSV(padop->op_padix, sv);
4672 padop->op_next = (OP*)padop;
4673 padop->op_flags = (U8)flags;
4674 if (PL_opargs[type] & OA_RETSCALAR)
4676 if (PL_opargs[type] & OA_TARGET)
4677 padop->op_targ = pad_alloc(type, SVs_PADTMP);
4678 return CHECKOP(type, padop);
4681 #endif /* !USE_ITHREADS */
4684 =for apidoc Am|OP *|newGVOP|I32 type|I32 flags|GV *gv
4686 Constructs, checks, and returns an op of any type that involves an
4687 embedded reference to a GV. I<type> is the opcode. I<flags> gives the
4688 eight bits of C<op_flags>. I<gv> identifies the GV that the op should
4689 reference; calling this function does not transfer ownership of any
4696 Perl_newGVOP(pTHX_ I32 type, I32 flags, GV *gv)
4700 PERL_ARGS_ASSERT_NEWGVOP;
4704 return newPADOP(type, flags, SvREFCNT_inc_simple_NN(gv));
4706 return newSVOP(type, flags, SvREFCNT_inc_simple_NN(gv));
4711 =for apidoc Am|OP *|newPVOP|I32 type|I32 flags|char *pv
4713 Constructs, checks, and returns an op of any type that involves an
4714 embedded C-level pointer (PV). I<type> is the opcode. I<flags> gives
4715 the eight bits of C<op_flags>. I<pv> supplies the C-level pointer, which
4716 must have been allocated using L</PerlMemShared_malloc>; the memory will
4717 be freed when the op is destroyed.
4723 Perl_newPVOP(pTHX_ I32 type, I32 flags, char *pv)
4726 const bool utf8 = cBOOL(flags & SVf_UTF8);
4731 assert((PL_opargs[type] & OA_CLASS_MASK) == OA_PVOP_OR_SVOP
4733 || (PL_opargs[type] & OA_CLASS_MASK) == OA_LOOPEXOP);
4735 NewOp(1101, pvop, 1, PVOP);
4736 pvop->op_type = (OPCODE)type;
4737 pvop->op_ppaddr = PL_ppaddr[type];
4739 pvop->op_next = (OP*)pvop;
4740 pvop->op_flags = (U8)flags;
4741 pvop->op_private = utf8 ? OPpPV_IS_UTF8 : 0;
4742 if (PL_opargs[type] & OA_RETSCALAR)
4744 if (PL_opargs[type] & OA_TARGET)
4745 pvop->op_targ = pad_alloc(type, SVs_PADTMP);
4746 return CHECKOP(type, pvop);
4754 Perl_package(pTHX_ OP *o)
4757 SV *const sv = cSVOPo->op_sv;
4762 PERL_ARGS_ASSERT_PACKAGE;
4764 SAVEGENERICSV(PL_curstash);
4765 save_item(PL_curstname);
4767 PL_curstash = (HV *)SvREFCNT_inc(gv_stashsv(sv, GV_ADD));
4769 sv_setsv(PL_curstname, sv);
4771 PL_hints |= HINT_BLOCK_SCOPE;
4772 PL_parser->copline = NOLINE;
4773 PL_parser->expect = XSTATE;
4778 if (!PL_madskills) {
4783 pegop = newOP(OP_NULL,0);
4784 op_getmad(o,pegop,'P');
4790 Perl_package_version( pTHX_ OP *v )
4793 U32 savehints = PL_hints;
4794 PERL_ARGS_ASSERT_PACKAGE_VERSION;
4795 PL_hints &= ~HINT_STRICT_VARS;
4796 sv_setsv( GvSV(gv_fetchpvs("VERSION", GV_ADDMULTI, SVt_PV)), cSVOPx(v)->op_sv );
4797 PL_hints = savehints;
4806 Perl_utilize(pTHX_ int aver, I32 floor, OP *version, OP *idop, OP *arg)
4813 OP *pegop = PL_madskills ? newOP(OP_NULL,0) : NULL;
4815 SV *use_version = NULL;
4817 PERL_ARGS_ASSERT_UTILIZE;
4819 if (idop->op_type != OP_CONST)
4820 Perl_croak(aTHX_ "Module name must be constant");
4823 op_getmad(idop,pegop,'U');
4828 SV * const vesv = ((SVOP*)version)->op_sv;
4831 op_getmad(version,pegop,'V');
4832 if (!arg && !SvNIOKp(vesv)) {
4839 if (version->op_type != OP_CONST || !SvNIOKp(vesv))
4840 Perl_croak(aTHX_ "Version number must be a constant number");
4842 /* Make copy of idop so we don't free it twice */
4843 pack = newSVOP(OP_CONST, 0, newSVsv(((SVOP*)idop)->op_sv));
4845 /* Fake up a method call to VERSION */
4846 meth = newSVpvs_share("VERSION");
4847 veop = convert(OP_ENTERSUB, OPf_STACKED|OPf_SPECIAL,
4848 op_append_elem(OP_LIST,
4849 op_prepend_elem(OP_LIST, pack, list(version)),
4850 newSVOP(OP_METHOD_NAMED, 0, meth)));
4854 /* Fake up an import/unimport */
4855 if (arg && arg->op_type == OP_STUB) {
4857 op_getmad(arg,pegop,'S');
4858 imop = arg; /* no import on explicit () */
4860 else if (SvNIOKp(((SVOP*)idop)->op_sv)) {
4861 imop = NULL; /* use 5.0; */
4863 use_version = ((SVOP*)idop)->op_sv;
4865 idop->op_private |= OPpCONST_NOVER;
4871 op_getmad(arg,pegop,'A');
4873 /* Make copy of idop so we don't free it twice */
4874 pack = newSVOP(OP_CONST, 0, newSVsv(((SVOP*)idop)->op_sv));
4876 /* Fake up a method call to import/unimport */
4878 ? newSVpvs_share("import") : newSVpvs_share("unimport");
4879 imop = convert(OP_ENTERSUB, OPf_STACKED|OPf_SPECIAL,
4880 op_append_elem(OP_LIST,
4881 op_prepend_elem(OP_LIST, pack, list(arg)),
4882 newSVOP(OP_METHOD_NAMED, 0, meth)));
4885 /* Fake up the BEGIN {}, which does its thing immediately. */
4887 newSVOP(OP_CONST, 0, newSVpvs_share("BEGIN")),
4890 op_append_elem(OP_LINESEQ,
4891 op_append_elem(OP_LINESEQ,
4892 newSTATEOP(0, NULL, newUNOP(OP_REQUIRE, 0, idop)),
4893 newSTATEOP(0, NULL, veop)),
4894 newSTATEOP(0, NULL, imop) ));
4898 * feature bundle that corresponds to the required version. */
4899 use_version = sv_2mortal(new_version(use_version));
4900 S_enable_feature_bundle(aTHX_ use_version);
4902 /* If a version >= 5.11.0 is requested, strictures are on by default! */
4903 if (vcmp(use_version,
4904 sv_2mortal(upg_version(newSVnv(5.011000), FALSE))) >= 0) {
4905 if (!(PL_hints & HINT_EXPLICIT_STRICT_REFS))
4906 PL_hints |= HINT_STRICT_REFS;
4907 if (!(PL_hints & HINT_EXPLICIT_STRICT_SUBS))
4908 PL_hints |= HINT_STRICT_SUBS;
4909 if (!(PL_hints & HINT_EXPLICIT_STRICT_VARS))
4910 PL_hints |= HINT_STRICT_VARS;
4912 /* otherwise they are off */
4914 if (!(PL_hints & HINT_EXPLICIT_STRICT_REFS))
4915 PL_hints &= ~HINT_STRICT_REFS;
4916 if (!(PL_hints & HINT_EXPLICIT_STRICT_SUBS))
4917 PL_hints &= ~HINT_STRICT_SUBS;
4918 if (!(PL_hints & HINT_EXPLICIT_STRICT_VARS))
4919 PL_hints &= ~HINT_STRICT_VARS;
4923 /* The "did you use incorrect case?" warning used to be here.
4924 * The problem is that on case-insensitive filesystems one
4925 * might get false positives for "use" (and "require"):
4926 * "use Strict" or "require CARP" will work. This causes
4927 * portability problems for the script: in case-strict
4928 * filesystems the script will stop working.
4930 * The "incorrect case" warning checked whether "use Foo"
4931 * imported "Foo" to your namespace, but that is wrong, too:
4932 * there is no requirement nor promise in the language that
4933 * a Foo.pm should or would contain anything in package "Foo".
4935 * There is very little Configure-wise that can be done, either:
4936 * the case-sensitivity of the build filesystem of Perl does not
4937 * help in guessing the case-sensitivity of the runtime environment.
4940 PL_hints |= HINT_BLOCK_SCOPE;
4941 PL_parser->copline = NOLINE;
4942 PL_parser->expect = XSTATE;
4943 PL_cop_seqmax++; /* Purely for B::*'s benefit */
4944 if (PL_cop_seqmax == PERL_PADSEQ_INTRO) /* not a legal value */
4953 =head1 Embedding Functions
4955 =for apidoc load_module
4957 Loads the module whose name is pointed to by the string part of name.
4958 Note that the actual module name, not its filename, should be given.
4959 Eg, "Foo::Bar" instead of "Foo/Bar.pm". flags can be any of
4960 PERL_LOADMOD_DENY, PERL_LOADMOD_NOIMPORT, or PERL_LOADMOD_IMPORT_OPS
4961 (or 0 for no flags). ver, if specified and not NULL, provides version semantics
4962 similar to C<use Foo::Bar VERSION>. The optional trailing SV*
4963 arguments can be used to specify arguments to the module's import()
4964 method, similar to C<use Foo::Bar VERSION LIST>. They must be
4965 terminated with a final NULL pointer. Note that this list can only
4966 be omitted when the PERL_LOADMOD_NOIMPORT flag has been used.
4967 Otherwise at least a single NULL pointer to designate the default
4968 import list is required.
4970 The reference count for each specified C<SV*> parameter is decremented.
4975 Perl_load_module(pTHX_ U32 flags, SV *name, SV *ver, ...)
4979 PERL_ARGS_ASSERT_LOAD_MODULE;
4981 va_start(args, ver);
4982 vload_module(flags, name, ver, &args);
4986 #ifdef PERL_IMPLICIT_CONTEXT
4988 Perl_load_module_nocontext(U32 flags, SV *name, SV *ver, ...)
4992 PERL_ARGS_ASSERT_LOAD_MODULE_NOCONTEXT;
4993 va_start(args, ver);
4994 vload_module(flags, name, ver, &args);
5000 Perl_vload_module(pTHX_ U32 flags, SV *name, SV *ver, va_list *args)
5004 OP * const modname = newSVOP(OP_CONST, 0, name);
5006 PERL_ARGS_ASSERT_VLOAD_MODULE;
5008 modname->op_private |= OPpCONST_BARE;
5010 veop = newSVOP(OP_CONST, 0, ver);
5014 if (flags & PERL_LOADMOD_NOIMPORT) {
5015 imop = sawparens(newNULLLIST());
5017 else if (flags & PERL_LOADMOD_IMPORT_OPS) {
5018 imop = va_arg(*args, OP*);
5023 sv = va_arg(*args, SV*);
5025 imop = op_append_elem(OP_LIST, imop, newSVOP(OP_CONST, 0, sv));
5026 sv = va_arg(*args, SV*);
5030 /* utilize() fakes up a BEGIN { require ..; import ... }, so make sure
5031 * that it has a PL_parser to play with while doing that, and also
5032 * that it doesn't mess with any existing parser, by creating a tmp
5033 * new parser with lex_start(). This won't actually be used for much,
5034 * since pp_require() will create another parser for the real work. */
5037 SAVEVPTR(PL_curcop);
5038 lex_start(NULL, NULL, LEX_START_SAME_FILTER);
5039 utilize(!(flags & PERL_LOADMOD_DENY), start_subparse(FALSE, 0),
5040 veop, modname, imop);
5045 Perl_dofile(pTHX_ OP *term, I32 force_builtin)
5051 PERL_ARGS_ASSERT_DOFILE;
5053 if (!force_builtin) {
5054 gv = gv_fetchpvs("do", GV_NOTQUAL, SVt_PVCV);
5055 if (!(gv && GvCVu(gv) && GvIMPORTED_CV(gv))) {
5056 GV * const * const gvp = (GV**)hv_fetchs(PL_globalstash, "do", FALSE);
5057 gv = gvp ? *gvp : NULL;
5061 if (gv && GvCVu(gv) && GvIMPORTED_CV(gv)) {
5062 doop = newUNOP(OP_ENTERSUB, OPf_STACKED,
5063 op_append_elem(OP_LIST, term,
5064 scalar(newUNOP(OP_RV2CV, 0,
5065 newGVOP(OP_GV, 0, gv)))));
5068 doop = newUNOP(OP_DOFILE, 0, scalar(term));
5074 =head1 Optree construction
5076 =for apidoc Am|OP *|newSLICEOP|I32 flags|OP *subscript|OP *listval
5078 Constructs, checks, and returns an C<lslice> (list slice) op. I<flags>
5079 gives the eight bits of C<op_flags>, except that C<OPf_KIDS> will
5080 be set automatically, and, shifted up eight bits, the eight bits of
5081 C<op_private>, except that the bit with value 1 or 2 is automatically
5082 set as required. I<listval> and I<subscript> supply the parameters of
5083 the slice; they are consumed by this function and become part of the
5084 constructed op tree.
5090 Perl_newSLICEOP(pTHX_ I32 flags, OP *subscript, OP *listval)
5092 return newBINOP(OP_LSLICE, flags,
5093 list(force_list(subscript)),
5094 list(force_list(listval)) );
5098 S_is_list_assignment(pTHX_ register const OP *o)
5106 if ((o->op_type == OP_NULL) && (o->op_flags & OPf_KIDS))
5107 o = cUNOPo->op_first;
5109 flags = o->op_flags;
5111 if (type == OP_COND_EXPR) {
5112 const I32 t = is_list_assignment(cLOGOPo->op_first->op_sibling);
5113 const I32 f = is_list_assignment(cLOGOPo->op_first->op_sibling->op_sibling);
5118 yyerror("Assignment to both a list and a scalar");
5122 if (type == OP_LIST &&
5123 (flags & OPf_WANT) == OPf_WANT_SCALAR &&
5124 o->op_private & OPpLVAL_INTRO)
5127 if (type == OP_LIST || flags & OPf_PARENS ||
5128 type == OP_RV2AV || type == OP_RV2HV ||
5129 type == OP_ASLICE || type == OP_HSLICE)
5132 if (type == OP_PADAV || type == OP_PADHV)
5135 if (type == OP_RV2SV)
5142 Helper function for newASSIGNOP to detection commonality between the
5143 lhs and the rhs. Marks all variables with PL_generation. If it
5144 returns TRUE the assignment must be able to handle common variables.
5146 PERL_STATIC_INLINE bool
5147 S_aassign_common_vars(pTHX_ OP* o)
5150 for (curop = cUNOPo->op_first; curop; curop=curop->op_sibling) {
5151 if (PL_opargs[curop->op_type] & OA_DANGEROUS) {
5152 if (curop->op_type == OP_GV) {
5153 GV *gv = cGVOPx_gv(curop);
5155 || (int)GvASSIGN_GENERATION(gv) == PL_generation)
5157 GvASSIGN_GENERATION_set(gv, PL_generation);
5159 else if (curop->op_type == OP_PADSV ||
5160 curop->op_type == OP_PADAV ||
5161 curop->op_type == OP_PADHV ||
5162 curop->op_type == OP_PADANY)
5164 if (PAD_COMPNAME_GEN(curop->op_targ)
5165 == (STRLEN)PL_generation)
5167 PAD_COMPNAME_GEN_set(curop->op_targ, PL_generation);
5170 else if (curop->op_type == OP_RV2CV)
5172 else if (curop->op_type == OP_RV2SV ||
5173 curop->op_type == OP_RV2AV ||
5174 curop->op_type == OP_RV2HV ||
5175 curop->op_type == OP_RV2GV) {
5176 if (cUNOPx(curop)->op_first->op_type != OP_GV) /* funny deref? */
5179 else if (curop->op_type == OP_PUSHRE) {
5181 if (((PMOP*)curop)->op_pmreplrootu.op_pmtargetoff) {
5182 GV *const gv = MUTABLE_GV(PAD_SVl(((PMOP*)curop)->op_pmreplrootu.op_pmtargetoff));
5184 || (int)GvASSIGN_GENERATION(gv) == PL_generation)
5186 GvASSIGN_GENERATION_set(gv, PL_generation);
5190 = ((PMOP*)curop)->op_pmreplrootu.op_pmtargetgv;
5193 || (int)GvASSIGN_GENERATION(gv) == PL_generation)
5195 GvASSIGN_GENERATION_set(gv, PL_generation);
5203 if (curop->op_flags & OPf_KIDS) {
5204 if (aassign_common_vars(curop))
5212 =for apidoc Am|OP *|newASSIGNOP|I32 flags|OP *left|I32 optype|OP *right
5214 Constructs, checks, and returns an assignment op. I<left> and I<right>
5215 supply the parameters of the assignment; they are consumed by this
5216 function and become part of the constructed op tree.
5218 If I<optype> is C<OP_ANDASSIGN>, C<OP_ORASSIGN>, or C<OP_DORASSIGN>, then
5219 a suitable conditional optree is constructed. If I<optype> is the opcode
5220 of a binary operator, such as C<OP_BIT_OR>, then an op is constructed that
5221 performs the binary operation and assigns the result to the left argument.
5222 Either way, if I<optype> is non-zero then I<flags> has no effect.
5224 If I<optype> is zero, then a plain scalar or list assignment is
5225 constructed. Which type of assignment it is is automatically determined.
5226 I<flags> gives the eight bits of C<op_flags>, except that C<OPf_KIDS>
5227 will be set automatically, and, shifted up eight bits, the eight bits
5228 of C<op_private>, except that the bit with value 1 or 2 is automatically
5235 Perl_newASSIGNOP(pTHX_ I32 flags, OP *left, I32 optype, OP *right)
5241 if (optype == OP_ANDASSIGN || optype == OP_ORASSIGN || optype == OP_DORASSIGN) {
5242 return newLOGOP(optype, 0,
5243 op_lvalue(scalar(left), optype),
5244 newUNOP(OP_SASSIGN, 0, scalar(right)));
5247 return newBINOP(optype, OPf_STACKED,
5248 op_lvalue(scalar(left), optype), scalar(right));
5252 if (is_list_assignment(left)) {
5253 static const char no_list_state[] = "Initialization of state variables"
5254 " in list context currently forbidden";
5256 bool maybe_common_vars = TRUE;
5259 left = op_lvalue(left, OP_AASSIGN);
5260 curop = list(force_list(left));
5261 o = newBINOP(OP_AASSIGN, flags, list(force_list(right)), curop);
5262 o->op_private = (U8)(0 | (flags >> 8));
5264 if ((left->op_type == OP_LIST
5265 || (left->op_type == OP_NULL && left->op_targ == OP_LIST)))
5267 OP* lop = ((LISTOP*)left)->op_first;
5268 maybe_common_vars = FALSE;
5270 if (lop->op_type == OP_PADSV ||
5271 lop->op_type == OP_PADAV ||
5272 lop->op_type == OP_PADHV ||
5273 lop->op_type == OP_PADANY) {
5274 if (!(lop->op_private & OPpLVAL_INTRO))
5275 maybe_common_vars = TRUE;
5277 if (lop->op_private & OPpPAD_STATE) {
5278 if (left->op_private & OPpLVAL_INTRO) {
5279 /* Each variable in state($a, $b, $c) = ... */
5282 /* Each state variable in
5283 (state $a, my $b, our $c, $d, undef) = ... */
5285 yyerror(no_list_state);
5287 /* Each my variable in
5288 (state $a, my $b, our $c, $d, undef) = ... */
5290 } else if (lop->op_type == OP_UNDEF ||
5291 lop->op_type == OP_PUSHMARK) {
5292 /* undef may be interesting in
5293 (state $a, undef, state $c) */
5295 /* Other ops in the list. */
5296 maybe_common_vars = TRUE;
5298 lop = lop->op_sibling;
5301 else if ((left->op_private & OPpLVAL_INTRO)
5302 && ( left->op_type == OP_PADSV
5303 || left->op_type == OP_PADAV
5304 || left->op_type == OP_PADHV
5305 || left->op_type == OP_PADANY))
5307 if (left->op_type == OP_PADSV) maybe_common_vars = FALSE;
5308 if (left->op_private & OPpPAD_STATE) {
5309 /* All single variable list context state assignments, hence
5319 yyerror(no_list_state);
5323 /* PL_generation sorcery:
5324 * an assignment like ($a,$b) = ($c,$d) is easier than
5325 * ($a,$b) = ($c,$a), since there is no need for temporary vars.
5326 * To detect whether there are common vars, the global var
5327 * PL_generation is incremented for each assign op we compile.
5328 * Then, while compiling the assign op, we run through all the
5329 * variables on both sides of the assignment, setting a spare slot
5330 * in each of them to PL_generation. If any of them already have
5331 * that value, we know we've got commonality. We could use a
5332 * single bit marker, but then we'd have to make 2 passes, first
5333 * to clear the flag, then to test and set it. To find somewhere
5334 * to store these values, evil chicanery is done with SvUVX().
5337 if (maybe_common_vars) {
5339 if (aassign_common_vars(o))
5340 o->op_private |= OPpASSIGN_COMMON;
5344 if (right && right->op_type == OP_SPLIT && !PL_madskills) {
5345 OP* tmpop = ((LISTOP*)right)->op_first;
5346 if (tmpop && (tmpop->op_type == OP_PUSHRE)) {
5347 PMOP * const pm = (PMOP*)tmpop;
5348 if (left->op_type == OP_RV2AV &&
5349 !(left->op_private & OPpLVAL_INTRO) &&
5350 !(o->op_private & OPpASSIGN_COMMON) )
5352 tmpop = ((UNOP*)left)->op_first;
5353 if (tmpop->op_type == OP_GV
5355 && !pm->op_pmreplrootu.op_pmtargetoff
5357 && !pm->op_pmreplrootu.op_pmtargetgv
5361 pm->op_pmreplrootu.op_pmtargetoff
5362 = cPADOPx(tmpop)->op_padix;
5363 cPADOPx(tmpop)->op_padix = 0; /* steal it */
5365 pm->op_pmreplrootu.op_pmtargetgv
5366 = MUTABLE_GV(cSVOPx(tmpop)->op_sv);
5367 cSVOPx(tmpop)->op_sv = NULL; /* steal it */
5369 pm->op_pmflags |= PMf_ONCE;
5370 tmpop = cUNOPo->op_first; /* to list (nulled) */
5371 tmpop = ((UNOP*)tmpop)->op_first; /* to pushmark */
5372 tmpop->op_sibling = NULL; /* don't free split */
5373 right->op_next = tmpop->op_next; /* fix starting loc */
5374 op_free(o); /* blow off assign */
5375 right->op_flags &= ~OPf_WANT;
5376 /* "I don't know and I don't care." */
5381 if (PL_modcount < RETURN_UNLIMITED_NUMBER &&
5382 ((LISTOP*)right)->op_last->op_type == OP_CONST)
5384 SV *sv = ((SVOP*)((LISTOP*)right)->op_last)->op_sv;
5385 if (SvIOK(sv) && SvIVX(sv) == 0)
5386 sv_setiv(sv, PL_modcount+1);
5394 right = newOP(OP_UNDEF, 0);
5395 if (right->op_type == OP_READLINE) {
5396 right->op_flags |= OPf_STACKED;
5397 return newBINOP(OP_NULL, flags, op_lvalue(scalar(left), OP_SASSIGN),
5401 o = newBINOP(OP_SASSIGN, flags,
5402 scalar(right), op_lvalue(scalar(left), OP_SASSIGN) );
5408 =for apidoc Am|OP *|newSTATEOP|I32 flags|char *label|OP *o
5410 Constructs a state op (COP). The state op is normally a C<nextstate> op,
5411 but will be a C<dbstate> op if debugging is enabled for currently-compiled
5412 code. The state op is populated from L</PL_curcop> (or L</PL_compiling>).
5413 If I<label> is non-null, it supplies the name of a label to attach to
5414 the state op; this function takes ownership of the memory pointed at by
5415 I<label>, and will free it. I<flags> gives the eight bits of C<op_flags>
5418 If I<o> is null, the state op is returned. Otherwise the state op is
5419 combined with I<o> into a C<lineseq> list op, which is returned. I<o>
5420 is consumed by this function and becomes part of the returned op tree.
5426 Perl_newSTATEOP(pTHX_ I32 flags, char *label, OP *o)
5429 const U32 seq = intro_my();
5430 const U32 utf8 = flags & SVf_UTF8;
5435 NewOp(1101, cop, 1, COP);
5436 if (PERLDB_LINE && CopLINE(PL_curcop) && PL_curstash != PL_debstash) {
5437 cop->op_type = OP_DBSTATE;
5438 cop->op_ppaddr = PL_ppaddr[ OP_DBSTATE ];
5441 cop->op_type = OP_NEXTSTATE;
5442 cop->op_ppaddr = PL_ppaddr[ OP_NEXTSTATE ];
5444 cop->op_flags = (U8)flags;
5445 CopHINTS_set(cop, PL_hints);
5447 cop->op_private |= NATIVE_HINTS;
5449 CopHINTS_set(&PL_compiling, CopHINTS_get(cop));
5450 cop->op_next = (OP*)cop;
5453 cop->cop_warnings = DUP_WARNINGS(PL_curcop->cop_warnings);
5454 CopHINTHASH_set(cop, cophh_copy(CopHINTHASH_get(PL_curcop)));
5456 Perl_cop_store_label(aTHX_ cop, label, strlen(label), utf8);
5458 PL_hints |= HINT_BLOCK_SCOPE;
5459 /* It seems that we need to defer freeing this pointer, as other parts
5460 of the grammar end up wanting to copy it after this op has been
5465 if (PL_parser && PL_parser->copline == NOLINE)
5466 CopLINE_set(cop, CopLINE(PL_curcop));
5468 CopLINE_set(cop, PL_parser->copline);
5470 PL_parser->copline = NOLINE;
5473 CopFILE_set(cop, CopFILE(PL_curcop)); /* XXX share in a pvtable? */
5475 CopFILEGV_set(cop, CopFILEGV(PL_curcop));
5477 CopSTASH_set(cop, PL_curstash);
5479 if ((PERLDB_LINE || PERLDB_SAVESRC) && PL_curstash != PL_debstash) {
5480 /* this line can have a breakpoint - store the cop in IV */
5481 AV *av = CopFILEAVx(PL_curcop);
5483 SV * const * const svp = av_fetch(av, (I32)CopLINE(cop), FALSE);
5484 if (svp && *svp != &PL_sv_undef ) {
5485 (void)SvIOK_on(*svp);
5486 SvIV_set(*svp, PTR2IV(cop));
5491 if (flags & OPf_SPECIAL)
5493 return op_prepend_elem(OP_LINESEQ, (OP*)cop, o);
5497 =for apidoc Am|OP *|newLOGOP|I32 type|I32 flags|OP *first|OP *other
5499 Constructs, checks, and returns a logical (flow control) op. I<type>
5500 is the opcode. I<flags> gives the eight bits of C<op_flags>, except
5501 that C<OPf_KIDS> will be set automatically, and, shifted up eight bits,
5502 the eight bits of C<op_private>, except that the bit with value 1 is
5503 automatically set. I<first> supplies the expression controlling the
5504 flow, and I<other> supplies the side (alternate) chain of ops; they are
5505 consumed by this function and become part of the constructed op tree.
5511 Perl_newLOGOP(pTHX_ I32 type, I32 flags, OP *first, OP *other)
5515 PERL_ARGS_ASSERT_NEWLOGOP;
5517 return new_logop(type, flags, &first, &other);
5521 S_search_const(pTHX_ OP *o)
5523 PERL_ARGS_ASSERT_SEARCH_CONST;
5525 switch (o->op_type) {
5529 if (o->op_flags & OPf_KIDS)
5530 return search_const(cUNOPo->op_first);
5537 if (!(o->op_flags & OPf_KIDS))
5539 kid = cLISTOPo->op_first;
5541 switch (kid->op_type) {
5545 kid = kid->op_sibling;
5548 if (kid != cLISTOPo->op_last)
5554 kid = cLISTOPo->op_last;
5556 return search_const(kid);
5564 S_new_logop(pTHX_ I32 type, I32 flags, OP** firstp, OP** otherp)
5572 int prepend_not = 0;
5574 PERL_ARGS_ASSERT_NEW_LOGOP;
5579 if (type == OP_XOR) /* Not short circuit, but here by precedence. */
5580 return newBINOP(type, flags, scalar(first), scalar(other));
5582 assert((PL_opargs[type] & OA_CLASS_MASK) == OA_LOGOP);
5584 scalarboolean(first);
5585 /* optimize AND and OR ops that have NOTs as children */
5586 if (first->op_type == OP_NOT
5587 && (first->op_flags & OPf_KIDS)
5588 && ((first->op_flags & OPf_SPECIAL) /* unless ($x) { } */
5589 || (other->op_type == OP_NOT)) /* if (!$x && !$y) { } */
5591 if (type == OP_AND || type == OP_OR) {
5597 if (other->op_type == OP_NOT) { /* !a AND|OR !b => !(a OR|AND b) */
5599 prepend_not = 1; /* prepend a NOT op later */
5603 /* search for a constant op that could let us fold the test */
5604 if ((cstop = search_const(first))) {
5605 if (cstop->op_private & OPpCONST_STRICT)
5606 no_bareword_allowed(cstop);
5607 else if ((cstop->op_private & OPpCONST_BARE))
5608 Perl_ck_warner(aTHX_ packWARN(WARN_BAREWORD), "Bareword found in conditional");
5609 if ((type == OP_AND && SvTRUE(((SVOP*)cstop)->op_sv)) ||
5610 (type == OP_OR && !SvTRUE(((SVOP*)cstop)->op_sv)) ||
5611 (type == OP_DOR && !SvOK(((SVOP*)cstop)->op_sv))) {
5613 if (other->op_type == OP_CONST)
5614 other->op_private |= OPpCONST_SHORTCIRCUIT;
5616 OP *newop = newUNOP(OP_NULL, 0, other);
5617 op_getmad(first, newop, '1');
5618 newop->op_targ = type; /* set "was" field */
5622 if (other->op_type == OP_LEAVE)
5623 other = newUNOP(OP_NULL, OPf_SPECIAL, other);
5624 else if (other->op_type == OP_MATCH
5625 || other->op_type == OP_SUBST
5626 || other->op_type == OP_TRANSR
5627 || other->op_type == OP_TRANS)
5628 /* Mark the op as being unbindable with =~ */
5629 other->op_flags |= OPf_SPECIAL;
5633 /* check for C<my $x if 0>, or C<my($x,$y) if 0> */
5634 const OP *o2 = other;
5635 if ( ! (o2->op_type == OP_LIST
5636 && (( o2 = cUNOPx(o2)->op_first))
5637 && o2->op_type == OP_PUSHMARK
5638 && (( o2 = o2->op_sibling)) )
5641 if ((o2->op_type == OP_PADSV || o2->op_type == OP_PADAV
5642 || o2->op_type == OP_PADHV)
5643 && o2->op_private & OPpLVAL_INTRO
5644 && !(o2->op_private & OPpPAD_STATE))
5646 Perl_ck_warner_d(aTHX_ packWARN(WARN_DEPRECATED),
5647 "Deprecated use of my() in false conditional");
5651 if (first->op_type == OP_CONST)
5652 first->op_private |= OPpCONST_SHORTCIRCUIT;
5654 first = newUNOP(OP_NULL, 0, first);
5655 op_getmad(other, first, '2');
5656 first->op_targ = type; /* set "was" field */
5663 else if ((first->op_flags & OPf_KIDS) && type != OP_DOR
5664 && ckWARN(WARN_MISC)) /* [#24076] Don't warn for <FH> err FOO. */
5666 const OP * const k1 = ((UNOP*)first)->op_first;
5667 const OP * const k2 = k1->op_sibling;
5669 switch (first->op_type)
5672 if (k2 && k2->op_type == OP_READLINE
5673 && (k2->op_flags & OPf_STACKED)
5674 && ((k1->op_flags & OPf_WANT) == OPf_WANT_SCALAR))
5676 warnop = k2->op_type;
5681 if (k1->op_type == OP_READDIR
5682 || k1->op_type == OP_GLOB
5683 || (k1->op_type == OP_NULL && k1->op_targ == OP_GLOB)
5684 || k1->op_type == OP_EACH
5685 || k1->op_type == OP_AEACH)
5687 warnop = ((k1->op_type == OP_NULL)
5688 ? (OPCODE)k1->op_targ : k1->op_type);
5693 const line_t oldline = CopLINE(PL_curcop);
5694 CopLINE_set(PL_curcop, PL_parser->copline);
5695 Perl_warner(aTHX_ packWARN(WARN_MISC),
5696 "Value of %s%s can be \"0\"; test with defined()",
5698 ((warnop == OP_READLINE || warnop == OP_GLOB)
5699 ? " construct" : "() operator"));
5700 CopLINE_set(PL_curcop, oldline);
5707 if (type == OP_ANDASSIGN || type == OP_ORASSIGN || type == OP_DORASSIGN)
5708 other->op_private |= OPpASSIGN_BACKWARDS; /* other is an OP_SASSIGN */
5710 NewOp(1101, logop, 1, LOGOP);
5712 logop->op_type = (OPCODE)type;
5713 logop->op_ppaddr = PL_ppaddr[type];
5714 logop->op_first = first;
5715 logop->op_flags = (U8)(flags | OPf_KIDS);
5716 logop->op_other = LINKLIST(other);
5717 logop->op_private = (U8)(1 | (flags >> 8));
5719 /* establish postfix order */
5720 logop->op_next = LINKLIST(first);
5721 first->op_next = (OP*)logop;
5722 first->op_sibling = other;
5724 CHECKOP(type,logop);
5726 o = newUNOP(prepend_not ? OP_NOT : OP_NULL, 0, (OP*)logop);
5733 =for apidoc Am|OP *|newCONDOP|I32 flags|OP *first|OP *trueop|OP *falseop
5735 Constructs, checks, and returns a conditional-expression (C<cond_expr>)
5736 op. I<flags> gives the eight bits of C<op_flags>, except that C<OPf_KIDS>
5737 will be set automatically, and, shifted up eight bits, the eight bits of
5738 C<op_private>, except that the bit with value 1 is automatically set.
5739 I<first> supplies the expression selecting between the two branches,
5740 and I<trueop> and I<falseop> supply the branches; they are consumed by
5741 this function and become part of the constructed op tree.
5747 Perl_newCONDOP(pTHX_ I32 flags, OP *first, OP *trueop, OP *falseop)
5755 PERL_ARGS_ASSERT_NEWCONDOP;
5758 return newLOGOP(OP_AND, 0, first, trueop);
5760 return newLOGOP(OP_OR, 0, first, falseop);
5762 scalarboolean(first);
5763 if ((cstop = search_const(first))) {
5764 /* Left or right arm of the conditional? */
5765 const bool left = SvTRUE(((SVOP*)cstop)->op_sv);
5766 OP *live = left ? trueop : falseop;
5767 OP *const dead = left ? falseop : trueop;
5768 if (cstop->op_private & OPpCONST_BARE &&
5769 cstop->op_private & OPpCONST_STRICT) {
5770 no_bareword_allowed(cstop);
5773 /* This is all dead code when PERL_MAD is not defined. */
5774 live = newUNOP(OP_NULL, 0, live);
5775 op_getmad(first, live, 'C');
5776 op_getmad(dead, live, left ? 'e' : 't');
5781 if (live->op_type == OP_LEAVE)
5782 live = newUNOP(OP_NULL, OPf_SPECIAL, live);
5783 else if (live->op_type == OP_MATCH || live->op_type == OP_SUBST
5784 || live->op_type == OP_TRANS || live->op_type == OP_TRANSR)
5785 /* Mark the op as being unbindable with =~ */
5786 live->op_flags |= OPf_SPECIAL;
5789 NewOp(1101, logop, 1, LOGOP);
5790 logop->op_type = OP_COND_EXPR;
5791 logop->op_ppaddr = PL_ppaddr[OP_COND_EXPR];
5792 logop->op_first = first;
5793 logop->op_flags = (U8)(flags | OPf_KIDS);
5794 logop->op_private = (U8)(1 | (flags >> 8));
5795 logop->op_other = LINKLIST(trueop);
5796 logop->op_next = LINKLIST(falseop);
5798 CHECKOP(OP_COND_EXPR, /* that's logop->op_type */
5801 /* establish postfix order */
5802 start = LINKLIST(first);
5803 first->op_next = (OP*)logop;
5805 first->op_sibling = trueop;
5806 trueop->op_sibling = falseop;
5807 o = newUNOP(OP_NULL, 0, (OP*)logop);
5809 trueop->op_next = falseop->op_next = o;
5816 =for apidoc Am|OP *|newRANGE|I32 flags|OP *left|OP *right
5818 Constructs and returns a C<range> op, with subordinate C<flip> and
5819 C<flop> ops. I<flags> gives the eight bits of C<op_flags> for the
5820 C<flip> op and, shifted up eight bits, the eight bits of C<op_private>
5821 for both the C<flip> and C<range> ops, except that the bit with value
5822 1 is automatically set. I<left> and I<right> supply the expressions
5823 controlling the endpoints of the range; they are consumed by this function
5824 and become part of the constructed op tree.
5830 Perl_newRANGE(pTHX_ I32 flags, OP *left, OP *right)
5839 PERL_ARGS_ASSERT_NEWRANGE;
5841 NewOp(1101, range, 1, LOGOP);
5843 range->op_type = OP_RANGE;
5844 range->op_ppaddr = PL_ppaddr[OP_RANGE];
5845 range->op_first = left;
5846 range->op_flags = OPf_KIDS;
5847 leftstart = LINKLIST(left);
5848 range->op_other = LINKLIST(right);
5849 range->op_private = (U8)(1 | (flags >> 8));
5851 left->op_sibling = right;
5853 range->op_next = (OP*)range;
5854 flip = newUNOP(OP_FLIP, flags, (OP*)range);
5855 flop = newUNOP(OP_FLOP, 0, flip);
5856 o = newUNOP(OP_NULL, 0, flop);
5858 range->op_next = leftstart;
5860 left->op_next = flip;
5861 right->op_next = flop;
5863 range->op_targ = pad_alloc(OP_RANGE, SVs_PADMY);
5864 sv_upgrade(PAD_SV(range->op_targ), SVt_PVNV);
5865 flip->op_targ = pad_alloc(OP_RANGE, SVs_PADMY);
5866 sv_upgrade(PAD_SV(flip->op_targ), SVt_PVNV);
5868 flip->op_private = left->op_type == OP_CONST ? OPpFLIP_LINENUM : 0;
5869 flop->op_private = right->op_type == OP_CONST ? OPpFLIP_LINENUM : 0;
5871 /* check barewords before they might be optimized aways */
5872 if (flip->op_private && cSVOPx(left)->op_private & OPpCONST_STRICT)
5873 no_bareword_allowed(left);
5874 if (flop->op_private && cSVOPx(right)->op_private & OPpCONST_STRICT)
5875 no_bareword_allowed(right);
5878 if (!flip->op_private || !flop->op_private)
5879 LINKLIST(o); /* blow off optimizer unless constant */
5885 =for apidoc Am|OP *|newLOOPOP|I32 flags|I32 debuggable|OP *expr|OP *block
5887 Constructs, checks, and returns an op tree expressing a loop. This is
5888 only a loop in the control flow through the op tree; it does not have
5889 the heavyweight loop structure that allows exiting the loop by C<last>
5890 and suchlike. I<flags> gives the eight bits of C<op_flags> for the
5891 top-level op, except that some bits will be set automatically as required.
5892 I<expr> supplies the expression controlling loop iteration, and I<block>
5893 supplies the body of the loop; they are consumed by this function and
5894 become part of the constructed op tree. I<debuggable> is currently
5895 unused and should always be 1.
5901 Perl_newLOOPOP(pTHX_ I32 flags, I32 debuggable, OP *expr, OP *block)
5906 const bool once = block && block->op_flags & OPf_SPECIAL &&
5907 (block->op_type == OP_ENTERSUB || block->op_type == OP_NULL);
5909 PERL_UNUSED_ARG(debuggable);
5912 if (once && expr->op_type == OP_CONST && !SvTRUE(((SVOP*)expr)->op_sv))
5913 return block; /* do {} while 0 does once */
5914 if (expr->op_type == OP_READLINE
5915 || expr->op_type == OP_READDIR
5916 || expr->op_type == OP_GLOB
5917 || expr->op_type == OP_EACH || expr->op_type == OP_AEACH
5918 || (expr->op_type == OP_NULL && expr->op_targ == OP_GLOB)) {
5919 expr = newUNOP(OP_DEFINED, 0,
5920 newASSIGNOP(0, newDEFSVOP(), 0, expr) );
5921 } else if (expr->op_flags & OPf_KIDS) {
5922 const OP * const k1 = ((UNOP*)expr)->op_first;
5923 const OP * const k2 = k1 ? k1->op_sibling : NULL;
5924 switch (expr->op_type) {
5926 if (k2 && (k2->op_type == OP_READLINE || k2->op_type == OP_READDIR)
5927 && (k2->op_flags & OPf_STACKED)
5928 && ((k1->op_flags & OPf_WANT) == OPf_WANT_SCALAR))
5929 expr = newUNOP(OP_DEFINED, 0, expr);
5933 if (k1 && (k1->op_type == OP_READDIR
5934 || k1->op_type == OP_GLOB
5935 || (k1->op_type == OP_NULL && k1->op_targ == OP_GLOB)
5936 || k1->op_type == OP_EACH
5937 || k1->op_type == OP_AEACH))
5938 expr = newUNOP(OP_DEFINED, 0, expr);
5944 /* if block is null, the next op_append_elem() would put UNSTACK, a scalar
5945 * op, in listop. This is wrong. [perl #27024] */
5947 block = newOP(OP_NULL, 0);
5948 listop = op_append_elem(OP_LINESEQ, block, newOP(OP_UNSTACK, 0));
5949 o = new_logop(OP_AND, 0, &expr, &listop);
5952 ((LISTOP*)listop)->op_last->op_next = LINKLIST(o);
5954 if (once && o != listop)
5955 o->op_next = ((LOGOP*)cUNOPo->op_first)->op_other;
5958 o = newUNOP(OP_NULL, 0, o); /* or do {} while 1 loses outer block */
5960 o->op_flags |= flags;
5962 o->op_flags |= OPf_SPECIAL; /* suppress POPBLOCK curpm restoration*/
5967 =for apidoc Am|OP *|newWHILEOP|I32 flags|I32 debuggable|LOOP *loop|OP *expr|OP *block|OP *cont|I32 has_my
5969 Constructs, checks, and returns an op tree expressing a C<while> loop.
5970 This is a heavyweight loop, with structure that allows exiting the loop
5971 by C<last> and suchlike.
5973 I<loop> is an optional preconstructed C<enterloop> op to use in the
5974 loop; if it is null then a suitable op will be constructed automatically.
5975 I<expr> supplies the loop's controlling expression. I<block> supplies the
5976 main body of the loop, and I<cont> optionally supplies a C<continue> block
5977 that operates as a second half of the body. All of these optree inputs
5978 are consumed by this function and become part of the constructed op tree.
5980 I<flags> gives the eight bits of C<op_flags> for the C<leaveloop>
5981 op and, shifted up eight bits, the eight bits of C<op_private> for
5982 the C<leaveloop> op, except that (in both cases) some bits will be set
5983 automatically. I<debuggable> is currently unused and should always be 1.
5984 I<has_my> can be supplied as true to force the
5985 loop body to be enclosed in its own scope.
5991 Perl_newWHILEOP(pTHX_ I32 flags, I32 debuggable, LOOP *loop,
5992 OP *expr, OP *block, OP *cont, I32 has_my)
6001 PERL_UNUSED_ARG(debuggable);
6004 if (expr->op_type == OP_READLINE
6005 || expr->op_type == OP_READDIR
6006 || expr->op_type == OP_GLOB
6007 || expr->op_type == OP_EACH || expr->op_type == OP_AEACH
6008 || (expr->op_type == OP_NULL && expr->op_targ == OP_GLOB)) {
6009 expr = newUNOP(OP_DEFINED, 0,
6010 newASSIGNOP(0, newDEFSVOP(), 0, expr) );
6011 } else if (expr->op_flags & OPf_KIDS) {
6012 const OP * const k1 = ((UNOP*)expr)->op_first;
6013 const OP * const k2 = (k1) ? k1->op_sibling : NULL;
6014 switch (expr->op_type) {
6016 if (k2 && (k2->op_type == OP_READLINE || k2->op_type == OP_READDIR)
6017 && (k2->op_flags & OPf_STACKED)
6018 && ((k1->op_flags & OPf_WANT) == OPf_WANT_SCALAR))
6019 expr = newUNOP(OP_DEFINED, 0, expr);
6023 if (k1 && (k1->op_type == OP_READDIR
6024 || k1->op_type == OP_GLOB
6025 || (k1->op_type == OP_NULL && k1->op_targ == OP_GLOB)
6026 || k1->op_type == OP_EACH
6027 || k1->op_type == OP_AEACH))
6028 expr = newUNOP(OP_DEFINED, 0, expr);
6035 block = newOP(OP_NULL, 0);
6036 else if (cont || has_my) {
6037 block = op_scope(block);
6041 next = LINKLIST(cont);
6044 OP * const unstack = newOP(OP_UNSTACK, 0);
6047 cont = op_append_elem(OP_LINESEQ, cont, unstack);
6051 listop = op_append_list(OP_LINESEQ, block, cont);
6053 redo = LINKLIST(listop);
6057 o = new_logop(OP_AND, 0, &expr, &listop);
6058 if (o == expr && o->op_type == OP_CONST && !SvTRUE(cSVOPo->op_sv)) {
6059 op_free(expr); /* oops, it's a while (0) */
6061 return NULL; /* listop already freed by new_logop */
6064 ((LISTOP*)listop)->op_last->op_next =
6065 (o == listop ? redo : LINKLIST(o));
6071 NewOp(1101,loop,1,LOOP);
6072 loop->op_type = OP_ENTERLOOP;
6073 loop->op_ppaddr = PL_ppaddr[OP_ENTERLOOP];
6074 loop->op_private = 0;
6075 loop->op_next = (OP*)loop;
6078 o = newBINOP(OP_LEAVELOOP, 0, (OP*)loop, o);
6080 loop->op_redoop = redo;
6081 loop->op_lastop = o;
6082 o->op_private |= loopflags;
6085 loop->op_nextop = next;
6087 loop->op_nextop = o;
6089 o->op_flags |= flags;
6090 o->op_private |= (flags >> 8);
6095 =for apidoc Am|OP *|newFOROP|I32 flags|OP *sv|OP *expr|OP *block|OP *cont
6097 Constructs, checks, and returns an op tree expressing a C<foreach>
6098 loop (iteration through a list of values). This is a heavyweight loop,
6099 with structure that allows exiting the loop by C<last> and suchlike.
6101 I<sv> optionally supplies the variable that will be aliased to each
6102 item in turn; if null, it defaults to C<$_> (either lexical or global).
6103 I<expr> supplies the list of values to iterate over. I<block> supplies
6104 the main body of the loop, and I<cont> optionally supplies a C<continue>
6105 block that operates as a second half of the body. All of these optree
6106 inputs are consumed by this function and become part of the constructed
6109 I<flags> gives the eight bits of C<op_flags> for the C<leaveloop>
6110 op and, shifted up eight bits, the eight bits of C<op_private> for
6111 the C<leaveloop> op, except that (in both cases) some bits will be set
6118 Perl_newFOROP(pTHX_ I32 flags, OP *sv, OP *expr, OP *block, OP *cont)
6123 PADOFFSET padoff = 0;
6128 PERL_ARGS_ASSERT_NEWFOROP;
6131 if (sv->op_type == OP_RV2SV) { /* symbol table variable */
6132 iterpflags = sv->op_private & OPpOUR_INTRO; /* for our $x () */
6133 sv->op_type = OP_RV2GV;
6134 sv->op_ppaddr = PL_ppaddr[OP_RV2GV];
6136 /* The op_type check is needed to prevent a possible segfault
6137 * if the loop variable is undeclared and 'strict vars' is in
6138 * effect. This is illegal but is nonetheless parsed, so we
6139 * may reach this point with an OP_CONST where we're expecting
6142 if (cUNOPx(sv)->op_first->op_type == OP_GV
6143 && cGVOPx_gv(cUNOPx(sv)->op_first) == PL_defgv)
6144 iterpflags |= OPpITER_DEF;
6146 else if (sv->op_type == OP_PADSV) { /* private variable */
6147 iterpflags = sv->op_private & OPpLVAL_INTRO; /* for my $x () */
6148 padoff = sv->op_targ;
6158 Perl_croak(aTHX_ "Can't use %s for loop variable", PL_op_desc[sv->op_type]);
6160 SV *const namesv = PAD_COMPNAME_SV(padoff);
6162 const char *const name = SvPV_const(namesv, len);
6164 if (len == 2 && name[0] == '$' && name[1] == '_')
6165 iterpflags |= OPpITER_DEF;
6169 const PADOFFSET offset = pad_findmy_pvs("$_", 0);
6170 if (offset == NOT_IN_PAD || PAD_COMPNAME_FLAGS_isOUR(offset)) {
6171 sv = newGVOP(OP_GV, 0, PL_defgv);
6176 iterpflags |= OPpITER_DEF;
6178 if (expr->op_type == OP_RV2AV || expr->op_type == OP_PADAV) {
6179 expr = op_lvalue(force_list(scalar(ref(expr, OP_ITER))), OP_GREPSTART);
6180 iterflags |= OPf_STACKED;
6182 else if (expr->op_type == OP_NULL &&
6183 (expr->op_flags & OPf_KIDS) &&
6184 ((BINOP*)expr)->op_first->op_type == OP_FLOP)
6186 /* Basically turn for($x..$y) into the same as for($x,$y), but we
6187 * set the STACKED flag to indicate that these values are to be
6188 * treated as min/max values by 'pp_iterinit'.
6190 const UNOP* const flip = (UNOP*)((UNOP*)((BINOP*)expr)->op_first)->op_first;
6191 LOGOP* const range = (LOGOP*) flip->op_first;
6192 OP* const left = range->op_first;
6193 OP* const right = left->op_sibling;
6196 range->op_flags &= ~OPf_KIDS;
6197 range->op_first = NULL;
6199 listop = (LISTOP*)newLISTOP(OP_LIST, 0, left, right);
6200 listop->op_first->op_next = range->op_next;
6201 left->op_next = range->op_other;
6202 right->op_next = (OP*)listop;
6203 listop->op_next = listop->op_first;
6206 op_getmad(expr,(OP*)listop,'O');
6210 expr = (OP*)(listop);
6212 iterflags |= OPf_STACKED;
6215 expr = op_lvalue(force_list(expr), OP_GREPSTART);
6218 loop = (LOOP*)list(convert(OP_ENTERITER, iterflags,
6219 op_append_elem(OP_LIST, expr, scalar(sv))));
6220 assert(!loop->op_next);
6221 /* for my $x () sets OPpLVAL_INTRO;
6222 * for our $x () sets OPpOUR_INTRO */
6223 loop->op_private = (U8)iterpflags;
6224 #ifdef PL_OP_SLAB_ALLOC
6227 NewOp(1234,tmp,1,LOOP);
6228 Copy(loop,tmp,1,LISTOP);
6229 S_op_destroy(aTHX_ (OP*)loop);
6233 loop = (LOOP*)PerlMemShared_realloc(loop, sizeof(LOOP));
6235 loop->op_targ = padoff;
6236 wop = newWHILEOP(flags, 1, loop, newOP(OP_ITER, 0), block, cont, 0);
6238 op_getmad(madsv, (OP*)loop, 'v');
6243 =for apidoc Am|OP *|newLOOPEX|I32 type|OP *label
6245 Constructs, checks, and returns a loop-exiting op (such as C<goto>
6246 or C<last>). I<type> is the opcode. I<label> supplies the parameter
6247 determining the target of the op; it is consumed by this function and
6248 become part of the constructed op tree.
6254 Perl_newLOOPEX(pTHX_ I32 type, OP *label)
6259 PERL_ARGS_ASSERT_NEWLOOPEX;
6261 assert((PL_opargs[type] & OA_CLASS_MASK) == OA_LOOPEXOP);
6263 if (type != OP_GOTO) {
6264 /* "last()" means "last" */
6265 if (label->op_type == OP_STUB && (label->op_flags & OPf_PARENS))
6266 o = newOP(type, OPf_SPECIAL);
6270 label->op_type == OP_CONST
6271 ? SvUTF8(((SVOP*)label)->op_sv)
6273 savesharedpv(label->op_type == OP_CONST
6274 ? SvPV_nolen_const(((SVOP*)label)->op_sv)
6278 op_getmad(label,o,'L');
6284 /* Check whether it's going to be a goto &function */
6285 if (label->op_type == OP_ENTERSUB
6286 && !(label->op_flags & OPf_STACKED))
6287 label = newUNOP(OP_REFGEN, 0, op_lvalue(label, OP_REFGEN));
6288 else if (label->op_type == OP_CONST) {
6289 SV * const sv = ((SVOP *)label)->op_sv;
6291 const char *s = SvPV_const(sv,l);
6292 if (l == strlen(s)) goto const_label;
6294 o = newUNOP(type, OPf_STACKED, label);
6296 PL_hints |= HINT_BLOCK_SCOPE;
6300 /* if the condition is a literal array or hash
6301 (or @{ ... } etc), make a reference to it.
6304 S_ref_array_or_hash(pTHX_ OP *cond)
6307 && (cond->op_type == OP_RV2AV
6308 || cond->op_type == OP_PADAV
6309 || cond->op_type == OP_RV2HV
6310 || cond->op_type == OP_PADHV))
6312 return newUNOP(OP_REFGEN, 0, op_lvalue(cond, OP_REFGEN));
6315 && (cond->op_type == OP_ASLICE
6316 || cond->op_type == OP_HSLICE)) {
6318 /* anonlist now needs a list from this op, was previously used in
6320 cond->op_flags |= ~(OPf_WANT_SCALAR | OPf_REF);
6321 cond->op_flags |= OPf_WANT_LIST;
6323 return newANONLIST(op_lvalue(cond, OP_ANONLIST));
6330 /* These construct the optree fragments representing given()
6333 entergiven and enterwhen are LOGOPs; the op_other pointer
6334 points up to the associated leave op. We need this so we
6335 can put it in the context and make break/continue work.
6336 (Also, of course, pp_enterwhen will jump straight to
6337 op_other if the match fails.)
6341 S_newGIVWHENOP(pTHX_ OP *cond, OP *block,
6342 I32 enter_opcode, I32 leave_opcode,
6343 PADOFFSET entertarg)
6349 PERL_ARGS_ASSERT_NEWGIVWHENOP;
6351 NewOp(1101, enterop, 1, LOGOP);
6352 enterop->op_type = (Optype)enter_opcode;
6353 enterop->op_ppaddr = PL_ppaddr[enter_opcode];
6354 enterop->op_flags = (U8) OPf_KIDS;
6355 enterop->op_targ = ((entertarg == NOT_IN_PAD) ? 0 : entertarg);
6356 enterop->op_private = 0;
6358 o = newUNOP(leave_opcode, 0, (OP *) enterop);
6361 enterop->op_first = scalar(cond);
6362 cond->op_sibling = block;
6364 o->op_next = LINKLIST(cond);
6365 cond->op_next = (OP *) enterop;
6368 /* This is a default {} block */
6369 enterop->op_first = block;
6370 enterop->op_flags |= OPf_SPECIAL;
6371 o ->op_flags |= OPf_SPECIAL;
6373 o->op_next = (OP *) enterop;
6376 CHECKOP(enter_opcode, enterop); /* Currently does nothing, since
6377 entergiven and enterwhen both
6380 enterop->op_next = LINKLIST(block);
6381 block->op_next = enterop->op_other = o;
6386 /* Does this look like a boolean operation? For these purposes
6387 a boolean operation is:
6388 - a subroutine call [*]
6389 - a logical connective
6390 - a comparison operator
6391 - a filetest operator, with the exception of -s -M -A -C
6392 - defined(), exists() or eof()
6393 - /$re/ or $foo =~ /$re/
6395 [*] possibly surprising
6398 S_looks_like_bool(pTHX_ const OP *o)
6402 PERL_ARGS_ASSERT_LOOKS_LIKE_BOOL;
6404 switch(o->op_type) {
6407 return looks_like_bool(cLOGOPo->op_first);
6411 looks_like_bool(cLOGOPo->op_first)
6412 && looks_like_bool(cLOGOPo->op_first->op_sibling));
6417 o->op_flags & OPf_KIDS
6418 && looks_like_bool(cUNOPo->op_first));
6422 case OP_NOT: case OP_XOR:
6424 case OP_EQ: case OP_NE: case OP_LT:
6425 case OP_GT: case OP_LE: case OP_GE:
6427 case OP_I_EQ: case OP_I_NE: case OP_I_LT:
6428 case OP_I_GT: case OP_I_LE: case OP_I_GE:
6430 case OP_SEQ: case OP_SNE: case OP_SLT:
6431 case OP_SGT: case OP_SLE: case OP_SGE:
6435 case OP_FTRREAD: case OP_FTRWRITE: case OP_FTREXEC:
6436 case OP_FTEREAD: case OP_FTEWRITE: case OP_FTEEXEC:
6437 case OP_FTIS: case OP_FTEOWNED: case OP_FTROWNED:
6438 case OP_FTZERO: case OP_FTSOCK: case OP_FTCHR:
6439 case OP_FTBLK: case OP_FTFILE: case OP_FTDIR:
6440 case OP_FTPIPE: case OP_FTLINK: case OP_FTSUID:
6441 case OP_FTSGID: case OP_FTSVTX: case OP_FTTTY:
6442 case OP_FTTEXT: case OP_FTBINARY:
6444 case OP_DEFINED: case OP_EXISTS:
6445 case OP_MATCH: case OP_EOF:
6452 /* Detect comparisons that have been optimized away */
6453 if (cSVOPo->op_sv == &PL_sv_yes
6454 || cSVOPo->op_sv == &PL_sv_no)
6467 =for apidoc Am|OP *|newGIVENOP|OP *cond|OP *block|PADOFFSET defsv_off
6469 Constructs, checks, and returns an op tree expressing a C<given> block.
6470 I<cond> supplies the expression that will be locally assigned to a lexical
6471 variable, and I<block> supplies the body of the C<given> construct; they
6472 are consumed by this function and become part of the constructed op tree.
6473 I<defsv_off> is the pad offset of the scalar lexical variable that will
6480 Perl_newGIVENOP(pTHX_ OP *cond, OP *block, PADOFFSET defsv_off)
6483 PERL_ARGS_ASSERT_NEWGIVENOP;
6484 return newGIVWHENOP(
6485 ref_array_or_hash(cond),
6487 OP_ENTERGIVEN, OP_LEAVEGIVEN,
6492 =for apidoc Am|OP *|newWHENOP|OP *cond|OP *block
6494 Constructs, checks, and returns an op tree expressing a C<when> block.
6495 I<cond> supplies the test expression, and I<block> supplies the block
6496 that will be executed if the test evaluates to true; they are consumed
6497 by this function and become part of the constructed op tree. I<cond>
6498 will be interpreted DWIMically, often as a comparison against C<$_>,
6499 and may be null to generate a C<default> block.
6505 Perl_newWHENOP(pTHX_ OP *cond, OP *block)
6507 const bool cond_llb = (!cond || looks_like_bool(cond));
6510 PERL_ARGS_ASSERT_NEWWHENOP;
6515 cond_op = newBINOP(OP_SMARTMATCH, OPf_SPECIAL,
6517 scalar(ref_array_or_hash(cond)));
6520 return newGIVWHENOP(cond_op, block, OP_ENTERWHEN, OP_LEAVEWHEN, 0);
6524 Perl_cv_ckproto_len_flags(pTHX_ const CV *cv, const GV *gv, const char *p,
6525 const STRLEN len, const U32 flags)
6527 const char * const cvp = CvPROTO(cv);
6528 const STRLEN clen = CvPROTOLEN(cv);
6530 PERL_ARGS_ASSERT_CV_CKPROTO_LEN_FLAGS;
6532 if (((!p != !cvp) /* One has prototype, one has not. */
6534 (flags & SVf_UTF8) == SvUTF8(cv)
6535 ? len != clen || memNE(cvp, p, len)
6537 ? bytes_cmp_utf8((const U8 *)cvp, clen,
6539 : bytes_cmp_utf8((const U8 *)p, len,
6540 (const U8 *)cvp, clen)
6544 && ckWARN_d(WARN_PROTOTYPE)) {
6545 SV* const msg = sv_newmortal();
6549 gv_efullname3(name = sv_newmortal(), gv, NULL);
6550 sv_setpvs(msg, "Prototype mismatch:");
6552 Perl_sv_catpvf(aTHX_ msg, " sub %"SVf, SVfARG(name));
6554 Perl_sv_catpvf(aTHX_ msg, " (%"SVf")",
6555 SVfARG(newSVpvn_flags(cvp,clen, SvUTF8(cv)|SVs_TEMP))
6558 sv_catpvs(msg, ": none");
6559 sv_catpvs(msg, " vs ");
6561 Perl_sv_catpvf(aTHX_ msg, "(%"SVf")", SVfARG(newSVpvn_flags(p, len, flags | SVs_TEMP)));
6563 sv_catpvs(msg, "none");
6564 Perl_warner(aTHX_ packWARN(WARN_PROTOTYPE), "%"SVf, SVfARG(msg));
6568 static void const_sv_xsub(pTHX_ CV* cv);
6572 =head1 Optree Manipulation Functions
6574 =for apidoc cv_const_sv
6576 If C<cv> is a constant sub eligible for inlining. returns the constant
6577 value returned by the sub. Otherwise, returns NULL.
6579 Constant subs can be created with C<newCONSTSUB> or as described in
6580 L<perlsub/"Constant Functions">.
6585 Perl_cv_const_sv(pTHX_ const CV *const cv)
6587 PERL_UNUSED_CONTEXT;
6590 if (!(SvTYPE(cv) == SVt_PVCV || SvTYPE(cv) == SVt_PVFM))
6592 return CvCONST(cv) ? MUTABLE_SV(CvXSUBANY(cv).any_ptr) : NULL;
6595 /* op_const_sv: examine an optree to determine whether it's in-lineable.
6596 * Can be called in 3 ways:
6599 * look for a single OP_CONST with attached value: return the value
6601 * cv && CvCLONE(cv) && !CvCONST(cv)
6603 * examine the clone prototype, and if contains only a single
6604 * OP_CONST referencing a pad const, or a single PADSV referencing
6605 * an outer lexical, return a non-zero value to indicate the CV is
6606 * a candidate for "constizing" at clone time
6610 * We have just cloned an anon prototype that was marked as a const
6611 * candidate. Try to grab the current value, and in the case of
6612 * PADSV, ignore it if it has multiple references. Return the value.
6616 Perl_op_const_sv(pTHX_ const OP *o, CV *cv)
6627 if (o->op_type == OP_LINESEQ && cLISTOPo->op_first)
6628 o = cLISTOPo->op_first->op_sibling;
6630 for (; o; o = o->op_next) {
6631 const OPCODE type = o->op_type;
6633 if (sv && o->op_next == o)
6635 if (o->op_next != o) {
6636 if (type == OP_NEXTSTATE
6637 || (type == OP_NULL && !(o->op_flags & OPf_KIDS))
6638 || type == OP_PUSHMARK)
6640 if (type == OP_DBSTATE)
6643 if (type == OP_LEAVESUB || type == OP_RETURN)
6647 if (type == OP_CONST && cSVOPo->op_sv)
6649 else if (cv && type == OP_CONST) {
6650 sv = PAD_BASE_SV(CvPADLIST(cv), o->op_targ);
6654 else if (cv && type == OP_PADSV) {
6655 if (CvCONST(cv)) { /* newly cloned anon */
6656 sv = PAD_BASE_SV(CvPADLIST(cv), o->op_targ);
6657 /* the candidate should have 1 ref from this pad and 1 ref
6658 * from the parent */
6659 if (!sv || SvREFCNT(sv) != 2)
6666 if (PAD_COMPNAME_FLAGS(o->op_targ) & SVf_FAKE)
6667 sv = &PL_sv_undef; /* an arbitrary non-null value */
6682 Perl_newMYSUB(pTHX_ I32 floor, OP *o, OP *proto, OP *attrs, OP *block)
6685 /* This would be the return value, but the return cannot be reached. */
6686 OP* pegop = newOP(OP_NULL, 0);
6689 PERL_UNUSED_ARG(floor);
6699 Perl_croak(aTHX_ "\"my sub\" not yet implemented");
6701 NORETURN_FUNCTION_END;
6706 Perl_newATTRSUB(pTHX_ I32 floor, OP *o, OP *proto, OP *attrs, OP *block)
6708 return newATTRSUB_flags(floor, o, proto, attrs, block, 0);
6712 Perl_newATTRSUB_flags(pTHX_ I32 floor, OP *o, OP *proto, OP *attrs,
6713 OP *block, U32 flags)
6718 STRLEN ps_len = 0; /* init it to avoid false uninit warning from icc */
6720 register CV *cv = NULL;
6722 const bool ec = PL_parser && PL_parser->error_count;
6723 /* If the subroutine has no body, no attributes, and no builtin attributes
6724 then it's just a sub declaration, and we may be able to get away with
6725 storing with a placeholder scalar in the symbol table, rather than a
6726 full GV and CV. If anything is present then it will take a full CV to
6728 const I32 gv_fetch_flags
6729 = ec ? GV_NOADD_NOINIT :
6730 (block || attrs || (CvFLAGS(PL_compcv) & CVf_BUILTIN_ATTRS)
6732 ? GV_ADDMULTI : GV_ADDMULTI | GV_NOINIT;
6734 const bool o_is_gv = flags & 1;
6735 const char * const name =
6736 o ? SvPV_const(o_is_gv ? (SV *)o : cSVOPo->op_sv, namlen) : NULL;
6738 bool name_is_utf8 = o && !o_is_gv && SvUTF8(cSVOPo->op_sv);
6741 assert(proto->op_type == OP_CONST);
6742 ps = SvPV_const(((SVOP*)proto)->op_sv, ps_len);
6743 ps_utf8 = SvUTF8(((SVOP*)proto)->op_sv);
6753 gv = gv_fetchsv(cSVOPo->op_sv, gv_fetch_flags, SVt_PVCV);
6755 } else if (PERLDB_NAMEANON && CopLINE(PL_curcop)) {
6756 SV * const sv = sv_newmortal();
6757 Perl_sv_setpvf(aTHX_ sv, "%s[%s:%"IVdf"]",
6758 PL_curstash ? "__ANON__" : "__ANON__::__ANON__",
6759 CopFILE(PL_curcop), (IV)CopLINE(PL_curcop));
6760 gv = gv_fetchsv(sv, gv_fetch_flags, SVt_PVCV);
6762 } else if (PL_curstash) {
6763 gv = gv_fetchpvs("__ANON__", gv_fetch_flags, SVt_PVCV);
6766 gv = gv_fetchpvs("__ANON__::__ANON__", gv_fetch_flags, SVt_PVCV);
6770 if (!PL_madskills) {
6781 if (name && block) {
6782 const char *s = strrchr(name, ':');
6784 if (strEQ(s, "BEGIN")) {
6785 const char not_safe[] =
6786 "BEGIN not safe after errors--compilation aborted";
6787 if (PL_in_eval & EVAL_KEEPERR)
6788 Perl_croak(aTHX_ not_safe);
6790 /* force display of errors found but not reported */
6791 sv_catpv(ERRSV, not_safe);
6792 Perl_croak(aTHX_ "%"SVf, SVfARG(ERRSV));
6800 if (SvTYPE(gv) != SVt_PVGV) { /* Maybe prototype now, and had at
6801 maximum a prototype before. */
6802 if (SvTYPE(gv) > SVt_NULL) {
6803 cv_ckproto_len_flags((const CV *)gv, NULL, ps, ps_len, ps_utf8);
6806 sv_setpvn(MUTABLE_SV(gv), ps, ps_len);
6807 if ( ps_utf8 ) SvUTF8_on(MUTABLE_SV(gv));
6810 sv_setiv(MUTABLE_SV(gv), -1);
6812 SvREFCNT_dec(PL_compcv);
6813 cv = PL_compcv = NULL;
6817 cv = (!name || GvCVGEN(gv)) ? NULL : GvCV(gv);
6819 if (!block || !ps || *ps || attrs
6820 || (CvFLAGS(PL_compcv) & CVf_BUILTIN_ATTRS)
6822 || block->op_type == OP_NULL
6827 const_sv = op_const_sv(block, NULL);
6830 const bool exists = CvROOT(cv) || CvXSUB(cv);
6832 /* if the subroutine doesn't exist and wasn't pre-declared
6833 * with a prototype, assume it will be AUTOLOADed,
6834 * skipping the prototype check
6836 if (exists || SvPOK(cv))
6837 cv_ckproto_len_flags(cv, gv, ps, ps_len, ps_utf8);
6838 /* already defined (or promised)? */
6839 if (exists || GvASSUMECV(gv)) {
6842 || block->op_type == OP_NULL
6845 if (CvFLAGS(PL_compcv)) {
6846 /* might have had built-in attrs applied */
6847 const bool pureperl = !CvISXSUB(cv) && CvROOT(cv);
6848 if (CvLVALUE(PL_compcv) && ! CvLVALUE(cv) && pureperl
6849 && ckWARN(WARN_MISC))
6850 Perl_warner(aTHX_ packWARN(WARN_MISC), "lvalue attribute ignored after the subroutine has been defined");
6852 (CvFLAGS(PL_compcv) & CVf_BUILTIN_ATTRS
6853 & ~(CVf_LVALUE * pureperl));
6855 if (attrs) goto attrs;
6856 /* just a "sub foo;" when &foo is already defined */
6857 SAVEFREESV(PL_compcv);
6862 && block->op_type != OP_NULL
6865 const line_t oldline = CopLINE(PL_curcop);
6866 if (PL_parser && PL_parser->copline != NOLINE)
6867 CopLINE_set(PL_curcop, PL_parser->copline);
6868 report_redefined_cv(cSVOPo->op_sv, cv, &const_sv);
6869 CopLINE_set(PL_curcop, oldline);
6871 if (!PL_minus_c) /* keep old one around for madskills */
6874 /* (PL_madskills unset in used file.) */
6882 SvREFCNT_inc_simple_void_NN(const_sv);
6884 assert(!CvROOT(cv) && !CvCONST(cv));
6885 sv_setpvs(MUTABLE_SV(cv), ""); /* prototype is "" */
6886 CvXSUBANY(cv).any_ptr = const_sv;
6887 CvXSUB(cv) = const_sv_xsub;
6893 cv = newCONSTSUB_flags(
6894 NULL, name, namlen, name_is_utf8 ? SVf_UTF8 : 0,
6901 SvREFCNT_dec(PL_compcv);
6905 if (cv) { /* must reuse cv if autoloaded */
6906 /* transfer PL_compcv to cv */
6909 && block->op_type != OP_NULL
6912 cv_flags_t existing_builtin_attrs = CvFLAGS(cv) & CVf_BUILTIN_ATTRS;
6913 AV *const temp_av = CvPADLIST(cv);
6914 CV *const temp_cv = CvOUTSIDE(cv);
6916 assert(!CvWEAKOUTSIDE(cv));
6917 assert(!CvCVGV_RC(cv));
6918 assert(CvGV(cv) == gv);
6921 CvFLAGS(cv) = CvFLAGS(PL_compcv) | existing_builtin_attrs;
6922 CvOUTSIDE(cv) = CvOUTSIDE(PL_compcv);
6923 CvOUTSIDE_SEQ(cv) = CvOUTSIDE_SEQ(PL_compcv);
6924 CvPADLIST(cv) = CvPADLIST(PL_compcv);
6925 CvOUTSIDE(PL_compcv) = temp_cv;
6926 CvPADLIST(PL_compcv) = temp_av;
6928 if (CvFILE(cv) && CvDYNFILE(cv)) {
6929 Safefree(CvFILE(cv));
6931 CvFILE_set_from_cop(cv, PL_curcop);
6932 CvSTASH_set(cv, PL_curstash);
6934 /* inner references to PL_compcv must be fixed up ... */
6935 pad_fixup_inner_anons(CvPADLIST(cv), PL_compcv, cv);
6936 if (PERLDB_INTER)/* Advice debugger on the new sub. */
6937 ++PL_sub_generation;
6940 /* Might have had built-in attributes applied -- propagate them. */
6941 CvFLAGS(cv) |= (CvFLAGS(PL_compcv) & CVf_BUILTIN_ATTRS);
6943 /* ... before we throw it away */
6944 SvREFCNT_dec(PL_compcv);
6952 if (strEQ(name, "import")) {
6953 PL_formfeed = MUTABLE_SV(cv);
6954 /* diag_listed_as: SKIPME */
6955 Perl_warner(aTHX_ packWARN(WARN_VOID), "0x%"UVxf"\n", PTR2UV(cv));
6959 if (HvENAME_HEK(GvSTASH(gv)))
6960 /* sub Foo::bar { (shift)+1 } */
6961 mro_method_changed_in(GvSTASH(gv));
6966 CvFILE_set_from_cop(cv, PL_curcop);
6967 CvSTASH_set(cv, PL_curstash);
6971 sv_setpvn(MUTABLE_SV(cv), ps, ps_len);
6972 if ( ps_utf8 ) SvUTF8_on(MUTABLE_SV(cv));
6979 /* If we assign an optree to a PVCV, then we've defined a subroutine that
6980 the debugger could be able to set a breakpoint in, so signal to
6981 pp_entereval that it should not throw away any saved lines at scope
6984 PL_breakable_sub_gen++;
6985 /* This makes sub {}; work as expected. */
6986 if (block->op_type == OP_STUB) {
6987 OP* const newblock = newSTATEOP(0, NULL, 0);
6989 op_getmad(block,newblock,'B');
6995 else block->op_attached = 1;
6996 CvROOT(cv) = CvLVALUE(cv)
6997 ? newUNOP(OP_LEAVESUBLV, 0,
6998 op_lvalue(scalarseq(block), OP_LEAVESUBLV))
6999 : newUNOP(OP_LEAVESUB, 0, scalarseq(block));
7000 CvROOT(cv)->op_private |= OPpREFCOUNTED;
7001 OpREFCNT_set(CvROOT(cv), 1);
7002 CvSTART(cv) = LINKLIST(CvROOT(cv));
7003 CvROOT(cv)->op_next = 0;
7004 CALL_PEEP(CvSTART(cv));
7005 finalize_optree(CvROOT(cv));
7007 /* now that optimizer has done its work, adjust pad values */
7009 pad_tidy(CvCLONE(cv) ? padtidy_SUBCLONE : padtidy_SUB);
7012 assert(!CvCONST(cv));
7013 if (ps && !*ps && op_const_sv(block, cv))
7019 /* Need to do a C<use attributes $stash_of_cv,\&cv,@attrs>. */
7020 HV *stash = name && GvSTASH(CvGV(cv)) ? GvSTASH(CvGV(cv)) : PL_curstash;
7021 apply_attrs(stash, MUTABLE_SV(cv), attrs, FALSE);
7024 if (block && has_name) {
7025 if (PERLDB_SUBLINE && PL_curstash != PL_debstash) {
7026 SV * const tmpstr = sv_newmortal();
7027 GV * const db_postponed = gv_fetchpvs("DB::postponed",
7028 GV_ADDMULTI, SVt_PVHV);
7030 SV * const sv = Perl_newSVpvf(aTHX_ "%s:%ld-%ld",
7033 (long)CopLINE(PL_curcop));
7034 gv_efullname3(tmpstr, gv, NULL);
7035 (void)hv_store(GvHV(PL_DBsub), SvPVX_const(tmpstr),
7036 SvUTF8(tmpstr) ? -(I32)SvCUR(tmpstr) : (I32)SvCUR(tmpstr), sv, 0);
7037 hv = GvHVn(db_postponed);
7038 if (HvTOTALKEYS(hv) > 0 && hv_exists(hv, SvPVX_const(tmpstr), SvUTF8(tmpstr) ? -(I32)SvCUR(tmpstr) : (I32)SvCUR(tmpstr))) {
7039 CV * const pcv = GvCV(db_postponed);
7045 call_sv(MUTABLE_SV(pcv), G_DISCARD);
7050 if (name && ! (PL_parser && PL_parser->error_count))
7051 process_special_blocks(name, gv, cv);
7056 PL_parser->copline = NOLINE;
7062 S_process_special_blocks(pTHX_ const char *const fullname, GV *const gv,
7065 const char *const colon = strrchr(fullname,':');
7066 const char *const name = colon ? colon + 1 : fullname;
7068 PERL_ARGS_ASSERT_PROCESS_SPECIAL_BLOCKS;
7071 if (strEQ(name, "BEGIN")) {
7072 const I32 oldscope = PL_scopestack_ix;
7074 SAVECOPFILE(&PL_compiling);
7075 SAVECOPLINE(&PL_compiling);
7076 SAVEVPTR(PL_curcop);
7078 DEBUG_x( dump_sub(gv) );
7079 Perl_av_create_and_push(aTHX_ &PL_beginav, MUTABLE_SV(cv));
7080 GvCV_set(gv,0); /* cv has been hijacked */
7081 call_list(oldscope, PL_beginav);
7083 CopHINTS_set(&PL_compiling, PL_hints);
7090 if strEQ(name, "END") {
7091 DEBUG_x( dump_sub(gv) );
7092 Perl_av_create_and_unshift_one(aTHX_ &PL_endav, MUTABLE_SV(cv));
7095 } else if (*name == 'U') {
7096 if (strEQ(name, "UNITCHECK")) {
7097 /* It's never too late to run a unitcheck block */
7098 Perl_av_create_and_unshift_one(aTHX_ &PL_unitcheckav, MUTABLE_SV(cv));
7102 } else if (*name == 'C') {
7103 if (strEQ(name, "CHECK")) {
7105 /* diag_listed_as: Too late to run %s block */
7106 Perl_ck_warner(aTHX_ packWARN(WARN_VOID),
7107 "Too late to run CHECK block");
7108 Perl_av_create_and_unshift_one(aTHX_ &PL_checkav, MUTABLE_SV(cv));
7112 } else if (*name == 'I') {
7113 if (strEQ(name, "INIT")) {
7115 /* diag_listed_as: Too late to run %s block */
7116 Perl_ck_warner(aTHX_ packWARN(WARN_VOID),
7117 "Too late to run INIT block");
7118 Perl_av_create_and_push(aTHX_ &PL_initav, MUTABLE_SV(cv));
7124 DEBUG_x( dump_sub(gv) );
7125 GvCV_set(gv,0); /* cv has been hijacked */
7130 =for apidoc newCONSTSUB
7132 See L</newCONSTSUB_flags>.
7138 Perl_newCONSTSUB(pTHX_ HV *stash, const char *name, SV *sv)
7140 return newCONSTSUB_flags(stash, name, name ? strlen(name) : 0, 0, sv);
7144 =for apidoc newCONSTSUB_flags
7146 Creates a constant sub equivalent to Perl C<sub FOO () { 123 }> which is
7147 eligible for inlining at compile-time.
7149 Currently, the only useful value for C<flags> is SVf_UTF8.
7151 Passing NULL for SV creates a constant sub equivalent to C<sub BAR () {}>,
7152 which won't be called if used as a destructor, but will suppress the overhead
7153 of a call to C<AUTOLOAD>. (This form, however, isn't eligible for inlining at
7160 Perl_newCONSTSUB_flags(pTHX_ HV *stash, const char *name, STRLEN len,
7166 const char *const file = CopFILE(PL_curcop);
7168 SV *const temp_sv = CopFILESV(PL_curcop);
7169 const char *const file = temp_sv ? SvPV_nolen_const(temp_sv) : NULL;
7174 if (IN_PERL_RUNTIME) {
7175 /* at runtime, it's not safe to manipulate PL_curcop: it may be
7176 * an op shared between threads. Use a non-shared COP for our
7178 SAVEVPTR(PL_curcop);
7179 SAVECOMPILEWARNINGS();
7180 PL_compiling.cop_warnings = DUP_WARNINGS(PL_curcop->cop_warnings);
7181 PL_curcop = &PL_compiling;
7183 SAVECOPLINE(PL_curcop);
7184 CopLINE_set(PL_curcop, PL_parser ? PL_parser->copline : NOLINE);
7187 PL_hints &= ~HINT_BLOCK_SCOPE;
7190 SAVEGENERICSV(PL_curstash);
7191 PL_curstash = (HV *)SvREFCNT_inc_simple_NN(stash);
7194 /* file becomes the CvFILE. For an XS, it's usually static storage,
7195 and so doesn't get free()d. (It's expected to be from the C pre-
7196 processor __FILE__ directive). But we need a dynamically allocated one,
7197 and we need it to get freed. */
7198 cv = newXS_len_flags(name, len, const_sv_xsub, file ? file : "", "",
7199 &sv, XS_DYNAMIC_FILENAME | flags);
7200 CvXSUBANY(cv).any_ptr = sv;
7209 Perl_newXS_flags(pTHX_ const char *name, XSUBADDR_t subaddr,
7210 const char *const filename, const char *const proto,
7213 PERL_ARGS_ASSERT_NEWXS_FLAGS;
7214 return newXS_len_flags(
7215 name, name ? strlen(name) : 0, subaddr, filename, proto, NULL, flags
7220 Perl_newXS_len_flags(pTHX_ const char *name, STRLEN len,
7221 XSUBADDR_t subaddr, const char *const filename,
7222 const char *const proto, SV **const_svp,
7227 PERL_ARGS_ASSERT_NEWXS_LEN_FLAGS;
7230 GV * const gv = name
7232 name,len,GV_ADDMULTI|flags,SVt_PVCV
7235 (PL_curstash ? "__ANON__" : "__ANON__::__ANON__"),
7236 GV_ADDMULTI | flags, SVt_PVCV);
7239 Perl_croak(aTHX_ "panic: no address for '%s' in '%s'", name, filename);
7241 if ((cv = (name ? GvCV(gv) : NULL))) {
7243 /* just a cached method */
7247 else if (CvROOT(cv) || CvXSUB(cv) || GvASSUMECV(gv)) {
7248 /* already defined (or promised) */
7249 /* Redundant check that allows us to avoid creating an SV
7250 most of the time: */
7251 if (CvCONST(cv) || ckWARN(WARN_REDEFINE)) {
7252 const line_t oldline = CopLINE(PL_curcop);
7253 if (PL_parser && PL_parser->copline != NOLINE)
7254 CopLINE_set(PL_curcop, PL_parser->copline);
7255 report_redefined_cv(newSVpvn_flags(
7256 name,len,(flags&SVf_UTF8)|SVs_TEMP
7259 CopLINE_set(PL_curcop, oldline);
7266 if (cv) /* must reuse cv if autoloaded */
7269 cv = MUTABLE_CV(newSV_type(SVt_PVCV));
7273 if (HvENAME_HEK(GvSTASH(gv)))
7274 mro_method_changed_in(GvSTASH(gv)); /* newXS */
7280 (void)gv_fetchfile(filename);
7281 CvFILE(cv) = (char *)filename; /* NOTE: not copied, as it is expected to be
7282 an external constant string */
7283 assert(!CvDYNFILE(cv)); /* cv_undef should have turned it off */
7285 CvXSUB(cv) = subaddr;
7288 process_special_blocks(name, gv, cv);
7291 if (flags & XS_DYNAMIC_FILENAME) {
7292 CvFILE(cv) = savepv(filename);
7295 sv_setpv(MUTABLE_SV(cv), proto);
7300 Perl_newSTUB(pTHX_ GV *gv, bool fake)
7302 register CV *cv = MUTABLE_CV(newSV_type(SVt_PVCV));
7303 PERL_ARGS_ASSERT_NEWSTUB;
7307 if (!fake && HvENAME_HEK(GvSTASH(gv)))
7308 mro_method_changed_in(GvSTASH(gv));
7310 CvFILE_set_from_cop(cv, PL_curcop);
7311 CvSTASH_set(cv, PL_curstash);
7317 =for apidoc U||newXS
7319 Used by C<xsubpp> to hook up XSUBs as Perl subs. I<filename> needs to be
7320 static storage, as it is used directly as CvFILE(), without a copy being made.
7326 Perl_newXS(pTHX_ const char *name, XSUBADDR_t subaddr, const char *filename)
7328 PERL_ARGS_ASSERT_NEWXS;
7329 return newXS_len_flags(
7330 name, name ? strlen(name) : 0, subaddr, filename, NULL, NULL, 0
7339 Perl_newFORM(pTHX_ I32 floor, OP *o, OP *block)
7344 OP* pegop = newOP(OP_NULL, 0);
7348 ? gv_fetchsv(cSVOPo->op_sv, GV_ADD, SVt_PVFM)
7349 : gv_fetchpvs("STDOUT", GV_ADD|GV_NOTQUAL, SVt_PVFM);
7352 if ((cv = GvFORM(gv))) {
7353 if (ckWARN(WARN_REDEFINE)) {
7354 const line_t oldline = CopLINE(PL_curcop);
7355 if (PL_parser && PL_parser->copline != NOLINE)
7356 CopLINE_set(PL_curcop, PL_parser->copline);
7358 Perl_warner(aTHX_ packWARN(WARN_REDEFINE),
7359 "Format %"SVf" redefined", SVfARG(cSVOPo->op_sv));
7361 /* diag_listed_as: Format %s redefined */
7362 Perl_warner(aTHX_ packWARN(WARN_REDEFINE),
7363 "Format STDOUT redefined");
7365 CopLINE_set(PL_curcop, oldline);
7372 CvFILE_set_from_cop(cv, PL_curcop);
7375 pad_tidy(padtidy_FORMAT);
7376 CvROOT(cv) = newUNOP(OP_LEAVEWRITE, 0, scalarseq(block));
7377 CvROOT(cv)->op_private |= OPpREFCOUNTED;
7378 OpREFCNT_set(CvROOT(cv), 1);
7379 CvSTART(cv) = LINKLIST(CvROOT(cv));
7380 CvROOT(cv)->op_next = 0;
7381 CALL_PEEP(CvSTART(cv));
7382 finalize_optree(CvROOT(cv));
7384 op_getmad(o,pegop,'n');
7385 op_getmad_weak(block, pegop, 'b');
7390 PL_parser->copline = NOLINE;
7398 Perl_newANONLIST(pTHX_ OP *o)
7400 return convert(OP_ANONLIST, OPf_SPECIAL, o);
7404 Perl_newANONHASH(pTHX_ OP *o)
7406 return convert(OP_ANONHASH, OPf_SPECIAL, o);
7410 Perl_newANONSUB(pTHX_ I32 floor, OP *proto, OP *block)
7412 return newANONATTRSUB(floor, proto, NULL, block);
7416 Perl_newANONATTRSUB(pTHX_ I32 floor, OP *proto, OP *attrs, OP *block)
7418 return newUNOP(OP_REFGEN, 0,
7419 newSVOP(OP_ANONCODE, 0,
7420 MUTABLE_SV(newATTRSUB(floor, 0, proto, attrs, block))));
7424 Perl_oopsAV(pTHX_ OP *o)
7428 PERL_ARGS_ASSERT_OOPSAV;
7430 switch (o->op_type) {
7432 o->op_type = OP_PADAV;
7433 o->op_ppaddr = PL_ppaddr[OP_PADAV];
7434 return ref(o, OP_RV2AV);
7437 o->op_type = OP_RV2AV;
7438 o->op_ppaddr = PL_ppaddr[OP_RV2AV];
7443 Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL), "oops: oopsAV");
7450 Perl_oopsHV(pTHX_ OP *o)
7454 PERL_ARGS_ASSERT_OOPSHV;
7456 switch (o->op_type) {
7459 o->op_type = OP_PADHV;
7460 o->op_ppaddr = PL_ppaddr[OP_PADHV];
7461 return ref(o, OP_RV2HV);
7465 o->op_type = OP_RV2HV;
7466 o->op_ppaddr = PL_ppaddr[OP_RV2HV];
7471 Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL), "oops: oopsHV");
7478 Perl_newAVREF(pTHX_ OP *o)
7482 PERL_ARGS_ASSERT_NEWAVREF;
7484 if (o->op_type == OP_PADANY) {
7485 o->op_type = OP_PADAV;
7486 o->op_ppaddr = PL_ppaddr[OP_PADAV];
7489 else if ((o->op_type == OP_RV2AV || o->op_type == OP_PADAV)) {
7490 Perl_ck_warner_d(aTHX_ packWARN(WARN_DEPRECATED),
7491 "Using an array as a reference is deprecated");
7493 return newUNOP(OP_RV2AV, 0, scalar(o));
7497 Perl_newGVREF(pTHX_ I32 type, OP *o)
7499 if (type == OP_MAPSTART || type == OP_GREPSTART || type == OP_SORT)
7500 return newUNOP(OP_NULL, 0, o);
7501 return ref(newUNOP(OP_RV2GV, OPf_REF, o), type);
7505 Perl_newHVREF(pTHX_ OP *o)
7509 PERL_ARGS_ASSERT_NEWHVREF;
7511 if (o->op_type == OP_PADANY) {
7512 o->op_type = OP_PADHV;
7513 o->op_ppaddr = PL_ppaddr[OP_PADHV];
7516 else if ((o->op_type == OP_RV2HV || o->op_type == OP_PADHV)) {
7517 Perl_ck_warner_d(aTHX_ packWARN(WARN_DEPRECATED),
7518 "Using a hash as a reference is deprecated");
7520 return newUNOP(OP_RV2HV, 0, scalar(o));
7524 Perl_newCVREF(pTHX_ I32 flags, OP *o)
7526 return newUNOP(OP_RV2CV, flags, scalar(o));
7530 Perl_newSVREF(pTHX_ OP *o)
7534 PERL_ARGS_ASSERT_NEWSVREF;
7536 if (o->op_type == OP_PADANY) {
7537 o->op_type = OP_PADSV;
7538 o->op_ppaddr = PL_ppaddr[OP_PADSV];
7541 return newUNOP(OP_RV2SV, 0, scalar(o));
7544 /* Check routines. See the comments at the top of this file for details
7545 * on when these are called */
7548 Perl_ck_anoncode(pTHX_ OP *o)
7550 PERL_ARGS_ASSERT_CK_ANONCODE;
7552 cSVOPo->op_targ = pad_add_anon((CV*)cSVOPo->op_sv, o->op_type);
7554 cSVOPo->op_sv = NULL;
7559 Perl_ck_bitop(pTHX_ OP *o)
7563 PERL_ARGS_ASSERT_CK_BITOP;
7565 o->op_private = (U8)(PL_hints & HINT_INTEGER);
7566 if (!(o->op_flags & OPf_STACKED) /* Not an assignment */
7567 && (o->op_type == OP_BIT_OR
7568 || o->op_type == OP_BIT_AND
7569 || o->op_type == OP_BIT_XOR))
7571 const OP * const left = cBINOPo->op_first;
7572 const OP * const right = left->op_sibling;
7573 if ((OP_IS_NUMCOMPARE(left->op_type) &&
7574 (left->op_flags & OPf_PARENS) == 0) ||
7575 (OP_IS_NUMCOMPARE(right->op_type) &&
7576 (right->op_flags & OPf_PARENS) == 0))
7577 Perl_ck_warner(aTHX_ packWARN(WARN_PRECEDENCE),
7578 "Possible precedence problem on bitwise %c operator",
7579 o->op_type == OP_BIT_OR ? '|'
7580 : o->op_type == OP_BIT_AND ? '&' : '^'
7586 PERL_STATIC_INLINE bool
7587 is_dollar_bracket(pTHX_ const OP * const o)
7590 return o->op_type == OP_RV2SV && o->op_flags & OPf_KIDS
7591 && (kid = cUNOPx(o)->op_first)
7592 && kid->op_type == OP_GV
7593 && strEQ(GvNAME(cGVOPx_gv(kid)), "[");
7597 Perl_ck_cmp(pTHX_ OP *o)
7599 PERL_ARGS_ASSERT_CK_CMP;
7600 if (ckWARN(WARN_SYNTAX)) {
7601 const OP *kid = cUNOPo->op_first;
7604 is_dollar_bracket(aTHX_ kid)
7605 && kid->op_sibling && kid->op_sibling->op_type == OP_CONST
7607 || ( kid->op_type == OP_CONST
7608 && (kid = kid->op_sibling) && is_dollar_bracket(aTHX_ kid))
7610 Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
7611 "$[ used in %s (did you mean $] ?)", OP_DESC(o));
7617 Perl_ck_concat(pTHX_ OP *o)
7619 const OP * const kid = cUNOPo->op_first;
7621 PERL_ARGS_ASSERT_CK_CONCAT;
7622 PERL_UNUSED_CONTEXT;
7624 if (kid->op_type == OP_CONCAT && !(kid->op_private & OPpTARGET_MY) &&
7625 !(kUNOP->op_first->op_flags & OPf_MOD))
7626 o->op_flags |= OPf_STACKED;
7631 Perl_ck_spair(pTHX_ OP *o)
7635 PERL_ARGS_ASSERT_CK_SPAIR;
7637 if (o->op_flags & OPf_KIDS) {
7640 const OPCODE type = o->op_type;
7641 o = modkids(ck_fun(o), type);
7642 kid = cUNOPo->op_first;
7643 newop = kUNOP->op_first->op_sibling;
7645 const OPCODE type = newop->op_type;
7646 if (newop->op_sibling || !(PL_opargs[type] & OA_RETSCALAR) ||
7647 type == OP_PADAV || type == OP_PADHV ||
7648 type == OP_RV2AV || type == OP_RV2HV)
7652 op_getmad(kUNOP->op_first,newop,'K');
7654 op_free(kUNOP->op_first);
7656 kUNOP->op_first = newop;
7658 o->op_ppaddr = PL_ppaddr[++o->op_type];
7663 Perl_ck_delete(pTHX_ OP *o)
7665 PERL_ARGS_ASSERT_CK_DELETE;
7669 if (o->op_flags & OPf_KIDS) {
7670 OP * const kid = cUNOPo->op_first;
7671 switch (kid->op_type) {
7673 o->op_flags |= OPf_SPECIAL;
7676 o->op_private |= OPpSLICE;
7679 o->op_flags |= OPf_SPECIAL;
7684 Perl_croak(aTHX_ "%s argument is not a HASH or ARRAY element or slice",
7687 if (kid->op_private & OPpLVAL_INTRO)
7688 o->op_private |= OPpLVAL_INTRO;
7695 Perl_ck_die(pTHX_ OP *o)
7697 PERL_ARGS_ASSERT_CK_DIE;
7700 if (VMSISH_HUSHED) o->op_private |= OPpHUSH_VMSISH;
7706 Perl_ck_eof(pTHX_ OP *o)
7710 PERL_ARGS_ASSERT_CK_EOF;
7712 if (o->op_flags & OPf_KIDS) {
7714 if (cLISTOPo->op_first->op_type == OP_STUB) {
7716 = newUNOP(o->op_type, OPf_SPECIAL, newGVOP(OP_GV, 0, PL_argvgv));
7718 op_getmad(o,newop,'O');
7725 kid = cLISTOPo->op_first;
7726 if (kid->op_type == OP_RV2GV)
7727 kid->op_private |= OPpALLOW_FAKE;
7733 Perl_ck_eval(pTHX_ OP *o)
7737 PERL_ARGS_ASSERT_CK_EVAL;
7739 PL_hints |= HINT_BLOCK_SCOPE;
7740 if (o->op_flags & OPf_KIDS) {
7741 SVOP * const kid = (SVOP*)cUNOPo->op_first;
7744 o->op_flags &= ~OPf_KIDS;
7747 else if (kid->op_type == OP_LINESEQ || kid->op_type == OP_STUB) {
7753 cUNOPo->op_first = 0;
7758 NewOp(1101, enter, 1, LOGOP);
7759 enter->op_type = OP_ENTERTRY;
7760 enter->op_ppaddr = PL_ppaddr[OP_ENTERTRY];
7761 enter->op_private = 0;
7763 /* establish postfix order */
7764 enter->op_next = (OP*)enter;
7766 o = op_prepend_elem(OP_LINESEQ, (OP*)enter, (OP*)kid);
7767 o->op_type = OP_LEAVETRY;
7768 o->op_ppaddr = PL_ppaddr[OP_LEAVETRY];
7769 enter->op_other = o;
7770 op_getmad(oldo,o,'O');
7779 const U8 priv = o->op_private;
7785 o = newUNOP(OP_ENTEREVAL, priv <<8, newDEFSVOP());
7786 op_getmad(oldo,o,'O');
7788 o->op_targ = (PADOFFSET)PL_hints;
7789 if (o->op_private & OPpEVAL_BYTES) o->op_targ &= ~HINT_UTF8;
7790 if ((PL_hints & HINT_LOCALIZE_HH) != 0
7791 && !(o->op_private & OPpEVAL_COPHH) && GvHV(PL_hintgv)) {
7792 /* Store a copy of %^H that pp_entereval can pick up. */
7793 OP *hhop = newSVOP(OP_HINTSEVAL, 0,
7794 MUTABLE_SV(hv_copy_hints_hv(GvHV(PL_hintgv))));
7795 cUNOPo->op_first->op_sibling = hhop;
7796 o->op_private |= OPpEVAL_HAS_HH;
7798 if (!(o->op_private & OPpEVAL_BYTES)
7799 && FEATURE_UNIEVAL_IS_ENABLED)
7800 o->op_private |= OPpEVAL_UNICODE;
7805 Perl_ck_exit(pTHX_ OP *o)
7807 PERL_ARGS_ASSERT_CK_EXIT;
7810 HV * const table = GvHV(PL_hintgv);
7812 SV * const * const svp = hv_fetchs(table, "vmsish_exit", FALSE);
7813 if (svp && *svp && SvTRUE(*svp))
7814 o->op_private |= OPpEXIT_VMSISH;
7816 if (VMSISH_HUSHED) o->op_private |= OPpHUSH_VMSISH;
7822 Perl_ck_exec(pTHX_ OP *o)
7824 PERL_ARGS_ASSERT_CK_EXEC;
7826 if (o->op_flags & OPf_STACKED) {
7829 kid = cUNOPo->op_first->op_sibling;
7830 if (kid->op_type == OP_RV2GV)
7839 Perl_ck_exists(pTHX_ OP *o)
7843 PERL_ARGS_ASSERT_CK_EXISTS;
7846 if (o->op_flags & OPf_KIDS) {
7847 OP * const kid = cUNOPo->op_first;
7848 if (kid->op_type == OP_ENTERSUB) {
7849 (void) ref(kid, o->op_type);
7850 if (kid->op_type != OP_RV2CV
7851 && !(PL_parser && PL_parser->error_count))
7852 Perl_croak(aTHX_ "%s argument is not a subroutine name",
7854 o->op_private |= OPpEXISTS_SUB;
7856 else if (kid->op_type == OP_AELEM)
7857 o->op_flags |= OPf_SPECIAL;
7858 else if (kid->op_type != OP_HELEM)
7859 Perl_croak(aTHX_ "%s argument is not a HASH or ARRAY element or a subroutine",
7867 Perl_ck_rvconst(pTHX_ register OP *o)
7870 SVOP * const kid = (SVOP*)cUNOPo->op_first;
7872 PERL_ARGS_ASSERT_CK_RVCONST;
7874 o->op_private |= (PL_hints & HINT_STRICT_REFS);
7875 if (o->op_type == OP_RV2CV)
7876 o->op_private &= ~1;
7878 if (kid->op_type == OP_CONST) {
7881 SV * const kidsv = kid->op_sv;
7883 /* Is it a constant from cv_const_sv()? */
7884 if (SvROK(kidsv) && SvREADONLY(kidsv)) {
7885 SV * const rsv = SvRV(kidsv);
7886 const svtype type = SvTYPE(rsv);
7887 const char *badtype = NULL;
7889 switch (o->op_type) {
7891 if (type > SVt_PVMG)
7892 badtype = "a SCALAR";
7895 if (type != SVt_PVAV)
7896 badtype = "an ARRAY";
7899 if (type != SVt_PVHV)
7903 if (type != SVt_PVCV)
7908 Perl_croak(aTHX_ "Constant is not %s reference", badtype);
7911 if ((o->op_private & HINT_STRICT_REFS) && (kid->op_private & OPpCONST_BARE)) {
7912 const char *badthing;
7913 switch (o->op_type) {
7915 badthing = "a SCALAR";
7918 badthing = "an ARRAY";
7921 badthing = "a HASH";
7929 "Can't use bareword (\"%"SVf"\") as %s ref while \"strict refs\" in use",
7930 SVfARG(kidsv), badthing);
7933 * This is a little tricky. We only want to add the symbol if we
7934 * didn't add it in the lexer. Otherwise we get duplicate strict
7935 * warnings. But if we didn't add it in the lexer, we must at
7936 * least pretend like we wanted to add it even if it existed before,
7937 * or we get possible typo warnings. OPpCONST_ENTERED says
7938 * whether the lexer already added THIS instance of this symbol.
7940 iscv = (o->op_type == OP_RV2CV) * 2;
7942 gv = gv_fetchsv(kidsv,
7943 iscv | !(kid->op_private & OPpCONST_ENTERED),
7946 : o->op_type == OP_RV2SV
7948 : o->op_type == OP_RV2AV
7950 : o->op_type == OP_RV2HV
7953 } while (!gv && !(kid->op_private & OPpCONST_ENTERED) && !iscv++);
7955 kid->op_type = OP_GV;
7956 SvREFCNT_dec(kid->op_sv);
7958 /* XXX hack: dependence on sizeof(PADOP) <= sizeof(SVOP) */
7959 kPADOP->op_padix = pad_alloc(OP_GV, SVs_PADTMP);
7960 SvREFCNT_dec(PAD_SVl(kPADOP->op_padix));
7962 PAD_SETSV(kPADOP->op_padix, MUTABLE_SV(SvREFCNT_inc_simple_NN(gv)));
7964 kid->op_sv = SvREFCNT_inc_simple_NN(gv);
7966 kid->op_private = 0;
7967 kid->op_ppaddr = PL_ppaddr[OP_GV];
7968 /* FAKE globs in the symbol table cause weird bugs (#77810) */
7976 Perl_ck_ftst(pTHX_ OP *o)
7979 const I32 type = o->op_type;
7981 PERL_ARGS_ASSERT_CK_FTST;
7983 if (o->op_flags & OPf_REF) {
7986 else if (o->op_flags & OPf_KIDS && cUNOPo->op_first->op_type != OP_STUB) {
7987 SVOP * const kid = (SVOP*)cUNOPo->op_first;
7988 const OPCODE kidtype = kid->op_type;
7990 if (kidtype == OP_CONST && (kid->op_private & OPpCONST_BARE)) {
7991 OP * const newop = newGVOP(type, OPf_REF,
7992 gv_fetchsv(kid->op_sv, GV_ADD, SVt_PVIO));
7994 op_getmad(o,newop,'O');
8000 if ((PL_hints & HINT_FILETEST_ACCESS) && OP_IS_FILETEST_ACCESS(o->op_type))
8001 o->op_private |= OPpFT_ACCESS;
8002 if (PL_check[kidtype] == Perl_ck_ftst
8003 && kidtype != OP_STAT && kidtype != OP_LSTAT) {
8004 o->op_private |= OPpFT_STACKED;
8005 kid->op_private |= OPpFT_STACKING;
8006 if (kidtype == OP_FTTTY && (
8007 !(kid->op_private & OPpFT_STACKED)
8008 || kid->op_private & OPpFT_AFTER_t
8010 o->op_private |= OPpFT_AFTER_t;
8019 if (type == OP_FTTTY)
8020 o = newGVOP(type, OPf_REF, PL_stdingv);
8022 o = newUNOP(type, 0, newDEFSVOP());
8023 op_getmad(oldo,o,'O');
8029 Perl_ck_fun(pTHX_ OP *o)
8032 const int type = o->op_type;
8033 register I32 oa = PL_opargs[type] >> OASHIFT;
8035 PERL_ARGS_ASSERT_CK_FUN;
8037 if (o->op_flags & OPf_STACKED) {
8038 if ((oa & OA_OPTIONAL) && (oa >> 4) && !((oa >> 4) & OA_OPTIONAL))
8041 return no_fh_allowed(o);
8044 if (o->op_flags & OPf_KIDS) {
8045 OP **tokid = &cLISTOPo->op_first;
8046 register OP *kid = cLISTOPo->op_first;
8049 bool seen_optional = FALSE;
8051 if (kid->op_type == OP_PUSHMARK ||
8052 (kid->op_type == OP_NULL && kid->op_targ == OP_PUSHMARK))
8054 tokid = &kid->op_sibling;
8055 kid = kid->op_sibling;
8057 if (kid && kid->op_type == OP_COREARGS) {
8058 bool optional = FALSE;
8061 if (oa & OA_OPTIONAL) optional = TRUE;
8064 if (optional) o->op_private |= numargs;
8069 if (oa & OA_OPTIONAL || (oa & 7) == OA_LIST) {
8070 if (!kid && !seen_optional && PL_opargs[type] & OA_DEFGV)
8071 *tokid = kid = newDEFSVOP();
8072 seen_optional = TRUE;
8077 sibl = kid->op_sibling;
8079 if (!sibl && kid->op_type == OP_STUB) {
8086 /* list seen where single (scalar) arg expected? */
8087 if (numargs == 1 && !(oa >> 4)
8088 && kid->op_type == OP_LIST && type != OP_SCALAR)
8090 return too_many_arguments_pv(o,PL_op_desc[type], 0);
8103 if ((type == OP_PUSH || type == OP_UNSHIFT)
8104 && !kid->op_sibling)
8105 Perl_ck_warner(aTHX_ packWARN(WARN_SYNTAX),
8106 "Useless use of %s with no values",
8109 if (kid->op_type == OP_CONST &&
8110 (kid->op_private & OPpCONST_BARE))
8112 OP * const newop = newAVREF(newGVOP(OP_GV, 0,
8113 gv_fetchsv(((SVOP*)kid)->op_sv, GV_ADD, SVt_PVAV) ));
8114 Perl_ck_warner_d(aTHX_ packWARN(WARN_DEPRECATED),
8115 "Array @%"SVf" missing the @ in argument %"IVdf" of %s()",
8116 SVfARG(((SVOP*)kid)->op_sv), (IV)numargs, PL_op_desc[type]);
8118 op_getmad(kid,newop,'K');
8123 kid->op_sibling = sibl;
8126 else if (kid->op_type == OP_CONST
8127 && ( !SvROK(cSVOPx_sv(kid))
8128 || SvTYPE(SvRV(cSVOPx_sv(kid))) != SVt_PVAV )
8130 bad_type_pv(numargs, "array", PL_op_desc[type], 0, kid);
8131 /* Defer checks to run-time if we have a scalar arg */
8132 if (kid->op_type == OP_RV2AV || kid->op_type == OP_PADAV)
8133 op_lvalue(kid, type);
8137 if (kid->op_type == OP_CONST &&
8138 (kid->op_private & OPpCONST_BARE))
8140 OP * const newop = newHVREF(newGVOP(OP_GV, 0,
8141 gv_fetchsv(((SVOP*)kid)->op_sv, GV_ADD, SVt_PVHV) ));
8142 Perl_ck_warner_d(aTHX_ packWARN(WARN_DEPRECATED),
8143 "Hash %%%"SVf" missing the %% in argument %"IVdf" of %s()",
8144 SVfARG(((SVOP*)kid)->op_sv), (IV)numargs, PL_op_desc[type]);
8146 op_getmad(kid,newop,'K');
8151 kid->op_sibling = sibl;
8154 else if (kid->op_type != OP_RV2HV && kid->op_type != OP_PADHV)
8155 bad_type_pv(numargs, "hash", PL_op_desc[type], 0, kid);
8156 op_lvalue(kid, type);
8160 OP * const newop = newUNOP(OP_NULL, 0, kid);
8161 kid->op_sibling = 0;
8163 newop->op_next = newop;
8165 kid->op_sibling = sibl;
8170 if (kid->op_type != OP_GV && kid->op_type != OP_RV2GV) {
8171 if (kid->op_type == OP_CONST &&
8172 (kid->op_private & OPpCONST_BARE))
8174 OP * const newop = newGVOP(OP_GV, 0,
8175 gv_fetchsv(((SVOP*)kid)->op_sv, GV_ADD, SVt_PVIO));
8176 if (!(o->op_private & 1) && /* if not unop */
8177 kid == cLISTOPo->op_last)
8178 cLISTOPo->op_last = newop;
8180 op_getmad(kid,newop,'K');
8186 else if (kid->op_type == OP_READLINE) {
8187 /* neophyte patrol: open(<FH>), close(<FH>) etc. */
8188 bad_type_pv(numargs, "HANDLE", OP_DESC(o), 0, kid);
8191 I32 flags = OPf_SPECIAL;
8195 /* is this op a FH constructor? */
8196 if (is_handle_constructor(o,numargs)) {
8197 const char *name = NULL;
8200 bool want_dollar = TRUE;
8203 /* Set a flag to tell rv2gv to vivify
8204 * need to "prove" flag does not mean something
8205 * else already - NI-S 1999/05/07
8208 if (kid->op_type == OP_PADSV) {
8210 = PAD_COMPNAME_SV(kid->op_targ);
8211 name = SvPV_const(namesv, len);
8212 name_utf8 = SvUTF8(namesv);
8214 else if (kid->op_type == OP_RV2SV
8215 && kUNOP->op_first->op_type == OP_GV)
8217 GV * const gv = cGVOPx_gv(kUNOP->op_first);
8219 len = GvNAMELEN(gv);
8220 name_utf8 = GvNAMEUTF8(gv) ? SVf_UTF8 : 0;
8222 else if (kid->op_type == OP_AELEM
8223 || kid->op_type == OP_HELEM)
8226 OP *op = ((BINOP*)kid)->op_first;
8230 const char * const a =
8231 kid->op_type == OP_AELEM ?
8233 if (((op->op_type == OP_RV2AV) ||
8234 (op->op_type == OP_RV2HV)) &&
8235 (firstop = ((UNOP*)op)->op_first) &&
8236 (firstop->op_type == OP_GV)) {
8237 /* packagevar $a[] or $h{} */
8238 GV * const gv = cGVOPx_gv(firstop);
8246 else if (op->op_type == OP_PADAV
8247 || op->op_type == OP_PADHV) {
8248 /* lexicalvar $a[] or $h{} */
8249 const char * const padname =
8250 PAD_COMPNAME_PV(op->op_targ);
8259 name = SvPV_const(tmpstr, len);
8260 name_utf8 = SvUTF8(tmpstr);
8265 name = "__ANONIO__";
8267 want_dollar = FALSE;
8269 op_lvalue(kid, type);
8273 targ = pad_alloc(OP_RV2GV, SVs_PADTMP);
8274 namesv = PAD_SVl(targ);
8275 SvUPGRADE(namesv, SVt_PV);
8276 if (want_dollar && *name != '$')
8277 sv_setpvs(namesv, "$");
8278 sv_catpvn(namesv, name, len);
8279 if ( name_utf8 ) SvUTF8_on(namesv);
8282 kid->op_sibling = 0;
8283 kid = newUNOP(OP_RV2GV, flags, scalar(kid));
8284 kid->op_targ = targ;
8285 kid->op_private |= priv;
8287 kid->op_sibling = sibl;
8293 if ((type == OP_UNDEF || type == OP_POS)
8294 && numargs == 1 && !(oa >> 4)
8295 && kid->op_type == OP_LIST)
8296 return too_many_arguments_pv(o,PL_op_desc[type], 0);
8297 op_lvalue(scalar(kid), type);
8301 tokid = &kid->op_sibling;
8302 kid = kid->op_sibling;
8305 if (kid && kid->op_type != OP_STUB)
8306 return too_many_arguments_pv(o,OP_DESC(o), 0);
8307 o->op_private |= numargs;
8309 /* FIXME - should the numargs move as for the PERL_MAD case? */
8310 o->op_private |= numargs;
8312 return too_many_arguments_pv(o,OP_DESC(o), 0);
8316 else if (PL_opargs[type] & OA_DEFGV) {
8318 OP *newop = newUNOP(type, 0, newDEFSVOP());
8319 op_getmad(o,newop,'O');
8322 /* Ordering of these two is important to keep f_map.t passing. */
8324 return newUNOP(type, 0, newDEFSVOP());
8329 while (oa & OA_OPTIONAL)
8331 if (oa && oa != OA_LIST)
8332 return too_few_arguments_pv(o,OP_DESC(o), 0);
8338 Perl_ck_glob(pTHX_ OP *o)
8342 const bool core = o->op_flags & OPf_SPECIAL;
8344 PERL_ARGS_ASSERT_CK_GLOB;
8347 if ((o->op_flags & OPf_KIDS) && !cLISTOPo->op_first->op_sibling)
8348 op_append_elem(OP_GLOB, o, newDEFSVOP()); /* glob() => glob($_) */
8350 if (core) gv = NULL;
8351 else if (!((gv = gv_fetchpvs("glob", GV_NOTQUAL, SVt_PVCV))
8352 && GvCVu(gv) && GvIMPORTED_CV(gv)))
8354 GV * const * const gvp =
8355 (GV **)hv_fetchs(PL_globalstash, "glob", FALSE);
8356 gv = gvp ? *gvp : NULL;
8359 if (gv && GvCVu(gv) && GvIMPORTED_CV(gv)) {
8362 * \ null - const(wildcard)
8367 * \ mark - glob - rv2cv
8368 * | \ gv(CORE::GLOBAL::glob)
8370 * \ null - const(wildcard) - const(ix)
8372 o->op_flags |= OPf_SPECIAL;
8373 o->op_targ = pad_alloc(OP_GLOB, SVs_PADTMP);
8374 op_append_elem(OP_GLOB, o,
8375 newSVOP(OP_CONST, 0, newSViv(PL_glob_index++)));
8376 o = newLISTOP(OP_LIST, 0, o, NULL);
8377 o = newUNOP(OP_ENTERSUB, OPf_STACKED,
8378 op_append_elem(OP_LIST, o,
8379 scalar(newUNOP(OP_RV2CV, 0,
8380 newGVOP(OP_GV, 0, gv)))));
8381 o = newUNOP(OP_NULL, 0, o);
8382 o->op_targ = OP_GLOB; /* hint at what it used to be: eg in newWHILEOP */
8385 else o->op_flags &= ~OPf_SPECIAL;
8386 #if !defined(PERL_EXTERNAL_GLOB)
8389 Perl_load_module(aTHX_ PERL_LOADMOD_NOIMPORT,
8390 newSVpvs("File::Glob"), NULL, NULL, NULL);
8393 #endif /* !PERL_EXTERNAL_GLOB */
8394 gv = newGVgen("main");
8396 #ifndef PERL_EXTERNAL_GLOB
8397 sv_setiv(GvSVn(gv),PL_glob_index++);
8399 op_append_elem(OP_GLOB, o, newGVOP(OP_GV, 0, gv));
8405 Perl_ck_grep(pTHX_ OP *o)
8410 const OPCODE type = o->op_type == OP_GREPSTART ? OP_GREPWHILE : OP_MAPWHILE;
8413 PERL_ARGS_ASSERT_CK_GREP;
8415 o->op_ppaddr = PL_ppaddr[OP_GREPSTART];
8416 /* don't allocate gwop here, as we may leak it if PL_parser->error_count > 0 */
8418 if (o->op_flags & OPf_STACKED) {
8421 kid = cUNOPx(cLISTOPo->op_first->op_sibling)->op_first;
8422 if (kid->op_type != OP_SCOPE && kid->op_type != OP_LEAVE)
8423 return no_fh_allowed(o);
8424 for (k = kid; k; k = k->op_next) {
8427 NewOp(1101, gwop, 1, LOGOP);
8428 kid->op_next = (OP*)gwop;
8429 o->op_flags &= ~OPf_STACKED;
8431 kid = cLISTOPo->op_first->op_sibling;
8432 if (type == OP_MAPWHILE)
8437 if (PL_parser && PL_parser->error_count)
8439 kid = cLISTOPo->op_first->op_sibling;
8440 if (kid->op_type != OP_NULL)
8441 Perl_croak(aTHX_ "panic: ck_grep, type=%u", (unsigned) kid->op_type);
8442 kid = kUNOP->op_first;
8445 NewOp(1101, gwop, 1, LOGOP);
8446 gwop->op_type = type;
8447 gwop->op_ppaddr = PL_ppaddr[type];
8448 gwop->op_first = listkids(o);
8449 gwop->op_flags |= OPf_KIDS;
8450 gwop->op_other = LINKLIST(kid);
8451 kid->op_next = (OP*)gwop;
8452 offset = pad_findmy_pvs("$_", 0);
8453 if (offset == NOT_IN_PAD || PAD_COMPNAME_FLAGS_isOUR(offset)) {
8454 o->op_private = gwop->op_private = 0;
8455 gwop->op_targ = pad_alloc(type, SVs_PADTMP);
8458 o->op_private = gwop->op_private = OPpGREP_LEX;
8459 gwop->op_targ = o->op_targ = offset;
8462 kid = cLISTOPo->op_first->op_sibling;
8463 if (!kid || !kid->op_sibling)
8464 return too_few_arguments_pv(o,OP_DESC(o), 0);
8465 for (kid = kid->op_sibling; kid; kid = kid->op_sibling)
8466 op_lvalue(kid, OP_GREPSTART);
8472 Perl_ck_index(pTHX_ OP *o)
8474 PERL_ARGS_ASSERT_CK_INDEX;
8476 if (o->op_flags & OPf_KIDS) {
8477 OP *kid = cLISTOPo->op_first->op_sibling; /* get past pushmark */
8479 kid = kid->op_sibling; /* get past "big" */
8480 if (kid && kid->op_type == OP_CONST) {
8481 const bool save_taint = PL_tainted;
8482 fbm_compile(((SVOP*)kid)->op_sv, 0);
8483 PL_tainted = save_taint;
8490 Perl_ck_lfun(pTHX_ OP *o)
8492 const OPCODE type = o->op_type;
8494 PERL_ARGS_ASSERT_CK_LFUN;
8496 return modkids(ck_fun(o), type);
8500 Perl_ck_defined(pTHX_ OP *o) /* 19990527 MJD */
8502 PERL_ARGS_ASSERT_CK_DEFINED;
8504 if ((o->op_flags & OPf_KIDS)) {
8505 switch (cUNOPo->op_first->op_type) {
8508 case OP_AASSIGN: /* Is this a good idea? */
8509 Perl_ck_warner_d(aTHX_ packWARN(WARN_DEPRECATED),
8510 "defined(@array) is deprecated");
8511 Perl_ck_warner_d(aTHX_ packWARN(WARN_DEPRECATED),
8512 "\t(Maybe you should just omit the defined()?)\n");
8516 Perl_ck_warner_d(aTHX_ packWARN(WARN_DEPRECATED),
8517 "defined(%%hash) is deprecated");
8518 Perl_ck_warner_d(aTHX_ packWARN(WARN_DEPRECATED),
8519 "\t(Maybe you should just omit the defined()?)\n");
8530 Perl_ck_readline(pTHX_ OP *o)
8532 PERL_ARGS_ASSERT_CK_READLINE;
8534 if (o->op_flags & OPf_KIDS) {
8535 OP *kid = cLISTOPo->op_first;
8536 if (kid->op_type == OP_RV2GV) kid->op_private |= OPpALLOW_FAKE;
8540 = newUNOP(OP_READLINE, 0, newGVOP(OP_GV, 0, PL_argvgv));
8542 op_getmad(o,newop,'O');
8552 Perl_ck_rfun(pTHX_ OP *o)
8554 const OPCODE type = o->op_type;
8556 PERL_ARGS_ASSERT_CK_RFUN;
8558 return refkids(ck_fun(o), type);
8562 Perl_ck_listiob(pTHX_ OP *o)
8566 PERL_ARGS_ASSERT_CK_LISTIOB;
8568 kid = cLISTOPo->op_first;
8571 kid = cLISTOPo->op_first;
8573 if (kid->op_type == OP_PUSHMARK)
8574 kid = kid->op_sibling;
8575 if (kid && o->op_flags & OPf_STACKED)
8576 kid = kid->op_sibling;
8577 else if (kid && !kid->op_sibling) { /* print HANDLE; */
8578 if (kid->op_type == OP_CONST && kid->op_private & OPpCONST_BARE) {
8579 o->op_flags |= OPf_STACKED; /* make it a filehandle */
8580 kid = newUNOP(OP_RV2GV, OPf_REF, scalar(kid));
8581 cLISTOPo->op_first->op_sibling = kid;
8582 cLISTOPo->op_last = kid;
8583 kid = kid->op_sibling;
8588 op_append_elem(o->op_type, o, newDEFSVOP());
8590 if (o->op_type == OP_PRTF) return modkids(listkids(o), OP_PRTF);
8595 Perl_ck_smartmatch(pTHX_ OP *o)
8598 PERL_ARGS_ASSERT_CK_SMARTMATCH;
8599 if (0 == (o->op_flags & OPf_SPECIAL)) {
8600 OP *first = cBINOPo->op_first;
8601 OP *second = first->op_sibling;
8603 /* Implicitly take a reference to an array or hash */
8604 first->op_sibling = NULL;
8605 first = cBINOPo->op_first = ref_array_or_hash(first);
8606 second = first->op_sibling = ref_array_or_hash(second);
8608 /* Implicitly take a reference to a regular expression */
8609 if (first->op_type == OP_MATCH) {
8610 first->op_type = OP_QR;
8611 first->op_ppaddr = PL_ppaddr[OP_QR];
8613 if (second->op_type == OP_MATCH) {
8614 second->op_type = OP_QR;
8615 second->op_ppaddr = PL_ppaddr[OP_QR];
8624 Perl_ck_sassign(pTHX_ OP *o)
8627 OP * const kid = cLISTOPo->op_first;
8629 PERL_ARGS_ASSERT_CK_SASSIGN;
8631 /* has a disposable target? */
8632 if ((PL_opargs[kid->op_type] & OA_TARGLEX)
8633 && !(kid->op_flags & OPf_STACKED)
8634 /* Cannot steal the second time! */
8635 && !(kid->op_private & OPpTARGET_MY)
8636 /* Keep the full thing for madskills */
8640 OP * const kkid = kid->op_sibling;
8642 /* Can just relocate the target. */
8643 if (kkid && kkid->op_type == OP_PADSV
8644 && !(kkid->op_private & OPpLVAL_INTRO))
8646 kid->op_targ = kkid->op_targ;
8648 /* Now we do not need PADSV and SASSIGN. */
8649 kid->op_sibling = o->op_sibling; /* NULL */
8650 cLISTOPo->op_first = NULL;
8653 kid->op_private |= OPpTARGET_MY; /* Used for context settings */
8657 if (kid->op_sibling) {
8658 OP *kkid = kid->op_sibling;
8659 /* For state variable assignment, kkid is a list op whose op_last
8661 if ((kkid->op_type == OP_PADSV ||
8662 (kkid->op_type == OP_LIST &&
8663 (kkid = cLISTOPx(kkid)->op_last)->op_type == OP_PADSV
8666 && (kkid->op_private & OPpLVAL_INTRO)
8667 && SvPAD_STATE(*av_fetch(PL_comppad_name, kkid->op_targ, FALSE))) {
8668 const PADOFFSET target = kkid->op_targ;
8669 OP *const other = newOP(OP_PADSV,
8671 | ((kkid->op_private & ~OPpLVAL_INTRO) << 8));
8672 OP *const first = newOP(OP_NULL, 0);
8673 OP *const nullop = newCONDOP(0, first, o, other);
8674 OP *const condop = first->op_next;
8675 /* hijacking PADSTALE for uninitialized state variables */
8676 SvPADSTALE_on(PAD_SVl(target));
8678 condop->op_type = OP_ONCE;
8679 condop->op_ppaddr = PL_ppaddr[OP_ONCE];
8680 condop->op_targ = target;
8681 other->op_targ = target;
8683 /* Because we change the type of the op here, we will skip the
8684 assignment binop->op_last = binop->op_first->op_sibling; at the
8685 end of Perl_newBINOP(). So need to do it here. */
8686 cBINOPo->op_last = cBINOPo->op_first->op_sibling;
8695 Perl_ck_match(pTHX_ OP *o)
8699 PERL_ARGS_ASSERT_CK_MATCH;
8701 if (o->op_type != OP_QR && PL_compcv) {
8702 const PADOFFSET offset = pad_findmy_pvs("$_", 0);
8703 if (offset != NOT_IN_PAD && !(PAD_COMPNAME_FLAGS_isOUR(offset))) {
8704 o->op_targ = offset;
8705 o->op_private |= OPpTARGET_MY;
8708 if (o->op_type == OP_MATCH || o->op_type == OP_QR)
8709 o->op_private |= OPpRUNTIME;
8714 Perl_ck_method(pTHX_ OP *o)
8716 OP * const kid = cUNOPo->op_first;
8718 PERL_ARGS_ASSERT_CK_METHOD;
8720 if (kid->op_type == OP_CONST) {
8721 SV* sv = kSVOP->op_sv;
8722 const char * const method = SvPVX_const(sv);
8723 if (!(strchr(method, ':') || strchr(method, '\''))) {
8725 if (!SvREADONLY(sv) || !SvFAKE(sv)) {
8726 sv = newSVpvn_share(method, SvUTF8(sv) ? -(I32)SvCUR(sv) : (I32)SvCUR(sv), 0);
8729 kSVOP->op_sv = NULL;
8731 cmop = newSVOP(OP_METHOD_NAMED, 0, sv);
8733 op_getmad(o,cmop,'O');
8744 Perl_ck_null(pTHX_ OP *o)
8746 PERL_ARGS_ASSERT_CK_NULL;
8747 PERL_UNUSED_CONTEXT;
8752 Perl_ck_open(pTHX_ OP *o)
8755 HV * const table = GvHV(PL_hintgv);
8757 PERL_ARGS_ASSERT_CK_OPEN;
8760 SV **svp = hv_fetchs(table, "open_IN", FALSE);
8763 const char *d = SvPV_const(*svp, len);
8764 const I32 mode = mode_from_discipline(d, len);
8765 if (mode & O_BINARY)
8766 o->op_private |= OPpOPEN_IN_RAW;
8767 else if (mode & O_TEXT)
8768 o->op_private |= OPpOPEN_IN_CRLF;
8771 svp = hv_fetchs(table, "open_OUT", FALSE);
8774 const char *d = SvPV_const(*svp, len);
8775 const I32 mode = mode_from_discipline(d, len);
8776 if (mode & O_BINARY)
8777 o->op_private |= OPpOPEN_OUT_RAW;
8778 else if (mode & O_TEXT)
8779 o->op_private |= OPpOPEN_OUT_CRLF;
8782 if (o->op_type == OP_BACKTICK) {
8783 if (!(o->op_flags & OPf_KIDS)) {
8784 OP * const newop = newUNOP(OP_BACKTICK, 0, newDEFSVOP());
8786 op_getmad(o,newop,'O');
8795 /* In case of three-arg dup open remove strictness
8796 * from the last arg if it is a bareword. */
8797 OP * const first = cLISTOPx(o)->op_first; /* The pushmark. */
8798 OP * const last = cLISTOPx(o)->op_last; /* The bareword. */
8802 if ((last->op_type == OP_CONST) && /* The bareword. */
8803 (last->op_private & OPpCONST_BARE) &&
8804 (last->op_private & OPpCONST_STRICT) &&
8805 (oa = first->op_sibling) && /* The fh. */
8806 (oa = oa->op_sibling) && /* The mode. */
8807 (oa->op_type == OP_CONST) &&
8808 SvPOK(((SVOP*)oa)->op_sv) &&
8809 (mode = SvPVX_const(((SVOP*)oa)->op_sv)) &&
8810 mode[0] == '>' && mode[1] == '&' && /* A dup open. */
8811 (last == oa->op_sibling)) /* The bareword. */
8812 last->op_private &= ~OPpCONST_STRICT;
8818 Perl_ck_repeat(pTHX_ OP *o)
8820 PERL_ARGS_ASSERT_CK_REPEAT;
8822 if (cBINOPo->op_first->op_flags & OPf_PARENS) {
8823 o->op_private |= OPpREPEAT_DOLIST;
8824 cBINOPo->op_first = force_list(cBINOPo->op_first);
8832 Perl_ck_require(pTHX_ OP *o)
8837 PERL_ARGS_ASSERT_CK_REQUIRE;
8839 if (o->op_flags & OPf_KIDS) { /* Shall we supply missing .pm? */
8840 SVOP * const kid = (SVOP*)cUNOPo->op_first;
8842 if (kid->op_type == OP_CONST && (kid->op_private & OPpCONST_BARE)) {
8843 SV * const sv = kid->op_sv;
8844 U32 was_readonly = SvREADONLY(sv);
8851 sv_force_normal_flags(sv, 0);
8852 assert(!SvREADONLY(sv));
8862 for (; s < end; s++) {
8863 if (*s == ':' && s[1] == ':') {
8865 Move(s+2, s+1, end - s - 1, char);
8870 sv_catpvs(sv, ".pm");
8871 SvFLAGS(sv) |= was_readonly;
8875 if (!(o->op_flags & OPf_SPECIAL)) { /* Wasn't written as CORE::require */
8876 /* handle override, if any */
8877 gv = gv_fetchpvs("require", GV_NOTQUAL, SVt_PVCV);
8878 if (!(gv && GvCVu(gv) && GvIMPORTED_CV(gv))) {
8879 GV * const * const gvp = (GV**)hv_fetchs(PL_globalstash, "require", FALSE);
8880 gv = gvp ? *gvp : NULL;
8884 if (gv && GvCVu(gv) && GvIMPORTED_CV(gv)) {
8886 if (o->op_flags & OPf_KIDS) {
8887 kid = cUNOPo->op_first;
8888 cUNOPo->op_first = NULL;
8896 newop = newUNOP(OP_ENTERSUB, OPf_STACKED,
8897 op_append_elem(OP_LIST, kid,
8898 scalar(newUNOP(OP_RV2CV, 0,
8901 op_getmad(o,newop,'O');
8905 return scalar(ck_fun(o));
8909 Perl_ck_return(pTHX_ OP *o)
8914 PERL_ARGS_ASSERT_CK_RETURN;
8916 kid = cLISTOPo->op_first->op_sibling;
8917 if (CvLVALUE(PL_compcv)) {
8918 for (; kid; kid = kid->op_sibling)
8919 op_lvalue(kid, OP_LEAVESUBLV);
8926 Perl_ck_select(pTHX_ OP *o)
8931 PERL_ARGS_ASSERT_CK_SELECT;
8933 if (o->op_flags & OPf_KIDS) {
8934 kid = cLISTOPo->op_first->op_sibling; /* get past pushmark */
8935 if (kid && kid->op_sibling) {
8936 o->op_type = OP_SSELECT;
8937 o->op_ppaddr = PL_ppaddr[OP_SSELECT];
8939 return fold_constants(op_integerize(op_std_init(o)));
8943 kid = cLISTOPo->op_first->op_sibling; /* get past pushmark */
8944 if (kid && kid->op_type == OP_RV2GV)
8945 kid->op_private &= ~HINT_STRICT_REFS;
8950 Perl_ck_shift(pTHX_ OP *o)
8953 const I32 type = o->op_type;
8955 PERL_ARGS_ASSERT_CK_SHIFT;
8957 if (!(o->op_flags & OPf_KIDS)) {
8960 if (!CvUNIQUE(PL_compcv)) {
8961 o->op_flags |= OPf_SPECIAL;
8965 argop = newUNOP(OP_RV2AV, 0, scalar(newGVOP(OP_GV, 0, PL_argvgv)));
8968 OP * const oldo = o;
8969 o = newUNOP(type, 0, scalar(argop));
8970 op_getmad(oldo,o,'O');
8975 return newUNOP(type, 0, scalar(argop));
8978 return scalar(ck_fun(o));
8982 Perl_ck_sort(pTHX_ OP *o)
8987 PERL_ARGS_ASSERT_CK_SORT;
8989 if (o->op_type == OP_SORT && (PL_hints & HINT_LOCALIZE_HH) != 0) {
8990 HV * const hinthv = GvHV(PL_hintgv);
8992 SV ** const svp = hv_fetchs(hinthv, "sort", FALSE);
8994 const I32 sorthints = (I32)SvIV(*svp);
8995 if ((sorthints & HINT_SORT_QUICKSORT) != 0)
8996 o->op_private |= OPpSORT_QSORT;
8997 if ((sorthints & HINT_SORT_STABLE) != 0)
8998 o->op_private |= OPpSORT_STABLE;
9003 if (o->op_type == OP_SORT && o->op_flags & OPf_STACKED)
9005 firstkid = cLISTOPo->op_first->op_sibling; /* get past pushmark */
9006 if (o->op_flags & OPf_STACKED) { /* may have been cleared */
9008 OP *kid = cUNOPx(firstkid)->op_first; /* get past null */
9010 if (kid->op_type == OP_SCOPE || kid->op_type == OP_LEAVE) {
9012 if (kid->op_type == OP_SCOPE) {
9016 else if (kid->op_type == OP_LEAVE) {
9017 if (o->op_type == OP_SORT) {
9018 op_null(kid); /* wipe out leave */
9021 for (k = kLISTOP->op_first->op_next; k; k = k->op_next) {
9022 if (k->op_next == kid)
9024 /* don't descend into loops */
9025 else if (k->op_type == OP_ENTERLOOP
9026 || k->op_type == OP_ENTERITER)
9028 k = cLOOPx(k)->op_lastop;
9033 kid->op_next = 0; /* just disconnect the leave */
9034 k = kLISTOP->op_first;
9039 if (o->op_type == OP_SORT) {
9040 /* provide scalar context for comparison function/block */
9046 o->op_flags |= OPf_SPECIAL;
9049 firstkid = firstkid->op_sibling;
9052 /* provide list context for arguments */
9053 if (o->op_type == OP_SORT)
9060 S_simplify_sort(pTHX_ OP *o)
9063 register OP *kid = cLISTOPo->op_first->op_sibling; /* get past pushmark */
9069 PERL_ARGS_ASSERT_SIMPLIFY_SORT;
9071 if (!(o->op_flags & OPf_STACKED))
9073 GvMULTI_on(gv_fetchpvs("a", GV_ADD|GV_NOTQUAL, SVt_PV));
9074 GvMULTI_on(gv_fetchpvs("b", GV_ADD|GV_NOTQUAL, SVt_PV));
9075 kid = kUNOP->op_first; /* get past null */
9076 if (kid->op_type != OP_SCOPE)
9078 kid = kLISTOP->op_last; /* get past scope */
9079 switch(kid->op_type) {
9087 k = kid; /* remember this node*/
9088 if (kBINOP->op_first->op_type != OP_RV2SV)
9090 kid = kBINOP->op_first; /* get past cmp */
9091 if (kUNOP->op_first->op_type != OP_GV)
9093 kid = kUNOP->op_first; /* get past rv2sv */
9095 if (GvSTASH(gv) != PL_curstash)
9097 gvname = GvNAME(gv);
9098 if (*gvname == 'a' && gvname[1] == '\0')
9100 else if (*gvname == 'b' && gvname[1] == '\0')
9105 kid = k; /* back to cmp */
9106 if (kBINOP->op_last->op_type != OP_RV2SV)
9108 kid = kBINOP->op_last; /* down to 2nd arg */
9109 if (kUNOP->op_first->op_type != OP_GV)
9111 kid = kUNOP->op_first; /* get past rv2sv */
9113 if (GvSTASH(gv) != PL_curstash)
9115 gvname = GvNAME(gv);
9117 ? !(*gvname == 'a' && gvname[1] == '\0')
9118 : !(*gvname == 'b' && gvname[1] == '\0'))
9120 o->op_flags &= ~(OPf_STACKED | OPf_SPECIAL);
9122 o->op_private |= OPpSORT_DESCEND;
9123 if (k->op_type == OP_NCMP)
9124 o->op_private |= OPpSORT_NUMERIC;
9125 if (k->op_type == OP_I_NCMP)
9126 o->op_private |= OPpSORT_NUMERIC | OPpSORT_INTEGER;
9127 kid = cLISTOPo->op_first->op_sibling;
9128 cLISTOPo->op_first->op_sibling = kid->op_sibling; /* bypass old block */
9130 op_getmad(kid,o,'S'); /* then delete it */
9132 op_free(kid); /* then delete it */
9137 Perl_ck_split(pTHX_ OP *o)
9142 PERL_ARGS_ASSERT_CK_SPLIT;
9144 if (o->op_flags & OPf_STACKED)
9145 return no_fh_allowed(o);
9147 kid = cLISTOPo->op_first;
9148 if (kid->op_type != OP_NULL)
9149 Perl_croak(aTHX_ "panic: ck_split, type=%u", (unsigned) kid->op_type);
9150 kid = kid->op_sibling;
9151 op_free(cLISTOPo->op_first);
9153 cLISTOPo->op_first = kid;
9155 cLISTOPo->op_first = kid = newSVOP(OP_CONST, 0, newSVpvs(" "));
9156 cLISTOPo->op_last = kid; /* There was only one element previously */
9159 if (kid->op_type != OP_MATCH || kid->op_flags & OPf_STACKED) {
9160 OP * const sibl = kid->op_sibling;
9161 kid->op_sibling = 0;
9162 kid = pmruntime( newPMOP(OP_MATCH, OPf_SPECIAL), kid, 0, 0);
9163 if (cLISTOPo->op_first == cLISTOPo->op_last)
9164 cLISTOPo->op_last = kid;
9165 cLISTOPo->op_first = kid;
9166 kid->op_sibling = sibl;
9169 kid->op_type = OP_PUSHRE;
9170 kid->op_ppaddr = PL_ppaddr[OP_PUSHRE];
9172 if (((PMOP *)kid)->op_pmflags & PMf_GLOBAL) {
9173 Perl_ck_warner(aTHX_ packWARN(WARN_REGEXP),
9174 "Use of /g modifier is meaningless in split");
9177 if (!kid->op_sibling)
9178 op_append_elem(OP_SPLIT, o, newDEFSVOP());
9180 kid = kid->op_sibling;
9183 if (!kid->op_sibling)
9184 op_append_elem(OP_SPLIT, o, newSVOP(OP_CONST, 0, newSViv(0)));
9185 assert(kid->op_sibling);
9187 kid = kid->op_sibling;
9190 if (kid->op_sibling)
9191 return too_many_arguments_pv(o,OP_DESC(o), 0);
9197 Perl_ck_join(pTHX_ OP *o)
9199 const OP * const kid = cLISTOPo->op_first->op_sibling;
9201 PERL_ARGS_ASSERT_CK_JOIN;
9203 if (kid && kid->op_type == OP_MATCH) {
9204 if (ckWARN(WARN_SYNTAX)) {
9205 const REGEXP *re = PM_GETRE(kPMOP);
9207 ? newSVpvn_flags( RX_PRECOMP_const(re), RX_PRELEN(re),
9208 SVs_TEMP | ( RX_UTF8(re) ? SVf_UTF8 : 0 ) )
9209 : newSVpvs_flags( "STRING", SVs_TEMP );
9210 Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
9211 "/%"SVf"/ should probably be written as \"%"SVf"\"",
9212 SVfARG(msg), SVfARG(msg));
9219 =for apidoc Am|CV *|rv2cv_op_cv|OP *cvop|U32 flags
9221 Examines an op, which is expected to identify a subroutine at runtime,
9222 and attempts to determine at compile time which subroutine it identifies.
9223 This is normally used during Perl compilation to determine whether
9224 a prototype can be applied to a function call. I<cvop> is the op
9225 being considered, normally an C<rv2cv> op. A pointer to the identified
9226 subroutine is returned, if it could be determined statically, and a null
9227 pointer is returned if it was not possible to determine statically.
9229 Currently, the subroutine can be identified statically if the RV that the
9230 C<rv2cv> is to operate on is provided by a suitable C<gv> or C<const> op.
9231 A C<gv> op is suitable if the GV's CV slot is populated. A C<const> op is
9232 suitable if the constant value must be an RV pointing to a CV. Details of
9233 this process may change in future versions of Perl. If the C<rv2cv> op
9234 has the C<OPpENTERSUB_AMPER> flag set then no attempt is made to identify
9235 the subroutine statically: this flag is used to suppress compile-time
9236 magic on a subroutine call, forcing it to use default runtime behaviour.
9238 If I<flags> has the bit C<RV2CVOPCV_MARK_EARLY> set, then the handling
9239 of a GV reference is modified. If a GV was examined and its CV slot was
9240 found to be empty, then the C<gv> op has the C<OPpEARLY_CV> flag set.
9241 If the op is not optimised away, and the CV slot is later populated with
9242 a subroutine having a prototype, that flag eventually triggers the warning
9243 "called too early to check prototype".
9245 If I<flags> has the bit C<RV2CVOPCV_RETURN_NAME_GV> set, then instead
9246 of returning a pointer to the subroutine it returns a pointer to the
9247 GV giving the most appropriate name for the subroutine in this context.
9248 Normally this is just the C<CvGV> of the subroutine, but for an anonymous
9249 (C<CvANON>) subroutine that is referenced through a GV it will be the
9250 referencing GV. The resulting C<GV*> is cast to C<CV*> to be returned.
9251 A null pointer is returned as usual if there is no statically-determinable
9258 Perl_rv2cv_op_cv(pTHX_ OP *cvop, U32 flags)
9263 PERL_ARGS_ASSERT_RV2CV_OP_CV;
9264 if (flags & ~(RV2CVOPCV_MARK_EARLY|RV2CVOPCV_RETURN_NAME_GV))
9265 Perl_croak(aTHX_ "panic: rv2cv_op_cv bad flags %x", (unsigned)flags);
9266 if (cvop->op_type != OP_RV2CV)
9268 if (cvop->op_private & OPpENTERSUB_AMPER)
9270 if (!(cvop->op_flags & OPf_KIDS))
9272 rvop = cUNOPx(cvop)->op_first;
9273 switch (rvop->op_type) {
9275 gv = cGVOPx_gv(rvop);
9278 if (flags & RV2CVOPCV_MARK_EARLY)
9279 rvop->op_private |= OPpEARLY_CV;
9284 SV *rv = cSVOPx_sv(rvop);
9294 if (SvTYPE((SV*)cv) != SVt_PVCV)
9296 if (flags & RV2CVOPCV_RETURN_NAME_GV) {
9297 if (!CvANON(cv) || !gv)
9306 =for apidoc Am|OP *|ck_entersub_args_list|OP *entersubop
9308 Performs the default fixup of the arguments part of an C<entersub>
9309 op tree. This consists of applying list context to each of the
9310 argument ops. This is the standard treatment used on a call marked
9311 with C<&>, or a method call, or a call through a subroutine reference,
9312 or any other call where the callee can't be identified at compile time,
9313 or a call where the callee has no prototype.
9319 Perl_ck_entersub_args_list(pTHX_ OP *entersubop)
9322 PERL_ARGS_ASSERT_CK_ENTERSUB_ARGS_LIST;
9323 aop = cUNOPx(entersubop)->op_first;
9324 if (!aop->op_sibling)
9325 aop = cUNOPx(aop)->op_first;
9326 for (aop = aop->op_sibling; aop->op_sibling; aop = aop->op_sibling) {
9327 if (!(PL_madskills && aop->op_type == OP_STUB)) {
9329 op_lvalue(aop, OP_ENTERSUB);
9336 =for apidoc Am|OP *|ck_entersub_args_proto|OP *entersubop|GV *namegv|SV *protosv
9338 Performs the fixup of the arguments part of an C<entersub> op tree
9339 based on a subroutine prototype. This makes various modifications to
9340 the argument ops, from applying context up to inserting C<refgen> ops,
9341 and checking the number and syntactic types of arguments, as directed by
9342 the prototype. This is the standard treatment used on a subroutine call,
9343 not marked with C<&>, where the callee can be identified at compile time
9344 and has a prototype.
9346 I<protosv> supplies the subroutine prototype to be applied to the call.
9347 It may be a normal defined scalar, of which the string value will be used.
9348 Alternatively, for convenience, it may be a subroutine object (a C<CV*>
9349 that has been cast to C<SV*>) which has a prototype. The prototype
9350 supplied, in whichever form, does not need to match the actual callee
9351 referenced by the op tree.
9353 If the argument ops disagree with the prototype, for example by having
9354 an unacceptable number of arguments, a valid op tree is returned anyway.
9355 The error is reflected in the parser state, normally resulting in a single
9356 exception at the top level of parsing which covers all the compilation
9357 errors that occurred. In the error message, the callee is referred to
9358 by the name defined by the I<namegv> parameter.
9364 Perl_ck_entersub_args_proto(pTHX_ OP *entersubop, GV *namegv, SV *protosv)
9367 const char *proto, *proto_end;
9368 OP *aop, *prev, *cvop;
9371 I32 contextclass = 0;
9372 const char *e = NULL;
9373 PERL_ARGS_ASSERT_CK_ENTERSUB_ARGS_PROTO;
9374 if (SvTYPE(protosv) == SVt_PVCV ? !SvPOK(protosv) : !SvOK(protosv))
9375 Perl_croak(aTHX_ "panic: ck_entersub_args_proto CV with no proto, "
9376 "flags=%lx", (unsigned long) SvFLAGS(protosv));
9377 if (SvTYPE(protosv) == SVt_PVCV)
9378 proto = CvPROTO(protosv), proto_len = CvPROTOLEN(protosv);
9379 else proto = SvPV(protosv, proto_len);
9380 proto_end = proto + proto_len;
9381 aop = cUNOPx(entersubop)->op_first;
9382 if (!aop->op_sibling)
9383 aop = cUNOPx(aop)->op_first;
9385 aop = aop->op_sibling;
9386 for (cvop = aop; cvop->op_sibling; cvop = cvop->op_sibling) ;
9387 while (aop != cvop) {
9389 if (PL_madskills && aop->op_type == OP_STUB) {
9390 aop = aop->op_sibling;
9393 if (PL_madskills && aop->op_type == OP_NULL)
9394 o3 = ((UNOP*)aop)->op_first;
9398 if (proto >= proto_end)
9399 return too_many_arguments_sv(entersubop, gv_ename(namegv), 0);
9407 /* _ must be at the end */
9408 if (proto[1] && !strchr(";@%", proto[1]))
9423 if (o3->op_type != OP_REFGEN && o3->op_type != OP_UNDEF)
9425 arg == 1 ? "block or sub {}" : "sub {}",
9426 gv_ename(namegv), 0, o3);
9429 /* '*' allows any scalar type, including bareword */
9432 if (o3->op_type == OP_RV2GV)
9433 goto wrapref; /* autoconvert GLOB -> GLOBref */
9434 else if (o3->op_type == OP_CONST)
9435 o3->op_private &= ~OPpCONST_STRICT;
9436 else if (o3->op_type == OP_ENTERSUB) {
9437 /* accidental subroutine, revert to bareword */
9438 OP *gvop = ((UNOP*)o3)->op_first;
9439 if (gvop && gvop->op_type == OP_NULL) {
9440 gvop = ((UNOP*)gvop)->op_first;
9442 for (; gvop->op_sibling; gvop = gvop->op_sibling)
9445 (gvop->op_private & OPpENTERSUB_NOPAREN) &&
9446 (gvop = ((UNOP*)gvop)->op_first) &&
9447 gvop->op_type == OP_GV)
9449 GV * const gv = cGVOPx_gv(gvop);
9450 OP * const sibling = aop->op_sibling;
9451 SV * const n = newSVpvs("");
9453 OP * const oldaop = aop;
9457 gv_fullname4(n, gv, "", FALSE);
9458 aop = newSVOP(OP_CONST, 0, n);
9459 op_getmad(oldaop,aop,'O');
9460 prev->op_sibling = aop;
9461 aop->op_sibling = sibling;
9471 if (o3->op_type == OP_RV2AV ||
9472 o3->op_type == OP_PADAV ||
9473 o3->op_type == OP_RV2HV ||
9474 o3->op_type == OP_PADHV
9489 if (contextclass++ == 0) {
9490 e = strchr(proto, ']');
9491 if (!e || e == proto)
9500 const char *p = proto;
9501 const char *const end = proto;
9504 /* \[$] accepts any scalar lvalue */
9506 && Perl_op_lvalue_flags(aTHX_
9508 OP_READ, /* not entersub */
9511 bad_type_sv(arg, Perl_form(aTHX_ "one of %.*s",
9513 gv_ename(namegv), 0, o3);
9518 if (o3->op_type == OP_RV2GV)
9521 bad_type_sv(arg, "symbol", gv_ename(namegv), 0, o3);
9524 if (o3->op_type == OP_ENTERSUB)
9527 bad_type_sv(arg, "subroutine entry", gv_ename(namegv), 0,
9531 if (o3->op_type == OP_RV2SV ||
9532 o3->op_type == OP_PADSV ||
9533 o3->op_type == OP_HELEM ||
9534 o3->op_type == OP_AELEM)
9536 if (!contextclass) {
9537 /* \$ accepts any scalar lvalue */
9538 if (Perl_op_lvalue_flags(aTHX_
9540 OP_READ, /* not entersub */
9543 bad_type_sv(arg, "scalar", gv_ename(namegv), 0, o3);
9547 if (o3->op_type == OP_RV2AV ||
9548 o3->op_type == OP_PADAV)
9551 bad_type_sv(arg, "array", gv_ename(namegv), 0, o3);
9554 if (o3->op_type == OP_RV2HV ||
9555 o3->op_type == OP_PADHV)
9558 bad_type_sv(arg, "hash", gv_ename(namegv), 0, o3);
9562 OP* const kid = aop;
9563 OP* const sib = kid->op_sibling;
9564 kid->op_sibling = 0;
9565 aop = newUNOP(OP_REFGEN, 0, kid);
9566 aop->op_sibling = sib;
9567 prev->op_sibling = aop;
9569 if (contextclass && e) {
9584 SV* const tmpsv = sv_newmortal();
9585 gv_efullname3(tmpsv, namegv, NULL);
9586 Perl_croak(aTHX_ "Malformed prototype for %"SVf": %"SVf,
9587 SVfARG(tmpsv), SVfARG(protosv));
9591 op_lvalue(aop, OP_ENTERSUB);
9593 aop = aop->op_sibling;
9595 if (aop == cvop && *proto == '_') {
9596 /* generate an access to $_ */
9598 aop->op_sibling = prev->op_sibling;
9599 prev->op_sibling = aop; /* instead of cvop */
9601 if (!optional && proto_end > proto &&
9602 (*proto != '@' && *proto != '%' && *proto != ';' && *proto != '_'))
9603 return too_few_arguments_sv(entersubop, gv_ename(namegv), 0);
9608 =for apidoc Am|OP *|ck_entersub_args_proto_or_list|OP *entersubop|GV *namegv|SV *protosv
9610 Performs the fixup of the arguments part of an C<entersub> op tree either
9611 based on a subroutine prototype or using default list-context processing.
9612 This is the standard treatment used on a subroutine call, not marked
9613 with C<&>, where the callee can be identified at compile time.
9615 I<protosv> supplies the subroutine prototype to be applied to the call,
9616 or indicates that there is no prototype. It may be a normal scalar,
9617 in which case if it is defined then the string value will be used
9618 as a prototype, and if it is undefined then there is no prototype.
9619 Alternatively, for convenience, it may be a subroutine object (a C<CV*>
9620 that has been cast to C<SV*>), of which the prototype will be used if it
9621 has one. The prototype (or lack thereof) supplied, in whichever form,
9622 does not need to match the actual callee referenced by the op tree.
9624 If the argument ops disagree with the prototype, for example by having
9625 an unacceptable number of arguments, a valid op tree is returned anyway.
9626 The error is reflected in the parser state, normally resulting in a single
9627 exception at the top level of parsing which covers all the compilation
9628 errors that occurred. In the error message, the callee is referred to
9629 by the name defined by the I<namegv> parameter.
9635 Perl_ck_entersub_args_proto_or_list(pTHX_ OP *entersubop,
9636 GV *namegv, SV *protosv)
9638 PERL_ARGS_ASSERT_CK_ENTERSUB_ARGS_PROTO_OR_LIST;
9639 if (SvTYPE(protosv) == SVt_PVCV ? SvPOK(protosv) : SvOK(protosv))
9640 return ck_entersub_args_proto(entersubop, namegv, protosv);
9642 return ck_entersub_args_list(entersubop);
9646 Perl_ck_entersub_args_core(pTHX_ OP *entersubop, GV *namegv, SV *protosv)
9648 int opnum = SvTYPE(protosv) == SVt_PVCV ? 0 : (int)SvUV(protosv);
9649 OP *aop = cUNOPx(entersubop)->op_first;
9651 PERL_ARGS_ASSERT_CK_ENTERSUB_ARGS_CORE;
9655 if (!aop->op_sibling)
9656 aop = cUNOPx(aop)->op_first;
9657 aop = aop->op_sibling;
9658 for (cvop = aop; cvop->op_sibling; cvop = cvop->op_sibling) ;
9659 if (PL_madskills) while (aop != cvop && aop->op_type == OP_STUB) {
9660 aop = aop->op_sibling;
9663 (void)too_many_arguments_pv(entersubop, GvNAME(namegv), 0);
9665 op_free(entersubop);
9666 switch(GvNAME(namegv)[2]) {
9667 case 'F': return newSVOP(OP_CONST, 0,
9668 newSVpv(CopFILE(PL_curcop),0));
9669 case 'L': return newSVOP(
9672 "%"IVdf, (IV)CopLINE(PL_curcop)
9675 case 'P': return newSVOP(OP_CONST, 0,
9677 ? newSVhek(HvNAME_HEK(PL_curstash))
9688 bool seenarg = FALSE;
9690 if (!aop->op_sibling)
9691 aop = cUNOPx(aop)->op_first;
9694 aop = aop->op_sibling;
9695 prev->op_sibling = NULL;
9698 prev=cvop, cvop = cvop->op_sibling)
9700 if (PL_madskills && cvop->op_sibling
9701 && cvop->op_type != OP_STUB) seenarg = TRUE
9704 prev->op_sibling = NULL;
9705 flags = OPf_SPECIAL * !(cvop->op_private & OPpENTERSUB_NOPAREN);
9707 if (aop == cvop) aop = NULL;
9708 op_free(entersubop);
9710 if (opnum == OP_ENTEREVAL
9711 && GvNAMELEN(namegv)==9 && strnEQ(GvNAME(namegv), "evalbytes", 9))
9712 flags |= OPpEVAL_BYTES <<8;
9714 switch (PL_opargs[opnum] & OA_CLASS_MASK) {
9716 case OA_BASEOP_OR_UNOP:
9718 return aop ? newUNOP(opnum,flags,aop) : newOP(opnum,flags);
9722 if (!PL_madskills || seenarg)
9724 (void)too_many_arguments_pv(aop, GvNAME(namegv), 0);
9727 return opnum == OP_RUNCV
9728 ? newPVOP(OP_RUNCV,0,NULL)
9731 return convert(opnum,0,aop);
9739 =for apidoc Am|void|cv_get_call_checker|CV *cv|Perl_call_checker *ckfun_p|SV **ckobj_p
9741 Retrieves the function that will be used to fix up a call to I<cv>.
9742 Specifically, the function is applied to an C<entersub> op tree for a
9743 subroutine call, not marked with C<&>, where the callee can be identified
9744 at compile time as I<cv>.
9746 The C-level function pointer is returned in I<*ckfun_p>, and an SV
9747 argument for it is returned in I<*ckobj_p>. The function is intended
9748 to be called in this manner:
9750 entersubop = (*ckfun_p)(aTHX_ entersubop, namegv, (*ckobj_p));
9752 In this call, I<entersubop> is a pointer to the C<entersub> op,
9753 which may be replaced by the check function, and I<namegv> is a GV
9754 supplying the name that should be used by the check function to refer
9755 to the callee of the C<entersub> op if it needs to emit any diagnostics.
9756 It is permitted to apply the check function in non-standard situations,
9757 such as to a call to a different subroutine or to a method call.
9759 By default, the function is
9760 L<Perl_ck_entersub_args_proto_or_list|/ck_entersub_args_proto_or_list>,
9761 and the SV parameter is I<cv> itself. This implements standard
9762 prototype processing. It can be changed, for a particular subroutine,
9763 by L</cv_set_call_checker>.
9769 Perl_cv_get_call_checker(pTHX_ CV *cv, Perl_call_checker *ckfun_p, SV **ckobj_p)
9772 PERL_ARGS_ASSERT_CV_GET_CALL_CHECKER;
9773 callmg = SvMAGICAL((SV*)cv) ? mg_find((SV*)cv, PERL_MAGIC_checkcall) : NULL;
9775 *ckfun_p = DPTR2FPTR(Perl_call_checker, callmg->mg_ptr);
9776 *ckobj_p = callmg->mg_obj;
9778 *ckfun_p = Perl_ck_entersub_args_proto_or_list;
9784 =for apidoc Am|void|cv_set_call_checker|CV *cv|Perl_call_checker ckfun|SV *ckobj
9786 Sets the function that will be used to fix up a call to I<cv>.
9787 Specifically, the function is applied to an C<entersub> op tree for a
9788 subroutine call, not marked with C<&>, where the callee can be identified
9789 at compile time as I<cv>.
9791 The C-level function pointer is supplied in I<ckfun>, and an SV argument
9792 for it is supplied in I<ckobj>. The function is intended to be called
9795 entersubop = ckfun(aTHX_ entersubop, namegv, ckobj);
9797 In this call, I<entersubop> is a pointer to the C<entersub> op,
9798 which may be replaced by the check function, and I<namegv> is a GV
9799 supplying the name that should be used by the check function to refer
9800 to the callee of the C<entersub> op if it needs to emit any diagnostics.
9801 It is permitted to apply the check function in non-standard situations,
9802 such as to a call to a different subroutine or to a method call.
9804 The current setting for a particular CV can be retrieved by
9805 L</cv_get_call_checker>.
9811 Perl_cv_set_call_checker(pTHX_ CV *cv, Perl_call_checker ckfun, SV *ckobj)
9813 PERL_ARGS_ASSERT_CV_SET_CALL_CHECKER;
9814 if (ckfun == Perl_ck_entersub_args_proto_or_list && ckobj == (SV*)cv) {
9815 if (SvMAGICAL((SV*)cv))
9816 mg_free_type((SV*)cv, PERL_MAGIC_checkcall);
9819 sv_magic((SV*)cv, &PL_sv_undef, PERL_MAGIC_checkcall, NULL, 0);
9820 callmg = mg_find((SV*)cv, PERL_MAGIC_checkcall);
9821 if (callmg->mg_flags & MGf_REFCOUNTED) {
9822 SvREFCNT_dec(callmg->mg_obj);
9823 callmg->mg_flags &= ~MGf_REFCOUNTED;
9825 callmg->mg_ptr = FPTR2DPTR(char *, ckfun);
9826 callmg->mg_obj = ckobj;
9827 if (ckobj != (SV*)cv) {
9828 SvREFCNT_inc_simple_void_NN(ckobj);
9829 callmg->mg_flags |= MGf_REFCOUNTED;
9831 callmg->mg_flags |= MGf_COPY;
9836 Perl_ck_subr(pTHX_ OP *o)
9842 PERL_ARGS_ASSERT_CK_SUBR;
9844 aop = cUNOPx(o)->op_first;
9845 if (!aop->op_sibling)
9846 aop = cUNOPx(aop)->op_first;
9847 aop = aop->op_sibling;
9848 for (cvop = aop; cvop->op_sibling; cvop = cvop->op_sibling) ;
9849 cv = rv2cv_op_cv(cvop, RV2CVOPCV_MARK_EARLY);
9850 namegv = cv ? (GV*)rv2cv_op_cv(cvop, RV2CVOPCV_RETURN_NAME_GV) : NULL;
9852 o->op_private &= ~1;
9853 o->op_private |= OPpENTERSUB_HASTARG;
9854 o->op_private |= (PL_hints & HINT_STRICT_REFS);
9855 if (PERLDB_SUB && PL_curstash != PL_debstash)
9856 o->op_private |= OPpENTERSUB_DB;
9857 if (cvop->op_type == OP_RV2CV) {
9858 o->op_private |= (cvop->op_private & OPpENTERSUB_AMPER);
9860 } else if (cvop->op_type == OP_METHOD || cvop->op_type == OP_METHOD_NAMED) {
9861 if (aop->op_type == OP_CONST)
9862 aop->op_private &= ~OPpCONST_STRICT;
9863 else if (aop->op_type == OP_LIST) {
9864 OP * const sib = ((UNOP*)aop)->op_first->op_sibling;
9865 if (sib && sib->op_type == OP_CONST)
9866 sib->op_private &= ~OPpCONST_STRICT;
9871 return ck_entersub_args_list(o);
9873 Perl_call_checker ckfun;
9875 cv_get_call_checker(cv, &ckfun, &ckobj);
9876 return ckfun(aTHX_ o, namegv, ckobj);
9881 Perl_ck_svconst(pTHX_ OP *o)
9883 PERL_ARGS_ASSERT_CK_SVCONST;
9884 PERL_UNUSED_CONTEXT;
9885 SvREADONLY_on(cSVOPo->op_sv);
9890 Perl_ck_chdir(pTHX_ OP *o)
9892 PERL_ARGS_ASSERT_CK_CHDIR;
9893 if (o->op_flags & OPf_KIDS) {
9894 SVOP * const kid = (SVOP*)cUNOPo->op_first;
9896 if (kid && kid->op_type == OP_CONST &&
9897 (kid->op_private & OPpCONST_BARE))
9899 o->op_flags |= OPf_SPECIAL;
9900 kid->op_private &= ~OPpCONST_STRICT;
9907 Perl_ck_trunc(pTHX_ OP *o)
9909 PERL_ARGS_ASSERT_CK_TRUNC;
9911 if (o->op_flags & OPf_KIDS) {
9912 SVOP *kid = (SVOP*)cUNOPo->op_first;
9914 if (kid->op_type == OP_NULL)
9915 kid = (SVOP*)kid->op_sibling;
9916 if (kid && kid->op_type == OP_CONST &&
9917 (kid->op_private & OPpCONST_BARE))
9919 o->op_flags |= OPf_SPECIAL;
9920 kid->op_private &= ~OPpCONST_STRICT;
9927 Perl_ck_substr(pTHX_ OP *o)
9929 PERL_ARGS_ASSERT_CK_SUBSTR;
9932 if ((o->op_flags & OPf_KIDS) && (o->op_private == 4)) {
9933 OP *kid = cLISTOPo->op_first;
9935 if (kid->op_type == OP_NULL)
9936 kid = kid->op_sibling;
9938 kid->op_flags |= OPf_MOD;
9945 Perl_ck_tell(pTHX_ OP *o)
9947 PERL_ARGS_ASSERT_CK_TELL;
9949 if (o->op_flags & OPf_KIDS) {
9950 OP *kid = cLISTOPo->op_first;
9951 if (kid->op_type == OP_NULL && kid->op_sibling) kid = kid->op_sibling;
9952 if (kid->op_type == OP_RV2GV) kid->op_private |= OPpALLOW_FAKE;
9958 Perl_ck_each(pTHX_ OP *o)
9961 OP *kid = o->op_flags & OPf_KIDS ? cUNOPo->op_first : NULL;
9962 const unsigned orig_type = o->op_type;
9963 const unsigned array_type = orig_type == OP_EACH ? OP_AEACH
9964 : orig_type == OP_KEYS ? OP_AKEYS : OP_AVALUES;
9965 const unsigned ref_type = orig_type == OP_EACH ? OP_REACH
9966 : orig_type == OP_KEYS ? OP_RKEYS : OP_RVALUES;
9968 PERL_ARGS_ASSERT_CK_EACH;
9971 switch (kid->op_type) {
9977 CHANGE_TYPE(o, array_type);
9980 if (kid->op_private == OPpCONST_BARE
9981 || !SvROK(cSVOPx_sv(kid))
9982 || ( SvTYPE(SvRV(cSVOPx_sv(kid))) != SVt_PVAV
9983 && SvTYPE(SvRV(cSVOPx_sv(kid))) != SVt_PVHV )
9985 /* we let ck_fun handle it */
9988 CHANGE_TYPE(o, ref_type);
9992 /* if treating as a reference, defer additional checks to runtime */
9993 return o->op_type == ref_type ? o : ck_fun(o);
9997 Perl_ck_length(pTHX_ OP *o)
9999 PERL_ARGS_ASSERT_CK_LENGTH;
10003 if (ckWARN(WARN_SYNTAX)) {
10004 const OP *kid = o->op_flags & OPf_KIDS ? cLISTOPo->op_first : NULL;
10008 const bool hash = kid->op_type == OP_PADHV
10009 || kid->op_type == OP_RV2HV;
10010 switch (kid->op_type) {
10014 (GV *)PL_compcv, hash ? '%' : '@', kid->op_targ,
10020 if (cUNOPx(kid)->op_first->op_type != OP_GV) break;
10022 GV *gv = cGVOPx_gv(cUNOPx(kid)->op_first);
10024 name = varname(gv, hash?'%':'@', 0, NULL, 0, 1);
10031 Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
10032 "length() used on %"SVf" (did you mean \"scalar(%s%"SVf
10034 name, hash ? "keys " : "", name
10037 Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
10038 "length() used on %%hash (did you mean \"scalar(keys %%hash)\"?)");
10040 Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
10041 "length() used on @array (did you mean \"scalar(@array)\"?)");
10048 /* caller is supposed to assign the return to the
10049 container of the rep_op var */
10051 S_opt_scalarhv(pTHX_ OP *rep_op) {
10055 PERL_ARGS_ASSERT_OPT_SCALARHV;
10057 NewOp(1101, unop, 1, UNOP);
10058 unop->op_type = (OPCODE)OP_BOOLKEYS;
10059 unop->op_ppaddr = PL_ppaddr[OP_BOOLKEYS];
10060 unop->op_flags = (U8)(OPf_WANT_SCALAR | OPf_KIDS );
10061 unop->op_private = (U8)(1 | ((OPf_WANT_SCALAR | OPf_KIDS) >> 8));
10062 unop->op_first = rep_op;
10063 unop->op_next = rep_op->op_next;
10064 rep_op->op_next = (OP*)unop;
10065 rep_op->op_flags|=(OPf_REF | OPf_MOD);
10066 unop->op_sibling = rep_op->op_sibling;
10067 rep_op->op_sibling = NULL;
10068 /* unop->op_targ = pad_alloc(OP_BOOLKEYS, SVs_PADTMP); */
10069 if (rep_op->op_type == OP_PADHV) {
10070 rep_op->op_flags &= ~OPf_WANT_SCALAR;
10071 rep_op->op_flags |= OPf_WANT_LIST;
10076 /* Check for in place reverse and sort assignments like "@a = reverse @a"
10077 and modify the optree to make them work inplace */
10080 S_inplace_aassign(pTHX_ OP *o) {
10082 OP *modop, *modop_pushmark;
10084 OP *oleft, *oleft_pushmark;
10086 PERL_ARGS_ASSERT_INPLACE_AASSIGN;
10088 assert((o->op_flags & OPf_WANT) == OPf_WANT_VOID);
10090 assert(cUNOPo->op_first->op_type == OP_NULL);
10091 modop_pushmark = cUNOPx(cUNOPo->op_first)->op_first;
10092 assert(modop_pushmark->op_type == OP_PUSHMARK);
10093 modop = modop_pushmark->op_sibling;
10095 if (modop->op_type != OP_SORT && modop->op_type != OP_REVERSE)
10098 /* no other operation except sort/reverse */
10099 if (modop->op_sibling)
10102 assert(cUNOPx(modop)->op_first->op_type == OP_PUSHMARK);
10103 if (!(oright = cUNOPx(modop)->op_first->op_sibling)) return;
10105 if (modop->op_flags & OPf_STACKED) {
10106 /* skip sort subroutine/block */
10107 assert(oright->op_type == OP_NULL);
10108 oright = oright->op_sibling;
10111 assert(cUNOPo->op_first->op_sibling->op_type == OP_NULL);
10112 oleft_pushmark = cUNOPx(cUNOPo->op_first->op_sibling)->op_first;
10113 assert(oleft_pushmark->op_type == OP_PUSHMARK);
10114 oleft = oleft_pushmark->op_sibling;
10116 /* Check the lhs is an array */
10118 (oleft->op_type != OP_RV2AV && oleft->op_type != OP_PADAV)
10119 || oleft->op_sibling
10120 || (oleft->op_private & OPpLVAL_INTRO)
10124 /* Only one thing on the rhs */
10125 if (oright->op_sibling)
10128 /* check the array is the same on both sides */
10129 if (oleft->op_type == OP_RV2AV) {
10130 if (oright->op_type != OP_RV2AV
10131 || !cUNOPx(oright)->op_first
10132 || cUNOPx(oright)->op_first->op_type != OP_GV
10133 || cUNOPx(oleft )->op_first->op_type != OP_GV
10134 || cGVOPx_gv(cUNOPx(oleft)->op_first) !=
10135 cGVOPx_gv(cUNOPx(oright)->op_first)
10139 else if (oright->op_type != OP_PADAV
10140 || oright->op_targ != oleft->op_targ
10144 /* This actually is an inplace assignment */
10146 modop->op_private |= OPpSORT_INPLACE;
10148 /* transfer MODishness etc from LHS arg to RHS arg */
10149 oright->op_flags = oleft->op_flags;
10151 /* remove the aassign op and the lhs */
10153 op_null(oleft_pushmark);
10154 if (oleft->op_type == OP_RV2AV && cUNOPx(oleft)->op_first)
10155 op_null(cUNOPx(oleft)->op_first);
10159 #define MAX_DEFERRED 4
10162 if (defer_ix == (MAX_DEFERRED-1)) { \
10163 CALL_RPEEP(defer_queue[defer_base]); \
10164 defer_base = (defer_base + 1) % MAX_DEFERRED; \
10167 defer_queue[(defer_base + ++defer_ix) % MAX_DEFERRED] = o;
10169 /* A peephole optimizer. We visit the ops in the order they're to execute.
10170 * See the comments at the top of this file for more details about when
10171 * peep() is called */
10174 Perl_rpeep(pTHX_ register OP *o)
10177 register OP* oldop = NULL;
10178 OP* defer_queue[MAX_DEFERRED]; /* small queue of deferred branches */
10179 int defer_base = 0;
10182 if (!o || o->op_opt)
10186 SAVEVPTR(PL_curcop);
10187 for (;; o = o->op_next) {
10188 if (o && o->op_opt)
10191 while (defer_ix >= 0)
10192 CALL_RPEEP(defer_queue[(defer_base + defer_ix--) % MAX_DEFERRED]);
10196 /* By default, this op has now been optimised. A couple of cases below
10197 clear this again. */
10200 switch (o->op_type) {
10202 PL_curcop = ((COP*)o); /* for warnings */
10205 PL_curcop = ((COP*)o); /* for warnings */
10207 /* Two NEXTSTATEs in a row serve no purpose. Except if they happen
10208 to carry two labels. For now, take the easier option, and skip
10209 this optimisation if the first NEXTSTATE has a label. */
10210 if (!CopLABEL((COP*)o) && !PERLDB_NOOPT) {
10211 OP *nextop = o->op_next;
10212 while (nextop && nextop->op_type == OP_NULL)
10213 nextop = nextop->op_next;
10215 if (nextop && (nextop->op_type == OP_NEXTSTATE)) {
10216 COP *firstcop = (COP *)o;
10217 COP *secondcop = (COP *)nextop;
10218 /* We want the COP pointed to by o (and anything else) to
10219 become the next COP down the line. */
10220 cop_free(firstcop);
10222 firstcop->op_next = secondcop->op_next;
10224 /* Now steal all its pointers, and duplicate the other
10226 firstcop->cop_line = secondcop->cop_line;
10227 #ifdef USE_ITHREADS
10228 firstcop->cop_stashoff = secondcop->cop_stashoff;
10229 firstcop->cop_file = secondcop->cop_file;
10231 firstcop->cop_stash = secondcop->cop_stash;
10232 firstcop->cop_filegv = secondcop->cop_filegv;
10234 firstcop->cop_hints = secondcop->cop_hints;
10235 firstcop->cop_seq = secondcop->cop_seq;
10236 firstcop->cop_warnings = secondcop->cop_warnings;
10237 firstcop->cop_hints_hash = secondcop->cop_hints_hash;
10239 #ifdef USE_ITHREADS
10240 secondcop->cop_stashoff = 0;
10241 secondcop->cop_file = NULL;
10243 secondcop->cop_stash = NULL;
10244 secondcop->cop_filegv = NULL;
10246 secondcop->cop_warnings = NULL;
10247 secondcop->cop_hints_hash = NULL;
10249 /* If we use op_null(), and hence leave an ex-COP, some
10250 warnings are misreported. For example, the compile-time
10251 error in 'use strict; no strict refs;' */
10252 secondcop->op_type = OP_NULL;
10253 secondcop->op_ppaddr = PL_ppaddr[OP_NULL];
10259 if (o->op_next && o->op_next->op_type == OP_STRINGIFY) {
10260 if (o->op_next->op_private & OPpTARGET_MY) {
10261 if (o->op_flags & OPf_STACKED) /* chained concats */
10262 break; /* ignore_optimization */
10264 /* assert(PL_opargs[o->op_type] & OA_TARGLEX); */
10265 o->op_targ = o->op_next->op_targ;
10266 o->op_next->op_targ = 0;
10267 o->op_private |= OPpTARGET_MY;
10270 op_null(o->op_next);
10274 if ((o->op_flags & OPf_WANT) != OPf_WANT_LIST) {
10275 break; /* Scalar stub must produce undef. List stub is noop */
10279 if (o->op_targ == OP_NEXTSTATE
10280 || o->op_targ == OP_DBSTATE)
10282 PL_curcop = ((COP*)o);
10284 /* XXX: We avoid setting op_seq here to prevent later calls
10285 to rpeep() from mistakenly concluding that optimisation
10286 has already occurred. This doesn't fix the real problem,
10287 though (See 20010220.007). AMS 20010719 */
10288 /* op_seq functionality is now replaced by op_opt */
10295 if (oldop && o->op_next) {
10296 oldop->op_next = o->op_next;
10304 if (o->op_type == OP_PADAV || o->op_next->op_type == OP_RV2AV) {
10305 OP* const pop = (o->op_type == OP_PADAV) ?
10306 o->op_next : o->op_next->op_next;
10308 if (pop && pop->op_type == OP_CONST &&
10309 ((PL_op = pop->op_next)) &&
10310 pop->op_next->op_type == OP_AELEM &&
10311 !(pop->op_next->op_private &
10312 (OPpLVAL_INTRO|OPpLVAL_DEFER|OPpDEREF|OPpMAYBE_LVSUB)) &&
10313 (i = SvIV(((SVOP*)pop)->op_sv)) <= 255 && i >= 0)
10316 if (cSVOPx(pop)->op_private & OPpCONST_STRICT)
10317 no_bareword_allowed(pop);
10318 if (o->op_type == OP_GV)
10319 op_null(o->op_next);
10320 op_null(pop->op_next);
10322 o->op_flags |= pop->op_next->op_flags & OPf_MOD;
10323 o->op_next = pop->op_next->op_next;
10324 o->op_ppaddr = PL_ppaddr[OP_AELEMFAST];
10325 o->op_private = (U8)i;
10326 if (o->op_type == OP_GV) {
10329 o->op_type = OP_AELEMFAST;
10332 o->op_type = OP_AELEMFAST_LEX;
10337 if (o->op_next->op_type == OP_RV2SV) {
10338 if (!(o->op_next->op_private & OPpDEREF)) {
10339 op_null(o->op_next);
10340 o->op_private |= o->op_next->op_private & (OPpLVAL_INTRO
10342 o->op_next = o->op_next->op_next;
10343 o->op_type = OP_GVSV;
10344 o->op_ppaddr = PL_ppaddr[OP_GVSV];
10347 else if (o->op_next->op_type == OP_READLINE
10348 && o->op_next->op_next->op_type == OP_CONCAT
10349 && (o->op_next->op_next->op_flags & OPf_STACKED))
10351 /* Turn "$a .= <FH>" into an OP_RCATLINE. AMS 20010917 */
10352 o->op_type = OP_RCATLINE;
10353 o->op_flags |= OPf_STACKED;
10354 o->op_ppaddr = PL_ppaddr[OP_RCATLINE];
10355 op_null(o->op_next->op_next);
10356 op_null(o->op_next);
10366 fop = cUNOP->op_first;
10374 fop = cLOGOP->op_first;
10375 sop = fop->op_sibling;
10376 while (cLOGOP->op_other->op_type == OP_NULL)
10377 cLOGOP->op_other = cLOGOP->op_other->op_next;
10378 while (o->op_next && ( o->op_type == o->op_next->op_type
10379 || o->op_next->op_type == OP_NULL))
10380 o->op_next = o->op_next->op_next;
10381 DEFER(cLOGOP->op_other);
10385 if ((fop->op_type == OP_PADHV || fop->op_type == OP_RV2HV)
10387 (sop->op_type == OP_PADHV || sop->op_type == OP_RV2HV)
10392 if (!((nop->op_flags & OPf_WANT) == OPf_WANT_VOID)) {
10393 while (nop && nop->op_next) {
10394 switch (nop->op_next->op_type) {
10399 lop = nop = nop->op_next;
10402 nop = nop->op_next;
10410 if ((lop->op_flags & OPf_WANT) == OPf_WANT_VOID) {
10411 if (fop->op_type == OP_PADHV || fop->op_type == OP_RV2HV)
10412 cLOGOP->op_first = opt_scalarhv(fop);
10413 if (sop && (sop->op_type == OP_PADHV || sop->op_type == OP_RV2HV))
10414 cLOGOP->op_first->op_sibling = opt_scalarhv(sop);
10430 while (cLOGOP->op_other->op_type == OP_NULL)
10431 cLOGOP->op_other = cLOGOP->op_other->op_next;
10432 DEFER(cLOGOP->op_other);
10437 while (cLOOP->op_redoop->op_type == OP_NULL)
10438 cLOOP->op_redoop = cLOOP->op_redoop->op_next;
10439 while (cLOOP->op_nextop->op_type == OP_NULL)
10440 cLOOP->op_nextop = cLOOP->op_nextop->op_next;
10441 while (cLOOP->op_lastop->op_type == OP_NULL)
10442 cLOOP->op_lastop = cLOOP->op_lastop->op_next;
10443 /* a while(1) loop doesn't have an op_next that escapes the
10444 * loop, so we have to explicitly follow the op_lastop to
10445 * process the rest of the code */
10446 DEFER(cLOOP->op_lastop);
10450 assert(!(cPMOP->op_pmflags & PMf_ONCE));
10451 while (cPMOP->op_pmstashstartu.op_pmreplstart &&
10452 cPMOP->op_pmstashstartu.op_pmreplstart->op_type == OP_NULL)
10453 cPMOP->op_pmstashstartu.op_pmreplstart
10454 = cPMOP->op_pmstashstartu.op_pmreplstart->op_next;
10455 DEFER(cPMOP->op_pmstashstartu.op_pmreplstart);
10459 /* check that RHS of sort is a single plain array */
10460 OP *oright = cUNOPo->op_first;
10461 if (!oright || oright->op_type != OP_PUSHMARK)
10464 if (o->op_private & OPpSORT_INPLACE)
10467 /* reverse sort ... can be optimised. */
10468 if (!cUNOPo->op_sibling) {
10469 /* Nothing follows us on the list. */
10470 OP * const reverse = o->op_next;
10472 if (reverse->op_type == OP_REVERSE &&
10473 (reverse->op_flags & OPf_WANT) == OPf_WANT_LIST) {
10474 OP * const pushmark = cUNOPx(reverse)->op_first;
10475 if (pushmark && (pushmark->op_type == OP_PUSHMARK)
10476 && (cUNOPx(pushmark)->op_sibling == o)) {
10477 /* reverse -> pushmark -> sort */
10478 o->op_private |= OPpSORT_REVERSE;
10480 pushmark->op_next = oright->op_next;
10490 OP *ourmark, *theirmark, *ourlast, *iter, *expushmark, *rv2av;
10492 LISTOP *enter, *exlist;
10494 if (o->op_private & OPpSORT_INPLACE)
10497 enter = (LISTOP *) o->op_next;
10500 if (enter->op_type == OP_NULL) {
10501 enter = (LISTOP *) enter->op_next;
10505 /* for $a (...) will have OP_GV then OP_RV2GV here.
10506 for (...) just has an OP_GV. */
10507 if (enter->op_type == OP_GV) {
10508 gvop = (OP *) enter;
10509 enter = (LISTOP *) enter->op_next;
10512 if (enter->op_type == OP_RV2GV) {
10513 enter = (LISTOP *) enter->op_next;
10519 if (enter->op_type != OP_ENTERITER)
10522 iter = enter->op_next;
10523 if (!iter || iter->op_type != OP_ITER)
10526 expushmark = enter->op_first;
10527 if (!expushmark || expushmark->op_type != OP_NULL
10528 || expushmark->op_targ != OP_PUSHMARK)
10531 exlist = (LISTOP *) expushmark->op_sibling;
10532 if (!exlist || exlist->op_type != OP_NULL
10533 || exlist->op_targ != OP_LIST)
10536 if (exlist->op_last != o) {
10537 /* Mmm. Was expecting to point back to this op. */
10540 theirmark = exlist->op_first;
10541 if (!theirmark || theirmark->op_type != OP_PUSHMARK)
10544 if (theirmark->op_sibling != o) {
10545 /* There's something between the mark and the reverse, eg
10546 for (1, reverse (...))
10551 ourmark = ((LISTOP *)o)->op_first;
10552 if (!ourmark || ourmark->op_type != OP_PUSHMARK)
10555 ourlast = ((LISTOP *)o)->op_last;
10556 if (!ourlast || ourlast->op_next != o)
10559 rv2av = ourmark->op_sibling;
10560 if (rv2av && rv2av->op_type == OP_RV2AV && rv2av->op_sibling == 0
10561 && rv2av->op_flags == (OPf_WANT_LIST | OPf_KIDS)
10562 && enter->op_flags == (OPf_WANT_LIST | OPf_KIDS)) {
10563 /* We're just reversing a single array. */
10564 rv2av->op_flags = OPf_WANT_SCALAR | OPf_KIDS | OPf_REF;
10565 enter->op_flags |= OPf_STACKED;
10568 /* We don't have control over who points to theirmark, so sacrifice
10570 theirmark->op_next = ourmark->op_next;
10571 theirmark->op_flags = ourmark->op_flags;
10572 ourlast->op_next = gvop ? gvop : (OP *) enter;
10575 enter->op_private |= OPpITER_REVERSED;
10576 iter->op_private |= OPpITER_REVERSED;
10583 if (!(cPMOP->op_pmflags & PMf_ONCE)) {
10584 assert (!cPMOP->op_pmstashstartu.op_pmreplstart);
10589 if (!(o->op_private & OPpOFFBYONE) && !CvCLONE(PL_compcv)) {
10591 if (CvEVAL(PL_compcv)) sv = &PL_sv_undef;
10593 sv = newRV((SV *)PL_compcv);
10597 o->op_type = OP_CONST;
10598 o->op_ppaddr = PL_ppaddr[OP_CONST];
10599 o->op_flags |= OPf_SPECIAL;
10600 cSVOPo->op_sv = sv;
10605 if (OP_GIMME(o,0) == G_VOID) {
10606 OP *right = cBINOP->op_first;
10608 OP *left = right->op_sibling;
10609 if (left->op_type == OP_SUBSTR
10610 && (left->op_private & 7) < 4) {
10612 cBINOP->op_first = left;
10613 right->op_sibling =
10614 cBINOPx(left)->op_first->op_sibling;
10615 cBINOPx(left)->op_first->op_sibling = right;
10616 left->op_private |= OPpSUBSTR_REPL_FIRST;
10618 (o->op_flags & ~OPf_WANT) | OPf_WANT_VOID;
10625 Perl_cpeep_t cpeep =
10626 XopENTRY(Perl_custom_op_xop(aTHX_ o), xop_peep);
10628 cpeep(aTHX_ o, oldop);
10639 Perl_peep(pTHX_ register OP *o)
10645 =head1 Custom Operators
10647 =for apidoc Ao||custom_op_xop
10648 Return the XOP structure for a given custom op. This function should be
10649 considered internal to OP_NAME and the other access macros: use them instead.
10655 Perl_custom_op_xop(pTHX_ const OP *o)
10661 static const XOP xop_null = { 0, 0, 0, 0, 0 };
10663 PERL_ARGS_ASSERT_CUSTOM_OP_XOP;
10664 assert(o->op_type == OP_CUSTOM);
10666 /* This is wrong. It assumes a function pointer can be cast to IV,
10667 * which isn't guaranteed, but this is what the old custom OP code
10668 * did. In principle it should be safer to Copy the bytes of the
10669 * pointer into a PV: since the new interface is hidden behind
10670 * functions, this can be changed later if necessary. */
10671 /* Change custom_op_xop if this ever happens */
10672 keysv = sv_2mortal(newSViv(PTR2IV(o->op_ppaddr)));
10675 he = hv_fetch_ent(PL_custom_ops, keysv, 0, 0);
10677 /* assume noone will have just registered a desc */
10678 if (!he && PL_custom_op_names &&
10679 (he = hv_fetch_ent(PL_custom_op_names, keysv, 0, 0))
10684 /* XXX does all this need to be shared mem? */
10685 Newxz(xop, 1, XOP);
10686 pv = SvPV(HeVAL(he), l);
10687 XopENTRY_set(xop, xop_name, savepvn(pv, l));
10688 if (PL_custom_op_descs &&
10689 (he = hv_fetch_ent(PL_custom_op_descs, keysv, 0, 0))
10691 pv = SvPV(HeVAL(he), l);
10692 XopENTRY_set(xop, xop_desc, savepvn(pv, l));
10694 Perl_custom_op_register(aTHX_ o->op_ppaddr, xop);
10698 if (!he) return &xop_null;
10700 xop = INT2PTR(XOP *, SvIV(HeVAL(he)));
10705 =for apidoc Ao||custom_op_register
10706 Register a custom op. See L<perlguts/"Custom Operators">.
10712 Perl_custom_op_register(pTHX_ Perl_ppaddr_t ppaddr, const XOP *xop)
10716 PERL_ARGS_ASSERT_CUSTOM_OP_REGISTER;
10718 /* see the comment in custom_op_xop */
10719 keysv = sv_2mortal(newSViv(PTR2IV(ppaddr)));
10721 if (!PL_custom_ops)
10722 PL_custom_ops = newHV();
10724 if (!hv_store_ent(PL_custom_ops, keysv, newSViv(PTR2IV(xop)), 0))
10725 Perl_croak(aTHX_ "panic: can't register custom OP %s", xop->xop_name);
10729 =head1 Functions in file op.c
10731 =for apidoc core_prototype
10732 This function assigns the prototype of the named core function to C<sv>, or
10733 to a new mortal SV if C<sv> is NULL. It returns the modified C<sv>, or
10734 NULL if the core function has no prototype. C<code> is a code as returned
10735 by C<keyword()>. It must not be equal to 0 or -KEY_CORE.
10741 Perl_core_prototype(pTHX_ SV *sv, const char *name, const int code,
10744 int i = 0, n = 0, seen_question = 0, defgv = 0;
10746 #define MAX_ARGS_OP ((sizeof(I32) - 1) * 2)
10747 char str[ MAX_ARGS_OP * 2 + 2 ]; /* One ';', one '\0' */
10748 bool nullret = FALSE;
10750 PERL_ARGS_ASSERT_CORE_PROTOTYPE;
10752 assert (code && code != -KEY_CORE);
10754 if (!sv) sv = sv_newmortal();
10756 #define retsetpvs(x,y) sv_setpvs(sv, x); if(opnum) *opnum=(y); return sv
10758 switch (code < 0 ? -code : code) {
10759 case KEY_and : case KEY_chop: case KEY_chomp:
10760 case KEY_cmp : case KEY_defined: case KEY_delete: case KEY_exec :
10761 case KEY_exists: case KEY_eq : case KEY_ge : case KEY_goto :
10762 case KEY_grep : case KEY_gt : case KEY_last : case KEY_le :
10763 case KEY_lt : case KEY_map : case KEY_ne : case KEY_next :
10764 case KEY_or : case KEY_print : case KEY_printf: case KEY_qr :
10765 case KEY_redo : case KEY_require: case KEY_return: case KEY_say :
10766 case KEY_select: case KEY_sort : case KEY_split : case KEY_system:
10767 case KEY_x : case KEY_xor :
10768 if (!opnum) return NULL; nullret = TRUE; goto findopnum;
10769 case KEY_glob: retsetpvs("_;", OP_GLOB);
10770 case KEY_keys: retsetpvs("+", OP_KEYS);
10771 case KEY_values: retsetpvs("+", OP_VALUES);
10772 case KEY_each: retsetpvs("+", OP_EACH);
10773 case KEY_push: retsetpvs("+@", OP_PUSH);
10774 case KEY_unshift: retsetpvs("+@", OP_UNSHIFT);
10775 case KEY_pop: retsetpvs(";+", OP_POP);
10776 case KEY_shift: retsetpvs(";+", OP_SHIFT);
10777 case KEY_pos: retsetpvs(";\\[$*]", OP_POS);
10779 retsetpvs("+;$$@", OP_SPLICE);
10780 case KEY___FILE__: case KEY___LINE__: case KEY___PACKAGE__:
10782 case KEY_evalbytes:
10783 name = "entereval"; break;
10791 while (i < MAXO) { /* The slow way. */
10792 if (strEQ(name, PL_op_name[i])
10793 || strEQ(name, PL_op_desc[i]))
10795 if (nullret) { assert(opnum); *opnum = i; return NULL; }
10802 defgv = PL_opargs[i] & OA_DEFGV;
10803 oa = PL_opargs[i] >> OASHIFT;
10805 if (oa & OA_OPTIONAL && !seen_question && (
10806 !defgv || (oa & (OA_OPTIONAL - 1)) == OA_FILEREF
10811 if ((oa & (OA_OPTIONAL - 1)) >= OA_AVREF
10812 && (oa & (OA_OPTIONAL - 1)) <= OA_SCALARREF
10813 /* But globs are already references (kinda) */
10814 && (oa & (OA_OPTIONAL - 1)) != OA_FILEREF
10818 if ((oa & (OA_OPTIONAL - 1)) == OA_SCALARREF
10819 && !scalar_mod_type(NULL, i)) {
10824 if (i == OP_LOCK || i == OP_UNDEF) str[n++] = '&';
10828 else str[n++] = ("?$@@%&*$")[oa & (OA_OPTIONAL - 1)];
10829 if (oa & OA_OPTIONAL && defgv && str[n-1] == '$') {
10830 str[n-1] = '_'; defgv = 0;
10834 if (code == -KEY_not || code == -KEY_getprotobynumber) str[n++] = ';';
10836 sv_setpvn(sv, str, n - 1);
10837 if (opnum) *opnum = i;
10842 Perl_coresub_op(pTHX_ SV * const coreargssv, const int code,
10845 OP * const argop = newSVOP(OP_COREARGS,0,coreargssv);
10848 PERL_ARGS_ASSERT_CORESUB_OP;
10852 return op_append_elem(OP_LINESEQ,
10855 newSVOP(OP_CONST, 0, newSViv(-code % 3)),
10859 case OP_SELECT: /* which represents OP_SSELECT as well */
10864 newAVREF(newGVOP(OP_GV, 0, PL_defgv)),
10865 newSVOP(OP_CONST, 0, newSVuv(1))
10867 coresub_op(newSVuv((UV)OP_SSELECT), 0,
10869 coresub_op(coreargssv, 0, OP_SELECT)
10873 switch (PL_opargs[opnum] & OA_CLASS_MASK) {
10875 return op_append_elem(
10878 opnum == OP_WANTARRAY || opnum == OP_RUNCV
10879 ? OPpOFFBYONE << 8 : 0)
10881 case OA_BASEOP_OR_UNOP:
10882 if (opnum == OP_ENTEREVAL) {
10883 o = newUNOP(OP_ENTEREVAL,OPpEVAL_COPHH<<8,argop);
10884 if (code == -KEY_evalbytes) o->op_private |= OPpEVAL_BYTES;
10886 else o = newUNOP(opnum,0,argop);
10887 if (opnum == OP_CALLER) o->op_private |= OPpOFFBYONE;
10890 if (is_handle_constructor(o, 1))
10891 argop->op_private |= OPpCOREARGS_DEREF1;
10892 if (scalar_mod_type(NULL, opnum))
10893 argop->op_private |= OPpCOREARGS_SCALARMOD;
10897 o = convert(opnum,OPf_SPECIAL*(opnum == OP_GLOB),argop);
10898 if (is_handle_constructor(o, 2))
10899 argop->op_private |= OPpCOREARGS_DEREF2;
10900 if (opnum == OP_SUBSTR) {
10901 o->op_private |= OPpMAYBE_LVSUB;
10910 Perl_report_redefined_cv(pTHX_ const SV *name, const CV *old_cv,
10911 SV * const *new_const_svp)
10913 const char *hvname;
10914 bool is_const = !!CvCONST(old_cv);
10915 SV *old_const_sv = is_const ? cv_const_sv(old_cv) : NULL;
10917 PERL_ARGS_ASSERT_REPORT_REDEFINED_CV;
10919 if (is_const && new_const_svp && old_const_sv == *new_const_svp)
10921 /* They are 2 constant subroutines generated from
10922 the same constant. This probably means that
10923 they are really the "same" proxy subroutine
10924 instantiated in 2 places. Most likely this is
10925 when a constant is exported twice. Don't warn.
10928 (ckWARN(WARN_REDEFINE)
10930 CvGV(old_cv) && GvSTASH(CvGV(old_cv))
10931 && HvNAMELEN(GvSTASH(CvGV(old_cv))) == 7
10932 && (hvname = HvNAME(GvSTASH(CvGV(old_cv))),
10933 strEQ(hvname, "autouse"))
10937 && ckWARN_d(WARN_REDEFINE)
10938 && (!new_const_svp || sv_cmp(old_const_sv, *new_const_svp))
10941 Perl_warner(aTHX_ packWARN(WARN_REDEFINE),
10943 ? "Constant subroutine %"SVf" redefined"
10944 : "Subroutine %"SVf" redefined",
10949 =head1 Hook manipulation
10951 These functions provide convenient and thread-safe means of manipulating
10958 =for apidoc Am|void|wrap_op_checker|Optype opcode|Perl_check_t new_checker|Perl_check_t *old_checker_p
10960 Puts a C function into the chain of check functions for a specified op
10961 type. This is the preferred way to manipulate the L</PL_check> array.
10962 I<opcode> specifies which type of op is to be affected. I<new_checker>
10963 is a pointer to the C function that is to be added to that opcode's
10964 check chain, and I<old_checker_p> points to the storage location where a
10965 pointer to the next function in the chain will be stored. The value of
10966 I<new_pointer> is written into the L</PL_check> array, while the value
10967 previously stored there is written to I<*old_checker_p>.
10969 L</PL_check> is global to an entire process, and a module wishing to
10970 hook op checking may find itself invoked more than once per process,
10971 typically in different threads. To handle that situation, this function
10972 is idempotent. The location I<*old_checker_p> must initially (once
10973 per process) contain a null pointer. A C variable of static duration
10974 (declared at file scope, typically also marked C<static> to give
10975 it internal linkage) will be implicitly initialised appropriately,
10976 if it does not have an explicit initialiser. This function will only
10977 actually modify the check chain if it finds I<*old_checker_p> to be null.
10978 This function is also thread safe on the small scale. It uses appropriate
10979 locking to avoid race conditions in accessing L</PL_check>.
10981 When this function is called, the function referenced by I<new_checker>
10982 must be ready to be called, except for I<*old_checker_p> being unfilled.
10983 In a threading situation, I<new_checker> may be called immediately,
10984 even before this function has returned. I<*old_checker_p> will always
10985 be appropriately set before I<new_checker> is called. If I<new_checker>
10986 decides not to do anything special with an op that it is given (which
10987 is the usual case for most uses of op check hooking), it must chain the
10988 check function referenced by I<*old_checker_p>.
10990 If you want to influence compilation of calls to a specific subroutine,
10991 then use L</cv_set_call_checker> rather than hooking checking of all
10998 Perl_wrap_op_checker(pTHX_ Optype opcode,
10999 Perl_check_t new_checker, Perl_check_t *old_checker_p)
11003 PERL_ARGS_ASSERT_WRAP_OP_CHECKER;
11004 if (*old_checker_p) return;
11005 OP_CHECK_MUTEX_LOCK;
11006 if (!*old_checker_p) {
11007 *old_checker_p = PL_check[opcode];
11008 PL_check[opcode] = new_checker;
11010 OP_CHECK_MUTEX_UNLOCK;
11015 /* Efficient sub that returns a constant scalar value. */
11017 const_sv_xsub(pTHX_ CV* cv)
11021 SV *const sv = MUTABLE_SV(XSANY.any_ptr);
11025 /* diag_listed_as: SKIPME */
11026 Perl_croak(aTHX_ "usage: %s::%s()",
11027 HvNAME_get(GvSTASH(CvGV(cv))), GvNAME(CvGV(cv)));
11040 * c-indentation-style: bsd
11041 * c-basic-offset: 4
11042 * indent-tabs-mode: nil
11045 * ex: set ts=8 sts=4 sw=4 et: