3 * Copyright (C) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
4 * 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, by Larry Wall and others
6 * You may distribute under the terms of either the GNU General Public
7 * License or the Artistic License, as specified in the README file.
12 * "You see: Mr. Drogo, he married poor Miss Primula Brandybuck. She was
13 * our Mr. Bilbo's first cousin on the mother's side (her mother being the
14 * youngest of the Old Took's daughters); and Mr. Drogo was his second
15 * cousin. So Mr. Frodo is his first *and* second cousin, once removed
16 * either way, as the saying is, if you follow me." --the Gaffer
19 /* This file contains the functions that create, manipulate and optimize
20 * the OP structures that hold a compiled perl program.
22 * A Perl program is compiled into a tree of OPs. Each op contains
23 * structural pointers (eg to its siblings and the next op in the
24 * execution sequence), a pointer to the function that would execute the
25 * op, plus any data specific to that op. For example, an OP_CONST op
26 * points to the pp_const() function and to an SV containing the constant
27 * value. When pp_const() is executed, its job is to push that SV onto the
30 * OPs are mainly created by the newFOO() functions, which are mainly
31 * called from the parser (in perly.y) as the code is parsed. For example
32 * the Perl code $a + $b * $c would cause the equivalent of the following
33 * to be called (oversimplifying a bit):
35 * newBINOP(OP_ADD, flags,
37 * newBINOP(OP_MULTIPLY, flags, newSVREF($b), newSVREF($c))
40 * Note that during the build of miniperl, a temporary copy of this file
41 * is made, called opmini.c.
45 Perl's compiler is essentially a 3-pass compiler with interleaved phases:
49 An execution-order pass
51 The bottom-up pass is represented by all the "newOP" routines and
52 the ck_ routines. The bottom-upness is actually driven by yacc.
53 So at the point that a ck_ routine fires, we have no idea what the
54 context is, either upward in the syntax tree, or either forward or
55 backward in the execution order. (The bottom-up parser builds that
56 part of the execution order it knows about, but if you follow the "next"
57 links around, you'll find it's actually a closed loop through the
60 Whenever the bottom-up parser gets to a node that supplies context to
61 its components, it invokes that portion of the top-down pass that applies
62 to that part of the subtree (and marks the top node as processed, so
63 if a node further up supplies context, it doesn't have to take the
64 plunge again). As a particular subcase of this, as the new node is
65 built, it takes all the closed execution loops of its subcomponents
66 and links them into a new closed loop for the higher level node. But
67 it's still not the real execution order.
69 The actual execution order is not known till we get a grammar reduction
70 to a top-level unit like a subroutine or file that will be called by
71 "name" rather than via a "next" pointer. At that point, we can call
72 into peep() to do that code's portion of the 3rd pass. It has to be
73 recursive, but it's recursive on basic blocks, not on tree nodes.
76 /* To implement user lexical pragmas, there needs to be a way at run time to
77 get the compile time state of %^H for that block. Storing %^H in every
78 block (or even COP) would be very expensive, so a different approach is
79 taken. The (running) state of %^H is serialised into a tree of HE-like
80 structs. Stores into %^H are chained onto the current leaf as a struct
81 refcounted_he * with the key and the value. Deletes from %^H are saved
82 with a value of PL_sv_placeholder. The state of %^H at any point can be
83 turned back into a regular HV by walking back up the tree from that point's
84 leaf, ignoring any key you've already seen (placeholder or not), storing
85 the rest into the HV structure, then removing the placeholders. Hence
86 memory is only used to store the %^H deltas from the enclosing COP, rather
87 than the entire %^H on each COP.
89 To cause actions on %^H to write out the serialisation records, it has
90 magic type 'H'. This magic (itself) does nothing, but its presence causes
91 the values to gain magic type 'h', which has entries for set and clear.
92 C<Perl_magic_sethint> updates C<PL_compiling.cop_hints_hash> with a store
93 record, with deletes written by C<Perl_magic_clearhint>. C<SAVE_HINTS>
94 saves the current C<PL_compiling.cop_hints_hash> on the save stack, so that
95 it will be correctly restored when any inner compiling scope is exited.
101 #include "keywords.h"
103 #define CALL_PEEP(o) CALL_FPTR(PL_peepp)(aTHX_ o)
105 #if defined(PL_OP_SLAB_ALLOC)
107 #ifndef PERL_SLAB_SIZE
108 #define PERL_SLAB_SIZE 2048
112 Perl_Slab_Alloc(pTHX_ int m, size_t sz)
115 * To make incrementing use count easy PL_OpSlab is an I32 *
116 * To make inserting the link to slab PL_OpPtr is I32 **
117 * So compute size in units of sizeof(I32 *) as that is how Pl_OpPtr increments
118 * Add an overhead for pointer to slab and round up as a number of pointers
120 sz = (sz + 2*sizeof(I32 *) -1)/sizeof(I32 *);
121 if ((PL_OpSpace -= sz) < 0) {
122 PL_OpPtr = (I32 **) PerlMemShared_malloc(PERL_SLAB_SIZE*sizeof(I32*));
126 Zero(PL_OpPtr,PERL_SLAB_SIZE,I32 **);
127 /* We reserve the 0'th I32 sized chunk as a use count */
128 PL_OpSlab = (I32 *) PL_OpPtr;
129 /* Reduce size by the use count word, and by the size we need.
130 * Latter is to mimic the '-=' in the if() above
132 PL_OpSpace = PERL_SLAB_SIZE - (sizeof(I32)+sizeof(I32 **)-1)/sizeof(I32 **) - sz;
133 /* Allocation pointer starts at the top.
134 Theory: because we build leaves before trunk allocating at end
135 means that at run time access is cache friendly upward
137 PL_OpPtr += PERL_SLAB_SIZE;
139 assert( PL_OpSpace >= 0 );
140 /* Move the allocation pointer down */
142 assert( PL_OpPtr > (I32 **) PL_OpSlab );
143 *PL_OpPtr = PL_OpSlab; /* Note which slab it belongs to */
144 (*PL_OpSlab)++; /* Increment use count of slab */
145 assert( PL_OpPtr+sz <= ((I32 **) PL_OpSlab + PERL_SLAB_SIZE) );
146 assert( *PL_OpSlab > 0 );
147 return (void *)(PL_OpPtr + 1);
151 Perl_Slab_Free(pTHX_ void *op)
153 I32 * const * const ptr = (I32 **) op;
154 I32 * const slab = ptr[-1];
155 assert( ptr-1 > (I32 **) slab );
156 assert( ptr < ( (I32 **) slab + PERL_SLAB_SIZE) );
158 if (--(*slab) == 0) {
160 # define PerlMemShared PerlMem
163 PerlMemShared_free(slab);
164 if (slab == PL_OpSlab) {
171 * In the following definition, the ", (OP*)0" is just to make the compiler
172 * think the expression is of the right type: croak actually does a Siglongjmp.
174 #define CHECKOP(type,o) \
175 ((PL_op_mask && PL_op_mask[type]) \
176 ? ( op_free((OP*)o), \
177 Perl_croak(aTHX_ "'%s' trapped by operation mask", PL_op_desc[type]), \
179 : CALL_FPTR(PL_check[type])(aTHX_ (OP*)o))
181 #define RETURN_UNLIMITED_NUMBER (PERL_INT_MAX / 2)
184 S_gv_ename(pTHX_ GV *gv)
186 SV* const tmpsv = sv_newmortal();
187 gv_efullname3(tmpsv, gv, NULL);
188 return SvPV_nolen_const(tmpsv);
192 S_no_fh_allowed(pTHX_ OP *o)
194 yyerror(Perl_form(aTHX_ "Missing comma after first argument to %s function",
200 S_too_few_arguments(pTHX_ OP *o, const char *name)
202 yyerror(Perl_form(aTHX_ "Not enough arguments for %s", name));
207 S_too_many_arguments(pTHX_ OP *o, const char *name)
209 yyerror(Perl_form(aTHX_ "Too many arguments for %s", name));
214 S_bad_type(pTHX_ I32 n, const char *t, const char *name, const OP *kid)
216 yyerror(Perl_form(aTHX_ "Type of arg %d to %s must be %s (not %s)",
217 (int)n, name, t, OP_DESC(kid)));
221 S_no_bareword_allowed(pTHX_ const OP *o)
224 return; /* various ok barewords are hidden in extra OP_NULL */
225 qerror(Perl_mess(aTHX_
226 "Bareword \"%"SVf"\" not allowed while \"strict subs\" in use",
230 /* "register" allocation */
233 Perl_allocmy(pTHX_ const char *const name)
237 const bool is_our = (PL_in_my == KEY_our);
239 /* complain about "my $<special_var>" etc etc */
243 (USE_UTF8_IN_NAMES && UTF8_IS_START(name[1])) ||
244 (name[1] == '_' && (*name == '$' || name[2]))))
246 /* name[2] is true if strlen(name) > 2 */
247 if (!isPRINT(name[1]) || strchr("\t\n\r\f", name[1])) {
248 yyerror(Perl_form(aTHX_ "Can't use global %c^%c%s in \"my\"",
249 name[0], toCTRL(name[1]), name + 2));
251 yyerror(Perl_form(aTHX_ "Can't use global %s in \"my\"",name));
255 /* check for duplicate declaration */
256 pad_check_dup(name, is_our, (PL_curstash ? PL_curstash : PL_defstash));
258 if (PL_in_my_stash && *name != '$') {
259 yyerror(Perl_form(aTHX_
260 "Can't declare class for non-scalar %s in \"%s\"",
262 is_our ? "our" : PL_in_my == KEY_state ? "state" : "my"));
265 /* allocate a spare slot and store the name in that slot */
267 off = pad_add_name(name,
270 /* $_ is always in main::, even with our */
271 ? (PL_curstash && !strEQ(name,"$_") ? PL_curstash : PL_defstash)
275 PL_in_my == KEY_state
280 /* free the body of an op without examining its contents.
281 * Always use this rather than FreeOp directly */
284 S_op_destroy(pTHX_ OP *o)
286 if (o->op_latefree) {
297 Perl_op_free(pTHX_ OP *o)
302 if (!o || o->op_static)
304 if (o->op_latefreed) {
311 if (o->op_private & OPpREFCOUNTED) {
322 refcnt = OpREFCNT_dec(o);
333 if (o->op_flags & OPf_KIDS) {
334 register OP *kid, *nextkid;
335 for (kid = cUNOPo->op_first; kid; kid = nextkid) {
336 nextkid = kid->op_sibling; /* Get before next freeing kid */
341 type = (OPCODE)o->op_targ;
343 /* COP* is not cleared by op_clear() so that we may track line
344 * numbers etc even after null() */
345 if (type == OP_NEXTSTATE || type == OP_SETSTATE || type == OP_DBSTATE)
349 if (o->op_latefree) {
355 #ifdef DEBUG_LEAKING_SCALARS
362 Perl_op_clear(pTHX_ OP *o)
367 /* if (o->op_madprop && o->op_madprop->mad_next)
369 /* FIXME for MAD - if I uncomment these two lines t/op/pack.t fails with
370 "modification of a read only value" for a reason I can't fathom why.
371 It's the "" stringification of $_, where $_ was set to '' in a foreach
372 loop, but it defies simplification into a small test case.
373 However, commenting them out has caused ext/List/Util/t/weak.t to fail
376 mad_free(o->op_madprop);
382 switch (o->op_type) {
383 case OP_NULL: /* Was holding old type, if any. */
384 if (PL_madskills && o->op_targ != OP_NULL) {
385 o->op_type = o->op_targ;
389 case OP_ENTEREVAL: /* Was holding hints. */
393 if (!(o->op_flags & OPf_REF)
394 || (PL_check[o->op_type] != MEMBER_TO_FPTR(Perl_ck_ftst)))
400 if (! (o->op_type == OP_AELEMFAST && o->op_flags & OPf_SPECIAL)) {
401 /* not an OP_PADAV replacement */
403 if (cPADOPo->op_padix > 0) {
404 /* No GvIN_PAD_off(cGVOPo_gv) here, because other references
405 * may still exist on the pad */
406 pad_swipe(cPADOPo->op_padix, TRUE);
407 cPADOPo->op_padix = 0;
410 SvREFCNT_dec(cSVOPo->op_sv);
411 cSVOPo->op_sv = NULL;
415 case OP_METHOD_NAMED:
417 SvREFCNT_dec(cSVOPo->op_sv);
418 cSVOPo->op_sv = NULL;
421 Even if op_clear does a pad_free for the target of the op,
422 pad_free doesn't actually remove the sv that exists in the pad;
423 instead it lives on. This results in that it could be reused as
424 a target later on when the pad was reallocated.
427 pad_swipe(o->op_targ,1);
436 if (o->op_flags & (OPf_SPECIAL|OPf_STACKED|OPf_KIDS))
440 if (o->op_private & (OPpTRANS_FROM_UTF|OPpTRANS_TO_UTF)) {
441 SvREFCNT_dec(cSVOPo->op_sv);
442 cSVOPo->op_sv = NULL;
445 PerlMemShared_free(cPVOPo->op_pv);
446 cPVOPo->op_pv = NULL;
450 op_free(cPMOPo->op_pmreplroot);
454 if (INT2PTR(PADOFFSET, cPMOPo->op_pmreplroot)) {
455 /* No GvIN_PAD_off here, because other references may still
456 * exist on the pad */
457 pad_swipe(INT2PTR(PADOFFSET, cPMOPo->op_pmreplroot), TRUE);
460 SvREFCNT_dec((SV*)cPMOPo->op_pmreplroot);
467 HV * const pmstash = PmopSTASH(cPMOPo);
468 if (pmstash && !SvIS_FREED(pmstash)) {
469 MAGIC * const mg = mg_find((SV*)pmstash, PERL_MAGIC_symtab);
471 PMOP *pmop = (PMOP*) mg->mg_obj;
472 PMOP *lastpmop = NULL;
474 if (cPMOPo == pmop) {
476 lastpmop->op_pmnext = pmop->op_pmnext;
478 mg->mg_obj = (SV*) pmop->op_pmnext;
482 pmop = pmop->op_pmnext;
486 PmopSTASH_free(cPMOPo);
488 cPMOPo->op_pmreplroot = NULL;
489 /* we use the "SAFE" version of the PM_ macros here
490 * since sv_clean_all might release some PMOPs
491 * after PL_regex_padav has been cleared
492 * and the clearing of PL_regex_padav needs to
493 * happen before sv_clean_all
495 ReREFCNT_dec(PM_GETRE_SAFE(cPMOPo));
496 PM_SETRE_SAFE(cPMOPo, NULL);
498 if(PL_regex_pad) { /* We could be in destruction */
499 av_push((AV*) PL_regex_pad[0],(SV*) PL_regex_pad[(cPMOPo)->op_pmoffset]);
500 SvREPADTMP_on(PL_regex_pad[(cPMOPo)->op_pmoffset]);
501 PM_SETRE(cPMOPo, (cPMOPo)->op_pmoffset);
508 if (o->op_targ > 0) {
509 pad_free(o->op_targ);
515 S_cop_free(pTHX_ COP* cop)
520 if (! specialWARN(cop->cop_warnings))
521 PerlMemShared_free(cop->cop_warnings);
522 Perl_refcounted_he_free(aTHX_ cop->cop_hints_hash);
526 Perl_op_null(pTHX_ OP *o)
529 if (o->op_type == OP_NULL)
533 o->op_targ = o->op_type;
534 o->op_type = OP_NULL;
535 o->op_ppaddr = PL_ppaddr[OP_NULL];
539 Perl_op_refcnt_lock(pTHX)
547 Perl_op_refcnt_unlock(pTHX)
554 /* Contextualizers */
556 #define LINKLIST(o) ((o)->op_next ? (o)->op_next : linklist((OP*)o))
559 Perl_linklist(pTHX_ OP *o)
566 /* establish postfix order */
567 first = cUNOPo->op_first;
570 o->op_next = LINKLIST(first);
573 if (kid->op_sibling) {
574 kid->op_next = LINKLIST(kid->op_sibling);
575 kid = kid->op_sibling;
589 Perl_scalarkids(pTHX_ OP *o)
591 if (o && o->op_flags & OPf_KIDS) {
593 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
600 S_scalarboolean(pTHX_ OP *o)
603 if (o->op_type == OP_SASSIGN && cBINOPo->op_first->op_type == OP_CONST) {
604 if (ckWARN(WARN_SYNTAX)) {
605 const line_t oldline = CopLINE(PL_curcop);
607 if (PL_copline != NOLINE)
608 CopLINE_set(PL_curcop, PL_copline);
609 Perl_warner(aTHX_ packWARN(WARN_SYNTAX), "Found = in conditional, should be ==");
610 CopLINE_set(PL_curcop, oldline);
617 Perl_scalar(pTHX_ OP *o)
622 /* assumes no premature commitment */
623 if (!o || PL_error_count || (o->op_flags & OPf_WANT)
624 || o->op_type == OP_RETURN)
629 o->op_flags = (o->op_flags & ~OPf_WANT) | OPf_WANT_SCALAR;
631 switch (o->op_type) {
633 scalar(cBINOPo->op_first);
638 for (kid = cUNOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
642 if ((kid = cLISTOPo->op_first) && kid->op_type == OP_PUSHRE) {
643 if (!kPMOP->op_pmreplroot)
644 deprecate_old("implicit split to @_");
652 if (o->op_flags & OPf_KIDS) {
653 for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling)
659 kid = cLISTOPo->op_first;
661 while ((kid = kid->op_sibling)) {
667 PL_curcop = &PL_compiling;
672 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling) {
678 PL_curcop = &PL_compiling;
681 if (ckWARN(WARN_VOID))
682 Perl_warner(aTHX_ packWARN(WARN_VOID), "Useless use of sort in scalar context");
688 Perl_scalarvoid(pTHX_ OP *o)
692 const char* useless = NULL;
696 /* trailing mad null ops don't count as "there" for void processing */
698 o->op_type != OP_NULL &&
700 o->op_sibling->op_type == OP_NULL)
703 for (sib = o->op_sibling;
704 sib && sib->op_type == OP_NULL;
705 sib = sib->op_sibling) ;
711 if (o->op_type == OP_NEXTSTATE
712 || o->op_type == OP_SETSTATE
713 || o->op_type == OP_DBSTATE
714 || (o->op_type == OP_NULL && (o->op_targ == OP_NEXTSTATE
715 || o->op_targ == OP_SETSTATE
716 || o->op_targ == OP_DBSTATE)))
717 PL_curcop = (COP*)o; /* for warning below */
719 /* assumes no premature commitment */
720 want = o->op_flags & OPf_WANT;
721 if ((want && want != OPf_WANT_SCALAR) || PL_error_count
722 || o->op_type == OP_RETURN)
727 if ((o->op_private & OPpTARGET_MY)
728 && (PL_opargs[o->op_type] & OA_TARGLEX))/* OPp share the meaning */
730 return scalar(o); /* As if inside SASSIGN */
733 o->op_flags = (o->op_flags & ~OPf_WANT) | OPf_WANT_VOID;
735 switch (o->op_type) {
737 if (!(PL_opargs[o->op_type] & OA_FOLDCONST))
741 if (o->op_flags & OPf_STACKED)
745 if (o->op_private == 4)
817 if (!(o->op_private & (OPpLVAL_INTRO|OPpOUR_INTRO)))
818 useless = OP_DESC(o);
822 kid = cUNOPo->op_first;
823 if (kid->op_type != OP_MATCH && kid->op_type != OP_SUBST &&
824 kid->op_type != OP_TRANS) {
827 useless = "negative pattern binding (!~)";
834 if (!(o->op_private & (OPpLVAL_INTRO|OPpOUR_INTRO)) &&
835 (!o->op_sibling || o->op_sibling->op_type != OP_READLINE))
836 useless = "a variable";
841 if (cSVOPo->op_private & OPpCONST_STRICT)
842 no_bareword_allowed(o);
844 if (ckWARN(WARN_VOID)) {
845 useless = "a constant";
846 if (o->op_private & OPpCONST_ARYBASE)
848 /* don't warn on optimised away booleans, eg
849 * use constant Foo, 5; Foo || print; */
850 if (cSVOPo->op_private & OPpCONST_SHORTCIRCUIT)
852 /* the constants 0 and 1 are permitted as they are
853 conventionally used as dummies in constructs like
854 1 while some_condition_with_side_effects; */
855 else if (SvNIOK(sv) && (SvNV(sv) == 0.0 || SvNV(sv) == 1.0))
857 else if (SvPOK(sv)) {
858 /* perl4's way of mixing documentation and code
859 (before the invention of POD) was based on a
860 trick to mix nroff and perl code. The trick was
861 built upon these three nroff macros being used in
862 void context. The pink camel has the details in
863 the script wrapman near page 319. */
864 const char * const maybe_macro = SvPVX_const(sv);
865 if (strnEQ(maybe_macro, "di", 2) ||
866 strnEQ(maybe_macro, "ds", 2) ||
867 strnEQ(maybe_macro, "ig", 2))
872 op_null(o); /* don't execute or even remember it */
876 o->op_type = OP_PREINC; /* pre-increment is faster */
877 o->op_ppaddr = PL_ppaddr[OP_PREINC];
881 o->op_type = OP_PREDEC; /* pre-decrement is faster */
882 o->op_ppaddr = PL_ppaddr[OP_PREDEC];
886 o->op_type = OP_I_PREINC; /* pre-increment is faster */
887 o->op_ppaddr = PL_ppaddr[OP_I_PREINC];
891 o->op_type = OP_I_PREDEC; /* pre-decrement is faster */
892 o->op_ppaddr = PL_ppaddr[OP_I_PREDEC];
901 for (kid = cUNOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
906 if (o->op_flags & OPf_STACKED)
913 if (!(o->op_flags & OPf_KIDS))
924 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
931 /* all requires must return a boolean value */
932 o->op_flags &= ~OPf_WANT;
937 if ((kid = cLISTOPo->op_first) && kid->op_type == OP_PUSHRE) {
938 if (!kPMOP->op_pmreplroot)
939 deprecate_old("implicit split to @_");
943 if (useless && ckWARN(WARN_VOID))
944 Perl_warner(aTHX_ packWARN(WARN_VOID), "Useless use of %s in void context", useless);
949 Perl_listkids(pTHX_ OP *o)
951 if (o && o->op_flags & OPf_KIDS) {
953 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
960 Perl_list(pTHX_ OP *o)
965 /* assumes no premature commitment */
966 if (!o || (o->op_flags & OPf_WANT) || PL_error_count
967 || o->op_type == OP_RETURN)
972 if ((o->op_private & OPpTARGET_MY)
973 && (PL_opargs[o->op_type] & OA_TARGLEX))/* OPp share the meaning */
975 return o; /* As if inside SASSIGN */
978 o->op_flags = (o->op_flags & ~OPf_WANT) | OPf_WANT_LIST;
980 switch (o->op_type) {
983 list(cBINOPo->op_first);
988 for (kid = cUNOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
996 if (!(o->op_flags & OPf_KIDS))
998 if (!o->op_next && cUNOPo->op_first->op_type == OP_FLOP) {
999 list(cBINOPo->op_first);
1000 return gen_constant_list(o);
1007 kid = cLISTOPo->op_first;
1009 while ((kid = kid->op_sibling)) {
1010 if (kid->op_sibling)
1015 PL_curcop = &PL_compiling;
1019 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling) {
1020 if (kid->op_sibling)
1025 PL_curcop = &PL_compiling;
1028 /* all requires must return a boolean value */
1029 o->op_flags &= ~OPf_WANT;
1036 Perl_scalarseq(pTHX_ OP *o)
1040 const OPCODE type = o->op_type;
1042 if (type == OP_LINESEQ || type == OP_SCOPE ||
1043 type == OP_LEAVE || type == OP_LEAVETRY)
1046 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling) {
1047 if (kid->op_sibling) {
1051 PL_curcop = &PL_compiling;
1053 o->op_flags &= ~OPf_PARENS;
1054 if (PL_hints & HINT_BLOCK_SCOPE)
1055 o->op_flags |= OPf_PARENS;
1058 o = newOP(OP_STUB, 0);
1063 S_modkids(pTHX_ OP *o, I32 type)
1065 if (o && o->op_flags & OPf_KIDS) {
1067 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
1073 /* Propagate lvalue ("modifiable") context to an op and its children.
1074 * 'type' represents the context type, roughly based on the type of op that
1075 * would do the modifying, although local() is represented by OP_NULL.
1076 * It's responsible for detecting things that can't be modified, flag
1077 * things that need to behave specially in an lvalue context (e.g., "$$x = 5"
1078 * might have to vivify a reference in $x), and so on.
1080 * For example, "$a+1 = 2" would cause mod() to be called with o being
1081 * OP_ADD and type being OP_SASSIGN, and would output an error.
1085 Perl_mod(pTHX_ OP *o, I32 type)
1089 /* -1 = error on localize, 0 = ignore localize, 1 = ok to localize */
1092 if (!o || PL_error_count)
1095 if ((o->op_private & OPpTARGET_MY)
1096 && (PL_opargs[o->op_type] & OA_TARGLEX))/* OPp share the meaning */
1101 switch (o->op_type) {
1107 if (!(o->op_private & OPpCONST_ARYBASE))
1110 if (PL_eval_start && PL_eval_start->op_type == OP_CONST) {
1111 CopARYBASE_set(&PL_compiling,
1112 (I32)SvIV(cSVOPx(PL_eval_start)->op_sv));
1116 SAVECOPARYBASE(&PL_compiling);
1117 CopARYBASE_set(&PL_compiling, 0);
1119 else if (type == OP_REFGEN)
1122 Perl_croak(aTHX_ "That use of $[ is unsupported");
1125 if (o->op_flags & OPf_PARENS || PL_madskills)
1129 if ((type == OP_UNDEF || type == OP_REFGEN) &&
1130 !(o->op_flags & OPf_STACKED)) {
1131 o->op_type = OP_RV2CV; /* entersub => rv2cv */
1132 /* The default is to set op_private to the number of children,
1133 which for a UNOP such as RV2CV is always 1. And w're using
1134 the bit for a flag in RV2CV, so we need it clear. */
1135 o->op_private &= ~1;
1136 o->op_ppaddr = PL_ppaddr[OP_RV2CV];
1137 assert(cUNOPo->op_first->op_type == OP_NULL);
1138 op_null(((LISTOP*)cUNOPo->op_first)->op_first);/* disable pushmark */
1141 else if (o->op_private & OPpENTERSUB_NOMOD)
1143 else { /* lvalue subroutine call */
1144 o->op_private |= OPpLVAL_INTRO;
1145 PL_modcount = RETURN_UNLIMITED_NUMBER;
1146 if (type == OP_GREPSTART || type == OP_ENTERSUB || type == OP_REFGEN) {
1147 /* Backward compatibility mode: */
1148 o->op_private |= OPpENTERSUB_INARGS;
1151 else { /* Compile-time error message: */
1152 OP *kid = cUNOPo->op_first;
1156 if (kid->op_type != OP_PUSHMARK) {
1157 if (kid->op_type != OP_NULL || kid->op_targ != OP_LIST)
1159 "panic: unexpected lvalue entersub "
1160 "args: type/targ %ld:%"UVuf,
1161 (long)kid->op_type, (UV)kid->op_targ);
1162 kid = kLISTOP->op_first;
1164 while (kid->op_sibling)
1165 kid = kid->op_sibling;
1166 if (!(kid->op_type == OP_NULL && kid->op_targ == OP_RV2CV)) {
1168 if (kid->op_type == OP_METHOD_NAMED
1169 || kid->op_type == OP_METHOD)
1173 NewOp(1101, newop, 1, UNOP);
1174 newop->op_type = OP_RV2CV;
1175 newop->op_ppaddr = PL_ppaddr[OP_RV2CV];
1176 newop->op_first = NULL;
1177 newop->op_next = (OP*)newop;
1178 kid->op_sibling = (OP*)newop;
1179 newop->op_private |= OPpLVAL_INTRO;
1180 newop->op_private &= ~1;
1184 if (kid->op_type != OP_RV2CV)
1186 "panic: unexpected lvalue entersub "
1187 "entry via type/targ %ld:%"UVuf,
1188 (long)kid->op_type, (UV)kid->op_targ);
1189 kid->op_private |= OPpLVAL_INTRO;
1190 break; /* Postpone until runtime */
1194 kid = kUNOP->op_first;
1195 if (kid->op_type == OP_NULL && kid->op_targ == OP_RV2SV)
1196 kid = kUNOP->op_first;
1197 if (kid->op_type == OP_NULL)
1199 "Unexpected constant lvalue entersub "
1200 "entry via type/targ %ld:%"UVuf,
1201 (long)kid->op_type, (UV)kid->op_targ);
1202 if (kid->op_type != OP_GV) {
1203 /* Restore RV2CV to check lvalueness */
1205 if (kid->op_next && kid->op_next != kid) { /* Happens? */
1206 okid->op_next = kid->op_next;
1207 kid->op_next = okid;
1210 okid->op_next = NULL;
1211 okid->op_type = OP_RV2CV;
1213 okid->op_ppaddr = PL_ppaddr[OP_RV2CV];
1214 okid->op_private |= OPpLVAL_INTRO;
1215 okid->op_private &= ~1;
1219 cv = GvCV(kGVOP_gv);
1229 /* grep, foreach, subcalls, refgen */
1230 if (type == OP_GREPSTART || type == OP_ENTERSUB || type == OP_REFGEN)
1232 yyerror(Perl_form(aTHX_ "Can't modify %s in %s",
1233 (o->op_type == OP_NULL && (o->op_flags & OPf_SPECIAL)
1235 : (o->op_type == OP_ENTERSUB
1236 ? "non-lvalue subroutine call"
1238 type ? PL_op_desc[type] : "local"));
1252 case OP_RIGHT_SHIFT:
1261 if (!(o->op_flags & OPf_STACKED))
1268 for (kid = cUNOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
1274 if (type == OP_REFGEN && o->op_flags & OPf_PARENS) {
1275 PL_modcount = RETURN_UNLIMITED_NUMBER;
1276 return o; /* Treat \(@foo) like ordinary list. */
1280 if (scalar_mod_type(o, type))
1282 ref(cUNOPo->op_first, o->op_type);
1286 if (type == OP_LEAVESUBLV)
1287 o->op_private |= OPpMAYBE_LVSUB;
1293 PL_modcount = RETURN_UNLIMITED_NUMBER;
1296 ref(cUNOPo->op_first, o->op_type);
1301 PL_hints |= HINT_BLOCK_SCOPE;
1316 PL_modcount = RETURN_UNLIMITED_NUMBER;
1317 if (type == OP_REFGEN && o->op_flags & OPf_PARENS)
1318 return o; /* Treat \(@foo) like ordinary list. */
1319 if (scalar_mod_type(o, type))
1321 if (type == OP_LEAVESUBLV)
1322 o->op_private |= OPpMAYBE_LVSUB;
1326 if (!type) /* local() */
1327 Perl_croak(aTHX_ "Can't localize lexical variable %s",
1328 PAD_COMPNAME_PV(o->op_targ));
1336 if (type != OP_SASSIGN)
1340 if (o->op_private == 4) /* don't allow 4 arg substr as lvalue */
1345 if (type == OP_LEAVESUBLV)
1346 o->op_private |= OPpMAYBE_LVSUB;
1348 pad_free(o->op_targ);
1349 o->op_targ = pad_alloc(o->op_type, SVs_PADMY);
1350 assert(SvTYPE(PAD_SV(o->op_targ)) == SVt_NULL);
1351 if (o->op_flags & OPf_KIDS)
1352 mod(cBINOPo->op_first->op_sibling, type);
1357 ref(cBINOPo->op_first, o->op_type);
1358 if (type == OP_ENTERSUB &&
1359 !(o->op_private & (OPpLVAL_INTRO | OPpDEREF)))
1360 o->op_private |= OPpLVAL_DEFER;
1361 if (type == OP_LEAVESUBLV)
1362 o->op_private |= OPpMAYBE_LVSUB;
1372 if (o->op_flags & OPf_KIDS)
1373 mod(cLISTOPo->op_last, type);
1378 if (o->op_flags & OPf_SPECIAL) /* do BLOCK */
1380 else if (!(o->op_flags & OPf_KIDS))
1382 if (o->op_targ != OP_LIST) {
1383 mod(cBINOPo->op_first, type);
1389 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
1394 if (type != OP_LEAVESUBLV)
1396 break; /* mod()ing was handled by ck_return() */
1399 /* [20011101.069] File test operators interpret OPf_REF to mean that
1400 their argument is a filehandle; thus \stat(".") should not set
1402 if (type == OP_REFGEN &&
1403 PL_check[o->op_type] == MEMBER_TO_FPTR(Perl_ck_ftst))
1406 if (type != OP_LEAVESUBLV)
1407 o->op_flags |= OPf_MOD;
1409 if (type == OP_AASSIGN || type == OP_SASSIGN)
1410 o->op_flags |= OPf_SPECIAL|OPf_REF;
1411 else if (!type) { /* local() */
1414 o->op_private |= OPpLVAL_INTRO;
1415 o->op_flags &= ~OPf_SPECIAL;
1416 PL_hints |= HINT_BLOCK_SCOPE;
1421 if (ckWARN(WARN_SYNTAX)) {
1422 Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
1423 "Useless localization of %s", OP_DESC(o));
1427 else if (type != OP_GREPSTART && type != OP_ENTERSUB
1428 && type != OP_LEAVESUBLV)
1429 o->op_flags |= OPf_REF;
1434 S_scalar_mod_type(const OP *o, I32 type)
1438 if (o->op_type == OP_RV2GV)
1462 case OP_RIGHT_SHIFT:
1481 S_is_handle_constructor(const OP *o, I32 numargs)
1483 switch (o->op_type) {
1491 case OP_SELECT: /* XXX c.f. SelectSaver.pm */
1504 Perl_refkids(pTHX_ OP *o, I32 type)
1506 if (o && o->op_flags & OPf_KIDS) {
1508 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
1515 Perl_doref(pTHX_ OP *o, I32 type, bool set_op_ref)
1520 if (!o || PL_error_count)
1523 switch (o->op_type) {
1525 if ((type == OP_EXISTS || type == OP_DEFINED || type == OP_LOCK) &&
1526 !(o->op_flags & OPf_STACKED)) {
1527 o->op_type = OP_RV2CV; /* entersub => rv2cv */
1528 o->op_ppaddr = PL_ppaddr[OP_RV2CV];
1529 assert(cUNOPo->op_first->op_type == OP_NULL);
1530 op_null(((LISTOP*)cUNOPo->op_first)->op_first); /* disable pushmark */
1531 o->op_flags |= OPf_SPECIAL;
1532 o->op_private &= ~1;
1537 for (kid = cUNOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
1538 doref(kid, type, set_op_ref);
1541 if (type == OP_DEFINED)
1542 o->op_flags |= OPf_SPECIAL; /* don't create GV */
1543 doref(cUNOPo->op_first, o->op_type, set_op_ref);
1546 if (type == OP_RV2SV || type == OP_RV2AV || type == OP_RV2HV) {
1547 o->op_private |= (type == OP_RV2AV ? OPpDEREF_AV
1548 : type == OP_RV2HV ? OPpDEREF_HV
1550 o->op_flags |= OPf_MOD;
1557 o->op_flags |= OPf_REF;
1560 if (type == OP_DEFINED)
1561 o->op_flags |= OPf_SPECIAL; /* don't create GV */
1562 doref(cUNOPo->op_first, o->op_type, set_op_ref);
1568 o->op_flags |= OPf_REF;
1573 if (!(o->op_flags & OPf_KIDS))
1575 doref(cBINOPo->op_first, type, set_op_ref);
1579 doref(cBINOPo->op_first, o->op_type, set_op_ref);
1580 if (type == OP_RV2SV || type == OP_RV2AV || type == OP_RV2HV) {
1581 o->op_private |= (type == OP_RV2AV ? OPpDEREF_AV
1582 : type == OP_RV2HV ? OPpDEREF_HV
1584 o->op_flags |= OPf_MOD;
1594 if (!(o->op_flags & OPf_KIDS))
1596 doref(cLISTOPo->op_last, type, set_op_ref);
1606 S_dup_attrlist(pTHX_ OP *o)
1611 /* An attrlist is either a simple OP_CONST or an OP_LIST with kids,
1612 * where the first kid is OP_PUSHMARK and the remaining ones
1613 * are OP_CONST. We need to push the OP_CONST values.
1615 if (o->op_type == OP_CONST)
1616 rop = newSVOP(OP_CONST, o->op_flags, SvREFCNT_inc_NN(cSVOPo->op_sv));
1618 else if (o->op_type == OP_NULL)
1622 assert((o->op_type == OP_LIST) && (o->op_flags & OPf_KIDS));
1624 for (o = cLISTOPo->op_first; o; o=o->op_sibling) {
1625 if (o->op_type == OP_CONST)
1626 rop = append_elem(OP_LIST, rop,
1627 newSVOP(OP_CONST, o->op_flags,
1628 SvREFCNT_inc_NN(cSVOPo->op_sv)));
1635 S_apply_attrs(pTHX_ HV *stash, SV *target, OP *attrs, bool for_my)
1640 /* fake up C<use attributes $pkg,$rv,@attrs> */
1641 ENTER; /* need to protect against side-effects of 'use' */
1643 stashsv = stash ? newSVhek(HvNAME_HEK(stash)) : &PL_sv_no;
1645 #define ATTRSMODULE "attributes"
1646 #define ATTRSMODULE_PM "attributes.pm"
1649 /* Don't force the C<use> if we don't need it. */
1650 SV * const * const svp = hv_fetchs(GvHVn(PL_incgv), ATTRSMODULE_PM, FALSE);
1651 if (svp && *svp != &PL_sv_undef)
1652 NOOP; /* already in %INC */
1654 Perl_load_module(aTHX_ PERL_LOADMOD_NOIMPORT,
1655 newSVpvs(ATTRSMODULE), NULL);
1658 Perl_load_module(aTHX_ PERL_LOADMOD_IMPORT_OPS,
1659 newSVpvs(ATTRSMODULE),
1661 prepend_elem(OP_LIST,
1662 newSVOP(OP_CONST, 0, stashsv),
1663 prepend_elem(OP_LIST,
1664 newSVOP(OP_CONST, 0,
1666 dup_attrlist(attrs))));
1672 S_apply_attrs_my(pTHX_ HV *stash, OP *target, OP *attrs, OP **imopsp)
1675 OP *pack, *imop, *arg;
1681 assert(target->op_type == OP_PADSV ||
1682 target->op_type == OP_PADHV ||
1683 target->op_type == OP_PADAV);
1685 /* Ensure that attributes.pm is loaded. */
1686 apply_attrs(stash, PAD_SV(target->op_targ), attrs, TRUE);
1688 /* Need package name for method call. */
1689 pack = newSVOP(OP_CONST, 0, newSVpvs(ATTRSMODULE));
1691 /* Build up the real arg-list. */
1692 stashsv = stash ? newSVhek(HvNAME_HEK(stash)) : &PL_sv_no;
1694 arg = newOP(OP_PADSV, 0);
1695 arg->op_targ = target->op_targ;
1696 arg = prepend_elem(OP_LIST,
1697 newSVOP(OP_CONST, 0, stashsv),
1698 prepend_elem(OP_LIST,
1699 newUNOP(OP_REFGEN, 0,
1700 mod(arg, OP_REFGEN)),
1701 dup_attrlist(attrs)));
1703 /* Fake up a method call to import */
1704 meth = newSVpvs_share("import");
1705 imop = convert(OP_ENTERSUB, OPf_STACKED|OPf_SPECIAL|OPf_WANT_VOID,
1706 append_elem(OP_LIST,
1707 prepend_elem(OP_LIST, pack, list(arg)),
1708 newSVOP(OP_METHOD_NAMED, 0, meth)));
1709 imop->op_private |= OPpENTERSUB_NOMOD;
1711 /* Combine the ops. */
1712 *imopsp = append_elem(OP_LIST, *imopsp, imop);
1716 =notfor apidoc apply_attrs_string
1718 Attempts to apply a list of attributes specified by the C<attrstr> and
1719 C<len> arguments to the subroutine identified by the C<cv> argument which
1720 is expected to be associated with the package identified by the C<stashpv>
1721 argument (see L<attributes>). It gets this wrong, though, in that it
1722 does not correctly identify the boundaries of the individual attribute
1723 specifications within C<attrstr>. This is not really intended for the
1724 public API, but has to be listed here for systems such as AIX which
1725 need an explicit export list for symbols. (It's called from XS code
1726 in support of the C<ATTRS:> keyword from F<xsubpp>.) Patches to fix it
1727 to respect attribute syntax properly would be welcome.
1733 Perl_apply_attrs_string(pTHX_ const char *stashpv, CV *cv,
1734 const char *attrstr, STRLEN len)
1739 len = strlen(attrstr);
1743 for (; isSPACE(*attrstr) && len; --len, ++attrstr) ;
1745 const char * const sstr = attrstr;
1746 for (; !isSPACE(*attrstr) && len; --len, ++attrstr) ;
1747 attrs = append_elem(OP_LIST, attrs,
1748 newSVOP(OP_CONST, 0,
1749 newSVpvn(sstr, attrstr-sstr)));
1753 Perl_load_module(aTHX_ PERL_LOADMOD_IMPORT_OPS,
1754 newSVpvs(ATTRSMODULE),
1755 NULL, prepend_elem(OP_LIST,
1756 newSVOP(OP_CONST, 0, newSVpv(stashpv,0)),
1757 prepend_elem(OP_LIST,
1758 newSVOP(OP_CONST, 0,
1764 S_my_kid(pTHX_ OP *o, OP *attrs, OP **imopsp)
1769 if (!o || PL_error_count)
1773 if (PL_madskills && type == OP_NULL && o->op_flags & OPf_KIDS) {
1774 (void)my_kid(cUNOPo->op_first, attrs, imopsp);
1778 if (type == OP_LIST) {
1780 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
1781 my_kid(kid, attrs, imopsp);
1782 } else if (type == OP_UNDEF
1788 } else if (type == OP_RV2SV || /* "our" declaration */
1790 type == OP_RV2HV) { /* XXX does this let anything illegal in? */
1791 if (cUNOPo->op_first->op_type != OP_GV) { /* MJD 20011224 */
1792 yyerror(Perl_form(aTHX_ "Can't declare %s in \"%s\"",
1794 PL_in_my == KEY_our ? "our" : PL_in_my == KEY_state ? "state" : "my"));
1796 GV * const gv = cGVOPx_gv(cUNOPo->op_first);
1798 PL_in_my_stash = NULL;
1799 apply_attrs(GvSTASH(gv),
1800 (type == OP_RV2SV ? GvSV(gv) :
1801 type == OP_RV2AV ? (SV*)GvAV(gv) :
1802 type == OP_RV2HV ? (SV*)GvHV(gv) : (SV*)gv),
1805 o->op_private |= OPpOUR_INTRO;
1808 else if (type != OP_PADSV &&
1811 type != OP_PUSHMARK)
1813 yyerror(Perl_form(aTHX_ "Can't declare %s in \"%s\"",
1815 PL_in_my == KEY_our ? "our" : PL_in_my == KEY_state ? "state" : "my"));
1818 else if (attrs && type != OP_PUSHMARK) {
1822 PL_in_my_stash = NULL;
1824 /* check for C<my Dog $spot> when deciding package */
1825 stash = PAD_COMPNAME_TYPE(o->op_targ);
1827 stash = PL_curstash;
1828 apply_attrs_my(stash, o, attrs, imopsp);
1830 o->op_flags |= OPf_MOD;
1831 o->op_private |= OPpLVAL_INTRO;
1832 if (PL_in_my == KEY_state)
1833 o->op_private |= OPpPAD_STATE;
1838 Perl_my_attrs(pTHX_ OP *o, OP *attrs)
1842 int maybe_scalar = 0;
1844 /* [perl #17376]: this appears to be premature, and results in code such as
1845 C< our(%x); > executing in list mode rather than void mode */
1847 if (o->op_flags & OPf_PARENS)
1857 o = my_kid(o, attrs, &rops);
1859 if (maybe_scalar && o->op_type == OP_PADSV) {
1860 o = scalar(append_list(OP_LIST, (LISTOP*)rops, (LISTOP*)o));
1861 o->op_private |= OPpLVAL_INTRO;
1864 o = append_list(OP_LIST, (LISTOP*)o, (LISTOP*)rops);
1867 PL_in_my_stash = NULL;
1872 Perl_my(pTHX_ OP *o)
1874 return my_attrs(o, NULL);
1878 Perl_sawparens(pTHX_ OP *o)
1880 PERL_UNUSED_CONTEXT;
1882 o->op_flags |= OPf_PARENS;
1887 Perl_bind_match(pTHX_ I32 type, OP *left, OP *right)
1891 const OPCODE ltype = left->op_type;
1892 const OPCODE rtype = right->op_type;
1894 if ( (ltype == OP_RV2AV || ltype == OP_RV2HV || ltype == OP_PADAV
1895 || ltype == OP_PADHV) && ckWARN(WARN_MISC))
1897 const char * const desc
1898 = PL_op_desc[(rtype == OP_SUBST || rtype == OP_TRANS)
1899 ? (int)rtype : OP_MATCH];
1900 const char * const sample = ((ltype == OP_RV2AV || ltype == OP_PADAV)
1901 ? "@array" : "%hash");
1902 Perl_warner(aTHX_ packWARN(WARN_MISC),
1903 "Applying %s to %s will act on scalar(%s)",
1904 desc, sample, sample);
1907 if (rtype == OP_CONST &&
1908 cSVOPx(right)->op_private & OPpCONST_BARE &&
1909 cSVOPx(right)->op_private & OPpCONST_STRICT)
1911 no_bareword_allowed(right);
1914 ismatchop = rtype == OP_MATCH ||
1915 rtype == OP_SUBST ||
1917 if (ismatchop && right->op_private & OPpTARGET_MY) {
1919 right->op_private &= ~OPpTARGET_MY;
1921 if (!(right->op_flags & OPf_STACKED) && ismatchop) {
1924 right->op_flags |= OPf_STACKED;
1925 if (rtype != OP_MATCH &&
1926 ! (rtype == OP_TRANS &&
1927 right->op_private & OPpTRANS_IDENTICAL))
1928 newleft = mod(left, rtype);
1931 if (right->op_type == OP_TRANS)
1932 o = newBINOP(OP_NULL, OPf_STACKED, scalar(newleft), right);
1934 o = prepend_elem(rtype, scalar(newleft), right);
1936 return newUNOP(OP_NOT, 0, scalar(o));
1940 return bind_match(type, left,
1941 pmruntime(newPMOP(OP_MATCH, 0), right, 0));
1945 Perl_invert(pTHX_ OP *o)
1949 return newUNOP(OP_NOT, OPf_SPECIAL, scalar(o));
1953 Perl_scope(pTHX_ OP *o)
1957 if (o->op_flags & OPf_PARENS || PERLDB_NOOPT || PL_tainting) {
1958 o = prepend_elem(OP_LINESEQ, newOP(OP_ENTER, 0), o);
1959 o->op_type = OP_LEAVE;
1960 o->op_ppaddr = PL_ppaddr[OP_LEAVE];
1962 else if (o->op_type == OP_LINESEQ) {
1964 o->op_type = OP_SCOPE;
1965 o->op_ppaddr = PL_ppaddr[OP_SCOPE];
1966 kid = ((LISTOP*)o)->op_first;
1967 if (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) {
1970 /* The following deals with things like 'do {1 for 1}' */
1971 kid = kid->op_sibling;
1973 (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE))
1978 o = newLISTOP(OP_SCOPE, 0, o, NULL);
1984 Perl_block_start(pTHX_ int full)
1987 const int retval = PL_savestack_ix;
1988 pad_block_start(full);
1990 PL_hints &= ~HINT_BLOCK_SCOPE;
1991 SAVECOMPILEWARNINGS();
1992 PL_compiling.cop_warnings = DUP_WARNINGS(PL_compiling.cop_warnings);
1997 Perl_block_end(pTHX_ I32 floor, OP *seq)
2000 const int needblockscope = PL_hints & HINT_BLOCK_SCOPE;
2001 OP* const retval = scalarseq(seq);
2003 CopHINTS_set(&PL_compiling, PL_hints);
2005 PL_hints |= HINT_BLOCK_SCOPE; /* propagate out */
2014 const PADOFFSET offset = pad_findmy("$_");
2015 if (offset == NOT_IN_PAD || PAD_COMPNAME_FLAGS_isOUR(offset)) {
2016 return newSVREF(newGVOP(OP_GV, 0, PL_defgv));
2019 OP * const o = newOP(OP_PADSV, 0);
2020 o->op_targ = offset;
2026 Perl_newPROG(pTHX_ OP *o)
2032 PL_eval_root = newUNOP(OP_LEAVEEVAL,
2033 ((PL_in_eval & EVAL_KEEPERR)
2034 ? OPf_SPECIAL : 0), o);
2035 PL_eval_start = linklist(PL_eval_root);
2036 PL_eval_root->op_private |= OPpREFCOUNTED;
2037 OpREFCNT_set(PL_eval_root, 1);
2038 PL_eval_root->op_next = 0;
2039 CALL_PEEP(PL_eval_start);
2042 if (o->op_type == OP_STUB) {
2043 PL_comppad_name = 0;
2045 S_op_destroy(aTHX_ o);
2048 PL_main_root = scope(sawparens(scalarvoid(o)));
2049 PL_curcop = &PL_compiling;
2050 PL_main_start = LINKLIST(PL_main_root);
2051 PL_main_root->op_private |= OPpREFCOUNTED;
2052 OpREFCNT_set(PL_main_root, 1);
2053 PL_main_root->op_next = 0;
2054 CALL_PEEP(PL_main_start);
2057 /* Register with debugger */
2059 CV * const cv = get_cv("DB::postponed", FALSE);
2063 XPUSHs((SV*)CopFILEGV(&PL_compiling));
2065 call_sv((SV*)cv, G_DISCARD);
2072 Perl_localize(pTHX_ OP *o, I32 lex)
2075 if (o->op_flags & OPf_PARENS)
2076 /* [perl #17376]: this appears to be premature, and results in code such as
2077 C< our(%x); > executing in list mode rather than void mode */
2084 if ( PL_bufptr > PL_oldbufptr && PL_bufptr[-1] == ','
2085 && ckWARN(WARN_PARENTHESIS))
2087 char *s = PL_bufptr;
2090 /* some heuristics to detect a potential error */
2091 while (*s && (strchr(", \t\n", *s)))
2095 if (*s && strchr("@$%*", *s) && *++s
2096 && (isALNUM(*s) || UTF8_IS_CONTINUED(*s))) {
2099 while (*s && (isALNUM(*s) || UTF8_IS_CONTINUED(*s)))
2101 while (*s && (strchr(", \t\n", *s)))
2107 if (sigil && (*s == ';' || *s == '=')) {
2108 Perl_warner(aTHX_ packWARN(WARN_PARENTHESIS),
2109 "Parentheses missing around \"%s\" list",
2110 lex ? (PL_in_my == KEY_our ? "our" : PL_in_my == KEY_state ? "state" : "my")
2118 o = mod(o, OP_NULL); /* a bit kludgey */
2120 PL_in_my_stash = NULL;
2125 Perl_jmaybe(pTHX_ OP *o)
2127 if (o->op_type == OP_LIST) {
2129 = newSVREF(newGVOP(OP_GV, 0, gv_fetchpvs(";", GV_ADD|GV_NOTQUAL, SVt_PV)));
2130 o = convert(OP_JOIN, 0, prepend_elem(OP_LIST, o2, o));
2136 Perl_fold_constants(pTHX_ register OP *o)
2141 VOL I32 type = o->op_type;
2146 SV * const oldwarnhook = PL_warnhook;
2147 SV * const olddiehook = PL_diehook;
2150 if (PL_opargs[type] & OA_RETSCALAR)
2152 if (PL_opargs[type] & OA_TARGET && !o->op_targ)
2153 o->op_targ = pad_alloc(type, SVs_PADTMP);
2155 /* integerize op, unless it happens to be C<-foo>.
2156 * XXX should pp_i_negate() do magic string negation instead? */
2157 if ((PL_opargs[type] & OA_OTHERINT) && (PL_hints & HINT_INTEGER)
2158 && !(type == OP_NEGATE && cUNOPo->op_first->op_type == OP_CONST
2159 && (cUNOPo->op_first->op_private & OPpCONST_BARE)))
2161 o->op_ppaddr = PL_ppaddr[type = ++(o->op_type)];
2164 if (!(PL_opargs[type] & OA_FOLDCONST))
2169 /* XXX might want a ck_negate() for this */
2170 cUNOPo->op_first->op_private &= ~OPpCONST_STRICT;
2181 /* XXX what about the numeric ops? */
2182 if (PL_hints & HINT_LOCALE)
2187 goto nope; /* Don't try to run w/ errors */
2189 for (curop = LINKLIST(o); curop != o; curop = LINKLIST(curop)) {
2190 const OPCODE type = curop->op_type;
2191 if ((type != OP_CONST || (curop->op_private & OPpCONST_BARE)) &&
2193 type != OP_SCALAR &&
2195 type != OP_PUSHMARK)
2201 curop = LINKLIST(o);
2202 old_next = o->op_next;
2206 oldscope = PL_scopestack_ix;
2207 create_eval_scope(G_FAKINGEVAL);
2209 PL_warnhook = PERL_WARNHOOK_FATAL;
2216 sv = *(PL_stack_sp--);
2217 if (o->op_targ && sv == PAD_SV(o->op_targ)) /* grab pad temp? */
2218 pad_swipe(o->op_targ, FALSE);
2219 else if (SvTEMP(sv)) { /* grab mortal temp? */
2220 SvREFCNT_inc_simple_void(sv);
2225 /* Something tried to die. Abandon constant folding. */
2226 /* Pretend the error never happened. */
2227 sv_setpvn(ERRSV,"",0);
2228 o->op_next = old_next;
2232 /* Don't expect 1 (setjmp failed) or 2 (something called my_exit) */
2233 PL_warnhook = oldwarnhook;
2234 PL_diehook = olddiehook;
2235 /* XXX note that this croak may fail as we've already blown away
2236 * the stack - eg any nested evals */
2237 Perl_croak(aTHX_ "panic: fold_constants JMPENV_PUSH returned %d", ret);
2240 PL_warnhook = oldwarnhook;
2241 PL_diehook = olddiehook;
2243 if (PL_scopestack_ix > oldscope)
2244 delete_eval_scope();
2253 if (type == OP_RV2GV)
2254 newop = newGVOP(OP_GV, 0, (GV*)sv);
2256 newop = newSVOP(OP_CONST, 0, (SV*)sv);
2257 op_getmad(o,newop,'f');
2265 Perl_gen_constant_list(pTHX_ register OP *o)
2269 const I32 oldtmps_floor = PL_tmps_floor;
2273 return o; /* Don't attempt to run with errors */
2275 PL_op = curop = LINKLIST(o);
2281 assert (!(curop->op_flags & OPf_SPECIAL));
2282 assert(curop->op_type == OP_RANGE);
2284 PL_tmps_floor = oldtmps_floor;
2286 o->op_type = OP_RV2AV;
2287 o->op_ppaddr = PL_ppaddr[OP_RV2AV];
2288 o->op_flags &= ~OPf_REF; /* treat \(1..2) like an ordinary list */
2289 o->op_flags |= OPf_PARENS; /* and flatten \(1..2,3) */
2290 o->op_opt = 0; /* needs to be revisited in peep() */
2291 curop = ((UNOP*)o)->op_first;
2292 ((UNOP*)o)->op_first = newSVOP(OP_CONST, 0, SvREFCNT_inc_NN(*PL_stack_sp--));
2294 op_getmad(curop,o,'O');
2303 Perl_convert(pTHX_ I32 type, I32 flags, OP *o)
2306 if (!o || o->op_type != OP_LIST)
2307 o = newLISTOP(OP_LIST, 0, o, NULL);
2309 o->op_flags &= ~OPf_WANT;
2311 if (!(PL_opargs[type] & OA_MARK))
2312 op_null(cLISTOPo->op_first);
2314 o->op_type = (OPCODE)type;
2315 o->op_ppaddr = PL_ppaddr[type];
2316 o->op_flags |= flags;
2318 o = CHECKOP(type, o);
2319 if (o->op_type != (unsigned)type)
2322 return fold_constants(o);
2325 /* List constructors */
2328 Perl_append_elem(pTHX_ I32 type, OP *first, OP *last)
2336 if (first->op_type != (unsigned)type
2337 || (type == OP_LIST && (first->op_flags & OPf_PARENS)))
2339 return newLISTOP(type, 0, first, last);
2342 if (first->op_flags & OPf_KIDS)
2343 ((LISTOP*)first)->op_last->op_sibling = last;
2345 first->op_flags |= OPf_KIDS;
2346 ((LISTOP*)first)->op_first = last;
2348 ((LISTOP*)first)->op_last = last;
2353 Perl_append_list(pTHX_ I32 type, LISTOP *first, LISTOP *last)
2361 if (first->op_type != (unsigned)type)
2362 return prepend_elem(type, (OP*)first, (OP*)last);
2364 if (last->op_type != (unsigned)type)
2365 return append_elem(type, (OP*)first, (OP*)last);
2367 first->op_last->op_sibling = last->op_first;
2368 first->op_last = last->op_last;
2369 first->op_flags |= (last->op_flags & OPf_KIDS);
2372 if (last->op_first && first->op_madprop) {
2373 MADPROP *mp = last->op_first->op_madprop;
2375 while (mp->mad_next)
2377 mp->mad_next = first->op_madprop;
2380 last->op_first->op_madprop = first->op_madprop;
2383 first->op_madprop = last->op_madprop;
2384 last->op_madprop = 0;
2387 S_op_destroy(aTHX_ (OP*)last);
2393 Perl_prepend_elem(pTHX_ I32 type, OP *first, OP *last)
2401 if (last->op_type == (unsigned)type) {
2402 if (type == OP_LIST) { /* already a PUSHMARK there */
2403 first->op_sibling = ((LISTOP*)last)->op_first->op_sibling;
2404 ((LISTOP*)last)->op_first->op_sibling = first;
2405 if (!(first->op_flags & OPf_PARENS))
2406 last->op_flags &= ~OPf_PARENS;
2409 if (!(last->op_flags & OPf_KIDS)) {
2410 ((LISTOP*)last)->op_last = first;
2411 last->op_flags |= OPf_KIDS;
2413 first->op_sibling = ((LISTOP*)last)->op_first;
2414 ((LISTOP*)last)->op_first = first;
2416 last->op_flags |= OPf_KIDS;
2420 return newLISTOP(type, 0, first, last);
2428 Perl_newTOKEN(pTHX_ I32 optype, YYSTYPE lval, MADPROP* madprop)
2431 Newxz(tk, 1, TOKEN);
2432 tk->tk_type = (OPCODE)optype;
2433 tk->tk_type = 12345;
2435 tk->tk_mad = madprop;
2440 Perl_token_free(pTHX_ TOKEN* tk)
2442 if (tk->tk_type != 12345)
2444 mad_free(tk->tk_mad);
2449 Perl_token_getmad(pTHX_ TOKEN* tk, OP* o, char slot)
2453 if (tk->tk_type != 12345) {
2454 Perl_warner(aTHX_ packWARN(WARN_MISC),
2455 "Invalid TOKEN object ignored");
2462 /* faked up qw list? */
2464 tm->mad_type == MAD_SV &&
2465 SvPVX((SV*)tm->mad_val)[0] == 'q')
2472 /* pretend constant fold didn't happen? */
2473 if (mp->mad_key == 'f' &&
2474 (o->op_type == OP_CONST ||
2475 o->op_type == OP_GV) )
2477 token_getmad(tk,(OP*)mp->mad_val,slot);
2491 if (mp->mad_key == 'X')
2492 mp->mad_key = slot; /* just change the first one */
2502 Perl_op_getmad_weak(pTHX_ OP* from, OP* o, char slot)
2511 /* pretend constant fold didn't happen? */
2512 if (mp->mad_key == 'f' &&
2513 (o->op_type == OP_CONST ||
2514 o->op_type == OP_GV) )
2516 op_getmad(from,(OP*)mp->mad_val,slot);
2523 mp->mad_next = newMADPROP(slot,MAD_OP,from,0);
2526 o->op_madprop = newMADPROP(slot,MAD_OP,from,0);
2532 Perl_op_getmad(pTHX_ OP* from, OP* o, char slot)
2541 /* pretend constant fold didn't happen? */
2542 if (mp->mad_key == 'f' &&
2543 (o->op_type == OP_CONST ||
2544 o->op_type == OP_GV) )
2546 op_getmad(from,(OP*)mp->mad_val,slot);
2553 mp->mad_next = newMADPROP(slot,MAD_OP,from,1);
2556 o->op_madprop = newMADPROP(slot,MAD_OP,from,1);
2560 PerlIO_printf(PerlIO_stderr(),
2561 "DESTROYING op = %0"UVxf"\n", PTR2UV(from));
2567 Perl_prepend_madprops(pTHX_ MADPROP* mp, OP* o, char slot)
2585 Perl_append_madprops(pTHX_ MADPROP* tm, OP* o, char slot)
2589 addmad(tm, &(o->op_madprop), slot);
2593 Perl_addmad(pTHX_ MADPROP* tm, MADPROP** root, char slot)
2614 Perl_newMADsv(pTHX_ char key, SV* sv)
2616 return newMADPROP(key, MAD_SV, sv, 0);
2620 Perl_newMADPROP(pTHX_ char key, char type, void* val, I32 vlen)
2623 Newxz(mp, 1, MADPROP);
2626 mp->mad_vlen = vlen;
2627 mp->mad_type = type;
2629 /* PerlIO_printf(PerlIO_stderr(), "NEW mp = %0x\n", mp); */
2634 Perl_mad_free(pTHX_ MADPROP* mp)
2636 /* PerlIO_printf(PerlIO_stderr(), "FREE mp = %0x\n", mp); */
2640 mad_free(mp->mad_next);
2641 /* if (PL_lex_state != LEX_NOTPARSING && mp->mad_vlen)
2642 PerlIO_printf(PerlIO_stderr(), "DESTROYING '%c'=<%s>\n", mp->mad_key & 255, mp->mad_val); */
2643 switch (mp->mad_type) {
2647 Safefree((char*)mp->mad_val);
2650 if (mp->mad_vlen) /* vlen holds "strong/weak" boolean */
2651 op_free((OP*)mp->mad_val);
2654 sv_free((SV*)mp->mad_val);
2657 PerlIO_printf(PerlIO_stderr(), "Unrecognized mad\n");
2666 Perl_newNULLLIST(pTHX)
2668 return newOP(OP_STUB, 0);
2672 Perl_force_list(pTHX_ OP *o)
2674 if (!o || o->op_type != OP_LIST)
2675 o = newLISTOP(OP_LIST, 0, o, NULL);
2681 Perl_newLISTOP(pTHX_ I32 type, I32 flags, OP *first, OP *last)
2686 NewOp(1101, listop, 1, LISTOP);
2688 listop->op_type = (OPCODE)type;
2689 listop->op_ppaddr = PL_ppaddr[type];
2692 listop->op_flags = (U8)flags;
2696 else if (!first && last)
2699 first->op_sibling = last;
2700 listop->op_first = first;
2701 listop->op_last = last;
2702 if (type == OP_LIST) {
2703 OP* const pushop = newOP(OP_PUSHMARK, 0);
2704 pushop->op_sibling = first;
2705 listop->op_first = pushop;
2706 listop->op_flags |= OPf_KIDS;
2708 listop->op_last = pushop;
2711 return CHECKOP(type, listop);
2715 Perl_newOP(pTHX_ I32 type, I32 flags)
2719 NewOp(1101, o, 1, OP);
2720 o->op_type = (OPCODE)type;
2721 o->op_ppaddr = PL_ppaddr[type];
2722 o->op_flags = (U8)flags;
2724 o->op_latefreed = 0;
2728 o->op_private = (U8)(0 | (flags >> 8));
2729 if (PL_opargs[type] & OA_RETSCALAR)
2731 if (PL_opargs[type] & OA_TARGET)
2732 o->op_targ = pad_alloc(type, SVs_PADTMP);
2733 return CHECKOP(type, o);
2737 Perl_newUNOP(pTHX_ I32 type, I32 flags, OP *first)
2743 first = newOP(OP_STUB, 0);
2744 if (PL_opargs[type] & OA_MARK)
2745 first = force_list(first);
2747 NewOp(1101, unop, 1, UNOP);
2748 unop->op_type = (OPCODE)type;
2749 unop->op_ppaddr = PL_ppaddr[type];
2750 unop->op_first = first;
2751 unop->op_flags = (U8)(flags | OPf_KIDS);
2752 unop->op_private = (U8)(1 | (flags >> 8));
2753 unop = (UNOP*) CHECKOP(type, unop);
2757 return fold_constants((OP *) unop);
2761 Perl_newBINOP(pTHX_ I32 type, I32 flags, OP *first, OP *last)
2765 NewOp(1101, binop, 1, BINOP);
2768 first = newOP(OP_NULL, 0);
2770 binop->op_type = (OPCODE)type;
2771 binop->op_ppaddr = PL_ppaddr[type];
2772 binop->op_first = first;
2773 binop->op_flags = (U8)(flags | OPf_KIDS);
2776 binop->op_private = (U8)(1 | (flags >> 8));
2779 binop->op_private = (U8)(2 | (flags >> 8));
2780 first->op_sibling = last;
2783 binop = (BINOP*)CHECKOP(type, binop);
2784 if (binop->op_next || binop->op_type != (OPCODE)type)
2787 binop->op_last = binop->op_first->op_sibling;
2789 return fold_constants((OP *)binop);
2792 static int uvcompare(const void *a, const void *b)
2793 __attribute__nonnull__(1)
2794 __attribute__nonnull__(2)
2795 __attribute__pure__;
2796 static int uvcompare(const void *a, const void *b)
2798 if (*((const UV *)a) < (*(const UV *)b))
2800 if (*((const UV *)a) > (*(const UV *)b))
2802 if (*((const UV *)a+1) < (*(const UV *)b+1))
2804 if (*((const UV *)a+1) > (*(const UV *)b+1))
2810 Perl_pmtrans(pTHX_ OP *o, OP *expr, OP *repl)
2813 SV * const tstr = ((SVOP*)expr)->op_sv;
2816 (repl->op_type == OP_NULL)
2817 ? ((SVOP*)((LISTOP*)repl)->op_first)->op_sv :
2819 ((SVOP*)repl)->op_sv;
2822 const U8 *t = (U8*)SvPV_const(tstr, tlen);
2823 const U8 *r = (U8*)SvPV_const(rstr, rlen);
2827 register short *tbl;
2829 const I32 complement = o->op_private & OPpTRANS_COMPLEMENT;
2830 const I32 squash = o->op_private & OPpTRANS_SQUASH;
2831 I32 del = o->op_private & OPpTRANS_DELETE;
2832 PL_hints |= HINT_BLOCK_SCOPE;
2835 o->op_private |= OPpTRANS_FROM_UTF;
2838 o->op_private |= OPpTRANS_TO_UTF;
2840 if (o->op_private & (OPpTRANS_FROM_UTF|OPpTRANS_TO_UTF)) {
2841 SV* const listsv = newSVpvs("# comment\n");
2843 const U8* tend = t + tlen;
2844 const U8* rend = r + rlen;
2858 const I32 from_utf = o->op_private & OPpTRANS_FROM_UTF;
2859 const I32 to_utf = o->op_private & OPpTRANS_TO_UTF;
2862 const U32 flags = UTF8_ALLOW_DEFAULT;
2866 t = tsave = bytes_to_utf8(t, &len);
2869 if (!to_utf && rlen) {
2871 r = rsave = bytes_to_utf8(r, &len);
2875 /* There are several snags with this code on EBCDIC:
2876 1. 0xFF is a legal UTF-EBCDIC byte (there are no illegal bytes).
2877 2. scan_const() in toke.c has encoded chars in native encoding which makes
2878 ranges at least in EBCDIC 0..255 range the bottom odd.
2882 U8 tmpbuf[UTF8_MAXBYTES+1];
2885 Newx(cp, 2*tlen, UV);
2887 transv = newSVpvs("");
2889 cp[2*i] = utf8n_to_uvuni(t, tend-t, &ulen, flags);
2891 if (t < tend && NATIVE_TO_UTF(*t) == 0xff) {
2893 cp[2*i+1] = utf8n_to_uvuni(t, tend-t, &ulen, flags);
2897 cp[2*i+1] = cp[2*i];
2901 qsort(cp, i, 2*sizeof(UV), uvcompare);
2902 for (j = 0; j < i; j++) {
2904 diff = val - nextmin;
2906 t = uvuni_to_utf8(tmpbuf,nextmin);
2907 sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf);
2909 U8 range_mark = UTF_TO_NATIVE(0xff);
2910 t = uvuni_to_utf8(tmpbuf, val - 1);
2911 sv_catpvn(transv, (char *)&range_mark, 1);
2912 sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf);
2919 t = uvuni_to_utf8(tmpbuf,nextmin);
2920 sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf);
2922 U8 range_mark = UTF_TO_NATIVE(0xff);
2923 sv_catpvn(transv, (char *)&range_mark, 1);
2925 t = uvuni_to_utf8_flags(tmpbuf, 0x7fffffff,
2926 UNICODE_ALLOW_SUPER);
2927 sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf);
2928 t = (const U8*)SvPVX_const(transv);
2929 tlen = SvCUR(transv);
2933 else if (!rlen && !del) {
2934 r = t; rlen = tlen; rend = tend;
2937 if ((!rlen && !del) || t == r ||
2938 (tlen == rlen && memEQ((char *)t, (char *)r, tlen)))
2940 o->op_private |= OPpTRANS_IDENTICAL;
2944 while (t < tend || tfirst <= tlast) {
2945 /* see if we need more "t" chars */
2946 if (tfirst > tlast) {
2947 tfirst = (I32)utf8n_to_uvuni(t, tend - t, &ulen, flags);
2949 if (t < tend && NATIVE_TO_UTF(*t) == 0xff) { /* illegal utf8 val indicates range */
2951 tlast = (I32)utf8n_to_uvuni(t, tend - t, &ulen, flags);
2958 /* now see if we need more "r" chars */
2959 if (rfirst > rlast) {
2961 rfirst = (I32)utf8n_to_uvuni(r, rend - r, &ulen, flags);
2963 if (r < rend && NATIVE_TO_UTF(*r) == 0xff) { /* illegal utf8 val indicates range */
2965 rlast = (I32)utf8n_to_uvuni(r, rend - r, &ulen, flags);
2974 rfirst = rlast = 0xffffffff;
2978 /* now see which range will peter our first, if either. */
2979 tdiff = tlast - tfirst;
2980 rdiff = rlast - rfirst;
2987 if (rfirst == 0xffffffff) {
2988 diff = tdiff; /* oops, pretend rdiff is infinite */
2990 Perl_sv_catpvf(aTHX_ listsv, "%04lx\t%04lx\tXXXX\n",
2991 (long)tfirst, (long)tlast);
2993 Perl_sv_catpvf(aTHX_ listsv, "%04lx\t\tXXXX\n", (long)tfirst);
2997 Perl_sv_catpvf(aTHX_ listsv, "%04lx\t%04lx\t%04lx\n",
2998 (long)tfirst, (long)(tfirst + diff),
3001 Perl_sv_catpvf(aTHX_ listsv, "%04lx\t\t%04lx\n",
3002 (long)tfirst, (long)rfirst);
3004 if (rfirst + diff > max)
3005 max = rfirst + diff;
3007 grows = (tfirst < rfirst &&
3008 UNISKIP(tfirst) < UNISKIP(rfirst + diff));
3020 else if (max > 0xff)
3025 PerlMemShared_free(cPVOPo->op_pv);
3026 cPVOPo->op_pv = NULL;
3027 cSVOPo->op_sv = (SV*)swash_init("utf8", "", listsv, bits, none);
3028 SvREFCNT_dec(listsv);
3029 SvREFCNT_dec(transv);
3031 if (!del && havefinal && rlen)
3032 (void)hv_store((HV*)SvRV((cSVOPo->op_sv)), "FINAL", 5,
3033 newSVuv((UV)final), 0);
3036 o->op_private |= OPpTRANS_GROWS;
3042 op_getmad(expr,o,'e');
3043 op_getmad(repl,o,'r');
3051 tbl = (short*)cPVOPo->op_pv;
3053 Zero(tbl, 256, short);
3054 for (i = 0; i < (I32)tlen; i++)
3056 for (i = 0, j = 0; i < 256; i++) {
3058 if (j >= (I32)rlen) {
3067 if (i < 128 && r[j] >= 128)
3077 o->op_private |= OPpTRANS_IDENTICAL;
3079 else if (j >= (I32)rlen)
3082 cPVOPo->op_pv = (char*)PerlMemShared_realloc(tbl,
3083 (0x101+rlen-j) * sizeof(short));
3084 tbl[0x100] = (short)(rlen - j);
3085 for (i=0; i < (I32)rlen - j; i++)
3086 tbl[0x101+i] = r[j+i];
3090 if (!rlen && !del) {
3093 o->op_private |= OPpTRANS_IDENTICAL;
3095 else if (!squash && rlen == tlen && memEQ((char*)t, (char*)r, tlen)) {
3096 o->op_private |= OPpTRANS_IDENTICAL;
3098 for (i = 0; i < 256; i++)
3100 for (i = 0, j = 0; i < (I32)tlen; i++,j++) {
3101 if (j >= (I32)rlen) {
3103 if (tbl[t[i]] == -1)
3109 if (tbl[t[i]] == -1) {
3110 if (t[i] < 128 && r[j] >= 128)
3117 o->op_private |= OPpTRANS_GROWS;
3119 op_getmad(expr,o,'e');
3120 op_getmad(repl,o,'r');
3130 Perl_newPMOP(pTHX_ I32 type, I32 flags)
3135 NewOp(1101, pmop, 1, PMOP);
3136 pmop->op_type = (OPCODE)type;
3137 pmop->op_ppaddr = PL_ppaddr[type];
3138 pmop->op_flags = (U8)flags;
3139 pmop->op_private = (U8)(0 | (flags >> 8));
3141 if (PL_hints & HINT_RE_TAINT)
3142 pmop->op_pmpermflags |= PMf_RETAINT;
3143 if (PL_hints & HINT_LOCALE)
3144 pmop->op_pmpermflags |= PMf_LOCALE;
3145 pmop->op_pmflags = pmop->op_pmpermflags;
3148 if (av_len((AV*) PL_regex_pad[0]) > -1) {
3149 SV * const repointer = av_pop((AV*)PL_regex_pad[0]);
3150 pmop->op_pmoffset = SvIV(repointer);
3151 SvREPADTMP_off(repointer);
3152 sv_setiv(repointer,0);
3154 SV * const repointer = newSViv(0);
3155 av_push(PL_regex_padav, SvREFCNT_inc_simple_NN(repointer));
3156 pmop->op_pmoffset = av_len(PL_regex_padav);
3157 PL_regex_pad = AvARRAY(PL_regex_padav);
3161 /* link into pm list */
3162 if (type != OP_TRANS && PL_curstash) {
3163 MAGIC *mg = mg_find((SV*)PL_curstash, PERL_MAGIC_symtab);
3166 mg = sv_magicext((SV*)PL_curstash, 0, PERL_MAGIC_symtab, 0, 0, 0);
3168 pmop->op_pmnext = (PMOP*)mg->mg_obj;
3169 mg->mg_obj = (SV*)pmop;
3170 PmopSTASH_set(pmop,PL_curstash);
3173 return CHECKOP(type, pmop);
3176 /* Given some sort of match op o, and an expression expr containing a
3177 * pattern, either compile expr into a regex and attach it to o (if it's
3178 * constant), or convert expr into a runtime regcomp op sequence (if it's
3181 * isreg indicates that the pattern is part of a regex construct, eg
3182 * $x =~ /pattern/ or split /pattern/, as opposed to $x =~ $pattern or
3183 * split "pattern", which aren't. In the former case, expr will be a list
3184 * if the pattern contains more than one term (eg /a$b/) or if it contains
3185 * a replacement, ie s/// or tr///.
3189 Perl_pmruntime(pTHX_ OP *o, OP *expr, bool isreg)
3194 I32 repl_has_vars = 0;
3198 if (o->op_type == OP_SUBST || o->op_type == OP_TRANS) {
3199 /* last element in list is the replacement; pop it */
3201 repl = cLISTOPx(expr)->op_last;
3202 kid = cLISTOPx(expr)->op_first;
3203 while (kid->op_sibling != repl)
3204 kid = kid->op_sibling;
3205 kid->op_sibling = NULL;
3206 cLISTOPx(expr)->op_last = kid;
3209 if (isreg && expr->op_type == OP_LIST &&
3210 cLISTOPx(expr)->op_first->op_sibling == cLISTOPx(expr)->op_last)
3212 /* convert single element list to element */
3213 OP* const oe = expr;
3214 expr = cLISTOPx(oe)->op_first->op_sibling;
3215 cLISTOPx(oe)->op_first->op_sibling = NULL;
3216 cLISTOPx(oe)->op_last = NULL;
3220 if (o->op_type == OP_TRANS) {
3221 return pmtrans(o, expr, repl);
3224 reglist = isreg && expr->op_type == OP_LIST;
3228 PL_hints |= HINT_BLOCK_SCOPE;
3231 if (expr->op_type == OP_CONST) {
3233 SV * const pat = ((SVOP*)expr)->op_sv;
3234 const char *p = SvPV_const(pat, plen);
3235 if ((o->op_flags & OPf_SPECIAL) && (*p == ' ' && p[1] == '\0')) {
3236 U32 was_readonly = SvREADONLY(pat);
3240 sv_force_normal_flags(pat, 0);
3241 assert(!SvREADONLY(pat));
3244 SvREADONLY_off(pat);
3248 sv_setpvn(pat, "\\s+", 3);
3250 SvFLAGS(pat) |= was_readonly;
3252 p = SvPV_const(pat, plen);
3253 pm->op_pmflags |= PMf_SKIPWHITE;
3256 pm->op_pmdynflags |= PMdf_UTF8;
3257 /* FIXME - can we make this function take const char * args? */
3258 PM_SETRE(pm, CALLREGCOMP((char*)p, (char*)p + plen, pm));
3259 if (PM_GETRE(pm)->extflags & RXf_WHITE)
3260 pm->op_pmflags |= PMf_WHITE;
3262 pm->op_pmflags &= ~PMf_WHITE;
3264 op_getmad(expr,(OP*)pm,'e');
3270 if (pm->op_pmflags & PMf_KEEP || !(PL_hints & HINT_RE_EVAL))
3271 expr = newUNOP((!(PL_hints & HINT_RE_EVAL)
3273 : OP_REGCMAYBE),0,expr);
3275 NewOp(1101, rcop, 1, LOGOP);
3276 rcop->op_type = OP_REGCOMP;
3277 rcop->op_ppaddr = PL_ppaddr[OP_REGCOMP];
3278 rcop->op_first = scalar(expr);
3279 rcop->op_flags |= OPf_KIDS
3280 | ((PL_hints & HINT_RE_EVAL) ? OPf_SPECIAL : 0)
3281 | (reglist ? OPf_STACKED : 0);
3282 rcop->op_private = 1;
3285 rcop->op_targ = pad_alloc(rcop->op_type, SVs_PADTMP);
3287 /* /$x/ may cause an eval, since $x might be qr/(?{..})/ */
3290 /* establish postfix order */
3291 if (pm->op_pmflags & PMf_KEEP || !(PL_hints & HINT_RE_EVAL)) {
3293 rcop->op_next = expr;
3294 ((UNOP*)expr)->op_first->op_next = (OP*)rcop;
3297 rcop->op_next = LINKLIST(expr);
3298 expr->op_next = (OP*)rcop;
3301 prepend_elem(o->op_type, scalar((OP*)rcop), o);
3306 if (pm->op_pmflags & PMf_EVAL) {
3308 if (CopLINE(PL_curcop) < (line_t)PL_multi_end)
3309 CopLINE_set(PL_curcop, (line_t)PL_multi_end);
3311 else if (repl->op_type == OP_CONST)
3315 for (curop = LINKLIST(repl); curop!=repl; curop = LINKLIST(curop)) {
3316 if (curop->op_type == OP_SCOPE
3317 || curop->op_type == OP_LEAVE
3318 || (PL_opargs[curop->op_type] & OA_DANGEROUS)) {
3319 if (curop->op_type == OP_GV) {
3320 GV * const gv = cGVOPx_gv(curop);
3322 if (strchr("&`'123456789+-\016\022", *GvENAME(gv)))
3325 else if (curop->op_type == OP_RV2CV)
3327 else if (curop->op_type == OP_RV2SV ||
3328 curop->op_type == OP_RV2AV ||
3329 curop->op_type == OP_RV2HV ||
3330 curop->op_type == OP_RV2GV) {
3331 if (lastop && lastop->op_type != OP_GV) /*funny deref?*/
3334 else if (curop->op_type == OP_PADSV ||
3335 curop->op_type == OP_PADAV ||
3336 curop->op_type == OP_PADHV ||
3337 curop->op_type == OP_PADANY)
3341 else if (curop->op_type == OP_PUSHRE)
3342 NOOP; /* Okay here, dangerous in newASSIGNOP */
3352 || PM_GETRE(pm)->extflags & RXf_EVAL_SEEN)))
3354 pm->op_pmflags |= PMf_CONST; /* const for long enough */
3355 pm->op_pmpermflags |= PMf_CONST; /* const for long enough */
3356 prepend_elem(o->op_type, scalar(repl), o);
3359 if (curop == repl && !PM_GETRE(pm)) { /* Has variables. */
3360 pm->op_pmflags |= PMf_MAYBE_CONST;
3361 pm->op_pmpermflags |= PMf_MAYBE_CONST;
3363 NewOp(1101, rcop, 1, LOGOP);
3364 rcop->op_type = OP_SUBSTCONT;
3365 rcop->op_ppaddr = PL_ppaddr[OP_SUBSTCONT];
3366 rcop->op_first = scalar(repl);
3367 rcop->op_flags |= OPf_KIDS;
3368 rcop->op_private = 1;
3371 /* establish postfix order */
3372 rcop->op_next = LINKLIST(repl);
3373 repl->op_next = (OP*)rcop;
3375 pm->op_pmreplroot = scalar((OP*)rcop);
3376 pm->op_pmreplstart = LINKLIST(rcop);
3385 Perl_newSVOP(pTHX_ I32 type, I32 flags, SV *sv)
3389 NewOp(1101, svop, 1, SVOP);
3390 svop->op_type = (OPCODE)type;
3391 svop->op_ppaddr = PL_ppaddr[type];
3393 svop->op_next = (OP*)svop;
3394 svop->op_flags = (U8)flags;
3395 if (PL_opargs[type] & OA_RETSCALAR)
3397 if (PL_opargs[type] & OA_TARGET)
3398 svop->op_targ = pad_alloc(type, SVs_PADTMP);
3399 return CHECKOP(type, svop);
3403 Perl_newPADOP(pTHX_ I32 type, I32 flags, SV *sv)
3407 NewOp(1101, padop, 1, PADOP);
3408 padop->op_type = (OPCODE)type;
3409 padop->op_ppaddr = PL_ppaddr[type];
3410 padop->op_padix = pad_alloc(type, SVs_PADTMP);
3411 SvREFCNT_dec(PAD_SVl(padop->op_padix));
3412 PAD_SETSV(padop->op_padix, sv);
3415 padop->op_next = (OP*)padop;
3416 padop->op_flags = (U8)flags;
3417 if (PL_opargs[type] & OA_RETSCALAR)
3419 if (PL_opargs[type] & OA_TARGET)
3420 padop->op_targ = pad_alloc(type, SVs_PADTMP);
3421 return CHECKOP(type, padop);
3425 Perl_newGVOP(pTHX_ I32 type, I32 flags, GV *gv)
3431 return newPADOP(type, flags, SvREFCNT_inc_simple(gv));
3433 return newSVOP(type, flags, SvREFCNT_inc_simple(gv));
3438 Perl_newPVOP(pTHX_ I32 type, I32 flags, char *pv)
3442 NewOp(1101, pvop, 1, PVOP);
3443 pvop->op_type = (OPCODE)type;
3444 pvop->op_ppaddr = PL_ppaddr[type];
3446 pvop->op_next = (OP*)pvop;
3447 pvop->op_flags = (U8)flags;
3448 if (PL_opargs[type] & OA_RETSCALAR)
3450 if (PL_opargs[type] & OA_TARGET)
3451 pvop->op_targ = pad_alloc(type, SVs_PADTMP);
3452 return CHECKOP(type, pvop);
3460 Perl_package(pTHX_ OP *o)
3469 save_hptr(&PL_curstash);
3470 save_item(PL_curstname);
3472 name = SvPV_const(cSVOPo->op_sv, len);
3473 PL_curstash = gv_stashpvn(name, len, TRUE);
3474 sv_setpvn(PL_curstname, name, len);
3476 PL_hints |= HINT_BLOCK_SCOPE;
3477 PL_copline = NOLINE;
3483 if (!PL_madskills) {
3488 pegop = newOP(OP_NULL,0);
3489 op_getmad(o,pegop,'P');
3499 Perl_utilize(pTHX_ int aver, I32 floor, OP *version, OP *idop, OP *arg)
3506 OP *pegop = newOP(OP_NULL,0);
3509 if (idop->op_type != OP_CONST)
3510 Perl_croak(aTHX_ "Module name must be constant");
3513 op_getmad(idop,pegop,'U');
3518 SV * const vesv = ((SVOP*)version)->op_sv;
3521 op_getmad(version,pegop,'V');
3522 if (!arg && !SvNIOKp(vesv)) {
3529 if (version->op_type != OP_CONST || !SvNIOKp(vesv))
3530 Perl_croak(aTHX_ "Version number must be constant number");
3532 /* Make copy of idop so we don't free it twice */
3533 pack = newSVOP(OP_CONST, 0, newSVsv(((SVOP*)idop)->op_sv));
3535 /* Fake up a method call to VERSION */
3536 meth = newSVpvs_share("VERSION");
3537 veop = convert(OP_ENTERSUB, OPf_STACKED|OPf_SPECIAL,
3538 append_elem(OP_LIST,
3539 prepend_elem(OP_LIST, pack, list(version)),
3540 newSVOP(OP_METHOD_NAMED, 0, meth)));
3544 /* Fake up an import/unimport */
3545 if (arg && arg->op_type == OP_STUB) {
3547 op_getmad(arg,pegop,'S');
3548 imop = arg; /* no import on explicit () */
3550 else if (SvNIOKp(((SVOP*)idop)->op_sv)) {
3551 imop = NULL; /* use 5.0; */
3553 idop->op_private |= OPpCONST_NOVER;
3559 op_getmad(arg,pegop,'A');
3561 /* Make copy of idop so we don't free it twice */
3562 pack = newSVOP(OP_CONST, 0, newSVsv(((SVOP*)idop)->op_sv));
3564 /* Fake up a method call to import/unimport */
3566 ? newSVpvs_share("import") : newSVpvs_share("unimport");
3567 imop = convert(OP_ENTERSUB, OPf_STACKED|OPf_SPECIAL,
3568 append_elem(OP_LIST,
3569 prepend_elem(OP_LIST, pack, list(arg)),
3570 newSVOP(OP_METHOD_NAMED, 0, meth)));
3573 /* Fake up the BEGIN {}, which does its thing immediately. */
3575 newSVOP(OP_CONST, 0, newSVpvs_share("BEGIN")),
3578 append_elem(OP_LINESEQ,
3579 append_elem(OP_LINESEQ,
3580 newSTATEOP(0, NULL, newUNOP(OP_REQUIRE, 0, idop)),
3581 newSTATEOP(0, NULL, veop)),
3582 newSTATEOP(0, NULL, imop) ));
3584 /* The "did you use incorrect case?" warning used to be here.
3585 * The problem is that on case-insensitive filesystems one
3586 * might get false positives for "use" (and "require"):
3587 * "use Strict" or "require CARP" will work. This causes
3588 * portability problems for the script: in case-strict
3589 * filesystems the script will stop working.
3591 * The "incorrect case" warning checked whether "use Foo"
3592 * imported "Foo" to your namespace, but that is wrong, too:
3593 * there is no requirement nor promise in the language that
3594 * a Foo.pm should or would contain anything in package "Foo".
3596 * There is very little Configure-wise that can be done, either:
3597 * the case-sensitivity of the build filesystem of Perl does not
3598 * help in guessing the case-sensitivity of the runtime environment.
3601 PL_hints |= HINT_BLOCK_SCOPE;
3602 PL_copline = NOLINE;
3604 PL_cop_seqmax++; /* Purely for B::*'s benefit */
3607 if (!PL_madskills) {
3608 /* FIXME - don't allocate pegop if !PL_madskills */
3617 =head1 Embedding Functions
3619 =for apidoc load_module
3621 Loads the module whose name is pointed to by the string part of name.
3622 Note that the actual module name, not its filename, should be given.
3623 Eg, "Foo::Bar" instead of "Foo/Bar.pm". flags can be any of
3624 PERL_LOADMOD_DENY, PERL_LOADMOD_NOIMPORT, or PERL_LOADMOD_IMPORT_OPS
3625 (or 0 for no flags). ver, if specified, provides version semantics
3626 similar to C<use Foo::Bar VERSION>. The optional trailing SV*
3627 arguments can be used to specify arguments to the module's import()
3628 method, similar to C<use Foo::Bar VERSION LIST>.
3633 Perl_load_module(pTHX_ U32 flags, SV *name, SV *ver, ...)
3636 va_start(args, ver);
3637 vload_module(flags, name, ver, &args);
3641 #ifdef PERL_IMPLICIT_CONTEXT
3643 Perl_load_module_nocontext(U32 flags, SV *name, SV *ver, ...)
3647 va_start(args, ver);
3648 vload_module(flags, name, ver, &args);
3654 Perl_vload_module(pTHX_ U32 flags, SV *name, SV *ver, va_list *args)
3659 OP * const modname = newSVOP(OP_CONST, 0, name);
3660 modname->op_private |= OPpCONST_BARE;
3662 veop = newSVOP(OP_CONST, 0, ver);
3666 if (flags & PERL_LOADMOD_NOIMPORT) {
3667 imop = sawparens(newNULLLIST());
3669 else if (flags & PERL_LOADMOD_IMPORT_OPS) {
3670 imop = va_arg(*args, OP*);
3675 sv = va_arg(*args, SV*);
3677 imop = append_elem(OP_LIST, imop, newSVOP(OP_CONST, 0, sv));
3678 sv = va_arg(*args, SV*);
3682 const line_t ocopline = PL_copline;
3683 COP * const ocurcop = PL_curcop;
3684 const int oexpect = PL_expect;
3686 utilize(!(flags & PERL_LOADMOD_DENY), start_subparse(FALSE, 0),
3687 veop, modname, imop);
3688 PL_expect = oexpect;
3689 PL_copline = ocopline;
3690 PL_curcop = ocurcop;
3695 Perl_dofile(pTHX_ OP *term, I32 force_builtin)
3701 if (!force_builtin) {
3702 gv = gv_fetchpvs("do", GV_NOTQUAL, SVt_PVCV);
3703 if (!(gv && GvCVu(gv) && GvIMPORTED_CV(gv))) {
3704 GV * const * const gvp = (GV**)hv_fetchs(PL_globalstash, "do", FALSE);
3705 gv = gvp ? *gvp : NULL;
3709 if (gv && GvCVu(gv) && GvIMPORTED_CV(gv)) {
3710 doop = ck_subr(newUNOP(OP_ENTERSUB, OPf_STACKED,
3711 append_elem(OP_LIST, term,
3712 scalar(newUNOP(OP_RV2CV, 0,
3713 newGVOP(OP_GV, 0, gv))))));
3716 doop = newUNOP(OP_DOFILE, 0, scalar(term));
3722 Perl_newSLICEOP(pTHX_ I32 flags, OP *subscript, OP *listval)
3724 return newBINOP(OP_LSLICE, flags,
3725 list(force_list(subscript)),
3726 list(force_list(listval)) );
3730 S_is_list_assignment(pTHX_ register const OP *o)
3738 if ((o->op_type == OP_NULL) && (o->op_flags & OPf_KIDS))
3739 o = cUNOPo->op_first;
3741 flags = o->op_flags;
3743 if (type == OP_COND_EXPR) {
3744 const I32 t = is_list_assignment(cLOGOPo->op_first->op_sibling);
3745 const I32 f = is_list_assignment(cLOGOPo->op_first->op_sibling->op_sibling);
3750 yyerror("Assignment to both a list and a scalar");
3754 if (type == OP_LIST &&
3755 (flags & OPf_WANT) == OPf_WANT_SCALAR &&
3756 o->op_private & OPpLVAL_INTRO)
3759 if (type == OP_LIST || flags & OPf_PARENS ||
3760 type == OP_RV2AV || type == OP_RV2HV ||
3761 type == OP_ASLICE || type == OP_HSLICE)
3764 if (type == OP_PADAV || type == OP_PADHV)
3767 if (type == OP_RV2SV)
3774 Perl_newASSIGNOP(pTHX_ I32 flags, OP *left, I32 optype, OP *right)
3780 if (optype == OP_ANDASSIGN || optype == OP_ORASSIGN || optype == OP_DORASSIGN) {
3781 return newLOGOP(optype, 0,
3782 mod(scalar(left), optype),
3783 newUNOP(OP_SASSIGN, 0, scalar(right)));
3786 return newBINOP(optype, OPf_STACKED,
3787 mod(scalar(left), optype), scalar(right));
3791 if (is_list_assignment(left)) {
3795 /* Grandfathering $[ assignment here. Bletch.*/
3796 /* Only simple assignments like C<< ($[) = 1 >> are allowed */
3797 PL_eval_start = (left->op_type == OP_CONST) ? right : 0;
3798 left = mod(left, OP_AASSIGN);
3801 else if (left->op_type == OP_CONST) {
3803 /* Result of assignment is always 1 (or we'd be dead already) */
3804 return newSVOP(OP_CONST, 0, newSViv(1));
3806 curop = list(force_list(left));
3807 o = newBINOP(OP_AASSIGN, flags, list(force_list(right)), curop);
3808 o->op_private = (U8)(0 | (flags >> 8));
3810 /* PL_generation sorcery:
3811 * an assignment like ($a,$b) = ($c,$d) is easier than
3812 * ($a,$b) = ($c,$a), since there is no need for temporary vars.
3813 * To detect whether there are common vars, the global var
3814 * PL_generation is incremented for each assign op we compile.
3815 * Then, while compiling the assign op, we run through all the
3816 * variables on both sides of the assignment, setting a spare slot
3817 * in each of them to PL_generation. If any of them already have
3818 * that value, we know we've got commonality. We could use a
3819 * single bit marker, but then we'd have to make 2 passes, first
3820 * to clear the flag, then to test and set it. To find somewhere
3821 * to store these values, evil chicanery is done with SvUVX().
3827 for (curop = LINKLIST(o); curop != o; curop = LINKLIST(curop)) {
3828 if (PL_opargs[curop->op_type] & OA_DANGEROUS) {
3829 if (curop->op_type == OP_GV) {
3830 GV *gv = cGVOPx_gv(curop);
3832 || (int)GvASSIGN_GENERATION(gv) == PL_generation)
3834 GvASSIGN_GENERATION_set(gv, PL_generation);
3836 else if (curop->op_type == OP_PADSV ||
3837 curop->op_type == OP_PADAV ||
3838 curop->op_type == OP_PADHV ||
3839 curop->op_type == OP_PADANY)
3841 if (PAD_COMPNAME_GEN(curop->op_targ)
3842 == (STRLEN)PL_generation)
3844 PAD_COMPNAME_GEN_set(curop->op_targ, PL_generation);
3847 else if (curop->op_type == OP_RV2CV)
3849 else if (curop->op_type == OP_RV2SV ||
3850 curop->op_type == OP_RV2AV ||
3851 curop->op_type == OP_RV2HV ||
3852 curop->op_type == OP_RV2GV) {
3853 if (lastop->op_type != OP_GV) /* funny deref? */
3856 else if (curop->op_type == OP_PUSHRE) {
3857 if (((PMOP*)curop)->op_pmreplroot) {
3859 GV *gv = (GV*)PAD_SVl(INT2PTR(PADOFFSET,
3860 ((PMOP*)curop)->op_pmreplroot));
3862 GV *gv = (GV*)((PMOP*)curop)->op_pmreplroot;
3865 || (int)GvASSIGN_GENERATION(gv) == PL_generation)
3867 GvASSIGN_GENERATION_set(gv, PL_generation);
3868 GvASSIGN_GENERATION_set(gv, PL_generation);
3877 o->op_private |= OPpASSIGN_COMMON;
3880 if ( ((left->op_private & OPpLVAL_INTRO) || ckWARN(WARN_MISC))
3881 && (left->op_type == OP_LIST
3882 || (left->op_type == OP_NULL && left->op_targ == OP_LIST)))
3884 OP* lop = ((LISTOP*)left)->op_first;
3886 if (lop->op_type == OP_PADSV ||
3887 lop->op_type == OP_PADAV ||
3888 lop->op_type == OP_PADHV ||
3889 lop->op_type == OP_PADANY)
3891 if (lop->op_private & OPpPAD_STATE) {
3892 if (left->op_private & OPpLVAL_INTRO) {
3893 o->op_private |= OPpASSIGN_STATE;
3894 /* hijacking PADSTALE for uninitialized state variables */
3895 SvPADSTALE_on(PAD_SVl(lop->op_targ));
3897 else { /* we already checked for WARN_MISC before */
3898 Perl_warner(aTHX_ packWARN(WARN_MISC), "State variable %s will be reinitialized",
3899 PAD_COMPNAME_PV(lop->op_targ));
3903 lop = lop->op_sibling;
3907 if (right && right->op_type == OP_SPLIT) {
3908 OP* tmpop = ((LISTOP*)right)->op_first;
3909 if (tmpop && (tmpop->op_type == OP_PUSHRE)) {
3910 PMOP * const pm = (PMOP*)tmpop;
3911 if (left->op_type == OP_RV2AV &&
3912 !(left->op_private & OPpLVAL_INTRO) &&
3913 !(o->op_private & OPpASSIGN_COMMON) )
3915 tmpop = ((UNOP*)left)->op_first;
3916 if (tmpop->op_type == OP_GV && !pm->op_pmreplroot) {
3918 pm->op_pmreplroot = INT2PTR(OP*, cPADOPx(tmpop)->op_padix);
3919 cPADOPx(tmpop)->op_padix = 0; /* steal it */
3921 pm->op_pmreplroot = (OP*)cSVOPx(tmpop)->op_sv;
3922 cSVOPx(tmpop)->op_sv = NULL; /* steal it */
3924 pm->op_pmflags |= PMf_ONCE;
3925 tmpop = cUNOPo->op_first; /* to list (nulled) */
3926 tmpop = ((UNOP*)tmpop)->op_first; /* to pushmark */
3927 tmpop->op_sibling = NULL; /* don't free split */
3928 right->op_next = tmpop->op_next; /* fix starting loc */
3930 op_getmad(o,right,'R'); /* blow off assign */
3932 op_free(o); /* blow off assign */
3934 right->op_flags &= ~OPf_WANT;
3935 /* "I don't know and I don't care." */
3940 if (PL_modcount < RETURN_UNLIMITED_NUMBER &&
3941 ((LISTOP*)right)->op_last->op_type == OP_CONST)
3943 SV *sv = ((SVOP*)((LISTOP*)right)->op_last)->op_sv;
3945 sv_setiv(sv, PL_modcount+1);
3953 right = newOP(OP_UNDEF, 0);
3954 if (right->op_type == OP_READLINE) {
3955 right->op_flags |= OPf_STACKED;
3956 return newBINOP(OP_NULL, flags, mod(scalar(left), OP_SASSIGN), scalar(right));
3959 PL_eval_start = right; /* Grandfathering $[ assignment here. Bletch.*/
3960 o = newBINOP(OP_SASSIGN, flags,
3961 scalar(right), mod(scalar(left), OP_SASSIGN) );
3967 o = newSVOP(OP_CONST, 0, newSViv(CopARYBASE_get(&PL_compiling)));
3968 o->op_private |= OPpCONST_ARYBASE;
3975 Perl_newSTATEOP(pTHX_ I32 flags, char *label, OP *o)
3978 const U32 seq = intro_my();
3981 NewOp(1101, cop, 1, COP);
3982 if (PERLDB_LINE && CopLINE(PL_curcop) && PL_curstash != PL_debstash) {
3983 cop->op_type = OP_DBSTATE;
3984 cop->op_ppaddr = PL_ppaddr[ OP_DBSTATE ];
3987 cop->op_type = OP_NEXTSTATE;
3988 cop->op_ppaddr = PL_ppaddr[ OP_NEXTSTATE ];
3990 cop->op_flags = (U8)flags;
3991 CopHINTS_set(cop, PL_hints);
3993 cop->op_private |= NATIVE_HINTS;
3995 CopHINTS_set(&PL_compiling, CopHINTS_get(cop));
3996 cop->op_next = (OP*)cop;
3999 CopLABEL_set(cop, label);
4000 PL_hints |= HINT_BLOCK_SCOPE;
4003 /* CopARYBASE is now "virtual", in that it's stored as a flag bit in
4004 CopHINTS and a possible value in cop_hints_hash, so no need to copy it.
4006 cop->cop_warnings = DUP_WARNINGS(PL_curcop->cop_warnings);
4007 cop->cop_hints_hash = PL_curcop->cop_hints_hash;
4008 if (cop->cop_hints_hash) {
4010 cop->cop_hints_hash->refcounted_he_refcnt++;
4011 HINTS_REFCNT_UNLOCK;
4014 if (PL_copline == NOLINE)
4015 CopLINE_set(cop, CopLINE(PL_curcop));
4017 CopLINE_set(cop, PL_copline);
4018 PL_copline = NOLINE;
4021 CopFILE_set(cop, CopFILE(PL_curcop)); /* XXX share in a pvtable? */
4023 CopFILEGV_set(cop, CopFILEGV(PL_curcop));
4025 CopSTASH_set(cop, PL_curstash);
4027 if (PERLDB_LINE && PL_curstash != PL_debstash) {
4028 AV *av = CopFILEAVx(PL_curcop);
4030 SV * const * const svp = av_fetch(av, (I32)CopLINE(cop), FALSE);
4031 if (svp && *svp != &PL_sv_undef ) {
4032 (void)SvIOK_on(*svp);
4033 SvIV_set(*svp, PTR2IV(cop));
4038 return prepend_elem(OP_LINESEQ, (OP*)cop, o);
4043 Perl_newLOGOP(pTHX_ I32 type, I32 flags, OP *first, OP *other)
4046 return new_logop(type, flags, &first, &other);
4050 S_new_logop(pTHX_ I32 type, I32 flags, OP** firstp, OP** otherp)
4055 OP *first = *firstp;
4056 OP * const other = *otherp;
4058 if (type == OP_XOR) /* Not short circuit, but here by precedence. */
4059 return newBINOP(type, flags, scalar(first), scalar(other));
4061 scalarboolean(first);
4062 /* optimize "!a && b" to "a || b", and "!a || b" to "a && b" */
4063 if (first->op_type == OP_NOT
4064 && (first->op_flags & OPf_SPECIAL)
4065 && (first->op_flags & OPf_KIDS)) {
4066 if (type == OP_AND || type == OP_OR) {
4072 first = *firstp = cUNOPo->op_first;
4074 first->op_next = o->op_next;
4075 cUNOPo->op_first = NULL;
4077 op_getmad(o,first,'O');
4083 if (first->op_type == OP_CONST) {
4084 if (first->op_private & OPpCONST_STRICT)
4085 no_bareword_allowed(first);
4086 else if ((first->op_private & OPpCONST_BARE) && ckWARN(WARN_BAREWORD))
4087 Perl_warner(aTHX_ packWARN(WARN_BAREWORD), "Bareword found in conditional");
4088 if ((type == OP_AND && SvTRUE(((SVOP*)first)->op_sv)) ||
4089 (type == OP_OR && !SvTRUE(((SVOP*)first)->op_sv)) ||
4090 (type == OP_DOR && !SvOK(((SVOP*)first)->op_sv))) {
4092 if (other->op_type == OP_CONST)
4093 other->op_private |= OPpCONST_SHORTCIRCUIT;
4095 OP *newop = newUNOP(OP_NULL, 0, other);
4096 op_getmad(first, newop, '1');
4097 newop->op_targ = type; /* set "was" field */
4104 /* check for C<my $x if 0>, or C<my($x,$y) if 0> */
4105 const OP *o2 = other;
4106 if ( ! (o2->op_type == OP_LIST
4107 && (( o2 = cUNOPx(o2)->op_first))
4108 && o2->op_type == OP_PUSHMARK
4109 && (( o2 = o2->op_sibling)) )
4112 if ((o2->op_type == OP_PADSV || o2->op_type == OP_PADAV
4113 || o2->op_type == OP_PADHV)
4114 && o2->op_private & OPpLVAL_INTRO
4115 && ckWARN(WARN_DEPRECATED))
4117 Perl_warner(aTHX_ packWARN(WARN_DEPRECATED),
4118 "Deprecated use of my() in false conditional");
4122 if (first->op_type == OP_CONST)
4123 first->op_private |= OPpCONST_SHORTCIRCUIT;
4125 first = newUNOP(OP_NULL, 0, first);
4126 op_getmad(other, first, '2');
4127 first->op_targ = type; /* set "was" field */
4134 else if ((first->op_flags & OPf_KIDS) && type != OP_DOR
4135 && ckWARN(WARN_MISC)) /* [#24076] Don't warn for <FH> err FOO. */
4137 const OP * const k1 = ((UNOP*)first)->op_first;
4138 const OP * const k2 = k1->op_sibling;
4140 switch (first->op_type)
4143 if (k2 && k2->op_type == OP_READLINE
4144 && (k2->op_flags & OPf_STACKED)
4145 && ((k1->op_flags & OPf_WANT) == OPf_WANT_SCALAR))
4147 warnop = k2->op_type;
4152 if (k1->op_type == OP_READDIR
4153 || k1->op_type == OP_GLOB
4154 || (k1->op_type == OP_NULL && k1->op_targ == OP_GLOB)
4155 || k1->op_type == OP_EACH)
4157 warnop = ((k1->op_type == OP_NULL)
4158 ? (OPCODE)k1->op_targ : k1->op_type);
4163 const line_t oldline = CopLINE(PL_curcop);
4164 CopLINE_set(PL_curcop, PL_copline);
4165 Perl_warner(aTHX_ packWARN(WARN_MISC),
4166 "Value of %s%s can be \"0\"; test with defined()",
4168 ((warnop == OP_READLINE || warnop == OP_GLOB)
4169 ? " construct" : "() operator"));
4170 CopLINE_set(PL_curcop, oldline);
4177 if (type == OP_ANDASSIGN || type == OP_ORASSIGN || type == OP_DORASSIGN)
4178 other->op_private |= OPpASSIGN_BACKWARDS; /* other is an OP_SASSIGN */
4180 NewOp(1101, logop, 1, LOGOP);
4182 logop->op_type = (OPCODE)type;
4183 logop->op_ppaddr = PL_ppaddr[type];
4184 logop->op_first = first;
4185 logop->op_flags = (U8)(flags | OPf_KIDS);
4186 logop->op_other = LINKLIST(other);
4187 logop->op_private = (U8)(1 | (flags >> 8));
4189 /* establish postfix order */
4190 logop->op_next = LINKLIST(first);
4191 first->op_next = (OP*)logop;
4192 first->op_sibling = other;
4194 CHECKOP(type,logop);
4196 o = newUNOP(OP_NULL, 0, (OP*)logop);
4203 Perl_newCONDOP(pTHX_ I32 flags, OP *first, OP *trueop, OP *falseop)
4211 return newLOGOP(OP_AND, 0, first, trueop);
4213 return newLOGOP(OP_OR, 0, first, falseop);
4215 scalarboolean(first);
4216 if (first->op_type == OP_CONST) {
4217 if (first->op_private & OPpCONST_BARE &&
4218 first->op_private & OPpCONST_STRICT) {
4219 no_bareword_allowed(first);
4221 if (SvTRUE(((SVOP*)first)->op_sv)) {
4224 trueop = newUNOP(OP_NULL, 0, trueop);
4225 op_getmad(first,trueop,'C');
4226 op_getmad(falseop,trueop,'e');
4228 /* FIXME for MAD - should there be an ELSE here? */
4238 falseop = newUNOP(OP_NULL, 0, falseop);
4239 op_getmad(first,falseop,'C');
4240 op_getmad(trueop,falseop,'t');
4242 /* FIXME for MAD - should there be an ELSE here? */
4250 NewOp(1101, logop, 1, LOGOP);
4251 logop->op_type = OP_COND_EXPR;
4252 logop->op_ppaddr = PL_ppaddr[OP_COND_EXPR];
4253 logop->op_first = first;
4254 logop->op_flags = (U8)(flags | OPf_KIDS);
4255 logop->op_private = (U8)(1 | (flags >> 8));
4256 logop->op_other = LINKLIST(trueop);
4257 logop->op_next = LINKLIST(falseop);
4259 CHECKOP(OP_COND_EXPR, /* that's logop->op_type */
4262 /* establish postfix order */
4263 start = LINKLIST(first);
4264 first->op_next = (OP*)logop;
4266 first->op_sibling = trueop;
4267 trueop->op_sibling = falseop;
4268 o = newUNOP(OP_NULL, 0, (OP*)logop);
4270 trueop->op_next = falseop->op_next = o;
4277 Perl_newRANGE(pTHX_ I32 flags, OP *left, OP *right)
4286 NewOp(1101, range, 1, LOGOP);
4288 range->op_type = OP_RANGE;
4289 range->op_ppaddr = PL_ppaddr[OP_RANGE];
4290 range->op_first = left;
4291 range->op_flags = OPf_KIDS;
4292 leftstart = LINKLIST(left);
4293 range->op_other = LINKLIST(right);
4294 range->op_private = (U8)(1 | (flags >> 8));
4296 left->op_sibling = right;
4298 range->op_next = (OP*)range;
4299 flip = newUNOP(OP_FLIP, flags, (OP*)range);
4300 flop = newUNOP(OP_FLOP, 0, flip);
4301 o = newUNOP(OP_NULL, 0, flop);
4303 range->op_next = leftstart;
4305 left->op_next = flip;
4306 right->op_next = flop;
4308 range->op_targ = pad_alloc(OP_RANGE, SVs_PADMY);
4309 sv_upgrade(PAD_SV(range->op_targ), SVt_PVNV);
4310 flip->op_targ = pad_alloc(OP_RANGE, SVs_PADMY);
4311 sv_upgrade(PAD_SV(flip->op_targ), SVt_PVNV);
4313 flip->op_private = left->op_type == OP_CONST ? OPpFLIP_LINENUM : 0;
4314 flop->op_private = right->op_type == OP_CONST ? OPpFLIP_LINENUM : 0;
4317 if (!flip->op_private || !flop->op_private)
4318 linklist(o); /* blow off optimizer unless constant */
4324 Perl_newLOOPOP(pTHX_ I32 flags, I32 debuggable, OP *expr, OP *block)
4329 const bool once = block && block->op_flags & OPf_SPECIAL &&
4330 (block->op_type == OP_ENTERSUB || block->op_type == OP_NULL);
4332 PERL_UNUSED_ARG(debuggable);
4335 if (once && expr->op_type == OP_CONST && !SvTRUE(((SVOP*)expr)->op_sv))
4336 return block; /* do {} while 0 does once */
4337 if (expr->op_type == OP_READLINE || expr->op_type == OP_GLOB
4338 || (expr->op_type == OP_NULL && expr->op_targ == OP_GLOB)) {
4339 expr = newUNOP(OP_DEFINED, 0,
4340 newASSIGNOP(0, newDEFSVOP(), 0, expr) );
4341 } else if (expr->op_flags & OPf_KIDS) {
4342 const OP * const k1 = ((UNOP*)expr)->op_first;
4343 const OP * const k2 = k1 ? k1->op_sibling : NULL;
4344 switch (expr->op_type) {
4346 if (k2 && k2->op_type == OP_READLINE
4347 && (k2->op_flags & OPf_STACKED)
4348 && ((k1->op_flags & OPf_WANT) == OPf_WANT_SCALAR))
4349 expr = newUNOP(OP_DEFINED, 0, expr);
4353 if (k1 && (k1->op_type == OP_READDIR
4354 || k1->op_type == OP_GLOB
4355 || (k1->op_type == OP_NULL && k1->op_targ == OP_GLOB)
4356 || k1->op_type == OP_EACH))
4357 expr = newUNOP(OP_DEFINED, 0, expr);
4363 /* if block is null, the next append_elem() would put UNSTACK, a scalar
4364 * op, in listop. This is wrong. [perl #27024] */
4366 block = newOP(OP_NULL, 0);
4367 listop = append_elem(OP_LINESEQ, block, newOP(OP_UNSTACK, 0));
4368 o = new_logop(OP_AND, 0, &expr, &listop);
4371 ((LISTOP*)listop)->op_last->op_next = LINKLIST(o);
4373 if (once && o != listop)
4374 o->op_next = ((LOGOP*)cUNOPo->op_first)->op_other;
4377 o = newUNOP(OP_NULL, 0, o); /* or do {} while 1 loses outer block */
4379 o->op_flags |= flags;
4381 o->op_flags |= OPf_SPECIAL; /* suppress POPBLOCK curpm restoration*/
4386 Perl_newWHILEOP(pTHX_ I32 flags, I32 debuggable, LOOP *loop, I32
4387 whileline, OP *expr, OP *block, OP *cont, I32 has_my)
4396 PERL_UNUSED_ARG(debuggable);
4399 if (expr->op_type == OP_READLINE || expr->op_type == OP_GLOB
4400 || (expr->op_type == OP_NULL && expr->op_targ == OP_GLOB)) {
4401 expr = newUNOP(OP_DEFINED, 0,
4402 newASSIGNOP(0, newDEFSVOP(), 0, expr) );
4403 } else if (expr->op_flags & OPf_KIDS) {
4404 const OP * const k1 = ((UNOP*)expr)->op_first;
4405 const OP * const k2 = (k1) ? k1->op_sibling : NULL;
4406 switch (expr->op_type) {
4408 if (k2 && k2->op_type == OP_READLINE
4409 && (k2->op_flags & OPf_STACKED)
4410 && ((k1->op_flags & OPf_WANT) == OPf_WANT_SCALAR))
4411 expr = newUNOP(OP_DEFINED, 0, expr);
4415 if (k1 && (k1->op_type == OP_READDIR
4416 || k1->op_type == OP_GLOB
4417 || (k1->op_type == OP_NULL && k1->op_targ == OP_GLOB)
4418 || k1->op_type == OP_EACH))
4419 expr = newUNOP(OP_DEFINED, 0, expr);
4426 block = newOP(OP_NULL, 0);
4427 else if (cont || has_my) {
4428 block = scope(block);
4432 next = LINKLIST(cont);
4435 OP * const unstack = newOP(OP_UNSTACK, 0);
4438 cont = append_elem(OP_LINESEQ, cont, unstack);
4442 listop = append_list(OP_LINESEQ, (LISTOP*)block, (LISTOP*)cont);
4444 redo = LINKLIST(listop);
4447 PL_copline = (line_t)whileline;
4449 o = new_logop(OP_AND, 0, &expr, &listop);
4450 if (o == expr && o->op_type == OP_CONST && !SvTRUE(cSVOPo->op_sv)) {
4451 op_free(expr); /* oops, it's a while (0) */
4453 return NULL; /* listop already freed by new_logop */
4456 ((LISTOP*)listop)->op_last->op_next =
4457 (o == listop ? redo : LINKLIST(o));
4463 NewOp(1101,loop,1,LOOP);
4464 loop->op_type = OP_ENTERLOOP;
4465 loop->op_ppaddr = PL_ppaddr[OP_ENTERLOOP];
4466 loop->op_private = 0;
4467 loop->op_next = (OP*)loop;
4470 o = newBINOP(OP_LEAVELOOP, 0, (OP*)loop, o);
4472 loop->op_redoop = redo;
4473 loop->op_lastop = o;
4474 o->op_private |= loopflags;
4477 loop->op_nextop = next;
4479 loop->op_nextop = o;
4481 o->op_flags |= flags;
4482 o->op_private |= (flags >> 8);
4487 Perl_newFOROP(pTHX_ I32 flags, char *label, line_t forline, OP *sv, OP *expr, OP *block, OP *cont)
4492 PADOFFSET padoff = 0;
4498 if (sv->op_type == OP_RV2SV) { /* symbol table variable */
4499 iterpflags = sv->op_private & OPpOUR_INTRO; /* for our $x () */
4500 sv->op_type = OP_RV2GV;
4501 sv->op_ppaddr = PL_ppaddr[OP_RV2GV];
4502 if (cGVOPx_gv(cUNOPx(sv)->op_first) == PL_defgv)
4503 iterpflags |= OPpITER_DEF;
4505 else if (sv->op_type == OP_PADSV) { /* private variable */
4506 iterpflags = sv->op_private & OPpLVAL_INTRO; /* for my $x () */
4507 padoff = sv->op_targ;
4517 Perl_croak(aTHX_ "Can't use %s for loop variable", PL_op_desc[sv->op_type]);
4519 SV *const namesv = PAD_COMPNAME_SV(padoff);
4521 const char *const name = SvPV_const(namesv, len);
4523 if (len == 2 && name[0] == '$' && name[1] == '_')
4524 iterpflags |= OPpITER_DEF;
4528 const PADOFFSET offset = pad_findmy("$_");
4529 if (offset == NOT_IN_PAD || PAD_COMPNAME_FLAGS_isOUR(offset)) {
4530 sv = newGVOP(OP_GV, 0, PL_defgv);
4535 iterpflags |= OPpITER_DEF;
4537 if (expr->op_type == OP_RV2AV || expr->op_type == OP_PADAV) {
4538 expr = mod(force_list(scalar(ref(expr, OP_ITER))), OP_GREPSTART);
4539 iterflags |= OPf_STACKED;
4541 else if (expr->op_type == OP_NULL &&
4542 (expr->op_flags & OPf_KIDS) &&
4543 ((BINOP*)expr)->op_first->op_type == OP_FLOP)
4545 /* Basically turn for($x..$y) into the same as for($x,$y), but we
4546 * set the STACKED flag to indicate that these values are to be
4547 * treated as min/max values by 'pp_iterinit'.
4549 const UNOP* const flip = (UNOP*)((UNOP*)((BINOP*)expr)->op_first)->op_first;
4550 LOGOP* const range = (LOGOP*) flip->op_first;
4551 OP* const left = range->op_first;
4552 OP* const right = left->op_sibling;
4555 range->op_flags &= ~OPf_KIDS;
4556 range->op_first = NULL;
4558 listop = (LISTOP*)newLISTOP(OP_LIST, 0, left, right);
4559 listop->op_first->op_next = range->op_next;
4560 left->op_next = range->op_other;
4561 right->op_next = (OP*)listop;
4562 listop->op_next = listop->op_first;
4565 op_getmad(expr,(OP*)listop,'O');
4569 expr = (OP*)(listop);
4571 iterflags |= OPf_STACKED;
4574 expr = mod(force_list(expr), OP_GREPSTART);
4577 loop = (LOOP*)list(convert(OP_ENTERITER, iterflags,
4578 append_elem(OP_LIST, expr, scalar(sv))));
4579 assert(!loop->op_next);
4580 /* for my $x () sets OPpLVAL_INTRO;
4581 * for our $x () sets OPpOUR_INTRO */
4582 loop->op_private = (U8)iterpflags;
4583 #ifdef PL_OP_SLAB_ALLOC
4586 NewOp(1234,tmp,1,LOOP);
4587 Copy(loop,tmp,1,LISTOP);
4588 S_op_destroy(aTHX_ (OP*)loop);
4592 loop = (LOOP*)PerlMemShared_realloc(loop, sizeof(LOOP));
4594 loop->op_targ = padoff;
4595 wop = newWHILEOP(flags, 1, loop, forline, newOP(OP_ITER, 0), block, cont, 0);
4597 op_getmad(madsv, (OP*)loop, 'v');
4598 PL_copline = forline;
4599 return newSTATEOP(0, label, wop);
4603 Perl_newLOOPEX(pTHX_ I32 type, OP *label)
4608 if (type != OP_GOTO || label->op_type == OP_CONST) {
4609 /* "last()" means "last" */
4610 if (label->op_type == OP_STUB && (label->op_flags & OPf_PARENS))
4611 o = newOP(type, OPf_SPECIAL);
4613 o = newPVOP(type, 0, savesharedpv(label->op_type == OP_CONST
4614 ? SvPVx_nolen_const(((SVOP*)label)->op_sv)
4618 op_getmad(label,o,'L');
4624 /* Check whether it's going to be a goto &function */
4625 if (label->op_type == OP_ENTERSUB
4626 && !(label->op_flags & OPf_STACKED))
4627 label = newUNOP(OP_REFGEN, 0, mod(label, OP_REFGEN));
4628 o = newUNOP(type, OPf_STACKED, label);
4630 PL_hints |= HINT_BLOCK_SCOPE;
4634 /* if the condition is a literal array or hash
4635 (or @{ ... } etc), make a reference to it.
4638 S_ref_array_or_hash(pTHX_ OP *cond)
4641 && (cond->op_type == OP_RV2AV
4642 || cond->op_type == OP_PADAV
4643 || cond->op_type == OP_RV2HV
4644 || cond->op_type == OP_PADHV))
4646 return newUNOP(OP_REFGEN,
4647 0, mod(cond, OP_REFGEN));
4653 /* These construct the optree fragments representing given()
4656 entergiven and enterwhen are LOGOPs; the op_other pointer
4657 points up to the associated leave op. We need this so we
4658 can put it in the context and make break/continue work.
4659 (Also, of course, pp_enterwhen will jump straight to
4660 op_other if the match fails.)
4665 S_newGIVWHENOP(pTHX_ OP *cond, OP *block,
4666 I32 enter_opcode, I32 leave_opcode,
4667 PADOFFSET entertarg)
4673 NewOp(1101, enterop, 1, LOGOP);
4674 enterop->op_type = enter_opcode;
4675 enterop->op_ppaddr = PL_ppaddr[enter_opcode];
4676 enterop->op_flags = (U8) OPf_KIDS;
4677 enterop->op_targ = ((entertarg == NOT_IN_PAD) ? 0 : entertarg);
4678 enterop->op_private = 0;
4680 o = newUNOP(leave_opcode, 0, (OP *) enterop);
4683 enterop->op_first = scalar(cond);
4684 cond->op_sibling = block;
4686 o->op_next = LINKLIST(cond);
4687 cond->op_next = (OP *) enterop;
4690 /* This is a default {} block */
4691 enterop->op_first = block;
4692 enterop->op_flags |= OPf_SPECIAL;
4694 o->op_next = (OP *) enterop;
4697 CHECKOP(enter_opcode, enterop); /* Currently does nothing, since
4698 entergiven and enterwhen both
4701 enterop->op_next = LINKLIST(block);
4702 block->op_next = enterop->op_other = o;
4707 /* Does this look like a boolean operation? For these purposes
4708 a boolean operation is:
4709 - a subroutine call [*]
4710 - a logical connective
4711 - a comparison operator
4712 - a filetest operator, with the exception of -s -M -A -C
4713 - defined(), exists() or eof()
4714 - /$re/ or $foo =~ /$re/
4716 [*] possibly surprising
4720 S_looks_like_bool(pTHX_ const OP *o)
4723 switch(o->op_type) {
4725 return looks_like_bool(cLOGOPo->op_first);
4729 looks_like_bool(cLOGOPo->op_first)
4730 && looks_like_bool(cLOGOPo->op_first->op_sibling));
4734 case OP_NOT: case OP_XOR:
4735 /* Note that OP_DOR is not here */
4737 case OP_EQ: case OP_NE: case OP_LT:
4738 case OP_GT: case OP_LE: case OP_GE:
4740 case OP_I_EQ: case OP_I_NE: case OP_I_LT:
4741 case OP_I_GT: case OP_I_LE: case OP_I_GE:
4743 case OP_SEQ: case OP_SNE: case OP_SLT:
4744 case OP_SGT: case OP_SLE: case OP_SGE:
4748 case OP_FTRREAD: case OP_FTRWRITE: case OP_FTREXEC:
4749 case OP_FTEREAD: case OP_FTEWRITE: case OP_FTEEXEC:
4750 case OP_FTIS: case OP_FTEOWNED: case OP_FTROWNED:
4751 case OP_FTZERO: case OP_FTSOCK: case OP_FTCHR:
4752 case OP_FTBLK: case OP_FTFILE: case OP_FTDIR:
4753 case OP_FTPIPE: case OP_FTLINK: case OP_FTSUID:
4754 case OP_FTSGID: case OP_FTSVTX: case OP_FTTTY:
4755 case OP_FTTEXT: case OP_FTBINARY:
4757 case OP_DEFINED: case OP_EXISTS:
4758 case OP_MATCH: case OP_EOF:
4763 /* Detect comparisons that have been optimized away */
4764 if (cSVOPo->op_sv == &PL_sv_yes
4765 || cSVOPo->op_sv == &PL_sv_no)
4776 Perl_newGIVENOP(pTHX_ OP *cond, OP *block, PADOFFSET defsv_off)
4780 return newGIVWHENOP(
4781 ref_array_or_hash(cond),
4783 OP_ENTERGIVEN, OP_LEAVEGIVEN,
4787 /* If cond is null, this is a default {} block */
4789 Perl_newWHENOP(pTHX_ OP *cond, OP *block)
4791 const bool cond_llb = (!cond || looks_like_bool(cond));
4797 cond_op = newBINOP(OP_SMARTMATCH, OPf_SPECIAL,
4799 scalar(ref_array_or_hash(cond)));
4802 return newGIVWHENOP(
4804 append_elem(block->op_type, block, newOP(OP_BREAK, OPf_SPECIAL)),
4805 OP_ENTERWHEN, OP_LEAVEWHEN, 0);
4809 =for apidoc cv_undef
4811 Clear out all the active components of a CV. This can happen either
4812 by an explicit C<undef &foo>, or by the reference count going to zero.
4813 In the former case, we keep the CvOUTSIDE pointer, so that any anonymous
4814 children can still follow the full lexical scope chain.
4820 Perl_cv_undef(pTHX_ CV *cv)
4824 if (CvFILE(cv) && !CvISXSUB(cv)) {
4825 /* for XSUBs CvFILE point directly to static memory; __FILE__ */
4826 Safefree(CvFILE(cv));
4831 if (!CvISXSUB(cv) && CvROOT(cv)) {
4832 if (SvTYPE(cv) == SVt_PVCV && CvDEPTH(cv))
4833 Perl_croak(aTHX_ "Can't undef active subroutine");
4836 PAD_SAVE_SETNULLPAD();
4838 op_free(CvROOT(cv));
4843 SvPOK_off((SV*)cv); /* forget prototype */
4848 /* remove CvOUTSIDE unless this is an undef rather than a free */
4849 if (!SvREFCNT(cv) && CvOUTSIDE(cv)) {
4850 if (!CvWEAKOUTSIDE(cv))
4851 SvREFCNT_dec(CvOUTSIDE(cv));
4852 CvOUTSIDE(cv) = NULL;
4855 SvREFCNT_dec((SV*)CvXSUBANY(cv).any_ptr);
4858 if (CvISXSUB(cv) && CvXSUB(cv)) {
4861 /* delete all flags except WEAKOUTSIDE */
4862 CvFLAGS(cv) &= CVf_WEAKOUTSIDE;
4866 Perl_cv_ckproto_len(pTHX_ const CV *cv, const GV *gv, const char *p,
4869 /* Can't just use a strcmp on the prototype, as CONSTSUBs "cheat" by
4870 relying on SvCUR, and doubling up the buffer to hold CvFILE(). */
4871 if (((!p != !SvPOK(cv)) /* One has prototype, one has not. */
4872 || (p && (len != SvCUR(cv) /* Not the same length. */
4873 || memNE(p, SvPVX_const(cv), len))))
4874 && ckWARN_d(WARN_PROTOTYPE)) {
4875 SV* const msg = sv_newmortal();
4879 gv_efullname3(name = sv_newmortal(), gv, NULL);
4880 sv_setpv(msg, "Prototype mismatch:");
4882 Perl_sv_catpvf(aTHX_ msg, " sub %"SVf, SVfARG(name));
4884 Perl_sv_catpvf(aTHX_ msg, " (%"SVf")", SVfARG(cv));
4886 sv_catpvs(msg, ": none");
4887 sv_catpvs(msg, " vs ");
4889 Perl_sv_catpvf(aTHX_ msg, "(%.*s)", (int) len, p);
4891 sv_catpvs(msg, "none");
4892 Perl_warner(aTHX_ packWARN(WARN_PROTOTYPE), "%"SVf, SVfARG(msg));
4896 static void const_sv_xsub(pTHX_ CV* cv);
4900 =head1 Optree Manipulation Functions
4902 =for apidoc cv_const_sv
4904 If C<cv> is a constant sub eligible for inlining. returns the constant
4905 value returned by the sub. Otherwise, returns NULL.
4907 Constant subs can be created with C<newCONSTSUB> or as described in
4908 L<perlsub/"Constant Functions">.
4913 Perl_cv_const_sv(pTHX_ CV *cv)
4915 PERL_UNUSED_CONTEXT;
4918 if (!(SvTYPE(cv) == SVt_PVCV || SvTYPE(cv) == SVt_PVFM))
4920 return CvCONST(cv) ? (SV*)CvXSUBANY(cv).any_ptr : NULL;
4923 /* op_const_sv: examine an optree to determine whether it's in-lineable.
4924 * Can be called in 3 ways:
4927 * look for a single OP_CONST with attached value: return the value
4929 * cv && CvCLONE(cv) && !CvCONST(cv)
4931 * examine the clone prototype, and if contains only a single
4932 * OP_CONST referencing a pad const, or a single PADSV referencing
4933 * an outer lexical, return a non-zero value to indicate the CV is
4934 * a candidate for "constizing" at clone time
4938 * We have just cloned an anon prototype that was marked as a const
4939 * candidiate. Try to grab the current value, and in the case of
4940 * PADSV, ignore it if it has multiple references. Return the value.
4944 Perl_op_const_sv(pTHX_ const OP *o, CV *cv)
4952 if (o->op_type == OP_LINESEQ && cLISTOPo->op_first)
4953 o = cLISTOPo->op_first->op_sibling;
4955 for (; o; o = o->op_next) {
4956 const OPCODE type = o->op_type;
4958 if (sv && o->op_next == o)
4960 if (o->op_next != o) {
4961 if (type == OP_NEXTSTATE || type == OP_NULL || type == OP_PUSHMARK)
4963 if (type == OP_DBSTATE)
4966 if (type == OP_LEAVESUB || type == OP_RETURN)
4970 if (type == OP_CONST && cSVOPo->op_sv)
4972 else if (cv && type == OP_CONST) {
4973 sv = PAD_BASE_SV(CvPADLIST(cv), o->op_targ);
4977 else if (cv && type == OP_PADSV) {
4978 if (CvCONST(cv)) { /* newly cloned anon */
4979 sv = PAD_BASE_SV(CvPADLIST(cv), o->op_targ);
4980 /* the candidate should have 1 ref from this pad and 1 ref
4981 * from the parent */
4982 if (!sv || SvREFCNT(sv) != 2)
4989 if (PAD_COMPNAME_FLAGS(o->op_targ) & SVf_FAKE)
4990 sv = &PL_sv_undef; /* an arbitrary non-null value */
5005 Perl_newMYSUB(pTHX_ I32 floor, OP *o, OP *proto, OP *attrs, OP *block)
5008 /* This would be the return value, but the return cannot be reached. */
5009 OP* pegop = newOP(OP_NULL, 0);
5012 PERL_UNUSED_ARG(floor);
5022 Perl_croak(aTHX_ "\"my sub\" not yet implemented");
5024 NORETURN_FUNCTION_END;
5029 Perl_newSUB(pTHX_ I32 floor, OP *o, OP *proto, OP *block)
5031 return Perl_newATTRSUB(aTHX_ floor, o, proto, NULL, block);
5035 Perl_newATTRSUB(pTHX_ I32 floor, OP *o, OP *proto, OP *attrs, OP *block)
5042 register CV *cv = NULL;
5044 /* If the subroutine has no body, no attributes, and no builtin attributes
5045 then it's just a sub declaration, and we may be able to get away with
5046 storing with a placeholder scalar in the symbol table, rather than a
5047 full GV and CV. If anything is present then it will take a full CV to
5049 const I32 gv_fetch_flags
5050 = (block || attrs || (CvFLAGS(PL_compcv) & CVf_BUILTIN_ATTRS)
5052 ? GV_ADDMULTI : GV_ADDMULTI | GV_NOINIT;
5053 const char * const name = o ? SvPVx_nolen_const(cSVOPo->op_sv) : NULL;
5056 assert(proto->op_type == OP_CONST);
5057 ps = SvPVx_const(((SVOP*)proto)->op_sv, ps_len);
5062 if (!name && PERLDB_NAMEANON && CopLINE(PL_curcop)) {
5063 SV * const sv = sv_newmortal();
5064 Perl_sv_setpvf(aTHX_ sv, "%s[%s:%"IVdf"]",
5065 PL_curstash ? "__ANON__" : "__ANON__::__ANON__",
5066 CopFILE(PL_curcop), (IV)CopLINE(PL_curcop));
5067 aname = SvPVX_const(sv);
5072 gv = name ? gv_fetchsv(cSVOPo->op_sv, gv_fetch_flags, SVt_PVCV)
5073 : gv_fetchpv(aname ? aname
5074 : (PL_curstash ? "__ANON__" : "__ANON__::__ANON__"),
5075 gv_fetch_flags, SVt_PVCV);
5077 if (!PL_madskills) {
5086 if (SvTYPE(gv) != SVt_PVGV) { /* Maybe prototype now, and had at
5087 maximum a prototype before. */
5088 if (SvTYPE(gv) > SVt_NULL) {
5089 if (!SvPOK((SV*)gv) && !(SvIOK((SV*)gv) && SvIVX((SV*)gv) == -1)
5090 && ckWARN_d(WARN_PROTOTYPE))
5092 Perl_warner(aTHX_ packWARN(WARN_PROTOTYPE), "Runaway prototype");
5094 cv_ckproto_len((CV*)gv, NULL, ps, ps_len);
5097 sv_setpvn((SV*)gv, ps, ps_len);
5099 sv_setiv((SV*)gv, -1);
5100 SvREFCNT_dec(PL_compcv);
5101 cv = PL_compcv = NULL;
5102 PL_sub_generation++;
5106 cv = (!name || GvCVGEN(gv)) ? NULL : GvCV(gv);
5108 #ifdef GV_UNIQUE_CHECK
5109 if (cv && GvUNIQUE(gv) && SvREADONLY(cv)) {
5110 Perl_croak(aTHX_ "Can't define subroutine %s (GV is unique)", name);
5114 if (!block || !ps || *ps || attrs
5115 || (CvFLAGS(PL_compcv) & CVf_BUILTIN_ATTRS)
5117 || block->op_type == OP_NULL
5122 const_sv = op_const_sv(block, NULL);
5125 const bool exists = CvROOT(cv) || CvXSUB(cv);
5127 #ifdef GV_UNIQUE_CHECK
5128 if (exists && GvUNIQUE(gv)) {
5129 Perl_croak(aTHX_ "Can't redefine unique subroutine %s", name);
5133 /* if the subroutine doesn't exist and wasn't pre-declared
5134 * with a prototype, assume it will be AUTOLOADed,
5135 * skipping the prototype check
5137 if (exists || SvPOK(cv))
5138 cv_ckproto_len(cv, gv, ps, ps_len);
5139 /* already defined (or promised)? */
5140 if (exists || GvASSUMECV(gv)) {
5143 || block->op_type == OP_NULL
5146 if (CvFLAGS(PL_compcv)) {
5147 /* might have had built-in attrs applied */
5148 CvFLAGS(cv) |= (CvFLAGS(PL_compcv) & CVf_BUILTIN_ATTRS);
5150 /* just a "sub foo;" when &foo is already defined */
5151 SAVEFREESV(PL_compcv);
5156 && block->op_type != OP_NULL
5159 if (ckWARN(WARN_REDEFINE)
5161 && (!const_sv || sv_cmp(cv_const_sv(cv), const_sv))))
5163 const line_t oldline = CopLINE(PL_curcop);
5164 if (PL_copline != NOLINE)
5165 CopLINE_set(PL_curcop, PL_copline);
5166 Perl_warner(aTHX_ packWARN(WARN_REDEFINE),
5167 CvCONST(cv) ? "Constant subroutine %s redefined"
5168 : "Subroutine %s redefined", name);
5169 CopLINE_set(PL_curcop, oldline);
5172 if (!PL_minus_c) /* keep old one around for madskills */
5175 /* (PL_madskills unset in used file.) */
5183 SvREFCNT_inc_simple_void_NN(const_sv);
5185 assert(!CvROOT(cv) && !CvCONST(cv));
5186 sv_setpvn((SV*)cv, "", 0); /* prototype is "" */
5187 CvXSUBANY(cv).any_ptr = const_sv;
5188 CvXSUB(cv) = const_sv_xsub;
5194 cv = newCONSTSUB(NULL, name, const_sv);
5196 PL_sub_generation++;
5200 SvREFCNT_dec(PL_compcv);
5208 /* Need to do a C<use attributes $stash_of_cv,\&cv,@attrs>
5209 * before we clobber PL_compcv.
5213 || block->op_type == OP_NULL
5217 /* Might have had built-in attributes applied -- propagate them. */
5218 CvFLAGS(cv) |= (CvFLAGS(PL_compcv) & CVf_BUILTIN_ATTRS);
5219 if (CvGV(cv) && GvSTASH(CvGV(cv)))
5220 stash = GvSTASH(CvGV(cv));
5221 else if (CvSTASH(cv))
5222 stash = CvSTASH(cv);
5224 stash = PL_curstash;
5227 /* possibly about to re-define existing subr -- ignore old cv */
5228 rcv = (SV*)PL_compcv;
5229 if (name && GvSTASH(gv))
5230 stash = GvSTASH(gv);
5232 stash = PL_curstash;
5234 apply_attrs(stash, rcv, attrs, FALSE);
5236 if (cv) { /* must reuse cv if autoloaded */
5243 || block->op_type == OP_NULL) && !PL_madskills
5246 /* got here with just attrs -- work done, so bug out */
5247 SAVEFREESV(PL_compcv);
5250 /* transfer PL_compcv to cv */
5252 CvFLAGS(cv) = CvFLAGS(PL_compcv);
5253 if (!CvWEAKOUTSIDE(cv))
5254 SvREFCNT_dec(CvOUTSIDE(cv));
5255 CvOUTSIDE(cv) = CvOUTSIDE(PL_compcv);
5256 CvOUTSIDE_SEQ(cv) = CvOUTSIDE_SEQ(PL_compcv);
5257 CvOUTSIDE(PL_compcv) = 0;
5258 CvPADLIST(cv) = CvPADLIST(PL_compcv);
5259 CvPADLIST(PL_compcv) = 0;
5260 /* inner references to PL_compcv must be fixed up ... */
5261 pad_fixup_inner_anons(CvPADLIST(cv), PL_compcv, cv);
5262 /* ... before we throw it away */
5263 SvREFCNT_dec(PL_compcv);
5265 if (PERLDB_INTER)/* Advice debugger on the new sub. */
5266 ++PL_sub_generation;
5273 if (strEQ(name, "import")) {
5274 PL_formfeed = (SV*)cv;
5275 Perl_warner(aTHX_ packWARN(WARN_VOID), "%lx\n", (long)cv);
5279 PL_sub_generation++;
5283 CvFILE_set_from_cop(cv, PL_curcop);
5284 CvSTASH(cv) = PL_curstash;
5287 sv_setpvn((SV*)cv, ps, ps_len);
5289 if (PL_error_count) {
5293 const char *s = strrchr(name, ':');
5295 if (strEQ(s, "BEGIN")) {
5296 const char not_safe[] =
5297 "BEGIN not safe after errors--compilation aborted";
5298 if (PL_in_eval & EVAL_KEEPERR)
5299 Perl_croak(aTHX_ not_safe);
5301 /* force display of errors found but not reported */
5302 sv_catpv(ERRSV, not_safe);
5303 Perl_croak(aTHX_ "%"SVf, SVfARG(ERRSV));
5313 CvROOT(cv) = newUNOP(OP_LEAVESUBLV, 0,
5314 mod(scalarseq(block), OP_LEAVESUBLV));
5315 block->op_attached = 1;
5318 /* This makes sub {}; work as expected. */
5319 if (block->op_type == OP_STUB) {
5320 OP* const newblock = newSTATEOP(0, NULL, 0);
5322 op_getmad(block,newblock,'B');
5329 block->op_attached = 1;
5330 CvROOT(cv) = newUNOP(OP_LEAVESUB, 0, scalarseq(block));
5332 CvROOT(cv)->op_private |= OPpREFCOUNTED;
5333 OpREFCNT_set(CvROOT(cv), 1);
5334 CvSTART(cv) = LINKLIST(CvROOT(cv));
5335 CvROOT(cv)->op_next = 0;
5336 CALL_PEEP(CvSTART(cv));
5338 /* now that optimizer has done its work, adjust pad values */
5340 pad_tidy(CvCLONE(cv) ? padtidy_SUBCLONE : padtidy_SUB);
5343 assert(!CvCONST(cv));
5344 if (ps && !*ps && op_const_sv(block, cv))
5348 if (name || aname) {
5350 const char * const tname = (name ? name : aname);
5352 if (PERLDB_SUBLINE && PL_curstash != PL_debstash) {
5353 SV * const sv = newSV(0);
5354 SV * const tmpstr = sv_newmortal();
5355 GV * const db_postponed = gv_fetchpvs("DB::postponed",
5356 GV_ADDMULTI, SVt_PVHV);
5359 Perl_sv_setpvf(aTHX_ sv, "%s:%ld-%ld",
5361 (long)PL_subline, (long)CopLINE(PL_curcop));
5362 gv_efullname3(tmpstr, gv, NULL);
5363 hv_store(GvHV(PL_DBsub), SvPVX_const(tmpstr), SvCUR(tmpstr), sv, 0);
5364 hv = GvHVn(db_postponed);
5365 if (HvFILL(hv) > 0 && hv_exists(hv, SvPVX_const(tmpstr), SvCUR(tmpstr))) {
5366 CV * const pcv = GvCV(db_postponed);
5372 call_sv((SV*)pcv, G_DISCARD);
5377 if ((s = strrchr(tname,':')))
5382 if (*s != 'B' && *s != 'E' && *s != 'C' && *s != 'I' && *s != 'U')
5385 if (strEQ(s, "BEGIN") && !PL_error_count) {
5386 const I32 oldscope = PL_scopestack_ix;
5388 SAVECOPFILE(&PL_compiling);
5389 SAVECOPLINE(&PL_compiling);
5392 PL_beginav = newAV();
5393 DEBUG_x( dump_sub(gv) );
5394 av_push(PL_beginav, (SV*)cv);
5395 GvCV(gv) = 0; /* cv has been hijacked */
5396 call_list(oldscope, PL_beginav);
5398 PL_curcop = &PL_compiling;
5399 CopHINTS_set(&PL_compiling, PL_hints);
5402 else if (strEQ(s, "END") && !PL_error_count) {
5405 DEBUG_x( dump_sub(gv) );
5406 av_unshift(PL_endav, 1);
5407 av_store(PL_endav, 0, (SV*)cv);
5408 GvCV(gv) = 0; /* cv has been hijacked */
5410 else if (strEQ(s, "UNITCHECK") && !PL_error_count) {
5411 /* It's never too late to run a unitcheck block */
5412 if (!PL_unitcheckav)
5413 PL_unitcheckav = newAV();
5414 DEBUG_x( dump_sub(gv) );
5415 av_unshift(PL_unitcheckav, 1);
5416 av_store(PL_unitcheckav, 0, (SV*)cv);
5417 GvCV(gv) = 0; /* cv has been hijacked */
5419 else if (strEQ(s, "CHECK") && !PL_error_count) {
5421 PL_checkav = newAV();
5422 DEBUG_x( dump_sub(gv) );
5423 if (PL_main_start && ckWARN(WARN_VOID))
5424 Perl_warner(aTHX_ packWARN(WARN_VOID), "Too late to run CHECK block");
5425 av_unshift(PL_checkav, 1);
5426 av_store(PL_checkav, 0, (SV*)cv);
5427 GvCV(gv) = 0; /* cv has been hijacked */
5429 else if (strEQ(s, "INIT") && !PL_error_count) {
5431 PL_initav = newAV();
5432 DEBUG_x( dump_sub(gv) );
5433 if (PL_main_start && ckWARN(WARN_VOID))
5434 Perl_warner(aTHX_ packWARN(WARN_VOID), "Too late to run INIT block");
5435 av_push(PL_initav, (SV*)cv);
5436 GvCV(gv) = 0; /* cv has been hijacked */
5441 PL_copline = NOLINE;
5446 /* XXX unsafe for threads if eval_owner isn't held */
5448 =for apidoc newCONSTSUB
5450 Creates a constant sub equivalent to Perl C<sub FOO () { 123 }> which is
5451 eligible for inlining at compile-time.
5457 Perl_newCONSTSUB(pTHX_ HV *stash, const char *name, SV *sv)
5462 const char *const temp_p = CopFILE(PL_curcop);
5463 const STRLEN len = temp_p ? strlen(temp_p) : 0;
5465 SV *const temp_sv = CopFILESV(PL_curcop);
5467 const char *const temp_p = temp_sv ? SvPV_const(temp_sv, len) : NULL;
5469 char *const file = savepvn(temp_p, temp_p ? len : 0);
5473 SAVECOPLINE(PL_curcop);
5474 CopLINE_set(PL_curcop, PL_copline);
5477 PL_hints &= ~HINT_BLOCK_SCOPE;
5480 SAVESPTR(PL_curstash);
5481 SAVECOPSTASH(PL_curcop);
5482 PL_curstash = stash;
5483 CopSTASH_set(PL_curcop,stash);
5486 /* file becomes the CvFILE. For an XS, it's supposed to be static storage,
5487 and so doesn't get free()d. (It's expected to be from the C pre-
5488 processor __FILE__ directive). But we need a dynamically allocated one,
5489 and we need it to get freed. */
5490 cv = newXS_flags(name, const_sv_xsub, file, "", XS_DYNAMIC_FILENAME);
5491 CvXSUBANY(cv).any_ptr = sv;
5497 CopSTASH_free(PL_curcop);
5505 Perl_newXS_flags(pTHX_ const char *name, XSUBADDR_t subaddr,
5506 const char *const filename, const char *const proto,
5509 CV *cv = newXS(name, subaddr, filename);
5511 if (flags & XS_DYNAMIC_FILENAME) {
5512 /* We need to "make arrangements" (ie cheat) to ensure that the
5513 filename lasts as long as the PVCV we just created, but also doesn't
5515 STRLEN filename_len = strlen(filename);
5516 STRLEN proto_and_file_len = filename_len;
5517 char *proto_and_file;
5521 proto_len = strlen(proto);
5522 proto_and_file_len += proto_len;
5524 Newx(proto_and_file, proto_and_file_len + 1, char);
5525 Copy(proto, proto_and_file, proto_len, char);
5526 Copy(filename, proto_and_file + proto_len, filename_len + 1, char);
5529 proto_and_file = savepvn(filename, filename_len);
5532 /* This gets free()d. :-) */
5533 sv_usepvn_flags((SV*)cv, proto_and_file, proto_and_file_len,
5534 SV_HAS_TRAILING_NUL);
5536 /* This gives us the correct prototype, rather than one with the
5537 file name appended. */
5538 SvCUR_set(cv, proto_len);
5542 CvFILE(cv) = proto_and_file + proto_len;
5544 sv_setpv((SV *)cv, proto);
5550 =for apidoc U||newXS
5552 Used by C<xsubpp> to hook up XSUBs as Perl subs. I<filename> needs to be
5553 static storage, as it is used directly as CvFILE(), without a copy being made.
5559 Perl_newXS(pTHX_ const char *name, XSUBADDR_t subaddr, const char *filename)
5562 GV * const gv = gv_fetchpv(name ? name :
5563 (PL_curstash ? "__ANON__" : "__ANON__::__ANON__"),
5564 GV_ADDMULTI, SVt_PVCV);
5568 Perl_croak(aTHX_ "panic: no address for '%s' in '%s'", name, filename);
5570 if ((cv = (name ? GvCV(gv) : NULL))) {
5572 /* just a cached method */
5576 else if (CvROOT(cv) || CvXSUB(cv) || GvASSUMECV(gv)) {
5577 /* already defined (or promised) */
5578 /* XXX It's possible for this HvNAME_get to return null, and get passed into strEQ */
5579 if (ckWARN(WARN_REDEFINE)) {
5580 GV * const gvcv = CvGV(cv);
5582 HV * const stash = GvSTASH(gvcv);
5584 const char *redefined_name = HvNAME_get(stash);
5585 if ( strEQ(redefined_name,"autouse") ) {
5586 const line_t oldline = CopLINE(PL_curcop);
5587 if (PL_copline != NOLINE)
5588 CopLINE_set(PL_curcop, PL_copline);
5589 Perl_warner(aTHX_ packWARN(WARN_REDEFINE),
5590 CvCONST(cv) ? "Constant subroutine %s redefined"
5591 : "Subroutine %s redefined"
5593 CopLINE_set(PL_curcop, oldline);
5603 if (cv) /* must reuse cv if autoloaded */
5607 sv_upgrade((SV *)cv, SVt_PVCV);
5611 PL_sub_generation++;
5615 (void)gv_fetchfile(filename);
5616 CvFILE(cv) = (char *)filename; /* NOTE: not copied, as it is expected to be
5617 an external constant string */
5619 CvXSUB(cv) = subaddr;
5622 const char *s = strrchr(name,':');
5628 if (*s != 'B' && *s != 'E' && *s != 'C' && *s != 'I')
5631 if (strEQ(s, "BEGIN")) {
5633 PL_beginav = newAV();
5634 av_push(PL_beginav, (SV*)cv);
5635 GvCV(gv) = 0; /* cv has been hijacked */
5637 else if (strEQ(s, "END")) {
5640 av_unshift(PL_endav, 1);
5641 av_store(PL_endav, 0, (SV*)cv);
5642 GvCV(gv) = 0; /* cv has been hijacked */
5644 else if (strEQ(s, "CHECK")) {
5646 PL_checkav = newAV();
5647 if (PL_main_start && ckWARN(WARN_VOID))
5648 Perl_warner(aTHX_ packWARN(WARN_VOID), "Too late to run CHECK block");
5649 av_unshift(PL_checkav, 1);
5650 av_store(PL_checkav, 0, (SV*)cv);
5651 GvCV(gv) = 0; /* cv has been hijacked */
5653 else if (strEQ(s, "INIT")) {
5655 PL_initav = newAV();
5656 if (PL_main_start && ckWARN(WARN_VOID))
5657 Perl_warner(aTHX_ packWARN(WARN_VOID), "Too late to run INIT block");
5658 av_push(PL_initav, (SV*)cv);
5659 GvCV(gv) = 0; /* cv has been hijacked */
5674 Perl_newFORM(pTHX_ I32 floor, OP *o, OP *block)
5679 OP* pegop = newOP(OP_NULL, 0);
5683 ? gv_fetchsv(cSVOPo->op_sv, GV_ADD, SVt_PVFM)
5684 : gv_fetchpvs("STDOUT", GV_ADD|GV_NOTQUAL, SVt_PVFM);
5686 #ifdef GV_UNIQUE_CHECK
5688 Perl_croak(aTHX_ "Bad symbol for form (GV is unique)");
5692 if ((cv = GvFORM(gv))) {
5693 if (ckWARN(WARN_REDEFINE)) {
5694 const line_t oldline = CopLINE(PL_curcop);
5695 if (PL_copline != NOLINE)
5696 CopLINE_set(PL_curcop, PL_copline);
5697 Perl_warner(aTHX_ packWARN(WARN_REDEFINE),
5698 o ? "Format %"SVf" redefined"
5699 : "Format STDOUT redefined", SVfARG(cSVOPo->op_sv));
5700 CopLINE_set(PL_curcop, oldline);
5707 CvFILE_set_from_cop(cv, PL_curcop);
5710 pad_tidy(padtidy_FORMAT);
5711 CvROOT(cv) = newUNOP(OP_LEAVEWRITE, 0, scalarseq(block));
5712 CvROOT(cv)->op_private |= OPpREFCOUNTED;
5713 OpREFCNT_set(CvROOT(cv), 1);
5714 CvSTART(cv) = LINKLIST(CvROOT(cv));
5715 CvROOT(cv)->op_next = 0;
5716 CALL_PEEP(CvSTART(cv));
5718 op_getmad(o,pegop,'n');
5719 op_getmad_weak(block, pegop, 'b');
5723 PL_copline = NOLINE;
5731 Perl_newANONLIST(pTHX_ OP *o)
5733 return convert(OP_ANONLIST, OPf_SPECIAL, o);
5737 Perl_newANONHASH(pTHX_ OP *o)
5739 return convert(OP_ANONHASH, OPf_SPECIAL, o);
5743 Perl_newANONSUB(pTHX_ I32 floor, OP *proto, OP *block)
5745 return newANONATTRSUB(floor, proto, NULL, block);
5749 Perl_newANONATTRSUB(pTHX_ I32 floor, OP *proto, OP *attrs, OP *block)
5751 return newUNOP(OP_REFGEN, 0,
5752 newSVOP(OP_ANONCODE, 0,
5753 (SV*)newATTRSUB(floor, 0, proto, attrs, block)));
5757 Perl_oopsAV(pTHX_ OP *o)
5760 switch (o->op_type) {
5762 o->op_type = OP_PADAV;
5763 o->op_ppaddr = PL_ppaddr[OP_PADAV];
5764 return ref(o, OP_RV2AV);
5767 o->op_type = OP_RV2AV;
5768 o->op_ppaddr = PL_ppaddr[OP_RV2AV];
5773 if (ckWARN_d(WARN_INTERNAL))
5774 Perl_warner(aTHX_ packWARN(WARN_INTERNAL), "oops: oopsAV");
5781 Perl_oopsHV(pTHX_ OP *o)
5784 switch (o->op_type) {
5787 o->op_type = OP_PADHV;
5788 o->op_ppaddr = PL_ppaddr[OP_PADHV];
5789 return ref(o, OP_RV2HV);
5793 o->op_type = OP_RV2HV;
5794 o->op_ppaddr = PL_ppaddr[OP_RV2HV];
5799 if (ckWARN_d(WARN_INTERNAL))
5800 Perl_warner(aTHX_ packWARN(WARN_INTERNAL), "oops: oopsHV");
5807 Perl_newAVREF(pTHX_ OP *o)
5810 if (o->op_type == OP_PADANY) {
5811 o->op_type = OP_PADAV;
5812 o->op_ppaddr = PL_ppaddr[OP_PADAV];
5815 else if ((o->op_type == OP_RV2AV || o->op_type == OP_PADAV)
5816 && ckWARN(WARN_DEPRECATED)) {
5817 Perl_warner(aTHX_ packWARN(WARN_DEPRECATED),
5818 "Using an array as a reference is deprecated");
5820 return newUNOP(OP_RV2AV, 0, scalar(o));
5824 Perl_newGVREF(pTHX_ I32 type, OP *o)
5826 if (type == OP_MAPSTART || type == OP_GREPSTART || type == OP_SORT)
5827 return newUNOP(OP_NULL, 0, o);
5828 return ref(newUNOP(OP_RV2GV, OPf_REF, o), type);
5832 Perl_newHVREF(pTHX_ OP *o)
5835 if (o->op_type == OP_PADANY) {
5836 o->op_type = OP_PADHV;
5837 o->op_ppaddr = PL_ppaddr[OP_PADHV];
5840 else if ((o->op_type == OP_RV2HV || o->op_type == OP_PADHV)
5841 && ckWARN(WARN_DEPRECATED)) {
5842 Perl_warner(aTHX_ packWARN(WARN_DEPRECATED),
5843 "Using a hash as a reference is deprecated");
5845 return newUNOP(OP_RV2HV, 0, scalar(o));
5849 Perl_newCVREF(pTHX_ I32 flags, OP *o)
5851 return newUNOP(OP_RV2CV, flags, scalar(o));
5855 Perl_newSVREF(pTHX_ OP *o)
5858 if (o->op_type == OP_PADANY) {
5859 o->op_type = OP_PADSV;
5860 o->op_ppaddr = PL_ppaddr[OP_PADSV];
5863 return newUNOP(OP_RV2SV, 0, scalar(o));
5866 /* Check routines. See the comments at the top of this file for details
5867 * on when these are called */
5870 Perl_ck_anoncode(pTHX_ OP *o)
5872 cSVOPo->op_targ = pad_add_anon(cSVOPo->op_sv, o->op_type);
5874 cSVOPo->op_sv = NULL;
5879 Perl_ck_bitop(pTHX_ OP *o)
5882 #define OP_IS_NUMCOMPARE(op) \
5883 ((op) == OP_LT || (op) == OP_I_LT || \
5884 (op) == OP_GT || (op) == OP_I_GT || \
5885 (op) == OP_LE || (op) == OP_I_LE || \
5886 (op) == OP_GE || (op) == OP_I_GE || \
5887 (op) == OP_EQ || (op) == OP_I_EQ || \
5888 (op) == OP_NE || (op) == OP_I_NE || \
5889 (op) == OP_NCMP || (op) == OP_I_NCMP)
5890 o->op_private = (U8)(PL_hints & HINT_INTEGER);
5891 if (!(o->op_flags & OPf_STACKED) /* Not an assignment */
5892 && (o->op_type == OP_BIT_OR
5893 || o->op_type == OP_BIT_AND
5894 || o->op_type == OP_BIT_XOR))
5896 const OP * const left = cBINOPo->op_first;
5897 const OP * const right = left->op_sibling;
5898 if ((OP_IS_NUMCOMPARE(left->op_type) &&
5899 (left->op_flags & OPf_PARENS) == 0) ||
5900 (OP_IS_NUMCOMPARE(right->op_type) &&
5901 (right->op_flags & OPf_PARENS) == 0))
5902 if (ckWARN(WARN_PRECEDENCE))
5903 Perl_warner(aTHX_ packWARN(WARN_PRECEDENCE),
5904 "Possible precedence problem on bitwise %c operator",
5905 o->op_type == OP_BIT_OR ? '|'
5906 : o->op_type == OP_BIT_AND ? '&' : '^'
5913 Perl_ck_concat(pTHX_ OP *o)
5915 const OP * const kid = cUNOPo->op_first;
5916 PERL_UNUSED_CONTEXT;
5917 if (kid->op_type == OP_CONCAT && !(kid->op_private & OPpTARGET_MY) &&
5918 !(kUNOP->op_first->op_flags & OPf_MOD))
5919 o->op_flags |= OPf_STACKED;
5924 Perl_ck_spair(pTHX_ OP *o)
5927 if (o->op_flags & OPf_KIDS) {
5930 const OPCODE type = o->op_type;
5931 o = modkids(ck_fun(o), type);
5932 kid = cUNOPo->op_first;
5933 newop = kUNOP->op_first->op_sibling;
5935 const OPCODE type = newop->op_type;
5936 if (newop->op_sibling || !(PL_opargs[type] & OA_RETSCALAR) ||
5937 type == OP_PADAV || type == OP_PADHV ||
5938 type == OP_RV2AV || type == OP_RV2HV)
5942 op_getmad(kUNOP->op_first,newop,'K');
5944 op_free(kUNOP->op_first);
5946 kUNOP->op_first = newop;
5948 o->op_ppaddr = PL_ppaddr[++o->op_type];
5953 Perl_ck_delete(pTHX_ OP *o)
5957 if (o->op_flags & OPf_KIDS) {
5958 OP * const kid = cUNOPo->op_first;
5959 switch (kid->op_type) {
5961 o->op_flags |= OPf_SPECIAL;
5964 o->op_private |= OPpSLICE;
5967 o->op_flags |= OPf_SPECIAL;
5972 Perl_croak(aTHX_ "%s argument is not a HASH or ARRAY element or slice",
5981 Perl_ck_die(pTHX_ OP *o)
5984 if (VMSISH_HUSHED) o->op_private |= OPpHUSH_VMSISH;
5990 Perl_ck_eof(pTHX_ OP *o)
5994 if (o->op_flags & OPf_KIDS) {
5995 if (cLISTOPo->op_first->op_type == OP_STUB) {
5997 = newUNOP(o->op_type, OPf_SPECIAL, newGVOP(OP_GV, 0, PL_argvgv));
5999 op_getmad(o,newop,'O');
6011 Perl_ck_eval(pTHX_ OP *o)
6014 PL_hints |= HINT_BLOCK_SCOPE;
6015 if (o->op_flags & OPf_KIDS) {
6016 SVOP * const kid = (SVOP*)cUNOPo->op_first;
6019 o->op_flags &= ~OPf_KIDS;
6022 else if (kid->op_type == OP_LINESEQ || kid->op_type == OP_STUB) {
6028 cUNOPo->op_first = 0;
6033 NewOp(1101, enter, 1, LOGOP);
6034 enter->op_type = OP_ENTERTRY;
6035 enter->op_ppaddr = PL_ppaddr[OP_ENTERTRY];
6036 enter->op_private = 0;
6038 /* establish postfix order */
6039 enter->op_next = (OP*)enter;
6041 o = prepend_elem(OP_LINESEQ, (OP*)enter, (OP*)kid);
6042 o->op_type = OP_LEAVETRY;
6043 o->op_ppaddr = PL_ppaddr[OP_LEAVETRY];
6044 enter->op_other = o;
6045 op_getmad(oldo,o,'O');
6059 o = newUNOP(OP_ENTEREVAL, 0, newDEFSVOP());
6060 op_getmad(oldo,o,'O');
6062 o->op_targ = (PADOFFSET)PL_hints;
6063 if ((PL_hints & HINT_LOCALIZE_HH) != 0 && GvHV(PL_hintgv)) {
6064 /* Store a copy of %^H that pp_entereval can pick up */
6065 OP *hhop = newSVOP(OP_CONST, 0,
6066 (SV*)Perl_hv_copy_hints_hv(aTHX_ GvHV(PL_hintgv)));
6067 cUNOPo->op_first->op_sibling = hhop;
6068 o->op_private |= OPpEVAL_HAS_HH;
6074 Perl_ck_exit(pTHX_ OP *o)
6077 HV * const table = GvHV(PL_hintgv);
6079 SV * const * const svp = hv_fetchs(table, "vmsish_exit", FALSE);
6080 if (svp && *svp && SvTRUE(*svp))
6081 o->op_private |= OPpEXIT_VMSISH;
6083 if (VMSISH_HUSHED) o->op_private |= OPpHUSH_VMSISH;
6089 Perl_ck_exec(pTHX_ OP *o)
6091 if (o->op_flags & OPf_STACKED) {
6094 kid = cUNOPo->op_first->op_sibling;
6095 if (kid->op_type == OP_RV2GV)
6104 Perl_ck_exists(pTHX_ OP *o)
6108 if (o->op_flags & OPf_KIDS) {
6109 OP * const kid = cUNOPo->op_first;
6110 if (kid->op_type == OP_ENTERSUB) {
6111 (void) ref(kid, o->op_type);
6112 if (kid->op_type != OP_RV2CV && !PL_error_count)
6113 Perl_croak(aTHX_ "%s argument is not a subroutine name",
6115 o->op_private |= OPpEXISTS_SUB;
6117 else if (kid->op_type == OP_AELEM)
6118 o->op_flags |= OPf_SPECIAL;
6119 else if (kid->op_type != OP_HELEM)
6120 Perl_croak(aTHX_ "%s argument is not a HASH or ARRAY element",
6128 Perl_ck_rvconst(pTHX_ register OP *o)
6131 SVOP * const kid = (SVOP*)cUNOPo->op_first;
6133 o->op_private |= (PL_hints & HINT_STRICT_REFS);
6134 if (o->op_type == OP_RV2CV)
6135 o->op_private &= ~1;
6137 if (kid->op_type == OP_CONST) {
6140 SV * const kidsv = kid->op_sv;
6142 /* Is it a constant from cv_const_sv()? */
6143 if (SvROK(kidsv) && SvREADONLY(kidsv)) {
6144 SV * const rsv = SvRV(kidsv);
6145 const svtype type = SvTYPE(rsv);
6146 const char *badtype = NULL;
6148 switch (o->op_type) {
6150 if (type > SVt_PVMG)
6151 badtype = "a SCALAR";
6154 if (type != SVt_PVAV)
6155 badtype = "an ARRAY";
6158 if (type != SVt_PVHV)
6162 if (type != SVt_PVCV)
6167 Perl_croak(aTHX_ "Constant is not %s reference", badtype);
6170 else if ((o->op_type == OP_RV2HV || o->op_type == OP_RV2SV) &&
6171 (PL_hints & HINT_STRICT_REFS) && SvPOK(kidsv)) {
6172 /* If this is an access to a stash, disable "strict refs", because
6173 * stashes aren't auto-vivified at compile-time (unless we store
6174 * symbols in them), and we don't want to produce a run-time
6175 * stricture error when auto-vivifying the stash. */
6176 const char *s = SvPV_nolen(kidsv);
6177 const STRLEN l = SvCUR(kidsv);
6178 if (l > 1 && s[l-1] == ':' && s[l-2] == ':')
6179 o->op_private &= ~HINT_STRICT_REFS;
6181 if ((o->op_private & HINT_STRICT_REFS) && (kid->op_private & OPpCONST_BARE)) {
6182 const char *badthing;
6183 switch (o->op_type) {
6185 badthing = "a SCALAR";
6188 badthing = "an ARRAY";
6191 badthing = "a HASH";
6199 "Can't use bareword (\"%"SVf"\") as %s ref while \"strict refs\" in use",
6200 SVfARG(kidsv), badthing);
6203 * This is a little tricky. We only want to add the symbol if we
6204 * didn't add it in the lexer. Otherwise we get duplicate strict
6205 * warnings. But if we didn't add it in the lexer, we must at
6206 * least pretend like we wanted to add it even if it existed before,
6207 * or we get possible typo warnings. OPpCONST_ENTERED says
6208 * whether the lexer already added THIS instance of this symbol.
6210 iscv = (o->op_type == OP_RV2CV) * 2;
6212 gv = gv_fetchsv(kidsv,
6213 iscv | !(kid->op_private & OPpCONST_ENTERED),
6216 : o->op_type == OP_RV2SV
6218 : o->op_type == OP_RV2AV
6220 : o->op_type == OP_RV2HV
6223 } while (!gv && !(kid->op_private & OPpCONST_ENTERED) && !iscv++);
6225 kid->op_type = OP_GV;
6226 SvREFCNT_dec(kid->op_sv);
6228 /* XXX hack: dependence on sizeof(PADOP) <= sizeof(SVOP) */
6229 kPADOP->op_padix = pad_alloc(OP_GV, SVs_PADTMP);
6230 SvREFCNT_dec(PAD_SVl(kPADOP->op_padix));
6232 PAD_SETSV(kPADOP->op_padix, (SV*) SvREFCNT_inc_simple_NN(gv));
6234 kid->op_sv = SvREFCNT_inc_simple_NN(gv);
6236 kid->op_private = 0;
6237 kid->op_ppaddr = PL_ppaddr[OP_GV];
6244 Perl_ck_ftst(pTHX_ OP *o)
6247 const I32 type = o->op_type;
6249 if (o->op_flags & OPf_REF) {
6252 else if (o->op_flags & OPf_KIDS && cUNOPo->op_first->op_type != OP_STUB) {
6253 SVOP * const kid = (SVOP*)cUNOPo->op_first;
6254 const OPCODE kidtype = kid->op_type;
6256 if (kidtype == OP_CONST && (kid->op_private & OPpCONST_BARE)) {
6257 OP * const newop = newGVOP(type, OPf_REF,
6258 gv_fetchsv(kid->op_sv, GV_ADD, SVt_PVIO));
6260 op_getmad(o,newop,'O');
6266 if ((PL_hints & HINT_FILETEST_ACCESS) && OP_IS_FILETEST_ACCESS(o))
6267 o->op_private |= OPpFT_ACCESS;
6268 if (PL_check[kidtype] == MEMBER_TO_FPTR(Perl_ck_ftst)
6269 && kidtype != OP_STAT && kidtype != OP_LSTAT)
6270 o->op_private |= OPpFT_STACKED;
6278 if (type == OP_FTTTY)
6279 o = newGVOP(type, OPf_REF, PL_stdingv);
6281 o = newUNOP(type, 0, newDEFSVOP());
6282 op_getmad(oldo,o,'O');
6288 Perl_ck_fun(pTHX_ OP *o)
6291 const int type = o->op_type;
6292 register I32 oa = PL_opargs[type] >> OASHIFT;
6294 if (o->op_flags & OPf_STACKED) {
6295 if ((oa & OA_OPTIONAL) && (oa >> 4) && !((oa >> 4) & OA_OPTIONAL))
6298 return no_fh_allowed(o);
6301 if (o->op_flags & OPf_KIDS) {
6302 OP **tokid = &cLISTOPo->op_first;
6303 register OP *kid = cLISTOPo->op_first;
6307 if (kid->op_type == OP_PUSHMARK ||
6308 (kid->op_type == OP_NULL && kid->op_targ == OP_PUSHMARK))
6310 tokid = &kid->op_sibling;
6311 kid = kid->op_sibling;
6313 if (!kid && PL_opargs[type] & OA_DEFGV)
6314 *tokid = kid = newDEFSVOP();
6318 sibl = kid->op_sibling;
6320 if (!sibl && kid->op_type == OP_STUB) {
6327 /* list seen where single (scalar) arg expected? */
6328 if (numargs == 1 && !(oa >> 4)
6329 && kid->op_type == OP_LIST && type != OP_SCALAR)
6331 return too_many_arguments(o,PL_op_desc[type]);
6344 if ((type == OP_PUSH || type == OP_UNSHIFT)
6345 && !kid->op_sibling && ckWARN(WARN_SYNTAX))
6346 Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
6347 "Useless use of %s with no values",
6350 if (kid->op_type == OP_CONST &&
6351 (kid->op_private & OPpCONST_BARE))
6353 OP * const newop = newAVREF(newGVOP(OP_GV, 0,
6354 gv_fetchsv(((SVOP*)kid)->op_sv, GV_ADD, SVt_PVAV) ));
6355 if (ckWARN2(WARN_DEPRECATED, WARN_SYNTAX))
6356 Perl_warner(aTHX_ packWARN2(WARN_DEPRECATED, WARN_SYNTAX),
6357 "Array @%"SVf" missing the @ in argument %"IVdf" of %s()",
6358 SVfARG(((SVOP*)kid)->op_sv), (IV)numargs, PL_op_desc[type]);
6360 op_getmad(kid,newop,'K');
6365 kid->op_sibling = sibl;
6368 else if (kid->op_type != OP_RV2AV && kid->op_type != OP_PADAV)
6369 bad_type(numargs, "array", PL_op_desc[type], kid);
6373 if (kid->op_type == OP_CONST &&
6374 (kid->op_private & OPpCONST_BARE))
6376 OP * const newop = newHVREF(newGVOP(OP_GV, 0,
6377 gv_fetchsv(((SVOP*)kid)->op_sv, GV_ADD, SVt_PVHV) ));
6378 if (ckWARN2(WARN_DEPRECATED, WARN_SYNTAX))
6379 Perl_warner(aTHX_ packWARN2(WARN_DEPRECATED, WARN_SYNTAX),
6380 "Hash %%%"SVf" missing the %% in argument %"IVdf" of %s()",
6381 SVfARG(((SVOP*)kid)->op_sv), (IV)numargs, PL_op_desc[type]);
6383 op_getmad(kid,newop,'K');
6388 kid->op_sibling = sibl;
6391 else if (kid->op_type != OP_RV2HV && kid->op_type != OP_PADHV)
6392 bad_type(numargs, "hash", PL_op_desc[type], kid);
6397 OP * const newop = newUNOP(OP_NULL, 0, kid);
6398 kid->op_sibling = 0;
6400 newop->op_next = newop;
6402 kid->op_sibling = sibl;
6407 if (kid->op_type != OP_GV && kid->op_type != OP_RV2GV) {
6408 if (kid->op_type == OP_CONST &&
6409 (kid->op_private & OPpCONST_BARE))
6411 OP * const newop = newGVOP(OP_GV, 0,
6412 gv_fetchsv(((SVOP*)kid)->op_sv, GV_ADD, SVt_PVIO));
6413 if (!(o->op_private & 1) && /* if not unop */
6414 kid == cLISTOPo->op_last)
6415 cLISTOPo->op_last = newop;
6417 op_getmad(kid,newop,'K');
6423 else if (kid->op_type == OP_READLINE) {
6424 /* neophyte patrol: open(<FH>), close(<FH>) etc. */
6425 bad_type(numargs, "HANDLE", OP_DESC(o), kid);
6428 I32 flags = OPf_SPECIAL;
6432 /* is this op a FH constructor? */
6433 if (is_handle_constructor(o,numargs)) {
6434 const char *name = NULL;
6438 /* Set a flag to tell rv2gv to vivify
6439 * need to "prove" flag does not mean something
6440 * else already - NI-S 1999/05/07
6443 if (kid->op_type == OP_PADSV) {
6445 = PAD_COMPNAME_SV(kid->op_targ);
6446 name = SvPV_const(namesv, len);
6448 else if (kid->op_type == OP_RV2SV
6449 && kUNOP->op_first->op_type == OP_GV)
6451 GV * const gv = cGVOPx_gv(kUNOP->op_first);
6453 len = GvNAMELEN(gv);
6455 else if (kid->op_type == OP_AELEM
6456 || kid->op_type == OP_HELEM)
6459 OP *op = ((BINOP*)kid)->op_first;
6463 const char * const a =
6464 kid->op_type == OP_AELEM ?
6466 if (((op->op_type == OP_RV2AV) ||
6467 (op->op_type == OP_RV2HV)) &&
6468 (firstop = ((UNOP*)op)->op_first) &&
6469 (firstop->op_type == OP_GV)) {
6470 /* packagevar $a[] or $h{} */
6471 GV * const gv = cGVOPx_gv(firstop);
6479 else if (op->op_type == OP_PADAV
6480 || op->op_type == OP_PADHV) {
6481 /* lexicalvar $a[] or $h{} */
6482 const char * const padname =
6483 PAD_COMPNAME_PV(op->op_targ);
6492 name = SvPV_const(tmpstr, len);
6497 name = "__ANONIO__";
6504 targ = pad_alloc(OP_RV2GV, SVs_PADTMP);
6505 namesv = PAD_SVl(targ);
6506 SvUPGRADE(namesv, SVt_PV);
6508 sv_setpvn(namesv, "$", 1);
6509 sv_catpvn(namesv, name, len);
6512 kid->op_sibling = 0;
6513 kid = newUNOP(OP_RV2GV, flags, scalar(kid));
6514 kid->op_targ = targ;
6515 kid->op_private |= priv;
6517 kid->op_sibling = sibl;
6523 mod(scalar(kid), type);
6527 tokid = &kid->op_sibling;
6528 kid = kid->op_sibling;
6531 if (kid && kid->op_type != OP_STUB)
6532 return too_many_arguments(o,OP_DESC(o));
6533 o->op_private |= numargs;
6535 /* FIXME - should the numargs move as for the PERL_MAD case? */
6536 o->op_private |= numargs;
6538 return too_many_arguments(o,OP_DESC(o));
6542 else if (PL_opargs[type] & OA_DEFGV) {
6544 OP *newop = newUNOP(type, 0, newDEFSVOP());
6545 op_getmad(o,newop,'O');
6548 /* Ordering of these two is important to keep f_map.t passing. */
6550 return newUNOP(type, 0, newDEFSVOP());
6555 while (oa & OA_OPTIONAL)
6557 if (oa && oa != OA_LIST)
6558 return too_few_arguments(o,OP_DESC(o));
6564 Perl_ck_glob(pTHX_ OP *o)
6570 if ((o->op_flags & OPf_KIDS) && !cLISTOPo->op_first->op_sibling)
6571 append_elem(OP_GLOB, o, newDEFSVOP());
6573 if (!((gv = gv_fetchpvs("glob", GV_NOTQUAL, SVt_PVCV))
6574 && GvCVu(gv) && GvIMPORTED_CV(gv)))
6576 gv = gv_fetchpvs("CORE::GLOBAL::glob", 0, SVt_PVCV);
6579 #if !defined(PERL_EXTERNAL_GLOB)
6580 /* XXX this can be tightened up and made more failsafe. */
6581 if (!(gv && GvCVu(gv) && GvIMPORTED_CV(gv))) {
6584 Perl_load_module(aTHX_ PERL_LOADMOD_NOIMPORT,
6585 newSVpvs("File::Glob"), NULL, NULL, NULL);
6586 gv = gv_fetchpvs("CORE::GLOBAL::glob", 0, SVt_PVCV);
6587 glob_gv = gv_fetchpvs("File::Glob::csh_glob", 0, SVt_PVCV);
6588 GvCV(gv) = GvCV(glob_gv);
6589 SvREFCNT_inc_void((SV*)GvCV(gv));
6590 GvIMPORTED_CV_on(gv);
6593 #endif /* PERL_EXTERNAL_GLOB */
6595 if (gv && GvCVu(gv) && GvIMPORTED_CV(gv)) {
6596 append_elem(OP_GLOB, o,
6597 newSVOP(OP_CONST, 0, newSViv(PL_glob_index++)));
6598 o->op_type = OP_LIST;
6599 o->op_ppaddr = PL_ppaddr[OP_LIST];
6600 cLISTOPo->op_first->op_type = OP_PUSHMARK;
6601 cLISTOPo->op_first->op_ppaddr = PL_ppaddr[OP_PUSHMARK];
6602 cLISTOPo->op_first->op_targ = 0;
6603 o = newUNOP(OP_ENTERSUB, OPf_STACKED,
6604 append_elem(OP_LIST, o,
6605 scalar(newUNOP(OP_RV2CV, 0,
6606 newGVOP(OP_GV, 0, gv)))));
6607 o = newUNOP(OP_NULL, 0, ck_subr(o));
6608 o->op_targ = OP_GLOB; /* hint at what it used to be */
6611 gv = newGVgen("main");
6613 append_elem(OP_GLOB, o, newGVOP(OP_GV, 0, gv));
6619 Perl_ck_grep(pTHX_ OP *o)
6624 const OPCODE type = o->op_type == OP_GREPSTART ? OP_GREPWHILE : OP_MAPWHILE;
6627 o->op_ppaddr = PL_ppaddr[OP_GREPSTART];
6628 /* don't allocate gwop here, as we may leak it if PL_error_count > 0 */
6630 if (o->op_flags & OPf_STACKED) {
6633 kid = cLISTOPo->op_first->op_sibling;
6634 if (!cUNOPx(kid)->op_next)
6635 Perl_croak(aTHX_ "panic: ck_grep");
6636 for (k = cUNOPx(kid)->op_first; k; k = k->op_next) {
6639 NewOp(1101, gwop, 1, LOGOP);
6640 kid->op_next = (OP*)gwop;
6641 o->op_flags &= ~OPf_STACKED;
6643 kid = cLISTOPo->op_first->op_sibling;
6644 if (type == OP_MAPWHILE)
6651 kid = cLISTOPo->op_first->op_sibling;
6652 if (kid->op_type != OP_NULL)
6653 Perl_croak(aTHX_ "panic: ck_grep");
6654 kid = kUNOP->op_first;
6657 NewOp(1101, gwop, 1, LOGOP);
6658 gwop->op_type = type;
6659 gwop->op_ppaddr = PL_ppaddr[type];
6660 gwop->op_first = listkids(o);
6661 gwop->op_flags |= OPf_KIDS;
6662 gwop->op_other = LINKLIST(kid);
6663 kid->op_next = (OP*)gwop;
6664 offset = pad_findmy("$_");
6665 if (offset == NOT_IN_PAD || PAD_COMPNAME_FLAGS_isOUR(offset)) {
6666 o->op_private = gwop->op_private = 0;
6667 gwop->op_targ = pad_alloc(type, SVs_PADTMP);
6670 o->op_private = gwop->op_private = OPpGREP_LEX;
6671 gwop->op_targ = o->op_targ = offset;
6674 kid = cLISTOPo->op_first->op_sibling;
6675 if (!kid || !kid->op_sibling)
6676 return too_few_arguments(o,OP_DESC(o));
6677 for (kid = kid->op_sibling; kid; kid = kid->op_sibling)
6678 mod(kid, OP_GREPSTART);
6684 Perl_ck_index(pTHX_ OP *o)
6686 if (o->op_flags & OPf_KIDS) {
6687 OP *kid = cLISTOPo->op_first->op_sibling; /* get past pushmark */
6689 kid = kid->op_sibling; /* get past "big" */
6690 if (kid && kid->op_type == OP_CONST)
6691 fbm_compile(((SVOP*)kid)->op_sv, 0);
6697 Perl_ck_lengthconst(pTHX_ OP *o)
6699 /* XXX length optimization goes here */
6704 Perl_ck_lfun(pTHX_ OP *o)
6706 const OPCODE type = o->op_type;
6707 return modkids(ck_fun(o), type);
6711 Perl_ck_defined(pTHX_ OP *o) /* 19990527 MJD */
6713 if ((o->op_flags & OPf_KIDS) && ckWARN2(WARN_DEPRECATED, WARN_SYNTAX)) {
6714 switch (cUNOPo->op_first->op_type) {
6716 /* This is needed for
6717 if (defined %stash::)
6718 to work. Do not break Tk.
6720 break; /* Globals via GV can be undef */
6722 case OP_AASSIGN: /* Is this a good idea? */
6723 Perl_warner(aTHX_ packWARN2(WARN_DEPRECATED, WARN_SYNTAX),
6724 "defined(@array) is deprecated");
6725 Perl_warner(aTHX_ packWARN2(WARN_DEPRECATED, WARN_SYNTAX),
6726 "\t(Maybe you should just omit the defined()?)\n");
6729 /* This is needed for
6730 if (defined %stash::)
6731 to work. Do not break Tk.
6733 break; /* Globals via GV can be undef */
6735 Perl_warner(aTHX_ packWARN2(WARN_DEPRECATED, WARN_SYNTAX),
6736 "defined(%%hash) is deprecated");
6737 Perl_warner(aTHX_ packWARN2(WARN_DEPRECATED, WARN_SYNTAX),
6738 "\t(Maybe you should just omit the defined()?)\n");
6749 Perl_ck_rfun(pTHX_ OP *o)
6751 const OPCODE type = o->op_type;
6752 return refkids(ck_fun(o), type);
6756 Perl_ck_listiob(pTHX_ OP *o)
6760 kid = cLISTOPo->op_first;
6763 kid = cLISTOPo->op_first;
6765 if (kid->op_type == OP_PUSHMARK)
6766 kid = kid->op_sibling;
6767 if (kid && o->op_flags & OPf_STACKED)
6768 kid = kid->op_sibling;
6769 else if (kid && !kid->op_sibling) { /* print HANDLE; */
6770 if (kid->op_type == OP_CONST && kid->op_private & OPpCONST_BARE) {
6771 o->op_flags |= OPf_STACKED; /* make it a filehandle */
6772 kid = newUNOP(OP_RV2GV, OPf_REF, scalar(kid));
6773 cLISTOPo->op_first->op_sibling = kid;
6774 cLISTOPo->op_last = kid;
6775 kid = kid->op_sibling;
6780 append_elem(o->op_type, o, newDEFSVOP());
6786 Perl_ck_smartmatch(pTHX_ OP *o)
6789 if (0 == (o->op_flags & OPf_SPECIAL)) {
6790 OP *first = cBINOPo->op_first;
6791 OP *second = first->op_sibling;
6793 /* Implicitly take a reference to an array or hash */
6794 first->op_sibling = NULL;
6795 first = cBINOPo->op_first = ref_array_or_hash(first);
6796 second = first->op_sibling = ref_array_or_hash(second);
6798 /* Implicitly take a reference to a regular expression */
6799 if (first->op_type == OP_MATCH) {
6800 first->op_type = OP_QR;
6801 first->op_ppaddr = PL_ppaddr[OP_QR];
6803 if (second->op_type == OP_MATCH) {
6804 second->op_type = OP_QR;
6805 second->op_ppaddr = PL_ppaddr[OP_QR];
6814 Perl_ck_sassign(pTHX_ OP *o)
6816 OP * const kid = cLISTOPo->op_first;
6817 /* has a disposable target? */
6818 if ((PL_opargs[kid->op_type] & OA_TARGLEX)
6819 && !(kid->op_flags & OPf_STACKED)
6820 /* Cannot steal the second time! */
6821 && !(kid->op_private & OPpTARGET_MY))
6823 OP * const kkid = kid->op_sibling;
6825 /* Can just relocate the target. */
6826 if (kkid && kkid->op_type == OP_PADSV
6827 && !(kkid->op_private & OPpLVAL_INTRO))
6829 kid->op_targ = kkid->op_targ;
6831 /* Now we do not need PADSV and SASSIGN. */
6832 kid->op_sibling = o->op_sibling; /* NULL */
6833 cLISTOPo->op_first = NULL;
6835 op_getmad(o,kid,'O');
6836 op_getmad(kkid,kid,'M');
6841 kid->op_private |= OPpTARGET_MY; /* Used for context settings */
6845 if (kid->op_sibling) {
6846 OP *kkid = kid->op_sibling;
6847 if (kkid->op_type == OP_PADSV
6848 && (kkid->op_private & OPpLVAL_INTRO)
6849 && SvPAD_STATE(*av_fetch(PL_comppad_name, kkid->op_targ, FALSE))) {
6850 o->op_private |= OPpASSIGN_STATE;
6851 /* hijacking PADSTALE for uninitialized state variables */
6852 SvPADSTALE_on(PAD_SVl(kkid->op_targ));
6859 Perl_ck_match(pTHX_ OP *o)
6862 if (o->op_type != OP_QR && PL_compcv) {
6863 const PADOFFSET offset = pad_findmy("$_");
6864 if (offset != NOT_IN_PAD && !(PAD_COMPNAME_FLAGS_isOUR(offset))) {
6865 o->op_targ = offset;
6866 o->op_private |= OPpTARGET_MY;
6869 if (o->op_type == OP_MATCH || o->op_type == OP_QR)
6870 o->op_private |= OPpRUNTIME;
6875 Perl_ck_method(pTHX_ OP *o)
6877 OP * const kid = cUNOPo->op_first;
6878 if (kid->op_type == OP_CONST) {
6879 SV* sv = kSVOP->op_sv;
6880 const char * const method = SvPVX_const(sv);
6881 if (!(strchr(method, ':') || strchr(method, '\''))) {
6883 if (!SvREADONLY(sv) || !SvFAKE(sv)) {
6884 sv = newSVpvn_share(method, SvCUR(sv), 0);
6887 kSVOP->op_sv = NULL;
6889 cmop = newSVOP(OP_METHOD_NAMED, 0, sv);
6891 op_getmad(o,cmop,'O');
6902 Perl_ck_null(pTHX_ OP *o)
6904 PERL_UNUSED_CONTEXT;
6909 Perl_ck_open(pTHX_ OP *o)
6912 HV * const table = GvHV(PL_hintgv);
6914 SV **svp = hv_fetchs(table, "open_IN", FALSE);
6916 const I32 mode = mode_from_discipline(*svp);
6917 if (mode & O_BINARY)
6918 o->op_private |= OPpOPEN_IN_RAW;
6919 else if (mode & O_TEXT)
6920 o->op_private |= OPpOPEN_IN_CRLF;
6923 svp = hv_fetchs(table, "open_OUT", FALSE);
6925 const I32 mode = mode_from_discipline(*svp);
6926 if (mode & O_BINARY)
6927 o->op_private |= OPpOPEN_OUT_RAW;
6928 else if (mode & O_TEXT)
6929 o->op_private |= OPpOPEN_OUT_CRLF;
6932 if (o->op_type == OP_BACKTICK)
6935 /* In case of three-arg dup open remove strictness
6936 * from the last arg if it is a bareword. */
6937 OP * const first = cLISTOPx(o)->op_first; /* The pushmark. */
6938 OP * const last = cLISTOPx(o)->op_last; /* The bareword. */
6942 if ((last->op_type == OP_CONST) && /* The bareword. */
6943 (last->op_private & OPpCONST_BARE) &&
6944 (last->op_private & OPpCONST_STRICT) &&
6945 (oa = first->op_sibling) && /* The fh. */
6946 (oa = oa->op_sibling) && /* The mode. */
6947 (oa->op_type == OP_CONST) &&
6948 SvPOK(((SVOP*)oa)->op_sv) &&
6949 (mode = SvPVX_const(((SVOP*)oa)->op_sv)) &&
6950 mode[0] == '>' && mode[1] == '&' && /* A dup open. */
6951 (last == oa->op_sibling)) /* The bareword. */
6952 last->op_private &= ~OPpCONST_STRICT;
6958 Perl_ck_repeat(pTHX_ OP *o)
6960 if (cBINOPo->op_first->op_flags & OPf_PARENS) {
6961 o->op_private |= OPpREPEAT_DOLIST;
6962 cBINOPo->op_first = force_list(cBINOPo->op_first);
6970 Perl_ck_require(pTHX_ OP *o)
6975 if (o->op_flags & OPf_KIDS) { /* Shall we supply missing .pm? */
6976 SVOP * const kid = (SVOP*)cUNOPo->op_first;
6978 if (kid->op_type == OP_CONST && (kid->op_private & OPpCONST_BARE)) {
6979 SV * const sv = kid->op_sv;
6980 U32 was_readonly = SvREADONLY(sv);
6985 sv_force_normal_flags(sv, 0);
6986 assert(!SvREADONLY(sv));
6993 for (s = SvPVX(sv); *s; s++) {
6994 if (*s == ':' && s[1] == ':') {
6995 const STRLEN len = strlen(s+2)+1;
6997 Move(s+2, s+1, len, char);
6998 SvCUR_set(sv, SvCUR(sv) - 1);
7001 sv_catpvs(sv, ".pm");
7002 SvFLAGS(sv) |= was_readonly;
7006 if (!(o->op_flags & OPf_SPECIAL)) { /* Wasn't written as CORE::require */
7007 /* handle override, if any */
7008 gv = gv_fetchpvs("require", GV_NOTQUAL, SVt_PVCV);
7009 if (!(gv && GvCVu(gv) && GvIMPORTED_CV(gv))) {
7010 GV * const * const gvp = (GV**)hv_fetchs(PL_globalstash, "require", FALSE);
7011 gv = gvp ? *gvp : NULL;
7015 if (gv && GvCVu(gv) && GvIMPORTED_CV(gv)) {
7016 OP * const kid = cUNOPo->op_first;
7019 cUNOPo->op_first = 0;
7023 newop = ck_subr(newUNOP(OP_ENTERSUB, OPf_STACKED,
7024 append_elem(OP_LIST, kid,
7025 scalar(newUNOP(OP_RV2CV, 0,
7028 op_getmad(o,newop,'O');
7036 Perl_ck_return(pTHX_ OP *o)
7039 if (CvLVALUE(PL_compcv)) {
7041 for (kid = cLISTOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
7042 mod(kid, OP_LEAVESUBLV);
7048 Perl_ck_select(pTHX_ OP *o)
7052 if (o->op_flags & OPf_KIDS) {
7053 kid = cLISTOPo->op_first->op_sibling; /* get past pushmark */
7054 if (kid && kid->op_sibling) {
7055 o->op_type = OP_SSELECT;
7056 o->op_ppaddr = PL_ppaddr[OP_SSELECT];
7058 return fold_constants(o);
7062 kid = cLISTOPo->op_first->op_sibling; /* get past pushmark */
7063 if (kid && kid->op_type == OP_RV2GV)
7064 kid->op_private &= ~HINT_STRICT_REFS;
7069 Perl_ck_shift(pTHX_ OP *o)
7072 const I32 type = o->op_type;
7074 if (!(o->op_flags & OPf_KIDS)) {
7076 /* FIXME - this can be refactored to reduce code in #ifdefs */
7078 OP * const oldo = o;
7082 argop = newUNOP(OP_RV2AV, 0,
7083 scalar(newGVOP(OP_GV, 0, CvUNIQUE(PL_compcv) ? PL_argvgv : PL_defgv)));
7085 o = newUNOP(type, 0, scalar(argop));
7086 op_getmad(oldo,o,'O');
7089 return newUNOP(type, 0, scalar(argop));
7092 return scalar(modkids(ck_fun(o), type));
7096 Perl_ck_sort(pTHX_ OP *o)
7101 if (o->op_type == OP_SORT && (PL_hints & HINT_LOCALIZE_HH) != 0) {
7102 HV * const hinthv = GvHV(PL_hintgv);
7104 SV ** const svp = hv_fetchs(hinthv, "sort", FALSE);
7106 const I32 sorthints = (I32)SvIV(*svp);
7107 if ((sorthints & HINT_SORT_QUICKSORT) != 0)
7108 o->op_private |= OPpSORT_QSORT;
7109 if ((sorthints & HINT_SORT_STABLE) != 0)
7110 o->op_private |= OPpSORT_STABLE;
7115 if (o->op_type == OP_SORT && o->op_flags & OPf_STACKED)
7117 firstkid = cLISTOPo->op_first->op_sibling; /* get past pushmark */
7118 if (o->op_flags & OPf_STACKED) { /* may have been cleared */
7120 OP *kid = cUNOPx(firstkid)->op_first; /* get past null */
7122 if (kid->op_type == OP_SCOPE || kid->op_type == OP_LEAVE) {
7124 if (kid->op_type == OP_SCOPE) {
7128 else if (kid->op_type == OP_LEAVE) {
7129 if (o->op_type == OP_SORT) {
7130 op_null(kid); /* wipe out leave */
7133 for (k = kLISTOP->op_first->op_next; k; k = k->op_next) {
7134 if (k->op_next == kid)
7136 /* don't descend into loops */
7137 else if (k->op_type == OP_ENTERLOOP
7138 || k->op_type == OP_ENTERITER)
7140 k = cLOOPx(k)->op_lastop;
7145 kid->op_next = 0; /* just disconnect the leave */
7146 k = kLISTOP->op_first;
7151 if (o->op_type == OP_SORT) {
7152 /* provide scalar context for comparison function/block */
7158 o->op_flags |= OPf_SPECIAL;
7160 else if (kid->op_type == OP_RV2SV || kid->op_type == OP_PADSV)
7163 firstkid = firstkid->op_sibling;
7166 /* provide list context for arguments */
7167 if (o->op_type == OP_SORT)
7174 S_simplify_sort(pTHX_ OP *o)
7177 register OP *kid = cLISTOPo->op_first->op_sibling; /* get past pushmark */
7182 if (!(o->op_flags & OPf_STACKED))
7184 GvMULTI_on(gv_fetchpvs("a", GV_ADD|GV_NOTQUAL, SVt_PV));
7185 GvMULTI_on(gv_fetchpvs("b", GV_ADD|GV_NOTQUAL, SVt_PV));
7186 kid = kUNOP->op_first; /* get past null */
7187 if (kid->op_type != OP_SCOPE)
7189 kid = kLISTOP->op_last; /* get past scope */
7190 switch(kid->op_type) {
7198 k = kid; /* remember this node*/
7199 if (kBINOP->op_first->op_type != OP_RV2SV)
7201 kid = kBINOP->op_first; /* get past cmp */
7202 if (kUNOP->op_first->op_type != OP_GV)
7204 kid = kUNOP->op_first; /* get past rv2sv */
7206 if (GvSTASH(gv) != PL_curstash)
7208 gvname = GvNAME(gv);
7209 if (*gvname == 'a' && gvname[1] == '\0')
7211 else if (*gvname == 'b' && gvname[1] == '\0')
7216 kid = k; /* back to cmp */
7217 if (kBINOP->op_last->op_type != OP_RV2SV)
7219 kid = kBINOP->op_last; /* down to 2nd arg */
7220 if (kUNOP->op_first->op_type != OP_GV)
7222 kid = kUNOP->op_first; /* get past rv2sv */
7224 if (GvSTASH(gv) != PL_curstash)
7226 gvname = GvNAME(gv);
7228 ? !(*gvname == 'a' && gvname[1] == '\0')
7229 : !(*gvname == 'b' && gvname[1] == '\0'))
7231 o->op_flags &= ~(OPf_STACKED | OPf_SPECIAL);
7233 o->op_private |= OPpSORT_DESCEND;
7234 if (k->op_type == OP_NCMP)
7235 o->op_private |= OPpSORT_NUMERIC;
7236 if (k->op_type == OP_I_NCMP)
7237 o->op_private |= OPpSORT_NUMERIC | OPpSORT_INTEGER;
7238 kid = cLISTOPo->op_first->op_sibling;
7239 cLISTOPo->op_first->op_sibling = kid->op_sibling; /* bypass old block */
7241 op_getmad(kid,o,'S'); /* then delete it */
7243 op_free(kid); /* then delete it */
7248 Perl_ck_split(pTHX_ OP *o)
7253 if (o->op_flags & OPf_STACKED)
7254 return no_fh_allowed(o);
7256 kid = cLISTOPo->op_first;
7257 if (kid->op_type != OP_NULL)
7258 Perl_croak(aTHX_ "panic: ck_split");
7259 kid = kid->op_sibling;
7260 op_free(cLISTOPo->op_first);
7261 cLISTOPo->op_first = kid;
7263 cLISTOPo->op_first = kid = newSVOP(OP_CONST, 0, newSVpvs(" "));
7264 cLISTOPo->op_last = kid; /* There was only one element previously */
7267 if (kid->op_type != OP_MATCH || kid->op_flags & OPf_STACKED) {
7268 OP * const sibl = kid->op_sibling;
7269 kid->op_sibling = 0;
7270 kid = pmruntime( newPMOP(OP_MATCH, OPf_SPECIAL), kid, 0);
7271 if (cLISTOPo->op_first == cLISTOPo->op_last)
7272 cLISTOPo->op_last = kid;
7273 cLISTOPo->op_first = kid;
7274 kid->op_sibling = sibl;
7277 kid->op_type = OP_PUSHRE;
7278 kid->op_ppaddr = PL_ppaddr[OP_PUSHRE];
7280 if (((PMOP *)kid)->op_pmflags & PMf_GLOBAL && ckWARN(WARN_REGEXP)) {
7281 Perl_warner(aTHX_ packWARN(WARN_REGEXP),
7282 "Use of /g modifier is meaningless in split");
7285 if (!kid->op_sibling)
7286 append_elem(OP_SPLIT, o, newDEFSVOP());
7288 kid = kid->op_sibling;
7291 if (!kid->op_sibling)
7292 append_elem(OP_SPLIT, o, newSVOP(OP_CONST, 0, newSViv(0)));
7293 assert(kid->op_sibling);
7295 kid = kid->op_sibling;
7298 if (kid->op_sibling)
7299 return too_many_arguments(o,OP_DESC(o));
7305 Perl_ck_join(pTHX_ OP *o)
7307 const OP * const kid = cLISTOPo->op_first->op_sibling;
7308 if (kid && kid->op_type == OP_MATCH) {
7309 if (ckWARN(WARN_SYNTAX)) {
7310 const REGEXP *re = PM_GETRE(kPMOP);
7311 const char *pmstr = re ? re->precomp : "STRING";
7312 Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
7313 "/%s/ should probably be written as \"%s\"",
7321 Perl_ck_subr(pTHX_ OP *o)
7324 OP *prev = ((cUNOPo->op_first->op_sibling)
7325 ? cUNOPo : ((UNOP*)cUNOPo->op_first))->op_first;
7326 OP *o2 = prev->op_sibling;
7328 const char *proto = NULL;
7329 const char *proto_end = NULL;
7334 I32 contextclass = 0;
7335 const char *e = NULL;
7338 o->op_private |= OPpENTERSUB_HASTARG;
7339 for (cvop = o2; cvop->op_sibling; cvop = cvop->op_sibling) ;
7340 if (cvop->op_type == OP_RV2CV) {
7342 o->op_private |= (cvop->op_private & OPpENTERSUB_AMPER);
7343 op_null(cvop); /* disable rv2cv */
7344 tmpop = (SVOP*)((UNOP*)cvop)->op_first;
7345 if (tmpop->op_type == OP_GV && !(o->op_private & OPpENTERSUB_AMPER)) {
7346 GV *gv = cGVOPx_gv(tmpop);
7349 tmpop->op_private |= OPpEARLY_CV;
7353 namegv = CvANON(cv) ? gv : CvGV(cv);
7354 proto = SvPV((SV*)cv, len);
7355 proto_end = proto + len;
7357 if (CvASSERTION(cv)) {
7358 U32 asserthints = 0;
7359 HV *const hinthv = GvHV(PL_hintgv);
7361 SV **svp = hv_fetchs(hinthv, "assertions", FALSE);
7363 asserthints = SvUV(*svp);
7365 if (asserthints & HINT_ASSERTING) {
7366 if (PERLDB_ASSERTION && PL_curstash != PL_debstash)
7367 o->op_private |= OPpENTERSUB_DB;
7371 if (!(asserthints & HINT_ASSERTIONSSEEN) && ckWARN(WARN_ASSERTIONS)) {
7372 Perl_warner(aTHX_ packWARN(WARN_ASSERTIONS),
7373 "Impossible to activate assertion call");
7380 else if (cvop->op_type == OP_METHOD || cvop->op_type == OP_METHOD_NAMED) {
7381 if (o2->op_type == OP_CONST)
7382 o2->op_private &= ~OPpCONST_STRICT;
7383 else if (o2->op_type == OP_LIST) {
7384 OP * const sib = ((UNOP*)o2)->op_first->op_sibling;
7385 if (sib && sib->op_type == OP_CONST)
7386 sib->op_private &= ~OPpCONST_STRICT;
7389 o->op_private |= (PL_hints & HINT_STRICT_REFS);
7390 if (PERLDB_SUB && PL_curstash != PL_debstash)
7391 o->op_private |= OPpENTERSUB_DB;
7392 while (o2 != cvop) {
7394 if (PL_madskills && o2->op_type == OP_NULL)
7395 o3 = ((UNOP*)o2)->op_first;
7399 if (proto >= proto_end)
7400 return too_many_arguments(o, gv_ename(namegv));
7408 /* _ must be at the end */
7409 if (proto[1] && proto[1] != ';')
7424 if (o3->op_type != OP_REFGEN && o3->op_type != OP_UNDEF)
7426 arg == 1 ? "block or sub {}" : "sub {}",
7427 gv_ename(namegv), o3);
7430 /* '*' allows any scalar type, including bareword */
7433 if (o3->op_type == OP_RV2GV)
7434 goto wrapref; /* autoconvert GLOB -> GLOBref */
7435 else if (o3->op_type == OP_CONST)
7436 o3->op_private &= ~OPpCONST_STRICT;
7437 else if (o3->op_type == OP_ENTERSUB) {
7438 /* accidental subroutine, revert to bareword */
7439 OP *gvop = ((UNOP*)o3)->op_first;
7440 if (gvop && gvop->op_type == OP_NULL) {
7441 gvop = ((UNOP*)gvop)->op_first;
7443 for (; gvop->op_sibling; gvop = gvop->op_sibling)
7446 (gvop->op_private & OPpENTERSUB_NOPAREN) &&
7447 (gvop = ((UNOP*)gvop)->op_first) &&
7448 gvop->op_type == OP_GV)
7450 GV * const gv = cGVOPx_gv(gvop);
7451 OP * const sibling = o2->op_sibling;
7452 SV * const n = newSVpvs("");
7454 OP * const oldo2 = o2;
7458 gv_fullname4(n, gv, "", FALSE);
7459 o2 = newSVOP(OP_CONST, 0, n);
7460 op_getmad(oldo2,o2,'O');
7461 prev->op_sibling = o2;
7462 o2->op_sibling = sibling;
7478 if (contextclass++ == 0) {
7479 e = strchr(proto, ']');
7480 if (!e || e == proto)
7489 const char *p = proto;
7490 const char *const end = proto;
7492 while (*--p != '[');
7493 bad_type(arg, Perl_form(aTHX_ "one of %.*s",
7495 gv_ename(namegv), o3);
7500 if (o3->op_type == OP_RV2GV)
7503 bad_type(arg, "symbol", gv_ename(namegv), o3);
7506 if (o3->op_type == OP_ENTERSUB)
7509 bad_type(arg, "subroutine entry", gv_ename(namegv),
7513 if (o3->op_type == OP_RV2SV ||
7514 o3->op_type == OP_PADSV ||
7515 o3->op_type == OP_HELEM ||
7516 o3->op_type == OP_AELEM)
7519 bad_type(arg, "scalar", gv_ename(namegv), o3);
7522 if (o3->op_type == OP_RV2AV ||
7523 o3->op_type == OP_PADAV)
7526 bad_type(arg, "array", gv_ename(namegv), o3);
7529 if (o3->op_type == OP_RV2HV ||
7530 o3->op_type == OP_PADHV)
7533 bad_type(arg, "hash", gv_ename(namegv), o3);
7538 OP* const sib = kid->op_sibling;
7539 kid->op_sibling = 0;
7540 o2 = newUNOP(OP_REFGEN, 0, kid);
7541 o2->op_sibling = sib;
7542 prev->op_sibling = o2;
7544 if (contextclass && e) {
7559 Perl_croak(aTHX_ "Malformed prototype for %s: %"SVf,
7560 gv_ename(namegv), SVfARG(cv));
7565 mod(o2, OP_ENTERSUB);
7567 o2 = o2->op_sibling;
7569 if (o2 == cvop && proto && *proto == '_') {
7570 /* generate an access to $_ */
7572 o2->op_sibling = prev->op_sibling;
7573 prev->op_sibling = o2; /* instead of cvop */
7575 if (proto && !optional && proto_end > proto &&
7576 (*proto != '@' && *proto != '%' && *proto != ';' && *proto != '_'))
7577 return too_few_arguments(o, gv_ename(namegv));
7580 OP * const oldo = o;
7584 o=newSVOP(OP_CONST, 0, newSViv(0));
7585 op_getmad(oldo,o,'O');
7591 Perl_ck_svconst(pTHX_ OP *o)
7593 PERL_UNUSED_CONTEXT;
7594 SvREADONLY_on(cSVOPo->op_sv);
7599 Perl_ck_chdir(pTHX_ OP *o)
7601 if (o->op_flags & OPf_KIDS) {
7602 SVOP * const kid = (SVOP*)cUNOPo->op_first;
7604 if (kid && kid->op_type == OP_CONST &&
7605 (kid->op_private & OPpCONST_BARE))
7607 o->op_flags |= OPf_SPECIAL;
7608 kid->op_private &= ~OPpCONST_STRICT;
7615 Perl_ck_trunc(pTHX_ OP *o)
7617 if (o->op_flags & OPf_KIDS) {
7618 SVOP *kid = (SVOP*)cUNOPo->op_first;
7620 if (kid->op_type == OP_NULL)
7621 kid = (SVOP*)kid->op_sibling;
7622 if (kid && kid->op_type == OP_CONST &&
7623 (kid->op_private & OPpCONST_BARE))
7625 o->op_flags |= OPf_SPECIAL;
7626 kid->op_private &= ~OPpCONST_STRICT;
7633 Perl_ck_unpack(pTHX_ OP *o)
7635 OP *kid = cLISTOPo->op_first;
7636 if (kid->op_sibling) {
7637 kid = kid->op_sibling;
7638 if (!kid->op_sibling)
7639 kid->op_sibling = newDEFSVOP();
7645 Perl_ck_substr(pTHX_ OP *o)
7648 if ((o->op_flags & OPf_KIDS) && (o->op_private == 4)) {
7649 OP *kid = cLISTOPo->op_first;
7651 if (kid->op_type == OP_NULL)
7652 kid = kid->op_sibling;
7654 kid->op_flags |= OPf_MOD;
7660 /* A peephole optimizer. We visit the ops in the order they're to execute.
7661 * See the comments at the top of this file for more details about when
7662 * peep() is called */
7665 Perl_peep(pTHX_ register OP *o)
7668 register OP* oldop = NULL;
7670 if (!o || o->op_opt)
7674 SAVEVPTR(PL_curcop);
7675 for (; o; o = o->op_next) {
7679 switch (o->op_type) {
7683 PL_curcop = ((COP*)o); /* for warnings */
7688 if (cSVOPo->op_private & OPpCONST_STRICT)
7689 no_bareword_allowed(o);
7691 case OP_METHOD_NAMED:
7692 /* Relocate sv to the pad for thread safety.
7693 * Despite being a "constant", the SV is written to,
7694 * for reference counts, sv_upgrade() etc. */
7696 const PADOFFSET ix = pad_alloc(OP_CONST, SVs_PADTMP);
7697 if (o->op_type == OP_CONST && SvPADTMP(cSVOPo->op_sv)) {
7698 /* If op_sv is already a PADTMP then it is being used by
7699 * some pad, so make a copy. */
7700 sv_setsv(PAD_SVl(ix),cSVOPo->op_sv);
7701 SvREADONLY_on(PAD_SVl(ix));
7702 SvREFCNT_dec(cSVOPo->op_sv);
7704 else if (o->op_type == OP_CONST
7705 && cSVOPo->op_sv == &PL_sv_undef) {
7706 /* PL_sv_undef is hack - it's unsafe to store it in the
7707 AV that is the pad, because av_fetch treats values of
7708 PL_sv_undef as a "free" AV entry and will merrily
7709 replace them with a new SV, causing pad_alloc to think
7710 that this pad slot is free. (When, clearly, it is not)
7712 SvOK_off(PAD_SVl(ix));
7713 SvPADTMP_on(PAD_SVl(ix));
7714 SvREADONLY_on(PAD_SVl(ix));
7717 SvREFCNT_dec(PAD_SVl(ix));
7718 SvPADTMP_on(cSVOPo->op_sv);
7719 PAD_SETSV(ix, cSVOPo->op_sv);
7720 /* XXX I don't know how this isn't readonly already. */
7721 SvREADONLY_on(PAD_SVl(ix));
7723 cSVOPo->op_sv = NULL;
7731 if (o->op_next && o->op_next->op_type == OP_STRINGIFY) {
7732 if (o->op_next->op_private & OPpTARGET_MY) {
7733 if (o->op_flags & OPf_STACKED) /* chained concats */
7734 goto ignore_optimization;
7736 /* assert(PL_opargs[o->op_type] & OA_TARGLEX); */
7737 o->op_targ = o->op_next->op_targ;
7738 o->op_next->op_targ = 0;
7739 o->op_private |= OPpTARGET_MY;
7742 op_null(o->op_next);
7744 ignore_optimization:
7748 if ((o->op_flags & OPf_WANT) != OPf_WANT_LIST) {
7750 break; /* Scalar stub must produce undef. List stub is noop */
7754 if (o->op_targ == OP_NEXTSTATE
7755 || o->op_targ == OP_DBSTATE
7756 || o->op_targ == OP_SETSTATE)
7758 PL_curcop = ((COP*)o);
7760 /* XXX: We avoid setting op_seq here to prevent later calls
7761 to peep() from mistakenly concluding that optimisation
7762 has already occurred. This doesn't fix the real problem,
7763 though (See 20010220.007). AMS 20010719 */
7764 /* op_seq functionality is now replaced by op_opt */
7765 if (oldop && o->op_next) {
7766 oldop->op_next = o->op_next;
7774 if (oldop && o->op_next) {
7775 oldop->op_next = o->op_next;
7783 if (o->op_type == OP_PADAV || o->op_next->op_type == OP_RV2AV) {
7784 OP* const pop = (o->op_type == OP_PADAV) ?
7785 o->op_next : o->op_next->op_next;
7787 if (pop && pop->op_type == OP_CONST &&
7788 ((PL_op = pop->op_next)) &&
7789 pop->op_next->op_type == OP_AELEM &&
7790 !(pop->op_next->op_private &
7791 (OPpLVAL_INTRO|OPpLVAL_DEFER|OPpDEREF|OPpMAYBE_LVSUB)) &&
7792 (i = SvIV(((SVOP*)pop)->op_sv) - CopARYBASE_get(PL_curcop))
7797 if (cSVOPx(pop)->op_private & OPpCONST_STRICT)
7798 no_bareword_allowed(pop);
7799 if (o->op_type == OP_GV)
7800 op_null(o->op_next);
7801 op_null(pop->op_next);
7803 o->op_flags |= pop->op_next->op_flags & OPf_MOD;
7804 o->op_next = pop->op_next->op_next;
7805 o->op_ppaddr = PL_ppaddr[OP_AELEMFAST];
7806 o->op_private = (U8)i;
7807 if (o->op_type == OP_GV) {
7812 o->op_flags |= OPf_SPECIAL;
7813 o->op_type = OP_AELEMFAST;
7819 if (o->op_next->op_type == OP_RV2SV) {
7820 if (!(o->op_next->op_private & OPpDEREF)) {
7821 op_null(o->op_next);
7822 o->op_private |= o->op_next->op_private & (OPpLVAL_INTRO
7824 o->op_next = o->op_next->op_next;
7825 o->op_type = OP_GVSV;
7826 o->op_ppaddr = PL_ppaddr[OP_GVSV];
7829 else if ((o->op_private & OPpEARLY_CV) && ckWARN(WARN_PROTOTYPE)) {
7830 GV * const gv = cGVOPo_gv;
7831 if (SvTYPE(gv) == SVt_PVGV && GvCV(gv) && SvPVX_const(GvCV(gv))) {
7832 /* XXX could check prototype here instead of just carping */
7833 SV * const sv = sv_newmortal();
7834 gv_efullname3(sv, gv, NULL);
7835 Perl_warner(aTHX_ packWARN(WARN_PROTOTYPE),
7836 "%"SVf"() called too early to check prototype",
7840 else if (o->op_next->op_type == OP_READLINE
7841 && o->op_next->op_next->op_type == OP_CONCAT
7842 && (o->op_next->op_next->op_flags & OPf_STACKED))
7844 /* Turn "$a .= <FH>" into an OP_RCATLINE. AMS 20010917 */
7845 o->op_type = OP_RCATLINE;
7846 o->op_flags |= OPf_STACKED;
7847 o->op_ppaddr = PL_ppaddr[OP_RCATLINE];
7848 op_null(o->op_next->op_next);
7849 op_null(o->op_next);
7866 while (cLOGOP->op_other->op_type == OP_NULL)
7867 cLOGOP->op_other = cLOGOP->op_other->op_next;
7868 peep(cLOGOP->op_other); /* Recursive calls are not replaced by fptr calls */
7874 while (cLOOP->op_redoop->op_type == OP_NULL)
7875 cLOOP->op_redoop = cLOOP->op_redoop->op_next;
7876 peep(cLOOP->op_redoop);
7877 while (cLOOP->op_nextop->op_type == OP_NULL)
7878 cLOOP->op_nextop = cLOOP->op_nextop->op_next;
7879 peep(cLOOP->op_nextop);
7880 while (cLOOP->op_lastop->op_type == OP_NULL)
7881 cLOOP->op_lastop = cLOOP->op_lastop->op_next;
7882 peep(cLOOP->op_lastop);
7889 while (cPMOP->op_pmreplstart &&
7890 cPMOP->op_pmreplstart->op_type == OP_NULL)
7891 cPMOP->op_pmreplstart = cPMOP->op_pmreplstart->op_next;
7892 peep(cPMOP->op_pmreplstart);
7897 if (o->op_next && o->op_next->op_type == OP_NEXTSTATE
7898 && ckWARN(WARN_SYNTAX))
7900 if (o->op_next->op_sibling) {
7901 const OPCODE type = o->op_next->op_sibling->op_type;
7902 if (type != OP_EXIT && type != OP_WARN && type != OP_DIE) {
7903 const line_t oldline = CopLINE(PL_curcop);
7904 CopLINE_set(PL_curcop, CopLINE((COP*)o->op_next));
7905 Perl_warner(aTHX_ packWARN(WARN_EXEC),
7906 "Statement unlikely to be reached");
7907 Perl_warner(aTHX_ packWARN(WARN_EXEC),
7908 "\t(Maybe you meant system() when you said exec()?)\n");
7909 CopLINE_set(PL_curcop, oldline);
7920 const char *key = NULL;
7925 if (((BINOP*)o)->op_last->op_type != OP_CONST)
7928 /* Make the CONST have a shared SV */
7929 svp = cSVOPx_svp(((BINOP*)o)->op_last);
7930 if ((!SvFAKE(sv = *svp) || !SvREADONLY(sv)) && !IS_PADCONST(sv)) {
7931 key = SvPV_const(sv, keylen);
7932 lexname = newSVpvn_share(key,
7933 SvUTF8(sv) ? -(I32)keylen : (I32)keylen,
7939 if ((o->op_private & (OPpLVAL_INTRO)))
7942 rop = (UNOP*)((BINOP*)o)->op_first;
7943 if (rop->op_type != OP_RV2HV || rop->op_first->op_type != OP_PADSV)
7945 lexname = *av_fetch(PL_comppad_name, rop->op_first->op_targ, TRUE);
7946 if (!SvPAD_TYPED(lexname))
7948 fields = (GV**)hv_fetchs(SvSTASH(lexname), "FIELDS", FALSE);
7949 if (!fields || !GvHV(*fields))
7951 key = SvPV_const(*svp, keylen);
7952 if (!hv_fetch(GvHV(*fields), key,
7953 SvUTF8(*svp) ? -(I32)keylen : (I32)keylen, FALSE))
7955 Perl_croak(aTHX_ "No such class field \"%s\" "
7956 "in variable %s of type %s",
7957 key, SvPV_nolen_const(lexname), HvNAME_get(SvSTASH(lexname)));
7970 SVOP *first_key_op, *key_op;
7972 if ((o->op_private & (OPpLVAL_INTRO))
7973 /* I bet there's always a pushmark... */
7974 || ((LISTOP*)o)->op_first->op_sibling->op_type != OP_LIST)
7975 /* hmmm, no optimization if list contains only one key. */
7977 rop = (UNOP*)((LISTOP*)o)->op_last;
7978 if (rop->op_type != OP_RV2HV)
7980 if (rop->op_first->op_type == OP_PADSV)
7981 /* @$hash{qw(keys here)} */
7982 rop = (UNOP*)rop->op_first;
7984 /* @{$hash}{qw(keys here)} */
7985 if (rop->op_first->op_type == OP_SCOPE
7986 && cLISTOPx(rop->op_first)->op_last->op_type == OP_PADSV)
7988 rop = (UNOP*)cLISTOPx(rop->op_first)->op_last;
7994 lexname = *av_fetch(PL_comppad_name, rop->op_targ, TRUE);
7995 if (!SvPAD_TYPED(lexname))
7997 fields = (GV**)hv_fetchs(SvSTASH(lexname), "FIELDS", FALSE);
7998 if (!fields || !GvHV(*fields))
8000 /* Again guessing that the pushmark can be jumped over.... */
8001 first_key_op = (SVOP*)((LISTOP*)((LISTOP*)o)->op_first->op_sibling)
8002 ->op_first->op_sibling;
8003 for (key_op = first_key_op; key_op;
8004 key_op = (SVOP*)key_op->op_sibling) {
8005 if (key_op->op_type != OP_CONST)
8007 svp = cSVOPx_svp(key_op);
8008 key = SvPV_const(*svp, keylen);
8009 if (!hv_fetch(GvHV(*fields), key,
8010 SvUTF8(*svp) ? -(I32)keylen : (I32)keylen, FALSE))
8012 Perl_croak(aTHX_ "No such class field \"%s\" "
8013 "in variable %s of type %s",
8014 key, SvPV_nolen(lexname), HvNAME_get(SvSTASH(lexname)));
8021 /* will point to RV2AV or PADAV op on LHS/RHS of assign */
8025 /* check that RHS of sort is a single plain array */
8026 OP *oright = cUNOPo->op_first;
8027 if (!oright || oright->op_type != OP_PUSHMARK)
8030 /* reverse sort ... can be optimised. */
8031 if (!cUNOPo->op_sibling) {
8032 /* Nothing follows us on the list. */
8033 OP * const reverse = o->op_next;
8035 if (reverse->op_type == OP_REVERSE &&
8036 (reverse->op_flags & OPf_WANT) == OPf_WANT_LIST) {
8037 OP * const pushmark = cUNOPx(reverse)->op_first;
8038 if (pushmark && (pushmark->op_type == OP_PUSHMARK)
8039 && (cUNOPx(pushmark)->op_sibling == o)) {
8040 /* reverse -> pushmark -> sort */
8041 o->op_private |= OPpSORT_REVERSE;
8043 pushmark->op_next = oright->op_next;
8049 /* make @a = sort @a act in-place */
8053 oright = cUNOPx(oright)->op_sibling;
8056 if (oright->op_type == OP_NULL) { /* skip sort block/sub */
8057 oright = cUNOPx(oright)->op_sibling;
8061 (oright->op_type != OP_RV2AV && oright->op_type != OP_PADAV)
8062 || oright->op_next != o
8063 || (oright->op_private & OPpLVAL_INTRO)
8067 /* o2 follows the chain of op_nexts through the LHS of the
8068 * assign (if any) to the aassign op itself */
8070 if (!o2 || o2->op_type != OP_NULL)
8073 if (!o2 || o2->op_type != OP_PUSHMARK)
8076 if (o2 && o2->op_type == OP_GV)
8079 || (o2->op_type != OP_PADAV && o2->op_type != OP_RV2AV)
8080 || (o2->op_private & OPpLVAL_INTRO)
8085 if (!o2 || o2->op_type != OP_NULL)
8088 if (!o2 || o2->op_type != OP_AASSIGN
8089 || (o2->op_flags & OPf_WANT) != OPf_WANT_VOID)
8092 /* check that the sort is the first arg on RHS of assign */
8094 o2 = cUNOPx(o2)->op_first;
8095 if (!o2 || o2->op_type != OP_NULL)
8097 o2 = cUNOPx(o2)->op_first;
8098 if (!o2 || o2->op_type != OP_PUSHMARK)
8100 if (o2->op_sibling != o)
8103 /* check the array is the same on both sides */
8104 if (oleft->op_type == OP_RV2AV) {
8105 if (oright->op_type != OP_RV2AV
8106 || !cUNOPx(oright)->op_first
8107 || cUNOPx(oright)->op_first->op_type != OP_GV
8108 || cGVOPx_gv(cUNOPx(oleft)->op_first) !=
8109 cGVOPx_gv(cUNOPx(oright)->op_first)
8113 else if (oright->op_type != OP_PADAV
8114 || oright->op_targ != oleft->op_targ
8118 /* transfer MODishness etc from LHS arg to RHS arg */
8119 oright->op_flags = oleft->op_flags;
8120 o->op_private |= OPpSORT_INPLACE;
8122 /* excise push->gv->rv2av->null->aassign */
8123 o2 = o->op_next->op_next;
8124 op_null(o2); /* PUSHMARK */
8126 if (o2->op_type == OP_GV) {
8127 op_null(o2); /* GV */
8130 op_null(o2); /* RV2AV or PADAV */
8131 o2 = o2->op_next->op_next;
8132 op_null(o2); /* AASSIGN */
8134 o->op_next = o2->op_next;
8140 OP *ourmark, *theirmark, *ourlast, *iter, *expushmark, *rv2av;
8142 LISTOP *enter, *exlist;
8145 enter = (LISTOP *) o->op_next;
8148 if (enter->op_type == OP_NULL) {
8149 enter = (LISTOP *) enter->op_next;
8153 /* for $a (...) will have OP_GV then OP_RV2GV here.
8154 for (...) just has an OP_GV. */
8155 if (enter->op_type == OP_GV) {
8156 gvop = (OP *) enter;
8157 enter = (LISTOP *) enter->op_next;
8160 if (enter->op_type == OP_RV2GV) {
8161 enter = (LISTOP *) enter->op_next;
8167 if (enter->op_type != OP_ENTERITER)
8170 iter = enter->op_next;
8171 if (!iter || iter->op_type != OP_ITER)
8174 expushmark = enter->op_first;
8175 if (!expushmark || expushmark->op_type != OP_NULL
8176 || expushmark->op_targ != OP_PUSHMARK)
8179 exlist = (LISTOP *) expushmark->op_sibling;
8180 if (!exlist || exlist->op_type != OP_NULL
8181 || exlist->op_targ != OP_LIST)
8184 if (exlist->op_last != o) {
8185 /* Mmm. Was expecting to point back to this op. */
8188 theirmark = exlist->op_first;
8189 if (!theirmark || theirmark->op_type != OP_PUSHMARK)
8192 if (theirmark->op_sibling != o) {
8193 /* There's something between the mark and the reverse, eg
8194 for (1, reverse (...))
8199 ourmark = ((LISTOP *)o)->op_first;
8200 if (!ourmark || ourmark->op_type != OP_PUSHMARK)
8203 ourlast = ((LISTOP *)o)->op_last;
8204 if (!ourlast || ourlast->op_next != o)
8207 rv2av = ourmark->op_sibling;
8208 if (rv2av && rv2av->op_type == OP_RV2AV && rv2av->op_sibling == 0
8209 && rv2av->op_flags == (OPf_WANT_LIST | OPf_KIDS)
8210 && enter->op_flags == (OPf_WANT_LIST | OPf_KIDS)) {
8211 /* We're just reversing a single array. */
8212 rv2av->op_flags = OPf_WANT_SCALAR | OPf_KIDS | OPf_REF;
8213 enter->op_flags |= OPf_STACKED;
8216 /* We don't have control over who points to theirmark, so sacrifice
8218 theirmark->op_next = ourmark->op_next;
8219 theirmark->op_flags = ourmark->op_flags;
8220 ourlast->op_next = gvop ? gvop : (OP *) enter;
8223 enter->op_private |= OPpITER_REVERSED;
8224 iter->op_private |= OPpITER_REVERSED;
8231 UNOP *refgen, *rv2cv;
8234 /* I do not understand this, but if o->op_opt isn't set to 1,
8235 various tests in ext/B/t/bytecode.t fail with no readily
8241 if ((o->op_flags && OPf_WANT) != OPf_WANT_VOID)
8244 if ((o->op_private & ~OPpASSIGN_BACKWARDS) != 2)
8247 rv2gv = ((BINOP *)o)->op_last;
8248 if (!rv2gv || rv2gv->op_type != OP_RV2GV)
8251 refgen = (UNOP *)((BINOP *)o)->op_first;
8253 if (!refgen || refgen->op_type != OP_REFGEN)
8256 exlist = (LISTOP *)refgen->op_first;
8257 if (!exlist || exlist->op_type != OP_NULL
8258 || exlist->op_targ != OP_LIST)
8261 if (exlist->op_first->op_type != OP_PUSHMARK)
8264 rv2cv = (UNOP*)exlist->op_last;
8266 if (rv2cv->op_type != OP_RV2CV)
8269 assert ((rv2gv->op_private & OPpDONT_INIT_GV) == 0);
8270 assert ((o->op_private & OPpASSIGN_CV_TO_GV) == 0);
8271 assert ((rv2cv->op_private & OPpMAY_RETURN_CONSTANT) == 0);
8273 o->op_private |= OPpASSIGN_CV_TO_GV;
8274 rv2gv->op_private |= OPpDONT_INIT_GV;
8275 rv2cv->op_private |= OPpMAY_RETURN_CONSTANT;
8291 Perl_custom_op_name(pTHX_ const OP* o)
8294 const IV index = PTR2IV(o->op_ppaddr);
8298 if (!PL_custom_op_names) /* This probably shouldn't happen */
8299 return (char *)PL_op_name[OP_CUSTOM];
8301 keysv = sv_2mortal(newSViv(index));
8303 he = hv_fetch_ent(PL_custom_op_names, keysv, 0, 0);
8305 return (char *)PL_op_name[OP_CUSTOM]; /* Don't know who you are */
8307 return SvPV_nolen(HeVAL(he));
8311 Perl_custom_op_desc(pTHX_ const OP* o)
8314 const IV index = PTR2IV(o->op_ppaddr);
8318 if (!PL_custom_op_descs)
8319 return (char *)PL_op_desc[OP_CUSTOM];
8321 keysv = sv_2mortal(newSViv(index));
8323 he = hv_fetch_ent(PL_custom_op_descs, keysv, 0, 0);
8325 return (char *)PL_op_desc[OP_CUSTOM];
8327 return SvPV_nolen(HeVAL(he));
8332 /* Efficient sub that returns a constant scalar value. */
8334 const_sv_xsub(pTHX_ CV* cv)
8341 Perl_croak(aTHX_ "usage: %s::%s()",
8342 HvNAME_get(GvSTASH(CvGV(cv))), GvNAME(CvGV(cv)));
8346 ST(0) = (SV*)XSANY.any_ptr;
8352 * c-indentation-style: bsd
8354 * indent-tabs-mode: t
8357 * ex: set ts=8 sts=4 sw=4 noet: