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 Perl_refcounted_he_free(aTHX_ cop->cop_hints_hash);
502 Perl_op_null(pTHX_ OP *o)
505 if (o->op_type == OP_NULL)
509 o->op_targ = o->op_type;
510 o->op_type = OP_NULL;
511 o->op_ppaddr = PL_ppaddr[OP_NULL];
515 Perl_op_refcnt_lock(pTHX)
523 Perl_op_refcnt_unlock(pTHX)
530 /* Contextualizers */
532 #define LINKLIST(o) ((o)->op_next ? (o)->op_next : linklist((OP*)o))
535 Perl_linklist(pTHX_ OP *o)
542 /* establish postfix order */
543 first = cUNOPo->op_first;
546 o->op_next = LINKLIST(first);
549 if (kid->op_sibling) {
550 kid->op_next = LINKLIST(kid->op_sibling);
551 kid = kid->op_sibling;
565 Perl_scalarkids(pTHX_ OP *o)
567 if (o && o->op_flags & OPf_KIDS) {
569 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
576 S_scalarboolean(pTHX_ OP *o)
579 if (o->op_type == OP_SASSIGN && cBINOPo->op_first->op_type == OP_CONST) {
580 if (ckWARN(WARN_SYNTAX)) {
581 const line_t oldline = CopLINE(PL_curcop);
583 if (PL_copline != NOLINE)
584 CopLINE_set(PL_curcop, PL_copline);
585 Perl_warner(aTHX_ packWARN(WARN_SYNTAX), "Found = in conditional, should be ==");
586 CopLINE_set(PL_curcop, oldline);
593 Perl_scalar(pTHX_ OP *o)
598 /* assumes no premature commitment */
599 if (!o || PL_error_count || (o->op_flags & OPf_WANT)
600 || o->op_type == OP_RETURN)
605 o->op_flags = (o->op_flags & ~OPf_WANT) | OPf_WANT_SCALAR;
607 switch (o->op_type) {
609 scalar(cBINOPo->op_first);
614 for (kid = cUNOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
618 if ((kid = cLISTOPo->op_first) && kid->op_type == OP_PUSHRE) {
619 if (!kPMOP->op_pmreplroot)
620 deprecate_old("implicit split to @_");
628 if (o->op_flags & OPf_KIDS) {
629 for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling)
635 kid = cLISTOPo->op_first;
637 while ((kid = kid->op_sibling)) {
643 PL_curcop = &PL_compiling;
648 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling) {
654 PL_curcop = &PL_compiling;
657 if (ckWARN(WARN_VOID))
658 Perl_warner(aTHX_ packWARN(WARN_VOID), "Useless use of sort in scalar context");
664 Perl_scalarvoid(pTHX_ OP *o)
668 const char* useless = NULL;
672 /* trailing mad null ops don't count as "there" for void processing */
674 o->op_type != OP_NULL &&
676 o->op_sibling->op_type == OP_NULL)
679 for (sib = o->op_sibling;
680 sib && sib->op_type == OP_NULL;
681 sib = sib->op_sibling) ;
687 if (o->op_type == OP_NEXTSTATE
688 || o->op_type == OP_SETSTATE
689 || o->op_type == OP_DBSTATE
690 || (o->op_type == OP_NULL && (o->op_targ == OP_NEXTSTATE
691 || o->op_targ == OP_SETSTATE
692 || o->op_targ == OP_DBSTATE)))
693 PL_curcop = (COP*)o; /* for warning below */
695 /* assumes no premature commitment */
696 want = o->op_flags & OPf_WANT;
697 if ((want && want != OPf_WANT_SCALAR) || PL_error_count
698 || o->op_type == OP_RETURN)
703 if ((o->op_private & OPpTARGET_MY)
704 && (PL_opargs[o->op_type] & OA_TARGLEX))/* OPp share the meaning */
706 return scalar(o); /* As if inside SASSIGN */
709 o->op_flags = (o->op_flags & ~OPf_WANT) | OPf_WANT_VOID;
711 switch (o->op_type) {
713 if (!(PL_opargs[o->op_type] & OA_FOLDCONST))
717 if (o->op_flags & OPf_STACKED)
721 if (o->op_private == 4)
793 if (!(o->op_private & (OPpLVAL_INTRO|OPpOUR_INTRO)))
794 useless = OP_DESC(o);
798 kid = cUNOPo->op_first;
799 if (kid->op_type != OP_MATCH && kid->op_type != OP_SUBST &&
800 kid->op_type != OP_TRANS) {
803 useless = "negative pattern binding (!~)";
810 if (!(o->op_private & (OPpLVAL_INTRO|OPpOUR_INTRO)) &&
811 (!o->op_sibling || o->op_sibling->op_type != OP_READLINE))
812 useless = "a variable";
817 if (cSVOPo->op_private & OPpCONST_STRICT)
818 no_bareword_allowed(o);
820 if (ckWARN(WARN_VOID)) {
821 useless = "a constant";
822 if (o->op_private & OPpCONST_ARYBASE)
824 /* don't warn on optimised away booleans, eg
825 * use constant Foo, 5; Foo || print; */
826 if (cSVOPo->op_private & OPpCONST_SHORTCIRCUIT)
828 /* the constants 0 and 1 are permitted as they are
829 conventionally used as dummies in constructs like
830 1 while some_condition_with_side_effects; */
831 else if (SvNIOK(sv) && (SvNV(sv) == 0.0 || SvNV(sv) == 1.0))
833 else if (SvPOK(sv)) {
834 /* perl4's way of mixing documentation and code
835 (before the invention of POD) was based on a
836 trick to mix nroff and perl code. The trick was
837 built upon these three nroff macros being used in
838 void context. The pink camel has the details in
839 the script wrapman near page 319. */
840 const char * const maybe_macro = SvPVX_const(sv);
841 if (strnEQ(maybe_macro, "di", 2) ||
842 strnEQ(maybe_macro, "ds", 2) ||
843 strnEQ(maybe_macro, "ig", 2))
848 op_null(o); /* don't execute or even remember it */
852 o->op_type = OP_PREINC; /* pre-increment is faster */
853 o->op_ppaddr = PL_ppaddr[OP_PREINC];
857 o->op_type = OP_PREDEC; /* pre-decrement is faster */
858 o->op_ppaddr = PL_ppaddr[OP_PREDEC];
862 o->op_type = OP_I_PREINC; /* pre-increment is faster */
863 o->op_ppaddr = PL_ppaddr[OP_I_PREINC];
867 o->op_type = OP_I_PREDEC; /* pre-decrement is faster */
868 o->op_ppaddr = PL_ppaddr[OP_I_PREDEC];
877 for (kid = cUNOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
882 if (o->op_flags & OPf_STACKED)
889 if (!(o->op_flags & OPf_KIDS))
900 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
907 /* all requires must return a boolean value */
908 o->op_flags &= ~OPf_WANT;
913 if ((kid = cLISTOPo->op_first) && kid->op_type == OP_PUSHRE) {
914 if (!kPMOP->op_pmreplroot)
915 deprecate_old("implicit split to @_");
919 if (useless && ckWARN(WARN_VOID))
920 Perl_warner(aTHX_ packWARN(WARN_VOID), "Useless use of %s in void context", useless);
925 Perl_listkids(pTHX_ OP *o)
927 if (o && o->op_flags & OPf_KIDS) {
929 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
936 Perl_list(pTHX_ OP *o)
941 /* assumes no premature commitment */
942 if (!o || (o->op_flags & OPf_WANT) || PL_error_count
943 || o->op_type == OP_RETURN)
948 if ((o->op_private & OPpTARGET_MY)
949 && (PL_opargs[o->op_type] & OA_TARGLEX))/* OPp share the meaning */
951 return o; /* As if inside SASSIGN */
954 o->op_flags = (o->op_flags & ~OPf_WANT) | OPf_WANT_LIST;
956 switch (o->op_type) {
959 list(cBINOPo->op_first);
964 for (kid = cUNOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
972 if (!(o->op_flags & OPf_KIDS))
974 if (!o->op_next && cUNOPo->op_first->op_type == OP_FLOP) {
975 list(cBINOPo->op_first);
976 return gen_constant_list(o);
983 kid = cLISTOPo->op_first;
985 while ((kid = kid->op_sibling)) {
991 PL_curcop = &PL_compiling;
995 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling) {
1001 PL_curcop = &PL_compiling;
1004 /* all requires must return a boolean value */
1005 o->op_flags &= ~OPf_WANT;
1012 Perl_scalarseq(pTHX_ OP *o)
1016 const OPCODE type = o->op_type;
1018 if (type == OP_LINESEQ || type == OP_SCOPE ||
1019 type == OP_LEAVE || type == OP_LEAVETRY)
1022 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling) {
1023 if (kid->op_sibling) {
1027 PL_curcop = &PL_compiling;
1029 o->op_flags &= ~OPf_PARENS;
1030 if (PL_hints & HINT_BLOCK_SCOPE)
1031 o->op_flags |= OPf_PARENS;
1034 o = newOP(OP_STUB, 0);
1039 S_modkids(pTHX_ OP *o, I32 type)
1041 if (o && o->op_flags & OPf_KIDS) {
1043 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
1049 /* Propagate lvalue ("modifiable") context to an op and its children.
1050 * 'type' represents the context type, roughly based on the type of op that
1051 * would do the modifying, although local() is represented by OP_NULL.
1052 * It's responsible for detecting things that can't be modified, flag
1053 * things that need to behave specially in an lvalue context (e.g., "$$x = 5"
1054 * might have to vivify a reference in $x), and so on.
1056 * For example, "$a+1 = 2" would cause mod() to be called with o being
1057 * OP_ADD and type being OP_SASSIGN, and would output an error.
1061 Perl_mod(pTHX_ OP *o, I32 type)
1065 /* -1 = error on localize, 0 = ignore localize, 1 = ok to localize */
1068 if (!o || PL_error_count)
1071 if ((o->op_private & OPpTARGET_MY)
1072 && (PL_opargs[o->op_type] & OA_TARGLEX))/* OPp share the meaning */
1077 switch (o->op_type) {
1083 if (!(o->op_private & OPpCONST_ARYBASE))
1086 if (PL_eval_start && PL_eval_start->op_type == OP_CONST) {
1087 CopARYBASE_set(&PL_compiling,
1088 (I32)SvIV(cSVOPx(PL_eval_start)->op_sv));
1092 SAVECOPARYBASE(&PL_compiling);
1093 CopARYBASE_set(&PL_compiling, 0);
1095 else if (type == OP_REFGEN)
1098 Perl_croak(aTHX_ "That use of $[ is unsupported");
1101 if (o->op_flags & OPf_PARENS || PL_madskills)
1105 if ((type == OP_UNDEF || type == OP_REFGEN) &&
1106 !(o->op_flags & OPf_STACKED)) {
1107 o->op_type = OP_RV2CV; /* entersub => rv2cv */
1108 /* The default is to set op_private to the number of children,
1109 which for a UNOP such as RV2CV is always 1. And w're using
1110 the bit for a flag in RV2CV, so we need it clear. */
1111 o->op_private &= ~1;
1112 o->op_ppaddr = PL_ppaddr[OP_RV2CV];
1113 assert(cUNOPo->op_first->op_type == OP_NULL);
1114 op_null(((LISTOP*)cUNOPo->op_first)->op_first);/* disable pushmark */
1117 else if (o->op_private & OPpENTERSUB_NOMOD)
1119 else { /* lvalue subroutine call */
1120 o->op_private |= OPpLVAL_INTRO;
1121 PL_modcount = RETURN_UNLIMITED_NUMBER;
1122 if (type == OP_GREPSTART || type == OP_ENTERSUB || type == OP_REFGEN) {
1123 /* Backward compatibility mode: */
1124 o->op_private |= OPpENTERSUB_INARGS;
1127 else { /* Compile-time error message: */
1128 OP *kid = cUNOPo->op_first;
1132 if (kid->op_type != OP_PUSHMARK) {
1133 if (kid->op_type != OP_NULL || kid->op_targ != OP_LIST)
1135 "panic: unexpected lvalue entersub "
1136 "args: type/targ %ld:%"UVuf,
1137 (long)kid->op_type, (UV)kid->op_targ);
1138 kid = kLISTOP->op_first;
1140 while (kid->op_sibling)
1141 kid = kid->op_sibling;
1142 if (!(kid->op_type == OP_NULL && kid->op_targ == OP_RV2CV)) {
1144 if (kid->op_type == OP_METHOD_NAMED
1145 || kid->op_type == OP_METHOD)
1149 NewOp(1101, newop, 1, UNOP);
1150 newop->op_type = OP_RV2CV;
1151 newop->op_ppaddr = PL_ppaddr[OP_RV2CV];
1152 newop->op_first = NULL;
1153 newop->op_next = (OP*)newop;
1154 kid->op_sibling = (OP*)newop;
1155 newop->op_private |= OPpLVAL_INTRO;
1156 newop->op_private &= ~1;
1160 if (kid->op_type != OP_RV2CV)
1162 "panic: unexpected lvalue entersub "
1163 "entry via type/targ %ld:%"UVuf,
1164 (long)kid->op_type, (UV)kid->op_targ);
1165 kid->op_private |= OPpLVAL_INTRO;
1166 break; /* Postpone until runtime */
1170 kid = kUNOP->op_first;
1171 if (kid->op_type == OP_NULL && kid->op_targ == OP_RV2SV)
1172 kid = kUNOP->op_first;
1173 if (kid->op_type == OP_NULL)
1175 "Unexpected constant lvalue entersub "
1176 "entry via type/targ %ld:%"UVuf,
1177 (long)kid->op_type, (UV)kid->op_targ);
1178 if (kid->op_type != OP_GV) {
1179 /* Restore RV2CV to check lvalueness */
1181 if (kid->op_next && kid->op_next != kid) { /* Happens? */
1182 okid->op_next = kid->op_next;
1183 kid->op_next = okid;
1186 okid->op_next = NULL;
1187 okid->op_type = OP_RV2CV;
1189 okid->op_ppaddr = PL_ppaddr[OP_RV2CV];
1190 okid->op_private |= OPpLVAL_INTRO;
1191 okid->op_private &= ~1;
1195 cv = GvCV(kGVOP_gv);
1205 /* grep, foreach, subcalls, refgen */
1206 if (type == OP_GREPSTART || type == OP_ENTERSUB || type == OP_REFGEN)
1208 yyerror(Perl_form(aTHX_ "Can't modify %s in %s",
1209 (o->op_type == OP_NULL && (o->op_flags & OPf_SPECIAL)
1211 : (o->op_type == OP_ENTERSUB
1212 ? "non-lvalue subroutine call"
1214 type ? PL_op_desc[type] : "local"));
1228 case OP_RIGHT_SHIFT:
1237 if (!(o->op_flags & OPf_STACKED))
1244 for (kid = cUNOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
1250 if (type == OP_REFGEN && o->op_flags & OPf_PARENS) {
1251 PL_modcount = RETURN_UNLIMITED_NUMBER;
1252 return o; /* Treat \(@foo) like ordinary list. */
1256 if (scalar_mod_type(o, type))
1258 ref(cUNOPo->op_first, o->op_type);
1262 if (type == OP_LEAVESUBLV)
1263 o->op_private |= OPpMAYBE_LVSUB;
1269 PL_modcount = RETURN_UNLIMITED_NUMBER;
1272 ref(cUNOPo->op_first, o->op_type);
1277 PL_hints |= HINT_BLOCK_SCOPE;
1292 PL_modcount = RETURN_UNLIMITED_NUMBER;
1293 if (type == OP_REFGEN && o->op_flags & OPf_PARENS)
1294 return o; /* Treat \(@foo) like ordinary list. */
1295 if (scalar_mod_type(o, type))
1297 if (type == OP_LEAVESUBLV)
1298 o->op_private |= OPpMAYBE_LVSUB;
1302 if (!type) /* local() */
1303 Perl_croak(aTHX_ "Can't localize lexical variable %s",
1304 PAD_COMPNAME_PV(o->op_targ));
1312 if (type != OP_SASSIGN)
1316 if (o->op_private == 4) /* don't allow 4 arg substr as lvalue */
1321 if (type == OP_LEAVESUBLV)
1322 o->op_private |= OPpMAYBE_LVSUB;
1324 pad_free(o->op_targ);
1325 o->op_targ = pad_alloc(o->op_type, SVs_PADMY);
1326 assert(SvTYPE(PAD_SV(o->op_targ)) == SVt_NULL);
1327 if (o->op_flags & OPf_KIDS)
1328 mod(cBINOPo->op_first->op_sibling, type);
1333 ref(cBINOPo->op_first, o->op_type);
1334 if (type == OP_ENTERSUB &&
1335 !(o->op_private & (OPpLVAL_INTRO | OPpDEREF)))
1336 o->op_private |= OPpLVAL_DEFER;
1337 if (type == OP_LEAVESUBLV)
1338 o->op_private |= OPpMAYBE_LVSUB;
1348 if (o->op_flags & OPf_KIDS)
1349 mod(cLISTOPo->op_last, type);
1354 if (o->op_flags & OPf_SPECIAL) /* do BLOCK */
1356 else if (!(o->op_flags & OPf_KIDS))
1358 if (o->op_targ != OP_LIST) {
1359 mod(cBINOPo->op_first, type);
1365 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
1370 if (type != OP_LEAVESUBLV)
1372 break; /* mod()ing was handled by ck_return() */
1375 /* [20011101.069] File test operators interpret OPf_REF to mean that
1376 their argument is a filehandle; thus \stat(".") should not set
1378 if (type == OP_REFGEN &&
1379 PL_check[o->op_type] == MEMBER_TO_FPTR(Perl_ck_ftst))
1382 if (type != OP_LEAVESUBLV)
1383 o->op_flags |= OPf_MOD;
1385 if (type == OP_AASSIGN || type == OP_SASSIGN)
1386 o->op_flags |= OPf_SPECIAL|OPf_REF;
1387 else if (!type) { /* local() */
1390 o->op_private |= OPpLVAL_INTRO;
1391 o->op_flags &= ~OPf_SPECIAL;
1392 PL_hints |= HINT_BLOCK_SCOPE;
1397 if (ckWARN(WARN_SYNTAX)) {
1398 Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
1399 "Useless localization of %s", OP_DESC(o));
1403 else if (type != OP_GREPSTART && type != OP_ENTERSUB
1404 && type != OP_LEAVESUBLV)
1405 o->op_flags |= OPf_REF;
1410 S_scalar_mod_type(const OP *o, I32 type)
1414 if (o->op_type == OP_RV2GV)
1438 case OP_RIGHT_SHIFT:
1457 S_is_handle_constructor(const OP *o, I32 numargs)
1459 switch (o->op_type) {
1467 case OP_SELECT: /* XXX c.f. SelectSaver.pm */
1480 Perl_refkids(pTHX_ OP *o, I32 type)
1482 if (o && o->op_flags & OPf_KIDS) {
1484 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
1491 Perl_doref(pTHX_ OP *o, I32 type, bool set_op_ref)
1496 if (!o || PL_error_count)
1499 switch (o->op_type) {
1501 if ((type == OP_EXISTS || type == OP_DEFINED || type == OP_LOCK) &&
1502 !(o->op_flags & OPf_STACKED)) {
1503 o->op_type = OP_RV2CV; /* entersub => rv2cv */
1504 o->op_ppaddr = PL_ppaddr[OP_RV2CV];
1505 assert(cUNOPo->op_first->op_type == OP_NULL);
1506 op_null(((LISTOP*)cUNOPo->op_first)->op_first); /* disable pushmark */
1507 o->op_flags |= OPf_SPECIAL;
1508 o->op_private &= ~1;
1513 for (kid = cUNOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
1514 doref(kid, type, set_op_ref);
1517 if (type == OP_DEFINED)
1518 o->op_flags |= OPf_SPECIAL; /* don't create GV */
1519 doref(cUNOPo->op_first, o->op_type, set_op_ref);
1522 if (type == OP_RV2SV || type == OP_RV2AV || type == OP_RV2HV) {
1523 o->op_private |= (type == OP_RV2AV ? OPpDEREF_AV
1524 : type == OP_RV2HV ? OPpDEREF_HV
1526 o->op_flags |= OPf_MOD;
1531 o->op_flags |= OPf_MOD; /* XXX ??? */
1537 o->op_flags |= OPf_REF;
1540 if (type == OP_DEFINED)
1541 o->op_flags |= OPf_SPECIAL; /* don't create GV */
1542 doref(cUNOPo->op_first, o->op_type, set_op_ref);
1548 o->op_flags |= OPf_REF;
1553 if (!(o->op_flags & OPf_KIDS))
1555 doref(cBINOPo->op_first, type, set_op_ref);
1559 doref(cBINOPo->op_first, o->op_type, set_op_ref);
1560 if (type == OP_RV2SV || type == OP_RV2AV || type == OP_RV2HV) {
1561 o->op_private |= (type == OP_RV2AV ? OPpDEREF_AV
1562 : type == OP_RV2HV ? OPpDEREF_HV
1564 o->op_flags |= OPf_MOD;
1574 if (!(o->op_flags & OPf_KIDS))
1576 doref(cLISTOPo->op_last, type, set_op_ref);
1586 S_dup_attrlist(pTHX_ OP *o)
1591 /* An attrlist is either a simple OP_CONST or an OP_LIST with kids,
1592 * where the first kid is OP_PUSHMARK and the remaining ones
1593 * are OP_CONST. We need to push the OP_CONST values.
1595 if (o->op_type == OP_CONST)
1596 rop = newSVOP(OP_CONST, o->op_flags, SvREFCNT_inc_NN(cSVOPo->op_sv));
1598 else if (o->op_type == OP_NULL)
1602 assert((o->op_type == OP_LIST) && (o->op_flags & OPf_KIDS));
1604 for (o = cLISTOPo->op_first; o; o=o->op_sibling) {
1605 if (o->op_type == OP_CONST)
1606 rop = append_elem(OP_LIST, rop,
1607 newSVOP(OP_CONST, o->op_flags,
1608 SvREFCNT_inc_NN(cSVOPo->op_sv)));
1615 S_apply_attrs(pTHX_ HV *stash, SV *target, OP *attrs, bool for_my)
1620 /* fake up C<use attributes $pkg,$rv,@attrs> */
1621 ENTER; /* need to protect against side-effects of 'use' */
1623 stashsv = stash ? newSVhek(HvNAME_HEK(stash)) : &PL_sv_no;
1625 #define ATTRSMODULE "attributes"
1626 #define ATTRSMODULE_PM "attributes.pm"
1629 /* Don't force the C<use> if we don't need it. */
1630 SV * const * const svp = hv_fetchs(GvHVn(PL_incgv), ATTRSMODULE_PM, FALSE);
1631 if (svp && *svp != &PL_sv_undef)
1632 NOOP; /* already in %INC */
1634 Perl_load_module(aTHX_ PERL_LOADMOD_NOIMPORT,
1635 newSVpvs(ATTRSMODULE), NULL);
1638 Perl_load_module(aTHX_ PERL_LOADMOD_IMPORT_OPS,
1639 newSVpvs(ATTRSMODULE),
1641 prepend_elem(OP_LIST,
1642 newSVOP(OP_CONST, 0, stashsv),
1643 prepend_elem(OP_LIST,
1644 newSVOP(OP_CONST, 0,
1646 dup_attrlist(attrs))));
1652 S_apply_attrs_my(pTHX_ HV *stash, OP *target, OP *attrs, OP **imopsp)
1655 OP *pack, *imop, *arg;
1661 assert(target->op_type == OP_PADSV ||
1662 target->op_type == OP_PADHV ||
1663 target->op_type == OP_PADAV);
1665 /* Ensure that attributes.pm is loaded. */
1666 apply_attrs(stash, PAD_SV(target->op_targ), attrs, TRUE);
1668 /* Need package name for method call. */
1669 pack = newSVOP(OP_CONST, 0, newSVpvs(ATTRSMODULE));
1671 /* Build up the real arg-list. */
1672 stashsv = stash ? newSVhek(HvNAME_HEK(stash)) : &PL_sv_no;
1674 arg = newOP(OP_PADSV, 0);
1675 arg->op_targ = target->op_targ;
1676 arg = prepend_elem(OP_LIST,
1677 newSVOP(OP_CONST, 0, stashsv),
1678 prepend_elem(OP_LIST,
1679 newUNOP(OP_REFGEN, 0,
1680 mod(arg, OP_REFGEN)),
1681 dup_attrlist(attrs)));
1683 /* Fake up a method call to import */
1684 meth = newSVpvs_share("import");
1685 imop = convert(OP_ENTERSUB, OPf_STACKED|OPf_SPECIAL|OPf_WANT_VOID,
1686 append_elem(OP_LIST,
1687 prepend_elem(OP_LIST, pack, list(arg)),
1688 newSVOP(OP_METHOD_NAMED, 0, meth)));
1689 imop->op_private |= OPpENTERSUB_NOMOD;
1691 /* Combine the ops. */
1692 *imopsp = append_elem(OP_LIST, *imopsp, imop);
1696 =notfor apidoc apply_attrs_string
1698 Attempts to apply a list of attributes specified by the C<attrstr> and
1699 C<len> arguments to the subroutine identified by the C<cv> argument which
1700 is expected to be associated with the package identified by the C<stashpv>
1701 argument (see L<attributes>). It gets this wrong, though, in that it
1702 does not correctly identify the boundaries of the individual attribute
1703 specifications within C<attrstr>. This is not really intended for the
1704 public API, but has to be listed here for systems such as AIX which
1705 need an explicit export list for symbols. (It's called from XS code
1706 in support of the C<ATTRS:> keyword from F<xsubpp>.) Patches to fix it
1707 to respect attribute syntax properly would be welcome.
1713 Perl_apply_attrs_string(pTHX_ const char *stashpv, CV *cv,
1714 const char *attrstr, STRLEN len)
1719 len = strlen(attrstr);
1723 for (; isSPACE(*attrstr) && len; --len, ++attrstr) ;
1725 const char * const sstr = attrstr;
1726 for (; !isSPACE(*attrstr) && len; --len, ++attrstr) ;
1727 attrs = append_elem(OP_LIST, attrs,
1728 newSVOP(OP_CONST, 0,
1729 newSVpvn(sstr, attrstr-sstr)));
1733 Perl_load_module(aTHX_ PERL_LOADMOD_IMPORT_OPS,
1734 newSVpvs(ATTRSMODULE),
1735 NULL, prepend_elem(OP_LIST,
1736 newSVOP(OP_CONST, 0, newSVpv(stashpv,0)),
1737 prepend_elem(OP_LIST,
1738 newSVOP(OP_CONST, 0,
1744 S_my_kid(pTHX_ OP *o, OP *attrs, OP **imopsp)
1749 if (!o || PL_error_count)
1753 if (PL_madskills && type == OP_NULL && o->op_flags & OPf_KIDS) {
1754 (void)my_kid(cUNOPo->op_first, attrs, imopsp);
1758 if (type == OP_LIST) {
1760 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
1761 my_kid(kid, attrs, imopsp);
1762 } else if (type == OP_UNDEF
1768 } else if (type == OP_RV2SV || /* "our" declaration */
1770 type == OP_RV2HV) { /* XXX does this let anything illegal in? */
1771 if (cUNOPo->op_first->op_type != OP_GV) { /* MJD 20011224 */
1772 yyerror(Perl_form(aTHX_ "Can't declare %s in %s",
1774 PL_in_my == KEY_our ? "our" : PL_in_my == KEY_state ? "state" : "my"));
1776 GV * const gv = cGVOPx_gv(cUNOPo->op_first);
1778 PL_in_my_stash = NULL;
1779 apply_attrs(GvSTASH(gv),
1780 (type == OP_RV2SV ? GvSV(gv) :
1781 type == OP_RV2AV ? (SV*)GvAV(gv) :
1782 type == OP_RV2HV ? (SV*)GvHV(gv) : (SV*)gv),
1785 o->op_private |= OPpOUR_INTRO;
1788 else if (type != OP_PADSV &&
1791 type != OP_PUSHMARK)
1793 yyerror(Perl_form(aTHX_ "Can't declare %s in \"%s\"",
1795 PL_in_my == KEY_our ? "our" : PL_in_my == KEY_state ? "state" : "my"));
1798 else if (attrs && type != OP_PUSHMARK) {
1802 PL_in_my_stash = NULL;
1804 /* check for C<my Dog $spot> when deciding package */
1805 stash = PAD_COMPNAME_TYPE(o->op_targ);
1807 stash = PL_curstash;
1808 apply_attrs_my(stash, o, attrs, imopsp);
1810 o->op_flags |= OPf_MOD;
1811 o->op_private |= OPpLVAL_INTRO;
1812 if (PL_in_my == KEY_state)
1813 o->op_private |= OPpPAD_STATE;
1818 Perl_my_attrs(pTHX_ OP *o, OP *attrs)
1822 int maybe_scalar = 0;
1824 /* [perl #17376]: this appears to be premature, and results in code such as
1825 C< our(%x); > executing in list mode rather than void mode */
1827 if (o->op_flags & OPf_PARENS)
1837 o = my_kid(o, attrs, &rops);
1839 if (maybe_scalar && o->op_type == OP_PADSV) {
1840 o = scalar(append_list(OP_LIST, (LISTOP*)rops, (LISTOP*)o));
1841 o->op_private |= OPpLVAL_INTRO;
1844 o = append_list(OP_LIST, (LISTOP*)o, (LISTOP*)rops);
1847 PL_in_my_stash = NULL;
1852 Perl_my(pTHX_ OP *o)
1854 return my_attrs(o, NULL);
1858 Perl_sawparens(pTHX_ OP *o)
1860 PERL_UNUSED_CONTEXT;
1862 o->op_flags |= OPf_PARENS;
1867 Perl_bind_match(pTHX_ I32 type, OP *left, OP *right)
1871 const OPCODE ltype = left->op_type;
1872 const OPCODE rtype = right->op_type;
1874 if ( (ltype == OP_RV2AV || ltype == OP_RV2HV || ltype == OP_PADAV
1875 || ltype == OP_PADHV) && ckWARN(WARN_MISC))
1877 const char * const desc
1878 = PL_op_desc[(rtype == OP_SUBST || rtype == OP_TRANS)
1879 ? rtype : OP_MATCH];
1880 const char * const sample = ((ltype == OP_RV2AV || ltype == OP_PADAV)
1881 ? "@array" : "%hash");
1882 Perl_warner(aTHX_ packWARN(WARN_MISC),
1883 "Applying %s to %s will act on scalar(%s)",
1884 desc, sample, sample);
1887 if (rtype == OP_CONST &&
1888 cSVOPx(right)->op_private & OPpCONST_BARE &&
1889 cSVOPx(right)->op_private & OPpCONST_STRICT)
1891 no_bareword_allowed(right);
1894 ismatchop = rtype == OP_MATCH ||
1895 rtype == OP_SUBST ||
1897 if (ismatchop && right->op_private & OPpTARGET_MY) {
1899 right->op_private &= ~OPpTARGET_MY;
1901 if (!(right->op_flags & OPf_STACKED) && ismatchop) {
1904 right->op_flags |= OPf_STACKED;
1905 if (rtype != OP_MATCH &&
1906 ! (rtype == OP_TRANS &&
1907 right->op_private & OPpTRANS_IDENTICAL))
1908 newleft = mod(left, rtype);
1911 if (right->op_type == OP_TRANS)
1912 o = newBINOP(OP_NULL, OPf_STACKED, scalar(newleft), right);
1914 o = prepend_elem(rtype, scalar(newleft), right);
1916 return newUNOP(OP_NOT, 0, scalar(o));
1920 return bind_match(type, left,
1921 pmruntime(newPMOP(OP_MATCH, 0), right, 0));
1925 Perl_invert(pTHX_ OP *o)
1929 return newUNOP(OP_NOT, OPf_SPECIAL, scalar(o));
1933 Perl_scope(pTHX_ OP *o)
1937 if (o->op_flags & OPf_PARENS || PERLDB_NOOPT || PL_tainting) {
1938 o = prepend_elem(OP_LINESEQ, newOP(OP_ENTER, 0), o);
1939 o->op_type = OP_LEAVE;
1940 o->op_ppaddr = PL_ppaddr[OP_LEAVE];
1942 else if (o->op_type == OP_LINESEQ) {
1944 o->op_type = OP_SCOPE;
1945 o->op_ppaddr = PL_ppaddr[OP_SCOPE];
1946 kid = ((LISTOP*)o)->op_first;
1947 if (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) {
1950 /* The following deals with things like 'do {1 for 1}' */
1951 kid = kid->op_sibling;
1953 (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE))
1958 o = newLISTOP(OP_SCOPE, 0, o, NULL);
1964 Perl_block_start(pTHX_ int full)
1967 const int retval = PL_savestack_ix;
1968 pad_block_start(full);
1970 PL_hints &= ~HINT_BLOCK_SCOPE;
1971 SAVECOMPILEWARNINGS();
1972 PL_compiling.cop_warnings = DUP_WARNINGS(PL_compiling.cop_warnings);
1977 Perl_block_end(pTHX_ I32 floor, OP *seq)
1980 const int needblockscope = PL_hints & HINT_BLOCK_SCOPE;
1981 OP* const retval = scalarseq(seq);
1983 CopHINTS_set(&PL_compiling, PL_hints);
1985 PL_hints |= HINT_BLOCK_SCOPE; /* propagate out */
1994 const PADOFFSET offset = pad_findmy("$_");
1995 if (offset == NOT_IN_PAD || PAD_COMPNAME_FLAGS_isOUR(offset)) {
1996 return newSVREF(newGVOP(OP_GV, 0, PL_defgv));
1999 OP * const o = newOP(OP_PADSV, 0);
2000 o->op_targ = offset;
2006 Perl_newPROG(pTHX_ OP *o)
2012 PL_eval_root = newUNOP(OP_LEAVEEVAL,
2013 ((PL_in_eval & EVAL_KEEPERR)
2014 ? OPf_SPECIAL : 0), o);
2015 PL_eval_start = linklist(PL_eval_root);
2016 PL_eval_root->op_private |= OPpREFCOUNTED;
2017 OpREFCNT_set(PL_eval_root, 1);
2018 PL_eval_root->op_next = 0;
2019 CALL_PEEP(PL_eval_start);
2022 if (o->op_type == OP_STUB) {
2023 PL_comppad_name = 0;
2028 PL_main_root = scope(sawparens(scalarvoid(o)));
2029 PL_curcop = &PL_compiling;
2030 PL_main_start = LINKLIST(PL_main_root);
2031 PL_main_root->op_private |= OPpREFCOUNTED;
2032 OpREFCNT_set(PL_main_root, 1);
2033 PL_main_root->op_next = 0;
2034 CALL_PEEP(PL_main_start);
2037 /* Register with debugger */
2039 CV * const cv = get_cv("DB::postponed", FALSE);
2043 XPUSHs((SV*)CopFILEGV(&PL_compiling));
2045 call_sv((SV*)cv, G_DISCARD);
2052 Perl_localize(pTHX_ OP *o, I32 lex)
2055 if (o->op_flags & OPf_PARENS)
2056 /* [perl #17376]: this appears to be premature, and results in code such as
2057 C< our(%x); > executing in list mode rather than void mode */
2064 if ( PL_bufptr > PL_oldbufptr && PL_bufptr[-1] == ','
2065 && ckWARN(WARN_PARENTHESIS))
2067 char *s = PL_bufptr;
2070 /* some heuristics to detect a potential error */
2071 while (*s && (strchr(", \t\n", *s)))
2075 if (*s && strchr("@$%*", *s) && *++s
2076 && (isALNUM(*s) || UTF8_IS_CONTINUED(*s))) {
2079 while (*s && (isALNUM(*s) || UTF8_IS_CONTINUED(*s)))
2081 while (*s && (strchr(", \t\n", *s)))
2087 if (sigil && (*s == ';' || *s == '=')) {
2088 Perl_warner(aTHX_ packWARN(WARN_PARENTHESIS),
2089 "Parentheses missing around \"%s\" list",
2090 lex ? (PL_in_my == KEY_our ? "our" : PL_in_my == KEY_state ? "state" : "my")
2098 o = mod(o, OP_NULL); /* a bit kludgey */
2100 PL_in_my_stash = NULL;
2105 Perl_jmaybe(pTHX_ OP *o)
2107 if (o->op_type == OP_LIST) {
2109 = newSVREF(newGVOP(OP_GV, 0, gv_fetchpvs(";", GV_ADD|GV_NOTQUAL, SVt_PV)));
2110 o = convert(OP_JOIN, 0, prepend_elem(OP_LIST, o2, o));
2116 Perl_fold_constants(pTHX_ register OP *o)
2121 I32 type = o->op_type;
2126 SV * const oldwarnhook = PL_warnhook;
2127 SV * const olddiehook = PL_diehook;
2130 if (PL_opargs[type] & OA_RETSCALAR)
2132 if (PL_opargs[type] & OA_TARGET && !o->op_targ)
2133 o->op_targ = pad_alloc(type, SVs_PADTMP);
2135 /* integerize op, unless it happens to be C<-foo>.
2136 * XXX should pp_i_negate() do magic string negation instead? */
2137 if ((PL_opargs[type] & OA_OTHERINT) && (PL_hints & HINT_INTEGER)
2138 && !(type == OP_NEGATE && cUNOPo->op_first->op_type == OP_CONST
2139 && (cUNOPo->op_first->op_private & OPpCONST_BARE)))
2141 o->op_ppaddr = PL_ppaddr[type = ++(o->op_type)];
2144 if (!(PL_opargs[type] & OA_FOLDCONST))
2149 /* XXX might want a ck_negate() for this */
2150 cUNOPo->op_first->op_private &= ~OPpCONST_STRICT;
2161 /* XXX what about the numeric ops? */
2162 if (PL_hints & HINT_LOCALE)
2167 goto nope; /* Don't try to run w/ errors */
2169 for (curop = LINKLIST(o); curop != o; curop = LINKLIST(curop)) {
2170 const OPCODE type = curop->op_type;
2171 if ((type != OP_CONST || (curop->op_private & OPpCONST_BARE)) &&
2173 type != OP_SCALAR &&
2175 type != OP_PUSHMARK)
2181 curop = LINKLIST(o);
2182 old_next = o->op_next;
2186 oldscope = PL_scopestack_ix;
2187 create_eval_scope(G_FAKINGEVAL);
2189 PL_warnhook = PERL_WARNHOOK_FATAL;
2196 sv = *(PL_stack_sp--);
2197 if (o->op_targ && sv == PAD_SV(o->op_targ)) /* grab pad temp? */
2198 pad_swipe(o->op_targ, FALSE);
2199 else if (SvTEMP(sv)) { /* grab mortal temp? */
2200 SvREFCNT_inc_simple_void(sv);
2205 /* Something tried to die. Abandon constant folding. */
2206 /* Pretend the error never happened. */
2207 sv_setpvn(ERRSV,"",0);
2208 o->op_next = old_next;
2212 /* Don't expect 1 (setjmp failed) or 2 (something called my_exit) */
2213 PL_warnhook = oldwarnhook;
2214 PL_diehook = olddiehook;
2215 /* XXX note that this croak may fail as we've already blown away
2216 * the stack - eg any nested evals */
2217 Perl_croak(aTHX_ "panic: fold_constants JMPENV_PUSH returned %d", ret);
2220 PL_warnhook = oldwarnhook;
2221 PL_diehook = olddiehook;
2223 if (PL_scopestack_ix > oldscope)
2224 delete_eval_scope();
2233 if (type == OP_RV2GV)
2234 newop = newGVOP(OP_GV, 0, (GV*)sv);
2236 newop = newSVOP(OP_CONST, 0, sv);
2237 op_getmad(o,newop,'f');
2245 Perl_gen_constant_list(pTHX_ register OP *o)
2249 const I32 oldtmps_floor = PL_tmps_floor;
2253 return o; /* Don't attempt to run with errors */
2255 PL_op = curop = LINKLIST(o);
2262 PL_tmps_floor = oldtmps_floor;
2264 o->op_type = OP_RV2AV;
2265 o->op_ppaddr = PL_ppaddr[OP_RV2AV];
2266 o->op_flags &= ~OPf_REF; /* treat \(1..2) like an ordinary list */
2267 o->op_flags |= OPf_PARENS; /* and flatten \(1..2,3) */
2268 o->op_opt = 0; /* needs to be revisited in peep() */
2269 curop = ((UNOP*)o)->op_first;
2270 ((UNOP*)o)->op_first = newSVOP(OP_CONST, 0, SvREFCNT_inc_NN(*PL_stack_sp--));
2272 op_getmad(curop,o,'O');
2281 Perl_convert(pTHX_ I32 type, I32 flags, OP *o)
2284 if (!o || o->op_type != OP_LIST)
2285 o = newLISTOP(OP_LIST, 0, o, NULL);
2287 o->op_flags &= ~OPf_WANT;
2289 if (!(PL_opargs[type] & OA_MARK))
2290 op_null(cLISTOPo->op_first);
2292 o->op_type = (OPCODE)type;
2293 o->op_ppaddr = PL_ppaddr[type];
2294 o->op_flags |= flags;
2296 o = CHECKOP(type, o);
2297 if (o->op_type != (unsigned)type)
2300 return fold_constants(o);
2303 /* List constructors */
2306 Perl_append_elem(pTHX_ I32 type, OP *first, OP *last)
2314 if (first->op_type != (unsigned)type
2315 || (type == OP_LIST && (first->op_flags & OPf_PARENS)))
2317 return newLISTOP(type, 0, first, last);
2320 if (first->op_flags & OPf_KIDS)
2321 ((LISTOP*)first)->op_last->op_sibling = last;
2323 first->op_flags |= OPf_KIDS;
2324 ((LISTOP*)first)->op_first = last;
2326 ((LISTOP*)first)->op_last = last;
2331 Perl_append_list(pTHX_ I32 type, LISTOP *first, LISTOP *last)
2339 if (first->op_type != (unsigned)type)
2340 return prepend_elem(type, (OP*)first, (OP*)last);
2342 if (last->op_type != (unsigned)type)
2343 return append_elem(type, (OP*)first, (OP*)last);
2345 first->op_last->op_sibling = last->op_first;
2346 first->op_last = last->op_last;
2347 first->op_flags |= (last->op_flags & OPf_KIDS);
2350 if (last->op_first && first->op_madprop) {
2351 MADPROP *mp = last->op_first->op_madprop;
2353 while (mp->mad_next)
2355 mp->mad_next = first->op_madprop;
2358 last->op_first->op_madprop = first->op_madprop;
2361 first->op_madprop = last->op_madprop;
2362 last->op_madprop = 0;
2371 Perl_prepend_elem(pTHX_ I32 type, OP *first, OP *last)
2379 if (last->op_type == (unsigned)type) {
2380 if (type == OP_LIST) { /* already a PUSHMARK there */
2381 first->op_sibling = ((LISTOP*)last)->op_first->op_sibling;
2382 ((LISTOP*)last)->op_first->op_sibling = first;
2383 if (!(first->op_flags & OPf_PARENS))
2384 last->op_flags &= ~OPf_PARENS;
2387 if (!(last->op_flags & OPf_KIDS)) {
2388 ((LISTOP*)last)->op_last = first;
2389 last->op_flags |= OPf_KIDS;
2391 first->op_sibling = ((LISTOP*)last)->op_first;
2392 ((LISTOP*)last)->op_first = first;
2394 last->op_flags |= OPf_KIDS;
2398 return newLISTOP(type, 0, first, last);
2406 Perl_newTOKEN(pTHX_ I32 optype, YYSTYPE lval, MADPROP* madprop)
2409 Newxz(tk, 1, TOKEN);
2410 tk->tk_type = (OPCODE)optype;
2411 tk->tk_type = 12345;
2413 tk->tk_mad = madprop;
2418 Perl_token_free(pTHX_ TOKEN* tk)
2420 if (tk->tk_type != 12345)
2422 mad_free(tk->tk_mad);
2427 Perl_token_getmad(pTHX_ TOKEN* tk, OP* o, char slot)
2431 if (tk->tk_type != 12345) {
2432 Perl_warner(aTHX_ packWARN(WARN_MISC),
2433 "Invalid TOKEN object ignored");
2440 /* faked up qw list? */
2442 tm->mad_type == MAD_SV &&
2443 SvPVX((SV*)tm->mad_val)[0] == 'q')
2450 /* pretend constant fold didn't happen? */
2451 if (mp->mad_key == 'f' &&
2452 (o->op_type == OP_CONST ||
2453 o->op_type == OP_GV) )
2455 token_getmad(tk,(OP*)mp->mad_val,slot);
2469 if (mp->mad_key == 'X')
2470 mp->mad_key = slot; /* just change the first one */
2480 Perl_op_getmad_weak(pTHX_ OP* from, OP* o, char slot)
2489 /* pretend constant fold didn't happen? */
2490 if (mp->mad_key == 'f' &&
2491 (o->op_type == OP_CONST ||
2492 o->op_type == OP_GV) )
2494 op_getmad(from,(OP*)mp->mad_val,slot);
2501 mp->mad_next = newMADPROP(slot,MAD_OP,from,0);
2504 o->op_madprop = newMADPROP(slot,MAD_OP,from,0);
2510 Perl_op_getmad(pTHX_ OP* from, OP* o, char slot)
2519 /* pretend constant fold didn't happen? */
2520 if (mp->mad_key == 'f' &&
2521 (o->op_type == OP_CONST ||
2522 o->op_type == OP_GV) )
2524 op_getmad(from,(OP*)mp->mad_val,slot);
2531 mp->mad_next = newMADPROP(slot,MAD_OP,from,1);
2534 o->op_madprop = newMADPROP(slot,MAD_OP,from,1);
2538 PerlIO_printf(PerlIO_stderr(),
2539 "DESTROYING op = %0"UVxf"\n", PTR2UV(from));
2545 Perl_prepend_madprops(pTHX_ MADPROP* mp, OP* o, char slot)
2563 Perl_append_madprops(pTHX_ MADPROP* tm, OP* o, char slot)
2567 addmad(tm, &(o->op_madprop), slot);
2571 Perl_addmad(pTHX_ MADPROP* tm, MADPROP** root, char slot)
2592 Perl_newMADsv(pTHX_ char key, SV* sv)
2594 return newMADPROP(key, MAD_SV, sv, 0);
2598 Perl_newMADPROP(pTHX_ char key, char type, void* val, I32 vlen)
2601 Newxz(mp, 1, MADPROP);
2604 mp->mad_vlen = vlen;
2605 mp->mad_type = type;
2607 /* PerlIO_printf(PerlIO_stderr(), "NEW mp = %0x\n", mp); */
2612 Perl_mad_free(pTHX_ MADPROP* mp)
2614 /* PerlIO_printf(PerlIO_stderr(), "FREE mp = %0x\n", mp); */
2618 mad_free(mp->mad_next);
2619 /* if (PL_lex_state != LEX_NOTPARSING && mp->mad_vlen)
2620 PerlIO_printf(PerlIO_stderr(), "DESTROYING '%c'=<%s>\n", mp->mad_key & 255, mp->mad_val); */
2621 switch (mp->mad_type) {
2625 Safefree((char*)mp->mad_val);
2628 if (mp->mad_vlen) /* vlen holds "strong/weak" boolean */
2629 op_free((OP*)mp->mad_val);
2632 sv_free((SV*)mp->mad_val);
2635 PerlIO_printf(PerlIO_stderr(), "Unrecognized mad\n");
2644 Perl_newNULLLIST(pTHX)
2646 return newOP(OP_STUB, 0);
2650 Perl_force_list(pTHX_ OP *o)
2652 if (!o || o->op_type != OP_LIST)
2653 o = newLISTOP(OP_LIST, 0, o, NULL);
2659 Perl_newLISTOP(pTHX_ I32 type, I32 flags, OP *first, OP *last)
2664 NewOp(1101, listop, 1, LISTOP);
2666 listop->op_type = (OPCODE)type;
2667 listop->op_ppaddr = PL_ppaddr[type];
2670 listop->op_flags = (U8)flags;
2674 else if (!first && last)
2677 first->op_sibling = last;
2678 listop->op_first = first;
2679 listop->op_last = last;
2680 if (type == OP_LIST) {
2681 OP* const pushop = newOP(OP_PUSHMARK, 0);
2682 pushop->op_sibling = first;
2683 listop->op_first = pushop;
2684 listop->op_flags |= OPf_KIDS;
2686 listop->op_last = pushop;
2689 return CHECKOP(type, listop);
2693 Perl_newOP(pTHX_ I32 type, I32 flags)
2697 NewOp(1101, o, 1, OP);
2698 o->op_type = (OPCODE)type;
2699 o->op_ppaddr = PL_ppaddr[type];
2700 o->op_flags = (U8)flags;
2703 o->op_private = (U8)(0 | (flags >> 8));
2704 if (PL_opargs[type] & OA_RETSCALAR)
2706 if (PL_opargs[type] & OA_TARGET)
2707 o->op_targ = pad_alloc(type, SVs_PADTMP);
2708 return CHECKOP(type, o);
2712 Perl_newUNOP(pTHX_ I32 type, I32 flags, OP *first)
2718 first = newOP(OP_STUB, 0);
2719 if (PL_opargs[type] & OA_MARK)
2720 first = force_list(first);
2722 NewOp(1101, unop, 1, UNOP);
2723 unop->op_type = (OPCODE)type;
2724 unop->op_ppaddr = PL_ppaddr[type];
2725 unop->op_first = first;
2726 unop->op_flags = (U8)(flags | OPf_KIDS);
2727 unop->op_private = (U8)(1 | (flags >> 8));
2728 unop = (UNOP*) CHECKOP(type, unop);
2732 return fold_constants((OP *) unop);
2736 Perl_newBINOP(pTHX_ I32 type, I32 flags, OP *first, OP *last)
2740 NewOp(1101, binop, 1, BINOP);
2743 first = newOP(OP_NULL, 0);
2745 binop->op_type = (OPCODE)type;
2746 binop->op_ppaddr = PL_ppaddr[type];
2747 binop->op_first = first;
2748 binop->op_flags = (U8)(flags | OPf_KIDS);
2751 binop->op_private = (U8)(1 | (flags >> 8));
2754 binop->op_private = (U8)(2 | (flags >> 8));
2755 first->op_sibling = last;
2758 binop = (BINOP*)CHECKOP(type, binop);
2759 if (binop->op_next || binop->op_type != (OPCODE)type)
2762 binop->op_last = binop->op_first->op_sibling;
2764 return fold_constants((OP *)binop);
2767 static int uvcompare(const void *a, const void *b)
2768 __attribute__nonnull__(1)
2769 __attribute__nonnull__(2)
2770 __attribute__pure__;
2771 static int uvcompare(const void *a, const void *b)
2773 if (*((const UV *)a) < (*(const UV *)b))
2775 if (*((const UV *)a) > (*(const UV *)b))
2777 if (*((const UV *)a+1) < (*(const UV *)b+1))
2779 if (*((const UV *)a+1) > (*(const UV *)b+1))
2785 Perl_pmtrans(pTHX_ OP *o, OP *expr, OP *repl)
2788 SV * const tstr = ((SVOP*)expr)->op_sv;
2789 SV * const rstr = ((SVOP*)repl)->op_sv;
2792 const U8 *t = (U8*)SvPV_const(tstr, tlen);
2793 const U8 *r = (U8*)SvPV_const(rstr, rlen);
2797 register short *tbl;
2799 const I32 complement = o->op_private & OPpTRANS_COMPLEMENT;
2800 const I32 squash = o->op_private & OPpTRANS_SQUASH;
2801 I32 del = o->op_private & OPpTRANS_DELETE;
2802 PL_hints |= HINT_BLOCK_SCOPE;
2805 o->op_private |= OPpTRANS_FROM_UTF;
2808 o->op_private |= OPpTRANS_TO_UTF;
2810 if (o->op_private & (OPpTRANS_FROM_UTF|OPpTRANS_TO_UTF)) {
2811 SV* const listsv = newSVpvs("# comment\n");
2813 const U8* tend = t + tlen;
2814 const U8* rend = r + rlen;
2828 const I32 from_utf = o->op_private & OPpTRANS_FROM_UTF;
2829 const I32 to_utf = o->op_private & OPpTRANS_TO_UTF;
2832 const U32 flags = UTF8_ALLOW_DEFAULT;
2836 t = tsave = bytes_to_utf8(t, &len);
2839 if (!to_utf && rlen) {
2841 r = rsave = bytes_to_utf8(r, &len);
2845 /* There are several snags with this code on EBCDIC:
2846 1. 0xFF is a legal UTF-EBCDIC byte (there are no illegal bytes).
2847 2. scan_const() in toke.c has encoded chars in native encoding which makes
2848 ranges at least in EBCDIC 0..255 range the bottom odd.
2852 U8 tmpbuf[UTF8_MAXBYTES+1];
2855 Newx(cp, 2*tlen, UV);
2857 transv = newSVpvs("");
2859 cp[2*i] = utf8n_to_uvuni(t, tend-t, &ulen, flags);
2861 if (t < tend && NATIVE_TO_UTF(*t) == 0xff) {
2863 cp[2*i+1] = utf8n_to_uvuni(t, tend-t, &ulen, flags);
2867 cp[2*i+1] = cp[2*i];
2871 qsort(cp, i, 2*sizeof(UV), uvcompare);
2872 for (j = 0; j < i; j++) {
2874 diff = val - nextmin;
2876 t = uvuni_to_utf8(tmpbuf,nextmin);
2877 sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf);
2879 U8 range_mark = UTF_TO_NATIVE(0xff);
2880 t = uvuni_to_utf8(tmpbuf, val - 1);
2881 sv_catpvn(transv, (char *)&range_mark, 1);
2882 sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf);
2889 t = uvuni_to_utf8(tmpbuf,nextmin);
2890 sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf);
2892 U8 range_mark = UTF_TO_NATIVE(0xff);
2893 sv_catpvn(transv, (char *)&range_mark, 1);
2895 t = uvuni_to_utf8_flags(tmpbuf, 0x7fffffff,
2896 UNICODE_ALLOW_SUPER);
2897 sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf);
2898 t = (const U8*)SvPVX_const(transv);
2899 tlen = SvCUR(transv);
2903 else if (!rlen && !del) {
2904 r = t; rlen = tlen; rend = tend;
2907 if ((!rlen && !del) || t == r ||
2908 (tlen == rlen && memEQ((char *)t, (char *)r, tlen)))
2910 o->op_private |= OPpTRANS_IDENTICAL;
2914 while (t < tend || tfirst <= tlast) {
2915 /* see if we need more "t" chars */
2916 if (tfirst > tlast) {
2917 tfirst = (I32)utf8n_to_uvuni(t, tend - t, &ulen, flags);
2919 if (t < tend && NATIVE_TO_UTF(*t) == 0xff) { /* illegal utf8 val indicates range */
2921 tlast = (I32)utf8n_to_uvuni(t, tend - t, &ulen, flags);
2928 /* now see if we need more "r" chars */
2929 if (rfirst > rlast) {
2931 rfirst = (I32)utf8n_to_uvuni(r, rend - r, &ulen, flags);
2933 if (r < rend && NATIVE_TO_UTF(*r) == 0xff) { /* illegal utf8 val indicates range */
2935 rlast = (I32)utf8n_to_uvuni(r, rend - r, &ulen, flags);
2944 rfirst = rlast = 0xffffffff;
2948 /* now see which range will peter our first, if either. */
2949 tdiff = tlast - tfirst;
2950 rdiff = rlast - rfirst;
2957 if (rfirst == 0xffffffff) {
2958 diff = tdiff; /* oops, pretend rdiff is infinite */
2960 Perl_sv_catpvf(aTHX_ listsv, "%04lx\t%04lx\tXXXX\n",
2961 (long)tfirst, (long)tlast);
2963 Perl_sv_catpvf(aTHX_ listsv, "%04lx\t\tXXXX\n", (long)tfirst);
2967 Perl_sv_catpvf(aTHX_ listsv, "%04lx\t%04lx\t%04lx\n",
2968 (long)tfirst, (long)(tfirst + diff),
2971 Perl_sv_catpvf(aTHX_ listsv, "%04lx\t\t%04lx\n",
2972 (long)tfirst, (long)rfirst);
2974 if (rfirst + diff > max)
2975 max = rfirst + diff;
2977 grows = (tfirst < rfirst &&
2978 UNISKIP(tfirst) < UNISKIP(rfirst + diff));
2990 else if (max > 0xff)
2995 Safefree(cPVOPo->op_pv);
2996 cSVOPo->op_sv = (SV*)swash_init("utf8", "", listsv, bits, none);
2997 SvREFCNT_dec(listsv);
2998 SvREFCNT_dec(transv);
3000 if (!del && havefinal && rlen)
3001 (void)hv_store((HV*)SvRV((cSVOPo->op_sv)), "FINAL", 5,
3002 newSVuv((UV)final), 0);
3005 o->op_private |= OPpTRANS_GROWS;
3011 op_getmad(expr,o,'e');
3012 op_getmad(repl,o,'r');
3020 tbl = (short*)cPVOPo->op_pv;
3022 Zero(tbl, 256, short);
3023 for (i = 0; i < (I32)tlen; i++)
3025 for (i = 0, j = 0; i < 256; i++) {
3027 if (j >= (I32)rlen) {
3036 if (i < 128 && r[j] >= 128)
3046 o->op_private |= OPpTRANS_IDENTICAL;
3048 else if (j >= (I32)rlen)
3051 cPVOPo->op_pv = (char*)Renew(tbl, 0x101+rlen-j, short);
3052 tbl[0x100] = (short)(rlen - j);
3053 for (i=0; i < (I32)rlen - j; i++)
3054 tbl[0x101+i] = r[j+i];
3058 if (!rlen && !del) {
3061 o->op_private |= OPpTRANS_IDENTICAL;
3063 else if (!squash && rlen == tlen && memEQ((char*)t, (char*)r, tlen)) {
3064 o->op_private |= OPpTRANS_IDENTICAL;
3066 for (i = 0; i < 256; i++)
3068 for (i = 0, j = 0; i < (I32)tlen; i++,j++) {
3069 if (j >= (I32)rlen) {
3071 if (tbl[t[i]] == -1)
3077 if (tbl[t[i]] == -1) {
3078 if (t[i] < 128 && r[j] >= 128)
3085 o->op_private |= OPpTRANS_GROWS;
3087 op_getmad(expr,o,'e');
3088 op_getmad(repl,o,'r');
3098 Perl_newPMOP(pTHX_ I32 type, I32 flags)
3103 NewOp(1101, pmop, 1, PMOP);
3104 pmop->op_type = (OPCODE)type;
3105 pmop->op_ppaddr = PL_ppaddr[type];
3106 pmop->op_flags = (U8)flags;
3107 pmop->op_private = (U8)(0 | (flags >> 8));
3109 if (PL_hints & HINT_RE_TAINT)
3110 pmop->op_pmpermflags |= PMf_RETAINT;
3111 if (PL_hints & HINT_LOCALE)
3112 pmop->op_pmpermflags |= PMf_LOCALE;
3113 pmop->op_pmflags = pmop->op_pmpermflags;
3116 if (av_len((AV*) PL_regex_pad[0]) > -1) {
3117 SV * const repointer = av_pop((AV*)PL_regex_pad[0]);
3118 pmop->op_pmoffset = SvIV(repointer);
3119 SvREPADTMP_off(repointer);
3120 sv_setiv(repointer,0);
3122 SV * const repointer = newSViv(0);
3123 av_push(PL_regex_padav, SvREFCNT_inc_simple_NN(repointer));
3124 pmop->op_pmoffset = av_len(PL_regex_padav);
3125 PL_regex_pad = AvARRAY(PL_regex_padav);
3129 /* link into pm list */
3130 if (type != OP_TRANS && PL_curstash) {
3131 MAGIC *mg = mg_find((SV*)PL_curstash, PERL_MAGIC_symtab);
3134 mg = sv_magicext((SV*)PL_curstash, 0, PERL_MAGIC_symtab, 0, 0, 0);
3136 pmop->op_pmnext = (PMOP*)mg->mg_obj;
3137 mg->mg_obj = (SV*)pmop;
3138 PmopSTASH_set(pmop,PL_curstash);
3141 return CHECKOP(type, pmop);
3144 /* Given some sort of match op o, and an expression expr containing a
3145 * pattern, either compile expr into a regex and attach it to o (if it's
3146 * constant), or convert expr into a runtime regcomp op sequence (if it's
3149 * isreg indicates that the pattern is part of a regex construct, eg
3150 * $x =~ /pattern/ or split /pattern/, as opposed to $x =~ $pattern or
3151 * split "pattern", which aren't. In the former case, expr will be a list
3152 * if the pattern contains more than one term (eg /a$b/) or if it contains
3153 * a replacement, ie s/// or tr///.
3157 Perl_pmruntime(pTHX_ OP *o, OP *expr, bool isreg)
3162 I32 repl_has_vars = 0;
3166 if (o->op_type == OP_SUBST || o->op_type == OP_TRANS) {
3167 /* last element in list is the replacement; pop it */
3169 repl = cLISTOPx(expr)->op_last;
3170 kid = cLISTOPx(expr)->op_first;
3171 while (kid->op_sibling != repl)
3172 kid = kid->op_sibling;
3173 kid->op_sibling = NULL;
3174 cLISTOPx(expr)->op_last = kid;
3177 if (isreg && expr->op_type == OP_LIST &&
3178 cLISTOPx(expr)->op_first->op_sibling == cLISTOPx(expr)->op_last)
3180 /* convert single element list to element */
3181 OP* const oe = expr;
3182 expr = cLISTOPx(oe)->op_first->op_sibling;
3183 cLISTOPx(oe)->op_first->op_sibling = NULL;
3184 cLISTOPx(oe)->op_last = NULL;
3188 if (o->op_type == OP_TRANS) {
3189 return pmtrans(o, expr, repl);
3192 reglist = isreg && expr->op_type == OP_LIST;
3196 PL_hints |= HINT_BLOCK_SCOPE;
3199 if (expr->op_type == OP_CONST) {
3201 SV * const pat = ((SVOP*)expr)->op_sv;
3202 const char *p = SvPV_const(pat, plen);
3203 if ((o->op_flags & OPf_SPECIAL) && (*p == ' ' && p[1] == '\0')) {
3204 U32 was_readonly = SvREADONLY(pat);
3208 sv_force_normal_flags(pat, 0);
3209 assert(!SvREADONLY(pat));
3212 SvREADONLY_off(pat);
3216 sv_setpvn(pat, "\\s+", 3);
3218 SvFLAGS(pat) |= was_readonly;
3220 p = SvPV_const(pat, plen);
3221 pm->op_pmflags |= PMf_SKIPWHITE;
3224 pm->op_pmdynflags |= PMdf_UTF8;
3225 /* FIXME - can we make this function take const char * args? */
3226 PM_SETRE(pm, CALLREGCOMP(aTHX_ (char*)p, (char*)p + plen, pm));
3227 if (strEQ("\\s+", PM_GETRE(pm)->precomp))
3228 pm->op_pmflags |= PMf_WHITE;
3230 op_getmad(expr,(OP*)pm,'e');
3236 if (pm->op_pmflags & PMf_KEEP || !(PL_hints & HINT_RE_EVAL))
3237 expr = newUNOP((!(PL_hints & HINT_RE_EVAL)
3239 : OP_REGCMAYBE),0,expr);
3241 NewOp(1101, rcop, 1, LOGOP);
3242 rcop->op_type = OP_REGCOMP;
3243 rcop->op_ppaddr = PL_ppaddr[OP_REGCOMP];
3244 rcop->op_first = scalar(expr);
3245 rcop->op_flags |= OPf_KIDS
3246 | ((PL_hints & HINT_RE_EVAL) ? OPf_SPECIAL : 0)
3247 | (reglist ? OPf_STACKED : 0);
3248 rcop->op_private = 1;
3251 rcop->op_targ = pad_alloc(rcop->op_type, SVs_PADTMP);
3253 /* /$x/ may cause an eval, since $x might be qr/(?{..})/ */
3256 /* establish postfix order */
3257 if (pm->op_pmflags & PMf_KEEP || !(PL_hints & HINT_RE_EVAL)) {
3259 rcop->op_next = expr;
3260 ((UNOP*)expr)->op_first->op_next = (OP*)rcop;
3263 rcop->op_next = LINKLIST(expr);
3264 expr->op_next = (OP*)rcop;
3267 prepend_elem(o->op_type, scalar((OP*)rcop), o);
3272 if (pm->op_pmflags & PMf_EVAL) {
3274 if (CopLINE(PL_curcop) < (line_t)PL_multi_end)
3275 CopLINE_set(PL_curcop, (line_t)PL_multi_end);
3277 else if (repl->op_type == OP_CONST)
3281 for (curop = LINKLIST(repl); curop!=repl; curop = LINKLIST(curop)) {
3282 if (PL_opargs[curop->op_type] & OA_DANGEROUS) {
3283 if (curop->op_type == OP_GV) {
3284 GV * const gv = cGVOPx_gv(curop);
3286 if (strchr("&`'123456789+-\016\022", *GvENAME(gv)))
3289 else if (curop->op_type == OP_RV2CV)
3291 else if (curop->op_type == OP_RV2SV ||
3292 curop->op_type == OP_RV2AV ||
3293 curop->op_type == OP_RV2HV ||
3294 curop->op_type == OP_RV2GV) {
3295 if (lastop && lastop->op_type != OP_GV) /*funny deref?*/
3298 else if (curop->op_type == OP_PADSV ||
3299 curop->op_type == OP_PADAV ||
3300 curop->op_type == OP_PADHV ||
3301 curop->op_type == OP_PADANY) {
3304 else if (curop->op_type == OP_PUSHRE)
3305 NOOP; /* Okay here, dangerous in newASSIGNOP */
3315 || PM_GETRE(pm)->reganch & ROPT_EVAL_SEEN))) {
3316 pm->op_pmflags |= PMf_CONST; /* const for long enough */
3317 pm->op_pmpermflags |= PMf_CONST; /* const for long enough */
3318 prepend_elem(o->op_type, scalar(repl), o);
3321 if (curop == repl && !PM_GETRE(pm)) { /* Has variables. */
3322 pm->op_pmflags |= PMf_MAYBE_CONST;
3323 pm->op_pmpermflags |= PMf_MAYBE_CONST;
3325 NewOp(1101, rcop, 1, LOGOP);
3326 rcop->op_type = OP_SUBSTCONT;
3327 rcop->op_ppaddr = PL_ppaddr[OP_SUBSTCONT];
3328 rcop->op_first = scalar(repl);
3329 rcop->op_flags |= OPf_KIDS;
3330 rcop->op_private = 1;
3333 /* establish postfix order */
3334 rcop->op_next = LINKLIST(repl);
3335 repl->op_next = (OP*)rcop;
3337 pm->op_pmreplroot = scalar((OP*)rcop);
3338 pm->op_pmreplstart = LINKLIST(rcop);
3347 Perl_newSVOP(pTHX_ I32 type, I32 flags, SV *sv)
3351 NewOp(1101, svop, 1, SVOP);
3352 svop->op_type = (OPCODE)type;
3353 svop->op_ppaddr = PL_ppaddr[type];
3355 svop->op_next = (OP*)svop;
3356 svop->op_flags = (U8)flags;
3357 if (PL_opargs[type] & OA_RETSCALAR)
3359 if (PL_opargs[type] & OA_TARGET)
3360 svop->op_targ = pad_alloc(type, SVs_PADTMP);
3361 return CHECKOP(type, svop);
3365 Perl_newPADOP(pTHX_ I32 type, I32 flags, SV *sv)
3369 NewOp(1101, padop, 1, PADOP);
3370 padop->op_type = (OPCODE)type;
3371 padop->op_ppaddr = PL_ppaddr[type];
3372 padop->op_padix = pad_alloc(type, SVs_PADTMP);
3373 SvREFCNT_dec(PAD_SVl(padop->op_padix));
3374 PAD_SETSV(padop->op_padix, sv);
3377 padop->op_next = (OP*)padop;
3378 padop->op_flags = (U8)flags;
3379 if (PL_opargs[type] & OA_RETSCALAR)
3381 if (PL_opargs[type] & OA_TARGET)
3382 padop->op_targ = pad_alloc(type, SVs_PADTMP);
3383 return CHECKOP(type, padop);
3387 Perl_newGVOP(pTHX_ I32 type, I32 flags, GV *gv)
3393 return newPADOP(type, flags, SvREFCNT_inc_simple(gv));
3395 return newSVOP(type, flags, SvREFCNT_inc_simple(gv));
3400 Perl_newPVOP(pTHX_ I32 type, I32 flags, char *pv)
3404 NewOp(1101, pvop, 1, PVOP);
3405 pvop->op_type = (OPCODE)type;
3406 pvop->op_ppaddr = PL_ppaddr[type];
3408 pvop->op_next = (OP*)pvop;
3409 pvop->op_flags = (U8)flags;
3410 if (PL_opargs[type] & OA_RETSCALAR)
3412 if (PL_opargs[type] & OA_TARGET)
3413 pvop->op_targ = pad_alloc(type, SVs_PADTMP);
3414 return CHECKOP(type, pvop);
3422 Perl_package(pTHX_ OP *o)
3431 save_hptr(&PL_curstash);
3432 save_item(PL_curstname);
3434 name = SvPV_const(cSVOPo->op_sv, len);
3435 PL_curstash = gv_stashpvn(name, len, TRUE);
3436 sv_setpvn(PL_curstname, name, len);
3438 PL_hints |= HINT_BLOCK_SCOPE;
3439 PL_copline = NOLINE;
3445 if (!PL_madskills) {
3450 pegop = newOP(OP_NULL,0);
3451 op_getmad(o,pegop,'P');
3461 Perl_utilize(pTHX_ int aver, I32 floor, OP *version, OP *idop, OP *arg)
3468 OP *pegop = newOP(OP_NULL,0);
3471 if (idop->op_type != OP_CONST)
3472 Perl_croak(aTHX_ "Module name must be constant");
3475 op_getmad(idop,pegop,'U');
3480 SV * const vesv = ((SVOP*)version)->op_sv;
3483 op_getmad(version,pegop,'V');
3484 if (!arg && !SvNIOKp(vesv)) {
3491 if (version->op_type != OP_CONST || !SvNIOKp(vesv))
3492 Perl_croak(aTHX_ "Version number must be constant number");
3494 /* Make copy of idop so we don't free it twice */
3495 pack = newSVOP(OP_CONST, 0, newSVsv(((SVOP*)idop)->op_sv));
3497 /* Fake up a method call to VERSION */
3498 meth = newSVpvs_share("VERSION");
3499 veop = convert(OP_ENTERSUB, OPf_STACKED|OPf_SPECIAL,
3500 append_elem(OP_LIST,
3501 prepend_elem(OP_LIST, pack, list(version)),
3502 newSVOP(OP_METHOD_NAMED, 0, meth)));
3506 /* Fake up an import/unimport */
3507 if (arg && arg->op_type == OP_STUB) {
3509 op_getmad(arg,pegop,'S');
3510 imop = arg; /* no import on explicit () */
3512 else if (SvNIOKp(((SVOP*)idop)->op_sv)) {
3513 imop = NULL; /* use 5.0; */
3515 idop->op_private |= OPpCONST_NOVER;
3521 op_getmad(arg,pegop,'A');
3523 /* Make copy of idop so we don't free it twice */
3524 pack = newSVOP(OP_CONST, 0, newSVsv(((SVOP*)idop)->op_sv));
3526 /* Fake up a method call to import/unimport */
3528 ? newSVpvs_share("import") : newSVpvs_share("unimport");
3529 imop = convert(OP_ENTERSUB, OPf_STACKED|OPf_SPECIAL,
3530 append_elem(OP_LIST,
3531 prepend_elem(OP_LIST, pack, list(arg)),
3532 newSVOP(OP_METHOD_NAMED, 0, meth)));
3535 /* Fake up the BEGIN {}, which does its thing immediately. */
3537 newSVOP(OP_CONST, 0, newSVpvs_share("BEGIN")),
3540 append_elem(OP_LINESEQ,
3541 append_elem(OP_LINESEQ,
3542 newSTATEOP(0, NULL, newUNOP(OP_REQUIRE, 0, idop)),
3543 newSTATEOP(0, NULL, veop)),
3544 newSTATEOP(0, NULL, imop) ));
3546 /* The "did you use incorrect case?" warning used to be here.
3547 * The problem is that on case-insensitive filesystems one
3548 * might get false positives for "use" (and "require"):
3549 * "use Strict" or "require CARP" will work. This causes
3550 * portability problems for the script: in case-strict
3551 * filesystems the script will stop working.
3553 * The "incorrect case" warning checked whether "use Foo"
3554 * imported "Foo" to your namespace, but that is wrong, too:
3555 * there is no requirement nor promise in the language that
3556 * a Foo.pm should or would contain anything in package "Foo".
3558 * There is very little Configure-wise that can be done, either:
3559 * the case-sensitivity of the build filesystem of Perl does not
3560 * help in guessing the case-sensitivity of the runtime environment.
3563 PL_hints |= HINT_BLOCK_SCOPE;
3564 PL_copline = NOLINE;
3566 PL_cop_seqmax++; /* Purely for B::*'s benefit */
3569 if (!PL_madskills) {
3570 /* FIXME - don't allocate pegop if !PL_madskills */
3579 =head1 Embedding Functions
3581 =for apidoc load_module
3583 Loads the module whose name is pointed to by the string part of name.
3584 Note that the actual module name, not its filename, should be given.
3585 Eg, "Foo::Bar" instead of "Foo/Bar.pm". flags can be any of
3586 PERL_LOADMOD_DENY, PERL_LOADMOD_NOIMPORT, or PERL_LOADMOD_IMPORT_OPS
3587 (or 0 for no flags). ver, if specified, provides version semantics
3588 similar to C<use Foo::Bar VERSION>. The optional trailing SV*
3589 arguments can be used to specify arguments to the module's import()
3590 method, similar to C<use Foo::Bar VERSION LIST>.
3595 Perl_load_module(pTHX_ U32 flags, SV *name, SV *ver, ...)
3598 va_start(args, ver);
3599 vload_module(flags, name, ver, &args);
3603 #ifdef PERL_IMPLICIT_CONTEXT
3605 Perl_load_module_nocontext(U32 flags, SV *name, SV *ver, ...)
3609 va_start(args, ver);
3610 vload_module(flags, name, ver, &args);
3616 Perl_vload_module(pTHX_ U32 flags, SV *name, SV *ver, va_list *args)
3621 OP * const modname = newSVOP(OP_CONST, 0, name);
3622 modname->op_private |= OPpCONST_BARE;
3624 veop = newSVOP(OP_CONST, 0, ver);
3628 if (flags & PERL_LOADMOD_NOIMPORT) {
3629 imop = sawparens(newNULLLIST());
3631 else if (flags & PERL_LOADMOD_IMPORT_OPS) {
3632 imop = va_arg(*args, OP*);
3637 sv = va_arg(*args, SV*);
3639 imop = append_elem(OP_LIST, imop, newSVOP(OP_CONST, 0, sv));
3640 sv = va_arg(*args, SV*);
3644 const line_t ocopline = PL_copline;
3645 COP * const ocurcop = PL_curcop;
3646 const int oexpect = PL_expect;
3648 utilize(!(flags & PERL_LOADMOD_DENY), start_subparse(FALSE, 0),
3649 veop, modname, imop);
3650 PL_expect = oexpect;
3651 PL_copline = ocopline;
3652 PL_curcop = ocurcop;
3657 Perl_dofile(pTHX_ OP *term, I32 force_builtin)
3663 if (!force_builtin) {
3664 gv = gv_fetchpvs("do", GV_NOTQUAL, SVt_PVCV);
3665 if (!(gv && GvCVu(gv) && GvIMPORTED_CV(gv))) {
3666 GV * const * const gvp = (GV**)hv_fetchs(PL_globalstash, "do", FALSE);
3667 gv = gvp ? *gvp : NULL;
3671 if (gv && GvCVu(gv) && GvIMPORTED_CV(gv)) {
3672 doop = ck_subr(newUNOP(OP_ENTERSUB, OPf_STACKED,
3673 append_elem(OP_LIST, term,
3674 scalar(newUNOP(OP_RV2CV, 0,
3675 newGVOP(OP_GV, 0, gv))))));
3678 doop = newUNOP(OP_DOFILE, 0, scalar(term));
3684 Perl_newSLICEOP(pTHX_ I32 flags, OP *subscript, OP *listval)
3686 return newBINOP(OP_LSLICE, flags,
3687 list(force_list(subscript)),
3688 list(force_list(listval)) );
3692 S_is_list_assignment(pTHX_ register const OP *o)
3700 if ((o->op_type == OP_NULL) && (o->op_flags & OPf_KIDS))
3701 o = cUNOPo->op_first;
3703 flags = o->op_flags;
3705 if (type == OP_COND_EXPR) {
3706 const I32 t = is_list_assignment(cLOGOPo->op_first->op_sibling);
3707 const I32 f = is_list_assignment(cLOGOPo->op_first->op_sibling->op_sibling);
3712 yyerror("Assignment to both a list and a scalar");
3716 if (type == OP_LIST &&
3717 (flags & OPf_WANT) == OPf_WANT_SCALAR &&
3718 o->op_private & OPpLVAL_INTRO)
3721 if (type == OP_LIST || flags & OPf_PARENS ||
3722 type == OP_RV2AV || type == OP_RV2HV ||
3723 type == OP_ASLICE || type == OP_HSLICE)
3726 if (type == OP_PADAV || type == OP_PADHV)
3729 if (type == OP_RV2SV)
3736 Perl_newASSIGNOP(pTHX_ I32 flags, OP *left, I32 optype, OP *right)
3742 if (optype == OP_ANDASSIGN || optype == OP_ORASSIGN || optype == OP_DORASSIGN) {
3743 return newLOGOP(optype, 0,
3744 mod(scalar(left), optype),
3745 newUNOP(OP_SASSIGN, 0, scalar(right)));
3748 return newBINOP(optype, OPf_STACKED,
3749 mod(scalar(left), optype), scalar(right));
3753 if (is_list_assignment(left)) {
3757 /* Grandfathering $[ assignment here. Bletch.*/
3758 /* Only simple assignments like C<< ($[) = 1 >> are allowed */
3759 PL_eval_start = (left->op_type == OP_CONST) ? right : 0;
3760 left = mod(left, OP_AASSIGN);
3763 else if (left->op_type == OP_CONST) {
3765 /* Result of assignment is always 1 (or we'd be dead already) */
3766 return newSVOP(OP_CONST, 0, newSViv(1));
3768 curop = list(force_list(left));
3769 o = newBINOP(OP_AASSIGN, flags, list(force_list(right)), curop);
3770 o->op_private = (U8)(0 | (flags >> 8));
3772 /* PL_generation sorcery:
3773 * an assignment like ($a,$b) = ($c,$d) is easier than
3774 * ($a,$b) = ($c,$a), since there is no need for temporary vars.
3775 * To detect whether there are common vars, the global var
3776 * PL_generation is incremented for each assign op we compile.
3777 * Then, while compiling the assign op, we run through all the
3778 * variables on both sides of the assignment, setting a spare slot
3779 * in each of them to PL_generation. If any of them already have
3780 * that value, we know we've got commonality. We could use a
3781 * single bit marker, but then we'd have to make 2 passes, first
3782 * to clear the flag, then to test and set it. To find somewhere
3783 * to store these values, evil chicanery is done with SvCUR().
3789 for (curop = LINKLIST(o); curop != o; curop = LINKLIST(curop)) {
3790 if (PL_opargs[curop->op_type] & OA_DANGEROUS) {
3791 if (curop->op_type == OP_GV) {
3792 GV *gv = cGVOPx_gv(curop);
3794 || (int)GvASSIGN_GENERATION(gv) == PL_generation)
3796 GvASSIGN_GENERATION_set(gv, PL_generation);
3798 else if (curop->op_type == OP_PADSV ||
3799 curop->op_type == OP_PADAV ||
3800 curop->op_type == OP_PADHV ||
3801 curop->op_type == OP_PADANY)
3803 if (curop->op_private & OPpPAD_STATE) {
3804 if (left->op_private & OPpLVAL_INTRO) {
3805 o->op_private |= OPpASSIGN_STATE;
3806 /* hijacking PADSTALE for uninitialized state variables */
3807 SvPADSTALE_on(PAD_SVl(curop->op_targ));
3809 else if (ckWARN(WARN_MISC)) {
3810 Perl_warner(aTHX_ packWARN(WARN_MISC), "State variable %s will be reinitialized",
3811 PAD_COMPNAME_PV(curop->op_targ));
3814 if (PAD_COMPNAME_GEN(curop->op_targ)
3815 == (STRLEN)PL_generation)
3817 PAD_COMPNAME_GEN_set(curop->op_targ, PL_generation);
3820 else if (curop->op_type == OP_RV2CV)
3822 else if (curop->op_type == OP_RV2SV ||
3823 curop->op_type == OP_RV2AV ||
3824 curop->op_type == OP_RV2HV ||
3825 curop->op_type == OP_RV2GV) {
3826 if (lastop->op_type != OP_GV) /* funny deref? */
3829 else if (curop->op_type == OP_PUSHRE) {
3830 if (((PMOP*)curop)->op_pmreplroot) {
3832 GV *gv = (GV*)PAD_SVl(INT2PTR(PADOFFSET,
3833 ((PMOP*)curop)->op_pmreplroot));
3835 GV *gv = (GV*)((PMOP*)curop)->op_pmreplroot;
3838 || (int)GvASSIGN_GENERATION(gv) == PL_generation)
3840 GvASSIGN_GENERATION_set(gv, PL_generation);
3841 GvASSIGN_GENERATION_set(gv, PL_generation);
3850 o->op_private |= OPpASSIGN_COMMON;
3852 if (right && right->op_type == OP_SPLIT) {
3853 OP* tmpop = ((LISTOP*)right)->op_first;
3854 if (tmpop && (tmpop->op_type == OP_PUSHRE)) {
3855 PMOP * const pm = (PMOP*)tmpop;
3856 if (left->op_type == OP_RV2AV &&
3857 !(left->op_private & OPpLVAL_INTRO) &&
3858 !(o->op_private & OPpASSIGN_COMMON) )
3860 tmpop = ((UNOP*)left)->op_first;
3861 if (tmpop->op_type == OP_GV && !pm->op_pmreplroot) {
3863 pm->op_pmreplroot = INT2PTR(OP*, cPADOPx(tmpop)->op_padix);
3864 cPADOPx(tmpop)->op_padix = 0; /* steal it */
3866 pm->op_pmreplroot = (OP*)cSVOPx(tmpop)->op_sv;
3867 cSVOPx(tmpop)->op_sv = NULL; /* steal it */
3869 pm->op_pmflags |= PMf_ONCE;
3870 tmpop = cUNOPo->op_first; /* to list (nulled) */
3871 tmpop = ((UNOP*)tmpop)->op_first; /* to pushmark */
3872 tmpop->op_sibling = NULL; /* don't free split */
3873 right->op_next = tmpop->op_next; /* fix starting loc */
3875 op_getmad(o,right,'R'); /* blow off assign */
3877 op_free(o); /* blow off assign */
3879 right->op_flags &= ~OPf_WANT;
3880 /* "I don't know and I don't care." */
3885 if (PL_modcount < RETURN_UNLIMITED_NUMBER &&
3886 ((LISTOP*)right)->op_last->op_type == OP_CONST)
3888 SV *sv = ((SVOP*)((LISTOP*)right)->op_last)->op_sv;
3890 sv_setiv(sv, PL_modcount+1);
3898 right = newOP(OP_UNDEF, 0);
3899 if (right->op_type == OP_READLINE) {
3900 right->op_flags |= OPf_STACKED;
3901 return newBINOP(OP_NULL, flags, mod(scalar(left), OP_SASSIGN), scalar(right));
3904 PL_eval_start = right; /* Grandfathering $[ assignment here. Bletch.*/
3905 o = newBINOP(OP_SASSIGN, flags,
3906 scalar(right), mod(scalar(left), OP_SASSIGN) );
3912 o = newSVOP(OP_CONST, 0, newSViv(CopARYBASE_get(&PL_compiling)));
3913 o->op_private |= OPpCONST_ARYBASE;
3920 Perl_newSTATEOP(pTHX_ I32 flags, char *label, OP *o)
3923 const U32 seq = intro_my();
3926 NewOp(1101, cop, 1, COP);
3927 if (PERLDB_LINE && CopLINE(PL_curcop) && PL_curstash != PL_debstash) {
3928 cop->op_type = OP_DBSTATE;
3929 cop->op_ppaddr = PL_ppaddr[ OP_DBSTATE ];
3932 cop->op_type = OP_NEXTSTATE;
3933 cop->op_ppaddr = PL_ppaddr[ OP_NEXTSTATE ];
3935 cop->op_flags = (U8)flags;
3936 CopHINTS_set(cop, PL_hints);
3938 cop->op_private |= NATIVE_HINTS;
3940 CopHINTS_set(&PL_compiling, CopHINTS_get(cop));
3941 cop->op_next = (OP*)cop;
3944 cop->cop_label = label;
3945 PL_hints |= HINT_BLOCK_SCOPE;
3948 /* CopARYBASE is now "virtual", in that it's stored as a flag bit in
3949 CopHINTS and a possible value in cop_hints_hash, so no need to copy it.
3951 cop->cop_warnings = DUP_WARNINGS(PL_curcop->cop_warnings);
3952 cop->cop_hints_hash = PL_curcop->cop_hints_hash;
3953 if (cop->cop_hints_hash) {
3955 cop->cop_hints_hash->refcounted_he_refcnt++;
3956 HINTS_REFCNT_UNLOCK;
3959 if (PL_copline == NOLINE)
3960 CopLINE_set(cop, CopLINE(PL_curcop));
3962 CopLINE_set(cop, PL_copline);
3963 PL_copline = NOLINE;
3966 CopFILE_set(cop, CopFILE(PL_curcop)); /* XXX share in a pvtable? */
3968 CopFILEGV_set(cop, CopFILEGV(PL_curcop));
3970 CopSTASH_set(cop, PL_curstash);
3972 if (PERLDB_LINE && PL_curstash != PL_debstash) {
3973 SV * const * const svp = av_fetch(CopFILEAVx(PL_curcop), (I32)CopLINE(cop), FALSE);
3974 if (svp && *svp != &PL_sv_undef ) {
3975 (void)SvIOK_on(*svp);
3976 SvIV_set(*svp, PTR2IV(cop));
3980 return prepend_elem(OP_LINESEQ, (OP*)cop, o);
3985 Perl_newLOGOP(pTHX_ I32 type, I32 flags, OP *first, OP *other)
3988 return new_logop(type, flags, &first, &other);
3992 S_new_logop(pTHX_ I32 type, I32 flags, OP** firstp, OP** otherp)
3997 OP *first = *firstp;
3998 OP * const other = *otherp;
4000 if (type == OP_XOR) /* Not short circuit, but here by precedence. */
4001 return newBINOP(type, flags, scalar(first), scalar(other));
4003 scalarboolean(first);
4004 /* optimize "!a && b" to "a || b", and "!a || b" to "a && b" */
4005 if (first->op_type == OP_NOT
4006 && (first->op_flags & OPf_SPECIAL)
4007 && (first->op_flags & OPf_KIDS)) {
4008 if (type == OP_AND || type == OP_OR) {
4014 first = *firstp = cUNOPo->op_first;
4016 first->op_next = o->op_next;
4017 cUNOPo->op_first = NULL;
4019 op_getmad(o,first,'O');
4025 if (first->op_type == OP_CONST) {
4026 if (first->op_private & OPpCONST_STRICT)
4027 no_bareword_allowed(first);
4028 else if ((first->op_private & OPpCONST_BARE) && ckWARN(WARN_BAREWORD))
4029 Perl_warner(aTHX_ packWARN(WARN_BAREWORD), "Bareword found in conditional");
4030 if ((type == OP_AND && SvTRUE(((SVOP*)first)->op_sv)) ||
4031 (type == OP_OR && !SvTRUE(((SVOP*)first)->op_sv)) ||
4032 (type == OP_DOR && !SvOK(((SVOP*)first)->op_sv))) {
4034 if (other->op_type == OP_CONST)
4035 other->op_private |= OPpCONST_SHORTCIRCUIT;
4037 OP *newop = newUNOP(OP_NULL, 0, other);
4038 op_getmad(first, newop, '1');
4039 newop->op_targ = type; /* set "was" field */
4046 /* check for C<my $x if 0>, or C<my($x,$y) if 0> */
4047 const OP *o2 = other;
4048 if ( ! (o2->op_type == OP_LIST
4049 && (( o2 = cUNOPx(o2)->op_first))
4050 && o2->op_type == OP_PUSHMARK
4051 && (( o2 = o2->op_sibling)) )
4054 if ((o2->op_type == OP_PADSV || o2->op_type == OP_PADAV
4055 || o2->op_type == OP_PADHV)
4056 && o2->op_private & OPpLVAL_INTRO
4057 && ckWARN(WARN_DEPRECATED))
4059 Perl_warner(aTHX_ packWARN(WARN_DEPRECATED),
4060 "Deprecated use of my() in false conditional");
4064 if (first->op_type == OP_CONST)
4065 first->op_private |= OPpCONST_SHORTCIRCUIT;
4067 first = newUNOP(OP_NULL, 0, first);
4068 op_getmad(other, first, '2');
4069 first->op_targ = type; /* set "was" field */
4076 else if ((first->op_flags & OPf_KIDS) && type != OP_DOR
4077 && ckWARN(WARN_MISC)) /* [#24076] Don't warn for <FH> err FOO. */
4079 const OP * const k1 = ((UNOP*)first)->op_first;
4080 const OP * const k2 = k1->op_sibling;
4082 switch (first->op_type)
4085 if (k2 && k2->op_type == OP_READLINE
4086 && (k2->op_flags & OPf_STACKED)
4087 && ((k1->op_flags & OPf_WANT) == OPf_WANT_SCALAR))
4089 warnop = k2->op_type;
4094 if (k1->op_type == OP_READDIR
4095 || k1->op_type == OP_GLOB
4096 || (k1->op_type == OP_NULL && k1->op_targ == OP_GLOB)
4097 || k1->op_type == OP_EACH)
4099 warnop = ((k1->op_type == OP_NULL)
4100 ? (OPCODE)k1->op_targ : k1->op_type);
4105 const line_t oldline = CopLINE(PL_curcop);
4106 CopLINE_set(PL_curcop, PL_copline);
4107 Perl_warner(aTHX_ packWARN(WARN_MISC),
4108 "Value of %s%s can be \"0\"; test with defined()",
4110 ((warnop == OP_READLINE || warnop == OP_GLOB)
4111 ? " construct" : "() operator"));
4112 CopLINE_set(PL_curcop, oldline);
4119 if (type == OP_ANDASSIGN || type == OP_ORASSIGN || type == OP_DORASSIGN)
4120 other->op_private |= OPpASSIGN_BACKWARDS; /* other is an OP_SASSIGN */
4122 NewOp(1101, logop, 1, LOGOP);
4124 logop->op_type = (OPCODE)type;
4125 logop->op_ppaddr = PL_ppaddr[type];
4126 logop->op_first = first;
4127 logop->op_flags = (U8)(flags | OPf_KIDS);
4128 logop->op_other = LINKLIST(other);
4129 logop->op_private = (U8)(1 | (flags >> 8));
4131 /* establish postfix order */
4132 logop->op_next = LINKLIST(first);
4133 first->op_next = (OP*)logop;
4134 first->op_sibling = other;
4136 CHECKOP(type,logop);
4138 o = newUNOP(OP_NULL, 0, (OP*)logop);
4145 Perl_newCONDOP(pTHX_ I32 flags, OP *first, OP *trueop, OP *falseop)
4153 return newLOGOP(OP_AND, 0, first, trueop);
4155 return newLOGOP(OP_OR, 0, first, falseop);
4157 scalarboolean(first);
4158 if (first->op_type == OP_CONST) {
4159 if (first->op_private & OPpCONST_BARE &&
4160 first->op_private & OPpCONST_STRICT) {
4161 no_bareword_allowed(first);
4163 if (SvTRUE(((SVOP*)first)->op_sv)) {
4166 trueop = newUNOP(OP_NULL, 0, trueop);
4167 op_getmad(first,trueop,'C');
4168 op_getmad(falseop,trueop,'e');
4170 /* FIXME for MAD - should there be an ELSE here? */
4180 falseop = newUNOP(OP_NULL, 0, falseop);
4181 op_getmad(first,falseop,'C');
4182 op_getmad(trueop,falseop,'t');
4184 /* FIXME for MAD - should there be an ELSE here? */
4192 NewOp(1101, logop, 1, LOGOP);
4193 logop->op_type = OP_COND_EXPR;
4194 logop->op_ppaddr = PL_ppaddr[OP_COND_EXPR];
4195 logop->op_first = first;
4196 logop->op_flags = (U8)(flags | OPf_KIDS);
4197 logop->op_private = (U8)(1 | (flags >> 8));
4198 logop->op_other = LINKLIST(trueop);
4199 logop->op_next = LINKLIST(falseop);
4201 CHECKOP(OP_COND_EXPR, /* that's logop->op_type */
4204 /* establish postfix order */
4205 start = LINKLIST(first);
4206 first->op_next = (OP*)logop;
4208 first->op_sibling = trueop;
4209 trueop->op_sibling = falseop;
4210 o = newUNOP(OP_NULL, 0, (OP*)logop);
4212 trueop->op_next = falseop->op_next = o;
4219 Perl_newRANGE(pTHX_ I32 flags, OP *left, OP *right)
4228 NewOp(1101, range, 1, LOGOP);
4230 range->op_type = OP_RANGE;
4231 range->op_ppaddr = PL_ppaddr[OP_RANGE];
4232 range->op_first = left;
4233 range->op_flags = OPf_KIDS;
4234 leftstart = LINKLIST(left);
4235 range->op_other = LINKLIST(right);
4236 range->op_private = (U8)(1 | (flags >> 8));
4238 left->op_sibling = right;
4240 range->op_next = (OP*)range;
4241 flip = newUNOP(OP_FLIP, flags, (OP*)range);
4242 flop = newUNOP(OP_FLOP, 0, flip);
4243 o = newUNOP(OP_NULL, 0, flop);
4245 range->op_next = leftstart;
4247 left->op_next = flip;
4248 right->op_next = flop;
4250 range->op_targ = pad_alloc(OP_RANGE, SVs_PADMY);
4251 sv_upgrade(PAD_SV(range->op_targ), SVt_PVNV);
4252 flip->op_targ = pad_alloc(OP_RANGE, SVs_PADMY);
4253 sv_upgrade(PAD_SV(flip->op_targ), SVt_PVNV);
4255 flip->op_private = left->op_type == OP_CONST ? OPpFLIP_LINENUM : 0;
4256 flop->op_private = right->op_type == OP_CONST ? OPpFLIP_LINENUM : 0;
4259 if (!flip->op_private || !flop->op_private)
4260 linklist(o); /* blow off optimizer unless constant */
4266 Perl_newLOOPOP(pTHX_ I32 flags, I32 debuggable, OP *expr, OP *block)
4271 const bool once = block && block->op_flags & OPf_SPECIAL &&
4272 (block->op_type == OP_ENTERSUB || block->op_type == OP_NULL);
4274 PERL_UNUSED_ARG(debuggable);
4277 if (once && expr->op_type == OP_CONST && !SvTRUE(((SVOP*)expr)->op_sv))
4278 return block; /* do {} while 0 does once */
4279 if (expr->op_type == OP_READLINE || expr->op_type == OP_GLOB
4280 || (expr->op_type == OP_NULL && expr->op_targ == OP_GLOB)) {
4281 expr = newUNOP(OP_DEFINED, 0,
4282 newASSIGNOP(0, newDEFSVOP(), 0, expr) );
4283 } else if (expr->op_flags & OPf_KIDS) {
4284 const OP * const k1 = ((UNOP*)expr)->op_first;
4285 const OP * const k2 = k1 ? k1->op_sibling : NULL;
4286 switch (expr->op_type) {
4288 if (k2 && k2->op_type == OP_READLINE
4289 && (k2->op_flags & OPf_STACKED)
4290 && ((k1->op_flags & OPf_WANT) == OPf_WANT_SCALAR))
4291 expr = newUNOP(OP_DEFINED, 0, expr);
4295 if (k1 && (k1->op_type == OP_READDIR
4296 || k1->op_type == OP_GLOB
4297 || (k1->op_type == OP_NULL && k1->op_targ == OP_GLOB)
4298 || k1->op_type == OP_EACH))
4299 expr = newUNOP(OP_DEFINED, 0, expr);
4305 /* if block is null, the next append_elem() would put UNSTACK, a scalar
4306 * op, in listop. This is wrong. [perl #27024] */
4308 block = newOP(OP_NULL, 0);
4309 listop = append_elem(OP_LINESEQ, block, newOP(OP_UNSTACK, 0));
4310 o = new_logop(OP_AND, 0, &expr, &listop);
4313 ((LISTOP*)listop)->op_last->op_next = LINKLIST(o);
4315 if (once && o != listop)
4316 o->op_next = ((LOGOP*)cUNOPo->op_first)->op_other;
4319 o = newUNOP(OP_NULL, 0, o); /* or do {} while 1 loses outer block */
4321 o->op_flags |= flags;
4323 o->op_flags |= OPf_SPECIAL; /* suppress POPBLOCK curpm restoration*/
4328 Perl_newWHILEOP(pTHX_ I32 flags, I32 debuggable, LOOP *loop, I32
4329 whileline, OP *expr, OP *block, OP *cont, I32 has_my)
4338 PERL_UNUSED_ARG(debuggable);
4341 if (expr->op_type == OP_READLINE || expr->op_type == OP_GLOB
4342 || (expr->op_type == OP_NULL && expr->op_targ == OP_GLOB)) {
4343 expr = newUNOP(OP_DEFINED, 0,
4344 newASSIGNOP(0, newDEFSVOP(), 0, expr) );
4345 } else if (expr->op_flags & OPf_KIDS) {
4346 const OP * const k1 = ((UNOP*)expr)->op_first;
4347 const OP * const k2 = (k1) ? k1->op_sibling : NULL;
4348 switch (expr->op_type) {
4350 if (k2 && k2->op_type == OP_READLINE
4351 && (k2->op_flags & OPf_STACKED)
4352 && ((k1->op_flags & OPf_WANT) == OPf_WANT_SCALAR))
4353 expr = newUNOP(OP_DEFINED, 0, expr);
4357 if (k1 && (k1->op_type == OP_READDIR
4358 || k1->op_type == OP_GLOB
4359 || (k1->op_type == OP_NULL && k1->op_targ == OP_GLOB)
4360 || k1->op_type == OP_EACH))
4361 expr = newUNOP(OP_DEFINED, 0, expr);
4368 block = newOP(OP_NULL, 0);
4369 else if (cont || has_my) {
4370 block = scope(block);
4374 next = LINKLIST(cont);
4377 OP * const unstack = newOP(OP_UNSTACK, 0);
4380 cont = append_elem(OP_LINESEQ, cont, unstack);
4384 listop = append_list(OP_LINESEQ, (LISTOP*)block, (LISTOP*)cont);
4386 redo = LINKLIST(listop);
4389 PL_copline = (line_t)whileline;
4391 o = new_logop(OP_AND, 0, &expr, &listop);
4392 if (o == expr && o->op_type == OP_CONST && !SvTRUE(cSVOPo->op_sv)) {
4393 op_free(expr); /* oops, it's a while (0) */
4395 return NULL; /* listop already freed by new_logop */
4398 ((LISTOP*)listop)->op_last->op_next =
4399 (o == listop ? redo : LINKLIST(o));
4405 NewOp(1101,loop,1,LOOP);
4406 loop->op_type = OP_ENTERLOOP;
4407 loop->op_ppaddr = PL_ppaddr[OP_ENTERLOOP];
4408 loop->op_private = 0;
4409 loop->op_next = (OP*)loop;
4412 o = newBINOP(OP_LEAVELOOP, 0, (OP*)loop, o);
4414 loop->op_redoop = redo;
4415 loop->op_lastop = o;
4416 o->op_private |= loopflags;
4419 loop->op_nextop = next;
4421 loop->op_nextop = o;
4423 o->op_flags |= flags;
4424 o->op_private |= (flags >> 8);
4429 Perl_newFOROP(pTHX_ I32 flags, char *label, line_t forline, OP *sv, OP *expr, OP *block, OP *cont)
4434 PADOFFSET padoff = 0;
4440 if (sv->op_type == OP_RV2SV) { /* symbol table variable */
4441 iterpflags = sv->op_private & OPpOUR_INTRO; /* for our $x () */
4442 sv->op_type = OP_RV2GV;
4443 sv->op_ppaddr = PL_ppaddr[OP_RV2GV];
4444 if (cGVOPx_gv(cUNOPx(sv)->op_first) == PL_defgv)
4445 iterpflags |= OPpITER_DEF;
4447 else if (sv->op_type == OP_PADSV) { /* private variable */
4448 iterpflags = sv->op_private & OPpLVAL_INTRO; /* for my $x () */
4449 padoff = sv->op_targ;
4458 else if (sv->op_type == OP_THREADSV) { /* per-thread variable */
4459 padoff = sv->op_targ;
4464 iterflags |= OPf_SPECIAL;
4470 Perl_croak(aTHX_ "Can't use %s for loop variable", PL_op_desc[sv->op_type]);
4471 if (padoff && strEQ(PAD_COMPNAME_PV(padoff), "$_"))
4472 iterpflags |= OPpITER_DEF;
4475 const PADOFFSET offset = pad_findmy("$_");
4476 if (offset == NOT_IN_PAD || PAD_COMPNAME_FLAGS_isOUR(offset)) {
4477 sv = newGVOP(OP_GV, 0, PL_defgv);
4482 iterpflags |= OPpITER_DEF;
4484 if (expr->op_type == OP_RV2AV || expr->op_type == OP_PADAV) {
4485 expr = mod(force_list(scalar(ref(expr, OP_ITER))), OP_GREPSTART);
4486 iterflags |= OPf_STACKED;
4488 else if (expr->op_type == OP_NULL &&
4489 (expr->op_flags & OPf_KIDS) &&
4490 ((BINOP*)expr)->op_first->op_type == OP_FLOP)
4492 /* Basically turn for($x..$y) into the same as for($x,$y), but we
4493 * set the STACKED flag to indicate that these values are to be
4494 * treated as min/max values by 'pp_iterinit'.
4496 const UNOP* const flip = (UNOP*)((UNOP*)((BINOP*)expr)->op_first)->op_first;
4497 LOGOP* const range = (LOGOP*) flip->op_first;
4498 OP* const left = range->op_first;
4499 OP* const right = left->op_sibling;
4502 range->op_flags &= ~OPf_KIDS;
4503 range->op_first = NULL;
4505 listop = (LISTOP*)newLISTOP(OP_LIST, 0, left, right);
4506 listop->op_first->op_next = range->op_next;
4507 left->op_next = range->op_other;
4508 right->op_next = (OP*)listop;
4509 listop->op_next = listop->op_first;
4512 op_getmad(expr,(OP*)listop,'O');
4516 expr = (OP*)(listop);
4518 iterflags |= OPf_STACKED;
4521 expr = mod(force_list(expr), OP_GREPSTART);
4524 loop = (LOOP*)list(convert(OP_ENTERITER, iterflags,
4525 append_elem(OP_LIST, expr, scalar(sv))));
4526 assert(!loop->op_next);
4527 /* for my $x () sets OPpLVAL_INTRO;
4528 * for our $x () sets OPpOUR_INTRO */
4529 loop->op_private = (U8)iterpflags;
4530 #ifdef PL_OP_SLAB_ALLOC
4533 NewOp(1234,tmp,1,LOOP);
4534 Copy(loop,tmp,1,LISTOP);
4539 loop = PerlMemShared_realloc(loop, sizeof(LOOP));
4541 loop->op_targ = padoff;
4542 wop = newWHILEOP(flags, 1, loop, forline, newOP(OP_ITER, 0), block, cont, 0);
4544 op_getmad(madsv, (OP*)loop, 'v');
4545 PL_copline = forline;
4546 return newSTATEOP(0, label, wop);
4550 Perl_newLOOPEX(pTHX_ I32 type, OP *label)
4555 if (type != OP_GOTO || label->op_type == OP_CONST) {
4556 /* "last()" means "last" */
4557 if (label->op_type == OP_STUB && (label->op_flags & OPf_PARENS))
4558 o = newOP(type, OPf_SPECIAL);
4560 o = newPVOP(type, 0, savepv(label->op_type == OP_CONST
4561 ? SvPVx_nolen_const(((SVOP*)label)->op_sv)
4565 op_getmad(label,o,'L');
4571 /* Check whether it's going to be a goto &function */
4572 if (label->op_type == OP_ENTERSUB
4573 && !(label->op_flags & OPf_STACKED))
4574 label = newUNOP(OP_REFGEN, 0, mod(label, OP_REFGEN));
4575 o = newUNOP(type, OPf_STACKED, label);
4577 PL_hints |= HINT_BLOCK_SCOPE;
4581 /* if the condition is a literal array or hash
4582 (or @{ ... } etc), make a reference to it.
4585 S_ref_array_or_hash(pTHX_ OP *cond)
4588 && (cond->op_type == OP_RV2AV
4589 || cond->op_type == OP_PADAV
4590 || cond->op_type == OP_RV2HV
4591 || cond->op_type == OP_PADHV))
4593 return newUNOP(OP_REFGEN,
4594 0, mod(cond, OP_REFGEN));
4600 /* These construct the optree fragments representing given()
4603 entergiven and enterwhen are LOGOPs; the op_other pointer
4604 points up to the associated leave op. We need this so we
4605 can put it in the context and make break/continue work.
4606 (Also, of course, pp_enterwhen will jump straight to
4607 op_other if the match fails.)
4612 S_newGIVWHENOP(pTHX_ OP *cond, OP *block,
4613 I32 enter_opcode, I32 leave_opcode,
4614 PADOFFSET entertarg)
4620 NewOp(1101, enterop, 1, LOGOP);
4621 enterop->op_type = enter_opcode;
4622 enterop->op_ppaddr = PL_ppaddr[enter_opcode];
4623 enterop->op_flags = (U8) OPf_KIDS;
4624 enterop->op_targ = ((entertarg == NOT_IN_PAD) ? 0 : entertarg);
4625 enterop->op_private = 0;
4627 o = newUNOP(leave_opcode, 0, (OP *) enterop);
4630 enterop->op_first = scalar(cond);
4631 cond->op_sibling = block;
4633 o->op_next = LINKLIST(cond);
4634 cond->op_next = (OP *) enterop;
4637 /* This is a default {} block */
4638 enterop->op_first = block;
4639 enterop->op_flags |= OPf_SPECIAL;
4641 o->op_next = (OP *) enterop;
4644 CHECKOP(enter_opcode, enterop); /* Currently does nothing, since
4645 entergiven and enterwhen both
4648 enterop->op_next = LINKLIST(block);
4649 block->op_next = enterop->op_other = o;
4654 /* Does this look like a boolean operation? For these purposes
4655 a boolean operation is:
4656 - a subroutine call [*]
4657 - a logical connective
4658 - a comparison operator
4659 - a filetest operator, with the exception of -s -M -A -C
4660 - defined(), exists() or eof()
4661 - /$re/ or $foo =~ /$re/
4663 [*] possibly surprising
4667 S_looks_like_bool(pTHX_ const OP *o)
4670 switch(o->op_type) {
4672 return looks_like_bool(cLOGOPo->op_first);
4676 looks_like_bool(cLOGOPo->op_first)
4677 && looks_like_bool(cLOGOPo->op_first->op_sibling));
4681 case OP_NOT: case OP_XOR:
4682 /* Note that OP_DOR is not here */
4684 case OP_EQ: case OP_NE: case OP_LT:
4685 case OP_GT: case OP_LE: case OP_GE:
4687 case OP_I_EQ: case OP_I_NE: case OP_I_LT:
4688 case OP_I_GT: case OP_I_LE: case OP_I_GE:
4690 case OP_SEQ: case OP_SNE: case OP_SLT:
4691 case OP_SGT: case OP_SLE: case OP_SGE:
4695 case OP_FTRREAD: case OP_FTRWRITE: case OP_FTREXEC:
4696 case OP_FTEREAD: case OP_FTEWRITE: case OP_FTEEXEC:
4697 case OP_FTIS: case OP_FTEOWNED: case OP_FTROWNED:
4698 case OP_FTZERO: case OP_FTSOCK: case OP_FTCHR:
4699 case OP_FTBLK: case OP_FTFILE: case OP_FTDIR:
4700 case OP_FTPIPE: case OP_FTLINK: case OP_FTSUID:
4701 case OP_FTSGID: case OP_FTSVTX: case OP_FTTTY:
4702 case OP_FTTEXT: case OP_FTBINARY:
4704 case OP_DEFINED: case OP_EXISTS:
4705 case OP_MATCH: case OP_EOF:
4710 /* Detect comparisons that have been optimized away */
4711 if (cSVOPo->op_sv == &PL_sv_yes
4712 || cSVOPo->op_sv == &PL_sv_no)
4723 Perl_newGIVENOP(pTHX_ OP *cond, OP *block, PADOFFSET defsv_off)
4727 return newGIVWHENOP(
4728 ref_array_or_hash(cond),
4730 OP_ENTERGIVEN, OP_LEAVEGIVEN,
4734 /* If cond is null, this is a default {} block */
4736 Perl_newWHENOP(pTHX_ OP *cond, OP *block)
4738 const bool cond_llb = (!cond || looks_like_bool(cond));
4744 cond_op = newBINOP(OP_SMARTMATCH, OPf_SPECIAL,
4746 scalar(ref_array_or_hash(cond)));
4749 return newGIVWHENOP(
4751 append_elem(block->op_type, block, newOP(OP_BREAK, OPf_SPECIAL)),
4752 OP_ENTERWHEN, OP_LEAVEWHEN, 0);
4756 =for apidoc cv_undef
4758 Clear out all the active components of a CV. This can happen either
4759 by an explicit C<undef &foo>, or by the reference count going to zero.
4760 In the former case, we keep the CvOUTSIDE pointer, so that any anonymous
4761 children can still follow the full lexical scope chain.
4767 Perl_cv_undef(pTHX_ CV *cv)
4771 if (CvFILE(cv) && !CvISXSUB(cv)) {
4772 /* for XSUBs CvFILE point directly to static memory; __FILE__ */
4773 Safefree(CvFILE(cv));
4778 if (!CvISXSUB(cv) && CvROOT(cv)) {
4779 if (SvTYPE(cv) == SVt_PVCV && CvDEPTH(cv))
4780 Perl_croak(aTHX_ "Can't undef active subroutine");
4783 PAD_SAVE_SETNULLPAD();
4785 op_free(CvROOT(cv));
4790 SvPOK_off((SV*)cv); /* forget prototype */
4795 /* remove CvOUTSIDE unless this is an undef rather than a free */
4796 if (!SvREFCNT(cv) && CvOUTSIDE(cv)) {
4797 if (!CvWEAKOUTSIDE(cv))
4798 SvREFCNT_dec(CvOUTSIDE(cv));
4799 CvOUTSIDE(cv) = NULL;
4802 SvREFCNT_dec((SV*)CvXSUBANY(cv).any_ptr);
4805 if (CvISXSUB(cv) && CvXSUB(cv)) {
4808 /* delete all flags except WEAKOUTSIDE */
4809 CvFLAGS(cv) &= CVf_WEAKOUTSIDE;
4813 Perl_cv_ckproto_len(pTHX_ const CV *cv, const GV *gv, const char *p,
4816 /* Can't just use a strcmp on the prototype, as CONSTSUBs "cheat" by
4817 relying on SvCUR, and doubling up the buffer to hold CvFILE(). */
4818 if (((!p != !SvPOK(cv)) /* One has prototype, one has not. */
4819 || (p && (len != SvCUR(cv) /* Not the same length. */
4820 || memNE(p, SvPVX_const(cv), len))))
4821 && ckWARN_d(WARN_PROTOTYPE)) {
4822 SV* const msg = sv_newmortal();
4826 gv_efullname3(name = sv_newmortal(), gv, NULL);
4827 sv_setpv(msg, "Prototype mismatch:");
4829 Perl_sv_catpvf(aTHX_ msg, " sub %"SVf, (void*)name);
4831 Perl_sv_catpvf(aTHX_ msg, " (%"SVf")", (void*)cv);
4833 sv_catpvs(msg, ": none");
4834 sv_catpvs(msg, " vs ");
4836 Perl_sv_catpvf(aTHX_ msg, "(%.*s)", (int) len, p);
4838 sv_catpvs(msg, "none");
4839 Perl_warner(aTHX_ packWARN(WARN_PROTOTYPE), "%"SVf, (void*)msg);
4843 static void const_sv_xsub(pTHX_ CV* cv);
4847 =head1 Optree Manipulation Functions
4849 =for apidoc cv_const_sv
4851 If C<cv> is a constant sub eligible for inlining. returns the constant
4852 value returned by the sub. Otherwise, returns NULL.
4854 Constant subs can be created with C<newCONSTSUB> or as described in
4855 L<perlsub/"Constant Functions">.
4860 Perl_cv_const_sv(pTHX_ CV *cv)
4862 PERL_UNUSED_CONTEXT;
4865 if (!(SvTYPE(cv) == SVt_PVCV || SvTYPE(cv) == SVt_PVFM))
4867 return CvCONST(cv) ? (SV*)CvXSUBANY(cv).any_ptr : NULL;
4870 /* op_const_sv: examine an optree to determine whether it's in-lineable.
4871 * Can be called in 3 ways:
4874 * look for a single OP_CONST with attached value: return the value
4876 * cv && CvCLONE(cv) && !CvCONST(cv)
4878 * examine the clone prototype, and if contains only a single
4879 * OP_CONST referencing a pad const, or a single PADSV referencing
4880 * an outer lexical, return a non-zero value to indicate the CV is
4881 * a candidate for "constizing" at clone time
4885 * We have just cloned an anon prototype that was marked as a const
4886 * candidiate. Try to grab the current value, and in the case of
4887 * PADSV, ignore it if it has multiple references. Return the value.
4891 Perl_op_const_sv(pTHX_ const OP *o, CV *cv)
4899 if (o->op_type == OP_LINESEQ && cLISTOPo->op_first)
4900 o = cLISTOPo->op_first->op_sibling;
4902 for (; o; o = o->op_next) {
4903 const OPCODE type = o->op_type;
4905 if (sv && o->op_next == o)
4907 if (o->op_next != o) {
4908 if (type == OP_NEXTSTATE || type == OP_NULL || type == OP_PUSHMARK)
4910 if (type == OP_DBSTATE)
4913 if (type == OP_LEAVESUB || type == OP_RETURN)
4917 if (type == OP_CONST && cSVOPo->op_sv)
4919 else if (cv && type == OP_CONST) {
4920 sv = PAD_BASE_SV(CvPADLIST(cv), o->op_targ);
4924 else if (cv && type == OP_PADSV) {
4925 if (CvCONST(cv)) { /* newly cloned anon */
4926 sv = PAD_BASE_SV(CvPADLIST(cv), o->op_targ);
4927 /* the candidate should have 1 ref from this pad and 1 ref
4928 * from the parent */
4929 if (!sv || SvREFCNT(sv) != 2)
4936 if (PAD_COMPNAME_FLAGS(o->op_targ) & SVf_FAKE)
4937 sv = &PL_sv_undef; /* an arbitrary non-null value */
4952 Perl_newMYSUB(pTHX_ I32 floor, OP *o, OP *proto, OP *attrs, OP *block)
4955 /* This would be the return value, but the return cannot be reached. */
4956 OP* pegop = newOP(OP_NULL, 0);
4959 PERL_UNUSED_ARG(floor);
4969 Perl_croak(aTHX_ "\"my sub\" not yet implemented");
4971 NORETURN_FUNCTION_END;
4976 Perl_newSUB(pTHX_ I32 floor, OP *o, OP *proto, OP *block)
4978 return Perl_newATTRSUB(aTHX_ floor, o, proto, NULL, block);
4982 Perl_newATTRSUB(pTHX_ I32 floor, OP *o, OP *proto, OP *attrs, OP *block)
4989 register CV *cv = NULL;
4991 /* If the subroutine has no body, no attributes, and no builtin attributes
4992 then it's just a sub declaration, and we may be able to get away with
4993 storing with a placeholder scalar in the symbol table, rather than a
4994 full GV and CV. If anything is present then it will take a full CV to
4996 const I32 gv_fetch_flags
4997 = (block || attrs || (CvFLAGS(PL_compcv) & CVf_BUILTIN_ATTRS)
4999 ? GV_ADDMULTI : GV_ADDMULTI | GV_NOINIT;
5000 const char * const name = o ? SvPVx_nolen_const(cSVOPo->op_sv) : NULL;
5003 assert(proto->op_type == OP_CONST);
5004 ps = SvPVx_const(((SVOP*)proto)->op_sv, ps_len);
5009 if (!name && PERLDB_NAMEANON && CopLINE(PL_curcop)) {
5010 SV * const sv = sv_newmortal();
5011 Perl_sv_setpvf(aTHX_ sv, "%s[%s:%"IVdf"]",
5012 PL_curstash ? "__ANON__" : "__ANON__::__ANON__",
5013 CopFILE(PL_curcop), (IV)CopLINE(PL_curcop));
5014 aname = SvPVX_const(sv);
5019 gv = name ? gv_fetchsv(cSVOPo->op_sv, gv_fetch_flags, SVt_PVCV)
5020 : gv_fetchpv(aname ? aname
5021 : (PL_curstash ? "__ANON__" : "__ANON__::__ANON__"),
5022 gv_fetch_flags, SVt_PVCV);
5024 if (!PL_madskills) {
5033 if (SvTYPE(gv) != SVt_PVGV) { /* Maybe prototype now, and had at
5034 maximum a prototype before. */
5035 if (SvTYPE(gv) > SVt_NULL) {
5036 if (!SvPOK((SV*)gv) && !(SvIOK((SV*)gv) && SvIVX((SV*)gv) == -1)
5037 && ckWARN_d(WARN_PROTOTYPE))
5039 Perl_warner(aTHX_ packWARN(WARN_PROTOTYPE), "Runaway prototype");
5041 cv_ckproto_len((CV*)gv, NULL, ps, ps_len);
5044 sv_setpvn((SV*)gv, ps, ps_len);
5046 sv_setiv((SV*)gv, -1);
5047 SvREFCNT_dec(PL_compcv);
5048 cv = PL_compcv = NULL;
5049 PL_sub_generation++;
5053 cv = (!name || GvCVGEN(gv)) ? NULL : GvCV(gv);
5055 #ifdef GV_UNIQUE_CHECK
5056 if (cv && GvUNIQUE(gv) && SvREADONLY(cv)) {
5057 Perl_croak(aTHX_ "Can't define subroutine %s (GV is unique)", name);
5061 if (!block || !ps || *ps || attrs
5062 || (CvFLAGS(PL_compcv) & CVf_BUILTIN_ATTRS)
5064 || block->op_type == OP_NULL
5069 const_sv = op_const_sv(block, NULL);
5072 const bool exists = CvROOT(cv) || CvXSUB(cv);
5074 #ifdef GV_UNIQUE_CHECK
5075 if (exists && GvUNIQUE(gv)) {
5076 Perl_croak(aTHX_ "Can't redefine unique subroutine %s", name);
5080 /* if the subroutine doesn't exist and wasn't pre-declared
5081 * with a prototype, assume it will be AUTOLOADed,
5082 * skipping the prototype check
5084 if (exists || SvPOK(cv))
5085 cv_ckproto_len(cv, gv, ps, ps_len);
5086 /* already defined (or promised)? */
5087 if (exists || GvASSUMECV(gv)) {
5090 || block->op_type == OP_NULL
5093 if (CvFLAGS(PL_compcv)) {
5094 /* might have had built-in attrs applied */
5095 CvFLAGS(cv) |= (CvFLAGS(PL_compcv) & CVf_BUILTIN_ATTRS);
5097 /* just a "sub foo;" when &foo is already defined */
5098 SAVEFREESV(PL_compcv);
5103 && block->op_type != OP_NULL
5106 if (ckWARN(WARN_REDEFINE)
5108 && (!const_sv || sv_cmp(cv_const_sv(cv), const_sv))))
5110 const line_t oldline = CopLINE(PL_curcop);
5111 if (PL_copline != NOLINE)
5112 CopLINE_set(PL_curcop, PL_copline);
5113 Perl_warner(aTHX_ packWARN(WARN_REDEFINE),
5114 CvCONST(cv) ? "Constant subroutine %s redefined"
5115 : "Subroutine %s redefined", name);
5116 CopLINE_set(PL_curcop, oldline);
5119 if (!PL_minus_c) /* keep old one around for madskills */
5122 /* (PL_madskills unset in used file.) */
5130 SvREFCNT_inc_simple_void_NN(const_sv);
5132 assert(!CvROOT(cv) && !CvCONST(cv));
5133 sv_setpvn((SV*)cv, "", 0); /* prototype is "" */
5134 CvXSUBANY(cv).any_ptr = const_sv;
5135 CvXSUB(cv) = const_sv_xsub;
5141 cv = newCONSTSUB(NULL, name, const_sv);
5143 PL_sub_generation++;
5147 SvREFCNT_dec(PL_compcv);
5155 /* Need to do a C<use attributes $stash_of_cv,\&cv,@attrs>
5156 * before we clobber PL_compcv.
5160 || block->op_type == OP_NULL
5164 /* Might have had built-in attributes applied -- propagate them. */
5165 CvFLAGS(cv) |= (CvFLAGS(PL_compcv) & CVf_BUILTIN_ATTRS);
5166 if (CvGV(cv) && GvSTASH(CvGV(cv)))
5167 stash = GvSTASH(CvGV(cv));
5168 else if (CvSTASH(cv))
5169 stash = CvSTASH(cv);
5171 stash = PL_curstash;
5174 /* possibly about to re-define existing subr -- ignore old cv */
5175 rcv = (SV*)PL_compcv;
5176 if (name && GvSTASH(gv))
5177 stash = GvSTASH(gv);
5179 stash = PL_curstash;
5181 apply_attrs(stash, rcv, attrs, FALSE);
5183 if (cv) { /* must reuse cv if autoloaded */
5190 || block->op_type == OP_NULL) && !PL_madskills
5193 /* got here with just attrs -- work done, so bug out */
5194 SAVEFREESV(PL_compcv);
5197 /* transfer PL_compcv to cv */
5199 CvFLAGS(cv) = CvFLAGS(PL_compcv);
5200 if (!CvWEAKOUTSIDE(cv))
5201 SvREFCNT_dec(CvOUTSIDE(cv));
5202 CvOUTSIDE(cv) = CvOUTSIDE(PL_compcv);
5203 CvOUTSIDE_SEQ(cv) = CvOUTSIDE_SEQ(PL_compcv);
5204 CvOUTSIDE(PL_compcv) = 0;
5205 CvPADLIST(cv) = CvPADLIST(PL_compcv);
5206 CvPADLIST(PL_compcv) = 0;
5207 /* inner references to PL_compcv must be fixed up ... */
5208 pad_fixup_inner_anons(CvPADLIST(cv), PL_compcv, cv);
5209 /* ... before we throw it away */
5210 SvREFCNT_dec(PL_compcv);
5212 if (PERLDB_INTER)/* Advice debugger on the new sub. */
5213 ++PL_sub_generation;
5220 if (strEQ(name, "import")) {
5221 PL_formfeed = (SV*)cv;
5222 Perl_warner(aTHX_ packWARN(WARN_VOID), "%lx\n", (long)cv);
5226 PL_sub_generation++;
5230 CvFILE_set_from_cop(cv, PL_curcop);
5231 CvSTASH(cv) = PL_curstash;
5234 sv_setpvn((SV*)cv, ps, ps_len);
5236 if (PL_error_count) {
5240 const char *s = strrchr(name, ':');
5242 if (strEQ(s, "BEGIN")) {
5243 const char not_safe[] =
5244 "BEGIN not safe after errors--compilation aborted";
5245 if (PL_in_eval & EVAL_KEEPERR)
5246 Perl_croak(aTHX_ not_safe);
5248 /* force display of errors found but not reported */
5249 sv_catpv(ERRSV, not_safe);
5250 Perl_croak(aTHX_ "%"SVf, (void*)ERRSV);
5260 CvROOT(cv) = newUNOP(OP_LEAVESUBLV, 0,
5261 mod(scalarseq(block), OP_LEAVESUBLV));
5264 /* This makes sub {}; work as expected. */
5265 if (block->op_type == OP_STUB) {
5266 OP* const newblock = newSTATEOP(0, NULL, 0);
5268 op_getmad(block,newblock,'B');
5274 CvROOT(cv) = newUNOP(OP_LEAVESUB, 0, scalarseq(block));
5276 CvROOT(cv)->op_private |= OPpREFCOUNTED;
5277 OpREFCNT_set(CvROOT(cv), 1);
5278 CvSTART(cv) = LINKLIST(CvROOT(cv));
5279 CvROOT(cv)->op_next = 0;
5280 CALL_PEEP(CvSTART(cv));
5282 /* now that optimizer has done its work, adjust pad values */
5284 pad_tidy(CvCLONE(cv) ? padtidy_SUBCLONE : padtidy_SUB);
5287 assert(!CvCONST(cv));
5288 if (ps && !*ps && op_const_sv(block, cv))
5292 if (name || aname) {
5294 const char * const tname = (name ? name : aname);
5296 if (PERLDB_SUBLINE && PL_curstash != PL_debstash) {
5297 SV * const sv = newSV(0);
5298 SV * const tmpstr = sv_newmortal();
5299 GV * const db_postponed = gv_fetchpvs("DB::postponed",
5300 GV_ADDMULTI, SVt_PVHV);
5303 Perl_sv_setpvf(aTHX_ sv, "%s:%ld-%ld",
5305 (long)PL_subline, (long)CopLINE(PL_curcop));
5306 gv_efullname3(tmpstr, gv, NULL);
5307 hv_store(GvHV(PL_DBsub), SvPVX_const(tmpstr), SvCUR(tmpstr), sv, 0);
5308 hv = GvHVn(db_postponed);
5309 if (HvFILL(hv) > 0 && hv_exists(hv, SvPVX_const(tmpstr), SvCUR(tmpstr))) {
5310 CV * const pcv = GvCV(db_postponed);
5316 call_sv((SV*)pcv, G_DISCARD);
5321 if ((s = strrchr(tname,':')))
5326 if (*s != 'B' && *s != 'E' && *s != 'C' && *s != 'I')
5329 if (strEQ(s, "BEGIN") && !PL_error_count) {
5330 const I32 oldscope = PL_scopestack_ix;
5332 SAVECOPFILE(&PL_compiling);
5333 SAVECOPLINE(&PL_compiling);
5336 PL_beginav = newAV();
5337 DEBUG_x( dump_sub(gv) );
5338 av_push(PL_beginav, (SV*)cv);
5339 GvCV(gv) = 0; /* cv has been hijacked */
5340 call_list(oldscope, PL_beginav);
5342 PL_curcop = &PL_compiling;
5343 CopHINTS_set(&PL_compiling, PL_hints);
5346 else if (strEQ(s, "END") && !PL_error_count) {
5349 DEBUG_x( dump_sub(gv) );
5350 av_unshift(PL_endav, 1);
5351 av_store(PL_endav, 0, (SV*)cv);
5352 GvCV(gv) = 0; /* cv has been hijacked */
5354 else if (strEQ(s, "CHECK") && !PL_error_count) {
5356 PL_checkav = newAV();
5357 DEBUG_x( dump_sub(gv) );
5358 if (PL_main_start && ckWARN(WARN_VOID))
5359 Perl_warner(aTHX_ packWARN(WARN_VOID), "Too late to run CHECK block");
5360 av_unshift(PL_checkav, 1);
5361 av_store(PL_checkav, 0, (SV*)cv);
5362 GvCV(gv) = 0; /* cv has been hijacked */
5364 else if (strEQ(s, "INIT") && !PL_error_count) {
5366 PL_initav = newAV();
5367 DEBUG_x( dump_sub(gv) );
5368 if (PL_main_start && ckWARN(WARN_VOID))
5369 Perl_warner(aTHX_ packWARN(WARN_VOID), "Too late to run INIT block");
5370 av_push(PL_initav, (SV*)cv);
5371 GvCV(gv) = 0; /* cv has been hijacked */
5376 PL_copline = NOLINE;
5381 /* XXX unsafe for threads if eval_owner isn't held */
5383 =for apidoc newCONSTSUB
5385 Creates a constant sub equivalent to Perl C<sub FOO () { 123 }> which is
5386 eligible for inlining at compile-time.
5392 Perl_newCONSTSUB(pTHX_ HV *stash, const char *name, SV *sv)
5397 const char *const temp_p = CopFILE(PL_curcop);
5398 const STRLEN len = temp_p ? strlen(temp_p) : 0;
5400 SV *const temp_sv = CopFILESV(PL_curcop);
5402 const char *const temp_p = temp_sv ? SvPV_const(temp_sv, len) : NULL;
5404 char *const file = savepvn(temp_p, temp_p ? len : 0);
5408 SAVECOPLINE(PL_curcop);
5409 CopLINE_set(PL_curcop, PL_copline);
5412 PL_hints &= ~HINT_BLOCK_SCOPE;
5415 SAVESPTR(PL_curstash);
5416 SAVECOPSTASH(PL_curcop);
5417 PL_curstash = stash;
5418 CopSTASH_set(PL_curcop,stash);
5421 /* file becomes the CvFILE. For an XS, it's supposed to be static storage,
5422 and so doesn't get free()d. (It's expected to be from the C pre-
5423 processor __FILE__ directive). But we need a dynamically allocated one,
5424 and we need it to get freed. */
5425 cv = newXS_flags(name, const_sv_xsub, file, "", XS_DYNAMIC_FILENAME);
5426 CvXSUBANY(cv).any_ptr = sv;
5431 CopSTASH_free(PL_curcop);
5439 Perl_newXS_flags(pTHX_ const char *name, XSUBADDR_t subaddr,
5440 const char *const filename, const char *const proto,
5443 CV *cv = newXS(name, subaddr, filename);
5445 if (flags & XS_DYNAMIC_FILENAME) {
5446 /* We need to "make arrangements" (ie cheat) to ensure that the
5447 filename lasts as long as the PVCV we just created, but also doesn't
5449 STRLEN filename_len = strlen(filename);
5450 STRLEN proto_and_file_len = filename_len;
5451 char *proto_and_file;
5455 proto_len = strlen(proto);
5456 proto_and_file_len += proto_len;
5458 Newx(proto_and_file, proto_and_file_len + 1, char);
5459 Copy(proto, proto_and_file, proto_len, char);
5460 Copy(filename, proto_and_file + proto_len, filename_len + 1, char);
5463 proto_and_file = savepvn(filename, filename_len);
5466 /* This gets free()d. :-) */
5467 sv_usepvn_flags((SV*)cv, proto_and_file, proto_and_file_len,
5468 SV_HAS_TRAILING_NUL);
5470 /* This gives us the correct prototype, rather than one with the
5471 file name appended. */
5472 SvCUR_set(cv, proto_len);
5476 CvFILE(cv) = proto_and_file + proto_len;
5478 sv_setpv((SV *)cv, proto);
5484 =for apidoc U||newXS
5486 Used by C<xsubpp> to hook up XSUBs as Perl subs. I<filename> needs to be
5487 static storage, as it is used directly as CvFILE(), without a copy being made.
5493 Perl_newXS(pTHX_ const char *name, XSUBADDR_t subaddr, const char *filename)
5496 GV * const gv = gv_fetchpv(name ? name :
5497 (PL_curstash ? "__ANON__" : "__ANON__::__ANON__"),
5498 GV_ADDMULTI, SVt_PVCV);
5502 Perl_croak(aTHX_ "panic: no address for '%s' in '%s'", name, filename);
5504 if ((cv = (name ? GvCV(gv) : NULL))) {
5506 /* just a cached method */
5510 else if (CvROOT(cv) || CvXSUB(cv) || GvASSUMECV(gv)) {
5511 /* already defined (or promised) */
5512 /* XXX It's possible for this HvNAME_get to return null, and get passed into strEQ */
5513 if (ckWARN(WARN_REDEFINE)) {
5514 GV * const gvcv = CvGV(cv);
5516 HV * const stash = GvSTASH(gvcv);
5518 const char *redefined_name = HvNAME_get(stash);
5519 if ( strEQ(redefined_name,"autouse") ) {
5520 const line_t oldline = CopLINE(PL_curcop);
5521 if (PL_copline != NOLINE)
5522 CopLINE_set(PL_curcop, PL_copline);
5523 Perl_warner(aTHX_ packWARN(WARN_REDEFINE),
5524 CvCONST(cv) ? "Constant subroutine %s redefined"
5525 : "Subroutine %s redefined"
5527 CopLINE_set(PL_curcop, oldline);
5537 if (cv) /* must reuse cv if autoloaded */
5541 sv_upgrade((SV *)cv, SVt_PVCV);
5545 PL_sub_generation++;
5549 (void)gv_fetchfile(filename);
5550 CvFILE(cv) = (char *)filename; /* NOTE: not copied, as it is expected to be
5551 an external constant string */
5553 CvXSUB(cv) = subaddr;
5556 const char *s = strrchr(name,':');
5562 if (*s != 'B' && *s != 'E' && *s != 'C' && *s != 'I')
5565 if (strEQ(s, "BEGIN")) {
5567 PL_beginav = newAV();
5568 av_push(PL_beginav, (SV*)cv);
5569 GvCV(gv) = 0; /* cv has been hijacked */
5571 else if (strEQ(s, "END")) {
5574 av_unshift(PL_endav, 1);
5575 av_store(PL_endav, 0, (SV*)cv);
5576 GvCV(gv) = 0; /* cv has been hijacked */
5578 else if (strEQ(s, "CHECK")) {
5580 PL_checkav = newAV();
5581 if (PL_main_start && ckWARN(WARN_VOID))
5582 Perl_warner(aTHX_ packWARN(WARN_VOID), "Too late to run CHECK block");
5583 av_unshift(PL_checkav, 1);
5584 av_store(PL_checkav, 0, (SV*)cv);
5585 GvCV(gv) = 0; /* cv has been hijacked */
5587 else if (strEQ(s, "INIT")) {
5589 PL_initav = newAV();
5590 if (PL_main_start && ckWARN(WARN_VOID))
5591 Perl_warner(aTHX_ packWARN(WARN_VOID), "Too late to run INIT block");
5592 av_push(PL_initav, (SV*)cv);
5593 GvCV(gv) = 0; /* cv has been hijacked */
5608 Perl_newFORM(pTHX_ I32 floor, OP *o, OP *block)
5613 OP* pegop = newOP(OP_NULL, 0);
5617 ? gv_fetchsv(cSVOPo->op_sv, GV_ADD, SVt_PVFM)
5618 : gv_fetchpvs("STDOUT", GV_ADD|GV_NOTQUAL, SVt_PVFM);
5620 #ifdef GV_UNIQUE_CHECK
5622 Perl_croak(aTHX_ "Bad symbol for form (GV is unique)");
5626 if ((cv = GvFORM(gv))) {
5627 if (ckWARN(WARN_REDEFINE)) {
5628 const line_t oldline = CopLINE(PL_curcop);
5629 if (PL_copline != NOLINE)
5630 CopLINE_set(PL_curcop, PL_copline);
5631 Perl_warner(aTHX_ packWARN(WARN_REDEFINE),
5632 o ? "Format %"SVf" redefined"
5633 : "Format STDOUT redefined", (void*)cSVOPo->op_sv);
5634 CopLINE_set(PL_curcop, oldline);
5641 CvFILE_set_from_cop(cv, PL_curcop);
5644 pad_tidy(padtidy_FORMAT);
5645 CvROOT(cv) = newUNOP(OP_LEAVEWRITE, 0, scalarseq(block));
5646 CvROOT(cv)->op_private |= OPpREFCOUNTED;
5647 OpREFCNT_set(CvROOT(cv), 1);
5648 CvSTART(cv) = LINKLIST(CvROOT(cv));
5649 CvROOT(cv)->op_next = 0;
5650 CALL_PEEP(CvSTART(cv));
5652 op_getmad(o,pegop,'n');
5653 op_getmad_weak(block, pegop, 'b');
5657 PL_copline = NOLINE;
5665 Perl_newANONLIST(pTHX_ OP *o)
5667 return newUNOP(OP_REFGEN, 0,
5668 mod(list(convert(OP_ANONLIST, 0, o)), OP_REFGEN));
5672 Perl_newANONHASH(pTHX_ OP *o)
5674 return newUNOP(OP_REFGEN, 0,
5675 mod(list(convert(OP_ANONHASH, 0, o)), OP_REFGEN));
5679 Perl_newANONSUB(pTHX_ I32 floor, OP *proto, OP *block)
5681 return newANONATTRSUB(floor, proto, NULL, block);
5685 Perl_newANONATTRSUB(pTHX_ I32 floor, OP *proto, OP *attrs, OP *block)
5687 return newUNOP(OP_REFGEN, 0,
5688 newSVOP(OP_ANONCODE, 0,
5689 (SV*)newATTRSUB(floor, 0, proto, attrs, block)));
5693 Perl_oopsAV(pTHX_ OP *o)
5696 switch (o->op_type) {
5698 o->op_type = OP_PADAV;
5699 o->op_ppaddr = PL_ppaddr[OP_PADAV];
5700 return ref(o, OP_RV2AV);
5703 o->op_type = OP_RV2AV;
5704 o->op_ppaddr = PL_ppaddr[OP_RV2AV];
5709 if (ckWARN_d(WARN_INTERNAL))
5710 Perl_warner(aTHX_ packWARN(WARN_INTERNAL), "oops: oopsAV");
5717 Perl_oopsHV(pTHX_ OP *o)
5720 switch (o->op_type) {
5723 o->op_type = OP_PADHV;
5724 o->op_ppaddr = PL_ppaddr[OP_PADHV];
5725 return ref(o, OP_RV2HV);
5729 o->op_type = OP_RV2HV;
5730 o->op_ppaddr = PL_ppaddr[OP_RV2HV];
5735 if (ckWARN_d(WARN_INTERNAL))
5736 Perl_warner(aTHX_ packWARN(WARN_INTERNAL), "oops: oopsHV");
5743 Perl_newAVREF(pTHX_ OP *o)
5746 if (o->op_type == OP_PADANY) {
5747 o->op_type = OP_PADAV;
5748 o->op_ppaddr = PL_ppaddr[OP_PADAV];
5751 else if ((o->op_type == OP_RV2AV || o->op_type == OP_PADAV)
5752 && ckWARN(WARN_DEPRECATED)) {
5753 Perl_warner(aTHX_ packWARN(WARN_DEPRECATED),
5754 "Using an array as a reference is deprecated");
5756 return newUNOP(OP_RV2AV, 0, scalar(o));
5760 Perl_newGVREF(pTHX_ I32 type, OP *o)
5762 if (type == OP_MAPSTART || type == OP_GREPSTART || type == OP_SORT)
5763 return newUNOP(OP_NULL, 0, o);
5764 return ref(newUNOP(OP_RV2GV, OPf_REF, o), type);
5768 Perl_newHVREF(pTHX_ OP *o)
5771 if (o->op_type == OP_PADANY) {
5772 o->op_type = OP_PADHV;
5773 o->op_ppaddr = PL_ppaddr[OP_PADHV];
5776 else if ((o->op_type == OP_RV2HV || o->op_type == OP_PADHV)
5777 && ckWARN(WARN_DEPRECATED)) {
5778 Perl_warner(aTHX_ packWARN(WARN_DEPRECATED),
5779 "Using a hash as a reference is deprecated");
5781 return newUNOP(OP_RV2HV, 0, scalar(o));
5785 Perl_newCVREF(pTHX_ I32 flags, OP *o)
5787 return newUNOP(OP_RV2CV, flags, scalar(o));
5791 Perl_newSVREF(pTHX_ OP *o)
5794 if (o->op_type == OP_PADANY) {
5795 o->op_type = OP_PADSV;
5796 o->op_ppaddr = PL_ppaddr[OP_PADSV];
5799 else if (o->op_type == OP_THREADSV && !(o->op_flags & OPpDONE_SVREF)) {
5800 o->op_flags |= OPpDONE_SVREF;
5803 return newUNOP(OP_RV2SV, 0, scalar(o));
5806 /* Check routines. See the comments at the top of this file for details
5807 * on when these are called */
5810 Perl_ck_anoncode(pTHX_ OP *o)
5812 cSVOPo->op_targ = pad_add_anon(cSVOPo->op_sv, o->op_type);
5814 cSVOPo->op_sv = NULL;
5819 Perl_ck_bitop(pTHX_ OP *o)
5822 #define OP_IS_NUMCOMPARE(op) \
5823 ((op) == OP_LT || (op) == OP_I_LT || \
5824 (op) == OP_GT || (op) == OP_I_GT || \
5825 (op) == OP_LE || (op) == OP_I_LE || \
5826 (op) == OP_GE || (op) == OP_I_GE || \
5827 (op) == OP_EQ || (op) == OP_I_EQ || \
5828 (op) == OP_NE || (op) == OP_I_NE || \
5829 (op) == OP_NCMP || (op) == OP_I_NCMP)
5830 o->op_private = (U8)(PL_hints & HINT_INTEGER);
5831 if (!(o->op_flags & OPf_STACKED) /* Not an assignment */
5832 && (o->op_type == OP_BIT_OR
5833 || o->op_type == OP_BIT_AND
5834 || o->op_type == OP_BIT_XOR))
5836 const OP * const left = cBINOPo->op_first;
5837 const OP * const right = left->op_sibling;
5838 if ((OP_IS_NUMCOMPARE(left->op_type) &&
5839 (left->op_flags & OPf_PARENS) == 0) ||
5840 (OP_IS_NUMCOMPARE(right->op_type) &&
5841 (right->op_flags & OPf_PARENS) == 0))
5842 if (ckWARN(WARN_PRECEDENCE))
5843 Perl_warner(aTHX_ packWARN(WARN_PRECEDENCE),
5844 "Possible precedence problem on bitwise %c operator",
5845 o->op_type == OP_BIT_OR ? '|'
5846 : o->op_type == OP_BIT_AND ? '&' : '^'
5853 Perl_ck_concat(pTHX_ OP *o)
5855 const OP * const kid = cUNOPo->op_first;
5856 PERL_UNUSED_CONTEXT;
5857 if (kid->op_type == OP_CONCAT && !(kid->op_private & OPpTARGET_MY) &&
5858 !(kUNOP->op_first->op_flags & OPf_MOD))
5859 o->op_flags |= OPf_STACKED;
5864 Perl_ck_spair(pTHX_ OP *o)
5867 if (o->op_flags & OPf_KIDS) {
5870 const OPCODE type = o->op_type;
5871 o = modkids(ck_fun(o), type);
5872 kid = cUNOPo->op_first;
5873 newop = kUNOP->op_first->op_sibling;
5875 const OPCODE type = newop->op_type;
5876 if (newop->op_sibling || !(PL_opargs[type] & OA_RETSCALAR) ||
5877 type == OP_PADAV || type == OP_PADHV ||
5878 type == OP_RV2AV || type == OP_RV2HV)
5882 op_getmad(kUNOP->op_first,newop,'K');
5884 op_free(kUNOP->op_first);
5886 kUNOP->op_first = newop;
5888 o->op_ppaddr = PL_ppaddr[++o->op_type];
5893 Perl_ck_delete(pTHX_ OP *o)
5897 if (o->op_flags & OPf_KIDS) {
5898 OP * const kid = cUNOPo->op_first;
5899 switch (kid->op_type) {
5901 o->op_flags |= OPf_SPECIAL;
5904 o->op_private |= OPpSLICE;
5907 o->op_flags |= OPf_SPECIAL;
5912 Perl_croak(aTHX_ "%s argument is not a HASH or ARRAY element or slice",
5921 Perl_ck_die(pTHX_ OP *o)
5924 if (VMSISH_HUSHED) o->op_private |= OPpHUSH_VMSISH;
5930 Perl_ck_eof(pTHX_ OP *o)
5934 if (o->op_flags & OPf_KIDS) {
5935 if (cLISTOPo->op_first->op_type == OP_STUB) {
5937 = newUNOP(o->op_type, OPf_SPECIAL, newGVOP(OP_GV, 0, PL_argvgv));
5939 op_getmad(o,newop,'O');
5951 Perl_ck_eval(pTHX_ OP *o)
5954 PL_hints |= HINT_BLOCK_SCOPE;
5955 if (o->op_flags & OPf_KIDS) {
5956 SVOP * const kid = (SVOP*)cUNOPo->op_first;
5959 o->op_flags &= ~OPf_KIDS;
5962 else if (kid->op_type == OP_LINESEQ || kid->op_type == OP_STUB) {
5968 cUNOPo->op_first = 0;
5973 NewOp(1101, enter, 1, LOGOP);
5974 enter->op_type = OP_ENTERTRY;
5975 enter->op_ppaddr = PL_ppaddr[OP_ENTERTRY];
5976 enter->op_private = 0;
5978 /* establish postfix order */
5979 enter->op_next = (OP*)enter;
5981 o = prepend_elem(OP_LINESEQ, (OP*)enter, (OP*)kid);
5982 o->op_type = OP_LEAVETRY;
5983 o->op_ppaddr = PL_ppaddr[OP_LEAVETRY];
5984 enter->op_other = o;
5985 op_getmad(oldo,o,'O');
5999 o = newUNOP(OP_ENTEREVAL, 0, newDEFSVOP());
6000 op_getmad(oldo,o,'O');
6002 o->op_targ = (PADOFFSET)PL_hints;
6003 if ((PL_hints & HINT_LOCALIZE_HH) != 0 && GvHV(PL_hintgv)) {
6004 /* Store a copy of %^H that pp_entereval can pick up */
6005 OP *hhop = newSVOP(OP_CONST, 0,
6006 (SV*)Perl_hv_copy_hints_hv(aTHX_ GvHV(PL_hintgv)));
6007 cUNOPo->op_first->op_sibling = hhop;
6008 o->op_private |= OPpEVAL_HAS_HH;
6014 Perl_ck_exit(pTHX_ OP *o)
6017 HV * const table = GvHV(PL_hintgv);
6019 SV * const * const svp = hv_fetchs(table, "vmsish_exit", FALSE);
6020 if (svp && *svp && SvTRUE(*svp))
6021 o->op_private |= OPpEXIT_VMSISH;
6023 if (VMSISH_HUSHED) o->op_private |= OPpHUSH_VMSISH;
6029 Perl_ck_exec(pTHX_ OP *o)
6031 if (o->op_flags & OPf_STACKED) {
6034 kid = cUNOPo->op_first->op_sibling;
6035 if (kid->op_type == OP_RV2GV)
6044 Perl_ck_exists(pTHX_ OP *o)
6048 if (o->op_flags & OPf_KIDS) {
6049 OP * const kid = cUNOPo->op_first;
6050 if (kid->op_type == OP_ENTERSUB) {
6051 (void) ref(kid, o->op_type);
6052 if (kid->op_type != OP_RV2CV && !PL_error_count)
6053 Perl_croak(aTHX_ "%s argument is not a subroutine name",
6055 o->op_private |= OPpEXISTS_SUB;
6057 else if (kid->op_type == OP_AELEM)
6058 o->op_flags |= OPf_SPECIAL;
6059 else if (kid->op_type != OP_HELEM)
6060 Perl_croak(aTHX_ "%s argument is not a HASH or ARRAY element",
6068 Perl_ck_rvconst(pTHX_ register OP *o)
6071 SVOP * const kid = (SVOP*)cUNOPo->op_first;
6073 o->op_private |= (PL_hints & HINT_STRICT_REFS);
6074 if (o->op_type == OP_RV2CV)
6075 o->op_private &= ~1;
6077 if (kid->op_type == OP_CONST) {
6080 SV * const kidsv = kid->op_sv;
6082 /* Is it a constant from cv_const_sv()? */
6083 if (SvROK(kidsv) && SvREADONLY(kidsv)) {
6084 SV * const rsv = SvRV(kidsv);
6085 const svtype type = SvTYPE(rsv);
6086 const char *badtype = NULL;
6088 switch (o->op_type) {
6090 if (type > SVt_PVMG)
6091 badtype = "a SCALAR";
6094 if (type != SVt_PVAV)
6095 badtype = "an ARRAY";
6098 if (type != SVt_PVHV)
6102 if (type != SVt_PVCV)
6107 Perl_croak(aTHX_ "Constant is not %s reference", badtype);
6110 else if ((o->op_type == OP_RV2HV || o->op_type == OP_RV2SV) &&
6111 (PL_hints & HINT_STRICT_REFS) && SvPOK(kidsv)) {
6112 /* If this is an access to a stash, disable "strict refs", because
6113 * stashes aren't auto-vivified at compile-time (unless we store
6114 * symbols in them), and we don't want to produce a run-time
6115 * stricture error when auto-vivifying the stash. */
6116 const char *s = SvPV_nolen(kidsv);
6117 const STRLEN l = SvCUR(kidsv);
6118 if (l > 1 && s[l-1] == ':' && s[l-2] == ':')
6119 o->op_private &= ~HINT_STRICT_REFS;
6121 if ((o->op_private & HINT_STRICT_REFS) && (kid->op_private & OPpCONST_BARE)) {
6122 const char *badthing;
6123 switch (o->op_type) {
6125 badthing = "a SCALAR";
6128 badthing = "an ARRAY";
6131 badthing = "a HASH";
6139 "Can't use bareword (\"%"SVf"\") as %s ref while \"strict refs\" in use",
6140 (void*)kidsv, badthing);
6143 * This is a little tricky. We only want to add the symbol if we
6144 * didn't add it in the lexer. Otherwise we get duplicate strict
6145 * warnings. But if we didn't add it in the lexer, we must at
6146 * least pretend like we wanted to add it even if it existed before,
6147 * or we get possible typo warnings. OPpCONST_ENTERED says
6148 * whether the lexer already added THIS instance of this symbol.
6150 iscv = (o->op_type == OP_RV2CV) * 2;
6152 gv = gv_fetchsv(kidsv,
6153 iscv | !(kid->op_private & OPpCONST_ENTERED),
6156 : o->op_type == OP_RV2SV
6158 : o->op_type == OP_RV2AV
6160 : o->op_type == OP_RV2HV
6163 } while (!gv && !(kid->op_private & OPpCONST_ENTERED) && !iscv++);
6165 kid->op_type = OP_GV;
6166 SvREFCNT_dec(kid->op_sv);
6168 /* XXX hack: dependence on sizeof(PADOP) <= sizeof(SVOP) */
6169 kPADOP->op_padix = pad_alloc(OP_GV, SVs_PADTMP);
6170 SvREFCNT_dec(PAD_SVl(kPADOP->op_padix));
6172 PAD_SETSV(kPADOP->op_padix, (SV*) SvREFCNT_inc_simple_NN(gv));
6174 kid->op_sv = SvREFCNT_inc_simple_NN(gv);
6176 kid->op_private = 0;
6177 kid->op_ppaddr = PL_ppaddr[OP_GV];
6184 Perl_ck_ftst(pTHX_ OP *o)
6187 const I32 type = o->op_type;
6189 if (o->op_flags & OPf_REF) {
6192 else if (o->op_flags & OPf_KIDS && cUNOPo->op_first->op_type != OP_STUB) {
6193 SVOP * const kid = (SVOP*)cUNOPo->op_first;
6194 const OPCODE kidtype = kid->op_type;
6196 if (kidtype == OP_CONST && (kid->op_private & OPpCONST_BARE)) {
6197 OP * const newop = newGVOP(type, OPf_REF,
6198 gv_fetchsv(kid->op_sv, GV_ADD, SVt_PVIO));
6200 op_getmad(o,newop,'O');
6206 if ((PL_hints & HINT_FILETEST_ACCESS) && OP_IS_FILETEST_ACCESS(o))
6207 o->op_private |= OPpFT_ACCESS;
6208 if (PL_check[kidtype] == MEMBER_TO_FPTR(Perl_ck_ftst)
6209 && kidtype != OP_STAT && kidtype != OP_LSTAT)
6210 o->op_private |= OPpFT_STACKED;
6218 if (type == OP_FTTTY)
6219 o = newGVOP(type, OPf_REF, PL_stdingv);
6221 o = newUNOP(type, 0, newDEFSVOP());
6222 op_getmad(oldo,o,'O');
6228 Perl_ck_fun(pTHX_ OP *o)
6231 const int type = o->op_type;
6232 register I32 oa = PL_opargs[type] >> OASHIFT;
6234 if (o->op_flags & OPf_STACKED) {
6235 if ((oa & OA_OPTIONAL) && (oa >> 4) && !((oa >> 4) & OA_OPTIONAL))
6238 return no_fh_allowed(o);
6241 if (o->op_flags & OPf_KIDS) {
6242 OP **tokid = &cLISTOPo->op_first;
6243 register OP *kid = cLISTOPo->op_first;
6247 if (kid->op_type == OP_PUSHMARK ||
6248 (kid->op_type == OP_NULL && kid->op_targ == OP_PUSHMARK))
6250 tokid = &kid->op_sibling;
6251 kid = kid->op_sibling;
6253 if (!kid && PL_opargs[type] & OA_DEFGV)
6254 *tokid = kid = newDEFSVOP();
6258 sibl = kid->op_sibling;
6260 if (!sibl && kid->op_type == OP_STUB) {
6267 /* list seen where single (scalar) arg expected? */
6268 if (numargs == 1 && !(oa >> 4)
6269 && kid->op_type == OP_LIST && type != OP_SCALAR)
6271 return too_many_arguments(o,PL_op_desc[type]);
6284 if ((type == OP_PUSH || type == OP_UNSHIFT)
6285 && !kid->op_sibling && ckWARN(WARN_SYNTAX))
6286 Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
6287 "Useless use of %s with no values",
6290 if (kid->op_type == OP_CONST &&
6291 (kid->op_private & OPpCONST_BARE))
6293 OP * const newop = newAVREF(newGVOP(OP_GV, 0,
6294 gv_fetchsv(((SVOP*)kid)->op_sv, GV_ADD, SVt_PVAV) ));
6295 if (ckWARN2(WARN_DEPRECATED, WARN_SYNTAX))
6296 Perl_warner(aTHX_ packWARN2(WARN_DEPRECATED, WARN_SYNTAX),
6297 "Array @%"SVf" missing the @ in argument %"IVdf" of %s()",
6298 (void*)((SVOP*)kid)->op_sv, (IV)numargs, PL_op_desc[type]);
6300 op_getmad(kid,newop,'K');
6305 kid->op_sibling = sibl;
6308 else if (kid->op_type != OP_RV2AV && kid->op_type != OP_PADAV)
6309 bad_type(numargs, "array", PL_op_desc[type], kid);
6313 if (kid->op_type == OP_CONST &&
6314 (kid->op_private & OPpCONST_BARE))
6316 OP * const newop = newHVREF(newGVOP(OP_GV, 0,
6317 gv_fetchsv(((SVOP*)kid)->op_sv, GV_ADD, SVt_PVHV) ));
6318 if (ckWARN2(WARN_DEPRECATED, WARN_SYNTAX))
6319 Perl_warner(aTHX_ packWARN2(WARN_DEPRECATED, WARN_SYNTAX),
6320 "Hash %%%"SVf" missing the %% in argument %"IVdf" of %s()",
6321 (void*)((SVOP*)kid)->op_sv, (IV)numargs, PL_op_desc[type]);
6323 op_getmad(kid,newop,'K');
6328 kid->op_sibling = sibl;
6331 else if (kid->op_type != OP_RV2HV && kid->op_type != OP_PADHV)
6332 bad_type(numargs, "hash", PL_op_desc[type], kid);
6337 OP * const newop = newUNOP(OP_NULL, 0, kid);
6338 kid->op_sibling = 0;
6340 newop->op_next = newop;
6342 kid->op_sibling = sibl;
6347 if (kid->op_type != OP_GV && kid->op_type != OP_RV2GV) {
6348 if (kid->op_type == OP_CONST &&
6349 (kid->op_private & OPpCONST_BARE))
6351 OP * const newop = newGVOP(OP_GV, 0,
6352 gv_fetchsv(((SVOP*)kid)->op_sv, GV_ADD, SVt_PVIO));
6353 if (!(o->op_private & 1) && /* if not unop */
6354 kid == cLISTOPo->op_last)
6355 cLISTOPo->op_last = newop;
6357 op_getmad(kid,newop,'K');
6363 else if (kid->op_type == OP_READLINE) {
6364 /* neophyte patrol: open(<FH>), close(<FH>) etc. */
6365 bad_type(numargs, "HANDLE", OP_DESC(o), kid);
6368 I32 flags = OPf_SPECIAL;
6372 /* is this op a FH constructor? */
6373 if (is_handle_constructor(o,numargs)) {
6374 const char *name = NULL;
6378 /* Set a flag to tell rv2gv to vivify
6379 * need to "prove" flag does not mean something
6380 * else already - NI-S 1999/05/07
6383 if (kid->op_type == OP_PADSV) {
6384 name = PAD_COMPNAME_PV(kid->op_targ);
6385 /* SvCUR of a pad namesv can't be trusted
6386 * (see PL_generation), so calc its length
6392 else if (kid->op_type == OP_RV2SV
6393 && kUNOP->op_first->op_type == OP_GV)
6395 GV * const gv = cGVOPx_gv(kUNOP->op_first);
6397 len = GvNAMELEN(gv);
6399 else if (kid->op_type == OP_AELEM
6400 || kid->op_type == OP_HELEM)
6403 OP *op = ((BINOP*)kid)->op_first;
6407 const char * const a =
6408 kid->op_type == OP_AELEM ?
6410 if (((op->op_type == OP_RV2AV) ||
6411 (op->op_type == OP_RV2HV)) &&
6412 (firstop = ((UNOP*)op)->op_first) &&
6413 (firstop->op_type == OP_GV)) {
6414 /* packagevar $a[] or $h{} */
6415 GV * const gv = cGVOPx_gv(firstop);
6423 else if (op->op_type == OP_PADAV
6424 || op->op_type == OP_PADHV) {
6425 /* lexicalvar $a[] or $h{} */
6426 const char * const padname =
6427 PAD_COMPNAME_PV(op->op_targ);
6436 name = SvPV_const(tmpstr, len);
6441 name = "__ANONIO__";
6448 targ = pad_alloc(OP_RV2GV, SVs_PADTMP);
6449 namesv = PAD_SVl(targ);
6450 SvUPGRADE(namesv, SVt_PV);
6452 sv_setpvn(namesv, "$", 1);
6453 sv_catpvn(namesv, name, len);
6456 kid->op_sibling = 0;
6457 kid = newUNOP(OP_RV2GV, flags, scalar(kid));
6458 kid->op_targ = targ;
6459 kid->op_private |= priv;
6461 kid->op_sibling = sibl;
6467 mod(scalar(kid), type);
6471 tokid = &kid->op_sibling;
6472 kid = kid->op_sibling;
6475 if (kid && kid->op_type != OP_STUB)
6476 return too_many_arguments(o,OP_DESC(o));
6477 o->op_private |= numargs;
6479 /* FIXME - should the numargs move as for the PERL_MAD case? */
6480 o->op_private |= numargs;
6482 return too_many_arguments(o,OP_DESC(o));
6486 else if (PL_opargs[type] & OA_DEFGV) {
6488 OP *newop = newUNOP(type, 0, newDEFSVOP());
6489 op_getmad(o,newop,'O');
6492 /* Ordering of these two is important to keep f_map.t passing. */
6494 return newUNOP(type, 0, newDEFSVOP());
6499 while (oa & OA_OPTIONAL)
6501 if (oa && oa != OA_LIST)
6502 return too_few_arguments(o,OP_DESC(o));
6508 Perl_ck_glob(pTHX_ OP *o)
6514 if ((o->op_flags & OPf_KIDS) && !cLISTOPo->op_first->op_sibling)
6515 append_elem(OP_GLOB, o, newDEFSVOP());
6517 if (!((gv = gv_fetchpvs("glob", GV_NOTQUAL, SVt_PVCV))
6518 && GvCVu(gv) && GvIMPORTED_CV(gv)))
6520 gv = gv_fetchpvs("CORE::GLOBAL::glob", 0, SVt_PVCV);
6523 #if !defined(PERL_EXTERNAL_GLOB)
6524 /* XXX this can be tightened up and made more failsafe. */
6525 if (!(gv && GvCVu(gv) && GvIMPORTED_CV(gv))) {
6528 Perl_load_module(aTHX_ PERL_LOADMOD_NOIMPORT,
6529 newSVpvs("File::Glob"), NULL, NULL, NULL);
6530 gv = gv_fetchpvs("CORE::GLOBAL::glob", 0, SVt_PVCV);
6531 glob_gv = gv_fetchpvs("File::Glob::csh_glob", 0, SVt_PVCV);
6532 GvCV(gv) = GvCV(glob_gv);
6533 SvREFCNT_inc_void((SV*)GvCV(gv));
6534 GvIMPORTED_CV_on(gv);
6537 #endif /* PERL_EXTERNAL_GLOB */
6539 if (gv && GvCVu(gv) && GvIMPORTED_CV(gv)) {
6540 append_elem(OP_GLOB, o,
6541 newSVOP(OP_CONST, 0, newSViv(PL_glob_index++)));
6542 o->op_type = OP_LIST;
6543 o->op_ppaddr = PL_ppaddr[OP_LIST];
6544 cLISTOPo->op_first->op_type = OP_PUSHMARK;
6545 cLISTOPo->op_first->op_ppaddr = PL_ppaddr[OP_PUSHMARK];
6546 cLISTOPo->op_first->op_targ = 0;
6547 o = newUNOP(OP_ENTERSUB, OPf_STACKED,
6548 append_elem(OP_LIST, o,
6549 scalar(newUNOP(OP_RV2CV, 0,
6550 newGVOP(OP_GV, 0, gv)))));
6551 o = newUNOP(OP_NULL, 0, ck_subr(o));
6552 o->op_targ = OP_GLOB; /* hint at what it used to be */
6555 gv = newGVgen("main");
6557 append_elem(OP_GLOB, o, newGVOP(OP_GV, 0, gv));
6563 Perl_ck_grep(pTHX_ OP *o)
6568 const OPCODE type = o->op_type == OP_GREPSTART ? OP_GREPWHILE : OP_MAPWHILE;
6571 o->op_ppaddr = PL_ppaddr[OP_GREPSTART];
6572 /* don't allocate gwop here, as we may leak it if PL_error_count > 0 */
6574 if (o->op_flags & OPf_STACKED) {
6577 kid = cLISTOPo->op_first->op_sibling;
6578 if (!cUNOPx(kid)->op_next)
6579 Perl_croak(aTHX_ "panic: ck_grep");
6580 for (k = cUNOPx(kid)->op_first; k; k = k->op_next) {
6583 NewOp(1101, gwop, 1, LOGOP);
6584 kid->op_next = (OP*)gwop;
6585 o->op_flags &= ~OPf_STACKED;
6587 kid = cLISTOPo->op_first->op_sibling;
6588 if (type == OP_MAPWHILE)
6595 kid = cLISTOPo->op_first->op_sibling;
6596 if (kid->op_type != OP_NULL)
6597 Perl_croak(aTHX_ "panic: ck_grep");
6598 kid = kUNOP->op_first;
6601 NewOp(1101, gwop, 1, LOGOP);
6602 gwop->op_type = type;
6603 gwop->op_ppaddr = PL_ppaddr[type];
6604 gwop->op_first = listkids(o);
6605 gwop->op_flags |= OPf_KIDS;
6606 gwop->op_other = LINKLIST(kid);
6607 kid->op_next = (OP*)gwop;
6608 offset = pad_findmy("$_");
6609 if (offset == NOT_IN_PAD || PAD_COMPNAME_FLAGS_isOUR(offset)) {
6610 o->op_private = gwop->op_private = 0;
6611 gwop->op_targ = pad_alloc(type, SVs_PADTMP);
6614 o->op_private = gwop->op_private = OPpGREP_LEX;
6615 gwop->op_targ = o->op_targ = offset;
6618 kid = cLISTOPo->op_first->op_sibling;
6619 if (!kid || !kid->op_sibling)
6620 return too_few_arguments(o,OP_DESC(o));
6621 for (kid = kid->op_sibling; kid; kid = kid->op_sibling)
6622 mod(kid, OP_GREPSTART);
6628 Perl_ck_index(pTHX_ OP *o)
6630 if (o->op_flags & OPf_KIDS) {
6631 OP *kid = cLISTOPo->op_first->op_sibling; /* get past pushmark */
6633 kid = kid->op_sibling; /* get past "big" */
6634 if (kid && kid->op_type == OP_CONST)
6635 fbm_compile(((SVOP*)kid)->op_sv, 0);
6641 Perl_ck_lengthconst(pTHX_ OP *o)
6643 /* XXX length optimization goes here */
6648 Perl_ck_lfun(pTHX_ OP *o)
6650 const OPCODE type = o->op_type;
6651 return modkids(ck_fun(o), type);
6655 Perl_ck_defined(pTHX_ OP *o) /* 19990527 MJD */
6657 if ((o->op_flags & OPf_KIDS) && ckWARN2(WARN_DEPRECATED, WARN_SYNTAX)) {
6658 switch (cUNOPo->op_first->op_type) {
6660 /* This is needed for
6661 if (defined %stash::)
6662 to work. Do not break Tk.
6664 break; /* Globals via GV can be undef */
6666 case OP_AASSIGN: /* Is this a good idea? */
6667 Perl_warner(aTHX_ packWARN2(WARN_DEPRECATED, WARN_SYNTAX),
6668 "defined(@array) is deprecated");
6669 Perl_warner(aTHX_ packWARN2(WARN_DEPRECATED, WARN_SYNTAX),
6670 "\t(Maybe you should just omit the defined()?)\n");
6673 /* This is needed for
6674 if (defined %stash::)
6675 to work. Do not break Tk.
6677 break; /* Globals via GV can be undef */
6679 Perl_warner(aTHX_ packWARN2(WARN_DEPRECATED, WARN_SYNTAX),
6680 "defined(%%hash) is deprecated");
6681 Perl_warner(aTHX_ packWARN2(WARN_DEPRECATED, WARN_SYNTAX),
6682 "\t(Maybe you should just omit the defined()?)\n");
6693 Perl_ck_rfun(pTHX_ OP *o)
6695 const OPCODE type = o->op_type;
6696 return refkids(ck_fun(o), type);
6700 Perl_ck_listiob(pTHX_ OP *o)
6704 kid = cLISTOPo->op_first;
6707 kid = cLISTOPo->op_first;
6709 if (kid->op_type == OP_PUSHMARK)
6710 kid = kid->op_sibling;
6711 if (kid && o->op_flags & OPf_STACKED)
6712 kid = kid->op_sibling;
6713 else if (kid && !kid->op_sibling) { /* print HANDLE; */
6714 if (kid->op_type == OP_CONST && kid->op_private & OPpCONST_BARE) {
6715 o->op_flags |= OPf_STACKED; /* make it a filehandle */
6716 kid = newUNOP(OP_RV2GV, OPf_REF, scalar(kid));
6717 cLISTOPo->op_first->op_sibling = kid;
6718 cLISTOPo->op_last = kid;
6719 kid = kid->op_sibling;
6724 append_elem(o->op_type, o, newDEFSVOP());
6730 Perl_ck_say(pTHX_ OP *o)
6733 o->op_type = OP_PRINT;
6734 cLISTOPo->op_last = cLISTOPo->op_last->op_sibling
6735 = newSVOP(OP_CONST, 0, newSVpvs("\n"));
6740 Perl_ck_smartmatch(pTHX_ OP *o)
6743 if (0 == (o->op_flags & OPf_SPECIAL)) {
6744 OP *first = cBINOPo->op_first;
6745 OP *second = first->op_sibling;
6747 /* Implicitly take a reference to an array or hash */
6748 first->op_sibling = NULL;
6749 first = cBINOPo->op_first = ref_array_or_hash(first);
6750 second = first->op_sibling = ref_array_or_hash(second);
6752 /* Implicitly take a reference to a regular expression */
6753 if (first->op_type == OP_MATCH) {
6754 first->op_type = OP_QR;
6755 first->op_ppaddr = PL_ppaddr[OP_QR];
6757 if (second->op_type == OP_MATCH) {
6758 second->op_type = OP_QR;
6759 second->op_ppaddr = PL_ppaddr[OP_QR];
6768 Perl_ck_sassign(pTHX_ OP *o)
6770 OP * const kid = cLISTOPo->op_first;
6771 /* has a disposable target? */
6772 if ((PL_opargs[kid->op_type] & OA_TARGLEX)
6773 && !(kid->op_flags & OPf_STACKED)
6774 /* Cannot steal the second time! */
6775 && !(kid->op_private & OPpTARGET_MY))
6777 OP * const kkid = kid->op_sibling;
6779 /* Can just relocate the target. */
6780 if (kkid && kkid->op_type == OP_PADSV
6781 && !(kkid->op_private & OPpLVAL_INTRO))
6783 kid->op_targ = kkid->op_targ;
6785 /* Now we do not need PADSV and SASSIGN. */
6786 kid->op_sibling = o->op_sibling; /* NULL */
6787 cLISTOPo->op_first = NULL;
6789 op_getmad(o,kid,'O');
6790 op_getmad(kkid,kid,'M');
6795 kid->op_private |= OPpTARGET_MY; /* Used for context settings */
6799 if (kid->op_sibling) {
6800 OP *kkid = kid->op_sibling;
6801 if (kkid->op_type == OP_PADSV
6802 && (kkid->op_private & OPpLVAL_INTRO)
6803 && SvPAD_STATE(*av_fetch(PL_comppad_name, kkid->op_targ, FALSE))) {
6804 o->op_private |= OPpASSIGN_STATE;
6805 /* hijacking PADSTALE for uninitialized state variables */
6806 SvPADSTALE_on(PAD_SVl(kkid->op_targ));
6813 Perl_ck_match(pTHX_ OP *o)
6816 if (o->op_type != OP_QR && PL_compcv) {
6817 const PADOFFSET offset = pad_findmy("$_");
6818 if (offset != NOT_IN_PAD && !(PAD_COMPNAME_FLAGS_isOUR(offset))) {
6819 o->op_targ = offset;
6820 o->op_private |= OPpTARGET_MY;
6823 if (o->op_type == OP_MATCH || o->op_type == OP_QR)
6824 o->op_private |= OPpRUNTIME;
6829 Perl_ck_method(pTHX_ OP *o)
6831 OP * const kid = cUNOPo->op_first;
6832 if (kid->op_type == OP_CONST) {
6833 SV* sv = kSVOP->op_sv;
6834 const char * const method = SvPVX_const(sv);
6835 if (!(strchr(method, ':') || strchr(method, '\''))) {
6837 if (!SvREADONLY(sv) || !SvFAKE(sv)) {
6838 sv = newSVpvn_share(method, SvCUR(sv), 0);
6841 kSVOP->op_sv = NULL;
6843 cmop = newSVOP(OP_METHOD_NAMED, 0, sv);
6845 op_getmad(o,cmop,'O');
6856 Perl_ck_null(pTHX_ OP *o)
6858 PERL_UNUSED_CONTEXT;
6863 Perl_ck_open(pTHX_ OP *o)
6866 HV * const table = GvHV(PL_hintgv);
6868 SV **svp = hv_fetchs(table, "open_IN", FALSE);
6870 const I32 mode = mode_from_discipline(*svp);
6871 if (mode & O_BINARY)
6872 o->op_private |= OPpOPEN_IN_RAW;
6873 else if (mode & O_TEXT)
6874 o->op_private |= OPpOPEN_IN_CRLF;
6877 svp = hv_fetchs(table, "open_OUT", FALSE);
6879 const I32 mode = mode_from_discipline(*svp);
6880 if (mode & O_BINARY)
6881 o->op_private |= OPpOPEN_OUT_RAW;
6882 else if (mode & O_TEXT)
6883 o->op_private |= OPpOPEN_OUT_CRLF;
6886 if (o->op_type == OP_BACKTICK)
6889 /* In case of three-arg dup open remove strictness
6890 * from the last arg if it is a bareword. */
6891 OP * const first = cLISTOPx(o)->op_first; /* The pushmark. */
6892 OP * const last = cLISTOPx(o)->op_last; /* The bareword. */
6896 if ((last->op_type == OP_CONST) && /* The bareword. */
6897 (last->op_private & OPpCONST_BARE) &&
6898 (last->op_private & OPpCONST_STRICT) &&
6899 (oa = first->op_sibling) && /* The fh. */
6900 (oa = oa->op_sibling) && /* The mode. */
6901 (oa->op_type == OP_CONST) &&
6902 SvPOK(((SVOP*)oa)->op_sv) &&
6903 (mode = SvPVX_const(((SVOP*)oa)->op_sv)) &&
6904 mode[0] == '>' && mode[1] == '&' && /* A dup open. */
6905 (last == oa->op_sibling)) /* The bareword. */
6906 last->op_private &= ~OPpCONST_STRICT;
6912 Perl_ck_repeat(pTHX_ OP *o)
6914 if (cBINOPo->op_first->op_flags & OPf_PARENS) {
6915 o->op_private |= OPpREPEAT_DOLIST;
6916 cBINOPo->op_first = force_list(cBINOPo->op_first);
6924 Perl_ck_require(pTHX_ OP *o)
6929 if (o->op_flags & OPf_KIDS) { /* Shall we supply missing .pm? */
6930 SVOP * const kid = (SVOP*)cUNOPo->op_first;
6932 if (kid->op_type == OP_CONST && (kid->op_private & OPpCONST_BARE)) {
6933 SV * const sv = kid->op_sv;
6934 U32 was_readonly = SvREADONLY(sv);
6939 sv_force_normal_flags(sv, 0);
6940 assert(!SvREADONLY(sv));
6947 for (s = SvPVX(sv); *s; s++) {
6948 if (*s == ':' && s[1] == ':') {
6949 const STRLEN len = strlen(s+2)+1;
6951 Move(s+2, s+1, len, char);
6952 SvCUR_set(sv, SvCUR(sv) - 1);
6955 sv_catpvs(sv, ".pm");
6956 SvFLAGS(sv) |= was_readonly;
6960 if (!(o->op_flags & OPf_SPECIAL)) { /* Wasn't written as CORE::require */
6961 /* handle override, if any */
6962 gv = gv_fetchpvs("require", GV_NOTQUAL, SVt_PVCV);
6963 if (!(gv && GvCVu(gv) && GvIMPORTED_CV(gv))) {
6964 GV * const * const gvp = (GV**)hv_fetchs(PL_globalstash, "require", FALSE);
6965 gv = gvp ? *gvp : NULL;
6969 if (gv && GvCVu(gv) && GvIMPORTED_CV(gv)) {
6970 OP * const kid = cUNOPo->op_first;
6973 cUNOPo->op_first = 0;
6977 newop = ck_subr(newUNOP(OP_ENTERSUB, OPf_STACKED,
6978 append_elem(OP_LIST, kid,
6979 scalar(newUNOP(OP_RV2CV, 0,
6982 op_getmad(o,newop,'O');
6990 Perl_ck_return(pTHX_ OP *o)
6993 if (CvLVALUE(PL_compcv)) {
6995 for (kid = cLISTOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
6996 mod(kid, OP_LEAVESUBLV);
7002 Perl_ck_select(pTHX_ OP *o)
7006 if (o->op_flags & OPf_KIDS) {
7007 kid = cLISTOPo->op_first->op_sibling; /* get past pushmark */
7008 if (kid && kid->op_sibling) {
7009 o->op_type = OP_SSELECT;
7010 o->op_ppaddr = PL_ppaddr[OP_SSELECT];
7012 return fold_constants(o);
7016 kid = cLISTOPo->op_first->op_sibling; /* get past pushmark */
7017 if (kid && kid->op_type == OP_RV2GV)
7018 kid->op_private &= ~HINT_STRICT_REFS;
7023 Perl_ck_shift(pTHX_ OP *o)
7026 const I32 type = o->op_type;
7028 if (!(o->op_flags & OPf_KIDS)) {
7030 /* FIXME - this can be refactored to reduce code in #ifdefs */
7032 OP * const oldo = o;
7036 argop = newUNOP(OP_RV2AV, 0,
7037 scalar(newGVOP(OP_GV, 0, CvUNIQUE(PL_compcv) ? PL_argvgv : PL_defgv)));
7039 o = newUNOP(type, 0, scalar(argop));
7040 op_getmad(oldo,o,'O');
7043 return newUNOP(type, 0, scalar(argop));
7046 return scalar(modkids(ck_fun(o), type));
7050 Perl_ck_sort(pTHX_ OP *o)
7055 if (o->op_type == OP_SORT && (PL_hints & HINT_LOCALIZE_HH) != 0) {
7056 HV * const hinthv = GvHV(PL_hintgv);
7058 SV ** const svp = hv_fetchs(hinthv, "sort", FALSE);
7060 const I32 sorthints = (I32)SvIV(*svp);
7061 if ((sorthints & HINT_SORT_QUICKSORT) != 0)
7062 o->op_private |= OPpSORT_QSORT;
7063 if ((sorthints & HINT_SORT_STABLE) != 0)
7064 o->op_private |= OPpSORT_STABLE;
7069 if (o->op_type == OP_SORT && o->op_flags & OPf_STACKED)
7071 firstkid = cLISTOPo->op_first->op_sibling; /* get past pushmark */
7072 if (o->op_flags & OPf_STACKED) { /* may have been cleared */
7074 OP *kid = cUNOPx(firstkid)->op_first; /* get past null */
7076 if (kid->op_type == OP_SCOPE || kid->op_type == OP_LEAVE) {
7078 if (kid->op_type == OP_SCOPE) {
7082 else if (kid->op_type == OP_LEAVE) {
7083 if (o->op_type == OP_SORT) {
7084 op_null(kid); /* wipe out leave */
7087 for (k = kLISTOP->op_first->op_next; k; k = k->op_next) {
7088 if (k->op_next == kid)
7090 /* don't descend into loops */
7091 else if (k->op_type == OP_ENTERLOOP
7092 || k->op_type == OP_ENTERITER)
7094 k = cLOOPx(k)->op_lastop;
7099 kid->op_next = 0; /* just disconnect the leave */
7100 k = kLISTOP->op_first;
7105 if (o->op_type == OP_SORT) {
7106 /* provide scalar context for comparison function/block */
7112 o->op_flags |= OPf_SPECIAL;
7114 else if (kid->op_type == OP_RV2SV || kid->op_type == OP_PADSV)
7117 firstkid = firstkid->op_sibling;
7120 /* provide list context for arguments */
7121 if (o->op_type == OP_SORT)
7128 S_simplify_sort(pTHX_ OP *o)
7131 register OP *kid = cLISTOPo->op_first->op_sibling; /* get past pushmark */
7136 if (!(o->op_flags & OPf_STACKED))
7138 GvMULTI_on(gv_fetchpvs("a", GV_ADD|GV_NOTQUAL, SVt_PV));
7139 GvMULTI_on(gv_fetchpvs("b", GV_ADD|GV_NOTQUAL, SVt_PV));
7140 kid = kUNOP->op_first; /* get past null */
7141 if (kid->op_type != OP_SCOPE)
7143 kid = kLISTOP->op_last; /* get past scope */
7144 switch(kid->op_type) {
7152 k = kid; /* remember this node*/
7153 if (kBINOP->op_first->op_type != OP_RV2SV)
7155 kid = kBINOP->op_first; /* get past cmp */
7156 if (kUNOP->op_first->op_type != OP_GV)
7158 kid = kUNOP->op_first; /* get past rv2sv */
7160 if (GvSTASH(gv) != PL_curstash)
7162 gvname = GvNAME(gv);
7163 if (*gvname == 'a' && gvname[1] == '\0')
7165 else if (*gvname == 'b' && gvname[1] == '\0')
7170 kid = k; /* back to cmp */
7171 if (kBINOP->op_last->op_type != OP_RV2SV)
7173 kid = kBINOP->op_last; /* down to 2nd arg */
7174 if (kUNOP->op_first->op_type != OP_GV)
7176 kid = kUNOP->op_first; /* get past rv2sv */
7178 if (GvSTASH(gv) != PL_curstash)
7180 gvname = GvNAME(gv);
7182 ? !(*gvname == 'a' && gvname[1] == '\0')
7183 : !(*gvname == 'b' && gvname[1] == '\0'))
7185 o->op_flags &= ~(OPf_STACKED | OPf_SPECIAL);
7187 o->op_private |= OPpSORT_DESCEND;
7188 if (k->op_type == OP_NCMP)
7189 o->op_private |= OPpSORT_NUMERIC;
7190 if (k->op_type == OP_I_NCMP)
7191 o->op_private |= OPpSORT_NUMERIC | OPpSORT_INTEGER;
7192 kid = cLISTOPo->op_first->op_sibling;
7193 cLISTOPo->op_first->op_sibling = kid->op_sibling; /* bypass old block */
7195 op_getmad(kid,o,'S'); /* then delete it */
7197 op_free(kid); /* then delete it */
7202 Perl_ck_split(pTHX_ OP *o)
7207 if (o->op_flags & OPf_STACKED)
7208 return no_fh_allowed(o);
7210 kid = cLISTOPo->op_first;
7211 if (kid->op_type != OP_NULL)
7212 Perl_croak(aTHX_ "panic: ck_split");
7213 kid = kid->op_sibling;
7214 op_free(cLISTOPo->op_first);
7215 cLISTOPo->op_first = kid;
7217 cLISTOPo->op_first = kid = newSVOP(OP_CONST, 0, newSVpvs(" "));
7218 cLISTOPo->op_last = kid; /* There was only one element previously */
7221 if (kid->op_type != OP_MATCH || kid->op_flags & OPf_STACKED) {
7222 OP * const sibl = kid->op_sibling;
7223 kid->op_sibling = 0;
7224 kid = pmruntime( newPMOP(OP_MATCH, OPf_SPECIAL), kid, 0);
7225 if (cLISTOPo->op_first == cLISTOPo->op_last)
7226 cLISTOPo->op_last = kid;
7227 cLISTOPo->op_first = kid;
7228 kid->op_sibling = sibl;
7231 kid->op_type = OP_PUSHRE;
7232 kid->op_ppaddr = PL_ppaddr[OP_PUSHRE];
7234 if (((PMOP *)kid)->op_pmflags & PMf_GLOBAL && ckWARN(WARN_REGEXP)) {
7235 Perl_warner(aTHX_ packWARN(WARN_REGEXP),
7236 "Use of /g modifier is meaningless in split");
7239 if (!kid->op_sibling)
7240 append_elem(OP_SPLIT, o, newDEFSVOP());
7242 kid = kid->op_sibling;
7245 if (!kid->op_sibling)
7246 append_elem(OP_SPLIT, o, newSVOP(OP_CONST, 0, newSViv(0)));
7247 assert(kid->op_sibling);
7249 kid = kid->op_sibling;
7252 if (kid->op_sibling)
7253 return too_many_arguments(o,OP_DESC(o));
7259 Perl_ck_join(pTHX_ OP *o)
7261 const OP * const kid = cLISTOPo->op_first->op_sibling;
7262 if (kid && kid->op_type == OP_MATCH) {
7263 if (ckWARN(WARN_SYNTAX)) {
7264 const REGEXP *re = PM_GETRE(kPMOP);
7265 const char *pmstr = re ? re->precomp : "STRING";
7266 Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
7267 "/%s/ should probably be written as \"%s\"",
7275 Perl_ck_subr(pTHX_ OP *o)
7278 OP *prev = ((cUNOPo->op_first->op_sibling)
7279 ? cUNOPo : ((UNOP*)cUNOPo->op_first))->op_first;
7280 OP *o2 = prev->op_sibling;
7282 const char *proto = NULL;
7283 const char *proto_end = NULL;
7288 I32 contextclass = 0;
7292 o->op_private |= OPpENTERSUB_HASTARG;
7293 for (cvop = o2; cvop->op_sibling; cvop = cvop->op_sibling) ;
7294 if (cvop->op_type == OP_RV2CV) {
7296 o->op_private |= (cvop->op_private & OPpENTERSUB_AMPER);
7297 op_null(cvop); /* disable rv2cv */
7298 tmpop = (SVOP*)((UNOP*)cvop)->op_first;
7299 if (tmpop->op_type == OP_GV && !(o->op_private & OPpENTERSUB_AMPER)) {
7300 GV *gv = cGVOPx_gv(tmpop);
7303 tmpop->op_private |= OPpEARLY_CV;
7307 namegv = CvANON(cv) ? gv : CvGV(cv);
7308 proto = SvPV((SV*)cv, len);
7309 proto_end = proto + len;
7311 if (CvASSERTION(cv)) {
7312 if (PL_hints & HINT_ASSERTING) {
7313 if (PERLDB_ASSERTION && PL_curstash != PL_debstash)
7314 o->op_private |= OPpENTERSUB_DB;
7318 if (!(PL_hints & HINT_ASSERTIONSSEEN) && ckWARN(WARN_ASSERTIONS)) {
7319 Perl_warner(aTHX_ packWARN(WARN_ASSERTIONS),
7320 "Impossible to activate assertion call");
7327 else if (cvop->op_type == OP_METHOD || cvop->op_type == OP_METHOD_NAMED) {
7328 if (o2->op_type == OP_CONST)
7329 o2->op_private &= ~OPpCONST_STRICT;
7330 else if (o2->op_type == OP_LIST) {
7331 OP * const sib = ((UNOP*)o2)->op_first->op_sibling;
7332 if (sib && sib->op_type == OP_CONST)
7333 sib->op_private &= ~OPpCONST_STRICT;
7336 o->op_private |= (PL_hints & HINT_STRICT_REFS);
7337 if (PERLDB_SUB && PL_curstash != PL_debstash)
7338 o->op_private |= OPpENTERSUB_DB;
7339 while (o2 != cvop) {
7341 if (PL_madskills && o2->op_type == OP_NULL)
7342 o3 = ((UNOP*)o2)->op_first;
7346 if (proto >= proto_end)
7347 return too_many_arguments(o, gv_ename(namegv));
7367 if (o3->op_type != OP_REFGEN && o3->op_type != OP_UNDEF)
7369 arg == 1 ? "block or sub {}" : "sub {}",
7370 gv_ename(namegv), o3);
7373 /* '*' allows any scalar type, including bareword */
7376 if (o3->op_type == OP_RV2GV)
7377 goto wrapref; /* autoconvert GLOB -> GLOBref */
7378 else if (o3->op_type == OP_CONST)
7379 o3->op_private &= ~OPpCONST_STRICT;
7380 else if (o3->op_type == OP_ENTERSUB) {
7381 /* accidental subroutine, revert to bareword */
7382 OP *gvop = ((UNOP*)o3)->op_first;
7383 if (gvop && gvop->op_type == OP_NULL) {
7384 gvop = ((UNOP*)gvop)->op_first;
7386 for (; gvop->op_sibling; gvop = gvop->op_sibling)
7389 (gvop->op_private & OPpENTERSUB_NOPAREN) &&
7390 (gvop = ((UNOP*)gvop)->op_first) &&
7391 gvop->op_type == OP_GV)
7393 GV * const gv = cGVOPx_gv(gvop);
7394 OP * const sibling = o2->op_sibling;
7395 SV * const n = newSVpvs("");
7397 OP * const oldo2 = o2;
7401 gv_fullname4(n, gv, "", FALSE);
7402 o2 = newSVOP(OP_CONST, 0, n);
7403 op_getmad(oldo2,o2,'O');
7404 prev->op_sibling = o2;
7405 o2->op_sibling = sibling;
7421 if (contextclass++ == 0) {
7422 e = strchr(proto, ']');
7423 if (!e || e == proto)
7432 const char *p = proto;
7433 const char *const end = proto;
7435 while (*--p != '[');
7436 bad_type(arg, Perl_form(aTHX_ "one of %.*s",
7438 gv_ename(namegv), o3);
7443 if (o3->op_type == OP_RV2GV)
7446 bad_type(arg, "symbol", gv_ename(namegv), o3);
7449 if (o3->op_type == OP_ENTERSUB)
7452 bad_type(arg, "subroutine entry", gv_ename(namegv),
7456 if (o3->op_type == OP_RV2SV ||
7457 o3->op_type == OP_PADSV ||
7458 o3->op_type == OP_HELEM ||
7459 o3->op_type == OP_AELEM ||
7460 o3->op_type == OP_THREADSV)
7463 bad_type(arg, "scalar", gv_ename(namegv), o3);
7466 if (o3->op_type == OP_RV2AV ||
7467 o3->op_type == OP_PADAV)
7470 bad_type(arg, "array", gv_ename(namegv), o3);
7473 if (o3->op_type == OP_RV2HV ||
7474 o3->op_type == OP_PADHV)
7477 bad_type(arg, "hash", gv_ename(namegv), o3);
7482 OP* const sib = kid->op_sibling;
7483 kid->op_sibling = 0;
7484 o2 = newUNOP(OP_REFGEN, 0, kid);
7485 o2->op_sibling = sib;
7486 prev->op_sibling = o2;
7488 if (contextclass && e) {
7503 Perl_croak(aTHX_ "Malformed prototype for %s: %"SVf,
7504 gv_ename(namegv), (void*)cv);
7509 mod(o2, OP_ENTERSUB);
7511 o2 = o2->op_sibling;
7513 if (proto && !optional && proto_end > proto &&
7514 (*proto != '@' && *proto != '%' && *proto != ';'))
7515 return too_few_arguments(o, gv_ename(namegv));
7518 OP * const oldo = o;
7522 o=newSVOP(OP_CONST, 0, newSViv(0));
7523 op_getmad(oldo,o,'O');
7529 Perl_ck_svconst(pTHX_ OP *o)
7531 PERL_UNUSED_CONTEXT;
7532 SvREADONLY_on(cSVOPo->op_sv);
7537 Perl_ck_chdir(pTHX_ OP *o)
7539 if (o->op_flags & OPf_KIDS) {
7540 SVOP * const kid = (SVOP*)cUNOPo->op_first;
7542 if (kid && kid->op_type == OP_CONST &&
7543 (kid->op_private & OPpCONST_BARE))
7545 o->op_flags |= OPf_SPECIAL;
7546 kid->op_private &= ~OPpCONST_STRICT;
7553 Perl_ck_trunc(pTHX_ OP *o)
7555 if (o->op_flags & OPf_KIDS) {
7556 SVOP *kid = (SVOP*)cUNOPo->op_first;
7558 if (kid->op_type == OP_NULL)
7559 kid = (SVOP*)kid->op_sibling;
7560 if (kid && kid->op_type == OP_CONST &&
7561 (kid->op_private & OPpCONST_BARE))
7563 o->op_flags |= OPf_SPECIAL;
7564 kid->op_private &= ~OPpCONST_STRICT;
7571 Perl_ck_unpack(pTHX_ OP *o)
7573 OP *kid = cLISTOPo->op_first;
7574 if (kid->op_sibling) {
7575 kid = kid->op_sibling;
7576 if (!kid->op_sibling)
7577 kid->op_sibling = newDEFSVOP();
7583 Perl_ck_substr(pTHX_ OP *o)
7586 if ((o->op_flags & OPf_KIDS) && (o->op_private == 4)) {
7587 OP *kid = cLISTOPo->op_first;
7589 if (kid->op_type == OP_NULL)
7590 kid = kid->op_sibling;
7592 kid->op_flags |= OPf_MOD;
7598 /* A peephole optimizer. We visit the ops in the order they're to execute.
7599 * See the comments at the top of this file for more details about when
7600 * peep() is called */
7603 Perl_peep(pTHX_ register OP *o)
7606 register OP* oldop = NULL;
7608 if (!o || o->op_opt)
7612 SAVEVPTR(PL_curcop);
7613 for (; o; o = o->op_next) {
7617 switch (o->op_type) {
7621 PL_curcop = ((COP*)o); /* for warnings */
7626 if (cSVOPo->op_private & OPpCONST_STRICT)
7627 no_bareword_allowed(o);
7629 case OP_METHOD_NAMED:
7630 /* Relocate sv to the pad for thread safety.
7631 * Despite being a "constant", the SV is written to,
7632 * for reference counts, sv_upgrade() etc. */
7634 const PADOFFSET ix = pad_alloc(OP_CONST, SVs_PADTMP);
7635 if (o->op_type == OP_CONST && SvPADTMP(cSVOPo->op_sv)) {
7636 /* If op_sv is already a PADTMP then it is being used by
7637 * some pad, so make a copy. */
7638 sv_setsv(PAD_SVl(ix),cSVOPo->op_sv);
7639 SvREADONLY_on(PAD_SVl(ix));
7640 SvREFCNT_dec(cSVOPo->op_sv);
7642 else if (o->op_type == OP_CONST
7643 && cSVOPo->op_sv == &PL_sv_undef) {
7644 /* PL_sv_undef is hack - it's unsafe to store it in the
7645 AV that is the pad, because av_fetch treats values of
7646 PL_sv_undef as a "free" AV entry and will merrily
7647 replace them with a new SV, causing pad_alloc to think
7648 that this pad slot is free. (When, clearly, it is not)
7650 SvOK_off(PAD_SVl(ix));
7651 SvPADTMP_on(PAD_SVl(ix));
7652 SvREADONLY_on(PAD_SVl(ix));
7655 SvREFCNT_dec(PAD_SVl(ix));
7656 SvPADTMP_on(cSVOPo->op_sv);
7657 PAD_SETSV(ix, cSVOPo->op_sv);
7658 /* XXX I don't know how this isn't readonly already. */
7659 SvREADONLY_on(PAD_SVl(ix));
7661 cSVOPo->op_sv = NULL;
7669 if (o->op_next && o->op_next->op_type == OP_STRINGIFY) {
7670 if (o->op_next->op_private & OPpTARGET_MY) {
7671 if (o->op_flags & OPf_STACKED) /* chained concats */
7672 goto ignore_optimization;
7674 /* assert(PL_opargs[o->op_type] & OA_TARGLEX); */
7675 o->op_targ = o->op_next->op_targ;
7676 o->op_next->op_targ = 0;
7677 o->op_private |= OPpTARGET_MY;
7680 op_null(o->op_next);
7682 ignore_optimization:
7686 if ((o->op_flags & OPf_WANT) != OPf_WANT_LIST) {
7688 break; /* Scalar stub must produce undef. List stub is noop */
7692 if (o->op_targ == OP_NEXTSTATE
7693 || o->op_targ == OP_DBSTATE
7694 || o->op_targ == OP_SETSTATE)
7696 PL_curcop = ((COP*)o);
7698 /* XXX: We avoid setting op_seq here to prevent later calls
7699 to peep() from mistakenly concluding that optimisation
7700 has already occurred. This doesn't fix the real problem,
7701 though (See 20010220.007). AMS 20010719 */
7702 /* op_seq functionality is now replaced by op_opt */
7703 if (oldop && o->op_next) {
7704 oldop->op_next = o->op_next;
7712 if (oldop && o->op_next) {
7713 oldop->op_next = o->op_next;
7721 if (o->op_type == OP_PADAV || o->op_next->op_type == OP_RV2AV) {
7722 OP* const pop = (o->op_type == OP_PADAV) ?
7723 o->op_next : o->op_next->op_next;
7725 if (pop && pop->op_type == OP_CONST &&
7726 ((PL_op = pop->op_next)) &&
7727 pop->op_next->op_type == OP_AELEM &&
7728 !(pop->op_next->op_private &
7729 (OPpLVAL_INTRO|OPpLVAL_DEFER|OPpDEREF|OPpMAYBE_LVSUB)) &&
7730 (i = SvIV(((SVOP*)pop)->op_sv) - CopARYBASE_get(PL_curcop))
7735 if (cSVOPx(pop)->op_private & OPpCONST_STRICT)
7736 no_bareword_allowed(pop);
7737 if (o->op_type == OP_GV)
7738 op_null(o->op_next);
7739 op_null(pop->op_next);
7741 o->op_flags |= pop->op_next->op_flags & OPf_MOD;
7742 o->op_next = pop->op_next->op_next;
7743 o->op_ppaddr = PL_ppaddr[OP_AELEMFAST];
7744 o->op_private = (U8)i;
7745 if (o->op_type == OP_GV) {
7750 o->op_flags |= OPf_SPECIAL;
7751 o->op_type = OP_AELEMFAST;
7757 if (o->op_next->op_type == OP_RV2SV) {
7758 if (!(o->op_next->op_private & OPpDEREF)) {
7759 op_null(o->op_next);
7760 o->op_private |= o->op_next->op_private & (OPpLVAL_INTRO
7762 o->op_next = o->op_next->op_next;
7763 o->op_type = OP_GVSV;
7764 o->op_ppaddr = PL_ppaddr[OP_GVSV];
7767 else if ((o->op_private & OPpEARLY_CV) && ckWARN(WARN_PROTOTYPE)) {
7768 GV * const gv = cGVOPo_gv;
7769 if (SvTYPE(gv) == SVt_PVGV && GvCV(gv) && SvPVX_const(GvCV(gv))) {
7770 /* XXX could check prototype here instead of just carping */
7771 SV * const sv = sv_newmortal();
7772 gv_efullname3(sv, gv, NULL);
7773 Perl_warner(aTHX_ packWARN(WARN_PROTOTYPE),
7774 "%"SVf"() called too early to check prototype",
7778 else if (o->op_next->op_type == OP_READLINE
7779 && o->op_next->op_next->op_type == OP_CONCAT
7780 && (o->op_next->op_next->op_flags & OPf_STACKED))
7782 /* Turn "$a .= <FH>" into an OP_RCATLINE. AMS 20010917 */
7783 o->op_type = OP_RCATLINE;
7784 o->op_flags |= OPf_STACKED;
7785 o->op_ppaddr = PL_ppaddr[OP_RCATLINE];
7786 op_null(o->op_next->op_next);
7787 op_null(o->op_next);
7804 while (cLOGOP->op_other->op_type == OP_NULL)
7805 cLOGOP->op_other = cLOGOP->op_other->op_next;
7806 peep(cLOGOP->op_other); /* Recursive calls are not replaced by fptr calls */
7812 while (cLOOP->op_redoop->op_type == OP_NULL)
7813 cLOOP->op_redoop = cLOOP->op_redoop->op_next;
7814 peep(cLOOP->op_redoop);
7815 while (cLOOP->op_nextop->op_type == OP_NULL)
7816 cLOOP->op_nextop = cLOOP->op_nextop->op_next;
7817 peep(cLOOP->op_nextop);
7818 while (cLOOP->op_lastop->op_type == OP_NULL)
7819 cLOOP->op_lastop = cLOOP->op_lastop->op_next;
7820 peep(cLOOP->op_lastop);
7827 while (cPMOP->op_pmreplstart &&
7828 cPMOP->op_pmreplstart->op_type == OP_NULL)
7829 cPMOP->op_pmreplstart = cPMOP->op_pmreplstart->op_next;
7830 peep(cPMOP->op_pmreplstart);
7835 if (o->op_next && o->op_next->op_type == OP_NEXTSTATE
7836 && ckWARN(WARN_SYNTAX))
7838 if (o->op_next->op_sibling) {
7839 const OPCODE type = o->op_next->op_sibling->op_type;
7840 if (type != OP_EXIT && type != OP_WARN && type != OP_DIE) {
7841 const line_t oldline = CopLINE(PL_curcop);
7842 CopLINE_set(PL_curcop, CopLINE((COP*)o->op_next));
7843 Perl_warner(aTHX_ packWARN(WARN_EXEC),
7844 "Statement unlikely to be reached");
7845 Perl_warner(aTHX_ packWARN(WARN_EXEC),
7846 "\t(Maybe you meant system() when you said exec()?)\n");
7847 CopLINE_set(PL_curcop, oldline);
7858 const char *key = NULL;
7863 if (((BINOP*)o)->op_last->op_type != OP_CONST)
7866 /* Make the CONST have a shared SV */
7867 svp = cSVOPx_svp(((BINOP*)o)->op_last);
7868 if ((!SvFAKE(sv = *svp) || !SvREADONLY(sv)) && !IS_PADCONST(sv)) {
7869 key = SvPV_const(sv, keylen);
7870 lexname = newSVpvn_share(key,
7871 SvUTF8(sv) ? -(I32)keylen : (I32)keylen,
7877 if ((o->op_private & (OPpLVAL_INTRO)))
7880 rop = (UNOP*)((BINOP*)o)->op_first;
7881 if (rop->op_type != OP_RV2HV || rop->op_first->op_type != OP_PADSV)
7883 lexname = *av_fetch(PL_comppad_name, rop->op_first->op_targ, TRUE);
7884 if (!SvPAD_TYPED(lexname))
7886 fields = (GV**)hv_fetchs(SvSTASH(lexname), "FIELDS", FALSE);
7887 if (!fields || !GvHV(*fields))
7889 key = SvPV_const(*svp, keylen);
7890 if (!hv_fetch(GvHV(*fields), key,
7891 SvUTF8(*svp) ? -(I32)keylen : (I32)keylen, FALSE))
7893 Perl_croak(aTHX_ "No such class field \"%s\" "
7894 "in variable %s of type %s",
7895 key, SvPV_nolen_const(lexname), HvNAME_get(SvSTASH(lexname)));
7908 SVOP *first_key_op, *key_op;
7910 if ((o->op_private & (OPpLVAL_INTRO))
7911 /* I bet there's always a pushmark... */
7912 || ((LISTOP*)o)->op_first->op_sibling->op_type != OP_LIST)
7913 /* hmmm, no optimization if list contains only one key. */
7915 rop = (UNOP*)((LISTOP*)o)->op_last;
7916 if (rop->op_type != OP_RV2HV)
7918 if (rop->op_first->op_type == OP_PADSV)
7919 /* @$hash{qw(keys here)} */
7920 rop = (UNOP*)rop->op_first;
7922 /* @{$hash}{qw(keys here)} */
7923 if (rop->op_first->op_type == OP_SCOPE
7924 && cLISTOPx(rop->op_first)->op_last->op_type == OP_PADSV)
7926 rop = (UNOP*)cLISTOPx(rop->op_first)->op_last;
7932 lexname = *av_fetch(PL_comppad_name, rop->op_targ, TRUE);
7933 if (!SvPAD_TYPED(lexname))
7935 fields = (GV**)hv_fetchs(SvSTASH(lexname), "FIELDS", FALSE);
7936 if (!fields || !GvHV(*fields))
7938 /* Again guessing that the pushmark can be jumped over.... */
7939 first_key_op = (SVOP*)((LISTOP*)((LISTOP*)o)->op_first->op_sibling)
7940 ->op_first->op_sibling;
7941 for (key_op = first_key_op; key_op;
7942 key_op = (SVOP*)key_op->op_sibling) {
7943 if (key_op->op_type != OP_CONST)
7945 svp = cSVOPx_svp(key_op);
7946 key = SvPV_const(*svp, keylen);
7947 if (!hv_fetch(GvHV(*fields), key,
7948 SvUTF8(*svp) ? -(I32)keylen : (I32)keylen, FALSE))
7950 Perl_croak(aTHX_ "No such class field \"%s\" "
7951 "in variable %s of type %s",
7952 key, SvPV_nolen(lexname), HvNAME_get(SvSTASH(lexname)));
7959 /* will point to RV2AV or PADAV op on LHS/RHS of assign */
7963 /* check that RHS of sort is a single plain array */
7964 OP *oright = cUNOPo->op_first;
7965 if (!oright || oright->op_type != OP_PUSHMARK)
7968 /* reverse sort ... can be optimised. */
7969 if (!cUNOPo->op_sibling) {
7970 /* Nothing follows us on the list. */
7971 OP * const reverse = o->op_next;
7973 if (reverse->op_type == OP_REVERSE &&
7974 (reverse->op_flags & OPf_WANT) == OPf_WANT_LIST) {
7975 OP * const pushmark = cUNOPx(reverse)->op_first;
7976 if (pushmark && (pushmark->op_type == OP_PUSHMARK)
7977 && (cUNOPx(pushmark)->op_sibling == o)) {
7978 /* reverse -> pushmark -> sort */
7979 o->op_private |= OPpSORT_REVERSE;
7981 pushmark->op_next = oright->op_next;
7987 /* make @a = sort @a act in-place */
7991 oright = cUNOPx(oright)->op_sibling;
7994 if (oright->op_type == OP_NULL) { /* skip sort block/sub */
7995 oright = cUNOPx(oright)->op_sibling;
7999 (oright->op_type != OP_RV2AV && oright->op_type != OP_PADAV)
8000 || oright->op_next != o
8001 || (oright->op_private & OPpLVAL_INTRO)
8005 /* o2 follows the chain of op_nexts through the LHS of the
8006 * assign (if any) to the aassign op itself */
8008 if (!o2 || o2->op_type != OP_NULL)
8011 if (!o2 || o2->op_type != OP_PUSHMARK)
8014 if (o2 && o2->op_type == OP_GV)
8017 || (o2->op_type != OP_PADAV && o2->op_type != OP_RV2AV)
8018 || (o2->op_private & OPpLVAL_INTRO)
8023 if (!o2 || o2->op_type != OP_NULL)
8026 if (!o2 || o2->op_type != OP_AASSIGN
8027 || (o2->op_flags & OPf_WANT) != OPf_WANT_VOID)
8030 /* check that the sort is the first arg on RHS of assign */
8032 o2 = cUNOPx(o2)->op_first;
8033 if (!o2 || o2->op_type != OP_NULL)
8035 o2 = cUNOPx(o2)->op_first;
8036 if (!o2 || o2->op_type != OP_PUSHMARK)
8038 if (o2->op_sibling != o)
8041 /* check the array is the same on both sides */
8042 if (oleft->op_type == OP_RV2AV) {
8043 if (oright->op_type != OP_RV2AV
8044 || !cUNOPx(oright)->op_first
8045 || cUNOPx(oright)->op_first->op_type != OP_GV
8046 || cGVOPx_gv(cUNOPx(oleft)->op_first) !=
8047 cGVOPx_gv(cUNOPx(oright)->op_first)
8051 else if (oright->op_type != OP_PADAV
8052 || oright->op_targ != oleft->op_targ
8056 /* transfer MODishness etc from LHS arg to RHS arg */
8057 oright->op_flags = oleft->op_flags;
8058 o->op_private |= OPpSORT_INPLACE;
8060 /* excise push->gv->rv2av->null->aassign */
8061 o2 = o->op_next->op_next;
8062 op_null(o2); /* PUSHMARK */
8064 if (o2->op_type == OP_GV) {
8065 op_null(o2); /* GV */
8068 op_null(o2); /* RV2AV or PADAV */
8069 o2 = o2->op_next->op_next;
8070 op_null(o2); /* AASSIGN */
8072 o->op_next = o2->op_next;
8078 OP *ourmark, *theirmark, *ourlast, *iter, *expushmark, *rv2av;
8080 LISTOP *enter, *exlist;
8083 enter = (LISTOP *) o->op_next;
8086 if (enter->op_type == OP_NULL) {
8087 enter = (LISTOP *) enter->op_next;
8091 /* for $a (...) will have OP_GV then OP_RV2GV here.
8092 for (...) just has an OP_GV. */
8093 if (enter->op_type == OP_GV) {
8094 gvop = (OP *) enter;
8095 enter = (LISTOP *) enter->op_next;
8098 if (enter->op_type == OP_RV2GV) {
8099 enter = (LISTOP *) enter->op_next;
8105 if (enter->op_type != OP_ENTERITER)
8108 iter = enter->op_next;
8109 if (!iter || iter->op_type != OP_ITER)
8112 expushmark = enter->op_first;
8113 if (!expushmark || expushmark->op_type != OP_NULL
8114 || expushmark->op_targ != OP_PUSHMARK)
8117 exlist = (LISTOP *) expushmark->op_sibling;
8118 if (!exlist || exlist->op_type != OP_NULL
8119 || exlist->op_targ != OP_LIST)
8122 if (exlist->op_last != o) {
8123 /* Mmm. Was expecting to point back to this op. */
8126 theirmark = exlist->op_first;
8127 if (!theirmark || theirmark->op_type != OP_PUSHMARK)
8130 if (theirmark->op_sibling != o) {
8131 /* There's something between the mark and the reverse, eg
8132 for (1, reverse (...))
8137 ourmark = ((LISTOP *)o)->op_first;
8138 if (!ourmark || ourmark->op_type != OP_PUSHMARK)
8141 ourlast = ((LISTOP *)o)->op_last;
8142 if (!ourlast || ourlast->op_next != o)
8145 rv2av = ourmark->op_sibling;
8146 if (rv2av && rv2av->op_type == OP_RV2AV && rv2av->op_sibling == 0
8147 && rv2av->op_flags == (OPf_WANT_LIST | OPf_KIDS)
8148 && enter->op_flags == (OPf_WANT_LIST | OPf_KIDS)) {
8149 /* We're just reversing a single array. */
8150 rv2av->op_flags = OPf_WANT_SCALAR | OPf_KIDS | OPf_REF;
8151 enter->op_flags |= OPf_STACKED;
8154 /* We don't have control over who points to theirmark, so sacrifice
8156 theirmark->op_next = ourmark->op_next;
8157 theirmark->op_flags = ourmark->op_flags;
8158 ourlast->op_next = gvop ? gvop : (OP *) enter;
8161 enter->op_private |= OPpITER_REVERSED;
8162 iter->op_private |= OPpITER_REVERSED;
8169 UNOP *refgen, *rv2cv;
8172 /* I do not understand this, but if o->op_opt isn't set to 1,
8173 various tests in ext/B/t/bytecode.t fail with no readily
8179 if ((o->op_flags && OPf_WANT) != OPf_WANT_VOID)
8182 if ((o->op_private & ~OPpASSIGN_BACKWARDS) != 2)
8185 rv2gv = ((BINOP *)o)->op_last;
8186 if (!rv2gv || rv2gv->op_type != OP_RV2GV)
8189 refgen = (UNOP *)((BINOP *)o)->op_first;
8191 if (!refgen || refgen->op_type != OP_REFGEN)
8194 exlist = (LISTOP *)refgen->op_first;
8195 if (!exlist || exlist->op_type != OP_NULL
8196 || exlist->op_targ != OP_LIST)
8199 if (exlist->op_first->op_type != OP_PUSHMARK)
8202 rv2cv = (UNOP*)exlist->op_last;
8204 if (rv2cv->op_type != OP_RV2CV)
8207 assert ((rv2gv->op_private & OPpDONT_INIT_GV) == 0);
8208 assert ((o->op_private & OPpASSIGN_CV_TO_GV) == 0);
8209 assert ((rv2cv->op_private & OPpMAY_RETURN_CONSTANT) == 0);
8211 o->op_private |= OPpASSIGN_CV_TO_GV;
8212 rv2gv->op_private |= OPpDONT_INIT_GV;
8213 rv2cv->op_private |= OPpMAY_RETURN_CONSTANT;
8229 Perl_custom_op_name(pTHX_ const OP* o)
8232 const IV index = PTR2IV(o->op_ppaddr);
8236 if (!PL_custom_op_names) /* This probably shouldn't happen */
8237 return (char *)PL_op_name[OP_CUSTOM];
8239 keysv = sv_2mortal(newSViv(index));
8241 he = hv_fetch_ent(PL_custom_op_names, keysv, 0, 0);
8243 return (char *)PL_op_name[OP_CUSTOM]; /* Don't know who you are */
8245 return SvPV_nolen(HeVAL(he));
8249 Perl_custom_op_desc(pTHX_ const OP* o)
8252 const IV index = PTR2IV(o->op_ppaddr);
8256 if (!PL_custom_op_descs)
8257 return (char *)PL_op_desc[OP_CUSTOM];
8259 keysv = sv_2mortal(newSViv(index));
8261 he = hv_fetch_ent(PL_custom_op_descs, keysv, 0, 0);
8263 return (char *)PL_op_desc[OP_CUSTOM];
8265 return SvPV_nolen(HeVAL(he));
8270 /* Efficient sub that returns a constant scalar value. */
8272 const_sv_xsub(pTHX_ CV* cv)
8279 Perl_croak(aTHX_ "usage: %s::%s()",
8280 HvNAME_get(GvSTASH(CvGV(cv))), GvNAME(CvGV(cv)));
8284 ST(0) = (SV*)XSANY.any_ptr;
8290 * c-indentation-style: bsd
8292 * indent-tabs-mode: t
8295 * ex: set ts=8 sts=4 sw=4 noet: