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, Nullch);
166 return SvPV_nolen_const(tmpsv);
170 S_no_fh_allowed(pTHX_ OP *o)
172 yyerror(Perl_form(aTHX_ "Missing comma after first argument to %s function",
178 S_too_few_arguments(pTHX_ OP *o, const char *name)
180 yyerror(Perl_form(aTHX_ "Not enough arguments for %s", name));
185 S_too_many_arguments(pTHX_ OP *o, const char *name)
187 yyerror(Perl_form(aTHX_ "Too many arguments for %s", name));
192 S_bad_type(pTHX_ I32 n, const char *t, const char *name, const OP *kid)
194 yyerror(Perl_form(aTHX_ "Type of arg %d to %s must be %s (not %s)",
195 (int)n, name, t, OP_DESC(kid)));
199 S_no_bareword_allowed(pTHX_ const OP *o)
201 qerror(Perl_mess(aTHX_
202 "Bareword \"%"SVf"\" not allowed while \"strict subs\" in use",
206 /* "register" allocation */
209 Perl_allocmy(pTHX_ char *name)
213 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 = Nullsv;
356 case OP_METHOD_NAMED:
358 SvREFCNT_dec(cSVOPo->op_sv);
359 cSVOPo->op_sv = Nullsv;
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 = Nullsv;
386 Safefree(cPVOPo->op_pv);
387 cPVOPo->op_pv = Nullch;
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 if (strnEQ(SvPVX_const(sv), "di", 2) ||
796 strnEQ(SvPVX_const(sv), "ds", 2) ||
797 strnEQ(SvPVX_const(sv), "ig", 2))
802 op_null(o); /* don't execute or even remember it */
806 o->op_type = OP_PREINC; /* pre-increment is faster */
807 o->op_ppaddr = PL_ppaddr[OP_PREINC];
811 o->op_type = OP_PREDEC; /* pre-decrement is faster */
812 o->op_ppaddr = PL_ppaddr[OP_PREDEC];
816 o->op_type = OP_I_PREINC; /* pre-increment is faster */
817 o->op_ppaddr = PL_ppaddr[OP_I_PREINC];
821 o->op_type = OP_I_PREDEC; /* pre-decrement is faster */
822 o->op_ppaddr = PL_ppaddr[OP_I_PREDEC];
831 for (kid = cUNOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
836 if (o->op_flags & OPf_STACKED)
843 if (!(o->op_flags & OPf_KIDS))
854 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
861 /* all requires must return a boolean value */
862 o->op_flags &= ~OPf_WANT;
867 if ((kid = cLISTOPo->op_first) && kid->op_type == OP_PUSHRE) {
868 if (!kPMOP->op_pmreplroot)
869 deprecate_old("implicit split to @_");
873 if (useless && ckWARN(WARN_VOID))
874 Perl_warner(aTHX_ packWARN(WARN_VOID), "Useless use of %s in void context", useless);
879 Perl_listkids(pTHX_ OP *o)
881 if (o && o->op_flags & OPf_KIDS) {
883 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
890 Perl_list(pTHX_ OP *o)
895 /* assumes no premature commitment */
896 if (!o || (o->op_flags & OPf_WANT) || PL_error_count
897 || o->op_type == OP_RETURN)
902 if ((o->op_private & OPpTARGET_MY)
903 && (PL_opargs[o->op_type] & OA_TARGLEX))/* OPp share the meaning */
905 return o; /* As if inside SASSIGN */
908 o->op_flags = (o->op_flags & ~OPf_WANT) | OPf_WANT_LIST;
910 switch (o->op_type) {
913 list(cBINOPo->op_first);
918 for (kid = cUNOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
926 if (!(o->op_flags & OPf_KIDS))
928 if (!o->op_next && cUNOPo->op_first->op_type == OP_FLOP) {
929 list(cBINOPo->op_first);
930 return gen_constant_list(o);
937 kid = cLISTOPo->op_first;
939 while ((kid = kid->op_sibling)) {
945 WITH_THR(PL_curcop = &PL_compiling);
949 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling) {
955 WITH_THR(PL_curcop = &PL_compiling);
958 /* all requires must return a boolean value */
959 o->op_flags &= ~OPf_WANT;
966 Perl_scalarseq(pTHX_ OP *o)
970 if (o->op_type == OP_LINESEQ ||
971 o->op_type == OP_SCOPE ||
972 o->op_type == OP_LEAVE ||
973 o->op_type == OP_LEAVETRY)
976 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling) {
977 if (kid->op_sibling) {
981 PL_curcop = &PL_compiling;
983 o->op_flags &= ~OPf_PARENS;
984 if (PL_hints & HINT_BLOCK_SCOPE)
985 o->op_flags |= OPf_PARENS;
988 o = newOP(OP_STUB, 0);
993 S_modkids(pTHX_ OP *o, I32 type)
995 if (o && o->op_flags & OPf_KIDS) {
997 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
1003 /* Propagate lvalue ("modifiable") context to an op and its children.
1004 * 'type' represents the context type, roughly based on the type of op that
1005 * would do the modifying, although local() is represented by OP_NULL.
1006 * It's responsible for detecting things that can't be modified, flag
1007 * things that need to behave specially in an lvalue context (e.g., "$$x = 5"
1008 * might have to vivify a reference in $x), and so on.
1010 * For example, "$a+1 = 2" would cause mod() to be called with o being
1011 * OP_ADD and type being OP_SASSIGN, and would output an error.
1015 Perl_mod(pTHX_ OP *o, I32 type)
1019 /* -1 = error on localize, 0 = ignore localize, 1 = ok to localize */
1022 if (!o || PL_error_count)
1025 if ((o->op_private & OPpTARGET_MY)
1026 && (PL_opargs[o->op_type] & OA_TARGLEX))/* OPp share the meaning */
1031 switch (o->op_type) {
1037 if (!(o->op_private & (OPpCONST_ARYBASE)))
1039 if (PL_eval_start && PL_eval_start->op_type == OP_CONST) {
1040 PL_compiling.cop_arybase = (I32)SvIV(cSVOPx(PL_eval_start)->op_sv);
1044 SAVEI32(PL_compiling.cop_arybase);
1045 PL_compiling.cop_arybase = 0;
1047 else if (type == OP_REFGEN)
1050 Perl_croak(aTHX_ "That use of $[ is unsupported");
1053 if (o->op_flags & OPf_PARENS)
1057 if ((type == OP_UNDEF || type == OP_REFGEN) &&
1058 !(o->op_flags & OPf_STACKED)) {
1059 o->op_type = OP_RV2CV; /* entersub => rv2cv */
1060 /* The default is to set op_private to the number of children,
1061 which for a UNOP such as RV2CV is always 1. And w're using
1062 the bit for a flag in RV2CV, so we need it clear. */
1063 o->op_private &= ~1;
1064 o->op_ppaddr = PL_ppaddr[OP_RV2CV];
1065 assert(cUNOPo->op_first->op_type == OP_NULL);
1066 op_null(((LISTOP*)cUNOPo->op_first)->op_first);/* disable pushmark */
1069 else if (o->op_private & OPpENTERSUB_NOMOD)
1071 else { /* lvalue subroutine call */
1072 o->op_private |= OPpLVAL_INTRO;
1073 PL_modcount = RETURN_UNLIMITED_NUMBER;
1074 if (type == OP_GREPSTART || type == OP_ENTERSUB || type == OP_REFGEN) {
1075 /* Backward compatibility mode: */
1076 o->op_private |= OPpENTERSUB_INARGS;
1079 else { /* Compile-time error message: */
1080 OP *kid = cUNOPo->op_first;
1084 if (kid->op_type == OP_PUSHMARK)
1086 if (kid->op_type != OP_NULL || kid->op_targ != OP_LIST)
1088 "panic: unexpected lvalue entersub "
1089 "args: type/targ %ld:%"UVuf,
1090 (long)kid->op_type, (UV)kid->op_targ);
1091 kid = kLISTOP->op_first;
1093 while (kid->op_sibling)
1094 kid = kid->op_sibling;
1095 if (!(kid->op_type == OP_NULL && kid->op_targ == OP_RV2CV)) {
1097 if (kid->op_type == OP_METHOD_NAMED
1098 || kid->op_type == OP_METHOD)
1102 NewOp(1101, newop, 1, UNOP);
1103 newop->op_type = OP_RV2CV;
1104 newop->op_ppaddr = PL_ppaddr[OP_RV2CV];
1105 newop->op_first = Nullop;
1106 newop->op_next = (OP*)newop;
1107 kid->op_sibling = (OP*)newop;
1108 newop->op_private |= OPpLVAL_INTRO;
1109 newop->op_private &= ~1;
1113 if (kid->op_type != OP_RV2CV)
1115 "panic: unexpected lvalue entersub "
1116 "entry via type/targ %ld:%"UVuf,
1117 (long)kid->op_type, (UV)kid->op_targ);
1118 kid->op_private |= OPpLVAL_INTRO;
1119 break; /* Postpone until runtime */
1123 kid = kUNOP->op_first;
1124 if (kid->op_type == OP_NULL && kid->op_targ == OP_RV2SV)
1125 kid = kUNOP->op_first;
1126 if (kid->op_type == OP_NULL)
1128 "Unexpected constant lvalue entersub "
1129 "entry via type/targ %ld:%"UVuf,
1130 (long)kid->op_type, (UV)kid->op_targ);
1131 if (kid->op_type != OP_GV) {
1132 /* Restore RV2CV to check lvalueness */
1134 if (kid->op_next && kid->op_next != kid) { /* Happens? */
1135 okid->op_next = kid->op_next;
1136 kid->op_next = okid;
1139 okid->op_next = Nullop;
1140 okid->op_type = OP_RV2CV;
1142 okid->op_ppaddr = PL_ppaddr[OP_RV2CV];
1143 okid->op_private |= OPpLVAL_INTRO;
1144 okid->op_private &= ~1;
1148 cv = GvCV(kGVOP_gv);
1158 /* grep, foreach, subcalls, refgen, m//g */
1159 if (type == OP_GREPSTART || type == OP_ENTERSUB || type == OP_REFGEN
1160 || type == OP_MATCH)
1162 yyerror(Perl_form(aTHX_ "Can't modify %s in %s",
1163 (o->op_type == OP_NULL && (o->op_flags & OPf_SPECIAL)
1165 : (o->op_type == OP_ENTERSUB
1166 ? "non-lvalue subroutine call"
1168 type ? PL_op_desc[type] : "local"));
1182 case OP_RIGHT_SHIFT:
1191 if (!(o->op_flags & OPf_STACKED))
1198 for (kid = cUNOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
1204 if (type == OP_REFGEN && o->op_flags & OPf_PARENS) {
1205 PL_modcount = RETURN_UNLIMITED_NUMBER;
1206 return o; /* Treat \(@foo) like ordinary list. */
1210 if (scalar_mod_type(o, type))
1212 ref(cUNOPo->op_first, o->op_type);
1216 if (type == OP_LEAVESUBLV)
1217 o->op_private |= OPpMAYBE_LVSUB;
1223 PL_modcount = RETURN_UNLIMITED_NUMBER;
1226 ref(cUNOPo->op_first, o->op_type);
1231 PL_hints |= HINT_BLOCK_SCOPE;
1246 PL_modcount = RETURN_UNLIMITED_NUMBER;
1247 if (type == OP_REFGEN && o->op_flags & OPf_PARENS)
1248 return o; /* Treat \(@foo) like ordinary list. */
1249 if (scalar_mod_type(o, type))
1251 if (type == OP_LEAVESUBLV)
1252 o->op_private |= OPpMAYBE_LVSUB;
1256 if (!type) /* local() */
1257 Perl_croak(aTHX_ "Can't localize lexical variable %s",
1258 PAD_COMPNAME_PV(o->op_targ));
1266 if (type != OP_SASSIGN)
1270 if (o->op_private == 4) /* don't allow 4 arg substr as lvalue */
1275 if (type == OP_LEAVESUBLV)
1276 o->op_private |= OPpMAYBE_LVSUB;
1278 pad_free(o->op_targ);
1279 o->op_targ = pad_alloc(o->op_type, SVs_PADMY);
1280 assert(SvTYPE(PAD_SV(o->op_targ)) == SVt_NULL);
1281 if (o->op_flags & OPf_KIDS)
1282 mod(cBINOPo->op_first->op_sibling, type);
1287 ref(cBINOPo->op_first, o->op_type);
1288 if (type == OP_ENTERSUB &&
1289 !(o->op_private & (OPpLVAL_INTRO | OPpDEREF)))
1290 o->op_private |= OPpLVAL_DEFER;
1291 if (type == OP_LEAVESUBLV)
1292 o->op_private |= OPpMAYBE_LVSUB;
1302 if (o->op_flags & OPf_KIDS)
1303 mod(cLISTOPo->op_last, type);
1308 if (o->op_flags & OPf_SPECIAL) /* do BLOCK */
1310 else if (!(o->op_flags & OPf_KIDS))
1312 if (o->op_targ != OP_LIST) {
1313 mod(cBINOPo->op_first, type);
1319 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
1324 if (type != OP_LEAVESUBLV)
1326 break; /* mod()ing was handled by ck_return() */
1329 /* [20011101.069] File test operators interpret OPf_REF to mean that
1330 their argument is a filehandle; thus \stat(".") should not set
1332 if (type == OP_REFGEN &&
1333 PL_check[o->op_type] == MEMBER_TO_FPTR(Perl_ck_ftst))
1336 if (type != OP_LEAVESUBLV)
1337 o->op_flags |= OPf_MOD;
1339 if (type == OP_AASSIGN || type == OP_SASSIGN)
1340 o->op_flags |= OPf_SPECIAL|OPf_REF;
1341 else if (!type) { /* local() */
1344 o->op_private |= OPpLVAL_INTRO;
1345 o->op_flags &= ~OPf_SPECIAL;
1346 PL_hints |= HINT_BLOCK_SCOPE;
1351 if (ckWARN(WARN_SYNTAX)) {
1352 Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
1353 "Useless localization of %s", OP_DESC(o));
1357 else if (type != OP_GREPSTART && type != OP_ENTERSUB
1358 && type != OP_LEAVESUBLV)
1359 o->op_flags |= OPf_REF;
1364 S_scalar_mod_type(pTHX_ const OP *o, I32 type)
1368 if (o->op_type == OP_RV2GV)
1392 case OP_RIGHT_SHIFT:
1411 S_is_handle_constructor(pTHX_ const OP *o, I32 numargs)
1413 switch (o->op_type) {
1421 case OP_SELECT: /* XXX c.f. SelectSaver.pm */
1434 Perl_refkids(pTHX_ OP *o, I32 type)
1436 if (o && o->op_flags & OPf_KIDS) {
1438 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
1445 Perl_doref(pTHX_ OP *o, I32 type, bool set_op_ref)
1450 if (!o || PL_error_count)
1453 switch (o->op_type) {
1455 if ((type == OP_EXISTS || type == OP_DEFINED || type == OP_LOCK) &&
1456 !(o->op_flags & OPf_STACKED)) {
1457 o->op_type = OP_RV2CV; /* entersub => rv2cv */
1458 o->op_ppaddr = PL_ppaddr[OP_RV2CV];
1459 assert(cUNOPo->op_first->op_type == OP_NULL);
1460 op_null(((LISTOP*)cUNOPo->op_first)->op_first); /* disable pushmark */
1461 o->op_flags |= OPf_SPECIAL;
1462 o->op_private &= ~1;
1467 for (kid = cUNOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
1468 doref(kid, type, set_op_ref);
1471 if (type == OP_DEFINED)
1472 o->op_flags |= OPf_SPECIAL; /* don't create GV */
1473 doref(cUNOPo->op_first, o->op_type, set_op_ref);
1476 if (type == OP_RV2SV || type == OP_RV2AV || type == OP_RV2HV) {
1477 o->op_private |= (type == OP_RV2AV ? OPpDEREF_AV
1478 : type == OP_RV2HV ? OPpDEREF_HV
1480 o->op_flags |= OPf_MOD;
1485 o->op_flags |= OPf_MOD; /* XXX ??? */
1491 o->op_flags |= OPf_REF;
1494 if (type == OP_DEFINED)
1495 o->op_flags |= OPf_SPECIAL; /* don't create GV */
1496 doref(cUNOPo->op_first, o->op_type, set_op_ref);
1502 o->op_flags |= OPf_REF;
1507 if (!(o->op_flags & OPf_KIDS))
1509 doref(cBINOPo->op_first, type, set_op_ref);
1513 doref(cBINOPo->op_first, o->op_type, set_op_ref);
1514 if (type == OP_RV2SV || type == OP_RV2AV || type == OP_RV2HV) {
1515 o->op_private |= (type == OP_RV2AV ? OPpDEREF_AV
1516 : type == OP_RV2HV ? OPpDEREF_HV
1518 o->op_flags |= OPf_MOD;
1528 if (!(o->op_flags & OPf_KIDS))
1530 doref(cLISTOPo->op_last, type, set_op_ref);
1540 S_dup_attrlist(pTHX_ OP *o)
1545 /* An attrlist is either a simple OP_CONST or an OP_LIST with kids,
1546 * where the first kid is OP_PUSHMARK and the remaining ones
1547 * are OP_CONST. We need to push the OP_CONST values.
1549 if (o->op_type == OP_CONST)
1550 rop = newSVOP(OP_CONST, o->op_flags, SvREFCNT_inc(cSVOPo->op_sv));
1552 assert((o->op_type == OP_LIST) && (o->op_flags & OPf_KIDS));
1554 for (o = cLISTOPo->op_first; o; o=o->op_sibling) {
1555 if (o->op_type == OP_CONST)
1556 rop = append_elem(OP_LIST, rop,
1557 newSVOP(OP_CONST, o->op_flags,
1558 SvREFCNT_inc(cSVOPo->op_sv)));
1565 S_apply_attrs(pTHX_ HV *stash, SV *target, OP *attrs, bool for_my)
1570 /* fake up C<use attributes $pkg,$rv,@attrs> */
1571 ENTER; /* need to protect against side-effects of 'use' */
1573 stashsv = stash ? newSVhek(HvNAME_HEK(stash)) : &PL_sv_no;
1575 #define ATTRSMODULE "attributes"
1576 #define ATTRSMODULE_PM "attributes.pm"
1579 /* Don't force the C<use> if we don't need it. */
1580 SV * const * const svp = hv_fetch(GvHVn(PL_incgv), ATTRSMODULE_PM,
1581 sizeof(ATTRSMODULE_PM)-1, 0);
1582 if (svp && *svp != &PL_sv_undef)
1583 ; /* already in %INC */
1585 Perl_load_module(aTHX_ PERL_LOADMOD_NOIMPORT,
1586 newSVpvn(ATTRSMODULE, sizeof(ATTRSMODULE)-1),
1590 Perl_load_module(aTHX_ PERL_LOADMOD_IMPORT_OPS,
1591 newSVpvn(ATTRSMODULE, sizeof(ATTRSMODULE)-1),
1593 prepend_elem(OP_LIST,
1594 newSVOP(OP_CONST, 0, stashsv),
1595 prepend_elem(OP_LIST,
1596 newSVOP(OP_CONST, 0,
1598 dup_attrlist(attrs))));
1604 S_apply_attrs_my(pTHX_ HV *stash, OP *target, OP *attrs, OP **imopsp)
1607 OP *pack, *imop, *arg;
1613 assert(target->op_type == OP_PADSV ||
1614 target->op_type == OP_PADHV ||
1615 target->op_type == OP_PADAV);
1617 /* Ensure that attributes.pm is loaded. */
1618 apply_attrs(stash, PAD_SV(target->op_targ), attrs, TRUE);
1620 /* Need package name for method call. */
1621 pack = newSVOP(OP_CONST, 0, newSVpvn(ATTRSMODULE, sizeof(ATTRSMODULE)-1));
1623 /* Build up the real arg-list. */
1624 stashsv = stash ? newSVhek(HvNAME_HEK(stash)) : &PL_sv_no;
1626 arg = newOP(OP_PADSV, 0);
1627 arg->op_targ = target->op_targ;
1628 arg = prepend_elem(OP_LIST,
1629 newSVOP(OP_CONST, 0, stashsv),
1630 prepend_elem(OP_LIST,
1631 newUNOP(OP_REFGEN, 0,
1632 mod(arg, OP_REFGEN)),
1633 dup_attrlist(attrs)));
1635 /* Fake up a method call to import */
1636 meth = newSVpvs_share("import");
1637 imop = convert(OP_ENTERSUB, OPf_STACKED|OPf_SPECIAL|OPf_WANT_VOID,
1638 append_elem(OP_LIST,
1639 prepend_elem(OP_LIST, pack, list(arg)),
1640 newSVOP(OP_METHOD_NAMED, 0, meth)));
1641 imop->op_private |= OPpENTERSUB_NOMOD;
1643 /* Combine the ops. */
1644 *imopsp = append_elem(OP_LIST, *imopsp, imop);
1648 =notfor apidoc apply_attrs_string
1650 Attempts to apply a list of attributes specified by the C<attrstr> and
1651 C<len> arguments to the subroutine identified by the C<cv> argument which
1652 is expected to be associated with the package identified by the C<stashpv>
1653 argument (see L<attributes>). It gets this wrong, though, in that it
1654 does not correctly identify the boundaries of the individual attribute
1655 specifications within C<attrstr>. This is not really intended for the
1656 public API, but has to be listed here for systems such as AIX which
1657 need an explicit export list for symbols. (It's called from XS code
1658 in support of the C<ATTRS:> keyword from F<xsubpp>.) Patches to fix it
1659 to respect attribute syntax properly would be welcome.
1665 Perl_apply_attrs_string(pTHX_ const char *stashpv, CV *cv,
1666 const char *attrstr, STRLEN len)
1671 len = strlen(attrstr);
1675 for (; isSPACE(*attrstr) && len; --len, ++attrstr) ;
1677 const char * const sstr = attrstr;
1678 for (; !isSPACE(*attrstr) && len; --len, ++attrstr) ;
1679 attrs = append_elem(OP_LIST, attrs,
1680 newSVOP(OP_CONST, 0,
1681 newSVpvn(sstr, attrstr-sstr)));
1685 Perl_load_module(aTHX_ PERL_LOADMOD_IMPORT_OPS,
1686 newSVpvn(ATTRSMODULE, sizeof(ATTRSMODULE)-1),
1687 Nullsv, prepend_elem(OP_LIST,
1688 newSVOP(OP_CONST, 0, newSVpv(stashpv,0)),
1689 prepend_elem(OP_LIST,
1690 newSVOP(OP_CONST, 0,
1696 S_my_kid(pTHX_ OP *o, OP *attrs, OP **imopsp)
1701 if (!o || PL_error_count)
1705 if (type == OP_LIST) {
1707 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
1708 my_kid(kid, attrs, imopsp);
1709 } else if (type == OP_UNDEF) {
1711 } else if (type == OP_RV2SV || /* "our" declaration */
1713 type == OP_RV2HV) { /* XXX does this let anything illegal in? */
1714 if (cUNOPo->op_first->op_type != OP_GV) { /* MJD 20011224 */
1715 yyerror(Perl_form(aTHX_ "Can't declare %s in %s",
1716 OP_DESC(o), PL_in_my == KEY_our ? "our" : "my"));
1718 GV * const gv = cGVOPx_gv(cUNOPo->op_first);
1720 PL_in_my_stash = NULL;
1721 apply_attrs(GvSTASH(gv),
1722 (type == OP_RV2SV ? GvSV(gv) :
1723 type == OP_RV2AV ? (SV*)GvAV(gv) :
1724 type == OP_RV2HV ? (SV*)GvHV(gv) : (SV*)gv),
1727 o->op_private |= OPpOUR_INTRO;
1730 else if (type != OP_PADSV &&
1733 type != OP_PUSHMARK)
1735 yyerror(Perl_form(aTHX_ "Can't declare %s in \"%s\"",
1737 PL_in_my == KEY_our ? "our" : "my"));
1740 else if (attrs && type != OP_PUSHMARK) {
1744 PL_in_my_stash = NULL;
1746 /* check for C<my Dog $spot> when deciding package */
1747 stash = PAD_COMPNAME_TYPE(o->op_targ);
1749 stash = PL_curstash;
1750 apply_attrs_my(stash, o, attrs, imopsp);
1752 o->op_flags |= OPf_MOD;
1753 o->op_private |= OPpLVAL_INTRO;
1758 Perl_my_attrs(pTHX_ OP *o, OP *attrs)
1762 int maybe_scalar = 0;
1764 /* [perl #17376]: this appears to be premature, and results in code such as
1765 C< our(%x); > executing in list mode rather than void mode */
1767 if (o->op_flags & OPf_PARENS)
1777 o = my_kid(o, attrs, &rops);
1779 if (maybe_scalar && o->op_type == OP_PADSV) {
1780 o = scalar(append_list(OP_LIST, (LISTOP*)rops, (LISTOP*)o));
1781 o->op_private |= OPpLVAL_INTRO;
1784 o = append_list(OP_LIST, (LISTOP*)o, (LISTOP*)rops);
1787 PL_in_my_stash = NULL;
1792 Perl_my(pTHX_ OP *o)
1794 return my_attrs(o, Nullop);
1798 Perl_sawparens(pTHX_ OP *o)
1801 o->op_flags |= OPf_PARENS;
1806 Perl_bind_match(pTHX_ I32 type, OP *left, OP *right)
1811 if ( (left->op_type == OP_RV2AV ||
1812 left->op_type == OP_RV2HV ||
1813 left->op_type == OP_PADAV ||
1814 left->op_type == OP_PADHV)
1815 && ckWARN(WARN_MISC))
1817 const char * const desc = PL_op_desc[(right->op_type == OP_SUBST ||
1818 right->op_type == OP_TRANS)
1819 ? right->op_type : OP_MATCH];
1820 const char * const sample = ((left->op_type == OP_RV2AV ||
1821 left->op_type == OP_PADAV)
1822 ? "@array" : "%hash");
1823 Perl_warner(aTHX_ packWARN(WARN_MISC),
1824 "Applying %s to %s will act on scalar(%s)",
1825 desc, sample, sample);
1828 if (right->op_type == OP_CONST &&
1829 cSVOPx(right)->op_private & OPpCONST_BARE &&
1830 cSVOPx(right)->op_private & OPpCONST_STRICT)
1832 no_bareword_allowed(right);
1835 ismatchop = right->op_type == OP_MATCH ||
1836 right->op_type == OP_SUBST ||
1837 right->op_type == OP_TRANS;
1838 if (ismatchop && right->op_private & OPpTARGET_MY) {
1840 right->op_private &= ~OPpTARGET_MY;
1842 if (!(right->op_flags & OPf_STACKED) && ismatchop) {
1843 right->op_flags |= OPf_STACKED;
1844 /* s/// and tr/// modify their arg.
1845 * m//g also indirectly modifies the arg by setting pos magic on it */
1846 if ( (right->op_type == OP_MATCH &&
1847 (cPMOPx(right)->op_pmflags & PMf_GLOBAL))
1848 || (right->op_type == OP_SUBST)
1849 || (right->op_type == OP_TRANS &&
1850 ! (right->op_private & OPpTRANS_IDENTICAL))
1852 left = mod(left, right->op_type);
1853 if (right->op_type == OP_TRANS)
1854 o = newBINOP(OP_NULL, OPf_STACKED, scalar(left), right);
1856 o = prepend_elem(right->op_type, scalar(left), right);
1858 return newUNOP(OP_NOT, 0, scalar(o));
1862 return bind_match(type, left,
1863 pmruntime(newPMOP(OP_MATCH, 0), right, 0));
1867 Perl_invert(pTHX_ OP *o)
1871 /* XXX need to optimize away NOT NOT here? Or do we let optimizer do it? */
1872 return newUNOP(OP_NOT, OPf_SPECIAL, scalar(o));
1876 Perl_scope(pTHX_ OP *o)
1880 if (o->op_flags & OPf_PARENS || PERLDB_NOOPT || PL_tainting) {
1881 o = prepend_elem(OP_LINESEQ, newOP(OP_ENTER, 0), o);
1882 o->op_type = OP_LEAVE;
1883 o->op_ppaddr = PL_ppaddr[OP_LEAVE];
1885 else if (o->op_type == OP_LINESEQ) {
1887 o->op_type = OP_SCOPE;
1888 o->op_ppaddr = PL_ppaddr[OP_SCOPE];
1889 kid = ((LISTOP*)o)->op_first;
1890 if (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) {
1893 /* The following deals with things like 'do {1 for 1}' */
1894 kid = kid->op_sibling;
1896 (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE))
1901 o = newLISTOP(OP_SCOPE, 0, o, Nullop);
1907 Perl_block_start(pTHX_ int full)
1910 const int retval = PL_savestack_ix;
1911 pad_block_start(full);
1913 PL_hints &= ~HINT_BLOCK_SCOPE;
1914 SAVESPTR(PL_compiling.cop_warnings);
1915 if (! specialWARN(PL_compiling.cop_warnings)) {
1916 PL_compiling.cop_warnings = newSVsv(PL_compiling.cop_warnings) ;
1917 SAVEFREESV(PL_compiling.cop_warnings) ;
1919 SAVESPTR(PL_compiling.cop_io);
1920 if (! specialCopIO(PL_compiling.cop_io)) {
1921 PL_compiling.cop_io = newSVsv(PL_compiling.cop_io) ;
1922 SAVEFREESV(PL_compiling.cop_io) ;
1928 Perl_block_end(pTHX_ I32 floor, OP *seq)
1931 const int needblockscope = PL_hints & HINT_BLOCK_SCOPE;
1932 OP* const retval = scalarseq(seq);
1934 PL_compiling.op_private = (U8)(PL_hints & HINT_PRIVATE_MASK);
1936 PL_hints |= HINT_BLOCK_SCOPE; /* propagate out */
1945 const I32 offset = pad_findmy("$_");
1946 if (offset == NOT_IN_PAD || PAD_COMPNAME_FLAGS(offset) & SVpad_OUR) {
1947 return newSVREF(newGVOP(OP_GV, 0, PL_defgv));
1950 OP * const o = newOP(OP_PADSV, 0);
1951 o->op_targ = offset;
1957 Perl_newPROG(pTHX_ OP *o)
1963 PL_eval_root = newUNOP(OP_LEAVEEVAL,
1964 ((PL_in_eval & EVAL_KEEPERR)
1965 ? OPf_SPECIAL : 0), o);
1966 PL_eval_start = linklist(PL_eval_root);
1967 PL_eval_root->op_private |= OPpREFCOUNTED;
1968 OpREFCNT_set(PL_eval_root, 1);
1969 PL_eval_root->op_next = 0;
1970 CALL_PEEP(PL_eval_start);
1973 if (o->op_type == OP_STUB) {
1974 PL_comppad_name = 0;
1979 PL_main_root = scope(sawparens(scalarvoid(o)));
1980 PL_curcop = &PL_compiling;
1981 PL_main_start = LINKLIST(PL_main_root);
1982 PL_main_root->op_private |= OPpREFCOUNTED;
1983 OpREFCNT_set(PL_main_root, 1);
1984 PL_main_root->op_next = 0;
1985 CALL_PEEP(PL_main_start);
1988 /* Register with debugger */
1990 CV * const cv = get_cv("DB::postponed", FALSE);
1994 XPUSHs((SV*)CopFILEGV(&PL_compiling));
1996 call_sv((SV*)cv, G_DISCARD);
2003 Perl_localize(pTHX_ OP *o, I32 lex)
2006 if (o->op_flags & OPf_PARENS)
2007 /* [perl #17376]: this appears to be premature, and results in code such as
2008 C< our(%x); > executing in list mode rather than void mode */
2015 if ( PL_bufptr > PL_oldbufptr && PL_bufptr[-1] == ','
2016 && ckWARN(WARN_PARENTHESIS))
2018 char *s = PL_bufptr;
2021 /* some heuristics to detect a potential error */
2022 while (*s && (strchr(", \t\n", *s)))
2026 if (*s && strchr("@$%*", *s) && *++s
2027 && (isALNUM(*s) || UTF8_IS_CONTINUED(*s))) {
2030 while (*s && (isALNUM(*s) || UTF8_IS_CONTINUED(*s)))
2032 while (*s && (strchr(", \t\n", *s)))
2038 if (sigil && (*s == ';' || *s == '=')) {
2039 Perl_warner(aTHX_ packWARN(WARN_PARENTHESIS),
2040 "Parentheses missing around \"%s\" list",
2041 lex ? (PL_in_my == KEY_our ? "our" : "my")
2049 o = mod(o, OP_NULL); /* a bit kludgey */
2051 PL_in_my_stash = NULL;
2056 Perl_jmaybe(pTHX_ OP *o)
2058 if (o->op_type == OP_LIST) {
2060 o2 = newSVREF(newGVOP(OP_GV, 0, gv_fetchpv(";", GV_ADD, SVt_PV))),
2061 o = convert(OP_JOIN, 0, prepend_elem(OP_LIST, o2, o));
2067 Perl_fold_constants(pTHX_ register OP *o)
2071 I32 type = o->op_type;
2074 if (PL_opargs[type] & OA_RETSCALAR)
2076 if (PL_opargs[type] & OA_TARGET && !o->op_targ)
2077 o->op_targ = pad_alloc(type, SVs_PADTMP);
2079 /* integerize op, unless it happens to be C<-foo>.
2080 * XXX should pp_i_negate() do magic string negation instead? */
2081 if ((PL_opargs[type] & OA_OTHERINT) && (PL_hints & HINT_INTEGER)
2082 && !(type == OP_NEGATE && cUNOPo->op_first->op_type == OP_CONST
2083 && (cUNOPo->op_first->op_private & OPpCONST_BARE)))
2085 o->op_ppaddr = PL_ppaddr[type = ++(o->op_type)];
2088 if (!(PL_opargs[type] & OA_FOLDCONST))
2093 /* XXX might want a ck_negate() for this */
2094 cUNOPo->op_first->op_private &= ~OPpCONST_STRICT;
2105 /* XXX what about the numeric ops? */
2106 if (PL_hints & HINT_LOCALE)
2111 goto nope; /* Don't try to run w/ errors */
2113 for (curop = LINKLIST(o); curop != o; curop = LINKLIST(curop)) {
2114 if ((curop->op_type != OP_CONST ||
2115 (curop->op_private & OPpCONST_BARE)) &&
2116 curop->op_type != OP_LIST &&
2117 curop->op_type != OP_SCALAR &&
2118 curop->op_type != OP_NULL &&
2119 curop->op_type != OP_PUSHMARK)
2125 curop = LINKLIST(o);
2129 sv = *(PL_stack_sp--);
2130 if (o->op_targ && sv == PAD_SV(o->op_targ)) /* grab pad temp? */
2131 pad_swipe(o->op_targ, FALSE);
2132 else if (SvTEMP(sv)) { /* grab mortal temp? */
2133 (void)SvREFCNT_inc(sv);
2137 if (type == OP_RV2GV)
2138 return newGVOP(OP_GV, 0, (GV*)sv);
2139 return newSVOP(OP_CONST, 0, sv);
2146 Perl_gen_constant_list(pTHX_ register OP *o)
2150 const I32 oldtmps_floor = PL_tmps_floor;
2154 return o; /* Don't attempt to run with errors */
2156 PL_op = curop = LINKLIST(o);
2163 PL_tmps_floor = oldtmps_floor;
2165 o->op_type = OP_RV2AV;
2166 o->op_ppaddr = PL_ppaddr[OP_RV2AV];
2167 o->op_flags &= ~OPf_REF; /* treat \(1..2) like an ordinary list */
2168 o->op_flags |= OPf_PARENS; /* and flatten \(1..2,3) */
2169 o->op_opt = 0; /* needs to be revisited in peep() */
2170 curop = ((UNOP*)o)->op_first;
2171 ((UNOP*)o)->op_first = newSVOP(OP_CONST, 0, SvREFCNT_inc(*PL_stack_sp--));
2178 Perl_convert(pTHX_ I32 type, I32 flags, OP *o)
2181 if (!o || o->op_type != OP_LIST)
2182 o = newLISTOP(OP_LIST, 0, o, Nullop);
2184 o->op_flags &= ~OPf_WANT;
2186 if (!(PL_opargs[type] & OA_MARK))
2187 op_null(cLISTOPo->op_first);
2189 o->op_type = (OPCODE)type;
2190 o->op_ppaddr = PL_ppaddr[type];
2191 o->op_flags |= flags;
2193 o = CHECKOP(type, o);
2194 if (o->op_type != (unsigned)type)
2197 return fold_constants(o);
2200 /* List constructors */
2203 Perl_append_elem(pTHX_ I32 type, OP *first, OP *last)
2211 if (first->op_type != (unsigned)type
2212 || (type == OP_LIST && (first->op_flags & OPf_PARENS)))
2214 return newLISTOP(type, 0, first, last);
2217 if (first->op_flags & OPf_KIDS)
2218 ((LISTOP*)first)->op_last->op_sibling = last;
2220 first->op_flags |= OPf_KIDS;
2221 ((LISTOP*)first)->op_first = last;
2223 ((LISTOP*)first)->op_last = last;
2228 Perl_append_list(pTHX_ I32 type, LISTOP *first, LISTOP *last)
2236 if (first->op_type != (unsigned)type)
2237 return prepend_elem(type, (OP*)first, (OP*)last);
2239 if (last->op_type != (unsigned)type)
2240 return append_elem(type, (OP*)first, (OP*)last);
2242 first->op_last->op_sibling = last->op_first;
2243 first->op_last = last->op_last;
2244 first->op_flags |= (last->op_flags & OPf_KIDS);
2252 Perl_prepend_elem(pTHX_ I32 type, OP *first, OP *last)
2260 if (last->op_type == (unsigned)type) {
2261 if (type == OP_LIST) { /* already a PUSHMARK there */
2262 first->op_sibling = ((LISTOP*)last)->op_first->op_sibling;
2263 ((LISTOP*)last)->op_first->op_sibling = first;
2264 if (!(first->op_flags & OPf_PARENS))
2265 last->op_flags &= ~OPf_PARENS;
2268 if (!(last->op_flags & OPf_KIDS)) {
2269 ((LISTOP*)last)->op_last = first;
2270 last->op_flags |= OPf_KIDS;
2272 first->op_sibling = ((LISTOP*)last)->op_first;
2273 ((LISTOP*)last)->op_first = first;
2275 last->op_flags |= OPf_KIDS;
2279 return newLISTOP(type, 0, first, last);
2285 Perl_newNULLLIST(pTHX)
2287 return newOP(OP_STUB, 0);
2291 Perl_force_list(pTHX_ OP *o)
2293 if (!o || o->op_type != OP_LIST)
2294 o = newLISTOP(OP_LIST, 0, o, Nullop);
2300 Perl_newLISTOP(pTHX_ I32 type, I32 flags, OP *first, OP *last)
2305 NewOp(1101, listop, 1, LISTOP);
2307 listop->op_type = (OPCODE)type;
2308 listop->op_ppaddr = PL_ppaddr[type];
2311 listop->op_flags = (U8)flags;
2315 else if (!first && last)
2318 first->op_sibling = last;
2319 listop->op_first = first;
2320 listop->op_last = last;
2321 if (type == OP_LIST) {
2322 OP* const pushop = newOP(OP_PUSHMARK, 0);
2323 pushop->op_sibling = first;
2324 listop->op_first = pushop;
2325 listop->op_flags |= OPf_KIDS;
2327 listop->op_last = pushop;
2330 return CHECKOP(type, listop);
2334 Perl_newOP(pTHX_ I32 type, I32 flags)
2338 NewOp(1101, o, 1, OP);
2339 o->op_type = (OPCODE)type;
2340 o->op_ppaddr = PL_ppaddr[type];
2341 o->op_flags = (U8)flags;
2344 o->op_private = (U8)(0 | (flags >> 8));
2345 if (PL_opargs[type] & OA_RETSCALAR)
2347 if (PL_opargs[type] & OA_TARGET)
2348 o->op_targ = pad_alloc(type, SVs_PADTMP);
2349 return CHECKOP(type, o);
2353 Perl_newUNOP(pTHX_ I32 type, I32 flags, OP *first)
2359 first = newOP(OP_STUB, 0);
2360 if (PL_opargs[type] & OA_MARK)
2361 first = force_list(first);
2363 NewOp(1101, unop, 1, UNOP);
2364 unop->op_type = (OPCODE)type;
2365 unop->op_ppaddr = PL_ppaddr[type];
2366 unop->op_first = first;
2367 unop->op_flags = (U8)(flags | OPf_KIDS);
2368 unop->op_private = (U8)(1 | (flags >> 8));
2369 unop = (UNOP*) CHECKOP(type, unop);
2373 return fold_constants((OP *) unop);
2377 Perl_newBINOP(pTHX_ I32 type, I32 flags, OP *first, OP *last)
2381 NewOp(1101, binop, 1, BINOP);
2384 first = newOP(OP_NULL, 0);
2386 binop->op_type = (OPCODE)type;
2387 binop->op_ppaddr = PL_ppaddr[type];
2388 binop->op_first = first;
2389 binop->op_flags = (U8)(flags | OPf_KIDS);
2392 binop->op_private = (U8)(1 | (flags >> 8));
2395 binop->op_private = (U8)(2 | (flags >> 8));
2396 first->op_sibling = last;
2399 binop = (BINOP*)CHECKOP(type, binop);
2400 if (binop->op_next || binop->op_type != (OPCODE)type)
2403 binop->op_last = binop->op_first->op_sibling;
2405 return fold_constants((OP *)binop);
2408 static int uvcompare(const void *a, const void *b) __attribute__nonnull__(1) __attribute__nonnull__(2) __attribute__pure__;
2409 static int uvcompare(const void *a, const void *b)
2411 if (*((const UV *)a) < (*(const UV *)b))
2413 if (*((const UV *)a) > (*(const UV *)b))
2415 if (*((const UV *)a+1) < (*(const UV *)b+1))
2417 if (*((const UV *)a+1) > (*(const UV *)b+1))
2423 Perl_pmtrans(pTHX_ OP *o, OP *expr, OP *repl)
2426 SV * const tstr = ((SVOP*)expr)->op_sv;
2427 SV * const rstr = ((SVOP*)repl)->op_sv;
2430 const U8 *t = (U8*)SvPV_const(tstr, tlen);
2431 const U8 *r = (U8*)SvPV_const(rstr, rlen);
2435 register short *tbl;
2437 const I32 complement = o->op_private & OPpTRANS_COMPLEMENT;
2438 const I32 squash = o->op_private & OPpTRANS_SQUASH;
2439 I32 del = o->op_private & OPpTRANS_DELETE;
2440 PL_hints |= HINT_BLOCK_SCOPE;
2443 o->op_private |= OPpTRANS_FROM_UTF;
2446 o->op_private |= OPpTRANS_TO_UTF;
2448 if (o->op_private & (OPpTRANS_FROM_UTF|OPpTRANS_TO_UTF)) {
2449 SV* const listsv = newSVpvs("# comment\n");
2451 const U8* tend = t + tlen;
2452 const U8* rend = r + rlen;
2466 const I32 from_utf = o->op_private & OPpTRANS_FROM_UTF;
2467 const I32 to_utf = o->op_private & OPpTRANS_TO_UTF;
2473 t = tsave = bytes_to_utf8(t, &len);
2476 if (!to_utf && rlen) {
2478 r = rsave = bytes_to_utf8(r, &len);
2482 /* There are several snags with this code on EBCDIC:
2483 1. 0xFF is a legal UTF-EBCDIC byte (there are no illegal bytes).
2484 2. scan_const() in toke.c has encoded chars in native encoding which makes
2485 ranges at least in EBCDIC 0..255 range the bottom odd.
2489 U8 tmpbuf[UTF8_MAXBYTES+1];
2492 Newx(cp, 2*tlen, UV);
2494 transv = newSVpvs("");
2496 cp[2*i] = utf8n_to_uvuni(t, tend-t, &ulen, 0);
2498 if (t < tend && NATIVE_TO_UTF(*t) == 0xff) {
2500 cp[2*i+1] = utf8n_to_uvuni(t, tend-t, &ulen, 0);
2504 cp[2*i+1] = cp[2*i];
2508 qsort(cp, i, 2*sizeof(UV), uvcompare);
2509 for (j = 0; j < i; j++) {
2511 diff = val - nextmin;
2513 t = uvuni_to_utf8(tmpbuf,nextmin);
2514 sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf);
2516 U8 range_mark = UTF_TO_NATIVE(0xff);
2517 t = uvuni_to_utf8(tmpbuf, val - 1);
2518 sv_catpvn(transv, (char *)&range_mark, 1);
2519 sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf);
2526 t = uvuni_to_utf8(tmpbuf,nextmin);
2527 sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf);
2529 U8 range_mark = UTF_TO_NATIVE(0xff);
2530 sv_catpvn(transv, (char *)&range_mark, 1);
2532 t = uvuni_to_utf8_flags(tmpbuf, 0x7fffffff,
2533 UNICODE_ALLOW_SUPER);
2534 sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf);
2535 t = (const U8*)SvPVX_const(transv);
2536 tlen = SvCUR(transv);
2540 else if (!rlen && !del) {
2541 r = t; rlen = tlen; rend = tend;
2544 if ((!rlen && !del) || t == r ||
2545 (tlen == rlen && memEQ((char *)t, (char *)r, tlen)))
2547 o->op_private |= OPpTRANS_IDENTICAL;
2551 while (t < tend || tfirst <= tlast) {
2552 /* see if we need more "t" chars */
2553 if (tfirst > tlast) {
2554 tfirst = (I32)utf8n_to_uvuni(t, tend - t, &ulen, 0);
2556 if (t < tend && NATIVE_TO_UTF(*t) == 0xff) { /* illegal utf8 val indicates range */
2558 tlast = (I32)utf8n_to_uvuni(t, tend - t, &ulen, 0);
2565 /* now see if we need more "r" chars */
2566 if (rfirst > rlast) {
2568 rfirst = (I32)utf8n_to_uvuni(r, rend - r, &ulen, 0);
2570 if (r < rend && NATIVE_TO_UTF(*r) == 0xff) { /* illegal utf8 val indicates range */
2572 rlast = (I32)utf8n_to_uvuni(r, rend - r, &ulen, 0);
2581 rfirst = rlast = 0xffffffff;
2585 /* now see which range will peter our first, if either. */
2586 tdiff = tlast - tfirst;
2587 rdiff = rlast - rfirst;
2594 if (rfirst == 0xffffffff) {
2595 diff = tdiff; /* oops, pretend rdiff is infinite */
2597 Perl_sv_catpvf(aTHX_ listsv, "%04lx\t%04lx\tXXXX\n",
2598 (long)tfirst, (long)tlast);
2600 Perl_sv_catpvf(aTHX_ listsv, "%04lx\t\tXXXX\n", (long)tfirst);
2604 Perl_sv_catpvf(aTHX_ listsv, "%04lx\t%04lx\t%04lx\n",
2605 (long)tfirst, (long)(tfirst + diff),
2608 Perl_sv_catpvf(aTHX_ listsv, "%04lx\t\t%04lx\n",
2609 (long)tfirst, (long)rfirst);
2611 if (rfirst + diff > max)
2612 max = rfirst + diff;
2614 grows = (tfirst < rfirst &&
2615 UNISKIP(tfirst) < UNISKIP(rfirst + diff));
2627 else if (max > 0xff)
2632 Safefree(cPVOPo->op_pv);
2633 cSVOPo->op_sv = (SV*)swash_init("utf8", "", listsv, bits, none);
2634 SvREFCNT_dec(listsv);
2636 SvREFCNT_dec(transv);
2638 if (!del && havefinal && rlen)
2639 (void)hv_store((HV*)SvRV((cSVOPo->op_sv)), "FINAL", 5,
2640 newSVuv((UV)final), 0);
2643 o->op_private |= OPpTRANS_GROWS;
2655 tbl = (short*)cPVOPo->op_pv;
2657 Zero(tbl, 256, short);
2658 for (i = 0; i < (I32)tlen; i++)
2660 for (i = 0, j = 0; i < 256; i++) {
2662 if (j >= (I32)rlen) {
2671 if (i < 128 && r[j] >= 128)
2681 o->op_private |= OPpTRANS_IDENTICAL;
2683 else if (j >= (I32)rlen)
2686 cPVOPo->op_pv = (char*)Renew(tbl, 0x101+rlen-j, short);
2687 tbl[0x100] = (short)(rlen - j);
2688 for (i=0; i < (I32)rlen - j; i++)
2689 tbl[0x101+i] = r[j+i];
2693 if (!rlen && !del) {
2696 o->op_private |= OPpTRANS_IDENTICAL;
2698 else if (!squash && rlen == tlen && memEQ((char*)t, (char*)r, tlen)) {
2699 o->op_private |= OPpTRANS_IDENTICAL;
2701 for (i = 0; i < 256; i++)
2703 for (i = 0, j = 0; i < (I32)tlen; i++,j++) {
2704 if (j >= (I32)rlen) {
2706 if (tbl[t[i]] == -1)
2712 if (tbl[t[i]] == -1) {
2713 if (t[i] < 128 && r[j] >= 128)
2720 o->op_private |= OPpTRANS_GROWS;
2728 Perl_newPMOP(pTHX_ I32 type, I32 flags)
2733 NewOp(1101, pmop, 1, PMOP);
2734 pmop->op_type = (OPCODE)type;
2735 pmop->op_ppaddr = PL_ppaddr[type];
2736 pmop->op_flags = (U8)flags;
2737 pmop->op_private = (U8)(0 | (flags >> 8));
2739 if (PL_hints & HINT_RE_TAINT)
2740 pmop->op_pmpermflags |= PMf_RETAINT;
2741 if (PL_hints & HINT_LOCALE)
2742 pmop->op_pmpermflags |= PMf_LOCALE;
2743 pmop->op_pmflags = pmop->op_pmpermflags;
2746 if (av_len((AV*) PL_regex_pad[0]) > -1) {
2747 SV * const repointer = av_pop((AV*)PL_regex_pad[0]);
2748 pmop->op_pmoffset = SvIV(repointer);
2749 SvREPADTMP_off(repointer);
2750 sv_setiv(repointer,0);
2752 SV * const repointer = newSViv(0);
2753 av_push(PL_regex_padav,SvREFCNT_inc(repointer));
2754 pmop->op_pmoffset = av_len(PL_regex_padav);
2755 PL_regex_pad = AvARRAY(PL_regex_padav);
2759 /* link into pm list */
2760 if (type != OP_TRANS && PL_curstash) {
2761 MAGIC *mg = mg_find((SV*)PL_curstash, PERL_MAGIC_symtab);
2764 mg = sv_magicext((SV*)PL_curstash, 0, PERL_MAGIC_symtab, 0, 0, 0);
2766 pmop->op_pmnext = (PMOP*)mg->mg_obj;
2767 mg->mg_obj = (SV*)pmop;
2768 PmopSTASH_set(pmop,PL_curstash);
2771 return CHECKOP(type, pmop);
2774 /* Given some sort of match op o, and an expression expr containing a
2775 * pattern, either compile expr into a regex and attach it to o (if it's
2776 * constant), or convert expr into a runtime regcomp op sequence (if it's
2779 * isreg indicates that the pattern is part of a regex construct, eg
2780 * $x =~ /pattern/ or split /pattern/, as opposed to $x =~ $pattern or
2781 * split "pattern", which aren't. In the former case, expr will be a list
2782 * if the pattern contains more than one term (eg /a$b/) or if it contains
2783 * a replacement, ie s/// or tr///.
2787 Perl_pmruntime(pTHX_ OP *o, OP *expr, bool isreg)
2792 I32 repl_has_vars = 0;
2796 if (o->op_type == OP_SUBST || o->op_type == OP_TRANS) {
2797 /* last element in list is the replacement; pop it */
2799 repl = cLISTOPx(expr)->op_last;
2800 kid = cLISTOPx(expr)->op_first;
2801 while (kid->op_sibling != repl)
2802 kid = kid->op_sibling;
2803 kid->op_sibling = Nullop;
2804 cLISTOPx(expr)->op_last = kid;
2807 if (isreg && expr->op_type == OP_LIST &&
2808 cLISTOPx(expr)->op_first->op_sibling == cLISTOPx(expr)->op_last)
2810 /* convert single element list to element */
2811 OP* const oe = expr;
2812 expr = cLISTOPx(oe)->op_first->op_sibling;
2813 cLISTOPx(oe)->op_first->op_sibling = Nullop;
2814 cLISTOPx(oe)->op_last = Nullop;
2818 if (o->op_type == OP_TRANS) {
2819 return pmtrans(o, expr, repl);
2822 reglist = isreg && expr->op_type == OP_LIST;
2826 PL_hints |= HINT_BLOCK_SCOPE;
2829 if (expr->op_type == OP_CONST) {
2831 SV *pat = ((SVOP*)expr)->op_sv;
2832 const char *p = SvPV_const(pat, plen);
2833 if ((o->op_flags & OPf_SPECIAL) && (*p == ' ' && p[1] == '\0')) {
2834 U32 was_readonly = SvREADONLY(pat);
2838 sv_force_normal_flags(pat, 0);
2839 assert(!SvREADONLY(pat));
2842 SvREADONLY_off(pat);
2846 sv_setpvn(pat, "\\s+", 3);
2848 SvFLAGS(pat) |= was_readonly;
2850 p = SvPV_const(pat, plen);
2851 pm->op_pmflags |= PMf_SKIPWHITE;
2854 pm->op_pmdynflags |= PMdf_UTF8;
2855 /* FIXME - can we make this function take const char * args? */
2856 PM_SETRE(pm, CALLREGCOMP(aTHX_ (char*)p, (char*)p + plen, pm));
2857 if (strEQ("\\s+", PM_GETRE(pm)->precomp))
2858 pm->op_pmflags |= PMf_WHITE;
2862 if (pm->op_pmflags & PMf_KEEP || !(PL_hints & HINT_RE_EVAL))
2863 expr = newUNOP((!(PL_hints & HINT_RE_EVAL)
2865 : OP_REGCMAYBE),0,expr);
2867 NewOp(1101, rcop, 1, LOGOP);
2868 rcop->op_type = OP_REGCOMP;
2869 rcop->op_ppaddr = PL_ppaddr[OP_REGCOMP];
2870 rcop->op_first = scalar(expr);
2871 rcop->op_flags |= OPf_KIDS
2872 | ((PL_hints & HINT_RE_EVAL) ? OPf_SPECIAL : 0)
2873 | (reglist ? OPf_STACKED : 0);
2874 rcop->op_private = 1;
2877 rcop->op_targ = pad_alloc(rcop->op_type, SVs_PADTMP);
2879 /* /$x/ may cause an eval, since $x might be qr/(?{..})/ */
2882 /* establish postfix order */
2883 if (pm->op_pmflags & PMf_KEEP || !(PL_hints & HINT_RE_EVAL)) {
2885 rcop->op_next = expr;
2886 ((UNOP*)expr)->op_first->op_next = (OP*)rcop;
2889 rcop->op_next = LINKLIST(expr);
2890 expr->op_next = (OP*)rcop;
2893 prepend_elem(o->op_type, scalar((OP*)rcop), o);
2898 if (pm->op_pmflags & PMf_EVAL) {
2900 if (CopLINE(PL_curcop) < (line_t)PL_multi_end)
2901 CopLINE_set(PL_curcop, (line_t)PL_multi_end);
2903 else if (repl->op_type == OP_CONST)
2907 for (curop = LINKLIST(repl); curop!=repl; curop = LINKLIST(curop)) {
2908 if (PL_opargs[curop->op_type] & OA_DANGEROUS) {
2909 if (curop->op_type == OP_GV) {
2910 GV *gv = cGVOPx_gv(curop);
2912 if (strchr("&`'123456789+-\016\022", *GvENAME(gv)))
2915 else if (curop->op_type == OP_RV2CV)
2917 else if (curop->op_type == OP_RV2SV ||
2918 curop->op_type == OP_RV2AV ||
2919 curop->op_type == OP_RV2HV ||
2920 curop->op_type == OP_RV2GV) {
2921 if (lastop && lastop->op_type != OP_GV) /*funny deref?*/
2924 else if (curop->op_type == OP_PADSV ||
2925 curop->op_type == OP_PADAV ||
2926 curop->op_type == OP_PADHV ||
2927 curop->op_type == OP_PADANY) {
2930 else if (curop->op_type == OP_PUSHRE)
2931 ; /* Okay here, dangerous in newASSIGNOP */
2941 || PM_GETRE(pm)->reganch & ROPT_EVAL_SEEN))) {
2942 pm->op_pmflags |= PMf_CONST; /* const for long enough */
2943 pm->op_pmpermflags |= PMf_CONST; /* const for long enough */
2944 prepend_elem(o->op_type, scalar(repl), o);
2947 if (curop == repl && !PM_GETRE(pm)) { /* Has variables. */
2948 pm->op_pmflags |= PMf_MAYBE_CONST;
2949 pm->op_pmpermflags |= PMf_MAYBE_CONST;
2951 NewOp(1101, rcop, 1, LOGOP);
2952 rcop->op_type = OP_SUBSTCONT;
2953 rcop->op_ppaddr = PL_ppaddr[OP_SUBSTCONT];
2954 rcop->op_first = scalar(repl);
2955 rcop->op_flags |= OPf_KIDS;
2956 rcop->op_private = 1;
2959 /* establish postfix order */
2960 rcop->op_next = LINKLIST(repl);
2961 repl->op_next = (OP*)rcop;
2963 pm->op_pmreplroot = scalar((OP*)rcop);
2964 pm->op_pmreplstart = LINKLIST(rcop);
2973 Perl_newSVOP(pTHX_ I32 type, I32 flags, SV *sv)
2977 NewOp(1101, svop, 1, SVOP);
2978 svop->op_type = (OPCODE)type;
2979 svop->op_ppaddr = PL_ppaddr[type];
2981 svop->op_next = (OP*)svop;
2982 svop->op_flags = (U8)flags;
2983 if (PL_opargs[type] & OA_RETSCALAR)
2985 if (PL_opargs[type] & OA_TARGET)
2986 svop->op_targ = pad_alloc(type, SVs_PADTMP);
2987 return CHECKOP(type, svop);
2991 Perl_newPADOP(pTHX_ I32 type, I32 flags, SV *sv)
2995 NewOp(1101, padop, 1, PADOP);
2996 padop->op_type = (OPCODE)type;
2997 padop->op_ppaddr = PL_ppaddr[type];
2998 padop->op_padix = pad_alloc(type, SVs_PADTMP);
2999 SvREFCNT_dec(PAD_SVl(padop->op_padix));
3000 PAD_SETSV(padop->op_padix, sv);
3003 padop->op_next = (OP*)padop;
3004 padop->op_flags = (U8)flags;
3005 if (PL_opargs[type] & OA_RETSCALAR)
3007 if (PL_opargs[type] & OA_TARGET)
3008 padop->op_targ = pad_alloc(type, SVs_PADTMP);
3009 return CHECKOP(type, padop);
3013 Perl_newGVOP(pTHX_ I32 type, I32 flags, GV *gv)
3019 return newPADOP(type, flags, SvREFCNT_inc(gv));
3021 return newSVOP(type, flags, SvREFCNT_inc(gv));
3026 Perl_newPVOP(pTHX_ I32 type, I32 flags, char *pv)
3030 NewOp(1101, pvop, 1, PVOP);
3031 pvop->op_type = (OPCODE)type;
3032 pvop->op_ppaddr = PL_ppaddr[type];
3034 pvop->op_next = (OP*)pvop;
3035 pvop->op_flags = (U8)flags;
3036 if (PL_opargs[type] & OA_RETSCALAR)
3038 if (PL_opargs[type] & OA_TARGET)
3039 pvop->op_targ = pad_alloc(type, SVs_PADTMP);
3040 return CHECKOP(type, pvop);
3044 Perl_package(pTHX_ OP *o)
3050 save_hptr(&PL_curstash);
3051 save_item(PL_curstname);
3053 name = SvPV_const(cSVOPo->op_sv, len);
3054 PL_curstash = gv_stashpvn(name, len, TRUE);
3055 sv_setpvn(PL_curstname, name, len);
3058 PL_hints |= HINT_BLOCK_SCOPE;
3059 PL_copline = NOLINE;
3064 Perl_utilize(pTHX_ int aver, I32 floor, OP *version, OP *idop, OP *arg)
3071 if (idop->op_type != OP_CONST)
3072 Perl_croak(aTHX_ "Module name must be constant");
3077 SV * const vesv = ((SVOP*)version)->op_sv;
3079 if (!arg && !SvNIOKp(vesv)) {
3086 if (version->op_type != OP_CONST || !SvNIOKp(vesv))
3087 Perl_croak(aTHX_ "Version number must be constant number");
3089 /* Make copy of idop so we don't free it twice */
3090 pack = newSVOP(OP_CONST, 0, newSVsv(((SVOP*)idop)->op_sv));
3092 /* Fake up a method call to VERSION */
3093 meth = newSVpvs_share("VERSION");
3094 veop = convert(OP_ENTERSUB, OPf_STACKED|OPf_SPECIAL,
3095 append_elem(OP_LIST,
3096 prepend_elem(OP_LIST, pack, list(version)),
3097 newSVOP(OP_METHOD_NAMED, 0, meth)));
3101 /* Fake up an import/unimport */
3102 if (arg && arg->op_type == OP_STUB)
3103 imop = arg; /* no import on explicit () */
3104 else if (SvNIOKp(((SVOP*)idop)->op_sv)) {
3105 imop = Nullop; /* use 5.0; */
3107 idop->op_private |= OPpCONST_NOVER;
3112 /* Make copy of idop so we don't free it twice */
3113 pack = newSVOP(OP_CONST, 0, newSVsv(((SVOP*)idop)->op_sv));
3115 /* Fake up a method call to import/unimport */
3117 ? newSVpvs_share("import") : newSVpvs_share("unimport");
3118 imop = convert(OP_ENTERSUB, OPf_STACKED|OPf_SPECIAL,
3119 append_elem(OP_LIST,
3120 prepend_elem(OP_LIST, pack, list(arg)),
3121 newSVOP(OP_METHOD_NAMED, 0, meth)));
3124 /* Fake up the BEGIN {}, which does its thing immediately. */
3126 newSVOP(OP_CONST, 0, newSVpvs_share("BEGIN")),
3129 append_elem(OP_LINESEQ,
3130 append_elem(OP_LINESEQ,
3131 newSTATEOP(0, Nullch, newUNOP(OP_REQUIRE, 0, idop)),
3132 newSTATEOP(0, Nullch, veop)),
3133 newSTATEOP(0, Nullch, imop) ));
3135 /* The "did you use incorrect case?" warning used to be here.
3136 * The problem is that on case-insensitive filesystems one
3137 * might get false positives for "use" (and "require"):
3138 * "use Strict" or "require CARP" will work. This causes
3139 * portability problems for the script: in case-strict
3140 * filesystems the script will stop working.
3142 * The "incorrect case" warning checked whether "use Foo"
3143 * imported "Foo" to your namespace, but that is wrong, too:
3144 * there is no requirement nor promise in the language that
3145 * a Foo.pm should or would contain anything in package "Foo".
3147 * There is very little Configure-wise that can be done, either:
3148 * the case-sensitivity of the build filesystem of Perl does not
3149 * help in guessing the case-sensitivity of the runtime environment.
3152 PL_hints |= HINT_BLOCK_SCOPE;
3153 PL_copline = NOLINE;
3155 PL_cop_seqmax++; /* Purely for B::*'s benefit */
3159 =head1 Embedding Functions
3161 =for apidoc load_module
3163 Loads the module whose name is pointed to by the string part of name.
3164 Note that the actual module name, not its filename, should be given.
3165 Eg, "Foo::Bar" instead of "Foo/Bar.pm". flags can be any of
3166 PERL_LOADMOD_DENY, PERL_LOADMOD_NOIMPORT, or PERL_LOADMOD_IMPORT_OPS
3167 (or 0 for no flags). ver, if specified, provides version semantics
3168 similar to C<use Foo::Bar VERSION>. The optional trailing SV*
3169 arguments can be used to specify arguments to the module's import()
3170 method, similar to C<use Foo::Bar VERSION LIST>.
3175 Perl_load_module(pTHX_ U32 flags, SV *name, SV *ver, ...)
3178 va_start(args, ver);
3179 vload_module(flags, name, ver, &args);
3183 #ifdef PERL_IMPLICIT_CONTEXT
3185 Perl_load_module_nocontext(U32 flags, SV *name, SV *ver, ...)
3189 va_start(args, ver);
3190 vload_module(flags, name, ver, &args);
3196 Perl_vload_module(pTHX_ U32 flags, SV *name, SV *ver, va_list *args)
3201 OP * const modname = newSVOP(OP_CONST, 0, name);
3202 modname->op_private |= OPpCONST_BARE;
3204 veop = newSVOP(OP_CONST, 0, ver);
3208 if (flags & PERL_LOADMOD_NOIMPORT) {
3209 imop = sawparens(newNULLLIST());
3211 else if (flags & PERL_LOADMOD_IMPORT_OPS) {
3212 imop = va_arg(*args, OP*);
3217 sv = va_arg(*args, SV*);
3219 imop = append_elem(OP_LIST, imop, newSVOP(OP_CONST, 0, sv));
3220 sv = va_arg(*args, SV*);
3224 const line_t ocopline = PL_copline;
3225 COP * const ocurcop = PL_curcop;
3226 const int oexpect = PL_expect;
3228 utilize(!(flags & PERL_LOADMOD_DENY), start_subparse(FALSE, 0),
3229 veop, modname, imop);
3230 PL_expect = oexpect;
3231 PL_copline = ocopline;
3232 PL_curcop = ocurcop;
3237 Perl_dofile(pTHX_ OP *term, I32 force_builtin)
3243 if (!force_builtin) {
3244 gv = gv_fetchpv("do", 0, SVt_PVCV);
3245 if (!(gv && GvCVu(gv) && GvIMPORTED_CV(gv))) {
3246 GV * const * const gvp = (GV**)hv_fetch(PL_globalstash, "do", 2, FALSE);
3247 gv = gvp ? *gvp : Nullgv;
3251 if (gv && GvCVu(gv) && GvIMPORTED_CV(gv)) {
3252 doop = ck_subr(newUNOP(OP_ENTERSUB, OPf_STACKED,
3253 append_elem(OP_LIST, term,
3254 scalar(newUNOP(OP_RV2CV, 0,
3259 doop = newUNOP(OP_DOFILE, 0, scalar(term));
3265 Perl_newSLICEOP(pTHX_ I32 flags, OP *subscript, OP *listval)
3267 return newBINOP(OP_LSLICE, flags,
3268 list(force_list(subscript)),
3269 list(force_list(listval)) );
3273 S_is_list_assignment(pTHX_ register const OP *o)
3278 if (o->op_type == OP_NULL && o->op_flags & OPf_KIDS)
3279 o = cUNOPo->op_first;
3281 if (o->op_type == OP_COND_EXPR) {
3282 const I32 t = is_list_assignment(cLOGOPo->op_first->op_sibling);
3283 const I32 f = is_list_assignment(cLOGOPo->op_first->op_sibling->op_sibling);
3288 yyerror("Assignment to both a list and a scalar");
3292 if (o->op_type == OP_LIST &&
3293 (o->op_flags & OPf_WANT) == OPf_WANT_SCALAR &&
3294 o->op_private & OPpLVAL_INTRO)
3297 if (o->op_type == OP_LIST || o->op_flags & OPf_PARENS ||
3298 o->op_type == OP_RV2AV || o->op_type == OP_RV2HV ||
3299 o->op_type == OP_ASLICE || o->op_type == OP_HSLICE)
3302 if (o->op_type == OP_PADAV || o->op_type == OP_PADHV)
3305 if (o->op_type == OP_RV2SV)
3312 Perl_newASSIGNOP(pTHX_ I32 flags, OP *left, I32 optype, OP *right)
3318 if (optype == OP_ANDASSIGN || optype == OP_ORASSIGN || optype == OP_DORASSIGN) {
3319 return newLOGOP(optype, 0,
3320 mod(scalar(left), optype),
3321 newUNOP(OP_SASSIGN, 0, scalar(right)));
3324 return newBINOP(optype, OPf_STACKED,
3325 mod(scalar(left), optype), scalar(right));
3329 if (is_list_assignment(left)) {
3333 /* Grandfathering $[ assignment here. Bletch.*/
3334 /* Only simple assignments like C<< ($[) = 1 >> are allowed */
3335 PL_eval_start = (left->op_type == OP_CONST) ? right : 0;
3336 left = mod(left, OP_AASSIGN);
3339 else if (left->op_type == OP_CONST) {
3340 /* Result of assignment is always 1 (or we'd be dead already) */
3341 return newSVOP(OP_CONST, 0, newSViv(1));
3343 curop = list(force_list(left));
3344 o = newBINOP(OP_AASSIGN, flags, list(force_list(right)), curop);
3345 o->op_private = (U8)(0 | (flags >> 8));
3347 /* PL_generation sorcery:
3348 * an assignment like ($a,$b) = ($c,$d) is easier than
3349 * ($a,$b) = ($c,$a), since there is no need for temporary vars.
3350 * To detect whether there are common vars, the global var
3351 * PL_generation is incremented for each assign op we compile.
3352 * Then, while compiling the assign op, we run through all the
3353 * variables on both sides of the assignment, setting a spare slot
3354 * in each of them to PL_generation. If any of them already have
3355 * that value, we know we've got commonality. We could use a
3356 * single bit marker, but then we'd have to make 2 passes, first
3357 * to clear the flag, then to test and set it. To find somewhere
3358 * to store these values, evil chicanery is done with SvCUR().
3361 if (!(left->op_private & OPpLVAL_INTRO)) {
3364 for (curop = LINKLIST(o); curop != o; curop = LINKLIST(curop)) {
3365 if (PL_opargs[curop->op_type] & OA_DANGEROUS) {
3366 if (curop->op_type == OP_GV) {
3367 GV *gv = cGVOPx_gv(curop);
3368 if (gv == PL_defgv || (int)SvCUR(gv) == PL_generation)
3370 SvCUR_set(gv, PL_generation);
3372 else if (curop->op_type == OP_PADSV ||
3373 curop->op_type == OP_PADAV ||
3374 curop->op_type == OP_PADHV ||
3375 curop->op_type == OP_PADANY)
3377 if (PAD_COMPNAME_GEN(curop->op_targ)
3378 == (STRLEN)PL_generation)
3380 PAD_COMPNAME_GEN_set(curop->op_targ, PL_generation);
3383 else if (curop->op_type == OP_RV2CV)
3385 else if (curop->op_type == OP_RV2SV ||
3386 curop->op_type == OP_RV2AV ||
3387 curop->op_type == OP_RV2HV ||
3388 curop->op_type == OP_RV2GV) {
3389 if (lastop->op_type != OP_GV) /* funny deref? */
3392 else if (curop->op_type == OP_PUSHRE) {
3393 if (((PMOP*)curop)->op_pmreplroot) {
3395 GV *gv = (GV*)PAD_SVl(INT2PTR(PADOFFSET,
3396 ((PMOP*)curop)->op_pmreplroot));
3398 GV *gv = (GV*)((PMOP*)curop)->op_pmreplroot;
3400 if (gv == PL_defgv || (int)SvCUR(gv) == PL_generation)
3402 SvCUR_set(gv, PL_generation);
3411 o->op_private |= OPpASSIGN_COMMON;
3413 if (right && right->op_type == OP_SPLIT) {
3415 if ((tmpop = ((LISTOP*)right)->op_first) &&
3416 tmpop->op_type == OP_PUSHRE)
3418 PMOP * const pm = (PMOP*)tmpop;
3419 if (left->op_type == OP_RV2AV &&
3420 !(left->op_private & OPpLVAL_INTRO) &&
3421 !(o->op_private & OPpASSIGN_COMMON) )
3423 tmpop = ((UNOP*)left)->op_first;
3424 if (tmpop->op_type == OP_GV && !pm->op_pmreplroot) {
3426 pm->op_pmreplroot = INT2PTR(OP*, cPADOPx(tmpop)->op_padix);
3427 cPADOPx(tmpop)->op_padix = 0; /* steal it */
3429 pm->op_pmreplroot = (OP*)cSVOPx(tmpop)->op_sv;
3430 cSVOPx(tmpop)->op_sv = Nullsv; /* steal it */
3432 pm->op_pmflags |= PMf_ONCE;
3433 tmpop = cUNOPo->op_first; /* to list (nulled) */
3434 tmpop = ((UNOP*)tmpop)->op_first; /* to pushmark */
3435 tmpop->op_sibling = Nullop; /* don't free split */
3436 right->op_next = tmpop->op_next; /* fix starting loc */
3437 op_free(o); /* blow off assign */
3438 right->op_flags &= ~OPf_WANT;
3439 /* "I don't know and I don't care." */
3444 if (PL_modcount < RETURN_UNLIMITED_NUMBER &&
3445 ((LISTOP*)right)->op_last->op_type == OP_CONST)
3447 SV *sv = ((SVOP*)((LISTOP*)right)->op_last)->op_sv;
3449 sv_setiv(sv, PL_modcount+1);
3457 right = newOP(OP_UNDEF, 0);
3458 if (right->op_type == OP_READLINE) {
3459 right->op_flags |= OPf_STACKED;
3460 return newBINOP(OP_NULL, flags, mod(scalar(left), OP_SASSIGN), scalar(right));
3463 PL_eval_start = right; /* Grandfathering $[ assignment here. Bletch.*/
3464 o = newBINOP(OP_SASSIGN, flags,
3465 scalar(right), mod(scalar(left), OP_SASSIGN) );
3469 o = newSVOP(OP_CONST, 0, newSViv(PL_compiling.cop_arybase));
3476 Perl_newSTATEOP(pTHX_ I32 flags, char *label, OP *o)
3479 const U32 seq = intro_my();
3482 NewOp(1101, cop, 1, COP);
3483 if (PERLDB_LINE && CopLINE(PL_curcop) && PL_curstash != PL_debstash) {
3484 cop->op_type = OP_DBSTATE;
3485 cop->op_ppaddr = PL_ppaddr[ OP_DBSTATE ];
3488 cop->op_type = OP_NEXTSTATE;
3489 cop->op_ppaddr = PL_ppaddr[ OP_NEXTSTATE ];
3491 cop->op_flags = (U8)flags;
3492 cop->op_private = (U8)(PL_hints & HINT_PRIVATE_MASK);
3494 cop->op_private |= NATIVE_HINTS;
3496 PL_compiling.op_private = cop->op_private;
3497 cop->op_next = (OP*)cop;
3500 cop->cop_label = label;
3501 PL_hints |= HINT_BLOCK_SCOPE;
3504 cop->cop_arybase = PL_curcop->cop_arybase;
3505 if (specialWARN(PL_curcop->cop_warnings))
3506 cop->cop_warnings = PL_curcop->cop_warnings ;
3508 cop->cop_warnings = newSVsv(PL_curcop->cop_warnings) ;
3509 if (specialCopIO(PL_curcop->cop_io))
3510 cop->cop_io = PL_curcop->cop_io;
3512 cop->cop_io = newSVsv(PL_curcop->cop_io) ;
3515 if (PL_copline == NOLINE)
3516 CopLINE_set(cop, CopLINE(PL_curcop));
3518 CopLINE_set(cop, PL_copline);
3519 PL_copline = NOLINE;
3522 CopFILE_set(cop, CopFILE(PL_curcop)); /* XXX share in a pvtable? */
3524 CopFILEGV_set(cop, CopFILEGV(PL_curcop));
3526 CopSTASH_set(cop, PL_curstash);
3528 if (PERLDB_LINE && PL_curstash != PL_debstash) {
3529 SV * const * const svp = av_fetch(CopFILEAVx(PL_curcop), (I32)CopLINE(cop), FALSE);
3530 if (svp && *svp != &PL_sv_undef ) {
3531 (void)SvIOK_on(*svp);
3532 SvIV_set(*svp, PTR2IV(cop));
3536 return prepend_elem(OP_LINESEQ, (OP*)cop, o);
3541 Perl_newLOGOP(pTHX_ I32 type, I32 flags, OP *first, OP *other)
3544 return new_logop(type, flags, &first, &other);
3548 S_new_logop(pTHX_ I32 type, I32 flags, OP** firstp, OP** otherp)
3553 OP *first = *firstp;
3554 OP * const other = *otherp;
3556 if (type == OP_XOR) /* Not short circuit, but here by precedence. */
3557 return newBINOP(type, flags, scalar(first), scalar(other));
3559 scalarboolean(first);
3560 /* optimize "!a && b" to "a || b", and "!a || b" to "a && b" */
3561 if (first->op_type == OP_NOT && (first->op_flags & OPf_SPECIAL)) {
3562 if (type == OP_AND || type == OP_OR) {
3568 first = *firstp = cUNOPo->op_first;
3570 first->op_next = o->op_next;
3571 cUNOPo->op_first = Nullop;
3575 if (first->op_type == OP_CONST) {
3576 if (first->op_private & OPpCONST_STRICT)
3577 no_bareword_allowed(first);
3578 else if ((first->op_private & OPpCONST_BARE) && ckWARN(WARN_BAREWORD))
3579 Perl_warner(aTHX_ packWARN(WARN_BAREWORD), "Bareword found in conditional");
3580 if ((type == OP_AND && SvTRUE(((SVOP*)first)->op_sv)) ||
3581 (type == OP_OR && !SvTRUE(((SVOP*)first)->op_sv)) ||
3582 (type == OP_DOR && !SvOK(((SVOP*)first)->op_sv))) {
3585 if (other->op_type == OP_CONST)
3586 other->op_private |= OPpCONST_SHORTCIRCUIT;
3590 /* check for C<my $x if 0>, or C<my($x,$y) if 0> */
3591 const OP *o2 = other;
3592 if ( ! (o2->op_type == OP_LIST
3593 && (( o2 = cUNOPx(o2)->op_first))
3594 && o2->op_type == OP_PUSHMARK
3595 && (( o2 = o2->op_sibling)) )
3598 if ((o2->op_type == OP_PADSV || o2->op_type == OP_PADAV
3599 || o2->op_type == OP_PADHV)
3600 && o2->op_private & OPpLVAL_INTRO
3601 && ckWARN(WARN_DEPRECATED))
3603 Perl_warner(aTHX_ packWARN(WARN_DEPRECATED),
3604 "Deprecated use of my() in false conditional");
3609 if (first->op_type == OP_CONST)
3610 first->op_private |= OPpCONST_SHORTCIRCUIT;
3614 else if ((first->op_flags & OPf_KIDS) && type != OP_DOR
3615 && ckWARN(WARN_MISC)) /* [#24076] Don't warn for <FH> err FOO. */
3617 const OP * const k1 = ((UNOP*)first)->op_first;
3618 const OP * const k2 = k1->op_sibling;
3620 switch (first->op_type)
3623 if (k2 && k2->op_type == OP_READLINE
3624 && (k2->op_flags & OPf_STACKED)
3625 && ((k1->op_flags & OPf_WANT) == OPf_WANT_SCALAR))
3627 warnop = k2->op_type;
3632 if (k1->op_type == OP_READDIR
3633 || k1->op_type == OP_GLOB
3634 || (k1->op_type == OP_NULL && k1->op_targ == OP_GLOB)
3635 || k1->op_type == OP_EACH)
3637 warnop = ((k1->op_type == OP_NULL)
3638 ? (OPCODE)k1->op_targ : k1->op_type);
3643 const line_t oldline = CopLINE(PL_curcop);
3644 CopLINE_set(PL_curcop, PL_copline);
3645 Perl_warner(aTHX_ packWARN(WARN_MISC),
3646 "Value of %s%s can be \"0\"; test with defined()",
3648 ((warnop == OP_READLINE || warnop == OP_GLOB)
3649 ? " construct" : "() operator"));
3650 CopLINE_set(PL_curcop, oldline);
3657 if (type == OP_ANDASSIGN || type == OP_ORASSIGN || type == OP_DORASSIGN)
3658 other->op_private |= OPpASSIGN_BACKWARDS; /* other is an OP_SASSIGN */
3660 NewOp(1101, logop, 1, LOGOP);
3662 logop->op_type = (OPCODE)type;
3663 logop->op_ppaddr = PL_ppaddr[type];
3664 logop->op_first = first;
3665 logop->op_flags = (U8)(flags | OPf_KIDS);
3666 logop->op_other = LINKLIST(other);
3667 logop->op_private = (U8)(1 | (flags >> 8));
3669 /* establish postfix order */
3670 logop->op_next = LINKLIST(first);
3671 first->op_next = (OP*)logop;
3672 first->op_sibling = other;
3674 CHECKOP(type,logop);
3676 o = newUNOP(OP_NULL, 0, (OP*)logop);
3683 Perl_newCONDOP(pTHX_ I32 flags, OP *first, OP *trueop, OP *falseop)
3691 return newLOGOP(OP_AND, 0, first, trueop);
3693 return newLOGOP(OP_OR, 0, first, falseop);
3695 scalarboolean(first);
3696 if (first->op_type == OP_CONST) {
3697 if (first->op_private & OPpCONST_BARE &&
3698 first->op_private & OPpCONST_STRICT) {
3699 no_bareword_allowed(first);
3701 if (SvTRUE(((SVOP*)first)->op_sv)) {
3712 NewOp(1101, logop, 1, LOGOP);
3713 logop->op_type = OP_COND_EXPR;
3714 logop->op_ppaddr = PL_ppaddr[OP_COND_EXPR];
3715 logop->op_first = first;
3716 logop->op_flags = (U8)(flags | OPf_KIDS);
3717 logop->op_private = (U8)(1 | (flags >> 8));
3718 logop->op_other = LINKLIST(trueop);
3719 logop->op_next = LINKLIST(falseop);
3721 CHECKOP(OP_COND_EXPR, /* that's logop->op_type */
3724 /* establish postfix order */
3725 start = LINKLIST(first);
3726 first->op_next = (OP*)logop;
3728 first->op_sibling = trueop;
3729 trueop->op_sibling = falseop;
3730 o = newUNOP(OP_NULL, 0, (OP*)logop);
3732 trueop->op_next = falseop->op_next = o;
3739 Perl_newRANGE(pTHX_ I32 flags, OP *left, OP *right)
3748 NewOp(1101, range, 1, LOGOP);
3750 range->op_type = OP_RANGE;
3751 range->op_ppaddr = PL_ppaddr[OP_RANGE];
3752 range->op_first = left;
3753 range->op_flags = OPf_KIDS;
3754 leftstart = LINKLIST(left);
3755 range->op_other = LINKLIST(right);
3756 range->op_private = (U8)(1 | (flags >> 8));
3758 left->op_sibling = right;
3760 range->op_next = (OP*)range;
3761 flip = newUNOP(OP_FLIP, flags, (OP*)range);
3762 flop = newUNOP(OP_FLOP, 0, flip);
3763 o = newUNOP(OP_NULL, 0, flop);
3765 range->op_next = leftstart;
3767 left->op_next = flip;
3768 right->op_next = flop;
3770 range->op_targ = pad_alloc(OP_RANGE, SVs_PADMY);
3771 sv_upgrade(PAD_SV(range->op_targ), SVt_PVNV);
3772 flip->op_targ = pad_alloc(OP_RANGE, SVs_PADMY);
3773 sv_upgrade(PAD_SV(flip->op_targ), SVt_PVNV);
3775 flip->op_private = left->op_type == OP_CONST ? OPpFLIP_LINENUM : 0;
3776 flop->op_private = right->op_type == OP_CONST ? OPpFLIP_LINENUM : 0;
3779 if (!flip->op_private || !flop->op_private)
3780 linklist(o); /* blow off optimizer unless constant */
3786 Perl_newLOOPOP(pTHX_ I32 flags, I32 debuggable, OP *expr, OP *block)
3791 const bool once = block && block->op_flags & OPf_SPECIAL &&
3792 (block->op_type == OP_ENTERSUB || block->op_type == OP_NULL);
3794 PERL_UNUSED_ARG(debuggable);
3797 if (once && expr->op_type == OP_CONST && !SvTRUE(((SVOP*)expr)->op_sv))
3798 return block; /* do {} while 0 does once */
3799 if (expr->op_type == OP_READLINE || expr->op_type == OP_GLOB
3800 || (expr->op_type == OP_NULL && expr->op_targ == OP_GLOB)) {
3801 expr = newUNOP(OP_DEFINED, 0,
3802 newASSIGNOP(0, newDEFSVOP(), 0, expr) );
3803 } else if (expr->op_flags & OPf_KIDS) {
3804 const OP * const k1 = ((UNOP*)expr)->op_first;
3805 const OP * const k2 = k1 ? k1->op_sibling : NULL;
3806 switch (expr->op_type) {
3808 if (k2 && k2->op_type == OP_READLINE
3809 && (k2->op_flags & OPf_STACKED)
3810 && ((k1->op_flags & OPf_WANT) == OPf_WANT_SCALAR))
3811 expr = newUNOP(OP_DEFINED, 0, expr);
3815 if (k1->op_type == OP_READDIR
3816 || k1->op_type == OP_GLOB
3817 || (k1->op_type == OP_NULL && k1->op_targ == OP_GLOB)
3818 || k1->op_type == OP_EACH)
3819 expr = newUNOP(OP_DEFINED, 0, expr);
3825 /* if block is null, the next append_elem() would put UNSTACK, a scalar
3826 * op, in listop. This is wrong. [perl #27024] */
3828 block = newOP(OP_NULL, 0);
3829 listop = append_elem(OP_LINESEQ, block, newOP(OP_UNSTACK, 0));
3830 o = new_logop(OP_AND, 0, &expr, &listop);
3833 ((LISTOP*)listop)->op_last->op_next = LINKLIST(o);
3835 if (once && o != listop)
3836 o->op_next = ((LOGOP*)cUNOPo->op_first)->op_other;
3839 o = newUNOP(OP_NULL, 0, o); /* or do {} while 1 loses outer block */
3841 o->op_flags |= flags;
3843 o->op_flags |= OPf_SPECIAL; /* suppress POPBLOCK curpm restoration*/
3848 Perl_newWHILEOP(pTHX_ I32 flags, I32 debuggable, LOOP *loop, I32
3849 whileline, OP *expr, OP *block, OP *cont, I32 has_my)
3858 PERL_UNUSED_ARG(debuggable);
3861 if (expr->op_type == OP_READLINE || expr->op_type == OP_GLOB
3862 || (expr->op_type == OP_NULL && expr->op_targ == OP_GLOB)) {
3863 expr = newUNOP(OP_DEFINED, 0,
3864 newASSIGNOP(0, newDEFSVOP(), 0, expr) );
3865 } else if (expr->op_flags & OPf_KIDS) {
3866 const OP * const k1 = ((UNOP*)expr)->op_first;
3867 const OP * const k2 = (k1) ? k1->op_sibling : NULL;
3868 switch (expr->op_type) {
3870 if (k2 && k2->op_type == OP_READLINE
3871 && (k2->op_flags & OPf_STACKED)
3872 && ((k1->op_flags & OPf_WANT) == OPf_WANT_SCALAR))
3873 expr = newUNOP(OP_DEFINED, 0, expr);
3877 if (k1->op_type == OP_READDIR
3878 || k1->op_type == OP_GLOB
3879 || (k1->op_type == OP_NULL && k1->op_targ == OP_GLOB)
3880 || k1->op_type == OP_EACH)
3881 expr = newUNOP(OP_DEFINED, 0, expr);
3888 block = newOP(OP_NULL, 0);
3889 else if (cont || has_my) {
3890 block = scope(block);
3894 next = LINKLIST(cont);
3897 OP * const unstack = newOP(OP_UNSTACK, 0);
3900 cont = append_elem(OP_LINESEQ, cont, unstack);
3903 listop = append_list(OP_LINESEQ, (LISTOP*)block, (LISTOP*)cont);
3904 redo = LINKLIST(listop);
3907 PL_copline = (line_t)whileline;
3909 o = new_logop(OP_AND, 0, &expr, &listop);
3910 if (o == expr && o->op_type == OP_CONST && !SvTRUE(cSVOPo->op_sv)) {
3911 op_free(expr); /* oops, it's a while (0) */
3913 return Nullop; /* listop already freed by new_logop */
3916 ((LISTOP*)listop)->op_last->op_next =
3917 (o == listop ? redo : LINKLIST(o));
3923 NewOp(1101,loop,1,LOOP);
3924 loop->op_type = OP_ENTERLOOP;
3925 loop->op_ppaddr = PL_ppaddr[OP_ENTERLOOP];
3926 loop->op_private = 0;
3927 loop->op_next = (OP*)loop;
3930 o = newBINOP(OP_LEAVELOOP, 0, (OP*)loop, o);
3932 loop->op_redoop = redo;
3933 loop->op_lastop = o;
3934 o->op_private |= loopflags;
3937 loop->op_nextop = next;
3939 loop->op_nextop = o;
3941 o->op_flags |= flags;
3942 o->op_private |= (flags >> 8);
3947 Perl_newFOROP(pTHX_ I32 flags, char *label, line_t forline, OP *sv, OP *expr, OP *block, OP *cont)
3952 PADOFFSET padoff = 0;
3957 if (sv->op_type == OP_RV2SV) { /* symbol table variable */
3958 iterpflags = sv->op_private & OPpOUR_INTRO; /* for our $x () */
3959 sv->op_type = OP_RV2GV;
3960 sv->op_ppaddr = PL_ppaddr[OP_RV2GV];
3961 if (cGVOPx_gv(cUNOPx(sv)->op_first) == PL_defgv)
3962 iterpflags |= OPpITER_DEF;
3964 else if (sv->op_type == OP_PADSV) { /* private variable */
3965 iterpflags = sv->op_private & OPpLVAL_INTRO; /* for my $x () */
3966 padoff = sv->op_targ;
3971 else if (sv->op_type == OP_THREADSV) { /* per-thread variable */
3972 padoff = sv->op_targ;
3974 iterflags |= OPf_SPECIAL;
3979 Perl_croak(aTHX_ "Can't use %s for loop variable", PL_op_desc[sv->op_type]);
3980 if (padoff && strEQ(PAD_COMPNAME_PV(padoff), "$_"))
3981 iterpflags |= OPpITER_DEF;
3984 const I32 offset = pad_findmy("$_");
3985 if (offset == NOT_IN_PAD || PAD_COMPNAME_FLAGS(offset) & SVpad_OUR) {
3986 sv = newGVOP(OP_GV, 0, PL_defgv);
3991 iterpflags |= OPpITER_DEF;
3993 if (expr->op_type == OP_RV2AV || expr->op_type == OP_PADAV) {
3994 expr = mod(force_list(scalar(ref(expr, OP_ITER))), OP_GREPSTART);
3995 iterflags |= OPf_STACKED;
3997 else if (expr->op_type == OP_NULL &&
3998 (expr->op_flags & OPf_KIDS) &&
3999 ((BINOP*)expr)->op_first->op_type == OP_FLOP)
4001 /* Basically turn for($x..$y) into the same as for($x,$y), but we
4002 * set the STACKED flag to indicate that these values are to be
4003 * treated as min/max values by 'pp_iterinit'.
4005 UNOP* const flip = (UNOP*)((UNOP*)((BINOP*)expr)->op_first)->op_first;
4006 LOGOP* const range = (LOGOP*) flip->op_first;
4007 OP* const left = range->op_first;
4008 OP* const right = left->op_sibling;
4011 range->op_flags &= ~OPf_KIDS;
4012 range->op_first = Nullop;
4014 listop = (LISTOP*)newLISTOP(OP_LIST, 0, left, right);
4015 listop->op_first->op_next = range->op_next;
4016 left->op_next = range->op_other;
4017 right->op_next = (OP*)listop;
4018 listop->op_next = listop->op_first;
4021 expr = (OP*)(listop);
4023 iterflags |= OPf_STACKED;
4026 expr = mod(force_list(expr), OP_GREPSTART);
4029 loop = (LOOP*)list(convert(OP_ENTERITER, iterflags,
4030 append_elem(OP_LIST, expr, scalar(sv))));
4031 assert(!loop->op_next);
4032 /* for my $x () sets OPpLVAL_INTRO;
4033 * for our $x () sets OPpOUR_INTRO */
4034 loop->op_private = (U8)iterpflags;
4035 #ifdef PL_OP_SLAB_ALLOC
4038 NewOp(1234,tmp,1,LOOP);
4039 Copy(loop,tmp,1,LISTOP);
4044 Renew(loop, 1, LOOP);
4046 loop->op_targ = padoff;
4047 wop = newWHILEOP(flags, 1, loop, forline, newOP(OP_ITER, 0), block, cont, 0);
4048 PL_copline = forline;
4049 return newSTATEOP(0, label, wop);
4053 Perl_newLOOPEX(pTHX_ I32 type, OP *label)
4058 if (type != OP_GOTO || label->op_type == OP_CONST) {
4059 /* "last()" means "last" */
4060 if (label->op_type == OP_STUB && (label->op_flags & OPf_PARENS))
4061 o = newOP(type, OPf_SPECIAL);
4063 o = newPVOP(type, 0, savepv(label->op_type == OP_CONST
4064 ? SvPVx_nolen_const(((SVOP*)label)->op_sv)
4070 /* Check whether it's going to be a goto &function */
4071 if (label->op_type == OP_ENTERSUB
4072 && !(label->op_flags & OPf_STACKED))
4073 label = newUNOP(OP_REFGEN, 0, mod(label, OP_REFGEN));
4074 o = newUNOP(type, OPf_STACKED, label);
4076 PL_hints |= HINT_BLOCK_SCOPE;
4080 /* if the condition is a literal array or hash
4081 (or @{ ... } etc), make a reference to it.
4084 S_ref_array_or_hash(pTHX_ OP *cond)
4087 && (cond->op_type == OP_RV2AV
4088 || cond->op_type == OP_PADAV
4089 || cond->op_type == OP_RV2HV
4090 || cond->op_type == OP_PADHV))
4092 return newUNOP(OP_REFGEN,
4093 0, mod(cond, OP_REFGEN));
4099 /* These construct the optree fragments representing given()
4102 entergiven and enterwhen are LOGOPs; the op_other pointer
4103 points up to the associated leave op. We need this so we
4104 can put it in the context and make break/continue work.
4105 (Also, of course, pp_enterwhen will jump straight to
4106 op_other if the match fails.)
4111 S_newGIVWHENOP(pTHX_ OP *cond, OP *block,
4112 I32 enter_opcode, I32 leave_opcode,
4113 PADOFFSET entertarg)
4119 NewOp(1101, enterop, 1, LOGOP);
4120 enterop->op_type = enter_opcode;
4121 enterop->op_ppaddr = PL_ppaddr[enter_opcode];
4122 enterop->op_flags = (U8) OPf_KIDS;
4123 enterop->op_targ = ((entertarg == NOT_IN_PAD) ? 0 : entertarg);
4124 enterop->op_private = 0;
4126 o = newUNOP(leave_opcode, 0, (OP *) enterop);
4129 enterop->op_first = scalar(cond);
4130 cond->op_sibling = block;
4132 o->op_next = LINKLIST(cond);
4133 cond->op_next = (OP *) enterop;
4136 /* This is a default {} block */
4137 enterop->op_first = block;
4138 enterop->op_flags |= OPf_SPECIAL;
4140 o->op_next = (OP *) enterop;
4143 CHECKOP(enter_opcode, enterop); /* Currently does nothing, since
4144 entergiven and enterwhen both
4147 enterop->op_next = LINKLIST(block);
4148 block->op_next = enterop->op_other = o;
4153 /* Does this look like a boolean operation? For these purposes
4154 a boolean operation is:
4155 - a subroutine call [*]
4156 - a logical connective
4157 - a comparison operator
4158 - a filetest operator, with the exception of -s -M -A -C
4159 - defined(), exists() or eof()
4160 - /$re/ or $foo =~ /$re/
4162 [*] possibly surprising
4166 S_looks_like_bool(pTHX_ OP *o)
4169 switch(o->op_type) {
4171 return looks_like_bool(cLOGOPo->op_first);
4175 looks_like_bool(cLOGOPo->op_first)
4176 && looks_like_bool(cLOGOPo->op_first->op_sibling));
4180 case OP_NOT: case OP_XOR:
4181 /* Note that OP_DOR is not here */
4183 case OP_EQ: case OP_NE: case OP_LT:
4184 case OP_GT: case OP_LE: case OP_GE:
4186 case OP_I_EQ: case OP_I_NE: case OP_I_LT:
4187 case OP_I_GT: case OP_I_LE: case OP_I_GE:
4189 case OP_SEQ: case OP_SNE: case OP_SLT:
4190 case OP_SGT: case OP_SLE: case OP_SGE:
4194 case OP_FTRREAD: case OP_FTRWRITE: case OP_FTREXEC:
4195 case OP_FTEREAD: case OP_FTEWRITE: case OP_FTEEXEC:
4196 case OP_FTIS: case OP_FTEOWNED: case OP_FTROWNED:
4197 case OP_FTZERO: case OP_FTSOCK: case OP_FTCHR:
4198 case OP_FTBLK: case OP_FTFILE: case OP_FTDIR:
4199 case OP_FTPIPE: case OP_FTLINK: case OP_FTSUID:
4200 case OP_FTSGID: case OP_FTSVTX: case OP_FTTTY:
4201 case OP_FTTEXT: case OP_FTBINARY:
4203 case OP_DEFINED: case OP_EXISTS:
4204 case OP_MATCH: case OP_EOF:
4209 /* Detect comparisons that have been optimized away */
4210 if (cSVOPo->op_sv == &PL_sv_yes
4211 || cSVOPo->op_sv == &PL_sv_no)
4222 Perl_newGIVENOP(pTHX_ OP *cond, OP *block, PADOFFSET defsv_off)
4226 return newGIVWHENOP(
4227 ref_array_or_hash(cond),
4229 OP_ENTERGIVEN, OP_LEAVEGIVEN,
4233 /* If cond is null, this is a default {} block */
4235 Perl_newWHENOP(pTHX_ OP *cond, OP *block)
4237 bool cond_llb = (!cond || looks_like_bool(cond));
4243 cond_op = newBINOP(OP_SMARTMATCH, OPf_SPECIAL,
4245 scalar(ref_array_or_hash(cond)));
4248 return newGIVWHENOP(
4250 append_elem(block->op_type, block, newOP(OP_BREAK, OPf_SPECIAL)),
4251 OP_ENTERWHEN, OP_LEAVEWHEN, 0);
4255 =for apidoc cv_undef
4257 Clear out all the active components of a CV. This can happen either
4258 by an explicit C<undef &foo>, or by the reference count going to zero.
4259 In the former case, we keep the CvOUTSIDE pointer, so that any anonymous
4260 children can still follow the full lexical scope chain.
4266 Perl_cv_undef(pTHX_ CV *cv)
4270 if (CvFILE(cv) && !CvXSUB(cv)) {
4271 /* for XSUBs CvFILE point directly to static memory; __FILE__ */
4272 Safefree(CvFILE(cv));
4277 if (!CvXSUB(cv) && CvROOT(cv)) {
4279 Perl_croak(aTHX_ "Can't undef active subroutine");
4282 PAD_SAVE_SETNULLPAD();
4284 op_free(CvROOT(cv));
4285 CvROOT(cv) = Nullop;
4286 CvSTART(cv) = Nullop;
4289 SvPOK_off((SV*)cv); /* forget prototype */
4294 /* remove CvOUTSIDE unless this is an undef rather than a free */
4295 if (!SvREFCNT(cv) && CvOUTSIDE(cv)) {
4296 if (!CvWEAKOUTSIDE(cv))
4297 SvREFCNT_dec(CvOUTSIDE(cv));
4298 CvOUTSIDE(cv) = Nullcv;
4301 SvREFCNT_dec((SV*)CvXSUBANY(cv).any_ptr);
4307 /* delete all flags except WEAKOUTSIDE */
4308 CvFLAGS(cv) &= CVf_WEAKOUTSIDE;
4312 Perl_cv_ckproto(pTHX_ const CV *cv, const GV *gv, const char *p)
4314 if (((!p != !SvPOK(cv)) || (p && strNE(p, SvPVX_const(cv)))) && ckWARN_d(WARN_PROTOTYPE)) {
4315 SV* const msg = sv_newmortal();
4319 gv_efullname3(name = sv_newmortal(), gv, Nullch);
4320 sv_setpv(msg, "Prototype mismatch:");
4322 Perl_sv_catpvf(aTHX_ msg, " sub %"SVf, name);
4324 Perl_sv_catpvf(aTHX_ msg, " (%"SVf")", (const SV *)cv);
4326 sv_catpvs(msg, ": none");
4327 sv_catpvs(msg, " vs ");
4329 Perl_sv_catpvf(aTHX_ msg, "(%s)", p);
4331 sv_catpvs(msg, "none");
4332 Perl_warner(aTHX_ packWARN(WARN_PROTOTYPE), "%"SVf, msg);
4336 static void const_sv_xsub(pTHX_ CV* cv);
4340 =head1 Optree Manipulation Functions
4342 =for apidoc cv_const_sv
4344 If C<cv> is a constant sub eligible for inlining. returns the constant
4345 value returned by the sub. Otherwise, returns NULL.
4347 Constant subs can be created with C<newCONSTSUB> or as described in
4348 L<perlsub/"Constant Functions">.
4353 Perl_cv_const_sv(pTHX_ CV *cv)
4357 if (!(SvTYPE(cv) == SVt_PVCV || SvTYPE(cv) == SVt_PVFM))
4359 return CvCONST(cv) ? (SV*)CvXSUBANY(cv).any_ptr : NULL;
4362 /* op_const_sv: examine an optree to determine whether it's in-lineable.
4363 * Can be called in 3 ways:
4366 * look for a single OP_CONST with attached value: return the value
4368 * cv && CvCLONE(cv) && !CvCONST(cv)
4370 * examine the clone prototype, and if contains only a single
4371 * OP_CONST referencing a pad const, or a single PADSV referencing
4372 * an outer lexical, return a non-zero value to indicate the CV is
4373 * a candidate for "constizing" at clone time
4377 * We have just cloned an anon prototype that was marked as a const
4378 * candidiate. Try to grab the current value, and in the case of
4379 * PADSV, ignore it if it has multiple references. Return the value.
4383 Perl_op_const_sv(pTHX_ const OP *o, CV *cv)
4391 if (o->op_type == OP_LINESEQ && cLISTOPo->op_first)
4392 o = cLISTOPo->op_first->op_sibling;
4394 for (; o; o = o->op_next) {
4395 const OPCODE type = o->op_type;
4397 if (sv && o->op_next == o)
4399 if (o->op_next != o) {
4400 if (type == OP_NEXTSTATE || type == OP_NULL || type == OP_PUSHMARK)
4402 if (type == OP_DBSTATE)
4405 if (type == OP_LEAVESUB || type == OP_RETURN)
4409 if (type == OP_CONST && cSVOPo->op_sv)
4411 else if (cv && type == OP_CONST) {
4412 sv = PAD_BASE_SV(CvPADLIST(cv), o->op_targ);
4416 else if (cv && type == OP_PADSV) {
4417 if (CvCONST(cv)) { /* newly cloned anon */
4418 sv = PAD_BASE_SV(CvPADLIST(cv), o->op_targ);
4419 /* the candidate should have 1 ref from this pad and 1 ref
4420 * from the parent */
4421 if (!sv || SvREFCNT(sv) != 2)
4428 if (PAD_COMPNAME_FLAGS(o->op_targ) & SVf_FAKE)
4429 sv = &PL_sv_undef; /* an arbitrary non-null value */
4440 Perl_newMYSUB(pTHX_ I32 floor, OP *o, OP *proto, OP *attrs, OP *block)
4442 PERL_UNUSED_ARG(floor);
4452 Perl_croak(aTHX_ "\"my sub\" not yet implemented");
4456 Perl_newSUB(pTHX_ I32 floor, OP *o, OP *proto, OP *block)
4458 return Perl_newATTRSUB(aTHX_ floor, o, proto, Nullop, block);
4462 Perl_newATTRSUB(pTHX_ I32 floor, OP *o, OP *proto, OP *attrs, OP *block)
4469 register CV *cv = NULL;
4471 /* If the subroutine has no body, no attributes, and no builtin attributes
4472 then it's just a sub declaration, and we may be able to get away with
4473 storing with a placeholder scalar in the symbol table, rather than a
4474 full GV and CV. If anything is present then it will take a full CV to
4476 const I32 gv_fetch_flags
4477 = (block || attrs || (CvFLAGS(PL_compcv) & CVf_BUILTIN_ATTRS))
4478 ? GV_ADDMULTI : GV_ADDMULTI | GV_NOINIT;
4479 const char * const name = o ? SvPVx_nolen_const(cSVOPo->op_sv) : Nullch;
4482 assert(proto->op_type == OP_CONST);
4483 ps = SvPVx_const(((SVOP*)proto)->op_sv, ps_len);
4488 if (!name && PERLDB_NAMEANON && CopLINE(PL_curcop)) {
4489 SV * const sv = sv_newmortal();
4490 Perl_sv_setpvf(aTHX_ sv, "%s[%s:%"IVdf"]",
4491 PL_curstash ? "__ANON__" : "__ANON__::__ANON__",
4492 CopFILE(PL_curcop), (IV)CopLINE(PL_curcop));
4493 aname = SvPVX_const(sv);
4498 gv = name ? gv_fetchsv(cSVOPo->op_sv, gv_fetch_flags, SVt_PVCV)
4499 : gv_fetchpv(aname ? aname
4500 : (PL_curstash ? "__ANON__" : "__ANON__::__ANON__"),
4501 gv_fetch_flags, SVt_PVCV);
4510 if (SvTYPE(gv) != SVt_PVGV) { /* Maybe prototype now, and had at
4511 maximum a prototype before. */
4512 if (SvTYPE(gv) > SVt_NULL) {
4513 if (!SvPOK((SV*)gv) && !(SvIOK((SV*)gv) && SvIVX((SV*)gv) == -1)
4514 && ckWARN_d(WARN_PROTOTYPE))
4516 Perl_warner(aTHX_ packWARN(WARN_PROTOTYPE), "Runaway prototype");
4518 cv_ckproto((CV*)gv, NULL, ps);
4521 sv_setpvn((SV*)gv, ps, ps_len);
4523 sv_setiv((SV*)gv, -1);
4524 SvREFCNT_dec(PL_compcv);
4525 cv = PL_compcv = NULL;
4526 PL_sub_generation++;
4530 cv = (!name || GvCVGEN(gv)) ? Nullcv : GvCV(gv);
4532 #ifdef GV_UNIQUE_CHECK
4533 if (cv && GvUNIQUE(gv) && SvREADONLY(cv)) {
4534 Perl_croak(aTHX_ "Can't define subroutine %s (GV is unique)", name);
4538 if (!block || !ps || *ps || attrs || (CvFLAGS(PL_compcv) & CVf_BUILTIN_ATTRS))
4541 const_sv = op_const_sv(block, Nullcv);
4544 const bool exists = CvROOT(cv) || CvXSUB(cv);
4546 #ifdef GV_UNIQUE_CHECK
4547 if (exists && GvUNIQUE(gv)) {
4548 Perl_croak(aTHX_ "Can't redefine unique subroutine %s", name);
4552 /* if the subroutine doesn't exist and wasn't pre-declared
4553 * with a prototype, assume it will be AUTOLOADed,
4554 * skipping the prototype check
4556 if (exists || SvPOK(cv))
4557 cv_ckproto(cv, gv, ps);
4558 /* already defined (or promised)? */
4559 if (exists || GvASSUMECV(gv)) {
4560 if (!block && !attrs) {
4561 if (CvFLAGS(PL_compcv)) {
4562 /* might have had built-in attrs applied */
4563 CvFLAGS(cv) |= (CvFLAGS(PL_compcv) & CVf_BUILTIN_ATTRS);
4565 /* just a "sub foo;" when &foo is already defined */
4566 SAVEFREESV(PL_compcv);
4570 if (ckWARN(WARN_REDEFINE)
4572 && (!const_sv || sv_cmp(cv_const_sv(cv), const_sv))))
4574 const line_t oldline = CopLINE(PL_curcop);
4575 if (PL_copline != NOLINE)
4576 CopLINE_set(PL_curcop, PL_copline);
4577 Perl_warner(aTHX_ packWARN(WARN_REDEFINE),
4578 CvCONST(cv) ? "Constant subroutine %s redefined"
4579 : "Subroutine %s redefined", name);
4580 CopLINE_set(PL_curcop, oldline);
4588 (void)SvREFCNT_inc(const_sv);
4590 assert(!CvROOT(cv) && !CvCONST(cv));
4591 sv_setpvn((SV*)cv, "", 0); /* prototype is "" */
4592 CvXSUBANY(cv).any_ptr = const_sv;
4593 CvXSUB(cv) = const_sv_xsub;
4598 cv = newCONSTSUB(NULL, name, const_sv);
4601 SvREFCNT_dec(PL_compcv);
4603 PL_sub_generation++;
4610 /* Need to do a C<use attributes $stash_of_cv,\&cv,@attrs>
4611 * before we clobber PL_compcv.
4615 /* Might have had built-in attributes applied -- propagate them. */
4616 CvFLAGS(cv) |= (CvFLAGS(PL_compcv) & CVf_BUILTIN_ATTRS);
4617 if (CvGV(cv) && GvSTASH(CvGV(cv)))
4618 stash = GvSTASH(CvGV(cv));
4619 else if (CvSTASH(cv))
4620 stash = CvSTASH(cv);
4622 stash = PL_curstash;
4625 /* possibly about to re-define existing subr -- ignore old cv */
4626 rcv = (SV*)PL_compcv;
4627 if (name && GvSTASH(gv))
4628 stash = GvSTASH(gv);
4630 stash = PL_curstash;
4632 apply_attrs(stash, rcv, attrs, FALSE);
4634 if (cv) { /* must reuse cv if autoloaded */
4636 /* got here with just attrs -- work done, so bug out */
4637 SAVEFREESV(PL_compcv);
4640 /* transfer PL_compcv to cv */
4642 CvFLAGS(cv) = CvFLAGS(PL_compcv);
4643 if (!CvWEAKOUTSIDE(cv))
4644 SvREFCNT_dec(CvOUTSIDE(cv));
4645 CvOUTSIDE(cv) = CvOUTSIDE(PL_compcv);
4646 CvOUTSIDE_SEQ(cv) = CvOUTSIDE_SEQ(PL_compcv);
4647 CvOUTSIDE(PL_compcv) = 0;
4648 CvPADLIST(cv) = CvPADLIST(PL_compcv);
4649 CvPADLIST(PL_compcv) = 0;
4650 /* inner references to PL_compcv must be fixed up ... */
4651 pad_fixup_inner_anons(CvPADLIST(cv), PL_compcv, cv);
4652 /* ... before we throw it away */
4653 SvREFCNT_dec(PL_compcv);
4655 if (PERLDB_INTER)/* Advice debugger on the new sub. */
4656 ++PL_sub_generation;
4663 PL_sub_generation++;
4667 CvFILE_set_from_cop(cv, PL_curcop);
4668 CvSTASH(cv) = PL_curstash;
4671 sv_setpvn((SV*)cv, ps, ps_len);
4673 if (PL_error_count) {
4677 const char *s = strrchr(name, ':');
4679 if (strEQ(s, "BEGIN")) {
4680 const char not_safe[] =
4681 "BEGIN not safe after errors--compilation aborted";
4682 if (PL_in_eval & EVAL_KEEPERR)
4683 Perl_croak(aTHX_ not_safe);
4685 /* force display of errors found but not reported */
4686 sv_catpv(ERRSV, not_safe);
4687 Perl_croak(aTHX_ "%"SVf, ERRSV);
4696 CvROOT(cv) = newUNOP(OP_LEAVESUBLV, 0,
4697 mod(scalarseq(block), OP_LEAVESUBLV));
4700 /* This makes sub {}; work as expected. */
4701 if (block->op_type == OP_STUB) {
4703 block = newSTATEOP(0, Nullch, 0);
4705 CvROOT(cv) = newUNOP(OP_LEAVESUB, 0, scalarseq(block));
4707 CvROOT(cv)->op_private |= OPpREFCOUNTED;
4708 OpREFCNT_set(CvROOT(cv), 1);
4709 CvSTART(cv) = LINKLIST(CvROOT(cv));
4710 CvROOT(cv)->op_next = 0;
4711 CALL_PEEP(CvSTART(cv));
4713 /* now that optimizer has done its work, adjust pad values */
4715 pad_tidy(CvCLONE(cv) ? padtidy_SUBCLONE : padtidy_SUB);
4718 assert(!CvCONST(cv));
4719 if (ps && !*ps && op_const_sv(block, cv))
4723 if (name || aname) {
4725 const char * const tname = (name ? name : aname);
4727 if (PERLDB_SUBLINE && PL_curstash != PL_debstash) {
4728 SV * const sv = NEWSV(0,0);
4729 SV * const tmpstr = sv_newmortal();
4730 GV * const db_postponed = gv_fetchpv("DB::postponed", GV_ADDMULTI, SVt_PVHV);
4733 Perl_sv_setpvf(aTHX_ sv, "%s:%ld-%ld",
4735 (long)PL_subline, (long)CopLINE(PL_curcop));
4736 gv_efullname3(tmpstr, gv, Nullch);
4737 hv_store(GvHV(PL_DBsub), SvPVX_const(tmpstr), SvCUR(tmpstr), sv, 0);
4738 hv = GvHVn(db_postponed);
4739 if (HvFILL(hv) > 0 && hv_exists(hv, SvPVX_const(tmpstr), SvCUR(tmpstr))) {
4740 CV * const pcv = GvCV(db_postponed);
4746 call_sv((SV*)pcv, G_DISCARD);
4751 if ((s = strrchr(tname,':')))
4756 if (*s != 'B' && *s != 'E' && *s != 'C' && *s != 'I')
4759 if (strEQ(s, "BEGIN") && !PL_error_count) {
4760 const I32 oldscope = PL_scopestack_ix;
4762 SAVECOPFILE(&PL_compiling);
4763 SAVECOPLINE(&PL_compiling);
4766 PL_beginav = newAV();
4767 DEBUG_x( dump_sub(gv) );
4768 av_push(PL_beginav, (SV*)cv);
4769 GvCV(gv) = 0; /* cv has been hijacked */
4770 call_list(oldscope, PL_beginav);
4772 PL_curcop = &PL_compiling;
4773 PL_compiling.op_private = (U8)(PL_hints & HINT_PRIVATE_MASK);
4776 else if (strEQ(s, "END") && !PL_error_count) {
4779 DEBUG_x( dump_sub(gv) );
4780 av_unshift(PL_endav, 1);
4781 av_store(PL_endav, 0, (SV*)cv);
4782 GvCV(gv) = 0; /* cv has been hijacked */
4784 else if (strEQ(s, "CHECK") && !PL_error_count) {
4786 PL_checkav = newAV();
4787 DEBUG_x( dump_sub(gv) );
4788 if (PL_main_start && ckWARN(WARN_VOID))
4789 Perl_warner(aTHX_ packWARN(WARN_VOID), "Too late to run CHECK block");
4790 av_unshift(PL_checkav, 1);
4791 av_store(PL_checkav, 0, (SV*)cv);
4792 GvCV(gv) = 0; /* cv has been hijacked */
4794 else if (strEQ(s, "INIT") && !PL_error_count) {
4796 PL_initav = newAV();
4797 DEBUG_x( dump_sub(gv) );
4798 if (PL_main_start && ckWARN(WARN_VOID))
4799 Perl_warner(aTHX_ packWARN(WARN_VOID), "Too late to run INIT block");
4800 av_push(PL_initav, (SV*)cv);
4801 GvCV(gv) = 0; /* cv has been hijacked */
4806 PL_copline = NOLINE;
4811 /* XXX unsafe for threads if eval_owner isn't held */
4813 =for apidoc newCONSTSUB
4815 Creates a constant sub equivalent to Perl C<sub FOO () { 123 }> which is
4816 eligible for inlining at compile-time.
4822 Perl_newCONSTSUB(pTHX_ HV *stash, const char *name, SV *sv)
4829 SAVECOPLINE(PL_curcop);
4830 CopLINE_set(PL_curcop, PL_copline);
4833 PL_hints &= ~HINT_BLOCK_SCOPE;
4836 SAVESPTR(PL_curstash);
4837 SAVECOPSTASH(PL_curcop);
4838 PL_curstash = stash;
4839 CopSTASH_set(PL_curcop,stash);
4842 cv = newXS(name, const_sv_xsub, savepv(CopFILE(PL_curcop)));
4843 CvXSUBANY(cv).any_ptr = sv;
4845 sv_setpvn((SV*)cv, "", 0); /* prototype is "" */
4849 CopSTASH_free(PL_curcop);
4857 =for apidoc U||newXS
4859 Used by C<xsubpp> to hook up XSUBs as Perl subs.
4865 Perl_newXS(pTHX_ const char *name, XSUBADDR_t subaddr, const char *filename)
4868 GV * const gv = gv_fetchpv(name ? name :
4869 (PL_curstash ? "__ANON__" : "__ANON__::__ANON__"),
4870 GV_ADDMULTI, SVt_PVCV);
4874 Perl_croak(aTHX_ "panic: no address for '%s' in '%s'", name, filename);
4876 if ((cv = (name ? GvCV(gv) : Nullcv))) {
4878 /* just a cached method */
4882 else if (CvROOT(cv) || CvXSUB(cv) || GvASSUMECV(gv)) {
4883 /* already defined (or promised) */
4884 /* XXX It's possible for this HvNAME_get to return null, and get passed into strEQ */
4885 if (ckWARN(WARN_REDEFINE)) {
4886 GV * const gvcv = CvGV(cv);
4888 HV * const stash = GvSTASH(gvcv);
4890 const char *name = HvNAME_get(stash);
4891 if ( strEQ(name,"autouse") ) {
4892 const line_t oldline = CopLINE(PL_curcop);
4893 if (PL_copline != NOLINE)
4894 CopLINE_set(PL_curcop, PL_copline);
4895 Perl_warner(aTHX_ packWARN(WARN_REDEFINE),
4896 CvCONST(cv) ? "Constant subroutine %s redefined"
4897 : "Subroutine %s redefined"
4899 CopLINE_set(PL_curcop, oldline);
4909 if (cv) /* must reuse cv if autoloaded */
4912 cv = (CV*)NEWSV(1105,0);
4913 sv_upgrade((SV *)cv, SVt_PVCV);
4917 PL_sub_generation++;
4921 (void)gv_fetchfile(filename);
4922 CvFILE(cv) = (char *)filename; /* NOTE: not copied, as it is expected to be
4923 an external constant string */
4924 CvXSUB(cv) = subaddr;
4927 const char *s = strrchr(name,':');
4933 if (*s != 'B' && *s != 'E' && *s != 'C' && *s != 'I')
4936 if (strEQ(s, "BEGIN")) {
4938 PL_beginav = newAV();
4939 av_push(PL_beginav, (SV*)cv);
4940 GvCV(gv) = 0; /* cv has been hijacked */
4942 else if (strEQ(s, "END")) {
4945 av_unshift(PL_endav, 1);
4946 av_store(PL_endav, 0, (SV*)cv);
4947 GvCV(gv) = 0; /* cv has been hijacked */
4949 else if (strEQ(s, "CHECK")) {
4951 PL_checkav = newAV();
4952 if (PL_main_start && ckWARN(WARN_VOID))
4953 Perl_warner(aTHX_ packWARN(WARN_VOID), "Too late to run CHECK block");
4954 av_unshift(PL_checkav, 1);
4955 av_store(PL_checkav, 0, (SV*)cv);
4956 GvCV(gv) = 0; /* cv has been hijacked */
4958 else if (strEQ(s, "INIT")) {
4960 PL_initav = newAV();
4961 if (PL_main_start && ckWARN(WARN_VOID))
4962 Perl_warner(aTHX_ packWARN(WARN_VOID), "Too late to run INIT block");
4963 av_push(PL_initav, (SV*)cv);
4964 GvCV(gv) = 0; /* cv has been hijacked */
4975 Perl_newFORM(pTHX_ I32 floor, OP *o, OP *block)
4981 ? gv_fetchsv(cSVOPo->op_sv, GV_ADD, SVt_PVFM)
4982 : gv_fetchpv("STDOUT", GV_ADD, SVt_PVFM);
4984 #ifdef GV_UNIQUE_CHECK
4986 Perl_croak(aTHX_ "Bad symbol for form (GV is unique)");
4990 if ((cv = GvFORM(gv))) {
4991 if (ckWARN(WARN_REDEFINE)) {
4992 const line_t oldline = CopLINE(PL_curcop);
4993 if (PL_copline != NOLINE)
4994 CopLINE_set(PL_curcop, PL_copline);
4995 Perl_warner(aTHX_ packWARN(WARN_REDEFINE),
4996 o ? "Format %"SVf" redefined"
4997 : "Format STDOUT redefined" ,cSVOPo->op_sv);
4998 CopLINE_set(PL_curcop, oldline);
5005 CvFILE_set_from_cop(cv, PL_curcop);
5008 pad_tidy(padtidy_FORMAT);
5009 CvROOT(cv) = newUNOP(OP_LEAVEWRITE, 0, scalarseq(block));
5010 CvROOT(cv)->op_private |= OPpREFCOUNTED;
5011 OpREFCNT_set(CvROOT(cv), 1);
5012 CvSTART(cv) = LINKLIST(CvROOT(cv));
5013 CvROOT(cv)->op_next = 0;
5014 CALL_PEEP(CvSTART(cv));
5016 PL_copline = NOLINE;
5021 Perl_newANONLIST(pTHX_ OP *o)
5023 return newUNOP(OP_REFGEN, 0,
5024 mod(list(convert(OP_ANONLIST, 0, o)), OP_REFGEN));
5028 Perl_newANONHASH(pTHX_ OP *o)
5030 return newUNOP(OP_REFGEN, 0,
5031 mod(list(convert(OP_ANONHASH, 0, o)), OP_REFGEN));
5035 Perl_newANONSUB(pTHX_ I32 floor, OP *proto, OP *block)
5037 return newANONATTRSUB(floor, proto, Nullop, block);
5041 Perl_newANONATTRSUB(pTHX_ I32 floor, OP *proto, OP *attrs, OP *block)
5043 return newUNOP(OP_REFGEN, 0,
5044 newSVOP(OP_ANONCODE, 0,
5045 (SV*)newATTRSUB(floor, 0, proto, attrs, block)));
5049 Perl_oopsAV(pTHX_ OP *o)
5052 switch (o->op_type) {
5054 o->op_type = OP_PADAV;
5055 o->op_ppaddr = PL_ppaddr[OP_PADAV];
5056 return ref(o, OP_RV2AV);
5059 o->op_type = OP_RV2AV;
5060 o->op_ppaddr = PL_ppaddr[OP_RV2AV];
5065 if (ckWARN_d(WARN_INTERNAL))
5066 Perl_warner(aTHX_ packWARN(WARN_INTERNAL), "oops: oopsAV");
5073 Perl_oopsHV(pTHX_ OP *o)
5076 switch (o->op_type) {
5079 o->op_type = OP_PADHV;
5080 o->op_ppaddr = PL_ppaddr[OP_PADHV];
5081 return ref(o, OP_RV2HV);
5085 o->op_type = OP_RV2HV;
5086 o->op_ppaddr = PL_ppaddr[OP_RV2HV];
5091 if (ckWARN_d(WARN_INTERNAL))
5092 Perl_warner(aTHX_ packWARN(WARN_INTERNAL), "oops: oopsHV");
5099 Perl_newAVREF(pTHX_ OP *o)
5102 if (o->op_type == OP_PADANY) {
5103 o->op_type = OP_PADAV;
5104 o->op_ppaddr = PL_ppaddr[OP_PADAV];
5107 else if ((o->op_type == OP_RV2AV || o->op_type == OP_PADAV)
5108 && ckWARN(WARN_DEPRECATED)) {
5109 Perl_warner(aTHX_ packWARN(WARN_DEPRECATED),
5110 "Using an array as a reference is deprecated");
5112 return newUNOP(OP_RV2AV, 0, scalar(o));
5116 Perl_newGVREF(pTHX_ I32 type, OP *o)
5118 if (type == OP_MAPSTART || type == OP_GREPSTART || type == OP_SORT)
5119 return newUNOP(OP_NULL, 0, o);
5120 return ref(newUNOP(OP_RV2GV, OPf_REF, o), type);
5124 Perl_newHVREF(pTHX_ OP *o)
5127 if (o->op_type == OP_PADANY) {
5128 o->op_type = OP_PADHV;
5129 o->op_ppaddr = PL_ppaddr[OP_PADHV];
5132 else if ((o->op_type == OP_RV2HV || o->op_type == OP_PADHV)
5133 && ckWARN(WARN_DEPRECATED)) {
5134 Perl_warner(aTHX_ packWARN(WARN_DEPRECATED),
5135 "Using a hash as a reference is deprecated");
5137 return newUNOP(OP_RV2HV, 0, scalar(o));
5141 Perl_newCVREF(pTHX_ I32 flags, OP *o)
5143 return newUNOP(OP_RV2CV, flags, scalar(o));
5147 Perl_newSVREF(pTHX_ OP *o)
5150 if (o->op_type == OP_PADANY) {
5151 o->op_type = OP_PADSV;
5152 o->op_ppaddr = PL_ppaddr[OP_PADSV];
5155 else if (o->op_type == OP_THREADSV && !(o->op_flags & OPpDONE_SVREF)) {
5156 o->op_flags |= OPpDONE_SVREF;
5159 return newUNOP(OP_RV2SV, 0, scalar(o));
5162 /* Check routines. See the comments at the top of this file for details
5163 * on when these are called */
5166 Perl_ck_anoncode(pTHX_ OP *o)
5168 cSVOPo->op_targ = pad_add_anon(cSVOPo->op_sv, o->op_type);
5169 cSVOPo->op_sv = Nullsv;
5174 Perl_ck_bitop(pTHX_ OP *o)
5177 #define OP_IS_NUMCOMPARE(op) \
5178 ((op) == OP_LT || (op) == OP_I_LT || \
5179 (op) == OP_GT || (op) == OP_I_GT || \
5180 (op) == OP_LE || (op) == OP_I_LE || \
5181 (op) == OP_GE || (op) == OP_I_GE || \
5182 (op) == OP_EQ || (op) == OP_I_EQ || \
5183 (op) == OP_NE || (op) == OP_I_NE || \
5184 (op) == OP_NCMP || (op) == OP_I_NCMP)
5185 o->op_private = (U8)(PL_hints & HINT_PRIVATE_MASK);
5186 if (!(o->op_flags & OPf_STACKED) /* Not an assignment */
5187 && (o->op_type == OP_BIT_OR
5188 || o->op_type == OP_BIT_AND
5189 || o->op_type == OP_BIT_XOR))
5191 const OP * const left = cBINOPo->op_first;
5192 const OP * const right = left->op_sibling;
5193 if ((OP_IS_NUMCOMPARE(left->op_type) &&
5194 (left->op_flags & OPf_PARENS) == 0) ||
5195 (OP_IS_NUMCOMPARE(right->op_type) &&
5196 (right->op_flags & OPf_PARENS) == 0))
5197 if (ckWARN(WARN_PRECEDENCE))
5198 Perl_warner(aTHX_ packWARN(WARN_PRECEDENCE),
5199 "Possible precedence problem on bitwise %c operator",
5200 o->op_type == OP_BIT_OR ? '|'
5201 : o->op_type == OP_BIT_AND ? '&' : '^'
5208 Perl_ck_concat(pTHX_ OP *o)
5210 const OP * const kid = cUNOPo->op_first;
5211 if (kid->op_type == OP_CONCAT && !(kid->op_private & OPpTARGET_MY) &&
5212 !(kUNOP->op_first->op_flags & OPf_MOD))
5213 o->op_flags |= OPf_STACKED;
5218 Perl_ck_spair(pTHX_ OP *o)
5221 if (o->op_flags & OPf_KIDS) {
5224 const OPCODE type = o->op_type;
5225 o = modkids(ck_fun(o), type);
5226 kid = cUNOPo->op_first;
5227 newop = kUNOP->op_first->op_sibling;
5229 (newop->op_sibling ||
5230 !(PL_opargs[newop->op_type] & OA_RETSCALAR) ||
5231 newop->op_type == OP_PADAV || newop->op_type == OP_PADHV ||
5232 newop->op_type == OP_RV2AV || newop->op_type == OP_RV2HV)) {
5236 op_free(kUNOP->op_first);
5237 kUNOP->op_first = newop;
5239 o->op_ppaddr = PL_ppaddr[++o->op_type];
5244 Perl_ck_delete(pTHX_ OP *o)
5248 if (o->op_flags & OPf_KIDS) {
5249 OP * const kid = cUNOPo->op_first;
5250 switch (kid->op_type) {
5252 o->op_flags |= OPf_SPECIAL;
5255 o->op_private |= OPpSLICE;
5258 o->op_flags |= OPf_SPECIAL;
5263 Perl_croak(aTHX_ "%s argument is not a HASH or ARRAY element or slice",
5272 Perl_ck_die(pTHX_ OP *o)
5275 if (VMSISH_HUSHED) o->op_private |= OPpHUSH_VMSISH;
5281 Perl_ck_eof(pTHX_ OP *o)
5284 const I32 type = o->op_type;
5286 if (o->op_flags & OPf_KIDS) {
5287 if (cLISTOPo->op_first->op_type == OP_STUB) {
5289 o = newUNOP(type, OPf_SPECIAL, newGVOP(OP_GV, 0, PL_argvgv));
5297 Perl_ck_eval(pTHX_ OP *o)
5300 PL_hints |= HINT_BLOCK_SCOPE;
5301 if (o->op_flags & OPf_KIDS) {
5302 SVOP * const kid = (SVOP*)cUNOPo->op_first;
5305 o->op_flags &= ~OPf_KIDS;
5308 else if (kid->op_type == OP_LINESEQ || kid->op_type == OP_STUB) {
5311 cUNOPo->op_first = 0;
5314 NewOp(1101, enter, 1, LOGOP);
5315 enter->op_type = OP_ENTERTRY;
5316 enter->op_ppaddr = PL_ppaddr[OP_ENTERTRY];
5317 enter->op_private = 0;
5319 /* establish postfix order */
5320 enter->op_next = (OP*)enter;
5322 o = prepend_elem(OP_LINESEQ, (OP*)enter, (OP*)kid);
5323 o->op_type = OP_LEAVETRY;
5324 o->op_ppaddr = PL_ppaddr[OP_LEAVETRY];
5325 enter->op_other = o;
5335 o = newUNOP(OP_ENTEREVAL, 0, newDEFSVOP());
5337 o->op_targ = (PADOFFSET)PL_hints;
5338 if ((PL_hints & HINT_LOCALIZE_HH) != 0 && GvHV(PL_hintgv)) {
5339 /* Store a copy of %^H that pp_entereval can pick up */
5340 OP *hhop = newSVOP(OP_CONST, 0, (SV*)newHVhv(GvHV(PL_hintgv)));
5341 cUNOPo->op_first->op_sibling = hhop;
5342 o->op_private |= OPpEVAL_HAS_HH;
5348 Perl_ck_exit(pTHX_ OP *o)
5351 HV * const table = GvHV(PL_hintgv);
5353 SV * const * const svp = hv_fetch(table, "vmsish_exit", 11, FALSE);
5354 if (svp && *svp && SvTRUE(*svp))
5355 o->op_private |= OPpEXIT_VMSISH;
5357 if (VMSISH_HUSHED) o->op_private |= OPpHUSH_VMSISH;
5363 Perl_ck_exec(pTHX_ OP *o)
5365 if (o->op_flags & OPf_STACKED) {
5368 kid = cUNOPo->op_first->op_sibling;
5369 if (kid->op_type == OP_RV2GV)
5378 Perl_ck_exists(pTHX_ OP *o)
5382 if (o->op_flags & OPf_KIDS) {
5383 OP * const kid = cUNOPo->op_first;
5384 if (kid->op_type == OP_ENTERSUB) {
5385 (void) ref(kid, o->op_type);
5386 if (kid->op_type != OP_RV2CV && !PL_error_count)
5387 Perl_croak(aTHX_ "%s argument is not a subroutine name",
5389 o->op_private |= OPpEXISTS_SUB;
5391 else if (kid->op_type == OP_AELEM)
5392 o->op_flags |= OPf_SPECIAL;
5393 else if (kid->op_type != OP_HELEM)
5394 Perl_croak(aTHX_ "%s argument is not a HASH or ARRAY element",
5402 Perl_ck_rvconst(pTHX_ register OP *o)
5405 SVOP * const kid = (SVOP*)cUNOPo->op_first;
5407 o->op_private |= (PL_hints & HINT_STRICT_REFS);
5408 if (o->op_type == OP_RV2CV)
5409 o->op_private &= ~1;
5411 if (kid->op_type == OP_CONST) {
5414 SV * const kidsv = kid->op_sv;
5416 /* Is it a constant from cv_const_sv()? */
5417 if (SvROK(kidsv) && SvREADONLY(kidsv)) {
5418 SV * const rsv = SvRV(kidsv);
5419 const int svtype = SvTYPE(rsv);
5420 const char *badtype = Nullch;
5422 switch (o->op_type) {
5424 if (svtype > SVt_PVMG)
5425 badtype = "a SCALAR";
5428 if (svtype != SVt_PVAV)
5429 badtype = "an ARRAY";
5432 if (svtype != SVt_PVHV)
5436 if (svtype != SVt_PVCV)
5441 Perl_croak(aTHX_ "Constant is not %s reference", badtype);
5444 else if ((o->op_type == OP_RV2HV || o->op_type == OP_RV2SV) &&
5445 (PL_hints & HINT_STRICT_REFS) && SvPOK(kidsv)) {
5446 /* If this is an access to a stash, disable "strict refs", because
5447 * stashes aren't auto-vivified at compile-time (unless we store
5448 * symbols in them), and we don't want to produce a run-time
5449 * stricture error when auto-vivifying the stash. */
5450 const char *s = SvPV_nolen(kidsv);
5451 const STRLEN l = SvCUR(kidsv);
5452 if (l > 1 && s[l-1] == ':' && s[l-2] == ':')
5453 o->op_private &= ~HINT_STRICT_REFS;
5455 if ((o->op_private & HINT_STRICT_REFS) && (kid->op_private & OPpCONST_BARE)) {
5456 const char *badthing = Nullch;
5457 switch (o->op_type) {
5459 badthing = "a SCALAR";
5462 badthing = "an ARRAY";
5465 badthing = "a HASH";
5470 "Can't use bareword (\"%"SVf"\") as %s ref while \"strict refs\" in use",
5474 * This is a little tricky. We only want to add the symbol if we
5475 * didn't add it in the lexer. Otherwise we get duplicate strict
5476 * warnings. But if we didn't add it in the lexer, we must at
5477 * least pretend like we wanted to add it even if it existed before,
5478 * or we get possible typo warnings. OPpCONST_ENTERED says
5479 * whether the lexer already added THIS instance of this symbol.
5481 iscv = (o->op_type == OP_RV2CV) * 2;
5483 gv = gv_fetchsv(kidsv,
5484 iscv | !(kid->op_private & OPpCONST_ENTERED),
5487 : o->op_type == OP_RV2SV
5489 : o->op_type == OP_RV2AV
5491 : o->op_type == OP_RV2HV
5494 } while (!gv && !(kid->op_private & OPpCONST_ENTERED) && !iscv++);
5496 kid->op_type = OP_GV;
5497 SvREFCNT_dec(kid->op_sv);
5499 /* XXX hack: dependence on sizeof(PADOP) <= sizeof(SVOP) */
5500 kPADOP->op_padix = pad_alloc(OP_GV, SVs_PADTMP);
5501 SvREFCNT_dec(PAD_SVl(kPADOP->op_padix));
5503 PAD_SETSV(kPADOP->op_padix, (SV*) SvREFCNT_inc(gv));
5505 kid->op_sv = SvREFCNT_inc(gv);
5507 kid->op_private = 0;
5508 kid->op_ppaddr = PL_ppaddr[OP_GV];
5515 Perl_ck_ftst(pTHX_ OP *o)
5518 const I32 type = o->op_type;
5520 if (o->op_flags & OPf_REF) {
5523 else if (o->op_flags & OPf_KIDS && cUNOPo->op_first->op_type != OP_STUB) {
5524 SVOP * const kid = (SVOP*)cUNOPo->op_first;
5526 if (kid->op_type == OP_CONST && (kid->op_private & OPpCONST_BARE)) {
5527 OP * const newop = newGVOP(type, OPf_REF,
5528 gv_fetchsv(kid->op_sv, GV_ADD, SVt_PVIO));
5534 if ((PL_hints & HINT_FILETEST_ACCESS) &&
5535 OP_IS_FILETEST_ACCESS(o))
5536 o->op_private |= OPpFT_ACCESS;
5538 if (PL_check[kid->op_type] == MEMBER_TO_FPTR(Perl_ck_ftst)
5539 && kid->op_type != OP_STAT && kid->op_type != OP_LSTAT)
5540 o->op_private |= OPpFT_STACKED;
5544 if (type == OP_FTTTY)
5545 o = newGVOP(type, OPf_REF, PL_stdingv);
5547 o = newUNOP(type, 0, newDEFSVOP());
5553 Perl_ck_fun(pTHX_ OP *o)
5556 const int type = o->op_type;
5557 register I32 oa = PL_opargs[type] >> OASHIFT;
5559 if (o->op_flags & OPf_STACKED) {
5560 if ((oa & OA_OPTIONAL) && (oa >> 4) && !((oa >> 4) & OA_OPTIONAL))
5563 return no_fh_allowed(o);
5566 if (o->op_flags & OPf_KIDS) {
5567 OP **tokid = &cLISTOPo->op_first;
5568 register OP *kid = cLISTOPo->op_first;
5572 if (kid->op_type == OP_PUSHMARK ||
5573 (kid->op_type == OP_NULL && kid->op_targ == OP_PUSHMARK))
5575 tokid = &kid->op_sibling;
5576 kid = kid->op_sibling;
5578 if (!kid && PL_opargs[type] & OA_DEFGV)
5579 *tokid = kid = newDEFSVOP();
5583 sibl = kid->op_sibling;
5586 /* list seen where single (scalar) arg expected? */
5587 if (numargs == 1 && !(oa >> 4)
5588 && kid->op_type == OP_LIST && type != OP_SCALAR)
5590 return too_many_arguments(o,PL_op_desc[type]);
5603 if ((type == OP_PUSH || type == OP_UNSHIFT)
5604 && !kid->op_sibling && ckWARN(WARN_SYNTAX))
5605 Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
5606 "Useless use of %s with no values",
5609 if (kid->op_type == OP_CONST &&
5610 (kid->op_private & OPpCONST_BARE))
5612 OP * const newop = newAVREF(newGVOP(OP_GV, 0,
5613 gv_fetchsv(((SVOP*)kid)->op_sv, GV_ADD, SVt_PVAV) ));
5614 if (ckWARN2(WARN_DEPRECATED, WARN_SYNTAX))
5615 Perl_warner(aTHX_ packWARN2(WARN_DEPRECATED, WARN_SYNTAX),
5616 "Array @%"SVf" missing the @ in argument %"IVdf" of %s()",
5617 ((SVOP*)kid)->op_sv, (IV)numargs, PL_op_desc[type]);
5620 kid->op_sibling = sibl;
5623 else if (kid->op_type != OP_RV2AV && kid->op_type != OP_PADAV)
5624 bad_type(numargs, "array", PL_op_desc[type], kid);
5628 if (kid->op_type == OP_CONST &&
5629 (kid->op_private & OPpCONST_BARE))
5631 OP * const newop = newHVREF(newGVOP(OP_GV, 0,
5632 gv_fetchsv(((SVOP*)kid)->op_sv, GV_ADD, SVt_PVHV) ));
5633 if (ckWARN2(WARN_DEPRECATED, WARN_SYNTAX))
5634 Perl_warner(aTHX_ packWARN2(WARN_DEPRECATED, WARN_SYNTAX),
5635 "Hash %%%"SVf" missing the %% in argument %"IVdf" of %s()",
5636 ((SVOP*)kid)->op_sv, (IV)numargs, PL_op_desc[type]);
5639 kid->op_sibling = sibl;
5642 else if (kid->op_type != OP_RV2HV && kid->op_type != OP_PADHV)
5643 bad_type(numargs, "hash", PL_op_desc[type], kid);
5648 OP * const newop = newUNOP(OP_NULL, 0, kid);
5649 kid->op_sibling = 0;
5651 newop->op_next = newop;
5653 kid->op_sibling = sibl;
5658 if (kid->op_type != OP_GV && kid->op_type != OP_RV2GV) {
5659 if (kid->op_type == OP_CONST &&
5660 (kid->op_private & OPpCONST_BARE))
5662 OP * const newop = newGVOP(OP_GV, 0,
5663 gv_fetchsv(((SVOP*)kid)->op_sv, GV_ADD, SVt_PVIO));
5664 if (!(o->op_private & 1) && /* if not unop */
5665 kid == cLISTOPo->op_last)
5666 cLISTOPo->op_last = newop;
5670 else if (kid->op_type == OP_READLINE) {
5671 /* neophyte patrol: open(<FH>), close(<FH>) etc. */
5672 bad_type(numargs, "HANDLE", OP_DESC(o), kid);
5675 I32 flags = OPf_SPECIAL;
5679 /* is this op a FH constructor? */
5680 if (is_handle_constructor(o,numargs)) {
5681 const char *name = Nullch;
5685 /* Set a flag to tell rv2gv to vivify
5686 * need to "prove" flag does not mean something
5687 * else already - NI-S 1999/05/07
5690 if (kid->op_type == OP_PADSV) {
5691 name = PAD_COMPNAME_PV(kid->op_targ);
5692 /* SvCUR of a pad namesv can't be trusted
5693 * (see PL_generation), so calc its length
5699 else if (kid->op_type == OP_RV2SV
5700 && kUNOP->op_first->op_type == OP_GV)
5702 GV * const gv = cGVOPx_gv(kUNOP->op_first);
5704 len = GvNAMELEN(gv);
5706 else if (kid->op_type == OP_AELEM
5707 || kid->op_type == OP_HELEM)
5709 OP *op = ((BINOP*)kid)->op_first;
5712 SV *tmpstr = Nullsv;
5713 const char * const a =
5714 kid->op_type == OP_AELEM ?
5716 if (((op->op_type == OP_RV2AV) ||
5717 (op->op_type == OP_RV2HV)) &&
5718 (op = ((UNOP*)op)->op_first) &&
5719 (op->op_type == OP_GV)) {
5720 /* packagevar $a[] or $h{} */
5721 GV * const gv = cGVOPx_gv(op);
5729 else if (op->op_type == OP_PADAV
5730 || op->op_type == OP_PADHV) {
5731 /* lexicalvar $a[] or $h{} */
5732 const char * const padname =
5733 PAD_COMPNAME_PV(op->op_targ);
5742 name = SvPV_const(tmpstr, len);
5747 name = "__ANONIO__";
5754 targ = pad_alloc(OP_RV2GV, SVs_PADTMP);
5755 namesv = PAD_SVl(targ);
5756 SvUPGRADE(namesv, SVt_PV);
5758 sv_setpvn(namesv, "$", 1);
5759 sv_catpvn(namesv, name, len);
5762 kid->op_sibling = 0;
5763 kid = newUNOP(OP_RV2GV, flags, scalar(kid));
5764 kid->op_targ = targ;
5765 kid->op_private |= priv;
5767 kid->op_sibling = sibl;
5773 mod(scalar(kid), type);
5777 tokid = &kid->op_sibling;
5778 kid = kid->op_sibling;
5780 o->op_private |= numargs;
5782 return too_many_arguments(o,OP_DESC(o));
5785 else if (PL_opargs[type] & OA_DEFGV) {
5787 return newUNOP(type, 0, newDEFSVOP());
5791 while (oa & OA_OPTIONAL)
5793 if (oa && oa != OA_LIST)
5794 return too_few_arguments(o,OP_DESC(o));
5800 Perl_ck_glob(pTHX_ OP *o)
5806 if ((o->op_flags & OPf_KIDS) && !cLISTOPo->op_first->op_sibling)
5807 append_elem(OP_GLOB, o, newDEFSVOP());
5809 if (!((gv = gv_fetchpv("glob", 0, SVt_PVCV))
5810 && GvCVu(gv) && GvIMPORTED_CV(gv)))
5812 gv = gv_fetchpv("CORE::GLOBAL::glob", 0, SVt_PVCV);
5815 #if !defined(PERL_EXTERNAL_GLOB)
5816 /* XXX this can be tightened up and made more failsafe. */
5817 if (!(gv && GvCVu(gv) && GvIMPORTED_CV(gv))) {
5820 Perl_load_module(aTHX_ PERL_LOADMOD_NOIMPORT,
5821 newSVpvs("File::Glob"), Nullsv, Nullsv, Nullsv);
5822 gv = gv_fetchpv("CORE::GLOBAL::glob", 0, SVt_PVCV);
5823 glob_gv = gv_fetchpv("File::Glob::csh_glob", 0, SVt_PVCV);
5824 GvCV(gv) = GvCV(glob_gv);
5825 (void)SvREFCNT_inc((SV*)GvCV(gv));
5826 GvIMPORTED_CV_on(gv);
5829 #endif /* PERL_EXTERNAL_GLOB */
5831 if (gv && GvCVu(gv) && GvIMPORTED_CV(gv)) {
5832 append_elem(OP_GLOB, o,
5833 newSVOP(OP_CONST, 0, newSViv(PL_glob_index++)));
5834 o->op_type = OP_LIST;
5835 o->op_ppaddr = PL_ppaddr[OP_LIST];
5836 cLISTOPo->op_first->op_type = OP_PUSHMARK;
5837 cLISTOPo->op_first->op_ppaddr = PL_ppaddr[OP_PUSHMARK];
5838 cLISTOPo->op_first->op_targ = 0;
5839 o = newUNOP(OP_ENTERSUB, OPf_STACKED,
5840 append_elem(OP_LIST, o,
5841 scalar(newUNOP(OP_RV2CV, 0,
5842 newGVOP(OP_GV, 0, gv)))));
5843 o = newUNOP(OP_NULL, 0, ck_subr(o));
5844 o->op_targ = OP_GLOB; /* hint at what it used to be */
5847 gv = newGVgen("main");
5849 append_elem(OP_GLOB, o, newGVOP(OP_GV, 0, gv));
5855 Perl_ck_grep(pTHX_ OP *o)
5860 const OPCODE type = o->op_type == OP_GREPSTART ? OP_GREPWHILE : OP_MAPWHILE;
5863 o->op_ppaddr = PL_ppaddr[OP_GREPSTART];
5864 NewOp(1101, gwop, 1, LOGOP);
5866 if (o->op_flags & OPf_STACKED) {
5869 kid = cLISTOPo->op_first->op_sibling;
5870 if (!cUNOPx(kid)->op_next)
5871 Perl_croak(aTHX_ "panic: ck_grep");
5872 for (k = cUNOPx(kid)->op_first; k; k = k->op_next) {
5875 kid->op_next = (OP*)gwop;
5876 o->op_flags &= ~OPf_STACKED;
5878 kid = cLISTOPo->op_first->op_sibling;
5879 if (type == OP_MAPWHILE)
5886 kid = cLISTOPo->op_first->op_sibling;
5887 if (kid->op_type != OP_NULL)
5888 Perl_croak(aTHX_ "panic: ck_grep");
5889 kid = kUNOP->op_first;
5891 gwop->op_type = type;
5892 gwop->op_ppaddr = PL_ppaddr[type];
5893 gwop->op_first = listkids(o);
5894 gwop->op_flags |= OPf_KIDS;
5895 gwop->op_other = LINKLIST(kid);
5896 kid->op_next = (OP*)gwop;
5897 offset = pad_findmy("$_");
5898 if (offset == NOT_IN_PAD || PAD_COMPNAME_FLAGS(offset) & SVpad_OUR) {
5899 o->op_private = gwop->op_private = 0;
5900 gwop->op_targ = pad_alloc(type, SVs_PADTMP);
5903 o->op_private = gwop->op_private = OPpGREP_LEX;
5904 gwop->op_targ = o->op_targ = offset;
5907 kid = cLISTOPo->op_first->op_sibling;
5908 if (!kid || !kid->op_sibling)
5909 return too_few_arguments(o,OP_DESC(o));
5910 for (kid = kid->op_sibling; kid; kid = kid->op_sibling)
5911 mod(kid, OP_GREPSTART);
5917 Perl_ck_index(pTHX_ OP *o)
5919 if (o->op_flags & OPf_KIDS) {
5920 OP *kid = cLISTOPo->op_first->op_sibling; /* get past pushmark */
5922 kid = kid->op_sibling; /* get past "big" */
5923 if (kid && kid->op_type == OP_CONST)
5924 fbm_compile(((SVOP*)kid)->op_sv, 0);
5930 Perl_ck_lengthconst(pTHX_ OP *o)
5932 /* XXX length optimization goes here */
5937 Perl_ck_lfun(pTHX_ OP *o)
5939 const OPCODE type = o->op_type;
5940 return modkids(ck_fun(o), type);
5944 Perl_ck_defined(pTHX_ OP *o) /* 19990527 MJD */
5946 if ((o->op_flags & OPf_KIDS) && ckWARN2(WARN_DEPRECATED, WARN_SYNTAX)) {
5947 switch (cUNOPo->op_first->op_type) {
5949 /* This is needed for
5950 if (defined %stash::)
5951 to work. Do not break Tk.
5953 break; /* Globals via GV can be undef */
5955 case OP_AASSIGN: /* Is this a good idea? */
5956 Perl_warner(aTHX_ packWARN2(WARN_DEPRECATED, WARN_SYNTAX),
5957 "defined(@array) is deprecated");
5958 Perl_warner(aTHX_ packWARN2(WARN_DEPRECATED, WARN_SYNTAX),
5959 "\t(Maybe you should just omit the defined()?)\n");
5962 /* This is needed for
5963 if (defined %stash::)
5964 to work. Do not break Tk.
5966 break; /* Globals via GV can be undef */
5968 Perl_warner(aTHX_ packWARN2(WARN_DEPRECATED, WARN_SYNTAX),
5969 "defined(%%hash) is deprecated");
5970 Perl_warner(aTHX_ packWARN2(WARN_DEPRECATED, WARN_SYNTAX),
5971 "\t(Maybe you should just omit the defined()?)\n");
5982 Perl_ck_rfun(pTHX_ OP *o)
5984 const OPCODE type = o->op_type;
5985 return refkids(ck_fun(o), type);
5989 Perl_ck_listiob(pTHX_ OP *o)
5993 kid = cLISTOPo->op_first;
5996 kid = cLISTOPo->op_first;
5998 if (kid->op_type == OP_PUSHMARK)
5999 kid = kid->op_sibling;
6000 if (kid && o->op_flags & OPf_STACKED)
6001 kid = kid->op_sibling;
6002 else if (kid && !kid->op_sibling) { /* print HANDLE; */
6003 if (kid->op_type == OP_CONST && kid->op_private & OPpCONST_BARE) {
6004 o->op_flags |= OPf_STACKED; /* make it a filehandle */
6005 kid = newUNOP(OP_RV2GV, OPf_REF, scalar(kid));
6006 cLISTOPo->op_first->op_sibling = kid;
6007 cLISTOPo->op_last = kid;
6008 kid = kid->op_sibling;
6013 append_elem(o->op_type, o, newDEFSVOP());
6019 Perl_ck_say(pTHX_ OP *o)
6022 o->op_type = OP_PRINT;
6023 cLISTOPo->op_last = cLISTOPo->op_last->op_sibling
6024 = newSVOP(OP_CONST, 0, newSVpvs("\n"));
6029 Perl_ck_smartmatch(pTHX_ OP *o)
6032 if (0 == (o->op_flags & OPf_SPECIAL)) {
6033 OP *first = cBINOPo->op_first;
6034 OP *second = first->op_sibling;
6036 /* Implicitly take a reference to an array or hash */
6037 first->op_sibling = Nullop;
6038 first = cBINOPo->op_first = ref_array_or_hash(first);
6039 second = first->op_sibling = ref_array_or_hash(second);
6041 /* Implicitly take a reference to a regular expression */
6042 if (first->op_type == OP_MATCH) {
6043 first->op_type = OP_QR;
6044 first->op_ppaddr = PL_ppaddr[OP_QR];
6046 if (second->op_type == OP_MATCH) {
6047 second->op_type = OP_QR;
6048 second->op_ppaddr = PL_ppaddr[OP_QR];
6057 Perl_ck_sassign(pTHX_ OP *o)
6059 OP *kid = cLISTOPo->op_first;
6060 /* has a disposable target? */
6061 if ((PL_opargs[kid->op_type] & OA_TARGLEX)
6062 && !(kid->op_flags & OPf_STACKED)
6063 /* Cannot steal the second time! */
6064 && !(kid->op_private & OPpTARGET_MY))
6066 OP * const kkid = kid->op_sibling;
6068 /* Can just relocate the target. */
6069 if (kkid && kkid->op_type == OP_PADSV
6070 && !(kkid->op_private & OPpLVAL_INTRO))
6072 kid->op_targ = kkid->op_targ;
6074 /* Now we do not need PADSV and SASSIGN. */
6075 kid->op_sibling = o->op_sibling; /* NULL */
6076 cLISTOPo->op_first = NULL;
6079 kid->op_private |= OPpTARGET_MY; /* Used for context settings */
6087 Perl_ck_match(pTHX_ OP *o)
6090 if (o->op_type != OP_QR && PL_compcv) {
6091 const I32 offset = pad_findmy("$_");
6092 if (offset != NOT_IN_PAD && !(PAD_COMPNAME_FLAGS(offset) & SVpad_OUR)) {
6093 o->op_targ = offset;
6094 o->op_private |= OPpTARGET_MY;
6097 if (o->op_type == OP_MATCH || o->op_type == OP_QR)
6098 o->op_private |= OPpRUNTIME;
6103 Perl_ck_method(pTHX_ OP *o)
6105 OP * const kid = cUNOPo->op_first;
6106 if (kid->op_type == OP_CONST) {
6107 SV* sv = kSVOP->op_sv;
6108 if (!(strchr(SvPVX_const(sv), ':') || strchr(SvPVX_const(sv), '\''))) {
6110 if (!SvREADONLY(sv) || !SvFAKE(sv)) {
6111 sv = newSVpvn_share(SvPVX_const(sv), SvCUR(sv), 0);
6114 kSVOP->op_sv = Nullsv;
6116 cmop = newSVOP(OP_METHOD_NAMED, 0, sv);
6125 Perl_ck_null(pTHX_ OP *o)
6131 Perl_ck_open(pTHX_ OP *o)
6134 HV * const table = GvHV(PL_hintgv);
6136 SV **svp = hv_fetch(table, "open_IN", 7, FALSE);
6138 const I32 mode = mode_from_discipline(*svp);
6139 if (mode & O_BINARY)
6140 o->op_private |= OPpOPEN_IN_RAW;
6141 else if (mode & O_TEXT)
6142 o->op_private |= OPpOPEN_IN_CRLF;
6145 svp = hv_fetch(table, "open_OUT", 8, FALSE);
6147 const I32 mode = mode_from_discipline(*svp);
6148 if (mode & O_BINARY)
6149 o->op_private |= OPpOPEN_OUT_RAW;
6150 else if (mode & O_TEXT)
6151 o->op_private |= OPpOPEN_OUT_CRLF;
6154 if (o->op_type == OP_BACKTICK)
6157 /* In case of three-arg dup open remove strictness
6158 * from the last arg if it is a bareword. */
6159 OP * const first = cLISTOPx(o)->op_first; /* The pushmark. */
6160 OP * const last = cLISTOPx(o)->op_last; /* The bareword. */
6164 if ((last->op_type == OP_CONST) && /* The bareword. */
6165 (last->op_private & OPpCONST_BARE) &&
6166 (last->op_private & OPpCONST_STRICT) &&
6167 (oa = first->op_sibling) && /* The fh. */
6168 (oa = oa->op_sibling) && /* The mode. */
6169 (oa->op_type == OP_CONST) &&
6170 SvPOK(((SVOP*)oa)->op_sv) &&
6171 (mode = SvPVX_const(((SVOP*)oa)->op_sv)) &&
6172 mode[0] == '>' && mode[1] == '&' && /* A dup open. */
6173 (last == oa->op_sibling)) /* The bareword. */
6174 last->op_private &= ~OPpCONST_STRICT;
6180 Perl_ck_repeat(pTHX_ OP *o)
6182 if (cBINOPo->op_first->op_flags & OPf_PARENS) {
6183 o->op_private |= OPpREPEAT_DOLIST;
6184 cBINOPo->op_first = force_list(cBINOPo->op_first);
6192 Perl_ck_require(pTHX_ OP *o)
6197 if (o->op_flags & OPf_KIDS) { /* Shall we supply missing .pm? */
6198 SVOP * const kid = (SVOP*)cUNOPo->op_first;
6200 if (kid->op_type == OP_CONST && (kid->op_private & OPpCONST_BARE)) {
6201 SV * const sv = kid->op_sv;
6202 U32 was_readonly = SvREADONLY(sv);
6207 sv_force_normal_flags(sv, 0);
6208 assert(!SvREADONLY(sv));
6215 for (s = SvPVX(sv); *s; s++) {
6216 if (*s == ':' && s[1] == ':') {
6217 const STRLEN len = strlen(s+2)+1;
6219 Move(s+2, s+1, len, char);
6220 SvCUR_set(sv, SvCUR(sv) - 1);
6223 sv_catpvs(sv, ".pm");
6224 SvFLAGS(sv) |= was_readonly;
6228 if (!(o->op_flags & OPf_SPECIAL)) { /* Wasn't written as CORE::require */
6229 /* handle override, if any */
6230 gv = gv_fetchpv("require", 0, SVt_PVCV);
6231 if (!(gv && GvCVu(gv) && GvIMPORTED_CV(gv))) {
6232 GV * const * const gvp = (GV**)hv_fetch(PL_globalstash, "require", 7, FALSE);
6233 gv = gvp ? *gvp : Nullgv;
6237 if (gv && GvCVu(gv) && GvIMPORTED_CV(gv)) {
6238 OP * const kid = cUNOPo->op_first;
6239 cUNOPo->op_first = 0;
6241 return ck_subr(newUNOP(OP_ENTERSUB, OPf_STACKED,
6242 append_elem(OP_LIST, kid,
6243 scalar(newUNOP(OP_RV2CV, 0,
6252 Perl_ck_return(pTHX_ OP *o)
6255 if (CvLVALUE(PL_compcv)) {
6257 for (kid = cLISTOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
6258 mod(kid, OP_LEAVESUBLV);
6264 Perl_ck_select(pTHX_ OP *o)
6268 if (o->op_flags & OPf_KIDS) {
6269 kid = cLISTOPo->op_first->op_sibling; /* get past pushmark */
6270 if (kid && kid->op_sibling) {
6271 o->op_type = OP_SSELECT;
6272 o->op_ppaddr = PL_ppaddr[OP_SSELECT];
6274 return fold_constants(o);
6278 kid = cLISTOPo->op_first->op_sibling; /* get past pushmark */
6279 if (kid && kid->op_type == OP_RV2GV)
6280 kid->op_private &= ~HINT_STRICT_REFS;
6285 Perl_ck_shift(pTHX_ OP *o)
6288 const I32 type = o->op_type;
6290 if (!(o->op_flags & OPf_KIDS)) {
6294 argop = newUNOP(OP_RV2AV, 0,
6295 scalar(newGVOP(OP_GV, 0, CvUNIQUE(PL_compcv) ? PL_argvgv : PL_defgv)));
6296 return newUNOP(type, 0, scalar(argop));
6298 return scalar(modkids(ck_fun(o), type));
6302 Perl_ck_sort(pTHX_ OP *o)
6307 if (o->op_type == OP_SORT && (PL_hints & HINT_LOCALIZE_HH) != 0)
6309 HV *hinthv = GvHV(PL_hintgv);
6311 SV **svp = hv_fetch(hinthv, "sort", 4, 0);
6313 I32 sorthints = (I32)SvIV(*svp);
6314 if ((sorthints & HINT_SORT_QUICKSORT) != 0)
6315 o->op_private |= OPpSORT_QSORT;
6316 if ((sorthints & HINT_SORT_STABLE) != 0)
6317 o->op_private |= OPpSORT_STABLE;
6322 if (o->op_type == OP_SORT && o->op_flags & OPf_STACKED)
6324 firstkid = cLISTOPo->op_first->op_sibling; /* get past pushmark */
6325 if (o->op_flags & OPf_STACKED) { /* may have been cleared */
6327 OP *kid = cUNOPx(firstkid)->op_first; /* get past null */
6329 if (kid->op_type == OP_SCOPE || kid->op_type == OP_LEAVE) {
6331 if (kid->op_type == OP_SCOPE) {
6335 else if (kid->op_type == OP_LEAVE) {
6336 if (o->op_type == OP_SORT) {
6337 op_null(kid); /* wipe out leave */
6340 for (k = kLISTOP->op_first->op_next; k; k = k->op_next) {
6341 if (k->op_next == kid)
6343 /* don't descend into loops */
6344 else if (k->op_type == OP_ENTERLOOP
6345 || k->op_type == OP_ENTERITER)
6347 k = cLOOPx(k)->op_lastop;
6352 kid->op_next = 0; /* just disconnect the leave */
6353 k = kLISTOP->op_first;
6358 if (o->op_type == OP_SORT) {
6359 /* provide scalar context for comparison function/block */
6365 o->op_flags |= OPf_SPECIAL;
6367 else if (kid->op_type == OP_RV2SV || kid->op_type == OP_PADSV)
6370 firstkid = firstkid->op_sibling;
6373 /* provide list context for arguments */
6374 if (o->op_type == OP_SORT)
6381 S_simplify_sort(pTHX_ OP *o)
6384 register OP *kid = cLISTOPo->op_first->op_sibling; /* get past pushmark */
6389 if (!(o->op_flags & OPf_STACKED))
6391 GvMULTI_on(gv_fetchpv("a", GV_ADD, SVt_PV));
6392 GvMULTI_on(gv_fetchpv("b", GV_ADD, SVt_PV));
6393 kid = kUNOP->op_first; /* get past null */
6394 if (kid->op_type != OP_SCOPE)
6396 kid = kLISTOP->op_last; /* get past scope */
6397 switch(kid->op_type) {
6405 k = kid; /* remember this node*/
6406 if (kBINOP->op_first->op_type != OP_RV2SV)
6408 kid = kBINOP->op_first; /* get past cmp */
6409 if (kUNOP->op_first->op_type != OP_GV)
6411 kid = kUNOP->op_first; /* get past rv2sv */
6413 if (GvSTASH(gv) != PL_curstash)
6415 gvname = GvNAME(gv);
6416 if (*gvname == 'a' && gvname[1] == '\0')
6418 else if (*gvname == 'b' && gvname[1] == '\0')
6423 kid = k; /* back to cmp */
6424 if (kBINOP->op_last->op_type != OP_RV2SV)
6426 kid = kBINOP->op_last; /* down to 2nd arg */
6427 if (kUNOP->op_first->op_type != OP_GV)
6429 kid = kUNOP->op_first; /* get past rv2sv */
6431 if (GvSTASH(gv) != PL_curstash)
6433 gvname = GvNAME(gv);
6435 ? !(*gvname == 'a' && gvname[1] == '\0')
6436 : !(*gvname == 'b' && gvname[1] == '\0'))
6438 o->op_flags &= ~(OPf_STACKED | OPf_SPECIAL);
6440 o->op_private |= OPpSORT_DESCEND;
6441 if (k->op_type == OP_NCMP)
6442 o->op_private |= OPpSORT_NUMERIC;
6443 if (k->op_type == OP_I_NCMP)
6444 o->op_private |= OPpSORT_NUMERIC | OPpSORT_INTEGER;
6445 kid = cLISTOPo->op_first->op_sibling;
6446 cLISTOPo->op_first->op_sibling = kid->op_sibling; /* bypass old block */
6447 op_free(kid); /* then delete it */
6451 Perl_ck_split(pTHX_ OP *o)
6456 if (o->op_flags & OPf_STACKED)
6457 return no_fh_allowed(o);
6459 kid = cLISTOPo->op_first;
6460 if (kid->op_type != OP_NULL)
6461 Perl_croak(aTHX_ "panic: ck_split");
6462 kid = kid->op_sibling;
6463 op_free(cLISTOPo->op_first);
6464 cLISTOPo->op_first = kid;
6466 cLISTOPo->op_first = kid = newSVOP(OP_CONST, 0, newSVpvs(" "));
6467 cLISTOPo->op_last = kid; /* There was only one element previously */
6470 if (kid->op_type != OP_MATCH || kid->op_flags & OPf_STACKED) {
6471 OP * const sibl = kid->op_sibling;
6472 kid->op_sibling = 0;
6473 kid = pmruntime( newPMOP(OP_MATCH, OPf_SPECIAL), kid, 0);
6474 if (cLISTOPo->op_first == cLISTOPo->op_last)
6475 cLISTOPo->op_last = kid;
6476 cLISTOPo->op_first = kid;
6477 kid->op_sibling = sibl;
6480 kid->op_type = OP_PUSHRE;
6481 kid->op_ppaddr = PL_ppaddr[OP_PUSHRE];
6483 if (((PMOP *)kid)->op_pmflags & PMf_GLOBAL && ckWARN(WARN_REGEXP)) {
6484 Perl_warner(aTHX_ packWARN(WARN_REGEXP),
6485 "Use of /g modifier is meaningless in split");
6488 if (!kid->op_sibling)
6489 append_elem(OP_SPLIT, o, newDEFSVOP());
6491 kid = kid->op_sibling;
6494 if (!kid->op_sibling)
6495 append_elem(OP_SPLIT, o, newSVOP(OP_CONST, 0, newSViv(0)));
6497 kid = kid->op_sibling;
6500 if (kid->op_sibling)
6501 return too_many_arguments(o,OP_DESC(o));
6507 Perl_ck_join(pTHX_ OP *o)
6509 const OP * const kid = cLISTOPo->op_first->op_sibling;
6510 if (kid && kid->op_type == OP_MATCH) {
6511 if (ckWARN(WARN_SYNTAX)) {
6512 const REGEXP *re = PM_GETRE(kPMOP);
6513 const char *pmstr = re ? re->precomp : "STRING";
6514 Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
6515 "/%s/ should probably be written as \"%s\"",
6523 Perl_ck_subr(pTHX_ OP *o)
6526 OP *prev = ((cUNOPo->op_first->op_sibling)
6527 ? cUNOPo : ((UNOP*)cUNOPo->op_first))->op_first;
6528 OP *o2 = prev->op_sibling;
6535 I32 contextclass = 0;
6539 o->op_private |= OPpENTERSUB_HASTARG;
6540 for (cvop = o2; cvop->op_sibling; cvop = cvop->op_sibling) ;
6541 if (cvop->op_type == OP_RV2CV) {
6543 o->op_private |= (cvop->op_private & OPpENTERSUB_AMPER);
6544 op_null(cvop); /* disable rv2cv */
6545 tmpop = (SVOP*)((UNOP*)cvop)->op_first;
6546 if (tmpop->op_type == OP_GV && !(o->op_private & OPpENTERSUB_AMPER)) {
6547 GV *gv = cGVOPx_gv(tmpop);
6550 tmpop->op_private |= OPpEARLY_CV;
6553 namegv = CvANON(cv) ? gv : CvGV(cv);
6554 proto = SvPV_nolen((SV*)cv);
6556 if (CvASSERTION(cv)) {
6557 if (PL_hints & HINT_ASSERTING) {
6558 if (PERLDB_ASSERTION && PL_curstash != PL_debstash)
6559 o->op_private |= OPpENTERSUB_DB;
6563 if (!(PL_hints & HINT_ASSERTIONSSEEN) && ckWARN(WARN_ASSERTIONS)) {
6564 Perl_warner(aTHX_ packWARN(WARN_ASSERTIONS),
6565 "Impossible to activate assertion call");
6572 else if (cvop->op_type == OP_METHOD || cvop->op_type == OP_METHOD_NAMED) {
6573 if (o2->op_type == OP_CONST)
6574 o2->op_private &= ~OPpCONST_STRICT;
6575 else if (o2->op_type == OP_LIST) {
6576 OP * const o = ((UNOP*)o2)->op_first->op_sibling;
6577 if (o && o->op_type == OP_CONST)
6578 o->op_private &= ~OPpCONST_STRICT;
6581 o->op_private |= (PL_hints & HINT_STRICT_REFS);
6582 if (PERLDB_SUB && PL_curstash != PL_debstash)
6583 o->op_private |= OPpENTERSUB_DB;
6584 while (o2 != cvop) {
6588 return too_many_arguments(o, gv_ename(namegv));
6606 if (o2->op_type != OP_REFGEN && o2->op_type != OP_UNDEF)
6608 arg == 1 ? "block or sub {}" : "sub {}",
6609 gv_ename(namegv), o2);
6612 /* '*' allows any scalar type, including bareword */
6615 if (o2->op_type == OP_RV2GV)
6616 goto wrapref; /* autoconvert GLOB -> GLOBref */
6617 else if (o2->op_type == OP_CONST)
6618 o2->op_private &= ~OPpCONST_STRICT;
6619 else if (o2->op_type == OP_ENTERSUB) {
6620 /* accidental subroutine, revert to bareword */
6621 OP *gvop = ((UNOP*)o2)->op_first;
6622 if (gvop && gvop->op_type == OP_NULL) {
6623 gvop = ((UNOP*)gvop)->op_first;
6625 for (; gvop->op_sibling; gvop = gvop->op_sibling)
6628 (gvop->op_private & OPpENTERSUB_NOPAREN) &&
6629 (gvop = ((UNOP*)gvop)->op_first) &&
6630 gvop->op_type == OP_GV)
6632 GV * const gv = cGVOPx_gv(gvop);
6633 OP * const sibling = o2->op_sibling;
6634 SV * const n = newSVpvs("");
6636 gv_fullname4(n, gv, "", FALSE);
6637 o2 = newSVOP(OP_CONST, 0, n);
6638 prev->op_sibling = o2;
6639 o2->op_sibling = sibling;
6655 if (contextclass++ == 0) {
6656 e = strchr(proto, ']');
6657 if (!e || e == proto)
6666 /* XXX We shouldn't be modifying proto, so we can const proto */
6671 while (*--p != '[');
6672 bad_type(arg, Perl_form(aTHX_ "one of %s", p),
6673 gv_ename(namegv), o2);
6679 if (o2->op_type == OP_RV2GV)
6682 bad_type(arg, "symbol", gv_ename(namegv), o2);
6685 if (o2->op_type == OP_ENTERSUB)
6688 bad_type(arg, "subroutine entry", gv_ename(namegv), o2);
6691 if (o2->op_type == OP_RV2SV ||
6692 o2->op_type == OP_PADSV ||
6693 o2->op_type == OP_HELEM ||
6694 o2->op_type == OP_AELEM ||
6695 o2->op_type == OP_THREADSV)
6698 bad_type(arg, "scalar", gv_ename(namegv), o2);
6701 if (o2->op_type == OP_RV2AV ||
6702 o2->op_type == OP_PADAV)
6705 bad_type(arg, "array", gv_ename(namegv), o2);
6708 if (o2->op_type == OP_RV2HV ||
6709 o2->op_type == OP_PADHV)
6712 bad_type(arg, "hash", gv_ename(namegv), o2);
6717 OP* const sib = kid->op_sibling;
6718 kid->op_sibling = 0;
6719 o2 = newUNOP(OP_REFGEN, 0, kid);
6720 o2->op_sibling = sib;
6721 prev->op_sibling = o2;
6723 if (contextclass && e) {
6738 Perl_croak(aTHX_ "Malformed prototype for %s: %"SVf,
6739 gv_ename(namegv), cv);
6744 mod(o2, OP_ENTERSUB);
6746 o2 = o2->op_sibling;
6748 if (proto && !optional &&
6749 (*proto && *proto != '@' && *proto != '%' && *proto != ';'))
6750 return too_few_arguments(o, gv_ename(namegv));
6753 o=newSVOP(OP_CONST, 0, newSViv(0));
6759 Perl_ck_svconst(pTHX_ OP *o)
6761 SvREADONLY_on(cSVOPo->op_sv);
6766 Perl_ck_trunc(pTHX_ OP *o)
6768 if (o->op_flags & OPf_KIDS) {
6769 SVOP *kid = (SVOP*)cUNOPo->op_first;
6771 if (kid->op_type == OP_NULL)
6772 kid = (SVOP*)kid->op_sibling;
6773 if (kid && kid->op_type == OP_CONST &&
6774 (kid->op_private & OPpCONST_BARE))
6776 o->op_flags |= OPf_SPECIAL;
6777 kid->op_private &= ~OPpCONST_STRICT;
6784 Perl_ck_unpack(pTHX_ OP *o)
6786 OP *kid = cLISTOPo->op_first;
6787 if (kid->op_sibling) {
6788 kid = kid->op_sibling;
6789 if (!kid->op_sibling)
6790 kid->op_sibling = newDEFSVOP();
6796 Perl_ck_substr(pTHX_ OP *o)
6799 if ((o->op_flags & OPf_KIDS) && o->op_private == 4) {
6800 OP *kid = cLISTOPo->op_first;
6802 if (kid->op_type == OP_NULL)
6803 kid = kid->op_sibling;
6805 kid->op_flags |= OPf_MOD;
6811 /* A peephole optimizer. We visit the ops in the order they're to execute.
6812 * See the comments at the top of this file for more details about when
6813 * peep() is called */
6816 Perl_peep(pTHX_ register OP *o)
6819 register OP* oldop = NULL;
6821 if (!o || o->op_opt)
6825 SAVEVPTR(PL_curcop);
6826 for (; o; o = o->op_next) {
6830 switch (o->op_type) {
6834 PL_curcop = ((COP*)o); /* for warnings */
6839 if (cSVOPo->op_private & OPpCONST_STRICT)
6840 no_bareword_allowed(o);
6842 case OP_METHOD_NAMED:
6843 /* Relocate sv to the pad for thread safety.
6844 * Despite being a "constant", the SV is written to,
6845 * for reference counts, sv_upgrade() etc. */
6847 const PADOFFSET ix = pad_alloc(OP_CONST, SVs_PADTMP);
6848 if (o->op_type == OP_CONST && SvPADTMP(cSVOPo->op_sv)) {
6849 /* If op_sv is already a PADTMP then it is being used by
6850 * some pad, so make a copy. */
6851 sv_setsv(PAD_SVl(ix),cSVOPo->op_sv);
6852 SvREADONLY_on(PAD_SVl(ix));
6853 SvREFCNT_dec(cSVOPo->op_sv);
6855 else if (o->op_type == OP_CONST
6856 && cSVOPo->op_sv == &PL_sv_undef) {
6857 /* PL_sv_undef is hack - it's unsafe to store it in the
6858 AV that is the pad, because av_fetch treats values of
6859 PL_sv_undef as a "free" AV entry and will merrily
6860 replace them with a new SV, causing pad_alloc to think
6861 that this pad slot is free. (When, clearly, it is not)
6863 SvOK_off(PAD_SVl(ix));
6864 SvPADTMP_on(PAD_SVl(ix));
6865 SvREADONLY_on(PAD_SVl(ix));
6868 SvREFCNT_dec(PAD_SVl(ix));
6869 SvPADTMP_on(cSVOPo->op_sv);
6870 PAD_SETSV(ix, cSVOPo->op_sv);
6871 /* XXX I don't know how this isn't readonly already. */
6872 SvREADONLY_on(PAD_SVl(ix));
6874 cSVOPo->op_sv = Nullsv;
6882 if (o->op_next && o->op_next->op_type == OP_STRINGIFY) {
6883 if (o->op_next->op_private & OPpTARGET_MY) {
6884 if (o->op_flags & OPf_STACKED) /* chained concats */
6885 goto ignore_optimization;
6887 /* assert(PL_opargs[o->op_type] & OA_TARGLEX); */
6888 o->op_targ = o->op_next->op_targ;
6889 o->op_next->op_targ = 0;
6890 o->op_private |= OPpTARGET_MY;
6893 op_null(o->op_next);
6895 ignore_optimization:
6899 if ((o->op_flags & OPf_WANT) != OPf_WANT_LIST) {
6901 break; /* Scalar stub must produce undef. List stub is noop */
6905 if (o->op_targ == OP_NEXTSTATE
6906 || o->op_targ == OP_DBSTATE
6907 || o->op_targ == OP_SETSTATE)
6909 PL_curcop = ((COP*)o);
6911 /* XXX: We avoid setting op_seq here to prevent later calls
6912 to peep() from mistakenly concluding that optimisation
6913 has already occurred. This doesn't fix the real problem,
6914 though (See 20010220.007). AMS 20010719 */
6915 /* op_seq functionality is now replaced by op_opt */
6916 if (oldop && o->op_next) {
6917 oldop->op_next = o->op_next;
6925 if (oldop && o->op_next) {
6926 oldop->op_next = o->op_next;
6934 if (o->op_type == OP_PADAV || o->op_next->op_type == OP_RV2AV) {
6935 OP* const pop = (o->op_type == OP_PADAV) ?
6936 o->op_next : o->op_next->op_next;
6938 if (pop && pop->op_type == OP_CONST &&
6939 ((PL_op = pop->op_next)) &&
6940 pop->op_next->op_type == OP_AELEM &&
6941 !(pop->op_next->op_private &
6942 (OPpLVAL_INTRO|OPpLVAL_DEFER|OPpDEREF|OPpMAYBE_LVSUB)) &&
6943 (i = SvIV(((SVOP*)pop)->op_sv) - PL_curcop->cop_arybase)
6948 if (cSVOPx(pop)->op_private & OPpCONST_STRICT)
6949 no_bareword_allowed(pop);
6950 if (o->op_type == OP_GV)
6951 op_null(o->op_next);
6952 op_null(pop->op_next);
6954 o->op_flags |= pop->op_next->op_flags & OPf_MOD;
6955 o->op_next = pop->op_next->op_next;
6956 o->op_ppaddr = PL_ppaddr[OP_AELEMFAST];
6957 o->op_private = (U8)i;
6958 if (o->op_type == OP_GV) {
6963 o->op_flags |= OPf_SPECIAL;
6964 o->op_type = OP_AELEMFAST;
6970 if (o->op_next->op_type == OP_RV2SV) {
6971 if (!(o->op_next->op_private & OPpDEREF)) {
6972 op_null(o->op_next);
6973 o->op_private |= o->op_next->op_private & (OPpLVAL_INTRO
6975 o->op_next = o->op_next->op_next;
6976 o->op_type = OP_GVSV;
6977 o->op_ppaddr = PL_ppaddr[OP_GVSV];
6980 else if ((o->op_private & OPpEARLY_CV) && ckWARN(WARN_PROTOTYPE)) {
6981 GV * const gv = cGVOPo_gv;
6982 if (SvTYPE(gv) == SVt_PVGV && GvCV(gv) && SvPVX_const(GvCV(gv))) {
6983 /* XXX could check prototype here instead of just carping */
6984 SV * const sv = sv_newmortal();
6985 gv_efullname3(sv, gv, Nullch);
6986 Perl_warner(aTHX_ packWARN(WARN_PROTOTYPE),
6987 "%"SVf"() called too early to check prototype",
6991 else if (o->op_next->op_type == OP_READLINE
6992 && o->op_next->op_next->op_type == OP_CONCAT
6993 && (o->op_next->op_next->op_flags & OPf_STACKED))
6995 /* Turn "$a .= <FH>" into an OP_RCATLINE. AMS 20010917 */
6996 o->op_type = OP_RCATLINE;
6997 o->op_flags |= OPf_STACKED;
6998 o->op_ppaddr = PL_ppaddr[OP_RCATLINE];
6999 op_null(o->op_next->op_next);
7000 op_null(o->op_next);
7017 while (cLOGOP->op_other->op_type == OP_NULL)
7018 cLOGOP->op_other = cLOGOP->op_other->op_next;
7019 peep(cLOGOP->op_other); /* Recursive calls are not replaced by fptr calls */
7025 while (cLOOP->op_redoop->op_type == OP_NULL)
7026 cLOOP->op_redoop = cLOOP->op_redoop->op_next;
7027 peep(cLOOP->op_redoop);
7028 while (cLOOP->op_nextop->op_type == OP_NULL)
7029 cLOOP->op_nextop = cLOOP->op_nextop->op_next;
7030 peep(cLOOP->op_nextop);
7031 while (cLOOP->op_lastop->op_type == OP_NULL)
7032 cLOOP->op_lastop = cLOOP->op_lastop->op_next;
7033 peep(cLOOP->op_lastop);
7040 while (cPMOP->op_pmreplstart &&
7041 cPMOP->op_pmreplstart->op_type == OP_NULL)
7042 cPMOP->op_pmreplstart = cPMOP->op_pmreplstart->op_next;
7043 peep(cPMOP->op_pmreplstart);
7048 if (o->op_next && o->op_next->op_type == OP_NEXTSTATE
7049 && ckWARN(WARN_SYNTAX))
7051 if (o->op_next->op_sibling &&
7052 o->op_next->op_sibling->op_type != OP_EXIT &&
7053 o->op_next->op_sibling->op_type != OP_WARN &&
7054 o->op_next->op_sibling->op_type != OP_DIE) {
7055 const line_t oldline = CopLINE(PL_curcop);
7057 CopLINE_set(PL_curcop, CopLINE((COP*)o->op_next));
7058 Perl_warner(aTHX_ packWARN(WARN_EXEC),
7059 "Statement unlikely to be reached");
7060 Perl_warner(aTHX_ packWARN(WARN_EXEC),
7061 "\t(Maybe you meant system() when you said exec()?)\n");
7062 CopLINE_set(PL_curcop, oldline);
7072 const char *key = NULL;
7077 if (((BINOP*)o)->op_last->op_type != OP_CONST)
7080 /* Make the CONST have a shared SV */
7081 svp = cSVOPx_svp(((BINOP*)o)->op_last);
7082 if ((!SvFAKE(sv = *svp) || !SvREADONLY(sv)) && !IS_PADCONST(sv)) {
7083 key = SvPV_const(sv, keylen);
7084 lexname = newSVpvn_share(key,
7085 SvUTF8(sv) ? -(I32)keylen : keylen,
7091 if ((o->op_private & (OPpLVAL_INTRO)))
7094 rop = (UNOP*)((BINOP*)o)->op_first;
7095 if (rop->op_type != OP_RV2HV || rop->op_first->op_type != OP_PADSV)
7097 lexname = *av_fetch(PL_comppad_name, rop->op_first->op_targ, TRUE);
7098 if (!(SvFLAGS(lexname) & SVpad_TYPED))
7100 fields = (GV**)hv_fetch(SvSTASH(lexname), "FIELDS", 6, FALSE);
7101 if (!fields || !GvHV(*fields))
7103 key = SvPV_const(*svp, keylen);
7104 if (!hv_fetch(GvHV(*fields), key,
7105 SvUTF8(*svp) ? -(I32)keylen : keylen, FALSE))
7107 Perl_croak(aTHX_ "No such class field \"%s\" "
7108 "in variable %s of type %s",
7109 key, SvPV_nolen_const(lexname), HvNAME_get(SvSTASH(lexname)));
7122 SVOP *first_key_op, *key_op;
7124 if ((o->op_private & (OPpLVAL_INTRO))
7125 /* I bet there's always a pushmark... */
7126 || ((LISTOP*)o)->op_first->op_sibling->op_type != OP_LIST)
7127 /* hmmm, no optimization if list contains only one key. */
7129 rop = (UNOP*)((LISTOP*)o)->op_last;
7130 if (rop->op_type != OP_RV2HV)
7132 if (rop->op_first->op_type == OP_PADSV)
7133 /* @$hash{qw(keys here)} */
7134 rop = (UNOP*)rop->op_first;
7136 /* @{$hash}{qw(keys here)} */
7137 if (rop->op_first->op_type == OP_SCOPE
7138 && cLISTOPx(rop->op_first)->op_last->op_type == OP_PADSV)
7140 rop = (UNOP*)cLISTOPx(rop->op_first)->op_last;
7146 lexname = *av_fetch(PL_comppad_name, rop->op_targ, TRUE);
7147 if (!(SvFLAGS(lexname) & SVpad_TYPED))
7149 fields = (GV**)hv_fetch(SvSTASH(lexname), "FIELDS", 6, FALSE);
7150 if (!fields || !GvHV(*fields))
7152 /* Again guessing that the pushmark can be jumped over.... */
7153 first_key_op = (SVOP*)((LISTOP*)((LISTOP*)o)->op_first->op_sibling)
7154 ->op_first->op_sibling;
7155 for (key_op = first_key_op; key_op;
7156 key_op = (SVOP*)key_op->op_sibling) {
7157 if (key_op->op_type != OP_CONST)
7159 svp = cSVOPx_svp(key_op);
7160 key = SvPV_const(*svp, keylen);
7161 if (!hv_fetch(GvHV(*fields), key,
7162 SvUTF8(*svp) ? -(I32)keylen : keylen, FALSE))
7164 Perl_croak(aTHX_ "No such class field \"%s\" "
7165 "in variable %s of type %s",
7166 key, SvPV_nolen(lexname), HvNAME_get(SvSTASH(lexname)));
7173 /* will point to RV2AV or PADAV op on LHS/RHS of assign */
7177 /* check that RHS of sort is a single plain array */
7178 OP *oright = cUNOPo->op_first;
7179 if (!oright || oright->op_type != OP_PUSHMARK)
7182 /* reverse sort ... can be optimised. */
7183 if (!cUNOPo->op_sibling) {
7184 /* Nothing follows us on the list. */
7185 OP * const reverse = o->op_next;
7187 if (reverse->op_type == OP_REVERSE &&
7188 (reverse->op_flags & OPf_WANT) == OPf_WANT_LIST) {
7189 OP * const pushmark = cUNOPx(reverse)->op_first;
7190 if (pushmark && (pushmark->op_type == OP_PUSHMARK)
7191 && (cUNOPx(pushmark)->op_sibling == o)) {
7192 /* reverse -> pushmark -> sort */
7193 o->op_private |= OPpSORT_REVERSE;
7195 pushmark->op_next = oright->op_next;
7201 /* make @a = sort @a act in-place */
7205 oright = cUNOPx(oright)->op_sibling;
7208 if (oright->op_type == OP_NULL) { /* skip sort block/sub */
7209 oright = cUNOPx(oright)->op_sibling;
7213 (oright->op_type != OP_RV2AV && oright->op_type != OP_PADAV)
7214 || oright->op_next != o
7215 || (oright->op_private & OPpLVAL_INTRO)
7219 /* o2 follows the chain of op_nexts through the LHS of the
7220 * assign (if any) to the aassign op itself */
7222 if (!o2 || o2->op_type != OP_NULL)
7225 if (!o2 || o2->op_type != OP_PUSHMARK)
7228 if (o2 && o2->op_type == OP_GV)
7231 || (o2->op_type != OP_PADAV && o2->op_type != OP_RV2AV)
7232 || (o2->op_private & OPpLVAL_INTRO)
7237 if (!o2 || o2->op_type != OP_NULL)
7240 if (!o2 || o2->op_type != OP_AASSIGN
7241 || (o2->op_flags & OPf_WANT) != OPf_WANT_VOID)
7244 /* check that the sort is the first arg on RHS of assign */
7246 o2 = cUNOPx(o2)->op_first;
7247 if (!o2 || o2->op_type != OP_NULL)
7249 o2 = cUNOPx(o2)->op_first;
7250 if (!o2 || o2->op_type != OP_PUSHMARK)
7252 if (o2->op_sibling != o)
7255 /* check the array is the same on both sides */
7256 if (oleft->op_type == OP_RV2AV) {
7257 if (oright->op_type != OP_RV2AV
7258 || !cUNOPx(oright)->op_first
7259 || cUNOPx(oright)->op_first->op_type != OP_GV
7260 || cGVOPx_gv(cUNOPx(oleft)->op_first) !=
7261 cGVOPx_gv(cUNOPx(oright)->op_first)
7265 else if (oright->op_type != OP_PADAV
7266 || oright->op_targ != oleft->op_targ
7270 /* transfer MODishness etc from LHS arg to RHS arg */
7271 oright->op_flags = oleft->op_flags;
7272 o->op_private |= OPpSORT_INPLACE;
7274 /* excise push->gv->rv2av->null->aassign */
7275 o2 = o->op_next->op_next;
7276 op_null(o2); /* PUSHMARK */
7278 if (o2->op_type == OP_GV) {
7279 op_null(o2); /* GV */
7282 op_null(o2); /* RV2AV or PADAV */
7283 o2 = o2->op_next->op_next;
7284 op_null(o2); /* AASSIGN */
7286 o->op_next = o2->op_next;
7292 OP *ourmark, *theirmark, *ourlast, *iter, *expushmark, *rv2av;
7294 LISTOP *enter, *exlist;
7297 enter = (LISTOP *) o->op_next;
7300 if (enter->op_type == OP_NULL) {
7301 enter = (LISTOP *) enter->op_next;
7305 /* for $a (...) will have OP_GV then OP_RV2GV here.
7306 for (...) just has an OP_GV. */
7307 if (enter->op_type == OP_GV) {
7308 gvop = (OP *) enter;
7309 enter = (LISTOP *) enter->op_next;
7312 if (enter->op_type == OP_RV2GV) {
7313 enter = (LISTOP *) enter->op_next;
7319 if (enter->op_type != OP_ENTERITER)
7322 iter = enter->op_next;
7323 if (!iter || iter->op_type != OP_ITER)
7326 expushmark = enter->op_first;
7327 if (!expushmark || expushmark->op_type != OP_NULL
7328 || expushmark->op_targ != OP_PUSHMARK)
7331 exlist = (LISTOP *) expushmark->op_sibling;
7332 if (!exlist || exlist->op_type != OP_NULL
7333 || exlist->op_targ != OP_LIST)
7336 if (exlist->op_last != o) {
7337 /* Mmm. Was expecting to point back to this op. */
7340 theirmark = exlist->op_first;
7341 if (!theirmark || theirmark->op_type != OP_PUSHMARK)
7344 if (theirmark->op_sibling != o) {
7345 /* There's something between the mark and the reverse, eg
7346 for (1, reverse (...))
7351 ourmark = ((LISTOP *)o)->op_first;
7352 if (!ourmark || ourmark->op_type != OP_PUSHMARK)
7355 ourlast = ((LISTOP *)o)->op_last;
7356 if (!ourlast || ourlast->op_next != o)
7359 rv2av = ourmark->op_sibling;
7360 if (rv2av && rv2av->op_type == OP_RV2AV && rv2av->op_sibling == 0
7361 && rv2av->op_flags == (OPf_WANT_LIST | OPf_KIDS)
7362 && enter->op_flags == (OPf_WANT_LIST | OPf_KIDS)) {
7363 /* We're just reversing a single array. */
7364 rv2av->op_flags = OPf_WANT_SCALAR | OPf_KIDS | OPf_REF;
7365 enter->op_flags |= OPf_STACKED;
7368 /* We don't have control over who points to theirmark, so sacrifice
7370 theirmark->op_next = ourmark->op_next;
7371 theirmark->op_flags = ourmark->op_flags;
7372 ourlast->op_next = gvop ? gvop : (OP *) enter;
7375 enter->op_private |= OPpITER_REVERSED;
7376 iter->op_private |= OPpITER_REVERSED;
7383 UNOP *refgen, *rv2cv;
7386 /* I do not understand this, but if o->op_opt isn't set to 1,
7387 various tests in ext/B/t/bytecode.t fail with no readily
7393 if ((o->op_flags && OPf_WANT) != OPf_WANT_VOID)
7396 if ((o->op_private & ~OPpASSIGN_BACKWARDS) != 2)
7399 rv2gv = ((BINOP *)o)->op_last;
7400 if (!rv2gv || rv2gv->op_type != OP_RV2GV)
7403 refgen = (UNOP *)((BINOP *)o)->op_first;
7405 if (!refgen || refgen->op_type != OP_REFGEN)
7408 exlist = (LISTOP *)refgen->op_first;
7409 if (!exlist || exlist->op_type != OP_NULL
7410 || exlist->op_targ != OP_LIST)
7413 if (exlist->op_first->op_type != OP_PUSHMARK)
7416 rv2cv = (UNOP*)exlist->op_last;
7418 if (rv2cv->op_type != OP_RV2CV)
7421 assert ((rv2gv->op_private & OPpDONT_INIT_GV) == 0);
7422 assert ((o->op_private & OPpASSIGN_CV_TO_GV) == 0);
7423 assert ((rv2cv->op_private & OPpMAY_RETURN_CONSTANT) == 0);
7425 o->op_private |= OPpASSIGN_CV_TO_GV;
7426 rv2gv->op_private |= OPpDONT_INIT_GV;
7427 rv2cv->op_private |= OPpMAY_RETURN_CONSTANT;
7443 Perl_custom_op_name(pTHX_ const OP* o)
7446 const IV index = PTR2IV(o->op_ppaddr);
7450 if (!PL_custom_op_names) /* This probably shouldn't happen */
7451 return (char *)PL_op_name[OP_CUSTOM];
7453 keysv = sv_2mortal(newSViv(index));
7455 he = hv_fetch_ent(PL_custom_op_names, keysv, 0, 0);
7457 return (char *)PL_op_name[OP_CUSTOM]; /* Don't know who you are */
7459 return SvPV_nolen(HeVAL(he));
7463 Perl_custom_op_desc(pTHX_ const OP* o)
7466 const IV index = PTR2IV(o->op_ppaddr);
7470 if (!PL_custom_op_descs)
7471 return (char *)PL_op_desc[OP_CUSTOM];
7473 keysv = sv_2mortal(newSViv(index));
7475 he = hv_fetch_ent(PL_custom_op_descs, keysv, 0, 0);
7477 return (char *)PL_op_desc[OP_CUSTOM];
7479 return SvPV_nolen(HeVAL(he));
7484 /* Efficient sub that returns a constant scalar value. */
7486 const_sv_xsub(pTHX_ CV* cv)
7492 Perl_croak(aTHX_ "usage: %s::%s()",
7493 HvNAME_get(GvSTASH(CvGV(cv))), GvNAME(CvGV(cv)));
7497 ST(0) = (SV*)XSANY.any_ptr;
7503 * c-indentation-style: bsd
7505 * indent-tabs-mode: t
7508 * ex: set ts=8 sts=4 sw=4 noet: