3 * Copyright (C) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
4 * 2000, 2001, 2002, 2003, 2004, 2005, 2006, by Larry Wall and others
6 * You may distribute under the terms of either the GNU General Public
7 * License or the Artistic License, as specified in the README file.
12 * "You see: Mr. Drogo, he married poor Miss Primula Brandybuck. She was
13 * our Mr. Bilbo's first cousin on the mother's side (her mother being the
14 * youngest of the Old Took's daughters); and Mr. Drogo was his second
15 * cousin. So Mr. Frodo is his first *and* second cousin, once removed
16 * either way, as the saying is, if you follow me." --the Gaffer
19 /* This file contains the functions that create, manipulate and optimize
20 * the OP structures that hold a compiled perl program.
22 * A Perl program is compiled into a tree of OPs. Each op contains
23 * structural pointers (eg to its siblings and the next op in the
24 * execution sequence), a pointer to the function that would execute the
25 * op, plus any data specific to that op. For example, an OP_CONST op
26 * points to the pp_const() function and to an SV containing the constant
27 * value. When pp_const() is executed, its job is to push that SV onto the
30 * OPs are mainly created by the newFOO() functions, which are mainly
31 * called from the parser (in perly.y) as the code is parsed. For example
32 * the Perl code $a + $b * $c would cause the equivalent of the following
33 * to be called (oversimplifying a bit):
35 * newBINOP(OP_ADD, flags,
37 * newBINOP(OP_MULTIPLY, flags, newSVREF($b), newSVREF($c))
40 * Note that during the build of miniperl, a temporary copy of this file
41 * is made, called opmini.c.
45 Perl's compiler is essentially a 3-pass compiler with interleaved phases:
49 An execution-order pass
51 The bottom-up pass is represented by all the "newOP" routines and
52 the ck_ routines. The bottom-upness is actually driven by yacc.
53 So at the point that a ck_ routine fires, we have no idea what the
54 context is, either upward in the syntax tree, or either forward or
55 backward in the execution order. (The bottom-up parser builds that
56 part of the execution order it knows about, but if you follow the "next"
57 links around, you'll find it's actually a closed loop through the
60 Whenever the bottom-up parser gets to a node that supplies context to
61 its components, it invokes that portion of the top-down pass that applies
62 to that part of the subtree (and marks the top node as processed, so
63 if a node further up supplies context, it doesn't have to take the
64 plunge again). As a particular subcase of this, as the new node is
65 built, it takes all the closed execution loops of its subcomponents
66 and links them into a new closed loop for the higher level node. But
67 it's still not the real execution order.
69 The actual execution order is not known till we get a grammar reduction
70 to a top-level unit like a subroutine or file that will be called by
71 "name" rather than via a "next" pointer. At that point, we can call
72 into peep() to do that code's portion of the 3rd pass. It has to be
73 recursive, but it's recursive on basic blocks, not on tree nodes.
81 #define CALL_PEEP(o) CALL_FPTR(PL_peepp)(aTHX_ o)
83 #if defined(PL_OP_SLAB_ALLOC)
85 #ifndef PERL_SLAB_SIZE
86 #define PERL_SLAB_SIZE 2048
90 Perl_Slab_Alloc(pTHX_ int m, size_t sz)
93 * To make incrementing use count easy PL_OpSlab is an I32 *
94 * To make inserting the link to slab PL_OpPtr is I32 **
95 * So compute size in units of sizeof(I32 *) as that is how Pl_OpPtr increments
96 * Add an overhead for pointer to slab and round up as a number of pointers
98 sz = (sz + 2*sizeof(I32 *) -1)/sizeof(I32 *);
99 if ((PL_OpSpace -= sz) < 0) {
100 PL_OpPtr = (I32 **) PerlMemShared_malloc(PERL_SLAB_SIZE*sizeof(I32*));
104 Zero(PL_OpPtr,PERL_SLAB_SIZE,I32 **);
105 /* We reserve the 0'th I32 sized chunk as a use count */
106 PL_OpSlab = (I32 *) PL_OpPtr;
107 /* Reduce size by the use count word, and by the size we need.
108 * Latter is to mimic the '-=' in the if() above
110 PL_OpSpace = PERL_SLAB_SIZE - (sizeof(I32)+sizeof(I32 **)-1)/sizeof(I32 **) - sz;
111 /* Allocation pointer starts at the top.
112 Theory: because we build leaves before trunk allocating at end
113 means that at run time access is cache friendly upward
115 PL_OpPtr += PERL_SLAB_SIZE;
117 assert( PL_OpSpace >= 0 );
118 /* Move the allocation pointer down */
120 assert( PL_OpPtr > (I32 **) PL_OpSlab );
121 *PL_OpPtr = PL_OpSlab; /* Note which slab it belongs to */
122 (*PL_OpSlab)++; /* Increment use count of slab */
123 assert( PL_OpPtr+sz <= ((I32 **) PL_OpSlab + PERL_SLAB_SIZE) );
124 assert( *PL_OpSlab > 0 );
125 return (void *)(PL_OpPtr + 1);
129 Perl_Slab_Free(pTHX_ void *op)
131 I32 * const * const ptr = (I32 **) op;
132 I32 * const slab = ptr[-1];
133 assert( ptr-1 > (I32 **) slab );
134 assert( ptr < ( (I32 **) slab + PERL_SLAB_SIZE) );
136 if (--(*slab) == 0) {
138 # define PerlMemShared PerlMem
141 PerlMemShared_free(slab);
142 if (slab == PL_OpSlab) {
149 * In the following definition, the ", (OP*)0" is just to make the compiler
150 * think the expression is of the right type: croak actually does a Siglongjmp.
152 #define CHECKOP(type,o) \
153 ((PL_op_mask && PL_op_mask[type]) \
154 ? ( op_free((OP*)o), \
155 Perl_croak(aTHX_ "'%s' trapped by operation mask", PL_op_desc[type]), \
157 : CALL_FPTR(PL_check[type])(aTHX_ (OP*)o))
159 #define RETURN_UNLIMITED_NUMBER (PERL_INT_MAX / 2)
162 S_gv_ename(pTHX_ GV *gv)
164 SV* const tmpsv = sv_newmortal();
165 gv_efullname3(tmpsv, gv, NULL);
166 return SvPV_nolen_const(tmpsv);
170 S_no_fh_allowed(pTHX_ OP *o)
172 yyerror(Perl_form(aTHX_ "Missing comma after first argument to %s function",
178 S_too_few_arguments(pTHX_ OP *o, const char *name)
180 yyerror(Perl_form(aTHX_ "Not enough arguments for %s", name));
185 S_too_many_arguments(pTHX_ OP *o, const char *name)
187 yyerror(Perl_form(aTHX_ "Too many arguments for %s", name));
192 S_bad_type(pTHX_ I32 n, const char *t, const char *name, const OP *kid)
194 yyerror(Perl_form(aTHX_ "Type of arg %d to %s must be %s (not %s)",
195 (int)n, name, t, OP_DESC(kid)));
199 S_no_bareword_allowed(pTHX_ const OP *o)
201 qerror(Perl_mess(aTHX_
202 "Bareword \"%"SVf"\" not allowed while \"strict subs\" in use",
206 /* "register" allocation */
209 Perl_allocmy(pTHX_ char *name)
213 const bool is_our = (PL_in_my == KEY_our);
215 /* complain about "my $<special_var>" etc etc */
219 (USE_UTF8_IN_NAMES && UTF8_IS_START(name[1])) ||
220 (name[1] == '_' && (*name == '$' || name[2]))))
222 /* name[2] is true if strlen(name) > 2 */
223 if (!isPRINT(name[1]) || strchr("\t\n\r\f", name[1])) {
224 /* 1999-02-27 mjd@plover.com */
226 p = strchr(name, '\0');
227 /* The next block assumes the buffer is at least 205 chars
228 long. At present, it's always at least 256 chars. */
230 strcpy(name+200, "...");
236 /* Move everything else down one character */
237 for (; p-name > 2; p--)
239 name[2] = toCTRL(name[1]);
242 yyerror(Perl_form(aTHX_ "Can't use global %s in \"my\"",name));
245 /* check for duplicate declaration */
246 pad_check_dup(name, is_our, (PL_curstash ? PL_curstash : PL_defstash));
248 if (PL_in_my_stash && *name != '$') {
249 yyerror(Perl_form(aTHX_
250 "Can't declare class for non-scalar %s in \"%s\"",
251 name, is_our ? "our" : "my"));
254 /* allocate a spare slot and store the name in that slot */
256 off = pad_add_name(name,
259 /* $_ is always in main::, even with our */
260 ? (PL_curstash && !strEQ(name,"$_") ? PL_curstash : PL_defstash)
271 Perl_op_free(pTHX_ OP *o)
276 if (!o || o->op_static)
280 if (o->op_private & OPpREFCOUNTED) {
291 refcnt = OpREFCNT_dec(o);
302 if (o->op_flags & OPf_KIDS) {
303 register OP *kid, *nextkid;
304 for (kid = cUNOPo->op_first; kid; kid = nextkid) {
305 nextkid = kid->op_sibling; /* Get before next freeing kid */
310 type = (OPCODE)o->op_targ;
312 /* COP* is not cleared by op_clear() so that we may track line
313 * numbers etc even after null() */
314 if (type == OP_NEXTSTATE || type == OP_SETSTATE || type == OP_DBSTATE)
319 #ifdef DEBUG_LEAKING_SCALARS
326 Perl_op_clear(pTHX_ OP *o)
330 switch (o->op_type) {
331 case OP_NULL: /* Was holding old type, if any. */
332 case OP_ENTEREVAL: /* Was holding hints. */
336 if (!(o->op_flags & OPf_REF)
337 || (PL_check[o->op_type] != MEMBER_TO_FPTR(Perl_ck_ftst)))
343 if (! (o->op_type == OP_AELEMFAST && o->op_flags & OPf_SPECIAL)) {
344 /* not an OP_PADAV replacement */
346 if (cPADOPo->op_padix > 0) {
347 /* No GvIN_PAD_off(cGVOPo_gv) here, because other references
348 * may still exist on the pad */
349 pad_swipe(cPADOPo->op_padix, TRUE);
350 cPADOPo->op_padix = 0;
353 SvREFCNT_dec(cSVOPo->op_sv);
354 cSVOPo->op_sv = NULL;
358 case OP_METHOD_NAMED:
360 SvREFCNT_dec(cSVOPo->op_sv);
361 cSVOPo->op_sv = NULL;
364 Even if op_clear does a pad_free for the target of the op,
365 pad_free doesn't actually remove the sv that exists in the pad;
366 instead it lives on. This results in that it could be reused as
367 a target later on when the pad was reallocated.
370 pad_swipe(o->op_targ,1);
379 if (o->op_flags & (OPf_SPECIAL|OPf_STACKED|OPf_KIDS))
383 if (o->op_private & (OPpTRANS_FROM_UTF|OPpTRANS_TO_UTF)) {
384 SvREFCNT_dec(cSVOPo->op_sv);
385 cSVOPo->op_sv = NULL;
388 Safefree(cPVOPo->op_pv);
389 cPVOPo->op_pv = NULL;
393 op_free(cPMOPo->op_pmreplroot);
397 if (INT2PTR(PADOFFSET, cPMOPo->op_pmreplroot)) {
398 /* No GvIN_PAD_off here, because other references may still
399 * exist on the pad */
400 pad_swipe(INT2PTR(PADOFFSET, cPMOPo->op_pmreplroot), TRUE);
403 SvREFCNT_dec((SV*)cPMOPo->op_pmreplroot);
410 HV * const pmstash = PmopSTASH(cPMOPo);
411 if (pmstash && !SvIS_FREED(pmstash)) {
412 MAGIC * const mg = mg_find((SV*)pmstash, PERL_MAGIC_symtab);
414 PMOP *pmop = (PMOP*) mg->mg_obj;
415 PMOP *lastpmop = NULL;
417 if (cPMOPo == pmop) {
419 lastpmop->op_pmnext = pmop->op_pmnext;
421 mg->mg_obj = (SV*) pmop->op_pmnext;
425 pmop = pmop->op_pmnext;
429 PmopSTASH_free(cPMOPo);
431 cPMOPo->op_pmreplroot = NULL;
432 /* we use the "SAFE" version of the PM_ macros here
433 * since sv_clean_all might release some PMOPs
434 * after PL_regex_padav has been cleared
435 * and the clearing of PL_regex_padav needs to
436 * happen before sv_clean_all
438 ReREFCNT_dec(PM_GETRE_SAFE(cPMOPo));
439 PM_SETRE_SAFE(cPMOPo, NULL);
441 if(PL_regex_pad) { /* We could be in destruction */
442 av_push((AV*) PL_regex_pad[0],(SV*) PL_regex_pad[(cPMOPo)->op_pmoffset]);
443 SvREPADTMP_on(PL_regex_pad[(cPMOPo)->op_pmoffset]);
444 PM_SETRE(cPMOPo, (cPMOPo)->op_pmoffset);
451 if (o->op_targ > 0) {
452 pad_free(o->op_targ);
458 S_cop_free(pTHX_ COP* cop)
460 Safefree(cop->cop_label); /* FIXME: treaddead ??? */
463 if (! specialWARN(cop->cop_warnings))
464 SvREFCNT_dec(cop->cop_warnings);
465 if (! specialCopIO(cop->cop_io)) {
469 SvREFCNT_dec(cop->cop_io);
475 Perl_op_null(pTHX_ OP *o)
478 if (o->op_type == OP_NULL)
481 o->op_targ = o->op_type;
482 o->op_type = OP_NULL;
483 o->op_ppaddr = PL_ppaddr[OP_NULL];
487 Perl_op_refcnt_lock(pTHX)
495 Perl_op_refcnt_unlock(pTHX)
502 /* Contextualizers */
504 #define LINKLIST(o) ((o)->op_next ? (o)->op_next : linklist((OP*)o))
507 Perl_linklist(pTHX_ OP *o)
514 /* establish postfix order */
515 first = cUNOPo->op_first;
518 o->op_next = LINKLIST(first);
521 if (kid->op_sibling) {
522 kid->op_next = LINKLIST(kid->op_sibling);
523 kid = kid->op_sibling;
537 Perl_scalarkids(pTHX_ OP *o)
539 if (o && o->op_flags & OPf_KIDS) {
541 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
548 S_scalarboolean(pTHX_ OP *o)
551 if (o->op_type == OP_SASSIGN && cBINOPo->op_first->op_type == OP_CONST) {
552 if (ckWARN(WARN_SYNTAX)) {
553 const line_t oldline = CopLINE(PL_curcop);
555 if (PL_copline != NOLINE)
556 CopLINE_set(PL_curcop, PL_copline);
557 Perl_warner(aTHX_ packWARN(WARN_SYNTAX), "Found = in conditional, should be ==");
558 CopLINE_set(PL_curcop, oldline);
565 Perl_scalar(pTHX_ OP *o)
570 /* assumes no premature commitment */
571 if (!o || PL_error_count || (o->op_flags & OPf_WANT)
572 || o->op_type == OP_RETURN)
577 o->op_flags = (o->op_flags & ~OPf_WANT) | OPf_WANT_SCALAR;
579 switch (o->op_type) {
581 scalar(cBINOPo->op_first);
586 for (kid = cUNOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
590 if ((kid = cLISTOPo->op_first) && kid->op_type == OP_PUSHRE) {
591 if (!kPMOP->op_pmreplroot)
592 deprecate_old("implicit split to @_");
600 if (o->op_flags & OPf_KIDS) {
601 for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling)
607 kid = cLISTOPo->op_first;
609 while ((kid = kid->op_sibling)) {
615 WITH_THR(PL_curcop = &PL_compiling);
620 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling) {
626 WITH_THR(PL_curcop = &PL_compiling);
629 if (ckWARN(WARN_VOID))
630 Perl_warner(aTHX_ packWARN(WARN_VOID), "Useless use of sort in scalar context");
636 Perl_scalarvoid(pTHX_ OP *o)
640 const char* useless = NULL;
644 if (o->op_type == OP_NEXTSTATE
645 || o->op_type == OP_SETSTATE
646 || o->op_type == OP_DBSTATE
647 || (o->op_type == OP_NULL && (o->op_targ == OP_NEXTSTATE
648 || o->op_targ == OP_SETSTATE
649 || o->op_targ == OP_DBSTATE)))
650 PL_curcop = (COP*)o; /* for warning below */
652 /* assumes no premature commitment */
653 want = o->op_flags & OPf_WANT;
654 if ((want && want != OPf_WANT_SCALAR) || PL_error_count
655 || o->op_type == OP_RETURN)
660 if ((o->op_private & OPpTARGET_MY)
661 && (PL_opargs[o->op_type] & OA_TARGLEX))/* OPp share the meaning */
663 return scalar(o); /* As if inside SASSIGN */
666 o->op_flags = (o->op_flags & ~OPf_WANT) | OPf_WANT_VOID;
668 switch (o->op_type) {
670 if (!(PL_opargs[o->op_type] & OA_FOLDCONST))
674 if (o->op_flags & OPf_STACKED)
678 if (o->op_private == 4)
750 if (!(o->op_private & (OPpLVAL_INTRO|OPpOUR_INTRO)))
751 useless = OP_DESC(o);
755 kid = cUNOPo->op_first;
756 if (kid->op_type != OP_MATCH && kid->op_type != OP_SUBST &&
757 kid->op_type != OP_TRANS) {
760 useless = "negative pattern binding (!~)";
767 if (!(o->op_private & (OPpLVAL_INTRO|OPpOUR_INTRO)) &&
768 (!o->op_sibling || o->op_sibling->op_type != OP_READLINE))
769 useless = "a variable";
774 if (cSVOPo->op_private & OPpCONST_STRICT)
775 no_bareword_allowed(o);
777 if (ckWARN(WARN_VOID)) {
778 useless = "a constant";
779 if (o->op_private & OPpCONST_ARYBASE)
781 /* don't warn on optimised away booleans, eg
782 * use constant Foo, 5; Foo || print; */
783 if (cSVOPo->op_private & OPpCONST_SHORTCIRCUIT)
785 /* the constants 0 and 1 are permitted as they are
786 conventionally used as dummies in constructs like
787 1 while some_condition_with_side_effects; */
788 else if (SvNIOK(sv) && (SvNV(sv) == 0.0 || SvNV(sv) == 1.0))
790 else if (SvPOK(sv)) {
791 /* perl4's way of mixing documentation and code
792 (before the invention of POD) was based on a
793 trick to mix nroff and perl code. The trick was
794 built upon these three nroff macros being used in
795 void context. The pink camel has the details in
796 the script wrapman near page 319. */
797 const char * const maybe_macro = SvPVX_const(sv);
798 if (strnEQ(maybe_macro, "di", 2) ||
799 strnEQ(maybe_macro, "ds", 2) ||
800 strnEQ(maybe_macro, "ig", 2))
805 op_null(o); /* don't execute or even remember it */
809 o->op_type = OP_PREINC; /* pre-increment is faster */
810 o->op_ppaddr = PL_ppaddr[OP_PREINC];
814 o->op_type = OP_PREDEC; /* pre-decrement is faster */
815 o->op_ppaddr = PL_ppaddr[OP_PREDEC];
819 o->op_type = OP_I_PREINC; /* pre-increment is faster */
820 o->op_ppaddr = PL_ppaddr[OP_I_PREINC];
824 o->op_type = OP_I_PREDEC; /* pre-decrement is faster */
825 o->op_ppaddr = PL_ppaddr[OP_I_PREDEC];
834 for (kid = cUNOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
839 if (o->op_flags & OPf_STACKED)
846 if (!(o->op_flags & OPf_KIDS))
857 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
864 /* all requires must return a boolean value */
865 o->op_flags &= ~OPf_WANT;
870 if ((kid = cLISTOPo->op_first) && kid->op_type == OP_PUSHRE) {
871 if (!kPMOP->op_pmreplroot)
872 deprecate_old("implicit split to @_");
876 if (useless && ckWARN(WARN_VOID))
877 Perl_warner(aTHX_ packWARN(WARN_VOID), "Useless use of %s in void context", useless);
882 Perl_listkids(pTHX_ OP *o)
884 if (o && o->op_flags & OPf_KIDS) {
886 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
893 Perl_list(pTHX_ OP *o)
898 /* assumes no premature commitment */
899 if (!o || (o->op_flags & OPf_WANT) || PL_error_count
900 || o->op_type == OP_RETURN)
905 if ((o->op_private & OPpTARGET_MY)
906 && (PL_opargs[o->op_type] & OA_TARGLEX))/* OPp share the meaning */
908 return o; /* As if inside SASSIGN */
911 o->op_flags = (o->op_flags & ~OPf_WANT) | OPf_WANT_LIST;
913 switch (o->op_type) {
916 list(cBINOPo->op_first);
921 for (kid = cUNOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
929 if (!(o->op_flags & OPf_KIDS))
931 if (!o->op_next && cUNOPo->op_first->op_type == OP_FLOP) {
932 list(cBINOPo->op_first);
933 return gen_constant_list(o);
940 kid = cLISTOPo->op_first;
942 while ((kid = kid->op_sibling)) {
948 WITH_THR(PL_curcop = &PL_compiling);
952 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling) {
958 WITH_THR(PL_curcop = &PL_compiling);
961 /* all requires must return a boolean value */
962 o->op_flags &= ~OPf_WANT;
969 Perl_scalarseq(pTHX_ OP *o)
973 if (o->op_type == OP_LINESEQ ||
974 o->op_type == OP_SCOPE ||
975 o->op_type == OP_LEAVE ||
976 o->op_type == OP_LEAVETRY)
979 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling) {
980 if (kid->op_sibling) {
984 PL_curcop = &PL_compiling;
986 o->op_flags &= ~OPf_PARENS;
987 if (PL_hints & HINT_BLOCK_SCOPE)
988 o->op_flags |= OPf_PARENS;
991 o = newOP(OP_STUB, 0);
996 S_modkids(pTHX_ OP *o, I32 type)
998 if (o && o->op_flags & OPf_KIDS) {
1000 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
1006 /* Propagate lvalue ("modifiable") context to an op and its children.
1007 * 'type' represents the context type, roughly based on the type of op that
1008 * would do the modifying, although local() is represented by OP_NULL.
1009 * It's responsible for detecting things that can't be modified, flag
1010 * things that need to behave specially in an lvalue context (e.g., "$$x = 5"
1011 * might have to vivify a reference in $x), and so on.
1013 * For example, "$a+1 = 2" would cause mod() to be called with o being
1014 * OP_ADD and type being OP_SASSIGN, and would output an error.
1018 Perl_mod(pTHX_ OP *o, I32 type)
1022 /* -1 = error on localize, 0 = ignore localize, 1 = ok to localize */
1025 if (!o || PL_error_count)
1028 if ((o->op_private & OPpTARGET_MY)
1029 && (PL_opargs[o->op_type] & OA_TARGLEX))/* OPp share the meaning */
1034 switch (o->op_type) {
1040 if (!(o->op_private & OPpCONST_ARYBASE))
1043 if (PL_eval_start && PL_eval_start->op_type == OP_CONST) {
1044 PL_compiling.cop_arybase = (I32)SvIV(cSVOPx(PL_eval_start)->op_sv);
1048 SAVEI32(PL_compiling.cop_arybase);
1049 PL_compiling.cop_arybase = 0;
1051 else if (type == OP_REFGEN)
1054 Perl_croak(aTHX_ "That use of $[ is unsupported");
1057 if (o->op_flags & OPf_PARENS)
1061 if ((type == OP_UNDEF || type == OP_REFGEN) &&
1062 !(o->op_flags & OPf_STACKED)) {
1063 o->op_type = OP_RV2CV; /* entersub => rv2cv */
1064 /* The default is to set op_private to the number of children,
1065 which for a UNOP such as RV2CV is always 1. And w're using
1066 the bit for a flag in RV2CV, so we need it clear. */
1067 o->op_private &= ~1;
1068 o->op_ppaddr = PL_ppaddr[OP_RV2CV];
1069 assert(cUNOPo->op_first->op_type == OP_NULL);
1070 op_null(((LISTOP*)cUNOPo->op_first)->op_first);/* disable pushmark */
1073 else if (o->op_private & OPpENTERSUB_NOMOD)
1075 else { /* lvalue subroutine call */
1076 o->op_private |= OPpLVAL_INTRO;
1077 PL_modcount = RETURN_UNLIMITED_NUMBER;
1078 if (type == OP_GREPSTART || type == OP_ENTERSUB || type == OP_REFGEN) {
1079 /* Backward compatibility mode: */
1080 o->op_private |= OPpENTERSUB_INARGS;
1083 else { /* Compile-time error message: */
1084 OP *kid = cUNOPo->op_first;
1088 if (kid->op_type == OP_PUSHMARK)
1090 if (kid->op_type != OP_NULL || kid->op_targ != OP_LIST)
1092 "panic: unexpected lvalue entersub "
1093 "args: type/targ %ld:%"UVuf,
1094 (long)kid->op_type, (UV)kid->op_targ);
1095 kid = kLISTOP->op_first;
1097 while (kid->op_sibling)
1098 kid = kid->op_sibling;
1099 if (!(kid->op_type == OP_NULL && kid->op_targ == OP_RV2CV)) {
1101 if (kid->op_type == OP_METHOD_NAMED
1102 || kid->op_type == OP_METHOD)
1106 NewOp(1101, newop, 1, UNOP);
1107 newop->op_type = OP_RV2CV;
1108 newop->op_ppaddr = PL_ppaddr[OP_RV2CV];
1109 newop->op_first = NULL;
1110 newop->op_next = (OP*)newop;
1111 kid->op_sibling = (OP*)newop;
1112 newop->op_private |= OPpLVAL_INTRO;
1113 newop->op_private &= ~1;
1117 if (kid->op_type != OP_RV2CV)
1119 "panic: unexpected lvalue entersub "
1120 "entry via type/targ %ld:%"UVuf,
1121 (long)kid->op_type, (UV)kid->op_targ);
1122 kid->op_private |= OPpLVAL_INTRO;
1123 break; /* Postpone until runtime */
1127 kid = kUNOP->op_first;
1128 if (kid->op_type == OP_NULL && kid->op_targ == OP_RV2SV)
1129 kid = kUNOP->op_first;
1130 if (kid->op_type == OP_NULL)
1132 "Unexpected constant lvalue entersub "
1133 "entry via type/targ %ld:%"UVuf,
1134 (long)kid->op_type, (UV)kid->op_targ);
1135 if (kid->op_type != OP_GV) {
1136 /* Restore RV2CV to check lvalueness */
1138 if (kid->op_next && kid->op_next != kid) { /* Happens? */
1139 okid->op_next = kid->op_next;
1140 kid->op_next = okid;
1143 okid->op_next = NULL;
1144 okid->op_type = OP_RV2CV;
1146 okid->op_ppaddr = PL_ppaddr[OP_RV2CV];
1147 okid->op_private |= OPpLVAL_INTRO;
1148 okid->op_private &= ~1;
1152 cv = GvCV(kGVOP_gv);
1162 /* grep, foreach, subcalls, refgen */
1163 if (type == OP_GREPSTART || type == OP_ENTERSUB || type == OP_REFGEN)
1165 yyerror(Perl_form(aTHX_ "Can't modify %s in %s",
1166 (o->op_type == OP_NULL && (o->op_flags & OPf_SPECIAL)
1168 : (o->op_type == OP_ENTERSUB
1169 ? "non-lvalue subroutine call"
1171 type ? PL_op_desc[type] : "local"));
1185 case OP_RIGHT_SHIFT:
1194 if (!(o->op_flags & OPf_STACKED))
1201 for (kid = cUNOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
1207 if (type == OP_REFGEN && o->op_flags & OPf_PARENS) {
1208 PL_modcount = RETURN_UNLIMITED_NUMBER;
1209 return o; /* Treat \(@foo) like ordinary list. */
1213 if (scalar_mod_type(o, type))
1215 ref(cUNOPo->op_first, o->op_type);
1219 if (type == OP_LEAVESUBLV)
1220 o->op_private |= OPpMAYBE_LVSUB;
1226 PL_modcount = RETURN_UNLIMITED_NUMBER;
1229 ref(cUNOPo->op_first, o->op_type);
1234 PL_hints |= HINT_BLOCK_SCOPE;
1249 PL_modcount = RETURN_UNLIMITED_NUMBER;
1250 if (type == OP_REFGEN && o->op_flags & OPf_PARENS)
1251 return o; /* Treat \(@foo) like ordinary list. */
1252 if (scalar_mod_type(o, type))
1254 if (type == OP_LEAVESUBLV)
1255 o->op_private |= OPpMAYBE_LVSUB;
1259 if (!type) /* local() */
1260 Perl_croak(aTHX_ "Can't localize lexical variable %s",
1261 PAD_COMPNAME_PV(o->op_targ));
1269 if (type != OP_SASSIGN)
1273 if (o->op_private == 4) /* don't allow 4 arg substr as lvalue */
1278 if (type == OP_LEAVESUBLV)
1279 o->op_private |= OPpMAYBE_LVSUB;
1281 pad_free(o->op_targ);
1282 o->op_targ = pad_alloc(o->op_type, SVs_PADMY);
1283 assert(SvTYPE(PAD_SV(o->op_targ)) == SVt_NULL);
1284 if (o->op_flags & OPf_KIDS)
1285 mod(cBINOPo->op_first->op_sibling, type);
1290 ref(cBINOPo->op_first, o->op_type);
1291 if (type == OP_ENTERSUB &&
1292 !(o->op_private & (OPpLVAL_INTRO | OPpDEREF)))
1293 o->op_private |= OPpLVAL_DEFER;
1294 if (type == OP_LEAVESUBLV)
1295 o->op_private |= OPpMAYBE_LVSUB;
1305 if (o->op_flags & OPf_KIDS)
1306 mod(cLISTOPo->op_last, type);
1311 if (o->op_flags & OPf_SPECIAL) /* do BLOCK */
1313 else if (!(o->op_flags & OPf_KIDS))
1315 if (o->op_targ != OP_LIST) {
1316 mod(cBINOPo->op_first, type);
1322 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
1327 if (type != OP_LEAVESUBLV)
1329 break; /* mod()ing was handled by ck_return() */
1332 /* [20011101.069] File test operators interpret OPf_REF to mean that
1333 their argument is a filehandle; thus \stat(".") should not set
1335 if (type == OP_REFGEN &&
1336 PL_check[o->op_type] == MEMBER_TO_FPTR(Perl_ck_ftst))
1339 if (type != OP_LEAVESUBLV)
1340 o->op_flags |= OPf_MOD;
1342 if (type == OP_AASSIGN || type == OP_SASSIGN)
1343 o->op_flags |= OPf_SPECIAL|OPf_REF;
1344 else if (!type) { /* local() */
1347 o->op_private |= OPpLVAL_INTRO;
1348 o->op_flags &= ~OPf_SPECIAL;
1349 PL_hints |= HINT_BLOCK_SCOPE;
1354 if (ckWARN(WARN_SYNTAX)) {
1355 Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
1356 "Useless localization of %s", OP_DESC(o));
1360 else if (type != OP_GREPSTART && type != OP_ENTERSUB
1361 && type != OP_LEAVESUBLV)
1362 o->op_flags |= OPf_REF;
1367 S_scalar_mod_type(const OP *o, I32 type)
1371 if (o->op_type == OP_RV2GV)
1395 case OP_RIGHT_SHIFT:
1414 S_is_handle_constructor(const OP *o, I32 numargs)
1416 switch (o->op_type) {
1424 case OP_SELECT: /* XXX c.f. SelectSaver.pm */
1437 Perl_refkids(pTHX_ OP *o, I32 type)
1439 if (o && o->op_flags & OPf_KIDS) {
1441 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
1448 Perl_doref(pTHX_ OP *o, I32 type, bool set_op_ref)
1453 if (!o || PL_error_count)
1456 switch (o->op_type) {
1458 if ((type == OP_EXISTS || type == OP_DEFINED || type == OP_LOCK) &&
1459 !(o->op_flags & OPf_STACKED)) {
1460 o->op_type = OP_RV2CV; /* entersub => rv2cv */
1461 o->op_ppaddr = PL_ppaddr[OP_RV2CV];
1462 assert(cUNOPo->op_first->op_type == OP_NULL);
1463 op_null(((LISTOP*)cUNOPo->op_first)->op_first); /* disable pushmark */
1464 o->op_flags |= OPf_SPECIAL;
1465 o->op_private &= ~1;
1470 for (kid = cUNOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
1471 doref(kid, type, set_op_ref);
1474 if (type == OP_DEFINED)
1475 o->op_flags |= OPf_SPECIAL; /* don't create GV */
1476 doref(cUNOPo->op_first, o->op_type, set_op_ref);
1479 if (type == OP_RV2SV || type == OP_RV2AV || type == OP_RV2HV) {
1480 o->op_private |= (type == OP_RV2AV ? OPpDEREF_AV
1481 : type == OP_RV2HV ? OPpDEREF_HV
1483 o->op_flags |= OPf_MOD;
1488 o->op_flags |= OPf_MOD; /* XXX ??? */
1494 o->op_flags |= OPf_REF;
1497 if (type == OP_DEFINED)
1498 o->op_flags |= OPf_SPECIAL; /* don't create GV */
1499 doref(cUNOPo->op_first, o->op_type, set_op_ref);
1505 o->op_flags |= OPf_REF;
1510 if (!(o->op_flags & OPf_KIDS))
1512 doref(cBINOPo->op_first, type, set_op_ref);
1516 doref(cBINOPo->op_first, o->op_type, set_op_ref);
1517 if (type == OP_RV2SV || type == OP_RV2AV || type == OP_RV2HV) {
1518 o->op_private |= (type == OP_RV2AV ? OPpDEREF_AV
1519 : type == OP_RV2HV ? OPpDEREF_HV
1521 o->op_flags |= OPf_MOD;
1531 if (!(o->op_flags & OPf_KIDS))
1533 doref(cLISTOPo->op_last, type, set_op_ref);
1543 S_dup_attrlist(pTHX_ OP *o)
1548 /* An attrlist is either a simple OP_CONST or an OP_LIST with kids,
1549 * where the first kid is OP_PUSHMARK and the remaining ones
1550 * are OP_CONST. We need to push the OP_CONST values.
1552 if (o->op_type == OP_CONST)
1553 rop = newSVOP(OP_CONST, o->op_flags, SvREFCNT_inc_NN(cSVOPo->op_sv));
1555 assert((o->op_type == OP_LIST) && (o->op_flags & OPf_KIDS));
1557 for (o = cLISTOPo->op_first; o; o=o->op_sibling) {
1558 if (o->op_type == OP_CONST)
1559 rop = append_elem(OP_LIST, rop,
1560 newSVOP(OP_CONST, o->op_flags,
1561 SvREFCNT_inc_NN(cSVOPo->op_sv)));
1568 S_apply_attrs(pTHX_ HV *stash, SV *target, OP *attrs, bool for_my)
1573 /* fake up C<use attributes $pkg,$rv,@attrs> */
1574 ENTER; /* need to protect against side-effects of 'use' */
1576 stashsv = stash ? newSVhek(HvNAME_HEK(stash)) : &PL_sv_no;
1578 #define ATTRSMODULE "attributes"
1579 #define ATTRSMODULE_PM "attributes.pm"
1582 /* Don't force the C<use> if we don't need it. */
1583 SV * const * const svp = hv_fetchs(GvHVn(PL_incgv), ATTRSMODULE_PM, FALSE);
1584 if (svp && *svp != &PL_sv_undef)
1585 /*EMPTY*/; /* already in %INC */
1587 Perl_load_module(aTHX_ PERL_LOADMOD_NOIMPORT,
1588 newSVpvs(ATTRSMODULE), NULL);
1591 Perl_load_module(aTHX_ PERL_LOADMOD_IMPORT_OPS,
1592 newSVpvs(ATTRSMODULE),
1594 prepend_elem(OP_LIST,
1595 newSVOP(OP_CONST, 0, stashsv),
1596 prepend_elem(OP_LIST,
1597 newSVOP(OP_CONST, 0,
1599 dup_attrlist(attrs))));
1605 S_apply_attrs_my(pTHX_ HV *stash, OP *target, OP *attrs, OP **imopsp)
1608 OP *pack, *imop, *arg;
1614 assert(target->op_type == OP_PADSV ||
1615 target->op_type == OP_PADHV ||
1616 target->op_type == OP_PADAV);
1618 /* Ensure that attributes.pm is loaded. */
1619 apply_attrs(stash, PAD_SV(target->op_targ), attrs, TRUE);
1621 /* Need package name for method call. */
1622 pack = newSVOP(OP_CONST, 0, newSVpvs(ATTRSMODULE));
1624 /* Build up the real arg-list. */
1625 stashsv = stash ? newSVhek(HvNAME_HEK(stash)) : &PL_sv_no;
1627 arg = newOP(OP_PADSV, 0);
1628 arg->op_targ = target->op_targ;
1629 arg = prepend_elem(OP_LIST,
1630 newSVOP(OP_CONST, 0, stashsv),
1631 prepend_elem(OP_LIST,
1632 newUNOP(OP_REFGEN, 0,
1633 mod(arg, OP_REFGEN)),
1634 dup_attrlist(attrs)));
1636 /* Fake up a method call to import */
1637 meth = newSVpvs_share("import");
1638 imop = convert(OP_ENTERSUB, OPf_STACKED|OPf_SPECIAL|OPf_WANT_VOID,
1639 append_elem(OP_LIST,
1640 prepend_elem(OP_LIST, pack, list(arg)),
1641 newSVOP(OP_METHOD_NAMED, 0, meth)));
1642 imop->op_private |= OPpENTERSUB_NOMOD;
1644 /* Combine the ops. */
1645 *imopsp = append_elem(OP_LIST, *imopsp, imop);
1649 =notfor apidoc apply_attrs_string
1651 Attempts to apply a list of attributes specified by the C<attrstr> and
1652 C<len> arguments to the subroutine identified by the C<cv> argument which
1653 is expected to be associated with the package identified by the C<stashpv>
1654 argument (see L<attributes>). It gets this wrong, though, in that it
1655 does not correctly identify the boundaries of the individual attribute
1656 specifications within C<attrstr>. This is not really intended for the
1657 public API, but has to be listed here for systems such as AIX which
1658 need an explicit export list for symbols. (It's called from XS code
1659 in support of the C<ATTRS:> keyword from F<xsubpp>.) Patches to fix it
1660 to respect attribute syntax properly would be welcome.
1666 Perl_apply_attrs_string(pTHX_ const char *stashpv, CV *cv,
1667 const char *attrstr, STRLEN len)
1672 len = strlen(attrstr);
1676 for (; isSPACE(*attrstr) && len; --len, ++attrstr) ;
1678 const char * const sstr = attrstr;
1679 for (; !isSPACE(*attrstr) && len; --len, ++attrstr) ;
1680 attrs = append_elem(OP_LIST, attrs,
1681 newSVOP(OP_CONST, 0,
1682 newSVpvn(sstr, attrstr-sstr)));
1686 Perl_load_module(aTHX_ PERL_LOADMOD_IMPORT_OPS,
1687 newSVpvs(ATTRSMODULE),
1688 NULL, prepend_elem(OP_LIST,
1689 newSVOP(OP_CONST, 0, newSVpv(stashpv,0)),
1690 prepend_elem(OP_LIST,
1691 newSVOP(OP_CONST, 0,
1697 S_my_kid(pTHX_ OP *o, OP *attrs, OP **imopsp)
1702 if (!o || PL_error_count)
1706 if (type == OP_LIST) {
1708 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
1709 my_kid(kid, attrs, imopsp);
1710 } else if (type == OP_UNDEF) {
1712 } else if (type == OP_RV2SV || /* "our" declaration */
1714 type == OP_RV2HV) { /* XXX does this let anything illegal in? */
1715 if (cUNOPo->op_first->op_type != OP_GV) { /* MJD 20011224 */
1716 yyerror(Perl_form(aTHX_ "Can't declare %s in %s",
1717 OP_DESC(o), PL_in_my == KEY_our ? "our" : "my"));
1719 GV * const gv = cGVOPx_gv(cUNOPo->op_first);
1721 PL_in_my_stash = NULL;
1722 apply_attrs(GvSTASH(gv),
1723 (type == OP_RV2SV ? GvSV(gv) :
1724 type == OP_RV2AV ? (SV*)GvAV(gv) :
1725 type == OP_RV2HV ? (SV*)GvHV(gv) : (SV*)gv),
1728 o->op_private |= OPpOUR_INTRO;
1731 else if (type != OP_PADSV &&
1734 type != OP_PUSHMARK)
1736 yyerror(Perl_form(aTHX_ "Can't declare %s in \"%s\"",
1738 PL_in_my == KEY_our ? "our" : "my"));
1741 else if (attrs && type != OP_PUSHMARK) {
1745 PL_in_my_stash = NULL;
1747 /* check for C<my Dog $spot> when deciding package */
1748 stash = PAD_COMPNAME_TYPE(o->op_targ);
1750 stash = PL_curstash;
1751 apply_attrs_my(stash, o, attrs, imopsp);
1753 o->op_flags |= OPf_MOD;
1754 o->op_private |= OPpLVAL_INTRO;
1759 Perl_my_attrs(pTHX_ OP *o, OP *attrs)
1763 int maybe_scalar = 0;
1765 /* [perl #17376]: this appears to be premature, and results in code such as
1766 C< our(%x); > executing in list mode rather than void mode */
1768 if (o->op_flags & OPf_PARENS)
1778 o = my_kid(o, attrs, &rops);
1780 if (maybe_scalar && o->op_type == OP_PADSV) {
1781 o = scalar(append_list(OP_LIST, (LISTOP*)rops, (LISTOP*)o));
1782 o->op_private |= OPpLVAL_INTRO;
1785 o = append_list(OP_LIST, (LISTOP*)o, (LISTOP*)rops);
1788 PL_in_my_stash = NULL;
1793 Perl_my(pTHX_ OP *o)
1795 return my_attrs(o, NULL);
1799 Perl_sawparens(pTHX_ OP *o)
1801 PERL_UNUSED_CONTEXT;
1803 o->op_flags |= OPf_PARENS;
1808 Perl_bind_match(pTHX_ I32 type, OP *left, OP *right)
1813 if ( (left->op_type == OP_RV2AV ||
1814 left->op_type == OP_RV2HV ||
1815 left->op_type == OP_PADAV ||
1816 left->op_type == OP_PADHV)
1817 && ckWARN(WARN_MISC))
1819 const char * const desc = PL_op_desc[(right->op_type == OP_SUBST ||
1820 right->op_type == OP_TRANS)
1821 ? right->op_type : OP_MATCH];
1822 const char * const sample = ((left->op_type == OP_RV2AV ||
1823 left->op_type == OP_PADAV)
1824 ? "@array" : "%hash");
1825 Perl_warner(aTHX_ packWARN(WARN_MISC),
1826 "Applying %s to %s will act on scalar(%s)",
1827 desc, sample, sample);
1830 if (right->op_type == OP_CONST &&
1831 cSVOPx(right)->op_private & OPpCONST_BARE &&
1832 cSVOPx(right)->op_private & OPpCONST_STRICT)
1834 no_bareword_allowed(right);
1837 ismatchop = right->op_type == OP_MATCH ||
1838 right->op_type == OP_SUBST ||
1839 right->op_type == OP_TRANS;
1840 if (ismatchop && right->op_private & OPpTARGET_MY) {
1842 right->op_private &= ~OPpTARGET_MY;
1844 if (!(right->op_flags & OPf_STACKED) && ismatchop) {
1845 right->op_flags |= OPf_STACKED;
1846 if (right->op_type != OP_MATCH &&
1847 ! (right->op_type == OP_TRANS &&
1848 right->op_private & OPpTRANS_IDENTICAL))
1849 left = mod(left, right->op_type);
1850 if (right->op_type == OP_TRANS)
1851 o = newBINOP(OP_NULL, OPf_STACKED, scalar(left), right);
1853 o = prepend_elem(right->op_type, scalar(left), right);
1855 return newUNOP(OP_NOT, 0, scalar(o));
1859 return bind_match(type, left,
1860 pmruntime(newPMOP(OP_MATCH, 0), right, 0));
1864 Perl_invert(pTHX_ OP *o)
1868 /* XXX need to optimize away NOT NOT here? Or do we let optimizer do it? */
1869 return newUNOP(OP_NOT, OPf_SPECIAL, scalar(o));
1873 Perl_scope(pTHX_ OP *o)
1877 if (o->op_flags & OPf_PARENS || PERLDB_NOOPT || PL_tainting) {
1878 o = prepend_elem(OP_LINESEQ, newOP(OP_ENTER, 0), o);
1879 o->op_type = OP_LEAVE;
1880 o->op_ppaddr = PL_ppaddr[OP_LEAVE];
1882 else if (o->op_type == OP_LINESEQ) {
1884 o->op_type = OP_SCOPE;
1885 o->op_ppaddr = PL_ppaddr[OP_SCOPE];
1886 kid = ((LISTOP*)o)->op_first;
1887 if (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) {
1890 /* The following deals with things like 'do {1 for 1}' */
1891 kid = kid->op_sibling;
1893 (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE))
1898 o = newLISTOP(OP_SCOPE, 0, o, NULL);
1904 Perl_block_start(pTHX_ int full)
1907 const int retval = PL_savestack_ix;
1908 pad_block_start(full);
1910 PL_hints &= ~HINT_BLOCK_SCOPE;
1911 SAVESPTR(PL_compiling.cop_warnings);
1912 if (! specialWARN(PL_compiling.cop_warnings)) {
1913 PL_compiling.cop_warnings = newSVsv(PL_compiling.cop_warnings) ;
1914 SAVEFREESV(PL_compiling.cop_warnings) ;
1916 SAVESPTR(PL_compiling.cop_io);
1917 if (! specialCopIO(PL_compiling.cop_io)) {
1918 PL_compiling.cop_io = newSVsv(PL_compiling.cop_io) ;
1919 SAVEFREESV(PL_compiling.cop_io) ;
1925 Perl_block_end(pTHX_ I32 floor, OP *seq)
1928 const int needblockscope = PL_hints & HINT_BLOCK_SCOPE;
1929 OP* const retval = scalarseq(seq);
1931 PL_compiling.op_private = (U8)(PL_hints & HINT_PRIVATE_MASK);
1933 PL_hints |= HINT_BLOCK_SCOPE; /* propagate out */
1942 const I32 offset = pad_findmy("$_");
1943 if (offset == NOT_IN_PAD || PAD_COMPNAME_FLAGS_isOUR(offset)) {
1944 return newSVREF(newGVOP(OP_GV, 0, PL_defgv));
1947 OP * const o = newOP(OP_PADSV, 0);
1948 o->op_targ = offset;
1954 Perl_newPROG(pTHX_ OP *o)
1960 PL_eval_root = newUNOP(OP_LEAVEEVAL,
1961 ((PL_in_eval & EVAL_KEEPERR)
1962 ? OPf_SPECIAL : 0), o);
1963 PL_eval_start = linklist(PL_eval_root);
1964 PL_eval_root->op_private |= OPpREFCOUNTED;
1965 OpREFCNT_set(PL_eval_root, 1);
1966 PL_eval_root->op_next = 0;
1967 CALL_PEEP(PL_eval_start);
1970 if (o->op_type == OP_STUB) {
1971 PL_comppad_name = 0;
1976 PL_main_root = scope(sawparens(scalarvoid(o)));
1977 PL_curcop = &PL_compiling;
1978 PL_main_start = LINKLIST(PL_main_root);
1979 PL_main_root->op_private |= OPpREFCOUNTED;
1980 OpREFCNT_set(PL_main_root, 1);
1981 PL_main_root->op_next = 0;
1982 CALL_PEEP(PL_main_start);
1985 /* Register with debugger */
1987 CV * const cv = get_cv("DB::postponed", FALSE);
1991 XPUSHs((SV*)CopFILEGV(&PL_compiling));
1993 call_sv((SV*)cv, G_DISCARD);
2000 Perl_localize(pTHX_ OP *o, I32 lex)
2003 if (o->op_flags & OPf_PARENS)
2004 /* [perl #17376]: this appears to be premature, and results in code such as
2005 C< our(%x); > executing in list mode rather than void mode */
2012 if ( PL_bufptr > PL_oldbufptr && PL_bufptr[-1] == ','
2013 && ckWARN(WARN_PARENTHESIS))
2015 char *s = PL_bufptr;
2018 /* some heuristics to detect a potential error */
2019 while (*s && (strchr(", \t\n", *s)))
2023 if (*s && strchr("@$%*", *s) && *++s
2024 && (isALNUM(*s) || UTF8_IS_CONTINUED(*s))) {
2027 while (*s && (isALNUM(*s) || UTF8_IS_CONTINUED(*s)))
2029 while (*s && (strchr(", \t\n", *s)))
2035 if (sigil && (*s == ';' || *s == '=')) {
2036 Perl_warner(aTHX_ packWARN(WARN_PARENTHESIS),
2037 "Parentheses missing around \"%s\" list",
2038 lex ? (PL_in_my == KEY_our ? "our" : "my")
2046 o = mod(o, OP_NULL); /* a bit kludgey */
2048 PL_in_my_stash = NULL;
2053 Perl_jmaybe(pTHX_ OP *o)
2055 if (o->op_type == OP_LIST) {
2057 = newSVREF(newGVOP(OP_GV, 0, gv_fetchpvs(";", GV_ADD|GV_NOTQUAL,
2059 o = convert(OP_JOIN, 0, prepend_elem(OP_LIST, o2, o));
2065 Perl_fold_constants(pTHX_ register OP *o)
2069 I32 type = o->op_type;
2072 if (PL_opargs[type] & OA_RETSCALAR)
2074 if (PL_opargs[type] & OA_TARGET && !o->op_targ)
2075 o->op_targ = pad_alloc(type, SVs_PADTMP);
2077 /* integerize op, unless it happens to be C<-foo>.
2078 * XXX should pp_i_negate() do magic string negation instead? */
2079 if ((PL_opargs[type] & OA_OTHERINT) && (PL_hints & HINT_INTEGER)
2080 && !(type == OP_NEGATE && cUNOPo->op_first->op_type == OP_CONST
2081 && (cUNOPo->op_first->op_private & OPpCONST_BARE)))
2083 o->op_ppaddr = PL_ppaddr[type = ++(o->op_type)];
2086 if (!(PL_opargs[type] & OA_FOLDCONST))
2091 /* XXX might want a ck_negate() for this */
2092 cUNOPo->op_first->op_private &= ~OPpCONST_STRICT;
2103 /* XXX what about the numeric ops? */
2104 if (PL_hints & HINT_LOCALE)
2109 goto nope; /* Don't try to run w/ errors */
2111 for (curop = LINKLIST(o); curop != o; curop = LINKLIST(curop)) {
2112 if ((curop->op_type != OP_CONST ||
2113 (curop->op_private & OPpCONST_BARE)) &&
2114 curop->op_type != OP_LIST &&
2115 curop->op_type != OP_SCALAR &&
2116 curop->op_type != OP_NULL &&
2117 curop->op_type != OP_PUSHMARK)
2123 curop = LINKLIST(o);
2127 sv = *(PL_stack_sp--);
2128 if (o->op_targ && sv == PAD_SV(o->op_targ)) /* grab pad temp? */
2129 pad_swipe(o->op_targ, FALSE);
2130 else if (SvTEMP(sv)) { /* grab mortal temp? */
2131 SvREFCNT_inc_simple_void(sv);
2135 if (type == OP_RV2GV)
2136 return newGVOP(OP_GV, 0, (GV*)sv);
2137 return newSVOP(OP_CONST, 0, sv);
2144 Perl_gen_constant_list(pTHX_ register OP *o)
2148 const I32 oldtmps_floor = PL_tmps_floor;
2152 return o; /* Don't attempt to run with errors */
2154 PL_op = curop = LINKLIST(o);
2161 PL_tmps_floor = oldtmps_floor;
2163 o->op_type = OP_RV2AV;
2164 o->op_ppaddr = PL_ppaddr[OP_RV2AV];
2165 o->op_flags &= ~OPf_REF; /* treat \(1..2) like an ordinary list */
2166 o->op_flags |= OPf_PARENS; /* and flatten \(1..2,3) */
2167 o->op_opt = 0; /* needs to be revisited in peep() */
2168 curop = ((UNOP*)o)->op_first;
2169 ((UNOP*)o)->op_first = newSVOP(OP_CONST, 0, SvREFCNT_inc_NN(*PL_stack_sp--));
2176 Perl_convert(pTHX_ I32 type, I32 flags, OP *o)
2179 if (!o || o->op_type != OP_LIST)
2180 o = newLISTOP(OP_LIST, 0, o, NULL);
2182 o->op_flags &= ~OPf_WANT;
2184 if (!(PL_opargs[type] & OA_MARK))
2185 op_null(cLISTOPo->op_first);
2187 o->op_type = (OPCODE)type;
2188 o->op_ppaddr = PL_ppaddr[type];
2189 o->op_flags |= flags;
2191 o = CHECKOP(type, o);
2192 if (o->op_type != (unsigned)type)
2195 return fold_constants(o);
2198 /* List constructors */
2201 Perl_append_elem(pTHX_ I32 type, OP *first, OP *last)
2209 if (first->op_type != (unsigned)type
2210 || (type == OP_LIST && (first->op_flags & OPf_PARENS)))
2212 return newLISTOP(type, 0, first, last);
2215 if (first->op_flags & OPf_KIDS)
2216 ((LISTOP*)first)->op_last->op_sibling = last;
2218 first->op_flags |= OPf_KIDS;
2219 ((LISTOP*)first)->op_first = last;
2221 ((LISTOP*)first)->op_last = last;
2226 Perl_append_list(pTHX_ I32 type, LISTOP *first, LISTOP *last)
2234 if (first->op_type != (unsigned)type)
2235 return prepend_elem(type, (OP*)first, (OP*)last);
2237 if (last->op_type != (unsigned)type)
2238 return append_elem(type, (OP*)first, (OP*)last);
2240 first->op_last->op_sibling = last->op_first;
2241 first->op_last = last->op_last;
2242 first->op_flags |= (last->op_flags & OPf_KIDS);
2250 Perl_prepend_elem(pTHX_ I32 type, OP *first, OP *last)
2258 if (last->op_type == (unsigned)type) {
2259 if (type == OP_LIST) { /* already a PUSHMARK there */
2260 first->op_sibling = ((LISTOP*)last)->op_first->op_sibling;
2261 ((LISTOP*)last)->op_first->op_sibling = first;
2262 if (!(first->op_flags & OPf_PARENS))
2263 last->op_flags &= ~OPf_PARENS;
2266 if (!(last->op_flags & OPf_KIDS)) {
2267 ((LISTOP*)last)->op_last = first;
2268 last->op_flags |= OPf_KIDS;
2270 first->op_sibling = ((LISTOP*)last)->op_first;
2271 ((LISTOP*)last)->op_first = first;
2273 last->op_flags |= OPf_KIDS;
2277 return newLISTOP(type, 0, first, last);
2283 Perl_newNULLLIST(pTHX)
2285 return newOP(OP_STUB, 0);
2289 Perl_force_list(pTHX_ OP *o)
2291 if (!o || o->op_type != OP_LIST)
2292 o = newLISTOP(OP_LIST, 0, o, NULL);
2298 Perl_newLISTOP(pTHX_ I32 type, I32 flags, OP *first, OP *last)
2303 NewOp(1101, listop, 1, LISTOP);
2305 listop->op_type = (OPCODE)type;
2306 listop->op_ppaddr = PL_ppaddr[type];
2309 listop->op_flags = (U8)flags;
2313 else if (!first && last)
2316 first->op_sibling = last;
2317 listop->op_first = first;
2318 listop->op_last = last;
2319 if (type == OP_LIST) {
2320 OP* const pushop = newOP(OP_PUSHMARK, 0);
2321 pushop->op_sibling = first;
2322 listop->op_first = pushop;
2323 listop->op_flags |= OPf_KIDS;
2325 listop->op_last = pushop;
2328 return CHECKOP(type, listop);
2332 Perl_newOP(pTHX_ I32 type, I32 flags)
2336 NewOp(1101, o, 1, OP);
2337 o->op_type = (OPCODE)type;
2338 o->op_ppaddr = PL_ppaddr[type];
2339 o->op_flags = (U8)flags;
2342 o->op_private = (U8)(0 | (flags >> 8));
2343 if (PL_opargs[type] & OA_RETSCALAR)
2345 if (PL_opargs[type] & OA_TARGET)
2346 o->op_targ = pad_alloc(type, SVs_PADTMP);
2347 return CHECKOP(type, o);
2351 Perl_newUNOP(pTHX_ I32 type, I32 flags, OP *first)
2357 first = newOP(OP_STUB, 0);
2358 if (PL_opargs[type] & OA_MARK)
2359 first = force_list(first);
2361 NewOp(1101, unop, 1, UNOP);
2362 unop->op_type = (OPCODE)type;
2363 unop->op_ppaddr = PL_ppaddr[type];
2364 unop->op_first = first;
2365 unop->op_flags = (U8)(flags | OPf_KIDS);
2366 unop->op_private = (U8)(1 | (flags >> 8));
2367 unop = (UNOP*) CHECKOP(type, unop);
2371 return fold_constants((OP *) unop);
2375 Perl_newBINOP(pTHX_ I32 type, I32 flags, OP *first, OP *last)
2379 NewOp(1101, binop, 1, BINOP);
2382 first = newOP(OP_NULL, 0);
2384 binop->op_type = (OPCODE)type;
2385 binop->op_ppaddr = PL_ppaddr[type];
2386 binop->op_first = first;
2387 binop->op_flags = (U8)(flags | OPf_KIDS);
2390 binop->op_private = (U8)(1 | (flags >> 8));
2393 binop->op_private = (U8)(2 | (flags >> 8));
2394 first->op_sibling = last;
2397 binop = (BINOP*)CHECKOP(type, binop);
2398 if (binop->op_next || binop->op_type != (OPCODE)type)
2401 binop->op_last = binop->op_first->op_sibling;
2403 return fold_constants((OP *)binop);
2406 static int uvcompare(const void *a, const void *b)
2407 __attribute__nonnull__(1)
2408 __attribute__nonnull__(2)
2409 __attribute__pure__;
2410 static int uvcompare(const void *a, const void *b)
2412 if (*((const UV *)a) < (*(const UV *)b))
2414 if (*((const UV *)a) > (*(const UV *)b))
2416 if (*((const UV *)a+1) < (*(const UV *)b+1))
2418 if (*((const UV *)a+1) > (*(const UV *)b+1))
2424 Perl_pmtrans(pTHX_ OP *o, OP *expr, OP *repl)
2427 SV * const tstr = ((SVOP*)expr)->op_sv;
2428 SV * const rstr = ((SVOP*)repl)->op_sv;
2431 const U8 *t = (U8*)SvPV_const(tstr, tlen);
2432 const U8 *r = (U8*)SvPV_const(rstr, rlen);
2436 register short *tbl;
2438 const I32 complement = o->op_private & OPpTRANS_COMPLEMENT;
2439 const I32 squash = o->op_private & OPpTRANS_SQUASH;
2440 I32 del = o->op_private & OPpTRANS_DELETE;
2441 PL_hints |= HINT_BLOCK_SCOPE;
2444 o->op_private |= OPpTRANS_FROM_UTF;
2447 o->op_private |= OPpTRANS_TO_UTF;
2449 if (o->op_private & (OPpTRANS_FROM_UTF|OPpTRANS_TO_UTF)) {
2450 SV* const listsv = newSVpvs("# comment\n");
2452 const U8* tend = t + tlen;
2453 const U8* rend = r + rlen;
2467 const I32 from_utf = o->op_private & OPpTRANS_FROM_UTF;
2468 const I32 to_utf = o->op_private & OPpTRANS_TO_UTF;
2474 t = tsave = bytes_to_utf8(t, &len);
2477 if (!to_utf && rlen) {
2479 r = rsave = bytes_to_utf8(r, &len);
2483 /* There are several snags with this code on EBCDIC:
2484 1. 0xFF is a legal UTF-EBCDIC byte (there are no illegal bytes).
2485 2. scan_const() in toke.c has encoded chars in native encoding which makes
2486 ranges at least in EBCDIC 0..255 range the bottom odd.
2490 U8 tmpbuf[UTF8_MAXBYTES+1];
2493 Newx(cp, 2*tlen, UV);
2495 transv = newSVpvs("");
2497 cp[2*i] = utf8n_to_uvuni(t, tend-t, &ulen, 0);
2499 if (t < tend && NATIVE_TO_UTF(*t) == 0xff) {
2501 cp[2*i+1] = utf8n_to_uvuni(t, tend-t, &ulen, 0);
2505 cp[2*i+1] = cp[2*i];
2509 qsort(cp, i, 2*sizeof(UV), uvcompare);
2510 for (j = 0; j < i; j++) {
2512 diff = val - nextmin;
2514 t = uvuni_to_utf8(tmpbuf,nextmin);
2515 sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf);
2517 U8 range_mark = UTF_TO_NATIVE(0xff);
2518 t = uvuni_to_utf8(tmpbuf, val - 1);
2519 sv_catpvn(transv, (char *)&range_mark, 1);
2520 sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf);
2527 t = uvuni_to_utf8(tmpbuf,nextmin);
2528 sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf);
2530 U8 range_mark = UTF_TO_NATIVE(0xff);
2531 sv_catpvn(transv, (char *)&range_mark, 1);
2533 t = uvuni_to_utf8_flags(tmpbuf, 0x7fffffff,
2534 UNICODE_ALLOW_SUPER);
2535 sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf);
2536 t = (const U8*)SvPVX_const(transv);
2537 tlen = SvCUR(transv);
2541 else if (!rlen && !del) {
2542 r = t; rlen = tlen; rend = tend;
2545 if ((!rlen && !del) || t == r ||
2546 (tlen == rlen && memEQ((char *)t, (char *)r, tlen)))
2548 o->op_private |= OPpTRANS_IDENTICAL;
2552 while (t < tend || tfirst <= tlast) {
2553 /* see if we need more "t" chars */
2554 if (tfirst > tlast) {
2555 tfirst = (I32)utf8n_to_uvuni(t, tend - t, &ulen, 0);
2557 if (t < tend && NATIVE_TO_UTF(*t) == 0xff) { /* illegal utf8 val indicates range */
2559 tlast = (I32)utf8n_to_uvuni(t, tend - t, &ulen, 0);
2566 /* now see if we need more "r" chars */
2567 if (rfirst > rlast) {
2569 rfirst = (I32)utf8n_to_uvuni(r, rend - r, &ulen, 0);
2571 if (r < rend && NATIVE_TO_UTF(*r) == 0xff) { /* illegal utf8 val indicates range */
2573 rlast = (I32)utf8n_to_uvuni(r, rend - r, &ulen, 0);
2582 rfirst = rlast = 0xffffffff;
2586 /* now see which range will peter our first, if either. */
2587 tdiff = tlast - tfirst;
2588 rdiff = rlast - rfirst;
2595 if (rfirst == 0xffffffff) {
2596 diff = tdiff; /* oops, pretend rdiff is infinite */
2598 Perl_sv_catpvf(aTHX_ listsv, "%04lx\t%04lx\tXXXX\n",
2599 (long)tfirst, (long)tlast);
2601 Perl_sv_catpvf(aTHX_ listsv, "%04lx\t\tXXXX\n", (long)tfirst);
2605 Perl_sv_catpvf(aTHX_ listsv, "%04lx\t%04lx\t%04lx\n",
2606 (long)tfirst, (long)(tfirst + diff),
2609 Perl_sv_catpvf(aTHX_ listsv, "%04lx\t\t%04lx\n",
2610 (long)tfirst, (long)rfirst);
2612 if (rfirst + diff > max)
2613 max = rfirst + diff;
2615 grows = (tfirst < rfirst &&
2616 UNISKIP(tfirst) < UNISKIP(rfirst + diff));
2628 else if (max > 0xff)
2633 Safefree(cPVOPo->op_pv);
2634 cSVOPo->op_sv = (SV*)swash_init("utf8", "", listsv, bits, none);
2635 SvREFCNT_dec(listsv);
2636 SvREFCNT_dec(transv);
2638 if (!del && havefinal && rlen)
2639 (void)hv_store((HV*)SvRV((cSVOPo->op_sv)), "FINAL", 5,
2640 newSVuv((UV)final), 0);
2643 o->op_private |= OPpTRANS_GROWS;
2653 tbl = (short*)cPVOPo->op_pv;
2655 Zero(tbl, 256, short);
2656 for (i = 0; i < (I32)tlen; i++)
2658 for (i = 0, j = 0; i < 256; i++) {
2660 if (j >= (I32)rlen) {
2669 if (i < 128 && r[j] >= 128)
2679 o->op_private |= OPpTRANS_IDENTICAL;
2681 else if (j >= (I32)rlen)
2684 cPVOPo->op_pv = (char*)Renew(tbl, 0x101+rlen-j, short);
2685 tbl[0x100] = (short)(rlen - j);
2686 for (i=0; i < (I32)rlen - j; i++)
2687 tbl[0x101+i] = r[j+i];
2691 if (!rlen && !del) {
2694 o->op_private |= OPpTRANS_IDENTICAL;
2696 else if (!squash && rlen == tlen && memEQ((char*)t, (char*)r, tlen)) {
2697 o->op_private |= OPpTRANS_IDENTICAL;
2699 for (i = 0; i < 256; i++)
2701 for (i = 0, j = 0; i < (I32)tlen; i++,j++) {
2702 if (j >= (I32)rlen) {
2704 if (tbl[t[i]] == -1)
2710 if (tbl[t[i]] == -1) {
2711 if (t[i] < 128 && r[j] >= 128)
2718 o->op_private |= OPpTRANS_GROWS;
2726 Perl_newPMOP(pTHX_ I32 type, I32 flags)
2731 NewOp(1101, pmop, 1, PMOP);
2732 pmop->op_type = (OPCODE)type;
2733 pmop->op_ppaddr = PL_ppaddr[type];
2734 pmop->op_flags = (U8)flags;
2735 pmop->op_private = (U8)(0 | (flags >> 8));
2737 if (PL_hints & HINT_RE_TAINT)
2738 pmop->op_pmpermflags |= PMf_RETAINT;
2739 if (PL_hints & HINT_LOCALE)
2740 pmop->op_pmpermflags |= PMf_LOCALE;
2741 pmop->op_pmflags = pmop->op_pmpermflags;
2744 if (av_len((AV*) PL_regex_pad[0]) > -1) {
2745 SV * const repointer = av_pop((AV*)PL_regex_pad[0]);
2746 pmop->op_pmoffset = SvIV(repointer);
2747 SvREPADTMP_off(repointer);
2748 sv_setiv(repointer,0);
2750 SV * const repointer = newSViv(0);
2751 av_push(PL_regex_padav, SvREFCNT_inc_simple_NN(repointer));
2752 pmop->op_pmoffset = av_len(PL_regex_padav);
2753 PL_regex_pad = AvARRAY(PL_regex_padav);
2757 /* link into pm list */
2758 if (type != OP_TRANS && PL_curstash) {
2759 MAGIC *mg = mg_find((SV*)PL_curstash, PERL_MAGIC_symtab);
2762 mg = sv_magicext((SV*)PL_curstash, 0, PERL_MAGIC_symtab, 0, 0, 0);
2764 pmop->op_pmnext = (PMOP*)mg->mg_obj;
2765 mg->mg_obj = (SV*)pmop;
2766 PmopSTASH_set(pmop,PL_curstash);
2769 return CHECKOP(type, pmop);
2772 /* Given some sort of match op o, and an expression expr containing a
2773 * pattern, either compile expr into a regex and attach it to o (if it's
2774 * constant), or convert expr into a runtime regcomp op sequence (if it's
2777 * isreg indicates that the pattern is part of a regex construct, eg
2778 * $x =~ /pattern/ or split /pattern/, as opposed to $x =~ $pattern or
2779 * split "pattern", which aren't. In the former case, expr will be a list
2780 * if the pattern contains more than one term (eg /a$b/) or if it contains
2781 * a replacement, ie s/// or tr///.
2785 Perl_pmruntime(pTHX_ OP *o, OP *expr, bool isreg)
2790 I32 repl_has_vars = 0;
2794 if (o->op_type == OP_SUBST || o->op_type == OP_TRANS) {
2795 /* last element in list is the replacement; pop it */
2797 repl = cLISTOPx(expr)->op_last;
2798 kid = cLISTOPx(expr)->op_first;
2799 while (kid->op_sibling != repl)
2800 kid = kid->op_sibling;
2801 kid->op_sibling = NULL;
2802 cLISTOPx(expr)->op_last = kid;
2805 if (isreg && expr->op_type == OP_LIST &&
2806 cLISTOPx(expr)->op_first->op_sibling == cLISTOPx(expr)->op_last)
2808 /* convert single element list to element */
2809 OP* const oe = expr;
2810 expr = cLISTOPx(oe)->op_first->op_sibling;
2811 cLISTOPx(oe)->op_first->op_sibling = NULL;
2812 cLISTOPx(oe)->op_last = NULL;
2816 if (o->op_type == OP_TRANS) {
2817 return pmtrans(o, expr, repl);
2820 reglist = isreg && expr->op_type == OP_LIST;
2824 PL_hints |= HINT_BLOCK_SCOPE;
2827 if (expr->op_type == OP_CONST) {
2829 SV * const pat = ((SVOP*)expr)->op_sv;
2830 const char *p = SvPV_const(pat, plen);
2831 if ((o->op_flags & OPf_SPECIAL) && (*p == ' ' && p[1] == '\0')) {
2832 U32 was_readonly = SvREADONLY(pat);
2836 sv_force_normal_flags(pat, 0);
2837 assert(!SvREADONLY(pat));
2840 SvREADONLY_off(pat);
2844 sv_setpvn(pat, "\\s+", 3);
2846 SvFLAGS(pat) |= was_readonly;
2848 p = SvPV_const(pat, plen);
2849 pm->op_pmflags |= PMf_SKIPWHITE;
2852 pm->op_pmdynflags |= PMdf_UTF8;
2853 /* FIXME - can we make this function take const char * args? */
2854 PM_SETRE(pm, CALLREGCOMP(aTHX_ (char*)p, (char*)p + plen, pm));
2855 if (strEQ("\\s+", PM_GETRE(pm)->precomp))
2856 pm->op_pmflags |= PMf_WHITE;
2860 if (pm->op_pmflags & PMf_KEEP || !(PL_hints & HINT_RE_EVAL))
2861 expr = newUNOP((!(PL_hints & HINT_RE_EVAL)
2863 : OP_REGCMAYBE),0,expr);
2865 NewOp(1101, rcop, 1, LOGOP);
2866 rcop->op_type = OP_REGCOMP;
2867 rcop->op_ppaddr = PL_ppaddr[OP_REGCOMP];
2868 rcop->op_first = scalar(expr);
2869 rcop->op_flags |= OPf_KIDS
2870 | ((PL_hints & HINT_RE_EVAL) ? OPf_SPECIAL : 0)
2871 | (reglist ? OPf_STACKED : 0);
2872 rcop->op_private = 1;
2875 rcop->op_targ = pad_alloc(rcop->op_type, SVs_PADTMP);
2877 /* /$x/ may cause an eval, since $x might be qr/(?{..})/ */
2880 /* establish postfix order */
2881 if (pm->op_pmflags & PMf_KEEP || !(PL_hints & HINT_RE_EVAL)) {
2883 rcop->op_next = expr;
2884 ((UNOP*)expr)->op_first->op_next = (OP*)rcop;
2887 rcop->op_next = LINKLIST(expr);
2888 expr->op_next = (OP*)rcop;
2891 prepend_elem(o->op_type, scalar((OP*)rcop), o);
2896 if (pm->op_pmflags & PMf_EVAL) {
2898 if (CopLINE(PL_curcop) < (line_t)PL_multi_end)
2899 CopLINE_set(PL_curcop, (line_t)PL_multi_end);
2901 else if (repl->op_type == OP_CONST)
2905 for (curop = LINKLIST(repl); curop!=repl; curop = LINKLIST(curop)) {
2906 if (PL_opargs[curop->op_type] & OA_DANGEROUS) {
2907 if (curop->op_type == OP_GV) {
2908 GV * const gv = cGVOPx_gv(curop);
2910 if (strchr("&`'123456789+-\016\022", *GvENAME(gv)))
2913 else if (curop->op_type == OP_RV2CV)
2915 else if (curop->op_type == OP_RV2SV ||
2916 curop->op_type == OP_RV2AV ||
2917 curop->op_type == OP_RV2HV ||
2918 curop->op_type == OP_RV2GV) {
2919 if (lastop && lastop->op_type != OP_GV) /*funny deref?*/
2922 else if (curop->op_type == OP_PADSV ||
2923 curop->op_type == OP_PADAV ||
2924 curop->op_type == OP_PADHV ||
2925 curop->op_type == OP_PADANY) {
2928 else if (curop->op_type == OP_PUSHRE)
2929 /*EMPTY*/; /* Okay here, dangerous in newASSIGNOP */
2939 || PM_GETRE(pm)->reganch & ROPT_EVAL_SEEN))) {
2940 pm->op_pmflags |= PMf_CONST; /* const for long enough */
2941 pm->op_pmpermflags |= PMf_CONST; /* const for long enough */
2942 prepend_elem(o->op_type, scalar(repl), o);
2945 if (curop == repl && !PM_GETRE(pm)) { /* Has variables. */
2946 pm->op_pmflags |= PMf_MAYBE_CONST;
2947 pm->op_pmpermflags |= PMf_MAYBE_CONST;
2949 NewOp(1101, rcop, 1, LOGOP);
2950 rcop->op_type = OP_SUBSTCONT;
2951 rcop->op_ppaddr = PL_ppaddr[OP_SUBSTCONT];
2952 rcop->op_first = scalar(repl);
2953 rcop->op_flags |= OPf_KIDS;
2954 rcop->op_private = 1;
2957 /* establish postfix order */
2958 rcop->op_next = LINKLIST(repl);
2959 repl->op_next = (OP*)rcop;
2961 pm->op_pmreplroot = scalar((OP*)rcop);
2962 pm->op_pmreplstart = LINKLIST(rcop);
2971 Perl_newSVOP(pTHX_ I32 type, I32 flags, SV *sv)
2975 NewOp(1101, svop, 1, SVOP);
2976 svop->op_type = (OPCODE)type;
2977 svop->op_ppaddr = PL_ppaddr[type];
2979 svop->op_next = (OP*)svop;
2980 svop->op_flags = (U8)flags;
2981 if (PL_opargs[type] & OA_RETSCALAR)
2983 if (PL_opargs[type] & OA_TARGET)
2984 svop->op_targ = pad_alloc(type, SVs_PADTMP);
2985 return CHECKOP(type, svop);
2989 Perl_newPADOP(pTHX_ I32 type, I32 flags, SV *sv)
2993 NewOp(1101, padop, 1, PADOP);
2994 padop->op_type = (OPCODE)type;
2995 padop->op_ppaddr = PL_ppaddr[type];
2996 padop->op_padix = pad_alloc(type, SVs_PADTMP);
2997 SvREFCNT_dec(PAD_SVl(padop->op_padix));
2998 PAD_SETSV(padop->op_padix, sv);
3001 padop->op_next = (OP*)padop;
3002 padop->op_flags = (U8)flags;
3003 if (PL_opargs[type] & OA_RETSCALAR)
3005 if (PL_opargs[type] & OA_TARGET)
3006 padop->op_targ = pad_alloc(type, SVs_PADTMP);
3007 return CHECKOP(type, padop);
3011 Perl_newGVOP(pTHX_ I32 type, I32 flags, GV *gv)
3017 return newPADOP(type, flags, SvREFCNT_inc_simple(gv));
3019 return newSVOP(type, flags, SvREFCNT_inc_simple(gv));
3024 Perl_newPVOP(pTHX_ I32 type, I32 flags, char *pv)
3028 NewOp(1101, pvop, 1, PVOP);
3029 pvop->op_type = (OPCODE)type;
3030 pvop->op_ppaddr = PL_ppaddr[type];
3032 pvop->op_next = (OP*)pvop;
3033 pvop->op_flags = (U8)flags;
3034 if (PL_opargs[type] & OA_RETSCALAR)
3036 if (PL_opargs[type] & OA_TARGET)
3037 pvop->op_targ = pad_alloc(type, SVs_PADTMP);
3038 return CHECKOP(type, pvop);
3042 Perl_package(pTHX_ OP *o)
3048 save_hptr(&PL_curstash);
3049 save_item(PL_curstname);
3051 name = SvPV_const(cSVOPo->op_sv, len);
3052 PL_curstash = gv_stashpvn(name, len, TRUE);
3053 sv_setpvn(PL_curstname, name, len);
3056 PL_hints |= HINT_BLOCK_SCOPE;
3057 PL_copline = NOLINE;
3062 Perl_utilize(pTHX_ int aver, I32 floor, OP *version, OP *idop, OP *arg)
3069 if (idop->op_type != OP_CONST)
3070 Perl_croak(aTHX_ "Module name must be constant");
3075 SV * const vesv = ((SVOP*)version)->op_sv;
3077 if (!arg && !SvNIOKp(vesv)) {
3084 if (version->op_type != OP_CONST || !SvNIOKp(vesv))
3085 Perl_croak(aTHX_ "Version number must be constant number");
3087 /* Make copy of idop so we don't free it twice */
3088 pack = newSVOP(OP_CONST, 0, newSVsv(((SVOP*)idop)->op_sv));
3090 /* Fake up a method call to VERSION */
3091 meth = newSVpvs_share("VERSION");
3092 veop = convert(OP_ENTERSUB, OPf_STACKED|OPf_SPECIAL,
3093 append_elem(OP_LIST,
3094 prepend_elem(OP_LIST, pack, list(version)),
3095 newSVOP(OP_METHOD_NAMED, 0, meth)));
3099 /* Fake up an import/unimport */
3100 if (arg && arg->op_type == OP_STUB)
3101 imop = arg; /* no import on explicit () */
3102 else if (SvNIOKp(((SVOP*)idop)->op_sv)) {
3103 imop = NULL; /* use 5.0; */
3105 idop->op_private |= OPpCONST_NOVER;
3110 /* Make copy of idop so we don't free it twice */
3111 pack = newSVOP(OP_CONST, 0, newSVsv(((SVOP*)idop)->op_sv));
3113 /* Fake up a method call to import/unimport */
3115 ? newSVpvs_share("import") : newSVpvs_share("unimport");
3116 imop = convert(OP_ENTERSUB, OPf_STACKED|OPf_SPECIAL,
3117 append_elem(OP_LIST,
3118 prepend_elem(OP_LIST, pack, list(arg)),
3119 newSVOP(OP_METHOD_NAMED, 0, meth)));
3122 /* Fake up the BEGIN {}, which does its thing immediately. */
3124 newSVOP(OP_CONST, 0, newSVpvs_share("BEGIN")),
3127 append_elem(OP_LINESEQ,
3128 append_elem(OP_LINESEQ,
3129 newSTATEOP(0, NULL, newUNOP(OP_REQUIRE, 0, idop)),
3130 newSTATEOP(0, NULL, veop)),
3131 newSTATEOP(0, NULL, imop) ));
3133 /* The "did you use incorrect case?" warning used to be here.
3134 * The problem is that on case-insensitive filesystems one
3135 * might get false positives for "use" (and "require"):
3136 * "use Strict" or "require CARP" will work. This causes
3137 * portability problems for the script: in case-strict
3138 * filesystems the script will stop working.
3140 * The "incorrect case" warning checked whether "use Foo"
3141 * imported "Foo" to your namespace, but that is wrong, too:
3142 * there is no requirement nor promise in the language that
3143 * a Foo.pm should or would contain anything in package "Foo".
3145 * There is very little Configure-wise that can be done, either:
3146 * the case-sensitivity of the build filesystem of Perl does not
3147 * help in guessing the case-sensitivity of the runtime environment.
3150 PL_hints |= HINT_BLOCK_SCOPE;
3151 PL_copline = NOLINE;
3153 PL_cop_seqmax++; /* Purely for B::*'s benefit */
3157 =head1 Embedding Functions
3159 =for apidoc load_module
3161 Loads the module whose name is pointed to by the string part of name.
3162 Note that the actual module name, not its filename, should be given.
3163 Eg, "Foo::Bar" instead of "Foo/Bar.pm". flags can be any of
3164 PERL_LOADMOD_DENY, PERL_LOADMOD_NOIMPORT, or PERL_LOADMOD_IMPORT_OPS
3165 (or 0 for no flags). ver, if specified, provides version semantics
3166 similar to C<use Foo::Bar VERSION>. The optional trailing SV*
3167 arguments can be used to specify arguments to the module's import()
3168 method, similar to C<use Foo::Bar VERSION LIST>.
3173 Perl_load_module(pTHX_ U32 flags, SV *name, SV *ver, ...)
3176 va_start(args, ver);
3177 vload_module(flags, name, ver, &args);
3181 #ifdef PERL_IMPLICIT_CONTEXT
3183 Perl_load_module_nocontext(U32 flags, SV *name, SV *ver, ...)
3187 va_start(args, ver);
3188 vload_module(flags, name, ver, &args);
3194 Perl_vload_module(pTHX_ U32 flags, SV *name, SV *ver, va_list *args)
3199 OP * const modname = newSVOP(OP_CONST, 0, name);
3200 modname->op_private |= OPpCONST_BARE;
3202 veop = newSVOP(OP_CONST, 0, ver);
3206 if (flags & PERL_LOADMOD_NOIMPORT) {
3207 imop = sawparens(newNULLLIST());
3209 else if (flags & PERL_LOADMOD_IMPORT_OPS) {
3210 imop = va_arg(*args, OP*);
3215 sv = va_arg(*args, SV*);
3217 imop = append_elem(OP_LIST, imop, newSVOP(OP_CONST, 0, sv));
3218 sv = va_arg(*args, SV*);
3222 const line_t ocopline = PL_copline;
3223 COP * const ocurcop = PL_curcop;
3224 const int oexpect = PL_expect;
3226 utilize(!(flags & PERL_LOADMOD_DENY), start_subparse(FALSE, 0),
3227 veop, modname, imop);
3228 PL_expect = oexpect;
3229 PL_copline = ocopline;
3230 PL_curcop = ocurcop;
3235 Perl_dofile(pTHX_ OP *term, I32 force_builtin)
3241 if (!force_builtin) {
3242 gv = gv_fetchpvs("do", GV_NOTQUAL, SVt_PVCV);
3243 if (!(gv && GvCVu(gv) && GvIMPORTED_CV(gv))) {
3244 GV * const * const gvp = (GV**)hv_fetchs(PL_globalstash, "do", FALSE);
3245 gv = gvp ? *gvp : NULL;
3249 if (gv && GvCVu(gv) && GvIMPORTED_CV(gv)) {
3250 doop = ck_subr(newUNOP(OP_ENTERSUB, OPf_STACKED,
3251 append_elem(OP_LIST, term,
3252 scalar(newUNOP(OP_RV2CV, 0,
3257 doop = newUNOP(OP_DOFILE, 0, scalar(term));
3263 Perl_newSLICEOP(pTHX_ I32 flags, OP *subscript, OP *listval)
3265 return newBINOP(OP_LSLICE, flags,
3266 list(force_list(subscript)),
3267 list(force_list(listval)) );
3271 S_is_list_assignment(pTHX_ register const OP *o)
3276 if (o->op_type == OP_NULL && o->op_flags & OPf_KIDS)
3277 o = cUNOPo->op_first;
3279 if (o->op_type == OP_COND_EXPR) {
3280 const I32 t = is_list_assignment(cLOGOPo->op_first->op_sibling);
3281 const I32 f = is_list_assignment(cLOGOPo->op_first->op_sibling->op_sibling);
3286 yyerror("Assignment to both a list and a scalar");
3290 if (o->op_type == OP_LIST &&
3291 (o->op_flags & OPf_WANT) == OPf_WANT_SCALAR &&
3292 o->op_private & OPpLVAL_INTRO)
3295 if (o->op_type == OP_LIST || o->op_flags & OPf_PARENS ||
3296 o->op_type == OP_RV2AV || o->op_type == OP_RV2HV ||
3297 o->op_type == OP_ASLICE || o->op_type == OP_HSLICE)
3300 if (o->op_type == OP_PADAV || o->op_type == OP_PADHV)
3303 if (o->op_type == OP_RV2SV)
3310 Perl_newASSIGNOP(pTHX_ I32 flags, OP *left, I32 optype, OP *right)
3316 if (optype == OP_ANDASSIGN || optype == OP_ORASSIGN || optype == OP_DORASSIGN) {
3317 return newLOGOP(optype, 0,
3318 mod(scalar(left), optype),
3319 newUNOP(OP_SASSIGN, 0, scalar(right)));
3322 return newBINOP(optype, OPf_STACKED,
3323 mod(scalar(left), optype), scalar(right));
3327 if (is_list_assignment(left)) {
3331 /* Grandfathering $[ assignment here. Bletch.*/
3332 /* Only simple assignments like C<< ($[) = 1 >> are allowed */
3333 PL_eval_start = (left->op_type == OP_CONST) ? right : 0;
3334 left = mod(left, OP_AASSIGN);
3337 else if (left->op_type == OP_CONST) {
3338 /* Result of assignment is always 1 (or we'd be dead already) */
3339 return newSVOP(OP_CONST, 0, newSViv(1));
3341 curop = list(force_list(left));
3342 o = newBINOP(OP_AASSIGN, flags, list(force_list(right)), curop);
3343 o->op_private = (U8)(0 | (flags >> 8));
3345 /* PL_generation sorcery:
3346 * an assignment like ($a,$b) = ($c,$d) is easier than
3347 * ($a,$b) = ($c,$a), since there is no need for temporary vars.
3348 * To detect whether there are common vars, the global var
3349 * PL_generation is incremented for each assign op we compile.
3350 * Then, while compiling the assign op, we run through all the
3351 * variables on both sides of the assignment, setting a spare slot
3352 * in each of them to PL_generation. If any of them already have
3353 * that value, we know we've got commonality. We could use a
3354 * single bit marker, but then we'd have to make 2 passes, first
3355 * to clear the flag, then to test and set it. To find somewhere
3356 * to store these values, evil chicanery is done with SvCUR().
3359 if (!(left->op_private & OPpLVAL_INTRO)) {
3362 for (curop = LINKLIST(o); curop != o; curop = LINKLIST(curop)) {
3363 if (PL_opargs[curop->op_type] & OA_DANGEROUS) {
3364 if (curop->op_type == OP_GV) {
3365 GV *gv = cGVOPx_gv(curop);
3367 || (int)GvASSIGN_GENERATION(gv) == PL_generation)
3369 GvASSIGN_GENERATION_set(gv, PL_generation);
3371 else if (curop->op_type == OP_PADSV ||
3372 curop->op_type == OP_PADAV ||
3373 curop->op_type == OP_PADHV ||
3374 curop->op_type == OP_PADANY)
3376 if (PAD_COMPNAME_GEN(curop->op_targ)
3377 == (STRLEN)PL_generation)
3379 PAD_COMPNAME_GEN_set(curop->op_targ, PL_generation);
3382 else if (curop->op_type == OP_RV2CV)
3384 else if (curop->op_type == OP_RV2SV ||
3385 curop->op_type == OP_RV2AV ||
3386 curop->op_type == OP_RV2HV ||
3387 curop->op_type == OP_RV2GV) {
3388 if (lastop->op_type != OP_GV) /* funny deref? */
3391 else if (curop->op_type == OP_PUSHRE) {
3392 if (((PMOP*)curop)->op_pmreplroot) {
3394 GV *gv = (GV*)PAD_SVl(INT2PTR(PADOFFSET,
3395 ((PMOP*)curop)->op_pmreplroot));
3397 GV *gv = (GV*)((PMOP*)curop)->op_pmreplroot;
3400 || (int)GvASSIGN_GENERATION(gv) == PL_generation)
3402 GvASSIGN_GENERATION_set(gv, PL_generation);
3403 GvASSIGN_GENERATION_set(gv, PL_generation);
3412 o->op_private |= OPpASSIGN_COMMON;
3414 if (right && right->op_type == OP_SPLIT) {
3416 if ((tmpop = ((LISTOP*)right)->op_first) &&
3417 tmpop->op_type == OP_PUSHRE)
3419 PMOP * const pm = (PMOP*)tmpop;
3420 if (left->op_type == OP_RV2AV &&
3421 !(left->op_private & OPpLVAL_INTRO) &&
3422 !(o->op_private & OPpASSIGN_COMMON) )
3424 tmpop = ((UNOP*)left)->op_first;
3425 if (tmpop->op_type == OP_GV && !pm->op_pmreplroot) {
3427 pm->op_pmreplroot = INT2PTR(OP*, cPADOPx(tmpop)->op_padix);
3428 cPADOPx(tmpop)->op_padix = 0; /* steal it */
3430 pm->op_pmreplroot = (OP*)cSVOPx(tmpop)->op_sv;
3431 cSVOPx(tmpop)->op_sv = NULL; /* steal it */
3433 pm->op_pmflags |= PMf_ONCE;
3434 tmpop = cUNOPo->op_first; /* to list (nulled) */
3435 tmpop = ((UNOP*)tmpop)->op_first; /* to pushmark */
3436 tmpop->op_sibling = NULL; /* don't free split */
3437 right->op_next = tmpop->op_next; /* fix starting loc */
3438 op_free(o); /* blow off assign */
3439 right->op_flags &= ~OPf_WANT;
3440 /* "I don't know and I don't care." */
3445 if (PL_modcount < RETURN_UNLIMITED_NUMBER &&
3446 ((LISTOP*)right)->op_last->op_type == OP_CONST)
3448 SV *sv = ((SVOP*)((LISTOP*)right)->op_last)->op_sv;
3450 sv_setiv(sv, PL_modcount+1);
3458 right = newOP(OP_UNDEF, 0);
3459 if (right->op_type == OP_READLINE) {
3460 right->op_flags |= OPf_STACKED;
3461 return newBINOP(OP_NULL, flags, mod(scalar(left), OP_SASSIGN), scalar(right));
3464 PL_eval_start = right; /* Grandfathering $[ assignment here. Bletch.*/
3465 o = newBINOP(OP_SASSIGN, flags,
3466 scalar(right), mod(scalar(left), OP_SASSIGN) );
3471 o = newSVOP(OP_CONST, 0, newSViv(PL_compiling.cop_arybase));
3472 o->op_private |= OPpCONST_ARYBASE;
3479 Perl_newSTATEOP(pTHX_ I32 flags, char *label, OP *o)
3482 const U32 seq = intro_my();
3485 NewOp(1101, cop, 1, COP);
3486 if (PERLDB_LINE && CopLINE(PL_curcop) && PL_curstash != PL_debstash) {
3487 cop->op_type = OP_DBSTATE;
3488 cop->op_ppaddr = PL_ppaddr[ OP_DBSTATE ];
3491 cop->op_type = OP_NEXTSTATE;
3492 cop->op_ppaddr = PL_ppaddr[ OP_NEXTSTATE ];
3494 cop->op_flags = (U8)flags;
3495 cop->op_private = (U8)(PL_hints & HINT_PRIVATE_MASK);
3497 cop->op_private |= NATIVE_HINTS;
3499 PL_compiling.op_private = cop->op_private;
3500 cop->op_next = (OP*)cop;
3503 cop->cop_label = label;
3504 PL_hints |= HINT_BLOCK_SCOPE;
3507 cop->cop_arybase = PL_curcop->cop_arybase;
3508 if (specialWARN(PL_curcop->cop_warnings))
3509 cop->cop_warnings = PL_curcop->cop_warnings ;
3511 cop->cop_warnings = newSVsv(PL_curcop->cop_warnings) ;
3512 if (specialCopIO(PL_curcop->cop_io))
3513 cop->cop_io = PL_curcop->cop_io;
3515 cop->cop_io = newSVsv(PL_curcop->cop_io) ;
3518 if (PL_copline == NOLINE)
3519 CopLINE_set(cop, CopLINE(PL_curcop));
3521 CopLINE_set(cop, PL_copline);
3522 PL_copline = NOLINE;
3525 CopFILE_set(cop, CopFILE(PL_curcop)); /* XXX share in a pvtable? */
3527 CopFILEGV_set(cop, CopFILEGV(PL_curcop));
3529 CopSTASH_set(cop, PL_curstash);
3531 if (PERLDB_LINE && PL_curstash != PL_debstash) {
3532 SV * const * const svp = av_fetch(CopFILEAVx(PL_curcop), (I32)CopLINE(cop), FALSE);
3533 if (svp && *svp != &PL_sv_undef ) {
3534 (void)SvIOK_on(*svp);
3535 SvIV_set(*svp, PTR2IV(cop));
3539 return prepend_elem(OP_LINESEQ, (OP*)cop, o);
3544 Perl_newLOGOP(pTHX_ I32 type, I32 flags, OP *first, OP *other)
3547 return new_logop(type, flags, &first, &other);
3551 S_new_logop(pTHX_ I32 type, I32 flags, OP** firstp, OP** otherp)
3556 OP *first = *firstp;
3557 OP * const other = *otherp;
3559 if (type == OP_XOR) /* Not short circuit, but here by precedence. */
3560 return newBINOP(type, flags, scalar(first), scalar(other));
3562 scalarboolean(first);
3563 /* optimize "!a && b" to "a || b", and "!a || b" to "a && b" */
3564 if (first->op_type == OP_NOT && (first->op_flags & OPf_SPECIAL)) {
3565 if (type == OP_AND || type == OP_OR) {
3571 first = *firstp = cUNOPo->op_first;
3573 first->op_next = o->op_next;
3574 cUNOPo->op_first = NULL;
3578 if (first->op_type == OP_CONST) {
3579 if (first->op_private & OPpCONST_STRICT)
3580 no_bareword_allowed(first);
3581 else if ((first->op_private & OPpCONST_BARE) && ckWARN(WARN_BAREWORD))
3582 Perl_warner(aTHX_ packWARN(WARN_BAREWORD), "Bareword found in conditional");
3583 if ((type == OP_AND && SvTRUE(((SVOP*)first)->op_sv)) ||
3584 (type == OP_OR && !SvTRUE(((SVOP*)first)->op_sv)) ||
3585 (type == OP_DOR && !SvOK(((SVOP*)first)->op_sv))) {
3588 if (other->op_type == OP_CONST)
3589 other->op_private |= OPpCONST_SHORTCIRCUIT;
3593 /* check for C<my $x if 0>, or C<my($x,$y) if 0> */
3594 const OP *o2 = other;
3595 if ( ! (o2->op_type == OP_LIST
3596 && (( o2 = cUNOPx(o2)->op_first))
3597 && o2->op_type == OP_PUSHMARK
3598 && (( o2 = o2->op_sibling)) )
3601 if ((o2->op_type == OP_PADSV || o2->op_type == OP_PADAV
3602 || o2->op_type == OP_PADHV)
3603 && o2->op_private & OPpLVAL_INTRO
3604 && ckWARN(WARN_DEPRECATED))
3606 Perl_warner(aTHX_ packWARN(WARN_DEPRECATED),
3607 "Deprecated use of my() in false conditional");
3612 if (first->op_type == OP_CONST)
3613 first->op_private |= OPpCONST_SHORTCIRCUIT;
3617 else if ((first->op_flags & OPf_KIDS) && type != OP_DOR
3618 && ckWARN(WARN_MISC)) /* [#24076] Don't warn for <FH> err FOO. */
3620 const OP * const k1 = ((UNOP*)first)->op_first;
3621 const OP * const k2 = k1->op_sibling;
3623 switch (first->op_type)
3626 if (k2 && k2->op_type == OP_READLINE
3627 && (k2->op_flags & OPf_STACKED)
3628 && ((k1->op_flags & OPf_WANT) == OPf_WANT_SCALAR))
3630 warnop = k2->op_type;
3635 if (k1->op_type == OP_READDIR
3636 || k1->op_type == OP_GLOB
3637 || (k1->op_type == OP_NULL && k1->op_targ == OP_GLOB)
3638 || k1->op_type == OP_EACH)
3640 warnop = ((k1->op_type == OP_NULL)
3641 ? (OPCODE)k1->op_targ : k1->op_type);
3646 const line_t oldline = CopLINE(PL_curcop);
3647 CopLINE_set(PL_curcop, PL_copline);
3648 Perl_warner(aTHX_ packWARN(WARN_MISC),
3649 "Value of %s%s can be \"0\"; test with defined()",
3651 ((warnop == OP_READLINE || warnop == OP_GLOB)
3652 ? " construct" : "() operator"));
3653 CopLINE_set(PL_curcop, oldline);
3660 if (type == OP_ANDASSIGN || type == OP_ORASSIGN || type == OP_DORASSIGN)
3661 other->op_private |= OPpASSIGN_BACKWARDS; /* other is an OP_SASSIGN */
3663 NewOp(1101, logop, 1, LOGOP);
3665 logop->op_type = (OPCODE)type;
3666 logop->op_ppaddr = PL_ppaddr[type];
3667 logop->op_first = first;
3668 logop->op_flags = (U8)(flags | OPf_KIDS);
3669 logop->op_other = LINKLIST(other);
3670 logop->op_private = (U8)(1 | (flags >> 8));
3672 /* establish postfix order */
3673 logop->op_next = LINKLIST(first);
3674 first->op_next = (OP*)logop;
3675 first->op_sibling = other;
3677 CHECKOP(type,logop);
3679 o = newUNOP(OP_NULL, 0, (OP*)logop);
3686 Perl_newCONDOP(pTHX_ I32 flags, OP *first, OP *trueop, OP *falseop)
3694 return newLOGOP(OP_AND, 0, first, trueop);
3696 return newLOGOP(OP_OR, 0, first, falseop);
3698 scalarboolean(first);
3699 if (first->op_type == OP_CONST) {
3700 if (first->op_private & OPpCONST_BARE &&
3701 first->op_private & OPpCONST_STRICT) {
3702 no_bareword_allowed(first);
3704 if (SvTRUE(((SVOP*)first)->op_sv)) {
3715 NewOp(1101, logop, 1, LOGOP);
3716 logop->op_type = OP_COND_EXPR;
3717 logop->op_ppaddr = PL_ppaddr[OP_COND_EXPR];
3718 logop->op_first = first;
3719 logop->op_flags = (U8)(flags | OPf_KIDS);
3720 logop->op_private = (U8)(1 | (flags >> 8));
3721 logop->op_other = LINKLIST(trueop);
3722 logop->op_next = LINKLIST(falseop);
3724 CHECKOP(OP_COND_EXPR, /* that's logop->op_type */
3727 /* establish postfix order */
3728 start = LINKLIST(first);
3729 first->op_next = (OP*)logop;
3731 first->op_sibling = trueop;
3732 trueop->op_sibling = falseop;
3733 o = newUNOP(OP_NULL, 0, (OP*)logop);
3735 trueop->op_next = falseop->op_next = o;
3742 Perl_newRANGE(pTHX_ I32 flags, OP *left, OP *right)
3751 NewOp(1101, range, 1, LOGOP);
3753 range->op_type = OP_RANGE;
3754 range->op_ppaddr = PL_ppaddr[OP_RANGE];
3755 range->op_first = left;
3756 range->op_flags = OPf_KIDS;
3757 leftstart = LINKLIST(left);
3758 range->op_other = LINKLIST(right);
3759 range->op_private = (U8)(1 | (flags >> 8));
3761 left->op_sibling = right;
3763 range->op_next = (OP*)range;
3764 flip = newUNOP(OP_FLIP, flags, (OP*)range);
3765 flop = newUNOP(OP_FLOP, 0, flip);
3766 o = newUNOP(OP_NULL, 0, flop);
3768 range->op_next = leftstart;
3770 left->op_next = flip;
3771 right->op_next = flop;
3773 range->op_targ = pad_alloc(OP_RANGE, SVs_PADMY);
3774 sv_upgrade(PAD_SV(range->op_targ), SVt_PVNV);
3775 flip->op_targ = pad_alloc(OP_RANGE, SVs_PADMY);
3776 sv_upgrade(PAD_SV(flip->op_targ), SVt_PVNV);
3778 flip->op_private = left->op_type == OP_CONST ? OPpFLIP_LINENUM : 0;
3779 flop->op_private = right->op_type == OP_CONST ? OPpFLIP_LINENUM : 0;
3782 if (!flip->op_private || !flop->op_private)
3783 linklist(o); /* blow off optimizer unless constant */
3789 Perl_newLOOPOP(pTHX_ I32 flags, I32 debuggable, OP *expr, OP *block)
3794 const bool once = block && block->op_flags & OPf_SPECIAL &&
3795 (block->op_type == OP_ENTERSUB || block->op_type == OP_NULL);
3797 PERL_UNUSED_ARG(debuggable);
3800 if (once && expr->op_type == OP_CONST && !SvTRUE(((SVOP*)expr)->op_sv))
3801 return block; /* do {} while 0 does once */
3802 if (expr->op_type == OP_READLINE || expr->op_type == OP_GLOB
3803 || (expr->op_type == OP_NULL && expr->op_targ == OP_GLOB)) {
3804 expr = newUNOP(OP_DEFINED, 0,
3805 newASSIGNOP(0, newDEFSVOP(), 0, expr) );
3806 } else if (expr->op_flags & OPf_KIDS) {
3807 const OP * const k1 = ((UNOP*)expr)->op_first;
3808 const OP * const k2 = k1 ? k1->op_sibling : NULL;
3809 switch (expr->op_type) {
3811 if (k2 && k2->op_type == OP_READLINE
3812 && (k2->op_flags & OPf_STACKED)
3813 && ((k1->op_flags & OPf_WANT) == OPf_WANT_SCALAR))
3814 expr = newUNOP(OP_DEFINED, 0, expr);
3818 if (k1->op_type == OP_READDIR
3819 || k1->op_type == OP_GLOB
3820 || (k1->op_type == OP_NULL && k1->op_targ == OP_GLOB)
3821 || k1->op_type == OP_EACH)
3822 expr = newUNOP(OP_DEFINED, 0, expr);
3828 /* if block is null, the next append_elem() would put UNSTACK, a scalar
3829 * op, in listop. This is wrong. [perl #27024] */
3831 block = newOP(OP_NULL, 0);
3832 listop = append_elem(OP_LINESEQ, block, newOP(OP_UNSTACK, 0));
3833 o = new_logop(OP_AND, 0, &expr, &listop);
3836 ((LISTOP*)listop)->op_last->op_next = LINKLIST(o);
3838 if (once && o != listop)
3839 o->op_next = ((LOGOP*)cUNOPo->op_first)->op_other;
3842 o = newUNOP(OP_NULL, 0, o); /* or do {} while 1 loses outer block */
3844 o->op_flags |= flags;
3846 o->op_flags |= OPf_SPECIAL; /* suppress POPBLOCK curpm restoration*/
3851 Perl_newWHILEOP(pTHX_ I32 flags, I32 debuggable, LOOP *loop, I32
3852 whileline, OP *expr, OP *block, OP *cont, I32 has_my)
3861 PERL_UNUSED_ARG(debuggable);
3864 if (expr->op_type == OP_READLINE || expr->op_type == OP_GLOB
3865 || (expr->op_type == OP_NULL && expr->op_targ == OP_GLOB)) {
3866 expr = newUNOP(OP_DEFINED, 0,
3867 newASSIGNOP(0, newDEFSVOP(), 0, expr) );
3868 } else if (expr->op_flags & OPf_KIDS) {
3869 const OP * const k1 = ((UNOP*)expr)->op_first;
3870 const OP * const k2 = (k1) ? k1->op_sibling : NULL;
3871 switch (expr->op_type) {
3873 if (k2 && k2->op_type == OP_READLINE
3874 && (k2->op_flags & OPf_STACKED)
3875 && ((k1->op_flags & OPf_WANT) == OPf_WANT_SCALAR))
3876 expr = newUNOP(OP_DEFINED, 0, expr);
3880 if (k1->op_type == OP_READDIR
3881 || k1->op_type == OP_GLOB
3882 || (k1->op_type == OP_NULL && k1->op_targ == OP_GLOB)
3883 || k1->op_type == OP_EACH)
3884 expr = newUNOP(OP_DEFINED, 0, expr);
3891 block = newOP(OP_NULL, 0);
3892 else if (cont || has_my) {
3893 block = scope(block);
3897 next = LINKLIST(cont);
3900 OP * const unstack = newOP(OP_UNSTACK, 0);
3903 cont = append_elem(OP_LINESEQ, cont, unstack);
3906 listop = append_list(OP_LINESEQ, (LISTOP*)block, (LISTOP*)cont);
3907 redo = LINKLIST(listop);
3910 PL_copline = (line_t)whileline;
3912 o = new_logop(OP_AND, 0, &expr, &listop);
3913 if (o == expr && o->op_type == OP_CONST && !SvTRUE(cSVOPo->op_sv)) {
3914 op_free(expr); /* oops, it's a while (0) */
3916 return NULL; /* listop already freed by new_logop */
3919 ((LISTOP*)listop)->op_last->op_next =
3920 (o == listop ? redo : LINKLIST(o));
3926 NewOp(1101,loop,1,LOOP);
3927 loop->op_type = OP_ENTERLOOP;
3928 loop->op_ppaddr = PL_ppaddr[OP_ENTERLOOP];
3929 loop->op_private = 0;
3930 loop->op_next = (OP*)loop;
3933 o = newBINOP(OP_LEAVELOOP, 0, (OP*)loop, o);
3935 loop->op_redoop = redo;
3936 loop->op_lastop = o;
3937 o->op_private |= loopflags;
3940 loop->op_nextop = next;
3942 loop->op_nextop = o;
3944 o->op_flags |= flags;
3945 o->op_private |= (flags >> 8);
3950 Perl_newFOROP(pTHX_ I32 flags, char *label, line_t forline, OP *sv, OP *expr, OP *block, OP *cont)
3955 PADOFFSET padoff = 0;
3960 if (sv->op_type == OP_RV2SV) { /* symbol table variable */
3961 iterpflags = sv->op_private & OPpOUR_INTRO; /* for our $x () */
3962 sv->op_type = OP_RV2GV;
3963 sv->op_ppaddr = PL_ppaddr[OP_RV2GV];
3964 if (cGVOPx_gv(cUNOPx(sv)->op_first) == PL_defgv)
3965 iterpflags |= OPpITER_DEF;
3967 else if (sv->op_type == OP_PADSV) { /* private variable */
3968 iterpflags = sv->op_private & OPpLVAL_INTRO; /* for my $x () */
3969 padoff = sv->op_targ;
3974 else if (sv->op_type == OP_THREADSV) { /* per-thread variable */
3975 padoff = sv->op_targ;
3977 iterflags |= OPf_SPECIAL;
3982 Perl_croak(aTHX_ "Can't use %s for loop variable", PL_op_desc[sv->op_type]);
3983 if (padoff && strEQ(PAD_COMPNAME_PV(padoff), "$_"))
3984 iterpflags |= OPpITER_DEF;
3987 const I32 offset = pad_findmy("$_");
3988 if (offset == NOT_IN_PAD || PAD_COMPNAME_FLAGS_isOUR(offset)) {
3989 sv = newGVOP(OP_GV, 0, PL_defgv);
3994 iterpflags |= OPpITER_DEF;
3996 if (expr->op_type == OP_RV2AV || expr->op_type == OP_PADAV) {
3997 expr = mod(force_list(scalar(ref(expr, OP_ITER))), OP_GREPSTART);
3998 iterflags |= OPf_STACKED;
4000 else if (expr->op_type == OP_NULL &&
4001 (expr->op_flags & OPf_KIDS) &&
4002 ((BINOP*)expr)->op_first->op_type == OP_FLOP)
4004 /* Basically turn for($x..$y) into the same as for($x,$y), but we
4005 * set the STACKED flag to indicate that these values are to be
4006 * treated as min/max values by 'pp_iterinit'.
4008 UNOP* const flip = (UNOP*)((UNOP*)((BINOP*)expr)->op_first)->op_first;
4009 LOGOP* const range = (LOGOP*) flip->op_first;
4010 OP* const left = range->op_first;
4011 OP* const right = left->op_sibling;
4014 range->op_flags &= ~OPf_KIDS;
4015 range->op_first = NULL;
4017 listop = (LISTOP*)newLISTOP(OP_LIST, 0, left, right);
4018 listop->op_first->op_next = range->op_next;
4019 left->op_next = range->op_other;
4020 right->op_next = (OP*)listop;
4021 listop->op_next = listop->op_first;
4024 expr = (OP*)(listop);
4026 iterflags |= OPf_STACKED;
4029 expr = mod(force_list(expr), OP_GREPSTART);
4032 loop = (LOOP*)list(convert(OP_ENTERITER, iterflags,
4033 append_elem(OP_LIST, expr, scalar(sv))));
4034 assert(!loop->op_next);
4035 /* for my $x () sets OPpLVAL_INTRO;
4036 * for our $x () sets OPpOUR_INTRO */
4037 loop->op_private = (U8)iterpflags;
4038 #ifdef PL_OP_SLAB_ALLOC
4041 NewOp(1234,tmp,1,LOOP);
4042 Copy(loop,tmp,1,LISTOP);
4047 Renew(loop, 1, LOOP);
4049 loop->op_targ = padoff;
4050 wop = newWHILEOP(flags, 1, loop, forline, newOP(OP_ITER, 0), block, cont, 0);
4051 PL_copline = forline;
4052 return newSTATEOP(0, label, wop);
4056 Perl_newLOOPEX(pTHX_ I32 type, OP *label)
4061 if (type != OP_GOTO || label->op_type == OP_CONST) {
4062 /* "last()" means "last" */
4063 if (label->op_type == OP_STUB && (label->op_flags & OPf_PARENS))
4064 o = newOP(type, OPf_SPECIAL);
4066 o = newPVOP(type, 0, savepv(label->op_type == OP_CONST
4067 ? SvPVx_nolen_const(((SVOP*)label)->op_sv)
4073 /* Check whether it's going to be a goto &function */
4074 if (label->op_type == OP_ENTERSUB
4075 && !(label->op_flags & OPf_STACKED))
4076 label = newUNOP(OP_REFGEN, 0, mod(label, OP_REFGEN));
4077 o = newUNOP(type, OPf_STACKED, label);
4079 PL_hints |= HINT_BLOCK_SCOPE;
4083 /* if the condition is a literal array or hash
4084 (or @{ ... } etc), make a reference to it.
4087 S_ref_array_or_hash(pTHX_ OP *cond)
4090 && (cond->op_type == OP_RV2AV
4091 || cond->op_type == OP_PADAV
4092 || cond->op_type == OP_RV2HV
4093 || cond->op_type == OP_PADHV))
4095 return newUNOP(OP_REFGEN,
4096 0, mod(cond, OP_REFGEN));
4102 /* These construct the optree fragments representing given()
4105 entergiven and enterwhen are LOGOPs; the op_other pointer
4106 points up to the associated leave op. We need this so we
4107 can put it in the context and make break/continue work.
4108 (Also, of course, pp_enterwhen will jump straight to
4109 op_other if the match fails.)
4114 S_newGIVWHENOP(pTHX_ OP *cond, OP *block,
4115 I32 enter_opcode, I32 leave_opcode,
4116 PADOFFSET entertarg)
4122 NewOp(1101, enterop, 1, LOGOP);
4123 enterop->op_type = enter_opcode;
4124 enterop->op_ppaddr = PL_ppaddr[enter_opcode];
4125 enterop->op_flags = (U8) OPf_KIDS;
4126 enterop->op_targ = ((entertarg == NOT_IN_PAD) ? 0 : entertarg);
4127 enterop->op_private = 0;
4129 o = newUNOP(leave_opcode, 0, (OP *) enterop);
4132 enterop->op_first = scalar(cond);
4133 cond->op_sibling = block;
4135 o->op_next = LINKLIST(cond);
4136 cond->op_next = (OP *) enterop;
4139 /* This is a default {} block */
4140 enterop->op_first = block;
4141 enterop->op_flags |= OPf_SPECIAL;
4143 o->op_next = (OP *) enterop;
4146 CHECKOP(enter_opcode, enterop); /* Currently does nothing, since
4147 entergiven and enterwhen both
4150 enterop->op_next = LINKLIST(block);
4151 block->op_next = enterop->op_other = o;
4156 /* Does this look like a boolean operation? For these purposes
4157 a boolean operation is:
4158 - a subroutine call [*]
4159 - a logical connective
4160 - a comparison operator
4161 - a filetest operator, with the exception of -s -M -A -C
4162 - defined(), exists() or eof()
4163 - /$re/ or $foo =~ /$re/
4165 [*] possibly surprising
4169 S_looks_like_bool(pTHX_ OP *o)
4172 switch(o->op_type) {
4174 return looks_like_bool(cLOGOPo->op_first);
4178 looks_like_bool(cLOGOPo->op_first)
4179 && looks_like_bool(cLOGOPo->op_first->op_sibling));
4183 case OP_NOT: case OP_XOR:
4184 /* Note that OP_DOR is not here */
4186 case OP_EQ: case OP_NE: case OP_LT:
4187 case OP_GT: case OP_LE: case OP_GE:
4189 case OP_I_EQ: case OP_I_NE: case OP_I_LT:
4190 case OP_I_GT: case OP_I_LE: case OP_I_GE:
4192 case OP_SEQ: case OP_SNE: case OP_SLT:
4193 case OP_SGT: case OP_SLE: case OP_SGE:
4197 case OP_FTRREAD: case OP_FTRWRITE: case OP_FTREXEC:
4198 case OP_FTEREAD: case OP_FTEWRITE: case OP_FTEEXEC:
4199 case OP_FTIS: case OP_FTEOWNED: case OP_FTROWNED:
4200 case OP_FTZERO: case OP_FTSOCK: case OP_FTCHR:
4201 case OP_FTBLK: case OP_FTFILE: case OP_FTDIR:
4202 case OP_FTPIPE: case OP_FTLINK: case OP_FTSUID:
4203 case OP_FTSGID: case OP_FTSVTX: case OP_FTTTY:
4204 case OP_FTTEXT: case OP_FTBINARY:
4206 case OP_DEFINED: case OP_EXISTS:
4207 case OP_MATCH: case OP_EOF:
4212 /* Detect comparisons that have been optimized away */
4213 if (cSVOPo->op_sv == &PL_sv_yes
4214 || cSVOPo->op_sv == &PL_sv_no)
4225 Perl_newGIVENOP(pTHX_ OP *cond, OP *block, PADOFFSET defsv_off)
4229 return newGIVWHENOP(
4230 ref_array_or_hash(cond),
4232 OP_ENTERGIVEN, OP_LEAVEGIVEN,
4236 /* If cond is null, this is a default {} block */
4238 Perl_newWHENOP(pTHX_ OP *cond, OP *block)
4240 bool cond_llb = (!cond || looks_like_bool(cond));
4246 cond_op = newBINOP(OP_SMARTMATCH, OPf_SPECIAL,
4248 scalar(ref_array_or_hash(cond)));
4251 return newGIVWHENOP(
4253 append_elem(block->op_type, block, newOP(OP_BREAK, OPf_SPECIAL)),
4254 OP_ENTERWHEN, OP_LEAVEWHEN, 0);
4258 =for apidoc cv_undef
4260 Clear out all the active components of a CV. This can happen either
4261 by an explicit C<undef &foo>, or by the reference count going to zero.
4262 In the former case, we keep the CvOUTSIDE pointer, so that any anonymous
4263 children can still follow the full lexical scope chain.
4269 Perl_cv_undef(pTHX_ CV *cv)
4273 if (CvFILE(cv) && !CvISXSUB(cv)) {
4274 /* for XSUBs CvFILE point directly to static memory; __FILE__ */
4275 Safefree(CvFILE(cv));
4280 if (!CvISXSUB(cv) && CvROOT(cv)) {
4281 if (SvTYPE(cv) == SVt_PVCV && CvDEPTH(cv))
4282 Perl_croak(aTHX_ "Can't undef active subroutine");
4285 PAD_SAVE_SETNULLPAD();
4287 op_free(CvROOT(cv));
4292 SvPOK_off((SV*)cv); /* forget prototype */
4297 /* remove CvOUTSIDE unless this is an undef rather than a free */
4298 if (!SvREFCNT(cv) && CvOUTSIDE(cv)) {
4299 if (!CvWEAKOUTSIDE(cv))
4300 SvREFCNT_dec(CvOUTSIDE(cv));
4301 CvOUTSIDE(cv) = NULL;
4304 SvREFCNT_dec((SV*)CvXSUBANY(cv).any_ptr);
4307 if (CvISXSUB(cv) && CvXSUB(cv)) {
4310 /* delete all flags except WEAKOUTSIDE */
4311 CvFLAGS(cv) &= CVf_WEAKOUTSIDE;
4315 Perl_cv_ckproto(pTHX_ const CV *cv, const GV *gv, const char *p)
4317 if (((!p != !SvPOK(cv)) || (p && strNE(p, SvPVX_const(cv)))) && ckWARN_d(WARN_PROTOTYPE)) {
4318 SV* const msg = sv_newmortal();
4322 gv_efullname3(name = sv_newmortal(), gv, NULL);
4323 sv_setpv(msg, "Prototype mismatch:");
4325 Perl_sv_catpvf(aTHX_ msg, " sub %"SVf, name);
4327 Perl_sv_catpvf(aTHX_ msg, " (%"SVf")", (const SV *)cv);
4329 sv_catpvs(msg, ": none");
4330 sv_catpvs(msg, " vs ");
4332 Perl_sv_catpvf(aTHX_ msg, "(%s)", p);
4334 sv_catpvs(msg, "none");
4335 Perl_warner(aTHX_ packWARN(WARN_PROTOTYPE), "%"SVf, msg);
4339 static void const_sv_xsub(pTHX_ CV* cv);
4343 =head1 Optree Manipulation Functions
4345 =for apidoc cv_const_sv
4347 If C<cv> is a constant sub eligible for inlining. returns the constant
4348 value returned by the sub. Otherwise, returns NULL.
4350 Constant subs can be created with C<newCONSTSUB> or as described in
4351 L<perlsub/"Constant Functions">.
4356 Perl_cv_const_sv(pTHX_ CV *cv)
4358 PERL_UNUSED_CONTEXT;
4361 if (!(SvTYPE(cv) == SVt_PVCV || SvTYPE(cv) == SVt_PVFM))
4363 return CvCONST(cv) ? (SV*)CvXSUBANY(cv).any_ptr : NULL;
4366 /* op_const_sv: examine an optree to determine whether it's in-lineable.
4367 * Can be called in 3 ways:
4370 * look for a single OP_CONST with attached value: return the value
4372 * cv && CvCLONE(cv) && !CvCONST(cv)
4374 * examine the clone prototype, and if contains only a single
4375 * OP_CONST referencing a pad const, or a single PADSV referencing
4376 * an outer lexical, return a non-zero value to indicate the CV is
4377 * a candidate for "constizing" at clone time
4381 * We have just cloned an anon prototype that was marked as a const
4382 * candidiate. Try to grab the current value, and in the case of
4383 * PADSV, ignore it if it has multiple references. Return the value.
4387 Perl_op_const_sv(pTHX_ const OP *o, CV *cv)
4395 if (o->op_type == OP_LINESEQ && cLISTOPo->op_first)
4396 o = cLISTOPo->op_first->op_sibling;
4398 for (; o; o = o->op_next) {
4399 const OPCODE type = o->op_type;
4401 if (sv && o->op_next == o)
4403 if (o->op_next != o) {
4404 if (type == OP_NEXTSTATE || type == OP_NULL || type == OP_PUSHMARK)
4406 if (type == OP_DBSTATE)
4409 if (type == OP_LEAVESUB || type == OP_RETURN)
4413 if (type == OP_CONST && cSVOPo->op_sv)
4415 else if (cv && type == OP_CONST) {
4416 sv = PAD_BASE_SV(CvPADLIST(cv), o->op_targ);
4420 else if (cv && type == OP_PADSV) {
4421 if (CvCONST(cv)) { /* newly cloned anon */
4422 sv = PAD_BASE_SV(CvPADLIST(cv), o->op_targ);
4423 /* the candidate should have 1 ref from this pad and 1 ref
4424 * from the parent */
4425 if (!sv || SvREFCNT(sv) != 2)
4432 if (PAD_COMPNAME_FLAGS(o->op_targ) & SVf_FAKE)
4433 sv = &PL_sv_undef; /* an arbitrary non-null value */
4444 Perl_newMYSUB(pTHX_ I32 floor, OP *o, OP *proto, OP *attrs, OP *block)
4446 PERL_UNUSED_ARG(floor);
4456 Perl_croak(aTHX_ "\"my sub\" not yet implemented");
4460 Perl_newSUB(pTHX_ I32 floor, OP *o, OP *proto, OP *block)
4462 return Perl_newATTRSUB(aTHX_ floor, o, proto, NULL, block);
4466 Perl_newATTRSUB(pTHX_ I32 floor, OP *o, OP *proto, OP *attrs, OP *block)
4473 register CV *cv = NULL;
4475 /* If the subroutine has no body, no attributes, and no builtin attributes
4476 then it's just a sub declaration, and we may be able to get away with
4477 storing with a placeholder scalar in the symbol table, rather than a
4478 full GV and CV. If anything is present then it will take a full CV to
4480 const I32 gv_fetch_flags
4481 = (block || attrs || (CvFLAGS(PL_compcv) & CVf_BUILTIN_ATTRS))
4482 ? GV_ADDMULTI : GV_ADDMULTI | GV_NOINIT;
4483 const char * const name = o ? SvPVx_nolen_const(cSVOPo->op_sv) : NULL;
4486 assert(proto->op_type == OP_CONST);
4487 ps = SvPVx_const(((SVOP*)proto)->op_sv, ps_len);
4492 if (!name && PERLDB_NAMEANON && CopLINE(PL_curcop)) {
4493 SV * const sv = sv_newmortal();
4494 Perl_sv_setpvf(aTHX_ sv, "%s[%s:%"IVdf"]",
4495 PL_curstash ? "__ANON__" : "__ANON__::__ANON__",
4496 CopFILE(PL_curcop), (IV)CopLINE(PL_curcop));
4497 aname = SvPVX_const(sv);
4502 gv = name ? gv_fetchsv(cSVOPo->op_sv, gv_fetch_flags, SVt_PVCV)
4503 : gv_fetchpv(aname ? aname
4504 : (PL_curstash ? "__ANON__" : "__ANON__::__ANON__"),
4505 gv_fetch_flags, SVt_PVCV);
4514 if (SvTYPE(gv) != SVt_PVGV) { /* Maybe prototype now, and had at
4515 maximum a prototype before. */
4516 if (SvTYPE(gv) > SVt_NULL) {
4517 if (!SvPOK((SV*)gv) && !(SvIOK((SV*)gv) && SvIVX((SV*)gv) == -1)
4518 && ckWARN_d(WARN_PROTOTYPE))
4520 Perl_warner(aTHX_ packWARN(WARN_PROTOTYPE), "Runaway prototype");
4522 cv_ckproto((CV*)gv, NULL, ps);
4525 sv_setpvn((SV*)gv, ps, ps_len);
4527 sv_setiv((SV*)gv, -1);
4528 SvREFCNT_dec(PL_compcv);
4529 cv = PL_compcv = NULL;
4530 PL_sub_generation++;
4534 cv = (!name || GvCVGEN(gv)) ? NULL : GvCV(gv);
4536 #ifdef GV_UNIQUE_CHECK
4537 if (cv && GvUNIQUE(gv) && SvREADONLY(cv)) {
4538 Perl_croak(aTHX_ "Can't define subroutine %s (GV is unique)", name);
4542 if (!block || !ps || *ps || attrs || (CvFLAGS(PL_compcv) & CVf_BUILTIN_ATTRS))
4545 const_sv = op_const_sv(block, NULL);
4548 const bool exists = CvROOT(cv) || CvXSUB(cv);
4550 #ifdef GV_UNIQUE_CHECK
4551 if (exists && GvUNIQUE(gv)) {
4552 Perl_croak(aTHX_ "Can't redefine unique subroutine %s", name);
4556 /* if the subroutine doesn't exist and wasn't pre-declared
4557 * with a prototype, assume it will be AUTOLOADed,
4558 * skipping the prototype check
4560 if (exists || SvPOK(cv))
4561 cv_ckproto(cv, gv, ps);
4562 /* already defined (or promised)? */
4563 if (exists || GvASSUMECV(gv)) {
4564 if (!block && !attrs) {
4565 if (CvFLAGS(PL_compcv)) {
4566 /* might have had built-in attrs applied */
4567 CvFLAGS(cv) |= (CvFLAGS(PL_compcv) & CVf_BUILTIN_ATTRS);
4569 /* just a "sub foo;" when &foo is already defined */
4570 SAVEFREESV(PL_compcv);
4574 if (ckWARN(WARN_REDEFINE)
4576 && (!const_sv || sv_cmp(cv_const_sv(cv), const_sv))))
4578 const line_t oldline = CopLINE(PL_curcop);
4579 if (PL_copline != NOLINE)
4580 CopLINE_set(PL_curcop, PL_copline);
4581 Perl_warner(aTHX_ packWARN(WARN_REDEFINE),
4582 CvCONST(cv) ? "Constant subroutine %s redefined"
4583 : "Subroutine %s redefined", name);
4584 CopLINE_set(PL_curcop, oldline);
4592 SvREFCNT_inc_void_NN(const_sv);
4594 assert(!CvROOT(cv) && !CvCONST(cv));
4595 sv_setpvn((SV*)cv, "", 0); /* prototype is "" */
4596 CvXSUBANY(cv).any_ptr = const_sv;
4597 CvXSUB(cv) = const_sv_xsub;
4603 cv = newCONSTSUB(NULL, name, const_sv);
4606 SvREFCNT_dec(PL_compcv);
4608 PL_sub_generation++;
4615 /* Need to do a C<use attributes $stash_of_cv,\&cv,@attrs>
4616 * before we clobber PL_compcv.
4620 /* Might have had built-in attributes applied -- propagate them. */
4621 CvFLAGS(cv) |= (CvFLAGS(PL_compcv) & CVf_BUILTIN_ATTRS);
4622 if (CvGV(cv) && GvSTASH(CvGV(cv)))
4623 stash = GvSTASH(CvGV(cv));
4624 else if (CvSTASH(cv))
4625 stash = CvSTASH(cv);
4627 stash = PL_curstash;
4630 /* possibly about to re-define existing subr -- ignore old cv */
4631 rcv = (SV*)PL_compcv;
4632 if (name && GvSTASH(gv))
4633 stash = GvSTASH(gv);
4635 stash = PL_curstash;
4637 apply_attrs(stash, rcv, attrs, FALSE);
4639 if (cv) { /* must reuse cv if autoloaded */
4641 /* got here with just attrs -- work done, so bug out */
4642 SAVEFREESV(PL_compcv);
4645 /* transfer PL_compcv to cv */
4647 CvFLAGS(cv) = CvFLAGS(PL_compcv);
4648 if (!CvWEAKOUTSIDE(cv))
4649 SvREFCNT_dec(CvOUTSIDE(cv));
4650 CvOUTSIDE(cv) = CvOUTSIDE(PL_compcv);
4651 CvOUTSIDE_SEQ(cv) = CvOUTSIDE_SEQ(PL_compcv);
4652 CvOUTSIDE(PL_compcv) = 0;
4653 CvPADLIST(cv) = CvPADLIST(PL_compcv);
4654 CvPADLIST(PL_compcv) = 0;
4655 /* inner references to PL_compcv must be fixed up ... */
4656 pad_fixup_inner_anons(CvPADLIST(cv), PL_compcv, cv);
4657 /* ... before we throw it away */
4658 SvREFCNT_dec(PL_compcv);
4660 if (PERLDB_INTER)/* Advice debugger on the new sub. */
4661 ++PL_sub_generation;
4668 PL_sub_generation++;
4672 CvFILE_set_from_cop(cv, PL_curcop);
4673 CvSTASH(cv) = PL_curstash;
4676 sv_setpvn((SV*)cv, ps, ps_len);
4678 if (PL_error_count) {
4682 const char *s = strrchr(name, ':');
4684 if (strEQ(s, "BEGIN")) {
4685 const char not_safe[] =
4686 "BEGIN not safe after errors--compilation aborted";
4687 if (PL_in_eval & EVAL_KEEPERR)
4688 Perl_croak(aTHX_ not_safe);
4690 /* force display of errors found but not reported */
4691 sv_catpv(ERRSV, not_safe);
4692 Perl_croak(aTHX_ "%"SVf, ERRSV);
4701 CvROOT(cv) = newUNOP(OP_LEAVESUBLV, 0,
4702 mod(scalarseq(block), OP_LEAVESUBLV));
4705 /* This makes sub {}; work as expected. */
4706 if (block->op_type == OP_STUB) {
4708 block = newSTATEOP(0, NULL, 0);
4710 CvROOT(cv) = newUNOP(OP_LEAVESUB, 0, scalarseq(block));
4712 CvROOT(cv)->op_private |= OPpREFCOUNTED;
4713 OpREFCNT_set(CvROOT(cv), 1);
4714 CvSTART(cv) = LINKLIST(CvROOT(cv));
4715 CvROOT(cv)->op_next = 0;
4716 CALL_PEEP(CvSTART(cv));
4718 /* now that optimizer has done its work, adjust pad values */
4720 pad_tidy(CvCLONE(cv) ? padtidy_SUBCLONE : padtidy_SUB);
4723 assert(!CvCONST(cv));
4724 if (ps && !*ps && op_const_sv(block, cv))
4728 if (name || aname) {
4730 const char * const tname = (name ? name : aname);
4732 if (PERLDB_SUBLINE && PL_curstash != PL_debstash) {
4733 SV * const sv = newSV(0);
4734 SV * const tmpstr = sv_newmortal();
4735 GV * const db_postponed = gv_fetchpvs("DB::postponed",
4736 GV_ADDMULTI, SVt_PVHV);
4739 Perl_sv_setpvf(aTHX_ sv, "%s:%ld-%ld",
4741 (long)PL_subline, (long)CopLINE(PL_curcop));
4742 gv_efullname3(tmpstr, gv, NULL);
4743 hv_store(GvHV(PL_DBsub), SvPVX_const(tmpstr), SvCUR(tmpstr), sv, 0);
4744 hv = GvHVn(db_postponed);
4745 if (HvFILL(hv) > 0 && hv_exists(hv, SvPVX_const(tmpstr), SvCUR(tmpstr))) {
4746 CV * const pcv = GvCV(db_postponed);
4752 call_sv((SV*)pcv, G_DISCARD);
4757 if ((s = strrchr(tname,':')))
4762 if (*s != 'B' && *s != 'E' && *s != 'C' && *s != 'I')
4765 if (strEQ(s, "BEGIN") && !PL_error_count) {
4766 const I32 oldscope = PL_scopestack_ix;
4768 SAVECOPFILE(&PL_compiling);
4769 SAVECOPLINE(&PL_compiling);
4772 PL_beginav = newAV();
4773 DEBUG_x( dump_sub(gv) );
4774 av_push(PL_beginav, (SV*)cv);
4775 GvCV(gv) = 0; /* cv has been hijacked */
4776 call_list(oldscope, PL_beginav);
4778 PL_curcop = &PL_compiling;
4779 PL_compiling.op_private = (U8)(PL_hints & HINT_PRIVATE_MASK);
4782 else if (strEQ(s, "END") && !PL_error_count) {
4785 DEBUG_x( dump_sub(gv) );
4786 av_unshift(PL_endav, 1);
4787 av_store(PL_endav, 0, (SV*)cv);
4788 GvCV(gv) = 0; /* cv has been hijacked */
4790 else if (strEQ(s, "CHECK") && !PL_error_count) {
4792 PL_checkav = newAV();
4793 DEBUG_x( dump_sub(gv) );
4794 if (PL_main_start && ckWARN(WARN_VOID))
4795 Perl_warner(aTHX_ packWARN(WARN_VOID), "Too late to run CHECK block");
4796 av_unshift(PL_checkav, 1);
4797 av_store(PL_checkav, 0, (SV*)cv);
4798 GvCV(gv) = 0; /* cv has been hijacked */
4800 else if (strEQ(s, "INIT") && !PL_error_count) {
4802 PL_initav = newAV();
4803 DEBUG_x( dump_sub(gv) );
4804 if (PL_main_start && ckWARN(WARN_VOID))
4805 Perl_warner(aTHX_ packWARN(WARN_VOID), "Too late to run INIT block");
4806 av_push(PL_initav, (SV*)cv);
4807 GvCV(gv) = 0; /* cv has been hijacked */
4812 PL_copline = NOLINE;
4817 /* XXX unsafe for threads if eval_owner isn't held */
4819 =for apidoc newCONSTSUB
4821 Creates a constant sub equivalent to Perl C<sub FOO () { 123 }> which is
4822 eligible for inlining at compile-time.
4828 Perl_newCONSTSUB(pTHX_ HV *stash, const char *name, SV *sv)
4835 SAVECOPLINE(PL_curcop);
4836 CopLINE_set(PL_curcop, PL_copline);
4839 PL_hints &= ~HINT_BLOCK_SCOPE;
4842 SAVESPTR(PL_curstash);
4843 SAVECOPSTASH(PL_curcop);
4844 PL_curstash = stash;
4845 CopSTASH_set(PL_curcop,stash);
4848 cv = newXS(name, const_sv_xsub, savepv(CopFILE(PL_curcop)));
4849 CvXSUBANY(cv).any_ptr = sv;
4851 sv_setpvn((SV*)cv, "", 0); /* prototype is "" */
4855 CopSTASH_free(PL_curcop);
4863 =for apidoc U||newXS
4865 Used by C<xsubpp> to hook up XSUBs as Perl subs.
4871 Perl_newXS(pTHX_ const char *name, XSUBADDR_t subaddr, const char *filename)
4874 GV * const gv = gv_fetchpv(name ? name :
4875 (PL_curstash ? "__ANON__" : "__ANON__::__ANON__"),
4876 GV_ADDMULTI, SVt_PVCV);
4880 Perl_croak(aTHX_ "panic: no address for '%s' in '%s'", name, filename);
4882 if ((cv = (name ? GvCV(gv) : NULL))) {
4884 /* just a cached method */
4888 else if (CvROOT(cv) || CvXSUB(cv) || GvASSUMECV(gv)) {
4889 /* already defined (or promised) */
4890 /* XXX It's possible for this HvNAME_get to return null, and get passed into strEQ */
4891 if (ckWARN(WARN_REDEFINE)) {
4892 GV * const gvcv = CvGV(cv);
4894 HV * const stash = GvSTASH(gvcv);
4896 const char *redefined_name = HvNAME_get(stash);
4897 if ( strEQ(redefined_name,"autouse") ) {
4898 const line_t oldline = CopLINE(PL_curcop);
4899 if (PL_copline != NOLINE)
4900 CopLINE_set(PL_curcop, PL_copline);
4901 Perl_warner(aTHX_ packWARN(WARN_REDEFINE),
4902 CvCONST(cv) ? "Constant subroutine %s redefined"
4903 : "Subroutine %s redefined"
4905 CopLINE_set(PL_curcop, oldline);
4915 if (cv) /* must reuse cv if autoloaded */
4919 sv_upgrade((SV *)cv, SVt_PVCV);
4923 PL_sub_generation++;
4927 (void)gv_fetchfile(filename);
4928 CvFILE(cv) = (char *)filename; /* NOTE: not copied, as it is expected to be
4929 an external constant string */
4931 CvXSUB(cv) = subaddr;
4934 const char *s = strrchr(name,':');
4940 if (*s != 'B' && *s != 'E' && *s != 'C' && *s != 'I')
4943 if (strEQ(s, "BEGIN")) {
4945 PL_beginav = newAV();
4946 av_push(PL_beginav, (SV*)cv);
4947 GvCV(gv) = 0; /* cv has been hijacked */
4949 else if (strEQ(s, "END")) {
4952 av_unshift(PL_endav, 1);
4953 av_store(PL_endav, 0, (SV*)cv);
4954 GvCV(gv) = 0; /* cv has been hijacked */
4956 else if (strEQ(s, "CHECK")) {
4958 PL_checkav = newAV();
4959 if (PL_main_start && ckWARN(WARN_VOID))
4960 Perl_warner(aTHX_ packWARN(WARN_VOID), "Too late to run CHECK block");
4961 av_unshift(PL_checkav, 1);
4962 av_store(PL_checkav, 0, (SV*)cv);
4963 GvCV(gv) = 0; /* cv has been hijacked */
4965 else if (strEQ(s, "INIT")) {
4967 PL_initav = newAV();
4968 if (PL_main_start && ckWARN(WARN_VOID))
4969 Perl_warner(aTHX_ packWARN(WARN_VOID), "Too late to run INIT block");
4970 av_push(PL_initav, (SV*)cv);
4971 GvCV(gv) = 0; /* cv has been hijacked */
4982 Perl_newFORM(pTHX_ I32 floor, OP *o, OP *block)
4988 ? gv_fetchsv(cSVOPo->op_sv, GV_ADD, SVt_PVFM)
4989 : gv_fetchpvs("STDOUT", GV_ADD|GV_NOTQUAL, SVt_PVFM);
4991 #ifdef GV_UNIQUE_CHECK
4993 Perl_croak(aTHX_ "Bad symbol for form (GV is unique)");
4997 if ((cv = GvFORM(gv))) {
4998 if (ckWARN(WARN_REDEFINE)) {
4999 const line_t oldline = CopLINE(PL_curcop);
5000 if (PL_copline != NOLINE)
5001 CopLINE_set(PL_curcop, PL_copline);
5002 Perl_warner(aTHX_ packWARN(WARN_REDEFINE),
5003 o ? "Format %"SVf" redefined"
5004 : "Format STDOUT redefined" ,cSVOPo->op_sv);
5005 CopLINE_set(PL_curcop, oldline);
5012 CvFILE_set_from_cop(cv, PL_curcop);
5015 pad_tidy(padtidy_FORMAT);
5016 CvROOT(cv) = newUNOP(OP_LEAVEWRITE, 0, scalarseq(block));
5017 CvROOT(cv)->op_private |= OPpREFCOUNTED;
5018 OpREFCNT_set(CvROOT(cv), 1);
5019 CvSTART(cv) = LINKLIST(CvROOT(cv));
5020 CvROOT(cv)->op_next = 0;
5021 CALL_PEEP(CvSTART(cv));
5023 PL_copline = NOLINE;
5028 Perl_newANONLIST(pTHX_ OP *o)
5030 return newUNOP(OP_REFGEN, 0,
5031 mod(list(convert(OP_ANONLIST, 0, o)), OP_REFGEN));
5035 Perl_newANONHASH(pTHX_ OP *o)
5037 return newUNOP(OP_REFGEN, 0,
5038 mod(list(convert(OP_ANONHASH, 0, o)), OP_REFGEN));
5042 Perl_newANONSUB(pTHX_ I32 floor, OP *proto, OP *block)
5044 return newANONATTRSUB(floor, proto, NULL, block);
5048 Perl_newANONATTRSUB(pTHX_ I32 floor, OP *proto, OP *attrs, OP *block)
5050 return newUNOP(OP_REFGEN, 0,
5051 newSVOP(OP_ANONCODE, 0,
5052 (SV*)newATTRSUB(floor, 0, proto, attrs, block)));
5056 Perl_oopsAV(pTHX_ OP *o)
5059 switch (o->op_type) {
5061 o->op_type = OP_PADAV;
5062 o->op_ppaddr = PL_ppaddr[OP_PADAV];
5063 return ref(o, OP_RV2AV);
5066 o->op_type = OP_RV2AV;
5067 o->op_ppaddr = PL_ppaddr[OP_RV2AV];
5072 if (ckWARN_d(WARN_INTERNAL))
5073 Perl_warner(aTHX_ packWARN(WARN_INTERNAL), "oops: oopsAV");
5080 Perl_oopsHV(pTHX_ OP *o)
5083 switch (o->op_type) {
5086 o->op_type = OP_PADHV;
5087 o->op_ppaddr = PL_ppaddr[OP_PADHV];
5088 return ref(o, OP_RV2HV);
5092 o->op_type = OP_RV2HV;
5093 o->op_ppaddr = PL_ppaddr[OP_RV2HV];
5098 if (ckWARN_d(WARN_INTERNAL))
5099 Perl_warner(aTHX_ packWARN(WARN_INTERNAL), "oops: oopsHV");
5106 Perl_newAVREF(pTHX_ OP *o)
5109 if (o->op_type == OP_PADANY) {
5110 o->op_type = OP_PADAV;
5111 o->op_ppaddr = PL_ppaddr[OP_PADAV];
5114 else if ((o->op_type == OP_RV2AV || o->op_type == OP_PADAV)
5115 && ckWARN(WARN_DEPRECATED)) {
5116 Perl_warner(aTHX_ packWARN(WARN_DEPRECATED),
5117 "Using an array as a reference is deprecated");
5119 return newUNOP(OP_RV2AV, 0, scalar(o));
5123 Perl_newGVREF(pTHX_ I32 type, OP *o)
5125 if (type == OP_MAPSTART || type == OP_GREPSTART || type == OP_SORT)
5126 return newUNOP(OP_NULL, 0, o);
5127 return ref(newUNOP(OP_RV2GV, OPf_REF, o), type);
5131 Perl_newHVREF(pTHX_ OP *o)
5134 if (o->op_type == OP_PADANY) {
5135 o->op_type = OP_PADHV;
5136 o->op_ppaddr = PL_ppaddr[OP_PADHV];
5139 else if ((o->op_type == OP_RV2HV || o->op_type == OP_PADHV)
5140 && ckWARN(WARN_DEPRECATED)) {
5141 Perl_warner(aTHX_ packWARN(WARN_DEPRECATED),
5142 "Using a hash as a reference is deprecated");
5144 return newUNOP(OP_RV2HV, 0, scalar(o));
5148 Perl_newCVREF(pTHX_ I32 flags, OP *o)
5150 return newUNOP(OP_RV2CV, flags, scalar(o));
5154 Perl_newSVREF(pTHX_ OP *o)
5157 if (o->op_type == OP_PADANY) {
5158 o->op_type = OP_PADSV;
5159 o->op_ppaddr = PL_ppaddr[OP_PADSV];
5162 else if (o->op_type == OP_THREADSV && !(o->op_flags & OPpDONE_SVREF)) {
5163 o->op_flags |= OPpDONE_SVREF;
5166 return newUNOP(OP_RV2SV, 0, scalar(o));
5169 /* Check routines. See the comments at the top of this file for details
5170 * on when these are called */
5173 Perl_ck_anoncode(pTHX_ OP *o)
5175 cSVOPo->op_targ = pad_add_anon(cSVOPo->op_sv, o->op_type);
5176 cSVOPo->op_sv = NULL;
5181 Perl_ck_bitop(pTHX_ OP *o)
5184 #define OP_IS_NUMCOMPARE(op) \
5185 ((op) == OP_LT || (op) == OP_I_LT || \
5186 (op) == OP_GT || (op) == OP_I_GT || \
5187 (op) == OP_LE || (op) == OP_I_LE || \
5188 (op) == OP_GE || (op) == OP_I_GE || \
5189 (op) == OP_EQ || (op) == OP_I_EQ || \
5190 (op) == OP_NE || (op) == OP_I_NE || \
5191 (op) == OP_NCMP || (op) == OP_I_NCMP)
5192 o->op_private = (U8)(PL_hints & HINT_PRIVATE_MASK);
5193 if (!(o->op_flags & OPf_STACKED) /* Not an assignment */
5194 && (o->op_type == OP_BIT_OR
5195 || o->op_type == OP_BIT_AND
5196 || o->op_type == OP_BIT_XOR))
5198 const OP * const left = cBINOPo->op_first;
5199 const OP * const right = left->op_sibling;
5200 if ((OP_IS_NUMCOMPARE(left->op_type) &&
5201 (left->op_flags & OPf_PARENS) == 0) ||
5202 (OP_IS_NUMCOMPARE(right->op_type) &&
5203 (right->op_flags & OPf_PARENS) == 0))
5204 if (ckWARN(WARN_PRECEDENCE))
5205 Perl_warner(aTHX_ packWARN(WARN_PRECEDENCE),
5206 "Possible precedence problem on bitwise %c operator",
5207 o->op_type == OP_BIT_OR ? '|'
5208 : o->op_type == OP_BIT_AND ? '&' : '^'
5215 Perl_ck_concat(pTHX_ OP *o)
5217 const OP * const kid = cUNOPo->op_first;
5218 PERL_UNUSED_CONTEXT;
5219 if (kid->op_type == OP_CONCAT && !(kid->op_private & OPpTARGET_MY) &&
5220 !(kUNOP->op_first->op_flags & OPf_MOD))
5221 o->op_flags |= OPf_STACKED;
5226 Perl_ck_spair(pTHX_ OP *o)
5229 if (o->op_flags & OPf_KIDS) {
5232 const OPCODE type = o->op_type;
5233 o = modkids(ck_fun(o), type);
5234 kid = cUNOPo->op_first;
5235 newop = kUNOP->op_first->op_sibling;
5237 (newop->op_sibling ||
5238 !(PL_opargs[newop->op_type] & OA_RETSCALAR) ||
5239 newop->op_type == OP_PADAV || newop->op_type == OP_PADHV ||
5240 newop->op_type == OP_RV2AV || newop->op_type == OP_RV2HV)) {
5244 op_free(kUNOP->op_first);
5245 kUNOP->op_first = newop;
5247 o->op_ppaddr = PL_ppaddr[++o->op_type];
5252 Perl_ck_delete(pTHX_ OP *o)
5256 if (o->op_flags & OPf_KIDS) {
5257 OP * const kid = cUNOPo->op_first;
5258 switch (kid->op_type) {
5260 o->op_flags |= OPf_SPECIAL;
5263 o->op_private |= OPpSLICE;
5266 o->op_flags |= OPf_SPECIAL;
5271 Perl_croak(aTHX_ "%s argument is not a HASH or ARRAY element or slice",
5280 Perl_ck_die(pTHX_ OP *o)
5283 if (VMSISH_HUSHED) o->op_private |= OPpHUSH_VMSISH;
5289 Perl_ck_eof(pTHX_ OP *o)
5292 const I32 type = o->op_type;
5294 if (o->op_flags & OPf_KIDS) {
5295 if (cLISTOPo->op_first->op_type == OP_STUB) {
5297 o = newUNOP(type, OPf_SPECIAL, newGVOP(OP_GV, 0, PL_argvgv));
5305 Perl_ck_eval(pTHX_ OP *o)
5308 PL_hints |= HINT_BLOCK_SCOPE;
5309 if (o->op_flags & OPf_KIDS) {
5310 SVOP * const kid = (SVOP*)cUNOPo->op_first;
5313 o->op_flags &= ~OPf_KIDS;
5316 else if (kid->op_type == OP_LINESEQ || kid->op_type == OP_STUB) {
5319 cUNOPo->op_first = 0;
5322 NewOp(1101, enter, 1, LOGOP);
5323 enter->op_type = OP_ENTERTRY;
5324 enter->op_ppaddr = PL_ppaddr[OP_ENTERTRY];
5325 enter->op_private = 0;
5327 /* establish postfix order */
5328 enter->op_next = (OP*)enter;
5330 o = prepend_elem(OP_LINESEQ, (OP*)enter, (OP*)kid);
5331 o->op_type = OP_LEAVETRY;
5332 o->op_ppaddr = PL_ppaddr[OP_LEAVETRY];
5333 enter->op_other = o;
5343 o = newUNOP(OP_ENTEREVAL, 0, newDEFSVOP());
5345 o->op_targ = (PADOFFSET)PL_hints;
5346 if ((PL_hints & HINT_LOCALIZE_HH) != 0 && GvHV(PL_hintgv)) {
5347 /* Store a copy of %^H that pp_entereval can pick up */
5348 OP *hhop = newSVOP(OP_CONST, 0, (SV*)newHVhv(GvHV(PL_hintgv)));
5349 cUNOPo->op_first->op_sibling = hhop;
5350 o->op_private |= OPpEVAL_HAS_HH;
5356 Perl_ck_exit(pTHX_ OP *o)
5359 HV * const table = GvHV(PL_hintgv);
5361 SV * const * const svp = hv_fetchs(table, "vmsish_exit", FALSE);
5362 if (svp && *svp && SvTRUE(*svp))
5363 o->op_private |= OPpEXIT_VMSISH;
5365 if (VMSISH_HUSHED) o->op_private |= OPpHUSH_VMSISH;
5371 Perl_ck_exec(pTHX_ OP *o)
5373 if (o->op_flags & OPf_STACKED) {
5376 kid = cUNOPo->op_first->op_sibling;
5377 if (kid->op_type == OP_RV2GV)
5386 Perl_ck_exists(pTHX_ OP *o)
5390 if (o->op_flags & OPf_KIDS) {
5391 OP * const kid = cUNOPo->op_first;
5392 if (kid->op_type == OP_ENTERSUB) {
5393 (void) ref(kid, o->op_type);
5394 if (kid->op_type != OP_RV2CV && !PL_error_count)
5395 Perl_croak(aTHX_ "%s argument is not a subroutine name",
5397 o->op_private |= OPpEXISTS_SUB;
5399 else if (kid->op_type == OP_AELEM)
5400 o->op_flags |= OPf_SPECIAL;
5401 else if (kid->op_type != OP_HELEM)
5402 Perl_croak(aTHX_ "%s argument is not a HASH or ARRAY element",
5410 Perl_ck_rvconst(pTHX_ register OP *o)
5413 SVOP * const kid = (SVOP*)cUNOPo->op_first;
5415 o->op_private |= (PL_hints & HINT_STRICT_REFS);
5416 if (o->op_type == OP_RV2CV)
5417 o->op_private &= ~1;
5419 if (kid->op_type == OP_CONST) {
5422 SV * const kidsv = kid->op_sv;
5424 /* Is it a constant from cv_const_sv()? */
5425 if (SvROK(kidsv) && SvREADONLY(kidsv)) {
5426 SV * const rsv = SvRV(kidsv);
5427 const int svtype = SvTYPE(rsv);
5428 const char *badtype = NULL;
5430 switch (o->op_type) {
5432 if (svtype > SVt_PVMG)
5433 badtype = "a SCALAR";
5436 if (svtype != SVt_PVAV)
5437 badtype = "an ARRAY";
5440 if (svtype != SVt_PVHV)
5444 if (svtype != SVt_PVCV)
5449 Perl_croak(aTHX_ "Constant is not %s reference", badtype);
5452 else if ((o->op_type == OP_RV2HV || o->op_type == OP_RV2SV) &&
5453 (PL_hints & HINT_STRICT_REFS) && SvPOK(kidsv)) {
5454 /* If this is an access to a stash, disable "strict refs", because
5455 * stashes aren't auto-vivified at compile-time (unless we store
5456 * symbols in them), and we don't want to produce a run-time
5457 * stricture error when auto-vivifying the stash. */
5458 const char *s = SvPV_nolen(kidsv);
5459 const STRLEN l = SvCUR(kidsv);
5460 if (l > 1 && s[l-1] == ':' && s[l-2] == ':')
5461 o->op_private &= ~HINT_STRICT_REFS;
5463 if ((o->op_private & HINT_STRICT_REFS) && (kid->op_private & OPpCONST_BARE)) {
5464 const char *badthing;
5465 switch (o->op_type) {
5467 badthing = "a SCALAR";
5470 badthing = "an ARRAY";
5473 badthing = "a HASH";
5481 "Can't use bareword (\"%"SVf"\") as %s ref while \"strict refs\" in use",
5485 * This is a little tricky. We only want to add the symbol if we
5486 * didn't add it in the lexer. Otherwise we get duplicate strict
5487 * warnings. But if we didn't add it in the lexer, we must at
5488 * least pretend like we wanted to add it even if it existed before,
5489 * or we get possible typo warnings. OPpCONST_ENTERED says
5490 * whether the lexer already added THIS instance of this symbol.
5492 iscv = (o->op_type == OP_RV2CV) * 2;
5494 gv = gv_fetchsv(kidsv,
5495 iscv | !(kid->op_private & OPpCONST_ENTERED),
5498 : o->op_type == OP_RV2SV
5500 : o->op_type == OP_RV2AV
5502 : o->op_type == OP_RV2HV
5505 } while (!gv && !(kid->op_private & OPpCONST_ENTERED) && !iscv++);
5507 kid->op_type = OP_GV;
5508 SvREFCNT_dec(kid->op_sv);
5510 /* XXX hack: dependence on sizeof(PADOP) <= sizeof(SVOP) */
5511 kPADOP->op_padix = pad_alloc(OP_GV, SVs_PADTMP);
5512 SvREFCNT_dec(PAD_SVl(kPADOP->op_padix));
5514 PAD_SETSV(kPADOP->op_padix, (SV*) SvREFCNT_inc_simple_NN(gv));
5516 kid->op_sv = SvREFCNT_inc_simple_NN(gv);
5518 kid->op_private = 0;
5519 kid->op_ppaddr = PL_ppaddr[OP_GV];
5526 Perl_ck_ftst(pTHX_ OP *o)
5529 const I32 type = o->op_type;
5531 if (o->op_flags & OPf_REF) {
5534 else if (o->op_flags & OPf_KIDS && cUNOPo->op_first->op_type != OP_STUB) {
5535 SVOP * const kid = (SVOP*)cUNOPo->op_first;
5537 if (kid->op_type == OP_CONST && (kid->op_private & OPpCONST_BARE)) {
5538 OP * const newop = newGVOP(type, OPf_REF,
5539 gv_fetchsv(kid->op_sv, GV_ADD, SVt_PVIO));
5545 if ((PL_hints & HINT_FILETEST_ACCESS) &&
5546 OP_IS_FILETEST_ACCESS(o))
5547 o->op_private |= OPpFT_ACCESS;
5549 if (PL_check[kid->op_type] == MEMBER_TO_FPTR(Perl_ck_ftst)
5550 && kid->op_type != OP_STAT && kid->op_type != OP_LSTAT)
5551 o->op_private |= OPpFT_STACKED;
5555 if (type == OP_FTTTY)
5556 o = newGVOP(type, OPf_REF, PL_stdingv);
5558 o = newUNOP(type, 0, newDEFSVOP());
5564 Perl_ck_fun(pTHX_ OP *o)
5567 const int type = o->op_type;
5568 register I32 oa = PL_opargs[type] >> OASHIFT;
5570 if (o->op_flags & OPf_STACKED) {
5571 if ((oa & OA_OPTIONAL) && (oa >> 4) && !((oa >> 4) & OA_OPTIONAL))
5574 return no_fh_allowed(o);
5577 if (o->op_flags & OPf_KIDS) {
5578 OP **tokid = &cLISTOPo->op_first;
5579 register OP *kid = cLISTOPo->op_first;
5583 if (kid->op_type == OP_PUSHMARK ||
5584 (kid->op_type == OP_NULL && kid->op_targ == OP_PUSHMARK))
5586 tokid = &kid->op_sibling;
5587 kid = kid->op_sibling;
5589 if (!kid && PL_opargs[type] & OA_DEFGV)
5590 *tokid = kid = newDEFSVOP();
5594 sibl = kid->op_sibling;
5597 /* list seen where single (scalar) arg expected? */
5598 if (numargs == 1 && !(oa >> 4)
5599 && kid->op_type == OP_LIST && type != OP_SCALAR)
5601 return too_many_arguments(o,PL_op_desc[type]);
5614 if ((type == OP_PUSH || type == OP_UNSHIFT)
5615 && !kid->op_sibling && ckWARN(WARN_SYNTAX))
5616 Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
5617 "Useless use of %s with no values",
5620 if (kid->op_type == OP_CONST &&
5621 (kid->op_private & OPpCONST_BARE))
5623 OP * const newop = newAVREF(newGVOP(OP_GV, 0,
5624 gv_fetchsv(((SVOP*)kid)->op_sv, GV_ADD, SVt_PVAV) ));
5625 if (ckWARN2(WARN_DEPRECATED, WARN_SYNTAX))
5626 Perl_warner(aTHX_ packWARN2(WARN_DEPRECATED, WARN_SYNTAX),
5627 "Array @%"SVf" missing the @ in argument %"IVdf" of %s()",
5628 ((SVOP*)kid)->op_sv, (IV)numargs, PL_op_desc[type]);
5631 kid->op_sibling = sibl;
5634 else if (kid->op_type != OP_RV2AV && kid->op_type != OP_PADAV)
5635 bad_type(numargs, "array", PL_op_desc[type], kid);
5639 if (kid->op_type == OP_CONST &&
5640 (kid->op_private & OPpCONST_BARE))
5642 OP * const newop = newHVREF(newGVOP(OP_GV, 0,
5643 gv_fetchsv(((SVOP*)kid)->op_sv, GV_ADD, SVt_PVHV) ));
5644 if (ckWARN2(WARN_DEPRECATED, WARN_SYNTAX))
5645 Perl_warner(aTHX_ packWARN2(WARN_DEPRECATED, WARN_SYNTAX),
5646 "Hash %%%"SVf" missing the %% in argument %"IVdf" of %s()",
5647 ((SVOP*)kid)->op_sv, (IV)numargs, PL_op_desc[type]);
5650 kid->op_sibling = sibl;
5653 else if (kid->op_type != OP_RV2HV && kid->op_type != OP_PADHV)
5654 bad_type(numargs, "hash", PL_op_desc[type], kid);
5659 OP * const newop = newUNOP(OP_NULL, 0, kid);
5660 kid->op_sibling = 0;
5662 newop->op_next = newop;
5664 kid->op_sibling = sibl;
5669 if (kid->op_type != OP_GV && kid->op_type != OP_RV2GV) {
5670 if (kid->op_type == OP_CONST &&
5671 (kid->op_private & OPpCONST_BARE))
5673 OP * const newop = newGVOP(OP_GV, 0,
5674 gv_fetchsv(((SVOP*)kid)->op_sv, GV_ADD, SVt_PVIO));
5675 if (!(o->op_private & 1) && /* if not unop */
5676 kid == cLISTOPo->op_last)
5677 cLISTOPo->op_last = newop;
5681 else if (kid->op_type == OP_READLINE) {
5682 /* neophyte patrol: open(<FH>), close(<FH>) etc. */
5683 bad_type(numargs, "HANDLE", OP_DESC(o), kid);
5686 I32 flags = OPf_SPECIAL;
5690 /* is this op a FH constructor? */
5691 if (is_handle_constructor(o,numargs)) {
5692 const char *name = NULL;
5696 /* Set a flag to tell rv2gv to vivify
5697 * need to "prove" flag does not mean something
5698 * else already - NI-S 1999/05/07
5701 if (kid->op_type == OP_PADSV) {
5702 name = PAD_COMPNAME_PV(kid->op_targ);
5703 /* SvCUR of a pad namesv can't be trusted
5704 * (see PL_generation), so calc its length
5710 else if (kid->op_type == OP_RV2SV
5711 && kUNOP->op_first->op_type == OP_GV)
5713 GV * const gv = cGVOPx_gv(kUNOP->op_first);
5715 len = GvNAMELEN(gv);
5717 else if (kid->op_type == OP_AELEM
5718 || kid->op_type == OP_HELEM)
5720 OP *op = ((BINOP*)kid)->op_first;
5724 const char * const a =
5725 kid->op_type == OP_AELEM ?
5727 if (((op->op_type == OP_RV2AV) ||
5728 (op->op_type == OP_RV2HV)) &&
5729 (op = ((UNOP*)op)->op_first) &&
5730 (op->op_type == OP_GV)) {
5731 /* packagevar $a[] or $h{} */
5732 GV * const gv = cGVOPx_gv(op);
5740 else if (op->op_type == OP_PADAV
5741 || op->op_type == OP_PADHV) {
5742 /* lexicalvar $a[] or $h{} */
5743 const char * const padname =
5744 PAD_COMPNAME_PV(op->op_targ);
5753 name = SvPV_const(tmpstr, len);
5758 name = "__ANONIO__";
5765 targ = pad_alloc(OP_RV2GV, SVs_PADTMP);
5766 namesv = PAD_SVl(targ);
5767 SvUPGRADE(namesv, SVt_PV);
5769 sv_setpvn(namesv, "$", 1);
5770 sv_catpvn(namesv, name, len);
5773 kid->op_sibling = 0;
5774 kid = newUNOP(OP_RV2GV, flags, scalar(kid));
5775 kid->op_targ = targ;
5776 kid->op_private |= priv;
5778 kid->op_sibling = sibl;
5784 mod(scalar(kid), type);
5788 tokid = &kid->op_sibling;
5789 kid = kid->op_sibling;
5791 o->op_private |= numargs;
5793 return too_many_arguments(o,OP_DESC(o));
5796 else if (PL_opargs[type] & OA_DEFGV) {
5798 return newUNOP(type, 0, newDEFSVOP());
5802 while (oa & OA_OPTIONAL)
5804 if (oa && oa != OA_LIST)
5805 return too_few_arguments(o,OP_DESC(o));
5811 Perl_ck_glob(pTHX_ OP *o)
5817 if ((o->op_flags & OPf_KIDS) && !cLISTOPo->op_first->op_sibling)
5818 append_elem(OP_GLOB, o, newDEFSVOP());
5820 if (!((gv = gv_fetchpvs("glob", GV_NOTQUAL, SVt_PVCV))
5821 && GvCVu(gv) && GvIMPORTED_CV(gv)))
5823 gv = gv_fetchpvs("CORE::GLOBAL::glob", 0, SVt_PVCV);
5826 #if !defined(PERL_EXTERNAL_GLOB)
5827 /* XXX this can be tightened up and made more failsafe. */
5828 if (!(gv && GvCVu(gv) && GvIMPORTED_CV(gv))) {
5831 Perl_load_module(aTHX_ PERL_LOADMOD_NOIMPORT,
5832 newSVpvs("File::Glob"), NULL, NULL, NULL);
5833 gv = gv_fetchpvs("CORE::GLOBAL::glob", 0, SVt_PVCV);
5834 glob_gv = gv_fetchpvs("File::Glob::csh_glob", 0, SVt_PVCV);
5835 GvCV(gv) = GvCV(glob_gv);
5836 SvREFCNT_inc_void((SV*)GvCV(gv));
5837 GvIMPORTED_CV_on(gv);
5840 #endif /* PERL_EXTERNAL_GLOB */
5842 if (gv && GvCVu(gv) && GvIMPORTED_CV(gv)) {
5843 append_elem(OP_GLOB, o,
5844 newSVOP(OP_CONST, 0, newSViv(PL_glob_index++)));
5845 o->op_type = OP_LIST;
5846 o->op_ppaddr = PL_ppaddr[OP_LIST];
5847 cLISTOPo->op_first->op_type = OP_PUSHMARK;
5848 cLISTOPo->op_first->op_ppaddr = PL_ppaddr[OP_PUSHMARK];
5849 cLISTOPo->op_first->op_targ = 0;
5850 o = newUNOP(OP_ENTERSUB, OPf_STACKED,
5851 append_elem(OP_LIST, o,
5852 scalar(newUNOP(OP_RV2CV, 0,
5853 newGVOP(OP_GV, 0, gv)))));
5854 o = newUNOP(OP_NULL, 0, ck_subr(o));
5855 o->op_targ = OP_GLOB; /* hint at what it used to be */
5858 gv = newGVgen("main");
5860 append_elem(OP_GLOB, o, newGVOP(OP_GV, 0, gv));
5866 Perl_ck_grep(pTHX_ OP *o)
5871 const OPCODE type = o->op_type == OP_GREPSTART ? OP_GREPWHILE : OP_MAPWHILE;
5874 o->op_ppaddr = PL_ppaddr[OP_GREPSTART];
5875 NewOp(1101, gwop, 1, LOGOP);
5877 if (o->op_flags & OPf_STACKED) {
5880 kid = cLISTOPo->op_first->op_sibling;
5881 if (!cUNOPx(kid)->op_next)
5882 Perl_croak(aTHX_ "panic: ck_grep");
5883 for (k = cUNOPx(kid)->op_first; k; k = k->op_next) {
5886 kid->op_next = (OP*)gwop;
5887 o->op_flags &= ~OPf_STACKED;
5889 kid = cLISTOPo->op_first->op_sibling;
5890 if (type == OP_MAPWHILE)
5897 kid = cLISTOPo->op_first->op_sibling;
5898 if (kid->op_type != OP_NULL)
5899 Perl_croak(aTHX_ "panic: ck_grep");
5900 kid = kUNOP->op_first;
5902 gwop->op_type = type;
5903 gwop->op_ppaddr = PL_ppaddr[type];
5904 gwop->op_first = listkids(o);
5905 gwop->op_flags |= OPf_KIDS;
5906 gwop->op_other = LINKLIST(kid);
5907 kid->op_next = (OP*)gwop;
5908 offset = pad_findmy("$_");
5909 if (offset == NOT_IN_PAD || PAD_COMPNAME_FLAGS_isOUR(offset)) {
5910 o->op_private = gwop->op_private = 0;
5911 gwop->op_targ = pad_alloc(type, SVs_PADTMP);
5914 o->op_private = gwop->op_private = OPpGREP_LEX;
5915 gwop->op_targ = o->op_targ = offset;
5918 kid = cLISTOPo->op_first->op_sibling;
5919 if (!kid || !kid->op_sibling)
5920 return too_few_arguments(o,OP_DESC(o));
5921 for (kid = kid->op_sibling; kid; kid = kid->op_sibling)
5922 mod(kid, OP_GREPSTART);
5928 Perl_ck_index(pTHX_ OP *o)
5930 if (o->op_flags & OPf_KIDS) {
5931 OP *kid = cLISTOPo->op_first->op_sibling; /* get past pushmark */
5933 kid = kid->op_sibling; /* get past "big" */
5934 if (kid && kid->op_type == OP_CONST)
5935 fbm_compile(((SVOP*)kid)->op_sv, 0);
5941 Perl_ck_lengthconst(pTHX_ OP *o)
5943 /* XXX length optimization goes here */
5948 Perl_ck_lfun(pTHX_ OP *o)
5950 const OPCODE type = o->op_type;
5951 return modkids(ck_fun(o), type);
5955 Perl_ck_defined(pTHX_ OP *o) /* 19990527 MJD */
5957 if ((o->op_flags & OPf_KIDS) && ckWARN2(WARN_DEPRECATED, WARN_SYNTAX)) {
5958 switch (cUNOPo->op_first->op_type) {
5960 /* This is needed for
5961 if (defined %stash::)
5962 to work. Do not break Tk.
5964 break; /* Globals via GV can be undef */
5966 case OP_AASSIGN: /* Is this a good idea? */
5967 Perl_warner(aTHX_ packWARN2(WARN_DEPRECATED, WARN_SYNTAX),
5968 "defined(@array) is deprecated");
5969 Perl_warner(aTHX_ packWARN2(WARN_DEPRECATED, WARN_SYNTAX),
5970 "\t(Maybe you should just omit the defined()?)\n");
5973 /* This is needed for
5974 if (defined %stash::)
5975 to work. Do not break Tk.
5977 break; /* Globals via GV can be undef */
5979 Perl_warner(aTHX_ packWARN2(WARN_DEPRECATED, WARN_SYNTAX),
5980 "defined(%%hash) is deprecated");
5981 Perl_warner(aTHX_ packWARN2(WARN_DEPRECATED, WARN_SYNTAX),
5982 "\t(Maybe you should just omit the defined()?)\n");
5993 Perl_ck_rfun(pTHX_ OP *o)
5995 const OPCODE type = o->op_type;
5996 return refkids(ck_fun(o), type);
6000 Perl_ck_listiob(pTHX_ OP *o)
6004 kid = cLISTOPo->op_first;
6007 kid = cLISTOPo->op_first;
6009 if (kid->op_type == OP_PUSHMARK)
6010 kid = kid->op_sibling;
6011 if (kid && o->op_flags & OPf_STACKED)
6012 kid = kid->op_sibling;
6013 else if (kid && !kid->op_sibling) { /* print HANDLE; */
6014 if (kid->op_type == OP_CONST && kid->op_private & OPpCONST_BARE) {
6015 o->op_flags |= OPf_STACKED; /* make it a filehandle */
6016 kid = newUNOP(OP_RV2GV, OPf_REF, scalar(kid));
6017 cLISTOPo->op_first->op_sibling = kid;
6018 cLISTOPo->op_last = kid;
6019 kid = kid->op_sibling;
6024 append_elem(o->op_type, o, newDEFSVOP());
6030 Perl_ck_say(pTHX_ OP *o)
6033 o->op_type = OP_PRINT;
6034 cLISTOPo->op_last = cLISTOPo->op_last->op_sibling
6035 = newSVOP(OP_CONST, 0, newSVpvs("\n"));
6040 Perl_ck_smartmatch(pTHX_ OP *o)
6043 if (0 == (o->op_flags & OPf_SPECIAL)) {
6044 OP *first = cBINOPo->op_first;
6045 OP *second = first->op_sibling;
6047 /* Implicitly take a reference to an array or hash */
6048 first->op_sibling = NULL;
6049 first = cBINOPo->op_first = ref_array_or_hash(first);
6050 second = first->op_sibling = ref_array_or_hash(second);
6052 /* Implicitly take a reference to a regular expression */
6053 if (first->op_type == OP_MATCH) {
6054 first->op_type = OP_QR;
6055 first->op_ppaddr = PL_ppaddr[OP_QR];
6057 if (second->op_type == OP_MATCH) {
6058 second->op_type = OP_QR;
6059 second->op_ppaddr = PL_ppaddr[OP_QR];
6068 Perl_ck_sassign(pTHX_ OP *o)
6070 OP *kid = cLISTOPo->op_first;
6071 /* has a disposable target? */
6072 if ((PL_opargs[kid->op_type] & OA_TARGLEX)
6073 && !(kid->op_flags & OPf_STACKED)
6074 /* Cannot steal the second time! */
6075 && !(kid->op_private & OPpTARGET_MY))
6077 OP * const kkid = kid->op_sibling;
6079 /* Can just relocate the target. */
6080 if (kkid && kkid->op_type == OP_PADSV
6081 && !(kkid->op_private & OPpLVAL_INTRO))
6083 kid->op_targ = kkid->op_targ;
6085 /* Now we do not need PADSV and SASSIGN. */
6086 kid->op_sibling = o->op_sibling; /* NULL */
6087 cLISTOPo->op_first = NULL;
6090 kid->op_private |= OPpTARGET_MY; /* Used for context settings */
6098 Perl_ck_match(pTHX_ OP *o)
6101 if (o->op_type != OP_QR && PL_compcv) {
6102 const I32 offset = pad_findmy("$_");
6103 if (offset != NOT_IN_PAD && !(PAD_COMPNAME_FLAGS_isOUR(offset))) {
6104 o->op_targ = offset;
6105 o->op_private |= OPpTARGET_MY;
6108 if (o->op_type == OP_MATCH || o->op_type == OP_QR)
6109 o->op_private |= OPpRUNTIME;
6114 Perl_ck_method(pTHX_ OP *o)
6116 OP * const kid = cUNOPo->op_first;
6117 if (kid->op_type == OP_CONST) {
6118 SV* sv = kSVOP->op_sv;
6119 const char * const method = SvPVX_const(sv);
6120 if (!(strchr(method, ':') || strchr(method, '\''))) {
6122 if (!SvREADONLY(sv) || !SvFAKE(sv)) {
6123 sv = newSVpvn_share(method, SvCUR(sv), 0);
6126 kSVOP->op_sv = NULL;
6128 cmop = newSVOP(OP_METHOD_NAMED, 0, sv);
6137 Perl_ck_null(pTHX_ OP *o)
6139 PERL_UNUSED_CONTEXT;
6144 Perl_ck_open(pTHX_ OP *o)
6147 HV * const table = GvHV(PL_hintgv);
6149 SV **svp = hv_fetchs(table, "open_IN", FALSE);
6151 const I32 mode = mode_from_discipline(*svp);
6152 if (mode & O_BINARY)
6153 o->op_private |= OPpOPEN_IN_RAW;
6154 else if (mode & O_TEXT)
6155 o->op_private |= OPpOPEN_IN_CRLF;
6158 svp = hv_fetchs(table, "open_OUT", FALSE);
6160 const I32 mode = mode_from_discipline(*svp);
6161 if (mode & O_BINARY)
6162 o->op_private |= OPpOPEN_OUT_RAW;
6163 else if (mode & O_TEXT)
6164 o->op_private |= OPpOPEN_OUT_CRLF;
6167 if (o->op_type == OP_BACKTICK)
6170 /* In case of three-arg dup open remove strictness
6171 * from the last arg if it is a bareword. */
6172 OP * const first = cLISTOPx(o)->op_first; /* The pushmark. */
6173 OP * const last = cLISTOPx(o)->op_last; /* The bareword. */
6177 if ((last->op_type == OP_CONST) && /* The bareword. */
6178 (last->op_private & OPpCONST_BARE) &&
6179 (last->op_private & OPpCONST_STRICT) &&
6180 (oa = first->op_sibling) && /* The fh. */
6181 (oa = oa->op_sibling) && /* The mode. */
6182 (oa->op_type == OP_CONST) &&
6183 SvPOK(((SVOP*)oa)->op_sv) &&
6184 (mode = SvPVX_const(((SVOP*)oa)->op_sv)) &&
6185 mode[0] == '>' && mode[1] == '&' && /* A dup open. */
6186 (last == oa->op_sibling)) /* The bareword. */
6187 last->op_private &= ~OPpCONST_STRICT;
6193 Perl_ck_repeat(pTHX_ OP *o)
6195 if (cBINOPo->op_first->op_flags & OPf_PARENS) {
6196 o->op_private |= OPpREPEAT_DOLIST;
6197 cBINOPo->op_first = force_list(cBINOPo->op_first);
6205 Perl_ck_require(pTHX_ OP *o)
6210 if (o->op_flags & OPf_KIDS) { /* Shall we supply missing .pm? */
6211 SVOP * const kid = (SVOP*)cUNOPo->op_first;
6213 if (kid->op_type == OP_CONST && (kid->op_private & OPpCONST_BARE)) {
6214 SV * const sv = kid->op_sv;
6215 U32 was_readonly = SvREADONLY(sv);
6220 sv_force_normal_flags(sv, 0);
6221 assert(!SvREADONLY(sv));
6228 for (s = SvPVX(sv); *s; s++) {
6229 if (*s == ':' && s[1] == ':') {
6230 const STRLEN len = strlen(s+2)+1;
6232 Move(s+2, s+1, len, char);
6233 SvCUR_set(sv, SvCUR(sv) - 1);
6236 sv_catpvs(sv, ".pm");
6237 SvFLAGS(sv) |= was_readonly;
6241 if (!(o->op_flags & OPf_SPECIAL)) { /* Wasn't written as CORE::require */
6242 /* handle override, if any */
6243 gv = gv_fetchpvs("require", GV_NOTQUAL, SVt_PVCV);
6244 if (!(gv && GvCVu(gv) && GvIMPORTED_CV(gv))) {
6245 GV * const * const gvp = (GV**)hv_fetchs(PL_globalstash, "require", FALSE);
6246 gv = gvp ? *gvp : NULL;
6250 if (gv && GvCVu(gv) && GvIMPORTED_CV(gv)) {
6251 OP * const kid = cUNOPo->op_first;
6252 cUNOPo->op_first = 0;
6254 return ck_subr(newUNOP(OP_ENTERSUB, OPf_STACKED,
6255 append_elem(OP_LIST, kid,
6256 scalar(newUNOP(OP_RV2CV, 0,
6265 Perl_ck_return(pTHX_ OP *o)
6268 if (CvLVALUE(PL_compcv)) {
6270 for (kid = cLISTOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
6271 mod(kid, OP_LEAVESUBLV);
6277 Perl_ck_select(pTHX_ OP *o)
6281 if (o->op_flags & OPf_KIDS) {
6282 kid = cLISTOPo->op_first->op_sibling; /* get past pushmark */
6283 if (kid && kid->op_sibling) {
6284 o->op_type = OP_SSELECT;
6285 o->op_ppaddr = PL_ppaddr[OP_SSELECT];
6287 return fold_constants(o);
6291 kid = cLISTOPo->op_first->op_sibling; /* get past pushmark */
6292 if (kid && kid->op_type == OP_RV2GV)
6293 kid->op_private &= ~HINT_STRICT_REFS;
6298 Perl_ck_shift(pTHX_ OP *o)
6301 const I32 type = o->op_type;
6303 if (!(o->op_flags & OPf_KIDS)) {
6307 argop = newUNOP(OP_RV2AV, 0,
6308 scalar(newGVOP(OP_GV, 0, CvUNIQUE(PL_compcv) ? PL_argvgv : PL_defgv)));
6309 return newUNOP(type, 0, scalar(argop));
6311 return scalar(modkids(ck_fun(o), type));
6315 Perl_ck_sort(pTHX_ OP *o)
6320 if (o->op_type == OP_SORT && (PL_hints & HINT_LOCALIZE_HH) != 0)
6322 HV * const hinthv = GvHV(PL_hintgv);
6324 SV ** const svp = hv_fetchs(hinthv, "sort", FALSE);
6326 const I32 sorthints = (I32)SvIV(*svp);
6327 if ((sorthints & HINT_SORT_QUICKSORT) != 0)
6328 o->op_private |= OPpSORT_QSORT;
6329 if ((sorthints & HINT_SORT_STABLE) != 0)
6330 o->op_private |= OPpSORT_STABLE;
6335 if (o->op_type == OP_SORT && o->op_flags & OPf_STACKED)
6337 firstkid = cLISTOPo->op_first->op_sibling; /* get past pushmark */
6338 if (o->op_flags & OPf_STACKED) { /* may have been cleared */
6340 OP *kid = cUNOPx(firstkid)->op_first; /* get past null */
6342 if (kid->op_type == OP_SCOPE || kid->op_type == OP_LEAVE) {
6344 if (kid->op_type == OP_SCOPE) {
6348 else if (kid->op_type == OP_LEAVE) {
6349 if (o->op_type == OP_SORT) {
6350 op_null(kid); /* wipe out leave */
6353 for (k = kLISTOP->op_first->op_next; k; k = k->op_next) {
6354 if (k->op_next == kid)
6356 /* don't descend into loops */
6357 else if (k->op_type == OP_ENTERLOOP
6358 || k->op_type == OP_ENTERITER)
6360 k = cLOOPx(k)->op_lastop;
6365 kid->op_next = 0; /* just disconnect the leave */
6366 k = kLISTOP->op_first;
6371 if (o->op_type == OP_SORT) {
6372 /* provide scalar context for comparison function/block */
6378 o->op_flags |= OPf_SPECIAL;
6380 else if (kid->op_type == OP_RV2SV || kid->op_type == OP_PADSV)
6383 firstkid = firstkid->op_sibling;
6386 /* provide list context for arguments */
6387 if (o->op_type == OP_SORT)
6394 S_simplify_sort(pTHX_ OP *o)
6397 register OP *kid = cLISTOPo->op_first->op_sibling; /* get past pushmark */
6402 if (!(o->op_flags & OPf_STACKED))
6404 GvMULTI_on(gv_fetchpvs("a", GV_ADD|GV_NOTQUAL, SVt_PV));
6405 GvMULTI_on(gv_fetchpvs("b", GV_ADD|GV_NOTQUAL, SVt_PV));
6406 kid = kUNOP->op_first; /* get past null */
6407 if (kid->op_type != OP_SCOPE)
6409 kid = kLISTOP->op_last; /* get past scope */
6410 switch(kid->op_type) {
6418 k = kid; /* remember this node*/
6419 if (kBINOP->op_first->op_type != OP_RV2SV)
6421 kid = kBINOP->op_first; /* get past cmp */
6422 if (kUNOP->op_first->op_type != OP_GV)
6424 kid = kUNOP->op_first; /* get past rv2sv */
6426 if (GvSTASH(gv) != PL_curstash)
6428 gvname = GvNAME(gv);
6429 if (*gvname == 'a' && gvname[1] == '\0')
6431 else if (*gvname == 'b' && gvname[1] == '\0')
6436 kid = k; /* back to cmp */
6437 if (kBINOP->op_last->op_type != OP_RV2SV)
6439 kid = kBINOP->op_last; /* down to 2nd arg */
6440 if (kUNOP->op_first->op_type != OP_GV)
6442 kid = kUNOP->op_first; /* get past rv2sv */
6444 if (GvSTASH(gv) != PL_curstash)
6446 gvname = GvNAME(gv);
6448 ? !(*gvname == 'a' && gvname[1] == '\0')
6449 : !(*gvname == 'b' && gvname[1] == '\0'))
6451 o->op_flags &= ~(OPf_STACKED | OPf_SPECIAL);
6453 o->op_private |= OPpSORT_DESCEND;
6454 if (k->op_type == OP_NCMP)
6455 o->op_private |= OPpSORT_NUMERIC;
6456 if (k->op_type == OP_I_NCMP)
6457 o->op_private |= OPpSORT_NUMERIC | OPpSORT_INTEGER;
6458 kid = cLISTOPo->op_first->op_sibling;
6459 cLISTOPo->op_first->op_sibling = kid->op_sibling; /* bypass old block */
6460 op_free(kid); /* then delete it */
6464 Perl_ck_split(pTHX_ OP *o)
6469 if (o->op_flags & OPf_STACKED)
6470 return no_fh_allowed(o);
6472 kid = cLISTOPo->op_first;
6473 if (kid->op_type != OP_NULL)
6474 Perl_croak(aTHX_ "panic: ck_split");
6475 kid = kid->op_sibling;
6476 op_free(cLISTOPo->op_first);
6477 cLISTOPo->op_first = kid;
6479 cLISTOPo->op_first = kid = newSVOP(OP_CONST, 0, newSVpvs(" "));
6480 cLISTOPo->op_last = kid; /* There was only one element previously */
6483 if (kid->op_type != OP_MATCH || kid->op_flags & OPf_STACKED) {
6484 OP * const sibl = kid->op_sibling;
6485 kid->op_sibling = 0;
6486 kid = pmruntime( newPMOP(OP_MATCH, OPf_SPECIAL), kid, 0);
6487 if (cLISTOPo->op_first == cLISTOPo->op_last)
6488 cLISTOPo->op_last = kid;
6489 cLISTOPo->op_first = kid;
6490 kid->op_sibling = sibl;
6493 kid->op_type = OP_PUSHRE;
6494 kid->op_ppaddr = PL_ppaddr[OP_PUSHRE];
6496 if (((PMOP *)kid)->op_pmflags & PMf_GLOBAL && ckWARN(WARN_REGEXP)) {
6497 Perl_warner(aTHX_ packWARN(WARN_REGEXP),
6498 "Use of /g modifier is meaningless in split");
6501 if (!kid->op_sibling)
6502 append_elem(OP_SPLIT, o, newDEFSVOP());
6504 kid = kid->op_sibling;
6507 if (!kid->op_sibling)
6508 append_elem(OP_SPLIT, o, newSVOP(OP_CONST, 0, newSViv(0)));
6510 kid = kid->op_sibling;
6513 if (kid->op_sibling)
6514 return too_many_arguments(o,OP_DESC(o));
6520 Perl_ck_join(pTHX_ OP *o)
6522 const OP * const kid = cLISTOPo->op_first->op_sibling;
6523 if (kid && kid->op_type == OP_MATCH) {
6524 if (ckWARN(WARN_SYNTAX)) {
6525 const REGEXP *re = PM_GETRE(kPMOP);
6526 const char *pmstr = re ? re->precomp : "STRING";
6527 Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
6528 "/%s/ should probably be written as \"%s\"",
6536 Perl_ck_subr(pTHX_ OP *o)
6539 OP *prev = ((cUNOPo->op_first->op_sibling)
6540 ? cUNOPo : ((UNOP*)cUNOPo->op_first))->op_first;
6541 OP *o2 = prev->op_sibling;
6548 I32 contextclass = 0;
6552 o->op_private |= OPpENTERSUB_HASTARG;
6553 for (cvop = o2; cvop->op_sibling; cvop = cvop->op_sibling) ;
6554 if (cvop->op_type == OP_RV2CV) {
6556 o->op_private |= (cvop->op_private & OPpENTERSUB_AMPER);
6557 op_null(cvop); /* disable rv2cv */
6558 tmpop = (SVOP*)((UNOP*)cvop)->op_first;
6559 if (tmpop->op_type == OP_GV && !(o->op_private & OPpENTERSUB_AMPER)) {
6560 GV *gv = cGVOPx_gv(tmpop);
6563 tmpop->op_private |= OPpEARLY_CV;
6566 namegv = CvANON(cv) ? gv : CvGV(cv);
6567 proto = SvPV_nolen((SV*)cv);
6569 if (CvASSERTION(cv)) {
6570 if (PL_hints & HINT_ASSERTING) {
6571 if (PERLDB_ASSERTION && PL_curstash != PL_debstash)
6572 o->op_private |= OPpENTERSUB_DB;
6576 if (!(PL_hints & HINT_ASSERTIONSSEEN) && ckWARN(WARN_ASSERTIONS)) {
6577 Perl_warner(aTHX_ packWARN(WARN_ASSERTIONS),
6578 "Impossible to activate assertion call");
6585 else if (cvop->op_type == OP_METHOD || cvop->op_type == OP_METHOD_NAMED) {
6586 if (o2->op_type == OP_CONST)
6587 o2->op_private &= ~OPpCONST_STRICT;
6588 else if (o2->op_type == OP_LIST) {
6589 OP * const sib = ((UNOP*)o2)->op_first->op_sibling;
6590 if (sib && sib->op_type == OP_CONST)
6591 sib->op_private &= ~OPpCONST_STRICT;
6594 o->op_private |= (PL_hints & HINT_STRICT_REFS);
6595 if (PERLDB_SUB && PL_curstash != PL_debstash)
6596 o->op_private |= OPpENTERSUB_DB;
6597 while (o2 != cvop) {
6601 return too_many_arguments(o, gv_ename(namegv));
6619 if (o2->op_type != OP_REFGEN && o2->op_type != OP_UNDEF)
6621 arg == 1 ? "block or sub {}" : "sub {}",
6622 gv_ename(namegv), o2);
6625 /* '*' allows any scalar type, including bareword */
6628 if (o2->op_type == OP_RV2GV)
6629 goto wrapref; /* autoconvert GLOB -> GLOBref */
6630 else if (o2->op_type == OP_CONST)
6631 o2->op_private &= ~OPpCONST_STRICT;
6632 else if (o2->op_type == OP_ENTERSUB) {
6633 /* accidental subroutine, revert to bareword */
6634 OP *gvop = ((UNOP*)o2)->op_first;
6635 if (gvop && gvop->op_type == OP_NULL) {
6636 gvop = ((UNOP*)gvop)->op_first;
6638 for (; gvop->op_sibling; gvop = gvop->op_sibling)
6641 (gvop->op_private & OPpENTERSUB_NOPAREN) &&
6642 (gvop = ((UNOP*)gvop)->op_first) &&
6643 gvop->op_type == OP_GV)
6645 GV * const gv = cGVOPx_gv(gvop);
6646 OP * const sibling = o2->op_sibling;
6647 SV * const n = newSVpvs("");
6649 gv_fullname4(n, gv, "", FALSE);
6650 o2 = newSVOP(OP_CONST, 0, n);
6651 prev->op_sibling = o2;
6652 o2->op_sibling = sibling;
6668 if (contextclass++ == 0) {
6669 e = strchr(proto, ']');
6670 if (!e || e == proto)
6679 /* XXX We shouldn't be modifying proto, so we can const proto */
6684 while (*--p != '[');
6685 bad_type(arg, Perl_form(aTHX_ "one of %s", p),
6686 gv_ename(namegv), o2);
6692 if (o2->op_type == OP_RV2GV)
6695 bad_type(arg, "symbol", gv_ename(namegv), o2);
6698 if (o2->op_type == OP_ENTERSUB)
6701 bad_type(arg, "subroutine entry", gv_ename(namegv), o2);
6704 if (o2->op_type == OP_RV2SV ||
6705 o2->op_type == OP_PADSV ||
6706 o2->op_type == OP_HELEM ||
6707 o2->op_type == OP_AELEM ||
6708 o2->op_type == OP_THREADSV)
6711 bad_type(arg, "scalar", gv_ename(namegv), o2);
6714 if (o2->op_type == OP_RV2AV ||
6715 o2->op_type == OP_PADAV)
6718 bad_type(arg, "array", gv_ename(namegv), o2);
6721 if (o2->op_type == OP_RV2HV ||
6722 o2->op_type == OP_PADHV)
6725 bad_type(arg, "hash", gv_ename(namegv), o2);
6730 OP* const sib = kid->op_sibling;
6731 kid->op_sibling = 0;
6732 o2 = newUNOP(OP_REFGEN, 0, kid);
6733 o2->op_sibling = sib;
6734 prev->op_sibling = o2;
6736 if (contextclass && e) {
6751 Perl_croak(aTHX_ "Malformed prototype for %s: %"SVf,
6752 gv_ename(namegv), cv);
6757 mod(o2, OP_ENTERSUB);
6759 o2 = o2->op_sibling;
6761 if (proto && !optional &&
6762 (*proto && *proto != '@' && *proto != '%' && *proto != ';'))
6763 return too_few_arguments(o, gv_ename(namegv));
6766 o=newSVOP(OP_CONST, 0, newSViv(0));
6772 Perl_ck_svconst(pTHX_ OP *o)
6774 PERL_UNUSED_CONTEXT;
6775 SvREADONLY_on(cSVOPo->op_sv);
6780 Perl_ck_chdir(pTHX_ OP *o)
6782 if (o->op_flags & OPf_KIDS) {
6783 SVOP *kid = (SVOP*)cUNOPo->op_first;
6785 if (kid && kid->op_type == OP_CONST &&
6786 (kid->op_private & OPpCONST_BARE))
6788 o->op_flags |= OPf_SPECIAL;
6789 kid->op_private &= ~OPpCONST_STRICT;
6796 Perl_ck_trunc(pTHX_ OP *o)
6798 if (o->op_flags & OPf_KIDS) {
6799 SVOP *kid = (SVOP*)cUNOPo->op_first;
6801 if (kid->op_type == OP_NULL)
6802 kid = (SVOP*)kid->op_sibling;
6803 if (kid && kid->op_type == OP_CONST &&
6804 (kid->op_private & OPpCONST_BARE))
6806 o->op_flags |= OPf_SPECIAL;
6807 kid->op_private &= ~OPpCONST_STRICT;
6814 Perl_ck_unpack(pTHX_ OP *o)
6816 OP *kid = cLISTOPo->op_first;
6817 if (kid->op_sibling) {
6818 kid = kid->op_sibling;
6819 if (!kid->op_sibling)
6820 kid->op_sibling = newDEFSVOP();
6826 Perl_ck_substr(pTHX_ OP *o)
6829 if ((o->op_flags & OPf_KIDS) && o->op_private == 4) {
6830 OP *kid = cLISTOPo->op_first;
6832 if (kid->op_type == OP_NULL)
6833 kid = kid->op_sibling;
6835 kid->op_flags |= OPf_MOD;
6841 /* A peephole optimizer. We visit the ops in the order they're to execute.
6842 * See the comments at the top of this file for more details about when
6843 * peep() is called */
6846 Perl_peep(pTHX_ register OP *o)
6849 register OP* oldop = NULL;
6851 if (!o || o->op_opt)
6855 SAVEVPTR(PL_curcop);
6856 for (; o; o = o->op_next) {
6860 switch (o->op_type) {
6864 PL_curcop = ((COP*)o); /* for warnings */
6869 if (cSVOPo->op_private & OPpCONST_STRICT)
6870 no_bareword_allowed(o);
6872 case OP_METHOD_NAMED:
6873 /* Relocate sv to the pad for thread safety.
6874 * Despite being a "constant", the SV is written to,
6875 * for reference counts, sv_upgrade() etc. */
6877 const PADOFFSET ix = pad_alloc(OP_CONST, SVs_PADTMP);
6878 if (o->op_type == OP_CONST && SvPADTMP(cSVOPo->op_sv)) {
6879 /* If op_sv is already a PADTMP then it is being used by
6880 * some pad, so make a copy. */
6881 sv_setsv(PAD_SVl(ix),cSVOPo->op_sv);
6882 SvREADONLY_on(PAD_SVl(ix));
6883 SvREFCNT_dec(cSVOPo->op_sv);
6885 else if (o->op_type == OP_CONST
6886 && cSVOPo->op_sv == &PL_sv_undef) {
6887 /* PL_sv_undef is hack - it's unsafe to store it in the
6888 AV that is the pad, because av_fetch treats values of
6889 PL_sv_undef as a "free" AV entry and will merrily
6890 replace them with a new SV, causing pad_alloc to think
6891 that this pad slot is free. (When, clearly, it is not)
6893 SvOK_off(PAD_SVl(ix));
6894 SvPADTMP_on(PAD_SVl(ix));
6895 SvREADONLY_on(PAD_SVl(ix));
6898 SvREFCNT_dec(PAD_SVl(ix));
6899 SvPADTMP_on(cSVOPo->op_sv);
6900 PAD_SETSV(ix, cSVOPo->op_sv);
6901 /* XXX I don't know how this isn't readonly already. */
6902 SvREADONLY_on(PAD_SVl(ix));
6904 cSVOPo->op_sv = NULL;
6912 if (o->op_next && o->op_next->op_type == OP_STRINGIFY) {
6913 if (o->op_next->op_private & OPpTARGET_MY) {
6914 if (o->op_flags & OPf_STACKED) /* chained concats */
6915 goto ignore_optimization;
6917 /* assert(PL_opargs[o->op_type] & OA_TARGLEX); */
6918 o->op_targ = o->op_next->op_targ;
6919 o->op_next->op_targ = 0;
6920 o->op_private |= OPpTARGET_MY;
6923 op_null(o->op_next);
6925 ignore_optimization:
6929 if ((o->op_flags & OPf_WANT) != OPf_WANT_LIST) {
6931 break; /* Scalar stub must produce undef. List stub is noop */
6935 if (o->op_targ == OP_NEXTSTATE
6936 || o->op_targ == OP_DBSTATE
6937 || o->op_targ == OP_SETSTATE)
6939 PL_curcop = ((COP*)o);
6941 /* XXX: We avoid setting op_seq here to prevent later calls
6942 to peep() from mistakenly concluding that optimisation
6943 has already occurred. This doesn't fix the real problem,
6944 though (See 20010220.007). AMS 20010719 */
6945 /* op_seq functionality is now replaced by op_opt */
6946 if (oldop && o->op_next) {
6947 oldop->op_next = o->op_next;
6955 if (oldop && o->op_next) {
6956 oldop->op_next = o->op_next;
6964 if (o->op_type == OP_PADAV || o->op_next->op_type == OP_RV2AV) {
6965 OP* const pop = (o->op_type == OP_PADAV) ?
6966 o->op_next : o->op_next->op_next;
6968 if (pop && pop->op_type == OP_CONST &&
6969 ((PL_op = pop->op_next)) &&
6970 pop->op_next->op_type == OP_AELEM &&
6971 !(pop->op_next->op_private &
6972 (OPpLVAL_INTRO|OPpLVAL_DEFER|OPpDEREF|OPpMAYBE_LVSUB)) &&
6973 (i = SvIV(((SVOP*)pop)->op_sv) - PL_curcop->cop_arybase)
6978 if (cSVOPx(pop)->op_private & OPpCONST_STRICT)
6979 no_bareword_allowed(pop);
6980 if (o->op_type == OP_GV)
6981 op_null(o->op_next);
6982 op_null(pop->op_next);
6984 o->op_flags |= pop->op_next->op_flags & OPf_MOD;
6985 o->op_next = pop->op_next->op_next;
6986 o->op_ppaddr = PL_ppaddr[OP_AELEMFAST];
6987 o->op_private = (U8)i;
6988 if (o->op_type == OP_GV) {
6993 o->op_flags |= OPf_SPECIAL;
6994 o->op_type = OP_AELEMFAST;
7000 if (o->op_next->op_type == OP_RV2SV) {
7001 if (!(o->op_next->op_private & OPpDEREF)) {
7002 op_null(o->op_next);
7003 o->op_private |= o->op_next->op_private & (OPpLVAL_INTRO
7005 o->op_next = o->op_next->op_next;
7006 o->op_type = OP_GVSV;
7007 o->op_ppaddr = PL_ppaddr[OP_GVSV];
7010 else if ((o->op_private & OPpEARLY_CV) && ckWARN(WARN_PROTOTYPE)) {
7011 GV * const gv = cGVOPo_gv;
7012 if (SvTYPE(gv) == SVt_PVGV && GvCV(gv) && SvPVX_const(GvCV(gv))) {
7013 /* XXX could check prototype here instead of just carping */
7014 SV * const sv = sv_newmortal();
7015 gv_efullname3(sv, gv, NULL);
7016 Perl_warner(aTHX_ packWARN(WARN_PROTOTYPE),
7017 "%"SVf"() called too early to check prototype",
7021 else if (o->op_next->op_type == OP_READLINE
7022 && o->op_next->op_next->op_type == OP_CONCAT
7023 && (o->op_next->op_next->op_flags & OPf_STACKED))
7025 /* Turn "$a .= <FH>" into an OP_RCATLINE. AMS 20010917 */
7026 o->op_type = OP_RCATLINE;
7027 o->op_flags |= OPf_STACKED;
7028 o->op_ppaddr = PL_ppaddr[OP_RCATLINE];
7029 op_null(o->op_next->op_next);
7030 op_null(o->op_next);
7047 while (cLOGOP->op_other->op_type == OP_NULL)
7048 cLOGOP->op_other = cLOGOP->op_other->op_next;
7049 peep(cLOGOP->op_other); /* Recursive calls are not replaced by fptr calls */
7055 while (cLOOP->op_redoop->op_type == OP_NULL)
7056 cLOOP->op_redoop = cLOOP->op_redoop->op_next;
7057 peep(cLOOP->op_redoop);
7058 while (cLOOP->op_nextop->op_type == OP_NULL)
7059 cLOOP->op_nextop = cLOOP->op_nextop->op_next;
7060 peep(cLOOP->op_nextop);
7061 while (cLOOP->op_lastop->op_type == OP_NULL)
7062 cLOOP->op_lastop = cLOOP->op_lastop->op_next;
7063 peep(cLOOP->op_lastop);
7070 while (cPMOP->op_pmreplstart &&
7071 cPMOP->op_pmreplstart->op_type == OP_NULL)
7072 cPMOP->op_pmreplstart = cPMOP->op_pmreplstart->op_next;
7073 peep(cPMOP->op_pmreplstart);
7078 if (o->op_next && o->op_next->op_type == OP_NEXTSTATE
7079 && ckWARN(WARN_SYNTAX))
7081 if (o->op_next->op_sibling &&
7082 o->op_next->op_sibling->op_type != OP_EXIT &&
7083 o->op_next->op_sibling->op_type != OP_WARN &&
7084 o->op_next->op_sibling->op_type != OP_DIE) {
7085 const line_t oldline = CopLINE(PL_curcop);
7087 CopLINE_set(PL_curcop, CopLINE((COP*)o->op_next));
7088 Perl_warner(aTHX_ packWARN(WARN_EXEC),
7089 "Statement unlikely to be reached");
7090 Perl_warner(aTHX_ packWARN(WARN_EXEC),
7091 "\t(Maybe you meant system() when you said exec()?)\n");
7092 CopLINE_set(PL_curcop, oldline);
7102 const char *key = NULL;
7107 if (((BINOP*)o)->op_last->op_type != OP_CONST)
7110 /* Make the CONST have a shared SV */
7111 svp = cSVOPx_svp(((BINOP*)o)->op_last);
7112 if ((!SvFAKE(sv = *svp) || !SvREADONLY(sv)) && !IS_PADCONST(sv)) {
7113 key = SvPV_const(sv, keylen);
7114 lexname = newSVpvn_share(key,
7115 SvUTF8(sv) ? -(I32)keylen : keylen,
7121 if ((o->op_private & (OPpLVAL_INTRO)))
7124 rop = (UNOP*)((BINOP*)o)->op_first;
7125 if (rop->op_type != OP_RV2HV || rop->op_first->op_type != OP_PADSV)
7127 lexname = *av_fetch(PL_comppad_name, rop->op_first->op_targ, TRUE);
7128 if (!SvPAD_TYPED(lexname))
7130 fields = (GV**)hv_fetchs(SvSTASH(lexname), "FIELDS", FALSE);
7131 if (!fields || !GvHV(*fields))
7133 key = SvPV_const(*svp, keylen);
7134 if (!hv_fetch(GvHV(*fields), key,
7135 SvUTF8(*svp) ? -(I32)keylen : keylen, FALSE))
7137 Perl_croak(aTHX_ "No such class field \"%s\" "
7138 "in variable %s of type %s",
7139 key, SvPV_nolen_const(lexname), HvNAME_get(SvSTASH(lexname)));
7152 SVOP *first_key_op, *key_op;
7154 if ((o->op_private & (OPpLVAL_INTRO))
7155 /* I bet there's always a pushmark... */
7156 || ((LISTOP*)o)->op_first->op_sibling->op_type != OP_LIST)
7157 /* hmmm, no optimization if list contains only one key. */
7159 rop = (UNOP*)((LISTOP*)o)->op_last;
7160 if (rop->op_type != OP_RV2HV)
7162 if (rop->op_first->op_type == OP_PADSV)
7163 /* @$hash{qw(keys here)} */
7164 rop = (UNOP*)rop->op_first;
7166 /* @{$hash}{qw(keys here)} */
7167 if (rop->op_first->op_type == OP_SCOPE
7168 && cLISTOPx(rop->op_first)->op_last->op_type == OP_PADSV)
7170 rop = (UNOP*)cLISTOPx(rop->op_first)->op_last;
7176 lexname = *av_fetch(PL_comppad_name, rop->op_targ, TRUE);
7177 if (!SvPAD_TYPED(lexname))
7179 fields = (GV**)hv_fetchs(SvSTASH(lexname), "FIELDS", FALSE);
7180 if (!fields || !GvHV(*fields))
7182 /* Again guessing that the pushmark can be jumped over.... */
7183 first_key_op = (SVOP*)((LISTOP*)((LISTOP*)o)->op_first->op_sibling)
7184 ->op_first->op_sibling;
7185 for (key_op = first_key_op; key_op;
7186 key_op = (SVOP*)key_op->op_sibling) {
7187 if (key_op->op_type != OP_CONST)
7189 svp = cSVOPx_svp(key_op);
7190 key = SvPV_const(*svp, keylen);
7191 if (!hv_fetch(GvHV(*fields), key,
7192 SvUTF8(*svp) ? -(I32)keylen : keylen, FALSE))
7194 Perl_croak(aTHX_ "No such class field \"%s\" "
7195 "in variable %s of type %s",
7196 key, SvPV_nolen(lexname), HvNAME_get(SvSTASH(lexname)));
7203 /* will point to RV2AV or PADAV op on LHS/RHS of assign */
7207 /* check that RHS of sort is a single plain array */
7208 OP *oright = cUNOPo->op_first;
7209 if (!oright || oright->op_type != OP_PUSHMARK)
7212 /* reverse sort ... can be optimised. */
7213 if (!cUNOPo->op_sibling) {
7214 /* Nothing follows us on the list. */
7215 OP * const reverse = o->op_next;
7217 if (reverse->op_type == OP_REVERSE &&
7218 (reverse->op_flags & OPf_WANT) == OPf_WANT_LIST) {
7219 OP * const pushmark = cUNOPx(reverse)->op_first;
7220 if (pushmark && (pushmark->op_type == OP_PUSHMARK)
7221 && (cUNOPx(pushmark)->op_sibling == o)) {
7222 /* reverse -> pushmark -> sort */
7223 o->op_private |= OPpSORT_REVERSE;
7225 pushmark->op_next = oright->op_next;
7231 /* make @a = sort @a act in-place */
7235 oright = cUNOPx(oright)->op_sibling;
7238 if (oright->op_type == OP_NULL) { /* skip sort block/sub */
7239 oright = cUNOPx(oright)->op_sibling;
7243 (oright->op_type != OP_RV2AV && oright->op_type != OP_PADAV)
7244 || oright->op_next != o
7245 || (oright->op_private & OPpLVAL_INTRO)
7249 /* o2 follows the chain of op_nexts through the LHS of the
7250 * assign (if any) to the aassign op itself */
7252 if (!o2 || o2->op_type != OP_NULL)
7255 if (!o2 || o2->op_type != OP_PUSHMARK)
7258 if (o2 && o2->op_type == OP_GV)
7261 || (o2->op_type != OP_PADAV && o2->op_type != OP_RV2AV)
7262 || (o2->op_private & OPpLVAL_INTRO)
7267 if (!o2 || o2->op_type != OP_NULL)
7270 if (!o2 || o2->op_type != OP_AASSIGN
7271 || (o2->op_flags & OPf_WANT) != OPf_WANT_VOID)
7274 /* check that the sort is the first arg on RHS of assign */
7276 o2 = cUNOPx(o2)->op_first;
7277 if (!o2 || o2->op_type != OP_NULL)
7279 o2 = cUNOPx(o2)->op_first;
7280 if (!o2 || o2->op_type != OP_PUSHMARK)
7282 if (o2->op_sibling != o)
7285 /* check the array is the same on both sides */
7286 if (oleft->op_type == OP_RV2AV) {
7287 if (oright->op_type != OP_RV2AV
7288 || !cUNOPx(oright)->op_first
7289 || cUNOPx(oright)->op_first->op_type != OP_GV
7290 || cGVOPx_gv(cUNOPx(oleft)->op_first) !=
7291 cGVOPx_gv(cUNOPx(oright)->op_first)
7295 else if (oright->op_type != OP_PADAV
7296 || oright->op_targ != oleft->op_targ
7300 /* transfer MODishness etc from LHS arg to RHS arg */
7301 oright->op_flags = oleft->op_flags;
7302 o->op_private |= OPpSORT_INPLACE;
7304 /* excise push->gv->rv2av->null->aassign */
7305 o2 = o->op_next->op_next;
7306 op_null(o2); /* PUSHMARK */
7308 if (o2->op_type == OP_GV) {
7309 op_null(o2); /* GV */
7312 op_null(o2); /* RV2AV or PADAV */
7313 o2 = o2->op_next->op_next;
7314 op_null(o2); /* AASSIGN */
7316 o->op_next = o2->op_next;
7322 OP *ourmark, *theirmark, *ourlast, *iter, *expushmark, *rv2av;
7324 LISTOP *enter, *exlist;
7327 enter = (LISTOP *) o->op_next;
7330 if (enter->op_type == OP_NULL) {
7331 enter = (LISTOP *) enter->op_next;
7335 /* for $a (...) will have OP_GV then OP_RV2GV here.
7336 for (...) just has an OP_GV. */
7337 if (enter->op_type == OP_GV) {
7338 gvop = (OP *) enter;
7339 enter = (LISTOP *) enter->op_next;
7342 if (enter->op_type == OP_RV2GV) {
7343 enter = (LISTOP *) enter->op_next;
7349 if (enter->op_type != OP_ENTERITER)
7352 iter = enter->op_next;
7353 if (!iter || iter->op_type != OP_ITER)
7356 expushmark = enter->op_first;
7357 if (!expushmark || expushmark->op_type != OP_NULL
7358 || expushmark->op_targ != OP_PUSHMARK)
7361 exlist = (LISTOP *) expushmark->op_sibling;
7362 if (!exlist || exlist->op_type != OP_NULL
7363 || exlist->op_targ != OP_LIST)
7366 if (exlist->op_last != o) {
7367 /* Mmm. Was expecting to point back to this op. */
7370 theirmark = exlist->op_first;
7371 if (!theirmark || theirmark->op_type != OP_PUSHMARK)
7374 if (theirmark->op_sibling != o) {
7375 /* There's something between the mark and the reverse, eg
7376 for (1, reverse (...))
7381 ourmark = ((LISTOP *)o)->op_first;
7382 if (!ourmark || ourmark->op_type != OP_PUSHMARK)
7385 ourlast = ((LISTOP *)o)->op_last;
7386 if (!ourlast || ourlast->op_next != o)
7389 rv2av = ourmark->op_sibling;
7390 if (rv2av && rv2av->op_type == OP_RV2AV && rv2av->op_sibling == 0
7391 && rv2av->op_flags == (OPf_WANT_LIST | OPf_KIDS)
7392 && enter->op_flags == (OPf_WANT_LIST | OPf_KIDS)) {
7393 /* We're just reversing a single array. */
7394 rv2av->op_flags = OPf_WANT_SCALAR | OPf_KIDS | OPf_REF;
7395 enter->op_flags |= OPf_STACKED;
7398 /* We don't have control over who points to theirmark, so sacrifice
7400 theirmark->op_next = ourmark->op_next;
7401 theirmark->op_flags = ourmark->op_flags;
7402 ourlast->op_next = gvop ? gvop : (OP *) enter;
7405 enter->op_private |= OPpITER_REVERSED;
7406 iter->op_private |= OPpITER_REVERSED;
7413 UNOP *refgen, *rv2cv;
7416 /* I do not understand this, but if o->op_opt isn't set to 1,
7417 various tests in ext/B/t/bytecode.t fail with no readily
7423 if ((o->op_flags && OPf_WANT) != OPf_WANT_VOID)
7426 if ((o->op_private & ~OPpASSIGN_BACKWARDS) != 2)
7429 rv2gv = ((BINOP *)o)->op_last;
7430 if (!rv2gv || rv2gv->op_type != OP_RV2GV)
7433 refgen = (UNOP *)((BINOP *)o)->op_first;
7435 if (!refgen || refgen->op_type != OP_REFGEN)
7438 exlist = (LISTOP *)refgen->op_first;
7439 if (!exlist || exlist->op_type != OP_NULL
7440 || exlist->op_targ != OP_LIST)
7443 if (exlist->op_first->op_type != OP_PUSHMARK)
7446 rv2cv = (UNOP*)exlist->op_last;
7448 if (rv2cv->op_type != OP_RV2CV)
7451 assert ((rv2gv->op_private & OPpDONT_INIT_GV) == 0);
7452 assert ((o->op_private & OPpASSIGN_CV_TO_GV) == 0);
7453 assert ((rv2cv->op_private & OPpMAY_RETURN_CONSTANT) == 0);
7455 o->op_private |= OPpASSIGN_CV_TO_GV;
7456 rv2gv->op_private |= OPpDONT_INIT_GV;
7457 rv2cv->op_private |= OPpMAY_RETURN_CONSTANT;
7473 Perl_custom_op_name(pTHX_ const OP* o)
7476 const IV index = PTR2IV(o->op_ppaddr);
7480 if (!PL_custom_op_names) /* This probably shouldn't happen */
7481 return (char *)PL_op_name[OP_CUSTOM];
7483 keysv = sv_2mortal(newSViv(index));
7485 he = hv_fetch_ent(PL_custom_op_names, keysv, 0, 0);
7487 return (char *)PL_op_name[OP_CUSTOM]; /* Don't know who you are */
7489 return SvPV_nolen(HeVAL(he));
7493 Perl_custom_op_desc(pTHX_ const OP* o)
7496 const IV index = PTR2IV(o->op_ppaddr);
7500 if (!PL_custom_op_descs)
7501 return (char *)PL_op_desc[OP_CUSTOM];
7503 keysv = sv_2mortal(newSViv(index));
7505 he = hv_fetch_ent(PL_custom_op_descs, keysv, 0, 0);
7507 return (char *)PL_op_desc[OP_CUSTOM];
7509 return SvPV_nolen(HeVAL(he));
7514 /* Efficient sub that returns a constant scalar value. */
7516 const_sv_xsub(pTHX_ CV* cv)
7523 Perl_croak(aTHX_ "usage: %s::%s()",
7524 HvNAME_get(GvSTASH(CvGV(cv))), GvNAME(CvGV(cv)));
7528 ST(0) = (SV*)XSANY.any_ptr;
7534 * c-indentation-style: bsd
7536 * indent-tabs-mode: t
7539 * ex: set ts=8 sts=4 sw=4 noet: