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 tbl = PerlMemShared_realloc(tbl,
3083 (0x101+rlen-j) * sizeof(short));
3084 cPVOPo->op_pv = (char*)tbl;
3086 tbl[0x100] = (short)(rlen - j);
3087 for (i=0; i < (I32)rlen - j; i++)
3088 tbl[0x101+i] = r[j+i];
3092 if (!rlen && !del) {
3095 o->op_private |= OPpTRANS_IDENTICAL;
3097 else if (!squash && rlen == tlen && memEQ((char*)t, (char*)r, tlen)) {
3098 o->op_private |= OPpTRANS_IDENTICAL;
3100 for (i = 0; i < 256; i++)
3102 for (i = 0, j = 0; i < (I32)tlen; i++,j++) {
3103 if (j >= (I32)rlen) {
3105 if (tbl[t[i]] == -1)
3111 if (tbl[t[i]] == -1) {
3112 if (t[i] < 128 && r[j] >= 128)
3119 o->op_private |= OPpTRANS_GROWS;
3121 op_getmad(expr,o,'e');
3122 op_getmad(repl,o,'r');
3132 Perl_newPMOP(pTHX_ I32 type, I32 flags)
3137 NewOp(1101, pmop, 1, PMOP);
3138 pmop->op_type = (OPCODE)type;
3139 pmop->op_ppaddr = PL_ppaddr[type];
3140 pmop->op_flags = (U8)flags;
3141 pmop->op_private = (U8)(0 | (flags >> 8));
3143 if (PL_hints & HINT_RE_TAINT)
3144 pmop->op_pmpermflags |= PMf_RETAINT;
3145 if (PL_hints & HINT_LOCALE)
3146 pmop->op_pmpermflags |= PMf_LOCALE;
3147 pmop->op_pmflags = pmop->op_pmpermflags;
3150 if (av_len((AV*) PL_regex_pad[0]) > -1) {
3151 SV * const repointer = av_pop((AV*)PL_regex_pad[0]);
3152 pmop->op_pmoffset = SvIV(repointer);
3153 SvREPADTMP_off(repointer);
3154 sv_setiv(repointer,0);
3156 SV * const repointer = newSViv(0);
3157 av_push(PL_regex_padav, SvREFCNT_inc_simple_NN(repointer));
3158 pmop->op_pmoffset = av_len(PL_regex_padav);
3159 PL_regex_pad = AvARRAY(PL_regex_padav);
3163 /* link into pm list */
3164 if (type != OP_TRANS && PL_curstash) {
3165 MAGIC *mg = mg_find((SV*)PL_curstash, PERL_MAGIC_symtab);
3168 mg = sv_magicext((SV*)PL_curstash, 0, PERL_MAGIC_symtab, 0, 0, 0);
3170 pmop->op_pmnext = (PMOP*)mg->mg_obj;
3171 mg->mg_obj = (SV*)pmop;
3172 PmopSTASH_set(pmop,PL_curstash);
3175 return CHECKOP(type, pmop);
3178 /* Given some sort of match op o, and an expression expr containing a
3179 * pattern, either compile expr into a regex and attach it to o (if it's
3180 * constant), or convert expr into a runtime regcomp op sequence (if it's
3183 * isreg indicates that the pattern is part of a regex construct, eg
3184 * $x =~ /pattern/ or split /pattern/, as opposed to $x =~ $pattern or
3185 * split "pattern", which aren't. In the former case, expr will be a list
3186 * if the pattern contains more than one term (eg /a$b/) or if it contains
3187 * a replacement, ie s/// or tr///.
3191 Perl_pmruntime(pTHX_ OP *o, OP *expr, bool isreg)
3196 I32 repl_has_vars = 0;
3200 if (o->op_type == OP_SUBST || o->op_type == OP_TRANS) {
3201 /* last element in list is the replacement; pop it */
3203 repl = cLISTOPx(expr)->op_last;
3204 kid = cLISTOPx(expr)->op_first;
3205 while (kid->op_sibling != repl)
3206 kid = kid->op_sibling;
3207 kid->op_sibling = NULL;
3208 cLISTOPx(expr)->op_last = kid;
3211 if (isreg && expr->op_type == OP_LIST &&
3212 cLISTOPx(expr)->op_first->op_sibling == cLISTOPx(expr)->op_last)
3214 /* convert single element list to element */
3215 OP* const oe = expr;
3216 expr = cLISTOPx(oe)->op_first->op_sibling;
3217 cLISTOPx(oe)->op_first->op_sibling = NULL;
3218 cLISTOPx(oe)->op_last = NULL;
3222 if (o->op_type == OP_TRANS) {
3223 return pmtrans(o, expr, repl);
3226 reglist = isreg && expr->op_type == OP_LIST;
3230 PL_hints |= HINT_BLOCK_SCOPE;
3233 if (expr->op_type == OP_CONST) {
3235 SV * const pat = ((SVOP*)expr)->op_sv;
3236 const char *p = SvPV_const(pat, plen);
3237 if ((o->op_flags & OPf_SPECIAL) && (*p == ' ' && p[1] == '\0')) {
3238 U32 was_readonly = SvREADONLY(pat);
3242 sv_force_normal_flags(pat, 0);
3243 assert(!SvREADONLY(pat));
3246 SvREADONLY_off(pat);
3250 sv_setpvn(pat, "\\s+", 3);
3252 SvFLAGS(pat) |= was_readonly;
3254 p = SvPV_const(pat, plen);
3255 pm->op_pmflags |= PMf_SKIPWHITE;
3258 pm->op_pmdynflags |= PMdf_UTF8;
3259 /* FIXME - can we make this function take const char * args? */
3260 PM_SETRE(pm, CALLREGCOMP((char*)p, (char*)p + plen, pm));
3261 if (PM_GETRE(pm)->extflags & RXf_WHITE)
3262 pm->op_pmflags |= PMf_WHITE;
3264 pm->op_pmflags &= ~PMf_WHITE;
3266 op_getmad(expr,(OP*)pm,'e');
3272 if (pm->op_pmflags & PMf_KEEP || !(PL_hints & HINT_RE_EVAL))
3273 expr = newUNOP((!(PL_hints & HINT_RE_EVAL)
3275 : OP_REGCMAYBE),0,expr);
3277 NewOp(1101, rcop, 1, LOGOP);
3278 rcop->op_type = OP_REGCOMP;
3279 rcop->op_ppaddr = PL_ppaddr[OP_REGCOMP];
3280 rcop->op_first = scalar(expr);
3281 rcop->op_flags |= OPf_KIDS
3282 | ((PL_hints & HINT_RE_EVAL) ? OPf_SPECIAL : 0)
3283 | (reglist ? OPf_STACKED : 0);
3284 rcop->op_private = 1;
3287 rcop->op_targ = pad_alloc(rcop->op_type, SVs_PADTMP);
3289 /* /$x/ may cause an eval, since $x might be qr/(?{..})/ */
3292 /* establish postfix order */
3293 if (pm->op_pmflags & PMf_KEEP || !(PL_hints & HINT_RE_EVAL)) {
3295 rcop->op_next = expr;
3296 ((UNOP*)expr)->op_first->op_next = (OP*)rcop;
3299 rcop->op_next = LINKLIST(expr);
3300 expr->op_next = (OP*)rcop;
3303 prepend_elem(o->op_type, scalar((OP*)rcop), o);
3308 if (pm->op_pmflags & PMf_EVAL) {
3310 if (CopLINE(PL_curcop) < (line_t)PL_multi_end)
3311 CopLINE_set(PL_curcop, (line_t)PL_multi_end);
3313 else if (repl->op_type == OP_CONST)
3317 for (curop = LINKLIST(repl); curop!=repl; curop = LINKLIST(curop)) {
3318 if (curop->op_type == OP_SCOPE
3319 || curop->op_type == OP_LEAVE
3320 || (PL_opargs[curop->op_type] & OA_DANGEROUS)) {
3321 if (curop->op_type == OP_GV) {
3322 GV * const gv = cGVOPx_gv(curop);
3324 if (strchr("&`'123456789+-\016\022", *GvENAME(gv)))
3327 else if (curop->op_type == OP_RV2CV)
3329 else if (curop->op_type == OP_RV2SV ||
3330 curop->op_type == OP_RV2AV ||
3331 curop->op_type == OP_RV2HV ||
3332 curop->op_type == OP_RV2GV) {
3333 if (lastop && lastop->op_type != OP_GV) /*funny deref?*/
3336 else if (curop->op_type == OP_PADSV ||
3337 curop->op_type == OP_PADAV ||
3338 curop->op_type == OP_PADHV ||
3339 curop->op_type == OP_PADANY)
3343 else if (curop->op_type == OP_PUSHRE)
3344 NOOP; /* Okay here, dangerous in newASSIGNOP */
3354 || PM_GETRE(pm)->extflags & RXf_EVAL_SEEN)))
3356 pm->op_pmflags |= PMf_CONST; /* const for long enough */
3357 pm->op_pmpermflags |= PMf_CONST; /* const for long enough */
3358 prepend_elem(o->op_type, scalar(repl), o);
3361 if (curop == repl && !PM_GETRE(pm)) { /* Has variables. */
3362 pm->op_pmflags |= PMf_MAYBE_CONST;
3363 pm->op_pmpermflags |= PMf_MAYBE_CONST;
3365 NewOp(1101, rcop, 1, LOGOP);
3366 rcop->op_type = OP_SUBSTCONT;
3367 rcop->op_ppaddr = PL_ppaddr[OP_SUBSTCONT];
3368 rcop->op_first = scalar(repl);
3369 rcop->op_flags |= OPf_KIDS;
3370 rcop->op_private = 1;
3373 /* establish postfix order */
3374 rcop->op_next = LINKLIST(repl);
3375 repl->op_next = (OP*)rcop;
3377 pm->op_pmreplroot = scalar((OP*)rcop);
3378 pm->op_pmreplstart = LINKLIST(rcop);
3387 Perl_newSVOP(pTHX_ I32 type, I32 flags, SV *sv)
3391 NewOp(1101, svop, 1, SVOP);
3392 svop->op_type = (OPCODE)type;
3393 svop->op_ppaddr = PL_ppaddr[type];
3395 svop->op_next = (OP*)svop;
3396 svop->op_flags = (U8)flags;
3397 if (PL_opargs[type] & OA_RETSCALAR)
3399 if (PL_opargs[type] & OA_TARGET)
3400 svop->op_targ = pad_alloc(type, SVs_PADTMP);
3401 return CHECKOP(type, svop);
3405 Perl_newPADOP(pTHX_ I32 type, I32 flags, SV *sv)
3409 NewOp(1101, padop, 1, PADOP);
3410 padop->op_type = (OPCODE)type;
3411 padop->op_ppaddr = PL_ppaddr[type];
3412 padop->op_padix = pad_alloc(type, SVs_PADTMP);
3413 SvREFCNT_dec(PAD_SVl(padop->op_padix));
3414 PAD_SETSV(padop->op_padix, sv);
3417 padop->op_next = (OP*)padop;
3418 padop->op_flags = (U8)flags;
3419 if (PL_opargs[type] & OA_RETSCALAR)
3421 if (PL_opargs[type] & OA_TARGET)
3422 padop->op_targ = pad_alloc(type, SVs_PADTMP);
3423 return CHECKOP(type, padop);
3427 Perl_newGVOP(pTHX_ I32 type, I32 flags, GV *gv)
3433 return newPADOP(type, flags, SvREFCNT_inc_simple(gv));
3435 return newSVOP(type, flags, SvREFCNT_inc_simple(gv));
3440 Perl_newPVOP(pTHX_ I32 type, I32 flags, char *pv)
3444 NewOp(1101, pvop, 1, PVOP);
3445 pvop->op_type = (OPCODE)type;
3446 pvop->op_ppaddr = PL_ppaddr[type];
3448 pvop->op_next = (OP*)pvop;
3449 pvop->op_flags = (U8)flags;
3450 if (PL_opargs[type] & OA_RETSCALAR)
3452 if (PL_opargs[type] & OA_TARGET)
3453 pvop->op_targ = pad_alloc(type, SVs_PADTMP);
3454 return CHECKOP(type, pvop);
3462 Perl_package(pTHX_ OP *o)
3471 save_hptr(&PL_curstash);
3472 save_item(PL_curstname);
3474 name = SvPV_const(cSVOPo->op_sv, len);
3475 PL_curstash = gv_stashpvn(name, len, TRUE);
3476 sv_setpvn(PL_curstname, name, len);
3478 PL_hints |= HINT_BLOCK_SCOPE;
3479 PL_copline = NOLINE;
3485 if (!PL_madskills) {
3490 pegop = newOP(OP_NULL,0);
3491 op_getmad(o,pegop,'P');
3501 Perl_utilize(pTHX_ int aver, I32 floor, OP *version, OP *idop, OP *arg)
3508 OP *pegop = newOP(OP_NULL,0);
3511 if (idop->op_type != OP_CONST)
3512 Perl_croak(aTHX_ "Module name must be constant");
3515 op_getmad(idop,pegop,'U');
3520 SV * const vesv = ((SVOP*)version)->op_sv;
3523 op_getmad(version,pegop,'V');
3524 if (!arg && !SvNIOKp(vesv)) {
3531 if (version->op_type != OP_CONST || !SvNIOKp(vesv))
3532 Perl_croak(aTHX_ "Version number must be constant number");
3534 /* Make copy of idop so we don't free it twice */
3535 pack = newSVOP(OP_CONST, 0, newSVsv(((SVOP*)idop)->op_sv));
3537 /* Fake up a method call to VERSION */
3538 meth = newSVpvs_share("VERSION");
3539 veop = convert(OP_ENTERSUB, OPf_STACKED|OPf_SPECIAL,
3540 append_elem(OP_LIST,
3541 prepend_elem(OP_LIST, pack, list(version)),
3542 newSVOP(OP_METHOD_NAMED, 0, meth)));
3546 /* Fake up an import/unimport */
3547 if (arg && arg->op_type == OP_STUB) {
3549 op_getmad(arg,pegop,'S');
3550 imop = arg; /* no import on explicit () */
3552 else if (SvNIOKp(((SVOP*)idop)->op_sv)) {
3553 imop = NULL; /* use 5.0; */
3555 idop->op_private |= OPpCONST_NOVER;
3561 op_getmad(arg,pegop,'A');
3563 /* Make copy of idop so we don't free it twice */
3564 pack = newSVOP(OP_CONST, 0, newSVsv(((SVOP*)idop)->op_sv));
3566 /* Fake up a method call to import/unimport */
3568 ? newSVpvs_share("import") : newSVpvs_share("unimport");
3569 imop = convert(OP_ENTERSUB, OPf_STACKED|OPf_SPECIAL,
3570 append_elem(OP_LIST,
3571 prepend_elem(OP_LIST, pack, list(arg)),
3572 newSVOP(OP_METHOD_NAMED, 0, meth)));
3575 /* Fake up the BEGIN {}, which does its thing immediately. */
3577 newSVOP(OP_CONST, 0, newSVpvs_share("BEGIN")),
3580 append_elem(OP_LINESEQ,
3581 append_elem(OP_LINESEQ,
3582 newSTATEOP(0, NULL, newUNOP(OP_REQUIRE, 0, idop)),
3583 newSTATEOP(0, NULL, veop)),
3584 newSTATEOP(0, NULL, imop) ));
3586 /* The "did you use incorrect case?" warning used to be here.
3587 * The problem is that on case-insensitive filesystems one
3588 * might get false positives for "use" (and "require"):
3589 * "use Strict" or "require CARP" will work. This causes
3590 * portability problems for the script: in case-strict
3591 * filesystems the script will stop working.
3593 * The "incorrect case" warning checked whether "use Foo"
3594 * imported "Foo" to your namespace, but that is wrong, too:
3595 * there is no requirement nor promise in the language that
3596 * a Foo.pm should or would contain anything in package "Foo".
3598 * There is very little Configure-wise that can be done, either:
3599 * the case-sensitivity of the build filesystem of Perl does not
3600 * help in guessing the case-sensitivity of the runtime environment.
3603 PL_hints |= HINT_BLOCK_SCOPE;
3604 PL_copline = NOLINE;
3606 PL_cop_seqmax++; /* Purely for B::*'s benefit */
3609 if (!PL_madskills) {
3610 /* FIXME - don't allocate pegop if !PL_madskills */
3619 =head1 Embedding Functions
3621 =for apidoc load_module
3623 Loads the module whose name is pointed to by the string part of name.
3624 Note that the actual module name, not its filename, should be given.
3625 Eg, "Foo::Bar" instead of "Foo/Bar.pm". flags can be any of
3626 PERL_LOADMOD_DENY, PERL_LOADMOD_NOIMPORT, or PERL_LOADMOD_IMPORT_OPS
3627 (or 0 for no flags). ver, if specified, provides version semantics
3628 similar to C<use Foo::Bar VERSION>. The optional trailing SV*
3629 arguments can be used to specify arguments to the module's import()
3630 method, similar to C<use Foo::Bar VERSION LIST>.
3635 Perl_load_module(pTHX_ U32 flags, SV *name, SV *ver, ...)
3638 va_start(args, ver);
3639 vload_module(flags, name, ver, &args);
3643 #ifdef PERL_IMPLICIT_CONTEXT
3645 Perl_load_module_nocontext(U32 flags, SV *name, SV *ver, ...)
3649 va_start(args, ver);
3650 vload_module(flags, name, ver, &args);
3656 Perl_vload_module(pTHX_ U32 flags, SV *name, SV *ver, va_list *args)
3661 OP * const modname = newSVOP(OP_CONST, 0, name);
3662 modname->op_private |= OPpCONST_BARE;
3664 veop = newSVOP(OP_CONST, 0, ver);
3668 if (flags & PERL_LOADMOD_NOIMPORT) {
3669 imop = sawparens(newNULLLIST());
3671 else if (flags & PERL_LOADMOD_IMPORT_OPS) {
3672 imop = va_arg(*args, OP*);
3677 sv = va_arg(*args, SV*);
3679 imop = append_elem(OP_LIST, imop, newSVOP(OP_CONST, 0, sv));
3680 sv = va_arg(*args, SV*);
3684 const line_t ocopline = PL_copline;
3685 COP * const ocurcop = PL_curcop;
3686 const int oexpect = PL_expect;
3688 utilize(!(flags & PERL_LOADMOD_DENY), start_subparse(FALSE, 0),
3689 veop, modname, imop);
3690 PL_expect = oexpect;
3691 PL_copline = ocopline;
3692 PL_curcop = ocurcop;
3697 Perl_dofile(pTHX_ OP *term, I32 force_builtin)
3703 if (!force_builtin) {
3704 gv = gv_fetchpvs("do", GV_NOTQUAL, SVt_PVCV);
3705 if (!(gv && GvCVu(gv) && GvIMPORTED_CV(gv))) {
3706 GV * const * const gvp = (GV**)hv_fetchs(PL_globalstash, "do", FALSE);
3707 gv = gvp ? *gvp : NULL;
3711 if (gv && GvCVu(gv) && GvIMPORTED_CV(gv)) {
3712 doop = ck_subr(newUNOP(OP_ENTERSUB, OPf_STACKED,
3713 append_elem(OP_LIST, term,
3714 scalar(newUNOP(OP_RV2CV, 0,
3715 newGVOP(OP_GV, 0, gv))))));
3718 doop = newUNOP(OP_DOFILE, 0, scalar(term));
3724 Perl_newSLICEOP(pTHX_ I32 flags, OP *subscript, OP *listval)
3726 return newBINOP(OP_LSLICE, flags,
3727 list(force_list(subscript)),
3728 list(force_list(listval)) );
3732 S_is_list_assignment(pTHX_ register const OP *o)
3740 if ((o->op_type == OP_NULL) && (o->op_flags & OPf_KIDS))
3741 o = cUNOPo->op_first;
3743 flags = o->op_flags;
3745 if (type == OP_COND_EXPR) {
3746 const I32 t = is_list_assignment(cLOGOPo->op_first->op_sibling);
3747 const I32 f = is_list_assignment(cLOGOPo->op_first->op_sibling->op_sibling);
3752 yyerror("Assignment to both a list and a scalar");
3756 if (type == OP_LIST &&
3757 (flags & OPf_WANT) == OPf_WANT_SCALAR &&
3758 o->op_private & OPpLVAL_INTRO)
3761 if (type == OP_LIST || flags & OPf_PARENS ||
3762 type == OP_RV2AV || type == OP_RV2HV ||
3763 type == OP_ASLICE || type == OP_HSLICE)
3766 if (type == OP_PADAV || type == OP_PADHV)
3769 if (type == OP_RV2SV)
3776 Perl_newASSIGNOP(pTHX_ I32 flags, OP *left, I32 optype, OP *right)
3782 if (optype == OP_ANDASSIGN || optype == OP_ORASSIGN || optype == OP_DORASSIGN) {
3783 return newLOGOP(optype, 0,
3784 mod(scalar(left), optype),
3785 newUNOP(OP_SASSIGN, 0, scalar(right)));
3788 return newBINOP(optype, OPf_STACKED,
3789 mod(scalar(left), optype), scalar(right));
3793 if (is_list_assignment(left)) {
3797 /* Grandfathering $[ assignment here. Bletch.*/
3798 /* Only simple assignments like C<< ($[) = 1 >> are allowed */
3799 PL_eval_start = (left->op_type == OP_CONST) ? right : 0;
3800 left = mod(left, OP_AASSIGN);
3803 else if (left->op_type == OP_CONST) {
3805 /* Result of assignment is always 1 (or we'd be dead already) */
3806 return newSVOP(OP_CONST, 0, newSViv(1));
3808 curop = list(force_list(left));
3809 o = newBINOP(OP_AASSIGN, flags, list(force_list(right)), curop);
3810 o->op_private = (U8)(0 | (flags >> 8));
3812 /* PL_generation sorcery:
3813 * an assignment like ($a,$b) = ($c,$d) is easier than
3814 * ($a,$b) = ($c,$a), since there is no need for temporary vars.
3815 * To detect whether there are common vars, the global var
3816 * PL_generation is incremented for each assign op we compile.
3817 * Then, while compiling the assign op, we run through all the
3818 * variables on both sides of the assignment, setting a spare slot
3819 * in each of them to PL_generation. If any of them already have
3820 * that value, we know we've got commonality. We could use a
3821 * single bit marker, but then we'd have to make 2 passes, first
3822 * to clear the flag, then to test and set it. To find somewhere
3823 * to store these values, evil chicanery is done with SvUVX().
3829 for (curop = LINKLIST(o); curop != o; curop = LINKLIST(curop)) {
3830 if (PL_opargs[curop->op_type] & OA_DANGEROUS) {
3831 if (curop->op_type == OP_GV) {
3832 GV *gv = cGVOPx_gv(curop);
3834 || (int)GvASSIGN_GENERATION(gv) == PL_generation)
3836 GvASSIGN_GENERATION_set(gv, PL_generation);
3838 else if (curop->op_type == OP_PADSV ||
3839 curop->op_type == OP_PADAV ||
3840 curop->op_type == OP_PADHV ||
3841 curop->op_type == OP_PADANY)
3843 if (PAD_COMPNAME_GEN(curop->op_targ)
3844 == (STRLEN)PL_generation)
3846 PAD_COMPNAME_GEN_set(curop->op_targ, PL_generation);
3849 else if (curop->op_type == OP_RV2CV)
3851 else if (curop->op_type == OP_RV2SV ||
3852 curop->op_type == OP_RV2AV ||
3853 curop->op_type == OP_RV2HV ||
3854 curop->op_type == OP_RV2GV) {
3855 if (lastop->op_type != OP_GV) /* funny deref? */
3858 else if (curop->op_type == OP_PUSHRE) {
3859 if (((PMOP*)curop)->op_pmreplroot) {
3861 GV *gv = (GV*)PAD_SVl(INT2PTR(PADOFFSET,
3862 ((PMOP*)curop)->op_pmreplroot));
3864 GV *gv = (GV*)((PMOP*)curop)->op_pmreplroot;
3867 || (int)GvASSIGN_GENERATION(gv) == PL_generation)
3869 GvASSIGN_GENERATION_set(gv, PL_generation);
3870 GvASSIGN_GENERATION_set(gv, PL_generation);
3879 o->op_private |= OPpASSIGN_COMMON;
3882 if ( ((left->op_private & OPpLVAL_INTRO) || ckWARN(WARN_MISC))
3883 && (left->op_type == OP_LIST
3884 || (left->op_type == OP_NULL && left->op_targ == OP_LIST)))
3886 OP* lop = ((LISTOP*)left)->op_first;
3888 if (lop->op_type == OP_PADSV ||
3889 lop->op_type == OP_PADAV ||
3890 lop->op_type == OP_PADHV ||
3891 lop->op_type == OP_PADANY)
3893 if (lop->op_private & OPpPAD_STATE) {
3894 if (left->op_private & OPpLVAL_INTRO) {
3895 o->op_private |= OPpASSIGN_STATE;
3896 /* hijacking PADSTALE for uninitialized state variables */
3897 SvPADSTALE_on(PAD_SVl(lop->op_targ));
3899 else { /* we already checked for WARN_MISC before */
3900 Perl_warner(aTHX_ packWARN(WARN_MISC), "State variable %s will be reinitialized",
3901 PAD_COMPNAME_PV(lop->op_targ));
3905 lop = lop->op_sibling;
3909 if (right && right->op_type == OP_SPLIT) {
3910 OP* tmpop = ((LISTOP*)right)->op_first;
3911 if (tmpop && (tmpop->op_type == OP_PUSHRE)) {
3912 PMOP * const pm = (PMOP*)tmpop;
3913 if (left->op_type == OP_RV2AV &&
3914 !(left->op_private & OPpLVAL_INTRO) &&
3915 !(o->op_private & OPpASSIGN_COMMON) )
3917 tmpop = ((UNOP*)left)->op_first;
3918 if (tmpop->op_type == OP_GV && !pm->op_pmreplroot) {
3920 pm->op_pmreplroot = INT2PTR(OP*, cPADOPx(tmpop)->op_padix);
3921 cPADOPx(tmpop)->op_padix = 0; /* steal it */
3923 pm->op_pmreplroot = (OP*)cSVOPx(tmpop)->op_sv;
3924 cSVOPx(tmpop)->op_sv = NULL; /* steal it */
3926 pm->op_pmflags |= PMf_ONCE;
3927 tmpop = cUNOPo->op_first; /* to list (nulled) */
3928 tmpop = ((UNOP*)tmpop)->op_first; /* to pushmark */
3929 tmpop->op_sibling = NULL; /* don't free split */
3930 right->op_next = tmpop->op_next; /* fix starting loc */
3932 op_getmad(o,right,'R'); /* blow off assign */
3934 op_free(o); /* blow off assign */
3936 right->op_flags &= ~OPf_WANT;
3937 /* "I don't know and I don't care." */
3942 if (PL_modcount < RETURN_UNLIMITED_NUMBER &&
3943 ((LISTOP*)right)->op_last->op_type == OP_CONST)
3945 SV *sv = ((SVOP*)((LISTOP*)right)->op_last)->op_sv;
3947 sv_setiv(sv, PL_modcount+1);
3955 right = newOP(OP_UNDEF, 0);
3956 if (right->op_type == OP_READLINE) {
3957 right->op_flags |= OPf_STACKED;
3958 return newBINOP(OP_NULL, flags, mod(scalar(left), OP_SASSIGN), scalar(right));
3961 PL_eval_start = right; /* Grandfathering $[ assignment here. Bletch.*/
3962 o = newBINOP(OP_SASSIGN, flags,
3963 scalar(right), mod(scalar(left), OP_SASSIGN) );
3969 o = newSVOP(OP_CONST, 0, newSViv(CopARYBASE_get(&PL_compiling)));
3970 o->op_private |= OPpCONST_ARYBASE;
3977 Perl_newSTATEOP(pTHX_ I32 flags, char *label, OP *o)
3980 const U32 seq = intro_my();
3983 NewOp(1101, cop, 1, COP);
3984 if (PERLDB_LINE && CopLINE(PL_curcop) && PL_curstash != PL_debstash) {
3985 cop->op_type = OP_DBSTATE;
3986 cop->op_ppaddr = PL_ppaddr[ OP_DBSTATE ];
3989 cop->op_type = OP_NEXTSTATE;
3990 cop->op_ppaddr = PL_ppaddr[ OP_NEXTSTATE ];
3992 cop->op_flags = (U8)flags;
3993 CopHINTS_set(cop, PL_hints);
3995 cop->op_private |= NATIVE_HINTS;
3997 CopHINTS_set(&PL_compiling, CopHINTS_get(cop));
3998 cop->op_next = (OP*)cop;
4001 CopLABEL_set(cop, label);
4002 PL_hints |= HINT_BLOCK_SCOPE;
4005 /* CopARYBASE is now "virtual", in that it's stored as a flag bit in
4006 CopHINTS and a possible value in cop_hints_hash, so no need to copy it.
4008 cop->cop_warnings = DUP_WARNINGS(PL_curcop->cop_warnings);
4009 cop->cop_hints_hash = PL_curcop->cop_hints_hash;
4010 if (cop->cop_hints_hash) {
4012 cop->cop_hints_hash->refcounted_he_refcnt++;
4013 HINTS_REFCNT_UNLOCK;
4016 if (PL_copline == NOLINE)
4017 CopLINE_set(cop, CopLINE(PL_curcop));
4019 CopLINE_set(cop, PL_copline);
4020 PL_copline = NOLINE;
4023 CopFILE_set(cop, CopFILE(PL_curcop)); /* XXX share in a pvtable? */
4025 CopFILEGV_set(cop, CopFILEGV(PL_curcop));
4027 CopSTASH_set(cop, PL_curstash);
4029 if (PERLDB_LINE && PL_curstash != PL_debstash) {
4030 AV *av = CopFILEAVx(PL_curcop);
4032 SV * const * const svp = av_fetch(av, (I32)CopLINE(cop), FALSE);
4033 if (svp && *svp != &PL_sv_undef ) {
4034 (void)SvIOK_on(*svp);
4035 SvIV_set(*svp, PTR2IV(cop));
4040 return prepend_elem(OP_LINESEQ, (OP*)cop, o);
4045 Perl_newLOGOP(pTHX_ I32 type, I32 flags, OP *first, OP *other)
4048 return new_logop(type, flags, &first, &other);
4052 S_new_logop(pTHX_ I32 type, I32 flags, OP** firstp, OP** otherp)
4057 OP *first = *firstp;
4058 OP * const other = *otherp;
4060 if (type == OP_XOR) /* Not short circuit, but here by precedence. */
4061 return newBINOP(type, flags, scalar(first), scalar(other));
4063 scalarboolean(first);
4064 /* optimize "!a && b" to "a || b", and "!a || b" to "a && b" */
4065 if (first->op_type == OP_NOT
4066 && (first->op_flags & OPf_SPECIAL)
4067 && (first->op_flags & OPf_KIDS)) {
4068 if (type == OP_AND || type == OP_OR) {
4074 first = *firstp = cUNOPo->op_first;
4076 first->op_next = o->op_next;
4077 cUNOPo->op_first = NULL;
4079 op_getmad(o,first,'O');
4085 if (first->op_type == OP_CONST) {
4086 if (first->op_private & OPpCONST_STRICT)
4087 no_bareword_allowed(first);
4088 else if ((first->op_private & OPpCONST_BARE) && ckWARN(WARN_BAREWORD))
4089 Perl_warner(aTHX_ packWARN(WARN_BAREWORD), "Bareword found in conditional");
4090 if ((type == OP_AND && SvTRUE(((SVOP*)first)->op_sv)) ||
4091 (type == OP_OR && !SvTRUE(((SVOP*)first)->op_sv)) ||
4092 (type == OP_DOR && !SvOK(((SVOP*)first)->op_sv))) {
4094 if (other->op_type == OP_CONST)
4095 other->op_private |= OPpCONST_SHORTCIRCUIT;
4097 OP *newop = newUNOP(OP_NULL, 0, other);
4098 op_getmad(first, newop, '1');
4099 newop->op_targ = type; /* set "was" field */
4106 /* check for C<my $x if 0>, or C<my($x,$y) if 0> */
4107 const OP *o2 = other;
4108 if ( ! (o2->op_type == OP_LIST
4109 && (( o2 = cUNOPx(o2)->op_first))
4110 && o2->op_type == OP_PUSHMARK
4111 && (( o2 = o2->op_sibling)) )
4114 if ((o2->op_type == OP_PADSV || o2->op_type == OP_PADAV
4115 || o2->op_type == OP_PADHV)
4116 && o2->op_private & OPpLVAL_INTRO
4117 && ckWARN(WARN_DEPRECATED))
4119 Perl_warner(aTHX_ packWARN(WARN_DEPRECATED),
4120 "Deprecated use of my() in false conditional");
4124 if (first->op_type == OP_CONST)
4125 first->op_private |= OPpCONST_SHORTCIRCUIT;
4127 first = newUNOP(OP_NULL, 0, first);
4128 op_getmad(other, first, '2');
4129 first->op_targ = type; /* set "was" field */
4136 else if ((first->op_flags & OPf_KIDS) && type != OP_DOR
4137 && ckWARN(WARN_MISC)) /* [#24076] Don't warn for <FH> err FOO. */
4139 const OP * const k1 = ((UNOP*)first)->op_first;
4140 const OP * const k2 = k1->op_sibling;
4142 switch (first->op_type)
4145 if (k2 && k2->op_type == OP_READLINE
4146 && (k2->op_flags & OPf_STACKED)
4147 && ((k1->op_flags & OPf_WANT) == OPf_WANT_SCALAR))
4149 warnop = k2->op_type;
4154 if (k1->op_type == OP_READDIR
4155 || k1->op_type == OP_GLOB
4156 || (k1->op_type == OP_NULL && k1->op_targ == OP_GLOB)
4157 || k1->op_type == OP_EACH)
4159 warnop = ((k1->op_type == OP_NULL)
4160 ? (OPCODE)k1->op_targ : k1->op_type);
4165 const line_t oldline = CopLINE(PL_curcop);
4166 CopLINE_set(PL_curcop, PL_copline);
4167 Perl_warner(aTHX_ packWARN(WARN_MISC),
4168 "Value of %s%s can be \"0\"; test with defined()",
4170 ((warnop == OP_READLINE || warnop == OP_GLOB)
4171 ? " construct" : "() operator"));
4172 CopLINE_set(PL_curcop, oldline);
4179 if (type == OP_ANDASSIGN || type == OP_ORASSIGN || type == OP_DORASSIGN)
4180 other->op_private |= OPpASSIGN_BACKWARDS; /* other is an OP_SASSIGN */
4182 NewOp(1101, logop, 1, LOGOP);
4184 logop->op_type = (OPCODE)type;
4185 logop->op_ppaddr = PL_ppaddr[type];
4186 logop->op_first = first;
4187 logop->op_flags = (U8)(flags | OPf_KIDS);
4188 logop->op_other = LINKLIST(other);
4189 logop->op_private = (U8)(1 | (flags >> 8));
4191 /* establish postfix order */
4192 logop->op_next = LINKLIST(first);
4193 first->op_next = (OP*)logop;
4194 first->op_sibling = other;
4196 CHECKOP(type,logop);
4198 o = newUNOP(OP_NULL, 0, (OP*)logop);
4205 Perl_newCONDOP(pTHX_ I32 flags, OP *first, OP *trueop, OP *falseop)
4213 return newLOGOP(OP_AND, 0, first, trueop);
4215 return newLOGOP(OP_OR, 0, first, falseop);
4217 scalarboolean(first);
4218 if (first->op_type == OP_CONST) {
4219 if (first->op_private & OPpCONST_BARE &&
4220 first->op_private & OPpCONST_STRICT) {
4221 no_bareword_allowed(first);
4223 if (SvTRUE(((SVOP*)first)->op_sv)) {
4226 trueop = newUNOP(OP_NULL, 0, trueop);
4227 op_getmad(first,trueop,'C');
4228 op_getmad(falseop,trueop,'e');
4230 /* FIXME for MAD - should there be an ELSE here? */
4240 falseop = newUNOP(OP_NULL, 0, falseop);
4241 op_getmad(first,falseop,'C');
4242 op_getmad(trueop,falseop,'t');
4244 /* FIXME for MAD - should there be an ELSE here? */
4252 NewOp(1101, logop, 1, LOGOP);
4253 logop->op_type = OP_COND_EXPR;
4254 logop->op_ppaddr = PL_ppaddr[OP_COND_EXPR];
4255 logop->op_first = first;
4256 logop->op_flags = (U8)(flags | OPf_KIDS);
4257 logop->op_private = (U8)(1 | (flags >> 8));
4258 logop->op_other = LINKLIST(trueop);
4259 logop->op_next = LINKLIST(falseop);
4261 CHECKOP(OP_COND_EXPR, /* that's logop->op_type */
4264 /* establish postfix order */
4265 start = LINKLIST(first);
4266 first->op_next = (OP*)logop;
4268 first->op_sibling = trueop;
4269 trueop->op_sibling = falseop;
4270 o = newUNOP(OP_NULL, 0, (OP*)logop);
4272 trueop->op_next = falseop->op_next = o;
4279 Perl_newRANGE(pTHX_ I32 flags, OP *left, OP *right)
4288 NewOp(1101, range, 1, LOGOP);
4290 range->op_type = OP_RANGE;
4291 range->op_ppaddr = PL_ppaddr[OP_RANGE];
4292 range->op_first = left;
4293 range->op_flags = OPf_KIDS;
4294 leftstart = LINKLIST(left);
4295 range->op_other = LINKLIST(right);
4296 range->op_private = (U8)(1 | (flags >> 8));
4298 left->op_sibling = right;
4300 range->op_next = (OP*)range;
4301 flip = newUNOP(OP_FLIP, flags, (OP*)range);
4302 flop = newUNOP(OP_FLOP, 0, flip);
4303 o = newUNOP(OP_NULL, 0, flop);
4305 range->op_next = leftstart;
4307 left->op_next = flip;
4308 right->op_next = flop;
4310 range->op_targ = pad_alloc(OP_RANGE, SVs_PADMY);
4311 sv_upgrade(PAD_SV(range->op_targ), SVt_PVNV);
4312 flip->op_targ = pad_alloc(OP_RANGE, SVs_PADMY);
4313 sv_upgrade(PAD_SV(flip->op_targ), SVt_PVNV);
4315 flip->op_private = left->op_type == OP_CONST ? OPpFLIP_LINENUM : 0;
4316 flop->op_private = right->op_type == OP_CONST ? OPpFLIP_LINENUM : 0;
4319 if (!flip->op_private || !flop->op_private)
4320 linklist(o); /* blow off optimizer unless constant */
4326 Perl_newLOOPOP(pTHX_ I32 flags, I32 debuggable, OP *expr, OP *block)
4331 const bool once = block && block->op_flags & OPf_SPECIAL &&
4332 (block->op_type == OP_ENTERSUB || block->op_type == OP_NULL);
4334 PERL_UNUSED_ARG(debuggable);
4337 if (once && expr->op_type == OP_CONST && !SvTRUE(((SVOP*)expr)->op_sv))
4338 return block; /* do {} while 0 does once */
4339 if (expr->op_type == OP_READLINE || expr->op_type == OP_GLOB
4340 || (expr->op_type == OP_NULL && expr->op_targ == OP_GLOB)) {
4341 expr = newUNOP(OP_DEFINED, 0,
4342 newASSIGNOP(0, newDEFSVOP(), 0, expr) );
4343 } else if (expr->op_flags & OPf_KIDS) {
4344 const OP * const k1 = ((UNOP*)expr)->op_first;
4345 const OP * const k2 = k1 ? k1->op_sibling : NULL;
4346 switch (expr->op_type) {
4348 if (k2 && k2->op_type == OP_READLINE
4349 && (k2->op_flags & OPf_STACKED)
4350 && ((k1->op_flags & OPf_WANT) == OPf_WANT_SCALAR))
4351 expr = newUNOP(OP_DEFINED, 0, expr);
4355 if (k1 && (k1->op_type == OP_READDIR
4356 || k1->op_type == OP_GLOB
4357 || (k1->op_type == OP_NULL && k1->op_targ == OP_GLOB)
4358 || k1->op_type == OP_EACH))
4359 expr = newUNOP(OP_DEFINED, 0, expr);
4365 /* if block is null, the next append_elem() would put UNSTACK, a scalar
4366 * op, in listop. This is wrong. [perl #27024] */
4368 block = newOP(OP_NULL, 0);
4369 listop = append_elem(OP_LINESEQ, block, newOP(OP_UNSTACK, 0));
4370 o = new_logop(OP_AND, 0, &expr, &listop);
4373 ((LISTOP*)listop)->op_last->op_next = LINKLIST(o);
4375 if (once && o != listop)
4376 o->op_next = ((LOGOP*)cUNOPo->op_first)->op_other;
4379 o = newUNOP(OP_NULL, 0, o); /* or do {} while 1 loses outer block */
4381 o->op_flags |= flags;
4383 o->op_flags |= OPf_SPECIAL; /* suppress POPBLOCK curpm restoration*/
4388 Perl_newWHILEOP(pTHX_ I32 flags, I32 debuggable, LOOP *loop, I32
4389 whileline, OP *expr, OP *block, OP *cont, I32 has_my)
4398 PERL_UNUSED_ARG(debuggable);
4401 if (expr->op_type == OP_READLINE || expr->op_type == OP_GLOB
4402 || (expr->op_type == OP_NULL && expr->op_targ == OP_GLOB)) {
4403 expr = newUNOP(OP_DEFINED, 0,
4404 newASSIGNOP(0, newDEFSVOP(), 0, expr) );
4405 } else if (expr->op_flags & OPf_KIDS) {
4406 const OP * const k1 = ((UNOP*)expr)->op_first;
4407 const OP * const k2 = (k1) ? k1->op_sibling : NULL;
4408 switch (expr->op_type) {
4410 if (k2 && k2->op_type == OP_READLINE
4411 && (k2->op_flags & OPf_STACKED)
4412 && ((k1->op_flags & OPf_WANT) == OPf_WANT_SCALAR))
4413 expr = newUNOP(OP_DEFINED, 0, expr);
4417 if (k1 && (k1->op_type == OP_READDIR
4418 || k1->op_type == OP_GLOB
4419 || (k1->op_type == OP_NULL && k1->op_targ == OP_GLOB)
4420 || k1->op_type == OP_EACH))
4421 expr = newUNOP(OP_DEFINED, 0, expr);
4428 block = newOP(OP_NULL, 0);
4429 else if (cont || has_my) {
4430 block = scope(block);
4434 next = LINKLIST(cont);
4437 OP * const unstack = newOP(OP_UNSTACK, 0);
4440 cont = append_elem(OP_LINESEQ, cont, unstack);
4444 listop = append_list(OP_LINESEQ, (LISTOP*)block, (LISTOP*)cont);
4446 redo = LINKLIST(listop);
4449 PL_copline = (line_t)whileline;
4451 o = new_logop(OP_AND, 0, &expr, &listop);
4452 if (o == expr && o->op_type == OP_CONST && !SvTRUE(cSVOPo->op_sv)) {
4453 op_free(expr); /* oops, it's a while (0) */
4455 return NULL; /* listop already freed by new_logop */
4458 ((LISTOP*)listop)->op_last->op_next =
4459 (o == listop ? redo : LINKLIST(o));
4465 NewOp(1101,loop,1,LOOP);
4466 loop->op_type = OP_ENTERLOOP;
4467 loop->op_ppaddr = PL_ppaddr[OP_ENTERLOOP];
4468 loop->op_private = 0;
4469 loop->op_next = (OP*)loop;
4472 o = newBINOP(OP_LEAVELOOP, 0, (OP*)loop, o);
4474 loop->op_redoop = redo;
4475 loop->op_lastop = o;
4476 o->op_private |= loopflags;
4479 loop->op_nextop = next;
4481 loop->op_nextop = o;
4483 o->op_flags |= flags;
4484 o->op_private |= (flags >> 8);
4489 Perl_newFOROP(pTHX_ I32 flags, char *label, line_t forline, OP *sv, OP *expr, OP *block, OP *cont)
4494 PADOFFSET padoff = 0;
4500 if (sv->op_type == OP_RV2SV) { /* symbol table variable */
4501 iterpflags = sv->op_private & OPpOUR_INTRO; /* for our $x () */
4502 sv->op_type = OP_RV2GV;
4503 sv->op_ppaddr = PL_ppaddr[OP_RV2GV];
4504 if (cGVOPx_gv(cUNOPx(sv)->op_first) == PL_defgv)
4505 iterpflags |= OPpITER_DEF;
4507 else if (sv->op_type == OP_PADSV) { /* private variable */
4508 iterpflags = sv->op_private & OPpLVAL_INTRO; /* for my $x () */
4509 padoff = sv->op_targ;
4519 Perl_croak(aTHX_ "Can't use %s for loop variable", PL_op_desc[sv->op_type]);
4521 SV *const namesv = PAD_COMPNAME_SV(padoff);
4523 const char *const name = SvPV_const(namesv, len);
4525 if (len == 2 && name[0] == '$' && name[1] == '_')
4526 iterpflags |= OPpITER_DEF;
4530 const PADOFFSET offset = pad_findmy("$_");
4531 if (offset == NOT_IN_PAD || PAD_COMPNAME_FLAGS_isOUR(offset)) {
4532 sv = newGVOP(OP_GV, 0, PL_defgv);
4537 iterpflags |= OPpITER_DEF;
4539 if (expr->op_type == OP_RV2AV || expr->op_type == OP_PADAV) {
4540 expr = mod(force_list(scalar(ref(expr, OP_ITER))), OP_GREPSTART);
4541 iterflags |= OPf_STACKED;
4543 else if (expr->op_type == OP_NULL &&
4544 (expr->op_flags & OPf_KIDS) &&
4545 ((BINOP*)expr)->op_first->op_type == OP_FLOP)
4547 /* Basically turn for($x..$y) into the same as for($x,$y), but we
4548 * set the STACKED flag to indicate that these values are to be
4549 * treated as min/max values by 'pp_iterinit'.
4551 const UNOP* const flip = (UNOP*)((UNOP*)((BINOP*)expr)->op_first)->op_first;
4552 LOGOP* const range = (LOGOP*) flip->op_first;
4553 OP* const left = range->op_first;
4554 OP* const right = left->op_sibling;
4557 range->op_flags &= ~OPf_KIDS;
4558 range->op_first = NULL;
4560 listop = (LISTOP*)newLISTOP(OP_LIST, 0, left, right);
4561 listop->op_first->op_next = range->op_next;
4562 left->op_next = range->op_other;
4563 right->op_next = (OP*)listop;
4564 listop->op_next = listop->op_first;
4567 op_getmad(expr,(OP*)listop,'O');
4571 expr = (OP*)(listop);
4573 iterflags |= OPf_STACKED;
4576 expr = mod(force_list(expr), OP_GREPSTART);
4579 loop = (LOOP*)list(convert(OP_ENTERITER, iterflags,
4580 append_elem(OP_LIST, expr, scalar(sv))));
4581 assert(!loop->op_next);
4582 /* for my $x () sets OPpLVAL_INTRO;
4583 * for our $x () sets OPpOUR_INTRO */
4584 loop->op_private = (U8)iterpflags;
4585 #ifdef PL_OP_SLAB_ALLOC
4588 NewOp(1234,tmp,1,LOOP);
4589 Copy(loop,tmp,1,LISTOP);
4590 S_op_destroy(aTHX_ (OP*)loop);
4594 loop = (LOOP*)PerlMemShared_realloc(loop, sizeof(LOOP));
4596 loop->op_targ = padoff;
4597 wop = newWHILEOP(flags, 1, loop, forline, newOP(OP_ITER, 0), block, cont, 0);
4599 op_getmad(madsv, (OP*)loop, 'v');
4600 PL_copline = forline;
4601 return newSTATEOP(0, label, wop);
4605 Perl_newLOOPEX(pTHX_ I32 type, OP *label)
4610 if (type != OP_GOTO || label->op_type == OP_CONST) {
4611 /* "last()" means "last" */
4612 if (label->op_type == OP_STUB && (label->op_flags & OPf_PARENS))
4613 o = newOP(type, OPf_SPECIAL);
4615 o = newPVOP(type, 0, savesharedpv(label->op_type == OP_CONST
4616 ? SvPVx_nolen_const(((SVOP*)label)->op_sv)
4620 op_getmad(label,o,'L');
4626 /* Check whether it's going to be a goto &function */
4627 if (label->op_type == OP_ENTERSUB
4628 && !(label->op_flags & OPf_STACKED))
4629 label = newUNOP(OP_REFGEN, 0, mod(label, OP_REFGEN));
4630 o = newUNOP(type, OPf_STACKED, label);
4632 PL_hints |= HINT_BLOCK_SCOPE;
4636 /* if the condition is a literal array or hash
4637 (or @{ ... } etc), make a reference to it.
4640 S_ref_array_or_hash(pTHX_ OP *cond)
4643 && (cond->op_type == OP_RV2AV
4644 || cond->op_type == OP_PADAV
4645 || cond->op_type == OP_RV2HV
4646 || cond->op_type == OP_PADHV))
4648 return newUNOP(OP_REFGEN,
4649 0, mod(cond, OP_REFGEN));
4655 /* These construct the optree fragments representing given()
4658 entergiven and enterwhen are LOGOPs; the op_other pointer
4659 points up to the associated leave op. We need this so we
4660 can put it in the context and make break/continue work.
4661 (Also, of course, pp_enterwhen will jump straight to
4662 op_other if the match fails.)
4667 S_newGIVWHENOP(pTHX_ OP *cond, OP *block,
4668 I32 enter_opcode, I32 leave_opcode,
4669 PADOFFSET entertarg)
4675 NewOp(1101, enterop, 1, LOGOP);
4676 enterop->op_type = enter_opcode;
4677 enterop->op_ppaddr = PL_ppaddr[enter_opcode];
4678 enterop->op_flags = (U8) OPf_KIDS;
4679 enterop->op_targ = ((entertarg == NOT_IN_PAD) ? 0 : entertarg);
4680 enterop->op_private = 0;
4682 o = newUNOP(leave_opcode, 0, (OP *) enterop);
4685 enterop->op_first = scalar(cond);
4686 cond->op_sibling = block;
4688 o->op_next = LINKLIST(cond);
4689 cond->op_next = (OP *) enterop;
4692 /* This is a default {} block */
4693 enterop->op_first = block;
4694 enterop->op_flags |= OPf_SPECIAL;
4696 o->op_next = (OP *) enterop;
4699 CHECKOP(enter_opcode, enterop); /* Currently does nothing, since
4700 entergiven and enterwhen both
4703 enterop->op_next = LINKLIST(block);
4704 block->op_next = enterop->op_other = o;
4709 /* Does this look like a boolean operation? For these purposes
4710 a boolean operation is:
4711 - a subroutine call [*]
4712 - a logical connective
4713 - a comparison operator
4714 - a filetest operator, with the exception of -s -M -A -C
4715 - defined(), exists() or eof()
4716 - /$re/ or $foo =~ /$re/
4718 [*] possibly surprising
4722 S_looks_like_bool(pTHX_ const OP *o)
4725 switch(o->op_type) {
4727 return looks_like_bool(cLOGOPo->op_first);
4731 looks_like_bool(cLOGOPo->op_first)
4732 && looks_like_bool(cLOGOPo->op_first->op_sibling));
4736 case OP_NOT: case OP_XOR:
4737 /* Note that OP_DOR is not here */
4739 case OP_EQ: case OP_NE: case OP_LT:
4740 case OP_GT: case OP_LE: case OP_GE:
4742 case OP_I_EQ: case OP_I_NE: case OP_I_LT:
4743 case OP_I_GT: case OP_I_LE: case OP_I_GE:
4745 case OP_SEQ: case OP_SNE: case OP_SLT:
4746 case OP_SGT: case OP_SLE: case OP_SGE:
4750 case OP_FTRREAD: case OP_FTRWRITE: case OP_FTREXEC:
4751 case OP_FTEREAD: case OP_FTEWRITE: case OP_FTEEXEC:
4752 case OP_FTIS: case OP_FTEOWNED: case OP_FTROWNED:
4753 case OP_FTZERO: case OP_FTSOCK: case OP_FTCHR:
4754 case OP_FTBLK: case OP_FTFILE: case OP_FTDIR:
4755 case OP_FTPIPE: case OP_FTLINK: case OP_FTSUID:
4756 case OP_FTSGID: case OP_FTSVTX: case OP_FTTTY:
4757 case OP_FTTEXT: case OP_FTBINARY:
4759 case OP_DEFINED: case OP_EXISTS:
4760 case OP_MATCH: case OP_EOF:
4765 /* Detect comparisons that have been optimized away */
4766 if (cSVOPo->op_sv == &PL_sv_yes
4767 || cSVOPo->op_sv == &PL_sv_no)
4778 Perl_newGIVENOP(pTHX_ OP *cond, OP *block, PADOFFSET defsv_off)
4782 return newGIVWHENOP(
4783 ref_array_or_hash(cond),
4785 OP_ENTERGIVEN, OP_LEAVEGIVEN,
4789 /* If cond is null, this is a default {} block */
4791 Perl_newWHENOP(pTHX_ OP *cond, OP *block)
4793 const bool cond_llb = (!cond || looks_like_bool(cond));
4799 cond_op = newBINOP(OP_SMARTMATCH, OPf_SPECIAL,
4801 scalar(ref_array_or_hash(cond)));
4804 return newGIVWHENOP(
4806 append_elem(block->op_type, block, newOP(OP_BREAK, OPf_SPECIAL)),
4807 OP_ENTERWHEN, OP_LEAVEWHEN, 0);
4811 =for apidoc cv_undef
4813 Clear out all the active components of a CV. This can happen either
4814 by an explicit C<undef &foo>, or by the reference count going to zero.
4815 In the former case, we keep the CvOUTSIDE pointer, so that any anonymous
4816 children can still follow the full lexical scope chain.
4822 Perl_cv_undef(pTHX_ CV *cv)
4826 if (CvFILE(cv) && !CvISXSUB(cv)) {
4827 /* for XSUBs CvFILE point directly to static memory; __FILE__ */
4828 Safefree(CvFILE(cv));
4833 if (!CvISXSUB(cv) && CvROOT(cv)) {
4834 if (SvTYPE(cv) == SVt_PVCV && CvDEPTH(cv))
4835 Perl_croak(aTHX_ "Can't undef active subroutine");
4838 PAD_SAVE_SETNULLPAD();
4840 op_free(CvROOT(cv));
4845 SvPOK_off((SV*)cv); /* forget prototype */
4850 /* remove CvOUTSIDE unless this is an undef rather than a free */
4851 if (!SvREFCNT(cv) && CvOUTSIDE(cv)) {
4852 if (!CvWEAKOUTSIDE(cv))
4853 SvREFCNT_dec(CvOUTSIDE(cv));
4854 CvOUTSIDE(cv) = NULL;
4857 SvREFCNT_dec((SV*)CvXSUBANY(cv).any_ptr);
4860 if (CvISXSUB(cv) && CvXSUB(cv)) {
4863 /* delete all flags except WEAKOUTSIDE */
4864 CvFLAGS(cv) &= CVf_WEAKOUTSIDE;
4868 Perl_cv_ckproto_len(pTHX_ const CV *cv, const GV *gv, const char *p,
4871 /* Can't just use a strcmp on the prototype, as CONSTSUBs "cheat" by
4872 relying on SvCUR, and doubling up the buffer to hold CvFILE(). */
4873 if (((!p != !SvPOK(cv)) /* One has prototype, one has not. */
4874 || (p && (len != SvCUR(cv) /* Not the same length. */
4875 || memNE(p, SvPVX_const(cv), len))))
4876 && ckWARN_d(WARN_PROTOTYPE)) {
4877 SV* const msg = sv_newmortal();
4881 gv_efullname3(name = sv_newmortal(), gv, NULL);
4882 sv_setpv(msg, "Prototype mismatch:");
4884 Perl_sv_catpvf(aTHX_ msg, " sub %"SVf, SVfARG(name));
4886 Perl_sv_catpvf(aTHX_ msg, " (%"SVf")", SVfARG(cv));
4888 sv_catpvs(msg, ": none");
4889 sv_catpvs(msg, " vs ");
4891 Perl_sv_catpvf(aTHX_ msg, "(%.*s)", (int) len, p);
4893 sv_catpvs(msg, "none");
4894 Perl_warner(aTHX_ packWARN(WARN_PROTOTYPE), "%"SVf, SVfARG(msg));
4898 static void const_sv_xsub(pTHX_ CV* cv);
4902 =head1 Optree Manipulation Functions
4904 =for apidoc cv_const_sv
4906 If C<cv> is a constant sub eligible for inlining. returns the constant
4907 value returned by the sub. Otherwise, returns NULL.
4909 Constant subs can be created with C<newCONSTSUB> or as described in
4910 L<perlsub/"Constant Functions">.
4915 Perl_cv_const_sv(pTHX_ CV *cv)
4917 PERL_UNUSED_CONTEXT;
4920 if (!(SvTYPE(cv) == SVt_PVCV || SvTYPE(cv) == SVt_PVFM))
4922 return CvCONST(cv) ? (SV*)CvXSUBANY(cv).any_ptr : NULL;
4925 /* op_const_sv: examine an optree to determine whether it's in-lineable.
4926 * Can be called in 3 ways:
4929 * look for a single OP_CONST with attached value: return the value
4931 * cv && CvCLONE(cv) && !CvCONST(cv)
4933 * examine the clone prototype, and if contains only a single
4934 * OP_CONST referencing a pad const, or a single PADSV referencing
4935 * an outer lexical, return a non-zero value to indicate the CV is
4936 * a candidate for "constizing" at clone time
4940 * We have just cloned an anon prototype that was marked as a const
4941 * candidiate. Try to grab the current value, and in the case of
4942 * PADSV, ignore it if it has multiple references. Return the value.
4946 Perl_op_const_sv(pTHX_ const OP *o, CV *cv)
4954 if (o->op_type == OP_LINESEQ && cLISTOPo->op_first)
4955 o = cLISTOPo->op_first->op_sibling;
4957 for (; o; o = o->op_next) {
4958 const OPCODE type = o->op_type;
4960 if (sv && o->op_next == o)
4962 if (o->op_next != o) {
4963 if (type == OP_NEXTSTATE || type == OP_NULL || type == OP_PUSHMARK)
4965 if (type == OP_DBSTATE)
4968 if (type == OP_LEAVESUB || type == OP_RETURN)
4972 if (type == OP_CONST && cSVOPo->op_sv)
4974 else if (cv && type == OP_CONST) {
4975 sv = PAD_BASE_SV(CvPADLIST(cv), o->op_targ);
4979 else if (cv && type == OP_PADSV) {
4980 if (CvCONST(cv)) { /* newly cloned anon */
4981 sv = PAD_BASE_SV(CvPADLIST(cv), o->op_targ);
4982 /* the candidate should have 1 ref from this pad and 1 ref
4983 * from the parent */
4984 if (!sv || SvREFCNT(sv) != 2)
4991 if (PAD_COMPNAME_FLAGS(o->op_targ) & SVf_FAKE)
4992 sv = &PL_sv_undef; /* an arbitrary non-null value */
5007 Perl_newMYSUB(pTHX_ I32 floor, OP *o, OP *proto, OP *attrs, OP *block)
5010 /* This would be the return value, but the return cannot be reached. */
5011 OP* pegop = newOP(OP_NULL, 0);
5014 PERL_UNUSED_ARG(floor);
5024 Perl_croak(aTHX_ "\"my sub\" not yet implemented");
5026 NORETURN_FUNCTION_END;
5031 Perl_newSUB(pTHX_ I32 floor, OP *o, OP *proto, OP *block)
5033 return Perl_newATTRSUB(aTHX_ floor, o, proto, NULL, block);
5037 Perl_newATTRSUB(pTHX_ I32 floor, OP *o, OP *proto, OP *attrs, OP *block)
5044 register CV *cv = NULL;
5046 /* If the subroutine has no body, no attributes, and no builtin attributes
5047 then it's just a sub declaration, and we may be able to get away with
5048 storing with a placeholder scalar in the symbol table, rather than a
5049 full GV and CV. If anything is present then it will take a full CV to
5051 const I32 gv_fetch_flags
5052 = (block || attrs || (CvFLAGS(PL_compcv) & CVf_BUILTIN_ATTRS)
5054 ? GV_ADDMULTI : GV_ADDMULTI | GV_NOINIT;
5055 const char * const name = o ? SvPVx_nolen_const(cSVOPo->op_sv) : NULL;
5058 assert(proto->op_type == OP_CONST);
5059 ps = SvPVx_const(((SVOP*)proto)->op_sv, ps_len);
5064 if (!name && PERLDB_NAMEANON && CopLINE(PL_curcop)) {
5065 SV * const sv = sv_newmortal();
5066 Perl_sv_setpvf(aTHX_ sv, "%s[%s:%"IVdf"]",
5067 PL_curstash ? "__ANON__" : "__ANON__::__ANON__",
5068 CopFILE(PL_curcop), (IV)CopLINE(PL_curcop));
5069 aname = SvPVX_const(sv);
5074 gv = name ? gv_fetchsv(cSVOPo->op_sv, gv_fetch_flags, SVt_PVCV)
5075 : gv_fetchpv(aname ? aname
5076 : (PL_curstash ? "__ANON__" : "__ANON__::__ANON__"),
5077 gv_fetch_flags, SVt_PVCV);
5079 if (!PL_madskills) {
5088 if (SvTYPE(gv) != SVt_PVGV) { /* Maybe prototype now, and had at
5089 maximum a prototype before. */
5090 if (SvTYPE(gv) > SVt_NULL) {
5091 if (!SvPOK((SV*)gv) && !(SvIOK((SV*)gv) && SvIVX((SV*)gv) == -1)
5092 && ckWARN_d(WARN_PROTOTYPE))
5094 Perl_warner(aTHX_ packWARN(WARN_PROTOTYPE), "Runaway prototype");
5096 cv_ckproto_len((CV*)gv, NULL, ps, ps_len);
5099 sv_setpvn((SV*)gv, ps, ps_len);
5101 sv_setiv((SV*)gv, -1);
5102 SvREFCNT_dec(PL_compcv);
5103 cv = PL_compcv = NULL;
5104 PL_sub_generation++;
5108 cv = (!name || GvCVGEN(gv)) ? NULL : GvCV(gv);
5110 #ifdef GV_UNIQUE_CHECK
5111 if (cv && GvUNIQUE(gv) && SvREADONLY(cv)) {
5112 Perl_croak(aTHX_ "Can't define subroutine %s (GV is unique)", name);
5116 if (!block || !ps || *ps || attrs
5117 || (CvFLAGS(PL_compcv) & CVf_BUILTIN_ATTRS)
5119 || block->op_type == OP_NULL
5124 const_sv = op_const_sv(block, NULL);
5127 const bool exists = CvROOT(cv) || CvXSUB(cv);
5129 #ifdef GV_UNIQUE_CHECK
5130 if (exists && GvUNIQUE(gv)) {
5131 Perl_croak(aTHX_ "Can't redefine unique subroutine %s", name);
5135 /* if the subroutine doesn't exist and wasn't pre-declared
5136 * with a prototype, assume it will be AUTOLOADed,
5137 * skipping the prototype check
5139 if (exists || SvPOK(cv))
5140 cv_ckproto_len(cv, gv, ps, ps_len);
5141 /* already defined (or promised)? */
5142 if (exists || GvASSUMECV(gv)) {
5145 || block->op_type == OP_NULL
5148 if (CvFLAGS(PL_compcv)) {
5149 /* might have had built-in attrs applied */
5150 CvFLAGS(cv) |= (CvFLAGS(PL_compcv) & CVf_BUILTIN_ATTRS);
5152 /* just a "sub foo;" when &foo is already defined */
5153 SAVEFREESV(PL_compcv);
5158 && block->op_type != OP_NULL
5161 if (ckWARN(WARN_REDEFINE)
5163 && (!const_sv || sv_cmp(cv_const_sv(cv), const_sv))))
5165 const line_t oldline = CopLINE(PL_curcop);
5166 if (PL_copline != NOLINE)
5167 CopLINE_set(PL_curcop, PL_copline);
5168 Perl_warner(aTHX_ packWARN(WARN_REDEFINE),
5169 CvCONST(cv) ? "Constant subroutine %s redefined"
5170 : "Subroutine %s redefined", name);
5171 CopLINE_set(PL_curcop, oldline);
5174 if (!PL_minus_c) /* keep old one around for madskills */
5177 /* (PL_madskills unset in used file.) */
5185 SvREFCNT_inc_simple_void_NN(const_sv);
5187 assert(!CvROOT(cv) && !CvCONST(cv));
5188 sv_setpvn((SV*)cv, "", 0); /* prototype is "" */
5189 CvXSUBANY(cv).any_ptr = const_sv;
5190 CvXSUB(cv) = const_sv_xsub;
5196 cv = newCONSTSUB(NULL, name, const_sv);
5198 PL_sub_generation++;
5202 SvREFCNT_dec(PL_compcv);
5210 /* Need to do a C<use attributes $stash_of_cv,\&cv,@attrs>
5211 * before we clobber PL_compcv.
5215 || block->op_type == OP_NULL
5219 /* Might have had built-in attributes applied -- propagate them. */
5220 CvFLAGS(cv) |= (CvFLAGS(PL_compcv) & CVf_BUILTIN_ATTRS);
5221 if (CvGV(cv) && GvSTASH(CvGV(cv)))
5222 stash = GvSTASH(CvGV(cv));
5223 else if (CvSTASH(cv))
5224 stash = CvSTASH(cv);
5226 stash = PL_curstash;
5229 /* possibly about to re-define existing subr -- ignore old cv */
5230 rcv = (SV*)PL_compcv;
5231 if (name && GvSTASH(gv))
5232 stash = GvSTASH(gv);
5234 stash = PL_curstash;
5236 apply_attrs(stash, rcv, attrs, FALSE);
5238 if (cv) { /* must reuse cv if autoloaded */
5245 || block->op_type == OP_NULL) && !PL_madskills
5248 /* got here with just attrs -- work done, so bug out */
5249 SAVEFREESV(PL_compcv);
5252 /* transfer PL_compcv to cv */
5254 CvFLAGS(cv) = CvFLAGS(PL_compcv);
5255 if (!CvWEAKOUTSIDE(cv))
5256 SvREFCNT_dec(CvOUTSIDE(cv));
5257 CvOUTSIDE(cv) = CvOUTSIDE(PL_compcv);
5258 CvOUTSIDE_SEQ(cv) = CvOUTSIDE_SEQ(PL_compcv);
5259 CvOUTSIDE(PL_compcv) = 0;
5260 CvPADLIST(cv) = CvPADLIST(PL_compcv);
5261 CvPADLIST(PL_compcv) = 0;
5262 /* inner references to PL_compcv must be fixed up ... */
5263 pad_fixup_inner_anons(CvPADLIST(cv), PL_compcv, cv);
5264 /* ... before we throw it away */
5265 SvREFCNT_dec(PL_compcv);
5267 if (PERLDB_INTER)/* Advice debugger on the new sub. */
5268 ++PL_sub_generation;
5275 if (strEQ(name, "import")) {
5276 PL_formfeed = (SV*)cv;
5277 Perl_warner(aTHX_ packWARN(WARN_VOID), "%lx\n", (long)cv);
5281 PL_sub_generation++;
5285 CvFILE_set_from_cop(cv, PL_curcop);
5286 CvSTASH(cv) = PL_curstash;
5289 sv_setpvn((SV*)cv, ps, ps_len);
5291 if (PL_error_count) {
5295 const char *s = strrchr(name, ':');
5297 if (strEQ(s, "BEGIN")) {
5298 const char not_safe[] =
5299 "BEGIN not safe after errors--compilation aborted";
5300 if (PL_in_eval & EVAL_KEEPERR)
5301 Perl_croak(aTHX_ not_safe);
5303 /* force display of errors found but not reported */
5304 sv_catpv(ERRSV, not_safe);
5305 Perl_croak(aTHX_ "%"SVf, SVfARG(ERRSV));
5315 CvROOT(cv) = newUNOP(OP_LEAVESUBLV, 0,
5316 mod(scalarseq(block), OP_LEAVESUBLV));
5317 block->op_attached = 1;
5320 /* This makes sub {}; work as expected. */
5321 if (block->op_type == OP_STUB) {
5322 OP* const newblock = newSTATEOP(0, NULL, 0);
5324 op_getmad(block,newblock,'B');
5331 block->op_attached = 1;
5332 CvROOT(cv) = newUNOP(OP_LEAVESUB, 0, scalarseq(block));
5334 CvROOT(cv)->op_private |= OPpREFCOUNTED;
5335 OpREFCNT_set(CvROOT(cv), 1);
5336 CvSTART(cv) = LINKLIST(CvROOT(cv));
5337 CvROOT(cv)->op_next = 0;
5338 CALL_PEEP(CvSTART(cv));
5340 /* now that optimizer has done its work, adjust pad values */
5342 pad_tidy(CvCLONE(cv) ? padtidy_SUBCLONE : padtidy_SUB);
5345 assert(!CvCONST(cv));
5346 if (ps && !*ps && op_const_sv(block, cv))
5350 if (name || aname) {
5352 const char * const tname = (name ? name : aname);
5354 if (PERLDB_SUBLINE && PL_curstash != PL_debstash) {
5355 SV * const sv = newSV(0);
5356 SV * const tmpstr = sv_newmortal();
5357 GV * const db_postponed = gv_fetchpvs("DB::postponed",
5358 GV_ADDMULTI, SVt_PVHV);
5361 Perl_sv_setpvf(aTHX_ sv, "%s:%ld-%ld",
5363 (long)PL_subline, (long)CopLINE(PL_curcop));
5364 gv_efullname3(tmpstr, gv, NULL);
5365 hv_store(GvHV(PL_DBsub), SvPVX_const(tmpstr), SvCUR(tmpstr), sv, 0);
5366 hv = GvHVn(db_postponed);
5367 if (HvFILL(hv) > 0 && hv_exists(hv, SvPVX_const(tmpstr), SvCUR(tmpstr))) {
5368 CV * const pcv = GvCV(db_postponed);
5374 call_sv((SV*)pcv, G_DISCARD);
5379 if ((s = strrchr(tname,':')))
5384 if (*s != 'B' && *s != 'E' && *s != 'C' && *s != 'I' && *s != 'U')
5387 if (strEQ(s, "BEGIN") && !PL_error_count) {
5388 const I32 oldscope = PL_scopestack_ix;
5390 SAVECOPFILE(&PL_compiling);
5391 SAVECOPLINE(&PL_compiling);
5394 PL_beginav = newAV();
5395 DEBUG_x( dump_sub(gv) );
5396 av_push(PL_beginav, (SV*)cv);
5397 GvCV(gv) = 0; /* cv has been hijacked */
5398 call_list(oldscope, PL_beginav);
5400 PL_curcop = &PL_compiling;
5401 CopHINTS_set(&PL_compiling, PL_hints);
5404 else if (strEQ(s, "END") && !PL_error_count) {
5407 DEBUG_x( dump_sub(gv) );
5408 av_unshift(PL_endav, 1);
5409 av_store(PL_endav, 0, (SV*)cv);
5410 GvCV(gv) = 0; /* cv has been hijacked */
5412 else if (strEQ(s, "UNITCHECK") && !PL_error_count) {
5413 /* It's never too late to run a unitcheck block */
5414 if (!PL_unitcheckav)
5415 PL_unitcheckav = newAV();
5416 DEBUG_x( dump_sub(gv) );
5417 av_unshift(PL_unitcheckav, 1);
5418 av_store(PL_unitcheckav, 0, (SV*)cv);
5419 GvCV(gv) = 0; /* cv has been hijacked */
5421 else if (strEQ(s, "CHECK") && !PL_error_count) {
5423 PL_checkav = newAV();
5424 DEBUG_x( dump_sub(gv) );
5425 if (PL_main_start && ckWARN(WARN_VOID))
5426 Perl_warner(aTHX_ packWARN(WARN_VOID), "Too late to run CHECK block");
5427 av_unshift(PL_checkav, 1);
5428 av_store(PL_checkav, 0, (SV*)cv);
5429 GvCV(gv) = 0; /* cv has been hijacked */
5431 else if (strEQ(s, "INIT") && !PL_error_count) {
5433 PL_initav = newAV();
5434 DEBUG_x( dump_sub(gv) );
5435 if (PL_main_start && ckWARN(WARN_VOID))
5436 Perl_warner(aTHX_ packWARN(WARN_VOID), "Too late to run INIT block");
5437 av_push(PL_initav, (SV*)cv);
5438 GvCV(gv) = 0; /* cv has been hijacked */
5443 PL_copline = NOLINE;
5448 /* XXX unsafe for threads if eval_owner isn't held */
5450 =for apidoc newCONSTSUB
5452 Creates a constant sub equivalent to Perl C<sub FOO () { 123 }> which is
5453 eligible for inlining at compile-time.
5459 Perl_newCONSTSUB(pTHX_ HV *stash, const char *name, SV *sv)
5464 const char *const temp_p = CopFILE(PL_curcop);
5465 const STRLEN len = temp_p ? strlen(temp_p) : 0;
5467 SV *const temp_sv = CopFILESV(PL_curcop);
5469 const char *const temp_p = temp_sv ? SvPV_const(temp_sv, len) : NULL;
5471 char *const file = savepvn(temp_p, temp_p ? len : 0);
5475 SAVECOPLINE(PL_curcop);
5476 CopLINE_set(PL_curcop, PL_copline);
5479 PL_hints &= ~HINT_BLOCK_SCOPE;
5482 SAVESPTR(PL_curstash);
5483 SAVECOPSTASH(PL_curcop);
5484 PL_curstash = stash;
5485 CopSTASH_set(PL_curcop,stash);
5488 /* file becomes the CvFILE. For an XS, it's supposed to be static storage,
5489 and so doesn't get free()d. (It's expected to be from the C pre-
5490 processor __FILE__ directive). But we need a dynamically allocated one,
5491 and we need it to get freed. */
5492 cv = newXS_flags(name, const_sv_xsub, file, "", XS_DYNAMIC_FILENAME);
5493 CvXSUBANY(cv).any_ptr = sv;
5499 CopSTASH_free(PL_curcop);
5507 Perl_newXS_flags(pTHX_ const char *name, XSUBADDR_t subaddr,
5508 const char *const filename, const char *const proto,
5511 CV *cv = newXS(name, subaddr, filename);
5513 if (flags & XS_DYNAMIC_FILENAME) {
5514 /* We need to "make arrangements" (ie cheat) to ensure that the
5515 filename lasts as long as the PVCV we just created, but also doesn't
5517 STRLEN filename_len = strlen(filename);
5518 STRLEN proto_and_file_len = filename_len;
5519 char *proto_and_file;
5523 proto_len = strlen(proto);
5524 proto_and_file_len += proto_len;
5526 Newx(proto_and_file, proto_and_file_len + 1, char);
5527 Copy(proto, proto_and_file, proto_len, char);
5528 Copy(filename, proto_and_file + proto_len, filename_len + 1, char);
5531 proto_and_file = savepvn(filename, filename_len);
5534 /* This gets free()d. :-) */
5535 sv_usepvn_flags((SV*)cv, proto_and_file, proto_and_file_len,
5536 SV_HAS_TRAILING_NUL);
5538 /* This gives us the correct prototype, rather than one with the
5539 file name appended. */
5540 SvCUR_set(cv, proto_len);
5544 CvFILE(cv) = proto_and_file + proto_len;
5546 sv_setpv((SV *)cv, proto);
5552 =for apidoc U||newXS
5554 Used by C<xsubpp> to hook up XSUBs as Perl subs. I<filename> needs to be
5555 static storage, as it is used directly as CvFILE(), without a copy being made.
5561 Perl_newXS(pTHX_ const char *name, XSUBADDR_t subaddr, const char *filename)
5564 GV * const gv = gv_fetchpv(name ? name :
5565 (PL_curstash ? "__ANON__" : "__ANON__::__ANON__"),
5566 GV_ADDMULTI, SVt_PVCV);
5570 Perl_croak(aTHX_ "panic: no address for '%s' in '%s'", name, filename);
5572 if ((cv = (name ? GvCV(gv) : NULL))) {
5574 /* just a cached method */
5578 else if (CvROOT(cv) || CvXSUB(cv) || GvASSUMECV(gv)) {
5579 /* already defined (or promised) */
5580 /* XXX It's possible for this HvNAME_get to return null, and get passed into strEQ */
5581 if (ckWARN(WARN_REDEFINE)) {
5582 GV * const gvcv = CvGV(cv);
5584 HV * const stash = GvSTASH(gvcv);
5586 const char *redefined_name = HvNAME_get(stash);
5587 if ( strEQ(redefined_name,"autouse") ) {
5588 const line_t oldline = CopLINE(PL_curcop);
5589 if (PL_copline != NOLINE)
5590 CopLINE_set(PL_curcop, PL_copline);
5591 Perl_warner(aTHX_ packWARN(WARN_REDEFINE),
5592 CvCONST(cv) ? "Constant subroutine %s redefined"
5593 : "Subroutine %s redefined"
5595 CopLINE_set(PL_curcop, oldline);
5605 if (cv) /* must reuse cv if autoloaded */
5609 sv_upgrade((SV *)cv, SVt_PVCV);
5613 PL_sub_generation++;
5617 (void)gv_fetchfile(filename);
5618 CvFILE(cv) = (char *)filename; /* NOTE: not copied, as it is expected to be
5619 an external constant string */
5621 CvXSUB(cv) = subaddr;
5624 const char *s = strrchr(name,':');
5630 if (*s != 'B' && *s != 'E' && *s != 'C' && *s != 'I')
5633 if (strEQ(s, "BEGIN")) {
5635 PL_beginav = newAV();
5636 av_push(PL_beginav, (SV*)cv);
5637 GvCV(gv) = 0; /* cv has been hijacked */
5639 else if (strEQ(s, "END")) {
5642 av_unshift(PL_endav, 1);
5643 av_store(PL_endav, 0, (SV*)cv);
5644 GvCV(gv) = 0; /* cv has been hijacked */
5646 else if (strEQ(s, "CHECK")) {
5648 PL_checkav = newAV();
5649 if (PL_main_start && ckWARN(WARN_VOID))
5650 Perl_warner(aTHX_ packWARN(WARN_VOID), "Too late to run CHECK block");
5651 av_unshift(PL_checkav, 1);
5652 av_store(PL_checkav, 0, (SV*)cv);
5653 GvCV(gv) = 0; /* cv has been hijacked */
5655 else if (strEQ(s, "INIT")) {
5657 PL_initav = newAV();
5658 if (PL_main_start && ckWARN(WARN_VOID))
5659 Perl_warner(aTHX_ packWARN(WARN_VOID), "Too late to run INIT block");
5660 av_push(PL_initav, (SV*)cv);
5661 GvCV(gv) = 0; /* cv has been hijacked */
5676 Perl_newFORM(pTHX_ I32 floor, OP *o, OP *block)
5681 OP* pegop = newOP(OP_NULL, 0);
5685 ? gv_fetchsv(cSVOPo->op_sv, GV_ADD, SVt_PVFM)
5686 : gv_fetchpvs("STDOUT", GV_ADD|GV_NOTQUAL, SVt_PVFM);
5688 #ifdef GV_UNIQUE_CHECK
5690 Perl_croak(aTHX_ "Bad symbol for form (GV is unique)");
5694 if ((cv = GvFORM(gv))) {
5695 if (ckWARN(WARN_REDEFINE)) {
5696 const line_t oldline = CopLINE(PL_curcop);
5697 if (PL_copline != NOLINE)
5698 CopLINE_set(PL_curcop, PL_copline);
5699 Perl_warner(aTHX_ packWARN(WARN_REDEFINE),
5700 o ? "Format %"SVf" redefined"
5701 : "Format STDOUT redefined", SVfARG(cSVOPo->op_sv));
5702 CopLINE_set(PL_curcop, oldline);
5709 CvFILE_set_from_cop(cv, PL_curcop);
5712 pad_tidy(padtidy_FORMAT);
5713 CvROOT(cv) = newUNOP(OP_LEAVEWRITE, 0, scalarseq(block));
5714 CvROOT(cv)->op_private |= OPpREFCOUNTED;
5715 OpREFCNT_set(CvROOT(cv), 1);
5716 CvSTART(cv) = LINKLIST(CvROOT(cv));
5717 CvROOT(cv)->op_next = 0;
5718 CALL_PEEP(CvSTART(cv));
5720 op_getmad(o,pegop,'n');
5721 op_getmad_weak(block, pegop, 'b');
5725 PL_copline = NOLINE;
5733 Perl_newANONLIST(pTHX_ OP *o)
5735 return convert(OP_ANONLIST, OPf_SPECIAL, o);
5739 Perl_newANONHASH(pTHX_ OP *o)
5741 return convert(OP_ANONHASH, OPf_SPECIAL, o);
5745 Perl_newANONSUB(pTHX_ I32 floor, OP *proto, OP *block)
5747 return newANONATTRSUB(floor, proto, NULL, block);
5751 Perl_newANONATTRSUB(pTHX_ I32 floor, OP *proto, OP *attrs, OP *block)
5753 return newUNOP(OP_REFGEN, 0,
5754 newSVOP(OP_ANONCODE, 0,
5755 (SV*)newATTRSUB(floor, 0, proto, attrs, block)));
5759 Perl_oopsAV(pTHX_ OP *o)
5762 switch (o->op_type) {
5764 o->op_type = OP_PADAV;
5765 o->op_ppaddr = PL_ppaddr[OP_PADAV];
5766 return ref(o, OP_RV2AV);
5769 o->op_type = OP_RV2AV;
5770 o->op_ppaddr = PL_ppaddr[OP_RV2AV];
5775 if (ckWARN_d(WARN_INTERNAL))
5776 Perl_warner(aTHX_ packWARN(WARN_INTERNAL), "oops: oopsAV");
5783 Perl_oopsHV(pTHX_ OP *o)
5786 switch (o->op_type) {
5789 o->op_type = OP_PADHV;
5790 o->op_ppaddr = PL_ppaddr[OP_PADHV];
5791 return ref(o, OP_RV2HV);
5795 o->op_type = OP_RV2HV;
5796 o->op_ppaddr = PL_ppaddr[OP_RV2HV];
5801 if (ckWARN_d(WARN_INTERNAL))
5802 Perl_warner(aTHX_ packWARN(WARN_INTERNAL), "oops: oopsHV");
5809 Perl_newAVREF(pTHX_ OP *o)
5812 if (o->op_type == OP_PADANY) {
5813 o->op_type = OP_PADAV;
5814 o->op_ppaddr = PL_ppaddr[OP_PADAV];
5817 else if ((o->op_type == OP_RV2AV || o->op_type == OP_PADAV)
5818 && ckWARN(WARN_DEPRECATED)) {
5819 Perl_warner(aTHX_ packWARN(WARN_DEPRECATED),
5820 "Using an array as a reference is deprecated");
5822 return newUNOP(OP_RV2AV, 0, scalar(o));
5826 Perl_newGVREF(pTHX_ I32 type, OP *o)
5828 if (type == OP_MAPSTART || type == OP_GREPSTART || type == OP_SORT)
5829 return newUNOP(OP_NULL, 0, o);
5830 return ref(newUNOP(OP_RV2GV, OPf_REF, o), type);
5834 Perl_newHVREF(pTHX_ OP *o)
5837 if (o->op_type == OP_PADANY) {
5838 o->op_type = OP_PADHV;
5839 o->op_ppaddr = PL_ppaddr[OP_PADHV];
5842 else if ((o->op_type == OP_RV2HV || o->op_type == OP_PADHV)
5843 && ckWARN(WARN_DEPRECATED)) {
5844 Perl_warner(aTHX_ packWARN(WARN_DEPRECATED),
5845 "Using a hash as a reference is deprecated");
5847 return newUNOP(OP_RV2HV, 0, scalar(o));
5851 Perl_newCVREF(pTHX_ I32 flags, OP *o)
5853 return newUNOP(OP_RV2CV, flags, scalar(o));
5857 Perl_newSVREF(pTHX_ OP *o)
5860 if (o->op_type == OP_PADANY) {
5861 o->op_type = OP_PADSV;
5862 o->op_ppaddr = PL_ppaddr[OP_PADSV];
5865 return newUNOP(OP_RV2SV, 0, scalar(o));
5868 /* Check routines. See the comments at the top of this file for details
5869 * on when these are called */
5872 Perl_ck_anoncode(pTHX_ OP *o)
5874 cSVOPo->op_targ = pad_add_anon(cSVOPo->op_sv, o->op_type);
5876 cSVOPo->op_sv = NULL;
5881 Perl_ck_bitop(pTHX_ OP *o)
5884 #define OP_IS_NUMCOMPARE(op) \
5885 ((op) == OP_LT || (op) == OP_I_LT || \
5886 (op) == OP_GT || (op) == OP_I_GT || \
5887 (op) == OP_LE || (op) == OP_I_LE || \
5888 (op) == OP_GE || (op) == OP_I_GE || \
5889 (op) == OP_EQ || (op) == OP_I_EQ || \
5890 (op) == OP_NE || (op) == OP_I_NE || \
5891 (op) == OP_NCMP || (op) == OP_I_NCMP)
5892 o->op_private = (U8)(PL_hints & HINT_INTEGER);
5893 if (!(o->op_flags & OPf_STACKED) /* Not an assignment */
5894 && (o->op_type == OP_BIT_OR
5895 || o->op_type == OP_BIT_AND
5896 || o->op_type == OP_BIT_XOR))
5898 const OP * const left = cBINOPo->op_first;
5899 const OP * const right = left->op_sibling;
5900 if ((OP_IS_NUMCOMPARE(left->op_type) &&
5901 (left->op_flags & OPf_PARENS) == 0) ||
5902 (OP_IS_NUMCOMPARE(right->op_type) &&
5903 (right->op_flags & OPf_PARENS) == 0))
5904 if (ckWARN(WARN_PRECEDENCE))
5905 Perl_warner(aTHX_ packWARN(WARN_PRECEDENCE),
5906 "Possible precedence problem on bitwise %c operator",
5907 o->op_type == OP_BIT_OR ? '|'
5908 : o->op_type == OP_BIT_AND ? '&' : '^'
5915 Perl_ck_concat(pTHX_ OP *o)
5917 const OP * const kid = cUNOPo->op_first;
5918 PERL_UNUSED_CONTEXT;
5919 if (kid->op_type == OP_CONCAT && !(kid->op_private & OPpTARGET_MY) &&
5920 !(kUNOP->op_first->op_flags & OPf_MOD))
5921 o->op_flags |= OPf_STACKED;
5926 Perl_ck_spair(pTHX_ OP *o)
5929 if (o->op_flags & OPf_KIDS) {
5932 const OPCODE type = o->op_type;
5933 o = modkids(ck_fun(o), type);
5934 kid = cUNOPo->op_first;
5935 newop = kUNOP->op_first->op_sibling;
5937 const OPCODE type = newop->op_type;
5938 if (newop->op_sibling || !(PL_opargs[type] & OA_RETSCALAR) ||
5939 type == OP_PADAV || type == OP_PADHV ||
5940 type == OP_RV2AV || type == OP_RV2HV)
5944 op_getmad(kUNOP->op_first,newop,'K');
5946 op_free(kUNOP->op_first);
5948 kUNOP->op_first = newop;
5950 o->op_ppaddr = PL_ppaddr[++o->op_type];
5955 Perl_ck_delete(pTHX_ OP *o)
5959 if (o->op_flags & OPf_KIDS) {
5960 OP * const kid = cUNOPo->op_first;
5961 switch (kid->op_type) {
5963 o->op_flags |= OPf_SPECIAL;
5966 o->op_private |= OPpSLICE;
5969 o->op_flags |= OPf_SPECIAL;
5974 Perl_croak(aTHX_ "%s argument is not a HASH or ARRAY element or slice",
5983 Perl_ck_die(pTHX_ OP *o)
5986 if (VMSISH_HUSHED) o->op_private |= OPpHUSH_VMSISH;
5992 Perl_ck_eof(pTHX_ OP *o)
5996 if (o->op_flags & OPf_KIDS) {
5997 if (cLISTOPo->op_first->op_type == OP_STUB) {
5999 = newUNOP(o->op_type, OPf_SPECIAL, newGVOP(OP_GV, 0, PL_argvgv));
6001 op_getmad(o,newop,'O');
6013 Perl_ck_eval(pTHX_ OP *o)
6016 PL_hints |= HINT_BLOCK_SCOPE;
6017 if (o->op_flags & OPf_KIDS) {
6018 SVOP * const kid = (SVOP*)cUNOPo->op_first;
6021 o->op_flags &= ~OPf_KIDS;
6024 else if (kid->op_type == OP_LINESEQ || kid->op_type == OP_STUB) {
6030 cUNOPo->op_first = 0;
6035 NewOp(1101, enter, 1, LOGOP);
6036 enter->op_type = OP_ENTERTRY;
6037 enter->op_ppaddr = PL_ppaddr[OP_ENTERTRY];
6038 enter->op_private = 0;
6040 /* establish postfix order */
6041 enter->op_next = (OP*)enter;
6043 o = prepend_elem(OP_LINESEQ, (OP*)enter, (OP*)kid);
6044 o->op_type = OP_LEAVETRY;
6045 o->op_ppaddr = PL_ppaddr[OP_LEAVETRY];
6046 enter->op_other = o;
6047 op_getmad(oldo,o,'O');
6061 o = newUNOP(OP_ENTEREVAL, 0, newDEFSVOP());
6062 op_getmad(oldo,o,'O');
6064 o->op_targ = (PADOFFSET)PL_hints;
6065 if ((PL_hints & HINT_LOCALIZE_HH) != 0 && GvHV(PL_hintgv)) {
6066 /* Store a copy of %^H that pp_entereval can pick up */
6067 OP *hhop = newSVOP(OP_CONST, 0,
6068 (SV*)Perl_hv_copy_hints_hv(aTHX_ GvHV(PL_hintgv)));
6069 cUNOPo->op_first->op_sibling = hhop;
6070 o->op_private |= OPpEVAL_HAS_HH;
6076 Perl_ck_exit(pTHX_ OP *o)
6079 HV * const table = GvHV(PL_hintgv);
6081 SV * const * const svp = hv_fetchs(table, "vmsish_exit", FALSE);
6082 if (svp && *svp && SvTRUE(*svp))
6083 o->op_private |= OPpEXIT_VMSISH;
6085 if (VMSISH_HUSHED) o->op_private |= OPpHUSH_VMSISH;
6091 Perl_ck_exec(pTHX_ OP *o)
6093 if (o->op_flags & OPf_STACKED) {
6096 kid = cUNOPo->op_first->op_sibling;
6097 if (kid->op_type == OP_RV2GV)
6106 Perl_ck_exists(pTHX_ OP *o)
6110 if (o->op_flags & OPf_KIDS) {
6111 OP * const kid = cUNOPo->op_first;
6112 if (kid->op_type == OP_ENTERSUB) {
6113 (void) ref(kid, o->op_type);
6114 if (kid->op_type != OP_RV2CV && !PL_error_count)
6115 Perl_croak(aTHX_ "%s argument is not a subroutine name",
6117 o->op_private |= OPpEXISTS_SUB;
6119 else if (kid->op_type == OP_AELEM)
6120 o->op_flags |= OPf_SPECIAL;
6121 else if (kid->op_type != OP_HELEM)
6122 Perl_croak(aTHX_ "%s argument is not a HASH or ARRAY element",
6130 Perl_ck_rvconst(pTHX_ register OP *o)
6133 SVOP * const kid = (SVOP*)cUNOPo->op_first;
6135 o->op_private |= (PL_hints & HINT_STRICT_REFS);
6136 if (o->op_type == OP_RV2CV)
6137 o->op_private &= ~1;
6139 if (kid->op_type == OP_CONST) {
6142 SV * const kidsv = kid->op_sv;
6144 /* Is it a constant from cv_const_sv()? */
6145 if (SvROK(kidsv) && SvREADONLY(kidsv)) {
6146 SV * const rsv = SvRV(kidsv);
6147 const svtype type = SvTYPE(rsv);
6148 const char *badtype = NULL;
6150 switch (o->op_type) {
6152 if (type > SVt_PVMG)
6153 badtype = "a SCALAR";
6156 if (type != SVt_PVAV)
6157 badtype = "an ARRAY";
6160 if (type != SVt_PVHV)
6164 if (type != SVt_PVCV)
6169 Perl_croak(aTHX_ "Constant is not %s reference", badtype);
6172 else if ((o->op_type == OP_RV2HV || o->op_type == OP_RV2SV) &&
6173 (PL_hints & HINT_STRICT_REFS) && SvPOK(kidsv)) {
6174 /* If this is an access to a stash, disable "strict refs", because
6175 * stashes aren't auto-vivified at compile-time (unless we store
6176 * symbols in them), and we don't want to produce a run-time
6177 * stricture error when auto-vivifying the stash. */
6178 const char *s = SvPV_nolen(kidsv);
6179 const STRLEN l = SvCUR(kidsv);
6180 if (l > 1 && s[l-1] == ':' && s[l-2] == ':')
6181 o->op_private &= ~HINT_STRICT_REFS;
6183 if ((o->op_private & HINT_STRICT_REFS) && (kid->op_private & OPpCONST_BARE)) {
6184 const char *badthing;
6185 switch (o->op_type) {
6187 badthing = "a SCALAR";
6190 badthing = "an ARRAY";
6193 badthing = "a HASH";
6201 "Can't use bareword (\"%"SVf"\") as %s ref while \"strict refs\" in use",
6202 SVfARG(kidsv), badthing);
6205 * This is a little tricky. We only want to add the symbol if we
6206 * didn't add it in the lexer. Otherwise we get duplicate strict
6207 * warnings. But if we didn't add it in the lexer, we must at
6208 * least pretend like we wanted to add it even if it existed before,
6209 * or we get possible typo warnings. OPpCONST_ENTERED says
6210 * whether the lexer already added THIS instance of this symbol.
6212 iscv = (o->op_type == OP_RV2CV) * 2;
6214 gv = gv_fetchsv(kidsv,
6215 iscv | !(kid->op_private & OPpCONST_ENTERED),
6218 : o->op_type == OP_RV2SV
6220 : o->op_type == OP_RV2AV
6222 : o->op_type == OP_RV2HV
6225 } while (!gv && !(kid->op_private & OPpCONST_ENTERED) && !iscv++);
6227 kid->op_type = OP_GV;
6228 SvREFCNT_dec(kid->op_sv);
6230 /* XXX hack: dependence on sizeof(PADOP) <= sizeof(SVOP) */
6231 kPADOP->op_padix = pad_alloc(OP_GV, SVs_PADTMP);
6232 SvREFCNT_dec(PAD_SVl(kPADOP->op_padix));
6234 PAD_SETSV(kPADOP->op_padix, (SV*) SvREFCNT_inc_simple_NN(gv));
6236 kid->op_sv = SvREFCNT_inc_simple_NN(gv);
6238 kid->op_private = 0;
6239 kid->op_ppaddr = PL_ppaddr[OP_GV];
6246 Perl_ck_ftst(pTHX_ OP *o)
6249 const I32 type = o->op_type;
6251 if (o->op_flags & OPf_REF) {
6254 else if (o->op_flags & OPf_KIDS && cUNOPo->op_first->op_type != OP_STUB) {
6255 SVOP * const kid = (SVOP*)cUNOPo->op_first;
6256 const OPCODE kidtype = kid->op_type;
6258 if (kidtype == OP_CONST && (kid->op_private & OPpCONST_BARE)) {
6259 OP * const newop = newGVOP(type, OPf_REF,
6260 gv_fetchsv(kid->op_sv, GV_ADD, SVt_PVIO));
6262 op_getmad(o,newop,'O');
6268 if ((PL_hints & HINT_FILETEST_ACCESS) && OP_IS_FILETEST_ACCESS(o))
6269 o->op_private |= OPpFT_ACCESS;
6270 if (PL_check[kidtype] == MEMBER_TO_FPTR(Perl_ck_ftst)
6271 && kidtype != OP_STAT && kidtype != OP_LSTAT)
6272 o->op_private |= OPpFT_STACKED;
6280 if (type == OP_FTTTY)
6281 o = newGVOP(type, OPf_REF, PL_stdingv);
6283 o = newUNOP(type, 0, newDEFSVOP());
6284 op_getmad(oldo,o,'O');
6290 Perl_ck_fun(pTHX_ OP *o)
6293 const int type = o->op_type;
6294 register I32 oa = PL_opargs[type] >> OASHIFT;
6296 if (o->op_flags & OPf_STACKED) {
6297 if ((oa & OA_OPTIONAL) && (oa >> 4) && !((oa >> 4) & OA_OPTIONAL))
6300 return no_fh_allowed(o);
6303 if (o->op_flags & OPf_KIDS) {
6304 OP **tokid = &cLISTOPo->op_first;
6305 register OP *kid = cLISTOPo->op_first;
6309 if (kid->op_type == OP_PUSHMARK ||
6310 (kid->op_type == OP_NULL && kid->op_targ == OP_PUSHMARK))
6312 tokid = &kid->op_sibling;
6313 kid = kid->op_sibling;
6315 if (!kid && PL_opargs[type] & OA_DEFGV)
6316 *tokid = kid = newDEFSVOP();
6320 sibl = kid->op_sibling;
6322 if (!sibl && kid->op_type == OP_STUB) {
6329 /* list seen where single (scalar) arg expected? */
6330 if (numargs == 1 && !(oa >> 4)
6331 && kid->op_type == OP_LIST && type != OP_SCALAR)
6333 return too_many_arguments(o,PL_op_desc[type]);
6346 if ((type == OP_PUSH || type == OP_UNSHIFT)
6347 && !kid->op_sibling && ckWARN(WARN_SYNTAX))
6348 Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
6349 "Useless use of %s with no values",
6352 if (kid->op_type == OP_CONST &&
6353 (kid->op_private & OPpCONST_BARE))
6355 OP * const newop = newAVREF(newGVOP(OP_GV, 0,
6356 gv_fetchsv(((SVOP*)kid)->op_sv, GV_ADD, SVt_PVAV) ));
6357 if (ckWARN2(WARN_DEPRECATED, WARN_SYNTAX))
6358 Perl_warner(aTHX_ packWARN2(WARN_DEPRECATED, WARN_SYNTAX),
6359 "Array @%"SVf" missing the @ in argument %"IVdf" of %s()",
6360 SVfARG(((SVOP*)kid)->op_sv), (IV)numargs, PL_op_desc[type]);
6362 op_getmad(kid,newop,'K');
6367 kid->op_sibling = sibl;
6370 else if (kid->op_type != OP_RV2AV && kid->op_type != OP_PADAV)
6371 bad_type(numargs, "array", PL_op_desc[type], kid);
6375 if (kid->op_type == OP_CONST &&
6376 (kid->op_private & OPpCONST_BARE))
6378 OP * const newop = newHVREF(newGVOP(OP_GV, 0,
6379 gv_fetchsv(((SVOP*)kid)->op_sv, GV_ADD, SVt_PVHV) ));
6380 if (ckWARN2(WARN_DEPRECATED, WARN_SYNTAX))
6381 Perl_warner(aTHX_ packWARN2(WARN_DEPRECATED, WARN_SYNTAX),
6382 "Hash %%%"SVf" missing the %% in argument %"IVdf" of %s()",
6383 SVfARG(((SVOP*)kid)->op_sv), (IV)numargs, PL_op_desc[type]);
6385 op_getmad(kid,newop,'K');
6390 kid->op_sibling = sibl;
6393 else if (kid->op_type != OP_RV2HV && kid->op_type != OP_PADHV)
6394 bad_type(numargs, "hash", PL_op_desc[type], kid);
6399 OP * const newop = newUNOP(OP_NULL, 0, kid);
6400 kid->op_sibling = 0;
6402 newop->op_next = newop;
6404 kid->op_sibling = sibl;
6409 if (kid->op_type != OP_GV && kid->op_type != OP_RV2GV) {
6410 if (kid->op_type == OP_CONST &&
6411 (kid->op_private & OPpCONST_BARE))
6413 OP * const newop = newGVOP(OP_GV, 0,
6414 gv_fetchsv(((SVOP*)kid)->op_sv, GV_ADD, SVt_PVIO));
6415 if (!(o->op_private & 1) && /* if not unop */
6416 kid == cLISTOPo->op_last)
6417 cLISTOPo->op_last = newop;
6419 op_getmad(kid,newop,'K');
6425 else if (kid->op_type == OP_READLINE) {
6426 /* neophyte patrol: open(<FH>), close(<FH>) etc. */
6427 bad_type(numargs, "HANDLE", OP_DESC(o), kid);
6430 I32 flags = OPf_SPECIAL;
6434 /* is this op a FH constructor? */
6435 if (is_handle_constructor(o,numargs)) {
6436 const char *name = NULL;
6440 /* Set a flag to tell rv2gv to vivify
6441 * need to "prove" flag does not mean something
6442 * else already - NI-S 1999/05/07
6445 if (kid->op_type == OP_PADSV) {
6447 = PAD_COMPNAME_SV(kid->op_targ);
6448 name = SvPV_const(namesv, len);
6450 else if (kid->op_type == OP_RV2SV
6451 && kUNOP->op_first->op_type == OP_GV)
6453 GV * const gv = cGVOPx_gv(kUNOP->op_first);
6455 len = GvNAMELEN(gv);
6457 else if (kid->op_type == OP_AELEM
6458 || kid->op_type == OP_HELEM)
6461 OP *op = ((BINOP*)kid)->op_first;
6465 const char * const a =
6466 kid->op_type == OP_AELEM ?
6468 if (((op->op_type == OP_RV2AV) ||
6469 (op->op_type == OP_RV2HV)) &&
6470 (firstop = ((UNOP*)op)->op_first) &&
6471 (firstop->op_type == OP_GV)) {
6472 /* packagevar $a[] or $h{} */
6473 GV * const gv = cGVOPx_gv(firstop);
6481 else if (op->op_type == OP_PADAV
6482 || op->op_type == OP_PADHV) {
6483 /* lexicalvar $a[] or $h{} */
6484 const char * const padname =
6485 PAD_COMPNAME_PV(op->op_targ);
6494 name = SvPV_const(tmpstr, len);
6499 name = "__ANONIO__";
6506 targ = pad_alloc(OP_RV2GV, SVs_PADTMP);
6507 namesv = PAD_SVl(targ);
6508 SvUPGRADE(namesv, SVt_PV);
6510 sv_setpvn(namesv, "$", 1);
6511 sv_catpvn(namesv, name, len);
6514 kid->op_sibling = 0;
6515 kid = newUNOP(OP_RV2GV, flags, scalar(kid));
6516 kid->op_targ = targ;
6517 kid->op_private |= priv;
6519 kid->op_sibling = sibl;
6525 mod(scalar(kid), type);
6529 tokid = &kid->op_sibling;
6530 kid = kid->op_sibling;
6533 if (kid && kid->op_type != OP_STUB)
6534 return too_many_arguments(o,OP_DESC(o));
6535 o->op_private |= numargs;
6537 /* FIXME - should the numargs move as for the PERL_MAD case? */
6538 o->op_private |= numargs;
6540 return too_many_arguments(o,OP_DESC(o));
6544 else if (PL_opargs[type] & OA_DEFGV) {
6546 OP *newop = newUNOP(type, 0, newDEFSVOP());
6547 op_getmad(o,newop,'O');
6550 /* Ordering of these two is important to keep f_map.t passing. */
6552 return newUNOP(type, 0, newDEFSVOP());
6557 while (oa & OA_OPTIONAL)
6559 if (oa && oa != OA_LIST)
6560 return too_few_arguments(o,OP_DESC(o));
6566 Perl_ck_glob(pTHX_ OP *o)
6572 if ((o->op_flags & OPf_KIDS) && !cLISTOPo->op_first->op_sibling)
6573 append_elem(OP_GLOB, o, newDEFSVOP());
6575 if (!((gv = gv_fetchpvs("glob", GV_NOTQUAL, SVt_PVCV))
6576 && GvCVu(gv) && GvIMPORTED_CV(gv)))
6578 gv = gv_fetchpvs("CORE::GLOBAL::glob", 0, SVt_PVCV);
6581 #if !defined(PERL_EXTERNAL_GLOB)
6582 /* XXX this can be tightened up and made more failsafe. */
6583 if (!(gv && GvCVu(gv) && GvIMPORTED_CV(gv))) {
6586 Perl_load_module(aTHX_ PERL_LOADMOD_NOIMPORT,
6587 newSVpvs("File::Glob"), NULL, NULL, NULL);
6588 gv = gv_fetchpvs("CORE::GLOBAL::glob", 0, SVt_PVCV);
6589 glob_gv = gv_fetchpvs("File::Glob::csh_glob", 0, SVt_PVCV);
6590 GvCV(gv) = GvCV(glob_gv);
6591 SvREFCNT_inc_void((SV*)GvCV(gv));
6592 GvIMPORTED_CV_on(gv);
6595 #endif /* PERL_EXTERNAL_GLOB */
6597 if (gv && GvCVu(gv) && GvIMPORTED_CV(gv)) {
6598 append_elem(OP_GLOB, o,
6599 newSVOP(OP_CONST, 0, newSViv(PL_glob_index++)));
6600 o->op_type = OP_LIST;
6601 o->op_ppaddr = PL_ppaddr[OP_LIST];
6602 cLISTOPo->op_first->op_type = OP_PUSHMARK;
6603 cLISTOPo->op_first->op_ppaddr = PL_ppaddr[OP_PUSHMARK];
6604 cLISTOPo->op_first->op_targ = 0;
6605 o = newUNOP(OP_ENTERSUB, OPf_STACKED,
6606 append_elem(OP_LIST, o,
6607 scalar(newUNOP(OP_RV2CV, 0,
6608 newGVOP(OP_GV, 0, gv)))));
6609 o = newUNOP(OP_NULL, 0, ck_subr(o));
6610 o->op_targ = OP_GLOB; /* hint at what it used to be */
6613 gv = newGVgen("main");
6615 append_elem(OP_GLOB, o, newGVOP(OP_GV, 0, gv));
6621 Perl_ck_grep(pTHX_ OP *o)
6626 const OPCODE type = o->op_type == OP_GREPSTART ? OP_GREPWHILE : OP_MAPWHILE;
6629 o->op_ppaddr = PL_ppaddr[OP_GREPSTART];
6630 /* don't allocate gwop here, as we may leak it if PL_error_count > 0 */
6632 if (o->op_flags & OPf_STACKED) {
6635 kid = cLISTOPo->op_first->op_sibling;
6636 if (!cUNOPx(kid)->op_next)
6637 Perl_croak(aTHX_ "panic: ck_grep");
6638 for (k = cUNOPx(kid)->op_first; k; k = k->op_next) {
6641 NewOp(1101, gwop, 1, LOGOP);
6642 kid->op_next = (OP*)gwop;
6643 o->op_flags &= ~OPf_STACKED;
6645 kid = cLISTOPo->op_first->op_sibling;
6646 if (type == OP_MAPWHILE)
6653 kid = cLISTOPo->op_first->op_sibling;
6654 if (kid->op_type != OP_NULL)
6655 Perl_croak(aTHX_ "panic: ck_grep");
6656 kid = kUNOP->op_first;
6659 NewOp(1101, gwop, 1, LOGOP);
6660 gwop->op_type = type;
6661 gwop->op_ppaddr = PL_ppaddr[type];
6662 gwop->op_first = listkids(o);
6663 gwop->op_flags |= OPf_KIDS;
6664 gwop->op_other = LINKLIST(kid);
6665 kid->op_next = (OP*)gwop;
6666 offset = pad_findmy("$_");
6667 if (offset == NOT_IN_PAD || PAD_COMPNAME_FLAGS_isOUR(offset)) {
6668 o->op_private = gwop->op_private = 0;
6669 gwop->op_targ = pad_alloc(type, SVs_PADTMP);
6672 o->op_private = gwop->op_private = OPpGREP_LEX;
6673 gwop->op_targ = o->op_targ = offset;
6676 kid = cLISTOPo->op_first->op_sibling;
6677 if (!kid || !kid->op_sibling)
6678 return too_few_arguments(o,OP_DESC(o));
6679 for (kid = kid->op_sibling; kid; kid = kid->op_sibling)
6680 mod(kid, OP_GREPSTART);
6686 Perl_ck_index(pTHX_ OP *o)
6688 if (o->op_flags & OPf_KIDS) {
6689 OP *kid = cLISTOPo->op_first->op_sibling; /* get past pushmark */
6691 kid = kid->op_sibling; /* get past "big" */
6692 if (kid && kid->op_type == OP_CONST)
6693 fbm_compile(((SVOP*)kid)->op_sv, 0);
6699 Perl_ck_lengthconst(pTHX_ OP *o)
6701 /* XXX length optimization goes here */
6706 Perl_ck_lfun(pTHX_ OP *o)
6708 const OPCODE type = o->op_type;
6709 return modkids(ck_fun(o), type);
6713 Perl_ck_defined(pTHX_ OP *o) /* 19990527 MJD */
6715 if ((o->op_flags & OPf_KIDS) && ckWARN2(WARN_DEPRECATED, WARN_SYNTAX)) {
6716 switch (cUNOPo->op_first->op_type) {
6718 /* This is needed for
6719 if (defined %stash::)
6720 to work. Do not break Tk.
6722 break; /* Globals via GV can be undef */
6724 case OP_AASSIGN: /* Is this a good idea? */
6725 Perl_warner(aTHX_ packWARN2(WARN_DEPRECATED, WARN_SYNTAX),
6726 "defined(@array) is deprecated");
6727 Perl_warner(aTHX_ packWARN2(WARN_DEPRECATED, WARN_SYNTAX),
6728 "\t(Maybe you should just omit the defined()?)\n");
6731 /* This is needed for
6732 if (defined %stash::)
6733 to work. Do not break Tk.
6735 break; /* Globals via GV can be undef */
6737 Perl_warner(aTHX_ packWARN2(WARN_DEPRECATED, WARN_SYNTAX),
6738 "defined(%%hash) is deprecated");
6739 Perl_warner(aTHX_ packWARN2(WARN_DEPRECATED, WARN_SYNTAX),
6740 "\t(Maybe you should just omit the defined()?)\n");
6751 Perl_ck_rfun(pTHX_ OP *o)
6753 const OPCODE type = o->op_type;
6754 return refkids(ck_fun(o), type);
6758 Perl_ck_listiob(pTHX_ OP *o)
6762 kid = cLISTOPo->op_first;
6765 kid = cLISTOPo->op_first;
6767 if (kid->op_type == OP_PUSHMARK)
6768 kid = kid->op_sibling;
6769 if (kid && o->op_flags & OPf_STACKED)
6770 kid = kid->op_sibling;
6771 else if (kid && !kid->op_sibling) { /* print HANDLE; */
6772 if (kid->op_type == OP_CONST && kid->op_private & OPpCONST_BARE) {
6773 o->op_flags |= OPf_STACKED; /* make it a filehandle */
6774 kid = newUNOP(OP_RV2GV, OPf_REF, scalar(kid));
6775 cLISTOPo->op_first->op_sibling = kid;
6776 cLISTOPo->op_last = kid;
6777 kid = kid->op_sibling;
6782 append_elem(o->op_type, o, newDEFSVOP());
6788 Perl_ck_smartmatch(pTHX_ OP *o)
6791 if (0 == (o->op_flags & OPf_SPECIAL)) {
6792 OP *first = cBINOPo->op_first;
6793 OP *second = first->op_sibling;
6795 /* Implicitly take a reference to an array or hash */
6796 first->op_sibling = NULL;
6797 first = cBINOPo->op_first = ref_array_or_hash(first);
6798 second = first->op_sibling = ref_array_or_hash(second);
6800 /* Implicitly take a reference to a regular expression */
6801 if (first->op_type == OP_MATCH) {
6802 first->op_type = OP_QR;
6803 first->op_ppaddr = PL_ppaddr[OP_QR];
6805 if (second->op_type == OP_MATCH) {
6806 second->op_type = OP_QR;
6807 second->op_ppaddr = PL_ppaddr[OP_QR];
6816 Perl_ck_sassign(pTHX_ OP *o)
6818 OP * const kid = cLISTOPo->op_first;
6819 /* has a disposable target? */
6820 if ((PL_opargs[kid->op_type] & OA_TARGLEX)
6821 && !(kid->op_flags & OPf_STACKED)
6822 /* Cannot steal the second time! */
6823 && !(kid->op_private & OPpTARGET_MY))
6825 OP * const kkid = kid->op_sibling;
6827 /* Can just relocate the target. */
6828 if (kkid && kkid->op_type == OP_PADSV
6829 && !(kkid->op_private & OPpLVAL_INTRO))
6831 kid->op_targ = kkid->op_targ;
6833 /* Now we do not need PADSV and SASSIGN. */
6834 kid->op_sibling = o->op_sibling; /* NULL */
6835 cLISTOPo->op_first = NULL;
6837 op_getmad(o,kid,'O');
6838 op_getmad(kkid,kid,'M');
6843 kid->op_private |= OPpTARGET_MY; /* Used for context settings */
6847 if (kid->op_sibling) {
6848 OP *kkid = kid->op_sibling;
6849 if (kkid->op_type == OP_PADSV
6850 && (kkid->op_private & OPpLVAL_INTRO)
6851 && SvPAD_STATE(*av_fetch(PL_comppad_name, kkid->op_targ, FALSE))) {
6852 o->op_private |= OPpASSIGN_STATE;
6853 /* hijacking PADSTALE for uninitialized state variables */
6854 SvPADSTALE_on(PAD_SVl(kkid->op_targ));
6861 Perl_ck_match(pTHX_ OP *o)
6864 if (o->op_type != OP_QR && PL_compcv) {
6865 const PADOFFSET offset = pad_findmy("$_");
6866 if (offset != NOT_IN_PAD && !(PAD_COMPNAME_FLAGS_isOUR(offset))) {
6867 o->op_targ = offset;
6868 o->op_private |= OPpTARGET_MY;
6871 if (o->op_type == OP_MATCH || o->op_type == OP_QR)
6872 o->op_private |= OPpRUNTIME;
6877 Perl_ck_method(pTHX_ OP *o)
6879 OP * const kid = cUNOPo->op_first;
6880 if (kid->op_type == OP_CONST) {
6881 SV* sv = kSVOP->op_sv;
6882 const char * const method = SvPVX_const(sv);
6883 if (!(strchr(method, ':') || strchr(method, '\''))) {
6885 if (!SvREADONLY(sv) || !SvFAKE(sv)) {
6886 sv = newSVpvn_share(method, SvCUR(sv), 0);
6889 kSVOP->op_sv = NULL;
6891 cmop = newSVOP(OP_METHOD_NAMED, 0, sv);
6893 op_getmad(o,cmop,'O');
6904 Perl_ck_null(pTHX_ OP *o)
6906 PERL_UNUSED_CONTEXT;
6911 Perl_ck_open(pTHX_ OP *o)
6914 HV * const table = GvHV(PL_hintgv);
6916 SV **svp = hv_fetchs(table, "open_IN", FALSE);
6918 const I32 mode = mode_from_discipline(*svp);
6919 if (mode & O_BINARY)
6920 o->op_private |= OPpOPEN_IN_RAW;
6921 else if (mode & O_TEXT)
6922 o->op_private |= OPpOPEN_IN_CRLF;
6925 svp = hv_fetchs(table, "open_OUT", FALSE);
6927 const I32 mode = mode_from_discipline(*svp);
6928 if (mode & O_BINARY)
6929 o->op_private |= OPpOPEN_OUT_RAW;
6930 else if (mode & O_TEXT)
6931 o->op_private |= OPpOPEN_OUT_CRLF;
6934 if (o->op_type == OP_BACKTICK)
6937 /* In case of three-arg dup open remove strictness
6938 * from the last arg if it is a bareword. */
6939 OP * const first = cLISTOPx(o)->op_first; /* The pushmark. */
6940 OP * const last = cLISTOPx(o)->op_last; /* The bareword. */
6944 if ((last->op_type == OP_CONST) && /* The bareword. */
6945 (last->op_private & OPpCONST_BARE) &&
6946 (last->op_private & OPpCONST_STRICT) &&
6947 (oa = first->op_sibling) && /* The fh. */
6948 (oa = oa->op_sibling) && /* The mode. */
6949 (oa->op_type == OP_CONST) &&
6950 SvPOK(((SVOP*)oa)->op_sv) &&
6951 (mode = SvPVX_const(((SVOP*)oa)->op_sv)) &&
6952 mode[0] == '>' && mode[1] == '&' && /* A dup open. */
6953 (last == oa->op_sibling)) /* The bareword. */
6954 last->op_private &= ~OPpCONST_STRICT;
6960 Perl_ck_repeat(pTHX_ OP *o)
6962 if (cBINOPo->op_first->op_flags & OPf_PARENS) {
6963 o->op_private |= OPpREPEAT_DOLIST;
6964 cBINOPo->op_first = force_list(cBINOPo->op_first);
6972 Perl_ck_require(pTHX_ OP *o)
6977 if (o->op_flags & OPf_KIDS) { /* Shall we supply missing .pm? */
6978 SVOP * const kid = (SVOP*)cUNOPo->op_first;
6980 if (kid->op_type == OP_CONST && (kid->op_private & OPpCONST_BARE)) {
6981 SV * const sv = kid->op_sv;
6982 U32 was_readonly = SvREADONLY(sv);
6987 sv_force_normal_flags(sv, 0);
6988 assert(!SvREADONLY(sv));
6995 for (s = SvPVX(sv); *s; s++) {
6996 if (*s == ':' && s[1] == ':') {
6997 const STRLEN len = strlen(s+2)+1;
6999 Move(s+2, s+1, len, char);
7000 SvCUR_set(sv, SvCUR(sv) - 1);
7003 sv_catpvs(sv, ".pm");
7004 SvFLAGS(sv) |= was_readonly;
7008 if (!(o->op_flags & OPf_SPECIAL)) { /* Wasn't written as CORE::require */
7009 /* handle override, if any */
7010 gv = gv_fetchpvs("require", GV_NOTQUAL, SVt_PVCV);
7011 if (!(gv && GvCVu(gv) && GvIMPORTED_CV(gv))) {
7012 GV * const * const gvp = (GV**)hv_fetchs(PL_globalstash, "require", FALSE);
7013 gv = gvp ? *gvp : NULL;
7017 if (gv && GvCVu(gv) && GvIMPORTED_CV(gv)) {
7018 OP * const kid = cUNOPo->op_first;
7021 cUNOPo->op_first = 0;
7025 newop = ck_subr(newUNOP(OP_ENTERSUB, OPf_STACKED,
7026 append_elem(OP_LIST, kid,
7027 scalar(newUNOP(OP_RV2CV, 0,
7030 op_getmad(o,newop,'O');
7038 Perl_ck_return(pTHX_ OP *o)
7041 if (CvLVALUE(PL_compcv)) {
7043 for (kid = cLISTOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
7044 mod(kid, OP_LEAVESUBLV);
7050 Perl_ck_select(pTHX_ OP *o)
7054 if (o->op_flags & OPf_KIDS) {
7055 kid = cLISTOPo->op_first->op_sibling; /* get past pushmark */
7056 if (kid && kid->op_sibling) {
7057 o->op_type = OP_SSELECT;
7058 o->op_ppaddr = PL_ppaddr[OP_SSELECT];
7060 return fold_constants(o);
7064 kid = cLISTOPo->op_first->op_sibling; /* get past pushmark */
7065 if (kid && kid->op_type == OP_RV2GV)
7066 kid->op_private &= ~HINT_STRICT_REFS;
7071 Perl_ck_shift(pTHX_ OP *o)
7074 const I32 type = o->op_type;
7076 if (!(o->op_flags & OPf_KIDS)) {
7078 /* FIXME - this can be refactored to reduce code in #ifdefs */
7080 OP * const oldo = o;
7084 argop = newUNOP(OP_RV2AV, 0,
7085 scalar(newGVOP(OP_GV, 0, CvUNIQUE(PL_compcv) ? PL_argvgv : PL_defgv)));
7087 o = newUNOP(type, 0, scalar(argop));
7088 op_getmad(oldo,o,'O');
7091 return newUNOP(type, 0, scalar(argop));
7094 return scalar(modkids(ck_fun(o), type));
7098 Perl_ck_sort(pTHX_ OP *o)
7103 if (o->op_type == OP_SORT && (PL_hints & HINT_LOCALIZE_HH) != 0) {
7104 HV * const hinthv = GvHV(PL_hintgv);
7106 SV ** const svp = hv_fetchs(hinthv, "sort", FALSE);
7108 const I32 sorthints = (I32)SvIV(*svp);
7109 if ((sorthints & HINT_SORT_QUICKSORT) != 0)
7110 o->op_private |= OPpSORT_QSORT;
7111 if ((sorthints & HINT_SORT_STABLE) != 0)
7112 o->op_private |= OPpSORT_STABLE;
7117 if (o->op_type == OP_SORT && o->op_flags & OPf_STACKED)
7119 firstkid = cLISTOPo->op_first->op_sibling; /* get past pushmark */
7120 if (o->op_flags & OPf_STACKED) { /* may have been cleared */
7122 OP *kid = cUNOPx(firstkid)->op_first; /* get past null */
7124 if (kid->op_type == OP_SCOPE || kid->op_type == OP_LEAVE) {
7126 if (kid->op_type == OP_SCOPE) {
7130 else if (kid->op_type == OP_LEAVE) {
7131 if (o->op_type == OP_SORT) {
7132 op_null(kid); /* wipe out leave */
7135 for (k = kLISTOP->op_first->op_next; k; k = k->op_next) {
7136 if (k->op_next == kid)
7138 /* don't descend into loops */
7139 else if (k->op_type == OP_ENTERLOOP
7140 || k->op_type == OP_ENTERITER)
7142 k = cLOOPx(k)->op_lastop;
7147 kid->op_next = 0; /* just disconnect the leave */
7148 k = kLISTOP->op_first;
7153 if (o->op_type == OP_SORT) {
7154 /* provide scalar context for comparison function/block */
7160 o->op_flags |= OPf_SPECIAL;
7162 else if (kid->op_type == OP_RV2SV || kid->op_type == OP_PADSV)
7165 firstkid = firstkid->op_sibling;
7168 /* provide list context for arguments */
7169 if (o->op_type == OP_SORT)
7176 S_simplify_sort(pTHX_ OP *o)
7179 register OP *kid = cLISTOPo->op_first->op_sibling; /* get past pushmark */
7184 if (!(o->op_flags & OPf_STACKED))
7186 GvMULTI_on(gv_fetchpvs("a", GV_ADD|GV_NOTQUAL, SVt_PV));
7187 GvMULTI_on(gv_fetchpvs("b", GV_ADD|GV_NOTQUAL, SVt_PV));
7188 kid = kUNOP->op_first; /* get past null */
7189 if (kid->op_type != OP_SCOPE)
7191 kid = kLISTOP->op_last; /* get past scope */
7192 switch(kid->op_type) {
7200 k = kid; /* remember this node*/
7201 if (kBINOP->op_first->op_type != OP_RV2SV)
7203 kid = kBINOP->op_first; /* get past cmp */
7204 if (kUNOP->op_first->op_type != OP_GV)
7206 kid = kUNOP->op_first; /* get past rv2sv */
7208 if (GvSTASH(gv) != PL_curstash)
7210 gvname = GvNAME(gv);
7211 if (*gvname == 'a' && gvname[1] == '\0')
7213 else if (*gvname == 'b' && gvname[1] == '\0')
7218 kid = k; /* back to cmp */
7219 if (kBINOP->op_last->op_type != OP_RV2SV)
7221 kid = kBINOP->op_last; /* down to 2nd arg */
7222 if (kUNOP->op_first->op_type != OP_GV)
7224 kid = kUNOP->op_first; /* get past rv2sv */
7226 if (GvSTASH(gv) != PL_curstash)
7228 gvname = GvNAME(gv);
7230 ? !(*gvname == 'a' && gvname[1] == '\0')
7231 : !(*gvname == 'b' && gvname[1] == '\0'))
7233 o->op_flags &= ~(OPf_STACKED | OPf_SPECIAL);
7235 o->op_private |= OPpSORT_DESCEND;
7236 if (k->op_type == OP_NCMP)
7237 o->op_private |= OPpSORT_NUMERIC;
7238 if (k->op_type == OP_I_NCMP)
7239 o->op_private |= OPpSORT_NUMERIC | OPpSORT_INTEGER;
7240 kid = cLISTOPo->op_first->op_sibling;
7241 cLISTOPo->op_first->op_sibling = kid->op_sibling; /* bypass old block */
7243 op_getmad(kid,o,'S'); /* then delete it */
7245 op_free(kid); /* then delete it */
7250 Perl_ck_split(pTHX_ OP *o)
7255 if (o->op_flags & OPf_STACKED)
7256 return no_fh_allowed(o);
7258 kid = cLISTOPo->op_first;
7259 if (kid->op_type != OP_NULL)
7260 Perl_croak(aTHX_ "panic: ck_split");
7261 kid = kid->op_sibling;
7262 op_free(cLISTOPo->op_first);
7263 cLISTOPo->op_first = kid;
7265 cLISTOPo->op_first = kid = newSVOP(OP_CONST, 0, newSVpvs(" "));
7266 cLISTOPo->op_last = kid; /* There was only one element previously */
7269 if (kid->op_type != OP_MATCH || kid->op_flags & OPf_STACKED) {
7270 OP * const sibl = kid->op_sibling;
7271 kid->op_sibling = 0;
7272 kid = pmruntime( newPMOP(OP_MATCH, OPf_SPECIAL), kid, 0);
7273 if (cLISTOPo->op_first == cLISTOPo->op_last)
7274 cLISTOPo->op_last = kid;
7275 cLISTOPo->op_first = kid;
7276 kid->op_sibling = sibl;
7279 kid->op_type = OP_PUSHRE;
7280 kid->op_ppaddr = PL_ppaddr[OP_PUSHRE];
7282 if (((PMOP *)kid)->op_pmflags & PMf_GLOBAL && ckWARN(WARN_REGEXP)) {
7283 Perl_warner(aTHX_ packWARN(WARN_REGEXP),
7284 "Use of /g modifier is meaningless in split");
7287 if (!kid->op_sibling)
7288 append_elem(OP_SPLIT, o, newDEFSVOP());
7290 kid = kid->op_sibling;
7293 if (!kid->op_sibling)
7294 append_elem(OP_SPLIT, o, newSVOP(OP_CONST, 0, newSViv(0)));
7295 assert(kid->op_sibling);
7297 kid = kid->op_sibling;
7300 if (kid->op_sibling)
7301 return too_many_arguments(o,OP_DESC(o));
7307 Perl_ck_join(pTHX_ OP *o)
7309 const OP * const kid = cLISTOPo->op_first->op_sibling;
7310 if (kid && kid->op_type == OP_MATCH) {
7311 if (ckWARN(WARN_SYNTAX)) {
7312 const REGEXP *re = PM_GETRE(kPMOP);
7313 const char *pmstr = re ? re->precomp : "STRING";
7314 Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
7315 "/%s/ should probably be written as \"%s\"",
7323 Perl_ck_subr(pTHX_ OP *o)
7326 OP *prev = ((cUNOPo->op_first->op_sibling)
7327 ? cUNOPo : ((UNOP*)cUNOPo->op_first))->op_first;
7328 OP *o2 = prev->op_sibling;
7330 const char *proto = NULL;
7331 const char *proto_end = NULL;
7336 I32 contextclass = 0;
7337 const char *e = NULL;
7340 o->op_private |= OPpENTERSUB_HASTARG;
7341 for (cvop = o2; cvop->op_sibling; cvop = cvop->op_sibling) ;
7342 if (cvop->op_type == OP_RV2CV) {
7344 o->op_private |= (cvop->op_private & OPpENTERSUB_AMPER);
7345 op_null(cvop); /* disable rv2cv */
7346 tmpop = (SVOP*)((UNOP*)cvop)->op_first;
7347 if (tmpop->op_type == OP_GV && !(o->op_private & OPpENTERSUB_AMPER)) {
7348 GV *gv = cGVOPx_gv(tmpop);
7351 tmpop->op_private |= OPpEARLY_CV;
7355 namegv = CvANON(cv) ? gv : CvGV(cv);
7356 proto = SvPV((SV*)cv, len);
7357 proto_end = proto + len;
7359 if (CvASSERTION(cv)) {
7360 U32 asserthints = 0;
7361 HV *const hinthv = GvHV(PL_hintgv);
7363 SV **svp = hv_fetchs(hinthv, "assertions", FALSE);
7365 asserthints = SvUV(*svp);
7367 if (asserthints & HINT_ASSERTING) {
7368 if (PERLDB_ASSERTION && PL_curstash != PL_debstash)
7369 o->op_private |= OPpENTERSUB_DB;
7373 if (!(asserthints & HINT_ASSERTIONSSEEN) && ckWARN(WARN_ASSERTIONS)) {
7374 Perl_warner(aTHX_ packWARN(WARN_ASSERTIONS),
7375 "Impossible to activate assertion call");
7382 else if (cvop->op_type == OP_METHOD || cvop->op_type == OP_METHOD_NAMED) {
7383 if (o2->op_type == OP_CONST)
7384 o2->op_private &= ~OPpCONST_STRICT;
7385 else if (o2->op_type == OP_LIST) {
7386 OP * const sib = ((UNOP*)o2)->op_first->op_sibling;
7387 if (sib && sib->op_type == OP_CONST)
7388 sib->op_private &= ~OPpCONST_STRICT;
7391 o->op_private |= (PL_hints & HINT_STRICT_REFS);
7392 if (PERLDB_SUB && PL_curstash != PL_debstash)
7393 o->op_private |= OPpENTERSUB_DB;
7394 while (o2 != cvop) {
7396 if (PL_madskills && o2->op_type == OP_NULL)
7397 o3 = ((UNOP*)o2)->op_first;
7401 if (proto >= proto_end)
7402 return too_many_arguments(o, gv_ename(namegv));
7410 /* _ must be at the end */
7411 if (proto[1] && proto[1] != ';')
7426 if (o3->op_type != OP_REFGEN && o3->op_type != OP_UNDEF)
7428 arg == 1 ? "block or sub {}" : "sub {}",
7429 gv_ename(namegv), o3);
7432 /* '*' allows any scalar type, including bareword */
7435 if (o3->op_type == OP_RV2GV)
7436 goto wrapref; /* autoconvert GLOB -> GLOBref */
7437 else if (o3->op_type == OP_CONST)
7438 o3->op_private &= ~OPpCONST_STRICT;
7439 else if (o3->op_type == OP_ENTERSUB) {
7440 /* accidental subroutine, revert to bareword */
7441 OP *gvop = ((UNOP*)o3)->op_first;
7442 if (gvop && gvop->op_type == OP_NULL) {
7443 gvop = ((UNOP*)gvop)->op_first;
7445 for (; gvop->op_sibling; gvop = gvop->op_sibling)
7448 (gvop->op_private & OPpENTERSUB_NOPAREN) &&
7449 (gvop = ((UNOP*)gvop)->op_first) &&
7450 gvop->op_type == OP_GV)
7452 GV * const gv = cGVOPx_gv(gvop);
7453 OP * const sibling = o2->op_sibling;
7454 SV * const n = newSVpvs("");
7456 OP * const oldo2 = o2;
7460 gv_fullname4(n, gv, "", FALSE);
7461 o2 = newSVOP(OP_CONST, 0, n);
7462 op_getmad(oldo2,o2,'O');
7463 prev->op_sibling = o2;
7464 o2->op_sibling = sibling;
7480 if (contextclass++ == 0) {
7481 e = strchr(proto, ']');
7482 if (!e || e == proto)
7491 const char *p = proto;
7492 const char *const end = proto;
7494 while (*--p != '[');
7495 bad_type(arg, Perl_form(aTHX_ "one of %.*s",
7497 gv_ename(namegv), o3);
7502 if (o3->op_type == OP_RV2GV)
7505 bad_type(arg, "symbol", gv_ename(namegv), o3);
7508 if (o3->op_type == OP_ENTERSUB)
7511 bad_type(arg, "subroutine entry", gv_ename(namegv),
7515 if (o3->op_type == OP_RV2SV ||
7516 o3->op_type == OP_PADSV ||
7517 o3->op_type == OP_HELEM ||
7518 o3->op_type == OP_AELEM)
7521 bad_type(arg, "scalar", gv_ename(namegv), o3);
7524 if (o3->op_type == OP_RV2AV ||
7525 o3->op_type == OP_PADAV)
7528 bad_type(arg, "array", gv_ename(namegv), o3);
7531 if (o3->op_type == OP_RV2HV ||
7532 o3->op_type == OP_PADHV)
7535 bad_type(arg, "hash", gv_ename(namegv), o3);
7540 OP* const sib = kid->op_sibling;
7541 kid->op_sibling = 0;
7542 o2 = newUNOP(OP_REFGEN, 0, kid);
7543 o2->op_sibling = sib;
7544 prev->op_sibling = o2;
7546 if (contextclass && e) {
7561 Perl_croak(aTHX_ "Malformed prototype for %s: %"SVf,
7562 gv_ename(namegv), SVfARG(cv));
7567 mod(o2, OP_ENTERSUB);
7569 o2 = o2->op_sibling;
7571 if (o2 == cvop && proto && *proto == '_') {
7572 /* generate an access to $_ */
7574 o2->op_sibling = prev->op_sibling;
7575 prev->op_sibling = o2; /* instead of cvop */
7577 if (proto && !optional && proto_end > proto &&
7578 (*proto != '@' && *proto != '%' && *proto != ';' && *proto != '_'))
7579 return too_few_arguments(o, gv_ename(namegv));
7582 OP * const oldo = o;
7586 o=newSVOP(OP_CONST, 0, newSViv(0));
7587 op_getmad(oldo,o,'O');
7593 Perl_ck_svconst(pTHX_ OP *o)
7595 PERL_UNUSED_CONTEXT;
7596 SvREADONLY_on(cSVOPo->op_sv);
7601 Perl_ck_chdir(pTHX_ OP *o)
7603 if (o->op_flags & OPf_KIDS) {
7604 SVOP * const kid = (SVOP*)cUNOPo->op_first;
7606 if (kid && kid->op_type == OP_CONST &&
7607 (kid->op_private & OPpCONST_BARE))
7609 o->op_flags |= OPf_SPECIAL;
7610 kid->op_private &= ~OPpCONST_STRICT;
7617 Perl_ck_trunc(pTHX_ OP *o)
7619 if (o->op_flags & OPf_KIDS) {
7620 SVOP *kid = (SVOP*)cUNOPo->op_first;
7622 if (kid->op_type == OP_NULL)
7623 kid = (SVOP*)kid->op_sibling;
7624 if (kid && kid->op_type == OP_CONST &&
7625 (kid->op_private & OPpCONST_BARE))
7627 o->op_flags |= OPf_SPECIAL;
7628 kid->op_private &= ~OPpCONST_STRICT;
7635 Perl_ck_unpack(pTHX_ OP *o)
7637 OP *kid = cLISTOPo->op_first;
7638 if (kid->op_sibling) {
7639 kid = kid->op_sibling;
7640 if (!kid->op_sibling)
7641 kid->op_sibling = newDEFSVOP();
7647 Perl_ck_substr(pTHX_ OP *o)
7650 if ((o->op_flags & OPf_KIDS) && (o->op_private == 4)) {
7651 OP *kid = cLISTOPo->op_first;
7653 if (kid->op_type == OP_NULL)
7654 kid = kid->op_sibling;
7656 kid->op_flags |= OPf_MOD;
7662 /* A peephole optimizer. We visit the ops in the order they're to execute.
7663 * See the comments at the top of this file for more details about when
7664 * peep() is called */
7667 Perl_peep(pTHX_ register OP *o)
7670 register OP* oldop = NULL;
7672 if (!o || o->op_opt)
7676 SAVEVPTR(PL_curcop);
7677 for (; o; o = o->op_next) {
7681 switch (o->op_type) {
7685 PL_curcop = ((COP*)o); /* for warnings */
7690 if (cSVOPo->op_private & OPpCONST_STRICT)
7691 no_bareword_allowed(o);
7693 case OP_METHOD_NAMED:
7694 /* Relocate sv to the pad for thread safety.
7695 * Despite being a "constant", the SV is written to,
7696 * for reference counts, sv_upgrade() etc. */
7698 const PADOFFSET ix = pad_alloc(OP_CONST, SVs_PADTMP);
7699 if (o->op_type == OP_CONST && SvPADTMP(cSVOPo->op_sv)) {
7700 /* If op_sv is already a PADTMP then it is being used by
7701 * some pad, so make a copy. */
7702 sv_setsv(PAD_SVl(ix),cSVOPo->op_sv);
7703 SvREADONLY_on(PAD_SVl(ix));
7704 SvREFCNT_dec(cSVOPo->op_sv);
7706 else if (o->op_type == OP_CONST
7707 && cSVOPo->op_sv == &PL_sv_undef) {
7708 /* PL_sv_undef is hack - it's unsafe to store it in the
7709 AV that is the pad, because av_fetch treats values of
7710 PL_sv_undef as a "free" AV entry and will merrily
7711 replace them with a new SV, causing pad_alloc to think
7712 that this pad slot is free. (When, clearly, it is not)
7714 SvOK_off(PAD_SVl(ix));
7715 SvPADTMP_on(PAD_SVl(ix));
7716 SvREADONLY_on(PAD_SVl(ix));
7719 SvREFCNT_dec(PAD_SVl(ix));
7720 SvPADTMP_on(cSVOPo->op_sv);
7721 PAD_SETSV(ix, cSVOPo->op_sv);
7722 /* XXX I don't know how this isn't readonly already. */
7723 SvREADONLY_on(PAD_SVl(ix));
7725 cSVOPo->op_sv = NULL;
7733 if (o->op_next && o->op_next->op_type == OP_STRINGIFY) {
7734 if (o->op_next->op_private & OPpTARGET_MY) {
7735 if (o->op_flags & OPf_STACKED) /* chained concats */
7736 goto ignore_optimization;
7738 /* assert(PL_opargs[o->op_type] & OA_TARGLEX); */
7739 o->op_targ = o->op_next->op_targ;
7740 o->op_next->op_targ = 0;
7741 o->op_private |= OPpTARGET_MY;
7744 op_null(o->op_next);
7746 ignore_optimization:
7750 if ((o->op_flags & OPf_WANT) != OPf_WANT_LIST) {
7752 break; /* Scalar stub must produce undef. List stub is noop */
7756 if (o->op_targ == OP_NEXTSTATE
7757 || o->op_targ == OP_DBSTATE
7758 || o->op_targ == OP_SETSTATE)
7760 PL_curcop = ((COP*)o);
7762 /* XXX: We avoid setting op_seq here to prevent later calls
7763 to peep() from mistakenly concluding that optimisation
7764 has already occurred. This doesn't fix the real problem,
7765 though (See 20010220.007). AMS 20010719 */
7766 /* op_seq functionality is now replaced by op_opt */
7767 if (oldop && o->op_next) {
7768 oldop->op_next = o->op_next;
7776 if (oldop && o->op_next) {
7777 oldop->op_next = o->op_next;
7785 if (o->op_type == OP_PADAV || o->op_next->op_type == OP_RV2AV) {
7786 OP* const pop = (o->op_type == OP_PADAV) ?
7787 o->op_next : o->op_next->op_next;
7789 if (pop && pop->op_type == OP_CONST &&
7790 ((PL_op = pop->op_next)) &&
7791 pop->op_next->op_type == OP_AELEM &&
7792 !(pop->op_next->op_private &
7793 (OPpLVAL_INTRO|OPpLVAL_DEFER|OPpDEREF|OPpMAYBE_LVSUB)) &&
7794 (i = SvIV(((SVOP*)pop)->op_sv) - CopARYBASE_get(PL_curcop))
7799 if (cSVOPx(pop)->op_private & OPpCONST_STRICT)
7800 no_bareword_allowed(pop);
7801 if (o->op_type == OP_GV)
7802 op_null(o->op_next);
7803 op_null(pop->op_next);
7805 o->op_flags |= pop->op_next->op_flags & OPf_MOD;
7806 o->op_next = pop->op_next->op_next;
7807 o->op_ppaddr = PL_ppaddr[OP_AELEMFAST];
7808 o->op_private = (U8)i;
7809 if (o->op_type == OP_GV) {
7814 o->op_flags |= OPf_SPECIAL;
7815 o->op_type = OP_AELEMFAST;
7821 if (o->op_next->op_type == OP_RV2SV) {
7822 if (!(o->op_next->op_private & OPpDEREF)) {
7823 op_null(o->op_next);
7824 o->op_private |= o->op_next->op_private & (OPpLVAL_INTRO
7826 o->op_next = o->op_next->op_next;
7827 o->op_type = OP_GVSV;
7828 o->op_ppaddr = PL_ppaddr[OP_GVSV];
7831 else if ((o->op_private & OPpEARLY_CV) && ckWARN(WARN_PROTOTYPE)) {
7832 GV * const gv = cGVOPo_gv;
7833 if (SvTYPE(gv) == SVt_PVGV && GvCV(gv) && SvPVX_const(GvCV(gv))) {
7834 /* XXX could check prototype here instead of just carping */
7835 SV * const sv = sv_newmortal();
7836 gv_efullname3(sv, gv, NULL);
7837 Perl_warner(aTHX_ packWARN(WARN_PROTOTYPE),
7838 "%"SVf"() called too early to check prototype",
7842 else if (o->op_next->op_type == OP_READLINE
7843 && o->op_next->op_next->op_type == OP_CONCAT
7844 && (o->op_next->op_next->op_flags & OPf_STACKED))
7846 /* Turn "$a .= <FH>" into an OP_RCATLINE. AMS 20010917 */
7847 o->op_type = OP_RCATLINE;
7848 o->op_flags |= OPf_STACKED;
7849 o->op_ppaddr = PL_ppaddr[OP_RCATLINE];
7850 op_null(o->op_next->op_next);
7851 op_null(o->op_next);
7868 while (cLOGOP->op_other->op_type == OP_NULL)
7869 cLOGOP->op_other = cLOGOP->op_other->op_next;
7870 peep(cLOGOP->op_other); /* Recursive calls are not replaced by fptr calls */
7876 while (cLOOP->op_redoop->op_type == OP_NULL)
7877 cLOOP->op_redoop = cLOOP->op_redoop->op_next;
7878 peep(cLOOP->op_redoop);
7879 while (cLOOP->op_nextop->op_type == OP_NULL)
7880 cLOOP->op_nextop = cLOOP->op_nextop->op_next;
7881 peep(cLOOP->op_nextop);
7882 while (cLOOP->op_lastop->op_type == OP_NULL)
7883 cLOOP->op_lastop = cLOOP->op_lastop->op_next;
7884 peep(cLOOP->op_lastop);
7891 while (cPMOP->op_pmreplstart &&
7892 cPMOP->op_pmreplstart->op_type == OP_NULL)
7893 cPMOP->op_pmreplstart = cPMOP->op_pmreplstart->op_next;
7894 peep(cPMOP->op_pmreplstart);
7899 if (o->op_next && o->op_next->op_type == OP_NEXTSTATE
7900 && ckWARN(WARN_SYNTAX))
7902 if (o->op_next->op_sibling) {
7903 const OPCODE type = o->op_next->op_sibling->op_type;
7904 if (type != OP_EXIT && type != OP_WARN && type != OP_DIE) {
7905 const line_t oldline = CopLINE(PL_curcop);
7906 CopLINE_set(PL_curcop, CopLINE((COP*)o->op_next));
7907 Perl_warner(aTHX_ packWARN(WARN_EXEC),
7908 "Statement unlikely to be reached");
7909 Perl_warner(aTHX_ packWARN(WARN_EXEC),
7910 "\t(Maybe you meant system() when you said exec()?)\n");
7911 CopLINE_set(PL_curcop, oldline);
7922 const char *key = NULL;
7927 if (((BINOP*)o)->op_last->op_type != OP_CONST)
7930 /* Make the CONST have a shared SV */
7931 svp = cSVOPx_svp(((BINOP*)o)->op_last);
7932 if ((!SvFAKE(sv = *svp) || !SvREADONLY(sv)) && !IS_PADCONST(sv)) {
7933 key = SvPV_const(sv, keylen);
7934 lexname = newSVpvn_share(key,
7935 SvUTF8(sv) ? -(I32)keylen : (I32)keylen,
7941 if ((o->op_private & (OPpLVAL_INTRO)))
7944 rop = (UNOP*)((BINOP*)o)->op_first;
7945 if (rop->op_type != OP_RV2HV || rop->op_first->op_type != OP_PADSV)
7947 lexname = *av_fetch(PL_comppad_name, rop->op_first->op_targ, TRUE);
7948 if (!SvPAD_TYPED(lexname))
7950 fields = (GV**)hv_fetchs(SvSTASH(lexname), "FIELDS", FALSE);
7951 if (!fields || !GvHV(*fields))
7953 key = SvPV_const(*svp, keylen);
7954 if (!hv_fetch(GvHV(*fields), key,
7955 SvUTF8(*svp) ? -(I32)keylen : (I32)keylen, FALSE))
7957 Perl_croak(aTHX_ "No such class field \"%s\" "
7958 "in variable %s of type %s",
7959 key, SvPV_nolen_const(lexname), HvNAME_get(SvSTASH(lexname)));
7972 SVOP *first_key_op, *key_op;
7974 if ((o->op_private & (OPpLVAL_INTRO))
7975 /* I bet there's always a pushmark... */
7976 || ((LISTOP*)o)->op_first->op_sibling->op_type != OP_LIST)
7977 /* hmmm, no optimization if list contains only one key. */
7979 rop = (UNOP*)((LISTOP*)o)->op_last;
7980 if (rop->op_type != OP_RV2HV)
7982 if (rop->op_first->op_type == OP_PADSV)
7983 /* @$hash{qw(keys here)} */
7984 rop = (UNOP*)rop->op_first;
7986 /* @{$hash}{qw(keys here)} */
7987 if (rop->op_first->op_type == OP_SCOPE
7988 && cLISTOPx(rop->op_first)->op_last->op_type == OP_PADSV)
7990 rop = (UNOP*)cLISTOPx(rop->op_first)->op_last;
7996 lexname = *av_fetch(PL_comppad_name, rop->op_targ, TRUE);
7997 if (!SvPAD_TYPED(lexname))
7999 fields = (GV**)hv_fetchs(SvSTASH(lexname), "FIELDS", FALSE);
8000 if (!fields || !GvHV(*fields))
8002 /* Again guessing that the pushmark can be jumped over.... */
8003 first_key_op = (SVOP*)((LISTOP*)((LISTOP*)o)->op_first->op_sibling)
8004 ->op_first->op_sibling;
8005 for (key_op = first_key_op; key_op;
8006 key_op = (SVOP*)key_op->op_sibling) {
8007 if (key_op->op_type != OP_CONST)
8009 svp = cSVOPx_svp(key_op);
8010 key = SvPV_const(*svp, keylen);
8011 if (!hv_fetch(GvHV(*fields), key,
8012 SvUTF8(*svp) ? -(I32)keylen : (I32)keylen, FALSE))
8014 Perl_croak(aTHX_ "No such class field \"%s\" "
8015 "in variable %s of type %s",
8016 key, SvPV_nolen(lexname), HvNAME_get(SvSTASH(lexname)));
8023 /* will point to RV2AV or PADAV op on LHS/RHS of assign */
8027 /* check that RHS of sort is a single plain array */
8028 OP *oright = cUNOPo->op_first;
8029 if (!oright || oright->op_type != OP_PUSHMARK)
8032 /* reverse sort ... can be optimised. */
8033 if (!cUNOPo->op_sibling) {
8034 /* Nothing follows us on the list. */
8035 OP * const reverse = o->op_next;
8037 if (reverse->op_type == OP_REVERSE &&
8038 (reverse->op_flags & OPf_WANT) == OPf_WANT_LIST) {
8039 OP * const pushmark = cUNOPx(reverse)->op_first;
8040 if (pushmark && (pushmark->op_type == OP_PUSHMARK)
8041 && (cUNOPx(pushmark)->op_sibling == o)) {
8042 /* reverse -> pushmark -> sort */
8043 o->op_private |= OPpSORT_REVERSE;
8045 pushmark->op_next = oright->op_next;
8051 /* make @a = sort @a act in-place */
8055 oright = cUNOPx(oright)->op_sibling;
8058 if (oright->op_type == OP_NULL) { /* skip sort block/sub */
8059 oright = cUNOPx(oright)->op_sibling;
8063 (oright->op_type != OP_RV2AV && oright->op_type != OP_PADAV)
8064 || oright->op_next != o
8065 || (oright->op_private & OPpLVAL_INTRO)
8069 /* o2 follows the chain of op_nexts through the LHS of the
8070 * assign (if any) to the aassign op itself */
8072 if (!o2 || o2->op_type != OP_NULL)
8075 if (!o2 || o2->op_type != OP_PUSHMARK)
8078 if (o2 && o2->op_type == OP_GV)
8081 || (o2->op_type != OP_PADAV && o2->op_type != OP_RV2AV)
8082 || (o2->op_private & OPpLVAL_INTRO)
8087 if (!o2 || o2->op_type != OP_NULL)
8090 if (!o2 || o2->op_type != OP_AASSIGN
8091 || (o2->op_flags & OPf_WANT) != OPf_WANT_VOID)
8094 /* check that the sort is the first arg on RHS of assign */
8096 o2 = cUNOPx(o2)->op_first;
8097 if (!o2 || o2->op_type != OP_NULL)
8099 o2 = cUNOPx(o2)->op_first;
8100 if (!o2 || o2->op_type != OP_PUSHMARK)
8102 if (o2->op_sibling != o)
8105 /* check the array is the same on both sides */
8106 if (oleft->op_type == OP_RV2AV) {
8107 if (oright->op_type != OP_RV2AV
8108 || !cUNOPx(oright)->op_first
8109 || cUNOPx(oright)->op_first->op_type != OP_GV
8110 || cGVOPx_gv(cUNOPx(oleft)->op_first) !=
8111 cGVOPx_gv(cUNOPx(oright)->op_first)
8115 else if (oright->op_type != OP_PADAV
8116 || oright->op_targ != oleft->op_targ
8120 /* transfer MODishness etc from LHS arg to RHS arg */
8121 oright->op_flags = oleft->op_flags;
8122 o->op_private |= OPpSORT_INPLACE;
8124 /* excise push->gv->rv2av->null->aassign */
8125 o2 = o->op_next->op_next;
8126 op_null(o2); /* PUSHMARK */
8128 if (o2->op_type == OP_GV) {
8129 op_null(o2); /* GV */
8132 op_null(o2); /* RV2AV or PADAV */
8133 o2 = o2->op_next->op_next;
8134 op_null(o2); /* AASSIGN */
8136 o->op_next = o2->op_next;
8142 OP *ourmark, *theirmark, *ourlast, *iter, *expushmark, *rv2av;
8144 LISTOP *enter, *exlist;
8147 enter = (LISTOP *) o->op_next;
8150 if (enter->op_type == OP_NULL) {
8151 enter = (LISTOP *) enter->op_next;
8155 /* for $a (...) will have OP_GV then OP_RV2GV here.
8156 for (...) just has an OP_GV. */
8157 if (enter->op_type == OP_GV) {
8158 gvop = (OP *) enter;
8159 enter = (LISTOP *) enter->op_next;
8162 if (enter->op_type == OP_RV2GV) {
8163 enter = (LISTOP *) enter->op_next;
8169 if (enter->op_type != OP_ENTERITER)
8172 iter = enter->op_next;
8173 if (!iter || iter->op_type != OP_ITER)
8176 expushmark = enter->op_first;
8177 if (!expushmark || expushmark->op_type != OP_NULL
8178 || expushmark->op_targ != OP_PUSHMARK)
8181 exlist = (LISTOP *) expushmark->op_sibling;
8182 if (!exlist || exlist->op_type != OP_NULL
8183 || exlist->op_targ != OP_LIST)
8186 if (exlist->op_last != o) {
8187 /* Mmm. Was expecting to point back to this op. */
8190 theirmark = exlist->op_first;
8191 if (!theirmark || theirmark->op_type != OP_PUSHMARK)
8194 if (theirmark->op_sibling != o) {
8195 /* There's something between the mark and the reverse, eg
8196 for (1, reverse (...))
8201 ourmark = ((LISTOP *)o)->op_first;
8202 if (!ourmark || ourmark->op_type != OP_PUSHMARK)
8205 ourlast = ((LISTOP *)o)->op_last;
8206 if (!ourlast || ourlast->op_next != o)
8209 rv2av = ourmark->op_sibling;
8210 if (rv2av && rv2av->op_type == OP_RV2AV && rv2av->op_sibling == 0
8211 && rv2av->op_flags == (OPf_WANT_LIST | OPf_KIDS)
8212 && enter->op_flags == (OPf_WANT_LIST | OPf_KIDS)) {
8213 /* We're just reversing a single array. */
8214 rv2av->op_flags = OPf_WANT_SCALAR | OPf_KIDS | OPf_REF;
8215 enter->op_flags |= OPf_STACKED;
8218 /* We don't have control over who points to theirmark, so sacrifice
8220 theirmark->op_next = ourmark->op_next;
8221 theirmark->op_flags = ourmark->op_flags;
8222 ourlast->op_next = gvop ? gvop : (OP *) enter;
8225 enter->op_private |= OPpITER_REVERSED;
8226 iter->op_private |= OPpITER_REVERSED;
8233 UNOP *refgen, *rv2cv;
8236 /* I do not understand this, but if o->op_opt isn't set to 1,
8237 various tests in ext/B/t/bytecode.t fail with no readily
8243 if ((o->op_flags && OPf_WANT) != OPf_WANT_VOID)
8246 if ((o->op_private & ~OPpASSIGN_BACKWARDS) != 2)
8249 rv2gv = ((BINOP *)o)->op_last;
8250 if (!rv2gv || rv2gv->op_type != OP_RV2GV)
8253 refgen = (UNOP *)((BINOP *)o)->op_first;
8255 if (!refgen || refgen->op_type != OP_REFGEN)
8258 exlist = (LISTOP *)refgen->op_first;
8259 if (!exlist || exlist->op_type != OP_NULL
8260 || exlist->op_targ != OP_LIST)
8263 if (exlist->op_first->op_type != OP_PUSHMARK)
8266 rv2cv = (UNOP*)exlist->op_last;
8268 if (rv2cv->op_type != OP_RV2CV)
8271 assert ((rv2gv->op_private & OPpDONT_INIT_GV) == 0);
8272 assert ((o->op_private & OPpASSIGN_CV_TO_GV) == 0);
8273 assert ((rv2cv->op_private & OPpMAY_RETURN_CONSTANT) == 0);
8275 o->op_private |= OPpASSIGN_CV_TO_GV;
8276 rv2gv->op_private |= OPpDONT_INIT_GV;
8277 rv2cv->op_private |= OPpMAY_RETURN_CONSTANT;
8293 Perl_custom_op_name(pTHX_ const OP* o)
8296 const IV index = PTR2IV(o->op_ppaddr);
8300 if (!PL_custom_op_names) /* This probably shouldn't happen */
8301 return (char *)PL_op_name[OP_CUSTOM];
8303 keysv = sv_2mortal(newSViv(index));
8305 he = hv_fetch_ent(PL_custom_op_names, keysv, 0, 0);
8307 return (char *)PL_op_name[OP_CUSTOM]; /* Don't know who you are */
8309 return SvPV_nolen(HeVAL(he));
8313 Perl_custom_op_desc(pTHX_ const OP* o)
8316 const IV index = PTR2IV(o->op_ppaddr);
8320 if (!PL_custom_op_descs)
8321 return (char *)PL_op_desc[OP_CUSTOM];
8323 keysv = sv_2mortal(newSViv(index));
8325 he = hv_fetch_ent(PL_custom_op_descs, keysv, 0, 0);
8327 return (char *)PL_op_desc[OP_CUSTOM];
8329 return SvPV_nolen(HeVAL(he));
8334 /* Efficient sub that returns a constant scalar value. */
8336 const_sv_xsub(pTHX_ CV* cv)
8343 Perl_croak(aTHX_ "usage: %s::%s()",
8344 HvNAME_get(GvSTASH(CvGV(cv))), GvNAME(CvGV(cv)));
8348 ST(0) = (SV*)XSANY.any_ptr;
8354 * c-indentation-style: bsd
8356 * indent-tabs-mode: t
8359 * ex: set ts=8 sts=4 sw=4 noet: