3 * Copyright (C) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
4 * 2000, 2001, 2002, 2003, 2004, 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 **ptr = (I32 **) op;
133 assert( ptr-1 > (I32 **) slab );
134 assert( ptr < ( (I32 **) slab + PERL_SLAB_SIZE) );
136 if (--(*slab) == 0) {
138 # define PerlMemShared PerlMem
141 PerlMemShared_free(slab);
142 if (slab == PL_OpSlab) {
149 * In the following definition, the ", Nullop" is just to make the compiler
150 * think the expression is of the right type: croak actually does a Siglongjmp.
152 #define CHECKOP(type,o) \
153 ((PL_op_mask && PL_op_mask[type]) \
154 ? ( op_free((OP*)o), \
155 Perl_croak(aTHX_ "'%s' trapped by operation mask", PL_op_desc[type]), \
157 : CALL_FPTR(PL_check[type])(aTHX_ (OP*)o))
159 #define RETURN_UNLIMITED_NUMBER (PERL_INT_MAX / 2)
162 S_gv_ename(pTHX_ GV *gv)
165 SV* tmpsv = sv_newmortal();
166 gv_efullname3(tmpsv, gv, Nullch);
167 return SvPV(tmpsv,n_a);
171 S_no_fh_allowed(pTHX_ OP *o)
173 yyerror(Perl_form(aTHX_ "Missing comma after first argument to %s function",
179 S_too_few_arguments(pTHX_ OP *o, char *name)
181 yyerror(Perl_form(aTHX_ "Not enough arguments for %s", name));
186 S_too_many_arguments(pTHX_ OP *o, char *name)
188 yyerror(Perl_form(aTHX_ "Too many arguments for %s", name));
193 S_bad_type(pTHX_ I32 n, char *t, char *name, OP *kid)
195 yyerror(Perl_form(aTHX_ "Type of arg %d to %s must be %s (not %s)",
196 (int)n, name, t, OP_DESC(kid)));
200 S_no_bareword_allowed(pTHX_ OP *o)
202 qerror(Perl_mess(aTHX_
203 "Bareword \"%"SVf"\" not allowed while \"strict subs\" in use",
207 /* "register" allocation */
210 Perl_allocmy(pTHX_ char *name)
214 /* complain about "my $<special_var>" etc etc */
215 if (!(PL_in_my == KEY_our ||
217 (USE_UTF8_IN_NAMES && UTF8_IS_START(name[1])) ||
218 (name[1] == '_' && (*name == '$' || (int)strlen(name) > 2))))
220 if (!isPRINT(name[1]) || strchr("\t\n\r\f", name[1])) {
221 /* 1999-02-27 mjd@plover.com */
223 p = strchr(name, '\0');
224 /* The next block assumes the buffer is at least 205 chars
225 long. At present, it's always at least 256 chars. */
227 strcpy(name+200, "...");
233 /* Move everything else down one character */
234 for (; p-name > 2; p--)
236 name[2] = toCTRL(name[1]);
239 yyerror(Perl_form(aTHX_ "Can't use global %s in \"my\"",name));
242 /* check for duplicate declaration */
244 (bool)(PL_in_my == KEY_our),
245 (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, PL_in_my == KEY_our ? "our" : "my"));
254 /* allocate a spare slot and store the name in that slot */
256 off = pad_add_name(name,
259 ? (PL_curstash ? PL_curstash : PL_defstash)
270 Perl_op_free(pTHX_ OP *o)
272 register OP *kid, *nextkid;
275 if (!o || o->op_static)
278 if (o->op_private & OPpREFCOUNTED) {
279 switch (o->op_type) {
287 if (OpREFCNT_dec(o)) {
298 if (o->op_flags & OPf_KIDS) {
299 for (kid = cUNOPo->op_first; kid; kid = nextkid) {
300 nextkid = kid->op_sibling; /* Get before next freeing kid */
306 type = (OPCODE)o->op_targ;
308 /* COP* is not cleared by op_clear() so that we may track line
309 * numbers etc even after null() */
310 if (type == OP_NEXTSTATE || type == OP_SETSTATE || type == OP_DBSTATE)
318 Perl_op_clear(pTHX_ OP *o)
321 switch (o->op_type) {
322 case OP_NULL: /* Was holding old type, if any. */
323 case OP_ENTEREVAL: /* Was holding hints. */
327 if (!(o->op_flags & OPf_REF)
328 || (PL_check[o->op_type] != MEMBER_TO_FPTR(Perl_ck_ftst)))
334 if (! (o->op_type == OP_AELEMFAST && o->op_flags & OPf_SPECIAL)) {
335 /* not an OP_PADAV replacement */
337 if (cPADOPo->op_padix > 0) {
338 /* No GvIN_PAD_off(cGVOPo_gv) here, because other references
339 * may still exist on the pad */
340 pad_swipe(cPADOPo->op_padix, TRUE);
341 cPADOPo->op_padix = 0;
344 SvREFCNT_dec(cSVOPo->op_sv);
345 cSVOPo->op_sv = Nullsv;
349 case OP_METHOD_NAMED:
351 SvREFCNT_dec(cSVOPo->op_sv);
352 cSVOPo->op_sv = Nullsv;
355 Even if op_clear does a pad_free for the target of the op,
356 pad_free doesn't actually remove the sv that exists in the pad;
357 instead it lives on. This results in that it could be reused as
358 a target later on when the pad was reallocated.
361 pad_swipe(o->op_targ,1);
370 if (o->op_flags & (OPf_SPECIAL|OPf_STACKED|OPf_KIDS))
374 if (o->op_private & (OPpTRANS_FROM_UTF|OPpTRANS_TO_UTF)) {
375 SvREFCNT_dec(cSVOPo->op_sv);
376 cSVOPo->op_sv = Nullsv;
379 Safefree(cPVOPo->op_pv);
380 cPVOPo->op_pv = Nullch;
384 op_free(cPMOPo->op_pmreplroot);
388 if (INT2PTR(PADOFFSET, cPMOPo->op_pmreplroot)) {
389 /* No GvIN_PAD_off here, because other references may still
390 * exist on the pad */
391 pad_swipe(INT2PTR(PADOFFSET, cPMOPo->op_pmreplroot), TRUE);
394 SvREFCNT_dec((SV*)cPMOPo->op_pmreplroot);
401 HV *pmstash = PmopSTASH(cPMOPo);
402 if (pmstash && SvREFCNT(pmstash)) {
403 PMOP *pmop = HvPMROOT(pmstash);
404 PMOP *lastpmop = NULL;
406 if (cPMOPo == pmop) {
408 lastpmop->op_pmnext = pmop->op_pmnext;
410 HvPMROOT(pmstash) = pmop->op_pmnext;
414 pmop = pmop->op_pmnext;
417 PmopSTASH_free(cPMOPo);
419 cPMOPo->op_pmreplroot = Nullop;
420 /* we use the "SAFE" version of the PM_ macros here
421 * since sv_clean_all might release some PMOPs
422 * after PL_regex_padav has been cleared
423 * and the clearing of PL_regex_padav needs to
424 * happen before sv_clean_all
426 ReREFCNT_dec(PM_GETRE_SAFE(cPMOPo));
427 PM_SETRE_SAFE(cPMOPo, (REGEXP*)NULL);
429 if(PL_regex_pad) { /* We could be in destruction */
430 av_push((AV*) PL_regex_pad[0],(SV*) PL_regex_pad[(cPMOPo)->op_pmoffset]);
431 SvREPADTMP_on(PL_regex_pad[(cPMOPo)->op_pmoffset]);
432 PM_SETRE(cPMOPo, (cPMOPo)->op_pmoffset);
439 if (o->op_targ > 0) {
440 pad_free(o->op_targ);
446 S_cop_free(pTHX_ COP* cop)
448 Safefree(cop->cop_label); /* FIXME: treaddead ??? */
451 if (! specialWARN(cop->cop_warnings))
452 SvREFCNT_dec(cop->cop_warnings);
453 if (! specialCopIO(cop->cop_io)) {
457 char *s = SvPV(cop->cop_io,len);
458 Perl_warn(aTHX_ "io='%.*s'",(int) len,s); /* ??? --jhi */
461 SvREFCNT_dec(cop->cop_io);
467 Perl_op_null(pTHX_ OP *o)
469 if (o->op_type == OP_NULL)
472 o->op_targ = o->op_type;
473 o->op_type = OP_NULL;
474 o->op_ppaddr = PL_ppaddr[OP_NULL];
477 /* Contextualizers */
479 #define LINKLIST(o) ((o)->op_next ? (o)->op_next : linklist((OP*)o))
482 Perl_linklist(pTHX_ OP *o)
489 /* establish postfix order */
490 if (cUNOPo->op_first) {
491 o->op_next = LINKLIST(cUNOPo->op_first);
492 for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling) {
494 kid->op_next = LINKLIST(kid->op_sibling);
506 Perl_scalarkids(pTHX_ OP *o)
509 if (o && o->op_flags & OPf_KIDS) {
510 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
517 S_scalarboolean(pTHX_ OP *o)
519 if (o->op_type == OP_SASSIGN && cBINOPo->op_first->op_type == OP_CONST) {
520 if (ckWARN(WARN_SYNTAX)) {
521 line_t oldline = CopLINE(PL_curcop);
523 if (PL_copline != NOLINE)
524 CopLINE_set(PL_curcop, PL_copline);
525 Perl_warner(aTHX_ packWARN(WARN_SYNTAX), "Found = in conditional, should be ==");
526 CopLINE_set(PL_curcop, oldline);
533 Perl_scalar(pTHX_ OP *o)
537 /* assumes no premature commitment */
538 if (!o || (o->op_flags & OPf_WANT) || PL_error_count
539 || o->op_type == OP_RETURN)
544 o->op_flags = (o->op_flags & ~OPf_WANT) | OPf_WANT_SCALAR;
546 switch (o->op_type) {
548 scalar(cBINOPo->op_first);
553 for (kid = cUNOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
557 if ((kid = cLISTOPo->op_first) && kid->op_type == OP_PUSHRE) {
558 if (!kPMOP->op_pmreplroot)
559 deprecate_old("implicit split to @_");
567 if (o->op_flags & OPf_KIDS) {
568 for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling)
574 kid = cLISTOPo->op_first;
576 while ((kid = kid->op_sibling)) {
582 WITH_THR(PL_curcop = &PL_compiling);
587 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling) {
593 WITH_THR(PL_curcop = &PL_compiling);
596 if (ckWARN(WARN_VOID))
597 Perl_warner(aTHX_ packWARN(WARN_VOID), "Useless use of sort in scalar context");
603 Perl_scalarvoid(pTHX_ OP *o)
610 if (o->op_type == OP_NEXTSTATE
611 || o->op_type == OP_SETSTATE
612 || o->op_type == OP_DBSTATE
613 || (o->op_type == OP_NULL && (o->op_targ == OP_NEXTSTATE
614 || o->op_targ == OP_SETSTATE
615 || o->op_targ == OP_DBSTATE)))
616 PL_curcop = (COP*)o; /* for warning below */
618 /* assumes no premature commitment */
619 want = o->op_flags & OPf_WANT;
620 if ((want && want != OPf_WANT_SCALAR) || PL_error_count
621 || o->op_type == OP_RETURN)
626 if ((o->op_private & OPpTARGET_MY)
627 && (PL_opargs[o->op_type] & OA_TARGLEX))/* OPp share the meaning */
629 return scalar(o); /* As if inside SASSIGN */
632 o->op_flags = (o->op_flags & ~OPf_WANT) | OPf_WANT_VOID;
634 switch (o->op_type) {
636 if (!(PL_opargs[o->op_type] & OA_FOLDCONST))
640 if (o->op_flags & OPf_STACKED)
644 if (o->op_private == 4)
716 if (!(o->op_private & (OPpLVAL_INTRO|OPpOUR_INTRO)))
717 useless = OP_DESC(o);
721 kid = cUNOPo->op_first;
722 if (kid->op_type != OP_MATCH && kid->op_type != OP_SUBST &&
723 kid->op_type != OP_TRANS) {
726 useless = "negative pattern binding (!~)";
733 if (!(o->op_private & (OPpLVAL_INTRO|OPpOUR_INTRO)) &&
734 (!o->op_sibling || o->op_sibling->op_type != OP_READLINE))
735 useless = "a variable";
740 if (cSVOPo->op_private & OPpCONST_STRICT)
741 no_bareword_allowed(o);
743 if (ckWARN(WARN_VOID)) {
744 useless = "a constant";
745 /* don't warn on optimised away booleans, eg
746 * use constant Foo, 5; Foo || print; */
747 if (cSVOPo->op_private & OPpCONST_SHORTCIRCUIT)
749 /* the constants 0 and 1 are permitted as they are
750 conventionally used as dummies in constructs like
751 1 while some_condition_with_side_effects; */
752 else if (SvNIOK(sv) && (SvNV(sv) == 0.0 || SvNV(sv) == 1.0))
754 else if (SvPOK(sv)) {
755 /* perl4's way of mixing documentation and code
756 (before the invention of POD) was based on a
757 trick to mix nroff and perl code. The trick was
758 built upon these three nroff macros being used in
759 void context. The pink camel has the details in
760 the script wrapman near page 319. */
761 if (strnEQ(SvPVX(sv), "di", 2) ||
762 strnEQ(SvPVX(sv), "ds", 2) ||
763 strnEQ(SvPVX(sv), "ig", 2))
768 op_null(o); /* don't execute or even remember it */
772 o->op_type = OP_PREINC; /* pre-increment is faster */
773 o->op_ppaddr = PL_ppaddr[OP_PREINC];
777 o->op_type = OP_PREDEC; /* pre-decrement is faster */
778 o->op_ppaddr = PL_ppaddr[OP_PREDEC];
785 for (kid = cUNOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
790 if (o->op_flags & OPf_STACKED)
797 if (!(o->op_flags & OPf_KIDS))
806 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
813 /* all requires must return a boolean value */
814 o->op_flags &= ~OPf_WANT;
819 if ((kid = cLISTOPo->op_first) && kid->op_type == OP_PUSHRE) {
820 if (!kPMOP->op_pmreplroot)
821 deprecate_old("implicit split to @_");
825 if (useless && ckWARN(WARN_VOID))
826 Perl_warner(aTHX_ packWARN(WARN_VOID), "Useless use of %s in void context", useless);
831 Perl_listkids(pTHX_ OP *o)
834 if (o && o->op_flags & OPf_KIDS) {
835 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
842 Perl_list(pTHX_ OP *o)
846 /* assumes no premature commitment */
847 if (!o || (o->op_flags & OPf_WANT) || PL_error_count
848 || o->op_type == OP_RETURN)
853 if ((o->op_private & OPpTARGET_MY)
854 && (PL_opargs[o->op_type] & OA_TARGLEX))/* OPp share the meaning */
856 return o; /* As if inside SASSIGN */
859 o->op_flags = (o->op_flags & ~OPf_WANT) | OPf_WANT_LIST;
861 switch (o->op_type) {
864 list(cBINOPo->op_first);
869 for (kid = cUNOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
877 if (!(o->op_flags & OPf_KIDS))
879 if (!o->op_next && cUNOPo->op_first->op_type == OP_FLOP) {
880 list(cBINOPo->op_first);
881 return gen_constant_list(o);
888 kid = cLISTOPo->op_first;
890 while ((kid = kid->op_sibling)) {
896 WITH_THR(PL_curcop = &PL_compiling);
900 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling) {
906 WITH_THR(PL_curcop = &PL_compiling);
909 /* all requires must return a boolean value */
910 o->op_flags &= ~OPf_WANT;
917 Perl_scalarseq(pTHX_ OP *o)
922 if (o->op_type == OP_LINESEQ ||
923 o->op_type == OP_SCOPE ||
924 o->op_type == OP_LEAVE ||
925 o->op_type == OP_LEAVETRY)
927 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling) {
928 if (kid->op_sibling) {
932 PL_curcop = &PL_compiling;
934 o->op_flags &= ~OPf_PARENS;
935 if (PL_hints & HINT_BLOCK_SCOPE)
936 o->op_flags |= OPf_PARENS;
939 o = newOP(OP_STUB, 0);
944 S_modkids(pTHX_ OP *o, I32 type)
947 if (o && o->op_flags & OPf_KIDS) {
948 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
954 /* Propagate lvalue ("modifiable") context to an op and it's children.
955 * 'type' represents the context type, roughly based on the type of op that
956 * would do the modifying, although local() is represented by OP_NULL.
957 * It's responsible for detecting things that can't be modified, flag
958 * things that need to behave specially in an lvalue context (e.g., "$$x = 5"
959 * might have to vivify a reference in $x), and so on.
961 * For example, "$a+1 = 2" would cause mod() to be called with o being
962 * OP_ADD and type being OP_SASSIGN, and would output an error.
966 Perl_mod(pTHX_ OP *o, I32 type)
969 /* -1 = error on localize, 0 = ignore localize, 1 = ok to localize */
972 if (!o || PL_error_count)
975 if ((o->op_private & OPpTARGET_MY)
976 && (PL_opargs[o->op_type] & OA_TARGLEX))/* OPp share the meaning */
981 switch (o->op_type) {
987 if (!(o->op_private & (OPpCONST_ARYBASE)))
989 if (PL_eval_start && PL_eval_start->op_type == OP_CONST) {
990 PL_compiling.cop_arybase = (I32)SvIV(cSVOPx(PL_eval_start)->op_sv);
994 SAVEI32(PL_compiling.cop_arybase);
995 PL_compiling.cop_arybase = 0;
997 else if (type == OP_REFGEN)
1000 Perl_croak(aTHX_ "That use of $[ is unsupported");
1003 if (o->op_flags & OPf_PARENS)
1007 if ((type == OP_UNDEF || type == OP_REFGEN) &&
1008 !(o->op_flags & OPf_STACKED)) {
1009 o->op_type = OP_RV2CV; /* entersub => rv2cv */
1010 o->op_ppaddr = PL_ppaddr[OP_RV2CV];
1011 assert(cUNOPo->op_first->op_type == OP_NULL);
1012 op_null(((LISTOP*)cUNOPo->op_first)->op_first);/* disable pushmark */
1015 else if (o->op_private & OPpENTERSUB_NOMOD)
1017 else { /* lvalue subroutine call */
1018 o->op_private |= OPpLVAL_INTRO;
1019 PL_modcount = RETURN_UNLIMITED_NUMBER;
1020 if (type == OP_GREPSTART || type == OP_ENTERSUB || type == OP_REFGEN) {
1021 /* Backward compatibility mode: */
1022 o->op_private |= OPpENTERSUB_INARGS;
1025 else { /* Compile-time error message: */
1026 OP *kid = cUNOPo->op_first;
1030 if (kid->op_type == OP_PUSHMARK)
1032 if (kid->op_type != OP_NULL || kid->op_targ != OP_LIST)
1034 "panic: unexpected lvalue entersub "
1035 "args: type/targ %ld:%"UVuf,
1036 (long)kid->op_type, (UV)kid->op_targ);
1037 kid = kLISTOP->op_first;
1039 while (kid->op_sibling)
1040 kid = kid->op_sibling;
1041 if (!(kid->op_type == OP_NULL && kid->op_targ == OP_RV2CV)) {
1043 if (kid->op_type == OP_METHOD_NAMED
1044 || kid->op_type == OP_METHOD)
1048 NewOp(1101, newop, 1, UNOP);
1049 newop->op_type = OP_RV2CV;
1050 newop->op_ppaddr = PL_ppaddr[OP_RV2CV];
1051 newop->op_first = Nullop;
1052 newop->op_next = (OP*)newop;
1053 kid->op_sibling = (OP*)newop;
1054 newop->op_private |= OPpLVAL_INTRO;
1058 if (kid->op_type != OP_RV2CV)
1060 "panic: unexpected lvalue entersub "
1061 "entry via type/targ %ld:%"UVuf,
1062 (long)kid->op_type, (UV)kid->op_targ);
1063 kid->op_private |= OPpLVAL_INTRO;
1064 break; /* Postpone until runtime */
1068 kid = kUNOP->op_first;
1069 if (kid->op_type == OP_NULL && kid->op_targ == OP_RV2SV)
1070 kid = kUNOP->op_first;
1071 if (kid->op_type == OP_NULL)
1073 "Unexpected constant lvalue entersub "
1074 "entry via type/targ %ld:%"UVuf,
1075 (long)kid->op_type, (UV)kid->op_targ);
1076 if (kid->op_type != OP_GV) {
1077 /* Restore RV2CV to check lvalueness */
1079 if (kid->op_next && kid->op_next != kid) { /* Happens? */
1080 okid->op_next = kid->op_next;
1081 kid->op_next = okid;
1084 okid->op_next = Nullop;
1085 okid->op_type = OP_RV2CV;
1087 okid->op_ppaddr = PL_ppaddr[OP_RV2CV];
1088 okid->op_private |= OPpLVAL_INTRO;
1092 cv = GvCV(kGVOP_gv);
1102 /* grep, foreach, subcalls, refgen */
1103 if (type == OP_GREPSTART || type == OP_ENTERSUB || type == OP_REFGEN)
1105 yyerror(Perl_form(aTHX_ "Can't modify %s in %s",
1106 (o->op_type == OP_NULL && (o->op_flags & OPf_SPECIAL)
1108 : (o->op_type == OP_ENTERSUB
1109 ? "non-lvalue subroutine call"
1111 type ? PL_op_desc[type] : "local"));
1125 case OP_RIGHT_SHIFT:
1134 if (!(o->op_flags & OPf_STACKED))
1141 for (kid = cUNOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
1147 if (type == OP_REFGEN && o->op_flags & OPf_PARENS) {
1148 PL_modcount = RETURN_UNLIMITED_NUMBER;
1149 return o; /* Treat \(@foo) like ordinary list. */
1153 if (scalar_mod_type(o, type))
1155 ref(cUNOPo->op_first, o->op_type);
1159 if (type == OP_LEAVESUBLV)
1160 o->op_private |= OPpMAYBE_LVSUB;
1166 PL_modcount = RETURN_UNLIMITED_NUMBER;
1169 ref(cUNOPo->op_first, o->op_type);
1174 PL_hints |= HINT_BLOCK_SCOPE;
1189 PL_modcount = RETURN_UNLIMITED_NUMBER;
1190 if (type == OP_REFGEN && o->op_flags & OPf_PARENS)
1191 return o; /* Treat \(@foo) like ordinary list. */
1192 if (scalar_mod_type(o, type))
1194 if (type == OP_LEAVESUBLV)
1195 o->op_private |= OPpMAYBE_LVSUB;
1199 if (!type) /* local() */
1200 Perl_croak(aTHX_ "Can't localize lexical variable %s",
1201 PAD_COMPNAME_PV(o->op_targ));
1209 if (type != OP_SASSIGN)
1213 if (o->op_private == 4) /* don't allow 4 arg substr as lvalue */
1218 if (type == OP_LEAVESUBLV)
1219 o->op_private |= OPpMAYBE_LVSUB;
1221 pad_free(o->op_targ);
1222 o->op_targ = pad_alloc(o->op_type, SVs_PADMY);
1223 assert(SvTYPE(PAD_SV(o->op_targ)) == SVt_NULL);
1224 if (o->op_flags & OPf_KIDS)
1225 mod(cBINOPo->op_first->op_sibling, type);
1230 ref(cBINOPo->op_first, o->op_type);
1231 if (type == OP_ENTERSUB &&
1232 !(o->op_private & (OPpLVAL_INTRO | OPpDEREF)))
1233 o->op_private |= OPpLVAL_DEFER;
1234 if (type == OP_LEAVESUBLV)
1235 o->op_private |= OPpMAYBE_LVSUB;
1245 if (o->op_flags & OPf_KIDS)
1246 mod(cLISTOPo->op_last, type);
1251 if (o->op_flags & OPf_SPECIAL) /* do BLOCK */
1253 else if (!(o->op_flags & OPf_KIDS))
1255 if (o->op_targ != OP_LIST) {
1256 mod(cBINOPo->op_first, type);
1262 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
1267 if (type != OP_LEAVESUBLV)
1269 break; /* mod()ing was handled by ck_return() */
1272 /* [20011101.069] File test operators interpret OPf_REF to mean that
1273 their argument is a filehandle; thus \stat(".") should not set
1275 if (type == OP_REFGEN &&
1276 PL_check[o->op_type] == MEMBER_TO_FPTR(Perl_ck_ftst))
1279 if (type != OP_LEAVESUBLV)
1280 o->op_flags |= OPf_MOD;
1282 if (type == OP_AASSIGN || type == OP_SASSIGN)
1283 o->op_flags |= OPf_SPECIAL|OPf_REF;
1284 else if (!type) { /* local() */
1287 o->op_private |= OPpLVAL_INTRO;
1288 o->op_flags &= ~OPf_SPECIAL;
1289 PL_hints |= HINT_BLOCK_SCOPE;
1294 if (ckWARN(WARN_SYNTAX)) {
1295 Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
1296 "Useless localization of %s", OP_DESC(o));
1300 else if (type != OP_GREPSTART && type != OP_ENTERSUB
1301 && type != OP_LEAVESUBLV)
1302 o->op_flags |= OPf_REF;
1307 S_scalar_mod_type(pTHX_ OP *o, I32 type)
1311 if (o->op_type == OP_RV2GV)
1335 case OP_RIGHT_SHIFT:
1354 S_is_handle_constructor(pTHX_ OP *o, I32 argnum)
1356 switch (o->op_type) {
1364 case OP_SELECT: /* XXX c.f. SelectSaver.pm */
1377 Perl_refkids(pTHX_ OP *o, I32 type)
1380 if (o && o->op_flags & OPf_KIDS) {
1381 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
1388 Perl_ref(pTHX_ OP *o, I32 type)
1392 if (!o || PL_error_count)
1395 switch (o->op_type) {
1397 if ((type == OP_EXISTS || type == OP_DEFINED || type == OP_LOCK) &&
1398 !(o->op_flags & OPf_STACKED)) {
1399 o->op_type = OP_RV2CV; /* entersub => rv2cv */
1400 o->op_ppaddr = PL_ppaddr[OP_RV2CV];
1401 assert(cUNOPo->op_first->op_type == OP_NULL);
1402 op_null(((LISTOP*)cUNOPo->op_first)->op_first); /* disable pushmark */
1403 o->op_flags |= OPf_SPECIAL;
1408 for (kid = cUNOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
1412 if (type == OP_DEFINED)
1413 o->op_flags |= OPf_SPECIAL; /* don't create GV */
1414 ref(cUNOPo->op_first, o->op_type);
1417 if (type == OP_RV2SV || type == OP_RV2AV || type == OP_RV2HV) {
1418 o->op_private |= (type == OP_RV2AV ? OPpDEREF_AV
1419 : type == OP_RV2HV ? OPpDEREF_HV
1421 o->op_flags |= OPf_MOD;
1426 o->op_flags |= OPf_MOD; /* XXX ??? */
1431 o->op_flags |= OPf_REF;
1434 if (type == OP_DEFINED)
1435 o->op_flags |= OPf_SPECIAL; /* don't create GV */
1436 ref(cUNOPo->op_first, o->op_type);
1441 o->op_flags |= OPf_REF;
1446 if (!(o->op_flags & OPf_KIDS))
1448 ref(cBINOPo->op_first, type);
1452 ref(cBINOPo->op_first, o->op_type);
1453 if (type == OP_RV2SV || type == OP_RV2AV || type == OP_RV2HV) {
1454 o->op_private |= (type == OP_RV2AV ? OPpDEREF_AV
1455 : type == OP_RV2HV ? OPpDEREF_HV
1457 o->op_flags |= OPf_MOD;
1465 if (!(o->op_flags & OPf_KIDS))
1467 ref(cLISTOPo->op_last, type);
1477 S_dup_attrlist(pTHX_ OP *o)
1481 /* An attrlist is either a simple OP_CONST or an OP_LIST with kids,
1482 * where the first kid is OP_PUSHMARK and the remaining ones
1483 * are OP_CONST. We need to push the OP_CONST values.
1485 if (o->op_type == OP_CONST)
1486 rop = newSVOP(OP_CONST, o->op_flags, SvREFCNT_inc(cSVOPo->op_sv));
1488 assert((o->op_type == OP_LIST) && (o->op_flags & OPf_KIDS));
1489 for (o = cLISTOPo->op_first; o; o=o->op_sibling) {
1490 if (o->op_type == OP_CONST)
1491 rop = append_elem(OP_LIST, rop,
1492 newSVOP(OP_CONST, o->op_flags,
1493 SvREFCNT_inc(cSVOPo->op_sv)));
1500 S_apply_attrs(pTHX_ HV *stash, SV *target, OP *attrs, bool for_my)
1504 /* fake up C<use attributes $pkg,$rv,@attrs> */
1505 ENTER; /* need to protect against side-effects of 'use' */
1508 stashsv = newSVpv(HvNAME(stash), 0);
1510 stashsv = &PL_sv_no;
1512 #define ATTRSMODULE "attributes"
1513 #define ATTRSMODULE_PM "attributes.pm"
1517 /* Don't force the C<use> if we don't need it. */
1518 svp = hv_fetch(GvHVn(PL_incgv), ATTRSMODULE_PM,
1519 sizeof(ATTRSMODULE_PM)-1, 0);
1520 if (svp && *svp != &PL_sv_undef)
1521 ; /* already in %INC */
1523 Perl_load_module(aTHX_ PERL_LOADMOD_NOIMPORT,
1524 newSVpvn(ATTRSMODULE, sizeof(ATTRSMODULE)-1),
1528 Perl_load_module(aTHX_ PERL_LOADMOD_IMPORT_OPS,
1529 newSVpvn(ATTRSMODULE, sizeof(ATTRSMODULE)-1),
1531 prepend_elem(OP_LIST,
1532 newSVOP(OP_CONST, 0, stashsv),
1533 prepend_elem(OP_LIST,
1534 newSVOP(OP_CONST, 0,
1536 dup_attrlist(attrs))));
1542 S_apply_attrs_my(pTHX_ HV *stash, OP *target, OP *attrs, OP **imopsp)
1544 OP *pack, *imop, *arg;
1550 assert(target->op_type == OP_PADSV ||
1551 target->op_type == OP_PADHV ||
1552 target->op_type == OP_PADAV);
1554 /* Ensure that attributes.pm is loaded. */
1555 apply_attrs(stash, PAD_SV(target->op_targ), attrs, TRUE);
1557 /* Need package name for method call. */
1558 pack = newSVOP(OP_CONST, 0, newSVpvn(ATTRSMODULE, sizeof(ATTRSMODULE)-1));
1560 /* Build up the real arg-list. */
1562 stashsv = newSVpv(HvNAME(stash), 0);
1564 stashsv = &PL_sv_no;
1565 arg = newOP(OP_PADSV, 0);
1566 arg->op_targ = target->op_targ;
1567 arg = prepend_elem(OP_LIST,
1568 newSVOP(OP_CONST, 0, stashsv),
1569 prepend_elem(OP_LIST,
1570 newUNOP(OP_REFGEN, 0,
1571 mod(arg, OP_REFGEN)),
1572 dup_attrlist(attrs)));
1574 /* Fake up a method call to import */
1575 meth = newSVpvn("import", 6);
1576 (void)SvUPGRADE(meth, SVt_PVIV);
1577 (void)SvIOK_on(meth);
1578 PERL_HASH(SvUVX(meth), SvPVX(meth), SvCUR(meth));
1579 imop = convert(OP_ENTERSUB, OPf_STACKED|OPf_SPECIAL|OPf_WANT_VOID,
1580 append_elem(OP_LIST,
1581 prepend_elem(OP_LIST, pack, list(arg)),
1582 newSVOP(OP_METHOD_NAMED, 0, meth)));
1583 imop->op_private |= OPpENTERSUB_NOMOD;
1585 /* Combine the ops. */
1586 *imopsp = append_elem(OP_LIST, *imopsp, imop);
1590 =notfor apidoc apply_attrs_string
1592 Attempts to apply a list of attributes specified by the C<attrstr> and
1593 C<len> arguments to the subroutine identified by the C<cv> argument which
1594 is expected to be associated with the package identified by the C<stashpv>
1595 argument (see L<attributes>). It gets this wrong, though, in that it
1596 does not correctly identify the boundaries of the individual attribute
1597 specifications within C<attrstr>. This is not really intended for the
1598 public API, but has to be listed here for systems such as AIX which
1599 need an explicit export list for symbols. (It's called from XS code
1600 in support of the C<ATTRS:> keyword from F<xsubpp>.) Patches to fix it
1601 to respect attribute syntax properly would be welcome.
1607 Perl_apply_attrs_string(pTHX_ char *stashpv, CV *cv,
1608 char *attrstr, STRLEN len)
1613 len = strlen(attrstr);
1617 for (; isSPACE(*attrstr) && len; --len, ++attrstr) ;
1619 char *sstr = attrstr;
1620 for (; !isSPACE(*attrstr) && len; --len, ++attrstr) ;
1621 attrs = append_elem(OP_LIST, attrs,
1622 newSVOP(OP_CONST, 0,
1623 newSVpvn(sstr, attrstr-sstr)));
1627 Perl_load_module(aTHX_ PERL_LOADMOD_IMPORT_OPS,
1628 newSVpvn(ATTRSMODULE, sizeof(ATTRSMODULE)-1),
1629 Nullsv, prepend_elem(OP_LIST,
1630 newSVOP(OP_CONST, 0, newSVpv(stashpv,0)),
1631 prepend_elem(OP_LIST,
1632 newSVOP(OP_CONST, 0,
1638 S_my_kid(pTHX_ OP *o, OP *attrs, OP **imopsp)
1643 if (!o || PL_error_count)
1647 if (type == OP_LIST) {
1648 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
1649 my_kid(kid, attrs, imopsp);
1650 } else if (type == OP_UNDEF) {
1652 } else if (type == OP_RV2SV || /* "our" declaration */
1654 type == OP_RV2HV) { /* XXX does this let anything illegal in? */
1655 if (cUNOPo->op_first->op_type != OP_GV) { /* MJD 20011224 */
1656 yyerror(Perl_form(aTHX_ "Can't declare %s in %s",
1657 OP_DESC(o), PL_in_my == KEY_our ? "our" : "my"));
1659 GV *gv = cGVOPx_gv(cUNOPo->op_first);
1661 PL_in_my_stash = Nullhv;
1662 apply_attrs(GvSTASH(gv),
1663 (type == OP_RV2SV ? GvSV(gv) :
1664 type == OP_RV2AV ? (SV*)GvAV(gv) :
1665 type == OP_RV2HV ? (SV*)GvHV(gv) : (SV*)gv),
1668 o->op_private |= OPpOUR_INTRO;
1671 else if (type != OP_PADSV &&
1674 type != OP_PUSHMARK)
1676 yyerror(Perl_form(aTHX_ "Can't declare %s in \"%s\"",
1678 PL_in_my == KEY_our ? "our" : "my"));
1681 else if (attrs && type != OP_PUSHMARK) {
1685 PL_in_my_stash = Nullhv;
1687 /* check for C<my Dog $spot> when deciding package */
1688 stash = PAD_COMPNAME_TYPE(o->op_targ);
1690 stash = PL_curstash;
1691 apply_attrs_my(stash, o, attrs, imopsp);
1693 o->op_flags |= OPf_MOD;
1694 o->op_private |= OPpLVAL_INTRO;
1699 Perl_my_attrs(pTHX_ OP *o, OP *attrs)
1702 int maybe_scalar = 0;
1704 /* [perl #17376]: this appears to be premature, and results in code such as
1705 C< our(%x); > executing in list mode rather than void mode */
1707 if (o->op_flags & OPf_PARENS)
1716 o = my_kid(o, attrs, &rops);
1718 if (maybe_scalar && o->op_type == OP_PADSV) {
1719 o = scalar(append_list(OP_LIST, (LISTOP*)rops, (LISTOP*)o));
1720 o->op_private |= OPpLVAL_INTRO;
1723 o = append_list(OP_LIST, (LISTOP*)o, (LISTOP*)rops);
1726 PL_in_my_stash = Nullhv;
1731 Perl_my(pTHX_ OP *o)
1733 return my_attrs(o, Nullop);
1737 Perl_sawparens(pTHX_ OP *o)
1740 o->op_flags |= OPf_PARENS;
1745 Perl_bind_match(pTHX_ I32 type, OP *left, OP *right)
1750 if (ckWARN(WARN_MISC) &&
1751 (left->op_type == OP_RV2AV ||
1752 left->op_type == OP_RV2HV ||
1753 left->op_type == OP_PADAV ||
1754 left->op_type == OP_PADHV)) {
1755 char *desc = PL_op_desc[(right->op_type == OP_SUBST ||
1756 right->op_type == OP_TRANS)
1757 ? right->op_type : OP_MATCH];
1758 const char *sample = ((left->op_type == OP_RV2AV ||
1759 left->op_type == OP_PADAV)
1760 ? "@array" : "%hash");
1761 Perl_warner(aTHX_ packWARN(WARN_MISC),
1762 "Applying %s to %s will act on scalar(%s)",
1763 desc, sample, sample);
1766 if (right->op_type == OP_CONST &&
1767 cSVOPx(right)->op_private & OPpCONST_BARE &&
1768 cSVOPx(right)->op_private & OPpCONST_STRICT)
1770 no_bareword_allowed(right);
1773 ismatchop = right->op_type == OP_MATCH ||
1774 right->op_type == OP_SUBST ||
1775 right->op_type == OP_TRANS;
1776 if (ismatchop && right->op_private & OPpTARGET_MY) {
1778 right->op_private &= ~OPpTARGET_MY;
1780 if (!(right->op_flags & OPf_STACKED) && ismatchop) {
1781 right->op_flags |= OPf_STACKED;
1782 if (right->op_type != OP_MATCH &&
1783 ! (right->op_type == OP_TRANS &&
1784 right->op_private & OPpTRANS_IDENTICAL))
1785 left = mod(left, right->op_type);
1786 if (right->op_type == OP_TRANS)
1787 o = newBINOP(OP_NULL, OPf_STACKED, scalar(left), right);
1789 o = prepend_elem(right->op_type, scalar(left), right);
1791 return newUNOP(OP_NOT, 0, scalar(o));
1795 return bind_match(type, left,
1796 pmruntime(newPMOP(OP_MATCH, 0), right, 0));
1800 Perl_invert(pTHX_ OP *o)
1804 /* XXX need to optimize away NOT NOT here? Or do we let optimizer do it? */
1805 return newUNOP(OP_NOT, OPf_SPECIAL, scalar(o));
1809 Perl_scope(pTHX_ OP *o)
1812 if (o->op_flags & OPf_PARENS || PERLDB_NOOPT || PL_tainting) {
1813 o = prepend_elem(OP_LINESEQ, newOP(OP_ENTER, 0), o);
1814 o->op_type = OP_LEAVE;
1815 o->op_ppaddr = PL_ppaddr[OP_LEAVE];
1817 else if (o->op_type == OP_LINESEQ) {
1819 o->op_type = OP_SCOPE;
1820 o->op_ppaddr = PL_ppaddr[OP_SCOPE];
1821 kid = ((LISTOP*)o)->op_first;
1822 if (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE)
1826 o = newLISTOP(OP_SCOPE, 0, o, Nullop);
1831 /* XXX kept for BINCOMPAT only */
1833 Perl_save_hints(pTHX)
1835 Perl_croak(aTHX_ "internal error: obsolete function save_hints() called");
1839 Perl_block_start(pTHX_ int full)
1841 int retval = PL_savestack_ix;
1842 pad_block_start(full);
1844 PL_hints &= ~HINT_BLOCK_SCOPE;
1845 SAVESPTR(PL_compiling.cop_warnings);
1846 if (! specialWARN(PL_compiling.cop_warnings)) {
1847 PL_compiling.cop_warnings = newSVsv(PL_compiling.cop_warnings) ;
1848 SAVEFREESV(PL_compiling.cop_warnings) ;
1850 SAVESPTR(PL_compiling.cop_io);
1851 if (! specialCopIO(PL_compiling.cop_io)) {
1852 PL_compiling.cop_io = newSVsv(PL_compiling.cop_io) ;
1853 SAVEFREESV(PL_compiling.cop_io) ;
1859 Perl_block_end(pTHX_ I32 floor, OP *seq)
1861 int needblockscope = PL_hints & HINT_BLOCK_SCOPE;
1862 OP* retval = scalarseq(seq);
1864 PL_compiling.op_private = (U8)(PL_hints & HINT_PRIVATE_MASK);
1866 PL_hints |= HINT_BLOCK_SCOPE; /* propagate out */
1874 I32 offset = pad_findmy("$_");
1875 if (offset == NOT_IN_PAD || PAD_COMPNAME_FLAGS(offset) & SVpad_OUR) {
1876 return newSVREF(newGVOP(OP_GV, 0, PL_defgv));
1879 OP *o = newOP(OP_PADSV, 0);
1880 o->op_targ = offset;
1886 Perl_newPROG(pTHX_ OP *o)
1891 PL_eval_root = newUNOP(OP_LEAVEEVAL,
1892 ((PL_in_eval & EVAL_KEEPERR)
1893 ? OPf_SPECIAL : 0), o);
1894 PL_eval_start = linklist(PL_eval_root);
1895 PL_eval_root->op_private |= OPpREFCOUNTED;
1896 OpREFCNT_set(PL_eval_root, 1);
1897 PL_eval_root->op_next = 0;
1898 CALL_PEEP(PL_eval_start);
1901 if (o->op_type == OP_STUB) {
1902 PL_comppad_name = 0;
1907 PL_main_root = scope(sawparens(scalarvoid(o)));
1908 PL_curcop = &PL_compiling;
1909 PL_main_start = LINKLIST(PL_main_root);
1910 PL_main_root->op_private |= OPpREFCOUNTED;
1911 OpREFCNT_set(PL_main_root, 1);
1912 PL_main_root->op_next = 0;
1913 CALL_PEEP(PL_main_start);
1916 /* Register with debugger */
1918 CV *cv = get_cv("DB::postponed", FALSE);
1922 XPUSHs((SV*)CopFILEGV(&PL_compiling));
1924 call_sv((SV*)cv, G_DISCARD);
1931 Perl_localize(pTHX_ OP *o, I32 lex)
1933 if (o->op_flags & OPf_PARENS)
1934 /* [perl #17376]: this appears to be premature, and results in code such as
1935 C< our(%x); > executing in list mode rather than void mode */
1942 if (ckWARN(WARN_PARENTHESIS)
1943 && PL_bufptr > PL_oldbufptr && PL_bufptr[-1] == ',')
1945 char *s = PL_bufptr;
1948 /* some heuristics to detect a potential error */
1949 while (*s && (strchr(", \t\n", *s)))
1953 if (*s && strchr("@$%*", *s) && *++s
1954 && (isALNUM(*s) || UTF8_IS_CONTINUED(*s))) {
1957 while (*s && (isALNUM(*s) || UTF8_IS_CONTINUED(*s)))
1959 while (*s && (strchr(", \t\n", *s)))
1965 if (sigil && (*s == ';' || *s == '=')) {
1966 Perl_warner(aTHX_ packWARN(WARN_PARENTHESIS),
1967 "Parentheses missing around \"%s\" list",
1968 lex ? (PL_in_my == KEY_our ? "our" : "my")
1976 o = mod(o, OP_NULL); /* a bit kludgey */
1978 PL_in_my_stash = Nullhv;
1983 Perl_jmaybe(pTHX_ OP *o)
1985 if (o->op_type == OP_LIST) {
1987 o2 = newSVREF(newGVOP(OP_GV, 0, gv_fetchpv(";", TRUE, SVt_PV))),
1988 o = convert(OP_JOIN, 0, prepend_elem(OP_LIST, o2, o));
1994 Perl_fold_constants(pTHX_ register OP *o)
1997 I32 type = o->op_type;
2000 if (PL_opargs[type] & OA_RETSCALAR)
2002 if (PL_opargs[type] & OA_TARGET && !o->op_targ)
2003 o->op_targ = pad_alloc(type, SVs_PADTMP);
2005 /* integerize op, unless it happens to be C<-foo>.
2006 * XXX should pp_i_negate() do magic string negation instead? */
2007 if ((PL_opargs[type] & OA_OTHERINT) && (PL_hints & HINT_INTEGER)
2008 && !(type == OP_NEGATE && cUNOPo->op_first->op_type == OP_CONST
2009 && (cUNOPo->op_first->op_private & OPpCONST_BARE)))
2011 o->op_ppaddr = PL_ppaddr[type = ++(o->op_type)];
2014 if (!(PL_opargs[type] & OA_FOLDCONST))
2019 /* XXX might want a ck_negate() for this */
2020 cUNOPo->op_first->op_private &= ~OPpCONST_STRICT;
2032 /* XXX what about the numeric ops? */
2033 if (PL_hints & HINT_LOCALE)
2038 goto nope; /* Don't try to run w/ errors */
2040 for (curop = LINKLIST(o); curop != o; curop = LINKLIST(curop)) {
2041 if ((curop->op_type != OP_CONST ||
2042 (curop->op_private & OPpCONST_BARE)) &&
2043 curop->op_type != OP_LIST &&
2044 curop->op_type != OP_SCALAR &&
2045 curop->op_type != OP_NULL &&
2046 curop->op_type != OP_PUSHMARK)
2052 curop = LINKLIST(o);
2056 sv = *(PL_stack_sp--);
2057 if (o->op_targ && sv == PAD_SV(o->op_targ)) /* grab pad temp? */
2058 pad_swipe(o->op_targ, FALSE);
2059 else if (SvTEMP(sv)) { /* grab mortal temp? */
2060 (void)SvREFCNT_inc(sv);
2064 if (type == OP_RV2GV)
2065 return newGVOP(OP_GV, 0, (GV*)sv);
2066 return newSVOP(OP_CONST, 0, sv);
2073 Perl_gen_constant_list(pTHX_ register OP *o)
2076 I32 oldtmps_floor = PL_tmps_floor;
2080 return o; /* Don't attempt to run with errors */
2082 PL_op = curop = LINKLIST(o);
2089 PL_tmps_floor = oldtmps_floor;
2091 o->op_type = OP_RV2AV;
2092 o->op_ppaddr = PL_ppaddr[OP_RV2AV];
2093 o->op_flags &= ~OPf_REF; /* treat \(1..2) like an ordinary list */
2094 o->op_flags |= OPf_PARENS; /* and flatten \(1..2,3) */
2095 o->op_opt = 0; /* needs to be revisited in peep() */
2096 curop = ((UNOP*)o)->op_first;
2097 ((UNOP*)o)->op_first = newSVOP(OP_CONST, 0, SvREFCNT_inc(*PL_stack_sp--));
2104 Perl_convert(pTHX_ I32 type, I32 flags, OP *o)
2106 if (!o || o->op_type != OP_LIST)
2107 o = newLISTOP(OP_LIST, 0, o, Nullop);
2109 o->op_flags &= ~OPf_WANT;
2111 if (!(PL_opargs[type] & OA_MARK))
2112 op_null(cLISTOPo->op_first);
2114 o->op_type = (OPCODE)type;
2115 o->op_ppaddr = PL_ppaddr[type];
2116 o->op_flags |= flags;
2118 o = CHECKOP(type, o);
2119 if (o->op_type != type)
2122 return fold_constants(o);
2125 /* List constructors */
2128 Perl_append_elem(pTHX_ I32 type, OP *first, OP *last)
2136 if (first->op_type != type
2137 || (type == OP_LIST && (first->op_flags & OPf_PARENS)))
2139 return newLISTOP(type, 0, first, last);
2142 if (first->op_flags & OPf_KIDS)
2143 ((LISTOP*)first)->op_last->op_sibling = last;
2145 first->op_flags |= OPf_KIDS;
2146 ((LISTOP*)first)->op_first = last;
2148 ((LISTOP*)first)->op_last = last;
2153 Perl_append_list(pTHX_ I32 type, LISTOP *first, LISTOP *last)
2161 if (first->op_type != type)
2162 return prepend_elem(type, (OP*)first, (OP*)last);
2164 if (last->op_type != type)
2165 return append_elem(type, (OP*)first, (OP*)last);
2167 first->op_last->op_sibling = last->op_first;
2168 first->op_last = last->op_last;
2169 first->op_flags |= (last->op_flags & OPf_KIDS);
2177 Perl_prepend_elem(pTHX_ I32 type, OP *first, OP *last)
2185 if (last->op_type == type) {
2186 if (type == OP_LIST) { /* already a PUSHMARK there */
2187 first->op_sibling = ((LISTOP*)last)->op_first->op_sibling;
2188 ((LISTOP*)last)->op_first->op_sibling = first;
2189 if (!(first->op_flags & OPf_PARENS))
2190 last->op_flags &= ~OPf_PARENS;
2193 if (!(last->op_flags & OPf_KIDS)) {
2194 ((LISTOP*)last)->op_last = first;
2195 last->op_flags |= OPf_KIDS;
2197 first->op_sibling = ((LISTOP*)last)->op_first;
2198 ((LISTOP*)last)->op_first = first;
2200 last->op_flags |= OPf_KIDS;
2204 return newLISTOP(type, 0, first, last);
2210 Perl_newNULLLIST(pTHX)
2212 return newOP(OP_STUB, 0);
2216 Perl_force_list(pTHX_ OP *o)
2218 if (!o || o->op_type != OP_LIST)
2219 o = newLISTOP(OP_LIST, 0, o, Nullop);
2225 Perl_newLISTOP(pTHX_ I32 type, I32 flags, OP *first, OP *last)
2229 NewOp(1101, listop, 1, LISTOP);
2231 listop->op_type = (OPCODE)type;
2232 listop->op_ppaddr = PL_ppaddr[type];
2235 listop->op_flags = (U8)flags;
2239 else if (!first && last)
2242 first->op_sibling = last;
2243 listop->op_first = first;
2244 listop->op_last = last;
2245 if (type == OP_LIST) {
2247 pushop = newOP(OP_PUSHMARK, 0);
2248 pushop->op_sibling = first;
2249 listop->op_first = pushop;
2250 listop->op_flags |= OPf_KIDS;
2252 listop->op_last = pushop;
2255 return CHECKOP(type, listop);
2259 Perl_newOP(pTHX_ I32 type, I32 flags)
2262 NewOp(1101, o, 1, OP);
2263 o->op_type = (OPCODE)type;
2264 o->op_ppaddr = PL_ppaddr[type];
2265 o->op_flags = (U8)flags;
2268 o->op_private = (U8)(0 | (flags >> 8));
2269 if (PL_opargs[type] & OA_RETSCALAR)
2271 if (PL_opargs[type] & OA_TARGET)
2272 o->op_targ = pad_alloc(type, SVs_PADTMP);
2273 return CHECKOP(type, o);
2277 Perl_newUNOP(pTHX_ I32 type, I32 flags, OP *first)
2282 first = newOP(OP_STUB, 0);
2283 if (PL_opargs[type] & OA_MARK)
2284 first = force_list(first);
2286 NewOp(1101, unop, 1, UNOP);
2287 unop->op_type = (OPCODE)type;
2288 unop->op_ppaddr = PL_ppaddr[type];
2289 unop->op_first = first;
2290 unop->op_flags = flags | OPf_KIDS;
2291 unop->op_private = (U8)(1 | (flags >> 8));
2292 unop = (UNOP*) CHECKOP(type, unop);
2296 return fold_constants((OP *) unop);
2300 Perl_newBINOP(pTHX_ I32 type, I32 flags, OP *first, OP *last)
2303 NewOp(1101, binop, 1, BINOP);
2306 first = newOP(OP_NULL, 0);
2308 binop->op_type = (OPCODE)type;
2309 binop->op_ppaddr = PL_ppaddr[type];
2310 binop->op_first = first;
2311 binop->op_flags = flags | OPf_KIDS;
2314 binop->op_private = (U8)(1 | (flags >> 8));
2317 binop->op_private = (U8)(2 | (flags >> 8));
2318 first->op_sibling = last;
2321 binop = (BINOP*)CHECKOP(type, binop);
2322 if (binop->op_next || binop->op_type != (OPCODE)type)
2325 binop->op_last = binop->op_first->op_sibling;
2327 return fold_constants((OP *)binop);
2331 uvcompare(const void *a, const void *b)
2333 if (*((UV *)a) < (*(UV *)b))
2335 if (*((UV *)a) > (*(UV *)b))
2337 if (*((UV *)a+1) < (*(UV *)b+1))
2339 if (*((UV *)a+1) > (*(UV *)b+1))
2345 Perl_pmtrans(pTHX_ OP *o, OP *expr, OP *repl)
2347 SV *tstr = ((SVOP*)expr)->op_sv;
2348 SV *rstr = ((SVOP*)repl)->op_sv;
2351 U8 *t = (U8*)SvPV(tstr, tlen);
2352 U8 *r = (U8*)SvPV(rstr, rlen);
2359 register short *tbl;
2361 PL_hints |= HINT_BLOCK_SCOPE;
2362 complement = o->op_private & OPpTRANS_COMPLEMENT;
2363 del = o->op_private & OPpTRANS_DELETE;
2364 squash = o->op_private & OPpTRANS_SQUASH;
2367 o->op_private |= OPpTRANS_FROM_UTF;
2370 o->op_private |= OPpTRANS_TO_UTF;
2372 if (o->op_private & (OPpTRANS_FROM_UTF|OPpTRANS_TO_UTF)) {
2373 SV* listsv = newSVpvn("# comment\n",10);
2375 U8* tend = t + tlen;
2376 U8* rend = r + rlen;
2390 I32 from_utf = o->op_private & OPpTRANS_FROM_UTF;
2391 I32 to_utf = o->op_private & OPpTRANS_TO_UTF;
2397 tsave = t = bytes_to_utf8(t, &len);
2400 if (!to_utf && rlen) {
2402 rsave = r = bytes_to_utf8(r, &len);
2406 /* There are several snags with this code on EBCDIC:
2407 1. 0xFF is a legal UTF-EBCDIC byte (there are no illegal bytes).
2408 2. scan_const() in toke.c has encoded chars in native encoding which makes
2409 ranges at least in EBCDIC 0..255 range the bottom odd.
2413 U8 tmpbuf[UTF8_MAXLEN+1];
2416 New(1109, cp, 2*tlen, UV);
2418 transv = newSVpvn("",0);
2420 cp[2*i] = utf8n_to_uvuni(t, tend-t, &ulen, 0);
2422 if (t < tend && NATIVE_TO_UTF(*t) == 0xff) {
2424 cp[2*i+1] = utf8n_to_uvuni(t, tend-t, &ulen, 0);
2428 cp[2*i+1] = cp[2*i];
2432 qsort(cp, i, 2*sizeof(UV), uvcompare);
2433 for (j = 0; j < i; j++) {
2435 diff = val - nextmin;
2437 t = uvuni_to_utf8(tmpbuf,nextmin);
2438 sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf);
2440 U8 range_mark = UTF_TO_NATIVE(0xff);
2441 t = uvuni_to_utf8(tmpbuf, val - 1);
2442 sv_catpvn(transv, (char *)&range_mark, 1);
2443 sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf);
2450 t = uvuni_to_utf8(tmpbuf,nextmin);
2451 sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf);
2453 U8 range_mark = UTF_TO_NATIVE(0xff);
2454 sv_catpvn(transv, (char *)&range_mark, 1);
2456 t = uvuni_to_utf8_flags(tmpbuf, 0x7fffffff,
2457 UNICODE_ALLOW_SUPER);
2458 sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf);
2459 t = (U8*)SvPVX(transv);
2460 tlen = SvCUR(transv);
2464 else if (!rlen && !del) {
2465 r = t; rlen = tlen; rend = tend;
2468 if ((!rlen && !del) || t == r ||
2469 (tlen == rlen && memEQ((char *)t, (char *)r, tlen)))
2471 o->op_private |= OPpTRANS_IDENTICAL;
2475 while (t < tend || tfirst <= tlast) {
2476 /* see if we need more "t" chars */
2477 if (tfirst > tlast) {
2478 tfirst = (I32)utf8n_to_uvuni(t, tend - t, &ulen, 0);
2480 if (t < tend && NATIVE_TO_UTF(*t) == 0xff) { /* illegal utf8 val indicates range */
2482 tlast = (I32)utf8n_to_uvuni(t, tend - t, &ulen, 0);
2489 /* now see if we need more "r" chars */
2490 if (rfirst > rlast) {
2492 rfirst = (I32)utf8n_to_uvuni(r, rend - r, &ulen, 0);
2494 if (r < rend && NATIVE_TO_UTF(*r) == 0xff) { /* illegal utf8 val indicates range */
2496 rlast = (I32)utf8n_to_uvuni(r, rend - r, &ulen, 0);
2505 rfirst = rlast = 0xffffffff;
2509 /* now see which range will peter our first, if either. */
2510 tdiff = tlast - tfirst;
2511 rdiff = rlast - rfirst;
2518 if (rfirst == 0xffffffff) {
2519 diff = tdiff; /* oops, pretend rdiff is infinite */
2521 Perl_sv_catpvf(aTHX_ listsv, "%04lx\t%04lx\tXXXX\n",
2522 (long)tfirst, (long)tlast);
2524 Perl_sv_catpvf(aTHX_ listsv, "%04lx\t\tXXXX\n", (long)tfirst);
2528 Perl_sv_catpvf(aTHX_ listsv, "%04lx\t%04lx\t%04lx\n",
2529 (long)tfirst, (long)(tfirst + diff),
2532 Perl_sv_catpvf(aTHX_ listsv, "%04lx\t\t%04lx\n",
2533 (long)tfirst, (long)rfirst);
2535 if (rfirst + diff > max)
2536 max = rfirst + diff;
2538 grows = (tfirst < rfirst &&
2539 UNISKIP(tfirst) < UNISKIP(rfirst + diff));
2551 else if (max > 0xff)
2556 Safefree(cPVOPo->op_pv);
2557 cSVOPo->op_sv = (SV*)swash_init("utf8", "", listsv, bits, none);
2558 SvREFCNT_dec(listsv);
2560 SvREFCNT_dec(transv);
2562 if (!del && havefinal && rlen)
2563 (void)hv_store((HV*)SvRV((cSVOPo->op_sv)), "FINAL", 5,
2564 newSVuv((UV)final), 0);
2567 o->op_private |= OPpTRANS_GROWS;
2579 tbl = (short*)cPVOPo->op_pv;
2581 Zero(tbl, 256, short);
2582 for (i = 0; i < (I32)tlen; i++)
2584 for (i = 0, j = 0; i < 256; i++) {
2586 if (j >= (I32)rlen) {
2595 if (i < 128 && r[j] >= 128)
2605 o->op_private |= OPpTRANS_IDENTICAL;
2607 else if (j >= (I32)rlen)
2610 cPVOPo->op_pv = (char*)Renew(tbl, 0x101+rlen-j, short);
2611 tbl[0x100] = rlen - j;
2612 for (i=0; i < (I32)rlen - j; i++)
2613 tbl[0x101+i] = r[j+i];
2617 if (!rlen && !del) {
2620 o->op_private |= OPpTRANS_IDENTICAL;
2622 else if (!squash && rlen == tlen && memEQ((char*)t, (char*)r, tlen)) {
2623 o->op_private |= OPpTRANS_IDENTICAL;
2625 for (i = 0; i < 256; i++)
2627 for (i = 0, j = 0; i < (I32)tlen; i++,j++) {
2628 if (j >= (I32)rlen) {
2630 if (tbl[t[i]] == -1)
2636 if (tbl[t[i]] == -1) {
2637 if (t[i] < 128 && r[j] >= 128)
2644 o->op_private |= OPpTRANS_GROWS;
2652 Perl_newPMOP(pTHX_ I32 type, I32 flags)
2656 NewOp(1101, pmop, 1, PMOP);
2657 pmop->op_type = (OPCODE)type;
2658 pmop->op_ppaddr = PL_ppaddr[type];
2659 pmop->op_flags = (U8)flags;
2660 pmop->op_private = (U8)(0 | (flags >> 8));
2662 if (PL_hints & HINT_RE_TAINT)
2663 pmop->op_pmpermflags |= PMf_RETAINT;
2664 if (PL_hints & HINT_LOCALE)
2665 pmop->op_pmpermflags |= PMf_LOCALE;
2666 pmop->op_pmflags = pmop->op_pmpermflags;
2671 if(av_len((AV*) PL_regex_pad[0]) > -1) {
2672 repointer = av_pop((AV*)PL_regex_pad[0]);
2673 pmop->op_pmoffset = SvIV(repointer);
2674 SvREPADTMP_off(repointer);
2675 sv_setiv(repointer,0);
2677 repointer = newSViv(0);
2678 av_push(PL_regex_padav,SvREFCNT_inc(repointer));
2679 pmop->op_pmoffset = av_len(PL_regex_padav);
2680 PL_regex_pad = AvARRAY(PL_regex_padav);
2685 /* link into pm list */
2686 if (type != OP_TRANS && PL_curstash) {
2687 pmop->op_pmnext = HvPMROOT(PL_curstash);
2688 HvPMROOT(PL_curstash) = pmop;
2689 PmopSTASH_set(pmop,PL_curstash);
2692 return CHECKOP(type, pmop);
2695 /* Given some sort of match op o, and an expression expr containing a
2696 * pattern, either compile expr into a regex and attach it to o (if it's
2697 * constant), or convert expr into a runtime regcomp op sequence (if it's
2700 * isreg indicates that the pattern is part of a regex construct, eg
2701 * $x =~ /pattern/ or split /pattern/, as opposed to $x =~ $pattern or
2702 * split "pattern", which aren't. In the former case, expr will be a list
2703 * if the pattern contains more than one term (eg /a$b/) or if it contains
2704 * a replacement, ie s/// or tr///.
2708 Perl_pmruntime(pTHX_ OP *o, OP *expr, bool isreg)
2712 I32 repl_has_vars = 0;
2716 if (o->op_type == OP_SUBST || o->op_type == OP_TRANS) {
2717 /* last element in list is the replacement; pop it */
2719 repl = cLISTOPx(expr)->op_last;
2720 kid = cLISTOPx(expr)->op_first;
2721 while (kid->op_sibling != repl)
2722 kid = kid->op_sibling;
2723 kid->op_sibling = Nullop;
2724 cLISTOPx(expr)->op_last = kid;
2727 if (isreg && expr->op_type == OP_LIST &&
2728 cLISTOPx(expr)->op_first->op_sibling == cLISTOPx(expr)->op_last)
2730 /* convert single element list to element */
2732 expr = cLISTOPx(oe)->op_first->op_sibling;
2733 cLISTOPx(oe)->op_first->op_sibling = Nullop;
2734 cLISTOPx(oe)->op_last = Nullop;
2738 if (o->op_type == OP_TRANS) {
2739 return pmtrans(o, expr, repl);
2742 reglist = isreg && expr->op_type == OP_LIST;
2746 PL_hints |= HINT_BLOCK_SCOPE;
2749 if (expr->op_type == OP_CONST) {
2751 SV *pat = ((SVOP*)expr)->op_sv;
2752 char *p = SvPV(pat, plen);
2753 if ((o->op_flags & OPf_SPECIAL) && strEQ(p, " ")) {
2754 sv_setpvn(pat, "\\s+", 3);
2755 p = SvPV(pat, plen);
2756 pm->op_pmflags |= PMf_SKIPWHITE;
2759 pm->op_pmdynflags |= PMdf_UTF8;
2760 PM_SETRE(pm, CALLREGCOMP(aTHX_ p, p + plen, pm));
2761 if (strEQ("\\s+", PM_GETRE(pm)->precomp))
2762 pm->op_pmflags |= PMf_WHITE;
2766 if (pm->op_pmflags & PMf_KEEP || !(PL_hints & HINT_RE_EVAL))
2767 expr = newUNOP((!(PL_hints & HINT_RE_EVAL)
2769 : OP_REGCMAYBE),0,expr);
2771 NewOp(1101, rcop, 1, LOGOP);
2772 rcop->op_type = OP_REGCOMP;
2773 rcop->op_ppaddr = PL_ppaddr[OP_REGCOMP];
2774 rcop->op_first = scalar(expr);
2775 rcop->op_flags |= OPf_KIDS
2776 | ((PL_hints & HINT_RE_EVAL) ? OPf_SPECIAL : 0)
2777 | (reglist ? OPf_STACKED : 0);
2778 rcop->op_private = 1;
2781 rcop->op_targ = pad_alloc(rcop->op_type, SVs_PADTMP);
2783 /* /$x/ may cause an eval, since $x might be qr/(?{..})/ */
2786 /* establish postfix order */
2787 if (pm->op_pmflags & PMf_KEEP || !(PL_hints & HINT_RE_EVAL)) {
2789 rcop->op_next = expr;
2790 ((UNOP*)expr)->op_first->op_next = (OP*)rcop;
2793 rcop->op_next = LINKLIST(expr);
2794 expr->op_next = (OP*)rcop;
2797 prepend_elem(o->op_type, scalar((OP*)rcop), o);
2802 if (pm->op_pmflags & PMf_EVAL) {
2804 if (CopLINE(PL_curcop) < (line_t)PL_multi_end)
2805 CopLINE_set(PL_curcop, (line_t)PL_multi_end);
2807 else if (repl->op_type == OP_CONST)
2811 for (curop = LINKLIST(repl); curop!=repl; curop = LINKLIST(curop)) {
2812 if (PL_opargs[curop->op_type] & OA_DANGEROUS) {
2813 if (curop->op_type == OP_GV) {
2814 GV *gv = cGVOPx_gv(curop);
2816 if (strchr("&`'123456789+-\016\022", *GvENAME(gv)))
2819 else if (curop->op_type == OP_RV2CV)
2821 else if (curop->op_type == OP_RV2SV ||
2822 curop->op_type == OP_RV2AV ||
2823 curop->op_type == OP_RV2HV ||
2824 curop->op_type == OP_RV2GV) {
2825 if (lastop && lastop->op_type != OP_GV) /*funny deref?*/
2828 else if (curop->op_type == OP_PADSV ||
2829 curop->op_type == OP_PADAV ||
2830 curop->op_type == OP_PADHV ||
2831 curop->op_type == OP_PADANY) {
2834 else if (curop->op_type == OP_PUSHRE)
2835 ; /* Okay here, dangerous in newASSIGNOP */
2845 || PM_GETRE(pm)->reganch & ROPT_EVAL_SEEN))) {
2846 pm->op_pmflags |= PMf_CONST; /* const for long enough */
2847 pm->op_pmpermflags |= PMf_CONST; /* const for long enough */
2848 prepend_elem(o->op_type, scalar(repl), o);
2851 if (curop == repl && !PM_GETRE(pm)) { /* Has variables. */
2852 pm->op_pmflags |= PMf_MAYBE_CONST;
2853 pm->op_pmpermflags |= PMf_MAYBE_CONST;
2855 NewOp(1101, rcop, 1, LOGOP);
2856 rcop->op_type = OP_SUBSTCONT;
2857 rcop->op_ppaddr = PL_ppaddr[OP_SUBSTCONT];
2858 rcop->op_first = scalar(repl);
2859 rcop->op_flags |= OPf_KIDS;
2860 rcop->op_private = 1;
2863 /* establish postfix order */
2864 rcop->op_next = LINKLIST(repl);
2865 repl->op_next = (OP*)rcop;
2867 pm->op_pmreplroot = scalar((OP*)rcop);
2868 pm->op_pmreplstart = LINKLIST(rcop);
2877 Perl_newSVOP(pTHX_ I32 type, I32 flags, SV *sv)
2880 NewOp(1101, svop, 1, SVOP);
2881 svop->op_type = (OPCODE)type;
2882 svop->op_ppaddr = PL_ppaddr[type];
2884 svop->op_next = (OP*)svop;
2885 svop->op_flags = (U8)flags;
2886 if (PL_opargs[type] & OA_RETSCALAR)
2888 if (PL_opargs[type] & OA_TARGET)
2889 svop->op_targ = pad_alloc(type, SVs_PADTMP);
2890 return CHECKOP(type, svop);
2894 Perl_newPADOP(pTHX_ I32 type, I32 flags, SV *sv)
2897 NewOp(1101, padop, 1, PADOP);
2898 padop->op_type = (OPCODE)type;
2899 padop->op_ppaddr = PL_ppaddr[type];
2900 padop->op_padix = pad_alloc(type, SVs_PADTMP);
2901 SvREFCNT_dec(PAD_SVl(padop->op_padix));
2902 PAD_SETSV(padop->op_padix, sv);
2905 padop->op_next = (OP*)padop;
2906 padop->op_flags = (U8)flags;
2907 if (PL_opargs[type] & OA_RETSCALAR)
2909 if (PL_opargs[type] & OA_TARGET)
2910 padop->op_targ = pad_alloc(type, SVs_PADTMP);
2911 return CHECKOP(type, padop);
2915 Perl_newGVOP(pTHX_ I32 type, I32 flags, GV *gv)
2920 return newPADOP(type, flags, SvREFCNT_inc(gv));
2922 return newSVOP(type, flags, SvREFCNT_inc(gv));
2927 Perl_newPVOP(pTHX_ I32 type, I32 flags, char *pv)
2930 NewOp(1101, pvop, 1, PVOP);
2931 pvop->op_type = (OPCODE)type;
2932 pvop->op_ppaddr = PL_ppaddr[type];
2934 pvop->op_next = (OP*)pvop;
2935 pvop->op_flags = (U8)flags;
2936 if (PL_opargs[type] & OA_RETSCALAR)
2938 if (PL_opargs[type] & OA_TARGET)
2939 pvop->op_targ = pad_alloc(type, SVs_PADTMP);
2940 return CHECKOP(type, pvop);
2944 Perl_package(pTHX_ OP *o)
2949 save_hptr(&PL_curstash);
2950 save_item(PL_curstname);
2952 name = SvPV(cSVOPo->op_sv, len);
2953 PL_curstash = gv_stashpvn(name, len, TRUE);
2954 sv_setpvn(PL_curstname, name, len);
2957 PL_hints |= HINT_BLOCK_SCOPE;
2958 PL_copline = NOLINE;
2963 Perl_utilize(pTHX_ int aver, I32 floor, OP *version, OP *idop, OP *arg)
2969 if (idop->op_type != OP_CONST)
2970 Perl_croak(aTHX_ "Module name must be constant");
2974 if (version != Nullop) {
2975 SV *vesv = ((SVOP*)version)->op_sv;
2977 if (arg == Nullop && !SvNIOKp(vesv)) {
2984 if (version->op_type != OP_CONST || !SvNIOKp(vesv))
2985 Perl_croak(aTHX_ "Version number must be constant number");
2987 /* Make copy of idop so we don't free it twice */
2988 pack = newSVOP(OP_CONST, 0, newSVsv(((SVOP*)idop)->op_sv));
2990 /* Fake up a method call to VERSION */
2991 meth = newSVpvn("VERSION",7);
2992 sv_upgrade(meth, SVt_PVIV);
2993 (void)SvIOK_on(meth);
2994 PERL_HASH(SvUVX(meth), SvPVX(meth), SvCUR(meth));
2995 veop = convert(OP_ENTERSUB, OPf_STACKED|OPf_SPECIAL,
2996 append_elem(OP_LIST,
2997 prepend_elem(OP_LIST, pack, list(version)),
2998 newSVOP(OP_METHOD_NAMED, 0, meth)));
3002 /* Fake up an import/unimport */
3003 if (arg && arg->op_type == OP_STUB)
3004 imop = arg; /* no import on explicit () */
3005 else if (SvNIOKp(((SVOP*)idop)->op_sv)) {
3006 imop = Nullop; /* use 5.0; */
3011 /* Make copy of idop so we don't free it twice */
3012 pack = newSVOP(OP_CONST, 0, newSVsv(((SVOP*)idop)->op_sv));
3014 /* Fake up a method call to import/unimport */
3015 meth = aver ? newSVpvn("import",6) : newSVpvn("unimport", 8);
3016 (void)SvUPGRADE(meth, SVt_PVIV);
3017 (void)SvIOK_on(meth);
3018 PERL_HASH(SvUVX(meth), SvPVX(meth), SvCUR(meth));
3019 imop = convert(OP_ENTERSUB, OPf_STACKED|OPf_SPECIAL,
3020 append_elem(OP_LIST,
3021 prepend_elem(OP_LIST, pack, list(arg)),
3022 newSVOP(OP_METHOD_NAMED, 0, meth)));
3025 /* Fake up the BEGIN {}, which does its thing immediately. */
3027 newSVOP(OP_CONST, 0, newSVpvn("BEGIN", 5)),
3030 append_elem(OP_LINESEQ,
3031 append_elem(OP_LINESEQ,
3032 newSTATEOP(0, Nullch, newUNOP(OP_REQUIRE, 0, idop)),
3033 newSTATEOP(0, Nullch, veop)),
3034 newSTATEOP(0, Nullch, imop) ));
3036 /* The "did you use incorrect case?" warning used to be here.
3037 * The problem is that on case-insensitive filesystems one
3038 * might get false positives for "use" (and "require"):
3039 * "use Strict" or "require CARP" will work. This causes
3040 * portability problems for the script: in case-strict
3041 * filesystems the script will stop working.
3043 * The "incorrect case" warning checked whether "use Foo"
3044 * imported "Foo" to your namespace, but that is wrong, too:
3045 * there is no requirement nor promise in the language that
3046 * a Foo.pm should or would contain anything in package "Foo".
3048 * There is very little Configure-wise that can be done, either:
3049 * the case-sensitivity of the build filesystem of Perl does not
3050 * help in guessing the case-sensitivity of the runtime environment.
3053 PL_hints |= HINT_BLOCK_SCOPE;
3054 PL_copline = NOLINE;
3056 PL_cop_seqmax++; /* Purely for B::*'s benefit */
3060 =head1 Embedding Functions
3062 =for apidoc load_module
3064 Loads the module whose name is pointed to by the string part of name.
3065 Note that the actual module name, not its filename, should be given.
3066 Eg, "Foo::Bar" instead of "Foo/Bar.pm". flags can be any of
3067 PERL_LOADMOD_DENY, PERL_LOADMOD_NOIMPORT, or PERL_LOADMOD_IMPORT_OPS
3068 (or 0 for no flags). ver, if specified, provides version semantics
3069 similar to C<use Foo::Bar VERSION>. The optional trailing SV*
3070 arguments can be used to specify arguments to the module's import()
3071 method, similar to C<use Foo::Bar VERSION LIST>.
3076 Perl_load_module(pTHX_ U32 flags, SV *name, SV *ver, ...)
3079 va_start(args, ver);
3080 vload_module(flags, name, ver, &args);
3084 #ifdef PERL_IMPLICIT_CONTEXT
3086 Perl_load_module_nocontext(U32 flags, SV *name, SV *ver, ...)
3090 va_start(args, ver);
3091 vload_module(flags, name, ver, &args);
3097 Perl_vload_module(pTHX_ U32 flags, SV *name, SV *ver, va_list *args)
3099 OP *modname, *veop, *imop;
3101 modname = newSVOP(OP_CONST, 0, name);
3102 modname->op_private |= OPpCONST_BARE;
3104 veop = newSVOP(OP_CONST, 0, ver);
3108 if (flags & PERL_LOADMOD_NOIMPORT) {
3109 imop = sawparens(newNULLLIST());
3111 else if (flags & PERL_LOADMOD_IMPORT_OPS) {
3112 imop = va_arg(*args, OP*);
3117 sv = va_arg(*args, SV*);
3119 imop = append_elem(OP_LIST, imop, newSVOP(OP_CONST, 0, sv));
3120 sv = va_arg(*args, SV*);
3124 line_t ocopline = PL_copline;
3125 COP *ocurcop = PL_curcop;
3126 int oexpect = PL_expect;
3128 utilize(!(flags & PERL_LOADMOD_DENY), start_subparse(FALSE, 0),
3129 veop, modname, imop);
3130 PL_expect = oexpect;
3131 PL_copline = ocopline;
3132 PL_curcop = ocurcop;
3137 Perl_dofile(pTHX_ OP *term)
3142 gv = gv_fetchpv("do", FALSE, SVt_PVCV);
3143 if (!(gv && GvCVu(gv) && GvIMPORTED_CV(gv)))
3144 gv = gv_fetchpv("CORE::GLOBAL::do", FALSE, SVt_PVCV);
3146 if (gv && GvCVu(gv) && GvIMPORTED_CV(gv)) {
3147 doop = ck_subr(newUNOP(OP_ENTERSUB, OPf_STACKED,
3148 append_elem(OP_LIST, term,
3149 scalar(newUNOP(OP_RV2CV, 0,
3154 doop = newUNOP(OP_DOFILE, 0, scalar(term));
3160 Perl_newSLICEOP(pTHX_ I32 flags, OP *subscript, OP *listval)
3162 return newBINOP(OP_LSLICE, flags,
3163 list(force_list(subscript)),
3164 list(force_list(listval)) );
3168 S_list_assignment(pTHX_ register OP *o)
3173 if (o->op_type == OP_NULL && o->op_flags & OPf_KIDS)
3174 o = cUNOPo->op_first;
3176 if (o->op_type == OP_COND_EXPR) {
3177 I32 t = list_assignment(cLOGOPo->op_first->op_sibling);
3178 I32 f = list_assignment(cLOGOPo->op_first->op_sibling->op_sibling);
3183 yyerror("Assignment to both a list and a scalar");
3187 if (o->op_type == OP_LIST &&
3188 (o->op_flags & OPf_WANT) == OPf_WANT_SCALAR &&
3189 o->op_private & OPpLVAL_INTRO)
3192 if (o->op_type == OP_LIST || o->op_flags & OPf_PARENS ||
3193 o->op_type == OP_RV2AV || o->op_type == OP_RV2HV ||
3194 o->op_type == OP_ASLICE || o->op_type == OP_HSLICE)
3197 if (o->op_type == OP_PADAV || o->op_type == OP_PADHV)
3200 if (o->op_type == OP_RV2SV)
3207 Perl_newASSIGNOP(pTHX_ I32 flags, OP *left, I32 optype, OP *right)
3212 if (optype == OP_ANDASSIGN || optype == OP_ORASSIGN || optype == OP_DORASSIGN) {
3213 return newLOGOP(optype, 0,
3214 mod(scalar(left), optype),
3215 newUNOP(OP_SASSIGN, 0, scalar(right)));
3218 return newBINOP(optype, OPf_STACKED,
3219 mod(scalar(left), optype), scalar(right));
3223 if (list_assignment(left)) {
3227 PL_eval_start = right; /* Grandfathering $[ assignment here. Bletch.*/
3228 left = mod(left, OP_AASSIGN);
3236 /* optimise C<my @x = ()> to C<my @x>, and likewise for hashes */
3237 if ((left->op_type == OP_PADAV || left->op_type == OP_PADHV)
3238 && right->op_type == OP_STUB
3239 && (left->op_private & OPpLVAL_INTRO))
3242 left->op_flags &= ~(OPf_REF|OPf_SPECIAL);
3245 curop = list(force_list(left));
3246 o = newBINOP(OP_AASSIGN, flags, list(force_list(right)), curop);
3247 o->op_private = (U8)(0 | (flags >> 8));
3249 /* PL_generation sorcery:
3250 * an assignment like ($a,$b) = ($c,$d) is easier than
3251 * ($a,$b) = ($c,$a), since there is no need for temporary vars.
3252 * To detect whether there are common vars, the global var
3253 * PL_generation is incremented for each assign op we compile.
3254 * Then, while compiling the assign op, we run through all the
3255 * variables on both sides of the assignment, setting a spare slot
3256 * in each of them to PL_generation. If any of them already have
3257 * that value, we know we've got commonality. We could use a
3258 * single bit marker, but then we'd have to make 2 passes, first
3259 * to clear the flag, then to test and set it. To find somewhere
3260 * to store these values, evil chicanery is done with SvCUR().
3263 if (!(left->op_private & OPpLVAL_INTRO)) {
3266 for (curop = LINKLIST(o); curop != o; curop = LINKLIST(curop)) {
3267 if (PL_opargs[curop->op_type] & OA_DANGEROUS) {
3268 if (curop->op_type == OP_GV) {
3269 GV *gv = cGVOPx_gv(curop);
3270 if (gv == PL_defgv || (int)SvCUR(gv) == PL_generation)
3272 SvCUR(gv) = PL_generation;
3274 else if (curop->op_type == OP_PADSV ||
3275 curop->op_type == OP_PADAV ||
3276 curop->op_type == OP_PADHV ||
3277 curop->op_type == OP_PADANY)
3279 if (PAD_COMPNAME_GEN(curop->op_targ)
3280 == (STRLEN)PL_generation)
3282 PAD_COMPNAME_GEN(curop->op_targ)
3286 else if (curop->op_type == OP_RV2CV)
3288 else if (curop->op_type == OP_RV2SV ||
3289 curop->op_type == OP_RV2AV ||
3290 curop->op_type == OP_RV2HV ||
3291 curop->op_type == OP_RV2GV) {
3292 if (lastop->op_type != OP_GV) /* funny deref? */
3295 else if (curop->op_type == OP_PUSHRE) {
3296 if (((PMOP*)curop)->op_pmreplroot) {
3298 GV *gv = (GV*)PAD_SVl(INT2PTR(PADOFFSET,
3299 ((PMOP*)curop)->op_pmreplroot));
3301 GV *gv = (GV*)((PMOP*)curop)->op_pmreplroot;
3303 if (gv == PL_defgv || (int)SvCUR(gv) == PL_generation)
3305 SvCUR(gv) = PL_generation;
3314 o->op_private |= OPpASSIGN_COMMON;
3316 if (right && right->op_type == OP_SPLIT) {
3318 if ((tmpop = ((LISTOP*)right)->op_first) &&
3319 tmpop->op_type == OP_PUSHRE)
3321 PMOP *pm = (PMOP*)tmpop;
3322 if (left->op_type == OP_RV2AV &&
3323 !(left->op_private & OPpLVAL_INTRO) &&
3324 !(o->op_private & OPpASSIGN_COMMON) )
3326 tmpop = ((UNOP*)left)->op_first;
3327 if (tmpop->op_type == OP_GV && !pm->op_pmreplroot) {
3329 pm->op_pmreplroot = INT2PTR(OP*, cPADOPx(tmpop)->op_padix);
3330 cPADOPx(tmpop)->op_padix = 0; /* steal it */
3332 pm->op_pmreplroot = (OP*)cSVOPx(tmpop)->op_sv;
3333 cSVOPx(tmpop)->op_sv = Nullsv; /* steal it */
3335 pm->op_pmflags |= PMf_ONCE;
3336 tmpop = cUNOPo->op_first; /* to list (nulled) */
3337 tmpop = ((UNOP*)tmpop)->op_first; /* to pushmark */
3338 tmpop->op_sibling = Nullop; /* don't free split */
3339 right->op_next = tmpop->op_next; /* fix starting loc */
3340 op_free(o); /* blow off assign */
3341 right->op_flags &= ~OPf_WANT;
3342 /* "I don't know and I don't care." */
3347 if (PL_modcount < RETURN_UNLIMITED_NUMBER &&
3348 ((LISTOP*)right)->op_last->op_type == OP_CONST)
3350 SV *sv = ((SVOP*)((LISTOP*)right)->op_last)->op_sv;
3352 sv_setiv(sv, PL_modcount+1);
3360 right = newOP(OP_UNDEF, 0);
3361 if (right->op_type == OP_READLINE) {
3362 right->op_flags |= OPf_STACKED;
3363 return newBINOP(OP_NULL, flags, mod(scalar(left), OP_SASSIGN), scalar(right));
3366 PL_eval_start = right; /* Grandfathering $[ assignment here. Bletch.*/
3367 o = newBINOP(OP_SASSIGN, flags,
3368 scalar(right), mod(scalar(left), OP_SASSIGN) );
3380 Perl_newSTATEOP(pTHX_ I32 flags, char *label, OP *o)
3382 U32 seq = intro_my();
3385 NewOp(1101, cop, 1, COP);
3386 if (PERLDB_LINE && CopLINE(PL_curcop) && PL_curstash != PL_debstash) {
3387 cop->op_type = OP_DBSTATE;
3388 cop->op_ppaddr = PL_ppaddr[ OP_DBSTATE ];
3391 cop->op_type = OP_NEXTSTATE;
3392 cop->op_ppaddr = PL_ppaddr[ OP_NEXTSTATE ];
3394 cop->op_flags = (U8)flags;
3395 cop->op_private = (U8)(PL_hints & HINT_PRIVATE_MASK);
3397 cop->op_private |= NATIVE_HINTS;
3399 PL_compiling.op_private = cop->op_private;
3400 cop->op_next = (OP*)cop;
3403 cop->cop_label = label;
3404 PL_hints |= HINT_BLOCK_SCOPE;
3407 cop->cop_arybase = PL_curcop->cop_arybase;
3408 if (specialWARN(PL_curcop->cop_warnings))
3409 cop->cop_warnings = PL_curcop->cop_warnings ;
3411 cop->cop_warnings = newSVsv(PL_curcop->cop_warnings) ;
3412 if (specialCopIO(PL_curcop->cop_io))
3413 cop->cop_io = PL_curcop->cop_io;
3415 cop->cop_io = newSVsv(PL_curcop->cop_io) ;
3418 if (PL_copline == NOLINE)
3419 CopLINE_set(cop, CopLINE(PL_curcop));
3421 CopLINE_set(cop, PL_copline);
3422 PL_copline = NOLINE;
3425 CopFILE_set(cop, CopFILE(PL_curcop)); /* XXX share in a pvtable? */
3427 CopFILEGV_set(cop, CopFILEGV(PL_curcop));
3429 CopSTASH_set(cop, PL_curstash);
3431 if (PERLDB_LINE && PL_curstash != PL_debstash) {
3432 SV **svp = av_fetch(CopFILEAV(PL_curcop), (I32)CopLINE(cop), FALSE);
3433 if (svp && *svp != &PL_sv_undef ) {
3434 (void)SvIOK_on(*svp);
3435 SvIVX(*svp) = PTR2IV(cop);
3439 return prepend_elem(OP_LINESEQ, (OP*)cop, o);
3444 Perl_newLOGOP(pTHX_ I32 type, I32 flags, OP *first, OP *other)
3446 return new_logop(type, flags, &first, &other);
3450 S_new_logop(pTHX_ I32 type, I32 flags, OP** firstp, OP** otherp)
3454 OP *first = *firstp;
3455 OP *other = *otherp;
3457 if (type == OP_XOR) /* Not short circuit, but here by precedence. */
3458 return newBINOP(type, flags, scalar(first), scalar(other));
3460 scalarboolean(first);
3461 /* optimize "!a && b" to "a || b", and "!a || b" to "a && b" */
3462 if (first->op_type == OP_NOT && (first->op_flags & OPf_SPECIAL)) {
3463 if (type == OP_AND || type == OP_OR) {
3469 first = *firstp = cUNOPo->op_first;
3471 first->op_next = o->op_next;
3472 cUNOPo->op_first = Nullop;
3476 if (first->op_type == OP_CONST) {
3477 if (first->op_private & OPpCONST_STRICT)
3478 no_bareword_allowed(first);
3479 else if (ckWARN(WARN_BAREWORD) && (first->op_private & OPpCONST_BARE))
3480 Perl_warner(aTHX_ packWARN(WARN_BAREWORD), "Bareword found in conditional");
3481 if ((type == OP_AND && SvTRUE(((SVOP*)first)->op_sv)) ||
3482 (type == OP_OR && !SvTRUE(((SVOP*)first)->op_sv)) ||
3483 (type == OP_DOR && !SvOK(((SVOP*)first)->op_sv))) {
3486 if (other->op_type == OP_CONST)
3487 other->op_private |= OPpCONST_SHORTCIRCUIT;
3491 /* check for C<my $x if 0>, or C<my($x,$y) if 0> */
3493 if ( ! (o2->op_type == OP_LIST
3494 && (( o2 = cUNOPx(o2)->op_first))
3495 && o2->op_type == OP_PUSHMARK
3496 && (( o2 = o2->op_sibling)) )
3499 if ((o2->op_type == OP_PADSV || o2->op_type == OP_PADAV
3500 || o2->op_type == OP_PADHV)
3501 && o2->op_private & OPpLVAL_INTRO
3502 && ckWARN(WARN_DEPRECATED))
3504 Perl_warner(aTHX_ packWARN(WARN_DEPRECATED),
3505 "Deprecated use of my() in false conditional");
3510 if (first->op_type == OP_CONST)
3511 first->op_private |= OPpCONST_SHORTCIRCUIT;
3515 else if (ckWARN(WARN_MISC) && (first->op_flags & OPf_KIDS) &&
3516 type != OP_DOR) /* [#24076] Don't warn for <FH> err FOO. */
3518 OP *k1 = ((UNOP*)first)->op_first;
3519 OP *k2 = k1->op_sibling;
3521 switch (first->op_type)
3524 if (k2 && k2->op_type == OP_READLINE
3525 && (k2->op_flags & OPf_STACKED)
3526 && ((k1->op_flags & OPf_WANT) == OPf_WANT_SCALAR))
3528 warnop = k2->op_type;
3533 if (k1->op_type == OP_READDIR
3534 || k1->op_type == OP_GLOB
3535 || (k1->op_type == OP_NULL && k1->op_targ == OP_GLOB)
3536 || k1->op_type == OP_EACH)
3538 warnop = ((k1->op_type == OP_NULL)
3539 ? (OPCODE)k1->op_targ : k1->op_type);
3544 line_t oldline = CopLINE(PL_curcop);
3545 CopLINE_set(PL_curcop, PL_copline);
3546 Perl_warner(aTHX_ packWARN(WARN_MISC),
3547 "Value of %s%s can be \"0\"; test with defined()",
3549 ((warnop == OP_READLINE || warnop == OP_GLOB)
3550 ? " construct" : "() operator"));
3551 CopLINE_set(PL_curcop, oldline);
3558 if (type == OP_ANDASSIGN || type == OP_ORASSIGN || type == OP_DORASSIGN)
3559 other->op_private |= OPpASSIGN_BACKWARDS; /* other is an OP_SASSIGN */
3561 NewOp(1101, logop, 1, LOGOP);
3563 logop->op_type = (OPCODE)type;
3564 logop->op_ppaddr = PL_ppaddr[type];
3565 logop->op_first = first;
3566 logop->op_flags = flags | OPf_KIDS;
3567 logop->op_other = LINKLIST(other);
3568 logop->op_private = (U8)(1 | (flags >> 8));
3570 /* establish postfix order */
3571 logop->op_next = LINKLIST(first);
3572 first->op_next = (OP*)logop;
3573 first->op_sibling = other;
3575 CHECKOP(type,logop);
3577 o = newUNOP(OP_NULL, 0, (OP*)logop);
3584 Perl_newCONDOP(pTHX_ I32 flags, OP *first, OP *trueop, OP *falseop)
3591 return newLOGOP(OP_AND, 0, first, trueop);
3593 return newLOGOP(OP_OR, 0, first, falseop);
3595 scalarboolean(first);
3596 if (first->op_type == OP_CONST) {
3597 if (first->op_private & OPpCONST_BARE &&
3598 first->op_private & OPpCONST_STRICT) {
3599 no_bareword_allowed(first);
3601 if (SvTRUE(((SVOP*)first)->op_sv)) {
3612 NewOp(1101, logop, 1, LOGOP);
3613 logop->op_type = OP_COND_EXPR;
3614 logop->op_ppaddr = PL_ppaddr[OP_COND_EXPR];
3615 logop->op_first = first;
3616 logop->op_flags = flags | OPf_KIDS;
3617 logop->op_private = (U8)(1 | (flags >> 8));
3618 logop->op_other = LINKLIST(trueop);
3619 logop->op_next = LINKLIST(falseop);
3621 CHECKOP(OP_COND_EXPR, /* that's logop->op_type */
3624 /* establish postfix order */
3625 start = LINKLIST(first);
3626 first->op_next = (OP*)logop;
3628 first->op_sibling = trueop;
3629 trueop->op_sibling = falseop;
3630 o = newUNOP(OP_NULL, 0, (OP*)logop);
3632 trueop->op_next = falseop->op_next = o;
3639 Perl_newRANGE(pTHX_ I32 flags, OP *left, OP *right)
3647 NewOp(1101, range, 1, LOGOP);
3649 range->op_type = OP_RANGE;
3650 range->op_ppaddr = PL_ppaddr[OP_RANGE];
3651 range->op_first = left;
3652 range->op_flags = OPf_KIDS;
3653 leftstart = LINKLIST(left);
3654 range->op_other = LINKLIST(right);
3655 range->op_private = (U8)(1 | (flags >> 8));
3657 left->op_sibling = right;
3659 range->op_next = (OP*)range;
3660 flip = newUNOP(OP_FLIP, flags, (OP*)range);
3661 flop = newUNOP(OP_FLOP, 0, flip);
3662 o = newUNOP(OP_NULL, 0, flop);
3664 range->op_next = leftstart;
3666 left->op_next = flip;
3667 right->op_next = flop;
3669 range->op_targ = pad_alloc(OP_RANGE, SVs_PADMY);
3670 sv_upgrade(PAD_SV(range->op_targ), SVt_PVNV);
3671 flip->op_targ = pad_alloc(OP_RANGE, SVs_PADMY);
3672 sv_upgrade(PAD_SV(flip->op_targ), SVt_PVNV);
3674 flip->op_private = left->op_type == OP_CONST ? OPpFLIP_LINENUM : 0;
3675 flop->op_private = right->op_type == OP_CONST ? OPpFLIP_LINENUM : 0;
3678 if (!flip->op_private || !flop->op_private)
3679 linklist(o); /* blow off optimizer unless constant */
3685 Perl_newLOOPOP(pTHX_ I32 flags, I32 debuggable, OP *expr, OP *block)
3689 int once = block && block->op_flags & OPf_SPECIAL &&
3690 (block->op_type == OP_ENTERSUB || block->op_type == OP_NULL);
3693 if (once && expr->op_type == OP_CONST && !SvTRUE(((SVOP*)expr)->op_sv))
3694 return block; /* do {} while 0 does once */
3695 if (expr->op_type == OP_READLINE || expr->op_type == OP_GLOB
3696 || (expr->op_type == OP_NULL && expr->op_targ == OP_GLOB)) {
3697 expr = newUNOP(OP_DEFINED, 0,
3698 newASSIGNOP(0, newDEFSVOP(), 0, expr) );
3699 } else if (expr->op_flags & OPf_KIDS) {
3700 OP *k1 = ((UNOP*)expr)->op_first;
3701 OP *k2 = (k1) ? k1->op_sibling : NULL;
3702 switch (expr->op_type) {
3704 if (k2 && k2->op_type == OP_READLINE
3705 && (k2->op_flags & OPf_STACKED)
3706 && ((k1->op_flags & OPf_WANT) == OPf_WANT_SCALAR))
3707 expr = newUNOP(OP_DEFINED, 0, expr);
3711 if (k1->op_type == OP_READDIR
3712 || k1->op_type == OP_GLOB
3713 || (k1->op_type == OP_NULL && k1->op_targ == OP_GLOB)
3714 || k1->op_type == OP_EACH)
3715 expr = newUNOP(OP_DEFINED, 0, expr);
3721 /* if block is null, the next append_elem() would put UNSTACK, a scalar
3722 * op, in listop. This is wrong. [perl #27024] */
3724 block = newOP(OP_NULL, 0);
3725 listop = append_elem(OP_LINESEQ, block, newOP(OP_UNSTACK, 0));
3726 o = new_logop(OP_AND, 0, &expr, &listop);
3729 ((LISTOP*)listop)->op_last->op_next = LINKLIST(o);
3731 if (once && o != listop)
3732 o->op_next = ((LOGOP*)cUNOPo->op_first)->op_other;
3735 o = newUNOP(OP_NULL, 0, o); /* or do {} while 1 loses outer block */
3737 o->op_flags |= flags;
3739 o->op_flags |= OPf_SPECIAL; /* suppress POPBLOCK curpm restoration*/
3744 Perl_newWHILEOP(pTHX_ I32 flags, I32 debuggable, LOOP *loop, I32 whileline, OP *expr, OP *block, OP *cont)
3752 if (expr && (expr->op_type == OP_READLINE || expr->op_type == OP_GLOB
3753 || (expr->op_type == OP_NULL && expr->op_targ == OP_GLOB))) {
3754 expr = newUNOP(OP_DEFINED, 0,
3755 newASSIGNOP(0, newDEFSVOP(), 0, expr) );
3756 } else if (expr && (expr->op_flags & OPf_KIDS)) {
3757 OP *k1 = ((UNOP*)expr)->op_first;
3758 OP *k2 = (k1) ? k1->op_sibling : NULL;
3759 switch (expr->op_type) {
3761 if (k2 && k2->op_type == OP_READLINE
3762 && (k2->op_flags & OPf_STACKED)
3763 && ((k1->op_flags & OPf_WANT) == OPf_WANT_SCALAR))
3764 expr = newUNOP(OP_DEFINED, 0, expr);
3768 if (k1->op_type == OP_READDIR
3769 || k1->op_type == OP_GLOB
3770 || (k1->op_type == OP_NULL && k1->op_targ == OP_GLOB)
3771 || k1->op_type == OP_EACH)
3772 expr = newUNOP(OP_DEFINED, 0, expr);
3778 block = newOP(OP_NULL, 0);
3780 block = scope(block);
3784 next = LINKLIST(cont);
3787 OP *unstack = newOP(OP_UNSTACK, 0);
3790 cont = append_elem(OP_LINESEQ, cont, unstack);
3793 listop = append_list(OP_LINESEQ, (LISTOP*)block, (LISTOP*)cont);
3794 redo = LINKLIST(listop);
3797 PL_copline = (line_t)whileline;
3799 o = new_logop(OP_AND, 0, &expr, &listop);
3800 if (o == expr && o->op_type == OP_CONST && !SvTRUE(cSVOPo->op_sv)) {
3801 op_free(expr); /* oops, it's a while (0) */
3803 return Nullop; /* listop already freed by new_logop */
3806 ((LISTOP*)listop)->op_last->op_next =
3807 (o == listop ? redo : LINKLIST(o));
3813 NewOp(1101,loop,1,LOOP);
3814 loop->op_type = OP_ENTERLOOP;
3815 loop->op_ppaddr = PL_ppaddr[OP_ENTERLOOP];
3816 loop->op_private = 0;
3817 loop->op_next = (OP*)loop;
3820 o = newBINOP(OP_LEAVELOOP, 0, (OP*)loop, o);
3822 loop->op_redoop = redo;
3823 loop->op_lastop = o;
3824 o->op_private |= loopflags;
3827 loop->op_nextop = next;
3829 loop->op_nextop = o;
3831 o->op_flags |= flags;
3832 o->op_private |= (flags >> 8);
3837 Perl_newFOROP(pTHX_ I32 flags,char *label,line_t forline,OP *sv,OP *expr,OP *block,OP *cont)
3841 PADOFFSET padoff = 0;
3846 if (sv->op_type == OP_RV2SV) { /* symbol table variable */
3847 iterpflags = sv->op_private & OPpOUR_INTRO; /* for our $x () */
3848 sv->op_type = OP_RV2GV;
3849 sv->op_ppaddr = PL_ppaddr[OP_RV2GV];
3851 else if (sv->op_type == OP_PADSV) { /* private variable */
3852 iterpflags = sv->op_private & OPpLVAL_INTRO; /* for my $x () */
3853 padoff = sv->op_targ;
3858 else if (sv->op_type == OP_THREADSV) { /* per-thread variable */
3859 padoff = sv->op_targ;
3861 iterflags |= OPf_SPECIAL;
3866 Perl_croak(aTHX_ "Can't use %s for loop variable", PL_op_desc[sv->op_type]);
3869 I32 offset = pad_findmy("$_");
3870 if (offset == NOT_IN_PAD || PAD_COMPNAME_FLAGS(offset) & SVpad_OUR) {
3871 sv = newGVOP(OP_GV, 0, PL_defgv);
3877 if (expr->op_type == OP_RV2AV || expr->op_type == OP_PADAV) {
3878 expr = mod(force_list(scalar(ref(expr, OP_ITER))), OP_GREPSTART);
3879 iterflags |= OPf_STACKED;
3881 else if (expr->op_type == OP_NULL &&
3882 (expr->op_flags & OPf_KIDS) &&
3883 ((BINOP*)expr)->op_first->op_type == OP_FLOP)
3885 /* Basically turn for($x..$y) into the same as for($x,$y), but we
3886 * set the STACKED flag to indicate that these values are to be
3887 * treated as min/max values by 'pp_iterinit'.
3889 UNOP* flip = (UNOP*)((UNOP*)((BINOP*)expr)->op_first)->op_first;
3890 LOGOP* range = (LOGOP*) flip->op_first;
3891 OP* left = range->op_first;
3892 OP* right = left->op_sibling;
3895 range->op_flags &= ~OPf_KIDS;
3896 range->op_first = Nullop;
3898 listop = (LISTOP*)newLISTOP(OP_LIST, 0, left, right);
3899 listop->op_first->op_next = range->op_next;
3900 left->op_next = range->op_other;
3901 right->op_next = (OP*)listop;
3902 listop->op_next = listop->op_first;
3905 expr = (OP*)(listop);
3907 iterflags |= OPf_STACKED;
3910 expr = mod(force_list(expr), OP_GREPSTART);
3914 loop = (LOOP*)list(convert(OP_ENTERITER, iterflags,
3915 append_elem(OP_LIST, expr, scalar(sv))));
3916 assert(!loop->op_next);
3917 /* for my $x () sets OPpLVAL_INTRO;
3918 * for our $x () sets OPpOUR_INTRO */
3919 loop->op_private = (U8)iterpflags;
3920 #ifdef PL_OP_SLAB_ALLOC
3923 NewOp(1234,tmp,1,LOOP);
3924 Copy(loop,tmp,1,LOOP);
3929 Renew(loop, 1, LOOP);
3931 loop->op_targ = padoff;
3932 wop = newWHILEOP(flags, 1, loop, forline, newOP(OP_ITER, 0), block, cont);
3933 PL_copline = forline;
3934 return newSTATEOP(0, label, wop);
3938 Perl_newLOOPEX(pTHX_ I32 type, OP *label)
3943 if (type != OP_GOTO || label->op_type == OP_CONST) {
3944 /* "last()" means "last" */
3945 if (label->op_type == OP_STUB && (label->op_flags & OPf_PARENS))
3946 o = newOP(type, OPf_SPECIAL);
3948 o = newPVOP(type, 0, savepv(label->op_type == OP_CONST
3949 ? SvPVx(((SVOP*)label)->op_sv, n_a)
3955 /* Check whether it's going to be a goto &function */
3956 if (label->op_type == OP_ENTERSUB
3957 && !(label->op_flags & OPf_STACKED))
3958 label = newUNOP(OP_REFGEN, 0, mod(label, OP_REFGEN));
3959 o = newUNOP(type, OPf_STACKED, label);
3961 PL_hints |= HINT_BLOCK_SCOPE;
3966 =for apidoc cv_undef
3968 Clear out all the active components of a CV. This can happen either
3969 by an explicit C<undef &foo>, or by the reference count going to zero.
3970 In the former case, we keep the CvOUTSIDE pointer, so that any anonymous
3971 children can still follow the full lexical scope chain.
3977 Perl_cv_undef(pTHX_ CV *cv)
3980 if (CvFILE(cv) && !CvXSUB(cv)) {
3981 /* for XSUBs CvFILE point directly to static memory; __FILE__ */
3982 Safefree(CvFILE(cv));
3987 if (!CvXSUB(cv) && CvROOT(cv)) {
3989 Perl_croak(aTHX_ "Can't undef active subroutine");
3992 PAD_SAVE_SETNULLPAD();
3994 op_free(CvROOT(cv));
3995 CvROOT(cv) = Nullop;
3998 SvPOK_off((SV*)cv); /* forget prototype */
4003 /* remove CvOUTSIDE unless this is an undef rather than a free */
4004 if (!SvREFCNT(cv) && CvOUTSIDE(cv)) {
4005 if (!CvWEAKOUTSIDE(cv))
4006 SvREFCNT_dec(CvOUTSIDE(cv));
4007 CvOUTSIDE(cv) = Nullcv;
4010 SvREFCNT_dec((SV*)CvXSUBANY(cv).any_ptr);
4016 /* delete all flags except WEAKOUTSIDE */
4017 CvFLAGS(cv) &= CVf_WEAKOUTSIDE;
4021 Perl_cv_ckproto(pTHX_ CV *cv, GV *gv, char *p)
4023 if (((!p != !SvPOK(cv)) || (p && strNE(p, SvPVX(cv)))) && ckWARN_d(WARN_PROTOTYPE)) {
4024 SV* msg = sv_newmortal();
4028 gv_efullname3(name = sv_newmortal(), gv, Nullch);
4029 sv_setpv(msg, "Prototype mismatch:");
4031 Perl_sv_catpvf(aTHX_ msg, " sub %"SVf, name);
4033 Perl_sv_catpvf(aTHX_ msg, " (%"SVf")", (SV *)cv);
4035 Perl_sv_catpvf(aTHX_ msg, ": none");
4036 sv_catpv(msg, " vs ");
4038 Perl_sv_catpvf(aTHX_ msg, "(%s)", p);
4040 sv_catpv(msg, "none");
4041 Perl_warner(aTHX_ packWARN(WARN_PROTOTYPE), "%"SVf, msg);
4045 static void const_sv_xsub(pTHX_ CV* cv);
4049 =head1 Optree Manipulation Functions
4051 =for apidoc cv_const_sv
4053 If C<cv> is a constant sub eligible for inlining. returns the constant
4054 value returned by the sub. Otherwise, returns NULL.
4056 Constant subs can be created with C<newCONSTSUB> or as described in
4057 L<perlsub/"Constant Functions">.
4062 Perl_cv_const_sv(pTHX_ CV *cv)
4064 if (!cv || !CvCONST(cv))
4066 return (SV*)CvXSUBANY(cv).any_ptr;
4069 /* op_const_sv: examine an optree to determine whether it's in-lineable.
4070 * Can be called in 3 ways:
4073 * look for a single OP_CONST with attached value: return the value
4075 * cv && CvCLONE(cv) && !CvCONST(cv)
4077 * examine the clone prototype, and if contains only a single
4078 * OP_CONST referencing a pad const, or a single PADSV referencing
4079 * an outer lexical, return a non-zero value to indicate the CV is
4080 * a candidate for "constizing" at clone time
4084 * We have just cloned an anon prototype that was marked as a const
4085 * candidiate. Try to grab the current value, and in the case of
4086 * PADSV, ignore it if it has multiple references. Return the value.
4090 Perl_op_const_sv(pTHX_ OP *o, CV *cv)
4097 if (o->op_type == OP_LINESEQ && cLISTOPo->op_first)
4098 o = cLISTOPo->op_first->op_sibling;
4100 for (; o; o = o->op_next) {
4101 OPCODE type = o->op_type;
4103 if (sv && o->op_next == o)
4105 if (o->op_next != o) {
4106 if (type == OP_NEXTSTATE || type == OP_NULL || type == OP_PUSHMARK)
4108 if (type == OP_DBSTATE)
4111 if (type == OP_LEAVESUB || type == OP_RETURN)
4115 if (type == OP_CONST && cSVOPo->op_sv)
4117 else if (cv && type == OP_CONST) {
4118 sv = PAD_BASE_SV(CvPADLIST(cv), o->op_targ);
4122 else if (cv && type == OP_PADSV) {
4123 if (CvCONST(cv)) { /* newly cloned anon */
4124 sv = PAD_BASE_SV(CvPADLIST(cv), o->op_targ);
4125 /* the candidate should have 1 ref from this pad and 1 ref
4126 * from the parent */
4127 if (!sv || SvREFCNT(sv) != 2)
4134 if (PAD_COMPNAME_FLAGS(o->op_targ) & SVf_FAKE)
4135 sv = &PL_sv_undef; /* an arbitrary non-null value */
4146 Perl_newMYSUB(pTHX_ I32 floor, OP *o, OP *proto, OP *attrs, OP *block)
4156 Perl_croak(aTHX_ "\"my sub\" not yet implemented");
4160 Perl_newSUB(pTHX_ I32 floor, OP *o, OP *proto, OP *block)
4162 return Perl_newATTRSUB(aTHX_ floor, o, proto, Nullop, block);
4166 Perl_newATTRSUB(pTHX_ I32 floor, OP *o, OP *proto, OP *attrs, OP *block)
4176 name = o ? SvPVx(cSVOPo->op_sv, n_a) : Nullch;
4179 assert(proto->op_type == OP_CONST);
4180 ps = SvPVx(((SVOP*)proto)->op_sv, n_a);
4185 if (!name && PERLDB_NAMEANON && CopLINE(PL_curcop)) {
4186 SV *sv = sv_newmortal();
4187 Perl_sv_setpvf(aTHX_ sv, "%s[%s:%"IVdf"]",
4188 PL_curstash ? "__ANON__" : "__ANON__::__ANON__",
4189 CopFILE(PL_curcop), (IV)CopLINE(PL_curcop));
4194 gv = gv_fetchpv(name ? name : (aname ? aname :
4195 (PL_curstash ? "__ANON__" : "__ANON__::__ANON__")),
4196 GV_ADDMULTI | ((block || attrs) ? 0 : GV_NOINIT),
4206 if (SvTYPE(gv) != SVt_PVGV) { /* Maybe prototype now, and had at
4207 maximum a prototype before. */
4208 if (SvTYPE(gv) > SVt_NULL) {
4209 if (!SvPOK((SV*)gv) && !(SvIOK((SV*)gv) && SvIVX((SV*)gv) == -1)
4210 && ckWARN_d(WARN_PROTOTYPE))
4212 Perl_warner(aTHX_ packWARN(WARN_PROTOTYPE), "Runaway prototype");
4214 cv_ckproto((CV*)gv, NULL, ps);
4217 sv_setpv((SV*)gv, ps);
4219 sv_setiv((SV*)gv, -1);
4220 SvREFCNT_dec(PL_compcv);
4221 cv = PL_compcv = NULL;
4222 PL_sub_generation++;
4226 cv = (!name || GvCVGEN(gv)) ? Nullcv : GvCV(gv);
4228 #ifdef GV_UNIQUE_CHECK
4229 if (cv && GvUNIQUE(gv) && SvREADONLY(cv)) {
4230 Perl_croak(aTHX_ "Can't define subroutine %s (GV is unique)", name);
4234 if (!block || !ps || *ps || attrs)
4237 const_sv = op_const_sv(block, Nullcv);
4240 bool exists = CvROOT(cv) || CvXSUB(cv);
4242 #ifdef GV_UNIQUE_CHECK
4243 if (exists && GvUNIQUE(gv)) {
4244 Perl_croak(aTHX_ "Can't redefine unique subroutine %s", name);
4248 /* if the subroutine doesn't exist and wasn't pre-declared
4249 * with a prototype, assume it will be AUTOLOADed,
4250 * skipping the prototype check
4252 if (exists || SvPOK(cv))
4253 cv_ckproto(cv, gv, ps);
4254 /* already defined (or promised)? */
4255 if (exists || GvASSUMECV(gv)) {
4256 if (!block && !attrs) {
4257 if (CvFLAGS(PL_compcv)) {
4258 /* might have had built-in attrs applied */
4259 CvFLAGS(cv) |= (CvFLAGS(PL_compcv) & CVf_BUILTIN_ATTRS);
4261 /* just a "sub foo;" when &foo is already defined */
4262 SAVEFREESV(PL_compcv);
4265 /* ahem, death to those who redefine active sort subs */
4266 if (PL_curstackinfo->si_type == PERLSI_SORT && PL_sortcop == CvSTART(cv))
4267 Perl_croak(aTHX_ "Can't redefine active sort subroutine %s", name);
4269 if (ckWARN(WARN_REDEFINE)
4271 && (!const_sv || sv_cmp(cv_const_sv(cv), const_sv))))
4273 line_t oldline = CopLINE(PL_curcop);
4274 if (PL_copline != NOLINE)
4275 CopLINE_set(PL_curcop, PL_copline);
4276 Perl_warner(aTHX_ packWARN(WARN_REDEFINE),
4277 CvCONST(cv) ? "Constant subroutine %s redefined"
4278 : "Subroutine %s redefined", name);
4279 CopLINE_set(PL_curcop, oldline);
4287 SvREFCNT_inc(const_sv);
4289 assert(!CvROOT(cv) && !CvCONST(cv));
4290 sv_setpv((SV*)cv, ""); /* prototype is "" */
4291 CvXSUBANY(cv).any_ptr = const_sv;
4292 CvXSUB(cv) = const_sv_xsub;
4297 cv = newCONSTSUB(NULL, name, const_sv);
4300 SvREFCNT_dec(PL_compcv);
4302 PL_sub_generation++;
4309 /* Need to do a C<use attributes $stash_of_cv,\&cv,@attrs>
4310 * before we clobber PL_compcv.
4314 /* Might have had built-in attributes applied -- propagate them. */
4315 CvFLAGS(cv) |= (CvFLAGS(PL_compcv) & CVf_BUILTIN_ATTRS);
4316 if (CvGV(cv) && GvSTASH(CvGV(cv)))
4317 stash = GvSTASH(CvGV(cv));
4318 else if (CvSTASH(cv))
4319 stash = CvSTASH(cv);
4321 stash = PL_curstash;
4324 /* possibly about to re-define existing subr -- ignore old cv */
4325 rcv = (SV*)PL_compcv;
4326 if (name && GvSTASH(gv))
4327 stash = GvSTASH(gv);
4329 stash = PL_curstash;
4331 apply_attrs(stash, rcv, attrs, FALSE);
4333 if (cv) { /* must reuse cv if autoloaded */
4335 /* got here with just attrs -- work done, so bug out */
4336 SAVEFREESV(PL_compcv);
4339 /* transfer PL_compcv to cv */
4341 CvFLAGS(cv) = CvFLAGS(PL_compcv);
4342 if (!CvWEAKOUTSIDE(cv))
4343 SvREFCNT_dec(CvOUTSIDE(cv));
4344 CvOUTSIDE(cv) = CvOUTSIDE(PL_compcv);
4345 CvOUTSIDE_SEQ(cv) = CvOUTSIDE_SEQ(PL_compcv);
4346 CvOUTSIDE(PL_compcv) = 0;
4347 CvPADLIST(cv) = CvPADLIST(PL_compcv);
4348 CvPADLIST(PL_compcv) = 0;
4349 /* inner references to PL_compcv must be fixed up ... */
4350 pad_fixup_inner_anons(CvPADLIST(cv), PL_compcv, cv);
4351 /* ... before we throw it away */
4352 SvREFCNT_dec(PL_compcv);
4354 if (PERLDB_INTER)/* Advice debugger on the new sub. */
4355 ++PL_sub_generation;
4362 PL_sub_generation++;
4366 CvFILE_set_from_cop(cv, PL_curcop);
4367 CvSTASH(cv) = PL_curstash;
4370 sv_setpv((SV*)cv, ps);
4372 if (PL_error_count) {
4376 char *s = strrchr(name, ':');
4378 if (strEQ(s, "BEGIN")) {
4380 "BEGIN not safe after errors--compilation aborted";
4381 if (PL_in_eval & EVAL_KEEPERR)
4382 Perl_croak(aTHX_ not_safe);
4384 /* force display of errors found but not reported */
4385 sv_catpv(ERRSV, not_safe);
4386 Perl_croak(aTHX_ "%"SVf, ERRSV);
4395 CvROOT(cv) = newUNOP(OP_LEAVESUBLV, 0,
4396 mod(scalarseq(block), OP_LEAVESUBLV));
4399 /* This makes sub {}; work as expected. */
4400 if (block->op_type == OP_STUB) {
4402 block = newSTATEOP(0, Nullch, 0);
4404 CvROOT(cv) = newUNOP(OP_LEAVESUB, 0, scalarseq(block));
4406 CvROOT(cv)->op_private |= OPpREFCOUNTED;
4407 OpREFCNT_set(CvROOT(cv), 1);
4408 CvSTART(cv) = LINKLIST(CvROOT(cv));
4409 CvROOT(cv)->op_next = 0;
4410 CALL_PEEP(CvSTART(cv));
4412 /* now that optimizer has done its work, adjust pad values */
4414 pad_tidy(CvCLONE(cv) ? padtidy_SUBCLONE : padtidy_SUB);
4417 assert(!CvCONST(cv));
4418 if (ps && !*ps && op_const_sv(block, cv))
4422 if (name || aname) {
4424 char *tname = (name ? name : aname);
4426 if (PERLDB_SUBLINE && PL_curstash != PL_debstash) {
4427 SV *sv = NEWSV(0,0);
4428 SV *tmpstr = sv_newmortal();
4429 GV *db_postponed = gv_fetchpv("DB::postponed", GV_ADDMULTI, SVt_PVHV);
4433 Perl_sv_setpvf(aTHX_ sv, "%s:%ld-%ld",
4435 (long)PL_subline, (long)CopLINE(PL_curcop));
4436 gv_efullname3(tmpstr, gv, Nullch);
4437 hv_store(GvHV(PL_DBsub), SvPVX(tmpstr), SvCUR(tmpstr), sv, 0);
4438 hv = GvHVn(db_postponed);
4439 if (HvFILL(hv) > 0 && hv_exists(hv, SvPVX(tmpstr), SvCUR(tmpstr))
4440 && (pcv = GvCV(db_postponed)))
4446 call_sv((SV*)pcv, G_DISCARD);
4450 if ((s = strrchr(tname,':')))
4455 if (*s != 'B' && *s != 'E' && *s != 'C' && *s != 'I')
4458 if (strEQ(s, "BEGIN") && !PL_error_count) {
4459 I32 oldscope = PL_scopestack_ix;
4461 SAVECOPFILE(&PL_compiling);
4462 SAVECOPLINE(&PL_compiling);
4465 PL_beginav = newAV();
4466 DEBUG_x( dump_sub(gv) );
4467 av_push(PL_beginav, (SV*)cv);
4468 GvCV(gv) = 0; /* cv has been hijacked */
4469 call_list(oldscope, PL_beginav);
4471 PL_curcop = &PL_compiling;
4472 PL_compiling.op_private = (U8)(PL_hints & HINT_PRIVATE_MASK);
4475 else if (strEQ(s, "END") && !PL_error_count) {
4478 DEBUG_x( dump_sub(gv) );
4479 av_unshift(PL_endav, 1);
4480 av_store(PL_endav, 0, (SV*)cv);
4481 GvCV(gv) = 0; /* cv has been hijacked */
4483 else if (strEQ(s, "CHECK") && !PL_error_count) {
4485 PL_checkav = newAV();
4486 DEBUG_x( dump_sub(gv) );
4487 if (PL_main_start && ckWARN(WARN_VOID))
4488 Perl_warner(aTHX_ packWARN(WARN_VOID), "Too late to run CHECK block");
4489 av_unshift(PL_checkav, 1);
4490 av_store(PL_checkav, 0, (SV*)cv);
4491 GvCV(gv) = 0; /* cv has been hijacked */
4493 else if (strEQ(s, "INIT") && !PL_error_count) {
4495 PL_initav = newAV();
4496 DEBUG_x( dump_sub(gv) );
4497 if (PL_main_start && ckWARN(WARN_VOID))
4498 Perl_warner(aTHX_ packWARN(WARN_VOID), "Too late to run INIT block");
4499 av_push(PL_initav, (SV*)cv);
4500 GvCV(gv) = 0; /* cv has been hijacked */
4505 PL_copline = NOLINE;
4510 /* XXX unsafe for threads if eval_owner isn't held */
4512 =for apidoc newCONSTSUB
4514 Creates a constant sub equivalent to Perl C<sub FOO () { 123 }> which is
4515 eligible for inlining at compile-time.
4521 Perl_newCONSTSUB(pTHX_ HV *stash, char *name, SV *sv)
4527 SAVECOPLINE(PL_curcop);
4528 CopLINE_set(PL_curcop, PL_copline);
4531 PL_hints &= ~HINT_BLOCK_SCOPE;
4534 SAVESPTR(PL_curstash);
4535 SAVECOPSTASH(PL_curcop);
4536 PL_curstash = stash;
4537 CopSTASH_set(PL_curcop,stash);
4540 cv = newXS(name, const_sv_xsub, savepv(CopFILE(PL_curcop)));
4541 CvXSUBANY(cv).any_ptr = sv;
4543 sv_setpv((SV*)cv, ""); /* prototype is "" */
4546 CopSTASH_free(PL_curcop);
4554 =for apidoc U||newXS
4556 Used by C<xsubpp> to hook up XSUBs as Perl subs.
4562 Perl_newXS(pTHX_ char *name, XSUBADDR_t subaddr, char *filename)
4564 GV *gv = gv_fetchpv(name ? name :
4565 (PL_curstash ? "__ANON__" : "__ANON__::__ANON__"),
4566 GV_ADDMULTI, SVt_PVCV);
4570 Perl_croak(aTHX_ "panic: no address for '%s' in '%s'", name, filename);
4572 if ((cv = (name ? GvCV(gv) : Nullcv))) {
4574 /* just a cached method */
4578 else if (CvROOT(cv) || CvXSUB(cv) || GvASSUMECV(gv)) {
4579 /* already defined (or promised) */
4580 if (ckWARN(WARN_REDEFINE) && !(CvGV(cv) && GvSTASH(CvGV(cv))
4581 && strEQ(HvNAME(GvSTASH(CvGV(cv))), "autouse"))) {
4582 line_t oldline = CopLINE(PL_curcop);
4583 if (PL_copline != NOLINE)
4584 CopLINE_set(PL_curcop, PL_copline);
4585 Perl_warner(aTHX_ packWARN(WARN_REDEFINE),
4586 CvCONST(cv) ? "Constant subroutine %s redefined"
4587 : "Subroutine %s redefined"
4589 CopLINE_set(PL_curcop, oldline);
4596 if (cv) /* must reuse cv if autoloaded */
4599 cv = (CV*)NEWSV(1105,0);
4600 sv_upgrade((SV *)cv, SVt_PVCV);
4604 PL_sub_generation++;
4608 (void)gv_fetchfile(filename);
4609 CvFILE(cv) = filename; /* NOTE: not copied, as it is expected to be
4610 an external constant string */
4611 CvXSUB(cv) = subaddr;
4614 char *s = strrchr(name,':');
4620 if (*s != 'B' && *s != 'E' && *s != 'C' && *s != 'I')
4623 if (strEQ(s, "BEGIN")) {
4625 PL_beginav = newAV();
4626 av_push(PL_beginav, (SV*)cv);
4627 GvCV(gv) = 0; /* cv has been hijacked */
4629 else if (strEQ(s, "END")) {
4632 av_unshift(PL_endav, 1);
4633 av_store(PL_endav, 0, (SV*)cv);
4634 GvCV(gv) = 0; /* cv has been hijacked */
4636 else if (strEQ(s, "CHECK")) {
4638 PL_checkav = newAV();
4639 if (PL_main_start && ckWARN(WARN_VOID))
4640 Perl_warner(aTHX_ packWARN(WARN_VOID), "Too late to run CHECK block");
4641 av_unshift(PL_checkav, 1);
4642 av_store(PL_checkav, 0, (SV*)cv);
4643 GvCV(gv) = 0; /* cv has been hijacked */
4645 else if (strEQ(s, "INIT")) {
4647 PL_initav = newAV();
4648 if (PL_main_start && ckWARN(WARN_VOID))
4649 Perl_warner(aTHX_ packWARN(WARN_VOID), "Too late to run INIT block");
4650 av_push(PL_initav, (SV*)cv);
4651 GvCV(gv) = 0; /* cv has been hijacked */
4662 Perl_newFORM(pTHX_ I32 floor, OP *o, OP *block)
4670 name = SvPVx(cSVOPo->op_sv, n_a);
4673 gv = gv_fetchpv(name,TRUE, SVt_PVFM);
4674 #ifdef GV_UNIQUE_CHECK
4676 Perl_croak(aTHX_ "Bad symbol for form (GV is unique)");
4680 if ((cv = GvFORM(gv))) {
4681 if (ckWARN(WARN_REDEFINE)) {
4682 line_t oldline = CopLINE(PL_curcop);
4683 if (PL_copline != NOLINE)
4684 CopLINE_set(PL_curcop, PL_copline);
4685 Perl_warner(aTHX_ packWARN(WARN_REDEFINE), "Format %s redefined",name);
4686 CopLINE_set(PL_curcop, oldline);
4693 CvFILE_set_from_cop(cv, PL_curcop);
4696 pad_tidy(padtidy_FORMAT);
4697 CvROOT(cv) = newUNOP(OP_LEAVEWRITE, 0, scalarseq(block));
4698 CvROOT(cv)->op_private |= OPpREFCOUNTED;
4699 OpREFCNT_set(CvROOT(cv), 1);
4700 CvSTART(cv) = LINKLIST(CvROOT(cv));
4701 CvROOT(cv)->op_next = 0;
4702 CALL_PEEP(CvSTART(cv));
4704 PL_copline = NOLINE;
4709 Perl_newANONLIST(pTHX_ OP *o)
4711 return newUNOP(OP_REFGEN, 0,
4712 mod(list(convert(OP_ANONLIST, 0, o)), OP_REFGEN));
4716 Perl_newANONHASH(pTHX_ OP *o)
4718 return newUNOP(OP_REFGEN, 0,
4719 mod(list(convert(OP_ANONHASH, 0, o)), OP_REFGEN));
4723 Perl_newANONSUB(pTHX_ I32 floor, OP *proto, OP *block)
4725 return newANONATTRSUB(floor, proto, Nullop, block);
4729 Perl_newANONATTRSUB(pTHX_ I32 floor, OP *proto, OP *attrs, OP *block)
4731 return newUNOP(OP_REFGEN, 0,
4732 newSVOP(OP_ANONCODE, 0,
4733 (SV*)newATTRSUB(floor, 0, proto, attrs, block)));
4737 Perl_oopsAV(pTHX_ OP *o)
4739 switch (o->op_type) {
4741 o->op_type = OP_PADAV;
4742 o->op_ppaddr = PL_ppaddr[OP_PADAV];
4743 return ref(o, OP_RV2AV);
4746 o->op_type = OP_RV2AV;
4747 o->op_ppaddr = PL_ppaddr[OP_RV2AV];
4752 if (ckWARN_d(WARN_INTERNAL))
4753 Perl_warner(aTHX_ packWARN(WARN_INTERNAL), "oops: oopsAV");
4760 Perl_oopsHV(pTHX_ OP *o)
4762 switch (o->op_type) {
4765 o->op_type = OP_PADHV;
4766 o->op_ppaddr = PL_ppaddr[OP_PADHV];
4767 return ref(o, OP_RV2HV);
4771 o->op_type = OP_RV2HV;
4772 o->op_ppaddr = PL_ppaddr[OP_RV2HV];
4777 if (ckWARN_d(WARN_INTERNAL))
4778 Perl_warner(aTHX_ packWARN(WARN_INTERNAL), "oops: oopsHV");
4785 Perl_newAVREF(pTHX_ OP *o)
4787 if (o->op_type == OP_PADANY) {
4788 o->op_type = OP_PADAV;
4789 o->op_ppaddr = PL_ppaddr[OP_PADAV];
4792 else if ((o->op_type == OP_RV2AV || o->op_type == OP_PADAV)
4793 && ckWARN(WARN_DEPRECATED)) {
4794 Perl_warner(aTHX_ packWARN(WARN_DEPRECATED),
4795 "Using an array as a reference is deprecated");
4797 return newUNOP(OP_RV2AV, 0, scalar(o));
4801 Perl_newGVREF(pTHX_ I32 type, OP *o)
4803 if (type == OP_MAPSTART || type == OP_GREPSTART || type == OP_SORT)
4804 return newUNOP(OP_NULL, 0, o);
4805 return ref(newUNOP(OP_RV2GV, OPf_REF, o), type);
4809 Perl_newHVREF(pTHX_ OP *o)
4811 if (o->op_type == OP_PADANY) {
4812 o->op_type = OP_PADHV;
4813 o->op_ppaddr = PL_ppaddr[OP_PADHV];
4816 else if ((o->op_type == OP_RV2HV || o->op_type == OP_PADHV)
4817 && ckWARN(WARN_DEPRECATED)) {
4818 Perl_warner(aTHX_ packWARN(WARN_DEPRECATED),
4819 "Using a hash as a reference is deprecated");
4821 return newUNOP(OP_RV2HV, 0, scalar(o));
4825 Perl_oopsCV(pTHX_ OP *o)
4827 Perl_croak(aTHX_ "NOT IMPL LINE %d",__LINE__);
4833 Perl_newCVREF(pTHX_ I32 flags, OP *o)
4835 return newUNOP(OP_RV2CV, flags, scalar(o));
4839 Perl_newSVREF(pTHX_ OP *o)
4841 if (o->op_type == OP_PADANY) {
4842 o->op_type = OP_PADSV;
4843 o->op_ppaddr = PL_ppaddr[OP_PADSV];
4846 else if (o->op_type == OP_THREADSV && !(o->op_flags & OPpDONE_SVREF)) {
4847 o->op_flags |= OPpDONE_SVREF;
4850 return newUNOP(OP_RV2SV, 0, scalar(o));
4853 /* Check routines. See the comments at the top of this file for details
4854 * on when these are called */
4857 Perl_ck_anoncode(pTHX_ OP *o)
4859 cSVOPo->op_targ = pad_add_anon(cSVOPo->op_sv, o->op_type);
4860 cSVOPo->op_sv = Nullsv;
4865 Perl_ck_bitop(pTHX_ OP *o)
4867 #define OP_IS_NUMCOMPARE(op) \
4868 ((op) == OP_LT || (op) == OP_I_LT || \
4869 (op) == OP_GT || (op) == OP_I_GT || \
4870 (op) == OP_LE || (op) == OP_I_LE || \
4871 (op) == OP_GE || (op) == OP_I_GE || \
4872 (op) == OP_EQ || (op) == OP_I_EQ || \
4873 (op) == OP_NE || (op) == OP_I_NE || \
4874 (op) == OP_NCMP || (op) == OP_I_NCMP)
4875 o->op_private = (U8)(PL_hints & HINT_PRIVATE_MASK);
4876 if (!(o->op_flags & OPf_STACKED) /* Not an assignment */
4877 && (o->op_type == OP_BIT_OR
4878 || o->op_type == OP_BIT_AND
4879 || o->op_type == OP_BIT_XOR))
4881 OP * left = cBINOPo->op_first;
4882 OP * right = left->op_sibling;
4883 if ((OP_IS_NUMCOMPARE(left->op_type) &&
4884 (left->op_flags & OPf_PARENS) == 0) ||
4885 (OP_IS_NUMCOMPARE(right->op_type) &&
4886 (right->op_flags & OPf_PARENS) == 0))
4887 if (ckWARN(WARN_PRECEDENCE))
4888 Perl_warner(aTHX_ packWARN(WARN_PRECEDENCE),
4889 "Possible precedence problem on bitwise %c operator",
4890 o->op_type == OP_BIT_OR ? '|'
4891 : o->op_type == OP_BIT_AND ? '&' : '^'
4898 Perl_ck_concat(pTHX_ OP *o)
4900 OP *kid = cUNOPo->op_first;
4901 if (kid->op_type == OP_CONCAT && !(kid->op_private & OPpTARGET_MY) &&
4902 !(kUNOP->op_first->op_flags & OPf_MOD))
4903 o->op_flags |= OPf_STACKED;
4908 Perl_ck_spair(pTHX_ OP *o)
4910 if (o->op_flags & OPf_KIDS) {
4913 OPCODE type = o->op_type;
4914 o = modkids(ck_fun(o), type);
4915 kid = cUNOPo->op_first;
4916 newop = kUNOP->op_first->op_sibling;
4918 (newop->op_sibling ||
4919 !(PL_opargs[newop->op_type] & OA_RETSCALAR) ||
4920 newop->op_type == OP_PADAV || newop->op_type == OP_PADHV ||
4921 newop->op_type == OP_RV2AV || newop->op_type == OP_RV2HV)) {
4925 op_free(kUNOP->op_first);
4926 kUNOP->op_first = newop;
4928 o->op_ppaddr = PL_ppaddr[++o->op_type];
4933 Perl_ck_delete(pTHX_ OP *o)
4937 if (o->op_flags & OPf_KIDS) {
4938 OP *kid = cUNOPo->op_first;
4939 switch (kid->op_type) {
4941 o->op_flags |= OPf_SPECIAL;
4944 o->op_private |= OPpSLICE;
4947 o->op_flags |= OPf_SPECIAL;
4952 Perl_croak(aTHX_ "%s argument is not a HASH or ARRAY element or slice",
4961 Perl_ck_die(pTHX_ OP *o)
4964 if (VMSISH_HUSHED) o->op_private |= OPpHUSH_VMSISH;
4970 Perl_ck_eof(pTHX_ OP *o)
4972 I32 type = o->op_type;
4974 if (o->op_flags & OPf_KIDS) {
4975 if (cLISTOPo->op_first->op_type == OP_STUB) {
4977 o = newUNOP(type, OPf_SPECIAL, newGVOP(OP_GV, 0, PL_argvgv));
4985 Perl_ck_eval(pTHX_ OP *o)
4987 PL_hints |= HINT_BLOCK_SCOPE;
4988 if (o->op_flags & OPf_KIDS) {
4989 SVOP *kid = (SVOP*)cUNOPo->op_first;
4992 o->op_flags &= ~OPf_KIDS;
4995 else if (kid->op_type == OP_LINESEQ || kid->op_type == OP_STUB) {
4998 cUNOPo->op_first = 0;
5001 NewOp(1101, enter, 1, LOGOP);
5002 enter->op_type = OP_ENTERTRY;
5003 enter->op_ppaddr = PL_ppaddr[OP_ENTERTRY];
5004 enter->op_private = 0;
5006 /* establish postfix order */
5007 enter->op_next = (OP*)enter;
5009 o = prepend_elem(OP_LINESEQ, (OP*)enter, (OP*)kid);
5010 o->op_type = OP_LEAVETRY;
5011 o->op_ppaddr = PL_ppaddr[OP_LEAVETRY];
5012 enter->op_other = o;
5022 o = newUNOP(OP_ENTEREVAL, 0, newDEFSVOP());
5024 o->op_targ = (PADOFFSET)PL_hints;
5029 Perl_ck_exit(pTHX_ OP *o)
5032 HV *table = GvHV(PL_hintgv);
5034 SV **svp = hv_fetch(table, "vmsish_exit", 11, FALSE);
5035 if (svp && *svp && SvTRUE(*svp))
5036 o->op_private |= OPpEXIT_VMSISH;
5038 if (VMSISH_HUSHED) o->op_private |= OPpHUSH_VMSISH;
5044 Perl_ck_exec(pTHX_ OP *o)
5047 if (o->op_flags & OPf_STACKED) {
5049 kid = cUNOPo->op_first->op_sibling;
5050 if (kid->op_type == OP_RV2GV)
5059 Perl_ck_exists(pTHX_ OP *o)
5062 if (o->op_flags & OPf_KIDS) {
5063 OP *kid = cUNOPo->op_first;
5064 if (kid->op_type == OP_ENTERSUB) {
5065 (void) ref(kid, o->op_type);
5066 if (kid->op_type != OP_RV2CV && !PL_error_count)
5067 Perl_croak(aTHX_ "%s argument is not a subroutine name",
5069 o->op_private |= OPpEXISTS_SUB;
5071 else if (kid->op_type == OP_AELEM)
5072 o->op_flags |= OPf_SPECIAL;
5073 else if (kid->op_type != OP_HELEM)
5074 Perl_croak(aTHX_ "%s argument is not a HASH or ARRAY element",
5083 Perl_ck_gvconst(pTHX_ register OP *o)
5085 o = fold_constants(o);
5086 if (o->op_type == OP_CONST)
5093 Perl_ck_rvconst(pTHX_ register OP *o)
5095 SVOP *kid = (SVOP*)cUNOPo->op_first;
5097 o->op_private |= (PL_hints & HINT_STRICT_REFS);
5098 if (kid->op_type == OP_CONST) {
5102 SV *kidsv = kid->op_sv;
5105 /* Is it a constant from cv_const_sv()? */
5106 if (SvROK(kidsv) && SvREADONLY(kidsv)) {
5107 SV *rsv = SvRV(kidsv);
5108 int svtype = SvTYPE(rsv);
5109 char *badtype = Nullch;
5111 switch (o->op_type) {
5113 if (svtype > SVt_PVMG)
5114 badtype = "a SCALAR";
5117 if (svtype != SVt_PVAV)
5118 badtype = "an ARRAY";
5121 if (svtype != SVt_PVHV)
5125 if (svtype != SVt_PVCV)
5130 Perl_croak(aTHX_ "Constant is not %s reference", badtype);
5133 name = SvPV(kidsv, n_a);
5134 if ((PL_hints & HINT_STRICT_REFS) && (kid->op_private & OPpCONST_BARE)) {
5135 char *badthing = Nullch;
5136 switch (o->op_type) {
5138 badthing = "a SCALAR";
5141 badthing = "an ARRAY";
5144 badthing = "a HASH";
5149 "Can't use bareword (\"%s\") as %s ref while \"strict refs\" in use",
5153 * This is a little tricky. We only want to add the symbol if we
5154 * didn't add it in the lexer. Otherwise we get duplicate strict
5155 * warnings. But if we didn't add it in the lexer, we must at
5156 * least pretend like we wanted to add it even if it existed before,
5157 * or we get possible typo warnings. OPpCONST_ENTERED says
5158 * whether the lexer already added THIS instance of this symbol.
5160 iscv = (o->op_type == OP_RV2CV) * 2;
5162 gv = gv_fetchpv(name,
5163 iscv | !(kid->op_private & OPpCONST_ENTERED),
5166 : o->op_type == OP_RV2SV
5168 : o->op_type == OP_RV2AV
5170 : o->op_type == OP_RV2HV
5173 } while (!gv && !(kid->op_private & OPpCONST_ENTERED) && !iscv++);
5175 kid->op_type = OP_GV;
5176 SvREFCNT_dec(kid->op_sv);
5178 /* XXX hack: dependence on sizeof(PADOP) <= sizeof(SVOP) */
5179 kPADOP->op_padix = pad_alloc(OP_GV, SVs_PADTMP);
5180 SvREFCNT_dec(PAD_SVl(kPADOP->op_padix));
5182 PAD_SETSV(kPADOP->op_padix, (SV*) SvREFCNT_inc(gv));
5184 kid->op_sv = SvREFCNT_inc(gv);
5186 kid->op_private = 0;
5187 kid->op_ppaddr = PL_ppaddr[OP_GV];
5194 Perl_ck_ftst(pTHX_ OP *o)
5196 I32 type = o->op_type;
5198 if (o->op_flags & OPf_REF) {
5201 else if (o->op_flags & OPf_KIDS && cUNOPo->op_first->op_type != OP_STUB) {
5202 SVOP *kid = (SVOP*)cUNOPo->op_first;
5204 if (kid->op_type == OP_CONST && (kid->op_private & OPpCONST_BARE)) {
5206 OP *newop = newGVOP(type, OPf_REF,
5207 gv_fetchpv(SvPVx(kid->op_sv, n_a), TRUE, SVt_PVIO));
5213 if ((PL_hints & HINT_FILETEST_ACCESS) &&
5214 OP_IS_FILETEST_ACCESS(o))
5215 o->op_private |= OPpFT_ACCESS;
5217 if (PL_check[kid->op_type] == MEMBER_TO_FPTR(Perl_ck_ftst)
5218 && kid->op_type != OP_STAT && kid->op_type != OP_LSTAT)
5219 o->op_private |= OPpFT_STACKED;
5223 if (type == OP_FTTTY)
5224 o = newGVOP(type, OPf_REF, PL_stdingv);
5226 o = newUNOP(type, 0, newDEFSVOP());
5232 Perl_ck_fun(pTHX_ OP *o)
5238 int type = o->op_type;
5239 register I32 oa = PL_opargs[type] >> OASHIFT;
5241 if (o->op_flags & OPf_STACKED) {
5242 if ((oa & OA_OPTIONAL) && (oa >> 4) && !((oa >> 4) & OA_OPTIONAL))
5245 return no_fh_allowed(o);
5248 if (o->op_flags & OPf_KIDS) {
5250 tokid = &cLISTOPo->op_first;
5251 kid = cLISTOPo->op_first;
5252 if (kid->op_type == OP_PUSHMARK ||
5253 (kid->op_type == OP_NULL && kid->op_targ == OP_PUSHMARK))
5255 tokid = &kid->op_sibling;
5256 kid = kid->op_sibling;
5258 if (!kid && PL_opargs[type] & OA_DEFGV)
5259 *tokid = kid = newDEFSVOP();
5263 sibl = kid->op_sibling;
5266 /* list seen where single (scalar) arg expected? */
5267 if (numargs == 1 && !(oa >> 4)
5268 && kid->op_type == OP_LIST && type != OP_SCALAR)
5270 return too_many_arguments(o,PL_op_desc[type]);
5283 if ((type == OP_PUSH || type == OP_UNSHIFT)
5284 && !kid->op_sibling && ckWARN(WARN_SYNTAX))
5285 Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
5286 "Useless use of %s with no values",
5289 if (kid->op_type == OP_CONST &&
5290 (kid->op_private & OPpCONST_BARE))
5292 char *name = SvPVx(((SVOP*)kid)->op_sv, n_a);
5293 OP *newop = newAVREF(newGVOP(OP_GV, 0,
5294 gv_fetchpv(name, TRUE, SVt_PVAV) ));
5295 if (ckWARN2(WARN_DEPRECATED, WARN_SYNTAX))
5296 Perl_warner(aTHX_ packWARN2(WARN_DEPRECATED, WARN_SYNTAX),
5297 "Array @%s missing the @ in argument %"IVdf" of %s()",
5298 name, (IV)numargs, PL_op_desc[type]);
5301 kid->op_sibling = sibl;
5304 else if (kid->op_type != OP_RV2AV && kid->op_type != OP_PADAV)
5305 bad_type(numargs, "array", PL_op_desc[type], kid);
5309 if (kid->op_type == OP_CONST &&
5310 (kid->op_private & OPpCONST_BARE))
5312 char *name = SvPVx(((SVOP*)kid)->op_sv, n_a);
5313 OP *newop = newHVREF(newGVOP(OP_GV, 0,
5314 gv_fetchpv(name, TRUE, SVt_PVHV) ));
5315 if (ckWARN2(WARN_DEPRECATED, WARN_SYNTAX))
5316 Perl_warner(aTHX_ packWARN2(WARN_DEPRECATED, WARN_SYNTAX),
5317 "Hash %%%s missing the %% in argument %"IVdf" of %s()",
5318 name, (IV)numargs, PL_op_desc[type]);
5321 kid->op_sibling = sibl;
5324 else if (kid->op_type != OP_RV2HV && kid->op_type != OP_PADHV)
5325 bad_type(numargs, "hash", PL_op_desc[type], kid);
5330 OP *newop = newUNOP(OP_NULL, 0, kid);
5331 kid->op_sibling = 0;
5333 newop->op_next = newop;
5335 kid->op_sibling = sibl;
5340 if (kid->op_type != OP_GV && kid->op_type != OP_RV2GV) {
5341 if (kid->op_type == OP_CONST &&
5342 (kid->op_private & OPpCONST_BARE))
5344 OP *newop = newGVOP(OP_GV, 0,
5345 gv_fetchpv(SvPVx(((SVOP*)kid)->op_sv, n_a), TRUE,
5347 if (!(o->op_private & 1) && /* if not unop */
5348 kid == cLISTOPo->op_last)
5349 cLISTOPo->op_last = newop;
5353 else if (kid->op_type == OP_READLINE) {
5354 /* neophyte patrol: open(<FH>), close(<FH>) etc. */
5355 bad_type(numargs, "HANDLE", OP_DESC(o), kid);
5358 I32 flags = OPf_SPECIAL;
5362 /* is this op a FH constructor? */
5363 if (is_handle_constructor(o,numargs)) {
5364 char *name = Nullch;
5368 /* Set a flag to tell rv2gv to vivify
5369 * need to "prove" flag does not mean something
5370 * else already - NI-S 1999/05/07
5373 if (kid->op_type == OP_PADSV) {
5374 name = PAD_COMPNAME_PV(kid->op_targ);
5375 /* SvCUR of a pad namesv can't be trusted
5376 * (see PL_generation), so calc its length
5382 else if (kid->op_type == OP_RV2SV
5383 && kUNOP->op_first->op_type == OP_GV)
5385 GV *gv = cGVOPx_gv(kUNOP->op_first);
5387 len = GvNAMELEN(gv);
5389 else if (kid->op_type == OP_AELEM
5390 || kid->op_type == OP_HELEM)
5395 if ((op = ((BINOP*)kid)->op_first)) {
5396 SV *tmpstr = Nullsv;
5398 kid->op_type == OP_AELEM ?
5400 if (((op->op_type == OP_RV2AV) ||
5401 (op->op_type == OP_RV2HV)) &&
5402 (op = ((UNOP*)op)->op_first) &&
5403 (op->op_type == OP_GV)) {
5404 /* packagevar $a[] or $h{} */
5405 GV *gv = cGVOPx_gv(op);
5413 else if (op->op_type == OP_PADAV
5414 || op->op_type == OP_PADHV) {
5415 /* lexicalvar $a[] or $h{} */
5417 PAD_COMPNAME_PV(op->op_targ);
5427 name = SvPV(tmpstr, len);
5432 name = "__ANONIO__";
5439 targ = pad_alloc(OP_RV2GV, SVs_PADTMP);
5440 namesv = PAD_SVl(targ);
5441 (void)SvUPGRADE(namesv, SVt_PV);
5443 sv_setpvn(namesv, "$", 1);
5444 sv_catpvn(namesv, name, len);
5447 kid->op_sibling = 0;
5448 kid = newUNOP(OP_RV2GV, flags, scalar(kid));
5449 kid->op_targ = targ;
5450 kid->op_private |= priv;
5452 kid->op_sibling = sibl;
5458 mod(scalar(kid), type);
5462 tokid = &kid->op_sibling;
5463 kid = kid->op_sibling;
5465 o->op_private |= numargs;
5467 return too_many_arguments(o,OP_DESC(o));
5470 else if (PL_opargs[type] & OA_DEFGV) {
5472 return newUNOP(type, 0, newDEFSVOP());
5476 while (oa & OA_OPTIONAL)
5478 if (oa && oa != OA_LIST)
5479 return too_few_arguments(o,OP_DESC(o));
5485 Perl_ck_glob(pTHX_ OP *o)
5490 if ((o->op_flags & OPf_KIDS) && !cLISTOPo->op_first->op_sibling)
5491 append_elem(OP_GLOB, o, newDEFSVOP());
5493 if (!((gv = gv_fetchpv("glob", FALSE, SVt_PVCV))
5494 && GvCVu(gv) && GvIMPORTED_CV(gv)))
5496 gv = gv_fetchpv("CORE::GLOBAL::glob", FALSE, SVt_PVCV);
5499 #if !defined(PERL_EXTERNAL_GLOB)
5500 /* XXX this can be tightened up and made more failsafe. */
5501 if (!(gv && GvCVu(gv) && GvIMPORTED_CV(gv))) {
5504 Perl_load_module(aTHX_ PERL_LOADMOD_NOIMPORT,
5505 newSVpvn("File::Glob", 10), Nullsv, Nullsv, Nullsv);
5506 gv = gv_fetchpv("CORE::GLOBAL::glob", FALSE, SVt_PVCV);
5507 glob_gv = gv_fetchpv("File::Glob::csh_glob", FALSE, SVt_PVCV);
5508 GvCV(gv) = GvCV(glob_gv);
5509 SvREFCNT_inc((SV*)GvCV(gv));
5510 GvIMPORTED_CV_on(gv);
5513 #endif /* PERL_EXTERNAL_GLOB */
5515 if (gv && GvCVu(gv) && GvIMPORTED_CV(gv)) {
5516 append_elem(OP_GLOB, o,
5517 newSVOP(OP_CONST, 0, newSViv(PL_glob_index++)));
5518 o->op_type = OP_LIST;
5519 o->op_ppaddr = PL_ppaddr[OP_LIST];
5520 cLISTOPo->op_first->op_type = OP_PUSHMARK;
5521 cLISTOPo->op_first->op_ppaddr = PL_ppaddr[OP_PUSHMARK];
5522 cLISTOPo->op_first->op_targ = 0;
5523 o = newUNOP(OP_ENTERSUB, OPf_STACKED,
5524 append_elem(OP_LIST, o,
5525 scalar(newUNOP(OP_RV2CV, 0,
5526 newGVOP(OP_GV, 0, gv)))));
5527 o = newUNOP(OP_NULL, 0, ck_subr(o));
5528 o->op_targ = OP_GLOB; /* hint at what it used to be */
5531 gv = newGVgen("main");
5533 append_elem(OP_GLOB, o, newGVOP(OP_GV, 0, gv));
5539 Perl_ck_grep(pTHX_ OP *o)
5543 OPCODE type = o->op_type == OP_GREPSTART ? OP_GREPWHILE : OP_MAPWHILE;
5546 o->op_ppaddr = PL_ppaddr[OP_GREPSTART];
5547 NewOp(1101, gwop, 1, LOGOP);
5549 if (o->op_flags & OPf_STACKED) {
5552 kid = cLISTOPo->op_first->op_sibling;
5553 for (k = cUNOPx(kid)->op_first; k; k = k->op_next) {
5556 kid->op_next = (OP*)gwop;
5557 o->op_flags &= ~OPf_STACKED;
5559 kid = cLISTOPo->op_first->op_sibling;
5560 if (type == OP_MAPWHILE)
5567 kid = cLISTOPo->op_first->op_sibling;
5568 if (kid->op_type != OP_NULL)
5569 Perl_croak(aTHX_ "panic: ck_grep");
5570 kid = kUNOP->op_first;
5572 gwop->op_type = type;
5573 gwop->op_ppaddr = PL_ppaddr[type];
5574 gwop->op_first = listkids(o);
5575 gwop->op_flags |= OPf_KIDS;
5576 gwop->op_other = LINKLIST(kid);
5577 kid->op_next = (OP*)gwop;
5578 offset = pad_findmy("$_");
5579 if (offset == NOT_IN_PAD || PAD_COMPNAME_FLAGS(offset) & SVpad_OUR) {
5580 o->op_private = gwop->op_private = 0;
5581 gwop->op_targ = pad_alloc(type, SVs_PADTMP);
5584 o->op_private = gwop->op_private = OPpGREP_LEX;
5585 gwop->op_targ = o->op_targ = offset;
5588 kid = cLISTOPo->op_first->op_sibling;
5589 if (!kid || !kid->op_sibling)
5590 return too_few_arguments(o,OP_DESC(o));
5591 for (kid = kid->op_sibling; kid; kid = kid->op_sibling)
5592 mod(kid, OP_GREPSTART);
5598 Perl_ck_index(pTHX_ OP *o)
5600 if (o->op_flags & OPf_KIDS) {
5601 OP *kid = cLISTOPo->op_first->op_sibling; /* get past pushmark */
5603 kid = kid->op_sibling; /* get past "big" */
5604 if (kid && kid->op_type == OP_CONST)
5605 fbm_compile(((SVOP*)kid)->op_sv, 0);
5611 Perl_ck_lengthconst(pTHX_ OP *o)
5613 /* XXX length optimization goes here */
5618 Perl_ck_lfun(pTHX_ OP *o)
5620 OPCODE type = o->op_type;
5621 return modkids(ck_fun(o), type);
5625 Perl_ck_defined(pTHX_ OP *o) /* 19990527 MJD */
5627 if ((o->op_flags & OPf_KIDS) && ckWARN2(WARN_DEPRECATED, WARN_SYNTAX)) {
5628 switch (cUNOPo->op_first->op_type) {
5630 /* This is needed for
5631 if (defined %stash::)
5632 to work. Do not break Tk.
5634 break; /* Globals via GV can be undef */
5636 case OP_AASSIGN: /* Is this a good idea? */
5637 Perl_warner(aTHX_ packWARN2(WARN_DEPRECATED, WARN_SYNTAX),
5638 "defined(@array) is deprecated");
5639 Perl_warner(aTHX_ packWARN2(WARN_DEPRECATED, WARN_SYNTAX),
5640 "\t(Maybe you should just omit the defined()?)\n");
5643 /* This is needed for
5644 if (defined %stash::)
5645 to work. Do not break Tk.
5647 break; /* Globals via GV can be undef */
5649 Perl_warner(aTHX_ packWARN2(WARN_DEPRECATED, WARN_SYNTAX),
5650 "defined(%%hash) is deprecated");
5651 Perl_warner(aTHX_ packWARN2(WARN_DEPRECATED, WARN_SYNTAX),
5652 "\t(Maybe you should just omit the defined()?)\n");
5663 Perl_ck_rfun(pTHX_ OP *o)
5665 OPCODE type = o->op_type;
5666 return refkids(ck_fun(o), type);
5670 Perl_ck_listiob(pTHX_ OP *o)
5674 kid = cLISTOPo->op_first;
5677 kid = cLISTOPo->op_first;
5679 if (kid->op_type == OP_PUSHMARK)
5680 kid = kid->op_sibling;
5681 if (kid && o->op_flags & OPf_STACKED)
5682 kid = kid->op_sibling;
5683 else if (kid && !kid->op_sibling) { /* print HANDLE; */
5684 if (kid->op_type == OP_CONST && kid->op_private & OPpCONST_BARE) {
5685 o->op_flags |= OPf_STACKED; /* make it a filehandle */
5686 kid = newUNOP(OP_RV2GV, OPf_REF, scalar(kid));
5687 cLISTOPo->op_first->op_sibling = kid;
5688 cLISTOPo->op_last = kid;
5689 kid = kid->op_sibling;
5694 append_elem(o->op_type, o, newDEFSVOP());
5700 Perl_ck_sassign(pTHX_ OP *o)
5702 OP *kid = cLISTOPo->op_first;
5703 /* has a disposable target? */
5704 if ((PL_opargs[kid->op_type] & OA_TARGLEX)
5705 && !(kid->op_flags & OPf_STACKED)
5706 /* Cannot steal the second time! */
5707 && !(kid->op_private & OPpTARGET_MY))
5709 OP *kkid = kid->op_sibling;
5711 /* Can just relocate the target. */
5712 if (kkid && kkid->op_type == OP_PADSV
5713 && !(kkid->op_private & OPpLVAL_INTRO))
5715 kid->op_targ = kkid->op_targ;
5717 /* Now we do not need PADSV and SASSIGN. */
5718 kid->op_sibling = o->op_sibling; /* NULL */
5719 cLISTOPo->op_first = NULL;
5722 kid->op_private |= OPpTARGET_MY; /* Used for context settings */
5726 /* optimise C<my $x = undef> to C<my $x> */
5727 if (kid->op_type == OP_UNDEF) {
5728 OP *kkid = kid->op_sibling;
5729 if (kkid && kkid->op_type == OP_PADSV
5730 && (kkid->op_private & OPpLVAL_INTRO))
5732 cLISTOPo->op_first = NULL;
5733 kid->op_sibling = NULL;
5743 Perl_ck_match(pTHX_ OP *o)
5745 if (o->op_type != OP_QR) {
5746 I32 offset = pad_findmy("$_");
5747 if (offset != NOT_IN_PAD && !(PAD_COMPNAME_FLAGS(offset) & SVpad_OUR)) {
5748 o->op_targ = offset;
5749 o->op_private |= OPpTARGET_MY;
5752 if (o->op_type == OP_MATCH || o->op_type == OP_QR)
5753 o->op_private |= OPpRUNTIME;
5758 Perl_ck_method(pTHX_ OP *o)
5760 OP *kid = cUNOPo->op_first;
5761 if (kid->op_type == OP_CONST) {
5762 SV* sv = kSVOP->op_sv;
5763 if (!(strchr(SvPVX(sv), ':') || strchr(SvPVX(sv), '\''))) {
5765 if (!SvREADONLY(sv) || !SvFAKE(sv)) {
5766 sv = newSVpvn_share(SvPVX(sv), SvCUR(sv), 0);
5769 kSVOP->op_sv = Nullsv;
5771 cmop = newSVOP(OP_METHOD_NAMED, 0, sv);
5780 Perl_ck_null(pTHX_ OP *o)
5786 Perl_ck_open(pTHX_ OP *o)
5788 HV *table = GvHV(PL_hintgv);
5792 svp = hv_fetch(table, "open_IN", 7, FALSE);
5794 mode = mode_from_discipline(*svp);
5795 if (mode & O_BINARY)
5796 o->op_private |= OPpOPEN_IN_RAW;
5797 else if (mode & O_TEXT)
5798 o->op_private |= OPpOPEN_IN_CRLF;
5801 svp = hv_fetch(table, "open_OUT", 8, FALSE);
5803 mode = mode_from_discipline(*svp);
5804 if (mode & O_BINARY)
5805 o->op_private |= OPpOPEN_OUT_RAW;
5806 else if (mode & O_TEXT)
5807 o->op_private |= OPpOPEN_OUT_CRLF;
5810 if (o->op_type == OP_BACKTICK)
5813 /* In case of three-arg dup open remove strictness
5814 * from the last arg if it is a bareword. */
5815 OP *first = cLISTOPx(o)->op_first; /* The pushmark. */
5816 OP *last = cLISTOPx(o)->op_last; /* The bareword. */
5820 if ((last->op_type == OP_CONST) && /* The bareword. */
5821 (last->op_private & OPpCONST_BARE) &&
5822 (last->op_private & OPpCONST_STRICT) &&
5823 (oa = first->op_sibling) && /* The fh. */
5824 (oa = oa->op_sibling) && /* The mode. */
5825 SvPOK(((SVOP*)oa)->op_sv) &&
5826 (mode = SvPVX(((SVOP*)oa)->op_sv)) &&
5827 mode[0] == '>' && mode[1] == '&' && /* A dup open. */
5828 (last == oa->op_sibling)) /* The bareword. */
5829 last->op_private &= ~OPpCONST_STRICT;
5835 Perl_ck_repeat(pTHX_ OP *o)
5837 if (cBINOPo->op_first->op_flags & OPf_PARENS) {
5838 o->op_private |= OPpREPEAT_DOLIST;
5839 cBINOPo->op_first = force_list(cBINOPo->op_first);
5847 Perl_ck_require(pTHX_ OP *o)
5851 if (o->op_flags & OPf_KIDS) { /* Shall we supply missing .pm? */
5852 SVOP *kid = (SVOP*)cUNOPo->op_first;
5854 if (kid->op_type == OP_CONST && (kid->op_private & OPpCONST_BARE)) {
5856 for (s = SvPVX(kid->op_sv); *s; s++) {
5857 if (*s == ':' && s[1] == ':') {
5859 Move(s+2, s+1, strlen(s+2)+1, char);
5860 --SvCUR(kid->op_sv);
5863 if (SvREADONLY(kid->op_sv)) {
5864 SvREADONLY_off(kid->op_sv);
5865 sv_catpvn(kid->op_sv, ".pm", 3);
5866 SvREADONLY_on(kid->op_sv);
5869 sv_catpvn(kid->op_sv, ".pm", 3);
5873 /* handle override, if any */
5874 gv = gv_fetchpv("require", FALSE, SVt_PVCV);
5875 if (!(gv && GvCVu(gv) && GvIMPORTED_CV(gv)))
5876 gv = gv_fetchpv("CORE::GLOBAL::require", FALSE, SVt_PVCV);
5878 if (gv && GvCVu(gv) && GvIMPORTED_CV(gv)) {
5879 OP *kid = cUNOPo->op_first;
5880 cUNOPo->op_first = 0;
5882 return ck_subr(newUNOP(OP_ENTERSUB, OPf_STACKED,
5883 append_elem(OP_LIST, kid,
5884 scalar(newUNOP(OP_RV2CV, 0,
5893 Perl_ck_return(pTHX_ OP *o)
5896 if (CvLVALUE(PL_compcv)) {
5897 for (kid = cLISTOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
5898 mod(kid, OP_LEAVESUBLV);
5905 Perl_ck_retarget(pTHX_ OP *o)
5907 Perl_croak(aTHX_ "NOT IMPL LINE %d",__LINE__);
5914 Perl_ck_select(pTHX_ OP *o)
5917 if (o->op_flags & OPf_KIDS) {
5918 kid = cLISTOPo->op_first->op_sibling; /* get past pushmark */
5919 if (kid && kid->op_sibling) {
5920 o->op_type = OP_SSELECT;
5921 o->op_ppaddr = PL_ppaddr[OP_SSELECT];
5923 return fold_constants(o);
5927 kid = cLISTOPo->op_first->op_sibling; /* get past pushmark */
5928 if (kid && kid->op_type == OP_RV2GV)
5929 kid->op_private &= ~HINT_STRICT_REFS;
5934 Perl_ck_shift(pTHX_ OP *o)
5936 I32 type = o->op_type;
5938 if (!(o->op_flags & OPf_KIDS)) {
5942 argop = newUNOP(OP_RV2AV, 0,
5943 scalar(newGVOP(OP_GV, 0, CvUNIQUE(PL_compcv) ? PL_argvgv : PL_defgv)));
5944 return newUNOP(type, 0, scalar(argop));
5946 return scalar(modkids(ck_fun(o), type));
5950 Perl_ck_sort(pTHX_ OP *o)
5954 if (o->op_type == OP_SORT && o->op_flags & OPf_STACKED)
5956 firstkid = cLISTOPo->op_first->op_sibling; /* get past pushmark */
5957 if (o->op_flags & OPf_STACKED) { /* may have been cleared */
5959 OP *kid = cUNOPx(firstkid)->op_first; /* get past null */
5961 if (kid->op_type == OP_SCOPE || kid->op_type == OP_LEAVE) {
5963 if (kid->op_type == OP_SCOPE) {
5967 else if (kid->op_type == OP_LEAVE) {
5968 if (o->op_type == OP_SORT) {
5969 op_null(kid); /* wipe out leave */
5972 for (k = kLISTOP->op_first->op_next; k; k = k->op_next) {
5973 if (k->op_next == kid)
5975 /* don't descend into loops */
5976 else if (k->op_type == OP_ENTERLOOP
5977 || k->op_type == OP_ENTERITER)
5979 k = cLOOPx(k)->op_lastop;
5984 kid->op_next = 0; /* just disconnect the leave */
5985 k = kLISTOP->op_first;
5990 if (o->op_type == OP_SORT) {
5991 /* provide scalar context for comparison function/block */
5997 o->op_flags |= OPf_SPECIAL;
5999 else if (kid->op_type == OP_RV2SV || kid->op_type == OP_PADSV)
6002 firstkid = firstkid->op_sibling;
6005 /* provide list context for arguments */
6006 if (o->op_type == OP_SORT)
6013 S_simplify_sort(pTHX_ OP *o)
6015 register OP *kid = cLISTOPo->op_first->op_sibling; /* get past pushmark */
6019 if (!(o->op_flags & OPf_STACKED))
6021 GvMULTI_on(gv_fetchpv("a", TRUE, SVt_PV));
6022 GvMULTI_on(gv_fetchpv("b", TRUE, SVt_PV));
6023 kid = kUNOP->op_first; /* get past null */
6024 if (kid->op_type != OP_SCOPE)
6026 kid = kLISTOP->op_last; /* get past scope */
6027 switch(kid->op_type) {
6035 k = kid; /* remember this node*/
6036 if (kBINOP->op_first->op_type != OP_RV2SV)
6038 kid = kBINOP->op_first; /* get past cmp */
6039 if (kUNOP->op_first->op_type != OP_GV)
6041 kid = kUNOP->op_first; /* get past rv2sv */
6043 if (GvSTASH(gv) != PL_curstash)
6045 if (strEQ(GvNAME(gv), "a"))
6047 else if (strEQ(GvNAME(gv), "b"))
6052 kid = k; /* back to cmp */
6053 if (kBINOP->op_last->op_type != OP_RV2SV)
6055 kid = kBINOP->op_last; /* down to 2nd arg */
6056 if (kUNOP->op_first->op_type != OP_GV)
6058 kid = kUNOP->op_first; /* get past rv2sv */
6060 if (GvSTASH(gv) != PL_curstash
6062 ? strNE(GvNAME(gv), "a")
6063 : strNE(GvNAME(gv), "b")))
6065 o->op_flags &= ~(OPf_STACKED | OPf_SPECIAL);
6067 o->op_private |= OPpSORT_DESCEND;
6068 if (k->op_type == OP_NCMP)
6069 o->op_private |= OPpSORT_NUMERIC;
6070 if (k->op_type == OP_I_NCMP)
6071 o->op_private |= OPpSORT_NUMERIC | OPpSORT_INTEGER;
6072 kid = cLISTOPo->op_first->op_sibling;
6073 cLISTOPo->op_first->op_sibling = kid->op_sibling; /* bypass old block */
6074 op_free(kid); /* then delete it */
6078 Perl_ck_split(pTHX_ OP *o)
6082 if (o->op_flags & OPf_STACKED)
6083 return no_fh_allowed(o);
6085 kid = cLISTOPo->op_first;
6086 if (kid->op_type != OP_NULL)
6087 Perl_croak(aTHX_ "panic: ck_split");
6088 kid = kid->op_sibling;
6089 op_free(cLISTOPo->op_first);
6090 cLISTOPo->op_first = kid;
6092 cLISTOPo->op_first = kid = newSVOP(OP_CONST, 0, newSVpvn(" ", 1));
6093 cLISTOPo->op_last = kid; /* There was only one element previously */
6096 if (kid->op_type != OP_MATCH || kid->op_flags & OPf_STACKED) {
6097 OP *sibl = kid->op_sibling;
6098 kid->op_sibling = 0;
6099 kid = pmruntime( newPMOP(OP_MATCH, OPf_SPECIAL), kid, 0);
6100 if (cLISTOPo->op_first == cLISTOPo->op_last)
6101 cLISTOPo->op_last = kid;
6102 cLISTOPo->op_first = kid;
6103 kid->op_sibling = sibl;
6106 kid->op_type = OP_PUSHRE;
6107 kid->op_ppaddr = PL_ppaddr[OP_PUSHRE];
6109 if (ckWARN(WARN_REGEXP) && ((PMOP *)kid)->op_pmflags & PMf_GLOBAL) {
6110 Perl_warner(aTHX_ packWARN(WARN_REGEXP),
6111 "Use of /g modifier is meaningless in split");
6114 if (!kid->op_sibling)
6115 append_elem(OP_SPLIT, o, newDEFSVOP());
6117 kid = kid->op_sibling;
6120 if (!kid->op_sibling)
6121 append_elem(OP_SPLIT, o, newSVOP(OP_CONST, 0, newSViv(0)));
6123 kid = kid->op_sibling;
6126 if (kid->op_sibling)
6127 return too_many_arguments(o,OP_DESC(o));
6133 Perl_ck_join(pTHX_ OP *o)
6135 if (ckWARN(WARN_SYNTAX)) {
6136 OP *kid = cLISTOPo->op_first->op_sibling;
6137 if (kid && kid->op_type == OP_MATCH) {
6138 char *pmstr = "STRING";
6139 if (PM_GETRE(kPMOP))
6140 pmstr = PM_GETRE(kPMOP)->precomp;
6141 Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
6142 "/%s/ should probably be written as \"%s\"",
6150 Perl_ck_subr(pTHX_ OP *o)
6152 OP *prev = ((cUNOPo->op_first->op_sibling)
6153 ? cUNOPo : ((UNOP*)cUNOPo->op_first))->op_first;
6154 OP *o2 = prev->op_sibling;
6161 I32 contextclass = 0;
6166 o->op_private |= OPpENTERSUB_HASTARG;
6167 for (cvop = o2; cvop->op_sibling; cvop = cvop->op_sibling) ;
6168 if (cvop->op_type == OP_RV2CV) {
6170 o->op_private |= (cvop->op_private & OPpENTERSUB_AMPER);
6171 op_null(cvop); /* disable rv2cv */
6172 tmpop = (SVOP*)((UNOP*)cvop)->op_first;
6173 if (tmpop->op_type == OP_GV && !(o->op_private & OPpENTERSUB_AMPER)) {
6174 GV *gv = cGVOPx_gv(tmpop);
6177 tmpop->op_private |= OPpEARLY_CV;
6180 namegv = CvANON(cv) ? gv : CvGV(cv);
6181 proto = SvPV((SV*)cv, n_a);
6183 if (CvASSERTION(cv)) {
6184 if (PL_hints & HINT_ASSERTING) {
6185 if (PERLDB_ASSERTION && PL_curstash != PL_debstash)
6186 o->op_private |= OPpENTERSUB_DB;
6190 if (ckWARN(WARN_ASSERTIONS) && !(PL_hints & HINT_ASSERTIONSSEEN)) {
6191 Perl_warner(aTHX_ packWARN(WARN_ASSERTIONS),
6192 "Impossible to activate assertion call");
6199 else if (cvop->op_type == OP_METHOD || cvop->op_type == OP_METHOD_NAMED) {
6200 if (o2->op_type == OP_CONST)
6201 o2->op_private &= ~OPpCONST_STRICT;
6202 else if (o2->op_type == OP_LIST) {
6203 OP *o = ((UNOP*)o2)->op_first->op_sibling;
6204 if (o && o->op_type == OP_CONST)
6205 o->op_private &= ~OPpCONST_STRICT;
6208 o->op_private |= (PL_hints & HINT_STRICT_REFS);
6209 if (PERLDB_SUB && PL_curstash != PL_debstash)
6210 o->op_private |= OPpENTERSUB_DB;
6211 while (o2 != cvop) {
6215 return too_many_arguments(o, gv_ename(namegv));
6233 if (o2->op_type != OP_REFGEN && o2->op_type != OP_UNDEF)
6235 arg == 1 ? "block or sub {}" : "sub {}",
6236 gv_ename(namegv), o2);
6239 /* '*' allows any scalar type, including bareword */
6242 if (o2->op_type == OP_RV2GV)
6243 goto wrapref; /* autoconvert GLOB -> GLOBref */
6244 else if (o2->op_type == OP_CONST)
6245 o2->op_private &= ~OPpCONST_STRICT;
6246 else if (o2->op_type == OP_ENTERSUB) {
6247 /* accidental subroutine, revert to bareword */
6248 OP *gvop = ((UNOP*)o2)->op_first;
6249 if (gvop && gvop->op_type == OP_NULL) {
6250 gvop = ((UNOP*)gvop)->op_first;
6252 for (; gvop->op_sibling; gvop = gvop->op_sibling)
6255 (gvop->op_private & OPpENTERSUB_NOPAREN) &&
6256 (gvop = ((UNOP*)gvop)->op_first) &&
6257 gvop->op_type == OP_GV)
6259 GV *gv = cGVOPx_gv(gvop);
6260 OP *sibling = o2->op_sibling;
6261 SV *n = newSVpvn("",0);
6263 gv_fullname3(n, gv, "");
6264 if (SvCUR(n)>6 && strnEQ(SvPVX(n),"main::",6))
6265 sv_chop(n, SvPVX(n)+6);
6266 o2 = newSVOP(OP_CONST, 0, n);
6267 prev->op_sibling = o2;
6268 o2->op_sibling = sibling;
6284 if (contextclass++ == 0) {
6285 e = strchr(proto, ']');
6286 if (!e || e == proto)
6299 while (*--p != '[');
6300 bad_type(arg, Perl_form(aTHX_ "one of %s", p),
6301 gv_ename(namegv), o2);
6307 if (o2->op_type == OP_RV2GV)
6310 bad_type(arg, "symbol", gv_ename(namegv), o2);
6313 if (o2->op_type == OP_ENTERSUB)
6316 bad_type(arg, "subroutine entry", gv_ename(namegv), o2);
6319 if (o2->op_type == OP_RV2SV ||
6320 o2->op_type == OP_PADSV ||
6321 o2->op_type == OP_HELEM ||
6322 o2->op_type == OP_AELEM ||
6323 o2->op_type == OP_THREADSV)
6326 bad_type(arg, "scalar", gv_ename(namegv), o2);
6329 if (o2->op_type == OP_RV2AV ||
6330 o2->op_type == OP_PADAV)
6333 bad_type(arg, "array", gv_ename(namegv), o2);
6336 if (o2->op_type == OP_RV2HV ||
6337 o2->op_type == OP_PADHV)
6340 bad_type(arg, "hash", gv_ename(namegv), o2);
6345 OP* sib = kid->op_sibling;
6346 kid->op_sibling = 0;
6347 o2 = newUNOP(OP_REFGEN, 0, kid);
6348 o2->op_sibling = sib;
6349 prev->op_sibling = o2;
6351 if (contextclass && e) {
6366 Perl_croak(aTHX_ "Malformed prototype for %s: %"SVf,
6367 gv_ename(namegv), cv);
6372 mod(o2, OP_ENTERSUB);
6374 o2 = o2->op_sibling;
6376 if (proto && !optional &&
6377 (*proto && *proto != '@' && *proto != '%' && *proto != ';'))
6378 return too_few_arguments(o, gv_ename(namegv));
6381 o=newSVOP(OP_CONST, 0, newSViv(0));
6387 Perl_ck_svconst(pTHX_ OP *o)
6389 SvREADONLY_on(cSVOPo->op_sv);
6394 Perl_ck_trunc(pTHX_ OP *o)
6396 if (o->op_flags & OPf_KIDS) {
6397 SVOP *kid = (SVOP*)cUNOPo->op_first;
6399 if (kid->op_type == OP_NULL)
6400 kid = (SVOP*)kid->op_sibling;
6401 if (kid && kid->op_type == OP_CONST &&
6402 (kid->op_private & OPpCONST_BARE))
6404 o->op_flags |= OPf_SPECIAL;
6405 kid->op_private &= ~OPpCONST_STRICT;
6412 Perl_ck_unpack(pTHX_ OP *o)
6414 OP *kid = cLISTOPo->op_first;
6415 if (kid->op_sibling) {
6416 kid = kid->op_sibling;
6417 if (!kid->op_sibling)
6418 kid->op_sibling = newDEFSVOP();
6424 Perl_ck_substr(pTHX_ OP *o)
6427 if ((o->op_flags & OPf_KIDS) && o->op_private == 4) {
6428 OP *kid = cLISTOPo->op_first;
6430 if (kid->op_type == OP_NULL)
6431 kid = kid->op_sibling;
6433 kid->op_flags |= OPf_MOD;
6439 /* A peephole optimizer. We visit the ops in the order they're to execute.
6440 * See the comments at the top of this file for more details about when
6441 * peep() is called */
6444 Perl_peep(pTHX_ register OP *o)
6446 register OP* oldop = 0;
6448 if (!o || o->op_opt)
6452 SAVEVPTR(PL_curcop);
6453 for (; o; o = o->op_next) {
6457 switch (o->op_type) {
6461 PL_curcop = ((COP*)o); /* for warnings */
6466 if (cSVOPo->op_private & OPpCONST_STRICT)
6467 no_bareword_allowed(o);
6469 case OP_METHOD_NAMED:
6470 /* Relocate sv to the pad for thread safety.
6471 * Despite being a "constant", the SV is written to,
6472 * for reference counts, sv_upgrade() etc. */
6474 PADOFFSET ix = pad_alloc(OP_CONST, SVs_PADTMP);
6475 if (o->op_type == OP_CONST && SvPADTMP(cSVOPo->op_sv)) {
6476 /* If op_sv is already a PADTMP then it is being used by
6477 * some pad, so make a copy. */
6478 sv_setsv(PAD_SVl(ix),cSVOPo->op_sv);
6479 SvREADONLY_on(PAD_SVl(ix));
6480 SvREFCNT_dec(cSVOPo->op_sv);
6483 SvREFCNT_dec(PAD_SVl(ix));
6484 SvPADTMP_on(cSVOPo->op_sv);
6485 PAD_SETSV(ix, cSVOPo->op_sv);
6486 /* XXX I don't know how this isn't readonly already. */
6487 SvREADONLY_on(PAD_SVl(ix));
6489 cSVOPo->op_sv = Nullsv;
6497 if (o->op_next && o->op_next->op_type == OP_STRINGIFY) {
6498 if (o->op_next->op_private & OPpTARGET_MY) {
6499 if (o->op_flags & OPf_STACKED) /* chained concats */
6500 goto ignore_optimization;
6502 /* assert(PL_opargs[o->op_type] & OA_TARGLEX); */
6503 o->op_targ = o->op_next->op_targ;
6504 o->op_next->op_targ = 0;
6505 o->op_private |= OPpTARGET_MY;
6508 op_null(o->op_next);
6510 ignore_optimization:
6514 if ((o->op_flags & OPf_WANT) != OPf_WANT_LIST) {
6516 break; /* Scalar stub must produce undef. List stub is noop */
6520 if (o->op_targ == OP_NEXTSTATE
6521 || o->op_targ == OP_DBSTATE
6522 || o->op_targ == OP_SETSTATE)
6524 PL_curcop = ((COP*)o);
6526 /* XXX: We avoid setting op_seq here to prevent later calls
6527 to peep() from mistakenly concluding that optimisation
6528 has already occurred. This doesn't fix the real problem,
6529 though (See 20010220.007). AMS 20010719 */
6530 /* op_seq functionality is now replaced by op_opt */
6531 if (oldop && o->op_next) {
6532 oldop->op_next = o->op_next;
6540 if (oldop && o->op_next) {
6541 oldop->op_next = o->op_next;
6549 if (o->op_type == OP_PADAV || o->op_next->op_type == OP_RV2AV) {
6550 OP* pop = (o->op_type == OP_PADAV) ?
6551 o->op_next : o->op_next->op_next;
6553 if (pop && pop->op_type == OP_CONST &&
6554 ((PL_op = pop->op_next)) &&
6555 pop->op_next->op_type == OP_AELEM &&
6556 !(pop->op_next->op_private &
6557 (OPpLVAL_INTRO|OPpLVAL_DEFER|OPpDEREF|OPpMAYBE_LVSUB)) &&
6558 (i = SvIV(((SVOP*)pop)->op_sv) - PL_curcop->cop_arybase)
6563 if (cSVOPx(pop)->op_private & OPpCONST_STRICT)
6564 no_bareword_allowed(pop);
6565 if (o->op_type == OP_GV)
6566 op_null(o->op_next);
6567 op_null(pop->op_next);
6569 o->op_flags |= pop->op_next->op_flags & OPf_MOD;
6570 o->op_next = pop->op_next->op_next;
6571 o->op_ppaddr = PL_ppaddr[OP_AELEMFAST];
6572 o->op_private = (U8)i;
6573 if (o->op_type == OP_GV) {
6578 o->op_flags |= OPf_SPECIAL;
6579 o->op_type = OP_AELEMFAST;
6585 if (o->op_next->op_type == OP_RV2SV) {
6586 if (!(o->op_next->op_private & OPpDEREF)) {
6587 op_null(o->op_next);
6588 o->op_private |= o->op_next->op_private & (OPpLVAL_INTRO
6590 o->op_next = o->op_next->op_next;
6591 o->op_type = OP_GVSV;
6592 o->op_ppaddr = PL_ppaddr[OP_GVSV];
6595 else if ((o->op_private & OPpEARLY_CV) && ckWARN(WARN_PROTOTYPE)) {
6597 if (SvTYPE(gv) == SVt_PVGV && GvCV(gv) && SvPVX(GvCV(gv))) {
6598 /* XXX could check prototype here instead of just carping */
6599 SV *sv = sv_newmortal();
6600 gv_efullname3(sv, gv, Nullch);
6601 Perl_warner(aTHX_ packWARN(WARN_PROTOTYPE),
6602 "%"SVf"() called too early to check prototype",
6606 else if (o->op_next->op_type == OP_READLINE
6607 && o->op_next->op_next->op_type == OP_CONCAT
6608 && (o->op_next->op_next->op_flags & OPf_STACKED))
6610 /* Turn "$a .= <FH>" into an OP_RCATLINE. AMS 20010917 */
6611 o->op_type = OP_RCATLINE;
6612 o->op_flags |= OPf_STACKED;
6613 o->op_ppaddr = PL_ppaddr[OP_RCATLINE];
6614 op_null(o->op_next->op_next);
6615 op_null(o->op_next);
6632 while (cLOGOP->op_other->op_type == OP_NULL)
6633 cLOGOP->op_other = cLOGOP->op_other->op_next;
6634 peep(cLOGOP->op_other); /* Recursive calls are not replaced by fptr calls */
6640 while (cLOOP->op_redoop->op_type == OP_NULL)
6641 cLOOP->op_redoop = cLOOP->op_redoop->op_next;
6642 peep(cLOOP->op_redoop);
6643 while (cLOOP->op_nextop->op_type == OP_NULL)
6644 cLOOP->op_nextop = cLOOP->op_nextop->op_next;
6645 peep(cLOOP->op_nextop);
6646 while (cLOOP->op_lastop->op_type == OP_NULL)
6647 cLOOP->op_lastop = cLOOP->op_lastop->op_next;
6648 peep(cLOOP->op_lastop);
6655 while (cPMOP->op_pmreplstart &&
6656 cPMOP->op_pmreplstart->op_type == OP_NULL)
6657 cPMOP->op_pmreplstart = cPMOP->op_pmreplstart->op_next;
6658 peep(cPMOP->op_pmreplstart);
6663 if (ckWARN(WARN_SYNTAX) && o->op_next
6664 && o->op_next->op_type == OP_NEXTSTATE) {
6665 if (o->op_next->op_sibling &&
6666 o->op_next->op_sibling->op_type != OP_EXIT &&
6667 o->op_next->op_sibling->op_type != OP_WARN &&
6668 o->op_next->op_sibling->op_type != OP_DIE) {
6669 line_t oldline = CopLINE(PL_curcop);
6671 CopLINE_set(PL_curcop, CopLINE((COP*)o->op_next));
6672 Perl_warner(aTHX_ packWARN(WARN_EXEC),
6673 "Statement unlikely to be reached");
6674 Perl_warner(aTHX_ packWARN(WARN_EXEC),
6675 "\t(Maybe you meant system() when you said exec()?)\n");
6676 CopLINE_set(PL_curcop, oldline);
6691 if (((BINOP*)o)->op_last->op_type != OP_CONST)
6694 /* Make the CONST have a shared SV */
6695 svp = cSVOPx_svp(((BINOP*)o)->op_last);
6696 if ((!SvFAKE(sv = *svp) || !SvREADONLY(sv)) && !IS_PADCONST(sv)) {
6697 key = SvPV(sv, keylen);
6698 lexname = newSVpvn_share(key,
6699 SvUTF8(sv) ? -(I32)keylen : keylen,
6705 if ((o->op_private & (OPpLVAL_INTRO)))
6708 rop = (UNOP*)((BINOP*)o)->op_first;
6709 if (rop->op_type != OP_RV2HV || rop->op_first->op_type != OP_PADSV)
6711 lexname = *av_fetch(PL_comppad_name, rop->op_first->op_targ, TRUE);
6712 if (!(SvFLAGS(lexname) & SVpad_TYPED))
6714 fields = (GV**)hv_fetch(SvSTASH(lexname), "FIELDS", 6, FALSE);
6715 if (!fields || !GvHV(*fields))
6717 key = SvPV(*svp, keylen);
6718 if (!hv_fetch(GvHV(*fields), key,
6719 SvUTF8(*svp) ? -(I32)keylen : keylen, FALSE))
6721 Perl_croak(aTHX_ "No such class field \"%s\" "
6722 "in variable %s of type %s",
6723 key, SvPV_nolen(lexname), HvNAME(SvSTASH(lexname)));
6736 SVOP *first_key_op, *key_op;
6738 if ((o->op_private & (OPpLVAL_INTRO))
6739 /* I bet there's always a pushmark... */
6740 || ((LISTOP*)o)->op_first->op_sibling->op_type != OP_LIST)
6741 /* hmmm, no optimization if list contains only one key. */
6743 rop = (UNOP*)((LISTOP*)o)->op_last;
6744 if (rop->op_type != OP_RV2HV)
6746 if (rop->op_first->op_type == OP_PADSV)
6747 /* @$hash{qw(keys here)} */
6748 rop = (UNOP*)rop->op_first;
6750 /* @{$hash}{qw(keys here)} */
6751 if (rop->op_first->op_type == OP_SCOPE
6752 && cLISTOPx(rop->op_first)->op_last->op_type == OP_PADSV)
6754 rop = (UNOP*)cLISTOPx(rop->op_first)->op_last;
6760 lexname = *av_fetch(PL_comppad_name, rop->op_targ, TRUE);
6761 if (!(SvFLAGS(lexname) & SVpad_TYPED))
6763 fields = (GV**)hv_fetch(SvSTASH(lexname), "FIELDS", 6, FALSE);
6764 if (!fields || !GvHV(*fields))
6766 /* Again guessing that the pushmark can be jumped over.... */
6767 first_key_op = (SVOP*)((LISTOP*)((LISTOP*)o)->op_first->op_sibling)
6768 ->op_first->op_sibling;
6769 for (key_op = first_key_op; key_op;
6770 key_op = (SVOP*)key_op->op_sibling) {
6771 if (key_op->op_type != OP_CONST)
6773 svp = cSVOPx_svp(key_op);
6774 key = SvPV(*svp, keylen);
6775 if (!hv_fetch(GvHV(*fields), key,
6776 SvUTF8(*svp) ? -(I32)keylen : keylen, FALSE))
6778 Perl_croak(aTHX_ "No such class field \"%s\" "
6779 "in variable %s of type %s",
6780 key, SvPV_nolen(lexname), HvNAME(SvSTASH(lexname)));
6787 /* will point to RV2AV or PADAV op on LHS/RHS of assign */
6791 /* check that RHS of sort is a single plain array */
6792 oright = cUNOPo->op_first;
6793 if (!oright || oright->op_type != OP_PUSHMARK)
6796 /* reverse sort ... can be optimised. */
6797 if (!cUNOPo->op_sibling) {
6798 /* Nothing follows us on the list. */
6799 OP *reverse = o->op_next;
6801 if (reverse->op_type == OP_REVERSE &&
6802 (reverse->op_flags & OPf_WANT) == OPf_WANT_LIST) {
6803 OP *pushmark = cUNOPx(reverse)->op_first;
6804 if (pushmark && (pushmark->op_type == OP_PUSHMARK)
6805 && (cUNOPx(pushmark)->op_sibling == o)) {
6806 /* reverse -> pushmark -> sort */
6807 o->op_private |= OPpSORT_REVERSE;
6809 pushmark->op_next = oright->op_next;
6815 /* make @a = sort @a act in-place */
6819 oright = cUNOPx(oright)->op_sibling;
6822 if (oright->op_type == OP_NULL) { /* skip sort block/sub */
6823 oright = cUNOPx(oright)->op_sibling;
6827 (oright->op_type != OP_RV2AV && oright->op_type != OP_PADAV)
6828 || oright->op_next != o
6829 || (oright->op_private & OPpLVAL_INTRO)
6833 /* o2 follows the chain of op_nexts through the LHS of the
6834 * assign (if any) to the aassign op itself */
6836 if (!o2 || o2->op_type != OP_NULL)
6839 if (!o2 || o2->op_type != OP_PUSHMARK)
6842 if (o2 && o2->op_type == OP_GV)
6845 || (o2->op_type != OP_PADAV && o2->op_type != OP_RV2AV)
6846 || (o2->op_private & OPpLVAL_INTRO)
6851 if (!o2 || o2->op_type != OP_NULL)
6854 if (!o2 || o2->op_type != OP_AASSIGN
6855 || (o2->op_flags & OPf_WANT) != OPf_WANT_VOID)
6858 /* check that the sort is the first arg on RHS of assign */
6860 o2 = cUNOPx(o2)->op_first;
6861 if (!o2 || o2->op_type != OP_NULL)
6863 o2 = cUNOPx(o2)->op_first;
6864 if (!o2 || o2->op_type != OP_PUSHMARK)
6866 if (o2->op_sibling != o)
6869 /* check the array is the same on both sides */
6870 if (oleft->op_type == OP_RV2AV) {
6871 if (oright->op_type != OP_RV2AV
6872 || !cUNOPx(oright)->op_first
6873 || cUNOPx(oright)->op_first->op_type != OP_GV
6874 || cGVOPx_gv(cUNOPx(oleft)->op_first) !=
6875 cGVOPx_gv(cUNOPx(oright)->op_first)
6879 else if (oright->op_type != OP_PADAV
6880 || oright->op_targ != oleft->op_targ
6884 /* transfer MODishness etc from LHS arg to RHS arg */
6885 oright->op_flags = oleft->op_flags;
6886 o->op_private |= OPpSORT_INPLACE;
6888 /* excise push->gv->rv2av->null->aassign */
6889 o2 = o->op_next->op_next;
6890 op_null(o2); /* PUSHMARK */
6892 if (o2->op_type == OP_GV) {
6893 op_null(o2); /* GV */
6896 op_null(o2); /* RV2AV or PADAV */
6897 o2 = o2->op_next->op_next;
6898 op_null(o2); /* AASSIGN */
6900 o->op_next = o2->op_next;
6906 OP *ourmark, *theirmark, *ourlast, *iter, *expushmark, *rv2av;
6908 LISTOP *enter, *exlist;
6911 enter = (LISTOP *) o->op_next;
6914 if (enter->op_type == OP_NULL) {
6915 enter = (LISTOP *) enter->op_next;
6919 /* for $a (...) will have OP_GV then OP_RV2GV here.
6920 for (...) just has an OP_GV. */
6921 if (enter->op_type == OP_GV) {
6922 gvop = (OP *) enter;
6923 enter = (LISTOP *) enter->op_next;
6926 if (enter->op_type == OP_RV2GV) {
6927 enter = (LISTOP *) enter->op_next;
6933 if (enter->op_type != OP_ENTERITER)
6936 iter = enter->op_next;
6937 if (!iter || iter->op_type != OP_ITER)
6940 expushmark = enter->op_first;
6941 if (!expushmark || expushmark->op_type != OP_NULL
6942 || expushmark->op_targ != OP_PUSHMARK)
6945 exlist = (LISTOP *) expushmark->op_sibling;
6946 if (!exlist || exlist->op_type != OP_NULL
6947 || exlist->op_targ != OP_LIST)
6950 if (exlist->op_last != o) {
6951 /* Mmm. Was expecting to point back to this op. */
6954 theirmark = exlist->op_first;
6955 if (!theirmark || theirmark->op_type != OP_PUSHMARK)
6958 if (theirmark->op_sibling != o) {
6959 /* There's something between the mark and the reverse, eg
6960 for (1, reverse (...))
6965 ourmark = ((LISTOP *)o)->op_first;
6966 if (!ourmark || ourmark->op_type != OP_PUSHMARK)
6969 ourlast = ((LISTOP *)o)->op_last;
6970 if (!ourlast || ourlast->op_next != o)
6973 rv2av = ourmark->op_sibling;
6974 if (rv2av && rv2av->op_type == OP_RV2AV && rv2av->op_sibling == 0
6975 && rv2av->op_flags == (OPf_WANT_LIST | OPf_KIDS)
6976 && enter->op_flags == (OPf_WANT_LIST | OPf_KIDS)) {
6977 /* We're just reversing a single array. */
6978 rv2av->op_flags = OPf_WANT_SCALAR | OPf_KIDS | OPf_REF;
6979 enter->op_flags |= OPf_STACKED;
6982 /* We don't have control over who points to theirmark, so sacrifice
6984 theirmark->op_next = ourmark->op_next;
6985 theirmark->op_flags = ourmark->op_flags;
6986 ourlast->op_next = gvop ? gvop : (OP *) enter;
6989 enter->op_private |= OPpITER_REVERSED;
6990 iter->op_private |= OPpITER_REVERSED;
7006 char* Perl_custom_op_name(pTHX_ OP* o)
7008 IV index = PTR2IV(o->op_ppaddr);
7012 if (!PL_custom_op_names) /* This probably shouldn't happen */
7013 return PL_op_name[OP_CUSTOM];
7015 keysv = sv_2mortal(newSViv(index));
7017 he = hv_fetch_ent(PL_custom_op_names, keysv, 0, 0);
7019 return PL_op_name[OP_CUSTOM]; /* Don't know who you are */
7021 return SvPV_nolen(HeVAL(he));
7024 char* Perl_custom_op_desc(pTHX_ OP* o)
7026 IV index = PTR2IV(o->op_ppaddr);
7030 if (!PL_custom_op_descs)
7031 return PL_op_desc[OP_CUSTOM];
7033 keysv = sv_2mortal(newSViv(index));
7035 he = hv_fetch_ent(PL_custom_op_descs, keysv, 0, 0);
7037 return PL_op_desc[OP_CUSTOM];
7039 return SvPV_nolen(HeVAL(he));
7045 /* Efficient sub that returns a constant scalar value. */
7047 const_sv_xsub(pTHX_ CV* cv)
7052 Perl_croak(aTHX_ "usage: %s::%s()",
7053 HvNAME(GvSTASH(CvGV(cv))), GvNAME(CvGV(cv)));
7057 ST(0) = (SV*)XSANY.any_ptr;