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 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 *pmstash = PmopSTASH(cPMOPo);
408 if (pmstash && SvREFCNT(pmstash)) {
409 MAGIC *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 || (o->op_flags & OPf_WANT) || PL_error_count
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];
811 for (kid = cUNOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
816 if (o->op_flags & OPf_STACKED)
823 if (!(o->op_flags & OPf_KIDS))
832 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
839 /* all requires must return a boolean value */
840 o->op_flags &= ~OPf_WANT;
845 if ((kid = cLISTOPo->op_first) && kid->op_type == OP_PUSHRE) {
846 if (!kPMOP->op_pmreplroot)
847 deprecate_old("implicit split to @_");
851 if (useless && ckWARN(WARN_VOID))
852 Perl_warner(aTHX_ packWARN(WARN_VOID), "Useless use of %s in void context", useless);
857 Perl_listkids(pTHX_ OP *o)
859 if (o && o->op_flags & OPf_KIDS) {
861 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
868 Perl_list(pTHX_ OP *o)
873 /* assumes no premature commitment */
874 if (!o || (o->op_flags & OPf_WANT) || PL_error_count
875 || o->op_type == OP_RETURN)
880 if ((o->op_private & OPpTARGET_MY)
881 && (PL_opargs[o->op_type] & OA_TARGLEX))/* OPp share the meaning */
883 return o; /* As if inside SASSIGN */
886 o->op_flags = (o->op_flags & ~OPf_WANT) | OPf_WANT_LIST;
888 switch (o->op_type) {
891 list(cBINOPo->op_first);
896 for (kid = cUNOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
904 if (!(o->op_flags & OPf_KIDS))
906 if (!o->op_next && cUNOPo->op_first->op_type == OP_FLOP) {
907 list(cBINOPo->op_first);
908 return gen_constant_list(o);
915 kid = cLISTOPo->op_first;
917 while ((kid = kid->op_sibling)) {
923 WITH_THR(PL_curcop = &PL_compiling);
927 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling) {
933 WITH_THR(PL_curcop = &PL_compiling);
936 /* all requires must return a boolean value */
937 o->op_flags &= ~OPf_WANT;
944 Perl_scalarseq(pTHX_ OP *o)
947 if (o->op_type == OP_LINESEQ ||
948 o->op_type == OP_SCOPE ||
949 o->op_type == OP_LEAVE ||
950 o->op_type == OP_LEAVETRY)
953 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling) {
954 if (kid->op_sibling) {
958 PL_curcop = &PL_compiling;
960 o->op_flags &= ~OPf_PARENS;
961 if (PL_hints & HINT_BLOCK_SCOPE)
962 o->op_flags |= OPf_PARENS;
965 o = newOP(OP_STUB, 0);
970 S_modkids(pTHX_ OP *o, I32 type)
972 if (o && o->op_flags & OPf_KIDS) {
974 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
980 /* Propagate lvalue ("modifiable") context to an op and it's children.
981 * 'type' represents the context type, roughly based on the type of op that
982 * would do the modifying, although local() is represented by OP_NULL.
983 * It's responsible for detecting things that can't be modified, flag
984 * things that need to behave specially in an lvalue context (e.g., "$$x = 5"
985 * might have to vivify a reference in $x), and so on.
987 * For example, "$a+1 = 2" would cause mod() to be called with o being
988 * OP_ADD and type being OP_SASSIGN, and would output an error.
992 Perl_mod(pTHX_ OP *o, I32 type)
996 /* -1 = error on localize, 0 = ignore localize, 1 = ok to localize */
999 if (!o || PL_error_count)
1002 if ((o->op_private & OPpTARGET_MY)
1003 && (PL_opargs[o->op_type] & OA_TARGLEX))/* OPp share the meaning */
1008 switch (o->op_type) {
1014 if (!(o->op_private & (OPpCONST_ARYBASE)))
1016 if (PL_eval_start && PL_eval_start->op_type == OP_CONST) {
1017 PL_compiling.cop_arybase = (I32)SvIV(cSVOPx(PL_eval_start)->op_sv);
1021 SAVEI32(PL_compiling.cop_arybase);
1022 PL_compiling.cop_arybase = 0;
1024 else if (type == OP_REFGEN)
1027 Perl_croak(aTHX_ "That use of $[ is unsupported");
1030 if (o->op_flags & OPf_PARENS)
1034 if ((type == OP_UNDEF || type == OP_REFGEN) &&
1035 !(o->op_flags & OPf_STACKED)) {
1036 o->op_type = OP_RV2CV; /* entersub => rv2cv */
1037 o->op_ppaddr = PL_ppaddr[OP_RV2CV];
1038 assert(cUNOPo->op_first->op_type == OP_NULL);
1039 op_null(((LISTOP*)cUNOPo->op_first)->op_first);/* disable pushmark */
1042 else if (o->op_private & OPpENTERSUB_NOMOD)
1044 else { /* lvalue subroutine call */
1045 o->op_private |= OPpLVAL_INTRO;
1046 PL_modcount = RETURN_UNLIMITED_NUMBER;
1047 if (type == OP_GREPSTART || type == OP_ENTERSUB || type == OP_REFGEN) {
1048 /* Backward compatibility mode: */
1049 o->op_private |= OPpENTERSUB_INARGS;
1052 else { /* Compile-time error message: */
1053 OP *kid = cUNOPo->op_first;
1057 if (kid->op_type == OP_PUSHMARK)
1059 if (kid->op_type != OP_NULL || kid->op_targ != OP_LIST)
1061 "panic: unexpected lvalue entersub "
1062 "args: type/targ %ld:%"UVuf,
1063 (long)kid->op_type, (UV)kid->op_targ);
1064 kid = kLISTOP->op_first;
1066 while (kid->op_sibling)
1067 kid = kid->op_sibling;
1068 if (!(kid->op_type == OP_NULL && kid->op_targ == OP_RV2CV)) {
1070 if (kid->op_type == OP_METHOD_NAMED
1071 || kid->op_type == OP_METHOD)
1075 NewOp(1101, newop, 1, UNOP);
1076 newop->op_type = OP_RV2CV;
1077 newop->op_ppaddr = PL_ppaddr[OP_RV2CV];
1078 newop->op_first = Nullop;
1079 newop->op_next = (OP*)newop;
1080 kid->op_sibling = (OP*)newop;
1081 newop->op_private |= OPpLVAL_INTRO;
1085 if (kid->op_type != OP_RV2CV)
1087 "panic: unexpected lvalue entersub "
1088 "entry via type/targ %ld:%"UVuf,
1089 (long)kid->op_type, (UV)kid->op_targ);
1090 kid->op_private |= OPpLVAL_INTRO;
1091 break; /* Postpone until runtime */
1095 kid = kUNOP->op_first;
1096 if (kid->op_type == OP_NULL && kid->op_targ == OP_RV2SV)
1097 kid = kUNOP->op_first;
1098 if (kid->op_type == OP_NULL)
1100 "Unexpected constant lvalue entersub "
1101 "entry via type/targ %ld:%"UVuf,
1102 (long)kid->op_type, (UV)kid->op_targ);
1103 if (kid->op_type != OP_GV) {
1104 /* Restore RV2CV to check lvalueness */
1106 if (kid->op_next && kid->op_next != kid) { /* Happens? */
1107 okid->op_next = kid->op_next;
1108 kid->op_next = okid;
1111 okid->op_next = Nullop;
1112 okid->op_type = OP_RV2CV;
1114 okid->op_ppaddr = PL_ppaddr[OP_RV2CV];
1115 okid->op_private |= OPpLVAL_INTRO;
1119 cv = GvCV(kGVOP_gv);
1129 /* grep, foreach, subcalls, refgen */
1130 if (type == OP_GREPSTART || type == OP_ENTERSUB || type == OP_REFGEN)
1132 yyerror(Perl_form(aTHX_ "Can't modify %s in %s",
1133 (o->op_type == OP_NULL && (o->op_flags & OPf_SPECIAL)
1135 : (o->op_type == OP_ENTERSUB
1136 ? "non-lvalue subroutine call"
1138 type ? PL_op_desc[type] : "local"));
1152 case OP_RIGHT_SHIFT:
1161 if (!(o->op_flags & OPf_STACKED))
1168 for (kid = cUNOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
1174 if (type == OP_REFGEN && o->op_flags & OPf_PARENS) {
1175 PL_modcount = RETURN_UNLIMITED_NUMBER;
1176 return o; /* Treat \(@foo) like ordinary list. */
1180 if (scalar_mod_type(o, type))
1182 ref(cUNOPo->op_first, o->op_type);
1186 if (type == OP_LEAVESUBLV)
1187 o->op_private |= OPpMAYBE_LVSUB;
1193 PL_modcount = RETURN_UNLIMITED_NUMBER;
1196 ref(cUNOPo->op_first, o->op_type);
1201 PL_hints |= HINT_BLOCK_SCOPE;
1216 PL_modcount = RETURN_UNLIMITED_NUMBER;
1217 if (type == OP_REFGEN && o->op_flags & OPf_PARENS)
1218 return o; /* Treat \(@foo) like ordinary list. */
1219 if (scalar_mod_type(o, type))
1221 if (type == OP_LEAVESUBLV)
1222 o->op_private |= OPpMAYBE_LVSUB;
1226 if (!type) /* local() */
1227 Perl_croak(aTHX_ "Can't localize lexical variable %s",
1228 PAD_COMPNAME_PV(o->op_targ));
1236 if (type != OP_SASSIGN)
1240 if (o->op_private == 4) /* don't allow 4 arg substr as lvalue */
1245 if (type == OP_LEAVESUBLV)
1246 o->op_private |= OPpMAYBE_LVSUB;
1248 pad_free(o->op_targ);
1249 o->op_targ = pad_alloc(o->op_type, SVs_PADMY);
1250 assert(SvTYPE(PAD_SV(o->op_targ)) == SVt_NULL);
1251 if (o->op_flags & OPf_KIDS)
1252 mod(cBINOPo->op_first->op_sibling, type);
1257 ref(cBINOPo->op_first, o->op_type);
1258 if (type == OP_ENTERSUB &&
1259 !(o->op_private & (OPpLVAL_INTRO | OPpDEREF)))
1260 o->op_private |= OPpLVAL_DEFER;
1261 if (type == OP_LEAVESUBLV)
1262 o->op_private |= OPpMAYBE_LVSUB;
1272 if (o->op_flags & OPf_KIDS)
1273 mod(cLISTOPo->op_last, type);
1278 if (o->op_flags & OPf_SPECIAL) /* do BLOCK */
1280 else if (!(o->op_flags & OPf_KIDS))
1282 if (o->op_targ != OP_LIST) {
1283 mod(cBINOPo->op_first, type);
1289 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
1294 if (type != OP_LEAVESUBLV)
1296 break; /* mod()ing was handled by ck_return() */
1299 /* [20011101.069] File test operators interpret OPf_REF to mean that
1300 their argument is a filehandle; thus \stat(".") should not set
1302 if (type == OP_REFGEN &&
1303 PL_check[o->op_type] == MEMBER_TO_FPTR(Perl_ck_ftst))
1306 if (type != OP_LEAVESUBLV)
1307 o->op_flags |= OPf_MOD;
1309 if (type == OP_AASSIGN || type == OP_SASSIGN)
1310 o->op_flags |= OPf_SPECIAL|OPf_REF;
1311 else if (!type) { /* local() */
1314 o->op_private |= OPpLVAL_INTRO;
1315 o->op_flags &= ~OPf_SPECIAL;
1316 PL_hints |= HINT_BLOCK_SCOPE;
1321 if (ckWARN(WARN_SYNTAX)) {
1322 Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
1323 "Useless localization of %s", OP_DESC(o));
1327 else if (type != OP_GREPSTART && type != OP_ENTERSUB
1328 && type != OP_LEAVESUBLV)
1329 o->op_flags |= OPf_REF;
1334 S_scalar_mod_type(pTHX_ const OP *o, I32 type)
1338 if (o->op_type == OP_RV2GV)
1362 case OP_RIGHT_SHIFT:
1381 S_is_handle_constructor(pTHX_ const OP *o, I32 numargs)
1383 switch (o->op_type) {
1391 case OP_SELECT: /* XXX c.f. SelectSaver.pm */
1404 Perl_refkids(pTHX_ OP *o, I32 type)
1406 if (o && o->op_flags & OPf_KIDS) {
1408 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
1415 Perl_ref(pTHX_ OP *o, I32 type)
1420 if (!o || PL_error_count)
1423 switch (o->op_type) {
1425 if ((type == OP_EXISTS || type == OP_DEFINED || type == OP_LOCK) &&
1426 !(o->op_flags & OPf_STACKED)) {
1427 o->op_type = OP_RV2CV; /* entersub => rv2cv */
1428 o->op_ppaddr = PL_ppaddr[OP_RV2CV];
1429 assert(cUNOPo->op_first->op_type == OP_NULL);
1430 op_null(((LISTOP*)cUNOPo->op_first)->op_first); /* disable pushmark */
1431 o->op_flags |= OPf_SPECIAL;
1436 for (kid = cUNOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
1440 if (type == OP_DEFINED)
1441 o->op_flags |= OPf_SPECIAL; /* don't create GV */
1442 ref(cUNOPo->op_first, o->op_type);
1445 if (type == OP_RV2SV || type == OP_RV2AV || type == OP_RV2HV) {
1446 o->op_private |= (type == OP_RV2AV ? OPpDEREF_AV
1447 : type == OP_RV2HV ? OPpDEREF_HV
1449 o->op_flags |= OPf_MOD;
1454 o->op_flags |= OPf_MOD; /* XXX ??? */
1459 o->op_flags |= OPf_REF;
1462 if (type == OP_DEFINED)
1463 o->op_flags |= OPf_SPECIAL; /* don't create GV */
1464 ref(cUNOPo->op_first, o->op_type);
1469 o->op_flags |= OPf_REF;
1474 if (!(o->op_flags & OPf_KIDS))
1476 ref(cBINOPo->op_first, type);
1480 ref(cBINOPo->op_first, o->op_type);
1481 if (type == OP_RV2SV || type == OP_RV2AV || type == OP_RV2HV) {
1482 o->op_private |= (type == OP_RV2AV ? OPpDEREF_AV
1483 : type == OP_RV2HV ? OPpDEREF_HV
1485 o->op_flags |= OPf_MOD;
1493 if (!(o->op_flags & OPf_KIDS))
1495 ref(cLISTOPo->op_last, type);
1505 S_dup_attrlist(pTHX_ OP *o)
1509 /* An attrlist is either a simple OP_CONST or an OP_LIST with kids,
1510 * where the first kid is OP_PUSHMARK and the remaining ones
1511 * are OP_CONST. We need to push the OP_CONST values.
1513 if (o->op_type == OP_CONST)
1514 rop = newSVOP(OP_CONST, o->op_flags, SvREFCNT_inc(cSVOPo->op_sv));
1516 assert((o->op_type == OP_LIST) && (o->op_flags & OPf_KIDS));
1517 for (o = cLISTOPo->op_first; o; o=o->op_sibling) {
1518 if (o->op_type == OP_CONST)
1519 rop = append_elem(OP_LIST, rop,
1520 newSVOP(OP_CONST, o->op_flags,
1521 SvREFCNT_inc(cSVOPo->op_sv)));
1528 S_apply_attrs(pTHX_ HV *stash, SV *target, OP *attrs, bool for_my)
1533 /* fake up C<use attributes $pkg,$rv,@attrs> */
1534 ENTER; /* need to protect against side-effects of 'use' */
1536 stashsv = stash ? newSVhek(HvNAME_HEK(stash)) : &PL_sv_no;
1538 #define ATTRSMODULE "attributes"
1539 #define ATTRSMODULE_PM "attributes.pm"
1542 /* Don't force the C<use> if we don't need it. */
1543 SV **svp = hv_fetch(GvHVn(PL_incgv), ATTRSMODULE_PM,
1544 sizeof(ATTRSMODULE_PM)-1, 0);
1545 if (svp && *svp != &PL_sv_undef)
1546 ; /* already in %INC */
1548 Perl_load_module(aTHX_ PERL_LOADMOD_NOIMPORT,
1549 newSVpvn(ATTRSMODULE, sizeof(ATTRSMODULE)-1),
1553 Perl_load_module(aTHX_ PERL_LOADMOD_IMPORT_OPS,
1554 newSVpvn(ATTRSMODULE, sizeof(ATTRSMODULE)-1),
1556 prepend_elem(OP_LIST,
1557 newSVOP(OP_CONST, 0, stashsv),
1558 prepend_elem(OP_LIST,
1559 newSVOP(OP_CONST, 0,
1561 dup_attrlist(attrs))));
1567 S_apply_attrs_my(pTHX_ HV *stash, OP *target, OP *attrs, OP **imopsp)
1569 OP *pack, *imop, *arg;
1575 assert(target->op_type == OP_PADSV ||
1576 target->op_type == OP_PADHV ||
1577 target->op_type == OP_PADAV);
1579 /* Ensure that attributes.pm is loaded. */
1580 apply_attrs(stash, PAD_SV(target->op_targ), attrs, TRUE);
1582 /* Need package name for method call. */
1583 pack = newSVOP(OP_CONST, 0, newSVpvn(ATTRSMODULE, sizeof(ATTRSMODULE)-1));
1585 /* Build up the real arg-list. */
1586 stashsv = stash ? newSVhek(HvNAME_HEK(stash)) : &PL_sv_no;
1588 arg = newOP(OP_PADSV, 0);
1589 arg->op_targ = target->op_targ;
1590 arg = prepend_elem(OP_LIST,
1591 newSVOP(OP_CONST, 0, stashsv),
1592 prepend_elem(OP_LIST,
1593 newUNOP(OP_REFGEN, 0,
1594 mod(arg, OP_REFGEN)),
1595 dup_attrlist(attrs)));
1597 /* Fake up a method call to import */
1598 meth = newSVpvn_share("import", 6, 0);
1599 imop = convert(OP_ENTERSUB, OPf_STACKED|OPf_SPECIAL|OPf_WANT_VOID,
1600 append_elem(OP_LIST,
1601 prepend_elem(OP_LIST, pack, list(arg)),
1602 newSVOP(OP_METHOD_NAMED, 0, meth)));
1603 imop->op_private |= OPpENTERSUB_NOMOD;
1605 /* Combine the ops. */
1606 *imopsp = append_elem(OP_LIST, *imopsp, imop);
1610 =notfor apidoc apply_attrs_string
1612 Attempts to apply a list of attributes specified by the C<attrstr> and
1613 C<len> arguments to the subroutine identified by the C<cv> argument which
1614 is expected to be associated with the package identified by the C<stashpv>
1615 argument (see L<attributes>). It gets this wrong, though, in that it
1616 does not correctly identify the boundaries of the individual attribute
1617 specifications within C<attrstr>. This is not really intended for the
1618 public API, but has to be listed here for systems such as AIX which
1619 need an explicit export list for symbols. (It's called from XS code
1620 in support of the C<ATTRS:> keyword from F<xsubpp>.) Patches to fix it
1621 to respect attribute syntax properly would be welcome.
1627 Perl_apply_attrs_string(pTHX_ const char *stashpv, CV *cv,
1628 const char *attrstr, STRLEN len)
1633 len = strlen(attrstr);
1637 for (; isSPACE(*attrstr) && len; --len, ++attrstr) ;
1639 const char * const sstr = attrstr;
1640 for (; !isSPACE(*attrstr) && len; --len, ++attrstr) ;
1641 attrs = append_elem(OP_LIST, attrs,
1642 newSVOP(OP_CONST, 0,
1643 newSVpvn(sstr, attrstr-sstr)));
1647 Perl_load_module(aTHX_ PERL_LOADMOD_IMPORT_OPS,
1648 newSVpvn(ATTRSMODULE, sizeof(ATTRSMODULE)-1),
1649 Nullsv, prepend_elem(OP_LIST,
1650 newSVOP(OP_CONST, 0, newSVpv(stashpv,0)),
1651 prepend_elem(OP_LIST,
1652 newSVOP(OP_CONST, 0,
1658 S_my_kid(pTHX_ OP *o, OP *attrs, OP **imopsp)
1662 if (!o || PL_error_count)
1666 if (type == OP_LIST) {
1668 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
1669 my_kid(kid, attrs, imopsp);
1670 } else if (type == OP_UNDEF) {
1672 } else if (type == OP_RV2SV || /* "our" declaration */
1674 type == OP_RV2HV) { /* XXX does this let anything illegal in? */
1675 if (cUNOPo->op_first->op_type != OP_GV) { /* MJD 20011224 */
1676 yyerror(Perl_form(aTHX_ "Can't declare %s in %s",
1677 OP_DESC(o), PL_in_my == KEY_our ? "our" : "my"));
1679 GV *gv = cGVOPx_gv(cUNOPo->op_first);
1681 PL_in_my_stash = Nullhv;
1682 apply_attrs(GvSTASH(gv),
1683 (type == OP_RV2SV ? GvSV(gv) :
1684 type == OP_RV2AV ? (SV*)GvAV(gv) :
1685 type == OP_RV2HV ? (SV*)GvHV(gv) : (SV*)gv),
1688 o->op_private |= OPpOUR_INTRO;
1691 else if (type != OP_PADSV &&
1694 type != OP_PUSHMARK)
1696 yyerror(Perl_form(aTHX_ "Can't declare %s in \"%s\"",
1698 PL_in_my == KEY_our ? "our" : "my"));
1701 else if (attrs && type != OP_PUSHMARK) {
1705 PL_in_my_stash = Nullhv;
1707 /* check for C<my Dog $spot> when deciding package */
1708 stash = PAD_COMPNAME_TYPE(o->op_targ);
1710 stash = PL_curstash;
1711 apply_attrs_my(stash, o, attrs, imopsp);
1713 o->op_flags |= OPf_MOD;
1714 o->op_private |= OPpLVAL_INTRO;
1719 Perl_my_attrs(pTHX_ OP *o, OP *attrs)
1722 int maybe_scalar = 0;
1724 /* [perl #17376]: this appears to be premature, and results in code such as
1725 C< our(%x); > executing in list mode rather than void mode */
1727 if (o->op_flags & OPf_PARENS)
1736 o = my_kid(o, attrs, &rops);
1738 if (maybe_scalar && o->op_type == OP_PADSV) {
1739 o = scalar(append_list(OP_LIST, (LISTOP*)rops, (LISTOP*)o));
1740 o->op_private |= OPpLVAL_INTRO;
1743 o = append_list(OP_LIST, (LISTOP*)o, (LISTOP*)rops);
1746 PL_in_my_stash = Nullhv;
1751 Perl_my(pTHX_ OP *o)
1753 return my_attrs(o, Nullop);
1757 Perl_sawparens(pTHX_ OP *o)
1760 o->op_flags |= OPf_PARENS;
1765 Perl_bind_match(pTHX_ I32 type, OP *left, OP *right)
1770 if ( (left->op_type == OP_RV2AV ||
1771 left->op_type == OP_RV2HV ||
1772 left->op_type == OP_PADAV ||
1773 left->op_type == OP_PADHV)
1774 && ckWARN(WARN_MISC))
1776 const char *desc = PL_op_desc[(right->op_type == OP_SUBST ||
1777 right->op_type == OP_TRANS)
1778 ? right->op_type : OP_MATCH];
1779 const char *sample = ((left->op_type == OP_RV2AV ||
1780 left->op_type == OP_PADAV)
1781 ? "@array" : "%hash");
1782 Perl_warner(aTHX_ packWARN(WARN_MISC),
1783 "Applying %s to %s will act on scalar(%s)",
1784 desc, sample, sample);
1787 if (right->op_type == OP_CONST &&
1788 cSVOPx(right)->op_private & OPpCONST_BARE &&
1789 cSVOPx(right)->op_private & OPpCONST_STRICT)
1791 no_bareword_allowed(right);
1794 ismatchop = right->op_type == OP_MATCH ||
1795 right->op_type == OP_SUBST ||
1796 right->op_type == OP_TRANS;
1797 if (ismatchop && right->op_private & OPpTARGET_MY) {
1799 right->op_private &= ~OPpTARGET_MY;
1801 if (!(right->op_flags & OPf_STACKED) && ismatchop) {
1802 right->op_flags |= OPf_STACKED;
1803 if (right->op_type != OP_MATCH &&
1804 ! (right->op_type == OP_TRANS &&
1805 right->op_private & OPpTRANS_IDENTICAL))
1806 left = mod(left, right->op_type);
1807 if (right->op_type == OP_TRANS)
1808 o = newBINOP(OP_NULL, OPf_STACKED, scalar(left), right);
1810 o = prepend_elem(right->op_type, scalar(left), right);
1812 return newUNOP(OP_NOT, 0, scalar(o));
1816 return bind_match(type, left,
1817 pmruntime(newPMOP(OP_MATCH, 0), right, 0));
1821 Perl_invert(pTHX_ OP *o)
1825 /* XXX need to optimize away NOT NOT here? Or do we let optimizer do it? */
1826 return newUNOP(OP_NOT, OPf_SPECIAL, scalar(o));
1830 Perl_scope(pTHX_ OP *o)
1834 if (o->op_flags & OPf_PARENS || PERLDB_NOOPT || PL_tainting) {
1835 o = prepend_elem(OP_LINESEQ, newOP(OP_ENTER, 0), o);
1836 o->op_type = OP_LEAVE;
1837 o->op_ppaddr = PL_ppaddr[OP_LEAVE];
1839 else if (o->op_type == OP_LINESEQ) {
1841 o->op_type = OP_SCOPE;
1842 o->op_ppaddr = PL_ppaddr[OP_SCOPE];
1843 kid = ((LISTOP*)o)->op_first;
1844 if (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE)
1848 o = newLISTOP(OP_SCOPE, 0, o, Nullop);
1853 /* XXX kept for BINCOMPAT only */
1855 Perl_save_hints(pTHX)
1857 Perl_croak(aTHX_ "internal error: obsolete function save_hints() called");
1861 Perl_block_start(pTHX_ int full)
1863 const int retval = PL_savestack_ix;
1864 pad_block_start(full);
1866 PL_hints &= ~HINT_BLOCK_SCOPE;
1867 SAVESPTR(PL_compiling.cop_warnings);
1868 if (! specialWARN(PL_compiling.cop_warnings)) {
1869 PL_compiling.cop_warnings = newSVsv(PL_compiling.cop_warnings) ;
1870 SAVEFREESV(PL_compiling.cop_warnings) ;
1872 SAVESPTR(PL_compiling.cop_io);
1873 if (! specialCopIO(PL_compiling.cop_io)) {
1874 PL_compiling.cop_io = newSVsv(PL_compiling.cop_io) ;
1875 SAVEFREESV(PL_compiling.cop_io) ;
1881 Perl_block_end(pTHX_ I32 floor, OP *seq)
1883 const int needblockscope = PL_hints & HINT_BLOCK_SCOPE;
1884 OP* retval = scalarseq(seq);
1886 PL_compiling.op_private = (U8)(PL_hints & HINT_PRIVATE_MASK);
1888 PL_hints |= HINT_BLOCK_SCOPE; /* propagate out */
1896 const I32 offset = pad_findmy("$_");
1897 if (offset == NOT_IN_PAD || PAD_COMPNAME_FLAGS(offset) & SVpad_OUR) {
1898 return newSVREF(newGVOP(OP_GV, 0, PL_defgv));
1901 OP *o = newOP(OP_PADSV, 0);
1902 o->op_targ = offset;
1908 Perl_newPROG(pTHX_ OP *o)
1913 PL_eval_root = newUNOP(OP_LEAVEEVAL,
1914 ((PL_in_eval & EVAL_KEEPERR)
1915 ? OPf_SPECIAL : 0), o);
1916 PL_eval_start = linklist(PL_eval_root);
1917 PL_eval_root->op_private |= OPpREFCOUNTED;
1918 OpREFCNT_set(PL_eval_root, 1);
1919 PL_eval_root->op_next = 0;
1920 CALL_PEEP(PL_eval_start);
1923 if (o->op_type == OP_STUB) {
1924 PL_comppad_name = 0;
1929 PL_main_root = scope(sawparens(scalarvoid(o)));
1930 PL_curcop = &PL_compiling;
1931 PL_main_start = LINKLIST(PL_main_root);
1932 PL_main_root->op_private |= OPpREFCOUNTED;
1933 OpREFCNT_set(PL_main_root, 1);
1934 PL_main_root->op_next = 0;
1935 CALL_PEEP(PL_main_start);
1938 /* Register with debugger */
1940 CV *cv = get_cv("DB::postponed", FALSE);
1944 XPUSHs((SV*)CopFILEGV(&PL_compiling));
1946 call_sv((SV*)cv, G_DISCARD);
1953 Perl_localize(pTHX_ OP *o, I32 lex)
1955 if (o->op_flags & OPf_PARENS)
1956 /* [perl #17376]: this appears to be premature, and results in code such as
1957 C< our(%x); > executing in list mode rather than void mode */
1964 if ( PL_bufptr > PL_oldbufptr && PL_bufptr[-1] == ','
1965 && ckWARN(WARN_PARENTHESIS))
1967 char *s = PL_bufptr;
1970 /* some heuristics to detect a potential error */
1971 while (*s && (strchr(", \t\n", *s)))
1975 if (*s && strchr("@$%*", *s) && *++s
1976 && (isALNUM(*s) || UTF8_IS_CONTINUED(*s))) {
1979 while (*s && (isALNUM(*s) || UTF8_IS_CONTINUED(*s)))
1981 while (*s && (strchr(", \t\n", *s)))
1987 if (sigil && (*s == ';' || *s == '=')) {
1988 Perl_warner(aTHX_ packWARN(WARN_PARENTHESIS),
1989 "Parentheses missing around \"%s\" list",
1990 lex ? (PL_in_my == KEY_our ? "our" : "my")
1998 o = mod(o, OP_NULL); /* a bit kludgey */
2000 PL_in_my_stash = Nullhv;
2005 Perl_jmaybe(pTHX_ OP *o)
2007 if (o->op_type == OP_LIST) {
2009 o2 = newSVREF(newGVOP(OP_GV, 0, gv_fetchpv(";", TRUE, SVt_PV))),
2010 o = convert(OP_JOIN, 0, prepend_elem(OP_LIST, o2, o));
2016 Perl_fold_constants(pTHX_ register OP *o)
2020 I32 type = o->op_type;
2023 if (PL_opargs[type] & OA_RETSCALAR)
2025 if (PL_opargs[type] & OA_TARGET && !o->op_targ)
2026 o->op_targ = pad_alloc(type, SVs_PADTMP);
2028 /* integerize op, unless it happens to be C<-foo>.
2029 * XXX should pp_i_negate() do magic string negation instead? */
2030 if ((PL_opargs[type] & OA_OTHERINT) && (PL_hints & HINT_INTEGER)
2031 && !(type == OP_NEGATE && cUNOPo->op_first->op_type == OP_CONST
2032 && (cUNOPo->op_first->op_private & OPpCONST_BARE)))
2034 o->op_ppaddr = PL_ppaddr[type = ++(o->op_type)];
2037 if (!(PL_opargs[type] & OA_FOLDCONST))
2042 /* XXX might want a ck_negate() for this */
2043 cUNOPo->op_first->op_private &= ~OPpCONST_STRICT;
2055 /* XXX what about the numeric ops? */
2056 if (PL_hints & HINT_LOCALE)
2061 goto nope; /* Don't try to run w/ errors */
2063 for (curop = LINKLIST(o); curop != o; curop = LINKLIST(curop)) {
2064 if ((curop->op_type != OP_CONST ||
2065 (curop->op_private & OPpCONST_BARE)) &&
2066 curop->op_type != OP_LIST &&
2067 curop->op_type != OP_SCALAR &&
2068 curop->op_type != OP_NULL &&
2069 curop->op_type != OP_PUSHMARK)
2075 curop = LINKLIST(o);
2079 sv = *(PL_stack_sp--);
2080 if (o->op_targ && sv == PAD_SV(o->op_targ)) /* grab pad temp? */
2081 pad_swipe(o->op_targ, FALSE);
2082 else if (SvTEMP(sv)) { /* grab mortal temp? */
2083 (void)SvREFCNT_inc(sv);
2087 if (type == OP_RV2GV)
2088 return newGVOP(OP_GV, 0, (GV*)sv);
2089 return newSVOP(OP_CONST, 0, sv);
2096 Perl_gen_constant_list(pTHX_ register OP *o)
2100 const I32 oldtmps_floor = PL_tmps_floor;
2104 return o; /* Don't attempt to run with errors */
2106 PL_op = curop = LINKLIST(o);
2113 PL_tmps_floor = oldtmps_floor;
2115 o->op_type = OP_RV2AV;
2116 o->op_ppaddr = PL_ppaddr[OP_RV2AV];
2117 o->op_flags &= ~OPf_REF; /* treat \(1..2) like an ordinary list */
2118 o->op_flags |= OPf_PARENS; /* and flatten \(1..2,3) */
2119 o->op_opt = 0; /* needs to be revisited in peep() */
2120 curop = ((UNOP*)o)->op_first;
2121 ((UNOP*)o)->op_first = newSVOP(OP_CONST, 0, SvREFCNT_inc(*PL_stack_sp--));
2128 Perl_convert(pTHX_ I32 type, I32 flags, OP *o)
2131 if (!o || o->op_type != OP_LIST)
2132 o = newLISTOP(OP_LIST, 0, o, Nullop);
2134 o->op_flags &= ~OPf_WANT;
2136 if (!(PL_opargs[type] & OA_MARK))
2137 op_null(cLISTOPo->op_first);
2139 o->op_type = (OPCODE)type;
2140 o->op_ppaddr = PL_ppaddr[type];
2141 o->op_flags |= flags;
2143 o = CHECKOP(type, o);
2144 if (o->op_type != (unsigned)type)
2147 return fold_constants(o);
2150 /* List constructors */
2153 Perl_append_elem(pTHX_ I32 type, OP *first, OP *last)
2161 if (first->op_type != (unsigned)type
2162 || (type == OP_LIST && (first->op_flags & OPf_PARENS)))
2164 return newLISTOP(type, 0, first, last);
2167 if (first->op_flags & OPf_KIDS)
2168 ((LISTOP*)first)->op_last->op_sibling = last;
2170 first->op_flags |= OPf_KIDS;
2171 ((LISTOP*)first)->op_first = last;
2173 ((LISTOP*)first)->op_last = last;
2178 Perl_append_list(pTHX_ I32 type, LISTOP *first, LISTOP *last)
2186 if (first->op_type != (unsigned)type)
2187 return prepend_elem(type, (OP*)first, (OP*)last);
2189 if (last->op_type != (unsigned)type)
2190 return append_elem(type, (OP*)first, (OP*)last);
2192 first->op_last->op_sibling = last->op_first;
2193 first->op_last = last->op_last;
2194 first->op_flags |= (last->op_flags & OPf_KIDS);
2202 Perl_prepend_elem(pTHX_ I32 type, OP *first, OP *last)
2210 if (last->op_type == (unsigned)type) {
2211 if (type == OP_LIST) { /* already a PUSHMARK there */
2212 first->op_sibling = ((LISTOP*)last)->op_first->op_sibling;
2213 ((LISTOP*)last)->op_first->op_sibling = first;
2214 if (!(first->op_flags & OPf_PARENS))
2215 last->op_flags &= ~OPf_PARENS;
2218 if (!(last->op_flags & OPf_KIDS)) {
2219 ((LISTOP*)last)->op_last = first;
2220 last->op_flags |= OPf_KIDS;
2222 first->op_sibling = ((LISTOP*)last)->op_first;
2223 ((LISTOP*)last)->op_first = first;
2225 last->op_flags |= OPf_KIDS;
2229 return newLISTOP(type, 0, first, last);
2235 Perl_newNULLLIST(pTHX)
2237 return newOP(OP_STUB, 0);
2241 Perl_force_list(pTHX_ OP *o)
2243 if (!o || o->op_type != OP_LIST)
2244 o = newLISTOP(OP_LIST, 0, o, Nullop);
2250 Perl_newLISTOP(pTHX_ I32 type, I32 flags, OP *first, OP *last)
2255 NewOp(1101, listop, 1, LISTOP);
2257 listop->op_type = (OPCODE)type;
2258 listop->op_ppaddr = PL_ppaddr[type];
2261 listop->op_flags = (U8)flags;
2265 else if (!first && last)
2268 first->op_sibling = last;
2269 listop->op_first = first;
2270 listop->op_last = last;
2271 if (type == OP_LIST) {
2273 pushop = newOP(OP_PUSHMARK, 0);
2274 pushop->op_sibling = first;
2275 listop->op_first = pushop;
2276 listop->op_flags |= OPf_KIDS;
2278 listop->op_last = pushop;
2281 return CHECKOP(type, listop);
2285 Perl_newOP(pTHX_ I32 type, I32 flags)
2289 NewOp(1101, o, 1, OP);
2290 o->op_type = (OPCODE)type;
2291 o->op_ppaddr = PL_ppaddr[type];
2292 o->op_flags = (U8)flags;
2295 o->op_private = (U8)(0 | (flags >> 8));
2296 if (PL_opargs[type] & OA_RETSCALAR)
2298 if (PL_opargs[type] & OA_TARGET)
2299 o->op_targ = pad_alloc(type, SVs_PADTMP);
2300 return CHECKOP(type, o);
2304 Perl_newUNOP(pTHX_ I32 type, I32 flags, OP *first)
2310 first = newOP(OP_STUB, 0);
2311 if (PL_opargs[type] & OA_MARK)
2312 first = force_list(first);
2314 NewOp(1101, unop, 1, UNOP);
2315 unop->op_type = (OPCODE)type;
2316 unop->op_ppaddr = PL_ppaddr[type];
2317 unop->op_first = first;
2318 unop->op_flags = flags | OPf_KIDS;
2319 unop->op_private = (U8)(1 | (flags >> 8));
2320 unop = (UNOP*) CHECKOP(type, unop);
2324 return fold_constants((OP *) unop);
2328 Perl_newBINOP(pTHX_ I32 type, I32 flags, OP *first, OP *last)
2332 NewOp(1101, binop, 1, BINOP);
2335 first = newOP(OP_NULL, 0);
2337 binop->op_type = (OPCODE)type;
2338 binop->op_ppaddr = PL_ppaddr[type];
2339 binop->op_first = first;
2340 binop->op_flags = flags | OPf_KIDS;
2343 binop->op_private = (U8)(1 | (flags >> 8));
2346 binop->op_private = (U8)(2 | (flags >> 8));
2347 first->op_sibling = last;
2350 binop = (BINOP*)CHECKOP(type, binop);
2351 if (binop->op_next || binop->op_type != (OPCODE)type)
2354 binop->op_last = binop->op_first->op_sibling;
2356 return fold_constants((OP *)binop);
2359 static int uvcompare(const void *a, const void *b) __attribute__nonnull__(1) __attribute__nonnull__(2) __attribute__pure__;
2360 static int uvcompare(const void *a, const void *b)
2362 if (*((const UV *)a) < (*(const UV *)b))
2364 if (*((const UV *)a) > (*(const UV *)b))
2366 if (*((const UV *)a+1) < (*(const UV *)b+1))
2368 if (*((const UV *)a+1) > (*(const UV *)b+1))
2374 Perl_pmtrans(pTHX_ OP *o, OP *expr, OP *repl)
2376 SV * const tstr = ((SVOP*)expr)->op_sv;
2377 SV * const rstr = ((SVOP*)repl)->op_sv;
2380 const U8 *t = (U8*)SvPV_const(tstr, tlen);
2381 const U8 *r = (U8*)SvPV_const(rstr, rlen);
2388 register short *tbl;
2390 PL_hints |= HINT_BLOCK_SCOPE;
2391 complement = o->op_private & OPpTRANS_COMPLEMENT;
2392 del = o->op_private & OPpTRANS_DELETE;
2393 squash = o->op_private & OPpTRANS_SQUASH;
2396 o->op_private |= OPpTRANS_FROM_UTF;
2399 o->op_private |= OPpTRANS_TO_UTF;
2401 if (o->op_private & (OPpTRANS_FROM_UTF|OPpTRANS_TO_UTF)) {
2402 SV* listsv = newSVpvn("# comment\n",10);
2404 const U8* tend = t + tlen;
2405 const U8* rend = r + rlen;
2419 I32 from_utf = o->op_private & OPpTRANS_FROM_UTF;
2420 I32 to_utf = o->op_private & OPpTRANS_TO_UTF;
2426 t = tsave = bytes_to_utf8(t, &len);
2429 if (!to_utf && rlen) {
2431 r = rsave = bytes_to_utf8(r, &len);
2435 /* There are several snags with this code on EBCDIC:
2436 1. 0xFF is a legal UTF-EBCDIC byte (there are no illegal bytes).
2437 2. scan_const() in toke.c has encoded chars in native encoding which makes
2438 ranges at least in EBCDIC 0..255 range the bottom odd.
2442 U8 tmpbuf[UTF8_MAXBYTES+1];
2445 Newx(cp, 2*tlen, UV);
2447 transv = newSVpvn("",0);
2449 cp[2*i] = utf8n_to_uvuni(t, tend-t, &ulen, 0);
2451 if (t < tend && NATIVE_TO_UTF(*t) == 0xff) {
2453 cp[2*i+1] = utf8n_to_uvuni(t, tend-t, &ulen, 0);
2457 cp[2*i+1] = cp[2*i];
2461 qsort(cp, i, 2*sizeof(UV), uvcompare);
2462 for (j = 0; j < i; j++) {
2464 diff = val - nextmin;
2466 t = uvuni_to_utf8(tmpbuf,nextmin);
2467 sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf);
2469 U8 range_mark = UTF_TO_NATIVE(0xff);
2470 t = uvuni_to_utf8(tmpbuf, val - 1);
2471 sv_catpvn(transv, (char *)&range_mark, 1);
2472 sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf);
2479 t = uvuni_to_utf8(tmpbuf,nextmin);
2480 sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf);
2482 U8 range_mark = UTF_TO_NATIVE(0xff);
2483 sv_catpvn(transv, (char *)&range_mark, 1);
2485 t = uvuni_to_utf8_flags(tmpbuf, 0x7fffffff,
2486 UNICODE_ALLOW_SUPER);
2487 sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf);
2488 t = (const U8*)SvPVX_const(transv);
2489 tlen = SvCUR(transv);
2493 else if (!rlen && !del) {
2494 r = t; rlen = tlen; rend = tend;
2497 if ((!rlen && !del) || t == r ||
2498 (tlen == rlen && memEQ((char *)t, (char *)r, tlen)))
2500 o->op_private |= OPpTRANS_IDENTICAL;
2504 while (t < tend || tfirst <= tlast) {
2505 /* see if we need more "t" chars */
2506 if (tfirst > tlast) {
2507 tfirst = (I32)utf8n_to_uvuni(t, tend - t, &ulen, 0);
2509 if (t < tend && NATIVE_TO_UTF(*t) == 0xff) { /* illegal utf8 val indicates range */
2511 tlast = (I32)utf8n_to_uvuni(t, tend - t, &ulen, 0);
2518 /* now see if we need more "r" chars */
2519 if (rfirst > rlast) {
2521 rfirst = (I32)utf8n_to_uvuni(r, rend - r, &ulen, 0);
2523 if (r < rend && NATIVE_TO_UTF(*r) == 0xff) { /* illegal utf8 val indicates range */
2525 rlast = (I32)utf8n_to_uvuni(r, rend - r, &ulen, 0);
2534 rfirst = rlast = 0xffffffff;
2538 /* now see which range will peter our first, if either. */
2539 tdiff = tlast - tfirst;
2540 rdiff = rlast - rfirst;
2547 if (rfirst == 0xffffffff) {
2548 diff = tdiff; /* oops, pretend rdiff is infinite */
2550 Perl_sv_catpvf(aTHX_ listsv, "%04lx\t%04lx\tXXXX\n",
2551 (long)tfirst, (long)tlast);
2553 Perl_sv_catpvf(aTHX_ listsv, "%04lx\t\tXXXX\n", (long)tfirst);
2557 Perl_sv_catpvf(aTHX_ listsv, "%04lx\t%04lx\t%04lx\n",
2558 (long)tfirst, (long)(tfirst + diff),
2561 Perl_sv_catpvf(aTHX_ listsv, "%04lx\t\t%04lx\n",
2562 (long)tfirst, (long)rfirst);
2564 if (rfirst + diff > max)
2565 max = rfirst + diff;
2567 grows = (tfirst < rfirst &&
2568 UNISKIP(tfirst) < UNISKIP(rfirst + diff));
2580 else if (max > 0xff)
2585 Safefree(cPVOPo->op_pv);
2586 cSVOPo->op_sv = (SV*)swash_init("utf8", "", listsv, bits, none);
2587 SvREFCNT_dec(listsv);
2589 SvREFCNT_dec(transv);
2591 if (!del && havefinal && rlen)
2592 (void)hv_store((HV*)SvRV((cSVOPo->op_sv)), "FINAL", 5,
2593 newSVuv((UV)final), 0);
2596 o->op_private |= OPpTRANS_GROWS;
2608 tbl = (short*)cPVOPo->op_pv;
2610 Zero(tbl, 256, short);
2611 for (i = 0; i < (I32)tlen; i++)
2613 for (i = 0, j = 0; i < 256; i++) {
2615 if (j >= (I32)rlen) {
2624 if (i < 128 && r[j] >= 128)
2634 o->op_private |= OPpTRANS_IDENTICAL;
2636 else if (j >= (I32)rlen)
2639 cPVOPo->op_pv = (char*)Renew(tbl, 0x101+rlen-j, short);
2640 tbl[0x100] = rlen - j;
2641 for (i=0; i < (I32)rlen - j; i++)
2642 tbl[0x101+i] = r[j+i];
2646 if (!rlen && !del) {
2649 o->op_private |= OPpTRANS_IDENTICAL;
2651 else if (!squash && rlen == tlen && memEQ((char*)t, (char*)r, tlen)) {
2652 o->op_private |= OPpTRANS_IDENTICAL;
2654 for (i = 0; i < 256; i++)
2656 for (i = 0, j = 0; i < (I32)tlen; i++,j++) {
2657 if (j >= (I32)rlen) {
2659 if (tbl[t[i]] == -1)
2665 if (tbl[t[i]] == -1) {
2666 if (t[i] < 128 && r[j] >= 128)
2673 o->op_private |= OPpTRANS_GROWS;
2681 Perl_newPMOP(pTHX_ I32 type, I32 flags)
2686 NewOp(1101, pmop, 1, PMOP);
2687 pmop->op_type = (OPCODE)type;
2688 pmop->op_ppaddr = PL_ppaddr[type];
2689 pmop->op_flags = (U8)flags;
2690 pmop->op_private = (U8)(0 | (flags >> 8));
2692 if (PL_hints & HINT_RE_TAINT)
2693 pmop->op_pmpermflags |= PMf_RETAINT;
2694 if (PL_hints & HINT_LOCALE)
2695 pmop->op_pmpermflags |= PMf_LOCALE;
2696 pmop->op_pmflags = pmop->op_pmpermflags;
2701 if(av_len((AV*) PL_regex_pad[0]) > -1) {
2702 repointer = av_pop((AV*)PL_regex_pad[0]);
2703 pmop->op_pmoffset = SvIV(repointer);
2704 SvREPADTMP_off(repointer);
2705 sv_setiv(repointer,0);
2707 repointer = newSViv(0);
2708 av_push(PL_regex_padav,SvREFCNT_inc(repointer));
2709 pmop->op_pmoffset = av_len(PL_regex_padav);
2710 PL_regex_pad = AvARRAY(PL_regex_padav);
2715 /* link into pm list */
2716 if (type != OP_TRANS && PL_curstash) {
2717 MAGIC *mg = mg_find((SV*)PL_curstash, PERL_MAGIC_symtab);
2720 mg = sv_magicext((SV*)PL_curstash, 0, PERL_MAGIC_symtab, 0, 0, 0);
2722 pmop->op_pmnext = (PMOP*)mg->mg_obj;
2723 mg->mg_obj = (SV*)pmop;
2724 PmopSTASH_set(pmop,PL_curstash);
2727 return CHECKOP(type, pmop);
2730 /* Given some sort of match op o, and an expression expr containing a
2731 * pattern, either compile expr into a regex and attach it to o (if it's
2732 * constant), or convert expr into a runtime regcomp op sequence (if it's
2735 * isreg indicates that the pattern is part of a regex construct, eg
2736 * $x =~ /pattern/ or split /pattern/, as opposed to $x =~ $pattern or
2737 * split "pattern", which aren't. In the former case, expr will be a list
2738 * if the pattern contains more than one term (eg /a$b/) or if it contains
2739 * a replacement, ie s/// or tr///.
2743 Perl_pmruntime(pTHX_ OP *o, OP *expr, bool isreg)
2748 I32 repl_has_vars = 0;
2752 if (o->op_type == OP_SUBST || o->op_type == OP_TRANS) {
2753 /* last element in list is the replacement; pop it */
2755 repl = cLISTOPx(expr)->op_last;
2756 kid = cLISTOPx(expr)->op_first;
2757 while (kid->op_sibling != repl)
2758 kid = kid->op_sibling;
2759 kid->op_sibling = Nullop;
2760 cLISTOPx(expr)->op_last = kid;
2763 if (isreg && expr->op_type == OP_LIST &&
2764 cLISTOPx(expr)->op_first->op_sibling == cLISTOPx(expr)->op_last)
2766 /* convert single element list to element */
2768 expr = cLISTOPx(oe)->op_first->op_sibling;
2769 cLISTOPx(oe)->op_first->op_sibling = Nullop;
2770 cLISTOPx(oe)->op_last = Nullop;
2774 if (o->op_type == OP_TRANS) {
2775 return pmtrans(o, expr, repl);
2778 reglist = isreg && expr->op_type == OP_LIST;
2782 PL_hints |= HINT_BLOCK_SCOPE;
2785 if (expr->op_type == OP_CONST) {
2787 SV *pat = ((SVOP*)expr)->op_sv;
2788 const char *p = SvPV_const(pat, plen);
2789 if ((o->op_flags & OPf_SPECIAL) && (*p == ' ' && p[1] == '\0')) {
2790 U32 was_readonly = SvREADONLY(pat);
2794 sv_force_normal_flags(pat, 0);
2795 assert(!SvREADONLY(pat));
2798 SvREADONLY_off(pat);
2802 sv_setpvn(pat, "\\s+", 3);
2804 SvFLAGS(pat) |= was_readonly;
2806 p = SvPV_const(pat, plen);
2807 pm->op_pmflags |= PMf_SKIPWHITE;
2810 pm->op_pmdynflags |= PMdf_UTF8;
2811 /* FIXME - can we make this function take const char * args? */
2812 PM_SETRE(pm, CALLREGCOMP(aTHX_ (char*)p, (char*)p + plen, pm));
2813 if (strEQ("\\s+", PM_GETRE(pm)->precomp))
2814 pm->op_pmflags |= PMf_WHITE;
2818 if (pm->op_pmflags & PMf_KEEP || !(PL_hints & HINT_RE_EVAL))
2819 expr = newUNOP((!(PL_hints & HINT_RE_EVAL)
2821 : OP_REGCMAYBE),0,expr);
2823 NewOp(1101, rcop, 1, LOGOP);
2824 rcop->op_type = OP_REGCOMP;
2825 rcop->op_ppaddr = PL_ppaddr[OP_REGCOMP];
2826 rcop->op_first = scalar(expr);
2827 rcop->op_flags |= OPf_KIDS
2828 | ((PL_hints & HINT_RE_EVAL) ? OPf_SPECIAL : 0)
2829 | (reglist ? OPf_STACKED : 0);
2830 rcop->op_private = 1;
2833 rcop->op_targ = pad_alloc(rcop->op_type, SVs_PADTMP);
2835 /* /$x/ may cause an eval, since $x might be qr/(?{..})/ */
2838 /* establish postfix order */
2839 if (pm->op_pmflags & PMf_KEEP || !(PL_hints & HINT_RE_EVAL)) {
2841 rcop->op_next = expr;
2842 ((UNOP*)expr)->op_first->op_next = (OP*)rcop;
2845 rcop->op_next = LINKLIST(expr);
2846 expr->op_next = (OP*)rcop;
2849 prepend_elem(o->op_type, scalar((OP*)rcop), o);
2854 if (pm->op_pmflags & PMf_EVAL) {
2856 if (CopLINE(PL_curcop) < (line_t)PL_multi_end)
2857 CopLINE_set(PL_curcop, (line_t)PL_multi_end);
2859 else if (repl->op_type == OP_CONST)
2863 for (curop = LINKLIST(repl); curop!=repl; curop = LINKLIST(curop)) {
2864 if (PL_opargs[curop->op_type] & OA_DANGEROUS) {
2865 if (curop->op_type == OP_GV) {
2866 GV *gv = cGVOPx_gv(curop);
2868 if (strchr("&`'123456789+-\016\022", *GvENAME(gv)))
2871 else if (curop->op_type == OP_RV2CV)
2873 else if (curop->op_type == OP_RV2SV ||
2874 curop->op_type == OP_RV2AV ||
2875 curop->op_type == OP_RV2HV ||
2876 curop->op_type == OP_RV2GV) {
2877 if (lastop && lastop->op_type != OP_GV) /*funny deref?*/
2880 else if (curop->op_type == OP_PADSV ||
2881 curop->op_type == OP_PADAV ||
2882 curop->op_type == OP_PADHV ||
2883 curop->op_type == OP_PADANY) {
2886 else if (curop->op_type == OP_PUSHRE)
2887 ; /* Okay here, dangerous in newASSIGNOP */
2897 || PM_GETRE(pm)->reganch & ROPT_EVAL_SEEN))) {
2898 pm->op_pmflags |= PMf_CONST; /* const for long enough */
2899 pm->op_pmpermflags |= PMf_CONST; /* const for long enough */
2900 prepend_elem(o->op_type, scalar(repl), o);
2903 if (curop == repl && !PM_GETRE(pm)) { /* Has variables. */
2904 pm->op_pmflags |= PMf_MAYBE_CONST;
2905 pm->op_pmpermflags |= PMf_MAYBE_CONST;
2907 NewOp(1101, rcop, 1, LOGOP);
2908 rcop->op_type = OP_SUBSTCONT;
2909 rcop->op_ppaddr = PL_ppaddr[OP_SUBSTCONT];
2910 rcop->op_first = scalar(repl);
2911 rcop->op_flags |= OPf_KIDS;
2912 rcop->op_private = 1;
2915 /* establish postfix order */
2916 rcop->op_next = LINKLIST(repl);
2917 repl->op_next = (OP*)rcop;
2919 pm->op_pmreplroot = scalar((OP*)rcop);
2920 pm->op_pmreplstart = LINKLIST(rcop);
2929 Perl_newSVOP(pTHX_ I32 type, I32 flags, SV *sv)
2933 NewOp(1101, svop, 1, SVOP);
2934 svop->op_type = (OPCODE)type;
2935 svop->op_ppaddr = PL_ppaddr[type];
2937 svop->op_next = (OP*)svop;
2938 svop->op_flags = (U8)flags;
2939 if (PL_opargs[type] & OA_RETSCALAR)
2941 if (PL_opargs[type] & OA_TARGET)
2942 svop->op_targ = pad_alloc(type, SVs_PADTMP);
2943 return CHECKOP(type, svop);
2947 Perl_newPADOP(pTHX_ I32 type, I32 flags, SV *sv)
2951 NewOp(1101, padop, 1, PADOP);
2952 padop->op_type = (OPCODE)type;
2953 padop->op_ppaddr = PL_ppaddr[type];
2954 padop->op_padix = pad_alloc(type, SVs_PADTMP);
2955 SvREFCNT_dec(PAD_SVl(padop->op_padix));
2956 PAD_SETSV(padop->op_padix, sv);
2959 padop->op_next = (OP*)padop;
2960 padop->op_flags = (U8)flags;
2961 if (PL_opargs[type] & OA_RETSCALAR)
2963 if (PL_opargs[type] & OA_TARGET)
2964 padop->op_targ = pad_alloc(type, SVs_PADTMP);
2965 return CHECKOP(type, padop);
2969 Perl_newGVOP(pTHX_ I32 type, I32 flags, GV *gv)
2975 return newPADOP(type, flags, SvREFCNT_inc(gv));
2977 return newSVOP(type, flags, SvREFCNT_inc(gv));
2982 Perl_newPVOP(pTHX_ I32 type, I32 flags, char *pv)
2986 NewOp(1101, pvop, 1, PVOP);
2987 pvop->op_type = (OPCODE)type;
2988 pvop->op_ppaddr = PL_ppaddr[type];
2990 pvop->op_next = (OP*)pvop;
2991 pvop->op_flags = (U8)flags;
2992 if (PL_opargs[type] & OA_RETSCALAR)
2994 if (PL_opargs[type] & OA_TARGET)
2995 pvop->op_targ = pad_alloc(type, SVs_PADTMP);
2996 return CHECKOP(type, pvop);
3000 Perl_package(pTHX_ OP *o)
3005 save_hptr(&PL_curstash);
3006 save_item(PL_curstname);
3008 name = SvPV_const(cSVOPo->op_sv, len);
3009 PL_curstash = gv_stashpvn(name, len, TRUE);
3010 sv_setpvn(PL_curstname, name, len);
3013 PL_hints |= HINT_BLOCK_SCOPE;
3014 PL_copline = NOLINE;
3019 Perl_utilize(pTHX_ int aver, I32 floor, OP *version, OP *idop, OP *arg)
3025 if (idop->op_type != OP_CONST)
3026 Perl_croak(aTHX_ "Module name must be constant");
3031 SV *vesv = ((SVOP*)version)->op_sv;
3033 if (!arg && !SvNIOKp(vesv)) {
3040 if (version->op_type != OP_CONST || !SvNIOKp(vesv))
3041 Perl_croak(aTHX_ "Version number must be constant number");
3043 /* Make copy of idop so we don't free it twice */
3044 pack = newSVOP(OP_CONST, 0, newSVsv(((SVOP*)idop)->op_sv));
3046 /* Fake up a method call to VERSION */
3047 meth = newSVpvn_share("VERSION", 7, 0);
3048 veop = convert(OP_ENTERSUB, OPf_STACKED|OPf_SPECIAL,
3049 append_elem(OP_LIST,
3050 prepend_elem(OP_LIST, pack, list(version)),
3051 newSVOP(OP_METHOD_NAMED, 0, meth)));
3055 /* Fake up an import/unimport */
3056 if (arg && arg->op_type == OP_STUB)
3057 imop = arg; /* no import on explicit () */
3058 else if (SvNIOKp(((SVOP*)idop)->op_sv)) {
3059 imop = Nullop; /* use 5.0; */
3061 idop->op_private |= OPpCONST_NOVER;
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 import/unimport */
3071 ? newSVpvn_share("import",6, 0) : newSVpvn_share("unimport", 8, 0);
3072 imop = convert(OP_ENTERSUB, OPf_STACKED|OPf_SPECIAL,
3073 append_elem(OP_LIST,
3074 prepend_elem(OP_LIST, pack, list(arg)),
3075 newSVOP(OP_METHOD_NAMED, 0, meth)));
3078 /* Fake up the BEGIN {}, which does its thing immediately. */
3080 newSVOP(OP_CONST, 0, newSVpvn_share("BEGIN", 5, 0)),
3083 append_elem(OP_LINESEQ,
3084 append_elem(OP_LINESEQ,
3085 newSTATEOP(0, Nullch, newUNOP(OP_REQUIRE, 0, idop)),
3086 newSTATEOP(0, Nullch, veop)),
3087 newSTATEOP(0, Nullch, imop) ));
3089 /* The "did you use incorrect case?" warning used to be here.
3090 * The problem is that on case-insensitive filesystems one
3091 * might get false positives for "use" (and "require"):
3092 * "use Strict" or "require CARP" will work. This causes
3093 * portability problems for the script: in case-strict
3094 * filesystems the script will stop working.
3096 * The "incorrect case" warning checked whether "use Foo"
3097 * imported "Foo" to your namespace, but that is wrong, too:
3098 * there is no requirement nor promise in the language that
3099 * a Foo.pm should or would contain anything in package "Foo".
3101 * There is very little Configure-wise that can be done, either:
3102 * the case-sensitivity of the build filesystem of Perl does not
3103 * help in guessing the case-sensitivity of the runtime environment.
3106 PL_hints |= HINT_BLOCK_SCOPE;
3107 PL_copline = NOLINE;
3109 PL_cop_seqmax++; /* Purely for B::*'s benefit */
3113 =head1 Embedding Functions
3115 =for apidoc load_module
3117 Loads the module whose name is pointed to by the string part of name.
3118 Note that the actual module name, not its filename, should be given.
3119 Eg, "Foo::Bar" instead of "Foo/Bar.pm". flags can be any of
3120 PERL_LOADMOD_DENY, PERL_LOADMOD_NOIMPORT, or PERL_LOADMOD_IMPORT_OPS
3121 (or 0 for no flags). ver, if specified, provides version semantics
3122 similar to C<use Foo::Bar VERSION>. The optional trailing SV*
3123 arguments can be used to specify arguments to the module's import()
3124 method, similar to C<use Foo::Bar VERSION LIST>.
3129 Perl_load_module(pTHX_ U32 flags, SV *name, SV *ver, ...)
3132 va_start(args, ver);
3133 vload_module(flags, name, ver, &args);
3137 #ifdef PERL_IMPLICIT_CONTEXT
3139 Perl_load_module_nocontext(U32 flags, SV *name, SV *ver, ...)
3143 va_start(args, ver);
3144 vload_module(flags, name, ver, &args);
3150 Perl_vload_module(pTHX_ U32 flags, SV *name, SV *ver, va_list *args)
3152 OP *modname, *veop, *imop;
3154 modname = newSVOP(OP_CONST, 0, name);
3155 modname->op_private |= OPpCONST_BARE;
3157 veop = newSVOP(OP_CONST, 0, ver);
3161 if (flags & PERL_LOADMOD_NOIMPORT) {
3162 imop = sawparens(newNULLLIST());
3164 else if (flags & PERL_LOADMOD_IMPORT_OPS) {
3165 imop = va_arg(*args, OP*);
3170 sv = va_arg(*args, SV*);
3172 imop = append_elem(OP_LIST, imop, newSVOP(OP_CONST, 0, sv));
3173 sv = va_arg(*args, SV*);
3177 const line_t ocopline = PL_copline;
3178 COP * const ocurcop = PL_curcop;
3179 const int oexpect = PL_expect;
3181 utilize(!(flags & PERL_LOADMOD_DENY), start_subparse(FALSE, 0),
3182 veop, modname, imop);
3183 PL_expect = oexpect;
3184 PL_copline = ocopline;
3185 PL_curcop = ocurcop;
3190 Perl_dofile(pTHX_ OP *term, I32 force_builtin)
3195 if (!force_builtin) {
3196 gv = gv_fetchpv("do", FALSE, SVt_PVCV);
3197 if (!(gv && GvCVu(gv) && GvIMPORTED_CV(gv))) {
3198 GV **gvp = (GV**)hv_fetch(PL_globalstash, "do", 2, FALSE);
3199 if (gvp) gv = *gvp; else gv = Nullgv;
3203 if (gv && GvCVu(gv) && GvIMPORTED_CV(gv)) {
3204 doop = ck_subr(newUNOP(OP_ENTERSUB, OPf_STACKED,
3205 append_elem(OP_LIST, term,
3206 scalar(newUNOP(OP_RV2CV, 0,
3211 doop = newUNOP(OP_DOFILE, 0, scalar(term));
3217 Perl_newSLICEOP(pTHX_ I32 flags, OP *subscript, OP *listval)
3219 return newBINOP(OP_LSLICE, flags,
3220 list(force_list(subscript)),
3221 list(force_list(listval)) );
3225 S_is_list_assignment(pTHX_ register const OP *o)
3230 if (o->op_type == OP_NULL && o->op_flags & OPf_KIDS)
3231 o = cUNOPo->op_first;
3233 if (o->op_type == OP_COND_EXPR) {
3234 const I32 t = is_list_assignment(cLOGOPo->op_first->op_sibling);
3235 const I32 f = is_list_assignment(cLOGOPo->op_first->op_sibling->op_sibling);
3240 yyerror("Assignment to both a list and a scalar");
3244 if (o->op_type == OP_LIST &&
3245 (o->op_flags & OPf_WANT) == OPf_WANT_SCALAR &&
3246 o->op_private & OPpLVAL_INTRO)
3249 if (o->op_type == OP_LIST || o->op_flags & OPf_PARENS ||
3250 o->op_type == OP_RV2AV || o->op_type == OP_RV2HV ||
3251 o->op_type == OP_ASLICE || o->op_type == OP_HSLICE)
3254 if (o->op_type == OP_PADAV || o->op_type == OP_PADHV)
3257 if (o->op_type == OP_RV2SV)
3264 Perl_newASSIGNOP(pTHX_ I32 flags, OP *left, I32 optype, OP *right)
3269 if (optype == OP_ANDASSIGN || optype == OP_ORASSIGN || optype == OP_DORASSIGN) {
3270 return newLOGOP(optype, 0,
3271 mod(scalar(left), optype),
3272 newUNOP(OP_SASSIGN, 0, scalar(right)));
3275 return newBINOP(optype, OPf_STACKED,
3276 mod(scalar(left), optype), scalar(right));
3280 if (is_list_assignment(left)) {
3284 /* Grandfathering $[ assignment here. Bletch.*/
3285 /* Only simple assignments like C<< ($[) = 1 >> are allowed */
3286 PL_eval_start = (left->op_type == OP_CONST) ? right : 0;
3287 left = mod(left, OP_AASSIGN);
3290 else if (left->op_type == OP_CONST) {
3291 /* Result of assignment is always 1 (or we'd be dead already) */
3292 return newSVOP(OP_CONST, 0, newSViv(1));
3294 /* optimise C<my @x = ()> to C<my @x>, and likewise for hashes */
3295 if ((left->op_type == OP_PADAV || left->op_type == OP_PADHV)
3296 && right->op_type == OP_STUB
3297 && (left->op_private & OPpLVAL_INTRO))
3300 left->op_flags &= ~(OPf_REF|OPf_SPECIAL);
3303 curop = list(force_list(left));
3304 o = newBINOP(OP_AASSIGN, flags, list(force_list(right)), curop);
3305 o->op_private = (U8)(0 | (flags >> 8));
3307 /* PL_generation sorcery:
3308 * an assignment like ($a,$b) = ($c,$d) is easier than
3309 * ($a,$b) = ($c,$a), since there is no need for temporary vars.
3310 * To detect whether there are common vars, the global var
3311 * PL_generation is incremented for each assign op we compile.
3312 * Then, while compiling the assign op, we run through all the
3313 * variables on both sides of the assignment, setting a spare slot
3314 * in each of them to PL_generation. If any of them already have
3315 * that value, we know we've got commonality. We could use a
3316 * single bit marker, but then we'd have to make 2 passes, first
3317 * to clear the flag, then to test and set it. To find somewhere
3318 * to store these values, evil chicanery is done with SvCUR().
3321 if (!(left->op_private & OPpLVAL_INTRO)) {
3324 for (curop = LINKLIST(o); curop != o; curop = LINKLIST(curop)) {
3325 if (PL_opargs[curop->op_type] & OA_DANGEROUS) {
3326 if (curop->op_type == OP_GV) {
3327 GV *gv = cGVOPx_gv(curop);
3328 if (gv == PL_defgv || (int)SvCUR(gv) == PL_generation)
3330 SvCUR_set(gv, PL_generation);
3332 else if (curop->op_type == OP_PADSV ||
3333 curop->op_type == OP_PADAV ||
3334 curop->op_type == OP_PADHV ||
3335 curop->op_type == OP_PADANY)
3337 if (PAD_COMPNAME_GEN(curop->op_targ)
3338 == (STRLEN)PL_generation)
3340 PAD_COMPNAME_GEN_set(curop->op_targ, PL_generation);
3343 else if (curop->op_type == OP_RV2CV)
3345 else if (curop->op_type == OP_RV2SV ||
3346 curop->op_type == OP_RV2AV ||
3347 curop->op_type == OP_RV2HV ||
3348 curop->op_type == OP_RV2GV) {
3349 if (lastop->op_type != OP_GV) /* funny deref? */
3352 else if (curop->op_type == OP_PUSHRE) {
3353 if (((PMOP*)curop)->op_pmreplroot) {
3355 GV *gv = (GV*)PAD_SVl(INT2PTR(PADOFFSET,
3356 ((PMOP*)curop)->op_pmreplroot));
3358 GV *gv = (GV*)((PMOP*)curop)->op_pmreplroot;
3360 if (gv == PL_defgv || (int)SvCUR(gv) == PL_generation)
3362 SvCUR_set(gv, PL_generation);
3371 o->op_private |= OPpASSIGN_COMMON;
3373 if (right && right->op_type == OP_SPLIT) {
3375 if ((tmpop = ((LISTOP*)right)->op_first) &&
3376 tmpop->op_type == OP_PUSHRE)
3378 PMOP *pm = (PMOP*)tmpop;
3379 if (left->op_type == OP_RV2AV &&
3380 !(left->op_private & OPpLVAL_INTRO) &&
3381 !(o->op_private & OPpASSIGN_COMMON) )
3383 tmpop = ((UNOP*)left)->op_first;
3384 if (tmpop->op_type == OP_GV && !pm->op_pmreplroot) {
3386 pm->op_pmreplroot = INT2PTR(OP*, cPADOPx(tmpop)->op_padix);
3387 cPADOPx(tmpop)->op_padix = 0; /* steal it */
3389 pm->op_pmreplroot = (OP*)cSVOPx(tmpop)->op_sv;
3390 cSVOPx(tmpop)->op_sv = Nullsv; /* steal it */
3392 pm->op_pmflags |= PMf_ONCE;
3393 tmpop = cUNOPo->op_first; /* to list (nulled) */
3394 tmpop = ((UNOP*)tmpop)->op_first; /* to pushmark */
3395 tmpop->op_sibling = Nullop; /* don't free split */
3396 right->op_next = tmpop->op_next; /* fix starting loc */
3397 op_free(o); /* blow off assign */
3398 right->op_flags &= ~OPf_WANT;
3399 /* "I don't know and I don't care." */
3404 if (PL_modcount < RETURN_UNLIMITED_NUMBER &&
3405 ((LISTOP*)right)->op_last->op_type == OP_CONST)
3407 SV *sv = ((SVOP*)((LISTOP*)right)->op_last)->op_sv;
3409 sv_setiv(sv, PL_modcount+1);
3417 right = newOP(OP_UNDEF, 0);
3418 if (right->op_type == OP_READLINE) {
3419 right->op_flags |= OPf_STACKED;
3420 return newBINOP(OP_NULL, flags, mod(scalar(left), OP_SASSIGN), scalar(right));
3423 PL_eval_start = right; /* Grandfathering $[ assignment here. Bletch.*/
3424 o = newBINOP(OP_SASSIGN, flags,
3425 scalar(right), mod(scalar(left), OP_SASSIGN) );
3429 o = newSVOP(OP_CONST, 0, newSViv(PL_compiling.cop_arybase));
3436 Perl_newSTATEOP(pTHX_ I32 flags, char *label, OP *o)
3439 const U32 seq = intro_my();
3442 NewOp(1101, cop, 1, COP);
3443 if (PERLDB_LINE && CopLINE(PL_curcop) && PL_curstash != PL_debstash) {
3444 cop->op_type = OP_DBSTATE;
3445 cop->op_ppaddr = PL_ppaddr[ OP_DBSTATE ];
3448 cop->op_type = OP_NEXTSTATE;
3449 cop->op_ppaddr = PL_ppaddr[ OP_NEXTSTATE ];
3451 cop->op_flags = (U8)flags;
3452 cop->op_private = (U8)(PL_hints & HINT_PRIVATE_MASK);
3454 cop->op_private |= NATIVE_HINTS;
3456 PL_compiling.op_private = cop->op_private;
3457 cop->op_next = (OP*)cop;
3460 cop->cop_label = label;
3461 PL_hints |= HINT_BLOCK_SCOPE;
3464 cop->cop_arybase = PL_curcop->cop_arybase;
3465 if (specialWARN(PL_curcop->cop_warnings))
3466 cop->cop_warnings = PL_curcop->cop_warnings ;
3468 cop->cop_warnings = newSVsv(PL_curcop->cop_warnings) ;
3469 if (specialCopIO(PL_curcop->cop_io))
3470 cop->cop_io = PL_curcop->cop_io;
3472 cop->cop_io = newSVsv(PL_curcop->cop_io) ;
3475 if (PL_copline == NOLINE)
3476 CopLINE_set(cop, CopLINE(PL_curcop));
3478 CopLINE_set(cop, PL_copline);
3479 PL_copline = NOLINE;
3482 CopFILE_set(cop, CopFILE(PL_curcop)); /* XXX share in a pvtable? */
3484 CopFILEGV_set(cop, CopFILEGV(PL_curcop));
3486 CopSTASH_set(cop, PL_curstash);
3488 if (PERLDB_LINE && PL_curstash != PL_debstash) {
3489 SV ** const svp = av_fetch(CopFILEAV(PL_curcop), (I32)CopLINE(cop), FALSE);
3490 if (svp && *svp != &PL_sv_undef ) {
3491 (void)SvIOK_on(*svp);
3492 SvIV_set(*svp, PTR2IV(cop));
3496 return prepend_elem(OP_LINESEQ, (OP*)cop, o);
3501 Perl_newLOGOP(pTHX_ I32 type, I32 flags, OP *first, OP *other)
3504 return new_logop(type, flags, &first, &other);
3508 S_new_logop(pTHX_ I32 type, I32 flags, OP** firstp, OP** otherp)
3513 OP *first = *firstp;
3514 OP * const other = *otherp;
3516 if (type == OP_XOR) /* Not short circuit, but here by precedence. */
3517 return newBINOP(type, flags, scalar(first), scalar(other));
3519 scalarboolean(first);
3520 /* optimize "!a && b" to "a || b", and "!a || b" to "a && b" */
3521 if (first->op_type == OP_NOT && (first->op_flags & OPf_SPECIAL)) {
3522 if (type == OP_AND || type == OP_OR) {
3528 first = *firstp = cUNOPo->op_first;
3530 first->op_next = o->op_next;
3531 cUNOPo->op_first = Nullop;
3535 if (first->op_type == OP_CONST) {
3536 if (first->op_private & OPpCONST_STRICT)
3537 no_bareword_allowed(first);
3538 else if ((first->op_private & OPpCONST_BARE) && ckWARN(WARN_BAREWORD))
3539 Perl_warner(aTHX_ packWARN(WARN_BAREWORD), "Bareword found in conditional");
3540 if ((type == OP_AND && SvTRUE(((SVOP*)first)->op_sv)) ||
3541 (type == OP_OR && !SvTRUE(((SVOP*)first)->op_sv)) ||
3542 (type == OP_DOR && !SvOK(((SVOP*)first)->op_sv))) {
3545 if (other->op_type == OP_CONST)
3546 other->op_private |= OPpCONST_SHORTCIRCUIT;
3550 /* check for C<my $x if 0>, or C<my($x,$y) if 0> */
3551 const OP *o2 = other;
3552 if ( ! (o2->op_type == OP_LIST
3553 && (( o2 = cUNOPx(o2)->op_first))
3554 && o2->op_type == OP_PUSHMARK
3555 && (( o2 = o2->op_sibling)) )
3558 if ((o2->op_type == OP_PADSV || o2->op_type == OP_PADAV
3559 || o2->op_type == OP_PADHV)
3560 && o2->op_private & OPpLVAL_INTRO
3561 && ckWARN(WARN_DEPRECATED))
3563 Perl_warner(aTHX_ packWARN(WARN_DEPRECATED),
3564 "Deprecated use of my() in false conditional");
3569 if (first->op_type == OP_CONST)
3570 first->op_private |= OPpCONST_SHORTCIRCUIT;
3574 else if ((first->op_flags & OPf_KIDS) && type != OP_DOR
3575 && ckWARN(WARN_MISC)) /* [#24076] Don't warn for <FH> err FOO. */
3577 const OP * const k1 = ((UNOP*)first)->op_first;
3578 const OP * const k2 = k1->op_sibling;
3580 switch (first->op_type)
3583 if (k2 && k2->op_type == OP_READLINE
3584 && (k2->op_flags & OPf_STACKED)
3585 && ((k1->op_flags & OPf_WANT) == OPf_WANT_SCALAR))
3587 warnop = k2->op_type;
3592 if (k1->op_type == OP_READDIR
3593 || k1->op_type == OP_GLOB
3594 || (k1->op_type == OP_NULL && k1->op_targ == OP_GLOB)
3595 || k1->op_type == OP_EACH)
3597 warnop = ((k1->op_type == OP_NULL)
3598 ? (OPCODE)k1->op_targ : k1->op_type);
3603 const line_t oldline = CopLINE(PL_curcop);
3604 CopLINE_set(PL_curcop, PL_copline);
3605 Perl_warner(aTHX_ packWARN(WARN_MISC),
3606 "Value of %s%s can be \"0\"; test with defined()",
3608 ((warnop == OP_READLINE || warnop == OP_GLOB)
3609 ? " construct" : "() operator"));
3610 CopLINE_set(PL_curcop, oldline);
3617 if (type == OP_ANDASSIGN || type == OP_ORASSIGN || type == OP_DORASSIGN)
3618 other->op_private |= OPpASSIGN_BACKWARDS; /* other is an OP_SASSIGN */
3620 NewOp(1101, logop, 1, LOGOP);
3622 logop->op_type = (OPCODE)type;
3623 logop->op_ppaddr = PL_ppaddr[type];
3624 logop->op_first = first;
3625 logop->op_flags = flags | OPf_KIDS;
3626 logop->op_other = LINKLIST(other);
3627 logop->op_private = (U8)(1 | (flags >> 8));
3629 /* establish postfix order */
3630 logop->op_next = LINKLIST(first);
3631 first->op_next = (OP*)logop;
3632 first->op_sibling = other;
3634 CHECKOP(type,logop);
3636 o = newUNOP(OP_NULL, 0, (OP*)logop);
3643 Perl_newCONDOP(pTHX_ I32 flags, OP *first, OP *trueop, OP *falseop)
3651 return newLOGOP(OP_AND, 0, first, trueop);
3653 return newLOGOP(OP_OR, 0, first, falseop);
3655 scalarboolean(first);
3656 if (first->op_type == OP_CONST) {
3657 if (first->op_private & OPpCONST_BARE &&
3658 first->op_private & OPpCONST_STRICT) {
3659 no_bareword_allowed(first);
3661 if (SvTRUE(((SVOP*)first)->op_sv)) {
3672 NewOp(1101, logop, 1, LOGOP);
3673 logop->op_type = OP_COND_EXPR;
3674 logop->op_ppaddr = PL_ppaddr[OP_COND_EXPR];
3675 logop->op_first = first;
3676 logop->op_flags = flags | OPf_KIDS;
3677 logop->op_private = (U8)(1 | (flags >> 8));
3678 logop->op_other = LINKLIST(trueop);
3679 logop->op_next = LINKLIST(falseop);
3681 CHECKOP(OP_COND_EXPR, /* that's logop->op_type */
3684 /* establish postfix order */
3685 start = LINKLIST(first);
3686 first->op_next = (OP*)logop;
3688 first->op_sibling = trueop;
3689 trueop->op_sibling = falseop;
3690 o = newUNOP(OP_NULL, 0, (OP*)logop);
3692 trueop->op_next = falseop->op_next = o;
3699 Perl_newRANGE(pTHX_ I32 flags, OP *left, OP *right)
3708 NewOp(1101, range, 1, LOGOP);
3710 range->op_type = OP_RANGE;
3711 range->op_ppaddr = PL_ppaddr[OP_RANGE];
3712 range->op_first = left;
3713 range->op_flags = OPf_KIDS;
3714 leftstart = LINKLIST(left);
3715 range->op_other = LINKLIST(right);
3716 range->op_private = (U8)(1 | (flags >> 8));
3718 left->op_sibling = right;
3720 range->op_next = (OP*)range;
3721 flip = newUNOP(OP_FLIP, flags, (OP*)range);
3722 flop = newUNOP(OP_FLOP, 0, flip);
3723 o = newUNOP(OP_NULL, 0, flop);
3725 range->op_next = leftstart;
3727 left->op_next = flip;
3728 right->op_next = flop;
3730 range->op_targ = pad_alloc(OP_RANGE, SVs_PADMY);
3731 sv_upgrade(PAD_SV(range->op_targ), SVt_PVNV);
3732 flip->op_targ = pad_alloc(OP_RANGE, SVs_PADMY);
3733 sv_upgrade(PAD_SV(flip->op_targ), SVt_PVNV);
3735 flip->op_private = left->op_type == OP_CONST ? OPpFLIP_LINENUM : 0;
3736 flop->op_private = right->op_type == OP_CONST ? OPpFLIP_LINENUM : 0;
3739 if (!flip->op_private || !flop->op_private)
3740 linklist(o); /* blow off optimizer unless constant */
3746 Perl_newLOOPOP(pTHX_ I32 flags, I32 debuggable, OP *expr, OP *block)
3750 const bool once = block && block->op_flags & OPf_SPECIAL &&
3751 (block->op_type == OP_ENTERSUB || block->op_type == OP_NULL);
3753 PERL_UNUSED_ARG(debuggable);
3756 if (once && expr->op_type == OP_CONST && !SvTRUE(((SVOP*)expr)->op_sv))
3757 return block; /* do {} while 0 does once */
3758 if (expr->op_type == OP_READLINE || expr->op_type == OP_GLOB
3759 || (expr->op_type == OP_NULL && expr->op_targ == OP_GLOB)) {
3760 expr = newUNOP(OP_DEFINED, 0,
3761 newASSIGNOP(0, newDEFSVOP(), 0, expr) );
3762 } else if (expr->op_flags & OPf_KIDS) {
3763 const OP * const k1 = ((UNOP*)expr)->op_first;
3764 const OP * const k2 = k1 ? k1->op_sibling : NULL;
3765 switch (expr->op_type) {
3767 if (k2 && k2->op_type == OP_READLINE
3768 && (k2->op_flags & OPf_STACKED)
3769 && ((k1->op_flags & OPf_WANT) == OPf_WANT_SCALAR))
3770 expr = newUNOP(OP_DEFINED, 0, expr);
3774 if (k1->op_type == OP_READDIR
3775 || k1->op_type == OP_GLOB
3776 || (k1->op_type == OP_NULL && k1->op_targ == OP_GLOB)
3777 || k1->op_type == OP_EACH)
3778 expr = newUNOP(OP_DEFINED, 0, expr);
3784 /* if block is null, the next append_elem() would put UNSTACK, a scalar
3785 * op, in listop. This is wrong. [perl #27024] */
3787 block = newOP(OP_NULL, 0);
3788 listop = append_elem(OP_LINESEQ, block, newOP(OP_UNSTACK, 0));
3789 o = new_logop(OP_AND, 0, &expr, &listop);
3792 ((LISTOP*)listop)->op_last->op_next = LINKLIST(o);
3794 if (once && o != listop)
3795 o->op_next = ((LOGOP*)cUNOPo->op_first)->op_other;
3798 o = newUNOP(OP_NULL, 0, o); /* or do {} while 1 loses outer block */
3800 o->op_flags |= flags;
3802 o->op_flags |= OPf_SPECIAL; /* suppress POPBLOCK curpm restoration*/
3807 Perl_newWHILEOP(pTHX_ I32 flags, I32 debuggable, LOOP *loop, I32
3808 whileline, OP *expr, OP *block, OP *cont, I32 has_my)
3817 PERL_UNUSED_ARG(debuggable);
3820 if (expr->op_type == OP_READLINE || expr->op_type == OP_GLOB
3821 || (expr->op_type == OP_NULL && expr->op_targ == OP_GLOB)) {
3822 expr = newUNOP(OP_DEFINED, 0,
3823 newASSIGNOP(0, newDEFSVOP(), 0, expr) );
3824 } else if (expr->op_flags & OPf_KIDS) {
3825 const OP * const k1 = ((UNOP*)expr)->op_first;
3826 const OP * const k2 = (k1) ? k1->op_sibling : NULL;
3827 switch (expr->op_type) {
3829 if (k2 && k2->op_type == OP_READLINE
3830 && (k2->op_flags & OPf_STACKED)
3831 && ((k1->op_flags & OPf_WANT) == OPf_WANT_SCALAR))
3832 expr = newUNOP(OP_DEFINED, 0, expr);
3836 if (k1->op_type == OP_READDIR
3837 || k1->op_type == OP_GLOB
3838 || (k1->op_type == OP_NULL && k1->op_targ == OP_GLOB)
3839 || k1->op_type == OP_EACH)
3840 expr = newUNOP(OP_DEFINED, 0, expr);
3847 block = newOP(OP_NULL, 0);
3848 else if (cont || has_my) {
3849 block = scope(block);
3853 next = LINKLIST(cont);
3856 OP *unstack = newOP(OP_UNSTACK, 0);
3859 cont = append_elem(OP_LINESEQ, cont, unstack);
3862 listop = append_list(OP_LINESEQ, (LISTOP*)block, (LISTOP*)cont);
3863 redo = LINKLIST(listop);
3866 PL_copline = (line_t)whileline;
3868 o = new_logop(OP_AND, 0, &expr, &listop);
3869 if (o == expr && o->op_type == OP_CONST && !SvTRUE(cSVOPo->op_sv)) {
3870 op_free(expr); /* oops, it's a while (0) */
3872 return Nullop; /* listop already freed by new_logop */
3875 ((LISTOP*)listop)->op_last->op_next =
3876 (o == listop ? redo : LINKLIST(o));
3882 NewOp(1101,loop,1,LOOP);
3883 loop->op_type = OP_ENTERLOOP;
3884 loop->op_ppaddr = PL_ppaddr[OP_ENTERLOOP];
3885 loop->op_private = 0;
3886 loop->op_next = (OP*)loop;
3889 o = newBINOP(OP_LEAVELOOP, 0, (OP*)loop, o);
3891 loop->op_redoop = redo;
3892 loop->op_lastop = o;
3893 o->op_private |= loopflags;
3896 loop->op_nextop = next;
3898 loop->op_nextop = o;
3900 o->op_flags |= flags;
3901 o->op_private |= (flags >> 8);
3906 Perl_newFOROP(pTHX_ I32 flags, char *label, line_t forline, OP *sv, OP *expr, OP *block, OP *cont)
3911 PADOFFSET padoff = 0;
3916 if (sv->op_type == OP_RV2SV) { /* symbol table variable */
3917 iterpflags = sv->op_private & OPpOUR_INTRO; /* for our $x () */
3918 sv->op_type = OP_RV2GV;
3919 sv->op_ppaddr = PL_ppaddr[OP_RV2GV];
3921 else if (sv->op_type == OP_PADSV) { /* private variable */
3922 iterpflags = sv->op_private & OPpLVAL_INTRO; /* for my $x () */
3923 padoff = sv->op_targ;
3928 else if (sv->op_type == OP_THREADSV) { /* per-thread variable */
3929 padoff = sv->op_targ;
3931 iterflags |= OPf_SPECIAL;
3936 Perl_croak(aTHX_ "Can't use %s for loop variable", PL_op_desc[sv->op_type]);
3939 const I32 offset = pad_findmy("$_");
3940 if (offset == NOT_IN_PAD || PAD_COMPNAME_FLAGS(offset) & SVpad_OUR) {
3941 sv = newGVOP(OP_GV, 0, PL_defgv);
3947 if (expr->op_type == OP_RV2AV || expr->op_type == OP_PADAV) {
3948 expr = mod(force_list(scalar(ref(expr, OP_ITER))), OP_GREPSTART);
3949 iterflags |= OPf_STACKED;
3951 else if (expr->op_type == OP_NULL &&
3952 (expr->op_flags & OPf_KIDS) &&
3953 ((BINOP*)expr)->op_first->op_type == OP_FLOP)
3955 /* Basically turn for($x..$y) into the same as for($x,$y), but we
3956 * set the STACKED flag to indicate that these values are to be
3957 * treated as min/max values by 'pp_iterinit'.
3959 UNOP* flip = (UNOP*)((UNOP*)((BINOP*)expr)->op_first)->op_first;
3960 LOGOP* range = (LOGOP*) flip->op_first;
3961 OP* const left = range->op_first;
3962 OP* const right = left->op_sibling;
3965 range->op_flags &= ~OPf_KIDS;
3966 range->op_first = Nullop;
3968 listop = (LISTOP*)newLISTOP(OP_LIST, 0, left, right);
3969 listop->op_first->op_next = range->op_next;
3970 left->op_next = range->op_other;
3971 right->op_next = (OP*)listop;
3972 listop->op_next = listop->op_first;
3975 expr = (OP*)(listop);
3977 iterflags |= OPf_STACKED;
3980 expr = mod(force_list(expr), OP_GREPSTART);
3983 loop = (LOOP*)list(convert(OP_ENTERITER, iterflags,
3984 append_elem(OP_LIST, expr, scalar(sv))));
3985 assert(!loop->op_next);
3986 /* for my $x () sets OPpLVAL_INTRO;
3987 * for our $x () sets OPpOUR_INTRO */
3988 loop->op_private = (U8)iterpflags;
3989 #ifdef PL_OP_SLAB_ALLOC
3992 NewOp(1234,tmp,1,LOOP);
3993 Copy(loop,tmp,1,LISTOP);
3998 Renew(loop, 1, LOOP);
4000 loop->op_targ = padoff;
4001 wop = newWHILEOP(flags, 1, loop, forline, newOP(OP_ITER, 0), block, cont, 0);
4002 PL_copline = forline;
4003 return newSTATEOP(0, label, wop);
4007 Perl_newLOOPEX(pTHX_ I32 type, OP *label)
4011 if (type != OP_GOTO || label->op_type == OP_CONST) {
4012 /* "last()" means "last" */
4013 if (label->op_type == OP_STUB && (label->op_flags & OPf_PARENS))
4014 o = newOP(type, OPf_SPECIAL);
4016 o = newPVOP(type, 0, savepv(label->op_type == OP_CONST
4017 ? SvPVx_nolen_const(((SVOP*)label)->op_sv)
4023 /* Check whether it's going to be a goto &function */
4024 if (label->op_type == OP_ENTERSUB
4025 && !(label->op_flags & OPf_STACKED))
4026 label = newUNOP(OP_REFGEN, 0, mod(label, OP_REFGEN));
4027 o = newUNOP(type, OPf_STACKED, label);
4029 PL_hints |= HINT_BLOCK_SCOPE;
4034 =for apidoc cv_undef
4036 Clear out all the active components of a CV. This can happen either
4037 by an explicit C<undef &foo>, or by the reference count going to zero.
4038 In the former case, we keep the CvOUTSIDE pointer, so that any anonymous
4039 children can still follow the full lexical scope chain.
4045 Perl_cv_undef(pTHX_ CV *cv)
4049 if (CvFILE(cv) && !CvXSUB(cv)) {
4050 /* for XSUBs CvFILE point directly to static memory; __FILE__ */
4051 Safefree(CvFILE(cv));
4056 if (!CvXSUB(cv) && CvROOT(cv)) {
4058 Perl_croak(aTHX_ "Can't undef active subroutine");
4061 PAD_SAVE_SETNULLPAD();
4063 op_free(CvROOT(cv));
4064 CvROOT(cv) = Nullop;
4065 CvSTART(cv) = Nullop;
4068 SvPOK_off((SV*)cv); /* forget prototype */
4073 /* remove CvOUTSIDE unless this is an undef rather than a free */
4074 if (!SvREFCNT(cv) && CvOUTSIDE(cv)) {
4075 if (!CvWEAKOUTSIDE(cv))
4076 SvREFCNT_dec(CvOUTSIDE(cv));
4077 CvOUTSIDE(cv) = Nullcv;
4080 SvREFCNT_dec((SV*)CvXSUBANY(cv).any_ptr);
4086 /* delete all flags except WEAKOUTSIDE */
4087 CvFLAGS(cv) &= CVf_WEAKOUTSIDE;
4091 Perl_cv_ckproto(pTHX_ const CV *cv, const GV *gv, const char *p)
4093 if (((!p != !SvPOK(cv)) || (p && strNE(p, SvPVX_const(cv)))) && ckWARN_d(WARN_PROTOTYPE)) {
4094 SV* const msg = sv_newmortal();
4098 gv_efullname3(name = sv_newmortal(), gv, Nullch);
4099 sv_setpv(msg, "Prototype mismatch:");
4101 Perl_sv_catpvf(aTHX_ msg, " sub %"SVf, name);
4103 Perl_sv_catpvf(aTHX_ msg, " (%"SVf")", (const SV *)cv);
4105 Perl_sv_catpv(aTHX_ msg, ": none");
4106 sv_catpv(msg, " vs ");
4108 Perl_sv_catpvf(aTHX_ msg, "(%s)", p);
4110 sv_catpv(msg, "none");
4111 Perl_warner(aTHX_ packWARN(WARN_PROTOTYPE), "%"SVf, msg);
4115 static void const_sv_xsub(pTHX_ CV* cv);
4119 =head1 Optree Manipulation Functions
4121 =for apidoc cv_const_sv
4123 If C<cv> is a constant sub eligible for inlining. returns the constant
4124 value returned by the sub. Otherwise, returns NULL.
4126 Constant subs can be created with C<newCONSTSUB> or as described in
4127 L<perlsub/"Constant Functions">.
4132 Perl_cv_const_sv(pTHX_ CV *cv)
4134 if (!cv || !CvCONST(cv))
4136 return (SV*)CvXSUBANY(cv).any_ptr;
4139 /* op_const_sv: examine an optree to determine whether it's in-lineable.
4140 * Can be called in 3 ways:
4143 * look for a single OP_CONST with attached value: return the value
4145 * cv && CvCLONE(cv) && !CvCONST(cv)
4147 * examine the clone prototype, and if contains only a single
4148 * OP_CONST referencing a pad const, or a single PADSV referencing
4149 * an outer lexical, return a non-zero value to indicate the CV is
4150 * a candidate for "constizing" at clone time
4154 * We have just cloned an anon prototype that was marked as a const
4155 * candidiate. Try to grab the current value, and in the case of
4156 * PADSV, ignore it if it has multiple references. Return the value.
4160 Perl_op_const_sv(pTHX_ const OP *o, CV *cv)
4167 if (o->op_type == OP_LINESEQ && cLISTOPo->op_first)
4168 o = cLISTOPo->op_first->op_sibling;
4170 for (; o; o = o->op_next) {
4171 const OPCODE type = o->op_type;
4173 if (sv && o->op_next == o)
4175 if (o->op_next != o) {
4176 if (type == OP_NEXTSTATE || type == OP_NULL || type == OP_PUSHMARK)
4178 if (type == OP_DBSTATE)
4181 if (type == OP_LEAVESUB || type == OP_RETURN)
4185 if (type == OP_CONST && cSVOPo->op_sv)
4187 else if (cv && type == OP_CONST) {
4188 sv = PAD_BASE_SV(CvPADLIST(cv), o->op_targ);
4192 else if (cv && type == OP_PADSV) {
4193 if (CvCONST(cv)) { /* newly cloned anon */
4194 sv = PAD_BASE_SV(CvPADLIST(cv), o->op_targ);
4195 /* the candidate should have 1 ref from this pad and 1 ref
4196 * from the parent */
4197 if (!sv || SvREFCNT(sv) != 2)
4204 if (PAD_COMPNAME_FLAGS(o->op_targ) & SVf_FAKE)
4205 sv = &PL_sv_undef; /* an arbitrary non-null value */
4216 Perl_newMYSUB(pTHX_ I32 floor, OP *o, OP *proto, OP *attrs, OP *block)
4218 PERL_UNUSED_ARG(floor);
4228 Perl_croak(aTHX_ "\"my sub\" not yet implemented");
4232 Perl_newSUB(pTHX_ I32 floor, OP *o, OP *proto, OP *block)
4234 return Perl_newATTRSUB(aTHX_ floor, o, proto, Nullop, block);
4238 Perl_newATTRSUB(pTHX_ I32 floor, OP *o, OP *proto, OP *attrs, OP *block)
4249 const char * const name = o ? SvPVx_nolen_const(cSVOPo->op_sv) : Nullch;
4252 assert(proto->op_type == OP_CONST);
4253 ps = SvPVx_const(((SVOP*)proto)->op_sv, ps_len);
4258 if (!name && PERLDB_NAMEANON && CopLINE(PL_curcop)) {
4259 SV * const sv = sv_newmortal();
4260 Perl_sv_setpvf(aTHX_ sv, "%s[%s:%"IVdf"]",
4261 PL_curstash ? "__ANON__" : "__ANON__::__ANON__",
4262 CopFILE(PL_curcop), (IV)CopLINE(PL_curcop));
4263 aname = SvPVX_const(sv);
4268 gv_fetch_flags = (block || attrs || (CvFLAGS(PL_compcv) & CVf_BUILTIN_ATTRS))
4269 ? GV_ADDMULTI : GV_ADDMULTI | GV_NOINIT;
4270 gv = name ? gv_fetchsv(cSVOPo->op_sv, gv_fetch_flags, SVt_PVCV)
4271 : gv_fetchpv(aname ? aname
4272 : (PL_curstash ? "__ANON__" : "__ANON__::__ANON__"),
4273 gv_fetch_flags, SVt_PVCV);
4282 if (SvTYPE(gv) != SVt_PVGV) { /* Maybe prototype now, and had at
4283 maximum a prototype before. */
4284 if (SvTYPE(gv) > SVt_NULL) {
4285 if (!SvPOK((SV*)gv) && !(SvIOK((SV*)gv) && SvIVX((SV*)gv) == -1)
4286 && ckWARN_d(WARN_PROTOTYPE))
4288 Perl_warner(aTHX_ packWARN(WARN_PROTOTYPE), "Runaway prototype");
4290 cv_ckproto((CV*)gv, NULL, ps);
4293 sv_setpvn((SV*)gv, ps, ps_len);
4295 sv_setiv((SV*)gv, -1);
4296 SvREFCNT_dec(PL_compcv);
4297 cv = PL_compcv = NULL;
4298 PL_sub_generation++;
4302 cv = (!name || GvCVGEN(gv)) ? Nullcv : GvCV(gv);
4304 #ifdef GV_UNIQUE_CHECK
4305 if (cv && GvUNIQUE(gv) && SvREADONLY(cv)) {
4306 Perl_croak(aTHX_ "Can't define subroutine %s (GV is unique)", name);
4310 if (!block || !ps || *ps || attrs || (CvFLAGS(PL_compcv) & CVf_BUILTIN_ATTRS))
4313 const_sv = op_const_sv(block, Nullcv);
4316 const bool exists = CvROOT(cv) || CvXSUB(cv);
4318 #ifdef GV_UNIQUE_CHECK
4319 if (exists && GvUNIQUE(gv)) {
4320 Perl_croak(aTHX_ "Can't redefine unique subroutine %s", name);
4324 /* if the subroutine doesn't exist and wasn't pre-declared
4325 * with a prototype, assume it will be AUTOLOADed,
4326 * skipping the prototype check
4328 if (exists || SvPOK(cv))
4329 cv_ckproto(cv, gv, ps);
4330 /* already defined (or promised)? */
4331 if (exists || GvASSUMECV(gv)) {
4332 if (!block && !attrs) {
4333 if (CvFLAGS(PL_compcv)) {
4334 /* might have had built-in attrs applied */
4335 CvFLAGS(cv) |= (CvFLAGS(PL_compcv) & CVf_BUILTIN_ATTRS);
4337 /* just a "sub foo;" when &foo is already defined */
4338 SAVEFREESV(PL_compcv);
4341 /* ahem, death to those who redefine active sort subs */
4342 if (PL_curstackinfo->si_type == PERLSI_SORT && PL_sortcop == CvSTART(cv))
4343 Perl_croak(aTHX_ "Can't redefine active sort subroutine %s", name);
4345 if (ckWARN(WARN_REDEFINE)
4347 && (!const_sv || sv_cmp(cv_const_sv(cv), const_sv))))
4349 const line_t oldline = CopLINE(PL_curcop);
4350 if (PL_copline != NOLINE)
4351 CopLINE_set(PL_curcop, PL_copline);
4352 Perl_warner(aTHX_ packWARN(WARN_REDEFINE),
4353 CvCONST(cv) ? "Constant subroutine %s redefined"
4354 : "Subroutine %s redefined", name);
4355 CopLINE_set(PL_curcop, oldline);
4363 (void)SvREFCNT_inc(const_sv);
4365 assert(!CvROOT(cv) && !CvCONST(cv));
4366 sv_setpvn((SV*)cv, "", 0); /* prototype is "" */
4367 CvXSUBANY(cv).any_ptr = const_sv;
4368 CvXSUB(cv) = const_sv_xsub;
4373 cv = newCONSTSUB(NULL, name, const_sv);
4376 SvREFCNT_dec(PL_compcv);
4378 PL_sub_generation++;
4385 /* Need to do a C<use attributes $stash_of_cv,\&cv,@attrs>
4386 * before we clobber PL_compcv.
4390 /* Might have had built-in attributes applied -- propagate them. */
4391 CvFLAGS(cv) |= (CvFLAGS(PL_compcv) & CVf_BUILTIN_ATTRS);
4392 if (CvGV(cv) && GvSTASH(CvGV(cv)))
4393 stash = GvSTASH(CvGV(cv));
4394 else if (CvSTASH(cv))
4395 stash = CvSTASH(cv);
4397 stash = PL_curstash;
4400 /* possibly about to re-define existing subr -- ignore old cv */
4401 rcv = (SV*)PL_compcv;
4402 if (name && GvSTASH(gv))
4403 stash = GvSTASH(gv);
4405 stash = PL_curstash;
4407 apply_attrs(stash, rcv, attrs, FALSE);
4409 if (cv) { /* must reuse cv if autoloaded */
4411 /* got here with just attrs -- work done, so bug out */
4412 SAVEFREESV(PL_compcv);
4415 /* transfer PL_compcv to cv */
4417 CvFLAGS(cv) = CvFLAGS(PL_compcv);
4418 if (!CvWEAKOUTSIDE(cv))
4419 SvREFCNT_dec(CvOUTSIDE(cv));
4420 CvOUTSIDE(cv) = CvOUTSIDE(PL_compcv);
4421 CvOUTSIDE_SEQ(cv) = CvOUTSIDE_SEQ(PL_compcv);
4422 CvOUTSIDE(PL_compcv) = 0;
4423 CvPADLIST(cv) = CvPADLIST(PL_compcv);
4424 CvPADLIST(PL_compcv) = 0;
4425 /* inner references to PL_compcv must be fixed up ... */
4426 pad_fixup_inner_anons(CvPADLIST(cv), PL_compcv, cv);
4427 /* ... before we throw it away */
4428 SvREFCNT_dec(PL_compcv);
4430 if (PERLDB_INTER)/* Advice debugger on the new sub. */
4431 ++PL_sub_generation;
4438 PL_sub_generation++;
4442 CvFILE_set_from_cop(cv, PL_curcop);
4443 CvSTASH(cv) = PL_curstash;
4446 sv_setpvn((SV*)cv, ps, ps_len);
4448 if (PL_error_count) {
4452 const char *s = strrchr(name, ':');
4454 if (strEQ(s, "BEGIN")) {
4455 const char not_safe[] =
4456 "BEGIN not safe after errors--compilation aborted";
4457 if (PL_in_eval & EVAL_KEEPERR)
4458 Perl_croak(aTHX_ not_safe);
4460 /* force display of errors found but not reported */
4461 sv_catpv(ERRSV, not_safe);
4462 Perl_croak(aTHX_ "%"SVf, ERRSV);
4471 CvROOT(cv) = newUNOP(OP_LEAVESUBLV, 0,
4472 mod(scalarseq(block), OP_LEAVESUBLV));
4475 /* This makes sub {}; work as expected. */
4476 if (block->op_type == OP_STUB) {
4478 block = newSTATEOP(0, Nullch, 0);
4480 CvROOT(cv) = newUNOP(OP_LEAVESUB, 0, scalarseq(block));
4482 CvROOT(cv)->op_private |= OPpREFCOUNTED;
4483 OpREFCNT_set(CvROOT(cv), 1);
4484 CvSTART(cv) = LINKLIST(CvROOT(cv));
4485 CvROOT(cv)->op_next = 0;
4486 CALL_PEEP(CvSTART(cv));
4488 /* now that optimizer has done its work, adjust pad values */
4490 pad_tidy(CvCLONE(cv) ? padtidy_SUBCLONE : padtidy_SUB);
4493 assert(!CvCONST(cv));
4494 if (ps && !*ps && op_const_sv(block, cv))
4498 if (name || aname) {
4500 const char *tname = (name ? name : aname);
4502 if (PERLDB_SUBLINE && PL_curstash != PL_debstash) {
4503 SV *sv = NEWSV(0,0);
4504 SV *tmpstr = sv_newmortal();
4505 GV *db_postponed = gv_fetchpv("DB::postponed", GV_ADDMULTI, SVt_PVHV);
4509 Perl_sv_setpvf(aTHX_ sv, "%s:%ld-%ld",
4511 (long)PL_subline, (long)CopLINE(PL_curcop));
4512 gv_efullname3(tmpstr, gv, Nullch);
4513 hv_store(GvHV(PL_DBsub), SvPVX_const(tmpstr), SvCUR(tmpstr), sv, 0);
4514 hv = GvHVn(db_postponed);
4515 if (HvFILL(hv) > 0 && hv_exists(hv, SvPVX_const(tmpstr), SvCUR(tmpstr))
4516 && (pcv = GvCV(db_postponed)))
4522 call_sv((SV*)pcv, G_DISCARD);
4526 if ((s = strrchr(tname,':')))
4531 if (*s != 'B' && *s != 'E' && *s != 'C' && *s != 'I')
4534 if (strEQ(s, "BEGIN") && !PL_error_count) {
4535 const I32 oldscope = PL_scopestack_ix;
4537 SAVECOPFILE(&PL_compiling);
4538 SAVECOPLINE(&PL_compiling);
4541 PL_beginav = newAV();
4542 DEBUG_x( dump_sub(gv) );
4543 av_push(PL_beginav, (SV*)cv);
4544 GvCV(gv) = 0; /* cv has been hijacked */
4545 call_list(oldscope, PL_beginav);
4547 PL_curcop = &PL_compiling;
4548 PL_compiling.op_private = (U8)(PL_hints & HINT_PRIVATE_MASK);
4551 else if (strEQ(s, "END") && !PL_error_count) {
4554 DEBUG_x( dump_sub(gv) );
4555 av_unshift(PL_endav, 1);
4556 av_store(PL_endav, 0, (SV*)cv);
4557 GvCV(gv) = 0; /* cv has been hijacked */
4559 else if (strEQ(s, "CHECK") && !PL_error_count) {
4561 PL_checkav = newAV();
4562 DEBUG_x( dump_sub(gv) );
4563 if (PL_main_start && ckWARN(WARN_VOID))
4564 Perl_warner(aTHX_ packWARN(WARN_VOID), "Too late to run CHECK block");
4565 av_unshift(PL_checkav, 1);
4566 av_store(PL_checkav, 0, (SV*)cv);
4567 GvCV(gv) = 0; /* cv has been hijacked */
4569 else if (strEQ(s, "INIT") && !PL_error_count) {
4571 PL_initav = newAV();
4572 DEBUG_x( dump_sub(gv) );
4573 if (PL_main_start && ckWARN(WARN_VOID))
4574 Perl_warner(aTHX_ packWARN(WARN_VOID), "Too late to run INIT block");
4575 av_push(PL_initav, (SV*)cv);
4576 GvCV(gv) = 0; /* cv has been hijacked */
4581 PL_copline = NOLINE;
4586 /* XXX unsafe for threads if eval_owner isn't held */
4588 =for apidoc newCONSTSUB
4590 Creates a constant sub equivalent to Perl C<sub FOO () { 123 }> which is
4591 eligible for inlining at compile-time.
4597 Perl_newCONSTSUB(pTHX_ HV *stash, const char *name, SV *sv)
4604 SAVECOPLINE(PL_curcop);
4605 CopLINE_set(PL_curcop, PL_copline);
4608 PL_hints &= ~HINT_BLOCK_SCOPE;
4611 SAVESPTR(PL_curstash);
4612 SAVECOPSTASH(PL_curcop);
4613 PL_curstash = stash;
4614 CopSTASH_set(PL_curcop,stash);
4617 cv = newXS(name, const_sv_xsub, savepv(CopFILE(PL_curcop)));
4618 CvXSUBANY(cv).any_ptr = sv;
4620 sv_setpvn((SV*)cv, "", 0); /* prototype is "" */
4623 CopSTASH_free(PL_curcop);
4631 =for apidoc U||newXS
4633 Used by C<xsubpp> to hook up XSUBs as Perl subs.
4639 Perl_newXS(pTHX_ const char *name, XSUBADDR_t subaddr, const char *filename)
4641 GV * const gv = gv_fetchpv(name ? name :
4642 (PL_curstash ? "__ANON__" : "__ANON__::__ANON__"),
4643 GV_ADDMULTI, SVt_PVCV);
4647 Perl_croak(aTHX_ "panic: no address for '%s' in '%s'", name, filename);
4649 if ((cv = (name ? GvCV(gv) : Nullcv))) {
4651 /* just a cached method */
4655 else if (CvROOT(cv) || CvXSUB(cv) || GvASSUMECV(gv)) {
4656 /* already defined (or promised) */
4657 /* XXX It's possible for this HvNAME_get to return null, and get passed into strEQ */
4658 if (ckWARN(WARN_REDEFINE)) {
4659 GV * const gvcv = CvGV(cv);
4661 HV * const stash = GvSTASH(gvcv);
4663 const char *name = HvNAME_get(stash);
4664 if ( strEQ(name,"autouse") ) {
4665 const line_t oldline = CopLINE(PL_curcop);
4666 if (PL_copline != NOLINE)
4667 CopLINE_set(PL_curcop, PL_copline);
4668 Perl_warner(aTHX_ packWARN(WARN_REDEFINE),
4669 CvCONST(cv) ? "Constant subroutine %s redefined"
4670 : "Subroutine %s redefined"
4672 CopLINE_set(PL_curcop, oldline);
4682 if (cv) /* must reuse cv if autoloaded */
4685 cv = (CV*)NEWSV(1105,0);
4686 sv_upgrade((SV *)cv, SVt_PVCV);
4690 PL_sub_generation++;
4694 (void)gv_fetchfile(filename);
4695 CvFILE(cv) = (char *)filename; /* NOTE: not copied, as it is expected to be
4696 an external constant string */
4697 CvXSUB(cv) = subaddr;
4700 const char *s = strrchr(name,':');
4706 if (*s != 'B' && *s != 'E' && *s != 'C' && *s != 'I')
4709 if (strEQ(s, "BEGIN")) {
4711 PL_beginav = newAV();
4712 av_push(PL_beginav, (SV*)cv);
4713 GvCV(gv) = 0; /* cv has been hijacked */
4715 else if (strEQ(s, "END")) {
4718 av_unshift(PL_endav, 1);
4719 av_store(PL_endav, 0, (SV*)cv);
4720 GvCV(gv) = 0; /* cv has been hijacked */
4722 else if (strEQ(s, "CHECK")) {
4724 PL_checkav = newAV();
4725 if (PL_main_start && ckWARN(WARN_VOID))
4726 Perl_warner(aTHX_ packWARN(WARN_VOID), "Too late to run CHECK block");
4727 av_unshift(PL_checkav, 1);
4728 av_store(PL_checkav, 0, (SV*)cv);
4729 GvCV(gv) = 0; /* cv has been hijacked */
4731 else if (strEQ(s, "INIT")) {
4733 PL_initav = newAV();
4734 if (PL_main_start && ckWARN(WARN_VOID))
4735 Perl_warner(aTHX_ packWARN(WARN_VOID), "Too late to run INIT block");
4736 av_push(PL_initav, (SV*)cv);
4737 GvCV(gv) = 0; /* cv has been hijacked */
4748 Perl_newFORM(pTHX_ I32 floor, OP *o, OP *block)
4754 gv = gv_fetchsv(cSVOPo->op_sv, TRUE, SVt_PVFM);
4756 gv = gv_fetchpv("STDOUT", TRUE, SVt_PVFM);
4758 #ifdef GV_UNIQUE_CHECK
4760 Perl_croak(aTHX_ "Bad symbol for form (GV is unique)");
4764 if ((cv = GvFORM(gv))) {
4765 if (ckWARN(WARN_REDEFINE)) {
4766 const line_t oldline = CopLINE(PL_curcop);
4767 if (PL_copline != NOLINE)
4768 CopLINE_set(PL_curcop, PL_copline);
4769 Perl_warner(aTHX_ packWARN(WARN_REDEFINE),
4770 o ? "Format %"SVf" redefined"
4771 : "Format STDOUT redefined" ,cSVOPo->op_sv);
4772 CopLINE_set(PL_curcop, oldline);
4779 CvFILE_set_from_cop(cv, PL_curcop);
4782 pad_tidy(padtidy_FORMAT);
4783 CvROOT(cv) = newUNOP(OP_LEAVEWRITE, 0, scalarseq(block));
4784 CvROOT(cv)->op_private |= OPpREFCOUNTED;
4785 OpREFCNT_set(CvROOT(cv), 1);
4786 CvSTART(cv) = LINKLIST(CvROOT(cv));
4787 CvROOT(cv)->op_next = 0;
4788 CALL_PEEP(CvSTART(cv));
4790 PL_copline = NOLINE;
4795 Perl_newANONLIST(pTHX_ OP *o)
4797 return newUNOP(OP_REFGEN, 0,
4798 mod(list(convert(OP_ANONLIST, 0, o)), OP_REFGEN));
4802 Perl_newANONHASH(pTHX_ OP *o)
4804 return newUNOP(OP_REFGEN, 0,
4805 mod(list(convert(OP_ANONHASH, 0, o)), OP_REFGEN));
4809 Perl_newANONSUB(pTHX_ I32 floor, OP *proto, OP *block)
4811 return newANONATTRSUB(floor, proto, Nullop, block);
4815 Perl_newANONATTRSUB(pTHX_ I32 floor, OP *proto, OP *attrs, OP *block)
4817 return newUNOP(OP_REFGEN, 0,
4818 newSVOP(OP_ANONCODE, 0,
4819 (SV*)newATTRSUB(floor, 0, proto, attrs, block)));
4823 Perl_oopsAV(pTHX_ OP *o)
4826 switch (o->op_type) {
4828 o->op_type = OP_PADAV;
4829 o->op_ppaddr = PL_ppaddr[OP_PADAV];
4830 return ref(o, OP_RV2AV);
4833 o->op_type = OP_RV2AV;
4834 o->op_ppaddr = PL_ppaddr[OP_RV2AV];
4839 if (ckWARN_d(WARN_INTERNAL))
4840 Perl_warner(aTHX_ packWARN(WARN_INTERNAL), "oops: oopsAV");
4847 Perl_oopsHV(pTHX_ OP *o)
4850 switch (o->op_type) {
4853 o->op_type = OP_PADHV;
4854 o->op_ppaddr = PL_ppaddr[OP_PADHV];
4855 return ref(o, OP_RV2HV);
4859 o->op_type = OP_RV2HV;
4860 o->op_ppaddr = PL_ppaddr[OP_RV2HV];
4865 if (ckWARN_d(WARN_INTERNAL))
4866 Perl_warner(aTHX_ packWARN(WARN_INTERNAL), "oops: oopsHV");
4873 Perl_newAVREF(pTHX_ OP *o)
4876 if (o->op_type == OP_PADANY) {
4877 o->op_type = OP_PADAV;
4878 o->op_ppaddr = PL_ppaddr[OP_PADAV];
4881 else if ((o->op_type == OP_RV2AV || o->op_type == OP_PADAV)
4882 && ckWARN(WARN_DEPRECATED)) {
4883 Perl_warner(aTHX_ packWARN(WARN_DEPRECATED),
4884 "Using an array as a reference is deprecated");
4886 return newUNOP(OP_RV2AV, 0, scalar(o));
4890 Perl_newGVREF(pTHX_ I32 type, OP *o)
4892 if (type == OP_MAPSTART || type == OP_GREPSTART || type == OP_SORT)
4893 return newUNOP(OP_NULL, 0, o);
4894 return ref(newUNOP(OP_RV2GV, OPf_REF, o), type);
4898 Perl_newHVREF(pTHX_ OP *o)
4901 if (o->op_type == OP_PADANY) {
4902 o->op_type = OP_PADHV;
4903 o->op_ppaddr = PL_ppaddr[OP_PADHV];
4906 else if ((o->op_type == OP_RV2HV || o->op_type == OP_PADHV)
4907 && ckWARN(WARN_DEPRECATED)) {
4908 Perl_warner(aTHX_ packWARN(WARN_DEPRECATED),
4909 "Using a hash as a reference is deprecated");
4911 return newUNOP(OP_RV2HV, 0, scalar(o));
4915 Perl_oopsCV(pTHX_ OP *o)
4917 Perl_croak(aTHX_ "NOT IMPL LINE %d",__LINE__);
4920 NORETURN_FUNCTION_END;
4924 Perl_newCVREF(pTHX_ I32 flags, OP *o)
4926 return newUNOP(OP_RV2CV, flags, scalar(o));
4930 Perl_newSVREF(pTHX_ OP *o)
4933 if (o->op_type == OP_PADANY) {
4934 o->op_type = OP_PADSV;
4935 o->op_ppaddr = PL_ppaddr[OP_PADSV];
4938 else if (o->op_type == OP_THREADSV && !(o->op_flags & OPpDONE_SVREF)) {
4939 o->op_flags |= OPpDONE_SVREF;
4942 return newUNOP(OP_RV2SV, 0, scalar(o));
4945 /* Check routines. See the comments at the top of this file for details
4946 * on when these are called */
4949 Perl_ck_anoncode(pTHX_ OP *o)
4951 cSVOPo->op_targ = pad_add_anon(cSVOPo->op_sv, o->op_type);
4952 cSVOPo->op_sv = Nullsv;
4957 Perl_ck_bitop(pTHX_ OP *o)
4959 #define OP_IS_NUMCOMPARE(op) \
4960 ((op) == OP_LT || (op) == OP_I_LT || \
4961 (op) == OP_GT || (op) == OP_I_GT || \
4962 (op) == OP_LE || (op) == OP_I_LE || \
4963 (op) == OP_GE || (op) == OP_I_GE || \
4964 (op) == OP_EQ || (op) == OP_I_EQ || \
4965 (op) == OP_NE || (op) == OP_I_NE || \
4966 (op) == OP_NCMP || (op) == OP_I_NCMP)
4967 o->op_private = (U8)(PL_hints & HINT_PRIVATE_MASK);
4968 if (!(o->op_flags & OPf_STACKED) /* Not an assignment */
4969 && (o->op_type == OP_BIT_OR
4970 || o->op_type == OP_BIT_AND
4971 || o->op_type == OP_BIT_XOR))
4973 const OP * const left = cBINOPo->op_first;
4974 const OP * const right = left->op_sibling;
4975 if ((OP_IS_NUMCOMPARE(left->op_type) &&
4976 (left->op_flags & OPf_PARENS) == 0) ||
4977 (OP_IS_NUMCOMPARE(right->op_type) &&
4978 (right->op_flags & OPf_PARENS) == 0))
4979 if (ckWARN(WARN_PRECEDENCE))
4980 Perl_warner(aTHX_ packWARN(WARN_PRECEDENCE),
4981 "Possible precedence problem on bitwise %c operator",
4982 o->op_type == OP_BIT_OR ? '|'
4983 : o->op_type == OP_BIT_AND ? '&' : '^'
4990 Perl_ck_concat(pTHX_ OP *o)
4992 const OP *kid = cUNOPo->op_first;
4993 if (kid->op_type == OP_CONCAT && !(kid->op_private & OPpTARGET_MY) &&
4994 !(kUNOP->op_first->op_flags & OPf_MOD))
4995 o->op_flags |= OPf_STACKED;
5000 Perl_ck_spair(pTHX_ OP *o)
5003 if (o->op_flags & OPf_KIDS) {
5006 const OPCODE type = o->op_type;
5007 o = modkids(ck_fun(o), type);
5008 kid = cUNOPo->op_first;
5009 newop = kUNOP->op_first->op_sibling;
5011 (newop->op_sibling ||
5012 !(PL_opargs[newop->op_type] & OA_RETSCALAR) ||
5013 newop->op_type == OP_PADAV || newop->op_type == OP_PADHV ||
5014 newop->op_type == OP_RV2AV || newop->op_type == OP_RV2HV)) {
5018 op_free(kUNOP->op_first);
5019 kUNOP->op_first = newop;
5021 o->op_ppaddr = PL_ppaddr[++o->op_type];
5026 Perl_ck_delete(pTHX_ OP *o)
5030 if (o->op_flags & OPf_KIDS) {
5031 OP *kid = cUNOPo->op_first;
5032 switch (kid->op_type) {
5034 o->op_flags |= OPf_SPECIAL;
5037 o->op_private |= OPpSLICE;
5040 o->op_flags |= OPf_SPECIAL;
5045 Perl_croak(aTHX_ "%s argument is not a HASH or ARRAY element or slice",
5054 Perl_ck_die(pTHX_ OP *o)
5057 if (VMSISH_HUSHED) o->op_private |= OPpHUSH_VMSISH;
5063 Perl_ck_eof(pTHX_ OP *o)
5065 const I32 type = o->op_type;
5067 if (o->op_flags & OPf_KIDS) {
5068 if (cLISTOPo->op_first->op_type == OP_STUB) {
5070 o = newUNOP(type, OPf_SPECIAL, newGVOP(OP_GV, 0, PL_argvgv));
5078 Perl_ck_eval(pTHX_ OP *o)
5081 PL_hints |= HINT_BLOCK_SCOPE;
5082 if (o->op_flags & OPf_KIDS) {
5083 SVOP * const kid = (SVOP*)cUNOPo->op_first;
5086 o->op_flags &= ~OPf_KIDS;
5089 else if (kid->op_type == OP_LINESEQ || kid->op_type == OP_STUB) {
5092 cUNOPo->op_first = 0;
5095 NewOp(1101, enter, 1, LOGOP);
5096 enter->op_type = OP_ENTERTRY;
5097 enter->op_ppaddr = PL_ppaddr[OP_ENTERTRY];
5098 enter->op_private = 0;
5100 /* establish postfix order */
5101 enter->op_next = (OP*)enter;
5103 o = prepend_elem(OP_LINESEQ, (OP*)enter, (OP*)kid);
5104 o->op_type = OP_LEAVETRY;
5105 o->op_ppaddr = PL_ppaddr[OP_LEAVETRY];
5106 enter->op_other = o;
5116 o = newUNOP(OP_ENTEREVAL, 0, newDEFSVOP());
5118 o->op_targ = (PADOFFSET)PL_hints;
5123 Perl_ck_exit(pTHX_ OP *o)
5126 HV *table = GvHV(PL_hintgv);
5128 SV **svp = hv_fetch(table, "vmsish_exit", 11, FALSE);
5129 if (svp && *svp && SvTRUE(*svp))
5130 o->op_private |= OPpEXIT_VMSISH;
5132 if (VMSISH_HUSHED) o->op_private |= OPpHUSH_VMSISH;
5138 Perl_ck_exec(pTHX_ OP *o)
5140 if (o->op_flags & OPf_STACKED) {
5143 kid = cUNOPo->op_first->op_sibling;
5144 if (kid->op_type == OP_RV2GV)
5153 Perl_ck_exists(pTHX_ OP *o)
5156 if (o->op_flags & OPf_KIDS) {
5157 OP * const kid = cUNOPo->op_first;
5158 if (kid->op_type == OP_ENTERSUB) {
5159 (void) ref(kid, o->op_type);
5160 if (kid->op_type != OP_RV2CV && !PL_error_count)
5161 Perl_croak(aTHX_ "%s argument is not a subroutine name",
5163 o->op_private |= OPpEXISTS_SUB;
5165 else if (kid->op_type == OP_AELEM)
5166 o->op_flags |= OPf_SPECIAL;
5167 else if (kid->op_type != OP_HELEM)
5168 Perl_croak(aTHX_ "%s argument is not a HASH or ARRAY element",
5176 Perl_ck_rvconst(pTHX_ register OP *o)
5179 SVOP *kid = (SVOP*)cUNOPo->op_first;
5181 o->op_private |= (PL_hints & HINT_STRICT_REFS);
5182 if (kid->op_type == OP_CONST) {
5185 SV * const kidsv = kid->op_sv;
5187 /* Is it a constant from cv_const_sv()? */
5188 if (SvROK(kidsv) && SvREADONLY(kidsv)) {
5189 SV *rsv = SvRV(kidsv);
5190 const int svtype = SvTYPE(rsv);
5191 const char *badtype = Nullch;
5193 switch (o->op_type) {
5195 if (svtype > SVt_PVMG)
5196 badtype = "a SCALAR";
5199 if (svtype != SVt_PVAV)
5200 badtype = "an ARRAY";
5203 if (svtype != SVt_PVHV)
5207 if (svtype != SVt_PVCV)
5212 Perl_croak(aTHX_ "Constant is not %s reference", badtype);
5215 if ((PL_hints & HINT_STRICT_REFS) && (kid->op_private & OPpCONST_BARE)) {
5216 const char *badthing = Nullch;
5217 switch (o->op_type) {
5219 badthing = "a SCALAR";
5222 badthing = "an ARRAY";
5225 badthing = "a HASH";
5230 "Can't use bareword (\"%"SVf"\") as %s ref while \"strict refs\" in use",
5234 * This is a little tricky. We only want to add the symbol if we
5235 * didn't add it in the lexer. Otherwise we get duplicate strict
5236 * warnings. But if we didn't add it in the lexer, we must at
5237 * least pretend like we wanted to add it even if it existed before,
5238 * or we get possible typo warnings. OPpCONST_ENTERED says
5239 * whether the lexer already added THIS instance of this symbol.
5241 iscv = (o->op_type == OP_RV2CV) * 2;
5243 gv = gv_fetchsv(kidsv,
5244 iscv | !(kid->op_private & OPpCONST_ENTERED),
5247 : o->op_type == OP_RV2SV
5249 : o->op_type == OP_RV2AV
5251 : o->op_type == OP_RV2HV
5254 } while (!gv && !(kid->op_private & OPpCONST_ENTERED) && !iscv++);
5256 kid->op_type = OP_GV;
5257 SvREFCNT_dec(kid->op_sv);
5259 /* XXX hack: dependence on sizeof(PADOP) <= sizeof(SVOP) */
5260 kPADOP->op_padix = pad_alloc(OP_GV, SVs_PADTMP);
5261 SvREFCNT_dec(PAD_SVl(kPADOP->op_padix));
5263 PAD_SETSV(kPADOP->op_padix, (SV*) SvREFCNT_inc(gv));
5265 kid->op_sv = SvREFCNT_inc(gv);
5267 kid->op_private = 0;
5268 kid->op_ppaddr = PL_ppaddr[OP_GV];
5275 Perl_ck_ftst(pTHX_ OP *o)
5278 const I32 type = o->op_type;
5280 if (o->op_flags & OPf_REF) {
5283 else if (o->op_flags & OPf_KIDS && cUNOPo->op_first->op_type != OP_STUB) {
5284 SVOP *kid = (SVOP*)cUNOPo->op_first;
5286 if (kid->op_type == OP_CONST && (kid->op_private & OPpCONST_BARE)) {
5287 OP *newop = newGVOP(type, OPf_REF,
5288 gv_fetchsv(kid->op_sv, TRUE, SVt_PVIO));
5294 if ((PL_hints & HINT_FILETEST_ACCESS) &&
5295 OP_IS_FILETEST_ACCESS(o))
5296 o->op_private |= OPpFT_ACCESS;
5298 if (PL_check[kid->op_type] == MEMBER_TO_FPTR(Perl_ck_ftst)
5299 && kid->op_type != OP_STAT && kid->op_type != OP_LSTAT)
5300 o->op_private |= OPpFT_STACKED;
5304 if (type == OP_FTTTY)
5305 o = newGVOP(type, OPf_REF, PL_stdingv);
5307 o = newUNOP(type, 0, newDEFSVOP());
5313 Perl_ck_fun(pTHX_ OP *o)
5315 const int type = o->op_type;
5316 register I32 oa = PL_opargs[type] >> OASHIFT;
5318 if (o->op_flags & OPf_STACKED) {
5319 if ((oa & OA_OPTIONAL) && (oa >> 4) && !((oa >> 4) & OA_OPTIONAL))
5322 return no_fh_allowed(o);
5325 if (o->op_flags & OPf_KIDS) {
5326 OP **tokid = &cLISTOPo->op_first;
5327 register OP *kid = cLISTOPo->op_first;
5331 if (kid->op_type == OP_PUSHMARK ||
5332 (kid->op_type == OP_NULL && kid->op_targ == OP_PUSHMARK))
5334 tokid = &kid->op_sibling;
5335 kid = kid->op_sibling;
5337 if (!kid && PL_opargs[type] & OA_DEFGV)
5338 *tokid = kid = newDEFSVOP();
5342 sibl = kid->op_sibling;
5345 /* list seen where single (scalar) arg expected? */
5346 if (numargs == 1 && !(oa >> 4)
5347 && kid->op_type == OP_LIST && type != OP_SCALAR)
5349 return too_many_arguments(o,PL_op_desc[type]);
5362 if ((type == OP_PUSH || type == OP_UNSHIFT)
5363 && !kid->op_sibling && ckWARN(WARN_SYNTAX))
5364 Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
5365 "Useless use of %s with no values",
5368 if (kid->op_type == OP_CONST &&
5369 (kid->op_private & OPpCONST_BARE))
5371 OP *newop = newAVREF(newGVOP(OP_GV, 0,
5372 gv_fetchsv(((SVOP*)kid)->op_sv, TRUE, SVt_PVAV) ));
5373 if (ckWARN2(WARN_DEPRECATED, WARN_SYNTAX))
5374 Perl_warner(aTHX_ packWARN2(WARN_DEPRECATED, WARN_SYNTAX),
5375 "Array @%"SVf" missing the @ in argument %"IVdf" of %s()",
5376 ((SVOP*)kid)->op_sv, (IV)numargs, PL_op_desc[type]);
5379 kid->op_sibling = sibl;
5382 else if (kid->op_type != OP_RV2AV && kid->op_type != OP_PADAV)
5383 bad_type(numargs, "array", PL_op_desc[type], kid);
5387 if (kid->op_type == OP_CONST &&
5388 (kid->op_private & OPpCONST_BARE))
5390 OP *newop = newHVREF(newGVOP(OP_GV, 0,
5391 gv_fetchsv(((SVOP*)kid)->op_sv, TRUE, SVt_PVHV) ));
5392 if (ckWARN2(WARN_DEPRECATED, WARN_SYNTAX))
5393 Perl_warner(aTHX_ packWARN2(WARN_DEPRECATED, WARN_SYNTAX),
5394 "Hash %%%"SVf" missing the %% in argument %"IVdf" of %s()",
5395 ((SVOP*)kid)->op_sv, (IV)numargs, PL_op_desc[type]);
5398 kid->op_sibling = sibl;
5401 else if (kid->op_type != OP_RV2HV && kid->op_type != OP_PADHV)
5402 bad_type(numargs, "hash", PL_op_desc[type], kid);
5407 OP *newop = newUNOP(OP_NULL, 0, kid);
5408 kid->op_sibling = 0;
5410 newop->op_next = newop;
5412 kid->op_sibling = sibl;
5417 if (kid->op_type != OP_GV && kid->op_type != OP_RV2GV) {
5418 if (kid->op_type == OP_CONST &&
5419 (kid->op_private & OPpCONST_BARE))
5421 OP *newop = newGVOP(OP_GV, 0,
5422 gv_fetchsv(((SVOP*)kid)->op_sv, TRUE, SVt_PVIO) );
5423 if (!(o->op_private & 1) && /* if not unop */
5424 kid == cLISTOPo->op_last)
5425 cLISTOPo->op_last = newop;
5429 else if (kid->op_type == OP_READLINE) {
5430 /* neophyte patrol: open(<FH>), close(<FH>) etc. */
5431 bad_type(numargs, "HANDLE", OP_DESC(o), kid);
5434 I32 flags = OPf_SPECIAL;
5438 /* is this op a FH constructor? */
5439 if (is_handle_constructor(o,numargs)) {
5440 const char *name = Nullch;
5444 /* Set a flag to tell rv2gv to vivify
5445 * need to "prove" flag does not mean something
5446 * else already - NI-S 1999/05/07
5449 if (kid->op_type == OP_PADSV) {
5450 name = PAD_COMPNAME_PV(kid->op_targ);
5451 /* SvCUR of a pad namesv can't be trusted
5452 * (see PL_generation), so calc its length
5458 else if (kid->op_type == OP_RV2SV
5459 && kUNOP->op_first->op_type == OP_GV)
5461 GV *gv = cGVOPx_gv(kUNOP->op_first);
5463 len = GvNAMELEN(gv);
5465 else if (kid->op_type == OP_AELEM
5466 || kid->op_type == OP_HELEM)
5471 if ((op = ((BINOP*)kid)->op_first)) {
5472 SV *tmpstr = Nullsv;
5474 kid->op_type == OP_AELEM ?
5476 if (((op->op_type == OP_RV2AV) ||
5477 (op->op_type == OP_RV2HV)) &&
5478 (op = ((UNOP*)op)->op_first) &&
5479 (op->op_type == OP_GV)) {
5480 /* packagevar $a[] or $h{} */
5481 GV *gv = cGVOPx_gv(op);
5489 else if (op->op_type == OP_PADAV
5490 || op->op_type == OP_PADHV) {
5491 /* lexicalvar $a[] or $h{} */
5492 const char *padname =
5493 PAD_COMPNAME_PV(op->op_targ);
5503 name = SvPV_const(tmpstr, len);
5508 name = "__ANONIO__";
5515 targ = pad_alloc(OP_RV2GV, SVs_PADTMP);
5516 namesv = PAD_SVl(targ);
5517 SvUPGRADE(namesv, SVt_PV);
5519 sv_setpvn(namesv, "$", 1);
5520 sv_catpvn(namesv, name, len);
5523 kid->op_sibling = 0;
5524 kid = newUNOP(OP_RV2GV, flags, scalar(kid));
5525 kid->op_targ = targ;
5526 kid->op_private |= priv;
5528 kid->op_sibling = sibl;
5534 mod(scalar(kid), type);
5538 tokid = &kid->op_sibling;
5539 kid = kid->op_sibling;
5541 o->op_private |= numargs;
5543 return too_many_arguments(o,OP_DESC(o));
5546 else if (PL_opargs[type] & OA_DEFGV) {
5548 return newUNOP(type, 0, newDEFSVOP());
5552 while (oa & OA_OPTIONAL)
5554 if (oa && oa != OA_LIST)
5555 return too_few_arguments(o,OP_DESC(o));
5561 Perl_ck_glob(pTHX_ OP *o)
5567 if ((o->op_flags & OPf_KIDS) && !cLISTOPo->op_first->op_sibling)
5568 append_elem(OP_GLOB, o, newDEFSVOP());
5570 if (!((gv = gv_fetchpv("glob", FALSE, SVt_PVCV))
5571 && GvCVu(gv) && GvIMPORTED_CV(gv)))
5573 gv = gv_fetchpv("CORE::GLOBAL::glob", FALSE, SVt_PVCV);
5576 #if !defined(PERL_EXTERNAL_GLOB)
5577 /* XXX this can be tightened up and made more failsafe. */
5578 if (!(gv && GvCVu(gv) && GvIMPORTED_CV(gv))) {
5581 Perl_load_module(aTHX_ PERL_LOADMOD_NOIMPORT,
5582 newSVpvn("File::Glob", 10), Nullsv, Nullsv, Nullsv);
5583 gv = gv_fetchpv("CORE::GLOBAL::glob", FALSE, SVt_PVCV);
5584 glob_gv = gv_fetchpv("File::Glob::csh_glob", FALSE, SVt_PVCV);
5585 GvCV(gv) = GvCV(glob_gv);
5586 (void)SvREFCNT_inc((SV*)GvCV(gv));
5587 GvIMPORTED_CV_on(gv);
5590 #endif /* PERL_EXTERNAL_GLOB */
5592 if (gv && GvCVu(gv) && GvIMPORTED_CV(gv)) {
5593 append_elem(OP_GLOB, o,
5594 newSVOP(OP_CONST, 0, newSViv(PL_glob_index++)));
5595 o->op_type = OP_LIST;
5596 o->op_ppaddr = PL_ppaddr[OP_LIST];
5597 cLISTOPo->op_first->op_type = OP_PUSHMARK;
5598 cLISTOPo->op_first->op_ppaddr = PL_ppaddr[OP_PUSHMARK];
5599 cLISTOPo->op_first->op_targ = 0;
5600 o = newUNOP(OP_ENTERSUB, OPf_STACKED,
5601 append_elem(OP_LIST, o,
5602 scalar(newUNOP(OP_RV2CV, 0,
5603 newGVOP(OP_GV, 0, gv)))));
5604 o = newUNOP(OP_NULL, 0, ck_subr(o));
5605 o->op_targ = OP_GLOB; /* hint at what it used to be */
5608 gv = newGVgen("main");
5610 append_elem(OP_GLOB, o, newGVOP(OP_GV, 0, gv));
5616 Perl_ck_grep(pTHX_ OP *o)
5621 const OPCODE type = o->op_type == OP_GREPSTART ? OP_GREPWHILE : OP_MAPWHILE;
5624 o->op_ppaddr = PL_ppaddr[OP_GREPSTART];
5625 NewOp(1101, gwop, 1, LOGOP);
5627 if (o->op_flags & OPf_STACKED) {
5630 kid = cLISTOPo->op_first->op_sibling;
5631 if (!cUNOPx(kid)->op_next)
5632 Perl_croak(aTHX_ "panic: ck_grep");
5633 for (k = cUNOPx(kid)->op_first; k; k = k->op_next) {
5636 kid->op_next = (OP*)gwop;
5637 o->op_flags &= ~OPf_STACKED;
5639 kid = cLISTOPo->op_first->op_sibling;
5640 if (type == OP_MAPWHILE)
5647 kid = cLISTOPo->op_first->op_sibling;
5648 if (kid->op_type != OP_NULL)
5649 Perl_croak(aTHX_ "panic: ck_grep");
5650 kid = kUNOP->op_first;
5652 gwop->op_type = type;
5653 gwop->op_ppaddr = PL_ppaddr[type];
5654 gwop->op_first = listkids(o);
5655 gwop->op_flags |= OPf_KIDS;
5656 gwop->op_other = LINKLIST(kid);
5657 kid->op_next = (OP*)gwop;
5658 offset = pad_findmy("$_");
5659 if (offset == NOT_IN_PAD || PAD_COMPNAME_FLAGS(offset) & SVpad_OUR) {
5660 o->op_private = gwop->op_private = 0;
5661 gwop->op_targ = pad_alloc(type, SVs_PADTMP);
5664 o->op_private = gwop->op_private = OPpGREP_LEX;
5665 gwop->op_targ = o->op_targ = offset;
5668 kid = cLISTOPo->op_first->op_sibling;
5669 if (!kid || !kid->op_sibling)
5670 return too_few_arguments(o,OP_DESC(o));
5671 for (kid = kid->op_sibling; kid; kid = kid->op_sibling)
5672 mod(kid, OP_GREPSTART);
5678 Perl_ck_index(pTHX_ OP *o)
5680 if (o->op_flags & OPf_KIDS) {
5681 OP *kid = cLISTOPo->op_first->op_sibling; /* get past pushmark */
5683 kid = kid->op_sibling; /* get past "big" */
5684 if (kid && kid->op_type == OP_CONST)
5685 fbm_compile(((SVOP*)kid)->op_sv, 0);
5691 Perl_ck_lengthconst(pTHX_ OP *o)
5693 /* XXX length optimization goes here */
5698 Perl_ck_lfun(pTHX_ OP *o)
5700 const OPCODE type = o->op_type;
5701 return modkids(ck_fun(o), type);
5705 Perl_ck_defined(pTHX_ OP *o) /* 19990527 MJD */
5707 if ((o->op_flags & OPf_KIDS) && ckWARN2(WARN_DEPRECATED, WARN_SYNTAX)) {
5708 switch (cUNOPo->op_first->op_type) {
5710 /* This is needed for
5711 if (defined %stash::)
5712 to work. Do not break Tk.
5714 break; /* Globals via GV can be undef */
5716 case OP_AASSIGN: /* Is this a good idea? */
5717 Perl_warner(aTHX_ packWARN2(WARN_DEPRECATED, WARN_SYNTAX),
5718 "defined(@array) is deprecated");
5719 Perl_warner(aTHX_ packWARN2(WARN_DEPRECATED, WARN_SYNTAX),
5720 "\t(Maybe you should just omit the defined()?)\n");
5723 /* This is needed for
5724 if (defined %stash::)
5725 to work. Do not break Tk.
5727 break; /* Globals via GV can be undef */
5729 Perl_warner(aTHX_ packWARN2(WARN_DEPRECATED, WARN_SYNTAX),
5730 "defined(%%hash) is deprecated");
5731 Perl_warner(aTHX_ packWARN2(WARN_DEPRECATED, WARN_SYNTAX),
5732 "\t(Maybe you should just omit the defined()?)\n");
5743 Perl_ck_rfun(pTHX_ OP *o)
5745 const OPCODE type = o->op_type;
5746 return refkids(ck_fun(o), type);
5750 Perl_ck_listiob(pTHX_ OP *o)
5754 kid = cLISTOPo->op_first;
5757 kid = cLISTOPo->op_first;
5759 if (kid->op_type == OP_PUSHMARK)
5760 kid = kid->op_sibling;
5761 if (kid && o->op_flags & OPf_STACKED)
5762 kid = kid->op_sibling;
5763 else if (kid && !kid->op_sibling) { /* print HANDLE; */
5764 if (kid->op_type == OP_CONST && kid->op_private & OPpCONST_BARE) {
5765 o->op_flags |= OPf_STACKED; /* make it a filehandle */
5766 kid = newUNOP(OP_RV2GV, OPf_REF, scalar(kid));
5767 cLISTOPo->op_first->op_sibling = kid;
5768 cLISTOPo->op_last = kid;
5769 kid = kid->op_sibling;
5774 append_elem(o->op_type, o, newDEFSVOP());
5780 Perl_ck_sassign(pTHX_ OP *o)
5782 OP *kid = cLISTOPo->op_first;
5783 /* has a disposable target? */
5784 if ((PL_opargs[kid->op_type] & OA_TARGLEX)
5785 && !(kid->op_flags & OPf_STACKED)
5786 /* Cannot steal the second time! */
5787 && !(kid->op_private & OPpTARGET_MY))
5789 OP *kkid = kid->op_sibling;
5791 /* Can just relocate the target. */
5792 if (kkid && kkid->op_type == OP_PADSV
5793 && !(kkid->op_private & OPpLVAL_INTRO))
5795 kid->op_targ = kkid->op_targ;
5797 /* Now we do not need PADSV and SASSIGN. */
5798 kid->op_sibling = o->op_sibling; /* NULL */
5799 cLISTOPo->op_first = NULL;
5802 kid->op_private |= OPpTARGET_MY; /* Used for context settings */
5806 /* optimise C<my $x = undef> to C<my $x> */
5807 if (kid->op_type == OP_UNDEF) {
5808 OP *kkid = kid->op_sibling;
5809 if (kkid && kkid->op_type == OP_PADSV
5810 && (kkid->op_private & OPpLVAL_INTRO))
5812 cLISTOPo->op_first = NULL;
5813 kid->op_sibling = NULL;
5823 Perl_ck_match(pTHX_ OP *o)
5825 if (o->op_type != OP_QR) {
5826 const I32 offset = pad_findmy("$_");
5827 if (offset != NOT_IN_PAD && !(PAD_COMPNAME_FLAGS(offset) & SVpad_OUR)) {
5828 o->op_targ = offset;
5829 o->op_private |= OPpTARGET_MY;
5832 if (o->op_type == OP_MATCH || o->op_type == OP_QR)
5833 o->op_private |= OPpRUNTIME;
5838 Perl_ck_method(pTHX_ OP *o)
5840 OP *kid = cUNOPo->op_first;
5841 if (kid->op_type == OP_CONST) {
5842 SV* sv = kSVOP->op_sv;
5843 if (!(strchr(SvPVX_const(sv), ':') || strchr(SvPVX_const(sv), '\''))) {
5845 if (!SvREADONLY(sv) || !SvFAKE(sv)) {
5846 sv = newSVpvn_share(SvPVX_const(sv), SvCUR(sv), 0);
5849 kSVOP->op_sv = Nullsv;
5851 cmop = newSVOP(OP_METHOD_NAMED, 0, sv);
5860 Perl_ck_null(pTHX_ OP *o)
5866 Perl_ck_open(pTHX_ OP *o)
5868 HV *table = GvHV(PL_hintgv);
5872 svp = hv_fetch(table, "open_IN", 7, FALSE);
5874 mode = mode_from_discipline(*svp);
5875 if (mode & O_BINARY)
5876 o->op_private |= OPpOPEN_IN_RAW;
5877 else if (mode & O_TEXT)
5878 o->op_private |= OPpOPEN_IN_CRLF;
5881 svp = hv_fetch(table, "open_OUT", 8, FALSE);
5883 mode = mode_from_discipline(*svp);
5884 if (mode & O_BINARY)
5885 o->op_private |= OPpOPEN_OUT_RAW;
5886 else if (mode & O_TEXT)
5887 o->op_private |= OPpOPEN_OUT_CRLF;
5890 if (o->op_type == OP_BACKTICK)
5893 /* In case of three-arg dup open remove strictness
5894 * from the last arg if it is a bareword. */
5895 OP *first = cLISTOPx(o)->op_first; /* The pushmark. */
5896 OP *last = cLISTOPx(o)->op_last; /* The bareword. */
5900 if ((last->op_type == OP_CONST) && /* The bareword. */
5901 (last->op_private & OPpCONST_BARE) &&
5902 (last->op_private & OPpCONST_STRICT) &&
5903 (oa = first->op_sibling) && /* The fh. */
5904 (oa = oa->op_sibling) && /* The mode. */
5905 (oa->op_type == OP_CONST) &&
5906 SvPOK(((SVOP*)oa)->op_sv) &&
5907 (mode = SvPVX_const(((SVOP*)oa)->op_sv)) &&
5908 mode[0] == '>' && mode[1] == '&' && /* A dup open. */
5909 (last == oa->op_sibling)) /* The bareword. */
5910 last->op_private &= ~OPpCONST_STRICT;
5916 Perl_ck_repeat(pTHX_ OP *o)
5918 if (cBINOPo->op_first->op_flags & OPf_PARENS) {
5919 o->op_private |= OPpREPEAT_DOLIST;
5920 cBINOPo->op_first = force_list(cBINOPo->op_first);
5928 Perl_ck_require(pTHX_ OP *o)
5932 if (o->op_flags & OPf_KIDS) { /* Shall we supply missing .pm? */
5933 SVOP *kid = (SVOP*)cUNOPo->op_first;
5935 if (kid->op_type == OP_CONST && (kid->op_private & OPpCONST_BARE)) {
5936 SV *sv = kid->op_sv;
5937 U32 was_readonly = SvREADONLY(sv);
5942 sv_force_normal_flags(sv, 0);
5943 assert(!SvREADONLY(sv));
5950 for (s = SvPVX(sv); *s; s++) {
5951 if (*s == ':' && s[1] == ':') {
5953 Move(s+2, s+1, strlen(s+2)+1, char);
5954 SvCUR_set(sv, SvCUR(sv) - 1);
5957 sv_catpvn(sv, ".pm", 3);
5958 SvFLAGS(sv) |= was_readonly;
5962 if (!(o->op_flags & OPf_SPECIAL)) { /* Wasn't written as CORE::require */
5963 /* handle override, if any */
5964 gv = gv_fetchpv("require", FALSE, SVt_PVCV);
5965 if (!(gv && GvCVu(gv) && GvIMPORTED_CV(gv))) {
5966 GV **gvp = (GV**)hv_fetch(PL_globalstash, "require", 7, FALSE);
5967 if (gvp) gv = *gvp; else gv = Nullgv;
5971 if (gv && GvCVu(gv) && GvIMPORTED_CV(gv)) {
5972 OP *kid = cUNOPo->op_first;
5973 cUNOPo->op_first = 0;
5975 return ck_subr(newUNOP(OP_ENTERSUB, OPf_STACKED,
5976 append_elem(OP_LIST, kid,
5977 scalar(newUNOP(OP_RV2CV, 0,
5986 Perl_ck_return(pTHX_ OP *o)
5988 if (CvLVALUE(PL_compcv)) {
5990 for (kid = cLISTOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
5991 mod(kid, OP_LEAVESUBLV);
5998 Perl_ck_retarget(pTHX_ OP *o)
6000 Perl_croak(aTHX_ "NOT IMPL LINE %d",__LINE__);
6007 Perl_ck_select(pTHX_ OP *o)
6011 if (o->op_flags & OPf_KIDS) {
6012 kid = cLISTOPo->op_first->op_sibling; /* get past pushmark */
6013 if (kid && kid->op_sibling) {
6014 o->op_type = OP_SSELECT;
6015 o->op_ppaddr = PL_ppaddr[OP_SSELECT];
6017 return fold_constants(o);
6021 kid = cLISTOPo->op_first->op_sibling; /* get past pushmark */
6022 if (kid && kid->op_type == OP_RV2GV)
6023 kid->op_private &= ~HINT_STRICT_REFS;
6028 Perl_ck_shift(pTHX_ OP *o)
6030 const I32 type = o->op_type;
6032 if (!(o->op_flags & OPf_KIDS)) {
6036 argop = newUNOP(OP_RV2AV, 0,
6037 scalar(newGVOP(OP_GV, 0, CvUNIQUE(PL_compcv) ? PL_argvgv : PL_defgv)));
6038 return newUNOP(type, 0, scalar(argop));
6040 return scalar(modkids(ck_fun(o), type));
6044 Perl_ck_sort(pTHX_ OP *o)
6048 if (o->op_type == OP_SORT && o->op_flags & OPf_STACKED)
6050 firstkid = cLISTOPo->op_first->op_sibling; /* get past pushmark */
6051 if (o->op_flags & OPf_STACKED) { /* may have been cleared */
6053 OP *kid = cUNOPx(firstkid)->op_first; /* get past null */
6055 if (kid->op_type == OP_SCOPE || kid->op_type == OP_LEAVE) {
6057 if (kid->op_type == OP_SCOPE) {
6061 else if (kid->op_type == OP_LEAVE) {
6062 if (o->op_type == OP_SORT) {
6063 op_null(kid); /* wipe out leave */
6066 for (k = kLISTOP->op_first->op_next; k; k = k->op_next) {
6067 if (k->op_next == kid)
6069 /* don't descend into loops */
6070 else if (k->op_type == OP_ENTERLOOP
6071 || k->op_type == OP_ENTERITER)
6073 k = cLOOPx(k)->op_lastop;
6078 kid->op_next = 0; /* just disconnect the leave */
6079 k = kLISTOP->op_first;
6084 if (o->op_type == OP_SORT) {
6085 /* provide scalar context for comparison function/block */
6091 o->op_flags |= OPf_SPECIAL;
6093 else if (kid->op_type == OP_RV2SV || kid->op_type == OP_PADSV)
6096 firstkid = firstkid->op_sibling;
6099 /* provide list context for arguments */
6100 if (o->op_type == OP_SORT)
6107 S_simplify_sort(pTHX_ OP *o)
6109 register OP *kid = cLISTOPo->op_first->op_sibling; /* get past pushmark */
6114 if (!(o->op_flags & OPf_STACKED))
6116 GvMULTI_on(gv_fetchpv("a", TRUE, SVt_PV));
6117 GvMULTI_on(gv_fetchpv("b", TRUE, SVt_PV));
6118 kid = kUNOP->op_first; /* get past null */
6119 if (kid->op_type != OP_SCOPE)
6121 kid = kLISTOP->op_last; /* get past scope */
6122 switch(kid->op_type) {
6130 k = kid; /* remember this node*/
6131 if (kBINOP->op_first->op_type != OP_RV2SV)
6133 kid = kBINOP->op_first; /* get past cmp */
6134 if (kUNOP->op_first->op_type != OP_GV)
6136 kid = kUNOP->op_first; /* get past rv2sv */
6138 if (GvSTASH(gv) != PL_curstash)
6140 gvname = GvNAME(gv);
6141 if (*gvname == 'a' && gvname[1] == '\0')
6143 else if (*gvname == 'b' && gvname[1] == '\0')
6148 kid = k; /* back to cmp */
6149 if (kBINOP->op_last->op_type != OP_RV2SV)
6151 kid = kBINOP->op_last; /* down to 2nd arg */
6152 if (kUNOP->op_first->op_type != OP_GV)
6154 kid = kUNOP->op_first; /* get past rv2sv */
6156 if (GvSTASH(gv) != PL_curstash)
6158 gvname = GvNAME(gv);
6160 ? !(*gvname == 'a' && gvname[1] == '\0')
6161 : !(*gvname == 'b' && gvname[1] == '\0'))
6163 o->op_flags &= ~(OPf_STACKED | OPf_SPECIAL);
6165 o->op_private |= OPpSORT_DESCEND;
6166 if (k->op_type == OP_NCMP)
6167 o->op_private |= OPpSORT_NUMERIC;
6168 if (k->op_type == OP_I_NCMP)
6169 o->op_private |= OPpSORT_NUMERIC | OPpSORT_INTEGER;
6170 kid = cLISTOPo->op_first->op_sibling;
6171 cLISTOPo->op_first->op_sibling = kid->op_sibling; /* bypass old block */
6172 op_free(kid); /* then delete it */
6176 Perl_ck_split(pTHX_ OP *o)
6181 if (o->op_flags & OPf_STACKED)
6182 return no_fh_allowed(o);
6184 kid = cLISTOPo->op_first;
6185 if (kid->op_type != OP_NULL)
6186 Perl_croak(aTHX_ "panic: ck_split");
6187 kid = kid->op_sibling;
6188 op_free(cLISTOPo->op_first);
6189 cLISTOPo->op_first = kid;
6191 cLISTOPo->op_first = kid = newSVOP(OP_CONST, 0, newSVpvn(" ", 1));
6192 cLISTOPo->op_last = kid; /* There was only one element previously */
6195 if (kid->op_type != OP_MATCH || kid->op_flags & OPf_STACKED) {
6196 OP *sibl = kid->op_sibling;
6197 kid->op_sibling = 0;
6198 kid = pmruntime( newPMOP(OP_MATCH, OPf_SPECIAL), kid, 0);
6199 if (cLISTOPo->op_first == cLISTOPo->op_last)
6200 cLISTOPo->op_last = kid;
6201 cLISTOPo->op_first = kid;
6202 kid->op_sibling = sibl;
6205 kid->op_type = OP_PUSHRE;
6206 kid->op_ppaddr = PL_ppaddr[OP_PUSHRE];
6208 if (((PMOP *)kid)->op_pmflags & PMf_GLOBAL && ckWARN(WARN_REGEXP)) {
6209 Perl_warner(aTHX_ packWARN(WARN_REGEXP),
6210 "Use of /g modifier is meaningless in split");
6213 if (!kid->op_sibling)
6214 append_elem(OP_SPLIT, o, newDEFSVOP());
6216 kid = kid->op_sibling;
6219 if (!kid->op_sibling)
6220 append_elem(OP_SPLIT, o, newSVOP(OP_CONST, 0, newSViv(0)));
6222 kid = kid->op_sibling;
6225 if (kid->op_sibling)
6226 return too_many_arguments(o,OP_DESC(o));
6232 Perl_ck_join(pTHX_ OP *o)
6234 const OP *kid = cLISTOPo->op_first->op_sibling;
6235 if (kid && kid->op_type == OP_MATCH) {
6236 if (ckWARN(WARN_SYNTAX)) {
6237 const REGEXP *re = PM_GETRE(kPMOP);
6238 const char *pmstr = re ? re->precomp : "STRING";
6239 Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
6240 "/%s/ should probably be written as \"%s\"",
6248 Perl_ck_subr(pTHX_ OP *o)
6250 OP *prev = ((cUNOPo->op_first->op_sibling)
6251 ? cUNOPo : ((UNOP*)cUNOPo->op_first))->op_first;
6252 OP *o2 = prev->op_sibling;
6259 I32 contextclass = 0;
6263 o->op_private |= OPpENTERSUB_HASTARG;
6264 for (cvop = o2; cvop->op_sibling; cvop = cvop->op_sibling) ;
6265 if (cvop->op_type == OP_RV2CV) {
6267 o->op_private |= (cvop->op_private & OPpENTERSUB_AMPER);
6268 op_null(cvop); /* disable rv2cv */
6269 tmpop = (SVOP*)((UNOP*)cvop)->op_first;
6270 if (tmpop->op_type == OP_GV && !(o->op_private & OPpENTERSUB_AMPER)) {
6271 GV *gv = cGVOPx_gv(tmpop);
6274 tmpop->op_private |= OPpEARLY_CV;
6277 namegv = CvANON(cv) ? gv : CvGV(cv);
6278 proto = SvPV_nolen((SV*)cv);
6280 if (CvASSERTION(cv)) {
6281 if (PL_hints & HINT_ASSERTING) {
6282 if (PERLDB_ASSERTION && PL_curstash != PL_debstash)
6283 o->op_private |= OPpENTERSUB_DB;
6287 if (!(PL_hints & HINT_ASSERTIONSSEEN) && ckWARN(WARN_ASSERTIONS)) {
6288 Perl_warner(aTHX_ packWARN(WARN_ASSERTIONS),
6289 "Impossible to activate assertion call");
6296 else if (cvop->op_type == OP_METHOD || cvop->op_type == OP_METHOD_NAMED) {
6297 if (o2->op_type == OP_CONST)
6298 o2->op_private &= ~OPpCONST_STRICT;
6299 else if (o2->op_type == OP_LIST) {
6300 OP *o = ((UNOP*)o2)->op_first->op_sibling;
6301 if (o && o->op_type == OP_CONST)
6302 o->op_private &= ~OPpCONST_STRICT;
6305 o->op_private |= (PL_hints & HINT_STRICT_REFS);
6306 if (PERLDB_SUB && PL_curstash != PL_debstash)
6307 o->op_private |= OPpENTERSUB_DB;
6308 while (o2 != cvop) {
6312 return too_many_arguments(o, gv_ename(namegv));
6330 if (o2->op_type != OP_REFGEN && o2->op_type != OP_UNDEF)
6332 arg == 1 ? "block or sub {}" : "sub {}",
6333 gv_ename(namegv), o2);
6336 /* '*' allows any scalar type, including bareword */
6339 if (o2->op_type == OP_RV2GV)
6340 goto wrapref; /* autoconvert GLOB -> GLOBref */
6341 else if (o2->op_type == OP_CONST)
6342 o2->op_private &= ~OPpCONST_STRICT;
6343 else if (o2->op_type == OP_ENTERSUB) {
6344 /* accidental subroutine, revert to bareword */
6345 OP *gvop = ((UNOP*)o2)->op_first;
6346 if (gvop && gvop->op_type == OP_NULL) {
6347 gvop = ((UNOP*)gvop)->op_first;
6349 for (; gvop->op_sibling; gvop = gvop->op_sibling)
6352 (gvop->op_private & OPpENTERSUB_NOPAREN) &&
6353 (gvop = ((UNOP*)gvop)->op_first) &&
6354 gvop->op_type == OP_GV)
6356 GV *gv = cGVOPx_gv(gvop);
6357 OP *sibling = o2->op_sibling;
6358 SV *n = newSVpvn("",0);
6360 gv_fullname4(n, gv, "", FALSE);
6361 o2 = newSVOP(OP_CONST, 0, n);
6362 prev->op_sibling = o2;
6363 o2->op_sibling = sibling;
6379 if (contextclass++ == 0) {
6380 e = strchr(proto, ']');
6381 if (!e || e == proto)
6394 while (*--p != '[');
6395 bad_type(arg, Perl_form(aTHX_ "one of %s", p),
6396 gv_ename(namegv), o2);
6402 if (o2->op_type == OP_RV2GV)
6405 bad_type(arg, "symbol", gv_ename(namegv), o2);
6408 if (o2->op_type == OP_ENTERSUB)
6411 bad_type(arg, "subroutine entry", gv_ename(namegv), o2);
6414 if (o2->op_type == OP_RV2SV ||
6415 o2->op_type == OP_PADSV ||
6416 o2->op_type == OP_HELEM ||
6417 o2->op_type == OP_AELEM ||
6418 o2->op_type == OP_THREADSV)
6421 bad_type(arg, "scalar", gv_ename(namegv), o2);
6424 if (o2->op_type == OP_RV2AV ||
6425 o2->op_type == OP_PADAV)
6428 bad_type(arg, "array", gv_ename(namegv), o2);
6431 if (o2->op_type == OP_RV2HV ||
6432 o2->op_type == OP_PADHV)
6435 bad_type(arg, "hash", gv_ename(namegv), o2);
6440 OP* sib = kid->op_sibling;
6441 kid->op_sibling = 0;
6442 o2 = newUNOP(OP_REFGEN, 0, kid);
6443 o2->op_sibling = sib;
6444 prev->op_sibling = o2;
6446 if (contextclass && e) {
6461 Perl_croak(aTHX_ "Malformed prototype for %s: %"SVf,
6462 gv_ename(namegv), cv);
6467 mod(o2, OP_ENTERSUB);
6469 o2 = o2->op_sibling;
6471 if (proto && !optional &&
6472 (*proto && *proto != '@' && *proto != '%' && *proto != ';'))
6473 return too_few_arguments(o, gv_ename(namegv));
6476 o=newSVOP(OP_CONST, 0, newSViv(0));
6482 Perl_ck_svconst(pTHX_ OP *o)
6484 SvREADONLY_on(cSVOPo->op_sv);
6489 Perl_ck_trunc(pTHX_ OP *o)
6491 if (o->op_flags & OPf_KIDS) {
6492 SVOP *kid = (SVOP*)cUNOPo->op_first;
6494 if (kid->op_type == OP_NULL)
6495 kid = (SVOP*)kid->op_sibling;
6496 if (kid && kid->op_type == OP_CONST &&
6497 (kid->op_private & OPpCONST_BARE))
6499 o->op_flags |= OPf_SPECIAL;
6500 kid->op_private &= ~OPpCONST_STRICT;
6507 Perl_ck_unpack(pTHX_ OP *o)
6509 OP *kid = cLISTOPo->op_first;
6510 if (kid->op_sibling) {
6511 kid = kid->op_sibling;
6512 if (!kid->op_sibling)
6513 kid->op_sibling = newDEFSVOP();
6519 Perl_ck_substr(pTHX_ OP *o)
6522 if ((o->op_flags & OPf_KIDS) && o->op_private == 4) {
6523 OP *kid = cLISTOPo->op_first;
6525 if (kid->op_type == OP_NULL)
6526 kid = kid->op_sibling;
6528 kid->op_flags |= OPf_MOD;
6534 /* A peephole optimizer. We visit the ops in the order they're to execute.
6535 * See the comments at the top of this file for more details about when
6536 * peep() is called */
6539 Perl_peep(pTHX_ register OP *o)
6542 register OP* oldop = 0;
6544 if (!o || o->op_opt)
6548 SAVEVPTR(PL_curcop);
6549 for (; o; o = o->op_next) {
6553 switch (o->op_type) {
6557 PL_curcop = ((COP*)o); /* for warnings */
6562 if (cSVOPo->op_private & OPpCONST_STRICT)
6563 no_bareword_allowed(o);
6565 case OP_METHOD_NAMED:
6566 /* Relocate sv to the pad for thread safety.
6567 * Despite being a "constant", the SV is written to,
6568 * for reference counts, sv_upgrade() etc. */
6570 const PADOFFSET ix = pad_alloc(OP_CONST, SVs_PADTMP);
6571 if (o->op_type == OP_CONST && SvPADTMP(cSVOPo->op_sv)) {
6572 /* If op_sv is already a PADTMP then it is being used by
6573 * some pad, so make a copy. */
6574 sv_setsv(PAD_SVl(ix),cSVOPo->op_sv);
6575 SvREADONLY_on(PAD_SVl(ix));
6576 SvREFCNT_dec(cSVOPo->op_sv);
6579 SvREFCNT_dec(PAD_SVl(ix));
6580 SvPADTMP_on(cSVOPo->op_sv);
6581 PAD_SETSV(ix, cSVOPo->op_sv);
6582 /* XXX I don't know how this isn't readonly already. */
6583 SvREADONLY_on(PAD_SVl(ix));
6585 cSVOPo->op_sv = Nullsv;
6593 if (o->op_next && o->op_next->op_type == OP_STRINGIFY) {
6594 if (o->op_next->op_private & OPpTARGET_MY) {
6595 if (o->op_flags & OPf_STACKED) /* chained concats */
6596 goto ignore_optimization;
6598 /* assert(PL_opargs[o->op_type] & OA_TARGLEX); */
6599 o->op_targ = o->op_next->op_targ;
6600 o->op_next->op_targ = 0;
6601 o->op_private |= OPpTARGET_MY;
6604 op_null(o->op_next);
6606 ignore_optimization:
6610 if ((o->op_flags & OPf_WANT) != OPf_WANT_LIST) {
6612 break; /* Scalar stub must produce undef. List stub is noop */
6616 if (o->op_targ == OP_NEXTSTATE
6617 || o->op_targ == OP_DBSTATE
6618 || o->op_targ == OP_SETSTATE)
6620 PL_curcop = ((COP*)o);
6622 /* XXX: We avoid setting op_seq here to prevent later calls
6623 to peep() from mistakenly concluding that optimisation
6624 has already occurred. This doesn't fix the real problem,
6625 though (See 20010220.007). AMS 20010719 */
6626 /* op_seq functionality is now replaced by op_opt */
6627 if (oldop && o->op_next) {
6628 oldop->op_next = o->op_next;
6636 if (oldop && o->op_next) {
6637 oldop->op_next = o->op_next;
6645 if (o->op_type == OP_PADAV || o->op_next->op_type == OP_RV2AV) {
6646 OP* pop = (o->op_type == OP_PADAV) ?
6647 o->op_next : o->op_next->op_next;
6649 if (pop && pop->op_type == OP_CONST &&
6650 ((PL_op = pop->op_next)) &&
6651 pop->op_next->op_type == OP_AELEM &&
6652 !(pop->op_next->op_private &
6653 (OPpLVAL_INTRO|OPpLVAL_DEFER|OPpDEREF|OPpMAYBE_LVSUB)) &&
6654 (i = SvIV(((SVOP*)pop)->op_sv) - PL_curcop->cop_arybase)
6659 if (cSVOPx(pop)->op_private & OPpCONST_STRICT)
6660 no_bareword_allowed(pop);
6661 if (o->op_type == OP_GV)
6662 op_null(o->op_next);
6663 op_null(pop->op_next);
6665 o->op_flags |= pop->op_next->op_flags & OPf_MOD;
6666 o->op_next = pop->op_next->op_next;
6667 o->op_ppaddr = PL_ppaddr[OP_AELEMFAST];
6668 o->op_private = (U8)i;
6669 if (o->op_type == OP_GV) {
6674 o->op_flags |= OPf_SPECIAL;
6675 o->op_type = OP_AELEMFAST;
6681 if (o->op_next->op_type == OP_RV2SV) {
6682 if (!(o->op_next->op_private & OPpDEREF)) {
6683 op_null(o->op_next);
6684 o->op_private |= o->op_next->op_private & (OPpLVAL_INTRO
6686 o->op_next = o->op_next->op_next;
6687 o->op_type = OP_GVSV;
6688 o->op_ppaddr = PL_ppaddr[OP_GVSV];
6691 else if ((o->op_private & OPpEARLY_CV) && ckWARN(WARN_PROTOTYPE)) {
6693 if (SvTYPE(gv) == SVt_PVGV && GvCV(gv) && SvPVX_const(GvCV(gv))) {
6694 /* XXX could check prototype here instead of just carping */
6695 SV *sv = sv_newmortal();
6696 gv_efullname3(sv, gv, Nullch);
6697 Perl_warner(aTHX_ packWARN(WARN_PROTOTYPE),
6698 "%"SVf"() called too early to check prototype",
6702 else if (o->op_next->op_type == OP_READLINE
6703 && o->op_next->op_next->op_type == OP_CONCAT
6704 && (o->op_next->op_next->op_flags & OPf_STACKED))
6706 /* Turn "$a .= <FH>" into an OP_RCATLINE. AMS 20010917 */
6707 o->op_type = OP_RCATLINE;
6708 o->op_flags |= OPf_STACKED;
6709 o->op_ppaddr = PL_ppaddr[OP_RCATLINE];
6710 op_null(o->op_next->op_next);
6711 op_null(o->op_next);
6728 while (cLOGOP->op_other->op_type == OP_NULL)
6729 cLOGOP->op_other = cLOGOP->op_other->op_next;
6730 peep(cLOGOP->op_other); /* Recursive calls are not replaced by fptr calls */
6736 while (cLOOP->op_redoop->op_type == OP_NULL)
6737 cLOOP->op_redoop = cLOOP->op_redoop->op_next;
6738 peep(cLOOP->op_redoop);
6739 while (cLOOP->op_nextop->op_type == OP_NULL)
6740 cLOOP->op_nextop = cLOOP->op_nextop->op_next;
6741 peep(cLOOP->op_nextop);
6742 while (cLOOP->op_lastop->op_type == OP_NULL)
6743 cLOOP->op_lastop = cLOOP->op_lastop->op_next;
6744 peep(cLOOP->op_lastop);
6751 while (cPMOP->op_pmreplstart &&
6752 cPMOP->op_pmreplstart->op_type == OP_NULL)
6753 cPMOP->op_pmreplstart = cPMOP->op_pmreplstart->op_next;
6754 peep(cPMOP->op_pmreplstart);
6759 if (o->op_next && o->op_next->op_type == OP_NEXTSTATE
6760 && ckWARN(WARN_SYNTAX))
6762 if (o->op_next->op_sibling &&
6763 o->op_next->op_sibling->op_type != OP_EXIT &&
6764 o->op_next->op_sibling->op_type != OP_WARN &&
6765 o->op_next->op_sibling->op_type != OP_DIE) {
6766 const line_t oldline = CopLINE(PL_curcop);
6768 CopLINE_set(PL_curcop, CopLINE((COP*)o->op_next));
6769 Perl_warner(aTHX_ packWARN(WARN_EXEC),
6770 "Statement unlikely to be reached");
6771 Perl_warner(aTHX_ packWARN(WARN_EXEC),
6772 "\t(Maybe you meant system() when you said exec()?)\n");
6773 CopLINE_set(PL_curcop, oldline);
6783 const char *key = NULL;
6788 if (((BINOP*)o)->op_last->op_type != OP_CONST)
6791 /* Make the CONST have a shared SV */
6792 svp = cSVOPx_svp(((BINOP*)o)->op_last);
6793 if ((!SvFAKE(sv = *svp) || !SvREADONLY(sv)) && !IS_PADCONST(sv)) {
6794 key = SvPV_const(sv, keylen);
6795 lexname = newSVpvn_share(key,
6796 SvUTF8(sv) ? -(I32)keylen : keylen,
6802 if ((o->op_private & (OPpLVAL_INTRO)))
6805 rop = (UNOP*)((BINOP*)o)->op_first;
6806 if (rop->op_type != OP_RV2HV || rop->op_first->op_type != OP_PADSV)
6808 lexname = *av_fetch(PL_comppad_name, rop->op_first->op_targ, TRUE);
6809 if (!(SvFLAGS(lexname) & SVpad_TYPED))
6811 fields = (GV**)hv_fetch(SvSTASH(lexname), "FIELDS", 6, FALSE);
6812 if (!fields || !GvHV(*fields))
6814 key = SvPV_const(*svp, keylen);
6815 if (!hv_fetch(GvHV(*fields), key,
6816 SvUTF8(*svp) ? -(I32)keylen : keylen, FALSE))
6818 Perl_croak(aTHX_ "No such class field \"%s\" "
6819 "in variable %s of type %s",
6820 key, SvPV_nolen_const(lexname), HvNAME_get(SvSTASH(lexname)));
6833 SVOP *first_key_op, *key_op;
6835 if ((o->op_private & (OPpLVAL_INTRO))
6836 /* I bet there's always a pushmark... */
6837 || ((LISTOP*)o)->op_first->op_sibling->op_type != OP_LIST)
6838 /* hmmm, no optimization if list contains only one key. */
6840 rop = (UNOP*)((LISTOP*)o)->op_last;
6841 if (rop->op_type != OP_RV2HV)
6843 if (rop->op_first->op_type == OP_PADSV)
6844 /* @$hash{qw(keys here)} */
6845 rop = (UNOP*)rop->op_first;
6847 /* @{$hash}{qw(keys here)} */
6848 if (rop->op_first->op_type == OP_SCOPE
6849 && cLISTOPx(rop->op_first)->op_last->op_type == OP_PADSV)
6851 rop = (UNOP*)cLISTOPx(rop->op_first)->op_last;
6857 lexname = *av_fetch(PL_comppad_name, rop->op_targ, TRUE);
6858 if (!(SvFLAGS(lexname) & SVpad_TYPED))
6860 fields = (GV**)hv_fetch(SvSTASH(lexname), "FIELDS", 6, FALSE);
6861 if (!fields || !GvHV(*fields))
6863 /* Again guessing that the pushmark can be jumped over.... */
6864 first_key_op = (SVOP*)((LISTOP*)((LISTOP*)o)->op_first->op_sibling)
6865 ->op_first->op_sibling;
6866 for (key_op = first_key_op; key_op;
6867 key_op = (SVOP*)key_op->op_sibling) {
6868 if (key_op->op_type != OP_CONST)
6870 svp = cSVOPx_svp(key_op);
6871 key = SvPV_const(*svp, keylen);
6872 if (!hv_fetch(GvHV(*fields), key,
6873 SvUTF8(*svp) ? -(I32)keylen : keylen, FALSE))
6875 Perl_croak(aTHX_ "No such class field \"%s\" "
6876 "in variable %s of type %s",
6877 key, SvPV_nolen(lexname), HvNAME_get(SvSTASH(lexname)));
6884 /* will point to RV2AV or PADAV op on LHS/RHS of assign */
6888 /* check that RHS of sort is a single plain array */
6889 oright = cUNOPo->op_first;
6890 if (!oright || oright->op_type != OP_PUSHMARK)
6893 /* reverse sort ... can be optimised. */
6894 if (!cUNOPo->op_sibling) {
6895 /* Nothing follows us on the list. */
6896 OP *reverse = o->op_next;
6898 if (reverse->op_type == OP_REVERSE &&
6899 (reverse->op_flags & OPf_WANT) == OPf_WANT_LIST) {
6900 OP *pushmark = cUNOPx(reverse)->op_first;
6901 if (pushmark && (pushmark->op_type == OP_PUSHMARK)
6902 && (cUNOPx(pushmark)->op_sibling == o)) {
6903 /* reverse -> pushmark -> sort */
6904 o->op_private |= OPpSORT_REVERSE;
6906 pushmark->op_next = oright->op_next;
6912 /* make @a = sort @a act in-place */
6916 oright = cUNOPx(oright)->op_sibling;
6919 if (oright->op_type == OP_NULL) { /* skip sort block/sub */
6920 oright = cUNOPx(oright)->op_sibling;
6924 (oright->op_type != OP_RV2AV && oright->op_type != OP_PADAV)
6925 || oright->op_next != o
6926 || (oright->op_private & OPpLVAL_INTRO)
6930 /* o2 follows the chain of op_nexts through the LHS of the
6931 * assign (if any) to the aassign op itself */
6933 if (!o2 || o2->op_type != OP_NULL)
6936 if (!o2 || o2->op_type != OP_PUSHMARK)
6939 if (o2 && o2->op_type == OP_GV)
6942 || (o2->op_type != OP_PADAV && o2->op_type != OP_RV2AV)
6943 || (o2->op_private & OPpLVAL_INTRO)
6948 if (!o2 || o2->op_type != OP_NULL)
6951 if (!o2 || o2->op_type != OP_AASSIGN
6952 || (o2->op_flags & OPf_WANT) != OPf_WANT_VOID)
6955 /* check that the sort is the first arg on RHS of assign */
6957 o2 = cUNOPx(o2)->op_first;
6958 if (!o2 || o2->op_type != OP_NULL)
6960 o2 = cUNOPx(o2)->op_first;
6961 if (!o2 || o2->op_type != OP_PUSHMARK)
6963 if (o2->op_sibling != o)
6966 /* check the array is the same on both sides */
6967 if (oleft->op_type == OP_RV2AV) {
6968 if (oright->op_type != OP_RV2AV
6969 || !cUNOPx(oright)->op_first
6970 || cUNOPx(oright)->op_first->op_type != OP_GV
6971 || cGVOPx_gv(cUNOPx(oleft)->op_first) !=
6972 cGVOPx_gv(cUNOPx(oright)->op_first)
6976 else if (oright->op_type != OP_PADAV
6977 || oright->op_targ != oleft->op_targ
6981 /* transfer MODishness etc from LHS arg to RHS arg */
6982 oright->op_flags = oleft->op_flags;
6983 o->op_private |= OPpSORT_INPLACE;
6985 /* excise push->gv->rv2av->null->aassign */
6986 o2 = o->op_next->op_next;
6987 op_null(o2); /* PUSHMARK */
6989 if (o2->op_type == OP_GV) {
6990 op_null(o2); /* GV */
6993 op_null(o2); /* RV2AV or PADAV */
6994 o2 = o2->op_next->op_next;
6995 op_null(o2); /* AASSIGN */
6997 o->op_next = o2->op_next;
7003 OP *ourmark, *theirmark, *ourlast, *iter, *expushmark, *rv2av;
7005 LISTOP *enter, *exlist;
7008 enter = (LISTOP *) o->op_next;
7011 if (enter->op_type == OP_NULL) {
7012 enter = (LISTOP *) enter->op_next;
7016 /* for $a (...) will have OP_GV then OP_RV2GV here.
7017 for (...) just has an OP_GV. */
7018 if (enter->op_type == OP_GV) {
7019 gvop = (OP *) enter;
7020 enter = (LISTOP *) enter->op_next;
7023 if (enter->op_type == OP_RV2GV) {
7024 enter = (LISTOP *) enter->op_next;
7030 if (enter->op_type != OP_ENTERITER)
7033 iter = enter->op_next;
7034 if (!iter || iter->op_type != OP_ITER)
7037 expushmark = enter->op_first;
7038 if (!expushmark || expushmark->op_type != OP_NULL
7039 || expushmark->op_targ != OP_PUSHMARK)
7042 exlist = (LISTOP *) expushmark->op_sibling;
7043 if (!exlist || exlist->op_type != OP_NULL
7044 || exlist->op_targ != OP_LIST)
7047 if (exlist->op_last != o) {
7048 /* Mmm. Was expecting to point back to this op. */
7051 theirmark = exlist->op_first;
7052 if (!theirmark || theirmark->op_type != OP_PUSHMARK)
7055 if (theirmark->op_sibling != o) {
7056 /* There's something between the mark and the reverse, eg
7057 for (1, reverse (...))
7062 ourmark = ((LISTOP *)o)->op_first;
7063 if (!ourmark || ourmark->op_type != OP_PUSHMARK)
7066 ourlast = ((LISTOP *)o)->op_last;
7067 if (!ourlast || ourlast->op_next != o)
7070 rv2av = ourmark->op_sibling;
7071 if (rv2av && rv2av->op_type == OP_RV2AV && rv2av->op_sibling == 0
7072 && rv2av->op_flags == (OPf_WANT_LIST | OPf_KIDS)
7073 && enter->op_flags == (OPf_WANT_LIST | OPf_KIDS)) {
7074 /* We're just reversing a single array. */
7075 rv2av->op_flags = OPf_WANT_SCALAR | OPf_KIDS | OPf_REF;
7076 enter->op_flags |= OPf_STACKED;
7079 /* We don't have control over who points to theirmark, so sacrifice
7081 theirmark->op_next = ourmark->op_next;
7082 theirmark->op_flags = ourmark->op_flags;
7083 ourlast->op_next = gvop ? gvop : (OP *) enter;
7086 enter->op_private |= OPpITER_REVERSED;
7087 iter->op_private |= OPpITER_REVERSED;
7102 Perl_custom_op_name(pTHX_ const OP* o)
7104 const IV index = PTR2IV(o->op_ppaddr);
7108 if (!PL_custom_op_names) /* This probably shouldn't happen */
7109 return (char *)PL_op_name[OP_CUSTOM];
7111 keysv = sv_2mortal(newSViv(index));
7113 he = hv_fetch_ent(PL_custom_op_names, keysv, 0, 0);
7115 return (char *)PL_op_name[OP_CUSTOM]; /* Don't know who you are */
7117 return SvPV_nolen(HeVAL(he));
7121 Perl_custom_op_desc(pTHX_ const OP* o)
7123 const IV index = PTR2IV(o->op_ppaddr);
7127 if (!PL_custom_op_descs)
7128 return (char *)PL_op_desc[OP_CUSTOM];
7130 keysv = sv_2mortal(newSViv(index));
7132 he = hv_fetch_ent(PL_custom_op_descs, keysv, 0, 0);
7134 return (char *)PL_op_desc[OP_CUSTOM];
7136 return SvPV_nolen(HeVAL(he));
7141 /* Efficient sub that returns a constant scalar value. */
7143 const_sv_xsub(pTHX_ CV* cv)
7148 Perl_croak(aTHX_ "usage: %s::%s()",
7149 HvNAME_get(GvSTASH(CvGV(cv))), GvNAME(CvGV(cv)));
7153 ST(0) = (SV*)XSANY.any_ptr;
7159 * c-indentation-style: bsd
7161 * indent-tabs-mode: t
7164 * ex: set ts=8 sts=4 sw=4 noet: