3 * Copyright (C) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
4 * 2000, 2001, 2002, 2003, 2004, 2005, 2006, by Larry Wall and others
6 * You may distribute under the terms of either the GNU General Public
7 * License or the Artistic License, as specified in the README file.
12 * "You see: Mr. Drogo, he married poor Miss Primula Brandybuck. She was
13 * our Mr. Bilbo's first cousin on the mother's side (her mother being the
14 * youngest of the Old Took's daughters); and Mr. Drogo was his second
15 * cousin. So Mr. Frodo is his first *and* second cousin, once removed
16 * either way, as the saying is, if you follow me." --the Gaffer
19 /* This file contains the functions that create, manipulate and optimize
20 * the OP structures that hold a compiled perl program.
22 * A Perl program is compiled into a tree of OPs. Each op contains
23 * structural pointers (eg to its siblings and the next op in the
24 * execution sequence), a pointer to the function that would execute the
25 * op, plus any data specific to that op. For example, an OP_CONST op
26 * points to the pp_const() function and to an SV containing the constant
27 * value. When pp_const() is executed, its job is to push that SV onto the
30 * OPs are mainly created by the newFOO() functions, which are mainly
31 * called from the parser (in perly.y) as the code is parsed. For example
32 * the Perl code $a + $b * $c would cause the equivalent of the following
33 * to be called (oversimplifying a bit):
35 * newBINOP(OP_ADD, flags,
37 * newBINOP(OP_MULTIPLY, flags, newSVREF($b), newSVREF($c))
40 * Note that during the build of miniperl, a temporary copy of this file
41 * is made, called opmini.c.
45 Perl's compiler is essentially a 3-pass compiler with interleaved phases:
49 An execution-order pass
51 The bottom-up pass is represented by all the "newOP" routines and
52 the ck_ routines. The bottom-upness is actually driven by yacc.
53 So at the point that a ck_ routine fires, we have no idea what the
54 context is, either upward in the syntax tree, or either forward or
55 backward in the execution order. (The bottom-up parser builds that
56 part of the execution order it knows about, but if you follow the "next"
57 links around, you'll find it's actually a closed loop through the
60 Whenever the bottom-up parser gets to a node that supplies context to
61 its components, it invokes that portion of the top-down pass that applies
62 to that part of the subtree (and marks the top node as processed, so
63 if a node further up supplies context, it doesn't have to take the
64 plunge again). As a particular subcase of this, as the new node is
65 built, it takes all the closed execution loops of its subcomponents
66 and links them into a new closed loop for the higher level node. But
67 it's still not the real execution order.
69 The actual execution order is not known till we get a grammar reduction
70 to a top-level unit like a subroutine or file that will be called by
71 "name" rather than via a "next" pointer. At that point, we can call
72 into peep() to do that code's portion of the 3rd pass. It has to be
73 recursive, but it's recursive on basic blocks, not on tree nodes.
76 /* To implement user lexical pragmas, there needs to be a way at run time to
77 get the compile time state of %^H for that block. Storing %^H in every
78 block (or even COP) would be very expensive, so a different approach is
79 taken. The (running) state of %^H is serialised into a tree of HE-like
80 structs. Stores into %^H are chained onto the current leaf as a struct
81 refcounted_he * with the key and the value. Deletes from %^H are saved
82 with a value of PL_sv_placeholder. The state of %^H at any point can be
83 turned back into a regular HV by walking back up the tree from that point's
84 leaf, ignoring any key you've already seen (placeholder or not), storing
85 the rest into the HV structure, then removing the placeholders. Hence
86 memory is only used to store the %^H deltas from the enclosing COP, rather
87 than the entire %^H on each COP.
89 To cause actions on %^H to write out the serialisation records, it has
90 magic type 'H'. This magic (itself) does nothing, but its presence causes
91 the values to gain magic type 'h', which has entries for set and clear.
92 C<Perl_magic_sethint> updates C<PL_compiling.cop_hints_hash> with a store
93 record, with deletes written by C<Perl_magic_clearhint>. C<SAVE_HINTS>
94 saves the current C<PL_compiling.cop_hints_hash> on the save stack, so that
95 it will be correctly restored when any inner compiling scope is exited.
101 #include "keywords.h"
103 #define CALL_PEEP(o) CALL_FPTR(PL_peepp)(aTHX_ o)
105 #if defined(PL_OP_SLAB_ALLOC)
107 #ifndef PERL_SLAB_SIZE
108 #define PERL_SLAB_SIZE 2048
112 Perl_Slab_Alloc(pTHX_ int m, size_t sz)
115 * To make incrementing use count easy PL_OpSlab is an I32 *
116 * To make inserting the link to slab PL_OpPtr is I32 **
117 * So compute size in units of sizeof(I32 *) as that is how Pl_OpPtr increments
118 * Add an overhead for pointer to slab and round up as a number of pointers
120 sz = (sz + 2*sizeof(I32 *) -1)/sizeof(I32 *);
121 if ((PL_OpSpace -= sz) < 0) {
122 PL_OpPtr = (I32 **) PerlMemShared_malloc(PERL_SLAB_SIZE*sizeof(I32*));
126 Zero(PL_OpPtr,PERL_SLAB_SIZE,I32 **);
127 /* We reserve the 0'th I32 sized chunk as a use count */
128 PL_OpSlab = (I32 *) PL_OpPtr;
129 /* Reduce size by the use count word, and by the size we need.
130 * Latter is to mimic the '-=' in the if() above
132 PL_OpSpace = PERL_SLAB_SIZE - (sizeof(I32)+sizeof(I32 **)-1)/sizeof(I32 **) - sz;
133 /* Allocation pointer starts at the top.
134 Theory: because we build leaves before trunk allocating at end
135 means that at run time access is cache friendly upward
137 PL_OpPtr += PERL_SLAB_SIZE;
139 assert( PL_OpSpace >= 0 );
140 /* Move the allocation pointer down */
142 assert( PL_OpPtr > (I32 **) PL_OpSlab );
143 *PL_OpPtr = PL_OpSlab; /* Note which slab it belongs to */
144 (*PL_OpSlab)++; /* Increment use count of slab */
145 assert( PL_OpPtr+sz <= ((I32 **) PL_OpSlab + PERL_SLAB_SIZE) );
146 assert( *PL_OpSlab > 0 );
147 return (void *)(PL_OpPtr + 1);
151 Perl_Slab_Free(pTHX_ void *op)
153 I32 * const * const ptr = (I32 **) op;
154 I32 * const slab = ptr[-1];
155 assert( ptr-1 > (I32 **) slab );
156 assert( ptr < ( (I32 **) slab + PERL_SLAB_SIZE) );
158 if (--(*slab) == 0) {
160 # define PerlMemShared PerlMem
163 PerlMemShared_free(slab);
164 if (slab == PL_OpSlab) {
171 * In the following definition, the ", (OP*)0" is just to make the compiler
172 * think the expression is of the right type: croak actually does a Siglongjmp.
174 #define CHECKOP(type,o) \
175 ((PL_op_mask && PL_op_mask[type]) \
176 ? ( op_free((OP*)o), \
177 Perl_croak(aTHX_ "'%s' trapped by operation mask", PL_op_desc[type]), \
179 : CALL_FPTR(PL_check[type])(aTHX_ (OP*)o))
181 #define RETURN_UNLIMITED_NUMBER (PERL_INT_MAX / 2)
184 S_gv_ename(pTHX_ GV *gv)
186 SV* const tmpsv = sv_newmortal();
187 gv_efullname3(tmpsv, gv, NULL);
188 return SvPV_nolen_const(tmpsv);
192 S_no_fh_allowed(pTHX_ OP *o)
194 yyerror(Perl_form(aTHX_ "Missing comma after first argument to %s function",
200 S_too_few_arguments(pTHX_ OP *o, const char *name)
202 yyerror(Perl_form(aTHX_ "Not enough arguments for %s", name));
207 S_too_many_arguments(pTHX_ OP *o, const char *name)
209 yyerror(Perl_form(aTHX_ "Too many arguments for %s", name));
214 S_bad_type(pTHX_ I32 n, const char *t, const char *name, const OP *kid)
216 yyerror(Perl_form(aTHX_ "Type of arg %d to %s must be %s (not %s)",
217 (int)n, name, t, OP_DESC(kid)));
221 S_no_bareword_allowed(pTHX_ const OP *o)
224 return; /* various ok barewords are hidden in extra OP_NULL */
225 qerror(Perl_mess(aTHX_
226 "Bareword \"%"SVf"\" not allowed while \"strict subs\" in use",
230 /* "register" allocation */
233 Perl_allocmy(pTHX_ const char *const name)
237 const bool is_our = (PL_in_my == KEY_our);
239 /* complain about "my $<special_var>" etc etc */
243 (USE_UTF8_IN_NAMES && UTF8_IS_START(name[1])) ||
244 (name[1] == '_' && (*name == '$' || name[2]))))
246 /* name[2] is true if strlen(name) > 2 */
247 if (!isPRINT(name[1]) || strchr("\t\n\r\f", name[1])) {
248 yyerror(Perl_form(aTHX_ "Can't use global %c^%c%s in \"my\"",
249 name[0], toCTRL(name[1]), name + 2));
251 yyerror(Perl_form(aTHX_ "Can't use global %s in \"my\"",name));
255 /* check for duplicate declaration */
256 pad_check_dup(name, is_our, (PL_curstash ? PL_curstash : PL_defstash));
258 if (PL_in_my_stash && *name != '$') {
259 yyerror(Perl_form(aTHX_
260 "Can't declare class for non-scalar %s in \"%s\"",
262 is_our ? "our" : PL_in_my == KEY_state ? "state" : "my"));
265 /* allocate a spare slot and store the name in that slot */
267 off = pad_add_name(name,
270 /* $_ is always in main::, even with our */
271 ? (PL_curstash && !strEQ(name,"$_") ? PL_curstash : PL_defstash)
275 PL_in_my == KEY_state
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 Safefree(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)
517 if (cop->cop_label) {
518 #ifdef PERL_TRACK_MEMPOOL
519 Malloc_t ptr = (Malloc_t)(cop->cop_label - sTHX);
520 struct perl_memory_debug_header *const header
521 = (struct perl_memory_debug_header *)ptr;
522 /* Only the thread that allocated us can free us. */
523 if (header->interpreter == aTHX)
526 Safefree(cop->cop_label);
527 cop->cop_label = NULL;
532 if (! specialWARN(cop->cop_warnings))
533 PerlMemShared_free(cop->cop_warnings);
534 Perl_refcounted_he_free(aTHX_ cop->cop_hints_hash);
538 Perl_op_null(pTHX_ OP *o)
541 if (o->op_type == OP_NULL)
545 o->op_targ = o->op_type;
546 o->op_type = OP_NULL;
547 o->op_ppaddr = PL_ppaddr[OP_NULL];
551 Perl_op_refcnt_lock(pTHX)
559 Perl_op_refcnt_unlock(pTHX)
566 /* Contextualizers */
568 #define LINKLIST(o) ((o)->op_next ? (o)->op_next : linklist((OP*)o))
571 Perl_linklist(pTHX_ OP *o)
578 /* establish postfix order */
579 first = cUNOPo->op_first;
582 o->op_next = LINKLIST(first);
585 if (kid->op_sibling) {
586 kid->op_next = LINKLIST(kid->op_sibling);
587 kid = kid->op_sibling;
601 Perl_scalarkids(pTHX_ OP *o)
603 if (o && o->op_flags & OPf_KIDS) {
605 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
612 S_scalarboolean(pTHX_ OP *o)
615 if (o->op_type == OP_SASSIGN && cBINOPo->op_first->op_type == OP_CONST) {
616 if (ckWARN(WARN_SYNTAX)) {
617 const line_t oldline = CopLINE(PL_curcop);
619 if (PL_copline != NOLINE)
620 CopLINE_set(PL_curcop, PL_copline);
621 Perl_warner(aTHX_ packWARN(WARN_SYNTAX), "Found = in conditional, should be ==");
622 CopLINE_set(PL_curcop, oldline);
629 Perl_scalar(pTHX_ OP *o)
634 /* assumes no premature commitment */
635 if (!o || PL_error_count || (o->op_flags & OPf_WANT)
636 || o->op_type == OP_RETURN)
641 o->op_flags = (o->op_flags & ~OPf_WANT) | OPf_WANT_SCALAR;
643 switch (o->op_type) {
645 scalar(cBINOPo->op_first);
650 for (kid = cUNOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
654 if ((kid = cLISTOPo->op_first) && kid->op_type == OP_PUSHRE) {
655 if (!kPMOP->op_pmreplroot)
656 deprecate_old("implicit split to @_");
664 if (o->op_flags & OPf_KIDS) {
665 for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling)
671 kid = cLISTOPo->op_first;
673 while ((kid = kid->op_sibling)) {
679 PL_curcop = &PL_compiling;
684 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling) {
690 PL_curcop = &PL_compiling;
693 if (ckWARN(WARN_VOID))
694 Perl_warner(aTHX_ packWARN(WARN_VOID), "Useless use of sort in scalar context");
700 Perl_scalarvoid(pTHX_ OP *o)
704 const char* useless = NULL;
708 /* trailing mad null ops don't count as "there" for void processing */
710 o->op_type != OP_NULL &&
712 o->op_sibling->op_type == OP_NULL)
715 for (sib = o->op_sibling;
716 sib && sib->op_type == OP_NULL;
717 sib = sib->op_sibling) ;
723 if (o->op_type == OP_NEXTSTATE
724 || o->op_type == OP_SETSTATE
725 || o->op_type == OP_DBSTATE
726 || (o->op_type == OP_NULL && (o->op_targ == OP_NEXTSTATE
727 || o->op_targ == OP_SETSTATE
728 || o->op_targ == OP_DBSTATE)))
729 PL_curcop = (COP*)o; /* for warning below */
731 /* assumes no premature commitment */
732 want = o->op_flags & OPf_WANT;
733 if ((want && want != OPf_WANT_SCALAR) || PL_error_count
734 || o->op_type == OP_RETURN)
739 if ((o->op_private & OPpTARGET_MY)
740 && (PL_opargs[o->op_type] & OA_TARGLEX))/* OPp share the meaning */
742 return scalar(o); /* As if inside SASSIGN */
745 o->op_flags = (o->op_flags & ~OPf_WANT) | OPf_WANT_VOID;
747 switch (o->op_type) {
749 if (!(PL_opargs[o->op_type] & OA_FOLDCONST))
753 if (o->op_flags & OPf_STACKED)
757 if (o->op_private == 4)
829 if (!(o->op_private & (OPpLVAL_INTRO|OPpOUR_INTRO)))
830 useless = OP_DESC(o);
834 kid = cUNOPo->op_first;
835 if (kid->op_type != OP_MATCH && kid->op_type != OP_SUBST &&
836 kid->op_type != OP_TRANS) {
839 useless = "negative pattern binding (!~)";
846 if (!(o->op_private & (OPpLVAL_INTRO|OPpOUR_INTRO)) &&
847 (!o->op_sibling || o->op_sibling->op_type != OP_READLINE))
848 useless = "a variable";
853 if (cSVOPo->op_private & OPpCONST_STRICT)
854 no_bareword_allowed(o);
856 if (ckWARN(WARN_VOID)) {
857 useless = "a constant";
858 if (o->op_private & OPpCONST_ARYBASE)
860 /* don't warn on optimised away booleans, eg
861 * use constant Foo, 5; Foo || print; */
862 if (cSVOPo->op_private & OPpCONST_SHORTCIRCUIT)
864 /* the constants 0 and 1 are permitted as they are
865 conventionally used as dummies in constructs like
866 1 while some_condition_with_side_effects; */
867 else if (SvNIOK(sv) && (SvNV(sv) == 0.0 || SvNV(sv) == 1.0))
869 else if (SvPOK(sv)) {
870 /* perl4's way of mixing documentation and code
871 (before the invention of POD) was based on a
872 trick to mix nroff and perl code. The trick was
873 built upon these three nroff macros being used in
874 void context. The pink camel has the details in
875 the script wrapman near page 319. */
876 const char * const maybe_macro = SvPVX_const(sv);
877 if (strnEQ(maybe_macro, "di", 2) ||
878 strnEQ(maybe_macro, "ds", 2) ||
879 strnEQ(maybe_macro, "ig", 2))
884 op_null(o); /* don't execute or even remember it */
888 o->op_type = OP_PREINC; /* pre-increment is faster */
889 o->op_ppaddr = PL_ppaddr[OP_PREINC];
893 o->op_type = OP_PREDEC; /* pre-decrement is faster */
894 o->op_ppaddr = PL_ppaddr[OP_PREDEC];
898 o->op_type = OP_I_PREINC; /* pre-increment is faster */
899 o->op_ppaddr = PL_ppaddr[OP_I_PREINC];
903 o->op_type = OP_I_PREDEC; /* pre-decrement is faster */
904 o->op_ppaddr = PL_ppaddr[OP_I_PREDEC];
913 for (kid = cUNOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
918 if (o->op_flags & OPf_STACKED)
925 if (!(o->op_flags & OPf_KIDS))
936 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
943 /* all requires must return a boolean value */
944 o->op_flags &= ~OPf_WANT;
949 if ((kid = cLISTOPo->op_first) && kid->op_type == OP_PUSHRE) {
950 if (!kPMOP->op_pmreplroot)
951 deprecate_old("implicit split to @_");
955 if (useless && ckWARN(WARN_VOID))
956 Perl_warner(aTHX_ packWARN(WARN_VOID), "Useless use of %s in void context", useless);
961 Perl_listkids(pTHX_ OP *o)
963 if (o && o->op_flags & OPf_KIDS) {
965 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
972 Perl_list(pTHX_ OP *o)
977 /* assumes no premature commitment */
978 if (!o || (o->op_flags & OPf_WANT) || PL_error_count
979 || o->op_type == OP_RETURN)
984 if ((o->op_private & OPpTARGET_MY)
985 && (PL_opargs[o->op_type] & OA_TARGLEX))/* OPp share the meaning */
987 return o; /* As if inside SASSIGN */
990 o->op_flags = (o->op_flags & ~OPf_WANT) | OPf_WANT_LIST;
992 switch (o->op_type) {
995 list(cBINOPo->op_first);
1000 for (kid = cUNOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
1008 if (!(o->op_flags & OPf_KIDS))
1010 if (!o->op_next && cUNOPo->op_first->op_type == OP_FLOP) {
1011 list(cBINOPo->op_first);
1012 return gen_constant_list(o);
1019 kid = cLISTOPo->op_first;
1021 while ((kid = kid->op_sibling)) {
1022 if (kid->op_sibling)
1027 PL_curcop = &PL_compiling;
1031 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling) {
1032 if (kid->op_sibling)
1037 PL_curcop = &PL_compiling;
1040 /* all requires must return a boolean value */
1041 o->op_flags &= ~OPf_WANT;
1048 Perl_scalarseq(pTHX_ OP *o)
1052 const OPCODE type = o->op_type;
1054 if (type == OP_LINESEQ || type == OP_SCOPE ||
1055 type == OP_LEAVE || type == OP_LEAVETRY)
1058 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling) {
1059 if (kid->op_sibling) {
1063 PL_curcop = &PL_compiling;
1065 o->op_flags &= ~OPf_PARENS;
1066 if (PL_hints & HINT_BLOCK_SCOPE)
1067 o->op_flags |= OPf_PARENS;
1070 o = newOP(OP_STUB, 0);
1075 S_modkids(pTHX_ OP *o, I32 type)
1077 if (o && o->op_flags & OPf_KIDS) {
1079 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
1085 /* Propagate lvalue ("modifiable") context to an op and its children.
1086 * 'type' represents the context type, roughly based on the type of op that
1087 * would do the modifying, although local() is represented by OP_NULL.
1088 * It's responsible for detecting things that can't be modified, flag
1089 * things that need to behave specially in an lvalue context (e.g., "$$x = 5"
1090 * might have to vivify a reference in $x), and so on.
1092 * For example, "$a+1 = 2" would cause mod() to be called with o being
1093 * OP_ADD and type being OP_SASSIGN, and would output an error.
1097 Perl_mod(pTHX_ OP *o, I32 type)
1101 /* -1 = error on localize, 0 = ignore localize, 1 = ok to localize */
1104 if (!o || PL_error_count)
1107 if ((o->op_private & OPpTARGET_MY)
1108 && (PL_opargs[o->op_type] & OA_TARGLEX))/* OPp share the meaning */
1113 switch (o->op_type) {
1119 if (!(o->op_private & OPpCONST_ARYBASE))
1122 if (PL_eval_start && PL_eval_start->op_type == OP_CONST) {
1123 CopARYBASE_set(&PL_compiling,
1124 (I32)SvIV(cSVOPx(PL_eval_start)->op_sv));
1128 SAVECOPARYBASE(&PL_compiling);
1129 CopARYBASE_set(&PL_compiling, 0);
1131 else if (type == OP_REFGEN)
1134 Perl_croak(aTHX_ "That use of $[ is unsupported");
1137 if (o->op_flags & OPf_PARENS || PL_madskills)
1141 if ((type == OP_UNDEF || type == OP_REFGEN) &&
1142 !(o->op_flags & OPf_STACKED)) {
1143 o->op_type = OP_RV2CV; /* entersub => rv2cv */
1144 /* The default is to set op_private to the number of children,
1145 which for a UNOP such as RV2CV is always 1. And w're using
1146 the bit for a flag in RV2CV, so we need it clear. */
1147 o->op_private &= ~1;
1148 o->op_ppaddr = PL_ppaddr[OP_RV2CV];
1149 assert(cUNOPo->op_first->op_type == OP_NULL);
1150 op_null(((LISTOP*)cUNOPo->op_first)->op_first);/* disable pushmark */
1153 else if (o->op_private & OPpENTERSUB_NOMOD)
1155 else { /* lvalue subroutine call */
1156 o->op_private |= OPpLVAL_INTRO;
1157 PL_modcount = RETURN_UNLIMITED_NUMBER;
1158 if (type == OP_GREPSTART || type == OP_ENTERSUB || type == OP_REFGEN) {
1159 /* Backward compatibility mode: */
1160 o->op_private |= OPpENTERSUB_INARGS;
1163 else { /* Compile-time error message: */
1164 OP *kid = cUNOPo->op_first;
1168 if (kid->op_type != OP_PUSHMARK) {
1169 if (kid->op_type != OP_NULL || kid->op_targ != OP_LIST)
1171 "panic: unexpected lvalue entersub "
1172 "args: type/targ %ld:%"UVuf,
1173 (long)kid->op_type, (UV)kid->op_targ);
1174 kid = kLISTOP->op_first;
1176 while (kid->op_sibling)
1177 kid = kid->op_sibling;
1178 if (!(kid->op_type == OP_NULL && kid->op_targ == OP_RV2CV)) {
1180 if (kid->op_type == OP_METHOD_NAMED
1181 || kid->op_type == OP_METHOD)
1185 NewOp(1101, newop, 1, UNOP);
1186 newop->op_type = OP_RV2CV;
1187 newop->op_ppaddr = PL_ppaddr[OP_RV2CV];
1188 newop->op_first = NULL;
1189 newop->op_next = (OP*)newop;
1190 kid->op_sibling = (OP*)newop;
1191 newop->op_private |= OPpLVAL_INTRO;
1192 newop->op_private &= ~1;
1196 if (kid->op_type != OP_RV2CV)
1198 "panic: unexpected lvalue entersub "
1199 "entry via type/targ %ld:%"UVuf,
1200 (long)kid->op_type, (UV)kid->op_targ);
1201 kid->op_private |= OPpLVAL_INTRO;
1202 break; /* Postpone until runtime */
1206 kid = kUNOP->op_first;
1207 if (kid->op_type == OP_NULL && kid->op_targ == OP_RV2SV)
1208 kid = kUNOP->op_first;
1209 if (kid->op_type == OP_NULL)
1211 "Unexpected constant lvalue entersub "
1212 "entry via type/targ %ld:%"UVuf,
1213 (long)kid->op_type, (UV)kid->op_targ);
1214 if (kid->op_type != OP_GV) {
1215 /* Restore RV2CV to check lvalueness */
1217 if (kid->op_next && kid->op_next != kid) { /* Happens? */
1218 okid->op_next = kid->op_next;
1219 kid->op_next = okid;
1222 okid->op_next = NULL;
1223 okid->op_type = OP_RV2CV;
1225 okid->op_ppaddr = PL_ppaddr[OP_RV2CV];
1226 okid->op_private |= OPpLVAL_INTRO;
1227 okid->op_private &= ~1;
1231 cv = GvCV(kGVOP_gv);
1241 /* grep, foreach, subcalls, refgen */
1242 if (type == OP_GREPSTART || type == OP_ENTERSUB || type == OP_REFGEN)
1244 yyerror(Perl_form(aTHX_ "Can't modify %s in %s",
1245 (o->op_type == OP_NULL && (o->op_flags & OPf_SPECIAL)
1247 : (o->op_type == OP_ENTERSUB
1248 ? "non-lvalue subroutine call"
1250 type ? PL_op_desc[type] : "local"));
1264 case OP_RIGHT_SHIFT:
1273 if (!(o->op_flags & OPf_STACKED))
1280 for (kid = cUNOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
1286 if (type == OP_REFGEN && o->op_flags & OPf_PARENS) {
1287 PL_modcount = RETURN_UNLIMITED_NUMBER;
1288 return o; /* Treat \(@foo) like ordinary list. */
1292 if (scalar_mod_type(o, type))
1294 ref(cUNOPo->op_first, o->op_type);
1298 if (type == OP_LEAVESUBLV)
1299 o->op_private |= OPpMAYBE_LVSUB;
1305 PL_modcount = RETURN_UNLIMITED_NUMBER;
1308 ref(cUNOPo->op_first, o->op_type);
1313 PL_hints |= HINT_BLOCK_SCOPE;
1328 PL_modcount = RETURN_UNLIMITED_NUMBER;
1329 if (type == OP_REFGEN && o->op_flags & OPf_PARENS)
1330 return o; /* Treat \(@foo) like ordinary list. */
1331 if (scalar_mod_type(o, type))
1333 if (type == OP_LEAVESUBLV)
1334 o->op_private |= OPpMAYBE_LVSUB;
1338 if (!type) /* local() */
1339 Perl_croak(aTHX_ "Can't localize lexical variable %s",
1340 PAD_COMPNAME_PV(o->op_targ));
1348 if (type != OP_SASSIGN)
1352 if (o->op_private == 4) /* don't allow 4 arg substr as lvalue */
1357 if (type == OP_LEAVESUBLV)
1358 o->op_private |= OPpMAYBE_LVSUB;
1360 pad_free(o->op_targ);
1361 o->op_targ = pad_alloc(o->op_type, SVs_PADMY);
1362 assert(SvTYPE(PAD_SV(o->op_targ)) == SVt_NULL);
1363 if (o->op_flags & OPf_KIDS)
1364 mod(cBINOPo->op_first->op_sibling, type);
1369 ref(cBINOPo->op_first, o->op_type);
1370 if (type == OP_ENTERSUB &&
1371 !(o->op_private & (OPpLVAL_INTRO | OPpDEREF)))
1372 o->op_private |= OPpLVAL_DEFER;
1373 if (type == OP_LEAVESUBLV)
1374 o->op_private |= OPpMAYBE_LVSUB;
1384 if (o->op_flags & OPf_KIDS)
1385 mod(cLISTOPo->op_last, type);
1390 if (o->op_flags & OPf_SPECIAL) /* do BLOCK */
1392 else if (!(o->op_flags & OPf_KIDS))
1394 if (o->op_targ != OP_LIST) {
1395 mod(cBINOPo->op_first, type);
1401 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
1406 if (type != OP_LEAVESUBLV)
1408 break; /* mod()ing was handled by ck_return() */
1411 /* [20011101.069] File test operators interpret OPf_REF to mean that
1412 their argument is a filehandle; thus \stat(".") should not set
1414 if (type == OP_REFGEN &&
1415 PL_check[o->op_type] == MEMBER_TO_FPTR(Perl_ck_ftst))
1418 if (type != OP_LEAVESUBLV)
1419 o->op_flags |= OPf_MOD;
1421 if (type == OP_AASSIGN || type == OP_SASSIGN)
1422 o->op_flags |= OPf_SPECIAL|OPf_REF;
1423 else if (!type) { /* local() */
1426 o->op_private |= OPpLVAL_INTRO;
1427 o->op_flags &= ~OPf_SPECIAL;
1428 PL_hints |= HINT_BLOCK_SCOPE;
1433 if (ckWARN(WARN_SYNTAX)) {
1434 Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
1435 "Useless localization of %s", OP_DESC(o));
1439 else if (type != OP_GREPSTART && type != OP_ENTERSUB
1440 && type != OP_LEAVESUBLV)
1441 o->op_flags |= OPf_REF;
1446 S_scalar_mod_type(const OP *o, I32 type)
1450 if (o->op_type == OP_RV2GV)
1474 case OP_RIGHT_SHIFT:
1493 S_is_handle_constructor(const OP *o, I32 numargs)
1495 switch (o->op_type) {
1503 case OP_SELECT: /* XXX c.f. SelectSaver.pm */
1516 Perl_refkids(pTHX_ OP *o, I32 type)
1518 if (o && o->op_flags & OPf_KIDS) {
1520 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
1527 Perl_doref(pTHX_ OP *o, I32 type, bool set_op_ref)
1532 if (!o || PL_error_count)
1535 switch (o->op_type) {
1537 if ((type == OP_EXISTS || type == OP_DEFINED || type == OP_LOCK) &&
1538 !(o->op_flags & OPf_STACKED)) {
1539 o->op_type = OP_RV2CV; /* entersub => rv2cv */
1540 o->op_ppaddr = PL_ppaddr[OP_RV2CV];
1541 assert(cUNOPo->op_first->op_type == OP_NULL);
1542 op_null(((LISTOP*)cUNOPo->op_first)->op_first); /* disable pushmark */
1543 o->op_flags |= OPf_SPECIAL;
1544 o->op_private &= ~1;
1549 for (kid = cUNOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
1550 doref(kid, type, set_op_ref);
1553 if (type == OP_DEFINED)
1554 o->op_flags |= OPf_SPECIAL; /* don't create GV */
1555 doref(cUNOPo->op_first, o->op_type, set_op_ref);
1558 if (type == OP_RV2SV || type == OP_RV2AV || type == OP_RV2HV) {
1559 o->op_private |= (type == OP_RV2AV ? OPpDEREF_AV
1560 : type == OP_RV2HV ? OPpDEREF_HV
1562 o->op_flags |= OPf_MOD;
1567 o->op_flags |= OPf_MOD; /* XXX ??? */
1573 o->op_flags |= OPf_REF;
1576 if (type == OP_DEFINED)
1577 o->op_flags |= OPf_SPECIAL; /* don't create GV */
1578 doref(cUNOPo->op_first, o->op_type, set_op_ref);
1584 o->op_flags |= OPf_REF;
1589 if (!(o->op_flags & OPf_KIDS))
1591 doref(cBINOPo->op_first, type, set_op_ref);
1595 doref(cBINOPo->op_first, o->op_type, set_op_ref);
1596 if (type == OP_RV2SV || type == OP_RV2AV || type == OP_RV2HV) {
1597 o->op_private |= (type == OP_RV2AV ? OPpDEREF_AV
1598 : type == OP_RV2HV ? OPpDEREF_HV
1600 o->op_flags |= OPf_MOD;
1610 if (!(o->op_flags & OPf_KIDS))
1612 doref(cLISTOPo->op_last, type, set_op_ref);
1622 S_dup_attrlist(pTHX_ OP *o)
1627 /* An attrlist is either a simple OP_CONST or an OP_LIST with kids,
1628 * where the first kid is OP_PUSHMARK and the remaining ones
1629 * are OP_CONST. We need to push the OP_CONST values.
1631 if (o->op_type == OP_CONST)
1632 rop = newSVOP(OP_CONST, o->op_flags, SvREFCNT_inc_NN(cSVOPo->op_sv));
1634 else if (o->op_type == OP_NULL)
1638 assert((o->op_type == OP_LIST) && (o->op_flags & OPf_KIDS));
1640 for (o = cLISTOPo->op_first; o; o=o->op_sibling) {
1641 if (o->op_type == OP_CONST)
1642 rop = append_elem(OP_LIST, rop,
1643 newSVOP(OP_CONST, o->op_flags,
1644 SvREFCNT_inc_NN(cSVOPo->op_sv)));
1651 S_apply_attrs(pTHX_ HV *stash, SV *target, OP *attrs, bool for_my)
1656 /* fake up C<use attributes $pkg,$rv,@attrs> */
1657 ENTER; /* need to protect against side-effects of 'use' */
1659 stashsv = stash ? newSVhek(HvNAME_HEK(stash)) : &PL_sv_no;
1661 #define ATTRSMODULE "attributes"
1662 #define ATTRSMODULE_PM "attributes.pm"
1665 /* Don't force the C<use> if we don't need it. */
1666 SV * const * const svp = hv_fetchs(GvHVn(PL_incgv), ATTRSMODULE_PM, FALSE);
1667 if (svp && *svp != &PL_sv_undef)
1668 NOOP; /* already in %INC */
1670 Perl_load_module(aTHX_ PERL_LOADMOD_NOIMPORT,
1671 newSVpvs(ATTRSMODULE), NULL);
1674 Perl_load_module(aTHX_ PERL_LOADMOD_IMPORT_OPS,
1675 newSVpvs(ATTRSMODULE),
1677 prepend_elem(OP_LIST,
1678 newSVOP(OP_CONST, 0, stashsv),
1679 prepend_elem(OP_LIST,
1680 newSVOP(OP_CONST, 0,
1682 dup_attrlist(attrs))));
1688 S_apply_attrs_my(pTHX_ HV *stash, OP *target, OP *attrs, OP **imopsp)
1691 OP *pack, *imop, *arg;
1697 assert(target->op_type == OP_PADSV ||
1698 target->op_type == OP_PADHV ||
1699 target->op_type == OP_PADAV);
1701 /* Ensure that attributes.pm is loaded. */
1702 apply_attrs(stash, PAD_SV(target->op_targ), attrs, TRUE);
1704 /* Need package name for method call. */
1705 pack = newSVOP(OP_CONST, 0, newSVpvs(ATTRSMODULE));
1707 /* Build up the real arg-list. */
1708 stashsv = stash ? newSVhek(HvNAME_HEK(stash)) : &PL_sv_no;
1710 arg = newOP(OP_PADSV, 0);
1711 arg->op_targ = target->op_targ;
1712 arg = prepend_elem(OP_LIST,
1713 newSVOP(OP_CONST, 0, stashsv),
1714 prepend_elem(OP_LIST,
1715 newUNOP(OP_REFGEN, 0,
1716 mod(arg, OP_REFGEN)),
1717 dup_attrlist(attrs)));
1719 /* Fake up a method call to import */
1720 meth = newSVpvs_share("import");
1721 imop = convert(OP_ENTERSUB, OPf_STACKED|OPf_SPECIAL|OPf_WANT_VOID,
1722 append_elem(OP_LIST,
1723 prepend_elem(OP_LIST, pack, list(arg)),
1724 newSVOP(OP_METHOD_NAMED, 0, meth)));
1725 imop->op_private |= OPpENTERSUB_NOMOD;
1727 /* Combine the ops. */
1728 *imopsp = append_elem(OP_LIST, *imopsp, imop);
1732 =notfor apidoc apply_attrs_string
1734 Attempts to apply a list of attributes specified by the C<attrstr> and
1735 C<len> arguments to the subroutine identified by the C<cv> argument which
1736 is expected to be associated with the package identified by the C<stashpv>
1737 argument (see L<attributes>). It gets this wrong, though, in that it
1738 does not correctly identify the boundaries of the individual attribute
1739 specifications within C<attrstr>. This is not really intended for the
1740 public API, but has to be listed here for systems such as AIX which
1741 need an explicit export list for symbols. (It's called from XS code
1742 in support of the C<ATTRS:> keyword from F<xsubpp>.) Patches to fix it
1743 to respect attribute syntax properly would be welcome.
1749 Perl_apply_attrs_string(pTHX_ const char *stashpv, CV *cv,
1750 const char *attrstr, STRLEN len)
1755 len = strlen(attrstr);
1759 for (; isSPACE(*attrstr) && len; --len, ++attrstr) ;
1761 const char * const sstr = attrstr;
1762 for (; !isSPACE(*attrstr) && len; --len, ++attrstr) ;
1763 attrs = append_elem(OP_LIST, attrs,
1764 newSVOP(OP_CONST, 0,
1765 newSVpvn(sstr, attrstr-sstr)));
1769 Perl_load_module(aTHX_ PERL_LOADMOD_IMPORT_OPS,
1770 newSVpvs(ATTRSMODULE),
1771 NULL, prepend_elem(OP_LIST,
1772 newSVOP(OP_CONST, 0, newSVpv(stashpv,0)),
1773 prepend_elem(OP_LIST,
1774 newSVOP(OP_CONST, 0,
1780 S_my_kid(pTHX_ OP *o, OP *attrs, OP **imopsp)
1785 if (!o || PL_error_count)
1789 if (PL_madskills && type == OP_NULL && o->op_flags & OPf_KIDS) {
1790 (void)my_kid(cUNOPo->op_first, attrs, imopsp);
1794 if (type == OP_LIST) {
1796 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
1797 my_kid(kid, attrs, imopsp);
1798 } else if (type == OP_UNDEF
1804 } else if (type == OP_RV2SV || /* "our" declaration */
1806 type == OP_RV2HV) { /* XXX does this let anything illegal in? */
1807 if (cUNOPo->op_first->op_type != OP_GV) { /* MJD 20011224 */
1808 yyerror(Perl_form(aTHX_ "Can't declare %s in \"%s\"",
1810 PL_in_my == KEY_our ? "our" : PL_in_my == KEY_state ? "state" : "my"));
1812 GV * const gv = cGVOPx_gv(cUNOPo->op_first);
1814 PL_in_my_stash = NULL;
1815 apply_attrs(GvSTASH(gv),
1816 (type == OP_RV2SV ? GvSV(gv) :
1817 type == OP_RV2AV ? (SV*)GvAV(gv) :
1818 type == OP_RV2HV ? (SV*)GvHV(gv) : (SV*)gv),
1821 o->op_private |= OPpOUR_INTRO;
1824 else if (type != OP_PADSV &&
1827 type != OP_PUSHMARK)
1829 yyerror(Perl_form(aTHX_ "Can't declare %s in \"%s\"",
1831 PL_in_my == KEY_our ? "our" : PL_in_my == KEY_state ? "state" : "my"));
1834 else if (attrs && type != OP_PUSHMARK) {
1838 PL_in_my_stash = NULL;
1840 /* check for C<my Dog $spot> when deciding package */
1841 stash = PAD_COMPNAME_TYPE(o->op_targ);
1843 stash = PL_curstash;
1844 apply_attrs_my(stash, o, attrs, imopsp);
1846 o->op_flags |= OPf_MOD;
1847 o->op_private |= OPpLVAL_INTRO;
1848 if (PL_in_my == KEY_state)
1849 o->op_private |= OPpPAD_STATE;
1854 Perl_my_attrs(pTHX_ OP *o, OP *attrs)
1858 int maybe_scalar = 0;
1860 /* [perl #17376]: this appears to be premature, and results in code such as
1861 C< our(%x); > executing in list mode rather than void mode */
1863 if (o->op_flags & OPf_PARENS)
1873 o = my_kid(o, attrs, &rops);
1875 if (maybe_scalar && o->op_type == OP_PADSV) {
1876 o = scalar(append_list(OP_LIST, (LISTOP*)rops, (LISTOP*)o));
1877 o->op_private |= OPpLVAL_INTRO;
1880 o = append_list(OP_LIST, (LISTOP*)o, (LISTOP*)rops);
1883 PL_in_my_stash = NULL;
1888 Perl_my(pTHX_ OP *o)
1890 return my_attrs(o, NULL);
1894 Perl_sawparens(pTHX_ OP *o)
1896 PERL_UNUSED_CONTEXT;
1898 o->op_flags |= OPf_PARENS;
1903 Perl_bind_match(pTHX_ I32 type, OP *left, OP *right)
1907 const OPCODE ltype = left->op_type;
1908 const OPCODE rtype = right->op_type;
1910 if ( (ltype == OP_RV2AV || ltype == OP_RV2HV || ltype == OP_PADAV
1911 || ltype == OP_PADHV) && ckWARN(WARN_MISC))
1913 const char * const desc
1914 = PL_op_desc[(rtype == OP_SUBST || rtype == OP_TRANS)
1915 ? (int)rtype : OP_MATCH];
1916 const char * const sample = ((ltype == OP_RV2AV || ltype == OP_PADAV)
1917 ? "@array" : "%hash");
1918 Perl_warner(aTHX_ packWARN(WARN_MISC),
1919 "Applying %s to %s will act on scalar(%s)",
1920 desc, sample, sample);
1923 if (rtype == OP_CONST &&
1924 cSVOPx(right)->op_private & OPpCONST_BARE &&
1925 cSVOPx(right)->op_private & OPpCONST_STRICT)
1927 no_bareword_allowed(right);
1930 ismatchop = rtype == OP_MATCH ||
1931 rtype == OP_SUBST ||
1933 if (ismatchop && right->op_private & OPpTARGET_MY) {
1935 right->op_private &= ~OPpTARGET_MY;
1937 if (!(right->op_flags & OPf_STACKED) && ismatchop) {
1940 right->op_flags |= OPf_STACKED;
1941 if (rtype != OP_MATCH &&
1942 ! (rtype == OP_TRANS &&
1943 right->op_private & OPpTRANS_IDENTICAL))
1944 newleft = mod(left, rtype);
1947 if (right->op_type == OP_TRANS)
1948 o = newBINOP(OP_NULL, OPf_STACKED, scalar(newleft), right);
1950 o = prepend_elem(rtype, scalar(newleft), right);
1952 return newUNOP(OP_NOT, 0, scalar(o));
1956 return bind_match(type, left,
1957 pmruntime(newPMOP(OP_MATCH, 0), right, 0));
1961 Perl_invert(pTHX_ OP *o)
1965 return newUNOP(OP_NOT, OPf_SPECIAL, scalar(o));
1969 Perl_scope(pTHX_ OP *o)
1973 if (o->op_flags & OPf_PARENS || PERLDB_NOOPT || PL_tainting) {
1974 o = prepend_elem(OP_LINESEQ, newOP(OP_ENTER, 0), o);
1975 o->op_type = OP_LEAVE;
1976 o->op_ppaddr = PL_ppaddr[OP_LEAVE];
1978 else if (o->op_type == OP_LINESEQ) {
1980 o->op_type = OP_SCOPE;
1981 o->op_ppaddr = PL_ppaddr[OP_SCOPE];
1982 kid = ((LISTOP*)o)->op_first;
1983 if (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) {
1986 /* The following deals with things like 'do {1 for 1}' */
1987 kid = kid->op_sibling;
1989 (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE))
1994 o = newLISTOP(OP_SCOPE, 0, o, NULL);
2000 Perl_block_start(pTHX_ int full)
2003 const int retval = PL_savestack_ix;
2004 pad_block_start(full);
2006 PL_hints &= ~HINT_BLOCK_SCOPE;
2007 SAVECOMPILEWARNINGS();
2008 PL_compiling.cop_warnings = DUP_WARNINGS(PL_compiling.cop_warnings);
2013 Perl_block_end(pTHX_ I32 floor, OP *seq)
2016 const int needblockscope = PL_hints & HINT_BLOCK_SCOPE;
2017 OP* const retval = scalarseq(seq);
2019 CopHINTS_set(&PL_compiling, PL_hints);
2021 PL_hints |= HINT_BLOCK_SCOPE; /* propagate out */
2030 const PADOFFSET offset = pad_findmy("$_");
2031 if (offset == NOT_IN_PAD || PAD_COMPNAME_FLAGS_isOUR(offset)) {
2032 return newSVREF(newGVOP(OP_GV, 0, PL_defgv));
2035 OP * const o = newOP(OP_PADSV, 0);
2036 o->op_targ = offset;
2042 Perl_newPROG(pTHX_ OP *o)
2048 PL_eval_root = newUNOP(OP_LEAVEEVAL,
2049 ((PL_in_eval & EVAL_KEEPERR)
2050 ? OPf_SPECIAL : 0), o);
2051 PL_eval_start = linklist(PL_eval_root);
2052 PL_eval_root->op_private |= OPpREFCOUNTED;
2053 OpREFCNT_set(PL_eval_root, 1);
2054 PL_eval_root->op_next = 0;
2055 CALL_PEEP(PL_eval_start);
2058 if (o->op_type == OP_STUB) {
2059 PL_comppad_name = 0;
2061 S_op_destroy(aTHX_ o);
2064 PL_main_root = scope(sawparens(scalarvoid(o)));
2065 PL_curcop = &PL_compiling;
2066 PL_main_start = LINKLIST(PL_main_root);
2067 PL_main_root->op_private |= OPpREFCOUNTED;
2068 OpREFCNT_set(PL_main_root, 1);
2069 PL_main_root->op_next = 0;
2070 CALL_PEEP(PL_main_start);
2073 /* Register with debugger */
2075 CV * const cv = get_cv("DB::postponed", FALSE);
2079 XPUSHs((SV*)CopFILEGV(&PL_compiling));
2081 call_sv((SV*)cv, G_DISCARD);
2088 Perl_localize(pTHX_ OP *o, I32 lex)
2091 if (o->op_flags & OPf_PARENS)
2092 /* [perl #17376]: this appears to be premature, and results in code such as
2093 C< our(%x); > executing in list mode rather than void mode */
2100 if ( PL_bufptr > PL_oldbufptr && PL_bufptr[-1] == ','
2101 && ckWARN(WARN_PARENTHESIS))
2103 char *s = PL_bufptr;
2106 /* some heuristics to detect a potential error */
2107 while (*s && (strchr(", \t\n", *s)))
2111 if (*s && strchr("@$%*", *s) && *++s
2112 && (isALNUM(*s) || UTF8_IS_CONTINUED(*s))) {
2115 while (*s && (isALNUM(*s) || UTF8_IS_CONTINUED(*s)))
2117 while (*s && (strchr(", \t\n", *s)))
2123 if (sigil && (*s == ';' || *s == '=')) {
2124 Perl_warner(aTHX_ packWARN(WARN_PARENTHESIS),
2125 "Parentheses missing around \"%s\" list",
2126 lex ? (PL_in_my == KEY_our ? "our" : PL_in_my == KEY_state ? "state" : "my")
2134 o = mod(o, OP_NULL); /* a bit kludgey */
2136 PL_in_my_stash = NULL;
2141 Perl_jmaybe(pTHX_ OP *o)
2143 if (o->op_type == OP_LIST) {
2145 = newSVREF(newGVOP(OP_GV, 0, gv_fetchpvs(";", GV_ADD|GV_NOTQUAL, SVt_PV)));
2146 o = convert(OP_JOIN, 0, prepend_elem(OP_LIST, o2, o));
2152 Perl_fold_constants(pTHX_ register OP *o)
2157 VOL I32 type = o->op_type;
2162 SV * const oldwarnhook = PL_warnhook;
2163 SV * const olddiehook = PL_diehook;
2166 if (PL_opargs[type] & OA_RETSCALAR)
2168 if (PL_opargs[type] & OA_TARGET && !o->op_targ)
2169 o->op_targ = pad_alloc(type, SVs_PADTMP);
2171 /* integerize op, unless it happens to be C<-foo>.
2172 * XXX should pp_i_negate() do magic string negation instead? */
2173 if ((PL_opargs[type] & OA_OTHERINT) && (PL_hints & HINT_INTEGER)
2174 && !(type == OP_NEGATE && cUNOPo->op_first->op_type == OP_CONST
2175 && (cUNOPo->op_first->op_private & OPpCONST_BARE)))
2177 o->op_ppaddr = PL_ppaddr[type = ++(o->op_type)];
2180 if (!(PL_opargs[type] & OA_FOLDCONST))
2185 /* XXX might want a ck_negate() for this */
2186 cUNOPo->op_first->op_private &= ~OPpCONST_STRICT;
2197 /* XXX what about the numeric ops? */
2198 if (PL_hints & HINT_LOCALE)
2203 goto nope; /* Don't try to run w/ errors */
2205 for (curop = LINKLIST(o); curop != o; curop = LINKLIST(curop)) {
2206 const OPCODE type = curop->op_type;
2207 if ((type != OP_CONST || (curop->op_private & OPpCONST_BARE)) &&
2209 type != OP_SCALAR &&
2211 type != OP_PUSHMARK)
2217 curop = LINKLIST(o);
2218 old_next = o->op_next;
2222 oldscope = PL_scopestack_ix;
2223 create_eval_scope(G_FAKINGEVAL);
2225 PL_warnhook = PERL_WARNHOOK_FATAL;
2232 sv = *(PL_stack_sp--);
2233 if (o->op_targ && sv == PAD_SV(o->op_targ)) /* grab pad temp? */
2234 pad_swipe(o->op_targ, FALSE);
2235 else if (SvTEMP(sv)) { /* grab mortal temp? */
2236 SvREFCNT_inc_simple_void(sv);
2241 /* Something tried to die. Abandon constant folding. */
2242 /* Pretend the error never happened. */
2243 sv_setpvn(ERRSV,"",0);
2244 o->op_next = old_next;
2248 /* Don't expect 1 (setjmp failed) or 2 (something called my_exit) */
2249 PL_warnhook = oldwarnhook;
2250 PL_diehook = olddiehook;
2251 /* XXX note that this croak may fail as we've already blown away
2252 * the stack - eg any nested evals */
2253 Perl_croak(aTHX_ "panic: fold_constants JMPENV_PUSH returned %d", ret);
2256 PL_warnhook = oldwarnhook;
2257 PL_diehook = olddiehook;
2259 if (PL_scopestack_ix > oldscope)
2260 delete_eval_scope();
2269 if (type == OP_RV2GV)
2270 newop = newGVOP(OP_GV, 0, (GV*)sv);
2272 newop = newSVOP(OP_CONST, 0, (SV*)sv);
2273 op_getmad(o,newop,'f');
2281 Perl_gen_constant_list(pTHX_ register OP *o)
2285 const I32 oldtmps_floor = PL_tmps_floor;
2289 return o; /* Don't attempt to run with errors */
2291 PL_op = curop = LINKLIST(o);
2297 assert (!(curop->op_flags & OPf_SPECIAL));
2298 assert(curop->op_type == OP_RANGE);
2300 PL_tmps_floor = oldtmps_floor;
2302 o->op_type = OP_RV2AV;
2303 o->op_ppaddr = PL_ppaddr[OP_RV2AV];
2304 o->op_flags &= ~OPf_REF; /* treat \(1..2) like an ordinary list */
2305 o->op_flags |= OPf_PARENS; /* and flatten \(1..2,3) */
2306 o->op_opt = 0; /* needs to be revisited in peep() */
2307 curop = ((UNOP*)o)->op_first;
2308 ((UNOP*)o)->op_first = newSVOP(OP_CONST, 0, SvREFCNT_inc_NN(*PL_stack_sp--));
2310 op_getmad(curop,o,'O');
2319 Perl_convert(pTHX_ I32 type, I32 flags, OP *o)
2322 if (!o || o->op_type != OP_LIST)
2323 o = newLISTOP(OP_LIST, 0, o, NULL);
2325 o->op_flags &= ~OPf_WANT;
2327 if (!(PL_opargs[type] & OA_MARK))
2328 op_null(cLISTOPo->op_first);
2330 o->op_type = (OPCODE)type;
2331 o->op_ppaddr = PL_ppaddr[type];
2332 o->op_flags |= flags;
2334 o = CHECKOP(type, o);
2335 if (o->op_type != (unsigned)type)
2338 return fold_constants(o);
2341 /* List constructors */
2344 Perl_append_elem(pTHX_ I32 type, OP *first, OP *last)
2352 if (first->op_type != (unsigned)type
2353 || (type == OP_LIST && (first->op_flags & OPf_PARENS)))
2355 return newLISTOP(type, 0, first, last);
2358 if (first->op_flags & OPf_KIDS)
2359 ((LISTOP*)first)->op_last->op_sibling = last;
2361 first->op_flags |= OPf_KIDS;
2362 ((LISTOP*)first)->op_first = last;
2364 ((LISTOP*)first)->op_last = last;
2369 Perl_append_list(pTHX_ I32 type, LISTOP *first, LISTOP *last)
2377 if (first->op_type != (unsigned)type)
2378 return prepend_elem(type, (OP*)first, (OP*)last);
2380 if (last->op_type != (unsigned)type)
2381 return append_elem(type, (OP*)first, (OP*)last);
2383 first->op_last->op_sibling = last->op_first;
2384 first->op_last = last->op_last;
2385 first->op_flags |= (last->op_flags & OPf_KIDS);
2388 if (last->op_first && first->op_madprop) {
2389 MADPROP *mp = last->op_first->op_madprop;
2391 while (mp->mad_next)
2393 mp->mad_next = first->op_madprop;
2396 last->op_first->op_madprop = first->op_madprop;
2399 first->op_madprop = last->op_madprop;
2400 last->op_madprop = 0;
2403 S_op_destroy(aTHX_ (OP*)last);
2409 Perl_prepend_elem(pTHX_ I32 type, OP *first, OP *last)
2417 if (last->op_type == (unsigned)type) {
2418 if (type == OP_LIST) { /* already a PUSHMARK there */
2419 first->op_sibling = ((LISTOP*)last)->op_first->op_sibling;
2420 ((LISTOP*)last)->op_first->op_sibling = first;
2421 if (!(first->op_flags & OPf_PARENS))
2422 last->op_flags &= ~OPf_PARENS;
2425 if (!(last->op_flags & OPf_KIDS)) {
2426 ((LISTOP*)last)->op_last = first;
2427 last->op_flags |= OPf_KIDS;
2429 first->op_sibling = ((LISTOP*)last)->op_first;
2430 ((LISTOP*)last)->op_first = first;
2432 last->op_flags |= OPf_KIDS;
2436 return newLISTOP(type, 0, first, last);
2444 Perl_newTOKEN(pTHX_ I32 optype, YYSTYPE lval, MADPROP* madprop)
2447 Newxz(tk, 1, TOKEN);
2448 tk->tk_type = (OPCODE)optype;
2449 tk->tk_type = 12345;
2451 tk->tk_mad = madprop;
2456 Perl_token_free(pTHX_ TOKEN* tk)
2458 if (tk->tk_type != 12345)
2460 mad_free(tk->tk_mad);
2465 Perl_token_getmad(pTHX_ TOKEN* tk, OP* o, char slot)
2469 if (tk->tk_type != 12345) {
2470 Perl_warner(aTHX_ packWARN(WARN_MISC),
2471 "Invalid TOKEN object ignored");
2478 /* faked up qw list? */
2480 tm->mad_type == MAD_SV &&
2481 SvPVX((SV*)tm->mad_val)[0] == 'q')
2488 /* pretend constant fold didn't happen? */
2489 if (mp->mad_key == 'f' &&
2490 (o->op_type == OP_CONST ||
2491 o->op_type == OP_GV) )
2493 token_getmad(tk,(OP*)mp->mad_val,slot);
2507 if (mp->mad_key == 'X')
2508 mp->mad_key = slot; /* just change the first one */
2518 Perl_op_getmad_weak(pTHX_ OP* from, OP* o, char slot)
2527 /* pretend constant fold didn't happen? */
2528 if (mp->mad_key == 'f' &&
2529 (o->op_type == OP_CONST ||
2530 o->op_type == OP_GV) )
2532 op_getmad(from,(OP*)mp->mad_val,slot);
2539 mp->mad_next = newMADPROP(slot,MAD_OP,from,0);
2542 o->op_madprop = newMADPROP(slot,MAD_OP,from,0);
2548 Perl_op_getmad(pTHX_ OP* from, OP* o, char slot)
2557 /* pretend constant fold didn't happen? */
2558 if (mp->mad_key == 'f' &&
2559 (o->op_type == OP_CONST ||
2560 o->op_type == OP_GV) )
2562 op_getmad(from,(OP*)mp->mad_val,slot);
2569 mp->mad_next = newMADPROP(slot,MAD_OP,from,1);
2572 o->op_madprop = newMADPROP(slot,MAD_OP,from,1);
2576 PerlIO_printf(PerlIO_stderr(),
2577 "DESTROYING op = %0"UVxf"\n", PTR2UV(from));
2583 Perl_prepend_madprops(pTHX_ MADPROP* mp, OP* o, char slot)
2601 Perl_append_madprops(pTHX_ MADPROP* tm, OP* o, char slot)
2605 addmad(tm, &(o->op_madprop), slot);
2609 Perl_addmad(pTHX_ MADPROP* tm, MADPROP** root, char slot)
2630 Perl_newMADsv(pTHX_ char key, SV* sv)
2632 return newMADPROP(key, MAD_SV, sv, 0);
2636 Perl_newMADPROP(pTHX_ char key, char type, void* val, I32 vlen)
2639 Newxz(mp, 1, MADPROP);
2642 mp->mad_vlen = vlen;
2643 mp->mad_type = type;
2645 /* PerlIO_printf(PerlIO_stderr(), "NEW mp = %0x\n", mp); */
2650 Perl_mad_free(pTHX_ MADPROP* mp)
2652 /* PerlIO_printf(PerlIO_stderr(), "FREE mp = %0x\n", mp); */
2656 mad_free(mp->mad_next);
2657 /* if (PL_lex_state != LEX_NOTPARSING && mp->mad_vlen)
2658 PerlIO_printf(PerlIO_stderr(), "DESTROYING '%c'=<%s>\n", mp->mad_key & 255, mp->mad_val); */
2659 switch (mp->mad_type) {
2663 Safefree((char*)mp->mad_val);
2666 if (mp->mad_vlen) /* vlen holds "strong/weak" boolean */
2667 op_free((OP*)mp->mad_val);
2670 sv_free((SV*)mp->mad_val);
2673 PerlIO_printf(PerlIO_stderr(), "Unrecognized mad\n");
2682 Perl_newNULLLIST(pTHX)
2684 return newOP(OP_STUB, 0);
2688 Perl_force_list(pTHX_ OP *o)
2690 if (!o || o->op_type != OP_LIST)
2691 o = newLISTOP(OP_LIST, 0, o, NULL);
2697 Perl_newLISTOP(pTHX_ I32 type, I32 flags, OP *first, OP *last)
2702 NewOp(1101, listop, 1, LISTOP);
2704 listop->op_type = (OPCODE)type;
2705 listop->op_ppaddr = PL_ppaddr[type];
2708 listop->op_flags = (U8)flags;
2712 else if (!first && last)
2715 first->op_sibling = last;
2716 listop->op_first = first;
2717 listop->op_last = last;
2718 if (type == OP_LIST) {
2719 OP* const pushop = newOP(OP_PUSHMARK, 0);
2720 pushop->op_sibling = first;
2721 listop->op_first = pushop;
2722 listop->op_flags |= OPf_KIDS;
2724 listop->op_last = pushop;
2727 return CHECKOP(type, listop);
2731 Perl_newOP(pTHX_ I32 type, I32 flags)
2735 NewOp(1101, o, 1, OP);
2736 o->op_type = (OPCODE)type;
2737 o->op_ppaddr = PL_ppaddr[type];
2738 o->op_flags = (U8)flags;
2740 o->op_latefreed = 0;
2743 o->op_private = (U8)(0 | (flags >> 8));
2744 if (PL_opargs[type] & OA_RETSCALAR)
2746 if (PL_opargs[type] & OA_TARGET)
2747 o->op_targ = pad_alloc(type, SVs_PADTMP);
2748 return CHECKOP(type, o);
2752 Perl_newUNOP(pTHX_ I32 type, I32 flags, OP *first)
2758 first = newOP(OP_STUB, 0);
2759 if (PL_opargs[type] & OA_MARK)
2760 first = force_list(first);
2762 NewOp(1101, unop, 1, UNOP);
2763 unop->op_type = (OPCODE)type;
2764 unop->op_ppaddr = PL_ppaddr[type];
2765 unop->op_first = first;
2766 unop->op_flags = (U8)(flags | OPf_KIDS);
2767 unop->op_private = (U8)(1 | (flags >> 8));
2768 unop = (UNOP*) CHECKOP(type, unop);
2772 return fold_constants((OP *) unop);
2776 Perl_newBINOP(pTHX_ I32 type, I32 flags, OP *first, OP *last)
2780 NewOp(1101, binop, 1, BINOP);
2783 first = newOP(OP_NULL, 0);
2785 binop->op_type = (OPCODE)type;
2786 binop->op_ppaddr = PL_ppaddr[type];
2787 binop->op_first = first;
2788 binop->op_flags = (U8)(flags | OPf_KIDS);
2791 binop->op_private = (U8)(1 | (flags >> 8));
2794 binop->op_private = (U8)(2 | (flags >> 8));
2795 first->op_sibling = last;
2798 binop = (BINOP*)CHECKOP(type, binop);
2799 if (binop->op_next || binop->op_type != (OPCODE)type)
2802 binop->op_last = binop->op_first->op_sibling;
2804 return fold_constants((OP *)binop);
2807 static int uvcompare(const void *a, const void *b)
2808 __attribute__nonnull__(1)
2809 __attribute__nonnull__(2)
2810 __attribute__pure__;
2811 static int uvcompare(const void *a, const void *b)
2813 if (*((const UV *)a) < (*(const UV *)b))
2815 if (*((const UV *)a) > (*(const UV *)b))
2817 if (*((const UV *)a+1) < (*(const UV *)b+1))
2819 if (*((const UV *)a+1) > (*(const UV *)b+1))
2825 Perl_pmtrans(pTHX_ OP *o, OP *expr, OP *repl)
2828 SV * const tstr = ((SVOP*)expr)->op_sv;
2829 SV * const rstr = ((SVOP*)repl)->op_sv;
2832 const U8 *t = (U8*)SvPV_const(tstr, tlen);
2833 const U8 *r = (U8*)SvPV_const(rstr, rlen);
2837 register short *tbl;
2839 const I32 complement = o->op_private & OPpTRANS_COMPLEMENT;
2840 const I32 squash = o->op_private & OPpTRANS_SQUASH;
2841 I32 del = o->op_private & OPpTRANS_DELETE;
2842 PL_hints |= HINT_BLOCK_SCOPE;
2845 o->op_private |= OPpTRANS_FROM_UTF;
2848 o->op_private |= OPpTRANS_TO_UTF;
2850 if (o->op_private & (OPpTRANS_FROM_UTF|OPpTRANS_TO_UTF)) {
2851 SV* const listsv = newSVpvs("# comment\n");
2853 const U8* tend = t + tlen;
2854 const U8* rend = r + rlen;
2868 const I32 from_utf = o->op_private & OPpTRANS_FROM_UTF;
2869 const I32 to_utf = o->op_private & OPpTRANS_TO_UTF;
2872 const U32 flags = UTF8_ALLOW_DEFAULT;
2876 t = tsave = bytes_to_utf8(t, &len);
2879 if (!to_utf && rlen) {
2881 r = rsave = bytes_to_utf8(r, &len);
2885 /* There are several snags with this code on EBCDIC:
2886 1. 0xFF is a legal UTF-EBCDIC byte (there are no illegal bytes).
2887 2. scan_const() in toke.c has encoded chars in native encoding which makes
2888 ranges at least in EBCDIC 0..255 range the bottom odd.
2892 U8 tmpbuf[UTF8_MAXBYTES+1];
2895 Newx(cp, 2*tlen, UV);
2897 transv = newSVpvs("");
2899 cp[2*i] = utf8n_to_uvuni(t, tend-t, &ulen, flags);
2901 if (t < tend && NATIVE_TO_UTF(*t) == 0xff) {
2903 cp[2*i+1] = utf8n_to_uvuni(t, tend-t, &ulen, flags);
2907 cp[2*i+1] = cp[2*i];
2911 qsort(cp, i, 2*sizeof(UV), uvcompare);
2912 for (j = 0; j < i; j++) {
2914 diff = val - nextmin;
2916 t = uvuni_to_utf8(tmpbuf,nextmin);
2917 sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf);
2919 U8 range_mark = UTF_TO_NATIVE(0xff);
2920 t = uvuni_to_utf8(tmpbuf, val - 1);
2921 sv_catpvn(transv, (char *)&range_mark, 1);
2922 sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf);
2929 t = uvuni_to_utf8(tmpbuf,nextmin);
2930 sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf);
2932 U8 range_mark = UTF_TO_NATIVE(0xff);
2933 sv_catpvn(transv, (char *)&range_mark, 1);
2935 t = uvuni_to_utf8_flags(tmpbuf, 0x7fffffff,
2936 UNICODE_ALLOW_SUPER);
2937 sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf);
2938 t = (const U8*)SvPVX_const(transv);
2939 tlen = SvCUR(transv);
2943 else if (!rlen && !del) {
2944 r = t; rlen = tlen; rend = tend;
2947 if ((!rlen && !del) || t == r ||
2948 (tlen == rlen && memEQ((char *)t, (char *)r, tlen)))
2950 o->op_private |= OPpTRANS_IDENTICAL;
2954 while (t < tend || tfirst <= tlast) {
2955 /* see if we need more "t" chars */
2956 if (tfirst > tlast) {
2957 tfirst = (I32)utf8n_to_uvuni(t, tend - t, &ulen, flags);
2959 if (t < tend && NATIVE_TO_UTF(*t) == 0xff) { /* illegal utf8 val indicates range */
2961 tlast = (I32)utf8n_to_uvuni(t, tend - t, &ulen, flags);
2968 /* now see if we need more "r" chars */
2969 if (rfirst > rlast) {
2971 rfirst = (I32)utf8n_to_uvuni(r, rend - r, &ulen, flags);
2973 if (r < rend && NATIVE_TO_UTF(*r) == 0xff) { /* illegal utf8 val indicates range */
2975 rlast = (I32)utf8n_to_uvuni(r, rend - r, &ulen, flags);
2984 rfirst = rlast = 0xffffffff;
2988 /* now see which range will peter our first, if either. */
2989 tdiff = tlast - tfirst;
2990 rdiff = rlast - rfirst;
2997 if (rfirst == 0xffffffff) {
2998 diff = tdiff; /* oops, pretend rdiff is infinite */
3000 Perl_sv_catpvf(aTHX_ listsv, "%04lx\t%04lx\tXXXX\n",
3001 (long)tfirst, (long)tlast);
3003 Perl_sv_catpvf(aTHX_ listsv, "%04lx\t\tXXXX\n", (long)tfirst);
3007 Perl_sv_catpvf(aTHX_ listsv, "%04lx\t%04lx\t%04lx\n",
3008 (long)tfirst, (long)(tfirst + diff),
3011 Perl_sv_catpvf(aTHX_ listsv, "%04lx\t\t%04lx\n",
3012 (long)tfirst, (long)rfirst);
3014 if (rfirst + diff > max)
3015 max = rfirst + diff;
3017 grows = (tfirst < rfirst &&
3018 UNISKIP(tfirst) < UNISKIP(rfirst + diff));
3030 else if (max > 0xff)
3035 Safefree(cPVOPo->op_pv);
3036 cPVOPo->op_pv = NULL;
3037 cSVOPo->op_sv = (SV*)swash_init("utf8", "", listsv, bits, none);
3038 SvREFCNT_dec(listsv);
3039 SvREFCNT_dec(transv);
3041 if (!del && havefinal && rlen)
3042 (void)hv_store((HV*)SvRV((cSVOPo->op_sv)), "FINAL", 5,
3043 newSVuv((UV)final), 0);
3046 o->op_private |= OPpTRANS_GROWS;
3052 op_getmad(expr,o,'e');
3053 op_getmad(repl,o,'r');
3061 tbl = (short*)cPVOPo->op_pv;
3063 Zero(tbl, 256, short);
3064 for (i = 0; i < (I32)tlen; i++)
3066 for (i = 0, j = 0; i < 256; i++) {
3068 if (j >= (I32)rlen) {
3077 if (i < 128 && r[j] >= 128)
3087 o->op_private |= OPpTRANS_IDENTICAL;
3089 else if (j >= (I32)rlen)
3092 cPVOPo->op_pv = (char*)Renew(tbl, 0x101+rlen-j, short);
3093 tbl[0x100] = (short)(rlen - j);
3094 for (i=0; i < (I32)rlen - j; i++)
3095 tbl[0x101+i] = r[j+i];
3099 if (!rlen && !del) {
3102 o->op_private |= OPpTRANS_IDENTICAL;
3104 else if (!squash && rlen == tlen && memEQ((char*)t, (char*)r, tlen)) {
3105 o->op_private |= OPpTRANS_IDENTICAL;
3107 for (i = 0; i < 256; i++)
3109 for (i = 0, j = 0; i < (I32)tlen; i++,j++) {
3110 if (j >= (I32)rlen) {
3112 if (tbl[t[i]] == -1)
3118 if (tbl[t[i]] == -1) {
3119 if (t[i] < 128 && r[j] >= 128)
3126 o->op_private |= OPpTRANS_GROWS;
3128 op_getmad(expr,o,'e');
3129 op_getmad(repl,o,'r');
3139 Perl_newPMOP(pTHX_ I32 type, I32 flags)
3144 NewOp(1101, pmop, 1, PMOP);
3145 pmop->op_type = (OPCODE)type;
3146 pmop->op_ppaddr = PL_ppaddr[type];
3147 pmop->op_flags = (U8)flags;
3148 pmop->op_private = (U8)(0 | (flags >> 8));
3150 if (PL_hints & HINT_RE_TAINT)
3151 pmop->op_pmpermflags |= PMf_RETAINT;
3152 if (PL_hints & HINT_LOCALE)
3153 pmop->op_pmpermflags |= PMf_LOCALE;
3154 pmop->op_pmflags = pmop->op_pmpermflags;
3157 if (av_len((AV*) PL_regex_pad[0]) > -1) {
3158 SV * const repointer = av_pop((AV*)PL_regex_pad[0]);
3159 pmop->op_pmoffset = SvIV(repointer);
3160 SvREPADTMP_off(repointer);
3161 sv_setiv(repointer,0);
3163 SV * const repointer = newSViv(0);
3164 av_push(PL_regex_padav, SvREFCNT_inc_simple_NN(repointer));
3165 pmop->op_pmoffset = av_len(PL_regex_padav);
3166 PL_regex_pad = AvARRAY(PL_regex_padav);
3170 /* link into pm list */
3171 if (type != OP_TRANS && PL_curstash) {
3172 MAGIC *mg = mg_find((SV*)PL_curstash, PERL_MAGIC_symtab);
3175 mg = sv_magicext((SV*)PL_curstash, 0, PERL_MAGIC_symtab, 0, 0, 0);
3177 pmop->op_pmnext = (PMOP*)mg->mg_obj;
3178 mg->mg_obj = (SV*)pmop;
3179 PmopSTASH_set(pmop,PL_curstash);
3182 return CHECKOP(type, pmop);
3185 /* Given some sort of match op o, and an expression expr containing a
3186 * pattern, either compile expr into a regex and attach it to o (if it's
3187 * constant), or convert expr into a runtime regcomp op sequence (if it's
3190 * isreg indicates that the pattern is part of a regex construct, eg
3191 * $x =~ /pattern/ or split /pattern/, as opposed to $x =~ $pattern or
3192 * split "pattern", which aren't. In the former case, expr will be a list
3193 * if the pattern contains more than one term (eg /a$b/) or if it contains
3194 * a replacement, ie s/// or tr///.
3198 Perl_pmruntime(pTHX_ OP *o, OP *expr, bool isreg)
3203 I32 repl_has_vars = 0;
3207 if (o->op_type == OP_SUBST || o->op_type == OP_TRANS) {
3208 /* last element in list is the replacement; pop it */
3210 repl = cLISTOPx(expr)->op_last;
3211 kid = cLISTOPx(expr)->op_first;
3212 while (kid->op_sibling != repl)
3213 kid = kid->op_sibling;
3214 kid->op_sibling = NULL;
3215 cLISTOPx(expr)->op_last = kid;
3218 if (isreg && expr->op_type == OP_LIST &&
3219 cLISTOPx(expr)->op_first->op_sibling == cLISTOPx(expr)->op_last)
3221 /* convert single element list to element */
3222 OP* const oe = expr;
3223 expr = cLISTOPx(oe)->op_first->op_sibling;
3224 cLISTOPx(oe)->op_first->op_sibling = NULL;
3225 cLISTOPx(oe)->op_last = NULL;
3229 if (o->op_type == OP_TRANS) {
3230 return pmtrans(o, expr, repl);
3233 reglist = isreg && expr->op_type == OP_LIST;
3237 PL_hints |= HINT_BLOCK_SCOPE;
3240 if (expr->op_type == OP_CONST) {
3242 SV * const pat = ((SVOP*)expr)->op_sv;
3243 const char *p = SvPV_const(pat, plen);
3244 if ((o->op_flags & OPf_SPECIAL) && (*p == ' ' && p[1] == '\0')) {
3245 U32 was_readonly = SvREADONLY(pat);
3249 sv_force_normal_flags(pat, 0);
3250 assert(!SvREADONLY(pat));
3253 SvREADONLY_off(pat);
3257 sv_setpvn(pat, "\\s+", 3);
3259 SvFLAGS(pat) |= was_readonly;
3261 p = SvPV_const(pat, plen);
3262 pm->op_pmflags |= PMf_SKIPWHITE;
3265 pm->op_pmdynflags |= PMdf_UTF8;
3266 /* FIXME - can we make this function take const char * args? */
3267 PM_SETRE(pm, CALLREGCOMP((char*)p, (char*)p + plen, pm));
3268 if (strEQ("\\s+", PM_GETRE(pm)->precomp))
3269 pm->op_pmflags |= PMf_WHITE;
3271 op_getmad(expr,(OP*)pm,'e');
3277 if (pm->op_pmflags & PMf_KEEP || !(PL_hints & HINT_RE_EVAL))
3278 expr = newUNOP((!(PL_hints & HINT_RE_EVAL)
3280 : OP_REGCMAYBE),0,expr);
3282 NewOp(1101, rcop, 1, LOGOP);
3283 rcop->op_type = OP_REGCOMP;
3284 rcop->op_ppaddr = PL_ppaddr[OP_REGCOMP];
3285 rcop->op_first = scalar(expr);
3286 rcop->op_flags |= OPf_KIDS
3287 | ((PL_hints & HINT_RE_EVAL) ? OPf_SPECIAL : 0)
3288 | (reglist ? OPf_STACKED : 0);
3289 rcop->op_private = 1;
3292 rcop->op_targ = pad_alloc(rcop->op_type, SVs_PADTMP);
3294 /* /$x/ may cause an eval, since $x might be qr/(?{..})/ */
3297 /* establish postfix order */
3298 if (pm->op_pmflags & PMf_KEEP || !(PL_hints & HINT_RE_EVAL)) {
3300 rcop->op_next = expr;
3301 ((UNOP*)expr)->op_first->op_next = (OP*)rcop;
3304 rcop->op_next = LINKLIST(expr);
3305 expr->op_next = (OP*)rcop;
3308 prepend_elem(o->op_type, scalar((OP*)rcop), o);
3313 if (pm->op_pmflags & PMf_EVAL) {
3315 if (CopLINE(PL_curcop) < (line_t)PL_multi_end)
3316 CopLINE_set(PL_curcop, (line_t)PL_multi_end);
3318 else if (repl->op_type == OP_CONST)
3322 for (curop = LINKLIST(repl); curop!=repl; curop = LINKLIST(curop)) {
3323 if (PL_opargs[curop->op_type] & OA_DANGEROUS) {
3324 if (curop->op_type == OP_GV) {
3325 GV * const gv = cGVOPx_gv(curop);
3327 if (strchr("&`'123456789+-\016\022", *GvENAME(gv)))
3330 else if (curop->op_type == OP_RV2CV)
3332 else if (curop->op_type == OP_RV2SV ||
3333 curop->op_type == OP_RV2AV ||
3334 curop->op_type == OP_RV2HV ||
3335 curop->op_type == OP_RV2GV) {
3336 if (lastop && lastop->op_type != OP_GV) /*funny deref?*/
3339 else if (curop->op_type == OP_PADSV ||
3340 curop->op_type == OP_PADAV ||
3341 curop->op_type == OP_PADHV ||
3342 curop->op_type == OP_PADANY) {
3345 else if (curop->op_type == OP_PUSHRE)
3346 NOOP; /* Okay here, dangerous in newASSIGNOP */
3356 || PM_GETRE(pm)->extflags & RXf_EVAL_SEEN))) {
3357 pm->op_pmflags |= PMf_CONST; /* const for long enough */
3358 pm->op_pmpermflags |= PMf_CONST; /* const for long enough */
3359 prepend_elem(o->op_type, scalar(repl), o);
3362 if (curop == repl && !PM_GETRE(pm)) { /* Has variables. */
3363 pm->op_pmflags |= PMf_MAYBE_CONST;
3364 pm->op_pmpermflags |= PMf_MAYBE_CONST;
3366 NewOp(1101, rcop, 1, LOGOP);
3367 rcop->op_type = OP_SUBSTCONT;
3368 rcop->op_ppaddr = PL_ppaddr[OP_SUBSTCONT];
3369 rcop->op_first = scalar(repl);
3370 rcop->op_flags |= OPf_KIDS;
3371 rcop->op_private = 1;
3374 /* establish postfix order */
3375 rcop->op_next = LINKLIST(repl);
3376 repl->op_next = (OP*)rcop;
3378 pm->op_pmreplroot = scalar((OP*)rcop);
3379 pm->op_pmreplstart = LINKLIST(rcop);
3388 Perl_newSVOP(pTHX_ I32 type, I32 flags, SV *sv)
3392 NewOp(1101, svop, 1, SVOP);
3393 svop->op_type = (OPCODE)type;
3394 svop->op_ppaddr = PL_ppaddr[type];
3396 svop->op_next = (OP*)svop;
3397 svop->op_flags = (U8)flags;
3398 if (PL_opargs[type] & OA_RETSCALAR)
3400 if (PL_opargs[type] & OA_TARGET)
3401 svop->op_targ = pad_alloc(type, SVs_PADTMP);
3402 return CHECKOP(type, svop);
3406 Perl_newPADOP(pTHX_ I32 type, I32 flags, SV *sv)
3410 NewOp(1101, padop, 1, PADOP);
3411 padop->op_type = (OPCODE)type;
3412 padop->op_ppaddr = PL_ppaddr[type];
3413 padop->op_padix = pad_alloc(type, SVs_PADTMP);
3414 SvREFCNT_dec(PAD_SVl(padop->op_padix));
3415 PAD_SETSV(padop->op_padix, sv);
3418 padop->op_next = (OP*)padop;
3419 padop->op_flags = (U8)flags;
3420 if (PL_opargs[type] & OA_RETSCALAR)
3422 if (PL_opargs[type] & OA_TARGET)
3423 padop->op_targ = pad_alloc(type, SVs_PADTMP);
3424 return CHECKOP(type, padop);
3428 Perl_newGVOP(pTHX_ I32 type, I32 flags, GV *gv)
3434 return newPADOP(type, flags, SvREFCNT_inc_simple(gv));
3436 return newSVOP(type, flags, SvREFCNT_inc_simple(gv));
3441 Perl_newPVOP(pTHX_ I32 type, I32 flags, char *pv)
3445 NewOp(1101, pvop, 1, PVOP);
3446 pvop->op_type = (OPCODE)type;
3447 pvop->op_ppaddr = PL_ppaddr[type];
3449 pvop->op_next = (OP*)pvop;
3450 pvop->op_flags = (U8)flags;
3451 if (PL_opargs[type] & OA_RETSCALAR)
3453 if (PL_opargs[type] & OA_TARGET)
3454 pvop->op_targ = pad_alloc(type, SVs_PADTMP);
3455 return CHECKOP(type, pvop);
3463 Perl_package(pTHX_ OP *o)
3472 save_hptr(&PL_curstash);
3473 save_item(PL_curstname);
3475 name = SvPV_const(cSVOPo->op_sv, len);
3476 PL_curstash = gv_stashpvn(name, len, TRUE);
3477 sv_setpvn(PL_curstname, name, len);
3479 PL_hints |= HINT_BLOCK_SCOPE;
3480 PL_copline = NOLINE;
3486 if (!PL_madskills) {
3491 pegop = newOP(OP_NULL,0);
3492 op_getmad(o,pegop,'P');
3502 Perl_utilize(pTHX_ int aver, I32 floor, OP *version, OP *idop, OP *arg)
3509 OP *pegop = newOP(OP_NULL,0);
3512 if (idop->op_type != OP_CONST)
3513 Perl_croak(aTHX_ "Module name must be constant");
3516 op_getmad(idop,pegop,'U');
3521 SV * const vesv = ((SVOP*)version)->op_sv;
3524 op_getmad(version,pegop,'V');
3525 if (!arg && !SvNIOKp(vesv)) {
3532 if (version->op_type != OP_CONST || !SvNIOKp(vesv))
3533 Perl_croak(aTHX_ "Version number must be constant number");
3535 /* Make copy of idop so we don't free it twice */
3536 pack = newSVOP(OP_CONST, 0, newSVsv(((SVOP*)idop)->op_sv));
3538 /* Fake up a method call to VERSION */
3539 meth = newSVpvs_share("VERSION");
3540 veop = convert(OP_ENTERSUB, OPf_STACKED|OPf_SPECIAL,
3541 append_elem(OP_LIST,
3542 prepend_elem(OP_LIST, pack, list(version)),
3543 newSVOP(OP_METHOD_NAMED, 0, meth)));
3547 /* Fake up an import/unimport */
3548 if (arg && arg->op_type == OP_STUB) {
3550 op_getmad(arg,pegop,'S');
3551 imop = arg; /* no import on explicit () */
3553 else if (SvNIOKp(((SVOP*)idop)->op_sv)) {
3554 imop = NULL; /* use 5.0; */
3556 idop->op_private |= OPpCONST_NOVER;
3562 op_getmad(arg,pegop,'A');
3564 /* Make copy of idop so we don't free it twice */
3565 pack = newSVOP(OP_CONST, 0, newSVsv(((SVOP*)idop)->op_sv));
3567 /* Fake up a method call to import/unimport */
3569 ? newSVpvs_share("import") : newSVpvs_share("unimport");
3570 imop = convert(OP_ENTERSUB, OPf_STACKED|OPf_SPECIAL,
3571 append_elem(OP_LIST,
3572 prepend_elem(OP_LIST, pack, list(arg)),
3573 newSVOP(OP_METHOD_NAMED, 0, meth)));
3576 /* Fake up the BEGIN {}, which does its thing immediately. */
3578 newSVOP(OP_CONST, 0, newSVpvs_share("BEGIN")),
3581 append_elem(OP_LINESEQ,
3582 append_elem(OP_LINESEQ,
3583 newSTATEOP(0, NULL, newUNOP(OP_REQUIRE, 0, idop)),
3584 newSTATEOP(0, NULL, veop)),
3585 newSTATEOP(0, NULL, imop) ));
3587 /* The "did you use incorrect case?" warning used to be here.
3588 * The problem is that on case-insensitive filesystems one
3589 * might get false positives for "use" (and "require"):
3590 * "use Strict" or "require CARP" will work. This causes
3591 * portability problems for the script: in case-strict
3592 * filesystems the script will stop working.
3594 * The "incorrect case" warning checked whether "use Foo"
3595 * imported "Foo" to your namespace, but that is wrong, too:
3596 * there is no requirement nor promise in the language that
3597 * a Foo.pm should or would contain anything in package "Foo".
3599 * There is very little Configure-wise that can be done, either:
3600 * the case-sensitivity of the build filesystem of Perl does not
3601 * help in guessing the case-sensitivity of the runtime environment.
3604 PL_hints |= HINT_BLOCK_SCOPE;
3605 PL_copline = NOLINE;
3607 PL_cop_seqmax++; /* Purely for B::*'s benefit */
3610 if (!PL_madskills) {
3611 /* FIXME - don't allocate pegop if !PL_madskills */
3620 =head1 Embedding Functions
3622 =for apidoc load_module
3624 Loads the module whose name is pointed to by the string part of name.
3625 Note that the actual module name, not its filename, should be given.
3626 Eg, "Foo::Bar" instead of "Foo/Bar.pm". flags can be any of
3627 PERL_LOADMOD_DENY, PERL_LOADMOD_NOIMPORT, or PERL_LOADMOD_IMPORT_OPS
3628 (or 0 for no flags). ver, if specified, provides version semantics
3629 similar to C<use Foo::Bar VERSION>. The optional trailing SV*
3630 arguments can be used to specify arguments to the module's import()
3631 method, similar to C<use Foo::Bar VERSION LIST>.
3636 Perl_load_module(pTHX_ U32 flags, SV *name, SV *ver, ...)
3639 va_start(args, ver);
3640 vload_module(flags, name, ver, &args);
3644 #ifdef PERL_IMPLICIT_CONTEXT
3646 Perl_load_module_nocontext(U32 flags, SV *name, SV *ver, ...)
3650 va_start(args, ver);
3651 vload_module(flags, name, ver, &args);
3657 Perl_vload_module(pTHX_ U32 flags, SV *name, SV *ver, va_list *args)
3662 OP * const modname = newSVOP(OP_CONST, 0, name);
3663 modname->op_private |= OPpCONST_BARE;
3665 veop = newSVOP(OP_CONST, 0, ver);
3669 if (flags & PERL_LOADMOD_NOIMPORT) {
3670 imop = sawparens(newNULLLIST());
3672 else if (flags & PERL_LOADMOD_IMPORT_OPS) {
3673 imop = va_arg(*args, OP*);
3678 sv = va_arg(*args, SV*);
3680 imop = append_elem(OP_LIST, imop, newSVOP(OP_CONST, 0, sv));
3681 sv = va_arg(*args, SV*);
3685 const line_t ocopline = PL_copline;
3686 COP * const ocurcop = PL_curcop;
3687 const int oexpect = PL_expect;
3689 utilize(!(flags & PERL_LOADMOD_DENY), start_subparse(FALSE, 0),
3690 veop, modname, imop);
3691 PL_expect = oexpect;
3692 PL_copline = ocopline;
3693 PL_curcop = ocurcop;
3698 Perl_dofile(pTHX_ OP *term, I32 force_builtin)
3704 if (!force_builtin) {
3705 gv = gv_fetchpvs("do", GV_NOTQUAL, SVt_PVCV);
3706 if (!(gv && GvCVu(gv) && GvIMPORTED_CV(gv))) {
3707 GV * const * const gvp = (GV**)hv_fetchs(PL_globalstash, "do", FALSE);
3708 gv = gvp ? *gvp : NULL;
3712 if (gv && GvCVu(gv) && GvIMPORTED_CV(gv)) {
3713 doop = ck_subr(newUNOP(OP_ENTERSUB, OPf_STACKED,
3714 append_elem(OP_LIST, term,
3715 scalar(newUNOP(OP_RV2CV, 0,
3716 newGVOP(OP_GV, 0, gv))))));
3719 doop = newUNOP(OP_DOFILE, 0, scalar(term));
3725 Perl_newSLICEOP(pTHX_ I32 flags, OP *subscript, OP *listval)
3727 return newBINOP(OP_LSLICE, flags,
3728 list(force_list(subscript)),
3729 list(force_list(listval)) );
3733 S_is_list_assignment(pTHX_ register const OP *o)
3741 if ((o->op_type == OP_NULL) && (o->op_flags & OPf_KIDS))
3742 o = cUNOPo->op_first;
3744 flags = o->op_flags;
3746 if (type == OP_COND_EXPR) {
3747 const I32 t = is_list_assignment(cLOGOPo->op_first->op_sibling);
3748 const I32 f = is_list_assignment(cLOGOPo->op_first->op_sibling->op_sibling);
3753 yyerror("Assignment to both a list and a scalar");
3757 if (type == OP_LIST &&
3758 (flags & OPf_WANT) == OPf_WANT_SCALAR &&
3759 o->op_private & OPpLVAL_INTRO)
3762 if (type == OP_LIST || flags & OPf_PARENS ||
3763 type == OP_RV2AV || type == OP_RV2HV ||
3764 type == OP_ASLICE || type == OP_HSLICE)
3767 if (type == OP_PADAV || type == OP_PADHV)
3770 if (type == OP_RV2SV)
3777 Perl_newASSIGNOP(pTHX_ I32 flags, OP *left, I32 optype, OP *right)
3783 if (optype == OP_ANDASSIGN || optype == OP_ORASSIGN || optype == OP_DORASSIGN) {
3784 return newLOGOP(optype, 0,
3785 mod(scalar(left), optype),
3786 newUNOP(OP_SASSIGN, 0, scalar(right)));
3789 return newBINOP(optype, OPf_STACKED,
3790 mod(scalar(left), optype), scalar(right));
3794 if (is_list_assignment(left)) {
3798 /* Grandfathering $[ assignment here. Bletch.*/
3799 /* Only simple assignments like C<< ($[) = 1 >> are allowed */
3800 PL_eval_start = (left->op_type == OP_CONST) ? right : 0;
3801 left = mod(left, OP_AASSIGN);
3804 else if (left->op_type == OP_CONST) {
3806 /* Result of assignment is always 1 (or we'd be dead already) */
3807 return newSVOP(OP_CONST, 0, newSViv(1));
3809 curop = list(force_list(left));
3810 o = newBINOP(OP_AASSIGN, flags, list(force_list(right)), curop);
3811 o->op_private = (U8)(0 | (flags >> 8));
3813 /* PL_generation sorcery:
3814 * an assignment like ($a,$b) = ($c,$d) is easier than
3815 * ($a,$b) = ($c,$a), since there is no need for temporary vars.
3816 * To detect whether there are common vars, the global var
3817 * PL_generation is incremented for each assign op we compile.
3818 * Then, while compiling the assign op, we run through all the
3819 * variables on both sides of the assignment, setting a spare slot
3820 * in each of them to PL_generation. If any of them already have
3821 * that value, we know we've got commonality. We could use a
3822 * single bit marker, but then we'd have to make 2 passes, first
3823 * to clear the flag, then to test and set it. To find somewhere
3824 * to store these values, evil chicanery is done with SvCUR().
3830 for (curop = LINKLIST(o); curop != o; curop = LINKLIST(curop)) {
3831 if (PL_opargs[curop->op_type] & OA_DANGEROUS) {
3832 if (curop->op_type == OP_GV) {
3833 GV *gv = cGVOPx_gv(curop);
3835 || (int)GvASSIGN_GENERATION(gv) == PL_generation)
3837 GvASSIGN_GENERATION_set(gv, PL_generation);
3839 else if (curop->op_type == OP_PADSV ||
3840 curop->op_type == OP_PADAV ||
3841 curop->op_type == OP_PADHV ||
3842 curop->op_type == OP_PADANY)
3844 if (PAD_COMPNAME_GEN(curop->op_targ)
3845 == (STRLEN)PL_generation)
3847 PAD_COMPNAME_GEN_set(curop->op_targ, PL_generation);
3850 else if (curop->op_type == OP_RV2CV)
3852 else if (curop->op_type == OP_RV2SV ||
3853 curop->op_type == OP_RV2AV ||
3854 curop->op_type == OP_RV2HV ||
3855 curop->op_type == OP_RV2GV) {
3856 if (lastop->op_type != OP_GV) /* funny deref? */
3859 else if (curop->op_type == OP_PUSHRE) {
3860 if (((PMOP*)curop)->op_pmreplroot) {
3862 GV *gv = (GV*)PAD_SVl(INT2PTR(PADOFFSET,
3863 ((PMOP*)curop)->op_pmreplroot));
3865 GV *gv = (GV*)((PMOP*)curop)->op_pmreplroot;
3868 || (int)GvASSIGN_GENERATION(gv) == PL_generation)
3870 GvASSIGN_GENERATION_set(gv, PL_generation);
3871 GvASSIGN_GENERATION_set(gv, PL_generation);
3880 o->op_private |= OPpASSIGN_COMMON;
3883 if ( ((left->op_private & OPpLVAL_INTRO) || ckWARN(WARN_MISC))
3884 && (left->op_type == OP_LIST
3885 || (left->op_type == OP_NULL && left->op_targ == OP_LIST)))
3887 OP* lop = ((LISTOP*)left)->op_first;
3889 if (lop->op_type == OP_PADSV ||
3890 lop->op_type == OP_PADAV ||
3891 lop->op_type == OP_PADHV ||
3892 lop->op_type == OP_PADANY)
3894 if (lop->op_private & OPpPAD_STATE) {
3895 if (left->op_private & OPpLVAL_INTRO) {
3896 o->op_private |= OPpASSIGN_STATE;
3897 /* hijacking PADSTALE for uninitialized state variables */
3898 SvPADSTALE_on(PAD_SVl(lop->op_targ));
3900 else { /* we already checked for WARN_MISC before */
3901 Perl_warner(aTHX_ packWARN(WARN_MISC), "State variable %s will be reinitialized",
3902 PAD_COMPNAME_PV(lop->op_targ));
3906 lop = lop->op_sibling;
3910 if (right && right->op_type == OP_SPLIT) {
3911 OP* tmpop = ((LISTOP*)right)->op_first;
3912 if (tmpop && (tmpop->op_type == OP_PUSHRE)) {
3913 PMOP * const pm = (PMOP*)tmpop;
3914 if (left->op_type == OP_RV2AV &&
3915 !(left->op_private & OPpLVAL_INTRO) &&
3916 !(o->op_private & OPpASSIGN_COMMON) )
3918 tmpop = ((UNOP*)left)->op_first;
3919 if (tmpop->op_type == OP_GV && !pm->op_pmreplroot) {
3921 pm->op_pmreplroot = INT2PTR(OP*, cPADOPx(tmpop)->op_padix);
3922 cPADOPx(tmpop)->op_padix = 0; /* steal it */
3924 pm->op_pmreplroot = (OP*)cSVOPx(tmpop)->op_sv;
3925 cSVOPx(tmpop)->op_sv = NULL; /* steal it */
3927 pm->op_pmflags |= PMf_ONCE;
3928 tmpop = cUNOPo->op_first; /* to list (nulled) */
3929 tmpop = ((UNOP*)tmpop)->op_first; /* to pushmark */
3930 tmpop->op_sibling = NULL; /* don't free split */
3931 right->op_next = tmpop->op_next; /* fix starting loc */
3933 op_getmad(o,right,'R'); /* blow off assign */
3935 op_free(o); /* blow off assign */
3937 right->op_flags &= ~OPf_WANT;
3938 /* "I don't know and I don't care." */
3943 if (PL_modcount < RETURN_UNLIMITED_NUMBER &&
3944 ((LISTOP*)right)->op_last->op_type == OP_CONST)
3946 SV *sv = ((SVOP*)((LISTOP*)right)->op_last)->op_sv;
3948 sv_setiv(sv, PL_modcount+1);
3956 right = newOP(OP_UNDEF, 0);
3957 if (right->op_type == OP_READLINE) {
3958 right->op_flags |= OPf_STACKED;
3959 return newBINOP(OP_NULL, flags, mod(scalar(left), OP_SASSIGN), scalar(right));
3962 PL_eval_start = right; /* Grandfathering $[ assignment here. Bletch.*/
3963 o = newBINOP(OP_SASSIGN, flags,
3964 scalar(right), mod(scalar(left), OP_SASSIGN) );
3970 o = newSVOP(OP_CONST, 0, newSViv(CopARYBASE_get(&PL_compiling)));
3971 o->op_private |= OPpCONST_ARYBASE;
3978 Perl_newSTATEOP(pTHX_ I32 flags, char *label, OP *o)
3981 const U32 seq = intro_my();
3984 NewOp(1101, cop, 1, COP);
3985 if (PERLDB_LINE && CopLINE(PL_curcop) && PL_curstash != PL_debstash) {
3986 cop->op_type = OP_DBSTATE;
3987 cop->op_ppaddr = PL_ppaddr[ OP_DBSTATE ];
3990 cop->op_type = OP_NEXTSTATE;
3991 cop->op_ppaddr = PL_ppaddr[ OP_NEXTSTATE ];
3993 cop->op_flags = (U8)flags;
3994 CopHINTS_set(cop, PL_hints);
3996 cop->op_private |= NATIVE_HINTS;
3998 CopHINTS_set(&PL_compiling, CopHINTS_get(cop));
3999 cop->op_next = (OP*)cop;
4002 cop->cop_label = label;
4003 PL_hints |= HINT_BLOCK_SCOPE;
4006 /* CopARYBASE is now "virtual", in that it's stored as a flag bit in
4007 CopHINTS and a possible value in cop_hints_hash, so no need to copy it.
4009 cop->cop_warnings = DUP_WARNINGS(PL_curcop->cop_warnings);
4010 cop->cop_hints_hash = PL_curcop->cop_hints_hash;
4011 if (cop->cop_hints_hash) {
4013 cop->cop_hints_hash->refcounted_he_refcnt++;
4014 HINTS_REFCNT_UNLOCK;
4017 if (PL_copline == NOLINE)
4018 CopLINE_set(cop, CopLINE(PL_curcop));
4020 CopLINE_set(cop, PL_copline);
4021 PL_copline = NOLINE;
4024 CopFILE_set(cop, CopFILE(PL_curcop)); /* XXX share in a pvtable? */
4026 CopFILEGV_set(cop, CopFILEGV(PL_curcop));
4028 CopSTASH_set(cop, PL_curstash);
4030 if (PERLDB_LINE && PL_curstash != PL_debstash) {
4031 AV *av = CopFILEAVx(PL_curcop);
4033 SV * const * const svp = av_fetch(av, (I32)CopLINE(cop), FALSE);
4034 if (svp && *svp != &PL_sv_undef ) {
4035 (void)SvIOK_on(*svp);
4036 SvIV_set(*svp, PTR2IV(cop));
4041 return prepend_elem(OP_LINESEQ, (OP*)cop, o);
4046 Perl_newLOGOP(pTHX_ I32 type, I32 flags, OP *first, OP *other)
4049 return new_logop(type, flags, &first, &other);
4053 S_new_logop(pTHX_ I32 type, I32 flags, OP** firstp, OP** otherp)
4058 OP *first = *firstp;
4059 OP * const other = *otherp;
4061 if (type == OP_XOR) /* Not short circuit, but here by precedence. */
4062 return newBINOP(type, flags, scalar(first), scalar(other));
4064 scalarboolean(first);
4065 /* optimize "!a && b" to "a || b", and "!a || b" to "a && b" */
4066 if (first->op_type == OP_NOT
4067 && (first->op_flags & OPf_SPECIAL)
4068 && (first->op_flags & OPf_KIDS)) {
4069 if (type == OP_AND || type == OP_OR) {
4075 first = *firstp = cUNOPo->op_first;
4077 first->op_next = o->op_next;
4078 cUNOPo->op_first = NULL;
4080 op_getmad(o,first,'O');
4086 if (first->op_type == OP_CONST) {
4087 if (first->op_private & OPpCONST_STRICT)
4088 no_bareword_allowed(first);
4089 else if ((first->op_private & OPpCONST_BARE) && ckWARN(WARN_BAREWORD))
4090 Perl_warner(aTHX_ packWARN(WARN_BAREWORD), "Bareword found in conditional");
4091 if ((type == OP_AND && SvTRUE(((SVOP*)first)->op_sv)) ||
4092 (type == OP_OR && !SvTRUE(((SVOP*)first)->op_sv)) ||
4093 (type == OP_DOR && !SvOK(((SVOP*)first)->op_sv))) {
4095 if (other->op_type == OP_CONST)
4096 other->op_private |= OPpCONST_SHORTCIRCUIT;
4098 OP *newop = newUNOP(OP_NULL, 0, other);
4099 op_getmad(first, newop, '1');
4100 newop->op_targ = type; /* set "was" field */
4107 /* check for C<my $x if 0>, or C<my($x,$y) if 0> */
4108 const OP *o2 = other;
4109 if ( ! (o2->op_type == OP_LIST
4110 && (( o2 = cUNOPx(o2)->op_first))
4111 && o2->op_type == OP_PUSHMARK
4112 && (( o2 = o2->op_sibling)) )
4115 if ((o2->op_type == OP_PADSV || o2->op_type == OP_PADAV
4116 || o2->op_type == OP_PADHV)
4117 && o2->op_private & OPpLVAL_INTRO
4118 && ckWARN(WARN_DEPRECATED))
4120 Perl_warner(aTHX_ packWARN(WARN_DEPRECATED),
4121 "Deprecated use of my() in false conditional");
4125 if (first->op_type == OP_CONST)
4126 first->op_private |= OPpCONST_SHORTCIRCUIT;
4128 first = newUNOP(OP_NULL, 0, first);
4129 op_getmad(other, first, '2');
4130 first->op_targ = type; /* set "was" field */
4137 else if ((first->op_flags & OPf_KIDS) && type != OP_DOR
4138 && ckWARN(WARN_MISC)) /* [#24076] Don't warn for <FH> err FOO. */
4140 const OP * const k1 = ((UNOP*)first)->op_first;
4141 const OP * const k2 = k1->op_sibling;
4143 switch (first->op_type)
4146 if (k2 && k2->op_type == OP_READLINE
4147 && (k2->op_flags & OPf_STACKED)
4148 && ((k1->op_flags & OPf_WANT) == OPf_WANT_SCALAR))
4150 warnop = k2->op_type;
4155 if (k1->op_type == OP_READDIR
4156 || k1->op_type == OP_GLOB
4157 || (k1->op_type == OP_NULL && k1->op_targ == OP_GLOB)
4158 || k1->op_type == OP_EACH)
4160 warnop = ((k1->op_type == OP_NULL)
4161 ? (OPCODE)k1->op_targ : k1->op_type);
4166 const line_t oldline = CopLINE(PL_curcop);
4167 CopLINE_set(PL_curcop, PL_copline);
4168 Perl_warner(aTHX_ packWARN(WARN_MISC),
4169 "Value of %s%s can be \"0\"; test with defined()",
4171 ((warnop == OP_READLINE || warnop == OP_GLOB)
4172 ? " construct" : "() operator"));
4173 CopLINE_set(PL_curcop, oldline);
4180 if (type == OP_ANDASSIGN || type == OP_ORASSIGN || type == OP_DORASSIGN)
4181 other->op_private |= OPpASSIGN_BACKWARDS; /* other is an OP_SASSIGN */
4183 NewOp(1101, logop, 1, LOGOP);
4185 logop->op_type = (OPCODE)type;
4186 logop->op_ppaddr = PL_ppaddr[type];
4187 logop->op_first = first;
4188 logop->op_flags = (U8)(flags | OPf_KIDS);
4189 logop->op_other = LINKLIST(other);
4190 logop->op_private = (U8)(1 | (flags >> 8));
4192 /* establish postfix order */
4193 logop->op_next = LINKLIST(first);
4194 first->op_next = (OP*)logop;
4195 first->op_sibling = other;
4197 CHECKOP(type,logop);
4199 o = newUNOP(OP_NULL, 0, (OP*)logop);
4206 Perl_newCONDOP(pTHX_ I32 flags, OP *first, OP *trueop, OP *falseop)
4214 return newLOGOP(OP_AND, 0, first, trueop);
4216 return newLOGOP(OP_OR, 0, first, falseop);
4218 scalarboolean(first);
4219 if (first->op_type == OP_CONST) {
4220 if (first->op_private & OPpCONST_BARE &&
4221 first->op_private & OPpCONST_STRICT) {
4222 no_bareword_allowed(first);
4224 if (SvTRUE(((SVOP*)first)->op_sv)) {
4227 trueop = newUNOP(OP_NULL, 0, trueop);
4228 op_getmad(first,trueop,'C');
4229 op_getmad(falseop,trueop,'e');
4231 /* FIXME for MAD - should there be an ELSE here? */
4241 falseop = newUNOP(OP_NULL, 0, falseop);
4242 op_getmad(first,falseop,'C');
4243 op_getmad(trueop,falseop,'t');
4245 /* FIXME for MAD - should there be an ELSE here? */
4253 NewOp(1101, logop, 1, LOGOP);
4254 logop->op_type = OP_COND_EXPR;
4255 logop->op_ppaddr = PL_ppaddr[OP_COND_EXPR];
4256 logop->op_first = first;
4257 logop->op_flags = (U8)(flags | OPf_KIDS);
4258 logop->op_private = (U8)(1 | (flags >> 8));
4259 logop->op_other = LINKLIST(trueop);
4260 logop->op_next = LINKLIST(falseop);
4262 CHECKOP(OP_COND_EXPR, /* that's logop->op_type */
4265 /* establish postfix order */
4266 start = LINKLIST(first);
4267 first->op_next = (OP*)logop;
4269 first->op_sibling = trueop;
4270 trueop->op_sibling = falseop;
4271 o = newUNOP(OP_NULL, 0, (OP*)logop);
4273 trueop->op_next = falseop->op_next = o;
4280 Perl_newRANGE(pTHX_ I32 flags, OP *left, OP *right)
4289 NewOp(1101, range, 1, LOGOP);
4291 range->op_type = OP_RANGE;
4292 range->op_ppaddr = PL_ppaddr[OP_RANGE];
4293 range->op_first = left;
4294 range->op_flags = OPf_KIDS;
4295 leftstart = LINKLIST(left);
4296 range->op_other = LINKLIST(right);
4297 range->op_private = (U8)(1 | (flags >> 8));
4299 left->op_sibling = right;
4301 range->op_next = (OP*)range;
4302 flip = newUNOP(OP_FLIP, flags, (OP*)range);
4303 flop = newUNOP(OP_FLOP, 0, flip);
4304 o = newUNOP(OP_NULL, 0, flop);
4306 range->op_next = leftstart;
4308 left->op_next = flip;
4309 right->op_next = flop;
4311 range->op_targ = pad_alloc(OP_RANGE, SVs_PADMY);
4312 sv_upgrade(PAD_SV(range->op_targ), SVt_PVNV);
4313 flip->op_targ = pad_alloc(OP_RANGE, SVs_PADMY);
4314 sv_upgrade(PAD_SV(flip->op_targ), SVt_PVNV);
4316 flip->op_private = left->op_type == OP_CONST ? OPpFLIP_LINENUM : 0;
4317 flop->op_private = right->op_type == OP_CONST ? OPpFLIP_LINENUM : 0;
4320 if (!flip->op_private || !flop->op_private)
4321 linklist(o); /* blow off optimizer unless constant */
4327 Perl_newLOOPOP(pTHX_ I32 flags, I32 debuggable, OP *expr, OP *block)
4332 const bool once = block && block->op_flags & OPf_SPECIAL &&
4333 (block->op_type == OP_ENTERSUB || block->op_type == OP_NULL);
4335 PERL_UNUSED_ARG(debuggable);
4338 if (once && expr->op_type == OP_CONST && !SvTRUE(((SVOP*)expr)->op_sv))
4339 return block; /* do {} while 0 does once */
4340 if (expr->op_type == OP_READLINE || expr->op_type == OP_GLOB
4341 || (expr->op_type == OP_NULL && expr->op_targ == OP_GLOB)) {
4342 expr = newUNOP(OP_DEFINED, 0,
4343 newASSIGNOP(0, newDEFSVOP(), 0, expr) );
4344 } else if (expr->op_flags & OPf_KIDS) {
4345 const OP * const k1 = ((UNOP*)expr)->op_first;
4346 const OP * const k2 = k1 ? k1->op_sibling : NULL;
4347 switch (expr->op_type) {
4349 if (k2 && k2->op_type == OP_READLINE
4350 && (k2->op_flags & OPf_STACKED)
4351 && ((k1->op_flags & OPf_WANT) == OPf_WANT_SCALAR))
4352 expr = newUNOP(OP_DEFINED, 0, expr);
4356 if (k1 && (k1->op_type == OP_READDIR
4357 || k1->op_type == OP_GLOB
4358 || (k1->op_type == OP_NULL && k1->op_targ == OP_GLOB)
4359 || k1->op_type == OP_EACH))
4360 expr = newUNOP(OP_DEFINED, 0, expr);
4366 /* if block is null, the next append_elem() would put UNSTACK, a scalar
4367 * op, in listop. This is wrong. [perl #27024] */
4369 block = newOP(OP_NULL, 0);
4370 listop = append_elem(OP_LINESEQ, block, newOP(OP_UNSTACK, 0));
4371 o = new_logop(OP_AND, 0, &expr, &listop);
4374 ((LISTOP*)listop)->op_last->op_next = LINKLIST(o);
4376 if (once && o != listop)
4377 o->op_next = ((LOGOP*)cUNOPo->op_first)->op_other;
4380 o = newUNOP(OP_NULL, 0, o); /* or do {} while 1 loses outer block */
4382 o->op_flags |= flags;
4384 o->op_flags |= OPf_SPECIAL; /* suppress POPBLOCK curpm restoration*/
4389 Perl_newWHILEOP(pTHX_ I32 flags, I32 debuggable, LOOP *loop, I32
4390 whileline, OP *expr, OP *block, OP *cont, I32 has_my)
4399 PERL_UNUSED_ARG(debuggable);
4402 if (expr->op_type == OP_READLINE || expr->op_type == OP_GLOB
4403 || (expr->op_type == OP_NULL && expr->op_targ == OP_GLOB)) {
4404 expr = newUNOP(OP_DEFINED, 0,
4405 newASSIGNOP(0, newDEFSVOP(), 0, expr) );
4406 } else if (expr->op_flags & OPf_KIDS) {
4407 const OP * const k1 = ((UNOP*)expr)->op_first;
4408 const OP * const k2 = (k1) ? k1->op_sibling : NULL;
4409 switch (expr->op_type) {
4411 if (k2 && k2->op_type == OP_READLINE
4412 && (k2->op_flags & OPf_STACKED)
4413 && ((k1->op_flags & OPf_WANT) == OPf_WANT_SCALAR))
4414 expr = newUNOP(OP_DEFINED, 0, expr);
4418 if (k1 && (k1->op_type == OP_READDIR
4419 || k1->op_type == OP_GLOB
4420 || (k1->op_type == OP_NULL && k1->op_targ == OP_GLOB)
4421 || k1->op_type == OP_EACH))
4422 expr = newUNOP(OP_DEFINED, 0, expr);
4429 block = newOP(OP_NULL, 0);
4430 else if (cont || has_my) {
4431 block = scope(block);
4435 next = LINKLIST(cont);
4438 OP * const unstack = newOP(OP_UNSTACK, 0);
4441 cont = append_elem(OP_LINESEQ, cont, unstack);
4445 listop = append_list(OP_LINESEQ, (LISTOP*)block, (LISTOP*)cont);
4447 redo = LINKLIST(listop);
4450 PL_copline = (line_t)whileline;
4452 o = new_logop(OP_AND, 0, &expr, &listop);
4453 if (o == expr && o->op_type == OP_CONST && !SvTRUE(cSVOPo->op_sv)) {
4454 op_free(expr); /* oops, it's a while (0) */
4456 return NULL; /* listop already freed by new_logop */
4459 ((LISTOP*)listop)->op_last->op_next =
4460 (o == listop ? redo : LINKLIST(o));
4466 NewOp(1101,loop,1,LOOP);
4467 loop->op_type = OP_ENTERLOOP;
4468 loop->op_ppaddr = PL_ppaddr[OP_ENTERLOOP];
4469 loop->op_private = 0;
4470 loop->op_next = (OP*)loop;
4473 o = newBINOP(OP_LEAVELOOP, 0, (OP*)loop, o);
4475 loop->op_redoop = redo;
4476 loop->op_lastop = o;
4477 o->op_private |= loopflags;
4480 loop->op_nextop = next;
4482 loop->op_nextop = o;
4484 o->op_flags |= flags;
4485 o->op_private |= (flags >> 8);
4490 Perl_newFOROP(pTHX_ I32 flags, char *label, line_t forline, OP *sv, OP *expr, OP *block, OP *cont)
4495 PADOFFSET padoff = 0;
4501 if (sv->op_type == OP_RV2SV) { /* symbol table variable */
4502 iterpflags = sv->op_private & OPpOUR_INTRO; /* for our $x () */
4503 sv->op_type = OP_RV2GV;
4504 sv->op_ppaddr = PL_ppaddr[OP_RV2GV];
4505 if (cGVOPx_gv(cUNOPx(sv)->op_first) == PL_defgv)
4506 iterpflags |= OPpITER_DEF;
4508 else if (sv->op_type == OP_PADSV) { /* private variable */
4509 iterpflags = sv->op_private & OPpLVAL_INTRO; /* for my $x () */
4510 padoff = sv->op_targ;
4519 else if (sv->op_type == OP_THREADSV) { /* per-thread variable */
4520 padoff = sv->op_targ;
4525 iterflags |= OPf_SPECIAL;
4531 Perl_croak(aTHX_ "Can't use %s for loop variable", PL_op_desc[sv->op_type]);
4532 if (padoff && strEQ(PAD_COMPNAME_PV(padoff), "$_"))
4533 iterpflags |= OPpITER_DEF;
4536 const PADOFFSET offset = pad_findmy("$_");
4537 if (offset == NOT_IN_PAD || PAD_COMPNAME_FLAGS_isOUR(offset)) {
4538 sv = newGVOP(OP_GV, 0, PL_defgv);
4543 iterpflags |= OPpITER_DEF;
4545 if (expr->op_type == OP_RV2AV || expr->op_type == OP_PADAV) {
4546 expr = mod(force_list(scalar(ref(expr, OP_ITER))), OP_GREPSTART);
4547 iterflags |= OPf_STACKED;
4549 else if (expr->op_type == OP_NULL &&
4550 (expr->op_flags & OPf_KIDS) &&
4551 ((BINOP*)expr)->op_first->op_type == OP_FLOP)
4553 /* Basically turn for($x..$y) into the same as for($x,$y), but we
4554 * set the STACKED flag to indicate that these values are to be
4555 * treated as min/max values by 'pp_iterinit'.
4557 const UNOP* const flip = (UNOP*)((UNOP*)((BINOP*)expr)->op_first)->op_first;
4558 LOGOP* const range = (LOGOP*) flip->op_first;
4559 OP* const left = range->op_first;
4560 OP* const right = left->op_sibling;
4563 range->op_flags &= ~OPf_KIDS;
4564 range->op_first = NULL;
4566 listop = (LISTOP*)newLISTOP(OP_LIST, 0, left, right);
4567 listop->op_first->op_next = range->op_next;
4568 left->op_next = range->op_other;
4569 right->op_next = (OP*)listop;
4570 listop->op_next = listop->op_first;
4573 op_getmad(expr,(OP*)listop,'O');
4577 expr = (OP*)(listop);
4579 iterflags |= OPf_STACKED;
4582 expr = mod(force_list(expr), OP_GREPSTART);
4585 loop = (LOOP*)list(convert(OP_ENTERITER, iterflags,
4586 append_elem(OP_LIST, expr, scalar(sv))));
4587 assert(!loop->op_next);
4588 /* for my $x () sets OPpLVAL_INTRO;
4589 * for our $x () sets OPpOUR_INTRO */
4590 loop->op_private = (U8)iterpflags;
4591 #ifdef PL_OP_SLAB_ALLOC
4594 NewOp(1234,tmp,1,LOOP);
4595 Copy(loop,tmp,1,LISTOP);
4596 S_op_destroy(aTHX_ loop);
4600 loop = (LOOP*)PerlMemShared_realloc(loop, sizeof(LOOP));
4602 loop->op_targ = padoff;
4603 wop = newWHILEOP(flags, 1, loop, forline, newOP(OP_ITER, 0), block, cont, 0);
4605 op_getmad(madsv, (OP*)loop, 'v');
4606 PL_copline = forline;
4607 return newSTATEOP(0, label, wop);
4611 Perl_newLOOPEX(pTHX_ I32 type, OP *label)
4616 if (type != OP_GOTO || label->op_type == OP_CONST) {
4617 /* "last()" means "last" */
4618 if (label->op_type == OP_STUB && (label->op_flags & OPf_PARENS))
4619 o = newOP(type, OPf_SPECIAL);
4621 o = newPVOP(type, 0, savepv(label->op_type == OP_CONST
4622 ? SvPVx_nolen_const(((SVOP*)label)->op_sv)
4626 op_getmad(label,o,'L');
4632 /* Check whether it's going to be a goto &function */
4633 if (label->op_type == OP_ENTERSUB
4634 && !(label->op_flags & OPf_STACKED))
4635 label = newUNOP(OP_REFGEN, 0, mod(label, OP_REFGEN));
4636 o = newUNOP(type, OPf_STACKED, label);
4638 PL_hints |= HINT_BLOCK_SCOPE;
4642 /* if the condition is a literal array or hash
4643 (or @{ ... } etc), make a reference to it.
4646 S_ref_array_or_hash(pTHX_ OP *cond)
4649 && (cond->op_type == OP_RV2AV
4650 || cond->op_type == OP_PADAV
4651 || cond->op_type == OP_RV2HV
4652 || cond->op_type == OP_PADHV))
4654 return newUNOP(OP_REFGEN,
4655 0, mod(cond, OP_REFGEN));
4661 /* These construct the optree fragments representing given()
4664 entergiven and enterwhen are LOGOPs; the op_other pointer
4665 points up to the associated leave op. We need this so we
4666 can put it in the context and make break/continue work.
4667 (Also, of course, pp_enterwhen will jump straight to
4668 op_other if the match fails.)
4673 S_newGIVWHENOP(pTHX_ OP *cond, OP *block,
4674 I32 enter_opcode, I32 leave_opcode,
4675 PADOFFSET entertarg)
4681 NewOp(1101, enterop, 1, LOGOP);
4682 enterop->op_type = enter_opcode;
4683 enterop->op_ppaddr = PL_ppaddr[enter_opcode];
4684 enterop->op_flags = (U8) OPf_KIDS;
4685 enterop->op_targ = ((entertarg == NOT_IN_PAD) ? 0 : entertarg);
4686 enterop->op_private = 0;
4688 o = newUNOP(leave_opcode, 0, (OP *) enterop);
4691 enterop->op_first = scalar(cond);
4692 cond->op_sibling = block;
4694 o->op_next = LINKLIST(cond);
4695 cond->op_next = (OP *) enterop;
4698 /* This is a default {} block */
4699 enterop->op_first = block;
4700 enterop->op_flags |= OPf_SPECIAL;
4702 o->op_next = (OP *) enterop;
4705 CHECKOP(enter_opcode, enterop); /* Currently does nothing, since
4706 entergiven and enterwhen both
4709 enterop->op_next = LINKLIST(block);
4710 block->op_next = enterop->op_other = o;
4715 /* Does this look like a boolean operation? For these purposes
4716 a boolean operation is:
4717 - a subroutine call [*]
4718 - a logical connective
4719 - a comparison operator
4720 - a filetest operator, with the exception of -s -M -A -C
4721 - defined(), exists() or eof()
4722 - /$re/ or $foo =~ /$re/
4724 [*] possibly surprising
4728 S_looks_like_bool(pTHX_ const OP *o)
4731 switch(o->op_type) {
4733 return looks_like_bool(cLOGOPo->op_first);
4737 looks_like_bool(cLOGOPo->op_first)
4738 && looks_like_bool(cLOGOPo->op_first->op_sibling));
4742 case OP_NOT: case OP_XOR:
4743 /* Note that OP_DOR is not here */
4745 case OP_EQ: case OP_NE: case OP_LT:
4746 case OP_GT: case OP_LE: case OP_GE:
4748 case OP_I_EQ: case OP_I_NE: case OP_I_LT:
4749 case OP_I_GT: case OP_I_LE: case OP_I_GE:
4751 case OP_SEQ: case OP_SNE: case OP_SLT:
4752 case OP_SGT: case OP_SLE: case OP_SGE:
4756 case OP_FTRREAD: case OP_FTRWRITE: case OP_FTREXEC:
4757 case OP_FTEREAD: case OP_FTEWRITE: case OP_FTEEXEC:
4758 case OP_FTIS: case OP_FTEOWNED: case OP_FTROWNED:
4759 case OP_FTZERO: case OP_FTSOCK: case OP_FTCHR:
4760 case OP_FTBLK: case OP_FTFILE: case OP_FTDIR:
4761 case OP_FTPIPE: case OP_FTLINK: case OP_FTSUID:
4762 case OP_FTSGID: case OP_FTSVTX: case OP_FTTTY:
4763 case OP_FTTEXT: case OP_FTBINARY:
4765 case OP_DEFINED: case OP_EXISTS:
4766 case OP_MATCH: case OP_EOF:
4771 /* Detect comparisons that have been optimized away */
4772 if (cSVOPo->op_sv == &PL_sv_yes
4773 || cSVOPo->op_sv == &PL_sv_no)
4784 Perl_newGIVENOP(pTHX_ OP *cond, OP *block, PADOFFSET defsv_off)
4788 return newGIVWHENOP(
4789 ref_array_or_hash(cond),
4791 OP_ENTERGIVEN, OP_LEAVEGIVEN,
4795 /* If cond is null, this is a default {} block */
4797 Perl_newWHENOP(pTHX_ OP *cond, OP *block)
4799 const bool cond_llb = (!cond || looks_like_bool(cond));
4805 cond_op = newBINOP(OP_SMARTMATCH, OPf_SPECIAL,
4807 scalar(ref_array_or_hash(cond)));
4810 return newGIVWHENOP(
4812 append_elem(block->op_type, block, newOP(OP_BREAK, OPf_SPECIAL)),
4813 OP_ENTERWHEN, OP_LEAVEWHEN, 0);
4817 =for apidoc cv_undef
4819 Clear out all the active components of a CV. This can happen either
4820 by an explicit C<undef &foo>, or by the reference count going to zero.
4821 In the former case, we keep the CvOUTSIDE pointer, so that any anonymous
4822 children can still follow the full lexical scope chain.
4828 Perl_cv_undef(pTHX_ CV *cv)
4832 if (CvFILE(cv) && !CvISXSUB(cv)) {
4833 /* for XSUBs CvFILE point directly to static memory; __FILE__ */
4834 Safefree(CvFILE(cv));
4839 if (!CvISXSUB(cv) && CvROOT(cv)) {
4840 if (SvTYPE(cv) == SVt_PVCV && CvDEPTH(cv))
4841 Perl_croak(aTHX_ "Can't undef active subroutine");
4844 PAD_SAVE_SETNULLPAD();
4846 op_free(CvROOT(cv));
4851 SvPOK_off((SV*)cv); /* forget prototype */
4856 /* remove CvOUTSIDE unless this is an undef rather than a free */
4857 if (!SvREFCNT(cv) && CvOUTSIDE(cv)) {
4858 if (!CvWEAKOUTSIDE(cv))
4859 SvREFCNT_dec(CvOUTSIDE(cv));
4860 CvOUTSIDE(cv) = NULL;
4863 SvREFCNT_dec((SV*)CvXSUBANY(cv).any_ptr);
4866 if (CvISXSUB(cv) && CvXSUB(cv)) {
4869 /* delete all flags except WEAKOUTSIDE */
4870 CvFLAGS(cv) &= CVf_WEAKOUTSIDE;
4874 Perl_cv_ckproto_len(pTHX_ const CV *cv, const GV *gv, const char *p,
4877 /* Can't just use a strcmp on the prototype, as CONSTSUBs "cheat" by
4878 relying on SvCUR, and doubling up the buffer to hold CvFILE(). */
4879 if (((!p != !SvPOK(cv)) /* One has prototype, one has not. */
4880 || (p && (len != SvCUR(cv) /* Not the same length. */
4881 || memNE(p, SvPVX_const(cv), len))))
4882 && ckWARN_d(WARN_PROTOTYPE)) {
4883 SV* const msg = sv_newmortal();
4887 gv_efullname3(name = sv_newmortal(), gv, NULL);
4888 sv_setpv(msg, "Prototype mismatch:");
4890 Perl_sv_catpvf(aTHX_ msg, " sub %"SVf, (void*)name);
4892 Perl_sv_catpvf(aTHX_ msg, " (%"SVf")", (void*)cv);
4894 sv_catpvs(msg, ": none");
4895 sv_catpvs(msg, " vs ");
4897 Perl_sv_catpvf(aTHX_ msg, "(%.*s)", (int) len, p);
4899 sv_catpvs(msg, "none");
4900 Perl_warner(aTHX_ packWARN(WARN_PROTOTYPE), "%"SVf, (void*)msg);
4904 static void const_sv_xsub(pTHX_ CV* cv);
4908 =head1 Optree Manipulation Functions
4910 =for apidoc cv_const_sv
4912 If C<cv> is a constant sub eligible for inlining. returns the constant
4913 value returned by the sub. Otherwise, returns NULL.
4915 Constant subs can be created with C<newCONSTSUB> or as described in
4916 L<perlsub/"Constant Functions">.
4921 Perl_cv_const_sv(pTHX_ CV *cv)
4923 PERL_UNUSED_CONTEXT;
4926 if (!(SvTYPE(cv) == SVt_PVCV || SvTYPE(cv) == SVt_PVFM))
4928 return CvCONST(cv) ? (SV*)CvXSUBANY(cv).any_ptr : NULL;
4931 /* op_const_sv: examine an optree to determine whether it's in-lineable.
4932 * Can be called in 3 ways:
4935 * look for a single OP_CONST with attached value: return the value
4937 * cv && CvCLONE(cv) && !CvCONST(cv)
4939 * examine the clone prototype, and if contains only a single
4940 * OP_CONST referencing a pad const, or a single PADSV referencing
4941 * an outer lexical, return a non-zero value to indicate the CV is
4942 * a candidate for "constizing" at clone time
4946 * We have just cloned an anon prototype that was marked as a const
4947 * candidiate. Try to grab the current value, and in the case of
4948 * PADSV, ignore it if it has multiple references. Return the value.
4952 Perl_op_const_sv(pTHX_ const OP *o, CV *cv)
4960 if (o->op_type == OP_LINESEQ && cLISTOPo->op_first)
4961 o = cLISTOPo->op_first->op_sibling;
4963 for (; o; o = o->op_next) {
4964 const OPCODE type = o->op_type;
4966 if (sv && o->op_next == o)
4968 if (o->op_next != o) {
4969 if (type == OP_NEXTSTATE || type == OP_NULL || type == OP_PUSHMARK)
4971 if (type == OP_DBSTATE)
4974 if (type == OP_LEAVESUB || type == OP_RETURN)
4978 if (type == OP_CONST && cSVOPo->op_sv)
4980 else if (cv && type == OP_CONST) {
4981 sv = PAD_BASE_SV(CvPADLIST(cv), o->op_targ);
4985 else if (cv && type == OP_PADSV) {
4986 if (CvCONST(cv)) { /* newly cloned anon */
4987 sv = PAD_BASE_SV(CvPADLIST(cv), o->op_targ);
4988 /* the candidate should have 1 ref from this pad and 1 ref
4989 * from the parent */
4990 if (!sv || SvREFCNT(sv) != 2)
4997 if (PAD_COMPNAME_FLAGS(o->op_targ) & SVf_FAKE)
4998 sv = &PL_sv_undef; /* an arbitrary non-null value */
5013 Perl_newMYSUB(pTHX_ I32 floor, OP *o, OP *proto, OP *attrs, OP *block)
5016 /* This would be the return value, but the return cannot be reached. */
5017 OP* pegop = newOP(OP_NULL, 0);
5020 PERL_UNUSED_ARG(floor);
5030 Perl_croak(aTHX_ "\"my sub\" not yet implemented");
5032 NORETURN_FUNCTION_END;
5037 Perl_newSUB(pTHX_ I32 floor, OP *o, OP *proto, OP *block)
5039 return Perl_newATTRSUB(aTHX_ floor, o, proto, NULL, block);
5043 Perl_newATTRSUB(pTHX_ I32 floor, OP *o, OP *proto, OP *attrs, OP *block)
5050 register CV *cv = NULL;
5052 /* If the subroutine has no body, no attributes, and no builtin attributes
5053 then it's just a sub declaration, and we may be able to get away with
5054 storing with a placeholder scalar in the symbol table, rather than a
5055 full GV and CV. If anything is present then it will take a full CV to
5057 const I32 gv_fetch_flags
5058 = (block || attrs || (CvFLAGS(PL_compcv) & CVf_BUILTIN_ATTRS)
5060 ? GV_ADDMULTI : GV_ADDMULTI | GV_NOINIT;
5061 const char * const name = o ? SvPVx_nolen_const(cSVOPo->op_sv) : NULL;
5064 assert(proto->op_type == OP_CONST);
5065 ps = SvPVx_const(((SVOP*)proto)->op_sv, ps_len);
5070 if (!name && PERLDB_NAMEANON && CopLINE(PL_curcop)) {
5071 SV * const sv = sv_newmortal();
5072 Perl_sv_setpvf(aTHX_ sv, "%s[%s:%"IVdf"]",
5073 PL_curstash ? "__ANON__" : "__ANON__::__ANON__",
5074 CopFILE(PL_curcop), (IV)CopLINE(PL_curcop));
5075 aname = SvPVX_const(sv);
5080 gv = name ? gv_fetchsv(cSVOPo->op_sv, gv_fetch_flags, SVt_PVCV)
5081 : gv_fetchpv(aname ? aname
5082 : (PL_curstash ? "__ANON__" : "__ANON__::__ANON__"),
5083 gv_fetch_flags, SVt_PVCV);
5085 if (!PL_madskills) {
5094 if (SvTYPE(gv) != SVt_PVGV) { /* Maybe prototype now, and had at
5095 maximum a prototype before. */
5096 if (SvTYPE(gv) > SVt_NULL) {
5097 if (!SvPOK((SV*)gv) && !(SvIOK((SV*)gv) && SvIVX((SV*)gv) == -1)
5098 && ckWARN_d(WARN_PROTOTYPE))
5100 Perl_warner(aTHX_ packWARN(WARN_PROTOTYPE), "Runaway prototype");
5102 cv_ckproto_len((CV*)gv, NULL, ps, ps_len);
5105 sv_setpvn((SV*)gv, ps, ps_len);
5107 sv_setiv((SV*)gv, -1);
5108 SvREFCNT_dec(PL_compcv);
5109 cv = PL_compcv = NULL;
5110 PL_sub_generation++;
5114 cv = (!name || GvCVGEN(gv)) ? NULL : GvCV(gv);
5116 #ifdef GV_UNIQUE_CHECK
5117 if (cv && GvUNIQUE(gv) && SvREADONLY(cv)) {
5118 Perl_croak(aTHX_ "Can't define subroutine %s (GV is unique)", name);
5122 if (!block || !ps || *ps || attrs
5123 || (CvFLAGS(PL_compcv) & CVf_BUILTIN_ATTRS)
5125 || block->op_type == OP_NULL
5130 const_sv = op_const_sv(block, NULL);
5133 const bool exists = CvROOT(cv) || CvXSUB(cv);
5135 #ifdef GV_UNIQUE_CHECK
5136 if (exists && GvUNIQUE(gv)) {
5137 Perl_croak(aTHX_ "Can't redefine unique subroutine %s", name);
5141 /* if the subroutine doesn't exist and wasn't pre-declared
5142 * with a prototype, assume it will be AUTOLOADed,
5143 * skipping the prototype check
5145 if (exists || SvPOK(cv))
5146 cv_ckproto_len(cv, gv, ps, ps_len);
5147 /* already defined (or promised)? */
5148 if (exists || GvASSUMECV(gv)) {
5151 || block->op_type == OP_NULL
5154 if (CvFLAGS(PL_compcv)) {
5155 /* might have had built-in attrs applied */
5156 CvFLAGS(cv) |= (CvFLAGS(PL_compcv) & CVf_BUILTIN_ATTRS);
5158 /* just a "sub foo;" when &foo is already defined */
5159 SAVEFREESV(PL_compcv);
5164 && block->op_type != OP_NULL
5167 if (ckWARN(WARN_REDEFINE)
5169 && (!const_sv || sv_cmp(cv_const_sv(cv), const_sv))))
5171 const line_t oldline = CopLINE(PL_curcop);
5172 if (PL_copline != NOLINE)
5173 CopLINE_set(PL_curcop, PL_copline);
5174 Perl_warner(aTHX_ packWARN(WARN_REDEFINE),
5175 CvCONST(cv) ? "Constant subroutine %s redefined"
5176 : "Subroutine %s redefined", name);
5177 CopLINE_set(PL_curcop, oldline);
5180 if (!PL_minus_c) /* keep old one around for madskills */
5183 /* (PL_madskills unset in used file.) */
5191 SvREFCNT_inc_simple_void_NN(const_sv);
5193 assert(!CvROOT(cv) && !CvCONST(cv));
5194 sv_setpvn((SV*)cv, "", 0); /* prototype is "" */
5195 CvXSUBANY(cv).any_ptr = const_sv;
5196 CvXSUB(cv) = const_sv_xsub;
5202 cv = newCONSTSUB(NULL, name, const_sv);
5204 PL_sub_generation++;
5208 SvREFCNT_dec(PL_compcv);
5216 /* Need to do a C<use attributes $stash_of_cv,\&cv,@attrs>
5217 * before we clobber PL_compcv.
5221 || block->op_type == OP_NULL
5225 /* Might have had built-in attributes applied -- propagate them. */
5226 CvFLAGS(cv) |= (CvFLAGS(PL_compcv) & CVf_BUILTIN_ATTRS);
5227 if (CvGV(cv) && GvSTASH(CvGV(cv)))
5228 stash = GvSTASH(CvGV(cv));
5229 else if (CvSTASH(cv))
5230 stash = CvSTASH(cv);
5232 stash = PL_curstash;
5235 /* possibly about to re-define existing subr -- ignore old cv */
5236 rcv = (SV*)PL_compcv;
5237 if (name && GvSTASH(gv))
5238 stash = GvSTASH(gv);
5240 stash = PL_curstash;
5242 apply_attrs(stash, rcv, attrs, FALSE);
5244 if (cv) { /* must reuse cv if autoloaded */
5251 || block->op_type == OP_NULL) && !PL_madskills
5254 /* got here with just attrs -- work done, so bug out */
5255 SAVEFREESV(PL_compcv);
5258 /* transfer PL_compcv to cv */
5260 CvFLAGS(cv) = CvFLAGS(PL_compcv);
5261 if (!CvWEAKOUTSIDE(cv))
5262 SvREFCNT_dec(CvOUTSIDE(cv));
5263 CvOUTSIDE(cv) = CvOUTSIDE(PL_compcv);
5264 CvOUTSIDE_SEQ(cv) = CvOUTSIDE_SEQ(PL_compcv);
5265 CvOUTSIDE(PL_compcv) = 0;
5266 CvPADLIST(cv) = CvPADLIST(PL_compcv);
5267 CvPADLIST(PL_compcv) = 0;
5268 /* inner references to PL_compcv must be fixed up ... */
5269 pad_fixup_inner_anons(CvPADLIST(cv), PL_compcv, cv);
5270 /* ... before we throw it away */
5271 SvREFCNT_dec(PL_compcv);
5273 if (PERLDB_INTER)/* Advice debugger on the new sub. */
5274 ++PL_sub_generation;
5281 if (strEQ(name, "import")) {
5282 PL_formfeed = (SV*)cv;
5283 Perl_warner(aTHX_ packWARN(WARN_VOID), "%lx\n", (long)cv);
5287 PL_sub_generation++;
5291 CvFILE_set_from_cop(cv, PL_curcop);
5292 CvSTASH(cv) = PL_curstash;
5295 sv_setpvn((SV*)cv, ps, ps_len);
5297 if (PL_error_count) {
5301 const char *s = strrchr(name, ':');
5303 if (strEQ(s, "BEGIN")) {
5304 const char not_safe[] =
5305 "BEGIN not safe after errors--compilation aborted";
5306 if (PL_in_eval & EVAL_KEEPERR)
5307 Perl_croak(aTHX_ not_safe);
5309 /* force display of errors found but not reported */
5310 sv_catpv(ERRSV, not_safe);
5311 Perl_croak(aTHX_ "%"SVf, (void*)ERRSV);
5321 CvROOT(cv) = newUNOP(OP_LEAVESUBLV, 0,
5322 mod(scalarseq(block), OP_LEAVESUBLV));
5325 /* This makes sub {}; work as expected. */
5326 if (block->op_type == OP_STUB) {
5327 OP* const newblock = newSTATEOP(0, NULL, 0);
5329 op_getmad(block,newblock,'B');
5335 CvROOT(cv) = newUNOP(OP_LEAVESUB, 0, scalarseq(block));
5337 CvROOT(cv)->op_private |= OPpREFCOUNTED;
5338 OpREFCNT_set(CvROOT(cv), 1);
5339 CvSTART(cv) = LINKLIST(CvROOT(cv));
5340 CvROOT(cv)->op_next = 0;
5341 CALL_PEEP(CvSTART(cv));
5343 /* now that optimizer has done its work, adjust pad values */
5345 pad_tidy(CvCLONE(cv) ? padtidy_SUBCLONE : padtidy_SUB);
5348 assert(!CvCONST(cv));
5349 if (ps && !*ps && op_const_sv(block, cv))
5353 if (name || aname) {
5355 const char * const tname = (name ? name : aname);
5357 if (PERLDB_SUBLINE && PL_curstash != PL_debstash) {
5358 SV * const sv = newSV(0);
5359 SV * const tmpstr = sv_newmortal();
5360 GV * const db_postponed = gv_fetchpvs("DB::postponed",
5361 GV_ADDMULTI, SVt_PVHV);
5364 Perl_sv_setpvf(aTHX_ sv, "%s:%ld-%ld",
5366 (long)PL_subline, (long)CopLINE(PL_curcop));
5367 gv_efullname3(tmpstr, gv, NULL);
5368 hv_store(GvHV(PL_DBsub), SvPVX_const(tmpstr), SvCUR(tmpstr), sv, 0);
5369 hv = GvHVn(db_postponed);
5370 if (HvFILL(hv) > 0 && hv_exists(hv, SvPVX_const(tmpstr), SvCUR(tmpstr))) {
5371 CV * const pcv = GvCV(db_postponed);
5377 call_sv((SV*)pcv, G_DISCARD);
5382 if ((s = strrchr(tname,':')))
5387 if (*s != 'B' && *s != 'E' && *s != 'C' && *s != 'I' && *s != 'U')
5390 if (strEQ(s, "BEGIN") && !PL_error_count) {
5391 const I32 oldscope = PL_scopestack_ix;
5393 SAVECOPFILE(&PL_compiling);
5394 SAVECOPLINE(&PL_compiling);
5397 PL_beginav = newAV();
5398 DEBUG_x( dump_sub(gv) );
5399 av_push(PL_beginav, (SV*)cv);
5400 GvCV(gv) = 0; /* cv has been hijacked */
5401 call_list(oldscope, PL_beginav);
5403 PL_curcop = &PL_compiling;
5404 CopHINTS_set(&PL_compiling, PL_hints);
5407 else if (strEQ(s, "END") && !PL_error_count) {
5410 DEBUG_x( dump_sub(gv) );
5411 av_unshift(PL_endav, 1);
5412 av_store(PL_endav, 0, (SV*)cv);
5413 GvCV(gv) = 0; /* cv has been hijacked */
5415 else if (strEQ(s, "UNITCHECK") && !PL_error_count) {
5416 /* It's never too late to run a unitcheck block */
5417 if (!PL_unitcheckav)
5418 PL_unitcheckav = newAV();
5419 DEBUG_x( dump_sub(gv) );
5420 av_unshift(PL_unitcheckav, 1);
5421 av_store(PL_unitcheckav, 0, (SV*)cv);
5422 GvCV(gv) = 0; /* cv has been hijacked */
5424 else if (strEQ(s, "CHECK") && !PL_error_count) {
5426 PL_checkav = newAV();
5427 DEBUG_x( dump_sub(gv) );
5428 if (PL_main_start && ckWARN(WARN_VOID))
5429 Perl_warner(aTHX_ packWARN(WARN_VOID), "Too late to run CHECK block");
5430 av_unshift(PL_checkav, 1);
5431 av_store(PL_checkav, 0, (SV*)cv);
5432 GvCV(gv) = 0; /* cv has been hijacked */
5434 else if (strEQ(s, "INIT") && !PL_error_count) {
5436 PL_initav = newAV();
5437 DEBUG_x( dump_sub(gv) );
5438 if (PL_main_start && ckWARN(WARN_VOID))
5439 Perl_warner(aTHX_ packWARN(WARN_VOID), "Too late to run INIT block");
5440 av_push(PL_initav, (SV*)cv);
5441 GvCV(gv) = 0; /* cv has been hijacked */
5446 PL_copline = NOLINE;
5451 /* XXX unsafe for threads if eval_owner isn't held */
5453 =for apidoc newCONSTSUB
5455 Creates a constant sub equivalent to Perl C<sub FOO () { 123 }> which is
5456 eligible for inlining at compile-time.
5462 Perl_newCONSTSUB(pTHX_ HV *stash, const char *name, SV *sv)
5467 const char *const temp_p = CopFILE(PL_curcop);
5468 const STRLEN len = temp_p ? strlen(temp_p) : 0;
5470 SV *const temp_sv = CopFILESV(PL_curcop);
5472 const char *const temp_p = temp_sv ? SvPV_const(temp_sv, len) : NULL;
5474 char *const file = savepvn(temp_p, temp_p ? len : 0);
5478 SAVECOPLINE(PL_curcop);
5479 CopLINE_set(PL_curcop, PL_copline);
5482 PL_hints &= ~HINT_BLOCK_SCOPE;
5485 SAVESPTR(PL_curstash);
5486 SAVECOPSTASH(PL_curcop);
5487 PL_curstash = stash;
5488 CopSTASH_set(PL_curcop,stash);
5491 /* file becomes the CvFILE. For an XS, it's supposed to be static storage,
5492 and so doesn't get free()d. (It's expected to be from the C pre-
5493 processor __FILE__ directive). But we need a dynamically allocated one,
5494 and we need it to get freed. */
5495 cv = newXS_flags(name, const_sv_xsub, file, "", XS_DYNAMIC_FILENAME);
5496 CvXSUBANY(cv).any_ptr = sv;
5502 CopSTASH_free(PL_curcop);
5510 Perl_newXS_flags(pTHX_ const char *name, XSUBADDR_t subaddr,
5511 const char *const filename, const char *const proto,
5514 CV *cv = newXS(name, subaddr, filename);
5516 if (flags & XS_DYNAMIC_FILENAME) {
5517 /* We need to "make arrangements" (ie cheat) to ensure that the
5518 filename lasts as long as the PVCV we just created, but also doesn't
5520 STRLEN filename_len = strlen(filename);
5521 STRLEN proto_and_file_len = filename_len;
5522 char *proto_and_file;
5526 proto_len = strlen(proto);
5527 proto_and_file_len += proto_len;
5529 Newx(proto_and_file, proto_and_file_len + 1, char);
5530 Copy(proto, proto_and_file, proto_len, char);
5531 Copy(filename, proto_and_file + proto_len, filename_len + 1, char);
5534 proto_and_file = savepvn(filename, filename_len);
5537 /* This gets free()d. :-) */
5538 sv_usepvn_flags((SV*)cv, proto_and_file, proto_and_file_len,
5539 SV_HAS_TRAILING_NUL);
5541 /* This gives us the correct prototype, rather than one with the
5542 file name appended. */
5543 SvCUR_set(cv, proto_len);
5547 CvFILE(cv) = proto_and_file + proto_len;
5549 sv_setpv((SV *)cv, proto);
5555 =for apidoc U||newXS
5557 Used by C<xsubpp> to hook up XSUBs as Perl subs. I<filename> needs to be
5558 static storage, as it is used directly as CvFILE(), without a copy being made.
5564 Perl_newXS(pTHX_ const char *name, XSUBADDR_t subaddr, const char *filename)
5567 GV * const gv = gv_fetchpv(name ? name :
5568 (PL_curstash ? "__ANON__" : "__ANON__::__ANON__"),
5569 GV_ADDMULTI, SVt_PVCV);
5573 Perl_croak(aTHX_ "panic: no address for '%s' in '%s'", name, filename);
5575 if ((cv = (name ? GvCV(gv) : NULL))) {
5577 /* just a cached method */
5581 else if (CvROOT(cv) || CvXSUB(cv) || GvASSUMECV(gv)) {
5582 /* already defined (or promised) */
5583 /* XXX It's possible for this HvNAME_get to return null, and get passed into strEQ */
5584 if (ckWARN(WARN_REDEFINE)) {
5585 GV * const gvcv = CvGV(cv);
5587 HV * const stash = GvSTASH(gvcv);
5589 const char *redefined_name = HvNAME_get(stash);
5590 if ( strEQ(redefined_name,"autouse") ) {
5591 const line_t oldline = CopLINE(PL_curcop);
5592 if (PL_copline != NOLINE)
5593 CopLINE_set(PL_curcop, PL_copline);
5594 Perl_warner(aTHX_ packWARN(WARN_REDEFINE),
5595 CvCONST(cv) ? "Constant subroutine %s redefined"
5596 : "Subroutine %s redefined"
5598 CopLINE_set(PL_curcop, oldline);
5608 if (cv) /* must reuse cv if autoloaded */
5612 sv_upgrade((SV *)cv, SVt_PVCV);
5616 PL_sub_generation++;
5620 (void)gv_fetchfile(filename);
5621 CvFILE(cv) = (char *)filename; /* NOTE: not copied, as it is expected to be
5622 an external constant string */
5624 CvXSUB(cv) = subaddr;
5627 const char *s = strrchr(name,':');
5633 if (*s != 'B' && *s != 'E' && *s != 'C' && *s != 'I')
5636 if (strEQ(s, "BEGIN")) {
5638 PL_beginav = newAV();
5639 av_push(PL_beginav, (SV*)cv);
5640 GvCV(gv) = 0; /* cv has been hijacked */
5642 else if (strEQ(s, "END")) {
5645 av_unshift(PL_endav, 1);
5646 av_store(PL_endav, 0, (SV*)cv);
5647 GvCV(gv) = 0; /* cv has been hijacked */
5649 else if (strEQ(s, "CHECK")) {
5651 PL_checkav = newAV();
5652 if (PL_main_start && ckWARN(WARN_VOID))
5653 Perl_warner(aTHX_ packWARN(WARN_VOID), "Too late to run CHECK block");
5654 av_unshift(PL_checkav, 1);
5655 av_store(PL_checkav, 0, (SV*)cv);
5656 GvCV(gv) = 0; /* cv has been hijacked */
5658 else if (strEQ(s, "INIT")) {
5660 PL_initav = newAV();
5661 if (PL_main_start && ckWARN(WARN_VOID))
5662 Perl_warner(aTHX_ packWARN(WARN_VOID), "Too late to run INIT block");
5663 av_push(PL_initav, (SV*)cv);
5664 GvCV(gv) = 0; /* cv has been hijacked */
5679 Perl_newFORM(pTHX_ I32 floor, OP *o, OP *block)
5684 OP* pegop = newOP(OP_NULL, 0);
5688 ? gv_fetchsv(cSVOPo->op_sv, GV_ADD, SVt_PVFM)
5689 : gv_fetchpvs("STDOUT", GV_ADD|GV_NOTQUAL, SVt_PVFM);
5691 #ifdef GV_UNIQUE_CHECK
5693 Perl_croak(aTHX_ "Bad symbol for form (GV is unique)");
5697 if ((cv = GvFORM(gv))) {
5698 if (ckWARN(WARN_REDEFINE)) {
5699 const line_t oldline = CopLINE(PL_curcop);
5700 if (PL_copline != NOLINE)
5701 CopLINE_set(PL_curcop, PL_copline);
5702 Perl_warner(aTHX_ packWARN(WARN_REDEFINE),
5703 o ? "Format %"SVf" redefined"
5704 : "Format STDOUT redefined", (void*)cSVOPo->op_sv);
5705 CopLINE_set(PL_curcop, oldline);
5712 CvFILE_set_from_cop(cv, PL_curcop);
5715 pad_tidy(padtidy_FORMAT);
5716 CvROOT(cv) = newUNOP(OP_LEAVEWRITE, 0, scalarseq(block));
5717 CvROOT(cv)->op_private |= OPpREFCOUNTED;
5718 OpREFCNT_set(CvROOT(cv), 1);
5719 CvSTART(cv) = LINKLIST(CvROOT(cv));
5720 CvROOT(cv)->op_next = 0;
5721 CALL_PEEP(CvSTART(cv));
5723 op_getmad(o,pegop,'n');
5724 op_getmad_weak(block, pegop, 'b');
5728 PL_copline = NOLINE;
5736 Perl_newANONLIST(pTHX_ OP *o)
5738 return convert(OP_ANONLIST, OPf_SPECIAL, o);
5742 Perl_newANONHASH(pTHX_ OP *o)
5744 return convert(OP_ANONHASH, OPf_SPECIAL, o);
5748 Perl_newANONSUB(pTHX_ I32 floor, OP *proto, OP *block)
5750 return newANONATTRSUB(floor, proto, NULL, block);
5754 Perl_newANONATTRSUB(pTHX_ I32 floor, OP *proto, OP *attrs, OP *block)
5756 return newUNOP(OP_REFGEN, 0,
5757 newSVOP(OP_ANONCODE, 0,
5758 (SV*)newATTRSUB(floor, 0, proto, attrs, block)));
5762 Perl_oopsAV(pTHX_ OP *o)
5765 switch (o->op_type) {
5767 o->op_type = OP_PADAV;
5768 o->op_ppaddr = PL_ppaddr[OP_PADAV];
5769 return ref(o, OP_RV2AV);
5772 o->op_type = OP_RV2AV;
5773 o->op_ppaddr = PL_ppaddr[OP_RV2AV];
5778 if (ckWARN_d(WARN_INTERNAL))
5779 Perl_warner(aTHX_ packWARN(WARN_INTERNAL), "oops: oopsAV");
5786 Perl_oopsHV(pTHX_ OP *o)
5789 switch (o->op_type) {
5792 o->op_type = OP_PADHV;
5793 o->op_ppaddr = PL_ppaddr[OP_PADHV];
5794 return ref(o, OP_RV2HV);
5798 o->op_type = OP_RV2HV;
5799 o->op_ppaddr = PL_ppaddr[OP_RV2HV];
5804 if (ckWARN_d(WARN_INTERNAL))
5805 Perl_warner(aTHX_ packWARN(WARN_INTERNAL), "oops: oopsHV");
5812 Perl_newAVREF(pTHX_ OP *o)
5815 if (o->op_type == OP_PADANY) {
5816 o->op_type = OP_PADAV;
5817 o->op_ppaddr = PL_ppaddr[OP_PADAV];
5820 else if ((o->op_type == OP_RV2AV || o->op_type == OP_PADAV)
5821 && ckWARN(WARN_DEPRECATED)) {
5822 Perl_warner(aTHX_ packWARN(WARN_DEPRECATED),
5823 "Using an array as a reference is deprecated");
5825 return newUNOP(OP_RV2AV, 0, scalar(o));
5829 Perl_newGVREF(pTHX_ I32 type, OP *o)
5831 if (type == OP_MAPSTART || type == OP_GREPSTART || type == OP_SORT)
5832 return newUNOP(OP_NULL, 0, o);
5833 return ref(newUNOP(OP_RV2GV, OPf_REF, o), type);
5837 Perl_newHVREF(pTHX_ OP *o)
5840 if (o->op_type == OP_PADANY) {
5841 o->op_type = OP_PADHV;
5842 o->op_ppaddr = PL_ppaddr[OP_PADHV];
5845 else if ((o->op_type == OP_RV2HV || o->op_type == OP_PADHV)
5846 && ckWARN(WARN_DEPRECATED)) {
5847 Perl_warner(aTHX_ packWARN(WARN_DEPRECATED),
5848 "Using a hash as a reference is deprecated");
5850 return newUNOP(OP_RV2HV, 0, scalar(o));
5854 Perl_newCVREF(pTHX_ I32 flags, OP *o)
5856 return newUNOP(OP_RV2CV, flags, scalar(o));
5860 Perl_newSVREF(pTHX_ OP *o)
5863 if (o->op_type == OP_PADANY) {
5864 o->op_type = OP_PADSV;
5865 o->op_ppaddr = PL_ppaddr[OP_PADSV];
5868 else if (o->op_type == OP_THREADSV && !(o->op_flags & OPpDONE_SVREF)) {
5869 o->op_flags |= OPpDONE_SVREF;
5872 return newUNOP(OP_RV2SV, 0, scalar(o));
5875 /* Check routines. See the comments at the top of this file for details
5876 * on when these are called */
5879 Perl_ck_anoncode(pTHX_ OP *o)
5881 cSVOPo->op_targ = pad_add_anon(cSVOPo->op_sv, o->op_type);
5883 cSVOPo->op_sv = NULL;
5888 Perl_ck_bitop(pTHX_ OP *o)
5891 #define OP_IS_NUMCOMPARE(op) \
5892 ((op) == OP_LT || (op) == OP_I_LT || \
5893 (op) == OP_GT || (op) == OP_I_GT || \
5894 (op) == OP_LE || (op) == OP_I_LE || \
5895 (op) == OP_GE || (op) == OP_I_GE || \
5896 (op) == OP_EQ || (op) == OP_I_EQ || \
5897 (op) == OP_NE || (op) == OP_I_NE || \
5898 (op) == OP_NCMP || (op) == OP_I_NCMP)
5899 o->op_private = (U8)(PL_hints & HINT_INTEGER);
5900 if (!(o->op_flags & OPf_STACKED) /* Not an assignment */
5901 && (o->op_type == OP_BIT_OR
5902 || o->op_type == OP_BIT_AND
5903 || o->op_type == OP_BIT_XOR))
5905 const OP * const left = cBINOPo->op_first;
5906 const OP * const right = left->op_sibling;
5907 if ((OP_IS_NUMCOMPARE(left->op_type) &&
5908 (left->op_flags & OPf_PARENS) == 0) ||
5909 (OP_IS_NUMCOMPARE(right->op_type) &&
5910 (right->op_flags & OPf_PARENS) == 0))
5911 if (ckWARN(WARN_PRECEDENCE))
5912 Perl_warner(aTHX_ packWARN(WARN_PRECEDENCE),
5913 "Possible precedence problem on bitwise %c operator",
5914 o->op_type == OP_BIT_OR ? '|'
5915 : o->op_type == OP_BIT_AND ? '&' : '^'
5922 Perl_ck_concat(pTHX_ OP *o)
5924 const OP * const kid = cUNOPo->op_first;
5925 PERL_UNUSED_CONTEXT;
5926 if (kid->op_type == OP_CONCAT && !(kid->op_private & OPpTARGET_MY) &&
5927 !(kUNOP->op_first->op_flags & OPf_MOD))
5928 o->op_flags |= OPf_STACKED;
5933 Perl_ck_spair(pTHX_ OP *o)
5936 if (o->op_flags & OPf_KIDS) {
5939 const OPCODE type = o->op_type;
5940 o = modkids(ck_fun(o), type);
5941 kid = cUNOPo->op_first;
5942 newop = kUNOP->op_first->op_sibling;
5944 const OPCODE type = newop->op_type;
5945 if (newop->op_sibling || !(PL_opargs[type] & OA_RETSCALAR) ||
5946 type == OP_PADAV || type == OP_PADHV ||
5947 type == OP_RV2AV || type == OP_RV2HV)
5951 op_getmad(kUNOP->op_first,newop,'K');
5953 op_free(kUNOP->op_first);
5955 kUNOP->op_first = newop;
5957 o->op_ppaddr = PL_ppaddr[++o->op_type];
5962 Perl_ck_delete(pTHX_ OP *o)
5966 if (o->op_flags & OPf_KIDS) {
5967 OP * const kid = cUNOPo->op_first;
5968 switch (kid->op_type) {
5970 o->op_flags |= OPf_SPECIAL;
5973 o->op_private |= OPpSLICE;
5976 o->op_flags |= OPf_SPECIAL;
5981 Perl_croak(aTHX_ "%s argument is not a HASH or ARRAY element or slice",
5990 Perl_ck_die(pTHX_ OP *o)
5993 if (VMSISH_HUSHED) o->op_private |= OPpHUSH_VMSISH;
5999 Perl_ck_eof(pTHX_ OP *o)
6003 if (o->op_flags & OPf_KIDS) {
6004 if (cLISTOPo->op_first->op_type == OP_STUB) {
6006 = newUNOP(o->op_type, OPf_SPECIAL, newGVOP(OP_GV, 0, PL_argvgv));
6008 op_getmad(o,newop,'O');
6020 Perl_ck_eval(pTHX_ OP *o)
6023 PL_hints |= HINT_BLOCK_SCOPE;
6024 if (o->op_flags & OPf_KIDS) {
6025 SVOP * const kid = (SVOP*)cUNOPo->op_first;
6028 o->op_flags &= ~OPf_KIDS;
6031 else if (kid->op_type == OP_LINESEQ || kid->op_type == OP_STUB) {
6037 cUNOPo->op_first = 0;
6042 NewOp(1101, enter, 1, LOGOP);
6043 enter->op_type = OP_ENTERTRY;
6044 enter->op_ppaddr = PL_ppaddr[OP_ENTERTRY];
6045 enter->op_private = 0;
6047 /* establish postfix order */
6048 enter->op_next = (OP*)enter;
6050 o = prepend_elem(OP_LINESEQ, (OP*)enter, (OP*)kid);
6051 o->op_type = OP_LEAVETRY;
6052 o->op_ppaddr = PL_ppaddr[OP_LEAVETRY];
6053 enter->op_other = o;
6054 op_getmad(oldo,o,'O');
6068 o = newUNOP(OP_ENTEREVAL, 0, newDEFSVOP());
6069 op_getmad(oldo,o,'O');
6071 o->op_targ = (PADOFFSET)PL_hints;
6072 if ((PL_hints & HINT_LOCALIZE_HH) != 0 && GvHV(PL_hintgv)) {
6073 /* Store a copy of %^H that pp_entereval can pick up */
6074 OP *hhop = newSVOP(OP_CONST, 0,
6075 (SV*)Perl_hv_copy_hints_hv(aTHX_ GvHV(PL_hintgv)));
6076 cUNOPo->op_first->op_sibling = hhop;
6077 o->op_private |= OPpEVAL_HAS_HH;
6083 Perl_ck_exit(pTHX_ OP *o)
6086 HV * const table = GvHV(PL_hintgv);
6088 SV * const * const svp = hv_fetchs(table, "vmsish_exit", FALSE);
6089 if (svp && *svp && SvTRUE(*svp))
6090 o->op_private |= OPpEXIT_VMSISH;
6092 if (VMSISH_HUSHED) o->op_private |= OPpHUSH_VMSISH;
6098 Perl_ck_exec(pTHX_ OP *o)
6100 if (o->op_flags & OPf_STACKED) {
6103 kid = cUNOPo->op_first->op_sibling;
6104 if (kid->op_type == OP_RV2GV)
6113 Perl_ck_exists(pTHX_ OP *o)
6117 if (o->op_flags & OPf_KIDS) {
6118 OP * const kid = cUNOPo->op_first;
6119 if (kid->op_type == OP_ENTERSUB) {
6120 (void) ref(kid, o->op_type);
6121 if (kid->op_type != OP_RV2CV && !PL_error_count)
6122 Perl_croak(aTHX_ "%s argument is not a subroutine name",
6124 o->op_private |= OPpEXISTS_SUB;
6126 else if (kid->op_type == OP_AELEM)
6127 o->op_flags |= OPf_SPECIAL;
6128 else if (kid->op_type != OP_HELEM)
6129 Perl_croak(aTHX_ "%s argument is not a HASH or ARRAY element",
6137 Perl_ck_rvconst(pTHX_ register OP *o)
6140 SVOP * const kid = (SVOP*)cUNOPo->op_first;
6142 o->op_private |= (PL_hints & HINT_STRICT_REFS);
6143 if (o->op_type == OP_RV2CV)
6144 o->op_private &= ~1;
6146 if (kid->op_type == OP_CONST) {
6149 SV * const kidsv = kid->op_sv;
6151 /* Is it a constant from cv_const_sv()? */
6152 if (SvROK(kidsv) && SvREADONLY(kidsv)) {
6153 SV * const rsv = SvRV(kidsv);
6154 const svtype type = SvTYPE(rsv);
6155 const char *badtype = NULL;
6157 switch (o->op_type) {
6159 if (type > SVt_PVMG)
6160 badtype = "a SCALAR";
6163 if (type != SVt_PVAV)
6164 badtype = "an ARRAY";
6167 if (type != SVt_PVHV)
6171 if (type != SVt_PVCV)
6176 Perl_croak(aTHX_ "Constant is not %s reference", badtype);
6179 else if ((o->op_type == OP_RV2HV || o->op_type == OP_RV2SV) &&
6180 (PL_hints & HINT_STRICT_REFS) && SvPOK(kidsv)) {
6181 /* If this is an access to a stash, disable "strict refs", because
6182 * stashes aren't auto-vivified at compile-time (unless we store
6183 * symbols in them), and we don't want to produce a run-time
6184 * stricture error when auto-vivifying the stash. */
6185 const char *s = SvPV_nolen(kidsv);
6186 const STRLEN l = SvCUR(kidsv);
6187 if (l > 1 && s[l-1] == ':' && s[l-2] == ':')
6188 o->op_private &= ~HINT_STRICT_REFS;
6190 if ((o->op_private & HINT_STRICT_REFS) && (kid->op_private & OPpCONST_BARE)) {
6191 const char *badthing;
6192 switch (o->op_type) {
6194 badthing = "a SCALAR";
6197 badthing = "an ARRAY";
6200 badthing = "a HASH";
6208 "Can't use bareword (\"%"SVf"\") as %s ref while \"strict refs\" in use",
6209 (void*)kidsv, badthing);
6212 * This is a little tricky. We only want to add the symbol if we
6213 * didn't add it in the lexer. Otherwise we get duplicate strict
6214 * warnings. But if we didn't add it in the lexer, we must at
6215 * least pretend like we wanted to add it even if it existed before,
6216 * or we get possible typo warnings. OPpCONST_ENTERED says
6217 * whether the lexer already added THIS instance of this symbol.
6219 iscv = (o->op_type == OP_RV2CV) * 2;
6221 gv = gv_fetchsv(kidsv,
6222 iscv | !(kid->op_private & OPpCONST_ENTERED),
6225 : o->op_type == OP_RV2SV
6227 : o->op_type == OP_RV2AV
6229 : o->op_type == OP_RV2HV
6232 } while (!gv && !(kid->op_private & OPpCONST_ENTERED) && !iscv++);
6234 kid->op_type = OP_GV;
6235 SvREFCNT_dec(kid->op_sv);
6237 /* XXX hack: dependence on sizeof(PADOP) <= sizeof(SVOP) */
6238 kPADOP->op_padix = pad_alloc(OP_GV, SVs_PADTMP);
6239 SvREFCNT_dec(PAD_SVl(kPADOP->op_padix));
6241 PAD_SETSV(kPADOP->op_padix, (SV*) SvREFCNT_inc_simple_NN(gv));
6243 kid->op_sv = SvREFCNT_inc_simple_NN(gv);
6245 kid->op_private = 0;
6246 kid->op_ppaddr = PL_ppaddr[OP_GV];
6253 Perl_ck_ftst(pTHX_ OP *o)
6256 const I32 type = o->op_type;
6258 if (o->op_flags & OPf_REF) {
6261 else if (o->op_flags & OPf_KIDS && cUNOPo->op_first->op_type != OP_STUB) {
6262 SVOP * const kid = (SVOP*)cUNOPo->op_first;
6263 const OPCODE kidtype = kid->op_type;
6265 if (kidtype == OP_CONST && (kid->op_private & OPpCONST_BARE)) {
6266 OP * const newop = newGVOP(type, OPf_REF,
6267 gv_fetchsv(kid->op_sv, GV_ADD, SVt_PVIO));
6269 op_getmad(o,newop,'O');
6275 if ((PL_hints & HINT_FILETEST_ACCESS) && OP_IS_FILETEST_ACCESS(o))
6276 o->op_private |= OPpFT_ACCESS;
6277 if (PL_check[kidtype] == MEMBER_TO_FPTR(Perl_ck_ftst)
6278 && kidtype != OP_STAT && kidtype != OP_LSTAT)
6279 o->op_private |= OPpFT_STACKED;
6287 if (type == OP_FTTTY)
6288 o = newGVOP(type, OPf_REF, PL_stdingv);
6290 o = newUNOP(type, 0, newDEFSVOP());
6291 op_getmad(oldo,o,'O');
6297 Perl_ck_fun(pTHX_ OP *o)
6300 const int type = o->op_type;
6301 register I32 oa = PL_opargs[type] >> OASHIFT;
6303 if (o->op_flags & OPf_STACKED) {
6304 if ((oa & OA_OPTIONAL) && (oa >> 4) && !((oa >> 4) & OA_OPTIONAL))
6307 return no_fh_allowed(o);
6310 if (o->op_flags & OPf_KIDS) {
6311 OP **tokid = &cLISTOPo->op_first;
6312 register OP *kid = cLISTOPo->op_first;
6316 if (kid->op_type == OP_PUSHMARK ||
6317 (kid->op_type == OP_NULL && kid->op_targ == OP_PUSHMARK))
6319 tokid = &kid->op_sibling;
6320 kid = kid->op_sibling;
6322 if (!kid && PL_opargs[type] & OA_DEFGV)
6323 *tokid = kid = newDEFSVOP();
6327 sibl = kid->op_sibling;
6329 if (!sibl && kid->op_type == OP_STUB) {
6336 /* list seen where single (scalar) arg expected? */
6337 if (numargs == 1 && !(oa >> 4)
6338 && kid->op_type == OP_LIST && type != OP_SCALAR)
6340 return too_many_arguments(o,PL_op_desc[type]);
6353 if ((type == OP_PUSH || type == OP_UNSHIFT)
6354 && !kid->op_sibling && ckWARN(WARN_SYNTAX))
6355 Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
6356 "Useless use of %s with no values",
6359 if (kid->op_type == OP_CONST &&
6360 (kid->op_private & OPpCONST_BARE))
6362 OP * const newop = newAVREF(newGVOP(OP_GV, 0,
6363 gv_fetchsv(((SVOP*)kid)->op_sv, GV_ADD, SVt_PVAV) ));
6364 if (ckWARN2(WARN_DEPRECATED, WARN_SYNTAX))
6365 Perl_warner(aTHX_ packWARN2(WARN_DEPRECATED, WARN_SYNTAX),
6366 "Array @%"SVf" missing the @ in argument %"IVdf" of %s()",
6367 (void*)((SVOP*)kid)->op_sv, (IV)numargs, PL_op_desc[type]);
6369 op_getmad(kid,newop,'K');
6374 kid->op_sibling = sibl;
6377 else if (kid->op_type != OP_RV2AV && kid->op_type != OP_PADAV)
6378 bad_type(numargs, "array", PL_op_desc[type], kid);
6382 if (kid->op_type == OP_CONST &&
6383 (kid->op_private & OPpCONST_BARE))
6385 OP * const newop = newHVREF(newGVOP(OP_GV, 0,
6386 gv_fetchsv(((SVOP*)kid)->op_sv, GV_ADD, SVt_PVHV) ));
6387 if (ckWARN2(WARN_DEPRECATED, WARN_SYNTAX))
6388 Perl_warner(aTHX_ packWARN2(WARN_DEPRECATED, WARN_SYNTAX),
6389 "Hash %%%"SVf" missing the %% in argument %"IVdf" of %s()",
6390 (void*)((SVOP*)kid)->op_sv, (IV)numargs, PL_op_desc[type]);
6392 op_getmad(kid,newop,'K');
6397 kid->op_sibling = sibl;
6400 else if (kid->op_type != OP_RV2HV && kid->op_type != OP_PADHV)
6401 bad_type(numargs, "hash", PL_op_desc[type], kid);
6406 OP * const newop = newUNOP(OP_NULL, 0, kid);
6407 kid->op_sibling = 0;
6409 newop->op_next = newop;
6411 kid->op_sibling = sibl;
6416 if (kid->op_type != OP_GV && kid->op_type != OP_RV2GV) {
6417 if (kid->op_type == OP_CONST &&
6418 (kid->op_private & OPpCONST_BARE))
6420 OP * const newop = newGVOP(OP_GV, 0,
6421 gv_fetchsv(((SVOP*)kid)->op_sv, GV_ADD, SVt_PVIO));
6422 if (!(o->op_private & 1) && /* if not unop */
6423 kid == cLISTOPo->op_last)
6424 cLISTOPo->op_last = newop;
6426 op_getmad(kid,newop,'K');
6432 else if (kid->op_type == OP_READLINE) {
6433 /* neophyte patrol: open(<FH>), close(<FH>) etc. */
6434 bad_type(numargs, "HANDLE", OP_DESC(o), kid);
6437 I32 flags = OPf_SPECIAL;
6441 /* is this op a FH constructor? */
6442 if (is_handle_constructor(o,numargs)) {
6443 const char *name = NULL;
6447 /* Set a flag to tell rv2gv to vivify
6448 * need to "prove" flag does not mean something
6449 * else already - NI-S 1999/05/07
6452 if (kid->op_type == OP_PADSV) {
6453 name = PAD_COMPNAME_PV(kid->op_targ);
6454 /* SvCUR of a pad namesv can't be trusted
6455 * (see PL_generation), so calc its length
6461 else if (kid->op_type == OP_RV2SV
6462 && kUNOP->op_first->op_type == OP_GV)
6464 GV * const gv = cGVOPx_gv(kUNOP->op_first);
6466 len = GvNAMELEN(gv);
6468 else if (kid->op_type == OP_AELEM
6469 || kid->op_type == OP_HELEM)
6472 OP *op = ((BINOP*)kid)->op_first;
6476 const char * const a =
6477 kid->op_type == OP_AELEM ?
6479 if (((op->op_type == OP_RV2AV) ||
6480 (op->op_type == OP_RV2HV)) &&
6481 (firstop = ((UNOP*)op)->op_first) &&
6482 (firstop->op_type == OP_GV)) {
6483 /* packagevar $a[] or $h{} */
6484 GV * const gv = cGVOPx_gv(firstop);
6492 else if (op->op_type == OP_PADAV
6493 || op->op_type == OP_PADHV) {
6494 /* lexicalvar $a[] or $h{} */
6495 const char * const padname =
6496 PAD_COMPNAME_PV(op->op_targ);
6505 name = SvPV_const(tmpstr, len);
6510 name = "__ANONIO__";
6517 targ = pad_alloc(OP_RV2GV, SVs_PADTMP);
6518 namesv = PAD_SVl(targ);
6519 SvUPGRADE(namesv, SVt_PV);
6521 sv_setpvn(namesv, "$", 1);
6522 sv_catpvn(namesv, name, len);
6525 kid->op_sibling = 0;
6526 kid = newUNOP(OP_RV2GV, flags, scalar(kid));
6527 kid->op_targ = targ;
6528 kid->op_private |= priv;
6530 kid->op_sibling = sibl;
6536 mod(scalar(kid), type);
6540 tokid = &kid->op_sibling;
6541 kid = kid->op_sibling;
6544 if (kid && kid->op_type != OP_STUB)
6545 return too_many_arguments(o,OP_DESC(o));
6546 o->op_private |= numargs;
6548 /* FIXME - should the numargs move as for the PERL_MAD case? */
6549 o->op_private |= numargs;
6551 return too_many_arguments(o,OP_DESC(o));
6555 else if (PL_opargs[type] & OA_DEFGV) {
6557 OP *newop = newUNOP(type, 0, newDEFSVOP());
6558 op_getmad(o,newop,'O');
6561 /* Ordering of these two is important to keep f_map.t passing. */
6563 return newUNOP(type, 0, newDEFSVOP());
6568 while (oa & OA_OPTIONAL)
6570 if (oa && oa != OA_LIST)
6571 return too_few_arguments(o,OP_DESC(o));
6577 Perl_ck_glob(pTHX_ OP *o)
6583 if ((o->op_flags & OPf_KIDS) && !cLISTOPo->op_first->op_sibling)
6584 append_elem(OP_GLOB, o, newDEFSVOP());
6586 if (!((gv = gv_fetchpvs("glob", GV_NOTQUAL, SVt_PVCV))
6587 && GvCVu(gv) && GvIMPORTED_CV(gv)))
6589 gv = gv_fetchpvs("CORE::GLOBAL::glob", 0, SVt_PVCV);
6592 #if !defined(PERL_EXTERNAL_GLOB)
6593 /* XXX this can be tightened up and made more failsafe. */
6594 if (!(gv && GvCVu(gv) && GvIMPORTED_CV(gv))) {
6597 Perl_load_module(aTHX_ PERL_LOADMOD_NOIMPORT,
6598 newSVpvs("File::Glob"), NULL, NULL, NULL);
6599 gv = gv_fetchpvs("CORE::GLOBAL::glob", 0, SVt_PVCV);
6600 glob_gv = gv_fetchpvs("File::Glob::csh_glob", 0, SVt_PVCV);
6601 GvCV(gv) = GvCV(glob_gv);
6602 SvREFCNT_inc_void((SV*)GvCV(gv));
6603 GvIMPORTED_CV_on(gv);
6606 #endif /* PERL_EXTERNAL_GLOB */
6608 if (gv && GvCVu(gv) && GvIMPORTED_CV(gv)) {
6609 append_elem(OP_GLOB, o,
6610 newSVOP(OP_CONST, 0, newSViv(PL_glob_index++)));
6611 o->op_type = OP_LIST;
6612 o->op_ppaddr = PL_ppaddr[OP_LIST];
6613 cLISTOPo->op_first->op_type = OP_PUSHMARK;
6614 cLISTOPo->op_first->op_ppaddr = PL_ppaddr[OP_PUSHMARK];
6615 cLISTOPo->op_first->op_targ = 0;
6616 o = newUNOP(OP_ENTERSUB, OPf_STACKED,
6617 append_elem(OP_LIST, o,
6618 scalar(newUNOP(OP_RV2CV, 0,
6619 newGVOP(OP_GV, 0, gv)))));
6620 o = newUNOP(OP_NULL, 0, ck_subr(o));
6621 o->op_targ = OP_GLOB; /* hint at what it used to be */
6624 gv = newGVgen("main");
6626 append_elem(OP_GLOB, o, newGVOP(OP_GV, 0, gv));
6632 Perl_ck_grep(pTHX_ OP *o)
6637 const OPCODE type = o->op_type == OP_GREPSTART ? OP_GREPWHILE : OP_MAPWHILE;
6640 o->op_ppaddr = PL_ppaddr[OP_GREPSTART];
6641 /* don't allocate gwop here, as we may leak it if PL_error_count > 0 */
6643 if (o->op_flags & OPf_STACKED) {
6646 kid = cLISTOPo->op_first->op_sibling;
6647 if (!cUNOPx(kid)->op_next)
6648 Perl_croak(aTHX_ "panic: ck_grep");
6649 for (k = cUNOPx(kid)->op_first; k; k = k->op_next) {
6652 NewOp(1101, gwop, 1, LOGOP);
6653 kid->op_next = (OP*)gwop;
6654 o->op_flags &= ~OPf_STACKED;
6656 kid = cLISTOPo->op_first->op_sibling;
6657 if (type == OP_MAPWHILE)
6664 kid = cLISTOPo->op_first->op_sibling;
6665 if (kid->op_type != OP_NULL)
6666 Perl_croak(aTHX_ "panic: ck_grep");
6667 kid = kUNOP->op_first;
6670 NewOp(1101, gwop, 1, LOGOP);
6671 gwop->op_type = type;
6672 gwop->op_ppaddr = PL_ppaddr[type];
6673 gwop->op_first = listkids(o);
6674 gwop->op_flags |= OPf_KIDS;
6675 gwop->op_other = LINKLIST(kid);
6676 kid->op_next = (OP*)gwop;
6677 offset = pad_findmy("$_");
6678 if (offset == NOT_IN_PAD || PAD_COMPNAME_FLAGS_isOUR(offset)) {
6679 o->op_private = gwop->op_private = 0;
6680 gwop->op_targ = pad_alloc(type, SVs_PADTMP);
6683 o->op_private = gwop->op_private = OPpGREP_LEX;
6684 gwop->op_targ = o->op_targ = offset;
6687 kid = cLISTOPo->op_first->op_sibling;
6688 if (!kid || !kid->op_sibling)
6689 return too_few_arguments(o,OP_DESC(o));
6690 for (kid = kid->op_sibling; kid; kid = kid->op_sibling)
6691 mod(kid, OP_GREPSTART);
6697 Perl_ck_index(pTHX_ OP *o)
6699 if (o->op_flags & OPf_KIDS) {
6700 OP *kid = cLISTOPo->op_first->op_sibling; /* get past pushmark */
6702 kid = kid->op_sibling; /* get past "big" */
6703 if (kid && kid->op_type == OP_CONST)
6704 fbm_compile(((SVOP*)kid)->op_sv, 0);
6710 Perl_ck_lengthconst(pTHX_ OP *o)
6712 /* XXX length optimization goes here */
6717 Perl_ck_lfun(pTHX_ OP *o)
6719 const OPCODE type = o->op_type;
6720 return modkids(ck_fun(o), type);
6724 Perl_ck_defined(pTHX_ OP *o) /* 19990527 MJD */
6726 if ((o->op_flags & OPf_KIDS) && ckWARN2(WARN_DEPRECATED, WARN_SYNTAX)) {
6727 switch (cUNOPo->op_first->op_type) {
6729 /* This is needed for
6730 if (defined %stash::)
6731 to work. Do not break Tk.
6733 break; /* Globals via GV can be undef */
6735 case OP_AASSIGN: /* Is this a good idea? */
6736 Perl_warner(aTHX_ packWARN2(WARN_DEPRECATED, WARN_SYNTAX),
6737 "defined(@array) is deprecated");
6738 Perl_warner(aTHX_ packWARN2(WARN_DEPRECATED, WARN_SYNTAX),
6739 "\t(Maybe you should just omit the defined()?)\n");
6742 /* This is needed for
6743 if (defined %stash::)
6744 to work. Do not break Tk.
6746 break; /* Globals via GV can be undef */
6748 Perl_warner(aTHX_ packWARN2(WARN_DEPRECATED, WARN_SYNTAX),
6749 "defined(%%hash) is deprecated");
6750 Perl_warner(aTHX_ packWARN2(WARN_DEPRECATED, WARN_SYNTAX),
6751 "\t(Maybe you should just omit the defined()?)\n");
6762 Perl_ck_rfun(pTHX_ OP *o)
6764 const OPCODE type = o->op_type;
6765 return refkids(ck_fun(o), type);
6769 Perl_ck_listiob(pTHX_ OP *o)
6773 kid = cLISTOPo->op_first;
6776 kid = cLISTOPo->op_first;
6778 if (kid->op_type == OP_PUSHMARK)
6779 kid = kid->op_sibling;
6780 if (kid && o->op_flags & OPf_STACKED)
6781 kid = kid->op_sibling;
6782 else if (kid && !kid->op_sibling) { /* print HANDLE; */
6783 if (kid->op_type == OP_CONST && kid->op_private & OPpCONST_BARE) {
6784 o->op_flags |= OPf_STACKED; /* make it a filehandle */
6785 kid = newUNOP(OP_RV2GV, OPf_REF, scalar(kid));
6786 cLISTOPo->op_first->op_sibling = kid;
6787 cLISTOPo->op_last = kid;
6788 kid = kid->op_sibling;
6793 append_elem(o->op_type, o, newDEFSVOP());
6799 Perl_ck_smartmatch(pTHX_ OP *o)
6802 if (0 == (o->op_flags & OPf_SPECIAL)) {
6803 OP *first = cBINOPo->op_first;
6804 OP *second = first->op_sibling;
6806 /* Implicitly take a reference to an array or hash */
6807 first->op_sibling = NULL;
6808 first = cBINOPo->op_first = ref_array_or_hash(first);
6809 second = first->op_sibling = ref_array_or_hash(second);
6811 /* Implicitly take a reference to a regular expression */
6812 if (first->op_type == OP_MATCH) {
6813 first->op_type = OP_QR;
6814 first->op_ppaddr = PL_ppaddr[OP_QR];
6816 if (second->op_type == OP_MATCH) {
6817 second->op_type = OP_QR;
6818 second->op_ppaddr = PL_ppaddr[OP_QR];
6827 Perl_ck_sassign(pTHX_ OP *o)
6829 OP * const kid = cLISTOPo->op_first;
6830 /* has a disposable target? */
6831 if ((PL_opargs[kid->op_type] & OA_TARGLEX)
6832 && !(kid->op_flags & OPf_STACKED)
6833 /* Cannot steal the second time! */
6834 && !(kid->op_private & OPpTARGET_MY))
6836 OP * const kkid = kid->op_sibling;
6838 /* Can just relocate the target. */
6839 if (kkid && kkid->op_type == OP_PADSV
6840 && !(kkid->op_private & OPpLVAL_INTRO))
6842 kid->op_targ = kkid->op_targ;
6844 /* Now we do not need PADSV and SASSIGN. */
6845 kid->op_sibling = o->op_sibling; /* NULL */
6846 cLISTOPo->op_first = NULL;
6848 op_getmad(o,kid,'O');
6849 op_getmad(kkid,kid,'M');
6854 kid->op_private |= OPpTARGET_MY; /* Used for context settings */
6858 if (kid->op_sibling) {
6859 OP *kkid = kid->op_sibling;
6860 if (kkid->op_type == OP_PADSV
6861 && (kkid->op_private & OPpLVAL_INTRO)
6862 && SvPAD_STATE(*av_fetch(PL_comppad_name, kkid->op_targ, FALSE))) {
6863 o->op_private |= OPpASSIGN_STATE;
6864 /* hijacking PADSTALE for uninitialized state variables */
6865 SvPADSTALE_on(PAD_SVl(kkid->op_targ));
6872 Perl_ck_match(pTHX_ OP *o)
6875 if (o->op_type != OP_QR && PL_compcv) {
6876 const PADOFFSET offset = pad_findmy("$_");
6877 if (offset != NOT_IN_PAD && !(PAD_COMPNAME_FLAGS_isOUR(offset))) {
6878 o->op_targ = offset;
6879 o->op_private |= OPpTARGET_MY;
6882 if (o->op_type == OP_MATCH || o->op_type == OP_QR)
6883 o->op_private |= OPpRUNTIME;
6888 Perl_ck_method(pTHX_ OP *o)
6890 OP * const kid = cUNOPo->op_first;
6891 if (kid->op_type == OP_CONST) {
6892 SV* sv = kSVOP->op_sv;
6893 const char * const method = SvPVX_const(sv);
6894 if (!(strchr(method, ':') || strchr(method, '\''))) {
6896 if (!SvREADONLY(sv) || !SvFAKE(sv)) {
6897 sv = newSVpvn_share(method, SvCUR(sv), 0);
6900 kSVOP->op_sv = NULL;
6902 cmop = newSVOP(OP_METHOD_NAMED, 0, sv);
6904 op_getmad(o,cmop,'O');
6915 Perl_ck_null(pTHX_ OP *o)
6917 PERL_UNUSED_CONTEXT;
6922 Perl_ck_open(pTHX_ OP *o)
6925 HV * const table = GvHV(PL_hintgv);
6927 SV **svp = hv_fetchs(table, "open_IN", FALSE);
6929 const I32 mode = mode_from_discipline(*svp);
6930 if (mode & O_BINARY)
6931 o->op_private |= OPpOPEN_IN_RAW;
6932 else if (mode & O_TEXT)
6933 o->op_private |= OPpOPEN_IN_CRLF;
6936 svp = hv_fetchs(table, "open_OUT", FALSE);
6938 const I32 mode = mode_from_discipline(*svp);
6939 if (mode & O_BINARY)
6940 o->op_private |= OPpOPEN_OUT_RAW;
6941 else if (mode & O_TEXT)
6942 o->op_private |= OPpOPEN_OUT_CRLF;
6945 if (o->op_type == OP_BACKTICK)
6948 /* In case of three-arg dup open remove strictness
6949 * from the last arg if it is a bareword. */
6950 OP * const first = cLISTOPx(o)->op_first; /* The pushmark. */
6951 OP * const last = cLISTOPx(o)->op_last; /* The bareword. */
6955 if ((last->op_type == OP_CONST) && /* The bareword. */
6956 (last->op_private & OPpCONST_BARE) &&
6957 (last->op_private & OPpCONST_STRICT) &&
6958 (oa = first->op_sibling) && /* The fh. */
6959 (oa = oa->op_sibling) && /* The mode. */
6960 (oa->op_type == OP_CONST) &&
6961 SvPOK(((SVOP*)oa)->op_sv) &&
6962 (mode = SvPVX_const(((SVOP*)oa)->op_sv)) &&
6963 mode[0] == '>' && mode[1] == '&' && /* A dup open. */
6964 (last == oa->op_sibling)) /* The bareword. */
6965 last->op_private &= ~OPpCONST_STRICT;
6971 Perl_ck_repeat(pTHX_ OP *o)
6973 if (cBINOPo->op_first->op_flags & OPf_PARENS) {
6974 o->op_private |= OPpREPEAT_DOLIST;
6975 cBINOPo->op_first = force_list(cBINOPo->op_first);
6983 Perl_ck_require(pTHX_ OP *o)
6988 if (o->op_flags & OPf_KIDS) { /* Shall we supply missing .pm? */
6989 SVOP * const kid = (SVOP*)cUNOPo->op_first;
6991 if (kid->op_type == OP_CONST && (kid->op_private & OPpCONST_BARE)) {
6992 SV * const sv = kid->op_sv;
6993 U32 was_readonly = SvREADONLY(sv);
6998 sv_force_normal_flags(sv, 0);
6999 assert(!SvREADONLY(sv));
7006 for (s = SvPVX(sv); *s; s++) {
7007 if (*s == ':' && s[1] == ':') {
7008 const STRLEN len = strlen(s+2)+1;
7010 Move(s+2, s+1, len, char);
7011 SvCUR_set(sv, SvCUR(sv) - 1);
7014 sv_catpvs(sv, ".pm");
7015 SvFLAGS(sv) |= was_readonly;
7019 if (!(o->op_flags & OPf_SPECIAL)) { /* Wasn't written as CORE::require */
7020 /* handle override, if any */
7021 gv = gv_fetchpvs("require", GV_NOTQUAL, SVt_PVCV);
7022 if (!(gv && GvCVu(gv) && GvIMPORTED_CV(gv))) {
7023 GV * const * const gvp = (GV**)hv_fetchs(PL_globalstash, "require", FALSE);
7024 gv = gvp ? *gvp : NULL;
7028 if (gv && GvCVu(gv) && GvIMPORTED_CV(gv)) {
7029 OP * const kid = cUNOPo->op_first;
7032 cUNOPo->op_first = 0;
7036 newop = ck_subr(newUNOP(OP_ENTERSUB, OPf_STACKED,
7037 append_elem(OP_LIST, kid,
7038 scalar(newUNOP(OP_RV2CV, 0,
7041 op_getmad(o,newop,'O');
7049 Perl_ck_return(pTHX_ OP *o)
7052 if (CvLVALUE(PL_compcv)) {
7054 for (kid = cLISTOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
7055 mod(kid, OP_LEAVESUBLV);
7061 Perl_ck_select(pTHX_ OP *o)
7065 if (o->op_flags & OPf_KIDS) {
7066 kid = cLISTOPo->op_first->op_sibling; /* get past pushmark */
7067 if (kid && kid->op_sibling) {
7068 o->op_type = OP_SSELECT;
7069 o->op_ppaddr = PL_ppaddr[OP_SSELECT];
7071 return fold_constants(o);
7075 kid = cLISTOPo->op_first->op_sibling; /* get past pushmark */
7076 if (kid && kid->op_type == OP_RV2GV)
7077 kid->op_private &= ~HINT_STRICT_REFS;
7082 Perl_ck_shift(pTHX_ OP *o)
7085 const I32 type = o->op_type;
7087 if (!(o->op_flags & OPf_KIDS)) {
7089 /* FIXME - this can be refactored to reduce code in #ifdefs */
7091 OP * const oldo = o;
7095 argop = newUNOP(OP_RV2AV, 0,
7096 scalar(newGVOP(OP_GV, 0, CvUNIQUE(PL_compcv) ? PL_argvgv : PL_defgv)));
7098 o = newUNOP(type, 0, scalar(argop));
7099 op_getmad(oldo,o,'O');
7102 return newUNOP(type, 0, scalar(argop));
7105 return scalar(modkids(ck_fun(o), type));
7109 Perl_ck_sort(pTHX_ OP *o)
7114 if (o->op_type == OP_SORT && (PL_hints & HINT_LOCALIZE_HH) != 0) {
7115 HV * const hinthv = GvHV(PL_hintgv);
7117 SV ** const svp = hv_fetchs(hinthv, "sort", FALSE);
7119 const I32 sorthints = (I32)SvIV(*svp);
7120 if ((sorthints & HINT_SORT_QUICKSORT) != 0)
7121 o->op_private |= OPpSORT_QSORT;
7122 if ((sorthints & HINT_SORT_STABLE) != 0)
7123 o->op_private |= OPpSORT_STABLE;
7128 if (o->op_type == OP_SORT && o->op_flags & OPf_STACKED)
7130 firstkid = cLISTOPo->op_first->op_sibling; /* get past pushmark */
7131 if (o->op_flags & OPf_STACKED) { /* may have been cleared */
7133 OP *kid = cUNOPx(firstkid)->op_first; /* get past null */
7135 if (kid->op_type == OP_SCOPE || kid->op_type == OP_LEAVE) {
7137 if (kid->op_type == OP_SCOPE) {
7141 else if (kid->op_type == OP_LEAVE) {
7142 if (o->op_type == OP_SORT) {
7143 op_null(kid); /* wipe out leave */
7146 for (k = kLISTOP->op_first->op_next; k; k = k->op_next) {
7147 if (k->op_next == kid)
7149 /* don't descend into loops */
7150 else if (k->op_type == OP_ENTERLOOP
7151 || k->op_type == OP_ENTERITER)
7153 k = cLOOPx(k)->op_lastop;
7158 kid->op_next = 0; /* just disconnect the leave */
7159 k = kLISTOP->op_first;
7164 if (o->op_type == OP_SORT) {
7165 /* provide scalar context for comparison function/block */
7171 o->op_flags |= OPf_SPECIAL;
7173 else if (kid->op_type == OP_RV2SV || kid->op_type == OP_PADSV)
7176 firstkid = firstkid->op_sibling;
7179 /* provide list context for arguments */
7180 if (o->op_type == OP_SORT)
7187 S_simplify_sort(pTHX_ OP *o)
7190 register OP *kid = cLISTOPo->op_first->op_sibling; /* get past pushmark */
7195 if (!(o->op_flags & OPf_STACKED))
7197 GvMULTI_on(gv_fetchpvs("a", GV_ADD|GV_NOTQUAL, SVt_PV));
7198 GvMULTI_on(gv_fetchpvs("b", GV_ADD|GV_NOTQUAL, SVt_PV));
7199 kid = kUNOP->op_first; /* get past null */
7200 if (kid->op_type != OP_SCOPE)
7202 kid = kLISTOP->op_last; /* get past scope */
7203 switch(kid->op_type) {
7211 k = kid; /* remember this node*/
7212 if (kBINOP->op_first->op_type != OP_RV2SV)
7214 kid = kBINOP->op_first; /* get past cmp */
7215 if (kUNOP->op_first->op_type != OP_GV)
7217 kid = kUNOP->op_first; /* get past rv2sv */
7219 if (GvSTASH(gv) != PL_curstash)
7221 gvname = GvNAME(gv);
7222 if (*gvname == 'a' && gvname[1] == '\0')
7224 else if (*gvname == 'b' && gvname[1] == '\0')
7229 kid = k; /* back to cmp */
7230 if (kBINOP->op_last->op_type != OP_RV2SV)
7232 kid = kBINOP->op_last; /* down to 2nd arg */
7233 if (kUNOP->op_first->op_type != OP_GV)
7235 kid = kUNOP->op_first; /* get past rv2sv */
7237 if (GvSTASH(gv) != PL_curstash)
7239 gvname = GvNAME(gv);
7241 ? !(*gvname == 'a' && gvname[1] == '\0')
7242 : !(*gvname == 'b' && gvname[1] == '\0'))
7244 o->op_flags &= ~(OPf_STACKED | OPf_SPECIAL);
7246 o->op_private |= OPpSORT_DESCEND;
7247 if (k->op_type == OP_NCMP)
7248 o->op_private |= OPpSORT_NUMERIC;
7249 if (k->op_type == OP_I_NCMP)
7250 o->op_private |= OPpSORT_NUMERIC | OPpSORT_INTEGER;
7251 kid = cLISTOPo->op_first->op_sibling;
7252 cLISTOPo->op_first->op_sibling = kid->op_sibling; /* bypass old block */
7254 op_getmad(kid,o,'S'); /* then delete it */
7256 op_free(kid); /* then delete it */
7261 Perl_ck_split(pTHX_ OP *o)
7266 if (o->op_flags & OPf_STACKED)
7267 return no_fh_allowed(o);
7269 kid = cLISTOPo->op_first;
7270 if (kid->op_type != OP_NULL)
7271 Perl_croak(aTHX_ "panic: ck_split");
7272 kid = kid->op_sibling;
7273 op_free(cLISTOPo->op_first);
7274 cLISTOPo->op_first = kid;
7276 cLISTOPo->op_first = kid = newSVOP(OP_CONST, 0, newSVpvs(" "));
7277 cLISTOPo->op_last = kid; /* There was only one element previously */
7280 if (kid->op_type != OP_MATCH || kid->op_flags & OPf_STACKED) {
7281 OP * const sibl = kid->op_sibling;
7282 kid->op_sibling = 0;
7283 kid = pmruntime( newPMOP(OP_MATCH, OPf_SPECIAL), kid, 0);
7284 if (cLISTOPo->op_first == cLISTOPo->op_last)
7285 cLISTOPo->op_last = kid;
7286 cLISTOPo->op_first = kid;
7287 kid->op_sibling = sibl;
7290 kid->op_type = OP_PUSHRE;
7291 kid->op_ppaddr = PL_ppaddr[OP_PUSHRE];
7293 if (((PMOP *)kid)->op_pmflags & PMf_GLOBAL && ckWARN(WARN_REGEXP)) {
7294 Perl_warner(aTHX_ packWARN(WARN_REGEXP),
7295 "Use of /g modifier is meaningless in split");
7298 if (!kid->op_sibling)
7299 append_elem(OP_SPLIT, o, newDEFSVOP());
7301 kid = kid->op_sibling;
7304 if (!kid->op_sibling)
7305 append_elem(OP_SPLIT, o, newSVOP(OP_CONST, 0, newSViv(0)));
7306 assert(kid->op_sibling);
7308 kid = kid->op_sibling;
7311 if (kid->op_sibling)
7312 return too_many_arguments(o,OP_DESC(o));
7318 Perl_ck_join(pTHX_ OP *o)
7320 const OP * const kid = cLISTOPo->op_first->op_sibling;
7321 if (kid && kid->op_type == OP_MATCH) {
7322 if (ckWARN(WARN_SYNTAX)) {
7323 const REGEXP *re = PM_GETRE(kPMOP);
7324 const char *pmstr = re ? re->precomp : "STRING";
7325 Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
7326 "/%s/ should probably be written as \"%s\"",
7334 Perl_ck_subr(pTHX_ OP *o)
7337 OP *prev = ((cUNOPo->op_first->op_sibling)
7338 ? cUNOPo : ((UNOP*)cUNOPo->op_first))->op_first;
7339 OP *o2 = prev->op_sibling;
7341 const char *proto = NULL;
7342 const char *proto_end = NULL;
7347 I32 contextclass = 0;
7348 const char *e = NULL;
7351 o->op_private |= OPpENTERSUB_HASTARG;
7352 for (cvop = o2; cvop->op_sibling; cvop = cvop->op_sibling) ;
7353 if (cvop->op_type == OP_RV2CV) {
7355 o->op_private |= (cvop->op_private & OPpENTERSUB_AMPER);
7356 op_null(cvop); /* disable rv2cv */
7357 tmpop = (SVOP*)((UNOP*)cvop)->op_first;
7358 if (tmpop->op_type == OP_GV && !(o->op_private & OPpENTERSUB_AMPER)) {
7359 GV *gv = cGVOPx_gv(tmpop);
7362 tmpop->op_private |= OPpEARLY_CV;
7366 namegv = CvANON(cv) ? gv : CvGV(cv);
7367 proto = SvPV((SV*)cv, len);
7368 proto_end = proto + len;
7370 if (CvASSERTION(cv)) {
7371 U32 asserthints = 0;
7372 HV *const hinthv = GvHV(PL_hintgv);
7374 SV **svp = hv_fetchs(hinthv, "assertions", FALSE);
7376 asserthints = SvUV(*svp);
7378 if (asserthints & HINT_ASSERTING) {
7379 if (PERLDB_ASSERTION && PL_curstash != PL_debstash)
7380 o->op_private |= OPpENTERSUB_DB;
7384 if (!(asserthints & HINT_ASSERTIONSSEEN) && ckWARN(WARN_ASSERTIONS)) {
7385 Perl_warner(aTHX_ packWARN(WARN_ASSERTIONS),
7386 "Impossible to activate assertion call");
7393 else if (cvop->op_type == OP_METHOD || cvop->op_type == OP_METHOD_NAMED) {
7394 if (o2->op_type == OP_CONST)
7395 o2->op_private &= ~OPpCONST_STRICT;
7396 else if (o2->op_type == OP_LIST) {
7397 OP * const sib = ((UNOP*)o2)->op_first->op_sibling;
7398 if (sib && sib->op_type == OP_CONST)
7399 sib->op_private &= ~OPpCONST_STRICT;
7402 o->op_private |= (PL_hints & HINT_STRICT_REFS);
7403 if (PERLDB_SUB && PL_curstash != PL_debstash)
7404 o->op_private |= OPpENTERSUB_DB;
7405 while (o2 != cvop) {
7407 if (PL_madskills && o2->op_type == OP_NULL)
7408 o3 = ((UNOP*)o2)->op_first;
7412 if (proto >= proto_end)
7413 return too_many_arguments(o, gv_ename(namegv));
7421 /* _ must be at the end */
7422 if (proto[1] && proto[1] != ';')
7437 if (o3->op_type != OP_REFGEN && o3->op_type != OP_UNDEF)
7439 arg == 1 ? "block or sub {}" : "sub {}",
7440 gv_ename(namegv), o3);
7443 /* '*' allows any scalar type, including bareword */
7446 if (o3->op_type == OP_RV2GV)
7447 goto wrapref; /* autoconvert GLOB -> GLOBref */
7448 else if (o3->op_type == OP_CONST)
7449 o3->op_private &= ~OPpCONST_STRICT;
7450 else if (o3->op_type == OP_ENTERSUB) {
7451 /* accidental subroutine, revert to bareword */
7452 OP *gvop = ((UNOP*)o3)->op_first;
7453 if (gvop && gvop->op_type == OP_NULL) {
7454 gvop = ((UNOP*)gvop)->op_first;
7456 for (; gvop->op_sibling; gvop = gvop->op_sibling)
7459 (gvop->op_private & OPpENTERSUB_NOPAREN) &&
7460 (gvop = ((UNOP*)gvop)->op_first) &&
7461 gvop->op_type == OP_GV)
7463 GV * const gv = cGVOPx_gv(gvop);
7464 OP * const sibling = o2->op_sibling;
7465 SV * const n = newSVpvs("");
7467 OP * const oldo2 = o2;
7471 gv_fullname4(n, gv, "", FALSE);
7472 o2 = newSVOP(OP_CONST, 0, n);
7473 op_getmad(oldo2,o2,'O');
7474 prev->op_sibling = o2;
7475 o2->op_sibling = sibling;
7491 if (contextclass++ == 0) {
7492 e = strchr(proto, ']');
7493 if (!e || e == proto)
7502 const char *p = proto;
7503 const char *const end = proto;
7505 while (*--p != '[');
7506 bad_type(arg, Perl_form(aTHX_ "one of %.*s",
7508 gv_ename(namegv), o3);
7513 if (o3->op_type == OP_RV2GV)
7516 bad_type(arg, "symbol", gv_ename(namegv), o3);
7519 if (o3->op_type == OP_ENTERSUB)
7522 bad_type(arg, "subroutine entry", gv_ename(namegv),
7526 if (o3->op_type == OP_RV2SV ||
7527 o3->op_type == OP_PADSV ||
7528 o3->op_type == OP_HELEM ||
7529 o3->op_type == OP_AELEM ||
7530 o3->op_type == OP_THREADSV)
7533 bad_type(arg, "scalar", gv_ename(namegv), o3);
7536 if (o3->op_type == OP_RV2AV ||
7537 o3->op_type == OP_PADAV)
7540 bad_type(arg, "array", gv_ename(namegv), o3);
7543 if (o3->op_type == OP_RV2HV ||
7544 o3->op_type == OP_PADHV)
7547 bad_type(arg, "hash", gv_ename(namegv), o3);
7552 OP* const sib = kid->op_sibling;
7553 kid->op_sibling = 0;
7554 o2 = newUNOP(OP_REFGEN, 0, kid);
7555 o2->op_sibling = sib;
7556 prev->op_sibling = o2;
7558 if (contextclass && e) {
7573 Perl_croak(aTHX_ "Malformed prototype for %s: %"SVf,
7574 gv_ename(namegv), (void*)cv);
7579 mod(o2, OP_ENTERSUB);
7581 o2 = o2->op_sibling;
7583 if (o2 == cvop && proto && *proto == '_') {
7584 /* generate an access to $_ */
7586 o2->op_sibling = prev->op_sibling;
7587 prev->op_sibling = o2; /* instead of cvop */
7589 if (proto && !optional && proto_end > proto &&
7590 (*proto != '@' && *proto != '%' && *proto != ';' && *proto != '_'))
7591 return too_few_arguments(o, gv_ename(namegv));
7594 OP * const oldo = o;
7598 o=newSVOP(OP_CONST, 0, newSViv(0));
7599 op_getmad(oldo,o,'O');
7605 Perl_ck_svconst(pTHX_ OP *o)
7607 PERL_UNUSED_CONTEXT;
7608 SvREADONLY_on(cSVOPo->op_sv);
7613 Perl_ck_chdir(pTHX_ OP *o)
7615 if (o->op_flags & OPf_KIDS) {
7616 SVOP * const kid = (SVOP*)cUNOPo->op_first;
7618 if (kid && kid->op_type == OP_CONST &&
7619 (kid->op_private & OPpCONST_BARE))
7621 o->op_flags |= OPf_SPECIAL;
7622 kid->op_private &= ~OPpCONST_STRICT;
7629 Perl_ck_trunc(pTHX_ OP *o)
7631 if (o->op_flags & OPf_KIDS) {
7632 SVOP *kid = (SVOP*)cUNOPo->op_first;
7634 if (kid->op_type == OP_NULL)
7635 kid = (SVOP*)kid->op_sibling;
7636 if (kid && kid->op_type == OP_CONST &&
7637 (kid->op_private & OPpCONST_BARE))
7639 o->op_flags |= OPf_SPECIAL;
7640 kid->op_private &= ~OPpCONST_STRICT;
7647 Perl_ck_unpack(pTHX_ OP *o)
7649 OP *kid = cLISTOPo->op_first;
7650 if (kid->op_sibling) {
7651 kid = kid->op_sibling;
7652 if (!kid->op_sibling)
7653 kid->op_sibling = newDEFSVOP();
7659 Perl_ck_substr(pTHX_ OP *o)
7662 if ((o->op_flags & OPf_KIDS) && (o->op_private == 4)) {
7663 OP *kid = cLISTOPo->op_first;
7665 if (kid->op_type == OP_NULL)
7666 kid = kid->op_sibling;
7668 kid->op_flags |= OPf_MOD;
7674 /* A peephole optimizer. We visit the ops in the order they're to execute.
7675 * See the comments at the top of this file for more details about when
7676 * peep() is called */
7679 Perl_peep(pTHX_ register OP *o)
7682 register OP* oldop = NULL;
7684 if (!o || o->op_opt)
7688 SAVEVPTR(PL_curcop);
7689 for (; o; o = o->op_next) {
7693 switch (o->op_type) {
7697 PL_curcop = ((COP*)o); /* for warnings */
7702 if (cSVOPo->op_private & OPpCONST_STRICT)
7703 no_bareword_allowed(o);
7705 case OP_METHOD_NAMED:
7706 /* Relocate sv to the pad for thread safety.
7707 * Despite being a "constant", the SV is written to,
7708 * for reference counts, sv_upgrade() etc. */
7710 const PADOFFSET ix = pad_alloc(OP_CONST, SVs_PADTMP);
7711 if (o->op_type == OP_CONST && SvPADTMP(cSVOPo->op_sv)) {
7712 /* If op_sv is already a PADTMP then it is being used by
7713 * some pad, so make a copy. */
7714 sv_setsv(PAD_SVl(ix),cSVOPo->op_sv);
7715 SvREADONLY_on(PAD_SVl(ix));
7716 SvREFCNT_dec(cSVOPo->op_sv);
7718 else if (o->op_type == OP_CONST
7719 && cSVOPo->op_sv == &PL_sv_undef) {
7720 /* PL_sv_undef is hack - it's unsafe to store it in the
7721 AV that is the pad, because av_fetch treats values of
7722 PL_sv_undef as a "free" AV entry and will merrily
7723 replace them with a new SV, causing pad_alloc to think
7724 that this pad slot is free. (When, clearly, it is not)
7726 SvOK_off(PAD_SVl(ix));
7727 SvPADTMP_on(PAD_SVl(ix));
7728 SvREADONLY_on(PAD_SVl(ix));
7731 SvREFCNT_dec(PAD_SVl(ix));
7732 SvPADTMP_on(cSVOPo->op_sv);
7733 PAD_SETSV(ix, cSVOPo->op_sv);
7734 /* XXX I don't know how this isn't readonly already. */
7735 SvREADONLY_on(PAD_SVl(ix));
7737 cSVOPo->op_sv = NULL;
7745 if (o->op_next && o->op_next->op_type == OP_STRINGIFY) {
7746 if (o->op_next->op_private & OPpTARGET_MY) {
7747 if (o->op_flags & OPf_STACKED) /* chained concats */
7748 goto ignore_optimization;
7750 /* assert(PL_opargs[o->op_type] & OA_TARGLEX); */
7751 o->op_targ = o->op_next->op_targ;
7752 o->op_next->op_targ = 0;
7753 o->op_private |= OPpTARGET_MY;
7756 op_null(o->op_next);
7758 ignore_optimization:
7762 if ((o->op_flags & OPf_WANT) != OPf_WANT_LIST) {
7764 break; /* Scalar stub must produce undef. List stub is noop */
7768 if (o->op_targ == OP_NEXTSTATE
7769 || o->op_targ == OP_DBSTATE
7770 || o->op_targ == OP_SETSTATE)
7772 PL_curcop = ((COP*)o);
7774 /* XXX: We avoid setting op_seq here to prevent later calls
7775 to peep() from mistakenly concluding that optimisation
7776 has already occurred. This doesn't fix the real problem,
7777 though (See 20010220.007). AMS 20010719 */
7778 /* op_seq functionality is now replaced by op_opt */
7779 if (oldop && o->op_next) {
7780 oldop->op_next = o->op_next;
7788 if (oldop && o->op_next) {
7789 oldop->op_next = o->op_next;
7797 if (o->op_type == OP_PADAV || o->op_next->op_type == OP_RV2AV) {
7798 OP* const pop = (o->op_type == OP_PADAV) ?
7799 o->op_next : o->op_next->op_next;
7801 if (pop && pop->op_type == OP_CONST &&
7802 ((PL_op = pop->op_next)) &&
7803 pop->op_next->op_type == OP_AELEM &&
7804 !(pop->op_next->op_private &
7805 (OPpLVAL_INTRO|OPpLVAL_DEFER|OPpDEREF|OPpMAYBE_LVSUB)) &&
7806 (i = SvIV(((SVOP*)pop)->op_sv) - CopARYBASE_get(PL_curcop))
7811 if (cSVOPx(pop)->op_private & OPpCONST_STRICT)
7812 no_bareword_allowed(pop);
7813 if (o->op_type == OP_GV)
7814 op_null(o->op_next);
7815 op_null(pop->op_next);
7817 o->op_flags |= pop->op_next->op_flags & OPf_MOD;
7818 o->op_next = pop->op_next->op_next;
7819 o->op_ppaddr = PL_ppaddr[OP_AELEMFAST];
7820 o->op_private = (U8)i;
7821 if (o->op_type == OP_GV) {
7826 o->op_flags |= OPf_SPECIAL;
7827 o->op_type = OP_AELEMFAST;
7833 if (o->op_next->op_type == OP_RV2SV) {
7834 if (!(o->op_next->op_private & OPpDEREF)) {
7835 op_null(o->op_next);
7836 o->op_private |= o->op_next->op_private & (OPpLVAL_INTRO
7838 o->op_next = o->op_next->op_next;
7839 o->op_type = OP_GVSV;
7840 o->op_ppaddr = PL_ppaddr[OP_GVSV];
7843 else if ((o->op_private & OPpEARLY_CV) && ckWARN(WARN_PROTOTYPE)) {
7844 GV * const gv = cGVOPo_gv;
7845 if (SvTYPE(gv) == SVt_PVGV && GvCV(gv) && SvPVX_const(GvCV(gv))) {
7846 /* XXX could check prototype here instead of just carping */
7847 SV * const sv = sv_newmortal();
7848 gv_efullname3(sv, gv, NULL);
7849 Perl_warner(aTHX_ packWARN(WARN_PROTOTYPE),
7850 "%"SVf"() called too early to check prototype",
7854 else if (o->op_next->op_type == OP_READLINE
7855 && o->op_next->op_next->op_type == OP_CONCAT
7856 && (o->op_next->op_next->op_flags & OPf_STACKED))
7858 /* Turn "$a .= <FH>" into an OP_RCATLINE. AMS 20010917 */
7859 o->op_type = OP_RCATLINE;
7860 o->op_flags |= OPf_STACKED;
7861 o->op_ppaddr = PL_ppaddr[OP_RCATLINE];
7862 op_null(o->op_next->op_next);
7863 op_null(o->op_next);
7880 while (cLOGOP->op_other->op_type == OP_NULL)
7881 cLOGOP->op_other = cLOGOP->op_other->op_next;
7882 peep(cLOGOP->op_other); /* Recursive calls are not replaced by fptr calls */
7888 while (cLOOP->op_redoop->op_type == OP_NULL)
7889 cLOOP->op_redoop = cLOOP->op_redoop->op_next;
7890 peep(cLOOP->op_redoop);
7891 while (cLOOP->op_nextop->op_type == OP_NULL)
7892 cLOOP->op_nextop = cLOOP->op_nextop->op_next;
7893 peep(cLOOP->op_nextop);
7894 while (cLOOP->op_lastop->op_type == OP_NULL)
7895 cLOOP->op_lastop = cLOOP->op_lastop->op_next;
7896 peep(cLOOP->op_lastop);
7903 while (cPMOP->op_pmreplstart &&
7904 cPMOP->op_pmreplstart->op_type == OP_NULL)
7905 cPMOP->op_pmreplstart = cPMOP->op_pmreplstart->op_next;
7906 peep(cPMOP->op_pmreplstart);
7911 if (o->op_next && o->op_next->op_type == OP_NEXTSTATE
7912 && ckWARN(WARN_SYNTAX))
7914 if (o->op_next->op_sibling) {
7915 const OPCODE type = o->op_next->op_sibling->op_type;
7916 if (type != OP_EXIT && type != OP_WARN && type != OP_DIE) {
7917 const line_t oldline = CopLINE(PL_curcop);
7918 CopLINE_set(PL_curcop, CopLINE((COP*)o->op_next));
7919 Perl_warner(aTHX_ packWARN(WARN_EXEC),
7920 "Statement unlikely to be reached");
7921 Perl_warner(aTHX_ packWARN(WARN_EXEC),
7922 "\t(Maybe you meant system() when you said exec()?)\n");
7923 CopLINE_set(PL_curcop, oldline);
7934 const char *key = NULL;
7939 if (((BINOP*)o)->op_last->op_type != OP_CONST)
7942 /* Make the CONST have a shared SV */
7943 svp = cSVOPx_svp(((BINOP*)o)->op_last);
7944 if ((!SvFAKE(sv = *svp) || !SvREADONLY(sv)) && !IS_PADCONST(sv)) {
7945 key = SvPV_const(sv, keylen);
7946 lexname = newSVpvn_share(key,
7947 SvUTF8(sv) ? -(I32)keylen : (I32)keylen,
7953 if ((o->op_private & (OPpLVAL_INTRO)))
7956 rop = (UNOP*)((BINOP*)o)->op_first;
7957 if (rop->op_type != OP_RV2HV || rop->op_first->op_type != OP_PADSV)
7959 lexname = *av_fetch(PL_comppad_name, rop->op_first->op_targ, TRUE);
7960 if (!SvPAD_TYPED(lexname))
7962 fields = (GV**)hv_fetchs(SvSTASH(lexname), "FIELDS", FALSE);
7963 if (!fields || !GvHV(*fields))
7965 key = SvPV_const(*svp, keylen);
7966 if (!hv_fetch(GvHV(*fields), key,
7967 SvUTF8(*svp) ? -(I32)keylen : (I32)keylen, FALSE))
7969 Perl_croak(aTHX_ "No such class field \"%s\" "
7970 "in variable %s of type %s",
7971 key, SvPV_nolen_const(lexname), HvNAME_get(SvSTASH(lexname)));
7984 SVOP *first_key_op, *key_op;
7986 if ((o->op_private & (OPpLVAL_INTRO))
7987 /* I bet there's always a pushmark... */
7988 || ((LISTOP*)o)->op_first->op_sibling->op_type != OP_LIST)
7989 /* hmmm, no optimization if list contains only one key. */
7991 rop = (UNOP*)((LISTOP*)o)->op_last;
7992 if (rop->op_type != OP_RV2HV)
7994 if (rop->op_first->op_type == OP_PADSV)
7995 /* @$hash{qw(keys here)} */
7996 rop = (UNOP*)rop->op_first;
7998 /* @{$hash}{qw(keys here)} */
7999 if (rop->op_first->op_type == OP_SCOPE
8000 && cLISTOPx(rop->op_first)->op_last->op_type == OP_PADSV)
8002 rop = (UNOP*)cLISTOPx(rop->op_first)->op_last;
8008 lexname = *av_fetch(PL_comppad_name, rop->op_targ, TRUE);
8009 if (!SvPAD_TYPED(lexname))
8011 fields = (GV**)hv_fetchs(SvSTASH(lexname), "FIELDS", FALSE);
8012 if (!fields || !GvHV(*fields))
8014 /* Again guessing that the pushmark can be jumped over.... */
8015 first_key_op = (SVOP*)((LISTOP*)((LISTOP*)o)->op_first->op_sibling)
8016 ->op_first->op_sibling;
8017 for (key_op = first_key_op; key_op;
8018 key_op = (SVOP*)key_op->op_sibling) {
8019 if (key_op->op_type != OP_CONST)
8021 svp = cSVOPx_svp(key_op);
8022 key = SvPV_const(*svp, keylen);
8023 if (!hv_fetch(GvHV(*fields), key,
8024 SvUTF8(*svp) ? -(I32)keylen : (I32)keylen, FALSE))
8026 Perl_croak(aTHX_ "No such class field \"%s\" "
8027 "in variable %s of type %s",
8028 key, SvPV_nolen(lexname), HvNAME_get(SvSTASH(lexname)));
8035 /* will point to RV2AV or PADAV op on LHS/RHS of assign */
8039 /* check that RHS of sort is a single plain array */
8040 OP *oright = cUNOPo->op_first;
8041 if (!oright || oright->op_type != OP_PUSHMARK)
8044 /* reverse sort ... can be optimised. */
8045 if (!cUNOPo->op_sibling) {
8046 /* Nothing follows us on the list. */
8047 OP * const reverse = o->op_next;
8049 if (reverse->op_type == OP_REVERSE &&
8050 (reverse->op_flags & OPf_WANT) == OPf_WANT_LIST) {
8051 OP * const pushmark = cUNOPx(reverse)->op_first;
8052 if (pushmark && (pushmark->op_type == OP_PUSHMARK)
8053 && (cUNOPx(pushmark)->op_sibling == o)) {
8054 /* reverse -> pushmark -> sort */
8055 o->op_private |= OPpSORT_REVERSE;
8057 pushmark->op_next = oright->op_next;
8063 /* make @a = sort @a act in-place */
8067 oright = cUNOPx(oright)->op_sibling;
8070 if (oright->op_type == OP_NULL) { /* skip sort block/sub */
8071 oright = cUNOPx(oright)->op_sibling;
8075 (oright->op_type != OP_RV2AV && oright->op_type != OP_PADAV)
8076 || oright->op_next != o
8077 || (oright->op_private & OPpLVAL_INTRO)
8081 /* o2 follows the chain of op_nexts through the LHS of the
8082 * assign (if any) to the aassign op itself */
8084 if (!o2 || o2->op_type != OP_NULL)
8087 if (!o2 || o2->op_type != OP_PUSHMARK)
8090 if (o2 && o2->op_type == OP_GV)
8093 || (o2->op_type != OP_PADAV && o2->op_type != OP_RV2AV)
8094 || (o2->op_private & OPpLVAL_INTRO)
8099 if (!o2 || o2->op_type != OP_NULL)
8102 if (!o2 || o2->op_type != OP_AASSIGN
8103 || (o2->op_flags & OPf_WANT) != OPf_WANT_VOID)
8106 /* check that the sort is the first arg on RHS of assign */
8108 o2 = cUNOPx(o2)->op_first;
8109 if (!o2 || o2->op_type != OP_NULL)
8111 o2 = cUNOPx(o2)->op_first;
8112 if (!o2 || o2->op_type != OP_PUSHMARK)
8114 if (o2->op_sibling != o)
8117 /* check the array is the same on both sides */
8118 if (oleft->op_type == OP_RV2AV) {
8119 if (oright->op_type != OP_RV2AV
8120 || !cUNOPx(oright)->op_first
8121 || cUNOPx(oright)->op_first->op_type != OP_GV
8122 || cGVOPx_gv(cUNOPx(oleft)->op_first) !=
8123 cGVOPx_gv(cUNOPx(oright)->op_first)
8127 else if (oright->op_type != OP_PADAV
8128 || oright->op_targ != oleft->op_targ
8132 /* transfer MODishness etc from LHS arg to RHS arg */
8133 oright->op_flags = oleft->op_flags;
8134 o->op_private |= OPpSORT_INPLACE;
8136 /* excise push->gv->rv2av->null->aassign */
8137 o2 = o->op_next->op_next;
8138 op_null(o2); /* PUSHMARK */
8140 if (o2->op_type == OP_GV) {
8141 op_null(o2); /* GV */
8144 op_null(o2); /* RV2AV or PADAV */
8145 o2 = o2->op_next->op_next;
8146 op_null(o2); /* AASSIGN */
8148 o->op_next = o2->op_next;
8154 OP *ourmark, *theirmark, *ourlast, *iter, *expushmark, *rv2av;
8156 LISTOP *enter, *exlist;
8159 enter = (LISTOP *) o->op_next;
8162 if (enter->op_type == OP_NULL) {
8163 enter = (LISTOP *) enter->op_next;
8167 /* for $a (...) will have OP_GV then OP_RV2GV here.
8168 for (...) just has an OP_GV. */
8169 if (enter->op_type == OP_GV) {
8170 gvop = (OP *) enter;
8171 enter = (LISTOP *) enter->op_next;
8174 if (enter->op_type == OP_RV2GV) {
8175 enter = (LISTOP *) enter->op_next;
8181 if (enter->op_type != OP_ENTERITER)
8184 iter = enter->op_next;
8185 if (!iter || iter->op_type != OP_ITER)
8188 expushmark = enter->op_first;
8189 if (!expushmark || expushmark->op_type != OP_NULL
8190 || expushmark->op_targ != OP_PUSHMARK)
8193 exlist = (LISTOP *) expushmark->op_sibling;
8194 if (!exlist || exlist->op_type != OP_NULL
8195 || exlist->op_targ != OP_LIST)
8198 if (exlist->op_last != o) {
8199 /* Mmm. Was expecting to point back to this op. */
8202 theirmark = exlist->op_first;
8203 if (!theirmark || theirmark->op_type != OP_PUSHMARK)
8206 if (theirmark->op_sibling != o) {
8207 /* There's something between the mark and the reverse, eg
8208 for (1, reverse (...))
8213 ourmark = ((LISTOP *)o)->op_first;
8214 if (!ourmark || ourmark->op_type != OP_PUSHMARK)
8217 ourlast = ((LISTOP *)o)->op_last;
8218 if (!ourlast || ourlast->op_next != o)
8221 rv2av = ourmark->op_sibling;
8222 if (rv2av && rv2av->op_type == OP_RV2AV && rv2av->op_sibling == 0
8223 && rv2av->op_flags == (OPf_WANT_LIST | OPf_KIDS)
8224 && enter->op_flags == (OPf_WANT_LIST | OPf_KIDS)) {
8225 /* We're just reversing a single array. */
8226 rv2av->op_flags = OPf_WANT_SCALAR | OPf_KIDS | OPf_REF;
8227 enter->op_flags |= OPf_STACKED;
8230 /* We don't have control over who points to theirmark, so sacrifice
8232 theirmark->op_next = ourmark->op_next;
8233 theirmark->op_flags = ourmark->op_flags;
8234 ourlast->op_next = gvop ? gvop : (OP *) enter;
8237 enter->op_private |= OPpITER_REVERSED;
8238 iter->op_private |= OPpITER_REVERSED;
8245 UNOP *refgen, *rv2cv;
8248 /* I do not understand this, but if o->op_opt isn't set to 1,
8249 various tests in ext/B/t/bytecode.t fail with no readily
8255 if ((o->op_flags && OPf_WANT) != OPf_WANT_VOID)
8258 if ((o->op_private & ~OPpASSIGN_BACKWARDS) != 2)
8261 rv2gv = ((BINOP *)o)->op_last;
8262 if (!rv2gv || rv2gv->op_type != OP_RV2GV)
8265 refgen = (UNOP *)((BINOP *)o)->op_first;
8267 if (!refgen || refgen->op_type != OP_REFGEN)
8270 exlist = (LISTOP *)refgen->op_first;
8271 if (!exlist || exlist->op_type != OP_NULL
8272 || exlist->op_targ != OP_LIST)
8275 if (exlist->op_first->op_type != OP_PUSHMARK)
8278 rv2cv = (UNOP*)exlist->op_last;
8280 if (rv2cv->op_type != OP_RV2CV)
8283 assert ((rv2gv->op_private & OPpDONT_INIT_GV) == 0);
8284 assert ((o->op_private & OPpASSIGN_CV_TO_GV) == 0);
8285 assert ((rv2cv->op_private & OPpMAY_RETURN_CONSTANT) == 0);
8287 o->op_private |= OPpASSIGN_CV_TO_GV;
8288 rv2gv->op_private |= OPpDONT_INIT_GV;
8289 rv2cv->op_private |= OPpMAY_RETURN_CONSTANT;
8305 Perl_custom_op_name(pTHX_ const OP* o)
8308 const IV index = PTR2IV(o->op_ppaddr);
8312 if (!PL_custom_op_names) /* This probably shouldn't happen */
8313 return (char *)PL_op_name[OP_CUSTOM];
8315 keysv = sv_2mortal(newSViv(index));
8317 he = hv_fetch_ent(PL_custom_op_names, keysv, 0, 0);
8319 return (char *)PL_op_name[OP_CUSTOM]; /* Don't know who you are */
8321 return SvPV_nolen(HeVAL(he));
8325 Perl_custom_op_desc(pTHX_ const OP* o)
8328 const IV index = PTR2IV(o->op_ppaddr);
8332 if (!PL_custom_op_descs)
8333 return (char *)PL_op_desc[OP_CUSTOM];
8335 keysv = sv_2mortal(newSViv(index));
8337 he = hv_fetch_ent(PL_custom_op_descs, keysv, 0, 0);
8339 return (char *)PL_op_desc[OP_CUSTOM];
8341 return SvPV_nolen(HeVAL(he));
8346 /* Efficient sub that returns a constant scalar value. */
8348 const_sv_xsub(pTHX_ CV* cv)
8355 Perl_croak(aTHX_ "usage: %s::%s()",
8356 HvNAME_get(GvSTASH(CvGV(cv))), GvNAME(CvGV(cv)));
8360 ST(0) = (SV*)XSANY.any_ptr;
8366 * c-indentation-style: bsd
8368 * indent-tabs-mode: t
8371 * ex: set ts=8 sts=4 sw=4 noet: