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"
106 #define CALL_PEEP(o) PL_peepp(aTHX_ o)
107 #define CALL_RPEEP(o) PL_rpeepp(aTHX_ o)
108 #define CALL_OPFREEHOOK(o) if (PL_opfreehook) PL_opfreehook(aTHX_ o)
110 #if defined(PL_OP_SLAB_ALLOC)
112 #ifdef PERL_DEBUG_READONLY_OPS
113 # define PERL_SLAB_SIZE 4096
114 # include <sys/mman.h>
117 #ifndef PERL_SLAB_SIZE
118 #define PERL_SLAB_SIZE 2048
122 Perl_Slab_Alloc(pTHX_ size_t sz)
126 * To make incrementing use count easy PL_OpSlab is an I32 *
127 * To make inserting the link to slab PL_OpPtr is I32 **
128 * So compute size in units of sizeof(I32 *) as that is how Pl_OpPtr increments
129 * Add an overhead for pointer to slab and round up as a number of pointers
131 sz = (sz + 2*sizeof(I32 *) -1)/sizeof(I32 *);
132 if ((PL_OpSpace -= sz) < 0) {
133 #ifdef PERL_DEBUG_READONLY_OPS
134 /* We need to allocate chunk by chunk so that we can control the VM
136 PL_OpPtr = (I32**) mmap(0, PERL_SLAB_SIZE*sizeof(I32*), PROT_READ|PROT_WRITE,
137 MAP_ANON|MAP_PRIVATE, -1, 0);
139 DEBUG_m(PerlIO_printf(Perl_debug_log, "mapped %lu at %p\n",
140 (unsigned long) PERL_SLAB_SIZE*sizeof(I32*),
142 if(PL_OpPtr == MAP_FAILED) {
143 perror("mmap failed");
148 PL_OpPtr = (I32 **) PerlMemShared_calloc(PERL_SLAB_SIZE,sizeof(I32*));
153 /* We reserve the 0'th I32 sized chunk as a use count */
154 PL_OpSlab = (I32 *) PL_OpPtr;
155 /* Reduce size by the use count word, and by the size we need.
156 * Latter is to mimic the '-=' in the if() above
158 PL_OpSpace = PERL_SLAB_SIZE - (sizeof(I32)+sizeof(I32 **)-1)/sizeof(I32 **) - sz;
159 /* Allocation pointer starts at the top.
160 Theory: because we build leaves before trunk allocating at end
161 means that at run time access is cache friendly upward
163 PL_OpPtr += PERL_SLAB_SIZE;
165 #ifdef PERL_DEBUG_READONLY_OPS
166 /* We remember this slab. */
167 /* This implementation isn't efficient, but it is simple. */
168 PL_slabs = (I32**) realloc(PL_slabs, sizeof(I32**) * (PL_slab_count + 1));
169 PL_slabs[PL_slab_count++] = PL_OpSlab;
170 DEBUG_m(PerlIO_printf(Perl_debug_log, "Allocate %p\n", PL_OpSlab));
173 assert( PL_OpSpace >= 0 );
174 /* Move the allocation pointer down */
176 assert( PL_OpPtr > (I32 **) PL_OpSlab );
177 *PL_OpPtr = PL_OpSlab; /* Note which slab it belongs to */
178 (*PL_OpSlab)++; /* Increment use count of slab */
179 assert( PL_OpPtr+sz <= ((I32 **) PL_OpSlab + PERL_SLAB_SIZE) );
180 assert( *PL_OpSlab > 0 );
181 return (void *)(PL_OpPtr + 1);
184 #ifdef PERL_DEBUG_READONLY_OPS
186 Perl_pending_Slabs_to_ro(pTHX) {
187 /* Turn all the allocated op slabs read only. */
188 U32 count = PL_slab_count;
189 I32 **const slabs = PL_slabs;
191 /* Reset the array of pending OP slabs, as we're about to turn this lot
192 read only. Also, do it ahead of the loop in case the warn triggers,
193 and a warn handler has an eval */
198 /* Force a new slab for any further allocation. */
202 void *const start = slabs[count];
203 const size_t size = PERL_SLAB_SIZE* sizeof(I32*);
204 if(mprotect(start, size, PROT_READ)) {
205 Perl_warn(aTHX_ "mprotect for %p %lu failed with %d",
206 start, (unsigned long) size, errno);
214 S_Slab_to_rw(pTHX_ void *op)
216 I32 * const * const ptr = (I32 **) op;
217 I32 * const slab = ptr[-1];
219 PERL_ARGS_ASSERT_SLAB_TO_RW;
221 assert( ptr-1 > (I32 **) slab );
222 assert( ptr < ( (I32 **) slab + PERL_SLAB_SIZE) );
224 if(mprotect(slab, PERL_SLAB_SIZE*sizeof(I32*), PROT_READ|PROT_WRITE)) {
225 Perl_warn(aTHX_ "mprotect RW for %p %lu failed with %d",
226 slab, (unsigned long) PERL_SLAB_SIZE*sizeof(I32*), errno);
231 Perl_op_refcnt_inc(pTHX_ OP *o)
242 Perl_op_refcnt_dec(pTHX_ OP *o)
244 PERL_ARGS_ASSERT_OP_REFCNT_DEC;
249 # define Slab_to_rw(op)
253 Perl_Slab_Free(pTHX_ void *op)
255 I32 * const * const ptr = (I32 **) op;
256 I32 * const slab = ptr[-1];
257 PERL_ARGS_ASSERT_SLAB_FREE;
258 assert( ptr-1 > (I32 **) slab );
259 assert( ptr < ( (I32 **) slab + PERL_SLAB_SIZE) );
262 if (--(*slab) == 0) {
264 # define PerlMemShared PerlMem
267 #ifdef PERL_DEBUG_READONLY_OPS
268 U32 count = PL_slab_count;
269 /* Need to remove this slab from our list of slabs */
272 if (PL_slabs[count] == slab) {
274 /* Found it. Move the entry at the end to overwrite it. */
275 DEBUG_m(PerlIO_printf(Perl_debug_log,
276 "Deallocate %p by moving %p from %lu to %lu\n",
278 PL_slabs[PL_slab_count - 1],
279 PL_slab_count, count));
280 PL_slabs[count] = PL_slabs[--PL_slab_count];
281 /* Could realloc smaller at this point, but probably not
283 if(munmap(slab, PERL_SLAB_SIZE*sizeof(I32*))) {
284 perror("munmap failed");
292 PerlMemShared_free(slab);
294 if (slab == PL_OpSlab) {
301 * In the following definition, the ", (OP*)0" is just to make the compiler
302 * think the expression is of the right type: croak actually does a Siglongjmp.
304 #define CHECKOP(type,o) \
305 ((PL_op_mask && PL_op_mask[type]) \
306 ? ( op_free((OP*)o), \
307 Perl_croak(aTHX_ "'%s' trapped by operation mask", PL_op_desc[type]), \
309 : PL_check[type](aTHX_ (OP*)o))
311 #define RETURN_UNLIMITED_NUMBER (PERL_INT_MAX / 2)
313 #define CHANGE_TYPE(o,type) \
315 o->op_type = (OPCODE)type; \
316 o->op_ppaddr = PL_ppaddr[type]; \
320 S_gv_ename(pTHX_ GV *gv)
322 SV* const tmpsv = sv_newmortal();
324 PERL_ARGS_ASSERT_GV_ENAME;
326 gv_efullname3(tmpsv, gv, NULL);
327 return SvPV_nolen_const(tmpsv);
331 S_no_fh_allowed(pTHX_ OP *o)
333 PERL_ARGS_ASSERT_NO_FH_ALLOWED;
335 yyerror(Perl_form(aTHX_ "Missing comma after first argument to %s function",
341 S_too_few_arguments(pTHX_ OP *o, const char *name)
343 PERL_ARGS_ASSERT_TOO_FEW_ARGUMENTS;
345 yyerror(Perl_form(aTHX_ "Not enough arguments for %s", name));
350 S_too_many_arguments(pTHX_ OP *o, const char *name)
352 PERL_ARGS_ASSERT_TOO_MANY_ARGUMENTS;
354 yyerror(Perl_form(aTHX_ "Too many arguments for %s", name));
359 S_bad_type(pTHX_ I32 n, const char *t, const char *name, const OP *kid)
361 PERL_ARGS_ASSERT_BAD_TYPE;
363 yyerror(Perl_form(aTHX_ "Type of arg %d to %s must be %s (not %s)",
364 (int)n, name, t, OP_DESC(kid)));
368 S_no_bareword_allowed(pTHX_ const OP *o)
370 PERL_ARGS_ASSERT_NO_BAREWORD_ALLOWED;
373 return; /* various ok barewords are hidden in extra OP_NULL */
374 qerror(Perl_mess(aTHX_
375 "Bareword \"%"SVf"\" not allowed while \"strict subs\" in use",
379 /* "register" allocation */
382 Perl_allocmy(pTHX_ const char *const name, const STRLEN len, const U32 flags)
386 const bool is_our = (PL_parser->in_my == KEY_our);
388 PERL_ARGS_ASSERT_ALLOCMY;
391 Perl_croak(aTHX_ "panic: allocmy illegal flag bits 0x%" UVxf,
394 /* Until we're using the length for real, cross check that we're being
396 assert(strlen(name) == len);
398 /* complain about "my $<special_var>" etc etc */
402 (USE_UTF8_IN_NAMES && UTF8_IS_START(name[1])) ||
403 (name[1] == '_' && (*name == '$' || len > 2))))
405 /* name[2] is true if strlen(name) > 2 */
406 if (!isPRINT(name[1]) || strchr("\t\n\r\f", name[1])) {
407 yyerror(Perl_form(aTHX_ "Can't use global %c^%c%.*s in \"%s\"",
408 name[0], toCTRL(name[1]), (int)(len - 2), name + 2,
409 PL_parser->in_my == KEY_state ? "state" : "my"));
411 yyerror(Perl_form(aTHX_ "Can't use global %.*s in \"%s\"", (int) len, name,
412 PL_parser->in_my == KEY_state ? "state" : "my"));
416 /* allocate a spare slot and store the name in that slot */
418 off = pad_add_name(name, len,
419 is_our ? padadd_OUR :
420 PL_parser->in_my == KEY_state ? padadd_STATE : 0,
421 PL_parser->in_my_stash,
423 /* $_ is always in main::, even with our */
424 ? (PL_curstash && !strEQ(name,"$_") ? PL_curstash : PL_defstash)
428 /* anon sub prototypes contains state vars should always be cloned,
429 * otherwise the state var would be shared between anon subs */
431 if (PL_parser->in_my == KEY_state && CvANON(PL_compcv))
432 CvCLONE_on(PL_compcv);
437 /* free the body of an op without examining its contents.
438 * Always use this rather than FreeOp directly */
441 S_op_destroy(pTHX_ OP *o)
443 if (o->op_latefree) {
451 # define forget_pmop(a,b) S_forget_pmop(aTHX_ a,b)
453 # define forget_pmop(a,b) S_forget_pmop(aTHX_ a)
459 Perl_op_free(pTHX_ OP *o)
466 if (o->op_latefreed) {
473 if (o->op_private & OPpREFCOUNTED) {
484 refcnt = OpREFCNT_dec(o);
487 /* Need to find and remove any pattern match ops from the list
488 we maintain for reset(). */
489 find_and_forget_pmops(o);
499 /* Call the op_free hook if it has been set. Do it now so that it's called
500 * at the right time for refcounted ops, but still before all of the kids
504 if (o->op_flags & OPf_KIDS) {
505 register OP *kid, *nextkid;
506 for (kid = cUNOPo->op_first; kid; kid = nextkid) {
507 nextkid = kid->op_sibling; /* Get before next freeing kid */
512 #ifdef PERL_DEBUG_READONLY_OPS
516 /* COP* is not cleared by op_clear() so that we may track line
517 * numbers etc even after null() */
518 if (type == OP_NEXTSTATE || type == OP_DBSTATE
519 || (type == OP_NULL /* the COP might have been null'ed */
520 && ((OPCODE)o->op_targ == OP_NEXTSTATE
521 || (OPCODE)o->op_targ == OP_DBSTATE))) {
526 type = (OPCODE)o->op_targ;
529 if (o->op_latefree) {
535 #ifdef DEBUG_LEAKING_SCALARS
542 Perl_op_clear(pTHX_ OP *o)
547 PERL_ARGS_ASSERT_OP_CLEAR;
550 mad_free(o->op_madprop);
555 switch (o->op_type) {
556 case OP_NULL: /* Was holding old type, if any. */
557 if (PL_madskills && o->op_targ != OP_NULL) {
558 o->op_type = (Optype)o->op_targ;
563 case OP_ENTEREVAL: /* Was holding hints. */
567 if (!(o->op_flags & OPf_REF)
568 || (PL_check[o->op_type] != Perl_ck_ftst))
575 GV *gv = (o->op_type == OP_GV || o->op_type == OP_GVSV)
580 /* It's possible during global destruction that the GV is freed
581 before the optree. Whilst the SvREFCNT_inc is happy to bump from
582 0 to 1 on a freed SV, the corresponding SvREFCNT_dec from 1 to 0
583 will trigger an assertion failure, because the entry to sv_clear
584 checks that the scalar is not already freed. A check of for
585 !SvIS_FREED(gv) turns out to be invalid, because during global
586 destruction the reference count can be forced down to zero
587 (with SVf_BREAK set). In which case raising to 1 and then
588 dropping to 0 triggers cleanup before it should happen. I
589 *think* that this might actually be a general, systematic,
590 weakness of the whole idea of SVf_BREAK, in that code *is*
591 allowed to raise and lower references during global destruction,
592 so any *valid* code that happens to do this during global
593 destruction might well trigger premature cleanup. */
594 bool still_valid = gv && SvREFCNT(gv);
597 SvREFCNT_inc_simple_void(gv);
599 if (cPADOPo->op_padix > 0) {
600 /* No GvIN_PAD_off(cGVOPo_gv) here, because other references
601 * may still exist on the pad */
602 pad_swipe(cPADOPo->op_padix, TRUE);
603 cPADOPo->op_padix = 0;
606 SvREFCNT_dec(cSVOPo->op_sv);
607 cSVOPo->op_sv = NULL;
610 int try_downgrade = SvREFCNT(gv) == 2;
613 gv_try_downgrade(gv);
617 case OP_METHOD_NAMED:
620 SvREFCNT_dec(cSVOPo->op_sv);
621 cSVOPo->op_sv = NULL;
624 Even if op_clear does a pad_free for the target of the op,
625 pad_free doesn't actually remove the sv that exists in the pad;
626 instead it lives on. This results in that it could be reused as
627 a target later on when the pad was reallocated.
630 pad_swipe(o->op_targ,1);
639 if (o->op_flags & (OPf_SPECIAL|OPf_STACKED|OPf_KIDS))
644 if (o->op_private & (OPpTRANS_FROM_UTF|OPpTRANS_TO_UTF)) {
646 if (cPADOPo->op_padix > 0) {
647 pad_swipe(cPADOPo->op_padix, TRUE);
648 cPADOPo->op_padix = 0;
651 SvREFCNT_dec(cSVOPo->op_sv);
652 cSVOPo->op_sv = NULL;
656 PerlMemShared_free(cPVOPo->op_pv);
657 cPVOPo->op_pv = NULL;
661 op_free(cPMOPo->op_pmreplrootu.op_pmreplroot);
665 if (cPMOPo->op_pmreplrootu.op_pmtargetoff) {
666 /* No GvIN_PAD_off here, because other references may still
667 * exist on the pad */
668 pad_swipe(cPMOPo->op_pmreplrootu.op_pmtargetoff, TRUE);
671 SvREFCNT_dec(MUTABLE_SV(cPMOPo->op_pmreplrootu.op_pmtargetgv));
677 forget_pmop(cPMOPo, 1);
678 cPMOPo->op_pmreplrootu.op_pmreplroot = NULL;
679 /* we use the same protection as the "SAFE" version of the PM_ macros
680 * here since sv_clean_all might release some PMOPs
681 * after PL_regex_padav has been cleared
682 * and the clearing of PL_regex_padav needs to
683 * happen before sv_clean_all
686 if(PL_regex_pad) { /* We could be in destruction */
687 const IV offset = (cPMOPo)->op_pmoffset;
688 ReREFCNT_dec(PM_GETRE(cPMOPo));
689 PL_regex_pad[offset] = &PL_sv_undef;
690 sv_catpvn_nomg(PL_regex_pad[0], (const char *)&offset,
694 ReREFCNT_dec(PM_GETRE(cPMOPo));
695 PM_SETRE(cPMOPo, NULL);
701 if (o->op_targ > 0) {
702 pad_free(o->op_targ);
708 S_cop_free(pTHX_ COP* cop)
710 PERL_ARGS_ASSERT_COP_FREE;
714 if (! specialWARN(cop->cop_warnings))
715 PerlMemShared_free(cop->cop_warnings);
716 cophh_free(CopHINTHASH_get(cop));
720 S_forget_pmop(pTHX_ PMOP *const o
726 HV * const pmstash = PmopSTASH(o);
728 PERL_ARGS_ASSERT_FORGET_PMOP;
730 if (pmstash && !SvIS_FREED(pmstash)) {
731 MAGIC * const mg = mg_find((const SV *)pmstash, PERL_MAGIC_symtab);
733 PMOP **const array = (PMOP**) mg->mg_ptr;
734 U32 count = mg->mg_len / sizeof(PMOP**);
739 /* Found it. Move the entry at the end to overwrite it. */
740 array[i] = array[--count];
741 mg->mg_len = count * sizeof(PMOP**);
742 /* Could realloc smaller at this point always, but probably
743 not worth it. Probably worth free()ing if we're the
746 Safefree(mg->mg_ptr);
763 S_find_and_forget_pmops(pTHX_ OP *o)
765 PERL_ARGS_ASSERT_FIND_AND_FORGET_PMOPS;
767 if (o->op_flags & OPf_KIDS) {
768 OP *kid = cUNOPo->op_first;
770 switch (kid->op_type) {
775 forget_pmop((PMOP*)kid, 0);
777 find_and_forget_pmops(kid);
778 kid = kid->op_sibling;
784 Perl_op_null(pTHX_ OP *o)
788 PERL_ARGS_ASSERT_OP_NULL;
790 if (o->op_type == OP_NULL)
794 o->op_targ = o->op_type;
795 o->op_type = OP_NULL;
796 o->op_ppaddr = PL_ppaddr[OP_NULL];
800 Perl_op_refcnt_lock(pTHX)
808 Perl_op_refcnt_unlock(pTHX)
815 /* Contextualizers */
818 =for apidoc Am|OP *|op_contextualize|OP *o|I32 context
820 Applies a syntactic context to an op tree representing an expression.
821 I<o> is the op tree, and I<context> must be C<G_SCALAR>, C<G_ARRAY>,
822 or C<G_VOID> to specify the context to apply. The modified op tree
829 Perl_op_contextualize(pTHX_ OP *o, I32 context)
831 PERL_ARGS_ASSERT_OP_CONTEXTUALIZE;
833 case G_SCALAR: return scalar(o);
834 case G_ARRAY: return list(o);
835 case G_VOID: return scalarvoid(o);
837 Perl_croak(aTHX_ "panic: op_contextualize bad context");
843 =head1 Optree Manipulation Functions
845 =for apidoc Am|OP*|op_linklist|OP *o
846 This function is the implementation of the L</LINKLIST> macro. It should
847 not be called directly.
853 Perl_op_linklist(pTHX_ OP *o)
857 PERL_ARGS_ASSERT_OP_LINKLIST;
862 /* establish postfix order */
863 first = cUNOPo->op_first;
866 o->op_next = LINKLIST(first);
869 if (kid->op_sibling) {
870 kid->op_next = LINKLIST(kid->op_sibling);
871 kid = kid->op_sibling;
885 S_scalarkids(pTHX_ OP *o)
887 if (o && o->op_flags & OPf_KIDS) {
889 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
896 S_scalarboolean(pTHX_ OP *o)
900 PERL_ARGS_ASSERT_SCALARBOOLEAN;
902 if (o->op_type == OP_SASSIGN && cBINOPo->op_first->op_type == OP_CONST
903 && !(cBINOPo->op_first->op_flags & OPf_SPECIAL)) {
904 if (ckWARN(WARN_SYNTAX)) {
905 const line_t oldline = CopLINE(PL_curcop);
907 if (PL_parser && PL_parser->copline != NOLINE)
908 CopLINE_set(PL_curcop, PL_parser->copline);
909 Perl_warner(aTHX_ packWARN(WARN_SYNTAX), "Found = in conditional, should be ==");
910 CopLINE_set(PL_curcop, oldline);
917 Perl_scalar(pTHX_ OP *o)
922 /* assumes no premature commitment */
923 if (!o || (PL_parser && PL_parser->error_count)
924 || (o->op_flags & OPf_WANT)
925 || o->op_type == OP_RETURN)
930 o->op_flags = (o->op_flags & ~OPf_WANT) | OPf_WANT_SCALAR;
932 switch (o->op_type) {
934 scalar(cBINOPo->op_first);
939 for (kid = cUNOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
949 if (o->op_flags & OPf_KIDS) {
950 for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling)
956 kid = cLISTOPo->op_first;
958 kid = kid->op_sibling;
961 OP *sib = kid->op_sibling;
962 if (sib && kid->op_type != OP_LEAVEWHEN) {
963 if (sib->op_type == OP_BREAK && sib->op_flags & OPf_SPECIAL) {
973 PL_curcop = &PL_compiling;
978 kid = cLISTOPo->op_first;
981 Perl_ck_warner(aTHX_ packWARN(WARN_VOID), "Useless use of sort in scalar context");
988 Perl_scalarvoid(pTHX_ OP *o)
992 const char* useless = NULL;
996 PERL_ARGS_ASSERT_SCALARVOID;
998 /* trailing mad null ops don't count as "there" for void processing */
1000 o->op_type != OP_NULL &&
1002 o->op_sibling->op_type == OP_NULL)
1005 for (sib = o->op_sibling;
1006 sib && sib->op_type == OP_NULL;
1007 sib = sib->op_sibling) ;
1013 if (o->op_type == OP_NEXTSTATE
1014 || o->op_type == OP_DBSTATE
1015 || (o->op_type == OP_NULL && (o->op_targ == OP_NEXTSTATE
1016 || o->op_targ == OP_DBSTATE)))
1017 PL_curcop = (COP*)o; /* for warning below */
1019 /* assumes no premature commitment */
1020 want = o->op_flags & OPf_WANT;
1021 if ((want && want != OPf_WANT_SCALAR)
1022 || (PL_parser && PL_parser->error_count)
1023 || o->op_type == OP_RETURN || o->op_type == OP_REQUIRE || o->op_type == OP_LEAVEWHEN)
1028 if ((o->op_private & OPpTARGET_MY)
1029 && (PL_opargs[o->op_type] & OA_TARGLEX))/* OPp share the meaning */
1031 return scalar(o); /* As if inside SASSIGN */
1034 o->op_flags = (o->op_flags & ~OPf_WANT) | OPf_WANT_VOID;
1036 switch (o->op_type) {
1038 if (!(PL_opargs[o->op_type] & OA_FOLDCONST))
1042 if (o->op_flags & OPf_STACKED)
1046 if (o->op_private == 4)
1071 case OP_AELEMFAST_LEX:
1090 case OP_GETSOCKNAME:
1091 case OP_GETPEERNAME:
1096 case OP_GETPRIORITY:
1120 if (!(o->op_private & (OPpLVAL_INTRO|OPpOUR_INTRO)))
1121 /* Otherwise it's "Useless use of grep iterator" */
1122 useless = OP_DESC(o);
1126 kid = cLISTOPo->op_first;
1127 if (kid && kid->op_type == OP_PUSHRE
1129 && !((PMOP*)kid)->op_pmreplrootu.op_pmtargetoff)
1131 && !((PMOP*)kid)->op_pmreplrootu.op_pmtargetgv)
1133 useless = OP_DESC(o);
1137 kid = cUNOPo->op_first;
1138 if (kid->op_type != OP_MATCH && kid->op_type != OP_SUBST &&
1139 kid->op_type != OP_TRANS && kid->op_type != OP_TRANSR) {
1142 useless = "negative pattern binding (!~)";
1146 if (cPMOPo->op_pmflags & PMf_NONDESTRUCT)
1147 useless = "non-destructive substitution (s///r)";
1151 useless = "non-destructive transliteration (tr///r)";
1158 if (!(o->op_private & (OPpLVAL_INTRO|OPpOUR_INTRO)) &&
1159 (!o->op_sibling || o->op_sibling->op_type != OP_READLINE))
1160 useless = "a variable";
1165 if (cSVOPo->op_private & OPpCONST_STRICT)
1166 no_bareword_allowed(o);
1168 if (ckWARN(WARN_VOID)) {
1170 SV* msv = sv_2mortal(Perl_newSVpvf(aTHX_
1171 "a constant (%"SVf")", sv));
1172 useless = SvPV_nolen(msv);
1175 useless = "a constant (undef)";
1176 if (o->op_private & OPpCONST_ARYBASE)
1178 /* don't warn on optimised away booleans, eg
1179 * use constant Foo, 5; Foo || print; */
1180 if (cSVOPo->op_private & OPpCONST_SHORTCIRCUIT)
1182 /* the constants 0 and 1 are permitted as they are
1183 conventionally used as dummies in constructs like
1184 1 while some_condition_with_side_effects; */
1185 else if (SvNIOK(sv) && (SvNV(sv) == 0.0 || SvNV(sv) == 1.0))
1187 else if (SvPOK(sv)) {
1188 /* perl4's way of mixing documentation and code
1189 (before the invention of POD) was based on a
1190 trick to mix nroff and perl code. The trick was
1191 built upon these three nroff macros being used in
1192 void context. The pink camel has the details in
1193 the script wrapman near page 319. */
1194 const char * const maybe_macro = SvPVX_const(sv);
1195 if (strnEQ(maybe_macro, "di", 2) ||
1196 strnEQ(maybe_macro, "ds", 2) ||
1197 strnEQ(maybe_macro, "ig", 2))
1202 op_null(o); /* don't execute or even remember it */
1206 o->op_type = OP_PREINC; /* pre-increment is faster */
1207 o->op_ppaddr = PL_ppaddr[OP_PREINC];
1211 o->op_type = OP_PREDEC; /* pre-decrement is faster */
1212 o->op_ppaddr = PL_ppaddr[OP_PREDEC];
1216 o->op_type = OP_I_PREINC; /* pre-increment is faster */
1217 o->op_ppaddr = PL_ppaddr[OP_I_PREINC];
1221 o->op_type = OP_I_PREDEC; /* pre-decrement is faster */
1222 o->op_ppaddr = PL_ppaddr[OP_I_PREDEC];
1227 kid = cLOGOPo->op_first;
1228 if (kid->op_type == OP_NOT
1229 && (kid->op_flags & OPf_KIDS)
1231 if (o->op_type == OP_AND) {
1233 o->op_ppaddr = PL_ppaddr[OP_OR];
1235 o->op_type = OP_AND;
1236 o->op_ppaddr = PL_ppaddr[OP_AND];
1245 for (kid = cUNOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
1250 if (o->op_flags & OPf_STACKED)
1257 if (!(o->op_flags & OPf_KIDS))
1268 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
1278 Perl_ck_warner(aTHX_ packWARN(WARN_VOID), "Useless use of %s in void context", useless);
1283 S_listkids(pTHX_ OP *o)
1285 if (o && o->op_flags & OPf_KIDS) {
1287 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
1294 Perl_list(pTHX_ OP *o)
1299 /* assumes no premature commitment */
1300 if (!o || (o->op_flags & OPf_WANT)
1301 || (PL_parser && PL_parser->error_count)
1302 || o->op_type == OP_RETURN)
1307 if ((o->op_private & OPpTARGET_MY)
1308 && (PL_opargs[o->op_type] & OA_TARGLEX))/* OPp share the meaning */
1310 return o; /* As if inside SASSIGN */
1313 o->op_flags = (o->op_flags & ~OPf_WANT) | OPf_WANT_LIST;
1315 switch (o->op_type) {
1318 list(cBINOPo->op_first);
1323 for (kid = cUNOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
1331 if (!(o->op_flags & OPf_KIDS))
1333 if (!o->op_next && cUNOPo->op_first->op_type == OP_FLOP) {
1334 list(cBINOPo->op_first);
1335 return gen_constant_list(o);
1342 kid = cLISTOPo->op_first;
1344 kid = kid->op_sibling;
1347 OP *sib = kid->op_sibling;
1348 if (sib && kid->op_type != OP_LEAVEWHEN) {
1349 if (sib->op_type == OP_BREAK && sib->op_flags & OPf_SPECIAL) {
1359 PL_curcop = &PL_compiling;
1363 kid = cLISTOPo->op_first;
1370 S_scalarseq(pTHX_ OP *o)
1374 const OPCODE type = o->op_type;
1376 if (type == OP_LINESEQ || type == OP_SCOPE ||
1377 type == OP_LEAVE || type == OP_LEAVETRY)
1380 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling) {
1381 if (kid->op_sibling) {
1385 PL_curcop = &PL_compiling;
1387 o->op_flags &= ~OPf_PARENS;
1388 if (PL_hints & HINT_BLOCK_SCOPE)
1389 o->op_flags |= OPf_PARENS;
1392 o = newOP(OP_STUB, 0);
1397 S_modkids(pTHX_ OP *o, I32 type)
1399 if (o && o->op_flags & OPf_KIDS) {
1401 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
1402 op_lvalue(kid, type);
1408 =for apidoc Amx|OP *|op_lvalue|OP *o|I32 type
1410 Propagate lvalue ("modifiable") context to an op and its children.
1411 I<type> represents the context type, roughly based on the type of op that
1412 would do the modifying, although C<local()> is represented by OP_NULL,
1413 because it has no op type of its own (it is signalled by a flag on
1416 This function detects things that can't be modified, such as C<$x+1>, and
1417 generates errors for them. For example, C<$x+1 = 2> would cause it to be
1418 called with an op of type OP_ADD and a C<type> argument of OP_SASSIGN.
1420 It also flags things that need to behave specially in an lvalue context,
1421 such as C<$$x = 5> which might have to vivify a reference in C<$x>.
1427 Perl_op_lvalue(pTHX_ OP *o, I32 type)
1431 /* -1 = error on localize, 0 = ignore localize, 1 = ok to localize */
1434 if (!o || (PL_parser && PL_parser->error_count))
1437 if ((o->op_private & OPpTARGET_MY)
1438 && (PL_opargs[o->op_type] & OA_TARGLEX))/* OPp share the meaning */
1443 switch (o->op_type) {
1449 if (!(o->op_private & OPpCONST_ARYBASE))
1452 if (PL_eval_start && PL_eval_start->op_type == OP_CONST) {
1453 CopARYBASE_set(&PL_compiling,
1454 (I32)SvIV(cSVOPx(PL_eval_start)->op_sv));
1458 SAVECOPARYBASE(&PL_compiling);
1459 CopARYBASE_set(&PL_compiling, 0);
1461 else if (type == OP_REFGEN)
1464 Perl_croak(aTHX_ "That use of $[ is unsupported");
1467 if ((o->op_flags & OPf_PARENS) || PL_madskills)
1471 if ((type == OP_UNDEF || type == OP_REFGEN) &&
1472 !(o->op_flags & OPf_STACKED)) {
1473 o->op_type = OP_RV2CV; /* entersub => rv2cv */
1474 /* Both ENTERSUB and RV2CV use this bit, but for different pur-
1475 poses, so we need it clear. */
1476 o->op_private &= ~1;
1477 o->op_ppaddr = PL_ppaddr[OP_RV2CV];
1478 assert(cUNOPo->op_first->op_type == OP_NULL);
1479 op_null(((LISTOP*)cUNOPo->op_first)->op_first);/* disable pushmark */
1482 else if (o->op_private & OPpENTERSUB_NOMOD)
1484 else { /* lvalue subroutine call */
1485 o->op_private |= OPpLVAL_INTRO;
1486 PL_modcount = RETURN_UNLIMITED_NUMBER;
1487 if (type == OP_GREPSTART || type == OP_ENTERSUB || type == OP_REFGEN) {
1488 /* Backward compatibility mode: */
1489 o->op_private |= OPpENTERSUB_INARGS;
1492 else { /* Compile-time error message: */
1493 OP *kid = cUNOPo->op_first;
1497 if (kid->op_type != OP_PUSHMARK) {
1498 if (kid->op_type != OP_NULL || kid->op_targ != OP_LIST)
1500 "panic: unexpected lvalue entersub "
1501 "args: type/targ %ld:%"UVuf,
1502 (long)kid->op_type, (UV)kid->op_targ);
1503 kid = kLISTOP->op_first;
1505 while (kid->op_sibling)
1506 kid = kid->op_sibling;
1507 if (!(kid->op_type == OP_NULL && kid->op_targ == OP_RV2CV)) {
1509 if (kid->op_type == OP_METHOD_NAMED
1510 || kid->op_type == OP_METHOD)
1514 NewOp(1101, newop, 1, UNOP);
1515 newop->op_type = OP_RV2CV;
1516 newop->op_ppaddr = PL_ppaddr[OP_RV2CV];
1517 newop->op_first = NULL;
1518 newop->op_next = (OP*)newop;
1519 kid->op_sibling = (OP*)newop;
1520 newop->op_private |= OPpLVAL_INTRO;
1521 newop->op_private &= ~1;
1525 if (kid->op_type != OP_RV2CV)
1527 "panic: unexpected lvalue entersub "
1528 "entry via type/targ %ld:%"UVuf,
1529 (long)kid->op_type, (UV)kid->op_targ);
1530 kid->op_private |= OPpLVAL_INTRO;
1531 break; /* Postpone until runtime */
1535 kid = kUNOP->op_first;
1536 if (kid->op_type == OP_NULL && kid->op_targ == OP_RV2SV)
1537 kid = kUNOP->op_first;
1538 if (kid->op_type == OP_NULL)
1540 "Unexpected constant lvalue entersub "
1541 "entry via type/targ %ld:%"UVuf,
1542 (long)kid->op_type, (UV)kid->op_targ);
1543 if (kid->op_type != OP_GV) {
1544 /* Restore RV2CV to check lvalueness */
1546 if (kid->op_next && kid->op_next != kid) { /* Happens? */
1547 okid->op_next = kid->op_next;
1548 kid->op_next = okid;
1551 okid->op_next = NULL;
1552 okid->op_type = OP_RV2CV;
1554 okid->op_ppaddr = PL_ppaddr[OP_RV2CV];
1555 okid->op_private |= OPpLVAL_INTRO;
1556 okid->op_private &= ~1;
1560 cv = GvCV(kGVOP_gv);
1570 /* grep, foreach, subcalls, refgen */
1571 if (type == OP_GREPSTART || type == OP_ENTERSUB
1572 || type == OP_REFGEN || type == OP_LEAVESUBLV)
1574 yyerror(Perl_form(aTHX_ "Can't modify %s in %s",
1575 (o->op_type == OP_NULL && (o->op_flags & OPf_SPECIAL)
1577 : (o->op_type == OP_ENTERSUB
1578 ? "non-lvalue subroutine call"
1580 type ? PL_op_desc[type] : "local"));
1594 case OP_RIGHT_SHIFT:
1603 if (!(o->op_flags & OPf_STACKED))
1610 for (kid = cUNOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
1611 op_lvalue(kid, type);
1616 if (type == OP_REFGEN && o->op_flags & OPf_PARENS) {
1617 PL_modcount = RETURN_UNLIMITED_NUMBER;
1618 return o; /* Treat \(@foo) like ordinary list. */
1622 if (scalar_mod_type(o, type))
1624 ref(cUNOPo->op_first, o->op_type);
1628 if (type == OP_LEAVESUBLV)
1629 o->op_private |= OPpMAYBE_LVSUB;
1635 PL_modcount = RETURN_UNLIMITED_NUMBER;
1638 PL_hints |= HINT_BLOCK_SCOPE;
1639 if (type == OP_LEAVESUBLV)
1640 o->op_private |= OPpMAYBE_LVSUB;
1644 ref(cUNOPo->op_first, o->op_type);
1648 PL_hints |= HINT_BLOCK_SCOPE;
1657 case OP_AELEMFAST_LEX:
1664 PL_modcount = RETURN_UNLIMITED_NUMBER;
1665 if (type == OP_REFGEN && o->op_flags & OPf_PARENS)
1666 return o; /* Treat \(@foo) like ordinary list. */
1667 if (scalar_mod_type(o, type))
1669 if (type == OP_LEAVESUBLV)
1670 o->op_private |= OPpMAYBE_LVSUB;
1674 if (!type) /* local() */
1675 Perl_croak(aTHX_ "Can't localize lexical variable %s",
1676 PAD_COMPNAME_PV(o->op_targ));
1685 if (type != OP_SASSIGN && type != OP_LEAVESUBLV)
1689 if (o->op_private == 4) /* don't allow 4 arg substr as lvalue */
1695 if (type == OP_LEAVESUBLV)
1696 o->op_private |= OPpMAYBE_LVSUB;
1697 pad_free(o->op_targ);
1698 o->op_targ = pad_alloc(o->op_type, SVs_PADMY);
1699 assert(SvTYPE(PAD_SV(o->op_targ)) == SVt_NULL);
1700 if (o->op_flags & OPf_KIDS)
1701 op_lvalue(cBINOPo->op_first->op_sibling, type);
1706 ref(cBINOPo->op_first, o->op_type);
1707 if (type == OP_ENTERSUB &&
1708 !(o->op_private & (OPpLVAL_INTRO | OPpDEREF)))
1709 o->op_private |= OPpLVAL_DEFER;
1710 if (type == OP_LEAVESUBLV)
1711 o->op_private |= OPpMAYBE_LVSUB;
1721 if (o->op_flags & OPf_KIDS)
1722 op_lvalue(cLISTOPo->op_last, type);
1727 if (o->op_flags & OPf_SPECIAL) /* do BLOCK */
1729 else if (!(o->op_flags & OPf_KIDS))
1731 if (o->op_targ != OP_LIST) {
1732 op_lvalue(cBINOPo->op_first, type);
1738 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
1739 op_lvalue(kid, type);
1743 if (type != OP_LEAVESUBLV)
1745 break; /* op_lvalue()ing was handled by ck_return() */
1748 /* [20011101.069] File test operators interpret OPf_REF to mean that
1749 their argument is a filehandle; thus \stat(".") should not set
1751 if (type == OP_REFGEN &&
1752 PL_check[o->op_type] == Perl_ck_ftst)
1755 if (type != OP_LEAVESUBLV)
1756 o->op_flags |= OPf_MOD;
1758 if (type == OP_AASSIGN || type == OP_SASSIGN)
1759 o->op_flags |= OPf_SPECIAL|OPf_REF;
1760 else if (!type) { /* local() */
1763 o->op_private |= OPpLVAL_INTRO;
1764 o->op_flags &= ~OPf_SPECIAL;
1765 PL_hints |= HINT_BLOCK_SCOPE;
1770 Perl_ck_warner(aTHX_ packWARN(WARN_SYNTAX),
1771 "Useless localization of %s", OP_DESC(o));
1774 else if (type != OP_GREPSTART && type != OP_ENTERSUB
1775 && type != OP_LEAVESUBLV)
1776 o->op_flags |= OPf_REF;
1780 /* Do not use this. It will be removed after 5.14. */
1782 Perl_mod(pTHX_ OP *o, I32 type)
1784 return op_lvalue(o,type);
1789 S_scalar_mod_type(const OP *o, I32 type)
1791 PERL_ARGS_ASSERT_SCALAR_MOD_TYPE;
1795 if (o->op_type == OP_RV2GV)
1819 case OP_RIGHT_SHIFT:
1840 S_is_handle_constructor(const OP *o, I32 numargs)
1842 PERL_ARGS_ASSERT_IS_HANDLE_CONSTRUCTOR;
1844 switch (o->op_type) {
1852 case OP_SELECT: /* XXX c.f. SelectSaver.pm */
1865 S_refkids(pTHX_ OP *o, I32 type)
1867 if (o && o->op_flags & OPf_KIDS) {
1869 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
1876 Perl_doref(pTHX_ OP *o, I32 type, bool set_op_ref)
1881 PERL_ARGS_ASSERT_DOREF;
1883 if (!o || (PL_parser && PL_parser->error_count))
1886 switch (o->op_type) {
1888 if ((type == OP_EXISTS || type == OP_DEFINED || type == OP_LOCK) &&
1889 !(o->op_flags & OPf_STACKED)) {
1890 o->op_type = OP_RV2CV; /* entersub => rv2cv */
1891 o->op_ppaddr = PL_ppaddr[OP_RV2CV];
1892 assert(cUNOPo->op_first->op_type == OP_NULL);
1893 op_null(((LISTOP*)cUNOPo->op_first)->op_first); /* disable pushmark */
1894 o->op_flags |= OPf_SPECIAL;
1895 o->op_private &= ~1;
1897 else if (type == OP_RV2SV || type == OP_RV2AV || type == OP_RV2HV){
1898 o->op_private |= OPpENTERSUB_DEREF;
1899 o->op_flags |= OPf_MOD;
1905 for (kid = cUNOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
1906 doref(kid, type, set_op_ref);
1909 if (type == OP_DEFINED)
1910 o->op_flags |= OPf_SPECIAL; /* don't create GV */
1911 doref(cUNOPo->op_first, o->op_type, set_op_ref);
1914 if (type == OP_RV2SV || type == OP_RV2AV || type == OP_RV2HV) {
1915 o->op_private |= (type == OP_RV2AV ? OPpDEREF_AV
1916 : type == OP_RV2HV ? OPpDEREF_HV
1918 o->op_flags |= OPf_MOD;
1925 o->op_flags |= OPf_REF;
1928 if (type == OP_DEFINED)
1929 o->op_flags |= OPf_SPECIAL; /* don't create GV */
1930 doref(cUNOPo->op_first, o->op_type, set_op_ref);
1936 o->op_flags |= OPf_REF;
1941 if (!(o->op_flags & OPf_KIDS))
1943 doref(cBINOPo->op_first, type, set_op_ref);
1947 doref(cBINOPo->op_first, o->op_type, set_op_ref);
1948 if (type == OP_RV2SV || type == OP_RV2AV || type == OP_RV2HV) {
1949 o->op_private |= (type == OP_RV2AV ? OPpDEREF_AV
1950 : type == OP_RV2HV ? OPpDEREF_HV
1952 o->op_flags |= OPf_MOD;
1962 if (!(o->op_flags & OPf_KIDS))
1964 doref(cLISTOPo->op_last, type, set_op_ref);
1974 S_dup_attrlist(pTHX_ OP *o)
1979 PERL_ARGS_ASSERT_DUP_ATTRLIST;
1981 /* An attrlist is either a simple OP_CONST or an OP_LIST with kids,
1982 * where the first kid is OP_PUSHMARK and the remaining ones
1983 * are OP_CONST. We need to push the OP_CONST values.
1985 if (o->op_type == OP_CONST)
1986 rop = newSVOP(OP_CONST, o->op_flags, SvREFCNT_inc_NN(cSVOPo->op_sv));
1988 else if (o->op_type == OP_NULL)
1992 assert((o->op_type == OP_LIST) && (o->op_flags & OPf_KIDS));
1994 for (o = cLISTOPo->op_first; o; o=o->op_sibling) {
1995 if (o->op_type == OP_CONST)
1996 rop = op_append_elem(OP_LIST, rop,
1997 newSVOP(OP_CONST, o->op_flags,
1998 SvREFCNT_inc_NN(cSVOPo->op_sv)));
2005 S_apply_attrs(pTHX_ HV *stash, SV *target, OP *attrs, bool for_my)
2010 PERL_ARGS_ASSERT_APPLY_ATTRS;
2012 /* fake up C<use attributes $pkg,$rv,@attrs> */
2013 ENTER; /* need to protect against side-effects of 'use' */
2014 stashsv = stash ? newSVhek(HvNAME_HEK(stash)) : &PL_sv_no;
2016 #define ATTRSMODULE "attributes"
2017 #define ATTRSMODULE_PM "attributes.pm"
2020 /* Don't force the C<use> if we don't need it. */
2021 SV * const * const svp = hv_fetchs(GvHVn(PL_incgv), ATTRSMODULE_PM, FALSE);
2022 if (svp && *svp != &PL_sv_undef)
2023 NOOP; /* already in %INC */
2025 Perl_load_module(aTHX_ PERL_LOADMOD_NOIMPORT,
2026 newSVpvs(ATTRSMODULE), NULL);
2029 Perl_load_module(aTHX_ PERL_LOADMOD_IMPORT_OPS,
2030 newSVpvs(ATTRSMODULE),
2032 op_prepend_elem(OP_LIST,
2033 newSVOP(OP_CONST, 0, stashsv),
2034 op_prepend_elem(OP_LIST,
2035 newSVOP(OP_CONST, 0,
2037 dup_attrlist(attrs))));
2043 S_apply_attrs_my(pTHX_ HV *stash, OP *target, OP *attrs, OP **imopsp)
2046 OP *pack, *imop, *arg;
2049 PERL_ARGS_ASSERT_APPLY_ATTRS_MY;
2054 assert(target->op_type == OP_PADSV ||
2055 target->op_type == OP_PADHV ||
2056 target->op_type == OP_PADAV);
2058 /* Ensure that attributes.pm is loaded. */
2059 apply_attrs(stash, PAD_SV(target->op_targ), attrs, TRUE);
2061 /* Need package name for method call. */
2062 pack = newSVOP(OP_CONST, 0, newSVpvs(ATTRSMODULE));
2064 /* Build up the real arg-list. */
2065 stashsv = stash ? newSVhek(HvNAME_HEK(stash)) : &PL_sv_no;
2067 arg = newOP(OP_PADSV, 0);
2068 arg->op_targ = target->op_targ;
2069 arg = op_prepend_elem(OP_LIST,
2070 newSVOP(OP_CONST, 0, stashsv),
2071 op_prepend_elem(OP_LIST,
2072 newUNOP(OP_REFGEN, 0,
2073 op_lvalue(arg, OP_REFGEN)),
2074 dup_attrlist(attrs)));
2076 /* Fake up a method call to import */
2077 meth = newSVpvs_share("import");
2078 imop = convert(OP_ENTERSUB, OPf_STACKED|OPf_SPECIAL|OPf_WANT_VOID,
2079 op_append_elem(OP_LIST,
2080 op_prepend_elem(OP_LIST, pack, list(arg)),
2081 newSVOP(OP_METHOD_NAMED, 0, meth)));
2082 imop->op_private |= OPpENTERSUB_NOMOD;
2084 /* Combine the ops. */
2085 *imopsp = op_append_elem(OP_LIST, *imopsp, imop);
2089 =notfor apidoc apply_attrs_string
2091 Attempts to apply a list of attributes specified by the C<attrstr> and
2092 C<len> arguments to the subroutine identified by the C<cv> argument which
2093 is expected to be associated with the package identified by the C<stashpv>
2094 argument (see L<attributes>). It gets this wrong, though, in that it
2095 does not correctly identify the boundaries of the individual attribute
2096 specifications within C<attrstr>. This is not really intended for the
2097 public API, but has to be listed here for systems such as AIX which
2098 need an explicit export list for symbols. (It's called from XS code
2099 in support of the C<ATTRS:> keyword from F<xsubpp>.) Patches to fix it
2100 to respect attribute syntax properly would be welcome.
2106 Perl_apply_attrs_string(pTHX_ const char *stashpv, CV *cv,
2107 const char *attrstr, STRLEN len)
2111 PERL_ARGS_ASSERT_APPLY_ATTRS_STRING;
2114 len = strlen(attrstr);
2118 for (; isSPACE(*attrstr) && len; --len, ++attrstr) ;
2120 const char * const sstr = attrstr;
2121 for (; !isSPACE(*attrstr) && len; --len, ++attrstr) ;
2122 attrs = op_append_elem(OP_LIST, attrs,
2123 newSVOP(OP_CONST, 0,
2124 newSVpvn(sstr, attrstr-sstr)));
2128 Perl_load_module(aTHX_ PERL_LOADMOD_IMPORT_OPS,
2129 newSVpvs(ATTRSMODULE),
2130 NULL, op_prepend_elem(OP_LIST,
2131 newSVOP(OP_CONST, 0, newSVpv(stashpv,0)),
2132 op_prepend_elem(OP_LIST,
2133 newSVOP(OP_CONST, 0,
2134 newRV(MUTABLE_SV(cv))),
2139 S_my_kid(pTHX_ OP *o, OP *attrs, OP **imopsp)
2143 const bool stately = PL_parser && PL_parser->in_my == KEY_state;
2145 PERL_ARGS_ASSERT_MY_KID;
2147 if (!o || (PL_parser && PL_parser->error_count))
2151 if (PL_madskills && type == OP_NULL && o->op_flags & OPf_KIDS) {
2152 (void)my_kid(cUNOPo->op_first, attrs, imopsp);
2156 if (type == OP_LIST) {
2158 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
2159 my_kid(kid, attrs, imopsp);
2160 } else if (type == OP_UNDEF
2166 } else if (type == OP_RV2SV || /* "our" declaration */
2168 type == OP_RV2HV) { /* XXX does this let anything illegal in? */
2169 if (cUNOPo->op_first->op_type != OP_GV) { /* MJD 20011224 */
2170 yyerror(Perl_form(aTHX_ "Can't declare %s in \"%s\"",
2172 PL_parser->in_my == KEY_our
2174 : PL_parser->in_my == KEY_state ? "state" : "my"));
2176 GV * const gv = cGVOPx_gv(cUNOPo->op_first);
2177 PL_parser->in_my = FALSE;
2178 PL_parser->in_my_stash = NULL;
2179 apply_attrs(GvSTASH(gv),
2180 (type == OP_RV2SV ? GvSV(gv) :
2181 type == OP_RV2AV ? MUTABLE_SV(GvAV(gv)) :
2182 type == OP_RV2HV ? MUTABLE_SV(GvHV(gv)) : MUTABLE_SV(gv)),
2185 o->op_private |= OPpOUR_INTRO;
2188 else if (type != OP_PADSV &&
2191 type != OP_PUSHMARK)
2193 yyerror(Perl_form(aTHX_ "Can't declare %s in \"%s\"",
2195 PL_parser->in_my == KEY_our
2197 : PL_parser->in_my == KEY_state ? "state" : "my"));
2200 else if (attrs && type != OP_PUSHMARK) {
2203 PL_parser->in_my = FALSE;
2204 PL_parser->in_my_stash = NULL;
2206 /* check for C<my Dog $spot> when deciding package */
2207 stash = PAD_COMPNAME_TYPE(o->op_targ);
2209 stash = PL_curstash;
2210 apply_attrs_my(stash, o, attrs, imopsp);
2212 o->op_flags |= OPf_MOD;
2213 o->op_private |= OPpLVAL_INTRO;
2215 o->op_private |= OPpPAD_STATE;
2220 Perl_my_attrs(pTHX_ OP *o, OP *attrs)
2224 int maybe_scalar = 0;
2226 PERL_ARGS_ASSERT_MY_ATTRS;
2228 /* [perl #17376]: this appears to be premature, and results in code such as
2229 C< our(%x); > executing in list mode rather than void mode */
2231 if (o->op_flags & OPf_PARENS)
2241 o = my_kid(o, attrs, &rops);
2243 if (maybe_scalar && o->op_type == OP_PADSV) {
2244 o = scalar(op_append_list(OP_LIST, rops, o));
2245 o->op_private |= OPpLVAL_INTRO;
2248 /* The listop in rops might have a pushmark at the beginning,
2249 which will mess up list assignment. */
2250 LISTOP * const lrops = (LISTOP *)rops; /* for brevity */
2251 if (rops->op_type == OP_LIST &&
2252 lrops->op_first && lrops->op_first->op_type == OP_PUSHMARK)
2254 OP * const pushmark = lrops->op_first;
2255 lrops->op_first = pushmark->op_sibling;
2258 o = op_append_list(OP_LIST, o, rops);
2261 PL_parser->in_my = FALSE;
2262 PL_parser->in_my_stash = NULL;
2267 Perl_sawparens(pTHX_ OP *o)
2269 PERL_UNUSED_CONTEXT;
2271 o->op_flags |= OPf_PARENS;
2276 Perl_bind_match(pTHX_ I32 type, OP *left, OP *right)
2280 const OPCODE ltype = left->op_type;
2281 const OPCODE rtype = right->op_type;
2283 PERL_ARGS_ASSERT_BIND_MATCH;
2285 if ( (ltype == OP_RV2AV || ltype == OP_RV2HV || ltype == OP_PADAV
2286 || ltype == OP_PADHV) && ckWARN(WARN_MISC))
2288 const char * const desc
2290 rtype == OP_SUBST || rtype == OP_TRANS
2291 || rtype == OP_TRANSR
2293 ? (int)rtype : OP_MATCH];
2294 const char * const sample = ((ltype == OP_RV2AV || ltype == OP_PADAV)
2295 ? "@array" : "%hash");
2296 Perl_warner(aTHX_ packWARN(WARN_MISC),
2297 "Applying %s to %s will act on scalar(%s)",
2298 desc, sample, sample);
2301 if (rtype == OP_CONST &&
2302 cSVOPx(right)->op_private & OPpCONST_BARE &&
2303 cSVOPx(right)->op_private & OPpCONST_STRICT)
2305 no_bareword_allowed(right);
2308 /* !~ doesn't make sense with /r, so error on it for now */
2309 if (rtype == OP_SUBST && (cPMOPx(right)->op_pmflags & PMf_NONDESTRUCT) &&
2311 yyerror("Using !~ with s///r doesn't make sense");
2312 if (rtype == OP_TRANSR && type == OP_NOT)
2313 yyerror("Using !~ with tr///r doesn't make sense");
2315 ismatchop = (rtype == OP_MATCH ||
2316 rtype == OP_SUBST ||
2317 rtype == OP_TRANS || rtype == OP_TRANSR)
2318 && !(right->op_flags & OPf_SPECIAL);
2319 if (ismatchop && right->op_private & OPpTARGET_MY) {
2321 right->op_private &= ~OPpTARGET_MY;
2323 if (!(right->op_flags & OPf_STACKED) && ismatchop) {
2326 right->op_flags |= OPf_STACKED;
2327 if (rtype != OP_MATCH && rtype != OP_TRANSR &&
2328 ! (rtype == OP_TRANS &&
2329 right->op_private & OPpTRANS_IDENTICAL) &&
2330 ! (rtype == OP_SUBST &&
2331 (cPMOPx(right)->op_pmflags & PMf_NONDESTRUCT)))
2332 newleft = op_lvalue(left, rtype);
2335 if (right->op_type == OP_TRANS || right->op_type == OP_TRANSR)
2336 o = newBINOP(OP_NULL, OPf_STACKED, scalar(newleft), right);
2338 o = op_prepend_elem(rtype, scalar(newleft), right);
2340 return newUNOP(OP_NOT, 0, scalar(o));
2344 return bind_match(type, left,
2345 pmruntime(newPMOP(OP_MATCH, 0), right, 0));
2349 Perl_invert(pTHX_ OP *o)
2353 return newUNOP(OP_NOT, OPf_SPECIAL, scalar(o));
2357 =for apidoc Amx|OP *|op_scope|OP *o
2359 Wraps up an op tree with some additional ops so that at runtime a dynamic
2360 scope will be created. The original ops run in the new dynamic scope,
2361 and then, provided that they exit normally, the scope will be unwound.
2362 The additional ops used to create and unwind the dynamic scope will
2363 normally be an C<enter>/C<leave> pair, but a C<scope> op may be used
2364 instead if the ops are simple enough to not need the full dynamic scope
2371 Perl_op_scope(pTHX_ OP *o)
2375 if (o->op_flags & OPf_PARENS || PERLDB_NOOPT || PL_tainting) {
2376 o = op_prepend_elem(OP_LINESEQ, newOP(OP_ENTER, 0), o);
2377 o->op_type = OP_LEAVE;
2378 o->op_ppaddr = PL_ppaddr[OP_LEAVE];
2380 else if (o->op_type == OP_LINESEQ) {
2382 o->op_type = OP_SCOPE;
2383 o->op_ppaddr = PL_ppaddr[OP_SCOPE];
2384 kid = ((LISTOP*)o)->op_first;
2385 if (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) {
2388 /* The following deals with things like 'do {1 for 1}' */
2389 kid = kid->op_sibling;
2391 (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE))
2396 o = newLISTOP(OP_SCOPE, 0, o, NULL);
2402 Perl_block_start(pTHX_ int full)
2405 const int retval = PL_savestack_ix;
2407 pad_block_start(full);
2409 PL_hints &= ~HINT_BLOCK_SCOPE;
2410 SAVECOMPILEWARNINGS();
2411 PL_compiling.cop_warnings = DUP_WARNINGS(PL_compiling.cop_warnings);
2413 CALL_BLOCK_HOOKS(bhk_start, full);
2419 Perl_block_end(pTHX_ I32 floor, OP *seq)
2422 const int needblockscope = PL_hints & HINT_BLOCK_SCOPE;
2423 OP* retval = scalarseq(seq);
2425 CALL_BLOCK_HOOKS(bhk_pre_end, &retval);
2428 CopHINTS_set(&PL_compiling, PL_hints);
2430 PL_hints |= HINT_BLOCK_SCOPE; /* propagate out */
2433 CALL_BLOCK_HOOKS(bhk_post_end, &retval);
2439 =head1 Compile-time scope hooks
2441 =for apidoc Aox||blockhook_register
2443 Register a set of hooks to be called when the Perl lexical scope changes
2444 at compile time. See L<perlguts/"Compile-time scope hooks">.
2450 Perl_blockhook_register(pTHX_ BHK *hk)
2452 PERL_ARGS_ASSERT_BLOCKHOOK_REGISTER;
2454 Perl_av_create_and_push(aTHX_ &PL_blockhooks, newSViv(PTR2IV(hk)));
2461 const PADOFFSET offset = Perl_pad_findmy(aTHX_ STR_WITH_LEN("$_"), 0);
2462 if (offset == NOT_IN_PAD || PAD_COMPNAME_FLAGS_isOUR(offset)) {
2463 return newSVREF(newGVOP(OP_GV, 0, PL_defgv));
2466 OP * const o = newOP(OP_PADSV, 0);
2467 o->op_targ = offset;
2473 Perl_newPROG(pTHX_ OP *o)
2477 PERL_ARGS_ASSERT_NEWPROG;
2482 PL_eval_root = newUNOP(OP_LEAVEEVAL,
2483 ((PL_in_eval & EVAL_KEEPERR)
2484 ? OPf_SPECIAL : 0), o);
2485 /* don't use LINKLIST, since PL_eval_root might indirect through
2486 * a rather expensive function call and LINKLIST evaluates its
2487 * argument more than once */
2488 PL_eval_start = op_linklist(PL_eval_root);
2489 PL_eval_root->op_private |= OPpREFCOUNTED;
2490 OpREFCNT_set(PL_eval_root, 1);
2491 PL_eval_root->op_next = 0;
2492 CALL_PEEP(PL_eval_start);
2495 if (o->op_type == OP_STUB) {
2496 PL_comppad_name = 0;
2498 S_op_destroy(aTHX_ o);
2501 PL_main_root = op_scope(sawparens(scalarvoid(o)));
2502 PL_curcop = &PL_compiling;
2503 PL_main_start = LINKLIST(PL_main_root);
2504 PL_main_root->op_private |= OPpREFCOUNTED;
2505 OpREFCNT_set(PL_main_root, 1);
2506 PL_main_root->op_next = 0;
2507 CALL_PEEP(PL_main_start);
2510 /* Register with debugger */
2512 CV * const cv = get_cvs("DB::postponed", 0);
2516 XPUSHs(MUTABLE_SV(CopFILEGV(&PL_compiling)));
2518 call_sv(MUTABLE_SV(cv), G_DISCARD);
2525 Perl_localize(pTHX_ OP *o, I32 lex)
2529 PERL_ARGS_ASSERT_LOCALIZE;
2531 if (o->op_flags & OPf_PARENS)
2532 /* [perl #17376]: this appears to be premature, and results in code such as
2533 C< our(%x); > executing in list mode rather than void mode */
2540 if ( PL_parser->bufptr > PL_parser->oldbufptr
2541 && PL_parser->bufptr[-1] == ','
2542 && ckWARN(WARN_PARENTHESIS))
2544 char *s = PL_parser->bufptr;
2547 /* some heuristics to detect a potential error */
2548 while (*s && (strchr(", \t\n", *s)))
2552 if (*s && strchr("@$%*", *s) && *++s
2553 && (isALNUM(*s) || UTF8_IS_CONTINUED(*s))) {
2556 while (*s && (isALNUM(*s) || UTF8_IS_CONTINUED(*s)))
2558 while (*s && (strchr(", \t\n", *s)))
2564 if (sigil && (*s == ';' || *s == '=')) {
2565 Perl_warner(aTHX_ packWARN(WARN_PARENTHESIS),
2566 "Parentheses missing around \"%s\" list",
2568 ? (PL_parser->in_my == KEY_our
2570 : PL_parser->in_my == KEY_state
2580 o = op_lvalue(o, OP_NULL); /* a bit kludgey */
2581 PL_parser->in_my = FALSE;
2582 PL_parser->in_my_stash = NULL;
2587 Perl_jmaybe(pTHX_ OP *o)
2589 PERL_ARGS_ASSERT_JMAYBE;
2591 if (o->op_type == OP_LIST) {
2593 = newSVREF(newGVOP(OP_GV, 0, gv_fetchpvs(";", GV_ADD|GV_NOTQUAL, SVt_PV)));
2594 o = convert(OP_JOIN, 0, op_prepend_elem(OP_LIST, o2, o));
2600 S_fold_constants(pTHX_ register OP *o)
2603 register OP * VOL curop;
2605 VOL I32 type = o->op_type;
2610 SV * const oldwarnhook = PL_warnhook;
2611 SV * const olddiehook = PL_diehook;
2615 PERL_ARGS_ASSERT_FOLD_CONSTANTS;
2617 if (PL_opargs[type] & OA_RETSCALAR)
2619 if (PL_opargs[type] & OA_TARGET && !o->op_targ)
2620 o->op_targ = pad_alloc(type, SVs_PADTMP);
2622 /* integerize op, unless it happens to be C<-foo>.
2623 * XXX should pp_i_negate() do magic string negation instead? */
2624 if ((PL_opargs[type] & OA_OTHERINT) && (PL_hints & HINT_INTEGER)
2625 && !(type == OP_NEGATE && cUNOPo->op_first->op_type == OP_CONST
2626 && (cUNOPo->op_first->op_private & OPpCONST_BARE)))
2628 o->op_ppaddr = PL_ppaddr[type = ++(o->op_type)];
2631 if (!(PL_opargs[type] & OA_FOLDCONST))
2636 /* XXX might want a ck_negate() for this */
2637 cUNOPo->op_first->op_private &= ~OPpCONST_STRICT;
2649 /* XXX what about the numeric ops? */
2650 if (PL_hints & HINT_LOCALE)
2655 if (PL_parser && PL_parser->error_count)
2656 goto nope; /* Don't try to run w/ errors */
2658 for (curop = LINKLIST(o); curop != o; curop = LINKLIST(curop)) {
2659 const OPCODE type = curop->op_type;
2660 if ((type != OP_CONST || (curop->op_private & OPpCONST_BARE)) &&
2662 type != OP_SCALAR &&
2664 type != OP_PUSHMARK)
2670 curop = LINKLIST(o);
2671 old_next = o->op_next;
2675 oldscope = PL_scopestack_ix;
2676 create_eval_scope(G_FAKINGEVAL);
2678 /* Verify that we don't need to save it: */
2679 assert(PL_curcop == &PL_compiling);
2680 StructCopy(&PL_compiling, ¬_compiling, COP);
2681 PL_curcop = ¬_compiling;
2682 /* The above ensures that we run with all the correct hints of the
2683 currently compiling COP, but that IN_PERL_RUNTIME is not true. */
2684 assert(IN_PERL_RUNTIME);
2685 PL_warnhook = PERL_WARNHOOK_FATAL;
2692 sv = *(PL_stack_sp--);
2693 if (o->op_targ && sv == PAD_SV(o->op_targ)) { /* grab pad temp? */
2695 /* Can't simply swipe the SV from the pad, because that relies on
2696 the op being freed "real soon now". Under MAD, this doesn't
2697 happen (see the #ifdef below). */
2700 pad_swipe(o->op_targ, FALSE);
2703 else if (SvTEMP(sv)) { /* grab mortal temp? */
2704 SvREFCNT_inc_simple_void(sv);
2709 /* Something tried to die. Abandon constant folding. */
2710 /* Pretend the error never happened. */
2712 o->op_next = old_next;
2716 /* Don't expect 1 (setjmp failed) or 2 (something called my_exit) */
2717 PL_warnhook = oldwarnhook;
2718 PL_diehook = olddiehook;
2719 /* XXX note that this croak may fail as we've already blown away
2720 * the stack - eg any nested evals */
2721 Perl_croak(aTHX_ "panic: fold_constants JMPENV_PUSH returned %d", ret);
2724 PL_warnhook = oldwarnhook;
2725 PL_diehook = olddiehook;
2726 PL_curcop = &PL_compiling;
2728 if (PL_scopestack_ix > oldscope)
2729 delete_eval_scope();
2738 if (type == OP_RV2GV)
2739 newop = newGVOP(OP_GV, 0, MUTABLE_GV(sv));
2741 newop = newSVOP(OP_CONST, 0, MUTABLE_SV(sv));
2742 op_getmad(o,newop,'f');
2750 S_gen_constant_list(pTHX_ register OP *o)
2754 const I32 oldtmps_floor = PL_tmps_floor;
2757 if (PL_parser && PL_parser->error_count)
2758 return o; /* Don't attempt to run with errors */
2760 PL_op = curop = LINKLIST(o);
2763 Perl_pp_pushmark(aTHX);
2766 assert (!(curop->op_flags & OPf_SPECIAL));
2767 assert(curop->op_type == OP_RANGE);
2768 Perl_pp_anonlist(aTHX);
2769 PL_tmps_floor = oldtmps_floor;
2771 o->op_type = OP_RV2AV;
2772 o->op_ppaddr = PL_ppaddr[OP_RV2AV];
2773 o->op_flags &= ~OPf_REF; /* treat \(1..2) like an ordinary list */
2774 o->op_flags |= OPf_PARENS; /* and flatten \(1..2,3) */
2775 o->op_opt = 0; /* needs to be revisited in rpeep() */
2776 curop = ((UNOP*)o)->op_first;
2777 ((UNOP*)o)->op_first = newSVOP(OP_CONST, 0, SvREFCNT_inc_NN(*PL_stack_sp--));
2779 op_getmad(curop,o,'O');
2788 Perl_convert(pTHX_ I32 type, I32 flags, OP *o)
2791 if (!o || o->op_type != OP_LIST)
2792 o = newLISTOP(OP_LIST, 0, o, NULL);
2794 o->op_flags &= ~OPf_WANT;
2796 if (!(PL_opargs[type] & OA_MARK))
2797 op_null(cLISTOPo->op_first);
2799 o->op_type = (OPCODE)type;
2800 o->op_ppaddr = PL_ppaddr[type];
2801 o->op_flags |= flags;
2803 o = CHECKOP(type, o);
2804 if (o->op_type != (unsigned)type)
2807 return fold_constants(o);
2811 =head1 Optree Manipulation Functions
2814 /* List constructors */
2817 =for apidoc Am|OP *|op_append_elem|I32 optype|OP *first|OP *last
2819 Append an item to the list of ops contained directly within a list-type
2820 op, returning the lengthened list. I<first> is the list-type op,
2821 and I<last> is the op to append to the list. I<optype> specifies the
2822 intended opcode for the list. If I<first> is not already a list of the
2823 right type, it will be upgraded into one. If either I<first> or I<last>
2824 is null, the other is returned unchanged.
2830 Perl_op_append_elem(pTHX_ I32 type, OP *first, OP *last)
2838 if (first->op_type != (unsigned)type
2839 || (type == OP_LIST && (first->op_flags & OPf_PARENS)))
2841 return newLISTOP(type, 0, first, last);
2844 if (first->op_flags & OPf_KIDS)
2845 ((LISTOP*)first)->op_last->op_sibling = last;
2847 first->op_flags |= OPf_KIDS;
2848 ((LISTOP*)first)->op_first = last;
2850 ((LISTOP*)first)->op_last = last;
2855 =for apidoc Am|OP *|op_append_list|I32 optype|OP *first|OP *last
2857 Concatenate the lists of ops contained directly within two list-type ops,
2858 returning the combined list. I<first> and I<last> are the list-type ops
2859 to concatenate. I<optype> specifies the intended opcode for the list.
2860 If either I<first> or I<last> is not already a list of the right type,
2861 it will be upgraded into one. If either I<first> or I<last> is null,
2862 the other is returned unchanged.
2868 Perl_op_append_list(pTHX_ I32 type, OP *first, OP *last)
2876 if (first->op_type != (unsigned)type)
2877 return op_prepend_elem(type, first, last);
2879 if (last->op_type != (unsigned)type)
2880 return op_append_elem(type, first, last);
2882 ((LISTOP*)first)->op_last->op_sibling = ((LISTOP*)last)->op_first;
2883 ((LISTOP*)first)->op_last = ((LISTOP*)last)->op_last;
2884 first->op_flags |= (last->op_flags & OPf_KIDS);
2887 if (((LISTOP*)last)->op_first && first->op_madprop) {
2888 MADPROP *mp = ((LISTOP*)last)->op_first->op_madprop;
2890 while (mp->mad_next)
2892 mp->mad_next = first->op_madprop;
2895 ((LISTOP*)last)->op_first->op_madprop = first->op_madprop;
2898 first->op_madprop = last->op_madprop;
2899 last->op_madprop = 0;
2902 S_op_destroy(aTHX_ last);
2908 =for apidoc Am|OP *|op_prepend_elem|I32 optype|OP *first|OP *last
2910 Prepend an item to the list of ops contained directly within a list-type
2911 op, returning the lengthened list. I<first> is the op to prepend to the
2912 list, and I<last> is the list-type op. I<optype> specifies the intended
2913 opcode for the list. If I<last> is not already a list of the right type,
2914 it will be upgraded into one. If either I<first> or I<last> is null,
2915 the other is returned unchanged.
2921 Perl_op_prepend_elem(pTHX_ I32 type, OP *first, OP *last)
2929 if (last->op_type == (unsigned)type) {
2930 if (type == OP_LIST) { /* already a PUSHMARK there */
2931 first->op_sibling = ((LISTOP*)last)->op_first->op_sibling;
2932 ((LISTOP*)last)->op_first->op_sibling = first;
2933 if (!(first->op_flags & OPf_PARENS))
2934 last->op_flags &= ~OPf_PARENS;
2937 if (!(last->op_flags & OPf_KIDS)) {
2938 ((LISTOP*)last)->op_last = first;
2939 last->op_flags |= OPf_KIDS;
2941 first->op_sibling = ((LISTOP*)last)->op_first;
2942 ((LISTOP*)last)->op_first = first;
2944 last->op_flags |= OPf_KIDS;
2948 return newLISTOP(type, 0, first, last);
2956 Perl_newTOKEN(pTHX_ I32 optype, YYSTYPE lval, MADPROP* madprop)
2959 Newxz(tk, 1, TOKEN);
2960 tk->tk_type = (OPCODE)optype;
2961 tk->tk_type = 12345;
2963 tk->tk_mad = madprop;
2968 Perl_token_free(pTHX_ TOKEN* tk)
2970 PERL_ARGS_ASSERT_TOKEN_FREE;
2972 if (tk->tk_type != 12345)
2974 mad_free(tk->tk_mad);
2979 Perl_token_getmad(pTHX_ TOKEN* tk, OP* o, char slot)
2984 PERL_ARGS_ASSERT_TOKEN_GETMAD;
2986 if (tk->tk_type != 12345) {
2987 Perl_warner(aTHX_ packWARN(WARN_MISC),
2988 "Invalid TOKEN object ignored");
2995 /* faked up qw list? */
2997 tm->mad_type == MAD_SV &&
2998 SvPVX((SV *)tm->mad_val)[0] == 'q')
3005 /* pretend constant fold didn't happen? */
3006 if (mp->mad_key == 'f' &&
3007 (o->op_type == OP_CONST ||
3008 o->op_type == OP_GV) )
3010 token_getmad(tk,(OP*)mp->mad_val,slot);
3024 if (mp->mad_key == 'X')
3025 mp->mad_key = slot; /* just change the first one */
3035 Perl_op_getmad_weak(pTHX_ OP* from, OP* o, char slot)
3044 /* pretend constant fold didn't happen? */
3045 if (mp->mad_key == 'f' &&
3046 (o->op_type == OP_CONST ||
3047 o->op_type == OP_GV) )
3049 op_getmad(from,(OP*)mp->mad_val,slot);
3056 mp->mad_next = newMADPROP(slot,MAD_OP,from,0);
3059 o->op_madprop = newMADPROP(slot,MAD_OP,from,0);
3065 Perl_op_getmad(pTHX_ OP* from, OP* o, char slot)
3074 /* pretend constant fold didn't happen? */
3075 if (mp->mad_key == 'f' &&
3076 (o->op_type == OP_CONST ||
3077 o->op_type == OP_GV) )
3079 op_getmad(from,(OP*)mp->mad_val,slot);
3086 mp->mad_next = newMADPROP(slot,MAD_OP,from,1);
3089 o->op_madprop = newMADPROP(slot,MAD_OP,from,1);
3093 PerlIO_printf(PerlIO_stderr(),
3094 "DESTROYING op = %0"UVxf"\n", PTR2UV(from));
3100 Perl_prepend_madprops(pTHX_ MADPROP* mp, OP* o, char slot)
3118 Perl_append_madprops(pTHX_ MADPROP* tm, OP* o, char slot)
3122 addmad(tm, &(o->op_madprop), slot);
3126 Perl_addmad(pTHX_ MADPROP* tm, MADPROP** root, char slot)
3147 Perl_newMADsv(pTHX_ char key, SV* sv)
3149 PERL_ARGS_ASSERT_NEWMADSV;
3151 return newMADPROP(key, MAD_SV, sv, 0);
3155 Perl_newMADPROP(pTHX_ char key, char type, void* val, I32 vlen)
3157 MADPROP *const mp = (MADPROP *) PerlMemShared_malloc(sizeof(MADPROP));
3160 mp->mad_vlen = vlen;
3161 mp->mad_type = type;
3163 /* PerlIO_printf(PerlIO_stderr(), "NEW mp = %0x\n", mp); */
3168 Perl_mad_free(pTHX_ MADPROP* mp)
3170 /* PerlIO_printf(PerlIO_stderr(), "FREE mp = %0x\n", mp); */
3174 mad_free(mp->mad_next);
3175 /* if (PL_parser && PL_parser->lex_state != LEX_NOTPARSING && mp->mad_vlen)
3176 PerlIO_printf(PerlIO_stderr(), "DESTROYING '%c'=<%s>\n", mp->mad_key & 255, mp->mad_val); */
3177 switch (mp->mad_type) {
3181 Safefree((char*)mp->mad_val);
3184 if (mp->mad_vlen) /* vlen holds "strong/weak" boolean */
3185 op_free((OP*)mp->mad_val);
3188 sv_free(MUTABLE_SV(mp->mad_val));
3191 PerlIO_printf(PerlIO_stderr(), "Unrecognized mad\n");
3194 PerlMemShared_free(mp);
3200 =head1 Optree construction
3202 =for apidoc Am|OP *|newNULLLIST
3204 Constructs, checks, and returns a new C<stub> op, which represents an
3205 empty list expression.
3211 Perl_newNULLLIST(pTHX)
3213 return newOP(OP_STUB, 0);
3217 S_force_list(pTHX_ OP *o)
3219 if (!o || o->op_type != OP_LIST)
3220 o = newLISTOP(OP_LIST, 0, o, NULL);
3226 =for apidoc Am|OP *|newLISTOP|I32 type|I32 flags|OP *first|OP *last
3228 Constructs, checks, and returns an op of any list type. I<type> is
3229 the opcode. I<flags> gives the eight bits of C<op_flags>, except that
3230 C<OPf_KIDS> will be set automatically if required. I<first> and I<last>
3231 supply up to two ops to be direct children of the list op; they are
3232 consumed by this function and become part of the constructed op tree.
3238 Perl_newLISTOP(pTHX_ I32 type, I32 flags, OP *first, OP *last)
3243 assert((PL_opargs[type] & OA_CLASS_MASK) == OA_LISTOP);
3245 NewOp(1101, listop, 1, LISTOP);
3247 listop->op_type = (OPCODE)type;
3248 listop->op_ppaddr = PL_ppaddr[type];
3251 listop->op_flags = (U8)flags;
3255 else if (!first && last)
3258 first->op_sibling = last;
3259 listop->op_first = first;
3260 listop->op_last = last;
3261 if (type == OP_LIST) {
3262 OP* const pushop = newOP(OP_PUSHMARK, 0);
3263 pushop->op_sibling = first;
3264 listop->op_first = pushop;
3265 listop->op_flags |= OPf_KIDS;
3267 listop->op_last = pushop;
3270 return CHECKOP(type, listop);
3274 =for apidoc Am|OP *|newOP|I32 type|I32 flags
3276 Constructs, checks, and returns an op of any base type (any type that
3277 has no extra fields). I<type> is the opcode. I<flags> gives the
3278 eight bits of C<op_flags>, and, shifted up eight bits, the eight bits
3285 Perl_newOP(pTHX_ I32 type, I32 flags)
3290 assert((PL_opargs[type] & OA_CLASS_MASK) == OA_BASEOP
3291 || (PL_opargs[type] & OA_CLASS_MASK) == OA_BASEOP_OR_UNOP
3292 || (PL_opargs[type] & OA_CLASS_MASK) == OA_FILESTATOP
3293 || (PL_opargs[type] & OA_CLASS_MASK) == OA_LOOPEXOP);
3295 NewOp(1101, o, 1, OP);
3296 o->op_type = (OPCODE)type;
3297 o->op_ppaddr = PL_ppaddr[type];
3298 o->op_flags = (U8)flags;
3300 o->op_latefreed = 0;
3304 o->op_private = (U8)(0 | (flags >> 8));
3305 if (PL_opargs[type] & OA_RETSCALAR)
3307 if (PL_opargs[type] & OA_TARGET)
3308 o->op_targ = pad_alloc(type, SVs_PADTMP);
3309 return CHECKOP(type, o);
3313 =for apidoc Am|OP *|newUNOP|I32 type|I32 flags|OP *first
3315 Constructs, checks, and returns an op of any unary type. I<type> is
3316 the opcode. I<flags> gives the eight bits of C<op_flags>, except that
3317 C<OPf_KIDS> will be set automatically if required, and, shifted up eight
3318 bits, the eight bits of C<op_private>, except that the bit with value 1
3319 is automatically set. I<first> supplies an optional op to be the direct
3320 child of the unary op; it is consumed by this function and become part
3321 of the constructed op tree.
3327 Perl_newUNOP(pTHX_ I32 type, I32 flags, OP *first)
3332 assert((PL_opargs[type] & OA_CLASS_MASK) == OA_UNOP
3333 || (PL_opargs[type] & OA_CLASS_MASK) == OA_BASEOP_OR_UNOP
3334 || (PL_opargs[type] & OA_CLASS_MASK) == OA_FILESTATOP
3335 || (PL_opargs[type] & OA_CLASS_MASK) == OA_LOOPEXOP
3336 || type == OP_SASSIGN
3337 || type == OP_ENTERTRY
3338 || type == OP_NULL );
3341 first = newOP(OP_STUB, 0);
3342 if (PL_opargs[type] & OA_MARK)
3343 first = force_list(first);
3345 NewOp(1101, unop, 1, UNOP);
3346 unop->op_type = (OPCODE)type;
3347 unop->op_ppaddr = PL_ppaddr[type];
3348 unop->op_first = first;
3349 unop->op_flags = (U8)(flags | OPf_KIDS);
3350 unop->op_private = (U8)(1 | (flags >> 8));
3351 unop = (UNOP*) CHECKOP(type, unop);
3355 return fold_constants((OP *) unop);
3359 =for apidoc Am|OP *|newBINOP|I32 type|I32 flags|OP *first|OP *last
3361 Constructs, checks, and returns an op of any binary type. I<type>
3362 is the opcode. I<flags> gives the eight bits of C<op_flags>, except
3363 that C<OPf_KIDS> will be set automatically, and, shifted up eight bits,
3364 the eight bits of C<op_private>, except that the bit with value 1 or
3365 2 is automatically set as required. I<first> and I<last> supply up to
3366 two ops to be the direct children of the binary op; they are consumed
3367 by this function and become part of the constructed op tree.
3373 Perl_newBINOP(pTHX_ I32 type, I32 flags, OP *first, OP *last)
3378 assert((PL_opargs[type] & OA_CLASS_MASK) == OA_BINOP
3379 || type == OP_SASSIGN || type == OP_NULL );
3381 NewOp(1101, binop, 1, BINOP);
3384 first = newOP(OP_NULL, 0);
3386 binop->op_type = (OPCODE)type;
3387 binop->op_ppaddr = PL_ppaddr[type];
3388 binop->op_first = first;
3389 binop->op_flags = (U8)(flags | OPf_KIDS);
3392 binop->op_private = (U8)(1 | (flags >> 8));
3395 binop->op_private = (U8)(2 | (flags >> 8));
3396 first->op_sibling = last;
3399 binop = (BINOP*)CHECKOP(type, binop);
3400 if (binop->op_next || binop->op_type != (OPCODE)type)
3403 binop->op_last = binop->op_first->op_sibling;
3405 return fold_constants((OP *)binop);
3408 static int uvcompare(const void *a, const void *b)
3409 __attribute__nonnull__(1)
3410 __attribute__nonnull__(2)
3411 __attribute__pure__;
3412 static int uvcompare(const void *a, const void *b)
3414 if (*((const UV *)a) < (*(const UV *)b))
3416 if (*((const UV *)a) > (*(const UV *)b))
3418 if (*((const UV *)a+1) < (*(const UV *)b+1))
3420 if (*((const UV *)a+1) > (*(const UV *)b+1))
3426 S_pmtrans(pTHX_ OP *o, OP *expr, OP *repl)
3429 SV * const tstr = ((SVOP*)expr)->op_sv;
3432 (repl->op_type == OP_NULL)
3433 ? ((SVOP*)((LISTOP*)repl)->op_first)->op_sv :
3435 ((SVOP*)repl)->op_sv;
3438 const U8 *t = (U8*)SvPV_const(tstr, tlen);
3439 const U8 *r = (U8*)SvPV_const(rstr, rlen);
3443 register short *tbl;
3445 const I32 complement = o->op_private & OPpTRANS_COMPLEMENT;
3446 const I32 squash = o->op_private & OPpTRANS_SQUASH;
3447 I32 del = o->op_private & OPpTRANS_DELETE;
3450 PERL_ARGS_ASSERT_PMTRANS;
3452 PL_hints |= HINT_BLOCK_SCOPE;
3455 o->op_private |= OPpTRANS_FROM_UTF;
3458 o->op_private |= OPpTRANS_TO_UTF;
3460 if (o->op_private & (OPpTRANS_FROM_UTF|OPpTRANS_TO_UTF)) {
3461 SV* const listsv = newSVpvs("# comment\n");
3463 const U8* tend = t + tlen;
3464 const U8* rend = r + rlen;
3478 const I32 from_utf = o->op_private & OPpTRANS_FROM_UTF;
3479 const I32 to_utf = o->op_private & OPpTRANS_TO_UTF;
3482 const U32 flags = UTF8_ALLOW_DEFAULT;
3486 t = tsave = bytes_to_utf8(t, &len);
3489 if (!to_utf && rlen) {
3491 r = rsave = bytes_to_utf8(r, &len);
3495 /* There are several snags with this code on EBCDIC:
3496 1. 0xFF is a legal UTF-EBCDIC byte (there are no illegal bytes).
3497 2. scan_const() in toke.c has encoded chars in native encoding which makes
3498 ranges at least in EBCDIC 0..255 range the bottom odd.
3502 U8 tmpbuf[UTF8_MAXBYTES+1];
3505 Newx(cp, 2*tlen, UV);
3507 transv = newSVpvs("");
3509 cp[2*i] = utf8n_to_uvuni(t, tend-t, &ulen, flags);
3511 if (t < tend && NATIVE_TO_UTF(*t) == 0xff) {
3513 cp[2*i+1] = utf8n_to_uvuni(t, tend-t, &ulen, flags);
3517 cp[2*i+1] = cp[2*i];
3521 qsort(cp, i, 2*sizeof(UV), uvcompare);
3522 for (j = 0; j < i; j++) {
3524 diff = val - nextmin;
3526 t = uvuni_to_utf8(tmpbuf,nextmin);
3527 sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf);
3529 U8 range_mark = UTF_TO_NATIVE(0xff);
3530 t = uvuni_to_utf8(tmpbuf, val - 1);
3531 sv_catpvn(transv, (char *)&range_mark, 1);
3532 sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf);
3539 t = uvuni_to_utf8(tmpbuf,nextmin);
3540 sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf);
3542 U8 range_mark = UTF_TO_NATIVE(0xff);
3543 sv_catpvn(transv, (char *)&range_mark, 1);
3545 t = uvuni_to_utf8(tmpbuf, 0x7fffffff);
3546 sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf);
3547 t = (const U8*)SvPVX_const(transv);
3548 tlen = SvCUR(transv);
3552 else if (!rlen && !del) {
3553 r = t; rlen = tlen; rend = tend;
3556 if ((!rlen && !del) || t == r ||
3557 (tlen == rlen && memEQ((char *)t, (char *)r, tlen)))
3559 o->op_private |= OPpTRANS_IDENTICAL;
3563 while (t < tend || tfirst <= tlast) {
3564 /* see if we need more "t" chars */
3565 if (tfirst > tlast) {
3566 tfirst = (I32)utf8n_to_uvuni(t, tend - t, &ulen, flags);
3568 if (t < tend && NATIVE_TO_UTF(*t) == 0xff) { /* illegal utf8 val indicates range */
3570 tlast = (I32)utf8n_to_uvuni(t, tend - t, &ulen, flags);
3577 /* now see if we need more "r" chars */
3578 if (rfirst > rlast) {
3580 rfirst = (I32)utf8n_to_uvuni(r, rend - r, &ulen, flags);
3582 if (r < rend && NATIVE_TO_UTF(*r) == 0xff) { /* illegal utf8 val indicates range */
3584 rlast = (I32)utf8n_to_uvuni(r, rend - r, &ulen, flags);
3593 rfirst = rlast = 0xffffffff;
3597 /* now see which range will peter our first, if either. */
3598 tdiff = tlast - tfirst;
3599 rdiff = rlast - rfirst;
3606 if (rfirst == 0xffffffff) {
3607 diff = tdiff; /* oops, pretend rdiff is infinite */
3609 Perl_sv_catpvf(aTHX_ listsv, "%04lx\t%04lx\tXXXX\n",
3610 (long)tfirst, (long)tlast);
3612 Perl_sv_catpvf(aTHX_ listsv, "%04lx\t\tXXXX\n", (long)tfirst);
3616 Perl_sv_catpvf(aTHX_ listsv, "%04lx\t%04lx\t%04lx\n",
3617 (long)tfirst, (long)(tfirst + diff),
3620 Perl_sv_catpvf(aTHX_ listsv, "%04lx\t\t%04lx\n",
3621 (long)tfirst, (long)rfirst);
3623 if (rfirst + diff > max)
3624 max = rfirst + diff;
3626 grows = (tfirst < rfirst &&
3627 UNISKIP(tfirst) < UNISKIP(rfirst + diff));
3639 else if (max > 0xff)
3644 PerlMemShared_free(cPVOPo->op_pv);
3645 cPVOPo->op_pv = NULL;
3647 swash = MUTABLE_SV(swash_init("utf8", "", listsv, bits, none));
3649 cPADOPo->op_padix = pad_alloc(OP_TRANS, SVs_PADTMP);
3650 SvREFCNT_dec(PAD_SVl(cPADOPo->op_padix));
3651 PAD_SETSV(cPADOPo->op_padix, swash);
3653 SvREADONLY_on(swash);
3655 cSVOPo->op_sv = swash;
3657 SvREFCNT_dec(listsv);
3658 SvREFCNT_dec(transv);
3660 if (!del && havefinal && rlen)
3661 (void)hv_store(MUTABLE_HV(SvRV(swash)), "FINAL", 5,
3662 newSVuv((UV)final), 0);
3665 o->op_private |= OPpTRANS_GROWS;
3671 op_getmad(expr,o,'e');
3672 op_getmad(repl,o,'r');
3680 tbl = (short*)cPVOPo->op_pv;
3682 Zero(tbl, 256, short);
3683 for (i = 0; i < (I32)tlen; i++)
3685 for (i = 0, j = 0; i < 256; i++) {
3687 if (j >= (I32)rlen) {
3696 if (i < 128 && r[j] >= 128)
3706 o->op_private |= OPpTRANS_IDENTICAL;
3708 else if (j >= (I32)rlen)
3713 PerlMemShared_realloc(tbl,
3714 (0x101+rlen-j) * sizeof(short));
3715 cPVOPo->op_pv = (char*)tbl;
3717 tbl[0x100] = (short)(rlen - j);
3718 for (i=0; i < (I32)rlen - j; i++)
3719 tbl[0x101+i] = r[j+i];
3723 if (!rlen && !del) {
3726 o->op_private |= OPpTRANS_IDENTICAL;
3728 else if (!squash && rlen == tlen && memEQ((char*)t, (char*)r, tlen)) {
3729 o->op_private |= OPpTRANS_IDENTICAL;
3731 for (i = 0; i < 256; i++)
3733 for (i = 0, j = 0; i < (I32)tlen; i++,j++) {
3734 if (j >= (I32)rlen) {
3736 if (tbl[t[i]] == -1)
3742 if (tbl[t[i]] == -1) {
3743 if (t[i] < 128 && r[j] >= 128)
3750 if(del && rlen == tlen) {
3751 Perl_ck_warner(aTHX_ packWARN(WARN_MISC), "Useless use of /d modifier in transliteration operator");
3752 } else if(rlen > tlen) {
3753 Perl_ck_warner(aTHX_ packWARN(WARN_MISC), "Replacement list is longer than search list");
3757 o->op_private |= OPpTRANS_GROWS;
3759 op_getmad(expr,o,'e');
3760 op_getmad(repl,o,'r');
3770 =for apidoc Am|OP *|newPMOP|I32 type|I32 flags
3772 Constructs, checks, and returns an op of any pattern matching type.
3773 I<type> is the opcode. I<flags> gives the eight bits of C<op_flags>
3774 and, shifted up eight bits, the eight bits of C<op_private>.
3780 Perl_newPMOP(pTHX_ I32 type, I32 flags)
3785 assert((PL_opargs[type] & OA_CLASS_MASK) == OA_PMOP);
3787 NewOp(1101, pmop, 1, PMOP);
3788 pmop->op_type = (OPCODE)type;
3789 pmop->op_ppaddr = PL_ppaddr[type];
3790 pmop->op_flags = (U8)flags;
3791 pmop->op_private = (U8)(0 | (flags >> 8));
3793 if (PL_hints & HINT_RE_TAINT)
3794 pmop->op_pmflags |= PMf_RETAINT;
3795 if (PL_hints & HINT_LOCALE) {
3796 set_regex_charset(&(pmop->op_pmflags), REGEX_LOCALE_CHARSET);
3798 else if ((! (PL_hints & HINT_BYTES)) && (PL_hints & HINT_UNI_8_BIT)) {
3799 set_regex_charset(&(pmop->op_pmflags), REGEX_UNICODE_CHARSET);
3801 if (PL_hints & HINT_RE_FLAGS) {
3802 SV *reflags = Perl_refcounted_he_fetch_pvn(aTHX_
3803 PL_compiling.cop_hints_hash, STR_WITH_LEN("reflags"), 0, 0
3805 if (reflags && SvOK(reflags)) pmop->op_pmflags |= SvIV(reflags);
3806 reflags = Perl_refcounted_he_fetch_pvn(aTHX_
3807 PL_compiling.cop_hints_hash, STR_WITH_LEN("reflags_charset"), 0, 0
3809 if (reflags && SvOK(reflags)) {
3810 set_regex_charset(&(pmop->op_pmflags), (regex_charset)SvIV(reflags));
3816 assert(SvPOK(PL_regex_pad[0]));
3817 if (SvCUR(PL_regex_pad[0])) {
3818 /* Pop off the "packed" IV from the end. */
3819 SV *const repointer_list = PL_regex_pad[0];
3820 const char *p = SvEND(repointer_list) - sizeof(IV);
3821 const IV offset = *((IV*)p);
3823 assert(SvCUR(repointer_list) % sizeof(IV) == 0);
3825 SvEND_set(repointer_list, p);
3827 pmop->op_pmoffset = offset;
3828 /* This slot should be free, so assert this: */
3829 assert(PL_regex_pad[offset] == &PL_sv_undef);
3831 SV * const repointer = &PL_sv_undef;
3832 av_push(PL_regex_padav, repointer);
3833 pmop->op_pmoffset = av_len(PL_regex_padav);
3834 PL_regex_pad = AvARRAY(PL_regex_padav);
3838 return CHECKOP(type, pmop);
3841 /* Given some sort of match op o, and an expression expr containing a
3842 * pattern, either compile expr into a regex and attach it to o (if it's
3843 * constant), or convert expr into a runtime regcomp op sequence (if it's
3846 * isreg indicates that the pattern is part of a regex construct, eg
3847 * $x =~ /pattern/ or split /pattern/, as opposed to $x =~ $pattern or
3848 * split "pattern", which aren't. In the former case, expr will be a list
3849 * if the pattern contains more than one term (eg /a$b/) or if it contains
3850 * a replacement, ie s/// or tr///.
3854 Perl_pmruntime(pTHX_ OP *o, OP *expr, bool isreg)
3859 I32 repl_has_vars = 0;
3863 PERL_ARGS_ASSERT_PMRUNTIME;
3866 o->op_type == OP_SUBST
3867 || o->op_type == OP_TRANS || o->op_type == OP_TRANSR
3869 /* last element in list is the replacement; pop it */
3871 repl = cLISTOPx(expr)->op_last;
3872 kid = cLISTOPx(expr)->op_first;
3873 while (kid->op_sibling != repl)
3874 kid = kid->op_sibling;
3875 kid->op_sibling = NULL;
3876 cLISTOPx(expr)->op_last = kid;
3879 if (isreg && expr->op_type == OP_LIST &&
3880 cLISTOPx(expr)->op_first->op_sibling == cLISTOPx(expr)->op_last)
3882 /* convert single element list to element */
3883 OP* const oe = expr;
3884 expr = cLISTOPx(oe)->op_first->op_sibling;
3885 cLISTOPx(oe)->op_first->op_sibling = NULL;
3886 cLISTOPx(oe)->op_last = NULL;
3890 if (o->op_type == OP_TRANS || o->op_type == OP_TRANSR) {
3891 return pmtrans(o, expr, repl);
3894 reglist = isreg && expr->op_type == OP_LIST;
3898 PL_hints |= HINT_BLOCK_SCOPE;
3901 if (expr->op_type == OP_CONST) {
3902 SV *pat = ((SVOP*)expr)->op_sv;
3903 U32 pm_flags = pm->op_pmflags & RXf_PMf_COMPILETIME;
3905 if (o->op_flags & OPf_SPECIAL)
3906 pm_flags |= RXf_SPLIT;
3909 assert (SvUTF8(pat));
3910 } else if (SvUTF8(pat)) {
3911 /* Not doing UTF-8, despite what the SV says. Is this only if we're
3912 trapped in use 'bytes'? */
3913 /* Make a copy of the octet sequence, but without the flag on, as
3914 the compiler now honours the SvUTF8 flag on pat. */
3916 const char *const p = SvPV(pat, len);
3917 pat = newSVpvn_flags(p, len, SVs_TEMP);
3920 PM_SETRE(pm, CALLREGCOMP(pat, pm_flags));
3923 op_getmad(expr,(OP*)pm,'e');
3929 if (pm->op_pmflags & PMf_KEEP || !(PL_hints & HINT_RE_EVAL))
3930 expr = newUNOP((!(PL_hints & HINT_RE_EVAL)
3932 : OP_REGCMAYBE),0,expr);
3934 NewOp(1101, rcop, 1, LOGOP);
3935 rcop->op_type = OP_REGCOMP;
3936 rcop->op_ppaddr = PL_ppaddr[OP_REGCOMP];
3937 rcop->op_first = scalar(expr);
3938 rcop->op_flags |= OPf_KIDS
3939 | ((PL_hints & HINT_RE_EVAL) ? OPf_SPECIAL : 0)
3940 | (reglist ? OPf_STACKED : 0);
3941 rcop->op_private = 1;
3944 rcop->op_targ = pad_alloc(rcop->op_type, SVs_PADTMP);
3946 /* /$x/ may cause an eval, since $x might be qr/(?{..})/ */
3947 if (PL_hints & HINT_RE_EVAL) PL_cv_has_eval = 1;
3949 /* establish postfix order */
3950 if (pm->op_pmflags & PMf_KEEP || !(PL_hints & HINT_RE_EVAL)) {
3952 rcop->op_next = expr;
3953 ((UNOP*)expr)->op_first->op_next = (OP*)rcop;
3956 rcop->op_next = LINKLIST(expr);
3957 expr->op_next = (OP*)rcop;
3960 op_prepend_elem(o->op_type, scalar((OP*)rcop), o);
3965 if (pm->op_pmflags & PMf_EVAL) {
3967 if (CopLINE(PL_curcop) < (line_t)PL_parser->multi_end)
3968 CopLINE_set(PL_curcop, (line_t)PL_parser->multi_end);
3970 else if (repl->op_type == OP_CONST)
3974 for (curop = LINKLIST(repl); curop!=repl; curop = LINKLIST(curop)) {
3975 if (curop->op_type == OP_SCOPE
3976 || curop->op_type == OP_LEAVE
3977 || (PL_opargs[curop->op_type] & OA_DANGEROUS)) {
3978 if (curop->op_type == OP_GV) {
3979 GV * const gv = cGVOPx_gv(curop);
3981 if (strchr("&`'123456789+-\016\022", *GvENAME(gv)))
3984 else if (curop->op_type == OP_RV2CV)
3986 else if (curop->op_type == OP_RV2SV ||
3987 curop->op_type == OP_RV2AV ||
3988 curop->op_type == OP_RV2HV ||
3989 curop->op_type == OP_RV2GV) {
3990 if (lastop && lastop->op_type != OP_GV) /*funny deref?*/
3993 else if (curop->op_type == OP_PADSV ||
3994 curop->op_type == OP_PADAV ||
3995 curop->op_type == OP_PADHV ||
3996 curop->op_type == OP_PADANY)
4000 else if (curop->op_type == OP_PUSHRE)
4001 NOOP; /* Okay here, dangerous in newASSIGNOP */
4011 || RX_EXTFLAGS(PM_GETRE(pm)) & RXf_EVAL_SEEN)))
4013 pm->op_pmflags |= PMf_CONST; /* const for long enough */
4014 op_prepend_elem(o->op_type, scalar(repl), o);
4017 if (curop == repl && !PM_GETRE(pm)) { /* Has variables. */
4018 pm->op_pmflags |= PMf_MAYBE_CONST;
4020 NewOp(1101, rcop, 1, LOGOP);
4021 rcop->op_type = OP_SUBSTCONT;
4022 rcop->op_ppaddr = PL_ppaddr[OP_SUBSTCONT];
4023 rcop->op_first = scalar(repl);
4024 rcop->op_flags |= OPf_KIDS;
4025 rcop->op_private = 1;
4028 /* establish postfix order */
4029 rcop->op_next = LINKLIST(repl);
4030 repl->op_next = (OP*)rcop;
4032 pm->op_pmreplrootu.op_pmreplroot = scalar((OP*)rcop);
4033 assert(!(pm->op_pmflags & PMf_ONCE));
4034 pm->op_pmstashstartu.op_pmreplstart = LINKLIST(rcop);
4043 =for apidoc Am|OP *|newSVOP|I32 type|I32 flags|SV *sv
4045 Constructs, checks, and returns an op of any type that involves an
4046 embedded SV. I<type> is the opcode. I<flags> gives the eight bits
4047 of C<op_flags>. I<sv> gives the SV to embed in the op; this function
4048 takes ownership of one reference to it.
4054 Perl_newSVOP(pTHX_ I32 type, I32 flags, SV *sv)
4059 PERL_ARGS_ASSERT_NEWSVOP;
4061 assert((PL_opargs[type] & OA_CLASS_MASK) == OA_SVOP
4062 || (PL_opargs[type] & OA_CLASS_MASK) == OA_PVOP_OR_SVOP
4063 || (PL_opargs[type] & OA_CLASS_MASK) == OA_FILESTATOP);
4065 NewOp(1101, svop, 1, SVOP);
4066 svop->op_type = (OPCODE)type;
4067 svop->op_ppaddr = PL_ppaddr[type];
4069 svop->op_next = (OP*)svop;
4070 svop->op_flags = (U8)flags;
4071 if (PL_opargs[type] & OA_RETSCALAR)
4073 if (PL_opargs[type] & OA_TARGET)
4074 svop->op_targ = pad_alloc(type, SVs_PADTMP);
4075 return CHECKOP(type, svop);
4081 =for apidoc Am|OP *|newPADOP|I32 type|I32 flags|SV *sv
4083 Constructs, checks, and returns an op of any type that involves a
4084 reference to a pad element. I<type> is the opcode. I<flags> gives the
4085 eight bits of C<op_flags>. A pad slot is automatically allocated, and
4086 is populated with I<sv>; this function takes ownership of one reference
4089 This function only exists if Perl has been compiled to use ithreads.
4095 Perl_newPADOP(pTHX_ I32 type, I32 flags, SV *sv)
4100 PERL_ARGS_ASSERT_NEWPADOP;
4102 assert((PL_opargs[type] & OA_CLASS_MASK) == OA_SVOP
4103 || (PL_opargs[type] & OA_CLASS_MASK) == OA_PVOP_OR_SVOP
4104 || (PL_opargs[type] & OA_CLASS_MASK) == OA_FILESTATOP);
4106 NewOp(1101, padop, 1, PADOP);
4107 padop->op_type = (OPCODE)type;
4108 padop->op_ppaddr = PL_ppaddr[type];
4109 padop->op_padix = pad_alloc(type, SVs_PADTMP);
4110 SvREFCNT_dec(PAD_SVl(padop->op_padix));
4111 PAD_SETSV(padop->op_padix, sv);
4114 padop->op_next = (OP*)padop;
4115 padop->op_flags = (U8)flags;
4116 if (PL_opargs[type] & OA_RETSCALAR)
4118 if (PL_opargs[type] & OA_TARGET)
4119 padop->op_targ = pad_alloc(type, SVs_PADTMP);
4120 return CHECKOP(type, padop);
4123 #endif /* !USE_ITHREADS */
4126 =for apidoc Am|OP *|newGVOP|I32 type|I32 flags|GV *gv
4128 Constructs, checks, and returns an op of any type that involves an
4129 embedded reference to a GV. I<type> is the opcode. I<flags> gives the
4130 eight bits of C<op_flags>. I<gv> identifies the GV that the op should
4131 reference; calling this function does not transfer ownership of any
4138 Perl_newGVOP(pTHX_ I32 type, I32 flags, GV *gv)
4142 PERL_ARGS_ASSERT_NEWGVOP;
4146 return newPADOP(type, flags, SvREFCNT_inc_simple_NN(gv));
4148 return newSVOP(type, flags, SvREFCNT_inc_simple_NN(gv));
4153 =for apidoc Am|OP *|newPVOP|I32 type|I32 flags|char *pv
4155 Constructs, checks, and returns an op of any type that involves an
4156 embedded C-level pointer (PV). I<type> is the opcode. I<flags> gives
4157 the eight bits of C<op_flags>. I<pv> supplies the C-level pointer, which
4158 must have been allocated using L</PerlMemShared_malloc>; the memory will
4159 be freed when the op is destroyed.
4165 Perl_newPVOP(pTHX_ I32 type, I32 flags, char *pv)
4170 assert((PL_opargs[type] & OA_CLASS_MASK) == OA_PVOP_OR_SVOP
4171 || (PL_opargs[type] & OA_CLASS_MASK) == OA_LOOPEXOP);
4173 NewOp(1101, pvop, 1, PVOP);
4174 pvop->op_type = (OPCODE)type;
4175 pvop->op_ppaddr = PL_ppaddr[type];
4177 pvop->op_next = (OP*)pvop;
4178 pvop->op_flags = (U8)flags;
4179 if (PL_opargs[type] & OA_RETSCALAR)
4181 if (PL_opargs[type] & OA_TARGET)
4182 pvop->op_targ = pad_alloc(type, SVs_PADTMP);
4183 return CHECKOP(type, pvop);
4191 Perl_package(pTHX_ OP *o)
4194 SV *const sv = cSVOPo->op_sv;
4199 PERL_ARGS_ASSERT_PACKAGE;
4201 save_hptr(&PL_curstash);
4202 save_item(PL_curstname);
4204 PL_curstash = gv_stashsv(sv, GV_ADD);
4206 sv_setsv(PL_curstname, sv);
4208 PL_hints |= HINT_BLOCK_SCOPE;
4209 PL_parser->copline = NOLINE;
4210 PL_parser->expect = XSTATE;
4215 if (!PL_madskills) {
4220 pegop = newOP(OP_NULL,0);
4221 op_getmad(o,pegop,'P');
4227 Perl_package_version( pTHX_ OP *v )
4230 U32 savehints = PL_hints;
4231 PERL_ARGS_ASSERT_PACKAGE_VERSION;
4232 PL_hints &= ~HINT_STRICT_VARS;
4233 sv_setsv( GvSV(gv_fetchpvs("VERSION", GV_ADDMULTI, SVt_PV)), cSVOPx(v)->op_sv );
4234 PL_hints = savehints;
4243 Perl_utilize(pTHX_ int aver, I32 floor, OP *version, OP *idop, OP *arg)
4250 OP *pegop = newOP(OP_NULL,0);
4252 SV *use_version = NULL;
4254 PERL_ARGS_ASSERT_UTILIZE;
4256 if (idop->op_type != OP_CONST)
4257 Perl_croak(aTHX_ "Module name must be constant");
4260 op_getmad(idop,pegop,'U');
4265 SV * const vesv = ((SVOP*)version)->op_sv;
4268 op_getmad(version,pegop,'V');
4269 if (!arg && !SvNIOKp(vesv)) {
4276 if (version->op_type != OP_CONST || !SvNIOKp(vesv))
4277 Perl_croak(aTHX_ "Version number must be a constant number");
4279 /* Make copy of idop so we don't free it twice */
4280 pack = newSVOP(OP_CONST, 0, newSVsv(((SVOP*)idop)->op_sv));
4282 /* Fake up a method call to VERSION */
4283 meth = newSVpvs_share("VERSION");
4284 veop = convert(OP_ENTERSUB, OPf_STACKED|OPf_SPECIAL,
4285 op_append_elem(OP_LIST,
4286 op_prepend_elem(OP_LIST, pack, list(version)),
4287 newSVOP(OP_METHOD_NAMED, 0, meth)));
4291 /* Fake up an import/unimport */
4292 if (arg && arg->op_type == OP_STUB) {
4294 op_getmad(arg,pegop,'S');
4295 imop = arg; /* no import on explicit () */
4297 else if (SvNIOKp(((SVOP*)idop)->op_sv)) {
4298 imop = NULL; /* use 5.0; */
4300 use_version = ((SVOP*)idop)->op_sv;
4302 idop->op_private |= OPpCONST_NOVER;
4308 op_getmad(arg,pegop,'A');
4310 /* Make copy of idop so we don't free it twice */
4311 pack = newSVOP(OP_CONST, 0, newSVsv(((SVOP*)idop)->op_sv));
4313 /* Fake up a method call to import/unimport */
4315 ? newSVpvs_share("import") : newSVpvs_share("unimport");
4316 imop = convert(OP_ENTERSUB, OPf_STACKED|OPf_SPECIAL,
4317 op_append_elem(OP_LIST,
4318 op_prepend_elem(OP_LIST, pack, list(arg)),
4319 newSVOP(OP_METHOD_NAMED, 0, meth)));
4322 /* Fake up the BEGIN {}, which does its thing immediately. */
4324 newSVOP(OP_CONST, 0, newSVpvs_share("BEGIN")),
4327 op_append_elem(OP_LINESEQ,
4328 op_append_elem(OP_LINESEQ,
4329 newSTATEOP(0, NULL, newUNOP(OP_REQUIRE, 0, idop)),
4330 newSTATEOP(0, NULL, veop)),
4331 newSTATEOP(0, NULL, imop) ));
4334 /* If we request a version >= 5.9.5, load feature.pm with the
4335 * feature bundle that corresponds to the required version. */
4336 use_version = sv_2mortal(new_version(use_version));
4338 if (vcmp(use_version,
4339 sv_2mortal(upg_version(newSVnv(5.009005), FALSE))) >= 0) {
4340 SV *const importsv = vnormal(use_version);
4341 *SvPVX_mutable(importsv) = ':';
4342 ENTER_with_name("load_feature");
4343 Perl_load_module(aTHX_ 0, newSVpvs("feature"), NULL, importsv, NULL);
4344 LEAVE_with_name("load_feature");
4346 /* If a version >= 5.11.0 is requested, strictures are on by default! */
4347 if (vcmp(use_version,
4348 sv_2mortal(upg_version(newSVnv(5.011000), FALSE))) >= 0) {
4349 PL_hints |= (HINT_STRICT_REFS | HINT_STRICT_SUBS | HINT_STRICT_VARS);
4353 /* The "did you use incorrect case?" warning used to be here.
4354 * The problem is that on case-insensitive filesystems one
4355 * might get false positives for "use" (and "require"):
4356 * "use Strict" or "require CARP" will work. This causes
4357 * portability problems for the script: in case-strict
4358 * filesystems the script will stop working.
4360 * The "incorrect case" warning checked whether "use Foo"
4361 * imported "Foo" to your namespace, but that is wrong, too:
4362 * there is no requirement nor promise in the language that
4363 * a Foo.pm should or would contain anything in package "Foo".
4365 * There is very little Configure-wise that can be done, either:
4366 * the case-sensitivity of the build filesystem of Perl does not
4367 * help in guessing the case-sensitivity of the runtime environment.
4370 PL_hints |= HINT_BLOCK_SCOPE;
4371 PL_parser->copline = NOLINE;
4372 PL_parser->expect = XSTATE;
4373 PL_cop_seqmax++; /* Purely for B::*'s benefit */
4374 if (PL_cop_seqmax == PERL_PADSEQ_INTRO) /* not a legal value */
4378 if (!PL_madskills) {
4379 /* FIXME - don't allocate pegop if !PL_madskills */
4388 =head1 Embedding Functions
4390 =for apidoc load_module
4392 Loads the module whose name is pointed to by the string part of name.
4393 Note that the actual module name, not its filename, should be given.
4394 Eg, "Foo::Bar" instead of "Foo/Bar.pm". flags can be any of
4395 PERL_LOADMOD_DENY, PERL_LOADMOD_NOIMPORT, or PERL_LOADMOD_IMPORT_OPS
4396 (or 0 for no flags). ver, if specified, provides version semantics
4397 similar to C<use Foo::Bar VERSION>. The optional trailing SV*
4398 arguments can be used to specify arguments to the module's import()
4399 method, similar to C<use Foo::Bar VERSION LIST>. They must be
4400 terminated with a final NULL pointer. Note that this list can only
4401 be omitted when the PERL_LOADMOD_NOIMPORT flag has been used.
4402 Otherwise at least a single NULL pointer to designate the default
4403 import list is required.
4408 Perl_load_module(pTHX_ U32 flags, SV *name, SV *ver, ...)
4412 PERL_ARGS_ASSERT_LOAD_MODULE;
4414 va_start(args, ver);
4415 vload_module(flags, name, ver, &args);
4419 #ifdef PERL_IMPLICIT_CONTEXT
4421 Perl_load_module_nocontext(U32 flags, SV *name, SV *ver, ...)
4425 PERL_ARGS_ASSERT_LOAD_MODULE_NOCONTEXT;
4426 va_start(args, ver);
4427 vload_module(flags, name, ver, &args);
4433 Perl_vload_module(pTHX_ U32 flags, SV *name, SV *ver, va_list *args)
4437 OP * const modname = newSVOP(OP_CONST, 0, name);
4439 PERL_ARGS_ASSERT_VLOAD_MODULE;
4441 modname->op_private |= OPpCONST_BARE;
4443 veop = newSVOP(OP_CONST, 0, ver);
4447 if (flags & PERL_LOADMOD_NOIMPORT) {
4448 imop = sawparens(newNULLLIST());
4450 else if (flags & PERL_LOADMOD_IMPORT_OPS) {
4451 imop = va_arg(*args, OP*);
4456 sv = va_arg(*args, SV*);
4458 imop = op_append_elem(OP_LIST, imop, newSVOP(OP_CONST, 0, sv));
4459 sv = va_arg(*args, SV*);
4463 /* utilize() fakes up a BEGIN { require ..; import ... }, so make sure
4464 * that it has a PL_parser to play with while doing that, and also
4465 * that it doesn't mess with any existing parser, by creating a tmp
4466 * new parser with lex_start(). This won't actually be used for much,
4467 * since pp_require() will create another parser for the real work. */
4470 SAVEVPTR(PL_curcop);
4471 lex_start(NULL, NULL, LEX_START_SAME_FILTER);
4472 utilize(!(flags & PERL_LOADMOD_DENY), start_subparse(FALSE, 0),
4473 veop, modname, imop);
4478 Perl_dofile(pTHX_ OP *term, I32 force_builtin)
4484 PERL_ARGS_ASSERT_DOFILE;
4486 if (!force_builtin) {
4487 gv = gv_fetchpvs("do", GV_NOTQUAL, SVt_PVCV);
4488 if (!(gv && GvCVu(gv) && GvIMPORTED_CV(gv))) {
4489 GV * const * const gvp = (GV**)hv_fetchs(PL_globalstash, "do", FALSE);
4490 gv = gvp ? *gvp : NULL;
4494 if (gv && GvCVu(gv) && GvIMPORTED_CV(gv)) {
4495 doop = ck_subr(newUNOP(OP_ENTERSUB, OPf_STACKED,
4496 op_append_elem(OP_LIST, term,
4497 scalar(newUNOP(OP_RV2CV, 0,
4498 newGVOP(OP_GV, 0, gv))))));
4501 doop = newUNOP(OP_DOFILE, 0, scalar(term));
4507 =head1 Optree construction
4509 =for apidoc Am|OP *|newSLICEOP|I32 flags|OP *subscript|OP *listval
4511 Constructs, checks, and returns an C<lslice> (list slice) op. I<flags>
4512 gives the eight bits of C<op_flags>, except that C<OPf_KIDS> will
4513 be set automatically, and, shifted up eight bits, the eight bits of
4514 C<op_private>, except that the bit with value 1 or 2 is automatically
4515 set as required. I<listval> and I<subscript> supply the parameters of
4516 the slice; they are consumed by this function and become part of the
4517 constructed op tree.
4523 Perl_newSLICEOP(pTHX_ I32 flags, OP *subscript, OP *listval)
4525 return newBINOP(OP_LSLICE, flags,
4526 list(force_list(subscript)),
4527 list(force_list(listval)) );
4531 S_is_list_assignment(pTHX_ register const OP *o)
4539 if ((o->op_type == OP_NULL) && (o->op_flags & OPf_KIDS))
4540 o = cUNOPo->op_first;
4542 flags = o->op_flags;
4544 if (type == OP_COND_EXPR) {
4545 const I32 t = is_list_assignment(cLOGOPo->op_first->op_sibling);
4546 const I32 f = is_list_assignment(cLOGOPo->op_first->op_sibling->op_sibling);
4551 yyerror("Assignment to both a list and a scalar");
4555 if (type == OP_LIST &&
4556 (flags & OPf_WANT) == OPf_WANT_SCALAR &&
4557 o->op_private & OPpLVAL_INTRO)
4560 if (type == OP_LIST || flags & OPf_PARENS ||
4561 type == OP_RV2AV || type == OP_RV2HV ||
4562 type == OP_ASLICE || type == OP_HSLICE)
4565 if (type == OP_PADAV || type == OP_PADHV)
4568 if (type == OP_RV2SV)
4575 =for apidoc Am|OP *|newASSIGNOP|I32 flags|OP *left|I32 optype|OP *right
4577 Constructs, checks, and returns an assignment op. I<left> and I<right>
4578 supply the parameters of the assignment; they are consumed by this
4579 function and become part of the constructed op tree.
4581 If I<optype> is C<OP_ANDASSIGN>, C<OP_ORASSIGN>, or C<OP_DORASSIGN>, then
4582 a suitable conditional optree is constructed. If I<optype> is the opcode
4583 of a binary operator, such as C<OP_BIT_OR>, then an op is constructed that
4584 performs the binary operation and assigns the result to the left argument.
4585 Either way, if I<optype> is non-zero then I<flags> has no effect.
4587 If I<optype> is zero, then a plain scalar or list assignment is
4588 constructed. Which type of assignment it is is automatically determined.
4589 I<flags> gives the eight bits of C<op_flags>, except that C<OPf_KIDS>
4590 will be set automatically, and, shifted up eight bits, the eight bits
4591 of C<op_private>, except that the bit with value 1 or 2 is automatically
4598 Perl_newASSIGNOP(pTHX_ I32 flags, OP *left, I32 optype, OP *right)
4604 if (optype == OP_ANDASSIGN || optype == OP_ORASSIGN || optype == OP_DORASSIGN) {
4605 return newLOGOP(optype, 0,
4606 op_lvalue(scalar(left), optype),
4607 newUNOP(OP_SASSIGN, 0, scalar(right)));
4610 return newBINOP(optype, OPf_STACKED,
4611 op_lvalue(scalar(left), optype), scalar(right));
4615 if (is_list_assignment(left)) {
4616 static const char no_list_state[] = "Initialization of state variables"
4617 " in list context currently forbidden";
4619 bool maybe_common_vars = TRUE;
4622 /* Grandfathering $[ assignment here. Bletch.*/
4623 /* Only simple assignments like C<< ($[) = 1 >> are allowed */
4624 PL_eval_start = (left->op_type == OP_CONST) ? right : NULL;
4625 left = op_lvalue(left, OP_AASSIGN);
4628 else if (left->op_type == OP_CONST) {
4629 deprecate("assignment to $[");
4631 /* Result of assignment is always 1 (or we'd be dead already) */
4632 return newSVOP(OP_CONST, 0, newSViv(1));
4634 curop = list(force_list(left));
4635 o = newBINOP(OP_AASSIGN, flags, list(force_list(right)), curop);
4636 o->op_private = (U8)(0 | (flags >> 8));
4638 if ((left->op_type == OP_LIST
4639 || (left->op_type == OP_NULL && left->op_targ == OP_LIST)))
4641 OP* lop = ((LISTOP*)left)->op_first;
4642 maybe_common_vars = FALSE;
4644 if (lop->op_type == OP_PADSV ||
4645 lop->op_type == OP_PADAV ||
4646 lop->op_type == OP_PADHV ||
4647 lop->op_type == OP_PADANY) {
4648 if (!(lop->op_private & OPpLVAL_INTRO))
4649 maybe_common_vars = TRUE;
4651 if (lop->op_private & OPpPAD_STATE) {
4652 if (left->op_private & OPpLVAL_INTRO) {
4653 /* Each variable in state($a, $b, $c) = ... */
4656 /* Each state variable in
4657 (state $a, my $b, our $c, $d, undef) = ... */
4659 yyerror(no_list_state);
4661 /* Each my variable in
4662 (state $a, my $b, our $c, $d, undef) = ... */
4664 } else if (lop->op_type == OP_UNDEF ||
4665 lop->op_type == OP_PUSHMARK) {
4666 /* undef may be interesting in
4667 (state $a, undef, state $c) */
4669 /* Other ops in the list. */
4670 maybe_common_vars = TRUE;
4672 lop = lop->op_sibling;
4675 else if ((left->op_private & OPpLVAL_INTRO)
4676 && ( left->op_type == OP_PADSV
4677 || left->op_type == OP_PADAV
4678 || left->op_type == OP_PADHV
4679 || left->op_type == OP_PADANY))
4681 if (left->op_type == OP_PADSV) maybe_common_vars = FALSE;
4682 if (left->op_private & OPpPAD_STATE) {
4683 /* All single variable list context state assignments, hence
4693 yyerror(no_list_state);
4697 /* PL_generation sorcery:
4698 * an assignment like ($a,$b) = ($c,$d) is easier than
4699 * ($a,$b) = ($c,$a), since there is no need for temporary vars.
4700 * To detect whether there are common vars, the global var
4701 * PL_generation is incremented for each assign op we compile.
4702 * Then, while compiling the assign op, we run through all the
4703 * variables on both sides of the assignment, setting a spare slot
4704 * in each of them to PL_generation. If any of them already have
4705 * that value, we know we've got commonality. We could use a
4706 * single bit marker, but then we'd have to make 2 passes, first
4707 * to clear the flag, then to test and set it. To find somewhere
4708 * to store these values, evil chicanery is done with SvUVX().
4711 if (maybe_common_vars) {
4714 for (curop = LINKLIST(o); curop != o; curop = LINKLIST(curop)) {
4715 if (PL_opargs[curop->op_type] & OA_DANGEROUS) {
4716 if (curop->op_type == OP_GV) {
4717 GV *gv = cGVOPx_gv(curop);
4719 || (int)GvASSIGN_GENERATION(gv) == PL_generation)
4721 GvASSIGN_GENERATION_set(gv, PL_generation);
4723 else if (curop->op_type == OP_PADSV ||
4724 curop->op_type == OP_PADAV ||
4725 curop->op_type == OP_PADHV ||
4726 curop->op_type == OP_PADANY)
4728 if (PAD_COMPNAME_GEN(curop->op_targ)
4729 == (STRLEN)PL_generation)
4731 PAD_COMPNAME_GEN_set(curop->op_targ, PL_generation);
4734 else if (curop->op_type == OP_RV2CV)
4736 else if (curop->op_type == OP_RV2SV ||
4737 curop->op_type == OP_RV2AV ||
4738 curop->op_type == OP_RV2HV ||
4739 curop->op_type == OP_RV2GV) {
4740 if (lastop->op_type != OP_GV) /* funny deref? */
4743 else if (curop->op_type == OP_PUSHRE) {
4745 if (((PMOP*)curop)->op_pmreplrootu.op_pmtargetoff) {
4746 GV *const gv = MUTABLE_GV(PAD_SVl(((PMOP*)curop)->op_pmreplrootu.op_pmtargetoff));
4748 || (int)GvASSIGN_GENERATION(gv) == PL_generation)
4750 GvASSIGN_GENERATION_set(gv, PL_generation);
4754 = ((PMOP*)curop)->op_pmreplrootu.op_pmtargetgv;
4757 || (int)GvASSIGN_GENERATION(gv) == PL_generation)
4759 GvASSIGN_GENERATION_set(gv, PL_generation);
4769 o->op_private |= OPpASSIGN_COMMON;
4772 if (right && right->op_type == OP_SPLIT && !PL_madskills) {
4773 OP* tmpop = ((LISTOP*)right)->op_first;
4774 if (tmpop && (tmpop->op_type == OP_PUSHRE)) {
4775 PMOP * const pm = (PMOP*)tmpop;
4776 if (left->op_type == OP_RV2AV &&
4777 !(left->op_private & OPpLVAL_INTRO) &&
4778 !(o->op_private & OPpASSIGN_COMMON) )
4780 tmpop = ((UNOP*)left)->op_first;
4781 if (tmpop->op_type == OP_GV
4783 && !pm->op_pmreplrootu.op_pmtargetoff
4785 && !pm->op_pmreplrootu.op_pmtargetgv
4789 pm->op_pmreplrootu.op_pmtargetoff
4790 = cPADOPx(tmpop)->op_padix;
4791 cPADOPx(tmpop)->op_padix = 0; /* steal it */
4793 pm->op_pmreplrootu.op_pmtargetgv
4794 = MUTABLE_GV(cSVOPx(tmpop)->op_sv);
4795 cSVOPx(tmpop)->op_sv = NULL; /* steal it */
4797 pm->op_pmflags |= PMf_ONCE;
4798 tmpop = cUNOPo->op_first; /* to list (nulled) */
4799 tmpop = ((UNOP*)tmpop)->op_first; /* to pushmark */
4800 tmpop->op_sibling = NULL; /* don't free split */
4801 right->op_next = tmpop->op_next; /* fix starting loc */
4802 op_free(o); /* blow off assign */
4803 right->op_flags &= ~OPf_WANT;
4804 /* "I don't know and I don't care." */
4809 if (PL_modcount < RETURN_UNLIMITED_NUMBER &&
4810 ((LISTOP*)right)->op_last->op_type == OP_CONST)
4812 SV *sv = ((SVOP*)((LISTOP*)right)->op_last)->op_sv;
4813 if (SvIOK(sv) && SvIVX(sv) == 0)
4814 sv_setiv(sv, PL_modcount+1);
4822 right = newOP(OP_UNDEF, 0);
4823 if (right->op_type == OP_READLINE) {
4824 right->op_flags |= OPf_STACKED;
4825 return newBINOP(OP_NULL, flags, op_lvalue(scalar(left), OP_SASSIGN),
4829 PL_eval_start = right; /* Grandfathering $[ assignment here. Bletch.*/
4830 o = newBINOP(OP_SASSIGN, flags,
4831 scalar(right), op_lvalue(scalar(left), OP_SASSIGN) );
4835 if (!PL_madskills) { /* assignment to $[ is ignored when making a mad dump */
4836 deprecate("assignment to $[");
4838 o = newSVOP(OP_CONST, 0, newSViv(CopARYBASE_get(&PL_compiling)));
4839 o->op_private |= OPpCONST_ARYBASE;
4847 =for apidoc Am|OP *|newSTATEOP|I32 flags|char *label|OP *o
4849 Constructs a state op (COP). The state op is normally a C<nextstate> op,
4850 but will be a C<dbstate> op if debugging is enabled for currently-compiled
4851 code. The state op is populated from L</PL_curcop> (or L</PL_compiling>).
4852 If I<label> is non-null, it supplies the name of a label to attach to
4853 the state op; this function takes ownership of the memory pointed at by
4854 I<label>, and will free it. I<flags> gives the eight bits of C<op_flags>
4857 If I<o> is null, the state op is returned. Otherwise the state op is
4858 combined with I<o> into a C<lineseq> list op, which is returned. I<o>
4859 is consumed by this function and becomes part of the returned op tree.
4865 Perl_newSTATEOP(pTHX_ I32 flags, char *label, OP *o)
4868 const U32 seq = intro_my();
4871 NewOp(1101, cop, 1, COP);
4872 if (PERLDB_LINE && CopLINE(PL_curcop) && PL_curstash != PL_debstash) {
4873 cop->op_type = OP_DBSTATE;
4874 cop->op_ppaddr = PL_ppaddr[ OP_DBSTATE ];
4877 cop->op_type = OP_NEXTSTATE;
4878 cop->op_ppaddr = PL_ppaddr[ OP_NEXTSTATE ];
4880 cop->op_flags = (U8)flags;
4881 CopHINTS_set(cop, PL_hints);
4883 cop->op_private |= NATIVE_HINTS;
4885 CopHINTS_set(&PL_compiling, CopHINTS_get(cop));
4886 cop->op_next = (OP*)cop;
4889 /* CopARYBASE is now "virtual", in that it's stored as a flag bit in
4890 CopHINTS and a possible value in cop_hints_hash, so no need to copy it.
4892 cop->cop_warnings = DUP_WARNINGS(PL_curcop->cop_warnings);
4893 CopHINTHASH_set(cop, cophh_copy(CopHINTHASH_get(PL_curcop)));
4895 Perl_store_cop_label(aTHX_ cop, label, strlen(label), 0);
4897 PL_hints |= HINT_BLOCK_SCOPE;
4898 /* It seems that we need to defer freeing this pointer, as other parts
4899 of the grammar end up wanting to copy it after this op has been
4904 if (PL_parser && PL_parser->copline == NOLINE)
4905 CopLINE_set(cop, CopLINE(PL_curcop));
4907 CopLINE_set(cop, PL_parser->copline);
4909 PL_parser->copline = NOLINE;
4912 CopFILE_set(cop, CopFILE(PL_curcop)); /* XXX share in a pvtable? */
4914 CopFILEGV_set(cop, CopFILEGV(PL_curcop));
4916 CopSTASH_set(cop, PL_curstash);
4918 if ((PERLDB_LINE || PERLDB_SAVESRC) && PL_curstash != PL_debstash) {
4919 /* this line can have a breakpoint - store the cop in IV */
4920 AV *av = CopFILEAVx(PL_curcop);
4922 SV * const * const svp = av_fetch(av, (I32)CopLINE(cop), FALSE);
4923 if (svp && *svp != &PL_sv_undef ) {
4924 (void)SvIOK_on(*svp);
4925 SvIV_set(*svp, PTR2IV(cop));
4930 if (flags & OPf_SPECIAL)
4932 return op_prepend_elem(OP_LINESEQ, (OP*)cop, o);
4936 =for apidoc Am|OP *|newLOGOP|I32 type|I32 flags|OP *first|OP *other
4938 Constructs, checks, and returns a logical (flow control) op. I<type>
4939 is the opcode. I<flags> gives the eight bits of C<op_flags>, except
4940 that C<OPf_KIDS> will be set automatically, and, shifted up eight bits,
4941 the eight bits of C<op_private>, except that the bit with value 1 is
4942 automatically set. I<first> supplies the expression controlling the
4943 flow, and I<other> supplies the side (alternate) chain of ops; they are
4944 consumed by this function and become part of the constructed op tree.
4950 Perl_newLOGOP(pTHX_ I32 type, I32 flags, OP *first, OP *other)
4954 PERL_ARGS_ASSERT_NEWLOGOP;
4956 return new_logop(type, flags, &first, &other);
4960 S_search_const(pTHX_ OP *o)
4962 PERL_ARGS_ASSERT_SEARCH_CONST;
4964 switch (o->op_type) {
4968 if (o->op_flags & OPf_KIDS)
4969 return search_const(cUNOPo->op_first);
4976 if (!(o->op_flags & OPf_KIDS))
4978 kid = cLISTOPo->op_first;
4980 switch (kid->op_type) {
4984 kid = kid->op_sibling;
4987 if (kid != cLISTOPo->op_last)
4993 kid = cLISTOPo->op_last;
4995 return search_const(kid);
5003 S_new_logop(pTHX_ I32 type, I32 flags, OP** firstp, OP** otherp)
5011 int prepend_not = 0;
5013 PERL_ARGS_ASSERT_NEW_LOGOP;
5018 if (type == OP_XOR) /* Not short circuit, but here by precedence. */
5019 return newBINOP(type, flags, scalar(first), scalar(other));
5021 assert((PL_opargs[type] & OA_CLASS_MASK) == OA_LOGOP);
5023 scalarboolean(first);
5024 /* optimize AND and OR ops that have NOTs as children */
5025 if (first->op_type == OP_NOT
5026 && (first->op_flags & OPf_KIDS)
5027 && ((first->op_flags & OPf_SPECIAL) /* unless ($x) { } */
5028 || (other->op_type == OP_NOT)) /* if (!$x && !$y) { } */
5030 if (type == OP_AND || type == OP_OR) {
5036 if (other->op_type == OP_NOT) { /* !a AND|OR !b => !(a OR|AND b) */
5038 prepend_not = 1; /* prepend a NOT op later */
5042 /* search for a constant op that could let us fold the test */
5043 if ((cstop = search_const(first))) {
5044 if (cstop->op_private & OPpCONST_STRICT)
5045 no_bareword_allowed(cstop);
5046 else if ((cstop->op_private & OPpCONST_BARE))
5047 Perl_ck_warner(aTHX_ packWARN(WARN_BAREWORD), "Bareword found in conditional");
5048 if ((type == OP_AND && SvTRUE(((SVOP*)cstop)->op_sv)) ||
5049 (type == OP_OR && !SvTRUE(((SVOP*)cstop)->op_sv)) ||
5050 (type == OP_DOR && !SvOK(((SVOP*)cstop)->op_sv))) {
5052 if (other->op_type == OP_CONST)
5053 other->op_private |= OPpCONST_SHORTCIRCUIT;
5055 OP *newop = newUNOP(OP_NULL, 0, other);
5056 op_getmad(first, newop, '1');
5057 newop->op_targ = type; /* set "was" field */
5061 if (other->op_type == OP_LEAVE)
5062 other = newUNOP(OP_NULL, OPf_SPECIAL, other);
5063 else if (other->op_type == OP_MATCH
5064 || other->op_type == OP_SUBST
5065 || other->op_type == OP_TRANSR
5066 || other->op_type == OP_TRANS)
5067 /* Mark the op as being unbindable with =~ */
5068 other->op_flags |= OPf_SPECIAL;
5072 /* check for C<my $x if 0>, or C<my($x,$y) if 0> */
5073 const OP *o2 = other;
5074 if ( ! (o2->op_type == OP_LIST
5075 && (( o2 = cUNOPx(o2)->op_first))
5076 && o2->op_type == OP_PUSHMARK
5077 && (( o2 = o2->op_sibling)) )
5080 if ((o2->op_type == OP_PADSV || o2->op_type == OP_PADAV
5081 || o2->op_type == OP_PADHV)
5082 && o2->op_private & OPpLVAL_INTRO
5083 && !(o2->op_private & OPpPAD_STATE))
5085 Perl_ck_warner_d(aTHX_ packWARN(WARN_DEPRECATED),
5086 "Deprecated use of my() in false conditional");
5090 if (first->op_type == OP_CONST)
5091 first->op_private |= OPpCONST_SHORTCIRCUIT;
5093 first = newUNOP(OP_NULL, 0, first);
5094 op_getmad(other, first, '2');
5095 first->op_targ = type; /* set "was" field */
5102 else if ((first->op_flags & OPf_KIDS) && type != OP_DOR
5103 && ckWARN(WARN_MISC)) /* [#24076] Don't warn for <FH> err FOO. */
5105 const OP * const k1 = ((UNOP*)first)->op_first;
5106 const OP * const k2 = k1->op_sibling;
5108 switch (first->op_type)
5111 if (k2 && k2->op_type == OP_READLINE
5112 && (k2->op_flags & OPf_STACKED)
5113 && ((k1->op_flags & OPf_WANT) == OPf_WANT_SCALAR))
5115 warnop = k2->op_type;
5120 if (k1->op_type == OP_READDIR
5121 || k1->op_type == OP_GLOB
5122 || (k1->op_type == OP_NULL && k1->op_targ == OP_GLOB)
5123 || k1->op_type == OP_EACH
5124 || k1->op_type == OP_AEACH)
5126 warnop = ((k1->op_type == OP_NULL)
5127 ? (OPCODE)k1->op_targ : k1->op_type);
5132 const line_t oldline = CopLINE(PL_curcop);
5133 CopLINE_set(PL_curcop, PL_parser->copline);
5134 Perl_warner(aTHX_ packWARN(WARN_MISC),
5135 "Value of %s%s can be \"0\"; test with defined()",
5137 ((warnop == OP_READLINE || warnop == OP_GLOB)
5138 ? " construct" : "() operator"));
5139 CopLINE_set(PL_curcop, oldline);
5146 if (type == OP_ANDASSIGN || type == OP_ORASSIGN || type == OP_DORASSIGN)
5147 other->op_private |= OPpASSIGN_BACKWARDS; /* other is an OP_SASSIGN */
5149 NewOp(1101, logop, 1, LOGOP);
5151 logop->op_type = (OPCODE)type;
5152 logop->op_ppaddr = PL_ppaddr[type];
5153 logop->op_first = first;
5154 logop->op_flags = (U8)(flags | OPf_KIDS);
5155 logop->op_other = LINKLIST(other);
5156 logop->op_private = (U8)(1 | (flags >> 8));
5158 /* establish postfix order */
5159 logop->op_next = LINKLIST(first);
5160 first->op_next = (OP*)logop;
5161 first->op_sibling = other;
5163 CHECKOP(type,logop);
5165 o = newUNOP(prepend_not ? OP_NOT : OP_NULL, 0, (OP*)logop);
5172 =for apidoc Am|OP *|newCONDOP|I32 flags|OP *first|OP *trueop|OP *falseop
5174 Constructs, checks, and returns a conditional-expression (C<cond_expr>)
5175 op. I<flags> gives the eight bits of C<op_flags>, except that C<OPf_KIDS>
5176 will be set automatically, and, shifted up eight bits, the eight bits of
5177 C<op_private>, except that the bit with value 1 is automatically set.
5178 I<first> supplies the expression selecting between the two branches,
5179 and I<trueop> and I<falseop> supply the branches; they are consumed by
5180 this function and become part of the constructed op tree.
5186 Perl_newCONDOP(pTHX_ I32 flags, OP *first, OP *trueop, OP *falseop)
5194 PERL_ARGS_ASSERT_NEWCONDOP;
5197 return newLOGOP(OP_AND, 0, first, trueop);
5199 return newLOGOP(OP_OR, 0, first, falseop);
5201 scalarboolean(first);
5202 if ((cstop = search_const(first))) {
5203 /* Left or right arm of the conditional? */
5204 const bool left = SvTRUE(((SVOP*)cstop)->op_sv);
5205 OP *live = left ? trueop : falseop;
5206 OP *const dead = left ? falseop : trueop;
5207 if (cstop->op_private & OPpCONST_BARE &&
5208 cstop->op_private & OPpCONST_STRICT) {
5209 no_bareword_allowed(cstop);
5212 /* This is all dead code when PERL_MAD is not defined. */
5213 live = newUNOP(OP_NULL, 0, live);
5214 op_getmad(first, live, 'C');
5215 op_getmad(dead, live, left ? 'e' : 't');
5220 if (live->op_type == OP_LEAVE)
5221 live = newUNOP(OP_NULL, OPf_SPECIAL, live);
5222 else if (live->op_type == OP_MATCH || live->op_type == OP_SUBST
5223 || live->op_type == OP_TRANS || live->op_type == OP_TRANSR)
5224 /* Mark the op as being unbindable with =~ */
5225 live->op_flags |= OPf_SPECIAL;
5228 NewOp(1101, logop, 1, LOGOP);
5229 logop->op_type = OP_COND_EXPR;
5230 logop->op_ppaddr = PL_ppaddr[OP_COND_EXPR];
5231 logop->op_first = first;
5232 logop->op_flags = (U8)(flags | OPf_KIDS);
5233 logop->op_private = (U8)(1 | (flags >> 8));
5234 logop->op_other = LINKLIST(trueop);
5235 logop->op_next = LINKLIST(falseop);
5237 CHECKOP(OP_COND_EXPR, /* that's logop->op_type */
5240 /* establish postfix order */
5241 start = LINKLIST(first);
5242 first->op_next = (OP*)logop;
5244 first->op_sibling = trueop;
5245 trueop->op_sibling = falseop;
5246 o = newUNOP(OP_NULL, 0, (OP*)logop);
5248 trueop->op_next = falseop->op_next = o;
5255 =for apidoc Am|OP *|newRANGE|I32 flags|OP *left|OP *right
5257 Constructs and returns a C<range> op, with subordinate C<flip> and
5258 C<flop> ops. I<flags> gives the eight bits of C<op_flags> for the
5259 C<flip> op and, shifted up eight bits, the eight bits of C<op_private>
5260 for both the C<flip> and C<range> ops, except that the bit with value
5261 1 is automatically set. I<left> and I<right> supply the expressions
5262 controlling the endpoints of the range; they are consumed by this function
5263 and become part of the constructed op tree.
5269 Perl_newRANGE(pTHX_ I32 flags, OP *left, OP *right)
5278 PERL_ARGS_ASSERT_NEWRANGE;
5280 NewOp(1101, range, 1, LOGOP);
5282 range->op_type = OP_RANGE;
5283 range->op_ppaddr = PL_ppaddr[OP_RANGE];
5284 range->op_first = left;
5285 range->op_flags = OPf_KIDS;
5286 leftstart = LINKLIST(left);
5287 range->op_other = LINKLIST(right);
5288 range->op_private = (U8)(1 | (flags >> 8));
5290 left->op_sibling = right;
5292 range->op_next = (OP*)range;
5293 flip = newUNOP(OP_FLIP, flags, (OP*)range);
5294 flop = newUNOP(OP_FLOP, 0, flip);
5295 o = newUNOP(OP_NULL, 0, flop);
5297 range->op_next = leftstart;
5299 left->op_next = flip;
5300 right->op_next = flop;
5302 range->op_targ = pad_alloc(OP_RANGE, SVs_PADMY);
5303 sv_upgrade(PAD_SV(range->op_targ), SVt_PVNV);
5304 flip->op_targ = pad_alloc(OP_RANGE, SVs_PADMY);
5305 sv_upgrade(PAD_SV(flip->op_targ), SVt_PVNV);
5307 flip->op_private = left->op_type == OP_CONST ? OPpFLIP_LINENUM : 0;
5308 flop->op_private = right->op_type == OP_CONST ? OPpFLIP_LINENUM : 0;
5311 if (!flip->op_private || !flop->op_private)
5312 LINKLIST(o); /* blow off optimizer unless constant */
5318 =for apidoc Am|OP *|newLOOPOP|I32 flags|I32 debuggable|OP *expr|OP *block
5320 Constructs, checks, and returns an op tree expressing a loop. This is
5321 only a loop in the control flow through the op tree; it does not have
5322 the heavyweight loop structure that allows exiting the loop by C<last>
5323 and suchlike. I<flags> gives the eight bits of C<op_flags> for the
5324 top-level op, except that some bits will be set automatically as required.
5325 I<expr> supplies the expression controlling loop iteration, and I<block>
5326 supplies the body of the loop; they are consumed by this function and
5327 become part of the constructed op tree. I<debuggable> is currently
5328 unused and should always be 1.
5334 Perl_newLOOPOP(pTHX_ I32 flags, I32 debuggable, OP *expr, OP *block)
5339 const bool once = block && block->op_flags & OPf_SPECIAL &&
5340 (block->op_type == OP_ENTERSUB || block->op_type == OP_NULL);
5342 PERL_UNUSED_ARG(debuggable);
5345 if (once && expr->op_type == OP_CONST && !SvTRUE(((SVOP*)expr)->op_sv))
5346 return block; /* do {} while 0 does once */
5347 if (expr->op_type == OP_READLINE
5348 || expr->op_type == OP_READDIR
5349 || expr->op_type == OP_GLOB
5350 || (expr->op_type == OP_NULL && expr->op_targ == OP_GLOB)) {
5351 expr = newUNOP(OP_DEFINED, 0,
5352 newASSIGNOP(0, newDEFSVOP(), 0, expr) );
5353 } else if (expr->op_flags & OPf_KIDS) {
5354 const OP * const k1 = ((UNOP*)expr)->op_first;
5355 const OP * const k2 = k1 ? k1->op_sibling : NULL;
5356 switch (expr->op_type) {
5358 if (k2 && (k2->op_type == OP_READLINE || k2->op_type == OP_READDIR)
5359 && (k2->op_flags & OPf_STACKED)
5360 && ((k1->op_flags & OPf_WANT) == OPf_WANT_SCALAR))
5361 expr = newUNOP(OP_DEFINED, 0, expr);
5365 if (k1 && (k1->op_type == OP_READDIR
5366 || k1->op_type == OP_GLOB
5367 || (k1->op_type == OP_NULL && k1->op_targ == OP_GLOB)
5368 || k1->op_type == OP_EACH
5369 || k1->op_type == OP_AEACH))
5370 expr = newUNOP(OP_DEFINED, 0, expr);
5376 /* if block is null, the next op_append_elem() would put UNSTACK, a scalar
5377 * op, in listop. This is wrong. [perl #27024] */
5379 block = newOP(OP_NULL, 0);
5380 listop = op_append_elem(OP_LINESEQ, block, newOP(OP_UNSTACK, 0));
5381 o = new_logop(OP_AND, 0, &expr, &listop);
5384 ((LISTOP*)listop)->op_last->op_next = LINKLIST(o);
5386 if (once && o != listop)
5387 o->op_next = ((LOGOP*)cUNOPo->op_first)->op_other;
5390 o = newUNOP(OP_NULL, 0, o); /* or do {} while 1 loses outer block */
5392 o->op_flags |= flags;
5394 o->op_flags |= OPf_SPECIAL; /* suppress POPBLOCK curpm restoration*/
5399 =for apidoc Am|OP *|newWHILEOP|I32 flags|I32 debuggable|LOOP *loop|OP *expr|OP *block|OP *cont|I32 has_my
5401 Constructs, checks, and returns an op tree expressing a C<while> loop.
5402 This is a heavyweight loop, with structure that allows exiting the loop
5403 by C<last> and suchlike.
5405 I<loop> is an optional preconstructed C<enterloop> op to use in the
5406 loop; if it is null then a suitable op will be constructed automatically.
5407 I<expr> supplies the loop's controlling expression. I<block> supplies the
5408 main body of the loop, and I<cont> optionally supplies a C<continue> block
5409 that operates as a second half of the body. All of these optree inputs
5410 are consumed by this function and become part of the constructed op tree.
5412 I<flags> gives the eight bits of C<op_flags> for the C<leaveloop>
5413 op and, shifted up eight bits, the eight bits of C<op_private> for
5414 the C<leaveloop> op, except that (in both cases) some bits will be set
5415 automatically. I<debuggable> is currently unused and should always be 1.
5416 I<has_my> can be supplied as true to force the
5417 loop body to be enclosed in its own scope.
5423 Perl_newWHILEOP(pTHX_ I32 flags, I32 debuggable, LOOP *loop,
5424 OP *expr, OP *block, OP *cont, I32 has_my)
5433 PERL_UNUSED_ARG(debuggable);
5436 if (expr->op_type == OP_READLINE
5437 || expr->op_type == OP_READDIR
5438 || expr->op_type == OP_GLOB
5439 || (expr->op_type == OP_NULL && expr->op_targ == OP_GLOB)) {
5440 expr = newUNOP(OP_DEFINED, 0,
5441 newASSIGNOP(0, newDEFSVOP(), 0, expr) );
5442 } else if (expr->op_flags & OPf_KIDS) {
5443 const OP * const k1 = ((UNOP*)expr)->op_first;
5444 const OP * const k2 = (k1) ? k1->op_sibling : NULL;
5445 switch (expr->op_type) {
5447 if (k2 && (k2->op_type == OP_READLINE || k2->op_type == OP_READDIR)
5448 && (k2->op_flags & OPf_STACKED)
5449 && ((k1->op_flags & OPf_WANT) == OPf_WANT_SCALAR))
5450 expr = newUNOP(OP_DEFINED, 0, expr);
5454 if (k1 && (k1->op_type == OP_READDIR
5455 || k1->op_type == OP_GLOB
5456 || (k1->op_type == OP_NULL && k1->op_targ == OP_GLOB)
5457 || k1->op_type == OP_EACH
5458 || k1->op_type == OP_AEACH))
5459 expr = newUNOP(OP_DEFINED, 0, expr);
5466 block = newOP(OP_NULL, 0);
5467 else if (cont || has_my) {
5468 block = op_scope(block);
5472 next = LINKLIST(cont);
5475 OP * const unstack = newOP(OP_UNSTACK, 0);
5478 cont = op_append_elem(OP_LINESEQ, cont, unstack);
5482 listop = op_append_list(OP_LINESEQ, block, cont);
5484 redo = LINKLIST(listop);
5488 o = new_logop(OP_AND, 0, &expr, &listop);
5489 if (o == expr && o->op_type == OP_CONST && !SvTRUE(cSVOPo->op_sv)) {
5490 op_free(expr); /* oops, it's a while (0) */
5492 return NULL; /* listop already freed by new_logop */
5495 ((LISTOP*)listop)->op_last->op_next =
5496 (o == listop ? redo : LINKLIST(o));
5502 NewOp(1101,loop,1,LOOP);
5503 loop->op_type = OP_ENTERLOOP;
5504 loop->op_ppaddr = PL_ppaddr[OP_ENTERLOOP];
5505 loop->op_private = 0;
5506 loop->op_next = (OP*)loop;
5509 o = newBINOP(OP_LEAVELOOP, 0, (OP*)loop, o);
5511 loop->op_redoop = redo;
5512 loop->op_lastop = o;
5513 o->op_private |= loopflags;
5516 loop->op_nextop = next;
5518 loop->op_nextop = o;
5520 o->op_flags |= flags;
5521 o->op_private |= (flags >> 8);
5526 =for apidoc Am|OP *|newFOROP|I32 flags|OP *sv|OP *expr|OP *block|OP *cont
5528 Constructs, checks, and returns an op tree expressing a C<foreach>
5529 loop (iteration through a list of values). This is a heavyweight loop,
5530 with structure that allows exiting the loop by C<last> and suchlike.
5532 I<sv> optionally supplies the variable that will be aliased to each
5533 item in turn; if null, it defaults to C<$_> (either lexical or global).
5534 I<expr> supplies the list of values to iterate over. I<block> supplies
5535 the main body of the loop, and I<cont> optionally supplies a C<continue>
5536 block that operates as a second half of the body. All of these optree
5537 inputs are consumed by this function and become part of the constructed
5540 I<flags> gives the eight bits of C<op_flags> for the C<leaveloop>
5541 op and, shifted up eight bits, the eight bits of C<op_private> for
5542 the C<leaveloop> op, except that (in both cases) some bits will be set
5549 Perl_newFOROP(pTHX_ I32 flags, OP *sv, OP *expr, OP *block, OP *cont)
5554 PADOFFSET padoff = 0;
5559 PERL_ARGS_ASSERT_NEWFOROP;
5562 if (sv->op_type == OP_RV2SV) { /* symbol table variable */
5563 iterpflags = sv->op_private & OPpOUR_INTRO; /* for our $x () */
5564 sv->op_type = OP_RV2GV;
5565 sv->op_ppaddr = PL_ppaddr[OP_RV2GV];
5567 /* The op_type check is needed to prevent a possible segfault
5568 * if the loop variable is undeclared and 'strict vars' is in
5569 * effect. This is illegal but is nonetheless parsed, so we
5570 * may reach this point with an OP_CONST where we're expecting
5573 if (cUNOPx(sv)->op_first->op_type == OP_GV
5574 && cGVOPx_gv(cUNOPx(sv)->op_first) == PL_defgv)
5575 iterpflags |= OPpITER_DEF;
5577 else if (sv->op_type == OP_PADSV) { /* private variable */
5578 iterpflags = sv->op_private & OPpLVAL_INTRO; /* for my $x () */
5579 padoff = sv->op_targ;
5589 Perl_croak(aTHX_ "Can't use %s for loop variable", PL_op_desc[sv->op_type]);
5591 SV *const namesv = PAD_COMPNAME_SV(padoff);
5593 const char *const name = SvPV_const(namesv, len);
5595 if (len == 2 && name[0] == '$' && name[1] == '_')
5596 iterpflags |= OPpITER_DEF;
5600 const PADOFFSET offset = Perl_pad_findmy(aTHX_ STR_WITH_LEN("$_"), 0);
5601 if (offset == NOT_IN_PAD || PAD_COMPNAME_FLAGS_isOUR(offset)) {
5602 sv = newGVOP(OP_GV, 0, PL_defgv);
5607 iterpflags |= OPpITER_DEF;
5609 if (expr->op_type == OP_RV2AV || expr->op_type == OP_PADAV) {
5610 expr = op_lvalue(force_list(scalar(ref(expr, OP_ITER))), OP_GREPSTART);
5611 iterflags |= OPf_STACKED;
5613 else if (expr->op_type == OP_NULL &&
5614 (expr->op_flags & OPf_KIDS) &&
5615 ((BINOP*)expr)->op_first->op_type == OP_FLOP)
5617 /* Basically turn for($x..$y) into the same as for($x,$y), but we
5618 * set the STACKED flag to indicate that these values are to be
5619 * treated as min/max values by 'pp_iterinit'.
5621 const UNOP* const flip = (UNOP*)((UNOP*)((BINOP*)expr)->op_first)->op_first;
5622 LOGOP* const range = (LOGOP*) flip->op_first;
5623 OP* const left = range->op_first;
5624 OP* const right = left->op_sibling;
5627 range->op_flags &= ~OPf_KIDS;
5628 range->op_first = NULL;
5630 listop = (LISTOP*)newLISTOP(OP_LIST, 0, left, right);
5631 listop->op_first->op_next = range->op_next;
5632 left->op_next = range->op_other;
5633 right->op_next = (OP*)listop;
5634 listop->op_next = listop->op_first;
5637 op_getmad(expr,(OP*)listop,'O');
5641 expr = (OP*)(listop);
5643 iterflags |= OPf_STACKED;
5646 expr = op_lvalue(force_list(expr), OP_GREPSTART);
5649 loop = (LOOP*)list(convert(OP_ENTERITER, iterflags,
5650 op_append_elem(OP_LIST, expr, scalar(sv))));
5651 assert(!loop->op_next);
5652 /* for my $x () sets OPpLVAL_INTRO;
5653 * for our $x () sets OPpOUR_INTRO */
5654 loop->op_private = (U8)iterpflags;
5655 #ifdef PL_OP_SLAB_ALLOC
5658 NewOp(1234,tmp,1,LOOP);
5659 Copy(loop,tmp,1,LISTOP);
5660 S_op_destroy(aTHX_ (OP*)loop);
5664 loop = (LOOP*)PerlMemShared_realloc(loop, sizeof(LOOP));
5666 loop->op_targ = padoff;
5667 wop = newWHILEOP(flags, 1, loop, newOP(OP_ITER, 0), block, cont, 0);
5669 op_getmad(madsv, (OP*)loop, 'v');
5674 =for apidoc Am|OP *|newLOOPEX|I32 type|OP *label
5676 Constructs, checks, and returns a loop-exiting op (such as C<goto>
5677 or C<last>). I<type> is the opcode. I<label> supplies the parameter
5678 determining the target of the op; it is consumed by this function and
5679 become part of the constructed op tree.
5685 Perl_newLOOPEX(pTHX_ I32 type, OP *label)
5690 PERL_ARGS_ASSERT_NEWLOOPEX;
5692 assert((PL_opargs[type] & OA_CLASS_MASK) == OA_LOOPEXOP);
5694 if (type != OP_GOTO || label->op_type == OP_CONST) {
5695 /* "last()" means "last" */
5696 if (label->op_type == OP_STUB && (label->op_flags & OPf_PARENS))
5697 o = newOP(type, OPf_SPECIAL);
5699 o = newPVOP(type, 0, savesharedpv(label->op_type == OP_CONST
5700 ? SvPV_nolen_const(((SVOP*)label)->op_sv)
5704 op_getmad(label,o,'L');
5710 /* Check whether it's going to be a goto &function */
5711 if (label->op_type == OP_ENTERSUB
5712 && !(label->op_flags & OPf_STACKED))
5713 label = newUNOP(OP_REFGEN, 0, op_lvalue(label, OP_REFGEN));
5714 o = newUNOP(type, OPf_STACKED, label);
5716 PL_hints |= HINT_BLOCK_SCOPE;
5720 /* if the condition is a literal array or hash
5721 (or @{ ... } etc), make a reference to it.
5724 S_ref_array_or_hash(pTHX_ OP *cond)
5727 && (cond->op_type == OP_RV2AV
5728 || cond->op_type == OP_PADAV
5729 || cond->op_type == OP_RV2HV
5730 || cond->op_type == OP_PADHV))
5732 return newUNOP(OP_REFGEN, 0, op_lvalue(cond, OP_REFGEN));
5735 && (cond->op_type == OP_ASLICE
5736 || cond->op_type == OP_HSLICE)) {
5738 /* anonlist now needs a list from this op, was previously used in
5740 cond->op_flags |= ~(OPf_WANT_SCALAR | OPf_REF);
5741 cond->op_flags |= OPf_WANT_LIST;
5743 return newANONLIST(op_lvalue(cond, OP_ANONLIST));
5750 /* These construct the optree fragments representing given()
5753 entergiven and enterwhen are LOGOPs; the op_other pointer
5754 points up to the associated leave op. We need this so we
5755 can put it in the context and make break/continue work.
5756 (Also, of course, pp_enterwhen will jump straight to
5757 op_other if the match fails.)
5761 S_newGIVWHENOP(pTHX_ OP *cond, OP *block,
5762 I32 enter_opcode, I32 leave_opcode,
5763 PADOFFSET entertarg)
5769 PERL_ARGS_ASSERT_NEWGIVWHENOP;
5771 NewOp(1101, enterop, 1, LOGOP);
5772 enterop->op_type = (Optype)enter_opcode;
5773 enterop->op_ppaddr = PL_ppaddr[enter_opcode];
5774 enterop->op_flags = (U8) OPf_KIDS;
5775 enterop->op_targ = ((entertarg == NOT_IN_PAD) ? 0 : entertarg);
5776 enterop->op_private = 0;
5778 o = newUNOP(leave_opcode, 0, (OP *) enterop);
5781 enterop->op_first = scalar(cond);
5782 cond->op_sibling = block;
5784 o->op_next = LINKLIST(cond);
5785 cond->op_next = (OP *) enterop;
5788 /* This is a default {} block */
5789 enterop->op_first = block;
5790 enterop->op_flags |= OPf_SPECIAL;
5792 o->op_next = (OP *) enterop;
5795 CHECKOP(enter_opcode, enterop); /* Currently does nothing, since
5796 entergiven and enterwhen both
5799 enterop->op_next = LINKLIST(block);
5800 block->op_next = enterop->op_other = o;
5805 /* Does this look like a boolean operation? For these purposes
5806 a boolean operation is:
5807 - a subroutine call [*]
5808 - a logical connective
5809 - a comparison operator
5810 - a filetest operator, with the exception of -s -M -A -C
5811 - defined(), exists() or eof()
5812 - /$re/ or $foo =~ /$re/
5814 [*] possibly surprising
5817 S_looks_like_bool(pTHX_ const OP *o)
5821 PERL_ARGS_ASSERT_LOOKS_LIKE_BOOL;
5823 switch(o->op_type) {
5826 return looks_like_bool(cLOGOPo->op_first);
5830 looks_like_bool(cLOGOPo->op_first)
5831 && looks_like_bool(cLOGOPo->op_first->op_sibling));
5836 o->op_flags & OPf_KIDS
5837 && looks_like_bool(cUNOPo->op_first));
5841 case OP_NOT: case OP_XOR:
5843 case OP_EQ: case OP_NE: case OP_LT:
5844 case OP_GT: case OP_LE: case OP_GE:
5846 case OP_I_EQ: case OP_I_NE: case OP_I_LT:
5847 case OP_I_GT: case OP_I_LE: case OP_I_GE:
5849 case OP_SEQ: case OP_SNE: case OP_SLT:
5850 case OP_SGT: case OP_SLE: case OP_SGE:
5854 case OP_FTRREAD: case OP_FTRWRITE: case OP_FTREXEC:
5855 case OP_FTEREAD: case OP_FTEWRITE: case OP_FTEEXEC:
5856 case OP_FTIS: case OP_FTEOWNED: case OP_FTROWNED:
5857 case OP_FTZERO: case OP_FTSOCK: case OP_FTCHR:
5858 case OP_FTBLK: case OP_FTFILE: case OP_FTDIR:
5859 case OP_FTPIPE: case OP_FTLINK: case OP_FTSUID:
5860 case OP_FTSGID: case OP_FTSVTX: case OP_FTTTY:
5861 case OP_FTTEXT: case OP_FTBINARY:
5863 case OP_DEFINED: case OP_EXISTS:
5864 case OP_MATCH: case OP_EOF:
5871 /* Detect comparisons that have been optimized away */
5872 if (cSVOPo->op_sv == &PL_sv_yes
5873 || cSVOPo->op_sv == &PL_sv_no)
5886 =for apidoc Am|OP *|newGIVENOP|OP *cond|OP *block|PADOFFSET defsv_off
5888 Constructs, checks, and returns an op tree expressing a C<given> block.
5889 I<cond> supplies the expression that will be locally assigned to a lexical
5890 variable, and I<block> supplies the body of the C<given> construct; they
5891 are consumed by this function and become part of the constructed op tree.
5892 I<defsv_off> is the pad offset of the scalar lexical variable that will
5899 Perl_newGIVENOP(pTHX_ OP *cond, OP *block, PADOFFSET defsv_off)
5902 PERL_ARGS_ASSERT_NEWGIVENOP;
5903 return newGIVWHENOP(
5904 ref_array_or_hash(cond),
5906 OP_ENTERGIVEN, OP_LEAVEGIVEN,
5911 =for apidoc Am|OP *|newWHENOP|OP *cond|OP *block
5913 Constructs, checks, and returns an op tree expressing a C<when> block.
5914 I<cond> supplies the test expression, and I<block> supplies the block
5915 that will be executed if the test evaluates to true; they are consumed
5916 by this function and become part of the constructed op tree. I<cond>
5917 will be interpreted DWIMically, often as a comparison against C<$_>,
5918 and may be null to generate a C<default> block.
5924 Perl_newWHENOP(pTHX_ OP *cond, OP *block)
5926 const bool cond_llb = (!cond || looks_like_bool(cond));
5929 PERL_ARGS_ASSERT_NEWWHENOP;
5934 cond_op = newBINOP(OP_SMARTMATCH, OPf_SPECIAL,
5936 scalar(ref_array_or_hash(cond)));
5939 return newGIVWHENOP(
5941 op_append_elem(block->op_type, block, newOP(OP_BREAK, OPf_SPECIAL)),
5942 OP_ENTERWHEN, OP_LEAVEWHEN, 0);
5946 Perl_cv_ckproto_len(pTHX_ const CV *cv, const GV *gv, const char *p,
5949 PERL_ARGS_ASSERT_CV_CKPROTO_LEN;
5951 /* Can't just use a strcmp on the prototype, as CONSTSUBs "cheat" by
5952 relying on SvCUR, and doubling up the buffer to hold CvFILE(). */
5953 if (((!p != !SvPOK(cv)) /* One has prototype, one has not. */
5954 || (p && (len != SvCUR(cv) /* Not the same length. */
5955 || memNE(p, SvPVX_const(cv), len))))
5956 && ckWARN_d(WARN_PROTOTYPE)) {
5957 SV* const msg = sv_newmortal();
5961 gv_efullname3(name = sv_newmortal(), gv, NULL);
5962 sv_setpvs(msg, "Prototype mismatch:");
5964 Perl_sv_catpvf(aTHX_ msg, " sub %"SVf, SVfARG(name));
5966 Perl_sv_catpvf(aTHX_ msg, " (%"SVf")", SVfARG(cv));
5968 sv_catpvs(msg, ": none");
5969 sv_catpvs(msg, " vs ");
5971 Perl_sv_catpvf(aTHX_ msg, "(%.*s)", (int) len, p);
5973 sv_catpvs(msg, "none");
5974 Perl_warner(aTHX_ packWARN(WARN_PROTOTYPE), "%"SVf, SVfARG(msg));
5978 static void const_sv_xsub(pTHX_ CV* cv);
5982 =head1 Optree Manipulation Functions
5984 =for apidoc cv_const_sv
5986 If C<cv> is a constant sub eligible for inlining. returns the constant
5987 value returned by the sub. Otherwise, returns NULL.
5989 Constant subs can be created with C<newCONSTSUB> or as described in
5990 L<perlsub/"Constant Functions">.
5995 Perl_cv_const_sv(pTHX_ const CV *const cv)
5997 PERL_UNUSED_CONTEXT;
6000 if (!(SvTYPE(cv) == SVt_PVCV || SvTYPE(cv) == SVt_PVFM))
6002 return CvCONST(cv) ? MUTABLE_SV(CvXSUBANY(cv).any_ptr) : NULL;
6005 /* op_const_sv: examine an optree to determine whether it's in-lineable.
6006 * Can be called in 3 ways:
6009 * look for a single OP_CONST with attached value: return the value
6011 * cv && CvCLONE(cv) && !CvCONST(cv)
6013 * examine the clone prototype, and if contains only a single
6014 * OP_CONST referencing a pad const, or a single PADSV referencing
6015 * an outer lexical, return a non-zero value to indicate the CV is
6016 * a candidate for "constizing" at clone time
6020 * We have just cloned an anon prototype that was marked as a const
6021 * candidate. Try to grab the current value, and in the case of
6022 * PADSV, ignore it if it has multiple references. Return the value.
6026 Perl_op_const_sv(pTHX_ const OP *o, CV *cv)
6037 if (o->op_type == OP_LINESEQ && cLISTOPo->op_first)
6038 o = cLISTOPo->op_first->op_sibling;
6040 for (; o; o = o->op_next) {
6041 const OPCODE type = o->op_type;
6043 if (sv && o->op_next == o)
6045 if (o->op_next != o) {
6046 if (type == OP_NEXTSTATE
6047 || (type == OP_NULL && !(o->op_flags & OPf_KIDS))
6048 || type == OP_PUSHMARK)
6050 if (type == OP_DBSTATE)
6053 if (type == OP_LEAVESUB || type == OP_RETURN)
6057 if (type == OP_CONST && cSVOPo->op_sv)
6059 else if (cv && type == OP_CONST) {
6060 sv = PAD_BASE_SV(CvPADLIST(cv), o->op_targ);
6064 else if (cv && type == OP_PADSV) {
6065 if (CvCONST(cv)) { /* newly cloned anon */
6066 sv = PAD_BASE_SV(CvPADLIST(cv), o->op_targ);
6067 /* the candidate should have 1 ref from this pad and 1 ref
6068 * from the parent */
6069 if (!sv || SvREFCNT(sv) != 2)
6076 if (PAD_COMPNAME_FLAGS(o->op_targ) & SVf_FAKE)
6077 sv = &PL_sv_undef; /* an arbitrary non-null value */
6092 Perl_newMYSUB(pTHX_ I32 floor, OP *o, OP *proto, OP *attrs, OP *block)
6095 /* This would be the return value, but the return cannot be reached. */
6096 OP* pegop = newOP(OP_NULL, 0);
6099 PERL_UNUSED_ARG(floor);
6109 Perl_croak(aTHX_ "\"my sub\" not yet implemented");
6111 NORETURN_FUNCTION_END;
6116 Perl_newATTRSUB(pTHX_ I32 floor, OP *o, OP *proto, OP *attrs, OP *block)
6121 STRLEN ps_len = 0; /* init it to avoid false uninit warning from icc */
6122 register CV *cv = NULL;
6124 /* If the subroutine has no body, no attributes, and no builtin attributes
6125 then it's just a sub declaration, and we may be able to get away with
6126 storing with a placeholder scalar in the symbol table, rather than a
6127 full GV and CV. If anything is present then it will take a full CV to
6129 const I32 gv_fetch_flags
6130 = (block || attrs || (CvFLAGS(PL_compcv) & CVf_BUILTIN_ATTRS)
6132 ? GV_ADDMULTI : GV_ADDMULTI | GV_NOINIT;
6133 const char * const name = o ? SvPV_nolen_const(cSVOPo->op_sv) : NULL;
6137 assert(proto->op_type == OP_CONST);
6138 ps = SvPV_const(((SVOP*)proto)->op_sv, ps_len);
6144 gv = gv_fetchsv(cSVOPo->op_sv, gv_fetch_flags, SVt_PVCV);
6146 } else if (PERLDB_NAMEANON && CopLINE(PL_curcop)) {
6147 SV * const sv = sv_newmortal();
6148 Perl_sv_setpvf(aTHX_ sv, "%s[%s:%"IVdf"]",
6149 PL_curstash ? "__ANON__" : "__ANON__::__ANON__",
6150 CopFILE(PL_curcop), (IV)CopLINE(PL_curcop));
6151 gv = gv_fetchsv(sv, gv_fetch_flags, SVt_PVCV);
6153 } else if (PL_curstash) {
6154 gv = gv_fetchpvs("__ANON__", gv_fetch_flags, SVt_PVCV);
6157 gv = gv_fetchpvs("__ANON__::__ANON__", gv_fetch_flags, SVt_PVCV);
6161 if (!PL_madskills) {
6170 if (SvTYPE(gv) != SVt_PVGV) { /* Maybe prototype now, and had at
6171 maximum a prototype before. */
6172 if (SvTYPE(gv) > SVt_NULL) {
6173 if (!SvPOK((const SV *)gv)
6174 && !(SvIOK((const SV *)gv) && SvIVX((const SV *)gv) == -1))
6176 Perl_ck_warner_d(aTHX_ packWARN(WARN_PROTOTYPE), "Runaway prototype");
6178 cv_ckproto_len((const CV *)gv, NULL, ps, ps_len);
6181 sv_setpvn(MUTABLE_SV(gv), ps, ps_len);
6183 sv_setiv(MUTABLE_SV(gv), -1);
6185 SvREFCNT_dec(PL_compcv);
6186 cv = PL_compcv = NULL;
6190 cv = (!name || GvCVGEN(gv)) ? NULL : GvCV(gv);
6192 if (!block || !ps || *ps || attrs
6193 || (CvFLAGS(PL_compcv) & CVf_BUILTIN_ATTRS)
6195 || block->op_type == OP_NULL
6200 const_sv = op_const_sv(block, NULL);
6203 const bool exists = CvROOT(cv) || CvXSUB(cv);
6205 /* if the subroutine doesn't exist and wasn't pre-declared
6206 * with a prototype, assume it will be AUTOLOADed,
6207 * skipping the prototype check
6209 if (exists || SvPOK(cv))
6210 cv_ckproto_len(cv, gv, ps, ps_len);
6211 /* already defined (or promised)? */
6212 if (exists || GvASSUMECV(gv)) {
6215 || block->op_type == OP_NULL
6218 if (CvFLAGS(PL_compcv)) {
6219 /* might have had built-in attrs applied */
6220 const bool pureperl = !CvISXSUB(cv) && CvROOT(cv);
6221 if (CvLVALUE(PL_compcv) && ! CvLVALUE(cv) && pureperl
6222 && ckWARN(WARN_MISC))
6223 Perl_warner(aTHX_ packWARN(WARN_MISC), "lvalue attribute ignored after the subroutine has been defined");
6225 (CvFLAGS(PL_compcv) & CVf_BUILTIN_ATTRS
6226 & ~(CVf_LVALUE * pureperl));
6228 /* just a "sub foo;" when &foo is already defined */
6229 SAVEFREESV(PL_compcv);
6234 && block->op_type != OP_NULL
6237 if (ckWARN(WARN_REDEFINE)
6239 && (!const_sv || sv_cmp(cv_const_sv(cv), const_sv))))
6241 const line_t oldline = CopLINE(PL_curcop);
6242 if (PL_parser && PL_parser->copline != NOLINE)
6243 CopLINE_set(PL_curcop, PL_parser->copline);
6244 Perl_warner(aTHX_ packWARN(WARN_REDEFINE),
6245 CvCONST(cv) ? "Constant subroutine %s redefined"
6246 : "Subroutine %s redefined", name);
6247 CopLINE_set(PL_curcop, oldline);
6250 if (!PL_minus_c) /* keep old one around for madskills */
6253 /* (PL_madskills unset in used file.) */
6261 SvREFCNT_inc_simple_void_NN(const_sv);
6263 assert(!CvROOT(cv) && !CvCONST(cv));
6264 sv_setpvs(MUTABLE_SV(cv), ""); /* prototype is "" */
6265 CvXSUBANY(cv).any_ptr = const_sv;
6266 CvXSUB(cv) = const_sv_xsub;
6272 cv = newCONSTSUB(NULL, name, const_sv);
6274 mro_method_changed_in( /* sub Foo::Bar () { 123 } */
6275 (CvGV(cv) && GvSTASH(CvGV(cv)))
6284 SvREFCNT_dec(PL_compcv);
6288 if (cv) { /* must reuse cv if autoloaded */
6289 /* transfer PL_compcv to cv */
6292 && block->op_type != OP_NULL
6295 cv_flags_t existing_builtin_attrs = CvFLAGS(cv) & CVf_BUILTIN_ATTRS;
6296 AV *const temp_av = CvPADLIST(cv);
6297 CV *const temp_cv = CvOUTSIDE(cv);
6299 assert(!CvWEAKOUTSIDE(cv));
6300 assert(!CvCVGV_RC(cv));
6301 assert(CvGV(cv) == gv);
6304 CvFLAGS(cv) = CvFLAGS(PL_compcv) | existing_builtin_attrs;
6305 CvOUTSIDE(cv) = CvOUTSIDE(PL_compcv);
6306 CvOUTSIDE_SEQ(cv) = CvOUTSIDE_SEQ(PL_compcv);
6307 CvPADLIST(cv) = CvPADLIST(PL_compcv);
6308 CvOUTSIDE(PL_compcv) = temp_cv;
6309 CvPADLIST(PL_compcv) = temp_av;
6312 if (CvFILE(cv) && !CvISXSUB(cv)) {
6313 /* for XSUBs CvFILE point directly to static memory; __FILE__ */
6314 Safefree(CvFILE(cv));
6317 CvFILE_set_from_cop(cv, PL_curcop);
6318 CvSTASH_set(cv, PL_curstash);
6320 /* inner references to PL_compcv must be fixed up ... */
6321 pad_fixup_inner_anons(CvPADLIST(cv), PL_compcv, cv);
6322 if (PERLDB_INTER)/* Advice debugger on the new sub. */
6323 ++PL_sub_generation;
6326 /* Might have had built-in attributes applied -- propagate them. */
6327 CvFLAGS(cv) |= (CvFLAGS(PL_compcv) & CVf_BUILTIN_ATTRS);
6329 /* ... before we throw it away */
6330 SvREFCNT_dec(PL_compcv);
6338 if (strEQ(name, "import")) {
6339 PL_formfeed = MUTABLE_SV(cv);
6340 /* diag_listed_as: SKIPME */
6341 Perl_warner(aTHX_ packWARN(WARN_VOID), "0x%"UVxf"\n", PTR2UV(cv));
6345 mro_method_changed_in(GvSTASH(gv)); /* sub Foo::bar { (shift)+1 } */
6350 CvFILE_set_from_cop(cv, PL_curcop);
6351 CvSTASH_set(cv, PL_curstash);
6354 /* Need to do a C<use attributes $stash_of_cv,\&cv,@attrs>. */
6355 HV *stash = name && GvSTASH(CvGV(cv)) ? GvSTASH(CvGV(cv)) : PL_curstash;
6356 apply_attrs(stash, MUTABLE_SV(cv), attrs, FALSE);
6360 sv_setpvn(MUTABLE_SV(cv), ps, ps_len);
6362 if (PL_parser && PL_parser->error_count) {
6366 const char *s = strrchr(name, ':');
6368 if (strEQ(s, "BEGIN")) {
6369 const char not_safe[] =
6370 "BEGIN not safe after errors--compilation aborted";
6371 if (PL_in_eval & EVAL_KEEPERR)
6372 Perl_croak(aTHX_ not_safe);
6374 /* force display of errors found but not reported */
6375 sv_catpv(ERRSV, not_safe);
6376 Perl_croak(aTHX_ "%"SVf, SVfARG(ERRSV));
6385 /* If we assign an optree to a PVCV, then we've defined a subroutine that
6386 the debugger could be able to set a breakpoint in, so signal to
6387 pp_entereval that it should not throw away any saved lines at scope
6390 PL_breakable_sub_gen++;
6391 /* This makes sub {}; work as expected. */
6392 if (block->op_type == OP_STUB) {
6393 OP* const newblock = newSTATEOP(0, NULL, 0);
6395 op_getmad(block,newblock,'B');
6401 else block->op_attached = 1;
6402 CvROOT(cv) = CvLVALUE(cv)
6403 ? newUNOP(OP_LEAVESUBLV, 0,
6404 op_lvalue(scalarseq(block), OP_LEAVESUBLV))
6405 : newUNOP(OP_LEAVESUB, 0, scalarseq(block));
6406 CvROOT(cv)->op_private |= OPpREFCOUNTED;
6407 OpREFCNT_set(CvROOT(cv), 1);
6408 CvSTART(cv) = LINKLIST(CvROOT(cv));
6409 CvROOT(cv)->op_next = 0;
6410 CALL_PEEP(CvSTART(cv));
6412 /* now that optimizer has done its work, adjust pad values */
6414 pad_tidy(CvCLONE(cv) ? padtidy_SUBCLONE : padtidy_SUB);
6417 assert(!CvCONST(cv));
6418 if (ps && !*ps && op_const_sv(block, cv))
6423 if (PERLDB_SUBLINE && PL_curstash != PL_debstash) {
6424 SV * const tmpstr = sv_newmortal();
6425 GV * const db_postponed = gv_fetchpvs("DB::postponed",
6426 GV_ADDMULTI, SVt_PVHV);
6428 SV * const sv = Perl_newSVpvf(aTHX_ "%s:%ld-%ld",
6431 (long)CopLINE(PL_curcop));
6432 gv_efullname3(tmpstr, gv, NULL);
6433 (void)hv_store(GvHV(PL_DBsub), SvPVX_const(tmpstr),
6434 SvCUR(tmpstr), sv, 0);
6435 hv = GvHVn(db_postponed);
6436 if (HvTOTALKEYS(hv) > 0 && hv_exists(hv, SvPVX_const(tmpstr), SvCUR(tmpstr))) {
6437 CV * const pcv = GvCV(db_postponed);
6443 call_sv(MUTABLE_SV(pcv), G_DISCARD);
6448 if (name && ! (PL_parser && PL_parser->error_count))
6449 process_special_blocks(name, gv, cv);
6454 PL_parser->copline = NOLINE;
6460 S_process_special_blocks(pTHX_ const char *const fullname, GV *const gv,
6463 const char *const colon = strrchr(fullname,':');
6464 const char *const name = colon ? colon + 1 : fullname;
6466 PERL_ARGS_ASSERT_PROCESS_SPECIAL_BLOCKS;
6469 if (strEQ(name, "BEGIN")) {
6470 const I32 oldscope = PL_scopestack_ix;
6472 SAVECOPFILE(&PL_compiling);
6473 SAVECOPLINE(&PL_compiling);
6475 DEBUG_x( dump_sub(gv) );
6476 Perl_av_create_and_push(aTHX_ &PL_beginav, MUTABLE_SV(cv));
6477 GvCV_set(gv,0); /* cv has been hijacked */
6478 call_list(oldscope, PL_beginav);
6480 PL_curcop = &PL_compiling;
6481 CopHINTS_set(&PL_compiling, PL_hints);
6488 if strEQ(name, "END") {
6489 DEBUG_x( dump_sub(gv) );
6490 Perl_av_create_and_unshift_one(aTHX_ &PL_endav, MUTABLE_SV(cv));
6493 } else if (*name == 'U') {
6494 if (strEQ(name, "UNITCHECK")) {
6495 /* It's never too late to run a unitcheck block */
6496 Perl_av_create_and_unshift_one(aTHX_ &PL_unitcheckav, MUTABLE_SV(cv));
6500 } else if (*name == 'C') {
6501 if (strEQ(name, "CHECK")) {
6503 Perl_ck_warner(aTHX_ packWARN(WARN_VOID),
6504 "Too late to run CHECK block");
6505 Perl_av_create_and_unshift_one(aTHX_ &PL_checkav, MUTABLE_SV(cv));
6509 } else if (*name == 'I') {
6510 if (strEQ(name, "INIT")) {
6512 Perl_ck_warner(aTHX_ packWARN(WARN_VOID),
6513 "Too late to run INIT block");
6514 Perl_av_create_and_push(aTHX_ &PL_initav, MUTABLE_SV(cv));
6520 DEBUG_x( dump_sub(gv) );
6521 GvCV_set(gv,0); /* cv has been hijacked */
6526 =for apidoc newCONSTSUB
6528 Creates a constant sub equivalent to Perl C<sub FOO () { 123 }> which is
6529 eligible for inlining at compile-time.
6531 Passing NULL for SV creates a constant sub equivalent to C<sub BAR () {}>,
6532 which won't be called if used as a destructor, but will suppress the overhead
6533 of a call to C<AUTOLOAD>. (This form, however, isn't eligible for inlining at
6540 Perl_newCONSTSUB(pTHX_ HV *stash, const char *name, SV *sv)
6545 const char *const file = CopFILE(PL_curcop);
6547 SV *const temp_sv = CopFILESV(PL_curcop);
6548 const char *const file = temp_sv ? SvPV_nolen_const(temp_sv) : NULL;
6553 if (IN_PERL_RUNTIME) {
6554 /* at runtime, it's not safe to manipulate PL_curcop: it may be
6555 * an op shared between threads. Use a non-shared COP for our
6557 SAVEVPTR(PL_curcop);
6558 PL_curcop = &PL_compiling;
6560 SAVECOPLINE(PL_curcop);
6561 CopLINE_set(PL_curcop, PL_parser ? PL_parser->copline : NOLINE);
6564 PL_hints &= ~HINT_BLOCK_SCOPE;
6567 SAVESPTR(PL_curstash);
6568 SAVECOPSTASH(PL_curcop);
6569 PL_curstash = stash;
6570 CopSTASH_set(PL_curcop,stash);
6573 /* file becomes the CvFILE. For an XS, it's supposed to be static storage,
6574 and so doesn't get free()d. (It's expected to be from the C pre-
6575 processor __FILE__ directive). But we need a dynamically allocated one,
6576 and we need it to get freed. */
6577 cv = newXS_flags(name, const_sv_xsub, file ? file : "", "",
6578 XS_DYNAMIC_FILENAME);
6579 CvXSUBANY(cv).any_ptr = sv;
6584 CopSTASH_free(PL_curcop);
6592 Perl_newXS_flags(pTHX_ const char *name, XSUBADDR_t subaddr,
6593 const char *const filename, const char *const proto,
6596 CV *cv = newXS(name, subaddr, filename);
6598 PERL_ARGS_ASSERT_NEWXS_FLAGS;
6600 if (flags & XS_DYNAMIC_FILENAME) {
6601 /* We need to "make arrangements" (ie cheat) to ensure that the
6602 filename lasts as long as the PVCV we just created, but also doesn't
6604 STRLEN filename_len = strlen(filename);
6605 STRLEN proto_and_file_len = filename_len;
6606 char *proto_and_file;
6610 proto_len = strlen(proto);
6611 proto_and_file_len += proto_len;
6613 Newx(proto_and_file, proto_and_file_len + 1, char);
6614 Copy(proto, proto_and_file, proto_len, char);
6615 Copy(filename, proto_and_file + proto_len, filename_len + 1, char);
6618 proto_and_file = savepvn(filename, filename_len);
6621 /* This gets free()d. :-) */
6622 sv_usepvn_flags(MUTABLE_SV(cv), proto_and_file, proto_and_file_len,
6623 SV_HAS_TRAILING_NUL);
6625 /* This gives us the correct prototype, rather than one with the
6626 file name appended. */
6627 SvCUR_set(cv, proto_len);
6631 CvFILE(cv) = proto_and_file + proto_len;
6633 sv_setpv(MUTABLE_SV(cv), proto);
6639 =for apidoc U||newXS
6641 Used by C<xsubpp> to hook up XSUBs as Perl subs. I<filename> needs to be
6642 static storage, as it is used directly as CvFILE(), without a copy being made.
6648 Perl_newXS(pTHX_ const char *name, XSUBADDR_t subaddr, const char *filename)
6651 GV * const gv = gv_fetchpv(name ? name :
6652 (PL_curstash ? "__ANON__" : "__ANON__::__ANON__"),
6653 GV_ADDMULTI, SVt_PVCV);
6656 PERL_ARGS_ASSERT_NEWXS;
6659 Perl_croak(aTHX_ "panic: no address for '%s' in '%s'", name, filename);
6661 if ((cv = (name ? GvCV(gv) : NULL))) {
6663 /* just a cached method */
6667 else if (CvROOT(cv) || CvXSUB(cv) || GvASSUMECV(gv)) {
6668 /* already defined (or promised) */
6669 /* XXX It's possible for this HvNAME_get to return null, and get passed into strEQ */
6670 if (ckWARN(WARN_REDEFINE)) {
6671 GV * const gvcv = CvGV(cv);
6673 HV * const stash = GvSTASH(gvcv);
6675 const char *redefined_name = HvNAME_get(stash);
6676 if ( strEQ(redefined_name,"autouse") ) {
6677 const line_t oldline = CopLINE(PL_curcop);
6678 if (PL_parser && PL_parser->copline != NOLINE)
6679 CopLINE_set(PL_curcop, PL_parser->copline);
6680 Perl_warner(aTHX_ packWARN(WARN_REDEFINE),
6681 CvCONST(cv) ? "Constant subroutine %s redefined"
6682 : "Subroutine %s redefined"
6684 CopLINE_set(PL_curcop, oldline);
6694 if (cv) /* must reuse cv if autoloaded */
6697 cv = MUTABLE_CV(newSV_type(SVt_PVCV));
6701 mro_method_changed_in(GvSTASH(gv)); /* newXS */
6707 (void)gv_fetchfile(filename);
6708 CvFILE(cv) = (char *)filename; /* NOTE: not copied, as it is expected to be
6709 an external constant string */
6711 CvXSUB(cv) = subaddr;
6714 process_special_blocks(name, gv, cv);
6724 Perl_newFORM(pTHX_ I32 floor, OP *o, OP *block)
6729 OP* pegop = newOP(OP_NULL, 0);
6733 ? gv_fetchsv(cSVOPo->op_sv, GV_ADD, SVt_PVFM)
6734 : gv_fetchpvs("STDOUT", GV_ADD|GV_NOTQUAL, SVt_PVFM);
6737 if ((cv = GvFORM(gv))) {
6738 if (ckWARN(WARN_REDEFINE)) {
6739 const line_t oldline = CopLINE(PL_curcop);
6740 if (PL_parser && PL_parser->copline != NOLINE)
6741 CopLINE_set(PL_curcop, PL_parser->copline);
6743 Perl_warner(aTHX_ packWARN(WARN_REDEFINE),
6744 "Format %"SVf" redefined", SVfARG(cSVOPo->op_sv));
6746 Perl_warner(aTHX_ packWARN(WARN_REDEFINE),
6747 "Format STDOUT redefined");
6749 CopLINE_set(PL_curcop, oldline);
6756 CvFILE_set_from_cop(cv, PL_curcop);
6759 pad_tidy(padtidy_FORMAT);
6760 CvROOT(cv) = newUNOP(OP_LEAVEWRITE, 0, scalarseq(block));
6761 CvROOT(cv)->op_private |= OPpREFCOUNTED;
6762 OpREFCNT_set(CvROOT(cv), 1);
6763 CvSTART(cv) = LINKLIST(CvROOT(cv));
6764 CvROOT(cv)->op_next = 0;
6765 CALL_PEEP(CvSTART(cv));
6767 op_getmad(o,pegop,'n');
6768 op_getmad_weak(block, pegop, 'b');
6773 PL_parser->copline = NOLINE;
6781 Perl_newANONLIST(pTHX_ OP *o)
6783 return convert(OP_ANONLIST, OPf_SPECIAL, o);
6787 Perl_newANONHASH(pTHX_ OP *o)
6789 return convert(OP_ANONHASH, OPf_SPECIAL, o);
6793 Perl_newANONSUB(pTHX_ I32 floor, OP *proto, OP *block)
6795 return newANONATTRSUB(floor, proto, NULL, block);
6799 Perl_newANONATTRSUB(pTHX_ I32 floor, OP *proto, OP *attrs, OP *block)
6801 return newUNOP(OP_REFGEN, 0,
6802 newSVOP(OP_ANONCODE, 0,
6803 MUTABLE_SV(newATTRSUB(floor, 0, proto, attrs, block))));
6807 Perl_oopsAV(pTHX_ OP *o)
6811 PERL_ARGS_ASSERT_OOPSAV;
6813 switch (o->op_type) {
6815 o->op_type = OP_PADAV;
6816 o->op_ppaddr = PL_ppaddr[OP_PADAV];
6817 return ref(o, OP_RV2AV);
6820 o->op_type = OP_RV2AV;
6821 o->op_ppaddr = PL_ppaddr[OP_RV2AV];
6826 Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL), "oops: oopsAV");
6833 Perl_oopsHV(pTHX_ OP *o)
6837 PERL_ARGS_ASSERT_OOPSHV;
6839 switch (o->op_type) {
6842 o->op_type = OP_PADHV;
6843 o->op_ppaddr = PL_ppaddr[OP_PADHV];
6844 return ref(o, OP_RV2HV);
6848 o->op_type = OP_RV2HV;
6849 o->op_ppaddr = PL_ppaddr[OP_RV2HV];
6854 Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL), "oops: oopsHV");
6861 Perl_newAVREF(pTHX_ OP *o)
6865 PERL_ARGS_ASSERT_NEWAVREF;
6867 if (o->op_type == OP_PADANY) {
6868 o->op_type = OP_PADAV;
6869 o->op_ppaddr = PL_ppaddr[OP_PADAV];
6872 else if ((o->op_type == OP_RV2AV || o->op_type == OP_PADAV)) {
6873 Perl_ck_warner_d(aTHX_ packWARN(WARN_DEPRECATED),
6874 "Using an array as a reference is deprecated");
6876 return newUNOP(OP_RV2AV, 0, scalar(o));
6880 Perl_newGVREF(pTHX_ I32 type, OP *o)
6882 if (type == OP_MAPSTART || type == OP_GREPSTART || type == OP_SORT)
6883 return newUNOP(OP_NULL, 0, o);
6884 return ref(newUNOP(OP_RV2GV, OPf_REF, o), type);
6888 Perl_newHVREF(pTHX_ OP *o)
6892 PERL_ARGS_ASSERT_NEWHVREF;
6894 if (o->op_type == OP_PADANY) {
6895 o->op_type = OP_PADHV;
6896 o->op_ppaddr = PL_ppaddr[OP_PADHV];
6899 else if ((o->op_type == OP_RV2HV || o->op_type == OP_PADHV)) {
6900 Perl_ck_warner_d(aTHX_ packWARN(WARN_DEPRECATED),
6901 "Using a hash as a reference is deprecated");
6903 return newUNOP(OP_RV2HV, 0, scalar(o));
6907 Perl_newCVREF(pTHX_ I32 flags, OP *o)
6909 return newUNOP(OP_RV2CV, flags, scalar(o));
6913 Perl_newSVREF(pTHX_ OP *o)
6917 PERL_ARGS_ASSERT_NEWSVREF;
6919 if (o->op_type == OP_PADANY) {
6920 o->op_type = OP_PADSV;
6921 o->op_ppaddr = PL_ppaddr[OP_PADSV];
6924 return newUNOP(OP_RV2SV, 0, scalar(o));
6927 /* Check routines. See the comments at the top of this file for details
6928 * on when these are called */
6931 Perl_ck_anoncode(pTHX_ OP *o)
6933 PERL_ARGS_ASSERT_CK_ANONCODE;
6935 cSVOPo->op_targ = pad_add_anon(cSVOPo->op_sv, o->op_type);
6937 cSVOPo->op_sv = NULL;
6942 Perl_ck_bitop(pTHX_ OP *o)
6946 PERL_ARGS_ASSERT_CK_BITOP;
6948 #define OP_IS_NUMCOMPARE(op) \
6949 ((op) == OP_LT || (op) == OP_I_LT || \
6950 (op) == OP_GT || (op) == OP_I_GT || \
6951 (op) == OP_LE || (op) == OP_I_LE || \
6952 (op) == OP_GE || (op) == OP_I_GE || \
6953 (op) == OP_EQ || (op) == OP_I_EQ || \
6954 (op) == OP_NE || (op) == OP_I_NE || \
6955 (op) == OP_NCMP || (op) == OP_I_NCMP)
6956 o->op_private = (U8)(PL_hints & HINT_INTEGER);
6957 if (!(o->op_flags & OPf_STACKED) /* Not an assignment */
6958 && (o->op_type == OP_BIT_OR
6959 || o->op_type == OP_BIT_AND
6960 || o->op_type == OP_BIT_XOR))
6962 const OP * const left = cBINOPo->op_first;
6963 const OP * const right = left->op_sibling;
6964 if ((OP_IS_NUMCOMPARE(left->op_type) &&
6965 (left->op_flags & OPf_PARENS) == 0) ||
6966 (OP_IS_NUMCOMPARE(right->op_type) &&
6967 (right->op_flags & OPf_PARENS) == 0))
6968 Perl_ck_warner(aTHX_ packWARN(WARN_PRECEDENCE),
6969 "Possible precedence problem on bitwise %c operator",
6970 o->op_type == OP_BIT_OR ? '|'
6971 : o->op_type == OP_BIT_AND ? '&' : '^'
6978 Perl_ck_concat(pTHX_ OP *o)
6980 const OP * const kid = cUNOPo->op_first;
6982 PERL_ARGS_ASSERT_CK_CONCAT;
6983 PERL_UNUSED_CONTEXT;
6985 if (kid->op_type == OP_CONCAT && !(kid->op_private & OPpTARGET_MY) &&
6986 !(kUNOP->op_first->op_flags & OPf_MOD))
6987 o->op_flags |= OPf_STACKED;
6992 Perl_ck_spair(pTHX_ OP *o)
6996 PERL_ARGS_ASSERT_CK_SPAIR;
6998 if (o->op_flags & OPf_KIDS) {
7001 const OPCODE type = o->op_type;
7002 o = modkids(ck_fun(o), type);
7003 kid = cUNOPo->op_first;
7004 newop = kUNOP->op_first->op_sibling;
7006 const OPCODE type = newop->op_type;
7007 if (newop->op_sibling || !(PL_opargs[type] & OA_RETSCALAR) ||
7008 type == OP_PADAV || type == OP_PADHV ||
7009 type == OP_RV2AV || type == OP_RV2HV)
7013 op_getmad(kUNOP->op_first,newop,'K');
7015 op_free(kUNOP->op_first);
7017 kUNOP->op_first = newop;
7019 o->op_ppaddr = PL_ppaddr[++o->op_type];
7024 Perl_ck_delete(pTHX_ OP *o)
7026 PERL_ARGS_ASSERT_CK_DELETE;
7030 if (o->op_flags & OPf_KIDS) {
7031 OP * const kid = cUNOPo->op_first;
7032 switch (kid->op_type) {
7034 o->op_flags |= OPf_SPECIAL;
7037 o->op_private |= OPpSLICE;
7040 o->op_flags |= OPf_SPECIAL;
7045 Perl_croak(aTHX_ "%s argument is not a HASH or ARRAY element or slice",
7048 if (kid->op_private & OPpLVAL_INTRO)
7049 o->op_private |= OPpLVAL_INTRO;
7056 Perl_ck_die(pTHX_ OP *o)
7058 PERL_ARGS_ASSERT_CK_DIE;
7061 if (VMSISH_HUSHED) o->op_private |= OPpHUSH_VMSISH;
7067 Perl_ck_eof(pTHX_ OP *o)
7071 PERL_ARGS_ASSERT_CK_EOF;
7073 if (o->op_flags & OPf_KIDS) {
7074 if (cLISTOPo->op_first->op_type == OP_STUB) {
7076 = newUNOP(o->op_type, OPf_SPECIAL, newGVOP(OP_GV, 0, PL_argvgv));
7078 op_getmad(o,newop,'O');
7090 Perl_ck_eval(pTHX_ OP *o)
7094 PERL_ARGS_ASSERT_CK_EVAL;
7096 PL_hints |= HINT_BLOCK_SCOPE;
7097 if (o->op_flags & OPf_KIDS) {
7098 SVOP * const kid = (SVOP*)cUNOPo->op_first;
7101 o->op_flags &= ~OPf_KIDS;
7104 else if (kid->op_type == OP_LINESEQ || kid->op_type == OP_STUB) {
7110 cUNOPo->op_first = 0;
7115 NewOp(1101, enter, 1, LOGOP);
7116 enter->op_type = OP_ENTERTRY;
7117 enter->op_ppaddr = PL_ppaddr[OP_ENTERTRY];
7118 enter->op_private = 0;
7120 /* establish postfix order */
7121 enter->op_next = (OP*)enter;
7123 o = op_prepend_elem(OP_LINESEQ, (OP*)enter, (OP*)kid);
7124 o->op_type = OP_LEAVETRY;
7125 o->op_ppaddr = PL_ppaddr[OP_LEAVETRY];
7126 enter->op_other = o;
7127 op_getmad(oldo,o,'O');
7141 o = newUNOP(OP_ENTEREVAL, 0, newDEFSVOP());
7142 op_getmad(oldo,o,'O');
7144 o->op_targ = (PADOFFSET)PL_hints;
7145 if ((PL_hints & HINT_LOCALIZE_HH) != 0 && GvHV(PL_hintgv)) {
7146 /* Store a copy of %^H that pp_entereval can pick up. */
7147 OP *hhop = newSVOP(OP_HINTSEVAL, 0,
7148 MUTABLE_SV(hv_copy_hints_hv(GvHV(PL_hintgv))));
7149 cUNOPo->op_first->op_sibling = hhop;
7150 o->op_private |= OPpEVAL_HAS_HH;
7156 Perl_ck_exit(pTHX_ OP *o)
7158 PERL_ARGS_ASSERT_CK_EXIT;
7161 HV * const table = GvHV(PL_hintgv);
7163 SV * const * const svp = hv_fetchs(table, "vmsish_exit", FALSE);
7164 if (svp && *svp && SvTRUE(*svp))
7165 o->op_private |= OPpEXIT_VMSISH;
7167 if (VMSISH_HUSHED) o->op_private |= OPpHUSH_VMSISH;
7173 Perl_ck_exec(pTHX_ OP *o)
7175 PERL_ARGS_ASSERT_CK_EXEC;
7177 if (o->op_flags & OPf_STACKED) {
7180 kid = cUNOPo->op_first->op_sibling;
7181 if (kid->op_type == OP_RV2GV)
7190 Perl_ck_exists(pTHX_ OP *o)
7194 PERL_ARGS_ASSERT_CK_EXISTS;
7197 if (o->op_flags & OPf_KIDS) {
7198 OP * const kid = cUNOPo->op_first;
7199 if (kid->op_type == OP_ENTERSUB) {
7200 (void) ref(kid, o->op_type);
7201 if (kid->op_type != OP_RV2CV
7202 && !(PL_parser && PL_parser->error_count))
7203 Perl_croak(aTHX_ "%s argument is not a subroutine name",
7205 o->op_private |= OPpEXISTS_SUB;
7207 else if (kid->op_type == OP_AELEM)
7208 o->op_flags |= OPf_SPECIAL;
7209 else if (kid->op_type != OP_HELEM)
7210 Perl_croak(aTHX_ "%s argument is not a HASH or ARRAY element or a subroutine",
7218 Perl_ck_rvconst(pTHX_ register OP *o)
7221 SVOP * const kid = (SVOP*)cUNOPo->op_first;
7223 PERL_ARGS_ASSERT_CK_RVCONST;
7225 o->op_private |= (PL_hints & HINT_STRICT_REFS);
7226 if (o->op_type == OP_RV2CV)
7227 o->op_private &= ~1;
7229 if (kid->op_type == OP_CONST) {
7232 SV * const kidsv = kid->op_sv;
7234 /* Is it a constant from cv_const_sv()? */
7235 if (SvROK(kidsv) && SvREADONLY(kidsv)) {
7236 SV * const rsv = SvRV(kidsv);
7237 const svtype type = SvTYPE(rsv);
7238 const char *badtype = NULL;
7240 switch (o->op_type) {
7242 if (type > SVt_PVMG)
7243 badtype = "a SCALAR";
7246 if (type != SVt_PVAV)
7247 badtype = "an ARRAY";
7250 if (type != SVt_PVHV)
7254 if (type != SVt_PVCV)
7259 Perl_croak(aTHX_ "Constant is not %s reference", badtype);
7262 if ((o->op_private & HINT_STRICT_REFS) && (kid->op_private & OPpCONST_BARE)) {
7263 const char *badthing;
7264 switch (o->op_type) {
7266 badthing = "a SCALAR";
7269 badthing = "an ARRAY";
7272 badthing = "a HASH";
7280 "Can't use bareword (\"%"SVf"\") as %s ref while \"strict refs\" in use",
7281 SVfARG(kidsv), badthing);
7284 * This is a little tricky. We only want to add the symbol if we
7285 * didn't add it in the lexer. Otherwise we get duplicate strict
7286 * warnings. But if we didn't add it in the lexer, we must at
7287 * least pretend like we wanted to add it even if it existed before,
7288 * or we get possible typo warnings. OPpCONST_ENTERED says
7289 * whether the lexer already added THIS instance of this symbol.
7291 iscv = (o->op_type == OP_RV2CV) * 2;
7293 gv = gv_fetchsv(kidsv,
7294 iscv | !(kid->op_private & OPpCONST_ENTERED),
7297 : o->op_type == OP_RV2SV
7299 : o->op_type == OP_RV2AV
7301 : o->op_type == OP_RV2HV
7304 } while (!gv && !(kid->op_private & OPpCONST_ENTERED) && !iscv++);
7306 kid->op_type = OP_GV;
7307 SvREFCNT_dec(kid->op_sv);
7309 /* XXX hack: dependence on sizeof(PADOP) <= sizeof(SVOP) */
7310 kPADOP->op_padix = pad_alloc(OP_GV, SVs_PADTMP);
7311 SvREFCNT_dec(PAD_SVl(kPADOP->op_padix));
7313 PAD_SETSV(kPADOP->op_padix, MUTABLE_SV(SvREFCNT_inc_simple_NN(gv)));
7315 kid->op_sv = SvREFCNT_inc_simple_NN(gv);
7317 kid->op_private = 0;
7318 kid->op_ppaddr = PL_ppaddr[OP_GV];
7319 /* FAKE globs in the symbol table cause weird bugs (#77810) */
7327 Perl_ck_ftst(pTHX_ OP *o)
7330 const I32 type = o->op_type;
7332 PERL_ARGS_ASSERT_CK_FTST;
7334 if (o->op_flags & OPf_REF) {
7337 else if (o->op_flags & OPf_KIDS && cUNOPo->op_first->op_type != OP_STUB) {
7338 SVOP * const kid = (SVOP*)cUNOPo->op_first;
7339 const OPCODE kidtype = kid->op_type;
7341 if (kidtype == OP_CONST && (kid->op_private & OPpCONST_BARE)) {
7342 OP * const newop = newGVOP(type, OPf_REF,
7343 gv_fetchsv(kid->op_sv, GV_ADD, SVt_PVIO));
7345 op_getmad(o,newop,'O');
7351 if ((PL_hints & HINT_FILETEST_ACCESS) && OP_IS_FILETEST_ACCESS(o->op_type))
7352 o->op_private |= OPpFT_ACCESS;
7353 if (PL_check[kidtype] == Perl_ck_ftst
7354 && kidtype != OP_STAT && kidtype != OP_LSTAT)
7355 o->op_private |= OPpFT_STACKED;
7363 if (type == OP_FTTTY)
7364 o = newGVOP(type, OPf_REF, PL_stdingv);
7366 o = newUNOP(type, 0, newDEFSVOP());
7367 op_getmad(oldo,o,'O');
7373 Perl_ck_fun(pTHX_ OP *o)
7376 const int type = o->op_type;
7377 register I32 oa = PL_opargs[type] >> OASHIFT;
7379 PERL_ARGS_ASSERT_CK_FUN;
7381 if (o->op_flags & OPf_STACKED) {
7382 if ((oa & OA_OPTIONAL) && (oa >> 4) && !((oa >> 4) & OA_OPTIONAL))
7385 return no_fh_allowed(o);
7388 if (o->op_flags & OPf_KIDS) {
7389 OP **tokid = &cLISTOPo->op_first;
7390 register OP *kid = cLISTOPo->op_first;
7394 if (kid->op_type == OP_PUSHMARK ||
7395 (kid->op_type == OP_NULL && kid->op_targ == OP_PUSHMARK))
7397 tokid = &kid->op_sibling;
7398 kid = kid->op_sibling;
7400 if (!kid && PL_opargs[type] & OA_DEFGV)
7401 *tokid = kid = newDEFSVOP();
7405 sibl = kid->op_sibling;
7407 if (!sibl && kid->op_type == OP_STUB) {
7414 /* list seen where single (scalar) arg expected? */
7415 if (numargs == 1 && !(oa >> 4)
7416 && kid->op_type == OP_LIST && type != OP_SCALAR)
7418 return too_many_arguments(o,PL_op_desc[type]);
7431 if ((type == OP_PUSH || type == OP_UNSHIFT)
7432 && !kid->op_sibling)
7433 Perl_ck_warner(aTHX_ packWARN(WARN_SYNTAX),
7434 "Useless use of %s with no values",
7437 if (kid->op_type == OP_CONST &&
7438 (kid->op_private & OPpCONST_BARE))
7440 OP * const newop = newAVREF(newGVOP(OP_GV, 0,
7441 gv_fetchsv(((SVOP*)kid)->op_sv, GV_ADD, SVt_PVAV) ));
7442 Perl_ck_warner_d(aTHX_ packWARN(WARN_DEPRECATED),
7443 "Array @%"SVf" missing the @ in argument %"IVdf" of %s()",
7444 SVfARG(((SVOP*)kid)->op_sv), (IV)numargs, PL_op_desc[type]);
7446 op_getmad(kid,newop,'K');
7451 kid->op_sibling = sibl;
7454 else if (kid->op_type == OP_CONST
7455 && ( !SvROK(cSVOPx_sv(kid))
7456 || SvTYPE(SvRV(cSVOPx_sv(kid))) != SVt_PVAV )
7458 bad_type(numargs, "array", PL_op_desc[type], kid);
7459 /* Defer checks to run-time if we have a scalar arg */
7460 if (kid->op_type == OP_RV2AV || kid->op_type == OP_PADAV)
7461 op_lvalue(kid, type);
7465 if (kid->op_type == OP_CONST &&
7466 (kid->op_private & OPpCONST_BARE))
7468 OP * const newop = newHVREF(newGVOP(OP_GV, 0,
7469 gv_fetchsv(((SVOP*)kid)->op_sv, GV_ADD, SVt_PVHV) ));
7470 Perl_ck_warner_d(aTHX_ packWARN(WARN_DEPRECATED),
7471 "Hash %%%"SVf" missing the %% in argument %"IVdf" of %s()",
7472 SVfARG(((SVOP*)kid)->op_sv), (IV)numargs, PL_op_desc[type]);
7474 op_getmad(kid,newop,'K');
7479 kid->op_sibling = sibl;
7482 else if (kid->op_type != OP_RV2HV && kid->op_type != OP_PADHV)
7483 bad_type(numargs, "hash", PL_op_desc[type], kid);
7484 op_lvalue(kid, type);
7488 OP * const newop = newUNOP(OP_NULL, 0, kid);
7489 kid->op_sibling = 0;
7491 newop->op_next = newop;
7493 kid->op_sibling = sibl;
7498 if (kid->op_type != OP_GV && kid->op_type != OP_RV2GV) {
7499 if (kid->op_type == OP_CONST &&
7500 (kid->op_private & OPpCONST_BARE))
7502 OP * const newop = newGVOP(OP_GV, 0,
7503 gv_fetchsv(((SVOP*)kid)->op_sv, GV_ADD, SVt_PVIO));
7504 if (!(o->op_private & 1) && /* if not unop */
7505 kid == cLISTOPo->op_last)
7506 cLISTOPo->op_last = newop;
7508 op_getmad(kid,newop,'K');
7514 else if (kid->op_type == OP_READLINE) {
7515 /* neophyte patrol: open(<FH>), close(<FH>) etc. */
7516 bad_type(numargs, "HANDLE", OP_DESC(o), kid);
7519 I32 flags = OPf_SPECIAL;
7523 /* is this op a FH constructor? */
7524 if (is_handle_constructor(o,numargs)) {
7525 const char *name = NULL;
7529 /* Set a flag to tell rv2gv to vivify
7530 * need to "prove" flag does not mean something
7531 * else already - NI-S 1999/05/07
7534 if (kid->op_type == OP_PADSV) {
7536 = PAD_COMPNAME_SV(kid->op_targ);
7537 name = SvPV_const(namesv, len);
7539 else if (kid->op_type == OP_RV2SV
7540 && kUNOP->op_first->op_type == OP_GV)
7542 GV * const gv = cGVOPx_gv(kUNOP->op_first);
7544 len = GvNAMELEN(gv);
7546 else if (kid->op_type == OP_AELEM
7547 || kid->op_type == OP_HELEM)
7550 OP *op = ((BINOP*)kid)->op_first;
7554 const char * const a =
7555 kid->op_type == OP_AELEM ?
7557 if (((op->op_type == OP_RV2AV) ||
7558 (op->op_type == OP_RV2HV)) &&
7559 (firstop = ((UNOP*)op)->op_first) &&
7560 (firstop->op_type == OP_GV)) {
7561 /* packagevar $a[] or $h{} */
7562 GV * const gv = cGVOPx_gv(firstop);
7570 else if (op->op_type == OP_PADAV
7571 || op->op_type == OP_PADHV) {
7572 /* lexicalvar $a[] or $h{} */
7573 const char * const padname =
7574 PAD_COMPNAME_PV(op->op_targ);
7583 name = SvPV_const(tmpstr, len);
7588 name = "__ANONIO__";
7591 op_lvalue(kid, type);
7595 targ = pad_alloc(OP_RV2GV, SVs_PADTMP);
7596 namesv = PAD_SVl(targ);
7597 SvUPGRADE(namesv, SVt_PV);
7599 sv_setpvs(namesv, "$");
7600 sv_catpvn(namesv, name, len);
7603 kid->op_sibling = 0;
7604 kid = newUNOP(OP_RV2GV, flags, scalar(kid));
7605 kid->op_targ = targ;
7606 kid->op_private |= priv;
7608 kid->op_sibling = sibl;
7614 op_lvalue(scalar(kid), type);
7618 tokid = &kid->op_sibling;
7619 kid = kid->op_sibling;
7622 if (kid && kid->op_type != OP_STUB)
7623 return too_many_arguments(o,OP_DESC(o));
7624 o->op_private |= numargs;
7626 /* FIXME - should the numargs move as for the PERL_MAD case? */
7627 o->op_private |= numargs;
7629 return too_many_arguments(o,OP_DESC(o));
7633 else if (PL_opargs[type] & OA_DEFGV) {
7635 OP *newop = newUNOP(type, 0, newDEFSVOP());
7636 op_getmad(o,newop,'O');
7639 /* Ordering of these two is important to keep f_map.t passing. */
7641 return newUNOP(type, 0, newDEFSVOP());
7646 while (oa & OA_OPTIONAL)
7648 if (oa && oa != OA_LIST)
7649 return too_few_arguments(o,OP_DESC(o));
7655 Perl_ck_glob(pTHX_ OP *o)
7660 PERL_ARGS_ASSERT_CK_GLOB;
7663 if ((o->op_flags & OPf_KIDS) && !cLISTOPo->op_first->op_sibling)
7664 op_append_elem(OP_GLOB, o, newDEFSVOP()); /* glob() => glob($_) */
7666 if (!((gv = gv_fetchpvs("glob", GV_NOTQUAL, SVt_PVCV))
7667 && GvCVu(gv) && GvIMPORTED_CV(gv)))
7669 gv = gv_fetchpvs("CORE::GLOBAL::glob", 0, SVt_PVCV);
7672 #if !defined(PERL_EXTERNAL_GLOB)
7673 /* XXX this can be tightened up and made more failsafe. */
7674 if (!(gv && GvCVu(gv) && GvIMPORTED_CV(gv))) {
7677 Perl_load_module(aTHX_ PERL_LOADMOD_NOIMPORT,
7678 newSVpvs("File::Glob"), NULL, NULL, NULL);
7679 if((glob_gv = gv_fetchpvs("File::Glob::csh_glob", 0, SVt_PVCV))) {
7680 gv = gv_fetchpvs("CORE::GLOBAL::glob", 0, SVt_PVCV);
7681 GvCV_set(gv, GvCV(glob_gv));
7682 SvREFCNT_inc_void(MUTABLE_SV(GvCV(gv)));
7683 GvIMPORTED_CV_on(gv);
7687 #endif /* PERL_EXTERNAL_GLOB */
7689 assert(!(o->op_flags & OPf_SPECIAL));
7690 if (gv && GvCVu(gv) && GvIMPORTED_CV(gv)) {
7693 * \ null - const(wildcard)
7698 * \ mark - glob - rv2cv
7699 * | \ gv(CORE::GLOBAL::glob)
7701 * \ null - const(wildcard) - const(ix)
7703 o->op_flags |= OPf_SPECIAL;
7704 o->op_targ = pad_alloc(OP_GLOB, SVs_PADTMP);
7705 op_append_elem(OP_GLOB, o,
7706 newSVOP(OP_CONST, 0, newSViv(PL_glob_index++)));
7707 o = newLISTOP(OP_LIST, 0, o, NULL);
7708 o = newUNOP(OP_ENTERSUB, OPf_STACKED,
7709 op_append_elem(OP_LIST, o,
7710 scalar(newUNOP(OP_RV2CV, 0,
7711 newGVOP(OP_GV, 0, gv)))));
7712 o = newUNOP(OP_NULL, 0, ck_subr(o));
7713 o->op_targ = OP_GLOB; /* hint at what it used to be: eg in newWHILEOP */
7716 gv = newGVgen("main");
7718 op_append_elem(OP_GLOB, o, newGVOP(OP_GV, 0, gv));
7724 Perl_ck_grep(pTHX_ OP *o)
7729 const OPCODE type = o->op_type == OP_GREPSTART ? OP_GREPWHILE : OP_MAPWHILE;
7732 PERL_ARGS_ASSERT_CK_GREP;
7734 o->op_ppaddr = PL_ppaddr[OP_GREPSTART];
7735 /* don't allocate gwop here, as we may leak it if PL_parser->error_count > 0 */
7737 if (o->op_flags & OPf_STACKED) {
7740 kid = cUNOPx(cLISTOPo->op_first->op_sibling)->op_first;
7741 if (kid->op_type != OP_SCOPE && kid->op_type != OP_LEAVE)
7742 return no_fh_allowed(o);
7743 for (k = kid; k; k = k->op_next) {
7746 NewOp(1101, gwop, 1, LOGOP);
7747 kid->op_next = (OP*)gwop;
7748 o->op_flags &= ~OPf_STACKED;
7750 kid = cLISTOPo->op_first->op_sibling;
7751 if (type == OP_MAPWHILE)
7756 if (PL_parser && PL_parser->error_count)
7758 kid = cLISTOPo->op_first->op_sibling;
7759 if (kid->op_type != OP_NULL)
7760 Perl_croak(aTHX_ "panic: ck_grep");
7761 kid = kUNOP->op_first;
7764 NewOp(1101, gwop, 1, LOGOP);
7765 gwop->op_type = type;
7766 gwop->op_ppaddr = PL_ppaddr[type];
7767 gwop->op_first = listkids(o);
7768 gwop->op_flags |= OPf_KIDS;
7769 gwop->op_other = LINKLIST(kid);
7770 kid->op_next = (OP*)gwop;
7771 offset = Perl_pad_findmy(aTHX_ STR_WITH_LEN("$_"), 0);
7772 if (offset == NOT_IN_PAD || PAD_COMPNAME_FLAGS_isOUR(offset)) {
7773 o->op_private = gwop->op_private = 0;
7774 gwop->op_targ = pad_alloc(type, SVs_PADTMP);
7777 o->op_private = gwop->op_private = OPpGREP_LEX;
7778 gwop->op_targ = o->op_targ = offset;
7781 kid = cLISTOPo->op_first->op_sibling;
7782 if (!kid || !kid->op_sibling)
7783 return too_few_arguments(o,OP_DESC(o));
7784 for (kid = kid->op_sibling; kid; kid = kid->op_sibling)
7785 op_lvalue(kid, OP_GREPSTART);
7791 Perl_ck_index(pTHX_ OP *o)
7793 PERL_ARGS_ASSERT_CK_INDEX;
7795 if (o->op_flags & OPf_KIDS) {
7796 OP *kid = cLISTOPo->op_first->op_sibling; /* get past pushmark */
7798 kid = kid->op_sibling; /* get past "big" */
7799 if (kid && kid->op_type == OP_CONST)
7800 fbm_compile(((SVOP*)kid)->op_sv, 0);
7806 Perl_ck_lfun(pTHX_ OP *o)
7808 const OPCODE type = o->op_type;
7810 PERL_ARGS_ASSERT_CK_LFUN;
7812 return modkids(ck_fun(o), type);
7816 Perl_ck_defined(pTHX_ OP *o) /* 19990527 MJD */
7818 PERL_ARGS_ASSERT_CK_DEFINED;
7820 if ((o->op_flags & OPf_KIDS)) {
7821 switch (cUNOPo->op_first->op_type) {
7823 /* This is needed for
7824 if (defined %stash::)
7825 to work. Do not break Tk.
7827 break; /* Globals via GV can be undef */
7829 case OP_AASSIGN: /* Is this a good idea? */
7830 Perl_ck_warner_d(aTHX_ packWARN(WARN_DEPRECATED),
7831 "defined(@array) is deprecated");
7832 Perl_ck_warner_d(aTHX_ packWARN(WARN_DEPRECATED),
7833 "\t(Maybe you should just omit the defined()?)\n");
7837 Perl_ck_warner_d(aTHX_ packWARN(WARN_DEPRECATED),
7838 "defined(%%hash) is deprecated");
7839 Perl_ck_warner_d(aTHX_ packWARN(WARN_DEPRECATED),
7840 "\t(Maybe you should just omit the defined()?)\n");
7851 Perl_ck_readline(pTHX_ OP *o)
7853 PERL_ARGS_ASSERT_CK_READLINE;
7855 if (!(o->op_flags & OPf_KIDS)) {
7857 = newUNOP(OP_READLINE, 0, newGVOP(OP_GV, 0, PL_argvgv));
7859 op_getmad(o,newop,'O');
7869 Perl_ck_rfun(pTHX_ OP *o)
7871 const OPCODE type = o->op_type;
7873 PERL_ARGS_ASSERT_CK_RFUN;
7875 return refkids(ck_fun(o), type);
7879 Perl_ck_listiob(pTHX_ OP *o)
7883 PERL_ARGS_ASSERT_CK_LISTIOB;
7885 kid = cLISTOPo->op_first;
7888 kid = cLISTOPo->op_first;
7890 if (kid->op_type == OP_PUSHMARK)
7891 kid = kid->op_sibling;
7892 if (kid && o->op_flags & OPf_STACKED)
7893 kid = kid->op_sibling;
7894 else if (kid && !kid->op_sibling) { /* print HANDLE; */
7895 if (kid->op_type == OP_CONST && kid->op_private & OPpCONST_BARE) {
7896 o->op_flags |= OPf_STACKED; /* make it a filehandle */
7897 kid = newUNOP(OP_RV2GV, OPf_REF, scalar(kid));
7898 cLISTOPo->op_first->op_sibling = kid;
7899 cLISTOPo->op_last = kid;
7900 kid = kid->op_sibling;
7905 op_append_elem(o->op_type, o, newDEFSVOP());
7911 Perl_ck_smartmatch(pTHX_ OP *o)
7914 PERL_ARGS_ASSERT_CK_SMARTMATCH;
7915 if (0 == (o->op_flags & OPf_SPECIAL)) {
7916 OP *first = cBINOPo->op_first;
7917 OP *second = first->op_sibling;
7919 /* Implicitly take a reference to an array or hash */
7920 first->op_sibling = NULL;
7921 first = cBINOPo->op_first = ref_array_or_hash(first);
7922 second = first->op_sibling = ref_array_or_hash(second);
7924 /* Implicitly take a reference to a regular expression */
7925 if (first->op_type == OP_MATCH) {
7926 first->op_type = OP_QR;
7927 first->op_ppaddr = PL_ppaddr[OP_QR];
7929 if (second->op_type == OP_MATCH) {
7930 second->op_type = OP_QR;
7931 second->op_ppaddr = PL_ppaddr[OP_QR];
7940 Perl_ck_sassign(pTHX_ OP *o)
7943 OP * const kid = cLISTOPo->op_first;
7945 PERL_ARGS_ASSERT_CK_SASSIGN;
7947 /* has a disposable target? */
7948 if ((PL_opargs[kid->op_type] & OA_TARGLEX)
7949 && !(kid->op_flags & OPf_STACKED)
7950 /* Cannot steal the second time! */
7951 && !(kid->op_private & OPpTARGET_MY)
7952 /* Keep the full thing for madskills */
7956 OP * const kkid = kid->op_sibling;
7958 /* Can just relocate the target. */
7959 if (kkid && kkid->op_type == OP_PADSV
7960 && !(kkid->op_private & OPpLVAL_INTRO))
7962 kid->op_targ = kkid->op_targ;
7964 /* Now we do not need PADSV and SASSIGN. */
7965 kid->op_sibling = o->op_sibling; /* NULL */
7966 cLISTOPo->op_first = NULL;
7969 kid->op_private |= OPpTARGET_MY; /* Used for context settings */
7973 if (kid->op_sibling) {
7974 OP *kkid = kid->op_sibling;
7975 /* For state variable assignment, kkid is a list op whose op_last
7977 if ((kkid->op_type == OP_PADSV ||
7978 (kkid->op_type == OP_LIST &&
7979 (kkid = cLISTOPx(kkid)->op_last)->op_type == OP_PADSV
7982 && (kkid->op_private & OPpLVAL_INTRO)
7983 && SvPAD_STATE(*av_fetch(PL_comppad_name, kkid->op_targ, FALSE))) {
7984 const PADOFFSET target = kkid->op_targ;
7985 OP *const other = newOP(OP_PADSV,
7987 | ((kkid->op_private & ~OPpLVAL_INTRO) << 8));
7988 OP *const first = newOP(OP_NULL, 0);
7989 OP *const nullop = newCONDOP(0, first, o, other);
7990 OP *const condop = first->op_next;
7991 /* hijacking PADSTALE for uninitialized state variables */
7992 SvPADSTALE_on(PAD_SVl(target));
7994 condop->op_type = OP_ONCE;
7995 condop->op_ppaddr = PL_ppaddr[OP_ONCE];
7996 condop->op_targ = target;
7997 other->op_targ = target;
7999 /* Because we change the type of the op here, we will skip the
8000 assignment binop->op_last = binop->op_first->op_sibling; at the
8001 end of Perl_newBINOP(). So need to do it here. */
8002 cBINOPo->op_last = cBINOPo->op_first->op_sibling;
8011 Perl_ck_match(pTHX_ OP *o)
8015 PERL_ARGS_ASSERT_CK_MATCH;
8017 if (o->op_type != OP_QR && PL_compcv) {
8018 const PADOFFSET offset = Perl_pad_findmy(aTHX_ STR_WITH_LEN("$_"), 0);
8019 if (offset != NOT_IN_PAD && !(PAD_COMPNAME_FLAGS_isOUR(offset))) {
8020 o->op_targ = offset;
8021 o->op_private |= OPpTARGET_MY;
8024 if (o->op_type == OP_MATCH || o->op_type == OP_QR)
8025 o->op_private |= OPpRUNTIME;
8030 Perl_ck_method(pTHX_ OP *o)
8032 OP * const kid = cUNOPo->op_first;
8034 PERL_ARGS_ASSERT_CK_METHOD;
8036 if (kid->op_type == OP_CONST) {
8037 SV* sv = kSVOP->op_sv;
8038 const char * const method = SvPVX_const(sv);
8039 if (!(strchr(method, ':') || strchr(method, '\''))) {
8041 if (!SvREADONLY(sv) || !SvFAKE(sv)) {
8042 sv = newSVpvn_share(method, SvCUR(sv), 0);
8045 kSVOP->op_sv = NULL;
8047 cmop = newSVOP(OP_METHOD_NAMED, 0, sv);
8049 op_getmad(o,cmop,'O');
8060 Perl_ck_null(pTHX_ OP *o)
8062 PERL_ARGS_ASSERT_CK_NULL;
8063 PERL_UNUSED_CONTEXT;
8068 Perl_ck_open(pTHX_ OP *o)
8071 HV * const table = GvHV(PL_hintgv);
8073 PERL_ARGS_ASSERT_CK_OPEN;
8076 SV **svp = hv_fetchs(table, "open_IN", FALSE);
8079 const char *d = SvPV_const(*svp, len);
8080 const I32 mode = mode_from_discipline(d, len);
8081 if (mode & O_BINARY)
8082 o->op_private |= OPpOPEN_IN_RAW;
8083 else if (mode & O_TEXT)
8084 o->op_private |= OPpOPEN_IN_CRLF;
8087 svp = hv_fetchs(table, "open_OUT", FALSE);
8090 const char *d = SvPV_const(*svp, len);
8091 const I32 mode = mode_from_discipline(d, len);
8092 if (mode & O_BINARY)
8093 o->op_private |= OPpOPEN_OUT_RAW;
8094 else if (mode & O_TEXT)
8095 o->op_private |= OPpOPEN_OUT_CRLF;
8098 if (o->op_type == OP_BACKTICK) {
8099 if (!(o->op_flags & OPf_KIDS)) {
8100 OP * const newop = newUNOP(OP_BACKTICK, 0, newDEFSVOP());
8102 op_getmad(o,newop,'O');
8111 /* In case of three-arg dup open remove strictness
8112 * from the last arg if it is a bareword. */
8113 OP * const first = cLISTOPx(o)->op_first; /* The pushmark. */
8114 OP * const last = cLISTOPx(o)->op_last; /* The bareword. */
8118 if ((last->op_type == OP_CONST) && /* The bareword. */
8119 (last->op_private & OPpCONST_BARE) &&
8120 (last->op_private & OPpCONST_STRICT) &&
8121 (oa = first->op_sibling) && /* The fh. */
8122 (oa = oa->op_sibling) && /* The mode. */
8123 (oa->op_type == OP_CONST) &&
8124 SvPOK(((SVOP*)oa)->op_sv) &&
8125 (mode = SvPVX_const(((SVOP*)oa)->op_sv)) &&
8126 mode[0] == '>' && mode[1] == '&' && /* A dup open. */
8127 (last == oa->op_sibling)) /* The bareword. */
8128 last->op_private &= ~OPpCONST_STRICT;
8134 Perl_ck_repeat(pTHX_ OP *o)
8136 PERL_ARGS_ASSERT_CK_REPEAT;
8138 if (cBINOPo->op_first->op_flags & OPf_PARENS) {
8139 o->op_private |= OPpREPEAT_DOLIST;
8140 cBINOPo->op_first = force_list(cBINOPo->op_first);
8148 Perl_ck_require(pTHX_ OP *o)
8153 PERL_ARGS_ASSERT_CK_REQUIRE;
8155 if (o->op_flags & OPf_KIDS) { /* Shall we supply missing .pm? */
8156 SVOP * const kid = (SVOP*)cUNOPo->op_first;
8158 if (kid->op_type == OP_CONST && (kid->op_private & OPpCONST_BARE)) {
8159 SV * const sv = kid->op_sv;
8160 U32 was_readonly = SvREADONLY(sv);
8167 sv_force_normal_flags(sv, 0);
8168 assert(!SvREADONLY(sv));
8178 for (; s < end; s++) {
8179 if (*s == ':' && s[1] == ':') {
8181 Move(s+2, s+1, end - s - 1, char);
8186 sv_catpvs(sv, ".pm");
8187 SvFLAGS(sv) |= was_readonly;
8191 if (!(o->op_flags & OPf_SPECIAL)) { /* Wasn't written as CORE::require */
8192 /* handle override, if any */
8193 gv = gv_fetchpvs("require", GV_NOTQUAL, SVt_PVCV);
8194 if (!(gv && GvCVu(gv) && GvIMPORTED_CV(gv))) {
8195 GV * const * const gvp = (GV**)hv_fetchs(PL_globalstash, "require", FALSE);
8196 gv = gvp ? *gvp : NULL;
8200 if (gv && GvCVu(gv) && GvIMPORTED_CV(gv)) {
8201 OP * const kid = cUNOPo->op_first;
8204 cUNOPo->op_first = 0;
8208 newop = ck_subr(newUNOP(OP_ENTERSUB, OPf_STACKED,
8209 op_append_elem(OP_LIST, kid,
8210 scalar(newUNOP(OP_RV2CV, 0,
8213 op_getmad(o,newop,'O');
8217 return scalar(ck_fun(o));
8221 Perl_ck_return(pTHX_ OP *o)
8226 PERL_ARGS_ASSERT_CK_RETURN;
8228 kid = cLISTOPo->op_first->op_sibling;
8229 if (CvLVALUE(PL_compcv)) {
8230 for (; kid; kid = kid->op_sibling)
8231 op_lvalue(kid, OP_LEAVESUBLV);
8233 for (; kid; kid = kid->op_sibling)
8234 if ((kid->op_type == OP_NULL)
8235 && ((kid->op_flags & (OPf_SPECIAL|OPf_KIDS)) == (OPf_SPECIAL|OPf_KIDS))) {
8236 /* This is a do block */
8237 OP *op = kUNOP->op_first;
8238 if (op->op_type == OP_LEAVE && op->op_flags & OPf_KIDS) {
8239 op = cUNOPx(op)->op_first;
8240 assert(op->op_type == OP_ENTER && !(op->op_flags & OPf_SPECIAL));
8241 /* Force the use of the caller's context */
8242 op->op_flags |= OPf_SPECIAL;
8251 Perl_ck_select(pTHX_ OP *o)
8256 PERL_ARGS_ASSERT_CK_SELECT;
8258 if (o->op_flags & OPf_KIDS) {
8259 kid = cLISTOPo->op_first->op_sibling; /* get past pushmark */
8260 if (kid && kid->op_sibling) {
8261 o->op_type = OP_SSELECT;
8262 o->op_ppaddr = PL_ppaddr[OP_SSELECT];
8264 return fold_constants(o);
8268 kid = cLISTOPo->op_first->op_sibling; /* get past pushmark */
8269 if (kid && kid->op_type == OP_RV2GV)
8270 kid->op_private &= ~HINT_STRICT_REFS;
8275 Perl_ck_shift(pTHX_ OP *o)
8278 const I32 type = o->op_type;
8280 PERL_ARGS_ASSERT_CK_SHIFT;
8282 if (!(o->op_flags & OPf_KIDS)) {
8285 if (!CvUNIQUE(PL_compcv)) {
8286 o->op_flags |= OPf_SPECIAL;
8290 argop = newUNOP(OP_RV2AV, 0, scalar(newGVOP(OP_GV, 0, PL_argvgv)));
8293 OP * const oldo = o;
8294 o = newUNOP(type, 0, scalar(argop));
8295 op_getmad(oldo,o,'O');
8300 return newUNOP(type, 0, scalar(argop));
8303 return scalar(ck_fun(o));
8307 Perl_ck_sort(pTHX_ OP *o)
8312 PERL_ARGS_ASSERT_CK_SORT;
8314 if (o->op_type == OP_SORT && (PL_hints & HINT_LOCALIZE_HH) != 0) {
8315 HV * const hinthv = GvHV(PL_hintgv);
8317 SV ** const svp = hv_fetchs(hinthv, "sort", FALSE);
8319 const I32 sorthints = (I32)SvIV(*svp);
8320 if ((sorthints & HINT_SORT_QUICKSORT) != 0)
8321 o->op_private |= OPpSORT_QSORT;
8322 if ((sorthints & HINT_SORT_STABLE) != 0)
8323 o->op_private |= OPpSORT_STABLE;
8328 if (o->op_type == OP_SORT && o->op_flags & OPf_STACKED)
8330 firstkid = cLISTOPo->op_first->op_sibling; /* get past pushmark */
8331 if (o->op_flags & OPf_STACKED) { /* may have been cleared */
8333 OP *kid = cUNOPx(firstkid)->op_first; /* get past null */
8335 if (kid->op_type == OP_SCOPE || kid->op_type == OP_LEAVE) {
8337 if (kid->op_type == OP_SCOPE) {
8341 else if (kid->op_type == OP_LEAVE) {
8342 if (o->op_type == OP_SORT) {
8343 op_null(kid); /* wipe out leave */
8346 for (k = kLISTOP->op_first->op_next; k; k = k->op_next) {
8347 if (k->op_next == kid)
8349 /* don't descend into loops */
8350 else if (k->op_type == OP_ENTERLOOP
8351 || k->op_type == OP_ENTERITER)
8353 k = cLOOPx(k)->op_lastop;
8358 kid->op_next = 0; /* just disconnect the leave */
8359 k = kLISTOP->op_first;
8364 if (o->op_type == OP_SORT) {
8365 /* provide scalar context for comparison function/block */
8371 o->op_flags |= OPf_SPECIAL;
8373 else if (kid->op_type == OP_RV2SV || kid->op_type == OP_PADSV)
8376 firstkid = firstkid->op_sibling;
8379 /* provide list context for arguments */
8380 if (o->op_type == OP_SORT)
8387 S_simplify_sort(pTHX_ OP *o)
8390 register OP *kid = cLISTOPo->op_first->op_sibling; /* get past pushmark */
8396 PERL_ARGS_ASSERT_SIMPLIFY_SORT;
8398 if (!(o->op_flags & OPf_STACKED))
8400 GvMULTI_on(gv_fetchpvs("a", GV_ADD|GV_NOTQUAL, SVt_PV));
8401 GvMULTI_on(gv_fetchpvs("b", GV_ADD|GV_NOTQUAL, SVt_PV));
8402 kid = kUNOP->op_first; /* get past null */
8403 if (kid->op_type != OP_SCOPE)
8405 kid = kLISTOP->op_last; /* get past scope */
8406 switch(kid->op_type) {
8414 k = kid; /* remember this node*/
8415 if (kBINOP->op_first->op_type != OP_RV2SV)
8417 kid = kBINOP->op_first; /* get past cmp */
8418 if (kUNOP->op_first->op_type != OP_GV)
8420 kid = kUNOP->op_first; /* get past rv2sv */
8422 if (GvSTASH(gv) != PL_curstash)
8424 gvname = GvNAME(gv);
8425 if (*gvname == 'a' && gvname[1] == '\0')
8427 else if (*gvname == 'b' && gvname[1] == '\0')
8432 kid = k; /* back to cmp */
8433 if (kBINOP->op_last->op_type != OP_RV2SV)
8435 kid = kBINOP->op_last; /* down to 2nd arg */
8436 if (kUNOP->op_first->op_type != OP_GV)
8438 kid = kUNOP->op_first; /* get past rv2sv */
8440 if (GvSTASH(gv) != PL_curstash)
8442 gvname = GvNAME(gv);
8444 ? !(*gvname == 'a' && gvname[1] == '\0')
8445 : !(*gvname == 'b' && gvname[1] == '\0'))
8447 o->op_flags &= ~(OPf_STACKED | OPf_SPECIAL);
8449 o->op_private |= OPpSORT_DESCEND;
8450 if (k->op_type == OP_NCMP)
8451 o->op_private |= OPpSORT_NUMERIC;
8452 if (k->op_type == OP_I_NCMP)
8453 o->op_private |= OPpSORT_NUMERIC | OPpSORT_INTEGER;
8454 kid = cLISTOPo->op_first->op_sibling;
8455 cLISTOPo->op_first->op_sibling = kid->op_sibling; /* bypass old block */
8457 op_getmad(kid,o,'S'); /* then delete it */
8459 op_free(kid); /* then delete it */
8464 Perl_ck_split(pTHX_ OP *o)
8469 PERL_ARGS_ASSERT_CK_SPLIT;
8471 if (o->op_flags & OPf_STACKED)
8472 return no_fh_allowed(o);
8474 kid = cLISTOPo->op_first;
8475 if (kid->op_type != OP_NULL)
8476 Perl_croak(aTHX_ "panic: ck_split");
8477 kid = kid->op_sibling;
8478 op_free(cLISTOPo->op_first);
8480 cLISTOPo->op_first = kid;
8482 cLISTOPo->op_first = kid = newSVOP(OP_CONST, 0, newSVpvs(" "));
8483 cLISTOPo->op_last = kid; /* There was only one element previously */
8486 if (kid->op_type != OP_MATCH || kid->op_flags & OPf_STACKED) {
8487 OP * const sibl = kid->op_sibling;
8488 kid->op_sibling = 0;
8489 kid = pmruntime( newPMOP(OP_MATCH, OPf_SPECIAL), kid, 0);
8490 if (cLISTOPo->op_first == cLISTOPo->op_last)
8491 cLISTOPo->op_last = kid;
8492 cLISTOPo->op_first = kid;
8493 kid->op_sibling = sibl;
8496 kid->op_type = OP_PUSHRE;
8497 kid->op_ppaddr = PL_ppaddr[OP_PUSHRE];
8499 if (((PMOP *)kid)->op_pmflags & PMf_GLOBAL) {
8500 Perl_ck_warner(aTHX_ packWARN(WARN_REGEXP),
8501 "Use of /g modifier is meaningless in split");
8504 if (!kid->op_sibling)
8505 op_append_elem(OP_SPLIT, o, newDEFSVOP());
8507 kid = kid->op_sibling;
8510 if (!kid->op_sibling)
8511 op_append_elem(OP_SPLIT, o, newSVOP(OP_CONST, 0, newSViv(0)));
8512 assert(kid->op_sibling);
8514 kid = kid->op_sibling;
8517 if (kid->op_sibling)
8518 return too_many_arguments(o,OP_DESC(o));
8524 Perl_ck_join(pTHX_ OP *o)
8526 const OP * const kid = cLISTOPo->op_first->op_sibling;
8528 PERL_ARGS_ASSERT_CK_JOIN;
8530 if (kid && kid->op_type == OP_MATCH) {
8531 if (ckWARN(WARN_SYNTAX)) {
8532 const REGEXP *re = PM_GETRE(kPMOP);
8533 const char *pmstr = re ? RX_PRECOMP_const(re) : "STRING";
8534 const STRLEN len = re ? RX_PRELEN(re) : 6;
8535 Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
8536 "/%.*s/ should probably be written as \"%.*s\"",
8537 (int)len, pmstr, (int)len, pmstr);
8544 =for apidoc Am|CV *|rv2cv_op_cv|OP *cvop|U32 flags
8546 Examines an op, which is expected to identify a subroutine at runtime,
8547 and attempts to determine at compile time which subroutine it identifies.
8548 This is normally used during Perl compilation to determine whether
8549 a prototype can be applied to a function call. I<cvop> is the op
8550 being considered, normally an C<rv2cv> op. A pointer to the identified
8551 subroutine is returned, if it could be determined statically, and a null
8552 pointer is returned if it was not possible to determine statically.
8554 Currently, the subroutine can be identified statically if the RV that the
8555 C<rv2cv> is to operate on is provided by a suitable C<gv> or C<const> op.
8556 A C<gv> op is suitable if the GV's CV slot is populated. A C<const> op is
8557 suitable if the constant value must be an RV pointing to a CV. Details of
8558 this process may change in future versions of Perl. If the C<rv2cv> op
8559 has the C<OPpENTERSUB_AMPER> flag set then no attempt is made to identify
8560 the subroutine statically: this flag is used to suppress compile-time
8561 magic on a subroutine call, forcing it to use default runtime behaviour.
8563 If I<flags> has the bit C<RV2CVOPCV_MARK_EARLY> set, then the handling
8564 of a GV reference is modified. If a GV was examined and its CV slot was
8565 found to be empty, then the C<gv> op has the C<OPpEARLY_CV> flag set.
8566 If the op is not optimised away, and the CV slot is later populated with
8567 a subroutine having a prototype, that flag eventually triggers the warning
8568 "called too early to check prototype".
8570 If I<flags> has the bit C<RV2CVOPCV_RETURN_NAME_GV> set, then instead
8571 of returning a pointer to the subroutine it returns a pointer to the
8572 GV giving the most appropriate name for the subroutine in this context.
8573 Normally this is just the C<CvGV> of the subroutine, but for an anonymous
8574 (C<CvANON>) subroutine that is referenced through a GV it will be the
8575 referencing GV. The resulting C<GV*> is cast to C<CV*> to be returned.
8576 A null pointer is returned as usual if there is no statically-determinable
8583 Perl_rv2cv_op_cv(pTHX_ OP *cvop, U32 flags)
8588 PERL_ARGS_ASSERT_RV2CV_OP_CV;
8589 if (flags & ~(RV2CVOPCV_MARK_EARLY|RV2CVOPCV_RETURN_NAME_GV))
8590 Perl_croak(aTHX_ "panic: rv2cv_op_cv bad flags %x", (unsigned)flags);
8591 if (cvop->op_type != OP_RV2CV)
8593 if (cvop->op_private & OPpENTERSUB_AMPER)
8595 if (!(cvop->op_flags & OPf_KIDS))
8597 rvop = cUNOPx(cvop)->op_first;
8598 switch (rvop->op_type) {
8600 gv = cGVOPx_gv(rvop);
8603 if (flags & RV2CVOPCV_MARK_EARLY)
8604 rvop->op_private |= OPpEARLY_CV;
8609 SV *rv = cSVOPx_sv(rvop);
8619 if (SvTYPE((SV*)cv) != SVt_PVCV)
8621 if (flags & RV2CVOPCV_RETURN_NAME_GV) {
8622 if (!CvANON(cv) || !gv)
8631 =for apidoc Am|OP *|ck_entersub_args_list|OP *entersubop
8633 Performs the default fixup of the arguments part of an C<entersub>
8634 op tree. This consists of applying list context to each of the
8635 argument ops. This is the standard treatment used on a call marked
8636 with C<&>, or a method call, or a call through a subroutine reference,
8637 or any other call where the callee can't be identified at compile time,
8638 or a call where the callee has no prototype.
8644 Perl_ck_entersub_args_list(pTHX_ OP *entersubop)
8647 PERL_ARGS_ASSERT_CK_ENTERSUB_ARGS_LIST;
8648 aop = cUNOPx(entersubop)->op_first;
8649 if (!aop->op_sibling)
8650 aop = cUNOPx(aop)->op_first;
8651 for (aop = aop->op_sibling; aop->op_sibling; aop = aop->op_sibling) {
8652 if (!(PL_madskills && aop->op_type == OP_STUB)) {
8654 op_lvalue(aop, OP_ENTERSUB);
8661 =for apidoc Am|OP *|ck_entersub_args_proto|OP *entersubop|GV *namegv|SV *protosv
8663 Performs the fixup of the arguments part of an C<entersub> op tree
8664 based on a subroutine prototype. This makes various modifications to
8665 the argument ops, from applying context up to inserting C<refgen> ops,
8666 and checking the number and syntactic types of arguments, as directed by
8667 the prototype. This is the standard treatment used on a subroutine call,
8668 not marked with C<&>, where the callee can be identified at compile time
8669 and has a prototype.
8671 I<protosv> supplies the subroutine prototype to be applied to the call.
8672 It may be a normal defined scalar, of which the string value will be used.
8673 Alternatively, for convenience, it may be a subroutine object (a C<CV*>
8674 that has been cast to C<SV*>) which has a prototype. The prototype
8675 supplied, in whichever form, does not need to match the actual callee
8676 referenced by the op tree.
8678 If the argument ops disagree with the prototype, for example by having
8679 an unacceptable number of arguments, a valid op tree is returned anyway.
8680 The error is reflected in the parser state, normally resulting in a single
8681 exception at the top level of parsing which covers all the compilation
8682 errors that occurred. In the error message, the callee is referred to
8683 by the name defined by the I<namegv> parameter.
8689 Perl_ck_entersub_args_proto(pTHX_ OP *entersubop, GV *namegv, SV *protosv)
8692 const char *proto, *proto_end;
8693 OP *aop, *prev, *cvop;
8696 I32 contextclass = 0;
8697 const char *e = NULL;
8698 PERL_ARGS_ASSERT_CK_ENTERSUB_ARGS_PROTO;
8699 if (SvTYPE(protosv) == SVt_PVCV ? !SvPOK(protosv) : !SvOK(protosv))
8700 Perl_croak(aTHX_ "panic: ck_entersub_args_proto CV with no proto");
8701 proto = SvPV(protosv, proto_len);
8702 proto_end = proto + proto_len;
8703 aop = cUNOPx(entersubop)->op_first;
8704 if (!aop->op_sibling)
8705 aop = cUNOPx(aop)->op_first;
8707 aop = aop->op_sibling;
8708 for (cvop = aop; cvop->op_sibling; cvop = cvop->op_sibling) ;
8709 while (aop != cvop) {
8711 if (PL_madskills && aop->op_type == OP_STUB) {
8712 aop = aop->op_sibling;
8715 if (PL_madskills && aop->op_type == OP_NULL)
8716 o3 = ((UNOP*)aop)->op_first;
8720 if (proto >= proto_end)
8721 return too_many_arguments(entersubop, gv_ename(namegv));
8729 /* _ must be at the end */
8730 if (proto[1] && proto[1] != ';')
8745 if (o3->op_type != OP_REFGEN && o3->op_type != OP_UNDEF)
8747 arg == 1 ? "block or sub {}" : "sub {}",
8748 gv_ename(namegv), o3);
8751 /* '*' allows any scalar type, including bareword */
8754 if (o3->op_type == OP_RV2GV)
8755 goto wrapref; /* autoconvert GLOB -> GLOBref */
8756 else if (o3->op_type == OP_CONST)
8757 o3->op_private &= ~OPpCONST_STRICT;
8758 else if (o3->op_type == OP_ENTERSUB) {
8759 /* accidental subroutine, revert to bareword */
8760 OP *gvop = ((UNOP*)o3)->op_first;
8761 if (gvop && gvop->op_type == OP_NULL) {
8762 gvop = ((UNOP*)gvop)->op_first;
8764 for (; gvop->op_sibling; gvop = gvop->op_sibling)
8767 (gvop->op_private & OPpENTERSUB_NOPAREN) &&
8768 (gvop = ((UNOP*)gvop)->op_first) &&
8769 gvop->op_type == OP_GV)
8771 GV * const gv = cGVOPx_gv(gvop);
8772 OP * const sibling = aop->op_sibling;
8773 SV * const n = newSVpvs("");
8775 OP * const oldaop = aop;
8779 gv_fullname4(n, gv, "", FALSE);
8780 aop = newSVOP(OP_CONST, 0, n);
8781 op_getmad(oldaop,aop,'O');
8782 prev->op_sibling = aop;
8783 aop->op_sibling = sibling;
8793 if (o3->op_type == OP_RV2AV ||
8794 o3->op_type == OP_PADAV ||
8795 o3->op_type == OP_RV2HV ||
8796 o3->op_type == OP_PADHV
8811 if (contextclass++ == 0) {
8812 e = strchr(proto, ']');
8813 if (!e || e == proto)
8822 const char *p = proto;
8823 const char *const end = proto;
8825 while (*--p != '[') {}
8826 bad_type(arg, Perl_form(aTHX_ "one of %.*s",
8828 gv_ename(namegv), o3);
8833 if (o3->op_type == OP_RV2GV)
8836 bad_type(arg, "symbol", gv_ename(namegv), o3);
8839 if (o3->op_type == OP_ENTERSUB)
8842 bad_type(arg, "subroutine entry", gv_ename(namegv),
8846 if (o3->op_type == OP_RV2SV ||
8847 o3->op_type == OP_PADSV ||
8848 o3->op_type == OP_HELEM ||
8849 o3->op_type == OP_AELEM)
8852 bad_type(arg, "scalar", gv_ename(namegv), o3);
8855 if (o3->op_type == OP_RV2AV ||
8856 o3->op_type == OP_PADAV)
8859 bad_type(arg, "array", gv_ename(namegv), o3);
8862 if (o3->op_type == OP_RV2HV ||
8863 o3->op_type == OP_PADHV)
8866 bad_type(arg, "hash", gv_ename(namegv), o3);
8870 OP* const kid = aop;
8871 OP* const sib = kid->op_sibling;
8872 kid->op_sibling = 0;
8873 aop = newUNOP(OP_REFGEN, 0, kid);
8874 aop->op_sibling = sib;
8875 prev->op_sibling = aop;
8877 if (contextclass && e) {
8892 Perl_croak(aTHX_ "Malformed prototype for %s: %"SVf,
8893 gv_ename(namegv), SVfARG(protosv));
8896 op_lvalue(aop, OP_ENTERSUB);
8898 aop = aop->op_sibling;
8900 if (aop == cvop && *proto == '_') {
8901 /* generate an access to $_ */
8903 aop->op_sibling = prev->op_sibling;
8904 prev->op_sibling = aop; /* instead of cvop */
8906 if (!optional && proto_end > proto &&
8907 (*proto != '@' && *proto != '%' && *proto != ';' && *proto != '_'))
8908 return too_few_arguments(entersubop, gv_ename(namegv));
8913 =for apidoc Am|OP *|ck_entersub_args_proto_or_list|OP *entersubop|GV *namegv|SV *protosv
8915 Performs the fixup of the arguments part of an C<entersub> op tree either
8916 based on a subroutine prototype or using default list-context processing.
8917 This is the standard treatment used on a subroutine call, not marked
8918 with C<&>, where the callee can be identified at compile time.
8920 I<protosv> supplies the subroutine prototype to be applied to the call,
8921 or indicates that there is no prototype. It may be a normal scalar,
8922 in which case if it is defined then the string value will be used
8923 as a prototype, and if it is undefined then there is no prototype.
8924 Alternatively, for convenience, it may be a subroutine object (a C<CV*>
8925 that has been cast to C<SV*>), of which the prototype will be used if it
8926 has one. The prototype (or lack thereof) supplied, in whichever form,
8927 does not need to match the actual callee referenced by the op tree.
8929 If the argument ops disagree with the prototype, for example by having
8930 an unacceptable number of arguments, a valid op tree is returned anyway.
8931 The error is reflected in the parser state, normally resulting in a single
8932 exception at the top level of parsing which covers all the compilation
8933 errors that occurred. In the error message, the callee is referred to
8934 by the name defined by the I<namegv> parameter.
8940 Perl_ck_entersub_args_proto_or_list(pTHX_ OP *entersubop,
8941 GV *namegv, SV *protosv)
8943 PERL_ARGS_ASSERT_CK_ENTERSUB_ARGS_PROTO_OR_LIST;
8944 if (SvTYPE(protosv) == SVt_PVCV ? SvPOK(protosv) : SvOK(protosv))
8945 return ck_entersub_args_proto(entersubop, namegv, protosv);
8947 return ck_entersub_args_list(entersubop);
8951 =for apidoc Am|void|cv_get_call_checker|CV *cv|Perl_call_checker *ckfun_p|SV **ckobj_p
8953 Retrieves the function that will be used to fix up a call to I<cv>.
8954 Specifically, the function is applied to an C<entersub> op tree for a
8955 subroutine call, not marked with C<&>, where the callee can be identified
8956 at compile time as I<cv>.
8958 The C-level function pointer is returned in I<*ckfun_p>, and an SV
8959 argument for it is returned in I<*ckobj_p>. The function is intended
8960 to be called in this manner:
8962 entersubop = (*ckfun_p)(aTHX_ entersubop, namegv, (*ckobj_p));
8964 In this call, I<entersubop> is a pointer to the C<entersub> op,
8965 which may be replaced by the check function, and I<namegv> is a GV
8966 supplying the name that should be used by the check function to refer
8967 to the callee of the C<entersub> op if it needs to emit any diagnostics.
8968 It is permitted to apply the check function in non-standard situations,
8969 such as to a call to a different subroutine or to a method call.
8971 By default, the function is
8972 L<Perl_ck_entersub_args_proto_or_list|/ck_entersub_args_proto_or_list>,
8973 and the SV parameter is I<cv> itself. This implements standard
8974 prototype processing. It can be changed, for a particular subroutine,
8975 by L</cv_set_call_checker>.
8981 Perl_cv_get_call_checker(pTHX_ CV *cv, Perl_call_checker *ckfun_p, SV **ckobj_p)
8984 PERL_ARGS_ASSERT_CV_GET_CALL_CHECKER;
8985 callmg = SvMAGICAL((SV*)cv) ? mg_find((SV*)cv, PERL_MAGIC_checkcall) : NULL;
8987 *ckfun_p = DPTR2FPTR(Perl_call_checker, callmg->mg_ptr);
8988 *ckobj_p = callmg->mg_obj;
8990 *ckfun_p = Perl_ck_entersub_args_proto_or_list;
8996 =for apidoc Am|void|cv_set_call_checker|CV *cv|Perl_call_checker ckfun|SV *ckobj
8998 Sets the function that will be used to fix up a call to I<cv>.
8999 Specifically, the function is applied to an C<entersub> op tree for a
9000 subroutine call, not marked with C<&>, where the callee can be identified
9001 at compile time as I<cv>.
9003 The C-level function pointer is supplied in I<ckfun>, and an SV argument
9004 for it is supplied in I<ckobj>. The function is intended to be called
9007 entersubop = ckfun(aTHX_ entersubop, namegv, ckobj);
9009 In this call, I<entersubop> is a pointer to the C<entersub> op,
9010 which may be replaced by the check function, and I<namegv> is a GV
9011 supplying the name that should be used by the check function to refer
9012 to the callee of the C<entersub> op if it needs to emit any diagnostics.
9013 It is permitted to apply the check function in non-standard situations,
9014 such as to a call to a different subroutine or to a method call.
9016 The current setting for a particular CV can be retrieved by
9017 L</cv_get_call_checker>.
9023 Perl_cv_set_call_checker(pTHX_ CV *cv, Perl_call_checker ckfun, SV *ckobj)
9025 PERL_ARGS_ASSERT_CV_SET_CALL_CHECKER;
9026 if (ckfun == Perl_ck_entersub_args_proto_or_list && ckobj == (SV*)cv) {
9027 if (SvMAGICAL((SV*)cv))
9028 mg_free_type((SV*)cv, PERL_MAGIC_checkcall);
9031 sv_magic((SV*)cv, &PL_sv_undef, PERL_MAGIC_checkcall, NULL, 0);
9032 callmg = mg_find((SV*)cv, PERL_MAGIC_checkcall);
9033 if (callmg->mg_flags & MGf_REFCOUNTED) {
9034 SvREFCNT_dec(callmg->mg_obj);
9035 callmg->mg_flags &= ~MGf_REFCOUNTED;
9037 callmg->mg_ptr = FPTR2DPTR(char *, ckfun);
9038 callmg->mg_obj = ckobj;
9039 if (ckobj != (SV*)cv) {
9040 SvREFCNT_inc_simple_void_NN(ckobj);
9041 callmg->mg_flags |= MGf_REFCOUNTED;
9047 Perl_ck_subr(pTHX_ OP *o)
9053 PERL_ARGS_ASSERT_CK_SUBR;
9055 aop = cUNOPx(o)->op_first;
9056 if (!aop->op_sibling)
9057 aop = cUNOPx(aop)->op_first;
9058 aop = aop->op_sibling;
9059 for (cvop = aop; cvop->op_sibling; cvop = cvop->op_sibling) ;
9060 cv = rv2cv_op_cv(cvop, RV2CVOPCV_MARK_EARLY);
9061 namegv = cv ? (GV*)rv2cv_op_cv(cvop, RV2CVOPCV_RETURN_NAME_GV) : NULL;
9063 o->op_private &= ~1;
9064 o->op_private |= OPpENTERSUB_HASTARG;
9065 o->op_private |= (PL_hints & HINT_STRICT_REFS);
9066 if (PERLDB_SUB && PL_curstash != PL_debstash)
9067 o->op_private |= OPpENTERSUB_DB;
9068 if (cvop->op_type == OP_RV2CV) {
9069 o->op_private |= (cvop->op_private & OPpENTERSUB_AMPER);
9071 } else if (cvop->op_type == OP_METHOD || cvop->op_type == OP_METHOD_NAMED) {
9072 if (aop->op_type == OP_CONST)
9073 aop->op_private &= ~OPpCONST_STRICT;
9074 else if (aop->op_type == OP_LIST) {
9075 OP * const sib = ((UNOP*)aop)->op_first->op_sibling;
9076 if (sib && sib->op_type == OP_CONST)
9077 sib->op_private &= ~OPpCONST_STRICT;
9082 return ck_entersub_args_list(o);
9084 Perl_call_checker ckfun;
9086 cv_get_call_checker(cv, &ckfun, &ckobj);
9087 return ckfun(aTHX_ o, namegv, ckobj);
9092 Perl_ck_svconst(pTHX_ OP *o)
9094 PERL_ARGS_ASSERT_CK_SVCONST;
9095 PERL_UNUSED_CONTEXT;
9096 SvREADONLY_on(cSVOPo->op_sv);
9101 Perl_ck_chdir(pTHX_ OP *o)
9103 PERL_ARGS_ASSERT_CK_CHDIR;
9104 if (o->op_flags & OPf_KIDS) {
9105 SVOP * const kid = (SVOP*)cUNOPo->op_first;
9107 if (kid && kid->op_type == OP_CONST &&
9108 (kid->op_private & OPpCONST_BARE))
9110 o->op_flags |= OPf_SPECIAL;
9111 kid->op_private &= ~OPpCONST_STRICT;
9118 Perl_ck_trunc(pTHX_ OP *o)
9120 PERL_ARGS_ASSERT_CK_TRUNC;
9122 if (o->op_flags & OPf_KIDS) {
9123 SVOP *kid = (SVOP*)cUNOPo->op_first;
9125 if (kid->op_type == OP_NULL)
9126 kid = (SVOP*)kid->op_sibling;
9127 if (kid && kid->op_type == OP_CONST &&
9128 (kid->op_private & OPpCONST_BARE))
9130 o->op_flags |= OPf_SPECIAL;
9131 kid->op_private &= ~OPpCONST_STRICT;
9138 Perl_ck_unpack(pTHX_ OP *o)
9140 OP *kid = cLISTOPo->op_first;
9142 PERL_ARGS_ASSERT_CK_UNPACK;
9144 if (kid->op_sibling) {
9145 kid = kid->op_sibling;
9146 if (!kid->op_sibling)
9147 kid->op_sibling = newDEFSVOP();
9153 Perl_ck_substr(pTHX_ OP *o)
9155 PERL_ARGS_ASSERT_CK_SUBSTR;
9158 if ((o->op_flags & OPf_KIDS) && (o->op_private == 4)) {
9159 OP *kid = cLISTOPo->op_first;
9161 if (kid->op_type == OP_NULL)
9162 kid = kid->op_sibling;
9164 kid->op_flags |= OPf_MOD;
9171 Perl_ck_each(pTHX_ OP *o)
9174 OP *kid = o->op_flags & OPf_KIDS ? cUNOPo->op_first : NULL;
9175 const unsigned orig_type = o->op_type;
9176 const unsigned array_type = orig_type == OP_EACH ? OP_AEACH
9177 : orig_type == OP_KEYS ? OP_AKEYS : OP_AVALUES;
9178 const unsigned ref_type = orig_type == OP_EACH ? OP_REACH
9179 : orig_type == OP_KEYS ? OP_RKEYS : OP_RVALUES;
9181 PERL_ARGS_ASSERT_CK_EACH;
9184 switch (kid->op_type) {
9190 CHANGE_TYPE(o, array_type);
9193 if (kid->op_private == OPpCONST_BARE
9194 || !SvROK(cSVOPx_sv(kid))
9195 || ( SvTYPE(SvRV(cSVOPx_sv(kid))) != SVt_PVAV
9196 && SvTYPE(SvRV(cSVOPx_sv(kid))) != SVt_PVHV )
9198 /* we let ck_fun handle it */
9201 CHANGE_TYPE(o, ref_type);
9205 /* if treating as a reference, defer additional checks to runtime */
9206 return o->op_type == ref_type ? o : ck_fun(o);
9209 /* caller is supposed to assign the return to the
9210 container of the rep_op var */
9212 S_opt_scalarhv(pTHX_ OP *rep_op) {
9216 PERL_ARGS_ASSERT_OPT_SCALARHV;
9218 NewOp(1101, unop, 1, UNOP);
9219 unop->op_type = (OPCODE)OP_BOOLKEYS;
9220 unop->op_ppaddr = PL_ppaddr[OP_BOOLKEYS];
9221 unop->op_flags = (U8)(OPf_WANT_SCALAR | OPf_KIDS );
9222 unop->op_private = (U8)(1 | ((OPf_WANT_SCALAR | OPf_KIDS) >> 8));
9223 unop->op_first = rep_op;
9224 unop->op_next = rep_op->op_next;
9225 rep_op->op_next = (OP*)unop;
9226 rep_op->op_flags|=(OPf_REF | OPf_MOD);
9227 unop->op_sibling = rep_op->op_sibling;
9228 rep_op->op_sibling = NULL;
9229 /* unop->op_targ = pad_alloc(OP_BOOLKEYS, SVs_PADTMP); */
9230 if (rep_op->op_type == OP_PADHV) {
9231 rep_op->op_flags &= ~OPf_WANT_SCALAR;
9232 rep_op->op_flags |= OPf_WANT_LIST;
9237 /* Checks if o acts as an in-place operator on an array. oright points to the
9238 * beginning of the right-hand side. Returns the left-hand side of the
9239 * assignment if o acts in-place, or NULL otherwise. */
9242 S_is_inplace_av(pTHX_ OP *o, OP *oright) {
9246 PERL_ARGS_ASSERT_IS_INPLACE_AV;
9249 (oright->op_type != OP_RV2AV && oright->op_type != OP_PADAV)
9250 || oright->op_next != o
9251 || (oright->op_private & OPpLVAL_INTRO)
9255 /* o2 follows the chain of op_nexts through the LHS of the
9256 * assign (if any) to the aassign op itself */
9258 if (!o2 || o2->op_type != OP_NULL)
9261 if (!o2 || o2->op_type != OP_PUSHMARK)
9264 if (o2 && o2->op_type == OP_GV)
9267 || (o2->op_type != OP_PADAV && o2->op_type != OP_RV2AV)
9268 || (o2->op_private & OPpLVAL_INTRO)
9273 if (!o2 || o2->op_type != OP_NULL)
9276 if (!o2 || o2->op_type != OP_AASSIGN
9277 || (o2->op_flags & OPf_WANT) != OPf_WANT_VOID)
9280 /* check that the sort is the first arg on RHS of assign */
9282 o2 = cUNOPx(o2)->op_first;
9283 if (!o2 || o2->op_type != OP_NULL)
9285 o2 = cUNOPx(o2)->op_first;
9286 if (!o2 || o2->op_type != OP_PUSHMARK)
9288 if (o2->op_sibling != o)
9291 /* check the array is the same on both sides */
9292 if (oleft->op_type == OP_RV2AV) {
9293 if (oright->op_type != OP_RV2AV
9294 || !cUNOPx(oright)->op_first
9295 || cUNOPx(oright)->op_first->op_type != OP_GV
9296 || cGVOPx_gv(cUNOPx(oleft)->op_first) !=
9297 cGVOPx_gv(cUNOPx(oright)->op_first)
9301 else if (oright->op_type != OP_PADAV
9302 || oright->op_targ != oleft->op_targ
9309 /* A peephole optimizer. We visit the ops in the order they're to execute.
9310 * See the comments at the top of this file for more details about when
9311 * peep() is called */
9314 Perl_rpeep(pTHX_ register OP *o)
9317 register OP* oldop = NULL;
9319 if (!o || o->op_opt)
9323 SAVEVPTR(PL_curcop);
9324 for (; o; o = o->op_next) {
9325 #if defined(PERL_MAD) && defined(USE_ITHREADS)
9326 MADPROP *mp = o->op_madprop;
9328 if (mp->mad_type == MAD_OP && mp->mad_vlen) {
9329 OP *prop_op = (OP *) mp->mad_val;
9330 /* I *think* that this is roughly the right thing to do. It
9331 seems that sometimes the optree hooked into the madprops
9332 doesn't have its next pointers set, so it's not possible to
9333 use them to locate all the OPs needing a fixup. Possibly
9334 it's a bit overkill calling LINKLIST to do this, when we
9335 could instead iterate over the OPs (without changing them)
9336 the way op_linklist does internally. However, I'm not sure
9337 if there are corner cases where we have a chain of partially
9338 linked OPs. Or even if we do, does that matter? Or should
9339 we always iterate on op_first,op_next? */
9342 if (prop_op->op_opt)
9344 prop_op->op_opt = 1;
9345 switch (prop_op->op_type) {
9348 case OP_METHOD_NAMED:
9349 /* Duplicate the "relocate sv to the pad for thread
9350 safety" code, as otherwise an opfree of this madprop
9351 in the wrong thread will free the SV to the wrong
9353 if (((SVOP *)prop_op)->op_sv) {
9354 const PADOFFSET ix = pad_alloc(OP_CONST, SVs_PADTMP);
9355 sv_setsv(PAD_SVl(ix),((SVOP *)prop_op)->op_sv);
9356 SvREFCNT_dec(((SVOP *)prop_op)->op_sv);
9357 ((SVOP *)prop_op)->op_sv = NULL;
9361 } while ((prop_op = prop_op->op_next));
9368 /* By default, this op has now been optimised. A couple of cases below
9369 clear this again. */
9372 switch (o->op_type) {
9374 PL_curcop = ((COP*)o); /* for warnings */
9377 PL_curcop = ((COP*)o); /* for warnings */
9379 /* Two NEXTSTATEs in a row serve no purpose. Except if they happen
9380 to carry two labels. For now, take the easier option, and skip
9381 this optimisation if the first NEXTSTATE has a label. */
9382 if (!CopLABEL((COP*)o) && !PERLDB_NOOPT) {
9383 OP *nextop = o->op_next;
9384 while (nextop && nextop->op_type == OP_NULL)
9385 nextop = nextop->op_next;
9387 if (nextop && (nextop->op_type == OP_NEXTSTATE)) {
9388 COP *firstcop = (COP *)o;
9389 COP *secondcop = (COP *)nextop;
9390 /* We want the COP pointed to by o (and anything else) to
9391 become the next COP down the line. */
9394 firstcop->op_next = secondcop->op_next;
9396 /* Now steal all its pointers, and duplicate the other
9398 firstcop->cop_line = secondcop->cop_line;
9400 firstcop->cop_stashpv = secondcop->cop_stashpv;
9401 firstcop->cop_file = secondcop->cop_file;
9403 firstcop->cop_stash = secondcop->cop_stash;
9404 firstcop->cop_filegv = secondcop->cop_filegv;
9406 firstcop->cop_hints = secondcop->cop_hints;
9407 firstcop->cop_seq = secondcop->cop_seq;
9408 firstcop->cop_warnings = secondcop->cop_warnings;
9409 firstcop->cop_hints_hash = secondcop->cop_hints_hash;
9412 secondcop->cop_stashpv = NULL;
9413 secondcop->cop_file = NULL;
9415 secondcop->cop_stash = NULL;
9416 secondcop->cop_filegv = NULL;
9418 secondcop->cop_warnings = NULL;
9419 secondcop->cop_hints_hash = NULL;
9421 /* If we use op_null(), and hence leave an ex-COP, some
9422 warnings are misreported. For example, the compile-time
9423 error in 'use strict; no strict refs;' */
9424 secondcop->op_type = OP_NULL;
9425 secondcop->op_ppaddr = PL_ppaddr[OP_NULL];
9431 if (cSVOPo->op_private & OPpCONST_STRICT)
9432 no_bareword_allowed(o);
9435 case OP_METHOD_NAMED:
9436 /* Relocate sv to the pad for thread safety.
9437 * Despite being a "constant", the SV is written to,
9438 * for reference counts, sv_upgrade() etc. */
9440 const PADOFFSET ix = pad_alloc(OP_CONST, SVs_PADTMP);
9441 if (o->op_type != OP_METHOD_NAMED && SvPADTMP(cSVOPo->op_sv)) {
9442 /* If op_sv is already a PADTMP then it is being used by
9443 * some pad, so make a copy. */
9444 sv_setsv(PAD_SVl(ix),cSVOPo->op_sv);
9445 SvREADONLY_on(PAD_SVl(ix));
9446 SvREFCNT_dec(cSVOPo->op_sv);
9448 else if (o->op_type != OP_METHOD_NAMED
9449 && cSVOPo->op_sv == &PL_sv_undef) {
9450 /* PL_sv_undef is hack - it's unsafe to store it in the
9451 AV that is the pad, because av_fetch treats values of
9452 PL_sv_undef as a "free" AV entry and will merrily
9453 replace them with a new SV, causing pad_alloc to think
9454 that this pad slot is free. (When, clearly, it is not)
9456 SvOK_off(PAD_SVl(ix));
9457 SvPADTMP_on(PAD_SVl(ix));
9458 SvREADONLY_on(PAD_SVl(ix));
9461 SvREFCNT_dec(PAD_SVl(ix));
9462 SvPADTMP_on(cSVOPo->op_sv);
9463 PAD_SETSV(ix, cSVOPo->op_sv);
9464 /* XXX I don't know how this isn't readonly already. */
9465 SvREADONLY_on(PAD_SVl(ix));
9467 cSVOPo->op_sv = NULL;
9474 if (o->op_next && o->op_next->op_type == OP_STRINGIFY) {
9475 if (o->op_next->op_private & OPpTARGET_MY) {
9476 if (o->op_flags & OPf_STACKED) /* chained concats */
9477 break; /* ignore_optimization */
9479 /* assert(PL_opargs[o->op_type] & OA_TARGLEX); */
9480 o->op_targ = o->op_next->op_targ;
9481 o->op_next->op_targ = 0;
9482 o->op_private |= OPpTARGET_MY;
9485 op_null(o->op_next);
9489 if ((o->op_flags & OPf_WANT) != OPf_WANT_LIST) {
9490 break; /* Scalar stub must produce undef. List stub is noop */
9494 if (o->op_targ == OP_NEXTSTATE
9495 || o->op_targ == OP_DBSTATE)
9497 PL_curcop = ((COP*)o);
9499 /* XXX: We avoid setting op_seq here to prevent later calls
9500 to rpeep() from mistakenly concluding that optimisation
9501 has already occurred. This doesn't fix the real problem,
9502 though (See 20010220.007). AMS 20010719 */
9503 /* op_seq functionality is now replaced by op_opt */
9510 if (oldop && o->op_next) {
9511 oldop->op_next = o->op_next;
9519 if (o->op_type == OP_PADAV || o->op_next->op_type == OP_RV2AV) {
9520 OP* const pop = (o->op_type == OP_PADAV) ?
9521 o->op_next : o->op_next->op_next;
9523 if (pop && pop->op_type == OP_CONST &&
9524 ((PL_op = pop->op_next)) &&
9525 pop->op_next->op_type == OP_AELEM &&
9526 !(pop->op_next->op_private &
9527 (OPpLVAL_INTRO|OPpLVAL_DEFER|OPpDEREF|OPpMAYBE_LVSUB)) &&
9528 (i = SvIV(((SVOP*)pop)->op_sv) - CopARYBASE_get(PL_curcop))
9533 if (cSVOPx(pop)->op_private & OPpCONST_STRICT)
9534 no_bareword_allowed(pop);
9535 if (o->op_type == OP_GV)
9536 op_null(o->op_next);
9537 op_null(pop->op_next);
9539 o->op_flags |= pop->op_next->op_flags & OPf_MOD;
9540 o->op_next = pop->op_next->op_next;
9541 o->op_ppaddr = PL_ppaddr[OP_AELEMFAST];
9542 o->op_private = (U8)i;
9543 if (o->op_type == OP_GV) {
9546 o->op_type = OP_AELEMFAST;
9549 o->op_type = OP_AELEMFAST_LEX;
9554 if (o->op_next->op_type == OP_RV2SV) {
9555 if (!(o->op_next->op_private & OPpDEREF)) {
9556 op_null(o->op_next);
9557 o->op_private |= o->op_next->op_private & (OPpLVAL_INTRO
9559 o->op_next = o->op_next->op_next;
9560 o->op_type = OP_GVSV;
9561 o->op_ppaddr = PL_ppaddr[OP_GVSV];
9564 else if ((o->op_private & OPpEARLY_CV) && ckWARN(WARN_PROTOTYPE)) {
9565 GV * const gv = cGVOPo_gv;
9566 if (SvTYPE(gv) == SVt_PVGV && GvCV(gv) && SvPVX_const(GvCV(gv))) {
9567 /* XXX could check prototype here instead of just carping */
9568 SV * const sv = sv_newmortal();
9569 gv_efullname3(sv, gv, NULL);
9570 Perl_warner(aTHX_ packWARN(WARN_PROTOTYPE),
9571 "%"SVf"() called too early to check prototype",
9575 else if (o->op_next->op_type == OP_READLINE
9576 && o->op_next->op_next->op_type == OP_CONCAT
9577 && (o->op_next->op_next->op_flags & OPf_STACKED))
9579 /* Turn "$a .= <FH>" into an OP_RCATLINE. AMS 20010917 */
9580 o->op_type = OP_RCATLINE;
9581 o->op_flags |= OPf_STACKED;
9582 o->op_ppaddr = PL_ppaddr[OP_RCATLINE];
9583 op_null(o->op_next->op_next);
9584 op_null(o->op_next);
9594 fop = cUNOP->op_first;
9602 fop = cLOGOP->op_first;
9603 sop = fop->op_sibling;
9604 while (cLOGOP->op_other->op_type == OP_NULL)
9605 cLOGOP->op_other = cLOGOP->op_other->op_next;
9606 CALL_RPEEP(cLOGOP->op_other);
9610 if ((fop->op_type == OP_PADHV || fop->op_type == OP_RV2HV)
9612 (sop->op_type == OP_PADHV || sop->op_type == OP_RV2HV)
9617 if (!((nop->op_flags & OPf_WANT) == OPf_WANT_VOID)) {
9618 while (nop && nop->op_next) {
9619 switch (nop->op_next->op_type) {
9624 lop = nop = nop->op_next;
9635 if ((lop->op_flags & OPf_WANT) == OPf_WANT_VOID) {
9636 if (fop->op_type == OP_PADHV || fop->op_type == OP_RV2HV)
9637 cLOGOP->op_first = opt_scalarhv(fop);
9638 if (sop && (sop->op_type == OP_PADHV || sop->op_type == OP_RV2HV))
9639 cLOGOP->op_first->op_sibling = opt_scalarhv(sop);
9655 while (cLOGOP->op_other->op_type == OP_NULL)
9656 cLOGOP->op_other = cLOGOP->op_other->op_next;
9657 CALL_RPEEP(cLOGOP->op_other);
9662 while (cLOOP->op_redoop->op_type == OP_NULL)
9663 cLOOP->op_redoop = cLOOP->op_redoop->op_next;
9664 CALL_RPEEP(cLOOP->op_redoop);
9665 while (cLOOP->op_nextop->op_type == OP_NULL)
9666 cLOOP->op_nextop = cLOOP->op_nextop->op_next;
9667 CALL_RPEEP(cLOOP->op_nextop);
9668 while (cLOOP->op_lastop->op_type == OP_NULL)
9669 cLOOP->op_lastop = cLOOP->op_lastop->op_next;
9670 CALL_RPEEP(cLOOP->op_lastop);
9674 assert(!(cPMOP->op_pmflags & PMf_ONCE));
9675 while (cPMOP->op_pmstashstartu.op_pmreplstart &&
9676 cPMOP->op_pmstashstartu.op_pmreplstart->op_type == OP_NULL)
9677 cPMOP->op_pmstashstartu.op_pmreplstart
9678 = cPMOP->op_pmstashstartu.op_pmreplstart->op_next;
9679 CALL_RPEEP(cPMOP->op_pmstashstartu.op_pmreplstart);
9683 if (o->op_next && o->op_next->op_type == OP_NEXTSTATE
9684 && ckWARN(WARN_SYNTAX))
9686 if (o->op_next->op_sibling) {
9687 const OPCODE type = o->op_next->op_sibling->op_type;
9688 if (type != OP_EXIT && type != OP_WARN && type != OP_DIE) {
9689 const line_t oldline = CopLINE(PL_curcop);
9690 CopLINE_set(PL_curcop, CopLINE((COP*)o->op_next));
9691 Perl_warner(aTHX_ packWARN(WARN_EXEC),
9692 "Statement unlikely to be reached");
9693 Perl_warner(aTHX_ packWARN(WARN_EXEC),
9694 "\t(Maybe you meant system() when you said exec()?)\n");
9695 CopLINE_set(PL_curcop, oldline);
9706 const char *key = NULL;
9709 if (((BINOP*)o)->op_last->op_type != OP_CONST)
9712 /* Make the CONST have a shared SV */
9713 svp = cSVOPx_svp(((BINOP*)o)->op_last);
9714 if ((!SvFAKE(sv = *svp) || !SvREADONLY(sv))
9715 && SvTYPE(sv) < SVt_PVMG && !SvROK(sv)) {
9716 key = SvPV_const(sv, keylen);
9717 lexname = newSVpvn_share(key,
9718 SvUTF8(sv) ? -(I32)keylen : (I32)keylen,
9724 if ((o->op_private & (OPpLVAL_INTRO)))
9727 rop = (UNOP*)((BINOP*)o)->op_first;
9728 if (rop->op_type != OP_RV2HV || rop->op_first->op_type != OP_PADSV)
9730 lexname = *av_fetch(PL_comppad_name, rop->op_first->op_targ, TRUE);
9731 if (!SvPAD_TYPED(lexname))
9733 fields = (GV**)hv_fetchs(SvSTASH(lexname), "FIELDS", FALSE);
9734 if (!fields || !GvHV(*fields))
9736 key = SvPV_const(*svp, keylen);
9737 if (!hv_fetch(GvHV(*fields), key,
9738 SvUTF8(*svp) ? -(I32)keylen : (I32)keylen, FALSE))
9740 Perl_croak(aTHX_ "No such class field \"%s\" "
9741 "in variable %s of type %s",
9742 key, SvPV_nolen_const(lexname), HvNAME_get(SvSTASH(lexname)));
9755 SVOP *first_key_op, *key_op;
9757 if ((o->op_private & (OPpLVAL_INTRO))
9758 /* I bet there's always a pushmark... */
9759 || ((LISTOP*)o)->op_first->op_sibling->op_type != OP_LIST)
9760 /* hmmm, no optimization if list contains only one key. */
9762 rop = (UNOP*)((LISTOP*)o)->op_last;
9763 if (rop->op_type != OP_RV2HV)
9765 if (rop->op_first->op_type == OP_PADSV)
9766 /* @$hash{qw(keys here)} */
9767 rop = (UNOP*)rop->op_first;
9769 /* @{$hash}{qw(keys here)} */
9770 if (rop->op_first->op_type == OP_SCOPE
9771 && cLISTOPx(rop->op_first)->op_last->op_type == OP_PADSV)
9773 rop = (UNOP*)cLISTOPx(rop->op_first)->op_last;
9779 lexname = *av_fetch(PL_comppad_name, rop->op_targ, TRUE);
9780 if (!SvPAD_TYPED(lexname))
9782 fields = (GV**)hv_fetchs(SvSTASH(lexname), "FIELDS", FALSE);
9783 if (!fields || !GvHV(*fields))
9785 /* Again guessing that the pushmark can be jumped over.... */
9786 first_key_op = (SVOP*)((LISTOP*)((LISTOP*)o)->op_first->op_sibling)
9787 ->op_first->op_sibling;
9788 for (key_op = first_key_op; key_op;
9789 key_op = (SVOP*)key_op->op_sibling) {
9790 if (key_op->op_type != OP_CONST)
9792 svp = cSVOPx_svp(key_op);
9793 key = SvPV_const(*svp, keylen);
9794 if (!hv_fetch(GvHV(*fields), key,
9795 SvUTF8(*svp) ? -(I32)keylen : (I32)keylen, FALSE))
9797 Perl_croak(aTHX_ "No such class field \"%s\" "
9798 "in variable %s of type %s",
9799 key, SvPV_nolen(lexname), HvNAME_get(SvSTASH(lexname)));
9810 ( oldop->op_type == OP_AELEM
9811 || oldop->op_type == OP_PADSV
9812 || oldop->op_type == OP_RV2SV
9813 || oldop->op_type == OP_RV2GV
9814 || oldop->op_type == OP_HELEM
9816 && (oldop->op_private & OPpDEREF)
9818 || ( oldop->op_type == OP_ENTERSUB
9819 && oldop->op_private & OPpENTERSUB_DEREF )
9822 o->op_private |= OPpDEREFed;
9826 /* will point to RV2AV or PADAV op on LHS/RHS of assign */
9830 /* check that RHS of sort is a single plain array */
9831 OP *oright = cUNOPo->op_first;
9832 if (!oright || oright->op_type != OP_PUSHMARK)
9835 /* reverse sort ... can be optimised. */
9836 if (!cUNOPo->op_sibling) {
9837 /* Nothing follows us on the list. */
9838 OP * const reverse = o->op_next;
9840 if (reverse->op_type == OP_REVERSE &&
9841 (reverse->op_flags & OPf_WANT) == OPf_WANT_LIST) {
9842 OP * const pushmark = cUNOPx(reverse)->op_first;
9843 if (pushmark && (pushmark->op_type == OP_PUSHMARK)
9844 && (cUNOPx(pushmark)->op_sibling == o)) {
9845 /* reverse -> pushmark -> sort */
9846 o->op_private |= OPpSORT_REVERSE;
9848 pushmark->op_next = oright->op_next;
9854 /* make @a = sort @a act in-place */
9856 oright = cUNOPx(oright)->op_sibling;
9859 if (oright->op_type == OP_NULL) { /* skip sort block/sub */
9860 oright = cUNOPx(oright)->op_sibling;
9863 oleft = is_inplace_av(o, oright);
9867 /* transfer MODishness etc from LHS arg to RHS arg */
9868 oright->op_flags = oleft->op_flags;
9869 o->op_private |= OPpSORT_INPLACE;
9871 /* excise push->gv->rv2av->null->aassign */
9872 o2 = o->op_next->op_next;
9873 op_null(o2); /* PUSHMARK */
9875 if (o2->op_type == OP_GV) {
9876 op_null(o2); /* GV */
9879 op_null(o2); /* RV2AV or PADAV */
9880 o2 = o2->op_next->op_next;
9881 op_null(o2); /* AASSIGN */
9883 o->op_next = o2->op_next;
9889 OP *ourmark, *theirmark, *ourlast, *iter, *expushmark, *rv2av;
9892 LISTOP *enter, *exlist;
9894 /* @a = reverse @a */
9895 if ((oright = cLISTOPo->op_first)
9896 && (oright->op_type == OP_PUSHMARK)
9897 && (oright = oright->op_sibling)
9898 && (oleft = is_inplace_av(o, oright))) {
9901 /* transfer MODishness etc from LHS arg to RHS arg */
9902 oright->op_flags = oleft->op_flags;
9903 o->op_private |= OPpREVERSE_INPLACE;
9905 /* excise push->gv->rv2av->null->aassign */
9906 o2 = o->op_next->op_next;
9907 op_null(o2); /* PUSHMARK */
9909 if (o2->op_type == OP_GV) {
9910 op_null(o2); /* GV */
9913 op_null(o2); /* RV2AV or PADAV */
9914 o2 = o2->op_next->op_next;
9915 op_null(o2); /* AASSIGN */
9917 o->op_next = o2->op_next;
9921 enter = (LISTOP *) o->op_next;
9924 if (enter->op_type == OP_NULL) {
9925 enter = (LISTOP *) enter->op_next;
9929 /* for $a (...) will have OP_GV then OP_RV2GV here.
9930 for (...) just has an OP_GV. */
9931 if (enter->op_type == OP_GV) {
9932 gvop = (OP *) enter;
9933 enter = (LISTOP *) enter->op_next;
9936 if (enter->op_type == OP_RV2GV) {
9937 enter = (LISTOP *) enter->op_next;
9943 if (enter->op_type != OP_ENTERITER)
9946 iter = enter->op_next;
9947 if (!iter || iter->op_type != OP_ITER)
9950 expushmark = enter->op_first;
9951 if (!expushmark || expushmark->op_type != OP_NULL
9952 || expushmark->op_targ != OP_PUSHMARK)
9955 exlist = (LISTOP *) expushmark->op_sibling;
9956 if (!exlist || exlist->op_type != OP_NULL
9957 || exlist->op_targ != OP_LIST)
9960 if (exlist->op_last != o) {
9961 /* Mmm. Was expecting to point back to this op. */
9964 theirmark = exlist->op_first;
9965 if (!theirmark || theirmark->op_type != OP_PUSHMARK)
9968 if (theirmark->op_sibling != o) {
9969 /* There's something between the mark and the reverse, eg
9970 for (1, reverse (...))
9975 ourmark = ((LISTOP *)o)->op_first;
9976 if (!ourmark || ourmark->op_type != OP_PUSHMARK)
9979 ourlast = ((LISTOP *)o)->op_last;
9980 if (!ourlast || ourlast->op_next != o)
9983 rv2av = ourmark->op_sibling;
9984 if (rv2av && rv2av->op_type == OP_RV2AV && rv2av->op_sibling == 0
9985 && rv2av->op_flags == (OPf_WANT_LIST | OPf_KIDS)
9986 && enter->op_flags == (OPf_WANT_LIST | OPf_KIDS)) {
9987 /* We're just reversing a single array. */
9988 rv2av->op_flags = OPf_WANT_SCALAR | OPf_KIDS | OPf_REF;
9989 enter->op_flags |= OPf_STACKED;
9992 /* We don't have control over who points to theirmark, so sacrifice
9994 theirmark->op_next = ourmark->op_next;
9995 theirmark->op_flags = ourmark->op_flags;
9996 ourlast->op_next = gvop ? gvop : (OP *) enter;
9999 enter->op_private |= OPpITER_REVERSED;
10000 iter->op_private |= OPpITER_REVERSED;
10007 UNOP *refgen, *rv2cv;
10010 if ((o->op_flags & OPf_WANT) != OPf_WANT_VOID)
10013 if ((o->op_private & ~OPpASSIGN_BACKWARDS) != 2)
10016 rv2gv = ((BINOP *)o)->op_last;
10017 if (!rv2gv || rv2gv->op_type != OP_RV2GV)
10020 refgen = (UNOP *)((BINOP *)o)->op_first;
10022 if (!refgen || refgen->op_type != OP_REFGEN)
10025 exlist = (LISTOP *)refgen->op_first;
10026 if (!exlist || exlist->op_type != OP_NULL
10027 || exlist->op_targ != OP_LIST)
10030 if (exlist->op_first->op_type != OP_PUSHMARK)
10033 rv2cv = (UNOP*)exlist->op_last;
10035 if (rv2cv->op_type != OP_RV2CV)
10038 assert ((rv2gv->op_private & OPpDONT_INIT_GV) == 0);
10039 assert ((o->op_private & OPpASSIGN_CV_TO_GV) == 0);
10040 assert ((rv2cv->op_private & OPpMAY_RETURN_CONSTANT) == 0);
10042 o->op_private |= OPpASSIGN_CV_TO_GV;
10043 rv2gv->op_private |= OPpDONT_INIT_GV;
10044 rv2cv->op_private |= OPpMAY_RETURN_CONSTANT;
10052 if (!(cPMOP->op_pmflags & PMf_ONCE)) {
10053 assert (!cPMOP->op_pmstashstartu.op_pmreplstart);
10058 Perl_cpeep_t cpeep =
10059 XopENTRY(Perl_custom_op_xop(aTHX_ o), xop_peep);
10061 cpeep(aTHX_ o, oldop);
10072 Perl_peep(pTHX_ register OP *o)
10078 =head1 Custom Operators
10080 =for apidoc Ao||custom_op_xop
10081 Return the XOP structure for a given custom op. This function should be
10082 considered internal to OP_NAME and the other access macros: use them instead.
10088 Perl_custom_op_xop(pTHX_ const OP *o)
10094 static const XOP xop_null = { 0, 0, 0, 0, 0 };
10096 PERL_ARGS_ASSERT_CUSTOM_OP_XOP;
10097 assert(o->op_type == OP_CUSTOM);
10099 /* This is wrong. It assumes a function pointer can be cast to IV,
10100 * which isn't guaranteed, but this is what the old custom OP code
10101 * did. In principle it should be safer to Copy the bytes of the
10102 * pointer into a PV: since the new interface is hidden behind
10103 * functions, this can be changed later if necessary. */
10104 /* Change custom_op_xop if this ever happens */
10105 keysv = sv_2mortal(newSViv(PTR2IV(o->op_ppaddr)));
10108 he = hv_fetch_ent(PL_custom_ops, keysv, 0, 0);
10110 /* assume noone will have just registered a desc */
10111 if (!he && PL_custom_op_names &&
10112 (he = hv_fetch_ent(PL_custom_op_names, keysv, 0, 0))
10117 /* XXX does all this need to be shared mem? */
10118 Newxz(xop, 1, XOP);
10119 pv = SvPV(HeVAL(he), l);
10120 XopENTRY_set(xop, xop_name, savepvn(pv, l));
10121 if (PL_custom_op_descs &&
10122 (he = hv_fetch_ent(PL_custom_op_descs, keysv, 0, 0))
10124 pv = SvPV(HeVAL(he), l);
10125 XopENTRY_set(xop, xop_desc, savepvn(pv, l));
10127 Perl_custom_op_register(aTHX_ o->op_ppaddr, xop);
10131 if (!he) return &xop_null;
10133 xop = INT2PTR(XOP *, SvIV(HeVAL(he)));
10138 =for apidoc Ao||custom_op_register
10139 Register a custom op. See L<perlguts/"Custom Operators">.
10145 Perl_custom_op_register(pTHX_ Perl_ppaddr_t ppaddr, const XOP *xop)
10149 PERL_ARGS_ASSERT_CUSTOM_OP_REGISTER;
10151 /* see the comment in custom_op_xop */
10152 keysv = sv_2mortal(newSViv(PTR2IV(ppaddr)));
10154 if (!PL_custom_ops)
10155 PL_custom_ops = newHV();
10157 if (!hv_store_ent(PL_custom_ops, keysv, newSViv(PTR2IV(xop)), 0))
10158 Perl_croak(aTHX_ "panic: can't register custom OP %s", xop->xop_name);
10163 /* Efficient sub that returns a constant scalar value. */
10165 const_sv_xsub(pTHX_ CV* cv)
10169 SV *const sv = MUTABLE_SV(XSANY.any_ptr);
10173 /* diag_listed_as: SKIPME */
10174 Perl_croak(aTHX_ "usage: %s::%s()",
10175 HvNAME_get(GvSTASH(CvGV(cv))), GvNAME(CvGV(cv)));
10188 * c-indentation-style: bsd
10189 * c-basic-offset: 4
10190 * indent-tabs-mode: t
10193 * ex: set ts=8 sts=4 sw=4 noet: