3 * Copyright (C) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
4 * 2000, 2001, 2002, 2003, 2004, 2005, 2006, by Larry Wall and others
6 * You may distribute under the terms of either the GNU General Public
7 * License or the Artistic License, as specified in the README file.
12 * "You see: Mr. Drogo, he married poor Miss Primula Brandybuck. She was
13 * our Mr. Bilbo's first cousin on the mother's side (her mother being the
14 * youngest of the Old Took's daughters); and Mr. Drogo was his second
15 * cousin. So Mr. Frodo is his first *and* second cousin, once removed
16 * either way, as the saying is, if you follow me." --the Gaffer
19 /* This file contains the functions that create, manipulate and optimize
20 * the OP structures that hold a compiled perl program.
22 * A Perl program is compiled into a tree of OPs. Each op contains
23 * structural pointers (eg to its siblings and the next op in the
24 * execution sequence), a pointer to the function that would execute the
25 * op, plus any data specific to that op. For example, an OP_CONST op
26 * points to the pp_const() function and to an SV containing the constant
27 * value. When pp_const() is executed, its job is to push that SV onto the
30 * OPs are mainly created by the newFOO() functions, which are mainly
31 * called from the parser (in perly.y) as the code is parsed. For example
32 * the Perl code $a + $b * $c would cause the equivalent of the following
33 * to be called (oversimplifying a bit):
35 * newBINOP(OP_ADD, flags,
37 * newBINOP(OP_MULTIPLY, flags, newSVREF($b), newSVREF($c))
40 * Note that during the build of miniperl, a temporary copy of this file
41 * is made, called opmini.c.
45 Perl's compiler is essentially a 3-pass compiler with interleaved phases:
49 An execution-order pass
51 The bottom-up pass is represented by all the "newOP" routines and
52 the ck_ routines. The bottom-upness is actually driven by yacc.
53 So at the point that a ck_ routine fires, we have no idea what the
54 context is, either upward in the syntax tree, or either forward or
55 backward in the execution order. (The bottom-up parser builds that
56 part of the execution order it knows about, but if you follow the "next"
57 links around, you'll find it's actually a closed loop through the
60 Whenever the bottom-up parser gets to a node that supplies context to
61 its components, it invokes that portion of the top-down pass that applies
62 to that part of the subtree (and marks the top node as processed, so
63 if a node further up supplies context, it doesn't have to take the
64 plunge again). As a particular subcase of this, as the new node is
65 built, it takes all the closed execution loops of its subcomponents
66 and links them into a new closed loop for the higher level node. But
67 it's still not the real execution order.
69 The actual execution order is not known till we get a grammar reduction
70 to a top-level unit like a subroutine or file that will be called by
71 "name" rather than via a "next" pointer. At that point, we can call
72 into peep() to do that code's portion of the 3rd pass. It has to be
73 recursive, but it's recursive on basic blocks, not on tree nodes.
76 /* To implement user lexical pragmas, there needs to be a way at run time to
77 get the compile time state of %^H for that block. Storing %^H in every
78 block (or even COP) would be very expensive, so a different approach is
79 taken. The (running) state of %^H is serialised into a tree of HE-like
80 structs. Stores into %^H are chained onto the current leaf as a struct
81 refcounted_he * with the key and the value. Deletes from %^H are saved
82 with a value of PL_sv_placeholder. The state of %^H at any point can be
83 turned back into a regular HV by walking back up the tree from that point's
84 leaf, ignoring any key you've already seen (placeholder or not), storing
85 the rest into the HV structure, then removing the placeholders. Hence
86 memory is only used to store the %^H deltas from the enclosing COP, rather
87 than the entire %^H on each COP.
89 To cause actions on %^H to write out the serialisation records, it has
90 magic type 'H'. This magic (itself) does nothing, but its presence causes
91 the values to gain magic type 'h', which has entries for set and clear.
92 C<Perl_magic_sethint> updates C<PL_compiling.cop_hints_hash> with a store
93 record, with deletes written by C<Perl_magic_clearhint>. C<SAVE_HINTS>
94 saves the current C<PL_compiling.cop_hints_hash> on the save stack, so that
95 it will be correctly restored when any inner compiling scope is exited.
101 #include "keywords.h"
103 #define CALL_PEEP(o) CALL_FPTR(PL_peepp)(aTHX_ o)
105 #if defined(PL_OP_SLAB_ALLOC)
107 #ifndef PERL_SLAB_SIZE
108 #define PERL_SLAB_SIZE 2048
112 Perl_Slab_Alloc(pTHX_ int m, size_t sz)
115 * To make incrementing use count easy PL_OpSlab is an I32 *
116 * To make inserting the link to slab PL_OpPtr is I32 **
117 * So compute size in units of sizeof(I32 *) as that is how Pl_OpPtr increments
118 * Add an overhead for pointer to slab and round up as a number of pointers
120 sz = (sz + 2*sizeof(I32 *) -1)/sizeof(I32 *);
121 if ((PL_OpSpace -= sz) < 0) {
122 PL_OpPtr = (I32 **) PerlMemShared_malloc(PERL_SLAB_SIZE*sizeof(I32*));
126 Zero(PL_OpPtr,PERL_SLAB_SIZE,I32 **);
127 /* We reserve the 0'th I32 sized chunk as a use count */
128 PL_OpSlab = (I32 *) PL_OpPtr;
129 /* Reduce size by the use count word, and by the size we need.
130 * Latter is to mimic the '-=' in the if() above
132 PL_OpSpace = PERL_SLAB_SIZE - (sizeof(I32)+sizeof(I32 **)-1)/sizeof(I32 **) - sz;
133 /* Allocation pointer starts at the top.
134 Theory: because we build leaves before trunk allocating at end
135 means that at run time access is cache friendly upward
137 PL_OpPtr += PERL_SLAB_SIZE;
139 assert( PL_OpSpace >= 0 );
140 /* Move the allocation pointer down */
142 assert( PL_OpPtr > (I32 **) PL_OpSlab );
143 *PL_OpPtr = PL_OpSlab; /* Note which slab it belongs to */
144 (*PL_OpSlab)++; /* Increment use count of slab */
145 assert( PL_OpPtr+sz <= ((I32 **) PL_OpSlab + PERL_SLAB_SIZE) );
146 assert( *PL_OpSlab > 0 );
147 return (void *)(PL_OpPtr + 1);
151 Perl_Slab_Free(pTHX_ void *op)
153 I32 * const * const ptr = (I32 **) op;
154 I32 * const slab = ptr[-1];
155 assert( ptr-1 > (I32 **) slab );
156 assert( ptr < ( (I32 **) slab + PERL_SLAB_SIZE) );
158 if (--(*slab) == 0) {
160 # define PerlMemShared PerlMem
163 PerlMemShared_free(slab);
164 if (slab == PL_OpSlab) {
171 * In the following definition, the ", (OP*)0" is just to make the compiler
172 * think the expression is of the right type: croak actually does a Siglongjmp.
174 #define CHECKOP(type,o) \
175 ((PL_op_mask && PL_op_mask[type]) \
176 ? ( op_free((OP*)o), \
177 Perl_croak(aTHX_ "'%s' trapped by operation mask", PL_op_desc[type]), \
179 : CALL_FPTR(PL_check[type])(aTHX_ (OP*)o))
181 #define RETURN_UNLIMITED_NUMBER (PERL_INT_MAX / 2)
184 S_gv_ename(pTHX_ GV *gv)
186 SV* const tmpsv = sv_newmortal();
187 gv_efullname3(tmpsv, gv, NULL);
188 return SvPV_nolen_const(tmpsv);
192 S_no_fh_allowed(pTHX_ OP *o)
194 yyerror(Perl_form(aTHX_ "Missing comma after first argument to %s function",
200 S_too_few_arguments(pTHX_ OP *o, const char *name)
202 yyerror(Perl_form(aTHX_ "Not enough arguments for %s", name));
207 S_too_many_arguments(pTHX_ OP *o, const char *name)
209 yyerror(Perl_form(aTHX_ "Too many arguments for %s", name));
214 S_bad_type(pTHX_ I32 n, const char *t, const char *name, const OP *kid)
216 yyerror(Perl_form(aTHX_ "Type of arg %d to %s must be %s (not %s)",
217 (int)n, name, t, OP_DESC(kid)));
221 S_no_bareword_allowed(pTHX_ const OP *o)
224 return; /* various ok barewords are hidden in extra OP_NULL */
225 qerror(Perl_mess(aTHX_
226 "Bareword \"%"SVf"\" not allowed while \"strict subs\" in use",
230 /* "register" allocation */
233 Perl_allocmy(pTHX_ const char *const name)
237 const bool is_our = (PL_in_my == KEY_our);
239 /* complain about "my $<special_var>" etc etc */
243 (USE_UTF8_IN_NAMES && UTF8_IS_START(name[1])) ||
244 (name[1] == '_' && (*name == '$' || name[2]))))
246 /* name[2] is true if strlen(name) > 2 */
247 if (!isPRINT(name[1]) || strchr("\t\n\r\f", name[1])) {
248 yyerror(Perl_form(aTHX_ "Can't use global %c^%c%s in \"my\"",
249 name[0], toCTRL(name[1]), name + 2));
251 yyerror(Perl_form(aTHX_ "Can't use global %s in \"my\"",name));
255 /* check for duplicate declaration */
256 pad_check_dup(name, is_our, (PL_curstash ? PL_curstash : PL_defstash));
258 if (PL_in_my_stash && *name != '$') {
259 yyerror(Perl_form(aTHX_
260 "Can't declare class for non-scalar %s in \"%s\"",
262 is_our ? "our" : PL_in_my == KEY_state ? "state" : "my"));
265 /* allocate a spare slot and store the name in that slot */
267 off = pad_add_name(name,
270 /* $_ is always in main::, even with our */
271 ? (PL_curstash && !strEQ(name,"$_") ? PL_curstash : PL_defstash)
275 PL_in_my == KEY_state
280 /* free the body of an op without examining its contents.
281 * Always use this rather than FreeOp directly */
284 S_op_destroy(pTHX_ OP *o)
286 if (o->op_latefree) {
297 Perl_op_free(pTHX_ OP *o)
302 if (!o || o->op_static)
304 if (o->op_latefreed) {
311 if (o->op_private & OPpREFCOUNTED) {
322 refcnt = OpREFCNT_dec(o);
333 if (o->op_flags & OPf_KIDS) {
334 register OP *kid, *nextkid;
335 for (kid = cUNOPo->op_first; kid; kid = nextkid) {
336 nextkid = kid->op_sibling; /* Get before next freeing kid */
341 type = (OPCODE)o->op_targ;
343 /* COP* is not cleared by op_clear() so that we may track line
344 * numbers etc even after null() */
345 if (type == OP_NEXTSTATE || type == OP_SETSTATE || type == OP_DBSTATE)
349 if (o->op_latefree) {
355 #ifdef DEBUG_LEAKING_SCALARS
362 Perl_op_clear(pTHX_ OP *o)
367 /* if (o->op_madprop && o->op_madprop->mad_next)
369 /* FIXME for MAD - if I uncomment these two lines t/op/pack.t fails with
370 "modification of a read only value" for a reason I can't fathom why.
371 It's the "" stringification of $_, where $_ was set to '' in a foreach
372 loop, but it defies simplification into a small test case.
373 However, commenting them out has caused ext/List/Util/t/weak.t to fail
376 mad_free(o->op_madprop);
382 switch (o->op_type) {
383 case OP_NULL: /* Was holding old type, if any. */
384 if (PL_madskills && o->op_targ != OP_NULL) {
385 o->op_type = o->op_targ;
389 case OP_ENTEREVAL: /* Was holding hints. */
393 if (!(o->op_flags & OPf_REF)
394 || (PL_check[o->op_type] != MEMBER_TO_FPTR(Perl_ck_ftst)))
400 if (! (o->op_type == OP_AELEMFAST && o->op_flags & OPf_SPECIAL)) {
401 /* not an OP_PADAV replacement */
403 if (cPADOPo->op_padix > 0) {
404 /* No GvIN_PAD_off(cGVOPo_gv) here, because other references
405 * may still exist on the pad */
406 pad_swipe(cPADOPo->op_padix, TRUE);
407 cPADOPo->op_padix = 0;
410 SvREFCNT_dec(cSVOPo->op_sv);
411 cSVOPo->op_sv = NULL;
415 case OP_METHOD_NAMED:
417 SvREFCNT_dec(cSVOPo->op_sv);
418 cSVOPo->op_sv = NULL;
421 Even if op_clear does a pad_free for the target of the op,
422 pad_free doesn't actually remove the sv that exists in the pad;
423 instead it lives on. This results in that it could be reused as
424 a target later on when the pad was reallocated.
427 pad_swipe(o->op_targ,1);
436 if (o->op_flags & (OPf_SPECIAL|OPf_STACKED|OPf_KIDS))
440 if (o->op_private & (OPpTRANS_FROM_UTF|OPpTRANS_TO_UTF)) {
441 SvREFCNT_dec(cSVOPo->op_sv);
442 cSVOPo->op_sv = NULL;
445 Safefree(cPVOPo->op_pv);
446 cPVOPo->op_pv = NULL;
450 op_free(cPMOPo->op_pmreplroot);
454 if (INT2PTR(PADOFFSET, cPMOPo->op_pmreplroot)) {
455 /* No GvIN_PAD_off here, because other references may still
456 * exist on the pad */
457 pad_swipe(INT2PTR(PADOFFSET, cPMOPo->op_pmreplroot), TRUE);
460 SvREFCNT_dec((SV*)cPMOPo->op_pmreplroot);
467 HV * const pmstash = PmopSTASH(cPMOPo);
468 if (pmstash && !SvIS_FREED(pmstash)) {
469 MAGIC * const mg = mg_find((SV*)pmstash, PERL_MAGIC_symtab);
471 PMOP *pmop = (PMOP*) mg->mg_obj;
472 PMOP *lastpmop = NULL;
474 if (cPMOPo == pmop) {
476 lastpmop->op_pmnext = pmop->op_pmnext;
478 mg->mg_obj = (SV*) pmop->op_pmnext;
482 pmop = pmop->op_pmnext;
486 PmopSTASH_free(cPMOPo);
488 cPMOPo->op_pmreplroot = NULL;
489 /* we use the "SAFE" version of the PM_ macros here
490 * since sv_clean_all might release some PMOPs
491 * after PL_regex_padav has been cleared
492 * and the clearing of PL_regex_padav needs to
493 * happen before sv_clean_all
495 ReREFCNT_dec(PM_GETRE_SAFE(cPMOPo));
496 PM_SETRE_SAFE(cPMOPo, NULL);
498 if(PL_regex_pad) { /* We could be in destruction */
499 av_push((AV*) PL_regex_pad[0],(SV*) PL_regex_pad[(cPMOPo)->op_pmoffset]);
500 SvREPADTMP_on(PL_regex_pad[(cPMOPo)->op_pmoffset]);
501 PM_SETRE(cPMOPo, (cPMOPo)->op_pmoffset);
508 if (o->op_targ > 0) {
509 pad_free(o->op_targ);
515 S_cop_free(pTHX_ COP* cop)
520 if (! specialWARN(cop->cop_warnings))
521 PerlMemShared_free(cop->cop_warnings);
522 Perl_refcounted_he_free(aTHX_ cop->cop_hints_hash);
526 Perl_op_null(pTHX_ OP *o)
529 if (o->op_type == OP_NULL)
533 o->op_targ = o->op_type;
534 o->op_type = OP_NULL;
535 o->op_ppaddr = PL_ppaddr[OP_NULL];
539 Perl_op_refcnt_lock(pTHX)
547 Perl_op_refcnt_unlock(pTHX)
554 /* Contextualizers */
556 #define LINKLIST(o) ((o)->op_next ? (o)->op_next : linklist((OP*)o))
559 Perl_linklist(pTHX_ OP *o)
566 /* establish postfix order */
567 first = cUNOPo->op_first;
570 o->op_next = LINKLIST(first);
573 if (kid->op_sibling) {
574 kid->op_next = LINKLIST(kid->op_sibling);
575 kid = kid->op_sibling;
589 Perl_scalarkids(pTHX_ OP *o)
591 if (o && o->op_flags & OPf_KIDS) {
593 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
600 S_scalarboolean(pTHX_ OP *o)
603 if (o->op_type == OP_SASSIGN && cBINOPo->op_first->op_type == OP_CONST) {
604 if (ckWARN(WARN_SYNTAX)) {
605 const line_t oldline = CopLINE(PL_curcop);
607 if (PL_copline != NOLINE)
608 CopLINE_set(PL_curcop, PL_copline);
609 Perl_warner(aTHX_ packWARN(WARN_SYNTAX), "Found = in conditional, should be ==");
610 CopLINE_set(PL_curcop, oldline);
617 Perl_scalar(pTHX_ OP *o)
622 /* assumes no premature commitment */
623 if (!o || PL_error_count || (o->op_flags & OPf_WANT)
624 || o->op_type == OP_RETURN)
629 o->op_flags = (o->op_flags & ~OPf_WANT) | OPf_WANT_SCALAR;
631 switch (o->op_type) {
633 scalar(cBINOPo->op_first);
638 for (kid = cUNOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
642 if ((kid = cLISTOPo->op_first) && kid->op_type == OP_PUSHRE) {
643 if (!kPMOP->op_pmreplroot)
644 deprecate_old("implicit split to @_");
652 if (o->op_flags & OPf_KIDS) {
653 for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling)
659 kid = cLISTOPo->op_first;
661 while ((kid = kid->op_sibling)) {
667 PL_curcop = &PL_compiling;
672 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling) {
678 PL_curcop = &PL_compiling;
681 if (ckWARN(WARN_VOID))
682 Perl_warner(aTHX_ packWARN(WARN_VOID), "Useless use of sort in scalar context");
688 Perl_scalarvoid(pTHX_ OP *o)
692 const char* useless = NULL;
696 /* trailing mad null ops don't count as "there" for void processing */
698 o->op_type != OP_NULL &&
700 o->op_sibling->op_type == OP_NULL)
703 for (sib = o->op_sibling;
704 sib && sib->op_type == OP_NULL;
705 sib = sib->op_sibling) ;
711 if (o->op_type == OP_NEXTSTATE
712 || o->op_type == OP_SETSTATE
713 || o->op_type == OP_DBSTATE
714 || (o->op_type == OP_NULL && (o->op_targ == OP_NEXTSTATE
715 || o->op_targ == OP_SETSTATE
716 || o->op_targ == OP_DBSTATE)))
717 PL_curcop = (COP*)o; /* for warning below */
719 /* assumes no premature commitment */
720 want = o->op_flags & OPf_WANT;
721 if ((want && want != OPf_WANT_SCALAR) || PL_error_count
722 || o->op_type == OP_RETURN)
727 if ((o->op_private & OPpTARGET_MY)
728 && (PL_opargs[o->op_type] & OA_TARGLEX))/* OPp share the meaning */
730 return scalar(o); /* As if inside SASSIGN */
733 o->op_flags = (o->op_flags & ~OPf_WANT) | OPf_WANT_VOID;
735 switch (o->op_type) {
737 if (!(PL_opargs[o->op_type] & OA_FOLDCONST))
741 if (o->op_flags & OPf_STACKED)
745 if (o->op_private == 4)
817 if (!(o->op_private & (OPpLVAL_INTRO|OPpOUR_INTRO)))
818 useless = OP_DESC(o);
822 kid = cUNOPo->op_first;
823 if (kid->op_type != OP_MATCH && kid->op_type != OP_SUBST &&
824 kid->op_type != OP_TRANS) {
827 useless = "negative pattern binding (!~)";
834 if (!(o->op_private & (OPpLVAL_INTRO|OPpOUR_INTRO)) &&
835 (!o->op_sibling || o->op_sibling->op_type != OP_READLINE))
836 useless = "a variable";
841 if (cSVOPo->op_private & OPpCONST_STRICT)
842 no_bareword_allowed(o);
844 if (ckWARN(WARN_VOID)) {
845 useless = "a constant";
846 if (o->op_private & OPpCONST_ARYBASE)
848 /* don't warn on optimised away booleans, eg
849 * use constant Foo, 5; Foo || print; */
850 if (cSVOPo->op_private & OPpCONST_SHORTCIRCUIT)
852 /* the constants 0 and 1 are permitted as they are
853 conventionally used as dummies in constructs like
854 1 while some_condition_with_side_effects; */
855 else if (SvNIOK(sv) && (SvNV(sv) == 0.0 || SvNV(sv) == 1.0))
857 else if (SvPOK(sv)) {
858 /* perl4's way of mixing documentation and code
859 (before the invention of POD) was based on a
860 trick to mix nroff and perl code. The trick was
861 built upon these three nroff macros being used in
862 void context. The pink camel has the details in
863 the script wrapman near page 319. */
864 const char * const maybe_macro = SvPVX_const(sv);
865 if (strnEQ(maybe_macro, "di", 2) ||
866 strnEQ(maybe_macro, "ds", 2) ||
867 strnEQ(maybe_macro, "ig", 2))
872 op_null(o); /* don't execute or even remember it */
876 o->op_type = OP_PREINC; /* pre-increment is faster */
877 o->op_ppaddr = PL_ppaddr[OP_PREINC];
881 o->op_type = OP_PREDEC; /* pre-decrement is faster */
882 o->op_ppaddr = PL_ppaddr[OP_PREDEC];
886 o->op_type = OP_I_PREINC; /* pre-increment is faster */
887 o->op_ppaddr = PL_ppaddr[OP_I_PREINC];
891 o->op_type = OP_I_PREDEC; /* pre-decrement is faster */
892 o->op_ppaddr = PL_ppaddr[OP_I_PREDEC];
901 for (kid = cUNOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
906 if (o->op_flags & OPf_STACKED)
913 if (!(o->op_flags & OPf_KIDS))
924 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
931 /* all requires must return a boolean value */
932 o->op_flags &= ~OPf_WANT;
937 if ((kid = cLISTOPo->op_first) && kid->op_type == OP_PUSHRE) {
938 if (!kPMOP->op_pmreplroot)
939 deprecate_old("implicit split to @_");
943 if (useless && ckWARN(WARN_VOID))
944 Perl_warner(aTHX_ packWARN(WARN_VOID), "Useless use of %s in void context", useless);
949 Perl_listkids(pTHX_ OP *o)
951 if (o && o->op_flags & OPf_KIDS) {
953 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
960 Perl_list(pTHX_ OP *o)
965 /* assumes no premature commitment */
966 if (!o || (o->op_flags & OPf_WANT) || PL_error_count
967 || o->op_type == OP_RETURN)
972 if ((o->op_private & OPpTARGET_MY)
973 && (PL_opargs[o->op_type] & OA_TARGLEX))/* OPp share the meaning */
975 return o; /* As if inside SASSIGN */
978 o->op_flags = (o->op_flags & ~OPf_WANT) | OPf_WANT_LIST;
980 switch (o->op_type) {
983 list(cBINOPo->op_first);
988 for (kid = cUNOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
996 if (!(o->op_flags & OPf_KIDS))
998 if (!o->op_next && cUNOPo->op_first->op_type == OP_FLOP) {
999 list(cBINOPo->op_first);
1000 return gen_constant_list(o);
1007 kid = cLISTOPo->op_first;
1009 while ((kid = kid->op_sibling)) {
1010 if (kid->op_sibling)
1015 PL_curcop = &PL_compiling;
1019 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling) {
1020 if (kid->op_sibling)
1025 PL_curcop = &PL_compiling;
1028 /* all requires must return a boolean value */
1029 o->op_flags &= ~OPf_WANT;
1036 Perl_scalarseq(pTHX_ OP *o)
1040 const OPCODE type = o->op_type;
1042 if (type == OP_LINESEQ || type == OP_SCOPE ||
1043 type == OP_LEAVE || type == OP_LEAVETRY)
1046 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling) {
1047 if (kid->op_sibling) {
1051 PL_curcop = &PL_compiling;
1053 o->op_flags &= ~OPf_PARENS;
1054 if (PL_hints & HINT_BLOCK_SCOPE)
1055 o->op_flags |= OPf_PARENS;
1058 o = newOP(OP_STUB, 0);
1063 S_modkids(pTHX_ OP *o, I32 type)
1065 if (o && o->op_flags & OPf_KIDS) {
1067 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
1073 /* Propagate lvalue ("modifiable") context to an op and its children.
1074 * 'type' represents the context type, roughly based on the type of op that
1075 * would do the modifying, although local() is represented by OP_NULL.
1076 * It's responsible for detecting things that can't be modified, flag
1077 * things that need to behave specially in an lvalue context (e.g., "$$x = 5"
1078 * might have to vivify a reference in $x), and so on.
1080 * For example, "$a+1 = 2" would cause mod() to be called with o being
1081 * OP_ADD and type being OP_SASSIGN, and would output an error.
1085 Perl_mod(pTHX_ OP *o, I32 type)
1089 /* -1 = error on localize, 0 = ignore localize, 1 = ok to localize */
1092 if (!o || PL_error_count)
1095 if ((o->op_private & OPpTARGET_MY)
1096 && (PL_opargs[o->op_type] & OA_TARGLEX))/* OPp share the meaning */
1101 switch (o->op_type) {
1107 if (!(o->op_private & OPpCONST_ARYBASE))
1110 if (PL_eval_start && PL_eval_start->op_type == OP_CONST) {
1111 CopARYBASE_set(&PL_compiling,
1112 (I32)SvIV(cSVOPx(PL_eval_start)->op_sv));
1116 SAVECOPARYBASE(&PL_compiling);
1117 CopARYBASE_set(&PL_compiling, 0);
1119 else if (type == OP_REFGEN)
1122 Perl_croak(aTHX_ "That use of $[ is unsupported");
1125 if (o->op_flags & OPf_PARENS || PL_madskills)
1129 if ((type == OP_UNDEF || type == OP_REFGEN) &&
1130 !(o->op_flags & OPf_STACKED)) {
1131 o->op_type = OP_RV2CV; /* entersub => rv2cv */
1132 /* The default is to set op_private to the number of children,
1133 which for a UNOP such as RV2CV is always 1. And w're using
1134 the bit for a flag in RV2CV, so we need it clear. */
1135 o->op_private &= ~1;
1136 o->op_ppaddr = PL_ppaddr[OP_RV2CV];
1137 assert(cUNOPo->op_first->op_type == OP_NULL);
1138 op_null(((LISTOP*)cUNOPo->op_first)->op_first);/* disable pushmark */
1141 else if (o->op_private & OPpENTERSUB_NOMOD)
1143 else { /* lvalue subroutine call */
1144 o->op_private |= OPpLVAL_INTRO;
1145 PL_modcount = RETURN_UNLIMITED_NUMBER;
1146 if (type == OP_GREPSTART || type == OP_ENTERSUB || type == OP_REFGEN) {
1147 /* Backward compatibility mode: */
1148 o->op_private |= OPpENTERSUB_INARGS;
1151 else { /* Compile-time error message: */
1152 OP *kid = cUNOPo->op_first;
1156 if (kid->op_type != OP_PUSHMARK) {
1157 if (kid->op_type != OP_NULL || kid->op_targ != OP_LIST)
1159 "panic: unexpected lvalue entersub "
1160 "args: type/targ %ld:%"UVuf,
1161 (long)kid->op_type, (UV)kid->op_targ);
1162 kid = kLISTOP->op_first;
1164 while (kid->op_sibling)
1165 kid = kid->op_sibling;
1166 if (!(kid->op_type == OP_NULL && kid->op_targ == OP_RV2CV)) {
1168 if (kid->op_type == OP_METHOD_NAMED
1169 || kid->op_type == OP_METHOD)
1173 NewOp(1101, newop, 1, UNOP);
1174 newop->op_type = OP_RV2CV;
1175 newop->op_ppaddr = PL_ppaddr[OP_RV2CV];
1176 newop->op_first = NULL;
1177 newop->op_next = (OP*)newop;
1178 kid->op_sibling = (OP*)newop;
1179 newop->op_private |= OPpLVAL_INTRO;
1180 newop->op_private &= ~1;
1184 if (kid->op_type != OP_RV2CV)
1186 "panic: unexpected lvalue entersub "
1187 "entry via type/targ %ld:%"UVuf,
1188 (long)kid->op_type, (UV)kid->op_targ);
1189 kid->op_private |= OPpLVAL_INTRO;
1190 break; /* Postpone until runtime */
1194 kid = kUNOP->op_first;
1195 if (kid->op_type == OP_NULL && kid->op_targ == OP_RV2SV)
1196 kid = kUNOP->op_first;
1197 if (kid->op_type == OP_NULL)
1199 "Unexpected constant lvalue entersub "
1200 "entry via type/targ %ld:%"UVuf,
1201 (long)kid->op_type, (UV)kid->op_targ);
1202 if (kid->op_type != OP_GV) {
1203 /* Restore RV2CV to check lvalueness */
1205 if (kid->op_next && kid->op_next != kid) { /* Happens? */
1206 okid->op_next = kid->op_next;
1207 kid->op_next = okid;
1210 okid->op_next = NULL;
1211 okid->op_type = OP_RV2CV;
1213 okid->op_ppaddr = PL_ppaddr[OP_RV2CV];
1214 okid->op_private |= OPpLVAL_INTRO;
1215 okid->op_private &= ~1;
1219 cv = GvCV(kGVOP_gv);
1229 /* grep, foreach, subcalls, refgen */
1230 if (type == OP_GREPSTART || type == OP_ENTERSUB || type == OP_REFGEN)
1232 yyerror(Perl_form(aTHX_ "Can't modify %s in %s",
1233 (o->op_type == OP_NULL && (o->op_flags & OPf_SPECIAL)
1235 : (o->op_type == OP_ENTERSUB
1236 ? "non-lvalue subroutine call"
1238 type ? PL_op_desc[type] : "local"));
1252 case OP_RIGHT_SHIFT:
1261 if (!(o->op_flags & OPf_STACKED))
1268 for (kid = cUNOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
1274 if (type == OP_REFGEN && o->op_flags & OPf_PARENS) {
1275 PL_modcount = RETURN_UNLIMITED_NUMBER;
1276 return o; /* Treat \(@foo) like ordinary list. */
1280 if (scalar_mod_type(o, type))
1282 ref(cUNOPo->op_first, o->op_type);
1286 if (type == OP_LEAVESUBLV)
1287 o->op_private |= OPpMAYBE_LVSUB;
1293 PL_modcount = RETURN_UNLIMITED_NUMBER;
1296 ref(cUNOPo->op_first, o->op_type);
1301 PL_hints |= HINT_BLOCK_SCOPE;
1316 PL_modcount = RETURN_UNLIMITED_NUMBER;
1317 if (type == OP_REFGEN && o->op_flags & OPf_PARENS)
1318 return o; /* Treat \(@foo) like ordinary list. */
1319 if (scalar_mod_type(o, type))
1321 if (type == OP_LEAVESUBLV)
1322 o->op_private |= OPpMAYBE_LVSUB;
1326 if (!type) /* local() */
1327 Perl_croak(aTHX_ "Can't localize lexical variable %s",
1328 PAD_COMPNAME_PV(o->op_targ));
1336 if (type != OP_SASSIGN)
1340 if (o->op_private == 4) /* don't allow 4 arg substr as lvalue */
1345 if (type == OP_LEAVESUBLV)
1346 o->op_private |= OPpMAYBE_LVSUB;
1348 pad_free(o->op_targ);
1349 o->op_targ = pad_alloc(o->op_type, SVs_PADMY);
1350 assert(SvTYPE(PAD_SV(o->op_targ)) == SVt_NULL);
1351 if (o->op_flags & OPf_KIDS)
1352 mod(cBINOPo->op_first->op_sibling, type);
1357 ref(cBINOPo->op_first, o->op_type);
1358 if (type == OP_ENTERSUB &&
1359 !(o->op_private & (OPpLVAL_INTRO | OPpDEREF)))
1360 o->op_private |= OPpLVAL_DEFER;
1361 if (type == OP_LEAVESUBLV)
1362 o->op_private |= OPpMAYBE_LVSUB;
1372 if (o->op_flags & OPf_KIDS)
1373 mod(cLISTOPo->op_last, type);
1378 if (o->op_flags & OPf_SPECIAL) /* do BLOCK */
1380 else if (!(o->op_flags & OPf_KIDS))
1382 if (o->op_targ != OP_LIST) {
1383 mod(cBINOPo->op_first, type);
1389 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
1394 if (type != OP_LEAVESUBLV)
1396 break; /* mod()ing was handled by ck_return() */
1399 /* [20011101.069] File test operators interpret OPf_REF to mean that
1400 their argument is a filehandle; thus \stat(".") should not set
1402 if (type == OP_REFGEN &&
1403 PL_check[o->op_type] == MEMBER_TO_FPTR(Perl_ck_ftst))
1406 if (type != OP_LEAVESUBLV)
1407 o->op_flags |= OPf_MOD;
1409 if (type == OP_AASSIGN || type == OP_SASSIGN)
1410 o->op_flags |= OPf_SPECIAL|OPf_REF;
1411 else if (!type) { /* local() */
1414 o->op_private |= OPpLVAL_INTRO;
1415 o->op_flags &= ~OPf_SPECIAL;
1416 PL_hints |= HINT_BLOCK_SCOPE;
1421 if (ckWARN(WARN_SYNTAX)) {
1422 Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
1423 "Useless localization of %s", OP_DESC(o));
1427 else if (type != OP_GREPSTART && type != OP_ENTERSUB
1428 && type != OP_LEAVESUBLV)
1429 o->op_flags |= OPf_REF;
1434 S_scalar_mod_type(const OP *o, I32 type)
1438 if (o->op_type == OP_RV2GV)
1462 case OP_RIGHT_SHIFT:
1481 S_is_handle_constructor(const OP *o, I32 numargs)
1483 switch (o->op_type) {
1491 case OP_SELECT: /* XXX c.f. SelectSaver.pm */
1504 Perl_refkids(pTHX_ OP *o, I32 type)
1506 if (o && o->op_flags & OPf_KIDS) {
1508 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
1515 Perl_doref(pTHX_ OP *o, I32 type, bool set_op_ref)
1520 if (!o || PL_error_count)
1523 switch (o->op_type) {
1525 if ((type == OP_EXISTS || type == OP_DEFINED || type == OP_LOCK) &&
1526 !(o->op_flags & OPf_STACKED)) {
1527 o->op_type = OP_RV2CV; /* entersub => rv2cv */
1528 o->op_ppaddr = PL_ppaddr[OP_RV2CV];
1529 assert(cUNOPo->op_first->op_type == OP_NULL);
1530 op_null(((LISTOP*)cUNOPo->op_first)->op_first); /* disable pushmark */
1531 o->op_flags |= OPf_SPECIAL;
1532 o->op_private &= ~1;
1537 for (kid = cUNOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
1538 doref(kid, type, set_op_ref);
1541 if (type == OP_DEFINED)
1542 o->op_flags |= OPf_SPECIAL; /* don't create GV */
1543 doref(cUNOPo->op_first, o->op_type, set_op_ref);
1546 if (type == OP_RV2SV || type == OP_RV2AV || type == OP_RV2HV) {
1547 o->op_private |= (type == OP_RV2AV ? OPpDEREF_AV
1548 : type == OP_RV2HV ? OPpDEREF_HV
1550 o->op_flags |= OPf_MOD;
1555 o->op_flags |= OPf_MOD; /* XXX ??? */
1561 o->op_flags |= OPf_REF;
1564 if (type == OP_DEFINED)
1565 o->op_flags |= OPf_SPECIAL; /* don't create GV */
1566 doref(cUNOPo->op_first, o->op_type, set_op_ref);
1572 o->op_flags |= OPf_REF;
1577 if (!(o->op_flags & OPf_KIDS))
1579 doref(cBINOPo->op_first, type, set_op_ref);
1583 doref(cBINOPo->op_first, o->op_type, set_op_ref);
1584 if (type == OP_RV2SV || type == OP_RV2AV || type == OP_RV2HV) {
1585 o->op_private |= (type == OP_RV2AV ? OPpDEREF_AV
1586 : type == OP_RV2HV ? OPpDEREF_HV
1588 o->op_flags |= OPf_MOD;
1598 if (!(o->op_flags & OPf_KIDS))
1600 doref(cLISTOPo->op_last, type, set_op_ref);
1610 S_dup_attrlist(pTHX_ OP *o)
1615 /* An attrlist is either a simple OP_CONST or an OP_LIST with kids,
1616 * where the first kid is OP_PUSHMARK and the remaining ones
1617 * are OP_CONST. We need to push the OP_CONST values.
1619 if (o->op_type == OP_CONST)
1620 rop = newSVOP(OP_CONST, o->op_flags, SvREFCNT_inc_NN(cSVOPo->op_sv));
1622 else if (o->op_type == OP_NULL)
1626 assert((o->op_type == OP_LIST) && (o->op_flags & OPf_KIDS));
1628 for (o = cLISTOPo->op_first; o; o=o->op_sibling) {
1629 if (o->op_type == OP_CONST)
1630 rop = append_elem(OP_LIST, rop,
1631 newSVOP(OP_CONST, o->op_flags,
1632 SvREFCNT_inc_NN(cSVOPo->op_sv)));
1639 S_apply_attrs(pTHX_ HV *stash, SV *target, OP *attrs, bool for_my)
1644 /* fake up C<use attributes $pkg,$rv,@attrs> */
1645 ENTER; /* need to protect against side-effects of 'use' */
1647 stashsv = stash ? newSVhek(HvNAME_HEK(stash)) : &PL_sv_no;
1649 #define ATTRSMODULE "attributes"
1650 #define ATTRSMODULE_PM "attributes.pm"
1653 /* Don't force the C<use> if we don't need it. */
1654 SV * const * const svp = hv_fetchs(GvHVn(PL_incgv), ATTRSMODULE_PM, FALSE);
1655 if (svp && *svp != &PL_sv_undef)
1656 NOOP; /* already in %INC */
1658 Perl_load_module(aTHX_ PERL_LOADMOD_NOIMPORT,
1659 newSVpvs(ATTRSMODULE), NULL);
1662 Perl_load_module(aTHX_ PERL_LOADMOD_IMPORT_OPS,
1663 newSVpvs(ATTRSMODULE),
1665 prepend_elem(OP_LIST,
1666 newSVOP(OP_CONST, 0, stashsv),
1667 prepend_elem(OP_LIST,
1668 newSVOP(OP_CONST, 0,
1670 dup_attrlist(attrs))));
1676 S_apply_attrs_my(pTHX_ HV *stash, OP *target, OP *attrs, OP **imopsp)
1679 OP *pack, *imop, *arg;
1685 assert(target->op_type == OP_PADSV ||
1686 target->op_type == OP_PADHV ||
1687 target->op_type == OP_PADAV);
1689 /* Ensure that attributes.pm is loaded. */
1690 apply_attrs(stash, PAD_SV(target->op_targ), attrs, TRUE);
1692 /* Need package name for method call. */
1693 pack = newSVOP(OP_CONST, 0, newSVpvs(ATTRSMODULE));
1695 /* Build up the real arg-list. */
1696 stashsv = stash ? newSVhek(HvNAME_HEK(stash)) : &PL_sv_no;
1698 arg = newOP(OP_PADSV, 0);
1699 arg->op_targ = target->op_targ;
1700 arg = prepend_elem(OP_LIST,
1701 newSVOP(OP_CONST, 0, stashsv),
1702 prepend_elem(OP_LIST,
1703 newUNOP(OP_REFGEN, 0,
1704 mod(arg, OP_REFGEN)),
1705 dup_attrlist(attrs)));
1707 /* Fake up a method call to import */
1708 meth = newSVpvs_share("import");
1709 imop = convert(OP_ENTERSUB, OPf_STACKED|OPf_SPECIAL|OPf_WANT_VOID,
1710 append_elem(OP_LIST,
1711 prepend_elem(OP_LIST, pack, list(arg)),
1712 newSVOP(OP_METHOD_NAMED, 0, meth)));
1713 imop->op_private |= OPpENTERSUB_NOMOD;
1715 /* Combine the ops. */
1716 *imopsp = append_elem(OP_LIST, *imopsp, imop);
1720 =notfor apidoc apply_attrs_string
1722 Attempts to apply a list of attributes specified by the C<attrstr> and
1723 C<len> arguments to the subroutine identified by the C<cv> argument which
1724 is expected to be associated with the package identified by the C<stashpv>
1725 argument (see L<attributes>). It gets this wrong, though, in that it
1726 does not correctly identify the boundaries of the individual attribute
1727 specifications within C<attrstr>. This is not really intended for the
1728 public API, but has to be listed here for systems such as AIX which
1729 need an explicit export list for symbols. (It's called from XS code
1730 in support of the C<ATTRS:> keyword from F<xsubpp>.) Patches to fix it
1731 to respect attribute syntax properly would be welcome.
1737 Perl_apply_attrs_string(pTHX_ const char *stashpv, CV *cv,
1738 const char *attrstr, STRLEN len)
1743 len = strlen(attrstr);
1747 for (; isSPACE(*attrstr) && len; --len, ++attrstr) ;
1749 const char * const sstr = attrstr;
1750 for (; !isSPACE(*attrstr) && len; --len, ++attrstr) ;
1751 attrs = append_elem(OP_LIST, attrs,
1752 newSVOP(OP_CONST, 0,
1753 newSVpvn(sstr, attrstr-sstr)));
1757 Perl_load_module(aTHX_ PERL_LOADMOD_IMPORT_OPS,
1758 newSVpvs(ATTRSMODULE),
1759 NULL, prepend_elem(OP_LIST,
1760 newSVOP(OP_CONST, 0, newSVpv(stashpv,0)),
1761 prepend_elem(OP_LIST,
1762 newSVOP(OP_CONST, 0,
1768 S_my_kid(pTHX_ OP *o, OP *attrs, OP **imopsp)
1773 if (!o || PL_error_count)
1777 if (PL_madskills && type == OP_NULL && o->op_flags & OPf_KIDS) {
1778 (void)my_kid(cUNOPo->op_first, attrs, imopsp);
1782 if (type == OP_LIST) {
1784 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
1785 my_kid(kid, attrs, imopsp);
1786 } else if (type == OP_UNDEF
1792 } else if (type == OP_RV2SV || /* "our" declaration */
1794 type == OP_RV2HV) { /* XXX does this let anything illegal in? */
1795 if (cUNOPo->op_first->op_type != OP_GV) { /* MJD 20011224 */
1796 yyerror(Perl_form(aTHX_ "Can't declare %s in \"%s\"",
1798 PL_in_my == KEY_our ? "our" : PL_in_my == KEY_state ? "state" : "my"));
1800 GV * const gv = cGVOPx_gv(cUNOPo->op_first);
1802 PL_in_my_stash = NULL;
1803 apply_attrs(GvSTASH(gv),
1804 (type == OP_RV2SV ? GvSV(gv) :
1805 type == OP_RV2AV ? (SV*)GvAV(gv) :
1806 type == OP_RV2HV ? (SV*)GvHV(gv) : (SV*)gv),
1809 o->op_private |= OPpOUR_INTRO;
1812 else if (type != OP_PADSV &&
1815 type != OP_PUSHMARK)
1817 yyerror(Perl_form(aTHX_ "Can't declare %s in \"%s\"",
1819 PL_in_my == KEY_our ? "our" : PL_in_my == KEY_state ? "state" : "my"));
1822 else if (attrs && type != OP_PUSHMARK) {
1826 PL_in_my_stash = NULL;
1828 /* check for C<my Dog $spot> when deciding package */
1829 stash = PAD_COMPNAME_TYPE(o->op_targ);
1831 stash = PL_curstash;
1832 apply_attrs_my(stash, o, attrs, imopsp);
1834 o->op_flags |= OPf_MOD;
1835 o->op_private |= OPpLVAL_INTRO;
1836 if (PL_in_my == KEY_state)
1837 o->op_private |= OPpPAD_STATE;
1842 Perl_my_attrs(pTHX_ OP *o, OP *attrs)
1846 int maybe_scalar = 0;
1848 /* [perl #17376]: this appears to be premature, and results in code such as
1849 C< our(%x); > executing in list mode rather than void mode */
1851 if (o->op_flags & OPf_PARENS)
1861 o = my_kid(o, attrs, &rops);
1863 if (maybe_scalar && o->op_type == OP_PADSV) {
1864 o = scalar(append_list(OP_LIST, (LISTOP*)rops, (LISTOP*)o));
1865 o->op_private |= OPpLVAL_INTRO;
1868 o = append_list(OP_LIST, (LISTOP*)o, (LISTOP*)rops);
1871 PL_in_my_stash = NULL;
1876 Perl_my(pTHX_ OP *o)
1878 return my_attrs(o, NULL);
1882 Perl_sawparens(pTHX_ OP *o)
1884 PERL_UNUSED_CONTEXT;
1886 o->op_flags |= OPf_PARENS;
1891 Perl_bind_match(pTHX_ I32 type, OP *left, OP *right)
1895 const OPCODE ltype = left->op_type;
1896 const OPCODE rtype = right->op_type;
1898 if ( (ltype == OP_RV2AV || ltype == OP_RV2HV || ltype == OP_PADAV
1899 || ltype == OP_PADHV) && ckWARN(WARN_MISC))
1901 const char * const desc
1902 = PL_op_desc[(rtype == OP_SUBST || rtype == OP_TRANS)
1903 ? (int)rtype : OP_MATCH];
1904 const char * const sample = ((ltype == OP_RV2AV || ltype == OP_PADAV)
1905 ? "@array" : "%hash");
1906 Perl_warner(aTHX_ packWARN(WARN_MISC),
1907 "Applying %s to %s will act on scalar(%s)",
1908 desc, sample, sample);
1911 if (rtype == OP_CONST &&
1912 cSVOPx(right)->op_private & OPpCONST_BARE &&
1913 cSVOPx(right)->op_private & OPpCONST_STRICT)
1915 no_bareword_allowed(right);
1918 ismatchop = rtype == OP_MATCH ||
1919 rtype == OP_SUBST ||
1921 if (ismatchop && right->op_private & OPpTARGET_MY) {
1923 right->op_private &= ~OPpTARGET_MY;
1925 if (!(right->op_flags & OPf_STACKED) && ismatchop) {
1928 right->op_flags |= OPf_STACKED;
1929 if (rtype != OP_MATCH &&
1930 ! (rtype == OP_TRANS &&
1931 right->op_private & OPpTRANS_IDENTICAL))
1932 newleft = mod(left, rtype);
1935 if (right->op_type == OP_TRANS)
1936 o = newBINOP(OP_NULL, OPf_STACKED, scalar(newleft), right);
1938 o = prepend_elem(rtype, scalar(newleft), right);
1940 return newUNOP(OP_NOT, 0, scalar(o));
1944 return bind_match(type, left,
1945 pmruntime(newPMOP(OP_MATCH, 0), right, 0));
1949 Perl_invert(pTHX_ OP *o)
1953 return newUNOP(OP_NOT, OPf_SPECIAL, scalar(o));
1957 Perl_scope(pTHX_ OP *o)
1961 if (o->op_flags & OPf_PARENS || PERLDB_NOOPT || PL_tainting) {
1962 o = prepend_elem(OP_LINESEQ, newOP(OP_ENTER, 0), o);
1963 o->op_type = OP_LEAVE;
1964 o->op_ppaddr = PL_ppaddr[OP_LEAVE];
1966 else if (o->op_type == OP_LINESEQ) {
1968 o->op_type = OP_SCOPE;
1969 o->op_ppaddr = PL_ppaddr[OP_SCOPE];
1970 kid = ((LISTOP*)o)->op_first;
1971 if (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) {
1974 /* The following deals with things like 'do {1 for 1}' */
1975 kid = kid->op_sibling;
1977 (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE))
1982 o = newLISTOP(OP_SCOPE, 0, o, NULL);
1988 Perl_block_start(pTHX_ int full)
1991 const int retval = PL_savestack_ix;
1992 pad_block_start(full);
1994 PL_hints &= ~HINT_BLOCK_SCOPE;
1995 SAVECOMPILEWARNINGS();
1996 PL_compiling.cop_warnings = DUP_WARNINGS(PL_compiling.cop_warnings);
2001 Perl_block_end(pTHX_ I32 floor, OP *seq)
2004 const int needblockscope = PL_hints & HINT_BLOCK_SCOPE;
2005 OP* const retval = scalarseq(seq);
2007 CopHINTS_set(&PL_compiling, PL_hints);
2009 PL_hints |= HINT_BLOCK_SCOPE; /* propagate out */
2018 const PADOFFSET offset = pad_findmy("$_");
2019 if (offset == NOT_IN_PAD || PAD_COMPNAME_FLAGS_isOUR(offset)) {
2020 return newSVREF(newGVOP(OP_GV, 0, PL_defgv));
2023 OP * const o = newOP(OP_PADSV, 0);
2024 o->op_targ = offset;
2030 Perl_newPROG(pTHX_ OP *o)
2036 PL_eval_root = newUNOP(OP_LEAVEEVAL,
2037 ((PL_in_eval & EVAL_KEEPERR)
2038 ? OPf_SPECIAL : 0), o);
2039 PL_eval_start = linklist(PL_eval_root);
2040 PL_eval_root->op_private |= OPpREFCOUNTED;
2041 OpREFCNT_set(PL_eval_root, 1);
2042 PL_eval_root->op_next = 0;
2043 CALL_PEEP(PL_eval_start);
2046 if (o->op_type == OP_STUB) {
2047 PL_comppad_name = 0;
2049 S_op_destroy(aTHX_ o);
2052 PL_main_root = scope(sawparens(scalarvoid(o)));
2053 PL_curcop = &PL_compiling;
2054 PL_main_start = LINKLIST(PL_main_root);
2055 PL_main_root->op_private |= OPpREFCOUNTED;
2056 OpREFCNT_set(PL_main_root, 1);
2057 PL_main_root->op_next = 0;
2058 CALL_PEEP(PL_main_start);
2061 /* Register with debugger */
2063 CV * const cv = get_cv("DB::postponed", FALSE);
2067 XPUSHs((SV*)CopFILEGV(&PL_compiling));
2069 call_sv((SV*)cv, G_DISCARD);
2076 Perl_localize(pTHX_ OP *o, I32 lex)
2079 if (o->op_flags & OPf_PARENS)
2080 /* [perl #17376]: this appears to be premature, and results in code such as
2081 C< our(%x); > executing in list mode rather than void mode */
2088 if ( PL_bufptr > PL_oldbufptr && PL_bufptr[-1] == ','
2089 && ckWARN(WARN_PARENTHESIS))
2091 char *s = PL_bufptr;
2094 /* some heuristics to detect a potential error */
2095 while (*s && (strchr(", \t\n", *s)))
2099 if (*s && strchr("@$%*", *s) && *++s
2100 && (isALNUM(*s) || UTF8_IS_CONTINUED(*s))) {
2103 while (*s && (isALNUM(*s) || UTF8_IS_CONTINUED(*s)))
2105 while (*s && (strchr(", \t\n", *s)))
2111 if (sigil && (*s == ';' || *s == '=')) {
2112 Perl_warner(aTHX_ packWARN(WARN_PARENTHESIS),
2113 "Parentheses missing around \"%s\" list",
2114 lex ? (PL_in_my == KEY_our ? "our" : PL_in_my == KEY_state ? "state" : "my")
2122 o = mod(o, OP_NULL); /* a bit kludgey */
2124 PL_in_my_stash = NULL;
2129 Perl_jmaybe(pTHX_ OP *o)
2131 if (o->op_type == OP_LIST) {
2133 = newSVREF(newGVOP(OP_GV, 0, gv_fetchpvs(";", GV_ADD|GV_NOTQUAL, SVt_PV)));
2134 o = convert(OP_JOIN, 0, prepend_elem(OP_LIST, o2, o));
2140 Perl_fold_constants(pTHX_ register OP *o)
2145 VOL I32 type = o->op_type;
2150 SV * const oldwarnhook = PL_warnhook;
2151 SV * const olddiehook = PL_diehook;
2154 if (PL_opargs[type] & OA_RETSCALAR)
2156 if (PL_opargs[type] & OA_TARGET && !o->op_targ)
2157 o->op_targ = pad_alloc(type, SVs_PADTMP);
2159 /* integerize op, unless it happens to be C<-foo>.
2160 * XXX should pp_i_negate() do magic string negation instead? */
2161 if ((PL_opargs[type] & OA_OTHERINT) && (PL_hints & HINT_INTEGER)
2162 && !(type == OP_NEGATE && cUNOPo->op_first->op_type == OP_CONST
2163 && (cUNOPo->op_first->op_private & OPpCONST_BARE)))
2165 o->op_ppaddr = PL_ppaddr[type = ++(o->op_type)];
2168 if (!(PL_opargs[type] & OA_FOLDCONST))
2173 /* XXX might want a ck_negate() for this */
2174 cUNOPo->op_first->op_private &= ~OPpCONST_STRICT;
2185 /* XXX what about the numeric ops? */
2186 if (PL_hints & HINT_LOCALE)
2191 goto nope; /* Don't try to run w/ errors */
2193 for (curop = LINKLIST(o); curop != o; curop = LINKLIST(curop)) {
2194 const OPCODE type = curop->op_type;
2195 if ((type != OP_CONST || (curop->op_private & OPpCONST_BARE)) &&
2197 type != OP_SCALAR &&
2199 type != OP_PUSHMARK)
2205 curop = LINKLIST(o);
2206 old_next = o->op_next;
2210 oldscope = PL_scopestack_ix;
2211 create_eval_scope(G_FAKINGEVAL);
2213 PL_warnhook = PERL_WARNHOOK_FATAL;
2220 sv = *(PL_stack_sp--);
2221 if (o->op_targ && sv == PAD_SV(o->op_targ)) /* grab pad temp? */
2222 pad_swipe(o->op_targ, FALSE);
2223 else if (SvTEMP(sv)) { /* grab mortal temp? */
2224 SvREFCNT_inc_simple_void(sv);
2229 /* Something tried to die. Abandon constant folding. */
2230 /* Pretend the error never happened. */
2231 sv_setpvn(ERRSV,"",0);
2232 o->op_next = old_next;
2236 /* Don't expect 1 (setjmp failed) or 2 (something called my_exit) */
2237 PL_warnhook = oldwarnhook;
2238 PL_diehook = olddiehook;
2239 /* XXX note that this croak may fail as we've already blown away
2240 * the stack - eg any nested evals */
2241 Perl_croak(aTHX_ "panic: fold_constants JMPENV_PUSH returned %d", ret);
2244 PL_warnhook = oldwarnhook;
2245 PL_diehook = olddiehook;
2247 if (PL_scopestack_ix > oldscope)
2248 delete_eval_scope();
2257 if (type == OP_RV2GV)
2258 newop = newGVOP(OP_GV, 0, (GV*)sv);
2260 newop = newSVOP(OP_CONST, 0, (SV*)sv);
2261 op_getmad(o,newop,'f');
2269 Perl_gen_constant_list(pTHX_ register OP *o)
2273 const I32 oldtmps_floor = PL_tmps_floor;
2277 return o; /* Don't attempt to run with errors */
2279 PL_op = curop = LINKLIST(o);
2285 assert (!(curop->op_flags & OPf_SPECIAL));
2286 assert(curop->op_type == OP_RANGE);
2288 PL_tmps_floor = oldtmps_floor;
2290 o->op_type = OP_RV2AV;
2291 o->op_ppaddr = PL_ppaddr[OP_RV2AV];
2292 o->op_flags &= ~OPf_REF; /* treat \(1..2) like an ordinary list */
2293 o->op_flags |= OPf_PARENS; /* and flatten \(1..2,3) */
2294 o->op_opt = 0; /* needs to be revisited in peep() */
2295 curop = ((UNOP*)o)->op_first;
2296 ((UNOP*)o)->op_first = newSVOP(OP_CONST, 0, SvREFCNT_inc_NN(*PL_stack_sp--));
2298 op_getmad(curop,o,'O');
2307 Perl_convert(pTHX_ I32 type, I32 flags, OP *o)
2310 if (!o || o->op_type != OP_LIST)
2311 o = newLISTOP(OP_LIST, 0, o, NULL);
2313 o->op_flags &= ~OPf_WANT;
2315 if (!(PL_opargs[type] & OA_MARK))
2316 op_null(cLISTOPo->op_first);
2318 o->op_type = (OPCODE)type;
2319 o->op_ppaddr = PL_ppaddr[type];
2320 o->op_flags |= flags;
2322 o = CHECKOP(type, o);
2323 if (o->op_type != (unsigned)type)
2326 return fold_constants(o);
2329 /* List constructors */
2332 Perl_append_elem(pTHX_ I32 type, OP *first, OP *last)
2340 if (first->op_type != (unsigned)type
2341 || (type == OP_LIST && (first->op_flags & OPf_PARENS)))
2343 return newLISTOP(type, 0, first, last);
2346 if (first->op_flags & OPf_KIDS)
2347 ((LISTOP*)first)->op_last->op_sibling = last;
2349 first->op_flags |= OPf_KIDS;
2350 ((LISTOP*)first)->op_first = last;
2352 ((LISTOP*)first)->op_last = last;
2357 Perl_append_list(pTHX_ I32 type, LISTOP *first, LISTOP *last)
2365 if (first->op_type != (unsigned)type)
2366 return prepend_elem(type, (OP*)first, (OP*)last);
2368 if (last->op_type != (unsigned)type)
2369 return append_elem(type, (OP*)first, (OP*)last);
2371 first->op_last->op_sibling = last->op_first;
2372 first->op_last = last->op_last;
2373 first->op_flags |= (last->op_flags & OPf_KIDS);
2376 if (last->op_first && first->op_madprop) {
2377 MADPROP *mp = last->op_first->op_madprop;
2379 while (mp->mad_next)
2381 mp->mad_next = first->op_madprop;
2384 last->op_first->op_madprop = first->op_madprop;
2387 first->op_madprop = last->op_madprop;
2388 last->op_madprop = 0;
2391 S_op_destroy(aTHX_ (OP*)last);
2397 Perl_prepend_elem(pTHX_ I32 type, OP *first, OP *last)
2405 if (last->op_type == (unsigned)type) {
2406 if (type == OP_LIST) { /* already a PUSHMARK there */
2407 first->op_sibling = ((LISTOP*)last)->op_first->op_sibling;
2408 ((LISTOP*)last)->op_first->op_sibling = first;
2409 if (!(first->op_flags & OPf_PARENS))
2410 last->op_flags &= ~OPf_PARENS;
2413 if (!(last->op_flags & OPf_KIDS)) {
2414 ((LISTOP*)last)->op_last = first;
2415 last->op_flags |= OPf_KIDS;
2417 first->op_sibling = ((LISTOP*)last)->op_first;
2418 ((LISTOP*)last)->op_first = first;
2420 last->op_flags |= OPf_KIDS;
2424 return newLISTOP(type, 0, first, last);
2432 Perl_newTOKEN(pTHX_ I32 optype, YYSTYPE lval, MADPROP* madprop)
2435 Newxz(tk, 1, TOKEN);
2436 tk->tk_type = (OPCODE)optype;
2437 tk->tk_type = 12345;
2439 tk->tk_mad = madprop;
2444 Perl_token_free(pTHX_ TOKEN* tk)
2446 if (tk->tk_type != 12345)
2448 mad_free(tk->tk_mad);
2453 Perl_token_getmad(pTHX_ TOKEN* tk, OP* o, char slot)
2457 if (tk->tk_type != 12345) {
2458 Perl_warner(aTHX_ packWARN(WARN_MISC),
2459 "Invalid TOKEN object ignored");
2466 /* faked up qw list? */
2468 tm->mad_type == MAD_SV &&
2469 SvPVX((SV*)tm->mad_val)[0] == 'q')
2476 /* pretend constant fold didn't happen? */
2477 if (mp->mad_key == 'f' &&
2478 (o->op_type == OP_CONST ||
2479 o->op_type == OP_GV) )
2481 token_getmad(tk,(OP*)mp->mad_val,slot);
2495 if (mp->mad_key == 'X')
2496 mp->mad_key = slot; /* just change the first one */
2506 Perl_op_getmad_weak(pTHX_ OP* from, OP* o, char slot)
2515 /* pretend constant fold didn't happen? */
2516 if (mp->mad_key == 'f' &&
2517 (o->op_type == OP_CONST ||
2518 o->op_type == OP_GV) )
2520 op_getmad(from,(OP*)mp->mad_val,slot);
2527 mp->mad_next = newMADPROP(slot,MAD_OP,from,0);
2530 o->op_madprop = newMADPROP(slot,MAD_OP,from,0);
2536 Perl_op_getmad(pTHX_ OP* from, OP* o, char slot)
2545 /* pretend constant fold didn't happen? */
2546 if (mp->mad_key == 'f' &&
2547 (o->op_type == OP_CONST ||
2548 o->op_type == OP_GV) )
2550 op_getmad(from,(OP*)mp->mad_val,slot);
2557 mp->mad_next = newMADPROP(slot,MAD_OP,from,1);
2560 o->op_madprop = newMADPROP(slot,MAD_OP,from,1);
2564 PerlIO_printf(PerlIO_stderr(),
2565 "DESTROYING op = %0"UVxf"\n", PTR2UV(from));
2571 Perl_prepend_madprops(pTHX_ MADPROP* mp, OP* o, char slot)
2589 Perl_append_madprops(pTHX_ MADPROP* tm, OP* o, char slot)
2593 addmad(tm, &(o->op_madprop), slot);
2597 Perl_addmad(pTHX_ MADPROP* tm, MADPROP** root, char slot)
2618 Perl_newMADsv(pTHX_ char key, SV* sv)
2620 return newMADPROP(key, MAD_SV, sv, 0);
2624 Perl_newMADPROP(pTHX_ char key, char type, void* val, I32 vlen)
2627 Newxz(mp, 1, MADPROP);
2630 mp->mad_vlen = vlen;
2631 mp->mad_type = type;
2633 /* PerlIO_printf(PerlIO_stderr(), "NEW mp = %0x\n", mp); */
2638 Perl_mad_free(pTHX_ MADPROP* mp)
2640 /* PerlIO_printf(PerlIO_stderr(), "FREE mp = %0x\n", mp); */
2644 mad_free(mp->mad_next);
2645 /* if (PL_lex_state != LEX_NOTPARSING && mp->mad_vlen)
2646 PerlIO_printf(PerlIO_stderr(), "DESTROYING '%c'=<%s>\n", mp->mad_key & 255, mp->mad_val); */
2647 switch (mp->mad_type) {
2651 Safefree((char*)mp->mad_val);
2654 if (mp->mad_vlen) /* vlen holds "strong/weak" boolean */
2655 op_free((OP*)mp->mad_val);
2658 sv_free((SV*)mp->mad_val);
2661 PerlIO_printf(PerlIO_stderr(), "Unrecognized mad\n");
2670 Perl_newNULLLIST(pTHX)
2672 return newOP(OP_STUB, 0);
2676 Perl_force_list(pTHX_ OP *o)
2678 if (!o || o->op_type != OP_LIST)
2679 o = newLISTOP(OP_LIST, 0, o, NULL);
2685 Perl_newLISTOP(pTHX_ I32 type, I32 flags, OP *first, OP *last)
2690 NewOp(1101, listop, 1, LISTOP);
2692 listop->op_type = (OPCODE)type;
2693 listop->op_ppaddr = PL_ppaddr[type];
2696 listop->op_flags = (U8)flags;
2700 else if (!first && last)
2703 first->op_sibling = last;
2704 listop->op_first = first;
2705 listop->op_last = last;
2706 if (type == OP_LIST) {
2707 OP* const pushop = newOP(OP_PUSHMARK, 0);
2708 pushop->op_sibling = first;
2709 listop->op_first = pushop;
2710 listop->op_flags |= OPf_KIDS;
2712 listop->op_last = pushop;
2715 return CHECKOP(type, listop);
2719 Perl_newOP(pTHX_ I32 type, I32 flags)
2723 NewOp(1101, o, 1, OP);
2724 o->op_type = (OPCODE)type;
2725 o->op_ppaddr = PL_ppaddr[type];
2726 o->op_flags = (U8)flags;
2728 o->op_latefreed = 0;
2731 o->op_private = (U8)(0 | (flags >> 8));
2732 if (PL_opargs[type] & OA_RETSCALAR)
2734 if (PL_opargs[type] & OA_TARGET)
2735 o->op_targ = pad_alloc(type, SVs_PADTMP);
2736 return CHECKOP(type, o);
2740 Perl_newUNOP(pTHX_ I32 type, I32 flags, OP *first)
2746 first = newOP(OP_STUB, 0);
2747 if (PL_opargs[type] & OA_MARK)
2748 first = force_list(first);
2750 NewOp(1101, unop, 1, UNOP);
2751 unop->op_type = (OPCODE)type;
2752 unop->op_ppaddr = PL_ppaddr[type];
2753 unop->op_first = first;
2754 unop->op_flags = (U8)(flags | OPf_KIDS);
2755 unop->op_private = (U8)(1 | (flags >> 8));
2756 unop = (UNOP*) CHECKOP(type, unop);
2760 return fold_constants((OP *) unop);
2764 Perl_newBINOP(pTHX_ I32 type, I32 flags, OP *first, OP *last)
2768 NewOp(1101, binop, 1, BINOP);
2771 first = newOP(OP_NULL, 0);
2773 binop->op_type = (OPCODE)type;
2774 binop->op_ppaddr = PL_ppaddr[type];
2775 binop->op_first = first;
2776 binop->op_flags = (U8)(flags | OPf_KIDS);
2779 binop->op_private = (U8)(1 | (flags >> 8));
2782 binop->op_private = (U8)(2 | (flags >> 8));
2783 first->op_sibling = last;
2786 binop = (BINOP*)CHECKOP(type, binop);
2787 if (binop->op_next || binop->op_type != (OPCODE)type)
2790 binop->op_last = binop->op_first->op_sibling;
2792 return fold_constants((OP *)binop);
2795 static int uvcompare(const void *a, const void *b)
2796 __attribute__nonnull__(1)
2797 __attribute__nonnull__(2)
2798 __attribute__pure__;
2799 static int uvcompare(const void *a, const void *b)
2801 if (*((const UV *)a) < (*(const UV *)b))
2803 if (*((const UV *)a) > (*(const UV *)b))
2805 if (*((const UV *)a+1) < (*(const UV *)b+1))
2807 if (*((const UV *)a+1) > (*(const UV *)b+1))
2813 Perl_pmtrans(pTHX_ OP *o, OP *expr, OP *repl)
2816 SV * const tstr = ((SVOP*)expr)->op_sv;
2819 (repl->op_type == OP_NULL)
2820 ? ((SVOP*)((LISTOP*)repl)->op_first)->op_sv :
2822 ((SVOP*)repl)->op_sv;
2825 const U8 *t = (U8*)SvPV_const(tstr, tlen);
2826 const U8 *r = (U8*)SvPV_const(rstr, rlen);
2830 register short *tbl;
2832 const I32 complement = o->op_private & OPpTRANS_COMPLEMENT;
2833 const I32 squash = o->op_private & OPpTRANS_SQUASH;
2834 I32 del = o->op_private & OPpTRANS_DELETE;
2835 PL_hints |= HINT_BLOCK_SCOPE;
2838 o->op_private |= OPpTRANS_FROM_UTF;
2841 o->op_private |= OPpTRANS_TO_UTF;
2843 if (o->op_private & (OPpTRANS_FROM_UTF|OPpTRANS_TO_UTF)) {
2844 SV* const listsv = newSVpvs("# comment\n");
2846 const U8* tend = t + tlen;
2847 const U8* rend = r + rlen;
2861 const I32 from_utf = o->op_private & OPpTRANS_FROM_UTF;
2862 const I32 to_utf = o->op_private & OPpTRANS_TO_UTF;
2865 const U32 flags = UTF8_ALLOW_DEFAULT;
2869 t = tsave = bytes_to_utf8(t, &len);
2872 if (!to_utf && rlen) {
2874 r = rsave = bytes_to_utf8(r, &len);
2878 /* There are several snags with this code on EBCDIC:
2879 1. 0xFF is a legal UTF-EBCDIC byte (there are no illegal bytes).
2880 2. scan_const() in toke.c has encoded chars in native encoding which makes
2881 ranges at least in EBCDIC 0..255 range the bottom odd.
2885 U8 tmpbuf[UTF8_MAXBYTES+1];
2888 Newx(cp, 2*tlen, UV);
2890 transv = newSVpvs("");
2892 cp[2*i] = utf8n_to_uvuni(t, tend-t, &ulen, flags);
2894 if (t < tend && NATIVE_TO_UTF(*t) == 0xff) {
2896 cp[2*i+1] = utf8n_to_uvuni(t, tend-t, &ulen, flags);
2900 cp[2*i+1] = cp[2*i];
2904 qsort(cp, i, 2*sizeof(UV), uvcompare);
2905 for (j = 0; j < i; j++) {
2907 diff = val - nextmin;
2909 t = uvuni_to_utf8(tmpbuf,nextmin);
2910 sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf);
2912 U8 range_mark = UTF_TO_NATIVE(0xff);
2913 t = uvuni_to_utf8(tmpbuf, val - 1);
2914 sv_catpvn(transv, (char *)&range_mark, 1);
2915 sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf);
2922 t = uvuni_to_utf8(tmpbuf,nextmin);
2923 sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf);
2925 U8 range_mark = UTF_TO_NATIVE(0xff);
2926 sv_catpvn(transv, (char *)&range_mark, 1);
2928 t = uvuni_to_utf8_flags(tmpbuf, 0x7fffffff,
2929 UNICODE_ALLOW_SUPER);
2930 sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf);
2931 t = (const U8*)SvPVX_const(transv);
2932 tlen = SvCUR(transv);
2936 else if (!rlen && !del) {
2937 r = t; rlen = tlen; rend = tend;
2940 if ((!rlen && !del) || t == r ||
2941 (tlen == rlen && memEQ((char *)t, (char *)r, tlen)))
2943 o->op_private |= OPpTRANS_IDENTICAL;
2947 while (t < tend || tfirst <= tlast) {
2948 /* see if we need more "t" chars */
2949 if (tfirst > tlast) {
2950 tfirst = (I32)utf8n_to_uvuni(t, tend - t, &ulen, flags);
2952 if (t < tend && NATIVE_TO_UTF(*t) == 0xff) { /* illegal utf8 val indicates range */
2954 tlast = (I32)utf8n_to_uvuni(t, tend - t, &ulen, flags);
2961 /* now see if we need more "r" chars */
2962 if (rfirst > rlast) {
2964 rfirst = (I32)utf8n_to_uvuni(r, rend - r, &ulen, flags);
2966 if (r < rend && NATIVE_TO_UTF(*r) == 0xff) { /* illegal utf8 val indicates range */
2968 rlast = (I32)utf8n_to_uvuni(r, rend - r, &ulen, flags);
2977 rfirst = rlast = 0xffffffff;
2981 /* now see which range will peter our first, if either. */
2982 tdiff = tlast - tfirst;
2983 rdiff = rlast - rfirst;
2990 if (rfirst == 0xffffffff) {
2991 diff = tdiff; /* oops, pretend rdiff is infinite */
2993 Perl_sv_catpvf(aTHX_ listsv, "%04lx\t%04lx\tXXXX\n",
2994 (long)tfirst, (long)tlast);
2996 Perl_sv_catpvf(aTHX_ listsv, "%04lx\t\tXXXX\n", (long)tfirst);
3000 Perl_sv_catpvf(aTHX_ listsv, "%04lx\t%04lx\t%04lx\n",
3001 (long)tfirst, (long)(tfirst + diff),
3004 Perl_sv_catpvf(aTHX_ listsv, "%04lx\t\t%04lx\n",
3005 (long)tfirst, (long)rfirst);
3007 if (rfirst + diff > max)
3008 max = rfirst + diff;
3010 grows = (tfirst < rfirst &&
3011 UNISKIP(tfirst) < UNISKIP(rfirst + diff));
3023 else if (max > 0xff)
3028 Safefree(cPVOPo->op_pv);
3029 cPVOPo->op_pv = NULL;
3030 cSVOPo->op_sv = (SV*)swash_init("utf8", "", listsv, bits, none);
3031 SvREFCNT_dec(listsv);
3032 SvREFCNT_dec(transv);
3034 if (!del && havefinal && rlen)
3035 (void)hv_store((HV*)SvRV((cSVOPo->op_sv)), "FINAL", 5,
3036 newSVuv((UV)final), 0);
3039 o->op_private |= OPpTRANS_GROWS;
3045 op_getmad(expr,o,'e');
3046 op_getmad(repl,o,'r');
3054 tbl = (short*)cPVOPo->op_pv;
3056 Zero(tbl, 256, short);
3057 for (i = 0; i < (I32)tlen; i++)
3059 for (i = 0, j = 0; i < 256; i++) {
3061 if (j >= (I32)rlen) {
3070 if (i < 128 && r[j] >= 128)
3080 o->op_private |= OPpTRANS_IDENTICAL;
3082 else if (j >= (I32)rlen)
3085 cPVOPo->op_pv = (char*)Renew(tbl, 0x101+rlen-j, short);
3086 tbl[0x100] = (short)(rlen - j);
3087 for (i=0; i < (I32)rlen - j; i++)
3088 tbl[0x101+i] = r[j+i];
3092 if (!rlen && !del) {
3095 o->op_private |= OPpTRANS_IDENTICAL;
3097 else if (!squash && rlen == tlen && memEQ((char*)t, (char*)r, tlen)) {
3098 o->op_private |= OPpTRANS_IDENTICAL;
3100 for (i = 0; i < 256; i++)
3102 for (i = 0, j = 0; i < (I32)tlen; i++,j++) {
3103 if (j >= (I32)rlen) {
3105 if (tbl[t[i]] == -1)
3111 if (tbl[t[i]] == -1) {
3112 if (t[i] < 128 && r[j] >= 128)
3119 o->op_private |= OPpTRANS_GROWS;
3121 op_getmad(expr,o,'e');
3122 op_getmad(repl,o,'r');
3132 Perl_newPMOP(pTHX_ I32 type, I32 flags)
3137 NewOp(1101, pmop, 1, PMOP);
3138 pmop->op_type = (OPCODE)type;
3139 pmop->op_ppaddr = PL_ppaddr[type];
3140 pmop->op_flags = (U8)flags;
3141 pmop->op_private = (U8)(0 | (flags >> 8));
3143 if (PL_hints & HINT_RE_TAINT)
3144 pmop->op_pmpermflags |= PMf_RETAINT;
3145 if (PL_hints & HINT_LOCALE)
3146 pmop->op_pmpermflags |= PMf_LOCALE;
3147 pmop->op_pmflags = pmop->op_pmpermflags;
3150 if (av_len((AV*) PL_regex_pad[0]) > -1) {
3151 SV * const repointer = av_pop((AV*)PL_regex_pad[0]);
3152 pmop->op_pmoffset = SvIV(repointer);
3153 SvREPADTMP_off(repointer);
3154 sv_setiv(repointer,0);
3156 SV * const repointer = newSViv(0);
3157 av_push(PL_regex_padav, SvREFCNT_inc_simple_NN(repointer));
3158 pmop->op_pmoffset = av_len(PL_regex_padav);
3159 PL_regex_pad = AvARRAY(PL_regex_padav);
3163 /* link into pm list */
3164 if (type != OP_TRANS && PL_curstash) {
3165 MAGIC *mg = mg_find((SV*)PL_curstash, PERL_MAGIC_symtab);
3168 mg = sv_magicext((SV*)PL_curstash, 0, PERL_MAGIC_symtab, 0, 0, 0);
3170 pmop->op_pmnext = (PMOP*)mg->mg_obj;
3171 mg->mg_obj = (SV*)pmop;
3172 PmopSTASH_set(pmop,PL_curstash);
3175 return CHECKOP(type, pmop);
3178 /* Given some sort of match op o, and an expression expr containing a
3179 * pattern, either compile expr into a regex and attach it to o (if it's
3180 * constant), or convert expr into a runtime regcomp op sequence (if it's
3183 * isreg indicates that the pattern is part of a regex construct, eg
3184 * $x =~ /pattern/ or split /pattern/, as opposed to $x =~ $pattern or
3185 * split "pattern", which aren't. In the former case, expr will be a list
3186 * if the pattern contains more than one term (eg /a$b/) or if it contains
3187 * a replacement, ie s/// or tr///.
3191 Perl_pmruntime(pTHX_ OP *o, OP *expr, bool isreg)
3196 I32 repl_has_vars = 0;
3200 if (o->op_type == OP_SUBST || o->op_type == OP_TRANS) {
3201 /* last element in list is the replacement; pop it */
3203 repl = cLISTOPx(expr)->op_last;
3204 kid = cLISTOPx(expr)->op_first;
3205 while (kid->op_sibling != repl)
3206 kid = kid->op_sibling;
3207 kid->op_sibling = NULL;
3208 cLISTOPx(expr)->op_last = kid;
3211 if (isreg && expr->op_type == OP_LIST &&
3212 cLISTOPx(expr)->op_first->op_sibling == cLISTOPx(expr)->op_last)
3214 /* convert single element list to element */
3215 OP* const oe = expr;
3216 expr = cLISTOPx(oe)->op_first->op_sibling;
3217 cLISTOPx(oe)->op_first->op_sibling = NULL;
3218 cLISTOPx(oe)->op_last = NULL;
3222 if (o->op_type == OP_TRANS) {
3223 return pmtrans(o, expr, repl);
3226 reglist = isreg && expr->op_type == OP_LIST;
3230 PL_hints |= HINT_BLOCK_SCOPE;
3233 if (expr->op_type == OP_CONST) {
3235 SV * const pat = ((SVOP*)expr)->op_sv;
3236 const char *p = SvPV_const(pat, plen);
3237 if ((o->op_flags & OPf_SPECIAL) && (*p == ' ' && p[1] == '\0')) {
3238 U32 was_readonly = SvREADONLY(pat);
3242 sv_force_normal_flags(pat, 0);
3243 assert(!SvREADONLY(pat));
3246 SvREADONLY_off(pat);
3250 sv_setpvn(pat, "\\s+", 3);
3252 SvFLAGS(pat) |= was_readonly;
3254 p = SvPV_const(pat, plen);
3255 pm->op_pmflags |= PMf_SKIPWHITE;
3258 pm->op_pmdynflags |= PMdf_UTF8;
3259 /* FIXME - can we make this function take const char * args? */
3260 PM_SETRE(pm, CALLREGCOMP((char*)p, (char*)p + plen, pm));
3261 if (strEQ("\\s+", PM_GETRE(pm)->precomp))
3262 pm->op_pmflags |= PMf_WHITE;
3264 op_getmad(expr,(OP*)pm,'e');
3270 if (pm->op_pmflags & PMf_KEEP || !(PL_hints & HINT_RE_EVAL))
3271 expr = newUNOP((!(PL_hints & HINT_RE_EVAL)
3273 : OP_REGCMAYBE),0,expr);
3275 NewOp(1101, rcop, 1, LOGOP);
3276 rcop->op_type = OP_REGCOMP;
3277 rcop->op_ppaddr = PL_ppaddr[OP_REGCOMP];
3278 rcop->op_first = scalar(expr);
3279 rcop->op_flags |= OPf_KIDS
3280 | ((PL_hints & HINT_RE_EVAL) ? OPf_SPECIAL : 0)
3281 | (reglist ? OPf_STACKED : 0);
3282 rcop->op_private = 1;
3285 rcop->op_targ = pad_alloc(rcop->op_type, SVs_PADTMP);
3287 /* /$x/ may cause an eval, since $x might be qr/(?{..})/ */
3290 /* establish postfix order */
3291 if (pm->op_pmflags & PMf_KEEP || !(PL_hints & HINT_RE_EVAL)) {
3293 rcop->op_next = expr;
3294 ((UNOP*)expr)->op_first->op_next = (OP*)rcop;
3297 rcop->op_next = LINKLIST(expr);
3298 expr->op_next = (OP*)rcop;
3301 prepend_elem(o->op_type, scalar((OP*)rcop), o);
3306 if (pm->op_pmflags & PMf_EVAL) {
3308 if (CopLINE(PL_curcop) < (line_t)PL_multi_end)
3309 CopLINE_set(PL_curcop, (line_t)PL_multi_end);
3311 else if (repl->op_type == OP_CONST)
3315 for (curop = LINKLIST(repl); curop!=repl; curop = LINKLIST(curop)) {
3316 if (curop->op_type == OP_SCOPE
3317 || curop->op_type == OP_LEAVE
3318 || (PL_opargs[curop->op_type] & OA_DANGEROUS)) {
3319 if (curop->op_type == OP_GV) {
3320 GV * const gv = cGVOPx_gv(curop);
3322 if (strchr("&`'123456789+-\016\022", *GvENAME(gv)))
3325 else if (curop->op_type == OP_RV2CV)
3327 else if (curop->op_type == OP_RV2SV ||
3328 curop->op_type == OP_RV2AV ||
3329 curop->op_type == OP_RV2HV ||
3330 curop->op_type == OP_RV2GV) {
3331 if (lastop && lastop->op_type != OP_GV) /*funny deref?*/
3334 else if (curop->op_type == OP_PADSV ||
3335 curop->op_type == OP_PADAV ||
3336 curop->op_type == OP_PADHV ||
3337 curop->op_type == OP_PADANY)
3341 else if (curop->op_type == OP_PUSHRE)
3342 NOOP; /* Okay here, dangerous in newASSIGNOP */
3352 || PM_GETRE(pm)->extflags & RXf_EVAL_SEEN)))
3354 pm->op_pmflags |= PMf_CONST; /* const for long enough */
3355 pm->op_pmpermflags |= PMf_CONST; /* const for long enough */
3356 prepend_elem(o->op_type, scalar(repl), o);
3359 if (curop == repl && !PM_GETRE(pm)) { /* Has variables. */
3360 pm->op_pmflags |= PMf_MAYBE_CONST;
3361 pm->op_pmpermflags |= PMf_MAYBE_CONST;
3363 NewOp(1101, rcop, 1, LOGOP);
3364 rcop->op_type = OP_SUBSTCONT;
3365 rcop->op_ppaddr = PL_ppaddr[OP_SUBSTCONT];
3366 rcop->op_first = scalar(repl);
3367 rcop->op_flags |= OPf_KIDS;
3368 rcop->op_private = 1;
3371 /* establish postfix order */
3372 rcop->op_next = LINKLIST(repl);
3373 repl->op_next = (OP*)rcop;
3375 pm->op_pmreplroot = scalar((OP*)rcop);
3376 pm->op_pmreplstart = LINKLIST(rcop);
3385 Perl_newSVOP(pTHX_ I32 type, I32 flags, SV *sv)
3389 NewOp(1101, svop, 1, SVOP);
3390 svop->op_type = (OPCODE)type;
3391 svop->op_ppaddr = PL_ppaddr[type];
3393 svop->op_next = (OP*)svop;
3394 svop->op_flags = (U8)flags;
3395 if (PL_opargs[type] & OA_RETSCALAR)
3397 if (PL_opargs[type] & OA_TARGET)
3398 svop->op_targ = pad_alloc(type, SVs_PADTMP);
3399 return CHECKOP(type, svop);
3403 Perl_newPADOP(pTHX_ I32 type, I32 flags, SV *sv)
3407 NewOp(1101, padop, 1, PADOP);
3408 padop->op_type = (OPCODE)type;
3409 padop->op_ppaddr = PL_ppaddr[type];
3410 padop->op_padix = pad_alloc(type, SVs_PADTMP);
3411 SvREFCNT_dec(PAD_SVl(padop->op_padix));
3412 PAD_SETSV(padop->op_padix, sv);
3415 padop->op_next = (OP*)padop;
3416 padop->op_flags = (U8)flags;
3417 if (PL_opargs[type] & OA_RETSCALAR)
3419 if (PL_opargs[type] & OA_TARGET)
3420 padop->op_targ = pad_alloc(type, SVs_PADTMP);
3421 return CHECKOP(type, padop);
3425 Perl_newGVOP(pTHX_ I32 type, I32 flags, GV *gv)
3431 return newPADOP(type, flags, SvREFCNT_inc_simple(gv));
3433 return newSVOP(type, flags, SvREFCNT_inc_simple(gv));
3438 Perl_newPVOP(pTHX_ I32 type, I32 flags, char *pv)
3442 NewOp(1101, pvop, 1, PVOP);
3443 pvop->op_type = (OPCODE)type;
3444 pvop->op_ppaddr = PL_ppaddr[type];
3446 pvop->op_next = (OP*)pvop;
3447 pvop->op_flags = (U8)flags;
3448 if (PL_opargs[type] & OA_RETSCALAR)
3450 if (PL_opargs[type] & OA_TARGET)
3451 pvop->op_targ = pad_alloc(type, SVs_PADTMP);
3452 return CHECKOP(type, pvop);
3460 Perl_package(pTHX_ OP *o)
3469 save_hptr(&PL_curstash);
3470 save_item(PL_curstname);
3472 name = SvPV_const(cSVOPo->op_sv, len);
3473 PL_curstash = gv_stashpvn(name, len, TRUE);
3474 sv_setpvn(PL_curstname, name, len);
3476 PL_hints |= HINT_BLOCK_SCOPE;
3477 PL_copline = NOLINE;
3483 if (!PL_madskills) {
3488 pegop = newOP(OP_NULL,0);
3489 op_getmad(o,pegop,'P');
3499 Perl_utilize(pTHX_ int aver, I32 floor, OP *version, OP *idop, OP *arg)
3506 OP *pegop = newOP(OP_NULL,0);
3509 if (idop->op_type != OP_CONST)
3510 Perl_croak(aTHX_ "Module name must be constant");
3513 op_getmad(idop,pegop,'U');
3518 SV * const vesv = ((SVOP*)version)->op_sv;
3521 op_getmad(version,pegop,'V');
3522 if (!arg && !SvNIOKp(vesv)) {
3529 if (version->op_type != OP_CONST || !SvNIOKp(vesv))
3530 Perl_croak(aTHX_ "Version number must be constant number");
3532 /* Make copy of idop so we don't free it twice */
3533 pack = newSVOP(OP_CONST, 0, newSVsv(((SVOP*)idop)->op_sv));
3535 /* Fake up a method call to VERSION */
3536 meth = newSVpvs_share("VERSION");
3537 veop = convert(OP_ENTERSUB, OPf_STACKED|OPf_SPECIAL,
3538 append_elem(OP_LIST,
3539 prepend_elem(OP_LIST, pack, list(version)),
3540 newSVOP(OP_METHOD_NAMED, 0, meth)));
3544 /* Fake up an import/unimport */
3545 if (arg && arg->op_type == OP_STUB) {
3547 op_getmad(arg,pegop,'S');
3548 imop = arg; /* no import on explicit () */
3550 else if (SvNIOKp(((SVOP*)idop)->op_sv)) {
3551 imop = NULL; /* use 5.0; */
3553 idop->op_private |= OPpCONST_NOVER;
3559 op_getmad(arg,pegop,'A');
3561 /* Make copy of idop so we don't free it twice */
3562 pack = newSVOP(OP_CONST, 0, newSVsv(((SVOP*)idop)->op_sv));
3564 /* Fake up a method call to import/unimport */
3566 ? newSVpvs_share("import") : newSVpvs_share("unimport");
3567 imop = convert(OP_ENTERSUB, OPf_STACKED|OPf_SPECIAL,
3568 append_elem(OP_LIST,
3569 prepend_elem(OP_LIST, pack, list(arg)),
3570 newSVOP(OP_METHOD_NAMED, 0, meth)));
3573 /* Fake up the BEGIN {}, which does its thing immediately. */
3575 newSVOP(OP_CONST, 0, newSVpvs_share("BEGIN")),
3578 append_elem(OP_LINESEQ,
3579 append_elem(OP_LINESEQ,
3580 newSTATEOP(0, NULL, newUNOP(OP_REQUIRE, 0, idop)),
3581 newSTATEOP(0, NULL, veop)),
3582 newSTATEOP(0, NULL, imop) ));
3584 /* The "did you use incorrect case?" warning used to be here.
3585 * The problem is that on case-insensitive filesystems one
3586 * might get false positives for "use" (and "require"):
3587 * "use Strict" or "require CARP" will work. This causes
3588 * portability problems for the script: in case-strict
3589 * filesystems the script will stop working.
3591 * The "incorrect case" warning checked whether "use Foo"
3592 * imported "Foo" to your namespace, but that is wrong, too:
3593 * there is no requirement nor promise in the language that
3594 * a Foo.pm should or would contain anything in package "Foo".
3596 * There is very little Configure-wise that can be done, either:
3597 * the case-sensitivity of the build filesystem of Perl does not
3598 * help in guessing the case-sensitivity of the runtime environment.
3601 PL_hints |= HINT_BLOCK_SCOPE;
3602 PL_copline = NOLINE;
3604 PL_cop_seqmax++; /* Purely for B::*'s benefit */
3607 if (!PL_madskills) {
3608 /* FIXME - don't allocate pegop if !PL_madskills */
3617 =head1 Embedding Functions
3619 =for apidoc load_module
3621 Loads the module whose name is pointed to by the string part of name.
3622 Note that the actual module name, not its filename, should be given.
3623 Eg, "Foo::Bar" instead of "Foo/Bar.pm". flags can be any of
3624 PERL_LOADMOD_DENY, PERL_LOADMOD_NOIMPORT, or PERL_LOADMOD_IMPORT_OPS
3625 (or 0 for no flags). ver, if specified, provides version semantics
3626 similar to C<use Foo::Bar VERSION>. The optional trailing SV*
3627 arguments can be used to specify arguments to the module's import()
3628 method, similar to C<use Foo::Bar VERSION LIST>.
3633 Perl_load_module(pTHX_ U32 flags, SV *name, SV *ver, ...)
3636 va_start(args, ver);
3637 vload_module(flags, name, ver, &args);
3641 #ifdef PERL_IMPLICIT_CONTEXT
3643 Perl_load_module_nocontext(U32 flags, SV *name, SV *ver, ...)
3647 va_start(args, ver);
3648 vload_module(flags, name, ver, &args);
3654 Perl_vload_module(pTHX_ U32 flags, SV *name, SV *ver, va_list *args)
3659 OP * const modname = newSVOP(OP_CONST, 0, name);
3660 modname->op_private |= OPpCONST_BARE;
3662 veop = newSVOP(OP_CONST, 0, ver);
3666 if (flags & PERL_LOADMOD_NOIMPORT) {
3667 imop = sawparens(newNULLLIST());
3669 else if (flags & PERL_LOADMOD_IMPORT_OPS) {
3670 imop = va_arg(*args, OP*);
3675 sv = va_arg(*args, SV*);
3677 imop = append_elem(OP_LIST, imop, newSVOP(OP_CONST, 0, sv));
3678 sv = va_arg(*args, SV*);
3682 const line_t ocopline = PL_copline;
3683 COP * const ocurcop = PL_curcop;
3684 const int oexpect = PL_expect;
3686 utilize(!(flags & PERL_LOADMOD_DENY), start_subparse(FALSE, 0),
3687 veop, modname, imop);
3688 PL_expect = oexpect;
3689 PL_copline = ocopline;
3690 PL_curcop = ocurcop;
3695 Perl_dofile(pTHX_ OP *term, I32 force_builtin)
3701 if (!force_builtin) {
3702 gv = gv_fetchpvs("do", GV_NOTQUAL, SVt_PVCV);
3703 if (!(gv && GvCVu(gv) && GvIMPORTED_CV(gv))) {
3704 GV * const * const gvp = (GV**)hv_fetchs(PL_globalstash, "do", FALSE);
3705 gv = gvp ? *gvp : NULL;
3709 if (gv && GvCVu(gv) && GvIMPORTED_CV(gv)) {
3710 doop = ck_subr(newUNOP(OP_ENTERSUB, OPf_STACKED,
3711 append_elem(OP_LIST, term,
3712 scalar(newUNOP(OP_RV2CV, 0,
3713 newGVOP(OP_GV, 0, gv))))));
3716 doop = newUNOP(OP_DOFILE, 0, scalar(term));
3722 Perl_newSLICEOP(pTHX_ I32 flags, OP *subscript, OP *listval)
3724 return newBINOP(OP_LSLICE, flags,
3725 list(force_list(subscript)),
3726 list(force_list(listval)) );
3730 S_is_list_assignment(pTHX_ register const OP *o)
3738 if ((o->op_type == OP_NULL) && (o->op_flags & OPf_KIDS))
3739 o = cUNOPo->op_first;
3741 flags = o->op_flags;
3743 if (type == OP_COND_EXPR) {
3744 const I32 t = is_list_assignment(cLOGOPo->op_first->op_sibling);
3745 const I32 f = is_list_assignment(cLOGOPo->op_first->op_sibling->op_sibling);
3750 yyerror("Assignment to both a list and a scalar");
3754 if (type == OP_LIST &&
3755 (flags & OPf_WANT) == OPf_WANT_SCALAR &&
3756 o->op_private & OPpLVAL_INTRO)
3759 if (type == OP_LIST || flags & OPf_PARENS ||
3760 type == OP_RV2AV || type == OP_RV2HV ||
3761 type == OP_ASLICE || type == OP_HSLICE)
3764 if (type == OP_PADAV || type == OP_PADHV)
3767 if (type == OP_RV2SV)
3774 Perl_newASSIGNOP(pTHX_ I32 flags, OP *left, I32 optype, OP *right)
3780 if (optype == OP_ANDASSIGN || optype == OP_ORASSIGN || optype == OP_DORASSIGN) {
3781 return newLOGOP(optype, 0,
3782 mod(scalar(left), optype),
3783 newUNOP(OP_SASSIGN, 0, scalar(right)));
3786 return newBINOP(optype, OPf_STACKED,
3787 mod(scalar(left), optype), scalar(right));
3791 if (is_list_assignment(left)) {
3795 /* Grandfathering $[ assignment here. Bletch.*/
3796 /* Only simple assignments like C<< ($[) = 1 >> are allowed */
3797 PL_eval_start = (left->op_type == OP_CONST) ? right : 0;
3798 left = mod(left, OP_AASSIGN);
3801 else if (left->op_type == OP_CONST) {
3803 /* Result of assignment is always 1 (or we'd be dead already) */
3804 return newSVOP(OP_CONST, 0, newSViv(1));
3806 curop = list(force_list(left));
3807 o = newBINOP(OP_AASSIGN, flags, list(force_list(right)), curop);
3808 o->op_private = (U8)(0 | (flags >> 8));
3810 /* PL_generation sorcery:
3811 * an assignment like ($a,$b) = ($c,$d) is easier than
3812 * ($a,$b) = ($c,$a), since there is no need for temporary vars.
3813 * To detect whether there are common vars, the global var
3814 * PL_generation is incremented for each assign op we compile.
3815 * Then, while compiling the assign op, we run through all the
3816 * variables on both sides of the assignment, setting a spare slot
3817 * in each of them to PL_generation. If any of them already have
3818 * that value, we know we've got commonality. We could use a
3819 * single bit marker, but then we'd have to make 2 passes, first
3820 * to clear the flag, then to test and set it. To find somewhere
3821 * to store these values, evil chicanery is done with SvUVX().
3827 for (curop = LINKLIST(o); curop != o; curop = LINKLIST(curop)) {
3828 if (PL_opargs[curop->op_type] & OA_DANGEROUS) {
3829 if (curop->op_type == OP_GV) {
3830 GV *gv = cGVOPx_gv(curop);
3832 || (int)GvASSIGN_GENERATION(gv) == PL_generation)
3834 GvASSIGN_GENERATION_set(gv, PL_generation);
3836 else if (curop->op_type == OP_PADSV ||
3837 curop->op_type == OP_PADAV ||
3838 curop->op_type == OP_PADHV ||
3839 curop->op_type == OP_PADANY)
3841 if (PAD_COMPNAME_GEN(curop->op_targ)
3842 == (STRLEN)PL_generation)
3844 PAD_COMPNAME_GEN_set(curop->op_targ, PL_generation);
3847 else if (curop->op_type == OP_RV2CV)
3849 else if (curop->op_type == OP_RV2SV ||
3850 curop->op_type == OP_RV2AV ||
3851 curop->op_type == OP_RV2HV ||
3852 curop->op_type == OP_RV2GV) {
3853 if (lastop->op_type != OP_GV) /* funny deref? */
3856 else if (curop->op_type == OP_PUSHRE) {
3857 if (((PMOP*)curop)->op_pmreplroot) {
3859 GV *gv = (GV*)PAD_SVl(INT2PTR(PADOFFSET,
3860 ((PMOP*)curop)->op_pmreplroot));
3862 GV *gv = (GV*)((PMOP*)curop)->op_pmreplroot;
3865 || (int)GvASSIGN_GENERATION(gv) == PL_generation)
3867 GvASSIGN_GENERATION_set(gv, PL_generation);
3868 GvASSIGN_GENERATION_set(gv, PL_generation);
3877 o->op_private |= OPpASSIGN_COMMON;
3880 if ( ((left->op_private & OPpLVAL_INTRO) || ckWARN(WARN_MISC))
3881 && (left->op_type == OP_LIST
3882 || (left->op_type == OP_NULL && left->op_targ == OP_LIST)))
3884 OP* lop = ((LISTOP*)left)->op_first;
3886 if (lop->op_type == OP_PADSV ||
3887 lop->op_type == OP_PADAV ||
3888 lop->op_type == OP_PADHV ||
3889 lop->op_type == OP_PADANY)
3891 if (lop->op_private & OPpPAD_STATE) {
3892 if (left->op_private & OPpLVAL_INTRO) {
3893 o->op_private |= OPpASSIGN_STATE;
3894 /* hijacking PADSTALE for uninitialized state variables */
3895 SvPADSTALE_on(PAD_SVl(lop->op_targ));
3897 else { /* we already checked for WARN_MISC before */
3898 Perl_warner(aTHX_ packWARN(WARN_MISC), "State variable %s will be reinitialized",
3899 PAD_COMPNAME_PV(lop->op_targ));
3903 lop = lop->op_sibling;
3907 if (right && right->op_type == OP_SPLIT) {
3908 OP* tmpop = ((LISTOP*)right)->op_first;
3909 if (tmpop && (tmpop->op_type == OP_PUSHRE)) {
3910 PMOP * const pm = (PMOP*)tmpop;
3911 if (left->op_type == OP_RV2AV &&
3912 !(left->op_private & OPpLVAL_INTRO) &&
3913 !(o->op_private & OPpASSIGN_COMMON) )
3915 tmpop = ((UNOP*)left)->op_first;
3916 if (tmpop->op_type == OP_GV && !pm->op_pmreplroot) {
3918 pm->op_pmreplroot = INT2PTR(OP*, cPADOPx(tmpop)->op_padix);
3919 cPADOPx(tmpop)->op_padix = 0; /* steal it */
3921 pm->op_pmreplroot = (OP*)cSVOPx(tmpop)->op_sv;
3922 cSVOPx(tmpop)->op_sv = NULL; /* steal it */
3924 pm->op_pmflags |= PMf_ONCE;
3925 tmpop = cUNOPo->op_first; /* to list (nulled) */
3926 tmpop = ((UNOP*)tmpop)->op_first; /* to pushmark */
3927 tmpop->op_sibling = NULL; /* don't free split */
3928 right->op_next = tmpop->op_next; /* fix starting loc */
3930 op_getmad(o,right,'R'); /* blow off assign */
3932 op_free(o); /* blow off assign */
3934 right->op_flags &= ~OPf_WANT;
3935 /* "I don't know and I don't care." */
3940 if (PL_modcount < RETURN_UNLIMITED_NUMBER &&
3941 ((LISTOP*)right)->op_last->op_type == OP_CONST)
3943 SV *sv = ((SVOP*)((LISTOP*)right)->op_last)->op_sv;
3945 sv_setiv(sv, PL_modcount+1);
3953 right = newOP(OP_UNDEF, 0);
3954 if (right->op_type == OP_READLINE) {
3955 right->op_flags |= OPf_STACKED;
3956 return newBINOP(OP_NULL, flags, mod(scalar(left), OP_SASSIGN), scalar(right));
3959 PL_eval_start = right; /* Grandfathering $[ assignment here. Bletch.*/
3960 o = newBINOP(OP_SASSIGN, flags,
3961 scalar(right), mod(scalar(left), OP_SASSIGN) );
3967 o = newSVOP(OP_CONST, 0, newSViv(CopARYBASE_get(&PL_compiling)));
3968 o->op_private |= OPpCONST_ARYBASE;
3975 Perl_newSTATEOP(pTHX_ I32 flags, char *label, OP *o)
3978 const U32 seq = intro_my();
3981 NewOp(1101, cop, 1, COP);
3982 if (PERLDB_LINE && CopLINE(PL_curcop) && PL_curstash != PL_debstash) {
3983 cop->op_type = OP_DBSTATE;
3984 cop->op_ppaddr = PL_ppaddr[ OP_DBSTATE ];
3987 cop->op_type = OP_NEXTSTATE;
3988 cop->op_ppaddr = PL_ppaddr[ OP_NEXTSTATE ];
3990 cop->op_flags = (U8)flags;
3991 CopHINTS_set(cop, PL_hints);
3993 cop->op_private |= NATIVE_HINTS;
3995 CopHINTS_set(&PL_compiling, CopHINTS_get(cop));
3996 cop->op_next = (OP*)cop;
3999 CopLABEL_set(cop, label);
4000 PL_hints |= HINT_BLOCK_SCOPE;
4003 /* CopARYBASE is now "virtual", in that it's stored as a flag bit in
4004 CopHINTS and a possible value in cop_hints_hash, so no need to copy it.
4006 cop->cop_warnings = DUP_WARNINGS(PL_curcop->cop_warnings);
4007 cop->cop_hints_hash = PL_curcop->cop_hints_hash;
4008 if (cop->cop_hints_hash) {
4010 cop->cop_hints_hash->refcounted_he_refcnt++;
4011 HINTS_REFCNT_UNLOCK;
4014 if (PL_copline == NOLINE)
4015 CopLINE_set(cop, CopLINE(PL_curcop));
4017 CopLINE_set(cop, PL_copline);
4018 PL_copline = NOLINE;
4021 CopFILE_set(cop, CopFILE(PL_curcop)); /* XXX share in a pvtable? */
4023 CopFILEGV_set(cop, CopFILEGV(PL_curcop));
4025 CopSTASH_set(cop, PL_curstash);
4027 if (PERLDB_LINE && PL_curstash != PL_debstash) {
4028 AV *av = CopFILEAVx(PL_curcop);
4030 SV * const * const svp = av_fetch(av, (I32)CopLINE(cop), FALSE);
4031 if (svp && *svp != &PL_sv_undef ) {
4032 (void)SvIOK_on(*svp);
4033 SvIV_set(*svp, PTR2IV(cop));
4038 return prepend_elem(OP_LINESEQ, (OP*)cop, o);
4043 Perl_newLOGOP(pTHX_ I32 type, I32 flags, OP *first, OP *other)
4046 return new_logop(type, flags, &first, &other);
4050 S_new_logop(pTHX_ I32 type, I32 flags, OP** firstp, OP** otherp)
4055 OP *first = *firstp;
4056 OP * const other = *otherp;
4058 if (type == OP_XOR) /* Not short circuit, but here by precedence. */
4059 return newBINOP(type, flags, scalar(first), scalar(other));
4061 scalarboolean(first);
4062 /* optimize "!a && b" to "a || b", and "!a || b" to "a && b" */
4063 if (first->op_type == OP_NOT
4064 && (first->op_flags & OPf_SPECIAL)
4065 && (first->op_flags & OPf_KIDS)) {
4066 if (type == OP_AND || type == OP_OR) {
4072 first = *firstp = cUNOPo->op_first;
4074 first->op_next = o->op_next;
4075 cUNOPo->op_first = NULL;
4077 op_getmad(o,first,'O');
4083 if (first->op_type == OP_CONST) {
4084 if (first->op_private & OPpCONST_STRICT)
4085 no_bareword_allowed(first);
4086 else if ((first->op_private & OPpCONST_BARE) && ckWARN(WARN_BAREWORD))
4087 Perl_warner(aTHX_ packWARN(WARN_BAREWORD), "Bareword found in conditional");
4088 if ((type == OP_AND && SvTRUE(((SVOP*)first)->op_sv)) ||
4089 (type == OP_OR && !SvTRUE(((SVOP*)first)->op_sv)) ||
4090 (type == OP_DOR && !SvOK(((SVOP*)first)->op_sv))) {
4092 if (other->op_type == OP_CONST)
4093 other->op_private |= OPpCONST_SHORTCIRCUIT;
4095 OP *newop = newUNOP(OP_NULL, 0, other);
4096 op_getmad(first, newop, '1');
4097 newop->op_targ = type; /* set "was" field */
4104 /* check for C<my $x if 0>, or C<my($x,$y) if 0> */
4105 const OP *o2 = other;
4106 if ( ! (o2->op_type == OP_LIST
4107 && (( o2 = cUNOPx(o2)->op_first))
4108 && o2->op_type == OP_PUSHMARK
4109 && (( o2 = o2->op_sibling)) )
4112 if ((o2->op_type == OP_PADSV || o2->op_type == OP_PADAV
4113 || o2->op_type == OP_PADHV)
4114 && o2->op_private & OPpLVAL_INTRO
4115 && ckWARN(WARN_DEPRECATED))
4117 Perl_warner(aTHX_ packWARN(WARN_DEPRECATED),
4118 "Deprecated use of my() in false conditional");
4122 if (first->op_type == OP_CONST)
4123 first->op_private |= OPpCONST_SHORTCIRCUIT;
4125 first = newUNOP(OP_NULL, 0, first);
4126 op_getmad(other, first, '2');
4127 first->op_targ = type; /* set "was" field */
4134 else if ((first->op_flags & OPf_KIDS) && type != OP_DOR
4135 && ckWARN(WARN_MISC)) /* [#24076] Don't warn for <FH> err FOO. */
4137 const OP * const k1 = ((UNOP*)first)->op_first;
4138 const OP * const k2 = k1->op_sibling;
4140 switch (first->op_type)
4143 if (k2 && k2->op_type == OP_READLINE
4144 && (k2->op_flags & OPf_STACKED)
4145 && ((k1->op_flags & OPf_WANT) == OPf_WANT_SCALAR))
4147 warnop = k2->op_type;
4152 if (k1->op_type == OP_READDIR
4153 || k1->op_type == OP_GLOB
4154 || (k1->op_type == OP_NULL && k1->op_targ == OP_GLOB)
4155 || k1->op_type == OP_EACH)
4157 warnop = ((k1->op_type == OP_NULL)
4158 ? (OPCODE)k1->op_targ : k1->op_type);
4163 const line_t oldline = CopLINE(PL_curcop);
4164 CopLINE_set(PL_curcop, PL_copline);
4165 Perl_warner(aTHX_ packWARN(WARN_MISC),
4166 "Value of %s%s can be \"0\"; test with defined()",
4168 ((warnop == OP_READLINE || warnop == OP_GLOB)
4169 ? " construct" : "() operator"));
4170 CopLINE_set(PL_curcop, oldline);
4177 if (type == OP_ANDASSIGN || type == OP_ORASSIGN || type == OP_DORASSIGN)
4178 other->op_private |= OPpASSIGN_BACKWARDS; /* other is an OP_SASSIGN */
4180 NewOp(1101, logop, 1, LOGOP);
4182 logop->op_type = (OPCODE)type;
4183 logop->op_ppaddr = PL_ppaddr[type];
4184 logop->op_first = first;
4185 logop->op_flags = (U8)(flags | OPf_KIDS);
4186 logop->op_other = LINKLIST(other);
4187 logop->op_private = (U8)(1 | (flags >> 8));
4189 /* establish postfix order */
4190 logop->op_next = LINKLIST(first);
4191 first->op_next = (OP*)logop;
4192 first->op_sibling = other;
4194 CHECKOP(type,logop);
4196 o = newUNOP(OP_NULL, 0, (OP*)logop);
4203 Perl_newCONDOP(pTHX_ I32 flags, OP *first, OP *trueop, OP *falseop)
4211 return newLOGOP(OP_AND, 0, first, trueop);
4213 return newLOGOP(OP_OR, 0, first, falseop);
4215 scalarboolean(first);
4216 if (first->op_type == OP_CONST) {
4217 if (first->op_private & OPpCONST_BARE &&
4218 first->op_private & OPpCONST_STRICT) {
4219 no_bareword_allowed(first);
4221 if (SvTRUE(((SVOP*)first)->op_sv)) {
4224 trueop = newUNOP(OP_NULL, 0, trueop);
4225 op_getmad(first,trueop,'C');
4226 op_getmad(falseop,trueop,'e');
4228 /* FIXME for MAD - should there be an ELSE here? */
4238 falseop = newUNOP(OP_NULL, 0, falseop);
4239 op_getmad(first,falseop,'C');
4240 op_getmad(trueop,falseop,'t');
4242 /* FIXME for MAD - should there be an ELSE here? */
4250 NewOp(1101, logop, 1, LOGOP);
4251 logop->op_type = OP_COND_EXPR;
4252 logop->op_ppaddr = PL_ppaddr[OP_COND_EXPR];
4253 logop->op_first = first;
4254 logop->op_flags = (U8)(flags | OPf_KIDS);
4255 logop->op_private = (U8)(1 | (flags >> 8));
4256 logop->op_other = LINKLIST(trueop);
4257 logop->op_next = LINKLIST(falseop);
4259 CHECKOP(OP_COND_EXPR, /* that's logop->op_type */
4262 /* establish postfix order */
4263 start = LINKLIST(first);
4264 first->op_next = (OP*)logop;
4266 first->op_sibling = trueop;
4267 trueop->op_sibling = falseop;
4268 o = newUNOP(OP_NULL, 0, (OP*)logop);
4270 trueop->op_next = falseop->op_next = o;
4277 Perl_newRANGE(pTHX_ I32 flags, OP *left, OP *right)
4286 NewOp(1101, range, 1, LOGOP);
4288 range->op_type = OP_RANGE;
4289 range->op_ppaddr = PL_ppaddr[OP_RANGE];
4290 range->op_first = left;
4291 range->op_flags = OPf_KIDS;
4292 leftstart = LINKLIST(left);
4293 range->op_other = LINKLIST(right);
4294 range->op_private = (U8)(1 | (flags >> 8));
4296 left->op_sibling = right;
4298 range->op_next = (OP*)range;
4299 flip = newUNOP(OP_FLIP, flags, (OP*)range);
4300 flop = newUNOP(OP_FLOP, 0, flip);
4301 o = newUNOP(OP_NULL, 0, flop);
4303 range->op_next = leftstart;
4305 left->op_next = flip;
4306 right->op_next = flop;
4308 range->op_targ = pad_alloc(OP_RANGE, SVs_PADMY);
4309 sv_upgrade(PAD_SV(range->op_targ), SVt_PVNV);
4310 flip->op_targ = pad_alloc(OP_RANGE, SVs_PADMY);
4311 sv_upgrade(PAD_SV(flip->op_targ), SVt_PVNV);
4313 flip->op_private = left->op_type == OP_CONST ? OPpFLIP_LINENUM : 0;
4314 flop->op_private = right->op_type == OP_CONST ? OPpFLIP_LINENUM : 0;
4317 if (!flip->op_private || !flop->op_private)
4318 linklist(o); /* blow off optimizer unless constant */
4324 Perl_newLOOPOP(pTHX_ I32 flags, I32 debuggable, OP *expr, OP *block)
4329 const bool once = block && block->op_flags & OPf_SPECIAL &&
4330 (block->op_type == OP_ENTERSUB || block->op_type == OP_NULL);
4332 PERL_UNUSED_ARG(debuggable);
4335 if (once && expr->op_type == OP_CONST && !SvTRUE(((SVOP*)expr)->op_sv))
4336 return block; /* do {} while 0 does once */
4337 if (expr->op_type == OP_READLINE || expr->op_type == OP_GLOB
4338 || (expr->op_type == OP_NULL && expr->op_targ == OP_GLOB)) {
4339 expr = newUNOP(OP_DEFINED, 0,
4340 newASSIGNOP(0, newDEFSVOP(), 0, expr) );
4341 } else if (expr->op_flags & OPf_KIDS) {
4342 const OP * const k1 = ((UNOP*)expr)->op_first;
4343 const OP * const k2 = k1 ? k1->op_sibling : NULL;
4344 switch (expr->op_type) {
4346 if (k2 && k2->op_type == OP_READLINE
4347 && (k2->op_flags & OPf_STACKED)
4348 && ((k1->op_flags & OPf_WANT) == OPf_WANT_SCALAR))
4349 expr = newUNOP(OP_DEFINED, 0, expr);
4353 if (k1 && (k1->op_type == OP_READDIR
4354 || k1->op_type == OP_GLOB
4355 || (k1->op_type == OP_NULL && k1->op_targ == OP_GLOB)
4356 || k1->op_type == OP_EACH))
4357 expr = newUNOP(OP_DEFINED, 0, expr);
4363 /* if block is null, the next append_elem() would put UNSTACK, a scalar
4364 * op, in listop. This is wrong. [perl #27024] */
4366 block = newOP(OP_NULL, 0);
4367 listop = append_elem(OP_LINESEQ, block, newOP(OP_UNSTACK, 0));
4368 o = new_logop(OP_AND, 0, &expr, &listop);
4371 ((LISTOP*)listop)->op_last->op_next = LINKLIST(o);
4373 if (once && o != listop)
4374 o->op_next = ((LOGOP*)cUNOPo->op_first)->op_other;
4377 o = newUNOP(OP_NULL, 0, o); /* or do {} while 1 loses outer block */
4379 o->op_flags |= flags;
4381 o->op_flags |= OPf_SPECIAL; /* suppress POPBLOCK curpm restoration*/
4386 Perl_newWHILEOP(pTHX_ I32 flags, I32 debuggable, LOOP *loop, I32
4387 whileline, OP *expr, OP *block, OP *cont, I32 has_my)
4396 PERL_UNUSED_ARG(debuggable);
4399 if (expr->op_type == OP_READLINE || expr->op_type == OP_GLOB
4400 || (expr->op_type == OP_NULL && expr->op_targ == OP_GLOB)) {
4401 expr = newUNOP(OP_DEFINED, 0,
4402 newASSIGNOP(0, newDEFSVOP(), 0, expr) );
4403 } else if (expr->op_flags & OPf_KIDS) {
4404 const OP * const k1 = ((UNOP*)expr)->op_first;
4405 const OP * const k2 = (k1) ? k1->op_sibling : NULL;
4406 switch (expr->op_type) {
4408 if (k2 && k2->op_type == OP_READLINE
4409 && (k2->op_flags & OPf_STACKED)
4410 && ((k1->op_flags & OPf_WANT) == OPf_WANT_SCALAR))
4411 expr = newUNOP(OP_DEFINED, 0, expr);
4415 if (k1 && (k1->op_type == OP_READDIR
4416 || k1->op_type == OP_GLOB
4417 || (k1->op_type == OP_NULL && k1->op_targ == OP_GLOB)
4418 || k1->op_type == OP_EACH))
4419 expr = newUNOP(OP_DEFINED, 0, expr);
4426 block = newOP(OP_NULL, 0);
4427 else if (cont || has_my) {
4428 block = scope(block);
4432 next = LINKLIST(cont);
4435 OP * const unstack = newOP(OP_UNSTACK, 0);
4438 cont = append_elem(OP_LINESEQ, cont, unstack);
4442 listop = append_list(OP_LINESEQ, (LISTOP*)block, (LISTOP*)cont);
4444 redo = LINKLIST(listop);
4447 PL_copline = (line_t)whileline;
4449 o = new_logop(OP_AND, 0, &expr, &listop);
4450 if (o == expr && o->op_type == OP_CONST && !SvTRUE(cSVOPo->op_sv)) {
4451 op_free(expr); /* oops, it's a while (0) */
4453 return NULL; /* listop already freed by new_logop */
4456 ((LISTOP*)listop)->op_last->op_next =
4457 (o == listop ? redo : LINKLIST(o));
4463 NewOp(1101,loop,1,LOOP);
4464 loop->op_type = OP_ENTERLOOP;
4465 loop->op_ppaddr = PL_ppaddr[OP_ENTERLOOP];
4466 loop->op_private = 0;
4467 loop->op_next = (OP*)loop;
4470 o = newBINOP(OP_LEAVELOOP, 0, (OP*)loop, o);
4472 loop->op_redoop = redo;
4473 loop->op_lastop = o;
4474 o->op_private |= loopflags;
4477 loop->op_nextop = next;
4479 loop->op_nextop = o;
4481 o->op_flags |= flags;
4482 o->op_private |= (flags >> 8);
4487 Perl_newFOROP(pTHX_ I32 flags, char *label, line_t forline, OP *sv, OP *expr, OP *block, OP *cont)
4492 PADOFFSET padoff = 0;
4498 if (sv->op_type == OP_RV2SV) { /* symbol table variable */
4499 iterpflags = sv->op_private & OPpOUR_INTRO; /* for our $x () */
4500 sv->op_type = OP_RV2GV;
4501 sv->op_ppaddr = PL_ppaddr[OP_RV2GV];
4502 if (cGVOPx_gv(cUNOPx(sv)->op_first) == PL_defgv)
4503 iterpflags |= OPpITER_DEF;
4505 else if (sv->op_type == OP_PADSV) { /* private variable */
4506 iterpflags = sv->op_private & OPpLVAL_INTRO; /* for my $x () */
4507 padoff = sv->op_targ;
4516 else if (sv->op_type == OP_THREADSV) { /* per-thread variable */
4517 padoff = sv->op_targ;
4522 iterflags |= OPf_SPECIAL;
4528 Perl_croak(aTHX_ "Can't use %s for loop variable", PL_op_desc[sv->op_type]);
4530 SV *const namesv = PAD_COMPNAME_SV(padoff);
4532 const char *const name = SvPV_const(namesv, len);
4534 if (len == 2 && name[0] == '$' && name[1] == '_')
4535 iterpflags |= OPpITER_DEF;
4539 const PADOFFSET offset = pad_findmy("$_");
4540 if (offset == NOT_IN_PAD || PAD_COMPNAME_FLAGS_isOUR(offset)) {
4541 sv = newGVOP(OP_GV, 0, PL_defgv);
4546 iterpflags |= OPpITER_DEF;
4548 if (expr->op_type == OP_RV2AV || expr->op_type == OP_PADAV) {
4549 expr = mod(force_list(scalar(ref(expr, OP_ITER))), OP_GREPSTART);
4550 iterflags |= OPf_STACKED;
4552 else if (expr->op_type == OP_NULL &&
4553 (expr->op_flags & OPf_KIDS) &&
4554 ((BINOP*)expr)->op_first->op_type == OP_FLOP)
4556 /* Basically turn for($x..$y) into the same as for($x,$y), but we
4557 * set the STACKED flag to indicate that these values are to be
4558 * treated as min/max values by 'pp_iterinit'.
4560 const UNOP* const flip = (UNOP*)((UNOP*)((BINOP*)expr)->op_first)->op_first;
4561 LOGOP* const range = (LOGOP*) flip->op_first;
4562 OP* const left = range->op_first;
4563 OP* const right = left->op_sibling;
4566 range->op_flags &= ~OPf_KIDS;
4567 range->op_first = NULL;
4569 listop = (LISTOP*)newLISTOP(OP_LIST, 0, left, right);
4570 listop->op_first->op_next = range->op_next;
4571 left->op_next = range->op_other;
4572 right->op_next = (OP*)listop;
4573 listop->op_next = listop->op_first;
4576 op_getmad(expr,(OP*)listop,'O');
4580 expr = (OP*)(listop);
4582 iterflags |= OPf_STACKED;
4585 expr = mod(force_list(expr), OP_GREPSTART);
4588 loop = (LOOP*)list(convert(OP_ENTERITER, iterflags,
4589 append_elem(OP_LIST, expr, scalar(sv))));
4590 assert(!loop->op_next);
4591 /* for my $x () sets OPpLVAL_INTRO;
4592 * for our $x () sets OPpOUR_INTRO */
4593 loop->op_private = (U8)iterpflags;
4594 #ifdef PL_OP_SLAB_ALLOC
4597 NewOp(1234,tmp,1,LOOP);
4598 Copy(loop,tmp,1,LISTOP);
4599 S_op_destroy(aTHX_ (OP*)loop);
4603 loop = (LOOP*)PerlMemShared_realloc(loop, sizeof(LOOP));
4605 loop->op_targ = padoff;
4606 wop = newWHILEOP(flags, 1, loop, forline, newOP(OP_ITER, 0), block, cont, 0);
4608 op_getmad(madsv, (OP*)loop, 'v');
4609 PL_copline = forline;
4610 return newSTATEOP(0, label, wop);
4614 Perl_newLOOPEX(pTHX_ I32 type, OP *label)
4619 if (type != OP_GOTO || label->op_type == OP_CONST) {
4620 /* "last()" means "last" */
4621 if (label->op_type == OP_STUB && (label->op_flags & OPf_PARENS))
4622 o = newOP(type, OPf_SPECIAL);
4624 o = newPVOP(type, 0, savepv(label->op_type == OP_CONST
4625 ? SvPVx_nolen_const(((SVOP*)label)->op_sv)
4629 op_getmad(label,o,'L');
4635 /* Check whether it's going to be a goto &function */
4636 if (label->op_type == OP_ENTERSUB
4637 && !(label->op_flags & OPf_STACKED))
4638 label = newUNOP(OP_REFGEN, 0, mod(label, OP_REFGEN));
4639 o = newUNOP(type, OPf_STACKED, label);
4641 PL_hints |= HINT_BLOCK_SCOPE;
4645 /* if the condition is a literal array or hash
4646 (or @{ ... } etc), make a reference to it.
4649 S_ref_array_or_hash(pTHX_ OP *cond)
4652 && (cond->op_type == OP_RV2AV
4653 || cond->op_type == OP_PADAV
4654 || cond->op_type == OP_RV2HV
4655 || cond->op_type == OP_PADHV))
4657 return newUNOP(OP_REFGEN,
4658 0, mod(cond, OP_REFGEN));
4664 /* These construct the optree fragments representing given()
4667 entergiven and enterwhen are LOGOPs; the op_other pointer
4668 points up to the associated leave op. We need this so we
4669 can put it in the context and make break/continue work.
4670 (Also, of course, pp_enterwhen will jump straight to
4671 op_other if the match fails.)
4676 S_newGIVWHENOP(pTHX_ OP *cond, OP *block,
4677 I32 enter_opcode, I32 leave_opcode,
4678 PADOFFSET entertarg)
4684 NewOp(1101, enterop, 1, LOGOP);
4685 enterop->op_type = enter_opcode;
4686 enterop->op_ppaddr = PL_ppaddr[enter_opcode];
4687 enterop->op_flags = (U8) OPf_KIDS;
4688 enterop->op_targ = ((entertarg == NOT_IN_PAD) ? 0 : entertarg);
4689 enterop->op_private = 0;
4691 o = newUNOP(leave_opcode, 0, (OP *) enterop);
4694 enterop->op_first = scalar(cond);
4695 cond->op_sibling = block;
4697 o->op_next = LINKLIST(cond);
4698 cond->op_next = (OP *) enterop;
4701 /* This is a default {} block */
4702 enterop->op_first = block;
4703 enterop->op_flags |= OPf_SPECIAL;
4705 o->op_next = (OP *) enterop;
4708 CHECKOP(enter_opcode, enterop); /* Currently does nothing, since
4709 entergiven and enterwhen both
4712 enterop->op_next = LINKLIST(block);
4713 block->op_next = enterop->op_other = o;
4718 /* Does this look like a boolean operation? For these purposes
4719 a boolean operation is:
4720 - a subroutine call [*]
4721 - a logical connective
4722 - a comparison operator
4723 - a filetest operator, with the exception of -s -M -A -C
4724 - defined(), exists() or eof()
4725 - /$re/ or $foo =~ /$re/
4727 [*] possibly surprising
4731 S_looks_like_bool(pTHX_ const OP *o)
4734 switch(o->op_type) {
4736 return looks_like_bool(cLOGOPo->op_first);
4740 looks_like_bool(cLOGOPo->op_first)
4741 && looks_like_bool(cLOGOPo->op_first->op_sibling));
4745 case OP_NOT: case OP_XOR:
4746 /* Note that OP_DOR is not here */
4748 case OP_EQ: case OP_NE: case OP_LT:
4749 case OP_GT: case OP_LE: case OP_GE:
4751 case OP_I_EQ: case OP_I_NE: case OP_I_LT:
4752 case OP_I_GT: case OP_I_LE: case OP_I_GE:
4754 case OP_SEQ: case OP_SNE: case OP_SLT:
4755 case OP_SGT: case OP_SLE: case OP_SGE:
4759 case OP_FTRREAD: case OP_FTRWRITE: case OP_FTREXEC:
4760 case OP_FTEREAD: case OP_FTEWRITE: case OP_FTEEXEC:
4761 case OP_FTIS: case OP_FTEOWNED: case OP_FTROWNED:
4762 case OP_FTZERO: case OP_FTSOCK: case OP_FTCHR:
4763 case OP_FTBLK: case OP_FTFILE: case OP_FTDIR:
4764 case OP_FTPIPE: case OP_FTLINK: case OP_FTSUID:
4765 case OP_FTSGID: case OP_FTSVTX: case OP_FTTTY:
4766 case OP_FTTEXT: case OP_FTBINARY:
4768 case OP_DEFINED: case OP_EXISTS:
4769 case OP_MATCH: case OP_EOF:
4774 /* Detect comparisons that have been optimized away */
4775 if (cSVOPo->op_sv == &PL_sv_yes
4776 || cSVOPo->op_sv == &PL_sv_no)
4787 Perl_newGIVENOP(pTHX_ OP *cond, OP *block, PADOFFSET defsv_off)
4791 return newGIVWHENOP(
4792 ref_array_or_hash(cond),
4794 OP_ENTERGIVEN, OP_LEAVEGIVEN,
4798 /* If cond is null, this is a default {} block */
4800 Perl_newWHENOP(pTHX_ OP *cond, OP *block)
4802 const bool cond_llb = (!cond || looks_like_bool(cond));
4808 cond_op = newBINOP(OP_SMARTMATCH, OPf_SPECIAL,
4810 scalar(ref_array_or_hash(cond)));
4813 return newGIVWHENOP(
4815 append_elem(block->op_type, block, newOP(OP_BREAK, OPf_SPECIAL)),
4816 OP_ENTERWHEN, OP_LEAVEWHEN, 0);
4820 =for apidoc cv_undef
4822 Clear out all the active components of a CV. This can happen either
4823 by an explicit C<undef &foo>, or by the reference count going to zero.
4824 In the former case, we keep the CvOUTSIDE pointer, so that any anonymous
4825 children can still follow the full lexical scope chain.
4831 Perl_cv_undef(pTHX_ CV *cv)
4835 if (CvFILE(cv) && !CvISXSUB(cv)) {
4836 /* for XSUBs CvFILE point directly to static memory; __FILE__ */
4837 Safefree(CvFILE(cv));