3 * Copyright (C) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
4 * 2000, 2001, 2002, 2003, 2004, 2005, 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.
81 #define CALL_PEEP(o) CALL_FPTR(PL_peepp)(aTHX_ o)
83 #if defined(PL_OP_SLAB_ALLOC)
85 #ifndef PERL_SLAB_SIZE
86 #define PERL_SLAB_SIZE 2048
90 Perl_Slab_Alloc(pTHX_ int m, size_t sz)
93 * To make incrementing use count easy PL_OpSlab is an I32 *
94 * To make inserting the link to slab PL_OpPtr is I32 **
95 * So compute size in units of sizeof(I32 *) as that is how Pl_OpPtr increments
96 * Add an overhead for pointer to slab and round up as a number of pointers
98 sz = (sz + 2*sizeof(I32 *) -1)/sizeof(I32 *);
99 if ((PL_OpSpace -= sz) < 0) {
100 PL_OpPtr = (I32 **) PerlMemShared_malloc(PERL_SLAB_SIZE*sizeof(I32*));
104 Zero(PL_OpPtr,PERL_SLAB_SIZE,I32 **);
105 /* We reserve the 0'th I32 sized chunk as a use count */
106 PL_OpSlab = (I32 *) PL_OpPtr;
107 /* Reduce size by the use count word, and by the size we need.
108 * Latter is to mimic the '-=' in the if() above
110 PL_OpSpace = PERL_SLAB_SIZE - (sizeof(I32)+sizeof(I32 **)-1)/sizeof(I32 **) - sz;
111 /* Allocation pointer starts at the top.
112 Theory: because we build leaves before trunk allocating at end
113 means that at run time access is cache friendly upward
115 PL_OpPtr += PERL_SLAB_SIZE;
117 assert( PL_OpSpace >= 0 );
118 /* Move the allocation pointer down */
120 assert( PL_OpPtr > (I32 **) PL_OpSlab );
121 *PL_OpPtr = PL_OpSlab; /* Note which slab it belongs to */
122 (*PL_OpSlab)++; /* Increment use count of slab */
123 assert( PL_OpPtr+sz <= ((I32 **) PL_OpSlab + PERL_SLAB_SIZE) );
124 assert( *PL_OpSlab > 0 );
125 return (void *)(PL_OpPtr + 1);
129 Perl_Slab_Free(pTHX_ void *op)
131 I32 * const * const ptr = (I32 **) op;
132 I32 * const slab = ptr[-1];
133 assert( ptr-1 > (I32 **) slab );
134 assert( ptr < ( (I32 **) slab + PERL_SLAB_SIZE) );
136 if (--(*slab) == 0) {
138 # define PerlMemShared PerlMem
141 PerlMemShared_free(slab);
142 if (slab == PL_OpSlab) {
149 * In the following definition, the ", Nullop" is just to make the compiler
150 * think the expression is of the right type: croak actually does a Siglongjmp.
152 #define CHECKOP(type,o) \
153 ((PL_op_mask && PL_op_mask[type]) \
154 ? ( op_free((OP*)o), \
155 Perl_croak(aTHX_ "'%s' trapped by operation mask", PL_op_desc[type]), \
157 : CALL_FPTR(PL_check[type])(aTHX_ (OP*)o))
159 #define RETURN_UNLIMITED_NUMBER (PERL_INT_MAX / 2)
162 S_gv_ename(pTHX_ GV *gv)
164 SV* const tmpsv = sv_newmortal();
165 gv_efullname3(tmpsv, gv, Nullch);
166 return SvPV_nolen_const(tmpsv);
170 S_no_fh_allowed(pTHX_ OP *o)
172 yyerror(Perl_form(aTHX_ "Missing comma after first argument to %s function",
178 S_too_few_arguments(pTHX_ OP *o, const char *name)
180 yyerror(Perl_form(aTHX_ "Not enough arguments for %s", name));
185 S_too_many_arguments(pTHX_ OP *o, const char *name)
187 yyerror(Perl_form(aTHX_ "Too many arguments for %s", name));
192 S_bad_type(pTHX_ I32 n, const char *t, const char *name, const OP *kid)
194 yyerror(Perl_form(aTHX_ "Type of arg %d to %s must be %s (not %s)",
195 (int)n, name, t, OP_DESC(kid)));
199 S_no_bareword_allowed(pTHX_ const OP *o)
201 qerror(Perl_mess(aTHX_
202 "Bareword \"%"SVf"\" not allowed while \"strict subs\" in use",
206 /* "register" allocation */
209 Perl_allocmy(pTHX_ char *name)
213 /* complain about "my $<special_var>" etc etc */
214 if (!(PL_in_my == KEY_our ||
216 (USE_UTF8_IN_NAMES && UTF8_IS_START(name[1])) ||
217 (name[1] == '_' && (*name == '$' || (int)strlen(name) > 2))))
219 if (!isPRINT(name[1]) || strchr("\t\n\r\f", name[1])) {
220 /* 1999-02-27 mjd@plover.com */
222 p = strchr(name, '\0');
223 /* The next block assumes the buffer is at least 205 chars
224 long. At present, it's always at least 256 chars. */
226 strcpy(name+200, "...");
232 /* Move everything else down one character */
233 for (; p-name > 2; p--)
235 name[2] = toCTRL(name[1]);
238 yyerror(Perl_form(aTHX_ "Can't use global %s in \"my\"",name));
241 /* check for duplicate declaration */
243 (bool)(PL_in_my == KEY_our),
244 (PL_curstash ? PL_curstash : PL_defstash)
247 if (PL_in_my_stash && *name != '$') {
248 yyerror(Perl_form(aTHX_
249 "Can't declare class for non-scalar %s in \"%s\"",
250 name, PL_in_my == KEY_our ? "our" : "my"));
253 /* allocate a spare slot and store the name in that slot */
255 off = pad_add_name(name,
258 /* $_ is always in main::, even with our */
259 ? (PL_curstash && !strEQ(name,"$_") ? PL_curstash : PL_defstash)
270 Perl_op_free(pTHX_ OP *o)
276 if (!o || o->op_static)
279 if (o->op_private & OPpREFCOUNTED) {
280 switch (o->op_type) {
288 refcnt = OpREFCNT_dec(o);
298 if (o->op_flags & OPf_KIDS) {
299 register OP *kid, *nextkid;
300 for (kid = cUNOPo->op_first; kid; kid = nextkid) {
301 nextkid = kid->op_sibling; /* Get before next freeing kid */
307 type = (OPCODE)o->op_targ;
309 /* COP* is not cleared by op_clear() so that we may track line
310 * numbers etc even after null() */
311 if (type == OP_NEXTSTATE || type == OP_SETSTATE || type == OP_DBSTATE)
316 #ifdef DEBUG_LEAKING_SCALARS
323 Perl_op_clear(pTHX_ OP *o)
327 switch (o->op_type) {
328 case OP_NULL: /* Was holding old type, if any. */
329 case OP_ENTEREVAL: /* Was holding hints. */
333 if (!(o->op_flags & OPf_REF)
334 || (PL_check[o->op_type] != MEMBER_TO_FPTR(Perl_ck_ftst)))
340 if (! (o->op_type == OP_AELEMFAST && o->op_flags & OPf_SPECIAL)) {
341 /* not an OP_PADAV replacement */
343 if (cPADOPo->op_padix > 0) {
344 /* No GvIN_PAD_off(cGVOPo_gv) here, because other references
345 * may still exist on the pad */
346 pad_swipe(cPADOPo->op_padix, TRUE);
347 cPADOPo->op_padix = 0;
350 SvREFCNT_dec(cSVOPo->op_sv);
351 cSVOPo->op_sv = Nullsv;
355 case OP_METHOD_NAMED:
357 SvREFCNT_dec(cSVOPo->op_sv);
358 cSVOPo->op_sv = Nullsv;
361 Even if op_clear does a pad_free for the target of the op,
362 pad_free doesn't actually remove the sv that exists in the pad;
363 instead it lives on. This results in that it could be reused as
364 a target later on when the pad was reallocated.
367 pad_swipe(o->op_targ,1);
376 if (o->op_flags & (OPf_SPECIAL|OPf_STACKED|OPf_KIDS))
380 if (o->op_private & (OPpTRANS_FROM_UTF|OPpTRANS_TO_UTF)) {
381 SvREFCNT_dec(cSVOPo->op_sv);
382 cSVOPo->op_sv = Nullsv;
385 Safefree(cPVOPo->op_pv);
386 cPVOPo->op_pv = Nullch;
390 op_free(cPMOPo->op_pmreplroot);
394 if (INT2PTR(PADOFFSET, cPMOPo->op_pmreplroot)) {
395 /* No GvIN_PAD_off here, because other references may still
396 * exist on the pad */
397 pad_swipe(INT2PTR(PADOFFSET, cPMOPo->op_pmreplroot), TRUE);
400 SvREFCNT_dec((SV*)cPMOPo->op_pmreplroot);
407 HV * const pmstash = PmopSTASH(cPMOPo);
408 if (pmstash && SvREFCNT(pmstash)) {
409 MAGIC * const mg = mg_find((SV*)pmstash, PERL_MAGIC_symtab);
411 PMOP *pmop = (PMOP*) mg->mg_obj;
412 PMOP *lastpmop = NULL;
414 if (cPMOPo == pmop) {
416 lastpmop->op_pmnext = pmop->op_pmnext;
418 mg->mg_obj = (SV*) pmop->op_pmnext;
422 pmop = pmop->op_pmnext;
426 PmopSTASH_free(cPMOPo);
428 cPMOPo->op_pmreplroot = Nullop;
429 /* we use the "SAFE" version of the PM_ macros here
430 * since sv_clean_all might release some PMOPs
431 * after PL_regex_padav has been cleared
432 * and the clearing of PL_regex_padav needs to
433 * happen before sv_clean_all
435 ReREFCNT_dec(PM_GETRE_SAFE(cPMOPo));
436 PM_SETRE_SAFE(cPMOPo, (REGEXP*)NULL);
438 if(PL_regex_pad) { /* We could be in destruction */
439 av_push((AV*) PL_regex_pad[0],(SV*) PL_regex_pad[(cPMOPo)->op_pmoffset]);
440 SvREPADTMP_on(PL_regex_pad[(cPMOPo)->op_pmoffset]);
441 PM_SETRE(cPMOPo, (cPMOPo)->op_pmoffset);
448 if (o->op_targ > 0) {
449 pad_free(o->op_targ);
455 S_cop_free(pTHX_ COP* cop)
457 Safefree(cop->cop_label); /* FIXME: treaddead ??? */
460 if (! specialWARN(cop->cop_warnings))
461 SvREFCNT_dec(cop->cop_warnings);
462 if (! specialCopIO(cop->cop_io)) {
466 char *s = SvPV(cop->cop_io,len);
467 Perl_warn(aTHX_ "io='%.*s'",(int) len,s); /* ??? --jhi */
470 SvREFCNT_dec(cop->cop_io);
476 Perl_op_null(pTHX_ OP *o)
479 if (o->op_type == OP_NULL)
482 o->op_targ = o->op_type;
483 o->op_type = OP_NULL;
484 o->op_ppaddr = PL_ppaddr[OP_NULL];
488 Perl_op_refcnt_lock(pTHX)
495 Perl_op_refcnt_unlock(pTHX)
501 /* Contextualizers */
503 #define LINKLIST(o) ((o)->op_next ? (o)->op_next : linklist((OP*)o))
506 Perl_linklist(pTHX_ OP *o)
512 /* establish postfix order */
513 if (cUNOPo->op_first) {
515 o->op_next = LINKLIST(cUNOPo->op_first);
516 for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling) {
518 kid->op_next = LINKLIST(kid->op_sibling);
530 Perl_scalarkids(pTHX_ OP *o)
532 if (o && o->op_flags & OPf_KIDS) {
534 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
541 S_scalarboolean(pTHX_ OP *o)
543 if (o->op_type == OP_SASSIGN && cBINOPo->op_first->op_type == OP_CONST) {
544 if (ckWARN(WARN_SYNTAX)) {
545 const line_t oldline = CopLINE(PL_curcop);
547 if (PL_copline != NOLINE)
548 CopLINE_set(PL_curcop, PL_copline);
549 Perl_warner(aTHX_ packWARN(WARN_SYNTAX), "Found = in conditional, should be ==");
550 CopLINE_set(PL_curcop, oldline);
557 Perl_scalar(pTHX_ OP *o)
562 /* assumes no premature commitment */
563 if (!o || PL_error_count || (o->op_flags & OPf_WANT)
564 || o->op_type == OP_RETURN)
569 o->op_flags = (o->op_flags & ~OPf_WANT) | OPf_WANT_SCALAR;
571 switch (o->op_type) {
573 scalar(cBINOPo->op_first);
578 for (kid = cUNOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
582 if ((kid = cLISTOPo->op_first) && kid->op_type == OP_PUSHRE) {
583 if (!kPMOP->op_pmreplroot)
584 deprecate_old("implicit split to @_");
592 if (o->op_flags & OPf_KIDS) {
593 for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling)
599 kid = cLISTOPo->op_first;
601 while ((kid = kid->op_sibling)) {
607 WITH_THR(PL_curcop = &PL_compiling);
612 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling) {
618 WITH_THR(PL_curcop = &PL_compiling);
621 if (ckWARN(WARN_VOID))
622 Perl_warner(aTHX_ packWARN(WARN_VOID), "Useless use of sort in scalar context");
628 Perl_scalarvoid(pTHX_ OP *o)
632 const char* useless = 0;
636 if (o->op_type == OP_NEXTSTATE
637 || o->op_type == OP_SETSTATE
638 || o->op_type == OP_DBSTATE
639 || (o->op_type == OP_NULL && (o->op_targ == OP_NEXTSTATE
640 || o->op_targ == OP_SETSTATE
641 || o->op_targ == OP_DBSTATE)))
642 PL_curcop = (COP*)o; /* for warning below */
644 /* assumes no premature commitment */
645 want = o->op_flags & OPf_WANT;
646 if ((want && want != OPf_WANT_SCALAR) || PL_error_count
647 || o->op_type == OP_RETURN)
652 if ((o->op_private & OPpTARGET_MY)
653 && (PL_opargs[o->op_type] & OA_TARGLEX))/* OPp share the meaning */
655 return scalar(o); /* As if inside SASSIGN */
658 o->op_flags = (o->op_flags & ~OPf_WANT) | OPf_WANT_VOID;
660 switch (o->op_type) {
662 if (!(PL_opargs[o->op_type] & OA_FOLDCONST))
666 if (o->op_flags & OPf_STACKED)
670 if (o->op_private == 4)
742 if (!(o->op_private & (OPpLVAL_INTRO|OPpOUR_INTRO)))
743 useless = OP_DESC(o);
747 kid = cUNOPo->op_first;
748 if (kid->op_type != OP_MATCH && kid->op_type != OP_SUBST &&
749 kid->op_type != OP_TRANS) {
752 useless = "negative pattern binding (!~)";
759 if (!(o->op_private & (OPpLVAL_INTRO|OPpOUR_INTRO)) &&
760 (!o->op_sibling || o->op_sibling->op_type != OP_READLINE))
761 useless = "a variable";
766 if (cSVOPo->op_private & OPpCONST_STRICT)
767 no_bareword_allowed(o);
769 if (ckWARN(WARN_VOID)) {
770 useless = "a constant";
771 /* don't warn on optimised away booleans, eg
772 * use constant Foo, 5; Foo || print; */
773 if (cSVOPo->op_private & OPpCONST_SHORTCIRCUIT)
775 /* the constants 0 and 1 are permitted as they are
776 conventionally used as dummies in constructs like
777 1 while some_condition_with_side_effects; */
778 else if (SvNIOK(sv) && (SvNV(sv) == 0.0 || SvNV(sv) == 1.0))
780 else if (SvPOK(sv)) {
781 /* perl4's way of mixing documentation and code
782 (before the invention of POD) was based on a
783 trick to mix nroff and perl code. The trick was
784 built upon these three nroff macros being used in
785 void context. The pink camel has the details in
786 the script wrapman near page 319. */
787 if (strnEQ(SvPVX_const(sv), "di", 2) ||
788 strnEQ(SvPVX_const(sv), "ds", 2) ||
789 strnEQ(SvPVX_const(sv), "ig", 2))
794 op_null(o); /* don't execute or even remember it */
798 o->op_type = OP_PREINC; /* pre-increment is faster */
799 o->op_ppaddr = PL_ppaddr[OP_PREINC];
803 o->op_type = OP_PREDEC; /* pre-decrement is faster */
804 o->op_ppaddr = PL_ppaddr[OP_PREDEC];
808 o->op_type = OP_I_PREINC; /* pre-increment is faster */
809 o->op_ppaddr = PL_ppaddr[OP_I_PREINC];
813 o->op_type = OP_I_PREDEC; /* pre-decrement is faster */
814 o->op_ppaddr = PL_ppaddr[OP_I_PREDEC];
821 for (kid = cUNOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
826 if (o->op_flags & OPf_STACKED)
833 if (!(o->op_flags & OPf_KIDS))
842 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
849 /* all requires must return a boolean value */
850 o->op_flags &= ~OPf_WANT;
855 if ((kid = cLISTOPo->op_first) && kid->op_type == OP_PUSHRE) {
856 if (!kPMOP->op_pmreplroot)
857 deprecate_old("implicit split to @_");
861 if (useless && ckWARN(WARN_VOID))
862 Perl_warner(aTHX_ packWARN(WARN_VOID), "Useless use of %s in void context", useless);
867 Perl_listkids(pTHX_ OP *o)
869 if (o && o->op_flags & OPf_KIDS) {
871 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
878 Perl_list(pTHX_ OP *o)
883 /* assumes no premature commitment */
884 if (!o || (o->op_flags & OPf_WANT) || PL_error_count
885 || o->op_type == OP_RETURN)
890 if ((o->op_private & OPpTARGET_MY)
891 && (PL_opargs[o->op_type] & OA_TARGLEX))/* OPp share the meaning */
893 return o; /* As if inside SASSIGN */
896 o->op_flags = (o->op_flags & ~OPf_WANT) | OPf_WANT_LIST;
898 switch (o->op_type) {
901 list(cBINOPo->op_first);
906 for (kid = cUNOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
914 if (!(o->op_flags & OPf_KIDS))
916 if (!o->op_next && cUNOPo->op_first->op_type == OP_FLOP) {
917 list(cBINOPo->op_first);
918 return gen_constant_list(o);
925 kid = cLISTOPo->op_first;
927 while ((kid = kid->op_sibling)) {
933 WITH_THR(PL_curcop = &PL_compiling);
937 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling) {
943 WITH_THR(PL_curcop = &PL_compiling);
946 /* all requires must return a boolean value */
947 o->op_flags &= ~OPf_WANT;
954 Perl_scalarseq(pTHX_ OP *o)
957 if (o->op_type == OP_LINESEQ ||
958 o->op_type == OP_SCOPE ||
959 o->op_type == OP_LEAVE ||
960 o->op_type == OP_LEAVETRY)
963 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling) {
964 if (kid->op_sibling) {
968 PL_curcop = &PL_compiling;
970 o->op_flags &= ~OPf_PARENS;
971 if (PL_hints & HINT_BLOCK_SCOPE)
972 o->op_flags |= OPf_PARENS;
975 o = newOP(OP_STUB, 0);
980 S_modkids(pTHX_ OP *o, I32 type)
982 if (o && o->op_flags & OPf_KIDS) {
984 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
990 /* Propagate lvalue ("modifiable") context to an op and it's children.
991 * 'type' represents the context type, roughly based on the type of op that
992 * would do the modifying, although local() is represented by OP_NULL.
993 * It's responsible for detecting things that can't be modified, flag
994 * things that need to behave specially in an lvalue context (e.g., "$$x = 5"
995 * might have to vivify a reference in $x), and so on.
997 * For example, "$a+1 = 2" would cause mod() to be called with o being
998 * OP_ADD and type being OP_SASSIGN, and would output an error.
1002 Perl_mod(pTHX_ OP *o, I32 type)
1006 /* -1 = error on localize, 0 = ignore localize, 1 = ok to localize */
1009 if (!o || PL_error_count)
1012 if ((o->op_private & OPpTARGET_MY)
1013 && (PL_opargs[o->op_type] & OA_TARGLEX))/* OPp share the meaning */
1018 switch (o->op_type) {
1024 if (!(o->op_private & (OPpCONST_ARYBASE)))
1026 if (PL_eval_start && PL_eval_start->op_type == OP_CONST) {
1027 PL_compiling.cop_arybase = (I32)SvIV(cSVOPx(PL_eval_start)->op_sv);
1031 SAVEI32(PL_compiling.cop_arybase);
1032 PL_compiling.cop_arybase = 0;
1034 else if (type == OP_REFGEN)
1037 Perl_croak(aTHX_ "That use of $[ is unsupported");
1040 if (o->op_flags & OPf_PARENS)
1044 if ((type == OP_UNDEF || type == OP_REFGEN) &&
1045 !(o->op_flags & OPf_STACKED)) {
1046 o->op_type = OP_RV2CV; /* entersub => rv2cv */
1047 o->op_ppaddr = PL_ppaddr[OP_RV2CV];
1048 assert(cUNOPo->op_first->op_type == OP_NULL);
1049 op_null(((LISTOP*)cUNOPo->op_first)->op_first);/* disable pushmark */
1052 else if (o->op_private & OPpENTERSUB_NOMOD)
1054 else { /* lvalue subroutine call */
1055 o->op_private |= OPpLVAL_INTRO;
1056 PL_modcount = RETURN_UNLIMITED_NUMBER;
1057 if (type == OP_GREPSTART || type == OP_ENTERSUB || type == OP_REFGEN) {
1058 /* Backward compatibility mode: */
1059 o->op_private |= OPpENTERSUB_INARGS;
1062 else { /* Compile-time error message: */
1063 OP *kid = cUNOPo->op_first;
1067 if (kid->op_type == OP_PUSHMARK)
1069 if (kid->op_type != OP_NULL || kid->op_targ != OP_LIST)
1071 "panic: unexpected lvalue entersub "
1072 "args: type/targ %ld:%"UVuf,
1073 (long)kid->op_type, (UV)kid->op_targ);
1074 kid = kLISTOP->op_first;
1076 while (kid->op_sibling)
1077 kid = kid->op_sibling;
1078 if (!(kid->op_type == OP_NULL && kid->op_targ == OP_RV2CV)) {
1080 if (kid->op_type == OP_METHOD_NAMED
1081 || kid->op_type == OP_METHOD)
1085 NewOp(1101, newop, 1, UNOP);
1086 newop->op_type = OP_RV2CV;
1087 newop->op_ppaddr = PL_ppaddr[OP_RV2CV];
1088 newop->op_first = Nullop;
1089 newop->op_next = (OP*)newop;
1090 kid->op_sibling = (OP*)newop;
1091 newop->op_private |= OPpLVAL_INTRO;
1095 if (kid->op_type != OP_RV2CV)
1097 "panic: unexpected lvalue entersub "
1098 "entry via type/targ %ld:%"UVuf,
1099 (long)kid->op_type, (UV)kid->op_targ);
1100 kid->op_private |= OPpLVAL_INTRO;
1101 break; /* Postpone until runtime */
1105 kid = kUNOP->op_first;
1106 if (kid->op_type == OP_NULL && kid->op_targ == OP_RV2SV)
1107 kid = kUNOP->op_first;
1108 if (kid->op_type == OP_NULL)
1110 "Unexpected constant lvalue entersub "
1111 "entry via type/targ %ld:%"UVuf,
1112 (long)kid->op_type, (UV)kid->op_targ);
1113 if (kid->op_type != OP_GV) {
1114 /* Restore RV2CV to check lvalueness */
1116 if (kid->op_next && kid->op_next != kid) { /* Happens? */
1117 okid->op_next = kid->op_next;
1118 kid->op_next = okid;
1121 okid->op_next = Nullop;
1122 okid->op_type = OP_RV2CV;
1124 okid->op_ppaddr = PL_ppaddr[OP_RV2CV];
1125 okid->op_private |= OPpLVAL_INTRO;
1129 cv = GvCV(kGVOP_gv);
1139 /* grep, foreach, subcalls, refgen */
1140 if (type == OP_GREPSTART || type == OP_ENTERSUB || type == OP_REFGEN)
1142 yyerror(Perl_form(aTHX_ "Can't modify %s in %s",
1143 (o->op_type == OP_NULL && (o->op_flags & OPf_SPECIAL)
1145 : (o->op_type == OP_ENTERSUB
1146 ? "non-lvalue subroutine call"
1148 type ? PL_op_desc[type] : "local"));
1162 case OP_RIGHT_SHIFT:
1171 if (!(o->op_flags & OPf_STACKED))
1178 for (kid = cUNOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
1184 if (type == OP_REFGEN && o->op_flags & OPf_PARENS) {
1185 PL_modcount = RETURN_UNLIMITED_NUMBER;
1186 return o; /* Treat \(@foo) like ordinary list. */
1190 if (scalar_mod_type(o, type))
1192 ref(cUNOPo->op_first, o->op_type);
1196 if (type == OP_LEAVESUBLV)
1197 o->op_private |= OPpMAYBE_LVSUB;
1203 PL_modcount = RETURN_UNLIMITED_NUMBER;
1206 ref(cUNOPo->op_first, o->op_type);
1211 PL_hints |= HINT_BLOCK_SCOPE;
1226 PL_modcount = RETURN_UNLIMITED_NUMBER;
1227 if (type == OP_REFGEN && o->op_flags & OPf_PARENS)
1228 return o; /* Treat \(@foo) like ordinary list. */
1229 if (scalar_mod_type(o, type))
1231 if (type == OP_LEAVESUBLV)
1232 o->op_private |= OPpMAYBE_LVSUB;
1236 if (!type) /* local() */
1237 Perl_croak(aTHX_ "Can't localize lexical variable %s",
1238 PAD_COMPNAME_PV(o->op_targ));
1246 if (type != OP_SASSIGN)
1250 if (o->op_private == 4) /* don't allow 4 arg substr as lvalue */
1255 if (type == OP_LEAVESUBLV)
1256 o->op_private |= OPpMAYBE_LVSUB;
1258 pad_free(o->op_targ);
1259 o->op_targ = pad_alloc(o->op_type, SVs_PADMY);
1260 assert(SvTYPE(PAD_SV(o->op_targ)) == SVt_NULL);
1261 if (o->op_flags & OPf_KIDS)
1262 mod(cBINOPo->op_first->op_sibling, type);
1267 ref(cBINOPo->op_first, o->op_type);
1268 if (type == OP_ENTERSUB &&
1269 !(o->op_private & (OPpLVAL_INTRO | OPpDEREF)))
1270 o->op_private |= OPpLVAL_DEFER;
1271 if (type == OP_LEAVESUBLV)
1272 o->op_private |= OPpMAYBE_LVSUB;
1282 if (o->op_flags & OPf_KIDS)
1283 mod(cLISTOPo->op_last, type);
1288 if (o->op_flags & OPf_SPECIAL) /* do BLOCK */
1290 else if (!(o->op_flags & OPf_KIDS))
1292 if (o->op_targ != OP_LIST) {
1293 mod(cBINOPo->op_first, type);
1299 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
1304 if (type != OP_LEAVESUBLV)
1306 break; /* mod()ing was handled by ck_return() */
1309 /* [20011101.069] File test operators interpret OPf_REF to mean that
1310 their argument is a filehandle; thus \stat(".") should not set
1312 if (type == OP_REFGEN &&
1313 PL_check[o->op_type] == MEMBER_TO_FPTR(Perl_ck_ftst))
1316 if (type != OP_LEAVESUBLV)
1317 o->op_flags |= OPf_MOD;
1319 if (type == OP_AASSIGN || type == OP_SASSIGN)
1320 o->op_flags |= OPf_SPECIAL|OPf_REF;
1321 else if (!type) { /* local() */
1324 o->op_private |= OPpLVAL_INTRO;
1325 o->op_flags &= ~OPf_SPECIAL;
1326 PL_hints |= HINT_BLOCK_SCOPE;
1331 if (ckWARN(WARN_SYNTAX)) {
1332 Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
1333 "Useless localization of %s", OP_DESC(o));
1337 else if (type != OP_GREPSTART && type != OP_ENTERSUB
1338 && type != OP_LEAVESUBLV)
1339 o->op_flags |= OPf_REF;
1344 S_scalar_mod_type(pTHX_ const OP *o, I32 type)
1348 if (o->op_type == OP_RV2GV)
1372 case OP_RIGHT_SHIFT:
1391 S_is_handle_constructor(pTHX_ const OP *o, I32 numargs)
1393 switch (o->op_type) {
1401 case OP_SELECT: /* XXX c.f. SelectSaver.pm */
1414 Perl_refkids(pTHX_ OP *o, I32 type)
1416 if (o && o->op_flags & OPf_KIDS) {
1418 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
1425 Perl_doref(pTHX_ OP *o, I32 type, bool set_op_ref)
1430 if (!o || PL_error_count)
1433 switch (o->op_type) {
1435 if ((type == OP_EXISTS || type == OP_DEFINED || type == OP_LOCK) &&
1436 !(o->op_flags & OPf_STACKED)) {
1437 o->op_type = OP_RV2CV; /* entersub => rv2cv */
1438 o->op_ppaddr = PL_ppaddr[OP_RV2CV];
1439 assert(cUNOPo->op_first->op_type == OP_NULL);
1440 op_null(((LISTOP*)cUNOPo->op_first)->op_first); /* disable pushmark */
1441 o->op_flags |= OPf_SPECIAL;
1446 for (kid = cUNOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
1447 doref(kid, type, set_op_ref);
1450 if (type == OP_DEFINED)
1451 o->op_flags |= OPf_SPECIAL; /* don't create GV */
1452 doref(cUNOPo->op_first, o->op_type, set_op_ref);
1455 if (type == OP_RV2SV || type == OP_RV2AV || type == OP_RV2HV) {
1456 o->op_private |= (type == OP_RV2AV ? OPpDEREF_AV
1457 : type == OP_RV2HV ? OPpDEREF_HV
1459 o->op_flags |= OPf_MOD;
1464 o->op_flags |= OPf_MOD; /* XXX ??? */
1470 o->op_flags |= OPf_REF;
1473 if (type == OP_DEFINED)
1474 o->op_flags |= OPf_SPECIAL; /* don't create GV */
1475 doref(cUNOPo->op_first, o->op_type, set_op_ref);
1481 o->op_flags |= OPf_REF;
1486 if (!(o->op_flags & OPf_KIDS))
1488 doref(cBINOPo->op_first, type, set_op_ref);
1492 doref(cBINOPo->op_first, o->op_type, set_op_ref);
1493 if (type == OP_RV2SV || type == OP_RV2AV || type == OP_RV2HV) {
1494 o->op_private |= (type == OP_RV2AV ? OPpDEREF_AV
1495 : type == OP_RV2HV ? OPpDEREF_HV
1497 o->op_flags |= OPf_MOD;
1507 if (!(o->op_flags & OPf_KIDS))
1509 doref(cLISTOPo->op_last, type, set_op_ref);
1518 /* ref() is now a macro using Perl_doref;
1519 * this version provided for binary compatibility only.
1522 Perl_ref(pTHX_ OP *o, I32 type)
1524 return doref(o, type, TRUE);
1528 S_dup_attrlist(pTHX_ OP *o)
1532 /* An attrlist is either a simple OP_CONST or an OP_LIST with kids,
1533 * where the first kid is OP_PUSHMARK and the remaining ones
1534 * are OP_CONST. We need to push the OP_CONST values.
1536 if (o->op_type == OP_CONST)
1537 rop = newSVOP(OP_CONST, o->op_flags, SvREFCNT_inc(cSVOPo->op_sv));
1539 assert((o->op_type == OP_LIST) && (o->op_flags & OPf_KIDS));
1540 for (o = cLISTOPo->op_first; o; o=o->op_sibling) {
1541 if (o->op_type == OP_CONST)
1542 rop = append_elem(OP_LIST, rop,
1543 newSVOP(OP_CONST, o->op_flags,
1544 SvREFCNT_inc(cSVOPo->op_sv)));
1551 S_apply_attrs(pTHX_ HV *stash, SV *target, OP *attrs, bool for_my)
1556 /* fake up C<use attributes $pkg,$rv,@attrs> */
1557 ENTER; /* need to protect against side-effects of 'use' */
1559 stashsv = stash ? newSVhek(HvNAME_HEK(stash)) : &PL_sv_no;
1561 #define ATTRSMODULE "attributes"
1562 #define ATTRSMODULE_PM "attributes.pm"
1565 /* Don't force the C<use> if we don't need it. */
1566 SV * const * const svp = hv_fetch(GvHVn(PL_incgv), ATTRSMODULE_PM,
1567 sizeof(ATTRSMODULE_PM)-1, 0);
1568 if (svp && *svp != &PL_sv_undef)
1569 ; /* already in %INC */
1571 Perl_load_module(aTHX_ PERL_LOADMOD_NOIMPORT,
1572 newSVpvn(ATTRSMODULE, sizeof(ATTRSMODULE)-1),
1576 Perl_load_module(aTHX_ PERL_LOADMOD_IMPORT_OPS,
1577 newSVpvn(ATTRSMODULE, sizeof(ATTRSMODULE)-1),
1579 prepend_elem(OP_LIST,
1580 newSVOP(OP_CONST, 0, stashsv),
1581 prepend_elem(OP_LIST,
1582 newSVOP(OP_CONST, 0,
1584 dup_attrlist(attrs))));
1590 S_apply_attrs_my(pTHX_ HV *stash, OP *target, OP *attrs, OP **imopsp)
1592 OP *pack, *imop, *arg;
1598 assert(target->op_type == OP_PADSV ||
1599 target->op_type == OP_PADHV ||
1600 target->op_type == OP_PADAV);
1602 /* Ensure that attributes.pm is loaded. */
1603 apply_attrs(stash, PAD_SV(target->op_targ), attrs, TRUE);
1605 /* Need package name for method call. */
1606 pack = newSVOP(OP_CONST, 0, newSVpvn(ATTRSMODULE, sizeof(ATTRSMODULE)-1));
1608 /* Build up the real arg-list. */
1609 stashsv = stash ? newSVhek(HvNAME_HEK(stash)) : &PL_sv_no;
1611 arg = newOP(OP_PADSV, 0);
1612 arg->op_targ = target->op_targ;
1613 arg = prepend_elem(OP_LIST,
1614 newSVOP(OP_CONST, 0, stashsv),
1615 prepend_elem(OP_LIST,
1616 newUNOP(OP_REFGEN, 0,
1617 mod(arg, OP_REFGEN)),
1618 dup_attrlist(attrs)));
1620 /* Fake up a method call to import */
1621 meth = newSVpvn_share("import", 6, 0);
1622 imop = convert(OP_ENTERSUB, OPf_STACKED|OPf_SPECIAL|OPf_WANT_VOID,
1623 append_elem(OP_LIST,
1624 prepend_elem(OP_LIST, pack, list(arg)),
1625 newSVOP(OP_METHOD_NAMED, 0, meth)));
1626 imop->op_private |= OPpENTERSUB_NOMOD;
1628 /* Combine the ops. */
1629 *imopsp = append_elem(OP_LIST, *imopsp, imop);
1633 =notfor apidoc apply_attrs_string
1635 Attempts to apply a list of attributes specified by the C<attrstr> and
1636 C<len> arguments to the subroutine identified by the C<cv> argument which
1637 is expected to be associated with the package identified by the C<stashpv>
1638 argument (see L<attributes>). It gets this wrong, though, in that it
1639 does not correctly identify the boundaries of the individual attribute
1640 specifications within C<attrstr>. This is not really intended for the
1641 public API, but has to be listed here for systems such as AIX which
1642 need an explicit export list for symbols. (It's called from XS code
1643 in support of the C<ATTRS:> keyword from F<xsubpp>.) Patches to fix it
1644 to respect attribute syntax properly would be welcome.
1650 Perl_apply_attrs_string(pTHX_ const char *stashpv, CV *cv,
1651 const char *attrstr, STRLEN len)
1656 len = strlen(attrstr);
1660 for (; isSPACE(*attrstr) && len; --len, ++attrstr) ;
1662 const char * const sstr = attrstr;
1663 for (; !isSPACE(*attrstr) && len; --len, ++attrstr) ;
1664 attrs = append_elem(OP_LIST, attrs,
1665 newSVOP(OP_CONST, 0,
1666 newSVpvn(sstr, attrstr-sstr)));
1670 Perl_load_module(aTHX_ PERL_LOADMOD_IMPORT_OPS,
1671 newSVpvn(ATTRSMODULE, sizeof(ATTRSMODULE)-1),
1672 Nullsv, prepend_elem(OP_LIST,
1673 newSVOP(OP_CONST, 0, newSVpv(stashpv,0)),
1674 prepend_elem(OP_LIST,
1675 newSVOP(OP_CONST, 0,
1681 S_my_kid(pTHX_ OP *o, OP *attrs, OP **imopsp)
1685 if (!o || PL_error_count)
1689 if (type == OP_LIST) {
1691 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
1692 my_kid(kid, attrs, imopsp);
1693 } else if (type == OP_UNDEF) {
1695 } else if (type == OP_RV2SV || /* "our" declaration */
1697 type == OP_RV2HV) { /* XXX does this let anything illegal in? */
1698 if (cUNOPo->op_first->op_type != OP_GV) { /* MJD 20011224 */
1699 yyerror(Perl_form(aTHX_ "Can't declare %s in %s",
1700 OP_DESC(o), PL_in_my == KEY_our ? "our" : "my"));
1702 GV * const gv = cGVOPx_gv(cUNOPo->op_first);
1704 PL_in_my_stash = Nullhv;
1705 apply_attrs(GvSTASH(gv),
1706 (type == OP_RV2SV ? GvSV(gv) :
1707 type == OP_RV2AV ? (SV*)GvAV(gv) :
1708 type == OP_RV2HV ? (SV*)GvHV(gv) : (SV*)gv),
1711 o->op_private |= OPpOUR_INTRO;
1714 else if (type != OP_PADSV &&
1717 type != OP_PUSHMARK)
1719 yyerror(Perl_form(aTHX_ "Can't declare %s in \"%s\"",
1721 PL_in_my == KEY_our ? "our" : "my"));
1724 else if (attrs && type != OP_PUSHMARK) {
1728 PL_in_my_stash = Nullhv;
1730 /* check for C<my Dog $spot> when deciding package */
1731 stash = PAD_COMPNAME_TYPE(o->op_targ);
1733 stash = PL_curstash;
1734 apply_attrs_my(stash, o, attrs, imopsp);
1736 o->op_flags |= OPf_MOD;
1737 o->op_private |= OPpLVAL_INTRO;
1742 Perl_my_attrs(pTHX_ OP *o, OP *attrs)
1745 int maybe_scalar = 0;
1747 /* [perl #17376]: this appears to be premature, and results in code such as
1748 C< our(%x); > executing in list mode rather than void mode */
1750 if (o->op_flags & OPf_PARENS)
1759 o = my_kid(o, attrs, &rops);
1761 if (maybe_scalar && o->op_type == OP_PADSV) {
1762 o = scalar(append_list(OP_LIST, (LISTOP*)rops, (LISTOP*)o));
1763 o->op_private |= OPpLVAL_INTRO;
1766 o = append_list(OP_LIST, (LISTOP*)o, (LISTOP*)rops);
1769 PL_in_my_stash = Nullhv;
1774 Perl_my(pTHX_ OP *o)
1776 return my_attrs(o, Nullop);
1780 Perl_sawparens(pTHX_ OP *o)
1783 o->op_flags |= OPf_PARENS;
1788 Perl_bind_match(pTHX_ I32 type, OP *left, OP *right)
1793 if ( (left->op_type == OP_RV2AV ||
1794 left->op_type == OP_RV2HV ||
1795 left->op_type == OP_PADAV ||
1796 left->op_type == OP_PADHV)
1797 && ckWARN(WARN_MISC))
1799 const char * const desc = PL_op_desc[(right->op_type == OP_SUBST ||
1800 right->op_type == OP_TRANS)
1801 ? right->op_type : OP_MATCH];
1802 const char * const sample = ((left->op_type == OP_RV2AV ||
1803 left->op_type == OP_PADAV)
1804 ? "@array" : "%hash");
1805 Perl_warner(aTHX_ packWARN(WARN_MISC),
1806 "Applying %s to %s will act on scalar(%s)",
1807 desc, sample, sample);
1810 if (right->op_type == OP_CONST &&
1811 cSVOPx(right)->op_private & OPpCONST_BARE &&
1812 cSVOPx(right)->op_private & OPpCONST_STRICT)
1814 no_bareword_allowed(right);
1817 ismatchop = right->op_type == OP_MATCH ||
1818 right->op_type == OP_SUBST ||
1819 right->op_type == OP_TRANS;
1820 if (ismatchop && right->op_private & OPpTARGET_MY) {
1822 right->op_private &= ~OPpTARGET_MY;
1824 if (!(right->op_flags & OPf_STACKED) && ismatchop) {
1825 right->op_flags |= OPf_STACKED;
1826 if (right->op_type != OP_MATCH &&
1827 ! (right->op_type == OP_TRANS &&
1828 right->op_private & OPpTRANS_IDENTICAL))
1829 left = mod(left, right->op_type);
1830 if (right->op_type == OP_TRANS)
1831 o = newBINOP(OP_NULL, OPf_STACKED, scalar(left), right);
1833 o = prepend_elem(right->op_type, scalar(left), right);
1835 return newUNOP(OP_NOT, 0, scalar(o));
1839 return bind_match(type, left,
1840 pmruntime(newPMOP(OP_MATCH, 0), right, 0));
1844 Perl_invert(pTHX_ OP *o)
1848 /* XXX need to optimize away NOT NOT here? Or do we let optimizer do it? */
1849 return newUNOP(OP_NOT, OPf_SPECIAL, scalar(o));
1853 Perl_scope(pTHX_ OP *o)
1857 if (o->op_flags & OPf_PARENS || PERLDB_NOOPT || PL_tainting) {
1858 o = prepend_elem(OP_LINESEQ, newOP(OP_ENTER, 0), o);
1859 o->op_type = OP_LEAVE;
1860 o->op_ppaddr = PL_ppaddr[OP_LEAVE];
1862 else if (o->op_type == OP_LINESEQ) {
1864 o->op_type = OP_SCOPE;
1865 o->op_ppaddr = PL_ppaddr[OP_SCOPE];
1866 kid = ((LISTOP*)o)->op_first;
1867 if (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE)
1871 o = newLISTOP(OP_SCOPE, 0, o, Nullop);
1876 /* XXX kept for BINCOMPAT only */
1878 Perl_save_hints(pTHX)
1880 Perl_croak(aTHX_ "internal error: obsolete function save_hints() called");
1884 Perl_block_start(pTHX_ int full)
1886 const int retval = PL_savestack_ix;
1887 pad_block_start(full);
1889 PL_hints &= ~HINT_BLOCK_SCOPE;
1890 SAVESPTR(PL_compiling.cop_warnings);
1891 if (! specialWARN(PL_compiling.cop_warnings)) {
1892 PL_compiling.cop_warnings = newSVsv(PL_compiling.cop_warnings) ;
1893 SAVEFREESV(PL_compiling.cop_warnings) ;
1895 SAVESPTR(PL_compiling.cop_io);
1896 if (! specialCopIO(PL_compiling.cop_io)) {
1897 PL_compiling.cop_io = newSVsv(PL_compiling.cop_io) ;
1898 SAVEFREESV(PL_compiling.cop_io) ;
1904 Perl_block_end(pTHX_ I32 floor, OP *seq)
1906 const int needblockscope = PL_hints & HINT_BLOCK_SCOPE;
1907 OP* const retval = scalarseq(seq);
1909 PL_compiling.op_private = (U8)(PL_hints & HINT_PRIVATE_MASK);
1911 PL_hints |= HINT_BLOCK_SCOPE; /* propagate out */
1919 const I32 offset = pad_findmy("$_");
1920 if (offset == NOT_IN_PAD || PAD_COMPNAME_FLAGS(offset) & SVpad_OUR) {
1921 return newSVREF(newGVOP(OP_GV, 0, PL_defgv));
1924 OP * const o = newOP(OP_PADSV, 0);
1925 o->op_targ = offset;
1931 Perl_newPROG(pTHX_ OP *o)
1936 PL_eval_root = newUNOP(OP_LEAVEEVAL,
1937 ((PL_in_eval & EVAL_KEEPERR)
1938 ? OPf_SPECIAL : 0), o);
1939 PL_eval_start = linklist(PL_eval_root);
1940 PL_eval_root->op_private |= OPpREFCOUNTED;
1941 OpREFCNT_set(PL_eval_root, 1);
1942 PL_eval_root->op_next = 0;
1943 CALL_PEEP(PL_eval_start);
1946 if (o->op_type == OP_STUB) {
1947 PL_comppad_name = 0;
1952 PL_main_root = scope(sawparens(scalarvoid(o)));
1953 PL_curcop = &PL_compiling;
1954 PL_main_start = LINKLIST(PL_main_root);
1955 PL_main_root->op_private |= OPpREFCOUNTED;
1956 OpREFCNT_set(PL_main_root, 1);
1957 PL_main_root->op_next = 0;
1958 CALL_PEEP(PL_main_start);
1961 /* Register with debugger */
1963 CV * const cv = get_cv("DB::postponed", FALSE);
1967 XPUSHs((SV*)CopFILEGV(&PL_compiling));
1969 call_sv((SV*)cv, G_DISCARD);
1976 Perl_localize(pTHX_ OP *o, I32 lex)
1978 if (o->op_flags & OPf_PARENS)
1979 /* [perl #17376]: this appears to be premature, and results in code such as
1980 C< our(%x); > executing in list mode rather than void mode */
1987 if ( PL_bufptr > PL_oldbufptr && PL_bufptr[-1] == ','
1988 && ckWARN(WARN_PARENTHESIS))
1990 char *s = PL_bufptr;
1993 /* some heuristics to detect a potential error */
1994 while (*s && (strchr(", \t\n", *s)))
1998 if (*s && strchr("@$%*", *s) && *++s
1999 && (isALNUM(*s) || UTF8_IS_CONTINUED(*s))) {
2002 while (*s && (isALNUM(*s) || UTF8_IS_CONTINUED(*s)))
2004 while (*s && (strchr(", \t\n", *s)))
2010 if (sigil && (*s == ';' || *s == '=')) {
2011 Perl_warner(aTHX_ packWARN(WARN_PARENTHESIS),
2012 "Parentheses missing around \"%s\" list",
2013 lex ? (PL_in_my == KEY_our ? "our" : "my")
2021 o = mod(o, OP_NULL); /* a bit kludgey */
2023 PL_in_my_stash = Nullhv;
2028 Perl_jmaybe(pTHX_ OP *o)
2030 if (o->op_type == OP_LIST) {
2032 o2 = newSVREF(newGVOP(OP_GV, 0, gv_fetchpv(";", TRUE, SVt_PV))),
2033 o = convert(OP_JOIN, 0, prepend_elem(OP_LIST, o2, o));
2039 Perl_fold_constants(pTHX_ register OP *o)
2043 I32 type = o->op_type;
2046 if (PL_opargs[type] & OA_RETSCALAR)
2048 if (PL_opargs[type] & OA_TARGET && !o->op_targ)
2049 o->op_targ = pad_alloc(type, SVs_PADTMP);
2051 /* integerize op, unless it happens to be C<-foo>.
2052 * XXX should pp_i_negate() do magic string negation instead? */
2053 if ((PL_opargs[type] & OA_OTHERINT) && (PL_hints & HINT_INTEGER)
2054 && !(type == OP_NEGATE && cUNOPo->op_first->op_type == OP_CONST
2055 && (cUNOPo->op_first->op_private & OPpCONST_BARE)))
2057 o->op_ppaddr = PL_ppaddr[type = ++(o->op_type)];
2060 if (!(PL_opargs[type] & OA_FOLDCONST))
2065 /* XXX might want a ck_negate() for this */
2066 cUNOPo->op_first->op_private &= ~OPpCONST_STRICT;
2078 /* XXX what about the numeric ops? */
2079 if (PL_hints & HINT_LOCALE)
2084 goto nope; /* Don't try to run w/ errors */
2086 for (curop = LINKLIST(o); curop != o; curop = LINKLIST(curop)) {
2087 if ((curop->op_type != OP_CONST ||
2088 (curop->op_private & OPpCONST_BARE)) &&
2089 curop->op_type != OP_LIST &&
2090 curop->op_type != OP_SCALAR &&
2091 curop->op_type != OP_NULL &&
2092 curop->op_type != OP_PUSHMARK)
2098 curop = LINKLIST(o);
2102 sv = *(PL_stack_sp--);
2103 if (o->op_targ && sv == PAD_SV(o->op_targ)) /* grab pad temp? */
2104 pad_swipe(o->op_targ, FALSE);
2105 else if (SvTEMP(sv)) { /* grab mortal temp? */
2106 (void)SvREFCNT_inc(sv);
2110 if (type == OP_RV2GV)
2111 return newGVOP(OP_GV, 0, (GV*)sv);
2112 return newSVOP(OP_CONST, 0, sv);
2119 Perl_gen_constant_list(pTHX_ register OP *o)
2123 const I32 oldtmps_floor = PL_tmps_floor;
2127 return o; /* Don't attempt to run with errors */
2129 PL_op = curop = LINKLIST(o);
2136 PL_tmps_floor = oldtmps_floor;
2138 o->op_type = OP_RV2AV;
2139 o->op_ppaddr = PL_ppaddr[OP_RV2AV];
2140 o->op_flags &= ~OPf_REF; /* treat \(1..2) like an ordinary list */
2141 o->op_flags |= OPf_PARENS; /* and flatten \(1..2,3) */
2142 o->op_opt = 0; /* needs to be revisited in peep() */
2143 curop = ((UNOP*)o)->op_first;
2144 ((UNOP*)o)->op_first = newSVOP(OP_CONST, 0, SvREFCNT_inc(*PL_stack_sp--));
2151 Perl_convert(pTHX_ I32 type, I32 flags, OP *o)
2154 if (!o || o->op_type != OP_LIST)
2155 o = newLISTOP(OP_LIST, 0, o, Nullop);
2157 o->op_flags &= ~OPf_WANT;
2159 if (!(PL_opargs[type] & OA_MARK))
2160 op_null(cLISTOPo->op_first);
2162 o->op_type = (OPCODE)type;
2163 o->op_ppaddr = PL_ppaddr[type];
2164 o->op_flags |= flags;
2166 o = CHECKOP(type, o);
2167 if (o->op_type != (unsigned)type)
2170 return fold_constants(o);
2173 /* List constructors */
2176 Perl_append_elem(pTHX_ I32 type, OP *first, OP *last)
2184 if (first->op_type != (unsigned)type
2185 || (type == OP_LIST && (first->op_flags & OPf_PARENS)))
2187 return newLISTOP(type, 0, first, last);
2190 if (first->op_flags & OPf_KIDS)
2191 ((LISTOP*)first)->op_last->op_sibling = last;
2193 first->op_flags |= OPf_KIDS;
2194 ((LISTOP*)first)->op_first = last;
2196 ((LISTOP*)first)->op_last = last;
2201 Perl_append_list(pTHX_ I32 type, LISTOP *first, LISTOP *last)
2209 if (first->op_type != (unsigned)type)
2210 return prepend_elem(type, (OP*)first, (OP*)last);
2212 if (last->op_type != (unsigned)type)
2213 return append_elem(type, (OP*)first, (OP*)last);
2215 first->op_last->op_sibling = last->op_first;
2216 first->op_last = last->op_last;
2217 first->op_flags |= (last->op_flags & OPf_KIDS);
2225 Perl_prepend_elem(pTHX_ I32 type, OP *first, OP *last)
2233 if (last->op_type == (unsigned)type) {
2234 if (type == OP_LIST) { /* already a PUSHMARK there */
2235 first->op_sibling = ((LISTOP*)last)->op_first->op_sibling;
2236 ((LISTOP*)last)->op_first->op_sibling = first;
2237 if (!(first->op_flags & OPf_PARENS))
2238 last->op_flags &= ~OPf_PARENS;
2241 if (!(last->op_flags & OPf_KIDS)) {
2242 ((LISTOP*)last)->op_last = first;
2243 last->op_flags |= OPf_KIDS;
2245 first->op_sibling = ((LISTOP*)last)->op_first;
2246 ((LISTOP*)last)->op_first = first;
2248 last->op_flags |= OPf_KIDS;
2252 return newLISTOP(type, 0, first, last);
2258 Perl_newNULLLIST(pTHX)
2260 return newOP(OP_STUB, 0);
2264 Perl_force_list(pTHX_ OP *o)
2266 if (!o || o->op_type != OP_LIST)
2267 o = newLISTOP(OP_LIST, 0, o, Nullop);
2273 Perl_newLISTOP(pTHX_ I32 type, I32 flags, OP *first, OP *last)
2278 NewOp(1101, listop, 1, LISTOP);
2280 listop->op_type = (OPCODE)type;
2281 listop->op_ppaddr = PL_ppaddr[type];
2284 listop->op_flags = (U8)flags;
2288 else if (!first && last)
2291 first->op_sibling = last;
2292 listop->op_first = first;
2293 listop->op_last = last;
2294 if (type == OP_LIST) {
2295 OP* const pushop = newOP(OP_PUSHMARK, 0);
2296 pushop->op_sibling = first;
2297 listop->op_first = pushop;
2298 listop->op_flags |= OPf_KIDS;
2300 listop->op_last = pushop;
2303 return CHECKOP(type, listop);
2307 Perl_newOP(pTHX_ I32 type, I32 flags)
2311 NewOp(1101, o, 1, OP);
2312 o->op_type = (OPCODE)type;
2313 o->op_ppaddr = PL_ppaddr[type];
2314 o->op_flags = (U8)flags;
2317 o->op_private = (U8)(0 | (flags >> 8));
2318 if (PL_opargs[type] & OA_RETSCALAR)
2320 if (PL_opargs[type] & OA_TARGET)
2321 o->op_targ = pad_alloc(type, SVs_PADTMP);
2322 return CHECKOP(type, o);
2326 Perl_newUNOP(pTHX_ I32 type, I32 flags, OP *first)
2332 first = newOP(OP_STUB, 0);
2333 if (PL_opargs[type] & OA_MARK)
2334 first = force_list(first);
2336 NewOp(1101, unop, 1, UNOP);
2337 unop->op_type = (OPCODE)type;
2338 unop->op_ppaddr = PL_ppaddr[type];
2339 unop->op_first = first;
2340 unop->op_flags = (U8)(flags | OPf_KIDS);
2341 unop->op_private = (U8)(1 | (flags >> 8));
2342 unop = (UNOP*) CHECKOP(type, unop);
2346 return fold_constants((OP *) unop);
2350 Perl_newBINOP(pTHX_ I32 type, I32 flags, OP *first, OP *last)
2354 NewOp(1101, binop, 1, BINOP);
2357 first = newOP(OP_NULL, 0);
2359 binop->op_type = (OPCODE)type;
2360 binop->op_ppaddr = PL_ppaddr[type];
2361 binop->op_first = first;
2362 binop->op_flags = (U8)(flags | OPf_KIDS);
2365 binop->op_private = (U8)(1 | (flags >> 8));
2368 binop->op_private = (U8)(2 | (flags >> 8));
2369 first->op_sibling = last;
2372 binop = (BINOP*)CHECKOP(type, binop);
2373 if (binop->op_next || binop->op_type != (OPCODE)type)
2376 binop->op_last = binop->op_first->op_sibling;
2378 return fold_constants((OP *)binop);
2381 static int uvcompare(const void *a, const void *b) __attribute__nonnull__(1) __attribute__nonnull__(2) __attribute__pure__;
2382 static int uvcompare(const void *a, const void *b)
2384 if (*((const UV *)a) < (*(const UV *)b))
2386 if (*((const UV *)a) > (*(const UV *)b))
2388 if (*((const UV *)a+1) < (*(const UV *)b+1))
2390 if (*((const UV *)a+1) > (*(const UV *)b+1))
2396 Perl_pmtrans(pTHX_ OP *o, OP *expr, OP *repl)
2398 SV * const tstr = ((SVOP*)expr)->op_sv;
2399 SV * const rstr = ((SVOP*)repl)->op_sv;
2402 const U8 *t = (U8*)SvPV_const(tstr, tlen);
2403 const U8 *r = (U8*)SvPV_const(rstr, rlen);
2407 register short *tbl;
2409 const I32 complement = o->op_private & OPpTRANS_COMPLEMENT;
2410 const I32 squash = o->op_private & OPpTRANS_SQUASH;
2411 I32 del = o->op_private & OPpTRANS_DELETE;
2412 PL_hints |= HINT_BLOCK_SCOPE;
2415 o->op_private |= OPpTRANS_FROM_UTF;
2418 o->op_private |= OPpTRANS_TO_UTF;
2420 if (o->op_private & (OPpTRANS_FROM_UTF|OPpTRANS_TO_UTF)) {
2421 SV* const listsv = newSVpvn("# comment\n",10);
2423 const U8* tend = t + tlen;
2424 const U8* rend = r + rlen;
2438 const I32 from_utf = o->op_private & OPpTRANS_FROM_UTF;
2439 const I32 to_utf = o->op_private & OPpTRANS_TO_UTF;
2445 t = tsave = bytes_to_utf8(t, &len);
2448 if (!to_utf && rlen) {
2450 r = rsave = bytes_to_utf8(r, &len);
2454 /* There are several snags with this code on EBCDIC:
2455 1. 0xFF is a legal UTF-EBCDIC byte (there are no illegal bytes).
2456 2. scan_const() in toke.c has encoded chars in native encoding which makes
2457 ranges at least in EBCDIC 0..255 range the bottom odd.
2461 U8 tmpbuf[UTF8_MAXBYTES+1];
2464 Newx(cp, 2*tlen, UV);
2466 transv = newSVpvn("",0);
2468 cp[2*i] = utf8n_to_uvuni(t, tend-t, &ulen, 0);
2470 if (t < tend && NATIVE_TO_UTF(*t) == 0xff) {
2472 cp[2*i+1] = utf8n_to_uvuni(t, tend-t, &ulen, 0);
2476 cp[2*i+1] = cp[2*i];
2480 qsort(cp, i, 2*sizeof(UV), uvcompare);
2481 for (j = 0; j < i; j++) {
2483 diff = val - nextmin;
2485 t = uvuni_to_utf8(tmpbuf,nextmin);
2486 sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf);
2488 U8 range_mark = UTF_TO_NATIVE(0xff);
2489 t = uvuni_to_utf8(tmpbuf, val - 1);
2490 sv_catpvn(transv, (char *)&range_mark, 1);
2491 sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf);
2498 t = uvuni_to_utf8(tmpbuf,nextmin);
2499 sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf);
2501 U8 range_mark = UTF_TO_NATIVE(0xff);
2502 sv_catpvn(transv, (char *)&range_mark, 1);
2504 t = uvuni_to_utf8_flags(tmpbuf, 0x7fffffff,
2505 UNICODE_ALLOW_SUPER);
2506 sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf);
2507 t = (const U8*)SvPVX_const(transv);
2508 tlen = SvCUR(transv);
2512 else if (!rlen && !del) {
2513 r = t; rlen = tlen; rend = tend;
2516 if ((!rlen && !del) || t == r ||
2517 (tlen == rlen && memEQ((char *)t, (char *)r, tlen)))
2519 o->op_private |= OPpTRANS_IDENTICAL;
2523 while (t < tend || tfirst <= tlast) {
2524 /* see if we need more "t" chars */
2525 if (tfirst > tlast) {
2526 tfirst = (I32)utf8n_to_uvuni(t, tend - t, &ulen, 0);
2528 if (t < tend && NATIVE_TO_UTF(*t) == 0xff) { /* illegal utf8 val indicates range */
2530 tlast = (I32)utf8n_to_uvuni(t, tend - t, &ulen, 0);
2537 /* now see if we need more "r" chars */
2538 if (rfirst > rlast) {
2540 rfirst = (I32)utf8n_to_uvuni(r, rend - r, &ulen, 0);
2542 if (r < rend && NATIVE_TO_UTF(*r) == 0xff) { /* illegal utf8 val indicates range */
2544 rlast = (I32)utf8n_to_uvuni(r, rend - r, &ulen, 0);
2553 rfirst = rlast = 0xffffffff;
2557 /* now see which range will peter our first, if either. */
2558 tdiff = tlast - tfirst;
2559 rdiff = rlast - rfirst;
2566 if (rfirst == 0xffffffff) {
2567 diff = tdiff; /* oops, pretend rdiff is infinite */
2569 Perl_sv_catpvf(aTHX_ listsv, "%04lx\t%04lx\tXXXX\n",
2570 (long)tfirst, (long)tlast);
2572 Perl_sv_catpvf(aTHX_ listsv, "%04lx\t\tXXXX\n", (long)tfirst);
2576 Perl_sv_catpvf(aTHX_ listsv, "%04lx\t%04lx\t%04lx\n",
2577 (long)tfirst, (long)(tfirst + diff),
2580 Perl_sv_catpvf(aTHX_ listsv, "%04lx\t\t%04lx\n",
2581 (long)tfirst, (long)rfirst);
2583 if (rfirst + diff > max)
2584 max = rfirst + diff;
2586 grows = (tfirst < rfirst &&
2587 UNISKIP(tfirst) < UNISKIP(rfirst + diff));
2599 else if (max > 0xff)
2604 Safefree(cPVOPo->op_pv);
2605 cSVOPo->op_sv = (SV*)swash_init("utf8", "", listsv, bits, none);
2606 SvREFCNT_dec(listsv);
2608 SvREFCNT_dec(transv);
2610 if (!del && havefinal && rlen)
2611 (void)hv_store((HV*)SvRV((cSVOPo->op_sv)), "FINAL", 5,
2612 newSVuv((UV)final), 0);
2615 o->op_private |= OPpTRANS_GROWS;
2627 tbl = (short*)cPVOPo->op_pv;
2629 Zero(tbl, 256, short);
2630 for (i = 0; i < (I32)tlen; i++)
2632 for (i = 0, j = 0; i < 256; i++) {
2634 if (j >= (I32)rlen) {
2643 if (i < 128 && r[j] >= 128)
2653 o->op_private |= OPpTRANS_IDENTICAL;
2655 else if (j >= (I32)rlen)
2658 cPVOPo->op_pv = (char*)Renew(tbl, 0x101+rlen-j, short);
2659 tbl[0x100] = (short)(rlen - j);
2660 for (i=0; i < (I32)rlen - j; i++)
2661 tbl[0x101+i] = r[j+i];
2665 if (!rlen && !del) {
2668 o->op_private |= OPpTRANS_IDENTICAL;
2670 else if (!squash && rlen == tlen && memEQ((char*)t, (char*)r, tlen)) {
2671 o->op_private |= OPpTRANS_IDENTICAL;
2673 for (i = 0; i < 256; i++)
2675 for (i = 0, j = 0; i < (I32)tlen; i++,j++) {
2676 if (j >= (I32)rlen) {
2678 if (tbl[t[i]] == -1)
2684 if (tbl[t[i]] == -1) {
2685 if (t[i] < 128 && r[j] >= 128)
2692 o->op_private |= OPpTRANS_GROWS;
2700 Perl_newPMOP(pTHX_ I32 type, I32 flags)
2705 NewOp(1101, pmop, 1, PMOP);
2706 pmop->op_type = (OPCODE)type;
2707 pmop->op_ppaddr = PL_ppaddr[type];
2708 pmop->op_flags = (U8)flags;
2709 pmop->op_private = (U8)(0 | (flags >> 8));
2711 if (PL_hints & HINT_RE_TAINT)
2712 pmop->op_pmpermflags |= PMf_RETAINT;
2713 if (PL_hints & HINT_LOCALE)
2714 pmop->op_pmpermflags |= PMf_LOCALE;
2715 pmop->op_pmflags = pmop->op_pmpermflags;
2718 if (av_len((AV*) PL_regex_pad[0]) > -1) {
2719 SV * const repointer = av_pop((AV*)PL_regex_pad[0]);
2720 pmop->op_pmoffset = SvIV(repointer);
2721 SvREPADTMP_off(repointer);
2722 sv_setiv(repointer,0);
2724 SV * const repointer = newSViv(0);
2725 av_push(PL_regex_padav,SvREFCNT_inc(repointer));
2726 pmop->op_pmoffset = av_len(PL_regex_padav);
2727 PL_regex_pad = AvARRAY(PL_regex_padav);
2731 /* link into pm list */
2732 if (type != OP_TRANS && PL_curstash) {
2733 MAGIC *mg = mg_find((SV*)PL_curstash, PERL_MAGIC_symtab);
2736 mg = sv_magicext((SV*)PL_curstash, 0, PERL_MAGIC_symtab, 0, 0, 0);
2738 pmop->op_pmnext = (PMOP*)mg->mg_obj;
2739 mg->mg_obj = (SV*)pmop;
2740 PmopSTASH_set(pmop,PL_curstash);
2743 return CHECKOP(type, pmop);
2746 /* Given some sort of match op o, and an expression expr containing a
2747 * pattern, either compile expr into a regex and attach it to o (if it's
2748 * constant), or convert expr into a runtime regcomp op sequence (if it's
2751 * isreg indicates that the pattern is part of a regex construct, eg
2752 * $x =~ /pattern/ or split /pattern/, as opposed to $x =~ $pattern or
2753 * split "pattern", which aren't. In the former case, expr will be a list
2754 * if the pattern contains more than one term (eg /a$b/) or if it contains
2755 * a replacement, ie s/// or tr///.
2759 Perl_pmruntime(pTHX_ OP *o, OP *expr, bool isreg)
2764 I32 repl_has_vars = 0;
2768 if (o->op_type == OP_SUBST || o->op_type == OP_TRANS) {
2769 /* last element in list is the replacement; pop it */
2771 repl = cLISTOPx(expr)->op_last;
2772 kid = cLISTOPx(expr)->op_first;
2773 while (kid->op_sibling != repl)
2774 kid = kid->op_sibling;
2775 kid->op_sibling = Nullop;
2776 cLISTOPx(expr)->op_last = kid;
2779 if (isreg && expr->op_type == OP_LIST &&
2780 cLISTOPx(expr)->op_first->op_sibling == cLISTOPx(expr)->op_last)
2782 /* convert single element list to element */
2784 expr = cLISTOPx(oe)->op_first->op_sibling;
2785 cLISTOPx(oe)->op_first->op_sibling = Nullop;
2786 cLISTOPx(oe)->op_last = Nullop;
2790 if (o->op_type == OP_TRANS) {
2791 return pmtrans(o, expr, repl);
2794 reglist = isreg && expr->op_type == OP_LIST;
2798 PL_hints |= HINT_BLOCK_SCOPE;
2801 if (expr->op_type == OP_CONST) {
2803 SV *pat = ((SVOP*)expr)->op_sv;
2804 const char *p = SvPV_const(pat, plen);
2805 if ((o->op_flags & OPf_SPECIAL) && (*p == ' ' && p[1] == '\0')) {
2806 U32 was_readonly = SvREADONLY(pat);
2810 sv_force_normal_flags(pat, 0);
2811 assert(!SvREADONLY(pat));
2814 SvREADONLY_off(pat);
2818 sv_setpvn(pat, "\\s+", 3);
2820 SvFLAGS(pat) |= was_readonly;
2822 p = SvPV_const(pat, plen);
2823 pm->op_pmflags |= PMf_SKIPWHITE;
2826 pm->op_pmdynflags |= PMdf_UTF8;
2827 /* FIXME - can we make this function take const char * args? */
2828 PM_SETRE(pm, CALLREGCOMP(aTHX_ (char*)p, (char*)p + plen, pm));
2829 if (strEQ("\\s+", PM_GETRE(pm)->precomp))
2830 pm->op_pmflags |= PMf_WHITE;
2834 if (pm->op_pmflags & PMf_KEEP || !(PL_hints & HINT_RE_EVAL))
2835 expr = newUNOP((!(PL_hints & HINT_RE_EVAL)
2837 : OP_REGCMAYBE),0,expr);
2839 NewOp(1101, rcop, 1, LOGOP);
2840 rcop->op_type = OP_REGCOMP;
2841 rcop->op_ppaddr = PL_ppaddr[OP_REGCOMP];
2842 rcop->op_first = scalar(expr);
2843 rcop->op_flags |= OPf_KIDS
2844 | ((PL_hints & HINT_RE_EVAL) ? OPf_SPECIAL : 0)
2845 | (reglist ? OPf_STACKED : 0);
2846 rcop->op_private = 1;
2849 rcop->op_targ = pad_alloc(rcop->op_type, SVs_PADTMP);
2851 /* /$x/ may cause an eval, since $x might be qr/(?{..})/ */
2854 /* establish postfix order */
2855 if (pm->op_pmflags & PMf_KEEP || !(PL_hints & HINT_RE_EVAL)) {
2857 rcop->op_next = expr;
2858 ((UNOP*)expr)->op_first->op_next = (OP*)rcop;
2861 rcop->op_next = LINKLIST(expr);
2862 expr->op_next = (OP*)rcop;
2865 prepend_elem(o->op_type, scalar((OP*)rcop), o);
2870 if (pm->op_pmflags & PMf_EVAL) {
2872 if (CopLINE(PL_curcop) < (line_t)PL_multi_end)
2873 CopLINE_set(PL_curcop, (line_t)PL_multi_end);
2875 else if (repl->op_type == OP_CONST)
2879 for (curop = LINKLIST(repl); curop!=repl; curop = LINKLIST(curop)) {
2880 if (PL_opargs[curop->op_type] & OA_DANGEROUS) {
2881 if (curop->op_type == OP_GV) {
2882 GV *gv = cGVOPx_gv(curop);
2884 if (strchr("&`'123456789+-\016\022", *GvENAME(gv)))
2887 else if (curop->op_type == OP_RV2CV)
2889 else if (curop->op_type == OP_RV2SV ||
2890 curop->op_type == OP_RV2AV ||
2891 curop->op_type == OP_RV2HV ||
2892 curop->op_type == OP_RV2GV) {
2893 if (lastop && lastop->op_type != OP_GV) /*funny deref?*/
2896 else if (curop->op_type == OP_PADSV ||
2897 curop->op_type == OP_PADAV ||
2898 curop->op_type == OP_PADHV ||
2899 curop->op_type == OP_PADANY) {
2902 else if (curop->op_type == OP_PUSHRE)
2903 ; /* Okay here, dangerous in newASSIGNOP */
2913 || PM_GETRE(pm)->reganch & ROPT_EVAL_SEEN))) {
2914 pm->op_pmflags |= PMf_CONST; /* const for long enough */
2915 pm->op_pmpermflags |= PMf_CONST; /* const for long enough */
2916 prepend_elem(o->op_type, scalar(repl), o);
2919 if (curop == repl && !PM_GETRE(pm)) { /* Has variables. */
2920 pm->op_pmflags |= PMf_MAYBE_CONST;
2921 pm->op_pmpermflags |= PMf_MAYBE_CONST;
2923 NewOp(1101, rcop, 1, LOGOP);
2924 rcop->op_type = OP_SUBSTCONT;
2925 rcop->op_ppaddr = PL_ppaddr[OP_SUBSTCONT];
2926 rcop->op_first = scalar(repl);
2927 rcop->op_flags |= OPf_KIDS;
2928 rcop->op_private = 1;
2931 /* establish postfix order */
2932 rcop->op_next = LINKLIST(repl);
2933 repl->op_next = (OP*)rcop;
2935 pm->op_pmreplroot = scalar((OP*)rcop);
2936 pm->op_pmreplstart = LINKLIST(rcop);
2945 Perl_newSVOP(pTHX_ I32 type, I32 flags, SV *sv)
2949 NewOp(1101, svop, 1, SVOP);
2950 svop->op_type = (OPCODE)type;
2951 svop->op_ppaddr = PL_ppaddr[type];
2953 svop->op_next = (OP*)svop;
2954 svop->op_flags = (U8)flags;
2955 if (PL_opargs[type] & OA_RETSCALAR)
2957 if (PL_opargs[type] & OA_TARGET)
2958 svop->op_targ = pad_alloc(type, SVs_PADTMP);
2959 return CHECKOP(type, svop);
2963 Perl_newPADOP(pTHX_ I32 type, I32 flags, SV *sv)
2967 NewOp(1101, padop, 1, PADOP);
2968 padop->op_type = (OPCODE)type;
2969 padop->op_ppaddr = PL_ppaddr[type];
2970 padop->op_padix = pad_alloc(type, SVs_PADTMP);
2971 SvREFCNT_dec(PAD_SVl(padop->op_padix));
2972 PAD_SETSV(padop->op_padix, sv);
2975 padop->op_next = (OP*)padop;
2976 padop->op_flags = (U8)flags;
2977 if (PL_opargs[type] & OA_RETSCALAR)
2979 if (PL_opargs[type] & OA_TARGET)
2980 padop->op_targ = pad_alloc(type, SVs_PADTMP);
2981 return CHECKOP(type, padop);
2985 Perl_newGVOP(pTHX_ I32 type, I32 flags, GV *gv)
2991 return newPADOP(type, flags, SvREFCNT_inc(gv));
2993 return newSVOP(type, flags, SvREFCNT_inc(gv));
2998 Perl_newPVOP(pTHX_ I32 type, I32 flags, char *pv)
3002 NewOp(1101, pvop, 1, PVOP);
3003 pvop->op_type = (OPCODE)type;
3004 pvop->op_ppaddr = PL_ppaddr[type];
3006 pvop->op_next = (OP*)pvop;
3007 pvop->op_flags = (U8)flags;
3008 if (PL_opargs[type] & OA_RETSCALAR)
3010 if (PL_opargs[type] & OA_TARGET)
3011 pvop->op_targ = pad_alloc(type, SVs_PADTMP);
3012 return CHECKOP(type, pvop);
3016 Perl_package(pTHX_ OP *o)
3021 save_hptr(&PL_curstash);
3022 save_item(PL_curstname);
3024 name = SvPV_const(cSVOPo->op_sv, len);
3025 PL_curstash = gv_stashpvn(name, len, TRUE);
3026 sv_setpvn(PL_curstname, name, len);
3029 PL_hints |= HINT_BLOCK_SCOPE;
3030 PL_copline = NOLINE;
3035 Perl_utilize(pTHX_ int aver, I32 floor, OP *version, OP *idop, OP *arg)
3041 if (idop->op_type != OP_CONST)
3042 Perl_croak(aTHX_ "Module name must be constant");
3047 SV * const vesv = ((SVOP*)version)->op_sv;
3049 if (!arg && !SvNIOKp(vesv)) {
3056 if (version->op_type != OP_CONST || !SvNIOKp(vesv))
3057 Perl_croak(aTHX_ "Version number must be constant number");
3059 /* Make copy of idop so we don't free it twice */
3060 pack = newSVOP(OP_CONST, 0, newSVsv(((SVOP*)idop)->op_sv));
3062 /* Fake up a method call to VERSION */
3063 meth = newSVpvn_share("VERSION", 7, 0);
3064 veop = convert(OP_ENTERSUB, OPf_STACKED|OPf_SPECIAL,
3065 append_elem(OP_LIST,
3066 prepend_elem(OP_LIST, pack, list(version)),
3067 newSVOP(OP_METHOD_NAMED, 0, meth)));
3071 /* Fake up an import/unimport */
3072 if (arg && arg->op_type == OP_STUB)
3073 imop = arg; /* no import on explicit () */
3074 else if (SvNIOKp(((SVOP*)idop)->op_sv)) {
3075 imop = Nullop; /* use 5.0; */
3077 idop->op_private |= OPpCONST_NOVER;
3082 /* Make copy of idop so we don't free it twice */
3083 pack = newSVOP(OP_CONST, 0, newSVsv(((SVOP*)idop)->op_sv));
3085 /* Fake up a method call to import/unimport */
3087 ? newSVpvn_share("import",6, 0) : newSVpvn_share("unimport", 8, 0);
3088 imop = convert(OP_ENTERSUB, OPf_STACKED|OPf_SPECIAL,
3089 append_elem(OP_LIST,
3090 prepend_elem(OP_LIST, pack, list(arg)),
3091 newSVOP(OP_METHOD_NAMED, 0, meth)));
3094 /* Fake up the BEGIN {}, which does its thing immediately. */
3096 newSVOP(OP_CONST, 0, newSVpvn_share("BEGIN", 5, 0)),
3099 append_elem(OP_LINESEQ,
3100 append_elem(OP_LINESEQ,
3101 newSTATEOP(0, Nullch, newUNOP(OP_REQUIRE, 0, idop)),
3102 newSTATEOP(0, Nullch, veop)),
3103 newSTATEOP(0, Nullch, imop) ));
3105 /* The "did you use incorrect case?" warning used to be here.
3106 * The problem is that on case-insensitive filesystems one
3107 * might get false positives for "use" (and "require"):
3108 * "use Strict" or "require CARP" will work. This causes
3109 * portability problems for the script: in case-strict
3110 * filesystems the script will stop working.
3112 * The "incorrect case" warning checked whether "use Foo"
3113 * imported "Foo" to your namespace, but that is wrong, too:
3114 * there is no requirement nor promise in the language that
3115 * a Foo.pm should or would contain anything in package "Foo".
3117 * There is very little Configure-wise that can be done, either:
3118 * the case-sensitivity of the build filesystem of Perl does not
3119 * help in guessing the case-sensitivity of the runtime environment.
3122 PL_hints |= HINT_BLOCK_SCOPE;
3123 PL_copline = NOLINE;
3125 PL_cop_seqmax++; /* Purely for B::*'s benefit */
3129 =head1 Embedding Functions
3131 =for apidoc load_module
3133 Loads the module whose name is pointed to by the string part of name.
3134 Note that the actual module name, not its filename, should be given.
3135 Eg, "Foo::Bar" instead of "Foo/Bar.pm". flags can be any of
3136 PERL_LOADMOD_DENY, PERL_LOADMOD_NOIMPORT, or PERL_LOADMOD_IMPORT_OPS
3137 (or 0 for no flags). ver, if specified, provides version semantics
3138 similar to C<use Foo::Bar VERSION>. The optional trailing SV*
3139 arguments can be used to specify arguments to the module's import()
3140 method, similar to C<use Foo::Bar VERSION LIST>.
3145 Perl_load_module(pTHX_ U32 flags, SV *name, SV *ver, ...)
3148 va_start(args, ver);
3149 vload_module(flags, name, ver, &args);
3153 #ifdef PERL_IMPLICIT_CONTEXT
3155 Perl_load_module_nocontext(U32 flags, SV *name, SV *ver, ...)
3159 va_start(args, ver);
3160 vload_module(flags, name, ver, &args);
3166 Perl_vload_module(pTHX_ U32 flags, SV *name, SV *ver, va_list *args)
3170 OP * const modname = newSVOP(OP_CONST, 0, name);
3171 modname->op_private |= OPpCONST_BARE;
3173 veop = newSVOP(OP_CONST, 0, ver);
3177 if (flags & PERL_LOADMOD_NOIMPORT) {
3178 imop = sawparens(newNULLLIST());
3180 else if (flags & PERL_LOADMOD_IMPORT_OPS) {
3181 imop = va_arg(*args, OP*);
3186 sv = va_arg(*args, SV*);
3188 imop = append_elem(OP_LIST, imop, newSVOP(OP_CONST, 0, sv));
3189 sv = va_arg(*args, SV*);
3193 const line_t ocopline = PL_copline;
3194 COP * const ocurcop = PL_curcop;
3195 const int oexpect = PL_expect;
3197 utilize(!(flags & PERL_LOADMOD_DENY), start_subparse(FALSE, 0),
3198 veop, modname, imop);
3199 PL_expect = oexpect;
3200 PL_copline = ocopline;
3201 PL_curcop = ocurcop;
3206 Perl_dofile(pTHX_ OP *term, I32 force_builtin)
3211 if (!force_builtin) {
3212 gv = gv_fetchpv("do", FALSE, SVt_PVCV);
3213 if (!(gv && GvCVu(gv) && GvIMPORTED_CV(gv))) {
3214 GV * const * const gvp = (GV**)hv_fetch(PL_globalstash, "do", 2, FALSE);
3215 gv = gvp ? *gvp : Nullgv;
3219 if (gv && GvCVu(gv) && GvIMPORTED_CV(gv)) {
3220 doop = ck_subr(newUNOP(OP_ENTERSUB, OPf_STACKED,
3221 append_elem(OP_LIST, term,
3222 scalar(newUNOP(OP_RV2CV, 0,
3227 doop = newUNOP(OP_DOFILE, 0, scalar(term));
3233 Perl_newSLICEOP(pTHX_ I32 flags, OP *subscript, OP *listval)
3235 return newBINOP(OP_LSLICE, flags,
3236 list(force_list(subscript)),
3237 list(force_list(listval)) );
3241 S_is_list_assignment(pTHX_ register const OP *o)
3246 if (o->op_type == OP_NULL && o->op_flags & OPf_KIDS)
3247 o = cUNOPo->op_first;
3249 if (o->op_type == OP_COND_EXPR) {
3250 const I32 t = is_list_assignment(cLOGOPo->op_first->op_sibling);
3251 const I32 f = is_list_assignment(cLOGOPo->op_first->op_sibling->op_sibling);
3256 yyerror("Assignment to both a list and a scalar");
3260 if (o->op_type == OP_LIST &&
3261 (o->op_flags & OPf_WANT) == OPf_WANT_SCALAR &&
3262 o->op_private & OPpLVAL_INTRO)
3265 if (o->op_type == OP_LIST || o->op_flags & OPf_PARENS ||
3266 o->op_type == OP_RV2AV || o->op_type == OP_RV2HV ||
3267 o->op_type == OP_ASLICE || o->op_type == OP_HSLICE)
3270 if (o->op_type == OP_PADAV || o->op_type == OP_PADHV)
3273 if (o->op_type == OP_RV2SV)
3280 Perl_newASSIGNOP(pTHX_ I32 flags, OP *left, I32 optype, OP *right)
3285 if (optype == OP_ANDASSIGN || optype == OP_ORASSIGN || optype == OP_DORASSIGN) {
3286 return newLOGOP(optype, 0,
3287 mod(scalar(left), optype),
3288 newUNOP(OP_SASSIGN, 0, scalar(right)));
3291 return newBINOP(optype, OPf_STACKED,
3292 mod(scalar(left), optype), scalar(right));
3296 if (is_list_assignment(left)) {
3300 /* Grandfathering $[ assignment here. Bletch.*/
3301 /* Only simple assignments like C<< ($[) = 1 >> are allowed */
3302 PL_eval_start = (left->op_type == OP_CONST) ? right : 0;
3303 left = mod(left, OP_AASSIGN);
3306 else if (left->op_type == OP_CONST) {
3307 /* Result of assignment is always 1 (or we'd be dead already) */
3308 return newSVOP(OP_CONST, 0, newSViv(1));
3310 /* optimise C<my @x = ()> to C<my @x>, and likewise for hashes */
3311 if ((left->op_type == OP_PADAV || left->op_type == OP_PADHV)
3312 && right->op_type == OP_STUB
3313 && (left->op_private & OPpLVAL_INTRO))
3316 left->op_flags &= ~(OPf_REF|OPf_SPECIAL);
3319 curop = list(force_list(left));
3320 o = newBINOP(OP_AASSIGN, flags, list(force_list(right)), curop);
3321 o->op_private = (U8)(0 | (flags >> 8));
3323 /* PL_generation sorcery:
3324 * an assignment like ($a,$b) = ($c,$d) is easier than
3325 * ($a,$b) = ($c,$a), since there is no need for temporary vars.
3326 * To detect whether there are common vars, the global var
3327 * PL_generation is incremented for each assign op we compile.
3328 * Then, while compiling the assign op, we run through all the
3329 * variables on both sides of the assignment, setting a spare slot
3330 * in each of them to PL_generation. If any of them already have
3331 * that value, we know we've got commonality. We could use a
3332 * single bit marker, but then we'd have to make 2 passes, first
3333 * to clear the flag, then to test and set it. To find somewhere
3334 * to store these values, evil chicanery is done with SvCUR().
3337 if (!(left->op_private & OPpLVAL_INTRO)) {
3340 for (curop = LINKLIST(o); curop != o; curop = LINKLIST(curop)) {
3341 if (PL_opargs[curop->op_type] & OA_DANGEROUS) {
3342 if (curop->op_type == OP_GV) {
3343 GV *gv = cGVOPx_gv(curop);
3344 if (gv == PL_defgv || (int)SvCUR(gv) == PL_generation)
3346 SvCUR_set(gv, PL_generation);
3348 else if (curop->op_type == OP_PADSV ||
3349 curop->op_type == OP_PADAV ||
3350 curop->op_type == OP_PADHV ||
3351 curop->op_type == OP_PADANY)
3353 if (PAD_COMPNAME_GEN(curop->op_targ)
3354 == (STRLEN)PL_generation)
3356 PAD_COMPNAME_GEN_set(curop->op_targ, PL_generation);
3359 else if (curop->op_type == OP_RV2CV)
3361 else if (curop->op_type == OP_RV2SV ||
3362 curop->op_type == OP_RV2AV ||
3363 curop->op_type == OP_RV2HV ||
3364 curop->op_type == OP_RV2GV) {
3365 if (lastop->op_type != OP_GV) /* funny deref? */
3368 else if (curop->op_type == OP_PUSHRE) {
3369 if (((PMOP*)curop)->op_pmreplroot) {
3371 GV *gv = (GV*)PAD_SVl(INT2PTR(PADOFFSET,
3372 ((PMOP*)curop)->op_pmreplroot));
3374 GV *gv = (GV*)((PMOP*)curop)->op_pmreplroot;
3376 if (gv == PL_defgv || (int)SvCUR(gv) == PL_generation)
3378 SvCUR_set(gv, PL_generation);
3387 o->op_private |= OPpASSIGN_COMMON;
3389 if (right && right->op_type == OP_SPLIT) {
3391 if ((tmpop = ((LISTOP*)right)->op_first) &&
3392 tmpop->op_type == OP_PUSHRE)
3394 PMOP * const pm = (PMOP*)tmpop;
3395 if (left->op_type == OP_RV2AV &&
3396 !(left->op_private & OPpLVAL_INTRO) &&
3397 !(o->op_private & OPpASSIGN_COMMON) )
3399 tmpop = ((UNOP*)left)->op_first;
3400 if (tmpop->op_type == OP_GV && !pm->op_pmreplroot) {
3402 pm->op_pmreplroot = INT2PTR(OP*, cPADOPx(tmpop)->op_padix);
3403 cPADOPx(tmpop)->op_padix = 0; /* steal it */
3405 pm->op_pmreplroot = (OP*)cSVOPx(tmpop)->op_sv;
3406 cSVOPx(tmpop)->op_sv = Nullsv; /* steal it */
3408 pm->op_pmflags |= PMf_ONCE;
3409 tmpop = cUNOPo->op_first; /* to list (nulled) */
3410 tmpop = ((UNOP*)tmpop)->op_first; /* to pushmark */
3411 tmpop->op_sibling = Nullop; /* don't free split */
3412 right->op_next = tmpop->op_next; /* fix starting loc */
3413 op_free(o); /* blow off assign */
3414 right->op_flags &= ~OPf_WANT;
3415 /* "I don't know and I don't care." */
3420 if (PL_modcount < RETURN_UNLIMITED_NUMBER &&
3421 ((LISTOP*)right)->op_last->op_type == OP_CONST)
3423 SV *sv = ((SVOP*)((LISTOP*)right)->op_last)->op_sv;
3425 sv_setiv(sv, PL_modcount+1);
3433 right = newOP(OP_UNDEF, 0);
3434 if (right->op_type == OP_READLINE) {
3435 right->op_flags |= OPf_STACKED;
3436 return newBINOP(OP_NULL, flags, mod(scalar(left), OP_SASSIGN), scalar(right));
3439 PL_eval_start = right; /* Grandfathering $[ assignment here. Bletch.*/
3440 o = newBINOP(OP_SASSIGN, flags,
3441 scalar(right), mod(scalar(left), OP_SASSIGN) );
3445 o = newSVOP(OP_CONST, 0, newSViv(PL_compiling.cop_arybase));
3452 Perl_newSTATEOP(pTHX_ I32 flags, char *label, OP *o)
3455 const U32 seq = intro_my();
3458 NewOp(1101, cop, 1, COP);
3459 if (PERLDB_LINE && CopLINE(PL_curcop) && PL_curstash != PL_debstash) {
3460 cop->op_type = OP_DBSTATE;
3461 cop->op_ppaddr = PL_ppaddr[ OP_DBSTATE ];
3464 cop->op_type = OP_NEXTSTATE;
3465 cop->op_ppaddr = PL_ppaddr[ OP_NEXTSTATE ];
3467 cop->op_flags = (U8)flags;
3468 cop->op_private = (U8)(PL_hints & HINT_PRIVATE_MASK);
3470 cop->op_private |= NATIVE_HINTS;
3472 PL_compiling.op_private = cop->op_private;
3473 cop->op_next = (OP*)cop;
3476 cop->cop_label = label;
3477 PL_hints |= HINT_BLOCK_SCOPE;
3480 cop->cop_arybase = PL_curcop->cop_arybase;
3481 if (specialWARN(PL_curcop->cop_warnings))
3482 cop->cop_warnings = PL_curcop->cop_warnings ;
3484 cop->cop_warnings = newSVsv(PL_curcop->cop_warnings) ;
3485 if (specialCopIO(PL_curcop->cop_io))
3486 cop->cop_io = PL_curcop->cop_io;
3488 cop->cop_io = newSVsv(PL_curcop->cop_io) ;
3491 if (PL_copline == NOLINE)
3492 CopLINE_set(cop, CopLINE(PL_curcop));
3494 CopLINE_set(cop, PL_copline);
3495 PL_copline = NOLINE;
3498 CopFILE_set(cop, CopFILE(PL_curcop)); /* XXX share in a pvtable? */
3500 CopFILEGV_set(cop, CopFILEGV(PL_curcop));
3502 CopSTASH_set(cop, PL_curstash);
3504 if (PERLDB_LINE && PL_curstash != PL_debstash) {
3505 SV * const * const svp = av_fetch(CopFILEAV(PL_curcop), (I32)CopLINE(cop), FALSE);
3506 if (svp && *svp != &PL_sv_undef ) {
3507 (void)SvIOK_on(*svp);
3508 SvIV_set(*svp, PTR2IV(cop));
3512 return prepend_elem(OP_LINESEQ, (OP*)cop, o);
3517 Perl_newLOGOP(pTHX_ I32 type, I32 flags, OP *first, OP *other)
3520 return new_logop(type, flags, &first, &other);
3524 S_new_logop(pTHX_ I32 type, I32 flags, OP** firstp, OP** otherp)
3529 OP *first = *firstp;
3530 OP * const other = *otherp;
3532 if (type == OP_XOR) /* Not short circuit, but here by precedence. */
3533 return newBINOP(type, flags, scalar(first), scalar(other));
3535 scalarboolean(first);
3536 /* optimize "!a && b" to "a || b", and "!a || b" to "a && b" */
3537 if (first->op_type == OP_NOT && (first->op_flags & OPf_SPECIAL)) {
3538 if (type == OP_AND || type == OP_OR) {
3544 first = *firstp = cUNOPo->op_first;
3546 first->op_next = o->op_next;
3547 cUNOPo->op_first = Nullop;
3551 if (first->op_type == OP_CONST) {
3552 if (first->op_private & OPpCONST_STRICT)
3553 no_bareword_allowed(first);
3554 else if ((first->op_private & OPpCONST_BARE) && ckWARN(WARN_BAREWORD))
3555 Perl_warner(aTHX_ packWARN(WARN_BAREWORD), "Bareword found in conditional");
3556 if ((type == OP_AND && SvTRUE(((SVOP*)first)->op_sv)) ||
3557 (type == OP_OR && !SvTRUE(((SVOP*)first)->op_sv)) ||
3558 (type == OP_DOR && !SvOK(((SVOP*)first)->op_sv))) {
3561 if (other->op_type == OP_CONST)
3562 other->op_private |= OPpCONST_SHORTCIRCUIT;
3566 /* check for C<my $x if 0>, or C<my($x,$y) if 0> */
3567 const OP *o2 = other;
3568 if ( ! (o2->op_type == OP_LIST
3569 && (( o2 = cUNOPx(o2)->op_first))
3570 && o2->op_type == OP_PUSHMARK
3571 && (( o2 = o2->op_sibling)) )
3574 if ((o2->op_type == OP_PADSV || o2->op_type == OP_PADAV
3575 || o2->op_type == OP_PADHV)
3576 && o2->op_private & OPpLVAL_INTRO
3577 && ckWARN(WARN_DEPRECATED))
3579 Perl_warner(aTHX_ packWARN(WARN_DEPRECATED),
3580 "Deprecated use of my() in false conditional");
3585 if (first->op_type == OP_CONST)
3586 first->op_private |= OPpCONST_SHORTCIRCUIT;
3590 else if ((first->op_flags & OPf_KIDS) && type != OP_DOR
3591 && ckWARN(WARN_MISC)) /* [#24076] Don't warn for <FH> err FOO. */
3593 const OP * const k1 = ((UNOP*)first)->op_first;
3594 const OP * const k2 = k1->op_sibling;
3596 switch (first->op_type)
3599 if (k2 && k2->op_type == OP_READLINE
3600 && (k2->op_flags & OPf_STACKED)
3601 && ((k1->op_flags & OPf_WANT) == OPf_WANT_SCALAR))
3603 warnop = k2->op_type;
3608 if (k1->op_type == OP_READDIR
3609 || k1->op_type == OP_GLOB
3610 || (k1->op_type == OP_NULL && k1->op_targ == OP_GLOB)
3611 || k1->op_type == OP_EACH)
3613 warnop = ((k1->op_type == OP_NULL)
3614 ? (OPCODE)k1->op_targ : k1->op_type);
3619 const line_t oldline = CopLINE(PL_curcop);
3620 CopLINE_set(PL_curcop, PL_copline);
3621 Perl_warner(aTHX_ packWARN(WARN_MISC),
3622 "Value of %s%s can be \"0\"; test with defined()",
3624 ((warnop == OP_READLINE || warnop == OP_GLOB)
3625 ? " construct" : "() operator"));
3626 CopLINE_set(PL_curcop, oldline);
3633 if (type == OP_ANDASSIGN || type == OP_ORASSIGN || type == OP_DORASSIGN)
3634 other->op_private |= OPpASSIGN_BACKWARDS; /* other is an OP_SASSIGN */
3636 NewOp(1101, logop, 1, LOGOP);
3638 logop->op_type = (OPCODE)type;
3639 logop->op_ppaddr = PL_ppaddr[type];
3640 logop->op_first = first;
3641 logop->op_flags = (U8)(flags | OPf_KIDS);
3642 logop->op_other = LINKLIST(other);
3643 logop->op_private = (U8)(1 | (flags >> 8));
3645 /* establish postfix order */
3646 logop->op_next = LINKLIST(first);
3647 first->op_next = (OP*)logop;
3648 first->op_sibling = other;
3650 CHECKOP(type,logop);
3652 o = newUNOP(OP_NULL, 0, (OP*)logop);
3659 Perl_newCONDOP(pTHX_ I32 flags, OP *first, OP *trueop, OP *falseop)
3667 return newLOGOP(OP_AND, 0, first, trueop);
3669 return newLOGOP(OP_OR, 0, first, falseop);
3671 scalarboolean(first);
3672 if (first->op_type == OP_CONST) {
3673 if (first->op_private & OPpCONST_BARE &&
3674 first->op_private & OPpCONST_STRICT) {
3675 no_bareword_allowed(first);
3677 if (SvTRUE(((SVOP*)first)->op_sv)) {
3688 NewOp(1101, logop, 1, LOGOP);
3689 logop->op_type = OP_COND_EXPR;
3690 logop->op_ppaddr = PL_ppaddr[OP_COND_EXPR];
3691 logop->op_first = first;
3692 logop->op_flags = (U8)(flags | OPf_KIDS);
3693 logop->op_private = (U8)(1 | (flags >> 8));
3694 logop->op_other = LINKLIST(trueop);
3695 logop->op_next = LINKLIST(falseop);
3697 CHECKOP(OP_COND_EXPR, /* that's logop->op_type */
3700 /* establish postfix order */
3701 start = LINKLIST(first);
3702 first->op_next = (OP*)logop;
3704 first->op_sibling = trueop;
3705 trueop->op_sibling = falseop;
3706 o = newUNOP(OP_NULL, 0, (OP*)logop);
3708 trueop->op_next = falseop->op_next = o;
3715 Perl_newRANGE(pTHX_ I32 flags, OP *left, OP *right)
3724 NewOp(1101, range, 1, LOGOP);
3726 range->op_type = OP_RANGE;
3727 range->op_ppaddr = PL_ppaddr[OP_RANGE];
3728 range->op_first = left;
3729 range->op_flags = OPf_KIDS;
3730 leftstart = LINKLIST(left);
3731 range->op_other = LINKLIST(right);
3732 range->op_private = (U8)(1 | (flags >> 8));
3734 left->op_sibling = right;
3736 range->op_next = (OP*)range;
3737 flip = newUNOP(OP_FLIP, flags, (OP*)range);
3738 flop = newUNOP(OP_FLOP, 0, flip);
3739 o = newUNOP(OP_NULL, 0, flop);
3741 range->op_next = leftstart;
3743 left->op_next = flip;
3744 right->op_next = flop;
3746 range->op_targ = pad_alloc(OP_RANGE, SVs_PADMY);
3747 sv_upgrade(PAD_SV(range->op_targ), SVt_PVNV);
3748 flip->op_targ = pad_alloc(OP_RANGE, SVs_PADMY);
3749 sv_upgrade(PAD_SV(flip->op_targ), SVt_PVNV);
3751 flip->op_private = left->op_type == OP_CONST ? OPpFLIP_LINENUM : 0;
3752 flop->op_private = right->op_type == OP_CONST ? OPpFLIP_LINENUM : 0;
3755 if (!flip->op_private || !flop->op_private)
3756 linklist(o); /* blow off optimizer unless constant */
3762 Perl_newLOOPOP(pTHX_ I32 flags, I32 debuggable, OP *expr, OP *block)
3766 const bool once = block && block->op_flags & OPf_SPECIAL &&
3767 (block->op_type == OP_ENTERSUB || block->op_type == OP_NULL);
3769 PERL_UNUSED_ARG(debuggable);
3772 if (once && expr->op_type == OP_CONST && !SvTRUE(((SVOP*)expr)->op_sv))
3773 return block; /* do {} while 0 does once */
3774 if (expr->op_type == OP_READLINE || expr->op_type == OP_GLOB
3775 || (expr->op_type == OP_NULL && expr->op_targ == OP_GLOB)) {
3776 expr = newUNOP(OP_DEFINED, 0,
3777 newASSIGNOP(0, newDEFSVOP(), 0, expr) );
3778 } else if (expr->op_flags & OPf_KIDS) {
3779 const OP * const k1 = ((UNOP*)expr)->op_first;
3780 const OP * const k2 = k1 ? k1->op_sibling : NULL;
3781 switch (expr->op_type) {
3783 if (k2 && k2->op_type == OP_READLINE
3784 && (k2->op_flags & OPf_STACKED)
3785 && ((k1->op_flags & OPf_WANT) == OPf_WANT_SCALAR))
3786 expr = newUNOP(OP_DEFINED, 0, expr);
3790 if (k1->op_type == OP_READDIR
3791 || k1->op_type == OP_GLOB
3792 || (k1->op_type == OP_NULL && k1->op_targ == OP_GLOB)
3793 || k1->op_type == OP_EACH)
3794 expr = newUNOP(OP_DEFINED, 0, expr);
3800 /* if block is null, the next append_elem() would put UNSTACK, a scalar
3801 * op, in listop. This is wrong. [perl #27024] */
3803 block = newOP(OP_NULL, 0);
3804 listop = append_elem(OP_LINESEQ, block, newOP(OP_UNSTACK, 0));
3805 o = new_logop(OP_AND, 0, &expr, &listop);
3808 ((LISTOP*)listop)->op_last->op_next = LINKLIST(o);
3810 if (once && o != listop)
3811 o->op_next = ((LOGOP*)cUNOPo->op_first)->op_other;
3814 o = newUNOP(OP_NULL, 0, o); /* or do {} while 1 loses outer block */
3816 o->op_flags |= flags;
3818 o->op_flags |= OPf_SPECIAL; /* suppress POPBLOCK curpm restoration*/
3823 Perl_newWHILEOP(pTHX_ I32 flags, I32 debuggable, LOOP *loop, I32
3824 whileline, OP *expr, OP *block, OP *cont, I32 has_my)
3833 PERL_UNUSED_ARG(debuggable);
3836 if (expr->op_type == OP_READLINE || expr->op_type == OP_GLOB
3837 || (expr->op_type == OP_NULL && expr->op_targ == OP_GLOB)) {
3838 expr = newUNOP(OP_DEFINED, 0,
3839 newASSIGNOP(0, newDEFSVOP(), 0, expr) );
3840 } else if (expr->op_flags & OPf_KIDS) {
3841 const OP * const k1 = ((UNOP*)expr)->op_first;
3842 const OP * const k2 = (k1) ? k1->op_sibling : NULL;
3843 switch (expr->op_type) {
3845 if (k2 && k2->op_type == OP_READLINE
3846 && (k2->op_flags & OPf_STACKED)
3847 && ((k1->op_flags & OPf_WANT) == OPf_WANT_SCALAR))
3848 expr = newUNOP(OP_DEFINED, 0, expr);
3852 if (k1->op_type == OP_READDIR
3853 || k1->op_type == OP_GLOB
3854 || (k1->op_type == OP_NULL && k1->op_targ == OP_GLOB)
3855 || k1->op_type == OP_EACH)
3856 expr = newUNOP(OP_DEFINED, 0, expr);
3863 block = newOP(OP_NULL, 0);
3864 else if (cont || has_my) {
3865 block = scope(block);
3869 next = LINKLIST(cont);
3872 OP * const unstack = newOP(OP_UNSTACK, 0);
3875 cont = append_elem(OP_LINESEQ, cont, unstack);
3878 listop = append_list(OP_LINESEQ, (LISTOP*)block, (LISTOP*)cont);
3879 redo = LINKLIST(listop);
3882 PL_copline = (line_t)whileline;
3884 o = new_logop(OP_AND, 0, &expr, &listop);
3885 if (o == expr && o->op_type == OP_CONST && !SvTRUE(cSVOPo->op_sv)) {
3886 op_free(expr); /* oops, it's a while (0) */
3888 return Nullop; /* listop already freed by new_logop */
3891 ((LISTOP*)listop)->op_last->op_next =
3892 (o == listop ? redo : LINKLIST(o));
3898 NewOp(1101,loop,1,LOOP);
3899 loop->op_type = OP_ENTERLOOP;
3900 loop->op_ppaddr = PL_ppaddr[OP_ENTERLOOP];
3901 loop->op_private = 0;
3902 loop->op_next = (OP*)loop;
3905 o = newBINOP(OP_LEAVELOOP, 0, (OP*)loop, o);
3907 loop->op_redoop = redo;
3908 loop->op_lastop = o;
3909 o->op_private |= loopflags;
3912 loop->op_nextop = next;
3914 loop->op_nextop = o;
3916 o->op_flags |= flags;
3917 o->op_private |= (flags >> 8);
3922 Perl_newFOROP(pTHX_ I32 flags, char *label, line_t forline, OP *sv, OP *expr, OP *block, OP *cont)
3927 PADOFFSET padoff = 0;
3932 if (sv->op_type == OP_RV2SV) { /* symbol table variable */
3933 iterpflags = sv->op_private & OPpOUR_INTRO; /* for our $x () */
3934 sv->op_type = OP_RV2GV;
3935 sv->op_ppaddr = PL_ppaddr[OP_RV2GV];
3937 else if (sv->op_type == OP_PADSV) { /* private variable */
3938 iterpflags = sv->op_private & OPpLVAL_INTRO; /* for my $x () */
3939 padoff = sv->op_targ;
3944 else if (sv->op_type == OP_THREADSV) { /* per-thread variable */
3945 padoff = sv->op_targ;
3947 iterflags |= OPf_SPECIAL;
3952 Perl_croak(aTHX_ "Can't use %s for loop variable", PL_op_desc[sv->op_type]);
3955 const I32 offset = pad_findmy("$_");
3956 if (offset == NOT_IN_PAD || PAD_COMPNAME_FLAGS(offset) & SVpad_OUR) {
3957 sv = newGVOP(OP_GV, 0, PL_defgv);
3963 if (expr->op_type == OP_RV2AV || expr->op_type == OP_PADAV) {
3964 expr = mod(force_list(scalar(ref(expr, OP_ITER))), OP_GREPSTART);
3965 iterflags |= OPf_STACKED;
3967 else if (expr->op_type == OP_NULL &&
3968 (expr->op_flags & OPf_KIDS) &&
3969 ((BINOP*)expr)->op_first->op_type == OP_FLOP)
3971 /* Basically turn for($x..$y) into the same as for($x,$y), but we
3972 * set the STACKED flag to indicate that these values are to be
3973 * treated as min/max values by 'pp_iterinit'.
3975 UNOP* const flip = (UNOP*)((UNOP*)((BINOP*)expr)->op_first)->op_first;
3976 LOGOP* const range = (LOGOP*) flip->op_first;
3977 OP* const left = range->op_first;
3978 OP* const right = left->op_sibling;
3981 range->op_flags &= ~OPf_KIDS;
3982 range->op_first = Nullop;
3984 listop = (LISTOP*)newLISTOP(OP_LIST, 0, left, right);
3985 listop->op_first->op_next = range->op_next;
3986 left->op_next = range->op_other;
3987 right->op_next = (OP*)listop;
3988 listop->op_next = listop->op_first;
3991 expr = (OP*)(listop);
3993 iterflags |= OPf_STACKED;
3996 expr = mod(force_list(expr), OP_GREPSTART);
3999 loop = (LOOP*)list(convert(OP_ENTERITER, iterflags,
4000 append_elem(OP_LIST, expr, scalar(sv))));
4001 assert(!loop->op_next);
4002 /* for my $x () sets OPpLVAL_INTRO;
4003 * for our $x () sets OPpOUR_INTRO */
4004 loop->op_private = (U8)iterpflags;
4005 #ifdef PL_OP_SLAB_ALLOC
4008 NewOp(1234,tmp,1,LOOP);
4009 Copy(loop,tmp,1,LISTOP);
4014 Renew(loop, 1, LOOP);
4016 loop->op_targ = padoff;
4017 wop = newWHILEOP(flags, 1, loop, forline, newOP(OP_ITER, 0), block, cont, 0);
4018 PL_copline = forline;
4019 return newSTATEOP(0, label, wop);
4023 Perl_newLOOPEX(pTHX_ I32 type, OP *label)
4027 if (type != OP_GOTO || label->op_type == OP_CONST) {
4028 /* "last()" means "last" */
4029 if (label->op_type == OP_STUB && (label->op_flags & OPf_PARENS))
4030 o = newOP(type, OPf_SPECIAL);
4032 o = newPVOP(type, 0, savepv(label->op_type == OP_CONST
4033 ? SvPVx_nolen_const(((SVOP*)label)->op_sv)
4039 /* Check whether it's going to be a goto &function */
4040 if (label->op_type == OP_ENTERSUB
4041 && !(label->op_flags & OPf_STACKED))
4042 label = newUNOP(OP_REFGEN, 0, mod(label, OP_REFGEN));
4043 o = newUNOP(type, OPf_STACKED, label);
4045 PL_hints |= HINT_BLOCK_SCOPE;
4050 =for apidoc cv_undef
4052 Clear out all the active components of a CV. This can happen either
4053 by an explicit C<undef &foo>, or by the reference count going to zero.
4054 In the former case, we keep the CvOUTSIDE pointer, so that any anonymous
4055 children can still follow the full lexical scope chain.
4061 Perl_cv_undef(pTHX_ CV *cv)
4065 if (CvFILE(cv) && !CvXSUB(cv)) {
4066 /* for XSUBs CvFILE point directly to static memory; __FILE__ */
4067 Safefree(CvFILE(cv));
4072 if (!CvXSUB(cv) && CvROOT(cv)) {
4074 Perl_croak(aTHX_ "Can't undef active subroutine");
4077 PAD_SAVE_SETNULLPAD();
4079 op_free(CvROOT(cv));
4080 CvROOT(cv) = Nullop;
4081 CvSTART(cv) = Nullop;
4084 SvPOK_off((SV*)cv); /* forget prototype */
4089 /* remove CvOUTSIDE unless this is an undef rather than a free */
4090 if (!SvREFCNT(cv) && CvOUTSIDE(cv)) {
4091 if (!CvWEAKOUTSIDE(cv))
4092 SvREFCNT_dec(CvOUTSIDE(cv));
4093 CvOUTSIDE(cv) = Nullcv;
4096 SvREFCNT_dec((SV*)CvXSUBANY(cv).any_ptr);
4102 /* delete all flags except WEAKOUTSIDE */
4103 CvFLAGS(cv) &= CVf_WEAKOUTSIDE;
4107 Perl_cv_ckproto(pTHX_ const CV *cv, const GV *gv, const char *p)
4109 if (((!p != !SvPOK(cv)) || (p && strNE(p, SvPVX_const(cv)))) && ckWARN_d(WARN_PROTOTYPE)) {
4110 SV* const msg = sv_newmortal();
4114 gv_efullname3(name = sv_newmortal(), gv, Nullch);
4115 sv_setpv(msg, "Prototype mismatch:");
4117 Perl_sv_catpvf(aTHX_ msg, " sub %"SVf, name);
4119 Perl_sv_catpvf(aTHX_ msg, " (%"SVf")", (const SV *)cv);
4121 Perl_sv_catpv(aTHX_ msg, ": none");
4122 sv_catpv(msg, " vs ");
4124 Perl_sv_catpvf(aTHX_ msg, "(%s)", p);
4126 sv_catpv(msg, "none");
4127 Perl_warner(aTHX_ packWARN(WARN_PROTOTYPE), "%"SVf, msg);
4131 static void const_sv_xsub(pTHX_ CV* cv);
4135 =head1 Optree Manipulation Functions
4137 =for apidoc cv_const_sv
4139 If C<cv> is a constant sub eligible for inlining. returns the constant
4140 value returned by the sub. Otherwise, returns NULL.
4142 Constant subs can be created with C<newCONSTSUB> or as described in
4143 L<perlsub/"Constant Functions">.
4148 Perl_cv_const_sv(pTHX_ CV *cv)
4150 if (!cv || !CvCONST(cv))
4152 return (SV*)CvXSUBANY(cv).any_ptr;
4155 /* op_const_sv: examine an optree to determine whether it's in-lineable.
4156 * Can be called in 3 ways:
4159 * look for a single OP_CONST with attached value: return the value
4161 * cv && CvCLONE(cv) && !CvCONST(cv)
4163 * examine the clone prototype, and if contains only a single
4164 * OP_CONST referencing a pad const, or a single PADSV referencing
4165 * an outer lexical, return a non-zero value to indicate the CV is
4166 * a candidate for "constizing" at clone time
4170 * We have just cloned an anon prototype that was marked as a const
4171 * candidiate. Try to grab the current value, and in the case of
4172 * PADSV, ignore it if it has multiple references. Return the value.
4176 Perl_op_const_sv(pTHX_ const OP *o, CV *cv)
4183 if (o->op_type == OP_LINESEQ && cLISTOPo->op_first)
4184 o = cLISTOPo->op_first->op_sibling;
4186 for (; o; o = o->op_next) {
4187 const OPCODE type = o->op_type;
4189 if (sv && o->op_next == o)
4191 if (o->op_next != o) {
4192 if (type == OP_NEXTSTATE || type == OP_NULL || type == OP_PUSHMARK)
4194 if (type == OP_DBSTATE)
4197 if (type == OP_LEAVESUB || type == OP_RETURN)
4201 if (type == OP_CONST && cSVOPo->op_sv)
4203 else if (cv && type == OP_CONST) {
4204 sv = PAD_BASE_SV(CvPADLIST(cv), o->op_targ);
4208 else if (cv && type == OP_PADSV) {
4209 if (CvCONST(cv)) { /* newly cloned anon */
4210 sv = PAD_BASE_SV(CvPADLIST(cv), o->op_targ);
4211 /* the candidate should have 1 ref from this pad and 1 ref
4212 * from the parent */
4213 if (!sv || SvREFCNT(sv) != 2)
4220 if (PAD_COMPNAME_FLAGS(o->op_targ) & SVf_FAKE)
4221 sv = &PL_sv_undef; /* an arbitrary non-null value */
4232 Perl_newMYSUB(pTHX_ I32 floor, OP *o, OP *proto, OP *attrs, OP *block)
4234 PERL_UNUSED_ARG(floor);
4244 Perl_croak(aTHX_ "\"my sub\" not yet implemented");
4248 Perl_newSUB(pTHX_ I32 floor, OP *o, OP *proto, OP *block)
4250 return Perl_newATTRSUB(aTHX_ floor, o, proto, Nullop, block);
4254 Perl_newATTRSUB(pTHX_ I32 floor, OP *o, OP *proto, OP *attrs, OP *block)
4265 const char * const name = o ? SvPVx_nolen_const(cSVOPo->op_sv) : Nullch;
4268 assert(proto->op_type == OP_CONST);
4269 ps = SvPVx_const(((SVOP*)proto)->op_sv, ps_len);
4274 if (!name && PERLDB_NAMEANON && CopLINE(PL_curcop)) {
4275 SV * const sv = sv_newmortal();
4276 Perl_sv_setpvf(aTHX_ sv, "%s[%s:%"IVdf"]",
4277 PL_curstash ? "__ANON__" : "__ANON__::__ANON__",
4278 CopFILE(PL_curcop), (IV)CopLINE(PL_curcop));
4279 aname = SvPVX_const(sv);
4284 gv_fetch_flags = (block || attrs || (CvFLAGS(PL_compcv) & CVf_BUILTIN_ATTRS))
4285 ? GV_ADDMULTI : GV_ADDMULTI | GV_NOINIT;
4286 gv = name ? gv_fetchsv(cSVOPo->op_sv, gv_fetch_flags, SVt_PVCV)
4287 : gv_fetchpv(aname ? aname
4288 : (PL_curstash ? "__ANON__" : "__ANON__::__ANON__"),
4289 gv_fetch_flags, SVt_PVCV);
4298 if (SvTYPE(gv) != SVt_PVGV) { /* Maybe prototype now, and had at
4299 maximum a prototype before. */
4300 if (SvTYPE(gv) > SVt_NULL) {
4301 if (!SvPOK((SV*)gv) && !(SvIOK((SV*)gv) && SvIVX((SV*)gv) == -1)
4302 && ckWARN_d(WARN_PROTOTYPE))
4304 Perl_warner(aTHX_ packWARN(WARN_PROTOTYPE), "Runaway prototype");
4306 cv_ckproto((CV*)gv, NULL, ps);
4309 sv_setpvn((SV*)gv, ps, ps_len);
4311 sv_setiv((SV*)gv, -1);
4312 SvREFCNT_dec(PL_compcv);
4313 cv = PL_compcv = NULL;
4314 PL_sub_generation++;
4318 cv = (!name || GvCVGEN(gv)) ? Nullcv : GvCV(gv);
4320 #ifdef GV_UNIQUE_CHECK
4321 if (cv && GvUNIQUE(gv) && SvREADONLY(cv)) {
4322 Perl_croak(aTHX_ "Can't define subroutine %s (GV is unique)", name);
4326 if (!block || !ps || *ps || attrs || (CvFLAGS(PL_compcv) & CVf_BUILTIN_ATTRS))
4329 const_sv = op_const_sv(block, Nullcv);
4332 const bool exists = CvROOT(cv) || CvXSUB(cv);
4334 #ifdef GV_UNIQUE_CHECK
4335 if (exists && GvUNIQUE(gv)) {
4336 Perl_croak(aTHX_ "Can't redefine unique subroutine %s", name);
4340 /* if the subroutine doesn't exist and wasn't pre-declared
4341 * with a prototype, assume it will be AUTOLOADed,
4342 * skipping the prototype check
4344 if (exists || SvPOK(cv))
4345 cv_ckproto(cv, gv, ps);
4346 /* already defined (or promised)? */
4347 if (exists || GvASSUMECV(gv)) {
4348 if (!block && !attrs) {
4349 if (CvFLAGS(PL_compcv)) {
4350 /* might have had built-in attrs applied */
4351 CvFLAGS(cv) |= (CvFLAGS(PL_compcv) & CVf_BUILTIN_ATTRS);
4353 /* just a "sub foo;" when &foo is already defined */
4354 SAVEFREESV(PL_compcv);
4357 /* ahem, death to those who redefine active sort subs */
4358 if (PL_curstackinfo->si_type == PERLSI_SORT && PL_sortcop == CvSTART(cv))
4359 Perl_croak(aTHX_ "Can't redefine active sort subroutine %s", name);
4361 if (ckWARN(WARN_REDEFINE)
4363 && (!const_sv || sv_cmp(cv_const_sv(cv), const_sv))))
4365 const line_t oldline = CopLINE(PL_curcop);
4366 if (PL_copline != NOLINE)
4367 CopLINE_set(PL_curcop, PL_copline);
4368 Perl_warner(aTHX_ packWARN(WARN_REDEFINE),
4369 CvCONST(cv) ? "Constant subroutine %s redefined"
4370 : "Subroutine %s redefined", name);
4371 CopLINE_set(PL_curcop, oldline);
4379 (void)SvREFCNT_inc(const_sv);
4381 assert(!CvROOT(cv) && !CvCONST(cv));
4382 sv_setpvn((SV*)cv, "", 0); /* prototype is "" */
4383 CvXSUBANY(cv).any_ptr = const_sv;
4384 CvXSUB(cv) = const_sv_xsub;
4389 cv = newCONSTSUB(NULL, name, const_sv);
4392 SvREFCNT_dec(PL_compcv);
4394 PL_sub_generation++;
4401 /* Need to do a C<use attributes $stash_of_cv,\&cv,@attrs>
4402 * before we clobber PL_compcv.
4406 /* Might have had built-in attributes applied -- propagate them. */
4407 CvFLAGS(cv) |= (CvFLAGS(PL_compcv) & CVf_BUILTIN_ATTRS);
4408 if (CvGV(cv) && GvSTASH(CvGV(cv)))
4409 stash = GvSTASH(CvGV(cv));
4410 else if (CvSTASH(cv))
4411 stash = CvSTASH(cv);
4413 stash = PL_curstash;
4416 /* possibly about to re-define existing subr -- ignore old cv */
4417 rcv = (SV*)PL_compcv;
4418 if (name && GvSTASH(gv))
4419 stash = GvSTASH(gv);
4421 stash = PL_curstash;
4423 apply_attrs(stash, rcv, attrs, FALSE);
4425 if (cv) { /* must reuse cv if autoloaded */
4427 /* got here with just attrs -- work done, so bug out */
4428 SAVEFREESV(PL_compcv);
4431 /* transfer PL_compcv to cv */
4433 CvFLAGS(cv) = CvFLAGS(PL_compcv);
4434 if (!CvWEAKOUTSIDE(cv))
4435 SvREFCNT_dec(CvOUTSIDE(cv));
4436 CvOUTSIDE(cv) = CvOUTSIDE(PL_compcv);
4437 CvOUTSIDE_SEQ(cv) = CvOUTSIDE_SEQ(PL_compcv);
4438 CvOUTSIDE(PL_compcv) = 0;
4439 CvPADLIST(cv) = CvPADLIST(PL_compcv);
4440 CvPADLIST(PL_compcv) = 0;
4441 /* inner references to PL_compcv must be fixed up ... */
4442 pad_fixup_inner_anons(CvPADLIST(cv), PL_compcv, cv);
4443 /* ... before we throw it away */
4444 SvREFCNT_dec(PL_compcv);
4446 if (PERLDB_INTER)/* Advice debugger on the new sub. */
4447 ++PL_sub_generation;
4454 PL_sub_generation++;
4458 CvFILE_set_from_cop(cv, PL_curcop);
4459 CvSTASH(cv) = PL_curstash;
4462 sv_setpvn((SV*)cv, ps, ps_len);
4464 if (PL_error_count) {
4468 const char *s = strrchr(name, ':');
4470 if (strEQ(s, "BEGIN")) {
4471 const char not_safe[] =
4472 "BEGIN not safe after errors--compilation aborted";
4473 if (PL_in_eval & EVAL_KEEPERR)
4474 Perl_croak(aTHX_ not_safe);
4476 /* force display of errors found but not reported */
4477 sv_catpv(ERRSV, not_safe);
4478 Perl_croak(aTHX_ "%"SVf, ERRSV);
4487 CvROOT(cv) = newUNOP(OP_LEAVESUBLV, 0,
4488 mod(scalarseq(block), OP_LEAVESUBLV));
4491 /* This makes sub {}; work as expected. */
4492 if (block->op_type == OP_STUB) {
4494 block = newSTATEOP(0, Nullch, 0);
4496 CvROOT(cv) = newUNOP(OP_LEAVESUB, 0, scalarseq(block));
4498 CvROOT(cv)->op_private |= OPpREFCOUNTED;
4499 OpREFCNT_set(CvROOT(cv), 1);
4500 CvSTART(cv) = LINKLIST(CvROOT(cv));
4501 CvROOT(cv)->op_next = 0;
4502 CALL_PEEP(CvSTART(cv));
4504 /* now that optimizer has done its work, adjust pad values */
4506 pad_tidy(CvCLONE(cv) ? padtidy_SUBCLONE : padtidy_SUB);
4509 assert(!CvCONST(cv));
4510 if (ps && !*ps && op_const_sv(block, cv))
4514 if (name || aname) {
4516 const char *tname = (name ? name : aname);
4518 if (PERLDB_SUBLINE && PL_curstash != PL_debstash) {
4519 SV *sv = NEWSV(0,0);
4520 SV *tmpstr = sv_newmortal();
4521 GV *db_postponed = gv_fetchpv("DB::postponed", GV_ADDMULTI, SVt_PVHV);
4524 Perl_sv_setpvf(aTHX_ sv, "%s:%ld-%ld",
4526 (long)PL_subline, (long)CopLINE(PL_curcop));
4527 gv_efullname3(tmpstr, gv, Nullch);
4528 hv_store(GvHV(PL_DBsub), SvPVX_const(tmpstr), SvCUR(tmpstr), sv, 0);
4529 hv = GvHVn(db_postponed);
4530 if (HvFILL(hv) > 0 && hv_exists(hv, SvPVX_const(tmpstr), SvCUR(tmpstr))) {
4531 CV * const pcv = GvCV(db_postponed);
4537 call_sv((SV*)pcv, G_DISCARD);
4542 if ((s = strrchr(tname,':')))
4547 if (*s != 'B' && *s != 'E' && *s != 'C' && *s != 'I')
4550 if (strEQ(s, "BEGIN") && !PL_error_count) {
4551 const I32 oldscope = PL_scopestack_ix;
4553 SAVECOPFILE(&PL_compiling);
4554 SAVECOPLINE(&PL_compiling);
4557 PL_beginav = newAV();
4558 DEBUG_x( dump_sub(gv) );
4559 av_push(PL_beginav, (SV*)cv);
4560 GvCV(gv) = 0; /* cv has been hijacked */
4561 call_list(oldscope, PL_beginav);
4563 PL_curcop = &PL_compiling;
4564 PL_compiling.op_private = (U8)(PL_hints & HINT_PRIVATE_MASK);
4567 else if (strEQ(s, "END") && !PL_error_count) {
4570 DEBUG_x( dump_sub(gv) );
4571 av_unshift(PL_endav, 1);
4572 av_store(PL_endav, 0, (SV*)cv);
4573 GvCV(gv) = 0; /* cv has been hijacked */
4575 else if (strEQ(s, "CHECK") && !PL_error_count) {
4577 PL_checkav = newAV();
4578 DEBUG_x( dump_sub(gv) );
4579 if (PL_main_start && ckWARN(WARN_VOID))
4580 Perl_warner(aTHX_ packWARN(WARN_VOID), "Too late to run CHECK block");
4581 av_unshift(PL_checkav, 1);
4582 av_store(PL_checkav, 0, (SV*)cv);
4583 GvCV(gv) = 0; /* cv has been hijacked */
4585 else if (strEQ(s, "INIT") && !PL_error_count) {
4587 PL_initav = newAV();
4588 DEBUG_x( dump_sub(gv) );
4589 if (PL_main_start && ckWARN(WARN_VOID))
4590 Perl_warner(aTHX_ packWARN(WARN_VOID), "Too late to run INIT block");
4591 av_push(PL_initav, (SV*)cv);
4592 GvCV(gv) = 0; /* cv has been hijacked */
4597 PL_copline = NOLINE;
4602 /* XXX unsafe for threads if eval_owner isn't held */
4604 =for apidoc newCONSTSUB
4606 Creates a constant sub equivalent to Perl C<sub FOO () { 123 }> which is
4607 eligible for inlining at compile-time.
4613 Perl_newCONSTSUB(pTHX_ HV *stash, const char *name, SV *sv)
4620 SAVECOPLINE(PL_curcop);
4621 CopLINE_set(PL_curcop, PL_copline);
4624 PL_hints &= ~HINT_BLOCK_SCOPE;
4627 SAVESPTR(PL_curstash);
4628 SAVECOPSTASH(PL_curcop);
4629 PL_curstash = stash;
4630 CopSTASH_set(PL_curcop,stash);
4633 cv = newXS(name, const_sv_xsub, savepv(CopFILE(PL_curcop)));
4634 CvXSUBANY(cv).any_ptr = sv;
4636 sv_setpvn((SV*)cv, "", 0); /* prototype is "" */
4639 CopSTASH_free(PL_curcop);
4647 =for apidoc U||newXS
4649 Used by C<xsubpp> to hook up XSUBs as Perl subs.
4655 Perl_newXS(pTHX_ const char *name, XSUBADDR_t subaddr, const char *filename)
4657 GV * const gv = gv_fetchpv(name ? name :
4658 (PL_curstash ? "__ANON__" : "__ANON__::__ANON__"),
4659 GV_ADDMULTI, SVt_PVCV);
4663 Perl_croak(aTHX_ "panic: no address for '%s' in '%s'", name, filename);
4665 if ((cv = (name ? GvCV(gv) : Nullcv))) {
4667 /* just a cached method */
4671 else if (CvROOT(cv) || CvXSUB(cv) || GvASSUMECV(gv)) {
4672 /* already defined (or promised) */
4673 /* XXX It's possible for this HvNAME_get to return null, and get passed into strEQ */
4674 if (ckWARN(WARN_REDEFINE)) {
4675 GV * const gvcv = CvGV(cv);
4677 HV * const stash = GvSTASH(gvcv);
4679 const char *name = HvNAME_get(stash);
4680 if ( strEQ(name,"autouse") ) {
4681 const line_t oldline = CopLINE(PL_curcop);
4682 if (PL_copline != NOLINE)
4683 CopLINE_set(PL_curcop, PL_copline);
4684 Perl_warner(aTHX_ packWARN(WARN_REDEFINE),
4685 CvCONST(cv) ? "Constant subroutine %s redefined"
4686 : "Subroutine %s redefined"
4688 CopLINE_set(PL_curcop, oldline);
4698 if (cv) /* must reuse cv if autoloaded */
4701 cv = (CV*)NEWSV(1105,0);
4702 sv_upgrade((SV *)cv, SVt_PVCV);
4706 PL_sub_generation++;
4710 (void)gv_fetchfile(filename);
4711 CvFILE(cv) = (char *)filename; /* NOTE: not copied, as it is expected to be
4712 an external constant string */
4713 CvXSUB(cv) = subaddr;
4716 const char *s = strrchr(name,':');
4722 if (*s != 'B' && *s != 'E' && *s != 'C' && *s != 'I')
4725 if (strEQ(s, "BEGIN")) {
4727 PL_beginav = newAV();
4728 av_push(PL_beginav, (SV*)cv);
4729 GvCV(gv) = 0; /* cv has been hijacked */
4731 else if (strEQ(s, "END")) {
4734 av_unshift(PL_endav, 1);
4735 av_store(PL_endav, 0, (SV*)cv);
4736 GvCV(gv) = 0; /* cv has been hijacked */
4738 else if (strEQ(s, "CHECK")) {
4740 PL_checkav = newAV();
4741 if (PL_main_start && ckWARN(WARN_VOID))
4742 Perl_warner(aTHX_ packWARN(WARN_VOID), "Too late to run CHECK block");
4743 av_unshift(PL_checkav, 1);
4744 av_store(PL_checkav, 0, (SV*)cv);
4745 GvCV(gv) = 0; /* cv has been hijacked */
4747 else if (strEQ(s, "INIT")) {
4749 PL_initav = newAV();
4750 if (PL_main_start && ckWARN(WARN_VOID))
4751 Perl_warner(aTHX_ packWARN(WARN_VOID), "Too late to run INIT block");
4752 av_push(PL_initav, (SV*)cv);
4753 GvCV(gv) = 0; /* cv has been hijacked */
4764 Perl_newFORM(pTHX_ I32 floor, OP *o, OP *block)
4770 gv = gv_fetchsv(cSVOPo->op_sv, TRUE, SVt_PVFM);
4772 gv = gv_fetchpv("STDOUT",&