3 * Copyright (C) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
4 * 2000, 2001, 2002, 2003, 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
25 #define CALL_PEEP(o) CALL_FPTR(PL_peepp)(aTHX_ o)
27 #if defined(PL_OP_SLAB_ALLOC)
29 #ifndef PERL_SLAB_SIZE
30 #define PERL_SLAB_SIZE 2048
34 Perl_Slab_Alloc(pTHX_ int m, size_t sz)
37 * To make incrementing use count easy PL_OpSlab is an I32 *
38 * To make inserting the link to slab PL_OpPtr is I32 **
39 * So compute size in units of sizeof(I32 *) as that is how Pl_OpPtr increments
40 * Add an overhead for pointer to slab and round up as a number of pointers
42 sz = (sz + 2*sizeof(I32 *) -1)/sizeof(I32 *);
43 if ((PL_OpSpace -= sz) < 0) {
44 PL_OpPtr = (I32 **) PerlMemShared_malloc(PERL_SLAB_SIZE*sizeof(I32*));
48 Zero(PL_OpPtr,PERL_SLAB_SIZE,I32 **);
49 /* We reserve the 0'th I32 sized chunk as a use count */
50 PL_OpSlab = (I32 *) PL_OpPtr;
51 /* Reduce size by the use count word, and by the size we need.
52 * Latter is to mimic the '-=' in the if() above
54 PL_OpSpace = PERL_SLAB_SIZE - (sizeof(I32)+sizeof(I32 **)-1)/sizeof(I32 **) - sz;
55 /* Allocation pointer starts at the top.
56 Theory: because we build leaves before trunk allocating at end
57 means that at run time access is cache friendly upward
59 PL_OpPtr += PERL_SLAB_SIZE;
61 assert( PL_OpSpace >= 0 );
62 /* Move the allocation pointer down */
64 assert( PL_OpPtr > (I32 **) PL_OpSlab );
65 *PL_OpPtr = PL_OpSlab; /* Note which slab it belongs to */
66 (*PL_OpSlab)++; /* Increment use count of slab */
67 assert( PL_OpPtr+sz <= ((I32 **) PL_OpSlab + PERL_SLAB_SIZE) );
68 assert( *PL_OpSlab > 0 );
69 return (void *)(PL_OpPtr + 1);
73 Perl_Slab_Free(pTHX_ void *op)
75 I32 **ptr = (I32 **) op;
77 assert( ptr-1 > (I32 **) slab );
78 assert( ptr < ( (I32 **) slab + PERL_SLAB_SIZE) );
82 # define PerlMemShared PerlMem
85 PerlMemShared_free(slab);
86 if (slab == PL_OpSlab) {
93 * In the following definition, the ", Nullop" is just to make the compiler
94 * think the expression is of the right type: croak actually does a Siglongjmp.
96 #define CHECKOP(type,o) \
97 ((PL_op_mask && PL_op_mask[type]) \
98 ? ( op_free((OP*)o), \
99 Perl_croak(aTHX_ "'%s' trapped by operation mask", PL_op_desc[type]), \
101 : CALL_FPTR(PL_check[type])(aTHX_ (OP*)o))
103 #define RETURN_UNLIMITED_NUMBER (PERL_INT_MAX / 2)
106 S_gv_ename(pTHX_ GV *gv)
109 SV* tmpsv = sv_newmortal();
110 gv_efullname3(tmpsv, gv, Nullch);
111 return SvPV(tmpsv,n_a);
115 S_no_fh_allowed(pTHX_ OP *o)
117 yyerror(Perl_form(aTHX_ "Missing comma after first argument to %s function",
123 S_too_few_arguments(pTHX_ OP *o, char *name)
125 yyerror(Perl_form(aTHX_ "Not enough arguments for %s", name));
130 S_too_many_arguments(pTHX_ OP *o, char *name)
132 yyerror(Perl_form(aTHX_ "Too many arguments for %s", name));
137 S_bad_type(pTHX_ I32 n, char *t, char *name, OP *kid)
139 yyerror(Perl_form(aTHX_ "Type of arg %d to %s must be %s (not %s)",
140 (int)n, name, t, OP_DESC(kid)));
144 S_no_bareword_allowed(pTHX_ OP *o)
146 qerror(Perl_mess(aTHX_
147 "Bareword \"%"SVf"\" not allowed while \"strict subs\" in use",
151 /* "register" allocation */
154 Perl_allocmy(pTHX_ char *name)
158 /* complain about "my $<special_var>" etc etc */
159 if (!(PL_in_my == KEY_our ||
161 (USE_UTF8_IN_NAMES && UTF8_IS_START(name[1])) ||
162 (name[1] == '_' && (*name == '$' || (int)strlen(name) > 2))))
164 if (!isPRINT(name[1]) || strchr("\t\n\r\f", name[1])) {
165 /* 1999-02-27 mjd@plover.com */
167 p = strchr(name, '\0');
168 /* The next block assumes the buffer is at least 205 chars
169 long. At present, it's always at least 256 chars. */
171 strcpy(name+200, "...");
177 /* Move everything else down one character */
178 for (; p-name > 2; p--)
180 name[2] = toCTRL(name[1]);
183 yyerror(Perl_form(aTHX_ "Can't use global %s in \"my\"",name));
186 /* check for duplicate declaration */
188 (bool)(PL_in_my == KEY_our),
189 (PL_curstash ? PL_curstash : PL_defstash)
192 if (PL_in_my_stash && *name != '$') {
193 yyerror(Perl_form(aTHX_
194 "Can't declare class for non-scalar %s in \"%s\"",
195 name, PL_in_my == KEY_our ? "our" : "my"));
198 /* allocate a spare slot and store the name in that slot */
200 off = pad_add_name(name,
203 ? (PL_curstash ? PL_curstash : PL_defstash)
214 Perl_op_free(pTHX_ OP *o)
216 register OP *kid, *nextkid;
219 if (!o || o->op_seq == (U16)-1)
222 if (o->op_private & OPpREFCOUNTED) {
223 switch (o->op_type) {
231 if (OpREFCNT_dec(o)) {
242 if (o->op_flags & OPf_KIDS) {
243 for (kid = cUNOPo->op_first; kid; kid = nextkid) {
244 nextkid = kid->op_sibling; /* Get before next freeing kid */
250 type = (OPCODE)o->op_targ;
252 /* COP* is not cleared by op_clear() so that we may track line
253 * numbers etc even after null() */
254 if (type == OP_NEXTSTATE || type == OP_SETSTATE || type == OP_DBSTATE)
262 Perl_op_clear(pTHX_ OP *o)
265 switch (o->op_type) {
266 case OP_NULL: /* Was holding old type, if any. */
267 case OP_ENTEREVAL: /* Was holding hints. */
271 if (!(o->op_flags & OPf_REF)
272 || (PL_check[o->op_type] != MEMBER_TO_FPTR(Perl_ck_ftst)))
279 if (cPADOPo->op_padix > 0) {
280 /* No GvIN_PAD_off(cGVOPo_gv) here, because other references
281 * may still exist on the pad */
282 pad_swipe(cPADOPo->op_padix, TRUE);
283 cPADOPo->op_padix = 0;
286 SvREFCNT_dec(cSVOPo->op_sv);
287 cSVOPo->op_sv = Nullsv;
290 case OP_METHOD_NAMED:
292 SvREFCNT_dec(cSVOPo->op_sv);
293 cSVOPo->op_sv = Nullsv;
296 Even if op_clear does a pad_free for the target of the op,
297 pad_free doesn't actually remove the sv that exists in the bad
298 instead it lives on. This results in that it could be reused as
299 a target later on when the pad was reallocated.
302 pad_swipe(o->op_targ,1);
311 if (o->op_flags & (OPf_SPECIAL|OPf_STACKED|OPf_KIDS))
315 if (o->op_private & (OPpTRANS_FROM_UTF|OPpTRANS_TO_UTF)) {
316 SvREFCNT_dec(cSVOPo->op_sv);
317 cSVOPo->op_sv = Nullsv;
320 Safefree(cPVOPo->op_pv);
321 cPVOPo->op_pv = Nullch;
325 op_free(cPMOPo->op_pmreplroot);
329 if (INT2PTR(PADOFFSET, cPMOPo->op_pmreplroot)) {
330 /* No GvIN_PAD_off here, because other references may still
331 * exist on the pad */
332 pad_swipe(INT2PTR(PADOFFSET, cPMOPo->op_pmreplroot), TRUE);
335 SvREFCNT_dec((SV*)cPMOPo->op_pmreplroot);
342 HV *pmstash = PmopSTASH(cPMOPo);
343 if (pmstash && SvREFCNT(pmstash)) {
344 PMOP *pmop = HvPMROOT(pmstash);
345 PMOP *lastpmop = NULL;
347 if (cPMOPo == pmop) {
349 lastpmop->op_pmnext = pmop->op_pmnext;
351 HvPMROOT(pmstash) = pmop->op_pmnext;
355 pmop = pmop->op_pmnext;
358 PmopSTASH_free(cPMOPo);
360 cPMOPo->op_pmreplroot = Nullop;
361 /* we use the "SAFE" version of the PM_ macros here
362 * since sv_clean_all might release some PMOPs
363 * after PL_regex_padav has been cleared
364 * and the clearing of PL_regex_padav needs to
365 * happen before sv_clean_all
367 ReREFCNT_dec(PM_GETRE_SAFE(cPMOPo));
368 PM_SETRE_SAFE(cPMOPo, (REGEXP*)NULL);
370 if(PL_regex_pad) { /* We could be in destruction */
371 av_push((AV*) PL_regex_pad[0],(SV*) PL_regex_pad[(cPMOPo)->op_pmoffset]);
372 SvREPADTMP_on(PL_regex_pad[(cPMOPo)->op_pmoffset]);
373 PM_SETRE(cPMOPo, (cPMOPo)->op_pmoffset);
380 if (o->op_targ > 0) {
381 pad_free(o->op_targ);
387 S_cop_free(pTHX_ COP* cop)
389 Safefree(cop->cop_label); /* FIXME: treaddead ??? */
392 if (! specialWARN(cop->cop_warnings))
393 SvREFCNT_dec(cop->cop_warnings);
394 if (! specialCopIO(cop->cop_io)) {
398 char *s = SvPV(cop->cop_io,len);
399 Perl_warn(aTHX_ "io='%.*s'",(int) len,s); /* ??? --jhi */
402 SvREFCNT_dec(cop->cop_io);
408 Perl_op_null(pTHX_ OP *o)
410 if (o->op_type == OP_NULL)
413 o->op_targ = o->op_type;
414 o->op_type = OP_NULL;
415 o->op_ppaddr = PL_ppaddr[OP_NULL];
418 /* Contextualizers */
420 #define LINKLIST(o) ((o)->op_next ? (o)->op_next : linklist((OP*)o))
423 Perl_linklist(pTHX_ OP *o)
430 /* establish postfix order */
431 if (cUNOPo->op_first) {
432 o->op_next = LINKLIST(cUNOPo->op_first);
433 for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling) {
435 kid->op_next = LINKLIST(kid->op_sibling);
447 Perl_scalarkids(pTHX_ OP *o)
450 if (o && o->op_flags & OPf_KIDS) {
451 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
458 S_scalarboolean(pTHX_ OP *o)
460 if (o->op_type == OP_SASSIGN && cBINOPo->op_first->op_type == OP_CONST) {
461 if (ckWARN(WARN_SYNTAX)) {
462 line_t oldline = CopLINE(PL_curcop);
464 if (PL_copline != NOLINE)
465 CopLINE_set(PL_curcop, PL_copline);
466 Perl_warner(aTHX_ packWARN(WARN_SYNTAX), "Found = in conditional, should be ==");
467 CopLINE_set(PL_curcop, oldline);
474 Perl_scalar(pTHX_ OP *o)
478 /* assumes no premature commitment */
479 if (!o || (o->op_flags & OPf_WANT) || PL_error_count
480 || o->op_type == OP_RETURN)
485 o->op_flags = (o->op_flags & ~OPf_WANT) | OPf_WANT_SCALAR;
487 switch (o->op_type) {
489 scalar(cBINOPo->op_first);
494 for (kid = cUNOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
498 if ((kid = cLISTOPo->op_first) && kid->op_type == OP_PUSHRE) {
499 if (!kPMOP->op_pmreplroot)
500 deprecate_old("implicit split to @_");
508 if (o->op_flags & OPf_KIDS) {
509 for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling)
515 kid = cLISTOPo->op_first;
517 while ((kid = kid->op_sibling)) {
523 WITH_THR(PL_curcop = &PL_compiling);
528 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling) {
534 WITH_THR(PL_curcop = &PL_compiling);
537 if (ckWARN(WARN_VOID))
538 Perl_warner(aTHX_ packWARN(WARN_VOID), "Useless use of sort in scalar context");
544 Perl_scalarvoid(pTHX_ OP *o)
551 if (o->op_type == OP_NEXTSTATE
552 || o->op_type == OP_SETSTATE
553 || o->op_type == OP_DBSTATE
554 || (o->op_type == OP_NULL && (o->op_targ == OP_NEXTSTATE
555 || o->op_targ == OP_SETSTATE
556 || o->op_targ == OP_DBSTATE)))
557 PL_curcop = (COP*)o; /* for warning below */
559 /* assumes no premature commitment */
560 want = o->op_flags & OPf_WANT;
561 if ((want && want != OPf_WANT_SCALAR) || PL_error_count
562 || o->op_type == OP_RETURN)
567 if ((o->op_private & OPpTARGET_MY)
568 && (PL_opargs[o->op_type] & OA_TARGLEX))/* OPp share the meaning */
570 return scalar(o); /* As if inside SASSIGN */
573 o->op_flags = (o->op_flags & ~OPf_WANT) | OPf_WANT_VOID;
575 switch (o->op_type) {
577 if (!(PL_opargs[o->op_type] & OA_FOLDCONST))
581 if (o->op_flags & OPf_STACKED)
585 if (o->op_private == 4)
657 if (!(o->op_private & (OPpLVAL_INTRO|OPpOUR_INTRO)))
658 useless = OP_DESC(o);
665 if (!(o->op_private & (OPpLVAL_INTRO|OPpOUR_INTRO)) &&
666 (!o->op_sibling || o->op_sibling->op_type != OP_READLINE))
667 useless = "a variable";
672 if (cSVOPo->op_private & OPpCONST_STRICT)
673 no_bareword_allowed(o);
675 if (ckWARN(WARN_VOID)) {
676 useless = "a constant";
677 /* the constants 0 and 1 are permitted as they are
678 conventionally used as dummies in constructs like
679 1 while some_condition_with_side_effects; */
680 if (SvNIOK(sv) && (SvNV(sv) == 0.0 || SvNV(sv) == 1.0))
682 else if (SvPOK(sv)) {
683 /* perl4's way of mixing documentation and code
684 (before the invention of POD) was based on a
685 trick to mix nroff and perl code. The trick was
686 built upon these three nroff macros being used in
687 void context. The pink camel has the details in
688 the script wrapman near page 319. */
689 if (strnEQ(SvPVX(sv), "di", 2) ||
690 strnEQ(SvPVX(sv), "ds", 2) ||
691 strnEQ(SvPVX(sv), "ig", 2))
696 op_null(o); /* don't execute or even remember it */
700 o->op_type = OP_PREINC; /* pre-increment is faster */
701 o->op_ppaddr = PL_ppaddr[OP_PREINC];
705 o->op_type = OP_PREDEC; /* pre-decrement is faster */
706 o->op_ppaddr = PL_ppaddr[OP_PREDEC];
713 for (kid = cUNOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
718 if (o->op_flags & OPf_STACKED)
725 if (!(o->op_flags & OPf_KIDS))
734 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
741 /* all requires must return a boolean value */
742 o->op_flags &= ~OPf_WANT;
747 if ((kid = cLISTOPo->op_first) && kid->op_type == OP_PUSHRE) {
748 if (!kPMOP->op_pmreplroot)
749 deprecate_old("implicit split to @_");
753 if (useless && ckWARN(WARN_VOID))
754 Perl_warner(aTHX_ packWARN(WARN_VOID), "Useless use of %s in void context", useless);
759 Perl_listkids(pTHX_ OP *o)
762 if (o && o->op_flags & OPf_KIDS) {
763 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
770 Perl_list(pTHX_ OP *o)
774 /* assumes no premature commitment */
775 if (!o || (o->op_flags & OPf_WANT) || PL_error_count
776 || o->op_type == OP_RETURN)
781 if ((o->op_private & OPpTARGET_MY)
782 && (PL_opargs[o->op_type] & OA_TARGLEX))/* OPp share the meaning */
784 return o; /* As if inside SASSIGN */
787 o->op_flags = (o->op_flags & ~OPf_WANT) | OPf_WANT_LIST;
789 switch (o->op_type) {
792 list(cBINOPo->op_first);
797 for (kid = cUNOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
805 if (!(o->op_flags & OPf_KIDS))
807 if (!o->op_next && cUNOPo->op_first->op_type == OP_FLOP) {
808 list(cBINOPo->op_first);
809 return gen_constant_list(o);
816 kid = cLISTOPo->op_first;
818 while ((kid = kid->op_sibling)) {
824 WITH_THR(PL_curcop = &PL_compiling);
828 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling) {
834 WITH_THR(PL_curcop = &PL_compiling);
837 /* all requires must return a boolean value */
838 o->op_flags &= ~OPf_WANT;
845 Perl_scalarseq(pTHX_ OP *o)
850 if (o->op_type == OP_LINESEQ ||
851 o->op_type == OP_SCOPE ||
852 o->op_type == OP_LEAVE ||
853 o->op_type == OP_LEAVETRY)
855 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling) {
856 if (kid->op_sibling) {
860 PL_curcop = &PL_compiling;
862 o->op_flags &= ~OPf_PARENS;
863 if (PL_hints & HINT_BLOCK_SCOPE)
864 o->op_flags |= OPf_PARENS;
867 o = newOP(OP_STUB, 0);
872 S_modkids(pTHX_ OP *o, I32 type)
875 if (o && o->op_flags & OPf_KIDS) {
876 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
882 /* Propagate lvalue ("modifiable") context to an op and it's children.
883 * 'type' represents the context type, roughly based on the type of op that
884 * would do the modifying, although local() is represented by OP_NULL.
885 * It's responsible for detecting things that can't be modified, flag
886 * things that need to behave specially in an lvalue context (e.g., "$$x = 5"
887 * might have to vivify a reference in $x), and so on.
889 * For example, "$a+1 = 2" would cause mod() to be called with o being
890 * OP_ADD and type being OP_SASSIGN, and would output an error.
894 Perl_mod(pTHX_ OP *o, I32 type)
897 /* -1 = error on localize, 0 = ignore localize, 1 = ok to localize */
900 if (!o || PL_error_count)
903 if ((o->op_private & OPpTARGET_MY)
904 && (PL_opargs[o->op_type] & OA_TARGLEX))/* OPp share the meaning */
909 switch (o->op_type) {
915 if (!(o->op_private & (OPpCONST_ARYBASE)))
917 if (PL_eval_start && PL_eval_start->op_type == OP_CONST) {
918 PL_compiling.cop_arybase = (I32)SvIV(cSVOPx(PL_eval_start)->op_sv);
922 SAVEI32(PL_compiling.cop_arybase);
923 PL_compiling.cop_arybase = 0;
925 else if (type == OP_REFGEN)
928 Perl_croak(aTHX_ "That use of $[ is unsupported");
931 if (o->op_flags & OPf_PARENS)
935 if ((type == OP_UNDEF || type == OP_REFGEN) &&
936 !(o->op_flags & OPf_STACKED)) {
937 o->op_type = OP_RV2CV; /* entersub => rv2cv */
938 o->op_ppaddr = PL_ppaddr[OP_RV2CV];
939 assert(cUNOPo->op_first->op_type == OP_NULL);
940 op_null(((LISTOP*)cUNOPo->op_first)->op_first);/* disable pushmark */
943 else if (o->op_private & OPpENTERSUB_NOMOD)
945 else { /* lvalue subroutine call */
946 o->op_private |= OPpLVAL_INTRO;
947 PL_modcount = RETURN_UNLIMITED_NUMBER;
948 if (type == OP_GREPSTART || type == OP_ENTERSUB || type == OP_REFGEN) {
949 /* Backward compatibility mode: */
950 o->op_private |= OPpENTERSUB_INARGS;
953 else { /* Compile-time error message: */
954 OP *kid = cUNOPo->op_first;
958 if (kid->op_type == OP_PUSHMARK)
960 if (kid->op_type != OP_NULL || kid->op_targ != OP_LIST)
962 "panic: unexpected lvalue entersub "
963 "args: type/targ %ld:%"UVuf,
964 (long)kid->op_type, (UV)kid->op_targ);
965 kid = kLISTOP->op_first;
967 while (kid->op_sibling)
968 kid = kid->op_sibling;
969 if (!(kid->op_type == OP_NULL && kid->op_targ == OP_RV2CV)) {
971 if (kid->op_type == OP_METHOD_NAMED
972 || kid->op_type == OP_METHOD)
976 NewOp(1101, newop, 1, UNOP);
977 newop->op_type = OP_RV2CV;
978 newop->op_ppaddr = PL_ppaddr[OP_RV2CV];
979 newop->op_first = Nullop;
980 newop->op_next = (OP*)newop;
981 kid->op_sibling = (OP*)newop;
982 newop->op_private |= OPpLVAL_INTRO;
986 if (kid->op_type != OP_RV2CV)
988 "panic: unexpected lvalue entersub "
989 "entry via type/targ %ld:%"UVuf,
990 (long)kid->op_type, (UV)kid->op_targ);
991 kid->op_private |= OPpLVAL_INTRO;
992 break; /* Postpone until runtime */
996 kid = kUNOP->op_first;
997 if (kid->op_type == OP_NULL && kid->op_targ == OP_RV2SV)
998 kid = kUNOP->op_first;
999 if (kid->op_type == OP_NULL)
1001 "Unexpected constant lvalue entersub "
1002 "entry via type/targ %ld:%"UVuf,
1003 (long)kid->op_type, (UV)kid->op_targ);
1004 if (kid->op_type != OP_GV) {
1005 /* Restore RV2CV to check lvalueness */
1007 if (kid->op_next && kid->op_next != kid) { /* Happens? */
1008 okid->op_next = kid->op_next;
1009 kid->op_next = okid;
1012 okid->op_next = Nullop;
1013 okid->op_type = OP_RV2CV;
1015 okid->op_ppaddr = PL_ppaddr[OP_RV2CV];
1016 okid->op_private |= OPpLVAL_INTRO;
1020 cv = GvCV(kGVOP_gv);
1030 /* grep, foreach, subcalls, refgen */
1031 if (type == OP_GREPSTART || type == OP_ENTERSUB || type == OP_REFGEN)
1033 yyerror(Perl_form(aTHX_ "Can't modify %s in %s",
1034 (o->op_type == OP_NULL && (o->op_flags & OPf_SPECIAL)
1036 : (o->op_type == OP_ENTERSUB
1037 ? "non-lvalue subroutine call"
1039 type ? PL_op_desc[type] : "local"));
1053 case OP_RIGHT_SHIFT:
1062 if (!(o->op_flags & OPf_STACKED))
1069 for (kid = cUNOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
1075 if (type == OP_REFGEN && o->op_flags & OPf_PARENS) {
1076 PL_modcount = RETURN_UNLIMITED_NUMBER;
1077 return o; /* Treat \(@foo) like ordinary list. */
1081 if (scalar_mod_type(o, type))
1083 ref(cUNOPo->op_first, o->op_type);
1087 if (type == OP_LEAVESUBLV)
1088 o->op_private |= OPpMAYBE_LVSUB;
1094 PL_modcount = RETURN_UNLIMITED_NUMBER;
1097 ref(cUNOPo->op_first, o->op_type);
1102 PL_hints |= HINT_BLOCK_SCOPE;
1117 PL_modcount = RETURN_UNLIMITED_NUMBER;
1118 if (type == OP_REFGEN && o->op_flags & OPf_PARENS)
1119 return o; /* Treat \(@foo) like ordinary list. */
1120 if (scalar_mod_type(o, type))
1122 if (type == OP_LEAVESUBLV)
1123 o->op_private |= OPpMAYBE_LVSUB;
1127 if (!type) /* local() */
1128 Perl_croak(aTHX_ "Can't localize lexical variable %s",
1129 PAD_COMPNAME_PV(o->op_targ));
1137 if (type != OP_SASSIGN)
1141 if (o->op_private == 4) /* don't allow 4 arg substr as lvalue */
1146 if (type == OP_LEAVESUBLV)
1147 o->op_private |= OPpMAYBE_LVSUB;
1149 pad_free(o->op_targ);
1150 o->op_targ = pad_alloc(o->op_type, SVs_PADMY);
1151 assert(SvTYPE(PAD_SV(o->op_targ)) == SVt_NULL);
1152 if (o->op_flags & OPf_KIDS)
1153 mod(cBINOPo->op_first->op_sibling, type);
1158 ref(cBINOPo->op_first, o->op_type);
1159 if (type == OP_ENTERSUB &&
1160 !(o->op_private & (OPpLVAL_INTRO | OPpDEREF)))
1161 o->op_private |= OPpLVAL_DEFER;
1162 if (type == OP_LEAVESUBLV)
1163 o->op_private |= OPpMAYBE_LVSUB;
1173 if (o->op_flags & OPf_KIDS)
1174 mod(cLISTOPo->op_last, type);
1179 if (o->op_flags & OPf_SPECIAL) /* do BLOCK */
1181 else if (!(o->op_flags & OPf_KIDS))
1183 if (o->op_targ != OP_LIST) {
1184 mod(cBINOPo->op_first, type);
1190 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
1195 if (type != OP_LEAVESUBLV)
1197 break; /* mod()ing was handled by ck_return() */
1200 /* [20011101.069] File test operators interpret OPf_REF to mean that
1201 their argument is a filehandle; thus \stat(".") should not set
1203 if (type == OP_REFGEN &&
1204 PL_check[o->op_type] == MEMBER_TO_FPTR(Perl_ck_ftst))
1207 if (type != OP_LEAVESUBLV)
1208 o->op_flags |= OPf_MOD;
1210 if (type == OP_AASSIGN || type == OP_SASSIGN)
1211 o->op_flags |= OPf_SPECIAL|OPf_REF;
1212 else if (!type) { /* local() */
1215 o->op_private |= OPpLVAL_INTRO;
1216 o->op_flags &= ~OPf_SPECIAL;
1217 PL_hints |= HINT_BLOCK_SCOPE;
1222 if (ckWARN(WARN_SYNTAX)) {
1223 Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
1224 "Useless localization of %s", OP_DESC(o));
1228 else if (type != OP_GREPSTART && type != OP_ENTERSUB
1229 && type != OP_LEAVESUBLV)
1230 o->op_flags |= OPf_REF;
1235 S_scalar_mod_type(pTHX_ OP *o, I32 type)
1239 if (o->op_type == OP_RV2GV)
1263 case OP_RIGHT_SHIFT:
1282 S_is_handle_constructor(pTHX_ OP *o, I32 argnum)
1284 switch (o->op_type) {
1292 case OP_SELECT: /* XXX c.f. SelectSaver.pm */
1305 Perl_refkids(pTHX_ OP *o, I32 type)
1308 if (o && o->op_flags & OPf_KIDS) {
1309 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
1316 Perl_ref(pTHX_ OP *o, I32 type)
1320 if (!o || PL_error_count)
1323 switch (o->op_type) {
1325 if ((type == OP_EXISTS || type == OP_DEFINED || type == OP_LOCK) &&
1326 !(o->op_flags & OPf_STACKED)) {
1327 o->op_type = OP_RV2CV; /* entersub => rv2cv */
1328 o->op_ppaddr = PL_ppaddr[OP_RV2CV];
1329 assert(cUNOPo->op_first->op_type == OP_NULL);
1330 op_null(((LISTOP*)cUNOPo->op_first)->op_first); /* disable pushmark */
1331 o->op_flags |= OPf_SPECIAL;
1336 for (kid = cUNOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
1340 if (type == OP_DEFINED)
1341 o->op_flags |= OPf_SPECIAL; /* don't create GV */
1342 ref(cUNOPo->op_first, o->op_type);
1345 if (type == OP_RV2SV || type == OP_RV2AV || type == OP_RV2HV) {
1346 o->op_private |= (type == OP_RV2AV ? OPpDEREF_AV
1347 : type == OP_RV2HV ? OPpDEREF_HV
1349 o->op_flags |= OPf_MOD;
1354 o->op_flags |= OPf_MOD; /* XXX ??? */
1359 o->op_flags |= OPf_REF;
1362 if (type == OP_DEFINED)
1363 o->op_flags |= OPf_SPECIAL; /* don't create GV */
1364 ref(cUNOPo->op_first, o->op_type);
1369 o->op_flags |= OPf_REF;
1374 if (!(o->op_flags & OPf_KIDS))
1376 ref(cBINOPo->op_first, type);
1380 ref(cBINOPo->op_first, o->op_type);
1381 if (type == OP_RV2SV || type == OP_RV2AV || type == OP_RV2HV) {
1382 o->op_private |= (type == OP_RV2AV ? OPpDEREF_AV
1383 : type == OP_RV2HV ? OPpDEREF_HV
1385 o->op_flags |= OPf_MOD;
1393 if (!(o->op_flags & OPf_KIDS))
1395 ref(cLISTOPo->op_last, type);
1405 S_dup_attrlist(pTHX_ OP *o)
1409 /* An attrlist is either a simple OP_CONST or an OP_LIST with kids,
1410 * where the first kid is OP_PUSHMARK and the remaining ones
1411 * are OP_CONST. We need to push the OP_CONST values.
1413 if (o->op_type == OP_CONST)
1414 rop = newSVOP(OP_CONST, o->op_flags, SvREFCNT_inc(cSVOPo->op_sv));
1416 assert((o->op_type == OP_LIST) && (o->op_flags & OPf_KIDS));
1417 for (o = cLISTOPo->op_first; o; o=o->op_sibling) {
1418 if (o->op_type == OP_CONST)
1419 rop = append_elem(OP_LIST, rop,
1420 newSVOP(OP_CONST, o->op_flags,
1421 SvREFCNT_inc(cSVOPo->op_sv)));
1428 S_apply_attrs(pTHX_ HV *stash, SV *target, OP *attrs, bool for_my)
1432 /* fake up C<use attributes $pkg,$rv,@attrs> */
1433 ENTER; /* need to protect against side-effects of 'use' */
1436 stashsv = newSVpv(HvNAME(stash), 0);
1438 stashsv = &PL_sv_no;
1440 #define ATTRSMODULE "attributes"
1441 #define ATTRSMODULE_PM "attributes.pm"
1445 /* Don't force the C<use> if we don't need it. */
1446 svp = hv_fetch(GvHVn(PL_incgv), ATTRSMODULE_PM,
1447 sizeof(ATTRSMODULE_PM)-1, 0);
1448 if (svp && *svp != &PL_sv_undef)
1449 ; /* already in %INC */
1451 Perl_load_module(aTHX_ PERL_LOADMOD_NOIMPORT,
1452 newSVpvn(ATTRSMODULE, sizeof(ATTRSMODULE)-1),
1456 Perl_load_module(aTHX_ PERL_LOADMOD_IMPORT_OPS,
1457 newSVpvn(ATTRSMODULE, sizeof(ATTRSMODULE)-1),
1459 prepend_elem(OP_LIST,
1460 newSVOP(OP_CONST, 0, stashsv),
1461 prepend_elem(OP_LIST,
1462 newSVOP(OP_CONST, 0,
1464 dup_attrlist(attrs))));
1470 S_apply_attrs_my(pTHX_ HV *stash, OP *target, OP *attrs, OP **imopsp)
1472 OP *pack, *imop, *arg;
1478 assert(target->op_type == OP_PADSV ||
1479 target->op_type == OP_PADHV ||
1480 target->op_type == OP_PADAV);
1482 /* Ensure that attributes.pm is loaded. */
1483 apply_attrs(stash, PAD_SV(target->op_targ), attrs, TRUE);
1485 /* Need package name for method call. */
1486 pack = newSVOP(OP_CONST, 0, newSVpvn(ATTRSMODULE, sizeof(ATTRSMODULE)-1));
1488 /* Build up the real arg-list. */
1490 stashsv = newSVpv(HvNAME(stash), 0);
1492 stashsv = &PL_sv_no;
1493 arg = newOP(OP_PADSV, 0);
1494 arg->op_targ = target->op_targ;
1495 arg = prepend_elem(OP_LIST,
1496 newSVOP(OP_CONST, 0, stashsv),
1497 prepend_elem(OP_LIST,
1498 newUNOP(OP_REFGEN, 0,
1499 mod(arg, OP_REFGEN)),
1500 dup_attrlist(attrs)));
1502 /* Fake up a method call to import */
1503 meth = newSVpvn("import", 6);
1504 (void)SvUPGRADE(meth, SVt_PVIV);
1505 (void)SvIOK_on(meth);
1506 PERL_HASH(SvUVX(meth), SvPVX(meth), SvCUR(meth));
1507 imop = convert(OP_ENTERSUB, OPf_STACKED|OPf_SPECIAL|OPf_WANT_VOID,
1508 append_elem(OP_LIST,
1509 prepend_elem(OP_LIST, pack, list(arg)),
1510 newSVOP(OP_METHOD_NAMED, 0, meth)));
1511 imop->op_private |= OPpENTERSUB_NOMOD;
1513 /* Combine the ops. */
1514 *imopsp = append_elem(OP_LIST, *imopsp, imop);
1518 =notfor apidoc apply_attrs_string
1520 Attempts to apply a list of attributes specified by the C<attrstr> and
1521 C<len> arguments to the subroutine identified by the C<cv> argument which
1522 is expected to be associated with the package identified by the C<stashpv>
1523 argument (see L<attributes>). It gets this wrong, though, in that it
1524 does not correctly identify the boundaries of the individual attribute
1525 specifications within C<attrstr>. This is not really intended for the
1526 public API, but has to be listed here for systems such as AIX which
1527 need an explicit export list for symbols. (It's called from XS code
1528 in support of the C<ATTRS:> keyword from F<xsubpp>.) Patches to fix it
1529 to respect attribute syntax properly would be welcome.
1535 Perl_apply_attrs_string(pTHX_ char *stashpv, CV *cv,
1536 char *attrstr, STRLEN len)
1541 len = strlen(attrstr);
1545 for (; isSPACE(*attrstr) && len; --len, ++attrstr) ;
1547 char *sstr = attrstr;
1548 for (; !isSPACE(*attrstr) && len; --len, ++attrstr) ;
1549 attrs = append_elem(OP_LIST, attrs,
1550 newSVOP(OP_CONST, 0,
1551 newSVpvn(sstr, attrstr-sstr)));
1555 Perl_load_module(aTHX_ PERL_LOADMOD_IMPORT_OPS,
1556 newSVpvn(ATTRSMODULE, sizeof(ATTRSMODULE)-1),
1557 Nullsv, prepend_elem(OP_LIST,
1558 newSVOP(OP_CONST, 0, newSVpv(stashpv,0)),
1559 prepend_elem(OP_LIST,
1560 newSVOP(OP_CONST, 0,
1566 S_my_kid(pTHX_ OP *o, OP *attrs, OP **imopsp)
1571 if (!o || PL_error_count)
1575 if (type == OP_LIST) {
1576 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
1577 my_kid(kid, attrs, imopsp);
1578 } else if (type == OP_UNDEF) {
1580 } else if (type == OP_RV2SV || /* "our" declaration */
1582 type == OP_RV2HV) { /* XXX does this let anything illegal in? */
1583 if (cUNOPo->op_first->op_type != OP_GV) { /* MJD 20011224 */
1584 yyerror(Perl_form(aTHX_ "Can't declare %s in %s",
1585 OP_DESC(o), PL_in_my == KEY_our ? "our" : "my"));
1587 GV *gv = cGVOPx_gv(cUNOPo->op_first);
1589 PL_in_my_stash = Nullhv;
1590 apply_attrs(GvSTASH(gv),
1591 (type == OP_RV2SV ? GvSV(gv) :
1592 type == OP_RV2AV ? (SV*)GvAV(gv) :
1593 type == OP_RV2HV ? (SV*)GvHV(gv) : (SV*)gv),
1596 o->op_private |= OPpOUR_INTRO;
1599 else if (type != OP_PADSV &&
1602 type != OP_PUSHMARK)
1604 yyerror(Perl_form(aTHX_ "Can't declare %s in \"%s\"",
1606 PL_in_my == KEY_our ? "our" : "my"));
1609 else if (attrs && type != OP_PUSHMARK) {
1613 PL_in_my_stash = Nullhv;
1615 /* check for C<my Dog $spot> when deciding package */
1616 stash = PAD_COMPNAME_TYPE(o->op_targ);
1618 stash = PL_curstash;
1619 apply_attrs_my(stash, o, attrs, imopsp);
1621 o->op_flags |= OPf_MOD;
1622 o->op_private |= OPpLVAL_INTRO;
1627 Perl_my_attrs(pTHX_ OP *o, OP *attrs)
1630 int maybe_scalar = 0;
1632 /* [perl #17376]: this appears to be premature, and results in code such as
1633 C< our(%x); > executing in list mode rather than void mode */
1635 if (o->op_flags & OPf_PARENS)
1644 o = my_kid(o, attrs, &rops);
1646 if (maybe_scalar && o->op_type == OP_PADSV) {
1647 o = scalar(append_list(OP_LIST, (LISTOP*)rops, (LISTOP*)o));
1648 o->op_private |= OPpLVAL_INTRO;
1651 o = append_list(OP_LIST, (LISTOP*)o, (LISTOP*)rops);
1654 PL_in_my_stash = Nullhv;
1659 Perl_my(pTHX_ OP *o)
1661 return my_attrs(o, Nullop);
1665 Perl_sawparens(pTHX_ OP *o)
1668 o->op_flags |= OPf_PARENS;
1673 Perl_bind_match(pTHX_ I32 type, OP *left, OP *right)
1678 if (ckWARN(WARN_MISC) &&
1679 (left->op_type == OP_RV2AV ||
1680 left->op_type == OP_RV2HV ||
1681 left->op_type == OP_PADAV ||
1682 left->op_type == OP_PADHV)) {
1683 char *desc = PL_op_desc[(right->op_type == OP_SUBST ||
1684 right->op_type == OP_TRANS)
1685 ? right->op_type : OP_MATCH];
1686 const char *sample = ((left->op_type == OP_RV2AV ||
1687 left->op_type == OP_PADAV)
1688 ? "@array" : "%hash");
1689 Perl_warner(aTHX_ packWARN(WARN_MISC),
1690 "Applying %s to %s will act on scalar(%s)",
1691 desc, sample, sample);
1694 if (right->op_type == OP_CONST &&
1695 cSVOPx(right)->op_private & OPpCONST_BARE &&
1696 cSVOPx(right)->op_private & OPpCONST_STRICT)
1698 no_bareword_allowed(right);
1701 ismatchop = right->op_type == OP_MATCH ||
1702 right->op_type == OP_SUBST ||
1703 right->op_type == OP_TRANS;
1704 if (ismatchop && right->op_private & OPpTARGET_MY) {
1706 right->op_private &= ~OPpTARGET_MY;
1708 if (!(right->op_flags & OPf_STACKED) && ismatchop) {
1709 right->op_flags |= OPf_STACKED;
1710 if (right->op_type != OP_MATCH &&
1711 ! (right->op_type == OP_TRANS &&
1712 right->op_private & OPpTRANS_IDENTICAL))
1713 left = mod(left, right->op_type);
1714 if (right->op_type == OP_TRANS)
1715 o = newBINOP(OP_NULL, OPf_STACKED, scalar(left), right);
1717 o = prepend_elem(right->op_type, scalar(left), right);
1719 return newUNOP(OP_NOT, 0, scalar(o));
1723 return bind_match(type, left,
1724 pmruntime(newPMOP(OP_MATCH, 0), right, Nullop));
1728 Perl_invert(pTHX_ OP *o)
1732 /* XXX need to optimize away NOT NOT here? Or do we let optimizer do it? */
1733 return newUNOP(OP_NOT, OPf_SPECIAL, scalar(o));
1737 Perl_scope(pTHX_ OP *o)
1740 if (o->op_flags & OPf_PARENS || PERLDB_NOOPT || PL_tainting) {
1741 o = prepend_elem(OP_LINESEQ, newOP(OP_ENTER, 0), o);
1742 o->op_type = OP_LEAVE;
1743 o->op_ppaddr = PL_ppaddr[OP_LEAVE];
1745 else if (o->op_type == OP_LINESEQ) {
1747 o->op_type = OP_SCOPE;
1748 o->op_ppaddr = PL_ppaddr[OP_SCOPE];
1749 kid = ((LISTOP*)o)->op_first;
1750 if (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE)
1754 o = newLISTOP(OP_SCOPE, 0, o, Nullop);
1760 Perl_save_hints(pTHX)
1763 SAVESPTR(GvHV(PL_hintgv));
1764 GvHV(PL_hintgv) = newHVhv(GvHV(PL_hintgv));
1765 SAVEFREESV(GvHV(PL_hintgv));
1769 Perl_block_start(pTHX_ int full)
1771 int retval = PL_savestack_ix;
1772 /* If there were syntax errors, don't try to start a block */
1773 if (PL_yynerrs) return retval;
1775 pad_block_start(full);
1777 PL_hints &= ~HINT_BLOCK_SCOPE;
1778 SAVESPTR(PL_compiling.cop_warnings);
1779 if (! specialWARN(PL_compiling.cop_warnings)) {
1780 PL_compiling.cop_warnings = newSVsv(PL_compiling.cop_warnings) ;
1781 SAVEFREESV(PL_compiling.cop_warnings) ;
1783 SAVESPTR(PL_compiling.cop_io);
1784 if (! specialCopIO(PL_compiling.cop_io)) {
1785 PL_compiling.cop_io = newSVsv(PL_compiling.cop_io) ;
1786 SAVEFREESV(PL_compiling.cop_io) ;
1792 Perl_block_end(pTHX_ I32 floor, OP *seq)
1794 int needblockscope = PL_hints & HINT_BLOCK_SCOPE;
1795 OP* retval = scalarseq(seq);
1796 /* If there were syntax errors, don't try to close a block */
1797 if (PL_yynerrs) return retval;
1799 PL_compiling.op_private = (U8)(PL_hints & HINT_PRIVATE_MASK);
1801 PL_hints |= HINT_BLOCK_SCOPE; /* propagate out */
1809 I32 offset = pad_findmy("$_");
1810 if (offset == NOT_IN_PAD || PAD_COMPNAME_FLAGS(offset) & SVpad_OUR) {
1811 return newSVREF(newGVOP(OP_GV, 0, PL_defgv));
1814 OP *o = newOP(OP_PADSV, 0);
1815 o->op_targ = offset;
1821 Perl_newPROG(pTHX_ OP *o)
1826 PL_eval_root = newUNOP(OP_LEAVEEVAL,
1827 ((PL_in_eval & EVAL_KEEPERR)
1828 ? OPf_SPECIAL : 0), o);
1829 PL_eval_start = linklist(PL_eval_root);
1830 PL_eval_root->op_private |= OPpREFCOUNTED;
1831 OpREFCNT_set(PL_eval_root, 1);
1832 PL_eval_root->op_next = 0;
1833 CALL_PEEP(PL_eval_start);
1836 if (o->op_type == OP_STUB) {
1837 PL_comppad_name = 0;
1842 PL_main_root = scope(sawparens(scalarvoid(o)));
1843 PL_curcop = &PL_compiling;
1844 PL_main_start = LINKLIST(PL_main_root);
1845 PL_main_root->op_private |= OPpREFCOUNTED;
1846 OpREFCNT_set(PL_main_root, 1);
1847 PL_main_root->op_next = 0;
1848 CALL_PEEP(PL_main_start);
1851 /* Register with debugger */
1853 CV *cv = get_cv("DB::postponed", FALSE);
1857 XPUSHs((SV*)CopFILEGV(&PL_compiling));
1859 call_sv((SV*)cv, G_DISCARD);
1866 Perl_localize(pTHX_ OP *o, I32 lex)
1868 if (o->op_flags & OPf_PARENS)
1869 /* [perl #17376]: this appears to be premature, and results in code such as
1870 C< our(%x); > executing in list mode rather than void mode */
1877 if (ckWARN(WARN_PARENTHESIS)
1878 && PL_bufptr > PL_oldbufptr && PL_bufptr[-1] == ',')
1880 char *s = PL_bufptr;
1883 /* some heuristics to detect a potential error */
1884 while (*s && (strchr(", \t\n", *s)))
1888 if (*s && strchr("@$%*", *s) && *++s
1889 && (isALNUM(*s) || UTF8_IS_CONTINUED(*s))) {
1892 while (*s && (isALNUM(*s) || UTF8_IS_CONTINUED(*s)))
1894 while (*s && (strchr(", \t\n", *s)))
1900 if (sigil && (*s == ';' || *s == '=')) {
1901 Perl_warner(aTHX_ packWARN(WARN_PARENTHESIS),
1902 "Parentheses missing around \"%s\" list",
1903 lex ? (PL_in_my == KEY_our ? "our" : "my")
1911 o = mod(o, OP_NULL); /* a bit kludgey */
1913 PL_in_my_stash = Nullhv;
1918 Perl_jmaybe(pTHX_ OP *o)
1920 if (o->op_type == OP_LIST) {
1922 o2 = newSVREF(newGVOP(OP_GV, 0, gv_fetchpv(";", TRUE, SVt_PV))),
1923 o = convert(OP_JOIN, 0, prepend_elem(OP_LIST, o2, o));
1929 Perl_fold_constants(pTHX_ register OP *o)
1932 I32 type = o->op_type;
1935 if (PL_opargs[type] & OA_RETSCALAR)
1937 if (PL_opargs[type] & OA_TARGET && !o->op_targ)
1938 o->op_targ = pad_alloc(type, SVs_PADTMP);
1940 /* integerize op, unless it happens to be C<-foo>.
1941 * XXX should pp_i_negate() do magic string negation instead? */
1942 if ((PL_opargs[type] & OA_OTHERINT) && (PL_hints & HINT_INTEGER)
1943 && !(type == OP_NEGATE && cUNOPo->op_first->op_type == OP_CONST
1944 && (cUNOPo->op_first->op_private & OPpCONST_BARE)))
1946 o->op_ppaddr = PL_ppaddr[type = ++(o->op_type)];
1949 if (!(PL_opargs[type] & OA_FOLDCONST))
1954 /* XXX might want a ck_negate() for this */
1955 cUNOPo->op_first->op_private &= ~OPpCONST_STRICT;
1967 /* XXX what about the numeric ops? */
1968 if (PL_hints & HINT_LOCALE)
1973 goto nope; /* Don't try to run w/ errors */
1975 for (curop = LINKLIST(o); curop != o; curop = LINKLIST(curop)) {
1976 if ((curop->op_type != OP_CONST ||
1977 (curop->op_private & OPpCONST_BARE)) &&
1978 curop->op_type != OP_LIST &&
1979 curop->op_type != OP_SCALAR &&
1980 curop->op_type != OP_NULL &&
1981 curop->op_type != OP_PUSHMARK)
1987 curop = LINKLIST(o);
1991 sv = *(PL_stack_sp--);
1992 if (o->op_targ && sv == PAD_SV(o->op_targ)) /* grab pad temp? */
1993 pad_swipe(o->op_targ, FALSE);
1994 else if (SvTEMP(sv)) { /* grab mortal temp? */
1995 (void)SvREFCNT_inc(sv);
1999 if (type == OP_RV2GV)
2000 return newGVOP(OP_GV, 0, (GV*)sv);
2001 return newSVOP(OP_CONST, 0, sv);
2008 Perl_gen_constant_list(pTHX_ register OP *o)
2011 I32 oldtmps_floor = PL_tmps_floor;
2015 return o; /* Don't attempt to run with errors */
2017 PL_op = curop = LINKLIST(o);
2024 PL_tmps_floor = oldtmps_floor;
2026 o->op_type = OP_RV2AV;
2027 o->op_ppaddr = PL_ppaddr[OP_RV2AV];
2028 o->op_flags &= ~OPf_REF; /* treat \(1..2) like an ordinary list */
2029 o->op_flags |= OPf_PARENS; /* and flatten \(1..2,3) */
2030 o->op_seq = 0; /* needs to be revisited in peep() */
2031 curop = ((UNOP*)o)->op_first;
2032 ((UNOP*)o)->op_first = newSVOP(OP_CONST, 0, SvREFCNT_inc(*PL_stack_sp--));
2039 Perl_convert(pTHX_ I32 type, I32 flags, OP *o)
2041 if (!o || o->op_type != OP_LIST)
2042 o = newLISTOP(OP_LIST, 0, o, Nullop);
2044 o->op_flags &= ~OPf_WANT;
2046 if (!(PL_opargs[type] & OA_MARK))
2047 op_null(cLISTOPo->op_first);
2049 o->op_type = (OPCODE)type;
2050 o->op_ppaddr = PL_ppaddr[type];
2051 o->op_flags |= flags;
2053 o = CHECKOP(type, o);
2054 if (o->op_type != type)
2057 return fold_constants(o);
2060 /* List constructors */
2063 Perl_append_elem(pTHX_ I32 type, OP *first, OP *last)
2071 if (first->op_type != type
2072 || (type == OP_LIST && (first->op_flags & OPf_PARENS)))
2074 return newLISTOP(type, 0, first, last);
2077 if (first->op_flags & OPf_KIDS)
2078 ((LISTOP*)first)->op_last->op_sibling = last;
2080 first->op_flags |= OPf_KIDS;
2081 ((LISTOP*)first)->op_first = last;
2083 ((LISTOP*)first)->op_last = last;
2088 Perl_append_list(pTHX_ I32 type, LISTOP *first, LISTOP *last)
2096 if (first->op_type != type)
2097 return prepend_elem(type, (OP*)first, (OP*)last);
2099 if (last->op_type != type)
2100 return append_elem(type, (OP*)first, (OP*)last);
2102 first->op_last->op_sibling = last->op_first;
2103 first->op_last = last->op_last;
2104 first->op_flags |= (last->op_flags & OPf_KIDS);
2112 Perl_prepend_elem(pTHX_ I32 type, OP *first, OP *last)
2120 if (last->op_type == type) {
2121 if (type == OP_LIST) { /* already a PUSHMARK there */
2122 first->op_sibling = ((LISTOP*)last)->op_first->op_sibling;
2123 ((LISTOP*)last)->op_first->op_sibling = first;
2124 if (!(first->op_flags & OPf_PARENS))
2125 last->op_flags &= ~OPf_PARENS;
2128 if (!(last->op_flags & OPf_KIDS)) {
2129 ((LISTOP*)last)->op_last = first;
2130 last->op_flags |= OPf_KIDS;
2132 first->op_sibling = ((LISTOP*)last)->op_first;
2133 ((LISTOP*)last)->op_first = first;
2135 last->op_flags |= OPf_KIDS;
2139 return newLISTOP(type, 0, first, last);
2145 Perl_newNULLLIST(pTHX)
2147 return newOP(OP_STUB, 0);
2151 Perl_force_list(pTHX_ OP *o)
2153 if (!o || o->op_type != OP_LIST)
2154 o = newLISTOP(OP_LIST, 0, o, Nullop);
2160 Perl_newLISTOP(pTHX_ I32 type, I32 flags, OP *first, OP *last)
2164 NewOp(1101, listop, 1, LISTOP);
2166 listop->op_type = (OPCODE)type;
2167 listop->op_ppaddr = PL_ppaddr[type];
2170 listop->op_flags = (U8)flags;
2174 else if (!first && last)
2177 first->op_sibling = last;
2178 listop->op_first = first;
2179 listop->op_last = last;
2180 if (type == OP_LIST) {
2182 pushop = newOP(OP_PUSHMARK, 0);
2183 pushop->op_sibling = first;
2184 listop->op_first = pushop;
2185 listop->op_flags |= OPf_KIDS;
2187 listop->op_last = pushop;
2190 return CHECKOP(type, listop);
2194 Perl_newOP(pTHX_ I32 type, I32 flags)
2197 NewOp(1101, o, 1, OP);
2198 o->op_type = (OPCODE)type;
2199 o->op_ppaddr = PL_ppaddr[type];
2200 o->op_flags = (U8)flags;
2203 o->op_private = (U8)(0 | (flags >> 8));
2204 if (PL_opargs[type] & OA_RETSCALAR)
2206 if (PL_opargs[type] & OA_TARGET)
2207 o->op_targ = pad_alloc(type, SVs_PADTMP);
2208 return CHECKOP(type, o);
2212 Perl_newUNOP(pTHX_ I32 type, I32 flags, OP *first)
2217 first = newOP(OP_STUB, 0);
2218 if (PL_opargs[type] & OA_MARK)
2219 first = force_list(first);
2221 NewOp(1101, unop, 1, UNOP);
2222 unop->op_type = (OPCODE)type;
2223 unop->op_ppaddr = PL_ppaddr[type];
2224 unop->op_first = first;
2225 unop->op_flags = flags | OPf_KIDS;
2226 unop->op_private = (U8)(1 | (flags >> 8));
2227 unop = (UNOP*) CHECKOP(type, unop);
2231 return fold_constants((OP *) unop);
2235 Perl_newBINOP(pTHX_ I32 type, I32 flags, OP *first, OP *last)
2238 NewOp(1101, binop, 1, BINOP);
2241 first = newOP(OP_NULL, 0);
2243 binop->op_type = (OPCODE)type;
2244 binop->op_ppaddr = PL_ppaddr[type];
2245 binop->op_first = first;
2246 binop->op_flags = flags | OPf_KIDS;
2249 binop->op_private = (U8)(1 | (flags >> 8));
2252 binop->op_private = (U8)(2 | (flags >> 8));
2253 first->op_sibling = last;
2256 binop = (BINOP*)CHECKOP(type, binop);
2257 if (binop->op_next || binop->op_type != (OPCODE)type)
2260 binop->op_last = binop->op_first->op_sibling;
2262 return fold_constants((OP *)binop);
2266 uvcompare(const void *a, const void *b)
2268 if (*((UV *)a) < (*(UV *)b))
2270 if (*((UV *)a) > (*(UV *)b))
2272 if (*((UV *)a+1) < (*(UV *)b+1))
2274 if (*((UV *)a+1) > (*(UV *)b+1))
2280 Perl_pmtrans(pTHX_ OP *o, OP *expr, OP *repl)
2282 SV *tstr = ((SVOP*)expr)->op_sv;
2283 SV *rstr = ((SVOP*)repl)->op_sv;
2286 U8 *t = (U8*)SvPV(tstr, tlen);
2287 U8 *r = (U8*)SvPV(rstr, rlen);
2294 register short *tbl;
2296 PL_hints |= HINT_BLOCK_SCOPE;
2297 complement = o->op_private & OPpTRANS_COMPLEMENT;
2298 del = o->op_private & OPpTRANS_DELETE;
2299 squash = o->op_private & OPpTRANS_SQUASH;
2302 o->op_private |= OPpTRANS_FROM_UTF;
2305 o->op_private |= OPpTRANS_TO_UTF;
2307 if (o->op_private & (OPpTRANS_FROM_UTF|OPpTRANS_TO_UTF)) {
2308 SV* listsv = newSVpvn("# comment\n",10);
2310 U8* tend = t + tlen;
2311 U8* rend = r + rlen;
2325 I32 from_utf = o->op_private & OPpTRANS_FROM_UTF;
2326 I32 to_utf = o->op_private & OPpTRANS_TO_UTF;
2332 tsave = t = bytes_to_utf8(t, &len);
2335 if (!to_utf && rlen) {
2337 rsave = r = bytes_to_utf8(r, &len);
2341 /* There are several snags with this code on EBCDIC:
2342 1. 0xFF is a legal UTF-EBCDIC byte (there are no illegal bytes).
2343 2. scan_const() in toke.c has encoded chars in native encoding which makes
2344 ranges at least in EBCDIC 0..255 range the bottom odd.
2348 U8 tmpbuf[UTF8_MAXLEN+1];
2351 New(1109, cp, 2*tlen, UV);
2353 transv = newSVpvn("",0);
2355 cp[2*i] = utf8n_to_uvuni(t, tend-t, &ulen, 0);
2357 if (t < tend && NATIVE_TO_UTF(*t) == 0xff) {
2359 cp[2*i+1] = utf8n_to_uvuni(t, tend-t, &ulen, 0);
2363 cp[2*i+1] = cp[2*i];
2367 qsort(cp, i, 2*sizeof(UV), uvcompare);
2368 for (j = 0; j < i; j++) {
2370 diff = val - nextmin;
2372 t = uvuni_to_utf8(tmpbuf,nextmin);
2373 sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf);
2375 U8 range_mark = UTF_TO_NATIVE(0xff);
2376 t = uvuni_to_utf8(tmpbuf, val - 1);
2377 sv_catpvn(transv, (char *)&range_mark, 1);
2378 sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf);
2385 t = uvuni_to_utf8(tmpbuf,nextmin);
2386 sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf);
2388 U8 range_mark = UTF_TO_NATIVE(0xff);
2389 sv_catpvn(transv, (char *)&range_mark, 1);
2391 t = uvuni_to_utf8_flags(tmpbuf, 0x7fffffff,
2392 UNICODE_ALLOW_SUPER);
2393 sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf);
2394 t = (U8*)SvPVX(transv);
2395 tlen = SvCUR(transv);
2399 else if (!rlen && !del) {
2400 r = t; rlen = tlen; rend = tend;
2403 if ((!rlen && !del) || t == r ||
2404 (tlen == rlen && memEQ((char *)t, (char *)r, tlen)))
2406 o->op_private |= OPpTRANS_IDENTICAL;
2410 while (t < tend || tfirst <= tlast) {
2411 /* see if we need more "t" chars */
2412 if (tfirst > tlast) {
2413 tfirst = (I32)utf8n_to_uvuni(t, tend - t, &ulen, 0);
2415 if (t < tend && NATIVE_TO_UTF(*t) == 0xff) { /* illegal utf8 val indicates range */
2417 tlast = (I32)utf8n_to_uvuni(t, tend - t, &ulen, 0);
2424 /* now see if we need more "r" chars */
2425 if (rfirst > rlast) {
2427 rfirst = (I32)utf8n_to_uvuni(r, rend - r, &ulen, 0);
2429 if (r < rend && NATIVE_TO_UTF(*r) == 0xff) { /* illegal utf8 val indicates range */
2431 rlast = (I32)utf8n_to_uvuni(r, rend - r, &ulen, 0);
2440 rfirst = rlast = 0xffffffff;
2444 /* now see which range will peter our first, if either. */
2445 tdiff = tlast - tfirst;
2446 rdiff = rlast - rfirst;
2453 if (rfirst == 0xffffffff) {
2454 diff = tdiff; /* oops, pretend rdiff is infinite */
2456 Perl_sv_catpvf(aTHX_ listsv, "%04lx\t%04lx\tXXXX\n",
2457 (long)tfirst, (long)tlast);
2459 Perl_sv_catpvf(aTHX_ listsv, "%04lx\t\tXXXX\n", (long)tfirst);
2463 Perl_sv_catpvf(aTHX_ listsv, "%04lx\t%04lx\t%04lx\n",
2464 (long)tfirst, (long)(tfirst + diff),
2467 Perl_sv_catpvf(aTHX_ listsv, "%04lx\t\t%04lx\n",
2468 (long)tfirst, (long)rfirst);
2470 if (rfirst + diff > max)
2471 max = rfirst + diff;
2473 grows = (tfirst < rfirst &&
2474 UNISKIP(tfirst) < UNISKIP(rfirst + diff));
2486 else if (max > 0xff)
2491 Safefree(cPVOPo->op_pv);
2492 cSVOPo->op_sv = (SV*)swash_init("utf8", "", listsv, bits, none);
2493 SvREFCNT_dec(listsv);
2495 SvREFCNT_dec(transv);
2497 if (!del && havefinal && rlen)
2498 (void)hv_store((HV*)SvRV((cSVOPo->op_sv)), "FINAL", 5,
2499 newSVuv((UV)final), 0);
2502 o->op_private |= OPpTRANS_GROWS;
2514 tbl = (short*)cPVOPo->op_pv;
2516 Zero(tbl, 256, short);
2517 for (i = 0; i < (I32)tlen; i++)
2519 for (i = 0, j = 0; i < 256; i++) {
2521 if (j >= (I32)rlen) {
2530 if (i < 128 && r[j] >= 128)
2540 o->op_private |= OPpTRANS_IDENTICAL;
2542 else if (j >= (I32)rlen)
2545 cPVOPo->op_pv = (char*)Renew(tbl, 0x101+rlen-j, short);
2546 tbl[0x100] = rlen - j;
2547 for (i=0; i < (I32)rlen - j; i++)
2548 tbl[0x101+i] = r[j+i];
2552 if (!rlen && !del) {
2555 o->op_private |= OPpTRANS_IDENTICAL;
2557 else if (!squash && rlen == tlen && memEQ((char*)t, (char*)r, tlen)) {
2558 o->op_private |= OPpTRANS_IDENTICAL;
2560 for (i = 0; i < 256; i++)
2562 for (i = 0, j = 0; i < (I32)tlen; i++,j++) {
2563 if (j >= (I32)rlen) {
2565 if (tbl[t[i]] == -1)
2571 if (tbl[t[i]] == -1) {
2572 if (t[i] < 128 && r[j] >= 128)
2579 o->op_private |= OPpTRANS_GROWS;
2587 Perl_newPMOP(pTHX_ I32 type, I32 flags)
2591 NewOp(1101, pmop, 1, PMOP);
2592 pmop->op_type = (OPCODE)type;
2593 pmop->op_ppaddr = PL_ppaddr[type];
2594 pmop->op_flags = (U8)flags;
2595 pmop->op_private = (U8)(0 | (flags >> 8));
2597 if (PL_hints & HINT_RE_TAINT)
2598 pmop->op_pmpermflags |= PMf_RETAINT;
2599 if (PL_hints & HINT_LOCALE)
2600 pmop->op_pmpermflags |= PMf_LOCALE;
2601 pmop->op_pmflags = pmop->op_pmpermflags;
2606 if(av_len((AV*) PL_regex_pad[0]) > -1) {
2607 repointer = av_pop((AV*)PL_regex_pad[0]);
2608 pmop->op_pmoffset = SvIV(repointer);
2609 SvREPADTMP_off(repointer);
2610 sv_setiv(repointer,0);
2612 repointer = newSViv(0);
2613 av_push(PL_regex_padav,SvREFCNT_inc(repointer));
2614 pmop->op_pmoffset = av_len(PL_regex_padav);
2615 PL_regex_pad = AvARRAY(PL_regex_padav);
2620 /* link into pm list */
2621 if (type != OP_TRANS && PL_curstash) {
2622 pmop->op_pmnext = HvPMROOT(PL_curstash);
2623 HvPMROOT(PL_curstash) = pmop;
2624 PmopSTASH_set(pmop,PL_curstash);
2627 return CHECKOP(type, pmop);
2631 Perl_pmruntime(pTHX_ OP *o, OP *expr, OP *repl)
2635 I32 repl_has_vars = 0;
2637 if (o->op_type == OP_TRANS)
2638 return pmtrans(o, expr, repl);
2640 PL_hints |= HINT_BLOCK_SCOPE;
2643 if (expr->op_type == OP_CONST) {
2645 SV *pat = ((SVOP*)expr)->op_sv;
2646 char *p = SvPV(pat, plen);
2647 if ((o->op_flags & OPf_SPECIAL) && strEQ(p, " ")) {
2648 sv_setpvn(pat, "\\s+", 3);
2649 p = SvPV(pat, plen);
2650 pm->op_pmflags |= PMf_SKIPWHITE;
2653 pm->op_pmdynflags |= PMdf_UTF8;
2654 PM_SETRE(pm, CALLREGCOMP(aTHX_ p, p + plen, pm));
2655 if (strEQ("\\s+", PM_GETRE(pm)->precomp))
2656 pm->op_pmflags |= PMf_WHITE;
2660 if (pm->op_pmflags & PMf_KEEP || !(PL_hints & HINT_RE_EVAL))
2661 expr = newUNOP((!(PL_hints & HINT_RE_EVAL)
2663 : OP_REGCMAYBE),0,expr);
2665 NewOp(1101, rcop, 1, LOGOP);
2666 rcop->op_type = OP_REGCOMP;
2667 rcop->op_ppaddr = PL_ppaddr[OP_REGCOMP];
2668 rcop->op_first = scalar(expr);
2669 rcop->op_flags |= ((PL_hints & HINT_RE_EVAL)
2670 ? (OPf_SPECIAL | OPf_KIDS)
2672 rcop->op_private = 1;
2674 /* /$x/ may cause an eval, since $x might be qr/(?{..})/ */
2677 /* establish postfix order */
2678 if (pm->op_pmflags & PMf_KEEP || !(PL_hints & HINT_RE_EVAL)) {
2680 rcop->op_next = expr;
2681 ((UNOP*)expr)->op_first->op_next = (OP*)rcop;
2684 rcop->op_next = LINKLIST(expr);
2685 expr->op_next = (OP*)rcop;
2688 prepend_elem(o->op_type, scalar((OP*)rcop), o);
2693 if (pm->op_pmflags & PMf_EVAL) {
2695 if (CopLINE(PL_curcop) < (line_t)PL_multi_end)
2696 CopLINE_set(PL_curcop, (line_t)PL_multi_end);
2698 else if (repl->op_type == OP_CONST)
2702 for (curop = LINKLIST(repl); curop!=repl; curop = LINKLIST(curop)) {
2703 if (PL_opargs[curop->op_type] & OA_DANGEROUS) {
2704 if (curop->op_type == OP_GV) {
2705 GV *gv = cGVOPx_gv(curop);
2707 if (strchr("&`'123456789+-\016\022", *GvENAME(gv)))
2710 else if (curop->op_type == OP_RV2CV)
2712 else if (curop->op_type == OP_RV2SV ||
2713 curop->op_type == OP_RV2AV ||
2714 curop->op_type == OP_RV2HV ||
2715 curop->op_type == OP_RV2GV) {
2716 if (lastop && lastop->op_type != OP_GV) /*funny deref?*/
2719 else if (curop->op_type == OP_PADSV ||
2720 curop->op_type == OP_PADAV ||
2721 curop->op_type == OP_PADHV ||
2722 curop->op_type == OP_PADANY) {
2725 else if (curop->op_type == OP_PUSHRE)
2726 ; /* Okay here, dangerous in newASSIGNOP */
2736 || PM_GETRE(pm)->reganch & ROPT_EVAL_SEEN))) {
2737 pm->op_pmflags |= PMf_CONST; /* const for long enough */
2738 pm->op_pmpermflags |= PMf_CONST; /* const for long enough */
2739 prepend_elem(o->op_type, scalar(repl), o);
2742 if (curop == repl && !PM_GETRE(pm)) { /* Has variables. */
2743 pm->op_pmflags |= PMf_MAYBE_CONST;
2744 pm->op_pmpermflags |= PMf_MAYBE_CONST;
2746 NewOp(1101, rcop, 1, LOGOP);
2747 rcop->op_type = OP_SUBSTCONT;
2748 rcop->op_ppaddr = PL_ppaddr[OP_SUBSTCONT];
2749 rcop->op_first = scalar(repl);
2750 rcop->op_flags |= OPf_KIDS;
2751 rcop->op_private = 1;
2754 /* establish postfix order */
2755 rcop->op_next = LINKLIST(repl);
2756 repl->op_next = (OP*)rcop;
2758 pm->op_pmreplroot = scalar((OP*)rcop);
2759 pm->op_pmreplstart = LINKLIST(rcop);
2768 Perl_newSVOP(pTHX_ I32 type, I32 flags, SV *sv)
2771 NewOp(1101, svop, 1, SVOP);
2772 svop->op_type = (OPCODE)type;
2773 svop->op_ppaddr = PL_ppaddr[type];
2775 svop->op_next = (OP*)svop;
2776 svop->op_flags = (U8)flags;
2777 if (PL_opargs[type] & OA_RETSCALAR)
2779 if (PL_opargs[type] & OA_TARGET)
2780 svop->op_targ = pad_alloc(type, SVs_PADTMP);
2781 return CHECKOP(type, svop);
2785 Perl_newPADOP(pTHX_ I32 type, I32 flags, SV *sv)
2788 NewOp(1101, padop, 1, PADOP);
2789 padop->op_type = (OPCODE)type;
2790 padop->op_ppaddr = PL_ppaddr[type];
2791 padop->op_padix = pad_alloc(type, SVs_PADTMP);
2792 SvREFCNT_dec(PAD_SVl(padop->op_padix));
2793 PAD_SETSV(padop->op_padix, sv);
2796 padop->op_next = (OP*)padop;
2797 padop->op_flags = (U8)flags;
2798 if (PL_opargs[type] & OA_RETSCALAR)
2800 if (PL_opargs[type] & OA_TARGET)
2801 padop->op_targ = pad_alloc(type, SVs_PADTMP);
2802 return CHECKOP(type, padop);
2806 Perl_newGVOP(pTHX_ I32 type, I32 flags, GV *gv)
2811 return newPADOP(type, flags, SvREFCNT_inc(gv));
2813 return newSVOP(type, flags, SvREFCNT_inc(gv));
2818 Perl_newPVOP(pTHX_ I32 type, I32 flags, char *pv)
2821 NewOp(1101, pvop, 1, PVOP);
2822 pvop->op_type = (OPCODE)type;
2823 pvop->op_ppaddr = PL_ppaddr[type];
2825 pvop->op_next = (OP*)pvop;
2826 pvop->op_flags = (U8)flags;
2827 if (PL_opargs[type] & OA_RETSCALAR)
2829 if (PL_opargs[type] & OA_TARGET)
2830 pvop->op_targ = pad_alloc(type, SVs_PADTMP);
2831 return CHECKOP(type, pvop);
2835 Perl_package(pTHX_ OP *o)
2840 save_hptr(&PL_curstash);
2841 save_item(PL_curstname);
2843 name = SvPV(cSVOPo->op_sv, len);
2844 PL_curstash = gv_stashpvn(name, len, TRUE);
2845 sv_setpvn(PL_curstname, name, len);
2848 PL_hints |= HINT_BLOCK_SCOPE;
2849 PL_copline = NOLINE;
2854 Perl_utilize(pTHX_ int aver, I32 floor, OP *version, OP *idop, OP *arg)
2860 if (idop->op_type != OP_CONST)
2861 Perl_croak(aTHX_ "Module name must be constant");
2865 if (version != Nullop) {
2866 SV *vesv = ((SVOP*)version)->op_sv;
2868 if (arg == Nullop && !SvNIOKp(vesv)) {
2875 if (version->op_type != OP_CONST || !SvNIOKp(vesv))
2876 Perl_croak(aTHX_ "Version number must be constant number");
2878 /* Make copy of idop so we don't free it twice */
2879 pack = newSVOP(OP_CONST, 0, newSVsv(((SVOP*)idop)->op_sv));
2881 /* Fake up a method call to VERSION */
2882 meth = newSVpvn("VERSION",7);
2883 sv_upgrade(meth, SVt_PVIV);
2884 (void)SvIOK_on(meth);
2885 PERL_HASH(SvUVX(meth), SvPVX(meth), SvCUR(meth));
2886 veop = convert(OP_ENTERSUB, OPf_STACKED|OPf_SPECIAL,
2887 append_elem(OP_LIST,
2888 prepend_elem(OP_LIST, pack, list(version)),
2889 newSVOP(OP_METHOD_NAMED, 0, meth)));
2893 /* Fake up an import/unimport */
2894 if (arg && arg->op_type == OP_STUB)
2895 imop = arg; /* no import on explicit () */
2896 else if (SvNIOKp(((SVOP*)idop)->op_sv)) {
2897 imop = Nullop; /* use 5.0; */
2902 /* Make copy of idop so we don't free it twice */
2903 pack = newSVOP(OP_CONST, 0, newSVsv(((SVOP*)idop)->op_sv));
2905 /* Fake up a method call to import/unimport */
2906 meth = aver ? newSVpvn("import",6) : newSVpvn("unimport", 8);
2907 (void)SvUPGRADE(meth, SVt_PVIV);
2908 (void)SvIOK_on(meth);
2909 PERL_HASH(SvUVX(meth), SvPVX(meth), SvCUR(meth));
2910 imop = convert(OP_ENTERSUB, OPf_STACKED|OPf_SPECIAL,
2911 append_elem(OP_LIST,
2912 prepend_elem(OP_LIST, pack, list(arg)),
2913 newSVOP(OP_METHOD_NAMED, 0, meth)));
2916 /* Fake up the BEGIN {}, which does its thing immediately. */
2918 newSVOP(OP_CONST, 0, newSVpvn("BEGIN", 5)),
2921 append_elem(OP_LINESEQ,
2922 append_elem(OP_LINESEQ,
2923 newSTATEOP(0, Nullch, newUNOP(OP_REQUIRE, 0, idop)),
2924 newSTATEOP(0, Nullch, veop)),
2925 newSTATEOP(0, Nullch, imop) ));
2927 /* The "did you use incorrect case?" warning used to be here.
2928 * The problem is that on case-insensitive filesystems one
2929 * might get false positives for "use" (and "require"):
2930 * "use Strict" or "require CARP" will work. This causes
2931 * portability problems for the script: in case-strict
2932 * filesystems the script will stop working.
2934 * The "incorrect case" warning checked whether "use Foo"
2935 * imported "Foo" to your namespace, but that is wrong, too:
2936 * there is no requirement nor promise in the language that
2937 * a Foo.pm should or would contain anything in package "Foo".
2939 * There is very little Configure-wise that can be done, either:
2940 * the case-sensitivity of the build filesystem of Perl does not
2941 * help in guessing the case-sensitivity of the runtime environment.
2944 PL_hints |= HINT_BLOCK_SCOPE;
2945 PL_copline = NOLINE;
2947 PL_cop_seqmax++; /* Purely for B::*'s benefit */
2951 =head1 Embedding Functions
2953 =for apidoc load_module
2955 Loads the module whose name is pointed to by the string part of name.
2956 Note that the actual module name, not its filename, should be given.
2957 Eg, "Foo::Bar" instead of "Foo/Bar.pm". flags can be any of
2958 PERL_LOADMOD_DENY, PERL_LOADMOD_NOIMPORT, or PERL_LOADMOD_IMPORT_OPS
2959 (or 0 for no flags). ver, if specified, provides version semantics
2960 similar to C<use Foo::Bar VERSION>. The optional trailing SV*
2961 arguments can be used to specify arguments to the module's import()
2962 method, similar to C<use Foo::Bar VERSION LIST>.
2967 Perl_load_module(pTHX_ U32 flags, SV *name, SV *ver, ...)
2970 va_start(args, ver);
2971 vload_module(flags, name, ver, &args);
2975 #ifdef PERL_IMPLICIT_CONTEXT
2977 Perl_load_module_nocontext(U32 flags, SV *name, SV *ver, ...)
2981 va_start(args, ver);
2982 vload_module(flags, name, ver, &args);
2988 Perl_vload_module(pTHX_ U32 flags, SV *name, SV *ver, va_list *args)
2990 OP *modname, *veop, *imop;
2992 modname = newSVOP(OP_CONST, 0, name);
2993 modname->op_private |= OPpCONST_BARE;
2995 veop = newSVOP(OP_CONST, 0, ver);
2999 if (flags & PERL_LOADMOD_NOIMPORT) {
3000 imop = sawparens(newNULLLIST());
3002 else if (flags & PERL_LOADMOD_IMPORT_OPS) {
3003 imop = va_arg(*args, OP*);
3008 sv = va_arg(*args, SV*);
3010 imop = append_elem(OP_LIST, imop, newSVOP(OP_CONST, 0, sv));
3011 sv = va_arg(*args, SV*);
3015 line_t ocopline = PL_copline;
3016 COP *ocurcop = PL_curcop;
3017 int oexpect = PL_expect;
3019 utilize(!(flags & PERL_LOADMOD_DENY), start_subparse(FALSE, 0),
3020 veop, modname, imop);
3021 PL_expect = oexpect;
3022 PL_copline = ocopline;
3023 PL_curcop = ocurcop;
3028 Perl_dofile(pTHX_ OP *term)
3033 gv = gv_fetchpv("do", FALSE, SVt_PVCV);
3034 if (!(gv && GvCVu(gv) && GvIMPORTED_CV(gv)))
3035 gv = gv_fetchpv("CORE::GLOBAL::do", FALSE, SVt_PVCV);
3037 if (gv && GvCVu(gv) && GvIMPORTED_CV(gv)) {
3038 doop = ck_subr(newUNOP(OP_ENTERSUB, OPf_STACKED,
3039 append_elem(OP_LIST, term,
3040 scalar(newUNOP(OP_RV2CV, 0,
3045 doop = newUNOP(OP_DOFILE, 0, scalar(term));
3051 Perl_newSLICEOP(pTHX_ I32 flags, OP *subscript, OP *listval)
3053 return newBINOP(OP_LSLICE, flags,
3054 list(force_list(subscript)),
3055 list(force_list(listval)) );
3059 S_list_assignment(pTHX_ register OP *o)
3064 if (o->op_type == OP_NULL && o->op_flags & OPf_KIDS)
3065 o = cUNOPo->op_first;
3067 if (o->op_type == OP_COND_EXPR) {
3068 I32 t = list_assignment(cLOGOPo->op_first->op_sibling);
3069 I32 f = list_assignment(cLOGOPo->op_first->op_sibling->op_sibling);
3074 yyerror("Assignment to both a list and a scalar");
3078 if (o->op_type == OP_LIST &&
3079 (o->op_flags & OPf_WANT) == OPf_WANT_SCALAR &&
3080 o->op_private & OPpLVAL_INTRO)
3083 if (o->op_type == OP_LIST || o->op_flags & OPf_PARENS ||
3084 o->op_type == OP_RV2AV || o->op_type == OP_RV2HV ||
3085 o->op_type == OP_ASLICE || o->op_type == OP_HSLICE)
3088 if (o->op_type == OP_PADAV || o->op_type == OP_PADHV)
3091 if (o->op_type == OP_RV2SV)
3098 Perl_newASSIGNOP(pTHX_ I32 flags, OP *left, I32 optype, OP *right)
3103 if (optype == OP_ANDASSIGN || optype == OP_ORASSIGN || optype == OP_DORASSIGN) {
3104 return newLOGOP(optype, 0,
3105 mod(scalar(left), optype),
3106 newUNOP(OP_SASSIGN, 0, scalar(right)));
3109 return newBINOP(optype, OPf_STACKED,
3110 mod(scalar(left), optype), scalar(right));
3114 if (list_assignment(left)) {
3118 PL_eval_start = right; /* Grandfathering $[ assignment here. Bletch.*/
3119 left = mod(left, OP_AASSIGN);
3127 curop = list(force_list(left));
3128 o = newBINOP(OP_AASSIGN, flags, list(force_list(right)), curop);
3129 o->op_private = (U8)(0 | (flags >> 8));
3131 /* PL_generation sorcery:
3132 * an assignment like ($a,$b) = ($c,$d) is easier than
3133 * ($a,$b) = ($c,$a), since there is no need for temporary vars.
3134 * To detect whether there are common vars, the global var
3135 * PL_generation is incremented for each assign op we compile.
3136 * Then, while compiling the assign op, we run through all the
3137 * variables on both sides of the assignment, setting a spare slot
3138 * in each of them to PL_generation. If any of them already have
3139 * that value, we know we've got commonality. We could use a
3140 * single bit marker, but then we'd have to make 2 passes, first
3141 * to clear the flag, then to test and set it. To find somewhere
3142 * to store these values, evil chicanery is done with SvCUR().
3145 if (!(left->op_private & OPpLVAL_INTRO)) {
3148 for (curop = LINKLIST(o); curop != o; curop = LINKLIST(curop)) {
3149 if (PL_opargs[curop->op_type] & OA_DANGEROUS) {
3150 if (curop->op_type == OP_GV) {
3151 GV *gv = cGVOPx_gv(curop);
3152 if (gv == PL_defgv || (int)SvCUR(gv) == PL_generation)
3154 SvCUR(gv) = PL_generation;
3156 else if (curop->op_type == OP_PADSV ||
3157 curop->op_type == OP_PADAV ||
3158 curop->op_type == OP_PADHV ||
3159 curop->op_type == OP_PADANY)
3161 if (PAD_COMPNAME_GEN(curop->op_targ)
3162 == (STRLEN)PL_generation)
3164 PAD_COMPNAME_GEN(curop->op_targ)
3168 else if (curop->op_type == OP_RV2CV)
3170 else if (curop->op_type == OP_RV2SV ||
3171 curop->op_type == OP_RV2AV ||
3172 curop->op_type == OP_RV2HV ||
3173 curop->op_type == OP_RV2GV) {
3174 if (lastop->op_type != OP_GV) /* funny deref? */
3177 else if (curop->op_type == OP_PUSHRE) {
3178 if (((PMOP*)curop)->op_pmreplroot) {
3180 GV *gv = (GV*)PAD_SVl(INT2PTR(PADOFFSET,
3181 ((PMOP*)curop)->op_pmreplroot));
3183 GV *gv = (GV*)((PMOP*)curop)->op_pmreplroot;
3185 if (gv == PL_defgv || (int)SvCUR(gv) == PL_generation)
3187 SvCUR(gv) = PL_generation;
3196 o->op_private |= OPpASSIGN_COMMON;
3198 if (right && right->op_type == OP_SPLIT) {
3200 if ((tmpop = ((LISTOP*)right)->op_first) &&
3201 tmpop->op_type == OP_PUSHRE)
3203 PMOP *pm = (PMOP*)tmpop;
3204 if (left->op_type == OP_RV2AV &&
3205 !(left->op_private & OPpLVAL_INTRO) &&
3206 !(o->op_private & OPpASSIGN_COMMON) )
3208 tmpop = ((UNOP*)left)->op_first;
3209 if (tmpop->op_type == OP_GV && !pm->op_pmreplroot) {
3211 pm->op_pmreplroot = INT2PTR(OP*, cPADOPx(tmpop)->op_padix);
3212 cPADOPx(tmpop)->op_padix = 0; /* steal it */
3214 pm->op_pmreplroot = (OP*)cSVOPx(tmpop)->op_sv;
3215 cSVOPx(tmpop)->op_sv = Nullsv; /* steal it */
3217 pm->op_pmflags |= PMf_ONCE;
3218 tmpop = cUNOPo->op_first; /* to list (nulled) */
3219 tmpop = ((UNOP*)tmpop)->op_first; /* to pushmark */
3220 tmpop->op_sibling = Nullop; /* don't free split */
3221 right->op_next = tmpop->op_next; /* fix starting loc */
3222 op_free(o); /* blow off assign */
3223 right->op_flags &= ~OPf_WANT;
3224 /* "I don't know and I don't care." */
3229 if (PL_modcount < RETURN_UNLIMITED_NUMBER &&
3230 ((LISTOP*)right)->op_last->op_type == OP_CONST)
3232 SV *sv = ((SVOP*)((LISTOP*)right)->op_last)->op_sv;
3234 sv_setiv(sv, PL_modcount+1);
3242 right = newOP(OP_UNDEF, 0);
3243 if (right->op_type == OP_READLINE) {
3244 right->op_flags |= OPf_STACKED;
3245 return newBINOP(OP_NULL, flags, mod(scalar(left), OP_SASSIGN), scalar(right));
3248 PL_eval_start = right; /* Grandfathering $[ assignment here. Bletch.*/
3249 o = newBINOP(OP_SASSIGN, flags,
3250 scalar(right), mod(scalar(left), OP_SASSIGN) );
3262 Perl_newSTATEOP(pTHX_ I32 flags, char *label, OP *o)
3264 U32 seq = intro_my();
3267 NewOp(1101, cop, 1, COP);
3268 if (PERLDB_LINE && CopLINE(PL_curcop) && PL_curstash != PL_debstash) {
3269 cop->op_type = OP_DBSTATE;
3270 cop->op_ppaddr = PL_ppaddr[ OP_DBSTATE ];
3273 cop->op_type = OP_NEXTSTATE;
3274 cop->op_ppaddr = PL_ppaddr[ OP_NEXTSTATE ];
3276 cop->op_flags = (U8)flags;
3277 cop->op_private = (U8)(PL_hints & HINT_PRIVATE_MASK);
3279 cop->op_private |= NATIVE_HINTS;
3281 PL_compiling.op_private = cop->op_private;
3282 cop->op_next = (OP*)cop;
3285 cop->cop_label = label;
3286 PL_hints |= HINT_BLOCK_SCOPE;
3289 cop->cop_arybase = PL_curcop->cop_arybase;
3290 if (specialWARN(PL_curcop->cop_warnings))
3291 cop->cop_warnings = PL_curcop->cop_warnings ;
3293 cop->cop_warnings = newSVsv(PL_curcop->cop_warnings) ;
3294 if (specialCopIO(PL_curcop->cop_io))
3295 cop->cop_io = PL_curcop->cop_io;
3297 cop->cop_io = newSVsv(PL_curcop->cop_io) ;
3300 if (PL_copline == NOLINE)
3301 CopLINE_set(cop, CopLINE(PL_curcop));
3303 CopLINE_set(cop, PL_copline);
3304 PL_copline = NOLINE;
3307 CopFILE_set(cop, CopFILE(PL_curcop)); /* XXX share in a pvtable? */
3309 CopFILEGV_set(cop, CopFILEGV(PL_curcop));
3311 CopSTASH_set(cop, PL_curstash);
3313 if (PERLDB_LINE && PL_curstash != PL_debstash) {
3314 SV **svp = av_fetch(CopFILEAV(PL_curcop), (I32)CopLINE(cop), FALSE);
3315 if (svp && *svp != &PL_sv_undef ) {
3316 (void)SvIOK_on(*svp);
3317 SvIVX(*svp) = PTR2IV(cop);
3321 return prepend_elem(OP_LINESEQ, (OP*)cop, o);
3326 Perl_newLOGOP(pTHX_ I32 type, I32 flags, OP *first, OP *other)
3328 return new_logop(type, flags, &first, &other);
3332 S_new_logop(pTHX_ I32 type, I32 flags, OP** firstp, OP** otherp)
3336 OP *first = *firstp;
3337 OP *other = *otherp;
3339 if (type == OP_XOR) /* Not short circuit, but here by precedence. */
3340 return newBINOP(type, flags, scalar(first), scalar(other));
3342 scalarboolean(first);
3343 /* optimize "!a && b" to "a || b", and "!a || b" to "a && b" */
3344 if (first->op_type == OP_NOT && (first->op_flags & OPf_SPECIAL)) {
3345 if (type == OP_AND || type == OP_OR) {
3351 first = *firstp = cUNOPo->op_first;
3353 first->op_next = o->op_next;
3354 cUNOPo->op_first = Nullop;
3358 if (first->op_type == OP_CONST) {
3359 if (first->op_private & OPpCONST_STRICT)
3360 no_bareword_allowed(first);
3361 else if (ckWARN(WARN_BAREWORD) && (first->op_private & OPpCONST_BARE))
3362 Perl_warner(aTHX_ packWARN(WARN_BAREWORD), "Bareword found in conditional");
3363 if ((type == OP_AND) == (SvTRUE(((SVOP*)first)->op_sv))) {
3374 else if (ckWARN(WARN_MISC) && (first->op_flags & OPf_KIDS) &&
3375 type != OP_DOR) /* [#24076] Don't warn for <FH> err FOO. */
3377 OP *k1 = ((UNOP*)first)->op_first;
3378 OP *k2 = k1->op_sibling;
3380 switch (first->op_type)
3383 if (k2 && k2->op_type == OP_READLINE
3384 && (k2->op_flags & OPf_STACKED)
3385 && ((k1->op_flags & OPf_WANT) == OPf_WANT_SCALAR))
3387 warnop = k2->op_type;
3392 if (k1->op_type == OP_READDIR
3393 || k1->op_type == OP_GLOB
3394 || (k1->op_type == OP_NULL && k1->op_targ == OP_GLOB)
3395 || k1->op_type == OP_EACH)
3397 warnop = ((k1->op_type == OP_NULL)
3398 ? (OPCODE)k1->op_targ : k1->op_type);
3403 line_t oldline = CopLINE(PL_curcop);
3404 CopLINE_set(PL_curcop, PL_copline);
3405 Perl_warner(aTHX_ packWARN(WARN_MISC),
3406 "Value of %s%s can be \"0\"; test with defined()",
3408 ((warnop == OP_READLINE || warnop == OP_GLOB)
3409 ? " construct" : "() operator"));
3410 CopLINE_set(PL_curcop, oldline);
3417 if (type == OP_ANDASSIGN || type == OP_ORASSIGN || type == OP_DORASSIGN)
3418 other->op_private |= OPpASSIGN_BACKWARDS; /* other is an OP_SASSIGN */
3420 NewOp(1101, logop, 1, LOGOP);
3422 logop->op_type = (OPCODE)type;
3423 logop->op_ppaddr = PL_ppaddr[type];
3424 logop->op_first = first;
3425 logop->op_flags = flags | OPf_KIDS;
3426 logop->op_other = LINKLIST(other);
3427 logop->op_private = (U8)(1 | (flags >> 8));
3429 /* establish postfix order */
3430 logop->op_next = LINKLIST(first);
3431 first->op_next = (OP*)logop;
3432 first->op_sibling = other;
3434 CHECKOP(type,logop);
3436 o = newUNOP(OP_NULL, 0, (OP*)logop);
3443 Perl_newCONDOP(pTHX_ I32 flags, OP *first, OP *trueop, OP *falseop)
3450 return newLOGOP(OP_AND, 0, first, trueop);
3452 return newLOGOP(OP_OR, 0, first, falseop);
3454 scalarboolean(first);
3455 if (first->op_type == OP_CONST) {
3456 if (first->op_private & OPpCONST_BARE &&
3457 first->op_private & OPpCONST_STRICT) {
3458 no_bareword_allowed(first);
3460 if (SvTRUE(((SVOP*)first)->op_sv)) {
3471 NewOp(1101, logop, 1, LOGOP);
3472 logop->op_type = OP_COND_EXPR;
3473 logop->op_ppaddr = PL_ppaddr[OP_COND_EXPR];
3474 logop->op_first = first;
3475 logop->op_flags = flags | OPf_KIDS;
3476 logop->op_private = (U8)(1 | (flags >> 8));
3477 logop->op_other = LINKLIST(trueop);
3478 logop->op_next = LINKLIST(falseop);
3480 CHECKOP(OP_COND_EXPR, /* that's logop->op_type */
3483 /* establish postfix order */
3484 start = LINKLIST(first);
3485 first->op_next = (OP*)logop;
3487 first->op_sibling = trueop;
3488 trueop->op_sibling = falseop;
3489 o = newUNOP(OP_NULL, 0, (OP*)logop);
3491 trueop->op_next = falseop->op_next = o;
3498 Perl_newRANGE(pTHX_ I32 flags, OP *left, OP *right)
3506 NewOp(1101, range, 1, LOGOP);
3508 range->op_type = OP_RANGE;
3509 range->op_ppaddr = PL_ppaddr[OP_RANGE];
3510 range->op_first = left;
3511 range->op_flags = OPf_KIDS;
3512 leftstart = LINKLIST(left);
3513 range->op_other = LINKLIST(right);
3514 range->op_private = (U8)(1 | (flags >> 8));
3516 left->op_sibling = right;
3518 range->op_next = (OP*)range;
3519 flip = newUNOP(OP_FLIP, flags, (OP*)range);
3520 flop = newUNOP(OP_FLOP, 0, flip);
3521 o = newUNOP(OP_NULL, 0, flop);
3523 range->op_next = leftstart;
3525 left->op_next = flip;
3526 right->op_next = flop;
3528 range->op_targ = pad_alloc(OP_RANGE, SVs_PADMY);
3529 sv_upgrade(PAD_SV(range->op_targ), SVt_PVNV);
3530 flip->op_targ = pad_alloc(OP_RANGE, SVs_PADMY);
3531 sv_upgrade(PAD_SV(flip->op_targ), SVt_PVNV);
3533 flip->op_private = left->op_type == OP_CONST ? OPpFLIP_LINENUM : 0;
3534 flop->op_private = right->op_type == OP_CONST ? OPpFLIP_LINENUM : 0;
3537 if (!flip->op_private || !flop->op_private)
3538 linklist(o); /* blow off optimizer unless constant */
3544 Perl_newLOOPOP(pTHX_ I32 flags, I32 debuggable, OP *expr, OP *block)
3548 int once = block && block->op_flags & OPf_SPECIAL &&
3549 (block->op_type == OP_ENTERSUB || block->op_type == OP_NULL);
3552 if (once && expr->op_type == OP_CONST && !SvTRUE(((SVOP*)expr)->op_sv))
3553 return block; /* do {} while 0 does once */
3554 if (expr->op_type == OP_READLINE || expr->op_type == OP_GLOB
3555 || (expr->op_type == OP_NULL && expr->op_targ == OP_GLOB)) {
3556 expr = newUNOP(OP_DEFINED, 0,
3557 newASSIGNOP(0, newDEFSVOP(), 0, expr) );
3558 } else if (expr->op_flags & OPf_KIDS) {
3559 OP *k1 = ((UNOP*)expr)->op_first;
3560 OP *k2 = (k1) ? k1->op_sibling : NULL;
3561 switch (expr->op_type) {
3563 if (k2 && k2->op_type == OP_READLINE
3564 && (k2->op_flags & OPf_STACKED)
3565 && ((k1->op_flags & OPf_WANT) == OPf_WANT_SCALAR))
3566 expr = newUNOP(OP_DEFINED, 0, expr);
3570 if (k1->op_type == OP_READDIR
3571 || k1->op_type == OP_GLOB
3572 || (k1->op_type == OP_NULL && k1->op_targ == OP_GLOB)
3573 || k1->op_type == OP_EACH)
3574 expr = newUNOP(OP_DEFINED, 0, expr);
3580 listop = append_elem(OP_LINESEQ, block, newOP(OP_UNSTACK, 0));
3581 o = new_logop(OP_AND, 0, &expr, &listop);
3584 ((LISTOP*)listop)->op_last->op_next = LINKLIST(o);
3586 if (once && o != listop)
3587 o->op_next = ((LOGOP*)cUNOPo->op_first)->op_other;
3590 o = newUNOP(OP_NULL, 0, o); /* or do {} while 1 loses outer block */
3592 o->op_flags |= flags;
3594 o->op_flags |= OPf_SPECIAL; /* suppress POPBLOCK curpm restoration*/
3599 Perl_newWHILEOP(pTHX_ I32 flags, I32 debuggable, LOOP *loop, I32 whileline, OP *expr, OP *block, OP *cont)
3607 if (expr && (expr->op_type == OP_READLINE || expr->op_type == OP_GLOB
3608 || (expr->op_type == OP_NULL && expr->op_targ == OP_GLOB))) {
3609 expr = newUNOP(OP_DEFINED, 0,
3610 newASSIGNOP(0, newDEFSVOP(), 0, expr) );
3611 } else if (expr && (expr->op_flags & OPf_KIDS)) {
3612 OP *k1 = ((UNOP*)expr)->op_first;
3613 OP *k2 = (k1) ? k1->op_sibling : NULL;
3614 switch (expr->op_type) {
3616 if (k2 && k2->op_type == OP_READLINE
3617 && (k2->op_flags & OPf_STACKED)
3618 && ((k1->op_flags & OPf_WANT) == OPf_WANT_SCALAR))
3619 expr = newUNOP(OP_DEFINED, 0, expr);
3623 if (k1->op_type == OP_READDIR
3624 || k1->op_type == OP_GLOB
3625 || (k1->op_type == OP_NULL && k1->op_targ == OP_GLOB)
3626 || k1->op_type == OP_EACH)
3627 expr = newUNOP(OP_DEFINED, 0, expr);
3633 block = newOP(OP_NULL, 0);
3635 block = scope(block);
3639 next = LINKLIST(cont);
3642 OP *unstack = newOP(OP_UNSTACK, 0);
3645 cont = append_elem(OP_LINESEQ, cont, unstack);
3648 listop = append_list(OP_LINESEQ, (LISTOP*)block, (LISTOP*)cont);
3649 redo = LINKLIST(listop);
3652 PL_copline = (line_t)whileline;
3654 o = new_logop(OP_AND, 0, &expr, &listop);
3655 if (o == expr && o->op_type == OP_CONST && !SvTRUE(cSVOPo->op_sv)) {
3656 op_free(expr); /* oops, it's a while (0) */
3658 return Nullop; /* listop already freed by new_logop */
3661 ((LISTOP*)listop)->op_last->op_next =
3662 (o == listop ? redo : LINKLIST(o));
3668 NewOp(1101,loop,1,LOOP);
3669 loop->op_type = OP_ENTERLOOP;
3670 loop->op_ppaddr = PL_ppaddr[OP_ENTERLOOP];
3671 loop->op_private = 0;
3672 loop->op_next = (OP*)loop;
3675 o = newBINOP(OP_LEAVELOOP, 0, (OP*)loop, o);
3677 loop->op_redoop = redo;
3678 loop->op_lastop = o;
3679 o->op_private |= loopflags;
3682 loop->op_nextop = next;
3684 loop->op_nextop = o;
3686 o->op_flags |= flags;
3687 o->op_private |= (flags >> 8);
3692 Perl_newFOROP(pTHX_ I32 flags,char *label,line_t forline,OP *sv,OP *expr,OP *block,OP *cont)
3696 PADOFFSET padoff = 0;
3701 if (sv->op_type == OP_RV2SV) { /* symbol table variable */
3702 iterpflags = sv->op_private & OPpOUR_INTRO; /* for our $x () */
3703 sv->op_type = OP_RV2GV;
3704 sv->op_ppaddr = PL_ppaddr[OP_RV2GV];
3706 else if (sv->op_type == OP_PADSV) { /* private variable */
3707 iterpflags = sv->op_private & OPpLVAL_INTRO; /* for my $x () */
3708 padoff = sv->op_targ;
3713 else if (sv->op_type == OP_THREADSV) { /* per-thread variable */
3714 padoff = sv->op_targ;
3716 iterflags |= OPf_SPECIAL;
3721 Perl_croak(aTHX_ "Can't use %s for loop variable", PL_op_desc[sv->op_type]);
3724 I32 offset = pad_findmy("$_");
3725 if (offset == NOT_IN_PAD || PAD_COMPNAME_FLAGS(offset) & SVpad_OUR) {
3726 sv = newGVOP(OP_GV, 0, PL_defgv);
3730 iterpflags = OPpLVAL_INTRO; /* my $_; for () */
3733 if (expr->op_type == OP_RV2AV || expr->op_type == OP_PADAV) {
3734 expr = mod(force_list(scalar(ref(expr, OP_ITER))), OP_GREPSTART);
3735 iterflags |= OPf_STACKED;
3737 else if (expr->op_type == OP_NULL &&
3738 (expr->op_flags & OPf_KIDS) &&
3739 ((BINOP*)expr)->op_first->op_type == OP_FLOP)
3741 /* Basically turn for($x..$y) into the same as for($x,$y), but we
3742 * set the STACKED flag to indicate that these values are to be
3743 * treated as min/max values by 'pp_iterinit'.
3745 UNOP* flip = (UNOP*)((UNOP*)((BINOP*)expr)->op_first)->op_first;
3746 LOGOP* range = (LOGOP*) flip->op_first;
3747 OP* left = range->op_first;
3748 OP* right = left->op_sibling;
3751 range->op_flags &= ~OPf_KIDS;
3752 range->op_first = Nullop;
3754 listop = (LISTOP*)newLISTOP(OP_LIST, 0, left, right);
3755 listop->op_first->op_next = range->op_next;
3756 left->op_next = range->op_other;
3757 right->op_next = (OP*)listop;
3758 listop->op_next = listop->op_first;
3761 expr = (OP*)(listop);
3763 iterflags |= OPf_STACKED;
3766 expr = mod(force_list(expr), OP_GREPSTART);
3770 loop = (LOOP*)list(convert(OP_ENTERITER, iterflags,
3771 append_elem(OP_LIST, expr, scalar(sv))));
3772 assert(!loop->op_next);
3773 /* for my $x () sets OPpLVAL_INTRO;
3774 * for our $x () sets OPpOUR_INTRO */
3775 loop->op_private = (U8)iterpflags;
3776 #ifdef PL_OP_SLAB_ALLOC
3779 NewOp(1234,tmp,1,LOOP);
3780 Copy(loop,tmp,1,LOOP);
3785 Renew(loop, 1, LOOP);
3787 loop->op_targ = padoff;
3788 wop = newWHILEOP(flags, 1, loop, forline, newOP(OP_ITER, 0), block, cont);
3789 PL_copline = forline;
3790 return newSTATEOP(0, label, wop);
3794 Perl_newLOOPEX(pTHX_ I32 type, OP *label)
3799 if (type != OP_GOTO || label->op_type == OP_CONST) {
3800 /* "last()" means "last" */
3801 if (label->op_type == OP_STUB && (label->op_flags & OPf_PARENS))
3802 o = newOP(type, OPf_SPECIAL);
3804 o = newPVOP(type, 0, savepv(label->op_type == OP_CONST
3805 ? SvPVx(((SVOP*)label)->op_sv, n_a)
3811 /* Check whether it's going to be a goto &function */
3812 if (label->op_type == OP_ENTERSUB
3813 && !(label->op_flags & OPf_STACKED))
3814 label = newUNOP(OP_REFGEN, 0, mod(label, OP_REFGEN));
3815 o = newUNOP(type, OPf_STACKED, label);
3817 PL_hints |= HINT_BLOCK_SCOPE;
3822 =for apidoc cv_undef
3824 Clear out all the active components of a CV. This can happen either
3825 by an explicit C<undef &foo>, or by the reference count going to zero.
3826 In the former case, we keep the CvOUTSIDE pointer, so that any anonymous
3827 children can still follow the full lexical scope chain.
3833 Perl_cv_undef(pTHX_ CV *cv)
3836 if (CvFILE(cv) && !CvXSUB(cv)) {
3837 /* for XSUBs CvFILE point directly to static memory; __FILE__ */
3838 Safefree(CvFILE(cv));
3843 if (!CvXSUB(cv) && CvROOT(cv)) {
3845 Perl_croak(aTHX_ "Can't undef active subroutine");
3848 PAD_SAVE_SETNULLPAD();
3850 op_free(CvROOT(cv));
3851 CvROOT(cv) = Nullop;
3854 SvPOK_off((SV*)cv); /* forget prototype */
3859 /* remove CvOUTSIDE unless this is an undef rather than a free */
3860 if (!SvREFCNT(cv) && CvOUTSIDE(cv)) {
3861 if (!CvWEAKOUTSIDE(cv))
3862 SvREFCNT_dec(CvOUTSIDE(cv));
3863 CvOUTSIDE(cv) = Nullcv;
3866 SvREFCNT_dec((SV*)CvXSUBANY(cv).any_ptr);
3872 /* delete all flags except WEAKOUTSIDE */
3873 CvFLAGS(cv) &= CVf_WEAKOUTSIDE;
3877 Perl_cv_ckproto(pTHX_ CV *cv, GV *gv, char *p)
3879 if (((!p != !SvPOK(cv)) || (p && strNE(p, SvPVX(cv)))) && ckWARN_d(WARN_PROTOTYPE)) {
3880 SV* msg = sv_newmortal();
3884 gv_efullname3(name = sv_newmortal(), gv, Nullch);
3885 sv_setpv(msg, "Prototype mismatch:");
3887 Perl_sv_catpvf(aTHX_ msg, " sub %"SVf, name);
3889 Perl_sv_catpvf(aTHX_ msg, " (%"SVf")", (SV *)cv);
3890 sv_catpv(msg, " vs ");
3892 Perl_sv_catpvf(aTHX_ msg, "(%s)", p);
3894 sv_catpv(msg, "none");
3895 Perl_warner(aTHX_ packWARN(WARN_PROTOTYPE), "%"SVf, msg);
3899 static void const_sv_xsub(pTHX_ CV* cv);
3903 =head1 Optree Manipulation Functions
3905 =for apidoc cv_const_sv
3907 If C<cv> is a constant sub eligible for inlining. returns the constant
3908 value returned by the sub. Otherwise, returns NULL.
3910 Constant subs can be created with C<newCONSTSUB> or as described in
3911 L<perlsub/"Constant Functions">.
3916 Perl_cv_const_sv(pTHX_ CV *cv)
3918 if (!cv || !CvCONST(cv))
3920 return (SV*)CvXSUBANY(cv).any_ptr;
3923 /* op_const_sv: examine an optree to determine whether it's in-lineable.
3924 * Can be called in 3 ways:
3927 * look for a single OP_CONST with attached value: return the value
3929 * cv && CvCLONE(cv) && !CvCONST(cv)
3931 * examine the clone prototype, and if contains only a single
3932 * OP_CONST referencing a pad const, or a single PADSV referencing
3933 * an outer lexical, return a non-zero value to indicate the CV is
3934 * a candidate for "constizing" at clone time
3938 * We have just cloned an anon prototype that was marked as a const
3939 * candidiate. Try to grab the current value, and in the case of
3940 * PADSV, ignore it if it has multiple references. Return the value.
3944 Perl_op_const_sv(pTHX_ OP *o, CV *cv)
3951 if (o->op_type == OP_LINESEQ && cLISTOPo->op_first)
3952 o = cLISTOPo->op_first->op_sibling;
3954 for (; o; o = o->op_next) {
3955 OPCODE type = o->op_type;
3957 if (sv && o->op_next == o)
3959 if (o->op_next != o) {
3960 if (type == OP_NEXTSTATE || type == OP_NULL || type == OP_PUSHMARK)
3962 if (type == OP_DBSTATE)
3965 if (type == OP_LEAVESUB || type == OP_RETURN)
3969 if (type == OP_CONST && cSVOPo->op_sv)
3971 else if (cv && type == OP_CONST) {
3972 sv = PAD_BASE_SV(CvPADLIST(cv), o->op_targ);
3976 else if (cv && type == OP_PADSV) {
3977 if (CvCONST(cv)) { /* newly cloned anon */
3978 sv = PAD_BASE_SV(CvPADLIST(cv), o->op_targ);
3979 /* the candidate should have 1 ref from this pad and 1 ref
3980 * from the parent */
3981 if (!sv || SvREFCNT(sv) != 2)
3988 if (PAD_COMPNAME_FLAGS(o->op_targ) & SVf_FAKE)
3989 sv = &PL_sv_undef; /* an arbitrary non-null value */
4000 Perl_newMYSUB(pTHX_ I32 floor, OP *o, OP *proto, OP *attrs, OP *block)
4010 Perl_croak(aTHX_ "\"my sub\" not yet implemented");
4014 Perl_newSUB(pTHX_ I32 floor, OP *o, OP *proto, OP *block)
4016 return Perl_newATTRSUB(aTHX_ floor, o, proto, Nullop, block);
4020 Perl_newATTRSUB(pTHX_ I32 floor, OP *o, OP *proto, OP *attrs, OP *block)
4026 char *ps = proto ? SvPVx(((SVOP*)proto)->op_sv, n_a) : Nullch;
4030 name = o ? SvPVx(cSVOPo->op_sv, n_a) : Nullch;
4031 if (!name && PERLDB_NAMEANON && CopLINE(PL_curcop)) {
4032 SV *sv = sv_newmortal();
4033 Perl_sv_setpvf(aTHX_ sv, "%s[%s:%"IVdf"]",
4034 PL_curstash ? "__ANON__" : "__ANON__::__ANON__",
4035 CopFILE(PL_curcop), (IV)CopLINE(PL_curcop));
4040 gv = gv_fetchpv(name ? name : (aname ? aname :
4041 (PL_curstash ? "__ANON__" : "__ANON__::__ANON__")),
4042 GV_ADDMULTI | ((block || attrs) ? 0 : GV_NOINIT),
4052 if (SvTYPE(gv) != SVt_PVGV) { /* Maybe prototype now, and had at
4053 maximum a prototype before. */
4054 if (SvTYPE(gv) > SVt_NULL) {
4055 if (!SvPOK((SV*)gv) && !(SvIOK((SV*)gv) && SvIVX((SV*)gv) == -1)
4056 && ckWARN_d(WARN_PROTOTYPE))
4058 Perl_warner(aTHX_ packWARN(WARN_PROTOTYPE), "Runaway prototype");
4060 cv_ckproto((CV*)gv, NULL, ps);
4063 sv_setpv((SV*)gv, ps);
4065 sv_setiv((SV*)gv, -1);
4066 SvREFCNT_dec(PL_compcv);
4067 cv = PL_compcv = NULL;
4068 PL_sub_generation++;
4072 cv = (!name || GvCVGEN(gv)) ? Nullcv : GvCV(gv);
4074 #ifdef GV_UNIQUE_CHECK
4075 if (cv && GvUNIQUE(gv) && SvREADONLY(cv)) {
4076 Perl_croak(aTHX_ "Can't define subroutine %s (GV is unique)", name);
4080 if (!block || !ps || *ps || attrs)
4083 const_sv = op_const_sv(block, Nullcv);
4086 bool exists = CvROOT(cv) || CvXSUB(cv);
4088 #ifdef GV_UNIQUE_CHECK
4089 if (exists && GvUNIQUE(gv)) {
4090 Perl_croak(aTHX_ "Can't redefine unique subroutine %s", name);
4094 /* if the subroutine doesn't exist and wasn't pre-declared
4095 * with a prototype, assume it will be AUTOLOADed,
4096 * skipping the prototype check
4098 if (exists || SvPOK(cv))
4099 cv_ckproto(cv, gv, ps);
4100 /* already defined (or promised)? */
4101 if (exists || GvASSUMECV(gv)) {
4102 if (!block && !attrs) {
4103 if (CvFLAGS(PL_compcv)) {
4104 /* might have had built-in attrs applied */
4105 CvFLAGS(cv) |= (CvFLAGS(PL_compcv) & CVf_BUILTIN_ATTRS);
4107 /* just a "sub foo;" when &foo is already defined */
4108 SAVEFREESV(PL_compcv);
4111 /* ahem, death to those who redefine active sort subs */
4112 if (PL_curstackinfo->si_type == PERLSI_SORT && PL_sortcop == CvSTART(cv))
4113 Perl_croak(aTHX_ "Can't redefine active sort subroutine %s", name);
4115 if (ckWARN(WARN_REDEFINE)
4117 && (!const_sv || sv_cmp(cv_const_sv(cv), const_sv))))
4119 line_t oldline = CopLINE(PL_curcop);
4120 if (PL_copline != NOLINE)
4121 CopLINE_set(PL_curcop, PL_copline);
4122 Perl_warner(aTHX_ packWARN(WARN_REDEFINE),
4123 CvCONST(cv) ? "Constant subroutine %s redefined"
4124 : "Subroutine %s redefined", name);
4125 CopLINE_set(PL_curcop, oldline);
4133 SvREFCNT_inc(const_sv);
4135 assert(!CvROOT(cv) && !CvCONST(cv));
4136 sv_setpv((SV*)cv, ""); /* prototype is "" */
4137 CvXSUBANY(cv).any_ptr = const_sv;
4138 CvXSUB(cv) = const_sv_xsub;
4143 cv = newCONSTSUB(NULL, name, const_sv);
4146 SvREFCNT_dec(PL_compcv);
4148 PL_sub_generation++;
4155 /* Need to do a C<use attributes $stash_of_cv,\&cv,@attrs>
4156 * before we clobber PL_compcv.
4160 /* Might have had built-in attributes applied -- propagate them. */
4161 CvFLAGS(cv) |= (CvFLAGS(PL_compcv) & CVf_BUILTIN_ATTRS);
4162 if (CvGV(cv) && GvSTASH(CvGV(cv)))
4163 stash = GvSTASH(CvGV(cv));
4164 else if (CvSTASH(cv))
4165 stash = CvSTASH(cv);
4167 stash = PL_curstash;
4170 /* possibly about to re-define existing subr -- ignore old cv */
4171 rcv = (SV*)PL_compcv;
4172 if (name && GvSTASH(gv))
4173 stash = GvSTASH(gv);
4175 stash = PL_curstash;
4177 apply_attrs(stash, rcv, attrs, FALSE);
4179 if (cv) { /* must reuse cv if autoloaded */
4181 /* got here with just attrs -- work done, so bug out */
4182 SAVEFREESV(PL_compcv);
4185 /* transfer PL_compcv to cv */
4187 CvFLAGS(cv) = CvFLAGS(PL_compcv);
4188 if (!CvWEAKOUTSIDE(cv))
4189 SvREFCNT_dec(CvOUTSIDE(cv));
4190 CvOUTSIDE(cv) = CvOUTSIDE(PL_compcv);
4191 CvOUTSIDE_SEQ(cv) = CvOUTSIDE_SEQ(PL_compcv);
4192 CvOUTSIDE(PL_compcv) = 0;
4193 CvPADLIST(cv) = CvPADLIST(PL_compcv);
4194 CvPADLIST(PL_compcv) = 0;
4195 /* inner references to PL_compcv must be fixed up ... */
4196 pad_fixup_inner_anons(CvPADLIST(cv), PL_compcv, cv);
4197 /* ... before we throw it away */
4198 SvREFCNT_dec(PL_compcv);
4200 if (PERLDB_INTER)/* Advice debugger on the new sub. */
4201 ++PL_sub_generation;
4208 PL_sub_generation++;
4212 CvFILE_set_from_cop(cv, PL_curcop);
4213 CvSTASH(cv) = PL_curstash;
4216 sv_setpv((SV*)cv, ps);
4218 if (PL_error_count) {
4222 char *s = strrchr(name, ':');
4224 if (strEQ(s, "BEGIN")) {
4226 "BEGIN not safe after errors--compilation aborted";
4227 if (PL_in_eval & EVAL_KEEPERR)
4228 Perl_croak(aTHX_ not_safe);
4230 /* force display of errors found but not reported */
4231 sv_catpv(ERRSV, not_safe);
4232 Perl_croak(aTHX_ "%"SVf, ERRSV);
4241 CvROOT(cv) = newUNOP(OP_LEAVESUBLV, 0,
4242 mod(scalarseq(block), OP_LEAVESUBLV));
4245 /* This makes sub {}; work as expected. */
4246 if (block->op_type == OP_STUB) {
4248 block = newSTATEOP(0, Nullch, 0);
4250 CvROOT(cv) = newUNOP(OP_LEAVESUB, 0, scalarseq(block));
4252 CvROOT(cv)->op_private |= OPpREFCOUNTED;
4253 OpREFCNT_set(CvROOT(cv), 1);
4254 CvSTART(cv) = LINKLIST(CvROOT(cv));
4255 CvROOT(cv)->op_next = 0;
4256 CALL_PEEP(CvSTART(cv));
4258 /* now that optimizer has done its work, adjust pad values */
4260 pad_tidy(CvCLONE(cv) ? padtidy_SUBCLONE : padtidy_SUB);
4263 assert(!CvCONST(cv));
4264 if (ps && !*ps && op_const_sv(block, cv))
4268 if (name || aname) {
4270 char *tname = (name ? name : aname);
4272 if (PERLDB_SUBLINE && PL_curstash != PL_debstash) {
4273 SV *sv = NEWSV(0,0);
4274 SV *tmpstr = sv_newmortal();
4275 GV *db_postponed = gv_fetchpv("DB::postponed", GV_ADDMULTI, SVt_PVHV);
4279 Perl_sv_setpvf(aTHX_ sv, "%s:%ld-%ld",
4281 (long)PL_subline, (long)CopLINE(PL_curcop));
4282 gv_efullname3(tmpstr, gv, Nullch);
4283 hv_store(GvHV(PL_DBsub), SvPVX(tmpstr), SvCUR(tmpstr), sv, 0);
4284 hv = GvHVn(db_postponed);
4285 if (HvFILL(hv) > 0 && hv_exists(hv, SvPVX(tmpstr), SvCUR(tmpstr))
4286 && (pcv = GvCV(db_postponed)))
4292 call_sv((SV*)pcv, G_DISCARD);
4296 if ((s = strrchr(tname,':')))
4301 if (*s != 'B' && *s != 'E' && *s != 'C' && *s != 'I')
4304 if (strEQ(s, "BEGIN") && !PL_error_count) {
4305 I32 oldscope = PL_scopestack_ix;
4307 SAVECOPFILE(&PL_compiling);
4308 SAVECOPLINE(&PL_compiling);
4311 PL_beginav = newAV();
4312 DEBUG_x( dump_sub(gv) );
4313 av_push(PL_beginav, (SV*)cv);
4314 GvCV(gv) = 0; /* cv has been hijacked */
4315 call_list(oldscope, PL_beginav);
4317 PL_curcop = &PL_compiling;
4318 PL_compiling.op_private = (U8)(PL_hints & HINT_PRIVATE_MASK);
4321 else if (strEQ(s, "END") && !PL_error_count) {
4324 DEBUG_x( dump_sub(gv) );
4325 av_unshift(PL_endav, 1);
4326 av_store(PL_endav, 0, (SV*)cv);
4327 GvCV(gv) = 0; /* cv has been hijacked */
4329 else if (strEQ(s, "CHECK") && !PL_error_count) {
4331 PL_checkav = newAV();
4332 DEBUG_x( dump_sub(gv) );
4333 if (PL_main_start && ckWARN(WARN_VOID))
4334 Perl_warner(aTHX_ packWARN(WARN_VOID), "Too late to run CHECK block");
4335 av_unshift(PL_checkav, 1);
4336 av_store(PL_checkav, 0, (SV*)cv);
4337 GvCV(gv) = 0; /* cv has been hijacked */
4339 else if (strEQ(s, "INIT") && !PL_error_count) {
4341 PL_initav = newAV();
4342 DEBUG_x( dump_sub(gv) );
4343 if (PL_main_start && ckWARN(WARN_VOID))
4344 Perl_warner(aTHX_ packWARN(WARN_VOID), "Too late to run INIT block");
4345 av_push(PL_initav, (SV*)cv);
4346 GvCV(gv) = 0; /* cv has been hijacked */
4351 PL_copline = NOLINE;
4356 /* XXX unsafe for threads if eval_owner isn't held */
4358 =for apidoc newCONSTSUB
4360 Creates a constant sub equivalent to Perl C<sub FOO () { 123 }> which is
4361 eligible for inlining at compile-time.
4367 Perl_newCONSTSUB(pTHX_ HV *stash, char *name, SV *sv)
4373 SAVECOPLINE(PL_curcop);
4374 CopLINE_set(PL_curcop, PL_copline);
4377 PL_hints &= ~HINT_BLOCK_SCOPE;
4380 SAVESPTR(PL_curstash);
4381 SAVECOPSTASH(PL_curcop);
4382 PL_curstash = stash;
4383 CopSTASH_set(PL_curcop,stash);
4386 cv = newXS(name, const_sv_xsub, savepv(CopFILE(PL_curcop)));
4387 CvXSUBANY(cv).any_ptr = sv;
4389 sv_setpv((SV*)cv, ""); /* prototype is "" */
4392 CopSTASH_free(PL_curcop);
4400 =for apidoc U||newXS
4402 Used by C<xsubpp> to hook up XSUBs as Perl subs.
4408 Perl_newXS(pTHX_ char *name, XSUBADDR_t subaddr, char *filename)
4410 GV *gv = gv_fetchpv(name ? name :
4411 (PL_curstash ? "__ANON__" : "__ANON__::__ANON__"),
4412 GV_ADDMULTI, SVt_PVCV);
4416 Perl_croak(aTHX_ "panic: no address for '%s' in '%s'", name, filename);
4418 if ((cv = (name ? GvCV(gv) : Nullcv))) {
4420 /* just a cached method */
4424 else if (CvROOT(cv) || CvXSUB(cv) || GvASSUMECV(gv)) {
4425 /* already defined (or promised) */
4426 if (ckWARN(WARN_REDEFINE) && !(CvGV(cv) && GvSTASH(CvGV(cv))
4427 && strEQ(HvNAME(GvSTASH(CvGV(cv))), "autouse"))) {
4428 line_t oldline = CopLINE(PL_curcop);
4429 if (PL_copline != NOLINE)
4430 CopLINE_set(PL_curcop, PL_copline);
4431 Perl_warner(aTHX_ packWARN(WARN_REDEFINE),
4432 CvCONST(cv) ? "Constant subroutine %s redefined"
4433 : "Subroutine %s redefined"
4435 CopLINE_set(PL_curcop, oldline);
4442 if (cv) /* must reuse cv if autoloaded */
4445 cv = (CV*)NEWSV(1105,0);
4446 sv_upgrade((SV *)cv, SVt_PVCV);
4450 PL_sub_generation++;
4454 (void)gv_fetchfile(filename);
4455 CvFILE(cv) = filename; /* NOTE: not copied, as it is expected to be
4456 an external constant string */
4457 CvXSUB(cv) = subaddr;
4460 char *s = strrchr(name,':');
4466 if (*s != 'B' && *s != 'E' && *s != 'C' && *s != 'I')
4469 if (strEQ(s, "BEGIN")) {
4471 PL_beginav = newAV();
4472 av_push(PL_beginav, (SV*)cv);
4473 GvCV(gv) = 0; /* cv has been hijacked */
4475 else if (strEQ(s, "END")) {
4478 av_unshift(PL_endav, 1);
4479 av_store(PL_endav, 0, (SV*)cv);
4480 GvCV(gv) = 0; /* cv has been hijacked */
4482 else if (strEQ(s, "CHECK")) {
4484 PL_checkav = newAV();
4485 if (PL_main_start && ckWARN(WARN_VOID))
4486 Perl_warner(aTHX_ packWARN(WARN_VOID), "Too late to run CHECK block");
4487 av_unshift(PL_checkav, 1);
4488 av_store(PL_checkav, 0, (SV*)cv);
4489 GvCV(gv) = 0; /* cv has been hijacked */
4491 else if (strEQ(s, "INIT")) {
4493 PL_initav = newAV();
4494 if (PL_main_start && ckWARN(WARN_VOID))
4495 Perl_warner(aTHX_ packWARN(WARN_VOID), "Too late to run INIT block");
4496 av_push(PL_initav, (SV*)cv);
4497 GvCV(gv) = 0; /* cv has been hijacked */
4508 Perl_newFORM(pTHX_ I32 floor, OP *o, OP *block)
4516 name = SvPVx(cSVOPo->op_sv, n_a);
4519 gv = gv_fetchpv(name,TRUE, SVt_PVFM);
4520 #ifdef GV_UNIQUE_CHECK
4522 Perl_croak(aTHX_ "Bad symbol for form (GV is unique)");
4526 if ((cv = GvFORM(gv))) {
4527 if (ckWARN(WARN_REDEFINE)) {
4528 line_t oldline = CopLINE(PL_curcop);
4529 if (PL_copline != NOLINE)
4530 CopLINE_set(PL_curcop, PL_copline);
4531 Perl_warner(aTHX_ packWARN(WARN_REDEFINE), "Format %s redefined",name);
4532 CopLINE_set(PL_curcop, oldline);
4539 CvFILE_set_from_cop(cv, PL_curcop);
4542 pad_tidy(padtidy_FORMAT);
4543 CvROOT(cv) = newUNOP(OP_LEAVEWRITE, 0, scalarseq(block));
4544 CvROOT(cv)->op_private |= OPpREFCOUNTED;
4545 OpREFCNT_set(CvROOT(cv), 1);
4546 CvSTART(cv) = LINKLIST(CvROOT(cv));
4547 CvROOT(cv)->op_next = 0;
4548 CALL_PEEP(CvSTART(cv));
4550 PL_copline = NOLINE;
4555 Perl_newANONLIST(pTHX_ OP *o)
4557 return newUNOP(OP_REFGEN, 0,
4558 mod(list(convert(OP_ANONLIST, 0, o)), OP_REFGEN));
4562 Perl_newANONHASH(pTHX_ OP *o)
4564 return newUNOP(OP_REFGEN, 0,
4565 mod(list(convert(OP_ANONHASH, 0, o)), OP_REFGEN));
4569 Perl_newANONSUB(pTHX_ I32 floor, OP *proto, OP *block)
4571 return newANONATTRSUB(floor, proto, Nullop, block);
4575 Perl_newANONATTRSUB(pTHX_ I32 floor, OP *proto, OP *attrs, OP *block)
4577 return newUNOP(OP_REFGEN, 0,
4578 newSVOP(OP_ANONCODE, 0,
4579 (SV*)newATTRSUB(floor, 0, proto, attrs, block)));
4583 Perl_oopsAV(pTHX_ OP *o)
4585 switch (o->op_type) {
4587 o->op_type = OP_PADAV;
4588 o->op_ppaddr = PL_ppaddr[OP_PADAV];
4589 return ref(o, OP_RV2AV);
4592 o->op_type = OP_RV2AV;
4593 o->op_ppaddr = PL_ppaddr[OP_RV2AV];
4598 if (ckWARN_d(WARN_INTERNAL))
4599 Perl_warner(aTHX_ packWARN(WARN_INTERNAL), "oops: oopsAV");
4606 Perl_oopsHV(pTHX_ OP *o)
4608 switch (o->op_type) {
4611 o->op_type = OP_PADHV;
4612 o->op_ppaddr = PL_ppaddr[OP_PADHV];
4613 return ref(o, OP_RV2HV);
4617 o->op_type = OP_RV2HV;
4618 o->op_ppaddr = PL_ppaddr[OP_RV2HV];
4623 if (ckWARN_d(WARN_INTERNAL))
4624 Perl_warner(aTHX_ packWARN(WARN_INTERNAL), "oops: oopsHV");
4631 Perl_newAVREF(pTHX_ OP *o)
4633 if (o->op_type == OP_PADANY) {
4634 o->op_type = OP_PADAV;
4635 o->op_ppaddr = PL_ppaddr[OP_PADAV];
4638 else if ((o->op_type == OP_RV2AV || o->op_type == OP_PADAV)
4639 && ckWARN(WARN_DEPRECATED)) {
4640 Perl_warner(aTHX_ packWARN(WARN_DEPRECATED),
4641 "Using an array as a reference is deprecated");
4643 return newUNOP(OP_RV2AV, 0, scalar(o));
4647 Perl_newGVREF(pTHX_ I32 type, OP *o)
4649 if (type == OP_MAPSTART || type == OP_GREPSTART || type == OP_SORT)
4650 return newUNOP(OP_NULL, 0, o);
4651 return ref(newUNOP(OP_RV2GV, OPf_REF, o), type);
4655 Perl_newHVREF(pTHX_ OP *o)
4657 if (o->op_type == OP_PADANY) {
4658 o->op_type = OP_PADHV;
4659 o->op_ppaddr = PL_ppaddr[OP_PADHV];
4662 else if ((o->op_type == OP_RV2HV || o->op_type == OP_PADHV)
4663 && ckWARN(WARN_DEPRECATED)) {
4664 Perl_warner(aTHX_ packWARN(WARN_DEPRECATED),
4665 "Using a hash as a reference is deprecated");
4667 return newUNOP(OP_RV2HV, 0, scalar(o));
4671 Perl_oopsCV(pTHX_ OP *o)
4673 Perl_croak(aTHX_ "NOT IMPL LINE %d",__LINE__);
4679 Perl_newCVREF(pTHX_ I32 flags, OP *o)
4681 return newUNOP(OP_RV2CV, flags, scalar(o));
4685 Perl_newSVREF(pTHX_ OP *o)
4687 if (o->op_type == OP_PADANY) {
4688 o->op_type = OP_PADSV;
4689 o->op_ppaddr = PL_ppaddr[OP_PADSV];
4692 else if (o->op_type == OP_THREADSV && !(o->op_flags & OPpDONE_SVREF)) {
4693 o->op_flags |= OPpDONE_SVREF;
4696 return newUNOP(OP_RV2SV, 0, scalar(o));
4699 /* Check routines. */
4702 Perl_ck_anoncode(pTHX_ OP *o)
4704 cSVOPo->op_targ = pad_add_anon(cSVOPo->op_sv, o->op_type);
4705 cSVOPo->op_sv = Nullsv;
4710 Perl_ck_bitop(pTHX_ OP *o)
4712 #define OP_IS_NUMCOMPARE(op) \
4713 ((op) == OP_LT || (op) == OP_I_LT || \
4714 (op) == OP_GT || (op) == OP_I_GT || \
4715 (op) == OP_LE || (op) == OP_I_LE || \
4716 (op) == OP_GE || (op) == OP_I_GE || \
4717 (op) == OP_EQ || (op) == OP_I_EQ || \
4718 (op) == OP_NE || (op) == OP_I_NE || \
4719 (op) == OP_NCMP || (op) == OP_I_NCMP)
4720 o->op_private = (U8)(PL_hints & HINT_PRIVATE_MASK);
4721 if (!(o->op_flags & OPf_STACKED) /* Not an assignment */
4722 && (o->op_type == OP_BIT_OR
4723 || o->op_type == OP_BIT_AND
4724 || o->op_type == OP_BIT_XOR))
4726 OP * left = cBINOPo->op_first;
4727 OP * right = left->op_sibling;
4728 if ((OP_IS_NUMCOMPARE(left->op_type) &&
4729 (left->op_flags & OPf_PARENS) == 0) ||
4730 (OP_IS_NUMCOMPARE(right->op_type) &&
4731 (right->op_flags & OPf_PARENS) == 0))
4732 if (ckWARN(WARN_PRECEDENCE))
4733 Perl_warner(aTHX_ packWARN(WARN_PRECEDENCE),
4734 "Possible precedence problem on bitwise %c operator",
4735 o->op_type == OP_BIT_OR ? '|'
4736 : o->op_type == OP_BIT_AND ? '&' : '^'
4743 Perl_ck_concat(pTHX_ OP *o)
4745 OP *kid = cUNOPo->op_first;
4746 if (kid->op_type == OP_CONCAT && !(kid->op_private & OPpTARGET_MY) &&
4747 !(kUNOP->op_first->op_flags & OPf_MOD))
4748 o->op_flags |= OPf_STACKED;
4753 Perl_ck_spair(pTHX_ OP *o)
4755 if (o->op_flags & OPf_KIDS) {
4758 OPCODE type = o->op_type;
4759 o = modkids(ck_fun(o), type);
4760 kid = cUNOPo->op_first;
4761 newop = kUNOP->op_first->op_sibling;
4763 (newop->op_sibling ||
4764 !(PL_opargs[newop->op_type] & OA_RETSCALAR) ||
4765 newop->op_type == OP_PADAV || newop->op_type == OP_PADHV ||
4766 newop->op_type == OP_RV2AV || newop->op_type == OP_RV2HV)) {
4770 op_free(kUNOP->op_first);
4771 kUNOP->op_first = newop;
4773 o->op_ppaddr = PL_ppaddr[++o->op_type];
4778 Perl_ck_delete(pTHX_ OP *o)
4782 if (o->op_flags & OPf_KIDS) {
4783 OP *kid = cUNOPo->op_first;
4784 switch (kid->op_type) {
4786 o->op_flags |= OPf_SPECIAL;
4789 o->op_private |= OPpSLICE;
4792 o->op_flags |= OPf_SPECIAL;
4797 Perl_croak(aTHX_ "%s argument is not a HASH or ARRAY element or slice",
4806 Perl_ck_die(pTHX_ OP *o)
4809 if (VMSISH_HUSHED) o->op_private |= OPpHUSH_VMSISH;
4815 Perl_ck_eof(pTHX_ OP *o)
4817 I32 type = o->op_type;
4819 if (o->op_flags & OPf_KIDS) {
4820 if (cLISTOPo->op_first->op_type == OP_STUB) {
4822 o = newUNOP(type, OPf_SPECIAL, newGVOP(OP_GV, 0, PL_argvgv));
4830 Perl_ck_eval(pTHX_ OP *o)
4832 PL_hints |= HINT_BLOCK_SCOPE;
4833 if (o->op_flags & OPf_KIDS) {
4834 SVOP *kid = (SVOP*)cUNOPo->op_first;
4837 o->op_flags &= ~OPf_KIDS;
4840 else if (kid->op_type == OP_LINESEQ || kid->op_type == OP_STUB) {
4843 cUNOPo->op_first = 0;
4846 NewOp(1101, enter, 1, LOGOP);
4847 enter->op_type = OP_ENTERTRY;
4848 enter->op_ppaddr = PL_ppaddr[OP_ENTERTRY];
4849 enter->op_private = 0;
4851 /* establish postfix order */
4852 enter->op_next = (OP*)enter;
4854 o = prepend_elem(OP_LINESEQ, (OP*)enter, (OP*)kid);
4855 o->op_type = OP_LEAVETRY;
4856 o->op_ppaddr = PL_ppaddr[OP_LEAVETRY];
4857 enter->op_other = o;
4867 o = newUNOP(OP_ENTEREVAL, 0, newDEFSVOP());
4869 o->op_targ = (PADOFFSET)PL_hints;
4874 Perl_ck_exit(pTHX_ OP *o)
4877 HV *table = GvHV(PL_hintgv);
4879 SV **svp = hv_fetch(table, "vmsish_exit", 11, FALSE);
4880 if (svp && *svp && SvTRUE(*svp))
4881 o->op_private |= OPpEXIT_VMSISH;
4883 if (VMSISH_HUSHED) o->op_private |= OPpHUSH_VMSISH;
4889 Perl_ck_exec(pTHX_ OP *o)
4892 if (o->op_flags & OPf_STACKED) {
4894 kid = cUNOPo->op_first->op_sibling;
4895 if (kid->op_type == OP_RV2GV)
4904 Perl_ck_exists(pTHX_ OP *o)
4907 if (o->op_flags & OPf_KIDS) {
4908 OP *kid = cUNOPo->op_first;
4909 if (kid->op_type == OP_ENTERSUB) {
4910 (void) ref(kid, o->op_type);
4911 if (kid->op_type != OP_RV2CV && !PL_error_count)
4912 Perl_croak(aTHX_ "%s argument is not a subroutine name",
4914 o->op_private |= OPpEXISTS_SUB;
4916 else if (kid->op_type == OP_AELEM)
4917 o->op_flags |= OPf_SPECIAL;
4918 else if (kid->op_type != OP_HELEM)
4919 Perl_croak(aTHX_ "%s argument is not a HASH or ARRAY element",
4928 Perl_ck_gvconst(pTHX_ register OP *o)
4930 o = fold_constants(o);
4931 if (o->op_type == OP_CONST)
4938 Perl_ck_rvconst(pTHX_ register OP *o)
4940 SVOP *kid = (SVOP*)cUNOPo->op_first;
4942 o->op_private |= (PL_hints & HINT_STRICT_REFS);
4943 if (kid->op_type == OP_CONST) {
4947 SV *kidsv = kid->op_sv;
4950 /* Is it a constant from cv_const_sv()? */
4951 if (SvROK(kidsv) && SvREADONLY(kidsv)) {
4952 SV *rsv = SvRV(kidsv);
4953 int svtype = SvTYPE(rsv);
4954 char *badtype = Nullch;
4956 switch (o->op_type) {
4958 if (svtype > SVt_PVMG)
4959 badtype = "a SCALAR";
4962 if (svtype != SVt_PVAV)
4963 badtype = "an ARRAY";
4966 if (svtype != SVt_PVHV)
4970 if (svtype != SVt_PVCV)
4975 Perl_croak(aTHX_ "Constant is not %s reference", badtype);
4978 name = SvPV(kidsv, n_a);
4979 if ((PL_hints & HINT_STRICT_REFS) && (kid->op_private & OPpCONST_BARE)) {
4980 char *badthing = Nullch;
4981 switch (o->op_type) {
4983 badthing = "a SCALAR";
4986 badthing = "an ARRAY";
4989 badthing = "a HASH";
4994 "Can't use bareword (\"%s\") as %s ref while \"strict refs\" in use",
4998 * This is a little tricky. We only want to add the symbol if we
4999 * didn't add it in the lexer. Otherwise we get duplicate strict
5000 * warnings. But if we didn't add it in the lexer, we must at
5001 * least pretend like we wanted to add it even if it existed before,
5002 * or we get possible typo warnings. OPpCONST_ENTERED says
5003 * whether the lexer already added THIS instance of this symbol.
5005 iscv = (o->op_type == OP_RV2CV) * 2;
5007 gv = gv_fetchpv(name,
5008 iscv | !(kid->op_private & OPpCONST_ENTERED),
5011 : o->op_type == OP_RV2SV
5013 : o->op_type == OP_RV2AV
5015 : o->op_type == OP_RV2HV
5018 } while (!gv && !(kid->op_private & OPpCONST_ENTERED) && !iscv++);
5020 kid->op_type = OP_GV;
5021 SvREFCNT_dec(kid->op_sv);
5023 /* XXX hack: dependence on sizeof(PADOP) <= sizeof(SVOP) */
5024 kPADOP->op_padix = pad_alloc(OP_GV, SVs_PADTMP);
5025 SvREFCNT_dec(PAD_SVl(kPADOP->op_padix));
5027 PAD_SETSV(kPADOP->op_padix, (SV*) SvREFCNT_inc(gv));
5029 kid->op_sv = SvREFCNT_inc(gv);
5031 kid->op_private = 0;
5032 kid->op_ppaddr = PL_ppaddr[OP_GV];
5039 Perl_ck_ftst(pTHX_ OP *o)
5041 I32 type = o->op_type;
5043 if (o->op_flags & OPf_REF) {
5046 else if (o->op_flags & OPf_KIDS && cUNOPo->op_first->op_type != OP_STUB) {
5047 SVOP *kid = (SVOP*)cUNOPo->op_first;
5049 if (kid->op_type == OP_CONST && (kid->op_private & OPpCONST_BARE)) {
5051 OP *newop = newGVOP(type, OPf_REF,
5052 gv_fetchpv(SvPVx(kid->op_sv, n_a), TRUE, SVt_PVIO));
5057 if ((PL_hints & HINT_FILETEST_ACCESS) &&
5058 OP_IS_FILETEST_ACCESS(o))
5059 o->op_private |= OPpFT_ACCESS;
5064 if (type == OP_FTTTY)
5065 o = newGVOP(type, OPf_REF, PL_stdingv);
5067 o = newUNOP(type, 0, newDEFSVOP());
5073 Perl_ck_fun(pTHX_ OP *o)
5079 int type = o->op_type;
5080 register I32 oa = PL_opargs[type] >> OASHIFT;
5082 if (o->op_flags & OPf_STACKED) {
5083 if ((oa & OA_OPTIONAL) && (oa >> 4) && !((oa >> 4) & OA_OPTIONAL))
5086 return no_fh_allowed(o);
5089 if (o->op_flags & OPf_KIDS) {
5091 tokid = &cLISTOPo->op_first;
5092 kid = cLISTOPo->op_first;
5093 if (kid->op_type == OP_PUSHMARK ||
5094 (kid->op_type == OP_NULL && kid->op_targ == OP_PUSHMARK))
5096 tokid = &kid->op_sibling;
5097 kid = kid->op_sibling;
5099 if (!kid && PL_opargs[type] & OA_DEFGV)
5100 *tokid = kid = newDEFSVOP();
5104 sibl = kid->op_sibling;
5107 /* list seen where single (scalar) arg expected? */
5108 if (numargs == 1 && !(oa >> 4)
5109 && kid->op_type == OP_LIST && type != OP_SCALAR)
5111 return too_many_arguments(o,PL_op_desc[type]);
5124 if ((type == OP_PUSH || type == OP_UNSHIFT)
5125 && !kid->op_sibling && ckWARN(WARN_SYNTAX))
5126 Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
5127 "Useless use of %s with no values",
5130 if (kid->op_type == OP_CONST &&
5131 (kid->op_private & OPpCONST_BARE))
5133 char *name = SvPVx(((SVOP*)kid)->op_sv, n_a);
5134 OP *newop = newAVREF(newGVOP(OP_GV, 0,
5135 gv_fetchpv(name, TRUE, SVt_PVAV) ));
5136 if (ckWARN2(WARN_DEPRECATED, WARN_SYNTAX))
5137 Perl_warner(aTHX_ packWARN2(WARN_DEPRECATED, WARN_SYNTAX),
5138 "Array @%s missing the @ in argument %"IVdf" of %s()",
5139 name, (IV)numargs, PL_op_desc[type]);
5142 kid->op_sibling = sibl;
5145 else if (kid->op_type != OP_RV2AV && kid->op_type != OP_PADAV)
5146 bad_type(numargs, "array", PL_op_desc[type], kid);
5150 if (kid->op_type == OP_CONST &&
5151 (kid->op_private & OPpCONST_BARE))
5153 char *name = SvPVx(((SVOP*)kid)->op_sv, n_a);
5154 OP *newop = newHVREF(newGVOP(OP_GV, 0,
5155 gv_fetchpv(name, TRUE, SVt_PVHV) ));
5156 if (ckWARN2(WARN_DEPRECATED, WARN_SYNTAX))
5157 Perl_warner(aTHX_ packWARN2(WARN_DEPRECATED, WARN_SYNTAX),
5158 "Hash %%%s missing the %% in argument %"IVdf" of %s()",
5159 name, (IV)numargs, PL_op_desc[type]);
5162 kid->op_sibling = sibl;
5165 else if (kid->op_type != OP_RV2HV && kid->op_type != OP_PADHV)
5166 bad_type(numargs, "hash", PL_op_desc[type], kid);
5171 OP *newop = newUNOP(OP_NULL, 0, kid);
5172 kid->op_sibling = 0;
5174 newop->op_next = newop;
5176 kid->op_sibling = sibl;
5181 if (kid->op_type != OP_GV && kid->op_type != OP_RV2GV) {
5182 if (kid->op_type == OP_CONST &&
5183 (kid->op_private & OPpCONST_BARE))
5185 OP *newop = newGVOP(OP_GV, 0,
5186 gv_fetchpv(SvPVx(((SVOP*)kid)->op_sv, n_a), TRUE,
5188 if (!(o->op_private & 1) && /* if not unop */
5189 kid == cLISTOPo->op_last)
5190 cLISTOPo->op_last = newop;
5194 else if (kid->op_type == OP_READLINE) {
5195 /* neophyte patrol: open(<FH>), close(<FH>) etc. */
5196 bad_type(numargs, "HANDLE", OP_DESC(o), kid);
5199 I32 flags = OPf_SPECIAL;
5203 /* is this op a FH constructor? */
5204 if (is_handle_constructor(o,numargs)) {
5205 char *name = Nullch;
5209 /* Set a flag to tell rv2gv to vivify
5210 * need to "prove" flag does not mean something
5211 * else already - NI-S 1999/05/07
5214 if (kid->op_type == OP_PADSV) {
5215 name = PAD_COMPNAME_PV(kid->op_targ);
5216 /* SvCUR of a pad namesv can't be trusted
5217 * (see PL_generation), so calc its length
5223 else if (kid->op_type == OP_RV2SV
5224 && kUNOP->op_first->op_type == OP_GV)
5226 GV *gv = cGVOPx_gv(kUNOP->op_first);
5228 len = GvNAMELEN(gv);
5230 else if (kid->op_type == OP_AELEM
5231 || kid->op_type == OP_HELEM)
5236 if ((op = ((BINOP*)kid)->op_first)) {
5237 SV *tmpstr = Nullsv;
5239 kid->op_type == OP_AELEM ?
5241 if (((op->op_type == OP_RV2AV) ||
5242 (op->op_type == OP_RV2HV)) &&
5243 (op = ((UNOP*)op)->op_first) &&
5244 (op->op_type == OP_GV)) {
5245 /* packagevar $a[] or $h{} */
5246 GV *gv = cGVOPx_gv(op);
5254 else if (op->op_type == OP_PADAV
5255 || op->op_type == OP_PADHV) {
5256 /* lexicalvar $a[] or $h{} */
5258 PAD_COMPNAME_PV(op->op_targ);
5268 name = SvPV(tmpstr, len);
5273 name = "__ANONIO__";
5280 targ = pad_alloc(OP_RV2GV, SVs_PADTMP);
5281 namesv = PAD_SVl(targ);
5282 (void)SvUPGRADE(namesv, SVt_PV);
5284 sv_setpvn(namesv, "$", 1);
5285 sv_catpvn(namesv, name, len);
5288 kid->op_sibling = 0;
5289 kid = newUNOP(OP_RV2GV, flags, scalar(kid));
5290 kid->op_targ = targ;
5291 kid->op_private |= priv;
5293 kid->op_sibling = sibl;
5299 mod(scalar(kid), type);
5303 tokid = &kid->op_sibling;
5304 kid = kid->op_sibling;
5306 o->op_private |= numargs;
5308 return too_many_arguments(o,OP_DESC(o));
5311 else if (PL_opargs[type] & OA_DEFGV) {
5313 return newUNOP(type, 0, newDEFSVOP());
5317 while (oa & OA_OPTIONAL)
5319 if (oa && oa != OA_LIST)
5320 return too_few_arguments(o,OP_DESC(o));
5326 Perl_ck_glob(pTHX_ OP *o)
5331 if ((o->op_flags & OPf_KIDS) && !cLISTOPo->op_first->op_sibling)
5332 append_elem(OP_GLOB, o, newDEFSVOP());
5334 if (!((gv = gv_fetchpv("glob", FALSE, SVt_PVCV))
5335 && GvCVu(gv) && GvIMPORTED_CV(gv)))
5337 gv = gv_fetchpv("CORE::GLOBAL::glob", FALSE, SVt_PVCV);
5340 #if !defined(PERL_EXTERNAL_GLOB)
5341 /* XXX this can be tightened up and made more failsafe. */
5342 if (!(gv && GvCVu(gv) && GvIMPORTED_CV(gv))) {
5345 Perl_load_module(aTHX_ PERL_LOADMOD_NOIMPORT,
5346 newSVpvn("File::Glob", 10), Nullsv, Nullsv, Nullsv);
5347 gv = gv_fetchpv("CORE::GLOBAL::glob", FALSE, SVt_PVCV);
5348 glob_gv = gv_fetchpv("File::Glob::csh_glob", FALSE, SVt_PVCV);
5349 GvCV(gv) = GvCV(glob_gv);
5350 SvREFCNT_inc((SV*)GvCV(gv));
5351 GvIMPORTED_CV_on(gv);
5354 #endif /* PERL_EXTERNAL_GLOB */
5356 if (gv && GvCVu(gv) && GvIMPORTED_CV(gv)) {
5357 append_elem(OP_GLOB, o,
5358 newSVOP(OP_CONST, 0, newSViv(PL_glob_index++)));
5359 o->op_type = OP_LIST;
5360 o->op_ppaddr = PL_ppaddr[OP_LIST];
5361 cLISTOPo->op_first->op_type = OP_PUSHMARK;
5362 cLISTOPo->op_first->op_ppaddr = PL_ppaddr[OP_PUSHMARK];
5363 cLISTOPo->op_first->op_targ = 0;
5364 o = newUNOP(OP_ENTERSUB, OPf_STACKED,
5365 append_elem(OP_LIST, o,
5366 scalar(newUNOP(OP_RV2CV, 0,
5367 newGVOP(OP_GV, 0, gv)))));
5368 o = newUNOP(OP_NULL, 0, ck_subr(o));
5369 o->op_targ = OP_GLOB; /* hint at what it used to be */
5372 gv = newGVgen("main");
5374 append_elem(OP_GLOB, o, newGVOP(OP_GV, 0, gv));
5380 Perl_ck_grep(pTHX_ OP *o)
5384 OPCODE type = o->op_type == OP_GREPSTART ? OP_GREPWHILE : OP_MAPWHILE;
5387 o->op_ppaddr = PL_ppaddr[OP_GREPSTART];
5388 NewOp(1101, gwop, 1, LOGOP);
5390 if (o->op_flags & OPf_STACKED) {
5393 kid = cLISTOPo->op_first->op_sibling;
5394 for (k = cLISTOPo->op_first->op_sibling->op_next; k; k = k->op_next) {
5397 kid->op_next = (OP*)gwop;
5398 o->op_flags &= ~OPf_STACKED;
5400 kid = cLISTOPo->op_first->op_sibling;
5401 if (type == OP_MAPWHILE)
5408 kid = cLISTOPo->op_first->op_sibling;
5409 if (kid->op_type != OP_NULL)
5410 Perl_croak(aTHX_ "panic: ck_grep");
5411 kid = kUNOP->op_first;
5413 gwop->op_type = type;
5414 gwop->op_ppaddr = PL_ppaddr[type];
5415 gwop->op_first = listkids(o);
5416 gwop->op_flags |= OPf_KIDS;
5417 gwop->op_other = LINKLIST(kid);
5418 kid->op_next = (OP*)gwop;
5419 offset = pad_findmy("$_");
5420 if (offset == NOT_IN_PAD || PAD_COMPNAME_FLAGS(offset) & SVpad_OUR) {
5421 o->op_private = gwop->op_private = 0;
5422 gwop->op_targ = pad_alloc(type, SVs_PADTMP);
5425 o->op_private = gwop->op_private = OPpGREP_LEX;
5426 gwop->op_targ = o->op_targ = offset;
5429 kid = cLISTOPo->op_first->op_sibling;
5430 if (!kid || !kid->op_sibling)
5431 return too_few_arguments(o,OP_DESC(o));
5432 for (kid = kid->op_sibling; kid; kid = kid->op_sibling)
5433 mod(kid, OP_GREPSTART);
5439 Perl_ck_index(pTHX_ OP *o)
5441 if (o->op_flags & OPf_KIDS) {
5442 OP *kid = cLISTOPo->op_first->op_sibling; /* get past pushmark */
5444 kid = kid->op_sibling; /* get past "big" */
5445 if (kid && kid->op_type == OP_CONST)
5446 fbm_compile(((SVOP*)kid)->op_sv, 0);
5452 Perl_ck_lengthconst(pTHX_ OP *o)
5454 /* XXX length optimization goes here */
5459 Perl_ck_lfun(pTHX_ OP *o)
5461 OPCODE type = o->op_type;
5462 return modkids(ck_fun(o), type);
5466 Perl_ck_defined(pTHX_ OP *o) /* 19990527 MJD */
5468 if ((o->op_flags & OPf_KIDS) && ckWARN2(WARN_DEPRECATED, WARN_SYNTAX)) {
5469 switch (cUNOPo->op_first->op_type) {
5471 /* This is needed for
5472 if (defined %stash::)
5473 to work. Do not break Tk.
5475 break; /* Globals via GV can be undef */
5477 case OP_AASSIGN: /* Is this a good idea? */
5478 Perl_warner(aTHX_ packWARN2(WARN_DEPRECATED, WARN_SYNTAX),
5479 "defined(@array) is deprecated");
5480 Perl_warner(aTHX_ packWARN2(WARN_DEPRECATED, WARN_SYNTAX),
5481 "\t(Maybe you should just omit the defined()?)\n");
5484 /* This is needed for
5485 if (defined %stash::)
5486 to work. Do not break Tk.
5488 break; /* Globals via GV can be undef */
5490 Perl_warner(aTHX_ packWARN2(WARN_DEPRECATED, WARN_SYNTAX),
5491 "defined(%%hash) is deprecated");
5492 Perl_warner(aTHX_ packWARN2(WARN_DEPRECATED, WARN_SYNTAX),
5493 "\t(Maybe you should just omit the defined()?)\n");
5504 Perl_ck_rfun(pTHX_ OP *o)
5506 OPCODE type = o->op_type;
5507 return refkids(ck_fun(o), type);
5511 Perl_ck_listiob(pTHX_ OP *o)
5515 kid = cLISTOPo->op_first;
5518 kid = cLISTOPo->op_first;
5520 if (kid->op_type == OP_PUSHMARK)
5521 kid = kid->op_sibling;
5522 if (kid && o->op_flags & OPf_STACKED)
5523 kid = kid->op_sibling;
5524 else if (kid && !kid->op_sibling) { /* print HANDLE; */
5525 if (kid->op_type == OP_CONST && kid->op_private & OPpCONST_BARE) {
5526 o->op_flags |= OPf_STACKED; /* make it a filehandle */
5527 kid = newUNOP(OP_RV2GV, OPf_REF, scalar(kid));
5528 cLISTOPo->op_first->op_sibling = kid;
5529 cLISTOPo->op_last = kid;
5530 kid = kid->op_sibling;
5535 append_elem(o->op_type, o, newDEFSVOP());
5541 Perl_ck_sassign(pTHX_ OP *o)
5543 OP *kid = cLISTOPo->op_first;
5544 /* has a disposable target? */
5545 if ((PL_opargs[kid->op_type] & OA_TARGLEX)
5546 && !(kid->op_flags & OPf_STACKED)
5547 /* Cannot steal the second time! */
5548 && !(kid->op_private & OPpTARGET_MY))
5550 OP *kkid = kid->op_sibling;
5552 /* Can just relocate the target. */
5553 if (kkid && kkid->op_type == OP_PADSV
5554 && !(kkid->op_private & OPpLVAL_INTRO))
5556 kid->op_targ = kkid->op_targ;
5558 /* Now we do not need PADSV and SASSIGN. */
5559 kid->op_sibling = o->op_sibling; /* NULL */
5560 cLISTOPo->op_first = NULL;
5563 kid->op_private |= OPpTARGET_MY; /* Used for context settings */
5571 Perl_ck_match(pTHX_ OP *o)
5573 if (o->op_type != OP_QR) {
5574 I32 offset = pad_findmy("$_");
5575 if (offset != NOT_IN_PAD && !(PAD_COMPNAME_FLAGS(offset) & SVpad_OUR)) {
5576 o->op_targ = offset;
5577 o->op_private |= OPpTARGET_MY;
5580 if (o->op_type == OP_MATCH || o->op_type == OP_QR)
5581 o->op_private |= OPpRUNTIME;
5586 Perl_ck_method(pTHX_ OP *o)
5588 OP *kid = cUNOPo->op_first;
5589 if (kid->op_type == OP_CONST) {
5590 SV* sv = kSVOP->op_sv;
5591 if (!(strchr(SvPVX(sv), ':') || strchr(SvPVX(sv), '\''))) {
5593 if (!SvREADONLY(sv) || !SvFAKE(sv)) {
5594 sv = newSVpvn_share(SvPVX(sv), SvCUR(sv), 0);
5597 kSVOP->op_sv = Nullsv;
5599 cmop = newSVOP(OP_METHOD_NAMED, 0, sv);
5608 Perl_ck_null(pTHX_ OP *o)
5614 Perl_ck_open(pTHX_ OP *o)
5616 HV *table = GvHV(PL_hintgv);
5620 svp = hv_fetch(table, "open_IN", 7, FALSE);
5622 mode = mode_from_discipline(*svp);
5623 if (mode & O_BINARY)
5624 o->op_private |= OPpOPEN_IN_RAW;
5625 else if (mode & O_TEXT)
5626 o->op_private |= OPpOPEN_IN_CRLF;
5629 svp = hv_fetch(table, "open_OUT", 8, FALSE);
5631 mode = mode_from_discipline(*svp);
5632 if (mode & O_BINARY)
5633 o->op_private |= OPpOPEN_OUT_RAW;
5634 else if (mode & O_TEXT)
5635 o->op_private |= OPpOPEN_OUT_CRLF;
5638 if (o->op_type == OP_BACKTICK)
5641 /* In case of three-arg dup open remove strictness
5642 * from the last arg if it is a bareword. */
5643 OP *first = cLISTOPx(o)->op_first; /* The pushmark. */
5644 OP *last = cLISTOPx(o)->op_last; /* The bareword. */
5648 if ((last->op_type == OP_CONST) && /* The bareword. */
5649 (last->op_private & OPpCONST_BARE) &&
5650 (last->op_private & OPpCONST_STRICT) &&
5651 (oa = first->op_sibling) && /* The fh. */
5652 (oa = oa->op_sibling) && /* The mode. */
5653 SvPOK(((SVOP*)oa)->op_sv) &&
5654 (mode = SvPVX(((SVOP*)oa)->op_sv)) &&
5655 mode[0] == '>' && mode[1] == '&' && /* A dup open. */
5656 (last == oa->op_sibling)) /* The bareword. */
5657 last->op_private &= ~OPpCONST_STRICT;
5663 Perl_ck_repeat(pTHX_ OP *o)
5665 if (cBINOPo->op_first->op_flags & OPf_PARENS) {
5666 o->op_private |= OPpREPEAT_DOLIST;
5667 cBINOPo->op_first = force_list(cBINOPo->op_first);
5675 Perl_ck_require(pTHX_ OP *o)
5679 if (o->op_flags & OPf_KIDS) { /* Shall we supply missing .pm? */
5680 SVOP *kid = (SVOP*)cUNOPo->op_first;
5682 if (kid->op_type == OP_CONST && (kid->op_private & OPpCONST_BARE)) {
5684 for (s = SvPVX(kid->op_sv); *s; s++) {
5685 if (*s == ':' && s[1] == ':') {
5687 Move(s+2, s+1, strlen(s+2)+1, char);
5688 --SvCUR(kid->op_sv);
5691 if (SvREADONLY(kid->op_sv)) {
5692 SvREADONLY_off(kid->op_sv);
5693 sv_catpvn(kid->op_sv, ".pm", 3);
5694 SvREADONLY_on(kid->op_sv);
5697 sv_catpvn(kid->op_sv, ".pm", 3);
5701 /* handle override, if any */
5702 gv = gv_fetchpv("require", FALSE, SVt_PVCV);
5703 if (!(gv && GvCVu(gv) && GvIMPORTED_CV(gv)))
5704 gv = gv_fetchpv("CORE::GLOBAL::require", FALSE, SVt_PVCV);
5706 if (gv && GvCVu(gv) && GvIMPORTED_CV(gv)) {
5707 OP *kid = cUNOPo->op_first;
5708 cUNOPo->op_first = 0;
5710 return ck_subr(newUNOP(OP_ENTERSUB, OPf_STACKED,
5711 append_elem(OP_LIST, kid,
5712 scalar(newUNOP(OP_RV2CV, 0,
5721 Perl_ck_return(pTHX_ OP *o)
5724 if (CvLVALUE(PL_compcv)) {
5725 for (kid = cLISTOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
5726 mod(kid, OP_LEAVESUBLV);
5733 Perl_ck_retarget(pTHX_ OP *o)
5735 Perl_croak(aTHX_ "NOT IMPL LINE %d",__LINE__);
5742 Perl_ck_select(pTHX_ OP *o)
5745 if (o->op_flags & OPf_KIDS) {
5746 kid = cLISTOPo->op_first->op_sibling; /* get past pushmark */
5747 if (kid && kid->op_sibling) {
5748 o->op_type = OP_SSELECT;
5749 o->op_ppaddr = PL_ppaddr[OP_SSELECT];
5751 return fold_constants(o);
5755 kid = cLISTOPo->op_first->op_sibling; /* get past pushmark */
5756 if (kid && kid->op_type == OP_RV2GV)
5757 kid->op_private &= ~HINT_STRICT_REFS;
5762 Perl_ck_shift(pTHX_ OP *o)
5764 I32 type = o->op_type;
5766 if (!(o->op_flags & OPf_KIDS)) {
5770 argop = newUNOP(OP_RV2AV, 0,
5771 scalar(newGVOP(OP_GV, 0, CvUNIQUE(PL_compcv) ? PL_argvgv : PL_defgv)));
5772 return newUNOP(type, 0, scalar(argop));
5774 return scalar(modkids(ck_fun(o), type));
5778 Perl_ck_sort(pTHX_ OP *o)
5782 if (o->op_type == OP_SORT && o->op_flags & OPf_STACKED)
5784 firstkid = cLISTOPo->op_first->op_sibling; /* get past pushmark */
5785 if (o->op_flags & OPf_STACKED) { /* may have been cleared */
5787 OP *kid = cUNOPx(firstkid)->op_first; /* get past null */
5789 if (kid->op_type == OP_SCOPE || kid->op_type == OP_LEAVE) {
5791 if (kid->op_type == OP_SCOPE) {
5795 else if (kid->op_type == OP_LEAVE) {
5796 if (o->op_type == OP_SORT) {
5797 op_null(kid); /* wipe out leave */
5800 for (k = kLISTOP->op_first->op_next; k; k = k->op_next) {
5801 if (k->op_next == kid)
5803 /* don't descend into loops */
5804 else if (k->op_type == OP_ENTERLOOP
5805 || k->op_type == OP_ENTERITER)
5807 k = cLOOPx(k)->op_lastop;
5812 kid->op_next = 0; /* just disconnect the leave */
5813 k = kLISTOP->op_first;
5818 if (o->op_type == OP_SORT) {
5819 /* provide scalar context for comparison function/block */
5825 o->op_flags |= OPf_SPECIAL;
5827 else if (kid->op_type == OP_RV2SV || kid->op_type == OP_PADSV)
5830 firstkid = firstkid->op_sibling;
5833 /* provide list context for arguments */
5834 if (o->op_type == OP_SORT)
5841 S_simplify_sort(pTHX_ OP *o)
5843 register OP *kid = cLISTOPo->op_first->op_sibling; /* get past pushmark */
5847 if (!(o->op_flags & OPf_STACKED))
5849 GvMULTI_on(gv_fetchpv("a", TRUE, SVt_PV));
5850 GvMULTI_on(gv_fetchpv("b", TRUE, SVt_PV));
5851 kid = kUNOP->op_first; /* get past null */
5852 if (kid->op_type != OP_SCOPE)
5854 kid = kLISTOP->op_last; /* get past scope */
5855 switch(kid->op_type) {
5863 k = kid; /* remember this node*/
5864 if (kBINOP->op_first->op_type != OP_RV2SV)
5866 kid = kBINOP->op_first; /* get past cmp */
5867 if (kUNOP->op_first->op_type != OP_GV)
5869 kid = kUNOP->op_first; /* get past rv2sv */
5871 if (GvSTASH(gv) != PL_curstash)
5873 if (strEQ(GvNAME(gv), "a"))
5875 else if (strEQ(GvNAME(gv), "b"))
5879 kid = k; /* back to cmp */
5880 if (kBINOP->op_last->op_type != OP_RV2SV)
5882 kid = kBINOP->op_last; /* down to 2nd arg */
5883 if (kUNOP->op_first->op_type != OP_GV)
5885 kid = kUNOP->op_first; /* get past rv2sv */
5887 if (GvSTASH(gv) != PL_curstash
5889 ? strNE(GvNAME(gv), "a")
5890 : strNE(GvNAME(gv), "b")))
5892 o->op_flags &= ~(OPf_STACKED | OPf_SPECIAL);
5894 o->op_private |= OPpSORT_REVERSE;
5895 if (k->op_type == OP_NCMP)
5896 o->op_private |= OPpSORT_NUMERIC;
5897 if (k->op_type == OP_I_NCMP)
5898 o->op_private |= OPpSORT_NUMERIC | OPpSORT_INTEGER;
5899 kid = cLISTOPo->op_first->op_sibling;
5900 cLISTOPo->op_first->op_sibling = kid->op_sibling; /* bypass old block */
5901 op_free(kid); /* then delete it */
5905 Perl_ck_split(pTHX_ OP *o)
5909 if (o->op_flags & OPf_STACKED)
5910 return no_fh_allowed(o);
5912 kid = cLISTOPo->op_first;
5913 if (kid->op_type != OP_NULL)
5914 Perl_croak(aTHX_ "panic: ck_split");
5915 kid = kid->op_sibling;
5916 op_free(cLISTOPo->op_first);
5917 cLISTOPo->op_first = kid;
5919 cLISTOPo->op_first = kid = newSVOP(OP_CONST, 0, newSVpvn(" ", 1));
5920 cLISTOPo->op_last = kid; /* There was only one element previously */
5923 if (kid->op_type != OP_MATCH || kid->op_flags & OPf_STACKED) {
5924 OP *sibl = kid->op_sibling;
5925 kid->op_sibling = 0;
5926 kid = pmruntime( newPMOP(OP_MATCH, OPf_SPECIAL), kid, Nullop);
5927 if (cLISTOPo->op_first == cLISTOPo->op_last)
5928 cLISTOPo->op_last = kid;
5929 cLISTOPo->op_first = kid;
5930 kid->op_sibling = sibl;
5933 kid->op_type = OP_PUSHRE;
5934 kid->op_ppaddr = PL_ppaddr[OP_PUSHRE];
5936 if (ckWARN(WARN_REGEXP) && ((PMOP *)kid)->op_pmflags & PMf_GLOBAL) {
5937 Perl_warner(aTHX_ packWARN(WARN_REGEXP),
5938 "Use of /g modifier is meaningless in split");
5941 if (!kid->op_sibling)
5942 append_elem(OP_SPLIT, o, newDEFSVOP());
5944 kid = kid->op_sibling;
5947 if (!kid->op_sibling)
5948 append_elem(OP_SPLIT, o, newSVOP(OP_CONST, 0, newSViv(0)));
5950 kid = kid->op_sibling;
5953 if (kid->op_sibling)
5954 return too_many_arguments(o,OP_DESC(o));
5960 Perl_ck_join(pTHX_ OP *o)
5962 if (ckWARN(WARN_SYNTAX)) {
5963 OP *kid = cLISTOPo->op_first->op_sibling;
5964 if (kid && kid->op_type == OP_MATCH) {
5965 char *pmstr = "STRING";
5966 if (PM_GETRE(kPMOP))
5967 pmstr = PM_GETRE(kPMOP)->precomp;
5968 Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
5969 "/%s/ should probably be written as \"%s\"",
5977 Perl_ck_subr(pTHX_ OP *o)
5979 OP *prev = ((cUNOPo->op_first->op_sibling)
5980 ? cUNOPo : ((UNOP*)cUNOPo->op_first))->op_first;
5981 OP *o2 = prev->op_sibling;
5988 I32 contextclass = 0;
5993 o->op_private |= OPpENTERSUB_HASTARG;
5994 for (cvop = o2; cvop->op_sibling; cvop = cvop->op_sibling) ;
5995 if (cvop->op_type == OP_RV2CV) {
5997 o->op_private |= (cvop->op_private & OPpENTERSUB_AMPER);
5998 op_null(cvop); /* disable rv2cv */
5999 tmpop = (SVOP*)((UNOP*)cvop)->op_first;
6000 if (tmpop->op_type == OP_GV && !(o->op_private & OPpENTERSUB_AMPER)) {
6001 GV *gv = cGVOPx_gv(tmpop);
6004 tmpop->op_private |= OPpEARLY_CV;
6007 namegv = CvANON(cv) ? gv : CvGV(cv);
6008 proto = SvPV((SV*)cv, n_a);
6010 if (CvASSERTION(cv)) {
6011 if (PL_hints & HINT_ASSERTING) {
6012 if (PERLDB_ASSERTION && PL_curstash != PL_debstash)
6013 o->op_private |= OPpENTERSUB_DB;
6017 if (ckWARN(WARN_ASSERTIONS) && !(PL_hints & HINT_ASSERTIONSSEEN)) {
6018 Perl_warner(aTHX_ packWARN(WARN_ASSERTIONS),
6019 "Impossible to activate assertion call");
6026 else if (cvop->op_type == OP_METHOD || cvop->op_type == OP_METHOD_NAMED) {
6027 if (o2->op_type == OP_CONST)
6028 o2->op_private &= ~OPpCONST_STRICT;
6029 else if (o2->op_type == OP_LIST) {
6030 OP *o = ((UNOP*)o2)->op_first->op_sibling;
6031 if (o && o->op_type == OP_CONST)
6032 o->op_private &= ~OPpCONST_STRICT;
6035 o->op_private |= (PL_hints & HINT_STRICT_REFS);
6036 if (PERLDB_SUB && PL_curstash != PL_debstash)
6037 o->op_private |= OPpENTERSUB_DB;
6038 while (o2 != cvop) {
6042 return too_many_arguments(o, gv_ename(namegv));
6060 if (o2->op_type != OP_REFGEN && o2->op_type != OP_UNDEF)
6062 arg == 1 ? "block or sub {}" : "sub {}",
6063 gv_ename(namegv), o2);
6066 /* '*' allows any scalar type, including bareword */
6069 if (o2->op_type == OP_RV2GV)
6070 goto wrapref; /* autoconvert GLOB -> GLOBref */
6071 else if (o2->op_type == OP_CONST)
6072 o2->op_private &= ~OPpCONST_STRICT;
6073 else if (o2->op_type == OP_ENTERSUB) {
6074 /* accidental subroutine, revert to bareword */
6075 OP *gvop = ((UNOP*)o2)->op_first;
6076 if (gvop && gvop->op_type == OP_NULL) {
6077 gvop = ((UNOP*)gvop)->op_first;
6079 for (; gvop->op_sibling; gvop = gvop->op_sibling)
6082 (gvop->op_private & OPpENTERSUB_NOPAREN) &&
6083 (gvop = ((UNOP*)gvop)->op_first) &&
6084 gvop->op_type == OP_GV)
6086 GV *gv = cGVOPx_gv(gvop);
6087 OP *sibling = o2->op_sibling;
6088 SV *n = newSVpvn("",0);
6090 gv_fullname3(n, gv, "");
6091 if (SvCUR(n)>6 && strnEQ(SvPVX(n),"main::",6))
6092 sv_chop(n, SvPVX(n)+6);
6093 o2 = newSVOP(OP_CONST, 0, n);
6094 prev->op_sibling = o2;
6095 o2->op_sibling = sibling;
6111 if (contextclass++ == 0) {
6112 e = strchr(proto, ']');
6113 if (!e || e == proto)
6126 while (*--p != '[');
6127 bad_type(arg, Perl_form(aTHX_ "one of %s", p),
6128 gv_ename(namegv), o2);
6134 if (o2->op_type == OP_RV2GV)
6137 bad_type(arg, "symbol", gv_ename(namegv), o2);
6140 if (o2->op_type == OP_ENTERSUB)
6143 bad_type(arg, "subroutine entry", gv_ename(namegv), o2);
6146 if (o2->op_type == OP_RV2SV ||
6147 o2->op_type == OP_PADSV ||
6148 o2->op_type == OP_HELEM ||
6149 o2->op_type == OP_AELEM ||
6150 o2->op_type == OP_THREADSV)
6153 bad_type(arg, "scalar", gv_ename(namegv), o2);
6156 if (o2->op_type == OP_RV2AV ||
6157 o2->op_type == OP_PADAV)
6160 bad_type(arg, "array", gv_ename(namegv), o2);
6163 if (o2->op_type == OP_RV2HV ||
6164 o2->op_type == OP_PADHV)
6167 bad_type(arg, "hash", gv_ename(namegv), o2);
6172 OP* sib = kid->op_sibling;
6173 kid->op_sibling = 0;
6174 o2 = newUNOP(OP_REFGEN, 0, kid);
6175 o2->op_sibling = sib;
6176 prev->op_sibling = o2;
6178 if (contextclass && e) {
6193 Perl_croak(aTHX_ "Malformed prototype for %s: %"SVf,
6194 gv_ename(namegv), cv);
6199 mod(o2, OP_ENTERSUB);
6201 o2 = o2->op_sibling;
6203 if (proto && !optional &&
6204 (*proto && *proto != '@' && *proto != '%' && *proto != ';'))
6205 return too_few_arguments(o, gv_ename(namegv));
6208 o=newSVOP(OP_CONST, 0, newSViv(0));
6214 Perl_ck_svconst(pTHX_ OP *o)
6216 SvREADONLY_on(cSVOPo->op_sv);
6221 Perl_ck_trunc(pTHX_ OP *o)
6223 if (o->op_flags & OPf_KIDS) {
6224 SVOP *kid = (SVOP*)cUNOPo->op_first;
6226 if (kid->op_type == OP_NULL)
6227 kid = (SVOP*)kid->op_sibling;
6228 if (kid && kid->op_type == OP_CONST &&
6229 (kid->op_private & OPpCONST_BARE))
6231 o->op_flags |= OPf_SPECIAL;
6232 kid->op_private &= ~OPpCONST_STRICT;
6239 Perl_ck_unpack(pTHX_ OP *o)
6241 OP *kid = cLISTOPo->op_first;
6242 if (kid->op_sibling) {
6243 kid = kid->op_sibling;
6244 if (!kid->op_sibling)
6245 kid->op_sibling = newDEFSVOP();
6251 Perl_ck_substr(pTHX_ OP *o)
6254 if ((o->op_flags & OPf_KIDS) && o->op_private == 4) {
6255 OP *kid = cLISTOPo->op_first;
6257 if (kid->op_type == OP_NULL)
6258 kid = kid->op_sibling;
6260 kid->op_flags |= OPf_MOD;
6266 /* A peephole optimizer. We visit the ops in the order they're to execute. */
6269 Perl_peep(pTHX_ register OP *o)
6271 register OP* oldop = 0;
6273 if (!o || o->op_seq)
6277 SAVEVPTR(PL_curcop);
6278 for (; o; o = o->op_next) {
6281 /* The special value -1 is used by the B::C compiler backend to indicate
6282 * that an op is statically defined and should not be freed */
6283 if (!PL_op_seqmax || PL_op_seqmax == (U16)-1)
6286 switch (o->op_type) {
6290 PL_curcop = ((COP*)o); /* for warnings */
6291 o->op_seq = PL_op_seqmax++;
6295 if (cSVOPo->op_private & OPpCONST_STRICT)
6296 no_bareword_allowed(o);
6298 case OP_METHOD_NAMED:
6299 /* Relocate sv to the pad for thread safety.
6300 * Despite being a "constant", the SV is written to,
6301 * for reference counts, sv_upgrade() etc. */
6303 PADOFFSET ix = pad_alloc(OP_CONST, SVs_PADTMP);
6304 if (o->op_type == OP_CONST && SvPADTMP(cSVOPo->op_sv)) {
6305 /* If op_sv is already a PADTMP then it is being used by
6306 * some pad, so make a copy. */
6307 sv_setsv(PAD_SVl(ix),cSVOPo->op_sv);
6308 SvREADONLY_on(PAD_SVl(ix));
6309 SvREFCNT_dec(cSVOPo->op_sv);
6312 SvREFCNT_dec(PAD_SVl(ix));
6313 SvPADTMP_on(cSVOPo->op_sv);
6314 PAD_SETSV(ix, cSVOPo->op_sv);
6315 /* XXX I don't know how this isn't readonly already. */
6316 SvREADONLY_on(PAD_SVl(ix));
6318 cSVOPo->op_sv = Nullsv;
6322 o->op_seq = PL_op_seqmax++;
6326 if (o->op_next && o->op_next->op_type == OP_STRINGIFY) {
6327 if (o->op_next->op_private & OPpTARGET_MY) {
6328 if (o->op_flags & OPf_STACKED) /* chained concats */
6329 goto ignore_optimization;
6331 /* assert(PL_opargs[o->op_type] & OA_TARGLEX); */
6332 o->op_targ = o->op_next->op_targ;
6333 o->op_next->op_targ = 0;
6334 o->op_private |= OPpTARGET_MY;
6337 op_null(o->op_next);
6339 ignore_optimization:
6340 o->op_seq = PL_op_seqmax++;
6343 if ((o->op_flags & OPf_WANT) != OPf_WANT_LIST) {
6344 o->op_seq = PL_op_seqmax++;
6345 break; /* Scalar stub must produce undef. List stub is noop */
6349 if (o->op_targ == OP_NEXTSTATE
6350 || o->op_targ == OP_DBSTATE
6351 || o->op_targ == OP_SETSTATE)
6353 PL_curcop = ((COP*)o);
6355 /* XXX: We avoid setting op_seq here to prevent later calls
6356 to peep() from mistakenly concluding that optimisation
6357 has already occurred. This doesn't fix the real problem,
6358 though (See 20010220.007). AMS 20010719 */
6359 if (oldop && o->op_next) {
6360 oldop->op_next = o->op_next;
6368 if (oldop && o->op_next) {
6369 oldop->op_next = o->op_next;
6372 o->op_seq = PL_op_seqmax++;
6376 if (o->op_next->op_type == OP_RV2SV) {
6377 if (!(o->op_next->op_private & OPpDEREF)) {
6378 op_null(o->op_next);
6379 o->op_private |= o->op_next->op_private & (OPpLVAL_INTRO
6381 o->op_next = o->op_next->op_next;
6382 o->op_type = OP_GVSV;
6383 o->op_ppaddr = PL_ppaddr[OP_GVSV];
6386 else if (o->op_next->op_type == OP_RV2AV) {
6387 OP* pop = o->op_next->op_next;
6389 if (pop && pop->op_type == OP_CONST &&
6390 (PL_op = pop->op_next) &&
6391 pop->op_next->op_type == OP_AELEM &&
6392 !(pop->op_next->op_private &
6393 (OPpLVAL_INTRO|OPpLVAL_DEFER|OPpDEREF|OPpMAYBE_LVSUB)) &&
6394 (i = SvIV(((SVOP*)pop)->op_sv) - PL_curcop->cop_arybase)
6399 op_null(o->op_next);
6400 op_null(pop->op_next);
6402 o->op_flags |= pop->op_next->op_flags & OPf_MOD;
6403 o->op_next = pop->op_next->op_next;
6404 o->op_type = OP_AELEMFAST;
6405 o->op_ppaddr = PL_ppaddr[OP_AELEMFAST];
6406 o->op_private = (U8)i;
6411 else if ((o->op_private & OPpEARLY_CV) && ckWARN(WARN_PROTOTYPE)) {
6413 if (SvTYPE(gv) == SVt_PVGV && GvCV(gv) && SvPVX(GvCV(gv))) {
6414 /* XXX could check prototype here instead of just carping */
6415 SV *sv = sv_newmortal();
6416 gv_efullname3(sv, gv, Nullch);
6417 Perl_warner(aTHX_ packWARN(WARN_PROTOTYPE),
6418 "%"SVf"() called too early to check prototype",
6422 else if (o->op_next->op_type == OP_READLINE
6423 && o->op_next->op_next->op_type == OP_CONCAT
6424 && (o->op_next->op_next->op_flags & OPf_STACKED))
6426 /* Turn "$a .= <FH>" into an OP_RCATLINE. AMS 20010917 */
6427 o->op_type = OP_RCATLINE;
6428 o->op_flags |= OPf_STACKED;
6429 o->op_ppaddr = PL_ppaddr[OP_RCATLINE];
6430 op_null(o->op_next->op_next);
6431 op_null(o->op_next);
6434 o->op_seq = PL_op_seqmax++;
6447 o->op_seq = PL_op_seqmax++;
6448 while (cLOGOP->op_other->op_type == OP_NULL)
6449 cLOGOP->op_other = cLOGOP->op_other->op_next;
6450 peep(cLOGOP->op_other); /* Recursive calls are not replaced by fptr calls */
6455 o->op_seq = PL_op_seqmax++;
6456 while (cLOOP->op_redoop->op_type == OP_NULL)
6457 cLOOP->op_redoop = cLOOP->op_redoop->op_next;
6458 peep(cLOOP->op_redoop);
6459 while (cLOOP->op_nextop->op_type == OP_NULL)
6460 cLOOP->op_nextop = cLOOP->op_nextop->op_next;
6461 peep(cLOOP->op_nextop);
6462 while (cLOOP->op_lastop->op_type == OP_NULL)
6463 cLOOP->op_lastop = cLOOP->op_lastop->op_next;
6464 peep(cLOOP->op_lastop);
6470 o->op_seq = PL_op_seqmax++;
6471 while (cPMOP->op_pmreplstart &&
6472 cPMOP->op_pmreplstart->op_type == OP_NULL)
6473 cPMOP->op_pmreplstart = cPMOP->op_pmreplstart->op_next;
6474 peep(cPMOP->op_pmreplstart);
6478 o->op_seq = PL_op_seqmax++;
6479 if (ckWARN(WARN_SYNTAX) && o->op_next
6480 && o->op_next->op_type == OP_NEXTSTATE) {
6481 if (o->op_next->op_sibling &&
6482 o->op_next->op_sibling->op_type != OP_EXIT &&
6483 o->op_next->op_sibling->op_type != OP_WARN &&
6484 o->op_next->op_sibling->op_type != OP_DIE) {
6485 line_t oldline = CopLINE(PL_curcop);
6487 CopLINE_set(PL_curcop, CopLINE((COP*)o->op_next));
6488 Perl_warner(aTHX_ packWARN(WARN_EXEC),
6489 "Statement unlikely to be reached");
6490 Perl_warner(aTHX_ packWARN(WARN_EXEC),
6491 "\t(Maybe you meant system() when you said exec()?)\n");
6492 CopLINE_set(PL_curcop, oldline);
6503 o->op_seq = PL_op_seqmax++;
6505 if (((BINOP*)o)->op_last->op_type != OP_CONST)
6508 /* Make the CONST have a shared SV */
6509 svp = cSVOPx_svp(((BINOP*)o)->op_last);
6510 if ((!SvFAKE(sv = *svp) || !SvREADONLY(sv)) && !IS_PADCONST(sv)) {
6511 key = SvPV(sv, keylen);
6512 lexname = newSVpvn_share(key,
6513 SvUTF8(sv) ? -(I32)keylen : keylen,
6522 o->op_seq = PL_op_seqmax++;
6532 char* Perl_custom_op_name(pTHX_ OP* o)
6534 IV index = PTR2IV(o->op_ppaddr);
6538 if (!PL_custom_op_names) /* This probably shouldn't happen */
6539 return PL_op_name[OP_CUSTOM];
6541 keysv = sv_2mortal(newSViv(index));
6543 he = hv_fetch_ent(PL_custom_op_names, keysv, 0, 0);
6545 return PL_op_name[OP_CUSTOM]; /* Don't know who you are */
6547 return SvPV_nolen(HeVAL(he));
6550 char* Perl_custom_op_desc(pTHX_ OP* o)
6552 IV index = PTR2IV(o->op_ppaddr);
6556 if (!PL_custom_op_descs)
6557 return PL_op_desc[OP_CUSTOM];
6559 keysv = sv_2mortal(newSViv(index));
6561 he = hv_fetch_ent(PL_custom_op_descs, keysv, 0, 0);
6563 return PL_op_desc[OP_CUSTOM];
6565 return SvPV_nolen(HeVAL(he));
6571 /* Efficient sub that returns a constant scalar value. */
6573 const_sv_xsub(pTHX_ CV* cv)
6578 Perl_croak(aTHX_ "usage: %s::%s()",
6579 HvNAME(GvSTASH(CvGV(cv))), GvNAME(CvGV(cv)));
6583 ST(0) = (SV*)XSANY.any_ptr;