3 * Copyright (C) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
4 * 2000, 2001, 2002, 2003, 2004, 2005, 2006, by Larry Wall and others
6 * You may distribute under the terms of either the GNU General Public
7 * License or the Artistic License, as specified in the README file.
12 * "You see: Mr. Drogo, he married poor Miss Primula Brandybuck. She was
13 * our Mr. Bilbo's first cousin on the mother's side (her mother being the
14 * youngest of the Old Took's daughters); and Mr. Drogo was his second
15 * cousin. So Mr. Frodo is his first *and* second cousin, once removed
16 * either way, as the saying is, if you follow me." --the Gaffer
19 /* This file contains the functions that create, manipulate and optimize
20 * the OP structures that hold a compiled perl program.
22 * A Perl program is compiled into a tree of OPs. Each op contains
23 * structural pointers (eg to its siblings and the next op in the
24 * execution sequence), a pointer to the function that would execute the
25 * op, plus any data specific to that op. For example, an OP_CONST op
26 * points to the pp_const() function and to an SV containing the constant
27 * value. When pp_const() is executed, its job is to push that SV onto the
30 * OPs are mainly created by the newFOO() functions, which are mainly
31 * called from the parser (in perly.y) as the code is parsed. For example
32 * the Perl code $a + $b * $c would cause the equivalent of the following
33 * to be called (oversimplifying a bit):
35 * newBINOP(OP_ADD, flags,
37 * newBINOP(OP_MULTIPLY, flags, newSVREF($b), newSVREF($c))
40 * Note that during the build of miniperl, a temporary copy of this file
41 * is made, called opmini.c.
45 Perl's compiler is essentially a 3-pass compiler with interleaved phases:
49 An execution-order pass
51 The bottom-up pass is represented by all the "newOP" routines and
52 the ck_ routines. The bottom-upness is actually driven by yacc.
53 So at the point that a ck_ routine fires, we have no idea what the
54 context is, either upward in the syntax tree, or either forward or
55 backward in the execution order. (The bottom-up parser builds that
56 part of the execution order it knows about, but if you follow the "next"
57 links around, you'll find it's actually a closed loop through the
60 Whenever the bottom-up parser gets to a node that supplies context to
61 its components, it invokes that portion of the top-down pass that applies
62 to that part of the subtree (and marks the top node as processed, so
63 if a node further up supplies context, it doesn't have to take the
64 plunge again). As a particular subcase of this, as the new node is
65 built, it takes all the closed execution loops of its subcomponents
66 and links them into a new closed loop for the higher level node. But
67 it's still not the real execution order.
69 The actual execution order is not known till we get a grammar reduction
70 to a top-level unit like a subroutine or file that will be called by
71 "name" rather than via a "next" pointer. At that point, we can call
72 into peep() to do that code's portion of the 3rd pass. It has to be
73 recursive, but it's recursive on basic blocks, not on tree nodes.
76 /* To implement user lexical pragmas, there needs to be a way at run time to
77 get the compile time state of %^H for that block. Storing %^H in every
78 block (or even COP) would be very expensive, so a different approach is
79 taken. The (running) state of %^H is serialised into a tree of HE-like
80 structs. Stores into %^H are chained onto the current leaf as a struct
81 refcounted_he * with the key and the value. Deletes from %^H are saved
82 with a value of PL_sv_placeholder. The state of %^H at any point can be
83 turned back into a regular HV by walking back up the tree from that point's
84 leaf, ignoring any key you've already seen (placeholder or not), storing
85 the rest into the HV structure, then removing the placeholders. Hence
86 memory is only used to store the %^H deltas from the enclosing COP, rather
87 than the entire %^H on each COP.
89 To cause actions on %^H to write out the serialisation records, it has
90 magic type 'H'. This magic (itself) does nothing, but its presence causes
91 the values to gain magic type 'h', which has entries for set and clear.
92 C<Perl_magic_sethint> updates C<PL_compiling.cop_hints_hash> with a store
93 record, with deletes written by C<Perl_magic_clearhint>. C<SAVE_HINTS>
94 saves the current C<PL_compiling.cop_hints_hash> on the save stack, so that
95 it will be correctly restored when any inner compiling scope is exited.
101 #include "keywords.h"
103 #define CALL_PEEP(o) CALL_FPTR(PL_peepp)(aTHX_ o)
105 #if defined(PL_OP_SLAB_ALLOC)
107 #ifndef PERL_SLAB_SIZE
108 #define PERL_SLAB_SIZE 2048
112 Perl_Slab_Alloc(pTHX_ int m, size_t sz)
115 * To make incrementing use count easy PL_OpSlab is an I32 *
116 * To make inserting the link to slab PL_OpPtr is I32 **
117 * So compute size in units of sizeof(I32 *) as that is how Pl_OpPtr increments
118 * Add an overhead for pointer to slab and round up as a number of pointers
120 sz = (sz + 2*sizeof(I32 *) -1)/sizeof(I32 *);
121 if ((PL_OpSpace -= sz) < 0) {
122 PL_OpPtr = (I32 **) PerlMemShared_malloc(PERL_SLAB_SIZE*sizeof(I32*));
126 Zero(PL_OpPtr,PERL_SLAB_SIZE,I32 **);
127 /* We reserve the 0'th I32 sized chunk as a use count */
128 PL_OpSlab = (I32 *) PL_OpPtr;
129 /* Reduce size by the use count word, and by the size we need.
130 * Latter is to mimic the '-=' in the if() above
132 PL_OpSpace = PERL_SLAB_SIZE - (sizeof(I32)+sizeof(I32 **)-1)/sizeof(I32 **) - sz;
133 /* Allocation pointer starts at the top.
134 Theory: because we build leaves before trunk allocating at end
135 means that at run time access is cache friendly upward
137 PL_OpPtr += PERL_SLAB_SIZE;
139 assert( PL_OpSpace >= 0 );
140 /* Move the allocation pointer down */
142 assert( PL_OpPtr > (I32 **) PL_OpSlab );
143 *PL_OpPtr = PL_OpSlab; /* Note which slab it belongs to */
144 (*PL_OpSlab)++; /* Increment use count of slab */
145 assert( PL_OpPtr+sz <= ((I32 **) PL_OpSlab + PERL_SLAB_SIZE) );
146 assert( *PL_OpSlab > 0 );
147 return (void *)(PL_OpPtr + 1);
151 Perl_Slab_Free(pTHX_ void *op)
153 I32 * const * const ptr = (I32 **) op;
154 I32 * const slab = ptr[-1];
155 assert( ptr-1 > (I32 **) slab );
156 assert( ptr < ( (I32 **) slab + PERL_SLAB_SIZE) );
158 if (--(*slab) == 0) {
160 # define PerlMemShared PerlMem
163 PerlMemShared_free(slab);
164 if (slab == PL_OpSlab) {
171 * In the following definition, the ", (OP*)0" is just to make the compiler
172 * think the expression is of the right type: croak actually does a Siglongjmp.
174 #define CHECKOP(type,o) \
175 ((PL_op_mask && PL_op_mask[type]) \
176 ? ( op_free((OP*)o), \
177 Perl_croak(aTHX_ "'%s' trapped by operation mask", PL_op_desc[type]), \
179 : CALL_FPTR(PL_check[type])(aTHX_ (OP*)o))
181 #define RETURN_UNLIMITED_NUMBER (PERL_INT_MAX / 2)
184 S_gv_ename(pTHX_ GV *gv)
186 SV* const tmpsv = sv_newmortal();
187 gv_efullname3(tmpsv, gv, NULL);
188 return SvPV_nolen_const(tmpsv);
192 S_no_fh_allowed(pTHX_ OP *o)
194 yyerror(Perl_form(aTHX_ "Missing comma after first argument to %s function",
200 S_too_few_arguments(pTHX_ OP *o, const char *name)
202 yyerror(Perl_form(aTHX_ "Not enough arguments for %s", name));
207 S_too_many_arguments(pTHX_ OP *o, const char *name)
209 yyerror(Perl_form(aTHX_ "Too many arguments for %s", name));
214 S_bad_type(pTHX_ I32 n, const char *t, const char *name, const OP *kid)
216 yyerror(Perl_form(aTHX_ "Type of arg %d to %s must be %s (not %s)",
217 (int)n, name, t, OP_DESC(kid)));
221 S_no_bareword_allowed(pTHX_ const OP *o)
224 return; /* various ok barewords are hidden in extra OP_NULL */
225 qerror(Perl_mess(aTHX_
226 "Bareword \"%"SVf"\" not allowed while \"strict subs\" in use",
230 /* "register" allocation */
233 Perl_allocmy(pTHX_ const char *const name)
237 const bool is_our = (PL_in_my == KEY_our);
239 /* complain about "my $<special_var>" etc etc */
243 (USE_UTF8_IN_NAMES && UTF8_IS_START(name[1])) ||
244 (name[1] == '_' && (*name == '$' || name[2]))))
246 /* name[2] is true if strlen(name) > 2 */
247 if (!isPRINT(name[1]) || strchr("\t\n\r\f", name[1])) {
248 yyerror(Perl_form(aTHX_ "Can't use global %c^%c%s in \"my\"",
249 name[0], toCTRL(name[1]), name + 2));
251 yyerror(Perl_form(aTHX_ "Can't use global %s in \"my\"",name));
255 /* check for duplicate declaration */
256 pad_check_dup(name, is_our, (PL_curstash ? PL_curstash : PL_defstash));
258 if (PL_in_my_stash && *name != '$') {
259 yyerror(Perl_form(aTHX_
260 "Can't declare class for non-scalar %s in \"%s\"",
262 is_our ? "our" : PL_in_my == KEY_state ? "state" : "my"));
265 /* allocate a spare slot and store the name in that slot */
267 off = pad_add_name(name,
270 /* $_ is always in main::, even with our */
271 ? (PL_curstash && !strEQ(name,"$_") ? PL_curstash : PL_defstash)
275 PL_in_my == KEY_state
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_hash);
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;
2138 SV * const oldwarnhook = PL_warnhook;
2139 SV * const olddiehook = PL_diehook;
2142 if (PL_opargs[type] & OA_RETSCALAR)
2144 if (PL_opargs[type] & OA_TARGET && !o->op_targ)
2145 o->op_targ = pad_alloc(type, SVs_PADTMP);
2147 /* integerize op, unless it happens to be C<-foo>.
2148 * XXX should pp_i_negate() do magic string negation instead? */
2149 if ((PL_opargs[type] & OA_OTHERINT) && (PL_hints & HINT_INTEGER)
2150 && !(type == OP_NEGATE && cUNOPo->op_first->op_type == OP_CONST
2151 && (cUNOPo->op_first->op_private & OPpCONST_BARE)))
2153 o->op_ppaddr = PL_ppaddr[type = ++(o->op_type)];
2156 if (!(PL_opargs[type] & OA_FOLDCONST))
2161 /* XXX might want a ck_negate() for this */
2162 cUNOPo->op_first->op_private &= ~OPpCONST_STRICT;
2173 /* XXX what about the numeric ops? */
2174 if (PL_hints & HINT_LOCALE)
2179 goto nope; /* Don't try to run w/ errors */
2181 for (curop = LINKLIST(o); curop != o; curop = LINKLIST(curop)) {
2182 const OPCODE type = curop->op_type;
2183 if ((type != OP_CONST || (curop->op_private & OPpCONST_BARE)) &&
2185 type != OP_SCALAR &&
2187 type != OP_PUSHMARK)
2193 curop = LINKLIST(o);
2194 old_next = o->op_next;
2198 oldscope = PL_scopestack_ix;
2199 create_eval_scope(G_FAKINGEVAL);
2201 PL_warnhook = PERL_WARNHOOK_FATAL;
2208 sv = *(PL_stack_sp--);
2209 if (o->op_targ && sv == PAD_SV(o->op_targ)) /* grab pad temp? */
2210 pad_swipe(o->op_targ, FALSE);
2211 else if (SvTEMP(sv)) { /* grab mortal temp? */
2212 SvREFCNT_inc_simple_void(sv);
2217 /* Something tried to die. Abandon constant folding. */
2218 /* Pretend the error never happened. */
2219 sv_setpvn(ERRSV,"",0);
2220 o->op_next = old_next;
2224 /* Don't expect 1 (setjmp failed) or 2 (something called my_exit) */
2225 PL_warnhook = oldwarnhook;
2226 PL_diehook = olddiehook;
2227 /* XXX note that this croak may fail as we've already blown away
2228 * the stack - eg any nested evals */
2229 Perl_croak(aTHX_ "panic: fold_constants JMPENV_PUSH returned %d", ret);
2232 PL_warnhook = oldwarnhook;
2233 PL_diehook = olddiehook;
2235 if (PL_scopestack_ix > oldscope)
2236 delete_eval_scope();
2245 if (type == OP_RV2GV)
2246 newop = newGVOP(OP_GV, 0, (GV*)sv);
2248 newop = newSVOP(OP_CONST, 0, sv);
2249 op_getmad(o,newop,'f');
2257 Perl_gen_constant_list(pTHX_ register OP *o)
2261 const I32 oldtmps_floor = PL_tmps_floor;
2265 return o; /* Don't attempt to run with errors */
2267 PL_op = curop = LINKLIST(o);
2274 PL_tmps_floor = oldtmps_floor;
2276 o->op_type = OP_RV2AV;
2277 o->op_ppaddr = PL_ppaddr[OP_RV2AV];
2278 o->op_flags &= ~OPf_REF; /* treat \(1..2) like an ordinary list */
2279 o->op_flags |= OPf_PARENS; /* and flatten \(1..2,3) */
2280 o->op_opt = 0; /* needs to be revisited in peep() */
2281 curop = ((UNOP*)o)->op_first;
2282 ((UNOP*)o)->op_first = newSVOP(OP_CONST, 0, SvREFCNT_inc_NN(*PL_stack_sp--));
2284 op_getmad(curop,o,'O');
2293 Perl_convert(pTHX_ I32 type, I32 flags, OP *o)
2296 if (!o || o->op_type != OP_LIST)
2297 o = newLISTOP(OP_LIST, 0, o, NULL);
2299 o->op_flags &= ~OPf_WANT;
2301 if (!(PL_opargs[type] & OA_MARK))
2302 op_null(cLISTOPo->op_first);
2304 o->op_type = (OPCODE)type;
2305 o->op_ppaddr = PL_ppaddr[type];
2306 o->op_flags |= flags;
2308 o = CHECKOP(type, o);
2309 if (o->op_type != (unsigned)type)
2312 return fold_constants(o);
2315 /* List constructors */
2318 Perl_append_elem(pTHX_ I32 type, OP *first, OP *last)
2326 if (first->op_type != (unsigned)type
2327 || (type == OP_LIST && (first->op_flags & OPf_PARENS)))
2329 return newLISTOP(type, 0, first, last);
2332 if (first->op_flags & OPf_KIDS)
2333 ((LISTOP*)first)->op_last->op_sibling = last;
2335 first->op_flags |= OPf_KIDS;
2336 ((LISTOP*)first)->op_first = last;
2338 ((LISTOP*)first)->op_last = last;
2343 Perl_append_list(pTHX_ I32 type, LISTOP *first, LISTOP *last)
2351 if (first->op_type != (unsigned)type)
2352 return prepend_elem(type, (OP*)first, (OP*)last);
2354 if (last->op_type != (unsigned)type)
2355 return append_elem(type, (OP*)first, (OP*)last);
2357 first->op_last->op_sibling = last->op_first;
2358 first->op_last = last->op_last;
2359 first->op_flags |= (last->op_flags & OPf_KIDS);
2362 if (last->op_first && first->op_madprop) {
2363 MADPROP *mp = last->op_first->op_madprop;
2365 while (mp->mad_next)
2367 mp->mad_next = first->op_madprop;
2370 last->op_first->op_madprop = first->op_madprop;
2373 first->op_madprop = last->op_madprop;
2374 last->op_madprop = 0;
2383 Perl_prepend_elem(pTHX_ I32 type, OP *first, OP *last)
2391 if (last->op_type == (unsigned)type) {
2392 if (type == OP_LIST) { /* already a PUSHMARK there */
2393 first->op_sibling = ((LISTOP*)last)->op_first->op_sibling;
2394 ((LISTOP*)last)->op_first->op_sibling = first;
2395 if (!(first->op_flags & OPf_PARENS))
2396 last->op_flags &= ~OPf_PARENS;
2399 if (!(last->op_flags & OPf_KIDS)) {
2400 ((LISTOP*)last)->op_last = first;
2401 last->op_flags |= OPf_KIDS;
2403 first->op_sibling = ((LISTOP*)last)->op_first;
2404 ((LISTOP*)last)->op_first = first;
2406 last->op_flags |= OPf_KIDS;
2410 return newLISTOP(type, 0, first, last);
2418 Perl_newTOKEN(pTHX_ I32 optype, YYSTYPE lval, MADPROP* madprop)
2421 Newxz(tk, 1, TOKEN);
2422 tk->tk_type = (OPCODE)optype;
2423 tk->tk_type = 12345;
2425 tk->tk_mad = madprop;
2430 Perl_token_free(pTHX_ TOKEN* tk)
2432 if (tk->tk_type != 12345)
2434 mad_free(tk->tk_mad);
2439 Perl_token_getmad(pTHX_ TOKEN* tk, OP* o, char slot)
2443 if (tk->tk_type != 12345) {
2444 Perl_warner(aTHX_ packWARN(WARN_MISC),
2445 "Invalid TOKEN object ignored");
2452 /* faked up qw list? */
2454 tm->mad_type == MAD_SV &&
2455 SvPVX((SV*)tm->mad_val)[0] == 'q')
2462 /* pretend constant fold didn't happen? */
2463 if (mp->mad_key == 'f' &&
2464 (o->op_type == OP_CONST ||
2465 o->op_type == OP_GV) )
2467 token_getmad(tk,(OP*)mp->mad_val,slot);
2481 if (mp->mad_key == 'X')
2482 mp->mad_key = slot; /* just change the first one */
2492 Perl_op_getmad_weak(pTHX_ OP* from, OP* o, char slot)
2501 /* pretend constant fold didn't happen? */
2502 if (mp->mad_key == 'f' &&
2503 (o->op_type == OP_CONST ||
2504 o->op_type == OP_GV) )
2506 op_getmad(from,(OP*)mp->mad_val,slot);
2513 mp->mad_next = newMADPROP(slot,MAD_OP,from,0);
2516 o->op_madprop = newMADPROP(slot,MAD_OP,from,0);
2522 Perl_op_getmad(pTHX_ OP* from, OP* o, char slot)
2531 /* pretend constant fold didn't happen? */
2532 if (mp->mad_key == 'f' &&
2533 (o->op_type == OP_CONST ||
2534 o->op_type == OP_GV) )
2536 op_getmad(from,(OP*)mp->mad_val,slot);
2543 mp->mad_next = newMADPROP(slot,MAD_OP,from,1);
2546 o->op_madprop = newMADPROP(slot,MAD_OP,from,1);
2550 PerlIO_printf(PerlIO_stderr(),
2551 "DESTROYING op = %0"UVxf"\n", PTR2UV(from));
2557 Perl_prepend_madprops(pTHX_ MADPROP* mp, OP* o, char slot)
2575 Perl_append_madprops(pTHX_ MADPROP* tm, OP* o, char slot)
2579 addmad(tm, &(o->op_madprop), slot);
2583 Perl_addmad(pTHX_ MADPROP* tm, MADPROP** root, char slot)
2604 Perl_newMADsv(pTHX_ char key, SV* sv)
2606 return newMADPROP(key, MAD_SV, sv, 0);
2610 Perl_newMADPROP(pTHX_ char key, char type, void* val, I32 vlen)
2613 Newxz(mp, 1, MADPROP);
2616 mp->mad_vlen = vlen;
2617 mp->mad_type = type;
2619 /* PerlIO_printf(PerlIO_stderr(), "NEW mp = %0x\n", mp); */
2624 Perl_mad_free(pTHX_ MADPROP* mp)
2626 /* PerlIO_printf(PerlIO_stderr(), "FREE mp = %0x\n", mp); */
2630 mad_free(mp->mad_next);
2631 /* if (PL_lex_state != LEX_NOTPARSING && mp->mad_vlen)
2632 PerlIO_printf(PerlIO_stderr(), "DESTROYING '%c'=<%s>\n", mp->mad_key & 255, mp->mad_val); */
2633 switch (mp->mad_type) {
2637 Safefree((char*)mp->mad_val);
2640 if (mp->mad_vlen) /* vlen holds "strong/weak" boolean */
2641 op_free((OP*)mp->mad_val);
2644 sv_free((SV*)mp->mad_val);
2647 PerlIO_printf(PerlIO_stderr(), "Unrecognized mad\n");
2656 Perl_newNULLLIST(pTHX)
2658 return newOP(OP_STUB, 0);
2662 Perl_force_list(pTHX_ OP *o)
2664 if (!o || o->op_type != OP_LIST)
2665 o = newLISTOP(OP_LIST, 0, o, NULL);
2671 Perl_newLISTOP(pTHX_ I32 type, I32 flags, OP *first, OP *last)
2676 NewOp(1101, listop, 1, LISTOP);
2678 listop->op_type = (OPCODE)type;
2679 listop->op_ppaddr = PL_ppaddr[type];
2682 listop->op_flags = (U8)flags;
2686 else if (!first && last)
2689 first->op_sibling = last;
2690 listop->op_first = first;
2691 listop->op_last = last;
2692 if (type == OP_LIST) {
2693 OP* const pushop = newOP(OP_PUSHMARK, 0);
2694 pushop->op_sibling = first;
2695 listop->op_first = pushop;
2696 listop->op_flags |= OPf_KIDS;
2698 listop->op_last = pushop;
2701 return CHECKOP(type, listop);
2705 Perl_newOP(pTHX_ I32 type, I32 flags)
2709 NewOp(1101, o, 1, OP);
2710 o->op_type = (OPCODE)type;
2711 o->op_ppaddr = PL_ppaddr[type];
2712 o->op_flags = (U8)flags;
2715 o->op_private = (U8)(0 | (flags >> 8));
2716 if (PL_opargs[type] & OA_RETSCALAR)
2718 if (PL_opargs[type] & OA_TARGET)
2719 o->op_targ = pad_alloc(type, SVs_PADTMP);
2720 return CHECKOP(type, o);
2724 Perl_newUNOP(pTHX_ I32 type, I32 flags, OP *first)
2730 first = newOP(OP_STUB, 0);
2731 if (PL_opargs[type] & OA_MARK)
2732 first = force_list(first);
2734 NewOp(1101, unop, 1, UNOP);
2735 unop->op_type = (OPCODE)type;
2736 unop->op_ppaddr = PL_ppaddr[type];
2737 unop->op_first = first;
2738 unop->op_flags = (U8)(flags | OPf_KIDS);
2739 unop->op_private = (U8)(1 | (flags >> 8));
2740 unop = (UNOP*) CHECKOP(type, unop);
2744 return fold_constants((OP *) unop);
2748 Perl_newBINOP(pTHX_ I32 type, I32 flags, OP *first, OP *last)
2752 NewOp(1101, binop, 1, BINOP);
2755 first = newOP(OP_NULL, 0);
2757 binop->op_type = (OPCODE)type;
2758 binop->op_ppaddr = PL_ppaddr[type];
2759 binop->op_first = first;
2760 binop->op_flags = (U8)(flags | OPf_KIDS);
2763 binop->op_private = (U8)(1 | (flags >> 8));
2766 binop->op_private = (U8)(2 | (flags >> 8));
2767 first->op_sibling = last;
2770 binop = (BINOP*)CHECKOP(type, binop);
2771 if (binop->op_next || binop->op_type != (OPCODE)type)
2774 binop->op_last = binop->op_first->op_sibling;
2776 return fold_constants((OP *)binop);
2779 static int uvcompare(const void *a, const void *b)
2780 __attribute__nonnull__(1)
2781 __attribute__nonnull__(2)
2782 __attribute__pure__;
2783 static int uvcompare(const void *a, const void *b)
2785 if (*((const UV *)a) < (*(const UV *)b))
2787 if (*((const UV *)a) > (*(const UV *)b))
2789 if (*((const UV *)a+1) < (*(const UV *)b+1))
2791 if (*((const UV *)a+1) > (*(const UV *)b+1))
2797 Perl_pmtrans(pTHX_ OP *o, OP *expr, OP *repl)
2800 SV * const tstr = ((SVOP*)expr)->op_sv;
2801 SV * const rstr = ((SVOP*)repl)->op_sv;
2804 const U8 *t = (U8*)SvPV_const(tstr, tlen);
2805 const U8 *r = (U8*)SvPV_const(rstr, rlen);
2809 register short *tbl;
2811 const I32 complement = o->op_private & OPpTRANS_COMPLEMENT;
2812 const I32 squash = o->op_private & OPpTRANS_SQUASH;
2813 I32 del = o->op_private & OPpTRANS_DELETE;
2814 PL_hints |= HINT_BLOCK_SCOPE;
2817 o->op_private |= OPpTRANS_FROM_UTF;
2820 o->op_private |= OPpTRANS_TO_UTF;
2822 if (o->op_private & (OPpTRANS_FROM_UTF|OPpTRANS_TO_UTF)) {
2823 SV* const listsv = newSVpvs("# comment\n");
2825 const U8* tend = t + tlen;
2826 const U8* rend = r + rlen;
2840 const I32 from_utf = o->op_private & OPpTRANS_FROM_UTF;
2841 const I32 to_utf = o->op_private & OPpTRANS_TO_UTF;
2844 const U32 flags = UTF8_ALLOW_DEFAULT;
2848 t = tsave = bytes_to_utf8(t, &len);
2851 if (!to_utf && rlen) {
2853 r = rsave = bytes_to_utf8(r, &len);
2857 /* There are several snags with this code on EBCDIC:
2858 1. 0xFF is a legal UTF-EBCDIC byte (there are no illegal bytes).
2859 2. scan_const() in toke.c has encoded chars in native encoding which makes
2860 ranges at least in EBCDIC 0..255 range the bottom odd.
2864 U8 tmpbuf[UTF8_MAXBYTES+1];
2867 Newx(cp, 2*tlen, UV);
2869 transv = newSVpvs("");
2871 cp[2*i] = utf8n_to_uvuni(t, tend-t, &ulen, flags);
2873 if (t < tend && NATIVE_TO_UTF(*t) == 0xff) {
2875 cp[2*i+1] = utf8n_to_uvuni(t, tend-t, &ulen, flags);
2879 cp[2*i+1] = cp[2*i];
2883 qsort(cp, i, 2*sizeof(UV), uvcompare);
2884 for (j = 0; j < i; j++) {
2886 diff = val - nextmin;
2888 t = uvuni_to_utf8(tmpbuf,nextmin);
2889 sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf);
2891 U8 range_mark = UTF_TO_NATIVE(0xff);
2892 t = uvuni_to_utf8(tmpbuf, val - 1);
2893 sv_catpvn(transv, (char *)&range_mark, 1);
2894 sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf);
2901 t = uvuni_to_utf8(tmpbuf,nextmin);
2902 sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf);
2904 U8 range_mark = UTF_TO_NATIVE(0xff);
2905 sv_catpvn(transv, (char *)&range_mark, 1);
2907 t = uvuni_to_utf8_flags(tmpbuf, 0x7fffffff,
2908 UNICODE_ALLOW_SUPER);
2909 sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf);
2910 t = (const U8*)SvPVX_const(transv);
2911 tlen = SvCUR(transv);
2915 else if (!rlen && !del) {
2916 r = t; rlen = tlen; rend = tend;
2919 if ((!rlen && !del) || t == r ||
2920 (tlen == rlen && memEQ((char *)t, (char *)r, tlen)))
2922 o->op_private |= OPpTRANS_IDENTICAL;
2926 while (t < tend || tfirst <= tlast) {
2927 /* see if we need more "t" chars */
2928 if (tfirst > tlast) {
2929 tfirst = (I32)utf8n_to_uvuni(t, tend - t, &ulen, flags);
2931 if (t < tend && NATIVE_TO_UTF(*t) == 0xff) { /* illegal utf8 val indicates range */
2933 tlast = (I32)utf8n_to_uvuni(t, tend - t, &ulen, flags);
2940 /* now see if we need more "r" chars */
2941 if (rfirst > rlast) {
2943 rfirst = (I32)utf8n_to_uvuni(r, rend - r, &ulen, flags);
2945 if (r < rend && NATIVE_TO_UTF(*r) == 0xff) { /* illegal utf8 val indicates range */
2947 rlast = (I32)utf8n_to_uvuni(r, rend - r, &ulen, flags);
2956 rfirst = rlast = 0xffffffff;
2960 /* now see which range will peter our first, if either. */
2961 tdiff = tlast - tfirst;
2962 rdiff = rlast - rfirst;
2969 if (rfirst == 0xffffffff) {
2970 diff = tdiff; /* oops, pretend rdiff is infinite */
2972 Perl_sv_catpvf(aTHX_ listsv, "%04lx\t%04lx\tXXXX\n",
2973 (long)tfirst, (long)tlast);
2975 Perl_sv_catpvf(aTHX_ listsv, "%04lx\t\tXXXX\n", (long)tfirst);
2979 Perl_sv_catpvf(aTHX_ listsv, "%04lx\t%04lx\t%04lx\n",
2980 (long)tfirst, (long)(tfirst + diff),
2983 Perl_sv_catpvf(aTHX_ listsv, "%04lx\t\t%04lx\n",
2984 (long)tfirst, (long)rfirst);
2986 if (rfirst + diff > max)
2987 max = rfirst + diff;
2989 grows = (tfirst < rfirst &&
2990 UNISKIP(tfirst) < UNISKIP(rfirst + diff));
3002 else if (max > 0xff)
3007 Safefree(cPVOPo->op_pv);
3008 cSVOPo->op_sv = (SV*)swash_init("utf8", "", listsv, bits, none);
3009 SvREFCNT_dec(listsv);
3010 SvREFCNT_dec(transv);
3012 if (!del && havefinal && rlen)
3013 (void)hv_store((HV*)SvRV((cSVOPo->op_sv)), "FINAL", 5,
3014 newSVuv((UV)final), 0);
3017 o->op_private |= OPpTRANS_GROWS;
3023 op_getmad(expr,o,'e');
3024 op_getmad(repl,o,'r');
3032 tbl = (short*)cPVOPo->op_pv;
3034 Zero(tbl, 256, short);
3035 for (i = 0; i < (I32)tlen; i++)
3037 for (i = 0, j = 0; i < 256; i++) {
3039 if (j >= (I32)rlen) {
3048 if (i < 128 && r[j] >= 128)
3058 o->op_private |= OPpTRANS_IDENTICAL;
3060 else if (j >= (I32)rlen)
3063 cPVOPo->op_pv = (char*)Renew(tbl, 0x101+rlen-j, short);
3064 tbl[0x100] = (short)(rlen - j);
3065 for (i=0; i < (I32)rlen - j; i++)
3066 tbl[0x101+i] = r[j+i];
3070 if (!rlen && !del) {
3073 o->op_private |= OPpTRANS_IDENTICAL;
3075 else if (!squash && rlen == tlen && memEQ((char*)t, (char*)r, tlen)) {
3076 o->op_private |= OPpTRANS_IDENTICAL;
3078 for (i = 0; i < 256; i++)
3080 for (i = 0, j = 0; i < (I32)tlen; i++,j++) {
3081 if (j >= (I32)rlen) {
3083 if (tbl[t[i]] == -1)
3089 if (tbl[t[i]] == -1) {
3090 if (t[i] < 128 && r[j] >= 128)
3097 o->op_private |= OPpTRANS_GROWS;
3099 op_getmad(expr,o,'e');
3100 op_getmad(repl,o,'r');
3110 Perl_newPMOP(pTHX_ I32 type, I32 flags)
3115 NewOp(1101, pmop, 1, PMOP);
3116 pmop->op_type = (OPCODE)type;
3117 pmop->op_ppaddr = PL_ppaddr[type];
3118 pmop->op_flags = (U8)flags;
3119 pmop->op_private = (U8)(0 | (flags >> 8));
3121 if (PL_hints & HINT_RE_TAINT)
3122 pmop->op_pmpermflags |= PMf_RETAINT;
3123 if (PL_hints & HINT_LOCALE)
3124 pmop->op_pmpermflags |= PMf_LOCALE;
3125 pmop->op_pmflags = pmop->op_pmpermflags;
3128 if (av_len((AV*) PL_regex_pad[0]) > -1) {
3129 SV * const repointer = av_pop((AV*)PL_regex_pad[0]);
3130 pmop->op_pmoffset = SvIV(repointer);
3131 SvREPADTMP_off(repointer);
3132 sv_setiv(repointer,0);
3134 SV * const repointer = newSViv(0);
3135 av_push(PL_regex_padav, SvREFCNT_inc_simple_NN(repointer));
3136 pmop->op_pmoffset = av_len(PL_regex_padav);
3137 PL_regex_pad = AvARRAY(PL_regex_padav);
3141 /* link into pm list */
3142 if (type != OP_TRANS && PL_curstash) {
3143 MAGIC *mg = mg_find((SV*)PL_curstash, PERL_MAGIC_symtab);
3146 mg = sv_magicext((SV*)PL_curstash, 0, PERL_MAGIC_symtab, 0, 0, 0);
3148 pmop->op_pmnext = (PMOP*)mg->mg_obj;
3149 mg->mg_obj = (SV*)pmop;
3150 PmopSTASH_set(pmop,PL_curstash);
3153 return CHECKOP(type, pmop);
3156 /* Given some sort of match op o, and an expression expr containing a
3157 * pattern, either compile expr into a regex and attach it to o (if it's
3158 * constant), or convert expr into a runtime regcomp op sequence (if it's
3161 * isreg indicates that the pattern is part of a regex construct, eg
3162 * $x =~ /pattern/ or split /pattern/, as opposed to $x =~ $pattern or
3163 * split "pattern", which aren't. In the former case, expr will be a list
3164 * if the pattern contains more than one term (eg /a$b/) or if it contains
3165 * a replacement, ie s/// or tr///.
3169 Perl_pmruntime(pTHX_ OP *o, OP *expr, bool isreg)
3174 I32 repl_has_vars = 0;
3178 if (o->op_type == OP_SUBST || o->op_type == OP_TRANS) {
3179 /* last element in list is the replacement; pop it */
3181 repl = cLISTOPx(expr)->op_last;
3182 kid = cLISTOPx(expr)->op_first;
3183 while (kid->op_sibling != repl)
3184 kid = kid->op_sibling;
3185 kid->op_sibling = NULL;
3186 cLISTOPx(expr)->op_last = kid;
3189 if (isreg && expr->op_type == OP_LIST &&
3190 cLISTOPx(expr)->op_first->op_sibling == cLISTOPx(expr)->op_last)
3192 /* convert single element list to element */
3193 OP* const oe = expr;
3194 expr = cLISTOPx(oe)->op_first->op_sibling;
3195 cLISTOPx(oe)->op_first->op_sibling = NULL;
3196 cLISTOPx(oe)->op_last = NULL;
3200 if (o->op_type == OP_TRANS) {
3201 return pmtrans(o, expr, repl);
3204 reglist = isreg && expr->op_type == OP_LIST;
3208 PL_hints |= HINT_BLOCK_SCOPE;
3211 if (expr->op_type == OP_CONST) {
3213 SV * const pat = ((SVOP*)expr)->op_sv;
3214 const char *p = SvPV_const(pat, plen);
3215 if ((o->op_flags & OPf_SPECIAL) && (*p == ' ' && p[1] == '\0')) {
3216 U32 was_readonly = SvREADONLY(pat);
3220 sv_force_normal_flags(pat, 0);
3221 assert(!SvREADONLY(pat));
3224 SvREADONLY_off(pat);
3228 sv_setpvn(pat, "\\s+", 3);
3230 SvFLAGS(pat) |= was_readonly;
3232 p = SvPV_const(pat, plen);
3233 pm->op_pmflags |= PMf_SKIPWHITE;
3236 pm->op_pmdynflags |= PMdf_UTF8;
3237 /* FIXME - can we make this function take const char * args? */
3238 PM_SETRE(pm, CALLREGCOMP(aTHX_ (char*)p, (char*)p + plen, pm));
3239 if (strEQ("\\s+", PM_GETRE(pm)->precomp))
3240 pm->op_pmflags |= PMf_WHITE;
3242 op_getmad(expr,(OP*)pm,'e');
3248 if (pm->op_pmflags & PMf_KEEP || !(PL_hints & HINT_RE_EVAL))
3249 expr = newUNOP((!(PL_hints & HINT_RE_EVAL)
3251 : OP_REGCMAYBE),0,expr);
3253 NewOp(1101, rcop, 1, LOGOP);
3254 rcop->op_type = OP_REGCOMP;
3255 rcop->op_ppaddr = PL_ppaddr[OP_REGCOMP];
3256 rcop->op_first = scalar(expr);
3257 rcop->op_flags |= OPf_KIDS
3258 | ((PL_hints & HINT_RE_EVAL) ? OPf_SPECIAL : 0)
3259 | (reglist ? OPf_STACKED : 0);
3260 rcop->op_private = 1;
3263 rcop->op_targ = pad_alloc(rcop->op_type, SVs_PADTMP);
3265 /* /$x/ may cause an eval, since $x might be qr/(?{..})/ */
3268 /* establish postfix order */
3269 if (pm->op_pmflags & PMf_KEEP || !(PL_hints & HINT_RE_EVAL)) {
3271 rcop->op_next = expr;
3272 ((UNOP*)expr)->op_first->op_next = (OP*)rcop;
3275 rcop->op_next = LINKLIST(expr);
3276 expr->op_next = (OP*)rcop;
3279 prepend_elem(o->op_type, scalar((OP*)rcop), o);
3284 if (pm->op_pmflags & PMf_EVAL) {
3286 if (CopLINE(PL_curcop) < (line_t)PL_multi_end)
3287 CopLINE_set(PL_curcop, (line_t)PL_multi_end);
3289 else if (repl->op_type == OP_CONST)
3293 for (curop = LINKLIST(repl); curop!=repl; curop = LINKLIST(curop)) {
3294 if (PL_opargs[curop->op_type] & OA_DANGEROUS) {
3295 if (curop->op_type == OP_GV) {
3296 GV * const gv = cGVOPx_gv(curop);
3298 if (strchr("&`'123456789+-\016\022", *GvENAME(gv)))
3301 else if (curop->op_type == OP_RV2CV)
3303 else if (curop->op_type == OP_RV2SV ||
3304 curop->op_type == OP_RV2AV ||
3305 curop->op_type == OP_RV2HV ||
3306 curop->op_type == OP_RV2GV) {
3307 if (lastop && lastop->op_type != OP_GV) /*funny deref?*/
3310 else if (curop->op_type == OP_PADSV ||
3311 curop->op_type == OP_PADAV ||
3312 curop->op_type == OP_PADHV ||
3313 curop->op_type == OP_PADANY) {
3316 else if (curop->op_type == OP_PUSHRE)
3317 NOOP; /* Okay here, dangerous in newASSIGNOP */
3327 || PM_GETRE(pm)->reganch & ROPT_EVAL_SEEN))) {
3328 pm->op_pmflags |= PMf_CONST; /* const for long enough */
3329 pm->op_pmpermflags |= PMf_CONST; /* const for long enough */
3330 prepend_elem(o->op_type, scalar(repl), o);
3333 if (curop == repl && !PM_GETRE(pm)) { /* Has variables. */
3334 pm->op_pmflags |= PMf_MAYBE_CONST;
3335 pm->op_pmpermflags |= PMf_MAYBE_CONST;
3337 NewOp(1101, rcop, 1, LOGOP);
3338 rcop->op_type = OP_SUBSTCONT;
3339 rcop->op_ppaddr = PL_ppaddr[OP_SUBSTCONT];
3340 rcop->op_first = scalar(repl);
3341 rcop->op_flags |= OPf_KIDS;
3342 rcop->op_private = 1;
3345 /* establish postfix order */
3346 rcop->op_next = LINKLIST(repl);
3347 repl->op_next = (OP*)rcop;
3349 pm->op_pmreplroot = scalar((OP*)rcop);
3350 pm->op_pmreplstart = LINKLIST(rcop);
3359 Perl_newSVOP(pTHX_ I32 type, I32 flags, SV *sv)
3363 NewOp(1101, svop, 1, SVOP);
3364 svop->op_type = (OPCODE)type;
3365 svop->op_ppaddr = PL_ppaddr[type];
3367 svop->op_next = (OP*)svop;
3368 svop->op_flags = (U8)flags;
3369 if (PL_opargs[type] & OA_RETSCALAR)
3371 if (PL_opargs[type] & OA_TARGET)
3372 svop->op_targ = pad_alloc(type, SVs_PADTMP);
3373 return CHECKOP(type, svop);
3377 Perl_newPADOP(pTHX_ I32 type, I32 flags, SV *sv)
3381 NewOp(1101, padop, 1, PADOP);
3382 padop->op_type = (OPCODE)type;
3383 padop->op_ppaddr = PL_ppaddr[type];
3384 padop->op_padix = pad_alloc(type, SVs_PADTMP);
3385 SvREFCNT_dec(PAD_SVl(padop->op_padix));
3386 PAD_SETSV(padop->op_padix, sv);
3389 padop->op_next = (OP*)padop;
3390 padop->op_flags = (U8)flags;
3391 if (PL_opargs[type] & OA_RETSCALAR)
3393 if (PL_opargs[type] & OA_TARGET)
3394 padop->op_targ = pad_alloc(type, SVs_PADTMP);
3395 return CHECKOP(type, padop);
3399 Perl_newGVOP(pTHX_ I32 type, I32 flags, GV *gv)
3405 return newPADOP(type, flags, SvREFCNT_inc_simple(gv));
3407 return newSVOP(type, flags, SvREFCNT_inc_simple(gv));
3412 Perl_newPVOP(pTHX_ I32 type, I32 flags, char *pv)
3416 NewOp(1101, pvop, 1, PVOP);
3417 pvop->op_type = (OPCODE)type;
3418 pvop->op_ppaddr = PL_ppaddr[type];
3420 pvop->op_next = (OP*)pvop;
3421 pvop->op_flags = (U8)flags;
3422 if (PL_opargs[type] & OA_RETSCALAR)
3424 if (PL_opargs[type] & OA_TARGET)
3425 pvop->op_targ = pad_alloc(type, SVs_PADTMP);
3426 return CHECKOP(type, pvop);
3434 Perl_package(pTHX_ OP *o)
3443 save_hptr(&PL_curstash);
3444 save_item(PL_curstname);
3446 name = SvPV_const(cSVOPo->op_sv, len);
3447 PL_curstash = gv_stashpvn(name, len, TRUE);
3448 sv_setpvn(PL_curstname, name, len);
3450 PL_hints |= HINT_BLOCK_SCOPE;
3451 PL_copline = NOLINE;
3457 if (!PL_madskills) {
3462 pegop = newOP(OP_NULL,0);
3463 op_getmad(o,pegop,'P');
3473 Perl_utilize(pTHX_ int aver, I32 floor, OP *version, OP *idop, OP *arg)
3480 OP *pegop = newOP(OP_NULL,0);
3483 if (idop->op_type != OP_CONST)
3484 Perl_croak(aTHX_ "Module name must be constant");
3487 op_getmad(idop,pegop,'U');
3492 SV * const vesv = ((SVOP*)version)->op_sv;
3495 op_getmad(version,pegop,'V');
3496 if (!arg && !SvNIOKp(vesv)) {
3503 if (version->op_type != OP_CONST || !SvNIOKp(vesv))
3504 Perl_croak(aTHX_ "Version number must be constant number");
3506 /* Make copy of idop so we don't free it twice */
3507 pack = newSVOP(OP_CONST, 0, newSVsv(((SVOP*)idop)->op_sv));
3509 /* Fake up a method call to VERSION */
3510 meth = newSVpvs_share("VERSION");
3511 veop = convert(OP_ENTERSUB, OPf_STACKED|OPf_SPECIAL,
3512 append_elem(OP_LIST,
3513 prepend_elem(OP_LIST, pack, list(version)),
3514 newSVOP(OP_METHOD_NAMED, 0, meth)));
3518 /* Fake up an import/unimport */
3519 if (arg && arg->op_type == OP_STUB) {
3521 op_getmad(arg,pegop,'S');
3522 imop = arg; /* no import on explicit () */
3524 else if (SvNIOKp(((SVOP*)idop)->op_sv)) {
3525 imop = NULL; /* use 5.0; */
3527 idop->op_private |= OPpCONST_NOVER;
3533 op_getmad(arg,pegop,'A');
3535 /* Make copy of idop so we don't free it twice */
3536 pack = newSVOP(OP_CONST, 0, newSVsv(((SVOP*)idop)->op_sv));
3538 /* Fake up a method call to import/unimport */
3540 ? newSVpvs_share("import") : newSVpvs_share("unimport");
3541 imop = convert(OP_ENTERSUB, OPf_STACKED|OPf_SPECIAL,
3542 append_elem(OP_LIST,
3543 prepend_elem(OP_LIST, pack, list(arg)),
3544 newSVOP(OP_METHOD_NAMED, 0, meth)));
3547 /* Fake up the BEGIN {}, which does its thing immediately. */
3549 newSVOP(OP_CONST, 0, newSVpvs_share("BEGIN")),
3552 append_elem(OP_LINESEQ,
3553 append_elem(OP_LINESEQ,
3554 newSTATEOP(0, NULL, newUNOP(OP_REQUIRE, 0, idop)),
3555 newSTATEOP(0, NULL, veop)),
3556 newSTATEOP(0, NULL, imop) ));
3558 /* The "did you use incorrect case?" warning used to be here.
3559 * The problem is that on case-insensitive filesystems one
3560 * might get false positives for "use" (and "require"):
3561 * "use Strict" or "require CARP" will work. This causes
3562 * portability problems for the script: in case-strict
3563 * filesystems the script will stop working.
3565 * The "incorrect case" warning checked whether "use Foo"
3566 * imported "Foo" to your namespace, but that is wrong, too:
3567 * there is no requirement nor promise in the language that
3568 * a Foo.pm should or would contain anything in package "Foo".
3570 * There is very little Configure-wise that can be done, either:
3571 * the case-sensitivity of the build filesystem of Perl does not
3572 * help in guessing the case-sensitivity of the runtime environment.
3575 PL_hints |= HINT_BLOCK_SCOPE;
3576 PL_copline = NOLINE;
3578 PL_cop_seqmax++; /* Purely for B::*'s benefit */
3581 if (!PL_madskills) {
3582 /* FIXME - don't allocate pegop if !PL_madskills */
3591 =head1 Embedding Functions
3593 =for apidoc load_module
3595 Loads the module whose name is pointed to by the string part of name.
3596 Note that the actual module name, not its filename, should be given.
3597 Eg, "Foo::Bar" instead of "Foo/Bar.pm". flags can be any of
3598 PERL_LOADMOD_DENY, PERL_LOADMOD_NOIMPORT, or PERL_LOADMOD_IMPORT_OPS
3599 (or 0 for no flags). ver, if specified, provides version semantics
3600 similar to C<use Foo::Bar VERSION>. The optional trailing SV*
3601 arguments can be used to specify arguments to the module's import()
3602 method, similar to C<use Foo::Bar VERSION LIST>.
3607 Perl_load_module(pTHX_ U32 flags, SV *name, SV *ver, ...)
3610 va_start(args, ver);
3611 vload_module(flags, name, ver, &args);
3615 #ifdef PERL_IMPLICIT_CONTEXT
3617 Perl_load_module_nocontext(U32 flags, SV *name, SV *ver, ...)
3621 va_start(args, ver);
3622 vload_module(flags, name, ver, &args);
3628 Perl_vload_module(pTHX_ U32 flags, SV *name, SV *ver, va_list *args)
3633 OP * const modname = newSVOP(OP_CONST, 0, name);
3634 modname->op_private |= OPpCONST_BARE;
3636 veop = newSVOP(OP_CONST, 0, ver);
3640 if (flags & PERL_LOADMOD_NOIMPORT) {
3641 imop = sawparens(newNULLLIST());
3643 else if (flags & PERL_LOADMOD_IMPORT_OPS) {
3644 imop = va_arg(*args, OP*);
3649 sv = va_arg(*args, SV*);
3651 imop = append_elem(OP_LIST, imop, newSVOP(OP_CONST, 0, sv));
3652 sv = va_arg(*args, SV*);
3656 const line_t ocopline = PL_copline;
3657 COP * const ocurcop = PL_curcop;
3658 const int oexpect = PL_expect;
3660 utilize(!(flags & PERL_LOADMOD_DENY), start_subparse(FALSE, 0),
3661 veop, modname, imop);
3662 PL_expect = oexpect;
3663 PL_copline = ocopline;
3664 PL_curcop = ocurcop;
3669 Perl_dofile(pTHX_ OP *term, I32 force_builtin)
3675 if (!force_builtin) {
3676 gv = gv_fetchpvs("do", GV_NOTQUAL, SVt_PVCV);
3677 if (!(gv && GvCVu(gv) && GvIMPORTED_CV(gv))) {
3678 GV * const * const gvp = (GV**)hv_fetchs(PL_globalstash, "do", FALSE);
3679 gv = gvp ? *gvp : NULL;
3683 if (gv && GvCVu(gv) && GvIMPORTED_CV(gv)) {
3684 doop = ck_subr(newUNOP(OP_ENTERSUB, OPf_STACKED,
3685 append_elem(OP_LIST, term,
3686 scalar(newUNOP(OP_RV2CV, 0,
3687 newGVOP(OP_GV, 0, gv))))));
3690 doop = newUNOP(OP_DOFILE, 0, scalar(term));
3696 Perl_newSLICEOP(pTHX_ I32 flags, OP *subscript, OP *listval)
3698 return newBINOP(OP_LSLICE, flags,
3699 list(force_list(subscript)),
3700 list(force_list(listval)) );
3704 S_is_list_assignment(pTHX_ register const OP *o)
3712 if ((o->op_type == OP_NULL) && (o->op_flags & OPf_KIDS))
3713 o = cUNOPo->op_first;
3715 flags = o->op_flags;
3717 if (type == OP_COND_EXPR) {
3718 const I32 t = is_list_assignment(cLOGOPo->op_first->op_sibling);
3719 const I32 f = is_list_assignment(cLOGOPo->op_first->op_sibling->op_sibling);
3724 yyerror("Assignment to both a list and a scalar");
3728 if (type == OP_LIST &&
3729 (flags & OPf_WANT) == OPf_WANT_SCALAR &&
3730 o->op_private & OPpLVAL_INTRO)
3733 if (type == OP_LIST || flags & OPf_PARENS ||
3734 type == OP_RV2AV || type == OP_RV2HV ||
3735 type == OP_ASLICE || type == OP_HSLICE)
3738 if (type == OP_PADAV || type == OP_PADHV)
3741 if (type == OP_RV2SV)
3748 Perl_newASSIGNOP(pTHX_ I32 flags, OP *left, I32 optype, OP *right)
3754 if (optype == OP_ANDASSIGN || optype == OP_ORASSIGN || optype == OP_DORASSIGN) {
3755 return newLOGOP(optype, 0,
3756 mod(scalar(left), optype),
3757 newUNOP(OP_SASSIGN, 0, scalar(right)));
3760 return newBINOP(optype, OPf_STACKED,
3761 mod(scalar(left), optype), scalar(right));
3765 if (is_list_assignment(left)) {
3769 /* Grandfathering $[ assignment here. Bletch.*/
3770 /* Only simple assignments like C<< ($[) = 1 >> are allowed */
3771 PL_eval_start = (left->op_type == OP_CONST) ? right : 0;
3772 left = mod(left, OP_AASSIGN);
3775 else if (left->op_type == OP_CONST) {
3777 /* Result of assignment is always 1 (or we'd be dead already) */
3778 return newSVOP(OP_CONST, 0, newSViv(1));
3780 curop = list(force_list(left));
3781 o = newBINOP(OP_AASSIGN, flags, list(force_list(right)), curop);
3782 o->op_private = (U8)(0 | (flags >> 8));
3784 /* PL_generation sorcery:
3785 * an assignment like ($a,$b) = ($c,$d) is easier than
3786 * ($a,$b) = ($c,$a), since there is no need for temporary vars.
3787 * To detect whether there are common vars, the global var
3788 * PL_generation is incremented for each assign op we compile.
3789 * Then, while compiling the assign op, we run through all the
3790 * variables on both sides of the assignment, setting a spare slot
3791 * in each of them to PL_generation. If any of them already have
3792 * that value, we know we've got commonality. We could use a
3793 * single bit marker, but then we'd have to make 2 passes, first
3794 * to clear the flag, then to test and set it. To find somewhere
3795 * to store these values, evil chicanery is done with SvCUR().
3798 if (!(left->op_private & OPpLVAL_INTRO)) {
3801 for (curop = LINKLIST(o); curop != o; curop = LINKLIST(curop)) {
3802 if (PL_opargs[curop->op_type] & OA_DANGEROUS) {
3803 if (curop->op_type == OP_GV) {
3804 GV *gv = cGVOPx_gv(curop);
3806 || (int)GvASSIGN_GENERATION(gv) == PL_generation)
3808 GvASSIGN_GENERATION_set(gv, PL_generation);
3810 else if (curop->op_type == OP_PADSV ||
3811 curop->op_type == OP_PADAV ||
3812 curop->op_type == OP_PADHV ||
3813 curop->op_type == OP_PADANY)
3815 if (PAD_COMPNAME_GEN(curop->op_targ)
3816 == (STRLEN)PL_generation)
3818 PAD_COMPNAME_GEN_set(curop->op_targ, PL_generation);
3821 else if (curop->op_type == OP_RV2CV)
3823 else if (curop->op_type == OP_RV2SV ||
3824 curop->op_type == OP_RV2AV ||
3825 curop->op_type == OP_RV2HV ||
3826 curop->op_type == OP_RV2GV) {
3827 if (lastop->op_type != OP_GV) /* funny deref? */
3830 else if (curop->op_type == OP_PUSHRE) {
3831 if (((PMOP*)curop)->op_pmreplroot) {
3833 GV *gv = (GV*)PAD_SVl(INT2PTR(PADOFFSET,
3834 ((PMOP*)curop)->op_pmreplroot));
3836 GV *gv = (GV*)((PMOP*)curop)->op_pmreplroot;
3839 || (int)GvASSIGN_GENERATION(gv) == PL_generation)
3841 GvASSIGN_GENERATION_set(gv, PL_generation);
3842 GvASSIGN_GENERATION_set(gv, PL_generation);
3851 o->op_private |= OPpASSIGN_COMMON;
3853 if (right && right->op_type == OP_SPLIT) {
3854 OP* tmpop = ((LISTOP*)right)->op_first;
3855 if (tmpop && (tmpop->op_type == OP_PUSHRE)) {
3856 PMOP * const pm = (PMOP*)tmpop;
3857 if (left->op_type == OP_RV2AV &&
3858 !(left->op_private & OPpLVAL_INTRO) &&
3859 !(o->op_private & OPpASSIGN_COMMON) )
3861 tmpop = ((UNOP*)left)->op_first;
3862 if (tmpop->op_type == OP_GV && !pm->op_pmreplroot) {
3864 pm->op_pmreplroot = INT2PTR(OP*, cPADOPx(tmpop)->op_padix);
3865 cPADOPx(tmpop)->op_padix = 0; /* steal it */
3867 pm->op_pmreplroot = (OP*)cSVOPx(tmpop)->op_sv;
3868 cSVOPx(tmpop)->op_sv = NULL; /* steal it */
3870 pm->op_pmflags |= PMf_ONCE;
3871 tmpop = cUNOPo->op_first; /* to list (nulled) */
3872 tmpop = ((UNOP*)tmpop)->op_first; /* to pushmark */
3873 tmpop->op_sibling = NULL; /* don't free split */
3874 right->op_next = tmpop->op_next; /* fix starting loc */
3876 op_getmad(o,right,'R'); /* blow off assign */
3878 op_free(o); /* blow off assign */
3880 right->op_flags &= ~OPf_WANT;
3881 /* "I don't know and I don't care." */
3886 if (PL_modcount < RETURN_UNLIMITED_NUMBER &&
3887 ((LISTOP*)right)->op_last->op_type == OP_CONST)
3889 SV *sv = ((SVOP*)((LISTOP*)right)->op_last)->op_sv;
3891 sv_setiv(sv, PL_modcount+1);
3899 right = newOP(OP_UNDEF, 0);
3900 if (right->op_type == OP_READLINE) {
3901 right->op_flags |= OPf_STACKED;
3902 return newBINOP(OP_NULL, flags, mod(scalar(left), OP_SASSIGN), scalar(right));
3905 PL_eval_start = right; /* Grandfathering $[ assignment here. Bletch.*/
3906 o = newBINOP(OP_SASSIGN, flags,
3907 scalar(right), mod(scalar(left), OP_SASSIGN) );
3913 o = newSVOP(OP_CONST, 0, newSViv(CopARYBASE_get(&PL_compiling)));
3914 o->op_private |= OPpCONST_ARYBASE;
3921 Perl_newSTATEOP(pTHX_ I32 flags, char *label, OP *o)
3924 const U32 seq = intro_my();
3927 NewOp(1101, cop, 1, COP);
3928 if (PERLDB_LINE && CopLINE(PL_curcop) && PL_curstash != PL_debstash) {
3929 cop->op_type = OP_DBSTATE;
3930 cop->op_ppaddr = PL_ppaddr[ OP_DBSTATE ];
3933 cop->op_type = OP_NEXTSTATE;
3934 cop->op_ppaddr = PL_ppaddr[ OP_NEXTSTATE ];
3936 cop->op_flags = (U8)flags;
3937 CopHINTS_set(cop, PL_hints);
3939 cop->op_private |= NATIVE_HINTS;
3941 CopHINTS_set(&PL_compiling, CopHINTS_get(cop));
3942 cop->op_next = (OP*)cop;
3945 cop->cop_label = label;
3946 PL_hints |= HINT_BLOCK_SCOPE;
3949 /* CopARYBASE is now "virtual", in that it's stored as a flag bit in
3950 CopHINTS and a possible value in cop_hints_hash, so no need to copy it.
3952 cop->cop_warnings = DUP_WARNINGS(PL_curcop->cop_warnings);
3953 if (specialCopIO(PL_curcop->cop_io))
3954 cop->cop_io = PL_curcop->cop_io;
3956 cop->cop_io = newSVsv(PL_curcop->cop_io) ;
3957 cop->cop_hints_hash = PL_curcop->cop_hints_hash;
3958 if (cop->cop_hints_hash) {
3960 cop->cop_hints_hash->refcounted_he_refcnt++;
3961 HINTS_REFCNT_UNLOCK;
3964 if (PL_copline == NOLINE)
3965 CopLINE_set(cop, CopLINE(PL_curcop));
3967 CopLINE_set(cop, PL_copline);
3968 PL_copline = NOLINE;
3971 CopFILE_set(cop, CopFILE(PL_curcop)); /* XXX share in a pvtable? */
3973 CopFILEGV_set(cop, CopFILEGV(PL_curcop));
3975 CopSTASH_set(cop, PL_curstash);
3977 if (PERLDB_LINE && PL_curstash != PL_debstash) {
3978 SV * const * const svp = av_fetch(CopFILEAVx(PL_curcop), (I32)CopLINE(cop), FALSE);
3979 if (svp && *svp != &PL_sv_undef ) {
3980 (void)SvIOK_on(*svp);
3981 SvIV_set(*svp, PTR2IV(cop));
3985 return prepend_elem(OP_LINESEQ, (OP*)cop, o);
3990 Perl_newLOGOP(pTHX_ I32 type, I32 flags, OP *first, OP *other)
3993 return new_logop(type, flags, &first, &other);
3997 S_new_logop(pTHX_ I32 type, I32 flags, OP** firstp, OP** otherp)
4002 OP *first = *firstp;
4003 OP * const other = *otherp;
4005 if (type == OP_XOR) /* Not short circuit, but here by precedence. */
4006 return newBINOP(type, flags, scalar(first), scalar(other));
4008 scalarboolean(first);
4009 /* optimize "!a && b" to "a || b", and "!a || b" to "a && b" */
4010 if (first->op_type == OP_NOT
4011 && (first->op_flags & OPf_SPECIAL)
4012 && (first->op_flags & OPf_KIDS)) {
4013 if (type == OP_AND || type == OP_OR) {
4019 first = *firstp = cUNOPo->op_first;
4021 first->op_next = o->op_next;
4022 cUNOPo->op_first = NULL;
4024 op_getmad(o,first,'O');
4030 if (first->op_type == OP_CONST) {
4031 if (first->op_private & OPpCONST_STRICT)
4032 no_bareword_allowed(first);
4033 else if ((first->op_private & OPpCONST_BARE) && ckWARN(WARN_BAREWORD))
4034 Perl_warner(aTHX_ packWARN(WARN_BAREWORD), "Bareword found in conditional");
4035 if ((type == OP_AND && SvTRUE(((SVOP*)first)->op_sv)) ||
4036 (type == OP_OR && !SvTRUE(((SVOP*)first)->op_sv)) ||
4037 (type == OP_DOR && !SvOK(((SVOP*)first)->op_sv))) {
4039 if (other->op_type == OP_CONST)
4040 other->op_private |= OPpCONST_SHORTCIRCUIT;
4042 OP *newop = newUNOP(OP_NULL, 0, other);
4043 op_getmad(first, newop, '1');
4044 newop->op_targ = type; /* set "was" field */
4051 /* check for C<my $x if 0>, or C<my($x,$y) if 0> */
4052 const OP *o2 = other;
4053 if ( ! (o2->op_type == OP_LIST
4054 && (( o2 = cUNOPx(o2)->op_first))
4055 && o2->op_type == OP_PUSHMARK
4056 && (( o2 = o2->op_sibling)) )
4059 if ((o2->op_type == OP_PADSV || o2->op_type == OP_PADAV
4060 || o2->op_type == OP_PADHV)
4061 && o2->op_private & OPpLVAL_INTRO
4062 && ckWARN(WARN_DEPRECATED))
4064 Perl_warner(aTHX_ packWARN(WARN_DEPRECATED),
4065 "Deprecated use of my() in false conditional");
4069 if (first->op_type == OP_CONST)
4070 first->op_private |= OPpCONST_SHORTCIRCUIT;
4072 first = newUNOP(OP_NULL, 0, first);
4073 op_getmad(other, first, '2');
4074 first->op_targ = type; /* set "was" field */
4081 else if ((first->op_flags & OPf_KIDS) && type != OP_DOR
4082 && ckWARN(WARN_MISC)) /* [#24076] Don't warn for <FH> err FOO. */
4084 const OP * const k1 = ((UNOP*)first)->op_first;
4085 const OP * const k2 = k1->op_sibling;
4087 switch (first->op_type)
4090 if (k2 && k2->op_type == OP_READLINE
4091 && (k2->op_flags & OPf_STACKED)
4092 && ((k1->op_flags & OPf_WANT) == OPf_WANT_SCALAR))
4094 warnop = k2->op_type;
4099 if (k1->op_type == OP_READDIR
4100 || k1->op_type == OP_GLOB
4101 || (k1->op_type == OP_NULL && k1->op_targ == OP_GLOB)
4102 || k1->op_type == OP_EACH)
4104 warnop = ((k1->op_type == OP_NULL)
4105 ? (OPCODE)k1->op_targ : k1->op_type);
4110 const line_t oldline = CopLINE(PL_curcop);
4111 CopLINE_set(PL_curcop, PL_copline);
4112 Perl_warner(aTHX_ packWARN(WARN_MISC),
4113 "Value of %s%s can be \"0\"; test with defined()",
4115 ((warnop == OP_READLINE || warnop == OP_GLOB)
4116 ? " construct" : "() operator"));
4117 CopLINE_set(PL_curcop, oldline);
4124 if (type == OP_ANDASSIGN || type == OP_ORASSIGN || type == OP_DORASSIGN)
4125 other->op_private |= OPpASSIGN_BACKWARDS; /* other is an OP_SASSIGN */
4127 NewOp(1101, logop, 1, LOGOP);
4129 logop->op_type = (OPCODE)type;
4130 logop->op_ppaddr = PL_ppaddr[type];
4131 logop->op_first = first;
4132 logop->op_flags = (U8)(flags | OPf_KIDS);
4133 logop->op_other = LINKLIST(other);
4134 logop->op_private = (U8)(1 | (flags >> 8));
4136 /* establish postfix order */
4137 logop->op_next = LINKLIST(first);
4138 first->op_next = (OP*)logop;
4139 first->op_sibling = other;
4141 CHECKOP(type,logop);
4143 o = newUNOP(OP_NULL, 0, (OP*)logop);
4150 Perl_newCONDOP(pTHX_ I32 flags, OP *first, OP *trueop, OP *falseop)
4158 return newLOGOP(OP_AND, 0, first, trueop);
4160 return newLOGOP(OP_OR, 0, first, falseop);
4162 scalarboolean(first);
4163 if (first->op_type == OP_CONST) {
4164 if (first->op_private & OPpCONST_BARE &&
4165 first->op_private & OPpCONST_STRICT) {
4166 no_bareword_allowed(first);
4168 if (SvTRUE(((SVOP*)first)->op_sv)) {
4171 trueop = newUNOP(OP_NULL, 0, trueop);
4172 op_getmad(first,trueop,'C');
4173 op_getmad(falseop,trueop,'e');
4175 /* FIXME for MAD - should there be an ELSE here? */
4185 falseop = newUNOP(OP_NULL, 0, falseop);
4186 op_getmad(first,falseop,'C');
4187 op_getmad(trueop,falseop,'t');
4189 /* FIXME for MAD - should there be an ELSE here? */
4197 NewOp(1101, logop, 1, LOGOP);
4198 logop->op_type = OP_COND_EXPR;
4199 logop->op_ppaddr = PL_ppaddr[OP_COND_EXPR];
4200 logop->op_first = first;
4201 logop->op_flags = (U8)(flags | OPf_KIDS);
4202 logop->op_private = (U8)(1 | (flags >> 8));
4203 logop->op_other = LINKLIST(trueop);
4204 logop->op_next = LINKLIST(falseop);
4206 CHECKOP(OP_COND_EXPR, /* that's logop->op_type */
4209 /* establish postfix order */
4210 start = LINKLIST(first);
4211 first->op_next = (OP*)logop;
4213 first->op_sibling = trueop;
4214 trueop->op_sibling = falseop;
4215 o = newUNOP(OP_NULL, 0, (OP*)logop);
4217 trueop->op_next = falseop->op_next = o;
4224 Perl_newRANGE(pTHX_ I32 flags, OP *left, OP *right)
4233 NewOp(1101, range, 1, LOGOP);
4235 range->op_type = OP_RANGE;
4236 range->op_ppaddr = PL_ppaddr[OP_RANGE];
4237 range->op_first = left;
4238 range->op_flags = OPf_KIDS;
4239 leftstart = LINKLIST(left);
4240 range->op_other = LINKLIST(right);
4241 range->op_private = (U8)(1 | (flags >> 8));
4243 left->op_sibling = right;
4245 range->op_next = (OP*)range;
4246 flip = newUNOP(OP_FLIP, flags, (OP*)range);
4247 flop = newUNOP(OP_FLOP, 0, flip);
4248 o = newUNOP(OP_NULL, 0, flop);
4250 range->op_next = leftstart;
4252 left->op_next = flip;
4253 right->op_next = flop;
4255 range->op_targ = pad_alloc(OP_RANGE, SVs_PADMY);
4256 sv_upgrade(PAD_SV(range->op_targ), SVt_PVNV);
4257 flip->op_targ = pad_alloc(OP_RANGE, SVs_PADMY);
4258 sv_upgrade(PAD_SV(flip->op_targ), SVt_PVNV);
4260 flip->op_private = left->op_type == OP_CONST ? OPpFLIP_LINENUM : 0;
4261 flop->op_private = right->op_type == OP_CONST ? OPpFLIP_LINENUM : 0;
4264 if (!flip->op_private || !flop->op_private)
4265 linklist(o); /* blow off optimizer unless constant */
4271 Perl_newLOOPOP(pTHX_ I32 flags, I32 debuggable, OP *expr, OP *block)
4276 const bool once = block && block->op_flags & OPf_SPECIAL &&
4277 (block->op_type == OP_ENTERSUB || block->op_type == OP_NULL);
4279 PERL_UNUSED_ARG(debuggable);
4282 if (once && expr->op_type == OP_CONST && !SvTRUE(((SVOP*)expr)->op_sv))
4283 return block; /* do {} while 0 does once */
4284 if (expr->op_type == OP_READLINE || expr->op_type == OP_GLOB
4285 || (expr->op_type == OP_NULL && expr->op_targ == OP_GLOB)) {
4286 expr = newUNOP(OP_DEFINED, 0,
4287 newASSIGNOP(0, newDEFSVOP(), 0, expr) );
4288 } else if (expr->op_flags & OPf_KIDS) {
4289 const OP * const k1 = ((UNOP*)expr)->op_first;
4290 const OP * const k2 = k1 ? k1->op_sibling : NULL;
4291 switch (expr->op_type) {
4293 if (k2 && k2->op_type == OP_READLINE
4294 && (k2->op_flags & OPf_STACKED)
4295 && ((k1->op_flags & OPf_WANT) == OPf_WANT_SCALAR))
4296 expr = newUNOP(OP_DEFINED, 0, expr);
4300 if (k1 && (k1->op_type == OP_READDIR
4301 || k1->op_type == OP_GLOB
4302 || (k1->op_type == OP_NULL && k1->op_targ == OP_GLOB)
4303 || k1->op_type == OP_EACH))
4304 expr = newUNOP(OP_DEFINED, 0, expr);
4310 /* if block is null, the next append_elem() would put UNSTACK, a scalar
4311 * op, in listop. This is wrong. [perl #27024] */
4313 block = newOP(OP_NULL, 0);
4314 listop = append_elem(OP_LINESEQ, block, newOP(OP_UNSTACK, 0));
4315 o = new_logop(OP_AND, 0, &expr, &listop);
4318 ((LISTOP*)listop)->op_last->op_next = LINKLIST(o);
4320 if (once && o != listop)
4321 o->op_next = ((LOGOP*)cUNOPo->op_first)->op_other;
4324 o = newUNOP(OP_NULL, 0, o); /* or do {} while 1 loses outer block */
4326 o->op_flags |= flags;
4328 o->op_flags |= OPf_SPECIAL; /* suppress POPBLOCK curpm restoration*/
4333 Perl_newWHILEOP(pTHX_ I32 flags, I32 debuggable, LOOP *loop, I32
4334 whileline, OP *expr, OP *block, OP *cont, I32 has_my)
4343 PERL_UNUSED_ARG(debuggable);
4346 if (expr->op_type == OP_READLINE || expr->op_type == OP_GLOB
4347 || (expr->op_type == OP_NULL && expr->op_targ == OP_GLOB)) {
4348 expr = newUNOP(OP_DEFINED, 0,
4349 newASSIGNOP(0, newDEFSVOP(), 0, expr) );
4350 } else if (expr->op_flags & OPf_KIDS) {
4351 const OP * const k1 = ((UNOP*)expr)->op_first;
4352 const OP * const k2 = (k1) ? k1->op_sibling : NULL;
4353 switch (expr->op_type) {
4355 if (k2 && k2->op_type == OP_READLINE
4356 && (k2->op_flags & OPf_STACKED)
4357 && ((k1->op_flags & OPf_WANT) == OPf_WANT_SCALAR))
4358 expr = newUNOP(OP_DEFINED, 0, expr);
4362 if (k1 && (k1->op_type == OP_READDIR
4363 || k1->op_type == OP_GLOB
4364 || (k1->op_type == OP_NULL && k1->op_targ == OP_GLOB)
4365 || k1->op_type == OP_EACH))
4366 expr = newUNOP(OP_DEFINED, 0, expr);
4373 block = newOP(OP_NULL, 0);
4374 else if (cont || has_my) {
4375 block = scope(block);
4379 next = LINKLIST(cont);
4382 OP * const unstack = newOP(OP_UNSTACK, 0);
4385 cont = append_elem(OP_LINESEQ, cont, unstack);
4389 listop = append_list(OP_LINESEQ, (LISTOP*)block, (LISTOP*)cont);
4391 redo = LINKLIST(listop);
4394 PL_copline = (line_t)whileline;
4396 o = new_logop(OP_AND, 0, &expr, &listop);
4397 if (o == expr && o->op_type == OP_CONST && !SvTRUE(cSVOPo->op_sv)) {
4398 op_free(expr); /* oops, it's a while (0) */
4400 return NULL; /* listop already freed by new_logop */
4403 ((LISTOP*)listop)->op_last->op_next =
4404 (o == listop ? redo : LINKLIST(o));
4410 NewOp(1101,loop,1,LOOP);
4411 loop->op_type = OP_ENTERLOOP;
4412 loop->op_ppaddr = PL_ppaddr[OP_ENTERLOOP];
4413 loop->op_private = 0;
4414 loop->op_next = (OP*)loop;
4417 o = newBINOP(OP_LEAVELOOP, 0, (OP*)loop, o);
4419 loop->op_redoop = redo;
4420 loop->op_lastop = o;
4421 o->op_private |= loopflags;
4424 loop->op_nextop = next;
4426 loop->op_nextop = o;
4428 o->op_flags |= flags;
4429 o->op_private |= (flags >> 8);
4434 Perl_newFOROP(pTHX_ I32 flags, char *label, line_t forline, OP *sv, OP *expr, OP *block, OP *cont)
4439 PADOFFSET padoff = 0;
4445 if (sv->op_type == OP_RV2SV) { /* symbol table variable */
4446 iterpflags = sv->op_private & OPpOUR_INTRO; /* for our $x () */
4447 sv->op_type = OP_RV2GV;
4448 sv->op_ppaddr = PL_ppaddr[OP_RV2GV];
4449 if (cGVOPx_gv(cUNOPx(sv)->op_first) == PL_defgv)
4450 iterpflags |= OPpITER_DEF;
4452 else if (sv->op_type == OP_PADSV) { /* private variable */
4453 iterpflags = sv->op_private & OPpLVAL_INTRO; /* for my $x () */
4454 padoff = sv->op_targ;
4463 else if (sv->op_type == OP_THREADSV) { /* per-thread variable */
4464 padoff = sv->op_targ;
4469 iterflags |= OPf_SPECIAL;
4475 Perl_croak(aTHX_ "Can't use %s for loop variable", PL_op_desc[sv->op_type]);
4476 if (padoff && strEQ(PAD_COMPNAME_PV(padoff), "$_"))
4477 iterpflags |= OPpITER_DEF;
4480 const PADOFFSET offset = pad_findmy("$_");
4481 if (offset == NOT_IN_PAD || PAD_COMPNAME_FLAGS_isOUR(offset)) {
4482 sv = newGVOP(OP_GV, 0, PL_defgv);
4487 iterpflags |= OPpITER_DEF;
4489 if (expr->op_type == OP_RV2AV || expr->op_type == OP_PADAV) {
4490 expr = mod(force_list(scalar(ref(expr, OP_ITER))), OP_GREPSTART);
4491 iterflags |= OPf_STACKED;
4493 else if (expr->op_type == OP_NULL &&
4494 (expr->op_flags & OPf_KIDS) &&
4495 ((BINOP*)expr)->op_first->op_type == OP_FLOP)
4497 /* Basically turn for($x..$y) into the same as for($x,$y), but we
4498 * set the STACKED flag to indicate that these values are to be
4499 * treated as min/max values by 'pp_iterinit'.
4501 const UNOP* const flip = (UNOP*)((UNOP*)((BINOP*)expr)->op_first)->op_first;
4502 LOGOP* const range = (LOGOP*) flip->op_first;
4503 OP* const left = range->op_first;
4504 OP* const right = left->op_sibling;
4507 range->op_flags &= ~OPf_KIDS;
4508 range->op_first = NULL;
4510 listop = (LISTOP*)newLISTOP(OP_LIST, 0, left, right);
4511 listop->op_first->op_next = range->op_next;
4512 left->op_next = range->op_other;
4513 right->op_next = (OP*)listop;
4514 listop->op_next = listop->op_first;
4517 op_getmad(expr,(OP*)listop,'O');
4521 expr = (OP*)(listop);
4523 iterflags |= OPf_STACKED;
4526 expr = mod(force_list(expr), OP_GREPSTART);
4529 loop = (LOOP*)list(convert(OP_ENTERITER, iterflags,
4530 append_elem(OP_LIST, expr, scalar(sv))));
4531 assert(!loop->op_next);
4532 /* for my $x () sets OPpLVAL_INTRO;
4533 * for our $x () sets OPpOUR_INTRO */
4534 loop->op_private = (U8)iterpflags;
4535 #ifdef PL_OP_SLAB_ALLOC
4538 NewOp(1234,tmp,1,LOOP);
4539 Copy(loop,tmp,1,LISTOP);
4544 loop = PerlMemShared_realloc(loop, sizeof(LOOP));
4546 loop->op_targ = padoff;
4547 wop = newWHILEOP(flags, 1, loop, forline, newOP(OP_ITER, 0), block, cont, 0);
4549 op_getmad(madsv, (OP*)loop, 'v');
4550 PL_copline = forline;
4551 return newSTATEOP(0, label, wop);
4555 Perl_newLOOPEX(pTHX_ I32 type, OP *label)
4560 if (type != OP_GOTO || label->op_type == OP_CONST) {
4561 /* "last()" means "last" */
4562 if (label->op_type == OP_STUB && (label->op_flags & OPf_PARENS))
4563 o = newOP(type, OPf_SPECIAL);
4565 o = newPVOP(type, 0, savepv(label->op_type == OP_CONST
4566 ? SvPVx_nolen_const(((SVOP*)label)->op_sv)
4570 op_getmad(label,o,'L');
4576 /* Check whether it's going to be a goto &function */
4577 if (label->op_type == OP_ENTERSUB
4578 && !(label->op_flags & OPf_STACKED))
4579 label = newUNOP(OP_REFGEN, 0, mod(label, OP_REFGEN));
4580 o = newUNOP(type, OPf_STACKED, label);
4582 PL_hints |= HINT_BLOCK_SCOPE;
4586 /* if the condition is a literal array or hash
4587 (or @{ ... } etc), make a reference to it.
4590 S_ref_array_or_hash(pTHX_ OP *cond)
4593 && (cond->op_type == OP_RV2AV
4594 || cond->op_type == OP_PADAV
4595 || cond->op_type == OP_RV2HV
4596 || cond->op_type == OP_PADHV))
4598 return newUNOP(OP_REFGEN,
4599 0, mod(cond, OP_REFGEN));
4605 /* These construct the optree fragments representing given()
4608 entergiven and enterwhen are LOGOPs; the op_other pointer
4609 points up to the associated leave op. We need this so we
4610 can put it in the context and make break/continue work.
4611 (Also, of course, pp_enterwhen will jump straight to
4612 op_other if the match fails.)
4617 S_newGIVWHENOP(pTHX_ OP *cond, OP *block,
4618 I32 enter_opcode, I32 leave_opcode,
4619 PADOFFSET entertarg)
4625 NewOp(1101, enterop, 1, LOGOP);
4626 enterop->op_type = enter_opcode;
4627 enterop->op_ppaddr = PL_ppaddr[enter_opcode];
4628 enterop->op_flags = (U8) OPf_KIDS;
4629 enterop->op_targ = ((entertarg == NOT_IN_PAD) ? 0 : entertarg);
4630 enterop->op_private = 0;
4632 o = newUNOP(leave_opcode, 0, (OP *) enterop);
4635 enterop->op_first = scalar(cond);
4636 cond->op_sibling = block;
4638 o->op_next = LINKLIST(cond);
4639 cond->op_next = (OP *) enterop;
4642 /* This is a default {} block */
4643 enterop->op_first = block;
4644 enterop->op_flags |= OPf_SPECIAL;
4646 o->op_next = (OP *) enterop;
4649 CHECKOP(enter_opcode, enterop); /* Currently does nothing, since
4650 entergiven and enterwhen both
4653 enterop->op_next = LINKLIST(block);
4654 block->op_next = enterop->op_other = o;
4659 /* Does this look like a boolean operation? For these purposes
4660 a boolean operation is:
4661 - a subroutine call [*]
4662 - a logical connective
4663 - a comparison operator
4664 - a filetest operator, with the exception of -s -M -A -C
4665 - defined(), exists() or eof()
4666 - /$re/ or $foo =~ /$re/
4668 [*] possibly surprising
4672 S_looks_like_bool(pTHX_ const OP *o)
4675 switch(o->op_type) {
4677 return looks_like_bool(cLOGOPo->op_first);
4681 looks_like_bool(cLOGOPo->op_first)
4682 && looks_like_bool(cLOGOPo->op_first->op_sibling));
4686 case OP_NOT: case OP_XOR:
4687 /* Note that OP_DOR is not here */
4689 case OP_EQ: case OP_NE: case OP_LT:
4690 case OP_GT: case OP_LE: case OP_GE:
4692 case OP_I_EQ: case OP_I_NE: case OP_I_LT:
4693 case OP_I_GT: case OP_I_LE: case OP_I_GE:
4695 case OP_SEQ: case OP_SNE: case OP_SLT:
4696 case OP_SGT: case OP_SLE: case OP_SGE:
4700 case OP_FTRREAD: case OP_FTRWRITE: case OP_FTREXEC:
4701 case OP_FTEREAD: case OP_FTEWRITE: case OP_FTEEXEC:
4702 case OP_FTIS: case OP_FTEOWNED: case OP_FTROWNED:
4703 case OP_FTZERO: case OP_FTSOCK: case OP_FTCHR:
4704 case OP_FTBLK: case OP_FTFILE: case OP_FTDIR:
4705 case OP_FTPIPE: case OP_FTLINK: case OP_FTSUID:
4706 case OP_FTSGID: case OP_FTSVTX: case OP_FTTTY:
4707 case OP_FTTEXT: case OP_FTBINARY:
4709 case OP_DEFINED: case OP_EXISTS:
4710 case OP_MATCH: case OP_EOF:
4715 /* Detect comparisons that have been optimized away */
4716 if (cSVOPo->op_sv == &PL_sv_yes
4717 || cSVOPo->op_sv == &PL_sv_no)
4728 Perl_newGIVENOP(pTHX_ OP *cond, OP *block, PADOFFSET defsv_off)
4732 return newGIVWHENOP(
4733 ref_array_or_hash(cond),
4735 OP_ENTERGIVEN, OP_LEAVEGIVEN,
4739 /* If cond is null, this is a default {} block */
4741 Perl_newWHENOP(pTHX_ OP *cond, OP *block)
4743 const bool cond_llb = (!cond || looks_like_bool(cond));
4749 cond_op = newBINOP(OP_SMARTMATCH, OPf_SPECIAL,
4751 scalar(ref_array_or_hash(cond)));
4754 return newGIVWHENOP(
4756 append_elem(block->op_type, block, newOP(OP_BREAK, OPf_SPECIAL)),
4757 OP_ENTERWHEN, OP_LEAVEWHEN, 0);
4761 =for apidoc cv_undef
4763 Clear out all the active components of a CV. This can happen either
4764 by an explicit C<undef &foo>, or by the reference count going to zero.
4765 In the former case, we keep the CvOUTSIDE pointer, so that any anonymous
4766 children can still follow the full lexical scope chain.
4772 Perl_cv_undef(pTHX_ CV *cv)
4776 if (CvFILE(cv) && !CvISXSUB(cv)) {
4777 /* for XSUBs CvFILE point directly to static memory; __FILE__ */
4778 Safefree(CvFILE(cv));
4783 if (!CvISXSUB(cv) && CvROOT(cv)) {
4784 if (SvTYPE(cv) == SVt_PVCV && CvDEPTH(cv))
4785 Perl_croak(aTHX_ "Can't undef active subroutine");
4788 PAD_SAVE_SETNULLPAD();
4790 op_free(CvROOT(cv));
4795 SvPOK_off((SV*)cv); /* forget prototype */
4800 /* remove CvOUTSIDE unless this is an undef rather than a free */
4801 if (!SvREFCNT(cv) && CvOUTSIDE(cv)) {
4802 if (!CvWEAKOUTSIDE(cv))
4803 SvREFCNT_dec(CvOUTSIDE(cv));
4804 CvOUTSIDE(cv) = NULL;
4807 SvREFCNT_dec((SV*)CvXSUBANY(cv).any_ptr);
4810 if (CvISXSUB(cv) && CvXSUB(cv)) {
4813 /* delete all flags except WEAKOUTSIDE */
4814 CvFLAGS(cv) &= CVf_WEAKOUTSIDE;
4818 Perl_cv_ckproto_len(pTHX_ const CV *cv, const GV *gv, const char *p,
4821 /* Can't just use a strcmp on the prototype, as CONSTSUBs "cheat" by
4822 relying on SvCUR, and doubling up the buffer to hold CvFILE(). */
4823 if (((!p != !SvPOK(cv)) /* One has prototype, one has not. */
4824 || (p && (len != SvCUR(cv) /* Not the same length. */
4825 || memNE(p, SvPVX_const(cv), len))))
4826 && ckWARN_d(WARN_PROTOTYPE)) {
4827 SV* const msg = sv_newmortal();
4831 gv_efullname3(name = sv_newmortal(), gv, NULL);
4832 sv_setpv(msg, "Prototype mismatch:");
4834 Perl_sv_catpvf(aTHX_ msg, " sub %"SVf, (void*)name);
4836 Perl_sv_catpvf(aTHX_ msg, " (%"SVf")", (void*)cv);
4838 sv_catpvs(msg, ": none");
4839 sv_catpvs(msg, " vs ");
4841 Perl_sv_catpvf(aTHX_ msg, "(%.*s)", (int) len, p);
4843 sv_catpvs(msg, "none");
4844 Perl_warner(aTHX_ packWARN(WARN_PROTOTYPE), "%"SVf, (void*)msg);
4848 static void const_sv_xsub(pTHX_ CV* cv);
4852 =head1 Optree Manipulation Functions
4854 =for apidoc cv_const_sv
4856 If C<cv> is a constant sub eligible for inlining. returns the constant
4857 value returned by the sub. Otherwise, returns NULL.
4859 Constant subs can be created with C<newCONSTSUB> or as described in
4860 L<perlsub/"Constant Functions">.
4865 Perl_cv_const_sv(pTHX_ CV *cv)
4867 PERL_UNUSED_CONTEXT;
4870 if (!(SvTYPE(cv) == SVt_PVCV || SvTYPE(cv) == SVt_PVFM))
4872 return CvCONST(cv) ? (SV*)CvXSUBANY(cv).any_ptr : NULL;
4875 /* op_const_sv: examine an optree to determine whether it's in-lineable.
4876 * Can be called in 3 ways:
4879 * look for a single OP_CONST with attached value: return the value
4881 * cv && CvCLONE(cv) && !CvCONST(cv)
4883 * examine the clone prototype, and if contains only a single
4884 * OP_CONST referencing a pad const, or a single PADSV referencing
4885 * an outer lexical, return a non-zero value to indicate the CV is
4886 * a candidate for "constizing" at clone time
4890 * We have just cloned an anon prototype that was marked as a const
4891 * candidiate. Try to grab the current value, and in the case of
4892 * PADSV, ignore it if it has multiple references. Return the value.
4896 Perl_op_const_sv(pTHX_ const OP *o, CV *cv)
4904 if (o->op_type == OP_LINESEQ && cLISTOPo->op_first)
4905 o = cLISTOPo->op_first->op_sibling;
4907 for (; o; o = o->op_next) {
4908 const OPCODE type = o->op_type;
4910 if (sv && o->op_next == o)
4912 if (o->op_next != o) {
4913 if (type == OP_NEXTSTATE || type == OP_NULL || type == OP_PUSHMARK)
4915 if (type == OP_DBSTATE)
4918 if (type == OP_LEAVESUB || type == OP_RETURN)
4922 if (type == OP_CONST && cSVOPo->op_sv)
4924 else if (cv && type == OP_CONST) {
4925 sv = PAD_BASE_SV(CvPADLIST(cv), o->op_targ);
4929 else if (cv && type == OP_PADSV) {
4930 if (CvCONST(cv)) { /* newly cloned anon */
4931 sv = PAD_BASE_SV(CvPADLIST(cv), o->op_targ);
4932 /* the candidate should have 1 ref from this pad and 1 ref
4933 * from the parent */
4934 if (!sv || SvREFCNT(sv) != 2)
4941 if (PAD_COMPNAME_FLAGS(o->op_targ) & SVf_FAKE)
4942 sv = &PL_sv_undef; /* an arbitrary non-null value */
4957 Perl_newMYSUB(pTHX_ I32 floor, OP *o, OP *proto, OP *attrs, OP *block)
4960 /* This would be the return value, but the return cannot be reached. */
4961 OP* pegop = newOP(OP_NULL, 0);
4964 PERL_UNUSED_ARG(floor);
4974 Perl_croak(aTHX_ "\"my sub\" not yet implemented");
4976 NORETURN_FUNCTION_END;
4981 Perl_newSUB(pTHX_ I32 floor, OP *o, OP *proto, OP *block)
4983 return Perl_newATTRSUB(aTHX_ floor, o, proto, NULL, block);
4987 Perl_newATTRSUB(pTHX_ I32 floor, OP *o, OP *proto, OP *attrs, OP *block)
4994 register CV *cv = NULL;
4996 /* If the subroutine has no body, no attributes, and no builtin attributes
4997 then it's just a sub declaration, and we may be able to get away with
4998 storing with a placeholder scalar in the symbol table, rather than a
4999 full GV and CV. If anything is present then it will take a full CV to
5001 const I32 gv_fetch_flags
5002 = (block || attrs || (CvFLAGS(PL_compcv) & CVf_BUILTIN_ATTRS)
5004 ? GV_ADDMULTI : GV_ADDMULTI | GV_NOINIT;
5005 const char * const name = o ? SvPVx_nolen_const(cSVOPo->op_sv) : NULL;
5008 assert(proto->op_type == OP_CONST);
5009 ps = SvPVx_const(((SVOP*)proto)->op_sv, ps_len);
5014 if (!name && PERLDB_NAMEANON && CopLINE(PL_curcop)) {
5015 SV * const sv = sv_newmortal();
5016 Perl_sv_setpvf(aTHX_ sv, "%s[%s:%"IVdf"]",
5017 PL_curstash ? "__ANON__" : "__ANON__::__ANON__",
5018 CopFILE(PL_curcop), (IV)CopLINE(PL_curcop));
5019 aname = SvPVX_const(sv);
5024 gv = name ? gv_fetchsv(cSVOPo->op_sv, gv_fetch_flags, SVt_PVCV)
5025 : gv_fetchpv(aname ? aname
5026 : (PL_curstash ? "__ANON__" : "__ANON__::__ANON__"),
5027 gv_fetch_flags, SVt_PVCV);
5029 if (!PL_madskills) {
5038 if (SvTYPE(gv) != SVt_PVGV) { /* Maybe prototype now, and had at
5039 maximum a prototype before. */
5040 if (SvTYPE(gv) > SVt_NULL) {
5041 if (!SvPOK((SV*)gv) && !(SvIOK((SV*)gv) && SvIVX((SV*)gv) == -1)
5042 && ckWARN_d(WARN_PROTOTYPE))
5044 Perl_warner(aTHX_ packWARN(WARN_PROTOTYPE), "Runaway prototype");
5046 cv_ckproto_len((CV*)gv, NULL, ps, ps_len);
5049 sv_setpvn((SV*)gv, ps, ps_len);
5051 sv_setiv((SV*)gv, -1);
5052 SvREFCNT_dec(PL_compcv);
5053 cv = PL_compcv = NULL;
5054 PL_sub_generation++;
5058 cv = (!name || GvCVGEN(gv)) ? NULL : GvCV(gv);
5060 #ifdef GV_UNIQUE_CHECK
5061 if (cv && GvUNIQUE(gv) && SvREADONLY(cv)) {
5062 Perl_croak(aTHX_ "Can't define subroutine %s (GV is unique)", name);
5066 if (!block || !ps || *ps || attrs
5067 || (CvFLAGS(PL_compcv) & CVf_BUILTIN_ATTRS)
5069 || block->op_type == OP_NULL
5074 const_sv = op_const_sv(block, NULL);
5077 const bool exists = CvROOT(cv) || CvXSUB(cv);
5079 #ifdef GV_UNIQUE_CHECK
5080 if (exists && GvUNIQUE(gv)) {
5081 Perl_croak(aTHX_ "Can't redefine unique subroutine %s", name);
5085 /* if the subroutine doesn't exist and wasn't pre-declared
5086 * with a prototype, assume it will be AUTOLOADed,
5087 * skipping the prototype check
5089 if (exists || SvPOK(cv))
5090 cv_ckproto_len(cv, gv, ps, ps_len);
5091 /* already defined (or promised)? */
5092 if (exists || GvASSUMECV(gv)) {
5095 || block->op_type == OP_NULL
5098 if (CvFLAGS(PL_compcv)) {
5099 /* might have had built-in attrs applied */
5100 CvFLAGS(cv) |= (CvFLAGS(PL_compcv) & CVf_BUILTIN_ATTRS);
5102 /* just a "sub foo;" when &foo is already defined */
5103 SAVEFREESV(PL_compcv);
5108 && block->op_type != OP_NULL
5111 if (ckWARN(WARN_REDEFINE)
5113 && (!const_sv || sv_cmp(cv_const_sv(cv), const_sv))))
5115 const line_t oldline = CopLINE(PL_curcop);
5116 if (PL_copline != NOLINE)
5117 CopLINE_set(PL_curcop, PL_copline);
5118 Perl_warner(aTHX_ packWARN(WARN_REDEFINE),
5119 CvCONST(cv) ? "Constant subroutine %s redefined"
5120 : "Subroutine %s redefined", name);
5121 CopLINE_set(PL_curcop, oldline);
5124 if (!PL_minus_c) /* keep old one around for madskills */
5127 /* (PL_madskills unset in used file.) */
5135 SvREFCNT_inc_simple_void_NN(const_sv);
5137 assert(!CvROOT(cv) && !CvCONST(cv));
5138 sv_setpvn((SV*)cv, "", 0); /* prototype is "" */
5139 CvXSUBANY(cv).any_ptr = const_sv;
5140 CvXSUB(cv) = const_sv_xsub;
5146 cv = newCONSTSUB(NULL, name, const_sv);
5148 PL_sub_generation++;
5152 SvREFCNT_dec(PL_compcv);
5160 /* Need to do a C<use attributes $stash_of_cv,\&cv,@attrs>
5161 * before we clobber PL_compcv.
5165 || block->op_type == OP_NULL
5169 /* Might have had built-in attributes applied -- propagate them. */
5170 CvFLAGS(cv) |= (CvFLAGS(PL_compcv) & CVf_BUILTIN_ATTRS);
5171 if (CvGV(cv) && GvSTASH(CvGV(cv)))
5172 stash = GvSTASH(CvGV(cv));
5173 else if (CvSTASH(cv))
5174 stash = CvSTASH(cv);
5176 stash = PL_curstash;
5179 /* possibly about to re-define existing subr -- ignore old cv */
5180 rcv = (SV*)PL_compcv;
5181 if (name && GvSTASH(gv))
5182 stash = GvSTASH(gv);
5184 stash = PL_curstash;
5186 apply_attrs(stash, rcv, attrs, FALSE);
5188 if (cv) { /* must reuse cv if autoloaded */
5195 || block->op_type == OP_NULL) && !PL_madskills
5198 /* got here with just attrs -- work done, so bug out */
5199 SAVEFREESV(PL_compcv);
5202 /* transfer PL_compcv to cv */
5204 CvFLAGS(cv) = CvFLAGS(PL_compcv);
5205 if (!CvWEAKOUTSIDE(cv))
5206 SvREFCNT_dec(CvOUTSIDE(cv));
5207 CvOUTSIDE(cv) = CvOUTSIDE(PL_compcv);
5208 CvOUTSIDE_SEQ(cv) = CvOUTSIDE_SEQ(PL_compcv);
5209 CvOUTSIDE(PL_compcv) = 0;
5210 CvPADLIST(cv) = CvPADLIST(PL_compcv);
5211 CvPADLIST(PL_compcv) = 0;
5212 /* inner references to PL_compcv must be fixed up ... */
5213 pad_fixup_inner_anons(CvPADLIST(cv), PL_compcv, cv);
5214 /* ... before we throw it away */
5215 SvREFCNT_dec(PL_compcv);
5217 if (PERLDB_INTER)/* Advice debugger on the new sub. */
5218 ++PL_sub_generation;
5225 if (strEQ(name, "import")) {
5226 PL_formfeed = (SV*)cv;
5227 Perl_warner(aTHX_ packWARN(WARN_VOID), "%lx\n", (long)cv);
5231 PL_sub_generation++;
5235 CvFILE_set_from_cop(cv, PL_curcop);
5236 CvSTASH(cv) = PL_curstash;
5239 sv_setpvn((SV*)cv, ps, ps_len);
5241 if (PL_error_count) {
5245 const char *s = strrchr(name, ':');
5247 if (strEQ(s, "BEGIN")) {
5248 const char not_safe[] =
5249 "BEGIN not safe after errors--compilation aborted";
5250 if (PL_in_eval & EVAL_KEEPERR)
5251 Perl_croak(aTHX_ not_safe);
5253 /* force display of errors found but not reported */
5254 sv_catpv(ERRSV, not_safe);
5255 Perl_croak(aTHX_ "%"SVf, (void*)ERRSV);
5265 CvROOT(cv) = newUNOP(OP_LEAVESUBLV, 0,
5266 mod(scalarseq(block), OP_LEAVESUBLV));
5269 /* This makes sub {}; work as expected. */
5270 if (block->op_type == OP_STUB) {
5271 OP* const newblock = newSTATEOP(0, NULL, 0);
5273 op_getmad(block,newblock,'B');
5279 CvROOT(cv) = newUNOP(OP_LEAVESUB, 0, scalarseq(block));
5281 CvROOT(cv)->op_private |= OPpREFCOUNTED;
5282 OpREFCNT_set(CvROOT(cv), 1);
5283 CvSTART(cv) = LINKLIST(CvROOT(cv));
5284 CvROOT(cv)->op_next = 0;
5285 CALL_PEEP(CvSTART(cv));
5287 /* now that optimizer has done its work, adjust pad values */
5289 pad_tidy(CvCLONE(cv) ? padtidy_SUBCLONE : padtidy_SUB);
5292 assert(!CvCONST(cv));
5293 if (ps && !*ps && op_const_sv(block, cv))
5297 if (name || aname) {
5299 const char * const tname = (name ? name : aname);
5301 if (PERLDB_SUBLINE && PL_curstash != PL_debstash) {
5302 SV * const sv = newSV(0);
5303 SV * const tmpstr = sv_newmortal();
5304 GV * const db_postponed = gv_fetchpvs("DB::postponed",
5305 GV_ADDMULTI, SVt_PVHV);
5308 Perl_sv_setpvf(aTHX_ sv, "%s:%ld-%ld",
5310 (long)PL_subline, (long)CopLINE(PL_curcop));
5311 gv_efullname3(tmpstr, gv, NULL);
5312 hv_store(GvHV(PL_DBsub), SvPVX_const(tmpstr), SvCUR(tmpstr), sv, 0);
5313 hv = GvHVn(db_postponed);
5314 if (HvFILL(hv) > 0 && hv_exists(hv, SvPVX_const(tmpstr), SvCUR(tmpstr))) {
5315 CV * const pcv = GvCV(db_postponed);
5321 call_sv((SV*)pcv, G_DISCARD);
5326 if ((s = strrchr(tname,':')))
5331 if (*s != 'B' && *s != 'E' && *s != 'C' && *s != 'I')
5334 if (strEQ(s, "BEGIN") && !PL_error_count) {
5335 const I32 oldscope = PL_scopestack_ix;
5337 SAVECOPFILE(&PL_compiling);
5338 SAVECOPLINE(&PL_compiling);
5341 PL_beginav = newAV();
5342 DEBUG_x( dump_sub(gv) );
5343 av_push(PL_beginav, (SV*)cv);
5344 GvCV(gv) = 0; /* cv has been hijacked */
5345 call_list(oldscope, PL_beginav);
5347 PL_curcop = &PL_compiling;
5348 CopHINTS_set(&PL_compiling, PL_hints);
5351 else if (strEQ(s, "END") && !PL_error_count) {
5354 DEBUG_x( dump_sub(gv) );
5355 av_unshift(PL_endav, 1);
5356 av_store(PL_endav, 0, (SV*)cv);
5357 GvCV(gv) = 0; /* cv has been hijacked */
5359 else if (strEQ(s, "CHECK") && !PL_error_count) {
5361 PL_checkav = newAV();
5362 DEBUG_x( dump_sub(gv) );
5363 if (PL_main_start && ckWARN(WARN_VOID))
5364 Perl_warner(aTHX_ packWARN(WARN_VOID), "Too late to run CHECK block");
5365 av_unshift(PL_checkav, 1);
5366 av_store(PL_checkav, 0, (SV*)cv);
5367 GvCV(gv) = 0; /* cv has been hijacked */
5369 else if (strEQ(s, "INIT") && !PL_error_count) {
5371 PL_initav = newAV();
5372 DEBUG_x( dump_sub(gv) );
5373 if (PL_main_start && ckWARN(WARN_VOID))
5374 Perl_warner(aTHX_ packWARN(WARN_VOID), "Too late to run INIT block");
5375 av_push(PL_initav, (SV*)cv);
5376 GvCV(gv) = 0; /* cv has been hijacked */
5381 PL_copline = NOLINE;
5386 /* XXX unsafe for threads if eval_owner isn't held */
5388 =for apidoc newCONSTSUB
5390 Creates a constant sub equivalent to Perl C<sub FOO () { 123 }> which is
5391 eligible for inlining at compile-time.
5397 Perl_newCONSTSUB(pTHX_ HV *stash, const char *name, SV *sv)
5402 const char *const temp_p = CopFILE(PL_curcop);
5403 const STRLEN len = temp_p ? strlen(temp_p) : 0;
5405 SV *const temp_sv = CopFILESV(PL_curcop);
5407 const char *const temp_p = temp_sv ? SvPV_const(temp_sv, len) : NULL;
5409 char *const file = savepvn(temp_p, temp_p ? len : 0);
5413 SAVECOPLINE(PL_curcop);
5414 CopLINE_set(PL_curcop, PL_copline);
5417 PL_hints &= ~HINT_BLOCK_SCOPE;
5420 SAVESPTR(PL_curstash);
5421 SAVECOPSTASH(PL_curcop);
5422 PL_curstash = stash;
5423 CopSTASH_set(PL_curcop,stash);
5426 /* file becomes the CvFILE. For an XS, it's supposed to be static storage,
5427 and so doesn't get free()d. (It's expected to be from the C pre-
5428 processor __FILE__ directive). But we need a dynamically allocated one,
5429 and we need it to get freed. */
5430 cv = newXS_flags(name, const_sv_xsub, file, "", XS_DYNAMIC_FILENAME);
5431 CvXSUBANY(cv).any_ptr = sv;
5436 CopSTASH_free(PL_curcop);
5444 Perl_newXS_flags(pTHX_ const char *name, XSUBADDR_t subaddr,
5445 const char *const filename, const char *const proto,
5448 CV *cv = newXS(name, subaddr, filename);
5450 if (flags & XS_DYNAMIC_FILENAME) {
5451 /* We need to "make arrangements" (ie cheat) to ensure that the
5452 filename lasts as long as the PVCV we just created, but also doesn't
5454 STRLEN filename_len = strlen(filename);
5455 STRLEN proto_and_file_len = filename_len;
5456 char *proto_and_file;
5460 proto_len = strlen(proto);
5461 proto_and_file_len += proto_len;
5463 Newx(proto_and_file, proto_and_file_len + 1, char);
5464 Copy(proto, proto_and_file, proto_len, char);
5465 Copy(filename, proto_and_file + proto_len, filename_len + 1, char);
5468 proto_and_file = savepvn(filename, filename_len);
5471 /* This gets free()d. :-) */
5472 sv_usepvn_flags((SV*)cv, proto_and_file, proto_and_file_len,
5473 SV_HAS_TRAILING_NUL);
5475 /* This gives us the correct prototype, rather than one with the
5476 file name appended. */
5477 SvCUR_set(cv, proto_len);
5481 CvFILE(cv) = proto_and_file + proto_len;
5483 sv_setpv((SV *)cv, proto);
5489 =for apidoc U||newXS
5491 Used by C<xsubpp> to hook up XSUBs as Perl subs. I<filename> needs to be
5492 static storage, as it is used directly as CvFILE(), without a copy being made.
5498 Perl_newXS(pTHX_ const char *name, XSUBADDR_t subaddr, const char *filename)
5501 GV * const gv = gv_fetchpv(name ? name :
5502 (PL_curstash ? "__ANON__" : "__ANON__::__ANON__"),
5503 GV_ADDMULTI, SVt_PVCV);
5507 Perl_croak(aTHX_ "panic: no address for '%s' in '%s'", name, filename);
5509 if ((cv = (name ? GvCV(gv) : NULL))) {
5511 /* just a cached method */
5515 else if (CvROOT(cv) || CvXSUB(cv) || GvASSUMECV(gv)) {
5516 /* already defined (or promised) */
5517 /* XXX It's possible for this HvNAME_get to return null, and get passed into strEQ */
5518 if (ckWARN(WARN_REDEFINE)) {
5519 GV * const gvcv = CvGV(cv);
5521 HV * const stash = GvSTASH(gvcv);
5523 const char *redefined_name = HvNAME_get(stash);
5524 if ( strEQ(redefined_name,"autouse") ) {
5525 const line_t oldline = CopLINE(PL_curcop);
5526 if (PL_copline != NOLINE)
5527 CopLINE_set(PL_curcop, PL_copline);
5528 Perl_warner(aTHX_ packWARN(WARN_REDEFINE),
5529 CvCONST(cv) ? "Constant subroutine %s redefined"
5530 : "Subroutine %s redefined"
5532 CopLINE_set(PL_curcop, oldline);
5542 if (cv) /* must reuse cv if autoloaded */
5546 sv_upgrade((SV *)cv, SVt_PVCV);
5550 PL_sub_generation++;
5554 (void)gv_fetchfile(filename);
5555 CvFILE(cv) = (char *)filename; /* NOTE: not copied, as it is expected to be
5556 an external constant string */
5558 CvXSUB(cv) = subaddr;
5561 const char *s = strrchr(name,':');
5567 if (*s != 'B' && *s != 'E' && *s != 'C' && *s != 'I')
5570 if (strEQ(s, "BEGIN")) {
5572 PL_beginav = newAV();
5573 av_push(PL_beginav, (SV*)cv);
5574 GvCV(gv) = 0; /* cv has been hijacked */
5576 else if (strEQ(s, "END")) {
5579 av_unshift(PL_endav, 1);
5580 av_store(PL_endav, 0, (SV*)cv);
5581 GvCV(gv) = 0; /* cv has been hijacked */
5583 else if (strEQ(s, "CHECK")) {
5585 PL_checkav = newAV();
5586 if (PL_main_start && ckWARN(WARN_VOID))
5587 Perl_warner(aTHX_ packWARN(WARN_VOID), "Too late to run CHECK block");
5588 av_unshift(PL_checkav, 1);
5589 av_store(PL_checkav, 0, (SV*)cv);
5590 GvCV(gv) = 0; /* cv has been hijacked */
5592 else if (strEQ(s, "INIT")) {
5594 PL_initav = newAV();
5595 if (PL_main_start && ckWARN(WARN_VOID))
5596 Perl_warner(aTHX_ packWARN(WARN_VOID), "Too late to run INIT block");
5597 av_push(PL_initav, (SV*)cv);
5598 GvCV(gv) = 0; /* cv has been hijacked */
5613 Perl_newFORM(pTHX_ I32 floor, OP *o, OP *block)
5618 OP* pegop = newOP(OP_NULL, 0);
5622 ? gv_fetchsv(cSVOPo->op_sv, GV_ADD, SVt_PVFM)
5623 : gv_fetchpvs("STDOUT", GV_ADD|GV_NOTQUAL, SVt_PVFM);
5625 #ifdef GV_UNIQUE_CHECK
5627 Perl_croak(aTHX_ "Bad symbol for form (GV is unique)");
5631 if ((cv = GvFORM(gv))) {
5632 if (ckWARN(WARN_REDEFINE)) {
5633 const line_t oldline = CopLINE(PL_curcop);
5634 if (PL_copline != NOLINE)
5635 CopLINE_set(PL_curcop, PL_copline);
5636 Perl_warner(aTHX_ packWARN(WARN_REDEFINE),
5637 o ? "Format %"SVf" redefined"
5638 : "Format STDOUT redefined", (void*)cSVOPo->op_sv);
5639 CopLINE_set(PL_curcop, oldline);
5646 CvFILE_set_from_cop(cv, PL_curcop);
5649 pad_tidy(padtidy_FORMAT);
5650 CvROOT(cv) = newUNOP(OP_LEAVEWRITE, 0, scalarseq(block));
5651 CvROOT(cv)->op_private |= OPpREFCOUNTED;
5652 OpREFCNT_set(CvROOT(cv), 1);
5653 CvSTART(cv) = LINKLIST(CvROOT(cv));
5654 CvROOT(cv)->op_next = 0;
5655 CALL_PEEP(CvSTART(cv));
5657 op_getmad(o,pegop,'n');
5658 op_getmad_weak(block, pegop, 'b');
5662 PL_copline = NOLINE;
5670 Perl_newANONLIST(pTHX_ OP *o)
5672 return newUNOP(OP_REFGEN, 0,
5673 mod(list(convert(OP_ANONLIST, 0, o)), OP_REFGEN));
5677 Perl_newANONHASH(pTHX_ OP *o)
5679 return newUNOP(OP_REFGEN, 0,
5680 mod(list(convert(OP_ANONHASH, 0, o)), OP_REFGEN));
5684 Perl_newANONSUB(pTHX_ I32 floor, OP *proto, OP *block)
5686 return newANONATTRSUB(floor, proto, NULL, block);
5690 Perl_newANONATTRSUB(pTHX_ I32 floor, OP *proto, OP *attrs, OP *block)
5692 return newUNOP(OP_REFGEN, 0,
5693 newSVOP(OP_ANONCODE, 0,
5694 (SV*)newATTRSUB(floor, 0, proto, attrs, block)));
5698 Perl_oopsAV(pTHX_ OP *o)
5701 switch (o->op_type) {
5703 o->op_type = OP_PADAV;
5704 o->op_ppaddr = PL_ppaddr[OP_PADAV];
5705 return ref(o, OP_RV2AV);
5708 o->op_type = OP_RV2AV;
5709 o->op_ppaddr = PL_ppaddr[OP_RV2AV];
5714 if (ckWARN_d(WARN_INTERNAL))
5715 Perl_warner(aTHX_ packWARN(WARN_INTERNAL), "oops: oopsAV");
5722 Perl_oopsHV(pTHX_ OP *o)
5725 switch (o->op_type) {
5728 o->op_type = OP_PADHV;
5729 o->op_ppaddr = PL_ppaddr[OP_PADHV];
5730 return ref(o, OP_RV2HV);
5734 o->op_type = OP_RV2HV;
5735 o->op_ppaddr = PL_ppaddr[OP_RV2HV];
5740 if (ckWARN_d(WARN_INTERNAL))
5741 Perl_warner(aTHX_ packWARN(WARN_INTERNAL), "oops: oopsHV");
5748 Perl_newAVREF(pTHX_ OP *o)
5751 if (o->op_type == OP_PADANY) {
5752 o->op_type = OP_PADAV;
5753 o->op_ppaddr = PL_ppaddr[OP_PADAV];
5756 else if ((o->op_type == OP_RV2AV || o->op_type == OP_PADAV)
5757 && ckWARN(WARN_DEPRECATED)) {
5758 Perl_warner(aTHX_ packWARN(WARN_DEPRECATED),
5759 "Using an array as a reference is deprecated");
5761 return newUNOP(OP_RV2AV, 0, scalar(o));
5765 Perl_newGVREF(pTHX_ I32 type, OP *o)
5767 if (type == OP_MAPSTART || type == OP_GREPSTART || type == OP_SORT)
5768 return newUNOP(OP_NULL, 0, o);
5769 return ref(newUNOP(OP_RV2GV, OPf_REF, o), type);
5773 Perl_newHVREF(pTHX_ OP *o)
5776 if (o->op_type == OP_PADANY) {
5777 o->op_type = OP_PADHV;
5778 o->op_ppaddr = PL_ppaddr[OP_PADHV];
5781 else if ((o->op_type == OP_RV2HV || o->op_type == OP_PADHV)
5782 && ckWARN(WARN_DEPRECATED)) {
5783 Perl_warner(aTHX_ packWARN(WARN_DEPRECATED),
5784 "Using a hash as a reference is deprecated");
5786 return newUNOP(OP_RV2HV, 0, scalar(o));
5790 Perl_newCVREF(pTHX_ I32 flags, OP *o)
5792 return newUNOP(OP_RV2CV, flags, scalar(o));
5796 Perl_newSVREF(pTHX_ OP *o)
5799 if (o->op_type == OP_PADANY) {
5800 o->op_type = OP_PADSV;
5801 o->op_ppaddr = PL_ppaddr[OP_PADSV];
5804 else if (o->op_type == OP_THREADSV && !(o->op_flags & OPpDONE_SVREF)) {
5805 o->op_flags |= OPpDONE_SVREF;
5808 return newUNOP(OP_RV2SV, 0, scalar(o));
5811 /* Check routines. See the comments at the top of this file for details
5812 * on when these are called */
5815 Perl_ck_anoncode(pTHX_ OP *o)
5817 cSVOPo->op_targ = pad_add_anon(cSVOPo->op_sv, o->op_type);
5819 cSVOPo->op_sv = NULL;
5824 Perl_ck_bitop(pTHX_ OP *o)
5827 #define OP_IS_NUMCOMPARE(op) \
5828 ((op) == OP_LT || (op) == OP_I_LT || \
5829 (op) == OP_GT || (op) == OP_I_GT || \
5830 (op) == OP_LE || (op) == OP_I_LE || \
5831 (op) == OP_GE || (op) == OP_I_GE || \
5832 (op) == OP_EQ || (op) == OP_I_EQ || \
5833 (op) == OP_NE || (op) == OP_I_NE || \
5834 (op) == OP_NCMP || (op) == OP_I_NCMP)
5835 o->op_private = (U8)(PL_hints & HINT_INTEGER);
5836 if (!(o->op_flags & OPf_STACKED) /* Not an assignment */
5837 && (o->op_type == OP_BIT_OR
5838 || o->op_type == OP_BIT_AND
5839 || o->op_type == OP_BIT_XOR))
5841 const OP * const left = cBINOPo->op_first;
5842 const OP * const right = left->op_sibling;
5843 if ((OP_IS_NUMCOMPARE(left->op_type) &&
5844 (left->op_flags & OPf_PARENS) == 0) ||
5845 (OP_IS_NUMCOMPARE(right->op_type) &&
5846 (right->op_flags & OPf_PARENS) == 0))
5847 if (ckWARN(WARN_PRECEDENCE))
5848 Perl_warner(aTHX_ packWARN(WARN_PRECEDENCE),
5849 "Possible precedence problem on bitwise %c operator",
5850 o->op_type == OP_BIT_OR ? '|'
5851 : o->op_type == OP_BIT_AND ? '&' : '^'
5858 Perl_ck_concat(pTHX_ OP *o)
5860 const OP * const kid = cUNOPo->op_first;
5861 PERL_UNUSED_CONTEXT;
5862 if (kid->op_type == OP_CONCAT && !(kid->op_private & OPpTARGET_MY) &&
5863 !(kUNOP->op_first->op_flags & OPf_MOD))
5864 o->op_flags |= OPf_STACKED;
5869 Perl_ck_spair(pTHX_ OP *o)
5872 if (o->op_flags & OPf_KIDS) {
5875 const OPCODE type = o->op_type;
5876 o = modkids(ck_fun(o), type);
5877 kid = cUNOPo->op_first;
5878 newop = kUNOP->op_first->op_sibling;
5880 const OPCODE type = newop->op_type;
5881 if (newop->op_sibling || !(PL_opargs[type] & OA_RETSCALAR) ||
5882 type == OP_PADAV || type == OP_PADHV ||
5883 type == OP_RV2AV || type == OP_RV2HV)
5887 op_getmad(kUNOP->op_first,newop,'K');
5889 op_free(kUNOP->op_first);
5891 kUNOP->op_first = newop;
5893 o->op_ppaddr = PL_ppaddr[++o->op_type];
5898 Perl_ck_delete(pTHX_ OP *o)
5902 if (o->op_flags & OPf_KIDS) {
5903 OP * const kid = cUNOPo->op_first;
5904 switch (kid->op_type) {
5906 o->op_flags |= OPf_SPECIAL;
5909 o->op_private |= OPpSLICE;
5912 o->op_flags |= OPf_SPECIAL;
5917 Perl_croak(aTHX_ "%s argument is not a HASH or ARRAY element or slice",
5926 Perl_ck_die(pTHX_ OP *o)
5929 if (VMSISH_HUSHED) o->op_private |= OPpHUSH_VMSISH;
5935 Perl_ck_eof(pTHX_ OP *o)
5939 if (o->op_flags & OPf_KIDS) {
5940 if (cLISTOPo->op_first->op_type == OP_STUB) {
5942 = newUNOP(o->op_type, OPf_SPECIAL, newGVOP(OP_GV, 0, PL_argvgv));
5944 op_getmad(o,newop,'O');
5956 Perl_ck_eval(pTHX_ OP *o)
5959 PL_hints |= HINT_BLOCK_SCOPE;
5960 if (o->op_flags & OPf_KIDS) {
5961 SVOP * const kid = (SVOP*)cUNOPo->op_first;
5964 o->op_flags &= ~OPf_KIDS;
5967 else if (kid->op_type == OP_LINESEQ || kid->op_type == OP_STUB) {
5973 cUNOPo->op_first = 0;
5978 NewOp(1101, enter, 1, LOGOP);
5979 enter->op_type = OP_ENTERTRY;
5980 enter->op_ppaddr = PL_ppaddr[OP_ENTERTRY];
5981 enter->op_private = 0;
5983 /* establish postfix order */
5984 enter->op_next = (OP*)enter;
5986 o = prepend_elem(OP_LINESEQ, (OP*)enter, (OP*)kid);
5987 o->op_type = OP_LEAVETRY;
5988 o->op_ppaddr = PL_ppaddr[OP_LEAVETRY];
5989 enter->op_other = o;
5990 op_getmad(oldo,o,'O');
6004 o = newUNOP(OP_ENTEREVAL, 0, newDEFSVOP());
6005 op_getmad(oldo,o,'O');
6007 o->op_targ = (PADOFFSET)PL_hints;
6008 if ((PL_hints & HINT_LOCALIZE_HH) != 0 && GvHV(PL_hintgv)) {
6009 /* Store a copy of %^H that pp_entereval can pick up */
6010 OP *hhop = newSVOP(OP_CONST, 0,
6011 (SV*)Perl_hv_copy_hints_hv(aTHX_ GvHV(PL_hintgv)));
6012 cUNOPo->op_first->op_sibling = hhop;
6013 o->op_private |= OPpEVAL_HAS_HH;
6019 Perl_ck_exit(pTHX_ OP *o)
6022 HV * const table = GvHV(PL_hintgv);
6024 SV * const * const svp = hv_fetchs(table, "vmsish_exit", FALSE);
6025 if (svp && *svp && SvTRUE(*svp))
6026 o->op_private |= OPpEXIT_VMSISH;
6028 if (VMSISH_HUSHED) o->op_private |= OPpHUSH_VMSISH;
6034 Perl_ck_exec(pTHX_ OP *o)
6036 if (o->op_flags & OPf_STACKED) {
6039 kid = cUNOPo->op_first->op_sibling;
6040 if (kid->op_type == OP_RV2GV)
6049 Perl_ck_exists(pTHX_ OP *o)
6053 if (o->op_flags & OPf_KIDS) {
6054 OP * const kid = cUNOPo->op_first;
6055 if (kid->op_type == OP_ENTERSUB) {
6056 (void) ref(kid, o->op_type);
6057 if (kid->op_type != OP_RV2CV && !PL_error_count)
6058 Perl_croak(aTHX_ "%s argument is not a subroutine name",
6060 o->op_private |= OPpEXISTS_SUB;
6062 else if (kid->op_type == OP_AELEM)
6063 o->op_flags |= OPf_SPECIAL;
6064 else if (kid->op_type != OP_HELEM)
6065 Perl_croak(aTHX_ "%s argument is not a HASH or ARRAY element",
6073 Perl_ck_rvconst(pTHX_ register OP *o)
6076 SVOP * const kid = (SVOP*)cUNOPo->op_first;
6078 o->op_private |= (PL_hints & HINT_STRICT_REFS);
6079 if (o->op_type == OP_RV2CV)
6080 o->op_private &= ~1;
6082 if (kid->op_type == OP_CONST) {
6085 SV * const kidsv = kid->op_sv;
6087 /* Is it a constant from cv_const_sv()? */
6088 if (SvROK(kidsv) && SvREADONLY(kidsv)) {
6089 SV * const rsv = SvRV(kidsv);
6090 const int svtype = SvTYPE(rsv);
6091 const char *badtype = NULL;
6093 switch (o->op_type) {
6095 if (svtype > SVt_PVMG)
6096 badtype = "a SCALAR";
6099 if (svtype != SVt_PVAV)
6100 badtype = "an ARRAY";
6103 if (svtype != SVt_PVHV)
6107 if (svtype != SVt_PVCV)
6112 Perl_croak(aTHX_ "Constant is not %s reference", badtype);
6115 else if ((o->op_type == OP_RV2HV || o->op_type == OP_RV2SV) &&
6116 (PL_hints & HINT_STRICT_REFS) && SvPOK(kidsv)) {
6117 /* If this is an access to a stash, disable "strict refs", because
6118 * stashes aren't auto-vivified at compile-time (unless we store
6119 * symbols in them), and we don't want to produce a run-time
6120 * stricture error when auto-vivifying the stash. */
6121 const char *s = SvPV_nolen(kidsv);
6122 const STRLEN l = SvCUR(kidsv);
6123 if (l > 1 && s[l-1] == ':' && s[l-2] == ':')
6124 o->op_private &= ~HINT_STRICT_REFS;
6126 if ((o->op_private & HINT_STRICT_REFS) && (kid->op_private & OPpCONST_BARE)) {
6127 const char *badthing;
6128 switch (o->op_type) {
6130 badthing = "a SCALAR";
6133 badthing = "an ARRAY";
6136 badthing = "a HASH";
6144 "Can't use bareword (\"%"SVf"\") as %s ref while \"strict refs\" in use",
6145 (void*)kidsv, badthing);
6148 * This is a little tricky. We only want to add the symbol if we
6149 * didn't add it in the lexer. Otherwise we get duplicate strict
6150 * warnings. But if we didn't add it in the lexer, we must at
6151 * least pretend like we wanted to add it even if it existed before,
6152 * or we get possible typo warnings. OPpCONST_ENTERED says
6153 * whether the lexer already added THIS instance of this symbol.
6155 iscv = (o->op_type == OP_RV2CV) * 2;
6157 gv = gv_fetchsv(kidsv,
6158 iscv | !(kid->op_private & OPpCONST_ENTERED),
6161 : o->op_type == OP_RV2SV
6163 : o->op_type == OP_RV2AV
6165 : o->op_type == OP_RV2HV
6168 } while (!gv && !(kid->op_private & OPpCONST_ENTERED) && !iscv++);
6170 kid->op_type = OP_GV;
6171 SvREFCNT_dec(kid->op_sv);
6173 /* XXX hack: dependence on sizeof(PADOP) <= sizeof(SVOP) */
6174 kPADOP->op_padix = pad_alloc(OP_GV, SVs_PADTMP);
6175 SvREFCNT_dec(PAD_SVl(kPADOP->op_padix));
6177 PAD_SETSV(kPADOP->op_padix, (SV*) SvREFCNT_inc_simple_NN(gv));
6179 kid->op_sv = SvREFCNT_inc_simple_NN(gv);
6181 kid->op_private = 0;
6182 kid->op_ppaddr = PL_ppaddr[OP_GV];
6189 Perl_ck_ftst(pTHX_ OP *o)
6192 const I32 type = o->op_type;
6194 if (o->op_flags & OPf_REF) {
6197 else if (o->op_flags & OPf_KIDS && cUNOPo->op_first->op_type != OP_STUB) {
6198 SVOP * const kid = (SVOP*)cUNOPo->op_first;
6199 const OPCODE kidtype = kid->op_type;
6201 if (kidtype == OP_CONST && (kid->op_private & OPpCONST_BARE)) {
6202 OP * const newop = newGVOP(type, OPf_REF,
6203 gv_fetchsv(kid->op_sv, GV_ADD, SVt_PVIO));
6205 op_getmad(o,newop,'O');
6211 if ((PL_hints & HINT_FILETEST_ACCESS) && OP_IS_FILETEST_ACCESS(o))
6212 o->op_private |= OPpFT_ACCESS;
6213 if (PL_check[kidtype] == MEMBER_TO_FPTR(Perl_ck_ftst)
6214 && kidtype != OP_STAT && kidtype != OP_LSTAT)
6215 o->op_private |= OPpFT_STACKED;
6223 if (type == OP_FTTTY)
6224 o = newGVOP(type, OPf_REF, PL_stdingv);
6226 o = newUNOP(type, 0, newDEFSVOP());
6227 op_getmad(oldo,o,'O');
6233 Perl_ck_fun(pTHX_ OP *o)
6236 const int type = o->op_type;
6237 register I32 oa = PL_opargs[type] >> OASHIFT;
6239 if (o->op_flags & OPf_STACKED) {
6240 if ((oa & OA_OPTIONAL) && (oa >> 4) && !((oa >> 4) & OA_OPTIONAL))
6243 return no_fh_allowed(o);
6246 if (o->op_flags & OPf_KIDS) {
6247 OP **tokid = &cLISTOPo->op_first;
6248 register OP *kid = cLISTOPo->op_first;
6252 if (kid->op_type == OP_PUSHMARK ||
6253 (kid->op_type == OP_NULL && kid->op_targ == OP_PUSHMARK))
6255 tokid = &kid->op_sibling;
6256 kid = kid->op_sibling;
6258 if (!kid && PL_opargs[type] & OA_DEFGV)
6259 *tokid = kid = newDEFSVOP();
6263 sibl = kid->op_sibling;
6265 if (!sibl && kid->op_type == OP_STUB) {
6272 /* list seen where single (scalar) arg expected? */
6273 if (numargs == 1 && !(oa >> 4)
6274 && kid->op_type == OP_LIST && type != OP_SCALAR)
6276 return too_many_arguments(o,PL_op_desc[type]);
6289 if ((type == OP_PUSH || type == OP_UNSHIFT)
6290 && !kid->op_sibling && ckWARN(WARN_SYNTAX))
6291 Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
6292 "Useless use of %s with no values",
6295 if (kid->op_type == OP_CONST &&
6296 (kid->op_private & OPpCONST_BARE))
6298 OP * const newop = newAVREF(newGVOP(OP_GV, 0,
6299 gv_fetchsv(((SVOP*)kid)->op_sv, GV_ADD, SVt_PVAV) ));
6300 if (ckWARN2(WARN_DEPRECATED, WARN_SYNTAX))
6301 Perl_warner(aTHX_ packWARN2(WARN_DEPRECATED, WARN_SYNTAX),
6302 "Array @%"SVf" missing the @ in argument %"IVdf" of %s()",
6303 (void*)((SVOP*)kid)->op_sv, (IV)numargs, PL_op_desc[type]);
6305 op_getmad(kid,newop,'K');
6310 kid->op_sibling = sibl;
6313 else if (kid->op_type != OP_RV2AV && kid->op_type != OP_PADAV)
6314 bad_type(numargs, "array", PL_op_desc[type], kid);
6318 if (kid->op_type == OP_CONST &&
6319 (kid->op_private & OPpCONST_BARE))
6321 OP * const newop = newHVREF(newGVOP(OP_GV, 0,
6322 gv_fetchsv(((SVOP*)kid)->op_sv, GV_ADD, SVt_PVHV) ));
6323 if (ckWARN2(WARN_DEPRECATED, WARN_SYNTAX))
6324 Perl_warner(aTHX_ packWARN2(WARN_DEPRECATED, WARN_SYNTAX),
6325 "Hash %%%"SVf" missing the %% in argument %"IVdf" of %s()",
6326 (void*)((SVOP*)kid)->op_sv, (IV)numargs, PL_op_desc[type]);
6328 op_getmad(kid,newop,'K');
6333 kid->op_sibling = sibl;
6336 else if (kid->op_type != OP_RV2HV && kid->op_type != OP_PADHV)
6337 bad_type(numargs, "hash", PL_op_desc[type], kid);
6342 OP * const newop = newUNOP(OP_NULL, 0, kid);
6343 kid->op_sibling = 0;
6345 newop->op_next = newop;
6347 kid->op_sibling = sibl;
6352 if (kid->op_type != OP_GV && kid->op_type != OP_RV2GV) {
6353 if (kid->op_type == OP_CONST &&
6354 (kid->op_private & OPpCONST_BARE))
6356 OP * const newop = newGVOP(OP_GV, 0,
6357 gv_fetchsv(((SVOP*)kid)->op_sv, GV_ADD, SVt_PVIO));
6358 if (!(o->op_private & 1) && /* if not unop */
6359 kid == cLISTOPo->op_last)
6360 cLISTOPo->op_last = newop;
6362 op_getmad(kid,newop,'K');
6368 else if (kid->op_type == OP_READLINE) {
6369 /* neophyte patrol: open(<FH>), close(<FH>) etc. */
6370 bad_type(numargs, "HANDLE", OP_DESC(o), kid);
6373 I32 flags = OPf_SPECIAL;
6377 /* is this op a FH constructor? */
6378 if (is_handle_constructor(o,numargs)) {
6379 const char *name = NULL;
6383 /* Set a flag to tell rv2gv to vivify
6384 * need to "prove" flag does not mean something
6385 * else already - NI-S 1999/05/07
6388 if (kid->op_type == OP_PADSV) {
6389 name = PAD_COMPNAME_PV(kid->op_targ);
6390 /* SvCUR of a pad namesv can't be trusted
6391 * (see PL_generation), so calc its length
6397 else if (kid->op_type == OP_RV2SV
6398 && kUNOP->op_first->op_type == OP_GV)
6400 GV * const gv = cGVOPx_gv(kUNOP->op_first);
6402 len = GvNAMELEN(gv);
6404 else if (kid->op_type == OP_AELEM
6405 || kid->op_type == OP_HELEM)
6408 OP *op = ((BINOP*)kid)->op_first;
6412 const char * const a =
6413 kid->op_type == OP_AELEM ?
6415 if (((op->op_type == OP_RV2AV) ||
6416 (op->op_type == OP_RV2HV)) &&
6417 (firstop = ((UNOP*)op)->op_first) &&
6418 (firstop->op_type == OP_GV)) {
6419 /* packagevar $a[] or $h{} */
6420 GV * const gv = cGVOPx_gv(firstop);
6428 else if (op->op_type == OP_PADAV
6429 || op->op_type == OP_PADHV) {
6430 /* lexicalvar $a[] or $h{} */
6431 const char * const padname =
6432 PAD_COMPNAME_PV(op->op_targ);
6441 name = SvPV_const(tmpstr, len);
6446 name = "__ANONIO__";
6453 targ = pad_alloc(OP_RV2GV, SVs_PADTMP);
6454 namesv = PAD_SVl(targ);
6455 SvUPGRADE(namesv, SVt_PV);
6457 sv_setpvn(namesv, "$", 1);
6458 sv_catpvn(namesv, name, len);
6461 kid->op_sibling = 0;
6462 kid = newUNOP(OP_RV2GV, flags, scalar(kid));
6463 kid->op_targ = targ;
6464 kid->op_private |= priv;
6466 kid->op_sibling = sibl;
6472 mod(scalar(kid), type);
6476 tokid = &kid->op_sibling;
6477 kid = kid->op_sibling;
6480 if (kid && kid->op_type != OP_STUB)
6481 return too_many_arguments(o,OP_DESC(o));
6482 o->op_private |= numargs;
6484 /* FIXME - should the numargs move as for the PERL_MAD case? */
6485 o->op_private |= numargs;
6487 return too_many_arguments(o,OP_DESC(o));
6491 else if (PL_opargs[type] & OA_DEFGV) {
6493 OP *newop = newUNOP(type, 0, newDEFSVOP());
6494 op_getmad(o,newop,'O');
6497 /* Ordering of these two is important to keep f_map.t passing. */
6499 return newUNOP(type, 0, newDEFSVOP());
6504 while (oa & OA_OPTIONAL)
6506 if (oa && oa != OA_LIST)
6507 return too_few_arguments(o,OP_DESC(o));
6513 Perl_ck_glob(pTHX_ OP *o)
6519 if ((o->op_flags & OPf_KIDS) && !cLISTOPo->op_first->op_sibling)
6520 append_elem(OP_GLOB, o, newDEFSVOP());
6522 if (!((gv = gv_fetchpvs("glob", GV_NOTQUAL, SVt_PVCV))
6523 && GvCVu(gv) && GvIMPORTED_CV(gv)))
6525 gv = gv_fetchpvs("CORE::GLOBAL::glob", 0, SVt_PVCV);
6528 #if !defined(PERL_EXTERNAL_GLOB)
6529 /* XXX this can be tightened up and made more failsafe. */
6530 if (!(gv && GvCVu(gv) && GvIMPORTED_CV(gv))) {
6533 Perl_load_module(aTHX_ PERL_LOADMOD_NOIMPORT,
6534 newSVpvs("File::Glob"), NULL, NULL, NULL);
6535 gv = gv_fetchpvs("CORE::GLOBAL::glob", 0, SVt_PVCV);
6536 glob_gv = gv_fetchpvs("File::Glob::csh_glob", 0, SVt_PVCV);
6537 GvCV(gv) = GvCV(glob_gv);
6538 SvREFCNT_inc_void((SV*)GvCV(gv));
6539 GvIMPORTED_CV_on(gv);
6542 #endif /* PERL_EXTERNAL_GLOB */
6544 if (gv && GvCVu(gv) && GvIMPORTED_CV(gv)) {
6545 append_elem(OP_GLOB, o,
6546 newSVOP(OP_CONST, 0, newSViv(PL_glob_index++)));
6547 o->op_type = OP_LIST;
6548 o->op_ppaddr = PL_ppaddr[OP_LIST];
6549 cLISTOPo->op_first->op_type = OP_PUSHMARK;
6550 cLISTOPo->op_first->op_ppaddr = PL_ppaddr[OP_PUSHMARK];
6551 cLISTOPo->op_first->op_targ = 0;
6552 o = newUNOP(OP_ENTERSUB, OPf_STACKED,
6553 append_elem(OP_LIST, o,
6554 scalar(newUNOP(OP_RV2CV, 0,
6555 newGVOP(OP_GV, 0, gv)))));
6556 o = newUNOP(OP_NULL, 0, ck_subr(o));
6557 o->op_targ = OP_GLOB; /* hint at what it used to be */
6560 gv = newGVgen("main");
6562 append_elem(OP_GLOB, o, newGVOP(OP_GV, 0, gv));
6568 Perl_ck_grep(pTHX_ OP *o)
6573 const OPCODE type = o->op_type == OP_GREPSTART ? OP_GREPWHILE : OP_MAPWHILE;
6576 o->op_ppaddr = PL_ppaddr[OP_GREPSTART];
6577 /* don't allocate gwop here, as we may leak it if PL_error_count > 0 */
6579 if (o->op_flags & OPf_STACKED) {
6582 kid = cLISTOPo->op_first->op_sibling;
6583 if (!cUNOPx(kid)->op_next)
6584 Perl_croak(aTHX_ "panic: ck_grep");
6585 for (k = cUNOPx(kid)->op_first; k; k = k->op_next) {
6588 NewOp(1101, gwop, 1, LOGOP);
6589 kid->op_next = (OP*)gwop;
6590 o->op_flags &= ~OPf_STACKED;
6592 kid = cLISTOPo->op_first->op_sibling;
6593 if (type == OP_MAPWHILE)
6600 kid = cLISTOPo->op_first->op_sibling;
6601 if (kid->op_type != OP_NULL)
6602 Perl_croak(aTHX_ "panic: ck_grep");
6603 kid = kUNOP->op_first;
6606 NewOp(1101, gwop, 1, LOGOP);
6607 gwop->op_type = type;
6608 gwop->op_ppaddr = PL_ppaddr[type];
6609 gwop->op_first = listkids(o);
6610 gwop->op_flags |= OPf_KIDS;
6611 gwop->op_other = LINKLIST(kid);
6612 kid->op_next = (OP*)gwop;
6613 offset = pad_findmy("$_");
6614 if (offset == NOT_IN_PAD || PAD_COMPNAME_FLAGS_isOUR(offset)) {
6615 o->op_private = gwop->op_private = 0;
6616 gwop->op_targ = pad_alloc(type, SVs_PADTMP);
6619 o->op_private = gwop->op_private = OPpGREP_LEX;
6620 gwop->op_targ = o->op_targ = offset;
6623 kid = cLISTOPo->op_first->op_sibling;
6624 if (!kid || !kid->op_sibling)
6625 return too_few_arguments(o,OP_DESC(o));
6626 for (kid = kid->op_sibling; kid; kid = kid->op_sibling)
6627 mod(kid, OP_GREPSTART);
6633 Perl_ck_index(pTHX_ OP *o)
6635 if (o->op_flags & OPf_KIDS) {
6636 OP *kid = cLISTOPo->op_first->op_sibling; /* get past pushmark */
6638 kid = kid->op_sibling; /* get past "big" */
6639 if (kid && kid->op_type == OP_CONST)
6640 fbm_compile(((SVOP*)kid)->op_sv, 0);
6646 Perl_ck_lengthconst(pTHX_ OP *o)
6648 /* XXX length optimization goes here */
6653 Perl_ck_lfun(pTHX_ OP *o)
6655 const OPCODE type = o->op_type;
6656 return modkids(ck_fun(o), type);
6660 Perl_ck_defined(pTHX_ OP *o) /* 19990527 MJD */
6662 if ((o->op_flags & OPf_KIDS) && ckWARN2(WARN_DEPRECATED, WARN_SYNTAX)) {
6663 switch (cUNOPo->op_first->op_type) {
6665 /* This is needed for
6666 if (defined %stash::)
6667 to work. Do not break Tk.
6669 break; /* Globals via GV can be undef */
6671 case OP_AASSIGN: /* Is this a good idea? */
6672 Perl_warner(aTHX_ packWARN2(WARN_DEPRECATED, WARN_SYNTAX),
6673 "defined(@array) is deprecated");
6674 Perl_warner(aTHX_ packWARN2(WARN_DEPRECATED, WARN_SYNTAX),
6675 "\t(Maybe you should just omit the defined()?)\n");
6678 /* This is needed for
6679 if (defined %stash::)
6680 to work. Do not break Tk.
6682 break; /* Globals via GV can be undef */
6684 Perl_warner(aTHX_ packWARN2(WARN_DEPRECATED, WARN_SYNTAX),
6685 "defined(%%hash) is deprecated");
6686 Perl_warner(aTHX_ packWARN2(WARN_DEPRECATED, WARN_SYNTAX),
6687 "\t(Maybe you should just omit the defined()?)\n");
6698 Perl_ck_rfun(pTHX_ OP *o)
6700 const OPCODE type = o->op_type;
6701 return refkids(ck_fun(o), type);
6705 Perl_ck_listiob(pTHX_ OP *o)
6709 kid = cLISTOPo->op_first;
6712 kid = cLISTOPo->op_first;
6714 if (kid->op_type == OP_PUSHMARK)
6715 kid = kid->op_sibling;
6716 if (kid && o->op_flags & OPf_STACKED)
6717 kid = kid->op_sibling;
6718 else if (kid && !kid->op_sibling) { /* print HANDLE; */
6719 if (kid->op_type == OP_CONST && kid->op_private & OPpCONST_BARE) {
6720 o->op_flags |= OPf_STACKED; /* make it a filehandle */
6721 kid = newUNOP(OP_RV2GV, OPf_REF, scalar(kid));
6722 cLISTOPo->op_first->op_sibling = kid;
6723 cLISTOPo->op_last = kid;
6724 kid = kid->op_sibling;
6729 append_elem(o->op_type, o, newDEFSVOP());
6735 Perl_ck_say(pTHX_ OP *o)
6738 o->op_type = OP_PRINT;
6739 cLISTOPo->op_last = cLISTOPo->op_last->op_sibling
6740 = newSVOP(OP_CONST, 0, newSVpvs("\n"));
6745 Perl_ck_smartmatch(pTHX_ OP *o)
6748 if (0 == (o->op_flags & OPf_SPECIAL)) {
6749 OP *first = cBINOPo->op_first;
6750 OP *second = first->op_sibling;
6752 /* Implicitly take a reference to an array or hash */
6753 first->op_sibling = NULL;
6754 first = cBINOPo->op_first = ref_array_or_hash(first);
6755 second = first->op_sibling = ref_array_or_hash(second);
6757 /* Implicitly take a reference to a regular expression */
6758 if (first->op_type == OP_MATCH) {
6759 first->op_type = OP_QR;
6760 first->op_ppaddr = PL_ppaddr[OP_QR];
6762 if (second->op_type == OP_MATCH) {
6763 second->op_type = OP_QR;
6764 second->op_ppaddr = PL_ppaddr[OP_QR];
6773 Perl_ck_sassign(pTHX_ OP *o)
6775 OP * const kid = cLISTOPo->op_first;
6776 /* has a disposable target? */
6777 if ((PL_opargs[kid->op_type] & OA_TARGLEX)
6778 && !(kid->op_flags & OPf_STACKED)
6779 /* Cannot steal the second time! */
6780 && !(kid->op_private & OPpTARGET_MY))
6782 OP * const kkid = kid->op_sibling;
6784 /* Can just relocate the target. */
6785 if (kkid && kkid->op_type == OP_PADSV
6786 && !(kkid->op_private & OPpLVAL_INTRO))
6788 kid->op_targ = kkid->op_targ;
6790 /* Now we do not need PADSV and SASSIGN. */
6791 kid->op_sibling = o->op_sibling; /* NULL */
6792 cLISTOPo->op_first = NULL;
6794 op_getmad(o,kid,'O');
6795 op_getmad(kkid,kid,'M');
6800 kid->op_private |= OPpTARGET_MY; /* Used for context settings */
6804 if (kid->op_sibling) {
6805 OP *kkid = kid->op_sibling;
6806 if (kkid->op_type == OP_PADSV
6807 && (kkid->op_private & OPpLVAL_INTRO)
6808 && SvPAD_STATE(*av_fetch(PL_comppad_name, kkid->op_targ, FALSE))) {
6809 o->op_private |= OPpASSIGN_STATE;
6810 /* hijacking PADSTALE for uninitialized state variables */
6811 SvPADSTALE_on(PAD_SVl(kkid->op_targ));
6818 Perl_ck_match(pTHX_ OP *o)
6821 if (o->op_type != OP_QR && PL_compcv) {
6822 const PADOFFSET offset = pad_findmy("$_");
6823 if (offset != NOT_IN_PAD && !(PAD_COMPNAME_FLAGS_isOUR(offset))) {
6824 o->op_targ = offset;
6825 o->op_private |= OPpTARGET_MY;
6828 if (o->op_type == OP_MATCH || o->op_type == OP_QR)
6829 o->op_private |= OPpRUNTIME;
6834 Perl_ck_method(pTHX_ OP *o)
6836 OP * const kid = cUNOPo->op_first;
6837 if (kid->op_type == OP_CONST) {
6838 SV* sv = kSVOP->op_sv;
6839 const char * const method = SvPVX_const(sv);
6840 if (!(strchr(method, ':') || strchr(method, '\''))) {
6842 if (!SvREADONLY(sv) || !SvFAKE(sv)) {
6843 sv = newSVpvn_share(method, SvCUR(sv), 0);
6846 kSVOP->op_sv = NULL;
6848 cmop = newSVOP(OP_METHOD_NAMED, 0, sv);
6850 op_getmad(o,cmop,'O');
6861 Perl_ck_null(pTHX_ OP *o)
6863 PERL_UNUSED_CONTEXT;
6868 Perl_ck_open(pTHX_ OP *o)
6871 HV * const table = GvHV(PL_hintgv);
6873 SV **svp = hv_fetchs(table, "open_IN", FALSE);
6875 const I32 mode = mode_from_discipline(*svp);
6876 if (mode & O_BINARY)
6877 o->op_private |= OPpOPEN_IN_RAW;
6878 else if (mode & O_TEXT)
6879 o->op_private |= OPpOPEN_IN_CRLF;
6882 svp = hv_fetchs(table, "open_OUT", FALSE);
6884 const I32 mode = mode_from_discipline(*svp);
6885 if (mode & O_BINARY)
6886 o->op_private |= OPpOPEN_OUT_RAW;
6887 else if (mode & O_TEXT)
6888 o->op_private |= OPpOPEN_OUT_CRLF;
6891 if (o->op_type == OP_BACKTICK)
6894 /* In case of three-arg dup open remove strictness
6895 * from the last arg if it is a bareword. */
6896 OP * const first = cLISTOPx(o)->op_first; /* The pushmark. */
6897 OP * const last = cLISTOPx(o)->op_last; /* The bareword. */
6901 if ((last->op_type == OP_CONST) && /* The bareword. */
6902 (last->op_private & OPpCONST_BARE) &&
6903 (last->op_private & OPpCONST_STRICT) &&
6904 (oa = first->op_sibling) && /* The fh. */
6905 (oa = oa->op_sibling) && /* The mode. */
6906 (oa->op_type == OP_CONST) &&
6907 SvPOK(((SVOP*)oa)->op_sv) &&
6908 (mode = SvPVX_const(((SVOP*)oa)->op_sv)) &&
6909 mode[0] == '>' && mode[1] == '&' && /* A dup open. */
6910 (last == oa->op_sibling)) /* The bareword. */
6911 last->op_private &= ~OPpCONST_STRICT;
6917 Perl_ck_repeat(pTHX_ OP *o)
6919 if (cBINOPo->op_first->op_flags & OPf_PARENS) {
6920 o->op_private |= OPpREPEAT_DOLIST;
6921 cBINOPo->op_first = force_list(cBINOPo->op_first);
6929 Perl_ck_require(pTHX_ OP *o)
6934 if (o->op_flags & OPf_KIDS) { /* Shall we supply missing .pm? */
6935 SVOP * const kid = (SVOP*)cUNOPo->op_first;
6937 if (kid->op_type == OP_CONST && (kid->op_private & OPpCONST_BARE)) {
6938 SV * const sv = kid->op_sv;
6939 U32 was_readonly = SvREADONLY(sv);
6944 sv_force_normal_flags(sv, 0);
6945 assert(!SvREADONLY(sv));
6952 for (s = SvPVX(sv); *s; s++) {
6953 if (*s == ':' && s[1] == ':') {
6954 const STRLEN len = strlen(s+2)+1;
6956 Move(s+2, s+1, len, char);
6957 SvCUR_set(sv, SvCUR(sv) - 1);
6960 sv_catpvs(sv, ".pm");
6961 SvFLAGS(sv) |= was_readonly;
6965 if (!(o->op_flags & OPf_SPECIAL)) { /* Wasn't written as CORE::require */
6966 /* handle override, if any */
6967 gv = gv_fetchpvs("require", GV_NOTQUAL, SVt_PVCV);
6968 if (!(gv && GvCVu(gv) && GvIMPORTED_CV(gv))) {
6969 GV * const * const gvp = (GV**)hv_fetchs(PL_globalstash, "require", FALSE);
6970 gv = gvp ? *gvp : NULL;
6974 if (gv && GvCVu(gv) && GvIMPORTED_CV(gv)) {
6975 OP * const kid = cUNOPo->op_first;
6978 cUNOPo->op_first = 0;
6982 newop = ck_subr(newUNOP(OP_ENTERSUB, OPf_STACKED,
6983 append_elem(OP_LIST, kid,
6984 scalar(newUNOP(OP_RV2CV, 0,
6987 op_getmad(o,newop,'O');
6995 Perl_ck_return(pTHX_ OP *o)
6998 if (CvLVALUE(PL_compcv)) {
7000 for (kid = cLISTOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
7001 mod(kid, OP_LEAVESUBLV);
7007 Perl_ck_select(pTHX_ OP *o)
7011 if (o->op_flags & OPf_KIDS) {
7012 kid = cLISTOPo->op_first->op_sibling; /* get past pushmark */
7013 if (kid && kid->op_sibling) {
7014 o->op_type = OP_SSELECT;
7015 o->op_ppaddr = PL_ppaddr[OP_SSELECT];
7017 return fold_constants(o);
7021 kid = cLISTOPo->op_first->op_sibling; /* get past pushmark */
7022 if (kid && kid->op_type == OP_RV2GV)
7023 kid->op_private &= ~HINT_STRICT_REFS;
7028 Perl_ck_shift(pTHX_ OP *o)
7031 const I32 type = o->op_type;
7033 if (!(o->op_flags & OPf_KIDS)) {
7035 /* FIXME - this can be refactored to reduce code in #ifdefs */
7037 OP * const oldo = o;
7041 argop = newUNOP(OP_RV2AV, 0,
7042 scalar(newGVOP(OP_GV, 0, CvUNIQUE(PL_compcv) ? PL_argvgv : PL_defgv)));
7044 o = newUNOP(type, 0, scalar(argop));
7045 op_getmad(oldo,o,'O');
7048 return newUNOP(type, 0, scalar(argop));
7051 return scalar(modkids(ck_fun(o), type));
7055 Perl_ck_sort(pTHX_ OP *o)
7060 if (o->op_type == OP_SORT && (PL_hints & HINT_LOCALIZE_HH) != 0) {
7061 HV * const hinthv = GvHV(PL_hintgv);
7063 SV ** const svp = hv_fetchs(hinthv, "sort", FALSE);
7065 const I32 sorthints = (I32)SvIV(*svp);
7066 if ((sorthints & HINT_SORT_QUICKSORT) != 0)
7067 o->op_private |= OPpSORT_QSORT;
7068 if ((sorthints & HINT_SORT_STABLE) != 0)
7069 o->op_private |= OPpSORT_STABLE;
7074 if (o->op_type == OP_SORT && o->op_flags & OPf_STACKED)
7076 firstkid = cLISTOPo->op_first->op_sibling; /* get past pushmark */
7077 if (o->op_flags & OPf_STACKED) { /* may have been cleared */
7079 OP *kid = cUNOPx(firstkid)->op_first; /* get past null */
7081 if (kid->op_type == OP_SCOPE || kid->op_type == OP_LEAVE) {
7083 if (kid->op_type == OP_SCOPE) {
7087 else if (kid->op_type == OP_LEAVE) {
7088 if (o->op_type == OP_SORT) {
7089 op_null(kid); /* wipe out leave */
7092 for (k = kLISTOP->op_first->op_next; k; k = k->op_next) {
7093 if (k->op_next == kid)
7095 /* don't descend into loops */
7096 else if (k->op_type == OP_ENTERLOOP
7097 || k->op_type == OP_ENTERITER)
7099 k = cLOOPx(k)->op_lastop;
7104 kid->op_next = 0; /* just disconnect the leave */
7105 k = kLISTOP->op_first;
7110 if (o->op_type == OP_SORT) {
7111 /* provide scalar context for comparison function/block */
7117 o->op_flags |= OPf_SPECIAL;
7119 else if (kid->op_type == OP_RV2SV || kid->op_type == OP_PADSV)
7122 firstkid = firstkid->op_sibling;
7125 /* provide list context for arguments */
7126 if (o->op_type == OP_SORT)
7133 S_simplify_sort(pTHX_ OP *o)
7136 register OP *kid = cLISTOPo->op_first->op_sibling; /* get past pushmark */
7141 if (!(o->op_flags & OPf_STACKED))
7143 GvMULTI_on(gv_fetchpvs("a", GV_ADD|GV_NOTQUAL, SVt_PV));
7144 GvMULTI_on(gv_fetchpvs("b", GV_ADD|GV_NOTQUAL, SVt_PV));
7145 kid = kUNOP->op_first; /* get past null */
7146 if (kid->op_type != OP_SCOPE)
7148 kid = kLISTOP->op_last; /* get past scope */
7149 switch(kid->op_type) {
7157 k = kid; /* remember this node*/
7158 if (kBINOP->op_first->op_type != OP_RV2SV)
7160 kid = kBINOP->op_first; /* get past cmp */
7161 if (kUNOP->op_first->op_type != OP_GV)
7163 kid = kUNOP->op_first; /* get past rv2sv */
7165 if (GvSTASH(gv) != PL_curstash)
7167 gvname = GvNAME(gv);
7168 if (*gvname == 'a' && gvname[1] == '\0')
7170 else if (*gvname == 'b' && gvname[1] == '\0')
7175 kid = k; /* back to cmp */
7176 if (kBINOP->op_last->op_type != OP_RV2SV)
7178 kid = kBINOP->op_last; /* down to 2nd arg */
7179 if (kUNOP->op_first->op_type != OP_GV)
7181 kid = kUNOP->op_first; /* get past rv2sv */
7183 if (GvSTASH(gv) != PL_curstash)
7185 gvname = GvNAME(gv);
7187 ? !(*gvname == 'a' && gvname[1] == '\0')
7188 : !(*gvname == 'b' && gvname[1] == '\0'))
7190 o->op_flags &= ~(OPf_STACKED | OPf_SPECIAL);
7192 o->op_private |= OPpSORT_DESCEND;
7193 if (k->op_type == OP_NCMP)
7194 o->op_private |= OPpSORT_NUMERIC;
7195 if (k->op_type == OP_I_NCMP)
7196 o->op_private |= OPpSORT_NUMERIC | OPpSORT_INTEGER;
7197 kid = cLISTOPo->op_first->op_sibling;
7198 cLISTOPo->op_first->op_sibling = kid->op_sibling; /* bypass old block */
7200 op_getmad(kid,o,'S'); /* then delete it */
7202 op_free(kid); /* then delete it */
7207 Perl_ck_split(pTHX_ OP *o)
7212 if (o->op_flags & OPf_STACKED)
7213 return no_fh_allowed(o);
7215 kid = cLISTOPo->op_first;
7216 if (kid->op_type != OP_NULL)
7217 Perl_croak(aTHX_ "panic: ck_split");
7218 kid = kid->op_sibling;
7219 op_free(cLISTOPo->op_first);
7220 cLISTOPo->op_first = kid;
7222 cLISTOPo->op_first = kid = newSVOP(OP_CONST, 0, newSVpvs(" "));
7223 cLISTOPo->op_last = kid; /* There was only one element previously */
7226 if (kid->op_type != OP_MATCH || kid->op_flags & OPf_STACKED) {
7227 OP * const sibl = kid->op_sibling;
7228 kid->op_sibling = 0;
7229 kid = pmruntime( newPMOP(OP_MATCH, OPf_SPECIAL), kid, 0);
7230 if (cLISTOPo->op_first == cLISTOPo->op_last)
7231 cLISTOPo->op_last = kid;
7232 cLISTOPo->op_first = kid;
7233 kid->op_sibling = sibl;
7236 kid->op_type = OP_PUSHRE;
7237 kid->op_ppaddr = PL_ppaddr[OP_PUSHRE];
7239 if (((PMOP *)kid)->op_pmflags & PMf_GLOBAL && ckWARN(WARN_REGEXP)) {
7240 Perl_warner(aTHX_ packWARN(WARN_REGEXP),
7241 "Use of /g modifier is meaningless in split");
7244 if (!kid->op_sibling)
7245 append_elem(OP_SPLIT, o, newDEFSVOP());
7247 kid = kid->op_sibling;
7250 if (!kid->op_sibling)
7251 append_elem(OP_SPLIT, o, newSVOP(OP_CONST, 0, newSViv(0)));
7252 assert(kid->op_sibling);
7254 kid = kid->op_sibling;
7257 if (kid->op_sibling)
7258 return too_many_arguments(o,OP_DESC(o));
7264 Perl_ck_join(pTHX_ OP *o)
7266 const OP * const kid = cLISTOPo->op_first->op_sibling;
7267 if (kid && kid->op_type == OP_MATCH) {
7268 if (ckWARN(WARN_SYNTAX)) {
7269 const REGEXP *re = PM_GETRE(kPMOP);
7270 const char *pmstr = re ? re->precomp : "STRING";
7271 Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
7272 "/%s/ should probably be written as \"%s\"",
7280 Perl_ck_subr(pTHX_ OP *o)
7283 OP *prev = ((cUNOPo->op_first->op_sibling)
7284 ? cUNOPo : ((UNOP*)cUNOPo->op_first))->op_first;
7285 OP *o2 = prev->op_sibling;
7287 const char *proto = NULL;
7288 const char *proto_end = NULL;
7293 I32 contextclass = 0;
7297 o->op_private |= OPpENTERSUB_HASTARG;
7298 for (cvop = o2; cvop->op_sibling; cvop = cvop->op_sibling) ;
7299 if (cvop->op_type == OP_RV2CV) {
7301 o->op_private |= (cvop->op_private & OPpENTERSUB_AMPER);
7302 op_null(cvop); /* disable rv2cv */
7303 tmpop = (SVOP*)((UNOP*)cvop)->op_first;
7304 if (tmpop->op_type == OP_GV && !(o->op_private & OPpENTERSUB_AMPER)) {
7305 GV *gv = cGVOPx_gv(tmpop);
7308 tmpop->op_private |= OPpEARLY_CV;
7312 namegv = CvANON(cv) ? gv : CvGV(cv);
7313 proto = SvPV((SV*)cv, len);
7314 proto_end = proto + len;
7316 if (CvASSERTION(cv)) {
7317 if (PL_hints & HINT_ASSERTING) {
7318 if (PERLDB_ASSERTION && PL_curstash != PL_debstash)
7319 o->op_private |= OPpENTERSUB_DB;
7323 if (!(PL_hints & HINT_ASSERTIONSSEEN) && ckWARN(WARN_ASSERTIONS)) {
7324 Perl_warner(aTHX_ packWARN(WARN_ASSERTIONS),
7325 "Impossible to activate assertion call");
7332 else if (cvop->op_type == OP_METHOD || cvop->op_type == OP_METHOD_NAMED) {
7333 if (o2->op_type == OP_CONST)
7334 o2->op_private &= ~OPpCONST_STRICT;
7335 else if (o2->op_type == OP_LIST) {
7336 OP * const sib = ((UNOP*)o2)->op_first->op_sibling;
7337 if (sib && sib->op_type == OP_CONST)
7338 sib->op_private &= ~OPpCONST_STRICT;
7341 o->op_private |= (PL_hints & HINT_STRICT_REFS);
7342 if (PERLDB_SUB && PL_curstash != PL_debstash)
7343 o->op_private |= OPpENTERSUB_DB;
7344 while (o2 != cvop) {
7346 if (PL_madskills && o2->op_type == OP_NULL)
7347 o3 = ((UNOP*)o2)->op_first;
7351 if (proto >= proto_end)
7352 return too_many_arguments(o, gv_ename(namegv));
7372 if (o3->op_type != OP_REFGEN && o3->op_type != OP_UNDEF)
7374 arg == 1 ? "block or sub {}" : "sub {}",
7375 gv_ename(namegv), o3);
7378 /* '*' allows any scalar type, including bareword */
7381 if (o3->op_type == OP_RV2GV)
7382 goto wrapref; /* autoconvert GLOB -> GLOBref */
7383 else if (o3->op_type == OP_CONST)
7384 o3->op_private &= ~OPpCONST_STRICT;
7385 else if (o3->op_type == OP_ENTERSUB) {
7386 /* accidental subroutine, revert to bareword */
7387 OP *gvop = ((UNOP*)o3)->op_first;
7388 if (gvop && gvop->op_type == OP_NULL) {
7389 gvop = ((UNOP*)gvop)->op_first;
7391 for (; gvop->op_sibling; gvop = gvop->op_sibling)
7394 (gvop->op_private & OPpENTERSUB_NOPAREN) &&
7395 (gvop = ((UNOP*)gvop)->op_first) &&
7396 gvop->op_type == OP_GV)
7398 GV * const gv = cGVOPx_gv(gvop);
7399 OP * const sibling = o2->op_sibling;
7400 SV * const n = newSVpvs("");
7402 OP * const oldo2 = o2;
7406 gv_fullname4(n, gv, "", FALSE);
7407 o2 = newSVOP(OP_CONST, 0, n);
7408 op_getmad(oldo2,o2,'O');
7409 prev->op_sibling = o2;
7410 o2->op_sibling = sibling;
7426 if (contextclass++ == 0) {
7427 e = strchr(proto, ']');
7428 if (!e || e == proto)
7437 const char *p = proto;
7438 const char *const end = proto;
7440 while (*--p != '[');
7441 bad_type(arg, Perl_form(aTHX_ "one of %.*s",
7443 gv_ename(namegv), o3);
7448 if (o3->op_type == OP_RV2GV)
7451 bad_type(arg, "symbol", gv_ename(namegv), o3);
7454 if (o3->op_type == OP_ENTERSUB)
7457 bad_type(arg, "subroutine entry", gv_ename(namegv),
7461 if (o3->op_type == OP_RV2SV ||
7462 o3->op_type == OP_PADSV ||
7463 o3->op_type == OP_HELEM ||
7464 o3->op_type == OP_AELEM ||
7465 o3->op_type == OP_THREADSV)
7468 bad_type(arg, "scalar", gv_ename(namegv), o3);
7471 if (o3->op_type == OP_RV2AV ||
7472 o3->op_type == OP_PADAV)
7475 bad_type(arg, "array", gv_ename(namegv), o3);
7478 if (o3->op_type == OP_RV2HV ||
7479 o3->op_type == OP_PADHV)
7482 bad_type(arg, "hash", gv_ename(namegv), o3);
7487 OP* const sib = kid->op_sibling;
7488 kid->op_sibling = 0;
7489 o2 = newUNOP(OP_REFGEN, 0, kid);
7490 o2->op_sibling = sib;
7491 prev->op_sibling = o2;
7493 if (contextclass && e) {
7508 Perl_croak(aTHX_ "Malformed prototype for %s: %"SVf,
7509 gv_ename(namegv), (void*)cv);
7514 mod(o2, OP_ENTERSUB);
7516 o2 = o2->op_sibling;
7518 if (proto && !optional && proto_end > proto &&
7519 (*proto != '@' && *proto != '%' && *proto != ';'))
7520 return too_few_arguments(o, gv_ename(namegv));
7523 OP * const oldo = o;
7527 o=newSVOP(OP_CONST, 0, newSViv(0));
7528 op_getmad(oldo,o,'O');
7534 Perl_ck_svconst(pTHX_ OP *o)
7536 PERL_UNUSED_CONTEXT;
7537 SvREADONLY_on(cSVOPo->op_sv);
7542 Perl_ck_chdir(pTHX_ OP *o)
7544 if (o->op_flags & OPf_KIDS) {
7545 SVOP * const kid = (SVOP*)cUNOPo->op_first;
7547 if (kid && kid->op_type == OP_CONST &&
7548 (kid->op_private & OPpCONST_BARE))
7550 o->op_flags |= OPf_SPECIAL;
7551 kid->op_private &= ~OPpCONST_STRICT;
7558 Perl_ck_trunc(pTHX_ OP *o)
7560 if (o->op_flags & OPf_KIDS) {
7561 SVOP *kid = (SVOP*)cUNOPo->op_first;
7563 if (kid->op_type == OP_NULL)
7564 kid = (SVOP*)kid->op_sibling;
7565 if (kid && kid->op_type == OP_CONST &&
7566 (kid->op_private & OPpCONST_BARE))
7568 o->op_flags |= OPf_SPECIAL;
7569 kid->op_private &= ~OPpCONST_STRICT;
7576 Perl_ck_unpack(pTHX_ OP *o)
7578 OP *kid = cLISTOPo->op_first;
7579 if (kid->op_sibling) {
7580 kid = kid->op_sibling;
7581 if (!kid->op_sibling)
7582 kid->op_sibling = newDEFSVOP();
7588 Perl_ck_substr(pTHX_ OP *o)
7591 if ((o->op_flags & OPf_KIDS) && (o->op_private == 4)) {
7592 OP *kid = cLISTOPo->op_first;
7594 if (kid->op_type == OP_NULL)
7595 kid = kid->op_sibling;
7597 kid->op_flags |= OPf_MOD;
7603 /* A peephole optimizer. We visit the ops in the order they're to execute.
7604 * See the comments at the top of this file for more details about when
7605 * peep() is called */
7608 Perl_peep(pTHX_ register OP *o)
7611 register OP* oldop = NULL;
7613 if (!o || o->op_opt)
7617 SAVEVPTR(PL_curcop);
7618 for (; o; o = o->op_next) {
7622 switch (o->op_type) {
7626 PL_curcop = ((COP*)o); /* for warnings */
7631 if (cSVOPo->op_private & OPpCONST_STRICT)
7632 no_bareword_allowed(o);
7634 case OP_METHOD_NAMED:
7635 /* Relocate sv to the pad for thread safety.
7636 * Despite being a "constant", the SV is written to,
7637 * for reference counts, sv_upgrade() etc. */
7639 const PADOFFSET ix = pad_alloc(OP_CONST, SVs_PADTMP);
7640 if (o->op_type == OP_CONST && SvPADTMP(cSVOPo->op_sv)) {
7641 /* If op_sv is already a PADTMP then it is being used by
7642 * some pad, so make a copy. */
7643 sv_setsv(PAD_SVl(ix),cSVOPo->op_sv);
7644 SvREADONLY_on(PAD_SVl(ix));
7645 SvREFCNT_dec(cSVOPo->op_sv);
7647 else if (o->op_type == OP_CONST
7648 && cSVOPo->op_sv == &PL_sv_undef) {
7649 /* PL_sv_undef is hack - it's unsafe to store it in the
7650 AV that is the pad, because av_fetch treats values of
7651 PL_sv_undef as a "free" AV entry and will merrily
7652 replace them with a new SV, causing pad_alloc to think
7653 that this pad slot is free. (When, clearly, it is not)
7655 SvOK_off(PAD_SVl(ix));
7656 SvPADTMP_on(PAD_SVl(ix));
7657 SvREADONLY_on(PAD_SVl(ix));
7660 SvREFCNT_dec(PAD_SVl(ix));
7661 SvPADTMP_on(cSVOPo->op_sv);
7662 PAD_SETSV(ix, cSVOPo->op_sv);
7663 /* XXX I don't know how this isn't readonly already. */
7664 SvREADONLY_on(PAD_SVl(ix));
7666 cSVOPo->op_sv = NULL;
7674 if (o->op_next && o->op_next->op_type == OP_STRINGIFY) {
7675 if (o->op_next->op_private & OPpTARGET_MY) {
7676 if (o->op_flags & OPf_STACKED) /* chained concats */
7677 goto ignore_optimization;
7679 /* assert(PL_opargs[o->op_type] & OA_TARGLEX); */
7680 o->op_targ = o->op_next->op_targ;
7681 o->op_next->op_targ = 0;
7682 o->op_private |= OPpTARGET_MY;
7685 op_null(o->op_next);
7687 ignore_optimization:
7691 if ((o->op_flags & OPf_WANT) != OPf_WANT_LIST) {
7693 break; /* Scalar stub must produce undef. List stub is noop */
7697 if (o->op_targ == OP_NEXTSTATE
7698 || o->op_targ == OP_DBSTATE
7699 || o->op_targ == OP_SETSTATE)
7701 PL_curcop = ((COP*)o);
7703 /* XXX: We avoid setting op_seq here to prevent later calls
7704 to peep() from mistakenly concluding that optimisation
7705 has already occurred. This doesn't fix the real problem,
7706 though (See 20010220.007). AMS 20010719 */
7707 /* op_seq functionality is now replaced by op_opt */
7708 if (oldop && o->op_next) {
7709 oldop->op_next = o->op_next;
7717 if (oldop && o->op_next) {
7718 oldop->op_next = o->op_next;
7726 if (o->op_type == OP_PADAV || o->op_next->op_type == OP_RV2AV) {
7727 OP* const pop = (o->op_type == OP_PADAV) ?
7728 o->op_next : o->op_next->op_next;
7730 if (pop && pop->op_type == OP_CONST &&
7731 ((PL_op = pop->op_next)) &&
7732 pop->op_next->op_type == OP_AELEM &&
7733 !(pop->op_next->op_private &
7734 (OPpLVAL_INTRO|OPpLVAL_DEFER|OPpDEREF|OPpMAYBE_LVSUB)) &&
7735 (i = SvIV(((SVOP*)pop)->op_sv) - CopARYBASE_get(PL_curcop))
7740 if (cSVOPx(pop)->op_private & OPpCONST_STRICT)
7741 no_bareword_allowed(pop);
7742 if (o->op_type == OP_GV)
7743 op_null(o->op_next);
7744 op_null(pop->op_next);
7746 o->op_flags |= pop->op_next->op_flags & OPf_MOD;
7747 o->op_next = pop->op_next->op_next;
7748 o->op_ppaddr = PL_ppaddr[OP_AELEMFAST];
7749 o->op_private = (U8)i;
7750 if (o->op_type == OP_GV) {
7755 o->op_flags |= OPf_SPECIAL;
7756 o->op_type = OP_AELEMFAST;
7762 if (o->op_next->op_type == OP_RV2SV) {
7763 if (!(o->op_next->op_private & OPpDEREF)) {
7764 op_null(o->op_next);
7765 o->op_private |= o->op_next->op_private & (OPpLVAL_INTRO
7767 o->op_next = o->op_next->op_next;
7768 o->op_type = OP_GVSV;
7769 o->op_ppaddr = PL_ppaddr[OP_GVSV];
7772 else if ((o->op_private & OPpEARLY_CV) && ckWARN(WARN_PROTOTYPE)) {
7773 GV * const gv = cGVOPo_gv;
7774 if (SvTYPE(gv) == SVt_PVGV && GvCV(gv) && SvPVX_const(GvCV(gv))) {
7775 /* XXX could check prototype here instead of just carping */
7776 SV * const sv = sv_newmortal();
7777 gv_efullname3(sv, gv, NULL);
7778 Perl_warner(aTHX_ packWARN(WARN_PROTOTYPE),
7779 "%"SVf"() called too early to check prototype",
7783 else if (o->op_next->op_type == OP_READLINE
7784 && o->op_next->op_next->op_type == OP_CONCAT
7785 && (o->op_next->op_next->op_flags & OPf_STACKED))
7787 /* Turn "$a .= <FH>" into an OP_RCATLINE. AMS 20010917 */
7788 o->op_type = OP_RCATLINE;
7789 o->op_flags |= OPf_STACKED;
7790 o->op_ppaddr = PL_ppaddr[OP_RCATLINE];
7791 op_null(o->op_next->op_next);
7792 op_null(o->op_next);
7809 while (cLOGOP->op_other->op_type == OP_NULL)
7810 cLOGOP->op_other = cLOGOP->op_other->op_next;
7811 peep(cLOGOP->op_other); /* Recursive calls are not replaced by fptr calls */
7817 while (cLOOP->op_redoop->op_type == OP_NULL)
7818 cLOOP->op_redoop = cLOOP->op_redoop->op_next;
7819 peep(cLOOP->op_redoop);
7820 while (cLOOP->op_nextop->op_type == OP_NULL)
7821 cLOOP->op_nextop = cLOOP->op_nextop->op_next;
7822 peep(cLOOP->op_nextop);
7823 while (cLOOP->op_lastop->op_type == OP_NULL)
7824 cLOOP->op_lastop = cLOOP->op_lastop->op_next;
7825 peep(cLOOP->op_lastop);
7832 while (cPMOP->op_pmreplstart &&
7833 cPMOP->op_pmreplstart->op_type == OP_NULL)
7834 cPMOP->op_pmreplstart = cPMOP->op_pmreplstart->op_next;
7835 peep(cPMOP->op_pmreplstart);
7840 if (o->op_next && o->op_next->op_type == OP_NEXTSTATE
7841 && ckWARN(WARN_SYNTAX))
7843 if (o->op_next->op_sibling) {
7844 const OPCODE type = o->op_next->op_sibling->op_type;
7845 if (type != OP_EXIT && type != OP_WARN && type != OP_DIE) {
7846 const line_t oldline = CopLINE(PL_curcop);
7847 CopLINE_set(PL_curcop, CopLINE((COP*)o->op_next));
7848 Perl_warner(aTHX_ packWARN(WARN_EXEC),
7849 "Statement unlikely to be reached");
7850 Perl_warner(aTHX_ packWARN(WARN_EXEC),
7851 "\t(Maybe you meant system() when you said exec()?)\n");
7852 CopLINE_set(PL_curcop, oldline);
7863 const char *key = NULL;
7868 if (((BINOP*)o)->op_last->op_type != OP_CONST)
7871 /* Make the CONST have a shared SV */
7872 svp = cSVOPx_svp(((BINOP*)o)->op_last);
7873 if ((!SvFAKE(sv = *svp) || !SvREADONLY(sv)) && !IS_PADCONST(sv)) {
7874 key = SvPV_const(sv, keylen);
7875 lexname = newSVpvn_share(key,
7876 SvUTF8(sv) ? -(I32)keylen : (I32)keylen,
7882 if ((o->op_private & (OPpLVAL_INTRO)))
7885 rop = (UNOP*)((BINOP*)o)->op_first;
7886 if (rop->op_type != OP_RV2HV || rop->op_first->op_type != OP_PADSV)
7888 lexname = *av_fetch(PL_comppad_name, rop->op_first->op_targ, TRUE);
7889 if (!SvPAD_TYPED(lexname))
7891 fields = (GV**)hv_fetchs(SvSTASH(lexname), "FIELDS", FALSE);
7892 if (!fields || !GvHV(*fields))
7894 key = SvPV_const(*svp, keylen);
7895 if (!hv_fetch(GvHV(*fields), key,
7896 SvUTF8(*svp) ? -(I32)keylen : (I32)keylen, FALSE))
7898 Perl_croak(aTHX_ "No such class field \"%s\" "
7899 "in variable %s of type %s",
7900 key, SvPV_nolen_const(lexname), HvNAME_get(SvSTASH(lexname)));
7913 SVOP *first_key_op, *key_op;
7915 if ((o->op_private & (OPpLVAL_INTRO))
7916 /* I bet there's always a pushmark... */
7917 || ((LISTOP*)o)->op_first->op_sibling->op_type != OP_LIST)
7918 /* hmmm, no optimization if list contains only one key. */
7920 rop = (UNOP*)((LISTOP*)o)->op_last;
7921 if (rop->op_type != OP_RV2HV)
7923 if (rop->op_first->op_type == OP_PADSV)
7924 /* @$hash{qw(keys here)} */
7925 rop = (UNOP*)rop->op_first;
7927 /* @{$hash}{qw(keys here)} */
7928 if (rop->op_first->op_type == OP_SCOPE
7929 && cLISTOPx(rop->op_first)->op_last->op_type == OP_PADSV)
7931 rop = (UNOP*)cLISTOPx(rop->op_first)->op_last;
7937 lexname = *av_fetch(PL_comppad_name, rop->op_targ, TRUE);
7938 if (!SvPAD_TYPED(lexname))
7940 fields = (GV**)hv_fetchs(SvSTASH(lexname), "FIELDS", FALSE);
7941 if (!fields || !GvHV(*fields))
7943 /* Again guessing that the pushmark can be jumped over.... */
7944 first_key_op = (SVOP*)((LISTOP*)((LISTOP*)o)->op_first->op_sibling)
7945 ->op_first->op_sibling;
7946 for (key_op = first_key_op; key_op;
7947 key_op = (SVOP*)key_op->op_sibling) {
7948 if (key_op->op_type != OP_CONST)
7950 svp = cSVOPx_svp(key_op);
7951 key = SvPV_const(*svp, keylen);
7952 if (!hv_fetch(GvHV(*fields), key,
7953 SvUTF8(*svp) ? -(I32)keylen : (I32)keylen, FALSE))
7955 Perl_croak(aTHX_ "No such class field \"%s\" "
7956 "in variable %s of type %s",
7957 key, SvPV_nolen(lexname), HvNAME_get(SvSTASH(lexname)));
7964 /* will point to RV2AV or PADAV op on LHS/RHS of assign */
7968 /* check that RHS of sort is a single plain array */
7969 OP *oright = cUNOPo->op_first;
7970 if (!oright || oright->op_type != OP_PUSHMARK)
7973 /* reverse sort ... can be optimised. */
7974 if (!cUNOPo->op_sibling) {
7975 /* Nothing follows us on the list. */
7976 OP * const reverse = o->op_next;
7978 if (reverse->op_type == OP_REVERSE &&
7979 (reverse->op_flags & OPf_WANT) == OPf_WANT_LIST) {
7980 OP * const pushmark = cUNOPx(reverse)->op_first;
7981 if (pushmark && (pushmark->op_type == OP_PUSHMARK)
7982 && (cUNOPx(pushmark)->op_sibling == o)) {
7983 /* reverse -> pushmark -> sort */
7984 o->op_private |= OPpSORT_REVERSE;
7986 pushmark->op_next = oright->op_next;
7992 /* make @a = sort @a act in-place */
7996 oright = cUNOPx(oright)->op_sibling;
7999 if (oright->op_type == OP_NULL) { /* skip sort block/sub */
8000 oright = cUNOPx(oright)->op_sibling;
8004 (oright->op_type != OP_RV2AV && oright->op_type != OP_PADAV)
8005 || oright->op_next != o
8006 || (oright->op_private & OPpLVAL_INTRO)
8010 /* o2 follows the chain of op_nexts through the LHS of the
8011 * assign (if any) to the aassign op itself */
8013 if (!o2 || o2->op_type != OP_NULL)
8016 if (!o2 || o2->op_type != OP_PUSHMARK)
8019 if (o2 && o2->op_type == OP_GV)
8022 || (o2->op_type != OP_PADAV && o2->op_type != OP_RV2AV)
8023 || (o2->op_private & OPpLVAL_INTRO)
8028 if (!o2 || o2->op_type != OP_NULL)
8031 if (!o2 || o2->op_type != OP_AASSIGN
8032 || (o2->op_flags & OPf_WANT) != OPf_WANT_VOID)
8035 /* check that the sort is the first arg on RHS of assign */
8037 o2 = cUNOPx(o2)->op_first;
8038 if (!o2 || o2->op_type != OP_NULL)
8040 o2 = cUNOPx(o2)->op_first;
8041 if (!o2 || o2->op_type != OP_PUSHMARK)
8043 if (o2->op_sibling != o)
8046 /* check the array is the same on both sides */
8047 if (oleft->op_type == OP_RV2AV) {
8048 if (oright->op_type != OP_RV2AV
8049 || !cUNOPx(oright)->op_first
8050 || cUNOPx(oright)->op_first->op_type != OP_GV
8051 || cGVOPx_gv(cUNOPx(oleft)->op_first) !=
8052 cGVOPx_gv(cUNOPx(oright)->op_first)
8056 else if (oright->op_type != OP_PADAV
8057 || oright->op_targ != oleft->op_targ
8061 /* transfer MODishness etc from LHS arg to RHS arg */
8062 oright->op_flags = oleft->op_flags;
8063 o->op_private |= OPpSORT_INPLACE;
8065 /* excise push->gv->rv2av->null->aassign */
8066 o2 = o->op_next->op_next;
8067 op_null(o2); /* PUSHMARK */
8069 if (o2->op_type == OP_GV) {
8070 op_null(o2); /* GV */
8073 op_null(o2); /* RV2AV or PADAV */
8074 o2 = o2->op_next->op_next;
8075 op_null(o2); /* AASSIGN */
8077 o->op_next = o2->op_next;
8083 OP *ourmark, *theirmark, *ourlast, *iter, *expushmark, *rv2av;
8085 LISTOP *enter, *exlist;
8088 enter = (LISTOP *) o->op_next;
8091 if (enter->op_type == OP_NULL) {
8092 enter = (LISTOP *) enter->op_next;
8096 /* for $a (...) will have OP_GV then OP_RV2GV here.
8097 for (...) just has an OP_GV. */
8098 if (enter->op_type == OP_GV) {
8099 gvop = (OP *) enter;
8100 enter = (LISTOP *) enter->op_next;
8103 if (enter->op_type == OP_RV2GV) {
8104 enter = (LISTOP *) enter->op_next;
8110 if (enter->op_type != OP_ENTERITER)
8113 iter = enter->op_next;
8114 if (!iter || iter->op_type != OP_ITER)
8117 expushmark = enter->op_first;
8118 if (!expushmark || expushmark->op_type != OP_NULL
8119 || expushmark->op_targ != OP_PUSHMARK)
8122 exlist = (LISTOP *) expushmark->op_sibling;
8123 if (!exlist || exlist->op_type != OP_NULL
8124 || exlist->op_targ != OP_LIST)
8127 if (exlist->op_last != o) {
8128 /* Mmm. Was expecting to point back to this op. */
8131 theirmark = exlist->op_first;
8132 if (!theirmark || theirmark->op_type != OP_PUSHMARK)
8135 if (theirmark->op_sibling != o) {
8136 /* There's something between the mark and the reverse, eg
8137 for (1, reverse (...))
8142 ourmark = ((LISTOP *)o)->op_first;
8143 if (!ourmark || ourmark->op_type != OP_PUSHMARK)
8146 ourlast = ((LISTOP *)o)->op_last;
8147 if (!ourlast || ourlast->op_next != o)
8150 rv2av = ourmark->op_sibling;
8151 if (rv2av && rv2av->op_type == OP_RV2AV && rv2av->op_sibling == 0
8152 && rv2av->op_flags == (OPf_WANT_LIST | OPf_KIDS)
8153 && enter->op_flags == (OPf_WANT_LIST | OPf_KIDS)) {
8154 /* We're just reversing a single array. */
8155 rv2av->op_flags = OPf_WANT_SCALAR | OPf_KIDS | OPf_REF;
8156 enter->op_flags |= OPf_STACKED;
8159 /* We don't have control over who points to theirmark, so sacrifice
8161 theirmark->op_next = ourmark->op_next;
8162 theirmark->op_flags = ourmark->op_flags;
8163 ourlast->op_next = gvop ? gvop : (OP *) enter;
8166 enter->op_private |= OPpITER_REVERSED;
8167 iter->op_private |= OPpITER_REVERSED;
8174 UNOP *refgen, *rv2cv;
8177 /* I do not understand this, but if o->op_opt isn't set to 1,
8178 various tests in ext/B/t/bytecode.t fail with no readily
8184 if ((o->op_flags && OPf_WANT) != OPf_WANT_VOID)
8187 if ((o->op_private & ~OPpASSIGN_BACKWARDS) != 2)
8190 rv2gv = ((BINOP *)o)->op_last;
8191 if (!rv2gv || rv2gv->op_type != OP_RV2GV)
8194 refgen = (UNOP *)((BINOP *)o)->op_first;
8196 if (!refgen || refgen->op_type != OP_REFGEN)
8199 exlist = (LISTOP *)refgen->op_first;
8200 if (!exlist || exlist->op_type != OP_NULL
8201 || exlist->op_targ != OP_LIST)
8204 if (exlist->op_first->op_type != OP_PUSHMARK)
8207 rv2cv = (UNOP*)exlist->op_last;
8209 if (rv2cv->op_type != OP_RV2CV)
8212 assert ((rv2gv->op_private & OPpDONT_INIT_GV) == 0);
8213 assert ((o->op_private & OPpASSIGN_CV_TO_GV) == 0);
8214 assert ((rv2cv->op_private & OPpMAY_RETURN_CONSTANT) == 0);
8216 o->op_private |= OPpASSIGN_CV_TO_GV;
8217 rv2gv->op_private |= OPpDONT_INIT_GV;
8218 rv2cv->op_private |= OPpMAY_RETURN_CONSTANT;
8234 Perl_custom_op_name(pTHX_ const OP* o)
8237 const IV index = PTR2IV(o->op_ppaddr);
8241 if (!PL_custom_op_names) /* This probably shouldn't happen */
8242 return (char *)PL_op_name[OP_CUSTOM];
8244 keysv = sv_2mortal(newSViv(index));
8246 he = hv_fetch_ent(PL_custom_op_names, keysv, 0, 0);
8248 return (char *)PL_op_name[OP_CUSTOM]; /* Don't know who you are */
8250 return SvPV_nolen(HeVAL(he));
8254 Perl_custom_op_desc(pTHX_ const OP* o)
8257 const IV index = PTR2IV(o->op_ppaddr);
8261 if (!PL_custom_op_descs)
8262 return (char *)PL_op_desc[OP_CUSTOM];
8264 keysv = sv_2mortal(newSViv(index));
8266 he = hv_fetch_ent(PL_custom_op_descs, keysv, 0, 0);
8268 return (char *)PL_op_desc[OP_CUSTOM];
8270 return SvPV_nolen(HeVAL(he));
8275 /* Efficient sub that returns a constant scalar value. */
8277 const_sv_xsub(pTHX_ CV* cv)
8284 Perl_croak(aTHX_ "usage: %s::%s()",
8285 HvNAME_get(GvSTASH(CvGV(cv))), GvNAME(CvGV(cv)));
8289 ST(0) = (SV*)XSANY.any_ptr;
8295 * c-indentation-style: bsd
8297 * indent-tabs-mode: t
8300 * ex: set ts=8 sts=4 sw=4 noet: