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
3565 && (first->op_flags & OPf_SPECIAL)
3566 && (first->op_flags & OPf_KIDS)) {
3567 if (type == OP_AND || type == OP_OR) {
3573 first = *firstp = cUNOPo->op_first;
3575 first->op_next = o->op_next;
3576 cUNOPo->op_first = NULL;
3580 if (first->op_type == OP_CONST) {
3581 if (first->op_private & OPpCONST_STRICT)
3582 no_bareword_allowed(first);
3583 else if ((first->op_private & OPpCONST_BARE) && ckWARN(WARN_BAREWORD))
3584 Perl_warner(aTHX_ packWARN(WARN_BAREWORD), "Bareword found in conditional");
3585 if ((type == OP_AND && SvTRUE(((SVOP*)first)->op_sv)) ||
3586 (type == OP_OR && !SvTRUE(((SVOP*)first)->op_sv)) ||
3587 (type == OP_DOR && !SvOK(((SVOP*)first)->op_sv))) {
3590 if (other->op_type == OP_CONST)
3591 other->op_private |= OPpCONST_SHORTCIRCUIT;
3595 /* check for C<my $x if 0>, or C<my($x,$y) if 0> */
3596 const OP *o2 = other;
3597 if ( ! (o2->op_type == OP_LIST
3598 && (( o2 = cUNOPx(o2)->op_first))
3599 && o2->op_type == OP_PUSHMARK
3600 && (( o2 = o2->op_sibling)) )
3603 if ((o2->op_type == OP_PADSV || o2->op_type == OP_PADAV
3604 || o2->op_type == OP_PADHV)
3605 && o2->op_private & OPpLVAL_INTRO
3606 && ckWARN(WARN_DEPRECATED))
3608 Perl_warner(aTHX_ packWARN(WARN_DEPRECATED),
3609 "Deprecated use of my() in false conditional");
3614 if (first->op_type == OP_CONST)
3615 first->op_private |= OPpCONST_SHORTCIRCUIT;
3619 else if ((first->op_flags & OPf_KIDS) && type != OP_DOR
3620 && ckWARN(WARN_MISC)) /* [#24076] Don't warn for <FH> err FOO. */
3622 const OP * const k1 = ((UNOP*)first)->op_first;
3623 const OP * const k2 = k1->op_sibling;
3625 switch (first->op_type)
3628 if (k2 && k2->op_type == OP_READLINE
3629 && (k2->op_flags & OPf_STACKED)
3630 && ((k1->op_flags & OPf_WANT) == OPf_WANT_SCALAR))
3632 warnop = k2->op_type;
3637 if (k1->op_type == OP_READDIR
3638 || k1->op_type == OP_GLOB
3639 || (k1->op_type == OP_NULL && k1->op_targ == OP_GLOB)
3640 || k1->op_type == OP_EACH)
3642 warnop = ((k1->op_type == OP_NULL)
3643 ? (OPCODE)k1->op_targ : k1->op_type);
3648 const line_t oldline = CopLINE(PL_curcop);
3649 CopLINE_set(PL_curcop, PL_copline);
3650 Perl_warner(aTHX_ packWARN(WARN_MISC),
3651 "Value of %s%s can be \"0\"; test with defined()",
3653 ((warnop == OP_READLINE || warnop == OP_GLOB)
3654 ? " construct" : "() operator"));
3655 CopLINE_set(PL_curcop, oldline);
3662 if (type == OP_ANDASSIGN || type == OP_ORASSIGN || type == OP_DORASSIGN)
3663 other->op_private |= OPpASSIGN_BACKWARDS; /* other is an OP_SASSIGN */
3665 NewOp(1101, logop, 1, LOGOP);
3667 logop->op_type = (OPCODE)type;
3668 logop->op_ppaddr = PL_ppaddr[type];
3669 logop->op_first = first;
3670 logop->op_flags = (U8)(flags | OPf_KIDS);
3671 logop->op_other = LINKLIST(other);
3672 logop->op_private = (U8)(1 | (flags >> 8));
3674 /* establish postfix order */
3675 logop->op_next = LINKLIST(first);
3676 first->op_next = (OP*)logop;
3677 first->op_sibling = other;
3679 CHECKOP(type,logop);
3681 o = newUNOP(OP_NULL, 0, (OP*)logop);
3688 Perl_newCONDOP(pTHX_ I32 flags, OP *first, OP *trueop, OP *falseop)
3696 return newLOGOP(OP_AND, 0, first, trueop);
3698 return newLOGOP(OP_OR, 0, first, falseop);
3700 scalarboolean(first);
3701 if (first->op_type == OP_CONST) {
3702 if (first->op_private & OPpCONST_BARE &&
3703 first->op_private & OPpCONST_STRICT) {
3704 no_bareword_allowed(first);
3706 if (SvTRUE(((SVOP*)first)->op_sv)) {
3717 NewOp(1101, logop, 1, LOGOP);
3718 logop->op_type = OP_COND_EXPR;
3719 logop->op_ppaddr = PL_ppaddr[OP_COND_EXPR];
3720 logop->op_first = first;
3721 logop->op_flags = (U8)(flags | OPf_KIDS);
3722 logop->op_private = (U8)(1 | (flags >> 8));
3723 logop->op_other = LINKLIST(trueop);
3724 logop->op_next = LINKLIST(falseop);
3726 CHECKOP(OP_COND_EXPR, /* that's logop->op_type */
3729 /* establish postfix order */
3730 start = LINKLIST(first);
3731 first->op_next = (OP*)logop;
3733 first->op_sibling = trueop;
3734 trueop->op_sibling = falseop;
3735 o = newUNOP(OP_NULL, 0, (OP*)logop);
3737 trueop->op_next = falseop->op_next = o;
3744 Perl_newRANGE(pTHX_ I32 flags, OP *left, OP *right)
3753 NewOp(1101, range, 1, LOGOP);
3755 range->op_type = OP_RANGE;
3756 range->op_ppaddr = PL_ppaddr[OP_RANGE];
3757 range->op_first = left;
3758 range->op_flags = OPf_KIDS;
3759 leftstart = LINKLIST(left);
3760 range->op_other = LINKLIST(right);
3761 range->op_private = (U8)(1 | (flags >> 8));
3763 left->op_sibling = right;
3765 range->op_next = (OP*)range;
3766 flip = newUNOP(OP_FLIP, flags, (OP*)range);
3767 flop = newUNOP(OP_FLOP, 0, flip);
3768 o = newUNOP(OP_NULL, 0, flop);
3770 range->op_next = leftstart;
3772 left->op_next = flip;
3773 right->op_next = flop;
3775 range->op_targ = pad_alloc(OP_RANGE, SVs_PADMY);
3776 sv_upgrade(PAD_SV(range->op_targ), SVt_PVNV);
3777 flip->op_targ = pad_alloc(OP_RANGE, SVs_PADMY);
3778 sv_upgrade(PAD_SV(flip->op_targ), SVt_PVNV);
3780 flip->op_private = left->op_type == OP_CONST ? OPpFLIP_LINENUM : 0;
3781 flop->op_private = right->op_type == OP_CONST ? OPpFLIP_LINENUM : 0;
3784 if (!flip->op_private || !flop->op_private)
3785 linklist(o); /* blow off optimizer unless constant */
3791 Perl_newLOOPOP(pTHX_ I32 flags, I32 debuggable, OP *expr, OP *block)
3796 const bool once = block && block->op_flags & OPf_SPECIAL &&
3797 (block->op_type == OP_ENTERSUB || block->op_type == OP_NULL);
3799 PERL_UNUSED_ARG(debuggable);
3802 if (once && expr->op_type == OP_CONST && !SvTRUE(((SVOP*)expr)->op_sv))
3803 return block; /* do {} while 0 does once */
3804 if (expr->op_type == OP_READLINE || expr->op_type == OP_GLOB
3805 || (expr->op_type == OP_NULL && expr->op_targ == OP_GLOB)) {
3806 expr = newUNOP(OP_DEFINED, 0,
3807 newASSIGNOP(0, newDEFSVOP(), 0, expr) );
3808 } else if (expr->op_flags & OPf_KIDS) {
3809 const OP * const k1 = ((UNOP*)expr)->op_first;
3810 const OP * const k2 = k1 ? k1->op_sibling : NULL;
3811 switch (expr->op_type) {
3813 if (k2 && k2->op_type == OP_READLINE
3814 && (k2->op_flags & OPf_STACKED)
3815 && ((k1->op_flags & OPf_WANT) == OPf_WANT_SCALAR))
3816 expr = newUNOP(OP_DEFINED, 0, expr);
3820 if (k1->op_type == OP_READDIR
3821 || k1->op_type == OP_GLOB
3822 || (k1->op_type == OP_NULL && k1->op_targ == OP_GLOB)
3823 || k1->op_type == OP_EACH)
3824 expr = newUNOP(OP_DEFINED, 0, expr);
3830 /* if block is null, the next append_elem() would put UNSTACK, a scalar
3831 * op, in listop. This is wrong. [perl #27024] */
3833 block = newOP(OP_NULL, 0);
3834 listop = append_elem(OP_LINESEQ, block, newOP(OP_UNSTACK, 0));
3835 o = new_logop(OP_AND, 0, &expr, &listop);
3838 ((LISTOP*)listop)->op_last->op_next = LINKLIST(o);
3840 if (once && o != listop)
3841 o->op_next = ((LOGOP*)cUNOPo->op_first)->op_other;
3844 o = newUNOP(OP_NULL, 0, o); /* or do {} while 1 loses outer block */
3846 o->op_flags |= flags;
3848 o->op_flags |= OPf_SPECIAL; /* suppress POPBLOCK curpm restoration*/
3853 Perl_newWHILEOP(pTHX_ I32 flags, I32 debuggable, LOOP *loop, I32
3854 whileline, OP *expr, OP *block, OP *cont, I32 has_my)
3863 PERL_UNUSED_ARG(debuggable);
3866 if (expr->op_type == OP_READLINE || expr->op_type == OP_GLOB
3867 || (expr->op_type == OP_NULL && expr->op_targ == OP_GLOB)) {
3868 expr = newUNOP(OP_DEFINED, 0,
3869 newASSIGNOP(0, newDEFSVOP(), 0, expr) );
3870 } else if (expr->op_flags & OPf_KIDS) {
3871 const OP * const k1 = ((UNOP*)expr)->op_first;
3872 const OP * const k2 = (k1) ? k1->op_sibling : NULL;
3873 switch (expr->op_type) {
3875 if (k2 && k2->op_type == OP_READLINE
3876 && (k2->op_flags & OPf_STACKED)
3877 && ((k1->op_flags & OPf_WANT) == OPf_WANT_SCALAR))
3878 expr = newUNOP(OP_DEFINED, 0, expr);
3882 if (k1->op_type == OP_READDIR
3883 || k1->op_type == OP_GLOB
3884 || (k1->op_type == OP_NULL && k1->op_targ == OP_GLOB)
3885 || k1->op_type == OP_EACH)
3886 expr = newUNOP(OP_DEFINED, 0, expr);
3893 block = newOP(OP_NULL, 0);
3894 else if (cont || has_my) {
3895 block = scope(block);
3899 next = LINKLIST(cont);
3902 OP * const unstack = newOP(OP_UNSTACK, 0);
3905 cont = append_elem(OP_LINESEQ, cont, unstack);
3908 listop = append_list(OP_LINESEQ, (LISTOP*)block, (LISTOP*)cont);
3909 redo = LINKLIST(listop);
3912 PL_copline = (line_t)whileline;
3914 o = new_logop(OP_AND, 0, &expr, &listop);
3915 if (o == expr && o->op_type == OP_CONST && !SvTRUE(cSVOPo->op_sv)) {
3916 op_free(expr); /* oops, it's a while (0) */
3918 return NULL; /* listop already freed by new_logop */
3921 ((LISTOP*)listop)->op_last->op_next =
3922 (o == listop ? redo : LINKLIST(o));
3928 NewOp(1101,loop,1,LOOP);
3929 loop->op_type = OP_ENTERLOOP;
3930 loop->op_ppaddr = PL_ppaddr[OP_ENTERLOOP];
3931 loop->op_private = 0;
3932 loop->op_next = (OP*)loop;
3935 o = newBINOP(OP_LEAVELOOP, 0, (OP*)loop, o);
3937 loop->op_redoop = redo;
3938 loop->op_lastop = o;
3939 o->op_private |= loopflags;
3942 loop->op_nextop = next;
3944 loop->op_nextop = o;
3946 o->op_flags |= flags;
3947 o->op_private |= (flags >> 8);
3952 Perl_newFOROP(pTHX_ I32 flags, char *label, line_t forline, OP *sv, OP *expr, OP *block, OP *cont)
3957 PADOFFSET padoff = 0;
3962 if (sv->op_type == OP_RV2SV) { /* symbol table variable */
3963 iterpflags = sv->op_private & OPpOUR_INTRO; /* for our $x () */
3964 sv->op_type = OP_RV2GV;
3965 sv->op_ppaddr = PL_ppaddr[OP_RV2GV];
3966 if (cGVOPx_gv(cUNOPx(sv)->op_first) == PL_defgv)
3967 iterpflags |= OPpITER_DEF;
3969 else if (sv->op_type == OP_PADSV) { /* private variable */
3970 iterpflags = sv->op_private & OPpLVAL_INTRO; /* for my $x () */
3971 padoff = sv->op_targ;
3976 else if (sv->op_type == OP_THREADSV) { /* per-thread variable */
3977 padoff = sv->op_targ;
3979 iterflags |= OPf_SPECIAL;
3984 Perl_croak(aTHX_ "Can't use %s for loop variable", PL_op_desc[sv->op_type]);
3985 if (padoff && strEQ(PAD_COMPNAME_PV(padoff), "$_"))
3986 iterpflags |= OPpITER_DEF;
3989 const I32 offset = pad_findmy("$_");
3990 if (offset == NOT_IN_PAD || PAD_COMPNAME_FLAGS_isOUR(offset)) {
3991 sv = newGVOP(OP_GV, 0, PL_defgv);
3996 iterpflags |= OPpITER_DEF;
3998 if (expr->op_type == OP_RV2AV || expr->op_type == OP_PADAV) {
3999 expr = mod(force_list(scalar(ref(expr, OP_ITER))), OP_GREPSTART);
4000 iterflags |= OPf_STACKED;
4002 else if (expr->op_type == OP_NULL &&
4003 (expr->op_flags & OPf_KIDS) &&
4004 ((BINOP*)expr)->op_first->op_type == OP_FLOP)
4006 /* Basically turn for($x..$y) into the same as for($x,$y), but we
4007 * set the STACKED flag to indicate that these values are to be
4008 * treated as min/max values by 'pp_iterinit'.
4010 UNOP* const flip = (UNOP*)((UNOP*)((BINOP*)expr)->op_first)->op_first;
4011 LOGOP* const range = (LOGOP*) flip->op_first;
4012 OP* const left = range->op_first;
4013 OP* const right = left->op_sibling;
4016 range->op_flags &= ~OPf_KIDS;
4017 range->op_first = NULL;
4019 listop = (LISTOP*)newLISTOP(OP_LIST, 0, left, right);
4020 listop->op_first->op_next = range->op_next;
4021 left->op_next = range->op_other;
4022 right->op_next = (OP*)listop;
4023 listop->op_next = listop->op_first;
4026 expr = (OP*)(listop);
4028 iterflags |= OPf_STACKED;
4031 expr = mod(force_list(expr), OP_GREPSTART);
4034 loop = (LOOP*)list(convert(OP_ENTERITER, iterflags,
4035 append_elem(OP_LIST, expr, scalar(sv))));
4036 assert(!loop->op_next);
4037 /* for my $x () sets OPpLVAL_INTRO;
4038 * for our $x () sets OPpOUR_INTRO */
4039 loop->op_private = (U8)iterpflags;
4040 #ifdef PL_OP_SLAB_ALLOC
4043 NewOp(1234,tmp,1,LOOP);
4044 Copy(loop,tmp,1,LISTOP);
4049 Renew(loop, 1, LOOP);
4051 loop->op_targ = padoff;
4052 wop = newWHILEOP(flags, 1, loop, forline, newOP(OP_ITER, 0), block, cont, 0);
4053 PL_copline = forline;
4054 return newSTATEOP(0, label, wop);
4058 Perl_newLOOPEX(pTHX_ I32 type, OP *label)
4063 if (type != OP_GOTO || label->op_type == OP_CONST) {
4064 /* "last()" means "last" */
4065 if (label->op_type == OP_STUB && (label->op_flags & OPf_PARENS))
4066 o = newOP(type, OPf_SPECIAL);
4068 o = newPVOP(type, 0, savepv(label->op_type == OP_CONST
4069 ? SvPVx_nolen_const(((SVOP*)label)->op_sv)
4075 /* Check whether it's going to be a goto &function */
4076 if (label->op_type == OP_ENTERSUB
4077 && !(label->op_flags & OPf_STACKED))
4078 label = newUNOP(OP_REFGEN, 0, mod(label, OP_REFGEN));
4079 o = newUNOP(type, OPf_STACKED, label);
4081 PL_hints |= HINT_BLOCK_SCOPE;
4085 /* if the condition is a literal array or hash
4086 (or @{ ... } etc), make a reference to it.
4089 S_ref_array_or_hash(pTHX_ OP *cond)
4092 && (cond->op_type == OP_RV2AV
4093 || cond->op_type == OP_PADAV
4094 || cond->op_type == OP_RV2HV
4095 || cond->op_type == OP_PADHV))
4097 return newUNOP(OP_REFGEN,
4098 0, mod(cond, OP_REFGEN));
4104 /* These construct the optree fragments representing given()
4107 entergiven and enterwhen are LOGOPs; the op_other pointer
4108 points up to the associated leave op. We need this so we
4109 can put it in the context and make break/continue work.
4110 (Also, of course, pp_enterwhen will jump straight to
4111 op_other if the match fails.)
4116 S_newGIVWHENOP(pTHX_ OP *cond, OP *block,
4117 I32 enter_opcode, I32 leave_opcode,
4118 PADOFFSET entertarg)
4124 NewOp(1101, enterop, 1, LOGOP);
4125 enterop->op_type = enter_opcode;
4126 enterop->op_ppaddr = PL_ppaddr[enter_opcode];
4127 enterop->op_flags = (U8) OPf_KIDS;
4128 enterop->op_targ = ((entertarg == NOT_IN_PAD) ? 0 : entertarg);
4129 enterop->op_private = 0;
4131 o = newUNOP(leave_opcode, 0, (OP *) enterop);
4134 enterop->op_first = scalar(cond);
4135 cond->op_sibling = block;
4137 o->op_next = LINKLIST(cond);
4138 cond->op_next = (OP *) enterop;
4141 /* This is a default {} block */
4142 enterop->op_first = block;
4143 enterop->op_flags |= OPf_SPECIAL;
4145 o->op_next = (OP *) enterop;
4148 CHECKOP(enter_opcode, enterop); /* Currently does nothing, since
4149 entergiven and enterwhen both
4152 enterop->op_next = LINKLIST(block);
4153 block->op_next = enterop->op_other = o;
4158 /* Does this look like a boolean operation? For these purposes
4159 a boolean operation is:
4160 - a subroutine call [*]
4161 - a logical connective
4162 - a comparison operator
4163 - a filetest operator, with the exception of -s -M -A -C
4164 - defined(), exists() or eof()
4165 - /$re/ or $foo =~ /$re/
4167 [*] possibly surprising
4171 S_looks_like_bool(pTHX_ OP *o)
4174 switch(o->op_type) {
4176 return looks_like_bool(cLOGOPo->op_first);
4180 looks_like_bool(cLOGOPo->op_first)
4181 && looks_like_bool(cLOGOPo->op_first->op_sibling));
4185 case OP_NOT: case OP_XOR:
4186 /* Note that OP_DOR is not here */
4188 case OP_EQ: case OP_NE: case OP_LT:
4189 case OP_GT: case OP_LE: case OP_GE:
4191 case OP_I_EQ: case OP_I_NE: case OP_I_LT:
4192 case OP_I_GT: case OP_I_LE: case OP_I_GE:
4194 case OP_SEQ: case OP_SNE: case OP_SLT:
4195 case OP_SGT: case OP_SLE: case OP_SGE:
4199 case OP_FTRREAD: case OP_FTRWRITE: case OP_FTREXEC:
4200 case OP_FTEREAD: case OP_FTEWRITE: case OP_FTEEXEC:
4201 case OP_FTIS: case OP_FTEOWNED: case OP_FTROWNED:
4202 case OP_FTZERO: case OP_FTSOCK: case OP_FTCHR:
4203 case OP_FTBLK: case OP_FTFILE: case OP_FTDIR:
4204 case OP_FTPIPE: case OP_FTLINK: case OP_FTSUID:
4205 case OP_FTSGID: case OP_FTSVTX: case OP_FTTTY:
4206 case OP_FTTEXT: case OP_FTBINARY:
4208 case OP_DEFINED: case OP_EXISTS:
4209 case OP_MATCH: case OP_EOF:
4214 /* Detect comparisons that have been optimized away */
4215 if (cSVOPo->op_sv == &PL_sv_yes
4216 || cSVOPo->op_sv == &PL_sv_no)
4227 Perl_newGIVENOP(pTHX_ OP *cond, OP *block, PADOFFSET defsv_off)
4231 return newGIVWHENOP(
4232 ref_array_or_hash(cond),
4234 OP_ENTERGIVEN, OP_LEAVEGIVEN,
4238 /* If cond is null, this is a default {} block */
4240 Perl_newWHENOP(pTHX_ OP *cond, OP *block)
4242 bool cond_llb = (!cond || looks_like_bool(cond));
4248 cond_op = newBINOP(OP_SMARTMATCH, OPf_SPECIAL,
4250 scalar(ref_array_or_hash(cond)));
4253 return newGIVWHENOP(
4255 append_elem(block->op_type, block, newOP(OP_BREAK, OPf_SPECIAL)),
4256 OP_ENTERWHEN, OP_LEAVEWHEN, 0);
4260 =for apidoc cv_undef
4262 Clear out all the active components of a CV. This can happen either
4263 by an explicit C<undef &foo>, or by the reference count going to zero.
4264 In the former case, we keep the CvOUTSIDE pointer, so that any anonymous
4265 children can still follow the full lexical scope chain.
4271 Perl_cv_undef(pTHX_ CV *cv)
4275 if (CvFILE(cv) && !CvISXSUB(cv)) {
4276 /* for XSUBs CvFILE point directly to static memory; __FILE__ */
4277 Safefree(CvFILE(cv));
4282 if (!CvISXSUB(cv) && CvROOT(cv)) {
4283 if (SvTYPE(cv) == SVt_PVCV && CvDEPTH(cv))
4284 Perl_croak(aTHX_ "Can't undef active subroutine");
4287 PAD_SAVE_SETNULLPAD();
4289 op_free(CvROOT(cv));
4294 SvPOK_off((SV*)cv); /* forget prototype */
4299 /* remove CvOUTSIDE unless this is an undef rather than a free */
4300 if (!SvREFCNT(cv) && CvOUTSIDE(cv)) {
4301 if (!CvWEAKOUTSIDE(cv))
4302 SvREFCNT_dec(CvOUTSIDE(cv));
4303 CvOUTSIDE(cv) = NULL;
4306 SvREFCNT_dec((SV*)CvXSUBANY(cv).any_ptr);
4309 if (CvISXSUB(cv) && CvXSUB(cv)) {
4312 /* delete all flags except WEAKOUTSIDE */
4313 CvFLAGS(cv) &= CVf_WEAKOUTSIDE;
4317 Perl_cv_ckproto(pTHX_ const CV *cv, const GV *gv, const char *p)
4319 if (((!p != !SvPOK(cv)) || (p && strNE(p, SvPVX_const(cv)))) && ckWARN_d(WARN_PROTOTYPE)) {
4320 SV* const msg = sv_newmortal();
4324 gv_efullname3(name = sv_newmortal(), gv, NULL);
4325 sv_setpv(msg, "Prototype mismatch:");
4327 Perl_sv_catpvf(aTHX_ msg, " sub %"SVf, name);
4329 Perl_sv_catpvf(aTHX_ msg, " (%"SVf")", (const SV *)cv);
4331 sv_catpvs(msg, ": none");
4332 sv_catpvs(msg, " vs ");
4334 Perl_sv_catpvf(aTHX_ msg, "(%s)", p);
4336 sv_catpvs(msg, "none");
4337 Perl_warner(aTHX_ packWARN(WARN_PROTOTYPE), "%"SVf, msg);
4341 static void const_sv_xsub(pTHX_ CV* cv);
4345 =head1 Optree Manipulation Functions
4347 =for apidoc cv_const_sv
4349 If C<cv> is a constant sub eligible for inlining. returns the constant
4350 value returned by the sub. Otherwise, returns NULL.
4352 Constant subs can be created with C<newCONSTSUB> or as described in
4353 L<perlsub/"Constant Functions">.
4358 Perl_cv_const_sv(pTHX_ CV *cv)
4360 PERL_UNUSED_CONTEXT;
4363 if (!(SvTYPE(cv) == SVt_PVCV || SvTYPE(cv) == SVt_PVFM))
4365 return CvCONST(cv) ? (SV*)CvXSUBANY(cv).any_ptr : NULL;
4368 /* op_const_sv: examine an optree to determine whether it's in-lineable.
4369 * Can be called in 3 ways:
4372 * look for a single OP_CONST with attached value: return the value
4374 * cv && CvCLONE(cv) && !CvCONST(cv)
4376 * examine the clone prototype, and if contains only a single
4377 * OP_CONST referencing a pad const, or a single PADSV referencing
4378 * an outer lexical, return a non-zero value to indicate the CV is
4379 * a candidate for "constizing" at clone time
4383 * We have just cloned an anon prototype that was marked as a const
4384 * candidiate. Try to grab the current value, and in the case of
4385 * PADSV, ignore it if it has multiple references. Return the value.
4389 Perl_op_const_sv(pTHX_ const OP *o, CV *cv)
4397 if (o->op_type == OP_LINESEQ && cLISTOPo->op_first)
4398 o = cLISTOPo->op_first->op_sibling;
4400 for (; o; o = o->op_next) {
4401 const OPCODE type = o->op_type;
4403 if (sv && o->op_next == o)
4405 if (o->op_next != o) {
4406 if (type == OP_NEXTSTATE || type == OP_NULL || type == OP_PUSHMARK)
4408 if (type == OP_DBSTATE)
4411 if (type == OP_LEAVESUB || type == OP_RETURN)
4415 if (type == OP_CONST && cSVOPo->op_sv)
4417 else if (cv && type == OP_CONST) {
4418 sv = PAD_BASE_SV(CvPADLIST(cv), o->op_targ);
4422 else if (cv && type == OP_PADSV) {
4423 if (CvCONST(cv)) { /* newly cloned anon */
4424 sv = PAD_BASE_SV(CvPADLIST(cv), o->op_targ);
4425 /* the candidate should have 1 ref from this pad and 1 ref
4426 * from the parent */
4427 if (!sv || SvREFCNT(sv) != 2)
4434 if (PAD_COMPNAME_FLAGS(o->op_targ) & SVf_FAKE)
4435 sv = &PL_sv_undef; /* an arbitrary non-null value */
4446 Perl_newMYSUB(pTHX_ I32 floor, OP *o, OP *proto, OP *attrs, OP *block)
4448 PERL_UNUSED_ARG(floor);
4458 Perl_croak(aTHX_ "\"my sub\" not yet implemented");
4462 Perl_newSUB(pTHX_ I32 floor, OP *o, OP *proto, OP *block)
4464 return Perl_newATTRSUB(aTHX_ floor, o, proto, NULL, block);
4468 Perl_newATTRSUB(pTHX_ I32 floor, OP *o, OP *proto, OP *attrs, OP *block)
4475 register CV *cv = NULL;
4477 /* If the subroutine has no body, no attributes, and no builtin attributes
4478 then it's just a sub declaration, and we may be able to get away with
4479 storing with a placeholder scalar in the symbol table, rather than a
4480 full GV and CV. If anything is present then it will take a full CV to
4482 const I32 gv_fetch_flags
4483 = (block || attrs || (CvFLAGS(PL_compcv) & CVf_BUILTIN_ATTRS))
4484 ? GV_ADDMULTI : GV_ADDMULTI | GV_NOINIT;
4485 const char * const name = o ? SvPVx_nolen_const(cSVOPo->op_sv) : NULL;
4488 assert(proto->op_type == OP_CONST);
4489 ps = SvPVx_const(((SVOP*)proto)->op_sv, ps_len);
4494 if (!name && PERLDB_NAMEANON && CopLINE(PL_curcop)) {
4495 SV * const sv = sv_newmortal();
4496 Perl_sv_setpvf(aTHX_ sv, "%s[%s:%"IVdf"]",
4497 PL_curstash ? "__ANON__" : "__ANON__::__ANON__",
4498 CopFILE(PL_curcop), (IV)CopLINE(PL_curcop));
4499 aname = SvPVX_const(sv);
4504 gv = name ? gv_fetchsv(cSVOPo->op_sv, gv_fetch_flags, SVt_PVCV)
4505 : gv_fetchpv(aname ? aname
4506 : (PL_curstash ? "__ANON__" : "__ANON__::__ANON__"),
4507 gv_fetch_flags, SVt_PVCV);
4516 if (SvTYPE(gv) != SVt_PVGV) { /* Maybe prototype now, and had at
4517 maximum a prototype before. */
4518 if (SvTYPE(gv) > SVt_NULL) {
4519 if (!SvPOK((SV*)gv) && !(SvIOK((SV*)gv) && SvIVX((SV*)gv) == -1)
4520 && ckWARN_d(WARN_PROTOTYPE))
4522 Perl_warner(aTHX_ packWARN(WARN_PROTOTYPE), "Runaway prototype");
4524 cv_ckproto((CV*)gv, NULL, ps);
4527 sv_setpvn((SV*)gv, ps, ps_len);
4529 sv_setiv((SV*)gv, -1);
4530 SvREFCNT_dec(PL_compcv);
4531 cv = PL_compcv = NULL;
4532 PL_sub_generation++;
4536 cv = (!name || GvCVGEN(gv)) ? NULL : GvCV(gv);
4538 #ifdef GV_UNIQUE_CHECK
4539 if (cv && GvUNIQUE(gv) && SvREADONLY(cv)) {
4540 Perl_croak(aTHX_ "Can't define subroutine %s (GV is unique)", name);
4544 if (!block || !ps || *ps || attrs || (CvFLAGS(PL_compcv) & CVf_BUILTIN_ATTRS))
4547 const_sv = op_const_sv(block, NULL);
4550 const bool exists = CvROOT(cv) || CvXSUB(cv);
4552 #ifdef GV_UNIQUE_CHECK
4553 if (exists && GvUNIQUE(gv)) {
4554 Perl_croak(aTHX_ "Can't redefine unique subroutine %s", name);
4558 /* if the subroutine doesn't exist and wasn't pre-declared
4559 * with a prototype, assume it will be AUTOLOADed,
4560 * skipping the prototype check
4562 if (exists || SvPOK(cv))
4563 cv_ckproto(cv, gv, ps);
4564 /* already defined (or promised)? */
4565 if (exists || GvASSUMECV(gv)) {
4566 if (!block && !attrs) {
4567 if (CvFLAGS(PL_compcv)) {
4568 /* might have had built-in attrs applied */
4569 CvFLAGS(cv) |= (CvFLAGS(PL_compcv) & CVf_BUILTIN_ATTRS);
4571 /* just a "sub foo;" when &foo is already defined */
4572 SAVEFREESV(PL_compcv);
4576 if (ckWARN(WARN_REDEFINE)
4578 && (!const_sv || sv_cmp(cv_const_sv(cv), const_sv))))
4580 const line_t oldline = CopLINE(PL_curcop);
4581 if (PL_copline != NOLINE)
4582 CopLINE_set(PL_curcop, PL_copline);
4583 Perl_warner(aTHX_ packWARN(WARN_REDEFINE),
4584 CvCONST(cv) ? "Constant subroutine %s redefined"
4585 : "Subroutine %s redefined", name);
4586 CopLINE_set(PL_curcop, oldline);
4594 SvREFCNT_inc_void_NN(const_sv);
4596 assert(!CvROOT(cv) && !CvCONST(cv));
4597 sv_setpvn((SV*)cv, "", 0); /* prototype is "" */
4598 CvXSUBANY(cv).any_ptr = const_sv;
4599 CvXSUB(cv) = const_sv_xsub;
4605 cv = newCONSTSUB(NULL, name, const_sv);
4608 SvREFCNT_dec(PL_compcv);
4610 PL_sub_generation++;
4617 /* Need to do a C<use attributes $stash_of_cv,\&cv,@attrs>
4618 * before we clobber PL_compcv.
4622 /* Might have had built-in attributes applied -- propagate them. */
4623 CvFLAGS(cv) |= (CvFLAGS(PL_compcv) & CVf_BUILTIN_ATTRS);
4624 if (CvGV(cv) && GvSTASH(CvGV(cv)))
4625 stash = GvSTASH(CvGV(cv));
4626 else if (CvSTASH(cv))
4627 stash = CvSTASH(cv);
4629 stash = PL_curstash;
4632 /* possibly about to re-define existing subr -- ignore old cv */
4633 rcv = (SV*)PL_compcv;
4634 if (name && GvSTASH(gv))
4635 stash = GvSTASH(gv);
4637 stash = PL_curstash;
4639 apply_attrs(stash, rcv, attrs, FALSE);
4641 if (cv) { /* must reuse cv if autoloaded */
4643 /* got here with just attrs -- work done, so bug out */
4644 SAVEFREESV(PL_compcv);
4647 /* transfer PL_compcv to cv */
4649 CvFLAGS(cv) = CvFLAGS(PL_compcv);
4650 if (!CvWEAKOUTSIDE(cv))
4651 SvREFCNT_dec(CvOUTSIDE(cv));
4652 CvOUTSIDE(cv) = CvOUTSIDE(PL_compcv);
4653 CvOUTSIDE_SEQ(cv) = CvOUTSIDE_SEQ(PL_compcv);
4654 CvOUTSIDE(PL_compcv) = 0;
4655 CvPADLIST(cv) = CvPADLIST(PL_compcv);
4656 CvPADLIST(PL_compcv) = 0;
4657 /* inner references to PL_compcv must be fixed up ... */
4658 pad_fixup_inner_anons(CvPADLIST(cv), PL_compcv, cv);
4659 /* ... before we throw it away */
4660 SvREFCNT_dec(PL_compcv);
4662 if (PERLDB_INTER)/* Advice debugger on the new sub. */
4663 ++PL_sub_generation;
4670 PL_sub_generation++;
4674 CvFILE_set_from_cop(cv, PL_curcop);
4675 CvSTASH(cv) = PL_curstash;
4678 sv_setpvn((SV*)cv, ps, ps_len);
4680 if (PL_error_count) {
4684 const char *s = strrchr(name, ':');
4686 if (strEQ(s, "BEGIN")) {
4687 const char not_safe[] =
4688 "BEGIN not safe after errors--compilation aborted";
4689 if (PL_in_eval & EVAL_KEEPERR)
4690 Perl_croak(aTHX_ not_safe);
4692 /* force display of errors found but not reported */
4693 sv_catpv(ERRSV, not_safe);
4694 Perl_croak(aTHX_ "%"SVf, ERRSV);
4703 CvROOT(cv) = newUNOP(OP_LEAVESUBLV, 0,
4704 mod(scalarseq(block), OP_LEAVESUBLV));
4707 /* This makes sub {}; work as expected. */
4708 if (block->op_type == OP_STUB) {
4710 block = newSTATEOP(0, NULL, 0);
4712 CvROOT(cv) = newUNOP(OP_LEAVESUB, 0, scalarseq(block));
4714 CvROOT(cv)->op_private |= OPpREFCOUNTED;
4715 OpREFCNT_set(CvROOT(cv), 1);
4716 CvSTART(cv) = LINKLIST(CvROOT(cv));
4717 CvROOT(cv)->op_next = 0;
4718 CALL_PEEP(CvSTART(cv));
4720 /* now that optimizer has done its work, adjust pad values */
4722 pad_tidy(CvCLONE(cv) ? padtidy_SUBCLONE : padtidy_SUB);
4725 assert(!CvCONST(cv));
4726 if (ps && !*ps && op_const_sv(block, cv))
4730 if (name || aname) {
4732 const char * const tname = (name ? name : aname);
4734 if (PERLDB_SUBLINE && PL_curstash != PL_debstash) {
4735 SV * const sv = newSV(0);
4736 SV * const tmpstr = sv_newmortal();
4737 GV * const db_postponed = gv_fetchpvs("DB::postponed",
4738 GV_ADDMULTI, SVt_PVHV);
4741 Perl_sv_setpvf(aTHX_ sv, "%s:%ld-%ld",
4743 (long)PL_subline, (long)CopLINE(PL_curcop));
4744 gv_efullname3(tmpstr, gv, NULL);
4745 hv_store(GvHV(PL_DBsub), SvPVX_const(tmpstr), SvCUR(tmpstr), sv, 0);
4746 hv = GvHVn(db_postponed);
4747 if (HvFILL(hv) > 0 && hv_exists(hv, SvPVX_const(tmpstr), SvCUR(tmpstr))) {
4748 CV * const pcv = GvCV(db_postponed);
4754 call_sv((SV*)pcv, G_DISCARD);
4759 if ((s = strrchr(tname,':')))
4764 if (*s != 'B' && *s != 'E' && *s != 'C' && *s != 'I')
4767 if (strEQ(s, "BEGIN") && !PL_error_count) {
4768 const I32 oldscope = PL_scopestack_ix;
4770 SAVECOPFILE(&PL_compiling);
4771 SAVECOPLINE(&PL_compiling);
4774 PL_beginav = newAV();
4775 DEBUG_x( dump_sub(gv) );
4776 av_push(PL_beginav, (SV*)cv);
4777 GvCV(gv) = 0; /* cv has been hijacked */
4778 call_list(oldscope, PL_beginav);
4780 PL_curcop = &PL_compiling;
4781 PL_compiling.op_private = (U8)(PL_hints & HINT_PRIVATE_MASK);
4784 else if (strEQ(s, "END") && !PL_error_count) {
4787 DEBUG_x( dump_sub(gv) );
4788 av_unshift(PL_endav, 1);
4789 av_store(PL_endav, 0, (SV*)cv);
4790 GvCV(gv) = 0; /* cv has been hijacked */
4792 else if (strEQ(s, "CHECK") && !PL_error_count) {
4794 PL_checkav = newAV();
4795 DEBUG_x( dump_sub(gv) );
4796 if (PL_main_start && ckWARN(WARN_VOID))
4797 Perl_warner(aTHX_ packWARN(WARN_VOID), "Too late to run CHECK block");
4798 av_unshift(PL_checkav, 1);
4799 av_store(PL_checkav, 0, (SV*)cv);
4800 GvCV(gv) = 0; /* cv has been hijacked */
4802 else if (strEQ(s, "INIT") && !PL_error_count) {
4804 PL_initav = newAV();
4805 DEBUG_x( dump_sub(gv) );
4806 if (PL_main_start && ckWARN(WARN_VOID))
4807 Perl_warner(aTHX_ packWARN(WARN_VOID), "Too late to run INIT block");
4808 av_push(PL_initav, (SV*)cv);
4809 GvCV(gv) = 0; /* cv has been hijacked */
4814 PL_copline = NOLINE;
4819 /* XXX unsafe for threads if eval_owner isn't held */
4821 =for apidoc newCONSTSUB
4823 Creates a constant sub equivalent to Perl C<sub FOO () { 123 }> which is
4824 eligible for inlining at compile-time.
4830 Perl_newCONSTSUB(pTHX_ HV *stash, const char *name, SV *sv)
4837 SAVECOPLINE(PL_curcop);
4838 CopLINE_set(PL_curcop, PL_copline);
4841 PL_hints &= ~HINT_BLOCK_SCOPE;
4844 SAVESPTR(PL_curstash);
4845 SAVECOPSTASH(PL_curcop);
4846 PL_curstash = stash;
4847 CopSTASH_set(PL_curcop,stash);
4850 cv = newXS(name, const_sv_xsub, savepv(CopFILE(PL_curcop)));
4851 CvXSUBANY(cv).any_ptr = sv;
4853 sv_setpvn((SV*)cv, "", 0); /* prototype is "" */
4857 CopSTASH_free(PL_curcop);
4865 =for apidoc U||newXS
4867 Used by C<xsubpp> to hook up XSUBs as Perl subs.
4873 Perl_newXS(pTHX_ const char *name, XSUBADDR_t subaddr, const char *filename)
4876 GV * const gv = gv_fetchpv(name ? name :
4877 (PL_curstash ? "__ANON__" : "__ANON__::__ANON__"),
4878 GV_ADDMULTI, SVt_PVCV);
4882 Perl_croak(aTHX_ "panic: no address for '%s' in '%s'", name, filename);
4884 if ((cv = (name ? GvCV(gv) : NULL))) {
4886 /* just a cached method */
4890 else if (CvROOT(cv) || CvXSUB(cv) || GvASSUMECV(gv)) {
4891 /* already defined (or promised) */
4892 /* XXX It's possible for this HvNAME_get to return null, and get passed into strEQ */
4893 if (ckWARN(WARN_REDEFINE)) {
4894 GV * const gvcv = CvGV(cv);
4896 HV * const stash = GvSTASH(gvcv);
4898 const char *redefined_name = HvNAME_get(stash);
4899 if ( strEQ(redefined_name,"autouse") ) {
4900 const line_t oldline = CopLINE(PL_curcop);
4901 if (PL_copline != NOLINE)
4902 CopLINE_set(PL_curcop, PL_copline);
4903 Perl_warner(aTHX_ packWARN(WARN_REDEFINE),
4904 CvCONST(cv) ? "Constant subroutine %s redefined"
4905 : "Subroutine %s redefined"
4907 CopLINE_set(PL_curcop, oldline);
4917 if (cv) /* must reuse cv if autoloaded */
4921 sv_upgrade((SV *)cv, SVt_PVCV);
4925 PL_sub_generation++;
4929 (void)gv_fetchfile(filename);
4930 CvFILE(cv) = (char *)filename; /* NOTE: not copied, as it is expected to be
4931 an external constant string */
4933 CvXSUB(cv) = subaddr;
4936 const char *s = strrchr(name,':');
4942 if (*s != 'B' && *s != 'E' && *s != 'C' && *s != 'I')
4945 if (strEQ(s, "BEGIN")) {
4947 PL_beginav = newAV();
4948 av_push(PL_beginav, (SV*)cv);
4949 GvCV(gv) = 0; /* cv has been hijacked */
4951 else if (strEQ(s, "END")) {
4954 av_unshift(PL_endav, 1);
4955 av_store(PL_endav, 0, (SV*)cv);
4956 GvCV(gv) = 0; /* cv has been hijacked */
4958 else if (strEQ(s, "CHECK")) {
4960 PL_checkav = newAV();
4961 if (PL_main_start && ckWARN(WARN_VOID))
4962 Perl_warner(aTHX_ packWARN(WARN_VOID), "Too late to run CHECK block");
4963 av_unshift(PL_checkav, 1);
4964 av_store(PL_checkav, 0, (SV*)cv);
4965 GvCV(gv) = 0; /* cv has been hijacked */
4967 else if (strEQ(s, "INIT")) {
4969 PL_initav = newAV();
4970 if (PL_main_start && ckWARN(WARN_VOID))
4971 Perl_warner(aTHX_ packWARN(WARN_VOID), "Too late to run INIT block");
4972 av_push(PL_initav, (SV*)cv);
4973 GvCV(gv) = 0; /* cv has been hijacked */
4984 Perl_newFORM(pTHX_ I32 floor, OP *o, OP *block)
4990 ? gv_fetchsv(cSVOPo->op_sv, GV_ADD, SVt_PVFM)
4991 : gv_fetchpvs("STDOUT", GV_ADD|GV_NOTQUAL, SVt_PVFM);
4993 #ifdef GV_UNIQUE_CHECK
4995 Perl_croak(aTHX_ "Bad symbol for form (GV is unique)");
4999 if ((cv = GvFORM(gv))) {
5000 if (ckWARN(WARN_REDEFINE)) {
5001 const line_t oldline = CopLINE(PL_curcop);
5002 if (PL_copline != NOLINE)
5003 CopLINE_set(PL_curcop, PL_copline);
5004 Perl_warner(aTHX_ packWARN(WARN_REDEFINE),
5005 o ? "Format %"SVf" redefined"
5006 : "Format STDOUT redefined" ,cSVOPo->op_sv);
5007 CopLINE_set(PL_curcop, oldline);
5014 CvFILE_set_from_cop(cv, PL_curcop);
5017 pad_tidy(padtidy_FORMAT);
5018 CvROOT(cv) = newUNOP(OP_LEAVEWRITE, 0, scalarseq(block));
5019 CvROOT(cv)->op_private |= OPpREFCOUNTED;
5020 OpREFCNT_set(CvROOT(cv), 1);
5021 CvSTART(cv) = LINKLIST(CvROOT(cv));
5022 CvROOT(cv)->op_next = 0;
5023 CALL_PEEP(CvSTART(cv));
5025 PL_copline = NOLINE;
5030 Perl_newANONLIST(pTHX_ OP *o)
5032 return newUNOP(OP_REFGEN, 0,
5033 mod(list(convert(OP_ANONLIST, 0, o)), OP_REFGEN));
5037 Perl_newANONHASH(pTHX_ OP *o)
5039 return newUNOP(OP_REFGEN, 0,
5040 mod(list(convert(OP_ANONHASH, 0, o)), OP_REFGEN));
5044 Perl_newANONSUB(pTHX_ I32 floor, OP *proto, OP *block)
5046 return newANONATTRSUB(floor, proto, NULL, block);
5050 Perl_newANONATTRSUB(pTHX_ I32 floor, OP *proto, OP *attrs, OP *block)
5052 return newUNOP(OP_REFGEN, 0,
5053 newSVOP(OP_ANONCODE, 0,
5054 (SV*)newATTRSUB(floor, 0, proto, attrs, block)));
5058 Perl_oopsAV(pTHX_ OP *o)
5061 switch (o->op_type) {
5063 o->op_type = OP_PADAV;
5064 o->op_ppaddr = PL_ppaddr[OP_PADAV];
5065 return ref(o, OP_RV2AV);
5068 o->op_type = OP_RV2AV;
5069 o->op_ppaddr = PL_ppaddr[OP_RV2AV];
5074 if (ckWARN_d(WARN_INTERNAL))
5075 Perl_warner(aTHX_ packWARN(WARN_INTERNAL), "oops: oopsAV");
5082 Perl_oopsHV(pTHX_ OP *o)
5085 switch (o->op_type) {
5088 o->op_type = OP_PADHV;
5089 o->op_ppaddr = PL_ppaddr[OP_PADHV];
5090 return ref(o, OP_RV2HV);
5094 o->op_type = OP_RV2HV;
5095 o->op_ppaddr = PL_ppaddr[OP_RV2HV];
5100 if (ckWARN_d(WARN_INTERNAL))
5101 Perl_warner(aTHX_ packWARN(WARN_INTERNAL), "oops: oopsHV");
5108 Perl_newAVREF(pTHX_ OP *o)
5111 if (o->op_type == OP_PADANY) {
5112 o->op_type = OP_PADAV;
5113 o->op_ppaddr = PL_ppaddr[OP_PADAV];
5116 else if ((o->op_type == OP_RV2AV || o->op_type == OP_PADAV)
5117 && ckWARN(WARN_DEPRECATED)) {
5118 Perl_warner(aTHX_ packWARN(WARN_DEPRECATED),
5119 "Using an array as a reference is deprecated");
5121 return newUNOP(OP_RV2AV, 0, scalar(o));
5125 Perl_newGVREF(pTHX_ I32 type, OP *o)
5127 if (type == OP_MAPSTART || type == OP_GREPSTART || type == OP_SORT)
5128 return newUNOP(OP_NULL, 0, o);
5129 return ref(newUNOP(OP_RV2GV, OPf_REF, o), type);
5133 Perl_newHVREF(pTHX_ OP *o)
5136 if (o->op_type == OP_PADANY) {
5137 o->op_type = OP_PADHV;
5138 o->op_ppaddr = PL_ppaddr[OP_PADHV];
5141 else if ((o->op_type == OP_RV2HV || o->op_type == OP_PADHV)
5142 && ckWARN(WARN_DEPRECATED)) {
5143 Perl_warner(aTHX_ packWARN(WARN_DEPRECATED),
5144 "Using a hash as a reference is deprecated");
5146 return newUNOP(OP_RV2HV, 0, scalar(o));
5150 Perl_newCVREF(pTHX_ I32 flags, OP *o)
5152 return newUNOP(OP_RV2CV, flags, scalar(o));
5156 Perl_newSVREF(pTHX_ OP *o)
5159 if (o->op_type == OP_PADANY) {
5160 o->op_type = OP_PADSV;
5161 o->op_ppaddr = PL_ppaddr[OP_PADSV];
5164 else if (o->op_type == OP_THREADSV && !(o->op_flags & OPpDONE_SVREF)) {
5165 o->op_flags |= OPpDONE_SVREF;
5168 return newUNOP(OP_RV2SV, 0, scalar(o));
5171 /* Check routines. See the comments at the top of this file for details
5172 * on when these are called */
5175 Perl_ck_anoncode(pTHX_ OP *o)
5177 cSVOPo->op_targ = pad_add_anon(cSVOPo->op_sv, o->op_type);
5178 cSVOPo->op_sv = NULL;
5183 Perl_ck_bitop(pTHX_ OP *o)
5186 #define OP_IS_NUMCOMPARE(op) \
5187 ((op) == OP_LT || (op) == OP_I_LT || \
5188 (op) == OP_GT || (op) == OP_I_GT || \
5189 (op) == OP_LE || (op) == OP_I_LE || \
5190 (op) == OP_GE || (op) == OP_I_GE || \
5191 (op) == OP_EQ || (op) == OP_I_EQ || \
5192 (op) == OP_NE || (op) == OP_I_NE || \
5193 (op) == OP_NCMP || (op) == OP_I_NCMP)
5194 o->op_private = (U8)(PL_hints & HINT_PRIVATE_MASK);
5195 if (!(o->op_flags & OPf_STACKED) /* Not an assignment */
5196 && (o->op_type == OP_BIT_OR
5197 || o->op_type == OP_BIT_AND
5198 || o->op_type == OP_BIT_XOR))
5200 const OP * const left = cBINOPo->op_first;
5201 const OP * const right = left->op_sibling;
5202 if ((OP_IS_NUMCOMPARE(left->op_type) &&
5203 (left->op_flags & OPf_PARENS) == 0) ||
5204 (OP_IS_NUMCOMPARE(right->op_type) &&
5205 (right->op_flags & OPf_PARENS) == 0))
5206 if (ckWARN(WARN_PRECEDENCE))
5207 Perl_warner(aTHX_ packWARN(WARN_PRECEDENCE),
5208 "Possible precedence problem on bitwise %c operator",
5209 o->op_type == OP_BIT_OR ? '|'
5210 : o->op_type == OP_BIT_AND ? '&' : '^'
5217 Perl_ck_concat(pTHX_ OP *o)
5219 const OP * const kid = cUNOPo->op_first;
5220 PERL_UNUSED_CONTEXT;
5221 if (kid->op_type == OP_CONCAT && !(kid->op_private & OPpTARGET_MY) &&
5222 !(kUNOP->op_first->op_flags & OPf_MOD))
5223 o->op_flags |= OPf_STACKED;
5228 Perl_ck_spair(pTHX_ OP *o)
5231 if (o->op_flags & OPf_KIDS) {
5234 const OPCODE type = o->op_type;
5235 o = modkids(ck_fun(o), type);
5236 kid = cUNOPo->op_first;
5237 newop = kUNOP->op_first->op_sibling;
5239 (newop->op_sibling ||
5240 !(PL_opargs[newop->op_type] & OA_RETSCALAR) ||
5241 newop->op_type == OP_PADAV || newop->op_type == OP_PADHV ||
5242 newop->op_type == OP_RV2AV || newop->op_type == OP_RV2HV)) {
5246 op_free(kUNOP->op_first);
5247 kUNOP->op_first = newop;
5249 o->op_ppaddr = PL_ppaddr[++o->op_type];
5254 Perl_ck_delete(pTHX_ OP *o)
5258 if (o->op_flags & OPf_KIDS) {
5259 OP * const kid = cUNOPo->op_first;
5260 switch (kid->op_type) {
5262 o->op_flags |= OPf_SPECIAL;
5265 o->op_private |= OPpSLICE;
5268 o->op_flags |= OPf_SPECIAL;
5273 Perl_croak(aTHX_ "%s argument is not a HASH or ARRAY element or slice",
5282 Perl_ck_die(pTHX_ OP *o)
5285 if (VMSISH_HUSHED) o->op_private |= OPpHUSH_VMSISH;
5291 Perl_ck_eof(pTHX_ OP *o)
5294 const I32 type = o->op_type;
5296 if (o->op_flags & OPf_KIDS) {
5297 if (cLISTOPo->op_first->op_type == OP_STUB) {
5299 o = newUNOP(type, OPf_SPECIAL, newGVOP(OP_GV, 0, PL_argvgv));
5307 Perl_ck_eval(pTHX_ OP *o)
5310 PL_hints |= HINT_BLOCK_SCOPE;
5311 if (o->op_flags & OPf_KIDS) {
5312 SVOP * const kid = (SVOP*)cUNOPo->op_first;
5315 o->op_flags &= ~OPf_KIDS;
5318 else if (kid->op_type == OP_LINESEQ || kid->op_type == OP_STUB) {
5321 cUNOPo->op_first = 0;
5324 NewOp(1101, enter, 1, LOGOP);
5325 enter->op_type = OP_ENTERTRY;
5326 enter->op_ppaddr = PL_ppaddr[OP_ENTERTRY];
5327 enter->op_private = 0;
5329 /* establish postfix order */
5330 enter->op_next = (OP*)enter;
5332 o = prepend_elem(OP_LINESEQ, (OP*)enter, (OP*)kid);
5333 o->op_type = OP_LEAVETRY;
5334 o->op_ppaddr = PL_ppaddr[OP_LEAVETRY];
5335 enter->op_other = o;
5345 o = newUNOP(OP_ENTEREVAL, 0, newDEFSVOP());
5347 o->op_targ = (PADOFFSET)PL_hints;
5348 if ((PL_hints & HINT_LOCALIZE_HH) != 0 && GvHV(PL_hintgv)) {
5349 /* Store a copy of %^H that pp_entereval can pick up */
5350 OP *hhop = newSVOP(OP_CONST, 0, (SV*)newHVhv(GvHV(PL_hintgv)));
5351 cUNOPo->op_first->op_sibling = hhop;
5352 o->op_private |= OPpEVAL_HAS_HH;
5358 Perl_ck_exit(pTHX_ OP *o)
5361 HV * const table = GvHV(PL_hintgv);
5363 SV * const * const svp = hv_fetchs(table, "vmsish_exit", FALSE);
5364 if (svp && *svp && SvTRUE(*svp))
5365 o->op_private |= OPpEXIT_VMSISH;
5367 if (VMSISH_HUSHED) o->op_private |= OPpHUSH_VMSISH;
5373 Perl_ck_exec(pTHX_ OP *o)
5375 if (o->op_flags & OPf_STACKED) {
5378 kid = cUNOPo->op_first->op_sibling;
5379 if (kid->op_type == OP_RV2GV)
5388 Perl_ck_exists(pTHX_ OP *o)
5392 if (o->op_flags & OPf_KIDS) {
5393 OP * const kid = cUNOPo->op_first;
5394 if (kid->op_type == OP_ENTERSUB) {
5395 (void) ref(kid, o->op_type);
5396 if (kid->op_type != OP_RV2CV && !PL_error_count)
5397 Perl_croak(aTHX_ "%s argument is not a subroutine name",
5399 o->op_private |= OPpEXISTS_SUB;
5401 else if (kid->op_type == OP_AELEM)
5402 o->op_flags |= OPf_SPECIAL;
5403 else if (kid->op_type != OP_HELEM)
5404 Perl_croak(aTHX_ "%s argument is not a HASH or ARRAY element",
5412 Perl_ck_rvconst(pTHX_ register OP *o)
5415 SVOP * const kid = (SVOP*)cUNOPo->op_first;
5417 o->op_private |= (PL_hints & HINT_STRICT_REFS);
5418 if (o->op_type == OP_RV2CV)
5419 o->op_private &= ~1;
5421 if (kid->op_type == OP_CONST) {
5424 SV * const kidsv = kid->op_sv;
5426 /* Is it a constant from cv_const_sv()? */
5427 if (SvROK(kidsv) && SvREADONLY(kidsv)) {
5428 SV * const rsv = SvRV(kidsv);
5429 const int svtype = SvTYPE(rsv);
5430 const char *badtype = NULL;
5432 switch (o->op_type) {
5434 if (svtype > SVt_PVMG)
5435 badtype = "a SCALAR";
5438 if (svtype != SVt_PVAV)
5439 badtype = "an ARRAY";
5442 if (svtype != SVt_PVHV)
5446 if (svtype != SVt_PVCV)
5451 Perl_croak(aTHX_ "Constant is not %s reference", badtype);
5454 else if ((o->op_type == OP_RV2HV || o->op_type == OP_RV2SV) &&
5455 (PL_hints & HINT_STRICT_REFS) && SvPOK(kidsv)) {
5456 /* If this is an access to a stash, disable "strict refs", because
5457 * stashes aren't auto-vivified at compile-time (unless we store
5458 * symbols in them), and we don't want to produce a run-time
5459 * stricture error when auto-vivifying the stash. */
5460 const char *s = SvPV_nolen(kidsv);
5461 const STRLEN l = SvCUR(kidsv);
5462 if (l > 1 && s[l-1] == ':' && s[l-2] == ':')
5463 o->op_private &= ~HINT_STRICT_REFS;
5465 if ((o->op_private & HINT_STRICT_REFS) && (kid->op_private & OPpCONST_BARE)) {
5466 const char *badthing;
5467 switch (o->op_type) {
5469 badthing = "a SCALAR";
5472 badthing = "an ARRAY";
5475 badthing = "a HASH";
5483 "Can't use bareword (\"%"SVf"\") as %s ref while \"strict refs\" in use",
5487 * This is a little tricky. We only want to add the symbol if we
5488 * didn't add it in the lexer. Otherwise we get duplicate strict
5489 * warnings. But if we didn't add it in the lexer, we must at
5490 * least pretend like we wanted to add it even if it existed before,
5491 * or we get possible typo warnings. OPpCONST_ENTERED says
5492 * whether the lexer already added THIS instance of this symbol.
5494 iscv = (o->op_type == OP_RV2CV) * 2;
5496 gv = gv_fetchsv(kidsv,
5497 iscv | !(kid->op_private & OPpCONST_ENTERED),
5500 : o->op_type == OP_RV2SV
5502 : o->op_type == OP_RV2AV
5504 : o->op_type == OP_RV2HV
5507 } while (!gv && !(kid->op_private & OPpCONST_ENTERED) && !iscv++);
5509 kid->op_type = OP_GV;
5510 SvREFCNT_dec(kid->op_sv);
5512 /* XXX hack: dependence on sizeof(PADOP) <= sizeof(SVOP) */
5513 kPADOP->op_padix = pad_alloc(OP_GV, SVs_PADTMP);
5514 SvREFCNT_dec(PAD_SVl(kPADOP->op_padix));
5516 PAD_SETSV(kPADOP->op_padix, (SV*) SvREFCNT_inc_simple_NN(gv));
5518 kid->op_sv = SvREFCNT_inc_simple_NN(gv);
5520 kid->op_private = 0;
5521 kid->op_ppaddr = PL_ppaddr[OP_GV];
5528 Perl_ck_ftst(pTHX_ OP *o)
5531 const I32 type = o->op_type;
5533 if (o->op_flags & OPf_REF) {
5536 else if (o->op_flags & OPf_KIDS && cUNOPo->op_first->op_type != OP_STUB) {
5537 SVOP * const kid = (SVOP*)cUNOPo->op_first;
5539 if (kid->op_type == OP_CONST && (kid->op_private & OPpCONST_BARE)) {
5540 OP * const newop = newGVOP(type, OPf_REF,
5541 gv_fetchsv(kid->op_sv, GV_ADD, SVt_PVIO));
5547 if ((PL_hints & HINT_FILETEST_ACCESS) &&
5548 OP_IS_FILETEST_ACCESS(o))
5549 o->op_private |= OPpFT_ACCESS;
5551 if (PL_check[kid->op_type] == MEMBER_TO_FPTR(Perl_ck_ftst)
5552 && kid->op_type != OP_STAT && kid->op_type != OP_LSTAT)
5553 o->op_private |= OPpFT_STACKED;
5557 if (type == OP_FTTTY)
5558 o = newGVOP(type, OPf_REF, PL_stdingv);
5560 o = newUNOP(type, 0, newDEFSVOP());
5566 Perl_ck_fun(pTHX_ OP *o)
5569 const int type = o->op_type;
5570 register I32 oa = PL_opargs[type] >> OASHIFT;
5572 if (o->op_flags & OPf_STACKED) {
5573 if ((oa & OA_OPTIONAL) && (oa >> 4) && !((oa >> 4) & OA_OPTIONAL))
5576 return no_fh_allowed(o);
5579 if (o->op_flags & OPf_KIDS) {
5580 OP **tokid = &cLISTOPo->op_first;
5581 register OP *kid = cLISTOPo->op_first;
5585 if (kid->op_type == OP_PUSHMARK ||
5586 (kid->op_type == OP_NULL && kid->op_targ == OP_PUSHMARK))
5588 tokid = &kid->op_sibling;
5589 kid = kid->op_sibling;
5591 if (!kid && PL_opargs[type] & OA_DEFGV)
5592 *tokid = kid = newDEFSVOP();
5596 sibl = kid->op_sibling;
5599 /* list seen where single (scalar) arg expected? */
5600 if (numargs == 1 && !(oa >> 4)
5601 && kid->op_type == OP_LIST && type != OP_SCALAR)
5603 return too_many_arguments(o,PL_op_desc[type]);
5616 if ((type == OP_PUSH || type == OP_UNSHIFT)
5617 && !kid->op_sibling && ckWARN(WARN_SYNTAX))
5618 Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
5619 "Useless use of %s with no values",
5622 if (kid->op_type == OP_CONST &&
5623 (kid->op_private & OPpCONST_BARE))
5625 OP * const newop = newAVREF(newGVOP(OP_GV, 0,
5626 gv_fetchsv(((SVOP*)kid)->op_sv, GV_ADD, SVt_PVAV) ));
5627 if (ckWARN2(WARN_DEPRECATED, WARN_SYNTAX))
5628 Perl_warner(aTHX_ packWARN2(WARN_DEPRECATED, WARN_SYNTAX),
5629 "Array @%"SVf" missing the @ in argument %"IVdf" of %s()",
5630 ((SVOP*)kid)->op_sv, (IV)numargs, PL_op_desc[type]);
5633 kid->op_sibling = sibl;
5636 else if (kid->op_type != OP_RV2AV && kid->op_type != OP_PADAV)
5637 bad_type(numargs, "array", PL_op_desc[type], kid);
5641 if (kid->op_type == OP_CONST &&
5642 (kid->op_private & OPpCONST_BARE))
5644 OP * const newop = newHVREF(newGVOP(OP_GV, 0,
5645 gv_fetchsv(((SVOP*)kid)->op_sv, GV_ADD, SVt_PVHV) ));
5646 if (ckWARN2(WARN_DEPRECATED, WARN_SYNTAX))
5647 Perl_warner(aTHX_ packWARN2(WARN_DEPRECATED, WARN_SYNTAX),
5648 "Hash %%%"SVf" missing the %% in argument %"IVdf" of %s()",
5649 ((SVOP*)kid)->op_sv, (IV)numargs, PL_op_desc[type]);
5652 kid->op_sibling = sibl;
5655 else if (kid->op_type != OP_RV2HV && kid->op_type != OP_PADHV)
5656 bad_type(numargs, "hash", PL_op_desc[type], kid);
5661 OP * const newop = newUNOP(OP_NULL, 0, kid);
5662 kid->op_sibling = 0;
5664 newop->op_next = newop;
5666 kid->op_sibling = sibl;
5671 if (kid->op_type != OP_GV && kid->op_type != OP_RV2GV) {
5672 if (kid->op_type == OP_CONST &&
5673 (kid->op_private & OPpCONST_BARE))
5675 OP * const newop = newGVOP(OP_GV, 0,
5676 gv_fetchsv(((SVOP*)kid)->op_sv, GV_ADD, SVt_PVIO));
5677 if (!(o->op_private & 1) && /* if not unop */
5678 kid == cLISTOPo->op_last)
5679 cLISTOPo->op_last = newop;
5683 else if (kid->op_type == OP_READLINE) {
5684 /* neophyte patrol: open(<FH>), close(<FH>) etc. */
5685 bad_type(numargs, "HANDLE", OP_DESC(o), kid);
5688 I32 flags = OPf_SPECIAL;
5692 /* is this op a FH constructor? */
5693 if (is_handle_constructor(o,numargs)) {
5694 const char *name = NULL;
5698 /* Set a flag to tell rv2gv to vivify
5699 * need to "prove" flag does not mean something
5700 * else already - NI-S 1999/05/07
5703 if (kid->op_type == OP_PADSV) {
5704 name = PAD_COMPNAME_PV(kid->op_targ);
5705 /* SvCUR of a pad namesv can't be trusted
5706 * (see PL_generation), so calc its length
5712 else if (kid->op_type == OP_RV2SV
5713 && kUNOP->op_first->op_type == OP_GV)
5715 GV * const gv = cGVOPx_gv(kUNOP->op_first);
5717 len = GvNAMELEN(gv);
5719 else if (kid->op_type == OP_AELEM
5720 || kid->op_type == OP_HELEM)
5722 OP *op = ((BINOP*)kid)->op_first;
5726 const char * const a =
5727 kid->op_type == OP_AELEM ?
5729 if (((op->op_type == OP_RV2AV) ||
5730 (op->op_type == OP_RV2HV)) &&
5731 (op = ((UNOP*)op)->op_first) &&
5732 (op->op_type == OP_GV)) {
5733 /* packagevar $a[] or $h{} */
5734 GV * const gv = cGVOPx_gv(op);
5742 else if (op->op_type == OP_PADAV
5743 || op->op_type == OP_PADHV) {
5744 /* lexicalvar $a[] or $h{} */
5745 const char * const padname =
5746 PAD_COMPNAME_PV(op->op_targ);
5755 name = SvPV_const(tmpstr, len);
5760 name = "__ANONIO__";
5767 targ = pad_alloc(OP_RV2GV, SVs_PADTMP);
5768 namesv = PAD_SVl(targ);
5769 SvUPGRADE(namesv, SVt_PV);
5771 sv_setpvn(namesv, "$", 1);
5772 sv_catpvn(namesv, name, len);
5775 kid->op_sibling = 0;
5776 kid = newUNOP(OP_RV2GV, flags, scalar(kid));
5777 kid->op_targ = targ;
5778 kid->op_private |= priv;
5780 kid->op_sibling = sibl;
5786 mod(scalar(kid), type);
5790 tokid = &kid->op_sibling;
5791 kid = kid->op_sibling;
5793 o->op_private |= numargs;
5795 return too_many_arguments(o,OP_DESC(o));
5798 else if (PL_opargs[type] & OA_DEFGV) {
5800 return newUNOP(type, 0, newDEFSVOP());
5804 while (oa & OA_OPTIONAL)
5806 if (oa && oa != OA_LIST)
5807 return too_few_arguments(o,OP_DESC(o));
5813 Perl_ck_glob(pTHX_ OP *o)
5819 if ((o->op_flags & OPf_KIDS) && !cLISTOPo->op_first->op_sibling)
5820 append_elem(OP_GLOB, o, newDEFSVOP());
5822 if (!((gv = gv_fetchpvs("glob", GV_NOTQUAL, SVt_PVCV))
5823 && GvCVu(gv) && GvIMPORTED_CV(gv)))
5825 gv = gv_fetchpvs("CORE::GLOBAL::glob", 0, SVt_PVCV);
5828 #if !defined(PERL_EXTERNAL_GLOB)
5829 /* XXX this can be tightened up and made more failsafe. */
5830 if (!(gv && GvCVu(gv) && GvIMPORTED_CV(gv))) {
5833 Perl_load_module(aTHX_ PERL_LOADMOD_NOIMPORT,
5834 newSVpvs("File::Glob"), NULL, NULL, NULL);
5835 gv = gv_fetchpvs("CORE::GLOBAL::glob", 0, SVt_PVCV);
5836 glob_gv = gv_fetchpvs("File::Glob::csh_glob", 0, SVt_PVCV);
5837 GvCV(gv) = GvCV(glob_gv);
5838 SvREFCNT_inc_void((SV*)GvCV(gv));
5839 GvIMPORTED_CV_on(gv);
5842 #endif /* PERL_EXTERNAL_GLOB */
5844 if (gv && GvCVu(gv) && GvIMPORTED_CV(gv)) {
5845 append_elem(OP_GLOB, o,
5846 newSVOP(OP_CONST, 0, newSViv(PL_glob_index++)));
5847 o->op_type = OP_LIST;
5848 o->op_ppaddr = PL_ppaddr[OP_LIST];
5849 cLISTOPo->op_first->op_type = OP_PUSHMARK;
5850 cLISTOPo->op_first->op_ppaddr = PL_ppaddr[OP_PUSHMARK];
5851 cLISTOPo->op_first->op_targ = 0;
5852 o = newUNOP(OP_ENTERSUB, OPf_STACKED,
5853 append_elem(OP_LIST, o,
5854 scalar(newUNOP(OP_RV2CV, 0,
5855 newGVOP(OP_GV, 0, gv)))));
5856 o = newUNOP(OP_NULL, 0, ck_subr(o));
5857 o->op_targ = OP_GLOB; /* hint at what it used to be */
5860 gv = newGVgen("main");
5862 append_elem(OP_GLOB, o, newGVOP(OP_GV, 0, gv));
5868 Perl_ck_grep(pTHX_ OP *o)
5873 const OPCODE type = o->op_type == OP_GREPSTART ? OP_GREPWHILE : OP_MAPWHILE;
5876 o->op_ppaddr = PL_ppaddr[OP_GREPSTART];
5877 NewOp(1101, gwop, 1, LOGOP);
5879 if (o->op_flags & OPf_STACKED) {
5882 kid = cLISTOPo->op_first->op_sibling;
5883 if (!cUNOPx(kid)->op_next)
5884 Perl_croak(aTHX_ "panic: ck_grep");
5885 for (k = cUNOPx(kid)->op_first; k; k = k->op_next) {
5888 kid->op_next = (OP*)gwop;
5889 o->op_flags &= ~OPf_STACKED;
5891 kid = cLISTOPo->op_first->op_sibling;
5892 if (type == OP_MAPWHILE)
5899 kid = cLISTOPo->op_first->op_sibling;
5900 if (kid->op_type != OP_NULL)
5901 Perl_croak(aTHX_ "panic: ck_grep");
5902 kid = kUNOP->op_first;
5904 gwop->op_type = type;
5905 gwop->op_ppaddr = PL_ppaddr[type];
5906 gwop->op_first = listkids(o);
5907 gwop->op_flags |= OPf_KIDS;
5908 gwop->op_other = LINKLIST(kid);
5909 kid->op_next = (OP*)gwop;
5910 offset = pad_findmy("$_");
5911 if (offset == NOT_IN_PAD || PAD_COMPNAME_FLAGS_isOUR(offset)) {
5912 o->op_private = gwop->op_private = 0;
5913 gwop->op_targ = pad_alloc(type, SVs_PADTMP);
5916 o->op_private = gwop->op_private = OPpGREP_LEX;
5917 gwop->op_targ = o->op_targ = offset;
5920 kid = cLISTOPo->op_first->op_sibling;
5921 if (!kid || !kid->op_sibling)
5922 return too_few_arguments(o,OP_DESC(o));
5923 for (kid = kid->op_sibling; kid; kid = kid->op_sibling)
5924 mod(kid, OP_GREPSTART);
5930 Perl_ck_index(pTHX_ OP *o)
5932 if (o->op_flags & OPf_KIDS) {
5933 OP *kid = cLISTOPo->op_first->op_sibling; /* get past pushmark */
5935 kid = kid->op_sibling; /* get past "big" */
5936 if (kid && kid->op_type == OP_CONST)
5937 fbm_compile(((SVOP*)kid)->op_sv, 0);
5943 Perl_ck_lengthconst(pTHX_ OP *o)
5945 /* XXX length optimization goes here */
5950 Perl_ck_lfun(pTHX_ OP *o)
5952 const OPCODE type = o->op_type;
5953 return modkids(ck_fun(o), type);
5957 Perl_ck_defined(pTHX_ OP *o) /* 19990527 MJD */
5959 if ((o->op_flags & OPf_KIDS) && ckWARN2(WARN_DEPRECATED, WARN_SYNTAX)) {
5960 switch (cUNOPo->op_first->op_type) {
5962 /* This is needed for
5963 if (defined %stash::)
5964 to work. Do not break Tk.
5966 break; /* Globals via GV can be undef */
5968 case OP_AASSIGN: /* Is this a good idea? */
5969 Perl_warner(aTHX_ packWARN2(WARN_DEPRECATED, WARN_SYNTAX),
5970 "defined(@array) is deprecated");
5971 Perl_warner(aTHX_ packWARN2(WARN_DEPRECATED, WARN_SYNTAX),
5972 "\t(Maybe you should just omit the defined()?)\n");
5975 /* This is needed for
5976 if (defined %stash::)
5977 to work. Do not break Tk.
5979 break; /* Globals via GV can be undef */
5981 Perl_warner(aTHX_ packWARN2(WARN_DEPRECATED, WARN_SYNTAX),
5982 "defined(%%hash) is deprecated");
5983 Perl_warner(aTHX_ packWARN2(WARN_DEPRECATED, WARN_SYNTAX),
5984 "\t(Maybe you should just omit the defined()?)\n");
5995 Perl_ck_rfun(pTHX_ OP *o)
5997 const OPCODE type = o->op_type;
5998 return refkids(ck_fun(o), type);
6002 Perl_ck_listiob(pTHX_ OP *o)
6006 kid = cLISTOPo->op_first;
6009 kid = cLISTOPo->op_first;
6011 if (kid->op_type == OP_PUSHMARK)
6012 kid = kid->op_sibling;
6013 if (kid && o->op_flags & OPf_STACKED)
6014 kid = kid->op_sibling;
6015 else if (kid && !kid->op_sibling) { /* print HANDLE; */
6016 if (kid->op_type == OP_CONST && kid->op_private & OPpCONST_BARE) {
6017 o->op_flags |= OPf_STACKED; /* make it a filehandle */
6018 kid = newUNOP(OP_RV2GV, OPf_REF, scalar(kid));
6019 cLISTOPo->op_first->op_sibling = kid;
6020 cLISTOPo->op_last = kid;
6021 kid = kid->op_sibling;
6026 append_elem(o->op_type, o, newDEFSVOP());
6032 Perl_ck_say(pTHX_ OP *o)
6035 o->op_type = OP_PRINT;
6036 cLISTOPo->op_last = cLISTOPo->op_last->op_sibling
6037 = newSVOP(OP_CONST, 0, newSVpvs("\n"));
6042 Perl_ck_smartmatch(pTHX_ OP *o)
6045 if (0 == (o->op_flags & OPf_SPECIAL)) {
6046 OP *first = cBINOPo->op_first;
6047 OP *second = first->op_sibling;
6049 /* Implicitly take a reference to an array or hash */
6050 first->op_sibling = NULL;
6051 first = cBINOPo->op_first = ref_array_or_hash(first);
6052 second = first->op_sibling = ref_array_or_hash(second);
6054 /* Implicitly take a reference to a regular expression */
6055 if (first->op_type == OP_MATCH) {
6056 first->op_type = OP_QR;
6057 first->op_ppaddr = PL_ppaddr[OP_QR];
6059 if (second->op_type == OP_MATCH) {
6060 second->op_type = OP_QR;
6061 second->op_ppaddr = PL_ppaddr[OP_QR];
6070 Perl_ck_sassign(pTHX_ OP *o)
6072 OP *kid = cLISTOPo->op_first;
6073 /* has a disposable target? */
6074 if ((PL_opargs[kid->op_type] & OA_TARGLEX)
6075 && !(kid->op_flags & OPf_STACKED)
6076 /* Cannot steal the second time! */
6077 && !(kid->op_private & OPpTARGET_MY))
6079 OP * const kkid = kid->op_sibling;
6081 /* Can just relocate the target. */
6082 if (kkid && kkid->op_type == OP_PADSV
6083 && !(kkid->op_private & OPpLVAL_INTRO))
6085 kid->op_targ = kkid->op_targ;
6087 /* Now we do not need PADSV and SASSIGN. */
6088 kid->op_sibling = o->op_sibling; /* NULL */
6089 cLISTOPo->op_first = NULL;
6092 kid->op_private |= OPpTARGET_MY; /* Used for context settings */
6100 Perl_ck_match(pTHX_ OP *o)
6103 if (o->op_type != OP_QR && PL_compcv) {
6104 const I32 offset = pad_findmy("$_");
6105 if (offset != NOT_IN_PAD && !(PAD_COMPNAME_FLAGS_isOUR(offset))) {
6106 o->op_targ = offset;
6107 o->op_private |= OPpTARGET_MY;
6110 if (o->op_type == OP_MATCH || o->op_type == OP_QR)
6111 o->op_private |= OPpRUNTIME;
6116 Perl_ck_method(pTHX_ OP *o)
6118 OP * const kid = cUNOPo->op_first;
6119 if (kid->op_type == OP_CONST) {
6120 SV* sv = kSVOP->op_sv;
6121 const char * const method = SvPVX_const(sv);
6122 if (!(strchr(method, ':') || strchr(method, '\''))) {
6124 if (!SvREADONLY(sv) || !SvFAKE(sv)) {
6125 sv = newSVpvn_share(method, SvCUR(sv), 0);
6128 kSVOP->op_sv = NULL;
6130 cmop = newSVOP(OP_METHOD_NAMED, 0, sv);
6139 Perl_ck_null(pTHX_ OP *o)
6141 PERL_UNUSED_CONTEXT;
6146 Perl_ck_open(pTHX_ OP *o)
6149 HV * const table = GvHV(PL_hintgv);
6151 SV **svp = hv_fetchs(table, "open_IN", FALSE);
6153 const I32 mode = mode_from_discipline(*svp);
6154 if (mode & O_BINARY)
6155 o->op_private |= OPpOPEN_IN_RAW;
6156 else if (mode & O_TEXT)
6157 o->op_private |= OPpOPEN_IN_CRLF;
6160 svp = hv_fetchs(table, "open_OUT", FALSE);
6162 const I32 mode = mode_from_discipline(*svp);
6163 if (mode & O_BINARY)
6164 o->op_private |= OPpOPEN_OUT_RAW;
6165 else if (mode & O_TEXT)
6166 o->op_private |= OPpOPEN_OUT_CRLF;
6169 if (o->op_type == OP_BACKTICK)
6172 /* In case of three-arg dup open remove strictness
6173 * from the last arg if it is a bareword. */
6174 OP * const first = cLISTOPx(o)->op_first; /* The pushmark. */
6175 OP * const last = cLISTOPx(o)->op_last; /* The bareword. */
6179 if ((last->op_type == OP_CONST) && /* The bareword. */
6180 (last->op_private & OPpCONST_BARE) &&
6181 (last->op_private & OPpCONST_STRICT) &&
6182 (oa = first->op_sibling) && /* The fh. */
6183 (oa = oa->op_sibling) && /* The mode. */
6184 (oa->op_type == OP_CONST) &&
6185 SvPOK(((SVOP*)oa)->op_sv) &&
6186 (mode = SvPVX_const(((SVOP*)oa)->op_sv)) &&
6187 mode[0] == '>' && mode[1] == '&' && /* A dup open. */
6188 (last == oa->op_sibling)) /* The bareword. */
6189 last->op_private &= ~OPpCONST_STRICT;
6195 Perl_ck_repeat(pTHX_ OP *o)
6197 if (cBINOPo->op_first->op_flags & OPf_PARENS) {
6198 o->op_private |= OPpREPEAT_DOLIST;
6199 cBINOPo->op_first = force_list(cBINOPo->op_first);
6207 Perl_ck_require(pTHX_ OP *o)
6212 if (o->op_flags & OPf_KIDS) { /* Shall we supply missing .pm? */
6213 SVOP * const kid = (SVOP*)cUNOPo->op_first;
6215 if (kid->op_type == OP_CONST && (kid->op_private & OPpCONST_BARE)) {
6216 SV * const sv = kid->op_sv;
6217 U32 was_readonly = SvREADONLY(sv);
6222 sv_force_normal_flags(sv, 0);
6223 assert(!SvREADONLY(sv));
6230 for (s = SvPVX(sv); *s; s++) {
6231 if (*s == ':' && s[1] == ':') {
6232 const STRLEN len = strlen(s+2)+1;
6234 Move(s+2, s+1, len, char);
6235 SvCUR_set(sv, SvCUR(sv) - 1);
6238 sv_catpvs(sv, ".pm");
6239 SvFLAGS(sv) |= was_readonly;
6243 if (!(o->op_flags & OPf_SPECIAL)) { /* Wasn't written as CORE::require */
6244 /* handle override, if any */
6245 gv = gv_fetchpvs("require", GV_NOTQUAL, SVt_PVCV);
6246 if (!(gv && GvCVu(gv) && GvIMPORTED_CV(gv))) {
6247 GV * const * const gvp = (GV**)hv_fetchs(PL_globalstash, "require", FALSE);
6248 gv = gvp ? *gvp : NULL;
6252 if (gv && GvCVu(gv) && GvIMPORTED_CV(gv)) {
6253 OP * const kid = cUNOPo->op_first;
6254 cUNOPo->op_first = 0;
6256 return ck_subr(newUNOP(OP_ENTERSUB, OPf_STACKED,
6257 append_elem(OP_LIST, kid,
6258 scalar(newUNOP(OP_RV2CV, 0,
6267 Perl_ck_return(pTHX_ OP *o)
6270 if (CvLVALUE(PL_compcv)) {
6272 for (kid = cLISTOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
6273 mod(kid, OP_LEAVESUBLV);
6279 Perl_ck_select(pTHX_ OP *o)
6283 if (o->op_flags & OPf_KIDS) {
6284 kid = cLISTOPo->op_first->op_sibling; /* get past pushmark */
6285 if (kid && kid->op_sibling) {
6286 o->op_type = OP_SSELECT;
6287 o->op_ppaddr = PL_ppaddr[OP_SSELECT];
6289 return fold_constants(o);
6293 kid = cLISTOPo->op_first->op_sibling; /* get past pushmark */
6294 if (kid && kid->op_type == OP_RV2GV)
6295 kid->op_private &= ~HINT_STRICT_REFS;
6300 Perl_ck_shift(pTHX_ OP *o)
6303 const I32 type = o->op_type;
6305 if (!(o->op_flags & OPf_KIDS)) {
6309 argop = newUNOP(OP_RV2AV, 0,
6310 scalar(newGVOP(OP_GV, 0, CvUNIQUE(PL_compcv) ? PL_argvgv : PL_defgv)));
6311 return newUNOP(type, 0, scalar(argop));
6313 return scalar(modkids(ck_fun(o), type));
6317 Perl_ck_sort(pTHX_ OP *o)
6322 if (o->op_type == OP_SORT && (PL_hints & HINT_LOCALIZE_HH) != 0)
6324 HV * const hinthv = GvHV(PL_hintgv);
6326 SV ** const svp = hv_fetchs(hinthv, "sort", FALSE);
6328 const I32 sorthints = (I32)SvIV(*svp);
6329 if ((sorthints & HINT_SORT_QUICKSORT) != 0)
6330 o->op_private |= OPpSORT_QSORT;
6331 if ((sorthints & HINT_SORT_STABLE) != 0)
6332 o->op_private |= OPpSORT_STABLE;
6337 if (o->op_type == OP_SORT && o->op_flags & OPf_STACKED)
6339 firstkid = cLISTOPo->op_first->op_sibling; /* get past pushmark */
6340 if (o->op_flags & OPf_STACKED) { /* may have been cleared */
6342 OP *kid = cUNOPx(firstkid)->op_first; /* get past null */
6344 if (kid->op_type == OP_SCOPE || kid->op_type == OP_LEAVE) {
6346 if (kid->op_type == OP_SCOPE) {
6350 else if (kid->op_type == OP_LEAVE) {
6351 if (o->op_type == OP_SORT) {
6352 op_null(kid); /* wipe out leave */
6355 for (k = kLISTOP->op_first->op_next; k; k = k->op_next) {
6356 if (k->op_next == kid)
6358 /* don't descend into loops */
6359 else if (k->op_type == OP_ENTERLOOP
6360 || k->op_type == OP_ENTERITER)
6362 k = cLOOPx(k)->op_lastop;
6367 kid->op_next = 0; /* just disconnect the leave */
6368 k = kLISTOP->op_first;
6373 if (o->op_type == OP_SORT) {
6374 /* provide scalar context for comparison function/block */
6380 o->op_flags |= OPf_SPECIAL;
6382 else if (kid->op_type == OP_RV2SV || kid->op_type == OP_PADSV)
6385 firstkid = firstkid->op_sibling;
6388 /* provide list context for arguments */
6389 if (o->op_type == OP_SORT)
6396 S_simplify_sort(pTHX_ OP *o)
6399 register OP *kid = cLISTOPo->op_first->op_sibling; /* get past pushmark */
6404 if (!(o->op_flags & OPf_STACKED))
6406 GvMULTI_on(gv_fetchpvs("a", GV_ADD|GV_NOTQUAL, SVt_PV));
6407 GvMULTI_on(gv_fetchpvs("b", GV_ADD|GV_NOTQUAL, SVt_PV));
6408 kid = kUNOP->op_first; /* get past null */
6409 if (kid->op_type != OP_SCOPE)
6411 kid = kLISTOP->op_last; /* get past scope */
6412 switch(kid->op_type) {
6420 k = kid; /* remember this node*/
6421 if (kBINOP->op_first->op_type != OP_RV2SV)
6423 kid = kBINOP->op_first; /* get past cmp */
6424 if (kUNOP->op_first->op_type != OP_GV)
6426 kid = kUNOP->op_first; /* get past rv2sv */
6428 if (GvSTASH(gv) != PL_curstash)
6430 gvname = GvNAME(gv);
6431 if (*gvname == 'a' && gvname[1] == '\0')
6433 else if (*gvname == 'b' && gvname[1] == '\0')
6438 kid = k; /* back to cmp */
6439 if (kBINOP->op_last->op_type != OP_RV2SV)
6441 kid = kBINOP->op_last; /* down to 2nd arg */
6442 if (kUNOP->op_first->op_type != OP_GV)
6444 kid = kUNOP->op_first; /* get past rv2sv */
6446 if (GvSTASH(gv) != PL_curstash)
6448 gvname = GvNAME(gv);
6450 ? !(*gvname == 'a' && gvname[1] == '\0')
6451 : !(*gvname == 'b' && gvname[1] == '\0'))
6453 o->op_flags &= ~(OPf_STACKED | OPf_SPECIAL);
6455 o->op_private |= OPpSORT_DESCEND;
6456 if (k->op_type == OP_NCMP)
6457 o->op_private |= OPpSORT_NUMERIC;
6458 if (k->op_type == OP_I_NCMP)
6459 o->op_private |= OPpSORT_NUMERIC | OPpSORT_INTEGER;
6460 kid = cLISTOPo->op_first->op_sibling;
6461 cLISTOPo->op_first->op_sibling = kid->op_sibling; /* bypass old block */
6462 op_free(kid); /* then delete it */
6466 Perl_ck_split(pTHX_ OP *o)
6471 if (o->op_flags & OPf_STACKED)
6472 return no_fh_allowed(o);
6474 kid = cLISTOPo->op_first;
6475 if (kid->op_type != OP_NULL)
6476 Perl_croak(aTHX_ "panic: ck_split");
6477 kid = kid->op_sibling;
6478 op_free(cLISTOPo->op_first);
6479 cLISTOPo->op_first = kid;
6481 cLISTOPo->op_first = kid = newSVOP(OP_CONST, 0, newSVpvs(" "));
6482 cLISTOPo->op_last = kid; /* There was only one element previously */
6485 if (kid->op_type != OP_MATCH || kid->op_flags & OPf_STACKED) {
6486 OP * const sibl = kid->op_sibling;
6487 kid->op_sibling = 0;
6488 kid = pmruntime( newPMOP(OP_MATCH, OPf_SPECIAL), kid, 0);
6489 if (cLISTOPo->op_first == cLISTOPo->op_last)
6490 cLISTOPo->op_last = kid;
6491 cLISTOPo->op_first = kid;
6492 kid->op_sibling = sibl;
6495 kid->op_type = OP_PUSHRE;
6496 kid->op_ppaddr = PL_ppaddr[OP_PUSHRE];
6498 if (((PMOP *)kid)->op_pmflags & PMf_GLOBAL && ckWARN(WARN_REGEXP)) {
6499 Perl_warner(aTHX_ packWARN(WARN_REGEXP),
6500 "Use of /g modifier is meaningless in split");
6503 if (!kid->op_sibling)
6504 append_elem(OP_SPLIT, o, newDEFSVOP());
6506 kid = kid->op_sibling;
6509 if (!kid->op_sibling)
6510 append_elem(OP_SPLIT, o, newSVOP(OP_CONST, 0, newSViv(0)));
6512 kid = kid->op_sibling;
6515 if (kid->op_sibling)
6516 return too_many_arguments(o,OP_DESC(o));
6522 Perl_ck_join(pTHX_ OP *o)
6524 const OP * const kid = cLISTOPo->op_first->op_sibling;
6525 if (kid && kid->op_type == OP_MATCH) {
6526 if (ckWARN(WARN_SYNTAX)) {
6527 const REGEXP *re = PM_GETRE(kPMOP);
6528 const char *pmstr = re ? re->precomp : "STRING";
6529 Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
6530 "/%s/ should probably be written as \"%s\"",
6538 Perl_ck_subr(pTHX_ OP *o)
6541 OP *prev = ((cUNOPo->op_first->op_sibling)
6542 ? cUNOPo : ((UNOP*)cUNOPo->op_first))->op_first;
6543 OP *o2 = prev->op_sibling;
6550 I32 contextclass = 0;
6554 o->op_private |= OPpENTERSUB_HASTARG;
6555 for (cvop = o2; cvop->op_sibling; cvop = cvop->op_sibling) ;
6556 if (cvop->op_type == OP_RV2CV) {
6558 o->op_private |= (cvop->op_private & OPpENTERSUB_AMPER);
6559 op_null(cvop); /* disable rv2cv */
6560 tmpop = (SVOP*)((UNOP*)cvop)->op_first;
6561 if (tmpop->op_type == OP_GV && !(o->op_private & OPpENTERSUB_AMPER)) {
6562 GV *gv = cGVOPx_gv(tmpop);
6565 tmpop->op_private |= OPpEARLY_CV;
6568 namegv = CvANON(cv) ? gv : CvGV(cv);
6569 proto = SvPV_nolen((SV*)cv);
6571 if (CvASSERTION(cv)) {
6572 if (PL_hints & HINT_ASSERTING) {
6573 if (PERLDB_ASSERTION && PL_curstash != PL_debstash)
6574 o->op_private |= OPpENTERSUB_DB;
6578 if (!(PL_hints & HINT_ASSERTIONSSEEN) && ckWARN(WARN_ASSERTIONS)) {
6579 Perl_warner(aTHX_ packWARN(WARN_ASSERTIONS),
6580 "Impossible to activate assertion call");
6587 else if (cvop->op_type == OP_METHOD || cvop->op_type == OP_METHOD_NAMED) {
6588 if (o2->op_type == OP_CONST)
6589 o2->op_private &= ~OPpCONST_STRICT;
6590 else if (o2->op_type == OP_LIST) {
6591 OP * const sib = ((UNOP*)o2)->op_first->op_sibling;
6592 if (sib && sib->op_type == OP_CONST)
6593 sib->op_private &= ~OPpCONST_STRICT;
6596 o->op_private |= (PL_hints & HINT_STRICT_REFS);
6597 if (PERLDB_SUB && PL_curstash != PL_debstash)
6598 o->op_private |= OPpENTERSUB_DB;
6599 while (o2 != cvop) {
6603 return too_many_arguments(o, gv_ename(namegv));
6621 if (o2->op_type != OP_REFGEN && o2->op_type != OP_UNDEF)
6623 arg == 1 ? "block or sub {}" : "sub {}",
6624 gv_ename(namegv), o2);
6627 /* '*' allows any scalar type, including bareword */
6630 if (o2->op_type == OP_RV2GV)
6631 goto wrapref; /* autoconvert GLOB -> GLOBref */
6632 else if (o2->op_type == OP_CONST)
6633 o2->op_private &= ~OPpCONST_STRICT;
6634 else if (o2->op_type == OP_ENTERSUB) {
6635 /* accidental subroutine, revert to bareword */
6636 OP *gvop = ((UNOP*)o2)->op_first;
6637 if (gvop && gvop->op_type == OP_NULL) {
6638 gvop = ((UNOP*)gvop)->op_first;
6640 for (; gvop->op_sibling; gvop = gvop->op_sibling)
6643 (gvop->op_private & OPpENTERSUB_NOPAREN) &&
6644 (gvop = ((UNOP*)gvop)->op_first) &&
6645 gvop->op_type == OP_GV)
6647 GV * const gv = cGVOPx_gv(gvop);
6648 OP * const sibling = o2->op_sibling;
6649 SV * const n = newSVpvs("");
6651 gv_fullname4(n, gv, "", FALSE);
6652 o2 = newSVOP(OP_CONST, 0, n);
6653 prev->op_sibling = o2;
6654 o2->op_sibling = sibling;
6670 if (contextclass++ == 0) {
6671 e = strchr(proto, ']');
6672 if (!e || e == proto)
6681 /* XXX We shouldn't be modifying proto, so we can const proto */
6686 while (*--p != '[');
6687 bad_type(arg, Perl_form(aTHX_ "one of %s", p),
6688 gv_ename(namegv), o2);
6694 if (o2->op_type == OP_RV2GV)
6697 bad_type(arg, "symbol", gv_ename(namegv), o2);
6700 if (o2->op_type == OP_ENTERSUB)
6703 bad_type(arg, "subroutine entry", gv_ename(namegv), o2);
6706 if (o2->op_type == OP_RV2SV ||
6707 o2->op_type == OP_PADSV ||
6708 o2->op_type == OP_HELEM ||
6709 o2->op_type == OP_AELEM ||
6710 o2->op_type == OP_THREADSV)
6713 bad_type(arg, "scalar", gv_ename(namegv), o2);
6716 if (o2->op_type == OP_RV2AV ||
6717 o2->op_type == OP_PADAV)
6720 bad_type(arg, "array", gv_ename(namegv), o2);
6723 if (o2->op_type == OP_RV2HV ||
6724 o2->op_type == OP_PADHV)
6727 bad_type(arg, "hash", gv_ename(namegv), o2);
6732 OP* const sib = kid->op_sibling;
6733 kid->op_sibling = 0;
6734 o2 = newUNOP(OP_REFGEN, 0, kid);
6735 o2->op_sibling = sib;
6736 prev->op_sibling = o2;
6738 if (contextclass && e) {
6753 Perl_croak(aTHX_ "Malformed prototype for %s: %"SVf,
6754 gv_ename(namegv), cv);
6759 mod(o2, OP_ENTERSUB);
6761 o2 = o2->op_sibling;
6763 if (proto && !optional &&
6764 (*proto && *proto != '@' && *proto != '%' && *proto != ';'))
6765 return too_few_arguments(o, gv_ename(namegv));
6768 o=newSVOP(OP_CONST, 0, newSViv(0));
6774 Perl_ck_svconst(pTHX_ OP *o)
6776 PERL_UNUSED_CONTEXT;
6777 SvREADONLY_on(cSVOPo->op_sv);
6782 Perl_ck_chdir(pTHX_ OP *o)
6784 if (o->op_flags & OPf_KIDS) {
6785 SVOP *kid = (SVOP*)cUNOPo->op_first;
6787 if (kid && kid->op_type == OP_CONST &&
6788 (kid->op_private & OPpCONST_BARE))
6790 o->op_flags |= OPf_SPECIAL;
6791 kid->op_private &= ~OPpCONST_STRICT;
6798 Perl_ck_trunc(pTHX_ OP *o)
6800 if (o->op_flags & OPf_KIDS) {
6801 SVOP *kid = (SVOP*)cUNOPo->op_first;
6803 if (kid->op_type == OP_NULL)
6804 kid = (SVOP*)kid->op_sibling;
6805 if (kid && kid->op_type == OP_CONST &&
6806 (kid->op_private & OPpCONST_BARE))
6808 o->op_flags |= OPf_SPECIAL;
6809 kid->op_private &= ~OPpCONST_STRICT;
6816 Perl_ck_unpack(pTHX_ OP *o)
6818 OP *kid = cLISTOPo->op_first;
6819 if (kid->op_sibling) {
6820 kid = kid->op_sibling;
6821 if (!kid->op_sibling)
6822 kid->op_sibling = newDEFSVOP();
6828 Perl_ck_substr(pTHX_ OP *o)
6831 if ((o->op_flags & OPf_KIDS) && o->op_private == 4) {
6832 OP *kid = cLISTOPo->op_first;
6834 if (kid->op_type == OP_NULL)
6835 kid = kid->op_sibling;
6837 kid->op_flags |= OPf_MOD;
6843 /* A peephole optimizer. We visit the ops in the order they're to execute.
6844 * See the comments at the top of this file for more details about when
6845 * peep() is called */
6848 Perl_peep(pTHX_ register OP *o)
6851 register OP* oldop = NULL;
6853 if (!o || o->op_opt)
6857 SAVEVPTR(PL_curcop);
6858 for (; o; o = o->op_next) {
6862 switch (o->op_type) {
6866 PL_curcop = ((COP*)o); /* for warnings */
6871 if (cSVOPo->op_private & OPpCONST_STRICT)
6872 no_bareword_allowed(o);
6874 case OP_METHOD_NAMED:
6875 /* Relocate sv to the pad for thread safety.
6876 * Despite being a "constant", the SV is written to,
6877 * for reference counts, sv_upgrade() etc. */
6879 const PADOFFSET ix = pad_alloc(OP_CONST, SVs_PADTMP);
6880 if (o->op_type == OP_CONST && SvPADTMP(cSVOPo->op_sv)) {
6881 /* If op_sv is already a PADTMP then it is being used by
6882 * some pad, so make a copy. */
6883 sv_setsv(PAD_SVl(ix),cSVOPo->op_sv);
6884 SvREADONLY_on(PAD_SVl(ix));
6885 SvREFCNT_dec(cSVOPo->op_sv);
6887 else if (o->op_type == OP_CONST
6888 && cSVOPo->op_sv == &PL_sv_undef) {
6889 /* PL_sv_undef is hack - it's unsafe to store it in the
6890 AV that is the pad, because av_fetch treats values of
6891 PL_sv_undef as a "free" AV entry and will merrily
6892 replace them with a new SV, causing pad_alloc to think
6893 that this pad slot is free. (When, clearly, it is not)
6895 SvOK_off(PAD_SVl(ix));
6896 SvPADTMP_on(PAD_SVl(ix));
6897 SvREADONLY_on(PAD_SVl(ix));
6900 SvREFCNT_dec(PAD_SVl(ix));
6901 SvPADTMP_on(cSVOPo->op_sv);
6902 PAD_SETSV(ix, cSVOPo->op_sv);
6903 /* XXX I don't know how this isn't readonly already. */
6904 SvREADONLY_on(PAD_SVl(ix));
6906 cSVOPo->op_sv = NULL;
6914 if (o->op_next && o->op_next->op_type == OP_STRINGIFY) {
6915 if (o->op_next->op_private & OPpTARGET_MY) {
6916 if (o->op_flags & OPf_STACKED) /* chained concats */
6917 goto ignore_optimization;
6919 /* assert(PL_opargs[o->op_type] & OA_TARGLEX); */
6920 o->op_targ = o->op_next->op_targ;
6921 o->op_next->op_targ = 0;
6922 o->op_private |= OPpTARGET_MY;
6925 op_null(o->op_next);
6927 ignore_optimization:
6931 if ((o->op_flags & OPf_WANT) != OPf_WANT_LIST) {
6933 break; /* Scalar stub must produce undef. List stub is noop */
6937 if (o->op_targ == OP_NEXTSTATE
6938 || o->op_targ == OP_DBSTATE
6939 || o->op_targ == OP_SETSTATE)
6941 PL_curcop = ((COP*)o);
6943 /* XXX: We avoid setting op_seq here to prevent later calls
6944 to peep() from mistakenly concluding that optimisation
6945 has already occurred. This doesn't fix the real problem,
6946 though (See 20010220.007). AMS 20010719 */
6947 /* op_seq functionality is now replaced by op_opt */
6948 if (oldop && o->op_next) {
6949 oldop->op_next = o->op_next;
6957 if (oldop && o->op_next) {
6958 oldop->op_next = o->op_next;
6966 if (o->op_type == OP_PADAV || o->op_next->op_type == OP_RV2AV) {
6967 OP* const pop = (o->op_type == OP_PADAV) ?
6968 o->op_next : o->op_next->op_next;
6970 if (pop && pop->op_type == OP_CONST &&
6971 ((PL_op = pop->op_next)) &&
6972 pop->op_next->op_type == OP_AELEM &&
6973 !(pop->op_next->op_private &
6974 (OPpLVAL_INTRO|OPpLVAL_DEFER|OPpDEREF|OPpMAYBE_LVSUB)) &&
6975 (i = SvIV(((SVOP*)pop)->op_sv) - PL_curcop->cop_arybase)
6980 if (cSVOPx(pop)->op_private & OPpCONST_STRICT)
6981 no_bareword_allowed(pop);
6982 if (o->op_type == OP_GV)
6983 op_null(o->op_next);
6984 op_null(pop->op_next);
6986 o->op_flags |= pop->op_next->op_flags & OPf_MOD;
6987 o->op_next = pop->op_next->op_next;
6988 o->op_ppaddr = PL_ppaddr[OP_AELEMFAST];
6989 o->op_private = (U8)i;
6990 if (o->op_type == OP_GV) {
6995 o->op_flags |= OPf_SPECIAL;
6996 o->op_type = OP_AELEMFAST;
7002 if (o->op_next->op_type == OP_RV2SV) {
7003 if (!(o->op_next->op_private & OPpDEREF)) {
7004 op_null(o->op_next);
7005 o->op_private |= o->op_next->op_private & (OPpLVAL_INTRO
7007 o->op_next = o->op_next->op_next;
7008 o->op_type = OP_GVSV;
7009 o->op_ppaddr = PL_ppaddr[OP_GVSV];
7012 else if ((o->op_private & OPpEARLY_CV) && ckWARN(WARN_PROTOTYPE)) {
7013 GV * const gv = cGVOPo_gv;
7014 if (SvTYPE(gv) == SVt_PVGV && GvCV(gv) && SvPVX_const(GvCV(gv))) {
7015 /* XXX could check prototype here instead of just carping */
7016 SV * const sv = sv_newmortal();
7017 gv_efullname3(sv, gv, NULL);
7018 Perl_warner(aTHX_ packWARN(WARN_PROTOTYPE),
7019 "%"SVf"() called too early to check prototype",
7023 else if (o->op_next->op_type == OP_READLINE
7024 && o->op_next->op_next->op_type == OP_CONCAT
7025 && (o->op_next->op_next->op_flags & OPf_STACKED))
7027 /* Turn "$a .= <FH>" into an OP_RCATLINE. AMS 20010917 */
7028 o->op_type = OP_RCATLINE;
7029 o->op_flags |= OPf_STACKED;
7030 o->op_ppaddr = PL_ppaddr[OP_RCATLINE];
7031 op_null(o->op_next->op_next);
7032 op_null(o->op_next);
7049 while (cLOGOP->op_other->op_type == OP_NULL)
7050 cLOGOP->op_other = cLOGOP->op_other->op_next;
7051 peep(cLOGOP->op_other); /* Recursive calls are not replaced by fptr calls */
7057 while (cLOOP->op_redoop->op_type == OP_NULL)
7058 cLOOP->op_redoop = cLOOP->op_redoop->op_next;
7059 peep(cLOOP->op_redoop);
7060 while (cLOOP->op_nextop->op_type == OP_NULL)
7061 cLOOP->op_nextop = cLOOP->op_nextop->op_next;
7062 peep(cLOOP->op_nextop);
7063 while (cLOOP->op_lastop->op_type == OP_NULL)
7064 cLOOP->op_lastop = cLOOP->op_lastop->op_next;
7065 peep(cLOOP->op_lastop);
7072 while (cPMOP->op_pmreplstart &&
7073 cPMOP->op_pmreplstart->op_type == OP_NULL)
7074 cPMOP->op_pmreplstart = cPMOP->op_pmreplstart->op_next;
7075 peep(cPMOP->op_pmreplstart);
7080 if (o->op_next && o->op_next->op_type == OP_NEXTSTATE
7081 && ckWARN(WARN_SYNTAX))
7083 if (o->op_next->op_sibling &&
7084 o->op_next->op_sibling->op_type != OP_EXIT &&
7085 o->op_next->op_sibling->op_type != OP_WARN &&
7086 o->op_next->op_sibling->op_type != OP_DIE) {
7087 const line_t oldline = CopLINE(PL_curcop);
7089 CopLINE_set(PL_curcop, CopLINE((COP*)o->op_next));
7090 Perl_warner(aTHX_ packWARN(WARN_EXEC),
7091 "Statement unlikely to be reached");
7092 Perl_warner(aTHX_ packWARN(WARN_EXEC),
7093 "\t(Maybe you meant system() when you said exec()?)\n");
7094 CopLINE_set(PL_curcop, oldline);
7104 const char *key = NULL;
7109 if (((BINOP*)o)->op_last->op_type != OP_CONST)
7112 /* Make the CONST have a shared SV */
7113 svp = cSVOPx_svp(((BINOP*)o)->op_last);
7114 if ((!SvFAKE(sv = *svp) || !SvREADONLY(sv)) && !IS_PADCONST(sv)) {
7115 key = SvPV_const(sv, keylen);
7116 lexname = newSVpvn_share(key,
7117 SvUTF8(sv) ? -(I32)keylen : keylen,
7123 if ((o->op_private & (OPpLVAL_INTRO)))
7126 rop = (UNOP*)((BINOP*)o)->op_first;
7127 if (rop->op_type != OP_RV2HV || rop->op_first->op_type != OP_PADSV)
7129 lexname = *av_fetch(PL_comppad_name, rop->op_first->op_targ, TRUE);
7130 if (!SvPAD_TYPED(lexname))
7132 fields = (GV**)hv_fetchs(SvSTASH(lexname), "FIELDS", FALSE);
7133 if (!fields || !GvHV(*fields))
7135 key = SvPV_const(*svp, keylen);
7136 if (!hv_fetch(GvHV(*fields), key,
7137 SvUTF8(*svp) ? -(I32)keylen : keylen, FALSE))
7139 Perl_croak(aTHX_ "No such class field \"%s\" "
7140 "in variable %s of type %s",
7141 key, SvPV_nolen_const(lexname), HvNAME_get(SvSTASH(lexname)));
7154 SVOP *first_key_op, *key_op;
7156 if ((o->op_private & (OPpLVAL_INTRO))
7157 /* I bet there's always a pushmark... */
7158 || ((LISTOP*)o)->op_first->op_sibling->op_type != OP_LIST)
7159 /* hmmm, no optimization if list contains only one key. */
7161 rop = (UNOP*)((LISTOP*)o)->op_last;
7162 if (rop->op_type != OP_RV2HV)
7164 if (rop->op_first->op_type == OP_PADSV)
7165 /* @$hash{qw(keys here)} */
7166 rop = (UNOP*)rop->op_first;
7168 /* @{$hash}{qw(keys here)} */
7169 if (rop->op_first->op_type == OP_SCOPE
7170 && cLISTOPx(rop->op_first)->op_last->op_type == OP_PADSV)
7172 rop = (UNOP*)cLISTOPx(rop->op_first)->op_last;
7178 lexname = *av_fetch(PL_comppad_name, rop->op_targ, TRUE);
7179 if (!SvPAD_TYPED(lexname))
7181 fields = (GV**)hv_fetchs(SvSTASH(lexname), "FIELDS", FALSE);
7182 if (!fields || !GvHV(*fields))
7184 /* Again guessing that the pushmark can be jumped over.... */
7185 first_key_op = (SVOP*)((LISTOP*)((LISTOP*)o)->op_first->op_sibling)
7186 ->op_first->op_sibling;
7187 for (key_op = first_key_op; key_op;
7188 key_op = (SVOP*)key_op->op_sibling) {
7189 if (key_op->op_type != OP_CONST)
7191 svp = cSVOPx_svp(key_op);
7192 key = SvPV_const(*svp, keylen);
7193 if (!hv_fetch(GvHV(*fields), key,
7194 SvUTF8(*svp) ? -(I32)keylen : keylen, FALSE))
7196 Perl_croak(aTHX_ "No such class field \"%s\" "
7197 "in variable %s of type %s",
7198 key, SvPV_nolen(lexname), HvNAME_get(SvSTASH(lexname)));
7205 /* will point to RV2AV or PADAV op on LHS/RHS of assign */
7209 /* check that RHS of sort is a single plain array */
7210 OP *oright = cUNOPo->op_first;
7211 if (!oright || oright->op_type != OP_PUSHMARK)
7214 /* reverse sort ... can be optimised. */
7215 if (!cUNOPo->op_sibling) {
7216 /* Nothing follows us on the list. */
7217 OP * const reverse = o->op_next;
7219 if (reverse->op_type == OP_REVERSE &&
7220 (reverse->op_flags & OPf_WANT) == OPf_WANT_LIST) {
7221 OP * const pushmark = cUNOPx(reverse)->op_first;
7222 if (pushmark && (pushmark->op_type == OP_PUSHMARK)
7223 && (cUNOPx(pushmark)->op_sibling == o)) {
7224 /* reverse -> pushmark -> sort */
7225 o->op_private |= OPpSORT_REVERSE;
7227 pushmark->op_next = oright->op_next;
7233 /* make @a = sort @a act in-place */
7237 oright = cUNOPx(oright)->op_sibling;
7240 if (oright->op_type == OP_NULL) { /* skip sort block/sub */
7241 oright = cUNOPx(oright)->op_sibling;
7245 (oright->op_type != OP_RV2AV && oright->op_type != OP_PADAV)
7246 || oright->op_next != o
7247 || (oright->op_private & OPpLVAL_INTRO)
7251 /* o2 follows the chain of op_nexts through the LHS of the
7252 * assign (if any) to the aassign op itself */
7254 if (!o2 || o2->op_type != OP_NULL)
7257 if (!o2 || o2->op_type != OP_PUSHMARK)
7260 if (o2 && o2->op_type == OP_GV)
7263 || (o2->op_type != OP_PADAV && o2->op_type != OP_RV2AV)
7264 || (o2->op_private & OPpLVAL_INTRO)
7269 if (!o2 || o2->op_type != OP_NULL)
7272 if (!o2 || o2->op_type != OP_AASSIGN
7273 || (o2->op_flags & OPf_WANT) != OPf_WANT_VOID)
7276 /* check that the sort is the first arg on RHS of assign */
7278 o2 = cUNOPx(o2)->op_first;
7279 if (!o2 || o2->op_type != OP_NULL)
7281 o2 = cUNOPx(o2)->op_first;
7282 if (!o2 || o2->op_type != OP_PUSHMARK)
7284 if (o2->op_sibling != o)
7287 /* check the array is the same on both sides */
7288 if (oleft->op_type == OP_RV2AV) {
7289 if (oright->op_type != OP_RV2AV
7290 || !cUNOPx(oright)->op_first
7291 || cUNOPx(oright)->op_first->op_type != OP_GV
7292 || cGVOPx_gv(cUNOPx(oleft)->op_first) !=
7293 cGVOPx_gv(cUNOPx(oright)->op_first)
7297 else if (oright->op_type != OP_PADAV
7298 || oright->op_targ != oleft->op_targ
7302 /* transfer MODishness etc from LHS arg to RHS arg */
7303 oright->op_flags = oleft->op_flags;
7304 o->op_private |= OPpSORT_INPLACE;
7306 /* excise push->gv->rv2av->null->aassign */
7307 o2 = o->op_next->op_next;
7308 op_null(o2); /* PUSHMARK */
7310 if (o2->op_type == OP_GV) {
7311 op_null(o2); /* GV */
7314 op_null(o2); /* RV2AV or PADAV */
7315 o2 = o2->op_next->op_next;
7316 op_null(o2); /* AASSIGN */
7318 o->op_next = o2->op_next;
7324 OP *ourmark, *theirmark, *ourlast, *iter, *expushmark, *rv2av;
7326 LISTOP *enter, *exlist;
7329 enter = (LISTOP *) o->op_next;
7332 if (enter->op_type == OP_NULL) {
7333 enter = (LISTOP *) enter->op_next;
7337 /* for $a (...) will have OP_GV then OP_RV2GV here.
7338 for (...) just has an OP_GV. */
7339 if (enter->op_type == OP_GV) {
7340 gvop = (OP *) enter;
7341 enter = (LISTOP *) enter->op_next;
7344 if (enter->op_type == OP_RV2GV) {
7345 enter = (LISTOP *) enter->op_next;
7351 if (enter->op_type != OP_ENTERITER)
7354 iter = enter->op_next;
7355 if (!iter || iter->op_type != OP_ITER)
7358 expushmark = enter->op_first;
7359 if (!expushmark || expushmark->op_type != OP_NULL
7360 || expushmark->op_targ != OP_PUSHMARK)
7363 exlist = (LISTOP *) expushmark->op_sibling;
7364 if (!exlist || exlist->op_type != OP_NULL
7365 || exlist->op_targ != OP_LIST)
7368 if (exlist->op_last != o) {
7369 /* Mmm. Was expecting to point back to this op. */
7372 theirmark = exlist->op_first;
7373 if (!theirmark || theirmark->op_type != OP_PUSHMARK)
7376 if (theirmark->op_sibling != o) {
7377 /* There's something between the mark and the reverse, eg
7378 for (1, reverse (...))
7383 ourmark = ((LISTOP *)o)->op_first;
7384 if (!ourmark || ourmark->op_type != OP_PUSHMARK)
7387 ourlast = ((LISTOP *)o)->op_last;
7388 if (!ourlast || ourlast->op_next != o)
7391 rv2av = ourmark->op_sibling;
7392 if (rv2av && rv2av->op_type == OP_RV2AV && rv2av->op_sibling == 0
7393 && rv2av->op_flags == (OPf_WANT_LIST | OPf_KIDS)
7394 && enter->op_flags == (OPf_WANT_LIST | OPf_KIDS)) {
7395 /* We're just reversing a single array. */
7396 rv2av->op_flags = OPf_WANT_SCALAR | OPf_KIDS | OPf_REF;
7397 enter->op_flags |= OPf_STACKED;
7400 /* We don't have control over who points to theirmark, so sacrifice
7402 theirmark->op_next = ourmark->op_next;
7403 theirmark->op_flags = ourmark->op_flags;
7404 ourlast->op_next = gvop ? gvop : (OP *) enter;
7407 enter->op_private |= OPpITER_REVERSED;
7408 iter->op_private |= OPpITER_REVERSED;
7415 UNOP *refgen, *rv2cv;
7418 /* I do not understand this, but if o->op_opt isn't set to 1,
7419 various tests in ext/B/t/bytecode.t fail with no readily
7425 if ((o->op_flags && OPf_WANT) != OPf_WANT_VOID)
7428 if ((o->op_private & ~OPpASSIGN_BACKWARDS) != 2)
7431 rv2gv = ((BINOP *)o)->op_last;
7432 if (!rv2gv || rv2gv->op_type != OP_RV2GV)
7435 refgen = (UNOP *)((BINOP *)o)->op_first;
7437 if (!refgen || refgen->op_type != OP_REFGEN)
7440 exlist = (LISTOP *)refgen->op_first;
7441 if (!exlist || exlist->op_type != OP_NULL
7442 || exlist->op_targ != OP_LIST)
7445 if (exlist->op_first->op_type != OP_PUSHMARK)
7448 rv2cv = (UNOP*)exlist->op_last;
7450 if (rv2cv->op_type != OP_RV2CV)
7453 assert ((rv2gv->op_private & OPpDONT_INIT_GV) == 0);
7454 assert ((o->op_private & OPpASSIGN_CV_TO_GV) == 0);
7455 assert ((rv2cv->op_private & OPpMAY_RETURN_CONSTANT) == 0);
7457 o->op_private |= OPpASSIGN_CV_TO_GV;
7458 rv2gv->op_private |= OPpDONT_INIT_GV;
7459 rv2cv->op_private |= OPpMAY_RETURN_CONSTANT;
7475 Perl_custom_op_name(pTHX_ const OP* o)
7478 const IV index = PTR2IV(o->op_ppaddr);
7482 if (!PL_custom_op_names) /* This probably shouldn't happen */
7483 return (char *)PL_op_name[OP_CUSTOM];
7485 keysv = sv_2mortal(newSViv(index));
7487 he = hv_fetch_ent(PL_custom_op_names, keysv, 0, 0);
7489 return (char *)PL_op_name[OP_CUSTOM]; /* Don't know who you are */
7491 return SvPV_nolen(HeVAL(he));
7495 Perl_custom_op_desc(pTHX_ const OP* o)
7498 const IV index = PTR2IV(o->op_ppaddr);
7502 if (!PL_custom_op_descs)
7503 return (char *)PL_op_desc[OP_CUSTOM];
7505 keysv = sv_2mortal(newSViv(index));
7507 he = hv_fetch_ent(PL_custom_op_descs, keysv, 0, 0);
7509 return (char *)PL_op_desc[OP_CUSTOM];
7511 return SvPV_nolen(HeVAL(he));
7516 /* Efficient sub that returns a constant scalar value. */
7518 const_sv_xsub(pTHX_ CV* cv)
7525 Perl_croak(aTHX_ "usage: %s::%s()",
7526 HvNAME_get(GvSTASH(CvGV(cv))), GvNAME(CvGV(cv)));
7530 ST(0) = (SV*)XSANY.any_ptr;
7536 * c-indentation-style: bsd
7538 * indent-tabs-mode: t
7541 * ex: set ts=8 sts=4 sw=4 noet: