3 * Copyright (C) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
4 * 2000, 2001, 2002, 2003, 2004, 2005, by Larry Wall and others
6 * You may distribute under the terms of either the GNU General Public
7 * License or the Artistic License, as specified in the README file.
12 * "You see: Mr. Drogo, he married poor Miss Primula Brandybuck. She was
13 * our Mr. Bilbo's first cousin on the mother's side (her mother being the
14 * youngest of the Old Took's daughters); and Mr. Drogo was his second
15 * cousin. So Mr. Frodo is his first *and* second cousin, once removed
16 * either way, as the saying is, if you follow me." --the Gaffer
19 /* This file contains the functions that create, manipulate and optimize
20 * the OP structures that hold a compiled perl program.
22 * A Perl program is compiled into a tree of OPs. Each op contains
23 * structural pointers (eg to its siblings and the next op in the
24 * execution sequence), a pointer to the function that would execute the
25 * op, plus any data specific to that op. For example, an OP_CONST op
26 * points to the pp_const() function and to an SV containing the constant
27 * value. When pp_const() is executed, its job is to push that SV onto the
30 * OPs are mainly created by the newFOO() functions, which are mainly
31 * called from the parser (in perly.y) as the code is parsed. For example
32 * the Perl code $a + $b * $c would cause the equivalent of the following
33 * to be called (oversimplifying a bit):
35 * newBINOP(OP_ADD, flags,
37 * newBINOP(OP_MULTIPLY, flags, newSVREF($b), newSVREF($c))
40 * Note that during the build of miniperl, a temporary copy of this file
41 * is made, called opmini.c.
45 Perl's compiler is essentially a 3-pass compiler with interleaved phases:
49 An execution-order pass
51 The bottom-up pass is represented by all the "newOP" routines and
52 the ck_ routines. The bottom-upness is actually driven by yacc.
53 So at the point that a ck_ routine fires, we have no idea what the
54 context is, either upward in the syntax tree, or either forward or
55 backward in the execution order. (The bottom-up parser builds that
56 part of the execution order it knows about, but if you follow the "next"
57 links around, you'll find it's actually a closed loop through the
60 Whenever the bottom-up parser gets to a node that supplies context to
61 its components, it invokes that portion of the top-down pass that applies
62 to that part of the subtree (and marks the top node as processed, so
63 if a node further up supplies context, it doesn't have to take the
64 plunge again). As a particular subcase of this, as the new node is
65 built, it takes all the closed execution loops of its subcomponents
66 and links them into a new closed loop for the higher level node. But
67 it's still not the real execution order.
69 The actual execution order is not known till we get a grammar reduction
70 to a top-level unit like a subroutine or file that will be called by
71 "name" rather than via a "next" pointer. At that point, we can call
72 into peep() to do that code's portion of the 3rd pass. It has to be
73 recursive, but it's recursive on basic blocks, not on tree nodes.
81 #define CALL_PEEP(o) CALL_FPTR(PL_peepp)(aTHX_ o)
83 #if defined(PL_OP_SLAB_ALLOC)
85 #ifndef PERL_SLAB_SIZE
86 #define PERL_SLAB_SIZE 2048
90 Perl_Slab_Alloc(pTHX_ int m, size_t sz)
93 * To make incrementing use count easy PL_OpSlab is an I32 *
94 * To make inserting the link to slab PL_OpPtr is I32 **
95 * So compute size in units of sizeof(I32 *) as that is how Pl_OpPtr increments
96 * Add an overhead for pointer to slab and round up as a number of pointers
98 sz = (sz + 2*sizeof(I32 *) -1)/sizeof(I32 *);
99 if ((PL_OpSpace -= sz) < 0) {
100 PL_OpPtr = (I32 **) PerlMemShared_malloc(PERL_SLAB_SIZE*sizeof(I32*));
104 Zero(PL_OpPtr,PERL_SLAB_SIZE,I32 **);
105 /* We reserve the 0'th I32 sized chunk as a use count */
106 PL_OpSlab = (I32 *) PL_OpPtr;
107 /* Reduce size by the use count word, and by the size we need.
108 * Latter is to mimic the '-=' in the if() above
110 PL_OpSpace = PERL_SLAB_SIZE - (sizeof(I32)+sizeof(I32 **)-1)/sizeof(I32 **) - sz;
111 /* Allocation pointer starts at the top.
112 Theory: because we build leaves before trunk allocating at end
113 means that at run time access is cache friendly upward
115 PL_OpPtr += PERL_SLAB_SIZE;
117 assert( PL_OpSpace >= 0 );
118 /* Move the allocation pointer down */
120 assert( PL_OpPtr > (I32 **) PL_OpSlab );
121 *PL_OpPtr = PL_OpSlab; /* Note which slab it belongs to */
122 (*PL_OpSlab)++; /* Increment use count of slab */
123 assert( PL_OpPtr+sz <= ((I32 **) PL_OpSlab + PERL_SLAB_SIZE) );
124 assert( *PL_OpSlab > 0 );
125 return (void *)(PL_OpPtr + 1);
129 Perl_Slab_Free(pTHX_ void *op)
131 I32 * const * const ptr = (I32 **) op;
132 I32 * const slab = ptr[-1];
133 assert( ptr-1 > (I32 **) slab );
134 assert( ptr < ( (I32 **) slab + PERL_SLAB_SIZE) );
136 if (--(*slab) == 0) {
138 # define PerlMemShared PerlMem
141 PerlMemShared_free(slab);
142 if (slab == PL_OpSlab) {
149 * In the following definition, the ", Nullop" is just to make the compiler
150 * think the expression is of the right type: croak actually does a Siglongjmp.
152 #define CHECKOP(type,o) \
153 ((PL_op_mask && PL_op_mask[type]) \
154 ? ( op_free((OP*)o), \
155 Perl_croak(aTHX_ "'%s' trapped by operation mask", PL_op_desc[type]), \
157 : CALL_FPTR(PL_check[type])(aTHX_ (OP*)o))
159 #define RETURN_UNLIMITED_NUMBER (PERL_INT_MAX / 2)
162 S_gv_ename(pTHX_ GV *gv)
164 SV* const tmpsv = sv_newmortal();
165 gv_efullname3(tmpsv, gv, Nullch);
166 return SvPV_nolen_const(tmpsv);
170 S_no_fh_allowed(pTHX_ OP *o)
172 yyerror(Perl_form(aTHX_ "Missing comma after first argument to %s function",
178 S_too_few_arguments(pTHX_ OP *o, const char *name)
180 yyerror(Perl_form(aTHX_ "Not enough arguments for %s", name));
185 S_too_many_arguments(pTHX_ OP *o, const char *name)
187 yyerror(Perl_form(aTHX_ "Too many arguments for %s", name));
192 S_bad_type(pTHX_ I32 n, const char *t, const char *name, const OP *kid)
194 yyerror(Perl_form(aTHX_ "Type of arg %d to %s must be %s (not %s)",
195 (int)n, name, t, OP_DESC(kid)));
199 S_no_bareword_allowed(pTHX_ const OP *o)
201 qerror(Perl_mess(aTHX_
202 "Bareword \"%"SVf"\" not allowed while \"strict subs\" in use",
206 /* "register" allocation */
209 Perl_allocmy(pTHX_ char *name)
213 /* complain about "my $<special_var>" etc etc */
214 if (!(PL_in_my == KEY_our ||
216 (USE_UTF8_IN_NAMES && UTF8_IS_START(name[1])) ||
217 (name[1] == '_' && (*name == '$' || (int)strlen(name) > 2))))
219 if (!isPRINT(name[1]) || strchr("\t\n\r\f", name[1])) {
220 /* 1999-02-27 mjd@plover.com */
222 p = strchr(name, '\0');
223 /* The next block assumes the buffer is at least 205 chars
224 long. At present, it's always at least 256 chars. */
226 strcpy(name+200, "...");
232 /* Move everything else down one character */
233 for (; p-name > 2; p--)
235 name[2] = toCTRL(name[1]);
238 yyerror(Perl_form(aTHX_ "Can't use global %s in \"my\"",name));
241 /* check for duplicate declaration */
243 (bool)(PL_in_my == KEY_our),
244 (PL_curstash ? PL_curstash : PL_defstash)
247 if (PL_in_my_stash && *name != '$') {
248 yyerror(Perl_form(aTHX_
249 "Can't declare class for non-scalar %s in \"%s\"",
250 name, PL_in_my == KEY_our ? "our" : "my"));
253 /* allocate a spare slot and store the name in that slot */
255 off = pad_add_name(name,
258 /* $_ is always in main::, even with our */
259 ? (PL_curstash && !strEQ(name,"$_") ? PL_curstash : PL_defstash)
270 Perl_op_free(pTHX_ OP *o)
276 if (!o || o->op_static)
279 if (o->op_private & OPpREFCOUNTED) {
280 switch (o->op_type) {
288 refcnt = OpREFCNT_dec(o);
298 if (o->op_flags & OPf_KIDS) {
299 register OP *kid, *nextkid;
300 for (kid = cUNOPo->op_first; kid; kid = nextkid) {
301 nextkid = kid->op_sibling; /* Get before next freeing kid */
307 type = (OPCODE)o->op_targ;
309 /* COP* is not cleared by op_clear() so that we may track line
310 * numbers etc even after null() */
311 if (type == OP_NEXTSTATE || type == OP_SETSTATE || type == OP_DBSTATE)
316 #ifdef DEBUG_LEAKING_SCALARS
323 Perl_op_clear(pTHX_ OP *o)
327 switch (o->op_type) {
328 case OP_NULL: /* Was holding old type, if any. */
329 case OP_ENTEREVAL: /* Was holding hints. */
333 if (!(o->op_flags & OPf_REF)
334 || (PL_check[o->op_type] != MEMBER_TO_FPTR(Perl_ck_ftst)))
340 if (! (o->op_type == OP_AELEMFAST && o->op_flags & OPf_SPECIAL)) {
341 /* not an OP_PADAV replacement */
343 if (cPADOPo->op_padix > 0) {
344 /* No GvIN_PAD_off(cGVOPo_gv) here, because other references
345 * may still exist on the pad */
346 pad_swipe(cPADOPo->op_padix, TRUE);
347 cPADOPo->op_padix = 0;
350 SvREFCNT_dec(cSVOPo->op_sv);
351 cSVOPo->op_sv = Nullsv;
355 case OP_METHOD_NAMED:
357 SvREFCNT_dec(cSVOPo->op_sv);
358 cSVOPo->op_sv = Nullsv;
361 Even if op_clear does a pad_free for the target of the op,
362 pad_free doesn't actually remove the sv that exists in the pad;
363 instead it lives on. This results in that it could be reused as
364 a target later on when the pad was reallocated.
367 pad_swipe(o->op_targ,1);
376 if (o->op_flags & (OPf_SPECIAL|OPf_STACKED|OPf_KIDS))
380 if (o->op_private & (OPpTRANS_FROM_UTF|OPpTRANS_TO_UTF)) {
381 SvREFCNT_dec(cSVOPo->op_sv);
382 cSVOPo->op_sv = Nullsv;
385 Safefree(cPVOPo->op_pv);
386 cPVOPo->op_pv = Nullch;
390 op_free(cPMOPo->op_pmreplroot);
394 if (INT2PTR(PADOFFSET, cPMOPo->op_pmreplroot)) {
395 /* No GvIN_PAD_off here, because other references may still
396 * exist on the pad */
397 pad_swipe(INT2PTR(PADOFFSET, cPMOPo->op_pmreplroot), TRUE);
400 SvREFCNT_dec((SV*)cPMOPo->op_pmreplroot);
407 HV * const pmstash = PmopSTASH(cPMOPo);
408 if (pmstash && SvREFCNT(pmstash)) {
409 MAGIC * const mg = mg_find((SV*)pmstash, PERL_MAGIC_symtab);
411 PMOP *pmop = (PMOP*) mg->mg_obj;
412 PMOP *lastpmop = NULL;
414 if (cPMOPo == pmop) {
416 lastpmop->op_pmnext = pmop->op_pmnext;
418 mg->mg_obj = (SV*) pmop->op_pmnext;
422 pmop = pmop->op_pmnext;
426 PmopSTASH_free(cPMOPo);
428 cPMOPo->op_pmreplroot = Nullop;
429 /* we use the "SAFE" version of the PM_ macros here
430 * since sv_clean_all might release some PMOPs
431 * after PL_regex_padav has been cleared
432 * and the clearing of PL_regex_padav needs to
433 * happen before sv_clean_all
435 ReREFCNT_dec(PM_GETRE_SAFE(cPMOPo));
436 PM_SETRE_SAFE(cPMOPo, (REGEXP*)NULL);
438 if(PL_regex_pad) { /* We could be in destruction */
439 av_push((AV*) PL_regex_pad[0],(SV*) PL_regex_pad[(cPMOPo)->op_pmoffset]);
440 SvREPADTMP_on(PL_regex_pad[(cPMOPo)->op_pmoffset]);
441 PM_SETRE(cPMOPo, (cPMOPo)->op_pmoffset);
448 if (o->op_targ > 0) {
449 pad_free(o->op_targ);
455 S_cop_free(pTHX_ COP* cop)
457 Safefree(cop->cop_label); /* FIXME: treaddead ??? */
460 if (! specialWARN(cop->cop_warnings))
461 SvREFCNT_dec(cop->cop_warnings);
462 if (! specialCopIO(cop->cop_io)) {
466 char *s = SvPV(cop->cop_io,len);
467 Perl_warn(aTHX_ "io='%.*s'",(int) len,s); /* ??? --jhi */
470 SvREFCNT_dec(cop->cop_io);
476 Perl_op_null(pTHX_ OP *o)
479 if (o->op_type == OP_NULL)
482 o->op_targ = o->op_type;
483 o->op_type = OP_NULL;
484 o->op_ppaddr = PL_ppaddr[OP_NULL];
488 Perl_op_refcnt_lock(pTHX)
495 Perl_op_refcnt_unlock(pTHX)
501 /* Contextualizers */
503 #define LINKLIST(o) ((o)->op_next ? (o)->op_next : linklist((OP*)o))
506 Perl_linklist(pTHX_ OP *o)
512 /* establish postfix order */
513 if (cUNOPo->op_first) {
515 o->op_next = LINKLIST(cUNOPo->op_first);
516 for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling) {
518 kid->op_next = LINKLIST(kid->op_sibling);
530 Perl_scalarkids(pTHX_ OP *o)
532 if (o && o->op_flags & OPf_KIDS) {
534 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
541 S_scalarboolean(pTHX_ OP *o)
543 if (o->op_type == OP_SASSIGN && cBINOPo->op_first->op_type == OP_CONST) {
544 if (ckWARN(WARN_SYNTAX)) {
545 const line_t oldline = CopLINE(PL_curcop);
547 if (PL_copline != NOLINE)
548 CopLINE_set(PL_curcop, PL_copline);
549 Perl_warner(aTHX_ packWARN(WARN_SYNTAX), "Found = in conditional, should be ==");
550 CopLINE_set(PL_curcop, oldline);
557 Perl_scalar(pTHX_ OP *o)
562 /* assumes no premature commitment */
563 if (!o || PL_error_count || (o->op_flags & OPf_WANT)
564 || o->op_type == OP_RETURN)
569 o->op_flags = (o->op_flags & ~OPf_WANT) | OPf_WANT_SCALAR;
571 switch (o->op_type) {
573 scalar(cBINOPo->op_first);
578 for (kid = cUNOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
582 if ((kid = cLISTOPo->op_first) && kid->op_type == OP_PUSHRE) {
583 if (!kPMOP->op_pmreplroot)
584 deprecate_old("implicit split to @_");
592 if (o->op_flags & OPf_KIDS) {
593 for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling)
599 kid = cLISTOPo->op_first;
601 while ((kid = kid->op_sibling)) {
607 WITH_THR(PL_curcop = &PL_compiling);
612 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling) {
618 WITH_THR(PL_curcop = &PL_compiling);
621 if (ckWARN(WARN_VOID))
622 Perl_warner(aTHX_ packWARN(WARN_VOID), "Useless use of sort in scalar context");
628 Perl_scalarvoid(pTHX_ OP *o)
632 const char* useless = 0;
636 if (o->op_type == OP_NEXTSTATE
637 || o->op_type == OP_SETSTATE
638 || o->op_type == OP_DBSTATE
639 || (o->op_type == OP_NULL && (o->op_targ == OP_NEXTSTATE
640 || o->op_targ == OP_SETSTATE
641 || o->op_targ == OP_DBSTATE)))
642 PL_curcop = (COP*)o; /* for warning below */
644 /* assumes no premature commitment */
645 want = o->op_flags & OPf_WANT;
646 if ((want && want != OPf_WANT_SCALAR) || PL_error_count
647 || o->op_type == OP_RETURN)
652 if ((o->op_private & OPpTARGET_MY)
653 && (PL_opargs[o->op_type] & OA_TARGLEX))/* OPp share the meaning */
655 return scalar(o); /* As if inside SASSIGN */
658 o->op_flags = (o->op_flags & ~OPf_WANT) | OPf_WANT_VOID;
660 switch (o->op_type) {
662 if (!(PL_opargs[o->op_type] & OA_FOLDCONST))
666 if (o->op_flags & OPf_STACKED)
670 if (o->op_private == 4)
742 if (!(o->op_private & (OPpLVAL_INTRO|OPpOUR_INTRO)))
743 useless = OP_DESC(o);
747 kid = cUNOPo->op_first;
748 if (kid->op_type != OP_MATCH && kid->op_type != OP_SUBST &&
749 kid->op_type != OP_TRANS) {
752 useless = "negative pattern binding (!~)";
759 if (!(o->op_private & (OPpLVAL_INTRO|OPpOUR_INTRO)) &&
760 (!o->op_sibling || o->op_sibling->op_type != OP_READLINE))
761 useless = "a variable";
766 if (cSVOPo->op_private & OPpCONST_STRICT)
767 no_bareword_allowed(o);
769 if (ckWARN(WARN_VOID)) {
770 useless = "a constant";
771 /* don't warn on optimised away booleans, eg
772 * use constant Foo, 5; Foo || print; */
773 if (cSVOPo->op_private & OPpCONST_SHORTCIRCUIT)
775 /* the constants 0 and 1 are permitted as they are
776 conventionally used as dummies in constructs like
777 1 while some_condition_with_side_effects; */
778 else if (SvNIOK(sv) && (SvNV(sv) == 0.0 || SvNV(sv) == 1.0))
780 else if (SvPOK(sv)) {
781 /* perl4's way of mixing documentation and code
782 (before the invention of POD) was based on a
783 trick to mix nroff and perl code. The trick was
784 built upon these three nroff macros being used in
785 void context. The pink camel has the details in
786 the script wrapman near page 319. */
787 if (strnEQ(SvPVX_const(sv), "di", 2) ||
788 strnEQ(SvPVX_const(sv), "ds", 2) ||
789 strnEQ(SvPVX_const(sv), "ig", 2))
794 op_null(o); /* don't execute or even remember it */
798 o->op_type = OP_PREINC; /* pre-increment is faster */
799 o->op_ppaddr = PL_ppaddr[OP_PREINC];
803 o->op_type = OP_PREDEC; /* pre-decrement is faster */
804 o->op_ppaddr = PL_ppaddr[OP_PREDEC];
808 o->op_type = OP_I_PREINC; /* pre-increment is faster */
809 o->op_ppaddr = PL_ppaddr[OP_I_PREINC];
813 o->op_type = OP_I_PREDEC; /* pre-decrement is faster */
814 o->op_ppaddr = PL_ppaddr[OP_I_PREDEC];
821 for (kid = cUNOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
826 if (o->op_flags & OPf_STACKED)
833 if (!(o->op_flags & OPf_KIDS))
842 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
849 /* all requires must return a boolean value */
850 o->op_flags &= ~OPf_WANT;
855 if ((kid = cLISTOPo->op_first) && kid->op_type == OP_PUSHRE) {
856 if (!kPMOP->op_pmreplroot)
857 deprecate_old("implicit split to @_");
861 if (useless && ckWARN(WARN_VOID))
862 Perl_warner(aTHX_ packWARN(WARN_VOID), "Useless use of %s in void context", useless);
867 Perl_listkids(pTHX_ OP *o)
869 if (o && o->op_flags & OPf_KIDS) {
871 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
878 Perl_list(pTHX_ OP *o)
883 /* assumes no premature commitment */
884 if (!o || (o->op_flags & OPf_WANT) || PL_error_count
885 || o->op_type == OP_RETURN)
890 if ((o->op_private & OPpTARGET_MY)
891 && (PL_opargs[o->op_type] & OA_TARGLEX))/* OPp share the meaning */
893 return o; /* As if inside SASSIGN */
896 o->op_flags = (o->op_flags & ~OPf_WANT) | OPf_WANT_LIST;
898 switch (o->op_type) {
901 list(cBINOPo->op_first);
906 for (kid = cUNOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
914 if (!(o->op_flags & OPf_KIDS))
916 if (!o->op_next && cUNOPo->op_first->op_type == OP_FLOP) {
917 list(cBINOPo->op_first);
918 return gen_constant_list(o);
925 kid = cLISTOPo->op_first;
927 while ((kid = kid->op_sibling)) {
933 WITH_THR(PL_curcop = &PL_compiling);
937 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling) {
943 WITH_THR(PL_curcop = &PL_compiling);
946 /* all requires must return a boolean value */
947 o->op_flags &= ~OPf_WANT;
954 Perl_scalarseq(pTHX_ OP *o)
957 if (o->op_type == OP_LINESEQ ||
958 o->op_type == OP_SCOPE ||
959 o->op_type == OP_LEAVE ||
960 o->op_type == OP_LEAVETRY)
963 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling) {
964 if (kid->op_sibling) {
968 PL_curcop = &PL_compiling;
970 o->op_flags &= ~OPf_PARENS;
971 if (PL_hints & HINT_BLOCK_SCOPE)
972 o->op_flags |= OPf_PARENS;
975 o = newOP(OP_STUB, 0);
980 S_modkids(pTHX_ OP *o, I32 type)
982 if (o && o->op_flags & OPf_KIDS) {
984 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
990 /* Propagate lvalue ("modifiable") context to an op and it's children.
991 * 'type' represents the context type, roughly based on the type of op that
992 * would do the modifying, although local() is represented by OP_NULL.
993 * It's responsible for detecting things that can't be modified, flag
994 * things that need to behave specially in an lvalue context (e.g., "$$x = 5"
995 * might have to vivify a reference in $x), and so on.
997 * For example, "$a+1 = 2" would cause mod() to be called with o being
998 * OP_ADD and type being OP_SASSIGN, and would output an error.
1002 Perl_mod(pTHX_ OP *o, I32 type)
1006 /* -1 = error on localize, 0 = ignore localize, 1 = ok to localize */
1009 if (!o || PL_error_count)
1012 if ((o->op_private & OPpTARGET_MY)
1013 && (PL_opargs[o->op_type] & OA_TARGLEX))/* OPp share the meaning */
1018 switch (o->op_type) {
1024 if (!(o->op_private & (OPpCONST_ARYBASE)))
1026 if (PL_eval_start && PL_eval_start->op_type == OP_CONST) {
1027 PL_compiling.cop_arybase = (I32)SvIV(cSVOPx(PL_eval_start)->op_sv);
1031 SAVEI32(PL_compiling.cop_arybase);
1032 PL_compiling.cop_arybase = 0;
1034 else if (type == OP_REFGEN)
1037 Perl_croak(aTHX_ "That use of $[ is unsupported");
1040 if (o->op_flags & OPf_PARENS)
1044 if ((type == OP_UNDEF || type == OP_REFGEN) &&
1045 !(o->op_flags & OPf_STACKED)) {
1046 o->op_type = OP_RV2CV; /* entersub => rv2cv */
1047 o->op_ppaddr = PL_ppaddr[OP_RV2CV];
1048 assert(cUNOPo->op_first->op_type == OP_NULL);
1049 op_null(((LISTOP*)cUNOPo->op_first)->op_first);/* disable pushmark */
1052 else if (o->op_private & OPpENTERSUB_NOMOD)
1054 else { /* lvalue subroutine call */
1055 o->op_private |= OPpLVAL_INTRO;
1056 PL_modcount = RETURN_UNLIMITED_NUMBER;
1057 if (type == OP_GREPSTART || type == OP_ENTERSUB || type == OP_REFGEN) {
1058 /* Backward compatibility mode: */
1059 o->op_private |= OPpENTERSUB_INARGS;
1062 else { /* Compile-time error message: */
1063 OP *kid = cUNOPo->op_first;
1067 if (kid->op_type == OP_PUSHMARK)
1069 if (kid->op_type != OP_NULL || kid->op_targ != OP_LIST)
1071 "panic: unexpected lvalue entersub "
1072 "args: type/targ %ld:%"UVuf,
1073 (long)kid->op_type, (UV)kid->op_targ);
1074 kid = kLISTOP->op_first;
1076 while (kid->op_sibling)
1077 kid = kid->op_sibling;
1078 if (!(kid->op_type == OP_NULL && kid->op_targ == OP_RV2CV)) {
1080 if (kid->op_type == OP_METHOD_NAMED
1081 || kid->op_type == OP_METHOD)
1085 NewOp(1101, newop, 1, UNOP);
1086 newop->op_type = OP_RV2CV;
1087 newop->op_ppaddr = PL_ppaddr[OP_RV2CV];
1088 newop->op_first = Nullop;
1089 newop->op_next = (OP*)newop;
1090 kid->op_sibling = (OP*)newop;
1091 newop->op_private |= OPpLVAL_INTRO;
1095 if (kid->op_type != OP_RV2CV)
1097 "panic: unexpected lvalue entersub "
1098 "entry via type/targ %ld:%"UVuf,
1099 (long)kid->op_type, (UV)kid->op_targ);
1100 kid->op_private |= OPpLVAL_INTRO;
1101 break; /* Postpone until runtime */
1105 kid = kUNOP->op_first;
1106 if (kid->op_type == OP_NULL && kid->op_targ == OP_RV2SV)
1107 kid = kUNOP->op_first;
1108 if (kid->op_type == OP_NULL)
1110 "Unexpected constant lvalue entersub "
1111 "entry via type/targ %ld:%"UVuf,
1112 (long)kid->op_type, (UV)kid->op_targ);
1113 if (kid->op_type != OP_GV) {
1114 /* Restore RV2CV to check lvalueness */
1116 if (kid->op_next && kid->op_next != kid) { /* Happens? */
1117 okid->op_next = kid->op_next;
1118 kid->op_next = okid;
1121 okid->op_next = Nullop;
1122 okid->op_type = OP_RV2CV;
1124 okid->op_ppaddr = PL_ppaddr[OP_RV2CV];
1125 okid->op_private |= OPpLVAL_INTRO;
1129 cv = GvCV(kGVOP_gv);
1139 /* grep, foreach, subcalls, refgen */
1140 if (type == OP_GREPSTART || type == OP_ENTERSUB || type == OP_REFGEN)
1142 yyerror(Perl_form(aTHX_ "Can't modify %s in %s",
1143 (o->op_type == OP_NULL && (o->op_flags & OPf_SPECIAL)
1145 : (o->op_type == OP_ENTERSUB
1146 ? "non-lvalue subroutine call"
1148 type ? PL_op_desc[type] : "local"));
1162 case OP_RIGHT_SHIFT:
1171 if (!(o->op_flags & OPf_STACKED))
1178 for (kid = cUNOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
1184 if (type == OP_REFGEN && o->op_flags & OPf_PARENS) {
1185 PL_modcount = RETURN_UNLIMITED_NUMBER;
1186 return o; /* Treat \(@foo) like ordinary list. */
1190 if (scalar_mod_type(o, type))
1192 ref(cUNOPo->op_first, o->op_type);
1196 if (type == OP_LEAVESUBLV)
1197 o->op_private |= OPpMAYBE_LVSUB;
1203 PL_modcount = RETURN_UNLIMITED_NUMBER;
1206 ref(cUNOPo->op_first, o->op_type);
1211 PL_hints |= HINT_BLOCK_SCOPE;
1226 PL_modcount = RETURN_UNLIMITED_NUMBER;
1227 if (type == OP_REFGEN && o->op_flags & OPf_PARENS)
1228 return o; /* Treat \(@foo) like ordinary list. */
1229 if (scalar_mod_type(o, type))
1231 if (type == OP_LEAVESUBLV)
1232 o->op_private |= OPpMAYBE_LVSUB;
1236 if (!type) /* local() */
1237 Perl_croak(aTHX_ "Can't localize lexical variable %s",
1238 PAD_COMPNAME_PV(o->op_targ));
1246 if (type != OP_SASSIGN)
1250 if (o->op_private == 4) /* don't allow 4 arg substr as lvalue */
1255 if (type == OP_LEAVESUBLV)
1256 o->op_private |= OPpMAYBE_LVSUB;
1258 pad_free(o->op_targ);
1259 o->op_targ = pad_alloc(o->op_type, SVs_PADMY);
1260 assert(SvTYPE(PAD_SV(o->op_targ)) == SVt_NULL);
1261 if (o->op_flags & OPf_KIDS)
1262 mod(cBINOPo->op_first->op_sibling, type);
1267 ref(cBINOPo->op_first, o->op_type);
1268 if (type == OP_ENTERSUB &&
1269 !(o->op_private & (OPpLVAL_INTRO | OPpDEREF)))
1270 o->op_private |= OPpLVAL_DEFER;
1271 if (type == OP_LEAVESUBLV)
1272 o->op_private |= OPpMAYBE_LVSUB;
1282 if (o->op_flags & OPf_KIDS)
1283 mod(cLISTOPo->op_last, type);
1288 if (o->op_flags & OPf_SPECIAL) /* do BLOCK */
1290 else if (!(o->op_flags & OPf_KIDS))
1292 if (o->op_targ != OP_LIST) {
1293 mod(cBINOPo->op_first, type);
1299 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
1304 if (type != OP_LEAVESUBLV)
1306 break; /* mod()ing was handled by ck_return() */
1309 /* [20011101.069] File test operators interpret OPf_REF to mean that
1310 their argument is a filehandle; thus \stat(".") should not set
1312 if (type == OP_REFGEN &&
1313 PL_check[o->op_type] == MEMBER_TO_FPTR(Perl_ck_ftst))
1316 if (type != OP_LEAVESUBLV)
1317 o->op_flags |= OPf_MOD;
1319 if (type == OP_AASSIGN || type == OP_SASSIGN)
1320 o->op_flags |= OPf_SPECIAL|OPf_REF;
1321 else if (!type) { /* local() */
1324 o->op_private |= OPpLVAL_INTRO;
1325 o->op_flags &= ~OPf_SPECIAL;
1326 PL_hints |= HINT_BLOCK_SCOPE;
1331 if (ckWARN(WARN_SYNTAX)) {
1332 Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
1333 "Useless localization of %s", OP_DESC(o));
1337 else if (type != OP_GREPSTART && type != OP_ENTERSUB
1338 && type != OP_LEAVESUBLV)
1339 o->op_flags |= OPf_REF;
1344 S_scalar_mod_type(pTHX_ const OP *o, I32 type)
1348 if (o->op_type == OP_RV2GV)
1372 case OP_RIGHT_SHIFT:
1391 S_is_handle_constructor(pTHX_ const OP *o, I32 numargs)
1393 switch (o->op_type) {
1401 case OP_SELECT: /* XXX c.f. SelectSaver.pm */
1414 Perl_refkids(pTHX_ OP *o, I32 type)
1416 if (o && o->op_flags & OPf_KIDS) {
1418 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
1425 Perl_doref(pTHX_ OP *o, I32 type, bool set_op_ref)
1430 if (!o || PL_error_count)
1433 switch (o->op_type) {
1435 if ((type == OP_EXISTS || type == OP_DEFINED || type == OP_LOCK) &&
1436 !(o->op_flags & OPf_STACKED)) {
1437 o->op_type = OP_RV2CV; /* entersub => rv2cv */
1438 o->op_ppaddr = PL_ppaddr[OP_RV2CV];
1439 assert(cUNOPo->op_first->op_type == OP_NULL);
1440 op_null(((LISTOP*)cUNOPo->op_first)->op_first); /* disable pushmark */
1441 o->op_flags |= OPf_SPECIAL;
1446 for (kid = cUNOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
1447 doref(kid, type, set_op_ref);
1450 if (type == OP_DEFINED)
1451 o->op_flags |= OPf_SPECIAL; /* don't create GV */
1452 doref(cUNOPo->op_first, o->op_type, set_op_ref);
1455 if (type == OP_RV2SV || type == OP_RV2AV || type == OP_RV2HV) {
1456 o->op_private |= (type == OP_RV2AV ? OPpDEREF_AV
1457 : type == OP_RV2HV ? OPpDEREF_HV
1459 o->op_flags |= OPf_MOD;
1464 o->op_flags |= OPf_MOD; /* XXX ??? */
1470 o->op_flags |= OPf_REF;
1473 if (type == OP_DEFINED)
1474 o->op_flags |= OPf_SPECIAL; /* don't create GV */
1475 doref(cUNOPo->op_first, o->op_type, set_op_ref);
1481 o->op_flags |= OPf_REF;
1486 if (!(o->op_flags & OPf_KIDS))
1488 doref(cBINOPo->op_first, type, set_op_ref);
1492 doref(cBINOPo->op_first, o->op_type, set_op_ref);
1493 if (type == OP_RV2SV || type == OP_RV2AV || type == OP_RV2HV) {
1494 o->op_private |= (type == OP_RV2AV ? OPpDEREF_AV
1495 : type == OP_RV2HV ? OPpDEREF_HV
1497 o->op_flags |= OPf_MOD;
1507 if (!(o->op_flags & OPf_KIDS))
1509 doref(cLISTOPo->op_last, type, set_op_ref);
1518 /* ref() is now a macro using Perl_doref;
1519 * this version provided for binary compatibility only.
1522 Perl_ref(pTHX_ OP *o, I32 type)
1524 return doref(o, type, TRUE);
1528 S_dup_attrlist(pTHX_ OP *o)
1532 /* An attrlist is either a simple OP_CONST or an OP_LIST with kids,
1533 * where the first kid is OP_PUSHMARK and the remaining ones
1534 * are OP_CONST. We need to push the OP_CONST values.
1536 if (o->op_type == OP_CONST)
1537 rop = newSVOP(OP_CONST, o->op_flags, SvREFCNT_inc(cSVOPo->op_sv));
1539 assert((o->op_type == OP_LIST) && (o->op_flags & OPf_KIDS));
1540 for (o = cLISTOPo->op_first; o; o=o->op_sibling) {
1541 if (o->op_type == OP_CONST)
1542 rop = append_elem(OP_LIST, rop,
1543 newSVOP(OP_CONST, o->op_flags,
1544 SvREFCNT_inc(cSVOPo->op_sv)));
1551 S_apply_attrs(pTHX_ HV *stash, SV *target, OP *attrs, bool for_my)
1556 /* fake up C<use attributes $pkg,$rv,@attrs> */
1557 ENTER; /* need to protect against side-effects of 'use' */
1559 stashsv = stash ? newSVhek(HvNAME_HEK(stash)) : &PL_sv_no;
1561 #define ATTRSMODULE "attributes"
1562 #define ATTRSMODULE_PM "attributes.pm"
1565 /* Don't force the C<use> if we don't need it. */
1566 SV * const * const svp = hv_fetch(GvHVn(PL_incgv), ATTRSMODULE_PM,
1567 sizeof(ATTRSMODULE_PM)-1, 0);
1568 if (svp && *svp != &PL_sv_undef)
1569 ; /* already in %INC */
1571 Perl_load_module(aTHX_ PERL_LOADMOD_NOIMPORT,
1572 newSVpvn(ATTRSMODULE, sizeof(ATTRSMODULE)-1),
1576 Perl_load_module(aTHX_ PERL_LOADMOD_IMPORT_OPS,
1577 newSVpvn(ATTRSMODULE, sizeof(ATTRSMODULE)-1),
1579 prepend_elem(OP_LIST,
1580 newSVOP(OP_CONST, 0, stashsv),
1581 prepend_elem(OP_LIST,
1582 newSVOP(OP_CONST, 0,
1584 dup_attrlist(attrs))));
1590 S_apply_attrs_my(pTHX_ HV *stash, OP *target, OP *attrs, OP **imopsp)
1592 OP *pack, *imop, *arg;
1598 assert(target->op_type == OP_PADSV ||
1599 target->op_type == OP_PADHV ||
1600 target->op_type == OP_PADAV);
1602 /* Ensure that attributes.pm is loaded. */
1603 apply_attrs(stash, PAD_SV(target->op_targ), attrs, TRUE);
1605 /* Need package name for method call. */
1606 pack = newSVOP(OP_CONST, 0, newSVpvn(ATTRSMODULE, sizeof(ATTRSMODULE)-1));
1608 /* Build up the real arg-list. */
1609 stashsv = stash ? newSVhek(HvNAME_HEK(stash)) : &PL_sv_no;
1611 arg = newOP(OP_PADSV, 0);
1612 arg->op_targ = target->op_targ;
1613 arg = prepend_elem(OP_LIST,
1614 newSVOP(OP_CONST, 0, stashsv),
1615 prepend_elem(OP_LIST,
1616 newUNOP(OP_REFGEN, 0,
1617 mod(arg, OP_REFGEN)),
1618 dup_attrlist(attrs)));
1620 /* Fake up a method call to import */
1621 meth = newSVpvn_share("import", 6, 0);
1622 imop = convert(OP_ENTERSUB, OPf_STACKED|OPf_SPECIAL|OPf_WANT_VOID,
1623 append_elem(OP_LIST,
1624 prepend_elem(OP_LIST, pack, list(arg)),
1625 newSVOP(OP_METHOD_NAMED, 0, meth)));
1626 imop->op_private |= OPpENTERSUB_NOMOD;
1628 /* Combine the ops. */
1629 *imopsp = append_elem(OP_LIST, *imopsp, imop);
1633 =notfor apidoc apply_attrs_string
1635 Attempts to apply a list of attributes specified by the C<attrstr> and
1636 C<len> arguments to the subroutine identified by the C<cv> argument which
1637 is expected to be associated with the package identified by the C<stashpv>
1638 argument (see L<attributes>). It gets this wrong, though, in that it
1639 does not correctly identify the boundaries of the individual attribute
1640 specifications within C<attrstr>. This is not really intended for the
1641 public API, but has to be listed here for systems such as AIX which
1642 need an explicit export list for symbols. (It's called from XS code
1643 in support of the C<ATTRS:> keyword from F<xsubpp>.) Patches to fix it
1644 to respect attribute syntax properly would be welcome.
1650 Perl_apply_attrs_string(pTHX_ const char *stashpv, CV *cv,
1651 const char *attrstr, STRLEN len)
1656 len = strlen(attrstr);
1660 for (; isSPACE(*attrstr) && len; --len, ++attrstr) ;
1662 const char * const sstr = attrstr;
1663 for (; !isSPACE(*attrstr) && len; --len, ++attrstr) ;
1664 attrs = append_elem(OP_LIST, attrs,
1665 newSVOP(OP_CONST, 0,
1666 newSVpvn(sstr, attrstr-sstr)));
1670 Perl_load_module(aTHX_ PERL_LOADMOD_IMPORT_OPS,
1671 newSVpvn(ATTRSMODULE, sizeof(ATTRSMODULE)-1),
1672 Nullsv, prepend_elem(OP_LIST,
1673 newSVOP(OP_CONST, 0, newSVpv(stashpv,0)),
1674 prepend_elem(OP_LIST,
1675 newSVOP(OP_CONST, 0,
1681 S_my_kid(pTHX_ OP *o, OP *attrs, OP **imopsp)
1685 if (!o || PL_error_count)
1689 if (type == OP_LIST) {
1691 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
1692 my_kid(kid, attrs, imopsp);
1693 } else if (type == OP_UNDEF) {
1695 } else if (type == OP_RV2SV || /* "our" declaration */
1697 type == OP_RV2HV) { /* XXX does this let anything illegal in? */
1698 if (cUNOPo->op_first->op_type != OP_GV) { /* MJD 20011224 */
1699 yyerror(Perl_form(aTHX_ "Can't declare %s in %s",
1700 OP_DESC(o), PL_in_my == KEY_our ? "our" : "my"));
1702 GV * const gv = cGVOPx_gv(cUNOPo->op_first);
1704 PL_in_my_stash = Nullhv;
1705 apply_attrs(GvSTASH(gv),
1706 (type == OP_RV2SV ? GvSV(gv) :
1707 type == OP_RV2AV ? (SV*)GvAV(gv) :
1708 type == OP_RV2HV ? (SV*)GvHV(gv) : (SV*)gv),
1711 o->op_private |= OPpOUR_INTRO;
1714 else if (type != OP_PADSV &&
1717 type != OP_PUSHMARK)
1719 yyerror(Perl_form(aTHX_ "Can't declare %s in \"%s\"",
1721 PL_in_my == KEY_our ? "our" : "my"));
1724 else if (attrs && type != OP_PUSHMARK) {
1728 PL_in_my_stash = Nullhv;
1730 /* check for C<my Dog $spot> when deciding package */
1731 stash = PAD_COMPNAME_TYPE(o->op_targ);
1733 stash = PL_curstash;
1734 apply_attrs_my(stash, o, attrs, imopsp);
1736 o->op_flags |= OPf_MOD;
1737 o->op_private |= OPpLVAL_INTRO;
1742 Perl_my_attrs(pTHX_ OP *o, OP *attrs)
1745 int maybe_scalar = 0;
1747 /* [perl #17376]: this appears to be premature, and results in code such as
1748 C< our(%x); > executing in list mode rather than void mode */
1750 if (o->op_flags & OPf_PARENS)
1759 o = my_kid(o, attrs, &rops);
1761 if (maybe_scalar && o->op_type == OP_PADSV) {
1762 o = scalar(append_list(OP_LIST, (LISTOP*)rops, (LISTOP*)o));
1763 o->op_private |= OPpLVAL_INTRO;
1766 o = append_list(OP_LIST, (LISTOP*)o, (LISTOP*)rops);
1769 PL_in_my_stash = Nullhv;
1774 Perl_my(pTHX_ OP *o)
1776 return my_attrs(o, Nullop);
1780 Perl_sawparens(pTHX_ OP *o)
1783 o->op_flags |= OPf_PARENS;
1788 Perl_bind_match(pTHX_ I32 type, OP *left, OP *right)
1793 if ( (left->op_type == OP_RV2AV ||
1794 left->op_type == OP_RV2HV ||
1795 left->op_type == OP_PADAV ||
1796 left->op_type == OP_PADHV)
1797 && ckWARN(WARN_MISC))
1799 const char * const desc = PL_op_desc[(right->op_type == OP_SUBST ||
1800 right->op_type == OP_TRANS)
1801 ? right->op_type : OP_MATCH];
1802 const char * const sample = ((left->op_type == OP_RV2AV ||
1803 left->op_type == OP_PADAV)
1804 ? "@array" : "%hash");
1805 Perl_warner(aTHX_ packWARN(WARN_MISC),
1806 "Applying %s to %s will act on scalar(%s)",
1807 desc, sample, sample);
1810 if (right->op_type == OP_CONST &&
1811 cSVOPx(right)->op_private & OPpCONST_BARE &&
1812 cSVOPx(right)->op_private & OPpCONST_STRICT)
1814 no_bareword_allowed(right);
1817 ismatchop = right->op_type == OP_MATCH ||
1818 right->op_type == OP_SUBST ||
1819 right->op_type == OP_TRANS;
1820 if (ismatchop && right->op_private & OPpTARGET_MY) {
1822 right->op_private &= ~OPpTARGET_MY;
1824 if (!(right->op_flags & OPf_STACKED) && ismatchop) {
1825 right->op_flags |= OPf_STACKED;
1826 if (right->op_type != OP_MATCH &&
1827 ! (right->op_type == OP_TRANS &&
1828 right->op_private & OPpTRANS_IDENTICAL))
1829 left = mod(left, right->op_type);
1830 if (right->op_type == OP_TRANS)
1831 o = newBINOP(OP_NULL, OPf_STACKED, scalar(left), right);
1833 o = prepend_elem(right->op_type, scalar(left), right);
1835 return newUNOP(OP_NOT, 0, scalar(o));
1839 return bind_match(type, left,
1840 pmruntime(newPMOP(OP_MATCH, 0), right, 0));
1844 Perl_invert(pTHX_ OP *o)
1848 /* XXX need to optimize away NOT NOT here? Or do we let optimizer do it? */
1849 return newUNOP(OP_NOT, OPf_SPECIAL, scalar(o));
1853 Perl_scope(pTHX_ OP *o)
1857 if (o->op_flags & OPf_PARENS || PERLDB_NOOPT || PL_tainting) {
1858 o = prepend_elem(OP_LINESEQ, newOP(OP_ENTER, 0), o);
1859 o->op_type = OP_LEAVE;
1860 o->op_ppaddr = PL_ppaddr[OP_LEAVE];
1862 else if (o->op_type == OP_LINESEQ) {
1864 o->op_type = OP_SCOPE;
1865 o->op_ppaddr = PL_ppaddr[OP_SCOPE];
1866 kid = ((LISTOP*)o)->op_first;
1867 if (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) {
1870 /* The following deals with things like 'do {1 for 1}' */
1871 kid = kid->op_sibling;
1873 (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE))
1878 o = newLISTOP(OP_SCOPE, 0, o, Nullop);
1883 /* XXX kept for BINCOMPAT only */
1885 Perl_save_hints(pTHX)
1887 Perl_croak(aTHX_ "internal error: obsolete function save_hints() called");
1891 Perl_block_start(pTHX_ int full)
1893 const int retval = PL_savestack_ix;
1894 pad_block_start(full);
1896 PL_hints &= ~HINT_BLOCK_SCOPE;
1897 SAVESPTR(PL_compiling.cop_warnings);
1898 if (! specialWARN(PL_compiling.cop_warnings)) {
1899 PL_compiling.cop_warnings = newSVsv(PL_compiling.cop_warnings) ;
1900 SAVEFREESV(PL_compiling.cop_warnings) ;
1902 SAVESPTR(PL_compiling.cop_io);
1903 if (! specialCopIO(PL_compiling.cop_io)) {
1904 PL_compiling.cop_io = newSVsv(PL_compiling.cop_io) ;
1905 SAVEFREESV(PL_compiling.cop_io) ;
1911 Perl_block_end(pTHX_ I32 floor, OP *seq)
1913 const int needblockscope = PL_hints & HINT_BLOCK_SCOPE;
1914 OP* const retval = scalarseq(seq);
1916 PL_compiling.op_private = (U8)(PL_hints & HINT_PRIVATE_MASK);
1918 PL_hints |= HINT_BLOCK_SCOPE; /* propagate out */
1926 const I32 offset = pad_findmy("$_");
1927 if (offset == NOT_IN_PAD || PAD_COMPNAME_FLAGS(offset) & SVpad_OUR) {
1928 return newSVREF(newGVOP(OP_GV, 0, PL_defgv));
1931 OP * const o = newOP(OP_PADSV, 0);
1932 o->op_targ = offset;
1938 Perl_newPROG(pTHX_ OP *o)
1943 PL_eval_root = newUNOP(OP_LEAVEEVAL,
1944 ((PL_in_eval & EVAL_KEEPERR)
1945 ? OPf_SPECIAL : 0), o);
1946 PL_eval_start = linklist(PL_eval_root);
1947 PL_eval_root->op_private |= OPpREFCOUNTED;
1948 OpREFCNT_set(PL_eval_root, 1);
1949 PL_eval_root->op_next = 0;
1950 CALL_PEEP(PL_eval_start);
1953 if (o->op_type == OP_STUB) {
1954 PL_comppad_name = 0;
1959 PL_main_root = scope(sawparens(scalarvoid(o)));
1960 PL_curcop = &PL_compiling;
1961 PL_main_start = LINKLIST(PL_main_root);
1962 PL_main_root->op_private |= OPpREFCOUNTED;
1963 OpREFCNT_set(PL_main_root, 1);
1964 PL_main_root->op_next = 0;
1965 CALL_PEEP(PL_main_start);
1968 /* Register with debugger */
1970 CV * const cv = get_cv("DB::postponed", FALSE);
1974 XPUSHs((SV*)CopFILEGV(&PL_compiling));
1976 call_sv((SV*)cv, G_DISCARD);
1983 Perl_localize(pTHX_ OP *o, I32 lex)
1985 if (o->op_flags & OPf_PARENS)
1986 /* [perl #17376]: this appears to be premature, and results in code such as
1987 C< our(%x); > executing in list mode rather than void mode */
1994 if ( PL_bufptr > PL_oldbufptr && PL_bufptr[-1] == ','
1995 && ckWARN(WARN_PARENTHESIS))
1997 char *s = PL_bufptr;
2000 /* some heuristics to detect a potential error */
2001 while (*s && (strchr(", \t\n", *s)))
2005 if (*s && strchr("@$%*", *s) && *++s
2006 && (isALNUM(*s) || UTF8_IS_CONTINUED(*s))) {
2009 while (*s && (isALNUM(*s) || UTF8_IS_CONTINUED(*s)))
2011 while (*s && (strchr(", \t\n", *s)))
2017 if (sigil && (*s == ';' || *s == '=')) {
2018 Perl_warner(aTHX_ packWARN(WARN_PARENTHESIS),
2019 "Parentheses missing around \"%s\" list",
2020 lex ? (PL_in_my == KEY_our ? "our" : "my")
2028 o = mod(o, OP_NULL); /* a bit kludgey */
2030 PL_in_my_stash = Nullhv;
2035 Perl_jmaybe(pTHX_ OP *o)
2037 if (o->op_type == OP_LIST) {
2039 o2 = newSVREF(newGVOP(OP_GV, 0, gv_fetchpv(";", TRUE, SVt_PV))),
2040 o = convert(OP_JOIN, 0, prepend_elem(OP_LIST, o2, o));
2046 Perl_fold_constants(pTHX_ register OP *o)
2050 I32 type = o->op_type;
2053 if (PL_opargs[type] & OA_RETSCALAR)
2055 if (PL_opargs[type] & OA_TARGET && !o->op_targ)
2056 o->op_targ = pad_alloc(type, SVs_PADTMP);
2058 /* integerize op, unless it happens to be C<-foo>.
2059 * XXX should pp_i_negate() do magic string negation instead? */
2060 if ((PL_opargs[type] & OA_OTHERINT) && (PL_hints & HINT_INTEGER)
2061 && !(type == OP_NEGATE && cUNOPo->op_first->op_type == OP_CONST
2062 && (cUNOPo->op_first->op_private & OPpCONST_BARE)))
2064 o->op_ppaddr = PL_ppaddr[type = ++(o->op_type)];
2067 if (!(PL_opargs[type] & OA_FOLDCONST))
2072 /* XXX might want a ck_negate() for this */
2073 cUNOPo->op_first->op_private &= ~OPpCONST_STRICT;
2085 /* XXX what about the numeric ops? */
2086 if (PL_hints & HINT_LOCALE)
2091 goto nope; /* Don't try to run w/ errors */
2093 for (curop = LINKLIST(o); curop != o; curop = LINKLIST(curop)) {
2094 if ((curop->op_type != OP_CONST ||
2095 (curop->op_private & OPpCONST_BARE)) &&
2096 curop->op_type != OP_LIST &&
2097 curop->op_type != OP_SCALAR &&
2098 curop->op_type != OP_NULL &&
2099 curop->op_type != OP_PUSHMARK)
2105 curop = LINKLIST(o);
2109 sv = *(PL_stack_sp--);
2110 if (o->op_targ && sv == PAD_SV(o->op_targ)) /* grab pad temp? */
2111 pad_swipe(o->op_targ, FALSE);
2112 else if (SvTEMP(sv)) { /* grab mortal temp? */
2113 (void)SvREFCNT_inc(sv);
2117 if (type == OP_RV2GV)
2118 return newGVOP(OP_GV, 0, (GV*)sv);
2119 return newSVOP(OP_CONST, 0, sv);
2126 Perl_gen_constant_list(pTHX_ register OP *o)
2130 const I32 oldtmps_floor = PL_tmps_floor;
2134 return o; /* Don't attempt to run with errors */
2136 PL_op = curop = LINKLIST(o);
2143 PL_tmps_floor = oldtmps_floor;
2145 o->op_type = OP_RV2AV;
2146 o->op_ppaddr = PL_ppaddr[OP_RV2AV];
2147 o->op_flags &= ~OPf_REF; /* treat \(1..2) like an ordinary list */
2148 o->op_flags |= OPf_PARENS; /* and flatten \(1..2,3) */
2149 o->op_opt = 0; /* needs to be revisited in peep() */
2150 curop = ((UNOP*)o)->op_first;
2151 ((UNOP*)o)->op_first = newSVOP(OP_CONST, 0, SvREFCNT_inc(*PL_stack_sp--));
2158 Perl_convert(pTHX_ I32 type, I32 flags, OP *o)
2161 if (!o || o->op_type != OP_LIST)
2162 o = newLISTOP(OP_LIST, 0, o, Nullop);
2164 o->op_flags &= ~OPf_WANT;
2166 if (!(PL_opargs[type] & OA_MARK))
2167 op_null(cLISTOPo->op_first);
2169 o->op_type = (OPCODE)type;
2170 o->op_ppaddr = PL_ppaddr[type];
2171 o->op_flags |= flags;
2173 o = CHECKOP(type, o);
2174 if (o->op_type != (unsigned)type)
2177 return fold_constants(o);
2180 /* List constructors */
2183 Perl_append_elem(pTHX_ I32 type, OP *first, OP *last)
2191 if (first->op_type != (unsigned)type
2192 || (type == OP_LIST && (first->op_flags & OPf_PARENS)))
2194 return newLISTOP(type, 0, first, last);
2197 if (first->op_flags & OPf_KIDS)
2198 ((LISTOP*)first)->op_last->op_sibling = last;
2200 first->op_flags |= OPf_KIDS;
2201 ((LISTOP*)first)->op_first = last;
2203 ((LISTOP*)first)->op_last = last;
2208 Perl_append_list(pTHX_ I32 type, LISTOP *first, LISTOP *last)
2216 if (first->op_type != (unsigned)type)
2217 return prepend_elem(type, (OP*)first, (OP*)last);
2219 if (last->op_type != (unsigned)type)
2220 return append_elem(type, (OP*)first, (OP*)last);
2222 first->op_last->op_sibling = last->op_first;
2223 first->op_last = last->op_last;
2224 first->op_flags |= (last->op_flags & OPf_KIDS);
2232 Perl_prepend_elem(pTHX_ I32 type, OP *first, OP *last)
2240 if (last->op_type == (unsigned)type) {
2241 if (type == OP_LIST) { /* already a PUSHMARK there */
2242 first->op_sibling = ((LISTOP*)last)->op_first->op_sibling;
2243 ((LISTOP*)last)->op_first->op_sibling = first;
2244 if (!(first->op_flags & OPf_PARENS))
2245 last->op_flags &= ~OPf_PARENS;
2248 if (!(last->op_flags & OPf_KIDS)) {
2249 ((LISTOP*)last)->op_last = first;
2250 last->op_flags |= OPf_KIDS;
2252 first->op_sibling = ((LISTOP*)last)->op_first;
2253 ((LISTOP*)last)->op_first = first;
2255 last->op_flags |= OPf_KIDS;
2259 return newLISTOP(type, 0, first, last);
2265 Perl_newNULLLIST(pTHX)
2267 return newOP(OP_STUB, 0);
2271 Perl_force_list(pTHX_ OP *o)
2273 if (!o || o->op_type != OP_LIST)
2274 o = newLISTOP(OP_LIST, 0, o, Nullop);
2280 Perl_newLISTOP(pTHX_ I32 type, I32 flags, OP *first, OP *last)
2285 NewOp(1101, listop, 1, LISTOP);
2287 listop->op_type = (OPCODE)type;
2288 listop->op_ppaddr = PL_ppaddr[type];
2291 listop->op_flags = (U8)flags;
2295 else if (!first && last)
2298 first->op_sibling = last;
2299 listop->op_first = first;
2300 listop->op_last = last;
2301 if (type == OP_LIST) {
2302 OP* const pushop = newOP(OP_PUSHMARK, 0);
2303 pushop->op_sibling = first;
2304 listop->op_first = pushop;
2305 listop->op_flags |= OPf_KIDS;
2307 listop->op_last = pushop;
2310 return CHECKOP(type, listop);
2314 Perl_newOP(pTHX_ I32 type, I32 flags)
2318 NewOp(1101, o, 1, OP);
2319 o->op_type = (OPCODE)type;
2320 o->op_ppaddr = PL_ppaddr[type];
2321 o->op_flags = (U8)flags;
2324 o->op_private = (U8)(0 | (flags >> 8));
2325 if (PL_opargs[type] & OA_RETSCALAR)
2327 if (PL_opargs[type] & OA_TARGET)
2328 o->op_targ = pad_alloc(type, SVs_PADTMP);
2329 return CHECKOP(type, o);
2333 Perl_newUNOP(pTHX_ I32 type, I32 flags, OP *first)
2339 first = newOP(OP_STUB, 0);
2340 if (PL_opargs[type] & OA_MARK)
2341 first = force_list(first);
2343 NewOp(1101, unop, 1, UNOP);
2344 unop->op_type = (OPCODE)type;
2345 unop->op_ppaddr = PL_ppaddr[type];
2346 unop->op_first = first;
2347 unop->op_flags = (U8)(flags | OPf_KIDS);
2348 unop->op_private = (U8)(1 | (flags >> 8));
2349 unop = (UNOP*) CHECKOP(type, unop);
2353 return fold_constants((OP *) unop);
2357 Perl_newBINOP(pTHX_ I32 type, I32 flags, OP *first, OP *last)
2361 NewOp(1101, binop, 1, BINOP);
2364 first = newOP(OP_NULL, 0);
2366 binop->op_type = (OPCODE)type;
2367 binop->op_ppaddr = PL_ppaddr[type];
2368 binop->op_first = first;
2369 binop->op_flags = (U8)(flags | OPf_KIDS);
2372 binop->op_private = (U8)(1 | (flags >> 8));
2375 binop->op_private = (U8)(2 | (flags >> 8));
2376 first->op_sibling = last;
2379 binop = (BINOP*)CHECKOP(type, binop);
2380 if (binop->op_next || binop->op_type != (OPCODE)type)
2383 binop->op_last = binop->op_first->op_sibling;
2385 return fold_constants((OP *)binop);
2388 static int uvcompare(const void *a, const void *b) __attribute__nonnull__(1) __attribute__nonnull__(2) __attribute__pure__;
2389 static int uvcompare(const void *a, const void *b)
2391 if (*((const UV *)a) < (*(const UV *)b))
2393 if (*((const UV *)a) > (*(const UV *)b))
2395 if (*((const UV *)a+1) < (*(const UV *)b+1))
2397 if (*((const UV *)a+1) > (*(const UV *)b+1))
2403 Perl_pmtrans(pTHX_ OP *o, OP *expr, OP *repl)
2405 SV * const tstr = ((SVOP*)expr)->op_sv;
2406 SV * const rstr = ((SVOP*)repl)->op_sv;
2409 const U8 *t = (U8*)SvPV_const(tstr, tlen);
2410 const U8 *r = (U8*)SvPV_const(rstr, rlen);
2414 register short *tbl;
2416 const I32 complement = o->op_private & OPpTRANS_COMPLEMENT;
2417 const I32 squash = o->op_private & OPpTRANS_SQUASH;
2418 I32 del = o->op_private & OPpTRANS_DELETE;
2419 PL_hints |= HINT_BLOCK_SCOPE;
2422 o->op_private |= OPpTRANS_FROM_UTF;
2425 o->op_private |= OPpTRANS_TO_UTF;
2427 if (o->op_private & (OPpTRANS_FROM_UTF|OPpTRANS_TO_UTF)) {
2428 SV* const listsv = newSVpvn("# comment\n",10);
2430 const U8* tend = t + tlen;
2431 const U8* rend = r + rlen;
2445 const I32 from_utf = o->op_private & OPpTRANS_FROM_UTF;
2446 const I32 to_utf = o->op_private & OPpTRANS_TO_UTF;
2452 t = tsave = bytes_to_utf8(t, &len);
2455 if (!to_utf && rlen) {
2457 r = rsave = bytes_to_utf8(r, &len);
2461 /* There are several snags with this code on EBCDIC:
2462 1. 0xFF is a legal UTF-EBCDIC byte (there are no illegal bytes).
2463 2. scan_const() in toke.c has encoded chars in native encoding which makes
2464 ranges at least in EBCDIC 0..255 range the bottom odd.
2468 U8 tmpbuf[UTF8_MAXBYTES+1];
2471 Newx(cp, 2*tlen, UV);
2473 transv = newSVpvn("",0);
2475 cp[2*i] = utf8n_to_uvuni(t, tend-t, &ulen, 0);
2477 if (t < tend && NATIVE_TO_UTF(*t) == 0xff) {
2479 cp[2*i+1] = utf8n_to_uvuni(t, tend-t, &ulen, 0);
2483 cp[2*i+1] = cp[2*i];
2487 qsort(cp, i, 2*sizeof(UV), uvcompare);
2488 for (j = 0; j < i; j++) {
2490 diff = val - nextmin;
2492 t = uvuni_to_utf8(tmpbuf,nextmin);
2493 sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf);
2495 U8 range_mark = UTF_TO_NATIVE(0xff);
2496 t = uvuni_to_utf8(tmpbuf, val - 1);
2497 sv_catpvn(transv, (char *)&range_mark, 1);
2498 sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf);
2505 t = uvuni_to_utf8(tmpbuf,nextmin);
2506 sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf);
2508 U8 range_mark = UTF_TO_NATIVE(0xff);
2509 sv_catpvn(transv, (char *)&range_mark, 1);
2511 t = uvuni_to_utf8_flags(tmpbuf, 0x7fffffff,
2512 UNICODE_ALLOW_SUPER);
2513 sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf);
2514 t = (const U8*)SvPVX_const(transv);
2515 tlen = SvCUR(transv);
2519 else if (!rlen && !del) {
2520 r = t; rlen = tlen; rend = tend;
2523 if ((!rlen && !del) || t == r ||
2524 (tlen == rlen && memEQ((char *)t, (char *)r, tlen)))
2526 o->op_private |= OPpTRANS_IDENTICAL;
2530 while (t < tend || tfirst <= tlast) {
2531 /* see if we need more "t" chars */
2532 if (tfirst > tlast) {
2533 tfirst = (I32)utf8n_to_uvuni(t, tend - t, &ulen, 0);
2535 if (t < tend && NATIVE_TO_UTF(*t) == 0xff) { /* illegal utf8 val indicates range */
2537 tlast = (I32)utf8n_to_uvuni(t, tend - t, &ulen, 0);
2544 /* now see if we need more "r" chars */
2545 if (rfirst > rlast) {
2547 rfirst = (I32)utf8n_to_uvuni(r, rend - r, &ulen, 0);
2549 if (r < rend && NATIVE_TO_UTF(*r) == 0xff) { /* illegal utf8 val indicates range */
2551 rlast = (I32)utf8n_to_uvuni(r, rend - r, &ulen, 0);
2560 rfirst = rlast = 0xffffffff;
2564 /* now see which range will peter our first, if either. */
2565 tdiff = tlast - tfirst;
2566 rdiff = rlast - rfirst;
2573 if (rfirst == 0xffffffff) {
2574 diff = tdiff; /* oops, pretend rdiff is infinite */
2576 Perl_sv_catpvf(aTHX_ listsv, "%04lx\t%04lx\tXXXX\n",
2577 (long)tfirst, (long)tlast);
2579 Perl_sv_catpvf(aTHX_ listsv, "%04lx\t\tXXXX\n", (long)tfirst);
2583 Perl_sv_catpvf(aTHX_ listsv, "%04lx\t%04lx\t%04lx\n",
2584 (long)tfirst, (long)(tfirst + diff),
2587 Perl_sv_catpvf(aTHX_ listsv, "%04lx\t\t%04lx\n",
2588 (long)tfirst, (long)rfirst);
2590 if (rfirst + diff > max)
2591 max = rfirst + diff;
2593 grows = (tfirst < rfirst &&
2594 UNISKIP(tfirst) < UNISKIP(rfirst + diff));
2606 else if (max > 0xff)
2611 Safefree(cPVOPo->op_pv);
2612 cSVOPo->op_sv = (SV*)swash_init("utf8", "", listsv, bits, none);
2613 SvREFCNT_dec(listsv);
2615 SvREFCNT_dec(transv);
2617 if (!del && havefinal && rlen)
2618 (void)hv_store((HV*)SvRV((cSVOPo->op_sv)), "FINAL", 5,
2619 newSVuv((UV)final), 0);
2622 o->op_private |= OPpTRANS_GROWS;
2634 tbl = (short*)cPVOPo->op_pv;
2636 Zero(tbl, 256, short);
2637 for (i = 0; i < (I32)tlen; i++)
2639 for (i = 0, j = 0; i < 256; i++) {
2641 if (j >= (I32)rlen) {
2650 if (i < 128 && r[j] >= 128)
2660 o->op_private |= OPpTRANS_IDENTICAL;
2662 else if (j >= (I32)rlen)
2665 cPVOPo->op_pv = (char*)Renew(tbl, 0x101+rlen-j, short);
2666 tbl[0x100] = (short)(rlen - j);
2667 for (i=0; i < (I32)rlen - j; i++)
2668 tbl[0x101+i] = r[j+i];
2672 if (!rlen && !del) {
2675 o->op_private |= OPpTRANS_IDENTICAL;
2677 else if (!squash && rlen == tlen && memEQ((char*)t, (char*)r, tlen)) {
2678 o->op_private |= OPpTRANS_IDENTICAL;
2680 for (i = 0; i < 256; i++)
2682 for (i = 0, j = 0; i < (I32)tlen; i++,j++) {
2683 if (j >= (I32)rlen) {
2685 if (tbl[t[i]] == -1)
2691 if (tbl[t[i]] == -1) {
2692 if (t[i] < 128 && r[j] >= 128)
2699 o->op_private |= OPpTRANS_GROWS;
2707 Perl_newPMOP(pTHX_ I32 type, I32 flags)
2712 NewOp(1101, pmop, 1, PMOP);
2713 pmop->op_type = (OPCODE)type;
2714 pmop->op_ppaddr = PL_ppaddr[type];
2715 pmop->op_flags = (U8)flags;
2716 pmop->op_private = (U8)(0 | (flags >> 8));
2718 if (PL_hints & HINT_RE_TAINT)
2719 pmop->op_pmpermflags |= PMf_RETAINT;
2720 if (PL_hints & HINT_LOCALE)
2721 pmop->op_pmpermflags |= PMf_LOCALE;
2722 pmop->op_pmflags = pmop->op_pmpermflags;
2725 if (av_len((AV*) PL_regex_pad[0]) > -1) {
2726 SV * const repointer = av_pop((AV*)PL_regex_pad[0]);
2727 pmop->op_pmoffset = SvIV(repointer);
2728 SvREPADTMP_off(repointer);
2729 sv_setiv(repointer,0);
2731 SV * const repointer = newSViv(0);
2732 av_push(PL_regex_padav,SvREFCNT_inc(repointer));
2733 pmop->op_pmoffset = av_len(PL_regex_padav);
2734 PL_regex_pad = AvARRAY(PL_regex_padav);
2738 /* link into pm list */
2739 if (type != OP_TRANS && PL_curstash) {
2740 MAGIC *mg = mg_find((SV*)PL_curstash, PERL_MAGIC_symtab);
2743 mg = sv_magicext((SV*)PL_curstash, 0, PERL_MAGIC_symtab, 0, 0, 0);
2745 pmop->op_pmnext = (PMOP*)mg->mg_obj;
2746 mg->mg_obj = (SV*)pmop;
2747 PmopSTASH_set(pmop,PL_curstash);
2750 return CHECKOP(type, pmop);
2753 /* Given some sort of match op o, and an expression expr containing a
2754 * pattern, either compile expr into a regex and attach it to o (if it's
2755 * constant), or convert expr into a runtime regcomp op sequence (if it's
2758 * isreg indicates that the pattern is part of a regex construct, eg
2759 * $x =~ /pattern/ or split /pattern/, as opposed to $x =~ $pattern or
2760 * split "pattern", which aren't. In the former case, expr will be a list
2761 * if the pattern contains more than one term (eg /a$b/) or if it contains
2762 * a replacement, ie s/// or tr///.
2766 Perl_pmruntime(pTHX_ OP *o, OP *expr, bool isreg)
2771 I32 repl_has_vars = 0;
2775 if (o->op_type == OP_SUBST || o->op_type == OP_TRANS) {
2776 /* last element in list is the replacement; pop it */
2778 repl = cLISTOPx(expr)->op_last;
2779 kid = cLISTOPx(expr)->op_first;
2780 while (kid->op_sibling != repl)
2781 kid = kid->op_sibling;
2782 kid->op_sibling = Nullop;
2783 cLISTOPx(expr)->op_last = kid;
2786 if (isreg && expr->op_type == OP_LIST &&
2787 cLISTOPx(expr)->op_first->op_sibling == cLISTOPx(expr)->op_last)
2789 /* convert single element list to element */
2791 expr = cLISTOPx(oe)->op_first->op_sibling;
2792 cLISTOPx(oe)->op_first->op_sibling = Nullop;
2793 cLISTOPx(oe)->op_last = Nullop;
2797 if (o->op_type == OP_TRANS) {
2798 return pmtrans(o, expr, repl);
2801 reglist = isreg && expr->op_type == OP_LIST;
2805 PL_hints |= HINT_BLOCK_SCOPE;
2808 if (expr->op_type == OP_CONST) {
2810 SV *pat = ((SVOP*)expr)->op_sv;
2811 const char *p = SvPV_const(pat, plen);
2812 if ((o->op_flags & OPf_SPECIAL) && (*p == ' ' && p[1] == '\0')) {
2813 U32 was_readonly = SvREADONLY(pat);
2817 sv_force_normal_flags(pat, 0);
2818 assert(!SvREADONLY(pat));
2821 SvREADONLY_off(pat);
2825 sv_setpvn(pat, "\\s+", 3);
2827 SvFLAGS(pat) |= was_readonly;
2829 p = SvPV_const(pat, plen);
2830 pm->op_pmflags |= PMf_SKIPWHITE;
2833 pm->op_pmdynflags |= PMdf_UTF8;
2834 /* FIXME - can we make this function take const char * args? */
2835 PM_SETRE(pm, CALLREGCOMP(aTHX_ (char*)p, (char*)p + plen, pm));
2836 if (strEQ("\\s+", PM_GETRE(pm)->precomp))
2837 pm->op_pmflags |= PMf_WHITE;
2841 if (pm->op_pmflags & PMf_KEEP || !(PL_hints & HINT_RE_EVAL))
2842 expr = newUNOP((!(PL_hints & HINT_RE_EVAL)
2844 : OP_REGCMAYBE),0,expr);
2846 NewOp(1101, rcop, 1, LOGOP);
2847 rcop->op_type = OP_REGCOMP;
2848 rcop->op_ppaddr = PL_ppaddr[OP_REGCOMP];
2849 rcop->op_first = scalar(expr);
2850 rcop->op_flags |= OPf_KIDS
2851 | ((PL_hints & HINT_RE_EVAL) ? OPf_SPECIAL : 0)
2852 | (reglist ? OPf_STACKED : 0);
2853 rcop->op_private = 1;
2856 rcop->op_targ = pad_alloc(rcop->op_type, SVs_PADTMP);
2858 /* /$x/ may cause an eval, since $x might be qr/(?{..})/ */
2861 /* establish postfix order */
2862 if (pm->op_pmflags & PMf_KEEP || !(PL_hints & HINT_RE_EVAL)) {
2864 rcop->op_next = expr;
2865 ((UNOP*)expr)->op_first->op_next = (OP*)rcop;
2868 rcop->op_next = LINKLIST(expr);
2869 expr->op_next = (OP*)rcop;
2872 prepend_elem(o->op_type, scalar((OP*)rcop), o);
2877 if (pm->op_pmflags & PMf_EVAL) {
2879 if (CopLINE(PL_curcop) < (line_t)PL_multi_end)
2880 CopLINE_set(PL_curcop, (line_t)PL_multi_end);
2882 else if (repl->op_type == OP_CONST)
2886 for (curop = LINKLIST(repl); curop!=repl; curop = LINKLIST(curop)) {
2887 if (PL_opargs[curop->op_type] & OA_DANGEROUS) {
2888 if (curop->op_type == OP_GV) {
2889 GV *gv = cGVOPx_gv(curop);
2891 if (strchr("&`'123456789+-\016\022", *GvENAME(gv)))
2894 else if (curop->op_type == OP_RV2CV)
2896 else if (curop->op_type == OP_RV2SV ||
2897 curop->op_type == OP_RV2AV ||
2898 curop->op_type == OP_RV2HV ||
2899 curop->op_type == OP_RV2GV) {
2900 if (lastop && lastop->op_type != OP_GV) /*funny deref?*/
2903 else if (curop->op_type == OP_PADSV ||
2904 curop->op_type == OP_PADAV ||
2905 curop->op_type == OP_PADHV ||
2906 curop->op_type == OP_PADANY) {
2909 else if (curop->op_type == OP_PUSHRE)
2910 ; /* Okay here, dangerous in newASSIGNOP */
2920 || PM_GETRE(pm)->reganch & ROPT_EVAL_SEEN))) {
2921 pm->op_pmflags |= PMf_CONST; /* const for long enough */
2922 pm->op_pmpermflags |= PMf_CONST; /* const for long enough */
2923 prepend_elem(o->op_type, scalar(repl), o);
2926 if (curop == repl && !PM_GETRE(pm)) { /* Has variables. */
2927 pm->op_pmflags |= PMf_MAYBE_CONST;
2928 pm->op_pmpermflags |= PMf_MAYBE_CONST;
2930 NewOp(1101, rcop, 1, LOGOP);
2931 rcop->op_type = OP_SUBSTCONT;
2932 rcop->op_ppaddr = PL_ppaddr[OP_SUBSTCONT];
2933 rcop->op_first = scalar(repl);
2934 rcop->op_flags |= OPf_KIDS;
2935 rcop->op_private = 1;
2938 /* establish postfix order */
2939 rcop->op_next = LINKLIST(repl);
2940 repl->op_next = (OP*)rcop;
2942 pm->op_pmreplroot = scalar((OP*)rcop);
2943 pm->op_pmreplstart = LINKLIST(rcop);
2952 Perl_newSVOP(pTHX_ I32 type, I32 flags, SV *sv)
2956 NewOp(1101, svop, 1, SVOP);
2957 svop->op_type = (OPCODE)type;
2958 svop->op_ppaddr = PL_ppaddr[type];
2960 svop->op_next = (OP*)svop;
2961 svop->op_flags = (U8)flags;
2962 if (PL_opargs[type] & OA_RETSCALAR)
2964 if (PL_opargs[type] & OA_TARGET)
2965 svop->op_targ = pad_alloc(type, SVs_PADTMP);
2966 return CHECKOP(type, svop);
2970 Perl_newPADOP(pTHX_ I32 type, I32 flags, SV *sv)
2974 NewOp(1101, padop, 1, PADOP);
2975 padop->op_type = (OPCODE)type;
2976 padop->op_ppaddr = PL_ppaddr[type];
2977 padop->op_padix = pad_alloc(type, SVs_PADTMP);
2978 SvREFCNT_dec(PAD_SVl(padop->op_padix));
2979 PAD_SETSV(padop->op_padix, sv);
2982 padop->op_next = (OP*)padop;
2983 padop->op_flags = (U8)flags;
2984 if (PL_opargs[type] & OA_RETSCALAR)
2986 if (PL_opargs[type] & OA_TARGET)
2987 padop->op_targ = pad_alloc(type, SVs_PADTMP);
2988 return CHECKOP(type, padop);
2992 Perl_newGVOP(pTHX_ I32 type, I32 flags, GV *gv)
2998 return newPADOP(type, flags, SvREFCNT_inc(gv));
3000 return newSVOP(type, flags, SvREFCNT_inc(gv));
3005 Perl_newPVOP(pTHX_ I32 type, I32 flags, char *pv)
3009 NewOp(1101, pvop, 1, PVOP);
3010 pvop->op_type = (OPCODE)type;
3011 pvop->op_ppaddr = PL_ppaddr[type];
3013 pvop->op_next = (OP*)pvop;
3014 pvop->op_flags = (U8)flags;
3015 if (PL_opargs[type] & OA_RETSCALAR)
3017 if (PL_opargs[type] & OA_TARGET)
3018 pvop->op_targ = pad_alloc(type, SVs_PADTMP);
3019 return CHECKOP(type, pvop);
3023 Perl_package(pTHX_ OP *o)
3028 save_hptr(&PL_curstash);
3029 save_item(PL_curstname);
3031 name = SvPV_const(cSVOPo->op_sv, len);
3032 PL_curstash = gv_stashpvn(name, len, TRUE);
3033 sv_setpvn(PL_curstname, name, len);
3036 PL_hints |= HINT_BLOCK_SCOPE;
3037 PL_copline = NOLINE;
3042 Perl_utilize(pTHX_ int aver, I32 floor, OP *version, OP *idop, OP *arg)
3048 if (idop->op_type != OP_CONST)
3049 Perl_croak(aTHX_ "Module name must be constant");
3054 SV * const vesv = ((SVOP*)version)->op_sv;
3056 if (!arg && !SvNIOKp(vesv)) {
3063 if (version->op_type != OP_CONST || !SvNIOKp(vesv))
3064 Perl_croak(aTHX_ "Version number must be constant number");
3066 /* Make copy of idop so we don't free it twice */
3067 pack = newSVOP(OP_CONST, 0, newSVsv(((SVOP*)idop)->op_sv));
3069 /* Fake up a method call to VERSION */
3070 meth = newSVpvn_share("VERSION", 7, 0);
3071 veop = convert(OP_ENTERSUB, OPf_STACKED|OPf_SPECIAL,
3072 append_elem(OP_LIST,
3073 prepend_elem(OP_LIST, pack, list(version)),
3074 newSVOP(OP_METHOD_NAMED, 0, meth)));
3078 /* Fake up an import/unimport */
3079 if (arg && arg->op_type == OP_STUB)
3080 imop = arg; /* no import on explicit () */
3081 else if (SvNIOKp(((SVOP*)idop)->op_sv)) {
3082 imop = Nullop; /* use 5.0; */
3084 idop->op_private |= OPpCONST_NOVER;
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 import/unimport */
3094 ? newSVpvn_share("import",6, 0) : newSVpvn_share("unimport", 8, 0);
3095 imop = convert(OP_ENTERSUB, OPf_STACKED|OPf_SPECIAL,
3096 append_elem(OP_LIST,
3097 prepend_elem(OP_LIST, pack, list(arg)),
3098 newSVOP(OP_METHOD_NAMED, 0, meth)));
3101 /* Fake up the BEGIN {}, which does its thing immediately. */
3103 newSVOP(OP_CONST, 0, newSVpvn_share("BEGIN", 5, 0)),
3106 append_elem(OP_LINESEQ,
3107 append_elem(OP_LINESEQ,
3108 newSTATEOP(0, Nullch, newUNOP(OP_REQUIRE, 0, idop)),
3109 newSTATEOP(0, Nullch, veop)),
3110 newSTATEOP(0, Nullch, imop) ));
3112 /* The "did you use incorrect case?" warning used to be here.
3113 * The problem is that on case-insensitive filesystems one
3114 * might get false positives for "use" (and "require"):
3115 * "use Strict" or "require CARP" will work. This causes
3116 * portability problems for the script: in case-strict
3117 * filesystems the script will stop working.
3119 * The "incorrect case" warning checked whether "use Foo"
3120 * imported "Foo" to your namespace, but that is wrong, too:
3121 * there is no requirement nor promise in the language that
3122 * a Foo.pm should or would contain anything in package "Foo".
3124 * There is very little Configure-wise that can be done, either:
3125 * the case-sensitivity of the build filesystem of Perl does not
3126 * help in guessing the case-sensitivity of the runtime environment.
3129 PL_hints |= HINT_BLOCK_SCOPE;
3130 PL_copline = NOLINE;
3132 PL_cop_seqmax++; /* Purely for B::*'s benefit */
3136 =head1 Embedding Functions
3138 =for apidoc load_module
3140 Loads the module whose name is pointed to by the string part of name.
3141 Note that the actual module name, not its filename, should be given.
3142 Eg, "Foo::Bar" instead of "Foo/Bar.pm". flags can be any of
3143 PERL_LOADMOD_DENY, PERL_LOADMOD_NOIMPORT, or PERL_LOADMOD_IMPORT_OPS
3144 (or 0 for no flags). ver, if specified, provides version semantics
3145 similar to C<use Foo::Bar VERSION>. The optional trailing SV*
3146 arguments can be used to specify arguments to the module's import()
3147 method, similar to C<use Foo::Bar VERSION LIST>.
3152 Perl_load_module(pTHX_ U32 flags, SV *name, SV *ver, ...)
3155 va_start(args, ver);
3156 vload_module(flags, name, ver, &args);
3160 #ifdef PERL_IMPLICIT_CONTEXT
3162 Perl_load_module_nocontext(U32 flags, SV *name, SV *ver, ...)
3166 va_start(args, ver);
3167 vload_module(flags, name, ver, &args);
3173 Perl_vload_module(pTHX_ U32 flags, SV *name, SV *ver, va_list *args)
3177 OP * const modname = newSVOP(OP_CONST, 0, name);
3178 modname->op_private |= OPpCONST_BARE;
3180 veop = newSVOP(OP_CONST, 0, ver);
3184 if (flags & PERL_LOADMOD_NOIMPORT) {
3185 imop = sawparens(newNULLLIST());
3187 else if (flags & PERL_LOADMOD_IMPORT_OPS) {
3188 imop = va_arg(*args, OP*);
3193 sv = va_arg(*args, SV*);
3195 imop = append_elem(OP_LIST, imop, newSVOP(OP_CONST, 0, sv));
3196 sv = va_arg(*args, SV*);
3200 const line_t ocopline = PL_copline;
3201 COP * const ocurcop = PL_curcop;
3202 const int oexpect = PL_expect;
3204 utilize(!(flags & PERL_LOADMOD_DENY), start_subparse(FALSE, 0),
3205 veop, modname, imop);
3206 PL_expect = oexpect;
3207 PL_copline = ocopline;
3208 PL_curcop = ocurcop;
3213 Perl_dofile(pTHX_ OP *term, I32 force_builtin)
3218 if (!force_builtin) {
3219 gv = gv_fetchpv("do", FALSE, SVt_PVCV);
3220 if (!(gv && GvCVu(gv) && GvIMPORTED_CV(gv))) {
3221 GV * const * const gvp = (GV**)hv_fetch(PL_globalstash, "do", 2, FALSE);
3222 gv = gvp ? *gvp : Nullgv;
3226 if (gv && GvCVu(gv) && GvIMPORTED_CV(gv)) {
3227 doop = ck_subr(newUNOP(OP_ENTERSUB, OPf_STACKED,
3228 append_elem(OP_LIST, term,
3229 scalar(newUNOP(OP_RV2CV, 0,
3234 doop = newUNOP(OP_DOFILE, 0, scalar(term));
3240 Perl_newSLICEOP(pTHX_ I32 flags, OP *subscript, OP *listval)
3242 return newBINOP(OP_LSLICE, flags,
3243 list(force_list(subscript)),
3244 list(force_list(listval)) );
3248 S_is_list_assignment(pTHX_ register const OP *o)
3253 if (o->op_type == OP_NULL && o->op_flags & OPf_KIDS)
3254 o = cUNOPo->op_first;
3256 if (o->op_type == OP_COND_EXPR) {
3257 const I32 t = is_list_assignment(cLOGOPo->op_first->op_sibling);
3258 const I32 f = is_list_assignment(cLOGOPo->op_first->op_sibling->op_sibling);
3263 yyerror("Assignment to both a list and a scalar");
3267 if (o->op_type == OP_LIST &&
3268 (o->op_flags & OPf_WANT) == OPf_WANT_SCALAR &&
3269 o->op_private & OPpLVAL_INTRO)
3272 if (o->op_type == OP_LIST || o->op_flags & OPf_PARENS ||
3273 o->op_type == OP_RV2AV || o->op_type == OP_RV2HV ||
3274 o->op_type == OP_ASLICE || o->op_type == OP_HSLICE)
3277 if (o->op_type == OP_PADAV || o->op_type == OP_PADHV)
3280 if (o->op_type == OP_RV2SV)
3287 Perl_newASSIGNOP(pTHX_ I32 flags, OP *left, I32 optype, OP *right)
3292 if (optype == OP_ANDASSIGN || optype == OP_ORASSIGN || optype == OP_DORASSIGN) {
3293 return newLOGOP(optype, 0,
3294 mod(scalar(left), optype),
3295 newUNOP(OP_SASSIGN, 0, scalar(right)));
3298 return newBINOP(optype, OPf_STACKED,
3299 mod(scalar(left), optype), scalar(right));
3303 if (is_list_assignment(left)) {
3307 /* Grandfathering $[ assignment here. Bletch.*/
3308 /* Only simple assignments like C<< ($[) = 1 >> are allowed */
3309 PL_eval_start = (left->op_type == OP_CONST) ? right : 0;
3310 left = mod(left, OP_AASSIGN);
3313 else if (left->op_type == OP_CONST) {
3314 /* Result of assignment is always 1 (or we'd be dead already) */
3315 return newSVOP(OP_CONST, 0, newSViv(1));
3317 /* optimise C<my @x = ()> to C<my @x>, and likewise for hashes */
3318 if ((left->op_type == OP_PADAV || left->op_type == OP_PADHV)
3319 && right->op_type == OP_STUB
3320 && (left->op_private & OPpLVAL_INTRO))
3323 left->op_flags &= ~(OPf_REF|OPf_SPECIAL);
3326 curop = list(force_list(left));
3327 o = newBINOP(OP_AASSIGN, flags, list(force_list(right)), curop);
3328 o->op_private = (U8)(0 | (flags >> 8));
3330 /* PL_generation sorcery:
3331 * an assignment like ($a,$b) = ($c,$d) is easier than
3332 * ($a,$b) = ($c,$a), since there is no need for temporary vars.
3333 * To detect whether there are common vars, the global var
3334 * PL_generation is incremented for each assign op we compile.
3335 * Then, while compiling the assign op, we run through all the
3336 * variables on both sides of the assignment, setting a spare slot
3337 * in each of them to PL_generation. If any of them already have
3338 * that value, we know we've got commonality. We could use a
3339 * single bit marker, but then we'd have to make 2 passes, first
3340 * to clear the flag, then to test and set it. To find somewhere
3341 * to store these values, evil chicanery is done with SvCUR().
3344 if (!(left->op_private & OPpLVAL_INTRO)) {
3347 for (curop = LINKLIST(o); curop != o; curop = LINKLIST(curop)) {
3348 if (PL_opargs[curop->op_type] & OA_DANGEROUS) {
3349 if (curop->op_type == OP_GV) {
3350 GV *gv = cGVOPx_gv(curop);
3351 if (gv == PL_defgv || (int)SvCUR(gv) == PL_generation)
3353 SvCUR_set(gv, PL_generation);
3355 else if (curop->op_type == OP_PADSV ||
3356 curop->op_type == OP_PADAV ||
3357 curop->op_type == OP_PADHV ||
3358 curop->op_type == OP_PADANY)
3360 if (PAD_COMPNAME_GEN(curop->op_targ)
3361 == (STRLEN)PL_generation)
3363 PAD_COMPNAME_GEN_set(curop->op_targ, PL_generation);
3366 else if (curop->op_type == OP_RV2CV)
3368 else if (curop->op_type == OP_RV2SV ||
3369 curop->op_type == OP_RV2AV ||
3370 curop->op_type == OP_RV2HV ||
3371 curop->op_type == OP_RV2GV) {
3372 if (lastop->op_type != OP_GV) /* funny deref? */
3375 else if (curop->op_type == OP_PUSHRE) {
3376 if (((PMOP*)curop)->op_pmreplroot) {
3378 GV *gv = (GV*)PAD_SVl(INT2PTR(PADOFFSET,
3379 ((PMOP*)curop)->op_pmreplroot));
3381 GV *gv = (GV*)((PMOP*)curop)->op_pmreplroot;
3383 if (gv == PL_defgv || (int)SvCUR(gv) == PL_generation)
3385 SvCUR_set(gv, PL_generation);
3394 o->op_private |= OPpASSIGN_COMMON;
3396 if (right && right->op_type == OP_SPLIT) {
3398 if ((tmpop = ((LISTOP*)right)->op_first) &&
3399 tmpop->op_type == OP_PUSHRE)
3401 PMOP * const pm = (PMOP*)tmpop;
3402 if (left->op_type == OP_RV2AV &&
3403 !(left->op_private & OPpLVAL_INTRO) &&
3404 !(o->op_private & OPpASSIGN_COMMON) )
3406 tmpop = ((UNOP*)left)->op_first;
3407 if (tmpop->op_type == OP_GV && !pm->op_pmreplroot) {
3409 pm->op_pmreplroot = INT2PTR(OP*, cPADOPx(tmpop)->op_padix);
3410 cPADOPx(tmpop)->op_padix = 0; /* steal it */
3412 pm->op_pmreplroot = (OP*)cSVOPx(tmpop)->op_sv;
3413 cSVOPx(tmpop)->op_sv = Nullsv; /* steal it */
3415 pm->op_pmflags |= PMf_ONCE;
3416 tmpop = cUNOPo->op_first; /* to list (nulled) */
3417 tmpop = ((UNOP*)tmpop)->op_first; /* to pushmark */
3418 tmpop->op_sibling = Nullop; /* don't free split */
3419 right->op_next = tmpop->op_next; /* fix starting loc */
3420 op_free(o); /* blow off assign */
3421 right->op_flags &= ~OPf_WANT;
3422 /* "I don't know and I don't care." */
3427 if (PL_modcount < RETURN_UNLIMITED_NUMBER &&
3428 ((LISTOP*)right)->op_last->op_type == OP_CONST)
3430 SV *sv = ((SVOP*)((LISTOP*)right)->op_last)->op_sv;
3432 sv_setiv(sv, PL_modcount+1);
3440 right = newOP(OP_UNDEF, 0);
3441 if (right->op_type == OP_READLINE) {
3442 right->op_flags |= OPf_STACKED;
3443 return newBINOP(OP_NULL, flags, mod(scalar(left), OP_SASSIGN), scalar(right));
3446 PL_eval_start = right; /* Grandfathering $[ assignment here. Bletch.*/
3447 o = newBINOP(OP_SASSIGN, flags,
3448 scalar(right), mod(scalar(left), OP_SASSIGN) );
3452 o = newSVOP(OP_CONST, 0, newSViv(PL_compiling.cop_arybase));
3459 Perl_newSTATEOP(pTHX_ I32 flags, char *label, OP *o)
3462 const U32 seq = intro_my();
3465 NewOp(1101, cop, 1, COP);
3466 if (PERLDB_LINE && CopLINE(PL_curcop) && PL_curstash != PL_debstash) {
3467 cop->op_type = OP_DBSTATE;
3468 cop->op_ppaddr = PL_ppaddr[ OP_DBSTATE ];
3471 cop->op_type = OP_NEXTSTATE;
3472 cop->op_ppaddr = PL_ppaddr[ OP_NEXTSTATE ];
3474 cop->op_flags = (U8)flags;
3475 cop->op_private = (U8)(PL_hints & HINT_PRIVATE_MASK);
3477 cop->op_private |= NATIVE_HINTS;
3479 PL_compiling.op_private = cop->op_private;
3480 cop->op_next = (OP*)cop;
3483 cop->cop_label = label;
3484 PL_hints |= HINT_BLOCK_SCOPE;
3487 cop->cop_arybase = PL_curcop->cop_arybase;
3488 if (specialWARN(PL_curcop->cop_warnings))
3489 cop->cop_warnings = PL_curcop->cop_warnings ;
3491 cop->cop_warnings = newSVsv(PL_curcop->cop_warnings) ;
3492 if (specialCopIO(PL_curcop->cop_io))
3493 cop->cop_io = PL_curcop->cop_io;
3495 cop->cop_io = newSVsv(PL_curcop->cop_io) ;
3498 if (PL_copline == NOLINE)
3499 CopLINE_set(cop, CopLINE(PL_curcop));
3501 CopLINE_set(cop, PL_copline);
3502 PL_copline = NOLINE;
3505 CopFILE_set(cop, CopFILE(PL_curcop)); /* XXX share in a pvtable? */
3507 CopFILEGV_set(cop, CopFILEGV(PL_curcop));
3509 CopSTASH_set(cop, PL_curstash);
3511 if (PERLDB_LINE && PL_curstash != PL_debstash) {
3512 SV * const * const svp = av_fetch(CopFILEAV(PL_curcop), (I32)CopLINE(cop), FALSE);
3513 if (svp && *svp != &PL_sv_undef ) {
3514 (void)SvIOK_on(*svp);
3515 SvIV_set(*svp, PTR2IV(cop));
3519 return prepend_elem(OP_LINESEQ, (OP*)cop, o);
3524 Perl_newLOGOP(pTHX_ I32 type, I32 flags, OP *first, OP *other)
3527 return new_logop(type, flags, &first, &other);
3531 S_new_logop(pTHX_ I32 type, I32 flags, OP** firstp, OP** otherp)
3536 OP *first = *firstp;
3537 OP * const other = *otherp;
3539 if (type == OP_XOR) /* Not short circuit, but here by precedence. */
3540 return newBINOP(type, flags, scalar(first), scalar(other));
3542 scalarboolean(first);
3543 /* optimize "!a && b" to "a || b", and "!a || b" to "a && b" */
3544 if (first->op_type == OP_NOT && (first->op_flags & OPf_SPECIAL)) {
3545 if (type == OP_AND || type == OP_OR) {
3551 first = *firstp = cUNOPo->op_first;
3553 first->op_next = o->op_next;
3554 cUNOPo->op_first = Nullop;
3558 if (first->op_type == OP_CONST) {
3559 if (first->op_private & OPpCONST_STRICT)
3560 no_bareword_allowed(first);
3561 else if ((first->op_private & OPpCONST_BARE) && ckWARN(WARN_BAREWORD))
3562 Perl_warner(aTHX_ packWARN(WARN_BAREWORD), "Bareword found in conditional");
3563 if ((type == OP_AND && SvTRUE(((SVOP*)first)->op_sv)) ||
3564 (type == OP_OR && !SvTRUE(((SVOP*)first)->op_sv)) ||
3565 (type == OP_DOR && !SvOK(((SVOP*)first)->op_sv))) {
3568 if (other->op_type == OP_CONST)
3569 other->op_private |= OPpCONST_SHORTCIRCUIT;
3573 /* check for C<my $x if 0>, or C<my($x,$y) if 0> */
3574 const OP *o2 = other;
3575 if ( ! (o2->op_type == OP_LIST
3576 && (( o2 = cUNOPx(o2)->op_first))
3577 && o2->op_type == OP_PUSHMARK
3578 && (( o2 = o2->op_sibling)) )
3581 if ((o2->op_type == OP_PADSV || o2->op_type == OP_PADAV
3582 || o2->op_type == OP_PADHV)
3583 && o2->op_private & OPpLVAL_INTRO
3584 && ckWARN(WARN_DEPRECATED))
3586 Perl_warner(aTHX_ packWARN(WARN_DEPRECATED),
3587 "Deprecated use of my() in false conditional");
3592 if (first->op_type == OP_CONST)
3593 first->op_private |= OPpCONST_SHORTCIRCUIT;
3597 else if ((first->op_flags & OPf_KIDS) && type != OP_DOR
3598 && ckWARN(WARN_MISC)) /* [#24076] Don't warn for <FH> err FOO. */
3600 const OP * const k1 = ((UNOP*)first)->op_first;
3601 const OP * const k2 = k1->op_sibling;
3603 switch (first->op_type)
3606 if (k2 && k2->op_type == OP_READLINE
3607 && (k2->op_flags & OPf_STACKED)
3608 && ((k1->op_flags & OPf_WANT) == OPf_WANT_SCALAR))
3610 warnop = k2->op_type;
3615 if (k1->op_type == OP_READDIR
3616 || k1->op_type == OP_GLOB
3617 || (k1->op_type == OP_NULL && k1->op_targ == OP_GLOB)
3618 || k1->op_type == OP_EACH)
3620 warnop = ((k1->op_type == OP_NULL)
3621 ? (OPCODE)k1->op_targ : k1->op_type);
3626 const line_t oldline = CopLINE(PL_curcop);
3627 CopLINE_set(PL_curcop, PL_copline);
3628 Perl_warner(aTHX_ packWARN(WARN_MISC),
3629 "Value of %s%s can be \"0\"; test with defined()",
3631 ((warnop == OP_READLINE || warnop == OP_GLOB)
3632 ? " construct" : "() operator"));
3633 CopLINE_set(PL_curcop, oldline);
3640 if (type == OP_ANDASSIGN || type == OP_ORASSIGN || type == OP_DORASSIGN)
3641 other->op_private |= OPpASSIGN_BACKWARDS; /* other is an OP_SASSIGN */
3643 NewOp(1101, logop, 1, LOGOP);
3645 logop->op_type = (OPCODE)type;
3646 logop->op_ppaddr = PL_ppaddr[type];
3647 logop->op_first = first;
3648 logop->op_flags = (U8)(flags | OPf_KIDS);
3649 logop->op_other = LINKLIST(other);
3650 logop->op_private = (U8)(1 | (flags >> 8));
3652 /* establish postfix order */
3653 logop->op_next = LINKLIST(first);
3654 first->op_next = (OP*)logop;
3655 first->op_sibling = other;
3657 CHECKOP(type,logop);
3659 o = newUNOP(OP_NULL, 0, (OP*)logop);
3666 Perl_newCONDOP(pTHX_ I32 flags, OP *first, OP *trueop, OP *falseop)
3674 return newLOGOP(OP_AND, 0, first, trueop);
3676 return newLOGOP(OP_OR, 0, first, falseop);
3678 scalarboolean(first);
3679 if (first->op_type == OP_CONST) {
3680 if (first->op_private & OPpCONST_BARE &&
3681 first->op_private & OPpCONST_STRICT) {
3682 no_bareword_allowed(first);
3684 if (SvTRUE(((SVOP*)first)->op_sv)) {
3695 NewOp(1101, logop, 1, LOGOP);
3696 logop->op_type = OP_COND_EXPR;
3697 logop->op_ppaddr = PL_ppaddr[OP_COND_EXPR];
3698 logop->op_first = first;
3699 logop->op_flags = (U8)(flags | OPf_KIDS);
3700 logop->op_private = (U8)(1 | (flags >> 8));
3701 logop->op_other = LINKLIST(trueop);
3702 logop->op_next = LINKLIST(falseop);
3704 CHECKOP(OP_COND_EXPR, /* that's logop->op_type */
3707 /* establish postfix order */
3708 start = LINKLIST(first);
3709 first->op_next = (OP*)logop;
3711 first->op_sibling = trueop;
3712 trueop->op_sibling = falseop;
3713 o = newUNOP(OP_NULL, 0, (OP*)logop);
3715 trueop->op_next = falseop->op_next = o;
3722 Perl_newRANGE(pTHX_ I32 flags, OP *left, OP *right)
3731 NewOp(1101, range, 1, LOGOP);
3733 range->op_type = OP_RANGE;
3734 range->op_ppaddr = PL_ppaddr[OP_RANGE];
3735 range->op_first = left;
3736 range->op_flags = OPf_KIDS;
3737 leftstart = LINKLIST(left);
3738 range->op_other = LINKLIST(right);
3739 range->op_private = (U8)(1 | (flags >> 8));
3741 left->op_sibling = right;
3743 range->op_next = (OP*)range;
3744 flip = newUNOP(OP_FLIP, flags, (OP*)range);
3745 flop = newUNOP(OP_FLOP, 0, flip);
3746 o = newUNOP(OP_NULL, 0, flop);
3748 range->op_next = leftstart;
3750 left->op_next = flip;
3751 right->op_next = flop;
3753 range->op_targ = pad_alloc(OP_RANGE, SVs_PADMY);
3754 sv_upgrade(PAD_SV(range->op_targ), SVt_PVNV);
3755 flip->op_targ = pad_alloc(OP_RANGE, SVs_PADMY);
3756 sv_upgrade(PAD_SV(flip->op_targ), SVt_PVNV);
3758 flip->op_private = left->op_type == OP_CONST ? OPpFLIP_LINENUM : 0;
3759 flop->op_private = right->op_type == OP_CONST ? OPpFLIP_LINENUM : 0;
3762 if (!flip->op_private || !flop->op_private)
3763 linklist(o); /* blow off optimizer unless constant */
3769 Perl_newLOOPOP(pTHX_ I32 flags, I32 debuggable, OP *expr, OP *block)
3773 const bool once = block && block->op_flags & OPf_SPECIAL &&
3774 (block->op_type == OP_ENTERSUB || block->op_type == OP_NULL);
3776 PERL_UNUSED_ARG(debuggable);
3779 if (once && expr->op_type == OP_CONST && !SvTRUE(((SVOP*)expr)->op_sv))
3780 return block; /* do {} while 0 does once */
3781 if (expr->op_type == OP_READLINE || expr->op_type == OP_GLOB
3782 || (expr->op_type == OP_NULL && expr->op_targ == OP_GLOB)) {
3783 expr = newUNOP(OP_DEFINED, 0,
3784 newASSIGNOP(0, newDEFSVOP(), 0, expr) );
3785 } else if (expr->op_flags & OPf_KIDS) {
3786 const OP * const k1 = ((UNOP*)expr)->op_first;
3787 const OP * const k2 = k1 ? k1->op_sibling : NULL;
3788 switch (expr->op_type) {
3790 if (k2 && k2->op_type == OP_READLINE
3791 && (k2->op_flags & OPf_STACKED)
3792 && ((k1->op_flags & OPf_WANT) == OPf_WANT_SCALAR))
3793 expr = newUNOP(OP_DEFINED, 0, expr);
3797 if (k1->op_type == OP_READDIR
3798 || k1->op_type == OP_GLOB
3799 || (k1->op_type == OP_NULL && k1->op_targ == OP_GLOB)
3800 || k1->op_type == OP_EACH)
3801 expr = newUNOP(OP_DEFINED, 0, expr);
3807 /* if block is null, the next append_elem() would put UNSTACK, a scalar
3808 * op, in listop. This is wrong. [perl #27024] */
3810 block = newOP(OP_NULL, 0);
3811 listop = append_elem(OP_LINESEQ, block, newOP(OP_UNSTACK, 0));
3812 o = new_logop(OP_AND, 0, &expr, &listop);
3815 ((LISTOP*)listop)->op_last->op_next = LINKLIST(o);
3817 if (once && o != listop)
3818 o->op_next = ((LOGOP*)cUNOPo->op_first)->op_other;
3821 o = newUNOP(OP_NULL, 0, o); /* or do {} while 1 loses outer block */
3823 o->op_flags |= flags;
3825 o->op_flags |= OPf_SPECIAL; /* suppress POPBLOCK curpm restoration*/
3830 Perl_newWHILEOP(pTHX_ I32 flags, I32 debuggable, LOOP *loop, I32
3831 whileline, OP *expr, OP *block, OP *cont, I32 has_my)
3840 PERL_UNUSED_ARG(debuggable);
3843 if (expr->op_type == OP_READLINE || expr->op_type == OP_GLOB
3844 || (expr->op_type == OP_NULL && expr->op_targ == OP_GLOB)) {
3845 expr = newUNOP(OP_DEFINED, 0,
3846 newASSIGNOP(0, newDEFSVOP(), 0, expr) );
3847 } else if (expr->op_flags & OPf_KIDS) {
3848 const OP * const k1 = ((UNOP*)expr)->op_first;
3849 const OP * const k2 = (k1) ? k1->op_sibling : NULL;
3850 switch (expr->op_type) {
3852 if (k2 && k2->op_type == OP_READLINE
3853 && (k2->op_flags & OPf_STACKED)
3854 && ((k1->op_flags & OPf_WANT) == OPf_WANT_SCALAR))
3855 expr = newUNOP(OP_DEFINED, 0, expr);
3859 if (k1->op_type == OP_READDIR
3860 || k1->op_type == OP_GLOB
3861 || (k1->op_type == OP_NULL && k1->op_targ == OP_GLOB)
3862 || k1->op_type == OP_EACH)
3863 expr = newUNOP(OP_DEFINED, 0, expr);
3870 block = newOP(OP_NULL, 0);
3871 else if (cont || has_my) {
3872 block = scope(block);
3876 next = LINKLIST(cont);
3879 OP * const unstack = newOP(OP_UNSTACK, 0);
3882 cont = append_elem(OP_LINESEQ, cont, unstack);
3885 listop = append_list(OP_LINESEQ, (LISTOP*)block, (LISTOP*)cont);
3886 redo = LINKLIST(listop);
3889 PL_copline = (line_t)whileline;
3891 o = new_logop(OP_AND, 0, &expr, &listop);
3892 if (o == expr && o->op_type == OP_CONST && !SvTRUE(cSVOPo->op_sv)) {
3893 op_free(expr); /* oops, it's a while (0) */
3895 return Nullop; /* listop already freed by new_logop */
3898 ((LISTOP*)listop)->op_last->op_next =
3899 (o == listop ? redo : LINKLIST(o));
3905 NewOp(1101,loop,1,LOOP);
3906 loop->op_type = OP_ENTERLOOP;
3907 loop->op_ppaddr = PL_ppaddr[OP_ENTERLOOP];
3908 loop->op_private = 0;
3909 loop->op_next = (OP*)loop;
3912 o = newBINOP(OP_LEAVELOOP, 0, (OP*)loop, o);
3914 loop->op_redoop = redo;
3915 loop->op_lastop = o;
3916 o->op_private |= loopflags;
3919 loop->op_nextop = next;
3921 loop->op_nextop = o;
3923 o->op_flags |= flags;
3924 o->op_private |= (flags >> 8);
3929 Perl_newFOROP(pTHX_ I32 flags, char *label, line_t forline, OP *sv, OP *expr, OP *block, OP *cont)
3934 PADOFFSET padoff = 0;
3939 if (sv->op_type == OP_RV2SV) { /* symbol table variable */
3940 iterpflags = sv->op_private & OPpOUR_INTRO; /* for our $x () */
3941 sv->op_type = OP_RV2GV;
3942 sv->op_ppaddr = PL_ppaddr[OP_RV2GV];
3944 else if (sv->op_type == OP_PADSV) { /* private variable */
3945 iterpflags = sv->op_private & OPpLVAL_INTRO; /* for my $x () */
3946 padoff = sv->op_targ;
3951 else if (sv->op_type == OP_THREADSV) { /* per-thread variable */
3952 padoff = sv->op_targ;
3954 iterflags |= OPf_SPECIAL;
3959 Perl_croak(aTHX_ "Can't use %s for loop variable", PL_op_desc[sv->op_type]);
3962 const I32 offset = pad_findmy("$_");
3963 if (offset == NOT_IN_PAD || PAD_COMPNAME_FLAGS(offset) & SVpad_OUR) {
3964 sv = newGVOP(OP_GV, 0, PL_defgv);
3970 if (expr->op_type == OP_RV2AV || expr->op_type == OP_PADAV) {
3971 expr = mod(force_list(scalar(ref(expr, OP_ITER))), OP_GREPSTART);
3972 iterflags |= OPf_STACKED;
3974 else if (expr->op_type == OP_NULL &&
3975 (expr->op_flags & OPf_KIDS) &&
3976 ((BINOP*)expr)->op_first->op_type == OP_FLOP)
3978 /* Basically turn for($x..$y) into the same as for($x,$y), but we
3979 * set the STACKED flag to indicate that these values are to be
3980 * treated as min/max values by 'pp_iterinit'.
3982 UNOP* const flip = (UNOP*)((UNOP*)((BINOP*)expr)->op_first)->op_first;
3983 LOGOP* const range = (LOGOP*) flip->op_first;
3984 OP* const left = range->op_first;
3985 OP* const right = left->op_sibling;
3988 range->op_flags &= ~OPf_KIDS;
3989 range->op_first = Nullop;
3991 listop = (LISTOP*)newLISTOP(OP_LIST, 0, left, right);
3992 listop->op_first->op_next = range->op_next;
3993 left->op_next = range->op_other;
3994 right->op_next = (OP*)listop;
3995 listop->op_next = listop->op_first;
3998 expr = (OP*)(listop);
4000 iterflags |= OPf_STACKED;
4003 expr = mod(force_list(expr), OP_GREPSTART);
4006 loop = (LOOP*)list(convert(OP_ENTERITER, iterflags,
4007 append_elem(OP_LIST, expr, scalar(sv))));
4008 assert(!loop->op_next);
4009 /* for my $x () sets OPpLVAL_INTRO;
4010 * for our $x () sets OPpOUR_INTRO */
4011 loop->op_private = (U8)iterpflags;
4012 #ifdef PL_OP_SLAB_ALLOC
4015 NewOp(1234,tmp,1,LOOP);
4016 Copy(loop,tmp,1,LISTOP);
4021 Renew(loop, 1, LOOP);
4023 loop->op_targ = padoff;
4024 wop = newWHILEOP(flags, 1, loop, forline, newOP(OP_ITER, 0), block, cont, 0);
4025 PL_copline = forline;
4026 return newSTATEOP(0, label, wop);
4030 Perl_newLOOPEX(pTHX_ I32 type, OP *label)
4034 if (type != OP_GOTO || label->op_type == OP_CONST) {
4035 /* "last()" means "last" */
4036 if (label->op_type == OP_STUB && (label->op_flags & OPf_PARENS))
4037 o = newOP(type, OPf_SPECIAL);
4039 o = newPVOP(type, 0, savepv(label->op_type == OP_CONST
4040 ? SvPVx_nolen_const(((SVOP*)label)->op_sv)
4046 /* Check whether it's going to be a goto &function */
4047 if (label->op_type == OP_ENTERSUB
4048 && !(label->op_flags & OPf_STACKED))
4049 label = newUNOP(OP_REFGEN, 0, mod(label, OP_REFGEN));
4050 o = newUNOP(type, OPf_STACKED, label);
4052 PL_hints |= HINT_BLOCK_SCOPE;
4057 =for apidoc cv_undef
4059 Clear out all the active components of a CV. This can happen either
4060 by an explicit C<undef &foo>, or by the reference count going to zero.
4061 In the former case, we keep the CvOUTSIDE pointer, so that any anonymous
4062 children can still follow the full lexical scope chain.
4068 Perl_cv_undef(pTHX_ CV *cv)
4072 if (CvFILE(cv) && !CvXSUB(cv)) {
4073 /* for XSUBs CvFILE point directly to static memory; __FILE__ */
4074 Safefree(CvFILE(cv));
4079 if (!CvXSUB(cv) && CvROOT(cv)) {
4081 Perl_croak(aTHX_ "Can't undef active subroutine");
4084 PAD_SAVE_SETNULLPAD();
4086 op_free(CvROOT(cv));
4087 CvROOT(cv) = Nullop;
4088 CvSTART(cv) = Nullop;
4091 SvPOK_off((SV*)cv); /* forget prototype */
4096 /* remove CvOUTSIDE unless this is an undef rather than a free */
4097 if (!SvREFCNT(cv) && CvOUTSIDE(cv)) {
4098 if (!CvWEAKOUTSIDE(cv))
4099 SvREFCNT_dec(CvOUTSIDE(cv));
4100 CvOUTSIDE(cv) = Nullcv;
4103 SvREFCNT_dec((SV*)CvXSUBANY(cv).any_ptr);
4109 /* delete all flags except WEAKOUTSIDE */
4110 CvFLAGS(cv) &= CVf_WEAKOUTSIDE;
4114 Perl_cv_ckproto(pTHX_ const CV *cv, const GV *gv, const char *p)
4116 if (((!p != !SvPOK(cv)) || (p && strNE(p, SvPVX_const(cv)))) && ckWARN_d(WARN_PROTOTYPE)) {
4117 SV* const msg = sv_newmortal();
4121 gv_efullname3(name = sv_newmortal(), gv, Nullch);
4122 sv_setpv(msg, "Prototype mismatch:");
4124 Perl_sv_catpvf(aTHX_ msg, " sub %"SVf, name);
4126 Perl_sv_catpvf(aTHX_ msg, " (%"SVf")", (const SV *)cv);
4128 Perl_sv_catpv(aTHX_ msg, ": none");
4129 sv_catpv(msg, " vs ");
4131 Perl_sv_catpvf(aTHX_ msg, "(%s)", p);
4133 sv_catpv(msg, "none");
4134 Perl_warner(aTHX_ packWARN(WARN_PROTOTYPE), "%"SVf, msg);
4138 static void const_sv_xsub(pTHX_ CV* cv);
4142 =head1 Optree Manipulation Functions
4144 =for apidoc cv_const_sv
4146 If C<cv> is a constant sub eligible for inlining. returns the constant
4147 value returned by the sub. Otherwise, returns NULL.
4149 Constant subs can be created with C<newCONSTSUB> or as described in
4150 L<perlsub/"Constant Functions">.
4155 Perl_cv_const_sv(pTHX_ CV *cv)
4157 if (!cv || !CvCONST(cv))
4159 return (SV*)CvXSUBANY(cv).any_ptr;
4162 /* op_const_sv: examine an optree to determine whether it's in-lineable.
4163 * Can be called in 3 ways:
4166 * look for a single OP_CONST with attached value: return the value
4168 * cv && CvCLONE(cv) && !CvCONST(cv)
4170 * examine the clone prototype, and if contains only a single
4171 * OP_CONST referencing a pad const, or a single PADSV referencing
4172 * an outer lexical, return a non-zero value to indicate the CV is
4173 * a candidate for "constizing" at clone time
4177 * We have just cloned an anon prototype that was marked as a const
4178 * candidiate. Try to grab the current value, and in the case of
4179 * PADSV, ignore it if it has multiple references. Return the value.
4183 Perl_op_const_sv(pTHX_ const OP *o, CV *cv)
4190 if (o->op_type == OP_LINESEQ && cLISTOPo->op_first)
4191 o = cLISTOPo->op_first->op_sibling;
4193 for (; o; o = o->op_next) {
4194 const OPCODE type = o->op_type;
4196 if (sv && o->op_next == o)
4198 if (o->op_next != o) {
4199 if (type == OP_NEXTSTATE || type == OP_NULL || type == OP_PUSHMARK)
4201 if (type == OP_DBSTATE)
4204 if (type == OP_LEAVESUB || type == OP_RETURN)
4208 if (type == OP_CONST && cSVOPo->op_sv)
4210 else if (cv && type == OP_CONST) {
4211 sv = PAD_BASE_SV(CvPADLIST(cv), o->op_targ);
4215 else if (cv && type == OP_PADSV) {
4216 if (CvCONST(cv)) { /* newly cloned anon */
4217 sv = PAD_BASE_SV(CvPADLIST(cv), o->op_targ);
4218 /* the candidate should have 1 ref from this pad and 1 ref
4219 * from the parent */
4220 if (!sv || SvREFCNT(sv) != 2)
4227 if (PAD_COMPNAME_FLAGS(o->op_targ) & SVf_FAKE)
4228 sv = &PL_sv_undef; /* an arbitrary non-null value */
4239 Perl_newMYSUB(pTHX_ I32 floor, OP *o, OP *proto, OP *attrs, OP *block)
4241 PERL_UNUSED_ARG(floor);
4251 Perl_croak(aTHX_ "\"my sub\" not yet implemented");
4255 Perl_newSUB(pTHX_ I32 floor, OP *o, OP *proto, OP *block)
4257 return Perl_newATTRSUB(aTHX_ floor, o, proto, Nullop, block);
4261 Perl_newATTRSUB(pTHX_ I32 floor, OP *o, OP *proto, OP *attrs, OP *block)
4272 const char * const name = o ? SvPVx_nolen_const(cSVOPo->op_sv) : Nullch;
4275 assert(proto->op_type == OP_CONST);
4276 ps = SvPVx_const(((SVOP*)proto)->op_sv, ps_len);
4281 if (!name && PERLDB_NAMEANON && CopLINE(PL_curcop)) {
4282 SV * const sv = sv_newmortal();
4283 Perl_sv_setpvf(aTHX_ sv, "%s[%s:%"IVdf"]",
4284 PL_curstash ? "__ANON__" : "__ANON__::__ANON__",
4285 CopFILE(PL_curcop), (IV)CopLINE(PL_curcop));
4286 aname = SvPVX_const(sv);
4291 gv_fetch_flags = (block || attrs || (CvFLAGS(PL_compcv) & CVf_BUILTIN_ATTRS))
4292 ? GV_ADDMULTI : GV_ADDMULTI | GV_NOINIT;
4293 gv = name ? gv_fetchsv(cSVOPo->op_sv, gv_fetch_flags, SVt_PVCV)
4294 : gv_fetchpv(aname ? aname
4295 : (PL_curstash ? "__ANON__" : "__ANON__::__ANON__"),
4296 gv_fetch_flags, SVt_PVCV);
4305 if (SvTYPE(gv) != SVt_PVGV) { /* Maybe prototype now, and had at
4306 maximum a prototype before. */
4307 if (SvTYPE(gv) > SVt_NULL) {
4308 if (!SvPOK((SV*)gv) && !(SvIOK((SV*)gv) && SvIVX((SV*)gv) == -1)
4309 && ckWARN_d(WARN_PROTOTYPE))
4311 Perl_warner(aTHX_ packWARN(WARN_PROTOTYPE), "Runaway prototype");
4313 cv_ckproto((CV*)gv, NULL, ps);
4316 sv_setpvn((SV*)gv, ps, ps_len);
4318 sv_setiv((SV*)gv, -1);
4319 SvREFCNT_dec(PL_compcv);
4320 cv = PL_compcv = NULL;
4321 PL_sub_generation++;
4325 cv = (!name || GvCVGEN(gv)) ? Nullcv : GvCV(gv);
4327 #ifdef GV_UNIQUE_CHECK
4328 if (cv && GvUNIQUE(gv) && SvREADONLY(cv)) {
4329 Perl_croak(aTHX_ "Can't define subroutine %s (GV is unique)", name);
4333 if (!block || !ps || *ps || attrs || (CvFLAGS(PL_compcv) & CVf_BUILTIN_ATTRS))
4336 const_sv = op_const_sv(block, Nullcv);
4339 const bool exists = CvROOT(cv) || CvXSUB(cv);
4341 #ifdef GV_UNIQUE_CHECK
4342 if (exists && GvUNIQUE(gv)) {
4343 Perl_croak(aTHX_ "Can't redefine unique subroutine %s", name);
4347 /* if the subroutine doesn't exist and wasn't pre-declared
4348 * with a prototype, assume it will be AUTOLOADed,
4349 * skipping the prototype check
4351 if (exists || SvPOK(cv))
4352 cv_ckproto(cv, gv, ps);
4353 /* already defined (or promised)? */
4354 if (exists || GvASSUMECV(gv)) {
4355 if (!block && !attrs) {
4356 if (CvFLAGS(PL_compcv)) {
4357 /* might have had built-in attrs applied */
4358 CvFLAGS(cv) |= (CvFLAGS(PL_compcv) & CVf_BUILTIN_ATTRS);
4360 /* just a "sub foo;" when &foo is already defined */
4361 SAVEFREESV(PL_compcv);
4364 /* ahem, death to those who redefine active sort subs */
4365 if (PL_curstackinfo->si_type == PERLSI_SORT && PL_sortcop == CvSTART(cv))
4366 Perl_croak(aTHX_ "Can't redefine active sort subroutine %s", name);
4368 if (ckWARN(WARN_REDEFINE)
4370 && (!const_sv || sv_cmp(cv_const_sv(cv), const_sv))))
4372 const line_t oldline = CopLINE(PL_curcop);
4373 if (PL_copline != NOLINE)
4374 CopLINE_set(PL_curcop, PL_copline);
4375 Perl_warner(aTHX_ packWARN(WARN_REDEFINE),
4376 CvCONST(cv) ? "Constant subroutine %s redefined"
4377 : "Subroutine %s redefined", name);
4378 CopLINE_set(PL_curcop, oldline);
4386 (void)SvREFCNT_inc(const_sv);
4388 assert(!CvROOT(cv) && !CvCONST(cv));
4389 sv_setpvn((SV*)cv, "", 0); /* prototype is "" */
4390 CvXSUBANY(cv).any_ptr = const_sv;
4391 CvXSUB(cv) = const_sv_xsub;
4396 cv = newCONSTSUB(NULL, name, const_sv);
4399 SvREFCNT_dec(PL_compcv);
4401 PL_sub_generation++;
4408 /* Need to do a C<use attributes $stash_of_cv,\&cv,@attrs>
4409 * before we clobber PL_compcv.
4413 /* Might have had built-in attributes applied -- propagate them. */
4414 CvFLAGS(cv) |= (CvFLAGS(PL_compcv) & CVf_BUILTIN_ATTRS);
4415 if (CvGV(cv) && GvSTASH(CvGV(cv)))
4416 stash = GvSTASH(CvGV(cv));
4417 else if (CvSTASH(cv))
4418 stash = CvSTASH(cv);
4420 stash = PL_curstash;
4423 /* possibly about to re-define existing subr -- ignore old cv */
4424 rcv = (SV*)PL_compcv;
4425 if (name && GvSTASH(gv))
4426 stash = GvSTASH(gv);
4428 stash = PL_curstash;
4430 apply_attrs(stash, rcv, attrs, FALSE);
4432 if (cv) { /* must reuse cv if autoloaded */
4434 /* got here with just attrs -- work done, so bug out */
4435 SAVEFREESV(PL_compcv);
4438 /* transfer PL_compcv to cv */
4440 CvFLAGS(cv) = CvFLAGS(PL_compcv);
4441 if (!CvWEAKOUTSIDE(cv))
4442 SvREFCNT_dec(CvOUTSIDE(cv));
4443 CvOUTSIDE(cv) = CvOUTSIDE(PL_compcv);
4444 CvOUTSIDE_SEQ(cv) = CvOUTSIDE_SEQ(PL_compcv);
4445 CvOUTSIDE(PL_compcv) = 0;
4446 CvPADLIST(cv) = CvPADLIST(PL_compcv);
4447 CvPADLIST(PL_compcv) = 0;
4448 /* inner references to PL_compcv must be fixed up ... */
4449 pad_fixup_inner_anons(CvPADLIST(cv), PL_compcv, cv);
4450 /* ... before we throw it away */
4451 SvREFCNT_dec(PL_compcv);
4453 if (PERLDB_INTER)/* Advice debugger on the new sub. */
4454 ++PL_sub_generation;
4461 PL_sub_generation++;
4465 CvFILE_set_from_cop(cv, PL_curcop);
4466 CvSTASH(cv) = PL_curstash;
4469 sv_setpvn((SV*)cv, ps, ps_len);
4471 if (PL_error_count) {
4475 const char *s = strrchr(name, ':');
4477 if (strEQ(s, "BEGIN")) {
4478 const char not_safe[] =
4479 "BEGIN not safe after errors--compilation aborted";
4480 if (PL_in_eval & EVAL_KEEPERR)
4481 Perl_croak(aTHX_ not_safe);
4483 /* force display of errors found but not reported */
4484 sv_catpv(ERRSV, not_safe);
4485 Perl_croak(aTHX_ "%"SVf, ERRSV);
4494 CvROOT(cv) = newUNOP(OP_LEAVESUBLV, 0,
4495 mod(scalarseq(block), OP_LEAVESUBLV));
4498 /* This makes sub {}; work as expected. */
4499 if (block->op_type == OP_STUB) {
4501 block = newSTATEOP(0, Nullch, 0);
4503 CvROOT(cv) = newUNOP(OP_LEAVESUB, 0, scalarseq(block));
4505 CvROOT(cv)->op_private |= OPpREFCOUNTED;
4506 OpREFCNT_set(CvROOT(cv), 1);
4507 CvSTART(cv) = LINKLIST(CvROOT(cv));
4508 CvROOT(cv)->op_next = 0;
4509 CALL_PEEP(CvSTART(cv));
4511 /* now that optimizer has done its work, adjust pad values */
4513 pad_tidy(CvCLONE(cv) ? padtidy_SUBCLONE : padtidy_SUB);
4516 assert(!CvCONST(cv));
4517 if (ps && !*ps && op_const_sv(block, cv))
4521 if (name || aname) {
4523 const char *tname = (name ? name : aname);
4525 if (PERLDB_SUBLINE && PL_curstash != PL_debstash) {
4526 SV *sv = NEWSV(0,0);
4527 SV *tmpstr = sv_newmortal();
4528 GV *db_postponed = gv_fetchpv("DB::postponed", GV_ADDMULTI, SVt_PVHV);
4531 Perl_sv_setpvf(aTHX_ sv, "%s:%ld-%ld",
4533 (long)PL_subline, (long)CopLINE(PL_curcop));
4534 gv_efullname3(tmpstr, gv, Nullch);
4535 hv_store(GvHV(PL_DBsub), SvPVX_const(tmpstr), SvCUR(tmpstr), sv, 0);
4536 hv = GvHVn(db_postponed);
4537 if (HvFILL(hv) > 0 && hv_exists(hv, SvPVX_const(tmpstr), SvCUR(tmpstr))) {
4538 CV * const pcv = GvCV(db_postponed);
4544 call_sv((SV*)pcv, G_DISCARD);
4549 if ((s = strrchr(tname,':')))
4554 if (*s != 'B' && *s != 'E' && *s != 'C' && *s != 'I')
4557 if (strEQ(s, "BEGIN") && !PL_error_count) {
4558 const I32 oldscope = PL_scopestack_ix;
4560 SAVECOPFILE(&PL_compiling);
4561 SAVECOPLINE(&PL_compiling);
4564 PL_beginav = newAV();
4565 DEBUG_x( dump_sub(gv) );
4566 av_push(PL_beginav, (SV*)cv);
4567 GvCV(gv) = 0; /* cv has been hijacked */
4568 call_list(oldscope, PL_beginav);
4570 PL_curcop = &PL_compiling;
4571 PL_compiling.op_private = (U8)(PL_hints & HINT_PRIVATE_MASK);
4574 else if (strEQ(s, "END") && !PL_error_count) {
4577 DEBUG_x( dump_sub(gv) );
4578 av_unshift(PL_endav, 1);
4579 av_store(PL_endav, 0, (SV*)cv);
4580 GvCV(gv) = 0; /* cv has been hijacked */
4582 else if (strEQ(s, "CHECK") && !PL_error_count) {
4584 PL_checkav = newAV();
4585 DEBUG_x( dump_sub(gv) );
4586 if (PL_main_start && ckWARN(WARN_VOID))
4587 Perl_warner(aTHX_ packWARN(WARN_VOID), "Too late to run CHECK block");
4588 av_unshift(PL_checkav, 1);
4589 av_store(PL_checkav, 0, (SV*)cv);
4590 GvCV(gv) = 0; /* cv has been hijacked */
4592 else if (strEQ(s, "INIT") && !PL_error_count) {
4594 PL_initav = newAV();
4595 DEBUG_x( dump_sub(gv) );
4596 if (PL_main_start && ckWARN(WARN_VOID))
4597 Perl_warner(aTHX_ packWARN(WARN_VOID), "Too late to run INIT block");
4598 av_push(PL_initav, (SV*)cv);
4599 GvCV(gv) = 0; /* cv has been hijacked */
4604 PL_copline = NOLINE;
4609 /* XXX unsafe for threads if eval_owner isn't held */
4611 =for apidoc newCONSTSUB
4613 Creates a constant sub equivalent to Perl C<sub FOO () { 123 }> which is
4614 eligible for inlining at compile-time.
4620 Perl_newCONSTSUB(pTHX_ HV *stash, const char *name, SV *sv)
4627 SAVECOPLINE(PL_curcop);
4628 CopLINE_set(PL_curcop, PL_copline);
4631 PL_hints &= ~HINT_BLOCK_SCOPE;
4634 SAVESPTR(PL_curstash);
4635 SAVECOPSTASH(PL_curcop);
4636 PL_curstash = stash;
4637 CopSTASH_set(PL_curcop,stash);
4640 cv = newXS(name, const_sv_xsub, savepv(CopFILE(PL_curcop)));
4641 CvXSUBANY(cv).any_ptr = sv;
4643 sv_setpvn((SV*)cv, "", 0); /* prototype is "" */
4646 CopSTASH_free(PL_curcop);
4654 =for apidoc U||newXS
4656 Used by C<xsubpp> to hook up XSUBs as Perl subs.
4662 Perl_newXS(pTHX_ const char *name, XSUBADDR_t subaddr, const char *filename)
4664 GV * const gv = gv_fetchpv(name ? name :
4665 (PL_curstash ? "__ANON__" : "__ANON__::__ANON__"),
4666 GV_ADDMULTI, SVt_PVCV);
4670 Perl_croak(aTHX_ "panic: no address for '%s' in '%s'", name, filename);
4672 if ((cv = (name ? GvCV(gv) : Nullcv))) {
4674 /* just a cached method */
4678 else if (CvROOT(cv) || CvXSUB(cv) || GvASSUMECV(gv)) {
4679 /* already defined (or promised) */
4680 /* XXX It's possible for this HvNAME_get to return null, and get passed into strEQ */
4681 if (ckWARN(WARN_REDEFINE)) {
4682 GV * const gvcv = CvGV(cv);
4684 HV * const stash = GvSTASH(gvcv);
4686 const char *name = HvNAME_get(stash);
4687 if ( strEQ(name,"autouse") ) {
4688 const line_t oldline = CopLINE(PL_curcop);
4689 if (PL_copline != NOLINE)
4690 CopLINE_set(PL_curcop, PL_copline);
4691 Perl_warner(aTHX_ packWARN(WARN_REDEFINE),
4692 CvCONST(cv) ? "Constant subroutine %s redefined"
4693 : "Subroutine %s redefined"
4695 CopLINE_set(PL_curcop, oldline);
4705 if (cv) /* must reuse cv if autoloaded */
4708 cv = (CV*)NEWSV(1105,0);
4709 sv_upgrade((SV *)cv, SVt_PVCV);
4713 PL_sub_generation++;
4717 (void)gv_fetchfile(filename);
4718 CvFILE(cv) = (char *)filename; /* NOTE: not copied, as it is expected to be
4719 an external constant string */
4720 CvXSUB(cv) = subaddr;
4723 const char *s = strrchr(name,':');
4729 if (*s != 'B' && *s != 'E' && *s != 'C' && *s != 'I')
4732 if (strEQ(s, "BEGIN")) {
4734 PL_beginav = newAV();
4735 av_push(PL_beginav, (SV*)cv);
4736 GvCV(gv) = 0; /* cv has been hijacked */
4738 else if (strEQ(s, "END")) {
4741 av_unshift(PL_endav, 1);
4742 av_store(PL_endav, 0, (SV*)cv);
4743 GvCV(gv) = 0; /* cv has been hijacked */
4745 else if (strEQ(s, "CHECK")) {
4747 PL_checkav = newAV();
4748 if (PL_main_start && ckWARN(WARN_VOID))
4749 Perl_warner(aTHX_ packWARN(WARN_VOID), "Too late to run CHECK block");
4750 av_unshift(PL_checkav, 1);
4751 av_store(PL_checkav, 0, (SV*)cv);
4752 GvCV(gv) = 0; /* cv has been hijacked */
4754 else if (strEQ(s, "INIT")) {
4756 PL_initav = newAV();
4757 if (PL_main_start && ckWARN(WARN_VOID))
4758 Perl_warner(aTHX_ packWARN(WARN_VOID), "Too late to run INIT block");
4759 av_push(PL_initav, (SV*)cv);
4760 GvCV(gv) = 0; /* cv has been hijacked */
4771 Perl_newFORM(pTHX_ I32 floor, OP *o, OP *block)
4777 gv = gv_fetchsv(cSVOPo->op_sv, TRUE, SVt_PVFM);
4779 gv = gv_fetchpv("STDOUT", TRUE, SVt_PVFM);
4781 #ifdef GV_UNIQUE_CHECK
4783 Perl_croak(aTHX_ "Bad symbol for form (GV is unique)");
4787 if ((cv = GvFORM(gv))) {
4788 if (ckWARN(WARN_REDEFINE)) {
4789 const line_t oldline = CopLINE(PL_curcop);
4790 if (PL_copline != NOLINE)
4791 CopLINE_set(PL_curcop, PL_copline);
4792 Perl_warner(aTHX_ packWARN(WARN_REDEFINE),
4793 o ? "Format %"SVf" redefined"
4794 : "Format STDOUT redefined" ,cSVOPo->op_sv);
4795 CopLINE_set(PL_curcop, oldline);
4802 CvFILE_set_from_cop(cv, PL_curcop);
4805 pad_tidy(padtidy_FORMAT);
4806 CvROOT(cv) = newUNOP(OP_LEAVEWRITE, 0, scalarseq(block));
4807 CvROOT(cv)->op_private |= OPpREFCOUNTED;
4808 OpREFCNT_set(CvROOT(cv), 1);
4809 CvSTART(cv) = LINKLIST(CvROOT(cv));
4810 CvROOT(cv)->op_next = 0;
4811 CALL_PEEP(CvSTART(cv));
4813 PL_copline = NOLINE;
4818 Perl_newANONLIST(pTHX_ OP *o)
4820 return newUNOP(OP_REFGEN, 0,
4821 mod(list(convert(OP_ANONLIST, 0, o)), OP_REFGEN));
4825 Perl_newANONHASH(pTHX_ OP *o)
4827 return newUNOP(OP_REFGEN, 0,
4828 mod(list(convert(OP_ANONHASH, 0, o)), OP_REFGEN));
4832 Perl_newANONSUB(pTHX_ I32 floor, OP *proto, OP *block)
4834 return newANONATTRSUB(floor, proto, Nullop, block);
4838 Perl_newANONATTRSUB(pTHX_ I32 floor, OP *proto, OP *attrs, OP *block)
4840 return newUNOP(OP_REFGEN, 0,
4841 newSVOP(OP_ANONCODE, 0,
4842 (SV*)newATTRSUB(floor, 0, proto, attrs, block)));
4846 Perl_oopsAV(pTHX_ OP *o)
4849 switch (o->op_type) {
4851 o->op_type = OP_PADAV;
4852 o->op_ppaddr = PL_ppaddr[OP_PADAV];
4853 return ref(o, OP_RV2AV);
4856 o->op_type = OP_RV2AV;
4857 o->op_ppaddr = PL_ppaddr[OP_RV2AV];
4862 if (ckWARN_d(WARN_INTERNAL))
4863 Perl_warner(aTHX_ packWARN(WARN_INTERNAL), "oops: oopsAV");
4870 Perl_oopsHV(pTHX_ OP *o)
4873 switch (o->op_type) {
4876 o->op_type = OP_PADHV;
4877 o->op_ppaddr = PL_ppaddr[OP_PADHV];
4878 return ref(o, OP_RV2HV);
4882 o->op_type = OP_RV2HV;
4883 o->op_ppaddr = PL_ppaddr[OP_RV2HV];
4888 if (ckWARN_d(WARN_INTERNAL))
4889 Perl_warner(aTHX_ packWARN(WARN_INTERNAL), "oops: oopsHV");
4896 Perl_newAVREF(pTHX_ OP *o)
4899 if (o->op_type == OP_PADANY) {
4900 o->op_type = OP_PADAV;
4901 o->op_ppaddr = PL_ppaddr[OP_PADAV];
4904 else if ((o->op_type == OP_RV2AV || o->op_type == OP_PADAV)
4905 && ckWARN(WARN_DEPRECATED)) {
4906 Perl_warner(aTHX_ packWARN(WARN_DEPRECATED),
4907 "Using an array as a reference is deprecated");
4909 return newUNOP(OP_RV2AV, 0, scalar(o));
4913 Perl_newGVREF(pTHX_ I32 type, OP *o)
4915 if (type == OP_MAPSTART || type == OP_GREPSTART || type == OP_SORT)
4916 return newUNOP(OP_NULL, 0, o);
4917 return ref(newUNOP(OP_RV2GV, OPf_REF, o), type);
4921 Perl_newHVREF(pTHX_ OP *o)
4924 if (o->op_type == OP_PADANY) {
4925 o->op_type = OP_PADHV;
4926 o->op_ppaddr = PL_ppaddr[OP_PADHV];
4929 else if ((o->op_type == OP_RV2HV || o->op_type == OP_PADHV)
4930 && ckWARN(WARN_DEPRECATED)) {
4931 Perl_warner(aTHX_ packWARN(WARN_DEPRECATED),
4932 "Using a hash as a reference is deprecated");
4934 return newUNOP(OP_RV2HV, 0, scalar(o));
4938 Perl_oopsCV(pTHX_ OP *o)
4940 Perl_croak(aTHX_ "NOT IMPL LINE %d",__LINE__);
4943 NORETURN_FUNCTION_END;
4947 Perl_newCVREF(pTHX_ I32 flags, OP *o)
4949 return newUNOP(OP_RV2CV, flags, scalar(o));
4953 Perl_newSVREF(pTHX_ OP *o)
4956 if (o->op_type == OP_PADANY) {
4957 o->op_type = OP_PADSV;
4958 o->op_ppaddr = PL_ppaddr[OP_PADSV];
4961 else if (o->op_type == OP_THREADSV && !(o->op_flags & OPpDONE_SVREF)) {
4962 o->op_flags |= OPpDONE_SVREF;
4965 return newUNOP(OP_RV2SV, 0, scalar(o));
4968 /* Check routines. See the comments at the top of this file for details
4969 * on when these are called */
4972 Perl_ck_anoncode(pTHX_ OP *o)
4974 cSVOPo->op_targ = pad_add_anon(cSVOPo->op_sv, o->op_type);
4975 cSVOPo->op_sv = Nullsv;
4980 Perl_ck_bitop(pTHX_ OP *o)
4982 #define OP_IS_NUMCOMPARE(op) \
4983 ((op) == OP_LT || (op) == OP_I_LT || \
4984 (op) == OP_GT || (op) == OP_I_GT || \
4985 (op) == OP_LE || (op) == OP_I_LE || \
4986 (op) == OP_GE || (op) == OP_I_GE || \
4987 (op) == OP_EQ || (op) == OP_I_EQ || \
4988 (op) == OP_NE || (op) == OP_I_NE || \
4989 (op) == OP_NCMP || (op) == OP_I_NCMP)
4990 o->op_private = (U8)(PL_hints & HINT_PRIVATE_MASK);
4991 if (!(o->op_flags & OPf_STACKED) /* Not an assignment */
4992 && (o->op_type == OP_BIT_OR
4993 || o->op_type == OP_BIT_AND
4994 || o->op_type == OP_BIT_XOR))
4996 const OP * const left = cBINOPo->op_first;
4997 const OP * const right = left->op_sibling;
4998 if ((OP_IS_NUMCOMPARE(left->op_type) &&
4999 (left->op_flags & OPf_PARENS) == 0) ||
5000 (OP_IS_NUMCOMPARE(right->op_type) &&
5001 (right->op_flags & OPf_PARENS) == 0))
5002 if (ckWARN(WARN_PRECEDENCE))
5003 Perl_warner(aTHX_ packWARN(WARN_PRECEDENCE),
5004 "Possible precedence problem on bitwise %c operator",
5005 o->op_type == OP_BIT_OR ? '|'
5006 : o->op_type == OP_BIT_AND ? '&' : '^'
5013 Perl_ck_concat(pTHX_ OP *o)
5015 const OP *kid = cUNOPo->op_first;
5016 if (kid->op_type == OP_CONCAT && !(kid->op_private & OPpTARGET_MY) &&
5017 !(kUNOP->op_first->op_flags & OPf_MOD))
5018 o->op_flags |= OPf_STACKED;
5023 Perl_ck_spair(pTHX_ OP *o)
5026 if (o->op_flags & OPf_KIDS) {
5029 const OPCODE type = o->op_type;
5030 o = modkids(ck_fun(o), type);
5031 kid = cUNOPo->op_first;
5032 newop = kUNOP->op_first->op_sibling;
5034 (newop->op_sibling ||
5035 !(PL_opargs[newop->op_type] & OA_RETSCALAR) ||
5036 newop->op_type == OP_PADAV || newop->op_type == OP_PADHV ||
5037 newop->op_type == OP_RV2AV || newop->op_type == OP_RV2HV)) {
5041 op_free(kUNOP->op_first);
5042 kUNOP->op_first = newop;
5044 o->op_ppaddr = PL_ppaddr[++o->op_type];
5049 Perl_ck_delete(pTHX_ OP *o)
5053 if (o->op_flags & OPf_KIDS) {
5054 OP * const kid = cUNOPo->op_first;
5055 switch (kid->op_type) {
5057 o->op_flags |= OPf_SPECIAL;
5060 o->op_private |= OPpSLICE;
5063 o->op_flags |= OPf_SPECIAL;
5068 Perl_croak(aTHX_ "%s argument is not a HASH or ARRAY element or slice",
5077 Perl_ck_die(pTHX_ OP *o)
5080 if (VMSISH_HUSHED) o->op_private |= OPpHUSH_VMSISH;
5086 Perl_ck_eof(pTHX_ OP *o)
5088 const I32 type = o->op_type;
5090 if (o->op_flags & OPf_KIDS) {
5091 if (cLISTOPo->op_first->op_type == OP_STUB) {
5093 o = newUNOP(type, OPf_SPECIAL, newGVOP(OP_GV, 0, PL_argvgv));
5101 Perl_ck_eval(pTHX_ OP *o)
5104 PL_hints |= HINT_BLOCK_SCOPE;
5105 if (o->op_flags & OPf_KIDS) {
5106 SVOP * const kid = (SVOP*)cUNOPo->op_first;
5109 o->op_flags &= ~OPf_KIDS;
5112 else if (kid->op_type == OP_LINESEQ || kid->op_type == OP_STUB) {
5115 cUNOPo->op_first = 0;
5118 NewOp(1101, enter, 1, LOGOP);
5119 enter->op_type = OP_ENTERTRY;
5120 enter->op_ppaddr = PL_ppaddr[OP_ENTERTRY];
5121 enter->op_private = 0;
5123 /* establish postfix order */
5124 enter->op_next = (OP*)enter;
5126 o = prepend_elem(OP_LINESEQ, (OP*)enter, (OP*)kid);
5127 o->op_type = OP_LEAVETRY;
5128 o->op_ppaddr = PL_ppaddr[OP_LEAVETRY];
5129 enter->op_other = o;
5139 o = newUNOP(OP_ENTEREVAL, 0, newDEFSVOP());
5141 o->op_targ = (PADOFFSET)PL_hints;
5146 Perl_ck_exit(pTHX_ OP *o)
5149 HV * const table = GvHV(PL_hintgv);
5151 SV * const * const svp = hv_fetch(table, "vmsish_exit", 11, FALSE);
5152 if (svp && *svp && SvTRUE(*svp))
5153 o->op_private |= OPpEXIT_VMSISH;
5155 if (VMSISH_HUSHED) o->op_private |= OPpHUSH_VMSISH;
5161 Perl_ck_exec(pTHX_ OP *o)
5163 if (o->op_flags & OPf_STACKED) {
5166 kid = cUNOPo->op_first->op_sibling;
5167 if (kid->op_type == OP_RV2GV)
5176 Perl_ck_exists(pTHX_ OP *o)
5179 if (o->op_flags & OPf_KIDS) {
5180 OP * const kid = cUNOPo->op_first;
5181 if (kid->op_type == OP_ENTERSUB) {
5182 (void) ref(kid, o->op_type);
5183 if (kid->op_type != OP_RV2CV && !PL_error_count)
5184 Perl_croak(aTHX_ "%s argument is not a subroutine name",
5186 o->op_private |= OPpEXISTS_SUB;
5188 else if (kid->op_type == OP_AELEM)
5189 o->op_flags |= OPf_SPECIAL;
5190 else if (kid->op_type != OP_HELEM)
5191 Perl_croak(aTHX_ "%s argument is not a HASH or ARRAY element",
5199 Perl_ck_rvconst(pTHX_ register OP *o)
5202 SVOP *kid = (SVOP*)cUNOPo->op_first;
5204 o->op_private |= (PL_hints & HINT_STRICT_REFS);
5205 if (kid->op_type == OP_CONST) {
5208 SV * const kidsv = kid->op_sv;
5210 /* Is it a constant from cv_const_sv()? */
5211 if (SvROK(kidsv) && SvREADONLY(kidsv)) {
5212 SV *rsv = SvRV(kidsv);
5213 const int svtype = SvTYPE(rsv);
5214 const char *badtype = Nullch;
5216 switch (o->op_type) {
5218 if (svtype > SVt_PVMG)
5219 badtype = "a SCALAR";
5222 if (svtype != SVt_PVAV)
5223 badtype = "an ARRAY";
5226 if (svtype != SVt_PVHV)
5230 if (svtype != SVt_PVCV)
5235 Perl_croak(aTHX_ "Constant is not %s reference", badtype);
5238 if ((PL_hints & HINT_STRICT_REFS) && (kid->op_private & OPpCONST_BARE)) {
5239 const char *badthing = Nullch;
5240 switch (o->op_type) {
5242 badthing = "a SCALAR";
5245 badthing = "an ARRAY";
5248 badthing = "a HASH";
5253 "Can't use bareword (\"%"SVf"\") as %s ref while \"strict refs\" in use",
5257 * This is a little tricky. We only want to add the symbol if we
5258 * didn't add it in the lexer. Otherwise we get duplicate strict
5259 * warnings. But if we didn't add it in the lexer, we must at
5260 * least pretend like we wanted to add it even if it existed before,
5261 * or we get possible typo warnings. OPpCONST_ENTERED says
5262 * whether the lexer already added THIS instance of this symbol.
5264 iscv = (o->op_type == OP_RV2CV) * 2;
5266 gv = gv_fetchsv(kidsv,
5267 iscv | !(kid->op_private & OPpCONST_ENTERED),
5270 : o->op_type == OP_RV2SV
5272 : o->op_type == OP_RV2AV
5274 : o->op_type == OP_RV2HV
5277 } while (!gv && !(kid->op_private & OPpCONST_ENTERED) && !iscv++);
5279 kid->op_type = OP_GV;
5280 SvREFCNT_dec(kid->op_sv);
5282 /* XXX hack: dependence on sizeof(PADOP) <= sizeof(SVOP) */
5283 kPADOP->op_padix = pad_alloc(OP_GV, SVs_PADTMP);
5284 SvREFCNT_dec(PAD_SVl(kPADOP->op_padix));
5286 PAD_SETSV(kPADOP->op_padix, (SV*) SvREFCNT_inc(gv));
5288 kid->op_sv = SvREFCNT_inc(gv);
5290 kid->op_private = 0;
5291 kid->op_ppaddr = PL_ppaddr[OP_GV];
5298 Perl_ck_ftst(pTHX_ OP *o)
5301 const I32 type = o->op_type;
5303 if (o->op_flags & OPf_REF) {
5306 else if (o->op_flags & OPf_KIDS && cUNOPo->op_first->op_type != OP_STUB) {
5307 SVOP * const kid = (SVOP*)cUNOPo->op_first;
5309 if (kid->op_type == OP_CONST && (kid->op_private & OPpCONST_BARE)) {
5310 OP * const newop = newGVOP(type, OPf_REF,
5311 gv_fetchsv(kid->op_sv, TRUE, SVt_PVIO));
5317 if ((PL_hints & HINT_FILETEST_ACCESS) &&
5318 OP_IS_FILETEST_ACCESS(o))
5319 o->op_private |= OPpFT_ACCESS;
5321 if (PL_check[kid->op_type] == MEMBER_TO_FPTR(Perl_ck_ftst)
5322 && kid->op_type != OP_STAT && kid->op_type != OP_LSTAT)
5323 o->op_private |= OPpFT_STACKED;
5327 if (type == OP_FTTTY)
5328 o = newGVOP(type, OPf_REF, PL_stdingv);
5330 o = newUNOP(type, 0, newDEFSVOP());
5336 Perl_ck_fun(pTHX_ OP *o)
5338 const int type = o->op_type;
5339 register I32 oa = PL_opargs[type] >> OASHIFT;
5341 if (o->op_flags & OPf_STACKED) {
5342 if ((oa & OA_OPTIONAL) && (oa >> 4) && !((oa >> 4) & OA_OPTIONAL))
5345 return no_fh_allowed(o);
5348 if (o->op_flags & OPf_KIDS) {
5349 OP **tokid = &cLISTOPo->op_first;
5350 register OP *kid = cLISTOPo->op_first;
5354 if (kid->op_type == OP_PUSHMARK ||
5355 (kid->op_type == OP_NULL && kid->op_targ == OP_PUSHMARK))
5357 tokid = &kid->op_sibling;
5358 kid = kid->op_sibling;
5360 if (!kid && PL_opargs[type] & OA_DEFGV)
5361 *tokid = kid = newDEFSVOP();
5365 sibl = kid->op_sibling;
5368 /* list seen where single (scalar) arg expected? */
5369 if (numargs == 1 && !(oa >> 4)
5370 && kid->op_type == OP_LIST && type != OP_SCALAR)
5372 return too_many_arguments(o,PL_op_desc[type]);
5385 if ((type == OP_PUSH || type == OP_UNSHIFT)
5386 && !kid->op_sibling && ckWARN(WARN_SYNTAX))
5387 Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
5388 "Useless use of %s with no values",
5391 if (kid->op_type == OP_CONST &&
5392 (kid->op_private & OPpCONST_BARE))
5394 OP * const newop = newAVREF(newGVOP(OP_GV, 0,
5395 gv_fetchsv(((SVOP*)kid)->op_sv, TRUE, SVt_PVAV) ));
5396 if (ckWARN2(WARN_DEPRECATED, WARN_SYNTAX))
5397 Perl_warner(aTHX_ packWARN2(WARN_DEPRECATED, WARN_SYNTAX),
5398 "Array @%"SVf" missing the @ in argument %"IVdf" of %s()",
5399 ((SVOP*)kid)->op_sv, (IV)numargs, PL_op_desc[type]);
5402 kid->op_sibling = sibl;
5405 else if (kid->op_type != OP_RV2AV && kid->op_type != OP_PADAV)
5406 bad_type(numargs, "array", PL_op_desc[type], kid);
5410 if (kid->op_type == OP_CONST &&
5411 (kid->op_private & OPpCONST_BARE))
5413 OP * const newop = newHVREF(newGVOP(OP_GV, 0,
5414 gv_fetchsv(((SVOP*)kid)->op_sv, TRUE, SVt_PVHV) ));
5415 if (ckWARN2(WARN_DEPRECATED, WARN_SYNTAX))
5416 Perl_warner(aTHX_ packWARN2(WARN_DEPRECATED, WARN_SYNTAX),
5417 "Hash %%%"SVf" missing the %% in argument %"IVdf" of %s()",
5418 ((SVOP*)kid)->op_sv, (IV)numargs, PL_op_desc[type]);
5421 kid->op_sibling = sibl;
5424 else if (kid->op_type != OP_RV2HV && kid->op_type != OP_PADHV)
5425 bad_type(numargs, "hash", PL_op_desc[type], kid);
5430 OP * const newop = newUNOP(OP_NULL, 0, kid);
5431 kid->op_sibling = 0;
5433 newop->op_next = newop;
5435 kid->op_sibling = sibl;
5440 if (kid->op_type != OP_GV && kid->op_type != OP_RV2GV) {
5441 if (kid->op_type == OP_CONST &&
5442 (kid->op_private & OPpCONST_BARE))
5444 OP *newop = newGVOP(OP_GV, 0,
5445 gv_fetchsv(((SVOP*)kid)->op_sv, TRUE, SVt_PVIO) );
5446 if (!(o->op_private & 1) && /* if not unop */
5447 kid == cLISTOPo->op_last)
5448 cLISTOPo->op_last = newop;
5452 else if (kid->op_type == OP_READLINE) {
5453 /* neophyte patrol: open(<FH>), close(<FH>) etc. */
5454 bad_type(numargs, "HANDLE", OP_DESC(o), kid);
5457 I32 flags = OPf_SPECIAL;
5461 /* is this op a FH constructor? */
5462 if (is_handle_constructor(o,numargs)) {
5463 const char *name = Nullch;
5467 /* Set a flag to tell rv2gv to vivify
5468 * need to "prove" flag does not mean something
5469 * else already - NI-S 1999/05/07
5472 if (kid->op_type == OP_PADSV) {
5473 name = PAD_COMPNAME_PV(kid->op_targ);
5474 /* SvCUR of a pad namesv can't be trusted
5475 * (see PL_generation), so calc its length
5481 else if (kid->op_type == OP_RV2SV
5482 && kUNOP->op_first->op_type == OP_GV)
5484 GV *gv = cGVOPx_gv(kUNOP->op_first);
5486 len = GvNAMELEN(gv);
5488 else if (kid->op_type == OP_AELEM
5489 || kid->op_type == OP_HELEM)
5491 OP *op = ((BINOP*)kid)->op_first;
5494 SV *tmpstr = Nullsv;
5495 const char * const a =
5496 kid->op_type == OP_AELEM ?
5498 if (((op->op_type == OP_RV2AV) ||
5499 (op->op_type == OP_RV2HV)) &&
5500 (op = ((UNOP*)op)->op_first) &&
5501 (op->op_type == OP_GV)) {
5502 /* packagevar $a[] or $h{} */
5503 GV * const gv = cGVOPx_gv(op);
5511 else if (op->op_type == OP_PADAV
5512 || op->op_type == OP_PADHV) {
5513 /* lexicalvar $a[] or $h{} */
5514 const char * const padname =
5515 PAD_COMPNAME_PV(op->op_targ);
5524 name = SvPV_const(tmpstr, len);
5529 name = "__ANONIO__";
5536 targ = pad_alloc(OP_RV2GV, SVs_PADTMP);
5537 namesv = PAD_SVl(targ);
5538 SvUPGRADE(namesv, SVt_PV);
5540 sv_setpvn(namesv, "$", 1);
5541 sv_catpvn(namesv, name, len);
5544 kid->op_sibling = 0;
5545 kid = newUNOP(OP_RV2GV, flags, scalar(kid));
5546 kid->op_targ = targ;
5547 kid->op_private |= priv;
5549 kid->op_sibling = sibl;
5555 mod(scalar(kid), type);
5559 tokid = &kid->op_sibling;
5560 kid = kid->op_sibling;
5562 o->op_private |= numargs;
5564 return too_many_arguments(o,OP_DESC(o));
5567 else if (PL_opargs[type] & OA_DEFGV) {
5569 return newUNOP(type, 0, newDEFSVOP());
5573 while (oa & OA_OPTIONAL)
5575 if (oa && oa != OA_LIST)
5576 return too_few_arguments(o,OP_DESC(o));
5582 Perl_ck_glob(pTHX_ OP *o)
5588 if ((o->op_flags & OPf_KIDS) && !cLISTOPo->op_first->op_sibling)
5589 append_elem(OP_GLOB, o, newDEFSVOP());
5591 if (!((gv = gv_fetchpv("glob", FALSE, SVt_PVCV))
5592 && GvCVu(gv) && GvIMPORTED_CV(gv)))
5594 gv = gv_fetchpv("CORE::GLOBAL::glob", FALSE, SVt_PVCV);
5597 #if !defined(PERL_EXTERNAL_GLOB)
5598 /* XXX this can be tightened up and made more failsafe. */
5599 if (!(gv && GvCVu(gv) && GvIMPORTED_CV(gv))) {
5602 Perl_load_module(aTHX_ PERL_LOADMOD_NOIMPORT,
5603 newSVpvn("File::Glob", 10), Nullsv, Nullsv, Nullsv);
5604 gv = gv_fetchpv("CORE::GLOBAL::glob", FALSE, SVt_PVCV);
5605 glob_gv = gv_fetchpv("File::Glob::csh_glob", FALSE, SVt_PVCV);
5606 GvCV(gv) = GvCV(glob_gv);
5607 (void)SvREFCNT_inc((SV*)GvCV(gv));
5608 GvIMPORTED_CV_on(gv);
5611 #endif /* PERL_EXTERNAL_GLOB */
5613 if (gv && GvCVu(gv) && GvIMPORTED_CV(gv)) {
5614 append_elem(OP_GLOB, o,
5615 newSVOP(OP_CONST, 0, newSViv(PL_glob_index++)));
5616 o->op_type = OP_LIST;
5617 o->op_ppaddr = PL_ppaddr[OP_LIST];
5618 cLISTOPo->op_first->op_type = OP_PUSHMARK;
5619 cLISTOPo->op_first->op_ppaddr = PL_ppaddr[OP_PUSHMARK];
5620 cLISTOPo->op_first->op_targ = 0;
5621 o = newUNOP(OP_ENTERSUB, OPf_STACKED,
5622 append_elem(OP_LIST, o,
5623 scalar(newUNOP(OP_RV2CV, 0,
5624 newGVOP(OP_GV, 0, gv)))));
5625 o = newUNOP(OP_NULL, 0, ck_subr(o));
5626 o->op_targ = OP_GLOB; /* hint at what it used to be */
5629 gv = newGVgen("main");
5631 append_elem(OP_GLOB, o, newGVOP(OP_GV, 0, gv));
5637 Perl_ck_grep(pTHX_ OP *o)
5642 const OPCODE type = o->op_type == OP_GREPSTART ? OP_GREPWHILE : OP_MAPWHILE;
5645 o->op_ppaddr = PL_ppaddr[OP_GREPSTART];
5646 NewOp(1101, gwop, 1, LOGOP);
5648 if (o->op_flags & OPf_STACKED) {
5651 kid = cLISTOPo->op_first->op_sibling;
5652 if (!cUNOPx(kid)->op_next)
5653 Perl_croak(aTHX_ "panic: ck_grep");
5654 for (k = cUNOPx(kid)->op_first; k; k = k->op_next) {
5657 kid->op_next = (OP*)gwop;
5658 o->op_flags &= ~OPf_STACKED;
5660 kid = cLISTOPo->op_first->op_sibling;
5661 if (type == OP_MAPWHILE)
5668 kid = cLISTOPo->op_first->op_sibling;
5669 if (kid->op_type != OP_NULL)
5670 Perl_croak(aTHX_ "panic: ck_grep");
5671 kid = kUNOP->op_first;
5673 gwop->op_type = type;
5674 gwop->op_ppaddr = PL_ppaddr[type];
5675 gwop->op_first = listkids(o);
5676 gwop->op_flags |= OPf_KIDS;
5677 gwop->op_other = LINKLIST(kid);
5678 kid->op_next = (OP*)gwop;
5679 offset = pad_findmy("$_");
5680 if (offset == NOT_IN_PAD || PAD_COMPNAME_FLAGS(offset) & SVpad_OUR) {
5681 o->op_private = gwop->op_private = 0;
5682 gwop->op_targ = pad_alloc(type, SVs_PADTMP);
5685 o->op_private = gwop->op_private = OPpGREP_LEX;
5686 gwop->op_targ = o->op_targ = offset;
5689 kid = cLISTOPo->op_first->op_sibling;
5690 if (!kid || !kid->op_sibling)
5691 return too_few_arguments(o,OP_DESC(o));
5692 for (kid = kid->op_sibling; kid; kid = kid->op_sibling)
5693 mod(kid, OP_GREPSTART);
5699 Perl_ck_index(pTHX_ OP *o)
5701 if (o->op_flags & OPf_KIDS) {
5702 OP *kid = cLISTOPo->op_first->op_sibling; /* get past pushmark */
5704 kid = kid->op_sibling; /* get past "big" */
5705 if (kid && kid->op_type == OP_CONST)
5706 fbm_compile(((SVOP*)kid)->op_sv, 0);
5712 Perl_ck_lengthconst(pTHX_ OP *o)
5714 /* XXX length optimization goes here */
5719 Perl_ck_lfun(pTHX_ OP *o)
5721 const OPCODE type = o->op_type;
5722 return modkids(ck_fun(o), type);
5726 Perl_ck_defined(pTHX_ OP *o) /* 19990527 MJD */
5728 if ((o->op_flags & OPf_KIDS) && ckWARN2(WARN_DEPRECATED, WARN_SYNTAX)) {
5729 switch (cUNOPo->op_first->op_type) {
5731 /* This is needed for
5732 if (defined %stash::)
5733 to work. Do not break Tk.
5735 break; /* Globals via GV can be undef */
5737 case OP_AASSIGN: /* Is this a good idea? */
5738 Perl_warner(aTHX_ packWARN2(WARN_DEPRECATED, WARN_SYNTAX),
5739 "defined(@array) is deprecated");
5740 Perl_warner(aTHX_ packWARN2(WARN_DEPRECATED, WARN_SYNTAX),
5741 "\t(Maybe you should just omit the defined()?)\n");
5744 /* This is needed for
5745 if (defined %stash::)
5746 to work. Do not break Tk.
5748 break; /* Globals via GV can be undef */
5750 Perl_warner(aTHX_ packWARN2(WARN_DEPRECATED, WARN_SYNTAX),
5751 "defined(%%hash) is deprecated");
5752 Perl_warner(aTHX_ packWARN2(WARN_DEPRECATED, WARN_SYNTAX),
5753 "\t(Maybe you should just omit the defined()?)\n");
5764 Perl_ck_rfun(pTHX_ OP *o)
5766 const OPCODE type = o->op_type;
5767 return refkids(ck_fun(o), type);
5771 Perl_ck_listiob(pTHX_ OP *o)
5775 kid = cLISTOPo->op_first;
5778 kid = cLISTOPo->op_first;
5780 if (kid->op_type == OP_PUSHMARK)
5781 kid = kid->op_sibling;
5782 if (kid && o->op_flags & OPf_STACKED)
5783 kid = kid->op_sibling;
5784 else if (kid && !kid->op_sibling) { /* print HANDLE; */
5785 if (kid->op_type == OP_CONST && kid->op_private & OPpCONST_BARE) {
5786 o->op_flags |= OPf_STACKED; /* make it a filehandle */
5787 kid = newUNOP(OP_RV2GV, OPf_REF, scalar(kid));
5788 cLISTOPo->op_first->op_sibling = kid;
5789 cLISTOPo->op_last = kid;
5790 kid = kid->op_sibling;
5795 append_elem(o->op_type, o, newDEFSVOP());
5801 Perl_ck_sassign(pTHX_ OP *o)
5803 OP *kid = cLISTOPo->op_first;
5804 /* has a disposable target? */
5805 if ((PL_opargs[kid->op_type] & OA_TARGLEX)
5806 && !(kid->op_flags & OPf_STACKED)
5807 /* Cannot steal the second time! */
5808 && !(kid->op_private & OPpTARGET_MY))
5810 OP * const kkid = kid->op_sibling;
5812 /* Can just relocate the target. */
5813 if (kkid && kkid->op_type == OP_PADSV
5814 && !(kkid->op_private & OPpLVAL_INTRO))
5816 kid->op_targ = kkid->op_targ;
5818 /* Now we do not need PADSV and SASSIGN. */
5819 kid->op_sibling = o->op_sibling; /* NULL */
5820 cLISTOPo->op_first = NULL;
5823 kid->op_private |= OPpTARGET_MY; /* Used for context settings */
5827 /* optimise C<my $x = undef> to C<my $x> */
5828 if (kid->op_type == OP_UNDEF) {
5829 OP * const kkid = kid->op_sibling;
5830 if (kkid && kkid->op_type == OP_PADSV
5831 && (kkid->op_private & OPpLVAL_INTRO))
5833 cLISTOPo->op_first = NULL;
5834 kid->op_sibling = NULL;
5844 Perl_ck_match(pTHX_ OP *o)
5846 if (o->op_type != OP_QR) {
5847 const I32 offset = pad_findmy("$_");
5848 if (offset != NOT_IN_PAD && !(PAD_COMPNAME_FLAGS(offset) & SVpad_OUR)) {
5849 o->op_targ = offset;
5850 o->op_private |= OPpTARGET_MY;
5853 if (o->op_type == OP_MATCH || o->op_type == OP_QR)
5854 o->op_private |= OPpRUNTIME;
5859 Perl_ck_method(pTHX_ OP *o)
5861 OP * const kid = cUNOPo->op_first;
5862 if (kid->op_type == OP_CONST) {
5863 SV* sv = kSVOP->op_sv;
5864 if (!(strchr(SvPVX_const(sv), ':') || strchr(SvPVX_const(sv), '\''))) {
5866 if (!SvREADONLY(sv) || !SvFAKE(sv)) {
5867 sv = newSVpvn_share(SvPVX_const(sv), SvCUR(sv), 0);
5870 kSVOP->op_sv = Nullsv;
5872 cmop = newSVOP(OP_METHOD_NAMED, 0, sv);
5881 Perl_ck_null(pTHX_ OP *o)
5887 Perl_ck_open(pTHX_ OP *o)
5889 HV * const table = GvHV(PL_hintgv);
5891 SV **svp = hv_fetch(table, "open_IN", 7, FALSE);
5893 const I32 mode = mode_from_discipline(*svp);
5894 if (mode & O_BINARY)
5895 o->op_private |= OPpOPEN_IN_RAW;
5896 else if (mode & O_TEXT)
5897 o->op_private |= OPpOPEN_IN_CRLF;
5900 svp = hv_fetch(table, "open_OUT", 8, FALSE);
5902 const I32 mode = mode_from_discipline(*svp);
5903 if (mode & O_BINARY)
5904 o->op_private |= OPpOPEN_OUT_RAW;
5905 else if (mode & O_TEXT)
5906 o->op_private |= OPpOPEN_OUT_CRLF;
5909 if (o->op_type == OP_BACKTICK)
5912 /* In case of three-arg dup open remove strictness
5913 * from the last arg if it is a bareword. */
5914 OP * const first = cLISTOPx(o)->op_first; /* The pushmark. */
5915 OP * const last = cLISTOPx(o)->op_last; /* The bareword. */
5919 if ((last->op_type == OP_CONST) && /* The bareword. */
5920 (last->op_private & OPpCONST_BARE) &&
5921 (last->op_private & OPpCONST_STRICT) &&
5922 (oa = first->op_sibling) && /* The fh. */
5923 (oa = oa->op_sibling) && /* The mode. */
5924 (oa->op_type == OP_CONST) &&
5925 SvPOK(((SVOP*)oa)->op_sv) &&
5926 (mode = SvPVX_const(((SVOP*)oa)->op_sv)) &&
5927 mode[0] == '>' && mode[1] == '&' && /* A dup open. */
5928 (last == oa->op_sibling)) /* The bareword. */
5929 last->op_private &= ~OPpCONST_STRICT;
5935 Perl_ck_repeat(pTHX_ OP *o)
5937 if (cBINOPo->op_first->op_flags & OPf_PARENS) {
5938 o->op_private |= OPpREPEAT_DOLIST;
5939 cBINOPo->op_first = force_list(cBINOPo->op_first);
5947 Perl_ck_require(pTHX_ OP *o)
5951 if (o->op_flags & OPf_KIDS) { /* Shall we supply missing .pm? */
5952 SVOP * const kid = (SVOP*)cUNOPo->op_first;
5954 if (kid->op_type == OP_CONST && (kid->op_private & OPpCONST_BARE)) {
5955 SV * const sv = kid->op_sv;
5956 U32 was_readonly = SvREADONLY(sv);
5961 sv_force_normal_flags(sv, 0);
5962 assert(!SvREADONLY(sv));
5969 for (s = SvPVX(sv); *s; s++) {
5970 if (*s == ':' && s[1] == ':') {
5972 Move(s+2, s+1, strlen(s+2)+1, char);
5973 SvCUR_set(sv, SvCUR(sv) - 1);
5976 sv_catpvn(sv, ".pm", 3);
5977 SvFLAGS(sv) |= was_readonly;
5981 if (!(o->op_flags & OPf_SPECIAL)) { /* Wasn't written as CORE::require */
5982 /* handle override, if any */
5983 gv = gv_fetchpv("require", FALSE, SVt_PVCV);
5984 if (!(gv && GvCVu(gv) && GvIMPORTED_CV(gv))) {
5985 GV * const * const gvp = (GV**)hv_fetch(PL_globalstash, "require", 7, FALSE);
5986 gv = gvp ? *gvp : Nullgv;
5990 if (gv && GvCVu(gv) && GvIMPORTED_CV(gv)) {
5991 OP * const kid = cUNOPo->op_first;
5992 cUNOPo->op_first = 0;
5994 return ck_subr(newUNOP(OP_ENTERSUB, OPf_STACKED,
5995 append_elem(OP_LIST, kid,
5996 scalar(newUNOP(OP_RV2CV, 0,
6005 Perl_ck_return(pTHX_ OP *o)
6007 if (CvLVALUE(PL_compcv)) {
6009 for (kid = cLISTOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
6010 mod(kid, OP_LEAVESUBLV);
6017 Perl_ck_retarget(pTHX_ OP *o)
6019 Perl_croak(aTHX_ "NOT IMPL LINE %d",__LINE__);
6026 Perl_ck_select(pTHX_ OP *o)
6030 if (o->op_flags & OPf_KIDS) {
6031 kid = cLISTOPo->op_first->op_sibling; /* get past pushmark */
6032 if (kid && kid->op_sibling) {
6033 o->op_type = OP_SSELECT;
6034 o->op_ppaddr = PL_ppaddr[OP_SSELECT];
6036 return fold_constants(o);
6040 kid = cLISTOPo->op_first->op_sibling; /* get past pushmark */
6041 if (kid && kid->op_type == OP_RV2GV)
6042 kid->op_private &= ~HINT_STRICT_REFS;
6047 Perl_ck_shift(pTHX_ OP *o)
6049 const I32 type = o->op_type;
6051 if (!(o->op_flags & OPf_KIDS)) {
6055 argop = newUNOP(OP_RV2AV, 0,
6056 scalar(newGVOP(OP_GV, 0, CvUNIQUE(PL_compcv) ? PL_argvgv : PL_defgv)));
6057 return newUNOP(type, 0, scalar(argop));
6059 return scalar(modkids(ck_fun(o), type));
6063 Perl_ck_sort(pTHX_ OP *o)
6067 if (o->op_type == OP_SORT && o->op_flags & OPf_STACKED)
6069 firstkid = cLISTOPo->op_first->op_sibling; /* get past pushmark */
6070 if (o->op_flags & OPf_STACKED) { /* may have been cleared */
6072 OP *kid = cUNOPx(firstkid)->op_first; /* get past null */
6074 if (kid->op_type == OP_SCOPE || kid->op_type == OP_LEAVE) {
6076 if (kid->op_type == OP_SCOPE) {
6080 else if (kid->op_type == OP_LEAVE) {
6081 if (o->op_type == OP_SORT) {
6082 op_null(kid); /* wipe out leave */
6085 for (k = kLISTOP->op_first->op_next; k; k = k->op_next) {
6086 if (k->op_next == kid)
6088 /* don't descend into loops */
6089 else if (k->op_type == OP_ENTERLOOP
6090 || k->op_type == OP_ENTERITER)
6092 k = cLOOPx(k)->op_lastop;
6097 kid->op_next = 0; /* just disconnect the leave */
6098 k = kLISTOP->op_first;
6103 if (o->op_type == OP_SORT) {
6104 /* provide scalar context for comparison function/block */
6110 o->op_flags |= OPf_SPECIAL;
6112 else if (kid->op_type == OP_RV2SV || kid->op_type == OP_PADSV)
6115 firstkid = firstkid->op_sibling;
6118 /* provide list context for arguments */
6119 if (o->op_type == OP_SORT)
6126 S_simplify_sort(pTHX_ OP *o)
6128 register OP *kid = cLISTOPo->op_first->op_sibling; /* get past pushmark */
6133 if (!(o->op_flags & OPf_STACKED))
6135 GvMULTI_on(gv_fetchpv("a", TRUE, SVt_PV));
6136 GvMULTI_on(gv_fetchpv("b", TRUE, SVt_PV));
6137 kid = kUNOP->op_first; /* get past null */
6138 if (kid->op_type != OP_SCOPE)
6140 kid = kLISTOP->op_last; /* get past scope */
6141 switch(kid->op_type) {
6149 k = kid; /* remember this node*/
6150 if (kBINOP->op_first->op_type != OP_RV2SV)
6152 kid = kBINOP->op_first; /* get past cmp */
6153 if (kUNOP->op_first->op_type != OP_GV)
6155 kid = kUNOP->op_first; /* get past rv2sv */
6157 if (GvSTASH(gv) != PL_curstash)
6159 gvname = GvNAME(gv);
6160 if (*gvname == 'a' && gvname[1] == '\0')
6162 else if (*gvname == 'b' && gvname[1] == '\0')
6167 kid = k; /* back to cmp */
6168 if (kBINOP->op_last->op_type != OP_RV2SV)
6170 kid = kBINOP->op_last; /* down to 2nd arg */
6171 if (kUNOP->op_first->op_type != OP_GV)
6173 kid = kUNOP->op_first; /* get past rv2sv */
6175 if (GvSTASH(gv) != PL_curstash)
6177 gvname = GvNAME(gv);
6179 ? !(*gvname == 'a' && gvname[1] == '\0')
6180 : !(*gvname == 'b' && gvname[1] == '\0'))
6182 o->op_flags &= ~(OPf_STACKED | OPf_SPECIAL);
6184 o->op_private |= OPpSORT_DESCEND;
6185 if (k->op_type == OP_NCMP)
6186 o->op_private |= OPpSORT_NUMERIC;
6187 if (k->op_type == OP_I_NCMP)
6188 o->op_private |= OPpSORT_NUMERIC | OPpSORT_INTEGER;
6189 kid = cLISTOPo->op_first->op_sibling;
6190 cLISTOPo->op_first->op_sibling = kid->op_sibling; /* bypass old block */
6191 op_free(kid); /* then delete it */
6195 Perl_ck_split(pTHX_ OP *o)
6200 if (o->op_flags & OPf_STACKED)
6201 return no_fh_allowed(o);
6203 kid = cLISTOPo->op_first;
6204 if (kid->op_type != OP_NULL)
6205 Perl_croak(aTHX_ "panic: ck_split");
6206 kid = kid->op_sibling;
6207 op_free(cLISTOPo->op_first);
6208 cLISTOPo->op_first = kid;
6210 cLISTOPo->op_first = kid = newSVOP(OP_CONST, 0, newSVpvn(" ", 1));
6211 cLISTOPo->op_last = kid; /* There was only one element previously */
6214 if (kid->op_type != OP_MATCH || kid->op_flags & OPf_STACKED) {
6215 OP * const sibl = kid->op_sibling;
6216 kid->op_sibling = 0;
6217 kid = pmruntime( newPMOP(OP_MATCH, OPf_SPECIAL), kid, 0);
6218 if (cLISTOPo->op_first == cLISTOPo->op_last)
6219 cLISTOPo->op_last = kid;
6220 cLISTOPo->op_first = kid;
6221 kid->op_sibling = sibl;
6224 kid->op_type = OP_PUSHRE;
6225 kid->op_ppaddr = PL_ppaddr[OP_PUSHRE];
6227 if (((PMOP *)kid)->op_pmflags & PMf_GLOBAL && ckWARN(WARN_REGEXP)) {
6228 Perl_warner(aTHX_ packWARN(WARN_REGEXP),
6229 "Use of /g modifier is meaningless in split");
6232 if (!kid->op_sibling)
6233 append_elem(OP_SPLIT, o, newDEFSVOP());
6235 kid = kid->op_sibling;
6238 if (!kid->op_sibling)
6239 append_elem(OP_SPLIT, o, newSVOP(OP_CONST, 0, newSViv(0)));
6241 kid = kid->op_sibling;
6244 if (kid->op_sibling)
6245 return too_many_arguments(o,OP_DESC(o));
6251 Perl_ck_join(pTHX_ OP *o)
6253 const OP * const kid = cLISTOPo->op_first->op_sibling;
6254 if (kid && kid->op_type == OP_MATCH) {
6255 if (ckWARN(WARN_SYNTAX)) {
6256 const REGEXP *re = PM_GETRE(kPMOP);
6257 const char *pmstr = re ? re->precomp : "STRING";
6258 Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
6259 "/%s/ should probably be written as \"%s\"",
6267 Perl_ck_subr(pTHX_ OP *o)
6269 OP *prev = ((cUNOPo->op_first->op_sibling)
6270 ? cUNOPo : ((UNOP*)cUNOPo->op_first))->op_first;
6271 OP *o2 = prev->op_sibling;
6278 I32 contextclass = 0;
6282 o->op_private |= OPpENTERSUB_HASTARG;
6283 for (cvop = o2; cvop->op_sibling; cvop = cvop->op_sibling) ;
6284 if (cvop->op_type == OP_RV2CV) {
6286 o->op_private |= (cvop->op_private & OPpENTERSUB_AMPER);
6287 op_null(cvop); /* disable rv2cv */
6288 tmpop = (SVOP*)((UNOP*)cvop)->op_first;
6289 if (tmpop->op_type == OP_GV && !(o->op_private & OPpENTERSUB_AMPER)) {
6290 GV *gv = cGVOPx_gv(tmpop);
6293 tmpop->op_private |= OPpEARLY_CV;
6296 namegv = CvANON(cv) ? gv : CvGV(cv);
6297 proto = SvPV_nolen((SV*)cv);
6299 if (CvASSERTION(cv)) {
6300 if (PL_hints & HINT_ASSERTING) {
6301 if (PERLDB_ASSERTION && PL_curstash != PL_debstash)
6302 o->op_private |= OPpENTERSUB_DB;
6306 if (!(PL_hints & HINT_ASSERTIONSSEEN) && ckWARN(WARN_ASSERTIONS)) {
6307 Perl_warner(aTHX_ packWARN(WARN_ASSERTIONS),
6308 "Impossible to activate assertion call");
6315 else if (cvop->op_type == OP_METHOD || cvop->op_type == OP_METHOD_NAMED) {
6316 if (o2->op_type == OP_CONST)
6317 o2->op_private &= ~OPpCONST_STRICT;
6318 else if (o2->op_type == OP_LIST) {
6319 OP * const o = ((UNOP*)o2)->op_first->op_sibling;
6320 if (o && o->op_type == OP_CONST)
6321 o->op_private &= ~OPpCONST_STRICT;
6324 o->op_private |= (PL_hints & HINT_STRICT_REFS);
6325 if (PERLDB_SUB && PL_curstash != PL_debstash)
6326 o->op_private |= OPpENTERSUB_DB;
6327 while (o2 != cvop) {
6331 return too_many_arguments(o, gv_ename(namegv));
6349 if (o2->op_type != OP_REFGEN && o2->op_type != OP_UNDEF)
6351 arg == 1 ? "block or sub {}" : "sub {}",
6352 gv_ename(namegv), o2);
6355 /* '*' allows any scalar type, including bareword */
6358 if (o2->op_type == OP_RV2GV)
6359 goto wrapref; /* autoconvert GLOB -> GLOBref */
6360 else if (o2->op_type == OP_CONST)
6361 o2->op_private &= ~OPpCONST_STRICT;
6362 else if (o2->op_type == OP_ENTERSUB) {
6363 /* accidental subroutine, revert to bareword */
6364 OP *gvop = ((UNOP*)o2)->op_first;
6365 if (gvop && gvop->op_type == OP_NULL) {
6366 gvop = ((UNOP*)gvop)->op_first;
6368 for (; gvop->op_sibling; gvop = gvop->op_sibling)
6371 (gvop->op_private & OPpENTERSUB_NOPAREN) &&
6372 (gvop = ((UNOP*)gvop)->op_first) &&
6373 gvop->op_type == OP_GV)
6375 GV * const gv = cGVOPx_gv(gvop);
6376 OP * const sibling = o2->op_sibling;
6377 SV * const n = newSVpvn("",0);
6379 gv_fullname4(n, gv, "", FALSE);
6380 o2 = newSVOP(OP_CONST, 0, n);
6381 prev->op_sibling = o2;
6382 o2->op_sibling = sibling;
6398 if (contextclass++ == 0) {
6399 e = strchr(proto, ']');
6400 if (!e || e == proto)
6413 while (*--p != '[');
6414 bad_type(arg, Perl_form(aTHX_ "one of %s", p),
6415 gv_ename(namegv), o2);
6421 if (o2->op_type == OP_RV2GV)
6424 bad_type(arg, "symbol", gv_ename(namegv), o2);
6427 if (o2->op_type == OP_ENTERSUB)
6430 bad_type(arg, "subroutine entry", gv_ename(namegv), o2);
6433 if (o2->op_type == OP_RV2SV ||
6434 o2->op_type == OP_PADSV ||
6435 o2->op_type == OP_HELEM ||
6436 o2->op_type == OP_AELEM ||
6437 o2->op_type == OP_THREADSV)
6440 bad_type(arg, "scalar", gv_ename(namegv), o2);
6443 if (o2->op_type == OP_RV2AV ||
6444 o2->op_type == OP_PADAV)
6447 bad_type(arg, "array", gv_ename(namegv), o2);
6450 if (o2->op_type == OP_RV2HV ||
6451 o2->op_type == OP_PADHV)
6454 bad_type(arg, "hash", gv_ename(namegv), o2);
6459 OP* const sib = kid->op_sibling;
6460 kid->op_sibling = 0;
6461 o2 = newUNOP(OP_REFGEN, 0, kid);
6462 o2->op_sibling = sib;
6463 prev->op_sibling = o2;
6465 if (contextclass && e) {
6480 Perl_croak(aTHX_ "Malformed prototype for %s: %"SVf,
6481 gv_ename(namegv), cv);
6486 mod(o2, OP_ENTERSUB);
6488 o2 = o2->op_sibling;
6490 if (proto && !optional &&
6491 (*proto && *proto != '@' && *proto != '%' && *proto != ';'))
6492 return too_few_arguments(o, gv_ename(namegv));
6495 o=newSVOP(OP_CONST, 0, newSViv(0));
6501 Perl_ck_svconst(pTHX_ OP *o)
6503 SvREADONLY_on(cSVOPo->op_sv);
6508 Perl_ck_trunc(pTHX_ OP *o)
6510 if (o->op_flags & OPf_KIDS) {
6511 SVOP *kid = (SVOP*)cUNOPo->op_first;
6513 if (kid->op_type == OP_NULL)
6514 kid = (SVOP*)kid->op_sibling;
6515 if (kid && kid->op_type == OP_CONST &&
6516 (kid->op_private & OPpCONST_BARE))
6518 o->op_flags |= OPf_SPECIAL;
6519 kid->op_private &= ~OPpCONST_STRICT;
6526 Perl_ck_unpack(pTHX_ OP *o)
6528 OP *kid = cLISTOPo->op_first;
6529 if (kid->op_sibling) {
6530 kid = kid->op_sibling;
6531 if (!kid->op_sibling)
6532 kid->op_sibling = newDEFSVOP();
6538 Perl_ck_substr(pTHX_ OP *o)
6541 if ((o->op_flags & OPf_KIDS) && o->op_private == 4) {
6542 OP *kid = cLISTOPo->op_first;
6544 if (kid->op_type == OP_NULL)
6545 kid = kid->op_sibling;
6547 kid->op_flags |= OPf_MOD;
6553 /* A peephole optimizer. We visit the ops in the order they're to execute.
6554 * See the comments at the top of this file for more details about when
6555 * peep() is called */
6558 Perl_peep(pTHX_ register OP *o)
6561 register OP* oldop = 0;
6563 if (!o || o->op_opt)
6567 SAVEVPTR(PL_curcop);
6568 for (; o; o = o->op_next) {
6572 switch (o->op_type) {
6576 PL_curcop = ((COP*)o); /* for warnings */
6581 if (cSVOPo->op_private & OPpCONST_STRICT)
6582 no_bareword_allowed(o);
6584 case OP_METHOD_NAMED:
6585 /* Relocate sv to the pad for thread safety.
6586 * Despite being a "constant", the SV is written to,
6587 * for reference counts, sv_upgrade() etc. */
6589 const PADOFFSET ix = pad_alloc(OP_CONST, SVs_PADTMP);
6590 if (o->op_type == OP_CONST && SvPADTMP(cSVOPo->op_sv)) {
6591 /* If op_sv is already a PADTMP then it is being used by
6592 * some pad, so make a copy. */
6593 sv_setsv(PAD_SVl(ix),cSVOPo->op_sv);
6594 SvREADONLY_on(PAD_SVl(ix));
6595 SvREFCNT_dec(cSVOPo->op_sv);
6598 SvREFCNT_dec(PAD_SVl(ix));
6599 SvPADTMP_on(cSVOPo->op_sv);
6600 PAD_SETSV(ix, cSVOPo->op_sv);
6601 /* XXX I don't know how this isn't readonly already. */
6602 SvREADONLY_on(PAD_SVl(ix));
6604 cSVOPo->op_sv = Nullsv;
6612 if (o->op_next && o->op_next->op_type == OP_STRINGIFY) {
6613 if (o->op_next->op_private & OPpTARGET_MY) {
6614 if (o->op_flags & OPf_STACKED) /* chained concats */
6615 goto ignore_optimization;
6617 /* assert(PL_opargs[o->op_type] & OA_TARGLEX); */
6618 o->op_targ = o->op_next->op_targ;
6619 o->op_next->op_targ = 0;
6620 o->op_private |= OPpTARGET_MY;
6623 op_null(o->op_next);
6625 ignore_optimization:
6629 if ((o->op_flags & OPf_WANT) != OPf_WANT_LIST) {
6631 break; /* Scalar stub must produce undef. List stub is noop */
6635 if (o->op_targ == OP_NEXTSTATE
6636 || o->op_targ == OP_DBSTATE
6637 || o->op_targ == OP_SETSTATE)
6639 PL_curcop = ((COP*)o);
6641 /* XXX: We avoid setting op_seq here to prevent later calls
6642 to peep() from mistakenly concluding that optimisation
6643 has already occurred. This doesn't fix the real problem,
6644 though (See 20010220.007). AMS 20010719 */
6645 /* op_seq functionality is now replaced by op_opt */
6646 if (oldop && o->op_next) {
6647 oldop->op_next = o->op_next;
6655 if (oldop && o->op_next) {
6656 oldop->op_next = o->op_next;
6664 if (o->op_type == OP_PADAV || o->op_next->op_type == OP_RV2AV) {
6665 OP* pop = (o->op_type == OP_PADAV) ?
6666 o->op_next : o->op_next->op_next;
6668 if (pop && pop->op_type == OP_CONST &&
6669 ((PL_op = pop->op_next)) &&
6670 pop->op_next->op_type == OP_AELEM &&
6671 !(pop->op_next->op_private &
6672 (OPpLVAL_INTRO|OPpLVAL_DEFER|OPpDEREF|OPpMAYBE_LVSUB)) &&
6673 (i = SvIV(((SVOP*)pop)->op_sv) - PL_curcop->cop_arybase)
6678 if (cSVOPx(pop)->op_private & OPpCONST_STRICT)
6679 no_bareword_allowed(pop);
6680 if (o->op_type == OP_GV)
6681 op_null(o->op_next);
6682 op_null(pop->op_next);
6684 o->op_flags |= pop->op_next->op_flags & OPf_MOD;
6685 o->op_next = pop->op_next->op_next;
6686 o->op_ppaddr = PL_ppaddr[OP_AELEMFAST];
6687 o->op_private = (U8)i;
6688 if (o->op_type == OP_GV) {
6693 o->op_flags |= OPf_SPECIAL;
6694 o->op_type = OP_AELEMFAST;
6700 if (o->op_next->op_type == OP_RV2SV) {
6701 if (!(o->op_next->op_private & OPpDEREF)) {
6702 op_null(o->op_next);
6703 o->op_private |= o->op_next->op_private & (OPpLVAL_INTRO
6705 o->op_next = o->op_next->op_next;
6706 o->op_type = OP_GVSV;
6707 o->op_ppaddr = PL_ppaddr[OP_GVSV];
6710 else if ((o->op_private & OPpEARLY_CV) && ckWARN(WARN_PROTOTYPE)) {
6711 GV * const gv = cGVOPo_gv;
6712 if (SvTYPE(gv) == SVt_PVGV && GvCV(gv) && SvPVX_const(GvCV(gv))) {
6713 /* XXX could check prototype here instead of just carping */
6714 SV * const sv = sv_newmortal();
6715 gv_efullname3(sv, gv, Nullch);
6716 Perl_warner(aTHX_ packWARN(WARN_PROTOTYPE),
6717 "%"SVf"() called too early to check prototype",
6721 else if (o->op_next->op_type == OP_READLINE
6722 && o->op_next->op_next->op_type == OP_CONCAT
6723 && (o->op_next->op_next->op_flags & OPf_STACKED))
6725 /* Turn "$a .= <FH>" into an OP_RCATLINE. AMS 20010917 */
6726 o->op_type = OP_RCATLINE;
6727 o->op_flags |= OPf_STACKED;
6728 o->op_ppaddr = PL_ppaddr[OP_RCATLINE];
6729 op_null(o->op_next->op_next);
6730 op_null(o->op_next);
6747 while (cLOGOP->op_other->op_type == OP_NULL)
6748 cLOGOP->op_other = cLOGOP->op_other->op_next;
6749 peep(cLOGOP->op_other); /* Recursive calls are not replaced by fptr calls */
6755 while (cLOOP->op_redoop->op_type == OP_NULL)
6756 cLOOP->op_redoop = cLOOP->op_redoop->op_next;
6757 peep(cLOOP->op_redoop);
6758 while (cLOOP->op_nextop->op_type == OP_NULL)
6759 cLOOP->op_nextop = cLOOP->op_nextop->op_next;
6760 peep(cLOOP->op_nextop);
6761 while (cLOOP->op_lastop->op_type == OP_NULL)
6762 cLOOP->op_lastop = cLOOP->op_lastop->op_next;
6763 peep(cLOOP->op_lastop);
6770 while (cPMOP->op_pmreplstart &&
6771 cPMOP->op_pmreplstart->op_type == OP_NULL)
6772 cPMOP->op_pmreplstart = cPMOP->op_pmreplstart->op_next;
6773 peep(cPMOP->op_pmreplstart);
6778 if (o->op_next && o->op_next->op_type == OP_NEXTSTATE
6779 && ckWARN(WARN_SYNTAX))
6781 if (o->op_next->op_sibling &&
6782 o->op_next->op_sibling->op_type != OP_EXIT &&
6783 o->op_next->op_sibling->op_type != OP_WARN &&
6784 o->op_next->op_sibling->op_type != OP_DIE) {
6785 const line_t oldline = CopLINE(PL_curcop);
6787 CopLINE_set(PL_curcop, CopLINE((COP*)o->op_next));
6788 Perl_warner(aTHX_ packWARN(WARN_EXEC),
6789 "Statement unlikely to be reached");
6790 Perl_warner(aTHX_ packWARN(WARN_EXEC),
6791 "\t(Maybe you meant system() when you said exec()?)\n");
6792 CopLINE_set(PL_curcop, oldline);
6802 const char *key = NULL;
6807 if (((BINOP*)o)->op_last->op_type != OP_CONST)
6810 /* Make the CONST have a shared SV */
6811 svp = cSVOPx_svp(((BINOP*)o)->op_last);
6812 if ((!SvFAKE(sv = *svp) || !SvREADONLY(sv)) && !IS_PADCONST(sv)) {
6813 key = SvPV_const(sv, keylen);
6814 lexname = newSVpvn_share(key,
6815 SvUTF8(sv) ? -(I32)keylen : keylen,
6821 if ((o->op_private & (OPpLVAL_INTRO)))
6824 rop = (UNOP*)((BINOP*)o)->op_first;
6825 if (rop->op_type != OP_RV2HV || rop->op_first->op_type != OP_PADSV)
6827 lexname = *av_fetch(PL_comppad_name, rop->op_first->op_targ, TRUE);
6828 if (!(SvFLAGS(lexname) & SVpad_TYPED))
6830 fields = (GV**)hv_fetch(SvSTASH(lexname), "FIELDS", 6, FALSE);
6831 if (!fields || !GvHV(*fields))
6833 key = SvPV_const(*svp, keylen);
6834 if (!hv_fetch(GvHV(*fields), key,
6835 SvUTF8(*svp) ? -(I32)keylen : keylen, FALSE))
6837 Perl_croak(aTHX_ "No such class field \"%s\" "
6838 "in variable %s of type %s",
6839 key, SvPV_nolen_const(lexname), HvNAME_get(SvSTASH(lexname)));
6852 SVOP *first_key_op, *key_op;
6854 if ((o->op_private & (OPpLVAL_INTRO))
6855 /* I bet there's always a pushmark... */
6856 || ((LISTOP*)o)->op_first->op_sibling->op_type != OP_LIST)
6857 /* hmmm, no optimization if list contains only one key. */
6859 rop = (UNOP*)((LISTOP*)o)->op_last;
6860 if (rop->op_type != OP_RV2HV)
6862 if (rop->op_first->op_type == OP_PADSV)
6863 /* @$hash{qw(keys here)} */
6864 rop = (UNOP*)rop->op_first;
6866 /* @{$hash}{qw(keys here)} */
6867 if (rop->op_first->op_type == OP_SCOPE
6868 && cLISTOPx(rop->op_first)->op_last->op_type == OP_PADSV)
6870 rop = (UNOP*)cLISTOPx(rop->op_first)->op_last;
6876 lexname = *av_fetch(PL_comppad_name, rop->op_targ, TRUE);
6877 if (!(SvFLAGS(lexname) & SVpad_TYPED))
6879 fields = (GV**)hv_fetch(SvSTASH(lexname), "FIELDS", 6, FALSE);
6880 if (!fields || !GvHV(*fields))
6882 /* Again guessing that the pushmark can be jumped over.... */
6883 first_key_op = (SVOP*)((LISTOP*)((LISTOP*)o)->op_first->op_sibling)
6884 ->op_first->op_sibling;
6885 for (key_op = first_key_op; key_op;
6886 key_op = (SVOP*)key_op->op_sibling) {
6887 if (key_op->op_type != OP_CONST)
6889 svp = cSVOPx_svp(key_op);
6890 key = SvPV_const(*svp, keylen);
6891 if (!hv_fetch(GvHV(*fields), key,
6892 SvUTF8(*svp) ? -(I32)keylen : keylen, FALSE))
6894 Perl_croak(aTHX_ "No such class field \"%s\" "
6895 "in variable %s of type %s",
6896 key, SvPV_nolen(lexname), HvNAME_get(SvSTASH(lexname)));
6903 /* will point to RV2AV or PADAV op on LHS/RHS of assign */
6907 /* check that RHS of sort is a single plain array */
6908 OP *oright = cUNOPo->op_first;
6909 if (!oright || oright->op_type != OP_PUSHMARK)
6912 /* reverse sort ... can be optimised. */
6913 if (!cUNOPo->op_sibling) {
6914 /* Nothing follows us on the list. */
6915 OP * const reverse = o->op_next;
6917 if (reverse->op_type == OP_REVERSE &&
6918 (reverse->op_flags & OPf_WANT) == OPf_WANT_LIST) {
6919 OP * const pushmark = cUNOPx(reverse)->op_first;
6920 if (pushmark && (pushmark->op_type == OP_PUSHMARK)
6921 && (cUNOPx(pushmark)->op_sibling == o)) {
6922 /* reverse -> pushmark -> sort */
6923 o->op_private |= OPpSORT_REVERSE;
6925 pushmark->op_next = oright->op_next;
6931 /* make @a = sort @a act in-place */
6935 oright = cUNOPx(oright)->op_sibling;
6938 if (oright->op_type == OP_NULL) { /* skip sort block/sub */
6939 oright = cUNOPx(oright)->op_sibling;
6943 (oright->op_type != OP_RV2AV && oright->op_type != OP_PADAV)
6944 || oright->op_next != o
6945 || (oright->op_private & OPpLVAL_INTRO)
6949 /* o2 follows the chain of op_nexts through the LHS of the
6950 * assign (if any) to the aassign op itself */
6952 if (!o2 || o2->op_type != OP_NULL)
6955 if (!o2 || o2->op_type != OP_PUSHMARK)
6958 if (o2 && o2->op_type == OP_GV)
6961 || (o2->op_type != OP_PADAV && o2->op_type != OP_RV2AV)
6962 || (o2->op_private & OPpLVAL_INTRO)
6967 if (!o2 || o2->op_type != OP_NULL)
6970 if (!o2 || o2->op_type != OP_AASSIGN
6971 || (o2->op_flags & OPf_WANT) != OPf_WANT_VOID)
6974 /* check that the sort is the first arg on RHS of assign */
6976 o2 = cUNOPx(o2)->op_first;
6977 if (!o2 || o2->op_type != OP_NULL)
6979 o2 = cUNOPx(o2)->op_first;
6980 if (!o2 || o2->op_type != OP_PUSHMARK)
6982 if (o2->op_sibling != o)
6985 /* check the array is the same on both sides */
6986 if (oleft->op_type == OP_RV2AV) {
6987 if (oright->op_type != OP_RV2AV
6988 || !cUNOPx(oright)->op_first
6989 || cUNOPx(oright)->op_first->op_type != OP_GV
6990 || cGVOPx_gv(cUNOPx(oleft)->op_first) !=
6991 cGVOPx_gv(cUNOPx(oright)->op_first)
6995 else if (oright->op_type != OP_PADAV
6996 || oright->op_targ != oleft->op_targ
7000 /* transfer MODishness etc from LHS arg to RHS arg */
7001 oright->op_flags = oleft->op_flags;
7002 o->op_private |= OPpSORT_INPLACE;
7004 /* excise push->gv->rv2av->null->aassign */
7005 o2 = o->op_next->op_next;
7006 op_null(o2); /* PUSHMARK */
7008 if (o2->op_type == OP_GV) {
7009 op_null(o2); /* GV */
7012 op_null(o2); /* RV2AV or PADAV */
7013 o2 = o2->op_next->op_next;
7014 op_null(o2); /* AASSIGN */
7016 o->op_next = o2->op_next;
7022 OP *ourmark, *theirmark, *ourlast, *iter, *expushmark, *rv2av;
7024 LISTOP *enter, *exlist;
7027 enter = (LISTOP *) o->op_next;
7030 if (enter->op_type == OP_NULL) {
7031 enter = (LISTOP *) enter->op_next;
7035 /* for $a (...) will have OP_GV then OP_RV2GV here.
7036 for (...) just has an OP_GV. */
7037 if (enter->op_type == OP_GV) {
7038 gvop = (OP *) enter;
7039 enter = (LISTOP *) enter->op_next;
7042 if (enter->op_type == OP_RV2GV) {
7043 enter = (LISTOP *) enter->op_next;
7049 if (enter->op_type != OP_ENTERITER)
7052 iter = enter->op_next;
7053 if (!iter || iter->op_type != OP_ITER)
7056 expushmark = enter->op_first;
7057 if (!expushmark || expushmark->op_type != OP_NULL
7058 || expushmark->op_targ != OP_PUSHMARK)
7061 exlist = (LISTOP *) expushmark->op_sibling;
7062 if (!exlist || exlist->op_type != OP_NULL
7063 || exlist->op_targ != OP_LIST)
7066 if (exlist->op_last != o) {
7067 /* Mmm. Was expecting to point back to this op. */
7070 theirmark = exlist->op_first;
7071 if (!theirmark || theirmark->op_type != OP_PUSHMARK)
7074 if (theirmark->op_sibling != o) {
7075 /* There's something between the mark and the reverse, eg
7076 for (1, reverse (...))
7081 ourmark = ((LISTOP *)o)->op_first;
7082 if (!ourmark || ourmark->op_type != OP_PUSHMARK)
7085 ourlast = ((LISTOP *)o)->op_last;
7086 if (!ourlast || ourlast->op_next != o)
7089 rv2av = ourmark->op_sibling;
7090 if (rv2av && rv2av->op_type == OP_RV2AV && rv2av->op_sibling == 0
7091 && rv2av->op_flags == (OPf_WANT_LIST | OPf_KIDS)
7092 && enter->op_flags == (OPf_WANT_LIST | OPf_KIDS)) {
7093 /* We're just reversing a single array. */
7094 rv2av->op_flags = OPf_WANT_SCALAR | OPf_KIDS | OPf_REF;
7095 enter->op_flags |= OPf_STACKED;
7098 /* We don't have control over who points to theirmark, so sacrifice
7100 theirmark->op_next = ourmark->op_next;
7101 theirmark->op_flags = ourmark->op_flags;
7102 ourlast->op_next = gvop ? gvop : (OP *) enter;
7105 enter->op_private |= OPpITER_REVERSED;
7106 iter->op_private |= OPpITER_REVERSED;
7121 Perl_custom_op_name(pTHX_ const OP* o)
7123 const IV index = PTR2IV(o->op_ppaddr);
7127 if (!PL_custom_op_names) /* This probably shouldn't happen */
7128 return (char *)PL_op_name[OP_CUSTOM];
7130 keysv = sv_2mortal(newSViv(index));
7132 he = hv_fetch_ent(PL_custom_op_names, keysv, 0, 0);
7134 return (char *)PL_op_name[OP_CUSTOM]; /* Don't know who you are */
7136 return SvPV_nolen(HeVAL(he));
7140 Perl_custom_op_desc(pTHX_ const OP* o)
7142 const IV index = PTR2IV(o->op_ppaddr);
7146 if (!PL_custom_op_descs)
7147 return (char *)PL_op_desc[OP_CUSTOM];
7149 keysv = sv_2mortal(newSViv(index));
7151 he = hv_fetch_ent(PL_custom_op_descs, keysv, 0, 0);
7153 return (char *)PL_op_desc[OP_CUSTOM];
7155 return SvPV_nolen(HeVAL(he));
7160 /* Efficient sub that returns a constant scalar value. */
7162 const_sv_xsub(pTHX_ CV* cv)
7167 Perl_croak(aTHX_ "usage: %s::%s()",
7168 HvNAME_get(GvSTASH(CvGV(cv))), GvNAME(CvGV(cv)));
7172 ST(0) = (SV*)XSANY.any_ptr;
7178 * c-indentation-style: bsd
7180 * indent-tabs-mode: t
7183 * ex: set ts=8 sts=4 sw=4 noet: