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> 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> on the save stack, so that it
95 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_ char *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
283 Perl_op_free(pTHX_ OP *o)
288 if (!o || o->op_static)
292 if (o->op_private & OPpREFCOUNTED) {
303 refcnt = OpREFCNT_dec(o);
314 if (o->op_flags & OPf_KIDS) {
315 register OP *kid, *nextkid;
316 for (kid = cUNOPo->op_first; kid; kid = nextkid) {
317 nextkid = kid->op_sibling; /* Get before next freeing kid */
322 type = (OPCODE)o->op_targ;
324 /* COP* is not cleared by op_clear() so that we may track line
325 * numbers etc even after null() */
326 if (type == OP_NEXTSTATE || type == OP_SETSTATE || type == OP_DBSTATE)
331 #ifdef DEBUG_LEAKING_SCALARS
338 Perl_op_clear(pTHX_ OP *o)
343 /* if (o->op_madprop && o->op_madprop->mad_next)
345 /* FIXME for MAD - if I uncomment these two lines t/op/pack.t fails with
346 "modification of a read only value" for a reason I can't fathom why.
347 It's the "" stringification of $_, where $_ was set to '' in a foreach
348 loop, but it defies simplification into a small test case.
349 However, commenting them out has caused ext/List/Util/t/weak.t to fail
352 mad_free(o->op_madprop);
358 switch (o->op_type) {
359 case OP_NULL: /* Was holding old type, if any. */
360 if (PL_madskills && o->op_targ != OP_NULL) {
361 o->op_type = o->op_targ;
365 case OP_ENTEREVAL: /* Was holding hints. */
369 if (!(o->op_flags & OPf_REF)
370 || (PL_check[o->op_type] != MEMBER_TO_FPTR(Perl_ck_ftst)))
376 if (! (o->op_type == OP_AELEMFAST && o->op_flags & OPf_SPECIAL)) {
377 /* not an OP_PADAV replacement */
379 if (cPADOPo->op_padix > 0) {
380 /* No GvIN_PAD_off(cGVOPo_gv) here, because other references
381 * may still exist on the pad */
382 pad_swipe(cPADOPo->op_padix, TRUE);
383 cPADOPo->op_padix = 0;
386 SvREFCNT_dec(cSVOPo->op_sv);
387 cSVOPo->op_sv = NULL;
391 case OP_METHOD_NAMED:
393 SvREFCNT_dec(cSVOPo->op_sv);
394 cSVOPo->op_sv = NULL;
397 Even if op_clear does a pad_free for the target of the op,
398 pad_free doesn't actually remove the sv that exists in the pad;
399 instead it lives on. This results in that it could be reused as
400 a target later on when the pad was reallocated.
403 pad_swipe(o->op_targ,1);
412 if (o->op_flags & (OPf_SPECIAL|OPf_STACKED|OPf_KIDS))
416 if (o->op_private & (OPpTRANS_FROM_UTF|OPpTRANS_TO_UTF)) {
417 SvREFCNT_dec(cSVOPo->op_sv);
418 cSVOPo->op_sv = NULL;
421 Safefree(cPVOPo->op_pv);
422 cPVOPo->op_pv = NULL;
426 op_free(cPMOPo->op_pmreplroot);
430 if (INT2PTR(PADOFFSET, cPMOPo->op_pmreplroot)) {
431 /* No GvIN_PAD_off here, because other references may still
432 * exist on the pad */
433 pad_swipe(INT2PTR(PADOFFSET, cPMOPo->op_pmreplroot), TRUE);
436 SvREFCNT_dec((SV*)cPMOPo->op_pmreplroot);
443 HV * const pmstash = PmopSTASH(cPMOPo);
444 if (pmstash && !SvIS_FREED(pmstash)) {
445 MAGIC * const mg = mg_find((SV*)pmstash, PERL_MAGIC_symtab);
447 PMOP *pmop = (PMOP*) mg->mg_obj;
448 PMOP *lastpmop = NULL;
450 if (cPMOPo == pmop) {
452 lastpmop->op_pmnext = pmop->op_pmnext;
454 mg->mg_obj = (SV*) pmop->op_pmnext;
458 pmop = pmop->op_pmnext;
462 PmopSTASH_free(cPMOPo);
464 cPMOPo->op_pmreplroot = NULL;
465 /* we use the "SAFE" version of the PM_ macros here
466 * since sv_clean_all might release some PMOPs
467 * after PL_regex_padav has been cleared
468 * and the clearing of PL_regex_padav needs to
469 * happen before sv_clean_all
471 ReREFCNT_dec(PM_GETRE_SAFE(cPMOPo));
472 PM_SETRE_SAFE(cPMOPo, NULL);
474 if(PL_regex_pad) { /* We could be in destruction */
475 av_push((AV*) PL_regex_pad[0],(SV*) PL_regex_pad[(cPMOPo)->op_pmoffset]);
476 SvREPADTMP_on(PL_regex_pad[(cPMOPo)->op_pmoffset]);
477 PM_SETRE(cPMOPo, (cPMOPo)->op_pmoffset);
484 if (o->op_targ > 0) {
485 pad_free(o->op_targ);
491 S_cop_free(pTHX_ COP* cop)
493 Safefree(cop->cop_label); /* FIXME: treaddead ??? */
496 if (! specialWARN(cop->cop_warnings))
497 PerlMemShared_free(cop->cop_warnings);
498 if (! specialCopIO(cop->cop_io)) {
502 SvREFCNT_dec(cop->cop_io);
505 Perl_refcounted_he_free(aTHX_ cop->cop_hints);
509 Perl_op_null(pTHX_ OP *o)
512 if (o->op_type == OP_NULL)
516 o->op_targ = o->op_type;
517 o->op_type = OP_NULL;
518 o->op_ppaddr = PL_ppaddr[OP_NULL];
522 Perl_op_refcnt_lock(pTHX)
530 Perl_op_refcnt_unlock(pTHX)
537 /* Contextualizers */
539 #define LINKLIST(o) ((o)->op_next ? (o)->op_next : linklist((OP*)o))
542 Perl_linklist(pTHX_ OP *o)
549 /* establish postfix order */
550 first = cUNOPo->op_first;
553 o->op_next = LINKLIST(first);
556 if (kid->op_sibling) {
557 kid->op_next = LINKLIST(kid->op_sibling);
558 kid = kid->op_sibling;
572 Perl_scalarkids(pTHX_ OP *o)
574 if (o && o->op_flags & OPf_KIDS) {
576 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
583 S_scalarboolean(pTHX_ OP *o)
586 if (o->op_type == OP_SASSIGN && cBINOPo->op_first->op_type == OP_CONST) {
587 if (ckWARN(WARN_SYNTAX)) {
588 const line_t oldline = CopLINE(PL_curcop);
590 if (PL_copline != NOLINE)
591 CopLINE_set(PL_curcop, PL_copline);
592 Perl_warner(aTHX_ packWARN(WARN_SYNTAX), "Found = in conditional, should be ==");
593 CopLINE_set(PL_curcop, oldline);
600 Perl_scalar(pTHX_ OP *o)
605 /* assumes no premature commitment */
606 if (!o || PL_error_count || (o->op_flags & OPf_WANT)
607 || o->op_type == OP_RETURN)
612 o->op_flags = (o->op_flags & ~OPf_WANT) | OPf_WANT_SCALAR;
614 switch (o->op_type) {
616 scalar(cBINOPo->op_first);
621 for (kid = cUNOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
625 if ((kid = cLISTOPo->op_first) && kid->op_type == OP_PUSHRE) {
626 if (!kPMOP->op_pmreplroot)
627 deprecate_old("implicit split to @_");
635 if (o->op_flags & OPf_KIDS) {
636 for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling)
642 kid = cLISTOPo->op_first;
644 while ((kid = kid->op_sibling)) {
650 WITH_THR(PL_curcop = &PL_compiling);
655 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling) {
661 WITH_THR(PL_curcop = &PL_compiling);
664 if (ckWARN(WARN_VOID))
665 Perl_warner(aTHX_ packWARN(WARN_VOID), "Useless use of sort in scalar context");
671 Perl_scalarvoid(pTHX_ OP *o)
675 const char* useless = NULL;
679 /* trailing mad null ops don't count as "there" for void processing */
681 o->op_type != OP_NULL &&
683 o->op_sibling->op_type == OP_NULL)
686 for (sib = o->op_sibling;
687 sib && sib->op_type == OP_NULL;
688 sib = sib->op_sibling) ;
694 if (o->op_type == OP_NEXTSTATE
695 || o->op_type == OP_SETSTATE
696 || o->op_type == OP_DBSTATE
697 || (o->op_type == OP_NULL && (o->op_targ == OP_NEXTSTATE
698 || o->op_targ == OP_SETSTATE
699 || o->op_targ == OP_DBSTATE)))
700 PL_curcop = (COP*)o; /* for warning below */
702 /* assumes no premature commitment */
703 want = o->op_flags & OPf_WANT;
704 if ((want && want != OPf_WANT_SCALAR) || PL_error_count
705 || o->op_type == OP_RETURN)
710 if ((o->op_private & OPpTARGET_MY)
711 && (PL_opargs[o->op_type] & OA_TARGLEX))/* OPp share the meaning */
713 return scalar(o); /* As if inside SASSIGN */
716 o->op_flags = (o->op_flags & ~OPf_WANT) | OPf_WANT_VOID;
718 switch (o->op_type) {
720 if (!(PL_opargs[o->op_type] & OA_FOLDCONST))
724 if (o->op_flags & OPf_STACKED)
728 if (o->op_private == 4)
800 if (!(o->op_private & (OPpLVAL_INTRO|OPpOUR_INTRO)))
801 useless = OP_DESC(o);
805 kid = cUNOPo->op_first;
806 if (kid->op_type != OP_MATCH && kid->op_type != OP_SUBST &&
807 kid->op_type != OP_TRANS) {
810 useless = "negative pattern binding (!~)";
817 if (!(o->op_private & (OPpLVAL_INTRO|OPpOUR_INTRO)) &&
818 (!o->op_sibling || o->op_sibling->op_type != OP_READLINE))
819 useless = "a variable";
824 if (cSVOPo->op_private & OPpCONST_STRICT)
825 no_bareword_allowed(o);
827 if (ckWARN(WARN_VOID)) {
828 useless = "a constant";
829 if (o->op_private & OPpCONST_ARYBASE)
831 /* don't warn on optimised away booleans, eg
832 * use constant Foo, 5; Foo || print; */
833 if (cSVOPo->op_private & OPpCONST_SHORTCIRCUIT)
835 /* the constants 0 and 1 are permitted as they are
836 conventionally used as dummies in constructs like
837 1 while some_condition_with_side_effects; */
838 else if (SvNIOK(sv) && (SvNV(sv) == 0.0 || SvNV(sv) == 1.0))
840 else if (SvPOK(sv)) {
841 /* perl4's way of mixing documentation and code
842 (before the invention of POD) was based on a
843 trick to mix nroff and perl code. The trick was
844 built upon these three nroff macros being used in
845 void context. The pink camel has the details in
846 the script wrapman near page 319. */
847 const char * const maybe_macro = SvPVX_const(sv);
848 if (strnEQ(maybe_macro, "di", 2) ||
849 strnEQ(maybe_macro, "ds", 2) ||
850 strnEQ(maybe_macro, "ig", 2))
855 op_null(o); /* don't execute or even remember it */
859 o->op_type = OP_PREINC; /* pre-increment is faster */
860 o->op_ppaddr = PL_ppaddr[OP_PREINC];
864 o->op_type = OP_PREDEC; /* pre-decrement is faster */
865 o->op_ppaddr = PL_ppaddr[OP_PREDEC];
869 o->op_type = OP_I_PREINC; /* pre-increment is faster */
870 o->op_ppaddr = PL_ppaddr[OP_I_PREINC];
874 o->op_type = OP_I_PREDEC; /* pre-decrement is faster */
875 o->op_ppaddr = PL_ppaddr[OP_I_PREDEC];
884 for (kid = cUNOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
889 if (o->op_flags & OPf_STACKED)
896 if (!(o->op_flags & OPf_KIDS))
907 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
914 /* all requires must return a boolean value */
915 o->op_flags &= ~OPf_WANT;
920 if ((kid = cLISTOPo->op_first) && kid->op_type == OP_PUSHRE) {
921 if (!kPMOP->op_pmreplroot)
922 deprecate_old("implicit split to @_");
926 if (useless && ckWARN(WARN_VOID))
927 Perl_warner(aTHX_ packWARN(WARN_VOID), "Useless use of %s in void context", useless);
932 Perl_listkids(pTHX_ OP *o)
934 if (o && o->op_flags & OPf_KIDS) {
936 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
943 Perl_list(pTHX_ OP *o)
948 /* assumes no premature commitment */
949 if (!o || (o->op_flags & OPf_WANT) || PL_error_count
950 || o->op_type == OP_RETURN)
955 if ((o->op_private & OPpTARGET_MY)
956 && (PL_opargs[o->op_type] & OA_TARGLEX))/* OPp share the meaning */
958 return o; /* As if inside SASSIGN */
961 o->op_flags = (o->op_flags & ~OPf_WANT) | OPf_WANT_LIST;
963 switch (o->op_type) {
966 list(cBINOPo->op_first);
971 for (kid = cUNOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
979 if (!(o->op_flags & OPf_KIDS))
981 if (!o->op_next && cUNOPo->op_first->op_type == OP_FLOP) {
982 list(cBINOPo->op_first);
983 return gen_constant_list(o);
990 kid = cLISTOPo->op_first;
992 while ((kid = kid->op_sibling)) {
998 WITH_THR(PL_curcop = &PL_compiling);
1002 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling) {
1003 if (kid->op_sibling)
1008 WITH_THR(PL_curcop = &PL_compiling);
1011 /* all requires must return a boolean value */
1012 o->op_flags &= ~OPf_WANT;
1019 Perl_scalarseq(pTHX_ OP *o)
1023 const OPCODE type = o->op_type;
1025 if (type == OP_LINESEQ || type == OP_SCOPE ||
1026 type == OP_LEAVE || type == OP_LEAVETRY)
1029 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling) {
1030 if (kid->op_sibling) {
1034 PL_curcop = &PL_compiling;
1036 o->op_flags &= ~OPf_PARENS;
1037 if (PL_hints & HINT_BLOCK_SCOPE)
1038 o->op_flags |= OPf_PARENS;
1041 o = newOP(OP_STUB, 0);
1046 S_modkids(pTHX_ OP *o, I32 type)
1048 if (o && o->op_flags & OPf_KIDS) {
1050 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
1056 /* Propagate lvalue ("modifiable") context to an op and its children.
1057 * 'type' represents the context type, roughly based on the type of op that
1058 * would do the modifying, although local() is represented by OP_NULL.
1059 * It's responsible for detecting things that can't be modified, flag
1060 * things that need to behave specially in an lvalue context (e.g., "$$x = 5"
1061 * might have to vivify a reference in $x), and so on.
1063 * For example, "$a+1 = 2" would cause mod() to be called with o being
1064 * OP_ADD and type being OP_SASSIGN, and would output an error.
1068 Perl_mod(pTHX_ OP *o, I32 type)
1072 /* -1 = error on localize, 0 = ignore localize, 1 = ok to localize */
1075 if (!o || PL_error_count)
1078 if ((o->op_private & OPpTARGET_MY)
1079 && (PL_opargs[o->op_type] & OA_TARGLEX))/* OPp share the meaning */
1084 switch (o->op_type) {
1090 if (!(o->op_private & OPpCONST_ARYBASE))
1093 if (PL_eval_start && PL_eval_start->op_type == OP_CONST) {
1094 CopARYBASE_set(&PL_compiling,
1095 (I32)SvIV(cSVOPx(PL_eval_start)->op_sv));
1099 SAVECOPARYBASE(&PL_compiling);
1100 CopARYBASE_set(&PL_compiling, 0);
1102 else if (type == OP_REFGEN)
1105 Perl_croak(aTHX_ "That use of $[ is unsupported");
1108 if (o->op_flags & OPf_PARENS || PL_madskills)
1112 if ((type == OP_UNDEF || type == OP_REFGEN) &&
1113 !(o->op_flags & OPf_STACKED)) {
1114 o->op_type = OP_RV2CV; /* entersub => rv2cv */
1115 /* The default is to set op_private to the number of children,
1116 which for a UNOP such as RV2CV is always 1. And w're using
1117 the bit for a flag in RV2CV, so we need it clear. */
1118 o->op_private &= ~1;
1119 o->op_ppaddr = PL_ppaddr[OP_RV2CV];
1120 assert(cUNOPo->op_first->op_type == OP_NULL);
1121 op_null(((LISTOP*)cUNOPo->op_first)->op_first);/* disable pushmark */
1124 else if (o->op_private & OPpENTERSUB_NOMOD)
1126 else { /* lvalue subroutine call */
1127 o->op_private |= OPpLVAL_INTRO;
1128 PL_modcount = RETURN_UNLIMITED_NUMBER;
1129 if (type == OP_GREPSTART || type == OP_ENTERSUB || type == OP_REFGEN) {
1130 /* Backward compatibility mode: */
1131 o->op_private |= OPpENTERSUB_INARGS;
1134 else { /* Compile-time error message: */
1135 OP *kid = cUNOPo->op_first;
1139 if (kid->op_type != OP_PUSHMARK) {
1140 if (kid->op_type != OP_NULL || kid->op_targ != OP_LIST)
1142 "panic: unexpected lvalue entersub "
1143 "args: type/targ %ld:%"UVuf,
1144 (long)kid->op_type, (UV)kid->op_targ);
1145 kid = kLISTOP->op_first;
1147 while (kid->op_sibling)
1148 kid = kid->op_sibling;
1149 if (!(kid->op_type == OP_NULL && kid->op_targ == OP_RV2CV)) {
1151 if (kid->op_type == OP_METHOD_NAMED
1152 || kid->op_type == OP_METHOD)
1156 NewOp(1101, newop, 1, UNOP);
1157 newop->op_type = OP_RV2CV;
1158 newop->op_ppaddr = PL_ppaddr[OP_RV2CV];
1159 newop->op_first = NULL;
1160 newop->op_next = (OP*)newop;
1161 kid->op_sibling = (OP*)newop;
1162 newop->op_private |= OPpLVAL_INTRO;
1163 newop->op_private &= ~1;
1167 if (kid->op_type != OP_RV2CV)
1169 "panic: unexpected lvalue entersub "
1170 "entry via type/targ %ld:%"UVuf,
1171 (long)kid->op_type, (UV)kid->op_targ);
1172 kid->op_private |= OPpLVAL_INTRO;
1173 break; /* Postpone until runtime */
1177 kid = kUNOP->op_first;
1178 if (kid->op_type == OP_NULL && kid->op_targ == OP_RV2SV)
1179 kid = kUNOP->op_first;
1180 if (kid->op_type == OP_NULL)
1182 "Unexpected constant lvalue entersub "
1183 "entry via type/targ %ld:%"UVuf,
1184 (long)kid->op_type, (UV)kid->op_targ);
1185 if (kid->op_type != OP_GV) {
1186 /* Restore RV2CV to check lvalueness */
1188 if (kid->op_next && kid->op_next != kid) { /* Happens? */
1189 okid->op_next = kid->op_next;
1190 kid->op_next = okid;
1193 okid->op_next = NULL;
1194 okid->op_type = OP_RV2CV;
1196 okid->op_ppaddr = PL_ppaddr[OP_RV2CV];
1197 okid->op_private |= OPpLVAL_INTRO;
1198 okid->op_private &= ~1;
1202 cv = GvCV(kGVOP_gv);
1212 /* grep, foreach, subcalls, refgen */
1213 if (type == OP_GREPSTART || type == OP_ENTERSUB || type == OP_REFGEN)
1215 yyerror(Perl_form(aTHX_ "Can't modify %s in %s",
1216 (o->op_type == OP_NULL && (o->op_flags & OPf_SPECIAL)
1218 : (o->op_type == OP_ENTERSUB
1219 ? "non-lvalue subroutine call"
1221 type ? PL_op_desc[type] : "local"));
1235 case OP_RIGHT_SHIFT:
1244 if (!(o->op_flags & OPf_STACKED))
1251 for (kid = cUNOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
1257 if (type == OP_REFGEN && o->op_flags & OPf_PARENS) {
1258 PL_modcount = RETURN_UNLIMITED_NUMBER;
1259 return o; /* Treat \(@foo) like ordinary list. */
1263 if (scalar_mod_type(o, type))
1265 ref(cUNOPo->op_first, o->op_type);
1269 if (type == OP_LEAVESUBLV)
1270 o->op_private |= OPpMAYBE_LVSUB;
1276 PL_modcount = RETURN_UNLIMITED_NUMBER;
1279 ref(cUNOPo->op_first, o->op_type);
1284 PL_hints |= HINT_BLOCK_SCOPE;
1299 PL_modcount = RETURN_UNLIMITED_NUMBER;
1300 if (type == OP_REFGEN && o->op_flags & OPf_PARENS)
1301 return o; /* Treat \(@foo) like ordinary list. */
1302 if (scalar_mod_type(o, type))
1304 if (type == OP_LEAVESUBLV)
1305 o->op_private |= OPpMAYBE_LVSUB;
1309 if (!type) /* local() */
1310 Perl_croak(aTHX_ "Can't localize lexical variable %s",
1311 PAD_COMPNAME_PV(o->op_targ));
1319 if (type != OP_SASSIGN)
1323 if (o->op_private == 4) /* don't allow 4 arg substr as lvalue */
1328 if (type == OP_LEAVESUBLV)
1329 o->op_private |= OPpMAYBE_LVSUB;
1331 pad_free(o->op_targ);
1332 o->op_targ = pad_alloc(o->op_type, SVs_PADMY);
1333 assert(SvTYPE(PAD_SV(o->op_targ)) == SVt_NULL);
1334 if (o->op_flags & OPf_KIDS)
1335 mod(cBINOPo->op_first->op_sibling, type);
1340 ref(cBINOPo->op_first, o->op_type);
1341 if (type == OP_ENTERSUB &&
1342 !(o->op_private & (OPpLVAL_INTRO | OPpDEREF)))
1343 o->op_private |= OPpLVAL_DEFER;
1344 if (type == OP_LEAVESUBLV)
1345 o->op_private |= OPpMAYBE_LVSUB;
1355 if (o->op_flags & OPf_KIDS)
1356 mod(cLISTOPo->op_last, type);
1361 if (o->op_flags & OPf_SPECIAL) /* do BLOCK */
1363 else if (!(o->op_flags & OPf_KIDS))
1365 if (o->op_targ != OP_LIST) {
1366 mod(cBINOPo->op_first, type);
1372 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
1377 if (type != OP_LEAVESUBLV)
1379 break; /* mod()ing was handled by ck_return() */
1382 /* [20011101.069] File test operators interpret OPf_REF to mean that
1383 their argument is a filehandle; thus \stat(".") should not set
1385 if (type == OP_REFGEN &&
1386 PL_check[o->op_type] == MEMBER_TO_FPTR(Perl_ck_ftst))
1389 if (type != OP_LEAVESUBLV)
1390 o->op_flags |= OPf_MOD;
1392 if (type == OP_AASSIGN || type == OP_SASSIGN)
1393 o->op_flags |= OPf_SPECIAL|OPf_REF;
1394 else if (!type) { /* local() */
1397 o->op_private |= OPpLVAL_INTRO;
1398 o->op_flags &= ~OPf_SPECIAL;
1399 PL_hints |= HINT_BLOCK_SCOPE;
1404 if (ckWARN(WARN_SYNTAX)) {
1405 Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
1406 "Useless localization of %s", OP_DESC(o));
1410 else if (type != OP_GREPSTART && type != OP_ENTERSUB
1411 && type != OP_LEAVESUBLV)
1412 o->op_flags |= OPf_REF;
1417 S_scalar_mod_type(const OP *o, I32 type)
1421 if (o->op_type == OP_RV2GV)
1445 case OP_RIGHT_SHIFT:
1464 S_is_handle_constructor(const OP *o, I32 numargs)
1466 switch (o->op_type) {
1474 case OP_SELECT: /* XXX c.f. SelectSaver.pm */
1487 Perl_refkids(pTHX_ OP *o, I32 type)
1489 if (o && o->op_flags & OPf_KIDS) {
1491 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
1498 Perl_doref(pTHX_ OP *o, I32 type, bool set_op_ref)
1503 if (!o || PL_error_count)
1506 switch (o->op_type) {
1508 if ((type == OP_EXISTS || type == OP_DEFINED || type == OP_LOCK) &&
1509 !(o->op_flags & OPf_STACKED)) {
1510 o->op_type = OP_RV2CV; /* entersub => rv2cv */
1511 o->op_ppaddr = PL_ppaddr[OP_RV2CV];
1512 assert(cUNOPo->op_first->op_type == OP_NULL);
1513 op_null(((LISTOP*)cUNOPo->op_first)->op_first); /* disable pushmark */
1514 o->op_flags |= OPf_SPECIAL;
1515 o->op_private &= ~1;
1520 for (kid = cUNOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
1521 doref(kid, type, set_op_ref);
1524 if (type == OP_DEFINED)
1525 o->op_flags |= OPf_SPECIAL; /* don't create GV */
1526 doref(cUNOPo->op_first, o->op_type, set_op_ref);
1529 if (type == OP_RV2SV || type == OP_RV2AV || type == OP_RV2HV) {
1530 o->op_private |= (type == OP_RV2AV ? OPpDEREF_AV
1531 : type == OP_RV2HV ? OPpDEREF_HV
1533 o->op_flags |= OPf_MOD;
1538 o->op_flags |= OPf_MOD; /* XXX ??? */
1544 o->op_flags |= OPf_REF;
1547 if (type == OP_DEFINED)
1548 o->op_flags |= OPf_SPECIAL; /* don't create GV */
1549 doref(cUNOPo->op_first, o->op_type, set_op_ref);
1555 o->op_flags |= OPf_REF;
1560 if (!(o->op_flags & OPf_KIDS))
1562 doref(cBINOPo->op_first, type, set_op_ref);
1566 doref(cBINOPo->op_first, o->op_type, set_op_ref);
1567 if (type == OP_RV2SV || type == OP_RV2AV || type == OP_RV2HV) {
1568 o->op_private |= (type == OP_RV2AV ? OPpDEREF_AV
1569 : type == OP_RV2HV ? OPpDEREF_HV
1571 o->op_flags |= OPf_MOD;
1581 if (!(o->op_flags & OPf_KIDS))
1583 doref(cLISTOPo->op_last, type, set_op_ref);
1593 S_dup_attrlist(pTHX_ OP *o)
1598 /* An attrlist is either a simple OP_CONST or an OP_LIST with kids,
1599 * where the first kid is OP_PUSHMARK and the remaining ones
1600 * are OP_CONST. We need to push the OP_CONST values.
1602 if (o->op_type == OP_CONST)
1603 rop = newSVOP(OP_CONST, o->op_flags, SvREFCNT_inc_NN(cSVOPo->op_sv));
1605 else if (o->op_type == OP_NULL)
1609 assert((o->op_type == OP_LIST) && (o->op_flags & OPf_KIDS));
1611 for (o = cLISTOPo->op_first; o; o=o->op_sibling) {
1612 if (o->op_type == OP_CONST)
1613 rop = append_elem(OP_LIST, rop,
1614 newSVOP(OP_CONST, o->op_flags,
1615 SvREFCNT_inc_NN(cSVOPo->op_sv)));
1622 S_apply_attrs(pTHX_ HV *stash, SV *target, OP *attrs, bool for_my)
1627 /* fake up C<use attributes $pkg,$rv,@attrs> */
1628 ENTER; /* need to protect against side-effects of 'use' */
1630 stashsv = stash ? newSVhek(HvNAME_HEK(stash)) : &PL_sv_no;
1632 #define ATTRSMODULE "attributes"
1633 #define ATTRSMODULE_PM "attributes.pm"
1636 /* Don't force the C<use> if we don't need it. */
1637 SV * const * const svp = hv_fetchs(GvHVn(PL_incgv), ATTRSMODULE_PM, FALSE);
1638 if (svp && *svp != &PL_sv_undef)
1639 NOOP; /* already in %INC */
1641 Perl_load_module(aTHX_ PERL_LOADMOD_NOIMPORT,
1642 newSVpvs(ATTRSMODULE), NULL);
1645 Perl_load_module(aTHX_ PERL_LOADMOD_IMPORT_OPS,
1646 newSVpvs(ATTRSMODULE),
1648 prepend_elem(OP_LIST,
1649 newSVOP(OP_CONST, 0, stashsv),
1650 prepend_elem(OP_LIST,
1651 newSVOP(OP_CONST, 0,
1653 dup_attrlist(attrs))));
1659 S_apply_attrs_my(pTHX_ HV *stash, OP *target, OP *attrs, OP **imopsp)
1662 OP *pack, *imop, *arg;
1668 assert(target->op_type == OP_PADSV ||
1669 target->op_type == OP_PADHV ||
1670 target->op_type == OP_PADAV);
1672 /* Ensure that attributes.pm is loaded. */
1673 apply_attrs(stash, PAD_SV(target->op_targ), attrs, TRUE);
1675 /* Need package name for method call. */
1676 pack = newSVOP(OP_CONST, 0, newSVpvs(ATTRSMODULE));
1678 /* Build up the real arg-list. */
1679 stashsv = stash ? newSVhek(HvNAME_HEK(stash)) : &PL_sv_no;
1681 arg = newOP(OP_PADSV, 0);
1682 arg->op_targ = target->op_targ;
1683 arg = prepend_elem(OP_LIST,
1684 newSVOP(OP_CONST, 0, stashsv),
1685 prepend_elem(OP_LIST,
1686 newUNOP(OP_REFGEN, 0,
1687 mod(arg, OP_REFGEN)),
1688 dup_attrlist(attrs)));
1690 /* Fake up a method call to import */
1691 meth = newSVpvs_share("import");
1692 imop = convert(OP_ENTERSUB, OPf_STACKED|OPf_SPECIAL|OPf_WANT_VOID,
1693 append_elem(OP_LIST,
1694 prepend_elem(OP_LIST, pack, list(arg)),
1695 newSVOP(OP_METHOD_NAMED, 0, meth)));
1696 imop->op_private |= OPpENTERSUB_NOMOD;
1698 /* Combine the ops. */
1699 *imopsp = append_elem(OP_LIST, *imopsp, imop);
1703 =notfor apidoc apply_attrs_string
1705 Attempts to apply a list of attributes specified by the C<attrstr> and
1706 C<len> arguments to the subroutine identified by the C<cv> argument which
1707 is expected to be associated with the package identified by the C<stashpv>
1708 argument (see L<attributes>). It gets this wrong, though, in that it
1709 does not correctly identify the boundaries of the individual attribute
1710 specifications within C<attrstr>. This is not really intended for the
1711 public API, but has to be listed here for systems such as AIX which
1712 need an explicit export list for symbols. (It's called from XS code
1713 in support of the C<ATTRS:> keyword from F<xsubpp>.) Patches to fix it
1714 to respect attribute syntax properly would be welcome.
1720 Perl_apply_attrs_string(pTHX_ const char *stashpv, CV *cv,
1721 const char *attrstr, STRLEN len)
1726 len = strlen(attrstr);
1730 for (; isSPACE(*attrstr) && len; --len, ++attrstr) ;
1732 const char * const sstr = attrstr;
1733 for (; !isSPACE(*attrstr) && len; --len, ++attrstr) ;
1734 attrs = append_elem(OP_LIST, attrs,
1735 newSVOP(OP_CONST, 0,
1736 newSVpvn(sstr, attrstr-sstr)));
1740 Perl_load_module(aTHX_ PERL_LOADMOD_IMPORT_OPS,
1741 newSVpvs(ATTRSMODULE),
1742 NULL, prepend_elem(OP_LIST,
1743 newSVOP(OP_CONST, 0, newSVpv(stashpv,0)),
1744 prepend_elem(OP_LIST,
1745 newSVOP(OP_CONST, 0,
1751 S_my_kid(pTHX_ OP *o, OP *attrs, OP **imopsp)
1756 if (!o || PL_error_count)
1760 if (PL_madskills && type == OP_NULL && o->op_flags & OPf_KIDS) {
1761 (void)my_kid(cUNOPo->op_first, attrs, imopsp);
1765 if (type == OP_LIST) {
1767 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
1768 my_kid(kid, attrs, imopsp);
1769 } else if (type == OP_UNDEF
1775 } else if (type == OP_RV2SV || /* "our" declaration */
1777 type == OP_RV2HV) { /* XXX does this let anything illegal in? */
1778 if (cUNOPo->op_first->op_type != OP_GV) { /* MJD 20011224 */
1779 yyerror(Perl_form(aTHX_ "Can't declare %s in %s",
1781 PL_in_my == KEY_our ? "our" : PL_in_my == KEY_state ? "state" : "my"));
1783 GV * const gv = cGVOPx_gv(cUNOPo->op_first);
1785 PL_in_my_stash = NULL;
1786 apply_attrs(GvSTASH(gv),
1787 (type == OP_RV2SV ? GvSV(gv) :
1788 type == OP_RV2AV ? (SV*)GvAV(gv) :
1789 type == OP_RV2HV ? (SV*)GvHV(gv) : (SV*)gv),
1792 o->op_private |= OPpOUR_INTRO;
1795 else if (type != OP_PADSV &&
1798 type != OP_PUSHMARK)
1800 yyerror(Perl_form(aTHX_ "Can't declare %s in \"%s\"",
1802 PL_in_my == KEY_our ? "our" : PL_in_my == KEY_state ? "state" : "my"));
1805 else if (attrs && type != OP_PUSHMARK) {
1809 PL_in_my_stash = NULL;
1811 /* check for C<my Dog $spot> when deciding package */
1812 stash = PAD_COMPNAME_TYPE(o->op_targ);
1814 stash = PL_curstash;
1815 apply_attrs_my(stash, o, attrs, imopsp);
1817 o->op_flags |= OPf_MOD;
1818 o->op_private |= OPpLVAL_INTRO;
1819 if (PL_in_my == KEY_state)
1820 o->op_private |= OPpPAD_STATE;
1825 Perl_my_attrs(pTHX_ OP *o, OP *attrs)
1829 int maybe_scalar = 0;
1831 /* [perl #17376]: this appears to be premature, and results in code such as
1832 C< our(%x); > executing in list mode rather than void mode */
1834 if (o->op_flags & OPf_PARENS)
1844 o = my_kid(o, attrs, &rops);
1846 if (maybe_scalar && o->op_type == OP_PADSV) {
1847 o = scalar(append_list(OP_LIST, (LISTOP*)rops, (LISTOP*)o));
1848 o->op_private |= OPpLVAL_INTRO;
1851 o = append_list(OP_LIST, (LISTOP*)o, (LISTOP*)rops);
1854 PL_in_my_stash = NULL;
1859 Perl_my(pTHX_ OP *o)
1861 return my_attrs(o, NULL);
1865 Perl_sawparens(pTHX_ OP *o)
1867 PERL_UNUSED_CONTEXT;
1869 o->op_flags |= OPf_PARENS;
1874 Perl_bind_match(pTHX_ I32 type, OP *left, OP *right)
1878 const OPCODE ltype = left->op_type;
1879 const OPCODE rtype = right->op_type;
1881 if ( (ltype == OP_RV2AV || ltype == OP_RV2HV || ltype == OP_PADAV
1882 || ltype == OP_PADHV) && ckWARN(WARN_MISC))
1884 const char * const desc
1885 = PL_op_desc[(rtype == OP_SUBST || rtype == OP_TRANS)
1886 ? rtype : OP_MATCH];
1887 const char * const sample = ((ltype == OP_RV2AV || ltype == OP_PADAV)
1888 ? "@array" : "%hash");
1889 Perl_warner(aTHX_ packWARN(WARN_MISC),
1890 "Applying %s to %s will act on scalar(%s)",
1891 desc, sample, sample);
1894 if (rtype == OP_CONST &&
1895 cSVOPx(right)->op_private & OPpCONST_BARE &&
1896 cSVOPx(right)->op_private & OPpCONST_STRICT)
1898 no_bareword_allowed(right);
1901 ismatchop = rtype == OP_MATCH ||
1902 rtype == OP_SUBST ||
1904 if (ismatchop && right->op_private & OPpTARGET_MY) {
1906 right->op_private &= ~OPpTARGET_MY;
1908 if (!(right->op_flags & OPf_STACKED) && ismatchop) {
1911 right->op_flags |= OPf_STACKED;
1912 if (rtype != OP_MATCH &&
1913 ! (rtype == OP_TRANS &&
1914 right->op_private & OPpTRANS_IDENTICAL))
1915 newleft = mod(left, rtype);
1918 if (right->op_type == OP_TRANS)
1919 o = newBINOP(OP_NULL, OPf_STACKED, scalar(newleft), right);
1921 o = prepend_elem(rtype, scalar(newleft), right);
1923 return newUNOP(OP_NOT, 0, scalar(o));
1927 return bind_match(type, left,
1928 pmruntime(newPMOP(OP_MATCH, 0), right, 0));
1932 Perl_invert(pTHX_ OP *o)
1936 return newUNOP(OP_NOT, OPf_SPECIAL, scalar(o));
1940 Perl_scope(pTHX_ OP *o)
1944 if (o->op_flags & OPf_PARENS || PERLDB_NOOPT || PL_tainting) {
1945 o = prepend_elem(OP_LINESEQ, newOP(OP_ENTER, 0), o);
1946 o->op_type = OP_LEAVE;
1947 o->op_ppaddr = PL_ppaddr[OP_LEAVE];
1949 else if (o->op_type == OP_LINESEQ) {
1951 o->op_type = OP_SCOPE;
1952 o->op_ppaddr = PL_ppaddr[OP_SCOPE];
1953 kid = ((LISTOP*)o)->op_first;
1954 if (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) {
1957 /* The following deals with things like 'do {1 for 1}' */
1958 kid = kid->op_sibling;
1960 (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE))
1965 o = newLISTOP(OP_SCOPE, 0, o, NULL);
1971 Perl_block_start(pTHX_ int full)
1974 const int retval = PL_savestack_ix;
1975 pad_block_start(full);
1977 PL_hints &= ~HINT_BLOCK_SCOPE;
1978 SAVECOMPILEWARNINGS();
1979 PL_compiling.cop_warnings = DUP_WARNINGS(PL_compiling.cop_warnings);
1980 SAVESPTR(PL_compiling.cop_io);
1981 if (! specialCopIO(PL_compiling.cop_io)) {
1982 PL_compiling.cop_io = newSVsv(PL_compiling.cop_io) ;
1983 SAVEFREESV(PL_compiling.cop_io) ;
1989 Perl_block_end(pTHX_ I32 floor, OP *seq)
1992 const int needblockscope = PL_hints & HINT_BLOCK_SCOPE;
1993 OP* const retval = scalarseq(seq);
1995 CopHINTS_set(&PL_compiling, PL_hints);
1997 PL_hints |= HINT_BLOCK_SCOPE; /* propagate out */
2006 const PADOFFSET offset = pad_findmy("$_");
2007 if (offset == NOT_IN_PAD || PAD_COMPNAME_FLAGS_isOUR(offset)) {
2008 return newSVREF(newGVOP(OP_GV, 0, PL_defgv));
2011 OP * const o = newOP(OP_PADSV, 0);
2012 o->op_targ = offset;
2018 Perl_newPROG(pTHX_ OP *o)
2024 PL_eval_root = newUNOP(OP_LEAVEEVAL,
2025 ((PL_in_eval & EVAL_KEEPERR)
2026 ? OPf_SPECIAL : 0), o);
2027 PL_eval_start = linklist(PL_eval_root);
2028 PL_eval_root->op_private |= OPpREFCOUNTED;
2029 OpREFCNT_set(PL_eval_root, 1);
2030 PL_eval_root->op_next = 0;
2031 CALL_PEEP(PL_eval_start);
2034 if (o->op_type == OP_STUB) {
2035 PL_comppad_name = 0;
2040 PL_main_root = scope(sawparens(scalarvoid(o)));
2041 PL_curcop = &PL_compiling;
2042 PL_main_start = LINKLIST(PL_main_root);
2043 PL_main_root->op_private |= OPpREFCOUNTED;
2044 OpREFCNT_set(PL_main_root, 1);
2045 PL_main_root->op_next = 0;
2046 CALL_PEEP(PL_main_start);
2049 /* Register with debugger */
2051 CV * const cv = get_cv("DB::postponed", FALSE);
2055 XPUSHs((SV*)CopFILEGV(&PL_compiling));
2057 call_sv((SV*)cv, G_DISCARD);
2064 Perl_localize(pTHX_ OP *o, I32 lex)
2067 if (o->op_flags & OPf_PARENS)
2068 /* [perl #17376]: this appears to be premature, and results in code such as
2069 C< our(%x); > executing in list mode rather than void mode */
2076 if ( PL_bufptr > PL_oldbufptr && PL_bufptr[-1] == ','
2077 && ckWARN(WARN_PARENTHESIS))
2079 char *s = PL_bufptr;
2082 /* some heuristics to detect a potential error */
2083 while (*s && (strchr(", \t\n", *s)))
2087 if (*s && strchr("@$%*", *s) && *++s
2088 && (isALNUM(*s) || UTF8_IS_CONTINUED(*s))) {
2091 while (*s && (isALNUM(*s) || UTF8_IS_CONTINUED(*s)))
2093 while (*s && (strchr(", \t\n", *s)))
2099 if (sigil && (*s == ';' || *s == '=')) {
2100 Perl_warner(aTHX_ packWARN(WARN_PARENTHESIS),
2101 "Parentheses missing around \"%s\" list",
2102 lex ? (PL_in_my == KEY_our ? "our" : PL_in_my == KEY_state ? "state" : "my")
2110 o = mod(o, OP_NULL); /* a bit kludgey */
2112 PL_in_my_stash = NULL;
2117 Perl_jmaybe(pTHX_ OP *o)
2119 if (o->op_type == OP_LIST) {
2121 = newSVREF(newGVOP(OP_GV, 0, gv_fetchpvs(";", GV_ADD|GV_NOTQUAL, SVt_PV)));
2122 o = convert(OP_JOIN, 0, prepend_elem(OP_LIST, o2, o));
2128 Perl_fold_constants(pTHX_ register OP *o)
2133 I32 type = o->op_type;
2140 if (PL_opargs[type] & OA_RETSCALAR)
2142 if (PL_opargs[type] & OA_TARGET && !o->op_targ)
2143 o->op_targ = pad_alloc(type, SVs_PADTMP);
2145 /* integerize op, unless it happens to be C<-foo>.
2146 * XXX should pp_i_negate() do magic string negation instead? */
2147 if ((PL_opargs[type] & OA_OTHERINT) && (PL_hints & HINT_INTEGER)
2148 && !(type == OP_NEGATE && cUNOPo->op_first->op_type == OP_CONST
2149 && (cUNOPo->op_first->op_private & OPpCONST_BARE)))
2151 o->op_ppaddr = PL_ppaddr[type = ++(o->op_type)];
2154 if (!(PL_opargs[type] & OA_FOLDCONST))
2159 /* XXX might want a ck_negate() for this */
2160 cUNOPo->op_first->op_private &= ~OPpCONST_STRICT;
2171 /* XXX what about the numeric ops? */
2172 if (PL_hints & HINT_LOCALE)
2177 goto nope; /* Don't try to run w/ errors */
2179 for (curop = LINKLIST(o); curop != o; curop = LINKLIST(curop)) {
2180 const OPCODE type = curop->op_type;
2181 if ((type != OP_CONST || (curop->op_private & OPpCONST_BARE)) &&
2183 type != OP_SCALAR &&
2185 type != OP_PUSHMARK)
2191 curop = LINKLIST(o);
2192 old_next = o->op_next;
2196 oldscope = PL_scopestack_ix;
2197 create_eval_scope(G_FAKINGEVAL);
2204 sv = *(PL_stack_sp--);
2205 if (o->op_targ && sv == PAD_SV(o->op_targ)) /* grab pad temp? */
2206 pad_swipe(o->op_targ, FALSE);
2207 else if (SvTEMP(sv)) { /* grab mortal temp? */
2208 SvREFCNT_inc_simple_void(sv);
2213 /* my_exit() was called; propagate it */
2218 /* Something tried to die. Abandon constant folding. */
2219 /* Pretend the error never happened. */
2220 sv_setpvn(ERRSV,"",0);
2221 o->op_next = old_next;
2225 /* Don't expect 1 (setjmp failed) */
2226 Perl_croak(aTHX_ "panic: fold_constants JMPENV_PUSH returned %d", ret);
2231 if (PL_scopestack_ix > oldscope)
2232 delete_eval_scope();
2241 if (type == OP_RV2GV)
2242 newop = newGVOP(OP_GV, 0, (GV*)sv);
2244 newop = newSVOP(OP_CONST, 0, sv);
2245 op_getmad(o,newop,'f');
2253 Perl_gen_constant_list(pTHX_ register OP *o)
2257 const I32 oldtmps_floor = PL_tmps_floor;
2261 return o; /* Don't attempt to run with errors */
2263 PL_op = curop = LINKLIST(o);
2270 PL_tmps_floor = oldtmps_floor;
2272 o->op_type = OP_RV2AV;
2273 o->op_ppaddr = PL_ppaddr[OP_RV2AV];
2274 o->op_flags &= ~OPf_REF; /* treat \(1..2) like an ordinary list */
2275 o->op_flags |= OPf_PARENS; /* and flatten \(1..2,3) */
2276 o->op_opt = 0; /* needs to be revisited in peep() */
2277 curop = ((UNOP*)o)->op_first;
2278 ((UNOP*)o)->op_first = newSVOP(OP_CONST, 0, SvREFCNT_inc_NN(*PL_stack_sp--));
2280 op_getmad(curop,o,'O');
2289 Perl_convert(pTHX_ I32 type, I32 flags, OP *o)
2292 if (!o || o->op_type != OP_LIST)
2293 o = newLISTOP(OP_LIST, 0, o, NULL);
2295 o->op_flags &= ~OPf_WANT;
2297 if (!(PL_opargs[type] & OA_MARK))
2298 op_null(cLISTOPo->op_first);
2300 o->op_type = (OPCODE)type;
2301 o->op_ppaddr = PL_ppaddr[type];
2302 o->op_flags |= flags;
2304 o = CHECKOP(type, o);
2305 if (o->op_type != (unsigned)type)
2308 return fold_constants(o);
2311 /* List constructors */
2314 Perl_append_elem(pTHX_ I32 type, OP *first, OP *last)
2322 if (first->op_type != (unsigned)type
2323 || (type == OP_LIST && (first->op_flags & OPf_PARENS)))
2325 return newLISTOP(type, 0, first, last);
2328 if (first->op_flags & OPf_KIDS)
2329 ((LISTOP*)first)->op_last->op_sibling = last;
2331 first->op_flags |= OPf_KIDS;
2332 ((LISTOP*)first)->op_first = last;
2334 ((LISTOP*)first)->op_last = last;
2339 Perl_append_list(pTHX_ I32 type, LISTOP *first, LISTOP *last)
2347 if (first->op_type != (unsigned)type)
2348 return prepend_elem(type, (OP*)first, (OP*)last);
2350 if (last->op_type != (unsigned)type)
2351 return append_elem(type, (OP*)first, (OP*)last);
2353 first->op_last->op_sibling = last->op_first;
2354 first->op_last = last->op_last;
2355 first->op_flags |= (last->op_flags & OPf_KIDS);
2358 if (last->op_first && first->op_madprop) {
2359 MADPROP *mp = last->op_first->op_madprop;
2361 while (mp->mad_next)
2363 mp->mad_next = first->op_madprop;
2366 last->op_first->op_madprop = first->op_madprop;
2369 first->op_madprop = last->op_madprop;
2370 last->op_madprop = 0;
2379 Perl_prepend_elem(pTHX_ I32 type, OP *first, OP *last)
2387 if (last->op_type == (unsigned)type) {
2388 if (type == OP_LIST) { /* already a PUSHMARK there */
2389 first->op_sibling = ((LISTOP*)last)->op_first->op_sibling;
2390 ((LISTOP*)last)->op_first->op_sibling = first;
2391 if (!(first->op_flags & OPf_PARENS))
2392 last->op_flags &= ~OPf_PARENS;
2395 if (!(last->op_flags & OPf_KIDS)) {
2396 ((LISTOP*)last)->op_last = first;
2397 last->op_flags |= OPf_KIDS;
2399 first->op_sibling = ((LISTOP*)last)->op_first;
2400 ((LISTOP*)last)->op_first = first;
2402 last->op_flags |= OPf_KIDS;
2406 return newLISTOP(type, 0, first, last);
2414 Perl_newTOKEN(pTHX_ I32 optype, YYSTYPE lval, MADPROP* madprop)
2417 Newxz(tk, 1, TOKEN);
2418 tk->tk_type = (OPCODE)optype;
2419 tk->tk_type = 12345;
2421 tk->tk_mad = madprop;
2426 Perl_token_free(pTHX_ TOKEN* tk)
2428 if (tk->tk_type != 12345)
2430 mad_free(tk->tk_mad);
2435 Perl_token_getmad(pTHX_ TOKEN* tk, OP* o, char slot)
2439 if (tk->tk_type != 12345) {
2440 Perl_warner(aTHX_ packWARN(WARN_MISC),
2441 "Invalid TOKEN object ignored");
2448 /* faked up qw list? */
2450 tm->mad_type == MAD_SV &&
2451 SvPVX((SV*)tm->mad_val)[0] == 'q')
2458 /* pretend constant fold didn't happen? */
2459 if (mp->mad_key == 'f' &&
2460 (o->op_type == OP_CONST ||
2461 o->op_type == OP_GV) )
2463 token_getmad(tk,(OP*)mp->mad_val,slot);
2477 if (mp->mad_key == 'X')
2478 mp->mad_key = slot; /* just change the first one */
2488 Perl_op_getmad_weak(pTHX_ OP* from, OP* o, char slot)
2497 /* pretend constant fold didn't happen? */
2498 if (mp->mad_key == 'f' &&
2499 (o->op_type == OP_CONST ||
2500 o->op_type == OP_GV) )
2502 op_getmad(from,(OP*)mp->mad_val,slot);
2509 mp->mad_next = newMADPROP(slot,MAD_OP,from,0);
2512 o->op_madprop = newMADPROP(slot,MAD_OP,from,0);
2518 Perl_op_getmad(pTHX_ OP* from, OP* o, char slot)
2527 /* pretend constant fold didn't happen? */
2528 if (mp->mad_key == 'f' &&
2529 (o->op_type == OP_CONST ||
2530 o->op_type == OP_GV) )
2532 op_getmad(from,(OP*)mp->mad_val,slot);
2539 mp->mad_next = newMADPROP(slot,MAD_OP,from,1);
2542 o->op_madprop = newMADPROP(slot,MAD_OP,from,1);
2546 PerlIO_printf(PerlIO_stderr(),
2547 "DESTROYING op = %0"UVxf"\n", PTR2UV(from));
2553 Perl_prepend_madprops(pTHX_ MADPROP* mp, OP* o, char slot)
2571 Perl_append_madprops(pTHX_ MADPROP* tm, OP* o, char slot)
2575 addmad(tm, &(o->op_madprop), slot);
2579 Perl_addmad(pTHX_ MADPROP* tm, MADPROP** root, char slot)
2600 Perl_newMADsv(pTHX_ char key, SV* sv)
2602 return newMADPROP(key, MAD_SV, sv, 0);
2606 Perl_newMADPROP(pTHX_ char key, char type, void* val, I32 vlen)
2609 Newxz(mp, 1, MADPROP);
2612 mp->mad_vlen = vlen;
2613 mp->mad_type = type;
2615 /* PerlIO_printf(PerlIO_stderr(), "NEW mp = %0x\n", mp); */
2620 Perl_mad_free(pTHX_ MADPROP* mp)
2622 /* PerlIO_printf(PerlIO_stderr(), "FREE mp = %0x\n", mp); */
2626 mad_free(mp->mad_next);
2627 /* if (PL_lex_state != LEX_NOTPARSING && mp->mad_vlen)
2628 PerlIO_printf(PerlIO_stderr(), "DESTROYING '%c'=<%s>\n", mp->mad_key & 255, mp->mad_val); */
2629 switch (mp->mad_type) {
2633 Safefree((char*)mp->mad_val);
2636 if (mp->mad_vlen) /* vlen holds "strong/weak" boolean */
2637 op_free((OP*)mp->mad_val);
2640 sv_free((SV*)mp->mad_val);
2643 PerlIO_printf(PerlIO_stderr(), "Unrecognized mad\n");
2652 Perl_newNULLLIST(pTHX)
2654 return newOP(OP_STUB, 0);
2658 Perl_force_list(pTHX_ OP *o)
2660 if (!o || o->op_type != OP_LIST)
2661 o = newLISTOP(OP_LIST, 0, o, NULL);
2667 Perl_newLISTOP(pTHX_ I32 type, I32 flags, OP *first, OP *last)
2672 NewOp(1101, listop, 1, LISTOP);
2674 listop->op_type = (OPCODE)type;
2675 listop->op_ppaddr = PL_ppaddr[type];
2678 listop->op_flags = (U8)flags;
2682 else if (!first && last)
2685 first->op_sibling = last;
2686 listop->op_first = first;
2687 listop->op_last = last;
2688 if (type == OP_LIST) {
2689 OP* const pushop = newOP(OP_PUSHMARK, 0);
2690 pushop->op_sibling = first;
2691 listop->op_first = pushop;
2692 listop->op_flags |= OPf_KIDS;
2694 listop->op_last = pushop;
2697 return CHECKOP(type, listop);
2701 Perl_newOP(pTHX_ I32 type, I32 flags)
2705 NewOp(1101, o, 1, OP);
2706 o->op_type = (OPCODE)type;
2707 o->op_ppaddr = PL_ppaddr[type];
2708 o->op_flags = (U8)flags;
2711 o->op_private = (U8)(0 | (flags >> 8));
2712 if (PL_opargs[type] & OA_RETSCALAR)
2714 if (PL_opargs[type] & OA_TARGET)
2715 o->op_targ = pad_alloc(type, SVs_PADTMP);
2716 return CHECKOP(type, o);
2720 Perl_newUNOP(pTHX_ I32 type, I32 flags, OP *first)
2726 first = newOP(OP_STUB, 0);
2727 if (PL_opargs[type] & OA_MARK)
2728 first = force_list(first);
2730 NewOp(1101, unop, 1, UNOP);
2731 unop->op_type = (OPCODE)type;
2732 unop->op_ppaddr = PL_ppaddr[type];
2733 unop->op_first = first;
2734 unop->op_flags = (U8)(flags | OPf_KIDS);
2735 unop->op_private = (U8)(1 | (flags >> 8));
2736 unop = (UNOP*) CHECKOP(type, unop);
2740 return fold_constants((OP *) unop);
2744 Perl_newBINOP(pTHX_ I32 type, I32 flags, OP *first, OP *last)
2748 NewOp(1101, binop, 1, BINOP);
2751 first = newOP(OP_NULL, 0);
2753 binop->op_type = (OPCODE)type;
2754 binop->op_ppaddr = PL_ppaddr[type];
2755 binop->op_first = first;
2756 binop->op_flags = (U8)(flags | OPf_KIDS);
2759 binop->op_private = (U8)(1 | (flags >> 8));
2762 binop->op_private = (U8)(2 | (flags >> 8));
2763 first->op_sibling = last;
2766 binop = (BINOP*)CHECKOP(type, binop);
2767 if (binop->op_next || binop->op_type != (OPCODE)type)
2770 binop->op_last = binop->op_first->op_sibling;
2772 return fold_constants((OP *)binop);
2775 static int uvcompare(const void *a, const void *b)
2776 __attribute__nonnull__(1)
2777 __attribute__nonnull__(2)
2778 __attribute__pure__;
2779 static int uvcompare(const void *a, const void *b)
2781 if (*((const UV *)a) < (*(const UV *)b))
2783 if (*((const UV *)a) > (*(const UV *)b))
2785 if (*((const UV *)a+1) < (*(const UV *)b+1))
2787 if (*((const UV *)a+1) > (*(const UV *)b+1))
2793 Perl_pmtrans(pTHX_ OP *o, OP *expr, OP *repl)
2796 SV * const tstr = ((SVOP*)expr)->op_sv;
2797 SV * const rstr = ((SVOP*)repl)->op_sv;
2800 const U8 *t = (U8*)SvPV_const(tstr, tlen);
2801 const U8 *r = (U8*)SvPV_const(rstr, rlen);
2805 register short *tbl;
2807 const I32 complement = o->op_private & OPpTRANS_COMPLEMENT;
2808 const I32 squash = o->op_private & OPpTRANS_SQUASH;
2809 I32 del = o->op_private & OPpTRANS_DELETE;
2810 PL_hints |= HINT_BLOCK_SCOPE;
2813 o->op_private |= OPpTRANS_FROM_UTF;
2816 o->op_private |= OPpTRANS_TO_UTF;
2818 if (o->op_private & (OPpTRANS_FROM_UTF|OPpTRANS_TO_UTF)) {
2819 SV* const listsv = newSVpvs("# comment\n");
2821 const U8* tend = t + tlen;
2822 const U8* rend = r + rlen;
2836 const I32 from_utf = o->op_private & OPpTRANS_FROM_UTF;
2837 const I32 to_utf = o->op_private & OPpTRANS_TO_UTF;
2840 const U32 flags = UTF8_ALLOW_DEFAULT;
2844 t = tsave = bytes_to_utf8(t, &len);
2847 if (!to_utf && rlen) {
2849 r = rsave = bytes_to_utf8(r, &len);
2853 /* There are several snags with this code on EBCDIC:
2854 1. 0xFF is a legal UTF-EBCDIC byte (there are no illegal bytes).
2855 2. scan_const() in toke.c has encoded chars in native encoding which makes
2856 ranges at least in EBCDIC 0..255 range the bottom odd.
2860 U8 tmpbuf[UTF8_MAXBYTES+1];
2863 Newx(cp, 2*tlen, UV);
2865 transv = newSVpvs("");
2867 cp[2*i] = utf8n_to_uvuni(t, tend-t, &ulen, flags);
2869 if (t < tend && NATIVE_TO_UTF(*t) == 0xff) {
2871 cp[2*i+1] = utf8n_to_uvuni(t, tend-t, &ulen, flags);
2875 cp[2*i+1] = cp[2*i];
2879 qsort(cp, i, 2*sizeof(UV), uvcompare);
2880 for (j = 0; j < i; j++) {
2882 diff = val - nextmin;
2884 t = uvuni_to_utf8(tmpbuf,nextmin);
2885 sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf);
2887 U8 range_mark = UTF_TO_NATIVE(0xff);
2888 t = uvuni_to_utf8(tmpbuf, val - 1);
2889 sv_catpvn(transv, (char *)&range_mark, 1);
2890 sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf);
2897 t = uvuni_to_utf8(tmpbuf,nextmin);
2898 sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf);
2900 U8 range_mark = UTF_TO_NATIVE(0xff);
2901 sv_catpvn(transv, (char *)&range_mark, 1);
2903 t = uvuni_to_utf8_flags(tmpbuf, 0x7fffffff,
2904 UNICODE_ALLOW_SUPER);
2905 sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf);
2906 t = (const U8*)SvPVX_const(transv);
2907 tlen = SvCUR(transv);
2911 else if (!rlen && !del) {
2912 r = t; rlen = tlen; rend = tend;
2915 if ((!rlen && !del) || t == r ||
2916 (tlen == rlen && memEQ((char *)t, (char *)r, tlen)))
2918 o->op_private |= OPpTRANS_IDENTICAL;
2922 while (t < tend || tfirst <= tlast) {
2923 /* see if we need more "t" chars */
2924 if (tfirst > tlast) {
2925 tfirst = (I32)utf8n_to_uvuni(t, tend - t, &ulen, flags);
2927 if (t < tend && NATIVE_TO_UTF(*t) == 0xff) { /* illegal utf8 val indicates range */
2929 tlast = (I32)utf8n_to_uvuni(t, tend - t, &ulen, flags);
2936 /* now see if we need more "r" chars */
2937 if (rfirst > rlast) {
2939 rfirst = (I32)utf8n_to_uvuni(r, rend - r, &ulen, flags);
2941 if (r < rend && NATIVE_TO_UTF(*r) == 0xff) { /* illegal utf8 val indicates range */
2943 rlast = (I32)utf8n_to_uvuni(r, rend - r, &ulen, flags);
2952 rfirst = rlast = 0xffffffff;
2956 /* now see which range will peter our first, if either. */
2957 tdiff = tlast - tfirst;
2958 rdiff = rlast - rfirst;
2965 if (rfirst == 0xffffffff) {
2966 diff = tdiff; /* oops, pretend rdiff is infinite */
2968 Perl_sv_catpvf(aTHX_ listsv, "%04lx\t%04lx\tXXXX\n",
2969 (long)tfirst, (long)tlast);
2971 Perl_sv_catpvf(aTHX_ listsv, "%04lx\t\tXXXX\n", (long)tfirst);
2975 Perl_sv_catpvf(aTHX_ listsv, "%04lx\t%04lx\t%04lx\n",
2976 (long)tfirst, (long)(tfirst + diff),
2979 Perl_sv_catpvf(aTHX_ listsv, "%04lx\t\t%04lx\n",
2980 (long)tfirst, (long)rfirst);
2982 if (rfirst + diff > max)
2983 max = rfirst + diff;
2985 grows = (tfirst < rfirst &&
2986 UNISKIP(tfirst) < UNISKIP(rfirst + diff));
2998 else if (max > 0xff)
3003 Safefree(cPVOPo->op_pv);
3004 cSVOPo->op_sv = (SV*)swash_init("utf8", "", listsv, bits, none);
3005 SvREFCNT_dec(listsv);
3006 SvREFCNT_dec(transv);
3008 if (!del && havefinal && rlen)
3009 (void)hv_store((HV*)SvRV((cSVOPo->op_sv)), "FINAL", 5,
3010 newSVuv((UV)final), 0);
3013 o->op_private |= OPpTRANS_GROWS;
3019 op_getmad(expr,o,'e');
3020 op_getmad(repl,o,'r');
3028 tbl = (short*)cPVOPo->op_pv;
3030 Zero(tbl, 256, short);
3031 for (i = 0; i < (I32)tlen; i++)
3033 for (i = 0, j = 0; i < 256; i++) {
3035 if (j >= (I32)rlen) {
3044 if (i < 128 && r[j] >= 128)
3054 o->op_private |= OPpTRANS_IDENTICAL;
3056 else if (j >= (I32)rlen)
3059 cPVOPo->op_pv = (char*)Renew(tbl, 0x101+rlen-j, short);
3060 tbl[0x100] = (short)(rlen - j);
3061 for (i=0; i < (I32)rlen - j; i++)
3062 tbl[0x101+i] = r[j+i];
3066 if (!rlen && !del) {
3069 o->op_private |= OPpTRANS_IDENTICAL;
3071 else if (!squash && rlen == tlen && memEQ((char*)t, (char*)r, tlen)) {
3072 o->op_private |= OPpTRANS_IDENTICAL;
3074 for (i = 0; i < 256; i++)
3076 for (i = 0, j = 0; i < (I32)tlen; i++,j++) {
3077 if (j >= (I32)rlen) {
3079 if (tbl[t[i]] == -1)
3085 if (tbl[t[i]] == -1) {
3086 if (t[i] < 128 && r[j] >= 128)
3093 o->op_private |= OPpTRANS_GROWS;
3095 op_getmad(expr,o,'e');
3096 op_getmad(repl,o,'r');
3106 Perl_newPMOP(pTHX_ I32 type, I32 flags)
3111 NewOp(1101, pmop, 1, PMOP);
3112 pmop->op_type = (OPCODE)type;
3113 pmop->op_ppaddr = PL_ppaddr[type];
3114 pmop->op_flags = (U8)flags;
3115 pmop->op_private = (U8)(0 | (flags >> 8));
3117 if (PL_hints & HINT_RE_TAINT)
3118 pmop->op_pmpermflags |= PMf_RETAINT;
3119 if (PL_hints & HINT_LOCALE)
3120 pmop->op_pmpermflags |= PMf_LOCALE;
3121 pmop->op_pmflags = pmop->op_pmpermflags;
3124 if (av_len((AV*) PL_regex_pad[0]) > -1) {
3125 SV * const repointer = av_pop((AV*)PL_regex_pad[0]);
3126 pmop->op_pmoffset = SvIV(repointer);
3127 SvREPADTMP_off(repointer);
3128 sv_setiv(repointer,0);
3130 SV * const repointer = newSViv(0);
3131 av_push(PL_regex_padav, SvREFCNT_inc_simple_NN(repointer));
3132 pmop->op_pmoffset = av_len(PL_regex_padav);
3133 PL_regex_pad = AvARRAY(PL_regex_padav);
3137 /* link into pm list */
3138 if (type != OP_TRANS && PL_curstash) {
3139 MAGIC *mg = mg_find((SV*)PL_curstash, PERL_MAGIC_symtab);
3142 mg = sv_magicext((SV*)PL_curstash, 0, PERL_MAGIC_symtab, 0, 0, 0);
3144 pmop->op_pmnext = (PMOP*)mg->mg_obj;
3145 mg->mg_obj = (SV*)pmop;
3146 PmopSTASH_set(pmop,PL_curstash);
3149 return CHECKOP(type, pmop);
3152 /* Given some sort of match op o, and an expression expr containing a
3153 * pattern, either compile expr into a regex and attach it to o (if it's
3154 * constant), or convert expr into a runtime regcomp op sequence (if it's
3157 * isreg indicates that the pattern is part of a regex construct, eg
3158 * $x =~ /pattern/ or split /pattern/, as opposed to $x =~ $pattern or
3159 * split "pattern", which aren't. In the former case, expr will be a list
3160 * if the pattern contains more than one term (eg /a$b/) or if it contains
3161 * a replacement, ie s/// or tr///.
3165 Perl_pmruntime(pTHX_ OP *o, OP *expr, bool isreg)
3170 I32 repl_has_vars = 0;
3174 if (o->op_type == OP_SUBST || o->op_type == OP_TRANS) {
3175 /* last element in list is the replacement; pop it */
3177 repl = cLISTOPx(expr)->op_last;
3178 kid = cLISTOPx(expr)->op_first;
3179 while (kid->op_sibling != repl)
3180 kid = kid->op_sibling;
3181 kid->op_sibling = NULL;
3182 cLISTOPx(expr)->op_last = kid;
3185 if (isreg && expr->op_type == OP_LIST &&
3186 cLISTOPx(expr)->op_first->op_sibling == cLISTOPx(expr)->op_last)
3188 /* convert single element list to element */
3189 OP* const oe = expr;
3190 expr = cLISTOPx(oe)->op_first->op_sibling;
3191 cLISTOPx(oe)->op_first->op_sibling = NULL;
3192 cLISTOPx(oe)->op_last = NULL;
3196 if (o->op_type == OP_TRANS) {
3197 return pmtrans(o, expr, repl);
3200 reglist = isreg && expr->op_type == OP_LIST;
3204 PL_hints |= HINT_BLOCK_SCOPE;
3207 if (expr->op_type == OP_CONST) {
3209 SV * const pat = ((SVOP*)expr)->op_sv;
3210 const char *p = SvPV_const(pat, plen);
3211 if ((o->op_flags & OPf_SPECIAL) && (*p == ' ' && p[1] == '\0')) {
3212 U32 was_readonly = SvREADONLY(pat);
3216 sv_force_normal_flags(pat, 0);
3217 assert(!SvREADONLY(pat));
3220 SvREADONLY_off(pat);
3224 sv_setpvn(pat, "\\s+", 3);
3226 SvFLAGS(pat) |= was_readonly;
3228 p = SvPV_const(pat, plen);
3229 pm->op_pmflags |= PMf_SKIPWHITE;
3232 pm->op_pmdynflags |= PMdf_UTF8;
3233 /* FIXME - can we make this function take const char * args? */
3234 PM_SETRE(pm, CALLREGCOMP(aTHX_ (char*)p, (char*)p + plen, pm));
3235 if (strEQ("\\s+", PM_GETRE(pm)->precomp))
3236 pm->op_pmflags |= PMf_WHITE;
3238 op_getmad(expr,(OP*)pm,'e');
3244 if (pm->op_pmflags & PMf_KEEP || !(PL_hints & HINT_RE_EVAL))
3245 expr = newUNOP((!(PL_hints & HINT_RE_EVAL)
3247 : OP_REGCMAYBE),0,expr);
3249 NewOp(1101, rcop, 1, LOGOP);
3250 rcop->op_type = OP_REGCOMP;
3251 rcop->op_ppaddr = PL_ppaddr[OP_REGCOMP];
3252 rcop->op_first = scalar(expr);
3253 rcop->op_flags |= OPf_KIDS
3254 | ((PL_hints & HINT_RE_EVAL) ? OPf_SPECIAL : 0)
3255 | (reglist ? OPf_STACKED : 0);
3256 rcop->op_private = 1;
3259 rcop->op_targ = pad_alloc(rcop->op_type, SVs_PADTMP);
3261 /* /$x/ may cause an eval, since $x might be qr/(?{..})/ */
3264 /* establish postfix order */
3265 if (pm->op_pmflags & PMf_KEEP || !(PL_hints & HINT_RE_EVAL)) {
3267 rcop->op_next = expr;
3268 ((UNOP*)expr)->op_first->op_next = (OP*)rcop;
3271 rcop->op_next = LINKLIST(expr);
3272 expr->op_next = (OP*)rcop;
3275 prepend_elem(o->op_type, scalar((OP*)rcop), o);
3280 if (pm->op_pmflags & PMf_EVAL) {
3282 if (CopLINE(PL_curcop) < (line_t)PL_multi_end)
3283 CopLINE_set(PL_curcop, (line_t)PL_multi_end);
3285 else if (repl->op_type == OP_CONST)
3289 for (curop = LINKLIST(repl); curop!=repl; curop = LINKLIST(curop)) {
3290 if (PL_opargs[curop->op_type] & OA_DANGEROUS) {
3291 if (curop->op_type == OP_GV) {
3292 GV * const gv = cGVOPx_gv(curop);
3294 if (strchr("&`'123456789+-\016\022", *GvENAME(gv)))
3297 else if (curop->op_type == OP_RV2CV)
3299 else if (curop->op_type == OP_RV2SV ||
3300 curop->op_type == OP_RV2AV ||
3301 curop->op_type == OP_RV2HV ||
3302 curop->op_type == OP_RV2GV) {
3303 if (lastop && lastop->op_type != OP_GV) /*funny deref?*/
3306 else if (curop->op_type == OP_PADSV ||
3307 curop->op_type == OP_PADAV ||
3308 curop->op_type == OP_PADHV ||
3309 curop->op_type == OP_PADANY) {
3312 else if (curop->op_type == OP_PUSHRE)
3313 NOOP; /* Okay here, dangerous in newASSIGNOP */
3323 || PM_GETRE(pm)->reganch & ROPT_EVAL_SEEN))) {
3324 pm->op_pmflags |= PMf_CONST; /* const for long enough */
3325 pm->op_pmpermflags |= PMf_CONST; /* const for long enough */
3326 prepend_elem(o->op_type, scalar(repl), o);
3329 if (curop == repl && !PM_GETRE(pm)) { /* Has variables. */
3330 pm->op_pmflags |= PMf_MAYBE_CONST;
3331 pm->op_pmpermflags |= PMf_MAYBE_CONST;
3333 NewOp(1101, rcop, 1, LOGOP);
3334 rcop->op_type = OP_SUBSTCONT;
3335 rcop->op_ppaddr = PL_ppaddr[OP_SUBSTCONT];
3336 rcop->op_first = scalar(repl);
3337 rcop->op_flags |= OPf_KIDS;
3338 rcop->op_private = 1;
3341 /* establish postfix order */
3342 rcop->op_next = LINKLIST(repl);
3343 repl->op_next = (OP*)rcop;
3345 pm->op_pmreplroot = scalar((OP*)rcop);
3346 pm->op_pmreplstart = LINKLIST(rcop);
3355 Perl_newSVOP(pTHX_ I32 type, I32 flags, SV *sv)
3359 NewOp(1101, svop, 1, SVOP);
3360 svop->op_type = (OPCODE)type;
3361 svop->op_ppaddr = PL_ppaddr[type];
3363 svop->op_next = (OP*)svop;
3364 svop->op_flags = (U8)flags;
3365 if (PL_opargs[type] & OA_RETSCALAR)
3367 if (PL_opargs[type] & OA_TARGET)
3368 svop->op_targ = pad_alloc(type, SVs_PADTMP);
3369 return CHECKOP(type, svop);
3373 Perl_newPADOP(pTHX_ I32 type, I32 flags, SV *sv)
3377 NewOp(1101, padop, 1, PADOP);
3378 padop->op_type = (OPCODE)type;
3379 padop->op_ppaddr = PL_ppaddr[type];
3380 padop->op_padix = pad_alloc(type, SVs_PADTMP);
3381 SvREFCNT_dec(PAD_SVl(padop->op_padix));
3382 PAD_SETSV(padop->op_padix, sv);
3385 padop->op_next = (OP*)padop;
3386 padop->op_flags = (U8)flags;
3387 if (PL_opargs[type] & OA_RETSCALAR)
3389 if (PL_opargs[type] & OA_TARGET)
3390 padop->op_targ = pad_alloc(type, SVs_PADTMP);
3391 return CHECKOP(type, padop);
3395 Perl_newGVOP(pTHX_ I32 type, I32 flags, GV *gv)
3401 return newPADOP(type, flags, SvREFCNT_inc_simple(gv));
3403 return newSVOP(type, flags, SvREFCNT_inc_simple(gv));
3408 Perl_newPVOP(pTHX_ I32 type, I32 flags, char *pv)
3412 NewOp(1101, pvop, 1, PVOP);
3413 pvop->op_type = (OPCODE)type;
3414 pvop->op_ppaddr = PL_ppaddr[type];
3416 pvop->op_next = (OP*)pvop;
3417 pvop->op_flags = (U8)flags;
3418 if (PL_opargs[type] & OA_RETSCALAR)
3420 if (PL_opargs[type] & OA_TARGET)
3421 pvop->op_targ = pad_alloc(type, SVs_PADTMP);
3422 return CHECKOP(type, pvop);
3430 Perl_package(pTHX_ OP *o)
3439 save_hptr(&PL_curstash);
3440 save_item(PL_curstname);
3442 name = SvPV_const(cSVOPo->op_sv, len);
3443 PL_curstash = gv_stashpvn(name, len, TRUE);
3444 sv_setpvn(PL_curstname, name, len);
3446 PL_hints |= HINT_BLOCK_SCOPE;
3447 PL_copline = NOLINE;
3453 if (!PL_madskills) {
3458 pegop = newOP(OP_NULL,0);
3459 op_getmad(o,pegop,'P');
3469 Perl_utilize(pTHX_ int aver, I32 floor, OP *version, OP *idop, OP *arg)
3476 OP *pegop = newOP(OP_NULL,0);
3479 if (idop->op_type != OP_CONST)
3480 Perl_croak(aTHX_ "Module name must be constant");
3483 op_getmad(idop,pegop,'U');
3488 SV * const vesv = ((SVOP*)version)->op_sv;
3491 op_getmad(version,pegop,'V');
3492 if (!arg && !SvNIOKp(vesv)) {
3499 if (version->op_type != OP_CONST || !SvNIOKp(vesv))
3500 Perl_croak(aTHX_ "Version number must be constant number");
3502 /* Make copy of idop so we don't free it twice */
3503 pack = newSVOP(OP_CONST, 0, newSVsv(((SVOP*)idop)->op_sv));
3505 /* Fake up a method call to VERSION */
3506 meth = newSVpvs_share("VERSION");
3507 veop = convert(OP_ENTERSUB, OPf_STACKED|OPf_SPECIAL,
3508 append_elem(OP_LIST,
3509 prepend_elem(OP_LIST, pack, list(version)),
3510 newSVOP(OP_METHOD_NAMED, 0, meth)));
3514 /* Fake up an import/unimport */
3515 if (arg && arg->op_type == OP_STUB) {
3517 op_getmad(arg,pegop,'S');
3518 imop = arg; /* no import on explicit () */
3520 else if (SvNIOKp(((SVOP*)idop)->op_sv)) {
3521 imop = NULL; /* use 5.0; */
3523 idop->op_private |= OPpCONST_NOVER;
3529 op_getmad(arg,pegop,'A');
3531 /* Make copy of idop so we don't free it twice */
3532 pack = newSVOP(OP_CONST, 0, newSVsv(((SVOP*)idop)->op_sv));
3534 /* Fake up a method call to import/unimport */
3536 ? newSVpvs_share("import") : newSVpvs_share("unimport");
3537 imop = convert(OP_ENTERSUB, OPf_STACKED|OPf_SPECIAL,
3538 append_elem(OP_LIST,
3539 prepend_elem(OP_LIST, pack, list(arg)),
3540 newSVOP(OP_METHOD_NAMED, 0, meth)));
3543 /* Fake up the BEGIN {}, which does its thing immediately. */
3545 newSVOP(OP_CONST, 0, newSVpvs_share("BEGIN")),
3548 append_elem(OP_LINESEQ,
3549 append_elem(OP_LINESEQ,
3550 newSTATEOP(0, NULL, newUNOP(OP_REQUIRE, 0, idop)),
3551 newSTATEOP(0, NULL, veop)),
3552 newSTATEOP(0, NULL, imop) ));
3554 /* The "did you use incorrect case?" warning used to be here.
3555 * The problem is that on case-insensitive filesystems one
3556 * might get false positives for "use" (and "require"):
3557 * "use Strict" or "require CARP" will work. This causes
3558 * portability problems for the script: in case-strict
3559 * filesystems the script will stop working.
3561 * The "incorrect case" warning checked whether "use Foo"
3562 * imported "Foo" to your namespace, but that is wrong, too:
3563 * there is no requirement nor promise in the language that
3564 * a Foo.pm should or would contain anything in package "Foo".
3566 * There is very little Configure-wise that can be done, either:
3567 * the case-sensitivity of the build filesystem of Perl does not
3568 * help in guessing the case-sensitivity of the runtime environment.
3571 PL_hints |= HINT_BLOCK_SCOPE;
3572 PL_copline = NOLINE;
3574 PL_cop_seqmax++; /* Purely for B::*'s benefit */
3577 if (!PL_madskills) {
3578 /* FIXME - don't allocate pegop if !PL_madskills */
3587 =head1 Embedding Functions
3589 =for apidoc load_module
3591 Loads the module whose name is pointed to by the string part of name.
3592 Note that the actual module name, not its filename, should be given.
3593 Eg, "Foo::Bar" instead of "Foo/Bar.pm". flags can be any of
3594 PERL_LOADMOD_DENY, PERL_LOADMOD_NOIMPORT, or PERL_LOADMOD_IMPORT_OPS
3595 (or 0 for no flags). ver, if specified, provides version semantics
3596 similar to C<use Foo::Bar VERSION>. The optional trailing SV*
3597 arguments can be used to specify arguments to the module's import()
3598 method, similar to C<use Foo::Bar VERSION LIST>.
3603 Perl_load_module(pTHX_ U32 flags, SV *name, SV *ver, ...)
3606 va_start(args, ver);
3607 vload_module(flags, name, ver, &args);
3611 #ifdef PERL_IMPLICIT_CONTEXT
3613 Perl_load_module_nocontext(U32 flags, SV *name, SV *ver, ...)
3617 va_start(args, ver);
3618 vload_module(flags, name, ver, &args);
3624 Perl_vload_module(pTHX_ U32 flags, SV *name, SV *ver, va_list *args)
3629 OP * const modname = newSVOP(OP_CONST, 0, name);
3630 modname->op_private |= OPpCONST_BARE;
3632 veop = newSVOP(OP_CONST, 0, ver);
3636 if (flags & PERL_LOADMOD_NOIMPORT) {
3637 imop = sawparens(newNULLLIST());
3639 else if (flags & PERL_LOADMOD_IMPORT_OPS) {
3640 imop = va_arg(*args, OP*);
3645 sv = va_arg(*args, SV*);
3647 imop = append_elem(OP_LIST, imop, newSVOP(OP_CONST, 0, sv));
3648 sv = va_arg(*args, SV*);
3652 const line_t ocopline = PL_copline;
3653 COP * const ocurcop = PL_curcop;
3654 const int oexpect = PL_expect;
3656 utilize(!(flags & PERL_LOADMOD_DENY), start_subparse(FALSE, 0),
3657 veop, modname, imop);
3658 PL_expect = oexpect;
3659 PL_copline = ocopline;
3660 PL_curcop = ocurcop;
3665 Perl_dofile(pTHX_ OP *term, I32 force_builtin)
3671 if (!force_builtin) {
3672 gv = gv_fetchpvs("do", GV_NOTQUAL, SVt_PVCV);
3673 if (!(gv && GvCVu(gv) && GvIMPORTED_CV(gv))) {
3674 GV * const * const gvp = (GV**)hv_fetchs(PL_globalstash, "do", FALSE);
3675 gv = gvp ? *gvp : NULL;
3679 if (gv && GvCVu(gv) && GvIMPORTED_CV(gv)) {
3680 doop = ck_subr(newUNOP(OP_ENTERSUB, OPf_STACKED,
3681 append_elem(OP_LIST, term,
3682 scalar(newUNOP(OP_RV2CV, 0,
3683 newGVOP(OP_GV, 0, gv))))));
3686 doop = newUNOP(OP_DOFILE, 0, scalar(term));
3692 Perl_newSLICEOP(pTHX_ I32 flags, OP *subscript, OP *listval)
3694 return newBINOP(OP_LSLICE, flags,
3695 list(force_list(subscript)),
3696 list(force_list(listval)) );
3700 S_is_list_assignment(pTHX_ register const OP *o)
3708 if ((o->op_type == OP_NULL) && (o->op_flags & OPf_KIDS))
3709 o = cUNOPo->op_first;
3711 flags = o->op_flags;
3713 if (type == OP_COND_EXPR) {
3714 const I32 t = is_list_assignment(cLOGOPo->op_first->op_sibling);
3715 const I32 f = is_list_assignment(cLOGOPo->op_first->op_sibling->op_sibling);
3720 yyerror("Assignment to both a list and a scalar");
3724 if (type == OP_LIST &&
3725 (flags & OPf_WANT) == OPf_WANT_SCALAR &&
3726 o->op_private & OPpLVAL_INTRO)
3729 if (type == OP_LIST || flags & OPf_PARENS ||
3730 type == OP_RV2AV || type == OP_RV2HV ||
3731 type == OP_ASLICE || type == OP_HSLICE)
3734 if (type == OP_PADAV || type == OP_PADHV)
3737 if (type == OP_RV2SV)
3744 Perl_newASSIGNOP(pTHX_ I32 flags, OP *left, I32 optype, OP *right)
3750 if (optype == OP_ANDASSIGN || optype == OP_ORASSIGN || optype == OP_DORASSIGN) {
3751 return newLOGOP(optype, 0,
3752 mod(scalar(left), optype),
3753 newUNOP(OP_SASSIGN, 0, scalar(right)));
3756 return newBINOP(optype, OPf_STACKED,
3757 mod(scalar(left), optype), scalar(right));
3761 if (is_list_assignment(left)) {
3765 /* Grandfathering $[ assignment here. Bletch.*/
3766 /* Only simple assignments like C<< ($[) = 1 >> are allowed */
3767 PL_eval_start = (left->op_type == OP_CONST) ? right : 0;
3768 left = mod(left, OP_AASSIGN);
3771 else if (left->op_type == OP_CONST) {
3773 /* Result of assignment is always 1 (or we'd be dead already) */
3774 return newSVOP(OP_CONST, 0, newSViv(1));
3776 curop = list(force_list(left));
3777 o = newBINOP(OP_AASSIGN, flags, list(force_list(right)), curop);
3778 o->op_private = (U8)(0 | (flags >> 8));
3780 /* PL_generation sorcery:
3781 * an assignment like ($a,$b) = ($c,$d) is easier than
3782 * ($a,$b) = ($c,$a), since there is no need for temporary vars.
3783 * To detect whether there are common vars, the global var
3784 * PL_generation is incremented for each assign op we compile.
3785 * Then, while compiling the assign op, we run through all the
3786 * variables on both sides of the assignment, setting a spare slot
3787 * in each of them to PL_generation. If any of them already have
3788 * that value, we know we've got commonality. We could use a
3789 * single bit marker, but then we'd have to make 2 passes, first
3790 * to clear the flag, then to test and set it. To find somewhere
3791 * to store these values, evil chicanery is done with SvCUR().
3794 if (!(left->op_private & OPpLVAL_INTRO)) {
3797 for (curop = LINKLIST(o); curop != o; curop = LINKLIST(curop)) {
3798 if (PL_opargs[curop->op_type] & OA_DANGEROUS) {
3799 if (curop->op_type == OP_GV) {
3800 GV *gv = cGVOPx_gv(curop);
3802 || (int)GvASSIGN_GENERATION(gv) == PL_generation)
3804 GvASSIGN_GENERATION_set(gv, PL_generation);
3806 else if (curop->op_type == OP_PADSV ||
3807 curop->op_type == OP_PADAV ||
3808 curop->op_type == OP_PADHV ||
3809 curop->op_type == OP_PADANY)
3811 if (PAD_COMPNAME_GEN(curop->op_targ)
3812 == (STRLEN)PL_generation)
3814 PAD_COMPNAME_GEN_set(curop->op_targ, PL_generation);
3817 else if (curop->op_type == OP_RV2CV)
3819 else if (curop->op_type == OP_RV2SV ||
3820 curop->op_type == OP_RV2AV ||
3821 curop->op_type == OP_RV2HV ||
3822 curop->op_type == OP_RV2GV) {
3823 if (lastop->op_type != OP_GV) /* funny deref? */
3826 else if (curop->op_type == OP_PUSHRE) {
3827 if (((PMOP*)curop)->op_pmreplroot) {
3829 GV *gv = (GV*)PAD_SVl(INT2PTR(PADOFFSET,
3830 ((PMOP*)curop)->op_pmreplroot));
3832 GV *gv = (GV*)((PMOP*)curop)->op_pmreplroot;
3835 || (int)GvASSIGN_GENERATION(gv) == PL_generation)
3837 GvASSIGN_GENERATION_set(gv, PL_generation);
3838 GvASSIGN_GENERATION_set(gv, PL_generation);
3847 o->op_private |= OPpASSIGN_COMMON;
3849 if (right && right->op_type == OP_SPLIT) {
3850 OP* tmpop = ((LISTOP*)right)->op_first;
3851 if (tmpop && (tmpop->op_type == OP_PUSHRE)) {
3852 PMOP * const pm = (PMOP*)tmpop;
3853 if (left->op_type == OP_RV2AV &&
3854 !(left->op_private & OPpLVAL_INTRO) &&
3855 !(o->op_private & OPpASSIGN_COMMON) )
3857 tmpop = ((UNOP*)left)->op_first;
3858 if (tmpop->op_type == OP_GV && !pm->op_pmreplroot) {
3860 pm->op_pmreplroot = INT2PTR(OP*, cPADOPx(tmpop)->op_padix);
3861 cPADOPx(tmpop)->op_padix = 0; /* steal it */
3863 pm->op_pmreplroot = (OP*)cSVOPx(tmpop)->op_sv;
3864 cSVOPx(tmpop)->op_sv = NULL; /* steal it */
3866 pm->op_pmflags |= PMf_ONCE;
3867 tmpop = cUNOPo->op_first; /* to list (nulled) */
3868 tmpop = ((UNOP*)tmpop)->op_first; /* to pushmark */
3869 tmpop->op_sibling = NULL; /* don't free split */
3870 right->op_next = tmpop->op_next; /* fix starting loc */
3872 op_getmad(o,right,'R'); /* blow off assign */
3874 op_free(o); /* blow off assign */
3876 right->op_flags &= ~OPf_WANT;
3877 /* "I don't know and I don't care." */
3882 if (PL_modcount < RETURN_UNLIMITED_NUMBER &&
3883 ((LISTOP*)right)->op_last->op_type == OP_CONST)
3885 SV *sv = ((SVOP*)((LISTOP*)right)->op_last)->op_sv;
3887 sv_setiv(sv, PL_modcount+1);
3895 right = newOP(OP_UNDEF, 0);
3896 if (right->op_type == OP_READLINE) {
3897 right->op_flags |= OPf_STACKED;
3898 return newBINOP(OP_NULL, flags, mod(scalar(left), OP_SASSIGN), scalar(right));
3901 PL_eval_start = right; /* Grandfathering $[ assignment here. Bletch.*/
3902 o = newBINOP(OP_SASSIGN, flags,
3903 scalar(right), mod(scalar(left), OP_SASSIGN) );
3909 o = newSVOP(OP_CONST, 0, newSViv(CopARYBASE_get(&PL_compiling)));
3910 o->op_private |= OPpCONST_ARYBASE;
3917 Perl_newSTATEOP(pTHX_ I32 flags, char *label, OP *o)
3920 const U32 seq = intro_my();
3923 NewOp(1101, cop, 1, COP);
3924 if (PERLDB_LINE && CopLINE(PL_curcop) && PL_curstash != PL_debstash) {
3925 cop->op_type = OP_DBSTATE;
3926 cop->op_ppaddr = PL_ppaddr[ OP_DBSTATE ];
3929 cop->op_type = OP_NEXTSTATE;
3930 cop->op_ppaddr = PL_ppaddr[ OP_NEXTSTATE ];
3932 cop->op_flags = (U8)flags;
3933 CopHINTS_set(cop, PL_hints);
3935 cop->op_private |= NATIVE_HINTS;
3937 CopHINTS_set(&PL_compiling, CopHINTS_get(cop));
3938 cop->op_next = (OP*)cop;
3941 cop->cop_label = label;
3942 PL_hints |= HINT_BLOCK_SCOPE;
3945 CopARYBASE_set(cop, CopARYBASE_get(PL_curcop));
3946 cop->cop_warnings = DUP_WARNINGS(PL_curcop->cop_warnings);
3947 if (specialCopIO(PL_curcop->cop_io))
3948 cop->cop_io = PL_curcop->cop_io;
3950 cop->cop_io = newSVsv(PL_curcop->cop_io) ;
3951 cop->cop_hints = PL_curcop->cop_hints;
3952 if (cop->cop_hints) {
3954 cop->cop_hints->refcounted_he_refcnt++;
3955 HINTS_REFCNT_UNLOCK;
3958 if (PL_copline == NOLINE)
3959 CopLINE_set(cop, CopLINE(PL_curcop));
3961 CopLINE_set(cop, PL_copline);
3962 PL_copline = NOLINE;
3965 CopFILE_set(cop, CopFILE(PL_curcop)); /* XXX share in a pvtable? */
3967 CopFILEGV_set(cop, CopFILEGV(PL_curcop));
3969 CopSTASH_set(cop, PL_curstash);
3971 if (PERLDB_LINE && PL_curstash != PL_debstash) {
3972 SV * const * const svp = av_fetch(CopFILEAVx(PL_curcop), (I32)CopLINE(cop), FALSE);
3973 if (svp && *svp != &PL_sv_undef ) {
3974 (void)SvIOK_on(*svp);
3975 SvIV_set(*svp, PTR2IV(cop));
3979 return prepend_elem(OP_LINESEQ, (OP*)cop, o);
3984 Perl_newLOGOP(pTHX_ I32 type, I32 flags, OP *first, OP *other)
3987 return new_logop(type, flags, &first, &other);
3991 S_new_logop(pTHX_ I32 type, I32 flags, OP** firstp, OP** otherp)
3996 OP *first = *firstp;
3997 OP * const other = *otherp;
3999 if (type == OP_XOR) /* Not short circuit, but here by precedence. */
4000 return newBINOP(type, flags, scalar(first), scalar(other));
4002 scalarboolean(first);
4003 /* optimize "!a && b" to "a || b", and "!a || b" to "a && b" */
4004 if (first->op_type == OP_NOT
4005 && (first->op_flags & OPf_SPECIAL)
4006 && (first->op_flags & OPf_KIDS)) {
4007 if (type == OP_AND || type == OP_OR) {
4013 first = *firstp = cUNOPo->op_first;
4015 first->op_next = o->op_next;
4016 cUNOPo->op_first = NULL;
4018 op_getmad(o,first,'O');
4024 if (first->op_type == OP_CONST) {
4025 if (first->op_private & OPpCONST_STRICT)
4026 no_bareword_allowed(first);
4027 else if ((first->op_private & OPpCONST_BARE) && ckWARN(WARN_BAREWORD))
4028 Perl_warner(aTHX_ packWARN(WARN_BAREWORD), "Bareword found in conditional");
4029 if ((type == OP_AND && SvTRUE(((SVOP*)first)->op_sv)) ||
4030 (type == OP_OR && !SvTRUE(((SVOP*)first)->op_sv)) ||
4031 (type == OP_DOR && !SvOK(((SVOP*)first)->op_sv))) {
4033 if (other->op_type == OP_CONST)
4034 other->op_private |= OPpCONST_SHORTCIRCUIT;
4036 OP *newop = newUNOP(OP_NULL, 0, other);
4037 op_getmad(first, newop, '1');
4038 newop->op_targ = type; /* set "was" field */
4045 /* check for C<my $x if 0>, or C<my($x,$y) if 0> */
4046 const OP *o2 = other;
4047 if ( ! (o2->op_type == OP_LIST
4048 && (( o2 = cUNOPx(o2)->op_first))
4049 && o2->op_type == OP_PUSHMARK
4050 && (( o2 = o2->op_sibling)) )
4053 if ((o2->op_type == OP_PADSV || o2->op_type == OP_PADAV
4054 || o2->op_type == OP_PADHV)
4055 && o2->op_private & OPpLVAL_INTRO
4056 && ckWARN(WARN_DEPRECATED))
4058 Perl_warner(aTHX_ packWARN(WARN_DEPRECATED),
4059 "Deprecated use of my() in false conditional");
4063 if (first->op_type == OP_CONST)
4064 first->op_private |= OPpCONST_SHORTCIRCUIT;
4066 first = newUNOP(OP_NULL, 0, first);
4067 op_getmad(other, first, '2');
4068 first->op_targ = type; /* set "was" field */
4075 else if ((first->op_flags & OPf_KIDS) && type != OP_DOR
4076 && ckWARN(WARN_MISC)) /* [#24076] Don't warn for <FH> err FOO. */
4078 const OP * const k1 = ((UNOP*)first)->op_first;
4079 const OP * const k2 = k1->op_sibling;
4081 switch (first->op_type)
4084 if (k2 && k2->op_type == OP_READLINE
4085 && (k2->op_flags & OPf_STACKED)
4086 && ((k1->op_flags & OPf_WANT) == OPf_WANT_SCALAR))
4088 warnop = k2->op_type;
4093 if (k1->op_type == OP_READDIR
4094 || k1->op_type == OP_GLOB
4095 || (k1->op_type == OP_NULL && k1->op_targ == OP_GLOB)
4096 || k1->op_type == OP_EACH)
4098 warnop = ((k1->op_type == OP_NULL)
4099 ? (OPCODE)k1->op_targ : k1->op_type);
4104 const line_t oldline = CopLINE(PL_curcop);
4105 CopLINE_set(PL_curcop, PL_copline);
4106 Perl_warner(aTHX_ packWARN(WARN_MISC),
4107 "Value of %s%s can be \"0\"; test with defined()",
4109 ((warnop == OP_READLINE || warnop == OP_GLOB)
4110 ? " construct" : "() operator"));
4111 CopLINE_set(PL_curcop, oldline);
4118 if (type == OP_ANDASSIGN || type == OP_ORASSIGN || type == OP_DORASSIGN)
4119 other->op_private |= OPpASSIGN_BACKWARDS; /* other is an OP_SASSIGN */
4121 NewOp(1101, logop, 1, LOGOP);
4123 logop->op_type = (OPCODE)type;
4124 logop->op_ppaddr = PL_ppaddr[type];
4125 logop->op_first = first;
4126 logop->op_flags = (U8)(flags | OPf_KIDS);
4127 logop->op_other = LINKLIST(other);
4128 logop->op_private = (U8)(1 | (flags >> 8));
4130 /* establish postfix order */
4131 logop->op_next = LINKLIST(first);
4132 first->op_next = (OP*)logop;
4133 first->op_sibling = other;
4135 CHECKOP(type,logop);
4137 o = newUNOP(OP_NULL, 0, (OP*)logop);
4144 Perl_newCONDOP(pTHX_ I32 flags, OP *first, OP *trueop, OP *falseop)
4152 return newLOGOP(OP_AND, 0, first, trueop);
4154 return newLOGOP(OP_OR, 0, first, falseop);
4156 scalarboolean(first);
4157 if (first->op_type == OP_CONST) {
4158 if (first->op_private & OPpCONST_BARE &&
4159 first->op_private & OPpCONST_STRICT) {
4160 no_bareword_allowed(first);
4162 if (SvTRUE(((SVOP*)first)->op_sv)) {
4165 trueop = newUNOP(OP_NULL, 0, trueop);
4166 op_getmad(first,trueop,'C');
4167 op_getmad(falseop,trueop,'e');
4169 /* FIXME for MAD - should there be an ELSE here? */
4179 falseop = newUNOP(OP_NULL, 0, falseop);
4180 op_getmad(first,falseop,'C');
4181 op_getmad(trueop,falseop,'t');
4183 /* FIXME for MAD - should there be an ELSE here? */
4191 NewOp(1101, logop, 1, LOGOP);
4192 logop->op_type = OP_COND_EXPR;
4193 logop->op_ppaddr = PL_ppaddr[OP_COND_EXPR];
4194 logop->op_first = first;
4195 logop->op_flags = (U8)(flags | OPf_KIDS);
4196 logop->op_private = (U8)(1 | (flags >> 8));
4197 logop->op_other = LINKLIST(trueop);
4198 logop->op_next = LINKLIST(falseop);
4200 CHECKOP(OP_COND_EXPR, /* that's logop->op_type */
4203 /* establish postfix order */
4204 start = LINKLIST(first);
4205 first->op_next = (OP*)logop;
4207 first->op_sibling = trueop;
4208 trueop->op_sibling = falseop;
4209 o = newUNOP(OP_NULL, 0, (OP*)logop);
4211 trueop->op_next = falseop->op_next = o;
4218 Perl_newRANGE(pTHX_ I32 flags, OP *left, OP *right)
4227 NewOp(1101, range, 1, LOGOP);
4229 range->op_type = OP_RANGE;
4230 range->op_ppaddr = PL_ppaddr[OP_RANGE];
4231 range->op_first = left;
4232 range->op_flags = OPf_KIDS;
4233 leftstart = LINKLIST(left);
4234 range->op_other = LINKLIST(right);
4235 range->op_private = (U8)(1 | (flags >> 8));
4237 left->op_sibling = right;
4239 range->op_next = (OP*)range;
4240 flip = newUNOP(OP_FLIP, flags, (OP*)range);
4241 flop = newUNOP(OP_FLOP, 0, flip);
4242 o = newUNOP(OP_NULL, 0, flop);
4244 range->op_next = leftstart;
4246 left->op_next = flip;
4247 right->op_next = flop;
4249 range->op_targ = pad_alloc(OP_RANGE, SVs_PADMY);
4250 sv_upgrade(PAD_SV(range->op_targ), SVt_PVNV);
4251 flip->op_targ = pad_alloc(OP_RANGE, SVs_PADMY);
4252 sv_upgrade(PAD_SV(flip->op_targ), SVt_PVNV);
4254 flip->op_private = left->op_type == OP_CONST ? OPpFLIP_LINENUM : 0;
4255 flop->op_private = right->op_type == OP_CONST ? OPpFLIP_LINENUM : 0;
4258 if (!flip->op_private || !flop->op_private)
4259 linklist(o); /* blow off optimizer unless constant */
4265 Perl_newLOOPOP(pTHX_ I32 flags, I32 debuggable, OP *expr, OP *block)
4270 const bool once = block && block->op_flags & OPf_SPECIAL &&
4271 (block->op_type == OP_ENTERSUB || block->op_type == OP_NULL);
4273 PERL_UNUSED_ARG(debuggable);
4276 if (once && expr->op_type == OP_CONST && !SvTRUE(((SVOP*)expr)->op_sv))
4277 return block; /* do {} while 0 does once */
4278 if (expr->op_type == OP_READLINE || expr->op_type == OP_GLOB
4279 || (expr->op_type == OP_NULL && expr->op_targ == OP_GLOB)) {
4280 expr = newUNOP(OP_DEFINED, 0,
4281 newASSIGNOP(0, newDEFSVOP(), 0, expr) );
4282 } else if (expr->op_flags & OPf_KIDS) {
4283 const OP * const k1 = ((UNOP*)expr)->op_first;
4284 const OP * const k2 = k1 ? k1->op_sibling : NULL;
4285 switch (expr->op_type) {
4287 if (k2 && k2->op_type == OP_READLINE
4288 && (k2->op_flags & OPf_STACKED)
4289 && ((k1->op_flags & OPf_WANT) == OPf_WANT_SCALAR))
4290 expr = newUNOP(OP_DEFINED, 0, expr);
4294 if (k1 && (k1->op_type == OP_READDIR
4295 || k1->op_type == OP_GLOB
4296 || (k1->op_type == OP_NULL && k1->op_targ == OP_GLOB)
4297 || k1->op_type == OP_EACH))
4298 expr = newUNOP(OP_DEFINED, 0, expr);
4304 /* if block is null, the next append_elem() would put UNSTACK, a scalar
4305 * op, in listop. This is wrong. [perl #27024] */
4307 block = newOP(OP_NULL, 0);
4308 listop = append_elem(OP_LINESEQ, block, newOP(OP_UNSTACK, 0));
4309 o = new_logop(OP_AND, 0, &expr, &listop);
4312 ((LISTOP*)listop)->op_last->op_next = LINKLIST(o);
4314 if (once && o != listop)
4315 o->op_next = ((LOGOP*)cUNOPo->op_first)->op_other;
4318 o = newUNOP(OP_NULL, 0, o); /* or do {} while 1 loses outer block */
4320 o->op_flags |= flags;
4322 o->op_flags |= OPf_SPECIAL; /* suppress POPBLOCK curpm restoration*/
4327 Perl_newWHILEOP(pTHX_ I32 flags, I32 debuggable, LOOP *loop, I32
4328 whileline, OP *expr, OP *block, OP *cont, I32 has_my)
4337 PERL_UNUSED_ARG(debuggable);
4340 if (expr->op_type == OP_READLINE || expr->op_type == OP_GLOB
4341 || (expr->op_type == OP_NULL && expr->op_targ == OP_GLOB)) {
4342 expr = newUNOP(OP_DEFINED, 0,
4343 newASSIGNOP(0, newDEFSVOP(), 0, expr) );
4344 } else if (expr->op_flags & OPf_KIDS) {
4345 const OP * const k1 = ((UNOP*)expr)->op_first;
4346 const OP * const k2 = (k1) ? k1->op_sibling : NULL;
4347 switch (expr->op_type) {
4349 if (k2 && k2->op_type == OP_READLINE
4350 && (k2->op_flags & OPf_STACKED)
4351 && ((k1->op_flags & OPf_WANT) == OPf_WANT_SCALAR))
4352 expr = newUNOP(OP_DEFINED, 0, expr);
4356 if (k1 && (k1->op_type == OP_READDIR
4357 || k1->op_type == OP_GLOB
4358 || (k1->op_type == OP_NULL && k1->op_targ == OP_GLOB)
4359 || k1->op_type == OP_EACH))
4360 expr = newUNOP(OP_DEFINED, 0, expr);
4367 block = newOP(OP_NULL, 0);
4368 else if (cont || has_my) {
4369 block = scope(block);
4373 next = LINKLIST(cont);
4376 OP * const unstack = newOP(OP_UNSTACK, 0);
4379 cont = append_elem(OP_LINESEQ, cont, unstack);
4383 listop = append_list(OP_LINESEQ, (LISTOP*)block, (LISTOP*)cont);
4385 redo = LINKLIST(listop);
4388 PL_copline = (line_t)whileline;
4390 o = new_logop(OP_AND, 0, &expr, &listop);
4391 if (o == expr && o->op_type == OP_CONST && !SvTRUE(cSVOPo->op_sv)) {
4392 op_free(expr); /* oops, it's a while (0) */
4394 return NULL; /* listop already freed by new_logop */
4397 ((LISTOP*)listop)->op_last->op_next =
4398 (o == listop ? redo : LINKLIST(o));
4404 NewOp(1101,loop,1,LOOP);
4405 loop->op_type = OP_ENTERLOOP;
4406 loop->op_ppaddr = PL_ppaddr[OP_ENTERLOOP];
4407 loop->op_private = 0;
4408 loop->op_next = (OP*)loop;
4411 o = newBINOP(OP_LEAVELOOP, 0, (OP*)loop, o);
4413 loop->op_redoop = redo;
4414 loop->op_lastop = o;
4415 o->op_private |= loopflags;
4418 loop->op_nextop = next;
4420 loop->op_nextop = o;
4422 o->op_flags |= flags;
4423 o->op_private |= (flags >> 8);
4428 Perl_newFOROP(pTHX_ I32 flags, char *label, line_t forline, OP *sv, OP *expr, OP *block, OP *cont)
4433 PADOFFSET padoff = 0;
4439 if (sv->op_type == OP_RV2SV) { /* symbol table variable */
4440 iterpflags = sv->op_private & OPpOUR_INTRO; /* for our $x () */
4441 sv->op_type = OP_RV2GV;
4442 sv->op_ppaddr = PL_ppaddr[OP_RV2GV];
4443 if (cGVOPx_gv(cUNOPx(sv)->op_first) == PL_defgv)
4444 iterpflags |= OPpITER_DEF;
4446 else if (sv->op_type == OP_PADSV) { /* private variable */
4447 iterpflags = sv->op_private & OPpLVAL_INTRO; /* for my $x () */
4448 padoff = sv->op_targ;
4457 else if (sv->op_type == OP_THREADSV) { /* per-thread variable */
4458 padoff = sv->op_targ;
4463 iterflags |= OPf_SPECIAL;
4469 Perl_croak(aTHX_ "Can't use %s for loop variable", PL_op_desc[sv->op_type]);
4470 if (padoff && strEQ(PAD_COMPNAME_PV(padoff), "$_"))
4471 iterpflags |= OPpITER_DEF;
4474 const PADOFFSET offset = pad_findmy("$_");
4475 if (offset == NOT_IN_PAD || PAD_COMPNAME_FLAGS_isOUR(offset)) {
4476 sv = newGVOP(OP_GV, 0, PL_defgv);
4481 iterpflags |= OPpITER_DEF;
4483 if (expr->op_type == OP_RV2AV || expr->op_type == OP_PADAV) {
4484 expr = mod(force_list(scalar(ref(expr, OP_ITER))), OP_GREPSTART);
4485 iterflags |= OPf_STACKED;
4487 else if (expr->op_type == OP_NULL &&
4488 (expr->op_flags & OPf_KIDS) &&
4489 ((BINOP*)expr)->op_first->op_type == OP_FLOP)
4491 /* Basically turn for($x..$y) into the same as for($x,$y), but we
4492 * set the STACKED flag to indicate that these values are to be
4493 * treated as min/max values by 'pp_iterinit'.
4495 const UNOP* const flip = (UNOP*)((UNOP*)((BINOP*)expr)->op_first)->op_first;
4496 LOGOP* const range = (LOGOP*) flip->op_first;
4497 OP* const left = range->op_first;
4498 OP* const right = left->op_sibling;
4501 range->op_flags &= ~OPf_KIDS;
4502 range->op_first = NULL;
4504 listop = (LISTOP*)newLISTOP(OP_LIST, 0, left, right);
4505 listop->op_first->op_next = range->op_next;
4506 left->op_next = range->op_other;
4507 right->op_next = (OP*)listop;
4508 listop->op_next = listop->op_first;
4511 op_getmad(expr,(OP*)listop,'O');
4515 expr = (OP*)(listop);
4517 iterflags |= OPf_STACKED;
4520 expr = mod(force_list(expr), OP_GREPSTART);
4523 loop = (LOOP*)list(convert(OP_ENTERITER, iterflags,
4524 append_elem(OP_LIST, expr, scalar(sv))));
4525 assert(!loop->op_next);
4526 /* for my $x () sets OPpLVAL_INTRO;
4527 * for our $x () sets OPpOUR_INTRO */
4528 loop->op_private = (U8)iterpflags;
4529 #ifdef PL_OP_SLAB_ALLOC
4532 NewOp(1234,tmp,1,LOOP);
4533 Copy(loop,tmp,1,LISTOP);
4538 loop = PerlMemShared_realloc(loop, sizeof(LOOP));
4540 loop->op_targ = padoff;
4541 wop = newWHILEOP(flags, 1, loop, forline, newOP(OP_ITER, 0), block, cont, 0);
4543 op_getmad(madsv, (OP*)loop, 'v');
4544 PL_copline = forline;
4545 return newSTATEOP(0, label, wop);
4549 Perl_newLOOPEX(pTHX_ I32 type, OP *label)
4554 if (type != OP_GOTO || label->op_type == OP_CONST) {
4555 /* "last()" means "last" */
4556 if (label->op_type == OP_STUB && (label->op_flags & OPf_PARENS))
4557 o = newOP(type, OPf_SPECIAL);
4559 o = newPVOP(type, 0, savepv(label->op_type == OP_CONST
4560 ? SvPVx_nolen_const(((SVOP*)label)->op_sv)
4564 op_getmad(label,o,'L');
4570 /* Check whether it's going to be a goto &function */
4571 if (label->op_type == OP_ENTERSUB
4572 && !(label->op_flags & OPf_STACKED))
4573 label = newUNOP(OP_REFGEN, 0, mod(label, OP_REFGEN));
4574 o = newUNOP(type, OPf_STACKED, label);
4576 PL_hints |= HINT_BLOCK_SCOPE;
4580 /* if the condition is a literal array or hash
4581 (or @{ ... } etc), make a reference to it.
4584 S_ref_array_or_hash(pTHX_ OP *cond)
4587 && (cond->op_type == OP_RV2AV
4588 || cond->op_type == OP_PADAV
4589 || cond->op_type == OP_RV2HV
4590 || cond->op_type == OP_PADHV))
4592 return newUNOP(OP_REFGEN,
4593 0, mod(cond, OP_REFGEN));
4599 /* These construct the optree fragments representing given()
4602 entergiven and enterwhen are LOGOPs; the op_other pointer
4603 points up to the associated leave op. We need this so we
4604 can put it in the context and make break/continue work.
4605 (Also, of course, pp_enterwhen will jump straight to
4606 op_other if the match fails.)
4611 S_newGIVWHENOP(pTHX_ OP *cond, OP *block,
4612 I32 enter_opcode, I32 leave_opcode,
4613 PADOFFSET entertarg)
4619 NewOp(1101, enterop, 1, LOGOP);
4620 enterop->op_type = enter_opcode;
4621 enterop->op_ppaddr = PL_ppaddr[enter_opcode];
4622 enterop->op_flags = (U8) OPf_KIDS;
4623 enterop->op_targ = ((entertarg == NOT_IN_PAD) ? 0 : entertarg);
4624 enterop->op_private = 0;
4626 o = newUNOP(leave_opcode, 0, (OP *) enterop);
4629 enterop->op_first = scalar(cond);
4630 cond->op_sibling = block;
4632 o->op_next = LINKLIST(cond);
4633 cond->op_next = (OP *) enterop;
4636 /* This is a default {} block */
4637 enterop->op_first = block;
4638 enterop->op_flags |= OPf_SPECIAL;
4640 o->op_next = (OP *) enterop;
4643 CHECKOP(enter_opcode, enterop); /* Currently does nothing, since
4644 entergiven and enterwhen both
4647 enterop->op_next = LINKLIST(block);
4648 block->op_next = enterop->op_other = o;
4653 /* Does this look like a boolean operation? For these purposes
4654 a boolean operation is:
4655 - a subroutine call [*]
4656 - a logical connective
4657 - a comparison operator
4658 - a filetest operator, with the exception of -s -M -A -C
4659 - defined(), exists() or eof()
4660 - /$re/ or $foo =~ /$re/
4662 [*] possibly surprising
4666 S_looks_like_bool(pTHX_ const OP *o)
4669 switch(o->op_type) {
4671 return looks_like_bool(cLOGOPo->op_first);
4675 looks_like_bool(cLOGOPo->op_first)
4676 && looks_like_bool(cLOGOPo->op_first->op_sibling));
4680 case OP_NOT: case OP_XOR:
4681 /* Note that OP_DOR is not here */
4683 case OP_EQ: case OP_NE: case OP_LT:
4684 case OP_GT: case OP_LE: case OP_GE:
4686 case OP_I_EQ: case OP_I_NE: case OP_I_LT:
4687 case OP_I_GT: case OP_I_LE: case OP_I_GE:
4689 case OP_SEQ: case OP_SNE: case OP_SLT:
4690 case OP_SGT: case OP_SLE: case OP_SGE:
4694 case OP_FTRREAD: case OP_FTRWRITE: case OP_FTREXEC:
4695 case OP_FTEREAD: case OP_FTEWRITE: case OP_FTEEXEC:
4696 case OP_FTIS: case OP_FTEOWNED: case OP_FTROWNED:
4697 case OP_FTZERO: case OP_FTSOCK: case OP_FTCHR:
4698 case OP_FTBLK: case OP_FTFILE: case OP_FTDIR:
4699 case OP_FTPIPE: case OP_FTLINK: case OP_FTSUID:
4700 case OP_FTSGID: case OP_FTSVTX: case OP_FTTTY:
4701 case OP_FTTEXT: case OP_FTBINARY:
4703 case OP_DEFINED: case OP_EXISTS:
4704 case OP_MATCH: case OP_EOF:
4709 /* Detect comparisons that have been optimized away */
4710 if (cSVOPo->op_sv == &PL_sv_yes
4711 || cSVOPo->op_sv == &PL_sv_no)
4722 Perl_newGIVENOP(pTHX_ OP *cond, OP *block, PADOFFSET defsv_off)
4726 return newGIVWHENOP(
4727 ref_array_or_hash(cond),
4729 OP_ENTERGIVEN, OP_LEAVEGIVEN,
4733 /* If cond is null, this is a default {} block */
4735 Perl_newWHENOP(pTHX_ OP *cond, OP *block)
4737 const bool cond_llb = (!cond || looks_like_bool(cond));
4743 cond_op = newBINOP(OP_SMARTMATCH, OPf_SPECIAL,
4745 scalar(ref_array_or_hash(cond)));
4748 return newGIVWHENOP(
4750 append_elem(block->op_type, block, newOP(OP_BREAK, OPf_SPECIAL)),
4751 OP_ENTERWHEN, OP_LEAVEWHEN, 0);
4755 =for apidoc cv_undef
4757 Clear out all the active components of a CV. This can happen either
4758 by an explicit C<undef &foo>, or by the reference count going to zero.
4759 In the former case, we keep the CvOUTSIDE pointer, so that any anonymous
4760 children can still follow the full lexical scope chain.
4766 Perl_cv_undef(pTHX_ CV *cv)
4770 if (CvFILE(cv) && !CvISXSUB(cv)) {
4771 /* for XSUBs CvFILE point directly to static memory; __FILE__ */
4772 Safefree(CvFILE(cv));
4777 if (!CvISXSUB(cv) && CvROOT(cv)) {
4778 if (SvTYPE(cv) == SVt_PVCV && CvDEPTH(cv))
4779 Perl_croak(aTHX_ "Can't undef active subroutine");
4782 PAD_SAVE_SETNULLPAD();
4784 op_free(CvROOT(cv));
4789 SvPOK_off((SV*)cv); /* forget prototype */
4794 /* remove CvOUTSIDE unless this is an undef rather than a free */
4795 if (!SvREFCNT(cv) && CvOUTSIDE(cv)) {
4796 if (!CvWEAKOUTSIDE(cv))
4797 SvREFCNT_dec(CvOUTSIDE(cv));
4798 CvOUTSIDE(cv) = NULL;
4801 SvREFCNT_dec((SV*)CvXSUBANY(cv).any_ptr);
4804 if (CvISXSUB(cv) && CvXSUB(cv)) {
4807 /* delete all flags except WEAKOUTSIDE */
4808 CvFLAGS(cv) &= CVf_WEAKOUTSIDE;
4812 Perl_cv_ckproto_len(pTHX_ const CV *cv, const GV *gv, const char *p,
4815 /* Can't just use a strcmp on the prototype, as CONSTSUBs "cheat" by
4816 relying on SvCUR, and doubling up the buffer to hold CvFILE(). */
4817 if (((!p != !SvPOK(cv)) /* One has prototype, one has not. */
4818 || (p && (len != SvCUR(cv) /* Not the same length. */
4819 || memNE(p, SvPVX_const(cv), len))))
4820 && ckWARN_d(WARN_PROTOTYPE)) {
4821 SV* const msg = sv_newmortal();
4825 gv_efullname3(name = sv_newmortal(), gv, NULL);
4826 sv_setpv(msg, "Prototype mismatch:");
4828 Perl_sv_catpvf(aTHX_ msg, " sub %"SVf, (void*)name);
4830 Perl_sv_catpvf(aTHX_ msg, " (%"SVf")", (void*)cv);
4832 sv_catpvs(msg, ": none");
4833 sv_catpvs(msg, " vs ");
4835 Perl_sv_catpvf(aTHX_ msg, "(%.*s)", (int) len, p);
4837 sv_catpvs(msg, "none");
4838 Perl_warner(aTHX_ packWARN(WARN_PROTOTYPE), "%"SVf, (void*)msg);
4842 static void const_sv_xsub(pTHX_ CV* cv);
4846 =head1 Optree Manipulation Functions
4848 =for apidoc cv_const_sv
4850 If C<cv> is a constant sub eligible for inlining. returns the constant
4851 value returned by the sub. Otherwise, returns NULL.
4853 Constant subs can be created with C<newCONSTSUB> or as described in
4854 L<perlsub/"Constant Functions">.
4859 Perl_cv_const_sv(pTHX_ CV *cv)
4861 PERL_UNUSED_CONTEXT;
4864 if (!(SvTYPE(cv) == SVt_PVCV || SvTYPE(cv) == SVt_PVFM))
4866 return CvCONST(cv) ? (SV*)CvXSUBANY(cv).any_ptr : NULL;
4869 /* op_const_sv: examine an optree to determine whether it's in-lineable.
4870 * Can be called in 3 ways:
4873 * look for a single OP_CONST with attached value: return the value
4875 * cv && CvCLONE(cv) && !CvCONST(cv)
4877 * examine the clone prototype, and if contains only a single
4878 * OP_CONST referencing a pad const, or a single PADSV referencing
4879 * an outer lexical, return a non-zero value to indicate the CV is
4880 * a candidate for "constizing" at clone time
4884 * We have just cloned an anon prototype that was marked as a const
4885 * candidiate. Try to grab the current value, and in the case of
4886 * PADSV, ignore it if it has multiple references. Return the value.
4890 Perl_op_const_sv(pTHX_ const OP *o, CV *cv)
4898 if (o->op_type == OP_LINESEQ && cLISTOPo->op_first)
4899 o = cLISTOPo->op_first->op_sibling;
4901 for (; o; o = o->op_next) {
4902 const OPCODE type = o->op_type;
4904 if (sv && o->op_next == o)
4906 if (o->op_next != o) {
4907 if (type == OP_NEXTSTATE || type == OP_NULL || type == OP_PUSHMARK)
4909 if (type == OP_DBSTATE)
4912 if (type == OP_LEAVESUB || type == OP_RETURN)
4916 if (type == OP_CONST && cSVOPo->op_sv)
4918 else if (cv && type == OP_CONST) {
4919 sv = PAD_BASE_SV(CvPADLIST(cv), o->op_targ);
4923 else if (cv && type == OP_PADSV) {
4924 if (CvCONST(cv)) { /* newly cloned anon */
4925 sv = PAD_BASE_SV(CvPADLIST(cv), o->op_targ);
4926 /* the candidate should have 1 ref from this pad and 1 ref
4927 * from the parent */
4928 if (!sv || SvREFCNT(sv) != 2)
4935 if (PAD_COMPNAME_FLAGS(o->op_targ) & SVf_FAKE)
4936 sv = &PL_sv_undef; /* an arbitrary non-null value */
4951 Perl_newMYSUB(pTHX_ I32 floor, OP *o, OP *proto, OP *attrs, OP *block)
4954 /* This would be the return value, but the return cannot be reached. */
4955 OP* pegop = newOP(OP_NULL, 0);
4958 PERL_UNUSED_ARG(floor);
4968 Perl_croak(aTHX_ "\"my sub\" not yet implemented");
4970 NORETURN_FUNCTION_END;
4975 Perl_newSUB(pTHX_ I32 floor, OP *o, OP *proto, OP *block)
4977 return Perl_newATTRSUB(aTHX_ floor, o, proto, NULL, block);
4981 Perl_newATTRSUB(pTHX_ I32 floor, OP *o, OP *proto, OP *attrs, OP *block)
4988 register CV *cv = NULL;
4990 /* If the subroutine has no body, no attributes, and no builtin attributes
4991 then it's just a sub declaration, and we may be able to get away with
4992 storing with a placeholder scalar in the symbol table, rather than a
4993 full GV and CV. If anything is present then it will take a full CV to
4995 const I32 gv_fetch_flags
4996 = (block || attrs || (CvFLAGS(PL_compcv) & CVf_BUILTIN_ATTRS)
4998 ? GV_ADDMULTI : GV_ADDMULTI | GV_NOINIT;
4999 const char * const name = o ? SvPVx_nolen_const(cSVOPo->op_sv) : NULL;
5002 assert(proto->op_type == OP_CONST);
5003 ps = SvPVx_const(((SVOP*)proto)->op_sv, ps_len);
5008 if (!name && PERLDB_NAMEANON && CopLINE(PL_curcop)) {
5009 SV * const sv = sv_newmortal();
5010 Perl_sv_setpvf(aTHX_ sv, "%s[%s:%"IVdf"]",
5011 PL_curstash ? "__ANON__" : "__ANON__::__ANON__",
5012 CopFILE(PL_curcop), (IV)CopLINE(PL_curcop));
5013 aname = SvPVX_const(sv);
5018 gv = name ? gv_fetchsv(cSVOPo->op_sv, gv_fetch_flags, SVt_PVCV)
5019 : gv_fetchpv(aname ? aname
5020 : (PL_curstash ? "__ANON__" : "__ANON__::__ANON__"),
5021 gv_fetch_flags, SVt_PVCV);
5023 if (!PL_madskills) {
5032 if (SvTYPE(gv) != SVt_PVGV) { /* Maybe prototype now, and had at
5033 maximum a prototype before. */
5034 if (SvTYPE(gv) > SVt_NULL) {
5035 if (!SvPOK((SV*)gv) && !(SvIOK((SV*)gv) && SvIVX((SV*)gv) == -1)
5036 && ckWARN_d(WARN_PROTOTYPE))
5038 Perl_warner(aTHX_ packWARN(WARN_PROTOTYPE), "Runaway prototype");
5040 cv_ckproto_len((CV*)gv, NULL, ps, ps_len);
5043 sv_setpvn((SV*)gv, ps, ps_len);
5045 sv_setiv((SV*)gv, -1);
5046 SvREFCNT_dec(PL_compcv);
5047 cv = PL_compcv = NULL;
5048 PL_sub_generation++;
5052 cv = (!name || GvCVGEN(gv)) ? NULL : GvCV(gv);
5054 #ifdef GV_UNIQUE_CHECK
5055 if (cv && GvUNIQUE(gv) && SvREADONLY(cv)) {
5056 Perl_croak(aTHX_ "Can't define subroutine %s (GV is unique)", name);
5060 if (!block || !ps || *ps || attrs
5061 || (CvFLAGS(PL_compcv) & CVf_BUILTIN_ATTRS)
5063 || block->op_type == OP_NULL
5068 const_sv = op_const_sv(block, NULL);
5071 const bool exists = CvROOT(cv) || CvXSUB(cv);
5073 #ifdef GV_UNIQUE_CHECK
5074 if (exists && GvUNIQUE(gv)) {
5075 Perl_croak(aTHX_ "Can't redefine unique subroutine %s", name);
5079 /* if the subroutine doesn't exist and wasn't pre-declared
5080 * with a prototype, assume it will be AUTOLOADed,
5081 * skipping the prototype check
5083 if (exists || SvPOK(cv))
5084 cv_ckproto_len(cv, gv, ps, ps_len);
5085 /* already defined (or promised)? */
5086 if (exists || GvASSUMECV(gv)) {
5089 || block->op_type == OP_NULL
5092 if (CvFLAGS(PL_compcv)) {
5093 /* might have had built-in attrs applied */
5094 CvFLAGS(cv) |= (CvFLAGS(PL_compcv) & CVf_BUILTIN_ATTRS);
5096 /* just a "sub foo;" when &foo is already defined */
5097 SAVEFREESV(PL_compcv);
5102 && block->op_type != OP_NULL
5105 if (ckWARN(WARN_REDEFINE)
5107 && (!const_sv || sv_cmp(cv_const_sv(cv), const_sv))))
5109 const line_t oldline = CopLINE(PL_curcop);
5110 if (PL_copline != NOLINE)
5111 CopLINE_set(PL_curcop, PL_copline);
5112 Perl_warner(aTHX_ packWARN(WARN_REDEFINE),
5113 CvCONST(cv) ? "Constant subroutine %s redefined"
5114 : "Subroutine %s redefined", name);
5115 CopLINE_set(PL_curcop, oldline);
5118 if (!PL_minus_c) /* keep old one around for madskills */
5121 /* (PL_madskills unset in used file.) */
5129 SvREFCNT_inc_simple_void_NN(const_sv);
5131 assert(!CvROOT(cv) && !CvCONST(cv));
5132 sv_setpvn((SV*)cv, "", 0); /* prototype is "" */
5133 CvXSUBANY(cv).any_ptr = const_sv;
5134 CvXSUB(cv) = const_sv_xsub;
5140 cv = newCONSTSUB(NULL, name, const_sv);
5142 PL_sub_generation++;
5146 SvREFCNT_dec(PL_compcv);
5154 /* Need to do a C<use attributes $stash_of_cv,\&cv,@attrs>
5155 * before we clobber PL_compcv.
5159 || block->op_type == OP_NULL
5163 /* Might have had built-in attributes applied -- propagate them. */
5164 CvFLAGS(cv) |= (CvFLAGS(PL_compcv) & CVf_BUILTIN_ATTRS);
5165 if (CvGV(cv) && GvSTASH(CvGV(cv)))
5166 stash = GvSTASH(CvGV(cv));
5167 else if (CvSTASH(cv))
5168 stash = CvSTASH(cv);
5170 stash = PL_curstash;
5173 /* possibly about to re-define existing subr -- ignore old cv */
5174 rcv = (SV*)PL_compcv;
5175 if (name && GvSTASH(gv))
5176 stash = GvSTASH(gv);
5178 stash = PL_curstash;
5180 apply_attrs(stash, rcv, attrs, FALSE);
5182 if (cv) { /* must reuse cv if autoloaded */
5189 || block->op_type == OP_NULL) && !PL_madskills
5192 /* got here with just attrs -- work done, so bug out */
5193 SAVEFREESV(PL_compcv);
5196 /* transfer PL_compcv to cv */
5198 CvFLAGS(cv) = CvFLAGS(PL_compcv);
5199 if (!CvWEAKOUTSIDE(cv))
5200 SvREFCNT_dec(CvOUTSIDE(cv));
5201 CvOUTSIDE(cv) = CvOUTSIDE(PL_compcv);
5202 CvOUTSIDE_SEQ(cv) = CvOUTSIDE_SEQ(PL_compcv);
5203 CvOUTSIDE(PL_compcv) = 0;
5204 CvPADLIST(cv) = CvPADLIST(PL_compcv);
5205 CvPADLIST(PL_compcv) = 0;
5206 /* inner references to PL_compcv must be fixed up ... */
5207 pad_fixup_inner_anons(CvPADLIST(cv), PL_compcv, cv);
5208 /* ... before we throw it away */
5209 SvREFCNT_dec(PL_compcv);
5211 if (PERLDB_INTER)/* Advice debugger on the new sub. */
5212 ++PL_sub_generation;
5219 if (strEQ(name, "import")) {
5220 PL_formfeed = (SV*)cv;
5221 Perl_warner(aTHX_ packWARN(WARN_VOID), "%lx\n", (long)cv);
5225 PL_sub_generation++;
5229 CvFILE_set_from_cop(cv, PL_curcop);
5230 CvSTASH(cv) = PL_curstash;
5233 sv_setpvn((SV*)cv, ps, ps_len);
5235 if (PL_error_count) {
5239 const char *s = strrchr(name, ':');
5241 if (strEQ(s, "BEGIN")) {
5242 const char not_safe[] =
5243 "BEGIN not safe after errors--compilation aborted";
5244 if (PL_in_eval & EVAL_KEEPERR)
5245 Perl_croak(aTHX_ not_safe);
5247 /* force display of errors found but not reported */
5248 sv_catpv(ERRSV, not_safe);
5249 Perl_croak(aTHX_ "%"SVf, (void*)ERRSV);
5259 CvROOT(cv) = newUNOP(OP_LEAVESUBLV, 0,
5260 mod(scalarseq(block), OP_LEAVESUBLV));
5263 /* This makes sub {}; work as expected. */
5264 if (block->op_type == OP_STUB) {
5265 OP* const newblock = newSTATEOP(0, NULL, 0);
5267 op_getmad(block,newblock,'B');
5273 CvROOT(cv) = newUNOP(OP_LEAVESUB, 0, scalarseq(block));
5275 CvROOT(cv)->op_private |= OPpREFCOUNTED;
5276 OpREFCNT_set(CvROOT(cv), 1);
5277 CvSTART(cv) = LINKLIST(CvROOT(cv));
5278 CvROOT(cv)->op_next = 0;
5279 CALL_PEEP(CvSTART(cv));
5281 /* now that optimizer has done its work, adjust pad values */
5283 pad_tidy(CvCLONE(cv) ? padtidy_SUBCLONE : padtidy_SUB);
5286 assert(!CvCONST(cv));
5287 if (ps && !*ps && op_const_sv(block, cv))
5291 if (name || aname) {
5293 const char * const tname = (name ? name : aname);
5295 if (PERLDB_SUBLINE && PL_curstash != PL_debstash) {
5296 SV * const sv = newSV(0);
5297 SV * const tmpstr = sv_newmortal();
5298 GV * const db_postponed = gv_fetchpvs("DB::postponed",
5299 GV_ADDMULTI, SVt_PVHV);
5302 Perl_sv_setpvf(aTHX_ sv, "%s:%ld-%ld",
5304 (long)PL_subline, (long)CopLINE(PL_curcop));
5305 gv_efullname3(tmpstr, gv, NULL);
5306 hv_store(GvHV(PL_DBsub), SvPVX_const(tmpstr), SvCUR(tmpstr), sv, 0);
5307 hv = GvHVn(db_postponed);
5308 if (HvFILL(hv) > 0 && hv_exists(hv, SvPVX_const(tmpstr), SvCUR(tmpstr))) {
5309 CV * const pcv = GvCV(db_postponed);
5315 call_sv((SV*)pcv, G_DISCARD);
5320 if ((s = strrchr(tname,':')))
5325 if (*s != 'B' && *s != 'E' && *s != 'C' && *s != 'I')
5328 if (strEQ(s, "BEGIN") && !PL_error_count) {
5329 const I32 oldscope = PL_scopestack_ix;
5331 SAVECOPFILE(&PL_compiling);
5332 SAVECOPLINE(&PL_compiling);
5335 PL_beginav = newAV();
5336 DEBUG_x( dump_sub(gv) );
5337 av_push(PL_beginav, (SV*)cv);
5338 GvCV(gv) = 0; /* cv has been hijacked */
5339 call_list(oldscope, PL_beginav);
5341 PL_curcop = &PL_compiling;
5342 CopHINTS_set(&PL_compiling, PL_hints);
5345 else if (strEQ(s, "END") && !PL_error_count) {
5348 DEBUG_x( dump_sub(gv) );
5349 av_unshift(PL_endav, 1);
5350 av_store(PL_endav, 0, (SV*)cv);
5351 GvCV(gv) = 0; /* cv has been hijacked */
5353 else if (strEQ(s, "CHECK") && !PL_error_count) {
5355 PL_checkav = newAV();
5356 DEBUG_x( dump_sub(gv) );
5357 if (PL_main_start && ckWARN(WARN_VOID))
5358 Perl_warner(aTHX_ packWARN(WARN_VOID), "Too late to run CHECK block");
5359 av_unshift(PL_checkav, 1);
5360 av_store(PL_checkav, 0, (SV*)cv);
5361 GvCV(gv) = 0; /* cv has been hijacked */
5363 else if (strEQ(s, "INIT") && !PL_error_count) {
5365 PL_initav = newAV();
5366 DEBUG_x( dump_sub(gv) );
5367 if (PL_main_start && ckWARN(WARN_VOID))
5368 Perl_warner(aTHX_ packWARN(WARN_VOID), "Too late to run INIT block");
5369 av_push(PL_initav, (SV*)cv);
5370 GvCV(gv) = 0; /* cv has been hijacked */
5375 PL_copline = NOLINE;
5380 /* XXX unsafe for threads if eval_owner isn't held */
5382 =for apidoc newCONSTSUB
5384 Creates a constant sub equivalent to Perl C<sub FOO () { 123 }> which is
5385 eligible for inlining at compile-time.
5391 Perl_newCONSTSUB(pTHX_ HV *stash, const char *name, SV *sv)
5396 const char *const temp_p = CopFILE(PL_curcop);
5397 const STRLEN len = temp_p ? strlen(temp_p) : 0;
5399 SV *const temp_sv = CopFILESV(PL_curcop);
5401 const char *const temp_p = temp_sv ? SvPV_const(temp_sv, len) : NULL;
5403 char *const file = savepvn(temp_p, temp_p ? len : 0);
5407 SAVECOPLINE(PL_curcop);
5408 CopLINE_set(PL_curcop, PL_copline);
5411 PL_hints &= ~HINT_BLOCK_SCOPE;
5414 SAVESPTR(PL_curstash);
5415 SAVECOPSTASH(PL_curcop);
5416 PL_curstash = stash;
5417 CopSTASH_set(PL_curcop,stash);
5420 /* file becomes the CvFILE. For an XS, it's supposed to be static storage,
5421 and so doesn't get free()d. (It's expected to be from the C pre-
5422 processor __FILE__ directive). But we need a dynamically allocated one,
5423 and we need it to get freed. */
5424 cv = newXS_flags(name, const_sv_xsub, file, "", XS_DYNAMIC_FILENAME);
5425 CvXSUBANY(cv).any_ptr = sv;
5430 CopSTASH_free(PL_curcop);
5438 Perl_newXS_flags(pTHX_ const char *name, XSUBADDR_t subaddr,
5439 const char *const filename, const char *const proto,
5442 CV *cv = newXS(name, subaddr, filename);
5444 if (flags & XS_DYNAMIC_FILENAME) {
5445 /* We need to "make arrangements" (ie cheat) to ensure that the
5446 filename lasts as long as the PVCV we just created, but also doesn't
5448 STRLEN filename_len = strlen(filename);
5449 STRLEN proto_and_file_len = filename_len;
5450 char *proto_and_file;
5454 proto_len = strlen(proto);
5455 proto_and_file_len += proto_len;
5457 Newx(proto_and_file, proto_and_file_len + 1, char);
5458 Copy(proto, proto_and_file, proto_len, char);
5459 Copy(filename, proto_and_file + proto_len, filename_len + 1, char);
5462 proto_and_file = savepvn(filename, filename_len);
5465 /* This gets free()d. :-) */
5466 sv_usepvn_flags((SV*)cv, proto_and_file, proto_and_file_len,
5467 SV_HAS_TRAILING_NUL);
5469 /* This gives us the correct prototype, rather than one with the
5470 file name appended. */
5471 SvCUR_set(cv, proto_len);
5475 CvFILE(cv) = proto_and_file + proto_len;
5477 sv_setpv((SV *)cv, proto);
5483 =for apidoc U||newXS
5485 Used by C<xsubpp> to hook up XSUBs as Perl subs. I<filename> needs to be
5486 static storage, as it is used directly as CvFILE(), without a copy being made.
5492 Perl_newXS(pTHX_ const char *name, XSUBADDR_t subaddr, const char *filename)
5495 GV * const gv = gv_fetchpv(name ? name :
5496 (PL_curstash ? "__ANON__" : "__ANON__::__ANON__"),
5497 GV_ADDMULTI, SVt_PVCV);
5501 Perl_croak(aTHX_ "panic: no address for '%s' in '%s'", name, filename);
5503 if ((cv = (name ? GvCV(gv) : NULL))) {
5505 /* just a cached method */
5509 else if (CvROOT(cv) || CvXSUB(cv) || GvASSUMECV(gv)) {
5510 /* already defined (or promised) */
5511 /* XXX It's possible for this HvNAME_get to return null, and get passed into strEQ */
5512 if (ckWARN(WARN_REDEFINE)) {
5513 GV * const gvcv = CvGV(cv);
5515 HV * const stash = GvSTASH(gvcv);
5517 const char *redefined_name = HvNAME_get(stash);
5518 if ( strEQ(redefined_name,"autouse") ) {
5519 const line_t oldline = CopLINE(PL_curcop);
5520 if (PL_copline != NOLINE)
5521 CopLINE_set(PL_curcop, PL_copline);
5522 Perl_warner(aTHX_ packWARN(WARN_REDEFINE),
5523 CvCONST(cv) ? "Constant subroutine %s redefined"
5524 : "Subroutine %s redefined"
5526 CopLINE_set(PL_curcop, oldline);
5536 if (cv) /* must reuse cv if autoloaded */
5540 sv_upgrade((SV *)cv, SVt_PVCV);
5544 PL_sub_generation++;
5548 (void)gv_fetchfile(filename);
5549 CvFILE(cv) = (char *)filename; /* NOTE: not copied, as it is expected to be
5550 an external constant string */
5552 CvXSUB(cv) = subaddr;
5555 const char *s = strrchr(name,':');
5561 if (*s != 'B' && *s != 'E' && *s != 'C' && *s != 'I')
5564 if (strEQ(s, "BEGIN")) {
5566 PL_beginav = newAV();
5567 av_push(PL_beginav, (SV*)cv);
5568 GvCV(gv) = 0; /* cv has been hijacked */
5570 else if (strEQ(s, "END")) {
5573 av_unshift(PL_endav, 1);
5574 av_store(PL_endav, 0, (SV*)cv);
5575 GvCV(gv) = 0; /* cv has been hijacked */
5577 else if (strEQ(s, "CHECK")) {
5579 PL_checkav = newAV();
5580 if (PL_main_start && ckWARN(WARN_VOID))
5581 Perl_warner(aTHX_ packWARN(WARN_VOID), "Too late to run CHECK block");
5582 av_unshift(PL_checkav, 1);
5583 av_store(PL_checkav, 0, (SV*)cv);
5584 GvCV(gv) = 0; /* cv has been hijacked */
5586 else if (strEQ(s, "INIT")) {
5588 PL_initav = newAV();
5589 if (PL_main_start && ckWARN(WARN_VOID))
5590 Perl_warner(aTHX_ packWARN(WARN_VOID), "Too late to run INIT block");
5591 av_push(PL_initav, (SV*)cv);
5592 GvCV(gv) = 0; /* cv has been hijacked */
5607 Perl_newFORM(pTHX_ I32 floor, OP *o, OP *block)
5612 OP* pegop = newOP(OP_NULL, 0);
5616 ? gv_fetchsv(cSVOPo->op_sv, GV_ADD, SVt_PVFM)
5617 : gv_fetchpvs("STDOUT", GV_ADD|GV_NOTQUAL, SVt_PVFM);
5619 #ifdef GV_UNIQUE_CHECK
5621 Perl_croak(aTHX_ "Bad symbol for form (GV is unique)");
5625 if ((cv = GvFORM(gv))) {
5626 if (ckWARN(WARN_REDEFINE)) {
5627 const line_t oldline = CopLINE(PL_curcop);
5628 if (PL_copline != NOLINE)
5629 CopLINE_set(PL_curcop, PL_copline);
5630 Perl_warner(aTHX_ packWARN(WARN_REDEFINE),
5631 o ? "Format %"SVf" redefined"
5632 : "Format STDOUT redefined", (void*)cSVOPo->op_sv);
5633 CopLINE_set(PL_curcop, oldline);
5640 CvFILE_set_from_cop(cv, PL_curcop);
5643 pad_tidy(padtidy_FORMAT);
5644 CvROOT(cv) = newUNOP(OP_LEAVEWRITE, 0, scalarseq(block));
5645 CvROOT(cv)->op_private |= OPpREFCOUNTED;
5646 OpREFCNT_set(CvROOT(cv), 1);
5647 CvSTART(cv) = LINKLIST(CvROOT(cv));
5648 CvROOT(cv)->op_next = 0;
5649 CALL_PEEP(CvSTART(cv));
5651 op_getmad(o,pegop,'n');
5652 op_getmad_weak(block, pegop, 'b');
5656 PL_copline = NOLINE;
5664 Perl_newANONLIST(pTHX_ OP *o)
5666 return newUNOP(OP_REFGEN, 0,
5667 mod(list(convert(OP_ANONLIST, 0, o)), OP_REFGEN));
5671 Perl_newANONHASH(pTHX_ OP *o)
5673 return newUNOP(OP_REFGEN, 0,
5674 mod(list(convert(OP_ANONHASH, 0, o)), OP_REFGEN));
5678 Perl_newANONSUB(pTHX_ I32 floor, OP *proto, OP *block)
5680 return newANONATTRSUB(floor, proto, NULL, block);
5684 Perl_newANONATTRSUB(pTHX_ I32 floor, OP *proto, OP *attrs, OP *block)
5686 return newUNOP(OP_REFGEN, 0,
5687 newSVOP(OP_ANONCODE, 0,
5688 (SV*)newATTRSUB(floor, 0, proto, attrs, block)));
5692 Perl_oopsAV(pTHX_ OP *o)
5695 switch (o->op_type) {
5697 o->op_type = OP_PADAV;
5698 o->op_ppaddr = PL_ppaddr[OP_PADAV];
5699 return ref(o, OP_RV2AV);
5702 o->op_type = OP_RV2AV;
5703 o->op_ppaddr = PL_ppaddr[OP_RV2AV];
5708 if (ckWARN_d(WARN_INTERNAL))
5709 Perl_warner(aTHX_ packWARN(WARN_INTERNAL), "oops: oopsAV");
5716 Perl_oopsHV(pTHX_ OP *o)
5719 switch (o->op_type) {
5722 o->op_type = OP_PADHV;
5723 o->op_ppaddr = PL_ppaddr[OP_PADHV];
5724 return ref(o, OP_RV2HV);
5728 o->op_type = OP_RV2HV;
5729 o->op_ppaddr = PL_ppaddr[OP_RV2HV];
5734 if (ckWARN_d(WARN_INTERNAL))
5735 Perl_warner(aTHX_ packWARN(WARN_INTERNAL), "oops: oopsHV");
5742 Perl_newAVREF(pTHX_ OP *o)
5745 if (o->op_type == OP_PADANY) {
5746 o->op_type = OP_PADAV;
5747 o->op_ppaddr = PL_ppaddr[OP_PADAV];
5750 else if ((o->op_type == OP_RV2AV || o->op_type == OP_PADAV)
5751 && ckWARN(WARN_DEPRECATED)) {
5752 Perl_warner(aTHX_ packWARN(WARN_DEPRECATED),
5753 "Using an array as a reference is deprecated");
5755 return newUNOP(OP_RV2AV, 0, scalar(o));
5759 Perl_newGVREF(pTHX_ I32 type, OP *o)
5761 if (type == OP_MAPSTART || type == OP_GREPSTART || type == OP_SORT)
5762 return newUNOP(OP_NULL, 0, o);
5763 return ref(newUNOP(OP_RV2GV, OPf_REF, o), type);
5767 Perl_newHVREF(pTHX_ OP *o)
5770 if (o->op_type == OP_PADANY) {
5771 o->op_type = OP_PADHV;
5772 o->op_ppaddr = PL_ppaddr[OP_PADHV];
5775 else if ((o->op_type == OP_RV2HV || o->op_type == OP_PADHV)
5776 && ckWARN(WARN_DEPRECATED)) {
5777 Perl_warner(aTHX_ packWARN(WARN_DEPRECATED),
5778 "Using a hash as a reference is deprecated");
5780 return newUNOP(OP_RV2HV, 0, scalar(o));
5784 Perl_newCVREF(pTHX_ I32 flags, OP *o)
5786 return newUNOP(OP_RV2CV, flags, scalar(o));
5790 Perl_newSVREF(pTHX_ OP *o)
5793 if (o->op_type == OP_PADANY) {
5794 o->op_type = OP_PADSV;
5795 o->op_ppaddr = PL_ppaddr[OP_PADSV];
5798 else if (o->op_type == OP_THREADSV && !(o->op_flags & OPpDONE_SVREF)) {
5799 o->op_flags |= OPpDONE_SVREF;
5802 return newUNOP(OP_RV2SV, 0, scalar(o));
5805 /* Check routines. See the comments at the top of this file for details
5806 * on when these are called */
5809 Perl_ck_anoncode(pTHX_ OP *o)
5811 cSVOPo->op_targ = pad_add_anon(cSVOPo->op_sv, o->op_type);
5813 cSVOPo->op_sv = NULL;
5818 Perl_ck_bitop(pTHX_ OP *o)
5821 #define OP_IS_NUMCOMPARE(op) \
5822 ((op) == OP_LT || (op) == OP_I_LT || \
5823 (op) == OP_GT || (op) == OP_I_GT || \
5824 (op) == OP_LE || (op) == OP_I_LE || \
5825 (op) == OP_GE || (op) == OP_I_GE || \
5826 (op) == OP_EQ || (op) == OP_I_EQ || \
5827 (op) == OP_NE || (op) == OP_I_NE || \
5828 (op) == OP_NCMP || (op) == OP_I_NCMP)
5829 o->op_private = (U8)(PL_hints & HINT_PRIVATE_MASK);
5830 if (!(o->op_flags & OPf_STACKED) /* Not an assignment */
5831 && (o->op_type == OP_BIT_OR
5832 || o->op_type == OP_BIT_AND
5833 || o->op_type == OP_BIT_XOR))
5835 const OP * const left = cBINOPo->op_first;
5836 const OP * const right = left->op_sibling;
5837 if ((OP_IS_NUMCOMPARE(left->op_type) &&
5838 (left->op_flags & OPf_PARENS) == 0) ||
5839 (OP_IS_NUMCOMPARE(right->op_type) &&
5840 (right->op_flags & OPf_PARENS) == 0))
5841 if (ckWARN(WARN_PRECEDENCE))
5842 Perl_warner(aTHX_ packWARN(WARN_PRECEDENCE),
5843 "Possible precedence problem on bitwise %c operator",
5844 o->op_type == OP_BIT_OR ? '|'
5845 : o->op_type == OP_BIT_AND ? '&' : '^'
5852 Perl_ck_concat(pTHX_ OP *o)
5854 const OP * const kid = cUNOPo->op_first;
5855 PERL_UNUSED_CONTEXT;
5856 if (kid->op_type == OP_CONCAT && !(kid->op_private & OPpTARGET_MY) &&
5857 !(kUNOP->op_first->op_flags & OPf_MOD))
5858 o->op_flags |= OPf_STACKED;
5863 Perl_ck_spair(pTHX_ OP *o)
5866 if (o->op_flags & OPf_KIDS) {
5869 const OPCODE type = o->op_type;
5870 o = modkids(ck_fun(o), type);
5871 kid = cUNOPo->op_first;
5872 newop = kUNOP->op_first->op_sibling;
5874 const OPCODE type = newop->op_type;
5875 if (newop->op_sibling || !(PL_opargs[type] & OA_RETSCALAR) ||
5876 type == OP_PADAV || type == OP_PADHV ||
5877 type == OP_RV2AV || type == OP_RV2HV)
5881 op_getmad(kUNOP->op_first,newop,'K');
5883 op_free(kUNOP->op_first);
5885 kUNOP->op_first = newop;
5887 o->op_ppaddr = PL_ppaddr[++o->op_type];
5892 Perl_ck_delete(pTHX_ OP *o)
5896 if (o->op_flags & OPf_KIDS) {
5897 OP * const kid = cUNOPo->op_first;
5898 switch (kid->op_type) {
5900 o->op_flags |= OPf_SPECIAL;
5903 o->op_private |= OPpSLICE;
5906 o->op_flags |= OPf_SPECIAL;
5911 Perl_croak(aTHX_ "%s argument is not a HASH or ARRAY element or slice",
5920 Perl_ck_die(pTHX_ OP *o)
5923 if (VMSISH_HUSHED) o->op_private |= OPpHUSH_VMSISH;
5929 Perl_ck_eof(pTHX_ OP *o)
5933 if (o->op_flags & OPf_KIDS) {
5934 if (cLISTOPo->op_first->op_type == OP_STUB) {
5936 = newUNOP(o->op_type, OPf_SPECIAL, newGVOP(OP_GV, 0, PL_argvgv));
5938 op_getmad(o,newop,'O');
5950 Perl_ck_eval(pTHX_ OP *o)
5953 PL_hints |= HINT_BLOCK_SCOPE;
5954 if (o->op_flags & OPf_KIDS) {
5955 SVOP * const kid = (SVOP*)cUNOPo->op_first;
5958 o->op_flags &= ~OPf_KIDS;
5961 else if (kid->op_type == OP_LINESEQ || kid->op_type == OP_STUB) {
5967 cUNOPo->op_first = 0;
5972 NewOp(1101, enter, 1, LOGOP);
5973 enter->op_type = OP_ENTERTRY;
5974 enter->op_ppaddr = PL_ppaddr[OP_ENTERTRY];
5975 enter->op_private = 0;
5977 /* establish postfix order */
5978 enter->op_next = (OP*)enter;
5980 o = prepend_elem(OP_LINESEQ, (OP*)enter, (OP*)kid);
5981 o->op_type = OP_LEAVETRY;
5982 o->op_ppaddr = PL_ppaddr[OP_LEAVETRY];
5983 enter->op_other = o;
5984 op_getmad(oldo,o,'O');
5998 o = newUNOP(OP_ENTEREVAL, 0, newDEFSVOP());
5999 op_getmad(oldo,o,'O');
6001 o->op_targ = (PADOFFSET)PL_hints;
6002 if ((PL_hints & HINT_LOCALIZE_HH) != 0 && GvHV(PL_hintgv)) {
6003 /* Store a copy of %^H that pp_entereval can pick up */
6004 OP *hhop = newSVOP(OP_CONST, 0,
6005 (SV*)Perl_hv_copy_hints_hv(aTHX_ GvHV(PL_hintgv)));
6006 cUNOPo->op_first->op_sibling = hhop;
6007 o->op_private |= OPpEVAL_HAS_HH;
6013 Perl_ck_exit(pTHX_ OP *o)
6016 HV * const table = GvHV(PL_hintgv);
6018 SV * const * const svp = hv_fetchs(table, "vmsish_exit", FALSE);
6019 if (svp && *svp && SvTRUE(*svp))
6020 o->op_private |= OPpEXIT_VMSISH;
6022 if (VMSISH_HUSHED) o->op_private |= OPpHUSH_VMSISH;
6028 Perl_ck_exec(pTHX_ OP *o)
6030 if (o->op_flags & OPf_STACKED) {
6033 kid = cUNOPo->op_first->op_sibling;
6034 if (kid->op_type == OP_RV2GV)
6043 Perl_ck_exists(pTHX_ OP *o)
6047 if (o->op_flags & OPf_KIDS) {
6048 OP * const kid = cUNOPo->op_first;
6049 if (kid->op_type == OP_ENTERSUB) {
6050 (void) ref(kid, o->op_type);
6051 if (kid->op_type != OP_RV2CV && !PL_error_count)
6052 Perl_croak(aTHX_ "%s argument is not a subroutine name",
6054 o->op_private |= OPpEXISTS_SUB;
6056 else if (kid->op_type == OP_AELEM)
6057 o->op_flags |= OPf_SPECIAL;
6058 else if (kid->op_type != OP_HELEM)
6059 Perl_croak(aTHX_ "%s argument is not a HASH or ARRAY element",
6067 Perl_ck_rvconst(pTHX_ register OP *o)
6070 SVOP * const kid = (SVOP*)cUNOPo->op_first;
6072 o->op_private |= (PL_hints & HINT_STRICT_REFS);
6073 if (o->op_type == OP_RV2CV)
6074 o->op_private &= ~1;
6076 if (kid->op_type == OP_CONST) {
6079 SV * const kidsv = kid->op_sv;
6081 /* Is it a constant from cv_const_sv()? */
6082 if (SvROK(kidsv) && SvREADONLY(kidsv)) {
6083 SV * const rsv = SvRV(kidsv);
6084 const int svtype = SvTYPE(rsv);
6085 const char *badtype = NULL;
6087 switch (o->op_type) {
6089 if (svtype > SVt_PVMG)
6090 badtype = "a SCALAR";
6093 if (svtype != SVt_PVAV)
6094 badtype = "an ARRAY";
6097 if (svtype != SVt_PVHV)
6101 if (svtype != SVt_PVCV)
6106 Perl_croak(aTHX_ "Constant is not %s reference", badtype);
6109 else if ((o->op_type == OP_RV2HV || o->op_type == OP_RV2SV) &&
6110 (PL_hints & HINT_STRICT_REFS) && SvPOK(kidsv)) {
6111 /* If this is an access to a stash, disable "strict refs", because
6112 * stashes aren't auto-vivified at compile-time (unless we store
6113 * symbols in them), and we don't want to produce a run-time
6114 * stricture error when auto-vivifying the stash. */
6115 const char *s = SvPV_nolen(kidsv);
6116 const STRLEN l = SvCUR(kidsv);
6117 if (l > 1 && s[l-1] == ':' && s[l-2] == ':')
6118 o->op_private &= ~HINT_STRICT_REFS;
6120 if ((o->op_private & HINT_STRICT_REFS) && (kid->op_private & OPpCONST_BARE)) {
6121 const char *badthing;
6122 switch (o->op_type) {
6124 badthing = "a SCALAR";
6127 badthing = "an ARRAY";
6130 badthing = "a HASH";
6138 "Can't use bareword (\"%"SVf"\") as %s ref while \"strict refs\" in use",
6139 (void*)kidsv, badthing);
6142 * This is a little tricky. We only want to add the symbol if we
6143 * didn't add it in the lexer. Otherwise we get duplicate strict
6144 * warnings. But if we didn't add it in the lexer, we must at
6145 * least pretend like we wanted to add it even if it existed before,
6146 * or we get possible typo warnings. OPpCONST_ENTERED says
6147 * whether the lexer already added THIS instance of this symbol.
6149 iscv = (o->op_type == OP_RV2CV) * 2;
6151 gv = gv_fetchsv(kidsv,
6152 iscv | !(kid->op_private & OPpCONST_ENTERED),
6155 : o->op_type == OP_RV2SV
6157 : o->op_type == OP_RV2AV
6159 : o->op_type == OP_RV2HV
6162 } while (!gv && !(kid->op_private & OPpCONST_ENTERED) && !iscv++);
6164 kid->op_type = OP_GV;
6165 SvREFCNT_dec(kid->op_sv);
6167 /* XXX hack: dependence on sizeof(PADOP) <= sizeof(SVOP) */
6168 kPADOP->op_padix = pad_alloc(OP_GV, SVs_PADTMP);
6169 SvREFCNT_dec(PAD_SVl(kPADOP->op_padix));
6171 PAD_SETSV(kPADOP->op_padix, (SV*) SvREFCNT_inc_simple_NN(gv));
6173 kid->op_sv = SvREFCNT_inc_simple_NN(gv);
6175 kid->op_private = 0;
6176 kid->op_ppaddr = PL_ppaddr[OP_GV];
6183 Perl_ck_ftst(pTHX_ OP *o)
6186 const I32 type = o->op_type;
6188 if (o->op_flags & OPf_REF) {
6191 else if (o->op_flags & OPf_KIDS && cUNOPo->op_first->op_type != OP_STUB) {
6192 SVOP * const kid = (SVOP*)cUNOPo->op_first;
6193 const OPCODE kidtype = kid->op_type;
6195 if (kidtype == OP_CONST && (kid->op_private & OPpCONST_BARE)) {
6196 OP * const newop = newGVOP(type, OPf_REF,
6197 gv_fetchsv(kid->op_sv, GV_ADD, SVt_PVIO));
6199 op_getmad(o,newop,'O');
6205 if ((PL_hints & HINT_FILETEST_ACCESS) && OP_IS_FILETEST_ACCESS(o))
6206 o->op_private |= OPpFT_ACCESS;
6207 if (PL_check[kidtype] == MEMBER_TO_FPTR(Perl_ck_ftst)
6208 && kidtype != OP_STAT && kidtype != OP_LSTAT)
6209 o->op_private |= OPpFT_STACKED;
6217 if (type == OP_FTTTY)
6218 o = newGVOP(type, OPf_REF, PL_stdingv);
6220 o = newUNOP(type, 0, newDEFSVOP());
6221 op_getmad(oldo,o,'O');
6227 Perl_ck_fun(pTHX_ OP *o)
6230 const int type = o->op_type;
6231 register I32 oa = PL_opargs[type] >> OASHIFT;
6233 if (o->op_flags & OPf_STACKED) {
6234 if ((oa & OA_OPTIONAL) && (oa >> 4) && !((oa >> 4) & OA_OPTIONAL))
6237 return no_fh_allowed(o);
6240 if (o->op_flags & OPf_KIDS) {
6241 OP **tokid = &cLISTOPo->op_first;
6242 register OP *kid = cLISTOPo->op_first;
6246 if (kid->op_type == OP_PUSHMARK ||
6247 (kid->op_type == OP_NULL && kid->op_targ == OP_PUSHMARK))
6249 tokid = &kid->op_sibling;
6250 kid = kid->op_sibling;
6252 if (!kid && PL_opargs[type] & OA_DEFGV)
6253 *tokid = kid = newDEFSVOP();
6257 sibl = kid->op_sibling;
6259 if (!sibl && kid->op_type == OP_STUB) {
6266 /* list seen where single (scalar) arg expected? */
6267 if (numargs == 1 && !(oa >> 4)
6268 && kid->op_type == OP_LIST && type != OP_SCALAR)
6270 return too_many_arguments(o,PL_op_desc[type]);
6283 if ((type == OP_PUSH || type == OP_UNSHIFT)
6284 && !kid->op_sibling && ckWARN(WARN_SYNTAX))
6285 Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
6286 "Useless use of %s with no values",
6289 if (kid->op_type == OP_CONST &&
6290 (kid->op_private & OPpCONST_BARE))
6292 OP * const newop = newAVREF(newGVOP(OP_GV, 0,
6293 gv_fetchsv(((SVOP*)kid)->op_sv, GV_ADD, SVt_PVAV) ));
6294 if (ckWARN2(WARN_DEPRECATED, WARN_SYNTAX))
6295 Perl_warner(aTHX_ packWARN2(WARN_DEPRECATED, WARN_SYNTAX),
6296 "Array @%"SVf" missing the @ in argument %"IVdf" of %s()",
6297 (void*)((SVOP*)kid)->op_sv, (IV)numargs, PL_op_desc[type]);
6299 op_getmad(kid,newop,'K');
6304 kid->op_sibling = sibl;
6307 else if (kid->op_type != OP_RV2AV && kid->op_type != OP_PADAV)
6308 bad_type(numargs, "array", PL_op_desc[type], kid);
6312 if (kid->op_type == OP_CONST &&
6313 (kid->op_private & OPpCONST_BARE))
6315 OP * const newop = newHVREF(newGVOP(OP_GV, 0,
6316 gv_fetchsv(((SVOP*)kid)->op_sv, GV_ADD, SVt_PVHV) ));
6317 if (ckWARN2(WARN_DEPRECATED, WARN_SYNTAX))
6318 Perl_warner(aTHX_ packWARN2(WARN_DEPRECATED, WARN_SYNTAX),
6319 "Hash %%%"SVf" missing the %% in argument %"IVdf" of %s()",
6320 (void*)((SVOP*)kid)->op_sv, (IV)numargs, PL_op_desc[type]);
6322 op_getmad(kid,newop,'K');
6327 kid->op_sibling = sibl;
6330 else if (kid->op_type != OP_RV2HV && kid->op_type != OP_PADHV)
6331 bad_type(numargs, "hash", PL_op_desc[type], kid);
6336 OP * const newop = newUNOP(OP_NULL, 0, kid);
6337 kid->op_sibling = 0;
6339 newop->op_next = newop;
6341 kid->op_sibling = sibl;
6346 if (kid->op_type != OP_GV && kid->op_type != OP_RV2GV) {
6347 if (kid->op_type == OP_CONST &&
6348 (kid->op_private & OPpCONST_BARE))
6350 OP * const newop = newGVOP(OP_GV, 0,
6351 gv_fetchsv(((SVOP*)kid)->op_sv, GV_ADD, SVt_PVIO));
6352 if (!(o->op_private & 1) && /* if not unop */
6353 kid == cLISTOPo->op_last)
6354 cLISTOPo->op_last = newop;
6356 op_getmad(kid,newop,'K');
6362 else if (kid->op_type == OP_READLINE) {
6363 /* neophyte patrol: open(<FH>), close(<FH>) etc. */
6364 bad_type(numargs, "HANDLE", OP_DESC(o), kid);
6367 I32 flags = OPf_SPECIAL;
6371 /* is this op a FH constructor? */
6372 if (is_handle_constructor(o,numargs)) {
6373 const char *name = NULL;
6377 /* Set a flag to tell rv2gv to vivify
6378 * need to "prove" flag does not mean something
6379 * else already - NI-S 1999/05/07
6382 if (kid->op_type == OP_PADSV) {
6383 name = PAD_COMPNAME_PV(kid->op_targ);
6384 /* SvCUR of a pad namesv can't be trusted
6385 * (see PL_generation), so calc its length
6391 else if (kid->op_type == OP_RV2SV
6392 && kUNOP->op_first->op_type == OP_GV)
6394 GV * const gv = cGVOPx_gv(kUNOP->op_first);
6396 len = GvNAMELEN(gv);
6398 else if (kid->op_type == OP_AELEM
6399 || kid->op_type == OP_HELEM)
6402 OP *op = ((BINOP*)kid)->op_first;
6406 const char * const a =
6407 kid->op_type == OP_AELEM ?
6409 if (((op->op_type == OP_RV2AV) ||
6410 (op->op_type == OP_RV2HV)) &&
6411 (firstop = ((UNOP*)op)->op_first) &&
6412 (firstop->op_type == OP_GV)) {
6413 /* packagevar $a[] or $h{} */
6414 GV * const gv = cGVOPx_gv(firstop);
6422 else if (op->op_type == OP_PADAV
6423 || op->op_type == OP_PADHV) {
6424 /* lexicalvar $a[] or $h{} */
6425 const char * const padname =
6426 PAD_COMPNAME_PV(op->op_targ);
6435 name = SvPV_const(tmpstr, len);
6440 name = "__ANONIO__";
6447 targ = pad_alloc(OP_RV2GV, SVs_PADTMP);
6448 namesv = PAD_SVl(targ);
6449 SvUPGRADE(namesv, SVt_PV);
6451 sv_setpvn(namesv, "$", 1);
6452 sv_catpvn(namesv, name, len);
6455 kid->op_sibling = 0;
6456 kid = newUNOP(OP_RV2GV, flags, scalar(kid));
6457 kid->op_targ = targ;
6458 kid->op_private |= priv;
6460 kid->op_sibling = sibl;
6466 mod(scalar(kid), type);
6470 tokid = &kid->op_sibling;
6471 kid = kid->op_sibling;
6474 if (kid && kid->op_type != OP_STUB)
6475 return too_many_arguments(o,OP_DESC(o));
6476 o->op_private |= numargs;
6478 /* FIXME - should the numargs move as for the PERL_MAD case? */
6479 o->op_private |= numargs;
6481 return too_many_arguments(o,OP_DESC(o));
6485 else if (PL_opargs[type] & OA_DEFGV) {
6487 OP *newop = newUNOP(type, 0, newDEFSVOP());
6488 op_getmad(o,newop,'O');
6491 /* Ordering of these two is important to keep f_map.t passing. */
6493 return newUNOP(type, 0, newDEFSVOP());
6498 while (oa & OA_OPTIONAL)
6500 if (oa && oa != OA_LIST)
6501 return too_few_arguments(o,OP_DESC(o));
6507 Perl_ck_glob(pTHX_ OP *o)
6513 if ((o->op_flags & OPf_KIDS) && !cLISTOPo->op_first->op_sibling)
6514 append_elem(OP_GLOB, o, newDEFSVOP());
6516 if (!((gv = gv_fetchpvs("glob", GV_NOTQUAL, SVt_PVCV))
6517 && GvCVu(gv) && GvIMPORTED_CV(gv)))
6519 gv = gv_fetchpvs("CORE::GLOBAL::glob", 0, SVt_PVCV);
6522 #if !defined(PERL_EXTERNAL_GLOB)
6523 /* XXX this can be tightened up and made more failsafe. */
6524 if (!(gv && GvCVu(gv) && GvIMPORTED_CV(gv))) {
6527 Perl_load_module(aTHX_ PERL_LOADMOD_NOIMPORT,
6528 newSVpvs("File::Glob"), NULL, NULL, NULL);
6529 gv = gv_fetchpvs("CORE::GLOBAL::glob", 0, SVt_PVCV);
6530 glob_gv = gv_fetchpvs("File::Glob::csh_glob", 0, SVt_PVCV);
6531 GvCV(gv) = GvCV(glob_gv);
6532 SvREFCNT_inc_void((SV*)GvCV(gv));
6533 GvIMPORTED_CV_on(gv);
6536 #endif /* PERL_EXTERNAL_GLOB */
6538 if (gv && GvCVu(gv) && GvIMPORTED_CV(gv)) {
6539 append_elem(OP_GLOB, o,
6540 newSVOP(OP_CONST, 0, newSViv(PL_glob_index++)));
6541 o->op_type = OP_LIST;
6542 o->op_ppaddr = PL_ppaddr[OP_LIST];
6543 cLISTOPo->op_first->op_type = OP_PUSHMARK;
6544 cLISTOPo->op_first->op_ppaddr = PL_ppaddr[OP_PUSHMARK];
6545 cLISTOPo->op_first->op_targ = 0;
6546 o = newUNOP(OP_ENTERSUB, OPf_STACKED,
6547 append_elem(OP_LIST, o,
6548 scalar(newUNOP(OP_RV2CV, 0,
6549 newGVOP(OP_GV, 0, gv)))));
6550 o = newUNOP(OP_NULL, 0, ck_subr(o));
6551 o->op_targ = OP_GLOB; /* hint at what it used to be */
6554 gv = newGVgen("main");
6556 append_elem(OP_GLOB, o, newGVOP(OP_GV, 0, gv));
6562 Perl_ck_grep(pTHX_ OP *o)
6567 const OPCODE type = o->op_type == OP_GREPSTART ? OP_GREPWHILE : OP_MAPWHILE;
6570 o->op_ppaddr = PL_ppaddr[OP_GREPSTART];
6571 /* don't allocate gwop here, as we may leak it if PL_error_count > 0 */
6573 if (o->op_flags & OPf_STACKED) {
6576 kid = cLISTOPo->op_first->op_sibling;
6577 if (!cUNOPx(kid)->op_next)
6578 Perl_croak(aTHX_ "panic: ck_grep");
6579 for (k = cUNOPx(kid)->op_first; k; k = k->op_next) {
6582 NewOp(1101, gwop, 1, LOGOP);
6583 kid->op_next = (OP*)gwop;
6584 o->op_flags &= ~OPf_STACKED;
6586 kid = cLISTOPo->op_first->op_sibling;
6587 if (type == OP_MAPWHILE)
6594 kid = cLISTOPo->op_first->op_sibling;
6595 if (kid->op_type != OP_NULL)
6596 Perl_croak(aTHX_ "panic: ck_grep");
6597 kid = kUNOP->op_first;
6600 NewOp(1101, gwop, 1, LOGOP);
6601 gwop->op_type = type;
6602 gwop->op_ppaddr = PL_ppaddr[type];
6603 gwop->op_first = listkids(o);
6604 gwop->op_flags |= OPf_KIDS;
6605 gwop->op_other = LINKLIST(kid);
6606 kid->op_next = (OP*)gwop;
6607 offset = pad_findmy("$_");
6608 if (offset == NOT_IN_PAD || PAD_COMPNAME_FLAGS_isOUR(offset)) {
6609 o->op_private = gwop->op_private = 0;
6610 gwop->op_targ = pad_alloc(type, SVs_PADTMP);
6613 o->op_private = gwop->op_private = OPpGREP_LEX;
6614 gwop->op_targ = o->op_targ = offset;
6617 kid = cLISTOPo->op_first->op_sibling;
6618 if (!kid || !kid->op_sibling)
6619 return too_few_arguments(o,OP_DESC(o));
6620 for (kid = kid->op_sibling; kid; kid = kid->op_sibling)
6621 mod(kid, OP_GREPSTART);
6627 Perl_ck_index(pTHX_ OP *o)
6629 if (o->op_flags & OPf_KIDS) {
6630 OP *kid = cLISTOPo->op_first->op_sibling; /* get past pushmark */
6632 kid = kid->op_sibling; /* get past "big" */
6633 if (kid && kid->op_type == OP_CONST)
6634 fbm_compile(((SVOP*)kid)->op_sv, 0);
6640 Perl_ck_lengthconst(pTHX_ OP *o)
6642 /* XXX length optimization goes here */
6647 Perl_ck_lfun(pTHX_ OP *o)
6649 const OPCODE type = o->op_type;
6650 return modkids(ck_fun(o), type);
6654 Perl_ck_defined(pTHX_ OP *o) /* 19990527 MJD */
6656 if ((o->op_flags & OPf_KIDS) && ckWARN2(WARN_DEPRECATED, WARN_SYNTAX)) {
6657 switch (cUNOPo->op_first->op_type) {
6659 /* This is needed for
6660 if (defined %stash::)
6661 to work. Do not break Tk.
6663 break; /* Globals via GV can be undef */
6665 case OP_AASSIGN: /* Is this a good idea? */
6666 Perl_warner(aTHX_ packWARN2(WARN_DEPRECATED, WARN_SYNTAX),
6667 "defined(@array) is deprecated");
6668 Perl_warner(aTHX_ packWARN2(WARN_DEPRECATED, WARN_SYNTAX),
6669 "\t(Maybe you should just omit the defined()?)\n");
6672 /* This is needed for
6673 if (defined %stash::)
6674 to work. Do not break Tk.
6676 break; /* Globals via GV can be undef */
6678 Perl_warner(aTHX_ packWARN2(WARN_DEPRECATED, WARN_SYNTAX),
6679 "defined(%%hash) is deprecated");
6680 Perl_warner(aTHX_ packWARN2(WARN_DEPRECATED, WARN_SYNTAX),
6681 "\t(Maybe you should just omit the defined()?)\n");
6692 Perl_ck_rfun(pTHX_ OP *o)
6694 const OPCODE type = o->op_type;
6695 return refkids(ck_fun(o), type);
6699 Perl_ck_listiob(pTHX_ OP *o)
6703 kid = cLISTOPo->op_first;
6706 kid = cLISTOPo->op_first;
6708 if (kid->op_type == OP_PUSHMARK)
6709 kid = kid->op_sibling;
6710 if (kid && o->op_flags & OPf_STACKED)
6711 kid = kid->op_sibling;
6712 else if (kid && !kid->op_sibling) { /* print HANDLE; */
6713 if (kid->op_type == OP_CONST && kid->op_private & OPpCONST_BARE) {
6714 o->op_flags |= OPf_STACKED; /* make it a filehandle */
6715 kid = newUNOP(OP_RV2GV, OPf_REF, scalar(kid));
6716 cLISTOPo->op_first->op_sibling = kid;
6717 cLISTOPo->op_last = kid;
6718 kid = kid->op_sibling;
6723 append_elem(o->op_type, o, newDEFSVOP());
6729 Perl_ck_say(pTHX_ OP *o)
6732 o->op_type = OP_PRINT;
6733 cLISTOPo->op_last = cLISTOPo->op_last->op_sibling
6734 = newSVOP(OP_CONST, 0, newSVpvs("\n"));
6739 Perl_ck_smartmatch(pTHX_ OP *o)
6742 if (0 == (o->op_flags & OPf_SPECIAL)) {
6743 OP *first = cBINOPo->op_first;
6744 OP *second = first->op_sibling;
6746 /* Implicitly take a reference to an array or hash */
6747 first->op_sibling = NULL;
6748 first = cBINOPo->op_first = ref_array_or_hash(first);
6749 second = first->op_sibling = ref_array_or_hash(second);
6751 /* Implicitly take a reference to a regular expression */
6752 if (first->op_type == OP_MATCH) {
6753 first->op_type = OP_QR;
6754 first->op_ppaddr = PL_ppaddr[OP_QR];
6756 if (second->op_type == OP_MATCH) {
6757 second->op_type = OP_QR;
6758 second->op_ppaddr = PL_ppaddr[OP_QR];
6767 Perl_ck_sassign(pTHX_ OP *o)
6769 OP * const kid = cLISTOPo->op_first;
6770 /* has a disposable target? */
6771 if ((PL_opargs[kid->op_type] & OA_TARGLEX)
6772 && !(kid->op_flags & OPf_STACKED)
6773 /* Cannot steal the second time! */
6774 && !(kid->op_private & OPpTARGET_MY))
6776 OP * const kkid = kid->op_sibling;
6778 /* Can just relocate the target. */
6779 if (kkid && kkid->op_type == OP_PADSV
6780 && !(kkid->op_private & OPpLVAL_INTRO))
6782 kid->op_targ = kkid->op_targ;
6784 /* Now we do not need PADSV and SASSIGN. */
6785 kid->op_sibling = o->op_sibling; /* NULL */
6786 cLISTOPo->op_first = NULL;
6788 op_getmad(o,kid,'O');
6789 op_getmad(kkid,kid,'M');
6794 kid->op_private |= OPpTARGET_MY; /* Used for context settings */
6798 if (kid->op_sibling) {
6799 OP *kkid = kid->op_sibling;
6800 if (kkid->op_type == OP_PADSV
6801 && (kkid->op_private & OPpLVAL_INTRO)
6802 && SvPAD_STATE(*av_fetch(PL_comppad_name, kkid->op_targ, FALSE))) {
6803 o->op_private |= OPpASSIGN_STATE;
6804 /* hijacking PADSTALE for uninitialized state variables */
6805 SvPADSTALE_on(PAD_SVl(kkid->op_targ));
6812 Perl_ck_match(pTHX_ OP *o)
6815 if (o->op_type != OP_QR && PL_compcv) {
6816 const PADOFFSET offset = pad_findmy("$_");
6817 if (offset != NOT_IN_PAD && !(PAD_COMPNAME_FLAGS_isOUR(offset))) {
6818 o->op_targ = offset;
6819 o->op_private |= OPpTARGET_MY;
6822 if (o->op_type == OP_MATCH || o->op_type == OP_QR)
6823 o->op_private |= OPpRUNTIME;
6828 Perl_ck_method(pTHX_ OP *o)
6830 OP * const kid = cUNOPo->op_first;
6831 if (kid->op_type == OP_CONST) {
6832 SV* sv = kSVOP->op_sv;
6833 const char * const method = SvPVX_const(sv);
6834 if (!(strchr(method, ':') || strchr(method, '\''))) {
6836 if (!SvREADONLY(sv) || !SvFAKE(sv)) {
6837 sv = newSVpvn_share(method, SvCUR(sv), 0);
6840 kSVOP->op_sv = NULL;
6842 cmop = newSVOP(OP_METHOD_NAMED, 0, sv);
6844 op_getmad(o,cmop,'O');
6855 Perl_ck_null(pTHX_ OP *o)
6857 PERL_UNUSED_CONTEXT;
6862 Perl_ck_open(pTHX_ OP *o)
6865 HV * const table = GvHV(PL_hintgv);
6867 SV **svp = hv_fetchs(table, "open_IN", FALSE);
6869 const I32 mode = mode_from_discipline(*svp);
6870 if (mode & O_BINARY)
6871 o->op_private |= OPpOPEN_IN_RAW;
6872 else if (mode & O_TEXT)
6873 o->op_private |= OPpOPEN_IN_CRLF;
6876 svp = hv_fetchs(table, "open_OUT", FALSE);
6878 const I32 mode = mode_from_discipline(*svp);
6879 if (mode & O_BINARY)
6880 o->op_private |= OPpOPEN_OUT_RAW;
6881 else if (mode & O_TEXT)
6882 o->op_private |= OPpOPEN_OUT_CRLF;
6885 if (o->op_type == OP_BACKTICK)
6888 /* In case of three-arg dup open remove strictness
6889 * from the last arg if it is a bareword. */
6890 OP * const first = cLISTOPx(o)->op_first; /* The pushmark. */
6891 OP * const last = cLISTOPx(o)->op_last; /* The bareword. */
6895 if ((last->op_type == OP_CONST) && /* The bareword. */
6896 (last->op_private & OPpCONST_BARE) &&
6897 (last->op_private & OPpCONST_STRICT) &&
6898 (oa = first->op_sibling) && /* The fh. */
6899 (oa = oa->op_sibling) && /* The mode. */
6900 (oa->op_type == OP_CONST) &&
6901 SvPOK(((SVOP*)oa)->op_sv) &&
6902 (mode = SvPVX_const(((SVOP*)oa)->op_sv)) &&
6903 mode[0] == '>' && mode[1] == '&' && /* A dup open. */
6904 (last == oa->op_sibling)) /* The bareword. */
6905 last->op_private &= ~OPpCONST_STRICT;
6911 Perl_ck_repeat(pTHX_ OP *o)
6913 if (cBINOPo->op_first->op_flags & OPf_PARENS) {
6914 o->op_private |= OPpREPEAT_DOLIST;
6915 cBINOPo->op_first = force_list(cBINOPo->op_first);
6923 Perl_ck_require(pTHX_ OP *o)
6928 if (o->op_flags & OPf_KIDS) { /* Shall we supply missing .pm? */
6929 SVOP * const kid = (SVOP*)cUNOPo->op_first;
6931 if (kid->op_type == OP_CONST && (kid->op_private & OPpCONST_BARE)) {
6932 SV * const sv = kid->op_sv;
6933 U32 was_readonly = SvREADONLY(sv);
6938 sv_force_normal_flags(sv, 0);
6939 assert(!SvREADONLY(sv));
6946 for (s = SvPVX(sv); *s; s++) {
6947 if (*s == ':' && s[1] == ':') {
6948 const STRLEN len = strlen(s+2)+1;
6950 Move(s+2, s+1, len, char);
6951 SvCUR_set(sv, SvCUR(sv) - 1);
6954 sv_catpvs(sv, ".pm");
6955 SvFLAGS(sv) |= was_readonly;
6959 if (!(o->op_flags & OPf_SPECIAL)) { /* Wasn't written as CORE::require */
6960 /* handle override, if any */
6961 gv = gv_fetchpvs("require", GV_NOTQUAL, SVt_PVCV);
6962 if (!(gv && GvCVu(gv) && GvIMPORTED_CV(gv))) {
6963 GV * const * const gvp = (GV**)hv_fetchs(PL_globalstash, "require", FALSE);
6964 gv = gvp ? *gvp : NULL;
6968 if (gv && GvCVu(gv) && GvIMPORTED_CV(gv)) {
6969 OP * const kid = cUNOPo->op_first;
6972 cUNOPo->op_first = 0;
6976 newop = ck_subr(newUNOP(OP_ENTERSUB, OPf_STACKED,
6977 append_elem(OP_LIST, kid,
6978 scalar(newUNOP(OP_RV2CV, 0,
6981 op_getmad(o,newop,'O');
6989 Perl_ck_return(pTHX_ OP *o)
6992 if (CvLVALUE(PL_compcv)) {
6994 for (kid = cLISTOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
6995 mod(kid, OP_LEAVESUBLV);
7001 Perl_ck_select(pTHX_ OP *o)
7005 if (o->op_flags & OPf_KIDS) {
7006 kid = cLISTOPo->op_first->op_sibling; /* get past pushmark */
7007 if (kid && kid->op_sibling) {
7008 o->op_type = OP_SSELECT;
7009 o->op_ppaddr = PL_ppaddr[OP_SSELECT];
7011 return fold_constants(o);
7015 kid = cLISTOPo->op_first->op_sibling; /* get past pushmark */
7016 if (kid && kid->op_type == OP_RV2GV)
7017 kid->op_private &= ~HINT_STRICT_REFS;
7022 Perl_ck_shift(pTHX_ OP *o)
7025 const I32 type = o->op_type;
7027 if (!(o->op_flags & OPf_KIDS)) {
7029 /* FIXME - this can be refactored to reduce code in #ifdefs */
7031 OP * const oldo = o;
7035 argop = newUNOP(OP_RV2AV, 0,
7036 scalar(newGVOP(OP_GV, 0, CvUNIQUE(PL_compcv) ? PL_argvgv : PL_defgv)));
7038 o = newUNOP(type, 0, scalar(argop));
7039 op_getmad(oldo,o,'O');
7042 return newUNOP(type, 0, scalar(argop));
7045 return scalar(modkids(ck_fun(o), type));
7049 Perl_ck_sort(pTHX_ OP *o)
7054 if (o->op_type == OP_SORT && (PL_hints & HINT_LOCALIZE_HH) != 0) {
7055 HV * const hinthv = GvHV(PL_hintgv);
7057 SV ** const svp = hv_fetchs(hinthv, "sort", FALSE);
7059 const I32 sorthints = (I32)SvIV(*svp);
7060 if ((sorthints & HINT_SORT_QUICKSORT) != 0)
7061 o->op_private |= OPpSORT_QSORT;
7062 if ((sorthints & HINT_SORT_STABLE) != 0)
7063 o->op_private |= OPpSORT_STABLE;
7068 if (o->op_type == OP_SORT && o->op_flags & OPf_STACKED)
7070 firstkid = cLISTOPo->op_first->op_sibling; /* get past pushmark */
7071 if (o->op_flags & OPf_STACKED) { /* may have been cleared */
7073 OP *kid = cUNOPx(firstkid)->op_first; /* get past null */
7075 if (kid->op_type == OP_SCOPE || kid->op_type == OP_LEAVE) {
7077 if (kid->op_type == OP_SCOPE) {
7081 else if (kid->op_type == OP_LEAVE) {
7082 if (o->op_type == OP_SORT) {
7083 op_null(kid); /* wipe out leave */
7086 for (k = kLISTOP->op_first->op_next; k; k = k->op_next) {
7087 if (k->op_next == kid)
7089 /* don't descend into loops */
7090 else if (k->op_type == OP_ENTERLOOP
7091 || k->op_type == OP_ENTERITER)
7093 k = cLOOPx(k)->op_lastop;
7098 kid->op_next = 0; /* just disconnect the leave */
7099 k = kLISTOP->op_first;
7104 if (o->op_type == OP_SORT) {
7105 /* provide scalar context for comparison function/block */
7111 o->op_flags |= OPf_SPECIAL;
7113 else if (kid->op_type == OP_RV2SV || kid->op_type == OP_PADSV)
7116 firstkid = firstkid->op_sibling;
7119 /* provide list context for arguments */
7120 if (o->op_type == OP_SORT)
7127 S_simplify_sort(pTHX_ OP *o)
7130 register OP *kid = cLISTOPo->op_first->op_sibling; /* get past pushmark */
7135 if (!(o->op_flags & OPf_STACKED))
7137 GvMULTI_on(gv_fetchpvs("a", GV_ADD|GV_NOTQUAL, SVt_PV));
7138 GvMULTI_on(gv_fetchpvs("b", GV_ADD|GV_NOTQUAL, SVt_PV));
7139 kid = kUNOP->op_first; /* get past null */
7140 if (kid->op_type != OP_SCOPE)
7142 kid = kLISTOP->op_last; /* get past scope */
7143 switch(kid->op_type) {
7151 k = kid; /* remember this node*/
7152 if (kBINOP->op_first->op_type != OP_RV2SV)
7154 kid = kBINOP->op_first; /* get past cmp */
7155 if (kUNOP->op_first->op_type != OP_GV)
7157 kid = kUNOP->op_first; /* get past rv2sv */
7159 if (GvSTASH(gv) != PL_curstash)
7161 gvname = GvNAME(gv);
7162 if (*gvname == 'a' && gvname[1] == '\0')
7164 else if (*gvname == 'b' && gvname[1] == '\0')
7169 kid = k; /* back to cmp */
7170 if (kBINOP->op_last->op_type != OP_RV2SV)
7172 kid = kBINOP->op_last; /* down to 2nd arg */
7173 if (kUNOP->op_first->op_type != OP_GV)
7175 kid = kUNOP->op_first; /* get past rv2sv */
7177 if (GvSTASH(gv) != PL_curstash)
7179 gvname = GvNAME(gv);
7181 ? !(*gvname == 'a' && gvname[1] == '\0')
7182 : !(*gvname == 'b' && gvname[1] == '\0'))
7184 o->op_flags &= ~(OPf_STACKED | OPf_SPECIAL);
7186 o->op_private |= OPpSORT_DESCEND;
7187 if (k->op_type == OP_NCMP)
7188 o->op_private |= OPpSORT_NUMERIC;
7189 if (k->op_type == OP_I_NCMP)
7190 o->op_private |= OPpSORT_NUMERIC | OPpSORT_INTEGER;
7191 kid = cLISTOPo->op_first->op_sibling;
7192 cLISTOPo->op_first->op_sibling = kid->op_sibling; /* bypass old block */
7194 op_getmad(kid,o,'S'); /* then delete it */
7196 op_free(kid); /* then delete it */
7201 Perl_ck_split(pTHX_ OP *o)
7206 if (o->op_flags & OPf_STACKED)
7207 return no_fh_allowed(o);
7209 kid = cLISTOPo->op_first;
7210 if (kid->op_type != OP_NULL)
7211 Perl_croak(aTHX_ "panic: ck_split");
7212 kid = kid->op_sibling;
7213 op_free(cLISTOPo->op_first);
7214 cLISTOPo->op_first = kid;
7216 cLISTOPo->op_first = kid = newSVOP(OP_CONST, 0, newSVpvs(" "));
7217 cLISTOPo->op_last = kid; /* There was only one element previously */
7220 if (kid->op_type != OP_MATCH || kid->op_flags & OPf_STACKED) {
7221 OP * const sibl = kid->op_sibling;
7222 kid->op_sibling = 0;
7223 kid = pmruntime( newPMOP(OP_MATCH, OPf_SPECIAL), kid, 0);
7224 if (cLISTOPo->op_first == cLISTOPo->op_last)
7225 cLISTOPo->op_last = kid;
7226 cLISTOPo->op_first = kid;
7227 kid->op_sibling = sibl;
7230 kid->op_type = OP_PUSHRE;
7231 kid->op_ppaddr = PL_ppaddr[OP_PUSHRE];
7233 if (((PMOP *)kid)->op_pmflags & PMf_GLOBAL && ckWARN(WARN_REGEXP)) {
7234 Perl_warner(aTHX_ packWARN(WARN_REGEXP),
7235 "Use of /g modifier is meaningless in split");
7238 if (!kid->op_sibling)
7239 append_elem(OP_SPLIT, o, newDEFSVOP());
7241 kid = kid->op_sibling;
7244 if (!kid->op_sibling)
7245 append_elem(OP_SPLIT, o, newSVOP(OP_CONST, 0, newSViv(0)));
7246 assert(kid->op_sibling);
7248 kid = kid->op_sibling;
7251 if (kid->op_sibling)
7252 return too_many_arguments(o,OP_DESC(o));
7258 Perl_ck_join(pTHX_ OP *o)
7260 const OP * const kid = cLISTOPo->op_first->op_sibling;
7261 if (kid && kid->op_type == OP_MATCH) {
7262 if (ckWARN(WARN_SYNTAX)) {
7263 const REGEXP *re = PM_GETRE(kPMOP);
7264 const char *pmstr = re ? re->precomp : "STRING";
7265 Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
7266 "/%s/ should probably be written as \"%s\"",
7274 Perl_ck_subr(pTHX_ OP *o)
7277 OP *prev = ((cUNOPo->op_first->op_sibling)
7278 ? cUNOPo : ((UNOP*)cUNOPo->op_first))->op_first;
7279 OP *o2 = prev->op_sibling;
7281 const char *proto = NULL;
7282 const char *proto_end = NULL;
7287 I32 contextclass = 0;
7291 o->op_private |= OPpENTERSUB_HASTARG;
7292 for (cvop = o2; cvop->op_sibling; cvop = cvop->op_sibling) ;
7293 if (cvop->op_type == OP_RV2CV) {
7295 o->op_private |= (cvop->op_private & OPpENTERSUB_AMPER);
7296 op_null(cvop); /* disable rv2cv */
7297 tmpop = (SVOP*)((UNOP*)cvop)->op_first;
7298 if (tmpop->op_type == OP_GV && !(o->op_private & OPpENTERSUB_AMPER)) {
7299 GV *gv = cGVOPx_gv(tmpop);
7302 tmpop->op_private |= OPpEARLY_CV;
7306 namegv = CvANON(cv) ? gv : CvGV(cv);
7307 proto = SvPV((SV*)cv, len);
7308 proto_end = proto + len;
7310 if (CvASSERTION(cv)) {
7311 if (PL_hints & HINT_ASSERTING) {
7312 if (PERLDB_ASSERTION && PL_curstash != PL_debstash)
7313 o->op_private |= OPpENTERSUB_DB;
7317 if (!(PL_hints & HINT_ASSERTIONSSEEN) && ckWARN(WARN_ASSERTIONS)) {
7318 Perl_warner(aTHX_ packWARN(WARN_ASSERTIONS),
7319 "Impossible to activate assertion call");
7326 else if (cvop->op_type == OP_METHOD || cvop->op_type == OP_METHOD_NAMED) {
7327 if (o2->op_type == OP_CONST)
7328 o2->op_private &= ~OPpCONST_STRICT;
7329 else if (o2->op_type == OP_LIST) {
7330 OP * const sib = ((UNOP*)o2)->op_first->op_sibling;
7331 if (sib && sib->op_type == OP_CONST)
7332 sib->op_private &= ~OPpCONST_STRICT;
7335 o->op_private |= (PL_hints & HINT_STRICT_REFS);
7336 if (PERLDB_SUB && PL_curstash != PL_debstash)
7337 o->op_private |= OPpENTERSUB_DB;
7338 while (o2 != cvop) {
7340 if (PL_madskills && o2->op_type == OP_NULL)
7341 o3 = ((UNOP*)o2)->op_first;
7345 if (proto >= proto_end)
7346 return too_many_arguments(o, gv_ename(namegv));
7366 if (o3->op_type != OP_REFGEN && o3->op_type != OP_UNDEF)
7368 arg == 1 ? "block or sub {}" : "sub {}",
7369 gv_ename(namegv), o3);
7372 /* '*' allows any scalar type, including bareword */
7375 if (o3->op_type == OP_RV2GV)
7376 goto wrapref; /* autoconvert GLOB -> GLOBref */
7377 else if (o3->op_type == OP_CONST)
7378 o3->op_private &= ~OPpCONST_STRICT;
7379 else if (o3->op_type == OP_ENTERSUB) {
7380 /* accidental subroutine, revert to bareword */
7381 OP *gvop = ((UNOP*)o3)->op_first;
7382 if (gvop && gvop->op_type == OP_NULL) {
7383 gvop = ((UNOP*)gvop)->op_first;
7385 for (; gvop->op_sibling; gvop = gvop->op_sibling)
7388 (gvop->op_private & OPpENTERSUB_NOPAREN) &&
7389 (gvop = ((UNOP*)gvop)->op_first) &&
7390 gvop->op_type == OP_GV)
7392 GV * const gv = cGVOPx_gv(gvop);
7393 OP * const sibling = o2->op_sibling;
7394 SV * const n = newSVpvs("");
7396 OP * const oldo2 = o2;
7400 gv_fullname4(n, gv, "", FALSE);
7401 o2 = newSVOP(OP_CONST, 0, n);
7402 op_getmad(oldo2,o2,'O');
7403 prev->op_sibling = o2;
7404 o2->op_sibling = sibling;
7420 if (contextclass++ == 0) {
7421 e = strchr(proto, ']');
7422 if (!e || e == proto)
7431 const char *p = proto;
7432 const char *const end = proto;
7434 while (*--p != '[');
7435 bad_type(arg, Perl_form(aTHX_ "one of %.*s",
7437 gv_ename(namegv), o3);
7442 if (o3->op_type == OP_RV2GV)
7445 bad_type(arg, "symbol", gv_ename(namegv), o3);
7448 if (o3->op_type == OP_ENTERSUB)
7451 bad_type(arg, "subroutine entry", gv_ename(namegv),
7455 if (o3->op_type == OP_RV2SV ||
7456 o3->op_type == OP_PADSV ||
7457 o3->op_type == OP_HELEM ||
7458 o3->op_type == OP_AELEM ||
7459 o3->op_type == OP_THREADSV)
7462 bad_type(arg, "scalar", gv_ename(namegv), o3);
7465 if (o3->op_type == OP_RV2AV ||
7466 o3->op_type == OP_PADAV)
7469 bad_type(arg, "array", gv_ename(namegv), o3);
7472 if (o3->op_type == OP_RV2HV ||
7473 o3->op_type == OP_PADHV)
7476 bad_type(arg, "hash", gv_ename(namegv), o3);
7481 OP* const sib = kid->op_sibling;
7482 kid->op_sibling = 0;
7483 o2 = newUNOP(OP_REFGEN, 0, kid);
7484 o2->op_sibling = sib;
7485 prev->op_sibling = o2;
7487 if (contextclass && e) {
7502 Perl_croak(aTHX_ "Malformed prototype for %s: %"SVf,
7503 gv_ename(namegv), (void*)cv);
7508 mod(o2, OP_ENTERSUB);
7510 o2 = o2->op_sibling;
7512 if (proto && !optional && proto_end > proto &&
7513 (*proto != '@' && *proto != '%' && *proto != ';'))
7514 return too_few_arguments(o, gv_ename(namegv));
7517 OP * const oldo = o;
7521 o=newSVOP(OP_CONST, 0, newSViv(0));
7522 op_getmad(oldo,o,'O');
7528 Perl_ck_svconst(pTHX_ OP *o)
7530 PERL_UNUSED_CONTEXT;
7531 SvREADONLY_on(cSVOPo->op_sv);
7536 Perl_ck_chdir(pTHX_ OP *o)
7538 if (o->op_flags & OPf_KIDS) {
7539 SVOP * const kid = (SVOP*)cUNOPo->op_first;
7541 if (kid && kid->op_type == OP_CONST &&
7542 (kid->op_private & OPpCONST_BARE))
7544 o->op_flags |= OPf_SPECIAL;
7545 kid->op_private &= ~OPpCONST_STRICT;
7552 Perl_ck_trunc(pTHX_ OP *o)
7554 if (o->op_flags & OPf_KIDS) {
7555 SVOP *kid = (SVOP*)cUNOPo->op_first;
7557 if (kid->op_type == OP_NULL)
7558 kid = (SVOP*)kid->op_sibling;
7559 if (kid && kid->op_type == OP_CONST &&
7560 (kid->op_private & OPpCONST_BARE))
7562 o->op_flags |= OPf_SPECIAL;
7563 kid->op_private &= ~OPpCONST_STRICT;
7570 Perl_ck_unpack(pTHX_ OP *o)
7572 OP *kid = cLISTOPo->op_first;
7573 if (kid->op_sibling) {
7574 kid = kid->op_sibling;
7575 if (!kid->op_sibling)
7576 kid->op_sibling = newDEFSVOP();
7582 Perl_ck_substr(pTHX_ OP *o)
7585 if ((o->op_flags & OPf_KIDS) && (o->op_private == 4)) {
7586 OP *kid = cLISTOPo->op_first;
7588 if (kid->op_type == OP_NULL)
7589 kid = kid->op_sibling;
7591 kid->op_flags |= OPf_MOD;
7597 /* A peephole optimizer. We visit the ops in the order they're to execute.
7598 * See the comments at the top of this file for more details about when
7599 * peep() is called */
7602 Perl_peep(pTHX_ register OP *o)
7605 register OP* oldop = NULL;
7607 if (!o || o->op_opt)
7611 SAVEVPTR(PL_curcop);
7612 for (; o; o = o->op_next) {
7616 switch (o->op_type) {
7620 PL_curcop = ((COP*)o); /* for warnings */
7625 if (cSVOPo->op_private & OPpCONST_STRICT)
7626 no_bareword_allowed(o);
7628 case OP_METHOD_NAMED:
7629 /* Relocate sv to the pad for thread safety.
7630 * Despite being a "constant", the SV is written to,
7631 * for reference counts, sv_upgrade() etc. */
7633 const PADOFFSET ix = pad_alloc(OP_CONST, SVs_PADTMP);
7634 if (o->op_type == OP_CONST && SvPADTMP(cSVOPo->op_sv)) {
7635 /* If op_sv is already a PADTMP then it is being used by
7636 * some pad, so make a copy. */
7637 sv_setsv(PAD_SVl(ix),cSVOPo->op_sv);
7638 SvREADONLY_on(PAD_SVl(ix));
7639 SvREFCNT_dec(cSVOPo->op_sv);
7641 else if (o->op_type == OP_CONST
7642 && cSVOPo->op_sv == &PL_sv_undef) {
7643 /* PL_sv_undef is hack - it's unsafe to store it in the
7644 AV that is the pad, because av_fetch treats values of
7645 PL_sv_undef as a "free" AV entry and will merrily
7646 replace them with a new SV, causing pad_alloc to think
7647 that this pad slot is free. (When, clearly, it is not)
7649 SvOK_off(PAD_SVl(ix));
7650 SvPADTMP_on(PAD_SVl(ix));
7651 SvREADONLY_on(PAD_SVl(ix));
7654 SvREFCNT_dec(PAD_SVl(ix));
7655 SvPADTMP_on(cSVOPo->op_sv);
7656 PAD_SETSV(ix, cSVOPo->op_sv);
7657 /* XXX I don't know how this isn't readonly already. */
7658 SvREADONLY_on(PAD_SVl(ix));
7660 cSVOPo->op_sv = NULL;
7668 if (o->op_next && o->op_next->op_type == OP_STRINGIFY) {
7669 if (o->op_next->op_private & OPpTARGET_MY) {
7670 if (o->op_flags & OPf_STACKED) /* chained concats */
7671 goto ignore_optimization;
7673 /* assert(PL_opargs[o->op_type] & OA_TARGLEX); */
7674 o->op_targ = o->op_next->op_targ;
7675 o->op_next->op_targ = 0;
7676 o->op_private |= OPpTARGET_MY;
7679 op_null(o->op_next);
7681 ignore_optimization:
7685 if ((o->op_flags & OPf_WANT) != OPf_WANT_LIST) {
7687 break; /* Scalar stub must produce undef. List stub is noop */
7691 if (o->op_targ == OP_NEXTSTATE
7692 || o->op_targ == OP_DBSTATE
7693 || o->op_targ == OP_SETSTATE)
7695 PL_curcop = ((COP*)o);
7697 /* XXX: We avoid setting op_seq here to prevent later calls
7698 to peep() from mistakenly concluding that optimisation
7699 has already occurred. This doesn't fix the real problem,
7700 though (See 20010220.007). AMS 20010719 */
7701 /* op_seq functionality is now replaced by op_opt */
7702 if (oldop && o->op_next) {
7703 oldop->op_next = o->op_next;
7711 if (oldop && o->op_next) {
7712 oldop->op_next = o->op_next;
7720 if (o->op_type == OP_PADAV || o->op_next->op_type == OP_RV2AV) {
7721 OP* const pop = (o->op_type == OP_PADAV) ?
7722 o->op_next : o->op_next->op_next;
7724 if (pop && pop->op_type == OP_CONST &&
7725 ((PL_op = pop->op_next)) &&
7726 pop->op_next->op_type == OP_AELEM &&
7727 !(pop->op_next->op_private &
7728 (OPpLVAL_INTRO|OPpLVAL_DEFER|OPpDEREF|OPpMAYBE_LVSUB)) &&
7729 (i = SvIV(((SVOP*)pop)->op_sv) - CopARYBASE_get(PL_curcop))
7734 if (cSVOPx(pop)->op_private & OPpCONST_STRICT)
7735 no_bareword_allowed(pop);
7736 if (o->op_type == OP_GV)
7737 op_null(o->op_next);
7738 op_null(pop->op_next);
7740 o->op_flags |= pop->op_next->op_flags & OPf_MOD;
7741 o->op_next = pop->op_next->op_next;
7742 o->op_ppaddr = PL_ppaddr[OP_AELEMFAST];
7743 o->op_private = (U8)i;
7744 if (o->op_type == OP_GV) {
7749 o->op_flags |= OPf_SPECIAL;
7750 o->op_type = OP_AELEMFAST;
7756 if (o->op_next->op_type == OP_RV2SV) {
7757 if (!(o->op_next->op_private & OPpDEREF)) {
7758 op_null(o->op_next);
7759 o->op_private |= o->op_next->op_private & (OPpLVAL_INTRO
7761 o->op_next = o->op_next->op_next;
7762 o->op_type = OP_GVSV;
7763 o->op_ppaddr = PL_ppaddr[OP_GVSV];
7766 else if ((o->op_private & OPpEARLY_CV) && ckWARN(WARN_PROTOTYPE)) {
7767 GV * const gv = cGVOPo_gv;
7768 if (SvTYPE(gv) == SVt_PVGV && GvCV(gv) && SvPVX_const(GvCV(gv))) {
7769 /* XXX could check prototype here instead of just carping */
7770 SV * const sv = sv_newmortal();
7771 gv_efullname3(sv, gv, NULL);
7772 Perl_warner(aTHX_ packWARN(WARN_PROTOTYPE),
7773 "%"SVf"() called too early to check prototype",
7777 else if (o->op_next->op_type == OP_READLINE
7778 && o->op_next->op_next->op_type == OP_CONCAT
7779 && (o->op_next->op_next->op_flags & OPf_STACKED))
7781 /* Turn "$a .= <FH>" into an OP_RCATLINE. AMS 20010917 */
7782 o->op_type = OP_RCATLINE;
7783 o->op_flags |= OPf_STACKED;
7784 o->op_ppaddr = PL_ppaddr[OP_RCATLINE];
7785 op_null(o->op_next->op_next);
7786 op_null(o->op_next);
7803 while (cLOGOP->op_other->op_type == OP_NULL)
7804 cLOGOP->op_other = cLOGOP->op_other->op_next;
7805 peep(cLOGOP->op_other); /* Recursive calls are not replaced by fptr calls */
7811 while (cLOOP->op_redoop->op_type == OP_NULL)
7812 cLOOP->op_redoop = cLOOP->op_redoop->op_next;
7813 peep(cLOOP->op_redoop);
7814 while (cLOOP->op_nextop->op_type == OP_NULL)
7815 cLOOP->op_nextop = cLOOP->op_nextop->op_next;
7816 peep(cLOOP->op_nextop);
7817 while (cLOOP->op_lastop->op_type == OP_NULL)
7818 cLOOP->op_lastop = cLOOP->op_lastop->op_next;
7819 peep(cLOOP->op_lastop);
7826 while (cPMOP->op_pmreplstart &&
7827 cPMOP->op_pmreplstart->op_type == OP_NULL)
7828 cPMOP->op_pmreplstart = cPMOP->op_pmreplstart->op_next;
7829 peep(cPMOP->op_pmreplstart);
7834 if (o->op_next && o->op_next->op_type == OP_NEXTSTATE
7835 && ckWARN(WARN_SYNTAX))
7837 if (o->op_next->op_sibling) {
7838 const OPCODE type = o->op_next->op_sibling->op_type;
7839 if (type != OP_EXIT && type != OP_WARN && type != OP_DIE) {
7840 const line_t oldline = CopLINE(PL_curcop);
7841 CopLINE_set(PL_curcop, CopLINE((COP*)o->op_next));
7842 Perl_warner(aTHX_ packWARN(WARN_EXEC),
7843 "Statement unlikely to be reached");
7844 Perl_warner(aTHX_ packWARN(WARN_EXEC),
7845 "\t(Maybe you meant system() when you said exec()?)\n");
7846 CopLINE_set(PL_curcop, oldline);
7857 const char *key = NULL;
7862 if (((BINOP*)o)->op_last->op_type != OP_CONST)
7865 /* Make the CONST have a shared SV */
7866 svp = cSVOPx_svp(((BINOP*)o)->op_last);
7867 if ((!SvFAKE(sv = *svp) || !SvREADONLY(sv)) && !IS_PADCONST(sv)) {
7868 key = SvPV_const(sv, keylen);
7869 lexname = newSVpvn_share(key,
7870 SvUTF8(sv) ? -(I32)keylen : (I32)keylen,
7876 if ((o->op_private & (OPpLVAL_INTRO)))
7879 rop = (UNOP*)((BINOP*)o)->op_first;
7880 if (rop->op_type != OP_RV2HV || rop->op_first->op_type != OP_PADSV)
7882 lexname = *av_fetch(PL_comppad_name, rop->op_first->op_targ, TRUE);
7883 if (!SvPAD_TYPED(lexname))
7885 fields = (GV**)hv_fetchs(SvSTASH(lexname), "FIELDS", FALSE);
7886 if (!fields || !GvHV(*fields))
7888 key = SvPV_const(*svp, keylen);
7889 if (!hv_fetch(GvHV(*fields), key,
7890 SvUTF8(*svp) ? -(I32)keylen : (I32)keylen, FALSE))
7892 Perl_croak(aTHX_ "No such class field \"%s\" "
7893 "in variable %s of type %s",
7894 key, SvPV_nolen_const(lexname), HvNAME_get(SvSTASH(lexname)));
7907 SVOP *first_key_op, *key_op;
7909 if ((o->op_private & (OPpLVAL_INTRO))
7910 /* I bet there's always a pushmark... */
7911 || ((LISTOP*)o)->op_first->op_sibling->op_type != OP_LIST)
7912 /* hmmm, no optimization if list contains only one key. */
7914 rop = (UNOP*)((LISTOP*)o)->op_last;
7915 if (rop->op_type != OP_RV2HV)
7917 if (rop->op_first->op_type == OP_PADSV)
7918 /* @$hash{qw(keys here)} */
7919 rop = (UNOP*)rop->op_first;
7921 /* @{$hash}{qw(keys here)} */
7922 if (rop->op_first->op_type == OP_SCOPE
7923 && cLISTOPx(rop->op_first)->op_last->op_type == OP_PADSV)
7925 rop = (UNOP*)cLISTOPx(rop->op_first)->op_last;
7931 lexname = *av_fetch(PL_comppad_name, rop->op_targ, TRUE);
7932 if (!SvPAD_TYPED(lexname))
7934 fields = (GV**)hv_fetchs(SvSTASH(lexname), "FIELDS", FALSE);
7935 if (!fields || !GvHV(*fields))
7937 /* Again guessing that the pushmark can be jumped over.... */
7938 first_key_op = (SVOP*)((LISTOP*)((LISTOP*)o)->op_first->op_sibling)
7939 ->op_first->op_sibling;
7940 for (key_op = first_key_op; key_op;
7941 key_op = (SVOP*)key_op->op_sibling) {
7942 if (key_op->op_type != OP_CONST)
7944 svp = cSVOPx_svp(key_op);
7945 key = SvPV_const(*svp, keylen);
7946 if (!hv_fetch(GvHV(*fields), key,
7947 SvUTF8(*svp) ? -(I32)keylen : (I32)keylen, FALSE))
7949 Perl_croak(aTHX_ "No such class field \"%s\" "
7950 "in variable %s of type %s",
7951 key, SvPV_nolen(lexname), HvNAME_get(SvSTASH(lexname)));
7958 /* will point to RV2AV or PADAV op on LHS/RHS of assign */
7962 /* check that RHS of sort is a single plain array */
7963 OP *oright = cUNOPo->op_first;
7964 if (!oright || oright->op_type != OP_PUSHMARK)
7967 /* reverse sort ... can be optimised. */
7968 if (!cUNOPo->op_sibling) {
7969 /* Nothing follows us on the list. */
7970 OP * const reverse = o->op_next;
7972 if (reverse->op_type == OP_REVERSE &&
7973 (reverse->op_flags & OPf_WANT) == OPf_WANT_LIST) {
7974 OP * const pushmark = cUNOPx(reverse)->op_first;
7975 if (pushmark && (pushmark->op_type == OP_PUSHMARK)
7976 && (cUNOPx(pushmark)->op_sibling == o)) {
7977 /* reverse -> pushmark -> sort */
7978 o->op_private |= OPpSORT_REVERSE;
7980 pushmark->op_next = oright->op_next;
7986 /* make @a = sort @a act in-place */
7990 oright = cUNOPx(oright)->op_sibling;
7993 if (oright->op_type == OP_NULL) { /* skip sort block/sub */
7994 oright = cUNOPx(oright)->op_sibling;
7998 (oright->op_type != OP_RV2AV && oright->op_type != OP_PADAV)
7999 || oright->op_next != o
8000 || (oright->op_private & OPpLVAL_INTRO)
8004 /* o2 follows the chain of op_nexts through the LHS of the
8005 * assign (if any) to the aassign op itself */
8007 if (!o2 || o2->op_type != OP_NULL)
8010 if (!o2 || o2->op_type != OP_PUSHMARK)
8013 if (o2 && o2->op_type == OP_GV)
8016 || (o2->op_type != OP_PADAV && o2->op_type != OP_RV2AV)
8017 || (o2->op_private & OPpLVAL_INTRO)
8022 if (!o2 || o2->op_type != OP_NULL)
8025 if (!o2 || o2->op_type != OP_AASSIGN
8026 || (o2->op_flags & OPf_WANT) != OPf_WANT_VOID)
8029 /* check that the sort is the first arg on RHS of assign */
8031 o2 = cUNOPx(o2)->op_first;
8032 if (!o2 || o2->op_type != OP_NULL)
8034 o2 = cUNOPx(o2)->op_first;
8035 if (!o2 || o2->op_type != OP_PUSHMARK)
8037 if (o2->op_sibling != o)
8040 /* check the array is the same on both sides */
8041 if (oleft->op_type == OP_RV2AV) {
8042 if (oright->op_type != OP_RV2AV
8043 || !cUNOPx(oright)->op_first
8044 || cUNOPx(oright)->op_first->op_type != OP_GV
8045 || cGVOPx_gv(cUNOPx(oleft)->op_first) !=
8046 cGVOPx_gv(cUNOPx(oright)->op_first)
8050 else if (oright->op_type != OP_PADAV
8051 || oright->op_targ != oleft->op_targ
8055 /* transfer MODishness etc from LHS arg to RHS arg */
8056 oright->op_flags = oleft->op_flags;
8057 o->op_private |= OPpSORT_INPLACE;
8059 /* excise push->gv->rv2av->null->aassign */
8060 o2 = o->op_next->op_next;
8061 op_null(o2); /* PUSHMARK */
8063 if (o2->op_type == OP_GV) {
8064 op_null(o2); /* GV */
8067 op_null(o2); /* RV2AV or PADAV */
8068 o2 = o2->op_next->op_next;
8069 op_null(o2); /* AASSIGN */
8071 o->op_next = o2->op_next;
8077 OP *ourmark, *theirmark, *ourlast, *iter, *expushmark, *rv2av;
8079 LISTOP *enter, *exlist;
8082 enter = (LISTOP *) o->op_next;
8085 if (enter->op_type == OP_NULL) {
8086 enter = (LISTOP *) enter->op_next;
8090 /* for $a (...) will have OP_GV then OP_RV2GV here.
8091 for (...) just has an OP_GV. */
8092 if (enter->op_type == OP_GV) {
8093 gvop = (OP *) enter;
8094 enter = (LISTOP *) enter->op_next;
8097 if (enter->op_type == OP_RV2GV) {
8098 enter = (LISTOP *) enter->op_next;
8104 if (enter->op_type != OP_ENTERITER)
8107 iter = enter->op_next;
8108 if (!iter || iter->op_type != OP_ITER)
8111 expushmark = enter->op_first;
8112 if (!expushmark || expushmark->op_type != OP_NULL
8113 || expushmark->op_targ != OP_PUSHMARK)
8116 exlist = (LISTOP *) expushmark->op_sibling;
8117 if (!exlist || exlist->op_type != OP_NULL
8118 || exlist->op_targ != OP_LIST)
8121 if (exlist->op_last != o) {
8122 /* Mmm. Was expecting to point back to this op. */
8125 theirmark = exlist->op_first;
8126 if (!theirmark || theirmark->op_type != OP_PUSHMARK)
8129 if (theirmark->op_sibling != o) {
8130 /* There's something between the mark and the reverse, eg
8131 for (1, reverse (...))
8136 ourmark = ((LISTOP *)o)->op_first;
8137 if (!ourmark || ourmark->op_type != OP_PUSHMARK)
8140 ourlast = ((LISTOP *)o)->op_last;
8141 if (!ourlast || ourlast->op_next != o)
8144 rv2av = ourmark->op_sibling;
8145 if (rv2av && rv2av->op_type == OP_RV2AV && rv2av->op_sibling == 0
8146 && rv2av->op_flags == (OPf_WANT_LIST | OPf_KIDS)
8147 && enter->op_flags == (OPf_WANT_LIST | OPf_KIDS)) {
8148 /* We're just reversing a single array. */
8149 rv2av->op_flags = OPf_WANT_SCALAR | OPf_KIDS | OPf_REF;
8150 enter->op_flags |= OPf_STACKED;
8153 /* We don't have control over who points to theirmark, so sacrifice
8155 theirmark->op_next = ourmark->op_next;
8156 theirmark->op_flags = ourmark->op_flags;
8157 ourlast->op_next = gvop ? gvop : (OP *) enter;
8160 enter->op_private |= OPpITER_REVERSED;
8161 iter->op_private |= OPpITER_REVERSED;
8168 UNOP *refgen, *rv2cv;
8171 /* I do not understand this, but if o->op_opt isn't set to 1,
8172 various tests in ext/B/t/bytecode.t fail with no readily
8178 if ((o->op_flags && OPf_WANT) != OPf_WANT_VOID)
8181 if ((o->op_private & ~OPpASSIGN_BACKWARDS) != 2)
8184 rv2gv = ((BINOP *)o)->op_last;
8185 if (!rv2gv || rv2gv->op_type != OP_RV2GV)
8188 refgen = (UNOP *)((BINOP *)o)->op_first;
8190 if (!refgen || refgen->op_type != OP_REFGEN)
8193 exlist = (LISTOP *)refgen->op_first;
8194 if (!exlist || exlist->op_type != OP_NULL
8195 || exlist->op_targ != OP_LIST)
8198 if (exlist->op_first->op_type != OP_PUSHMARK)
8201 rv2cv = (UNOP*)exlist->op_last;
8203 if (rv2cv->op_type != OP_RV2CV)
8206 assert ((rv2gv->op_private & OPpDONT_INIT_GV) == 0);
8207 assert ((o->op_private & OPpASSIGN_CV_TO_GV) == 0);
8208 assert ((rv2cv->op_private & OPpMAY_RETURN_CONSTANT) == 0);
8210 o->op_private |= OPpASSIGN_CV_TO_GV;
8211 rv2gv->op_private |= OPpDONT_INIT_GV;
8212 rv2cv->op_private |= OPpMAY_RETURN_CONSTANT;
8228 Perl_custom_op_name(pTHX_ const OP* o)
8231 const IV index = PTR2IV(o->op_ppaddr);
8235 if (!PL_custom_op_names) /* This probably shouldn't happen */
8236 return (char *)PL_op_name[OP_CUSTOM];
8238 keysv = sv_2mortal(newSViv(index));
8240 he = hv_fetch_ent(PL_custom_op_names, keysv, 0, 0);
8242 return (char *)PL_op_name[OP_CUSTOM]; /* Don't know who you are */
8244 return SvPV_nolen(HeVAL(he));
8248 Perl_custom_op_desc(pTHX_ const OP* o)
8251 const IV index = PTR2IV(o->op_ppaddr);
8255 if (!PL_custom_op_descs)
8256 return (char *)PL_op_desc[OP_CUSTOM];
8258 keysv = sv_2mortal(newSViv(index));
8260 he = hv_fetch_ent(PL_custom_op_descs, keysv, 0, 0);
8262 return (char *)PL_op_desc[OP_CUSTOM];
8264 return SvPV_nolen(HeVAL(he));
8269 /* Efficient sub that returns a constant scalar value. */
8271 const_sv_xsub(pTHX_ CV* cv)
8278 Perl_croak(aTHX_ "usage: %s::%s()",
8279 HvNAME_get(GvSTASH(CvGV(cv))), GvNAME(CvGV(cv)));
8283 ST(0) = (SV*)XSANY.any_ptr;
8289 * c-indentation-style: bsd
8291 * indent-tabs-mode: t
8294 * ex: set ts=8 sts=4 sw=4 noet: