3 * Copyright (C) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
4 * 2000, 2001, 2002, 2003, 2004, 2005, 2006, by Larry Wall and others
6 * You may distribute under the terms of either the GNU General Public
7 * License or the Artistic License, as specified in the README file.
12 * "You see: Mr. Drogo, he married poor Miss Primula Brandybuck. She was
13 * our Mr. Bilbo's first cousin on the mother's side (her mother being the
14 * youngest of the Old Took's daughters); and Mr. Drogo was his second
15 * cousin. So Mr. Frodo is his first *and* second cousin, once removed
16 * either way, as the saying is, if you follow me." --the Gaffer
19 /* This file contains the functions that create, manipulate and optimize
20 * the OP structures that hold a compiled perl program.
22 * A Perl program is compiled into a tree of OPs. Each op contains
23 * structural pointers (eg to its siblings and the next op in the
24 * execution sequence), a pointer to the function that would execute the
25 * op, plus any data specific to that op. For example, an OP_CONST op
26 * points to the pp_const() function and to an SV containing the constant
27 * value. When pp_const() is executed, its job is to push that SV onto the
30 * OPs are mainly created by the newFOO() functions, which are mainly
31 * called from the parser (in perly.y) as the code is parsed. For example
32 * the Perl code $a + $b * $c would cause the equivalent of the following
33 * to be called (oversimplifying a bit):
35 * newBINOP(OP_ADD, flags,
37 * newBINOP(OP_MULTIPLY, flags, newSVREF($b), newSVREF($c))
40 * Note that during the build of miniperl, a temporary copy of this file
41 * is made, called opmini.c.
45 Perl's compiler is essentially a 3-pass compiler with interleaved phases:
49 An execution-order pass
51 The bottom-up pass is represented by all the "newOP" routines and
52 the ck_ routines. The bottom-upness is actually driven by yacc.
53 So at the point that a ck_ routine fires, we have no idea what the
54 context is, either upward in the syntax tree, or either forward or
55 backward in the execution order. (The bottom-up parser builds that
56 part of the execution order it knows about, but if you follow the "next"
57 links around, you'll find it's actually a closed loop through the
60 Whenever the bottom-up parser gets to a node that supplies context to
61 its components, it invokes that portion of the top-down pass that applies
62 to that part of the subtree (and marks the top node as processed, so
63 if a node further up supplies context, it doesn't have to take the
64 plunge again). As a particular subcase of this, as the new node is
65 built, it takes all the closed execution loops of its subcomponents
66 and links them into a new closed loop for the higher level node. But
67 it's still not the real execution order.
69 The actual execution order is not known till we get a grammar reduction
70 to a top-level unit like a subroutine or file that will be called by
71 "name" rather than via a "next" pointer. At that point, we can call
72 into peep() to do that code's portion of the 3rd pass. It has to be
73 recursive, but it's recursive on basic blocks, not on tree nodes.
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, NULL);
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 const bool is_our = (PL_in_my == KEY_our);
215 /* complain about "my $<special_var>" etc etc */
219 (USE_UTF8_IN_NAMES && UTF8_IS_START(name[1])) ||
220 (name[1] == '_' && (*name == '$' || name[2]))))
222 /* name[2] is true if strlen(name) > 2 */
223 if (!isPRINT(name[1]) || strchr("\t\n\r\f", name[1])) {
224 /* 1999-02-27 mjd@plover.com */
226 p = strchr(name, '\0');
227 /* The next block assumes the buffer is at least 205 chars
228 long. At present, it's always at least 256 chars. */
230 strcpy(name+200, "...");
236 /* Move everything else down one character */
237 for (; p-name > 2; p--)
239 name[2] = toCTRL(name[1]);
242 yyerror(Perl_form(aTHX_ "Can't use global %s in \"my\"",name));
245 /* check for duplicate declaration */
246 pad_check_dup(name, is_our, (PL_curstash ? PL_curstash : PL_defstash));
248 if (PL_in_my_stash && *name != '$') {
249 yyerror(Perl_form(aTHX_
250 "Can't declare class for non-scalar %s in \"%s\"",
251 name, is_our ? "our" : "my"));
254 /* allocate a spare slot and store the name in that slot */
256 off = pad_add_name(name,
259 /* $_ is always in main::, even with our */
260 ? (PL_curstash && !strEQ(name,"$_") ? PL_curstash : PL_defstash)
271 Perl_op_free(pTHX_ OP *o)
277 if (!o || o->op_static)
280 if (o->op_private & OPpREFCOUNTED) {
281 switch (o->op_type) {
289 refcnt = OpREFCNT_dec(o);
299 if (o->op_flags & OPf_KIDS) {
300 register OP *kid, *nextkid;
301 for (kid = cUNOPo->op_first; kid; kid = nextkid) {
302 nextkid = kid->op_sibling; /* Get before next freeing kid */
308 type = (OPCODE)o->op_targ;
310 /* COP* is not cleared by op_clear() so that we may track line
311 * numbers etc even after null() */
312 if (type == OP_NEXTSTATE || type == OP_SETSTATE || type == OP_DBSTATE)
317 #ifdef DEBUG_LEAKING_SCALARS
324 Perl_op_clear(pTHX_ OP *o)
328 switch (o->op_type) {
329 case OP_NULL: /* Was holding old type, if any. */
330 case OP_ENTEREVAL: /* Was holding hints. */
334 if (!(o->op_flags & OPf_REF)
335 || (PL_check[o->op_type] != MEMBER_TO_FPTR(Perl_ck_ftst)))
341 if (! (o->op_type == OP_AELEMFAST && o->op_flags & OPf_SPECIAL)) {
342 /* not an OP_PADAV replacement */
344 if (cPADOPo->op_padix > 0) {
345 /* No GvIN_PAD_off(cGVOPo_gv) here, because other references
346 * may still exist on the pad */
347 pad_swipe(cPADOPo->op_padix, TRUE);
348 cPADOPo->op_padix = 0;
351 SvREFCNT_dec(cSVOPo->op_sv);
352 cSVOPo->op_sv = NULL;
356 case OP_METHOD_NAMED:
358 SvREFCNT_dec(cSVOPo->op_sv);
359 cSVOPo->op_sv = NULL;
362 Even if op_clear does a pad_free for the target of the op,
363 pad_free doesn't actually remove the sv that exists in the pad;
364 instead it lives on. This results in that it could be reused as
365 a target later on when the pad was reallocated.
368 pad_swipe(o->op_targ,1);
377 if (o->op_flags & (OPf_SPECIAL|OPf_STACKED|OPf_KIDS))
381 if (o->op_private & (OPpTRANS_FROM_UTF|OPpTRANS_TO_UTF)) {
382 SvREFCNT_dec(cSVOPo->op_sv);
383 cSVOPo->op_sv = NULL;
386 Safefree(cPVOPo->op_pv);
387 cPVOPo->op_pv = NULL;
391 op_free(cPMOPo->op_pmreplroot);
395 if (INT2PTR(PADOFFSET, cPMOPo->op_pmreplroot)) {
396 /* No GvIN_PAD_off here, because other references may still
397 * exist on the pad */
398 pad_swipe(INT2PTR(PADOFFSET, cPMOPo->op_pmreplroot), TRUE);
401 SvREFCNT_dec((SV*)cPMOPo->op_pmreplroot);
408 HV * const pmstash = PmopSTASH(cPMOPo);
409 if (pmstash && !SvIS_FREED(pmstash)) {
410 MAGIC * const mg = mg_find((SV*)pmstash, PERL_MAGIC_symtab);
412 PMOP *pmop = (PMOP*) mg->mg_obj;
413 PMOP *lastpmop = NULL;
415 if (cPMOPo == pmop) {
417 lastpmop->op_pmnext = pmop->op_pmnext;
419 mg->mg_obj = (SV*) pmop->op_pmnext;
423 pmop = pmop->op_pmnext;
427 PmopSTASH_free(cPMOPo);
429 cPMOPo->op_pmreplroot = Nullop;
430 /* we use the "SAFE" version of the PM_ macros here
431 * since sv_clean_all might release some PMOPs
432 * after PL_regex_padav has been cleared
433 * and the clearing of PL_regex_padav needs to
434 * happen before sv_clean_all
436 ReREFCNT_dec(PM_GETRE_SAFE(cPMOPo));
437 PM_SETRE_SAFE(cPMOPo, (REGEXP*)NULL);
439 if(PL_regex_pad) { /* We could be in destruction */
440 av_push((AV*) PL_regex_pad[0],(SV*) PL_regex_pad[(cPMOPo)->op_pmoffset]);
441 SvREPADTMP_on(PL_regex_pad[(cPMOPo)->op_pmoffset]);
442 PM_SETRE(cPMOPo, (cPMOPo)->op_pmoffset);
449 if (o->op_targ > 0) {
450 pad_free(o->op_targ);
456 S_cop_free(pTHX_ COP* cop)
458 Safefree(cop->cop_label); /* FIXME: treaddead ??? */
461 if (! specialWARN(cop->cop_warnings))
462 SvREFCNT_dec(cop->cop_warnings);
463 if (! specialCopIO(cop->cop_io)) {
467 char *s = SvPV(cop->cop_io,len);
468 Perl_warn(aTHX_ "io='%.*s'",(int) len,s); /* ??? --jhi */
471 SvREFCNT_dec(cop->cop_io);
477 Perl_op_null(pTHX_ OP *o)
480 if (o->op_type == OP_NULL)
483 o->op_targ = o->op_type;
484 o->op_type = OP_NULL;
485 o->op_ppaddr = PL_ppaddr[OP_NULL];
489 Perl_op_refcnt_lock(pTHX)
496 Perl_op_refcnt_unlock(pTHX)
502 /* Contextualizers */
504 #define LINKLIST(o) ((o)->op_next ? (o)->op_next : linklist((OP*)o))
507 Perl_linklist(pTHX_ OP *o)
514 /* establish postfix order */
515 first = cUNOPo->op_first;
518 o->op_next = LINKLIST(first);
521 if (kid->op_sibling) {
522 kid->op_next = LINKLIST(kid->op_sibling);
523 kid = kid->op_sibling;
537 Perl_scalarkids(pTHX_ OP *o)
539 if (o && o->op_flags & OPf_KIDS) {
541 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
548 S_scalarboolean(pTHX_ OP *o)
551 if (o->op_type == OP_SASSIGN && cBINOPo->op_first->op_type == OP_CONST) {
552 if (ckWARN(WARN_SYNTAX)) {
553 const line_t oldline = CopLINE(PL_curcop);
555 if (PL_copline != NOLINE)
556 CopLINE_set(PL_curcop, PL_copline);
557 Perl_warner(aTHX_ packWARN(WARN_SYNTAX), "Found = in conditional, should be ==");
558 CopLINE_set(PL_curcop, oldline);
565 Perl_scalar(pTHX_ OP *o)
570 /* assumes no premature commitment */
571 if (!o || PL_error_count || (o->op_flags & OPf_WANT)
572 || o->op_type == OP_RETURN)
577 o->op_flags = (o->op_flags & ~OPf_WANT) | OPf_WANT_SCALAR;
579 switch (o->op_type) {
581 scalar(cBINOPo->op_first);
586 for (kid = cUNOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
590 if ((kid = cLISTOPo->op_first) && kid->op_type == OP_PUSHRE) {
591 if (!kPMOP->op_pmreplroot)
592 deprecate_old("implicit split to @_");
600 if (o->op_flags & OPf_KIDS) {
601 for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling)
607 kid = cLISTOPo->op_first;
609 while ((kid = kid->op_sibling)) {
615 WITH_THR(PL_curcop = &PL_compiling);
620 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling) {
626 WITH_THR(PL_curcop = &PL_compiling);
629 if (ckWARN(WARN_VOID))
630 Perl_warner(aTHX_ packWARN(WARN_VOID), "Useless use of sort in scalar context");
636 Perl_scalarvoid(pTHX_ OP *o)
640 const char* useless = NULL;
644 if (o->op_type == OP_NEXTSTATE
645 || o->op_type == OP_SETSTATE
646 || o->op_type == OP_DBSTATE
647 || (o->op_type == OP_NULL && (o->op_targ == OP_NEXTSTATE
648 || o->op_targ == OP_SETSTATE
649 || o->op_targ == OP_DBSTATE)))
650 PL_curcop = (COP*)o; /* for warning below */
652 /* assumes no premature commitment */
653 want = o->op_flags & OPf_WANT;
654 if ((want && want != OPf_WANT_SCALAR) || PL_error_count
655 || o->op_type == OP_RETURN)
660 if ((o->op_private & OPpTARGET_MY)
661 && (PL_opargs[o->op_type] & OA_TARGLEX))/* OPp share the meaning */
663 return scalar(o); /* As if inside SASSIGN */
666 o->op_flags = (o->op_flags & ~OPf_WANT) | OPf_WANT_VOID;
668 switch (o->op_type) {
670 if (!(PL_opargs[o->op_type] & OA_FOLDCONST))
674 if (o->op_flags & OPf_STACKED)
678 if (o->op_private == 4)
750 if (!(o->op_private & (OPpLVAL_INTRO|OPpOUR_INTRO)))
751 useless = OP_DESC(o);
755 kid = cUNOPo->op_first;
756 if (kid->op_type != OP_MATCH && kid->op_type != OP_SUBST &&
757 kid->op_type != OP_TRANS) {
760 useless = "negative pattern binding (!~)";
767 if (!(o->op_private & (OPpLVAL_INTRO|OPpOUR_INTRO)) &&
768 (!o->op_sibling || o->op_sibling->op_type != OP_READLINE))
769 useless = "a variable";
774 if (cSVOPo->op_private & OPpCONST_STRICT)
775 no_bareword_allowed(o);
777 if (ckWARN(WARN_VOID)) {
778 useless = "a constant";
779 /* don't warn on optimised away booleans, eg
780 * use constant Foo, 5; Foo || print; */
781 if (cSVOPo->op_private & OPpCONST_SHORTCIRCUIT)
783 /* the constants 0 and 1 are permitted as they are
784 conventionally used as dummies in constructs like
785 1 while some_condition_with_side_effects; */
786 else if (SvNIOK(sv) && (SvNV(sv) == 0.0 || SvNV(sv) == 1.0))
788 else if (SvPOK(sv)) {
789 /* perl4's way of mixing documentation and code
790 (before the invention of POD) was based on a
791 trick to mix nroff and perl code. The trick was
792 built upon these three nroff macros being used in
793 void context. The pink camel has the details in
794 the script wrapman near page 319. */
795 const char * const maybe_macro = SvPVX_const(sv);
796 if (strnEQ(maybe_macro, "di", 2) ||
797 strnEQ(maybe_macro, "ds", 2) ||
798 strnEQ(maybe_macro, "ig", 2))
803 op_null(o); /* don't execute or even remember it */
807 o->op_type = OP_PREINC; /* pre-increment is faster */
808 o->op_ppaddr = PL_ppaddr[OP_PREINC];
812 o->op_type = OP_PREDEC; /* pre-decrement is faster */
813 o->op_ppaddr = PL_ppaddr[OP_PREDEC];
817 o->op_type = OP_I_PREINC; /* pre-increment is faster */
818 o->op_ppaddr = PL_ppaddr[OP_I_PREINC];
822 o->op_type = OP_I_PREDEC; /* pre-decrement is faster */
823 o->op_ppaddr = PL_ppaddr[OP_I_PREDEC];
832 for (kid = cUNOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
837 if (o->op_flags & OPf_STACKED)
844 if (!(o->op_flags & OPf_KIDS))
855 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
862 /* all requires must return a boolean value */
863 o->op_flags &= ~OPf_WANT;
868 if ((kid = cLISTOPo->op_first) && kid->op_type == OP_PUSHRE) {
869 if (!kPMOP->op_pmreplroot)
870 deprecate_old("implicit split to @_");
874 if (useless && ckWARN(WARN_VOID))
875 Perl_warner(aTHX_ packWARN(WARN_VOID), "Useless use of %s in void context", useless);
880 Perl_listkids(pTHX_ OP *o)
882 if (o && o->op_flags & OPf_KIDS) {
884 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
891 Perl_list(pTHX_ OP *o)
896 /* assumes no premature commitment */
897 if (!o || (o->op_flags & OPf_WANT) || PL_error_count
898 || o->op_type == OP_RETURN)
903 if ((o->op_private & OPpTARGET_MY)
904 && (PL_opargs[o->op_type] & OA_TARGLEX))/* OPp share the meaning */
906 return o; /* As if inside SASSIGN */
909 o->op_flags = (o->op_flags & ~OPf_WANT) | OPf_WANT_LIST;
911 switch (o->op_type) {
914 list(cBINOPo->op_first);
919 for (kid = cUNOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
927 if (!(o->op_flags & OPf_KIDS))
929 if (!o->op_next && cUNOPo->op_first->op_type == OP_FLOP) {
930 list(cBINOPo->op_first);
931 return gen_constant_list(o);
938 kid = cLISTOPo->op_first;
940 while ((kid = kid->op_sibling)) {
946 WITH_THR(PL_curcop = &PL_compiling);
950 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling) {
956 WITH_THR(PL_curcop = &PL_compiling);
959 /* all requires must return a boolean value */
960 o->op_flags &= ~OPf_WANT;
967 Perl_scalarseq(pTHX_ OP *o)
971 if (o->op_type == OP_LINESEQ ||
972 o->op_type == OP_SCOPE ||
973 o->op_type == OP_LEAVE ||
974 o->op_type == OP_LEAVETRY)
977 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling) {
978 if (kid->op_sibling) {
982 PL_curcop = &PL_compiling;
984 o->op_flags &= ~OPf_PARENS;
985 if (PL_hints & HINT_BLOCK_SCOPE)
986 o->op_flags |= OPf_PARENS;
989 o = newOP(OP_STUB, 0);
994 S_modkids(pTHX_ OP *o, I32 type)
996 if (o && o->op_flags & OPf_KIDS) {
998 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
1004 /* Propagate lvalue ("modifiable") context to an op and its children.
1005 * 'type' represents the context type, roughly based on the type of op that
1006 * would do the modifying, although local() is represented by OP_NULL.
1007 * It's responsible for detecting things that can't be modified, flag
1008 * things that need to behave specially in an lvalue context (e.g., "$$x = 5"
1009 * might have to vivify a reference in $x), and so on.
1011 * For example, "$a+1 = 2" would cause mod() to be called with o being
1012 * OP_ADD and type being OP_SASSIGN, and would output an error.
1016 Perl_mod(pTHX_ OP *o, I32 type)
1020 /* -1 = error on localize, 0 = ignore localize, 1 = ok to localize */
1023 if (!o || PL_error_count)
1026 if ((o->op_private & OPpTARGET_MY)
1027 && (PL_opargs[o->op_type] & OA_TARGLEX))/* OPp share the meaning */
1032 switch (o->op_type) {
1038 if (!(o->op_private & (OPpCONST_ARYBASE)))
1041 if (PL_eval_start && PL_eval_start->op_type == OP_CONST) {
1042 PL_compiling.cop_arybase = (I32)SvIV(cSVOPx(PL_eval_start)->op_sv);
1046 SAVEI32(PL_compiling.cop_arybase);
1047 PL_compiling.cop_arybase = 0;
1049 else if (type == OP_REFGEN)
1052 Perl_croak(aTHX_ "That use of $[ is unsupported");
1055 if (o->op_flags & OPf_PARENS)
1059 if ((type == OP_UNDEF || type == OP_REFGEN) &&
1060 !(o->op_flags & OPf_STACKED)) {
1061 o->op_type = OP_RV2CV; /* entersub => rv2cv */
1062 /* The default is to set op_private to the number of children,
1063 which for a UNOP such as RV2CV is always 1. And w're using
1064 the bit for a flag in RV2CV, so we need it clear. */
1065 o->op_private &= ~1;
1066 o->op_ppaddr = PL_ppaddr[OP_RV2CV];
1067 assert(cUNOPo->op_first->op_type == OP_NULL);
1068 op_null(((LISTOP*)cUNOPo->op_first)->op_first);/* disable pushmark */
1071 else if (o->op_private & OPpENTERSUB_NOMOD)
1073 else { /* lvalue subroutine call */
1074 o->op_private |= OPpLVAL_INTRO;
1075 PL_modcount = RETURN_UNLIMITED_NUMBER;
1076 if (type == OP_GREPSTART || type == OP_ENTERSUB || type == OP_REFGEN) {
1077 /* Backward compatibility mode: */
1078 o->op_private |= OPpENTERSUB_INARGS;
1081 else { /* Compile-time error message: */
1082 OP *kid = cUNOPo->op_first;
1086 if (kid->op_type == OP_PUSHMARK)
1088 if (kid->op_type != OP_NULL || kid->op_targ != OP_LIST)
1090 "panic: unexpected lvalue entersub "
1091 "args: type/targ %ld:%"UVuf,
1092 (long)kid->op_type, (UV)kid->op_targ);
1093 kid = kLISTOP->op_first;
1095 while (kid->op_sibling)
1096 kid = kid->op_sibling;
1097 if (!(kid->op_type == OP_NULL && kid->op_targ == OP_RV2CV)) {
1099 if (kid->op_type == OP_METHOD_NAMED
1100 || kid->op_type == OP_METHOD)
1104 NewOp(1101, newop, 1, UNOP);
1105 newop->op_type = OP_RV2CV;
1106 newop->op_ppaddr = PL_ppaddr[OP_RV2CV];
1107 newop->op_first = Nullop;
1108 newop->op_next = (OP*)newop;
1109 kid->op_sibling = (OP*)newop;
1110 newop->op_private |= OPpLVAL_INTRO;
1111 newop->op_private &= ~1;
1115 if (kid->op_type != OP_RV2CV)
1117 "panic: unexpected lvalue entersub "
1118 "entry via type/targ %ld:%"UVuf,
1119 (long)kid->op_type, (UV)kid->op_targ);
1120 kid->op_private |= OPpLVAL_INTRO;
1121 break; /* Postpone until runtime */
1125 kid = kUNOP->op_first;
1126 if (kid->op_type == OP_NULL && kid->op_targ == OP_RV2SV)
1127 kid = kUNOP->op_first;
1128 if (kid->op_type == OP_NULL)
1130 "Unexpected constant lvalue entersub "
1131 "entry via type/targ %ld:%"UVuf,
1132 (long)kid->op_type, (UV)kid->op_targ);
1133 if (kid->op_type != OP_GV) {
1134 /* Restore RV2CV to check lvalueness */
1136 if (kid->op_next && kid->op_next != kid) { /* Happens? */
1137 okid->op_next = kid->op_next;
1138 kid->op_next = okid;
1141 okid->op_next = Nullop;
1142 okid->op_type = OP_RV2CV;
1144 okid->op_ppaddr = PL_ppaddr[OP_RV2CV];
1145 okid->op_private |= OPpLVAL_INTRO;
1146 okid->op_private &= ~1;
1150 cv = GvCV(kGVOP_gv);
1160 /* grep, foreach, subcalls, refgen */
1161 if (type == OP_GREPSTART || type == OP_ENTERSUB || type == OP_REFGEN)
1163 yyerror(Perl_form(aTHX_ "Can't modify %s in %s",
1164 (o->op_type == OP_NULL && (o->op_flags & OPf_SPECIAL)
1166 : (o->op_type == OP_ENTERSUB
1167 ? "non-lvalue subroutine call"
1169 type ? PL_op_desc[type] : "local"));
1183 case OP_RIGHT_SHIFT:
1192 if (!(o->op_flags & OPf_STACKED))
1199 for (kid = cUNOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
1205 if (type == OP_REFGEN && o->op_flags & OPf_PARENS) {
1206 PL_modcount = RETURN_UNLIMITED_NUMBER;
1207 return o; /* Treat \(@foo) like ordinary list. */
1211 if (scalar_mod_type(o, type))
1213 ref(cUNOPo->op_first, o->op_type);
1217 if (type == OP_LEAVESUBLV)
1218 o->op_private |= OPpMAYBE_LVSUB;
1224 PL_modcount = RETURN_UNLIMITED_NUMBER;
1227 ref(cUNOPo->op_first, o->op_type);
1232 PL_hints |= HINT_BLOCK_SCOPE;
1247 PL_modcount = RETURN_UNLIMITED_NUMBER;
1248 if (type == OP_REFGEN && o->op_flags & OPf_PARENS)
1249 return o; /* Treat \(@foo) like ordinary list. */
1250 if (scalar_mod_type(o, type))
1252 if (type == OP_LEAVESUBLV)
1253 o->op_private |= OPpMAYBE_LVSUB;
1257 if (!type) /* local() */
1258 Perl_croak(aTHX_ "Can't localize lexical variable %s",
1259 PAD_COMPNAME_PV(o->op_targ));
1267 if (type != OP_SASSIGN)
1271 if (o->op_private == 4) /* don't allow 4 arg substr as lvalue */
1276 if (type == OP_LEAVESUBLV)
1277 o->op_private |= OPpMAYBE_LVSUB;
1279 pad_free(o->op_targ);
1280 o->op_targ = pad_alloc(o->op_type, SVs_PADMY);
1281 assert(SvTYPE(PAD_SV(o->op_targ)) == SVt_NULL);
1282 if (o->op_flags & OPf_KIDS)
1283 mod(cBINOPo->op_first->op_sibling, type);
1288 ref(cBINOPo->op_first, o->op_type);
1289 if (type == OP_ENTERSUB &&
1290 !(o->op_private & (OPpLVAL_INTRO | OPpDEREF)))
1291 o->op_private |= OPpLVAL_DEFER;
1292 if (type == OP_LEAVESUBLV)
1293 o->op_private |= OPpMAYBE_LVSUB;
1303 if (o->op_flags & OPf_KIDS)
1304 mod(cLISTOPo->op_last, type);
1309 if (o->op_flags & OPf_SPECIAL) /* do BLOCK */
1311 else if (!(o->op_flags & OPf_KIDS))
1313 if (o->op_targ != OP_LIST) {
1314 mod(cBINOPo->op_first, type);
1320 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
1325 if (type != OP_LEAVESUBLV)
1327 break; /* mod()ing was handled by ck_return() */
1330 /* [20011101.069] File test operators interpret OPf_REF to mean that
1331 their argument is a filehandle; thus \stat(".") should not set
1333 if (type == OP_REFGEN &&
1334 PL_check[o->op_type] == MEMBER_TO_FPTR(Perl_ck_ftst))
1337 if (type != OP_LEAVESUBLV)
1338 o->op_flags |= OPf_MOD;
1340 if (type == OP_AASSIGN || type == OP_SASSIGN)
1341 o->op_flags |= OPf_SPECIAL|OPf_REF;
1342 else if (!type) { /* local() */
1345 o->op_private |= OPpLVAL_INTRO;
1346 o->op_flags &= ~OPf_SPECIAL;
1347 PL_hints |= HINT_BLOCK_SCOPE;
1352 if (ckWARN(WARN_SYNTAX)) {
1353 Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
1354 "Useless localization of %s", OP_DESC(o));
1358 else if (type != OP_GREPSTART && type != OP_ENTERSUB
1359 && type != OP_LEAVESUBLV)
1360 o->op_flags |= OPf_REF;
1365 S_scalar_mod_type(pTHX_ const OP *o, I32 type)
1369 if (o->op_type == OP_RV2GV)
1393 case OP_RIGHT_SHIFT:
1412 S_is_handle_constructor(pTHX_ const OP *o, I32 numargs)
1414 switch (o->op_type) {
1422 case OP_SELECT: /* XXX c.f. SelectSaver.pm */
1435 Perl_refkids(pTHX_ OP *o, I32 type)
1437 if (o && o->op_flags & OPf_KIDS) {
1439 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
1446 Perl_doref(pTHX_ OP *o, I32 type, bool set_op_ref)
1451 if (!o || PL_error_count)
1454 switch (o->op_type) {
1456 if ((type == OP_EXISTS || type == OP_DEFINED || type == OP_LOCK) &&
1457 !(o->op_flags & OPf_STACKED)) {
1458 o->op_type = OP_RV2CV; /* entersub => rv2cv */
1459 o->op_ppaddr = PL_ppaddr[OP_RV2CV];
1460 assert(cUNOPo->op_first->op_type == OP_NULL);
1461 op_null(((LISTOP*)cUNOPo->op_first)->op_first); /* disable pushmark */
1462 o->op_flags |= OPf_SPECIAL;
1463 o->op_private &= ~1;
1468 for (kid = cUNOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
1469 doref(kid, type, set_op_ref);
1472 if (type == OP_DEFINED)
1473 o->op_flags |= OPf_SPECIAL; /* don't create GV */
1474 doref(cUNOPo->op_first, o->op_type, set_op_ref);
1477 if (type == OP_RV2SV || type == OP_RV2AV || type == OP_RV2HV) {
1478 o->op_private |= (type == OP_RV2AV ? OPpDEREF_AV
1479 : type == OP_RV2HV ? OPpDEREF_HV
1481 o->op_flags |= OPf_MOD;
1486 o->op_flags |= OPf_MOD; /* XXX ??? */
1492 o->op_flags |= OPf_REF;
1495 if (type == OP_DEFINED)
1496 o->op_flags |= OPf_SPECIAL; /* don't create GV */
1497 doref(cUNOPo->op_first, o->op_type, set_op_ref);
1503 o->op_flags |= OPf_REF;
1508 if (!(o->op_flags & OPf_KIDS))
1510 doref(cBINOPo->op_first, type, set_op_ref);
1514 doref(cBINOPo->op_first, o->op_type, set_op_ref);
1515 if (type == OP_RV2SV || type == OP_RV2AV || type == OP_RV2HV) {
1516 o->op_private |= (type == OP_RV2AV ? OPpDEREF_AV
1517 : type == OP_RV2HV ? OPpDEREF_HV
1519 o->op_flags |= OPf_MOD;
1529 if (!(o->op_flags & OPf_KIDS))
1531 doref(cLISTOPo->op_last, type, set_op_ref);
1541 S_dup_attrlist(pTHX_ OP *o)
1546 /* An attrlist is either a simple OP_CONST or an OP_LIST with kids,
1547 * where the first kid is OP_PUSHMARK and the remaining ones
1548 * are OP_CONST. We need to push the OP_CONST values.
1550 if (o->op_type == OP_CONST)
1551 rop = newSVOP(OP_CONST, o->op_flags, SvREFCNT_inc(cSVOPo->op_sv));
1553 assert((o->op_type == OP_LIST) && (o->op_flags & OPf_KIDS));
1555 for (o = cLISTOPo->op_first; o; o=o->op_sibling) {
1556 if (o->op_type == OP_CONST)
1557 rop = append_elem(OP_LIST, rop,
1558 newSVOP(OP_CONST, o->op_flags,
1559 SvREFCNT_inc(cSVOPo->op_sv)));
1566 S_apply_attrs(pTHX_ HV *stash, SV *target, OP *attrs, bool for_my)
1571 /* fake up C<use attributes $pkg,$rv,@attrs> */
1572 ENTER; /* need to protect against side-effects of 'use' */
1574 stashsv = stash ? newSVhek(HvNAME_HEK(stash)) : &PL_sv_no;
1576 #define ATTRSMODULE "attributes"
1577 #define ATTRSMODULE_PM "attributes.pm"
1580 /* Don't force the C<use> if we don't need it. */
1581 SV * const * const svp = hv_fetchs(GvHVn(PL_incgv), ATTRSMODULE_PM, FALSE);
1582 if (svp && *svp != &PL_sv_undef)
1583 ; /* already in %INC */
1585 Perl_load_module(aTHX_ PERL_LOADMOD_NOIMPORT,
1586 newSVpvs(ATTRSMODULE), NULL);
1589 Perl_load_module(aTHX_ PERL_LOADMOD_IMPORT_OPS,
1590 newSVpvs(ATTRSMODULE),
1592 prepend_elem(OP_LIST,
1593 newSVOP(OP_CONST, 0, stashsv),
1594 prepend_elem(OP_LIST,
1595 newSVOP(OP_CONST, 0,
1597 dup_attrlist(attrs))));
1603 S_apply_attrs_my(pTHX_ HV *stash, OP *target, OP *attrs, OP **imopsp)
1606 OP *pack, *imop, *arg;
1612 assert(target->op_type == OP_PADSV ||
1613 target->op_type == OP_PADHV ||
1614 target->op_type == OP_PADAV);
1616 /* Ensure that attributes.pm is loaded. */
1617 apply_attrs(stash, PAD_SV(target->op_targ), attrs, TRUE);
1619 /* Need package name for method call. */
1620 pack = newSVOP(OP_CONST, 0, newSVpvs(ATTRSMODULE));
1622 /* Build up the real arg-list. */
1623 stashsv = stash ? newSVhek(HvNAME_HEK(stash)) : &PL_sv_no;
1625 arg = newOP(OP_PADSV, 0);
1626 arg->op_targ = target->op_targ;
1627 arg = prepend_elem(OP_LIST,
1628 newSVOP(OP_CONST, 0, stashsv),
1629 prepend_elem(OP_LIST,
1630 newUNOP(OP_REFGEN, 0,
1631 mod(arg, OP_REFGEN)),
1632 dup_attrlist(attrs)));
1634 /* Fake up a method call to import */
1635 meth = newSVpvs_share("import");
1636 imop = convert(OP_ENTERSUB, OPf_STACKED|OPf_SPECIAL|OPf_WANT_VOID,
1637 append_elem(OP_LIST,
1638 prepend_elem(OP_LIST, pack, list(arg)),
1639 newSVOP(OP_METHOD_NAMED, 0, meth)));
1640 imop->op_private |= OPpENTERSUB_NOMOD;
1642 /* Combine the ops. */
1643 *imopsp = append_elem(OP_LIST, *imopsp, imop);
1647 =notfor apidoc apply_attrs_string
1649 Attempts to apply a list of attributes specified by the C<attrstr> and
1650 C<len> arguments to the subroutine identified by the C<cv> argument which
1651 is expected to be associated with the package identified by the C<stashpv>
1652 argument (see L<attributes>). It gets this wrong, though, in that it
1653 does not correctly identify the boundaries of the individual attribute
1654 specifications within C<attrstr>. This is not really intended for the
1655 public API, but has to be listed here for systems such as AIX which
1656 need an explicit export list for symbols. (It's called from XS code
1657 in support of the C<ATTRS:> keyword from F<xsubpp>.) Patches to fix it
1658 to respect attribute syntax properly would be welcome.
1664 Perl_apply_attrs_string(pTHX_ const char *stashpv, CV *cv,
1665 const char *attrstr, STRLEN len)
1670 len = strlen(attrstr);
1674 for (; isSPACE(*attrstr) && len; --len, ++attrstr) ;
1676 const char * const sstr = attrstr;
1677 for (; !isSPACE(*attrstr) && len; --len, ++attrstr) ;
1678 attrs = append_elem(OP_LIST, attrs,
1679 newSVOP(OP_CONST, 0,
1680 newSVpvn(sstr, attrstr-sstr)));
1684 Perl_load_module(aTHX_ PERL_LOADMOD_IMPORT_OPS,
1685 newSVpvs(ATTRSMODULE),
1686 NULL, prepend_elem(OP_LIST,
1687 newSVOP(OP_CONST, 0, newSVpv(stashpv,0)),
1688 prepend_elem(OP_LIST,
1689 newSVOP(OP_CONST, 0,
1695 S_my_kid(pTHX_ OP *o, OP *attrs, OP **imopsp)
1700 if (!o || PL_error_count)
1704 if (type == OP_LIST) {
1706 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
1707 my_kid(kid, attrs, imopsp);
1708 } else if (type == OP_UNDEF) {
1710 } else if (type == OP_RV2SV || /* "our" declaration */
1712 type == OP_RV2HV) { /* XXX does this let anything illegal in? */
1713 if (cUNOPo->op_first->op_type != OP_GV) { /* MJD 20011224 */
1714 yyerror(Perl_form(aTHX_ "Can't declare %s in %s",
1715 OP_DESC(o), PL_in_my == KEY_our ? "our" : "my"));
1717 GV * const gv = cGVOPx_gv(cUNOPo->op_first);
1719 PL_in_my_stash = NULL;
1720 apply_attrs(GvSTASH(gv),
1721 (type == OP_RV2SV ? GvSV(gv) :
1722 type == OP_RV2AV ? (SV*)GvAV(gv) :
1723 type == OP_RV2HV ? (SV*)GvHV(gv) : (SV*)gv),
1726 o->op_private |= OPpOUR_INTRO;
1729 else if (type != OP_PADSV &&
1732 type != OP_PUSHMARK)
1734 yyerror(Perl_form(aTHX_ "Can't declare %s in \"%s\"",
1736 PL_in_my == KEY_our ? "our" : "my"));
1739 else if (attrs && type != OP_PUSHMARK) {
1743 PL_in_my_stash = NULL;
1745 /* check for C<my Dog $spot> when deciding package */
1746 stash = PAD_COMPNAME_TYPE(o->op_targ);
1748 stash = PL_curstash;
1749 apply_attrs_my(stash, o, attrs, imopsp);
1751 o->op_flags |= OPf_MOD;
1752 o->op_private |= OPpLVAL_INTRO;
1757 Perl_my_attrs(pTHX_ OP *o, OP *attrs)
1761 int maybe_scalar = 0;
1763 /* [perl #17376]: this appears to be premature, and results in code such as
1764 C< our(%x); > executing in list mode rather than void mode */
1766 if (o->op_flags & OPf_PARENS)
1776 o = my_kid(o, attrs, &rops);
1778 if (maybe_scalar && o->op_type == OP_PADSV) {
1779 o = scalar(append_list(OP_LIST, (LISTOP*)rops, (LISTOP*)o));
1780 o->op_private |= OPpLVAL_INTRO;
1783 o = append_list(OP_LIST, (LISTOP*)o, (LISTOP*)rops);
1786 PL_in_my_stash = NULL;
1791 Perl_my(pTHX_ OP *o)
1793 return my_attrs(o, Nullop);
1797 Perl_sawparens(pTHX_ OP *o)
1800 o->op_flags |= OPf_PARENS;
1805 Perl_bind_match(pTHX_ I32 type, OP *left, OP *right)
1810 if ( (left->op_type == OP_RV2AV ||
1811 left->op_type == OP_RV2HV ||
1812 left->op_type == OP_PADAV ||
1813 left->op_type == OP_PADHV)
1814 && ckWARN(WARN_MISC))
1816 const char * const desc = PL_op_desc[(right->op_type == OP_SUBST ||
1817 right->op_type == OP_TRANS)
1818 ? right->op_type : OP_MATCH];
1819 const char * const sample = ((left->op_type == OP_RV2AV ||
1820 left->op_type == OP_PADAV)
1821 ? "@array" : "%hash");
1822 Perl_warner(aTHX_ packWARN(WARN_MISC),
1823 "Applying %s to %s will act on scalar(%s)",
1824 desc, sample, sample);
1827 if (right->op_type == OP_CONST &&
1828 cSVOPx(right)->op_private & OPpCONST_BARE &&
1829 cSVOPx(right)->op_private & OPpCONST_STRICT)
1831 no_bareword_allowed(right);
1834 ismatchop = right->op_type == OP_MATCH ||
1835 right->op_type == OP_SUBST ||
1836 right->op_type == OP_TRANS;
1837 if (ismatchop && right->op_private & OPpTARGET_MY) {
1839 right->op_private &= ~OPpTARGET_MY;
1841 if (!(right->op_flags & OPf_STACKED) && ismatchop) {
1842 right->op_flags |= OPf_STACKED;
1843 if (right->op_type != OP_MATCH &&
1844 ! (right->op_type == OP_TRANS &&
1845 right->op_private & OPpTRANS_IDENTICAL))
1846 left = mod(left, right->op_type);
1847 if (right->op_type == OP_TRANS)
1848 o = newBINOP(OP_NULL, OPf_STACKED, scalar(left), right);
1850 o = prepend_elem(right->op_type, scalar(left), right);
1852 return newUNOP(OP_NOT, 0, scalar(o));
1856 return bind_match(type, left,
1857 pmruntime(newPMOP(OP_MATCH, 0), right, 0));
1861 Perl_invert(pTHX_ OP *o)
1865 /* XXX need to optimize away NOT NOT here? Or do we let optimizer do it? */
1866 return newUNOP(OP_NOT, OPf_SPECIAL, scalar(o));
1870 Perl_scope(pTHX_ OP *o)
1874 if (o->op_flags & OPf_PARENS || PERLDB_NOOPT || PL_tainting) {
1875 o = prepend_elem(OP_LINESEQ, newOP(OP_ENTER, 0), o);
1876 o->op_type = OP_LEAVE;
1877 o->op_ppaddr = PL_ppaddr[OP_LEAVE];
1879 else if (o->op_type == OP_LINESEQ) {
1881 o->op_type = OP_SCOPE;
1882 o->op_ppaddr = PL_ppaddr[OP_SCOPE];
1883 kid = ((LISTOP*)o)->op_first;
1884 if (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) {
1887 /* The following deals with things like 'do {1 for 1}' */
1888 kid = kid->op_sibling;
1890 (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE))
1895 o = newLISTOP(OP_SCOPE, 0, o, Nullop);
1901 Perl_block_start(pTHX_ int full)
1904 const int retval = PL_savestack_ix;
1905 pad_block_start(full);
1907 PL_hints &= ~HINT_BLOCK_SCOPE;
1908 SAVESPTR(PL_compiling.cop_warnings);
1909 if (! specialWARN(PL_compiling.cop_warnings)) {
1910 PL_compiling.cop_warnings = newSVsv(PL_compiling.cop_warnings) ;
1911 SAVEFREESV(PL_compiling.cop_warnings) ;
1913 SAVESPTR(PL_compiling.cop_io);
1914 if (! specialCopIO(PL_compiling.cop_io)) {
1915 PL_compiling.cop_io = newSVsv(PL_compiling.cop_io) ;
1916 SAVEFREESV(PL_compiling.cop_io) ;
1922 Perl_block_end(pTHX_ I32 floor, OP *seq)
1925 const int needblockscope = PL_hints & HINT_BLOCK_SCOPE;
1926 OP* const retval = scalarseq(seq);
1928 PL_compiling.op_private = (U8)(PL_hints & HINT_PRIVATE_MASK);
1930 PL_hints |= HINT_BLOCK_SCOPE; /* propagate out */
1939 const I32 offset = pad_findmy("$_");
1940 if (offset == NOT_IN_PAD || PAD_COMPNAME_FLAGS(offset) & SVpad_OUR) {
1941 return newSVREF(newGVOP(OP_GV, 0, PL_defgv));
1944 OP * const o = newOP(OP_PADSV, 0);
1945 o->op_targ = offset;
1951 Perl_newPROG(pTHX_ OP *o)
1957 PL_eval_root = newUNOP(OP_LEAVEEVAL,
1958 ((PL_in_eval & EVAL_KEEPERR)
1959 ? OPf_SPECIAL : 0), o);
1960 PL_eval_start = linklist(PL_eval_root);
1961 PL_eval_root->op_private |= OPpREFCOUNTED;
1962 OpREFCNT_set(PL_eval_root, 1);
1963 PL_eval_root->op_next = 0;
1964 CALL_PEEP(PL_eval_start);
1967 if (o->op_type == OP_STUB) {
1968 PL_comppad_name = 0;
1973 PL_main_root = scope(sawparens(scalarvoid(o)));
1974 PL_curcop = &PL_compiling;
1975 PL_main_start = LINKLIST(PL_main_root);
1976 PL_main_root->op_private |= OPpREFCOUNTED;
1977 OpREFCNT_set(PL_main_root, 1);
1978 PL_main_root->op_next = 0;
1979 CALL_PEEP(PL_main_start);
1982 /* Register with debugger */
1984 CV * const cv = get_cv("DB::postponed", FALSE);
1988 XPUSHs((SV*)CopFILEGV(&PL_compiling));
1990 call_sv((SV*)cv, G_DISCARD);
1997 Perl_localize(pTHX_ OP *o, I32 lex)
2000 if (o->op_flags & OPf_PARENS)
2001 /* [perl #17376]: this appears to be premature, and results in code such as
2002 C< our(%x); > executing in list mode rather than void mode */
2009 if ( PL_bufptr > PL_oldbufptr && PL_bufptr[-1] == ','
2010 && ckWARN(WARN_PARENTHESIS))
2012 char *s = PL_bufptr;
2015 /* some heuristics to detect a potential error */
2016 while (*s && (strchr(", \t\n", *s)))
2020 if (*s && strchr("@$%*", *s) && *++s
2021 && (isALNUM(*s) || UTF8_IS_CONTINUED(*s))) {
2024 while (*s && (isALNUM(*s) || UTF8_IS_CONTINUED(*s)))
2026 while (*s && (strchr(", \t\n", *s)))
2032 if (sigil && (*s == ';' || *s == '=')) {
2033 Perl_warner(aTHX_ packWARN(WARN_PARENTHESIS),
2034 "Parentheses missing around \"%s\" list",
2035 lex ? (PL_in_my == KEY_our ? "our" : "my")
2043 o = mod(o, OP_NULL); /* a bit kludgey */
2045 PL_in_my_stash = NULL;
2050 Perl_jmaybe(pTHX_ OP *o)
2052 if (o->op_type == OP_LIST) {
2054 = newSVREF(newGVOP(OP_GV, 0, gv_fetchpvs(";", GV_ADD|GV_NOTQUAL,
2056 o = convert(OP_JOIN, 0, prepend_elem(OP_LIST, o2, o));
2062 Perl_fold_constants(pTHX_ register OP *o)
2066 I32 type = o->op_type;
2069 if (PL_opargs[type] & OA_RETSCALAR)
2071 if (PL_opargs[type] & OA_TARGET && !o->op_targ)
2072 o->op_targ = pad_alloc(type, SVs_PADTMP);
2074 /* integerize op, unless it happens to be C<-foo>.
2075 * XXX should pp_i_negate() do magic string negation instead? */
2076 if ((PL_opargs[type] & OA_OTHERINT) && (PL_hints & HINT_INTEGER)
2077 && !(type == OP_NEGATE && cUNOPo->op_first->op_type == OP_CONST
2078 && (cUNOPo->op_first->op_private & OPpCONST_BARE)))
2080 o->op_ppaddr = PL_ppaddr[type = ++(o->op_type)];
2083 if (!(PL_opargs[type] & OA_FOLDCONST))
2088 /* XXX might want a ck_negate() for this */
2089 cUNOPo->op_first->op_private &= ~OPpCONST_STRICT;
2100 /* XXX what about the numeric ops? */
2101 if (PL_hints & HINT_LOCALE)
2106 goto nope; /* Don't try to run w/ errors */
2108 for (curop = LINKLIST(o); curop != o; curop = LINKLIST(curop)) {
2109 if ((curop->op_type != OP_CONST ||
2110 (curop->op_private & OPpCONST_BARE)) &&
2111 curop->op_type != OP_LIST &&
2112 curop->op_type != OP_SCALAR &&
2113 curop->op_type != OP_NULL &&
2114 curop->op_type != OP_PUSHMARK)
2120 curop = LINKLIST(o);
2124 sv = *(PL_stack_sp--);
2125 if (o->op_targ && sv == PAD_SV(o->op_targ)) /* grab pad temp? */
2126 pad_swipe(o->op_targ, FALSE);
2127 else if (SvTEMP(sv)) { /* grab mortal temp? */
2128 (void)SvREFCNT_inc(sv);
2132 if (type == OP_RV2GV)
2133 return newGVOP(OP_GV, 0, (GV*)sv);
2134 return newSVOP(OP_CONST, 0, sv);
2141 Perl_gen_constant_list(pTHX_ register OP *o)
2145 const I32 oldtmps_floor = PL_tmps_floor;
2149 return o; /* Don't attempt to run with errors */
2151 PL_op = curop = LINKLIST(o);
2158 PL_tmps_floor = oldtmps_floor;
2160 o->op_type = OP_RV2AV;
2161 o->op_ppaddr = PL_ppaddr[OP_RV2AV];
2162 o->op_flags &= ~OPf_REF; /* treat \(1..2) like an ordinary list */
2163 o->op_flags |= OPf_PARENS; /* and flatten \(1..2,3) */
2164 o->op_opt = 0; /* needs to be revisited in peep() */
2165 curop = ((UNOP*)o)->op_first;
2166 ((UNOP*)o)->op_first = newSVOP(OP_CONST, 0, SvREFCNT_inc(*PL_stack_sp--));
2173 Perl_convert(pTHX_ I32 type, I32 flags, OP *o)
2176 if (!o || o->op_type != OP_LIST)
2177 o = newLISTOP(OP_LIST, 0, o, Nullop);
2179 o->op_flags &= ~OPf_WANT;
2181 if (!(PL_opargs[type] & OA_MARK))
2182 op_null(cLISTOPo->op_first);
2184 o->op_type = (OPCODE)type;
2185 o->op_ppaddr = PL_ppaddr[type];
2186 o->op_flags |= flags;
2188 o = CHECKOP(type, o);
2189 if (o->op_type != (unsigned)type)
2192 return fold_constants(o);
2195 /* List constructors */
2198 Perl_append_elem(pTHX_ I32 type, OP *first, OP *last)
2206 if (first->op_type != (unsigned)type
2207 || (type == OP_LIST && (first->op_flags & OPf_PARENS)))
2209 return newLISTOP(type, 0, first, last);
2212 if (first->op_flags & OPf_KIDS)
2213 ((LISTOP*)first)->op_last->op_sibling = last;
2215 first->op_flags |= OPf_KIDS;
2216 ((LISTOP*)first)->op_first = last;
2218 ((LISTOP*)first)->op_last = last;
2223 Perl_append_list(pTHX_ I32 type, LISTOP *first, LISTOP *last)
2231 if (first->op_type != (unsigned)type)
2232 return prepend_elem(type, (OP*)first, (OP*)last);
2234 if (last->op_type != (unsigned)type)
2235 return append_elem(type, (OP*)first, (OP*)last);
2237 first->op_last->op_sibling = last->op_first;
2238 first->op_last = last->op_last;
2239 first->op_flags |= (last->op_flags & OPf_KIDS);
2247 Perl_prepend_elem(pTHX_ I32 type, OP *first, OP *last)
2255 if (last->op_type == (unsigned)type) {
2256 if (type == OP_LIST) { /* already a PUSHMARK there */
2257 first->op_sibling = ((LISTOP*)last)->op_first->op_sibling;
2258 ((LISTOP*)last)->op_first->op_sibling = first;
2259 if (!(first->op_flags & OPf_PARENS))
2260 last->op_flags &= ~OPf_PARENS;
2263 if (!(last->op_flags & OPf_KIDS)) {
2264 ((LISTOP*)last)->op_last = first;
2265 last->op_flags |= OPf_KIDS;
2267 first->op_sibling = ((LISTOP*)last)->op_first;
2268 ((LISTOP*)last)->op_first = first;
2270 last->op_flags |= OPf_KIDS;
2274 return newLISTOP(type, 0, first, last);
2280 Perl_newNULLLIST(pTHX)
2282 return newOP(OP_STUB, 0);
2286 Perl_force_list(pTHX_ OP *o)
2288 if (!o || o->op_type != OP_LIST)
2289 o = newLISTOP(OP_LIST, 0, o, Nullop);
2295 Perl_newLISTOP(pTHX_ I32 type, I32 flags, OP *first, OP *last)
2300 NewOp(1101, listop, 1, LISTOP);
2302 listop->op_type = (OPCODE)type;
2303 listop->op_ppaddr = PL_ppaddr[type];
2306 listop->op_flags = (U8)flags;
2310 else if (!first && last)
2313 first->op_sibling = last;
2314 listop->op_first = first;
2315 listop->op_last = last;
2316 if (type == OP_LIST) {
2317 OP* const pushop = newOP(OP_PUSHMARK, 0);
2318 pushop->op_sibling = first;
2319 listop->op_first = pushop;
2320 listop->op_flags |= OPf_KIDS;
2322 listop->op_last = pushop;
2325 return CHECKOP(type, listop);
2329 Perl_newOP(pTHX_ I32 type, I32 flags)
2333 NewOp(1101, o, 1, OP);
2334 o->op_type = (OPCODE)type;
2335 o->op_ppaddr = PL_ppaddr[type];
2336 o->op_flags = (U8)flags;
2339 o->op_private = (U8)(0 | (flags >> 8));
2340 if (PL_opargs[type] & OA_RETSCALAR)
2342 if (PL_opargs[type] & OA_TARGET)
2343 o->op_targ = pad_alloc(type, SVs_PADTMP);
2344 return CHECKOP(type, o);
2348 Perl_newUNOP(pTHX_ I32 type, I32 flags, OP *first)
2354 first = newOP(OP_STUB, 0);
2355 if (PL_opargs[type] & OA_MARK)
2356 first = force_list(first);
2358 NewOp(1101, unop, 1, UNOP);
2359 unop->op_type = (OPCODE)type;
2360 unop->op_ppaddr = PL_ppaddr[type];
2361 unop->op_first = first;
2362 unop->op_flags = (U8)(flags | OPf_KIDS);
2363 unop->op_private = (U8)(1 | (flags >> 8));
2364 unop = (UNOP*) CHECKOP(type, unop);
2368 return fold_constants((OP *) unop);
2372 Perl_newBINOP(pTHX_ I32 type, I32 flags, OP *first, OP *last)
2376 NewOp(1101, binop, 1, BINOP);
2379 first = newOP(OP_NULL, 0);
2381 binop->op_type = (OPCODE)type;
2382 binop->op_ppaddr = PL_ppaddr[type];
2383 binop->op_first = first;
2384 binop->op_flags = (U8)(flags | OPf_KIDS);
2387 binop->op_private = (U8)(1 | (flags >> 8));
2390 binop->op_private = (U8)(2 | (flags >> 8));
2391 first->op_sibling = last;
2394 binop = (BINOP*)CHECKOP(type, binop);
2395 if (binop->op_next || binop->op_type != (OPCODE)type)
2398 binop->op_last = binop->op_first->op_sibling;
2400 return fold_constants((OP *)binop);
2403 static int uvcompare(const void *a, const void *b) __attribute__nonnull__(1) __attribute__nonnull__(2) __attribute__pure__;
2404 static int uvcompare(const void *a, const void *b)
2406 if (*((const UV *)a) < (*(const UV *)b))
2408 if (*((const UV *)a) > (*(const UV *)b))
2410 if (*((const UV *)a+1) < (*(const UV *)b+1))
2412 if (*((const UV *)a+1) > (*(const UV *)b+1))
2418 Perl_pmtrans(pTHX_ OP *o, OP *expr, OP *repl)
2421 SV * const tstr = ((SVOP*)expr)->op_sv;
2422 SV * const rstr = ((SVOP*)repl)->op_sv;
2425 const U8 *t = (U8*)SvPV_const(tstr, tlen);
2426 const U8 *r = (U8*)SvPV_const(rstr, rlen);
2430 register short *tbl;
2432 const I32 complement = o->op_private & OPpTRANS_COMPLEMENT;
2433 const I32 squash = o->op_private & OPpTRANS_SQUASH;
2434 I32 del = o->op_private & OPpTRANS_DELETE;
2435 PL_hints |= HINT_BLOCK_SCOPE;
2438 o->op_private |= OPpTRANS_FROM_UTF;
2441 o->op_private |= OPpTRANS_TO_UTF;
2443 if (o->op_private & (OPpTRANS_FROM_UTF|OPpTRANS_TO_UTF)) {
2444 SV* const listsv = newSVpvs("# comment\n");
2446 const U8* tend = t + tlen;
2447 const U8* rend = r + rlen;
2461 const I32 from_utf = o->op_private & OPpTRANS_FROM_UTF;
2462 const I32 to_utf = o->op_private & OPpTRANS_TO_UTF;
2468 t = tsave = bytes_to_utf8(t, &len);
2471 if (!to_utf && rlen) {
2473 r = rsave = bytes_to_utf8(r, &len);
2477 /* There are several snags with this code on EBCDIC:
2478 1. 0xFF is a legal UTF-EBCDIC byte (there are no illegal bytes).
2479 2. scan_const() in toke.c has encoded chars in native encoding which makes
2480 ranges at least in EBCDIC 0..255 range the bottom odd.
2484 U8 tmpbuf[UTF8_MAXBYTES+1];
2487 Newx(cp, 2*tlen, UV);
2489 transv = newSVpvs("");
2491 cp[2*i] = utf8n_to_uvuni(t, tend-t, &ulen, 0);
2493 if (t < tend && NATIVE_TO_UTF(*t) == 0xff) {
2495 cp[2*i+1] = utf8n_to_uvuni(t, tend-t, &ulen, 0);
2499 cp[2*i+1] = cp[2*i];
2503 qsort(cp, i, 2*sizeof(UV), uvcompare);
2504 for (j = 0; j < i; j++) {
2506 diff = val - nextmin;
2508 t = uvuni_to_utf8(tmpbuf,nextmin);
2509 sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf);
2511 U8 range_mark = UTF_TO_NATIVE(0xff);
2512 t = uvuni_to_utf8(tmpbuf, val - 1);
2513 sv_catpvn(transv, (char *)&range_mark, 1);
2514 sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf);
2521 t = uvuni_to_utf8(tmpbuf,nextmin);
2522 sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf);
2524 U8 range_mark = UTF_TO_NATIVE(0xff);
2525 sv_catpvn(transv, (char *)&range_mark, 1);
2527 t = uvuni_to_utf8_flags(tmpbuf, 0x7fffffff,
2528 UNICODE_ALLOW_SUPER);
2529 sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf);
2530 t = (const U8*)SvPVX_const(transv);
2531 tlen = SvCUR(transv);
2535 else if (!rlen && !del) {
2536 r = t; rlen = tlen; rend = tend;
2539 if ((!rlen && !del) || t == r ||
2540 (tlen == rlen && memEQ((char *)t, (char *)r, tlen)))
2542 o->op_private |= OPpTRANS_IDENTICAL;
2546 while (t < tend || tfirst <= tlast) {
2547 /* see if we need more "t" chars */
2548 if (tfirst > tlast) {
2549 tfirst = (I32)utf8n_to_uvuni(t, tend - t, &ulen, 0);
2551 if (t < tend && NATIVE_TO_UTF(*t) == 0xff) { /* illegal utf8 val indicates range */
2553 tlast = (I32)utf8n_to_uvuni(t, tend - t, &ulen, 0);
2560 /* now see if we need more "r" chars */
2561 if (rfirst > rlast) {
2563 rfirst = (I32)utf8n_to_uvuni(r, rend - r, &ulen, 0);
2565 if (r < rend && NATIVE_TO_UTF(*r) == 0xff) { /* illegal utf8 val indicates range */
2567 rlast = (I32)utf8n_to_uvuni(r, rend - r, &ulen, 0);
2576 rfirst = rlast = 0xffffffff;
2580 /* now see which range will peter our first, if either. */
2581 tdiff = tlast - tfirst;
2582 rdiff = rlast - rfirst;
2589 if (rfirst == 0xffffffff) {
2590 diff = tdiff; /* oops, pretend rdiff is infinite */
2592 Perl_sv_catpvf(aTHX_ listsv, "%04lx\t%04lx\tXXXX\n",
2593 (long)tfirst, (long)tlast);
2595 Perl_sv_catpvf(aTHX_ listsv, "%04lx\t\tXXXX\n", (long)tfirst);
2599 Perl_sv_catpvf(aTHX_ listsv, "%04lx\t%04lx\t%04lx\n",
2600 (long)tfirst, (long)(tfirst + diff),
2603 Perl_sv_catpvf(aTHX_ listsv, "%04lx\t\t%04lx\n",
2604 (long)tfirst, (long)rfirst);
2606 if (rfirst + diff > max)
2607 max = rfirst + diff;
2609 grows = (tfirst < rfirst &&
2610 UNISKIP(tfirst) < UNISKIP(rfirst + diff));
2622 else if (max > 0xff)
2627 Safefree(cPVOPo->op_pv);
2628 cSVOPo->op_sv = (SV*)swash_init("utf8", "", listsv, bits, none);
2629 SvREFCNT_dec(listsv);
2631 SvREFCNT_dec(transv);
2633 if (!del && havefinal && rlen)
2634 (void)hv_store((HV*)SvRV((cSVOPo->op_sv)), "FINAL", 5,
2635 newSVuv((UV)final), 0);
2638 o->op_private |= OPpTRANS_GROWS;
2650 tbl = (short*)cPVOPo->op_pv;
2652 Zero(tbl, 256, short);
2653 for (i = 0; i < (I32)tlen; i++)
2655 for (i = 0, j = 0; i < 256; i++) {
2657 if (j >= (I32)rlen) {
2666 if (i < 128 && r[j] >= 128)
2676 o->op_private |= OPpTRANS_IDENTICAL;
2678 else if (j >= (I32)rlen)
2681 cPVOPo->op_pv = (char*)Renew(tbl, 0x101+rlen-j, short);
2682 tbl[0x100] = (short)(rlen - j);
2683 for (i=0; i < (I32)rlen - j; i++)
2684 tbl[0x101+i] = r[j+i];
2688 if (!rlen && !del) {
2691 o->op_private |= OPpTRANS_IDENTICAL;
2693 else if (!squash && rlen == tlen && memEQ((char*)t, (char*)r, tlen)) {
2694 o->op_private |= OPpTRANS_IDENTICAL;
2696 for (i = 0; i < 256; i++)
2698 for (i = 0, j = 0; i < (I32)tlen; i++,j++) {
2699 if (j >= (I32)rlen) {
2701 if (tbl[t[i]] == -1)
2707 if (tbl[t[i]] == -1) {
2708 if (t[i] < 128 && r[j] >= 128)
2715 o->op_private |= OPpTRANS_GROWS;
2723 Perl_newPMOP(pTHX_ I32 type, I32 flags)
2728 NewOp(1101, pmop, 1, PMOP);
2729 pmop->op_type = (OPCODE)type;
2730 pmop->op_ppaddr = PL_ppaddr[type];
2731 pmop->op_flags = (U8)flags;
2732 pmop->op_private = (U8)(0 | (flags >> 8));
2734 if (PL_hints & HINT_RE_TAINT)
2735 pmop->op_pmpermflags |= PMf_RETAINT;
2736 if (PL_hints & HINT_LOCALE)
2737 pmop->op_pmpermflags |= PMf_LOCALE;
2738 pmop->op_pmflags = pmop->op_pmpermflags;
2741 if (av_len((AV*) PL_regex_pad[0]) > -1) {
2742 SV * const repointer = av_pop((AV*)PL_regex_pad[0]);
2743 pmop->op_pmoffset = SvIV(repointer);
2744 SvREPADTMP_off(repointer);
2745 sv_setiv(repointer,0);
2747 SV * const repointer = newSViv(0);
2748 av_push(PL_regex_padav,SvREFCNT_inc(repointer));
2749 pmop->op_pmoffset = av_len(PL_regex_padav);
2750 PL_regex_pad = AvARRAY(PL_regex_padav);
2754 /* link into pm list */
2755 if (type != OP_TRANS && PL_curstash) {
2756 MAGIC *mg = mg_find((SV*)PL_curstash, PERL_MAGIC_symtab);
2759 mg = sv_magicext((SV*)PL_curstash, 0, PERL_MAGIC_symtab, 0, 0, 0);
2761 pmop->op_pmnext = (PMOP*)mg->mg_obj;
2762 mg->mg_obj = (SV*)pmop;
2763 PmopSTASH_set(pmop,PL_curstash);
2766 return CHECKOP(type, pmop);
2769 /* Given some sort of match op o, and an expression expr containing a
2770 * pattern, either compile expr into a regex and attach it to o (if it's
2771 * constant), or convert expr into a runtime regcomp op sequence (if it's
2774 * isreg indicates that the pattern is part of a regex construct, eg
2775 * $x =~ /pattern/ or split /pattern/, as opposed to $x =~ $pattern or
2776 * split "pattern", which aren't. In the former case, expr will be a list
2777 * if the pattern contains more than one term (eg /a$b/) or if it contains
2778 * a replacement, ie s/// or tr///.
2782 Perl_pmruntime(pTHX_ OP *o, OP *expr, bool isreg)
2787 I32 repl_has_vars = 0;
2791 if (o->op_type == OP_SUBST || o->op_type == OP_TRANS) {
2792 /* last element in list is the replacement; pop it */
2794 repl = cLISTOPx(expr)->op_last;
2795 kid = cLISTOPx(expr)->op_first;
2796 while (kid->op_sibling != repl)
2797 kid = kid->op_sibling;
2798 kid->op_sibling = Nullop;
2799 cLISTOPx(expr)->op_last = kid;
2802 if (isreg && expr->op_type == OP_LIST &&
2803 cLISTOPx(expr)->op_first->op_sibling == cLISTOPx(expr)->op_last)
2805 /* convert single element list to element */
2806 OP* const oe = expr;
2807 expr = cLISTOPx(oe)->op_first->op_sibling;
2808 cLISTOPx(oe)->op_first->op_sibling = Nullop;
2809 cLISTOPx(oe)->op_last = Nullop;
2813 if (o->op_type == OP_TRANS) {
2814 return pmtrans(o, expr, repl);
2817 reglist = isreg && expr->op_type == OP_LIST;
2821 PL_hints |= HINT_BLOCK_SCOPE;
2824 if (expr->op_type == OP_CONST) {
2826 SV * const pat = ((SVOP*)expr)->op_sv;
2827 const char *p = SvPV_const(pat, plen);
2828 if ((o->op_flags & OPf_SPECIAL) && (*p == ' ' && p[1] == '\0')) {
2829 U32 was_readonly = SvREADONLY(pat);
2833 sv_force_normal_flags(pat, 0);
2834 assert(!SvREADONLY(pat));
2837 SvREADONLY_off(pat);
2841 sv_setpvn(pat, "\\s+", 3);
2843 SvFLAGS(pat) |= was_readonly;
2845 p = SvPV_const(pat, plen);
2846 pm->op_pmflags |= PMf_SKIPWHITE;
2849 pm->op_pmdynflags |= PMdf_UTF8;
2850 /* FIXME - can we make this function take const char * args? */
2851 PM_SETRE(pm, CALLREGCOMP(aTHX_ (char*)p, (char*)p + plen, pm));
2852 if (strEQ("\\s+", PM_GETRE(pm)->precomp))
2853 pm->op_pmflags |= PMf_WHITE;
2857 if (pm->op_pmflags & PMf_KEEP || !(PL_hints & HINT_RE_EVAL))
2858 expr = newUNOP((!(PL_hints & HINT_RE_EVAL)
2860 : OP_REGCMAYBE),0,expr);
2862 NewOp(1101, rcop, 1, LOGOP);
2863 rcop->op_type = OP_REGCOMP;
2864 rcop->op_ppaddr = PL_ppaddr[OP_REGCOMP];
2865 rcop->op_first = scalar(expr);
2866 rcop->op_flags |= OPf_KIDS
2867 | ((PL_hints & HINT_RE_EVAL) ? OPf_SPECIAL : 0)
2868 | (reglist ? OPf_STACKED : 0);
2869 rcop->op_private = 1;
2872 rcop->op_targ = pad_alloc(rcop->op_type, SVs_PADTMP);
2874 /* /$x/ may cause an eval, since $x might be qr/(?{..})/ */
2877 /* establish postfix order */
2878 if (pm->op_pmflags & PMf_KEEP || !(PL_hints & HINT_RE_EVAL)) {
2880 rcop->op_next = expr;
2881 ((UNOP*)expr)->op_first->op_next = (OP*)rcop;
2884 rcop->op_next = LINKLIST(expr);
2885 expr->op_next = (OP*)rcop;
2888 prepend_elem(o->op_type, scalar((OP*)rcop), o);
2893 if (pm->op_pmflags & PMf_EVAL) {
2895 if (CopLINE(PL_curcop) < (line_t)PL_multi_end)
2896 CopLINE_set(PL_curcop, (line_t)PL_multi_end);
2898 else if (repl->op_type == OP_CONST)
2902 for (curop = LINKLIST(repl); curop!=repl; curop = LINKLIST(curop)) {
2903 if (PL_opargs[curop->op_type] & OA_DANGEROUS) {
2904 if (curop->op_type == OP_GV) {
2905 GV * const gv = cGVOPx_gv(curop);
2907 if (strchr("&`'123456789+-\016\022", *GvENAME(gv)))
2910 else if (curop->op_type == OP_RV2CV)
2912 else if (curop->op_type == OP_RV2SV ||
2913 curop->op_type == OP_RV2AV ||
2914 curop->op_type == OP_RV2HV ||
2915 curop->op_type == OP_RV2GV) {
2916 if (lastop && lastop->op_type != OP_GV) /*funny deref?*/
2919 else if (curop->op_type == OP_PADSV ||
2920 curop->op_type == OP_PADAV ||
2921 curop->op_type == OP_PADHV ||
2922 curop->op_type == OP_PADANY) {
2925 else if (curop->op_type == OP_PUSHRE)
2926 ; /* Okay here, dangerous in newASSIGNOP */
2936 || PM_GETRE(pm)->reganch & ROPT_EVAL_SEEN))) {
2937 pm->op_pmflags |= PMf_CONST; /* const for long enough */
2938 pm->op_pmpermflags |= PMf_CONST; /* const for long enough */
2939 prepend_elem(o->op_type, scalar(repl), o);
2942 if (curop == repl && !PM_GETRE(pm)) { /* Has variables. */
2943 pm->op_pmflags |= PMf_MAYBE_CONST;
2944 pm->op_pmpermflags |= PMf_MAYBE_CONST;
2946 NewOp(1101, rcop, 1, LOGOP);
2947 rcop->op_type = OP_SUBSTCONT;
2948 rcop->op_ppaddr = PL_ppaddr[OP_SUBSTCONT];
2949 rcop->op_first = scalar(repl);
2950 rcop->op_flags |= OPf_KIDS;
2951 rcop->op_private = 1;
2954 /* establish postfix order */
2955 rcop->op_next = LINKLIST(repl);
2956 repl->op_next = (OP*)rcop;
2958 pm->op_pmreplroot = scalar((OP*)rcop);
2959 pm->op_pmreplstart = LINKLIST(rcop);
2968 Perl_newSVOP(pTHX_ I32 type, I32 flags, SV *sv)
2972 NewOp(1101, svop, 1, SVOP);
2973 svop->op_type = (OPCODE)type;
2974 svop->op_ppaddr = PL_ppaddr[type];
2976 svop->op_next = (OP*)svop;
2977 svop->op_flags = (U8)flags;
2978 if (PL_opargs[type] & OA_RETSCALAR)
2980 if (PL_opargs[type] & OA_TARGET)
2981 svop->op_targ = pad_alloc(type, SVs_PADTMP);
2982 return CHECKOP(type, svop);
2986 Perl_newPADOP(pTHX_ I32 type, I32 flags, SV *sv)
2990 NewOp(1101, padop, 1, PADOP);
2991 padop->op_type = (OPCODE)type;
2992 padop->op_ppaddr = PL_ppaddr[type];
2993 padop->op_padix = pad_alloc(type, SVs_PADTMP);
2994 SvREFCNT_dec(PAD_SVl(padop->op_padix));
2995 PAD_SETSV(padop->op_padix, sv);
2998 padop->op_next = (OP*)padop;
2999 padop->op_flags = (U8)flags;
3000 if (PL_opargs[type] & OA_RETSCALAR)
3002 if (PL_opargs[type] & OA_TARGET)
3003 padop->op_targ = pad_alloc(type, SVs_PADTMP);
3004 return CHECKOP(type, padop);
3008 Perl_newGVOP(pTHX_ I32 type, I32 flags, GV *gv)
3014 return newPADOP(type, flags, SvREFCNT_inc(gv));
3016 return newSVOP(type, flags, SvREFCNT_inc(gv));
3021 Perl_newPVOP(pTHX_ I32 type, I32 flags, char *pv)
3025 NewOp(1101, pvop, 1, PVOP);
3026 pvop->op_type = (OPCODE)type;
3027 pvop->op_ppaddr = PL_ppaddr[type];
3029 pvop->op_next = (OP*)pvop;
3030 pvop->op_flags = (U8)flags;
3031 if (PL_opargs[type] & OA_RETSCALAR)
3033 if (PL_opargs[type] & OA_TARGET)
3034 pvop->op_targ = pad_alloc(type, SVs_PADTMP);
3035 return CHECKOP(type, pvop);
3039 Perl_package(pTHX_ OP *o)
3045 save_hptr(&PL_curstash);
3046 save_item(PL_curstname);
3048 name = SvPV_const(cSVOPo->op_sv, len);
3049 PL_curstash = gv_stashpvn(name, len, TRUE);
3050 sv_setpvn(PL_curstname, name, len);
3053 PL_hints |= HINT_BLOCK_SCOPE;
3054 PL_copline = NOLINE;
3059 Perl_utilize(pTHX_ int aver, I32 floor, OP *version, OP *idop, OP *arg)
3066 if (idop->op_type != OP_CONST)
3067 Perl_croak(aTHX_ "Module name must be constant");
3072 SV * const vesv = ((SVOP*)version)->op_sv;
3074 if (!arg && !SvNIOKp(vesv)) {
3081 if (version->op_type != OP_CONST || !SvNIOKp(vesv))
3082 Perl_croak(aTHX_ "Version number must be constant number");
3084 /* Make copy of idop so we don't free it twice */
3085 pack = newSVOP(OP_CONST, 0, newSVsv(((SVOP*)idop)->op_sv));
3087 /* Fake up a method call to VERSION */
3088 meth = newSVpvs_share("VERSION");
3089 veop = convert(OP_ENTERSUB, OPf_STACKED|OPf_SPECIAL,
3090 append_elem(OP_LIST,
3091 prepend_elem(OP_LIST, pack, list(version)),
3092 newSVOP(OP_METHOD_NAMED, 0, meth)));
3096 /* Fake up an import/unimport */
3097 if (arg && arg->op_type == OP_STUB)
3098 imop = arg; /* no import on explicit () */
3099 else if (SvNIOKp(((SVOP*)idop)->op_sv)) {
3100 imop = Nullop; /* use 5.0; */
3102 idop->op_private |= OPpCONST_NOVER;
3107 /* Make copy of idop so we don't free it twice */
3108 pack = newSVOP(OP_CONST, 0, newSVsv(((SVOP*)idop)->op_sv));
3110 /* Fake up a method call to import/unimport */
3112 ? newSVpvs_share("import") : newSVpvs_share("unimport");
3113 imop = convert(OP_ENTERSUB, OPf_STACKED|OPf_SPECIAL,
3114 append_elem(OP_LIST,
3115 prepend_elem(OP_LIST, pack, list(arg)),
3116 newSVOP(OP_METHOD_NAMED, 0, meth)));
3119 /* Fake up the BEGIN {}, which does its thing immediately. */
3121 newSVOP(OP_CONST, 0, newSVpvs_share("BEGIN")),
3124 append_elem(OP_LINESEQ,
3125 append_elem(OP_LINESEQ,
3126 newSTATEOP(0, NULL, newUNOP(OP_REQUIRE, 0, idop)),
3127 newSTATEOP(0, NULL, veop)),
3128 newSTATEOP(0, NULL, imop) ));
3130 /* The "did you use incorrect case?" warning used to be here.
3131 * The problem is that on case-insensitive filesystems one
3132 * might get false positives for "use" (and "require"):
3133 * "use Strict" or "require CARP" will work. This causes
3134 * portability problems for the script: in case-strict
3135 * filesystems the script will stop working.
3137 * The "incorrect case" warning checked whether "use Foo"
3138 * imported "Foo" to your namespace, but that is wrong, too:
3139 * there is no requirement nor promise in the language that
3140 * a Foo.pm should or would contain anything in package "Foo".
3142 * There is very little Configure-wise that can be done, either:
3143 * the case-sensitivity of the build filesystem of Perl does not
3144 * help in guessing the case-sensitivity of the runtime environment.
3147 PL_hints |= HINT_BLOCK_SCOPE;
3148 PL_copline = NOLINE;
3150 PL_cop_seqmax++; /* Purely for B::*'s benefit */
3154 =head1 Embedding Functions
3156 =for apidoc load_module
3158 Loads the module whose name is pointed to by the string part of name.
3159 Note that the actual module name, not its filename, should be given.
3160 Eg, "Foo::Bar" instead of "Foo/Bar.pm". flags can be any of
3161 PERL_LOADMOD_DENY, PERL_LOADMOD_NOIMPORT, or PERL_LOADMOD_IMPORT_OPS
3162 (or 0 for no flags). ver, if specified, provides version semantics
3163 similar to C<use Foo::Bar VERSION>. The optional trailing SV*
3164 arguments can be used to specify arguments to the module's import()
3165 method, similar to C<use Foo::Bar VERSION LIST>.
3170 Perl_load_module(pTHX_ U32 flags, SV *name, SV *ver, ...)
3173 va_start(args, ver);
3174 vload_module(flags, name, ver, &args);
3178 #ifdef PERL_IMPLICIT_CONTEXT
3180 Perl_load_module_nocontext(U32 flags, SV *name, SV *ver, ...)
3184 va_start(args, ver);
3185 vload_module(flags, name, ver, &args);
3191 Perl_vload_module(pTHX_ U32 flags, SV *name, SV *ver, va_list *args)
3196 OP * const modname = newSVOP(OP_CONST, 0, name);
3197 modname->op_private |= OPpCONST_BARE;
3199 veop = newSVOP(OP_CONST, 0, ver);
3203 if (flags & PERL_LOADMOD_NOIMPORT) {
3204 imop = sawparens(newNULLLIST());
3206 else if (flags & PERL_LOADMOD_IMPORT_OPS) {
3207 imop = va_arg(*args, OP*);
3212 sv = va_arg(*args, SV*);
3214 imop = append_elem(OP_LIST, imop, newSVOP(OP_CONST, 0, sv));
3215 sv = va_arg(*args, SV*);
3219 const line_t ocopline = PL_copline;
3220 COP * const ocurcop = PL_curcop;
3221 const int oexpect = PL_expect;
3223 utilize(!(flags & PERL_LOADMOD_DENY), start_subparse(FALSE, 0),
3224 veop, modname, imop);
3225 PL_expect = oexpect;
3226 PL_copline = ocopline;
3227 PL_curcop = ocurcop;
3232 Perl_dofile(pTHX_ OP *term, I32 force_builtin)
3238 if (!force_builtin) {
3239 gv = gv_fetchpvs("do", GV_NOTQUAL, SVt_PVCV);
3240 if (!(gv && GvCVu(gv) && GvIMPORTED_CV(gv))) {
3241 GV * const * const gvp = (GV**)hv_fetchs(PL_globalstash, "do", FALSE);
3242 gv = gvp ? *gvp : NULL;
3246 if (gv && GvCVu(gv) && GvIMPORTED_CV(gv)) {
3247 doop = ck_subr(newUNOP(OP_ENTERSUB, OPf_STACKED,
3248 append_elem(OP_LIST, term,
3249 scalar(newUNOP(OP_RV2CV, 0,
3254 doop = newUNOP(OP_DOFILE, 0, scalar(term));
3260 Perl_newSLICEOP(pTHX_ I32 flags, OP *subscript, OP *listval)
3262 return newBINOP(OP_LSLICE, flags,
3263 list(force_list(subscript)),
3264 list(force_list(listval)) );
3268 S_is_list_assignment(pTHX_ register const OP *o)
3273 if (o->op_type == OP_NULL && o->op_flags & OPf_KIDS)
3274 o = cUNOPo->op_first;
3276 if (o->op_type == OP_COND_EXPR) {
3277 const I32 t = is_list_assignment(cLOGOPo->op_first->op_sibling);
3278 const I32 f = is_list_assignment(cLOGOPo->op_first->op_sibling->op_sibling);
3283 yyerror("Assignment to both a list and a scalar");
3287 if (o->op_type == OP_LIST &&
3288 (o->op_flags & OPf_WANT) == OPf_WANT_SCALAR &&
3289 o->op_private & OPpLVAL_INTRO)
3292 if (o->op_type == OP_LIST || o->op_flags & OPf_PARENS ||
3293 o->op_type == OP_RV2AV || o->op_type == OP_RV2HV ||
3294 o->op_type == OP_ASLICE || o->op_type == OP_HSLICE)
3297 if (o->op_type == OP_PADAV || o->op_type == OP_PADHV)
3300 if (o->op_type == OP_RV2SV)
3307 Perl_newASSIGNOP(pTHX_ I32 flags, OP *left, I32 optype, OP *right)
3313 if (optype == OP_ANDASSIGN || optype == OP_ORASSIGN || optype == OP_DORASSIGN) {
3314 return newLOGOP(optype, 0,
3315 mod(scalar(left), optype),
3316 newUNOP(OP_SASSIGN, 0, scalar(right)));
3319 return newBINOP(optype, OPf_STACKED,
3320 mod(scalar(left), optype), scalar(right));
3324 if (is_list_assignment(left)) {
3328 /* Grandfathering $[ assignment here. Bletch.*/
3329 /* Only simple assignments like C<< ($[) = 1 >> are allowed */
3330 PL_eval_start = (left->op_type == OP_CONST) ? right : 0;
3331 left = mod(left, OP_AASSIGN);
3334 else if (left->op_type == OP_CONST) {
3335 /* Result of assignment is always 1 (or we'd be dead already) */
3336 return newSVOP(OP_CONST, 0, newSViv(1));
3338 curop = list(force_list(left));
3339 o = newBINOP(OP_AASSIGN, flags, list(force_list(right)), curop);
3340 o->op_private = (U8)(0 | (flags >> 8));
3342 /* PL_generation sorcery:
3343 * an assignment like ($a,$b) = ($c,$d) is easier than
3344 * ($a,$b) = ($c,$a), since there is no need for temporary vars.
3345 * To detect whether there are common vars, the global var
3346 * PL_generation is incremented for each assign op we compile.
3347 * Then, while compiling the assign op, we run through all the
3348 * variables on both sides of the assignment, setting a spare slot
3349 * in each of them to PL_generation. If any of them already have
3350 * that value, we know we've got commonality. We could use a
3351 * single bit marker, but then we'd have to make 2 passes, first
3352 * to clear the flag, then to test and set it. To find somewhere
3353 * to store these values, evil chicanery is done with SvCUR().
3356 if (!(left->op_private & OPpLVAL_INTRO)) {
3359 for (curop = LINKLIST(o); curop != o; curop = LINKLIST(curop)) {
3360 if (PL_opargs[curop->op_type] & OA_DANGEROUS) {
3361 if (curop->op_type == OP_GV) {
3362 GV *gv = cGVOPx_gv(curop);
3363 if (gv == PL_defgv || (int)SvCUR(gv) == PL_generation)
3365 SvCUR_set(gv, PL_generation);
3367 else if (curop->op_type == OP_PADSV ||
3368 curop->op_type == OP_PADAV ||
3369 curop->op_type == OP_PADHV ||
3370 curop->op_type == OP_PADANY)
3372 if (PAD_COMPNAME_GEN(curop->op_targ)
3373 == (STRLEN)PL_generation)
3375 PAD_COMPNAME_GEN_set(curop->op_targ, PL_generation);
3378 else if (curop->op_type == OP_RV2CV)
3380 else if (curop->op_type == OP_RV2SV ||
3381 curop->op_type == OP_RV2AV ||
3382 curop->op_type == OP_RV2HV ||
3383 curop->op_type == OP_RV2GV) {
3384 if (lastop->op_type != OP_GV) /* funny deref? */
3387 else if (curop->op_type == OP_PUSHRE) {
3388 if (((PMOP*)curop)->op_pmreplroot) {
3390 GV *gv = (GV*)PAD_SVl(INT2PTR(PADOFFSET,
3391 ((PMOP*)curop)->op_pmreplroot));
3393 GV *gv = (GV*)((PMOP*)curop)->op_pmreplroot;
3395 if (gv == PL_defgv || (int)SvCUR(gv) == PL_generation)
3397 SvCUR_set(gv, PL_generation);
3406 o->op_private |= OPpASSIGN_COMMON;
3408 if (right && right->op_type == OP_SPLIT) {
3410 if ((tmpop = ((LISTOP*)right)->op_first) &&
3411 tmpop->op_type == OP_PUSHRE)
3413 PMOP * const pm = (PMOP*)tmpop;
3414 if (left->op_type == OP_RV2AV &&
3415 !(left->op_private & OPpLVAL_INTRO) &&
3416 !(o->op_private & OPpASSIGN_COMMON) )
3418 tmpop = ((UNOP*)left)->op_first;
3419 if (tmpop->op_type == OP_GV && !pm->op_pmreplroot) {
3421 pm->op_pmreplroot = INT2PTR(OP*, cPADOPx(tmpop)->op_padix);
3422 cPADOPx(tmpop)->op_padix = 0; /* steal it */
3424 pm->op_pmreplroot = (OP*)cSVOPx(tmpop)->op_sv;
3425 cSVOPx(tmpop)->op_sv = NULL; /* steal it */
3427 pm->op_pmflags |= PMf_ONCE;
3428 tmpop = cUNOPo->op_first; /* to list (nulled) */
3429 tmpop = ((UNOP*)tmpop)->op_first; /* to pushmark */
3430 tmpop->op_sibling = Nullop; /* don't free split */
3431 right->op_next = tmpop->op_next; /* fix starting loc */
3432 op_free(o); /* blow off assign */
3433 right->op_flags &= ~OPf_WANT;
3434 /* "I don't know and I don't care." */
3439 if (PL_modcount < RETURN_UNLIMITED_NUMBER &&
3440 ((LISTOP*)right)->op_last->op_type == OP_CONST)
3442 SV *sv = ((SVOP*)((LISTOP*)right)->op_last)->op_sv;
3444 sv_setiv(sv, PL_modcount+1);
3452 right = newOP(OP_UNDEF, 0);
3453 if (right->op_type == OP_READLINE) {
3454 right->op_flags |= OPf_STACKED;
3455 return newBINOP(OP_NULL, flags, mod(scalar(left), OP_SASSIGN), scalar(right));
3458 PL_eval_start = right; /* Grandfathering $[ assignment here. Bletch.*/
3459 o = newBINOP(OP_SASSIGN, flags,
3460 scalar(right), mod(scalar(left), OP_SASSIGN) );
3464 o = newSVOP(OP_CONST, 0, newSViv(PL_compiling.cop_arybase));
3471 Perl_newSTATEOP(pTHX_ I32 flags, char *label, OP *o)
3474 const U32 seq = intro_my();
3477 NewOp(1101, cop, 1, COP);
3478 if (PERLDB_LINE && CopLINE(PL_curcop) && PL_curstash != PL_debstash) {
3479 cop->op_type = OP_DBSTATE;
3480 cop->op_ppaddr = PL_ppaddr[ OP_DBSTATE ];
3483 cop->op_type = OP_NEXTSTATE;
3484 cop->op_ppaddr = PL_ppaddr[ OP_NEXTSTATE ];
3486 cop->op_flags = (U8)flags;
3487 cop->op_private = (U8)(PL_hints & HINT_PRIVATE_MASK);
3489 cop->op_private |= NATIVE_HINTS;
3491 PL_compiling.op_private = cop->op_private;
3492 cop->op_next = (OP*)cop;
3495 cop->cop_label = label;
3496 PL_hints |= HINT_BLOCK_SCOPE;
3499 cop->cop_arybase = PL_curcop->cop_arybase;
3500 if (specialWARN(PL_curcop->cop_warnings))
3501 cop->cop_warnings = PL_curcop->cop_warnings ;
3503 cop->cop_warnings = newSVsv(PL_curcop->cop_warnings) ;
3504 if (specialCopIO(PL_curcop->cop_io))
3505 cop->cop_io = PL_curcop->cop_io;
3507 cop->cop_io = newSVsv(PL_curcop->cop_io) ;
3510 if (PL_copline == NOLINE)
3511 CopLINE_set(cop, CopLINE(PL_curcop));
3513 CopLINE_set(cop, PL_copline);
3514 PL_copline = NOLINE;
3517 CopFILE_set(cop, CopFILE(PL_curcop)); /* XXX share in a pvtable? */
3519 CopFILEGV_set(cop, CopFILEGV(PL_curcop));
3521 CopSTASH_set(cop, PL_curstash);
3523 if (PERLDB_LINE && PL_curstash != PL_debstash) {
3524 SV * const * const svp = av_fetch(CopFILEAVx(PL_curcop), (I32)CopLINE(cop), FALSE);
3525 if (svp && *svp != &PL_sv_undef ) {
3526 (void)SvIOK_on(*svp);
3527 SvIV_set(*svp, PTR2IV(cop));
3531 return prepend_elem(OP_LINESEQ, (OP*)cop, o);
3536 Perl_newLOGOP(pTHX_ I32 type, I32 flags, OP *first, OP *other)
3539 return new_logop(type, flags, &first, &other);
3543 S_new_logop(pTHX_ I32 type, I32 flags, OP** firstp, OP** otherp)
3548 OP *first = *firstp;
3549 OP * const other = *otherp;
3551 if (type == OP_XOR) /* Not short circuit, but here by precedence. */
3552 return newBINOP(type, flags, scalar(first), scalar(other));
3554 scalarboolean(first);
3555 /* optimize "!a && b" to "a || b", and "!a || b" to "a && b" */
3556 if (first->op_type == OP_NOT && (first->op_flags & OPf_SPECIAL)) {
3557 if (type == OP_AND || type == OP_OR) {
3563 first = *firstp = cUNOPo->op_first;
3565 first->op_next = o->op_next;
3566 cUNOPo->op_first = Nullop;
3570 if (first->op_type == OP_CONST) {
3571 if (first->op_private & OPpCONST_STRICT)
3572 no_bareword_allowed(first);
3573 else if ((first->op_private & OPpCONST_BARE) && ckWARN(WARN_BAREWORD))
3574 Perl_warner(aTHX_ packWARN(WARN_BAREWORD), "Bareword found in conditional");
3575 if ((type == OP_AND && SvTRUE(((SVOP*)first)->op_sv)) ||
3576 (type == OP_OR && !SvTRUE(((SVOP*)first)->op_sv)) ||
3577 (type == OP_DOR && !SvOK(((SVOP*)first)->op_sv))) {
3580 if (other->op_type == OP_CONST)
3581 other->op_private |= OPpCONST_SHORTCIRCUIT;
3585 /* check for C<my $x if 0>, or C<my($x,$y) if 0> */
3586 const OP *o2 = other;
3587 if ( ! (o2->op_type == OP_LIST
3588 && (( o2 = cUNOPx(o2)->op_first))
3589 && o2->op_type == OP_PUSHMARK
3590 && (( o2 = o2->op_sibling)) )
3593 if ((o2->op_type == OP_PADSV || o2->op_type == OP_PADAV
3594 || o2->op_type == OP_PADHV)
3595 && o2->op_private & OPpLVAL_INTRO
3596 && ckWARN(WARN_DEPRECATED))
3598 Perl_warner(aTHX_ packWARN(WARN_DEPRECATED),
3599 "Deprecated use of my() in false conditional");
3604 if (first->op_type == OP_CONST)
3605 first->op_private |= OPpCONST_SHORTCIRCUIT;
3609 else if ((first->op_flags & OPf_KIDS) && type != OP_DOR
3610 && ckWARN(WARN_MISC)) /* [#24076] Don't warn for <FH> err FOO. */
3612 const OP * const k1 = ((UNOP*)first)->op_first;
3613 const OP * const k2 = k1->op_sibling;
3615 switch (first->op_type)
3618 if (k2 && k2->op_type == OP_READLINE
3619 && (k2->op_flags & OPf_STACKED)
3620 && ((k1->op_flags & OPf_WANT) == OPf_WANT_SCALAR))
3622 warnop = k2->op_type;
3627 if (k1->op_type == OP_READDIR
3628 || k1->op_type == OP_GLOB
3629 || (k1->op_type == OP_NULL && k1->op_targ == OP_GLOB)
3630 || k1->op_type == OP_EACH)
3632 warnop = ((k1->op_type == OP_NULL)
3633 ? (OPCODE)k1->op_targ : k1->op_type);
3638 const line_t oldline = CopLINE(PL_curcop);
3639 CopLINE_set(PL_curcop, PL_copline);
3640 Perl_warner(aTHX_ packWARN(WARN_MISC),
3641 "Value of %s%s can be \"0\"; test with defined()",
3643 ((warnop == OP_READLINE || warnop == OP_GLOB)
3644 ? " construct" : "() operator"));
3645 CopLINE_set(PL_curcop, oldline);
3652 if (type == OP_ANDASSIGN || type == OP_ORASSIGN || type == OP_DORASSIGN)
3653 other->op_private |= OPpASSIGN_BACKWARDS; /* other is an OP_SASSIGN */
3655 NewOp(1101, logop, 1, LOGOP);
3657 logop->op_type = (OPCODE)type;
3658 logop->op_ppaddr = PL_ppaddr[type];
3659 logop->op_first = first;
3660 logop->op_flags = (U8)(flags | OPf_KIDS);
3661 logop->op_other = LINKLIST(other);
3662 logop->op_private = (U8)(1 | (flags >> 8));
3664 /* establish postfix order */
3665 logop->op_next = LINKLIST(first);
3666 first->op_next = (OP*)logop;
3667 first->op_sibling = other;
3669 CHECKOP(type,logop);
3671 o = newUNOP(OP_NULL, 0, (OP*)logop);
3678 Perl_newCONDOP(pTHX_ I32 flags, OP *first, OP *trueop, OP *falseop)
3686 return newLOGOP(OP_AND, 0, first, trueop);
3688 return newLOGOP(OP_OR, 0, first, falseop);
3690 scalarboolean(first);
3691 if (first->op_type == OP_CONST) {
3692 if (first->op_private & OPpCONST_BARE &&
3693 first->op_private & OPpCONST_STRICT) {
3694 no_bareword_allowed(first);
3696 if (SvTRUE(((SVOP*)first)->op_sv)) {
3707 NewOp(1101, logop, 1, LOGOP);
3708 logop->op_type = OP_COND_EXPR;
3709 logop->op_ppaddr = PL_ppaddr[OP_COND_EXPR];
3710 logop->op_first = first;
3711 logop->op_flags = (U8)(flags | OPf_KIDS);
3712 logop->op_private = (U8)(1 | (flags >> 8));
3713 logop->op_other = LINKLIST(trueop);
3714 logop->op_next = LINKLIST(falseop);
3716 CHECKOP(OP_COND_EXPR, /* that's logop->op_type */
3719 /* establish postfix order */
3720 start = LINKLIST(first);
3721 first->op_next = (OP*)logop;
3723 first->op_sibling = trueop;
3724 trueop->op_sibling = falseop;
3725 o = newUNOP(OP_NULL, 0, (OP*)logop);
3727 trueop->op_next = falseop->op_next = o;
3734 Perl_newRANGE(pTHX_ I32 flags, OP *left, OP *right)
3743 NewOp(1101, range, 1, LOGOP);
3745 range->op_type = OP_RANGE;
3746 range->op_ppaddr = PL_ppaddr[OP_RANGE];
3747 range->op_first = left;
3748 range->op_flags = OPf_KIDS;
3749 leftstart = LINKLIST(left);
3750 range->op_other = LINKLIST(right);
3751 range->op_private = (U8)(1 | (flags >> 8));
3753 left->op_sibling = right;
3755 range->op_next = (OP*)range;
3756 flip = newUNOP(OP_FLIP, flags, (OP*)range);
3757 flop = newUNOP(OP_FLOP, 0, flip);
3758 o = newUNOP(OP_NULL, 0, flop);
3760 range->op_next = leftstart;
3762 left->op_next = flip;
3763 right->op_next = flop;
3765 range->op_targ = pad_alloc(OP_RANGE, SVs_PADMY);
3766 sv_upgrade(PAD_SV(range->op_targ), SVt_PVNV);
3767 flip->op_targ = pad_alloc(OP_RANGE, SVs_PADMY);
3768 sv_upgrade(PAD_SV(flip->op_targ), SVt_PVNV);
3770 flip->op_private = left->op_type == OP_CONST ? OPpFLIP_LINENUM : 0;
3771 flop->op_private = right->op_type == OP_CONST ? OPpFLIP_LINENUM : 0;
3774 if (!flip->op_private || !flop->op_private)
3775 linklist(o); /* blow off optimizer unless constant */
3781 Perl_newLOOPOP(pTHX_ I32 flags, I32 debuggable, OP *expr, OP *block)
3786 const bool once = block && block->op_flags & OPf_SPECIAL &&
3787 (block->op_type == OP_ENTERSUB || block->op_type == OP_NULL);
3789 PERL_UNUSED_ARG(debuggable);
3792 if (once && expr->op_type == OP_CONST && !SvTRUE(((SVOP*)expr)->op_sv))
3793 return block; /* do {} while 0 does once */
3794 if (expr->op_type == OP_READLINE || expr->op_type == OP_GLOB
3795 || (expr->op_type == OP_NULL && expr->op_targ == OP_GLOB)) {
3796 expr = newUNOP(OP_DEFINED, 0,
3797 newASSIGNOP(0, newDEFSVOP(), 0, expr) );
3798 } else if (expr->op_flags & OPf_KIDS) {
3799 const OP * const k1 = ((UNOP*)expr)->op_first;
3800 const OP * const k2 = k1 ? k1->op_sibling : NULL;
3801 switch (expr->op_type) {
3803 if (k2 && k2->op_type == OP_READLINE
3804 && (k2->op_flags & OPf_STACKED)
3805 && ((k1->op_flags & OPf_WANT) == OPf_WANT_SCALAR))
3806 expr = newUNOP(OP_DEFINED, 0, expr);
3810 if (k1->op_type == OP_READDIR
3811 || k1->op_type == OP_GLOB
3812 || (k1->op_type == OP_NULL && k1->op_targ == OP_GLOB)
3813 || k1->op_type == OP_EACH)
3814 expr = newUNOP(OP_DEFINED, 0, expr);
3820 /* if block is null, the next append_elem() would put UNSTACK, a scalar
3821 * op, in listop. This is wrong. [perl #27024] */
3823 block = newOP(OP_NULL, 0);
3824 listop = append_elem(OP_LINESEQ, block, newOP(OP_UNSTACK, 0));
3825 o = new_logop(OP_AND, 0, &expr, &listop);
3828 ((LISTOP*)listop)->op_last->op_next = LINKLIST(o);
3830 if (once && o != listop)
3831 o->op_next = ((LOGOP*)cUNOPo->op_first)->op_other;
3834 o = newUNOP(OP_NULL, 0, o); /* or do {} while 1 loses outer block */
3836 o->op_flags |= flags;
3838 o->op_flags |= OPf_SPECIAL; /* suppress POPBLOCK curpm restoration*/
3843 Perl_newWHILEOP(pTHX_ I32 flags, I32 debuggable, LOOP *loop, I32
3844 whileline, OP *expr, OP *block, OP *cont, I32 has_my)
3853 PERL_UNUSED_ARG(debuggable);
3856 if (expr->op_type == OP_READLINE || expr->op_type == OP_GLOB
3857 || (expr->op_type == OP_NULL && expr->op_targ == OP_GLOB)) {
3858 expr = newUNOP(OP_DEFINED, 0,
3859 newASSIGNOP(0, newDEFSVOP(), 0, expr) );
3860 } else if (expr->op_flags & OPf_KIDS) {
3861 const OP * const k1 = ((UNOP*)expr)->op_first;
3862 const OP * const k2 = (k1) ? k1->op_sibling : NULL;
3863 switch (expr->op_type) {
3865 if (k2 && k2->op_type == OP_READLINE
3866 && (k2->op_flags & OPf_STACKED)
3867 && ((k1->op_flags & OPf_WANT) == OPf_WANT_SCALAR))
3868 expr = newUNOP(OP_DEFINED, 0, expr);
3872 if (k1->op_type == OP_READDIR
3873 || k1->op_type == OP_GLOB
3874 || (k1->op_type == OP_NULL && k1->op_targ == OP_GLOB)
3875 || k1->op_type == OP_EACH)
3876 expr = newUNOP(OP_DEFINED, 0, expr);
3883 block = newOP(OP_NULL, 0);
3884 else if (cont || has_my) {
3885 block = scope(block);
3889 next = LINKLIST(cont);
3892 OP * const unstack = newOP(OP_UNSTACK, 0);
3895 cont = append_elem(OP_LINESEQ, cont, unstack);
3898 listop = append_list(OP_LINESEQ, (LISTOP*)block, (LISTOP*)cont);
3899 redo = LINKLIST(listop);
3902 PL_copline = (line_t)whileline;
3904 o = new_logop(OP_AND, 0, &expr, &listop);
3905 if (o == expr && o->op_type == OP_CONST && !SvTRUE(cSVOPo->op_sv)) {
3906 op_free(expr); /* oops, it's a while (0) */
3908 return Nullop; /* listop already freed by new_logop */
3911 ((LISTOP*)listop)->op_last->op_next =
3912 (o == listop ? redo : LINKLIST(o));
3918 NewOp(1101,loop,1,LOOP);
3919 loop->op_type = OP_ENTERLOOP;
3920 loop->op_ppaddr = PL_ppaddr[OP_ENTERLOOP];
3921 loop->op_private = 0;
3922 loop->op_next = (OP*)loop;
3925 o = newBINOP(OP_LEAVELOOP, 0, (OP*)loop, o);
3927 loop->op_redoop = redo;
3928 loop->op_lastop = o;
3929 o->op_private |= loopflags;
3932 loop->op_nextop = next;
3934 loop->op_nextop = o;
3936 o->op_flags |= flags;
3937 o->op_private |= (flags >> 8);
3942 Perl_newFOROP(pTHX_ I32 flags, char *label, line_t forline, OP *sv, OP *expr, OP *block, OP *cont)
3947 PADOFFSET padoff = 0;
3952 if (sv->op_type == OP_RV2SV) { /* symbol table variable */
3953 iterpflags = sv->op_private & OPpOUR_INTRO; /* for our $x () */
3954 sv->op_type = OP_RV2GV;
3955 sv->op_ppaddr = PL_ppaddr[OP_RV2GV];
3956 if (cGVOPx_gv(cUNOPx(sv)->op_first) == PL_defgv)
3957 iterpflags |= OPpITER_DEF;
3959 else if (sv->op_type == OP_PADSV) { /* private variable */
3960 iterpflags = sv->op_private & OPpLVAL_INTRO; /* for my $x () */
3961 padoff = sv->op_targ;
3966 else if (sv->op_type == OP_THREADSV) { /* per-thread variable */
3967 padoff = sv->op_targ;
3969 iterflags |= OPf_SPECIAL;
3974 Perl_croak(aTHX_ "Can't use %s for loop variable", PL_op_desc[sv->op_type]);
3975 if (padoff && strEQ(PAD_COMPNAME_PV(padoff), "$_"))
3976 iterpflags |= OPpITER_DEF;
3979 const I32 offset = pad_findmy("$_");
3980 if (offset == NOT_IN_PAD || PAD_COMPNAME_FLAGS(offset) & SVpad_OUR) {
3981 sv = newGVOP(OP_GV, 0, PL_defgv);
3986 iterpflags |= OPpITER_DEF;
3988 if (expr->op_type == OP_RV2AV || expr->op_type == OP_PADAV) {
3989 expr = mod(force_list(scalar(ref(expr, OP_ITER))), OP_GREPSTART);
3990 iterflags |= OPf_STACKED;
3992 else if (expr->op_type == OP_NULL &&
3993 (expr->op_flags & OPf_KIDS) &&
3994 ((BINOP*)expr)->op_first->op_type == OP_FLOP)
3996 /* Basically turn for($x..$y) into the same as for($x,$y), but we
3997 * set the STACKED flag to indicate that these values are to be
3998 * treated as min/max values by 'pp_iterinit'.
4000 UNOP* const flip = (UNOP*)((UNOP*)((BINOP*)expr)->op_first)->op_first;
4001 LOGOP* const range = (LOGOP*) flip->op_first;
4002 OP* const left = range->op_first;
4003 OP* const right = left->op_sibling;
4006 range->op_flags &= ~OPf_KIDS;
4007 range->op_first = Nullop;
4009 listop = (LISTOP*)newLISTOP(OP_LIST, 0, left, right);
4010 listop->op_first->op_next = range->op_next;
4011 left->op_next = range->op_other;
4012 right->op_next = (OP*)listop;
4013 listop->op_next = listop->op_first;
4016 expr = (OP*)(listop);
4018 iterflags |= OPf_STACKED;
4021 expr = mod(force_list(expr), OP_GREPSTART);
4024 loop = (LOOP*)list(convert(OP_ENTERITER, iterflags,
4025 append_elem(OP_LIST, expr, scalar(sv))));
4026 assert(!loop->op_next);
4027 /* for my $x () sets OPpLVAL_INTRO;
4028 * for our $x () sets OPpOUR_INTRO */
4029 loop->op_private = (U8)iterpflags;
4030 #ifdef PL_OP_SLAB_ALLOC
4033 NewOp(1234,tmp,1,LOOP);
4034 Copy(loop,tmp,1,LISTOP);
4039 Renew(loop, 1, LOOP);
4041 loop->op_targ = padoff;
4042 wop = newWHILEOP(flags, 1, loop, forline, newOP(OP_ITER, 0), block, cont, 0);
4043 PL_copline = forline;
4044 return newSTATEOP(0, label, wop);
4048 Perl_newLOOPEX(pTHX_ I32 type, OP *label)
4053 if (type != OP_GOTO || label->op_type == OP_CONST) {
4054 /* "last()" means "last" */
4055 if (label->op_type == OP_STUB && (label->op_flags & OPf_PARENS))
4056 o = newOP(type, OPf_SPECIAL);
4058 o = newPVOP(type, 0, savepv(label->op_type == OP_CONST
4059 ? SvPVx_nolen_const(((SVOP*)label)->op_sv)
4065 /* Check whether it's going to be a goto &function */
4066 if (label->op_type == OP_ENTERSUB
4067 && !(label->op_flags & OPf_STACKED))
4068 label = newUNOP(OP_REFGEN, 0, mod(label, OP_REFGEN));
4069 o = newUNOP(type, OPf_STACKED, label);
4071 PL_hints |= HINT_BLOCK_SCOPE;
4075 /* if the condition is a literal array or hash
4076 (or @{ ... } etc), make a reference to it.
4079 S_ref_array_or_hash(pTHX_ OP *cond)
4082 && (cond->op_type == OP_RV2AV
4083 || cond->op_type == OP_PADAV
4084 || cond->op_type == OP_RV2HV
4085 || cond->op_type == OP_PADHV))
4087 return newUNOP(OP_REFGEN,
4088 0, mod(cond, OP_REFGEN));
4094 /* These construct the optree fragments representing given()
4097 entergiven and enterwhen are LOGOPs; the op_other pointer
4098 points up to the associated leave op. We need this so we
4099 can put it in the context and make break/continue work.
4100 (Also, of course, pp_enterwhen will jump straight to
4101 op_other if the match fails.)
4106 S_newGIVWHENOP(pTHX_ OP *cond, OP *block,
4107 I32 enter_opcode, I32 leave_opcode,
4108 PADOFFSET entertarg)
4114 NewOp(1101, enterop, 1, LOGOP);
4115 enterop->op_type = enter_opcode;
4116 enterop->op_ppaddr = PL_ppaddr[enter_opcode];
4117 enterop->op_flags = (U8) OPf_KIDS;
4118 enterop->op_targ = ((entertarg == NOT_IN_PAD) ? 0 : entertarg);
4119 enterop->op_private = 0;
4121 o = newUNOP(leave_opcode, 0, (OP *) enterop);
4124 enterop->op_first = scalar(cond);
4125 cond->op_sibling = block;
4127 o->op_next = LINKLIST(cond);
4128 cond->op_next = (OP *) enterop;
4131 /* This is a default {} block */
4132 enterop->op_first = block;
4133 enterop->op_flags |= OPf_SPECIAL;
4135 o->op_next = (OP *) enterop;
4138 CHECKOP(enter_opcode, enterop); /* Currently does nothing, since
4139 entergiven and enterwhen both
4142 enterop->op_next = LINKLIST(block);
4143 block->op_next = enterop->op_other = o;
4148 /* Does this look like a boolean operation? For these purposes
4149 a boolean operation is:
4150 - a subroutine call [*]
4151 - a logical connective
4152 - a comparison operator
4153 - a filetest operator, with the exception of -s -M -A -C
4154 - defined(), exists() or eof()
4155 - /$re/ or $foo =~ /$re/
4157 [*] possibly surprising
4161 S_looks_like_bool(pTHX_ OP *o)
4164 switch(o->op_type) {
4166 return looks_like_bool(cLOGOPo->op_first);
4170 looks_like_bool(cLOGOPo->op_first)
4171 && looks_like_bool(cLOGOPo->op_first->op_sibling));
4175 case OP_NOT: case OP_XOR:
4176 /* Note that OP_DOR is not here */
4178 case OP_EQ: case OP_NE: case OP_LT:
4179 case OP_GT: case OP_LE: case OP_GE:
4181 case OP_I_EQ: case OP_I_NE: case OP_I_LT:
4182 case OP_I_GT: case OP_I_LE: case OP_I_GE:
4184 case OP_SEQ: case OP_SNE: case OP_SLT:
4185 case OP_SGT: case OP_SLE: case OP_SGE:
4189 case OP_FTRREAD: case OP_FTRWRITE: case OP_FTREXEC:
4190 case OP_FTEREAD: case OP_FTEWRITE: case OP_FTEEXEC:
4191 case OP_FTIS: case OP_FTEOWNED: case OP_FTROWNED:
4192 case OP_FTZERO: case OP_FTSOCK: case OP_FTCHR:
4193 case OP_FTBLK: case OP_FTFILE: case OP_FTDIR:
4194 case OP_FTPIPE: case OP_FTLINK: case OP_FTSUID:
4195 case OP_FTSGID: case OP_FTSVTX: case OP_FTTTY:
4196 case OP_FTTEXT: case OP_FTBINARY:
4198 case OP_DEFINED: case OP_EXISTS:
4199 case OP_MATCH: case OP_EOF:
4204 /* Detect comparisons that have been optimized away */
4205 if (cSVOPo->op_sv == &PL_sv_yes
4206 || cSVOPo->op_sv == &PL_sv_no)
4217 Perl_newGIVENOP(pTHX_ OP *cond, OP *block, PADOFFSET defsv_off)
4221 return newGIVWHENOP(
4222 ref_array_or_hash(cond),
4224 OP_ENTERGIVEN, OP_LEAVEGIVEN,
4228 /* If cond is null, this is a default {} block */
4230 Perl_newWHENOP(pTHX_ OP *cond, OP *block)
4232 bool cond_llb = (!cond || looks_like_bool(cond));
4238 cond_op = newBINOP(OP_SMARTMATCH, OPf_SPECIAL,
4240 scalar(ref_array_or_hash(cond)));
4243 return newGIVWHENOP(
4245 append_elem(block->op_type, block, newOP(OP_BREAK, OPf_SPECIAL)),
4246 OP_ENTERWHEN, OP_LEAVEWHEN, 0);
4250 =for apidoc cv_undef
4252 Clear out all the active components of a CV. This can happen either
4253 by an explicit C<undef &foo>, or by the reference count going to zero.
4254 In the former case, we keep the CvOUTSIDE pointer, so that any anonymous
4255 children can still follow the full lexical scope chain.
4261 Perl_cv_undef(pTHX_ CV *cv)
4265 if (CvFILE(cv) && !CvXSUB(cv)) {
4266 /* for XSUBs CvFILE point directly to static memory; __FILE__ */
4267 Safefree(CvFILE(cv));
4272 if (!CvXSUB(cv) && CvROOT(cv)) {
4274 Perl_croak(aTHX_ "Can't undef active subroutine");
4277 PAD_SAVE_SETNULLPAD();
4279 op_free(CvROOT(cv));
4280 CvROOT(cv) = Nullop;
4281 CvSTART(cv) = Nullop;
4284 SvPOK_off((SV*)cv); /* forget prototype */
4289 /* remove CvOUTSIDE unless this is an undef rather than a free */
4290 if (!SvREFCNT(cv) && CvOUTSIDE(cv)) {
4291 if (!CvWEAKOUTSIDE(cv))
4292 SvREFCNT_dec(CvOUTSIDE(cv));
4293 CvOUTSIDE(cv) = NULL;
4296 SvREFCNT_dec((SV*)CvXSUBANY(cv).any_ptr);
4302 /* delete all flags except WEAKOUTSIDE */
4303 CvFLAGS(cv) &= CVf_WEAKOUTSIDE;
4307 Perl_cv_ckproto(pTHX_ const CV *cv, const GV *gv, const char *p)
4309 if (((!p != !SvPOK(cv)) || (p && strNE(p, SvPVX_const(cv)))) && ckWARN_d(WARN_PROTOTYPE)) {
4310 SV* const msg = sv_newmortal();
4314 gv_efullname3(name = sv_newmortal(), gv, NULL);
4315 sv_setpv(msg, "Prototype mismatch:");
4317 Perl_sv_catpvf(aTHX_ msg, " sub %"SVf, name);
4319 Perl_sv_catpvf(aTHX_ msg, " (%"SVf")", (const SV *)cv);
4321 sv_catpvs(msg, ": none");
4322 sv_catpvs(msg, " vs ");
4324 Perl_sv_catpvf(aTHX_ msg, "(%s)", p);
4326 sv_catpvs(msg, "none");
4327 Perl_warner(aTHX_ packWARN(WARN_PROTOTYPE), "%"SVf, msg);
4331 static void const_sv_xsub(pTHX_ CV* cv);
4335 =head1 Optree Manipulation Functions
4337 =for apidoc cv_const_sv
4339 If C<cv> is a constant sub eligible for inlining. returns the constant
4340 value returned by the sub. Otherwise, returns NULL.
4342 Constant subs can be created with C<newCONSTSUB> or as described in
4343 L<perlsub/"Constant Functions">.
4348 Perl_cv_const_sv(pTHX_ CV *cv)
4352 if (!(SvTYPE(cv) == SVt_PVCV || SvTYPE(cv) == SVt_PVFM))
4354 return CvCONST(cv) ? (SV*)CvXSUBANY(cv).any_ptr : NULL;
4357 /* op_const_sv: examine an optree to determine whether it's in-lineable.
4358 * Can be called in 3 ways:
4361 * look for a single OP_CONST with attached value: return the value
4363 * cv && CvCLONE(cv) && !CvCONST(cv)
4365 * examine the clone prototype, and if contains only a single
4366 * OP_CONST referencing a pad const, or a single PADSV referencing
4367 * an outer lexical, return a non-zero value to indicate the CV is
4368 * a candidate for "constizing" at clone time
4372 * We have just cloned an anon prototype that was marked as a const
4373 * candidiate. Try to grab the current value, and in the case of
4374 * PADSV, ignore it if it has multiple references. Return the value.
4378 Perl_op_const_sv(pTHX_ const OP *o, CV *cv)
4386 if (o->op_type == OP_LINESEQ && cLISTOPo->op_first)
4387 o = cLISTOPo->op_first->op_sibling;
4389 for (; o; o = o->op_next) {
4390 const OPCODE type = o->op_type;
4392 if (sv && o->op_next == o)
4394 if (o->op_next != o) {
4395 if (type == OP_NEXTSTATE || type == OP_NULL || type == OP_PUSHMARK)
4397 if (type == OP_DBSTATE)
4400 if (type == OP_LEAVESUB || type == OP_RETURN)
4404 if (type == OP_CONST && cSVOPo->op_sv)
4406 else if (cv && type == OP_CONST) {
4407 sv = PAD_BASE_SV(CvPADLIST(cv), o->op_targ);
4411 else if (cv && type == OP_PADSV) {
4412 if (CvCONST(cv)) { /* newly cloned anon */
4413 sv = PAD_BASE_SV(CvPADLIST(cv), o->op_targ);
4414 /* the candidate should have 1 ref from this pad and 1 ref
4415 * from the parent */
4416 if (!sv || SvREFCNT(sv) != 2)
4423 if (PAD_COMPNAME_FLAGS(o->op_targ) & SVf_FAKE)
4424 sv = &PL_sv_undef; /* an arbitrary non-null value */
4435 Perl_newMYSUB(pTHX_ I32 floor, OP *o, OP *proto, OP *attrs, OP *block)
4437 PERL_UNUSED_ARG(floor);
4447 Perl_croak(aTHX_ "\"my sub\" not yet implemented");
4451 Perl_newSUB(pTHX_ I32 floor, OP *o, OP *proto, OP *block)
4453 return Perl_newATTRSUB(aTHX_ floor, o, proto, Nullop, block);
4457 Perl_newATTRSUB(pTHX_ I32 floor, OP *o, OP *proto, OP *attrs, OP *block)
4464 register CV *cv = NULL;
4466 /* If the subroutine has no body, no attributes, and no builtin attributes
4467 then it's just a sub declaration, and we may be able to get away with
4468 storing with a placeholder scalar in the symbol table, rather than a
4469 full GV and CV. If anything is present then it will take a full CV to
4471 const I32 gv_fetch_flags
4472 = (block || attrs || (CvFLAGS(PL_compcv) & CVf_BUILTIN_ATTRS))
4473 ? GV_ADDMULTI : GV_ADDMULTI | GV_NOINIT;
4474 const char * const name = o ? SvPVx_nolen_const(cSVOPo->op_sv) : NULL;
4477 assert(proto->op_type == OP_CONST);
4478 ps = SvPVx_const(((SVOP*)proto)->op_sv, ps_len);
4483 if (!name && PERLDB_NAMEANON && CopLINE(PL_curcop)) {
4484 SV * const sv = sv_newmortal();
4485 Perl_sv_setpvf(aTHX_ sv, "%s[%s:%"IVdf"]",
4486 PL_curstash ? "__ANON__" : "__ANON__::__ANON__",
4487 CopFILE(PL_curcop), (IV)CopLINE(PL_curcop));
4488 aname = SvPVX_const(sv);
4493 gv = name ? gv_fetchsv(cSVOPo->op_sv, gv_fetch_flags, SVt_PVCV)
4494 : gv_fetchpv(aname ? aname
4495 : (PL_curstash ? "__ANON__" : "__ANON__::__ANON__"),
4496 gv_fetch_flags, SVt_PVCV);
4505 if (SvTYPE(gv) != SVt_PVGV) { /* Maybe prototype now, and had at
4506 maximum a prototype before. */
4507 if (SvTYPE(gv) > SVt_NULL) {
4508 if (!SvPOK((SV*)gv) && !(SvIOK((SV*)gv) && SvIVX((SV*)gv) == -1)
4509 && ckWARN_d(WARN_PROTOTYPE))
4511 Perl_warner(aTHX_ packWARN(WARN_PROTOTYPE), "Runaway prototype");
4513 cv_ckproto((CV*)gv, NULL, ps);
4516 sv_setpvn((SV*)gv, ps, ps_len);
4518 sv_setiv((SV*)gv, -1);
4519 SvREFCNT_dec(PL_compcv);
4520 cv = PL_compcv = NULL;
4521 PL_sub_generation++;
4525 cv = (!name || GvCVGEN(gv)) ? NULL : GvCV(gv);
4527 #ifdef GV_UNIQUE_CHECK
4528 if (cv && GvUNIQUE(gv) && SvREADONLY(cv)) {
4529 Perl_croak(aTHX_ "Can't define subroutine %s (GV is unique)", name);
4533 if (!block || !ps || *ps || attrs || (CvFLAGS(PL_compcv) & CVf_BUILTIN_ATTRS))
4536 const_sv = op_const_sv(block, NULL);
4539 const bool exists = CvROOT(cv) || CvXSUB(cv);
4541 #ifdef GV_UNIQUE_CHECK
4542 if (exists && GvUNIQUE(gv)) {
4543 Perl_croak(aTHX_ "Can't redefine unique subroutine %s", name);
4547 /* if the subroutine doesn't exist and wasn't pre-declared
4548 * with a prototype, assume it will be AUTOLOADed,
4549 * skipping the prototype check
4551 if (exists || SvPOK(cv))
4552 cv_ckproto(cv, gv, ps);
4553 /* already defined (or promised)? */
4554 if (exists || GvASSUMECV(gv)) {
4555 if (!block && !attrs) {
4556 if (CvFLAGS(PL_compcv)) {
4557 /* might have had built-in attrs applied */
4558 CvFLAGS(cv) |= (CvFLAGS(PL_compcv) & CVf_BUILTIN_ATTRS);
4560 /* just a "sub foo;" when &foo is already defined */
4561 SAVEFREESV(PL_compcv);
4565 if (ckWARN(WARN_REDEFINE)
4567 && (!const_sv || sv_cmp(cv_const_sv(cv), const_sv))))
4569 const line_t oldline = CopLINE(PL_curcop);
4570 if (PL_copline != NOLINE)
4571 CopLINE_set(PL_curcop, PL_copline);
4572 Perl_warner(aTHX_ packWARN(WARN_REDEFINE),
4573 CvCONST(cv) ? "Constant subroutine %s redefined"
4574 : "Subroutine %s redefined", name);
4575 CopLINE_set(PL_curcop, oldline);
4583 (void)SvREFCNT_inc(const_sv);
4585 assert(!CvROOT(cv) && !CvCONST(cv));
4586 sv_setpvn((SV*)cv, "", 0); /* prototype is "" */
4587 CvXSUBANY(cv).any_ptr = const_sv;
4588 CvXSUB(cv) = const_sv_xsub;
4593 cv = newCONSTSUB(NULL, name, const_sv);
4596 SvREFCNT_dec(PL_compcv);
4598 PL_sub_generation++;
4605 /* Need to do a C<use attributes $stash_of_cv,\&cv,@attrs>
4606 * before we clobber PL_compcv.
4610 /* Might have had built-in attributes applied -- propagate them. */
4611 CvFLAGS(cv) |= (CvFLAGS(PL_compcv) & CVf_BUILTIN_ATTRS);
4612 if (CvGV(cv) && GvSTASH(CvGV(cv)))
4613 stash = GvSTASH(CvGV(cv));
4614 else if (CvSTASH(cv))
4615 stash = CvSTASH(cv);
4617 stash = PL_curstash;
4620 /* possibly about to re-define existing subr -- ignore old cv */
4621 rcv = (SV*)PL_compcv;
4622 if (name && GvSTASH(gv))
4623 stash = GvSTASH(gv);
4625 stash = PL_curstash;
4627 apply_attrs(stash, rcv, attrs, FALSE);
4629 if (cv) { /* must reuse cv if autoloaded */
4631 /* got here with just attrs -- work done, so bug out */
4632 SAVEFREESV(PL_compcv);
4635 /* transfer PL_compcv to cv */
4637 CvFLAGS(cv) = CvFLAGS(PL_compcv);
4638 if (!CvWEAKOUTSIDE(cv))
4639 SvREFCNT_dec(CvOUTSIDE(cv));
4640 CvOUTSIDE(cv) = CvOUTSIDE(PL_compcv);
4641 CvOUTSIDE_SEQ(cv) = CvOUTSIDE_SEQ(PL_compcv);
4642 CvOUTSIDE(PL_compcv) = 0;
4643 CvPADLIST(cv) = CvPADLIST(PL_compcv);
4644 CvPADLIST(PL_compcv) = 0;
4645 /* inner references to PL_compcv must be fixed up ... */
4646 pad_fixup_inner_anons(CvPADLIST(cv), PL_compcv, cv);
4647 /* ... before we throw it away */
4648 SvREFCNT_dec(PL_compcv);
4650 if (PERLDB_INTER)/* Advice debugger on the new sub. */
4651 ++PL_sub_generation;
4658 PL_sub_generation++;
4662 CvFILE_set_from_cop(cv, PL_curcop);
4663 CvSTASH(cv) = PL_curstash;
4666 sv_setpvn((SV*)cv, ps, ps_len);
4668 if (PL_error_count) {
4672 const char *s = strrchr(name, ':');
4674 if (strEQ(s, "BEGIN")) {
4675 const char not_safe[] =
4676 "BEGIN not safe after errors--compilation aborted";
4677 if (PL_in_eval & EVAL_KEEPERR)
4678 Perl_croak(aTHX_ not_safe);
4680 /* force display of errors found but not reported */
4681 sv_catpv(ERRSV, not_safe);
4682 Perl_croak(aTHX_ "%"SVf, ERRSV);
4691 CvROOT(cv) = newUNOP(OP_LEAVESUBLV, 0,
4692 mod(scalarseq(block), OP_LEAVESUBLV));
4695 /* This makes sub {}; work as expected. */
4696 if (block->op_type == OP_STUB) {
4698 block = newSTATEOP(0, NULL, 0);
4700 CvROOT(cv) = newUNOP(OP_LEAVESUB, 0, scalarseq(block));
4702 CvROOT(cv)->op_private |= OPpREFCOUNTED;
4703 OpREFCNT_set(CvROOT(cv), 1);
4704 CvSTART(cv) = LINKLIST(CvROOT(cv));
4705 CvROOT(cv)->op_next = 0;
4706 CALL_PEEP(CvSTART(cv));
4708 /* now that optimizer has done its work, adjust pad values */
4710 pad_tidy(CvCLONE(cv) ? padtidy_SUBCLONE : padtidy_SUB);
4713 assert(!CvCONST(cv));
4714 if (ps && !*ps && op_const_sv(block, cv))
4718 if (name || aname) {
4720 const char * const tname = (name ? name : aname);
4722 if (PERLDB_SUBLINE && PL_curstash != PL_debstash) {
4723 SV * const sv = newSV(0);
4724 SV * const tmpstr = sv_newmortal();
4725 GV * const db_postponed = gv_fetchpvs("DB::postponed",
4726 GV_ADDMULTI, SVt_PVHV);
4729 Perl_sv_setpvf(aTHX_ sv, "%s:%ld-%ld",
4731 (long)PL_subline, (long)CopLINE(PL_curcop));
4732 gv_efullname3(tmpstr, gv, NULL);
4733 hv_store(GvHV(PL_DBsub), SvPVX_const(tmpstr), SvCUR(tmpstr), sv, 0);
4734 hv = GvHVn(db_postponed);
4735 if (HvFILL(hv) > 0 && hv_exists(hv, SvPVX_const(tmpstr), SvCUR(tmpstr))) {
4736 CV * const pcv = GvCV(db_postponed);
4742 call_sv((SV*)pcv, G_DISCARD);
4747 if ((s = strrchr(tname,':')))
4752 if (*s != 'B' && *s != 'E' && *s != 'C' && *s != 'I')
4755 if (strEQ(s, "BEGIN") && !PL_error_count) {
4756 const I32 oldscope = PL_scopestack_ix;
4758 SAVECOPFILE(&PL_compiling);
4759 SAVECOPLINE(&PL_compiling);
4762 PL_beginav = newAV();
4763 DEBUG_x( dump_sub(gv) );
4764 av_push(PL_beginav, (SV*)cv);
4765 GvCV(gv) = 0; /* cv has been hijacked */
4766 call_list(oldscope, PL_beginav);
4768 PL_curcop = &PL_compiling;
4769 PL_compiling.op_private = (U8)(PL_hints & HINT_PRIVATE_MASK);
4772 else if (strEQ(s, "END") && !PL_error_count) {
4775 DEBUG_x( dump_sub(gv) );
4776 av_unshift(PL_endav, 1);
4777 av_store(PL_endav, 0, (SV*)cv);
4778 GvCV(gv) = 0; /* cv has been hijacked */
4780 else if (strEQ(s, "CHECK") && !PL_error_count) {
4782 PL_checkav = newAV();
4783 DEBUG_x( dump_sub(gv) );
4784 if (PL_main_start && ckWARN(WARN_VOID))
4785 Perl_warner(aTHX_ packWARN(WARN_VOID), "Too late to run CHECK block");
4786 av_unshift(PL_checkav, 1);
4787 av_store(PL_checkav, 0, (SV*)cv);
4788 GvCV(gv) = 0; /* cv has been hijacked */
4790 else if (strEQ(s, "INIT") && !PL_error_count) {
4792 PL_initav = newAV();
4793 DEBUG_x( dump_sub(gv) );
4794 if (PL_main_start && ckWARN(WARN_VOID))
4795 Perl_warner(aTHX_ packWARN(WARN_VOID), "Too late to run INIT block");
4796 av_push(PL_initav, (SV*)cv);
4797 GvCV(gv) = 0; /* cv has been hijacked */