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)
379 const bool is_our = (PL_parser->in_my == KEY_our);
381 PERL_ARGS_ASSERT_ALLOCMY;
383 /* complain about "my $<special_var>" etc etc */
387 (USE_UTF8_IN_NAMES && UTF8_IS_START(name[1])) ||
388 (name[1] == '_' && (*name == '$' || name[2]))))
390 /* name[2] is true if strlen(name) > 2 */
391 if (!isPRINT(name[1]) || strchr("\t\n\r\f", name[1])) {
392 yyerror(Perl_form(aTHX_ "Can't use global %c^%c%s in \"%s\"",
393 name[0], toCTRL(name[1]), name + 2,
394 PL_parser->in_my == KEY_state ? "state" : "my"));
396 yyerror(Perl_form(aTHX_ "Can't use global %s in \"%s\"",name,
397 PL_parser->in_my == KEY_state ? "state" : "my"));
401 /* check for duplicate declaration */
402 pad_check_dup(name, is_our, (PL_curstash ? PL_curstash : PL_defstash));
404 /* allocate a spare slot and store the name in that slot */
406 off = pad_add_name(name,
407 PL_parser->in_my_stash,
409 /* $_ is always in main::, even with our */
410 ? (PL_curstash && !strEQ(name,"$_") ? PL_curstash : PL_defstash)
414 PL_parser->in_my == KEY_state
416 /* anon sub prototypes contains state vars should always be cloned,
417 * otherwise the state var would be shared between anon subs */
419 if (PL_parser->in_my == KEY_state && CvANON(PL_compcv))
420 CvCLONE_on(PL_compcv);
425 /* free the body of an op without examining its contents.
426 * Always use this rather than FreeOp directly */
429 S_op_destroy(pTHX_ OP *o)
431 if (o->op_latefree) {
439 # define forget_pmop(a,b) S_forget_pmop(aTHX_ a,b)
441 # define forget_pmop(a,b) S_forget_pmop(aTHX_ a)
447 Perl_op_free(pTHX_ OP *o)
454 if (o->op_latefreed) {
461 if (o->op_private & OPpREFCOUNTED) {
472 refcnt = OpREFCNT_dec(o);
475 /* Need to find and remove any pattern match ops from the list
476 we maintain for reset(). */
477 find_and_forget_pmops(o);
487 /* Call the op_free hook if it has been set. Do it now so that it's called
488 * at the right time for refcounted ops, but still before all of the kids
492 if (o->op_flags & OPf_KIDS) {
493 register OP *kid, *nextkid;
494 for (kid = cUNOPo->op_first; kid; kid = nextkid) {
495 nextkid = kid->op_sibling; /* Get before next freeing kid */
500 #ifdef PERL_DEBUG_READONLY_OPS
504 /* COP* is not cleared by op_clear() so that we may track line
505 * numbers etc even after null() */
506 if (type == OP_NEXTSTATE || type == OP_DBSTATE
507 || (type == OP_NULL /* the COP might have been null'ed */
508 && ((OPCODE)o->op_targ == OP_NEXTSTATE
509 || (OPCODE)o->op_targ == OP_DBSTATE))) {
514 type = (OPCODE)o->op_targ;
517 if (o->op_latefree) {
523 #ifdef DEBUG_LEAKING_SCALARS
530 Perl_op_clear(pTHX_ OP *o)
535 PERL_ARGS_ASSERT_OP_CLEAR;
538 /* if (o->op_madprop && o->op_madprop->mad_next)
540 /* FIXME for MAD - if I uncomment these two lines t/op/pack.t fails with
541 "modification of a read only value" for a reason I can't fathom why.
542 It's the "" stringification of $_, where $_ was set to '' in a foreach
543 loop, but it defies simplification into a small test case.
544 However, commenting them out has caused ext/List/Util/t/weak.t to fail
547 mad_free(o->op_madprop);
553 switch (o->op_type) {
554 case OP_NULL: /* Was holding old type, if any. */
555 if (PL_madskills && o->op_targ != OP_NULL) {
556 o->op_type = (Optype)o->op_targ;
560 case OP_ENTEREVAL: /* Was holding hints. */
564 if (!(o->op_flags & OPf_REF)
565 || (PL_check[o->op_type] != MEMBER_TO_FPTR(Perl_ck_ftst)))
571 if (! (o->op_type == OP_AELEMFAST && o->op_flags & OPf_SPECIAL)) {
572 /* not an OP_PADAV replacement */
574 if (cPADOPo->op_padix > 0) {
575 /* No GvIN_PAD_off(cGVOPo_gv) here, because other references
576 * may still exist on the pad */
577 pad_swipe(cPADOPo->op_padix, TRUE);
578 cPADOPo->op_padix = 0;
581 SvREFCNT_dec(cSVOPo->op_sv);
582 cSVOPo->op_sv = NULL;
586 case OP_METHOD_NAMED:
589 SvREFCNT_dec(cSVOPo->op_sv);
590 cSVOPo->op_sv = NULL;
593 Even if op_clear does a pad_free for the target of the op,
594 pad_free doesn't actually remove the sv that exists in the pad;
595 instead it lives on. This results in that it could be reused as
596 a target later on when the pad was reallocated.
599 pad_swipe(o->op_targ,1);
608 if (o->op_flags & (OPf_SPECIAL|OPf_STACKED|OPf_KIDS))
612 if (o->op_private & (OPpTRANS_FROM_UTF|OPpTRANS_TO_UTF)) {
614 if (cPADOPo->op_padix > 0) {
615 pad_swipe(cPADOPo->op_padix, TRUE);
616 cPADOPo->op_padix = 0;
619 SvREFCNT_dec(cSVOPo->op_sv);
620 cSVOPo->op_sv = NULL;
624 PerlMemShared_free(cPVOPo->op_pv);
625 cPVOPo->op_pv = NULL;
629 op_free(cPMOPo->op_pmreplrootu.op_pmreplroot);
633 if (cPMOPo->op_pmreplrootu.op_pmtargetoff) {
634 /* No GvIN_PAD_off here, because other references may still
635 * exist on the pad */
636 pad_swipe(cPMOPo->op_pmreplrootu.op_pmtargetoff, TRUE);
639 SvREFCNT_dec(MUTABLE_SV(cPMOPo->op_pmreplrootu.op_pmtargetgv));
645 forget_pmop(cPMOPo, 1);
646 cPMOPo->op_pmreplrootu.op_pmreplroot = NULL;
647 /* we use the same protection as the "SAFE" version of the PM_ macros
648 * here since sv_clean_all might release some PMOPs
649 * after PL_regex_padav has been cleared
650 * and the clearing of PL_regex_padav needs to
651 * happen before sv_clean_all
654 if(PL_regex_pad) { /* We could be in destruction */
655 const IV offset = (cPMOPo)->op_pmoffset;
656 ReREFCNT_dec(PM_GETRE(cPMOPo));
657 PL_regex_pad[offset] = &PL_sv_undef;
658 sv_catpvn_nomg(PL_regex_pad[0], (const char *)&offset,
662 ReREFCNT_dec(PM_GETRE(cPMOPo));
663 PM_SETRE(cPMOPo, NULL);
669 if (o->op_targ > 0) {
670 pad_free(o->op_targ);
676 S_cop_free(pTHX_ COP* cop)
678 PERL_ARGS_ASSERT_COP_FREE;
682 if (! specialWARN(cop->cop_warnings))
683 PerlMemShared_free(cop->cop_warnings);
684 Perl_refcounted_he_free(aTHX_ cop->cop_hints_hash);
688 S_forget_pmop(pTHX_ PMOP *const o
694 HV * const pmstash = PmopSTASH(o);
696 PERL_ARGS_ASSERT_FORGET_PMOP;
698 if (pmstash && !SvIS_FREED(pmstash)) {
699 MAGIC * const mg = mg_find((const SV *)pmstash, PERL_MAGIC_symtab);
701 PMOP **const array = (PMOP**) mg->mg_ptr;
702 U32 count = mg->mg_len / sizeof(PMOP**);
707 /* Found it. Move the entry at the end to overwrite it. */
708 array[i] = array[--count];
709 mg->mg_len = count * sizeof(PMOP**);
710 /* Could realloc smaller at this point always, but probably
711 not worth it. Probably worth free()ing if we're the
714 Safefree(mg->mg_ptr);
731 S_find_and_forget_pmops(pTHX_ OP *o)
733 PERL_ARGS_ASSERT_FIND_AND_FORGET_PMOPS;
735 if (o->op_flags & OPf_KIDS) {
736 OP *kid = cUNOPo->op_first;
738 switch (kid->op_type) {
743 forget_pmop((PMOP*)kid, 0);
745 find_and_forget_pmops(kid);
746 kid = kid->op_sibling;
752 Perl_op_null(pTHX_ OP *o)
756 PERL_ARGS_ASSERT_OP_NULL;
758 if (o->op_type == OP_NULL)
762 o->op_targ = o->op_type;
763 o->op_type = OP_NULL;
764 o->op_ppaddr = PL_ppaddr[OP_NULL];
768 Perl_op_refcnt_lock(pTHX)
776 Perl_op_refcnt_unlock(pTHX)
783 /* Contextualizers */
785 #define LINKLIST(o) ((o)->op_next ? (o)->op_next : linklist((OP*)o))
788 S_linklist(pTHX_ OP *o)
792 PERL_ARGS_ASSERT_LINKLIST;
797 /* establish postfix order */
798 first = cUNOPo->op_first;
801 o->op_next = LINKLIST(first);
804 if (kid->op_sibling) {
805 kid->op_next = LINKLIST(kid->op_sibling);
806 kid = kid->op_sibling;
820 S_scalarkids(pTHX_ OP *o)
822 if (o && o->op_flags & OPf_KIDS) {
824 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
831 S_scalarboolean(pTHX_ OP *o)
835 PERL_ARGS_ASSERT_SCALARBOOLEAN;
837 if (o->op_type == OP_SASSIGN && cBINOPo->op_first->op_type == OP_CONST) {
838 if (ckWARN(WARN_SYNTAX)) {
839 const line_t oldline = CopLINE(PL_curcop);
841 if (PL_parser && PL_parser->copline != NOLINE)
842 CopLINE_set(PL_curcop, PL_parser->copline);
843 Perl_warner(aTHX_ packWARN(WARN_SYNTAX), "Found = in conditional, should be ==");
844 CopLINE_set(PL_curcop, oldline);
851 Perl_scalar(pTHX_ OP *o)
856 /* assumes no premature commitment */
857 if (!o || (PL_parser && PL_parser->error_count)
858 || (o->op_flags & OPf_WANT)
859 || o->op_type == OP_RETURN)
864 o->op_flags = (o->op_flags & ~OPf_WANT) | OPf_WANT_SCALAR;
866 switch (o->op_type) {
868 scalar(cBINOPo->op_first);
873 for (kid = cUNOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
883 if (o->op_flags & OPf_KIDS) {
884 for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling)
890 kid = cLISTOPo->op_first;
892 while ((kid = kid->op_sibling)) {
898 PL_curcop = &PL_compiling;
903 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling) {
909 PL_curcop = &PL_compiling;
912 Perl_ck_warner(aTHX_ packWARN(WARN_VOID), "Useless use of sort in scalar context");
919 Perl_scalarvoid(pTHX_ OP *o)
923 const char* useless = NULL;
927 PERL_ARGS_ASSERT_SCALARVOID;
929 /* trailing mad null ops don't count as "there" for void processing */
931 o->op_type != OP_NULL &&
933 o->op_sibling->op_type == OP_NULL)
936 for (sib = o->op_sibling;
937 sib && sib->op_type == OP_NULL;
938 sib = sib->op_sibling) ;
944 if (o->op_type == OP_NEXTSTATE
945 || o->op_type == OP_DBSTATE
946 || (o->op_type == OP_NULL && (o->op_targ == OP_NEXTSTATE
947 || o->op_targ == OP_DBSTATE)))
948 PL_curcop = (COP*)o; /* for warning below */
950 /* assumes no premature commitment */
951 want = o->op_flags & OPf_WANT;
952 if ((want && want != OPf_WANT_SCALAR)
953 || (PL_parser && PL_parser->error_count)
954 || o->op_type == OP_RETURN)
959 if ((o->op_private & OPpTARGET_MY)
960 && (PL_opargs[o->op_type] & OA_TARGLEX))/* OPp share the meaning */
962 return scalar(o); /* As if inside SASSIGN */
965 o->op_flags = (o->op_flags & ~OPf_WANT) | OPf_WANT_VOID;
967 switch (o->op_type) {
969 if (!(PL_opargs[o->op_type] & OA_FOLDCONST))
973 if (o->op_flags & OPf_STACKED)
977 if (o->op_private == 4)
1020 case OP_GETSOCKNAME:
1021 case OP_GETPEERNAME:
1026 case OP_GETPRIORITY:
1050 if (!(o->op_private & (OPpLVAL_INTRO|OPpOUR_INTRO)))
1051 /* Otherwise it's "Useless use of grep iterator" */
1052 useless = OP_DESC(o);
1056 kid = cUNOPo->op_first;
1057 if (kid->op_type != OP_MATCH && kid->op_type != OP_SUBST &&
1058 kid->op_type != OP_TRANS) {
1061 useless = "negative pattern binding (!~)";
1068 if (!(o->op_private & (OPpLVAL_INTRO|OPpOUR_INTRO)) &&
1069 (!o->op_sibling || o->op_sibling->op_type != OP_READLINE))
1070 useless = "a variable";
1075 if (cSVOPo->op_private & OPpCONST_STRICT)
1076 no_bareword_allowed(o);
1078 if (ckWARN(WARN_VOID)) {
1080 SV* msv = sv_2mortal(Perl_newSVpvf(aTHX_
1081 "a constant (%"SVf")", sv));
1082 useless = SvPV_nolen(msv);
1085 useless = "a constant (undef)";
1086 if (o->op_private & OPpCONST_ARYBASE)
1088 /* don't warn on optimised away booleans, eg
1089 * use constant Foo, 5; Foo || print; */
1090 if (cSVOPo->op_private & OPpCONST_SHORTCIRCUIT)
1092 /* the constants 0 and 1 are permitted as they are
1093 conventionally used as dummies in constructs like
1094 1 while some_condition_with_side_effects; */
1095 else if (SvNIOK(sv) && (SvNV(sv) == 0.0 || SvNV(sv) == 1.0))
1097 else if (SvPOK(sv)) {
1098 /* perl4's way of mixing documentation and code
1099 (before the invention of POD) was based on a
1100 trick to mix nroff and perl code. The trick was
1101 built upon these three nroff macros being used in
1102 void context. The pink camel has the details in
1103 the script wrapman near page 319. */
1104 const char * const maybe_macro = SvPVX_const(sv);
1105 if (strnEQ(maybe_macro, "di", 2) ||
1106 strnEQ(maybe_macro, "ds", 2) ||
1107 strnEQ(maybe_macro, "ig", 2))
1112 op_null(o); /* don't execute or even remember it */
1116 o->op_type = OP_PREINC; /* pre-increment is faster */
1117 o->op_ppaddr = PL_ppaddr[OP_PREINC];
1121 o->op_type = OP_PREDEC; /* pre-decrement is faster */
1122 o->op_ppaddr = PL_ppaddr[OP_PREDEC];
1126 o->op_type = OP_I_PREINC; /* pre-increment is faster */
1127 o->op_ppaddr = PL_ppaddr[OP_I_PREINC];
1131 o->op_type = OP_I_PREDEC; /* pre-decrement is faster */
1132 o->op_ppaddr = PL_ppaddr[OP_I_PREDEC];
1137 kid = cLOGOPo->op_first;
1138 if (kid->op_type == OP_NOT
1139 && (kid->op_flags & OPf_KIDS)
1141 if (o->op_type == OP_AND) {
1143 o->op_ppaddr = PL_ppaddr[OP_OR];
1145 o->op_type = OP_AND;
1146 o->op_ppaddr = PL_ppaddr[OP_AND];
1155 for (kid = cUNOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
1160 if (o->op_flags & OPf_STACKED)
1167 if (!(o->op_flags & OPf_KIDS))
1178 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
1185 /* all requires must return a boolean value */
1186 o->op_flags &= ~OPf_WANT;
1192 Perl_ck_warner(aTHX_ packWARN(WARN_VOID), "Useless use of %s in void context", useless);
1197 S_listkids(pTHX_ OP *o)
1199 if (o && o->op_flags & OPf_KIDS) {
1201 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
1208 Perl_list(pTHX_ OP *o)
1213 /* assumes no premature commitment */
1214 if (!o || (o->op_flags & OPf_WANT)
1215 || (PL_parser && PL_parser->error_count)
1216 || o->op_type == OP_RETURN)
1221 if ((o->op_private & OPpTARGET_MY)
1222 && (PL_opargs[o->op_type] & OA_TARGLEX))/* OPp share the meaning */
1224 return o; /* As if inside SASSIGN */
1227 o->op_flags = (o->op_flags & ~OPf_WANT) | OPf_WANT_LIST;
1229 switch (o->op_type) {
1232 list(cBINOPo->op_first);
1237 for (kid = cUNOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
1245 if (!(o->op_flags & OPf_KIDS))
1247 if (!o->op_next && cUNOPo->op_first->op_type == OP_FLOP) {
1248 list(cBINOPo->op_first);
1249 return gen_constant_list(o);
1256 kid = cLISTOPo->op_first;
1258 while ((kid = kid->op_sibling)) {
1259 if (kid->op_sibling)
1264 PL_curcop = &PL_compiling;
1268 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling) {
1269 if (kid->op_sibling)
1274 PL_curcop = &PL_compiling;
1277 /* all requires must return a boolean value */
1278 o->op_flags &= ~OPf_WANT;
1285 S_scalarseq(pTHX_ OP *o)
1289 const OPCODE type = o->op_type;
1291 if (type == OP_LINESEQ || type == OP_SCOPE ||
1292 type == OP_LEAVE || type == OP_LEAVETRY)
1295 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling) {
1296 if (kid->op_sibling) {
1300 PL_curcop = &PL_compiling;
1302 o->op_flags &= ~OPf_PARENS;
1303 if (PL_hints & HINT_BLOCK_SCOPE)
1304 o->op_flags |= OPf_PARENS;
1307 o = newOP(OP_STUB, 0);
1312 S_modkids(pTHX_ OP *o, I32 type)
1314 if (o && o->op_flags & OPf_KIDS) {
1316 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
1322 /* Propagate lvalue ("modifiable") context to an op and its children.
1323 * 'type' represents the context type, roughly based on the type of op that
1324 * would do the modifying, although local() is represented by OP_NULL.
1325 * It's responsible for detecting things that can't be modified, flag
1326 * things that need to behave specially in an lvalue context (e.g., "$$x = 5"
1327 * might have to vivify a reference in $x), and so on.
1329 * For example, "$a+1 = 2" would cause mod() to be called with o being
1330 * OP_ADD and type being OP_SASSIGN, and would output an error.
1334 Perl_mod(pTHX_ OP *o, I32 type)
1338 /* -1 = error on localize, 0 = ignore localize, 1 = ok to localize */
1341 if (!o || (PL_parser && PL_parser->error_count))
1344 if ((o->op_private & OPpTARGET_MY)
1345 && (PL_opargs[o->op_type] & OA_TARGLEX))/* OPp share the meaning */
1350 switch (o->op_type) {
1356 if (!(o->op_private & OPpCONST_ARYBASE))
1359 if (PL_eval_start && PL_eval_start->op_type == OP_CONST) {
1360 CopARYBASE_set(&PL_compiling,
1361 (I32)SvIV(cSVOPx(PL_eval_start)->op_sv));
1365 SAVECOPARYBASE(&PL_compiling);
1366 CopARYBASE_set(&PL_compiling, 0);
1368 else if (type == OP_REFGEN)
1371 Perl_croak(aTHX_ "That use of $[ is unsupported");
1374 if ((o->op_flags & OPf_PARENS) || PL_madskills)
1378 if ((type == OP_UNDEF || type == OP_REFGEN) &&
1379 !(o->op_flags & OPf_STACKED)) {
1380 o->op_type = OP_RV2CV; /* entersub => rv2cv */
1381 /* The default is to set op_private to the number of children,
1382 which for a UNOP such as RV2CV is always 1. And w're using
1383 the bit for a flag in RV2CV, so we need it clear. */
1384 o->op_private &= ~1;
1385 o->op_ppaddr = PL_ppaddr[OP_RV2CV];
1386 assert(cUNOPo->op_first->op_type == OP_NULL);
1387 op_null(((LISTOP*)cUNOPo->op_first)->op_first);/* disable pushmark */
1390 else if (o->op_private & OPpENTERSUB_NOMOD)
1392 else { /* lvalue subroutine call */
1393 o->op_private |= OPpLVAL_INTRO;
1394 PL_modcount = RETURN_UNLIMITED_NUMBER;
1395 if (type == OP_GREPSTART || type == OP_ENTERSUB || type == OP_REFGEN) {
1396 /* Backward compatibility mode: */
1397 o->op_private |= OPpENTERSUB_INARGS;
1400 else { /* Compile-time error message: */
1401 OP *kid = cUNOPo->op_first;
1405 if (kid->op_type != OP_PUSHMARK) {
1406 if (kid->op_type != OP_NULL || kid->op_targ != OP_LIST)
1408 "panic: unexpected lvalue entersub "
1409 "args: type/targ %ld:%"UVuf,
1410 (long)kid->op_type, (UV)kid->op_targ);
1411 kid = kLISTOP->op_first;
1413 while (kid->op_sibling)
1414 kid = kid->op_sibling;
1415 if (!(kid->op_type == OP_NULL && kid->op_targ == OP_RV2CV)) {
1417 if (kid->op_type == OP_METHOD_NAMED
1418 || kid->op_type == OP_METHOD)
1422 NewOp(1101, newop, 1, UNOP);
1423 newop->op_type = OP_RV2CV;
1424 newop->op_ppaddr = PL_ppaddr[OP_RV2CV];
1425 newop->op_first = NULL;
1426 newop->op_next = (OP*)newop;
1427 kid->op_sibling = (OP*)newop;
1428 newop->op_private |= OPpLVAL_INTRO;
1429 newop->op_private &= ~1;
1433 if (kid->op_type != OP_RV2CV)
1435 "panic: unexpected lvalue entersub "
1436 "entry via type/targ %ld:%"UVuf,
1437 (long)kid->op_type, (UV)kid->op_targ);
1438 kid->op_private |= OPpLVAL_INTRO;
1439 break; /* Postpone until runtime */
1443 kid = kUNOP->op_first;
1444 if (kid->op_type == OP_NULL && kid->op_targ == OP_RV2SV)
1445 kid = kUNOP->op_first;
1446 if (kid->op_type == OP_NULL)
1448 "Unexpected constant lvalue entersub "
1449 "entry via type/targ %ld:%"UVuf,
1450 (long)kid->op_type, (UV)kid->op_targ);
1451 if (kid->op_type != OP_GV) {
1452 /* Restore RV2CV to check lvalueness */
1454 if (kid->op_next && kid->op_next != kid) { /* Happens? */
1455 okid->op_next = kid->op_next;
1456 kid->op_next = okid;
1459 okid->op_next = NULL;
1460 okid->op_type = OP_RV2CV;
1462 okid->op_ppaddr = PL_ppaddr[OP_RV2CV];
1463 okid->op_private |= OPpLVAL_INTRO;
1464 okid->op_private &= ~1;
1468 cv = GvCV(kGVOP_gv);
1478 /* grep, foreach, subcalls, refgen */
1479 if (type == OP_GREPSTART || type == OP_ENTERSUB || type == OP_REFGEN)
1481 yyerror(Perl_form(aTHX_ "Can't modify %s in %s",
1482 (o->op_type == OP_NULL && (o->op_flags & OPf_SPECIAL)
1484 : (o->op_type == OP_ENTERSUB
1485 ? "non-lvalue subroutine call"
1487 type ? PL_op_desc[type] : "local"));
1501 case OP_RIGHT_SHIFT:
1510 if (!(o->op_flags & OPf_STACKED))
1517 for (kid = cUNOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
1523 if (type == OP_REFGEN && o->op_flags & OPf_PARENS) {
1524 PL_modcount = RETURN_UNLIMITED_NUMBER;
1525 return o; /* Treat \(@foo) like ordinary list. */
1529 if (scalar_mod_type(o, type))
1531 ref(cUNOPo->op_first, o->op_type);
1535 if (type == OP_LEAVESUBLV)
1536 o->op_private |= OPpMAYBE_LVSUB;
1542 PL_modcount = RETURN_UNLIMITED_NUMBER;
1545 PL_hints |= HINT_BLOCK_SCOPE;
1546 if (type == OP_LEAVESUBLV)
1547 o->op_private |= OPpMAYBE_LVSUB;
1551 ref(cUNOPo->op_first, o->op_type);
1555 PL_hints |= HINT_BLOCK_SCOPE;
1570 PL_modcount = RETURN_UNLIMITED_NUMBER;
1571 if (type == OP_REFGEN && o->op_flags & OPf_PARENS)
1572 return o; /* Treat \(@foo) like ordinary list. */
1573 if (scalar_mod_type(o, type))
1575 if (type == OP_LEAVESUBLV)
1576 o->op_private |= OPpMAYBE_LVSUB;
1580 if (!type) /* local() */
1581 Perl_croak(aTHX_ "Can't localize lexical variable %s",
1582 PAD_COMPNAME_PV(o->op_targ));
1590 if (type != OP_SASSIGN)
1594 if (o->op_private == 4) /* don't allow 4 arg substr as lvalue */
1599 if (type == OP_LEAVESUBLV)
1600 o->op_private |= OPpMAYBE_LVSUB;
1602 pad_free(o->op_targ);
1603 o->op_targ = pad_alloc(o->op_type, SVs_PADMY);
1604 assert(SvTYPE(PAD_SV(o->op_targ)) == SVt_NULL);
1605 if (o->op_flags & OPf_KIDS)
1606 mod(cBINOPo->op_first->op_sibling, type);
1611 ref(cBINOPo->op_first, o->op_type);
1612 if (type == OP_ENTERSUB &&
1613 !(o->op_private & (OPpLVAL_INTRO | OPpDEREF)))
1614 o->op_private |= OPpLVAL_DEFER;
1615 if (type == OP_LEAVESUBLV)
1616 o->op_private |= OPpMAYBE_LVSUB;
1626 if (o->op_flags & OPf_KIDS)
1627 mod(cLISTOPo->op_last, type);
1632 if (o->op_flags & OPf_SPECIAL) /* do BLOCK */
1634 else if (!(o->op_flags & OPf_KIDS))
1636 if (o->op_targ != OP_LIST) {
1637 mod(cBINOPo->op_first, type);
1643 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
1648 if (type != OP_LEAVESUBLV)
1650 break; /* mod()ing was handled by ck_return() */
1653 /* [20011101.069] File test operators interpret OPf_REF to mean that
1654 their argument is a filehandle; thus \stat(".") should not set
1656 if (type == OP_REFGEN &&
1657 PL_check[o->op_type] == MEMBER_TO_FPTR(Perl_ck_ftst))
1660 if (type != OP_LEAVESUBLV)
1661 o->op_flags |= OPf_MOD;
1663 if (type == OP_AASSIGN || type == OP_SASSIGN)
1664 o->op_flags |= OPf_SPECIAL|OPf_REF;
1665 else if (!type) { /* local() */
1668 o->op_private |= OPpLVAL_INTRO;
1669 o->op_flags &= ~OPf_SPECIAL;
1670 PL_hints |= HINT_BLOCK_SCOPE;
1675 Perl_ck_warner(aTHX_ packWARN(WARN_SYNTAX),
1676 "Useless localization of %s", OP_DESC(o));
1679 else if (type != OP_GREPSTART && type != OP_ENTERSUB
1680 && type != OP_LEAVESUBLV)
1681 o->op_flags |= OPf_REF;
1686 S_scalar_mod_type(const OP *o, I32 type)
1688 PERL_ARGS_ASSERT_SCALAR_MOD_TYPE;
1692 if (o->op_type == OP_RV2GV)
1716 case OP_RIGHT_SHIFT:
1736 S_is_handle_constructor(const OP *o, I32 numargs)
1738 PERL_ARGS_ASSERT_IS_HANDLE_CONSTRUCTOR;
1740 switch (o->op_type) {
1748 case OP_SELECT: /* XXX c.f. SelectSaver.pm */
1761 S_refkids(pTHX_ OP *o, I32 type)
1763 if (o && o->op_flags & OPf_KIDS) {
1765 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
1772 Perl_doref(pTHX_ OP *o, I32 type, bool set_op_ref)
1777 PERL_ARGS_ASSERT_DOREF;
1779 if (!o || (PL_parser && PL_parser->error_count))
1782 switch (o->op_type) {
1784 if ((type == OP_EXISTS || type == OP_DEFINED || type == OP_LOCK) &&
1785 !(o->op_flags & OPf_STACKED)) {
1786 o->op_type = OP_RV2CV; /* entersub => rv2cv */
1787 o->op_ppaddr = PL_ppaddr[OP_RV2CV];
1788 assert(cUNOPo->op_first->op_type == OP_NULL);
1789 op_null(((LISTOP*)cUNOPo->op_first)->op_first); /* disable pushmark */
1790 o->op_flags |= OPf_SPECIAL;
1791 o->op_private &= ~1;
1796 for (kid = cUNOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
1797 doref(kid, type, set_op_ref);
1800 if (type == OP_DEFINED)
1801 o->op_flags |= OPf_SPECIAL; /* don't create GV */
1802 doref(cUNOPo->op_first, o->op_type, set_op_ref);
1805 if (type == OP_RV2SV || type == OP_RV2AV || type == OP_RV2HV) {
1806 o->op_private |= (type == OP_RV2AV ? OPpDEREF_AV
1807 : type == OP_RV2HV ? OPpDEREF_HV
1809 o->op_flags |= OPf_MOD;
1816 o->op_flags |= OPf_REF;
1819 if (type == OP_DEFINED)
1820 o->op_flags |= OPf_SPECIAL; /* don't create GV */
1821 doref(cUNOPo->op_first, o->op_type, set_op_ref);
1827 o->op_flags |= OPf_REF;
1832 if (!(o->op_flags & OPf_KIDS))
1834 doref(cBINOPo->op_first, type, set_op_ref);
1838 doref(cBINOPo->op_first, o->op_type, set_op_ref);
1839 if (type == OP_RV2SV || type == OP_RV2AV || type == OP_RV2HV) {
1840 o->op_private |= (type == OP_RV2AV ? OPpDEREF_AV
1841 : type == OP_RV2HV ? OPpDEREF_HV
1843 o->op_flags |= OPf_MOD;
1853 if (!(o->op_flags & OPf_KIDS))
1855 doref(cLISTOPo->op_last, type, set_op_ref);
1865 S_dup_attrlist(pTHX_ OP *o)
1870 PERL_ARGS_ASSERT_DUP_ATTRLIST;
1872 /* An attrlist is either a simple OP_CONST or an OP_LIST with kids,
1873 * where the first kid is OP_PUSHMARK and the remaining ones
1874 * are OP_CONST. We need to push the OP_CONST values.
1876 if (o->op_type == OP_CONST)
1877 rop = newSVOP(OP_CONST, o->op_flags, SvREFCNT_inc_NN(cSVOPo->op_sv));
1879 else if (o->op_type == OP_NULL)
1883 assert((o->op_type == OP_LIST) && (o->op_flags & OPf_KIDS));
1885 for (o = cLISTOPo->op_first; o; o=o->op_sibling) {
1886 if (o->op_type == OP_CONST)
1887 rop = append_elem(OP_LIST, rop,
1888 newSVOP(OP_CONST, o->op_flags,
1889 SvREFCNT_inc_NN(cSVOPo->op_sv)));
1896 S_apply_attrs(pTHX_ HV *stash, SV *target, OP *attrs, bool for_my)
1901 PERL_ARGS_ASSERT_APPLY_ATTRS;
1903 /* fake up C<use attributes $pkg,$rv,@attrs> */
1904 ENTER; /* need to protect against side-effects of 'use' */
1905 stashsv = stash ? newSVhek(HvNAME_HEK(stash)) : &PL_sv_no;
1907 #define ATTRSMODULE "attributes"
1908 #define ATTRSMODULE_PM "attributes.pm"
1911 /* Don't force the C<use> if we don't need it. */
1912 SV * const * const svp = hv_fetchs(GvHVn(PL_incgv), ATTRSMODULE_PM, FALSE);
1913 if (svp && *svp != &PL_sv_undef)
1914 NOOP; /* already in %INC */
1916 Perl_load_module(aTHX_ PERL_LOADMOD_NOIMPORT,
1917 newSVpvs(ATTRSMODULE), NULL);
1920 Perl_load_module(aTHX_ PERL_LOADMOD_IMPORT_OPS,
1921 newSVpvs(ATTRSMODULE),
1923 prepend_elem(OP_LIST,
1924 newSVOP(OP_CONST, 0, stashsv),
1925 prepend_elem(OP_LIST,
1926 newSVOP(OP_CONST, 0,
1928 dup_attrlist(attrs))));
1934 S_apply_attrs_my(pTHX_ HV *stash, OP *target, OP *attrs, OP **imopsp)
1937 OP *pack, *imop, *arg;
1940 PERL_ARGS_ASSERT_APPLY_ATTRS_MY;
1945 assert(target->op_type == OP_PADSV ||
1946 target->op_type == OP_PADHV ||
1947 target->op_type == OP_PADAV);
1949 /* Ensure that attributes.pm is loaded. */
1950 apply_attrs(stash, PAD_SV(target->op_targ), attrs, TRUE);
1952 /* Need package name for method call. */
1953 pack = newSVOP(OP_CONST, 0, newSVpvs(ATTRSMODULE));
1955 /* Build up the real arg-list. */
1956 stashsv = stash ? newSVhek(HvNAME_HEK(stash)) : &PL_sv_no;
1958 arg = newOP(OP_PADSV, 0);
1959 arg->op_targ = target->op_targ;
1960 arg = prepend_elem(OP_LIST,
1961 newSVOP(OP_CONST, 0, stashsv),
1962 prepend_elem(OP_LIST,
1963 newUNOP(OP_REFGEN, 0,
1964 mod(arg, OP_REFGEN)),
1965 dup_attrlist(attrs)));
1967 /* Fake up a method call to import */
1968 meth = newSVpvs_share("import");
1969 imop = convert(OP_ENTERSUB, OPf_STACKED|OPf_SPECIAL|OPf_WANT_VOID,
1970 append_elem(OP_LIST,
1971 prepend_elem(OP_LIST, pack, list(arg)),
1972 newSVOP(OP_METHOD_NAMED, 0, meth)));
1973 imop->op_private |= OPpENTERSUB_NOMOD;
1975 /* Combine the ops. */
1976 *imopsp = append_elem(OP_LIST, *imopsp, imop);
1980 =notfor apidoc apply_attrs_string
1982 Attempts to apply a list of attributes specified by the C<attrstr> and
1983 C<len> arguments to the subroutine identified by the C<cv> argument which
1984 is expected to be associated with the package identified by the C<stashpv>
1985 argument (see L<attributes>). It gets this wrong, though, in that it
1986 does not correctly identify the boundaries of the individual attribute
1987 specifications within C<attrstr>. This is not really intended for the
1988 public API, but has to be listed here for systems such as AIX which
1989 need an explicit export list for symbols. (It's called from XS code
1990 in support of the C<ATTRS:> keyword from F<xsubpp>.) Patches to fix it
1991 to respect attribute syntax properly would be welcome.
1997 Perl_apply_attrs_string(pTHX_ const char *stashpv, CV *cv,
1998 const char *attrstr, STRLEN len)
2002 PERL_ARGS_ASSERT_APPLY_ATTRS_STRING;
2005 len = strlen(attrstr);
2009 for (; isSPACE(*attrstr) && len; --len, ++attrstr) ;
2011 const char * const sstr = attrstr;
2012 for (; !isSPACE(*attrstr) && len; --len, ++attrstr) ;
2013 attrs = append_elem(OP_LIST, attrs,
2014 newSVOP(OP_CONST, 0,
2015 newSVpvn(sstr, attrstr-sstr)));
2019 Perl_load_module(aTHX_ PERL_LOADMOD_IMPORT_OPS,
2020 newSVpvs(ATTRSMODULE),
2021 NULL, prepend_elem(OP_LIST,
2022 newSVOP(OP_CONST, 0, newSVpv(stashpv,0)),
2023 prepend_elem(OP_LIST,
2024 newSVOP(OP_CONST, 0,
2025 newRV(MUTABLE_SV(cv))),
2030 S_my_kid(pTHX_ OP *o, OP *attrs, OP **imopsp)
2035 PERL_ARGS_ASSERT_MY_KID;
2037 if (!o || (PL_parser && PL_parser->error_count))
2041 if (PL_madskills && type == OP_NULL && o->op_flags & OPf_KIDS) {
2042 (void)my_kid(cUNOPo->op_first, attrs, imopsp);
2046 if (type == OP_LIST) {
2048 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
2049 my_kid(kid, attrs, imopsp);
2050 } else if (type == OP_UNDEF
2056 } else if (type == OP_RV2SV || /* "our" declaration */
2058 type == OP_RV2HV) { /* XXX does this let anything illegal in? */
2059 if (cUNOPo->op_first->op_type != OP_GV) { /* MJD 20011224 */
2060 yyerror(Perl_form(aTHX_ "Can't declare %s in \"%s\"",
2062 PL_parser->in_my == KEY_our
2064 : PL_parser->in_my == KEY_state ? "state" : "my"));
2066 GV * const gv = cGVOPx_gv(cUNOPo->op_first);
2067 PL_parser->in_my = FALSE;
2068 PL_parser->in_my_stash = NULL;
2069 apply_attrs(GvSTASH(gv),
2070 (type == OP_RV2SV ? GvSV(gv) :
2071 type == OP_RV2AV ? MUTABLE_SV(GvAV(gv)) :
2072 type == OP_RV2HV ? MUTABLE_SV(GvHV(gv)) : MUTABLE_SV(gv)),
2075 o->op_private |= OPpOUR_INTRO;
2078 else if (type != OP_PADSV &&
2081 type != OP_PUSHMARK)
2083 yyerror(Perl_form(aTHX_ "Can't declare %s in \"%s\"",
2085 PL_parser->in_my == KEY_our
2087 : PL_parser->in_my == KEY_state ? "state" : "my"));
2090 else if (attrs && type != OP_PUSHMARK) {
2093 PL_parser->in_my = FALSE;
2094 PL_parser->in_my_stash = NULL;
2096 /* check for C<my Dog $spot> when deciding package */
2097 stash = PAD_COMPNAME_TYPE(o->op_targ);
2099 stash = PL_curstash;
2100 apply_attrs_my(stash, o, attrs, imopsp);
2102 o->op_flags |= OPf_MOD;
2103 o->op_private |= OPpLVAL_INTRO;
2104 if (PL_parser->in_my == KEY_state)
2105 o->op_private |= OPpPAD_STATE;
2110 Perl_my_attrs(pTHX_ OP *o, OP *attrs)
2114 int maybe_scalar = 0;
2116 PERL_ARGS_ASSERT_MY_ATTRS;
2118 /* [perl #17376]: this appears to be premature, and results in code such as
2119 C< our(%x); > executing in list mode rather than void mode */
2121 if (o->op_flags & OPf_PARENS)
2131 o = my_kid(o, attrs, &rops);
2133 if (maybe_scalar && o->op_type == OP_PADSV) {
2134 o = scalar(append_list(OP_LIST, (LISTOP*)rops, (LISTOP*)o));
2135 o->op_private |= OPpLVAL_INTRO;
2138 o = append_list(OP_LIST, (LISTOP*)o, (LISTOP*)rops);
2140 PL_parser->in_my = FALSE;
2141 PL_parser->in_my_stash = NULL;
2146 Perl_sawparens(pTHX_ OP *o)
2148 PERL_UNUSED_CONTEXT;
2150 o->op_flags |= OPf_PARENS;
2155 Perl_bind_match(pTHX_ I32 type, OP *left, OP *right)
2159 const OPCODE ltype = left->op_type;
2160 const OPCODE rtype = right->op_type;
2162 PERL_ARGS_ASSERT_BIND_MATCH;
2164 if ( (ltype == OP_RV2AV || ltype == OP_RV2HV || ltype == OP_PADAV
2165 || ltype == OP_PADHV) && ckWARN(WARN_MISC))
2167 const char * const desc
2168 = PL_op_desc[(rtype == OP_SUBST || rtype == OP_TRANS)
2169 ? (int)rtype : OP_MATCH];
2170 const char * const sample = ((ltype == OP_RV2AV || ltype == OP_PADAV)
2171 ? "@array" : "%hash");
2172 Perl_warner(aTHX_ packWARN(WARN_MISC),
2173 "Applying %s to %s will act on scalar(%s)",
2174 desc, sample, sample);
2177 if (rtype == OP_CONST &&
2178 cSVOPx(right)->op_private & OPpCONST_BARE &&
2179 cSVOPx(right)->op_private & OPpCONST_STRICT)
2181 no_bareword_allowed(right);
2184 ismatchop = rtype == OP_MATCH ||
2185 rtype == OP_SUBST ||
2187 if (ismatchop && right->op_private & OPpTARGET_MY) {
2189 right->op_private &= ~OPpTARGET_MY;
2191 if (!(right->op_flags & OPf_STACKED) && ismatchop) {
2194 right->op_flags |= OPf_STACKED;
2195 if (rtype != OP_MATCH &&
2196 ! (rtype == OP_TRANS &&
2197 right->op_private & OPpTRANS_IDENTICAL))
2198 newleft = mod(left, rtype);
2201 if (right->op_type == OP_TRANS)
2202 o = newBINOP(OP_NULL, OPf_STACKED, scalar(newleft), right);
2204 o = prepend_elem(rtype, scalar(newleft), right);
2206 return newUNOP(OP_NOT, 0, scalar(o));
2210 return bind_match(type, left,
2211 pmruntime(newPMOP(OP_MATCH, 0), right, 0));
2215 Perl_invert(pTHX_ OP *o)
2219 return newUNOP(OP_NOT, OPf_SPECIAL, scalar(o));
2223 Perl_scope(pTHX_ OP *o)
2227 if (o->op_flags & OPf_PARENS || PERLDB_NOOPT || PL_tainting) {
2228 o = prepend_elem(OP_LINESEQ, newOP(OP_ENTER, 0), o);
2229 o->op_type = OP_LEAVE;
2230 o->op_ppaddr = PL_ppaddr[OP_LEAVE];
2232 else if (o->op_type == OP_LINESEQ) {
2234 o->op_type = OP_SCOPE;
2235 o->op_ppaddr = PL_ppaddr[OP_SCOPE];
2236 kid = ((LISTOP*)o)->op_first;
2237 if (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) {
2240 /* The following deals with things like 'do {1 for 1}' */
2241 kid = kid->op_sibling;
2243 (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE))
2248 o = newLISTOP(OP_SCOPE, 0, o, NULL);
2254 Perl_block_start(pTHX_ int full)
2257 const int retval = PL_savestack_ix;
2258 pad_block_start(full);
2260 PL_hints &= ~HINT_BLOCK_SCOPE;
2261 SAVECOMPILEWARNINGS();
2262 PL_compiling.cop_warnings = DUP_WARNINGS(PL_compiling.cop_warnings);
2267 Perl_block_end(pTHX_ I32 floor, OP *seq)
2270 const int needblockscope = PL_hints & HINT_BLOCK_SCOPE;
2271 OP* const retval = scalarseq(seq);
2273 CopHINTS_set(&PL_compiling, PL_hints);
2275 PL_hints |= HINT_BLOCK_SCOPE; /* propagate out */
2284 const PADOFFSET offset = pad_findmy("$_");
2285 if (offset == NOT_IN_PAD || PAD_COMPNAME_FLAGS_isOUR(offset)) {
2286 return newSVREF(newGVOP(OP_GV, 0, PL_defgv));
2289 OP * const o = newOP(OP_PADSV, 0);
2290 o->op_targ = offset;
2296 Perl_newPROG(pTHX_ OP *o)
2300 PERL_ARGS_ASSERT_NEWPROG;
2305 PL_eval_root = newUNOP(OP_LEAVEEVAL,
2306 ((PL_in_eval & EVAL_KEEPERR)
2307 ? OPf_SPECIAL : 0), o);
2308 PL_eval_start = linklist(PL_eval_root);
2309 PL_eval_root->op_private |= OPpREFCOUNTED;
2310 OpREFCNT_set(PL_eval_root, 1);
2311 PL_eval_root->op_next = 0;
2312 CALL_PEEP(PL_eval_start);
2315 if (o->op_type == OP_STUB) {
2316 PL_comppad_name = 0;
2318 S_op_destroy(aTHX_ o);
2321 PL_main_root = scope(sawparens(scalarvoid(o)));
2322 PL_curcop = &PL_compiling;
2323 PL_main_start = LINKLIST(PL_main_root);
2324 PL_main_root->op_private |= OPpREFCOUNTED;
2325 OpREFCNT_set(PL_main_root, 1);
2326 PL_main_root->op_next = 0;
2327 CALL_PEEP(PL_main_start);
2330 /* Register with debugger */
2332 CV * const cv = get_cvs("DB::postponed", 0);
2336 XPUSHs(MUTABLE_SV(CopFILEGV(&PL_compiling)));
2338 call_sv(MUTABLE_SV(cv), G_DISCARD);
2345 Perl_localize(pTHX_ OP *o, I32 lex)
2349 PERL_ARGS_ASSERT_LOCALIZE;
2351 if (o->op_flags & OPf_PARENS)
2352 /* [perl #17376]: this appears to be premature, and results in code such as
2353 C< our(%x); > executing in list mode rather than void mode */
2360 if ( PL_parser->bufptr > PL_parser->oldbufptr
2361 && PL_parser->bufptr[-1] == ','
2362 && ckWARN(WARN_PARENTHESIS))
2364 char *s = PL_parser->bufptr;
2367 /* some heuristics to detect a potential error */
2368 while (*s && (strchr(", \t\n", *s)))
2372 if (*s && strchr("@$%*", *s) && *++s
2373 && (isALNUM(*s) || UTF8_IS_CONTINUED(*s))) {
2376 while (*s && (isALNUM(*s) || UTF8_IS_CONTINUED(*s)))
2378 while (*s && (strchr(", \t\n", *s)))
2384 if (sigil && (*s == ';' || *s == '=')) {
2385 Perl_warner(aTHX_ packWARN(WARN_PARENTHESIS),
2386 "Parentheses missing around \"%s\" list",
2388 ? (PL_parser->in_my == KEY_our
2390 : PL_parser->in_my == KEY_state
2400 o = mod(o, OP_NULL); /* a bit kludgey */
2401 PL_parser->in_my = FALSE;
2402 PL_parser->in_my_stash = NULL;
2407 Perl_jmaybe(pTHX_ OP *o)
2409 PERL_ARGS_ASSERT_JMAYBE;
2411 if (o->op_type == OP_LIST) {
2413 = newSVREF(newGVOP(OP_GV, 0, gv_fetchpvs(";", GV_ADD|GV_NOTQUAL, SVt_PV)));
2414 o = convert(OP_JOIN, 0, prepend_elem(OP_LIST, o2, o));
2420 S_fold_constants(pTHX_ register OP *o)
2423 register OP * VOL curop;
2425 VOL I32 type = o->op_type;
2430 SV * const oldwarnhook = PL_warnhook;
2431 SV * const olddiehook = PL_diehook;
2435 PERL_ARGS_ASSERT_FOLD_CONSTANTS;
2437 if (PL_opargs[type] & OA_RETSCALAR)
2439 if (PL_opargs[type] & OA_TARGET && !o->op_targ)
2440 o->op_targ = pad_alloc(type, SVs_PADTMP);
2442 /* integerize op, unless it happens to be C<-foo>.
2443 * XXX should pp_i_negate() do magic string negation instead? */
2444 if ((PL_opargs[type] & OA_OTHERINT) && (PL_hints & HINT_INTEGER)
2445 && !(type == OP_NEGATE && cUNOPo->op_first->op_type == OP_CONST
2446 && (cUNOPo->op_first->op_private & OPpCONST_BARE)))
2448 o->op_ppaddr = PL_ppaddr[type = ++(o->op_type)];
2451 if (!(PL_opargs[type] & OA_FOLDCONST))
2456 /* XXX might want a ck_negate() for this */
2457 cUNOPo->op_first->op_private &= ~OPpCONST_STRICT;
2468 /* XXX what about the numeric ops? */
2469 if (PL_hints & HINT_LOCALE)
2474 if (PL_parser && PL_parser->error_count)
2475 goto nope; /* Don't try to run w/ errors */
2477 for (curop = LINKLIST(o); curop != o; curop = LINKLIST(curop)) {
2478 const OPCODE type = curop->op_type;
2479 if ((type != OP_CONST || (curop->op_private & OPpCONST_BARE)) &&
2481 type != OP_SCALAR &&
2483 type != OP_PUSHMARK)
2489 curop = LINKLIST(o);
2490 old_next = o->op_next;
2494 oldscope = PL_scopestack_ix;
2495 create_eval_scope(G_FAKINGEVAL);
2497 /* Verify that we don't need to save it: */
2498 assert(PL_curcop == &PL_compiling);
2499 StructCopy(&PL_compiling, ¬_compiling, COP);
2500 PL_curcop = ¬_compiling;
2501 /* The above ensures that we run with all the correct hints of the
2502 currently compiling COP, but that IN_PERL_RUNTIME is not true. */
2503 assert(IN_PERL_RUNTIME);
2504 PL_warnhook = PERL_WARNHOOK_FATAL;
2511 sv = *(PL_stack_sp--);
2512 if (o->op_targ && sv == PAD_SV(o->op_targ)) /* grab pad temp? */
2513 pad_swipe(o->op_targ, FALSE);
2514 else if (SvTEMP(sv)) { /* grab mortal temp? */
2515 SvREFCNT_inc_simple_void(sv);
2520 /* Something tried to die. Abandon constant folding. */
2521 /* Pretend the error never happened. */
2523 o->op_next = old_next;
2527 /* Don't expect 1 (setjmp failed) or 2 (something called my_exit) */
2528 PL_warnhook = oldwarnhook;
2529 PL_diehook = olddiehook;
2530 /* XXX note that this croak may fail as we've already blown away
2531 * the stack - eg any nested evals */
2532 Perl_croak(aTHX_ "panic: fold_constants JMPENV_PUSH returned %d", ret);
2535 PL_warnhook = oldwarnhook;
2536 PL_diehook = olddiehook;
2537 PL_curcop = &PL_compiling;
2539 if (PL_scopestack_ix > oldscope)
2540 delete_eval_scope();
2549 if (type == OP_RV2GV)
2550 newop = newGVOP(OP_GV, 0, MUTABLE_GV(sv));
2552 newop = newSVOP(OP_CONST, 0, MUTABLE_SV(sv));
2553 op_getmad(o,newop,'f');
2561 S_gen_constant_list(pTHX_ register OP *o)
2565 const I32 oldtmps_floor = PL_tmps_floor;
2568 if (PL_parser && PL_parser->error_count)
2569 return o; /* Don't attempt to run with errors */
2571 PL_op = curop = LINKLIST(o);
2577 assert (!(curop->op_flags & OPf_SPECIAL));
2578 assert(curop->op_type == OP_RANGE);
2580 PL_tmps_floor = oldtmps_floor;
2582 o->op_type = OP_RV2AV;
2583 o->op_ppaddr = PL_ppaddr[OP_RV2AV];
2584 o->op_flags &= ~OPf_REF; /* treat \(1..2) like an ordinary list */
2585 o->op_flags |= OPf_PARENS; /* and flatten \(1..2,3) */
2586 o->op_opt = 0; /* needs to be revisited in peep() */
2587 curop = ((UNOP*)o)->op_first;
2588 ((UNOP*)o)->op_first = newSVOP(OP_CONST, 0, SvREFCNT_inc_NN(*PL_stack_sp--));
2590 op_getmad(curop,o,'O');
2599 Perl_convert(pTHX_ I32 type, I32 flags, OP *o)
2602 if (!o || o->op_type != OP_LIST)
2603 o = newLISTOP(OP_LIST, 0, o, NULL);
2605 o->op_flags &= ~OPf_WANT;
2607 if (!(PL_opargs[type] & OA_MARK))
2608 op_null(cLISTOPo->op_first);
2610 o->op_type = (OPCODE)type;
2611 o->op_ppaddr = PL_ppaddr[type];
2612 o->op_flags |= flags;
2614 o = CHECKOP(type, o);
2615 if (o->op_type != (unsigned)type)
2618 return fold_constants(o);
2621 /* List constructors */
2624 Perl_append_elem(pTHX_ I32 type, OP *first, OP *last)
2632 if (first->op_type != (unsigned)type
2633 || (type == OP_LIST && (first->op_flags & OPf_PARENS)))
2635 return newLISTOP(type, 0, first, last);
2638 if (first->op_flags & OPf_KIDS)
2639 ((LISTOP*)first)->op_last->op_sibling = last;
2641 first->op_flags |= OPf_KIDS;
2642 ((LISTOP*)first)->op_first = last;
2644 ((LISTOP*)first)->op_last = last;
2649 Perl_append_list(pTHX_ I32 type, LISTOP *first, LISTOP *last)
2657 if (first->op_type != (unsigned)type)
2658 return prepend_elem(type, (OP*)first, (OP*)last);
2660 if (last->op_type != (unsigned)type)
2661 return append_elem(type, (OP*)first, (OP*)last);
2663 first->op_last->op_sibling = last->op_first;
2664 first->op_last = last->op_last;
2665 first->op_flags |= (last->op_flags & OPf_KIDS);
2668 if (last->op_first && first->op_madprop) {
2669 MADPROP *mp = last->op_first->op_madprop;
2671 while (mp->mad_next)
2673 mp->mad_next = first->op_madprop;
2676 last->op_first->op_madprop = first->op_madprop;
2679 first->op_madprop = last->op_madprop;
2680 last->op_madprop = 0;
2683 S_op_destroy(aTHX_ (OP*)last);
2689 Perl_prepend_elem(pTHX_ I32 type, OP *first, OP *last)
2697 if (last->op_type == (unsigned)type) {
2698 if (type == OP_LIST) { /* already a PUSHMARK there */
2699 first->op_sibling = ((LISTOP*)last)->op_first->op_sibling;
2700 ((LISTOP*)last)->op_first->op_sibling = first;
2701 if (!(first->op_flags & OPf_PARENS))
2702 last->op_flags &= ~OPf_PARENS;
2705 if (!(last->op_flags & OPf_KIDS)) {
2706 ((LISTOP*)last)->op_last = first;
2707 last->op_flags |= OPf_KIDS;
2709 first->op_sibling = ((LISTOP*)last)->op_first;
2710 ((LISTOP*)last)->op_first = first;
2712 last->op_flags |= OPf_KIDS;
2716 return newLISTOP(type, 0, first, last);
2724 Perl_newTOKEN(pTHX_ I32 optype, YYSTYPE lval, MADPROP* madprop)
2727 Newxz(tk, 1, TOKEN);
2728 tk->tk_type = (OPCODE)optype;
2729 tk->tk_type = 12345;
2731 tk->tk_mad = madprop;
2736 Perl_token_free(pTHX_ TOKEN* tk)
2738 PERL_ARGS_ASSERT_TOKEN_FREE;
2740 if (tk->tk_type != 12345)
2742 mad_free(tk->tk_mad);
2747 Perl_token_getmad(pTHX_ TOKEN* tk, OP* o, char slot)
2752 PERL_ARGS_ASSERT_TOKEN_GETMAD;
2754 if (tk->tk_type != 12345) {
2755 Perl_warner(aTHX_ packWARN(WARN_MISC),
2756 "Invalid TOKEN object ignored");
2763 /* faked up qw list? */
2765 tm->mad_type == MAD_SV &&
2766 SvPVX((SV *)tm->mad_val)[0] == 'q')
2773 /* pretend constant fold didn't happen? */
2774 if (mp->mad_key == 'f' &&
2775 (o->op_type == OP_CONST ||
2776 o->op_type == OP_GV) )
2778 token_getmad(tk,(OP*)mp->mad_val,slot);
2792 if (mp->mad_key == 'X')
2793 mp->mad_key = slot; /* just change the first one */
2803 Perl_op_getmad_weak(pTHX_ OP* from, OP* o, char slot)
2812 /* pretend constant fold didn't happen? */
2813 if (mp->mad_key == 'f' &&
2814 (o->op_type == OP_CONST ||
2815 o->op_type == OP_GV) )
2817 op_getmad(from,(OP*)mp->mad_val,slot);
2824 mp->mad_next = newMADPROP(slot,MAD_OP,from,0);
2827 o->op_madprop = newMADPROP(slot,MAD_OP,from,0);
2833 Perl_op_getmad(pTHX_ OP* from, OP* o, char slot)
2842 /* pretend constant fold didn't happen? */
2843 if (mp->mad_key == 'f' &&
2844 (o->op_type == OP_CONST ||
2845 o->op_type == OP_GV) )
2847 op_getmad(from,(OP*)mp->mad_val,slot);
2854 mp->mad_next = newMADPROP(slot,MAD_OP,from,1);
2857 o->op_madprop = newMADPROP(slot,MAD_OP,from,1);
2861 PerlIO_printf(PerlIO_stderr(),
2862 "DESTROYING op = %0"UVxf"\n", PTR2UV(from));
2868 Perl_prepend_madprops(pTHX_ MADPROP* mp, OP* o, char slot)
2886 Perl_append_madprops(pTHX_ MADPROP* tm, OP* o, char slot)
2890 addmad(tm, &(o->op_madprop), slot);
2894 Perl_addmad(pTHX_ MADPROP* tm, MADPROP** root, char slot)
2915 Perl_newMADsv(pTHX_ char key, SV* sv)
2917 PERL_ARGS_ASSERT_NEWMADSV;
2919 return newMADPROP(key, MAD_SV, sv, 0);
2923 Perl_newMADPROP(pTHX_ char key, char type, void* val, I32 vlen)
2926 Newxz(mp, 1, MADPROP);
2929 mp->mad_vlen = vlen;
2930 mp->mad_type = type;
2932 /* PerlIO_printf(PerlIO_stderr(), "NEW mp = %0x\n", mp); */
2937 Perl_mad_free(pTHX_ MADPROP* mp)
2939 /* PerlIO_printf(PerlIO_stderr(), "FREE mp = %0x\n", mp); */
2943 mad_free(mp->mad_next);
2944 /* if (PL_parser && PL_parser->lex_state != LEX_NOTPARSING && mp->mad_vlen)
2945 PerlIO_printf(PerlIO_stderr(), "DESTROYING '%c'=<%s>\n", mp->mad_key & 255, mp->mad_val); */
2946 switch (mp->mad_type) {
2950 Safefree((char*)mp->mad_val);
2953 if (mp->mad_vlen) /* vlen holds "strong/weak" boolean */
2954 op_free((OP*)mp->mad_val);
2957 sv_free(MUTABLE_SV(mp->mad_val));
2960 PerlIO_printf(PerlIO_stderr(), "Unrecognized mad\n");
2969 Perl_newNULLLIST(pTHX)
2971 return newOP(OP_STUB, 0);
2975 S_force_list(pTHX_ OP *o)
2977 if (!o || o->op_type != OP_LIST)
2978 o = newLISTOP(OP_LIST, 0, o, NULL);
2984 Perl_newLISTOP(pTHX_ I32 type, I32 flags, OP *first, OP *last)
2989 NewOp(1101, listop, 1, LISTOP);
2991 listop->op_type = (OPCODE)type;
2992 listop->op_ppaddr = PL_ppaddr[type];
2995 listop->op_flags = (U8)flags;
2999 else if (!first && last)
3002 first->op_sibling = last;
3003 listop->op_first = first;
3004 listop->op_last = last;
3005 if (type == OP_LIST) {
3006 OP* const pushop = newOP(OP_PUSHMARK, 0);
3007 pushop->op_sibling = first;
3008 listop->op_first = pushop;
3009 listop->op_flags |= OPf_KIDS;
3011 listop->op_last = pushop;
3014 return CHECKOP(type, listop);
3018 Perl_newOP(pTHX_ I32 type, I32 flags)
3022 NewOp(1101, o, 1, OP);
3023 o->op_type = (OPCODE)type;
3024 o->op_ppaddr = PL_ppaddr[type];
3025 o->op_flags = (U8)flags;
3027 o->op_latefreed = 0;
3031 o->op_private = (U8)(0 | (flags >> 8));
3032 if (PL_opargs[type] & OA_RETSCALAR)
3034 if (PL_opargs[type] & OA_TARGET)
3035 o->op_targ = pad_alloc(type, SVs_PADTMP);
3036 return CHECKOP(type, o);
3040 Perl_newUNOP(pTHX_ I32 type, I32 flags, OP *first)
3046 first = newOP(OP_STUB, 0);
3047 if (PL_opargs[type] & OA_MARK)
3048 first = force_list(first);
3050 NewOp(1101, unop, 1, UNOP);
3051 unop->op_type = (OPCODE)type;
3052 unop->op_ppaddr = PL_ppaddr[type];
3053 unop->op_first = first;
3054 unop->op_flags = (U8)(flags | OPf_KIDS);
3055 unop->op_private = (U8)(1 | (flags >> 8));
3056 unop = (UNOP*) CHECKOP(type, unop);
3060 return fold_constants((OP *) unop);
3064 Perl_newBINOP(pTHX_ I32 type, I32 flags, OP *first, OP *last)
3068 NewOp(1101, binop, 1, BINOP);
3071 first = newOP(OP_NULL, 0);
3073 binop->op_type = (OPCODE)type;
3074 binop->op_ppaddr = PL_ppaddr[type];
3075 binop->op_first = first;
3076 binop->op_flags = (U8)(flags | OPf_KIDS);
3079 binop->op_private = (U8)(1 | (flags >> 8));
3082 binop->op_private = (U8)(2 | (flags >> 8));
3083 first->op_sibling = last;
3086 binop = (BINOP*)CHECKOP(type, binop);
3087 if (binop->op_next || binop->op_type != (OPCODE)type)
3090 binop->op_last = binop->op_first->op_sibling;
3092 return fold_constants((OP *)binop);
3095 static int uvcompare(const void *a, const void *b)
3096 __attribute__nonnull__(1)
3097 __attribute__nonnull__(2)
3098 __attribute__pure__;
3099 static int uvcompare(const void *a, const void *b)
3101 if (*((const UV *)a) < (*(const UV *)b))
3103 if (*((const UV *)a) > (*(const UV *)b))
3105 if (*((const UV *)a+1) < (*(const UV *)b+1))
3107 if (*((const UV *)a+1) > (*(const UV *)b+1))
3113 S_pmtrans(pTHX_ OP *o, OP *expr, OP *repl)
3116 SV * const tstr = ((SVOP*)expr)->op_sv;
3119 (repl->op_type == OP_NULL)
3120 ? ((SVOP*)((LISTOP*)repl)->op_first)->op_sv :
3122 ((SVOP*)repl)->op_sv;
3125 const U8 *t = (U8*)SvPV_const(tstr, tlen);
3126 const U8 *r = (U8*)SvPV_const(rstr, rlen);
3130 register short *tbl;
3132 const I32 complement = o->op_private & OPpTRANS_COMPLEMENT;
3133 const I32 squash = o->op_private & OPpTRANS_SQUASH;
3134 I32 del = o->op_private & OPpTRANS_DELETE;
3137 PERL_ARGS_ASSERT_PMTRANS;
3139 PL_hints |= HINT_BLOCK_SCOPE;
3142 o->op_private |= OPpTRANS_FROM_UTF;
3145 o->op_private |= OPpTRANS_TO_UTF;
3147 if (o->op_private & (OPpTRANS_FROM_UTF|OPpTRANS_TO_UTF)) {
3148 SV* const listsv = newSVpvs("# comment\n");
3150 const U8* tend = t + tlen;
3151 const U8* rend = r + rlen;
3165 const I32 from_utf = o->op_private & OPpTRANS_FROM_UTF;
3166 const I32 to_utf = o->op_private & OPpTRANS_TO_UTF;
3169 const U32 flags = UTF8_ALLOW_DEFAULT;
3173 t = tsave = bytes_to_utf8(t, &len);
3176 if (!to_utf && rlen) {
3178 r = rsave = bytes_to_utf8(r, &len);
3182 /* There are several snags with this code on EBCDIC:
3183 1. 0xFF is a legal UTF-EBCDIC byte (there are no illegal bytes).
3184 2. scan_const() in toke.c has encoded chars in native encoding which makes
3185 ranges at least in EBCDIC 0..255 range the bottom odd.
3189 U8 tmpbuf[UTF8_MAXBYTES+1];
3192 Newx(cp, 2*tlen, UV);
3194 transv = newSVpvs("");
3196 cp[2*i] = utf8n_to_uvuni(t, tend-t, &ulen, flags);
3198 if (t < tend && NATIVE_TO_UTF(*t) == 0xff) {
3200 cp[2*i+1] = utf8n_to_uvuni(t, tend-t, &ulen, flags);
3204 cp[2*i+1] = cp[2*i];
3208 qsort(cp, i, 2*sizeof(UV), uvcompare);
3209 for (j = 0; j < i; j++) {
3211 diff = val - nextmin;
3213 t = uvuni_to_utf8(tmpbuf,nextmin);
3214 sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf);
3216 U8 range_mark = UTF_TO_NATIVE(0xff);
3217 t = uvuni_to_utf8(tmpbuf, val - 1);
3218 sv_catpvn(transv, (char *)&range_mark, 1);
3219 sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf);
3226 t = uvuni_to_utf8(tmpbuf,nextmin);
3227 sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf);
3229 U8 range_mark = UTF_TO_NATIVE(0xff);
3230 sv_catpvn(transv, (char *)&range_mark, 1);
3232 t = uvuni_to_utf8_flags(tmpbuf, 0x7fffffff,
3233 UNICODE_ALLOW_SUPER);
3234 sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf);
3235 t = (const U8*)SvPVX_const(transv);
3236 tlen = SvCUR(transv);
3240 else if (!rlen && !del) {
3241 r = t; rlen = tlen; rend = tend;
3244 if ((!rlen && !del) || t == r ||
3245 (tlen == rlen && memEQ((char *)t, (char *)r, tlen)))
3247 o->op_private |= OPpTRANS_IDENTICAL;
3251 while (t < tend || tfirst <= tlast) {
3252 /* see if we need more "t" chars */
3253 if (tfirst > tlast) {
3254 tfirst = (I32)utf8n_to_uvuni(t, tend - t, &ulen, flags);
3256 if (t < tend && NATIVE_TO_UTF(*t) == 0xff) { /* illegal utf8 val indicates range */
3258 tlast = (I32)utf8n_to_uvuni(t, tend - t, &ulen, flags);
3265 /* now see if we need more "r" chars */
3266 if (rfirst > rlast) {
3268 rfirst = (I32)utf8n_to_uvuni(r, rend - r, &ulen, flags);
3270 if (r < rend && NATIVE_TO_UTF(*r) == 0xff) { /* illegal utf8 val indicates range */
3272 rlast = (I32)utf8n_to_uvuni(r, rend - r, &ulen, flags);
3281 rfirst = rlast = 0xffffffff;
3285 /* now see which range will peter our first, if either. */
3286 tdiff = tlast - tfirst;
3287 rdiff = rlast - rfirst;
3294 if (rfirst == 0xffffffff) {
3295 diff = tdiff; /* oops, pretend rdiff is infinite */
3297 Perl_sv_catpvf(aTHX_ listsv, "%04lx\t%04lx\tXXXX\n",
3298 (long)tfirst, (long)tlast);
3300 Perl_sv_catpvf(aTHX_ listsv, "%04lx\t\tXXXX\n", (long)tfirst);
3304 Perl_sv_catpvf(aTHX_ listsv, "%04lx\t%04lx\t%04lx\n",
3305 (long)tfirst, (long)(tfirst + diff),
3308 Perl_sv_catpvf(aTHX_ listsv, "%04lx\t\t%04lx\n",
3309 (long)tfirst, (long)rfirst);
3311 if (rfirst + diff > max)
3312 max = rfirst + diff;
3314 grows = (tfirst < rfirst &&
3315 UNISKIP(tfirst) < UNISKIP(rfirst + diff));
3327 else if (max > 0xff)
3332 PerlMemShared_free(cPVOPo->op_pv);
3333 cPVOPo->op_pv = NULL;
3335 swash = MUTABLE_SV(swash_init("utf8", "", listsv, bits, none));
3337 cPADOPo->op_padix = pad_alloc(OP_TRANS, SVs_PADTMP);
3338 SvREFCNT_dec(PAD_SVl(cPADOPo->op_padix));
3339 PAD_SETSV(cPADOPo->op_padix, swash);
3341 SvREADONLY_on(swash);
3343 cSVOPo->op_sv = swash;
3345 SvREFCNT_dec(listsv);
3346 SvREFCNT_dec(transv);
3348 if (!del && havefinal && rlen)
3349 (void)hv_store(MUTABLE_HV(SvRV(swash)), "FINAL", 5,
3350 newSVuv((UV)final), 0);
3353 o->op_private |= OPpTRANS_GROWS;
3359 op_getmad(expr,o,'e');
3360 op_getmad(repl,o,'r');
3368 tbl = (short*)cPVOPo->op_pv;
3370 Zero(tbl, 256, short);
3371 for (i = 0; i < (I32)tlen; i++)
3373 for (i = 0, j = 0; i < 256; i++) {
3375 if (j >= (I32)rlen) {
3384 if (i < 128 && r[j] >= 128)
3394 o->op_private |= OPpTRANS_IDENTICAL;
3396 else if (j >= (I32)rlen)
3401 PerlMemShared_realloc(tbl,
3402 (0x101+rlen-j) * sizeof(short));
3403 cPVOPo->op_pv = (char*)tbl;
3405 tbl[0x100] = (short)(rlen - j);
3406 for (i=0; i < (I32)rlen - j; i++)
3407 tbl[0x101+i] = r[j+i];
3411 if (!rlen && !del) {
3414 o->op_private |= OPpTRANS_IDENTICAL;
3416 else if (!squash && rlen == tlen && memEQ((char*)t, (char*)r, tlen)) {
3417 o->op_private |= OPpTRANS_IDENTICAL;
3419 for (i = 0; i < 256; i++)
3421 for (i = 0, j = 0; i < (I32)tlen; i++,j++) {
3422 if (j >= (I32)rlen) {
3424 if (tbl[t[i]] == -1)
3430 if (tbl[t[i]] == -1) {
3431 if (t[i] < 128 && r[j] >= 128)
3438 if(del && rlen == tlen) {
3439 Perl_ck_warner(aTHX_ packWARN(WARN_MISC), "Useless use of /d modifier in transliteration operator");
3440 } else if(rlen > tlen) {
3441 Perl_ck_warner(aTHX_ packWARN(WARN_MISC), "Replacement list is longer than search list");
3445 o->op_private |= OPpTRANS_GROWS;
3447 op_getmad(expr,o,'e');
3448 op_getmad(repl,o,'r');
3458 Perl_newPMOP(pTHX_ I32 type, I32 flags)
3463 NewOp(1101, pmop, 1, PMOP);
3464 pmop->op_type = (OPCODE)type;
3465 pmop->op_ppaddr = PL_ppaddr[type];
3466 pmop->op_flags = (U8)flags;
3467 pmop->op_private = (U8)(0 | (flags >> 8));
3469 if (PL_hints & HINT_RE_TAINT)
3470 pmop->op_pmflags |= PMf_RETAINT;
3471 if (PL_hints & HINT_LOCALE)
3472 pmop->op_pmflags |= PMf_LOCALE;
3476 assert(SvPOK(PL_regex_pad[0]));
3477 if (SvCUR(PL_regex_pad[0])) {
3478 /* Pop off the "packed" IV from the end. */
3479 SV *const repointer_list = PL_regex_pad[0];
3480 const char *p = SvEND(repointer_list) - sizeof(IV);
3481 const IV offset = *((IV*)p);
3483 assert(SvCUR(repointer_list) % sizeof(IV) == 0);
3485 SvEND_set(repointer_list, p);
3487 pmop->op_pmoffset = offset;
3488 /* This slot should be free, so assert this: */
3489 assert(PL_regex_pad[offset] == &PL_sv_undef);
3491 SV * const repointer = &PL_sv_undef;
3492 av_push(PL_regex_padav, repointer);
3493 pmop->op_pmoffset = av_len(PL_regex_padav);
3494 PL_regex_pad = AvARRAY(PL_regex_padav);
3498 return CHECKOP(type, pmop);
3501 /* Given some sort of match op o, and an expression expr containing a
3502 * pattern, either compile expr into a regex and attach it to o (if it's
3503 * constant), or convert expr into a runtime regcomp op sequence (if it's
3506 * isreg indicates that the pattern is part of a regex construct, eg
3507 * $x =~ /pattern/ or split /pattern/, as opposed to $x =~ $pattern or
3508 * split "pattern", which aren't. In the former case, expr will be a list
3509 * if the pattern contains more than one term (eg /a$b/) or if it contains
3510 * a replacement, ie s/// or tr///.
3514 Perl_pmruntime(pTHX_ OP *o, OP *expr, bool isreg)
3519 I32 repl_has_vars = 0;
3523 PERL_ARGS_ASSERT_PMRUNTIME;
3525 if (o->op_type == OP_SUBST || o->op_type == OP_TRANS) {
3526 /* last element in list is the replacement; pop it */
3528 repl = cLISTOPx(expr)->op_last;
3529 kid = cLISTOPx(expr)->op_first;
3530 while (kid->op_sibling != repl)
3531 kid = kid->op_sibling;
3532 kid->op_sibling = NULL;
3533 cLISTOPx(expr)->op_last = kid;
3536 if (isreg && expr->op_type == OP_LIST &&
3537 cLISTOPx(expr)->op_first->op_sibling == cLISTOPx(expr)->op_last)
3539 /* convert single element list to element */
3540 OP* const oe = expr;
3541 expr = cLISTOPx(oe)->op_first->op_sibling;
3542 cLISTOPx(oe)->op_first->op_sibling = NULL;
3543 cLISTOPx(oe)->op_last = NULL;
3547 if (o->op_type == OP_TRANS) {
3548 return pmtrans(o, expr, repl);
3551 reglist = isreg && expr->op_type == OP_LIST;
3555 PL_hints |= HINT_BLOCK_SCOPE;
3558 if (expr->op_type == OP_CONST) {
3559 SV *pat = ((SVOP*)expr)->op_sv;
3560 U32 pm_flags = pm->op_pmflags & PMf_COMPILETIME;
3562 if (o->op_flags & OPf_SPECIAL)
3563 pm_flags |= RXf_SPLIT;
3566 assert (SvUTF8(pat));
3567 } else if (SvUTF8(pat)) {
3568 /* Not doing UTF-8, despite what the SV says. Is this only if we're
3569 trapped in use 'bytes'? */
3570 /* Make a copy of the octet sequence, but without the flag on, as
3571 the compiler now honours the SvUTF8 flag on pat. */
3573 const char *const p = SvPV(pat, len);
3574 pat = newSVpvn_flags(p, len, SVs_TEMP);
3577 PM_SETRE(pm, CALLREGCOMP(pat, pm_flags));
3580 op_getmad(expr,(OP*)pm,'e');
3586 if (pm->op_pmflags & PMf_KEEP || !(PL_hints & HINT_RE_EVAL))
3587 expr = newUNOP((!(PL_hints & HINT_RE_EVAL)
3589 : OP_REGCMAYBE),0,expr);
3591 NewOp(1101, rcop, 1, LOGOP);
3592 rcop->op_type = OP_REGCOMP;
3593 rcop->op_ppaddr = PL_ppaddr[OP_REGCOMP];
3594 rcop->op_first = scalar(expr);
3595 rcop->op_flags |= OPf_KIDS
3596 | ((PL_hints & HINT_RE_EVAL) ? OPf_SPECIAL : 0)
3597 | (reglist ? OPf_STACKED : 0);
3598 rcop->op_private = 1;
3601 rcop->op_targ = pad_alloc(rcop->op_type, SVs_PADTMP);
3603 /* /$x/ may cause an eval, since $x might be qr/(?{..})/ */
3606 /* establish postfix order */
3607 if (pm->op_pmflags & PMf_KEEP || !(PL_hints & HINT_RE_EVAL)) {
3609 rcop->op_next = expr;
3610 ((UNOP*)expr)->op_first->op_next = (OP*)rcop;
3613 rcop->op_next = LINKLIST(expr);
3614 expr->op_next = (OP*)rcop;
3617 prepend_elem(o->op_type, scalar((OP*)rcop), o);
3622 if (pm->op_pmflags & PMf_EVAL) {
3624 if (CopLINE(PL_curcop) < (line_t)PL_parser->multi_end)
3625 CopLINE_set(PL_curcop, (line_t)PL_parser->multi_end);
3627 else if (repl->op_type == OP_CONST)
3631 for (curop = LINKLIST(repl); curop!=repl; curop = LINKLIST(curop)) {
3632 if (curop->op_type == OP_SCOPE
3633 || curop->op_type == OP_LEAVE
3634 || (PL_opargs[curop->op_type] & OA_DANGEROUS)) {
3635 if (curop->op_type == OP_GV) {
3636 GV * const gv = cGVOPx_gv(curop);
3638 if (strchr("&`'123456789+-\016\022", *GvENAME(gv)))
3641 else if (curop->op_type == OP_RV2CV)
3643 else if (curop->op_type == OP_RV2SV ||
3644 curop->op_type == OP_RV2AV ||
3645 curop->op_type == OP_RV2HV ||
3646 curop->op_type == OP_RV2GV) {
3647 if (lastop && lastop->op_type != OP_GV) /*funny deref?*/
3650 else if (curop->op_type == OP_PADSV ||
3651 curop->op_type == OP_PADAV ||
3652 curop->op_type == OP_PADHV ||
3653 curop->op_type == OP_PADANY)
3657 else if (curop->op_type == OP_PUSHRE)
3658 NOOP; /* Okay here, dangerous in newASSIGNOP */
3668 || RX_EXTFLAGS(PM_GETRE(pm)) & RXf_EVAL_SEEN)))
3670 pm->op_pmflags |= PMf_CONST; /* const for long enough */
3671 prepend_elem(o->op_type, scalar(repl), o);
3674 if (curop == repl && !PM_GETRE(pm)) { /* Has variables. */
3675 pm->op_pmflags |= PMf_MAYBE_CONST;
3677 NewOp(1101, rcop, 1, LOGOP);
3678 rcop->op_type = OP_SUBSTCONT;
3679 rcop->op_ppaddr = PL_ppaddr[OP_SUBSTCONT];
3680 rcop->op_first = scalar(repl);
3681 rcop->op_flags |= OPf_KIDS;
3682 rcop->op_private = 1;
3685 /* establish postfix order */
3686 rcop->op_next = LINKLIST(repl);
3687 repl->op_next = (OP*)rcop;
3689 pm->op_pmreplrootu.op_pmreplroot = scalar((OP*)rcop);
3690 assert(!(pm->op_pmflags & PMf_ONCE));
3691 pm->op_pmstashstartu.op_pmreplstart = LINKLIST(rcop);
3700 Perl_newSVOP(pTHX_ I32 type, I32 flags, SV *sv)
3705 PERL_ARGS_ASSERT_NEWSVOP;
3707 NewOp(1101, svop, 1, SVOP);
3708 svop->op_type = (OPCODE)type;
3709 svop->op_ppaddr = PL_ppaddr[type];
3711 svop->op_next = (OP*)svop;
3712 svop->op_flags = (U8)flags;
3713 if (PL_opargs[type] & OA_RETSCALAR)
3715 if (PL_opargs[type] & OA_TARGET)
3716 svop->op_targ = pad_alloc(type, SVs_PADTMP);
3717 return CHECKOP(type, svop);
3722 Perl_newPADOP(pTHX_ I32 type, I32 flags, SV *sv)
3727 PERL_ARGS_ASSERT_NEWPADOP;
3729 NewOp(1101, padop, 1, PADOP);
3730 padop->op_type = (OPCODE)type;
3731 padop->op_ppaddr = PL_ppaddr[type];
3732 padop->op_padix = pad_alloc(type, SVs_PADTMP);
3733 SvREFCNT_dec(PAD_SVl(padop->op_padix));
3734 PAD_SETSV(padop->op_padix, sv);
3737 padop->op_next = (OP*)padop;
3738 padop->op_flags = (U8)flags;
3739 if (PL_opargs[type] & OA_RETSCALAR)
3741 if (PL_opargs[type] & OA_TARGET)
3742 padop->op_targ = pad_alloc(type, SVs_PADTMP);
3743 return CHECKOP(type, padop);
3748 Perl_newGVOP(pTHX_ I32 type, I32 flags, GV *gv)
3752 PERL_ARGS_ASSERT_NEWGVOP;
3756 return newPADOP(type, flags, SvREFCNT_inc_simple_NN(gv));
3758 return newSVOP(type, flags, SvREFCNT_inc_simple_NN(gv));
3763 Perl_newPVOP(pTHX_ I32 type, I32 flags, char *pv)
3767 NewOp(1101, pvop, 1, PVOP);
3768 pvop->op_type = (OPCODE)type;
3769 pvop->op_ppaddr = PL_ppaddr[type];
3771 pvop->op_next = (OP*)pvop;
3772 pvop->op_flags = (U8)flags;
3773 if (PL_opargs[type] & OA_RETSCALAR)
3775 if (PL_opargs[type] & OA_TARGET)
3776 pvop->op_targ = pad_alloc(type, SVs_PADTMP);
3777 return CHECKOP(type, pvop);
3785 Perl_package(pTHX_ OP *o)
3788 SV *const sv = cSVOPo->op_sv;
3793 PERL_ARGS_ASSERT_PACKAGE;
3795 save_hptr(&PL_curstash);
3796 save_item(PL_curstname);
3798 PL_curstash = gv_stashsv(sv, GV_ADD);
3800 sv_setsv(PL_curstname, sv);
3802 PL_hints |= HINT_BLOCK_SCOPE;
3803 PL_parser->copline = NOLINE;
3804 PL_parser->expect = XSTATE;
3809 if (!PL_madskills) {
3814 pegop = newOP(OP_NULL,0);
3815 op_getmad(o,pegop,'P');
3821 Perl_package_version( pTHX_ OP *v )
3824 U32 savehints = PL_hints;
3825 PERL_ARGS_ASSERT_PACKAGE_VERSION;
3826 PL_hints &= ~HINT_STRICT_VARS;
3827 sv_setsv( GvSV(gv_fetchpvs("VERSION", GV_ADDMULTI, SVt_PV)), cSVOPx(v)->op_sv );
3828 PL_hints = savehints;
3837 Perl_utilize(pTHX_ int aver, I32 floor, OP *version, OP *idop, OP *arg)
3844 OP *pegop = newOP(OP_NULL,0);
3847 PERL_ARGS_ASSERT_UTILIZE;
3849 if (idop->op_type != OP_CONST)
3850 Perl_croak(aTHX_ "Module name must be constant");
3853 op_getmad(idop,pegop,'U');
3858 SV * const vesv = ((SVOP*)version)->op_sv;
3861 op_getmad(version,pegop,'V');
3862 if (!arg && !SvNIOKp(vesv)) {
3869 if (version->op_type != OP_CONST || !SvNIOKp(vesv))
3870 Perl_croak(aTHX_ "Version number must be a constant number");
3872 /* Make copy of idop so we don't free it twice */
3873 pack = newSVOP(OP_CONST, 0, newSVsv(((SVOP*)idop)->op_sv));
3875 /* Fake up a method call to VERSION */
3876 meth = newSVpvs_share("VERSION");
3877 veop = convert(OP_ENTERSUB, OPf_STACKED|OPf_SPECIAL,
3878 append_elem(OP_LIST,
3879 prepend_elem(OP_LIST, pack, list(version)),
3880 newSVOP(OP_METHOD_NAMED, 0, meth)));
3884 /* Fake up an import/unimport */
3885 if (arg && arg->op_type == OP_STUB) {
3887 op_getmad(arg,pegop,'S');
3888 imop = arg; /* no import on explicit () */
3890 else if (SvNIOKp(((SVOP*)idop)->op_sv)) {
3891 imop = NULL; /* use 5.0; */
3893 idop->op_private |= OPpCONST_NOVER;
3899 op_getmad(arg,pegop,'A');
3901 /* Make copy of idop so we don't free it twice */
3902 pack = newSVOP(OP_CONST, 0, newSVsv(((SVOP*)idop)->op_sv));
3904 /* Fake up a method call to import/unimport */
3906 ? newSVpvs_share("import") : newSVpvs_share("unimport");
3907 imop = convert(OP_ENTERSUB, OPf_STACKED|OPf_SPECIAL,
3908 append_elem(OP_LIST,
3909 prepend_elem(OP_LIST, pack, list(arg)),
3910 newSVOP(OP_METHOD_NAMED, 0, meth)));
3913 /* Fake up the BEGIN {}, which does its thing immediately. */
3915 newSVOP(OP_CONST, 0, newSVpvs_share("BEGIN")),
3918 append_elem(OP_LINESEQ,
3919 append_elem(OP_LINESEQ,
3920 newSTATEOP(0, NULL, newUNOP(OP_REQUIRE, 0, idop)),
3921 newSTATEOP(0, NULL, veop)),
3922 newSTATEOP(0, NULL, imop) ));
3924 /* The "did you use incorrect case?" warning used to be here.
3925 * The problem is that on case-insensitive filesystems one
3926 * might get false positives for "use" (and "require"):
3927 * "use Strict" or "require CARP" will work. This causes
3928 * portability problems for the script: in case-strict
3929 * filesystems the script will stop working.
3931 * The "incorrect case" warning checked whether "use Foo"
3932 * imported "Foo" to your namespace, but that is wrong, too:
3933 * there is no requirement nor promise in the language that
3934 * a Foo.pm should or would contain anything in package "Foo".
3936 * There is very little Configure-wise that can be done, either:
3937 * the case-sensitivity of the build filesystem of Perl does not
3938 * help in guessing the case-sensitivity of the runtime environment.
3941 PL_hints |= HINT_BLOCK_SCOPE;
3942 PL_parser->copline = NOLINE;
3943 PL_parser->expect = XSTATE;
3944 PL_cop_seqmax++; /* Purely for B::*'s benefit */
3947 if (!PL_madskills) {
3948 /* FIXME - don't allocate pegop if !PL_madskills */
3957 =head1 Embedding Functions
3959 =for apidoc load_module
3961 Loads the module whose name is pointed to by the string part of name.
3962 Note that the actual module name, not its filename, should be given.
3963 Eg, "Foo::Bar" instead of "Foo/Bar.pm". flags can be any of
3964 PERL_LOADMOD_DENY, PERL_LOADMOD_NOIMPORT, or PERL_LOADMOD_IMPORT_OPS
3965 (or 0 for no flags). ver, if specified, provides version semantics
3966 similar to C<use Foo::Bar VERSION>. The optional trailing SV*
3967 arguments can be used to specify arguments to the module's import()
3968 method, similar to C<use Foo::Bar VERSION LIST>. They must be
3969 terminated with a final NULL pointer. Note that this list can only
3970 be omitted when the PERL_LOADMOD_NOIMPORT flag has been used.
3971 Otherwise at least a single NULL pointer to designate the default
3972 import list is required.
3977 Perl_load_module(pTHX_ U32 flags, SV *name, SV *ver, ...)
3981 PERL_ARGS_ASSERT_LOAD_MODULE;
3983 va_start(args, ver);
3984 vload_module(flags, name, ver, &args);
3988 #ifdef PERL_IMPLICIT_CONTEXT
3990 Perl_load_module_nocontext(U32 flags, SV *name, SV *ver, ...)
3994 PERL_ARGS_ASSERT_LOAD_MODULE_NOCONTEXT;
3995 va_start(args, ver);
3996 vload_module(flags, name, ver, &args);
4002 Perl_vload_module(pTHX_ U32 flags, SV *name, SV *ver, va_list *args)
4006 OP * const modname = newSVOP(OP_CONST, 0, name);
4008 PERL_ARGS_ASSERT_VLOAD_MODULE;
4010 modname->op_private |= OPpCONST_BARE;
4012 veop = newSVOP(OP_CONST, 0, ver);
4016 if (flags & PERL_LOADMOD_NOIMPORT) {
4017 imop = sawparens(newNULLLIST());
4019 else if (flags & PERL_LOADMOD_IMPORT_OPS) {
4020 imop = va_arg(*args, OP*);
4025 sv = va_arg(*args, SV*);
4027 imop = append_elem(OP_LIST, imop, newSVOP(OP_CONST, 0, sv));
4028 sv = va_arg(*args, SV*);
4032 /* utilize() fakes up a BEGIN { require ..; import ... }, so make sure
4033 * that it has a PL_parser to play with while doing that, and also
4034 * that it doesn't mess with any existing parser, by creating a tmp
4035 * new parser with lex_start(). This won't actually be used for much,
4036 * since pp_require() will create another parser for the real work. */
4039 SAVEVPTR(PL_curcop);
4040 lex_start(NULL, NULL, FALSE);
4041 utilize(!(flags & PERL_LOADMOD_DENY), start_subparse(FALSE, 0),
4042 veop, modname, imop);
4047 Perl_dofile(pTHX_ OP *term, I32 force_builtin)
4053 PERL_ARGS_ASSERT_DOFILE;
4055 if (!force_builtin) {
4056 gv = gv_fetchpvs("do", GV_NOTQUAL, SVt_PVCV);
4057 if (!(gv && GvCVu(gv) && GvIMPORTED_CV(gv))) {
4058 GV * const * const gvp = (GV**)hv_fetchs(PL_globalstash, "do", FALSE);
4059 gv = gvp ? *gvp : NULL;
4063 if (gv && GvCVu(gv) && GvIMPORTED_CV(gv)) {
4064 doop = ck_subr(newUNOP(OP_ENTERSUB, OPf_STACKED,
4065 append_elem(OP_LIST, term,
4066 scalar(newUNOP(OP_RV2CV, 0,
4067 newGVOP(OP_GV, 0, gv))))));
4070 doop = newUNOP(OP_DOFILE, 0, scalar(term));
4076 Perl_newSLICEOP(pTHX_ I32 flags, OP *subscript, OP *listval)
4078 return newBINOP(OP_LSLICE, flags,
4079 list(force_list(subscript)),
4080 list(force_list(listval)) );
4084 S_is_list_assignment(pTHX_ register const OP *o)
4092 if ((o->op_type == OP_NULL) && (o->op_flags & OPf_KIDS))
4093 o = cUNOPo->op_first;
4095 flags = o->op_flags;
4097 if (type == OP_COND_EXPR) {
4098 const I32 t = is_list_assignment(cLOGOPo->op_first->op_sibling);
4099 const I32 f = is_list_assignment(cLOGOPo->op_first->op_sibling->op_sibling);
4104 yyerror("Assignment to both a list and a scalar");
4108 if (type == OP_LIST &&
4109 (flags & OPf_WANT) == OPf_WANT_SCALAR &&
4110 o->op_private & OPpLVAL_INTRO)
4113 if (type == OP_LIST || flags & OPf_PARENS ||
4114 type == OP_RV2AV || type == OP_RV2HV ||
4115 type == OP_ASLICE || type == OP_HSLICE)
4118 if (type == OP_PADAV || type == OP_PADHV)
4121 if (type == OP_RV2SV)
4128 Perl_newASSIGNOP(pTHX_ I32 flags, OP *left, I32 optype, OP *right)
4134 if (optype == OP_ANDASSIGN || optype == OP_ORASSIGN || optype == OP_DORASSIGN) {
4135 return newLOGOP(optype, 0,
4136 mod(scalar(left), optype),
4137 newUNOP(OP_SASSIGN, 0, scalar(right)));
4140 return newBINOP(optype, OPf_STACKED,
4141 mod(scalar(left), optype), scalar(right));
4145 if (is_list_assignment(left)) {
4146 static const char no_list_state[] = "Initialization of state variables"
4147 " in list context currently forbidden";
4149 bool maybe_common_vars = TRUE;
4152 /* Grandfathering $[ assignment here. Bletch.*/
4153 /* Only simple assignments like C<< ($[) = 1 >> are allowed */
4154 PL_eval_start = (left->op_type == OP_CONST) ? right : NULL;
4155 left = mod(left, OP_AASSIGN);
4158 else if (left->op_type == OP_CONST) {
4160 /* Result of assignment is always 1 (or we'd be dead already) */
4161 return newSVOP(OP_CONST, 0, newSViv(1));
4163 curop = list(force_list(left));
4164 o = newBINOP(OP_AASSIGN, flags, list(force_list(right)), curop);
4165 o->op_private = (U8)(0 | (flags >> 8));
4167 if ((left->op_type == OP_LIST
4168 || (left->op_type == OP_NULL && left->op_targ == OP_LIST)))
4170 OP* lop = ((LISTOP*)left)->op_first;
4171 maybe_common_vars = FALSE;
4173 if (lop->op_type == OP_PADSV ||
4174 lop->op_type == OP_PADAV ||
4175 lop->op_type == OP_PADHV ||
4176 lop->op_type == OP_PADANY) {
4177 if (!(lop->op_private & OPpLVAL_INTRO))
4178 maybe_common_vars = TRUE;
4180 if (lop->op_private & OPpPAD_STATE) {
4181 if (left->op_private & OPpLVAL_INTRO) {
4182 /* Each variable in state($a, $b, $c) = ... */
4185 /* Each state variable in
4186 (state $a, my $b, our $c, $d, undef) = ... */
4188 yyerror(no_list_state);
4190 /* Each my variable in
4191 (state $a, my $b, our $c, $d, undef) = ... */
4193 } else if (lop->op_type == OP_UNDEF ||
4194 lop->op_type == OP_PUSHMARK) {
4195 /* undef may be interesting in
4196 (state $a, undef, state $c) */
4198 /* Other ops in the list. */
4199 maybe_common_vars = TRUE;
4201 lop = lop->op_sibling;
4204 else if ((left->op_private & OPpLVAL_INTRO)
4205 && ( left->op_type == OP_PADSV
4206 || left->op_type == OP_PADAV
4207 || left->op_type == OP_PADHV
4208 || left->op_type == OP_PADANY))
4210 maybe_common_vars = FALSE;
4211 if (left->op_private & OPpPAD_STATE) {
4212 /* All single variable list context state assignments, hence
4222 yyerror(no_list_state);
4226 /* PL_generation sorcery:
4227 * an assignment like ($a,$b) = ($c,$d) is easier than
4228 * ($a,$b) = ($c,$a), since there is no need for temporary vars.
4229 * To detect whether there are common vars, the global var
4230 * PL_generation is incremented for each assign op we compile.
4231 * Then, while compiling the assign op, we run through all the
4232 * variables on both sides of the assignment, setting a spare slot
4233 * in each of them to PL_generation. If any of them already have
4234 * that value, we know we've got commonality. We could use a
4235 * single bit marker, but then we'd have to make 2 passes, first
4236 * to clear the flag, then to test and set it. To find somewhere
4237 * to store these values, evil chicanery is done with SvUVX().
4240 if (maybe_common_vars) {
4243 for (curop = LINKLIST(o); curop != o; curop = LINKLIST(curop)) {
4244 if (PL_opargs[curop->op_type] & OA_DANGEROUS) {
4245 if (curop->op_type == OP_GV) {
4246 GV *gv = cGVOPx_gv(curop);
4248 || (int)GvASSIGN_GENERATION(gv) == PL_generation)
4250 GvASSIGN_GENERATION_set(gv, PL_generation);
4252 else if (curop->op_type == OP_PADSV ||
4253 curop->op_type == OP_PADAV ||
4254 curop->op_type == OP_PADHV ||
4255 curop->op_type == OP_PADANY)
4257 if (PAD_COMPNAME_GEN(curop->op_targ)
4258 == (STRLEN)PL_generation)
4260 PAD_COMPNAME_GEN_set(curop->op_targ, PL_generation);
4263 else if (curop->op_type == OP_RV2CV)
4265 else if (curop->op_type == OP_RV2SV ||
4266 curop->op_type == OP_RV2AV ||
4267 curop->op_type == OP_RV2HV ||
4268 curop->op_type == OP_RV2GV) {
4269 if (lastop->op_type != OP_GV) /* funny deref? */
4272 else if (curop->op_type == OP_PUSHRE) {
4274 if (((PMOP*)curop)->op_pmreplrootu.op_pmtargetoff) {
4275 GV *const gv = MUTABLE_GV(PAD_SVl(((PMOP*)curop)->op_pmreplrootu.op_pmtargetoff));
4277 || (int)GvASSIGN_GENERATION(gv) == PL_generation)
4279 GvASSIGN_GENERATION_set(gv, PL_generation);
4283 = ((PMOP*)curop)->op_pmreplrootu.op_pmtargetgv;
4286 || (int)GvASSIGN_GENERATION(gv) == PL_generation)
4288 GvASSIGN_GENERATION_set(gv, PL_generation);
4298 o->op_private |= OPpASSIGN_COMMON;
4301 if (right && right->op_type == OP_SPLIT && !PL_madskills) {
4302 OP* tmpop = ((LISTOP*)right)->op_first;
4303 if (tmpop && (tmpop->op_type == OP_PUSHRE)) {
4304 PMOP * const pm = (PMOP*)tmpop;
4305 if (left->op_type == OP_RV2AV &&
4306 !(left->op_private & OPpLVAL_INTRO) &&
4307 !(o->op_private & OPpASSIGN_COMMON) )
4309 tmpop = ((UNOP*)left)->op_first;
4310 if (tmpop->op_type == OP_GV
4312 && !pm->op_pmreplrootu.op_pmtargetoff
4314 && !pm->op_pmreplrootu.op_pmtargetgv
4318 pm->op_pmreplrootu.op_pmtargetoff
4319 = cPADOPx(tmpop)->op_padix;
4320 cPADOPx(tmpop)->op_padix = 0; /* steal it */
4322 pm->op_pmreplrootu.op_pmtargetgv
4323 = MUTABLE_GV(cSVOPx(tmpop)->op_sv);
4324 cSVOPx(tmpop)->op_sv = NULL; /* steal it */
4326 pm->op_pmflags |= PMf_ONCE;
4327 tmpop = cUNOPo->op_first; /* to list (nulled) */
4328 tmpop = ((UNOP*)tmpop)->op_first; /* to pushmark */
4329 tmpop->op_sibling = NULL; /* don't free split */
4330 right->op_next = tmpop->op_next; /* fix starting loc */
4331 op_free(o); /* blow off assign */
4332 right->op_flags &= ~OPf_WANT;
4333 /* "I don't know and I don't care." */
4338 if (PL_modcount < RETURN_UNLIMITED_NUMBER &&
4339 ((LISTOP*)right)->op_last->op_type == OP_CONST)
4341 SV *sv = ((SVOP*)((LISTOP*)right)->op_last)->op_sv;
4342 if (SvIOK(sv) && SvIVX(sv) == 0)
4343 sv_setiv(sv, PL_modcount+1);
4351 right = newOP(OP_UNDEF, 0);
4352 if (right->op_type == OP_READLINE) {
4353 right->op_flags |= OPf_STACKED;
4354 return newBINOP(OP_NULL, flags, mod(scalar(left), OP_SASSIGN), scalar(right));
4357 PL_eval_start = right; /* Grandfathering $[ assignment here. Bletch.*/
4358 o = newBINOP(OP_SASSIGN, flags,
4359 scalar(right), mod(scalar(left), OP_SASSIGN) );
4363 if (!PL_madskills) { /* assignment to $[ is ignored when making a mad dump */
4364 deprecate("assignment to $[");
4366 o = newSVOP(OP_CONST, 0, newSViv(CopARYBASE_get(&PL_compiling)));
4367 o->op_private |= OPpCONST_ARYBASE;
4375 Perl_newSTATEOP(pTHX_ I32 flags, char *label, OP *o)
4378 const U32 seq = intro_my();
4381 NewOp(1101, cop, 1, COP);
4382 if (PERLDB_LINE && CopLINE(PL_curcop) && PL_curstash != PL_debstash) {
4383 cop->op_type = OP_DBSTATE;
4384 cop->op_ppaddr = PL_ppaddr[ OP_DBSTATE ];
4387 cop->op_type = OP_NEXTSTATE;
4388 cop->op_ppaddr = PL_ppaddr[ OP_NEXTSTATE ];
4390 cop->op_flags = (U8)flags;
4391 CopHINTS_set(cop, PL_hints);
4393 cop->op_private |= NATIVE_HINTS;
4395 CopHINTS_set(&PL_compiling, CopHINTS_get(cop));
4396 cop->op_next = (OP*)cop;
4399 /* CopARYBASE is now "virtual", in that it's stored as a flag bit in
4400 CopHINTS and a possible value in cop_hints_hash, so no need to copy it.
4402 cop->cop_warnings = DUP_WARNINGS(PL_curcop->cop_warnings);
4403 cop->cop_hints_hash = PL_curcop->cop_hints_hash;
4404 if (cop->cop_hints_hash) {
4406 cop->cop_hints_hash->refcounted_he_refcnt++;
4407 HINTS_REFCNT_UNLOCK;
4411 = Perl_store_cop_label(aTHX_ cop->cop_hints_hash, label);
4413 PL_hints |= HINT_BLOCK_SCOPE;
4414 /* It seems that we need to defer freeing this pointer, as other parts
4415 of the grammar end up wanting to copy it after this op has been
4420 if (PL_parser && PL_parser->copline == NOLINE)
4421 CopLINE_set(cop, CopLINE(PL_curcop));
4423 CopLINE_set(cop, PL_parser->copline);
4425 PL_parser->copline = NOLINE;
4428 CopFILE_set(cop, CopFILE(PL_curcop)); /* XXX share in a pvtable? */
4430 CopFILEGV_set(cop, CopFILEGV(PL_curcop));
4432 CopSTASH_set(cop, PL_curstash);
4434 if ((PERLDB_LINE || PERLDB_SAVESRC) && PL_curstash != PL_debstash) {
4435 /* this line can have a breakpoint - store the cop in IV */
4436 AV *av = CopFILEAVx(PL_curcop);
4438 SV * const * const svp = av_fetch(av, (I32)CopLINE(cop), FALSE);
4439 if (svp && *svp != &PL_sv_undef ) {
4440 (void)SvIOK_on(*svp);
4441 SvIV_set(*svp, PTR2IV(cop));
4446 if (flags & OPf_SPECIAL)
4448 return prepend_elem(OP_LINESEQ, (OP*)cop, o);
4453 Perl_newLOGOP(pTHX_ I32 type, I32 flags, OP *first, OP *other)
4457 PERL_ARGS_ASSERT_NEWLOGOP;
4459 return new_logop(type, flags, &first, &other);
4463 S_search_const(pTHX_ OP *o)
4465 PERL_ARGS_ASSERT_SEARCH_CONST;
4467 switch (o->op_type) {
4471 if (o->op_flags & OPf_KIDS)
4472 return search_const(cUNOPo->op_first);
4479 if (!(o->op_flags & OPf_KIDS))
4481 kid = cLISTOPo->op_first;
4483 switch (kid->op_type) {
4487 kid = kid->op_sibling;
4490 if (kid != cLISTOPo->op_last)
4496 kid = cLISTOPo->op_last;
4498 return search_const(kid);
4506 S_new_logop(pTHX_ I32 type, I32 flags, OP** firstp, OP** otherp)
4514 int prepend_not = 0;
4516 PERL_ARGS_ASSERT_NEW_LOGOP;
4521 if (type == OP_XOR) /* Not short circuit, but here by precedence. */
4522 return newBINOP(type, flags, scalar(first), scalar(other));
4524 scalarboolean(first);
4525 /* optimize AND and OR ops that have NOTs as children */
4526 if (first->op_type == OP_NOT
4527 && (first->op_flags & OPf_KIDS)
4528 && ((first->op_flags & OPf_SPECIAL) /* unless ($x) { } */
4529 || (other->op_type == OP_NOT)) /* if (!$x && !$y) { } */
4531 if (type == OP_AND || type == OP_OR) {
4537 if (other->op_type == OP_NOT) { /* !a AND|OR !b => !(a OR|AND b) */
4539 prepend_not = 1; /* prepend a NOT op later */
4543 /* search for a constant op that could let us fold the test */
4544 if ((cstop = search_const(first))) {
4545 if (cstop->op_private & OPpCONST_STRICT)
4546 no_bareword_allowed(cstop);
4547 else if ((cstop->op_private & OPpCONST_BARE))
4548 Perl_ck_warner(aTHX_ packWARN(WARN_BAREWORD), "Bareword found in conditional");
4549 if ((type == OP_AND && SvTRUE(((SVOP*)cstop)->op_sv)) ||
4550 (type == OP_OR && !SvTRUE(((SVOP*)cstop)->op_sv)) ||
4551 (type == OP_DOR && !SvOK(((SVOP*)cstop)->op_sv))) {
4553 if (other->op_type == OP_CONST)
4554 other->op_private |= OPpCONST_SHORTCIRCUIT;
4556 OP *newop = newUNOP(OP_NULL, 0, other);
4557 op_getmad(first, newop, '1');
4558 newop->op_targ = type; /* set "was" field */
4562 if (other->op_type == OP_LEAVE)
4563 other = newUNOP(OP_NULL, OPf_SPECIAL, other);
4567 /* check for C<my $x if 0>, or C<my($x,$y) if 0> */
4568 const OP *o2 = other;
4569 if ( ! (o2->op_type == OP_LIST
4570 && (( o2 = cUNOPx(o2)->op_first))
4571 && o2->op_type == OP_PUSHMARK
4572 && (( o2 = o2->op_sibling)) )
4575 if ((o2->op_type == OP_PADSV || o2->op_type == OP_PADAV
4576 || o2->op_type == OP_PADHV)
4577 && o2->op_private & OPpLVAL_INTRO
4578 && !(o2->op_private & OPpPAD_STATE))
4580 Perl_ck_warner_d(aTHX_ packWARN(WARN_DEPRECATED),
4581 "Deprecated use of my() in false conditional");
4585 if (first->op_type == OP_CONST)
4586 first->op_private |= OPpCONST_SHORTCIRCUIT;
4588 first = newUNOP(OP_NULL, 0, first);
4589 op_getmad(other, first, '2');
4590 first->op_targ = type; /* set "was" field */
4597 else if ((first->op_flags & OPf_KIDS) && type != OP_DOR
4598 && ckWARN(WARN_MISC)) /* [#24076] Don't warn for <FH> err FOO. */
4600 const OP * const k1 = ((UNOP*)first)->op_first;
4601 const OP * const k2 = k1->op_sibling;
4603 switch (first->op_type)
4606 if (k2 && k2->op_type == OP_READLINE
4607 && (k2->op_flags & OPf_STACKED)
4608 && ((k1->op_flags & OPf_WANT) == OPf_WANT_SCALAR))
4610 warnop = k2->op_type;
4615 if (k1->op_type == OP_READDIR
4616 || k1->op_type == OP_GLOB
4617 || (k1->op_type == OP_NULL && k1->op_targ == OP_GLOB)
4618 || k1->op_type == OP_EACH)
4620 warnop = ((k1->op_type == OP_NULL)
4621 ? (OPCODE)k1->op_targ : k1->op_type);
4626 const line_t oldline = CopLINE(PL_curcop);
4627 CopLINE_set(PL_curcop, PL_parser->copline);
4628 Perl_warner(aTHX_ packWARN(WARN_MISC),
4629 "Value of %s%s can be \"0\"; test with defined()",
4631 ((warnop == OP_READLINE || warnop == OP_GLOB)
4632 ? " construct" : "() operator"));
4633 CopLINE_set(PL_curcop, oldline);
4640 if (type == OP_ANDASSIGN || type == OP_ORASSIGN || type == OP_DORASSIGN)
4641 other->op_private |= OPpASSIGN_BACKWARDS; /* other is an OP_SASSIGN */
4643 NewOp(1101, logop, 1, LOGOP);
4645 logop->op_type = (OPCODE)type;
4646 logop->op_ppaddr = PL_ppaddr[type];
4647 logop->op_first = first;
4648 logop->op_flags = (U8)(flags | OPf_KIDS);
4649 logop->op_other = LINKLIST(other);
4650 logop->op_private = (U8)(1 | (flags >> 8));
4652 /* establish postfix order */
4653 logop->op_next = LINKLIST(first);
4654 first->op_next = (OP*)logop;
4655 first->op_sibling = other;
4657 CHECKOP(type,logop);
4659 o = newUNOP(prepend_not ? OP_NOT : OP_NULL, 0, (OP*)logop);
4666 Perl_newCONDOP(pTHX_ I32 flags, OP *first, OP *trueop, OP *falseop)
4674 PERL_ARGS_ASSERT_NEWCONDOP;
4677 return newLOGOP(OP_AND, 0, first, trueop);
4679 return newLOGOP(OP_OR, 0, first, falseop);
4681 scalarboolean(first);
4682 if ((cstop = search_const(first))) {
4683 /* Left or right arm of the conditional? */
4684 const bool left = SvTRUE(((SVOP*)cstop)->op_sv);
4685 OP *live = left ? trueop : falseop;
4686 OP *const dead = left ? falseop : trueop;
4687 if (cstop->op_private & OPpCONST_BARE &&
4688 cstop->op_private & OPpCONST_STRICT) {
4689 no_bareword_allowed(cstop);
4692 /* This is all dead code when PERL_MAD is not defined. */
4693 live = newUNOP(OP_NULL, 0, live);
4694 op_getmad(first, live, 'C');
4695 op_getmad(dead, live, left ? 'e' : 't');
4700 if (live->op_type == OP_LEAVE)
4701 live = newUNOP(OP_NULL, OPf_SPECIAL, live);
4704 NewOp(1101, logop, 1, LOGOP);
4705 logop->op_type = OP_COND_EXPR;
4706 logop->op_ppaddr = PL_ppaddr[OP_COND_EXPR];
4707 logop->op_first = first;
4708 logop->op_flags = (U8)(flags | OPf_KIDS);
4709 logop->op_private = (U8)(1 | (flags >> 8));
4710 logop->op_other = LINKLIST(trueop);
4711 logop->op_next = LINKLIST(falseop);
4713 CHECKOP(OP_COND_EXPR, /* that's logop->op_type */
4716 /* establish postfix order */
4717 start = LINKLIST(first);
4718 first->op_next = (OP*)logop;
4720 first->op_sibling = trueop;
4721 trueop->op_sibling = falseop;
4722 o = newUNOP(OP_NULL, 0, (OP*)logop);
4724 trueop->op_next = falseop->op_next = o;
4731 Perl_newRANGE(pTHX_ I32 flags, OP *left, OP *right)
4740 PERL_ARGS_ASSERT_NEWRANGE;
4742 NewOp(1101, range, 1, LOGOP);
4744 range->op_type = OP_RANGE;
4745 range->op_ppaddr = PL_ppaddr[OP_RANGE];
4746 range->op_first = left;
4747 range->op_flags = OPf_KIDS;
4748 leftstart = LINKLIST(left);
4749 range->op_other = LINKLIST(right);
4750 range->op_private = (U8)(1 | (flags >> 8));
4752 left->op_sibling = right;
4754 range->op_next = (OP*)range;
4755 flip = newUNOP(OP_FLIP, flags, (OP*)range);
4756 flop = newUNOP(OP_FLOP, 0, flip);
4757 o = newUNOP(OP_NULL, 0, flop);
4759 range->op_next = leftstart;
4761 left->op_next = flip;
4762 right->op_next = flop;
4764 range->op_targ = pad_alloc(OP_RANGE, SVs_PADMY);
4765 sv_upgrade(PAD_SV(range->op_targ), SVt_PVNV);
4766 flip->op_targ = pad_alloc(OP_RANGE, SVs_PADMY);
4767 sv_upgrade(PAD_SV(flip->op_targ), SVt_PVNV);
4769 flip->op_private = left->op_type == OP_CONST ? OPpFLIP_LINENUM : 0;
4770 flop->op_private = right->op_type == OP_CONST ? OPpFLIP_LINENUM : 0;
4773 if (!flip->op_private || !flop->op_private)
4774 linklist(o); /* blow off optimizer unless constant */
4780 Perl_newLOOPOP(pTHX_ I32 flags, I32 debuggable, OP *expr, OP *block)
4785 const bool once = block && block->op_flags & OPf_SPECIAL &&
4786 (block->op_type == OP_ENTERSUB || block->op_type == OP_NULL);
4788 PERL_UNUSED_ARG(debuggable);
4791 if (once && expr->op_type == OP_CONST && !SvTRUE(((SVOP*)expr)->op_sv))
4792 return block; /* do {} while 0 does once */
4793 if (expr->op_type == OP_READLINE
4794 || expr->op_type == OP_READDIR
4795 || expr->op_type == OP_GLOB
4796 || (expr->op_type == OP_NULL && expr->op_targ == OP_GLOB)) {
4797 expr = newUNOP(OP_DEFINED, 0,
4798 newASSIGNOP(0, newDEFSVOP(), 0, expr) );
4799 } else if (expr->op_flags & OPf_KIDS) {
4800 const OP * const k1 = ((UNOP*)expr)->op_first;
4801 const OP * const k2 = k1 ? k1->op_sibling : NULL;
4802 switch (expr->op_type) {
4804 if (k2 && (k2->op_type == OP_READLINE || k2->op_type == OP_READDIR)
4805 && (k2->op_flags & OPf_STACKED)
4806 && ((k1->op_flags & OPf_WANT) == OPf_WANT_SCALAR))
4807 expr = newUNOP(OP_DEFINED, 0, expr);
4811 if (k1 && (k1->op_type == OP_READDIR
4812 || k1->op_type == OP_GLOB
4813 || (k1->op_type == OP_NULL && k1->op_targ == OP_GLOB)
4814 || k1->op_type == OP_EACH))
4815 expr = newUNOP(OP_DEFINED, 0, expr);
4821 /* if block is null, the next append_elem() would put UNSTACK, a scalar
4822 * op, in listop. This is wrong. [perl #27024] */
4824 block = newOP(OP_NULL, 0);
4825 listop = append_elem(OP_LINESEQ, block, newOP(OP_UNSTACK, 0));
4826 o = new_logop(OP_AND, 0, &expr, &listop);
4829 ((LISTOP*)listop)->op_last->op_nex