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)
314 S_gv_ename(pTHX_ GV *gv)
316 SV* const tmpsv = sv_newmortal();
318 PERL_ARGS_ASSERT_GV_ENAME;
320 gv_efullname3(tmpsv, gv, NULL);
321 return SvPV_nolen_const(tmpsv);
325 S_no_fh_allowed(pTHX_ OP *o)
327 PERL_ARGS_ASSERT_NO_FH_ALLOWED;
329 yyerror(Perl_form(aTHX_ "Missing comma after first argument to %s function",
335 S_too_few_arguments(pTHX_ OP *o, const char *name)
337 PERL_ARGS_ASSERT_TOO_FEW_ARGUMENTS;
339 yyerror(Perl_form(aTHX_ "Not enough arguments for %s", name));
344 S_too_many_arguments(pTHX_ OP *o, const char *name)
346 PERL_ARGS_ASSERT_TOO_MANY_ARGUMENTS;
348 yyerror(Perl_form(aTHX_ "Too many arguments for %s", name));
353 S_bad_type(pTHX_ I32 n, const char *t, const char *name, const OP *kid)
355 PERL_ARGS_ASSERT_BAD_TYPE;
357 yyerror(Perl_form(aTHX_ "Type of arg %d to %s must be %s (not %s)",
358 (int)n, name, t, OP_DESC(kid)));
362 S_no_bareword_allowed(pTHX_ const OP *o)
364 PERL_ARGS_ASSERT_NO_BAREWORD_ALLOWED;
367 return; /* various ok barewords are hidden in extra OP_NULL */
368 qerror(Perl_mess(aTHX_
369 "Bareword \"%"SVf"\" not allowed while \"strict subs\" in use",
373 /* "register" allocation */
376 Perl_allocmy(pTHX_ const char *const name, const STRLEN len, const U32 flags)
380 const bool is_our = (PL_parser->in_my == KEY_our);
382 PERL_ARGS_ASSERT_ALLOCMY;
385 Perl_croak(aTHX_ "panic: allocmy illegal flag bits 0x%" UVxf,
388 /* Until we're using the length for real, cross check that we're being
390 assert(strlen(name) == len);
392 /* complain about "my $<special_var>" etc etc */
396 (USE_UTF8_IN_NAMES && UTF8_IS_START(name[1])) ||
397 (name[1] == '_' && (*name == '$' || len > 2))))
399 /* name[2] is true if strlen(name) > 2 */
400 if (!isPRINT(name[1]) || strchr("\t\n\r\f", name[1])) {
401 yyerror(Perl_form(aTHX_ "Can't use global %c^%c%.*s in \"%s\"",
402 name[0], toCTRL(name[1]), (int)(len - 2), name + 2,
403 PL_parser->in_my == KEY_state ? "state" : "my"));
405 yyerror(Perl_form(aTHX_ "Can't use global %.*s in \"%s\"", (int) len, name,
406 PL_parser->in_my == KEY_state ? "state" : "my"));
410 /* allocate a spare slot and store the name in that slot */
412 off = pad_add_name(name, len,
413 is_our ? padadd_OUR :
414 PL_parser->in_my == KEY_state ? padadd_STATE : 0,
415 PL_parser->in_my_stash,
417 /* $_ is always in main::, even with our */
418 ? (PL_curstash && !strEQ(name,"$_") ? PL_curstash : PL_defstash)
422 /* anon sub prototypes contains state vars should always be cloned,
423 * otherwise the state var would be shared between anon subs */
425 if (PL_parser->in_my == KEY_state && CvANON(PL_compcv))
426 CvCLONE_on(PL_compcv);
431 /* free the body of an op without examining its contents.
432 * Always use this rather than FreeOp directly */
435 S_op_destroy(pTHX_ OP *o)
437 if (o->op_latefree) {
445 # define forget_pmop(a,b) S_forget_pmop(aTHX_ a,b)
447 # define forget_pmop(a,b) S_forget_pmop(aTHX_ a)
453 Perl_op_free(pTHX_ OP *o)
460 if (o->op_latefreed) {
467 if (o->op_private & OPpREFCOUNTED) {
478 refcnt = OpREFCNT_dec(o);
481 /* Need to find and remove any pattern match ops from the list
482 we maintain for reset(). */
483 find_and_forget_pmops(o);
493 /* Call the op_free hook if it has been set. Do it now so that it's called
494 * at the right time for refcounted ops, but still before all of the kids
498 if (o->op_flags & OPf_KIDS) {
499 register OP *kid, *nextkid;
500 for (kid = cUNOPo->op_first; kid; kid = nextkid) {
501 nextkid = kid->op_sibling; /* Get before next freeing kid */
506 #ifdef PERL_DEBUG_READONLY_OPS
510 /* COP* is not cleared by op_clear() so that we may track line
511 * numbers etc even after null() */
512 if (type == OP_NEXTSTATE || type == OP_DBSTATE
513 || (type == OP_NULL /* the COP might have been null'ed */
514 && ((OPCODE)o->op_targ == OP_NEXTSTATE
515 || (OPCODE)o->op_targ == OP_DBSTATE))) {
520 type = (OPCODE)o->op_targ;
523 if (o->op_latefree) {
529 #ifdef DEBUG_LEAKING_SCALARS
536 Perl_op_clear(pTHX_ OP *o)
541 PERL_ARGS_ASSERT_OP_CLEAR;
544 /* if (o->op_madprop && o->op_madprop->mad_next)
546 /* FIXME for MAD - if I uncomment these two lines t/op/pack.t fails with
547 "modification of a read only value" for a reason I can't fathom why.
548 It's the "" stringification of $_, where $_ was set to '' in a foreach
549 loop, but it defies simplification into a small test case.
550 However, commenting them out has caused ext/List/Util/t/weak.t to fail
553 mad_free(o->op_madprop);
559 switch (o->op_type) {
560 case OP_NULL: /* Was holding old type, if any. */
561 if (PL_madskills && o->op_targ != OP_NULL) {
562 o->op_type = (Optype)o->op_targ;
567 case OP_ENTEREVAL: /* Was holding hints. */
571 if (!(o->op_flags & OPf_REF)
572 || (PL_check[o->op_type] != MEMBER_TO_FPTR(Perl_ck_ftst)))
578 if (! (o->op_type == OP_AELEMFAST && o->op_flags & OPf_SPECIAL)) {
579 /* not an OP_PADAV replacement */
580 GV *gv = (o->op_type == OP_GV || o->op_type == OP_GVSV)
585 /* It's possible during global destruction that the GV is freed
586 before the optree. Whilst the SvREFCNT_inc is happy to bump from
587 0 to 1 on a freed SV, the corresponding SvREFCNT_dec from 1 to 0
588 will trigger an assertion failure, because the entry to sv_clear
589 checks that the scalar is not already freed. A check of for
590 !SvIS_FREED(gv) turns out to be invalid, because during global
591 destruction the reference count can be forced down to zero
592 (with SVf_BREAK set). In which case raising to 1 and then
593 dropping to 0 triggers cleanup before it should happen. I
594 *think* that this might actually be a general, systematic,
595 weakness of the whole idea of SVf_BREAK, in that code *is*
596 allowed to raise and lower references during global destruction,
597 so any *valid* code that happens to do this during global
598 destruction might well trigger premature cleanup. */
599 bool still_valid = gv && SvREFCNT(gv);
602 SvREFCNT_inc_simple_void(gv);
604 if (cPADOPo->op_padix > 0) {
605 /* No GvIN_PAD_off(cGVOPo_gv) here, because other references
606 * may still exist on the pad */
607 pad_swipe(cPADOPo->op_padix, TRUE);
608 cPADOPo->op_padix = 0;
611 SvREFCNT_dec(cSVOPo->op_sv);
612 cSVOPo->op_sv = NULL;
615 int try_downgrade = SvREFCNT(gv) == 2;
618 gv_try_downgrade(gv);
622 case OP_METHOD_NAMED:
625 SvREFCNT_dec(cSVOPo->op_sv);
626 cSVOPo->op_sv = NULL;
629 Even if op_clear does a pad_free for the target of the op,
630 pad_free doesn't actually remove the sv that exists in the pad;
631 instead it lives on. This results in that it could be reused as
632 a target later on when the pad was reallocated.
635 pad_swipe(o->op_targ,1);
644 if (o->op_flags & (OPf_SPECIAL|OPf_STACKED|OPf_KIDS))
648 if (o->op_private & (OPpTRANS_FROM_UTF|OPpTRANS_TO_UTF)) {
650 if (cPADOPo->op_padix > 0) {
651 pad_swipe(cPADOPo->op_padix, TRUE);
652 cPADOPo->op_padix = 0;
655 SvREFCNT_dec(cSVOPo->op_sv);
656 cSVOPo->op_sv = NULL;
660 PerlMemShared_free(cPVOPo->op_pv);
661 cPVOPo->op_pv = NULL;
665 op_free(cPMOPo->op_pmreplrootu.op_pmreplroot);
669 if (cPMOPo->op_pmreplrootu.op_pmtargetoff) {
670 /* No GvIN_PAD_off here, because other references may still
671 * exist on the pad */
672 pad_swipe(cPMOPo->op_pmreplrootu.op_pmtargetoff, TRUE);
675 SvREFCNT_dec(MUTABLE_SV(cPMOPo->op_pmreplrootu.op_pmtargetgv));
681 forget_pmop(cPMOPo, 1);
682 cPMOPo->op_pmreplrootu.op_pmreplroot = NULL;
683 /* we use the same protection as the "SAFE" version of the PM_ macros
684 * here since sv_clean_all might release some PMOPs
685 * after PL_regex_padav has been cleared
686 * and the clearing of PL_regex_padav needs to
687 * happen before sv_clean_all
690 if(PL_regex_pad) { /* We could be in destruction */
691 const IV offset = (cPMOPo)->op_pmoffset;
692 ReREFCNT_dec(PM_GETRE(cPMOPo));
693 PL_regex_pad[offset] = &PL_sv_undef;
694 sv_catpvn_nomg(PL_regex_pad[0], (const char *)&offset,
698 ReREFCNT_dec(PM_GETRE(cPMOPo));
699 PM_SETRE(cPMOPo, NULL);
705 if (o->op_targ > 0) {
706 pad_free(o->op_targ);
712 S_cop_free(pTHX_ COP* cop)
714 PERL_ARGS_ASSERT_COP_FREE;
718 if (! specialWARN(cop->cop_warnings))
719 PerlMemShared_free(cop->cop_warnings);
720 Perl_refcounted_he_free(aTHX_ cop->cop_hints_hash);
724 S_forget_pmop(pTHX_ PMOP *const o
730 HV * const pmstash = PmopSTASH(o);
732 PERL_ARGS_ASSERT_FORGET_PMOP;
734 if (pmstash && !SvIS_FREED(pmstash)) {
735 MAGIC * const mg = mg_find((const SV *)pmstash, PERL_MAGIC_symtab);
737 PMOP **const array = (PMOP**) mg->mg_ptr;
738 U32 count = mg->mg_len / sizeof(PMOP**);
743 /* Found it. Move the entry at the end to overwrite it. */
744 array[i] = array[--count];
745 mg->mg_len = count * sizeof(PMOP**);
746 /* Could realloc smaller at this point always, but probably
747 not worth it. Probably worth free()ing if we're the
750 Safefree(mg->mg_ptr);
767 S_find_and_forget_pmops(pTHX_ OP *o)
769 PERL_ARGS_ASSERT_FIND_AND_FORGET_PMOPS;
771 if (o->op_flags & OPf_KIDS) {
772 OP *kid = cUNOPo->op_first;
774 switch (kid->op_type) {
779 forget_pmop((PMOP*)kid, 0);
781 find_and_forget_pmops(kid);
782 kid = kid->op_sibling;
788 Perl_op_null(pTHX_ OP *o)
792 PERL_ARGS_ASSERT_OP_NULL;
794 if (o->op_type == OP_NULL)
798 o->op_targ = o->op_type;
799 o->op_type = OP_NULL;
800 o->op_ppaddr = PL_ppaddr[OP_NULL];
804 Perl_op_refcnt_lock(pTHX)
812 Perl_op_refcnt_unlock(pTHX)
819 /* Contextualizers */
821 #define LINKLIST(o) ((o)->op_next ? (o)->op_next : linklist((OP*)o))
824 S_linklist(pTHX_ OP *o)
828 PERL_ARGS_ASSERT_LINKLIST;
833 /* establish postfix order */
834 first = cUNOPo->op_first;
837 o->op_next = LINKLIST(first);
840 if (kid->op_sibling) {
841 kid->op_next = LINKLIST(kid->op_sibling);
842 kid = kid->op_sibling;
856 S_scalarkids(pTHX_ OP *o)
858 if (o && o->op_flags & OPf_KIDS) {
860 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
867 S_scalarboolean(pTHX_ OP *o)
871 PERL_ARGS_ASSERT_SCALARBOOLEAN;
873 if (o->op_type == OP_SASSIGN && cBINOPo->op_first->op_type == OP_CONST) {
874 if (ckWARN(WARN_SYNTAX)) {
875 const line_t oldline = CopLINE(PL_curcop);
877 if (PL_parser && PL_parser->copline != NOLINE)
878 CopLINE_set(PL_curcop, PL_parser->copline);
879 Perl_warner(aTHX_ packWARN(WARN_SYNTAX), "Found = in conditional, should be ==");
880 CopLINE_set(PL_curcop, oldline);
887 Perl_scalar(pTHX_ OP *o)
892 /* assumes no premature commitment */
893 if (!o || (PL_parser && PL_parser->error_count)
894 || (o->op_flags & OPf_WANT)
895 || o->op_type == OP_RETURN)
900 o->op_flags = (o->op_flags & ~OPf_WANT) | OPf_WANT_SCALAR;
902 switch (o->op_type) {
904 scalar(cBINOPo->op_first);
909 for (kid = cUNOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
919 if (o->op_flags & OPf_KIDS) {
920 for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling)
926 kid = cLISTOPo->op_first;
928 kid = kid->op_sibling;
931 OP *sib = kid->op_sibling;
932 if (sib && kid->op_type != OP_LEAVEWHEN) {
933 if (sib->op_type == OP_BREAK && sib->op_flags & OPf_SPECIAL) {
943 PL_curcop = &PL_compiling;
948 kid = cLISTOPo->op_first;
951 Perl_ck_warner(aTHX_ packWARN(WARN_VOID), "Useless use of sort in scalar context");
958 Perl_scalarvoid(pTHX_ OP *o)
962 const char* useless = NULL;
966 PERL_ARGS_ASSERT_SCALARVOID;
968 /* trailing mad null ops don't count as "there" for void processing */
970 o->op_type != OP_NULL &&
972 o->op_sibling->op_type == OP_NULL)
975 for (sib = o->op_sibling;
976 sib && sib->op_type == OP_NULL;
977 sib = sib->op_sibling) ;
983 if (o->op_type == OP_NEXTSTATE
984 || o->op_type == OP_DBSTATE
985 || (o->op_type == OP_NULL && (o->op_targ == OP_NEXTSTATE
986 || o->op_targ == OP_DBSTATE)))
987 PL_curcop = (COP*)o; /* for warning below */
989 /* assumes no premature commitment */
990 want = o->op_flags & OPf_WANT;
991 if ((want && want != OPf_WANT_SCALAR)
992 || (PL_parser && PL_parser->error_count)
993 || o->op_type == OP_RETURN || o->op_type == OP_REQUIRE || o->op_type == OP_LEAVEWHEN)
998 if ((o->op_private & OPpTARGET_MY)
999 && (PL_opargs[o->op_type] & OA_TARGLEX))/* OPp share the meaning */
1001 return scalar(o); /* As if inside SASSIGN */
1004 o->op_flags = (o->op_flags & ~OPf_WANT) | OPf_WANT_VOID;
1006 switch (o->op_type) {
1008 if (!(PL_opargs[o->op_type] & OA_FOLDCONST))
1012 if (o->op_flags & OPf_STACKED)
1016 if (o->op_private == 4)
1059 case OP_GETSOCKNAME:
1060 case OP_GETPEERNAME:
1065 case OP_GETPRIORITY:
1089 if (!(o->op_private & (OPpLVAL_INTRO|OPpOUR_INTRO)))
1090 /* Otherwise it's "Useless use of grep iterator" */
1091 useless = OP_DESC(o);
1095 kid = cLISTOPo->op_first;
1096 if (kid && kid->op_type == OP_PUSHRE
1098 && !((PMOP*)kid)->op_pmreplrootu.op_pmtargetoff)
1100 && !((PMOP*)kid)->op_pmreplrootu.op_pmtargetgv)
1102 useless = OP_DESC(o);
1106 kid = cUNOPo->op_first;
1107 if (kid->op_type != OP_MATCH && kid->op_type != OP_SUBST &&
1108 kid->op_type != OP_TRANS) {
1111 useless = "negative pattern binding (!~)";
1115 if (cPMOPo->op_pmflags & PMf_NONDESTRUCT)
1116 useless = "Non-destructive substitution (s///r)";
1123 if (!(o->op_private & (OPpLVAL_INTRO|OPpOUR_INTRO)) &&
1124 (!o->op_sibling || o->op_sibling->op_type != OP_READLINE))
1125 useless = "a variable";
1130 if (cSVOPo->op_private & OPpCONST_STRICT)
1131 no_bareword_allowed(o);
1133 if (ckWARN(WARN_VOID)) {
1135 SV* msv = sv_2mortal(Perl_newSVpvf(aTHX_
1136 "a constant (%"SVf")", sv));
1137 useless = SvPV_nolen(msv);
1140 useless = "a constant (undef)";
1141 if (o->op_private & OPpCONST_ARYBASE)
1143 /* don't warn on optimised away booleans, eg
1144 * use constant Foo, 5; Foo || print; */
1145 if (cSVOPo->op_private & OPpCONST_SHORTCIRCUIT)
1147 /* the constants 0 and 1 are permitted as they are
1148 conventionally used as dummies in constructs like
1149 1 while some_condition_with_side_effects; */
1150 else if (SvNIOK(sv) && (SvNV(sv) == 0.0 || SvNV(sv) == 1.0))
1152 else if (SvPOK(sv)) {
1153 /* perl4's way of mixing documentation and code
1154 (before the invention of POD) was based on a
1155 trick to mix nroff and perl code. The trick was
1156 built upon these three nroff macros being used in
1157 void context. The pink camel has the details in
1158 the script wrapman near page 319. */
1159 const char * const maybe_macro = SvPVX_const(sv);
1160 if (strnEQ(maybe_macro, "di", 2) ||
1161 strnEQ(maybe_macro, "ds", 2) ||
1162 strnEQ(maybe_macro, "ig", 2))
1167 op_null(o); /* don't execute or even remember it */
1171 o->op_type = OP_PREINC; /* pre-increment is faster */
1172 o->op_ppaddr = PL_ppaddr[OP_PREINC];
1176 o->op_type = OP_PREDEC; /* pre-decrement is faster */
1177 o->op_ppaddr = PL_ppaddr[OP_PREDEC];
1181 o->op_type = OP_I_PREINC; /* pre-increment is faster */
1182 o->op_ppaddr = PL_ppaddr[OP_I_PREINC];
1186 o->op_type = OP_I_PREDEC; /* pre-decrement is faster */
1187 o->op_ppaddr = PL_ppaddr[OP_I_PREDEC];
1192 kid = cLOGOPo->op_first;
1193 if (kid->op_type == OP_NOT
1194 && (kid->op_flags & OPf_KIDS)
1196 if (o->op_type == OP_AND) {
1198 o->op_ppaddr = PL_ppaddr[OP_OR];
1200 o->op_type = OP_AND;
1201 o->op_ppaddr = PL_ppaddr[OP_AND];
1210 for (kid = cUNOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
1215 if (o->op_flags & OPf_STACKED)
1222 if (!(o->op_flags & OPf_KIDS))
1233 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
1243 Perl_ck_warner(aTHX_ packWARN(WARN_VOID), "Useless use of %s in void context", useless);
1248 S_listkids(pTHX_ OP *o)
1250 if (o && o->op_flags & OPf_KIDS) {
1252 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
1259 Perl_list(pTHX_ OP *o)
1264 /* assumes no premature commitment */
1265 if (!o || (o->op_flags & OPf_WANT)
1266 || (PL_parser && PL_parser->error_count)
1267 || o->op_type == OP_RETURN)
1272 if ((o->op_private & OPpTARGET_MY)
1273 && (PL_opargs[o->op_type] & OA_TARGLEX))/* OPp share the meaning */
1275 return o; /* As if inside SASSIGN */
1278 o->op_flags = (o->op_flags & ~OPf_WANT) | OPf_WANT_LIST;
1280 switch (o->op_type) {
1283 list(cBINOPo->op_first);
1288 for (kid = cUNOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
1296 if (!(o->op_flags & OPf_KIDS))
1298 if (!o->op_next && cUNOPo->op_first->op_type == OP_FLOP) {
1299 list(cBINOPo->op_first);
1300 return gen_constant_list(o);
1307 kid = cLISTOPo->op_first;
1309 kid = kid->op_sibling;
1312 OP *sib = kid->op_sibling;
1313 if (sib && kid->op_type != OP_LEAVEWHEN) {
1314 if (sib->op_type == OP_BREAK && sib->op_flags & OPf_SPECIAL) {
1324 PL_curcop = &PL_compiling;
1328 kid = cLISTOPo->op_first;
1335 S_scalarseq(pTHX_ OP *o)
1339 const OPCODE type = o->op_type;
1341 if (type == OP_LINESEQ || type == OP_SCOPE ||
1342 type == OP_LEAVE || type == OP_LEAVETRY)
1345 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling) {
1346 if (kid->op_sibling) {
1350 PL_curcop = &PL_compiling;
1352 o->op_flags &= ~OPf_PARENS;
1353 if (PL_hints & HINT_BLOCK_SCOPE)
1354 o->op_flags |= OPf_PARENS;
1357 o = newOP(OP_STUB, 0);
1362 S_modkids(pTHX_ OP *o, I32 type)
1364 if (o && o->op_flags & OPf_KIDS) {
1366 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
1372 /* Propagate lvalue ("modifiable") context to an op and its children.
1373 * 'type' represents the context type, roughly based on the type of op that
1374 * would do the modifying, although local() is represented by OP_NULL.
1375 * It's responsible for detecting things that can't be modified, flag
1376 * things that need to behave specially in an lvalue context (e.g., "$$x = 5"
1377 * might have to vivify a reference in $x), and so on.
1379 * For example, "$a+1 = 2" would cause mod() to be called with o being
1380 * OP_ADD and type being OP_SASSIGN, and would output an error.
1384 Perl_mod(pTHX_ OP *o, I32 type)
1388 /* -1 = error on localize, 0 = ignore localize, 1 = ok to localize */
1391 if (!o || (PL_parser && PL_parser->error_count))
1394 if ((o->op_private & OPpTARGET_MY)
1395 && (PL_opargs[o->op_type] & OA_TARGLEX))/* OPp share the meaning */
1400 switch (o->op_type) {
1406 if (!(o->op_private & OPpCONST_ARYBASE))
1409 if (PL_eval_start && PL_eval_start->op_type == OP_CONST) {
1410 CopARYBASE_set(&PL_compiling,
1411 (I32)SvIV(cSVOPx(PL_eval_start)->op_sv));
1415 SAVECOPARYBASE(&PL_compiling);
1416 CopARYBASE_set(&PL_compiling, 0);
1418 else if (type == OP_REFGEN)
1421 Perl_croak(aTHX_ "That use of $[ is unsupported");
1424 if ((o->op_flags & OPf_PARENS) || PL_madskills)
1428 if ((type == OP_UNDEF || type == OP_REFGEN) &&
1429 !(o->op_flags & OPf_STACKED)) {
1430 o->op_type = OP_RV2CV; /* entersub => rv2cv */
1431 /* The default is to set op_private to the number of children,
1432 which for a UNOP such as RV2CV is always 1. And w're using
1433 the bit for a flag in RV2CV, so we need it clear. */
1434 o->op_private &= ~1;
1435 o->op_ppaddr = PL_ppaddr[OP_RV2CV];
1436 assert(cUNOPo->op_first->op_type == OP_NULL);
1437 op_null(((LISTOP*)cUNOPo->op_first)->op_first);/* disable pushmark */
1440 else if (o->op_private & OPpENTERSUB_NOMOD)
1442 else { /* lvalue subroutine call */
1443 o->op_private |= OPpLVAL_INTRO;
1444 PL_modcount = RETURN_UNLIMITED_NUMBER;
1445 if (type == OP_GREPSTART || type == OP_ENTERSUB || type == OP_REFGEN) {
1446 /* Backward compatibility mode: */
1447 o->op_private |= OPpENTERSUB_INARGS;
1450 else { /* Compile-time error message: */
1451 OP *kid = cUNOPo->op_first;
1455 if (kid->op_type != OP_PUSHMARK) {
1456 if (kid->op_type != OP_NULL || kid->op_targ != OP_LIST)
1458 "panic: unexpected lvalue entersub "
1459 "args: type/targ %ld:%"UVuf,
1460 (long)kid->op_type, (UV)kid->op_targ);
1461 kid = kLISTOP->op_first;
1463 while (kid->op_sibling)
1464 kid = kid->op_sibling;
1465 if (!(kid->op_type == OP_NULL && kid->op_targ == OP_RV2CV)) {
1467 if (kid->op_type == OP_METHOD_NAMED
1468 || kid->op_type == OP_METHOD)
1472 NewOp(1101, newop, 1, UNOP);
1473 newop->op_type = OP_RV2CV;
1474 newop->op_ppaddr = PL_ppaddr[OP_RV2CV];
1475 newop->op_first = NULL;
1476 newop->op_next = (OP*)newop;
1477 kid->op_sibling = (OP*)newop;
1478 newop->op_private |= OPpLVAL_INTRO;
1479 newop->op_private &= ~1;
1483 if (kid->op_type != OP_RV2CV)
1485 "panic: unexpected lvalue entersub "
1486 "entry via type/targ %ld:%"UVuf,
1487 (long)kid->op_type, (UV)kid->op_targ);
1488 kid->op_private |= OPpLVAL_INTRO;
1489 break; /* Postpone until runtime */
1493 kid = kUNOP->op_first;
1494 if (kid->op_type == OP_NULL && kid->op_targ == OP_RV2SV)
1495 kid = kUNOP->op_first;
1496 if (kid->op_type == OP_NULL)
1498 "Unexpected constant lvalue entersub "
1499 "entry via type/targ %ld:%"UVuf,
1500 (long)kid->op_type, (UV)kid->op_targ);
1501 if (kid->op_type != OP_GV) {
1502 /* Restore RV2CV to check lvalueness */
1504 if (kid->op_next && kid->op_next != kid) { /* Happens? */
1505 okid->op_next = kid->op_next;
1506 kid->op_next = okid;
1509 okid->op_next = NULL;
1510 okid->op_type = OP_RV2CV;
1512 okid->op_ppaddr = PL_ppaddr[OP_RV2CV];
1513 okid->op_private |= OPpLVAL_INTRO;
1514 okid->op_private &= ~1;
1518 cv = GvCV(kGVOP_gv);
1528 /* grep, foreach, subcalls, refgen */
1529 if (type == OP_GREPSTART || type == OP_ENTERSUB || type == OP_REFGEN)
1531 yyerror(Perl_form(aTHX_ "Can't modify %s in %s",
1532 (o->op_type == OP_NULL && (o->op_flags & OPf_SPECIAL)
1534 : (o->op_type == OP_ENTERSUB
1535 ? "non-lvalue subroutine call"
1537 type ? PL_op_desc[type] : "local"));
1551 case OP_RIGHT_SHIFT:
1560 if (!(o->op_flags & OPf_STACKED))
1567 for (kid = cUNOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
1573 if (type == OP_REFGEN && o->op_flags & OPf_PARENS) {
1574 PL_modcount = RETURN_UNLIMITED_NUMBER;
1575 return o; /* Treat \(@foo) like ordinary list. */
1579 if (scalar_mod_type(o, type))
1581 ref(cUNOPo->op_first, o->op_type);
1585 if (type == OP_LEAVESUBLV)
1586 o->op_private |= OPpMAYBE_LVSUB;
1592 PL_modcount = RETURN_UNLIMITED_NUMBER;
1595 PL_hints |= HINT_BLOCK_SCOPE;
1596 if (type == OP_LEAVESUBLV)
1597 o->op_private |= OPpMAYBE_LVSUB;
1601 ref(cUNOPo->op_first, o->op_type);
1605 PL_hints |= HINT_BLOCK_SCOPE;
1620 PL_modcount = RETURN_UNLIMITED_NUMBER;
1621 if (type == OP_REFGEN && o->op_flags & OPf_PARENS)
1622 return o; /* Treat \(@foo) like ordinary list. */
1623 if (scalar_mod_type(o, type))
1625 if (type == OP_LEAVESUBLV)
1626 o->op_private |= OPpMAYBE_LVSUB;
1630 if (!type) /* local() */
1631 Perl_croak(aTHX_ "Can't localize lexical variable %s",
1632 PAD_COMPNAME_PV(o->op_targ));
1640 if (type != OP_SASSIGN)
1644 if (o->op_private == 4) /* don't allow 4 arg substr as lvalue */
1649 if (type == OP_LEAVESUBLV)
1650 o->op_private |= OPpMAYBE_LVSUB;
1652 pad_free(o->op_targ);
1653 o->op_targ = pad_alloc(o->op_type, SVs_PADMY);
1654 assert(SvTYPE(PAD_SV(o->op_targ)) == SVt_NULL);
1655 if (o->op_flags & OPf_KIDS)
1656 mod(cBINOPo->op_first->op_sibling, type);
1661 ref(cBINOPo->op_first, o->op_type);
1662 if (type == OP_ENTERSUB &&
1663 !(o->op_private & (OPpLVAL_INTRO | OPpDEREF)))
1664 o->op_private |= OPpLVAL_DEFER;
1665 if (type == OP_LEAVESUBLV)
1666 o->op_private |= OPpMAYBE_LVSUB;
1676 if (o->op_flags & OPf_KIDS)
1677 mod(cLISTOPo->op_last, type);
1682 if (o->op_flags & OPf_SPECIAL) /* do BLOCK */
1684 else if (!(o->op_flags & OPf_KIDS))
1686 if (o->op_targ != OP_LIST) {
1687 mod(cBINOPo->op_first, type);
1693 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
1698 if (type != OP_LEAVESUBLV)
1700 break; /* mod()ing was handled by ck_return() */
1703 /* [20011101.069] File test operators interpret OPf_REF to mean that
1704 their argument is a filehandle; thus \stat(".") should not set
1706 if (type == OP_REFGEN &&
1707 PL_check[o->op_type] == MEMBER_TO_FPTR(Perl_ck_ftst))
1710 if (type != OP_LEAVESUBLV)
1711 o->op_flags |= OPf_MOD;
1713 if (type == OP_AASSIGN || type == OP_SASSIGN)
1714 o->op_flags |= OPf_SPECIAL|OPf_REF;
1715 else if (!type) { /* local() */
1718 o->op_private |= OPpLVAL_INTRO;
1719 o->op_flags &= ~OPf_SPECIAL;
1720 PL_hints |= HINT_BLOCK_SCOPE;
1725 Perl_ck_warner(aTHX_ packWARN(WARN_SYNTAX),
1726 "Useless localization of %s", OP_DESC(o));
1729 else if (type != OP_GREPSTART && type != OP_ENTERSUB
1730 && type != OP_LEAVESUBLV)
1731 o->op_flags |= OPf_REF;
1736 S_scalar_mod_type(const OP *o, I32 type)
1738 PERL_ARGS_ASSERT_SCALAR_MOD_TYPE;
1742 if (o->op_type == OP_RV2GV)
1766 case OP_RIGHT_SHIFT:
1786 S_is_handle_constructor(const OP *o, I32 numargs)
1788 PERL_ARGS_ASSERT_IS_HANDLE_CONSTRUCTOR;
1790 switch (o->op_type) {
1798 case OP_SELECT: /* XXX c.f. SelectSaver.pm */
1811 S_refkids(pTHX_ OP *o, I32 type)
1813 if (o && o->op_flags & OPf_KIDS) {
1815 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
1822 Perl_doref(pTHX_ OP *o, I32 type, bool set_op_ref)
1827 PERL_ARGS_ASSERT_DOREF;
1829 if (!o || (PL_parser && PL_parser->error_count))
1832 switch (o->op_type) {
1834 if ((type == OP_EXISTS || type == OP_DEFINED || type == OP_LOCK) &&
1835 !(o->op_flags & OPf_STACKED)) {
1836 o->op_type = OP_RV2CV; /* entersub => rv2cv */
1837 o->op_ppaddr = PL_ppaddr[OP_RV2CV];
1838 assert(cUNOPo->op_first->op_type == OP_NULL);
1839 op_null(((LISTOP*)cUNOPo->op_first)->op_first); /* disable pushmark */
1840 o->op_flags |= OPf_SPECIAL;
1841 o->op_private &= ~1;
1846 for (kid = cUNOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
1847 doref(kid, type, set_op_ref);
1850 if (type == OP_DEFINED)
1851 o->op_flags |= OPf_SPECIAL; /* don't create GV */
1852 doref(cUNOPo->op_first, o->op_type, set_op_ref);
1855 if (type == OP_RV2SV || type == OP_RV2AV || type == OP_RV2HV) {
1856 o->op_private |= (type == OP_RV2AV ? OPpDEREF_AV
1857 : type == OP_RV2HV ? OPpDEREF_HV
1859 o->op_flags |= OPf_MOD;
1866 o->op_flags |= OPf_REF;
1869 if (type == OP_DEFINED)
1870 o->op_flags |= OPf_SPECIAL; /* don't create GV */
1871 doref(cUNOPo->op_first, o->op_type, set_op_ref);
1877 o->op_flags |= OPf_REF;
1882 if (!(o->op_flags & OPf_KIDS))
1884 doref(cBINOPo->op_first, type, set_op_ref);
1888 doref(cBINOPo->op_first, o->op_type, set_op_ref);
1889 if (type == OP_RV2SV || type == OP_RV2AV || type == OP_RV2HV) {
1890 o->op_private |= (type == OP_RV2AV ? OPpDEREF_AV
1891 : type == OP_RV2HV ? OPpDEREF_HV
1893 o->op_flags |= OPf_MOD;
1903 if (!(o->op_flags & OPf_KIDS))
1905 doref(cLISTOPo->op_last, type, set_op_ref);
1915 S_dup_attrlist(pTHX_ OP *o)
1920 PERL_ARGS_ASSERT_DUP_ATTRLIST;
1922 /* An attrlist is either a simple OP_CONST or an OP_LIST with kids,
1923 * where the first kid is OP_PUSHMARK and the remaining ones
1924 * are OP_CONST. We need to push the OP_CONST values.
1926 if (o->op_type == OP_CONST)
1927 rop = newSVOP(OP_CONST, o->op_flags, SvREFCNT_inc_NN(cSVOPo->op_sv));
1929 else if (o->op_type == OP_NULL)
1933 assert((o->op_type == OP_LIST) && (o->op_flags & OPf_KIDS));
1935 for (o = cLISTOPo->op_first; o; o=o->op_sibling) {
1936 if (o->op_type == OP_CONST)
1937 rop = append_elem(OP_LIST, rop,
1938 newSVOP(OP_CONST, o->op_flags,
1939 SvREFCNT_inc_NN(cSVOPo->op_sv)));
1946 S_apply_attrs(pTHX_ HV *stash, SV *target, OP *attrs, bool for_my)
1951 PERL_ARGS_ASSERT_APPLY_ATTRS;
1953 /* fake up C<use attributes $pkg,$rv,@attrs> */
1954 ENTER; /* need to protect against side-effects of 'use' */
1955 stashsv = stash ? newSVhek(HvNAME_HEK(stash)) : &PL_sv_no;
1957 #define ATTRSMODULE "attributes"
1958 #define ATTRSMODULE_PM "attributes.pm"
1961 /* Don't force the C<use> if we don't need it. */
1962 SV * const * const svp = hv_fetchs(GvHVn(PL_incgv), ATTRSMODULE_PM, FALSE);
1963 if (svp && *svp != &PL_sv_undef)
1964 NOOP; /* already in %INC */
1966 Perl_load_module(aTHX_ PERL_LOADMOD_NOIMPORT,
1967 newSVpvs(ATTRSMODULE), NULL);
1970 Perl_load_module(aTHX_ PERL_LOADMOD_IMPORT_OPS,
1971 newSVpvs(ATTRSMODULE),
1973 prepend_elem(OP_LIST,
1974 newSVOP(OP_CONST, 0, stashsv),
1975 prepend_elem(OP_LIST,
1976 newSVOP(OP_CONST, 0,
1978 dup_attrlist(attrs))));
1984 S_apply_attrs_my(pTHX_ HV *stash, OP *target, OP *attrs, OP **imopsp)
1987 OP *pack, *imop, *arg;
1990 PERL_ARGS_ASSERT_APPLY_ATTRS_MY;
1995 assert(target->op_type == OP_PADSV ||
1996 target->op_type == OP_PADHV ||
1997 target->op_type == OP_PADAV);
1999 /* Ensure that attributes.pm is loaded. */
2000 apply_attrs(stash, PAD_SV(target->op_targ), attrs, TRUE);
2002 /* Need package name for method call. */
2003 pack = newSVOP(OP_CONST, 0, newSVpvs(ATTRSMODULE));
2005 /* Build up the real arg-list. */
2006 stashsv = stash ? newSVhek(HvNAME_HEK(stash)) : &PL_sv_no;
2008 arg = newOP(OP_PADSV, 0);
2009 arg->op_targ = target->op_targ;
2010 arg = prepend_elem(OP_LIST,
2011 newSVOP(OP_CONST, 0, stashsv),
2012 prepend_elem(OP_LIST,
2013 newUNOP(OP_REFGEN, 0,
2014 mod(arg, OP_REFGEN)),
2015 dup_attrlist(attrs)));
2017 /* Fake up a method call to import */
2018 meth = newSVpvs_share("import");
2019 imop = convert(OP_ENTERSUB, OPf_STACKED|OPf_SPECIAL|OPf_WANT_VOID,
2020 append_elem(OP_LIST,
2021 prepend_elem(OP_LIST, pack, list(arg)),
2022 newSVOP(OP_METHOD_NAMED, 0, meth)));
2023 imop->op_private |= OPpENTERSUB_NOMOD;
2025 /* Combine the ops. */
2026 *imopsp = append_elem(OP_LIST, *imopsp, imop);
2030 =notfor apidoc apply_attrs_string
2032 Attempts to apply a list of attributes specified by the C<attrstr> and
2033 C<len> arguments to the subroutine identified by the C<cv> argument which
2034 is expected to be associated with the package identified by the C<stashpv>
2035 argument (see L<attributes>). It gets this wrong, though, in that it
2036 does not correctly identify the boundaries of the individual attribute
2037 specifications within C<attrstr>. This is not really intended for the
2038 public API, but has to be listed here for systems such as AIX which
2039 need an explicit export list for symbols. (It's called from XS code
2040 in support of the C<ATTRS:> keyword from F<xsubpp>.) Patches to fix it
2041 to respect attribute syntax properly would be welcome.
2047 Perl_apply_attrs_string(pTHX_ const char *stashpv, CV *cv,
2048 const char *attrstr, STRLEN len)
2052 PERL_ARGS_ASSERT_APPLY_ATTRS_STRING;
2055 len = strlen(attrstr);
2059 for (; isSPACE(*attrstr) && len; --len, ++attrstr) ;
2061 const char * const sstr = attrstr;
2062 for (; !isSPACE(*attrstr) && len; --len, ++attrstr) ;
2063 attrs = append_elem(OP_LIST, attrs,
2064 newSVOP(OP_CONST, 0,
2065 newSVpvn(sstr, attrstr-sstr)));
2069 Perl_load_module(aTHX_ PERL_LOADMOD_IMPORT_OPS,
2070 newSVpvs(ATTRSMODULE),
2071 NULL, prepend_elem(OP_LIST,
2072 newSVOP(OP_CONST, 0, newSVpv(stashpv,0)),
2073 prepend_elem(OP_LIST,
2074 newSVOP(OP_CONST, 0,
2075 newRV(MUTABLE_SV(cv))),
2080 S_my_kid(pTHX_ OP *o, OP *attrs, OP **imopsp)
2085 PERL_ARGS_ASSERT_MY_KID;
2087 if (!o || (PL_parser && PL_parser->error_count))
2091 if (PL_madskills && type == OP_NULL && o->op_flags & OPf_KIDS) {
2092 (void)my_kid(cUNOPo->op_first, attrs, imopsp);
2096 if (type == OP_LIST) {
2098 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
2099 my_kid(kid, attrs, imopsp);
2100 } else if (type == OP_UNDEF
2106 } else if (type == OP_RV2SV || /* "our" declaration */
2108 type == OP_RV2HV) { /* XXX does this let anything illegal in? */
2109 if (cUNOPo->op_first->op_type != OP_GV) { /* MJD 20011224 */
2110 yyerror(Perl_form(aTHX_ "Can't declare %s in \"%s\"",
2112 PL_parser->in_my == KEY_our
2114 : PL_parser->in_my == KEY_state ? "state" : "my"));
2116 GV * const gv = cGVOPx_gv(cUNOPo->op_first);
2117 PL_parser->in_my = FALSE;
2118 PL_parser->in_my_stash = NULL;
2119 apply_attrs(GvSTASH(gv),
2120 (type == OP_RV2SV ? GvSV(gv) :
2121 type == OP_RV2AV ? MUTABLE_SV(GvAV(gv)) :
2122 type == OP_RV2HV ? MUTABLE_SV(GvHV(gv)) : MUTABLE_SV(gv)),
2125 o->op_private |= OPpOUR_INTRO;
2128 else if (type != OP_PADSV &&
2131 type != OP_PUSHMARK)
2133 yyerror(Perl_form(aTHX_ "Can't declare %s in \"%s\"",
2135 PL_parser->in_my == KEY_our
2137 : PL_parser->in_my == KEY_state ? "state" : "my"));
2140 else if (attrs && type != OP_PUSHMARK) {
2143 PL_parser->in_my = FALSE;
2144 PL_parser->in_my_stash = NULL;
2146 /* check for C<my Dog $spot> when deciding package */
2147 stash = PAD_COMPNAME_TYPE(o->op_targ);
2149 stash = PL_curstash;
2150 apply_attrs_my(stash, o, attrs, imopsp);
2152 o->op_flags |= OPf_MOD;
2153 o->op_private |= OPpLVAL_INTRO;
2154 if (PL_parser->in_my == KEY_state)
2155 o->op_private |= OPpPAD_STATE;
2160 Perl_my_attrs(pTHX_ OP *o, OP *attrs)
2164 int maybe_scalar = 0;
2166 PERL_ARGS_ASSERT_MY_ATTRS;
2168 /* [perl #17376]: this appears to be premature, and results in code such as
2169 C< our(%x); > executing in list mode rather than void mode */
2171 if (o->op_flags & OPf_PARENS)
2181 o = my_kid(o, attrs, &rops);
2183 if (maybe_scalar && o->op_type == OP_PADSV) {
2184 o = scalar(append_list(OP_LIST, (LISTOP*)rops, (LISTOP*)o));
2185 o->op_private |= OPpLVAL_INTRO;
2188 o = append_list(OP_LIST, (LISTOP*)o, (LISTOP*)rops);
2190 PL_parser->in_my = FALSE;
2191 PL_parser->in_my_stash = NULL;
2196 Perl_sawparens(pTHX_ OP *o)
2198 PERL_UNUSED_CONTEXT;
2200 o->op_flags |= OPf_PARENS;
2205 Perl_bind_match(pTHX_ I32 type, OP *left, OP *right)
2209 const OPCODE ltype = left->op_type;
2210 const OPCODE rtype = right->op_type;
2212 PERL_ARGS_ASSERT_BIND_MATCH;
2214 if ( (ltype == OP_RV2AV || ltype == OP_RV2HV || ltype == OP_PADAV
2215 || ltype == OP_PADHV) && ckWARN(WARN_MISC))
2217 const char * const desc
2218 = PL_op_desc[(rtype == OP_SUBST || rtype == OP_TRANS)
2219 ? (int)rtype : OP_MATCH];
2220 const char * const sample = ((ltype == OP_RV2AV || ltype == OP_PADAV)
2221 ? "@array" : "%hash");
2222 Perl_warner(aTHX_ packWARN(WARN_MISC),
2223 "Applying %s to %s will act on scalar(%s)",
2224 desc, sample, sample);
2227 if (rtype == OP_CONST &&
2228 cSVOPx(right)->op_private & OPpCONST_BARE &&
2229 cSVOPx(right)->op_private & OPpCONST_STRICT)
2231 no_bareword_allowed(right);
2234 /* !~ doesn't make sense with s///r, so error on it for now */
2235 if (rtype == OP_SUBST && (cPMOPx(right)->op_pmflags & PMf_NONDESTRUCT) &&
2237 yyerror("Using !~ with s///r doesn't make sense");
2239 ismatchop = rtype == OP_MATCH ||
2240 rtype == OP_SUBST ||
2242 if (ismatchop && right->op_private & OPpTARGET_MY) {
2244 right->op_private &= ~OPpTARGET_MY;
2246 if (!(right->op_flags & OPf_STACKED) && ismatchop) {
2249 right->op_flags |= OPf_STACKED;
2250 if (rtype != OP_MATCH &&
2251 ! (rtype == OP_TRANS &&
2252 right->op_private & OPpTRANS_IDENTICAL) &&
2253 ! (rtype == OP_SUBST &&
2254 (cPMOPx(right)->op_pmflags & PMf_NONDESTRUCT)))
2255 newleft = mod(left, rtype);
2258 if (right->op_type == OP_TRANS)
2259 o = newBINOP(OP_NULL, OPf_STACKED, scalar(newleft), right);
2261 o = prepend_elem(rtype, scalar(newleft), right);
2263 return newUNOP(OP_NOT, 0, scalar(o));
2267 return bind_match(type, left,
2268 pmruntime(newPMOP(OP_MATCH, 0), right, 0));
2272 Perl_invert(pTHX_ OP *o)
2276 return newUNOP(OP_NOT, OPf_SPECIAL, scalar(o));
2280 Perl_scope(pTHX_ OP *o)
2284 if (o->op_flags & OPf_PARENS || PERLDB_NOOPT || PL_tainting) {
2285 o = prepend_elem(OP_LINESEQ, newOP(OP_ENTER, 0), o);
2286 o->op_type = OP_LEAVE;
2287 o->op_ppaddr = PL_ppaddr[OP_LEAVE];
2289 else if (o->op_type == OP_LINESEQ) {
2291 o->op_type = OP_SCOPE;
2292 o->op_ppaddr = PL_ppaddr[OP_SCOPE];
2293 kid = ((LISTOP*)o)->op_first;
2294 if (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) {
2297 /* The following deals with things like 'do {1 for 1}' */
2298 kid = kid->op_sibling;
2300 (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE))
2305 o = newLISTOP(OP_SCOPE, 0, o, NULL);
2311 Perl_block_start(pTHX_ int full)
2314 const int retval = PL_savestack_ix;
2316 pad_block_start(full);
2318 PL_hints &= ~HINT_BLOCK_SCOPE;
2319 SAVECOMPILEWARNINGS();
2320 PL_compiling.cop_warnings = DUP_WARNINGS(PL_compiling.cop_warnings);
2322 CALL_BLOCK_HOOKS(start, full);
2328 Perl_block_end(pTHX_ I32 floor, OP *seq)
2331 const int needblockscope = PL_hints & HINT_BLOCK_SCOPE;
2332 OP* retval = scalarseq(seq);
2334 CALL_BLOCK_HOOKS(pre_end, &retval);
2337 CopHINTS_set(&PL_compiling, PL_hints);
2339 PL_hints |= HINT_BLOCK_SCOPE; /* propagate out */
2342 CALL_BLOCK_HOOKS(post_end, &retval);
2348 =head1 Compile-time scope hooks
2350 =for apidoc Ao||blockhook_register
2352 Register a set of hooks to be called when the Perl lexical scope changes
2353 at compile time. See L<perlguts/"Compile-time scope hooks">.
2359 Perl_blockhook_register(pTHX_ BHK *hk)
2361 PERL_ARGS_ASSERT_BLOCKHOOK_REGISTER;
2363 Perl_av_create_and_push(aTHX_ &PL_blockhooks, newSViv(PTR2IV(hk)));
2370 const PADOFFSET offset = Perl_pad_findmy(aTHX_ STR_WITH_LEN("$_"), 0);
2371 if (offset == NOT_IN_PAD || PAD_COMPNAME_FLAGS_isOUR(offset)) {
2372 return newSVREF(newGVOP(OP_GV, 0, PL_defgv));
2375 OP * const o = newOP(OP_PADSV, 0);
2376 o->op_targ = offset;
2382 Perl_newPROG(pTHX_ OP *o)
2386 PERL_ARGS_ASSERT_NEWPROG;
2391 PL_eval_root = newUNOP(OP_LEAVEEVAL,
2392 ((PL_in_eval & EVAL_KEEPERR)
2393 ? OPf_SPECIAL : 0), o);
2394 PL_eval_start = linklist(PL_eval_root);
2395 PL_eval_root->op_private |= OPpREFCOUNTED;
2396 OpREFCNT_set(PL_eval_root, 1);
2397 PL_eval_root->op_next = 0;
2398 CALL_PEEP(PL_eval_start);
2401 if (o->op_type == OP_STUB) {
2402 PL_comppad_name = 0;
2404 S_op_destroy(aTHX_ o);
2407 PL_main_root = scope(sawparens(scalarvoid(o)));
2408 PL_curcop = &PL_compiling;
2409 PL_main_start = LINKLIST(PL_main_root);
2410 PL_main_root->op_private |= OPpREFCOUNTED;
2411 OpREFCNT_set(PL_main_root, 1);
2412 PL_main_root->op_next = 0;
2413 CALL_PEEP(PL_main_start);
2416 /* Register with debugger */
2418 CV * const cv = get_cvs("DB::postponed", 0);
2422 XPUSHs(MUTABLE_SV(CopFILEGV(&PL_compiling)));
2424 call_sv(MUTABLE_SV(cv), G_DISCARD);
2431 Perl_localize(pTHX_ OP *o, I32 lex)
2435 PERL_ARGS_ASSERT_LOCALIZE;
2437 if (o->op_flags & OPf_PARENS)
2438 /* [perl #17376]: this appears to be premature, and results in code such as
2439 C< our(%x); > executing in list mode rather than void mode */
2446 if ( PL_parser->bufptr > PL_parser->oldbufptr
2447 && PL_parser->bufptr[-1] == ','
2448 && ckWARN(WARN_PARENTHESIS))
2450 char *s = PL_parser->bufptr;
2453 /* some heuristics to detect a potential error */
2454 while (*s && (strchr(", \t\n", *s)))
2458 if (*s && strchr("@$%*", *s) && *++s
2459 && (isALNUM(*s) || UTF8_IS_CONTINUED(*s))) {
2462 while (*s && (isALNUM(*s) || UTF8_IS_CONTINUED(*s)))
2464 while (*s && (strchr(", \t\n", *s)))
2470 if (sigil && (*s == ';' || *s == '=')) {
2471 Perl_warner(aTHX_ packWARN(WARN_PARENTHESIS),
2472 "Parentheses missing around \"%s\" list",
2474 ? (PL_parser->in_my == KEY_our
2476 : PL_parser->in_my == KEY_state
2486 o = mod(o, OP_NULL); /* a bit kludgey */
2487 PL_parser->in_my = FALSE;
2488 PL_parser->in_my_stash = NULL;
2493 Perl_jmaybe(pTHX_ OP *o)
2495 PERL_ARGS_ASSERT_JMAYBE;
2497 if (o->op_type == OP_LIST) {
2499 = newSVREF(newGVOP(OP_GV, 0, gv_fetchpvs(";", GV_ADD|GV_NOTQUAL, SVt_PV)));
2500 o = convert(OP_JOIN, 0, prepend_elem(OP_LIST, o2, o));
2506 S_fold_constants(pTHX_ register OP *o)
2509 register OP * VOL curop;
2511 VOL I32 type = o->op_type;
2516 SV * const oldwarnhook = PL_warnhook;
2517 SV * const olddiehook = PL_diehook;
2521 PERL_ARGS_ASSERT_FOLD_CONSTANTS;
2523 if (PL_opargs[type] & OA_RETSCALAR)
2525 if (PL_opargs[type] & OA_TARGET && !o->op_targ)
2526 o->op_targ = pad_alloc(type, SVs_PADTMP);
2528 /* integerize op, unless it happens to be C<-foo>.
2529 * XXX should pp_i_negate() do magic string negation instead? */
2530 if ((PL_opargs[type] & OA_OTHERINT) && (PL_hints & HINT_INTEGER)
2531 && !(type == OP_NEGATE && cUNOPo->op_first->op_type == OP_CONST
2532 && (cUNOPo->op_first->op_private & OPpCONST_BARE)))
2534 o->op_ppaddr = PL_ppaddr[type = ++(o->op_type)];
2537 if (!(PL_opargs[type] & OA_FOLDCONST))
2542 /* XXX might want a ck_negate() for this */
2543 cUNOPo->op_first->op_private &= ~OPpCONST_STRICT;
2554 /* XXX what about the numeric ops? */
2555 if (PL_hints & HINT_LOCALE)
2560 if (PL_parser && PL_parser->error_count)
2561 goto nope; /* Don't try to run w/ errors */
2563 for (curop = LINKLIST(o); curop != o; curop = LINKLIST(curop)) {
2564 const OPCODE type = curop->op_type;
2565 if ((type != OP_CONST || (curop->op_private & OPpCONST_BARE)) &&
2567 type != OP_SCALAR &&
2569 type != OP_PUSHMARK)
2575 curop = LINKLIST(o);
2576 old_next = o->op_next;
2580 oldscope = PL_scopestack_ix;
2581 create_eval_scope(G_FAKINGEVAL);
2583 /* Verify that we don't need to save it: */
2584 assert(PL_curcop == &PL_compiling);
2585 StructCopy(&PL_compiling, ¬_compiling, COP);
2586 PL_curcop = ¬_compiling;
2587 /* The above ensures that we run with all the correct hints of the
2588 currently compiling COP, but that IN_PERL_RUNTIME is not true. */
2589 assert(IN_PERL_RUNTIME);
2590 PL_warnhook = PERL_WARNHOOK_FATAL;
2597 sv = *(PL_stack_sp--);
2598 if (o->op_targ && sv == PAD_SV(o->op_targ)) /* grab pad temp? */
2599 pad_swipe(o->op_targ, FALSE);
2600 else if (SvTEMP(sv)) { /* grab mortal temp? */
2601 SvREFCNT_inc_simple_void(sv);
2606 /* Something tried to die. Abandon constant folding. */
2607 /* Pretend the error never happened. */
2609 o->op_next = old_next;
2613 /* Don't expect 1 (setjmp failed) or 2 (something called my_exit) */
2614 PL_warnhook = oldwarnhook;
2615 PL_diehook = olddiehook;
2616 /* XXX note that this croak may fail as we've already blown away
2617 * the stack - eg any nested evals */
2618 Perl_croak(aTHX_ "panic: fold_constants JMPENV_PUSH returned %d", ret);
2621 PL_warnhook = oldwarnhook;
2622 PL_diehook = olddiehook;
2623 PL_curcop = &PL_compiling;
2625 if (PL_scopestack_ix > oldscope)
2626 delete_eval_scope();
2635 if (type == OP_RV2GV)
2636 newop = newGVOP(OP_GV, 0, MUTABLE_GV(sv));
2638 newop = newSVOP(OP_CONST, 0, MUTABLE_SV(sv));
2639 op_getmad(o,newop,'f');
2647 S_gen_constant_list(pTHX_ register OP *o)
2651 const I32 oldtmps_floor = PL_tmps_floor;
2654 if (PL_parser && PL_parser->error_count)
2655 return o; /* Don't attempt to run with errors */
2657 PL_op = curop = LINKLIST(o);
2663 assert (!(curop->op_flags & OPf_SPECIAL));
2664 assert(curop->op_type == OP_RANGE);
2666 PL_tmps_floor = oldtmps_floor;
2668 o->op_type = OP_RV2AV;
2669 o->op_ppaddr = PL_ppaddr[OP_RV2AV];
2670 o->op_flags &= ~OPf_REF; /* treat \(1..2) like an ordinary list */
2671 o->op_flags |= OPf_PARENS; /* and flatten \(1..2,3) */
2672 o->op_opt = 0; /* needs to be revisited in rpeep() */
2673 curop = ((UNOP*)o)->op_first;
2674 ((UNOP*)o)->op_first = newSVOP(OP_CONST, 0, SvREFCNT_inc_NN(*PL_stack_sp--));
2676 op_getmad(curop,o,'O');
2685 Perl_convert(pTHX_ I32 type, I32 flags, OP *o)
2688 if (!o || o->op_type != OP_LIST)
2689 o = newLISTOP(OP_LIST, 0, o, NULL);
2691 o->op_flags &= ~OPf_WANT;
2693 if (!(PL_opargs[type] & OA_MARK))
2694 op_null(cLISTOPo->op_first);
2696 o->op_type = (OPCODE)type;
2697 o->op_ppaddr = PL_ppaddr[type];
2698 o->op_flags |= flags;
2700 o = CHECKOP(type, o);
2701 if (o->op_type != (unsigned)type)
2704 return fold_constants(o);
2707 /* List constructors */
2710 Perl_append_elem(pTHX_ I32 type, OP *first, OP *last)
2718 if (first->op_type != (unsigned)type
2719 || (type == OP_LIST && (first->op_flags & OPf_PARENS)))
2721 return newLISTOP(type, 0, first, last);
2724 if (first->op_flags & OPf_KIDS)
2725 ((LISTOP*)first)->op_last->op_sibling = last;
2727 first->op_flags |= OPf_KIDS;
2728 ((LISTOP*)first)->op_first = last;
2730 ((LISTOP*)first)->op_last = last;
2735 Perl_append_list(pTHX_ I32 type, LISTOP *first, LISTOP *last)
2743 if (first->op_type != (unsigned)type)
2744 return prepend_elem(type, (OP*)first, (OP*)last);
2746 if (last->op_type != (unsigned)type)
2747 return append_elem(type, (OP*)first, (OP*)last);
2749 first->op_last->op_sibling = last->op_first;
2750 first->op_last = last->op_last;
2751 first->op_flags |= (last->op_flags & OPf_KIDS);
2754 if (last->op_first && first->op_madprop) {
2755 MADPROP *mp = last->op_first->op_madprop;
2757 while (mp->mad_next)
2759 mp->mad_next = first->op_madprop;
2762 last->op_first->op_madprop = first->op_madprop;
2765 first->op_madprop = last->op_madprop;
2766 last->op_madprop = 0;
2769 S_op_destroy(aTHX_ (OP*)last);
2775 Perl_prepend_elem(pTHX_ I32 type, OP *first, OP *last)
2783 if (last->op_type == (unsigned)type) {
2784 if (type == OP_LIST) { /* already a PUSHMARK there */
2785 first->op_sibling = ((LISTOP*)last)->op_first->op_sibling;
2786 ((LISTOP*)last)->op_first->op_sibling = first;
2787 if (!(first->op_flags & OPf_PARENS))
2788 last->op_flags &= ~OPf_PARENS;
2791 if (!(last->op_flags & OPf_KIDS)) {
2792 ((LISTOP*)last)->op_last = first;
2793 last->op_flags |= OPf_KIDS;
2795 first->op_sibling = ((LISTOP*)last)->op_first;
2796 ((LISTOP*)last)->op_first = first;
2798 last->op_flags |= OPf_KIDS;
2802 return newLISTOP(type, 0, first, last);
2810 Perl_newTOKEN(pTHX_ I32 optype, YYSTYPE lval, MADPROP* madprop)
2813 Newxz(tk, 1, TOKEN);
2814 tk->tk_type = (OPCODE)optype;
2815 tk->tk_type = 12345;
2817 tk->tk_mad = madprop;
2822 Perl_token_free(pTHX_ TOKEN* tk)
2824 PERL_ARGS_ASSERT_TOKEN_FREE;
2826 if (tk->tk_type != 12345)
2828 mad_free(tk->tk_mad);
2833 Perl_token_getmad(pTHX_ TOKEN* tk, OP* o, char slot)
2838 PERL_ARGS_ASSERT_TOKEN_GETMAD;
2840 if (tk->tk_type != 12345) {
2841 Perl_warner(aTHX_ packWARN(WARN_MISC),
2842 "Invalid TOKEN object ignored");
2849 /* faked up qw list? */
2851 tm->mad_type == MAD_SV &&
2852 SvPVX((SV *)tm->mad_val)[0] == 'q')
2859 /* pretend constant fold didn't happen? */
2860 if (mp->mad_key == 'f' &&
2861 (o->op_type == OP_CONST ||
2862 o->op_type == OP_GV) )
2864 token_getmad(tk,(OP*)mp->mad_val,slot);
2878 if (mp->mad_key == 'X')
2879 mp->mad_key = slot; /* just change the first one */
2889 Perl_op_getmad_weak(pTHX_ OP* from, OP* o, char slot)
2898 /* pretend constant fold didn't happen? */
2899 if (mp->mad_key == 'f' &&
2900 (o->op_type == OP_CONST ||
2901 o->op_type == OP_GV) )
2903 op_getmad(from,(OP*)mp->mad_val,slot);
2910 mp->mad_next = newMADPROP(slot,MAD_OP,from,0);
2913 o->op_madprop = newMADPROP(slot,MAD_OP,from,0);
2919 Perl_op_getmad(pTHX_ OP* from, OP* o, char slot)
2928 /* pretend constant fold didn't happen? */
2929 if (mp->mad_key == 'f' &&
2930 (o->op_type == OP_CONST ||
2931 o->op_type == OP_GV) )
2933 op_getmad(from,(OP*)mp->mad_val,slot);
2940 mp->mad_next = newMADPROP(slot,MAD_OP,from,1);
2943 o->op_madprop = newMADPROP(slot,MAD_OP,from,1);
2947 PerlIO_printf(PerlIO_stderr(),
2948 "DESTROYING op = %0"UVxf"\n", PTR2UV(from));
2954 Perl_prepend_madprops(pTHX_ MADPROP* mp, OP* o, char slot)
2972 Perl_append_madprops(pTHX_ MADPROP* tm, OP* o, char slot)
2976 addmad(tm, &(o->op_madprop), slot);
2980 Perl_addmad(pTHX_ MADPROP* tm, MADPROP** root, char slot)
3001 Perl_newMADsv(pTHX_ char key, SV* sv)
3003 PERL_ARGS_ASSERT_NEWMADSV;
3005 return newMADPROP(key, MAD_SV, sv, 0);
3009 Perl_newMADPROP(pTHX_ char key, char type, void* val, I32 vlen)
3012 Newxz(mp, 1, MADPROP);
3015 mp->mad_vlen = vlen;
3016 mp->mad_type = type;
3018 /* PerlIO_printf(PerlIO_stderr(), "NEW mp = %0x\n", mp); */
3023 Perl_mad_free(pTHX_ MADPROP* mp)
3025 /* PerlIO_printf(PerlIO_stderr(), "FREE mp = %0x\n", mp); */
3029 mad_free(mp->mad_next);
3030 /* if (PL_parser && PL_parser->lex_state != LEX_NOTPARSING && mp->mad_vlen)
3031 PerlIO_printf(PerlIO_stderr(), "DESTROYING '%c'=<%s>\n", mp->mad_key & 255, mp->mad_val); */
3032 switch (mp->mad_type) {
3036 Safefree((char*)mp->mad_val);
3039 if (mp->mad_vlen) /* vlen holds "strong/weak" boolean */
3040 op_free((OP*)mp->mad_val);
3043 sv_free(MUTABLE_SV(mp->mad_val));
3046 PerlIO_printf(PerlIO_stderr(), "Unrecognized mad\n");
3055 =head1 Optree construction
3057 =for apidoc Am|OP *|newNULLLIST
3059 Constructs, checks, and returns a new C<stub> op, which represents an
3060 empty list expression.
3066 Perl_newNULLLIST(pTHX)
3068 return newOP(OP_STUB, 0);
3072 S_force_list(pTHX_ OP *o)
3074 if (!o || o->op_type != OP_LIST)
3075 o = newLISTOP(OP_LIST, 0, o, NULL);
3081 =for apidoc Am|OP *|newLISTOP|I32 type|I32 flags|OP *first|OP *last
3083 Constructs, checks, and returns an op of any list type. I<type> is
3084 the opcode. I<flags> gives the eight bits of C<op_flags>, except that
3085 C<OPf_KIDS> will be set automatically if required. I<first> and I<last>
3086 supply up to two ops to be direct children of the list op; they are
3087 consumed by this function and become part of the constructed op tree.
3093 Perl_newLISTOP(pTHX_ I32 type, I32 flags, OP *first, OP *last)
3098 assert((PL_opargs[type] & OA_CLASS_MASK) == OA_LISTOP);
3100 NewOp(1101, listop, 1, LISTOP);
3102 listop->op_type = (OPCODE)type;
3103 listop->op_ppaddr = PL_ppaddr[type];
3106 listop->op_flags = (U8)flags;
3110 else if (!first && last)
3113 first->op_sibling = last;
3114 listop->op_first = first;
3115 listop->op_last = last;
3116 if (type == OP_LIST) {
3117 OP* const pushop = newOP(OP_PUSHMARK, 0);
3118 pushop->op_sibling = first;
3119 listop->op_first = pushop;
3120 listop->op_flags |= OPf_KIDS;
3122 listop->op_last = pushop;
3125 return CHECKOP(type, listop);
3129 =for apidoc Am|OP *|newOP|I32 type|I32 flags
3131 Constructs, checks, and returns an op of any base type (any type that
3132 has no extra fields). I<type> is the opcode. I<flags> gives the
3133 eight bits of C<op_flags>, and, shifted up eight bits, the eight bits
3140 Perl_newOP(pTHX_ I32 type, I32 flags)
3145 assert((PL_opargs[type] & OA_CLASS_MASK) == OA_BASEOP
3146 || (PL_opargs[type] & OA_CLASS_MASK) == OA_BASEOP_OR_UNOP
3147 || (PL_opargs[type] & OA_CLASS_MASK) == OA_FILESTATOP
3148 || (PL_opargs[type] & OA_CLASS_MASK) == OA_LOOPEXOP);
3150 NewOp(1101, o, 1, OP);
3151 o->op_type = (OPCODE)type;
3152 o->op_ppaddr = PL_ppaddr[type];
3153 o->op_flags = (U8)flags;
3155 o->op_latefreed = 0;
3159 o->op_private = (U8)(0 | (flags >> 8));
3160 if (PL_opargs[type] & OA_RETSCALAR)
3162 if (PL_opargs[type] & OA_TARGET)
3163 o->op_targ = pad_alloc(type, SVs_PADTMP);
3164 return CHECKOP(type, o);
3168 =for apidoc Am|OP *|newUNOP|I32 type|I32 flags|OP *first
3170 Constructs, checks, and returns an op of any unary type. I<type> is
3171 the opcode. I<flags> gives the eight bits of C<op_flags>, except that
3172 C<OPf_KIDS> will be set automatically if required, and, shifted up eight
3173 bits, the eight bits of C<op_private>, except that the bit with value 1
3174 is automatically set. I<first> supplies an optional op to be the direct
3175 child of the unary op; it is consumed by this function and become part
3176 of the constructed op tree.
3182 Perl_newUNOP(pTHX_ I32 type, I32 flags, OP *first)
3187 assert((PL_opargs[type] & OA_CLASS_MASK) == OA_UNOP
3188 || (PL_opargs[type] & OA_CLASS_MASK) == OA_BASEOP_OR_UNOP
3189 || (PL_opargs[type] & OA_CLASS_MASK) == OA_FILESTATOP
3190 || (PL_opargs[type] & OA_CLASS_MASK) == OA_LOOPEXOP
3191 || type == OP_SASSIGN
3192 || type == OP_ENTERTRY
3193 || type == OP_NULL );
3196 first = newOP(OP_STUB, 0);
3197 if (PL_opargs[type] & OA_MARK)
3198 first = force_list(first);
3200 NewOp(1101, unop, 1, UNOP);
3201 unop->op_type = (OPCODE)type;
3202 unop->op_ppaddr = PL_ppaddr[type];
3203 unop->op_first = first;
3204 unop->op_flags = (U8)(flags | OPf_KIDS);
3205 unop->op_private = (U8)(1 | (flags >> 8));
3206 unop = (UNOP*) CHECKOP(type, unop);
3210 return fold_constants((OP *) unop);
3214 =for apidoc Am|OP *|newBINOP|I32 type|I32 flags|OP *first|OP *last
3216 Constructs, checks, and returns an op of any binary type. I<type>
3217 is the opcode. I<flags> gives the eight bits of C<op_flags>, except
3218 that C<OPf_KIDS> will be set automatically, and, shifted up eight bits,
3219 the eight bits of C<op_private>, except that the bit with value 1 or
3220 2 is automatically set as required. I<first> and I<last> supply up to
3221 two ops to be the direct children of the binary op; they are consumed
3222 by this function and become part of the constructed op tree.
3228 Perl_newBINOP(pTHX_ I32 type, I32 flags, OP *first, OP *last)
3233 assert((PL_opargs[type] & OA_CLASS_MASK) == OA_BINOP
3234 || type == OP_SASSIGN || type == OP_NULL );
3236 NewOp(1101, binop, 1, BINOP);
3239 first = newOP(OP_NULL, 0);
3241 binop->op_type = (OPCODE)type;
3242 binop->op_ppaddr = PL_ppaddr[type];
3243 binop->op_first = first;
3244 binop->op_flags = (U8)(flags | OPf_KIDS);
3247 binop->op_private = (U8)(1 | (flags >> 8));
3250 binop->op_private = (U8)(2 | (flags >> 8));
3251 first->op_sibling = last;
3254 binop = (BINOP*)CHECKOP(type, binop);
3255 if (binop->op_next || binop->op_type != (OPCODE)type)
3258 binop->op_last = binop->op_first->op_sibling;
3260 return fold_constants((OP *)binop);
3263 static int uvcompare(const void *a, const void *b)
3264 __attribute__nonnull__(1)
3265 __attribute__nonnull__(2)
3266 __attribute__pure__;
3267 static int uvcompare(const void *a, const void *b)
3269 if (*((const UV *)a) < (*(const UV *)b))
3271 if (*((const UV *)a) > (*(const UV *)b))
3273 if (*((const UV *)a+1) < (*(const UV *)b+1))
3275 if (*((const UV *)a+1) > (*(const UV *)b+1))
3281 S_pmtrans(pTHX_ OP *o, OP *expr, OP *repl)
3284 SV * const tstr = ((SVOP*)expr)->op_sv;
3287 (repl->op_type == OP_NULL)
3288 ? ((SVOP*)((LISTOP*)repl)->op_first)->op_sv :
3290 ((SVOP*)repl)->op_sv;
3293 const U8 *t = (U8*)SvPV_const(tstr, tlen);
3294 const U8 *r = (U8*)SvPV_const(rstr, rlen);
3298 register short *tbl;
3300 const I32 complement = o->op_private & OPpTRANS_COMPLEMENT;
3301 const I32 squash = o->op_private & OPpTRANS_SQUASH;
3302 I32 del = o->op_private & OPpTRANS_DELETE;
3305 PERL_ARGS_ASSERT_PMTRANS;
3307 PL_hints |= HINT_BLOCK_SCOPE;
3310 o->op_private |= OPpTRANS_FROM_UTF;
3313 o->op_private |= OPpTRANS_TO_UTF;
3315 if (o->op_private & (OPpTRANS_FROM_UTF|OPpTRANS_TO_UTF)) {
3316 SV* const listsv = newSVpvs("# comment\n");
3318 const U8* tend = t + tlen;
3319 const U8* rend = r + rlen;
3333 const I32 from_utf = o->op_private & OPpTRANS_FROM_UTF;
3334 const I32 to_utf = o->op_private & OPpTRANS_TO_UTF;
3337 const U32 flags = UTF8_ALLOW_DEFAULT;
3341 t = tsave = bytes_to_utf8(t, &len);
3344 if (!to_utf && rlen) {
3346 r = rsave = bytes_to_utf8(r, &len);
3350 /* There are several snags with this code on EBCDIC:
3351 1. 0xFF is a legal UTF-EBCDIC byte (there are no illegal bytes).
3352 2. scan_const() in toke.c has encoded chars in native encoding which makes
3353 ranges at least in EBCDIC 0..255 range the bottom odd.
3357 U8 tmpbuf[UTF8_MAXBYTES+1];
3360 Newx(cp, 2*tlen, UV);
3362 transv = newSVpvs("");
3364 cp[2*i] = utf8n_to_uvuni(t, tend-t, &ulen, flags);
3366 if (t < tend && NATIVE_TO_UTF(*t) == 0xff) {
3368 cp[2*i+1] = utf8n_to_uvuni(t, tend-t, &ulen, flags);
3372 cp[2*i+1] = cp[2*i];
3376 qsort(cp, i, 2*sizeof(UV), uvcompare);
3377 for (j = 0; j < i; j++) {
3379 diff = val - nextmin;
3381 t = uvuni_to_utf8(tmpbuf,nextmin);
3382 sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf);
3384 U8 range_mark = UTF_TO_NATIVE(0xff);
3385 t = uvuni_to_utf8(tmpbuf, val - 1);
3386 sv_catpvn(transv, (char *)&range_mark, 1);
3387 sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf);
3394 t = uvuni_to_utf8(tmpbuf,nextmin);
3395 sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf);
3397 U8 range_mark = UTF_TO_NATIVE(0xff);
3398 sv_catpvn(transv, (char *)&range_mark, 1);
3400 t = uvuni_to_utf8_flags(tmpbuf, 0x7fffffff,
3401 UNICODE_ALLOW_SUPER);
3402 sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf);
3403 t = (const U8*)SvPVX_const(transv);
3404 tlen = SvCUR(transv);
3408 else if (!rlen && !del) {
3409 r = t; rlen = tlen; rend = tend;
3412 if ((!rlen && !del) || t == r ||
3413 (tlen == rlen && memEQ((char *)t, (char *)r, tlen)))
3415 o->op_private |= OPpTRANS_IDENTICAL;
3419 while (t < tend || tfirst <= tlast) {
3420 /* see if we need more "t" chars */
3421 if (tfirst > tlast) {
3422 tfirst = (I32)utf8n_to_uvuni(t, tend - t, &ulen, flags);
3424 if (t < tend && NATIVE_TO_UTF(*t) == 0xff) { /* illegal utf8 val indicates range */
3426 tlast = (I32)utf8n_to_uvuni(t, tend - t, &ulen, flags);
3433 /* now see if we need more "r" chars */
3434 if (rfirst > rlast) {
3436 rfirst = (I32)utf8n_to_uvuni(r, rend - r, &ulen, flags);
3438 if (r < rend && NATIVE_TO_UTF(*r) == 0xff) { /* illegal utf8 val indicates range */
3440 rlast = (I32)utf8n_to_uvuni(r, rend - r, &ulen, flags);
3449 rfirst = rlast = 0xffffffff;
3453 /* now see which range will peter our first, if either. */
3454 tdiff = tlast - tfirst;
3455 rdiff = rlast - rfirst;
3462 if (rfirst == 0xffffffff) {
3463 diff = tdiff; /* oops, pretend rdiff is infinite */
3465 Perl_sv_catpvf(aTHX_ listsv, "%04lx\t%04lx\tXXXX\n",
3466 (long)tfirst, (long)tlast);
3468 Perl_sv_catpvf(aTHX_ listsv, "%04lx\t\tXXXX\n", (long)tfirst);
3472 Perl_sv_catpvf(aTHX_ listsv, "%04lx\t%04lx\t%04lx\n",
3473 (long)tfirst, (long)(tfirst + diff),
3476 Perl_sv_catpvf(aTHX_ listsv, "%04lx\t\t%04lx\n",
3477 (long)tfirst, (long)rfirst);
3479 if (rfirst + diff > max)
3480 max = rfirst + diff;
3482 grows = (tfirst < rfirst &&
3483 UNISKIP(tfirst) < UNISKIP(rfirst + diff));
3495 else if (max > 0xff)
3500 PerlMemShared_free(cPVOPo->op_pv);
3501 cPVOPo->op_pv = NULL;
3503 swash = MUTABLE_SV(swash_init("utf8", "", listsv, bits, none));
3505 cPADOPo->op_padix = pad_alloc(OP_TRANS, SVs_PADTMP);
3506 SvREFCNT_dec(PAD_SVl(cPADOPo->op_padix));
3507 PAD_SETSV(cPADOPo->op_padix, swash);
3509 SvREADONLY_on(swash);
3511 cSVOPo->op_sv = swash;
3513 SvREFCNT_dec(listsv);
3514 SvREFCNT_dec(transv);
3516 if (!del && havefinal && rlen)
3517 (void)hv_store(MUTABLE_HV(SvRV(swash)), "FINAL", 5,
3518 newSVuv((UV)final), 0);
3521 o->op_private |= OPpTRANS_GROWS;
3527 op_getmad(expr,o,'e');
3528 op_getmad(repl,o,'r');
3536 tbl = (short*)cPVOPo->op_pv;
3538 Zero(tbl, 256, short);
3539 for (i = 0; i < (I32)tlen; i++)
3541 for (i = 0, j = 0; i < 256; i++) {
3543 if (j >= (I32)rlen) {
3552 if (i < 128 && r[j] >= 128)
3562 o->op_private |= OPpTRANS_IDENTICAL;
3564 else if (j >= (I32)rlen)
3569 PerlMemShared_realloc(tbl,
3570 (0x101+rlen-j) * sizeof(short));
3571 cPVOPo->op_pv = (char*)tbl;
3573 tbl[0x100] = (short)(rlen - j);
3574 for (i=0; i < (I32)rlen - j; i++)
3575 tbl[0x101+i] = r[j+i];
3579 if (!rlen && !del) {
3582 o->op_private |= OPpTRANS_IDENTICAL;
3584 else if (!squash && rlen == tlen && memEQ((char*)t, (char*)r, tlen)) {
3585 o->op_private |= OPpTRANS_IDENTICAL;
3587 for (i = 0; i < 256; i++)
3589 for (i = 0, j = 0; i < (I32)tlen; i++,j++) {
3590 if (j >= (I32)rlen) {
3592 if (tbl[t[i]] == -1)
3598 if (tbl[t[i]] == -1) {
3599 if (t[i] < 128 && r[j] >= 128)
3606 if(del && rlen == tlen) {
3607 Perl_ck_warner(aTHX_ packWARN(WARN_MISC), "Useless use of /d modifier in transliteration operator");
3608 } else if(rlen > tlen) {
3609 Perl_ck_warner(aTHX_ packWARN(WARN_MISC), "Replacement list is longer than search list");
3613 o->op_private |= OPpTRANS_GROWS;
3615 op_getmad(expr,o,'e');
3616 op_getmad(repl,o,'r');
3626 =for apidoc Am|OP *|newPMOP|I32 type|I32 flags
3628 Constructs, checks, and returns an op of any pattern matching type.
3629 I<type> is the opcode. I<flags> gives the eight bits of C<op_flags>
3630 and, shifted up eight bits, the eight bits of C<op_private>.
3636 Perl_newPMOP(pTHX_ I32 type, I32 flags)
3641 assert((PL_opargs[type] & OA_CLASS_MASK) == OA_PMOP);
3643 NewOp(1101, pmop, 1, PMOP);
3644 pmop->op_type = (OPCODE)type;
3645 pmop->op_ppaddr = PL_ppaddr[type];
3646 pmop->op_flags = (U8)flags;
3647 pmop->op_private = (U8)(0 | (flags >> 8));
3649 if (PL_hints & HINT_RE_TAINT)
3650 pmop->op_pmflags |= PMf_RETAINT;
3651 if (PL_hints & HINT_LOCALE)
3652 pmop->op_pmflags |= PMf_LOCALE;
3656 assert(SvPOK(PL_regex_pad[0]));
3657 if (SvCUR(PL_regex_pad[0])) {
3658 /* Pop off the "packed" IV from the end. */
3659 SV *const repointer_list = PL_regex_pad[0];
3660 const char *p = SvEND(repointer_list) - sizeof(IV);
3661 const IV offset = *((IV*)p);
3663 assert(SvCUR(repointer_list) % sizeof(IV) == 0);
3665 SvEND_set(repointer_list, p);
3667 pmop->op_pmoffset = offset;
3668 /* This slot should be free, so assert this: */
3669 assert(PL_regex_pad[offset] == &PL_sv_undef);
3671 SV * const repointer = &PL_sv_undef;
3672 av_push(PL_regex_padav, repointer);
3673 pmop->op_pmoffset = av_len(PL_regex_padav);
3674 PL_regex_pad = AvARRAY(PL_regex_padav);
3678 return CHECKOP(type, pmop);
3681 /* Given some sort of match op o, and an expression expr containing a
3682 * pattern, either compile expr into a regex and attach it to o (if it's
3683 * constant), or convert expr into a runtime regcomp op sequence (if it's
3686 * isreg indicates that the pattern is part of a regex construct, eg
3687 * $x =~ /pattern/ or split /pattern/, as opposed to $x =~ $pattern or
3688 * split "pattern", which aren't. In the former case, expr will be a list
3689 * if the pattern contains more than one term (eg /a$b/) or if it contains
3690 * a replacement, ie s/// or tr///.
3694 Perl_pmruntime(pTHX_ OP *o, OP *expr, bool isreg)
3699 I32 repl_has_vars = 0;
3703 PERL_ARGS_ASSERT_PMRUNTIME;
3705 if (o->op_type == OP_SUBST || o->op_type == OP_TRANS) {
3706 /* last element in list is the replacement; pop it */
3708 repl = cLISTOPx(expr)->op_last;
3709 kid = cLISTOPx(expr)->op_first;
3710 while (kid->op_sibling != repl)
3711 kid = kid->op_sibling;
3712 kid->op_sibling = NULL;
3713 cLISTOPx(expr)->op_last = kid;
3716 if (isreg && expr->op_type == OP_LIST &&
3717 cLISTOPx(expr)->op_first->op_sibling == cLISTOPx(expr)->op_last)
3719 /* convert single element list to element */
3720 OP* const oe = expr;
3721 expr = cLISTOPx(oe)->op_first->op_sibling;
3722 cLISTOPx(oe)->op_first->op_sibling = NULL;
3723 cLISTOPx(oe)->op_last = NULL;
3727 if (o->op_type == OP_TRANS) {
3728 return pmtrans(o, expr, repl);
3731 reglist = isreg && expr->op_type == OP_LIST;
3735 PL_hints |= HINT_BLOCK_SCOPE;
3738 if (expr->op_type == OP_CONST) {
3739 SV *pat = ((SVOP*)expr)->op_sv;
3740 U32 pm_flags = pm->op_pmflags & PMf_COMPILETIME;
3742 if (o->op_flags & OPf_SPECIAL)
3743 pm_flags |= RXf_SPLIT;
3746 assert (SvUTF8(pat));
3747 } else if (SvUTF8(pat)) {
3748 /* Not doing UTF-8, despite what the SV says. Is this only if we're
3749 trapped in use 'bytes'? */
3750 /* Make a copy of the octet sequence, but without the flag on, as
3751 the compiler now honours the SvUTF8 flag on pat. */
3753 const char *const p = SvPV(pat, len);
3754 pat = newSVpvn_flags(p, len, SVs_TEMP);
3757 PM_SETRE(pm, CALLREGCOMP(pat, pm_flags));
3760 op_getmad(expr,(OP*)pm,'e');
3766 if (pm->op_pmflags & PMf_KEEP || !(PL_hints & HINT_RE_EVAL))
3767 expr = newUNOP((!(PL_hints & HINT_RE_EVAL)
3769 : OP_REGCMAYBE),0,expr);
3771 NewOp(1101, rcop, 1, LOGOP);
3772 rcop->op_type = OP_REGCOMP;
3773 rcop->op_ppaddr = PL_ppaddr[OP_REGCOMP];
3774 rcop->op_first = scalar(expr);
3775 rcop->op_flags |= OPf_KIDS
3776 | ((PL_hints & HINT_RE_EVAL) ? OPf_SPECIAL : 0)
3777 | (reglist ? OPf_STACKED : 0);
3778 rcop->op_private = 1;
3781 rcop->op_targ = pad_alloc(rcop->op_type, SVs_PADTMP);
3783 /* /$x/ may cause an eval, since $x might be qr/(?{..})/ */
3786 /* establish postfix order */
3787 if (pm->op_pmflags & PMf_KEEP || !(PL_hints & HINT_RE_EVAL)) {
3789 rcop->op_next = expr;
3790 ((UNOP*)expr)->op_first->op_next = (OP*)rcop;
3793 rcop->op_next = LINKLIST(expr);
3794 expr->op_next = (OP*)rcop;
3797 prepend_elem(o->op_type, scalar((OP*)rcop), o);
3802 if (pm->op_pmflags & PMf_EVAL) {
3804 if (CopLINE(PL_curcop) < (line_t)PL_parser->multi_end)
3805 CopLINE_set(PL_curcop, (line_t)PL_parser->multi_end);
3807 else if (repl->op_type == OP_CONST)
3811 for (curop = LINKLIST(repl); curop!=repl; curop = LINKLIST(curop)) {
3812 if (curop->op_type == OP_SCOPE
3813 || curop->op_type == OP_LEAVE
3814 || (PL_opargs[curop->op_type] & OA_DANGEROUS)) {
3815 if (curop->op_type == OP_GV) {
3816 GV * const gv = cGVOPx_gv(curop);
3818 if (strchr("&`'123456789+-\016\022", *GvENAME(gv)))
3821 else if (curop->op_type == OP_RV2CV)
3823 else if (curop->op_type == OP_RV2SV ||
3824 curop->op_type == OP_RV2AV ||
3825 curop->op_type == OP_RV2HV ||
3826 curop->op_type == OP_RV2GV) {
3827 if (lastop && lastop->op_type != OP_GV) /*funny deref?*/
3830 else if (curop->op_type == OP_PADSV ||
3831 curop->op_type == OP_PADAV ||
3832 curop->op_type == OP_PADHV ||
3833 curop->op_type == OP_PADANY)
3837 else if (curop->op_type == OP_PUSHRE)
3838 NOOP; /* Okay here, dangerous in newASSIGNOP */
3848 || RX_EXTFLAGS(PM_GETRE(pm)) & RXf_EVAL_SEEN)))
3850 pm->op_pmflags |= PMf_CONST; /* const for long enough */
3851 prepend_elem(o->op_type, scalar(repl), o);
3854 if (curop == repl && !PM_GETRE(pm)) { /* Has variables. */
3855 pm->op_pmflags |= PMf_MAYBE_CONST;
3857 NewOp(1101, rcop, 1, LOGOP);
3858 rcop->op_type = OP_SUBSTCONT;
3859 rcop->op_ppaddr = PL_ppaddr[OP_SUBSTCONT];
3860 rcop->op_first = scalar(repl);
3861 rcop->op_flags |= OPf_KIDS;
3862 rcop->op_private = 1;
3865 /* establish postfix order */
3866 rcop->op_next = LINKLIST(repl);
3867 repl->op_next = (OP*)rcop;
3869 pm->op_pmreplrootu.op_pmreplroot = scalar((OP*)rcop);
3870 assert(!(pm->op_pmflags & PMf_ONCE));
3871 pm->op_pmstashstartu.op_pmreplstart = LINKLIST(rcop);
3880 =for apidoc Am|OP *|newSVOP|I32 type|I32 flags|SV *sv
3882 Constructs, checks, and returns an op of any type that involves an
3883 embedded SV. I<type> is the opcode. I<flags> gives the eight bits
3884 of C<op_flags>. I<sv> gives the SV to embed in the op; this function
3885 takes ownership of one reference to it.
3891 Perl_newSVOP(pTHX_ I32 type, I32 flags, SV *sv)
3896 PERL_ARGS_ASSERT_NEWSVOP;
3898 assert((PL_opargs[type] & OA_CLASS_MASK) == OA_SVOP
3899 || (PL_opargs[type] & OA_CLASS_MASK) == OA_PVOP_OR_SVOP
3900 || (PL_opargs[type] & OA_CLASS_MASK) == OA_FILESTATOP);
3902 NewOp(1101, svop, 1, SVOP);
3903 svop->op_type = (OPCODE)type;
3904 svop->op_ppaddr = PL_ppaddr[type];
3906 svop->op_next = (OP*)svop;
3907 svop->op_flags = (U8)flags;
3908 if (PL_opargs[type] & OA_RETSCALAR)
3910 if (PL_opargs[type] & OA_TARGET)
3911 svop->op_targ = pad_alloc(type, SVs_PADTMP);
3912 return CHECKOP(type, svop);
3918 =for apidoc Am|OP *|newPADOP|I32 type|I32 flags|SV *sv
3920 Constructs, checks, and returns an op of any type that involves a
3921 reference to a pad element. I<type> is the opcode. I<flags> gives the
3922 eight bits of C<op_flags>. A pad slot is automatically allocated, and
3923 is populated with I<sv>; this function takes ownership of one reference
3926 This function only exists if Perl has been compiled to use ithreads.
3932 Perl_newPADOP(pTHX_ I32 type, I32 flags, SV *sv)
3937 PERL_ARGS_ASSERT_NEWPADOP;
3939 assert((PL_opargs[type] & OA_CLASS_MASK) == OA_SVOP
3940 || (PL_opargs[type] & OA_CLASS_MASK) == OA_PVOP_OR_SVOP
3941 || (PL_opargs[type] & OA_CLASS_MASK) == OA_FILESTATOP);
3943 NewOp(1101, padop, 1, PADOP);
3944 padop->op_type = (OPCODE)type;
3945 padop->op_ppaddr = PL_ppaddr[type];
3946 padop->op_padix = pad_alloc(type, SVs_PADTMP);
3947 SvREFCNT_dec(PAD_SVl(padop->op_padix));
3948 PAD_SETSV(padop->op_padix, sv);
3951 padop->op_next = (OP*)padop;
3952 padop->op_flags = (U8)flags;
3953 if (PL_opargs[type] & OA_RETSCALAR)
3955 if (PL_opargs[type] & OA_TARGET)
3956 padop->op_targ = pad_alloc(type, SVs_PADTMP);
3957 return CHECKOP(type, padop);
3960 #endif /* !USE_ITHREADS */
3963 =for apidoc Am|OP *|newGVOP|I32 type|I32 flags|GV *gv
3965 Constructs, checks, and returns an op of any type that involves an
3966 embedded reference to a GV. I<type> is the opcode. I<flags> gives the
3967 eight bits of C<op_flags>. I<gv> identifies the GV that the op should
3968 reference; calling this function does not transfer ownership of any
3975 Perl_newGVOP(pTHX_ I32 type, I32 flags, GV *gv)
3979 PERL_ARGS_ASSERT_NEWGVOP;
3983 return newPADOP(type, flags, SvREFCNT_inc_simple_NN(gv));
3985 return newSVOP(type, flags, SvREFCNT_inc_simple_NN(gv));
3990 =for apidoc Am|OP *|newPVOP|I32 type|I32 flags|char *pv
3992 Constructs, checks, and returns an op of any type that involves an
3993 embedded C-level pointer (PV). I<type> is the opcode. I<flags> gives
3994 the eight bits of C<op_flags>. I<pv> supplies the C-level pointer, which
3995 must have been allocated using L</PerlMemShared_malloc>; the memory will
3996 be freed when the op is destroyed.
4002 Perl_newPVOP(pTHX_ I32 type, I32 flags, char *pv)
4007 assert((PL_opargs[type] & OA_CLASS_MASK) == OA_PVOP_OR_SVOP
4008 || (PL_opargs[type] & OA_CLASS_MASK) == OA_LOOPEXOP);
4010 NewOp(1101, pvop, 1, PVOP);
4011 pvop->op_type = (OPCODE)type;
4012 pvop->op_ppaddr = PL_ppaddr[type];
4014 pvop->op_next = (OP*)pvop;
4015 pvop->op_flags = (U8)flags;
4016 if (PL_opargs[type] & OA_RETSCALAR)
4018 if (PL_opargs[type] & OA_TARGET)
4019 pvop->op_targ = pad_alloc(type, SVs_PADTMP);
4020 return CHECKOP(type, pvop);
4028 Perl_package(pTHX_ OP *o)
4031 SV *const sv = cSVOPo->op_sv;
4036 PERL_ARGS_ASSERT_PACKAGE;
4038 save_hptr(&PL_curstash);
4039 save_item(PL_curstname);
4041 PL_curstash = gv_stashsv(sv, GV_ADD);
4043 sv_setsv(PL_curstname, sv);
4045 PL_hints |= HINT_BLOCK_SCOPE;
4046 PL_parser->copline = NOLINE;
4047 PL_parser->expect = XSTATE;
4052 if (!PL_madskills) {
4057 pegop = newOP(OP_NULL,0);
4058 op_getmad(o,pegop,'P');
4064 Perl_package_version( pTHX_ OP *v )
4067 U32 savehints = PL_hints;
4068 PERL_ARGS_ASSERT_PACKAGE_VERSION;
4069 PL_hints &= ~HINT_STRICT_VARS;
4070 sv_setsv( GvSV(gv_fetchpvs("VERSION", GV_ADDMULTI, SVt_PV)), cSVOPx(v)->op_sv );
4071 PL_hints = savehints;
4080 Perl_utilize(pTHX_ int aver, I32 floor, OP *version, OP *idop, OP *arg)
4087 OP *pegop = newOP(OP_NULL,0);
4090 PERL_ARGS_ASSERT_UTILIZE;
4092 if (idop->op_type != OP_CONST)
4093 Perl_croak(aTHX_ "Module name must be constant");
4096 op_getmad(idop,pegop,'U');
4101 SV * const vesv = ((SVOP*)version)->op_sv;
4104 op_getmad(version,pegop,'V');
4105 if (!arg && !SvNIOKp(vesv)) {
4112 if (version->op_type != OP_CONST || !SvNIOKp(vesv))
4113 Perl_croak(aTHX_ "Version number must be a constant number");
4115 /* Make copy of idop so we don't free it twice */
4116 pack = newSVOP(OP_CONST, 0, newSVsv(((SVOP*)idop)->op_sv));
4118 /* Fake up a method call to VERSION */
4119 meth = newSVpvs_share("VERSION");
4120 veop = convert(OP_ENTERSUB, OPf_STACKED|OPf_SPECIAL,
4121 append_elem(OP_LIST,
4122 prepend_elem(OP_LIST, pack, list(version)),
4123 newSVOP(OP_METHOD_NAMED, 0, meth)));
4127 /* Fake up an import/unimport */
4128 if (arg && arg->op_type == OP_STUB) {
4130 op_getmad(arg,pegop,'S');
4131 imop = arg; /* no import on explicit () */
4133 else if (SvNIOKp(((SVOP*)idop)->op_sv)) {
4134 imop = NULL; /* use 5.0; */
4136 idop->op_private |= OPpCONST_NOVER;
4142 op_getmad(arg,pegop,'A');
4144 /* Make copy of idop so we don't free it twice */
4145 pack = newSVOP(OP_CONST, 0, newSVsv(((SVOP*)idop)->op_sv));
4147 /* Fake up a method call to import/unimport */
4149 ? newSVpvs_share("import") : newSVpvs_share("unimport");
4150 imop = convert(OP_ENTERSUB, OPf_STACKED|OPf_SPECIAL,
4151 append_elem(OP_LIST,
4152 prepend_elem(OP_LIST, pack, list(arg)),
4153 newSVOP(OP_METHOD_NAMED, 0, meth)));
4156 /* Fake up the BEGIN {}, which does its thing immediately. */
4158 newSVOP(OP_CONST, 0, newSVpvs_share("BEGIN")),
4161 append_elem(OP_LINESEQ,
4162 append_elem(OP_LINESEQ,
4163 newSTATEOP(0, NULL, newUNOP(OP_REQUIRE, 0, idop)),
4164 newSTATEOP(0, NULL, veop)),
4165 newSTATEOP(0, NULL, imop) ));
4167 /* The "did you use incorrect case?" warning used to be here.
4168 * The problem is that on case-insensitive filesystems one
4169 * might get false positives for "use" (and "require"):
4170 * "use Strict" or "require CARP" will work. This causes
4171 * portability problems for the script: in case-strict
4172 * filesystems the script will stop working.
4174 * The "incorrect case" warning checked whether "use Foo"
4175 * imported "Foo" to your namespace, but that is wrong, too:
4176 * there is no requirement nor promise in the language that
4177 * a Foo.pm should or would contain anything in package "Foo".
4179 * There is very little Configure-wise that can be done, either:
4180 * the case-sensitivity of the build filesystem of Perl does not
4181 * help in guessing the case-sensitivity of the runtime environment.
4184 PL_hints |= HINT_BLOCK_SCOPE;
4185 PL_parser->copline = NOLINE;
4186 PL_parser->expect = XSTATE;
4187 PL_cop_seqmax++; /* Purely for B::*'s benefit */
4190 if (!PL_madskills) {
4191 /* FIXME - don't allocate pegop if !PL_madskills */
4200 =head1 Embedding Functions
4202 =for apidoc load_module
4204 Loads the module whose name is pointed to by the string part of name.
4205 Note that the actual module name, not its filename, should be given.
4206 Eg, "Foo::Bar" instead of "Foo/Bar.pm". flags can be any of
4207 PERL_LOADMOD_DENY, PERL_LOADMOD_NOIMPORT, or PERL_LOADMOD_IMPORT_OPS
4208 (or 0 for no flags). ver, if specified, provides version semantics
4209 similar to C<use Foo::Bar VERSION>. The optional trailing SV*
4210 arguments can be used to specify arguments to the module's import()
4211 method, similar to C<use Foo::Bar VERSION LIST>. They must be
4212 terminated with a final NULL pointer. Note that this list can only
4213 be omitted when the PERL_LOADMOD_NOIMPORT flag has been used.
4214 Otherwise at least a single NULL pointer to designate the default
4215 import list is required.
4220 Perl_load_module(pTHX_ U32 flags, SV *name, SV *ver, ...)
4224 PERL_ARGS_ASSERT_LOAD_MODULE;
4226 va_start(args, ver);
4227 vload_module(flags, name, ver, &args);
4231 #ifdef PERL_IMPLICIT_CONTEXT
4233 Perl_load_module_nocontext(U32 flags, SV *name, SV *ver, ...)
4237 PERL_ARGS_ASSERT_LOAD_MODULE_NOCONTEXT;
4238 va_start(args, ver);
4239 vload_module(flags, name, ver, &args);
4245 Perl_vload_module(pTHX_ U32 flags, SV *name, SV *ver, va_list *args)
4249 OP * const modname = newSVOP(OP_CONST, 0, name);
4251 PERL_ARGS_ASSERT_VLOAD_MODULE;
4253 modname->op_private |= OPpCONST_BARE;
4255 veop = newSVOP(OP_CONST, 0, ver);
4259 if (flags & PERL_LOADMOD_NOIMPORT) {
4260 imop = sawparens(newNULLLIST());
4262 else if (flags & PERL_LOADMOD_IMPORT_OPS) {
4263 imop = va_arg(*args, OP*);
4268 sv = va_arg(*args, SV*);
4270 imop = append_elem(OP_LIST, imop, newSVOP(OP_CONST, 0, sv));
4271 sv = va_arg(*args, SV*);
4275 /* utilize() fakes up a BEGIN { require ..; import ... }, so make sure
4276 * that it has a PL_parser to play with while doing that, and also
4277 * that it doesn't mess with any existing parser, by creating a tmp
4278 * new parser with lex_start(). This won't actually be used for much,
4279 * since pp_require() will create another parser for the real work. */
4282 SAVEVPTR(PL_curcop);
4283 lex_start(NULL, NULL, FALSE);
4284 utilize(!(flags & PERL_LOADMOD_DENY), start_subparse(FALSE, 0),
4285 veop, modname, imop);
4290 Perl_dofile(pTHX_ OP *term, I32 force_builtin)
4296 PERL_ARGS_ASSERT_DOFILE;
4298 if (!force_builtin) {
4299 gv = gv_fetchpvs("do", GV_NOTQUAL, SVt_PVCV);
4300 if (!(gv && GvCVu(gv) && GvIMPORTED_CV(gv))) {
4301 GV * const * const gvp = (GV**)hv_fetchs(PL_globalstash, "do", FALSE);
4302 gv = gvp ? *gvp : NULL;
4306 if (gv && GvCVu(gv) && GvIMPORTED_CV(gv)) {
4307 doop = ck_subr(newUNOP(OP_ENTERSUB, OPf_STACKED,
4308 append_elem(OP_LIST, term,
4309 scalar(newUNOP(OP_RV2CV, 0,
4310 newGVOP(OP_GV, 0, gv))))));
4313 doop = newUNOP(OP_DOFILE, 0, scalar(term));
4319 =head1 Optree construction
4321 =for apidoc Am|OP *|newSLICEOP|I32 flags|OP *subscript|OP *listval
4323 Constructs, checks, and returns an C<lslice> (list slice) op. I<flags>
4324 gives the eight bits of C<op_flags>, except that C<OPf_KIDS> will
4325 be set automatically, and, shifted up eight bits, the eight bits of
4326 C<op_private>, except that the bit with value 1 or 2 is automatically
4327 set as required. I<listval> and I<subscript> supply the parameters of
4328 the slice; they are consumed by this function and become part of the
4329 constructed op tree.
4335 Perl_newSLICEOP(pTHX_ I32 flags, OP *subscript, OP *listval)
4337 return newBINOP(OP_LSLICE, flags,
4338 list(force_list(subscript)),
4339 list(force_list(listval)) );
4343 S_is_list_assignment(pTHX_ register const OP *o)
4351 if ((o->op_type == OP_NULL) && (o->op_flags & OPf_KIDS))
4352 o = cUNOPo->op_first;
4354 flags = o->op_flags;
4356 if (type == OP_COND_EXPR) {
4357 const I32 t = is_list_assignment(cLOGOPo->op_first->op_sibling);
4358 const I32 f = is_list_assignment(cLOGOPo->op_first->op_sibling->op_sibling);
4363 yyerror("Assignment to both a list and a scalar");
4367 if (type == OP_LIST &&
4368 (flags & OPf_WANT) == OPf_WANT_SCALAR &&
4369 o->op_private & OPpLVAL_INTRO)
4372 if (type == OP_LIST || flags & OPf_PARENS ||
4373 type == OP_RV2AV || type == OP_RV2HV ||
4374 type == OP_ASLICE || type == OP_HSLICE)
4377 if (type == OP_PADAV || type == OP_PADHV)
4380 if (type == OP_RV2SV)
4387 =for apidoc Am|OP *|newASSIGNOP|I32 flags|OP *left|I32 optype|OP *right
4389 Constructs, checks, and returns an assignment op. I<left> and I<right>
4390 supply the parameters of the assignment; they are consumed by this
4391 function and become part of the constructed op tree.
4393 If I<optype> is C<OP_ANDASSIGN>, C<OP_ORASSIGN>, or C<OP_DORASSIGN>, then
4394 a suitable conditional optree is constructed. If I<optype> is the opcode
4395 of a binary operator, such as C<OP_BIT_OR>, then an op is constructed that
4396 performs the binary operation and assigns the result to the left argument.
4397 Either way, if I<optype> is non-zero then I<flags> has no effect.
4399 If I<optype> is zero, then a plain scalar or list assignment is
4400 constructed. Which type of assignment it is is automatically determined.
4401 I<flags> gives the eight bits of C<op_flags>, except that C<OPf_KIDS>
4402 will be set automatically, and, shifted up eight bits, the eight bits
4403 of C<op_private>, except that the bit with value 1 or 2 is automatically
4410 Perl_newASSIGNOP(pTHX_ I32 flags, OP *left, I32 optype, OP *right)
4416 if (optype == OP_ANDASSIGN || optype == OP_ORASSIGN || optype == OP_DORASSIGN) {
4417 return newLOGOP(optype, 0,
4418 mod(scalar(left), optype),
4419 newUNOP(OP_SASSIGN, 0, scalar(right)));
4422 return newBINOP(optype, OPf_STACKED,
4423 mod(scalar(left), optype), scalar(right));
4427 if (is_list_assignment(left)) {
4428 static const char no_list_state[] = "Initialization of state variables"
4429 " in list context currently forbidden";
4431 bool maybe_common_vars = TRUE;
4434 /* Grandfathering $[ assignment here. Bletch.*/
4435 /* Only simple assignments like C<< ($[) = 1 >> are allowed */
4436 PL_eval_start = (left->op_type == OP_CONST) ? right : NULL;
4437 left = mod(left, OP_AASSIGN);
4440 else if (left->op_type == OP_CONST) {
4441 deprecate("assignment to $[");
4443 /* Result of assignment is always 1 (or we'd be dead already) */
4444 return newSVOP(OP_CONST, 0, newSViv(1));
4446 curop = list(force_list(left));
4447 o = newBINOP(OP_AASSIGN, flags, list(force_list(right)), curop);
4448 o->op_private = (U8)(0 | (flags >> 8));
4450 if ((left->op_type == OP_LIST
4451 || (left->op_type == OP_NULL && left->op_targ == OP_LIST)))
4453 OP* lop = ((LISTOP*)left)->op_first;
4454 maybe_common_vars = FALSE;
4456 if (lop->op_type == OP_PADSV ||
4457 lop->op_type == OP_PADAV ||
4458 lop->op_type == OP_PADHV ||
4459 lop->op_type == OP_PADANY) {
4460 if (!(lop->op_private & OPpLVAL_INTRO))
4461 maybe_common_vars = TRUE;
4463 if (lop->op_private & OPpPAD_STATE) {
4464 if (left->op_private & OPpLVAL_INTRO) {
4465 /* Each variable in state($a, $b, $c) = ... */
4468 /* Each state variable in
4469 (state $a, my $b, our $c, $d, undef) = ... */
4471 yyerror(no_list_state);
4473 /* Each my variable in
4474 (state $a, my $b, our $c, $d, undef) = ... */
4476 } else if (lop->op_type == OP_UNDEF ||
4477 lop->op_type == OP_PUSHMARK) {
4478 /* undef may be interesting in
4479 (state $a, undef, state $c) */
4481 /* Other ops in the list. */
4482 maybe_common_vars = TRUE;
4484 lop = lop->op_sibling;
4487 else if ((left->op_private & OPpLVAL_INTRO)
4488 && ( left->op_type == OP_PADSV
4489 || left->op_type == OP_PADAV
4490 || left->op_type == OP_PADHV
4491 || left->op_type == OP_PADANY))
4493 if (left->op_type == OP_PADSV) maybe_common_vars = FALSE;
4494 if (left->op_private & OPpPAD_STATE) {
4495 /* All single variable list context state assignments, hence
4505 yyerror(no_list_state);
4509 /* PL_generation sorcery:
4510 * an assignment like ($a,$b) = ($c,$d) is easier than
4511 * ($a,$b) = ($c,$a), since there is no need for temporary vars.
4512 * To detect whether there are common vars, the global var
4513 * PL_generation is incremented for each assign op we compile.
4514 * Then, while compiling the assign op, we run through all the
4515 * variables on both sides of the assignment, setting a spare slot
4516 * in each of them to PL_generation. If any of them already have
4517 * that value, we know we've got commonality. We could use a
4518 * single bit marker, but then we'd have to make 2 passes, first
4519 * to clear the flag, then to test and set it. To find somewhere
4520 * to store these values, evil chicanery is done with SvUVX().
4523 if (maybe_common_vars) {
4526 for (curop = LINKLIST(o); curop != o; curop = LINKLIST(curop)) {
4527 if (PL_opargs[curop->op_type] & OA_DANGEROUS) {
4528 if (curop->op_type == OP_GV) {
4529 GV *gv = cGVOPx_gv(curop);
4531 || (int)GvASSIGN_GENERATION(gv) == PL_generation)
4533 GvASSIGN_GENERATION_set(gv, PL_generation);
4535 else if (curop->op_type == OP_PADSV ||
4536 curop->op_type == OP_PADAV ||
4537 curop->op_type == OP_PADHV ||
4538 curop->op_type == OP_PADANY)
4540 if (PAD_COMPNAME_GEN(curop->op_targ)
4541 == (STRLEN)PL_generation)
4543 PAD_COMPNAME_GEN_set(curop->op_targ, PL_generation);
4546 else if (curop->op_type == OP_RV2CV)
4548 else if (curop->op_type == OP_RV2SV ||
4549 curop->op_type == OP_RV2AV ||
4550 curop->op_type == OP_RV2HV ||
4551 curop->op_type == OP_RV2GV) {
4552 if (lastop->op_type != OP_GV) /* funny deref? */
4555 else if (curop->op_type == OP_PUSHRE) {
4557 if (((PMOP*)curop)->op_pmreplrootu.op_pmtargetoff) {
4558 GV *const gv = MUTABLE_GV(PAD_SVl(((PMOP*)curop)->op_pmreplrootu.op_pmtargetoff));
4560 || (int)GvASSIGN_GENERATION(gv) == PL_generation)
4562 GvASSIGN_GENERATION_set(gv, PL_generation);
4566 = ((PMOP*)curop)->op_pmreplrootu.op_pmtargetgv;
4569 || (int)GvASSIGN_GENERATION(gv) == PL_generation)
4571 GvASSIGN_GENERATION_set(gv, PL_generation);
4581 o->op_private |= OPpASSIGN_COMMON;
4584 if (right && right->op_type == OP_SPLIT && !PL_madskills) {
4585 OP* tmpop = ((LISTOP*)right)->op_first;
4586 if (tmpop && (tmpop->op_type == OP_PUSHRE)) {
4587 PMOP * const pm = (PMOP*)tmpop;
4588 if (left->op_type == OP_RV2AV &&
4589 !(left->op_private & OPpLVAL_INTRO) &&
4590 !(o->op_private & OPpASSIGN_COMMON) )
4592 tmpop = ((UNOP*)left)->op_first;
4593 if (tmpop->op_type == OP_GV
4595 && !pm->op_pmreplrootu.op_pmtargetoff
4597 && !pm->op_pmreplrootu.op_pmtargetgv
4601 pm->op_pmreplrootu.op_pmtargetoff
4602 = cPADOPx(tmpop)->op_padix;
4603 cPADOPx(tmpop)->op_padix = 0; /* steal it */
4605 pm->op_pmreplrootu.op_pmtargetgv
4606 = MUTABLE_GV(cSVOPx(tmpop)->op_sv);
4607 cSVOPx(tmpop)->op_sv = NULL; /* steal it */
4609 pm->op_pmflags |= PMf_ONCE;
4610 tmpop = cUNOPo->op_first; /* to list (nulled) */
4611 tmpop = ((UNOP*)tmpop)->op_first; /* to pushmark */
4612 tmpop->op_sibling = NULL; /* don't free split */
4613 right->op_next = tmpop->op_next; /* fix starting loc */
4614 op_free(o); /* blow off assign */
4615 right->op_flags &= ~OPf_WANT;
4616 /* "I don't know and I don't care." */
4621 if (PL_modcount < RETURN_UNLIMITED_NUMBER &&
4622 ((LISTOP*)right)->op_last->op_type == OP_CONST)
4624 SV *sv = ((SVOP*)((LISTOP*)right)->op_last)->op_sv;
4625 if (SvIOK(sv) && SvIVX(sv) == 0)
4626 sv_setiv(sv, PL_modcount+1);
4634 right = newOP(OP_UNDEF, 0);
4635 if (right->op_type == OP_READLINE) {
4636 right->op_flags |= OPf_STACKED;
4637 return newBINOP(OP_NULL, flags, mod(scalar(left), OP_SASSIGN), scalar(right));
4640 PL_eval_start = right; /* Grandfathering $[ assignment here. Bletch.*/
4641 o = newBINOP(OP_SASSIGN, flags,
4642 scalar(right), mod(scalar(left), OP_SASSIGN) );
4646 if (!PL_madskills) { /* assignment to $[ is ignored when making a mad dump */
4647 deprecate("assignment to $[");
4649 o = newSVOP(OP_CONST, 0, newSViv(CopARYBASE_get(&PL_compiling)));
4650 o->op_private |= OPpCONST_ARYBASE;
4658 =for apidoc Am|OP *|newSTATEOP|I32 flags|char *label|OP *o
4660 Constructs a state op (COP). The state op is normally a C<nextstate> op,
4661 but will be a C<dbstate> op if debugging is enabled for currently-compiled
4662 code. The state op is populated from L</PL_curcop> (or L</PL_compiling>).
4663 If I<label> is non-null, it supplies the name of a label to attach to
4664 the state op; this function takes ownership of the memory pointed at by
4665 I<label>, and will free it. I<flags> gives the eight bits of C<op_flags>
4668 If I<o> is null, the state op is returned. Otherwise the state op is
4669 combined with I<o> into a C<lineseq> list op, which is returned. I<o>
4670 is consumed by this function and becomes part of the returned op tree.
4676 Perl_newSTATEOP(pTHX_ I32 flags, char *label, OP *o)
4679 const U32 seq = intro_my();
4682 NewOp(1101, cop, 1, COP);
4683 if (PERLDB_LINE && CopLINE(PL_curcop) && PL_curstash != PL_debstash) {
4684 cop->op_type = OP_DBSTATE;
4685 cop->op_ppaddr = PL_ppaddr[ OP_DBSTATE ];
4688 cop->op_type = OP_NEXTSTATE;
4689 cop->op_ppaddr = PL_ppaddr[ OP_NEXTSTATE ];
4691 cop->op_flags = (U8)flags;
4692 CopHINTS_set(cop, PL_hints);
4694 cop->op_private |= NATIVE_HINTS;
4696 CopHINTS_set(&PL_compiling, CopHINTS_get(cop));
4697 cop->op_next = (OP*)cop;
4700 /* CopARYBASE is now "virtual", in that it's stored as a flag bit in
4701 CopHINTS and a possible value in cop_hints_hash, so no need to copy it.
4703 cop->cop_warnings = DUP_WARNINGS(PL_curcop->cop_warnings);
4704 cop->cop_hints_hash = PL_curcop->cop_hints_hash;
4705 if (cop->cop_hints_hash) {
4707 cop->cop_hints_hash->refcounted_he_refcnt++;
4708 HINTS_REFCNT_UNLOCK;
4711 Perl_store_cop_label(aTHX_ cop, label, strlen(label), 0);
4713 PL_hints |= HINT_BLOCK_SCOPE;
4714 /* It seems that we need to defer freeing this pointer, as other parts
4715 of the grammar end up wanting to copy it after this op has been
4720 if (PL_parser && PL_parser->copline == NOLINE)
4721 CopLINE_set(cop, CopLINE(PL_curcop));
4723 CopLINE_set(cop, PL_parser->copline);
4725 PL_parser->copline = NOLINE;
4728 CopFILE_set(cop, CopFILE(PL_curcop)); /* XXX share in a pvtable? */
4730 CopFILEGV_set(cop, CopFILEGV(PL_curcop));
4732 CopSTASH_set(cop, PL_curstash);
4734 if ((PERLDB_LINE || PERLDB_SAVESRC) && PL_curstash != PL_debstash) {
4735 /* this line can have a breakpoint - store the cop in IV */
4736 AV *av = CopFILEAVx(PL_curcop);
4738 SV * const * const svp = av_fetch(av, (I32)CopLINE(cop), FALSE);
4739 if (svp && *svp != &PL_sv_undef ) {
4740 (void)SvIOK_on(*svp);
4741 SvIV_set(*svp, PTR2IV(cop));
4746 if (flags & OPf_SPECIAL)
4748 return prepend_elem(OP_LINESEQ, (OP*)cop, o);
4752 =for apidoc Am|OP *|newLOGOP|I32 type|I32 flags|OP *first|OP *other
4754 Constructs, checks, and returns a logical (flow control) op. I<type>
4755 is the opcode. I<flags> gives the eight bits of C<op_flags>, except
4756 that C<OPf_KIDS> will be set automatically, and, shifted up eight bits,
4757 the eight bits of C<op_private>, except that the bit with value 1 is
4758 automatically set. I<first> supplies the expression controlling the
4759 flow, and I<other> supplies the side (alternate) chain of ops; they are
4760 consumed by this function and become part of the constructed op tree.
4766 Perl_newLOGOP(pTHX_ I32 type, I32 flags, OP *first, OP *other)
4770 PERL_ARGS_ASSERT_NEWLOGOP;
4772 return new_logop(type, flags, &first, &other);
4776 S_search_const(pTHX_ OP *o)
4778 PERL_ARGS_ASSERT_SEARCH_CONST;
4780 switch (o->op_type) {
4784 if (o->op_flags & OPf_KIDS)
4785 return search_const(cUNOPo->op_first);
4792 if (!(o->op_flags & OPf_KIDS))
4794 kid = cLISTOPo->op_first;
4796 switch (kid->op_type) {
4800 kid = kid->op_sibling;
4803 if (kid != cLISTOPo->op_last)
4809 kid = cLISTOPo->op_last;
4811 return search_const(kid);
4819 S_new_logop(pTHX_ I32 type, I32 flags, OP** firstp, OP** otherp)
4827 int prepend_not = 0;
4829 PERL_ARGS_ASSERT_NEW_LOGOP;
4834 if (type == OP_XOR) /* Not short circuit, but here by precedence. */
4835 return newBINOP(type, flags, scalar(first), scalar(other));
4837 assert((PL_opargs[type] & OA_CLASS_MASK) == OA_LOGOP);
4839 scalarboolean(first);
4840 /* optimize AND and OR ops that have NOTs as children */
4841 if (first->op_type == OP_NOT
4842 && (first->op_flags & OPf_KIDS)
4843 && ((first->op_flags & OPf_SPECIAL) /* unless ($x) { } */
4844 || (other->op_type == OP_NOT)) /* if (!$x && !$y) { } */
4846 if (type == OP_AND || type == OP_OR) {
4852 if (other->op_type == OP_NOT) { /* !a AND|OR !b => !(a OR|AND b) */
4854 prepend_not = 1; /* prepend a NOT op later */
4858 /* search for a constant op that could let us fold the test */
4859 if ((cstop = search_const(first))) {
4860 if (cstop->op_private & OPpCONST_STRICT)
4861 no_bareword_allowed(cstop);
4862 else if ((cstop->op_private & OPpCONST_BARE))
4863 Perl_ck_warner(aTHX_ packWARN(WARN_BAREWORD), "Bareword found in conditional");
4864 if ((type == OP_AND && SvTRUE(((SVOP*)cstop)->op_sv)) ||
4865 (type == OP_OR && !SvTRUE(((SVOP*)cstop)->op_sv)) ||
4866 (type == OP_DOR && !SvOK(((SVOP*)cstop)->op_sv))) {
4868 if (other->op_type == OP_CONST)
4869 other->op_private |= OPpCONST_SHORTCIRCUIT;
4871 OP *newop = newUNOP(OP_NULL, 0, other);
4872 op_getmad(first, newop, '1');
4873 newop->op_targ = type; /* set "was" field */
4877 if (other->op_type == OP_LEAVE)
4878 other = newUNOP(OP_NULL, OPf_SPECIAL, other);
4882 /* check for C<my $x if 0>, or C<my($x,$y) if 0> */
4883 const OP *o2 = other;
4884 if ( ! (o2->op_type == OP_LIST
4885 && (( o2 = cUNOPx(o2)->op_first))
4886 && o2->op_type == OP_PUSHMARK
4887 && (( o2 = o2->op_sibling)) )
4890 if ((o2->op_type == OP_PADSV || o2->op_type == OP_PADAV
4891 || o2->op_type == OP_PADHV)
4892 && o2->op_private & OPpLVAL_INTRO
4893 && !(o2->op_private & OPpPAD_STATE))
4895 Perl_ck_warner_d(aTHX_ packWARN(WARN_DEPRECATED),
4896 "Deprecated use of my() in false conditional");
4900 if (first->op_type == OP_CONST)
4901 first->op_private |= OPpCONST_SHORTCIRCUIT;
4903 first = newUNOP(OP_NULL, 0, first);
4904 op_getmad(other, first, '2');
4905 first->op_targ = type; /* set "was" field */
4912 else if ((first->op_flags & OPf_KIDS) && type != OP_DOR
4913 && ckWARN(WARN_MISC)) /* [#24076] Don't warn for <FH> err FOO. */
4915 const OP * const k1 = ((UNOP*)first)->op_first;
4916 const OP * const k2 = k1->op_sibling;
4918 switch (first->op_type)
4921 if (k2 && k2->op_type == OP_READLINE
4922 && (k2->op_flags & OPf_STACKED)
4923 && ((k1->op_flags & OPf_WANT) == OPf_WANT_SCALAR))
4925 warnop = k2->op_type;
4930 if (k1->op_type == OP_READDIR
4931 || k1->op_type == OP_GLOB
4932 || (k1->op_type == OP_NULL && k1->op_targ == OP_GLOB)
4933 || k1->op_type == OP_EACH)
4935 warnop = ((k1->op_type == OP_NULL)
4936 ? (OPCODE)k1->op_targ : k1->op_type);
4941 const line_t oldline = CopLINE(PL_curcop);
4942 CopLINE_set(PL_curcop, PL_parser->copline);
4943 Perl_warner(aTHX_ packWARN(WARN_MISC),
4944 "Value of %s%s can be \"0\"; test with defined()",
4946 ((warnop == OP_READLINE || warnop == OP_GLOB)
4947 ? " construct" : "() operator"));
4948 CopLINE_set(PL_curcop, oldline);
4955 if (type == OP_ANDASSIGN || type == OP_ORASSIGN || type == OP_DORASSIGN)
4956 other->op_private |= OPpASSIGN_BACKWARDS; /* other is an OP_SASSIGN */
4958 NewOp(1101, logop, 1, LOGOP);
4960 logop->op_type = (OPCODE)type;
4961 logop->op_ppaddr = PL_ppaddr[type];
4962 logop->op_first = first;
4963 logop->op_flags = (U8)(flags | OPf_KIDS);
4964 logop->op_other = LINKLIST(other);
4965 logop->op_private = (U8)(1 | (flags >> 8));
4967 /* establish postfix order */
4968 logop->op_next = LINKLIST(first);
4969 first->op_next = (OP*)logop;
4970 first->op_sibling = other;
4972 CHECKOP(type,logop);
4974 o = newUNOP(prepend_not ? OP_NOT : OP_NULL, 0, (OP*)logop);
4981 =for apidoc Am|OP *|newCONDOP|I32 flags|OP *first|OP *trueop|OP *falseop
4983 Constructs, checks, and returns a conditional-expression (C<cond_expr>)
4984 op. I<flags> gives the eight bits of C<op_flags>, except that C<OPf_KIDS>
4985 will be set automatically, and, shifted up eight bits, the eight bits of
4986 C<op_private>, except that the bit with value 1 is automatically set.
4987 I<first> supplies the expression selecting between the two branches,
4988 and I<trueop> and I<falseop> supply the branches; they are consumed by
4989 this function and become part of the constructed op tree.
4995 Perl_newCONDOP(pTHX_ I32 flags, OP *first, OP *trueop, OP *falseop)
5003 PERL_ARGS_ASSERT_NEWCONDOP;
5006 return newLOGOP(OP_AND, 0, first, trueop);
5008 return newLOGOP(OP_OR, 0, first, falseop);
5010 scalarboolean(first);
5011 if ((cstop = search_const(first))) {
5012 /* Left or right arm of the conditional? */
5013 const bool left = SvTRUE(((SVOP*)cstop)->op_sv);
5014 OP *live = left ? trueop : falseop;
5015 OP *const dead = left ? falseop : trueop;
5016 if (cstop->op_private & OPpCONST_BARE &&
5017 cstop->op_private & OPpCONST_STRICT) {
5018 no_bareword_allowed(cstop);
5021 /* This is all dead code when PERL_MAD is not defined. */
5022 live = newUNOP(OP_NULL, 0, live);
5023 op_getmad(first, live, 'C');
5024 op_getmad(dead, live, left ? 'e' : 't');
5029 if (live->op_type == OP_LEAVE)
5030 live = newUNOP(OP_NULL, OPf_SPECIAL, live);
5033 NewOp(1101, logop, 1, LOGOP);
5034 logop->op_type = OP_COND_EXPR;
5035 logop->op_ppaddr = PL_ppaddr[OP_COND_EXPR];
5036 logop->op_first = first;
5037 logop->op_flags = (U8)(flags | OPf_KIDS);
5038 logop->op_private = (U8)(1 | (flags >> 8));
5039 logop->op_other = LINKLIST(trueop);
5040 logop->op_next = LINKLIST(falseop);
5042 CHECKOP(OP_COND_EXPR, /* that's logop->op_type */
5045 /* establish postfix order */
5046 start = LINKLIST(first);
5047 first->op_next = (OP*)logop;
5049 first->op_sibling = trueop;
5050 trueop->op_sibling = falseop;
5051 o = newUNOP(OP_NULL, 0, (OP*)logop);
5053 trueop->op_next = falseop->op_next = o;
5060 =for apidoc Am|OP *|newRANGE|I32 flags|OP *left|OP *right
5062 Constructs and returns a C<range> op, with subordinate C<flip> and
5063 C<flop> ops. I<flags> gives the eight bits of C<op_flags> for the
5064 C<flip> op and, shifted up eight bits, the eight bits of C<op_private>
5065 for both the C<flip> and C<range> ops, except that the bit with value
5066 1 is automatically set. I<left> and I<right> supply the expressions
5067 controlling the endpoints of the range; they are consumed by this function
5068 and become part of the constructed op tree.
5074 Perl_newRANGE(pTHX_ I32 flags, OP *left, OP *right)
5083 PERL_ARGS_ASSERT_NEWRANGE;
5085 NewOp(1101, range, 1, LOGOP);
5087 range->op_type = OP_RANGE;
5088 range->op_ppaddr = PL_ppaddr[OP_RANGE];
5089 range->op_first = left;
5090 range->op_flags = OPf_KIDS;
5091 leftstart = LINKLIST(left);
5092 range->op_other = LINKLIST(right);
5093 range->op_private = (U8)(1 | (flags >> 8));
5095 left->op_sibling = right;
5097 range->op_next = (OP*)range;
5098 flip = newUNOP(OP_FLIP, flags, (OP*)range);
5099 flop = newUNOP(OP_FLOP, 0, flip);
5100 o = newUNOP(OP_NULL, 0, flop);
5102 range->op_next = leftstart;
5104 left->op_next = flip;
5105 right->op_next = flop;
5107 range->op_targ = pad_alloc(OP_RANGE, SVs_PADMY);
5108 sv_upgrade(PAD_SV(range->op_targ), SVt_PVNV);
5109 flip->op_targ = pad_alloc(OP_RANGE, SVs_PADMY);
5110 sv_upgrade(PAD_SV(flip->op_targ), SVt_PVNV);
5112 flip->op_private = left->op_type == OP_CONST ? OPpFLIP_LINENUM : 0;
5113 flop->op_private = right->op_type == OP_CONST ? OPpFLIP_LINENUM : 0;
5116 if (!flip->op_private || !flop->op_private)
5117 linklist(o); /* blow off optimizer unless constant */
5123 =for apidoc Am|OP *|newLOOPOP|I32 flags|I32 debuggable|OP *expr|OP *block
5125 Constructs, checks, and returns an op tree expressing a loop. This is
5126 only a loop in the control flow through the op tree; it does not have
5127 the heavyweight loop structure that allows exiting the loop by C<last>
5128 and suchlike. I<flags> gives the eight bits of C<op_flags> for the
5129 top-level op, except that some bits will be set automatically as required.
5130 I<expr> supplies the expression controlling loop iteration, and I<block>
5131 supplies the body of the loop; they are consumed by this function and
5132 become part of the constructed op tree. I<debuggable> is currently
5133 unused and should always be 1.
5139 Perl_newLOOPOP(pTHX_ I32 flags, I32 debuggable, OP *expr, OP *block)
5144 const bool once = block && block->op_flags & OPf_SPECIAL &&
5145 (block->op_type == OP_ENTERSUB || block->op_type == OP_NULL);
5147 PERL_UNUSED_ARG(debuggable);
5150 if (once && expr->op_type == OP_CONST && !SvTRUE(((SVOP*)expr)->op_sv))
5151 return block; /* do {} while 0 does once */
5152 if (expr->op_type == OP_READLINE
5153 || expr->op_type == OP_READDIR
5154 || expr->op_type == OP_GLOB
5155 || (expr->op_type == OP_NULL && expr->op_targ == OP_GLOB)) {
5156 expr = newUNOP(OP_DEFINED, 0,
5157 newASSIGNOP(0, newDEFSVOP(), 0, expr) );
5158 } else if (expr->op_flags & OPf_KIDS) {
5159 const OP * const k1 = ((UNOP*)expr)->op_first;
5160 const OP * const k2 = k1 ? k1->op_sibling : NULL;
5161 switch (expr->op_type) {
5163 if (k2 && (k2->op_type == OP_READLINE || k2->op_type == OP_READDIR)
5164 && (k2->op_flags & OPf_STACKED)
5165 && ((k1->op_flags & OPf_WANT) == OPf_WANT_SCALAR))
5166 expr = newUNOP(OP_DEFINED, 0, expr);
5170 if (k1 && (k1->op_type == OP_READDIR
5171 || k1->op_type == OP_GLOB
5172 || (k1->op_type == OP_NULL && k1->op_targ == OP_GLOB)
5173 || k1->op_type == OP_EACH))
5174 expr = newUNOP(OP_DEFINED, 0, expr);
5180 /* if block is null, the next append_elem() would put UNSTACK, a scalar
5181 * op, in listop. This is wrong. [perl #27024] */
5183 block = newOP(OP_NULL, 0);
5184 listop = append_elem(OP_LINESEQ, block, newOP(OP_UNSTACK, 0));
5185 o = new_logop(OP_AND, 0, &expr, &listop);
5188 ((LISTOP*)listop)->op_last->op_next = LINKLIST(o);
5190 if (once && o != listop)
5191 o->op_next = ((LOGOP*)cUNOPo->op_first)->op_other;
5194 o = newUNOP(OP_NULL, 0, o); /* or do {} while 1 loses outer block */
5196 o->op_flags |= flags;
5198 o->op_flags |= OPf_SPECIAL; /* suppress POPBLOCK curpm restoration*/
5203 =for apidoc Am|OP *|newWHILEOP|I32 flags|I32 debuggable|LOOP *loop|I32 whileline|OP *expr|OP *block|OP *cont|I32 has_my
5205 Constructs, checks, and returns an op tree expressing a C<while> loop.
5206 This is a heavyweight loop, with structure that allows exiting the loop
5207 by C<last> and suchlike.
5209 I<loop> is an optional preconstructed C<enterloop> op to use in the
5210 loop; if it is null then a suitable op will be constructed automatically.
5211 I<expr> supplies the loop's controlling expression. I<block> supplies the
5212 main body of the loop, and I<cont> optionally supplies a C<continue> block
5213 that operates as a second half of the body. All of these optree inputs
5214 are consumed by this function and become part of the constructed op tree.
5216 I<flags> gives the eight bits of C<op_flags> for the C<leaveloop>
5217 op and, shifted up eight bits, the eight bits of C<op_private> for
5218 the C<leaveloop> op, except that (in both cases) some bits will be set
5219 automatically. I<debuggable> is currently unused and should always be 1.
5220 I<whileline> is the line number that should be attributed to the loop's
5221 controlling expression. I<has_my> can be supplied as true to force the
5222 loop body to be enclosed in its own scope.
5228 Perl_newWHILEOP(pTHX_ I32 flags, I32 debuggable, LOOP *loop, I32
5229 whileline, OP *expr, OP *block, OP *cont, I32 has_my)
5238 PERL_UNUSED_ARG(debuggable);
5241 if (expr->op_type == OP_READLINE
5242 || expr->op_type == OP_READDIR
5243 || expr->op_type == OP_GLOB
5244 || (expr->op_type == OP_NULL && expr->op_targ == OP_GLOB)) {
5245 expr = newUNOP(OP_DEFINED, 0,
5246 newASSIGNOP(0, newDEFSVOP(), 0, expr) );
5247 } else if (expr->op_flags & OPf_KIDS) {
5248 const OP * const k1 = ((UNOP*)expr)->op_first;
5249 const OP * const k2 = (k1) ? k1->op_sibling : NULL;
5250 switch (expr->op_type) {
5252 if (k2 && (k2->op_type == OP_READLINE || k2->op_type == OP_READDIR)
5253 && (k2->op_flags & OPf_STACKED)
5254 && ((k1->op_flags & OPf_WANT) == OPf_WANT_SCALAR))
5255 expr = newUNOP(OP_DEFINED, 0, expr);
5259 if (k1 && (k1->op_type == OP_READDIR
5260 || k1->op_type == OP_GLOB
5261 || (k1->op_type == OP_NULL && k1->op_targ == OP_GLOB)
5262 || k1->op_type == OP_EACH))
5263 expr = newUNOP(OP_DEFINED, 0, expr);
5270 block = newOP(OP_NULL, 0);
5271 else if (cont || has_my) {
5272 block = scope(block);
5276 next = LINKLIST(cont);
5279 OP * const unstack = newOP(OP_UNSTACK, 0);
5282 cont = append_elem(OP_LINESEQ, cont, unstack);
5286 listop = append_list(OP_LINESEQ, (LISTOP*)block, (LISTOP*)cont);
5288 redo = LINKLIST(listop);
5291 PL_parser->copline = (line_t)whileline;
5293 o = new_logop(OP_AND, 0, &expr, &listop);
5294 if (o == expr && o->op_type == OP_CONST && !SvTRUE(cSVOPo->op_sv)) {
5295 op_free(expr); /* oops, it's a while (0) */
5297 return NULL; /* listop already freed by new_logop */
5300 ((LISTOP*)listop)->op_last->op_next =
5301 (o == listop ? redo : LINKLIST(o));
5307 NewOp(1101,loop,1,LOOP);
5308 loop->op_type = OP_ENTERLOOP;
5309 loop->op_ppaddr = PL_ppaddr[OP_ENTERLOOP];
5310 loop->op_private = 0;
5311 loop->op_next = (OP*)loop;
5314 o = newBINOP(OP_LEAVELOOP, 0, (OP*)loop, o);
5316 loop->op_redoop = redo;
5317 loop->op_lastop = o;
5318 o->op_private |= loopflags;
5321 loop->op_nextop = next;
5323 loop->op_nextop = o;
5325 o->op_flags |= flags;
5326 o->op_private |= (flags >> 8);
5331 =for apidoc Am|OP *|newFOROP|I32 flags|char *label|line_t forline|OP *sv|OP *expr|OP *block|OP *cont
5333 Constructs, checks, and returns an op tree expressing a C<foreach>
5334 loop (iteration through a list of values). This is a heavyweight loop,
5335 with structure that allows exiting the loop by C<last> and suchlike.
5337 I<sv> optionally supplies the variable that will be aliased to each
5338 item in turn; if null, it defaults to C<$_> (either lexical or global).
5339 I<expr> supplies the list of values to iterate over. I<block> supplies
5340 the main body of the loop, and I<cont> optionally supplies a C<continue>
5341 block that operates as a second half of the body. All of these optree
5342 inputs are consumed by this function and become part of the constructed
5345 I<flags> gives the eight bits of C<op_flags> for the C<leaveloop>
5346 op and, shifted up eight bits, the eight bits of C<op_private> for
5347 the C<leaveloop> op, except that (in both cases) some bits will be set
5348 automatically. I<forline> is the line number that should be attributed
5349 to the loop's list expression. If I<label> is non-null, it supplies
5350 the name of a label to attach to the state op at the start of the loop;
5351 this function takes ownership of the memory pointed at by I<label>,
5358 Perl_newFOROP(pTHX_ I32 flags, char *label, line_t forline, OP *sv, OP *expr, OP *block, OP *cont)
5363 PADOFFSET padoff = 0;
5368 PERL_ARGS_ASSERT_NEWFOROP;
5371 if (sv->op_type == OP_RV2SV) { /* symbol table variable */
5372 iterpflags = sv->op_private & OPpOUR_INTRO; /* for our $x () */
5373 sv->op_type = OP_RV2GV;
5374 sv->op_ppaddr = PL_ppaddr[OP_RV2GV];
5376 /* The op_type check is needed to prevent a possible segfault
5377 * if the loop variable is undeclared and 'strict vars' is in
5378 * effect. This is illegal but is nonetheless parsed, so we
5379 * may reach this point with an OP_CONST where we're expecting
5382 if (cUNOPx(sv)->op_first->op_type == OP_GV
5383 && cGVOPx_gv(cUNOPx(sv)->op_first) == PL_defgv)
5384 iterpflags |= OPpITER_DEF;
5386 else if (sv->op_type == OP_PADSV) { /* private variable */
5387 iterpflags = sv->op_private & OPpLVAL_INTRO; /* for my $x () */
5388 padoff = sv->op_targ;
5398 Perl_croak(aTHX_ "Can't use %s for loop variable", PL_op_desc[sv->op_type]);
5400 SV *const namesv = PAD_COMPNAME_SV(padoff);
5402 const char *const name = SvPV_const(namesv, len);
5404 if (len == 2 && name[0] == '$' && name[1] == '_')
5405 iterpflags |= OPpITER_DEF;
5409 const PADOFFSET offset = Perl_pad_findmy(aTHX_ STR_WITH_LEN("$_"), 0);
5410 if (offset == NOT_IN_PAD || PAD_COMPNAME_FLAGS_isOUR(offset)) {
5411 sv = newGVOP(OP_GV, 0, PL_defgv);
5416 iterpflags |= OPpITER_DEF;
5418 if (expr->op_type == OP_RV2AV || expr->op_type == OP_PADAV) {
5419 expr = mod(force_list(scalar(ref(expr, OP_ITER))), OP_GREPSTART);
5420 iterflags |= OPf_STACKED;
5422 else if (expr->op_type == OP_NULL &&
5423 (expr->op_flags & OPf_KIDS) &&
5424 ((BINOP*)expr)->op_first->op_type == OP_FLOP)
5426 /* Basically turn for($x..$y) into the same as for($x,$y), but we
5427 * set the STACKED flag to indicate that these values are to be
5428 * treated as min/max values by 'pp_iterinit'.
5430 const UNOP* const flip = (UNOP*)((UNOP*)((BINOP*)expr)->op_first)->op_first;
5431 LOGOP* const range = (LOGOP*) flip->op_first;
5432 OP* const left = range->op_first;
5433 OP* const right = left->op_sibling;
5436 range->op_flags &= ~OPf_KIDS;
5437 range->op_first = NULL;
5439 listop = (LISTOP*)newLISTOP(OP_LIST, 0, left, right);
5440 listop->op_first->op_next = range->op_next;
5441 left->op_next = range->op_other;
5442 right->op_next = (OP*)listop;
5443 listop->op_next = listop->op_first;
5446 op_getmad(expr,(OP*)listop,'O');
5450 expr = (OP*)(listop);
5452 iterflags |= OPf_STACKED;
5455 expr = mod(force_list(expr), OP_GREPSTART);
5458 loop = (LOOP*)list(convert(OP_ENTERITER, iterflags,
5459 append_elem(OP_LIST, expr, scalar(sv))));
5460 assert(!loop->op_next);
5461 /* for my $x () sets OPpLVAL_INTRO;
5462 * for our $x () sets OPpOUR_INTRO */
5463 loop->op_private = (U8)iterpflags;
5464 #ifdef PL_OP_SLAB_ALLOC
5467 NewOp(1234,tmp,1,LOOP);
5468 Copy(loop,tmp,1,LISTOP);
5469 S_op_destroy(aTHX_ (OP*)loop);
5473 loop = (LOOP*)PerlMemShared_realloc(loop, sizeof(LOOP));
5475 loop->op_targ = padoff;
5476 wop = newWHILEOP(flags, 1, loop, forline, newOP(OP_ITER, 0), block, cont, 0);
5478 op_getmad(madsv, (OP*)loop, 'v');
5479 PL_parser->copline = forline;
5480 return newSTATEOP(0, label, wop);
5484 =for apidoc Am|OP *|newLOOPEX|I32 type|OP *label
5486 Constructs, checks, and returns a loop-exiting op (such as C<goto>
5487 or C<last>). I<type> is the opcode. I<label> supplies the parameter
5488 determining the target of the op; it is consumed by this function and
5489 become part of the constructed op tree.
5495 Perl_newLOOPEX(pTHX_ I32 type, OP *label)
5500 PERL_ARGS_ASSERT_NEWLOOPEX;
5502 assert((PL_opargs[type] & OA_CLASS_MASK) == OA_LOOPEXOP);
5504 if (type != OP_GOTO || label->op_type == OP_CONST) {
5505 /* "last()" means "last" */
5506 if (label->op_type == OP_STUB && (label->op_flags & OPf_PARENS))
5507 o = newOP(type, OPf_SPECIAL);
5509 o = newPVOP(type, 0, savesharedpv(label->op_type == OP_CONST
5510 ? SvPV_nolen_const(((SVOP*)label)->op_sv)
5514 op_getmad(label,o,'L');
5520 /* Check whether it's going to be a goto &function */
5521 if (label->op_type == OP_ENTERSUB
5522 && !(label->op_flags & OPf_STACKED))
5523 label = newUNOP(OP_REFGEN, 0, mod(label, OP_REFGEN));
5524 o = newUNOP(type, OPf_STACKED, label);
5526 PL_hints |= HINT_BLOCK_SCOPE;
5530 /* if the condition is a literal array or hash
5531 (or @{ ... } etc), make a reference to it.
5534 S_ref_array_or_hash(pTHX_ OP *cond)
5537 && (cond->op_type == OP_RV2AV
5538 || cond->op_type == OP_PADAV
5539 || cond->op_type == OP_RV2HV
5540 || cond->op_type == OP_PADHV))
5542 return newUNOP(OP_REFGEN,
5543 0, mod(cond, OP_REFGEN));
5549 /* These construct the optree fragments representing given()
5552 entergiven and enterwhen are LOGOPs; the op_other pointer
5553 points up to the associated leave op. We need this so we
5554 can put it in the context and make break/continue work.
5555 (Also, of course, pp_enterwhen will jump straight to
5556 op_other if the match fails.)
5560 S_newGIVWHENOP(pTHX_ OP *cond, OP *block,
5561 I32 enter_opcode, I32 leave_opcode,
5562 PADOFFSET entertarg)
5568 PERL_ARGS_ASSERT_NEWGIVWHENOP;
5570 NewOp(1101, enterop, 1, LOGOP);
5571 enterop->op_type = (Optype)enter_opcode;
5572 enterop->op_ppaddr = PL_ppaddr[enter_opcode];
5573 enterop->op_flags = (U8) OPf_KIDS;
5574 enterop->op_targ = ((entertarg == NOT_IN_PAD) ? 0 : entertarg);
5575 enterop->op_private = 0;
5577 o = newUNOP(leave_opcode, 0, (OP *) enterop);
5580 enterop->op_first = scalar(cond);
5581 cond->op_sibling = block;
5583 o->op_next = LINKLIST(cond);
5584 cond->op_next = (OP *) enterop;
5587 /* This is a default {} block */
5588 enterop->op_first = block;
5589 enterop->op_flags |= OPf_SPECIAL;
5591 o->op_next = (OP *) enterop;
5594 CHECKOP(enter_opcode, enterop); /* Currently does nothing, since
5595 entergiven and enterwhen both
5598 enterop->op_next = LINKLIST(block);
5599 block->op_next = enterop->op_other = o;
5604 /* Does this look like a boolean operation? For these purposes
5605 a boolean operation is:
5606 - a subroutine call [*]
5607 - a logical connective
5608 - a comparison operator
5609 - a filetest operator, with the exception of -s -M -A -C
5610 - defined(), exists() or eof()
5611 - /$re/ or $foo =~ /$re/
5613 [*] possibly surprising
5616 S_looks_like_bool(pTHX_ const OP *o)
5620 PERL_ARGS_ASSERT_LOOKS_LIKE_BOOL;
5622 switch(o->op_type) {
5625 return looks_like_bool(cLOGOPo->op_first);
5629 looks_like_bool(cLOGOPo->op_first)
5630 && looks_like_bool(cLOGOPo->op_first->op_sibling));
5635 o->op_flags & OPf_KIDS
5636 && looks_like_bool(cUNOPo->op_first));
5640 case OP_NOT: case OP_XOR:
5642 case OP_EQ: case OP_NE: case OP_LT:
5643 case OP_GT: case OP_LE: case OP_GE:
5645 case OP_I_EQ: case OP_I_NE: case OP_I_LT:
5646 case OP_I_GT: case OP_I_LE: case OP_I_GE:
5648 case OP_SEQ: case OP_SNE: case OP_SLT:
5649 case OP_SGT: case OP_SLE: case OP_SGE:
5653 case OP_FTRREAD: case OP_FTRWRITE: case OP_FTREXEC:
5654 case OP_FTEREAD: case OP_FTEWRITE: case OP_FTEEXEC:
5655 case OP_FTIS: case OP_FTEOWNED: case OP_FTROWNED:
5656 case OP_FTZERO: case OP_FTSOCK: case OP_FTCHR:
5657 case OP_FTBLK: case OP_FTFILE: case OP_FTDIR:
5658 case OP_FTPIPE: case OP_FTLINK: case OP_FTSUID:
5659 case OP_FTSGID: case OP_FTSVTX: case OP_FTTTY:
5660 case OP_FTTEXT: case OP_FTBINARY:
5662 case OP_DEFINED: case OP_EXISTS:
5663 case OP_MATCH: case OP_EOF:
5670 /* Detect comparisons that have been optimized away */
5671 if (cSVOPo->op_sv == &PL_sv_yes
5672 || cSVOPo->op_sv == &PL_sv_no)
5685 =for apidoc Am|OP *|newGIVENOP|OP *cond|OP *block|PADOFFSET defsv_off
5687 Constructs, checks, and returns an op tree expressing a C<given> block.
5688 I<cond> supplies the expression that will be locally assigned to a lexical
5689 variable, and I<block> supplies the body of the C<given> construct; they
5690 are consumed by this function and become part of the constructed op tree.
5691 I<defsv_off> is the pad offset of the scalar lexical variable that will
5698 Perl_newGIVENOP(pTHX_ OP *cond, OP *block, PADOFFSET defsv_off)
5701 PERL_ARGS_ASSERT_NEWGIVENOP;
5702 return newGIVWHENOP(
5703 ref_array_or_hash(cond),
5705 OP_ENTERGIVEN, OP_LEAVEGIVEN,
5710 =for apidoc Am|OP *|newWHENOP|OP *cond|OP *block
5712 Constructs, checks, and returns an op tree expressing a C<when> block.
5713 I<cond> supplies the test expression, and I<block> supplies the block
5714 that will be executed if the test evaluates to true; they are consumed
5715 by this function and become part of the constructed op tree. I<cond>
5716 will be interpreted DWIMically, often as a comparison against C<$_>,
5717 and may be null to generate a C<default> block.
5723 Perl_newWHENOP(pTHX_ OP *cond, OP *block)
5725 const bool cond_llb = (!cond || looks_like_bool(cond));
5728 PERL_ARGS_ASSERT_NEWWHENOP;
5733 cond_op = newBINOP(OP_SMARTMATCH, OPf_SPECIAL,
5735 scalar(ref_array_or_hash(cond)));
5738 return newGIVWHENOP(
5740 append_elem(block->op_type, block, newOP(OP_BREAK, OPf_SPECIAL)),
5741 OP_ENTERWHEN, OP_LEAVEWHEN, 0);
5745 =head1 Embedding Functions
5747 =for apidoc cv_undef
5749 Clear out all the active components of a CV. This can happen either
5750 by an explicit C<undef &foo>, or by the reference count going to zero.
5751 In the former case, we keep the CvOUTSIDE pointer, so that any anonymous
5752 children can still follow the full lexical scope chain.
5758 Perl_cv_undef(pTHX_ CV *cv)
5762 PERL_ARGS_ASSERT_CV_UNDEF;
5764 DEBUG_X(PerlIO_printf(Perl_debug_log,
5765 "CV undef: cv=0x%"UVxf" comppad=0x%"UVxf"\n",
5766 PTR2UV(cv), PTR2UV(PL_comppad))
5770 if (CvFILE(cv) && !CvISXSUB(cv)) {
5771 /* for XSUBs CvFILE point directly to static memory; __FILE__ */
5772 Safefree(CvFILE(cv));
5777 if (!CvISXSUB(cv) && CvROOT(cv)) {
5778 if (SvTYPE(cv) == SVt_PVCV && CvDEPTH(cv))
5779 Perl_croak(aTHX_ "Can't undef active subroutine");
5782 PAD_SAVE_SETNULLPAD();
5784 op_free(CvROOT(cv));
5789 SvPOK_off(MUTABLE_SV(cv)); /* forget prototype */
5794 /* remove CvOUTSIDE unless this is an undef rather than a free */
5795 if (!SvREFCNT(cv) && CvOUTSIDE(cv)) {
5796 if (!CvWEAKOUTSIDE(cv))
5797 SvREFCNT_dec(CvOUTSIDE(cv));
5798 CvOUTSIDE(cv) = NULL;
5801 SvREFCNT_dec(MUTABLE_SV(CvXSUBANY(cv).any_ptr));
5804 if (CvISXSUB(cv) && CvXSUB(cv)) {
5807 /* delete all flags except WEAKOUTSIDE and CVGV_RC, which indicate the
5808 * ref status of CvOUTSIDE and CvGV */
5809 CvFLAGS(cv) &= (CVf_WEAKOUTSIDE|CVf_CVGV_RC);
5813 Perl_cv_ckproto_len(pTHX_ const CV *cv, const GV *gv, const char *p,
5816 PERL_ARGS_ASSERT_CV_CKPROTO_LEN;
5818 /* Can't just use a strcmp on the prototype, as CONSTSUBs "cheat" by
5819 relying on SvCUR, and doubling up the buffer to hold CvFILE(). */
5820 if (((!p != !SvPOK(cv)) /* One has prototype, one has not. */
5821 || (p && (len != SvCUR(cv) /* Not the same length. */
5822 || memNE(p, SvPVX_const(cv), len))))
5823 && ckWARN_d(WARN_PROTOTYPE)) {
5824 SV* const msg = sv_newmortal();
5828 gv_efullname3(name = sv_newmortal(), gv, NULL);
5829 sv_setpvs(msg, "Prototype mismatch:");
5831 Perl_sv_catpvf(aTHX_ msg, " sub %"SVf, SVfARG(name));
5833 Perl_sv_catpvf(aTHX_ msg, " (%"SVf")", SVfARG(cv));
5835 sv_catpvs(msg, ": none");
5836 sv_catpvs(msg, " vs ");
5838 Perl_sv_catpvf(aTHX_ msg, "(%.*s)", (int) len, p);
5840 sv_catpvs(msg, "none");
5841 Perl_warner(aTHX_ packWARN(WARN_PROTOTYPE), "%"SVf, SVfARG(msg));
5845 static void const_sv_xsub(pTHX_ CV* cv);
5849 =head1 Optree Manipulation Functions
5851 =for apidoc cv_const_sv
5853 If C<cv> is a constant sub eligible for inlining. returns the constant
5854 value returned by the sub. Otherwise, returns NULL.
5856 Constant subs can be created with C<newCONSTSUB> or as described in
5857 L<perlsub/"Constant Functions">.
5862 Perl_cv_const_sv(pTHX_ const CV *const cv)
5864 PERL_UNUSED_CONTEXT;
5867 if (!(SvTYPE(cv) == SVt_PVCV || SvTYPE(cv) == SVt_PVFM))
5869 return CvCONST(cv) ? MUTABLE_SV(CvXSUBANY(cv).any_ptr) : NULL;
5872 /* op_const_sv: examine an optree to determine whether it's in-lineable.
5873 * Can be called in 3 ways:
5876 * look for a single OP_CONST with attached value: return the value
5878 * cv && CvCLONE(cv) && !CvCONST(cv)
5880 * examine the clone prototype, and if contains only a single
5881 * OP_CONST referencing a pad const, or a single PADSV referencing
5882 * an outer lexical, return a non-zero value to indicate the CV is
5883 * a candidate for "constizing" at clone time
5887 * We have just cloned an anon prototype that was marked as a const
5888 * candidiate. Try to grab the current value, and in the case of
5889 * PADSV, ignore it if it has multiple references. Return the value.
5893 Perl_op_const_sv(pTHX_ const OP *o, CV *cv)
5904 if (o->op_type == OP_LINESEQ && cLISTOPo->op_first)
5905 o = cLISTOPo->op_first->op_sibling;
5907 for (; o; o = o->op_next) {
5908 const OPCODE type = o->op_type;
5910 if (sv && o->op_next == o)
5912 if (o->op_next != o) {
5913 if (type == OP_NEXTSTATE || type == OP_NULL || type == OP_PUSHMARK)
5915 if (type == OP_DBSTATE)
5918 if (type == OP_LEAVESUB || type == OP_RETURN)
5922 if (type == OP_CONST && cSVOPo->op_sv)
5924 else if (cv && type == OP_CONST) {
5925 sv = PAD_BASE_SV(CvPADLIST(cv), o->op_targ);
5929 else if (cv && type == OP_PADSV) {
5930 if (CvCONST(cv)) { /* newly cloned anon */
5931 sv = PAD_BASE_SV(CvPADLIST(cv), o->op_targ);
5932 /* the candidate should have 1 ref from this pad and 1 ref
5933 * from the parent */
5934 if (!sv || SvREFCNT(sv) != 2)
5941 if (PAD_COMPNAME_FLAGS(o->op_targ) & SVf_FAKE)
5942 sv = &PL_sv_undef; /* an arbitrary non-null value */
5957 Perl_newMYSUB(pTHX_ I32 floor, OP *o, OP *proto, OP *attrs, OP *block)
5960 /* This would be the return value, but the return cannot be reached. */
5961 OP* pegop = newOP(OP_NULL, 0);
5964 PERL_UNUSED_ARG(floor);
5974 Perl_croak(aTHX_ "\"my sub\" not yet implemented");
5976 NORETURN_FUNCTION_END;
5981 Perl_newSUB(pTHX_ I32 floor, OP *o, OP *proto, OP *block)
5983 return Perl_newATTRSUB(aTHX_ floor, o, proto, NULL, block);
5987 Perl_newATTRSUB(pTHX_ I32 floor, OP *o, OP *proto, OP *attrs, OP *block)
5992 STRLEN ps_len = 0; /* init it to avoid false uninit warning from icc */
5993 register CV *cv = NULL;
5995 /* If the subroutine has no body, no attributes, and no builtin attributes
5996 then it's just a sub declaration, and we may be able to get away with
5997 storing with a placeholder scalar in the symbol table, rather than a
5998 full GV and CV. If anything is present then it will take a full CV to
6000 const I32 gv_fetch_flags
6001 = (block || attrs || (CvFLAGS(PL_compcv) & CVf_BUILTIN_ATTRS)
6003 ? GV_ADDMULTI : GV_ADDMULTI | GV_NOINIT;
6004 const char * const name = o ? SvPV_nolen_const(cSVOPo->op_sv) : NULL;
6008 assert(proto->op_type == OP_CONST);
6009 ps = SvPV_const(((SVOP*)proto)->op_sv, ps_len);
6015 gv = gv_fetchsv(cSVOPo->op_sv, gv_fetch_flags, SVt_PVCV);
6017 } else if (PERLDB_NAMEANON && CopLINE(PL_curcop)) {
6018 SV * const sv = sv_newmortal();
6019 Perl_sv_setpvf(aTHX_ sv, "%s[%s:%"IVdf"]",
6020 PL_curstash ? "__ANON__" : "__ANON__::__ANON__",
6021 CopFILE(PL_curcop), (IV)CopLINE(PL_curcop));
6022 gv = gv_fetchsv(sv, gv_fetch_flags, SVt_PVCV);
6024 } else if (PL_curstash) {
6025 gv = gv_fetchpvs("__ANON__", gv_fetch_flags, SVt_PVCV);
6028 gv = gv_fetchpvs("__ANON__::__ANON__", gv_fetch_flags, SVt_PVCV);
6032 if (!PL_madskills) {
6041 if (SvTYPE(gv) != SVt_PVGV) { /* Maybe prototype now, and had at
6042 maximum a prototype before. */
6043 if (SvTYPE(gv) > SVt_NULL) {
6044 if (!SvPOK((const SV *)gv)
6045 && !(SvIOK((const SV *)gv) && SvIVX((const SV *)gv) == -1))
6047 Perl_ck_warner_d(aTHX_ packWARN(WARN_PROTOTYPE), "Runaway prototype");
6049 cv_ckproto_len((const CV *)gv, NULL, ps, ps_len);
6052 sv_setpvn(MUTABLE_SV(gv), ps, ps_len);
6054 sv_setiv(MUTABLE_SV(gv), -1);
6056 SvREFCNT_dec(PL_compcv);
6057 cv = PL_compcv = NULL;
6061 cv = (!name || GvCVGEN(gv)) ? NULL : GvCV(gv);
6063 if (!block || !ps || *ps || attrs
6064 || (CvFLAGS(PL_compcv) & CVf_BUILTIN_ATTRS)
6066 || block->op_type == OP_NULL
6071 const_sv = op_const_sv(block, NULL);
6074 const bool exists = CvROOT(cv) || CvXSUB(cv);
6076 /* if the subroutine doesn't exist and wasn't pre-declared
6077 * with a prototype, assume it will be AUTOLOADed,
6078 * skipping the prototype check
6080 if (exists || SvPOK(cv))
6081 cv_ckproto_len(cv, gv, ps, ps_len);
6082 /* already defined (or promised)? */
6083 if (exists || GvASSUMECV(gv)) {
6086 || block->op_type == OP_NULL
6089 if (CvFLAGS(PL_compcv)) {
6090 /* might have had built-in attrs applied */
6091 if (CvLVALUE(PL_compcv) && ! CvLVALUE(cv) && ckWARN(WARN_MISC))
6092 Perl_warner(aTHX_ packWARN(WARN_MISC), "lvalue attribute ignored after the subroutine has been defined");
6093 CvFLAGS(cv) |= (CvFLAGS(PL_compcv) & CVf_BUILTIN_ATTRS & ~CVf_LVALUE);
6095 /* just a "sub foo;" when &foo is already defined */
6096 SAVEFREESV(PL_compcv);
6101 && block->op_type != OP_NULL
6104 if (ckWARN(WARN_REDEFINE)
6106 && (!const_sv || sv_cmp(cv_const_sv(cv), const_sv))))
6108 const line_t oldline = CopLINE(PL_curcop);
6109 if (PL_parser && PL_parser->copline != NOLINE)
6110 CopLINE_set(PL_curcop, PL_parser->copline);
6111 Perl_warner(aTHX_ packWARN(WARN_REDEFINE),
6112 CvCONST(cv) ? "Constant subroutine %s redefined"
6113 : "Subroutine %s redefined", name);
6114 CopLINE_set(PL_curcop, oldline);
6117 if (!PL_minus_c) /* keep old one around for madskills */
6120 /* (PL_madskills unset in used file.) */
6128 SvREFCNT_inc_simple_void_NN(const_sv);
6130 assert(!CvROOT(cv) && !CvCONST(cv));
6131 sv_setpvs(MUTABLE_SV(cv), ""); /* prototype is "" */
6132 CvXSUBANY(cv).any_ptr = const_sv;
6133 CvXSUB(cv) = const_sv_xsub;
6139 cv = newCONSTSUB(NULL, name, const_sv);
6141 mro_method_changed_in( /* sub Foo::Bar () { 123 } */
6142 (CvGV(cv) && GvSTASH(CvGV(cv)))
6151 SvREFCNT_dec(PL_compcv);
6155 if (cv) { /* must reuse cv if autoloaded */
6156 /* transfer PL_compcv to cv */
6159 && block->op_type != OP_NULL
6162 cv_flags_t existing_builtin_attrs = CvFLAGS(cv) & CVf_BUILTIN_ATTRS;
6164 CvFLAGS(cv) = CvFLAGS(PL_compcv) | existing_builtin_attrs;
6165 if (!CvWEAKOUTSIDE(cv))
6166 SvREFCNT_dec(CvOUTSIDE(cv));
6167 CvOUTSIDE(cv) = CvOUTSIDE(PL_compcv);
6168 CvOUTSIDE_SEQ(cv) = CvOUTSIDE_SEQ(PL_compcv);
6169 CvOUTSIDE(PL_compcv) = 0;
6170 CvPADLIST(cv) = CvPADLIST(PL_compcv);
6171 CvPADLIST(PL_compcv) = 0;
6172 /* inner references to PL_compcv must be fixed up ... */
6173 pad_fixup_inner_anons(CvPADLIST(cv), PL_compcv, cv);
6174 if (PERLDB_INTER)/* Advice debugger on the new sub. */
6175 ++PL_sub_generation;
6177 sv_del_backref(MUTABLE_SV(CvSTASH(cv)), MUTABLE_SV(cv));
6180 /* Might have had built-in attributes applied -- propagate them. */
6181 CvFLAGS(cv) |= (CvFLAGS(PL_compcv) & CVf_BUILTIN_ATTRS);
6183 /* ... before we throw it away */
6184 SvREFCNT_dec(PL_compcv);
6192 if (strEQ(name, "import")) {
6193 PL_formfeed = MUTABLE_SV(cv);
6194 /* diag_listed_as: SKIPME */
6195 Perl_warner(aTHX_ packWARN(WARN_VOID), "0x%"UVxf"\n", PTR2UV(cv));
6199 mro_method_changed_in(GvSTASH(gv)); /* sub Foo::bar { (shift)+1 } */
6204 CvFILE_set_from_cop(cv, PL_curcop);
6205 CvSTASH(cv) = PL_curstash;
6207 Perl_sv_add_backref(aTHX_ MUTABLE_SV(PL_curstash), MUTABLE_SV(cv));
6210 /* Need to do a C<use attributes $stash_of_cv,\&cv,@attrs>. */
6211 HV *stash = name && GvSTASH(CvGV(cv)) ? GvSTASH(CvGV(cv)) : PL_curstash;
6212 apply_attrs(stash, MUTABLE_SV(cv), attrs, FALSE);
6216 sv_setpvn(MUTABLE_SV(cv), ps, ps_len);
6218 if (PL_parser && PL_parser->error_count) {
6222 const char *s = strrchr(name, ':');
6224 if (strEQ(s, "BEGIN")) {
6225 const char not_safe[] =
6226 "BEGIN not safe after errors--compilation aborted";
6227 if (PL_in_eval & EVAL_KEEPERR)
6228 Perl_croak(aTHX_ not_safe);
6230 /* force display of errors found but not reported */
6231 sv_catpv(ERRSV, not_safe);
6232 Perl_croak(aTHX_ "%"SVf, SVfARG(ERRSV));
6241 /* If we assign an optree to a PVCV, then we've defined a subroutine that
6242 the debugger could be able to set a breakpoint in, so signal to
6243 pp_entereval that it should not throw away any saved lines at scope
6246 PL_breakable_sub_gen++;
6248 CvROOT(cv) = newUNOP(OP_LEAVESUBLV, 0,
6249 mod(scalarseq(block), OP_LEAVESUBLV));
6250 block->op_attached = 1;
6253 /* This makes sub {}; work as expected. */
6254 if (block->op_type == OP_STUB) {
6255 OP* const newblock = newSTATEOP(0, NULL, 0);
6257 op_getmad(block,newblock,'B');
6264 block->op_attached = 1;
6265 CvROOT(cv) = newUNOP(OP_LEAVESUB, 0, scalarseq(block));
6267 CvROOT(cv)->op_private |= OPpREFCOUNTED;
6268 OpREFCNT_set(CvROOT(cv), 1);
6269 CvSTART(cv) = LINKLIST(CvROOT(cv));
6270 CvROOT(cv)->op_next = 0;
6271 CALL_PEEP(CvSTART(cv));
6273 /* now that optimizer has done its work, adjust pad values */
6275 pad_tidy(CvCLONE(cv) ? padtidy_SUBCLONE : padtidy_SUB);
6278 assert(!CvCONST(cv));
6279 if (ps && !*ps && op_const_sv(block, cv))
6284 if (PERLDB_SUBLINE && PL_curstash != PL_debstash) {
6285 SV * const tmpstr = sv_newmortal();
6286 GV * const db_postponed = gv_fetchpvs("DB::postponed",
6287 GV_ADDMULTI, SVt_PVHV);
6289 SV * const sv = Perl_newSVpvf(aTHX_ "%s:%ld-%ld",
6292 (long)CopLINE(PL_curcop));
6293 gv_efullname3(tmpstr, gv, NULL);
6294 (void)hv_store(GvHV(PL_DBsub), SvPVX_const(tmpstr),
6295 SvCUR(tmpstr), sv, 0);
6296 hv = GvHVn(db_postponed);
6297 if (HvTOTALKEYS(hv) > 0 && hv_exists(hv, SvPVX_const(tmpstr), SvCUR(tmpstr))) {
6298 CV * const pcv = GvCV(db_postponed);
6304 call_sv(MUTABLE_SV(pcv), G_DISCARD);
6309 if (name && ! (PL_parser && PL_parser->error_count))
6310 process_special_blocks(name, gv, cv);
6315 PL_parser->copline = NOLINE;
6321 S_process_special_blocks(pTHX_ const char *const fullname, GV *const gv,
6324 const char *const colon = strrchr(fullname,':');
6325 const char *const name = colon ? colon + 1 : fullname;
6327 PERL_ARGS_ASSERT_PROCESS_SPECIAL_BLOCKS;
6330 if (strEQ(name, "BEGIN")) {
6331 const I32 oldscope = PL_scopestack_ix;
6333 SAVECOPFILE(&PL_compiling);
6334 SAVECOPLINE(&PL_compiling);
6336 DEBUG_x( dump_sub(gv) );
6337 Perl_av_create_and_push(aTHX_ &PL_beginav, MUTABLE_SV(cv));
6338 GvCV(gv) = 0; /* cv has been hijacked */
6339 call_list(oldscope, PL_beginav);
6341 PL_curcop = &PL_compiling;
6342 CopHINTS_set(&PL_compiling, PL_hints);
6349 if strEQ(name, "END") {
6350 DEBUG_x( dump_sub(gv) );
6351 Perl_av_create_and_unshift_one(aTHX_ &PL_endav, MUTABLE_SV(cv));
6354 } else if (*name == 'U') {
6355 if (strEQ(name, "UNITCHECK")) {
6356 /* It's never too late to run a unitcheck block */
6357 Perl_av_create_and_unshift_one(aTHX_ &PL_unitcheckav, MUTABLE_SV(cv));
6361 } else if (*name == 'C') {
6362 if (strEQ(name, "CHECK")) {
6364 Perl_ck_warner(aTHX_ packWARN(WARN_VOID),
6365 "Too late to run CHECK block");
6366 Perl_av_create_and_unshift_one(aTHX_ &PL_checkav, MUTABLE_SV(cv));
6370 } else if (*name == 'I') {
6371 if (strEQ(name, "INIT")) {
6373 Perl_ck_warner(aTHX_ packWARN(WARN_VOID),
6374 "Too late to run INIT block");
6375 Perl_av_create_and_push(aTHX_ &PL_initav, MUTABLE_SV(cv));
6381 DEBUG_x( dump_sub(gv) );
6382 GvCV(gv) = 0; /* cv has been hijacked */
6387 =for apidoc newCONSTSUB
6389 Creates a constant sub equivalent to Perl C<sub FOO () { 123 }> which is
6390 eligible for inlining at compile-time.
6392 Passing NULL for SV creates a constant sub equivalent to C<sub BAR () {}>,
6393 which won't be called if used as a destructor, but will suppress the overhead
6394 of a call to C<AUTOLOAD>. (This form, however, isn't eligible for inlining at
6401 Perl_newCONSTSUB(pTHX_ HV *stash, const char *name, SV *sv)
6406 const char *const file = CopFILE(PL_curcop);
6408 SV *const temp_sv = CopFILESV(PL_curcop);
6409 const char *const file = temp_sv ? SvPV_nolen_const(temp_sv) : NULL;
6414 if (IN_PERL_RUNTIME) {
6415 /* at runtime, it's not safe to manipulate PL_curcop: it may be
6416 * an op shared between threads. Use a non-shared COP for our
6418 SAVEVPTR(PL_curcop);
6419 PL_curcop = &PL_compiling;
6421 SAVECOPLINE(PL_curcop);
6422 CopLINE_set(PL_curcop, PL_parser ? PL_parser->copline : NOLINE);
6425 PL_hints &= ~HINT_BLOCK_SCOPE;
6428 SAVESPTR(PL_curstash);
6429 SAVECOPSTASH(PL_curcop);
6430 PL_curstash = stash;
6431 CopSTASH_set(PL_curcop,stash);
6434 /* file becomes the CvFILE. For an XS, it's supposed to be static storage,
6435 and so doesn't get free()d. (It's expected to be from the C pre-
6436 processor __FILE__ directive). But we need a dynamically allocated one,
6437 and we need it to get freed. */
6438 cv = newXS_flags(name, const_sv_xsub, file ? file : "", "",
6439 XS_DYNAMIC_FILENAME);
6440 CvXSUBANY(cv).any_ptr = sv;
6445 CopSTASH_free(PL_curcop);
6453 Perl_newXS_flags(pTHX_ const char *name, XSUBADDR_t subaddr,
6454 const char *const filename, const char *const proto,
6457 CV *cv = newXS(name, subaddr, filename);
6459 PERL_ARGS_ASSERT_NEWXS_FLAGS;
6461 if (flags & XS_DYNAMIC_FILENAME) {
6462 /* We need to "make arrangements" (ie cheat) to ensure that the
6463 filename lasts as long as the PVCV we just created, but also doesn't
6465 STRLEN filename_len = strlen(filename);
6466 STRLEN proto_and_file_len = filename_len;
6467 char *proto_and_file;
6471 proto_len = strlen(proto);
6472 proto_and_file_len += proto_len;
6474 Newx(proto_and_file, proto_and_file_len + 1, char);
6475 Copy(proto, proto_and_file, proto_len, char);
6476 Copy(filename, proto_and_file + proto_len, filename_len + 1, char);
6479 proto_and_file = savepvn(filename, filename_len);
6482 /* This gets free()d. :-) */
6483 sv_usepvn_flags(MUTABLE_SV(cv), proto_and_file, proto_and_file_len,
6484 SV_HAS_TRAILING_NUL);
6486 /* This gives us the correct prototype, rather than one with the
6487 file name appended. */
6488 SvCUR_set(cv, proto_len);
6492 CvFILE(cv) = proto_and_file + proto_len;
6494 sv_setpv(MUTABLE_SV(cv), proto);
6500 =for apidoc U||newXS
6502 Used by C<xsubpp> to hook up XSUBs as Perl subs. I<filename> needs to be
6503 static storage, as it is used directly as CvFILE(), without a copy being made.
6509 Perl_newXS(pTHX_ const char *name, XSUBADDR_t subaddr, const char *filename)
6512 GV * const gv = gv_fetchpv(name ? name :
6513 (PL_curstash ? "__ANON__" : "__ANON__::__ANON__"),
6514 GV_ADDMULTI, SVt_PVCV);
6517 PERL_ARGS_ASSERT_NEWXS;
6520 Perl_croak(aTHX_ "panic: no address for '%s' in '%s'", name, filename);
6522 if ((cv = (name ? GvCV(gv) : NULL))) {
6524 /* just a cached method */
6528 else if (CvROOT(cv) || CvXSUB(cv) || GvASSUMECV(gv)) {
6529 /* already defined (or promised) */
6530 /* XXX It's possible for this HvNAME_get to return null, and get passed into strEQ */
6531 if (ckWARN(WARN_REDEFINE)) {
6532 GV * const gvcv = CvGV(cv);
6534 HV * const stash = GvSTASH(gvcv);
6536 const char *redefined_name = HvNAME_get(stash);
6537 if ( strEQ(redefined_name,"autouse") ) {
6538 const line_t oldline = CopLINE(PL_curcop);
6539 if (PL_parser && PL_parser->copline != NOLINE)
6540 CopLINE_set(PL_curcop, PL_parser->copline);
6541 Perl_warner(aTHX_ packWARN(WARN_REDEFINE),
6542 CvCONST(cv) ? "Constant subroutine %s redefined"
6543 : "Subroutine %s redefined"
6545 CopLINE_set(PL_curcop, oldline);
6555 if (cv) /* must reuse cv if autoloaded */
6558 cv = MUTABLE_CV(newSV_type(SVt_PVCV));
6562 mro_method_changed_in(GvSTASH(gv)); /* newXS */
6568 (void)gv_fetchfile(filename);
6569 CvFILE(cv) = (char *)filename; /* NOTE: not copied, as it is expected to be
6570 an external constant string */
6572 CvXSUB(cv) = subaddr;
6575 process_special_blocks(name, gv, cv);
6585 Perl_newFORM(pTHX_ I32 floor, OP *o, OP *block)
6590 OP* pegop = newOP(OP_NULL, 0);
6594 ? gv_fetchsv(cSVOPo->op_sv, GV_ADD, SVt_PVFM)
6595 : gv_fetchpvs("STDOUT", GV_ADD|GV_NOTQUAL, SVt_PVFM);
6598 if ((cv = GvFORM(gv))) {
6599 if (ckWARN(WARN_REDEFINE)) {
6600 const line_t oldline = CopLINE(PL_curcop);
6601 if (PL_parser && PL_parser->copline != NOLINE)
6602 CopLINE_set(PL_curcop, PL_parser->copline);
6604 Perl_warner(aTHX_ packWARN(WARN_REDEFINE),
6605 "Format %"SVf" redefined", SVfARG(cSVOPo->op_sv));
6607 Perl_warner(aTHX_ packWARN(WARN_REDEFINE),
6608 "Format STDOUT redefined");
6610 CopLINE_set(PL_curcop, oldline);
6617 CvFILE_set_from_cop(cv, PL_curcop);
6620 pad_tidy(padtidy_FORMAT);
6621 CvROOT(cv) = newUNOP(OP_LEAVEWRITE, 0, scalarseq(block));
6622 CvROOT(cv)->op_private |= OPpREFCOUNTED;
6623 OpREFCNT_set(CvROOT(cv), 1);
6624 CvSTART(cv) = LINKLIST(CvROOT(cv));
6625 CvROOT(cv)->op_next = 0;
6626 CALL_PEEP(CvSTART(cv));
6628 op_getmad(o,pegop,'n');
6629 op_getmad_weak(block, pegop, 'b');
6634 PL_parser->copline = NOLINE;
6642 Perl_newANONLIST(pTHX_ OP *o)
6644 return convert(OP_ANONLIST, OPf_SPECIAL, o);
6648 Perl_newANONHASH(pTHX_ OP *o)
6650 return convert(OP_ANONHASH, OPf_SPECIAL, o);
6654 Perl_newANONSUB(pTHX_ I32 floor, OP *proto, OP *block)
6656 return newANONATTRSUB(floor, proto, NULL, block);
6660 Perl_newANONATTRSUB(pTHX_ I32 floor, OP *proto, OP *attrs, OP *block)
6662 return newUNOP(OP_REFGEN, 0,
6663 newSVOP(OP_ANONCODE, 0,
6664 MUTABLE_SV(newATTRSUB(floor, 0, proto, attrs, block))));
6668 Perl_oopsAV(pTHX_ OP *o)
6672 PERL_ARGS_ASSERT_OOPSAV;
6674 switch (o->op_type) {
6676 o->op_type = OP_PADAV;
6677 o->op_ppaddr = PL_ppaddr[OP_PADAV];
6678 return ref(o, OP_RV2AV);
6681 o->op_type = OP_RV2AV;
6682 o->op_ppaddr = PL_ppaddr[OP_RV2AV];
6687 Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL), "oops: oopsAV");
6694 Perl_oopsHV(pTHX_ OP *o)
6698 PERL_ARGS_ASSERT_OOPSHV;
6700 switch (o->op_type) {
6703 o->op_type = OP_PADHV;
6704 o->op_ppaddr = PL_ppaddr[OP_PADHV];
6705 return ref(o, OP_RV2HV);
6709 o->op_type = OP_RV2HV;
6710 o->op_ppaddr = PL_ppaddr[OP_RV2HV];
6715 Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL), "oops: oopsHV");
6722 Perl_newAVREF(pTHX_ OP *o)
6726 PERL_ARGS_ASSERT_NEWAVREF;
6728 if (o->op_type == OP_PADANY) {
6729 o->op_type = OP_PADAV;
6730 o->op_ppaddr = PL_ppaddr[OP_PADAV];
6733 else if ((o->op_type == OP_RV2AV || o->op_type == OP_PADAV)) {
6734 Perl_ck_warner_d(aTHX_ packWARN(WARN_DEPRECATED),
6735 "Using an array as a reference is deprecated");
6737 return newUNOP(OP_RV2AV, 0, scalar(o));
6741 Perl_newGVREF(pTHX_ I32 type, OP *o)
6743 if (type == OP_MAPSTART || type == OP_GREPSTART || type == OP_SORT)
6744 return newUNOP(OP_NULL, 0, o);
6745 return ref(newUNOP(OP_RV2GV, OPf_REF, o), type);
6749 Perl_newHVREF(pTHX_ OP *o)
6753 PERL_ARGS_ASSERT_NEWHVREF;
6755 if (o->op_type == OP_PADANY) {
6756 o->op_type = OP_PADHV;
6757 o->op_ppaddr = PL_ppaddr[OP_PADHV];
6760 else if ((o->op_type == OP_RV2HV || o->op_type == OP_PADHV)) {
6761 Perl_ck_warner_d(aTHX_ packWARN(WARN_DEPRECATED),
6762 "Using a hash as a reference is deprecated");
6764 return newUNOP(OP_RV2HV, 0, scalar(o));
6768 Perl_newCVREF(pTHX_ I32 flags, OP *o)
6770 return newUNOP(OP_RV2CV, flags, scalar(o));
6774 Perl_newSVREF(pTHX_ OP *o)
6778 PERL_ARGS_ASSERT_NEWSVREF;
6780 if (o->op_type == OP_PADANY) {
6781 o->op_type = OP_PADSV;
6782 o->op_ppaddr = PL_ppaddr[OP_PADSV];
6785 return newUNOP(OP_RV2SV, 0, scalar(o));
6788 /* Check routines. See the comments at the top of this file for details
6789 * on when these are called */
6792 Perl_ck_anoncode(pTHX_ OP *o)
6794 PERL_ARGS_ASSERT_CK_ANONCODE;
6796 cSVOPo->op_targ = pad_add_anon(cSVOPo->op_sv, o->op_type);
6798 cSVOPo->op_sv = NULL;
6803 Perl_ck_bitop(pTHX_ OP *o)
6807 PERL_ARGS_ASSERT_CK_BITOP;
6809 #define OP_IS_NUMCOMPARE(op) \
6810 ((op) == OP_LT || (op) == OP_I_LT || \
6811 (op) == OP_GT || (op) == OP_I_GT || \
6812 (op) == OP_LE || (op) == OP_I_LE || \
6813 (op) == OP_GE || (op) == OP_I_GE || \
6814 (op) == OP_EQ || (op) == OP_I_EQ || \
6815 (op) == OP_NE || (op) == OP_I_NE || \
6816 (op) == OP_NCMP || (op) == OP_I_NCMP)
6817 o->op_private = (U8)(PL_hints & HINT_INTEGER);
6818 if (!(o->op_flags & OPf_STACKED) /* Not an assignment */
6819 && (o->op_type == OP_BIT_OR
6820 || o->op_type == OP_BIT_AND
6821 || o->op_type == OP_BIT_XOR))
6823 const OP * const left = cBINOPo->op_first;
6824 const OP * const right = left->op_sibling;
6825 if ((OP_IS_NUMCOMPARE(left->op_type) &&
6826 (left->op_flags & OPf_PARENS) == 0) ||
6827 (OP_IS_NUMCOMPARE(right->op_type) &&
6828 (right->op_flags & OPf_PARENS) == 0))
6829 Perl_ck_warner(aTHX_ packWARN(WARN_PRECEDENCE),
6830 "Possible precedence problem on bitwise %c operator",
6831 o->op_type == OP_BIT_OR ? '|'
6832 : o->op_type == OP_BIT_AND ? '&' : '^'
6839 Perl_ck_concat(pTHX_ OP *o)
6841 const OP * const kid = cUNOPo->op_first;
6843 PERL_ARGS_ASSERT_CK_CONCAT;
6844 PERL_UNUSED_CONTEXT;
6846 if (kid->op_type == OP_CONCAT && !(kid->op_private & OPpTARGET_MY) &&
6847 !(kUNOP->op_first->op_flags & OPf_MOD))
6848 o->op_flags |= OPf_STACKED;
6853 Perl_ck_spair(pTHX_ OP *o)
6857 PERL_ARGS_ASSERT_CK_SPAIR;
6859 if (o->op_flags & OPf_KIDS) {
6862 const OPCODE type = o->op_type;
6863 o = modkids(ck_fun(o), type);
6864 kid = cUNOPo->op_first;
6865 newop = kUNOP->op_first->op_sibling;
6867 const OPCODE type = newop->op_type;
6868 if (newop->op_sibling || !(PL_opargs[type] & OA_RETSCALAR) ||
6869 type == OP_PADAV || type == OP_PADHV ||
6870 type == OP_RV2AV || type == OP_RV2HV)
6874 op_getmad(kUNOP->op_first,newop,'K');
6876 op_free(kUNOP->op_first);
6878 kUNOP->op_first = newop;
6880 o->op_ppaddr = PL_ppaddr[++o->op_type];
6885 Perl_ck_delete(pTHX_ OP *o)
6887 PERL_ARGS_ASSERT_CK_DELETE;
6891 if (o->op_flags & OPf_KIDS) {
6892 OP * const kid = cUNOPo->op_first;
6893 switch (kid->op_type) {
6895 o->op_flags |= OPf_SPECIAL;
6898 o->op_private |= OPpSLICE;
6901 o->op_flags |= OPf_SPECIAL;
6906 Perl_croak(aTHX_ "%s argument is not a HASH or ARRAY element or slice",
6909 if (kid->op_private & OPpLVAL_INTRO)
6910 o->op_private |= OPpLVAL_INTRO;
6917 Perl_ck_die(pTHX_ OP *o)
6919 PERL_ARGS_ASSERT_CK_DIE;
6922 if (VMSISH_HUSHED) o->op_private |= OPpHUSH_VMSISH;
6928 Perl_ck_eof(pTHX_ OP *o)
6932 PERL_ARGS_ASSERT_CK_EOF;
6934 if (o->op_flags & OPf_KIDS) {
6935 if (cLISTOPo->op_first->op_type == OP_STUB) {
6937 = newUNOP(o->op_type, OPf_SPECIAL, newGVOP(OP_GV, 0, PL_argvgv));
6939 op_getmad(o,newop,'O');
6951 Perl_ck_eval(pTHX_ OP *o)
6955 PERL_ARGS_ASSERT_CK_EVAL;
6957 PL_hints |= HINT_BLOCK_SCOPE;
6958 if (o->op_flags & OPf_KIDS) {
6959 SVOP * const kid = (SVOP*)cUNOPo->op_first;
6962 o->op_flags &= ~OPf_KIDS;
6965 else if (kid->op_type == OP_LINESEQ || kid->op_type == OP_STUB) {
6971 cUNOPo->op_first = 0;
6976 NewOp(1101, enter, 1, LOGOP);
6977 enter->op_type = OP_ENTERTRY;
6978 enter->op_ppaddr = PL_ppaddr[OP_ENTERTRY];
6979 enter->op_private = 0;
6981 /* establish postfix order */
6982 enter->op_next = (OP*)enter;
6984 o = prepend_elem(OP_LINESEQ, (OP*)enter, (OP*)kid);
6985 o->op_type = OP_LEAVETRY;
6986 o->op_ppaddr = PL_ppaddr[OP_LEAVETRY];
6987 enter->op_other = o;
6988 op_getmad(oldo,o,'O');
7002 o = newUNOP(OP_ENTEREVAL, 0, newDEFSVOP());
7003 op_getmad(oldo,o,'O');
7005 o->op_targ = (PADOFFSET)PL_hints;
7006 if ((PL_hints & HINT_LOCALIZE_HH) != 0 && GvHV(PL_hintgv)) {
7007 /* Store a copy of %^H that pp_entereval can pick up. */
7008 OP *hhop = newSVOP(OP_HINTSEVAL, 0,
7009 MUTABLE_SV(Perl_hv_copy_hints_hv(aTHX_ GvHV(PL_hintgv))));
7010 cUNOPo->op_first->op_sibling = hhop;
7011 o->op_private |= OPpEVAL_HAS_HH;
7017 Perl_ck_exit(pTHX_ OP *o)
7019 PERL_ARGS_ASSERT_CK_EXIT;
7022 HV * const table = GvHV(PL_hintgv);
7024 SV * const * const svp = hv_fetchs(table, "vmsish_exit", FALSE);
7025 if (svp && *svp && SvTRUE(*svp))
7026 o->op_private |= OPpEXIT_VMSISH;
7028 if (VMSISH_HUSHED) o->op_private |= OPpHUSH_VMSISH;
7034 Perl_ck_exec(pTHX_ OP *o)
7036 PERL_ARGS_ASSERT_CK_EXEC;
7038 if (o->op_flags & OPf_STACKED) {
7041 kid = cUNOPo->op_first->op_sibling;
7042 if (kid->op_type == OP_RV2GV)
7051 Perl_ck_exists(pTHX_ OP *o)
7055 PERL_ARGS_ASSERT_CK_EXISTS;
7058 if (o->op_flags & OPf_KIDS) {
7059 OP * const kid = cUNOPo->op_first;
7060 if (kid->op_type == OP_ENTERSUB) {
7061 (void) ref(kid, o->op_type);
7062 if (kid->op_type != OP_RV2CV
7063 && !(PL_parser && PL_parser->error_count))
7064 Perl_croak(aTHX_ "%s argument is not a subroutine name",
7066 o->op_private |= OPpEXISTS_SUB;
7068 else if (kid->op_type == OP_AELEM)
7069 o->op_flags |= OPf_SPECIAL;
7070 else if (kid->op_type != OP_HELEM)
7071 Perl_croak(aTHX_ "%s argument is not a HASH or ARRAY element or a subroutine",
7079 Perl_ck_rvconst(pTHX_ register OP *o)
7082 SVOP * const kid = (SVOP*)cUNOPo->op_first;
7084 PERL_ARGS_ASSERT_CK_RVCONST;
7086 o->op_private |= (PL_hints & HINT_STRICT_REFS);
7087 if (o->op_type == OP_RV2CV)
7088 o->op_private &= ~1;
7090 if (kid->op_type == OP_CONST) {
7093 SV * const kidsv = kid->op_sv;
7095 /* Is it a constant from cv_const_sv()? */
7096 if (SvROK(kidsv) && SvREADONLY(kidsv)) {
7097 SV * const rsv = SvRV(kidsv);
7098 const svtype type = SvTYPE(rsv);
7099 const char *badtype = NULL;
7101 switch (o->op_type) {
7103 if (type > SVt_PVMG)
7104 badtype = "a SCALAR";
7107 if (type != SVt_PVAV)
7108 badtype = "an ARRAY";
7111 if (type != SVt_PVHV)
7115 if (type != SVt_PVCV)
7120 Perl_croak(aTHX_ "Constant is not %s reference", badtype);
7123 if ((o->op_private & HINT_STRICT_REFS) && (kid->op_private & OPpCONST_BARE)) {
7124 const char *badthing;
7125 switch (o->op_type) {
7127 badthing = "a SCALAR";
7130 badthing = "an ARRAY";
7133 badthing = "a HASH";
7141 "Can't use bareword (\"%"SVf"\") as %s ref while \"strict refs\" in use",
7142 SVfARG(kidsv), badthing);
7145 * This is a little tricky. We only want to add the symbol if we
7146 * didn't add it in the lexer. Otherwise we get duplicate strict
7147 * warnings. But if we didn't add it in the lexer, we must at
7148 * least pretend like we wanted to add it even if it existed before,
7149 * or we get possible typo warnings. OPpCONST_ENTERED says
7150 * whether the lexer already added THIS instance of this symbol.
7152 iscv = (o->op_type == OP_RV2CV) * 2;
7154 gv = gv_fetchsv(kidsv,
7155 iscv | !(kid->op_private & OPpCONST_ENTERED),
7158 : o->op_type == OP_RV2SV
7160 : o->op_type == OP_RV2AV
7162 : o->op_type == OP_RV2HV
7165 } while (!gv && !(kid->op_private & OPpCONST_ENTERED) && !iscv++);
7167 kid->op_type = OP_GV;
7168 SvREFCNT_dec(kid->op_sv);
7170 /* XXX hack: dependence on sizeof(PADOP) <= sizeof(SVOP) */
7171 kPADOP->op_padix = pad_alloc(OP_GV, SVs_PADTMP);
7172 SvREFCNT_dec(PAD_SVl(kPADOP->op_padix));
7174 PAD_SETSV(kPADOP->op_padix, MUTABLE_SV(SvREFCNT_inc_simple_NN(gv)));
7176 kid->op_sv = SvREFCNT_inc_simple_NN(gv);
7178 kid->op_private = 0;
7179 kid->op_ppaddr = PL_ppaddr[OP_GV];
7186 Perl_ck_ftst(pTHX_ OP *o)
7189 const I32 type = o->op_type;
7191 PERL_ARGS_ASSERT_CK_FTST;
7193 if (o->op_flags & OPf_REF) {
7196 else if (o->op_flags & OPf_KIDS && cUNOPo->op_first->op_type != OP_STUB) {
7197 SVOP * const kid = (SVOP*)cUNOPo->op_first;
7198 const OPCODE kidtype = kid->op_type;
7200 if (kidtype == OP_CONST && (kid->op_private & OPpCONST_BARE)) {
7201 OP * const newop = newGVOP(type, OPf_REF,
7202 gv_fetchsv(kid->op_sv, GV_ADD, SVt_PVIO));
7204 op_getmad(o,newop,'O');
7210 if ((PL_hints & HINT_FILETEST_ACCESS) && OP_IS_FILETEST_ACCESS(o->op_type))
7211 o->op_private |= OPpFT_ACCESS;
7212 if (PL_check[kidtype] == MEMBER_TO_FPTR(Perl_ck_ftst)
7213 && kidtype != OP_STAT && kidtype != OP_LSTAT)
7214 o->op_private |= OPpFT_STACKED;
7222 if (type == OP_FTTTY)
7223 o = newGVOP(type, OPf_REF, PL_stdingv);
7225 o = newUNOP(type, 0, newDEFSVOP());
7226 op_getmad(oldo,o,'O');
7232 Perl_ck_fun(pTHX_ OP *o)
7235 const int type = o->op_type;
7236 register I32 oa = PL_opargs[type] >> OASHIFT;
7238 PERL_ARGS_ASSERT_CK_FUN;
7240 if (o->op_flags & OPf_STACKED) {
7241 if ((oa & OA_OPTIONAL) && (oa >> 4) && !((oa >> 4) & OA_OPTIONAL))
7244 return no_fh_allowed(o);
7247 if (o->op_flags & OPf_KIDS) {
7248 OP **tokid = &cLISTOPo->op_first;
7249 register OP *kid = cLISTOPo->op_first;
7253 if (kid->op_type == OP_PUSHMARK ||
7254 (kid->op_type == OP_NULL && kid->op_targ == OP_PUSHMARK))
7256 tokid = &kid->op_sibling;
7257 kid = kid->op_sibling;
7259 if (!kid && PL_opargs[type] & OA_DEFGV)
7260 *tokid = kid = newDEFSVOP();
7264 sibl = kid->op_sibling;
7266 if (!sibl && kid->op_type == OP_STUB) {
7273 /* list seen where single (scalar) arg expected? */
7274 if (numargs == 1 && !(oa >> 4)
7275 && kid->op_type == OP_LIST && type != OP_SCALAR)
7277 return too_many_arguments(o,PL_op_desc[type]);
7290 if ((type == OP_PUSH || type == OP_UNSHIFT)
7291 && !kid->op_sibling)
7292 Perl_ck_warner(aTHX_ packWARN(WARN_SYNTAX),
7293 "Useless use of %s with no values",
7296 if (kid->op_type == OP_CONST &&
7297 (kid->op_private & OPpCONST_BARE))
7299 OP * const newop = newAVREF(newGVOP(OP_GV, 0,
7300 gv_fetchsv(((SVOP*)kid)->op_sv, GV_ADD, SVt_PVAV) ));
7301 Perl_ck_warner_d(aTHX_ packWARN(WARN_DEPRECATED),
7302 "Array @%"SVf" missing the @ in argument %"IVdf" of %s()",
7303 SVfARG(((SVOP*)kid)->op_sv), (IV)numargs, PL_op_desc[type]);
7305 op_getmad(kid,newop,'K');
7310 kid->op_sibling = sibl;
7313 else if (kid->op_type != OP_RV2AV && kid->op_type != OP_PADAV)
7314 bad_type(numargs, "array", PL_op_desc[type], kid);
7318 if (kid->op_type == OP_CONST &&
7319 (kid->op_private & OPpCONST_BARE))
7321 OP * const newop = newHVREF(newGVOP(OP_GV, 0,
7322 gv_fetchsv(((SVOP*)kid)->op_sv, GV_ADD, SVt_PVHV) ));
7323 Perl_ck_warner_d(aTHX_ packWARN(WARN_DEPRECATED),
7324 "Hash %%%"SVf" missing the %% in argument %"IVdf" of %s()",
7325 SVfARG(((SVOP*)kid)->op_sv), (IV)numargs, PL_op_desc[type]);
7327 op_getmad(kid,newop,'K');
7332 kid->op_sibling = sibl;
7335 else if (kid->op_type != OP_RV2HV && kid->op_type != OP_PADHV)
7336 bad_type(numargs, "hash", PL_op_desc[type], kid);
7341 OP * const newop = newUNOP(OP_NULL, 0, kid);
7342 kid->op_sibling = 0;
7344 newop->op_next = newop;
7346 kid->op_sibling = sibl;
7351 if (kid->op_type != OP_GV && kid->op_type != OP_RV2GV) {
7352 if (kid->op_type == OP_CONST &&
7353 (kid->op_private & OPpCONST_BARE))
7355 OP * const newop = newGVOP(OP_GV, 0,
7356 gv_fetchsv(((SVOP*)kid)->op_sv, GV_ADD, SVt_PVIO));
7357 if (!(o->op_private & 1) && /* if not unop */
7358 kid == cLISTOPo->op_last)
7359 cLISTOPo->op_last = newop;
7361 op_getmad(kid,newop,'K');
7367 else if (kid->op_type == OP_READLINE) {
7368 /* neophyte patrol: open(<FH>), close(<FH>) etc. */
7369 bad_type(numargs, "HANDLE", OP_DESC(o), kid);
7372 I32 flags = OPf_SPECIAL;
7376 /* is this op a FH constructor? */
7377 if (is_handle_constructor(o,numargs)) {
7378 const char *name = NULL;
7382 /* Set a flag to tell rv2gv to vivify
7383 * need to "prove" flag does not mean something
7384 * else already - NI-S 1999/05/07
7387 if (kid->op_type == OP_PADSV) {
7389 = PAD_COMPNAME_SV(kid->op_targ);
7390 name = SvPV_const(namesv, len);
7392 else if (kid->op_type == OP_RV2SV
7393 && kUNOP->op_first->op_type == OP_GV)
7395 GV * const gv = cGVOPx_gv(kUNOP->op_first);
7397 len = GvNAMELEN(gv);
7399 else if (kid->op_type == OP_AELEM
7400 || kid->op_type == OP_HELEM)
7403 OP *op = ((BINOP*)kid)->op_first;
7407 const char * const a =
7408 kid->op_type == OP_AELEM ?
7410 if (((op->op_type == OP_RV2AV) ||
7411 (op->op_type == OP_RV2HV)) &&
7412 (firstop = ((UNOP*)op)->op_first) &&
7413 (firstop->op_type == OP_GV)) {
7414 /* packagevar $a[] or $h{} */
7415 GV * const gv = cGVOPx_gv(firstop);
7423 else if (op->op_type == OP_PADAV
7424 || op->op_type == OP_PADHV) {
7425 /* lexicalvar $a[] or $h{} */
7426 const char * const padname =
7427 PAD_COMPNAME_PV(op->op_targ);
7436 name = SvPV_const(tmpstr, len);
7441 name = "__ANONIO__";
7448 targ = pad_alloc(OP_RV2GV, SVs_PADTMP);
7449 namesv = PAD_SVl(targ);
7450 SvUPGRADE(namesv, SVt_PV);
7452 sv_setpvs(namesv, "$");
7453 sv_catpvn(namesv, name, len);
7456 kid->op_sibling = 0;
7457 kid = newUNOP(OP_RV2GV, flags, scalar(kid));
7458 kid->op_targ = targ;
7459 kid->op_private |= priv;
7461 kid->op_sibling = sibl;
7467 mod(scalar(kid), type);
7471 tokid = &kid->op_sibling;
7472 kid = kid->op_sibling;
7475 if (kid && kid->op_type != OP_STUB)
7476 return too_many_arguments(o,OP_DESC(o));
7477 o->op_private |= numargs;
7479 /* FIXME - should the numargs move as for the PERL_MAD case? */
7480 o->op_private |= numargs;
7482 return too_many_arguments(o,OP_DESC(o));
7486 else if (PL_opargs[type] & OA_DEFGV) {
7488 OP *newop = newUNOP(type, 0, newDEFSVOP());
7489 op_getmad(o,newop,'O');
7492 /* Ordering of these two is important to keep f_map.t passing. */
7494 return newUNOP(type, 0, newDEFSVOP());
7499 while (oa & OA_OPTIONAL)
7501 if (oa && oa != OA_LIST)
7502 return too_few_arguments(o,OP_DESC(o));
7508 Perl_ck_glob(pTHX_ OP *o)
7513 PERL_ARGS_ASSERT_CK_GLOB;
7516 if ((o->op_flags & OPf_KIDS) && !cLISTOPo->op_first->op_sibling)
7517 append_elem(OP_GLOB, o, newDEFSVOP());
7519 if (!((gv = gv_fetchpvs("glob", GV_NOTQUAL, SVt_PVCV))
7520 && GvCVu(gv) && GvIMPORTED_CV(gv)))
7522 gv = gv_fetchpvs("CORE::GLOBAL::glob", 0, SVt_PVCV);
7525 #if !defined(PERL_EXTERNAL_GLOB)
7526 /* XXX this can be tightened up and made more failsafe. */
7527 if (!(gv && GvCVu(gv) && GvIMPORTED_CV(gv))) {
7530 Perl_load_module(aTHX_ PERL_LOADMOD_NOIMPORT,
7531 newSVpvs("File::Glob"), NULL, NULL, NULL);
7532 if((glob_gv = gv_fetchpvs("File::Glob::csh_glob", 0, SVt_PVCV))) {
7533 gv = gv_fetchpvs("CORE::GLOBAL::glob", 0, SVt_PVCV);
7534 GvCV(gv) = GvCV(glob_gv);
7535 SvREFCNT_inc_void(MUTABLE_SV(GvCV(gv)));
7536 GvIMPORTED_CV_on(gv);
7540 #endif /* PERL_EXTERNAL_GLOB */
7542 if (gv && GvCVu(gv) && GvIMPORTED_CV(gv)) {
7543 append_elem(OP_GLOB, o,
7544 newSVOP(OP_CONST, 0, newSViv(PL_glob_index++)));
7545 o->op_type = OP_LIST;
7546 o->op_ppaddr = PL_ppaddr[OP_LIST];
7547 cLISTOPo->op_first->op_type = OP_PUSHMARK;
7548 cLISTOPo->op_first->op_ppaddr = PL_ppaddr[OP_PUSHMARK];
7549 cLISTOPo->op_first->op_targ = 0;
7550 o = newUNOP(OP_ENTERSUB, OPf_STACKED,
7551 append_elem(OP_LIST, o,
7552 scalar(newUNOP(OP_RV2CV, 0,
7553 newGVOP(OP_GV, 0, gv)))));
7554 o = newUNOP(OP_NULL, 0, ck_subr(o));
7555 o->op_targ = OP_GLOB; /* hint at what it used to be */
7558 gv = newGVgen("main");
7560 append_elem(OP_GLOB, o, newGVOP(OP_GV, 0, gv));
7566 Perl_ck_grep(pTHX_ OP *o)
7571 const OPCODE type = o->op_type == OP_GREPSTART ? OP_GREPWHILE : OP_MAPWHILE;
7574 PERL_ARGS_ASSERT_CK_GREP;
7576 o->op_ppaddr = PL_ppaddr[OP_GREPSTART];
7577 /* don't allocate gwop here, as we may leak it if PL_parser->error_count > 0 */
7579 if (o->op_flags & OPf_STACKED) {
7582 kid = cUNOPx(cLISTOPo->op_first->op_sibling)->op_first;
7583 if (kid->op_type != OP_SCOPE && kid->op_type != OP_LEAVE)
7584 return no_fh_allowed(o);
7585 for (k = kid; k; k = k->op_next) {
7588 NewOp(1101, gwop, 1, LOGOP);
7589 kid->op_next = (OP*)gwop;
7590 o->op_flags &= ~OPf_STACKED;
7592 kid = cLISTOPo->op_first->op_sibling;
7593 if (type == OP_MAPWHILE)
7598 if (PL_parser && PL_parser->error_count)
7600 kid = cLISTOPo->op_first->op_sibling;
7601 if (kid->op_type != OP_NULL)
7602 Perl_croak(aTHX_ "panic: ck_grep");
7603 kid = kUNOP->op_first;
7606 NewOp(1101, gwop, 1, LOGOP);
7607 gwop->op_type = type;
7608 gwop->op_ppaddr = PL_ppaddr[type];
7609 gwop->op_first = listkids(o);
7610 gwop->op_flags |= OPf_KIDS;
7611 gwop->op_other = LINKLIST(kid);
7612 kid->op_next = (OP*)gwop;
7613 offset = Perl_pad_findmy(aTHX_ STR_WITH_LEN("$_"), 0);
7614 if (offset == NOT_IN_PAD || PAD_COMPNAME_FLAGS_isOUR(offset)) {
7615 o->op_private = gwop->op_private = 0;
7616 gwop->op_targ = pad_alloc(type, SVs_PADTMP);
7619 o->op_private = gwop->op_private = OPpGREP_LEX;
7620 gwop->op_targ = o->op_targ = offset;
7623 kid = cLISTOPo->op_first->op_sibling;
7624 if (!kid || !kid->op_sibling)
7625 return too_few_arguments(o,OP_DESC(o));
7626 for (kid = kid->op_sibling; kid; kid = kid->op_sibling)
7627 mod(kid, OP_GREPSTART);
7633 Perl_ck_index(pTHX_ OP *o)
7635 PERL_ARGS_ASSERT_CK_INDEX;
7637 if (o->op_flags & OPf_KIDS) {
7638 OP *kid = cLISTOPo->op_first->op_sibling; /* get past pushmark */
7640 kid = kid->op_sibling; /* get past "big" */
7641 if (kid && kid->op_type == OP_CONST)
7642 fbm_compile(((SVOP*)kid)->op_sv, 0);
7648 Perl_ck_lfun(pTHX_ OP *o)
7650 const OPCODE type = o->op_type;
7652 PERL_ARGS_ASSERT_CK_LFUN;
7654 return modkids(ck_fun(o), type);
7658 Perl_ck_defined(pTHX_ OP *o) /* 19990527 MJD */
7660 PERL_ARGS_ASSERT_CK_DEFINED;
7662 if ((o->op_flags & OPf_KIDS)) {
7663 switch (cUNOPo->op_first->op_type) {
7665 /* This is needed for
7666 if (defined %stash::)
7667 to work. Do not break Tk.
7669 break; /* Globals via GV can be undef */
7671 case OP_AASSIGN: /* Is this a good idea? */
7672 Perl_ck_warner_d(aTHX_ packWARN(WARN_DEPRECATED),
7673 "defined(@array) is deprecated");
7674 Perl_ck_warner_d(aTHX_ packWARN(WARN_DEPRECATED),
7675 "\t(Maybe you should just omit the defined()?)\n");
7679 Perl_ck_warner_d(aTHX_ packWARN(WARN_DEPRECATED),
7680 "defined(%%hash) is deprecated");
7681 Perl_ck_warner_d(aTHX_ packWARN(WARN_DEPRECATED),
7682 "\t(Maybe you should just omit the defined()?)\n");
7693 Perl_ck_readline(pTHX_ OP *o)
7695 PERL_ARGS_ASSERT_CK_READLINE;
7697 if (!(o->op_flags & OPf_KIDS)) {
7699 = newUNOP(OP_READLINE, 0, newGVOP(OP_GV, 0, PL_argvgv));
7701 op_getmad(o,newop,'O');
7711 Perl_ck_rfun(pTHX_ OP *o)
7713 const OPCODE type = o->op_type;
7715 PERL_ARGS_ASSERT_CK_RFUN;
7717 return refkids(ck_fun(o), type);
7721 Perl_ck_listiob(pTHX_ OP *o)
7725 PERL_ARGS_ASSERT_CK_LISTIOB;
7727 kid = cLISTOPo->op_first;
7730 kid = cLISTOPo->op_first;
7732 if (kid->op_type == OP_PUSHMARK)
7733 kid = kid->op_sibling;
7734 if (kid && o->op_flags & OPf_STACKED)
7735 kid = kid->op_sibling;
7736 else if (kid && !kid->op_sibling) { /* print HANDLE; */
7737 if (kid->op_type == OP_CONST && kid->op_private & OPpCONST_BARE) {
7738 o->op_flags |= OPf_STACKED; /* make it a filehandle */
7739 kid = newUNOP(OP_RV2GV, OPf_REF, scalar(kid));
7740 cLISTOPo->op_first->op_sibling = kid;
7741 cLISTOPo->op_last = kid;
7742 kid = kid->op_sibling;
7747 append_elem(o->op_type, o, newDEFSVOP());
7753 Perl_ck_smartmatch(pTHX_ OP *o)
7756 if (0 == (o->op_flags & OPf_SPECIAL)) {
7757 OP *first = cBINOPo->op_first;
7758 OP *second = first->op_sibling;
7760 /* Implicitly take a reference to an array or hash */
7761 first->op_sibling = NULL;
7762 first = cBINOPo->op_first = ref_array_or_hash(first);
7763 second = first->op_sibling = ref_array_or_hash(second);
7765 /* Implicitly take a reference to a regular expression */
7766 if (first->op_type == OP_MATCH) {
7767 first->op_type = OP_QR;
7768 first->op_ppaddr = PL_ppaddr[OP_QR];
7770 if (second->op_type == OP_MATCH) {
7771 second->op_type = OP_QR;
7772 second->op_ppaddr = PL_ppaddr[OP_QR];
7781 Perl_ck_sassign(pTHX_ OP *o)
7784 OP * const kid = cLISTOPo->op_first;
7786 PERL_ARGS_ASSERT_CK_SASSIGN;
7788 /* has a disposable target? */
7789 if ((PL_opargs[kid->op_type] & OA_TARGLEX)
7790 && !(kid->op_flags & OPf_STACKED)
7791 /* Cannot steal the second time! */
7792 && !(kid->op_private & OPpTARGET_MY)
7793 /* Keep the full thing for madskills */
7797 OP * const kkid = kid->op_sibling;
7799 /* Can just relocate the target. */
7800 if (kkid && kkid->op_type == OP_PADSV
7801 && !(kkid->op_private & OPpLVAL_INTRO))
7803 kid->op_targ = kkid->op_targ;
7805 /* Now we do not need PADSV and SASSIGN. */
7806 kid->op_sibling = o->op_sibling; /* NULL */
7807 cLISTOPo->op_first = NULL;
7810 kid->op_private |= OPpTARGET_MY; /* Used for context settings */
7814 if (kid->op_sibling) {
7815 OP *kkid = kid->op_sibling;
7816 if (kkid->op_type == OP_PADSV
7817 && (kkid->op_private & OPpLVAL_INTRO)
7818 && SvPAD_STATE(*av_fetch(PL_comppad_name, kkid->op_targ, FALSE))) {
7819 const PADOFFSET target = kkid->op_targ;
7820 OP *const other = newOP(OP_PADSV,
7822 | ((kkid->op_private & ~OPpLVAL_INTRO) << 8));
7823 OP *const first = newOP(OP_NULL, 0);
7824 OP *const nullop = newCONDOP(0, first, o, other);
7825 OP *const condop = first->op_next;
7826 /* hijacking PADSTALE for uninitialized state variables */
7827 SvPADSTALE_on(PAD_SVl(target));
7829 condop->op_type = OP_ONCE;
7830 condop->op_ppaddr = PL_ppaddr[OP_ONCE];
7831 condop->op_targ = target;
7832 other->op_targ = target;
7834 /* Because we change the type of the op here, we will skip the
7835 assinment binop->op_last = binop->op_first->op_sibling; at the
7836 end of Perl_newBINOP(). So need to do it here. */
7837 cBINOPo->op_last = cBINOPo->op_first->op_sibling;
7846 Perl_ck_match(pTHX_ OP *o)
7850 PERL_ARGS_ASSERT_CK_MATCH;
7852 if (o->op_type != OP_QR && PL_compcv) {
7853 const PADOFFSET offset = Perl_pad_findmy(aTHX_ STR_WITH_LEN("$_"), 0);
7854 if (offset != NOT_IN_PAD && !(PAD_COMPNAME_FLAGS_isOUR(offset))) {
7855 o->op_targ = offset;
7856 o->op_private |= OPpTARGET_MY;
7859 if (o->op_type == OP_MATCH || o->op_type == OP_QR)
7860 o->op_private |= OPpRUNTIME;
7865 Perl_ck_method(pTHX_ OP *o)
7867 OP * const kid = cUNOPo->op_first;
7869 PERL_ARGS_ASSERT_CK_METHOD;
7871 if (kid->op_type == OP_CONST) {
7872 SV* sv = kSVOP->op_sv;
7873 const char * const method = SvPVX_const(sv);
7874 if (!(strchr(method, ':') || strchr(method, '\''))) {
7876 if (!SvREADONLY(sv) || !SvFAKE(sv)) {
7877 sv = newSVpvn_share(method, SvCUR(sv), 0);
7880 kSVOP->op_sv = NULL;
7882 cmop = newSVOP(OP_METHOD_NAMED, 0, sv);
7884 op_getmad(o,cmop,'O');
7895 Perl_ck_null(pTHX_ OP *o)
7897 PERL_ARGS_ASSERT_CK_NULL;
7898 PERL_UNUSED_CONTEXT;
7903 Perl_ck_open(pTHX_ OP *o)
7906 HV * const table = GvHV(PL_hintgv);
7908 PERL_ARGS_ASSERT_CK_OPEN;
7911 SV **svp = hv_fetchs(table, "open_IN", FALSE);
7914 const char *d = SvPV_const(*svp, len);
7915 const I32 mode = mode_from_discipline(d, len);
7916 if (mode & O_BINARY)
7917 o->op_private |= OPpOPEN_IN_RAW;
7918 else if (mode & O_TEXT)
7919 o->op_private |= OPpOPEN_IN_CRLF;
7922 svp = hv_fetchs(table, "open_OUT", FALSE);
7925 const char *d = SvPV_const(*svp, len);
7926 const I32 mode = mode_from_discipline(d, len);
7927 if (mode & O_BINARY)
7928 o->op_private |= OPpOPEN_OUT_RAW;
7929 else if (mode & O_TEXT)
7930 o->op_private |= OPpOPEN_OUT_CRLF;
7933 if (o->op_type == OP_BACKTICK) {
7934 if (!(o->op_flags & OPf_KIDS)) {
7935 OP * const newop = newUNOP(OP_BACKTICK, 0, newDEFSVOP());
7937 op_getmad(o,newop,'O');
7946 /* In case of three-arg dup open remove strictness
7947 * from the last arg if it is a bareword. */
7948 OP * const first = cLISTOPx(o)->op_first; /* The pushmark. */
7949 OP * const last = cLISTOPx(o)->op_last; /* The bareword. */
7953 if ((last->op_type == OP_CONST) && /* The bareword. */
7954 (last->op_private & OPpCONST_BARE) &&
7955 (last->op_private & OPpCONST_STRICT) &&
7956 (oa = first->op_sibling) && /* The fh. */
7957 (oa = oa->op_sibling) && /* The mode. */
7958 (oa->op_type == OP_CONST) &&
7959 SvPOK(((SVOP*)oa)->op_sv) &&
7960 (mode = SvPVX_const(((SVOP*)oa)->op_sv)) &&
7961 mode[0] == '>' && mode[1] == '&' && /* A dup open. */
7962 (last == oa->op_sibling)) /* The bareword. */
7963 last->op_private &= ~OPpCONST_STRICT;
7969 Perl_ck_repeat(pTHX_ OP *o)
7971 PERL_ARGS_ASSERT_CK_REPEAT;
7973 if (cBINOPo->op_first->op_flags & OPf_PARENS) {
7974 o->op_private |= OPpREPEAT_DOLIST;
7975 cBINOPo->op_first = force_list(cBINOPo->op_first);
7983 Perl_ck_require(pTHX_ OP *o)
7988 PERL_ARGS_ASSERT_CK_REQUIRE;
7990 if (o->op_flags & OPf_KIDS) { /* Shall we supply missing .pm? */
7991 SVOP * const kid = (SVOP*)cUNOPo->op_first;
7993 if (kid->op_type == OP_CONST && (kid->op_private & OPpCONST_BARE)) {
7994 SV * const sv = kid->op_sv;
7995 U32 was_readonly = SvREADONLY(sv);
8002 sv_force_normal_flags(sv, 0);
8003 assert(!SvREADONLY(sv));
8013 for (; s < end; s++) {
8014 if (*s == ':' && s[1] == ':') {
8016 Move(s+2, s+1, end - s - 1, char);
8021 sv_catpvs(sv, ".pm");
8022 SvFLAGS(sv) |= was_readonly;
8026 if (!(o->op_flags & OPf_SPECIAL)) { /* Wasn't written as CORE::require */
8027 /* handle override, if any */
8028 gv = gv_fetchpvs("require", GV_NOTQUAL, SVt_PVCV);
8029 if (!(gv && GvCVu(gv) && GvIMPORTED_CV(gv))) {
8030 GV * const * const gvp = (GV**)hv_fetchs(PL_globalstash, "require", FALSE);
8031 gv = gvp ? *gvp : NULL;
8035 if (gv && GvCVu(gv) && GvIMPORTED_CV(gv)) {
8036 OP * const kid = cUNOPo->op_first;
8039 cUNOPo->op_first = 0;
8043 newop = ck_subr(newUNOP(OP_ENTERSUB, OPf_STACKED,
8044 append_elem(OP_LIST, kid,
8045 scalar(newUNOP(OP_RV2CV, 0,
8048 op_getmad(o,newop,'O');
8052 return scalar(ck_fun(o));
8056 Perl_ck_return(pTHX_ OP *o)
8061 PERL_ARGS_ASSERT_CK_RETURN;
8063 kid = cLISTOPo->op_first->op_sibling;
8064 if (CvLVALUE(PL_compcv)) {
8065 for (; kid; kid = kid->op_sibling)
8066 mod(kid, OP_LEAVESUBLV);
8068 for (; kid; kid = kid->op_sibling)
8069 if ((kid->op_type == OP_NULL)
8070 && ((kid->op_flags & (OPf_SPECIAL|OPf_KIDS)) == (OPf_SPECIAL|OPf_KIDS))) {
8071 /* This is a do block */
8072 OP *op = kUNOP->op_first;
8073 if (op->op_type == OP_LEAVE && op->op_flags & OPf_KIDS) {
8074 op = cUNOPx(op)->op_first;
8075 assert(op->op_type == OP_ENTER && !(op->op_flags & OPf_SPECIAL));
8076 /* Force the use of the caller's context */
8077 op->op_flags |= OPf_SPECIAL;
8086 Perl_ck_select(pTHX_ OP *o)
8091 PERL_ARGS_ASSERT_CK_SELECT;
8093 if (o->op_flags & OPf_KIDS) {
8094 kid = cLISTOPo->op_first->op_sibling; /* get past pushmark */
8095 if (kid && kid->op_sibling) {
8096 o->op_type = OP_SSELECT;
8097 o->op_ppaddr = PL_ppaddr[OP_SSELECT];
8099 return fold_constants(o);
8103 kid = cLISTOPo->op_first->op_sibling; /* get past pushmark */
8104 if (kid && kid->op_type == OP_RV2GV)
8105 kid->op_private &= ~HINT_STRICT_REFS;
8110 Perl_ck_shift(pTHX_ OP *o)
8113 const I32 type = o->op_type;
8115 PERL_ARGS_ASSERT_CK_SHIFT;
8117 if (!(o->op_flags & OPf_KIDS)) {
8120 if (!CvUNIQUE(PL_compcv)) {
8121 o->op_flags |= OPf_SPECIAL;
8125 argop = newUNOP(OP_RV2AV, 0, scalar(newGVOP(OP_GV, 0, PL_argvgv)));
8127 OP * const oldo = o;
8128 o = newUNOP(type, 0, scalar(argop));
8129 op_getmad(oldo,o,'O');
8133 return newUNOP(type, 0, scalar(argop));
8136 return scalar(modkids(ck_fun(o), type));
8140 Perl_ck_sort(pTHX_ OP *o)
8145 PERL_ARGS_ASSERT_CK_SORT;
8147 if (o->op_type == OP_SORT && (PL_hints & HINT_LOCALIZE_HH) != 0) {
8148 HV * const hinthv = GvHV(PL_hintgv);
8150 SV ** const svp = hv_fetchs(hinthv, "sort", FALSE);
8152 const I32 sorthints = (I32)SvIV(*svp);
8153 if ((sorthints & HINT_SORT_QUICKSORT) != 0)
8154 o->op_private |= OPpSORT_QSORT;
8155 if ((sorthints & HINT_SORT_STABLE) != 0)
8156 o->op_private |= OPpSORT_STABLE;
8161 if (o->op_type == OP_SORT && o->op_flags & OPf_STACKED)
8163 firstkid = cLISTOPo->op_first->op_sibling; /* get past pushmark */
8164 if (o->op_flags & OPf_STACKED) { /* may have been cleared */
8166 OP *kid = cUNOPx(firstkid)->op_first; /* get past null */
8168 if (kid->op_type == OP_SCOPE || kid->op_type == OP_LEAVE) {
8170 if (kid->op_type == OP_SCOPE) {
8174 else if (kid->op_type == OP_LEAVE) {
8175 if (o->op_type == OP_SORT) {
8176 op_null(kid); /* wipe out leave */
8179 for (k = kLISTOP->op_first->op_next; k; k = k->op_next) {
8180 if (k->op_next == kid)
8182 /* don't descend into loops */
8183 else if (k->op_type == OP_ENTERLOOP
8184 || k->op_type == OP_ENTERITER)
8186 k = cLOOPx(k)->op_lastop;
8191 kid->op_next = 0; /* just disconnect the leave */
8192 k = kLISTOP->op_first;
8197 if (o->op_type == OP_SORT) {
8198 /* provide scalar context for comparison function/block */
8204 o->op_flags |= OPf_SPECIAL;
8206 else if (kid->op_type == OP_RV2SV || kid->op_type == OP_PADSV)
8209 firstkid = firstkid->op_sibling;
8212 /* provide list context for arguments */
8213 if (o->op_type == OP_SORT)
8220 S_simplify_sort(pTHX_ OP *o)
8223 register OP *kid = cLISTOPo->op_first->op_sibling; /* get past pushmark */
8229 PERL_ARGS_ASSERT_SIMPLIFY_SORT;
8231 if (!(o->op_flags & OPf_STACKED))
8233 GvMULTI_on(gv_fetchpvs("a", GV_ADD|GV_NOTQUAL, SVt_PV));
8234 GvMULTI_on(gv_fetchpvs("b", GV_ADD|GV_NOTQUAL, SVt_PV));
8235 kid = kUNOP->op_first; /* get past null */
8236 if (kid->op_type != OP_SCOPE)
8238 kid = kLISTOP->op_last; /* get past scope */
8239 switch(kid->op_type) {
8247 k = kid; /* remember this node*/
8248 if (kBINOP->op_first->op_type != OP_RV2SV)
8250 kid = kBINOP->op_first; /* get past cmp */
8251 if (kUNOP->op_first->op_type != OP_GV)
8253 kid = kUNOP->op_first; /* get past rv2sv */
8255 if (GvSTASH(gv) != PL_curstash)
8257 gvname = GvNAME(gv);
8258 if (*gvname == 'a' && gvname[1] == '\0')
8260 else if (*gvname == 'b' && gvname[1] == '\0')
8265 kid = k; /* back to cmp */
8266 if (kBINOP->op_last->op_type != OP_RV2SV)
8268 kid = kBINOP->op_last; /* down to 2nd arg */
8269 if (kUNOP->op_first->op_type != OP_GV)
8271 kid = kUNOP->op_first; /* get past rv2sv */
8273 if (GvSTASH(gv) != PL_curstash)
8275 gvname = GvNAME(gv);
8277 ? !(*gvname == 'a' && gvname[1] == '\0')
8278 : !(*gvname == 'b' && gvname[1] == '\0'))
8280 o->op_flags &= ~(OPf_STACKED | OPf_SPECIAL);
8282 o->op_private |= OPpSORT_DESCEND;
8283 if (k->op_type == OP_NCMP)
8284 o->op_private |= OPpSORT_NUMERIC;
8285 if (k->op_type == OP_I_NCMP)
8286 o->op_private |= OPpSORT_NUMERIC | OPpSORT_INTEGER;
8287 kid = cLISTOPo->op_first->op_sibling;
8288 cLISTOPo->op_first->op_sibling = kid->op_sibling; /* bypass old block */
8290 op_getmad(kid,o,'S'); /* then delete it */
8292 op_free(kid); /* then delete it */
8297 Perl_ck_split(pTHX_ OP *o)
8302 PERL_ARGS_ASSERT_CK_SPLIT;
8304 if (o->op_flags & OPf_STACKED)
8305 return no_fh_allowed(o);
8307 kid = cLISTOPo->op_first;
8308 if (kid->op_type != OP_NULL)
8309 Perl_croak(aTHX_ "panic: ck_split");
8310 kid = kid->op_sibling;
8311 op_free(cLISTOPo->op_first);
8312 cLISTOPo->op_first = kid;
8314 cLISTOPo->op_first = kid = newSVOP(OP_CONST, 0, newSVpvs(" "));
8315 cLISTOPo->op_last = kid; /* There was only one element previously */
8318 if (kid->op_type != OP_MATCH || kid->op_flags & OPf_STACKED) {
8319 OP * const sibl = kid->op_sibling;
8320 kid->op_sibling = 0;
8321 kid = pmruntime( newPMOP(OP_MATCH, OPf_SPECIAL), kid, 0);
8322 if (cLISTOPo->op_first == cLISTOPo->op_last)
8323 cLISTOPo->op_last = kid;
8324 cLISTOPo->op_first = kid;
8325 kid->op_sibling = sibl;
8328 kid->op_type = OP_PUSHRE;
8329 kid->op_ppaddr = PL_ppaddr[OP_PUSHRE];
8331 if (((PMOP *)kid)->op_pmflags & PMf_GLOBAL) {
8332 Perl_ck_warner(aTHX_ packWARN(WARN_REGEXP),
8333 "Use of /g modifier is meaningless in split");
8336 if (!kid->op_sibling)
8337 append_elem(OP_SPLIT, o, newDEFSVOP());
8339 kid = kid->op_sibling;
8342 if (!kid->op_sibling)
8343 append_elem(OP_SPLIT, o, newSVOP(OP_CONST, 0, newSViv(0)));
8344 assert(kid->op_sibling);
8346 kid = kid->op_sibling;
8349 if (kid->op_sibling)
8350 return too_many_arguments(o,OP_DESC(o));
8356 Perl_ck_join(pTHX_ OP *o)
8358 const OP * const kid = cLISTOPo->op_first->op_sibling;
8360 PERL_ARGS_ASSERT_CK_JOIN;
8362 if (kid && kid->op_type == OP_MATCH) {
8363 if (ckWARN(WARN_SYNTAX)) {
8364 const REGEXP *re = PM_GETRE(kPMOP);
8365 const char *pmstr = re ? RX_PRECOMP_const(re) : "STRING";
8366 const STRLEN len = re ? RX_PRELEN(re) : 6;
8367 Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
8368 "/%.*s/ should probably be written as \"%.*s\"",
8369 (int)len, pmstr, (int)len, pmstr);
8376 Perl_ck_subr(pTHX_ OP *o)
8379 OP *prev = ((cUNOPo->op_first->op_sibling)
8380 ? cUNOPo : ((UNOP*)cUNOPo->op_first))->op_first;
8381 OP *o2 = prev->op_sibling;
8383 const char *proto = NULL;
8384 const char *proto_end = NULL;
8389 I32 contextclass = 0;
8390 const char *e = NULL;
8393 PERL_ARGS_ASSERT_CK_SUBR;
8395 o->op_private |= OPpENTERSUB_HASTARG;
8396 for (cvop = o2; cvop->op_sibling; cvop = cvop->op_sibling) ;
8397 if (cvop->op_type == OP_RV2CV) {
8398 o->op_private |= (cvop->op_private & OPpENTERSUB_AMPER);
8399 op_null(cvop); /* disable rv2cv */
8400 if (!(o->op_private & OPpENTERSUB_AMPER)) {
8401 SVOP *tmpop = (SVOP*)((UNOP*)cvop)->op_first;
8403 switch (tmpop->op_type) {
8405 gv = cGVOPx_gv(tmpop);
8408 tmpop->op_private |= OPpEARLY_CV;
8411 SV *sv = cSVOPx_sv(tmpop);
8412 if (SvROK(sv) && SvTYPE(SvRV(sv)) == SVt_PVCV)
8416 if (cv && SvPOK(cv)) {
8418 namegv = gv && CvANON(cv) ? gv : CvGV(cv);
8419 proto = SvPV(MUTABLE_SV(cv), len);
8420 proto_end = proto + len;
8424 else if (cvop->op_type == OP_METHOD || cvop->op_type == OP_METHOD_NAMED) {
8425 if (o2->op_type == OP_CONST)
8426 o2->op_private &= ~OPpCONST_STRICT;
8427 else if (o2->op_type == OP_LIST) {
8428 OP * const sib = ((UNOP*)o2)->op_first->op_sibling;
8429 if (sib && sib->op_type == OP_CONST)
8430 sib->op_private &= ~OPpCONST_STRICT;
8433 o->op_private |= (PL_hints & HINT_STRICT_REFS);
8434 if (PERLDB_SUB && PL_curstash != PL_debstash)
8435 o->op_private |= OPpENTERSUB_DB;
8436 while (o2 != cvop) {
8438 if (PL_madskills && o2->op_type == OP_STUB) {
8439 o2 = o2->op_sibling;
8442 if (PL_madskills && o2->op_type == OP_NULL)
8443 o3 = ((UNOP*)o2)->op_first;
8447 if (proto >= proto_end)
8448 return too_many_arguments(o, gv_ename(namegv));
8456 /* _ must be at the end */
8457 if (proto[1] && proto[1] != ';')
8472 if (o3->op_type != OP_REFGEN && o3->op_type != OP_UNDEF)
8474 arg == 1 ? "block or sub {}" : "sub {}",
8475 gv_ename(namegv), o3);
8478 /* '*' allows any scalar type, including bareword */
8481 if (o3->op_type == OP_RV2GV)
8482 goto wrapref; /* autoconvert GLOB -> GLOBref */
8483 else if (o3->op_type == OP_CONST)
8484 o3->op_private &= ~OPpCONST_STRICT;
8485 else if (o3->op_type == OP_ENTERSUB) {
8486 /* accidental subroutine, revert to bareword */
8487 OP *gvop = ((UNOP*)o3)->op_first;
8488 if (gvop && gvop->op_type == OP_NULL) {
8489 gvop = ((UNOP*)gvop)->op_first;
8491 for (; gvop->op_sibling; gvop = gvop->op_sibling)
8494 (gvop->op_private & OPpENTERSUB_NOPAREN) &&
8495 (gvop = ((UNOP*)gvop)->op_first) &&
8496 gvop->op_type == OP_GV)
8498 GV * const gv = cGVOPx_gv(gvop);
8499 OP * const sibling = o2->op_sibling;
8500 SV * const n = newSVpvs("");
8502 OP * const oldo2 = o2;
8506 gv_fullname4(n, gv, "", FALSE);
8507 o2 = newSVOP(OP_CONST, 0, n);
8508 op_getmad(oldo2,o2,'O');
8509 prev->op_sibling = o2;
8510 o2->op_sibling = sibling;
8526 if (contextclass++ == 0) {
8527 e = strchr(proto, ']');
8528 if (!e || e == proto)
8537 const char *p = proto;
8538 const char *const end = proto;
8540 while (*--p != '[') {}
8541 bad_type(arg, Perl_form(aTHX_ "one of %.*s",
8543 gv_ename(namegv), o3);
8548 if (o3->op_type == OP_RV2GV)
8551 bad_type(arg, "symbol", gv_ename(namegv), o3);
8554 if (o3->op_type == OP_ENTERSUB)
8557 bad_type(arg, "subroutine entry", gv_ename(namegv),
8561 if (o3->op_type == OP_RV2SV ||
8562 o3->op_type == OP_PADSV ||
8563 o3->op_type == OP_HELEM ||
8564 o3->op_type == OP_AELEM)
8567 bad_type(arg, "scalar", gv_ename(namegv), o3);
8570 if (o3->op_type == OP_RV2AV ||
8571 o3->op_type == OP_PADAV)
8574 bad_type(arg, "array", gv_ename(namegv), o3);
8577 if (o3->op_type == OP_RV2HV ||
8578 o3->op_type == OP_PADHV)
8581 bad_type(arg, "hash", gv_ename(namegv), o3);
8586 OP* const sib = kid->op_sibling;
8587 kid->op_sibling = 0;
8588 o2 = newUNOP(OP_REFGEN, 0, kid);
8589 o2->op_sibling = sib;
8590 prev->op_sibling = o2;
8592 if (contextclass && e) {
8607 Perl_croak(aTHX_ "Malformed prototype for %s: %"SVf,
8608 gv_ename(namegv), SVfARG(cv));
8613 mod(o2, OP_ENTERSUB);
8615 o2 = o2->op_sibling;
8617 if (o2 == cvop && proto && *proto == '_') {
8618 /* generate an access to $_ */
8620 o2->op_sibling = prev->op_sibling;
8621 prev->op_sibling = o2; /* instead of cvop */
8623 if (proto && !optional && proto_end > proto &&
8624 (*proto != '@' && *proto != '%' && *proto != ';' && *proto != '_'))
8625 return too_few_arguments(o, gv_ename(namegv));
8628 OP * const oldo = o;
8632 o=newSVOP(OP_CONST, 0, newSViv(0));
8633 op_getmad(oldo,o,'O');
8639 Perl_ck_svconst(pTHX_ OP *o)
8641 PERL_ARGS_ASSERT_CK_SVCONST;
8642 PERL_UNUSED_CONTEXT;
8643 SvREADONLY_on(cSVOPo->op_sv);
8648 Perl_ck_chdir(pTHX_ OP *o)
8650 if (o->op_flags & OPf_KIDS) {
8651 SVOP * const kid = (SVOP*)cUNOPo->op_first;
8653 if (kid && kid->op_type == OP_CONST &&
8654 (kid->op_private & OPpCONST_BARE))
8656 o->op_flags |= OPf_SPECIAL;
8657 kid->op_private &= ~OPpCONST_STRICT;
8664 Perl_ck_trunc(pTHX_ OP *o)
8666 PERL_ARGS_ASSERT_CK_TRUNC;
8668 if (o->op_flags & OPf_KIDS) {
8669 SVOP *kid = (SVOP*)cUNOPo->op_first;
8671 if (kid->op_type == OP_NULL)
8672 kid = (SVOP*)kid->op_sibling;
8673 if (kid && kid->op_type == OP_CONST &&
8674 (kid->op_private & OPpCONST_BARE))
8676 o->op_flags |= OPf_SPECIAL;
8677 kid->op_private &= ~OPpCONST_STRICT;
8684 Perl_ck_unpack(pTHX_ OP *o)
8686 OP *kid = cLISTOPo->op_first;
8688 PERL_ARGS_ASSERT_CK_UNPACK;
8690 if (kid->op_sibling) {
8691 kid = kid->op_sibling;
8692 if (!kid->op_sibling)
8693 kid->op_sibling = newDEFSVOP();
8699 Perl_ck_substr(pTHX_ OP *o)
8701 PERL_ARGS_ASSERT_CK_SUBSTR;
8704 if ((o->op_flags & OPf_KIDS) && (o->op_private == 4)) {
8705 OP *kid = cLISTOPo->op_first;
8707 if (kid->op_type == OP_NULL)
8708 kid = kid->op_sibling;
8710 kid->op_flags |= OPf_MOD;
8717 Perl_ck_each(pTHX_ OP *o)
8720 OP *kid = o->op_flags & OPf_KIDS ? cLISTOPo->op_first : NULL;
8722 PERL_ARGS_ASSERT_CK_EACH;
8725 if (kid->op_type == OP_PADAV || kid->op_type == OP_RV2AV) {
8726 const unsigned new_type = o->op_type == OP_EACH ? OP_AEACH
8727 : o->op_type == OP_KEYS ? OP_AKEYS : OP_AVALUES;
8728 o->op_type = new_type;
8729 o->op_ppaddr = PL_ppaddr[new_type];
8731 else if (!(kid->op_type == OP_PADHV || kid->op_type == OP_RV2HV
8732 || (kid->op_type == OP_CONST && kid->op_private & OPpCONST_BARE)
8734 bad_type(1, "hash or array", PL_op_desc[o->op_type], kid);
8741 /* caller is supposed to assign the return to the
8742 container of the rep_op var */
8744 S_opt_scalarhv(pTHX_ OP *rep_op) {
8748 PERL_ARGS_ASSERT_OPT_SCALARHV;
8750 NewOp(1101, unop, 1, UNOP);
8751 unop->op_type = (OPCODE)OP_BOOLKEYS;
8752 unop->op_ppaddr = PL_ppaddr[OP_BOOLKEYS];
8753 unop->op_flags = (U8)(OPf_WANT_SCALAR | OPf_KIDS );
8754 unop->op_private = (U8)(1 | ((OPf_WANT_SCALAR | OPf_KIDS) >> 8));
8755 unop->op_first = rep_op;
8756 unop->op_next = rep_op->op_next;
8757 rep_op->op_next = (OP*)unop;
8758 rep_op->op_flags|=(OPf_REF | OPf_MOD);
8759 unop->op_sibling = rep_op->op_sibling;
8760 rep_op->op_sibling = NULL;
8761 /* unop->op_targ = pad_alloc(OP_BOOLKEYS, SVs_PADTMP); */
8762 if (rep_op->op_type == OP_PADHV) {
8763 rep_op->op_flags &= ~OPf_WANT_SCALAR;
8764 rep_op->op_flags |= OPf_WANT_LIST;
8769 /* Checks if o acts as an in-place operator on an array. oright points to the
8770 * beginning of the right-hand side. Returns the left-hand side of the
8771 * assignment if o acts in-place, or NULL otherwise. */
8774 S_is_inplace_av(pTHX_ OP *o, OP *oright) {
8778 PERL_ARGS_ASSERT_IS_INPLACE_AV;
8781 (oright->op_type != OP_RV2AV && oright->op_type != OP_PADAV)
8782 || oright->op_next != o
8783 || (oright->op_private & OPpLVAL_INTRO)
8787 /* o2 follows the chain of op_nexts through the LHS of the
8788 * assign (if any) to the aassign op itself */
8790 if (!o2 || o2->op_type != OP_NULL)
8793 if (!o2 || o2->op_type != OP_PUSHMARK)
8796 if (o2 && o2->op_type == OP_GV)
8799 || (o2->op_type != OP_PADAV && o2->op_type != OP_RV2AV)
8800 || (o2->op_private & OPpLVAL_INTRO)
8805 if (!o2 || o2->op_type != OP_NULL)
8808 if (!o2 || o2->op_type != OP_AASSIGN
8809 || (o2->op_flags & OPf_WANT) != OPf_WANT_VOID)
8812 /* check that the sort is the first arg on RHS of assign */
8814 o2 = cUNOPx(o2)->op_first;
8815 if (!o2 || o2->op_type != OP_NULL)
8817 o2 = cUNOPx(o2)->op_first;
8818 if (!o2 || o2->op_type != OP_PUSHMARK)
8820 if (o2->op_sibling != o)
8823 /* check the array is the same on both sides */
8824 if (oleft->op_type == OP_RV2AV) {
8825 if (oright->op_type != OP_RV2AV
8826 || !cUNOPx(oright)->op_first
8827 || cUNOPx(oright)->op_first->op_type != OP_GV
8828 || cGVOPx_gv(cUNOPx(oleft)->op_first) !=
8829 cGVOPx_gv(cUNOPx(oright)->op_first)
8833 else if (oright->op_type != OP_PADAV
8834 || oright->op_targ != oleft->op_targ
8841 /* A peephole optimizer. We visit the ops in the order they're to execute.
8842 * See the comments at the top of this file for more details about when
8843 * peep() is called */
8846 Perl_rpeep(pTHX_ register OP *o)
8849 register OP* oldop = NULL;
8851 if (!o || o->op_opt)
8855 SAVEVPTR(PL_curcop);
8856 for (; o; o = o->op_next) {
8859 /* By default, this op has now been optimised. A couple of cases below
8860 clear this again. */
8863 switch (o->op_type) {
8865 PL_curcop = ((COP*)o); /* for warnings */
8868 PL_curcop = ((COP*)o); /* for warnings */
8870 /* Two NEXTSTATEs in a row serve no purpose. Except if they happen
8871 to carry two labels. For now, take the easier option, and skip
8872 this optimisation if the first NEXTSTATE has a label. */
8873 if (!CopLABEL((COP*)o)) {
8874 OP *nextop = o->op_next;
8875 while (nextop && nextop->op_type == OP_NULL)
8876 nextop = nextop->op_next;
8878 if (nextop && (nextop->op_type == OP_NEXTSTATE)) {
8879 COP *firstcop = (COP *)o;
8880 COP *secondcop = (COP *)nextop;
8881 /* We want the COP pointed to by o (and anything else) to
8882 become the next COP down the line. */
8885 firstcop->op_next = secondcop->op_next;
8887 /* Now steal all its pointers, and duplicate the other
8889 firstcop->cop_line = secondcop->cop_line;
8891 firstcop->cop_stashpv = secondcop->cop_stashpv;
8892 firstcop->cop_file = secondcop->cop_file;
8894 firstcop->cop_stash = secondcop->cop_stash;
8895 firstcop->cop_filegv = secondcop->cop_filegv;
8897 firstcop->cop_hints = secondcop->cop_hints;
8898 firstcop->cop_seq = secondcop->cop_seq;
8899 firstcop->cop_warnings = secondcop->cop_warnings;
8900 firstcop->cop_hints_hash = secondcop->cop_hints_hash;
8903 secondcop->cop_stashpv = NULL;
8904 secondcop->cop_file = NULL;
8906 secondcop->cop_stash = NULL;
8907 secondcop->cop_filegv = NULL;
8909 secondcop->cop_warnings = NULL;
8910 secondcop->cop_hints_hash = NULL;
8912 /* If we use op_null(), and hence leave an ex-COP, some
8913 warnings are misreported. For example, the compile-time
8914 error in 'use strict; no strict refs;' */
8915 secondcop->op_type = OP_NULL;
8916 secondcop->op_ppaddr = PL_ppaddr[OP_NULL];
8922 if (cSVOPo->op_private & OPpCONST_STRICT)
8923 no_bareword_allowed(o);
8926 case OP_METHOD_NAMED:
8927 /* Relocate sv to the pad for thread safety.
8928 * Despite being a "constant", the SV is written to,
8929 * for reference counts, sv_upgrade() etc. */
8931 const PADOFFSET ix = pad_alloc(OP_CONST, SVs_PADTMP);
8932 if (o->op_type != OP_METHOD_NAMED && SvPADTMP(cSVOPo->op_sv)) {
8933 /* If op_sv is already a PADTMP then it is being used by
8934 * some pad, so make a copy. */
8935 sv_setsv(PAD_SVl(ix),cSVOPo->op_sv);
8936 SvREADONLY_on(PAD_SVl(ix));
8937 SvREFCNT_dec(cSVOPo->op_sv);
8939 else if (o->op_type != OP_METHOD_NAMED
8940 && cSVOPo->op_sv == &PL_sv_undef) {
8941 /* PL_sv_undef is hack - it's unsafe to store it in the
8942 AV that is the pad, because av_fetch treats values of
8943 PL_sv_undef as a "free" AV entry and will merrily
8944 replace them with a new SV, causing pad_alloc to think
8945 that this pad slot is free. (When, clearly, it is not)
8947 SvOK_off(PAD_SVl(ix));
8948 SvPADTMP_on(PAD_SVl(ix));
8949 SvREADONLY_on(PAD_SVl(ix));
8952 SvREFCNT_dec(PAD_SVl(ix));
8953 SvPADTMP_on(cSVOPo->op_sv);
8954 PAD_SETSV(ix, cSVOPo->op_sv);
8955 /* XXX I don't know how this isn't readonly already. */
8956 SvREADONLY_on(PAD_SVl(ix));
8958 cSVOPo->op_sv = NULL;
8965 if (o->op_next && o->op_next->op_type == OP_STRINGIFY) {
8966 if (o->op_next->op_private & OPpTARGET_MY) {
8967 if (o->op_flags & OPf_STACKED) /* chained concats */
8968 break; /* ignore_optimization */
8970 /* assert(PL_opargs[o->op_type] & OA_TARGLEX); */
8971 o->op_targ = o->op_next->op_targ;
8972 o->op_next->op_targ = 0;
8973 o->op_private |= OPpTARGET_MY;
8976 op_null(o->op_next);
8980 if ((o->op_flags & OPf_WANT) != OPf_WANT_LIST) {
8981 break; /* Scalar stub must produce undef. List stub is noop */
8985 if (o->op_targ == OP_NEXTSTATE
8986 || o->op_targ == OP_DBSTATE)
8988 PL_curcop = ((COP*)o);
8990 /* XXX: We avoid setting op_seq here to prevent later calls
8991 to rpeep() from mistakenly concluding that optimisation
8992 has already occurred. This doesn't fix the real problem,
8993 though (See 20010220.007). AMS 20010719 */
8994 /* op_seq functionality is now replaced by op_opt */
9001 if (oldop && o->op_next) {
9002 oldop->op_next = o->op_next;
9010 if (o->op_type == OP_PADAV || o->op_next->op_type == OP_RV2AV) {
9011 OP* const pop = (o->op_type == OP_PADAV) ?
9012 o->op_next : o->op_next->op_next;
9014 if (pop && pop->op_type == OP_CONST &&
9015 ((PL_op = pop->op_next)) &&
9016 pop->op_next->op_type == OP_AELEM &&
9017 !(pop->op_next->op_private &
9018 (OPpLVAL_INTRO|OPpLVAL_DEFER|OPpDEREF|OPpMAYBE_LVSUB)) &&
9019 (i = SvIV(((SVOP*)pop)->op_sv) - CopARYBASE_get(PL_curcop))
9024 if (cSVOPx(pop)->op_private & OPpCONST_STRICT)
9025 no_bareword_allowed(pop);
9026 if (o->op_type == OP_GV)
9027 op_null(o->op_next);
9028 op_null(pop->op_next);
9030 o->op_flags |= pop->op_next->op_flags & OPf_MOD;
9031 o->op_next = pop->op_next->op_next;
9032 o->op_ppaddr = PL_ppaddr[OP_AELEMFAST];
9033 o->op_private = (U8)i;
9034 if (o->op_type == OP_GV) {
9039 o->op_flags |= OPf_SPECIAL;
9040 o->op_type = OP_AELEMFAST;
9045 if (o->op_next->op_type == OP_RV2SV) {
9046 if (!(o->op_next->op_private & OPpDEREF)) {
9047 op_null(o->op_next);
9048 o->op_private |= o->op_next->op_private & (OPpLVAL_INTRO
9050 o->op_next = o->op_next->op_next;
9051 o->op_type = OP_GVSV;
9052 o->op_ppaddr = PL_ppaddr[OP_GVSV];
9055 else if ((o->op_private & OPpEARLY_CV) && ckWARN(WARN_PROTOTYPE)) {
9056 GV * const gv = cGVOPo_gv;
9057 if (SvTYPE(gv) == SVt_PVGV && GvCV(gv) && SvPVX_const(GvCV(gv))) {
9058 /* XXX could check prototype here instead of just carping */
9059 SV * const sv = sv_newmortal();
9060 gv_efullname3(sv, gv, NULL);
9061 Perl_warner(aTHX_ packWARN(WARN_PROTOTYPE),
9062 "%"SVf"() called too early to check prototype",
9066 else if (o->op_next->op_type == OP_READLINE
9067 && o->op_next->op_next->op_type == OP_CONCAT
9068 && (o->op_next->op_next->op_flags & OPf_STACKED))
9070 /* Turn "$a .= <FH>" into an OP_RCATLINE. AMS 20010917 */
9071 o->op_type = OP_RCATLINE;
9072 o->op_flags |= OPf_STACKED;
9073 o->op_ppaddr = PL_ppaddr[OP_RCATLINE];
9074 op_null(o->op_next->op_next);
9075 op_null(o->op_next);
9085 fop = cUNOP->op_first;
9093 fop = cLOGOP->op_first;
9094 sop = fop->op_sibling;
9095 while (cLOGOP->op_other->op_type == OP_NULL)
9096 cLOGOP->op_other = cLOGOP->op_other->op_next;
9097 CALL_RPEEP(cLOGOP->op_other);
9101 if ((fop->op_type == OP_PADHV || fop->op_type == OP_RV2HV)
9103 (sop->op_type == OP_PADHV || sop->op_type == OP_RV2HV)
9108 if (!((nop->op_flags & OPf_WANT) == OPf_WANT_VOID)) {
9109 while (nop && nop->op_next) {
9110 switch (nop->op_next->op_type) {
9115 lop = nop = nop->op_next;
9126 if ((lop->op_flags & OPf_WANT) == OPf_WANT_VOID) {
9127 if (fop->op_type == OP_PADHV || fop->op_type == OP_RV2HV)
9128 cLOGOP->op_first = opt_scalarhv(fop);
9129 if (sop && (sop->op_type == OP_PADHV || sop->op_type == OP_RV2HV))
9130 cLOGOP->op_first->op_sibling = opt_scalarhv(sop);
9146 while (cLOGOP->op_other->op_type == OP_NULL)
9147 cLOGOP->op_other = cLOGOP->op_other->op_next;
9148 CALL_RPEEP(cLOGOP->op_other);
9153 while (cLOOP->op_redoop->op_type == OP_NULL)
9154 cLOOP->op_redoop = cLOOP->op_redoop->op_next;
9155 CALL_RPEEP(cLOOP->op_redoop);
9156 while (cLOOP->op_nextop->op_type == OP_NULL)
9157 cLOOP->op_nextop = cLOOP->op_nextop->op_next;
9158 CALL_RPEEP(cLOOP->op_nextop);
9159 while (cLOOP->op_lastop->op_type == OP_NULL)
9160 cLOOP->op_lastop = cLOOP->op_lastop->op_next;
9161 CALL_RPEEP(cLOOP->op_lastop);
9165 assert(!(cPMOP->op_pmflags & PMf_ONCE));
9166 while (cPMOP->op_pmstashstartu.op_pmreplstart &&
9167 cPMOP->op_pmstashstartu.op_pmreplstart->op_type == OP_NULL)
9168 cPMOP->op_pmstashstartu.op_pmreplstart
9169 = cPMOP->op_pmstashstartu.op_pmreplstart->op_next;
9170 CALL_RPEEP(cPMOP->op_pmstashstartu.op_pmreplstart);
9174 if (o->op_next && o->op_next->op_type == OP_NEXTSTATE
9175 && ckWARN(WARN_SYNTAX))
9177 if (o->op_next->op_sibling) {
9178 const OPCODE type = o->op_next->op_sibling->op_type;
9179 if (type != OP_EXIT && type != OP_WARN && type != OP_DIE) {
9180 const line_t oldline = CopLINE(PL_curcop);
9181 CopLINE_set(PL_curcop, CopLINE((COP*)o->op_next));
9182 Perl_warner(aTHX_ packWARN(WARN_EXEC),
9183 "Statement unlikely to be reached");
9184 Perl_warner(aTHX_ packWARN(WARN_EXEC),
9185 "\t(Maybe you meant system() when you said exec()?)\n");
9186 CopLINE_set(PL_curcop, oldline);
9197 const char *key = NULL;
9200 if (((BINOP*)o)->op_last->op_type != OP_CONST)
9203 /* Make the CONST have a shared SV */
9204 svp = cSVOPx_svp(((BINOP*)o)->op_last);
9205 if (!SvFAKE(sv = *svp) || !SvREADONLY(sv)) {
9206 key = SvPV_const(sv, keylen);
9207 lexname = newSVpvn_share(key,
9208 SvUTF8(sv) ? -(I32)keylen : (I32)keylen,
9214 if ((o->op_private & (OPpLVAL_INTRO)))
9217 rop = (UNOP*)((BINOP*)o)->op_first;
9218 if (rop->op_type != OP_RV2HV || rop->op_first->op_type != OP_PADSV)
9220 lexname = *av_fetch(PL_comppad_name, rop->op_first->op_targ, TRUE);
9221 if (!SvPAD_TYPED(lexname))
9223 fields = (GV**)hv_fetchs(SvSTASH(lexname), "FIELDS", FALSE);
9224 if (!fields || !GvHV(*fields))
9226 key = SvPV_const(*svp, keylen);
9227 if (!hv_fetch(GvHV(*fields), key,
9228 SvUTF8(*svp) ? -(I32)keylen : (I32)keylen, FALSE))
9230 Perl_croak(aTHX_ "No such class field \"%s\" "
9231 "in variable %s of type %s",
9232 key, SvPV_nolen_const(lexname), HvNAME_get(SvSTASH(lexname)));
9245 SVOP *first_key_op, *key_op;
9247 if ((o->op_private & (OPpLVAL_INTRO))
9248 /* I bet there's always a pushmark... */
9249 || ((LISTOP*)o)->op_first->op_sibling->op_type != OP_LIST)
9250 /* hmmm, no optimization if list contains only one key. */
9252 rop = (UNOP*)((LISTOP*)o)->op_last;
9253 if (rop->op_type != OP_RV2HV)
9255 if (rop->op_first->op_type == OP_PADSV)
9256 /* @$hash{qw(keys here)} */
9257 rop = (UNOP*)rop->op_first;
9259 /* @{$hash}{qw(keys here)} */
9260 if (rop->op_first->op_type == OP_SCOPE
9261 && cLISTOPx(rop->op_first)->op_last->op_type == OP_PADSV)
9263 rop = (UNOP*)cLISTOPx(rop->op_first)->op_last;
9269 lexname = *av_fetch(PL_comppad_name, rop->op_targ, TRUE);
9270 if (!SvPAD_TYPED(lexname))
9272 fields = (GV**)hv_fetchs(SvSTASH(lexname), "FIELDS", FALSE);
9273 if (!fields || !GvHV(*fields))
9275 /* Again guessing that the pushmark can be jumped over.... */
9276 first_key_op = (SVOP*)((LISTOP*)((LISTOP*)o)->op_first->op_sibling)
9277 ->op_first->op_sibling;
9278 for (key_op = first_key_op; key_op;
9279 key_op = (SVOP*)key_op->op_sibling) {
9280 if (key_op->op_type != OP_CONST)
9282 svp = cSVOPx_svp(key_op);
9283 key = SvPV_const(*svp, keylen);
9284 if (!hv_fetch(GvHV(*fields), key,
9285 SvUTF8(*svp) ? -(I32)keylen : (I32)keylen, FALSE))
9287 Perl_croak(aTHX_ "No such class field \"%s\" "
9288 "in variable %s of type %s",
9289 key, SvPV_nolen(lexname), HvNAME_get(SvSTASH(lexname)));
9298 && ( oldop->op_type == OP_AELEM
9299 || oldop->op_type == OP_PADSV
9300 || oldop->op_type == OP_RV2SV
9301 || oldop->op_type == OP_RV2GV
9302 || oldop->op_type == OP_HELEM
9304 && (oldop->op_private & OPpDEREF)
9306 o->op_private |= OPpDEREFed;
9310 /* will point to RV2AV or PADAV op on LHS/RHS of assign */
9314 /* check that RHS of sort is a single plain array */
9315 OP *oright = cUNOPo->op_first;
9316 if (!oright || oright->op_type != OP_PUSHMARK)
9319 /* reverse sort ... can be optimised. */
9320 if (!cUNOPo->op_sibling) {
9321 /* Nothing follows us on the list. */
9322 OP * const reverse = o->op_next;
9324 if (reverse->op_type == OP_REVERSE &&
9325 (reverse->op_flags & OPf_WANT) == OPf_WANT_LIST) {
9326 OP * const pushmark = cUNOPx(reverse)->op_first;
9327 if (pushmark && (pushmark->op_type == OP_PUSHMARK)
9328 && (cUNOPx(pushmark)->op_sibling == o)) {
9329 /* reverse -> pushmark -> sort */
9330 o->op_private |= OPpSORT_REVERSE;
9332 pushmark->op_next = oright->op_next;
9338 /* make @a = sort @a act in-place */
9340 oright = cUNOPx(oright)->op_sibling;
9343 if (oright->op_type == OP_NULL) { /* skip sort block/sub */
9344 oright = cUNOPx(oright)->op_sibling;
9347 oleft = is_inplace_av(o, oright);
9351 /* transfer MODishness etc from LHS arg to RHS arg */
9352 oright->op_flags = oleft->op_flags;
9353 o->op_private |= OPpSORT_INPLACE;
9355 /* excise push->gv->rv2av->null->aassign */
9356 o2 = o->op_next->op_next;
9357 op_null(o2); /* PUSHMARK */
9359 if (o2->op_type == OP_GV) {
9360 op_null(o2); /* GV */
9363 op_null(o2); /* RV2AV or PADAV */
9364 o2 = o2->op_next->op_next;
9365 op_null(o2); /* AASSIGN */
9367 o->op_next = o2->op_next;
9373 OP *ourmark, *theirmark, *ourlast, *iter, *expushmark, *rv2av;
9376 LISTOP *enter, *exlist;
9378 /* @a = reverse @a */
9379 if ((oright = cLISTOPo->op_first)
9380 && (oright->op_type == OP_PUSHMARK)
9381 && (oright = oright->op_sibling)
9382 && (oleft = is_inplace_av(o, oright))) {
9385 /* transfer MODishness etc from LHS arg to RHS arg */
9386 oright->op_flags = oleft->op_flags;
9387 o->op_private |= OPpREVERSE_INPLACE;
9389 /* excise push->gv->rv2av->null->aassign */
9390 o2 = o->op_next->op_next;
9391 op_null(o2); /* PUSHMARK */
9393 if (o2->op_type == OP_GV) {
9394 op_null(o2); /* GV */
9397 op_null(o2); /* RV2AV or PADAV */
9398 o2 = o2->op_next->op_next;
9399 op_null(o2); /* AASSIGN */
9401 o->op_next = o2->op_next;
9405 enter = (LISTOP *) o->op_next;
9408 if (enter->op_type == OP_NULL) {
9409 enter = (LISTOP *) enter->op_next;
9413 /* for $a (...) will have OP_GV then OP_RV2GV here.
9414 for (...) just has an OP_GV. */
9415 if (enter->op_type == OP_GV) {
9416 gvop = (OP *) enter;
9417 enter = (LISTOP *) enter->op_next;
9420 if (enter->op_type == OP_RV2GV) {
9421 enter = (LISTOP *) enter->op_next;
9427 if (enter->op_type != OP_ENTERITER)
9430 iter = enter->op_next;
9431 if (!iter || iter->op_type != OP_ITER)
9434 expushmark = enter->op_first;
9435 if (!expushmark || expushmark->op_type != OP_NULL
9436 || expushmark->op_targ != OP_PUSHMARK)
9439 exlist = (LISTOP *) expushmark->op_sibling;
9440 if (!exlist || exlist->op_type != OP_NULL
9441 || exlist->op_targ != OP_LIST)
9444 if (exlist->op_last != o) {
9445 /* Mmm. Was expecting to point back to this op. */
9448 theirmark = exlist->op_first;
9449 if (!theirmark || theirmark->op_type != OP_PUSHMARK)
9452 if (theirmark->op_sibling != o) {
9453 /* There's something between the mark and the reverse, eg
9454 for (1, reverse (...))
9459 ourmark = ((LISTOP *)o)->op_first;
9460 if (!ourmark || ourmark->op_type != OP_PUSHMARK)
9463 ourlast = ((LISTOP *)o)->op_last;
9464 if (!ourlast || ourlast->op_next != o)
9467 rv2av = ourmark->op_sibling;
9468 if (rv2av && rv2av->op_type == OP_RV2AV && rv2av->op_sibling == 0
9469 && rv2av->op_flags == (OPf_WANT_LIST | OPf_KIDS)
9470 && enter->op_flags == (OPf_WANT_LIST | OPf_KIDS)) {
9471 /* We're just reversing a single array. */
9472 rv2av->op_flags = OPf_WANT_SCALAR | OPf_KIDS | OPf_REF;
9473 enter->op_flags |= OPf_STACKED;
9476 /* We don't have control over who points to theirmark, so sacrifice
9478 theirmark->op_next = ourmark->op_next;
9479 theirmark->op_flags = ourmark->op_flags;
9480 ourlast->op_next = gvop ? gvop : (OP *) enter;
9483 enter->op_private |= OPpITER_REVERSED;
9484 iter->op_private |= OPpITER_REVERSED;
9491 UNOP *refgen, *rv2cv;
9494 if ((o->op_flags & OPf_WANT) != OPf_WANT_VOID)
9497 if ((o->op_private & ~OPpASSIGN_BACKWARDS) != 2)
9500 rv2gv = ((BINOP *)o)->op_last;
9501 if (!rv2gv || rv2gv->op_type != OP_RV2GV)
9504 refgen = (UNOP *)((BINOP *)o)->op_first;
9506 if (!refgen || refgen->op_type != OP_REFGEN)
9509 exlist = (LISTOP *)refgen->op_first;
9510 if (!exlist || exlist->op_type != OP_NULL
9511 || exlist->op_targ != OP_LIST)
9514 if (exlist->op_first->op_type != OP_PUSHMARK)
9517 rv2cv = (UNOP*)exlist->op_last;
9519 if (rv2cv->op_type != OP_RV2CV)
9522 assert ((rv2gv->op_private & OPpDONT_INIT_GV) == 0);
9523 assert ((o->op_private & OPpASSIGN_CV_TO_GV) == 0);
9524 assert ((rv2cv->op_private & OPpMAY_RETURN_CONSTANT) == 0);
9526 o->op_private |= OPpASSIGN_CV_TO_GV;
9527 rv2gv->op_private |= OPpDONT_INIT_GV;
9528 rv2cv->op_private |= OPpMAY_RETURN_CONSTANT;
9536 if (!(cPMOP->op_pmflags & PMf_ONCE)) {
9537 assert (!cPMOP->op_pmstashstartu.op_pmreplstart);
9547 Perl_peep(pTHX_ register OP *o)
9553 Perl_custom_op_name(pTHX_ const OP* o)
9556 const IV index = PTR2IV(o->op_ppaddr);
9560 PERL_ARGS_ASSERT_CUSTOM_OP_NAME;
9562 if (!PL_custom_op_names) /* This probably shouldn't happen */
9563 return (char *)PL_op_name[OP_CUSTOM];
9565 keysv = sv_2mortal(newSViv(index));
9567 he = hv_fetch_ent(PL_custom_op_names, keysv, 0, 0);
9569 return (char *)PL_op_name[OP_CUSTOM]; /* Don't know who you are */
9571 return SvPV_nolen(HeVAL(he));
9575 Perl_custom_op_desc(pTHX_ const OP* o)
9578 const IV index = PTR2IV(o->op_ppaddr);
9582 PERL_ARGS_ASSERT_CUSTOM_OP_DESC;
9584 if (!PL_custom_op_descs)
9585 return (char *)PL_op_desc[OP_CUSTOM];
9587 keysv = sv_2mortal(newSViv(index));
9589 he = hv_fetch_ent(PL_custom_op_descs, keysv, 0, 0);
9591 return (char *)PL_op_desc[OP_CUSTOM];
9593 return SvPV_nolen(HeVAL(he));
9598 /* Efficient sub that returns a constant scalar value. */
9600 const_sv_xsub(pTHX_ CV* cv)
9604 SV *const sv = MUTABLE_SV(XSANY.any_ptr);
9608 /* diag_listed_as: SKIPME */
9609 Perl_croak(aTHX_ "usage: %s::%s()",
9610 HvNAME_get(GvSTASH(CvGV(cv))), GvNAME(CvGV(cv)));
9623 * c-indentation-style: bsd
9625 * indent-tabs-mode: t
9628 * ex: set ts=8 sts=4 sw=4 noet: