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_ref(pTHX_ OP *o, I32 type)
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)
1450 if (type == OP_DEFINED)
1451 o->op_flags |= OPf_SPECIAL; /* don't create GV */
1452 ref(cUNOPo->op_first, o->op_type);
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 ??? */
1469 o->op_flags |= OPf_REF;
1472 if (type == OP_DEFINED)
1473 o->op_flags |= OPf_SPECIAL; /* don't create GV */
1474 ref(cUNOPo->op_first, o->op_type);
1479 o->op_flags |= OPf_REF;
1484 if (!(o->op_flags & OPf_KIDS))
1486 ref(cBINOPo->op_first, type);
1490 ref(cBINOPo->op_first, o->op_type);
1491 if (type == OP_RV2SV || type == OP_RV2AV || type == OP_RV2HV) {
1492 o->op_private |= (type == OP_RV2AV ? OPpDEREF_AV
1493 : type == OP_RV2HV ? OPpDEREF_HV
1495 o->op_flags |= OPf_MOD;
1503 if (!(o->op_flags & OPf_KIDS))
1505 ref(cLISTOPo->op_last, type);
1515 S_dup_attrlist(pTHX_ OP *o)
1519 /* An attrlist is either a simple OP_CONST or an OP_LIST with kids,
1520 * where the first kid is OP_PUSHMARK and the remaining ones
1521 * are OP_CONST. We need to push the OP_CONST values.
1523 if (o->op_type == OP_CONST)
1524 rop = newSVOP(OP_CONST, o->op_flags, SvREFCNT_inc(cSVOPo->op_sv));
1526 assert((o->op_type == OP_LIST) && (o->op_flags & OPf_KIDS));
1527 for (o = cLISTOPo->op_first; o; o=o->op_sibling) {
1528 if (o->op_type == OP_CONST)
1529 rop = append_elem(OP_LIST, rop,
1530 newSVOP(OP_CONST, o->op_flags,
1531 SvREFCNT_inc(cSVOPo->op_sv)));
1538 S_apply_attrs(pTHX_ HV *stash, SV *target, OP *attrs, bool for_my)
1543 /* fake up C<use attributes $pkg,$rv,@attrs> */
1544 ENTER; /* need to protect against side-effects of 'use' */
1546 stashsv = stash ? newSVhek(HvNAME_HEK(stash)) : &PL_sv_no;
1548 #define ATTRSMODULE "attributes"
1549 #define ATTRSMODULE_PM "attributes.pm"
1552 /* Don't force the C<use> if we don't need it. */
1553 SV * const * const svp = hv_fetch(GvHVn(PL_incgv), ATTRSMODULE_PM,
1554 sizeof(ATTRSMODULE_PM)-1, 0);
1555 if (svp && *svp != &PL_sv_undef)
1556 ; /* already in %INC */
1558 Perl_load_module(aTHX_ PERL_LOADMOD_NOIMPORT,
1559 newSVpvn(ATTRSMODULE, sizeof(ATTRSMODULE)-1),
1563 Perl_load_module(aTHX_ PERL_LOADMOD_IMPORT_OPS,
1564 newSVpvn(ATTRSMODULE, sizeof(ATTRSMODULE)-1),
1566 prepend_elem(OP_LIST,
1567 newSVOP(OP_CONST, 0, stashsv),
1568 prepend_elem(OP_LIST,
1569 newSVOP(OP_CONST, 0,
1571 dup_attrlist(attrs))));
1577 S_apply_attrs_my(pTHX_ HV *stash, OP *target, OP *attrs, OP **imopsp)
1579 OP *pack, *imop, *arg;
1585 assert(target->op_type == OP_PADSV ||
1586 target->op_type == OP_PADHV ||
1587 target->op_type == OP_PADAV);
1589 /* Ensure that attributes.pm is loaded. */
1590 apply_attrs(stash, PAD_SV(target->op_targ), attrs, TRUE);
1592 /* Need package name for method call. */
1593 pack = newSVOP(OP_CONST, 0, newSVpvn(ATTRSMODULE, sizeof(ATTRSMODULE)-1));
1595 /* Build up the real arg-list. */
1596 stashsv = stash ? newSVhek(HvNAME_HEK(stash)) : &PL_sv_no;
1598 arg = newOP(OP_PADSV, 0);
1599 arg->op_targ = target->op_targ;
1600 arg = prepend_elem(OP_LIST,
1601 newSVOP(OP_CONST, 0, stashsv),
1602 prepend_elem(OP_LIST,
1603 newUNOP(OP_REFGEN, 0,
1604 mod(arg, OP_REFGEN)),
1605 dup_attrlist(attrs)));
1607 /* Fake up a method call to import */
1608 meth = newSVpvn_share("import", 6, 0);
1609 imop = convert(OP_ENTERSUB, OPf_STACKED|OPf_SPECIAL|OPf_WANT_VOID,
1610 append_elem(OP_LIST,
1611 prepend_elem(OP_LIST, pack, list(arg)),
1612 newSVOP(OP_METHOD_NAMED, 0, meth)));
1613 imop->op_private |= OPpENTERSUB_NOMOD;
1615 /* Combine the ops. */
1616 *imopsp = append_elem(OP_LIST, *imopsp, imop);
1620 =notfor apidoc apply_attrs_string
1622 Attempts to apply a list of attributes specified by the C<attrstr> and
1623 C<len> arguments to the subroutine identified by the C<cv> argument which
1624 is expected to be associated with the package identified by the C<stashpv>
1625 argument (see L<attributes>). It gets this wrong, though, in that it
1626 does not correctly identify the boundaries of the individual attribute
1627 specifications within C<attrstr>. This is not really intended for the
1628 public API, but has to be listed here for systems such as AIX which
1629 need an explicit export list for symbols. (It's called from XS code
1630 in support of the C<ATTRS:> keyword from F<xsubpp>.) Patches to fix it
1631 to respect attribute syntax properly would be welcome.
1637 Perl_apply_attrs_string(pTHX_ const char *stashpv, CV *cv,
1638 const char *attrstr, STRLEN len)
1643 len = strlen(attrstr);
1647 for (; isSPACE(*attrstr) && len; --len, ++attrstr) ;
1649 const char * const sstr = attrstr;
1650 for (; !isSPACE(*attrstr) && len; --len, ++attrstr) ;
1651 attrs = append_elem(OP_LIST, attrs,
1652 newSVOP(OP_CONST, 0,
1653 newSVpvn(sstr, attrstr-sstr)));
1657 Perl_load_module(aTHX_ PERL_LOADMOD_IMPORT_OPS,
1658 newSVpvn(ATTRSMODULE, sizeof(ATTRSMODULE)-1),
1659 Nullsv, prepend_elem(OP_LIST,
1660 newSVOP(OP_CONST, 0, newSVpv(stashpv,0)),
1661 prepend_elem(OP_LIST,
1662 newSVOP(OP_CONST, 0,
1668 S_my_kid(pTHX_ OP *o, OP *attrs, OP **imopsp)
1672 if (!o || PL_error_count)
1676 if (type == OP_LIST) {
1678 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
1679 my_kid(kid, attrs, imopsp);
1680 } else if (type == OP_UNDEF) {
1682 } else if (type == OP_RV2SV || /* "our" declaration */
1684 type == OP_RV2HV) { /* XXX does this let anything illegal in? */
1685 if (cUNOPo->op_first->op_type != OP_GV) { /* MJD 20011224 */
1686 yyerror(Perl_form(aTHX_ "Can't declare %s in %s",
1687 OP_DESC(o), PL_in_my == KEY_our ? "our" : "my"));
1689 GV * const gv = cGVOPx_gv(cUNOPo->op_first);
1691 PL_in_my_stash = Nullhv;
1692 apply_attrs(GvSTASH(gv),
1693 (type == OP_RV2SV ? GvSV(gv) :
1694 type == OP_RV2AV ? (SV*)GvAV(gv) :
1695 type == OP_RV2HV ? (SV*)GvHV(gv) : (SV*)gv),
1698 o->op_private |= OPpOUR_INTRO;
1701 else if (type != OP_PADSV &&
1704 type != OP_PUSHMARK)
1706 yyerror(Perl_form(aTHX_ "Can't declare %s in \"%s\"",
1708 PL_in_my == KEY_our ? "our" : "my"));
1711 else if (attrs && type != OP_PUSHMARK) {
1715 PL_in_my_stash = Nullhv;
1717 /* check for C<my Dog $spot> when deciding package */
1718 stash = PAD_COMPNAME_TYPE(o->op_targ);
1720 stash = PL_curstash;
1721 apply_attrs_my(stash, o, attrs, imopsp);
1723 o->op_flags |= OPf_MOD;
1724 o->op_private |= OPpLVAL_INTRO;
1729 Perl_my_attrs(pTHX_ OP *o, OP *attrs)
1732 int maybe_scalar = 0;
1734 /* [perl #17376]: this appears to be premature, and results in code such as
1735 C< our(%x); > executing in list mode rather than void mode */
1737 if (o->op_flags & OPf_PARENS)
1746 o = my_kid(o, attrs, &rops);
1748 if (maybe_scalar && o->op_type == OP_PADSV) {
1749 o = scalar(append_list(OP_LIST, (LISTOP*)rops, (LISTOP*)o));
1750 o->op_private |= OPpLVAL_INTRO;
1753 o = append_list(OP_LIST, (LISTOP*)o, (LISTOP*)rops);
1756 PL_in_my_stash = Nullhv;
1761 Perl_my(pTHX_ OP *o)
1763 return my_attrs(o, Nullop);
1767 Perl_sawparens(pTHX_ OP *o)
1770 o->op_flags |= OPf_PARENS;
1775 Perl_bind_match(pTHX_ I32 type, OP *left, OP *right)
1780 if ( (left->op_type == OP_RV2AV ||
1781 left->op_type == OP_RV2HV ||
1782 left->op_type == OP_PADAV ||
1783 left->op_type == OP_PADHV)
1784 && ckWARN(WARN_MISC))
1786 const char * const desc = PL_op_desc[(right->op_type == OP_SUBST ||
1787 right->op_type == OP_TRANS)
1788 ? right->op_type : OP_MATCH];
1789 const char * const sample = ((left->op_type == OP_RV2AV ||
1790 left->op_type == OP_PADAV)
1791 ? "@array" : "%hash");
1792 Perl_warner(aTHX_ packWARN(WARN_MISC),
1793 "Applying %s to %s will act on scalar(%s)",
1794 desc, sample, sample);
1797 if (right->op_type == OP_CONST &&
1798 cSVOPx(right)->op_private & OPpCONST_BARE &&
1799 cSVOPx(right)->op_private & OPpCONST_STRICT)
1801 no_bareword_allowed(right);
1804 ismatchop = right->op_type == OP_MATCH ||
1805 right->op_type == OP_SUBST ||
1806 right->op_type == OP_TRANS;
1807 if (ismatchop && right->op_private & OPpTARGET_MY) {
1809 right->op_private &= ~OPpTARGET_MY;
1811 if (!(right->op_flags & OPf_STACKED) && ismatchop) {
1812 right->op_flags |= OPf_STACKED;
1813 if (right->op_type != OP_MATCH &&
1814 ! (right->op_type == OP_TRANS &&
1815 right->op_private & OPpTRANS_IDENTICAL))
1816 left = mod(left, right->op_type);
1817 if (right->op_type == OP_TRANS)
1818 o = newBINOP(OP_NULL, OPf_STACKED, scalar(left), right);
1820 o = prepend_elem(right->op_type, scalar(left), right);
1822 return newUNOP(OP_NOT, 0, scalar(o));
1826 return bind_match(type, left,
1827 pmruntime(newPMOP(OP_MATCH, 0), right, 0));
1831 Perl_invert(pTHX_ OP *o)
1835 /* XXX need to optimize away NOT NOT here? Or do we let optimizer do it? */
1836 return newUNOP(OP_NOT, OPf_SPECIAL, scalar(o));
1840 Perl_scope(pTHX_ OP *o)
1844 if (o->op_flags & OPf_PARENS || PERLDB_NOOPT || PL_tainting) {
1845 o = prepend_elem(OP_LINESEQ, newOP(OP_ENTER, 0), o);
1846 o->op_type = OP_LEAVE;
1847 o->op_ppaddr = PL_ppaddr[OP_LEAVE];
1849 else if (o->op_type == OP_LINESEQ) {
1851 o->op_type = OP_SCOPE;
1852 o->op_ppaddr = PL_ppaddr[OP_SCOPE];
1853 kid = ((LISTOP*)o)->op_first;
1854 if (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE)
1858 o = newLISTOP(OP_SCOPE, 0, o, Nullop);
1863 /* XXX kept for BINCOMPAT only */
1865 Perl_save_hints(pTHX)
1867 Perl_croak(aTHX_ "internal error: obsolete function save_hints() called");
1871 Perl_block_start(pTHX_ int full)
1873 const int retval = PL_savestack_ix;
1874 pad_block_start(full);
1876 PL_hints &= ~HINT_BLOCK_SCOPE;
1877 SAVESPTR(PL_compiling.cop_warnings);
1878 if (! specialWARN(PL_compiling.cop_warnings)) {
1879 PL_compiling.cop_warnings = newSVsv(PL_compiling.cop_warnings) ;
1880 SAVEFREESV(PL_compiling.cop_warnings) ;
1882 SAVESPTR(PL_compiling.cop_io);
1883 if (! specialCopIO(PL_compiling.cop_io)) {
1884 PL_compiling.cop_io = newSVsv(PL_compiling.cop_io) ;
1885 SAVEFREESV(PL_compiling.cop_io) ;
1891 Perl_block_end(pTHX_ I32 floor, OP *seq)
1893 const int needblockscope = PL_hints & HINT_BLOCK_SCOPE;
1894 OP* const retval = scalarseq(seq);
1896 PL_compiling.op_private = (U8)(PL_hints & HINT_PRIVATE_MASK);
1898 PL_hints |= HINT_BLOCK_SCOPE; /* propagate out */
1906 const I32 offset = pad_findmy("$_");
1907 if (offset == NOT_IN_PAD || PAD_COMPNAME_FLAGS(offset) & SVpad_OUR) {
1908 return newSVREF(newGVOP(OP_GV, 0, PL_defgv));
1911 OP * const o = newOP(OP_PADSV, 0);
1912 o->op_targ = offset;
1918 Perl_newPROG(pTHX_ OP *o)
1923 PL_eval_root = newUNOP(OP_LEAVEEVAL,
1924 ((PL_in_eval & EVAL_KEEPERR)
1925 ? OPf_SPECIAL : 0), o);
1926 PL_eval_start = linklist(PL_eval_root);
1927 PL_eval_root->op_private |= OPpREFCOUNTED;
1928 OpREFCNT_set(PL_eval_root, 1);
1929 PL_eval_root->op_next = 0;
1930 CALL_PEEP(PL_eval_start);
1933 if (o->op_type == OP_STUB) {
1934 PL_comppad_name = 0;
1939 PL_main_root = scope(sawparens(scalarvoid(o)));
1940 PL_curcop = &PL_compiling;
1941 PL_main_start = LINKLIST(PL_main_root);
1942 PL_main_root->op_private |= OPpREFCOUNTED;
1943 OpREFCNT_set(PL_main_root, 1);
1944 PL_main_root->op_next = 0;
1945 CALL_PEEP(PL_main_start);
1948 /* Register with debugger */
1950 CV * const cv = get_cv("DB::postponed", FALSE);
1954 XPUSHs((SV*)CopFILEGV(&PL_compiling));
1956 call_sv((SV*)cv, G_DISCARD);
1963 Perl_localize(pTHX_ OP *o, I32 lex)
1965 if (o->op_flags & OPf_PARENS)
1966 /* [perl #17376]: this appears to be premature, and results in code such as
1967 C< our(%x); > executing in list mode rather than void mode */
1974 if ( PL_bufptr > PL_oldbufptr && PL_bufptr[-1] == ','
1975 && ckWARN(WARN_PARENTHESIS))
1977 char *s = PL_bufptr;
1980 /* some heuristics to detect a potential error */
1981 while (*s && (strchr(", \t\n", *s)))
1985 if (*s && strchr("@$%*", *s) && *++s
1986 && (isALNUM(*s) || UTF8_IS_CONTINUED(*s))) {
1989 while (*s && (isALNUM(*s) || UTF8_IS_CONTINUED(*s)))
1991 while (*s && (strchr(", \t\n", *s)))
1997 if (sigil && (*s == ';' || *s == '=')) {
1998 Perl_warner(aTHX_ packWARN(WARN_PARENTHESIS),
1999 "Parentheses missing around \"%s\" list",
2000 lex ? (PL_in_my == KEY_our ? "our" : "my")
2008 o = mod(o, OP_NULL); /* a bit kludgey */
2010 PL_in_my_stash = Nullhv;
2015 Perl_jmaybe(pTHX_ OP *o)
2017 if (o->op_type == OP_LIST) {
2019 o2 = newSVREF(newGVOP(OP_GV, 0, gv_fetchpv(";", TRUE, SVt_PV))),
2020 o = convert(OP_JOIN, 0, prepend_elem(OP_LIST, o2, o));
2026 Perl_fold_constants(pTHX_ register OP *o)
2030 I32 type = o->op_type;
2033 if (PL_opargs[type] & OA_RETSCALAR)
2035 if (PL_opargs[type] & OA_TARGET && !o->op_targ)
2036 o->op_targ = pad_alloc(type, SVs_PADTMP);
2038 /* integerize op, unless it happens to be C<-foo>.
2039 * XXX should pp_i_negate() do magic string negation instead? */
2040 if ((PL_opargs[type] & OA_OTHERINT) && (PL_hints & HINT_INTEGER)
2041 && !(type == OP_NEGATE && cUNOPo->op_first->op_type == OP_CONST
2042 && (cUNOPo->op_first->op_private & OPpCONST_BARE)))
2044 o->op_ppaddr = PL_ppaddr[type = ++(o->op_type)];
2047 if (!(PL_opargs[type] & OA_FOLDCONST))
2052 /* XXX might want a ck_negate() for this */
2053 cUNOPo->op_first->op_private &= ~OPpCONST_STRICT;
2065 /* XXX what about the numeric ops? */
2066 if (PL_hints & HINT_LOCALE)
2071 goto nope; /* Don't try to run w/ errors */
2073 for (curop = LINKLIST(o); curop != o; curop = LINKLIST(curop)) {
2074 if ((curop->op_type != OP_CONST ||
2075 (curop->op_private & OPpCONST_BARE)) &&
2076 curop->op_type != OP_LIST &&
2077 curop->op_type != OP_SCALAR &&
2078 curop->op_type != OP_NULL &&
2079 curop->op_type != OP_PUSHMARK)
2085 curop = LINKLIST(o);
2089 sv = *(PL_stack_sp--);
2090 if (o->op_targ && sv == PAD_SV(o->op_targ)) /* grab pad temp? */
2091 pad_swipe(o->op_targ, FALSE);
2092 else if (SvTEMP(sv)) { /* grab mortal temp? */
2093 (void)SvREFCNT_inc(sv);
2097 if (type == OP_RV2GV)
2098 return newGVOP(OP_GV, 0, (GV*)sv);
2099 return newSVOP(OP_CONST, 0, sv);
2106 Perl_gen_constant_list(pTHX_ register OP *o)
2110 const I32 oldtmps_floor = PL_tmps_floor;
2114 return o; /* Don't attempt to run with errors */
2116 PL_op = curop = LINKLIST(o);
2123 PL_tmps_floor = oldtmps_floor;
2125 o->op_type = OP_RV2AV;
2126 o->op_ppaddr = PL_ppaddr[OP_RV2AV];
2127 o->op_flags &= ~OPf_REF; /* treat \(1..2) like an ordinary list */
2128 o->op_flags |= OPf_PARENS; /* and flatten \(1..2,3) */
2129 o->op_opt = 0; /* needs to be revisited in peep() */
2130 curop = ((UNOP*)o)->op_first;
2131 ((UNOP*)o)->op_first = newSVOP(OP_CONST, 0, SvREFCNT_inc(*PL_stack_sp--));
2138 Perl_convert(pTHX_ I32 type, I32 flags, OP *o)
2141 if (!o || o->op_type != OP_LIST)
2142 o = newLISTOP(OP_LIST, 0, o, Nullop);
2144 o->op_flags &= ~OPf_WANT;
2146 if (!(PL_opargs[type] & OA_MARK))
2147 op_null(cLISTOPo->op_first);
2149 o->op_type = (OPCODE)type;
2150 o->op_ppaddr = PL_ppaddr[type];
2151 o->op_flags |= flags;
2153 o = CHECKOP(type, o);
2154 if (o->op_type != (unsigned)type)
2157 return fold_constants(o);
2160 /* List constructors */
2163 Perl_append_elem(pTHX_ I32 type, OP *first, OP *last)
2171 if (first->op_type != (unsigned)type
2172 || (type == OP_LIST && (first->op_flags & OPf_PARENS)))
2174 return newLISTOP(type, 0, first, last);
2177 if (first->op_flags & OPf_KIDS)
2178 ((LISTOP*)first)->op_last->op_sibling = last;
2180 first->op_flags |= OPf_KIDS;
2181 ((LISTOP*)first)->op_first = last;
2183 ((LISTOP*)first)->op_last = last;
2188 Perl_append_list(pTHX_ I32 type, LISTOP *first, LISTOP *last)
2196 if (first->op_type != (unsigned)type)
2197 return prepend_elem(type, (OP*)first, (OP*)last);
2199 if (last->op_type != (unsigned)type)
2200 return append_elem(type, (OP*)first, (OP*)last);
2202 first->op_last->op_sibling = last->op_first;
2203 first->op_last = last->op_last;
2204 first->op_flags |= (last->op_flags & OPf_KIDS);
2212 Perl_prepend_elem(pTHX_ I32 type, OP *first, OP *last)
2220 if (last->op_type == (unsigned)type) {
2221 if (type == OP_LIST) { /* already a PUSHMARK there */
2222 first->op_sibling = ((LISTOP*)last)->op_first->op_sibling;
2223 ((LISTOP*)last)->op_first->op_sibling = first;
2224 if (!(first->op_flags & OPf_PARENS))
2225 last->op_flags &= ~OPf_PARENS;
2228 if (!(last->op_flags & OPf_KIDS)) {
2229 ((LISTOP*)last)->op_last = first;
2230 last->op_flags |= OPf_KIDS;
2232 first->op_sibling = ((LISTOP*)last)->op_first;
2233 ((LISTOP*)last)->op_first = first;
2235 last->op_flags |= OPf_KIDS;
2239 return newLISTOP(type, 0, first, last);
2245 Perl_newNULLLIST(pTHX)
2247 return newOP(OP_STUB, 0);
2251 Perl_force_list(pTHX_ OP *o)
2253 if (!o || o->op_type != OP_LIST)
2254 o = newLISTOP(OP_LIST, 0, o, Nullop);
2260 Perl_newLISTOP(pTHX_ I32 type, I32 flags, OP *first, OP *last)
2265 NewOp(1101, listop, 1, LISTOP);
2267 listop->op_type = (OPCODE)type;
2268 listop->op_ppaddr = PL_ppaddr[type];
2271 listop->op_flags = (U8)flags;
2275 else if (!first && last)
2278 first->op_sibling = last;
2279 listop->op_first = first;
2280 listop->op_last = last;
2281 if (type == OP_LIST) {
2282 OP* const pushop = newOP(OP_PUSHMARK, 0);
2283 pushop->op_sibling = first;
2284 listop->op_first = pushop;
2285 listop->op_flags |= OPf_KIDS;
2287 listop->op_last = pushop;
2290 return CHECKOP(type, listop);
2294 Perl_newOP(pTHX_ I32 type, I32 flags)
2298 NewOp(1101, o, 1, OP);
2299 o->op_type = (OPCODE)type;
2300 o->op_ppaddr = PL_ppaddr[type];
2301 o->op_flags = (U8)flags;
2304 o->op_private = (U8)(0 | (flags >> 8));
2305 if (PL_opargs[type] & OA_RETSCALAR)
2307 if (PL_opargs[type] & OA_TARGET)
2308 o->op_targ = pad_alloc(type, SVs_PADTMP);
2309 return CHECKOP(type, o);
2313 Perl_newUNOP(pTHX_ I32 type, I32 flags, OP *first)
2319 first = newOP(OP_STUB, 0);
2320 if (PL_opargs[type] & OA_MARK)
2321 first = force_list(first);
2323 NewOp(1101, unop, 1, UNOP);
2324 unop->op_type = (OPCODE)type;
2325 unop->op_ppaddr = PL_ppaddr[type];
2326 unop->op_first = first;
2327 unop->op_flags = flags | OPf_KIDS;
2328 unop->op_private = (U8)(1 | (flags >> 8));
2329 unop = (UNOP*) CHECKOP(type, unop);
2333 return fold_constants((OP *) unop);
2337 Perl_newBINOP(pTHX_ I32 type, I32 flags, OP *first, OP *last)
2341 NewOp(1101, binop, 1, BINOP);
2344 first = newOP(OP_NULL, 0);
2346 binop->op_type = (OPCODE)type;
2347 binop->op_ppaddr = PL_ppaddr[type];
2348 binop->op_first = first;
2349 binop->op_flags = flags | OPf_KIDS;
2352 binop->op_private = (U8)(1 | (flags >> 8));
2355 binop->op_private = (U8)(2 | (flags >> 8));
2356 first->op_sibling = last;
2359 binop = (BINOP*)CHECKOP(type, binop);
2360 if (binop->op_next || binop->op_type != (OPCODE)type)
2363 binop->op_last = binop->op_first->op_sibling;
2365 return fold_constants((OP *)binop);
2368 static int uvcompare(const void *a, const void *b) __attribute__nonnull__(1) __attribute__nonnull__(2) __attribute__pure__;
2369 static int uvcompare(const void *a, const void *b)
2371 if (*((const UV *)a) < (*(const UV *)b))
2373 if (*((const UV *)a) > (*(const UV *)b))
2375 if (*((const UV *)a+1) < (*(const UV *)b+1))
2377 if (*((const UV *)a+1) > (*(const UV *)b+1))
2383 Perl_pmtrans(pTHX_ OP *o, OP *expr, OP *repl)
2385 SV * const tstr = ((SVOP*)expr)->op_sv;
2386 SV * const rstr = ((SVOP*)repl)->op_sv;
2389 const U8 *t = (U8*)SvPV_const(tstr, tlen);
2390 const U8 *r = (U8*)SvPV_const(rstr, rlen);
2394 register short *tbl;
2396 const I32 complement = o->op_private & OPpTRANS_COMPLEMENT;
2397 const I32 squash = o->op_private & OPpTRANS_SQUASH;
2398 I32 del = o->op_private & OPpTRANS_DELETE;
2399 PL_hints |= HINT_BLOCK_SCOPE;
2402 o->op_private |= OPpTRANS_FROM_UTF;
2405 o->op_private |= OPpTRANS_TO_UTF;
2407 if (o->op_private & (OPpTRANS_FROM_UTF|OPpTRANS_TO_UTF)) {
2408 SV* const listsv = newSVpvn("# comment\n",10);
2410 const U8* tend = t + tlen;
2411 const U8* rend = r + rlen;
2425 const I32 from_utf = o->op_private & OPpTRANS_FROM_UTF;
2426 const I32 to_utf = o->op_private & OPpTRANS_TO_UTF;
2432 t = tsave = bytes_to_utf8(t, &len);
2435 if (!to_utf && rlen) {
2437 r = rsave = bytes_to_utf8(r, &len);
2441 /* There are several snags with this code on EBCDIC:
2442 1. 0xFF is a legal UTF-EBCDIC byte (there are no illegal bytes).
2443 2. scan_const() in toke.c has encoded chars in native encoding which makes
2444 ranges at least in EBCDIC 0..255 range the bottom odd.
2448 U8 tmpbuf[UTF8_MAXBYTES+1];
2451 Newx(cp, 2*tlen, UV);
2453 transv = newSVpvn("",0);
2455 cp[2*i] = utf8n_to_uvuni(t, tend-t, &ulen, 0);
2457 if (t < tend && NATIVE_TO_UTF(*t) == 0xff) {
2459 cp[2*i+1] = utf8n_to_uvuni(t, tend-t, &ulen, 0);
2463 cp[2*i+1] = cp[2*i];
2467 qsort(cp, i, 2*sizeof(UV), uvcompare);
2468 for (j = 0; j < i; j++) {
2470 diff = val - nextmin;
2472 t = uvuni_to_utf8(tmpbuf,nextmin);
2473 sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf);
2475 U8 range_mark = UTF_TO_NATIVE(0xff);
2476 t = uvuni_to_utf8(tmpbuf, val - 1);
2477 sv_catpvn(transv, (char *)&range_mark, 1);
2478 sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf);
2485 t = uvuni_to_utf8(tmpbuf,nextmin);
2486 sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf);
2488 U8 range_mark = UTF_TO_NATIVE(0xff);
2489 sv_catpvn(transv, (char *)&range_mark, 1);
2491 t = uvuni_to_utf8_flags(tmpbuf, 0x7fffffff,
2492 UNICODE_ALLOW_SUPER);
2493 sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf);
2494 t = (const U8*)SvPVX_const(transv);
2495 tlen = SvCUR(transv);
2499 else if (!rlen && !del) {
2500 r = t; rlen = tlen; rend = tend;
2503 if ((!rlen && !del) || t == r ||
2504 (tlen == rlen && memEQ((char *)t, (char *)r, tlen)))
2506 o->op_private |= OPpTRANS_IDENTICAL;
2510 while (t < tend || tfirst <= tlast) {
2511 /* see if we need more "t" chars */
2512 if (tfirst > tlast) {
2513 tfirst = (I32)utf8n_to_uvuni(t, tend - t, &ulen, 0);
2515 if (t < tend && NATIVE_TO_UTF(*t) == 0xff) { /* illegal utf8 val indicates range */
2517 tlast = (I32)utf8n_to_uvuni(t, tend - t, &ulen, 0);
2524 /* now see if we need more "r" chars */
2525 if (rfirst > rlast) {
2527 rfirst = (I32)utf8n_to_uvuni(r, rend - r, &ulen, 0);
2529 if (r < rend && NATIVE_TO_UTF(*r) == 0xff) { /* illegal utf8 val indicates range */
2531 rlast = (I32)utf8n_to_uvuni(r, rend - r, &ulen, 0);
2540 rfirst = rlast = 0xffffffff;
2544 /* now see which range will peter our first, if either. */
2545 tdiff = tlast - tfirst;
2546 rdiff = rlast - rfirst;
2553 if (rfirst == 0xffffffff) {
2554 diff = tdiff; /* oops, pretend rdiff is infinite */
2556 Perl_sv_catpvf(aTHX_ listsv, "%04lx\t%04lx\tXXXX\n",
2557 (long)tfirst, (long)tlast);
2559 Perl_sv_catpvf(aTHX_ listsv, "%04lx\t\tXXXX\n", (long)tfirst);
2563 Perl_sv_catpvf(aTHX_ listsv, "%04lx\t%04lx\t%04lx\n",
2564 (long)tfirst, (long)(tfirst + diff),
2567 Perl_sv_catpvf(aTHX_ listsv, "%04lx\t\t%04lx\n",
2568 (long)tfirst, (long)rfirst);
2570 if (rfirst + diff > max)
2571 max = rfirst + diff;
2573 grows = (tfirst < rfirst &&
2574 UNISKIP(tfirst) < UNISKIP(rfirst + diff));
2586 else if (max > 0xff)
2591 Safefree(cPVOPo->op_pv);
2592 cSVOPo->op_sv = (SV*)swash_init("utf8", "", listsv, bits, none);
2593 SvREFCNT_dec(listsv);
2595 SvREFCNT_dec(transv);
2597 if (!del && havefinal && rlen)
2598 (void)hv_store((HV*)SvRV((cSVOPo->op_sv)), "FINAL", 5,
2599 newSVuv((UV)final), 0);
2602 o->op_private |= OPpTRANS_GROWS;
2614 tbl = (short*)cPVOPo->op_pv;
2616 Zero(tbl, 256, short);
2617 for (i = 0; i < (I32)tlen; i++)
2619 for (i = 0, j = 0; i < 256; i++) {
2621 if (j >= (I32)rlen) {
2630 if (i < 128 && r[j] >= 128)
2640 o->op_private |= OPpTRANS_IDENTICAL;
2642 else if (j >= (I32)rlen)
2645 cPVOPo->op_pv = (char*)Renew(tbl, 0x101+rlen-j, short);
2646 tbl[0x100] = rlen - j;
2647 for (i=0; i < (I32)rlen - j; i++)
2648 tbl[0x101+i] = r[j+i];
2652 if (!rlen && !del) {
2655 o->op_private |= OPpTRANS_IDENTICAL;
2657 else if (!squash && rlen == tlen && memEQ((char*)t, (char*)r, tlen)) {
2658 o->op_private |= OPpTRANS_IDENTICAL;
2660 for (i = 0; i < 256; i++)
2662 for (i = 0, j = 0; i < (I32)tlen; i++,j++) {
2663 if (j >= (I32)rlen) {
2665 if (tbl[t[i]] == -1)
2671 if (tbl[t[i]] == -1) {
2672 if (t[i] < 128 && r[j] >= 128)
2679 o->op_private |= OPpTRANS_GROWS;
2687 Perl_newPMOP(pTHX_ I32 type, I32 flags)
2692 NewOp(1101, pmop, 1, PMOP);
2693 pmop->op_type = (OPCODE)type;
2694 pmop->op_ppaddr = PL_ppaddr[type];
2695 pmop->op_flags = (U8)flags;
2696 pmop->op_private = (U8)(0 | (flags >> 8));
2698 if (PL_hints & HINT_RE_TAINT)
2699 pmop->op_pmpermflags |= PMf_RETAINT;
2700 if (PL_hints & HINT_LOCALE)
2701 pmop->op_pmpermflags |= PMf_LOCALE;
2702 pmop->op_pmflags = pmop->op_pmpermflags;
2705 if (av_len((AV*) PL_regex_pad[0]) > -1) {
2706 SV * const repointer = av_pop((AV*)PL_regex_pad[0]);
2707 pmop->op_pmoffset = SvIV(repointer);
2708 SvREPADTMP_off(repointer);
2709 sv_setiv(repointer,0);
2711 SV * const repointer = newSViv(0);
2712 av_push(PL_regex_padav,SvREFCNT_inc(repointer));
2713 pmop->op_pmoffset = av_len(PL_regex_padav);
2714 PL_regex_pad = AvARRAY(PL_regex_padav);
2718 /* link into pm list */
2719 if (type != OP_TRANS && PL_curstash) {
2720 MAGIC *mg = mg_find((SV*)PL_curstash, PERL_MAGIC_symtab);
2723 mg = sv_magicext((SV*)PL_curstash, 0, PERL_MAGIC_symtab, 0, 0, 0);
2725 pmop->op_pmnext = (PMOP*)mg->mg_obj;
2726 mg->mg_obj = (SV*)pmop;
2727 PmopSTASH_set(pmop,PL_curstash);
2730 return CHECKOP(type, pmop);
2733 /* Given some sort of match op o, and an expression expr containing a
2734 * pattern, either compile expr into a regex and attach it to o (if it's
2735 * constant), or convert expr into a runtime regcomp op sequence (if it's
2738 * isreg indicates that the pattern is part of a regex construct, eg
2739 * $x =~ /pattern/ or split /pattern/, as opposed to $x =~ $pattern or
2740 * split "pattern", which aren't. In the former case, expr will be a list
2741 * if the pattern contains more than one term (eg /a$b/) or if it contains
2742 * a replacement, ie s/// or tr///.
2746 Perl_pmruntime(pTHX_ OP *o, OP *expr, bool isreg)
2751 I32 repl_has_vars = 0;
2755 if (o->op_type == OP_SUBST || o->op_type == OP_TRANS) {
2756 /* last element in list is the replacement; pop it */
2758 repl = cLISTOPx(expr)->op_last;
2759 kid = cLISTOPx(expr)->op_first;
2760 while (kid->op_sibling != repl)
2761 kid = kid->op_sibling;
2762 kid->op_sibling = Nullop;
2763 cLISTOPx(expr)->op_last = kid;
2766 if (isreg && expr->op_type == OP_LIST &&
2767 cLISTOPx(expr)->op_first->op_sibling == cLISTOPx(expr)->op_last)
2769 /* convert single element list to element */
2771 expr = cLISTOPx(oe)->op_first->op_sibling;
2772 cLISTOPx(oe)->op_first->op_sibling = Nullop;
2773 cLISTOPx(oe)->op_last = Nullop;
2777 if (o->op_type == OP_TRANS) {
2778 return pmtrans(o, expr, repl);
2781 reglist = isreg && expr->op_type == OP_LIST;
2785 PL_hints |= HINT_BLOCK_SCOPE;
2788 if (expr->op_type == OP_CONST) {
2790 SV *pat = ((SVOP*)expr)->op_sv;
2791 const char *p = SvPV_const(pat, plen);
2792 if ((o->op_flags & OPf_SPECIAL) && (*p == ' ' && p[1] == '\0')) {
2793 U32 was_readonly = SvREADONLY(pat);
2797 sv_force_normal_flags(pat, 0);
2798 assert(!SvREADONLY(pat));
2801 SvREADONLY_off(pat);
2805 sv_setpvn(pat, "\\s+", 3);
2807 SvFLAGS(pat) |= was_readonly;
2809 p = SvPV_const(pat, plen);
2810 pm->op_pmflags |= PMf_SKIPWHITE;
2813 pm->op_pmdynflags |= PMdf_UTF8;
2814 /* FIXME - can we make this function take const char * args? */
2815 PM_SETRE(pm, CALLREGCOMP(aTHX_ (char*)p, (char*)p + plen, pm));
2816 if (strEQ("\\s+", PM_GETRE(pm)->precomp))
2817 pm->op_pmflags |= PMf_WHITE;
2821 if (pm->op_pmflags & PMf_KEEP || !(PL_hints & HINT_RE_EVAL))
2822 expr = newUNOP((!(PL_hints & HINT_RE_EVAL)
2824 : OP_REGCMAYBE),0,expr);
2826 NewOp(1101, rcop, 1, LOGOP);
2827 rcop->op_type = OP_REGCOMP;
2828 rcop->op_ppaddr = PL_ppaddr[OP_REGCOMP];
2829 rcop->op_first = scalar(expr);
2830 rcop->op_flags |= OPf_KIDS
2831 | ((PL_hints & HINT_RE_EVAL) ? OPf_SPECIAL : 0)
2832 | (reglist ? OPf_STACKED : 0);
2833 rcop->op_private = 1;
2836 rcop->op_targ = pad_alloc(rcop->op_type, SVs_PADTMP);
2838 /* /$x/ may cause an eval, since $x might be qr/(?{..})/ */
2841 /* establish postfix order */
2842 if (pm->op_pmflags & PMf_KEEP || !(PL_hints & HINT_RE_EVAL)) {
2844 rcop->op_next = expr;
2845 ((UNOP*)expr)->op_first->op_next = (OP*)rcop;
2848 rcop->op_next = LINKLIST(expr);
2849 expr->op_next = (OP*)rcop;
2852 prepend_elem(o->op_type, scalar((OP*)rcop), o);
2857 if (pm->op_pmflags & PMf_EVAL) {
2859 if (CopLINE(PL_curcop) < (line_t)PL_multi_end)
2860 CopLINE_set(PL_curcop, (line_t)PL_multi_end);
2862 else if (repl->op_type == OP_CONST)
2866 for (curop = LINKLIST(repl); curop!=repl; curop = LINKLIST(curop)) {
2867 if (PL_opargs[curop->op_type] & OA_DANGEROUS) {
2868 if (curop->op_type == OP_GV) {
2869 GV *gv = cGVOPx_gv(curop);
2871 if (strchr("&`'123456789+-\016\022", *GvENAME(gv)))
2874 else if (curop->op_type == OP_RV2CV)
2876 else if (curop->op_type == OP_RV2SV ||
2877 curop->op_type == OP_RV2AV ||
2878 curop->op_type == OP_RV2HV ||
2879 curop->op_type == OP_RV2GV) {
2880 if (lastop && lastop->op_type != OP_GV) /*funny deref?*/
2883 else if (curop->op_type == OP_PADSV ||
2884 curop->op_type == OP_PADAV ||
2885 curop->op_type == OP_PADHV ||
2886 curop->op_type == OP_PADANY) {
2889 else if (curop->op_type == OP_PUSHRE)
2890 ; /* Okay here, dangerous in newASSIGNOP */
2900 || PM_GETRE(pm)->reganch & ROPT_EVAL_SEEN))) {
2901 pm->op_pmflags |= PMf_CONST; /* const for long enough */
2902 pm->op_pmpermflags |= PMf_CONST; /* const for long enough */
2903 prepend_elem(o->op_type, scalar(repl), o);
2906 if (curop == repl && !PM_GETRE(pm)) { /* Has variables. */
2907 pm->op_pmflags |= PMf_MAYBE_CONST;
2908 pm->op_pmpermflags |= PMf_MAYBE_CONST;
2910 NewOp(1101, rcop, 1, LOGOP);
2911 rcop->op_type = OP_SUBSTCONT;
2912 rcop->op_ppaddr = PL_ppaddr[OP_SUBSTCONT];
2913 rcop->op_first = scalar(repl);
2914 rcop->op_flags |= OPf_KIDS;
2915 rcop->op_private = 1;
2918 /* establish postfix order */
2919 rcop->op_next = LINKLIST(repl);
2920 repl->op_next = (OP*)rcop;
2922 pm->op_pmreplroot = scalar((OP*)rcop);
2923 pm->op_pmreplstart = LINKLIST(rcop);
2932 Perl_newSVOP(pTHX_ I32 type, I32 flags, SV *sv)
2936 NewOp(1101, svop, 1, SVOP);
2937 svop->op_type = (OPCODE)type;
2938 svop->op_ppaddr = PL_ppaddr[type];
2940 svop->op_next = (OP*)svop;
2941 svop->op_flags = (U8)flags;
2942 if (PL_opargs[type] & OA_RETSCALAR)
2944 if (PL_opargs[type] & OA_TARGET)
2945 svop->op_targ = pad_alloc(type, SVs_PADTMP);
2946 return CHECKOP(type, svop);
2950 Perl_newPADOP(pTHX_ I32 type, I32 flags, SV *sv)
2954 NewOp(1101, padop, 1, PADOP);
2955 padop->op_type = (OPCODE)type;
2956 padop->op_ppaddr = PL_ppaddr[type];
2957 padop->op_padix = pad_alloc(type, SVs_PADTMP);
2958 SvREFCNT_dec(PAD_SVl(padop->op_padix));
2959 PAD_SETSV(padop->op_padix, sv);
2962 padop->op_next = (OP*)padop;
2963 padop->op_flags = (U8)flags;
2964 if (PL_opargs[type] & OA_RETSCALAR)
2966 if (PL_opargs[type] & OA_TARGET)
2967 padop->op_targ = pad_alloc(type, SVs_PADTMP);
2968 return CHECKOP(type, padop);
2972 Perl_newGVOP(pTHX_ I32 type, I32 flags, GV *gv)
2978 return newPADOP(type, flags, SvREFCNT_inc(gv));
2980 return newSVOP(type, flags, SvREFCNT_inc(gv));
2985 Perl_newPVOP(pTHX_ I32 type, I32 flags, char *pv)
2989 NewOp(1101, pvop, 1, PVOP);
2990 pvop->op_type = (OPCODE)type;
2991 pvop->op_ppaddr = PL_ppaddr[type];
2993 pvop->op_next = (OP*)pvop;
2994 pvop->op_flags = (U8)flags;
2995 if (PL_opargs[type] & OA_RETSCALAR)
2997 if (PL_opargs[type] & OA_TARGET)
2998 pvop->op_targ = pad_alloc(type, SVs_PADTMP);
2999 return CHECKOP(type, pvop);
3003 Perl_package(pTHX_ OP *o)
3008 save_hptr(&PL_curstash);
3009 save_item(PL_curstname);
3011 name = SvPV_const(cSVOPo->op_sv, len);
3012 PL_curstash = gv_stashpvn(name, len, TRUE);
3013 sv_setpvn(PL_curstname, name, len);
3016 PL_hints |= HINT_BLOCK_SCOPE;
3017 PL_copline = NOLINE;
3022 Perl_utilize(pTHX_ int aver, I32 floor, OP *version, OP *idop, OP *arg)
3028 if (idop->op_type != OP_CONST)
3029 Perl_croak(aTHX_ "Module name must be constant");
3034 SV * const vesv = ((SVOP*)version)->op_sv;
3036 if (!arg && !SvNIOKp(vesv)) {
3043 if (version->op_type != OP_CONST || !SvNIOKp(vesv))
3044 Perl_croak(aTHX_ "Version number must be constant number");
3046 /* Make copy of idop so we don't free it twice */
3047 pack = newSVOP(OP_CONST, 0, newSVsv(((SVOP*)idop)->op_sv));
3049 /* Fake up a method call to VERSION */
3050 meth = newSVpvn_share("VERSION", 7, 0);
3051 veop = convert(OP_ENTERSUB, OPf_STACKED|OPf_SPECIAL,
3052 append_elem(OP_LIST,
3053 prepend_elem(OP_LIST, pack, list(version)),
3054 newSVOP(OP_METHOD_NAMED, 0, meth)));
3058 /* Fake up an import/unimport */
3059 if (arg && arg->op_type == OP_STUB)
3060 imop = arg; /* no import on explicit () */
3061 else if (SvNIOKp(((SVOP*)idop)->op_sv)) {
3062 imop = Nullop; /* use 5.0; */
3064 idop->op_private |= OPpCONST_NOVER;
3069 /* Make copy of idop so we don't free it twice */
3070 pack = newSVOP(OP_CONST, 0, newSVsv(((SVOP*)idop)->op_sv));
3072 /* Fake up a method call to import/unimport */
3074 ? newSVpvn_share("import",6, 0) : newSVpvn_share("unimport", 8, 0);
3075 imop = convert(OP_ENTERSUB, OPf_STACKED|OPf_SPECIAL,
3076 append_elem(OP_LIST,
3077 prepend_elem(OP_LIST, pack, list(arg)),
3078 newSVOP(OP_METHOD_NAMED, 0, meth)));
3081 /* Fake up the BEGIN {}, which does its thing immediately. */
3083 newSVOP(OP_CONST, 0, newSVpvn_share("BEGIN", 5, 0)),
3086 append_elem(OP_LINESEQ,
3087 append_elem(OP_LINESEQ,
3088 newSTATEOP(0, Nullch, newUNOP(OP_REQUIRE, 0, idop)),
3089 newSTATEOP(0, Nullch, veop)),
3090 newSTATEOP(0, Nullch, imop) ));
3092 /* The "did you use incorrect case?" warning used to be here.
3093 * The problem is that on case-insensitive filesystems one
3094 * might get false positives for "use" (and "require"):
3095 * "use Strict" or "require CARP" will work. This causes
3096 * portability problems for the script: in case-strict
3097 * filesystems the script will stop working.
3099 * The "incorrect case" warning checked whether "use Foo"
3100 * imported "Foo" to your namespace, but that is wrong, too:
3101 * there is no requirement nor promise in the language that
3102 * a Foo.pm should or would contain anything in package "Foo".
3104 * There is very little Configure-wise that can be done, either:
3105 * the case-sensitivity of the build filesystem of Perl does not
3106 * help in guessing the case-sensitivity of the runtime environment.
3109 PL_hints |= HINT_BLOCK_SCOPE;
3110 PL_copline = NOLINE;
3112 PL_cop_seqmax++; /* Purely for B::*'s benefit */
3116 =head1 Embedding Functions
3118 =for apidoc load_module
3120 Loads the module whose name is pointed to by the string part of name.
3121 Note that the actual module name, not its filename, should be given.
3122 Eg, "Foo::Bar" instead of "Foo/Bar.pm". flags can be any of
3123 PERL_LOADMOD_DENY, PERL_LOADMOD_NOIMPORT, or PERL_LOADMOD_IMPORT_OPS
3124 (or 0 for no flags). ver, if specified, provides version semantics
3125 similar to C<use Foo::Bar VERSION>. The optional trailing SV*
3126 arguments can be used to specify arguments to the module's import()
3127 method, similar to C<use Foo::Bar VERSION LIST>.
3132 Perl_load_module(pTHX_ U32 flags, SV *name, SV *ver, ...)
3135 va_start(args, ver);
3136 vload_module(flags, name, ver, &args);
3140 #ifdef PERL_IMPLICIT_CONTEXT
3142 Perl_load_module_nocontext(U32 flags, SV *name, SV *ver, ...)
3146 va_start(args, ver);
3147 vload_module(flags, name, ver, &args);
3153 Perl_vload_module(pTHX_ U32 flags, SV *name, SV *ver, va_list *args)
3157 OP * const modname = newSVOP(OP_CONST, 0, name);
3158 modname->op_private |= OPpCONST_BARE;
3160 veop = newSVOP(OP_CONST, 0, ver);
3164 if (flags & PERL_LOADMOD_NOIMPORT) {
3165 imop = sawparens(newNULLLIST());
3167 else if (flags & PERL_LOADMOD_IMPORT_OPS) {
3168 imop = va_arg(*args, OP*);
3173 sv = va_arg(*args, SV*);
3175 imop = append_elem(OP_LIST, imop, newSVOP(OP_CONST, 0, sv));
3176 sv = va_arg(*args, SV*);
3180 const line_t ocopline = PL_copline;
3181 COP * const ocurcop = PL_curcop;
3182 const int oexpect = PL_expect;
3184 utilize(!(flags & PERL_LOADMOD_DENY), start_subparse(FALSE, 0),
3185 veop, modname, imop);
3186 PL_expect = oexpect;
3187 PL_copline = ocopline;
3188 PL_curcop = ocurcop;
3193 Perl_dofile(pTHX_ OP *term, I32 force_builtin)
3198 if (!force_builtin) {
3199 gv = gv_fetchpv("do", FALSE, SVt_PVCV);
3200 if (!(gv && GvCVu(gv) && GvIMPORTED_CV(gv))) {
3201 GV * const * const gvp = (GV**)hv_fetch(PL_globalstash, "do", 2, FALSE);
3202 gv = gvp ? *gvp : Nullgv;
3206 if (gv && GvCVu(gv) && GvIMPORTED_CV(gv)) {
3207 doop = ck_subr(newUNOP(OP_ENTERSUB, OPf_STACKED,
3208 append_elem(OP_LIST, term,
3209 scalar(newUNOP(OP_RV2CV, 0,
3214 doop = newUNOP(OP_DOFILE, 0, scalar(term));
3220 Perl_newSLICEOP(pTHX_ I32 flags, OP *subscript, OP *listval)
3222 return newBINOP(OP_LSLICE, flags,
3223 list(force_list(subscript)),
3224 list(force_list(listval)) );
3228 S_is_list_assignment(pTHX_ register const OP *o)
3233 if (o->op_type == OP_NULL && o->op_flags & OPf_KIDS)
3234 o = cUNOPo->op_first;
3236 if (o->op_type == OP_COND_EXPR) {
3237 const I32 t = is_list_assignment(cLOGOPo->op_first->op_sibling);
3238 const I32 f = is_list_assignment(cLOGOPo->op_first->op_sibling->op_sibling);
3243 yyerror("Assignment to both a list and a scalar");
3247 if (o->op_type == OP_LIST &&
3248 (o->op_flags & OPf_WANT) == OPf_WANT_SCALAR &&
3249 o->op_private & OPpLVAL_INTRO)
3252 if (o->op_type == OP_LIST || o->op_flags & OPf_PARENS ||
3253 o->op_type == OP_RV2AV || o->op_type == OP_RV2HV ||
3254 o->op_type == OP_ASLICE || o->op_type == OP_HSLICE)
3257 if (o->op_type == OP_PADAV || o->op_type == OP_PADHV)
3260 if (o->op_type == OP_RV2SV)
3267 Perl_newASSIGNOP(pTHX_ I32 flags, OP *left, I32 optype, OP *right)
3272 if (optype == OP_ANDASSIGN || optype == OP_ORASSIGN || optype == OP_DORASSIGN) {
3273 return newLOGOP(optype, 0,
3274 mod(scalar(left), optype),
3275 newUNOP(OP_SASSIGN, 0, scalar(right)));
3278 return newBINOP(optype, OPf_STACKED,
3279 mod(scalar(left), optype), scalar(right));
3283 if (is_list_assignment(left)) {
3287 /* Grandfathering $[ assignment here. Bletch.*/
3288 /* Only simple assignments like C<< ($[) = 1 >> are allowed */
3289 PL_eval_start = (left->op_type == OP_CONST) ? right : 0;
3290 left = mod(left, OP_AASSIGN);
3293 else if (left->op_type == OP_CONST) {
3294 /* Result of assignment is always 1 (or we'd be dead already) */
3295 return newSVOP(OP_CONST, 0, newSViv(1));
3297 /* optimise C<my @x = ()> to C<my @x>, and likewise for hashes */
3298 if ((left->op_type == OP_PADAV || left->op_type == OP_PADHV)
3299 && right->op_type == OP_STUB
3300 && (left->op_private & OPpLVAL_INTRO))
3303 left->op_flags &= ~(OPf_REF|OPf_SPECIAL);
3306 curop = list(force_list(left));
3307 o = newBINOP(OP_AASSIGN, flags, list(force_list(right)), curop);
3308 o->op_private = (U8)(0 | (flags >> 8));
3310 /* PL_generation sorcery:
3311 * an assignment like ($a,$b) = ($c,$d) is easier than
3312 * ($a,$b) = ($c,$a), since there is no need for temporary vars.
3313 * To detect whether there are common vars, the global var
3314 * PL_generation is incremented for each assign op we compile.
3315 * Then, while compiling the assign op, we run through all the
3316 * variables on both sides of the assignment, setting a spare slot
3317 * in each of them to PL_generation. If any of them already have
3318 * that value, we know we've got commonality. We could use a
3319 * single bit marker, but then we'd have to make 2 passes, first
3320 * to clear the flag, then to test and set it. To find somewhere
3321 * to store these values, evil chicanery is done with SvCUR().
3324 if (!(left->op_private & OPpLVAL_INTRO)) {
3327 for (curop = LINKLIST(o); curop != o; curop = LINKLIST(curop)) {
3328 if (PL_opargs[curop->op_type] & OA_DANGEROUS) {
3329 if (curop->op_type == OP_GV) {
3330 GV *gv = cGVOPx_gv(curop);
3331 if (gv == PL_defgv || (int)SvCUR(gv) == PL_generation)
3333 SvCUR_set(gv, PL_generation);
3335 else if (curop->op_type == OP_PADSV ||
3336 curop->op_type == OP_PADAV ||
3337 curop->op_type == OP_PADHV ||
3338 curop->op_type == OP_PADANY)
3340 if (PAD_COMPNAME_GEN(curop->op_targ)
3341 == (STRLEN)PL_generation)
3343 PAD_COMPNAME_GEN_set(curop->op_targ, PL_generation);
3346 else if (curop->op_type == OP_RV2CV)
3348 else if (curop->op_type == OP_RV2SV ||
3349 curop->op_type == OP_RV2AV ||
3350 curop->op_type == OP_RV2HV ||
3351 curop->op_type == OP_RV2GV) {
3352 if (lastop->op_type != OP_GV) /* funny deref? */
3355 else if (curop->op_type == OP_PUSHRE) {
3356 if (((PMOP*)curop)->op_pmreplroot) {
3358 GV *gv = (GV*)PAD_SVl(INT2PTR(PADOFFSET,
3359 ((PMOP*)curop)->op_pmreplroot));
3361 GV *gv = (GV*)((PMOP*)curop)->op_pmreplroot;
3363 if (gv == PL_defgv || (int)SvCUR(gv) == PL_generation)
3365 SvCUR_set(gv, PL_generation);
3374 o->op_private |= OPpASSIGN_COMMON;
3376 if (right && right->op_type == OP_SPLIT) {
3378 if ((tmpop = ((LISTOP*)right)->op_first) &&
3379 tmpop->op_type == OP_PUSHRE)
3381 PMOP * const pm = (PMOP*)tmpop;
3382 if (left->op_type == OP_RV2AV &&
3383 !(left->op_private & OPpLVAL_INTRO) &&
3384 !(o->op_private & OPpASSIGN_COMMON) )
3386 tmpop = ((UNOP*)left)->op_first;
3387 if (tmpop->op_type == OP_GV && !pm->op_pmreplroot) {
3389 pm->op_pmreplroot = INT2PTR(OP*, cPADOPx(tmpop)->op_padix);
3390 cPADOPx(tmpop)->op_padix = 0; /* steal it */
3392 pm->op_pmreplroot = (OP*)cSVOPx(tmpop)->op_sv;
3393 cSVOPx(tmpop)->op_sv = Nullsv; /* steal it */
3395 pm->op_pmflags |= PMf_ONCE;
3396 tmpop = cUNOPo->op_first; /* to list (nulled) */
3397 tmpop = ((UNOP*)tmpop)->op_first; /* to pushmark */
3398 tmpop->op_sibling = Nullop; /* don't free split */
3399 right->op_next = tmpop->op_next; /* fix starting loc */
3400 op_free(o); /* blow off assign */
3401 right->op_flags &= ~OPf_WANT;
3402 /* "I don't know and I don't care." */
3407 if (PL_modcount < RETURN_UNLIMITED_NUMBER &&
3408 ((LISTOP*)right)->op_last->op_type == OP_CONST)
3410 SV *sv = ((SVOP*)((LISTOP*)right)->op_last)->op_sv;
3412 sv_setiv(sv, PL_modcount+1);
3420 right = newOP(OP_UNDEF, 0);
3421 if (right->op_type == OP_READLINE) {
3422 right->op_flags |= OPf_STACKED;
3423 return newBINOP(OP_NULL, flags, mod(scalar(left), OP_SASSIGN), scalar(right));
3426 PL_eval_start = right; /* Grandfathering $[ assignment here. Bletch.*/
3427 o = newBINOP(OP_SASSIGN, flags,
3428 scalar(right), mod(scalar(left), OP_SASSIGN) );
3432 o = newSVOP(OP_CONST, 0, newSViv(PL_compiling.cop_arybase));
3439 Perl_newSTATEOP(pTHX_ I32 flags, char *label, OP *o)
3442 const U32 seq = intro_my();
3445 NewOp(1101, cop, 1, COP);
3446 if (PERLDB_LINE && CopLINE(PL_curcop) && PL_curstash != PL_debstash) {
3447 cop->op_type = OP_DBSTATE;
3448 cop->op_ppaddr = PL_ppaddr[ OP_DBSTATE ];
3451 cop->op_type = OP_NEXTSTATE;
3452 cop->op_ppaddr = PL_ppaddr[ OP_NEXTSTATE ];
3454 cop->op_flags = (U8)flags;
3455 cop->op_private = (U8)(PL_hints & HINT_PRIVATE_MASK);
3457 cop->op_private |= NATIVE_HINTS;
3459 PL_compiling.op_private = cop->op_private;
3460 cop->op_next = (OP*)cop;
3463 cop->cop_label = label;
3464 PL_hints |= HINT_BLOCK_SCOPE;
3467 cop->cop_arybase = PL_curcop->cop_arybase;
3468 if (specialWARN(PL_curcop->cop_warnings))
3469 cop->cop_warnings = PL_curcop->cop_warnings ;
3471 cop->cop_warnings = newSVsv(PL_curcop->cop_warnings) ;
3472 if (specialCopIO(PL_curcop->cop_io))
3473 cop->cop_io = PL_curcop->cop_io;
3475 cop->cop_io = newSVsv(PL_curcop->cop_io) ;
3478 if (PL_copline == NOLINE)
3479 CopLINE_set(cop, CopLINE(PL_curcop));
3481 CopLINE_set(cop, PL_copline);
3482 PL_copline = NOLINE;
3485 CopFILE_set(cop, CopFILE(PL_curcop)); /* XXX share in a pvtable? */
3487 CopFILEGV_set(cop, CopFILEGV(PL_curcop));
3489 CopSTASH_set(cop, PL_curstash);
3491 if (PERLDB_LINE && PL_curstash != PL_debstash) {
3492 SV * const * const svp = av_fetch(CopFILEAV(PL_curcop), (I32)CopLINE(cop), FALSE);
3493 if (svp && *svp != &PL_sv_undef ) {
3494 (void)SvIOK_on(*svp);
3495 SvIV_set(*svp, PTR2IV(cop));
3499 return prepend_elem(OP_LINESEQ, (OP*)cop, o);
3504 Perl_newLOGOP(pTHX_ I32 type, I32 flags, OP *first, OP *other)
3507 return new_logop(type, flags, &first, &other);
3511 S_new_logop(pTHX_ I32 type, I32 flags, OP** firstp, OP** otherp)
3516 OP *first = *firstp;
3517 OP * const other = *otherp;
3519 if (type == OP_XOR) /* Not short circuit, but here by precedence. */
3520 return newBINOP(type, flags, scalar(first), scalar(other));
3522 scalarboolean(first);
3523 /* optimize "!a && b" to "a || b", and "!a || b" to "a && b" */
3524 if (first->op_type == OP_NOT && (first->op_flags & OPf_SPECIAL)) {
3525 if (type == OP_AND || type == OP_OR) {
3531 first = *firstp = cUNOPo->op_first;
3533 first->op_next = o->op_next;
3534 cUNOPo->op_first = Nullop;
3538 if (first->op_type == OP_CONST) {
3539 if (first->op_private & OPpCONST_STRICT)
3540 no_bareword_allowed(first);
3541 else if ((first->op_private & OPpCONST_BARE) && ckWARN(WARN_BAREWORD))
3542 Perl_warner(aTHX_ packWARN(WARN_BAREWORD), "Bareword found in conditional");
3543 if ((type == OP_AND && SvTRUE(((SVOP*)first)->op_sv)) ||
3544 (type == OP_OR && !SvTRUE(((SVOP*)first)->op_sv)) ||
3545 (type == OP_DOR && !SvOK(((SVOP*)first)->op_sv))) {
3548 if (other->op_type == OP_CONST)
3549 other->op_private |= OPpCONST_SHORTCIRCUIT;
3553 /* check for C<my $x if 0>, or C<my($x,$y) if 0> */
3554 const OP *o2 = other;
3555 if ( ! (o2->op_type == OP_LIST
3556 && (( o2 = cUNOPx(o2)->op_first))
3557 && o2->op_type == OP_PUSHMARK
3558 && (( o2 = o2->op_sibling)) )
3561 if ((o2->op_type == OP_PADSV || o2->op_type == OP_PADAV
3562 || o2->op_type == OP_PADHV)
3563 && o2->op_private & OPpLVAL_INTRO
3564 && ckWARN(WARN_DEPRECATED))
3566 Perl_warner(aTHX_ packWARN(WARN_DEPRECATED),
3567 "Deprecated use of my() in false conditional");
3572 if (first->op_type == OP_CONST)
3573 first->op_private |= OPpCONST_SHORTCIRCUIT;
3577 else if ((first->op_flags & OPf_KIDS) && type != OP_DOR
3578 && ckWARN(WARN_MISC)) /* [#24076] Don't warn for <FH> err FOO. */
3580 const OP * const k1 = ((UNOP*)first)->op_first;
3581 const OP * const k2 = k1->op_sibling;
3583 switch (first->op_type)
3586 if (k2 && k2->op_type == OP_READLINE
3587 && (k2->op_flags & OPf_STACKED)
3588 && ((k1->op_flags & OPf_WANT) == OPf_WANT_SCALAR))
3590 warnop = k2->op_type;
3595 if (k1->op_type == OP_READDIR
3596 || k1->op_type == OP_GLOB
3597 || (k1->op_type == OP_NULL && k1->op_targ == OP_GLOB)
3598 || k1->op_type == OP_EACH)
3600 warnop = ((k1->op_type == OP_NULL)
3601 ? (OPCODE)k1->op_targ : k1->op_type);
3606 const line_t oldline = CopLINE(PL_curcop);
3607 CopLINE_set(PL_curcop, PL_copline);
3608 Perl_warner(aTHX_ packWARN(WARN_MISC),
3609 "Value of %s%s can be \"0\"; test with defined()",
3611 ((warnop == OP_READLINE || warnop == OP_GLOB)
3612 ? " construct" : "() operator"));
3613 CopLINE_set(PL_curcop, oldline);
3620 if (type == OP_ANDASSIGN || type == OP_ORASSIGN || type == OP_DORASSIGN)
3621 other->op_private |= OPpASSIGN_BACKWARDS; /* other is an OP_SASSIGN */
3623 NewOp(1101, logop, 1, LOGOP);
3625 logop->op_type = (OPCODE)type;
3626 logop->op_ppaddr = PL_ppaddr[type];
3627 logop->op_first = first;
3628 logop->op_flags = flags | OPf_KIDS;
3629 logop->op_other = LINKLIST(other);
3630 logop->op_private = (U8)(1 | (flags >> 8));
3632 /* establish postfix order */
3633 logop->op_next = LINKLIST(first);
3634 first->op_next = (OP*)logop;
3635 first->op_sibling = other;
3637 CHECKOP(type,logop);
3639 o = newUNOP(OP_NULL, 0, (OP*)logop);
3646 Perl_newCONDOP(pTHX_ I32 flags, OP *first, OP *trueop, OP *falseop)
3654 return newLOGOP(OP_AND, 0, first, trueop);
3656 return newLOGOP(OP_OR, 0, first, falseop);
3658 scalarboolean(first);
3659 if (first->op_type == OP_CONST) {
3660 if (first->op_private & OPpCONST_BARE &&
3661 first->op_private & OPpCONST_STRICT) {
3662 no_bareword_allowed(first);
3664 if (SvTRUE(((SVOP*)first)->op_sv)) {
3675 NewOp(1101, logop, 1, LOGOP);
3676 logop->op_type = OP_COND_EXPR;
3677 logop->op_ppaddr = PL_ppaddr[OP_COND_EXPR];
3678 logop->op_first = first;
3679 logop->op_flags = flags | OPf_KIDS;
3680 logop->op_private = (U8)(1 | (flags >> 8));
3681 logop->op_other = LINKLIST(trueop);
3682 logop->op_next = LINKLIST(falseop);
3684 CHECKOP(OP_COND_EXPR, /* that's logop->op_type */
3687 /* establish postfix order */
3688 start = LINKLIST(first);
3689 first->op_next = (OP*)logop;
3691 first->op_sibling = trueop;
3692 trueop->op_sibling = falseop;
3693 o = newUNOP(OP_NULL, 0, (OP*)logop);
3695 trueop->op_next = falseop->op_next = o;
3702 Perl_newRANGE(pTHX_ I32 flags, OP *left, OP *right)
3711 NewOp(1101, range, 1, LOGOP);
3713 range->op_type = OP_RANGE;
3714 range->op_ppaddr = PL_ppaddr[OP_RANGE];
3715 range->op_first = left;
3716 range->op_flags = OPf_KIDS;
3717 leftstart = LINKLIST(left);
3718 range->op_other = LINKLIST(right);
3719 range->op_private = (U8)(1 | (flags >> 8));
3721 left->op_sibling = right;
3723 range->op_next = (OP*)range;
3724 flip = newUNOP(OP_FLIP, flags, (OP*)range);
3725 flop = newUNOP(OP_FLOP, 0, flip);
3726 o = newUNOP(OP_NULL, 0, flop);
3728 range->op_next = leftstart;
3730 left->op_next = flip;
3731 right->op_next = flop;
3733 range->op_targ = pad_alloc(OP_RANGE, SVs_PADMY);
3734 sv_upgrade(PAD_SV(range->op_targ), SVt_PVNV);
3735 flip->op_targ = pad_alloc(OP_RANGE, SVs_PADMY);
3736 sv_upgrade(PAD_SV(flip->op_targ), SVt_PVNV);
3738 flip->op_private = left->op_type == OP_CONST ? OPpFLIP_LINENUM : 0;
3739 flop->op_private = right->op_type == OP_CONST ? OPpFLIP_LINENUM : 0;
3742 if (!flip->op_private || !flop->op_private)
3743 linklist(o); /* blow off optimizer unless constant */
3749 Perl_newLOOPOP(pTHX_ I32 flags, I32 debuggable, OP *expr, OP *block)
3753 const bool once = block && block->op_flags & OPf_SPECIAL &&
3754 (block->op_type == OP_ENTERSUB || block->op_type == OP_NULL);
3756 PERL_UNUSED_ARG(debuggable);
3759 if (once && expr->op_type == OP_CONST && !SvTRUE(((SVOP*)expr)->op_sv))
3760 return block; /* do {} while 0 does once */
3761 if (expr->op_type == OP_READLINE || expr->op_type == OP_GLOB
3762 || (expr->op_type == OP_NULL && expr->op_targ == OP_GLOB)) {
3763 expr = newUNOP(OP_DEFINED, 0,
3764 newASSIGNOP(0, newDEFSVOP(), 0, expr) );
3765 } else if (expr->op_flags & OPf_KIDS) {
3766 const OP * const k1 = ((UNOP*)expr)->op_first;
3767 const OP * const k2 = k1 ? k1->op_sibling : NULL;
3768 switch (expr->op_type) {
3770 if (k2 && k2->op_type == OP_READLINE
3771 && (k2->op_flags & OPf_STACKED)
3772 && ((k1->op_flags & OPf_WANT) == OPf_WANT_SCALAR))
3773 expr = newUNOP(OP_DEFINED, 0, expr);
3777 if (k1->op_type == OP_READDIR
3778 || k1->op_type == OP_GLOB
3779 || (k1->op_type == OP_NULL && k1->op_targ == OP_GLOB)
3780 || k1->op_type == OP_EACH)
3781 expr = newUNOP(OP_DEFINED, 0, expr);
3787 /* if block is null, the next append_elem() would put UNSTACK, a scalar
3788 * op, in listop. This is wrong. [perl #27024] */
3790 block = newOP(OP_NULL, 0);
3791 listop = append_elem(OP_LINESEQ, block, newOP(OP_UNSTACK, 0));
3792 o = new_logop(OP_AND, 0, &expr, &listop);
3795 ((LISTOP*)listop)->op_last->op_next = LINKLIST(o);
3797 if (once && o != listop)
3798 o->op_next = ((LOGOP*)cUNOPo->op_first)->op_other;
3801 o = newUNOP(OP_NULL, 0, o); /* or do {} while 1 loses outer block */
3803 o->op_flags |= flags;
3805 o->op_flags |= OPf_SPECIAL; /* suppress POPBLOCK curpm restoration*/
3810 Perl_newWHILEOP(pTHX_ I32 flags, I32 debuggable, LOOP *loop, I32
3811 whileline, OP *expr, OP *block, OP *cont, I32 has_my)
3820 PERL_UNUSED_ARG(debuggable);
3823 if (expr->op_type == OP_READLINE || expr->op_type == OP_GLOB
3824 || (expr->op_type == OP_NULL && expr->op_targ == OP_GLOB)) {
3825 expr = newUNOP(OP_DEFINED, 0,
3826 newASSIGNOP(0, newDEFSVOP(), 0, expr) );
3827 } else if (expr->op_flags & OPf_KIDS) {
3828 const OP * const k1 = ((UNOP*)expr)->op_first;
3829 const OP * const k2 = (k1) ? k1->op_sibling : NULL;
3830 switch (expr->op_type) {
3832 if (k2 && k2->op_type == OP_READLINE
3833 && (k2->op_flags & OPf_STACKED)
3834 && ((k1->op_flags & OPf_WANT) == OPf_WANT_SCALAR))
3835 expr = newUNOP(OP_DEFINED, 0, expr);
3839 if (k1->op_type == OP_READDIR
3840 || k1->op_type == OP_GLOB
3841 || (k1->op_type == OP_NULL && k1->op_targ == OP_GLOB)
3842 || k1->op_type == OP_EACH)
3843 expr = newUNOP(OP_DEFINED, 0, expr);
3850 block = newOP(OP_NULL, 0);
3851 else if (cont || has_my) {
3852 block = scope(block);
3856 next = LINKLIST(cont);
3859 OP * const unstack = newOP(OP_UNSTACK, 0);
3862 cont = append_elem(OP_LINESEQ, cont, unstack);
3865 listop = append_list(OP_LINESEQ, (LISTOP*)block, (LISTOP*)cont);
3866 redo = LINKLIST(listop);
3869 PL_copline = (line_t)whileline;
3871 o = new_logop(OP_AND, 0, &expr, &listop);
3872 if (o == expr && o->op_type == OP_CONST && !SvTRUE(cSVOPo->op_sv)) {
3873 op_free(expr); /* oops, it's a while (0) */
3875 return Nullop; /* listop already freed by new_logop */
3878 ((LISTOP*)listop)->op_last->op_next =
3879 (o == listop ? redo : LINKLIST(o));
3885 NewOp(1101,loop,1,LOOP);
3886 loop->op_type = OP_ENTERLOOP;
3887 loop->op_ppaddr = PL_ppaddr[OP_ENTERLOOP];
3888 loop->op_private = 0;
3889 loop->op_next = (OP*)loop;
3892 o = newBINOP(OP_LEAVELOOP, 0, (OP*)loop, o);
3894 loop->op_redoop = redo;
3895 loop->op_lastop = o;
3896 o->op_private |= loopflags;
3899 loop->op_nextop = next;
3901 loop->op_nextop = o;
3903 o->op_flags |= flags;
3904 o->op_private |= (flags >> 8);
3909 Perl_newFOROP(pTHX_ I32 flags, char *label, line_t forline, OP *sv, OP *expr, OP *block, OP *cont)
3914 PADOFFSET padoff = 0;
3919 if (sv->op_type == OP_RV2SV) { /* symbol table variable */
3920 iterpflags = sv->op_private & OPpOUR_INTRO; /* for our $x () */
3921 sv->op_type = OP_RV2GV;
3922 sv->op_ppaddr = PL_ppaddr[OP_RV2GV];
3924 else if (sv->op_type == OP_PADSV) { /* private variable */
3925 iterpflags = sv->op_private & OPpLVAL_INTRO; /* for my $x () */
3926 padoff = sv->op_targ;
3931 else if (sv->op_type == OP_THREADSV) { /* per-thread variable */
3932 padoff = sv->op_targ;
3934 iterflags |= OPf_SPECIAL;
3939 Perl_croak(aTHX_ "Can't use %s for loop variable", PL_op_desc[sv->op_type]);
3942 const I32 offset = pad_findmy("$_");
3943 if (offset == NOT_IN_PAD || PAD_COMPNAME_FLAGS(offset) & SVpad_OUR) {
3944 sv = newGVOP(OP_GV, 0, PL_defgv);
3950 if (expr->op_type == OP_RV2AV || expr->op_type == OP_PADAV) {
3951 expr = mod(force_list(scalar(ref(expr, OP_ITER))), OP_GREPSTART);
3952 iterflags |= OPf_STACKED;
3954 else if (expr->op_type == OP_NULL &&
3955 (expr->op_flags & OPf_KIDS) &&
3956 ((BINOP*)expr)->op_first->op_type == OP_FLOP)
3958 /* Basically turn for($x..$y) into the same as for($x,$y), but we
3959 * set the STACKED flag to indicate that these values are to be
3960 * treated as min/max values by 'pp_iterinit'.
3962 UNOP* const flip = (UNOP*)((UNOP*)((BINOP*)expr)->op_first)->op_first;
3963 LOGOP* const range = (LOGOP*) flip->op_first;
3964 OP* const left = range->op_first;
3965 OP* const right = left->op_sibling;
3968 range->op_flags &= ~OPf_KIDS;
3969 range->op_first = Nullop;
3971 listop = (LISTOP*)newLISTOP(OP_LIST, 0, left, right);
3972 listop->op_first->op_next = range->op_next;
3973 left->op_next = range->op_other;
3974 right->op_next = (OP*)listop;
3975 listop->op_next = listop->op_first;
3978 expr = (OP*)(listop);
3980 iterflags |= OPf_STACKED;
3983 expr = mod(force_list(expr), OP_GREPSTART);
3986 loop = (LOOP*)list(convert(OP_ENTERITER, iterflags,
3987 append_elem(OP_LIST, expr, scalar(sv))));
3988 assert(!loop->op_next);
3989 /* for my $x () sets OPpLVAL_INTRO;
3990 * for our $x () sets OPpOUR_INTRO */
3991 loop->op_private = (U8)iterpflags;
3992 #ifdef PL_OP_SLAB_ALLOC
3995 NewOp(1234,tmp,1,LOOP);
3996 Copy(loop,tmp,1,LISTOP);
4001 Renew(loop, 1, LOOP);
4003 loop->op_targ = padoff;
4004 wop = newWHILEOP(flags, 1, loop, forline, newOP(OP_ITER, 0), block, cont, 0);
4005 PL_copline = forline;
4006 return newSTATEOP(0, label, wop);
4010 Perl_newLOOPEX(pTHX_ I32 type, OP *label)
4014 if (type != OP_GOTO || label->op_type == OP_CONST) {
4015 /* "last()" means "last" */
4016 if (label->op_type == OP_STUB && (label->op_flags & OPf_PARENS))
4017 o = newOP(type, OPf_SPECIAL);
4019 o = newPVOP(type, 0, savepv(label->op_type == OP_CONST
4020 ? SvPVx_nolen_const(((SVOP*)label)->op_sv)
4026 /* Check whether it's going to be a goto &function */
4027 if (label->op_type == OP_ENTERSUB
4028 && !(label->op_flags & OPf_STACKED))
4029 label = newUNOP(OP_REFGEN, 0, mod(label, OP_REFGEN));
4030 o = newUNOP(type, OPf_STACKED, label);
4032 PL_hints |= HINT_BLOCK_SCOPE;
4037 =for apidoc cv_undef
4039 Clear out all the active components of a CV. This can happen either
4040 by an explicit C<undef &foo>, or by the reference count going to zero.
4041 In the former case, we keep the CvOUTSIDE pointer, so that any anonymous
4042 children can still follow the full lexical scope chain.
4048 Perl_cv_undef(pTHX_ CV *cv)
4052 if (CvFILE(cv) && !CvXSUB(cv)) {
4053 /* for XSUBs CvFILE point directly to static memory; __FILE__ */
4054 Safefree(CvFILE(cv));
4059 if (!CvXSUB(cv) && CvROOT(cv)) {
4061 Perl_croak(aTHX_ "Can't undef active subroutine");
4064 PAD_SAVE_SETNULLPAD();
4066 op_free(CvROOT(cv));
4067 CvROOT(cv) = Nullop;
4068 CvSTART(cv) = Nullop;
4071 SvPOK_off((SV*)cv); /* forget prototype */
4076 /* remove CvOUTSIDE unless this is an undef rather than a free */
4077 if (!SvREFCNT(cv) && CvOUTSIDE(cv)) {
4078 if (!CvWEAKOUTSIDE(cv))
4079 SvREFCNT_dec(CvOUTSIDE(cv));
4080 CvOUTSIDE(cv) = Nullcv;
4083 SvREFCNT_dec((SV*)CvXSUBANY(cv).any_ptr);
4089 /* delete all flags except WEAKOUTSIDE */
4090 CvFLAGS(cv) &= CVf_WEAKOUTSIDE;
4094 Perl_cv_ckproto(pTHX_ const CV *cv, const GV *gv, const char *p)
4096 if (((!p != !SvPOK(cv)) || (p && strNE(p, SvPVX_const(cv)))) && ckWARN_d(WARN_PROTOTYPE)) {
4097 SV* const msg = sv_newmortal();
4101 gv_efullname3(name = sv_newmortal(), gv, Nullch);
4102 sv_setpv(msg, "Prototype mismatch:");
4104 Perl_sv_catpvf(aTHX_ msg, " sub %"SVf, name);
4106 Perl_sv_catpvf(aTHX_ msg, " (%"SVf")", (const SV *)cv);
4108 Perl_sv_catpv(aTHX_ msg, ": none");
4109 sv_catpv(msg, " vs ");
4111 Perl_sv_catpvf(aTHX_ msg, "(%s)", p);
4113 sv_catpv(msg, "none");
4114 Perl_warner(aTHX_ packWARN(WARN_PROTOTYPE), "%"SVf, msg);
4118 static void const_sv_xsub(pTHX_ CV* cv);
4122 =head1 Optree Manipulation Functions
4124 =for apidoc cv_const_sv
4126 If C<cv> is a constant sub eligible for inlining. returns the constant
4127 value returned by the sub. Otherwise, returns NULL.
4129 Constant subs can be created with C<newCONSTSUB> or as described in
4130 L<perlsub/"Constant Functions">.
4135 Perl_cv_const_sv(pTHX_ CV *cv)
4137 if (!cv || !CvCONST(cv))
4139 return (SV*)CvXSUBANY(cv).any_ptr;
4142 /* op_const_sv: examine an optree to determine whether it's in-lineable.
4143 * Can be called in 3 ways:
4146 * look for a single OP_CONST with attached value: return the value
4148 * cv && CvCLONE(cv) && !CvCONST(cv)
4150 * examine the clone prototype, and if contains only a single
4151 * OP_CONST referencing a pad const, or a single PADSV referencing
4152 * an outer lexical, return a non-zero value to indicate the CV is
4153 * a candidate for "constizing" at clone time
4157 * We have just cloned an anon prototype that was marked as a const
4158 * candidiate. Try to grab the current value, and in the case of
4159 * PADSV, ignore it if it has multiple references. Return the value.
4163 Perl_op_const_sv(pTHX_ const OP *o, CV *cv)
4170 if (o->op_type == OP_LINESEQ && cLISTOPo->op_first)
4171 o = cLISTOPo->op_first->op_sibling;
4173 for (; o; o = o->op_next) {
4174 const OPCODE type = o->op_type;
4176 if (sv && o->op_next == o)
4178 if (o->op_next != o) {
4179 if (type == OP_NEXTSTATE || type == OP_NULL || type == OP_PUSHMARK)
4181 if (type == OP_DBSTATE)
4184 if (type == OP_LEAVESUB || type == OP_RETURN)
4188 if (type == OP_CONST && cSVOPo->op_sv)
4190 else if (cv && type == OP_CONST) {
4191 sv = PAD_BASE_SV(CvPADLIST(cv), o->op_targ);
4195 else if (cv && type == OP_PADSV) {
4196 if (CvCONST(cv)) { /* newly cloned anon */
4197 sv = PAD_BASE_SV(CvPADLIST(cv), o->op_targ);
4198 /* the candidate should have 1 ref from this pad and 1 ref
4199 * from the parent */
4200 if (!sv || SvREFCNT(sv) != 2)
4207 if (PAD_COMPNAME_FLAGS(o->op_targ) & SVf_FAKE)
4208 sv = &PL_sv_undef; /* an arbitrary non-null value */
4219 Perl_newMYSUB(pTHX_ I32 floor, OP *o, OP *proto, OP *attrs, OP *block)
4221 PERL_UNUSED_ARG(floor);
4231 Perl_croak(aTHX_ "\"my sub\" not yet implemented");
4235 Perl_newSUB(pTHX_ I32 floor, OP *o, OP *proto, OP *block)
4237 return Perl_newATTRSUB(aTHX_ floor, o, proto, Nullop, block);
4241 Perl_newATTRSUB(pTHX_ I32 floor, OP *o, OP *proto, OP *attrs, OP *block)
4252 const char * const name = o ? SvPVx_nolen_const(cSVOPo->op_sv) : Nullch;
4255 assert(proto->op_type == OP_CONST);
4256 ps = SvPVx_const(((SVOP*)proto)->op_sv, ps_len);
4261 if (!name && PERLDB_NAMEANON && CopLINE(PL_curcop)) {
4262 SV * const sv = sv_newmortal();
4263 Perl_sv_setpvf(aTHX_ sv, "%s[%s:%"IVdf"]",
4264 PL_curstash ? "__ANON__" : "__ANON__::__ANON__",
4265 CopFILE(PL_curcop), (IV)CopLINE(PL_curcop));
4266 aname = SvPVX_const(sv);
4271 gv_fetch_flags = (block || attrs || (CvFLAGS(PL_compcv) & CVf_BUILTIN_ATTRS))
4272 ? GV_ADDMULTI : GV_ADDMULTI | GV_NOINIT;
4273 gv = name ? gv_fetchsv(cSVOPo->op_sv, gv_fetch_flags, SVt_PVCV)
4274 : gv_fetchpv(aname ? aname
4275 : (PL_curstash ? "__ANON__" : "__ANON__::__ANON__"),
4276 gv_fetch_flags, SVt_PVCV);
4285 if (SvTYPE(gv) != SVt_PVGV) { /* Maybe prototype now, and had at
4286 maximum a prototype before. */
4287 if (SvTYPE(gv) > SVt_NULL) {
4288 if (!SvPOK((SV*)gv) && !(SvIOK((SV*)gv) && SvIVX((SV*)gv) == -1)
4289 && ckWARN_d(WARN_PROTOTYPE))
4291 Perl_warner(aTHX_ packWARN(WARN_PROTOTYPE), "Runaway prototype");
4293 cv_ckproto((CV*)gv, NULL, ps);
4296 sv_setpvn((SV*)gv, ps, ps_len);
4298 sv_setiv((SV*)gv, -1);
4299 SvREFCNT_dec(PL_compcv);
4300 cv = PL_compcv = NULL;
4301 PL_sub_generation++;
4305 cv = (!name || GvCVGEN(gv)) ? Nullcv : GvCV(gv);
4307 #ifdef GV_UNIQUE_CHECK
4308 if (cv && GvUNIQUE(gv) && SvREADONLY(cv)) {
4309 Perl_croak(aTHX_ "Can't define subroutine %s (GV is unique)", name);
4313 if (!block || !ps || *ps || attrs || (CvFLAGS(PL_compcv) & CVf_BUILTIN_ATTRS))
4316 const_sv = op_const_sv(block, Nullcv);
4319 const bool exists = CvROOT(cv) || CvXSUB(cv);
4321 #ifdef GV_UNIQUE_CHECK
4322 if (exists && GvUNIQUE(gv)) {
4323 Perl_croak(aTHX_ "Can't redefine unique subroutine %s", name);
4327 /* if the subroutine doesn't exist and wasn't pre-declared
4328 * with a prototype, assume it will be AUTOLOADed,
4329 * skipping the prototype check
4331 if (exists || SvPOK(cv))
4332 cv_ckproto(cv, gv, ps);
4333 /* already defined (or promised)? */
4334 if (exists || GvASSUMECV(gv)) {
4335 if (!block && !attrs) {
4336 if (CvFLAGS(PL_compcv)) {
4337 /* might have had built-in attrs applied */
4338 CvFLAGS(cv) |= (CvFLAGS(PL_compcv) & CVf_BUILTIN_ATTRS);
4340 /* just a "sub foo;" when &foo is already defined */
4341 SAVEFREESV(PL_compcv);
4344 /* ahem, death to those who redefine active sort subs */
4345 if (PL_curstackinfo->si_type == PERLSI_SORT && PL_sortcop == CvSTART(cv))
4346 Perl_croak(aTHX_ "Can't redefine active sort subroutine %s", name);
4348 if (ckWARN(WARN_REDEFINE)
4350 && (!const_sv || sv_cmp(cv_const_sv(cv), const_sv))))
4352 const line_t oldline = CopLINE(PL_curcop);
4353 if (PL_copline != NOLINE)
4354 CopLINE_set(PL_curcop, PL_copline);
4355 Perl_warner(aTHX_ packWARN(WARN_REDEFINE),
4356 CvCONST(cv) ? "Constant subroutine %s redefined"
4357 : "Subroutine %s redefined", name);
4358 CopLINE_set(PL_curcop, oldline);
4366 (void)SvREFCNT_inc(const_sv);
4368 assert(!CvROOT(cv) && !CvCONST(cv));
4369 sv_setpvn((SV*)cv, "", 0); /* prototype is "" */
4370 CvXSUBANY(cv).any_ptr = const_sv;
4371 CvXSUB(cv) = const_sv_xsub;
4376 cv = newCONSTSUB(NULL, name, const_sv);
4379 SvREFCNT_dec(PL_compcv);
4381 PL_sub_generation++;
4388 /* Need to do a C<use attributes $stash_of_cv,\&cv,@attrs>
4389 * before we clobber PL_compcv.
4393 /* Might have had built-in attributes applied -- propagate them. */
4394 CvFLAGS(cv) |= (CvFLAGS(PL_compcv) & CVf_BUILTIN_ATTRS);
4395 if (CvGV(cv) && GvSTASH(CvGV(cv)))
4396 stash = GvSTASH(CvGV(cv));
4397 else if (CvSTASH(cv))
4398 stash = CvSTASH(cv);
4400 stash = PL_curstash;
4403 /* possibly about to re-define existing subr -- ignore old cv */
4404 rcv = (SV*)PL_compcv;
4405 if (name && GvSTASH(gv))
4406 stash = GvSTASH(gv);
4408 stash = PL_curstash;
4410 apply_attrs(stash, rcv, attrs, FALSE);
4412 if (cv) { /* must reuse cv if autoloaded */
4414 /* got here with just attrs -- work done, so bug out */
4415 SAVEFREESV(PL_compcv);
4418 /* transfer PL_compcv to cv */
4420 CvFLAGS(cv) = CvFLAGS(PL_compcv);
4421 if (!CvWEAKOUTSIDE(cv))
4422 SvREFCNT_dec(CvOUTSIDE(cv));
4423 CvOUTSIDE(cv) = CvOUTSIDE(PL_compcv);
4424 CvOUTSIDE_SEQ(cv) = CvOUTSIDE_SEQ(PL_compcv);
4425 CvOUTSIDE(PL_compcv) = 0;
4426 CvPADLIST(cv) = CvPADLIST(PL_compcv);
4427 CvPADLIST(PL_compcv) = 0;
4428 /* inner references to PL_compcv must be fixed up ... */
4429 pad_fixup_inner_anons(CvPADLIST(cv), PL_compcv, cv);
4430 /* ... before we throw it away */
4431 SvREFCNT_dec(PL_compcv);
4433 if (PERLDB_INTER)/* Advice debugger on the new sub. */
4434 ++PL_sub_generation;
4441 PL_sub_generation++;
4445 CvFILE_set_from_cop(cv, PL_curcop);
4446 CvSTASH(cv) = PL_curstash;
4449 sv_setpvn((SV*)cv, ps, ps_len);
4451 if (PL_error_count) {
4455 const char *s = strrchr(name, ':');
4457 if (strEQ(s, "BEGIN")) {
4458 const char not_safe[] =
4459 "BEGIN not safe after errors--compilation aborted";
4460 if (PL_in_eval & EVAL_KEEPERR)
4461 Perl_croak(aTHX_ not_safe);
4463 /* force display of errors found but not reported */
4464 sv_catpv(ERRSV, not_safe);
4465 Perl_croak(aTHX_ "%"SVf, ERRSV);
4474 CvROOT(cv) = newUNOP(OP_LEAVESUBLV, 0,
4475 mod(scalarseq(block), OP_LEAVESUBLV));
4478 /* This makes sub {}; work as expected. */
4479 if (block->op_type == OP_STUB) {
4481 block = newSTATEOP(0, Nullch, 0);
4483 CvROOT(cv) = newUNOP(OP_LEAVESUB, 0, scalarseq(block));
4485 CvROOT(cv)->op_private |= OPpREFCOUNTED;
4486 OpREFCNT_set(CvROOT(cv), 1);
4487 CvSTART(cv) = LINKLIST(CvROOT(cv));
4488 CvROOT(cv)->op_next = 0;
4489 CALL_PEEP(CvSTART(cv));
4491 /* now that optimizer has done its work, adjust pad values */
4493 pad_tidy(CvCLONE(cv) ? padtidy_SUBCLONE : padtidy_SUB);
4496 assert(!CvCONST(cv));
4497 if (ps && !*ps && op_const_sv(block, cv))
4501 if (name || aname) {
4503 const char *tname = (name ? name : aname);
4505 if (PERLDB_SUBLINE && PL_curstash != PL_debstash) {
4506 SV *sv = NEWSV(0,0);
4507 SV *tmpstr = sv_newmortal();
4508 GV *db_postponed = gv_fetchpv("DB::postponed", GV_ADDMULTI, SVt_PVHV);
4511 Perl_sv_setpvf(aTHX_ sv, "%s:%ld-%ld",
4513 (long)PL_subline, (long)CopLINE(PL_curcop));
4514 gv_efullname3(tmpstr, gv, Nullch);
4515 hv_store(GvHV(PL_DBsub), SvPVX_const(tmpstr), SvCUR(tmpstr), sv, 0);
4516 hv = GvHVn(db_postponed);
4517 if (HvFILL(hv) > 0 && hv_exists(hv, SvPVX_const(tmpstr), SvCUR(tmpstr))) {
4518 CV * const pcv = GvCV(db_postponed);
4524 call_sv((SV*)pcv, G_DISCARD);
4529 if ((s = strrchr(tname,':')))
4534 if (*s != 'B' && *s != 'E' && *s != 'C' && *s != 'I')
4537 if (strEQ(s, "BEGIN") && !PL_error_count) {
4538 const I32 oldscope = PL_scopestack_ix;
4540 SAVECOPFILE(&PL_compiling);
4541 SAVECOPLINE(&PL_compiling);
4544 PL_beginav = newAV();
4545 DEBUG_x( dump_sub(gv) );
4546 av_push(PL_beginav, (SV*)cv);
4547 GvCV(gv) = 0; /* cv has been hijacked */
4548 call_list(oldscope, PL_beginav);
4550 PL_curcop = &PL_compiling;
4551 PL_compiling.op_private = (U8)(PL_hints & HINT_PRIVATE_MASK);
4554 else if (strEQ(s, "END") && !PL_error_count) {
4557 DEBUG_x( dump_sub(gv) );
4558 av_unshift(PL_endav, 1);
4559 av_store(PL_endav, 0, (SV*)cv);
4560 GvCV(gv) = 0; /* cv has been hijacked */
4562 else if (strEQ(s, "CHECK") && !PL_error_count) {
4564 PL_checkav = newAV();
4565 DEBUG_x( dump_sub(gv) );
4566 if (PL_main_start && ckWARN(WARN_VOID))
4567 Perl_warner(aTHX_ packWARN(WARN_VOID), "Too late to run CHECK block");
4568 av_unshift(PL_checkav, 1);
4569 av_store(PL_checkav, 0, (SV*)cv);
4570 GvCV(gv) = 0; /* cv has been hijacked */
4572 else if (strEQ(s, "INIT") && !PL_error_count) {
4574 PL_initav = newAV();
4575 DEBUG_x( dump_sub(gv) );
4576 if (PL_main_start && ckWARN(WARN_VOID))
4577 Perl_warner(aTHX_ packWARN(WARN_VOID), "Too late to run INIT block");
4578 av_push(PL_initav, (SV*)cv);
4579 GvCV(gv) = 0; /* cv has been hijacked */
4584 PL_copline = NOLINE;
4589 /* XXX unsafe for threads if eval_owner isn't held */
4591 =for apidoc newCONSTSUB
4593 Creates a constant sub equivalent to Perl C<sub FOO () { 123 }> which is
4594 eligible for inlining at compile-time.
4600 Perl_newCONSTSUB(pTHX_ HV *stash, const char *name, SV *sv)
4607 SAVECOPLINE(PL_curcop);
4608 CopLINE_set(PL_curcop, PL_copline);
4611 PL_hints &= ~HINT_BLOCK_SCOPE;
4614 SAVESPTR(PL_curstash);
4615 SAVECOPSTASH(PL_curcop);
4616 PL_curstash = stash;
4617 CopSTASH_set(PL_curcop,stash);
4620 cv = newXS(name, const_sv_xsub, savepv(CopFILE(PL_curcop)));
4621 CvXSUBANY(cv).any_ptr = sv;
4623 sv_setpvn((SV*)cv, "", 0); /* prototype is "" */
4626 CopSTASH_free(PL_curcop);
4634 =for apidoc U||newXS
4636 Used by C<xsubpp> to hook up XSUBs as Perl subs.
4642 Perl_newXS(pTHX_ const char *name, XSUBADDR_t subaddr, const char *filename)
4644 GV * const gv = gv_fetchpv(name ? name :
4645 (PL_curstash ? "__ANON__" : "__ANON__::__ANON__"),
4646 GV_ADDMULTI, SVt_PVCV);
4650 Perl_croak(aTHX_ "panic: no address for '%s' in '%s'", name, filename);
4652 if ((cv = (name ? GvCV(gv) : Nullcv))) {
4654 /* just a cached method */
4658 else if (CvROOT(cv) || CvXSUB(cv) || GvASSUMECV(gv)) {
4659 /* already defined (or promised) */
4660 /* XXX It's possible for this HvNAME_get to return null, and get passed into strEQ */
4661 if (ckWARN(WARN_REDEFINE)) {
4662 GV * const gvcv = CvGV(cv);
4664 HV * const stash = GvSTASH(gvcv);
4666 const char *name = HvNAME_get(stash);
4667 if ( strEQ(name,"autouse") ) {
4668 const line_t oldline = CopLINE(PL_curcop);
4669 if (PL_copline != NOLINE)
4670 CopLINE_set(PL_curcop, PL_copline);
4671 Perl_warner(aTHX_ packWARN(WARN_REDEFINE),
4672 CvCONST(cv) ? "Constant subroutine %s redefined"
4673 : "Subroutine %s redefined"
4675 CopLINE_set(PL_curcop, oldline);
4685 if (cv) /* must reuse cv if autoloaded */
4688 cv = (CV*)NEWSV(1105,0);
4689 sv_upgrade((SV *)cv, SVt_PVCV);
4693 PL_sub_generation++;
4697 (void)gv_fetchfile(filename);
4698 CvFILE(cv) = (char *)filename; /* NOTE: not copied, as it is expected to be
4699 an external constant string */
4700 CvXSUB(cv) = subaddr;
4703 const char *s = strrchr(name,':');
4709 if (*s != 'B' && *s != 'E' && *s != 'C' && *s != 'I')
4712 if (strEQ(s, "BEGIN")) {
4714 PL_beginav = newAV();
4715 av_push(PL_beginav, (SV*)cv);
4716 GvCV(gv) = 0; /* cv has been hijacked */
4718 else if (strEQ(s, "END")) {
4721 av_unshift(PL_endav, 1);
4722 av_store(PL_endav, 0, (SV*)cv);
4723 GvCV(gv) = 0; /* cv has been hijacked */
4725 else if (strEQ(s, "CHECK")) {
4727 PL_checkav = newAV();
4728 if (PL_main_start && ckWARN(WARN_VOID))
4729 Perl_warner(aTHX_ packWARN(WARN_VOID), "Too late to run CHECK block");
4730 av_unshift(PL_checkav, 1);
4731 av_store(PL_checkav, 0, (SV*)cv);
4732 GvCV(gv) = 0; /* cv has been hijacked */
4734 else if (strEQ(s, "INIT")) {
4736 PL_initav = newAV();
4737 if (PL_main_start && ckWARN(WARN_VOID))
4738 Perl_warner(aTHX_ packWARN(WARN_VOID), "Too late to run INIT block");
4739 av_push(PL_initav, (SV*)cv);
4740 GvCV(gv) = 0; /* cv has been hijacked */
4751 Perl_newFORM(pTHX_ I32 floor, OP *o, OP *block)
4757 gv = gv_fetchsv(cSVOPo->op_sv, TRUE, SVt_PVFM);
4759 gv = gv_fetchpv("STDOUT", TRUE, SVt_PVFM);
4761 #ifdef GV_UNIQUE_CHECK
4763 Perl_croak(aTHX_ "Bad symbol for form (GV is unique)");
4767 if ((cv = GvFORM(gv))) {
4768 if (ckWARN(WARN_REDEFINE)) {
4769 const line_t oldline = CopLINE(PL_curcop);
4770 if (PL_copline != NOLINE)
4771 CopLINE_set(PL_curcop, PL_copline);
4772 Perl_warner(aTHX_ packWARN(WARN_REDEFINE),
4773 o ? "Format %"SVf" redefined"
4774 : "Format STDOUT redefined" ,cSVOPo->op_sv);
4775 CopLINE_set(PL_curcop, oldline);
4782 CvFILE_set_from_cop(cv, PL_curcop);
4785 pad_tidy(padtidy_FORMAT);
4786 CvROOT(cv) = newUNOP(OP_LEAVEWRITE, 0, scalarseq(block));
4787 CvROOT(cv)->op_private |= OPpREFCOUNTED;
4788 OpREFCNT_set(CvROOT(cv), 1);
4789 CvSTART(cv) = LINKLIST(CvROOT(cv));