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 Perl_blockhook_register(pTHX_ BHK *hk)
2349 PERL_ARGS_ASSERT_BLOCKHOOK_REGISTER;
2351 Perl_av_create_and_push(aTHX_ &PL_blockhooks, newSViv(PTR2IV(hk)));
2358 const PADOFFSET offset = Perl_pad_findmy(aTHX_ STR_WITH_LEN("$_"), 0);
2359 if (offset == NOT_IN_PAD || PAD_COMPNAME_FLAGS_isOUR(offset)) {
2360 return newSVREF(newGVOP(OP_GV, 0, PL_defgv));
2363 OP * const o = newOP(OP_PADSV, 0);
2364 o->op_targ = offset;
2370 Perl_newPROG(pTHX_ OP *o)
2374 PERL_ARGS_ASSERT_NEWPROG;
2379 PL_eval_root = newUNOP(OP_LEAVEEVAL,
2380 ((PL_in_eval & EVAL_KEEPERR)
2381 ? OPf_SPECIAL : 0), o);
2382 PL_eval_start = linklist(PL_eval_root);
2383 PL_eval_root->op_private |= OPpREFCOUNTED;
2384 OpREFCNT_set(PL_eval_root, 1);
2385 PL_eval_root->op_next = 0;
2386 CALL_PEEP(PL_eval_start);
2389 if (o->op_type == OP_STUB) {
2390 PL_comppad_name = 0;
2392 S_op_destroy(aTHX_ o);
2395 PL_main_root = scope(sawparens(scalarvoid(o)));
2396 PL_curcop = &PL_compiling;
2397 PL_main_start = LINKLIST(PL_main_root);
2398 PL_main_root->op_private |= OPpREFCOUNTED;
2399 OpREFCNT_set(PL_main_root, 1);
2400 PL_main_root->op_next = 0;
2401 CALL_PEEP(PL_main_start);
2404 /* Register with debugger */
2406 CV * const cv = get_cvs("DB::postponed", 0);
2410 XPUSHs(MUTABLE_SV(CopFILEGV(&PL_compiling)));
2412 call_sv(MUTABLE_SV(cv), G_DISCARD);
2419 Perl_localize(pTHX_ OP *o, I32 lex)
2423 PERL_ARGS_ASSERT_LOCALIZE;
2425 if (o->op_flags & OPf_PARENS)
2426 /* [perl #17376]: this appears to be premature, and results in code such as
2427 C< our(%x); > executing in list mode rather than void mode */
2434 if ( PL_parser->bufptr > PL_parser->oldbufptr
2435 && PL_parser->bufptr[-1] == ','
2436 && ckWARN(WARN_PARENTHESIS))
2438 char *s = PL_parser->bufptr;
2441 /* some heuristics to detect a potential error */
2442 while (*s && (strchr(", \t\n", *s)))
2446 if (*s && strchr("@$%*", *s) && *++s
2447 && (isALNUM(*s) || UTF8_IS_CONTINUED(*s))) {
2450 while (*s && (isALNUM(*s) || UTF8_IS_CONTINUED(*s)))
2452 while (*s && (strchr(", \t\n", *s)))
2458 if (sigil && (*s == ';' || *s == '=')) {
2459 Perl_warner(aTHX_ packWARN(WARN_PARENTHESIS),
2460 "Parentheses missing around \"%s\" list",
2462 ? (PL_parser->in_my == KEY_our
2464 : PL_parser->in_my == KEY_state
2474 o = mod(o, OP_NULL); /* a bit kludgey */
2475 PL_parser->in_my = FALSE;
2476 PL_parser->in_my_stash = NULL;
2481 Perl_jmaybe(pTHX_ OP *o)
2483 PERL_ARGS_ASSERT_JMAYBE;
2485 if (o->op_type == OP_LIST) {
2487 = newSVREF(newGVOP(OP_GV, 0, gv_fetchpvs(";", GV_ADD|GV_NOTQUAL, SVt_PV)));
2488 o = convert(OP_JOIN, 0, prepend_elem(OP_LIST, o2, o));
2494 S_fold_constants(pTHX_ register OP *o)
2497 register OP * VOL curop;
2499 VOL I32 type = o->op_type;
2504 SV * const oldwarnhook = PL_warnhook;
2505 SV * const olddiehook = PL_diehook;
2509 PERL_ARGS_ASSERT_FOLD_CONSTANTS;
2511 if (PL_opargs[type] & OA_RETSCALAR)
2513 if (PL_opargs[type] & OA_TARGET && !o->op_targ)
2514 o->op_targ = pad_alloc(type, SVs_PADTMP);
2516 /* integerize op, unless it happens to be C<-foo>.
2517 * XXX should pp_i_negate() do magic string negation instead? */
2518 if ((PL_opargs[type] & OA_OTHERINT) && (PL_hints & HINT_INTEGER)
2519 && !(type == OP_NEGATE && cUNOPo->op_first->op_type == OP_CONST
2520 && (cUNOPo->op_first->op_private & OPpCONST_BARE)))
2522 o->op_ppaddr = PL_ppaddr[type = ++(o->op_type)];
2525 if (!(PL_opargs[type] & OA_FOLDCONST))
2530 /* XXX might want a ck_negate() for this */
2531 cUNOPo->op_first->op_private &= ~OPpCONST_STRICT;
2542 /* XXX what about the numeric ops? */
2543 if (PL_hints & HINT_LOCALE)
2548 if (PL_parser && PL_parser->error_count)
2549 goto nope; /* Don't try to run w/ errors */
2551 for (curop = LINKLIST(o); curop != o; curop = LINKLIST(curop)) {
2552 const OPCODE type = curop->op_type;
2553 if ((type != OP_CONST || (curop->op_private & OPpCONST_BARE)) &&
2555 type != OP_SCALAR &&
2557 type != OP_PUSHMARK)
2563 curop = LINKLIST(o);
2564 old_next = o->op_next;
2568 oldscope = PL_scopestack_ix;
2569 create_eval_scope(G_FAKINGEVAL);
2571 /* Verify that we don't need to save it: */
2572 assert(PL_curcop == &PL_compiling);
2573 StructCopy(&PL_compiling, ¬_compiling, COP);
2574 PL_curcop = ¬_compiling;
2575 /* The above ensures that we run with all the correct hints of the
2576 currently compiling COP, but that IN_PERL_RUNTIME is not true. */
2577 assert(IN_PERL_RUNTIME);
2578 PL_warnhook = PERL_WARNHOOK_FATAL;
2585 sv = *(PL_stack_sp--);
2586 if (o->op_targ && sv == PAD_SV(o->op_targ)) /* grab pad temp? */
2587 pad_swipe(o->op_targ, FALSE);
2588 else if (SvTEMP(sv)) { /* grab mortal temp? */
2589 SvREFCNT_inc_simple_void(sv);
2594 /* Something tried to die. Abandon constant folding. */
2595 /* Pretend the error never happened. */
2597 o->op_next = old_next;
2601 /* Don't expect 1 (setjmp failed) or 2 (something called my_exit) */
2602 PL_warnhook = oldwarnhook;
2603 PL_diehook = olddiehook;
2604 /* XXX note that this croak may fail as we've already blown away
2605 * the stack - eg any nested evals */
2606 Perl_croak(aTHX_ "panic: fold_constants JMPENV_PUSH returned %d", ret);
2609 PL_warnhook = oldwarnhook;
2610 PL_diehook = olddiehook;
2611 PL_curcop = &PL_compiling;
2613 if (PL_scopestack_ix > oldscope)
2614 delete_eval_scope();
2623 if (type == OP_RV2GV)
2624 newop = newGVOP(OP_GV, 0, MUTABLE_GV(sv));
2626 newop = newSVOP(OP_CONST, 0, MUTABLE_SV(sv));
2627 op_getmad(o,newop,'f');
2635 S_gen_constant_list(pTHX_ register OP *o)
2639 const I32 oldtmps_floor = PL_tmps_floor;
2642 if (PL_parser && PL_parser->error_count)
2643 return o; /* Don't attempt to run with errors */
2645 PL_op = curop = LINKLIST(o);
2651 assert (!(curop->op_flags & OPf_SPECIAL));
2652 assert(curop->op_type == OP_RANGE);
2654 PL_tmps_floor = oldtmps_floor;
2656 o->op_type = OP_RV2AV;
2657 o->op_ppaddr = PL_ppaddr[OP_RV2AV];
2658 o->op_flags &= ~OPf_REF; /* treat \(1..2) like an ordinary list */
2659 o->op_flags |= OPf_PARENS; /* and flatten \(1..2,3) */
2660 o->op_opt = 0; /* needs to be revisited in peep() */
2661 curop = ((UNOP*)o)->op_first;
2662 ((UNOP*)o)->op_first = newSVOP(OP_CONST, 0, SvREFCNT_inc_NN(*PL_stack_sp--));
2664 op_getmad(curop,o,'O');
2673 Perl_convert(pTHX_ I32 type, I32 flags, OP *o)
2676 if (!o || o->op_type != OP_LIST)
2677 o = newLISTOP(OP_LIST, 0, o, NULL);
2679 o->op_flags &= ~OPf_WANT;
2681 if (!(PL_opargs[type] & OA_MARK))
2682 op_null(cLISTOPo->op_first);
2684 o->op_type = (OPCODE)type;
2685 o->op_ppaddr = PL_ppaddr[type];
2686 o->op_flags |= flags;
2688 o = CHECKOP(type, o);
2689 if (o->op_type != (unsigned)type)
2692 return fold_constants(o);
2695 /* List constructors */
2698 Perl_append_elem(pTHX_ I32 type, OP *first, OP *last)
2706 if (first->op_type != (unsigned)type
2707 || (type == OP_LIST && (first->op_flags & OPf_PARENS)))
2709 return newLISTOP(type, 0, first, last);
2712 if (first->op_flags & OPf_KIDS)
2713 ((LISTOP*)first)->op_last->op_sibling = last;
2715 first->op_flags |= OPf_KIDS;
2716 ((LISTOP*)first)->op_first = last;
2718 ((LISTOP*)first)->op_last = last;
2723 Perl_append_list(pTHX_ I32 type, LISTOP *first, LISTOP *last)
2731 if (first->op_type != (unsigned)type)
2732 return prepend_elem(type, (OP*)first, (OP*)last);
2734 if (last->op_type != (unsigned)type)
2735 return append_elem(type, (OP*)first, (OP*)last);
2737 first->op_last->op_sibling = last->op_first;
2738 first->op_last = last->op_last;
2739 first->op_flags |= (last->op_flags & OPf_KIDS);
2742 if (last->op_first && first->op_madprop) {
2743 MADPROP *mp = last->op_first->op_madprop;
2745 while (mp->mad_next)
2747 mp->mad_next = first->op_madprop;
2750 last->op_first->op_madprop = first->op_madprop;
2753 first->op_madprop = last->op_madprop;
2754 last->op_madprop = 0;
2757 S_op_destroy(aTHX_ (OP*)last);
2763 Perl_prepend_elem(pTHX_ I32 type, OP *first, OP *last)
2771 if (last->op_type == (unsigned)type) {
2772 if (type == OP_LIST) { /* already a PUSHMARK there */
2773 first->op_sibling = ((LISTOP*)last)->op_first->op_sibling;
2774 ((LISTOP*)last)->op_first->op_sibling = first;
2775 if (!(first->op_flags & OPf_PARENS))
2776 last->op_flags &= ~OPf_PARENS;
2779 if (!(last->op_flags & OPf_KIDS)) {
2780 ((LISTOP*)last)->op_last = first;
2781 last->op_flags |= OPf_KIDS;
2783 first->op_sibling = ((LISTOP*)last)->op_first;
2784 ((LISTOP*)last)->op_first = first;
2786 last->op_flags |= OPf_KIDS;
2790 return newLISTOP(type, 0, first, last);
2798 Perl_newTOKEN(pTHX_ I32 optype, YYSTYPE lval, MADPROP* madprop)
2801 Newxz(tk, 1, TOKEN);
2802 tk->tk_type = (OPCODE)optype;
2803 tk->tk_type = 12345;
2805 tk->tk_mad = madprop;
2810 Perl_token_free(pTHX_ TOKEN* tk)
2812 PERL_ARGS_ASSERT_TOKEN_FREE;
2814 if (tk->tk_type != 12345)
2816 mad_free(tk->tk_mad);
2821 Perl_token_getmad(pTHX_ TOKEN* tk, OP* o, char slot)
2826 PERL_ARGS_ASSERT_TOKEN_GETMAD;
2828 if (tk->tk_type != 12345) {
2829 Perl_warner(aTHX_ packWARN(WARN_MISC),
2830 "Invalid TOKEN object ignored");
2837 /* faked up qw list? */
2839 tm->mad_type == MAD_SV &&
2840 SvPVX((SV *)tm->mad_val)[0] == 'q')
2847 /* pretend constant fold didn't happen? */
2848 if (mp->mad_key == 'f' &&
2849 (o->op_type == OP_CONST ||
2850 o->op_type == OP_GV) )
2852 token_getmad(tk,(OP*)mp->mad_val,slot);
2866 if (mp->mad_key == 'X')
2867 mp->mad_key = slot; /* just change the first one */
2877 Perl_op_getmad_weak(pTHX_ OP* from, OP* o, char slot)
2886 /* pretend constant fold didn't happen? */
2887 if (mp->mad_key == 'f' &&
2888 (o->op_type == OP_CONST ||
2889 o->op_type == OP_GV) )
2891 op_getmad(from,(OP*)mp->mad_val,slot);
2898 mp->mad_next = newMADPROP(slot,MAD_OP,from,0);
2901 o->op_madprop = newMADPROP(slot,MAD_OP,from,0);
2907 Perl_op_getmad(pTHX_ OP* from, OP* o, char slot)
2916 /* pretend constant fold didn't happen? */
2917 if (mp->mad_key == 'f' &&
2918 (o->op_type == OP_CONST ||
2919 o->op_type == OP_GV) )
2921 op_getmad(from,(OP*)mp->mad_val,slot);
2928 mp->mad_next = newMADPROP(slot,MAD_OP,from,1);
2931 o->op_madprop = newMADPROP(slot,MAD_OP,from,1);
2935 PerlIO_printf(PerlIO_stderr(),
2936 "DESTROYING op = %0"UVxf"\n", PTR2UV(from));
2942 Perl_prepend_madprops(pTHX_ MADPROP* mp, OP* o, char slot)
2960 Perl_append_madprops(pTHX_ MADPROP* tm, OP* o, char slot)
2964 addmad(tm, &(o->op_madprop), slot);
2968 Perl_addmad(pTHX_ MADPROP* tm, MADPROP** root, char slot)
2989 Perl_newMADsv(pTHX_ char key, SV* sv)
2991 PERL_ARGS_ASSERT_NEWMADSV;
2993 return newMADPROP(key, MAD_SV, sv, 0);
2997 Perl_newMADPROP(pTHX_ char key, char type, void* val, I32 vlen)
3000 Newxz(mp, 1, MADPROP);
3003 mp->mad_vlen = vlen;
3004 mp->mad_type = type;
3006 /* PerlIO_printf(PerlIO_stderr(), "NEW mp = %0x\n", mp); */
3011 Perl_mad_free(pTHX_ MADPROP* mp)
3013 /* PerlIO_printf(PerlIO_stderr(), "FREE mp = %0x\n", mp); */
3017 mad_free(mp->mad_next);
3018 /* if (PL_parser && PL_parser->lex_state != LEX_NOTPARSING && mp->mad_vlen)
3019 PerlIO_printf(PerlIO_stderr(), "DESTROYING '%c'=<%s>\n", mp->mad_key & 255, mp->mad_val); */
3020 switch (mp->mad_type) {
3024 Safefree((char*)mp->mad_val);
3027 if (mp->mad_vlen) /* vlen holds "strong/weak" boolean */
3028 op_free((OP*)mp->mad_val);
3031 sv_free(MUTABLE_SV(mp->mad_val));
3034 PerlIO_printf(PerlIO_stderr(), "Unrecognized mad\n");
3043 Perl_newNULLLIST(pTHX)
3045 return newOP(OP_STUB, 0);
3049 S_force_list(pTHX_ OP *o)
3051 if (!o || o->op_type != OP_LIST)
3052 o = newLISTOP(OP_LIST, 0, o, NULL);
3058 Perl_newLISTOP(pTHX_ I32 type, I32 flags, OP *first, OP *last)
3063 assert((PL_opargs[type] & OA_CLASS_MASK) == OA_LISTOP);
3065 NewOp(1101, listop, 1, LISTOP);
3067 listop->op_type = (OPCODE)type;
3068 listop->op_ppaddr = PL_ppaddr[type];
3071 listop->op_flags = (U8)flags;
3075 else if (!first && last)
3078 first->op_sibling = last;
3079 listop->op_first = first;
3080 listop->op_last = last;
3081 if (type == OP_LIST) {
3082 OP* const pushop = newOP(OP_PUSHMARK, 0);
3083 pushop->op_sibling = first;
3084 listop->op_first = pushop;
3085 listop->op_flags |= OPf_KIDS;
3087 listop->op_last = pushop;
3090 return CHECKOP(type, listop);
3094 Perl_newOP(pTHX_ I32 type, I32 flags)
3099 assert((PL_opargs[type] & OA_CLASS_MASK) == OA_BASEOP
3100 || (PL_opargs[type] & OA_CLASS_MASK) == OA_BASEOP_OR_UNOP
3101 || (PL_opargs[type] & OA_CLASS_MASK) == OA_FILESTATOP
3102 || (PL_opargs[type] & OA_CLASS_MASK) == OA_LOOPEXOP);
3104 NewOp(1101, o, 1, OP);
3105 o->op_type = (OPCODE)type;
3106 o->op_ppaddr = PL_ppaddr[type];
3107 o->op_flags = (U8)flags;
3109 o->op_latefreed = 0;
3113 o->op_private = (U8)(0 | (flags >> 8));
3114 if (PL_opargs[type] & OA_RETSCALAR)
3116 if (PL_opargs[type] & OA_TARGET)
3117 o->op_targ = pad_alloc(type, SVs_PADTMP);
3118 return CHECKOP(type, o);
3122 Perl_newUNOP(pTHX_ I32 type, I32 flags, OP *first)
3127 assert((PL_opargs[type] & OA_CLASS_MASK) == OA_UNOP
3128 || (PL_opargs[type] & OA_CLASS_MASK) == OA_BASEOP_OR_UNOP
3129 || (PL_opargs[type] & OA_CLASS_MASK) == OA_FILESTATOP
3130 || (PL_opargs[type] & OA_CLASS_MASK) == OA_LOOPEXOP
3131 || type == OP_SASSIGN
3132 || type == OP_ENTERTRY
3133 || type == OP_NULL );
3136 first = newOP(OP_STUB, 0);
3137 if (PL_opargs[type] & OA_MARK)
3138 first = force_list(first);
3140 NewOp(1101, unop, 1, UNOP);
3141 unop->op_type = (OPCODE)type;
3142 unop->op_ppaddr = PL_ppaddr[type];
3143 unop->op_first = first;
3144 unop->op_flags = (U8)(flags | OPf_KIDS);
3145 unop->op_private = (U8)(1 | (flags >> 8));
3146 unop = (UNOP*) CHECKOP(type, unop);
3150 return fold_constants((OP *) unop);
3154 Perl_newBINOP(pTHX_ I32 type, I32 flags, OP *first, OP *last)
3159 assert((PL_opargs[type] & OA_CLASS_MASK) == OA_BINOP
3160 || type == OP_SASSIGN || type == OP_NULL );
3162 NewOp(1101, binop, 1, BINOP);
3165 first = newOP(OP_NULL, 0);
3167 binop->op_type = (OPCODE)type;
3168 binop->op_ppaddr = PL_ppaddr[type];
3169 binop->op_first = first;
3170 binop->op_flags = (U8)(flags | OPf_KIDS);
3173 binop->op_private = (U8)(1 | (flags >> 8));
3176 binop->op_private = (U8)(2 | (flags >> 8));
3177 first->op_sibling = last;
3180 binop = (BINOP*)CHECKOP(type, binop);
3181 if (binop->op_next || binop->op_type != (OPCODE)type)
3184 binop->op_last = binop->op_first->op_sibling;
3186 return fold_constants((OP *)binop);
3189 static int uvcompare(const void *a, const void *b)
3190 __attribute__nonnull__(1)
3191 __attribute__nonnull__(2)
3192 __attribute__pure__;
3193 static int uvcompare(const void *a, const void *b)
3195 if (*((const UV *)a) < (*(const UV *)b))
3197 if (*((const UV *)a) > (*(const UV *)b))
3199 if (*((const UV *)a+1) < (*(const UV *)b+1))
3201 if (*((const UV *)a+1) > (*(const UV *)b+1))
3207 S_pmtrans(pTHX_ OP *o, OP *expr, OP *repl)
3210 SV * const tstr = ((SVOP*)expr)->op_sv;
3213 (repl->op_type == OP_NULL)
3214 ? ((SVOP*)((LISTOP*)repl)->op_first)->op_sv :
3216 ((SVOP*)repl)->op_sv;
3219 const U8 *t = (U8*)SvPV_const(tstr, tlen);
3220 const U8 *r = (U8*)SvPV_const(rstr, rlen);
3224 register short *tbl;
3226 const I32 complement = o->op_private & OPpTRANS_COMPLEMENT;
3227 const I32 squash = o->op_private & OPpTRANS_SQUASH;
3228 I32 del = o->op_private & OPpTRANS_DELETE;
3231 PERL_ARGS_ASSERT_PMTRANS;
3233 PL_hints |= HINT_BLOCK_SCOPE;
3236 o->op_private |= OPpTRANS_FROM_UTF;
3239 o->op_private |= OPpTRANS_TO_UTF;
3241 if (o->op_private & (OPpTRANS_FROM_UTF|OPpTRANS_TO_UTF)) {
3242 SV* const listsv = newSVpvs("# comment\n");
3244 const U8* tend = t + tlen;
3245 const U8* rend = r + rlen;
3259 const I32 from_utf = o->op_private & OPpTRANS_FROM_UTF;
3260 const I32 to_utf = o->op_private & OPpTRANS_TO_UTF;
3263 const U32 flags = UTF8_ALLOW_DEFAULT;
3267 t = tsave = bytes_to_utf8(t, &len);
3270 if (!to_utf && rlen) {
3272 r = rsave = bytes_to_utf8(r, &len);
3276 /* There are several snags with this code on EBCDIC:
3277 1. 0xFF is a legal UTF-EBCDIC byte (there are no illegal bytes).
3278 2. scan_const() in toke.c has encoded chars in native encoding which makes
3279 ranges at least in EBCDIC 0..255 range the bottom odd.
3283 U8 tmpbuf[UTF8_MAXBYTES+1];
3286 Newx(cp, 2*tlen, UV);
3288 transv = newSVpvs("");
3290 cp[2*i] = utf8n_to_uvuni(t, tend-t, &ulen, flags);
3292 if (t < tend && NATIVE_TO_UTF(*t) == 0xff) {
3294 cp[2*i+1] = utf8n_to_uvuni(t, tend-t, &ulen, flags);
3298 cp[2*i+1] = cp[2*i];
3302 qsort(cp, i, 2*sizeof(UV), uvcompare);
3303 for (j = 0; j < i; j++) {
3305 diff = val - nextmin;
3307 t = uvuni_to_utf8(tmpbuf,nextmin);
3308 sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf);
3310 U8 range_mark = UTF_TO_NATIVE(0xff);
3311 t = uvuni_to_utf8(tmpbuf, val - 1);
3312 sv_catpvn(transv, (char *)&range_mark, 1);
3313 sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf);
3320 t = uvuni_to_utf8(tmpbuf,nextmin);
3321 sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf);
3323 U8 range_mark = UTF_TO_NATIVE(0xff);
3324 sv_catpvn(transv, (char *)&range_mark, 1);
3326 t = uvuni_to_utf8_flags(tmpbuf, 0x7fffffff,
3327 UNICODE_ALLOW_SUPER);
3328 sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf);
3329 t = (const U8*)SvPVX_const(transv);
3330 tlen = SvCUR(transv);
3334 else if (!rlen && !del) {
3335 r = t; rlen = tlen; rend = tend;
3338 if ((!rlen && !del) || t == r ||
3339 (tlen == rlen && memEQ((char *)t, (char *)r, tlen)))
3341 o->op_private |= OPpTRANS_IDENTICAL;
3345 while (t < tend || tfirst <= tlast) {
3346 /* see if we need more "t" chars */
3347 if (tfirst > tlast) {
3348 tfirst = (I32)utf8n_to_uvuni(t, tend - t, &ulen, flags);
3350 if (t < tend && NATIVE_TO_UTF(*t) == 0xff) { /* illegal utf8 val indicates range */
3352 tlast = (I32)utf8n_to_uvuni(t, tend - t, &ulen, flags);
3359 /* now see if we need more "r" chars */
3360 if (rfirst > rlast) {
3362 rfirst = (I32)utf8n_to_uvuni(r, rend - r, &ulen, flags);
3364 if (r < rend && NATIVE_TO_UTF(*r) == 0xff) { /* illegal utf8 val indicates range */
3366 rlast = (I32)utf8n_to_uvuni(r, rend - r, &ulen, flags);
3375 rfirst = rlast = 0xffffffff;
3379 /* now see which range will peter our first, if either. */
3380 tdiff = tlast - tfirst;
3381 rdiff = rlast - rfirst;
3388 if (rfirst == 0xffffffff) {
3389 diff = tdiff; /* oops, pretend rdiff is infinite */
3391 Perl_sv_catpvf(aTHX_ listsv, "%04lx\t%04lx\tXXXX\n",
3392 (long)tfirst, (long)tlast);
3394 Perl_sv_catpvf(aTHX_ listsv, "%04lx\t\tXXXX\n", (long)tfirst);
3398 Perl_sv_catpvf(aTHX_ listsv, "%04lx\t%04lx\t%04lx\n",
3399 (long)tfirst, (long)(tfirst + diff),
3402 Perl_sv_catpvf(aTHX_ listsv, "%04lx\t\t%04lx\n",
3403 (long)tfirst, (long)rfirst);
3405 if (rfirst + diff > max)
3406 max = rfirst + diff;
3408 grows = (tfirst < rfirst &&
3409 UNISKIP(tfirst) < UNISKIP(rfirst + diff));
3421 else if (max > 0xff)
3426 PerlMemShared_free(cPVOPo->op_pv);
3427 cPVOPo->op_pv = NULL;
3429 swash = MUTABLE_SV(swash_init("utf8", "", listsv, bits, none));
3431 cPADOPo->op_padix = pad_alloc(OP_TRANS, SVs_PADTMP);
3432 SvREFCNT_dec(PAD_SVl(cPADOPo->op_padix));
3433 PAD_SETSV(cPADOPo->op_padix, swash);
3435 SvREADONLY_on(swash);
3437 cSVOPo->op_sv = swash;
3439 SvREFCNT_dec(listsv);
3440 SvREFCNT_dec(transv);
3442 if (!del && havefinal && rlen)
3443 (void)hv_store(MUTABLE_HV(SvRV(swash)), "FINAL", 5,
3444 newSVuv((UV)final), 0);
3447 o->op_private |= OPpTRANS_GROWS;
3453 op_getmad(expr,o,'e');
3454 op_getmad(repl,o,'r');
3462 tbl = (short*)cPVOPo->op_pv;
3464 Zero(tbl, 256, short);
3465 for (i = 0; i < (I32)tlen; i++)
3467 for (i = 0, j = 0; i < 256; i++) {
3469 if (j >= (I32)rlen) {
3478 if (i < 128 && r[j] >= 128)
3488 o->op_private |= OPpTRANS_IDENTICAL;
3490 else if (j >= (I32)rlen)
3495 PerlMemShared_realloc(tbl,
3496 (0x101+rlen-j) * sizeof(short));
3497 cPVOPo->op_pv = (char*)tbl;
3499 tbl[0x100] = (short)(rlen - j);
3500 for (i=0; i < (I32)rlen - j; i++)
3501 tbl[0x101+i] = r[j+i];
3505 if (!rlen && !del) {
3508 o->op_private |= OPpTRANS_IDENTICAL;
3510 else if (!squash && rlen == tlen && memEQ((char*)t, (char*)r, tlen)) {
3511 o->op_private |= OPpTRANS_IDENTICAL;
3513 for (i = 0; i < 256; i++)
3515 for (i = 0, j = 0; i < (I32)tlen; i++,j++) {
3516 if (j >= (I32)rlen) {
3518 if (tbl[t[i]] == -1)
3524 if (tbl[t[i]] == -1) {
3525 if (t[i] < 128 && r[j] >= 128)
3532 if(del && rlen == tlen) {
3533 Perl_ck_warner(aTHX_ packWARN(WARN_MISC), "Useless use of /d modifier in transliteration operator");
3534 } else if(rlen > tlen) {
3535 Perl_ck_warner(aTHX_ packWARN(WARN_MISC), "Replacement list is longer than search list");
3539 o->op_private |= OPpTRANS_GROWS;
3541 op_getmad(expr,o,'e');
3542 op_getmad(repl,o,'r');
3552 Perl_newPMOP(pTHX_ I32 type, I32 flags)
3557 assert((PL_opargs[type] & OA_CLASS_MASK) == OA_PMOP);
3559 NewOp(1101, pmop, 1, PMOP);
3560 pmop->op_type = (OPCODE)type;
3561 pmop->op_ppaddr = PL_ppaddr[type];
3562 pmop->op_flags = (U8)flags;
3563 pmop->op_private = (U8)(0 | (flags >> 8));
3565 if (PL_hints & HINT_RE_TAINT)
3566 pmop->op_pmflags |= PMf_RETAINT;
3567 if (PL_hints & HINT_LOCALE)
3568 pmop->op_pmflags |= PMf_LOCALE;
3572 assert(SvPOK(PL_regex_pad[0]));
3573 if (SvCUR(PL_regex_pad[0])) {
3574 /* Pop off the "packed" IV from the end. */
3575 SV *const repointer_list = PL_regex_pad[0];
3576 const char *p = SvEND(repointer_list) - sizeof(IV);
3577 const IV offset = *((IV*)p);
3579 assert(SvCUR(repointer_list) % sizeof(IV) == 0);
3581 SvEND_set(repointer_list, p);
3583 pmop->op_pmoffset = offset;
3584 /* This slot should be free, so assert this: */
3585 assert(PL_regex_pad[offset] == &PL_sv_undef);
3587 SV * const repointer = &PL_sv_undef;
3588 av_push(PL_regex_padav, repointer);
3589 pmop->op_pmoffset = av_len(PL_regex_padav);
3590 PL_regex_pad = AvARRAY(PL_regex_padav);
3594 return CHECKOP(type, pmop);
3597 /* Given some sort of match op o, and an expression expr containing a
3598 * pattern, either compile expr into a regex and attach it to o (if it's
3599 * constant), or convert expr into a runtime regcomp op sequence (if it's
3602 * isreg indicates that the pattern is part of a regex construct, eg
3603 * $x =~ /pattern/ or split /pattern/, as opposed to $x =~ $pattern or
3604 * split "pattern", which aren't. In the former case, expr will be a list
3605 * if the pattern contains more than one term (eg /a$b/) or if it contains
3606 * a replacement, ie s/// or tr///.
3610 Perl_pmruntime(pTHX_ OP *o, OP *expr, bool isreg)
3615 I32 repl_has_vars = 0;
3619 PERL_ARGS_ASSERT_PMRUNTIME;
3621 if (o->op_type == OP_SUBST || o->op_type == OP_TRANS) {
3622 /* last element in list is the replacement; pop it */
3624 repl = cLISTOPx(expr)->op_last;
3625 kid = cLISTOPx(expr)->op_first;
3626 while (kid->op_sibling != repl)
3627 kid = kid->op_sibling;
3628 kid->op_sibling = NULL;
3629 cLISTOPx(expr)->op_last = kid;
3632 if (isreg && expr->op_type == OP_LIST &&
3633 cLISTOPx(expr)->op_first->op_sibling == cLISTOPx(expr)->op_last)
3635 /* convert single element list to element */
3636 OP* const oe = expr;
3637 expr = cLISTOPx(oe)->op_first->op_sibling;
3638 cLISTOPx(oe)->op_first->op_sibling = NULL;
3639 cLISTOPx(oe)->op_last = NULL;
3643 if (o->op_type == OP_TRANS) {
3644 return pmtrans(o, expr, repl);
3647 reglist = isreg && expr->op_type == OP_LIST;
3651 PL_hints |= HINT_BLOCK_SCOPE;
3654 if (expr->op_type == OP_CONST) {
3655 SV *pat = ((SVOP*)expr)->op_sv;
3656 U32 pm_flags = pm->op_pmflags & PMf_COMPILETIME;
3658 if (o->op_flags & OPf_SPECIAL)
3659 pm_flags |= RXf_SPLIT;
3662 assert (SvUTF8(pat));
3663 } else if (SvUTF8(pat)) {
3664 /* Not doing UTF-8, despite what the SV says. Is this only if we're
3665 trapped in use 'bytes'? */
3666 /* Make a copy of the octet sequence, but without the flag on, as
3667 the compiler now honours the SvUTF8 flag on pat. */
3669 const char *const p = SvPV(pat, len);
3670 pat = newSVpvn_flags(p, len, SVs_TEMP);
3673 PM_SETRE(pm, CALLREGCOMP(pat, pm_flags));
3676 op_getmad(expr,(OP*)pm,'e');
3682 if (pm->op_pmflags & PMf_KEEP || !(PL_hints & HINT_RE_EVAL))
3683 expr = newUNOP((!(PL_hints & HINT_RE_EVAL)
3685 : OP_REGCMAYBE),0,expr);
3687 NewOp(1101, rcop, 1, LOGOP);
3688 rcop->op_type = OP_REGCOMP;
3689 rcop->op_ppaddr = PL_ppaddr[OP_REGCOMP];
3690 rcop->op_first = scalar(expr);
3691 rcop->op_flags |= OPf_KIDS
3692 | ((PL_hints & HINT_RE_EVAL) ? OPf_SPECIAL : 0)
3693 | (reglist ? OPf_STACKED : 0);
3694 rcop->op_private = 1;
3697 rcop->op_targ = pad_alloc(rcop->op_type, SVs_PADTMP);
3699 /* /$x/ may cause an eval, since $x might be qr/(?{..})/ */
3702 /* establish postfix order */
3703 if (pm->op_pmflags & PMf_KEEP || !(PL_hints & HINT_RE_EVAL)) {
3705 rcop->op_next = expr;
3706 ((UNOP*)expr)->op_first->op_next = (OP*)rcop;
3709 rcop->op_next = LINKLIST(expr);
3710 expr->op_next = (OP*)rcop;
3713 prepend_elem(o->op_type, scalar((OP*)rcop), o);
3718 if (pm->op_pmflags & PMf_EVAL) {
3720 if (CopLINE(PL_curcop) < (line_t)PL_parser->multi_end)
3721 CopLINE_set(PL_curcop, (line_t)PL_parser->multi_end);
3723 else if (repl->op_type == OP_CONST)
3727 for (curop = LINKLIST(repl); curop!=repl; curop = LINKLIST(curop)) {
3728 if (curop->op_type == OP_SCOPE
3729 || curop->op_type == OP_LEAVE
3730 || (PL_opargs[curop->op_type] & OA_DANGEROUS)) {
3731 if (curop->op_type == OP_GV) {
3732 GV * const gv = cGVOPx_gv(curop);
3734 if (strchr("&`'123456789+-\016\022", *GvENAME(gv)))
3737 else if (curop->op_type == OP_RV2CV)
3739 else if (curop->op_type == OP_RV2SV ||
3740 curop->op_type == OP_RV2AV ||
3741 curop->op_type == OP_RV2HV ||
3742 curop->op_type == OP_RV2GV) {
3743 if (lastop && lastop->op_type != OP_GV) /*funny deref?*/
3746 else if (curop->op_type == OP_PADSV ||
3747 curop->op_type == OP_PADAV ||
3748 curop->op_type == OP_PADHV ||
3749 curop->op_type == OP_PADANY)
3753 else if (curop->op_type == OP_PUSHRE)
3754 NOOP; /* Okay here, dangerous in newASSIGNOP */
3764 || RX_EXTFLAGS(PM_GETRE(pm)) & RXf_EVAL_SEEN)))
3766 pm->op_pmflags |= PMf_CONST; /* const for long enough */
3767 prepend_elem(o->op_type, scalar(repl), o);
3770 if (curop == repl && !PM_GETRE(pm)) { /* Has variables. */
3771 pm->op_pmflags |= PMf_MAYBE_CONST;
3773 NewOp(1101, rcop, 1, LOGOP);
3774 rcop->op_type = OP_SUBSTCONT;
3775 rcop->op_ppaddr = PL_ppaddr[OP_SUBSTCONT];
3776 rcop->op_first = scalar(repl);
3777 rcop->op_flags |= OPf_KIDS;
3778 rcop->op_private = 1;
3781 /* establish postfix order */
3782 rcop->op_next = LINKLIST(repl);
3783 repl->op_next = (OP*)rcop;
3785 pm->op_pmreplrootu.op_pmreplroot = scalar((OP*)rcop);
3786 assert(!(pm->op_pmflags & PMf_ONCE));
3787 pm->op_pmstashstartu.op_pmreplstart = LINKLIST(rcop);
3796 Perl_newSVOP(pTHX_ I32 type, I32 flags, SV *sv)
3801 PERL_ARGS_ASSERT_NEWSVOP;
3803 assert((PL_opargs[type] & OA_CLASS_MASK) == OA_SVOP
3804 || (PL_opargs[type] & OA_CLASS_MASK) == OA_PVOP_OR_SVOP
3805 || (PL_opargs[type] & OA_CLASS_MASK) == OA_FILESTATOP);
3807 NewOp(1101, svop, 1, SVOP);
3808 svop->op_type = (OPCODE)type;
3809 svop->op_ppaddr = PL_ppaddr[type];
3811 svop->op_next = (OP*)svop;
3812 svop->op_flags = (U8)flags;
3813 if (PL_opargs[type] & OA_RETSCALAR)
3815 if (PL_opargs[type] & OA_TARGET)
3816 svop->op_targ = pad_alloc(type, SVs_PADTMP);
3817 return CHECKOP(type, svop);
3822 Perl_newPADOP(pTHX_ I32 type, I32 flags, SV *sv)
3827 PERL_ARGS_ASSERT_NEWPADOP;
3829 assert((PL_opargs[type] & OA_CLASS_MASK) == OA_SVOP
3830 || (PL_opargs[type] & OA_CLASS_MASK) == OA_PVOP_OR_SVOP
3831 || (PL_opargs[type] & OA_CLASS_MASK) == OA_FILESTATOP);
3833 NewOp(1101, padop, 1, PADOP);
3834 padop->op_type = (OPCODE)type;
3835 padop->op_ppaddr = PL_ppaddr[type];
3836 padop->op_padix = pad_alloc(type, SVs_PADTMP);
3837 SvREFCNT_dec(PAD_SVl(padop->op_padix));
3838 PAD_SETSV(padop->op_padix, sv);
3841 padop->op_next = (OP*)padop;
3842 padop->op_flags = (U8)flags;
3843 if (PL_opargs[type] & OA_RETSCALAR)
3845 if (PL_opargs[type] & OA_TARGET)
3846 padop->op_targ = pad_alloc(type, SVs_PADTMP);
3847 return CHECKOP(type, padop);
3852 Perl_newGVOP(pTHX_ I32 type, I32 flags, GV *gv)
3856 PERL_ARGS_ASSERT_NEWGVOP;
3860 return newPADOP(type, flags, SvREFCNT_inc_simple_NN(gv));
3862 return newSVOP(type, flags, SvREFCNT_inc_simple_NN(gv));
3867 Perl_newPVOP(pTHX_ I32 type, I32 flags, char *pv)
3872 assert((PL_opargs[type] & OA_CLASS_MASK) == OA_PVOP_OR_SVOP
3873 || (PL_opargs[type] & OA_CLASS_MASK) == OA_LOOPEXOP);
3875 NewOp(1101, pvop, 1, PVOP);
3876 pvop->op_type = (OPCODE)type;
3877 pvop->op_ppaddr = PL_ppaddr[type];
3879 pvop->op_next = (OP*)pvop;
3880 pvop->op_flags = (U8)flags;
3881 if (PL_opargs[type] & OA_RETSCALAR)
3883 if (PL_opargs[type] & OA_TARGET)
3884 pvop->op_targ = pad_alloc(type, SVs_PADTMP);
3885 return CHECKOP(type, pvop);
3893 Perl_package(pTHX_ OP *o)
3896 SV *const sv = cSVOPo->op_sv;
3901 PERL_ARGS_ASSERT_PACKAGE;
3903 save_hptr(&PL_curstash);
3904 save_item(PL_curstname);
3906 PL_curstash = gv_stashsv(sv, GV_ADD);
3908 sv_setsv(PL_curstname, sv);
3910 PL_hints |= HINT_BLOCK_SCOPE;
3911 PL_parser->copline = NOLINE;
3912 PL_parser->expect = XSTATE;
3917 if (!PL_madskills) {
3922 pegop = newOP(OP_NULL,0);
3923 op_getmad(o,pegop,'P');
3929 Perl_package_version( pTHX_ OP *v )
3932 U32 savehints = PL_hints;
3933 PERL_ARGS_ASSERT_PACKAGE_VERSION;
3934 PL_hints &= ~HINT_STRICT_VARS;
3935 sv_setsv( GvSV(gv_fetchpvs("VERSION", GV_ADDMULTI, SVt_PV)), cSVOPx(v)->op_sv );
3936 PL_hints = savehints;
3945 Perl_utilize(pTHX_ int aver, I32 floor, OP *version, OP *idop, OP *arg)
3952 OP *pegop = newOP(OP_NULL,0);
3955 PERL_ARGS_ASSERT_UTILIZE;
3957 if (idop->op_type != OP_CONST)
3958 Perl_croak(aTHX_ "Module name must be constant");
3961 op_getmad(idop,pegop,'U');
3966 SV * const vesv = ((SVOP*)version)->op_sv;
3969 op_getmad(version,pegop,'V');
3970 if (!arg && !SvNIOKp(vesv)) {
3977 if (version->op_type != OP_CONST || !SvNIOKp(vesv))
3978 Perl_croak(aTHX_ "Version number must be a constant number");
3980 /* Make copy of idop so we don't free it twice */
3981 pack = newSVOP(OP_CONST, 0, newSVsv(((SVOP*)idop)->op_sv));
3983 /* Fake up a method call to VERSION */
3984 meth = newSVpvs_share("VERSION");
3985 veop = convert(OP_ENTERSUB, OPf_STACKED|OPf_SPECIAL,
3986 append_elem(OP_LIST,
3987 prepend_elem(OP_LIST, pack, list(version)),
3988 newSVOP(OP_METHOD_NAMED, 0, meth)));
3992 /* Fake up an import/unimport */
3993 if (arg && arg->op_type == OP_STUB) {
3995 op_getmad(arg,pegop,'S');
3996 imop = arg; /* no import on explicit () */
3998 else if (SvNIOKp(((SVOP*)idop)->op_sv)) {
3999 imop = NULL; /* use 5.0; */
4001 idop->op_private |= OPpCONST_NOVER;
4007 op_getmad(arg,pegop,'A');
4009 /* Make copy of idop so we don't free it twice */
4010 pack = newSVOP(OP_CONST, 0, newSVsv(((SVOP*)idop)->op_sv));
4012 /* Fake up a method call to import/unimport */
4014 ? newSVpvs_share("import") : newSVpvs_share("unimport");
4015 imop = convert(OP_ENTERSUB, OPf_STACKED|OPf_SPECIAL,
4016 append_elem(OP_LIST,
4017 prepend_elem(OP_LIST, pack, list(arg)),
4018 newSVOP(OP_METHOD_NAMED, 0, meth)));
4021 /* Fake up the BEGIN {}, which does its thing immediately. */
4023 newSVOP(OP_CONST, 0, newSVpvs_share("BEGIN")),
4026 append_elem(OP_LINESEQ,
4027 append_elem(OP_LINESEQ,
4028 newSTATEOP(0, NULL, newUNOP(OP_REQUIRE, 0, idop)),
4029 newSTATEOP(0, NULL, veop)),
4030 newSTATEOP(0, NULL, imop) ));
4032 /* The "did you use incorrect case?" warning used to be here.
4033 * The problem is that on case-insensitive filesystems one
4034 * might get false positives for "use" (and "require"):
4035 * "use Strict" or "require CARP" will work. This causes
4036 * portability problems for the script: in case-strict
4037 * filesystems the script will stop working.
4039 * The "incorrect case" warning checked whether "use Foo"
4040 * imported "Foo" to your namespace, but that is wrong, too:
4041 * there is no requirement nor promise in the language that
4042 * a Foo.pm should or would contain anything in package "Foo".
4044 * There is very little Configure-wise that can be done, either:
4045 * the case-sensitivity of the build filesystem of Perl does not
4046 * help in guessing the case-sensitivity of the runtime environment.
4049 PL_hints |= HINT_BLOCK_SCOPE;
4050 PL_parser->copline = NOLINE;
4051 PL_parser->expect = XSTATE;
4052 PL_cop_seqmax++; /* Purely for B::*'s benefit */
4055 if (!PL_madskills) {
4056 /* FIXME - don't allocate pegop if !PL_madskills */
4065 =head1 Embedding Functions
4067 =for apidoc load_module
4069 Loads the module whose name is pointed to by the string part of name.
4070 Note that the actual module name, not its filename, should be given.
4071 Eg, "Foo::Bar" instead of "Foo/Bar.pm". flags can be any of
4072 PERL_LOADMOD_DENY, PERL_LOADMOD_NOIMPORT, or PERL_LOADMOD_IMPORT_OPS
4073 (or 0 for no flags). ver, if specified, provides version semantics
4074 similar to C<use Foo::Bar VERSION>. The optional trailing SV*
4075 arguments can be used to specify arguments to the module's import()
4076 method, similar to C<use Foo::Bar VERSION LIST>. They must be
4077 terminated with a final NULL pointer. Note that this list can only
4078 be omitted when the PERL_LOADMOD_NOIMPORT flag has been used.
4079 Otherwise at least a single NULL pointer to designate the default
4080 import list is required.
4085 Perl_load_module(pTHX_ U32 flags, SV *name, SV *ver, ...)
4089 PERL_ARGS_ASSERT_LOAD_MODULE;
4091 va_start(args, ver);
4092 vload_module(flags, name, ver, &args);
4096 #ifdef PERL_IMPLICIT_CONTEXT
4098 Perl_load_module_nocontext(U32 flags, SV *name, SV *ver, ...)
4102 PERL_ARGS_ASSERT_LOAD_MODULE_NOCONTEXT;
4103 va_start(args, ver);
4104 vload_module(flags, name, ver, &args);
4110 Perl_vload_module(pTHX_ U32 flags, SV *name, SV *ver, va_list *args)
4114 OP * const modname = newSVOP(OP_CONST, 0, name);
4116 PERL_ARGS_ASSERT_VLOAD_MODULE;
4118 modname->op_private |= OPpCONST_BARE;
4120 veop = newSVOP(OP_CONST, 0, ver);
4124 if (flags & PERL_LOADMOD_NOIMPORT) {
4125 imop = sawparens(newNULLLIST());
4127 else if (flags & PERL_LOADMOD_IMPORT_OPS) {
4128 imop = va_arg(*args, OP*);
4133 sv = va_arg(*args, SV*);
4135 imop = append_elem(OP_LIST, imop, newSVOP(OP_CONST, 0, sv));
4136 sv = va_arg(*args, SV*);
4140 /* utilize() fakes up a BEGIN { require ..; import ... }, so make sure
4141 * that it has a PL_parser to play with while doing that, and also
4142 * that it doesn't mess with any existing parser, by creating a tmp
4143 * new parser with lex_start(). This won't actually be used for much,
4144 * since pp_require() will create another parser for the real work. */
4147 SAVEVPTR(PL_curcop);
4148 lex_start(NULL, NULL, FALSE);
4149 utilize(!(flags & PERL_LOADMOD_DENY), start_subparse(FALSE, 0),
4150 veop, modname, imop);
4155 Perl_dofile(pTHX_ OP *term, I32 force_builtin)
4161 PERL_ARGS_ASSERT_DOFILE;
4163 if (!force_builtin) {
4164 gv = gv_fetchpvs("do", GV_NOTQUAL, SVt_PVCV);
4165 if (!(gv && GvCVu(gv) && GvIMPORTED_CV(gv))) {
4166 GV * const * const gvp = (GV**)hv_fetchs(PL_globalstash, "do", FALSE);
4167 gv = gvp ? *gvp : NULL;
4171 if (gv && GvCVu(gv) && GvIMPORTED_CV(gv)) {
4172 doop = ck_subr(newUNOP(OP_ENTERSUB, OPf_STACKED,
4173 append_elem(OP_LIST, term,
4174 scalar(newUNOP(OP_RV2CV, 0,
4175 newGVOP(OP_GV, 0, gv))))));
4178 doop = newUNOP(OP_DOFILE, 0, scalar(term));
4184 Perl_newSLICEOP(pTHX_ I32 flags, OP *subscript, OP *listval)
4186 return newBINOP(OP_LSLICE, flags,
4187 list(force_list(subscript)),
4188 list(force_list(listval)) );
4192 S_is_list_assignment(pTHX_ register const OP *o)
4200 if ((o->op_type == OP_NULL) && (o->op_flags & OPf_KIDS))
4201 o = cUNOPo->op_first;
4203 flags = o->op_flags;
4205 if (type == OP_COND_EXPR) {
4206 const I32 t = is_list_assignment(cLOGOPo->op_first->op_sibling);
4207 const I32 f = is_list_assignment(cLOGOPo->op_first->op_sibling->op_sibling);
4212 yyerror("Assignment to both a list and a scalar");
4216 if (type == OP_LIST &&
4217 (flags & OPf_WANT) == OPf_WANT_SCALAR &&
4218 o->op_private & OPpLVAL_INTRO)
4221 if (type == OP_LIST || flags & OPf_PARENS ||
4222 type == OP_RV2AV || type == OP_RV2HV ||
4223 type == OP_ASLICE || type == OP_HSLICE)
4226 if (type == OP_PADAV || type == OP_PADHV)
4229 if (type == OP_RV2SV)
4236 Perl_newASSIGNOP(pTHX_ I32 flags, OP *left, I32 optype, OP *right)
4242 if (optype == OP_ANDASSIGN || optype == OP_ORASSIGN || optype == OP_DORASSIGN) {
4243 return newLOGOP(optype, 0,
4244 mod(scalar(left), optype),
4245 newUNOP(OP_SASSIGN, 0, scalar(right)));
4248 return newBINOP(optype, OPf_STACKED,
4249 mod(scalar(left), optype), scalar(right));
4253 if (is_list_assignment(left)) {
4254 static const char no_list_state[] = "Initialization of state variables"
4255 " in list context currently forbidden";
4257 bool maybe_common_vars = TRUE;
4260 /* Grandfathering $[ assignment here. Bletch.*/
4261 /* Only simple assignments like C<< ($[) = 1 >> are allowed */
4262 PL_eval_start = (left->op_type == OP_CONST) ? right : NULL;
4263 left = mod(left, OP_AASSIGN);
4266 else if (left->op_type == OP_CONST) {
4268 /* Result of assignment is always 1 (or we'd be dead already) */
4269 return newSVOP(OP_CONST, 0, newSViv(1));
4271 curop = list(force_list(left));
4272 o = newBINOP(OP_AASSIGN, flags, list(force_list(right)), curop);
4273 o->op_private = (U8)(0 | (flags >> 8));
4275 if ((left->op_type == OP_LIST
4276 || (left->op_type == OP_NULL && left->op_targ == OP_LIST)))
4278 OP* lop = ((LISTOP*)left)->op_first;
4279 maybe_common_vars = FALSE;
4281 if (lop->op_type == OP_PADSV ||
4282 lop->op_type == OP_PADAV ||
4283 lop->op_type == OP_PADHV ||
4284 lop->op_type == OP_PADANY) {
4285 if (!(lop->op_private & OPpLVAL_INTRO))
4286 maybe_common_vars = TRUE;
4288 if (lop->op_private & OPpPAD_STATE) {
4289 if (left->op_private & OPpLVAL_INTRO) {
4290 /* Each variable in state($a, $b, $c) = ... */
4293 /* Each state variable in
4294 (state $a, my $b, our $c, $d, undef) = ... */
4296 yyerror(no_list_state);
4298 /* Each my variable in
4299 (state $a, my $b, our $c, $d, undef) = ... */
4301 } else if (lop->op_type == OP_UNDEF ||
4302 lop->op_type == OP_PUSHMARK) {
4303 /* undef may be interesting in
4304 (state $a, undef, state $c) */
4306 /* Other ops in the list. */
4307 maybe_common_vars = TRUE;
4309 lop = lop->op_sibling;
4312 else if ((left->op_private & OPpLVAL_INTRO)
4313 && ( left->op_type == OP_PADSV
4314 || left->op_type == OP_PADAV
4315 || left->op_type == OP_PADHV
4316 || left->op_type == OP_PADANY))
4318 if (left->op_type == OP_PADSV) maybe_common_vars = FALSE;
4319 if (left->op_private & OPpPAD_STATE) {
4320 /* All single variable list context state assignments, hence
4330 yyerror(no_list_state);
4334 /* PL_generation sorcery:
4335 * an assignment like ($a,$b) = ($c,$d) is easier than
4336 * ($a,$b) = ($c,$a), since there is no need for temporary vars.
4337 * To detect whether there are common vars, the global var
4338 * PL_generation is incremented for each assign op we compile.
4339 * Then, while compiling the assign op, we run through all the
4340 * variables on both sides of the assignment, setting a spare slot
4341 * in each of them to PL_generation. If any of them already have
4342 * that value, we know we've got commonality. We could use a
4343 * single bit marker, but then we'd have to make 2 passes, first
4344 * to clear the flag, then to test and set it. To find somewhere
4345 * to store these values, evil chicanery is done with SvUVX().
4348 if (maybe_common_vars) {
4351 for (curop = LINKLIST(o); curop != o; curop = LINKLIST(curop)) {
4352 if (PL_opargs[curop->op_type] & OA_DANGEROUS) {
4353 if (curop->op_type == OP_GV) {
4354 GV *gv = cGVOPx_gv(curop);
4356 || (int)GvASSIGN_GENERATION(gv) == PL_generation)
4358 GvASSIGN_GENERATION_set(gv, PL_generation);
4360 else if (curop->op_type == OP_PADSV ||
4361 curop->op_type == OP_PADAV ||
4362 curop->op_type == OP_PADHV ||
4363 curop->op_type == OP_PADANY)
4365 if (PAD_COMPNAME_GEN(curop->op_targ)
4366 == (STRLEN)PL_generation)
4368 PAD_COMPNAME_GEN_set(curop->op_targ, PL_generation);
4371 else if (curop->op_type == OP_RV2CV)
4373 else if (curop->op_type == OP_RV2SV ||
4374 curop->op_type == OP_RV2AV ||
4375 curop->op_type == OP_RV2HV ||
4376 curop->op_type == OP_RV2GV) {
4377 if (lastop->op_type != OP_GV) /* funny deref? */
4380 else if (curop->op_type == OP_PUSHRE) {
4382 if (((PMOP*)curop)->op_pmreplrootu.op_pmtargetoff) {
4383 GV *const gv = MUTABLE_GV(PAD_SVl(((PMOP*)curop)->op_pmreplrootu.op_pmtargetoff));
4385 || (int)GvASSIGN_GENERATION(gv) == PL_generation)
4387 GvASSIGN_GENERATION_set(gv, PL_generation);
4391 = ((PMOP*)curop)->op_pmreplrootu.op_pmtargetgv;
4394 || (int)GvASSIGN_GENERATION(gv) == PL_generation)
4396 GvASSIGN_GENERATION_set(gv, PL_generation);
4406 o->op_private |= OPpASSIGN_COMMON;
4409 if (right && right->op_type == OP_SPLIT && !PL_madskills) {
4410 OP* tmpop = ((LISTOP*)right)->op_first;
4411 if (tmpop && (tmpop->op_type == OP_PUSHRE)) {
4412 PMOP * const pm = (PMOP*)tmpop;
4413 if (left->op_type == OP_RV2AV &&
4414 !(left->op_private & OPpLVAL_INTRO) &&
4415 !(o->op_private & OPpASSIGN_COMMON) )
4417 tmpop = ((UNOP*)left)->op_first;
4418 if (tmpop->op_type == OP_GV
4420 && !pm->op_pmreplrootu.op_pmtargetoff
4422 && !pm->op_pmreplrootu.op_pmtargetgv
4426 pm->op_pmreplrootu.op_pmtargetoff
4427 = cPADOPx(tmpop)->op_padix;
4428 cPADOPx(tmpop)->op_padix = 0; /* steal it */
4430 pm->op_pmreplrootu.op_pmtargetgv
4431 = MUTABLE_GV(cSVOPx(tmpop)->op_sv);
4432 cSVOPx(tmpop)->op_sv = NULL; /* steal it */
4434 pm->op_pmflags |= PMf_ONCE;
4435 tmpop = cUNOPo->op_first; /* to list (nulled) */
4436 tmpop = ((UNOP*)tmpop)->op_first; /* to pushmark */
4437 tmpop->op_sibling = NULL; /* don't free split */
4438 right->op_next = tmpop->op_next; /* fix starting loc */
4439 op_free(o); /* blow off assign */
4440 right->op_flags &= ~OPf_WANT;
4441 /* "I don't know and I don't care." */
4446 if (PL_modcount < RETURN_UNLIMITED_NUMBER &&
4447 ((LISTOP*)right)->op_last->op_type == OP_CONST)
4449 SV *sv = ((SVOP*)((LISTOP*)right)->op_last)->op_sv;
4450 if (SvIOK(sv) && SvIVX(sv) == 0)
4451 sv_setiv(sv, PL_modcount+1);
4459 right = newOP(OP_UNDEF, 0);
4460 if (right->op_type == OP_READLINE) {
4461 right->op_flags |= OPf_STACKED;
4462 return newBINOP(OP_NULL, flags, mod(scalar(left), OP_SASSIGN), scalar(right));
4465 PL_eval_start = right; /* Grandfathering $[ assignment here. Bletch.*/
4466 o = newBINOP(OP_SASSIGN, flags,
4467 scalar(right), mod(scalar(left), OP_SASSIGN) );
4471 if (!PL_madskills) { /* assignment to $[ is ignored when making a mad dump */
4472 deprecate("assignment to $[");
4474 o = newSVOP(OP_CONST, 0, newSViv(CopARYBASE_get(&PL_compiling)));
4475 o->op_private |= OPpCONST_ARYBASE;
4483 Perl_newSTATEOP(pTHX_ I32 flags, char *label, OP *o)
4486 const U32 seq = intro_my();
4489 NewOp(1101, cop, 1, COP);
4490 if (PERLDB_LINE && CopLINE(PL_curcop) && PL_curstash != PL_debstash) {
4491 cop->op_type = OP_DBSTATE;
4492 cop->op_ppaddr = PL_ppaddr[ OP_DBSTATE ];
4495 cop->op_type = OP_NEXTSTATE;
4496 cop->op_ppaddr = PL_ppaddr[ OP_NEXTSTATE ];
4498 cop->op_flags = (U8)flags;
4499 CopHINTS_set(cop, PL_hints);
4501 cop->op_private |= NATIVE_HINTS;
4503 CopHINTS_set(&PL_compiling, CopHINTS_get(cop));
4504 cop->op_next = (OP*)cop;
4507 /* CopARYBASE is now "virtual", in that it's stored as a flag bit in
4508 CopHINTS and a possible value in cop_hints_hash, so no need to copy it.
4510 cop->cop_warnings = DUP_WARNINGS(PL_curcop->cop_warnings);
4511 cop->cop_hints_hash = PL_curcop->cop_hints_hash;
4512 if (cop->cop_hints_hash) {
4514 cop->cop_hints_hash->refcounted_he_refcnt++;
4515 HINTS_REFCNT_UNLOCK;
4519 = Perl_store_cop_label(aTHX_ cop->cop_hints_hash, label);
4521 PL_hints |= HINT_BLOCK_SCOPE;
4522 /* It seems that we need to defer freeing this pointer, as other parts
4523 of the grammar end up wanting to copy it after this op has been
4528 if (PL_parser && PL_parser->copline == NOLINE)
4529 CopLINE_set(cop, CopLINE(PL_curcop));
4531 CopLINE_set(cop, PL_parser->copline);
4533 PL_parser->copline = NOLINE;
4536 CopFILE_set(cop, CopFILE(PL_curcop)); /* XXX share in a pvtable? */
4538 CopFILEGV_set(cop, CopFILEGV(PL_curcop));
4540 CopSTASH_set(cop, PL_curstash);
4542 if ((PERLDB_LINE || PERLDB_SAVESRC) && PL_curstash != PL_debstash) {
4543 /* this line can have a breakpoint - store the cop in IV */
4544 AV *av = CopFILEAVx(PL_curcop);
4546 SV * const * const svp = av_fetch(av, (I32)CopLINE(cop), FALSE);
4547 if (svp && *svp != &PL_sv_undef ) {
4548 (void)SvIOK_on(*svp);
4549 SvIV_set(*svp, PTR2IV(cop));
4554 if (flags & OPf_SPECIAL)
4556 return prepend_elem(OP_LINESEQ, (OP*)cop, o);
4561 Perl_newLOGOP(pTHX_ I32 type, I32 flags, OP *first, OP *other)
4565 PERL_ARGS_ASSERT_NEWLOGOP;
4567 return new_logop(type, flags, &first, &other);
4571 S_search_const(pTHX_ OP *o)
4573 PERL_ARGS_ASSERT_SEARCH_CONST;
4575 switch (o->op_type) {
4579 if (o->op_flags & OPf_KIDS)
4580 return search_const(cUNOPo->op_first);
4587 if (!(o->op_flags & OPf_KIDS))
4589 kid = cLISTOPo->op_first;
4591 switch (kid->op_type) {
4595 kid = kid->op_sibling;
4598 if (kid != cLISTOPo->op_last)
4604 kid = cLISTOPo->op_last;
4606 return search_const(kid);
4614 S_new_logop(pTHX_ I32 type, I32 flags, OP** firstp, OP** otherp)
4622 int prepend_not = 0;
4624 PERL_ARGS_ASSERT_NEW_LOGOP;
4629 if (type == OP_XOR) /* Not short circuit, but here by precedence. */
4630 return newBINOP(type, flags, scalar(first), scalar(other));
4632 assert((PL_opargs[type] & OA_CLASS_MASK) == OA_LOGOP);
4634 scalarboolean(first);
4635 /* optimize AND and OR ops that have NOTs as children */
4636 if (first->op_type == OP_NOT
4637 && (first->op_flags & OPf_KIDS)
4638 && ((first->op_flags & OPf_SPECIAL) /* unless ($x) { } */
4639 || (other->op_type == OP_NOT)) /* if (!$x && !$y) { } */
4641 if (type == OP_AND || type == OP_OR) {
4647 if (other->op_type == OP_NOT) { /* !a AND|OR !b => !(a OR|AND b) */
4649 prepend_not = 1; /* prepend a NOT op later */
4653 /* search for a constant op that could let us fold the test */
4654 if ((cstop = search_const(first))) {
4655 if (cstop->op_private & OPpCONST_STRICT)
4656 no_bareword_allowed(cstop);
4657 else if ((cstop->op_private & OPpCONST_BARE))
4658 Perl_ck_warner(aTHX_ packWARN(WARN_BAREWORD), "Bareword found in conditional");
4659 if ((type == OP_AND && SvTRUE(((SVOP*)cstop)->op_sv)) ||
4660 (type == OP_OR && !SvTRUE(((SVOP*)cstop)->op_sv)) ||
4661 (type == OP_DOR && !SvOK(((SVOP*)cstop)->op_sv))) {
4663 if (other->op_type == OP_CONST)
4664 other->op_private |= OPpCONST_SHORTCIRCUIT;
4666 OP *newop = newUNOP(OP_NULL, 0, other);
4667 op_getmad(first, newop, '1');
4668 newop->op_targ = type; /* set "was" field */
4672 if (other->op_type == OP_LEAVE)
4673 other = newUNOP(OP_NULL, OPf_SPECIAL, other);
4677 /* check for C<my $x if 0>, or C<my($x,$y) if 0> */
4678 const OP *o2 = other;
4679 if ( ! (o2->op_type == OP_LIST
4680 && (( o2 = cUNOPx(o2)->op_first))
4681 && o2->op_type == OP_PUSHMARK
4682 && (( o2 = o2->op_sibling)) )
4685 if ((o2->op_type == OP_PADSV || o2->op_type == OP_PADAV
4686 || o2->op_type == OP_PADHV)
4687 && o2->op_private & OPpLVAL_INTRO
4688 && !(o2->op_private & OPpPAD_STATE))
4690 Perl_ck_warner_d(aTHX_ packWARN(WARN_DEPRECATED),
4691 "Deprecated use of my() in false conditional");
4695 if (first->op_type == OP_CONST)
4696 first->op_private |= OPpCONST_SHORTCIRCUIT;
4698 first = newUNOP(OP_NULL, 0, first);
4699 op_getmad(other, first, '2');
4700 first->op_targ = type; /* set "was" field */
4707 else if ((first->op_flags & OPf_KIDS) && type != OP_DOR
4708 && ckWARN(WARN_MISC)) /* [#24076] Don't warn for <FH> err FOO. */
4710 const OP * const k1 = ((UNOP*)first)->op_first;
4711 const OP * const k2 = k1->op_sibling;
4713 switch (first->op_type)
4716 if (k2 && k2->op_type == OP_READLINE
4717 && (k2->op_flags & OPf_STACKED)
4718 && ((k1->op_flags & OPf_WANT) == OPf_WANT_SCALAR))
4720 warnop = k2->op_type;
4725 if (k1->op_type == OP_READDIR
4726 || k1->op_type == OP_GLOB
4727 || (k1->op_type == OP_NULL && k1->op_targ == OP_GLOB)
4728 || k1->op_type == OP_EACH)
4730 warnop = ((k1->op_type == OP_NULL)
4731 ? (OPCODE)k1->op_targ : k1->op_type);
4736 const line_t oldline = CopLINE(PL_curcop);
4737 CopLINE_set(PL_curcop, PL_parser->copline);
4738 Perl_warner(aTHX_ packWARN(WARN_MISC),
4739 "Value of %s%s can be \"0\"; test with defined()",
4741 ((warnop == OP_READLINE || warnop == OP_GLOB)
4742 ? " construct" : "() operator"));
4743 CopLINE_set(PL_curcop, oldline);
4750 if (type == OP_ANDASSIGN || type == OP_ORASSIGN || type == OP_DORASSIGN)
4751 other->op_private |= OPpASSIGN_BACKWARDS; /* other is an OP_SASSIGN */
4753 NewOp(1101, logop, 1, LOGOP);
4755 logop->op_type = (OPCODE)type;
4756 logop->op_ppaddr = PL_ppaddr[type];
4757 logop->op_first = first;
4758 logop->op_flags = (U8)(flags | OPf_KIDS);
4759 logop->op_other = LINKLIST(other);
4760 logop->op_private = (U8)(1 | (flags >> 8));
4762 /* establish postfix order */
4763 logop->op_next = LINKLIST(first);
4764 first->op_next = (OP*)logop;
4765 first->op_sibling = other;
4767 CHECKOP(type,logop);
4769 o = newUNOP(prepend_not ? OP_NOT : OP_NULL, 0, (OP*)logop);
4776 Perl_newCONDOP(pTHX_ I32 flags, OP *first, OP *trueop, OP *falseop)
4784 PERL_ARGS_ASSERT_NEWCONDOP;
4787 return newLOGOP(OP_AND, 0, first, trueop);
4789 return newLOGOP(OP_OR, 0, first, falseop);
4791 scalarboolean(first);
4792 if ((cstop = search_const(first))) {
4793 /* Left or right arm of the conditional? */
4794 const bool left = SvTRUE(((SVOP*)cstop)->op_sv);
4795 OP *live = left ? trueop : falseop;
4796 OP *const dead = left ? falseop : trueop;
4797 if (cstop->op_private & OPpCONST_BARE &&
4798 cstop->op_private & OPpCONST_STRICT) {
4799 no_bareword_allowed(cstop);