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) CALL_FPTR(PL_peepp)(aTHX_ o)
107 #define CALL_OPFREEHOOK(o) if (PL_opfreehook) CALL_FPTR(PL_opfreehook)(aTHX_ o)
109 #if defined(PL_OP_SLAB_ALLOC)
111 #ifdef PERL_DEBUG_READONLY_OPS
112 # define PERL_SLAB_SIZE 4096
113 # include <sys/mman.h>
116 #ifndef PERL_SLAB_SIZE
117 #define PERL_SLAB_SIZE 2048
121 Perl_Slab_Alloc(pTHX_ size_t sz)
125 * To make incrementing use count easy PL_OpSlab is an I32 *
126 * To make inserting the link to slab PL_OpPtr is I32 **
127 * So compute size in units of sizeof(I32 *) as that is how Pl_OpPtr increments
128 * Add an overhead for pointer to slab and round up as a number of pointers
130 sz = (sz + 2*sizeof(I32 *) -1)/sizeof(I32 *);
131 if ((PL_OpSpace -= sz) < 0) {
132 #ifdef PERL_DEBUG_READONLY_OPS
133 /* We need to allocate chunk by chunk so that we can control the VM
135 PL_OpPtr = (I32**) mmap(0, PERL_SLAB_SIZE*sizeof(I32*), PROT_READ|PROT_WRITE,
136 MAP_ANON|MAP_PRIVATE, -1, 0);
138 DEBUG_m(PerlIO_printf(Perl_debug_log, "mapped %lu at %p\n",
139 (unsigned long) PERL_SLAB_SIZE*sizeof(I32*),
141 if(PL_OpPtr == MAP_FAILED) {
142 perror("mmap failed");
147 PL_OpPtr = (I32 **) PerlMemShared_calloc(PERL_SLAB_SIZE,sizeof(I32*));
152 /* We reserve the 0'th I32 sized chunk as a use count */
153 PL_OpSlab = (I32 *) PL_OpPtr;
154 /* Reduce size by the use count word, and by the size we need.
155 * Latter is to mimic the '-=' in the if() above
157 PL_OpSpace = PERL_SLAB_SIZE - (sizeof(I32)+sizeof(I32 **)-1)/sizeof(I32 **) - sz;
158 /* Allocation pointer starts at the top.
159 Theory: because we build leaves before trunk allocating at end
160 means that at run time access is cache friendly upward
162 PL_OpPtr += PERL_SLAB_SIZE;
164 #ifdef PERL_DEBUG_READONLY_OPS
165 /* We remember this slab. */
166 /* This implementation isn't efficient, but it is simple. */
167 PL_slabs = (I32**) realloc(PL_slabs, sizeof(I32**) * (PL_slab_count + 1));
168 PL_slabs[PL_slab_count++] = PL_OpSlab;
169 DEBUG_m(PerlIO_printf(Perl_debug_log, "Allocate %p\n", PL_OpSlab));
172 assert( PL_OpSpace >= 0 );
173 /* Move the allocation pointer down */
175 assert( PL_OpPtr > (I32 **) PL_OpSlab );
176 *PL_OpPtr = PL_OpSlab; /* Note which slab it belongs to */
177 (*PL_OpSlab)++; /* Increment use count of slab */
178 assert( PL_OpPtr+sz <= ((I32 **) PL_OpSlab + PERL_SLAB_SIZE) );
179 assert( *PL_OpSlab > 0 );
180 return (void *)(PL_OpPtr + 1);
183 #ifdef PERL_DEBUG_READONLY_OPS
185 Perl_pending_Slabs_to_ro(pTHX) {
186 /* Turn all the allocated op slabs read only. */
187 U32 count = PL_slab_count;
188 I32 **const slabs = PL_slabs;
190 /* Reset the array of pending OP slabs, as we're about to turn this lot
191 read only. Also, do it ahead of the loop in case the warn triggers,
192 and a warn handler has an eval */
197 /* Force a new slab for any further allocation. */
201 void *const start = slabs[count];
202 const size_t size = PERL_SLAB_SIZE* sizeof(I32*);
203 if(mprotect(start, size, PROT_READ)) {
204 Perl_warn(aTHX_ "mprotect for %p %lu failed with %d",
205 start, (unsigned long) size, errno);
213 S_Slab_to_rw(pTHX_ void *op)
215 I32 * const * const ptr = (I32 **) op;
216 I32 * const slab = ptr[-1];
218 PERL_ARGS_ASSERT_SLAB_TO_RW;
220 assert( ptr-1 > (I32 **) slab );
221 assert( ptr < ( (I32 **) slab + PERL_SLAB_SIZE) );
223 if(mprotect(slab, PERL_SLAB_SIZE*sizeof(I32*), PROT_READ|PROT_WRITE)) {
224 Perl_warn(aTHX_ "mprotect RW for %p %lu failed with %d",
225 slab, (unsigned long) PERL_SLAB_SIZE*sizeof(I32*), errno);
230 Perl_op_refcnt_inc(pTHX_ OP *o)
241 Perl_op_refcnt_dec(pTHX_ OP *o)
243 PERL_ARGS_ASSERT_OP_REFCNT_DEC;
248 # define Slab_to_rw(op)
252 Perl_Slab_Free(pTHX_ void *op)
254 I32 * const * const ptr = (I32 **) op;
255 I32 * const slab = ptr[-1];
256 PERL_ARGS_ASSERT_SLAB_FREE;
257 assert( ptr-1 > (I32 **) slab );
258 assert( ptr < ( (I32 **) slab + PERL_SLAB_SIZE) );
261 if (--(*slab) == 0) {
263 # define PerlMemShared PerlMem
266 #ifdef PERL_DEBUG_READONLY_OPS
267 U32 count = PL_slab_count;
268 /* Need to remove this slab from our list of slabs */
271 if (PL_slabs[count] == slab) {
273 /* Found it. Move the entry at the end to overwrite it. */
274 DEBUG_m(PerlIO_printf(Perl_debug_log,
275 "Deallocate %p by moving %p from %lu to %lu\n",
277 PL_slabs[PL_slab_count - 1],
278 PL_slab_count, count));
279 PL_slabs[count] = PL_slabs[--PL_slab_count];
280 /* Could realloc smaller at this point, but probably not
282 if(munmap(slab, PERL_SLAB_SIZE*sizeof(I32*))) {
283 perror("munmap failed");
291 PerlMemShared_free(slab);
293 if (slab == PL_OpSlab) {
300 * In the following definition, the ", (OP*)0" is just to make the compiler
301 * think the expression is of the right type: croak actually does a Siglongjmp.
303 #define CHECKOP(type,o) \
304 ((PL_op_mask && PL_op_mask[type]) \
305 ? ( op_free((OP*)o), \
306 Perl_croak(aTHX_ "'%s' trapped by operation mask", PL_op_desc[type]), \
308 : CALL_FPTR(PL_check[type])(aTHX_ (OP*)o))
310 #define RETURN_UNLIMITED_NUMBER (PERL_INT_MAX / 2)
313 S_gv_ename(pTHX_ GV *gv)
315 SV* const tmpsv = sv_newmortal();
317 PERL_ARGS_ASSERT_GV_ENAME;
319 gv_efullname3(tmpsv, gv, NULL);
320 return SvPV_nolen_const(tmpsv);
324 S_no_fh_allowed(pTHX_ OP *o)
326 PERL_ARGS_ASSERT_NO_FH_ALLOWED;
328 yyerror(Perl_form(aTHX_ "Missing comma after first argument to %s function",
334 S_too_few_arguments(pTHX_ OP *o, const char *name)
336 PERL_ARGS_ASSERT_TOO_FEW_ARGUMENTS;
338 yyerror(Perl_form(aTHX_ "Not enough arguments for %s", name));
343 S_too_many_arguments(pTHX_ OP *o, const char *name)
345 PERL_ARGS_ASSERT_TOO_MANY_ARGUMENTS;
347 yyerror(Perl_form(aTHX_ "Too many arguments for %s", name));
352 S_bad_type(pTHX_ I32 n, const char *t, const char *name, const OP *kid)
354 PERL_ARGS_ASSERT_BAD_TYPE;
356 yyerror(Perl_form(aTHX_ "Type of arg %d to %s must be %s (not %s)",
357 (int)n, name, t, OP_DESC(kid)));
361 S_no_bareword_allowed(pTHX_ const OP *o)
363 PERL_ARGS_ASSERT_NO_BAREWORD_ALLOWED;
366 return; /* various ok barewords are hidden in extra OP_NULL */
367 qerror(Perl_mess(aTHX_
368 "Bareword \"%"SVf"\" not allowed while \"strict subs\" in use",
372 /* "register" allocation */
375 Perl_allocmy(pTHX_ const char *const name, const STRLEN len, const U32 flags)
379 const bool is_our = (PL_parser->in_my == KEY_our);
381 PERL_ARGS_ASSERT_ALLOCMY;
384 Perl_croak(aTHX_ "panic: allocmy illegal flag bits 0x%" UVxf,
387 /* Until we're using the length for real, cross check that we're being
389 assert(strlen(name) == len);
391 /* complain about "my $<special_var>" etc etc */
395 (USE_UTF8_IN_NAMES && UTF8_IS_START(name[1])) ||
396 (name[1] == '_' && (*name == '$' || len > 2))))
398 /* name[2] is true if strlen(name) > 2 */
399 if (!isPRINT(name[1]) || strchr("\t\n\r\f", name[1])) {
400 yyerror(Perl_form(aTHX_ "Can't use global %c^%c%.*s in \"%s\"",
401 name[0], toCTRL(name[1]), (int)(len - 2), name + 2,
402 PL_parser->in_my == KEY_state ? "state" : "my"));
404 yyerror(Perl_form(aTHX_ "Can't use global %.*s in \"%s\"", (int) len, name,
405 PL_parser->in_my == KEY_state ? "state" : "my"));
409 /* allocate a spare slot and store the name in that slot */
411 off = pad_add_name(name, len,
412 is_our ? padadd_OUR :
413 PL_parser->in_my == KEY_state ? padadd_STATE : 0,
414 PL_parser->in_my_stash,
416 /* $_ is always in main::, even with our */
417 ? (PL_curstash && !strEQ(name,"$_") ? PL_curstash : PL_defstash)
421 /* anon sub prototypes contains state vars should always be cloned,
422 * otherwise the state var would be shared between anon subs */
424 if (PL_parser->in_my == KEY_state && CvANON(PL_compcv))
425 CvCLONE_on(PL_compcv);
430 /* free the body of an op without examining its contents.
431 * Always use this rather than FreeOp directly */
434 S_op_destroy(pTHX_ OP *o)
436 if (o->op_latefree) {
444 # define forget_pmop(a,b) S_forget_pmop(aTHX_ a,b)
446 # define forget_pmop(a,b) S_forget_pmop(aTHX_ a)
452 Perl_op_free(pTHX_ OP *o)
459 if (o->op_latefreed) {
466 if (o->op_private & OPpREFCOUNTED) {
477 refcnt = OpREFCNT_dec(o);
480 /* Need to find and remove any pattern match ops from the list
481 we maintain for reset(). */
482 find_and_forget_pmops(o);
492 /* Call the op_free hook if it has been set. Do it now so that it's called
493 * at the right time for refcounted ops, but still before all of the kids
497 if (o->op_flags & OPf_KIDS) {
498 register OP *kid, *nextkid;
499 for (kid = cUNOPo->op_first; kid; kid = nextkid) {
500 nextkid = kid->op_sibling; /* Get before next freeing kid */
505 #ifdef PERL_DEBUG_READONLY_OPS
509 /* COP* is not cleared by op_clear() so that we may track line
510 * numbers etc even after null() */
511 if (type == OP_NEXTSTATE || type == OP_DBSTATE
512 || (type == OP_NULL /* the COP might have been null'ed */
513 && ((OPCODE)o->op_targ == OP_NEXTSTATE
514 || (OPCODE)o->op_targ == OP_DBSTATE))) {
519 type = (OPCODE)o->op_targ;
522 if (o->op_latefree) {
528 #ifdef DEBUG_LEAKING_SCALARS
535 Perl_op_clear(pTHX_ OP *o)
540 PERL_ARGS_ASSERT_OP_CLEAR;
543 /* if (o->op_madprop && o->op_madprop->mad_next)
545 /* FIXME for MAD - if I uncomment these two lines t/op/pack.t fails with
546 "modification of a read only value" for a reason I can't fathom why.
547 It's the "" stringification of $_, where $_ was set to '' in a foreach
548 loop, but it defies simplification into a small test case.
549 However, commenting them out has caused ext/List/Util/t/weak.t to fail
552 mad_free(o->op_madprop);
558 switch (o->op_type) {
559 case OP_NULL: /* Was holding old type, if any. */
560 if (PL_madskills && o->op_targ != OP_NULL) {
561 o->op_type = (Optype)o->op_targ;
566 case OP_ENTEREVAL: /* Was holding hints. */
570 if (!(o->op_flags & OPf_REF)
571 || (PL_check[o->op_type] != MEMBER_TO_FPTR(Perl_ck_ftst)))
577 if (! (o->op_type == OP_AELEMFAST && o->op_flags & OPf_SPECIAL)) {
578 /* not an OP_PADAV replacement */
579 GV *gv = (o->op_type == OP_GV || o->op_type == OP_GVSV)
584 /* It's possible during global destruction that the GV is freed
585 before the optree. Whilst the SvREFCNT_inc is happy to bump from
586 0 to 1 on a freed SV, the corresponding SvREFCNT_dec from 1 to 0
587 will trigger an assertion failure, because the entry to sv_clear
588 checks that the scalar is not already freed. A check of for
589 !SvIS_FREED(gv) turns out to be invalid, because during global
590 destruction the reference count can be forced down to zero
591 (with SVf_BREAK set). In which case raising to 1 and then
592 dropping to 0 triggers cleanup before it should happen. I
593 *think* that this might actually be a general, systematic,
594 weakness of the whole idea of SVf_BREAK, in that code *is*
595 allowed to raise and lower references during global destruction,
596 so any *valid* code that happens to do this during global
597 destruction might well trigger premature cleanup. */
598 bool still_valid = gv && SvREFCNT(gv);
601 SvREFCNT_inc_simple_void(gv);
603 if (cPADOPo->op_padix > 0) {
604 /* No GvIN_PAD_off(cGVOPo_gv) here, because other references
605 * may still exist on the pad */
606 pad_swipe(cPADOPo->op_padix, TRUE);
607 cPADOPo->op_padix = 0;
610 SvREFCNT_dec(cSVOPo->op_sv);
611 cSVOPo->op_sv = NULL;
614 int try_downgrade = SvREFCNT(gv) == 2;
617 gv_try_downgrade(gv);
621 case OP_METHOD_NAMED:
624 SvREFCNT_dec(cSVOPo->op_sv);
625 cSVOPo->op_sv = NULL;
628 Even if op_clear does a pad_free for the target of the op,
629 pad_free doesn't actually remove the sv that exists in the pad;
630 instead it lives on. This results in that it could be reused as
631 a target later on when the pad was reallocated.
634 pad_swipe(o->op_targ,1);
643 if (o->op_flags & (OPf_SPECIAL|OPf_STACKED|OPf_KIDS))
647 if (o->op_private & (OPpTRANS_FROM_UTF|OPpTRANS_TO_UTF)) {
649 if (cPADOPo->op_padix > 0) {
650 pad_swipe(cPADOPo->op_padix, TRUE);
651 cPADOPo->op_padix = 0;
654 SvREFCNT_dec(cSVOPo->op_sv);
655 cSVOPo->op_sv = NULL;
659 PerlMemShared_free(cPVOPo->op_pv);
660 cPVOPo->op_pv = NULL;
664 op_free(cPMOPo->op_pmreplrootu.op_pmreplroot);
668 if (cPMOPo->op_pmreplrootu.op_pmtargetoff) {
669 /* No GvIN_PAD_off here, because other references may still
670 * exist on the pad */
671 pad_swipe(cPMOPo->op_pmreplrootu.op_pmtargetoff, TRUE);
674 SvREFCNT_dec(MUTABLE_SV(cPMOPo->op_pmreplrootu.op_pmtargetgv));
680 forget_pmop(cPMOPo, 1);
681 cPMOPo->op_pmreplrootu.op_pmreplroot = NULL;
682 /* we use the same protection as the "SAFE" version of the PM_ macros
683 * here since sv_clean_all might release some PMOPs
684 * after PL_regex_padav has been cleared
685 * and the clearing of PL_regex_padav needs to
686 * happen before sv_clean_all
689 if(PL_regex_pad) { /* We could be in destruction */
690 const IV offset = (cPMOPo)->op_pmoffset;
691 ReREFCNT_dec(PM_GETRE(cPMOPo));
692 PL_regex_pad[offset] = &PL_sv_undef;
693 sv_catpvn_nomg(PL_regex_pad[0], (const char *)&offset,
697 ReREFCNT_dec(PM_GETRE(cPMOPo));
698 PM_SETRE(cPMOPo, NULL);
704 if (o->op_targ > 0) {
705 pad_free(o->op_targ);
711 S_cop_free(pTHX_ COP* cop)
713 PERL_ARGS_ASSERT_COP_FREE;
717 if (! specialWARN(cop->cop_warnings))
718 PerlMemShared_free(cop->cop_warnings);
719 Perl_refcounted_he_free(aTHX_ cop->cop_hints_hash);
723 S_forget_pmop(pTHX_ PMOP *const o
729 HV * const pmstash = PmopSTASH(o);
731 PERL_ARGS_ASSERT_FORGET_PMOP;
733 if (pmstash && !SvIS_FREED(pmstash)) {
734 MAGIC * const mg = mg_find((const SV *)pmstash, PERL_MAGIC_symtab);
736 PMOP **const array = (PMOP**) mg->mg_ptr;
737 U32 count = mg->mg_len / sizeof(PMOP**);
742 /* Found it. Move the entry at the end to overwrite it. */
743 array[i] = array[--count];
744 mg->mg_len = count * sizeof(PMOP**);
745 /* Could realloc smaller at this point always, but probably
746 not worth it. Probably worth free()ing if we're the
749 Safefree(mg->mg_ptr);
766 S_find_and_forget_pmops(pTHX_ OP *o)
768 PERL_ARGS_ASSERT_FIND_AND_FORGET_PMOPS;
770 if (o->op_flags & OPf_KIDS) {
771 OP *kid = cUNOPo->op_first;
773 switch (kid->op_type) {
778 forget_pmop((PMOP*)kid, 0);
780 find_and_forget_pmops(kid);
781 kid = kid->op_sibling;
787 Perl_op_null(pTHX_ OP *o)
791 PERL_ARGS_ASSERT_OP_NULL;
793 if (o->op_type == OP_NULL)
797 o->op_targ = o->op_type;
798 o->op_type = OP_NULL;
799 o->op_ppaddr = PL_ppaddr[OP_NULL];
803 Perl_op_refcnt_lock(pTHX)
811 Perl_op_refcnt_unlock(pTHX)
818 /* Contextualizers */
820 #define LINKLIST(o) ((o)->op_next ? (o)->op_next : linklist((OP*)o))
823 S_linklist(pTHX_ OP *o)
827 PERL_ARGS_ASSERT_LINKLIST;
832 /* establish postfix order */
833 first = cUNOPo->op_first;
836 o->op_next = LINKLIST(first);
839 if (kid->op_sibling) {
840 kid->op_next = LINKLIST(kid->op_sibling);
841 kid = kid->op_sibling;
855 S_scalarkids(pTHX_ OP *o)
857 if (o && o->op_flags & OPf_KIDS) {
859 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
866 S_scalarboolean(pTHX_ OP *o)
870 PERL_ARGS_ASSERT_SCALARBOOLEAN;
872 if (o->op_type == OP_SASSIGN && cBINOPo->op_first->op_type == OP_CONST) {
873 if (ckWARN(WARN_SYNTAX)) {
874 const line_t oldline = CopLINE(PL_curcop);
876 if (PL_parser && PL_parser->copline != NOLINE)
877 CopLINE_set(PL_curcop, PL_parser->copline);
878 Perl_warner(aTHX_ packWARN(WARN_SYNTAX), "Found = in conditional, should be ==");
879 CopLINE_set(PL_curcop, oldline);
886 Perl_scalar(pTHX_ OP *o)
891 /* assumes no premature commitment */
892 if (!o || (PL_parser && PL_parser->error_count)
893 || (o->op_flags & OPf_WANT)
894 || o->op_type == OP_RETURN)
899 o->op_flags = (o->op_flags & ~OPf_WANT) | OPf_WANT_SCALAR;
901 switch (o->op_type) {
903 scalar(cBINOPo->op_first);
908 for (kid = cUNOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
918 if (o->op_flags & OPf_KIDS) {
919 for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling)
925 kid = cLISTOPo->op_first;
927 kid = kid->op_sibling;
930 OP *sib = kid->op_sibling;
931 if (sib && kid->op_type != OP_LEAVEWHEN) {
932 if (sib->op_type == OP_BREAK && sib->op_flags & OPf_SPECIAL) {
942 PL_curcop = &PL_compiling;
947 kid = cLISTOPo->op_first;
950 Perl_ck_warner(aTHX_ packWARN(WARN_VOID), "Useless use of sort in scalar context");
957 Perl_scalarvoid(pTHX_ OP *o)
961 const char* useless = NULL;
965 PERL_ARGS_ASSERT_SCALARVOID;
967 /* trailing mad null ops don't count as "there" for void processing */
969 o->op_type != OP_NULL &&
971 o->op_sibling->op_type == OP_NULL)
974 for (sib = o->op_sibling;
975 sib && sib->op_type == OP_NULL;
976 sib = sib->op_sibling) ;
982 if (o->op_type == OP_NEXTSTATE
983 || o->op_type == OP_DBSTATE
984 || (o->op_type == OP_NULL && (o->op_targ == OP_NEXTSTATE
985 || o->op_targ == OP_DBSTATE)))
986 PL_curcop = (COP*)o; /* for warning below */
988 /* assumes no premature commitment */
989 want = o->op_flags & OPf_WANT;
990 if ((want && want != OPf_WANT_SCALAR)
991 || (PL_parser && PL_parser->error_count)
992 || o->op_type == OP_RETURN || o->op_type == OP_REQUIRE || o->op_type == OP_LEAVEWHEN)
997 if ((o->op_private & OPpTARGET_MY)
998 && (PL_opargs[o->op_type] & OA_TARGLEX))/* OPp share the meaning */
1000 return scalar(o); /* As if inside SASSIGN */
1003 o->op_flags = (o->op_flags & ~OPf_WANT) | OPf_WANT_VOID;
1005 switch (o->op_type) {
1007 if (!(PL_opargs[o->op_type] & OA_FOLDCONST))
1011 if (o->op_flags & OPf_STACKED)
1015 if (o->op_private == 4)
1058 case OP_GETSOCKNAME:
1059 case OP_GETPEERNAME:
1064 case OP_GETPRIORITY:
1088 if (!(o->op_private & (OPpLVAL_INTRO|OPpOUR_INTRO)))
1089 /* Otherwise it's "Useless use of grep iterator" */
1090 useless = OP_DESC(o);
1094 kid = cLISTOPo->op_first;
1095 if (kid && kid->op_type == OP_PUSHRE
1097 && !((PMOP*)kid)->op_pmreplrootu.op_pmtargetoff)
1099 && !((PMOP*)kid)->op_pmreplrootu.op_pmtargetgv)
1101 useless = OP_DESC(o);
1105 kid = cUNOPo->op_first;
1106 if (kid->op_type != OP_MATCH && kid->op_type != OP_SUBST &&
1107 kid->op_type != OP_TRANS) {
1110 useless = "negative pattern binding (!~)";
1114 if (cPMOPo->op_pmflags & PMf_NONDESTRUCT)
1115 useless = "Non-destructive substitution (s///r)";
1122 if (!(o->op_private & (OPpLVAL_INTRO|OPpOUR_INTRO)) &&
1123 (!o->op_sibling || o->op_sibling->op_type != OP_READLINE))
1124 useless = "a variable";
1129 if (cSVOPo->op_private & OPpCONST_STRICT)
1130 no_bareword_allowed(o);
1132 if (ckWARN(WARN_VOID)) {
1134 SV* msv = sv_2mortal(Perl_newSVpvf(aTHX_
1135 "a constant (%"SVf")", sv));
1136 useless = SvPV_nolen(msv);
1139 useless = "a constant (undef)";
1140 if (o->op_private & OPpCONST_ARYBASE)
1142 /* don't warn on optimised away booleans, eg
1143 * use constant Foo, 5; Foo || print; */
1144 if (cSVOPo->op_private & OPpCONST_SHORTCIRCUIT)
1146 /* the constants 0 and 1 are permitted as they are
1147 conventionally used as dummies in constructs like
1148 1 while some_condition_with_side_effects; */
1149 else if (SvNIOK(sv) && (SvNV(sv) == 0.0 || SvNV(sv) == 1.0))
1151 else if (SvPOK(sv)) {
1152 /* perl4's way of mixing documentation and code
1153 (before the invention of POD) was based on a
1154 trick to mix nroff and perl code. The trick was
1155 built upon these three nroff macros being used in
1156 void context. The pink camel has the details in
1157 the script wrapman near page 319. */
1158 const char * const maybe_macro = SvPVX_const(sv);
1159 if (strnEQ(maybe_macro, "di", 2) ||
1160 strnEQ(maybe_macro, "ds", 2) ||
1161 strnEQ(maybe_macro, "ig", 2))
1166 op_null(o); /* don't execute or even remember it */
1170 o->op_type = OP_PREINC; /* pre-increment is faster */
1171 o->op_ppaddr = PL_ppaddr[OP_PREINC];
1175 o->op_type = OP_PREDEC; /* pre-decrement is faster */
1176 o->op_ppaddr = PL_ppaddr[OP_PREDEC];
1180 o->op_type = OP_I_PREINC; /* pre-increment is faster */
1181 o->op_ppaddr = PL_ppaddr[OP_I_PREINC];
1185 o->op_type = OP_I_PREDEC; /* pre-decrement is faster */
1186 o->op_ppaddr = PL_ppaddr[OP_I_PREDEC];
1191 kid = cLOGOPo->op_first;
1192 if (kid->op_type == OP_NOT
1193 && (kid->op_flags & OPf_KIDS)
1195 if (o->op_type == OP_AND) {
1197 o->op_ppaddr = PL_ppaddr[OP_OR];
1199 o->op_type = OP_AND;
1200 o->op_ppaddr = PL_ppaddr[OP_AND];
1209 for (kid = cUNOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
1214 if (o->op_flags & OPf_STACKED)
1221 if (!(o->op_flags & OPf_KIDS))
1232 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
1242 Perl_ck_warner(aTHX_ packWARN(WARN_VOID), "Useless use of %s in void context", useless);
1247 S_listkids(pTHX_ OP *o)
1249 if (o && o->op_flags & OPf_KIDS) {
1251 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
1258 Perl_list(pTHX_ OP *o)
1263 /* assumes no premature commitment */
1264 if (!o || (o->op_flags & OPf_WANT)
1265 || (PL_parser && PL_parser->error_count)
1266 || o->op_type == OP_RETURN)
1271 if ((o->op_private & OPpTARGET_MY)
1272 && (PL_opargs[o->op_type] & OA_TARGLEX))/* OPp share the meaning */
1274 return o; /* As if inside SASSIGN */
1277 o->op_flags = (o->op_flags & ~OPf_WANT) | OPf_WANT_LIST;
1279 switch (o->op_type) {
1282 list(cBINOPo->op_first);
1287 for (kid = cUNOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
1295 if (!(o->op_flags & OPf_KIDS))
1297 if (!o->op_next && cUNOPo->op_first->op_type == OP_FLOP) {
1298 list(cBINOPo->op_first);
1299 return gen_constant_list(o);
1306 kid = cLISTOPo->op_first;
1308 kid = kid->op_sibling;
1311 OP *sib = kid->op_sibling;
1312 if (sib && kid->op_type != OP_LEAVEWHEN) {
1313 if (sib->op_type == OP_BREAK && sib->op_flags & OPf_SPECIAL) {
1323 PL_curcop = &PL_compiling;
1327 kid = cLISTOPo->op_first;
1334 S_scalarseq(pTHX_ OP *o)
1338 const OPCODE type = o->op_type;
1340 if (type == OP_LINESEQ || type == OP_SCOPE ||
1341 type == OP_LEAVE || type == OP_LEAVETRY)
1344 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling) {
1345 if (kid->op_sibling) {
1349 PL_curcop = &PL_compiling;
1351 o->op_flags &= ~OPf_PARENS;
1352 if (PL_hints & HINT_BLOCK_SCOPE)
1353 o->op_flags |= OPf_PARENS;
1356 o = newOP(OP_STUB, 0);
1361 S_modkids(pTHX_ OP *o, I32 type)
1363 if (o && o->op_flags & OPf_KIDS) {
1365 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
1371 /* Propagate lvalue ("modifiable") context to an op and its children.
1372 * 'type' represents the context type, roughly based on the type of op that
1373 * would do the modifying, although local() is represented by OP_NULL.
1374 * It's responsible for detecting things that can't be modified, flag
1375 * things that need to behave specially in an lvalue context (e.g., "$$x = 5"
1376 * might have to vivify a reference in $x), and so on.
1378 * For example, "$a+1 = 2" would cause mod() to be called with o being
1379 * OP_ADD and type being OP_SASSIGN, and would output an error.
1383 Perl_mod(pTHX_ OP *o, I32 type)
1387 /* -1 = error on localize, 0 = ignore localize, 1 = ok to localize */
1390 if (!o || (PL_parser && PL_parser->error_count))
1393 if ((o->op_private & OPpTARGET_MY)
1394 && (PL_opargs[o->op_type] & OA_TARGLEX))/* OPp share the meaning */
1399 switch (o->op_type) {
1405 if (!(o->op_private & OPpCONST_ARYBASE))
1408 if (PL_eval_start && PL_eval_start->op_type == OP_CONST) {
1409 CopARYBASE_set(&PL_compiling,
1410 (I32)SvIV(cSVOPx(PL_eval_start)->op_sv));
1414 SAVECOPARYBASE(&PL_compiling);
1415 CopARYBASE_set(&PL_compiling, 0);
1417 else if (type == OP_REFGEN)
1420 Perl_croak(aTHX_ "That use of $[ is unsupported");
1423 if ((o->op_flags & OPf_PARENS) || PL_madskills)
1427 if ((type == OP_UNDEF || type == OP_REFGEN) &&
1428 !(o->op_flags & OPf_STACKED)) {
1429 o->op_type = OP_RV2CV; /* entersub => rv2cv */
1430 /* The default is to set op_private to the number of children,
1431 which for a UNOP such as RV2CV is always 1. And w're using
1432 the bit for a flag in RV2CV, so we need it clear. */
1433 o->op_private &= ~1;
1434 o->op_ppaddr = PL_ppaddr[OP_RV2CV];
1435 assert(cUNOPo->op_first->op_type == OP_NULL);
1436 op_null(((LISTOP*)cUNOPo->op_first)->op_first);/* disable pushmark */
1439 else if (o->op_private & OPpENTERSUB_NOMOD)
1441 else { /* lvalue subroutine call */
1442 o->op_private |= OPpLVAL_INTRO;
1443 PL_modcount = RETURN_UNLIMITED_NUMBER;
1444 if (type == OP_GREPSTART || type == OP_ENTERSUB || type == OP_REFGEN) {
1445 /* Backward compatibility mode: */
1446 o->op_private |= OPpENTERSUB_INARGS;
1449 else { /* Compile-time error message: */
1450 OP *kid = cUNOPo->op_first;
1454 if (kid->op_type != OP_PUSHMARK) {
1455 if (kid->op_type != OP_NULL || kid->op_targ != OP_LIST)
1457 "panic: unexpected lvalue entersub "
1458 "args: type/targ %ld:%"UVuf,
1459 (long)kid->op_type, (UV)kid->op_targ);
1460 kid = kLISTOP->op_first;
1462 while (kid->op_sibling)
1463 kid = kid->op_sibling;
1464 if (!(kid->op_type == OP_NULL && kid->op_targ == OP_RV2CV)) {
1466 if (kid->op_type == OP_METHOD_NAMED
1467 || kid->op_type == OP_METHOD)
1471 NewOp(1101, newop, 1, UNOP);
1472 newop->op_type = OP_RV2CV;
1473 newop->op_ppaddr = PL_ppaddr[OP_RV2CV];
1474 newop->op_first = NULL;
1475 newop->op_next = (OP*)newop;
1476 kid->op_sibling = (OP*)newop;
1477 newop->op_private |= OPpLVAL_INTRO;
1478 newop->op_private &= ~1;
1482 if (kid->op_type != OP_RV2CV)
1484 "panic: unexpected lvalue entersub "
1485 "entry via type/targ %ld:%"UVuf,
1486 (long)kid->op_type, (UV)kid->op_targ);
1487 kid->op_private |= OPpLVAL_INTRO;
1488 break; /* Postpone until runtime */
1492 kid = kUNOP->op_first;
1493 if (kid->op_type == OP_NULL && kid->op_targ == OP_RV2SV)
1494 kid = kUNOP->op_first;
1495 if (kid->op_type == OP_NULL)
1497 "Unexpected constant lvalue entersub "
1498 "entry via type/targ %ld:%"UVuf,
1499 (long)kid->op_type, (UV)kid->op_targ);
1500 if (kid->op_type != OP_GV) {
1501 /* Restore RV2CV to check lvalueness */
1503 if (kid->op_next && kid->op_next != kid) { /* Happens? */
1504 okid->op_next = kid->op_next;
1505 kid->op_next = okid;
1508 okid->op_next = NULL;
1509 okid->op_type = OP_RV2CV;
1511 okid->op_ppaddr = PL_ppaddr[OP_RV2CV];
1512 okid->op_private |= OPpLVAL_INTRO;
1513 okid->op_private &= ~1;
1517 cv = GvCV(kGVOP_gv);
1527 /* grep, foreach, subcalls, refgen */
1528 if (type == OP_GREPSTART || type == OP_ENTERSUB || type == OP_REFGEN)
1530 yyerror(Perl_form(aTHX_ "Can't modify %s in %s",
1531 (o->op_type == OP_NULL && (o->op_flags & OPf_SPECIAL)
1533 : (o->op_type == OP_ENTERSUB
1534 ? "non-lvalue subroutine call"
1536 type ? PL_op_desc[type] : "local"));
1550 case OP_RIGHT_SHIFT:
1559 if (!(o->op_flags & OPf_STACKED))
1566 for (kid = cUNOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
1572 if (type == OP_REFGEN && o->op_flags & OPf_PARENS) {
1573 PL_modcount = RETURN_UNLIMITED_NUMBER;
1574 return o; /* Treat \(@foo) like ordinary list. */
1578 if (scalar_mod_type(o, type))
1580 ref(cUNOPo->op_first, o->op_type);
1584 if (type == OP_LEAVESUBLV)
1585 o->op_private |= OPpMAYBE_LVSUB;
1591 PL_modcount = RETURN_UNLIMITED_NUMBER;
1594 PL_hints |= HINT_BLOCK_SCOPE;
1595 if (type == OP_LEAVESUBLV)
1596 o->op_private |= OPpMAYBE_LVSUB;
1600 ref(cUNOPo->op_first, o->op_type);
1604 PL_hints |= HINT_BLOCK_SCOPE;
1619 PL_modcount = RETURN_UNLIMITED_NUMBER;
1620 if (type == OP_REFGEN && o->op_flags & OPf_PARENS)
1621 return o; /* Treat \(@foo) like ordinary list. */
1622 if (scalar_mod_type(o, type))
1624 if (type == OP_LEAVESUBLV)
1625 o->op_private |= OPpMAYBE_LVSUB;
1629 if (!type) /* local() */
1630 Perl_croak(aTHX_ "Can't localize lexical variable %s",
1631 PAD_COMPNAME_PV(o->op_targ));
1639 if (type != OP_SASSIGN)
1643 if (o->op_private == 4) /* don't allow 4 arg substr as lvalue */
1648 if (type == OP_LEAVESUBLV)
1649 o->op_private |= OPpMAYBE_LVSUB;
1651 pad_free(o->op_targ);
1652 o->op_targ = pad_alloc(o->op_type, SVs_PADMY);
1653 assert(SvTYPE(PAD_SV(o->op_targ)) == SVt_NULL);
1654 if (o->op_flags & OPf_KIDS)
1655 mod(cBINOPo->op_first->op_sibling, type);
1660 ref(cBINOPo->op_first, o->op_type);
1661 if (type == OP_ENTERSUB &&
1662 !(o->op_private & (OPpLVAL_INTRO | OPpDEREF)))
1663 o->op_private |= OPpLVAL_DEFER;
1664 if (type == OP_LEAVESUBLV)
1665 o->op_private |= OPpMAYBE_LVSUB;
1675 if (o->op_flags & OPf_KIDS)
1676 mod(cLISTOPo->op_last, type);
1681 if (o->op_flags & OPf_SPECIAL) /* do BLOCK */
1683 else if (!(o->op_flags & OPf_KIDS))
1685 if (o->op_targ != OP_LIST) {
1686 mod(cBINOPo->op_first, type);
1692 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
1697 if (type != OP_LEAVESUBLV)
1699 break; /* mod()ing was handled by ck_return() */
1702 /* [20011101.069] File test operators interpret OPf_REF to mean that
1703 their argument is a filehandle; thus \stat(".") should not set
1705 if (type == OP_REFGEN &&
1706 PL_check[o->op_type] == MEMBER_TO_FPTR(Perl_ck_ftst))
1709 if (type != OP_LEAVESUBLV)
1710 o->op_flags |= OPf_MOD;
1712 if (type == OP_AASSIGN || type == OP_SASSIGN)
1713 o->op_flags |= OPf_SPECIAL|OPf_REF;
1714 else if (!type) { /* local() */
1717 o->op_private |= OPpLVAL_INTRO;
1718 o->op_flags &= ~OPf_SPECIAL;
1719 PL_hints |= HINT_BLOCK_SCOPE;
1724 Perl_ck_warner(aTHX_ packWARN(WARN_SYNTAX),
1725 "Useless localization of %s", OP_DESC(o));
1728 else if (type != OP_GREPSTART && type != OP_ENTERSUB
1729 && type != OP_LEAVESUBLV)
1730 o->op_flags |= OPf_REF;
1735 S_scalar_mod_type(const OP *o, I32 type)
1737 PERL_ARGS_ASSERT_SCALAR_MOD_TYPE;
1741 if (o->op_type == OP_RV2GV)
1765 case OP_RIGHT_SHIFT:
1785 S_is_handle_constructor(const OP *o, I32 numargs)
1787 PERL_ARGS_ASSERT_IS_HANDLE_CONSTRUCTOR;
1789 switch (o->op_type) {
1797 case OP_SELECT: /* XXX c.f. SelectSaver.pm */
1810 S_refkids(pTHX_ OP *o, I32 type)
1812 if (o && o->op_flags & OPf_KIDS) {
1814 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
1821 Perl_doref(pTHX_ OP *o, I32 type, bool set_op_ref)
1826 PERL_ARGS_ASSERT_DOREF;
1828 if (!o || (PL_parser && PL_parser->error_count))
1831 switch (o->op_type) {
1833 if ((type == OP_EXISTS || type == OP_DEFINED || type == OP_LOCK) &&
1834 !(o->op_flags & OPf_STACKED)) {
1835 o->op_type = OP_RV2CV; /* entersub => rv2cv */
1836 o->op_ppaddr = PL_ppaddr[OP_RV2CV];
1837 assert(cUNOPo->op_first->op_type == OP_NULL);
1838 op_null(((LISTOP*)cUNOPo->op_first)->op_first); /* disable pushmark */
1839 o->op_flags |= OPf_SPECIAL;
1840 o->op_private &= ~1;
1845 for (kid = cUNOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
1846 doref(kid, type, set_op_ref);
1849 if (type == OP_DEFINED)
1850 o->op_flags |= OPf_SPECIAL; /* don't create GV */
1851 doref(cUNOPo->op_first, o->op_type, set_op_ref);
1854 if (type == OP_RV2SV || type == OP_RV2AV || type == OP_RV2HV) {
1855 o->op_private |= (type == OP_RV2AV ? OPpDEREF_AV
1856 : type == OP_RV2HV ? OPpDEREF_HV
1858 o->op_flags |= OPf_MOD;
1865 o->op_flags |= OPf_REF;
1868 if (type == OP_DEFINED)
1869 o->op_flags |= OPf_SPECIAL; /* don't create GV */
1870 doref(cUNOPo->op_first, o->op_type, set_op_ref);
1876 o->op_flags |= OPf_REF;
1881 if (!(o->op_flags & OPf_KIDS))
1883 doref(cBINOPo->op_first, type, set_op_ref);
1887 doref(cBINOPo->op_first, o->op_type, set_op_ref);
1888 if (type == OP_RV2SV || type == OP_RV2AV || type == OP_RV2HV) {
1889 o->op_private |= (type == OP_RV2AV ? OPpDEREF_AV
1890 : type == OP_RV2HV ? OPpDEREF_HV
1892 o->op_flags |= OPf_MOD;
1902 if (!(o->op_flags & OPf_KIDS))
1904 doref(cLISTOPo->op_last, type, set_op_ref);
1914 S_dup_attrlist(pTHX_ OP *o)
1919 PERL_ARGS_ASSERT_DUP_ATTRLIST;
1921 /* An attrlist is either a simple OP_CONST or an OP_LIST with kids,
1922 * where the first kid is OP_PUSHMARK and the remaining ones
1923 * are OP_CONST. We need to push the OP_CONST values.
1925 if (o->op_type == OP_CONST)
1926 rop = newSVOP(OP_CONST, o->op_flags, SvREFCNT_inc_NN(cSVOPo->op_sv));
1928 else if (o->op_type == OP_NULL)
1932 assert((o->op_type == OP_LIST) && (o->op_flags & OPf_KIDS));
1934 for (o = cLISTOPo->op_first; o; o=o->op_sibling) {
1935 if (o->op_type == OP_CONST)
1936 rop = append_elem(OP_LIST, rop,
1937 newSVOP(OP_CONST, o->op_flags,
1938 SvREFCNT_inc_NN(cSVOPo->op_sv)));
1945 S_apply_attrs(pTHX_ HV *stash, SV *target, OP *attrs, bool for_my)
1950 PERL_ARGS_ASSERT_APPLY_ATTRS;
1952 /* fake up C<use attributes $pkg,$rv,@attrs> */
1953 ENTER; /* need to protect against side-effects of 'use' */
1954 stashsv = stash ? newSVhek(HvNAME_HEK(stash)) : &PL_sv_no;
1956 #define ATTRSMODULE "attributes"
1957 #define ATTRSMODULE_PM "attributes.pm"
1960 /* Don't force the C<use> if we don't need it. */
1961 SV * const * const svp = hv_fetchs(GvHVn(PL_incgv), ATTRSMODULE_PM, FALSE);
1962 if (svp && *svp != &PL_sv_undef)
1963 NOOP; /* already in %INC */
1965 Perl_load_module(aTHX_ PERL_LOADMOD_NOIMPORT,
1966 newSVpvs(ATTRSMODULE), NULL);
1969 Perl_load_module(aTHX_ PERL_LOADMOD_IMPORT_OPS,
1970 newSVpvs(ATTRSMODULE),
1972 prepend_elem(OP_LIST,
1973 newSVOP(OP_CONST, 0, stashsv),
1974 prepend_elem(OP_LIST,
1975 newSVOP(OP_CONST, 0,
1977 dup_attrlist(attrs))));
1983 S_apply_attrs_my(pTHX_ HV *stash, OP *target, OP *attrs, OP **imopsp)
1986 OP *pack, *imop, *arg;
1989 PERL_ARGS_ASSERT_APPLY_ATTRS_MY;
1994 assert(target->op_type == OP_PADSV ||
1995 target->op_type == OP_PADHV ||
1996 target->op_type == OP_PADAV);
1998 /* Ensure that attributes.pm is loaded. */
1999 apply_attrs(stash, PAD_SV(target->op_targ), attrs, TRUE);
2001 /* Need package name for method call. */
2002 pack = newSVOP(OP_CONST, 0, newSVpvs(ATTRSMODULE));
2004 /* Build up the real arg-list. */
2005 stashsv = stash ? newSVhek(HvNAME_HEK(stash)) : &PL_sv_no;
2007 arg = newOP(OP_PADSV, 0);
2008 arg->op_targ = target->op_targ;
2009 arg = prepend_elem(OP_LIST,
2010 newSVOP(OP_CONST, 0, stashsv),
2011 prepend_elem(OP_LIST,
2012 newUNOP(OP_REFGEN, 0,
2013 mod(arg, OP_REFGEN)),
2014 dup_attrlist(attrs)));
2016 /* Fake up a method call to import */
2017 meth = newSVpvs_share("import");
2018 imop = convert(OP_ENTERSUB, OPf_STACKED|OPf_SPECIAL|OPf_WANT_VOID,
2019 append_elem(OP_LIST,
2020 prepend_elem(OP_LIST, pack, list(arg)),
2021 newSVOP(OP_METHOD_NAMED, 0, meth)));
2022 imop->op_private |= OPpENTERSUB_NOMOD;
2024 /* Combine the ops. */
2025 *imopsp = append_elem(OP_LIST, *imopsp, imop);
2029 =notfor apidoc apply_attrs_string
2031 Attempts to apply a list of attributes specified by the C<attrstr> and
2032 C<len> arguments to the subroutine identified by the C<cv> argument which
2033 is expected to be associated with the package identified by the C<stashpv>
2034 argument (see L<attributes>). It gets this wrong, though, in that it
2035 does not correctly identify the boundaries of the individual attribute
2036 specifications within C<attrstr>. This is not really intended for the
2037 public API, but has to be listed here for systems such as AIX which
2038 need an explicit export list for symbols. (It's called from XS code
2039 in support of the C<ATTRS:> keyword from F<xsubpp>.) Patches to fix it
2040 to respect attribute syntax properly would be welcome.
2046 Perl_apply_attrs_string(pTHX_ const char *stashpv, CV *cv,
2047 const char *attrstr, STRLEN len)
2051 PERL_ARGS_ASSERT_APPLY_ATTRS_STRING;
2054 len = strlen(attrstr);
2058 for (; isSPACE(*attrstr) && len; --len, ++attrstr) ;
2060 const char * const sstr = attrstr;
2061 for (; !isSPACE(*attrstr) && len; --len, ++attrstr) ;
2062 attrs = append_elem(OP_LIST, attrs,
2063 newSVOP(OP_CONST, 0,
2064 newSVpvn(sstr, attrstr-sstr)));
2068 Perl_load_module(aTHX_ PERL_LOADMOD_IMPORT_OPS,
2069 newSVpvs(ATTRSMODULE),
2070 NULL, prepend_elem(OP_LIST,
2071 newSVOP(OP_CONST, 0, newSVpv(stashpv,0)),
2072 prepend_elem(OP_LIST,
2073 newSVOP(OP_CONST, 0,
2074 newRV(MUTABLE_SV(cv))),
2079 S_my_kid(pTHX_ OP *o, OP *attrs, OP **imopsp)
2084 PERL_ARGS_ASSERT_MY_KID;
2086 if (!o || (PL_parser && PL_parser->error_count))
2090 if (PL_madskills && type == OP_NULL && o->op_flags & OPf_KIDS) {
2091 (void)my_kid(cUNOPo->op_first, attrs, imopsp);
2095 if (type == OP_LIST) {
2097 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
2098 my_kid(kid, attrs, imopsp);
2099 } else if (type == OP_UNDEF
2105 } else if (type == OP_RV2SV || /* "our" declaration */
2107 type == OP_RV2HV) { /* XXX does this let anything illegal in? */
2108 if (cUNOPo->op_first->op_type != OP_GV) { /* MJD 20011224 */
2109 yyerror(Perl_form(aTHX_ "Can't declare %s in \"%s\"",
2111 PL_parser->in_my == KEY_our
2113 : PL_parser->in_my == KEY_state ? "state" : "my"));
2115 GV * const gv = cGVOPx_gv(cUNOPo->op_first);
2116 PL_parser->in_my = FALSE;
2117 PL_parser->in_my_stash = NULL;
2118 apply_attrs(GvSTASH(gv),
2119 (type == OP_RV2SV ? GvSV(gv) :
2120 type == OP_RV2AV ? MUTABLE_SV(GvAV(gv)) :
2121 type == OP_RV2HV ? MUTABLE_SV(GvHV(gv)) : MUTABLE_SV(gv)),
2124 o->op_private |= OPpOUR_INTRO;
2127 else if (type != OP_PADSV &&
2130 type != OP_PUSHMARK)
2132 yyerror(Perl_form(aTHX_ "Can't declare %s in \"%s\"",
2134 PL_parser->in_my == KEY_our
2136 : PL_parser->in_my == KEY_state ? "state" : "my"));
2139 else if (attrs && type != OP_PUSHMARK) {
2142 PL_parser->in_my = FALSE;
2143 PL_parser->in_my_stash = NULL;
2145 /* check for C<my Dog $spot> when deciding package */
2146 stash = PAD_COMPNAME_TYPE(o->op_targ);
2148 stash = PL_curstash;
2149 apply_attrs_my(stash, o, attrs, imopsp);
2151 o->op_flags |= OPf_MOD;
2152 o->op_private |= OPpLVAL_INTRO;
2153 if (PL_parser->in_my == KEY_state)
2154 o->op_private |= OPpPAD_STATE;
2159 Perl_my_attrs(pTHX_ OP *o, OP *attrs)
2163 int maybe_scalar = 0;
2165 PERL_ARGS_ASSERT_MY_ATTRS;
2167 /* [perl #17376]: this appears to be premature, and results in code such as
2168 C< our(%x); > executing in list mode rather than void mode */
2170 if (o->op_flags & OPf_PARENS)
2180 o = my_kid(o, attrs, &rops);
2182 if (maybe_scalar && o->op_type == OP_PADSV) {
2183 o = scalar(append_list(OP_LIST, (LISTOP*)rops, (LISTOP*)o));
2184 o->op_private |= OPpLVAL_INTRO;
2187 o = append_list(OP_LIST, (LISTOP*)o, (LISTOP*)rops);
2189 PL_parser->in_my = FALSE;
2190 PL_parser->in_my_stash = NULL;
2195 Perl_sawparens(pTHX_ OP *o)
2197 PERL_UNUSED_CONTEXT;
2199 o->op_flags |= OPf_PARENS;
2204 Perl_bind_match(pTHX_ I32 type, OP *left, OP *right)
2208 const OPCODE ltype = left->op_type;
2209 const OPCODE rtype = right->op_type;
2211 PERL_ARGS_ASSERT_BIND_MATCH;
2213 if ( (ltype == OP_RV2AV || ltype == OP_RV2HV || ltype == OP_PADAV
2214 || ltype == OP_PADHV) && ckWARN(WARN_MISC))
2216 const char * const desc
2217 = PL_op_desc[(rtype == OP_SUBST || rtype == OP_TRANS)
2218 ? (int)rtype : OP_MATCH];
2219 const char * const sample = ((ltype == OP_RV2AV || ltype == OP_PADAV)
2220 ? "@array" : "%hash");
2221 Perl_warner(aTHX_ packWARN(WARN_MISC),
2222 "Applying %s to %s will act on scalar(%s)",
2223 desc, sample, sample);
2226 if (rtype == OP_CONST &&
2227 cSVOPx(right)->op_private & OPpCONST_BARE &&
2228 cSVOPx(right)->op_private & OPpCONST_STRICT)
2230 no_bareword_allowed(right);
2233 /* !~ doesn't make sense with s///r, so error on it for now */
2234 if (rtype == OP_SUBST && (cPMOPx(right)->op_pmflags & PMf_NONDESTRUCT) &&
2236 yyerror("Using !~ with s///r doesn't make sense");
2238 ismatchop = rtype == OP_MATCH ||
2239 rtype == OP_SUBST ||
2241 if (ismatchop && right->op_private & OPpTARGET_MY) {
2243 right->op_private &= ~OPpTARGET_MY;
2245 if (!(right->op_flags & OPf_STACKED) && ismatchop) {
2248 right->op_flags |= OPf_STACKED;
2249 if (rtype != OP_MATCH &&
2250 ! (rtype == OP_TRANS &&
2251 right->op_private & OPpTRANS_IDENTICAL) &&
2252 ! (rtype == OP_SUBST &&
2253 (cPMOPx(right)->op_pmflags & PMf_NONDESTRUCT)))
2254 newleft = mod(left, rtype);
2257 if (right->op_type == OP_TRANS)
2258 o = newBINOP(OP_NULL, OPf_STACKED, scalar(newleft), right);
2260 o = prepend_elem(rtype, scalar(newleft), right);
2262 return newUNOP(OP_NOT, 0, scalar(o));
2266 return bind_match(type, left,
2267 pmruntime(newPMOP(OP_MATCH, 0), right, 0));
2271 Perl_invert(pTHX_ OP *o)
2275 return newUNOP(OP_NOT, OPf_SPECIAL, scalar(o));
2279 Perl_scope(pTHX_ OP *o)
2283 if (o->op_flags & OPf_PARENS || PERLDB_NOOPT || PL_tainting) {
2284 o = prepend_elem(OP_LINESEQ, newOP(OP_ENTER, 0), o);
2285 o->op_type = OP_LEAVE;
2286 o->op_ppaddr = PL_ppaddr[OP_LEAVE];
2288 else if (o->op_type == OP_LINESEQ) {
2290 o->op_type = OP_SCOPE;
2291 o->op_ppaddr = PL_ppaddr[OP_SCOPE];
2292 kid = ((LISTOP*)o)->op_first;
2293 if (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) {
2296 /* The following deals with things like 'do {1 for 1}' */
2297 kid = kid->op_sibling;
2299 (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE))
2304 o = newLISTOP(OP_SCOPE, 0, o, NULL);
2310 Perl_block_start(pTHX_ int full)
2313 const int retval = PL_savestack_ix;
2315 pad_block_start(full);
2317 PL_hints &= ~HINT_BLOCK_SCOPE;
2318 SAVECOMPILEWARNINGS();
2319 PL_compiling.cop_warnings = DUP_WARNINGS(PL_compiling.cop_warnings);
2321 CALL_BLOCK_HOOKS(start, full);
2327 Perl_block_end(pTHX_ I32 floor, OP *seq)
2330 const int needblockscope = PL_hints & HINT_BLOCK_SCOPE;
2331 OP* retval = scalarseq(seq);
2333 CALL_BLOCK_HOOKS(pre_end, &retval);
2336 CopHINTS_set(&PL_compiling, PL_hints);
2338 PL_hints |= HINT_BLOCK_SCOPE; /* propagate out */
2341 CALL_BLOCK_HOOKS(post_end, &retval);
2347 =head1 Compile-time scope hooks
2349 =for apidoc Ao||blockhook_register
2351 Register a set of hooks to be called when the Perl lexical scope changes
2352 at compile time. See L<perlguts/"Compile-time scope hooks">.
2358 Perl_blockhook_register(pTHX_ BHK *hk)
2360 PERL_ARGS_ASSERT_BLOCKHOOK_REGISTER;
2362 Perl_av_create_and_push(aTHX_ &PL_blockhooks, newSViv(PTR2IV(hk)));
2369 const PADOFFSET offset = Perl_pad_findmy(aTHX_ STR_WITH_LEN("$_"), 0);
2370 if (offset == NOT_IN_PAD || PAD_COMPNAME_FLAGS_isOUR(offset)) {
2371 return newSVREF(newGVOP(OP_GV, 0, PL_defgv));
2374 OP * const o = newOP(OP_PADSV, 0);
2375 o->op_targ = offset;
2381 Perl_newPROG(pTHX_ OP *o)
2385 PERL_ARGS_ASSERT_NEWPROG;
2390 PL_eval_root = newUNOP(OP_LEAVEEVAL,
2391 ((PL_in_eval & EVAL_KEEPERR)
2392 ? OPf_SPECIAL : 0), o);
2393 PL_eval_start = linklist(PL_eval_root);
2394 PL_eval_root->op_private |= OPpREFCOUNTED;
2395 OpREFCNT_set(PL_eval_root, 1);
2396 PL_eval_root->op_next = 0;
2397 CALL_PEEP(PL_eval_start);
2400 if (o->op_type == OP_STUB) {
2401 PL_comppad_name = 0;
2403 S_op_destroy(aTHX_ o);
2406 PL_main_root = scope(sawparens(scalarvoid(o)));
2407 PL_curcop = &PL_compiling;
2408 PL_main_start = LINKLIST(PL_main_root);
2409 PL_main_root->op_private |= OPpREFCOUNTED;
2410 OpREFCNT_set(PL_main_root, 1);
2411 PL_main_root->op_next = 0;
2412 CALL_PEEP(PL_main_start);
2415 /* Register with debugger */
2417 CV * const cv = get_cvs("DB::postponed", 0);
2421 XPUSHs(MUTABLE_SV(CopFILEGV(&PL_compiling)));
2423 call_sv(MUTABLE_SV(cv), G_DISCARD);
2430 Perl_localize(pTHX_ OP *o, I32 lex)
2434 PERL_ARGS_ASSERT_LOCALIZE;
2436 if (o->op_flags & OPf_PARENS)
2437 /* [perl #17376]: this appears to be premature, and results in code such as
2438 C< our(%x); > executing in list mode rather than void mode */
2445 if ( PL_parser->bufptr > PL_parser->oldbufptr
2446 && PL_parser->bufptr[-1] == ','
2447 && ckWARN(WARN_PARENTHESIS))
2449 char *s = PL_parser->bufptr;
2452 /* some heuristics to detect a potential error */
2453 while (*s && (strchr(", \t\n", *s)))
2457 if (*s && strchr("@$%*", *s) && *++s
2458 && (isALNUM(*s) || UTF8_IS_CONTINUED(*s))) {
2461 while (*s && (isALNUM(*s) || UTF8_IS_CONTINUED(*s)))
2463 while (*s && (strchr(", \t\n", *s)))
2469 if (sigil && (*s == ';' || *s == '=')) {
2470 Perl_warner(aTHX_ packWARN(WARN_PARENTHESIS),
2471 "Parentheses missing around \"%s\" list",
2473 ? (PL_parser->in_my == KEY_our
2475 : PL_parser->in_my == KEY_state
2485 o = mod(o, OP_NULL); /* a bit kludgey */
2486 PL_parser->in_my = FALSE;
2487 PL_parser->in_my_stash = NULL;
2492 Perl_jmaybe(pTHX_ OP *o)
2494 PERL_ARGS_ASSERT_JMAYBE;
2496 if (o->op_type == OP_LIST) {
2498 = newSVREF(newGVOP(OP_GV, 0, gv_fetchpvs(";", GV_ADD|GV_NOTQUAL, SVt_PV)));
2499 o = convert(OP_JOIN, 0, prepend_elem(OP_LIST, o2, o));
2505 S_fold_constants(pTHX_ register OP *o)
2508 register OP * VOL curop;
2510 VOL I32 type = o->op_type;
2515 SV * const oldwarnhook = PL_warnhook;
2516 SV * const olddiehook = PL_diehook;
2520 PERL_ARGS_ASSERT_FOLD_CONSTANTS;
2522 if (PL_opargs[type] & OA_RETSCALAR)
2524 if (PL_opargs[type] & OA_TARGET && !o->op_targ)
2525 o->op_targ = pad_alloc(type, SVs_PADTMP);
2527 /* integerize op, unless it happens to be C<-foo>.
2528 * XXX should pp_i_negate() do magic string negation instead? */
2529 if ((PL_opargs[type] & OA_OTHERINT) && (PL_hints & HINT_INTEGER)
2530 && !(type == OP_NEGATE && cUNOPo->op_first->op_type == OP_CONST
2531 && (cUNOPo->op_first->op_private & OPpCONST_BARE)))
2533 o->op_ppaddr = PL_ppaddr[type = ++(o->op_type)];
2536 if (!(PL_opargs[type] & OA_FOLDCONST))
2541 /* XXX might want a ck_negate() for this */
2542 cUNOPo->op_first->op_private &= ~OPpCONST_STRICT;
2553 /* XXX what about the numeric ops? */
2554 if (PL_hints & HINT_LOCALE)
2559 if (PL_parser && PL_parser->error_count)
2560 goto nope; /* Don't try to run w/ errors */
2562 for (curop = LINKLIST(o); curop != o; curop = LINKLIST(curop)) {
2563 const OPCODE type = curop->op_type;
2564 if ((type != OP_CONST || (curop->op_private & OPpCONST_BARE)) &&
2566 type != OP_SCALAR &&
2568 type != OP_PUSHMARK)
2574 curop = LINKLIST(o);
2575 old_next = o->op_next;
2579 oldscope = PL_scopestack_ix;
2580 create_eval_scope(G_FAKINGEVAL);
2582 /* Verify that we don't need to save it: */
2583 assert(PL_curcop == &PL_compiling);
2584 StructCopy(&PL_compiling, ¬_compiling, COP);
2585 PL_curcop = ¬_compiling;
2586 /* The above ensures that we run with all the correct hints of the
2587 currently compiling COP, but that IN_PERL_RUNTIME is not true. */
2588 assert(IN_PERL_RUNTIME);
2589 PL_warnhook = PERL_WARNHOOK_FATAL;
2596 sv = *(PL_stack_sp--);
2597 if (o->op_targ && sv == PAD_SV(o->op_targ)) /* grab pad temp? */
2598 pad_swipe(o->op_targ, FALSE);
2599 else if (SvTEMP(sv)) { /* grab mortal temp? */
2600 SvREFCNT_inc_simple_void(sv);
2605 /* Something tried to die. Abandon constant folding. */
2606 /* Pretend the error never happened. */
2608 o->op_next = old_next;
2612 /* Don't expect 1 (setjmp failed) or 2 (something called my_exit) */
2613 PL_warnhook = oldwarnhook;
2614 PL_diehook = olddiehook;
2615 /* XXX note that this croak may fail as we've already blown away
2616 * the stack - eg any nested evals */
2617 Perl_croak(aTHX_ "panic: fold_constants JMPENV_PUSH returned %d", ret);
2620 PL_warnhook = oldwarnhook;
2621 PL_diehook = olddiehook;
2622 PL_curcop = &PL_compiling;
2624 if (PL_scopestack_ix > oldscope)
2625 delete_eval_scope();
2634 if (type == OP_RV2GV)
2635 newop = newGVOP(OP_GV, 0, MUTABLE_GV(sv));
2637 newop = newSVOP(OP_CONST, 0, MUTABLE_SV(sv));
2638 op_getmad(o,newop,'f');
2646 S_gen_constant_list(pTHX_ register OP *o)
2650 const I32 oldtmps_floor = PL_tmps_floor;
2653 if (PL_parser && PL_parser->error_count)
2654 return o; /* Don't attempt to run with errors */
2656 PL_op = curop = LINKLIST(o);
2662 assert (!(curop->op_flags & OPf_SPECIAL));
2663 assert(curop->op_type == OP_RANGE);
2665 PL_tmps_floor = oldtmps_floor;
2667 o->op_type = OP_RV2AV;
2668 o->op_ppaddr = PL_ppaddr[OP_RV2AV];
2669 o->op_flags &= ~OPf_REF; /* treat \(1..2) like an ordinary list */
2670 o->op_flags |= OPf_PARENS; /* and flatten \(1..2,3) */
2671 o->op_opt = 0; /* needs to be revisited in peep() */
2672 curop = ((UNOP*)o)->op_first;
2673 ((UNOP*)o)->op_first = newSVOP(OP_CONST, 0, SvREFCNT_inc_NN(*PL_stack_sp--));
2675 op_getmad(curop,o,'O');
2684 Perl_convert(pTHX_ I32 type, I32 flags, OP *o)
2687 if (!o || o->op_type != OP_LIST)
2688 o = newLISTOP(OP_LIST, 0, o, NULL);
2690 o->op_flags &= ~OPf_WANT;
2692 if (!(PL_opargs[type] & OA_MARK))
2693 op_null(cLISTOPo->op_first);
2695 o->op_type = (OPCODE)type;
2696 o->op_ppaddr = PL_ppaddr[type];
2697 o->op_flags |= flags;
2699 o = CHECKOP(type, o);
2700 if (o->op_type != (unsigned)type)
2703 return fold_constants(o);
2706 /* List constructors */
2709 Perl_append_elem(pTHX_ I32 type, OP *first, OP *last)
2717 if (first->op_type != (unsigned)type
2718 || (type == OP_LIST && (first->op_flags & OPf_PARENS)))
2720 return newLISTOP(type, 0, first, last);
2723 if (first->op_flags & OPf_KIDS)
2724 ((LISTOP*)first)->op_last->op_sibling = last;
2726 first->op_flags |= OPf_KIDS;
2727 ((LISTOP*)first)->op_first = last;
2729 ((LISTOP*)first)->op_last = last;
2734 Perl_append_list(pTHX_ I32 type, LISTOP *first, LISTOP *last)
2742 if (first->op_type != (unsigned)type)
2743 return prepend_elem(type, (OP*)first, (OP*)last);
2745 if (last->op_type != (unsigned)type)
2746 return append_elem(type, (OP*)first, (OP*)last);
2748 first->op_last->op_sibling = last->op_first;
2749 first->op_last = last->op_last;
2750 first->op_flags |= (last->op_flags & OPf_KIDS);
2753 if (last->op_first && first->op_madprop) {
2754 MADPROP *mp = last->op_first->op_madprop;
2756 while (mp->mad_next)
2758 mp->mad_next = first->op_madprop;
2761 last->op_first->op_madprop = first->op_madprop;
2764 first->op_madprop = last->op_madprop;
2765 last->op_madprop = 0;
2768 S_op_destroy(aTHX_ (OP*)last);
2774 Perl_prepend_elem(pTHX_ I32 type, OP *first, OP *last)
2782 if (last->op_type == (unsigned)type) {
2783 if (type == OP_LIST) { /* already a PUSHMARK there */
2784 first->op_sibling = ((LISTOP*)last)->op_first->op_sibling;
2785 ((LISTOP*)last)->op_first->op_sibling = first;
2786 if (!(first->op_flags & OPf_PARENS))
2787 last->op_flags &= ~OPf_PARENS;
2790 if (!(last->op_flags & OPf_KIDS)) {
2791 ((LISTOP*)last)->op_last = first;
2792 last->op_flags |= OPf_KIDS;
2794 first->op_sibling = ((LISTOP*)last)->op_first;
2795 ((LISTOP*)last)->op_first = first;
2797 last->op_flags |= OPf_KIDS;
2801 return newLISTOP(type, 0, first, last);
2809 Perl_newTOKEN(pTHX_ I32 optype, YYSTYPE lval, MADPROP* madprop)
2812 Newxz(tk, 1, TOKEN);
2813 tk->tk_type = (OPCODE)optype;
2814 tk->tk_type = 12345;
2816 tk->tk_mad = madprop;
2821 Perl_token_free(pTHX_ TOKEN* tk)
2823 PERL_ARGS_ASSERT_TOKEN_FREE;
2825 if (tk->tk_type != 12345)
2827 mad_free(tk->tk_mad);
2832 Perl_token_getmad(pTHX_ TOKEN* tk, OP* o, char slot)
2837 PERL_ARGS_ASSERT_TOKEN_GETMAD;
2839 if (tk->tk_type != 12345) {
2840 Perl_warner(aTHX_ packWARN(WARN_MISC),
2841 "Invalid TOKEN object ignored");
2848 /* faked up qw list? */
2850 tm->mad_type == MAD_SV &&
2851 SvPVX((SV *)tm->mad_val)[0] == 'q')
2858 /* pretend constant fold didn't happen? */
2859 if (mp->mad_key == 'f' &&
2860 (o->op_type == OP_CONST ||
2861 o->op_type == OP_GV) )
2863 token_getmad(tk,(OP*)mp->mad_val,slot);
2877 if (mp->mad_key == 'X')
2878 mp->mad_key = slot; /* just change the first one */
2888 Perl_op_getmad_weak(pTHX_ OP* from, OP* o, char slot)
2897 /* pretend constant fold didn't happen? */
2898 if (mp->mad_key == 'f' &&
2899 (o->op_type == OP_CONST ||
2900 o->op_type == OP_GV) )
2902 op_getmad(from,(OP*)mp->mad_val,slot);
2909 mp->mad_next = newMADPROP(slot,MAD_OP,from,0);
2912 o->op_madprop = newMADPROP(slot,MAD_OP,from,0);
2918 Perl_op_getmad(pTHX_ OP* from, OP* o, char slot)
2927 /* pretend constant fold didn't happen? */
2928 if (mp->mad_key == 'f' &&
2929 (o->op_type == OP_CONST ||
2930 o->op_type == OP_GV) )
2932 op_getmad(from,(OP*)mp->mad_val,slot);
2939 mp->mad_next = newMADPROP(slot,MAD_OP,from,1);
2942 o->op_madprop = newMADPROP(slot,MAD_OP,from,1);
2946 PerlIO_printf(PerlIO_stderr(),
2947 "DESTROYING op = %0"UVxf"\n", PTR2UV(from));
2953 Perl_prepend_madprops(pTHX_ MADPROP* mp, OP* o, char slot)
2971 Perl_append_madprops(pTHX_ MADPROP* tm, OP* o, char slot)
2975 addmad(tm, &(o->op_madprop), slot);
2979 Perl_addmad(pTHX_ MADPROP* tm, MADPROP** root, char slot)
3000 Perl_newMADsv(pTHX_ char key, SV* sv)
3002 PERL_ARGS_ASSERT_NEWMADSV;
3004 return newMADPROP(key, MAD_SV, sv, 0);
3008 Perl_newMADPROP(pTHX_ char key, char type, void* val, I32 vlen)
3011 Newxz(mp, 1, MADPROP);
3014 mp->mad_vlen = vlen;
3015 mp->mad_type = type;
3017 /* PerlIO_printf(PerlIO_stderr(), "NEW mp = %0x\n", mp); */
3022 Perl_mad_free(pTHX_ MADPROP* mp)
3024 /* PerlIO_printf(PerlIO_stderr(), "FREE mp = %0x\n", mp); */
3028 mad_free(mp->mad_next);
3029 /* if (PL_parser && PL_parser->lex_state != LEX_NOTPARSING && mp->mad_vlen)
3030 PerlIO_printf(PerlIO_stderr(), "DESTROYING '%c'=<%s>\n", mp->mad_key & 255, mp->mad_val); */
3031 switch (mp->mad_type) {
3035 Safefree((char*)mp->mad_val);
3038 if (mp->mad_vlen) /* vlen holds "strong/weak" boolean */
3039 op_free((OP*)mp->mad_val);
3042 sv_free(MUTABLE_SV(mp->mad_val));
3045 PerlIO_printf(PerlIO_stderr(), "Unrecognized mad\n");
3054 Perl_newNULLLIST(pTHX)
3056 return newOP(OP_STUB, 0);
3060 S_force_list(pTHX_ OP *o)
3062 if (!o || o->op_type != OP_LIST)
3063 o = newLISTOP(OP_LIST, 0, o, NULL);
3069 Perl_newLISTOP(pTHX_ I32 type, I32 flags, OP *first, OP *last)
3074 assert((PL_opargs[type] & OA_CLASS_MASK) == OA_LISTOP);
3076 NewOp(1101, listop, 1, LISTOP);
3078 listop->op_type = (OPCODE)type;
3079 listop->op_ppaddr = PL_ppaddr[type];
3082 listop->op_flags = (U8)flags;
3086 else if (!first && last)
3089 first->op_sibling = last;
3090 listop->op_first = first;
3091 listop->op_last = last;
3092 if (type == OP_LIST) {
3093 OP* const pushop = newOP(OP_PUSHMARK, 0);
3094 pushop->op_sibling = first;
3095 listop->op_first = pushop;
3096 listop->op_flags |= OPf_KIDS;
3098 listop->op_last = pushop;
3101 return CHECKOP(type, listop);
3105 Perl_newOP(pTHX_ I32 type, I32 flags)
3110 assert((PL_opargs[type] & OA_CLASS_MASK) == OA_BASEOP
3111 || (PL_opargs[type] & OA_CLASS_MASK) == OA_BASEOP_OR_UNOP
3112 || (PL_opargs[type] & OA_CLASS_MASK) == OA_FILESTATOP
3113 || (PL_opargs[type] & OA_CLASS_MASK) == OA_LOOPEXOP);
3115 NewOp(1101, o, 1, OP);
3116 o->op_type = (OPCODE)type;
3117 o->op_ppaddr = PL_ppaddr[type];
3118 o->op_flags = (U8)flags;
3120 o->op_latefreed = 0;
3124 o->op_private = (U8)(0 | (flags >> 8));
3125 if (PL_opargs[type] & OA_RETSCALAR)
3127 if (PL_opargs[type] & OA_TARGET)
3128 o->op_targ = pad_alloc(type, SVs_PADTMP);
3129 return CHECKOP(type, o);
3133 Perl_newUNOP(pTHX_ I32 type, I32 flags, OP *first)
3138 assert((PL_opargs[type] & OA_CLASS_MASK) == OA_UNOP
3139 || (PL_opargs[type] & OA_CLASS_MASK) == OA_BASEOP_OR_UNOP
3140 || (PL_opargs[type] & OA_CLASS_MASK) == OA_FILESTATOP
3141 || (PL_opargs[type] & OA_CLASS_MASK) == OA_LOOPEXOP
3142 || type == OP_SASSIGN
3143 || type == OP_ENTERTRY
3144 || type == OP_NULL );
3147 first = newOP(OP_STUB, 0);
3148 if (PL_opargs[type] & OA_MARK)
3149 first = force_list(first);
3151 NewOp(1101, unop, 1, UNOP);
3152 unop->op_type = (OPCODE)type;
3153 unop->op_ppaddr = PL_ppaddr[type];
3154 unop->op_first = first;
3155 unop->op_flags = (U8)(flags | OPf_KIDS);
3156 unop->op_private = (U8)(1 | (flags >> 8));
3157 unop = (UNOP*) CHECKOP(type, unop);
3161 return fold_constants((OP *) unop);
3165 Perl_newBINOP(pTHX_ I32 type, I32 flags, OP *first, OP *last)
3170 assert((PL_opargs[type] & OA_CLASS_MASK) == OA_BINOP
3171 || type == OP_SASSIGN || type == OP_NULL );
3173 NewOp(1101, binop, 1, BINOP);
3176 first = newOP(OP_NULL, 0);
3178 binop->op_type = (OPCODE)type;
3179 binop->op_ppaddr = PL_ppaddr[type];
3180 binop->op_first = first;
3181 binop->op_flags = (U8)(flags | OPf_KIDS);
3184 binop->op_private = (U8)(1 | (flags >> 8));
3187 binop->op_private = (U8)(2 | (flags >> 8));
3188 first->op_sibling = last;
3191 binop = (BINOP*)CHECKOP(type, binop);
3192 if (binop->op_next || binop->op_type != (OPCODE)type)
3195 binop->op_last = binop->op_first->op_sibling;
3197 return fold_constants((OP *)binop);
3200 static int uvcompare(const void *a, const void *b)
3201 __attribute__nonnull__(1)
3202 __attribute__nonnull__(2)
3203 __attribute__pure__;
3204 static int uvcompare(const void *a, const void *b)
3206 if (*((const UV *)a) < (*(const UV *)b))
3208 if (*((const UV *)a) > (*(const UV *)b))
3210 if (*((const UV *)a+1) < (*(const UV *)b+1))
3212 if (*((const UV *)a+1) > (*(const UV *)b+1))
3218 S_pmtrans(pTHX_ OP *o, OP *expr, OP *repl)
3221 SV * const tstr = ((SVOP*)expr)->op_sv;
3224 (repl->op_type == OP_NULL)
3225 ? ((SVOP*)((LISTOP*)repl)->op_first)->op_sv :
3227 ((SVOP*)repl)->op_sv;
3230 const U8 *t = (U8*)SvPV_const(tstr, tlen);
3231 const U8 *r = (U8*)SvPV_const(rstr, rlen);
3235 register short *tbl;
3237 const I32 complement = o->op_private & OPpTRANS_COMPLEMENT;
3238 const I32 squash = o->op_private & OPpTRANS_SQUASH;
3239 I32 del = o->op_private & OPpTRANS_DELETE;
3242 PERL_ARGS_ASSERT_PMTRANS;
3244 PL_hints |= HINT_BLOCK_SCOPE;
3247 o->op_private |= OPpTRANS_FROM_UTF;
3250 o->op_private |= OPpTRANS_TO_UTF;
3252 if (o->op_private & (OPpTRANS_FROM_UTF|OPpTRANS_TO_UTF)) {
3253 SV* const listsv = newSVpvs("# comment\n");
3255 const U8* tend = t + tlen;
3256 const U8* rend = r + rlen;
3270 const I32 from_utf = o->op_private & OPpTRANS_FROM_UTF;
3271 const I32 to_utf = o->op_private & OPpTRANS_TO_UTF;
3274 const U32 flags = UTF8_ALLOW_DEFAULT;
3278 t = tsave = bytes_to_utf8(t, &len);
3281 if (!to_utf && rlen) {
3283 r = rsave = bytes_to_utf8(r, &len);
3287 /* There are several snags with this code on EBCDIC:
3288 1. 0xFF is a legal UTF-EBCDIC byte (there are no illegal bytes).
3289 2. scan_const() in toke.c has encoded chars in native encoding which makes
3290 ranges at least in EBCDIC 0..255 range the bottom odd.
3294 U8 tmpbuf[UTF8_MAXBYTES+1];
3297 Newx(cp, 2*tlen, UV);
3299 transv = newSVpvs("");
3301 cp[2*i] = utf8n_to_uvuni(t, tend-t, &ulen, flags);
3303 if (t < tend && NATIVE_TO_UTF(*t) == 0xff) {
3305 cp[2*i+1] = utf8n_to_uvuni(t, tend-t, &ulen, flags);
3309 cp[2*i+1] = cp[2*i];
3313 qsort(cp, i, 2*sizeof(UV), uvcompare);
3314 for (j = 0; j < i; j++) {
3316 diff = val - nextmin;
3318 t = uvuni_to_utf8(tmpbuf,nextmin);
3319 sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf);
3321 U8 range_mark = UTF_TO_NATIVE(0xff);
3322 t = uvuni_to_utf8(tmpbuf, val - 1);
3323 sv_catpvn(transv, (char *)&range_mark, 1);
3324 sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf);
3331 t = uvuni_to_utf8(tmpbuf,nextmin);
3332 sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf);
3334 U8 range_mark = UTF_TO_NATIVE(0xff);
3335 sv_catpvn(transv, (char *)&range_mark, 1);
3337 t = uvuni_to_utf8_flags(tmpbuf, 0x7fffffff,
3338 UNICODE_ALLOW_SUPER);
3339 sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf);
3340 t = (const U8*)SvPVX_const(transv);
3341 tlen = SvCUR(transv);
3345 else if (!rlen && !del) {
3346 r = t; rlen = tlen; rend = tend;
3349 if ((!rlen && !del) || t == r ||
3350 (tlen == rlen && memEQ((char *)t, (char *)r, tlen)))
3352 o->op_private |= OPpTRANS_IDENTICAL;
3356 while (t < tend || tfirst <= tlast) {
3357 /* see if we need more "t" chars */
3358 if (tfirst > tlast) {
3359 tfirst = (I32)utf8n_to_uvuni(t, tend - t, &ulen, flags);
3361 if (t < tend && NATIVE_TO_UTF(*t) == 0xff) { /* illegal utf8 val indicates range */
3363 tlast = (I32)utf8n_to_uvuni(t, tend - t, &ulen, flags);
3370 /* now see if we need more "r" chars */
3371 if (rfirst > rlast) {
3373 rfirst = (I32)utf8n_to_uvuni(r, rend - r, &ulen, flags);
3375 if (r < rend && NATIVE_TO_UTF(*r) == 0xff) { /* illegal utf8 val indicates range */
3377 rlast = (I32)utf8n_to_uvuni(r, rend - r, &ulen, flags);
3386 rfirst = rlast = 0xffffffff;
3390 /* now see which range will peter our first, if either. */
3391 tdiff = tlast - tfirst;
3392 rdiff = rlast - rfirst;
3399 if (rfirst == 0xffffffff) {
3400 diff = tdiff; /* oops, pretend rdiff is infinite */
3402 Perl_sv_catpvf(aTHX_ listsv, "%04lx\t%04lx\tXXXX\n",
3403 (long)tfirst, (long)tlast);
3405 Perl_sv_catpvf(aTHX_ listsv, "%04lx\t\tXXXX\n", (long)tfirst);
3409 Perl_sv_catpvf(aTHX_ listsv, "%04lx\t%04lx\t%04lx\n",
3410 (long)tfirst, (long)(tfirst + diff),
3413 Perl_sv_catpvf(aTHX_ listsv, "%04lx\t\t%04lx\n",
3414 (long)tfirst, (long)rfirst);
3416 if (rfirst + diff > max)
3417 max = rfirst + diff;
3419 grows = (tfirst < rfirst &&
3420 UNISKIP(tfirst) < UNISKIP(rfirst + diff));
3432 else if (max > 0xff)
3437 PerlMemShared_free(cPVOPo->op_pv);
3438 cPVOPo->op_pv = NULL;
3440 swash = MUTABLE_SV(swash_init("utf8", "", listsv, bits, none));
3442 cPADOPo->op_padix = pad_alloc(OP_TRANS, SVs_PADTMP);
3443 SvREFCNT_dec(PAD_SVl(cPADOPo->op_padix));
3444 PAD_SETSV(cPADOPo->op_padix, swash);
3446 SvREADONLY_on(swash);
3448 cSVOPo->op_sv = swash;
3450 SvREFCNT_dec(listsv);
3451 SvREFCNT_dec(transv);
3453 if (!del && havefinal && rlen)
3454 (void)hv_store(MUTABLE_HV(SvRV(swash)), "FINAL", 5,
3455 newSVuv((UV)final), 0);
3458 o->op_private |= OPpTRANS_GROWS;
3464 op_getmad(expr,o,'e');
3465 op_getmad(repl,o,'r');
3473 tbl = (short*)cPVOPo->op_pv;
3475 Zero(tbl, 256, short);
3476 for (i = 0; i < (I32)tlen; i++)
3478 for (i = 0, j = 0; i < 256; i++) {
3480 if (j >= (I32)rlen) {
3489 if (i < 128 && r[j] >= 128)
3499 o->op_private |= OPpTRANS_IDENTICAL;
3501 else if (j >= (I32)rlen)
3506 PerlMemShared_realloc(tbl,
3507 (0x101+rlen-j) * sizeof(short));
3508 cPVOPo->op_pv = (char*)tbl;
3510 tbl[0x100] = (short)(rlen - j);
3511 for (i=0; i < (I32)rlen - j; i++)
3512 tbl[0x101+i] = r[j+i];
3516 if (!rlen && !del) {
3519 o->op_private |= OPpTRANS_IDENTICAL;
3521 else if (!squash && rlen == tlen && memEQ((char*)t, (char*)r, tlen)) {
3522 o->op_private |= OPpTRANS_IDENTICAL;
3524 for (i = 0; i < 256; i++)
3526 for (i = 0, j = 0; i < (I32)tlen; i++,j++) {
3527 if (j >= (I32)rlen) {
3529 if (tbl[t[i]] == -1)
3535 if (tbl[t[i]] == -1) {
3536 if (t[i] < 128 && r[j] >= 128)
3543 if(del && rlen == tlen) {
3544 Perl_ck_warner(aTHX_ packWARN(WARN_MISC), "Useless use of /d modifier in transliteration operator");
3545 } else if(rlen > tlen) {
3546 Perl_ck_warner(aTHX_ packWARN(WARN_MISC), "Replacement list is longer than search list");
3550 o->op_private |= OPpTRANS_GROWS;
3552 op_getmad(expr,o,'e');
3553 op_getmad(repl,o,'r');
3563 Perl_newPMOP(pTHX_ I32 type, I32 flags)
3568 assert((PL_opargs[type] & OA_CLASS_MASK) == OA_PMOP);
3570 NewOp(1101, pmop, 1, PMOP);
3571 pmop->op_type = (OPCODE)type;
3572 pmop->op_ppaddr = PL_ppaddr[type];
3573 pmop->op_flags = (U8)flags;
3574 pmop->op_private = (U8)(0 | (flags >> 8));
3576 if (PL_hints & HINT_RE_TAINT)
3577 pmop->op_pmflags |= PMf_RETAINT;
3578 if (PL_hints & HINT_LOCALE)
3579 pmop->op_pmflags |= PMf_LOCALE;
3583 assert(SvPOK(PL_regex_pad[0]));
3584 if (SvCUR(PL_regex_pad[0])) {
3585 /* Pop off the "packed" IV from the end. */
3586 SV *const repointer_list = PL_regex_pad[0];
3587 const char *p = SvEND(repointer_list) - sizeof(IV);
3588 const IV offset = *((IV*)p);
3590 assert(SvCUR(repointer_list) % sizeof(IV) == 0);
3592 SvEND_set(repointer_list, p);
3594 pmop->op_pmoffset = offset;
3595 /* This slot should be free, so assert this: */
3596 assert(PL_regex_pad[offset] == &PL_sv_undef);
3598 SV * const repointer = &PL_sv_undef;
3599 av_push(PL_regex_padav, repointer);
3600 pmop->op_pmoffset = av_len(PL_regex_padav);
3601 PL_regex_pad = AvARRAY(PL_regex_padav);
3605 return CHECKOP(type, pmop);
3608 /* Given some sort of match op o, and an expression expr containing a
3609 * pattern, either compile expr into a regex and attach it to o (if it's
3610 * constant), or convert expr into a runtime regcomp op sequence (if it's
3613 * isreg indicates that the pattern is part of a regex construct, eg
3614 * $x =~ /pattern/ or split /pattern/, as opposed to $x =~ $pattern or
3615 * split "pattern", which aren't. In the former case, expr will be a list
3616 * if the pattern contains more than one term (eg /a$b/) or if it contains
3617 * a replacement, ie s/// or tr///.
3621 Perl_pmruntime(pTHX_ OP *o, OP *expr, bool isreg)
3626 I32 repl_has_vars = 0;
3630 PERL_ARGS_ASSERT_PMRUNTIME;
3632 if (o->op_type == OP_SUBST || o->op_type == OP_TRANS) {
3633 /* last element in list is the replacement; pop it */
3635 repl = cLISTOPx(expr)->op_last;
3636 kid = cLISTOPx(expr)->op_first;
3637 while (kid->op_sibling != repl)
3638 kid = kid->op_sibling;
3639 kid->op_sibling = NULL;
3640 cLISTOPx(expr)->op_last = kid;
3643 if (isreg && expr->op_type == OP_LIST &&
3644 cLISTOPx(expr)->op_first->op_sibling == cLISTOPx(expr)->op_last)
3646 /* convert single element list to element */
3647 OP* const oe = expr;
3648 expr = cLISTOPx(oe)->op_first->op_sibling;
3649 cLISTOPx(oe)->op_first->op_sibling = NULL;
3650 cLISTOPx(oe)->op_last = NULL;
3654 if (o->op_type == OP_TRANS) {
3655 return pmtrans(o, expr, repl);
3658 reglist = isreg && expr->op_type == OP_LIST;
3662 PL_hints |= HINT_BLOCK_SCOPE;
3665 if (expr->op_type == OP_CONST) {
3666 SV *pat = ((SVOP*)expr)->op_sv;
3667 U32 pm_flags = pm->op_pmflags & PMf_COMPILETIME;
3669 if (o->op_flags & OPf_SPECIAL)
3670 pm_flags |= RXf_SPLIT;
3673 assert (SvUTF8(pat));
3674 } else if (SvUTF8(pat)) {
3675 /* Not doing UTF-8, despite what the SV says. Is this only if we're
3676 trapped in use 'bytes'? */
3677 /* Make a copy of the octet sequence, but without the flag on, as
3678 the compiler now honours the SvUTF8 flag on pat. */
3680 const char *const p = SvPV(pat, len);
3681 pat = newSVpvn_flags(p, len, SVs_TEMP);
3684 PM_SETRE(pm, CALLREGCOMP(pat, pm_flags));
3687 op_getmad(expr,(OP*)pm,'e');
3693 if (pm->op_pmflags & PMf_KEEP || !(PL_hints & HINT_RE_EVAL))
3694 expr = newUNOP((!(PL_hints & HINT_RE_EVAL)
3696 : OP_REGCMAYBE),0,expr);
3698 NewOp(1101, rcop, 1, LOGOP);
3699 rcop->op_type = OP_REGCOMP;
3700 rcop->op_ppaddr = PL_ppaddr[OP_REGCOMP];
3701 rcop->op_first = scalar(expr);
3702 rcop->op_flags |= OPf_KIDS
3703 | ((PL_hints & HINT_RE_EVAL) ? OPf_SPECIAL : 0)
3704 | (reglist ? OPf_STACKED : 0);
3705 rcop->op_private = 1;
3708 rcop->op_targ = pad_alloc(rcop->op_type, SVs_PADTMP);
3710 /* /$x/ may cause an eval, since $x might be qr/(?{..})/ */
3713 /* establish postfix order */
3714 if (pm->op_pmflags & PMf_KEEP || !(PL_hints & HINT_RE_EVAL)) {
3716 rcop->op_next = expr;
3717 ((UNOP*)expr)->op_first->op_next = (OP*)rcop;
3720 rcop->op_next = LINKLIST(expr);
3721 expr->op_next = (OP*)rcop;
3724 prepend_elem(o->op_type, scalar((OP*)rcop), o);
3729 if (pm->op_pmflags & PMf_EVAL) {
3731 if (CopLINE(PL_curcop) < (line_t)PL_parser->multi_end)
3732 CopLINE_set(PL_curcop, (line_t)PL_parser->multi_end);
3734 else if (repl->op_type == OP_CONST)
3738 for (curop = LINKLIST(repl); curop!=repl; curop = LINKLIST(curop)) {
3739 if (curop->op_type == OP_SCOPE
3740 || curop->op_type == OP_LEAVE
3741 || (PL_opargs[curop->op_type] & OA_DANGEROUS)) {
3742 if (curop->op_type == OP_GV) {
3743 GV * const gv = cGVOPx_gv(curop);
3745 if (strchr("&`'123456789+-\016\022", *GvENAME(gv)))
3748 else if (curop->op_type == OP_RV2CV)
3750 else if (curop->op_type == OP_RV2SV ||
3751 curop->op_type == OP_RV2AV ||
3752 curop->op_type == OP_RV2HV ||
3753 curop->op_type == OP_RV2GV) {
3754 if (lastop && lastop->op_type != OP_GV) /*funny deref?*/
3757 else if (curop->op_type == OP_PADSV ||
3758 curop->op_type == OP_PADAV ||
3759 curop->op_type == OP_PADHV ||
3760 curop->op_type == OP_PADANY)
3764 else if (curop->op_type == OP_PUSHRE)
3765 NOOP; /* Okay here, dangerous in newASSIGNOP */
3775 || RX_EXTFLAGS(PM_GETRE(pm)) & RXf_EVAL_SEEN)))
3777 pm->op_pmflags |= PMf_CONST; /* const for long enough */
3778 prepend_elem(o->op_type, scalar(repl), o);
3781 if (curop == repl && !PM_GETRE(pm)) { /* Has variables. */
3782 pm->op_pmflags |= PMf_MAYBE_CONST;
3784 NewOp(1101, rcop, 1, LOGOP);
3785 rcop->op_type = OP_SUBSTCONT;
3786 rcop->op_ppaddr = PL_ppaddr[OP_SUBSTCONT];
3787 rcop->op_first = scalar(repl);
3788 rcop->op_flags |= OPf_KIDS;
3789 rcop->op_private = 1;
3792 /* establish postfix order */
3793 rcop->op_next = LINKLIST(repl);
3794 repl->op_next = (OP*)rcop;
3796 pm->op_pmreplrootu.op_pmreplroot = scalar((OP*)rcop);
3797 assert(!(pm->op_pmflags & PMf_ONCE));
3798 pm->op_pmstashstartu.op_pmreplstart = LINKLIST(rcop);
3807 Perl_newSVOP(pTHX_ I32 type, I32 flags, SV *sv)
3812 PERL_ARGS_ASSERT_NEWSVOP;
3814 assert((PL_opargs[type] & OA_CLASS_MASK) == OA_SVOP
3815 || (PL_opargs[type] & OA_CLASS_MASK) == OA_PVOP_OR_SVOP
3816 || (PL_opargs[type] & OA_CLASS_MASK) == OA_FILESTATOP);
3818 NewOp(1101, svop, 1, SVOP);
3819 svop->op_type = (OPCODE)type;
3820 svop->op_ppaddr = PL_ppaddr[type];
3822 svop->op_next = (OP*)svop;
3823 svop->op_flags = (U8)flags;
3824 if (PL_opargs[type] & OA_RETSCALAR)
3826 if (PL_opargs[type] & OA_TARGET)
3827 svop->op_targ = pad_alloc(type, SVs_PADTMP);
3828 return CHECKOP(type, svop);
3833 Perl_newPADOP(pTHX_ I32 type, I32 flags, SV *sv)
3838 PERL_ARGS_ASSERT_NEWPADOP;
3840 assert((PL_opargs[type] & OA_CLASS_MASK) == OA_SVOP
3841 || (PL_opargs[type] & OA_CLASS_MASK) == OA_PVOP_OR_SVOP
3842 || (PL_opargs[type] & OA_CLASS_MASK) == OA_FILESTATOP);
3844 NewOp(1101, padop, 1, PADOP);
3845 padop->op_type = (OPCODE)type;
3846 padop->op_ppaddr = PL_ppaddr[type];
3847 padop->op_padix = pad_alloc(type, SVs_PADTMP);
3848 SvREFCNT_dec(PAD_SVl(padop->op_padix));
3849 PAD_SETSV(padop->op_padix, sv);
3852 padop->op_next = (OP*)padop;
3853 padop->op_flags = (U8)flags;
3854 if (PL_opargs[type] & OA_RETSCALAR)
3856 if (PL_opargs[type] & OA_TARGET)
3857 padop->op_targ = pad_alloc(type, SVs_PADTMP);
3858 return CHECKOP(type, padop);
3863 Perl_newGVOP(pTHX_ I32 type, I32 flags, GV *gv)
3867 PERL_ARGS_ASSERT_NEWGVOP;
3871 return newPADOP(type, flags, SvREFCNT_inc_simple_NN(gv));
3873 return newSVOP(type, flags, SvREFCNT_inc_simple_NN(gv));
3878 Perl_newPVOP(pTHX_ I32 type, I32 flags, char *pv)
3883 assert((PL_opargs[type] & OA_CLASS_MASK) == OA_PVOP_OR_SVOP
3884 || (PL_opargs[type] & OA_CLASS_MASK) == OA_LOOPEXOP);
3886 NewOp(1101, pvop, 1, PVOP);
3887 pvop->op_type = (OPCODE)type;
3888 pvop->op_ppaddr = PL_ppaddr[type];
3890 pvop->op_next = (OP*)pvop;
3891 pvop->op_flags = (U8)flags;
3892 if (PL_opargs[type] & OA_RETSCALAR)
3894 if (PL_opargs[type] & OA_TARGET)
3895 pvop->op_targ = pad_alloc(type, SVs_PADTMP);
3896 return CHECKOP(type, pvop);
3904 Perl_package(pTHX_ OP *o)
3907 SV *const sv = cSVOPo->op_sv;
3912 PERL_ARGS_ASSERT_PACKAGE;
3914 save_hptr(&PL_curstash);
3915 save_item(PL_curstname);
3917 PL_curstash = gv_stashsv(sv, GV_ADD);
3919 sv_setsv(PL_curstname, sv);
3921 PL_hints |= HINT_BLOCK_SCOPE;
3922 PL_parser->copline = NOLINE;
3923 PL_parser->expect = XSTATE;
3928 if (!PL_madskills) {
3933 pegop = newOP(OP_NULL,0);
3934 op_getmad(o,pegop,'P');
3940 Perl_package_version( pTHX_ OP *v )
3943 U32 savehints = PL_hints;
3944 PERL_ARGS_ASSERT_PACKAGE_VERSION;
3945 PL_hints &= ~HINT_STRICT_VARS;
3946 sv_setsv( GvSV(gv_fetchpvs("VERSION", GV_ADDMULTI, SVt_PV)), cSVOPx(v)->op_sv );
3947 PL_hints = savehints;
3956 Perl_utilize(pTHX_ int aver, I32 floor, OP *version, OP *idop, OP *arg)
3963 OP *pegop = newOP(OP_NULL,0);
3966 PERL_ARGS_ASSERT_UTILIZE;
3968 if (idop->op_type != OP_CONST)
3969 Perl_croak(aTHX_ "Module name must be constant");
3972 op_getmad(idop,pegop,'U');
3977 SV * const vesv = ((SVOP*)version)->op_sv;
3980 op_getmad(version,pegop,'V');
3981 if (!arg && !SvNIOKp(vesv)) {
3988 if (version->op_type != OP_CONST || !SvNIOKp(vesv))
3989 Perl_croak(aTHX_ "Version number must be a constant number");
3991 /* Make copy of idop so we don't free it twice */
3992 pack = newSVOP(OP_CONST, 0, newSVsv(((SVOP*)idop)->op_sv));
3994 /* Fake up a method call to VERSION */
3995 meth = newSVpvs_share("VERSION");
3996 veop = convert(OP_ENTERSUB, OPf_STACKED|OPf_SPECIAL,
3997 append_elem(OP_LIST,
3998 prepend_elem(OP_LIST, pack, list(version)),
3999 newSVOP(OP_METHOD_NAMED, 0, meth)));
4003 /* Fake up an import/unimport */
4004 if (arg && arg->op_type == OP_STUB) {
4006 op_getmad(arg,pegop,'S');
4007 imop = arg; /* no import on explicit () */
4009 else if (SvNIOKp(((SVOP*)idop)->op_sv)) {
4010 imop = NULL; /* use 5.0; */
4012 idop->op_private |= OPpCONST_NOVER;
4018 op_getmad(arg,pegop,'A');
4020 /* Make copy of idop so we don't free it twice */
4021 pack = newSVOP(OP_CONST, 0, newSVsv(((SVOP*)idop)->op_sv));
4023 /* Fake up a method call to import/unimport */
4025 ? newSVpvs_share("import") : newSVpvs_share("unimport");
4026 imop = convert(OP_ENTERSUB, OPf_STACKED|OPf_SPECIAL,
4027 append_elem(OP_LIST,
4028 prepend_elem(OP_LIST, pack, list(arg)),
4029 newSVOP(OP_METHOD_NAMED, 0, meth)));
4032 /* Fake up the BEGIN {}, which does its thing immediately. */
4034 newSVOP(OP_CONST, 0, newSVpvs_share("BEGIN")),
4037 append_elem(OP_LINESEQ,
4038 append_elem(OP_LINESEQ,
4039 newSTATEOP(0, NULL, newUNOP(OP_REQUIRE, 0, idop)),
4040 newSTATEOP(0, NULL, veop)),
4041 newSTATEOP(0, NULL, imop) ));
4043 /* The "did you use incorrect case?" warning used to be here.
4044 * The problem is that on case-insensitive filesystems one
4045 * might get false positives for "use" (and "require"):
4046 * "use Strict" or "require CARP" will work. This causes
4047 * portability problems for the script: in case-strict
4048 * filesystems the script will stop working.
4050 * The "incorrect case" warning checked whether "use Foo"
4051 * imported "Foo" to your namespace, but that is wrong, too:
4052 * there is no requirement nor promise in the language that
4053 * a Foo.pm should or would contain anything in package "Foo".
4055 * There is very little Configure-wise that can be done, either:
4056 * the case-sensitivity of the build filesystem of Perl does not
4057 * help in guessing the case-sensitivity of the runtime environment.
4060 PL_hints |= HINT_BLOCK_SCOPE;
4061 PL_parser->copline = NOLINE;
4062 PL_parser->expect = XSTATE;
4063 PL_cop_seqmax++; /* Purely for B::*'s benefit */
4066 if (!PL_madskills) {
4067 /* FIXME - don't allocate pegop if !PL_madskills */
4076 =head1 Embedding Functions
4078 =for apidoc load_module
4080 Loads the module whose name is pointed to by the string part of name.
4081 Note that the actual module name, not its filename, should be given.
4082 Eg, "Foo::Bar" instead of "Foo/Bar.pm". flags can be any of
4083 PERL_LOADMOD_DENY, PERL_LOADMOD_NOIMPORT, or PERL_LOADMOD_IMPORT_OPS
4084 (or 0 for no flags). ver, if specified, provides version semantics
4085 similar to C<use Foo::Bar VERSION>. The optional trailing SV*
4086 arguments can be used to specify arguments to the module's import()
4087 method, similar to C<use Foo::Bar VERSION LIST>. They must be
4088 terminated with a final NULL pointer. Note that this list can only
4089 be omitted when the PERL_LOADMOD_NOIMPORT flag has been used.
4090 Otherwise at least a single NULL pointer to designate the default
4091 import list is required.
4096 Perl_load_module(pTHX_ U32 flags, SV *name, SV *ver, ...)
4100 PERL_ARGS_ASSERT_LOAD_MODULE;
4102 va_start(args, ver);
4103 vload_module(flags, name, ver, &args);
4107 #ifdef PERL_IMPLICIT_CONTEXT
4109 Perl_load_module_nocontext(U32 flags, SV *name, SV *ver, ...)
4113 PERL_ARGS_ASSERT_LOAD_MODULE_NOCONTEXT;
4114 va_start(args, ver);
4115 vload_module(flags, name, ver, &args);
4121 Perl_vload_module(pTHX_ U32 flags, SV *name, SV *ver, va_list *args)
4125 OP * const modname = newSVOP(OP_CONST, 0, name);
4127 PERL_ARGS_ASSERT_VLOAD_MODULE;
4129 modname->op_private |= OPpCONST_BARE;
4131 veop = newSVOP(OP_CONST, 0, ver);
4135 if (flags & PERL_LOADMOD_NOIMPORT) {
4136 imop = sawparens(newNULLLIST());
4138 else if (flags & PERL_LOADMOD_IMPORT_OPS) {
4139 imop = va_arg(*args, OP*);
4144 sv = va_arg(*args, SV*);
4146 imop = append_elem(OP_LIST, imop, newSVOP(OP_CONST, 0, sv));
4147 sv = va_arg(*args, SV*);
4151 /* utilize() fakes up a BEGIN { require ..; import ... }, so make sure
4152 * that it has a PL_parser to play with while doing that, and also
4153 * that it doesn't mess with any existing parser, by creating a tmp
4154 * new parser with lex_start(). This won't actually be used for much,
4155 * since pp_require() will create another parser for the real work. */
4158 SAVEVPTR(PL_curcop);
4159 lex_start(NULL, NULL, FALSE);
4160 utilize(!(flags & PERL_LOADMOD_DENY), start_subparse(FALSE, 0),
4161 veop, modname, imop);
4166 Perl_dofile(pTHX_ OP *term, I32 force_builtin)
4172 PERL_ARGS_ASSERT_DOFILE;
4174 if (!force_builtin) {
4175 gv = gv_fetchpvs("do", GV_NOTQUAL, SVt_PVCV);
4176 if (!(gv && GvCVu(gv) && GvIMPORTED_CV(gv))) {
4177 GV * const * const gvp = (GV**)hv_fetchs(PL_globalstash, "do", FALSE);
4178 gv = gvp ? *gvp : NULL;
4182 if (gv && GvCVu(gv) && GvIMPORTED_CV(gv)) {
4183 doop = ck_subr(newUNOP(OP_ENTERSUB, OPf_STACKED,
4184 append_elem(OP_LIST, term,
4185 scalar(newUNOP(OP_RV2CV, 0,
4186 newGVOP(OP_GV, 0, gv))))));
4189 doop = newUNOP(OP_DOFILE, 0, scalar(term));
4195 Perl_newSLICEOP(pTHX_ I32 flags, OP *subscript, OP *listval)
4197 return newBINOP(OP_LSLICE, flags,
4198 list(force_list(subscript)),
4199 list(force_list(listval)) );
4203 S_is_list_assignment(pTHX_ register const OP *o)
4211 if ((o->op_type == OP_NULL) && (o->op_flags & OPf_KIDS))
4212 o = cUNOPo->op_first;
4214 flags = o->op_flags;
4216 if (type == OP_COND_EXPR) {
4217 const I32 t = is_list_assignment(cLOGOPo->op_first->op_sibling);
4218 const I32 f = is_list_assignment(cLOGOPo->op_first->op_sibling->op_sibling);
4223 yyerror("Assignment to both a list and a scalar");
4227 if (type == OP_LIST &&
4228 (flags & OPf_WANT) == OPf_WANT_SCALAR &&
4229 o->op_private & OPpLVAL_INTRO)
4232 if (type == OP_LIST || flags & OPf_PARENS ||
4233 type == OP_RV2AV || type == OP_RV2HV ||
4234 type == OP_ASLICE || type == OP_HSLICE)
4237 if (type == OP_PADAV || type == OP_PADHV)
4240 if (type == OP_RV2SV)
4247 Perl_newASSIGNOP(pTHX_ I32 flags, OP *left, I32 optype, OP *right)
4253 if (optype == OP_ANDASSIGN || optype == OP_ORASSIGN || optype == OP_DORASSIGN) {
4254 return newLOGOP(optype, 0,
4255 mod(scalar(left), optype),
4256 newUNOP(OP_SASSIGN, 0, scalar(right)));
4259 return newBINOP(optype, OPf_STACKED,
4260 mod(scalar(left), optype), scalar(right));
4264 if (is_list_assignment(left)) {
4265 static const char no_list_state[] = "Initialization of state variables"
4266 " in list context currently forbidden";
4268 bool maybe_common_vars = TRUE;
4271 /* Grandfathering $[ assignment here. Bletch.*/
4272 /* Only simple assignments like C<< ($[) = 1 >> are allowed */
4273 PL_eval_start = (left->op_type == OP_CONST) ? right : NULL;
4274 left = mod(left, OP_AASSIGN);
4277 else if (left->op_type == OP_CONST) {
4279 /* Result of assignment is always 1 (or we'd be dead already) */
4280 return newSVOP(OP_CONST, 0, newSViv(1));
4282 curop = list(force_list(left));
4283 o = newBINOP(OP_AASSIGN, flags, list(force_list(right)), curop);
4284 o->op_private = (U8)(0 | (flags >> 8));
4286 if ((left->op_type == OP_LIST
4287 || (left->op_type == OP_NULL && left->op_targ == OP_LIST)))
4289 OP* lop = ((LISTOP*)left)->op_first;
4290 maybe_common_vars = FALSE;
4292 if (lop->op_type == OP_PADSV ||
4293 lop->op_type == OP_PADAV ||
4294 lop->op_type == OP_PADHV ||
4295 lop->op_type == OP_PADANY) {
4296 if (!(lop->op_private & OPpLVAL_INTRO))
4297 maybe_common_vars = TRUE;
4299 if (lop->op_private & OPpPAD_STATE) {
4300 if (left->op_private & OPpLVAL_INTRO) {
4301 /* Each variable in state($a, $b, $c) = ... */
4304 /* Each state variable in
4305 (state $a, my $b, our $c, $d, undef) = ... */
4307 yyerror(no_list_state);
4309 /* Each my variable in
4310 (state $a, my $b, our $c, $d, undef) = ... */
4312 } else if (lop->op_type == OP_UNDEF ||
4313 lop->op_type == OP_PUSHMARK) {
4314 /* undef may be interesting in
4315 (state $a, undef, state $c) */
4317 /* Other ops in the list. */
4318 maybe_common_vars = TRUE;
4320 lop = lop->op_sibling;
4323 else if ((left->op_private & OPpLVAL_INTRO)
4324 && ( left->op_type == OP_PADSV
4325 || left->op_type == OP_PADAV
4326 || left->op_type == OP_PADHV
4327 || left->op_type == OP_PADANY))
4329 if (left->op_type == OP_PADSV) maybe_common_vars = FALSE;
4330 if (left->op_private & OPpPAD_STATE) {
4331 /* All single variable list context state assignments, hence
4341 yyerror(no_list_state);
4345 /* PL_generation sorcery:
4346 * an assignment like ($a,$b) = ($c,$d) is easier than
4347 * ($a,$b) = ($c,$a), since there is no need for temporary vars.
4348 * To detect whether there are common vars, the global var
4349 * PL_generation is incremented for each assign op we compile.
4350 * Then, while compiling the assign op, we run through all the
4351 * variables on both sides of the assignment, setting a spare slot
4352 * in each of them to PL_generation. If any of them already have
4353 * that value, we know we've got commonality. We could use a
4354 * single bit marker, but then we'd have to make 2 passes, first
4355 * to clear the flag, then to test and set it. To find somewhere
4356 * to store these values, evil chicanery is done with SvUVX().
4359 if (maybe_common_vars) {
4362 for (curop = LINKLIST(o); curop != o; curop = LINKLIST(curop)) {
4363 if (PL_opargs[curop->op_type] & OA_DANGEROUS) {
4364 if (curop->op_type == OP_GV) {
4365 GV *gv = cGVOPx_gv(curop);
4367 || (int)GvASSIGN_GENERATION(gv) == PL_generation)
4369 GvASSIGN_GENERATION_set(gv, PL_generation);
4371 else if (curop->op_type == OP_PADSV ||
4372 curop->op_type == OP_PADAV ||
4373 curop->op_type == OP_PADHV ||
4374 curop->op_type == OP_PADANY)
4376 if (PAD_COMPNAME_GEN(curop->op_targ)
4377 == (STRLEN)PL_generation)
4379 PAD_COMPNAME_GEN_set(curop->op_targ, PL_generation);
4382 else if (curop->op_type == OP_RV2CV)
4384 else if (curop->op_type == OP_RV2SV ||
4385 curop->op_type == OP_RV2AV ||
4386 curop->op_type == OP_RV2HV ||
4387 curop->op_type == OP_RV2GV) {
4388 if (lastop->op_type != OP_GV) /* funny deref? */
4391 else if (curop->op_type == OP_PUSHRE) {
4393 if (((PMOP*)curop)->op_pmreplrootu.op_pmtargetoff) {
4394 GV *const gv = MUTABLE_GV(PAD_SVl(((PMOP*)curop)->op_pmreplrootu.op_pmtargetoff));
4396 || (int)GvASSIGN_GENERATION(gv) == PL_generation)
4398 GvASSIGN_GENERATION_set(gv, PL_generation);
4402 = ((PMOP*)curop)->op_pmreplrootu.op_pmtargetgv;
4405 || (int)GvASSIGN_GENERATION(gv) == PL_generation)
4407 GvASSIGN_GENERATION_set(gv, PL_generation);
4417 o->op_private |= OPpASSIGN_COMMON;
4420 if (right && right->op_type == OP_SPLIT && !PL_madskills) {
4421 OP* tmpop = ((LISTOP*)right)->op_first;
4422 if (tmpop && (tmpop->op_type == OP_PUSHRE)) {
4423 PMOP * const pm = (PMOP*)tmpop;
4424 if (left->op_type == OP_RV2AV &&
4425 !(left->op_private & OPpLVAL_INTRO) &&
4426 !(o->op_private & OPpASSIGN_COMMON) )
4428 tmpop = ((UNOP*)left)->op_first;
4429 if (tmpop->op_type == OP_GV
4431 && !pm->op_pmreplrootu.op_pmtargetoff
4433 && !pm->op_pmreplrootu.op_pmtargetgv
4437 pm->op_pmreplrootu.op_pmtargetoff
4438 = cPADOPx(tmpop)->op_padix;
4439 cPADOPx(tmpop)->op_padix = 0; /* steal it */
4441 pm->op_pmreplrootu.op_pmtargetgv
4442 = MUTABLE_GV(cSVOPx(tmpop)->op_sv);
4443 cSVOPx(tmpop)->op_sv = NULL; /* steal it */
4445 pm->op_pmflags |= PMf_ONCE;
4446 tmpop = cUNOPo->op_first; /* to list (nulled) */
4447 tmpop = ((UNOP*)tmpop)->op_first; /* to pushmark */
4448 tmpop->op_sibling = NULL; /* don't free split */
4449 right->op_next = tmpop->op_next; /* fix starting loc */
4450 op_free(o); /* blow off assign */
4451 right->op_flags &= ~OPf_WANT;
4452 /* "I don't know and I don't care." */
4457 if (PL_modcount < RETURN_UNLIMITED_NUMBER &&
4458 ((LISTOP*)right)->op_last->op_type == OP_CONST)
4460 SV *sv = ((SVOP*)((LISTOP*)right)->op_last)->op_sv;
4461 if (SvIOK(sv) && SvIVX(sv) == 0)
4462 sv_setiv(sv, PL_modcount+1);
4470 right = newOP(OP_UNDEF, 0);
4471 if (right->op_type == OP_READLINE) {
4472 right->op_flags |= OPf_STACKED;
4473 return newBINOP(OP_NULL, flags, mod(scalar(left), OP_SASSIGN), scalar(right));
4476 PL_eval_start = right; /* Grandfathering $[ assignment here. Bletch.*/
4477 o = newBINOP(OP_SASSIGN, flags,
4478 scalar(right), mod(scalar(left), OP_SASSIGN) );
4482 if (!PL_madskills) { /* assignment to $[ is ignored when making a mad dump */
4483 deprecate("assignment to $[");
4485 o = newSVOP(OP_CONST, 0, newSViv(CopARYBASE_get(&PL_compiling)));
4486 o->op_private |= OPpCONST_ARYBASE;
4494 Perl_newSTATEOP(pTHX_ I32 flags, char *label, OP *o)
4497 const U32 seq = intro_my();
4500 NewOp(1101, cop, 1, COP);
4501 if (PERLDB_LINE && CopLINE(PL_curcop) && PL_curstash != PL_debstash) {
4502 cop->op_type = OP_DBSTATE;
4503 cop->op_ppaddr = PL_ppaddr[ OP_DBSTATE ];
4506 cop->op_type = OP_NEXTSTATE;
4507 cop->op_ppaddr = PL_ppaddr[ OP_NEXTSTATE ];
4509 cop->op_flags = (U8)flags;
4510 CopHINTS_set(cop, PL_hints);
4512 cop->op_private |= NATIVE_HINTS;
4514 CopHINTS_set(&PL_compiling, CopHINTS_get(cop));
4515 cop->op_next = (OP*)cop;
4518 /* CopARYBASE is now "virtual", in that it's stored as a flag bit in
4519 CopHINTS and a possible value in cop_hints_hash, so no need to copy it.
4521 cop->cop_warnings = DUP_WARNINGS(PL_curcop->cop_warnings);
4522 cop->cop_hints_hash = PL_curcop->cop_hints_hash;
4523 if (cop->cop_hints_hash) {
4525 cop->cop_hints_hash->refcounted_he_refcnt++;
4526 HINTS_REFCNT_UNLOCK;
4530 = Perl_store_cop_label(aTHX_ cop->cop_hints_hash, label);
4532 PL_hints |= HINT_BLOCK_SCOPE;
4533 /* It seems that we need to defer freeing this pointer, as other parts
4534 of the grammar end up wanting to copy it after this op has been
4539 if (PL_parser && PL_parser->copline == NOLINE)
4540 CopLINE_set(cop, CopLINE(PL_curcop));
4542 CopLINE_set(cop, PL_parser->copline);
4544 PL_parser->copline = NOLINE;
4547 CopFILE_set(cop, CopFILE(PL_curcop)); /* XXX share in a pvtable? */
4549 CopFILEGV_set(cop, CopFILEGV(PL_curcop));
4551 CopSTASH_set(cop, PL_curstash);
4553 if ((PERLDB_LINE || PERLDB_SAVESRC) && PL_curstash != PL_debstash) {
4554 /* this line can have a breakpoint - store the cop in IV */
4555 AV *av = CopFILEAVx(PL_curcop);
4557 SV * const * const svp = av_fetch(av, (I32)CopLINE(cop), FALSE);
4558 if (svp && *svp != &PL_sv_undef ) {
4559 (void)SvIOK_on(*svp);
4560 SvIV_set(*svp, PTR2IV(cop));
4565 if (flags & OPf_SPECIAL)
4567 return prepend_elem(OP_LINESEQ, (OP*)cop, o);
4572 Perl_newLOGOP(pTHX_ I32 type, I32 flags, OP *first, OP *other)
4576 PERL_ARGS_ASSERT_NEWLOGOP;
4578 return new_logop(type, flags, &first, &other);
4582 S_search_const(pTHX_ OP *o)
4584 PERL_ARGS_ASSERT_SEARCH_CONST;
4586 switch (o->op_type) {
4590 if (o->op_flags & OPf_KIDS)
4591 return search_const(cUNOPo->op_first);
4598 if (!(o->op_flags & OPf_KIDS))
4600 kid = cLISTOPo->op_first;
4602 switch (kid->op_type) {
4606 kid = kid->op_sibling;
4609 if (kid != cLISTOPo->op_last)
4615 kid = cLISTOPo->op_last;
4617 return search_const(kid);
4625 S_new_logop(pTHX_ I32 type, I32 flags, OP** firstp, OP** otherp)
4633 int prepend_not = 0;
4635 PERL_ARGS_ASSERT_NEW_LOGOP;
4640 if (type == OP_XOR) /* Not short circuit, but here by precedence. */
4641 return newBINOP(type, flags, scalar(first), scalar(other));
4643 assert((PL_opargs[type] & OA_CLASS_MASK) == OA_LOGOP);
4645 scalarboolean(first);
4646 /* optimize AND and OR ops that have NOTs as children */
4647 if (first->op_type == OP_NOT
4648 && (first->op_flags & OPf_KIDS)
4649 && ((first->op_flags & OPf_SPECIAL) /* unless ($x) { } */
4650 || (other->op_type == OP_NOT)) /* if (!$x && !$y) { } */
4652 if (type == OP_AND || type == OP_OR) {
4658 if (other->op_type == OP_NOT) { /* !a AND|OR !b => !(a OR|AND b) */
4660 prepend_not = 1; /* prepend a NOT op later */
4664 /* search for a constant op that could let us fold the test */
4665 if ((cstop = search_const(first))) {
4666 if (cstop->op_private & OPpCONST_STRICT)
4667 no_bareword_allowed(cstop);
4668 else if ((cstop->op_private & OPpCONST_BARE))
4669 Perl_ck_warner(aTHX_ packWARN(WARN_BAREWORD), "Bareword found in conditional");
4670 if ((type == OP_AND && SvTRUE(((SVOP*)cstop)->op_sv)) ||
4671 (type == OP_OR && !SvTRUE(((SVOP*)cstop)->op_sv)) ||
4672 (type == OP_DOR && !SvOK(((SVOP*)cstop)->op_sv))) {
4674 if (other->op_type == OP_CONST)
4675 other->op_private |= OPpCONST_SHORTCIRCUIT;
4677 OP *newop = newUNOP(OP_NULL, 0, other);
4678 op_getmad(first, newop, '1');
4679 newop->op_targ = type; /* set "was" field */
4683 if (other->op_type == OP_LEAVE)
4684 other = newUNOP(OP_NULL, OPf_SPECIAL, other);
4688 /* check for C<my $x if 0>, or C<my($x,$y) if 0> */
4689 const OP *o2 = other;
4690 if ( ! (o2->op_type == OP_LIST
4691 && (( o2 = cUNOPx(o2)->op_first))
4692 && o2->op_type == OP_PUSHMARK
4693 && (( o2 = o2->op_sibling)) )
4696 if ((o2->op_type == OP_PADSV || o2->op_type == OP_PADAV
4697 || o2->op_type == OP_PADHV)
4698 && o2->op_private & OPpLVAL_INTRO
4699 && !(o2->op_private & OPpPAD_STATE))
4701 Perl_ck_warner_d(aTHX_ packWARN(WARN_DEPRECATED),
4702 "Deprecated use of my() in false conditional");
4706 if (first->op_type == OP_CONST)
4707 first->op_private |= OPpCONST_SHORTCIRCUIT;
4709 first = newUNOP(OP_NULL, 0, first);
4710 op_getmad(other, first, '2');
4711 first->op_targ = type; /* set "was" field */
4718 else if ((first->op_flags & OPf_KIDS) && type != OP_DOR
4719 && ckWARN(WARN_MISC)) /* [#24076] Don't warn for <FH> err FOO. */
4721 const OP * const k1 = ((UNOP*)first)->op_first;
4722 const OP * const k2 = k1->op_sibling;
4724 switch (first->op_type)
4727 if (k2 && k2->op_type == OP_READLINE
4728 && (k2->op_flags & OPf_STACKED)
4729 && ((k1->op_flags & OPf_WANT) == OPf_WANT_SCALAR))
4731 warnop = k2->op_type;
4736 if (k1->op_type == OP_READDIR
4737 || k1->op_type == OP_GLOB
4738 || (k1->op_type == OP_NULL && k1->op_targ == OP_GLOB)
4739 || k1->op_type == OP_EACH)
4741 warnop = ((k1->op_type == OP_NULL)
4742 ? (OPCODE)k1->op_targ : k1->op_type);
4747 const line_t oldline = CopLINE(PL_curcop);
4748 CopLINE_set(PL_curcop, PL_parser->copline);
4749 Perl_warner(aTHX_ packWARN(WARN_MISC),
4750 "Value of %s%s can be \"0\"; test with defined()",
4752 ((warnop == OP_READLINE || warnop == OP_GLOB)
4753 ? " construct" : "() operator"));
4754 CopLINE_set(PL_curcop, oldline);
4761 if (type == OP_ANDASSIGN || type == OP_ORASSIGN || type == OP_DORASSIGN)
4762 other->op_private |= OPpASSIGN_BACKWARDS; /* other is an OP_SASSIGN */
4764 NewOp(1101, logop, 1, LOGOP);
4766 logop->op_type = (OPCODE)type;
4767 logop->op_ppaddr = PL_ppaddr[type];
4768 logop->op_first = first;
4769 logop->op_flags = (U8)(flags | OPf_KIDS);
4770 logop->op_other = LINKLIST(other);
4771 logop->op_private = (U8)(1 | (flags >> 8));
4773 /* establish postfix order */
4774 logop->op_next = LINKLIST(first);
4775 first->op_next = (OP*)logop;
4776 first->op_sibling = other;
4778 CHECKOP(type,logop);
4780 o = newUNOP(prepend_not ? OP_NOT : OP_NULL, 0, (OP*)logop);
4787 Perl_newCONDOP(pTHX_ I32 flags, OP *first, OP *trueop, OP *falseop)
4795 PERL_ARGS_ASSERT_NEWCONDOP;
4798 return newLOGOP(OP_AND, 0, first, trueop);
4800 return newLOGOP(OP_OR, 0, first, falseop);
4802 scalarboolean(first);
4803 if ((cstop = search_const(first))) {
4804 /* Left or right arm of the conditional? */
4805 const bool left = SvTRUE(((SVOP*)cstop)->op_sv);
4806 OP *live = left ? trueop : falseop;
4807 OP *const dead = left ? falseop : trueop;
4808 if (cstop->op_private & OPpCONST_BARE &&
4809 cstop->op_private & OPpCONST_STRICT) {
4810 no_bareword_allowed(cstop);
4813 /* This is all dead code when PERL_MAD is not defined. */
4814 live = newUNOP(OP_NULL, 0, live);
4815 op_getmad(first, live, 'C');
4816 op_getmad(dead, live, left ? 'e' : 't');