3 * Copyright (c) 1991-2002, Larry Wall
5 * You may distribute under the terms of either the GNU General Public
6 * License or the Artistic License, as specified in the README file.
11 * "You see: Mr. Drogo, he married poor Miss Primula Brandybuck. She was
12 * our Mr. Bilbo's first cousin on the mother's side (her mother being the
13 * youngest of the Old Took's daughters); and Mr. Drogo was his second
14 * cousin. So Mr. Frodo is his first *and* second cousin, once removed
15 * either way, as the saying is, if you follow me." --the Gaffer
24 #define CALL_PEEP(o) CALL_FPTR(PL_peepp)(aTHX_ o)
26 #if defined(PL_OP_SLAB_ALLOC)
28 #ifndef PERL_SLAB_SIZE
29 #define PERL_SLAB_SIZE 2048
32 #define NewOp(m,var,c,type) \
33 STMT_START { var = (type *) Slab_Alloc(m,c*sizeof(type)); } STMT_END
35 #define FreeOp(p) Slab_Free(p)
38 S_Slab_Alloc(pTHX_ int m, size_t sz)
41 * To make incrementing use count easy PL_OpSlab is an I32 *
42 * To make inserting the link to slab PL_OpPtr is I32 **
43 * So compute size in units of sizeof(I32 *) as that is how Pl_OpPtr increments
44 * Add an overhead for pointer to slab and round up as a number of pointers
46 sz = (sz + 2*sizeof(I32 *) -1)/sizeof(I32 *);
47 if ((PL_OpSpace -= sz) < 0) {
48 PL_OpPtr = (I32 **) PerlMemShared_malloc(PERL_SLAB_SIZE*sizeof(I32*));
52 Zero(PL_OpPtr,PERL_SLAB_SIZE,I32 **);
53 /* We reserve the 0'th I32 sized chunk as a use count */
54 PL_OpSlab = (I32 *) PL_OpPtr;
55 /* Reduce size by the use count word, and by the size we need.
56 * Latter is to mimic the '-=' in the if() above
58 PL_OpSpace = PERL_SLAB_SIZE - (sizeof(I32)+sizeof(I32 **)-1)/sizeof(I32 **) - sz;
59 /* Allocation pointer starts at the top.
60 Theory: because we build leaves before trunk allocating at end
61 means that at run time access is cache friendly upward
63 PL_OpPtr += PERL_SLAB_SIZE;
65 assert( PL_OpSpace >= 0 );
66 /* Move the allocation pointer down */
68 assert( PL_OpPtr > (I32 **) PL_OpSlab );
69 *PL_OpPtr = PL_OpSlab; /* Note which slab it belongs to */
70 (*PL_OpSlab)++; /* Increment use count of slab */
71 assert( PL_OpPtr+sz <= ((I32 **) PL_OpSlab + PERL_SLAB_SIZE) );
72 assert( *PL_OpSlab > 0 );
73 return (void *)(PL_OpPtr + 1);
77 S_Slab_Free(pTHX_ void *op)
79 I32 **ptr = (I32 **) op;
81 assert( ptr-1 > (I32 **) slab );
82 assert( ptr < ( (I32 **) slab + PERL_SLAB_SIZE) );
86 #define PerlMemShared PerlMem
89 PerlMemShared_free(slab);
90 if (slab == PL_OpSlab) {
97 #define NewOp(m, var, c, type) Newz(m, var, c, type)
98 #define FreeOp(p) Safefree(p)
101 * In the following definition, the ", Nullop" is just to make the compiler
102 * think the expression is of the right type: croak actually does a Siglongjmp.
104 #define CHECKOP(type,o) \
105 ((PL_op_mask && PL_op_mask[type]) \
106 ? ( op_free((OP*)o), \
107 Perl_croak(aTHX_ "'%s' trapped by operation mask", PL_op_desc[type]), \
109 : CALL_FPTR(PL_check[type])(aTHX_ (OP*)o))
111 #define RETURN_UNLIMITED_NUMBER (PERL_INT_MAX / 2)
114 S_gv_ename(pTHX_ GV *gv)
117 SV* tmpsv = sv_newmortal();
118 gv_efullname3(tmpsv, gv, Nullch);
119 return SvPV(tmpsv,n_a);
123 S_no_fh_allowed(pTHX_ OP *o)
125 yyerror(Perl_form(aTHX_ "Missing comma after first argument to %s function",
131 S_too_few_arguments(pTHX_ OP *o, char *name)
133 yyerror(Perl_form(aTHX_ "Not enough arguments for %s", name));
138 S_too_many_arguments(pTHX_ OP *o, char *name)
140 yyerror(Perl_form(aTHX_ "Too many arguments for %s", name));
145 S_bad_type(pTHX_ I32 n, char *t, char *name, OP *kid)
147 yyerror(Perl_form(aTHX_ "Type of arg %d to %s must be %s (not %s)",
148 (int)n, name, t, OP_DESC(kid)));
152 S_no_bareword_allowed(pTHX_ OP *o)
154 qerror(Perl_mess(aTHX_
155 "Bareword \"%"SVf"\" not allowed while \"strict subs\" in use",
159 /* "register" allocation */
162 Perl_allocmy(pTHX_ char *name)
166 /* complain about "my $_" etc etc */
167 if (!(PL_in_my == KEY_our ||
169 (USE_UTF8_IN_NAMES && UTF8_IS_START(name[1])) ||
170 (name[1] == '_' && (int)strlen(name) > 2)))
172 if (!isPRINT(name[1]) || strchr("\t\n\r\f", name[1])) {
173 /* 1999-02-27 mjd@plover.com */
175 p = strchr(name, '\0');
176 /* The next block assumes the buffer is at least 205 chars
177 long. At present, it's always at least 256 chars. */
179 strcpy(name+200, "...");
185 /* Move everything else down one character */
186 for (; p-name > 2; p--)
188 name[2] = toCTRL(name[1]);
191 yyerror(Perl_form(aTHX_ "Can't use global %s in \"my\"",name));
194 /* check for duplicate declaration */
197 (PL_curstash ? PL_curstash : PL_defstash)
200 if (PL_in_my_stash && *name != '$') {
201 yyerror(Perl_form(aTHX_
202 "Can't declare class for non-scalar %s in \"%s\"",
203 name, PL_in_my == KEY_our ? "our" : "my"));
206 /* allocate a spare slot and store the name in that slot */
208 off = pad_add_name(name,
211 ? (PL_curstash ? PL_curstash : PL_defstash)
222 Perl_op_free(pTHX_ OP *o)
224 register OP *kid, *nextkid;
227 if (!o || o->op_seq == (U16)-1)
230 if (o->op_private & OPpREFCOUNTED) {
231 switch (o->op_type) {
239 if (OpREFCNT_dec(o)) {
250 if (o->op_flags & OPf_KIDS) {
251 for (kid = cUNOPo->op_first; kid; kid = nextkid) {
252 nextkid = kid->op_sibling; /* Get before next freeing kid */
258 type = (OPCODE)o->op_targ;
260 /* COP* is not cleared by op_clear() so that we may track line
261 * numbers etc even after null() */
262 if (type == OP_NEXTSTATE || type == OP_SETSTATE || type == OP_DBSTATE)
270 Perl_op_clear(pTHX_ OP *o)
273 switch (o->op_type) {
274 case OP_NULL: /* Was holding old type, if any. */
275 case OP_ENTEREVAL: /* Was holding hints. */
279 if (!(o->op_flags & OPf_REF)
280 || (PL_check[o->op_type] != MEMBER_TO_FPTR(Perl_ck_ftst)))
287 if (cPADOPo->op_padix > 0) {
288 /* No GvIN_PAD_off(cGVOPo_gv) here, because other references
289 * may still exist on the pad */
290 pad_swipe(cPADOPo->op_padix, TRUE);
291 cPADOPo->op_padix = 0;
294 SvREFCNT_dec(cSVOPo->op_sv);
295 cSVOPo->op_sv = Nullsv;
298 case OP_METHOD_NAMED:
300 SvREFCNT_dec(cSVOPo->op_sv);
301 cSVOPo->op_sv = Nullsv;
307 if (o->op_flags & (OPf_SPECIAL|OPf_STACKED|OPf_KIDS))
311 if (o->op_private & (OPpTRANS_FROM_UTF|OPpTRANS_TO_UTF)) {
312 SvREFCNT_dec(cSVOPo->op_sv);
313 cSVOPo->op_sv = Nullsv;
316 Safefree(cPVOPo->op_pv);
317 cPVOPo->op_pv = Nullch;
321 op_free(cPMOPo->op_pmreplroot);
325 if (INT2PTR(PADOFFSET, cPMOPo->op_pmreplroot)) {
326 /* No GvIN_PAD_off here, because other references may still
327 * exist on the pad */
328 pad_swipe(INT2PTR(PADOFFSET, cPMOPo->op_pmreplroot), TRUE);
331 SvREFCNT_dec((SV*)cPMOPo->op_pmreplroot);
338 HV *pmstash = PmopSTASH(cPMOPo);
339 if (pmstash && SvREFCNT(pmstash)) {
340 PMOP *pmop = HvPMROOT(pmstash);
341 PMOP *lastpmop = NULL;
343 if (cPMOPo == pmop) {
345 lastpmop->op_pmnext = pmop->op_pmnext;
347 HvPMROOT(pmstash) = pmop->op_pmnext;
351 pmop = pmop->op_pmnext;
354 PmopSTASH_free(cPMOPo);
356 cPMOPo->op_pmreplroot = Nullop;
357 /* we use the "SAFE" version of the PM_ macros here
358 * since sv_clean_all might release some PMOPs
359 * after PL_regex_padav has been cleared
360 * and the clearing of PL_regex_padav needs to
361 * happen before sv_clean_all
363 ReREFCNT_dec(PM_GETRE_SAFE(cPMOPo));
364 PM_SETRE_SAFE(cPMOPo, (REGEXP*)NULL);
366 if(PL_regex_pad) { /* We could be in destruction */
367 av_push((AV*) PL_regex_pad[0],(SV*) PL_regex_pad[(cPMOPo)->op_pmoffset]);
368 SvREPADTMP_on(PL_regex_pad[(cPMOPo)->op_pmoffset]);
369 PM_SETRE(cPMOPo, (cPMOPo)->op_pmoffset);
376 if (o->op_targ > 0) {
377 pad_free(o->op_targ);
383 S_cop_free(pTHX_ COP* cop)
385 Safefree(cop->cop_label); /* FIXME: treaddead ??? */
388 if (! specialWARN(cop->cop_warnings))
389 SvREFCNT_dec(cop->cop_warnings);
390 if (! specialCopIO(cop->cop_io)) {
394 char *s = SvPV(cop->cop_io,len);
395 Perl_warn(aTHX_ "io='%.*s'",(int) len,s); /* ??? --jhi */
398 SvREFCNT_dec(cop->cop_io);
404 Perl_op_null(pTHX_ OP *o)
406 if (o->op_type == OP_NULL)
409 o->op_targ = o->op_type;
410 o->op_type = OP_NULL;
411 o->op_ppaddr = PL_ppaddr[OP_NULL];
414 /* Contextualizers */
416 #define LINKLIST(o) ((o)->op_next ? (o)->op_next : linklist((OP*)o))
419 Perl_linklist(pTHX_ OP *o)
426 /* establish postfix order */
427 if (cUNOPo->op_first) {
428 o->op_next = LINKLIST(cUNOPo->op_first);
429 for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling) {
431 kid->op_next = LINKLIST(kid->op_sibling);
443 Perl_scalarkids(pTHX_ OP *o)
446 if (o && o->op_flags & OPf_KIDS) {
447 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
454 S_scalarboolean(pTHX_ OP *o)
456 if (o->op_type == OP_SASSIGN && cBINOPo->op_first->op_type == OP_CONST) {
457 if (ckWARN(WARN_SYNTAX)) {
458 line_t oldline = CopLINE(PL_curcop);
460 if (PL_copline != NOLINE)
461 CopLINE_set(PL_curcop, PL_copline);
462 Perl_warner(aTHX_ packWARN(WARN_SYNTAX), "Found = in conditional, should be ==");
463 CopLINE_set(PL_curcop, oldline);
470 Perl_scalar(pTHX_ OP *o)
474 /* assumes no premature commitment */
475 if (!o || (o->op_flags & OPf_WANT) || PL_error_count
476 || o->op_type == OP_RETURN)
481 o->op_flags = (o->op_flags & ~OPf_WANT) | OPf_WANT_SCALAR;
483 switch (o->op_type) {
485 scalar(cBINOPo->op_first);
490 for (kid = cUNOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
494 if ((kid = cLISTOPo->op_first) && kid->op_type == OP_PUSHRE) {
495 if (!kPMOP->op_pmreplroot)
496 deprecate_old("implicit split to @_");
504 if (o->op_flags & OPf_KIDS) {
505 for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling)
511 kid = cLISTOPo->op_first;
513 while ((kid = kid->op_sibling)) {
519 WITH_THR(PL_curcop = &PL_compiling);
524 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling) {
530 WITH_THR(PL_curcop = &PL_compiling);
533 if (ckWARN(WARN_VOID))
534 Perl_warner(aTHX_ packWARN(WARN_VOID), "Useless use of sort in scalar context");
540 Perl_scalarvoid(pTHX_ OP *o)
547 if (o->op_type == OP_NEXTSTATE
548 || o->op_type == OP_SETSTATE
549 || o->op_type == OP_DBSTATE
550 || (o->op_type == OP_NULL && (o->op_targ == OP_NEXTSTATE
551 || o->op_targ == OP_SETSTATE
552 || o->op_targ == OP_DBSTATE)))
553 PL_curcop = (COP*)o; /* for warning below */
555 /* assumes no premature commitment */
556 want = o->op_flags & OPf_WANT;
557 if ((want && want != OPf_WANT_SCALAR) || PL_error_count
558 || o->op_type == OP_RETURN)
563 if ((o->op_private & OPpTARGET_MY)
564 && (PL_opargs[o->op_type] & OA_TARGLEX))/* OPp share the meaning */
566 return scalar(o); /* As if inside SASSIGN */
569 o->op_flags = (o->op_flags & ~OPf_WANT) | OPf_WANT_VOID;
571 switch (o->op_type) {
573 if (!(PL_opargs[o->op_type] & OA_FOLDCONST))
577 if (o->op_flags & OPf_STACKED)
581 if (o->op_private == 4)
653 if (!(o->op_private & (OPpLVAL_INTRO|OPpOUR_INTRO)))
654 useless = OP_DESC(o);
661 if (!(o->op_private & (OPpLVAL_INTRO|OPpOUR_INTRO)) &&
662 (!o->op_sibling || o->op_sibling->op_type != OP_READLINE))
663 useless = "a variable";
668 if (cSVOPo->op_private & OPpCONST_STRICT)
669 no_bareword_allowed(o);
671 if (ckWARN(WARN_VOID)) {
672 useless = "a constant";
673 /* the constants 0 and 1 are permitted as they are
674 conventionally used as dummies in constructs like
675 1 while some_condition_with_side_effects; */
676 if (SvNIOK(sv) && (SvNV(sv) == 0.0 || SvNV(sv) == 1.0))
678 else if (SvPOK(sv)) {
679 /* perl4's way of mixing documentation and code
680 (before the invention of POD) was based on a
681 trick to mix nroff and perl code. The trick was
682 built upon these three nroff macros being used in
683 void context. The pink camel has the details in
684 the script wrapman near page 319. */
685 if (strnEQ(SvPVX(sv), "di", 2) ||
686 strnEQ(SvPVX(sv), "ds", 2) ||
687 strnEQ(SvPVX(sv), "ig", 2))
692 op_null(o); /* don't execute or even remember it */
696 o->op_type = OP_PREINC; /* pre-increment is faster */
697 o->op_ppaddr = PL_ppaddr[OP_PREINC];
701 o->op_type = OP_PREDEC; /* pre-decrement is faster */
702 o->op_ppaddr = PL_ppaddr[OP_PREDEC];
709 for (kid = cUNOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
714 if (o->op_flags & OPf_STACKED)
721 if (!(o->op_flags & OPf_KIDS))
730 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
737 /* all requires must return a boolean value */
738 o->op_flags &= ~OPf_WANT;
743 if ((kid = cLISTOPo->op_first) && kid->op_type == OP_PUSHRE) {
744 if (!kPMOP->op_pmreplroot)
745 deprecate_old("implicit split to @_");
749 if (useless && ckWARN(WARN_VOID))
750 Perl_warner(aTHX_ packWARN(WARN_VOID), "Useless use of %s in void context", useless);
755 Perl_listkids(pTHX_ OP *o)
758 if (o && o->op_flags & OPf_KIDS) {
759 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
766 Perl_list(pTHX_ OP *o)
770 /* assumes no premature commitment */
771 if (!o || (o->op_flags & OPf_WANT) || PL_error_count
772 || o->op_type == OP_RETURN)
777 if ((o->op_private & OPpTARGET_MY)
778 && (PL_opargs[o->op_type] & OA_TARGLEX))/* OPp share the meaning */
780 return o; /* As if inside SASSIGN */
783 o->op_flags = (o->op_flags & ~OPf_WANT) | OPf_WANT_LIST;
785 switch (o->op_type) {
788 list(cBINOPo->op_first);
793 for (kid = cUNOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
801 if (!(o->op_flags & OPf_KIDS))
803 if (!o->op_next && cUNOPo->op_first->op_type == OP_FLOP) {
804 list(cBINOPo->op_first);
805 return gen_constant_list(o);
812 kid = cLISTOPo->op_first;
814 while ((kid = kid->op_sibling)) {
820 WITH_THR(PL_curcop = &PL_compiling);
824 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling) {
830 WITH_THR(PL_curcop = &PL_compiling);
833 /* all requires must return a boolean value */
834 o->op_flags &= ~OPf_WANT;
841 Perl_scalarseq(pTHX_ OP *o)
846 if (o->op_type == OP_LINESEQ ||
847 o->op_type == OP_SCOPE ||
848 o->op_type == OP_LEAVE ||
849 o->op_type == OP_LEAVETRY)
851 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling) {
852 if (kid->op_sibling) {
856 PL_curcop = &PL_compiling;
858 o->op_flags &= ~OPf_PARENS;
859 if (PL_hints & HINT_BLOCK_SCOPE)
860 o->op_flags |= OPf_PARENS;
863 o = newOP(OP_STUB, 0);
868 S_modkids(pTHX_ OP *o, I32 type)
871 if (o && o->op_flags & OPf_KIDS) {
872 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
879 Perl_mod(pTHX_ OP *o, I32 type)
883 if (!o || PL_error_count)
886 if ((o->op_private & OPpTARGET_MY)
887 && (PL_opargs[o->op_type] & OA_TARGLEX))/* OPp share the meaning */
892 switch (o->op_type) {
897 if (!(o->op_private & (OPpCONST_ARYBASE)))
899 if (PL_eval_start && PL_eval_start->op_type == OP_CONST) {
900 PL_compiling.cop_arybase = (I32)SvIV(cSVOPx(PL_eval_start)->op_sv);
904 SAVEI32(PL_compiling.cop_arybase);
905 PL_compiling.cop_arybase = 0;
907 else if (type == OP_REFGEN)
910 Perl_croak(aTHX_ "That use of $[ is unsupported");
913 if (o->op_flags & OPf_PARENS)
917 if ((type == OP_UNDEF || type == OP_REFGEN) &&
918 !(o->op_flags & OPf_STACKED)) {
919 o->op_type = OP_RV2CV; /* entersub => rv2cv */
920 o->op_ppaddr = PL_ppaddr[OP_RV2CV];
921 assert(cUNOPo->op_first->op_type == OP_NULL);
922 op_null(((LISTOP*)cUNOPo->op_first)->op_first);/* disable pushmark */
925 else if (o->op_private & OPpENTERSUB_NOMOD)
927 else { /* lvalue subroutine call */
928 o->op_private |= OPpLVAL_INTRO;
929 PL_modcount = RETURN_UNLIMITED_NUMBER;
930 if (type == OP_GREPSTART || type == OP_ENTERSUB || type == OP_REFGEN) {
931 /* Backward compatibility mode: */
932 o->op_private |= OPpENTERSUB_INARGS;
935 else { /* Compile-time error message: */
936 OP *kid = cUNOPo->op_first;
940 if (kid->op_type == OP_PUSHMARK)
942 if (kid->op_type != OP_NULL || kid->op_targ != OP_LIST)
944 "panic: unexpected lvalue entersub "
945 "args: type/targ %ld:%"UVuf,
946 (long)kid->op_type, (UV)kid->op_targ);
947 kid = kLISTOP->op_first;
949 while (kid->op_sibling)
950 kid = kid->op_sibling;
951 if (!(kid->op_type == OP_NULL && kid->op_targ == OP_RV2CV)) {
953 if (kid->op_type == OP_METHOD_NAMED
954 || kid->op_type == OP_METHOD)
958 NewOp(1101, newop, 1, UNOP);
959 newop->op_type = OP_RV2CV;
960 newop->op_ppaddr = PL_ppaddr[OP_RV2CV];
961 newop->op_first = Nullop;
962 newop->op_next = (OP*)newop;
963 kid->op_sibling = (OP*)newop;
964 newop->op_private |= OPpLVAL_INTRO;
968 if (kid->op_type != OP_RV2CV)
970 "panic: unexpected lvalue entersub "
971 "entry via type/targ %ld:%"UVuf,
972 (long)kid->op_type, (UV)kid->op_targ);
973 kid->op_private |= OPpLVAL_INTRO;
974 break; /* Postpone until runtime */
978 kid = kUNOP->op_first;
979 if (kid->op_type == OP_NULL && kid->op_targ == OP_RV2SV)
980 kid = kUNOP->op_first;
981 if (kid->op_type == OP_NULL)
983 "Unexpected constant lvalue entersub "
984 "entry via type/targ %ld:%"UVuf,
985 (long)kid->op_type, (UV)kid->op_targ);
986 if (kid->op_type != OP_GV) {
987 /* Restore RV2CV to check lvalueness */
989 if (kid->op_next && kid->op_next != kid) { /* Happens? */
990 okid->op_next = kid->op_next;
994 okid->op_next = Nullop;
995 okid->op_type = OP_RV2CV;
997 okid->op_ppaddr = PL_ppaddr[OP_RV2CV];
998 okid->op_private |= OPpLVAL_INTRO;
1002 cv = GvCV(kGVOP_gv);
1012 /* grep, foreach, subcalls, refgen */
1013 if (type == OP_GREPSTART || type == OP_ENTERSUB || type == OP_REFGEN)
1015 yyerror(Perl_form(aTHX_ "Can't modify %s in %s",
1016 (o->op_type == OP_NULL && (o->op_flags & OPf_SPECIAL)
1018 : (o->op_type == OP_ENTERSUB
1019 ? "non-lvalue subroutine call"
1021 type ? PL_op_desc[type] : "local"));
1035 case OP_RIGHT_SHIFT:
1044 if (!(o->op_flags & OPf_STACKED))
1050 for (kid = cUNOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
1056 if (!type && cUNOPo->op_first->op_type != OP_GV)
1057 Perl_croak(aTHX_ "Can't localize through a reference");
1058 if (type == OP_REFGEN && o->op_flags & OPf_PARENS) {
1059 PL_modcount = RETURN_UNLIMITED_NUMBER;
1060 return o; /* Treat \(@foo) like ordinary list. */
1064 if (scalar_mod_type(o, type))
1066 ref(cUNOPo->op_first, o->op_type);
1070 if (type == OP_LEAVESUBLV)
1071 o->op_private |= OPpMAYBE_LVSUB;
1076 PL_modcount = RETURN_UNLIMITED_NUMBER;
1079 if (!type && cUNOPo->op_first->op_type != OP_GV)
1080 Perl_croak(aTHX_ "Can't localize through a reference");
1081 ref(cUNOPo->op_first, o->op_type);
1085 PL_hints |= HINT_BLOCK_SCOPE;
1096 PL_modcount = RETURN_UNLIMITED_NUMBER;
1097 if (type == OP_REFGEN && o->op_flags & OPf_PARENS)
1098 return o; /* Treat \(@foo) like ordinary list. */
1099 if (scalar_mod_type(o, type))
1101 if (type == OP_LEAVESUBLV)
1102 o->op_private |= OPpMAYBE_LVSUB;
1107 { /* XXX DAPM 2002.08.25 tmp assert test */
1108 /* XXX */ assert(av_fetch(PL_comppad_name, (o->op_targ), FALSE));
1109 /* XXX */ assert(*av_fetch(PL_comppad_name, (o->op_targ), FALSE));
1111 Perl_croak(aTHX_ "Can't localize lexical variable %s",
1112 PAD_COMPNAME_PV(o->op_targ));
1120 if (type != OP_SASSIGN)
1124 if (o->op_private == 4) /* don't allow 4 arg substr as lvalue */
1129 if (type == OP_LEAVESUBLV)
1130 o->op_private |= OPpMAYBE_LVSUB;
1132 pad_free(o->op_targ);
1133 o->op_targ = pad_alloc(o->op_type, SVs_PADMY);
1134 assert(SvTYPE(PAD_SV(o->op_targ)) == SVt_NULL);
1135 if (o->op_flags & OPf_KIDS)
1136 mod(cBINOPo->op_first->op_sibling, type);
1141 ref(cBINOPo->op_first, o->op_type);
1142 if (type == OP_ENTERSUB &&
1143 !(o->op_private & (OPpLVAL_INTRO | OPpDEREF)))
1144 o->op_private |= OPpLVAL_DEFER;
1145 if (type == OP_LEAVESUBLV)
1146 o->op_private |= OPpMAYBE_LVSUB;
1154 if (o->op_flags & OPf_KIDS)
1155 mod(cLISTOPo->op_last, type);
1159 if (o->op_flags & OPf_SPECIAL) /* do BLOCK */
1161 else if (!(o->op_flags & OPf_KIDS))
1163 if (o->op_targ != OP_LIST) {
1164 mod(cBINOPo->op_first, type);
1169 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
1174 if (type != OP_LEAVESUBLV)
1176 break; /* mod()ing was handled by ck_return() */
1179 /* [20011101.069] File test operators interpret OPf_REF to mean that
1180 their argument is a filehandle; thus \stat(".") should not set
1182 if (type == OP_REFGEN &&
1183 PL_check[o->op_type] == MEMBER_TO_FPTR(Perl_ck_ftst))
1186 if (type != OP_LEAVESUBLV)
1187 o->op_flags |= OPf_MOD;
1189 if (type == OP_AASSIGN || type == OP_SASSIGN)
1190 o->op_flags |= OPf_SPECIAL|OPf_REF;
1192 o->op_private |= OPpLVAL_INTRO;
1193 o->op_flags &= ~OPf_SPECIAL;
1194 PL_hints |= HINT_BLOCK_SCOPE;
1196 else if (type != OP_GREPSTART && type != OP_ENTERSUB
1197 && type != OP_LEAVESUBLV)
1198 o->op_flags |= OPf_REF;
1203 S_scalar_mod_type(pTHX_ OP *o, I32 type)
1207 if (o->op_type == OP_RV2GV)
1231 case OP_RIGHT_SHIFT:
1250 S_is_handle_constructor(pTHX_ OP *o, I32 argnum)
1252 switch (o->op_type) {
1260 case OP_SELECT: /* XXX c.f. SelectSaver.pm */
1273 Perl_refkids(pTHX_ OP *o, I32 type)
1276 if (o && o->op_flags & OPf_KIDS) {
1277 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
1284 Perl_ref(pTHX_ OP *o, I32 type)
1288 if (!o || PL_error_count)
1291 switch (o->op_type) {
1293 if ((type == OP_EXISTS || type == OP_DEFINED || type == OP_LOCK) &&
1294 !(o->op_flags & OPf_STACKED)) {
1295 o->op_type = OP_RV2CV; /* entersub => rv2cv */
1296 o->op_ppaddr = PL_ppaddr[OP_RV2CV];
1297 assert(cUNOPo->op_first->op_type == OP_NULL);
1298 op_null(((LISTOP*)cUNOPo->op_first)->op_first); /* disable pushmark */
1299 o->op_flags |= OPf_SPECIAL;
1304 for (kid = cUNOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
1308 if (type == OP_DEFINED)
1309 o->op_flags |= OPf_SPECIAL; /* don't create GV */
1310 ref(cUNOPo->op_first, o->op_type);
1313 if (type == OP_RV2SV || type == OP_RV2AV || type == OP_RV2HV) {
1314 o->op_private |= (type == OP_RV2AV ? OPpDEREF_AV
1315 : type == OP_RV2HV ? OPpDEREF_HV
1317 o->op_flags |= OPf_MOD;
1322 o->op_flags |= OPf_MOD; /* XXX ??? */
1327 o->op_flags |= OPf_REF;
1330 if (type == OP_DEFINED)
1331 o->op_flags |= OPf_SPECIAL; /* don't create GV */
1332 ref(cUNOPo->op_first, o->op_type);
1337 o->op_flags |= OPf_REF;
1342 if (!(o->op_flags & OPf_KIDS))
1344 ref(cBINOPo->op_first, type);
1348 ref(cBINOPo->op_first, o->op_type);
1349 if (type == OP_RV2SV || type == OP_RV2AV || type == OP_RV2HV) {
1350 o->op_private |= (type == OP_RV2AV ? OPpDEREF_AV
1351 : type == OP_RV2HV ? OPpDEREF_HV
1353 o->op_flags |= OPf_MOD;
1361 if (!(o->op_flags & OPf_KIDS))
1363 ref(cLISTOPo->op_last, type);
1373 S_dup_attrlist(pTHX_ OP *o)
1377 /* An attrlist is either a simple OP_CONST or an OP_LIST with kids,
1378 * where the first kid is OP_PUSHMARK and the remaining ones
1379 * are OP_CONST. We need to push the OP_CONST values.
1381 if (o->op_type == OP_CONST)
1382 rop = newSVOP(OP_CONST, o->op_flags, SvREFCNT_inc(cSVOPo->op_sv));
1384 assert((o->op_type == OP_LIST) && (o->op_flags & OPf_KIDS));
1385 for (o = cLISTOPo->op_first; o; o=o->op_sibling) {
1386 if (o->op_type == OP_CONST)
1387 rop = append_elem(OP_LIST, rop,
1388 newSVOP(OP_CONST, o->op_flags,
1389 SvREFCNT_inc(cSVOPo->op_sv)));
1396 S_apply_attrs(pTHX_ HV *stash, SV *target, OP *attrs, bool for_my)
1400 /* fake up C<use attributes $pkg,$rv,@attrs> */
1401 ENTER; /* need to protect against side-effects of 'use' */
1404 stashsv = newSVpv(HvNAME(stash), 0);
1406 stashsv = &PL_sv_no;
1408 #define ATTRSMODULE "attributes"
1409 #define ATTRSMODULE_PM "attributes.pm"
1413 /* Don't force the C<use> if we don't need it. */
1414 svp = hv_fetch(GvHVn(PL_incgv), ATTRSMODULE_PM,
1415 sizeof(ATTRSMODULE_PM)-1, 0);
1416 if (svp && *svp != &PL_sv_undef)
1417 ; /* already in %INC */
1419 Perl_load_module(aTHX_ PERL_LOADMOD_NOIMPORT,
1420 newSVpvn(ATTRSMODULE, sizeof(ATTRSMODULE)-1),
1424 Perl_load_module(aTHX_ PERL_LOADMOD_IMPORT_OPS,
1425 newSVpvn(ATTRSMODULE, sizeof(ATTRSMODULE)-1),
1427 prepend_elem(OP_LIST,
1428 newSVOP(OP_CONST, 0, stashsv),
1429 prepend_elem(OP_LIST,
1430 newSVOP(OP_CONST, 0,
1432 dup_attrlist(attrs))));
1438 S_apply_attrs_my(pTHX_ HV *stash, OP *target, OP *attrs, OP **imopsp)
1440 OP *pack, *imop, *arg;
1446 assert(target->op_type == OP_PADSV ||
1447 target->op_type == OP_PADHV ||
1448 target->op_type == OP_PADAV);
1450 /* Ensure that attributes.pm is loaded. */
1451 apply_attrs(stash, PAD_SV(target->op_targ), attrs, TRUE);
1453 /* Need package name for method call. */
1454 pack = newSVOP(OP_CONST, 0, newSVpvn(ATTRSMODULE, sizeof(ATTRSMODULE)-1));
1456 /* Build up the real arg-list. */
1458 stashsv = newSVpv(HvNAME(stash), 0);
1460 stashsv = &PL_sv_no;
1461 arg = newOP(OP_PADSV, 0);
1462 arg->op_targ = target->op_targ;
1463 arg = prepend_elem(OP_LIST,
1464 newSVOP(OP_CONST, 0, stashsv),
1465 prepend_elem(OP_LIST,
1466 newUNOP(OP_REFGEN, 0,
1467 mod(arg, OP_REFGEN)),
1468 dup_attrlist(attrs)));
1470 /* Fake up a method call to import */
1471 meth = newSVpvn("import", 6);
1472 (void)SvUPGRADE(meth, SVt_PVIV);
1473 (void)SvIOK_on(meth);
1474 PERL_HASH(SvUVX(meth), SvPVX(meth), SvCUR(meth));
1475 imop = convert(OP_ENTERSUB, OPf_STACKED|OPf_SPECIAL|OPf_WANT_VOID,
1476 append_elem(OP_LIST,
1477 prepend_elem(OP_LIST, pack, list(arg)),
1478 newSVOP(OP_METHOD_NAMED, 0, meth)));
1479 imop->op_private |= OPpENTERSUB_NOMOD;
1481 /* Combine the ops. */
1482 *imopsp = append_elem(OP_LIST, *imopsp, imop);
1486 =notfor apidoc apply_attrs_string
1488 Attempts to apply a list of attributes specified by the C<attrstr> and
1489 C<len> arguments to the subroutine identified by the C<cv> argument which
1490 is expected to be associated with the package identified by the C<stashpv>
1491 argument (see L<attributes>). It gets this wrong, though, in that it
1492 does not correctly identify the boundaries of the individual attribute
1493 specifications within C<attrstr>. This is not really intended for the
1494 public API, but has to be listed here for systems such as AIX which
1495 need an explicit export list for symbols. (It's called from XS code
1496 in support of the C<ATTRS:> keyword from F<xsubpp>.) Patches to fix it
1497 to respect attribute syntax properly would be welcome.
1503 Perl_apply_attrs_string(pTHX_ char *stashpv, CV *cv,
1504 char *attrstr, STRLEN len)
1509 len = strlen(attrstr);
1513 for (; isSPACE(*attrstr) && len; --len, ++attrstr) ;
1515 char *sstr = attrstr;
1516 for (; !isSPACE(*attrstr) && len; --len, ++attrstr) ;
1517 attrs = append_elem(OP_LIST, attrs,
1518 newSVOP(OP_CONST, 0,
1519 newSVpvn(sstr, attrstr-sstr)));
1523 Perl_load_module(aTHX_ PERL_LOADMOD_IMPORT_OPS,
1524 newSVpvn(ATTRSMODULE, sizeof(ATTRSMODULE)-1),
1525 Nullsv, prepend_elem(OP_LIST,
1526 newSVOP(OP_CONST, 0, newSVpv(stashpv,0)),
1527 prepend_elem(OP_LIST,
1528 newSVOP(OP_CONST, 0,
1534 S_my_kid(pTHX_ OP *o, OP *attrs, OP **imopsp)
1539 if (!o || PL_error_count)
1543 if (type == OP_LIST) {
1544 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
1545 my_kid(kid, attrs, imopsp);
1546 } else if (type == OP_UNDEF) {
1548 } else if (type == OP_RV2SV || /* "our" declaration */
1550 type == OP_RV2HV) { /* XXX does this let anything illegal in? */
1551 if (cUNOPo->op_first->op_type != OP_GV) { /* MJD 20011224 */
1552 yyerror(Perl_form(aTHX_ "Can't declare %s in %s",
1553 OP_DESC(o), PL_in_my == KEY_our ? "our" : "my"));
1555 GV *gv = cGVOPx_gv(cUNOPo->op_first);
1557 PL_in_my_stash = Nullhv;
1558 apply_attrs(GvSTASH(gv),
1559 (type == OP_RV2SV ? GvSV(gv) :
1560 type == OP_RV2AV ? (SV*)GvAV(gv) :
1561 type == OP_RV2HV ? (SV*)GvHV(gv) : (SV*)gv),
1564 o->op_private |= OPpOUR_INTRO;
1567 else if (type != OP_PADSV &&
1570 type != OP_PUSHMARK)
1572 yyerror(Perl_form(aTHX_ "Can't declare %s in \"%s\"",
1574 PL_in_my == KEY_our ? "our" : "my"));
1577 else if (attrs && type != OP_PUSHMARK) {
1581 PL_in_my_stash = Nullhv;
1583 /* check for C<my Dog $spot> when deciding package */
1584 stash = PAD_COMPNAME_TYPE(o->op_targ);
1586 stash = PL_curstash;
1587 apply_attrs_my(stash, o, attrs, imopsp);
1589 o->op_flags |= OPf_MOD;
1590 o->op_private |= OPpLVAL_INTRO;
1595 Perl_my_attrs(pTHX_ OP *o, OP *attrs)
1598 int maybe_scalar = 0;
1600 /* [perl #17376]: this appears to be premature, and results in code such as
1601 C< our(%x); > executing in list mode rather than void mode */
1603 if (o->op_flags & OPf_PARENS)
1612 o = my_kid(o, attrs, &rops);
1614 if (maybe_scalar && o->op_type == OP_PADSV) {
1615 o = scalar(append_list(OP_LIST, (LISTOP*)rops, (LISTOP*)o));
1616 o->op_private |= OPpLVAL_INTRO;
1619 o = append_list(OP_LIST, (LISTOP*)o, (LISTOP*)rops);
1622 PL_in_my_stash = Nullhv;
1627 Perl_my(pTHX_ OP *o)
1629 return my_attrs(o, Nullop);
1633 Perl_sawparens(pTHX_ OP *o)
1636 o->op_flags |= OPf_PARENS;
1641 Perl_bind_match(pTHX_ I32 type, OP *left, OP *right)
1645 if (ckWARN(WARN_MISC) &&
1646 (left->op_type == OP_RV2AV ||
1647 left->op_type == OP_RV2HV ||
1648 left->op_type == OP_PADAV ||
1649 left->op_type == OP_PADHV)) {
1650 char *desc = PL_op_desc[(right->op_type == OP_SUBST ||
1651 right->op_type == OP_TRANS)
1652 ? right->op_type : OP_MATCH];
1653 const char *sample = ((left->op_type == OP_RV2AV ||
1654 left->op_type == OP_PADAV)
1655 ? "@array" : "%hash");
1656 Perl_warner(aTHX_ packWARN(WARN_MISC),
1657 "Applying %s to %s will act on scalar(%s)",
1658 desc, sample, sample);
1661 if (right->op_type == OP_CONST &&
1662 cSVOPx(right)->op_private & OPpCONST_BARE &&
1663 cSVOPx(right)->op_private & OPpCONST_STRICT)
1665 no_bareword_allowed(right);
1668 if (!(right->op_flags & OPf_STACKED) &&
1669 (right->op_type == OP_MATCH ||
1670 right->op_type == OP_SUBST ||
1671 right->op_type == OP_TRANS)) {
1672 right->op_flags |= OPf_STACKED;
1673 if (right->op_type != OP_MATCH &&
1674 ! (right->op_type == OP_TRANS &&
1675 right->op_private & OPpTRANS_IDENTICAL))
1676 left = mod(left, right->op_type);
1677 if (right->op_type == OP_TRANS)
1678 o = newBINOP(OP_NULL, OPf_STACKED, scalar(left), right);
1680 o = prepend_elem(right->op_type, scalar(left), right);
1682 return newUNOP(OP_NOT, 0, scalar(o));
1686 return bind_match(type, left,
1687 pmruntime(newPMOP(OP_MATCH, 0), right, Nullop));
1691 Perl_invert(pTHX_ OP *o)
1695 /* XXX need to optimize away NOT NOT here? Or do we let optimizer do it? */
1696 return newUNOP(OP_NOT, OPf_SPECIAL, scalar(o));
1700 Perl_scope(pTHX_ OP *o)
1703 if (o->op_flags & OPf_PARENS || PERLDB_NOOPT || PL_tainting) {
1704 o = prepend_elem(OP_LINESEQ, newOP(OP_ENTER, 0), o);
1705 o->op_type = OP_LEAVE;
1706 o->op_ppaddr = PL_ppaddr[OP_LEAVE];
1709 if (o->op_type == OP_LINESEQ) {
1711 o->op_type = OP_SCOPE;
1712 o->op_ppaddr = PL_ppaddr[OP_SCOPE];
1713 kid = ((LISTOP*)o)->op_first;
1714 if (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE)
1718 o = newLISTOP(OP_SCOPE, 0, o, Nullop);
1725 Perl_save_hints(pTHX)
1728 SAVESPTR(GvHV(PL_hintgv));
1729 GvHV(PL_hintgv) = newHVhv(GvHV(PL_hintgv));
1730 SAVEFREESV(GvHV(PL_hintgv));
1734 Perl_block_start(pTHX_ int full)
1736 int retval = PL_savestack_ix;
1737 /* If there were syntax errors, don't try to start a block */
1738 if (PL_yynerrs) return retval;
1740 pad_block_start(full);
1742 PL_hints &= ~HINT_BLOCK_SCOPE;
1743 SAVESPTR(PL_compiling.cop_warnings);
1744 if (! specialWARN(PL_compiling.cop_warnings)) {
1745 PL_compiling.cop_warnings = newSVsv(PL_compiling.cop_warnings) ;
1746 SAVEFREESV(PL_compiling.cop_warnings) ;
1748 SAVESPTR(PL_compiling.cop_io);
1749 if (! specialCopIO(PL_compiling.cop_io)) {
1750 PL_compiling.cop_io = newSVsv(PL_compiling.cop_io) ;
1751 SAVEFREESV(PL_compiling.cop_io) ;
1757 Perl_block_end(pTHX_ I32 floor, OP *seq)
1759 int needblockscope = PL_hints & HINT_BLOCK_SCOPE;
1760 line_t copline = PL_copline;
1761 OP* retval = scalarseq(seq);
1762 /* If there were syntax errors, don't try to close a block */
1763 if (PL_yynerrs) return retval;
1765 /* scalarseq() gave us an OP_STUB */
1766 retval->op_flags |= OPf_PARENS;
1767 /* there should be a nextstate in every block */
1768 retval = newSTATEOP(0, Nullch, retval);
1769 PL_copline = copline; /* XXX newSTATEOP may reset PL_copline */
1772 PL_compiling.op_private = (U8)(PL_hints & HINT_PRIVATE_MASK);
1774 PL_hints |= HINT_BLOCK_SCOPE; /* propagate out */
1782 return newSVREF(newGVOP(OP_GV, 0, PL_defgv));
1786 Perl_newPROG(pTHX_ OP *o)
1791 PL_eval_root = newUNOP(OP_LEAVEEVAL,
1792 ((PL_in_eval & EVAL_KEEPERR)
1793 ? OPf_SPECIAL : 0), o);
1794 PL_eval_start = linklist(PL_eval_root);
1795 PL_eval_root->op_private |= OPpREFCOUNTED;
1796 OpREFCNT_set(PL_eval_root, 1);
1797 PL_eval_root->op_next = 0;
1798 CALL_PEEP(PL_eval_start);
1803 PL_main_root = scope(sawparens(scalarvoid(o)));
1804 PL_curcop = &PL_compiling;
1805 PL_main_start = LINKLIST(PL_main_root);
1806 PL_main_root->op_private |= OPpREFCOUNTED;
1807 OpREFCNT_set(PL_main_root, 1);
1808 PL_main_root->op_next = 0;
1809 CALL_PEEP(PL_main_start);
1812 /* Register with debugger */
1814 CV *cv = get_cv("DB::postponed", FALSE);
1818 XPUSHs((SV*)CopFILEGV(&PL_compiling));
1820 call_sv((SV*)cv, G_DISCARD);
1827 Perl_localize(pTHX_ OP *o, I32 lex)
1829 if (o->op_flags & OPf_PARENS)
1830 /* [perl #17376]: this appears to be premature, and results in code such as
1831 C< our(%x); > executing in list mode rather than void mode */
1838 if (ckWARN(WARN_PARENTHESIS)
1839 && PL_bufptr > PL_oldbufptr && PL_bufptr[-1] == ',')
1841 char *s = PL_bufptr;
1843 while (*s && (isALNUM(*s) || UTF8_IS_CONTINUED(*s) || strchr("@$%, ", *s)))
1846 if (*s == ';' || *s == '=')
1847 Perl_warner(aTHX_ packWARN(WARN_PARENTHESIS),
1848 "Parentheses missing around \"%s\" list",
1849 lex ? (PL_in_my == KEY_our ? "our" : "my") : "local");
1855 o = mod(o, OP_NULL); /* a bit kludgey */
1857 PL_in_my_stash = Nullhv;
1862 Perl_jmaybe(pTHX_ OP *o)
1864 if (o->op_type == OP_LIST) {
1866 o2 = newSVREF(newGVOP(OP_GV, 0, gv_fetchpv(";", TRUE, SVt_PV))),
1867 o = convert(OP_JOIN, 0, prepend_elem(OP_LIST, o2, o));
1873 Perl_fold_constants(pTHX_ register OP *o)
1876 I32 type = o->op_type;
1879 if (PL_opargs[type] & OA_RETSCALAR)
1881 if (PL_opargs[type] & OA_TARGET && !o->op_targ)
1882 o->op_targ = pad_alloc(type, SVs_PADTMP);
1884 /* integerize op, unless it happens to be C<-foo>.
1885 * XXX should pp_i_negate() do magic string negation instead? */
1886 if ((PL_opargs[type] & OA_OTHERINT) && (PL_hints & HINT_INTEGER)
1887 && !(type == OP_NEGATE && cUNOPo->op_first->op_type == OP_CONST
1888 && (cUNOPo->op_first->op_private & OPpCONST_BARE)))
1890 o->op_ppaddr = PL_ppaddr[type = ++(o->op_type)];
1893 if (!(PL_opargs[type] & OA_FOLDCONST))
1898 /* XXX might want a ck_negate() for this */
1899 cUNOPo->op_first->op_private &= ~OPpCONST_STRICT;
1911 /* XXX what about the numeric ops? */
1912 if (PL_hints & HINT_LOCALE)
1917 goto nope; /* Don't try to run w/ errors */
1919 for (curop = LINKLIST(o); curop != o; curop = LINKLIST(curop)) {
1920 if ((curop->op_type != OP_CONST ||
1921 (curop->op_private & OPpCONST_BARE)) &&
1922 curop->op_type != OP_LIST &&
1923 curop->op_type != OP_SCALAR &&
1924 curop->op_type != OP_NULL &&
1925 curop->op_type != OP_PUSHMARK)
1931 curop = LINKLIST(o);
1935 sv = *(PL_stack_sp--);
1936 if (o->op_targ && sv == PAD_SV(o->op_targ)) /* grab pad temp? */
1937 pad_swipe(o->op_targ, FALSE);
1938 else if (SvTEMP(sv)) { /* grab mortal temp? */
1939 (void)SvREFCNT_inc(sv);
1943 if (type == OP_RV2GV)
1944 return newGVOP(OP_GV, 0, (GV*)sv);
1945 return newSVOP(OP_CONST, 0, sv);
1952 Perl_gen_constant_list(pTHX_ register OP *o)
1955 I32 oldtmps_floor = PL_tmps_floor;
1959 return o; /* Don't attempt to run with errors */
1961 PL_op = curop = LINKLIST(o);
1968 PL_tmps_floor = oldtmps_floor;
1970 o->op_type = OP_RV2AV;
1971 o->op_ppaddr = PL_ppaddr[OP_RV2AV];
1972 o->op_seq = 0; /* needs to be revisited in peep() */
1973 curop = ((UNOP*)o)->op_first;
1974 ((UNOP*)o)->op_first = newSVOP(OP_CONST, 0, SvREFCNT_inc(*PL_stack_sp--));
1981 Perl_convert(pTHX_ I32 type, I32 flags, OP *o)
1983 if (!o || o->op_type != OP_LIST)
1984 o = newLISTOP(OP_LIST, 0, o, Nullop);
1986 o->op_flags &= ~OPf_WANT;
1988 if (!(PL_opargs[type] & OA_MARK))
1989 op_null(cLISTOPo->op_first);
1991 o->op_type = (OPCODE)type;
1992 o->op_ppaddr = PL_ppaddr[type];
1993 o->op_flags |= flags;
1995 o = CHECKOP(type, o);
1996 if (o->op_type != type)
1999 return fold_constants(o);
2002 /* List constructors */
2005 Perl_append_elem(pTHX_ I32 type, OP *first, OP *last)
2013 if (first->op_type != type
2014 || (type == OP_LIST && (first->op_flags & OPf_PARENS)))
2016 return newLISTOP(type, 0, first, last);
2019 if (first->op_flags & OPf_KIDS)
2020 ((LISTOP*)first)->op_last->op_sibling = last;
2022 first->op_flags |= OPf_KIDS;
2023 ((LISTOP*)first)->op_first = last;
2025 ((LISTOP*)first)->op_last = last;
2030 Perl_append_list(pTHX_ I32 type, LISTOP *first, LISTOP *last)
2038 if (first->op_type != type)
2039 return prepend_elem(type, (OP*)first, (OP*)last);
2041 if (last->op_type != type)
2042 return append_elem(type, (OP*)first, (OP*)last);
2044 first->op_last->op_sibling = last->op_first;
2045 first->op_last = last->op_last;
2046 first->op_flags |= (last->op_flags & OPf_KIDS);
2054 Perl_prepend_elem(pTHX_ I32 type, OP *first, OP *last)
2062 if (last->op_type == type) {
2063 if (type == OP_LIST) { /* already a PUSHMARK there */
2064 first->op_sibling = ((LISTOP*)last)->op_first->op_sibling;
2065 ((LISTOP*)last)->op_first->op_sibling = first;
2066 if (!(first->op_flags & OPf_PARENS))
2067 last->op_flags &= ~OPf_PARENS;
2070 if (!(last->op_flags & OPf_KIDS)) {
2071 ((LISTOP*)last)->op_last = first;
2072 last->op_flags |= OPf_KIDS;
2074 first->op_sibling = ((LISTOP*)last)->op_first;
2075 ((LISTOP*)last)->op_first = first;
2077 last->op_flags |= OPf_KIDS;
2081 return newLISTOP(type, 0, first, last);
2087 Perl_newNULLLIST(pTHX)
2089 return newOP(OP_STUB, 0);
2093 Perl_force_list(pTHX_ OP *o)
2095 if (!o || o->op_type != OP_LIST)
2096 o = newLISTOP(OP_LIST, 0, o, Nullop);
2102 Perl_newLISTOP(pTHX_ I32 type, I32 flags, OP *first, OP *last)
2106 NewOp(1101, listop, 1, LISTOP);
2108 listop->op_type = (OPCODE)type;
2109 listop->op_ppaddr = PL_ppaddr[type];
2112 listop->op_flags = (U8)flags;
2116 else if (!first && last)
2119 first->op_sibling = last;
2120 listop->op_first = first;
2121 listop->op_last = last;
2122 if (type == OP_LIST) {
2124 pushop = newOP(OP_PUSHMARK, 0);
2125 pushop->op_sibling = first;
2126 listop->op_first = pushop;
2127 listop->op_flags |= OPf_KIDS;
2129 listop->op_last = pushop;
2136 Perl_newOP(pTHX_ I32 type, I32 flags)
2139 NewOp(1101, o, 1, OP);
2140 o->op_type = (OPCODE)type;
2141 o->op_ppaddr = PL_ppaddr[type];
2142 o->op_flags = (U8)flags;
2145 o->op_private = (U8)(0 | (flags >> 8));
2146 if (PL_opargs[type] & OA_RETSCALAR)
2148 if (PL_opargs[type] & OA_TARGET)
2149 o->op_targ = pad_alloc(type, SVs_PADTMP);
2150 return CHECKOP(type, o);
2154 Perl_newUNOP(pTHX_ I32 type, I32 flags, OP *first)
2159 first = newOP(OP_STUB, 0);
2160 if (PL_opargs[type] & OA_MARK)
2161 first = force_list(first);
2163 NewOp(1101, unop, 1, UNOP);
2164 unop->op_type = (OPCODE)type;
2165 unop->op_ppaddr = PL_ppaddr[type];
2166 unop->op_first = first;
2167 unop->op_flags = flags | OPf_KIDS;
2168 unop->op_private = (U8)(1 | (flags >> 8));
2169 unop = (UNOP*) CHECKOP(type, unop);
2173 return fold_constants((OP *) unop);
2177 Perl_newBINOP(pTHX_ I32 type, I32 flags, OP *first, OP *last)
2180 NewOp(1101, binop, 1, BINOP);
2183 first = newOP(OP_NULL, 0);
2185 binop->op_type = (OPCODE)type;
2186 binop->op_ppaddr = PL_ppaddr[type];
2187 binop->op_first = first;
2188 binop->op_flags = flags | OPf_KIDS;
2191 binop->op_private = (U8)(1 | (flags >> 8));
2194 binop->op_private = (U8)(2 | (flags >> 8));
2195 first->op_sibling = last;
2198 binop = (BINOP*)CHECKOP(type, binop);
2199 if (binop->op_next || binop->op_type != (OPCODE)type)
2202 binop->op_last = binop->op_first->op_sibling;
2204 return fold_constants((OP *)binop);
2208 uvcompare(const void *a, const void *b)
2210 if (*((UV *)a) < (*(UV *)b))
2212 if (*((UV *)a) > (*(UV *)b))
2214 if (*((UV *)a+1) < (*(UV *)b+1))
2216 if (*((UV *)a+1) > (*(UV *)b+1))
2222 Perl_pmtrans(pTHX_ OP *o, OP *expr, OP *repl)
2224 SV *tstr = ((SVOP*)expr)->op_sv;
2225 SV *rstr = ((SVOP*)repl)->op_sv;
2228 U8 *t = (U8*)SvPV(tstr, tlen);
2229 U8 *r = (U8*)SvPV(rstr, rlen);
2236 register short *tbl;
2238 PL_hints |= HINT_BLOCK_SCOPE;
2239 complement = o->op_private & OPpTRANS_COMPLEMENT;
2240 del = o->op_private & OPpTRANS_DELETE;
2241 squash = o->op_private & OPpTRANS_SQUASH;
2244 o->op_private |= OPpTRANS_FROM_UTF;
2247 o->op_private |= OPpTRANS_TO_UTF;
2249 if (o->op_private & (OPpTRANS_FROM_UTF|OPpTRANS_TO_UTF)) {
2250 SV* listsv = newSVpvn("# comment\n",10);
2252 U8* tend = t + tlen;
2253 U8* rend = r + rlen;
2267 I32 from_utf = o->op_private & OPpTRANS_FROM_UTF;
2268 I32 to_utf = o->op_private & OPpTRANS_TO_UTF;
2274 tsave = t = bytes_to_utf8(t, &len);
2277 if (!to_utf && rlen) {
2279 rsave = r = bytes_to_utf8(r, &len);
2283 /* There are several snags with this code on EBCDIC:
2284 1. 0xFF is a legal UTF-EBCDIC byte (there are no illegal bytes).
2285 2. scan_const() in toke.c has encoded chars in native encoding which makes
2286 ranges at least in EBCDIC 0..255 range the bottom odd.
2290 U8 tmpbuf[UTF8_MAXLEN+1];
2293 New(1109, cp, 2*tlen, UV);
2295 transv = newSVpvn("",0);
2297 cp[2*i] = utf8n_to_uvuni(t, tend-t, &ulen, 0);
2299 if (t < tend && NATIVE_TO_UTF(*t) == 0xff) {
2301 cp[2*i+1] = utf8n_to_uvuni(t, tend-t, &ulen, 0);
2305 cp[2*i+1] = cp[2*i];
2309 qsort(cp, i, 2*sizeof(UV), uvcompare);
2310 for (j = 0; j < i; j++) {
2312 diff = val - nextmin;
2314 t = uvuni_to_utf8(tmpbuf,nextmin);
2315 sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf);
2317 U8 range_mark = UTF_TO_NATIVE(0xff);
2318 t = uvuni_to_utf8(tmpbuf, val - 1);
2319 sv_catpvn(transv, (char *)&range_mark, 1);
2320 sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf);
2327 t = uvuni_to_utf8(tmpbuf,nextmin);
2328 sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf);
2330 U8 range_mark = UTF_TO_NATIVE(0xff);
2331 sv_catpvn(transv, (char *)&range_mark, 1);
2333 t = uvuni_to_utf8_flags(tmpbuf, 0x7fffffff,
2334 UNICODE_ALLOW_SUPER);
2335 sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf);
2336 t = (U8*)SvPVX(transv);
2337 tlen = SvCUR(transv);
2341 else if (!rlen && !del) {
2342 r = t; rlen = tlen; rend = tend;
2345 if ((!rlen && !del) || t == r ||
2346 (tlen == rlen && memEQ((char *)t, (char *)r, tlen)))
2348 o->op_private |= OPpTRANS_IDENTICAL;
2352 while (t < tend || tfirst <= tlast) {
2353 /* see if we need more "t" chars */
2354 if (tfirst > tlast) {
2355 tfirst = (I32)utf8n_to_uvuni(t, tend - t, &ulen, 0);
2357 if (t < tend && NATIVE_TO_UTF(*t) == 0xff) { /* illegal utf8 val indicates range */
2359 tlast = (I32)utf8n_to_uvuni(t, tend - t, &ulen, 0);
2366 /* now see if we need more "r" chars */
2367 if (rfirst > rlast) {
2369 rfirst = (I32)utf8n_to_uvuni(r, rend - r, &ulen, 0);
2371 if (r < rend && NATIVE_TO_UTF(*r) == 0xff) { /* illegal utf8 val indicates range */
2373 rlast = (I32)utf8n_to_uvuni(r, rend - r, &ulen, 0);
2382 rfirst = rlast = 0xffffffff;
2386 /* now see which range will peter our first, if either. */
2387 tdiff = tlast - tfirst;
2388 rdiff = rlast - rfirst;
2395 if (rfirst == 0xffffffff) {
2396 diff = tdiff; /* oops, pretend rdiff is infinite */
2398 Perl_sv_catpvf(aTHX_ listsv, "%04lx\t%04lx\tXXXX\n",
2399 (long)tfirst, (long)tlast);
2401 Perl_sv_catpvf(aTHX_ listsv, "%04lx\t\tXXXX\n", (long)tfirst);
2405 Perl_sv_catpvf(aTHX_ listsv, "%04lx\t%04lx\t%04lx\n",
2406 (long)tfirst, (long)(tfirst + diff),
2409 Perl_sv_catpvf(aTHX_ listsv, "%04lx\t\t%04lx\n",
2410 (long)tfirst, (long)rfirst);
2412 if (rfirst + diff > max)
2413 max = rfirst + diff;
2415 grows = (tfirst < rfirst &&
2416 UNISKIP(tfirst) < UNISKIP(rfirst + diff));
2428 else if (max > 0xff)
2433 Safefree(cPVOPo->op_pv);
2434 cSVOPo->op_sv = (SV*)swash_init("utf8", "", listsv, bits, none);
2435 SvREFCNT_dec(listsv);
2437 SvREFCNT_dec(transv);
2439 if (!del && havefinal && rlen)
2440 (void)hv_store((HV*)SvRV((cSVOPo->op_sv)), "FINAL", 5,
2441 newSVuv((UV)final), 0);
2444 o->op_private |= OPpTRANS_GROWS;
2456 tbl = (short*)cPVOPo->op_pv;
2458 Zero(tbl, 256, short);
2459 for (i = 0; i < (I32)tlen; i++)
2461 for (i = 0, j = 0; i < 256; i++) {
2463 if (j >= (I32)rlen) {
2472 if (i < 128 && r[j] >= 128)
2482 o->op_private |= OPpTRANS_IDENTICAL;
2484 else if (j >= (I32)rlen)
2487 cPVOPo->op_pv = (char*)Renew(tbl, 0x101+rlen-j, short);
2488 tbl[0x100] = rlen - j;
2489 for (i=0; i < (I32)rlen - j; i++)
2490 tbl[0x101+i] = r[j+i];
2494 if (!rlen && !del) {
2497 o->op_private |= OPpTRANS_IDENTICAL;
2499 else if (!squash && rlen == tlen && memEQ((char*)t, (char*)r, tlen)) {
2500 o->op_private |= OPpTRANS_IDENTICAL;
2502 for (i = 0; i < 256; i++)
2504 for (i = 0, j = 0; i < (I32)tlen; i++,j++) {
2505 if (j >= (I32)rlen) {
2507 if (tbl[t[i]] == -1)
2513 if (tbl[t[i]] == -1) {
2514 if (t[i] < 128 && r[j] >= 128)
2521 o->op_private |= OPpTRANS_GROWS;
2529 Perl_newPMOP(pTHX_ I32 type, I32 flags)
2533 NewOp(1101, pmop, 1, PMOP);
2534 pmop->op_type = (OPCODE)type;
2535 pmop->op_ppaddr = PL_ppaddr[type];
2536 pmop->op_flags = (U8)flags;
2537 pmop->op_private = (U8)(0 | (flags >> 8));
2539 if (PL_hints & HINT_RE_TAINT)
2540 pmop->op_pmpermflags |= PMf_RETAINT;
2541 if (PL_hints & HINT_LOCALE)
2542 pmop->op_pmpermflags |= PMf_LOCALE;
2543 pmop->op_pmflags = pmop->op_pmpermflags;
2548 if(av_len((AV*) PL_regex_pad[0]) > -1) {
2549 repointer = av_pop((AV*)PL_regex_pad[0]);
2550 pmop->op_pmoffset = SvIV(repointer);
2551 SvREPADTMP_off(repointer);
2552 sv_setiv(repointer,0);
2554 repointer = newSViv(0);
2555 av_push(PL_regex_padav,SvREFCNT_inc(repointer));
2556 pmop->op_pmoffset = av_len(PL_regex_padav);
2557 PL_regex_pad = AvARRAY(PL_regex_padav);
2562 /* link into pm list */
2563 if (type != OP_TRANS && PL_curstash) {
2564 pmop->op_pmnext = HvPMROOT(PL_curstash);
2565 HvPMROOT(PL_curstash) = pmop;
2566 PmopSTASH_set(pmop,PL_curstash);
2573 Perl_pmruntime(pTHX_ OP *o, OP *expr, OP *repl)
2577 I32 repl_has_vars = 0;
2579 if (o->op_type == OP_TRANS)
2580 return pmtrans(o, expr, repl);
2582 PL_hints |= HINT_BLOCK_SCOPE;
2585 if (expr->op_type == OP_CONST) {
2587 SV *pat = ((SVOP*)expr)->op_sv;
2588 char *p = SvPV(pat, plen);
2589 if ((o->op_flags & OPf_SPECIAL) && strEQ(p, " ")) {
2590 sv_setpvn(pat, "\\s+", 3);
2591 p = SvPV(pat, plen);
2592 pm->op_pmflags |= PMf_SKIPWHITE;
2595 pm->op_pmdynflags |= PMdf_UTF8;
2596 PM_SETRE(pm, CALLREGCOMP(aTHX_ p, p + plen, pm));
2597 if (strEQ("\\s+", PM_GETRE(pm)->precomp))
2598 pm->op_pmflags |= PMf_WHITE;
2602 if (pm->op_pmflags & PMf_KEEP || !(PL_hints & HINT_RE_EVAL))
2603 expr = newUNOP((!(PL_hints & HINT_RE_EVAL)
2605 : OP_REGCMAYBE),0,expr);
2607 NewOp(1101, rcop, 1, LOGOP);
2608 rcop->op_type = OP_REGCOMP;
2609 rcop->op_ppaddr = PL_ppaddr[OP_REGCOMP];
2610 rcop->op_first = scalar(expr);
2611 rcop->op_flags |= ((PL_hints & HINT_RE_EVAL)
2612 ? (OPf_SPECIAL | OPf_KIDS)
2614 rcop->op_private = 1;
2617 /* establish postfix order */
2618 if (pm->op_pmflags & PMf_KEEP || !(PL_hints & HINT_RE_EVAL)) {
2620 rcop->op_next = expr;
2621 ((UNOP*)expr)->op_first->op_next = (OP*)rcop;
2624 rcop->op_next = LINKLIST(expr);
2625 expr->op_next = (OP*)rcop;
2628 prepend_elem(o->op_type, scalar((OP*)rcop), o);
2633 if (pm->op_pmflags & PMf_EVAL) {
2635 if (CopLINE(PL_curcop) < PL_multi_end)
2636 CopLINE_set(PL_curcop, (line_t)PL_multi_end);
2638 else if (repl->op_type == OP_CONST)
2642 for (curop = LINKLIST(repl); curop!=repl; curop = LINKLIST(curop)) {
2643 if (PL_opargs[curop->op_type] & OA_DANGEROUS) {
2644 if (curop->op_type == OP_GV) {
2645 GV *gv = cGVOPx_gv(curop);
2647 if (strchr("&`'123456789+", *GvENAME(gv)))
2650 else if (curop->op_type == OP_RV2CV)
2652 else if (curop->op_type == OP_RV2SV ||
2653 curop->op_type == OP_RV2AV ||
2654 curop->op_type == OP_RV2HV ||
2655 curop->op_type == OP_RV2GV) {
2656 if (lastop && lastop->op_type != OP_GV) /*funny deref?*/
2659 else if (curop->op_type == OP_PADSV ||
2660 curop->op_type == OP_PADAV ||
2661 curop->op_type == OP_PADHV ||
2662 curop->op_type == OP_PADANY) {
2665 else if (curop->op_type == OP_PUSHRE)
2666 ; /* Okay here, dangerous in newASSIGNOP */
2676 || PM_GETRE(pm)->reganch & ROPT_EVAL_SEEN))) {
2677 pm->op_pmflags |= PMf_CONST; /* const for long enough */
2678 pm->op_pmpermflags |= PMf_CONST; /* const for long enough */
2679 prepend_elem(o->op_type, scalar(repl), o);
2682 if (curop == repl && !PM_GETRE(pm)) { /* Has variables. */
2683 pm->op_pmflags |= PMf_MAYBE_CONST;
2684 pm->op_pmpermflags |= PMf_MAYBE_CONST;
2686 NewOp(1101, rcop, 1, LOGOP);
2687 rcop->op_type = OP_SUBSTCONT;
2688 rcop->op_ppaddr = PL_ppaddr[OP_SUBSTCONT];
2689 rcop->op_first = scalar(repl);
2690 rcop->op_flags |= OPf_KIDS;
2691 rcop->op_private = 1;
2694 /* establish postfix order */
2695 rcop->op_next = LINKLIST(repl);
2696 repl->op_next = (OP*)rcop;
2698 pm->op_pmreplroot = scalar((OP*)rcop);
2699 pm->op_pmreplstart = LINKLIST(rcop);
2708 Perl_newSVOP(pTHX_ I32 type, I32 flags, SV *sv)
2711 NewOp(1101, svop, 1, SVOP);
2712 svop->op_type = (OPCODE)type;
2713 svop->op_ppaddr = PL_ppaddr[type];
2715 svop->op_next = (OP*)svop;
2716 svop->op_flags = (U8)flags;
2717 if (PL_opargs[type] & OA_RETSCALAR)
2719 if (PL_opargs[type] & OA_TARGET)
2720 svop->op_targ = pad_alloc(type, SVs_PADTMP);
2721 return CHECKOP(type, svop);
2725 Perl_newPADOP(pTHX_ I32 type, I32 flags, SV *sv)
2728 NewOp(1101, padop, 1, PADOP);
2729 padop->op_type = (OPCODE)type;
2730 padop->op_ppaddr = PL_ppaddr[type];
2731 padop->op_padix = pad_alloc(type, SVs_PADTMP);
2732 SvREFCNT_dec(PAD_SVl(padop->op_padix));
2733 PAD_SETSV(padop->op_padix, sv);
2736 padop->op_next = (OP*)padop;
2737 padop->op_flags = (U8)flags;
2738 if (PL_opargs[type] & OA_RETSCALAR)
2740 if (PL_opargs[type] & OA_TARGET)
2741 padop->op_targ = pad_alloc(type, SVs_PADTMP);
2742 return CHECKOP(type, padop);
2746 Perl_newGVOP(pTHX_ I32 type, I32 flags, GV *gv)
2751 return newPADOP(type, flags, SvREFCNT_inc(gv));
2753 return newSVOP(type, flags, SvREFCNT_inc(gv));
2758 Perl_newPVOP(pTHX_ I32 type, I32 flags, char *pv)
2761 NewOp(1101, pvop, 1, PVOP);
2762 pvop->op_type = (OPCODE)type;
2763 pvop->op_ppaddr = PL_ppaddr[type];
2765 pvop->op_next = (OP*)pvop;
2766 pvop->op_flags = (U8)flags;
2767 if (PL_opargs[type] & OA_RETSCALAR)
2769 if (PL_opargs[type] & OA_TARGET)
2770 pvop->op_targ = pad_alloc(type, SVs_PADTMP);
2771 return CHECKOP(type, pvop);
2775 Perl_package(pTHX_ OP *o)
2780 save_hptr(&PL_curstash);
2781 save_item(PL_curstname);
2783 name = SvPV(cSVOPo->op_sv, len);
2784 PL_curstash = gv_stashpvn(name, len, TRUE);
2785 sv_setpvn(PL_curstname, name, len);
2788 PL_hints |= HINT_BLOCK_SCOPE;
2789 PL_copline = NOLINE;
2794 Perl_utilize(pTHX_ int aver, I32 floor, OP *version, OP *id, OP *arg)
2800 if (id->op_type != OP_CONST)
2801 Perl_croak(aTHX_ "Module name must be constant");
2805 if (version != Nullop) {
2806 SV *vesv = ((SVOP*)version)->op_sv;
2808 if (arg == Nullop && !SvNIOKp(vesv)) {
2815 if (version->op_type != OP_CONST || !SvNIOKp(vesv))
2816 Perl_croak(aTHX_ "Version number must be constant number");
2818 /* Make copy of id so we don't free it twice */
2819 pack = newSVOP(OP_CONST, 0, newSVsv(((SVOP*)id)->op_sv));
2821 /* Fake up a method call to VERSION */
2822 meth = newSVpvn("VERSION",7);
2823 sv_upgrade(meth, SVt_PVIV);
2824 (void)SvIOK_on(meth);
2825 PERL_HASH(SvUVX(meth), SvPVX(meth), SvCUR(meth));
2826 veop = convert(OP_ENTERSUB, OPf_STACKED|OPf_SPECIAL,
2827 append_elem(OP_LIST,
2828 prepend_elem(OP_LIST, pack, list(version)),
2829 newSVOP(OP_METHOD_NAMED, 0, meth)));
2833 /* Fake up an import/unimport */
2834 if (arg && arg->op_type == OP_STUB)
2835 imop = arg; /* no import on explicit () */
2836 else if (SvNIOKp(((SVOP*)id)->op_sv)) {
2837 imop = Nullop; /* use 5.0; */
2842 /* Make copy of id so we don't free it twice */
2843 pack = newSVOP(OP_CONST, 0, newSVsv(((SVOP*)id)->op_sv));
2845 /* Fake up a method call to import/unimport */
2846 meth = aver ? newSVpvn("import",6) : newSVpvn("unimport", 8);
2847 (void)SvUPGRADE(meth, SVt_PVIV);
2848 (void)SvIOK_on(meth);
2849 PERL_HASH(SvUVX(meth), SvPVX(meth), SvCUR(meth));
2850 imop = convert(OP_ENTERSUB, OPf_STACKED|OPf_SPECIAL,
2851 append_elem(OP_LIST,
2852 prepend_elem(OP_LIST, pack, list(arg)),
2853 newSVOP(OP_METHOD_NAMED, 0, meth)));
2856 /* Fake up the BEGIN {}, which does its thing immediately. */
2858 newSVOP(OP_CONST, 0, newSVpvn("BEGIN", 5)),
2861 append_elem(OP_LINESEQ,
2862 append_elem(OP_LINESEQ,
2863 newSTATEOP(0, Nullch, newUNOP(OP_REQUIRE, 0, id)),
2864 newSTATEOP(0, Nullch, veop)),
2865 newSTATEOP(0, Nullch, imop) ));
2867 /* The "did you use incorrect case?" warning used to be here.
2868 * The problem is that on case-insensitive filesystems one
2869 * might get false positives for "use" (and "require"):
2870 * "use Strict" or "require CARP" will work. This causes
2871 * portability problems for the script: in case-strict
2872 * filesystems the script will stop working.
2874 * The "incorrect case" warning checked whether "use Foo"
2875 * imported "Foo" to your namespace, but that is wrong, too:
2876 * there is no requirement nor promise in the language that
2877 * a Foo.pm should or would contain anything in package "Foo".
2879 * There is very little Configure-wise that can be done, either:
2880 * the case-sensitivity of the build filesystem of Perl does not
2881 * help in guessing the case-sensitivity of the runtime environment.
2884 PL_hints |= HINT_BLOCK_SCOPE;
2885 PL_copline = NOLINE;
2890 =head1 Embedding Functions
2892 =for apidoc load_module
2894 Loads the module whose name is pointed to by the string part of name.
2895 Note that the actual module name, not its filename, should be given.
2896 Eg, "Foo::Bar" instead of "Foo/Bar.pm". flags can be any of
2897 PERL_LOADMOD_DENY, PERL_LOADMOD_NOIMPORT, or PERL_LOADMOD_IMPORT_OPS
2898 (or 0 for no flags). ver, if specified, provides version semantics
2899 similar to C<use Foo::Bar VERSION>. The optional trailing SV*
2900 arguments can be used to specify arguments to the module's import()
2901 method, similar to C<use Foo::Bar VERSION LIST>.
2906 Perl_load_module(pTHX_ U32 flags, SV *name, SV *ver, ...)
2909 va_start(args, ver);
2910 vload_module(flags, name, ver, &args);
2914 #ifdef PERL_IMPLICIT_CONTEXT
2916 Perl_load_module_nocontext(U32 flags, SV *name, SV *ver, ...)
2920 va_start(args, ver);
2921 vload_module(flags, name, ver, &args);
2927 Perl_vload_module(pTHX_ U32 flags, SV *name, SV *ver, va_list *args)
2929 OP *modname, *veop, *imop;
2931 modname = newSVOP(OP_CONST, 0, name);
2932 modname->op_private |= OPpCONST_BARE;
2934 veop = newSVOP(OP_CONST, 0, ver);
2938 if (flags & PERL_LOADMOD_NOIMPORT) {
2939 imop = sawparens(newNULLLIST());
2941 else if (flags & PERL_LOADMOD_IMPORT_OPS) {
2942 imop = va_arg(*args, OP*);
2947 sv = va_arg(*args, SV*);
2949 imop = append_elem(OP_LIST, imop, newSVOP(OP_CONST, 0, sv));
2950 sv = va_arg(*args, SV*);
2954 line_t ocopline = PL_copline;
2955 COP *ocurcop = PL_curcop;
2956 int oexpect = PL_expect;
2958 utilize(!(flags & PERL_LOADMOD_DENY), start_subparse(FALSE, 0),
2959 veop, modname, imop);
2960 PL_expect = oexpect;
2961 PL_copline = ocopline;
2962 PL_curcop = ocurcop;
2967 Perl_dofile(pTHX_ OP *term)
2972 gv = gv_fetchpv("do", FALSE, SVt_PVCV);
2973 if (!(gv && GvCVu(gv) && GvIMPORTED_CV(gv)))
2974 gv = gv_fetchpv("CORE::GLOBAL::do", FALSE, SVt_PVCV);
2976 if (gv && GvCVu(gv) && GvIMPORTED_CV(gv)) {
2977 doop = ck_subr(newUNOP(OP_ENTERSUB, OPf_STACKED,
2978 append_elem(OP_LIST, term,
2979 scalar(newUNOP(OP_RV2CV, 0,
2984 doop = newUNOP(OP_DOFILE, 0, scalar(term));
2990 Perl_newSLICEOP(pTHX_ I32 flags, OP *subscript, OP *listval)
2992 return newBINOP(OP_LSLICE, flags,
2993 list(force_list(subscript)),
2994 list(force_list(listval)) );
2998 S_list_assignment(pTHX_ register OP *o)
3003 if (o->op_type == OP_NULL && o->op_flags & OPf_KIDS)
3004 o = cUNOPo->op_first;
3006 if (o->op_type == OP_COND_EXPR) {
3007 I32 t = list_assignment(cLOGOPo->op_first->op_sibling);
3008 I32 f = list_assignment(cLOGOPo->op_first->op_sibling->op_sibling);
3013 yyerror("Assignment to both a list and a scalar");
3017 if (o->op_type == OP_LIST &&
3018 (o->op_flags & OPf_WANT) == OPf_WANT_SCALAR &&
3019 o->op_private & OPpLVAL_INTRO)
3022 if (o->op_type == OP_LIST || o->op_flags & OPf_PARENS ||
3023 o->op_type == OP_RV2AV || o->op_type == OP_RV2HV ||
3024 o->op_type == OP_ASLICE || o->op_type == OP_HSLICE)
3027 if (o->op_type == OP_PADAV || o->op_type == OP_PADHV)
3030 if (o->op_type == OP_RV2SV)
3037 Perl_newASSIGNOP(pTHX_ I32 flags, OP *left, I32 optype, OP *right)
3042 if (optype == OP_ANDASSIGN || optype == OP_ORASSIGN || optype == OP_DORASSIGN) {
3043 return newLOGOP(optype, 0,
3044 mod(scalar(left), optype),
3045 newUNOP(OP_SASSIGN, 0, scalar(right)));
3048 return newBINOP(optype, OPf_STACKED,
3049 mod(scalar(left), optype), scalar(right));
3053 if (list_assignment(left)) {
3057 PL_eval_start = right; /* Grandfathering $[ assignment here. Bletch.*/
3058 left = mod(left, OP_AASSIGN);
3066 curop = list(force_list(left));
3067 o = newBINOP(OP_AASSIGN, flags, list(force_list(right)), curop);
3068 o->op_private = (U8)(0 | (flags >> 8));
3070 /* PL_generation sorcery:
3071 * an assignment like ($a,$b) = ($c,$d) is easier than
3072 * ($a,$b) = ($c,$a), since there is no need for temporary vars.
3073 * To detect whether there are common vars, the global var
3074 * PL_generation is incremented for each assign op we compile.
3075 * Then, while compiling the assign op, we run through all the
3076 * variables on both sides of the assignment, setting a spare slot
3077 * in each of them to PL_generation. If any of them already have
3078 * that value, we know we've got commonality. We could use a
3079 * single bit marker, but then we'd have to make 2 passes, first
3080 * to clear the flag, then to test and set it. To find somewhere
3081 * to store these values, evil chicanery is done with SvCUR().
3084 if (!(left->op_private & OPpLVAL_INTRO)) {
3087 for (curop = LINKLIST(o); curop != o; curop = LINKLIST(curop)) {
3088 if (PL_opargs[curop->op_type] & OA_DANGEROUS) {
3089 if (curop->op_type == OP_GV) {
3090 GV *gv = cGVOPx_gv(curop);
3091 if (gv == PL_defgv || (int)SvCUR(gv) == PL_generation)
3093 SvCUR(gv) = PL_generation;
3095 else if (curop->op_type == OP_PADSV ||
3096 curop->op_type == OP_PADAV ||
3097 curop->op_type == OP_PADHV ||
3098 curop->op_type == OP_PADANY)
3100 if (PAD_COMPNAME_GEN(curop->op_targ)
3101 == (STRLEN)PL_generation)
3103 PAD_COMPNAME_GEN(curop->op_targ)
3107 else if (curop->op_type == OP_RV2CV)
3109 else if (curop->op_type == OP_RV2SV ||
3110 curop->op_type == OP_RV2AV ||
3111 curop->op_type == OP_RV2HV ||
3112 curop->op_type == OP_RV2GV) {
3113 if (lastop->op_type != OP_GV) /* funny deref? */
3116 else if (curop->op_type == OP_PUSHRE) {
3117 if (((PMOP*)curop)->op_pmreplroot) {
3119 GV *gv = (GV*)PAD_SVl(INT2PTR(PADOFFSET,
3120 ((PMOP*)curop)->op_pmreplroot));
3122 GV *gv = (GV*)((PMOP*)curop)->op_pmreplroot;
3124 if (gv == PL_defgv || (int)SvCUR(gv) == PL_generation)
3126 SvCUR(gv) = PL_generation;
3135 o->op_private |= OPpASSIGN_COMMON;
3137 if (right && right->op_type == OP_SPLIT) {
3139 if ((tmpop = ((LISTOP*)right)->op_first) &&
3140 tmpop->op_type == OP_PUSHRE)
3142 PMOP *pm = (PMOP*)tmpop;
3143 if (left->op_type == OP_RV2AV &&
3144 !(left->op_private & OPpLVAL_INTRO) &&
3145 !(o->op_private & OPpASSIGN_COMMON) )
3147 tmpop = ((UNOP*)left)->op_first;
3148 if (tmpop->op_type == OP_GV && !pm->op_pmreplroot) {
3150 pm->op_pmreplroot = INT2PTR(OP*, cPADOPx(tmpop)->op_padix);
3151 cPADOPx(tmpop)->op_padix = 0; /* steal it */
3153 pm->op_pmreplroot = (OP*)cSVOPx(tmpop)->op_sv;
3154 cSVOPx(tmpop)->op_sv = Nullsv; /* steal it */
3156 pm->op_pmflags |= PMf_ONCE;
3157 tmpop = cUNOPo->op_first; /* to list (nulled) */
3158 tmpop = ((UNOP*)tmpop)->op_first; /* to pushmark */
3159 tmpop->op_sibling = Nullop; /* don't free split */
3160 right->op_next = tmpop->op_next; /* fix starting loc */
3161 op_free(o); /* blow off assign */
3162 right->op_flags &= ~OPf_WANT;
3163 /* "I don't know and I don't care." */
3168 if (PL_modcount < RETURN_UNLIMITED_NUMBER &&
3169 ((LISTOP*)right)->op_last->op_type == OP_CONST)
3171 SV *sv = ((SVOP*)((LISTOP*)right)->op_last)->op_sv;
3173 sv_setiv(sv, PL_modcount+1);
3181 right = newOP(OP_UNDEF, 0);
3182 if (right->op_type == OP_READLINE) {
3183 right->op_flags |= OPf_STACKED;
3184 return newBINOP(OP_NULL, flags, mod(scalar(left), OP_SASSIGN), scalar(right));
3187 PL_eval_start = right; /* Grandfathering $[ assignment here. Bletch.*/
3188 o = newBINOP(OP_SASSIGN, flags,
3189 scalar(right), mod(scalar(left), OP_SASSIGN) );
3201 Perl_newSTATEOP(pTHX_ I32 flags, char *label, OP *o)
3203 U32 seq = intro_my();
3206 NewOp(1101, cop, 1, COP);
3207 if (PERLDB_LINE && CopLINE(PL_curcop) && PL_curstash != PL_debstash) {
3208 cop->op_type = OP_DBSTATE;
3209 cop->op_ppaddr = PL_ppaddr[ OP_DBSTATE ];
3212 cop->op_type = OP_NEXTSTATE;
3213 cop->op_ppaddr = PL_ppaddr[ OP_NEXTSTATE ];
3215 cop->op_flags = (U8)flags;
3216 cop->op_private = (U8)(PL_hints & HINT_PRIVATE_MASK);
3218 cop->op_private |= NATIVE_HINTS;
3220 PL_compiling.op_private = cop->op_private;
3221 cop->op_next = (OP*)cop;
3224 cop->cop_label = label;
3225 PL_hints |= HINT_BLOCK_SCOPE;
3228 cop->cop_arybase = PL_curcop->cop_arybase;
3229 if (specialWARN(PL_curcop->cop_warnings))
3230 cop->cop_warnings = PL_curcop->cop_warnings ;
3232 cop->cop_warnings = newSVsv(PL_curcop->cop_warnings) ;
3233 if (specialCopIO(PL_curcop->cop_io))
3234 cop->cop_io = PL_curcop->cop_io;
3236 cop->cop_io = newSVsv(PL_curcop->cop_io) ;
3239 if (PL_copline == NOLINE)
3240 CopLINE_set(cop, CopLINE(PL_curcop));
3242 CopLINE_set(cop, PL_copline);
3243 PL_copline = NOLINE;
3246 CopFILE_set(cop, CopFILE(PL_curcop)); /* XXX share in a pvtable? */
3248 CopFILEGV_set(cop, CopFILEGV(PL_curcop));
3250 CopSTASH_set(cop, PL_curstash);
3252 if (PERLDB_LINE && PL_curstash != PL_debstash) {
3253 SV **svp = av_fetch(CopFILEAV(PL_curcop), (I32)CopLINE(cop), FALSE);
3254 if (svp && *svp != &PL_sv_undef ) {
3255 (void)SvIOK_on(*svp);
3256 SvIVX(*svp) = PTR2IV(cop);
3260 return prepend_elem(OP_LINESEQ, (OP*)cop, o);
3265 Perl_newLOGOP(pTHX_ I32 type, I32 flags, OP *first, OP *other)
3267 return new_logop(type, flags, &first, &other);
3271 S_new_logop(pTHX_ I32 type, I32 flags, OP** firstp, OP** otherp)
3275 OP *first = *firstp;
3276 OP *other = *otherp;
3278 if (type == OP_XOR) /* Not short circuit, but here by precedence. */
3279 return newBINOP(type, flags, scalar(first), scalar(other));
3281 scalarboolean(first);
3282 /* optimize "!a && b" to "a || b", and "!a || b" to "a && b" */
3283 if (first->op_type == OP_NOT && (first->op_flags & OPf_SPECIAL)) {
3284 if (type == OP_AND || type == OP_OR) {
3290 first = *firstp = cUNOPo->op_first;
3292 first->op_next = o->op_next;
3293 cUNOPo->op_first = Nullop;
3297 if (first->op_type == OP_CONST) {
3298 if (ckWARN(WARN_BAREWORD) && (first->op_private & OPpCONST_BARE)) {
3299 if (first->op_private & OPpCONST_STRICT)
3300 no_bareword_allowed(first);
3302 Perl_warner(aTHX_ packWARN(WARN_BAREWORD), "Bareword found in conditional");
3304 if ((type == OP_AND) == (SvTRUE(((SVOP*)first)->op_sv))) {
3315 else if (ckWARN(WARN_MISC) && (first->op_flags & OPf_KIDS)) {
3316 OP *k1 = ((UNOP*)first)->op_first;
3317 OP *k2 = k1->op_sibling;
3319 switch (first->op_type)
3322 if (k2 && k2->op_type == OP_READLINE
3323 && (k2->op_flags & OPf_STACKED)
3324 && ((k1->op_flags & OPf_WANT) == OPf_WANT_SCALAR))
3326 warnop = k2->op_type;
3331 if (k1->op_type == OP_READDIR
3332 || k1->op_type == OP_GLOB
3333 || (k1->op_type == OP_NULL && k1->op_targ == OP_GLOB)
3334 || k1->op_type == OP_EACH)
3336 warnop = ((k1->op_type == OP_NULL)
3337 ? (OPCODE)k1->op_targ : k1->op_type);
3342 line_t oldline = CopLINE(PL_curcop);
3343 CopLINE_set(PL_curcop, PL_copline);
3344 Perl_warner(aTHX_ packWARN(WARN_MISC),
3345 "Value of %s%s can be \"0\"; test with defined()",
3347 ((warnop == OP_READLINE || warnop == OP_GLOB)
3348 ? " construct" : "() operator"));
3349 CopLINE_set(PL_curcop, oldline);
3356 if (type == OP_ANDASSIGN || type == OP_ORASSIGN || type == OP_DORASSIGN)
3357 other->op_private |= OPpASSIGN_BACKWARDS; /* other is an OP_SASSIGN */
3359 NewOp(1101, logop, 1, LOGOP);
3361 logop->op_type = (OPCODE)type;
3362 logop->op_ppaddr = PL_ppaddr[type];
3363 logop->op_first = first;
3364 logop->op_flags = flags | OPf_KIDS;
3365 logop->op_other = LINKLIST(other);
3366 logop->op_private = (U8)(1 | (flags >> 8));
3368 /* establish postfix order */
3369 logop->op_next = LINKLIST(first);
3370 first->op_next = (OP*)logop;
3371 first->op_sibling = other;
3373 o = newUNOP(OP_NULL, 0, (OP*)logop);
3380 Perl_newCONDOP(pTHX_ I32 flags, OP *first, OP *trueop, OP *falseop)
3387 return newLOGOP(OP_AND, 0, first, trueop);
3389 return newLOGOP(OP_OR, 0, first, falseop);
3391 scalarboolean(first);
3392 if (first->op_type == OP_CONST) {
3393 if (first->op_private & OPpCONST_BARE &&
3394 first->op_private & OPpCONST_STRICT) {
3395 no_bareword_allowed(first);
3397 if (SvTRUE(((SVOP*)first)->op_sv)) {
3408 NewOp(1101, logop, 1, LOGOP);
3409 logop->op_type = OP_COND_EXPR;
3410 logop->op_ppaddr = PL_ppaddr[OP_COND_EXPR];
3411 logop->op_first = first;
3412 logop->op_flags = flags | OPf_KIDS;
3413 logop->op_private = (U8)(1 | (flags >> 8));
3414 logop->op_other = LINKLIST(trueop);
3415 logop->op_next = LINKLIST(falseop);
3418 /* establish postfix order */
3419 start = LINKLIST(first);
3420 first->op_next = (OP*)logop;
3422 first->op_sibling = trueop;
3423 trueop->op_sibling = falseop;
3424 o = newUNOP(OP_NULL, 0, (OP*)logop);
3426 trueop->op_next = falseop->op_next = o;
3433 Perl_newRANGE(pTHX_ I32 flags, OP *left, OP *right)
3441 NewOp(1101, range, 1, LOGOP);
3443 range->op_type = OP_RANGE;
3444 range->op_ppaddr = PL_ppaddr[OP_RANGE];
3445 range->op_first = left;
3446 range->op_flags = OPf_KIDS;
3447 leftstart = LINKLIST(left);
3448 range->op_other = LINKLIST(right);
3449 range->op_private = (U8)(1 | (flags >> 8));
3451 left->op_sibling = right;
3453 range->op_next = (OP*)range;
3454 flip = newUNOP(OP_FLIP, flags, (OP*)range);
3455 flop = newUNOP(OP_FLOP, 0, flip);
3456 o = newUNOP(OP_NULL, 0, flop);
3458 range->op_next = leftstart;
3460 left->op_next = flip;
3461 right->op_next = flop;
3463 range->op_targ = pad_alloc(OP_RANGE, SVs_PADMY);
3464 sv_upgrade(PAD_SV(range->op_targ), SVt_PVNV);
3465 flip->op_targ = pad_alloc(OP_RANGE, SVs_PADMY);
3466 sv_upgrade(PAD_SV(flip->op_targ), SVt_PVNV);
3468 flip->op_private = left->op_type == OP_CONST ? OPpFLIP_LINENUM : 0;
3469 flop->op_private = right->op_type == OP_CONST ? OPpFLIP_LINENUM : 0;
3472 if (!flip->op_private || !flop->op_private)
3473 linklist(o); /* blow off optimizer unless constant */
3479 Perl_newLOOPOP(pTHX_ I32 flags, I32 debuggable, OP *expr, OP *block)
3483 int once = block && block->op_flags & OPf_SPECIAL &&
3484 (block->op_type == OP_ENTERSUB || block->op_type == OP_NULL);
3487 if (once && expr->op_type == OP_CONST && !SvTRUE(((SVOP*)expr)->op_sv))
3488 return block; /* do {} while 0 does once */
3489 if (expr->op_type == OP_READLINE || expr->op_type == OP_GLOB
3490 || (expr->op_type == OP_NULL && expr->op_targ == OP_GLOB)) {
3491 expr = newUNOP(OP_DEFINED, 0,
3492 newASSIGNOP(0, newDEFSVOP(), 0, expr) );
3493 } else if (expr->op_flags & OPf_KIDS) {
3494 OP *k1 = ((UNOP*)expr)->op_first;
3495 OP *k2 = (k1) ? k1->op_sibling : NULL;
3496 switch (expr->op_type) {
3498 if (k2 && k2->op_type == OP_READLINE
3499 && (k2->op_flags & OPf_STACKED)
3500 && ((k1->op_flags & OPf_WANT) == OPf_WANT_SCALAR))
3501 expr = newUNOP(OP_DEFINED, 0, expr);
3505 if (k1->op_type == OP_READDIR
3506 || k1->op_type == OP_GLOB
3507 || (k1->op_type == OP_NULL && k1->op_targ == OP_GLOB)
3508 || k1->op_type == OP_EACH)
3509 expr = newUNOP(OP_DEFINED, 0, expr);
3515 listop = append_elem(OP_LINESEQ, block, newOP(OP_UNSTACK, 0));
3516 o = new_logop(OP_AND, 0, &expr, &listop);
3519 ((LISTOP*)listop)->op_last->op_next = LINKLIST(o);
3521 if (once && o != listop)
3522 o->op_next = ((LOGOP*)cUNOPo->op_first)->op_other;
3525 o = newUNOP(OP_NULL, 0, o); /* or do {} while 1 loses outer block */
3527 o->op_flags |= flags;
3529 o->op_flags |= OPf_SPECIAL; /* suppress POPBLOCK curpm restoration*/
3534 Perl_newWHILEOP(pTHX_ I32 flags, I32 debuggable, LOOP *loop, I32 whileline, OP *expr, OP *block, OP *cont)
3542 if (expr && (expr->op_type == OP_READLINE || expr->op_type == OP_GLOB
3543 || (expr->op_type == OP_NULL && expr->op_targ == OP_GLOB))) {
3544 expr = newUNOP(OP_DEFINED, 0,
3545 newASSIGNOP(0, newDEFSVOP(), 0, expr) );
3546 } else if (expr && (expr->op_flags & OPf_KIDS)) {
3547 OP *k1 = ((UNOP*)expr)->op_first;
3548 OP *k2 = (k1) ? k1->op_sibling : NULL;
3549 switch (expr->op_type) {
3551 if (k2 && k2->op_type == OP_READLINE
3552 && (k2->op_flags & OPf_STACKED)
3553 && ((k1->op_flags & OPf_WANT) == OPf_WANT_SCALAR))
3554 expr = newUNOP(OP_DEFINED, 0, expr);
3558 if (k1->op_type == OP_READDIR
3559 || k1->op_type == OP_GLOB
3560 || (k1->op_type == OP_NULL && k1->op_targ == OP_GLOB)
3561 || k1->op_type == OP_EACH)
3562 expr = newUNOP(OP_DEFINED, 0, expr);
3568 block = newOP(OP_NULL, 0);
3570 block = scope(block);
3574 next = LINKLIST(cont);
3577 OP *unstack = newOP(OP_UNSTACK, 0);
3580 cont = append_elem(OP_LINESEQ, cont, unstack);
3581 if ((line_t)whileline != NOLINE) {
3582 PL_copline = (line_t)whileline;
3583 cont = append_elem(OP_LINESEQ, cont,
3584 newSTATEOP(0, Nullch, Nullop));
3588 listop = append_list(OP_LINESEQ, (LISTOP*)block, (LISTOP*)cont);
3589 redo = LINKLIST(listop);
3592 PL_copline = (line_t)whileline;
3594 o = new_logop(OP_AND, 0, &expr, &listop);
3595 if (o == expr && o->op_type == OP_CONST && !SvTRUE(cSVOPo->op_sv)) {
3596 op_free(expr); /* oops, it's a while (0) */
3598 return Nullop; /* listop already freed by new_logop */
3601 ((LISTOP*)listop)->op_last->op_next =
3602 (o == listop ? redo : LINKLIST(o));
3608 NewOp(1101,loop,1,LOOP);
3609 loop->op_type = OP_ENTERLOOP;
3610 loop->op_ppaddr = PL_ppaddr[OP_ENTERLOOP];
3611 loop->op_private = 0;
3612 loop->op_next = (OP*)loop;
3615 o = newBINOP(OP_LEAVELOOP, 0, (OP*)loop, o);
3617 loop->op_redoop = redo;
3618 loop->op_lastop = o;
3619 o->op_private |= loopflags;
3622 loop->op_nextop = next;
3624 loop->op_nextop = o;
3626 o->op_flags |= flags;
3627 o->op_private |= (flags >> 8);
3632 Perl_newFOROP(pTHX_ I32 flags,char *label,line_t forline,OP *sv,OP *expr,OP *block,OP *cont)
3636 PADOFFSET padoff = 0;
3640 if (sv->op_type == OP_RV2SV) { /* symbol table variable */
3641 sv->op_type = OP_RV2GV;
3642 sv->op_ppaddr = PL_ppaddr[OP_RV2GV];
3644 else if (sv->op_type == OP_PADSV) { /* private variable */
3645 padoff = sv->op_targ;
3650 else if (sv->op_type == OP_THREADSV) { /* per-thread variable */
3651 padoff = sv->op_targ;
3653 iterflags |= OPf_SPECIAL;
3658 Perl_croak(aTHX_ "Can't use %s for loop variable", PL_op_desc[sv->op_type]);
3661 sv = newGVOP(OP_GV, 0, PL_defgv);
3663 if (expr->op_type == OP_RV2AV || expr->op_type == OP_PADAV) {
3664 expr = mod(force_list(scalar(ref(expr, OP_ITER))), OP_GREPSTART);
3665 iterflags |= OPf_STACKED;
3667 else if (expr->op_type == OP_NULL &&
3668 (expr->op_flags & OPf_KIDS) &&
3669 ((BINOP*)expr)->op_first->op_type == OP_FLOP)
3671 /* Basically turn for($x..$y) into the same as for($x,$y), but we
3672 * set the STACKED flag to indicate that these values are to be
3673 * treated as min/max values by 'pp_iterinit'.
3675 UNOP* flip = (UNOP*)((UNOP*)((BINOP*)expr)->op_first)->op_first;
3676 LOGOP* range = (LOGOP*) flip->op_first;
3677 OP* left = range->op_first;
3678 OP* right = left->op_sibling;
3681 range->op_flags &= ~OPf_KIDS;
3682 range->op_first = Nullop;
3684 listop = (LISTOP*)newLISTOP(OP_LIST, 0, left, right);
3685 listop->op_first->op_next = range->op_next;
3686 left->op_next = range->op_other;
3687 right->op_next = (OP*)listop;
3688 listop->op_next = listop->op_first;
3691 expr = (OP*)(listop);
3693 iterflags |= OPf_STACKED;
3696 expr = mod(force_list(expr), OP_GREPSTART);
3700 loop = (LOOP*)list(convert(OP_ENTERITER, iterflags,
3701 append_elem(OP_LIST, expr, scalar(sv))));
3702 assert(!loop->op_next);
3703 #ifdef PL_OP_SLAB_ALLOC
3706 NewOp(1234,tmp,1,LOOP);
3707 Copy(loop,tmp,1,LOOP);
3712 Renew(loop, 1, LOOP);
3714 loop->op_targ = padoff;
3715 wop = newWHILEOP(flags, 1, loop, forline, newOP(OP_ITER, 0), block, cont);
3716 PL_copline = forline;
3717 return newSTATEOP(0, label, wop);
3721 Perl_newLOOPEX(pTHX_ I32 type, OP *label)
3726 if (type != OP_GOTO || label->op_type == OP_CONST) {
3727 /* "last()" means "last" */
3728 if (label->op_type == OP_STUB && (label->op_flags & OPf_PARENS))
3729 o = newOP(type, OPf_SPECIAL);
3731 o = newPVOP(type, 0, savepv(label->op_type == OP_CONST
3732 ? SvPVx(((SVOP*)label)->op_sv, n_a)
3738 if (label->op_type == OP_ENTERSUB)
3739 label = newUNOP(OP_REFGEN, 0, mod(label, OP_REFGEN));
3740 o = newUNOP(type, OPf_STACKED, label);
3742 PL_hints |= HINT_BLOCK_SCOPE;
3747 =for apidoc cv_undef
3749 Clear out all the active components of a CV. This can happen either
3750 by an explicit C<undef &foo>, or by the reference count going to zero.
3751 In the former case, we keep the CvOUTSIDE pointer, so that any anonymous
3752 children can still follow the full lexical scope chain.
3758 Perl_cv_undef(pTHX_ CV *cv)
3761 if (CvFILE(cv) && !CvXSUB(cv)) {
3762 /* for XSUBs CvFILE point directly to static memory; __FILE__ */
3763 Safefree(CvFILE(cv));
3768 if (!CvXSUB(cv) && CvROOT(cv)) {
3770 Perl_croak(aTHX_ "Can't undef active subroutine");
3773 PAD_SAVE_SETNULLPAD();
3775 op_free(CvROOT(cv));
3776 CvROOT(cv) = Nullop;
3779 SvPOK_off((SV*)cv); /* forget prototype */
3784 /* remove CvOUTSIDE unless this is an undef rather than a free */
3785 if (!SvREFCNT(cv) && CvOUTSIDE(cv)) {
3786 if (!CvWEAKOUTSIDE(cv))
3787 SvREFCNT_dec(CvOUTSIDE(cv));
3788 CvOUTSIDE(cv) = Nullcv;
3791 SvREFCNT_dec((SV*)CvXSUBANY(cv).any_ptr);
3797 /* delete all flags except WEAKOUTSIDE */
3798 CvFLAGS(cv) &= CVf_WEAKOUTSIDE;
3802 Perl_cv_ckproto(pTHX_ CV *cv, GV *gv, char *p)
3804 if (((!p != !SvPOK(cv)) || (p && strNE(p, SvPVX(cv)))) && ckWARN_d(WARN_PROTOTYPE)) {
3805 SV* msg = sv_newmortal();
3809 gv_efullname3(name = sv_newmortal(), gv, Nullch);
3810 sv_setpv(msg, "Prototype mismatch:");
3812 Perl_sv_catpvf(aTHX_ msg, " sub %"SVf, name);
3814 Perl_sv_catpvf(aTHX_ msg, " (%"SVf")", (SV *)cv);
3815 sv_catpv(msg, " vs ");
3817 Perl_sv_catpvf(aTHX_ msg, "(%s)", p);
3819 sv_catpv(msg, "none");
3820 Perl_warner(aTHX_ packWARN(WARN_PROTOTYPE), "%"SVf, msg);
3824 static void const_sv_xsub(pTHX_ CV* cv);
3828 =head1 Optree Manipulation Functions
3830 =for apidoc cv_const_sv
3832 If C<cv> is a constant sub eligible for inlining. returns the constant
3833 value returned by the sub. Otherwise, returns NULL.
3835 Constant subs can be created with C<newCONSTSUB> or as described in
3836 L<perlsub/"Constant Functions">.
3841 Perl_cv_const_sv(pTHX_ CV *cv)
3843 if (!cv || !CvCONST(cv))
3845 return (SV*)CvXSUBANY(cv).any_ptr;
3849 Perl_op_const_sv(pTHX_ OP *o, CV *cv)
3856 if (o->op_type == OP_LINESEQ && cLISTOPo->op_first)
3857 o = cLISTOPo->op_first->op_sibling;
3859 for (; o; o = o->op_next) {
3860 OPCODE type = o->op_type;
3862 if (sv && o->op_next == o)
3864 if (o->op_next != o) {
3865 if (type == OP_NEXTSTATE || type == OP_NULL || type == OP_PUSHMARK)
3867 if (type == OP_DBSTATE)
3870 if (type == OP_LEAVESUB || type == OP_RETURN)
3874 if (type == OP_CONST && cSVOPo->op_sv)
3876 else if ((type == OP_PADSV || type == OP_CONST) && cv) {
3877 sv = PAD_BASE_SV(CvPADLIST(cv), o->op_targ);
3881 /* We get here only from cv_clone2() while creating a closure.
3882 Copy the const value here instead of in cv_clone2 so that
3883 SvREADONLY_on doesn't lead to problems when leaving
3888 if (!SvREADONLY(sv) && SvREFCNT(sv) > 1)
3900 Perl_newMYSUB(pTHX_ I32 floor, OP *o, OP *proto, OP *attrs, OP *block)
3910 Perl_croak(aTHX_ "\"my sub\" not yet implemented");
3914 Perl_newSUB(pTHX_ I32 floor, OP *o, OP *proto, OP *block)
3916 return Perl_newATTRSUB(aTHX_ floor, o, proto, Nullop, block);
3920 Perl_newATTRSUB(pTHX_ I32 floor, OP *o, OP *proto, OP *attrs, OP *block)
3926 char *ps = proto ? SvPVx(((SVOP*)proto)->op_sv, n_a) : Nullch;
3930 name = o ? SvPVx(cSVOPo->op_sv, n_a) : Nullch;
3931 if (!name && PERLDB_NAMEANON && CopLINE(PL_curcop)) {
3932 SV *sv = sv_newmortal();
3933 Perl_sv_setpvf(aTHX_ sv, "%s[%s:%"IVdf"]",
3934 PL_curstash ? "__ANON__" : "__ANON__::__ANON__",
3935 CopFILE(PL_curcop), (IV)CopLINE(PL_curcop));
3940 gv = gv_fetchpv(name ? name : (aname ? aname :
3941 (PL_curstash ? "__ANON__" : "__ANON__::__ANON__")),
3942 GV_ADDMULTI | ((block || attrs) ? 0 : GV_NOINIT),
3952 if (SvTYPE(gv) != SVt_PVGV) { /* Maybe prototype now, and had at
3953 maximum a prototype before. */
3954 if (SvTYPE(gv) > SVt_NULL) {
3955 if (!SvPOK((SV*)gv) && !(SvIOK((SV*)gv) && SvIVX((SV*)gv) == -1)
3956 && ckWARN_d(WARN_PROTOTYPE))
3958 Perl_warner(aTHX_ packWARN(WARN_PROTOTYPE), "Runaway prototype");
3960 cv_ckproto((CV*)gv, NULL, ps);
3963 sv_setpv((SV*)gv, ps);
3965 sv_setiv((SV*)gv, -1);
3966 SvREFCNT_dec(PL_compcv);
3967 cv = PL_compcv = NULL;
3968 PL_sub_generation++;
3972 cv = (!name || GvCVGEN(gv)) ? Nullcv : GvCV(gv);
3974 #ifdef GV_UNIQUE_CHECK
3975 if (cv && GvUNIQUE(gv) && SvREADONLY(cv)) {
3976 Perl_croak(aTHX_ "Can't define subroutine %s (GV is unique)", name);
3980 if (!block || !ps || *ps || attrs)
3983 const_sv = op_const_sv(block, Nullcv);
3986 bool exists = CvROOT(cv) || CvXSUB(cv);
3988 #ifdef GV_UNIQUE_CHECK
3989 if (exists && GvUNIQUE(gv)) {
3990 Perl_croak(aTHX_ "Can't redefine unique subroutine %s", name);
3994 /* if the subroutine doesn't exist and wasn't pre-declared
3995 * with a prototype, assume it will be AUTOLOADed,
3996 * skipping the prototype check
3998 if (exists || SvPOK(cv))
3999 cv_ckproto(cv, gv, ps);
4000 /* already defined (or promised)? */
4001 if (exists || GvASSUMECV(gv)) {
4002 if (!block && !attrs) {
4003 if (CvFLAGS(PL_compcv)) {
4004 /* might have had built-in attrs applied */
4005 CvFLAGS(cv) |= (CvFLAGS(PL_compcv) & CVf_BUILTIN_ATTRS);
4007 /* just a "sub foo;" when &foo is already defined */
4008 SAVEFREESV(PL_compcv);
4011 /* ahem, death to those who redefine active sort subs */
4012 if (PL_curstackinfo->si_type == PERLSI_SORT && PL_sortcop == CvSTART(cv))
4013 Perl_croak(aTHX_ "Can't redefine active sort subroutine %s", name);
4015 if (ckWARN(WARN_REDEFINE)
4017 && (!const_sv || sv_cmp(cv_const_sv(cv), const_sv))))
4019 line_t oldline = CopLINE(PL_curcop);
4020 if (PL_copline != NOLINE)
4021 CopLINE_set(PL_curcop, PL_copline);
4022 Perl_warner(aTHX_ packWARN(WARN_REDEFINE),
4023 CvCONST(cv) ? "Constant subroutine %s redefined"
4024 : "Subroutine %s redefined", name);
4025 CopLINE_set(PL_curcop, oldline);
4033 SvREFCNT_inc(const_sv);
4035 assert(!CvROOT(cv) && !CvCONST(cv));
4036 sv_setpv((SV*)cv, ""); /* prototype is "" */
4037 CvXSUBANY(cv).any_ptr = const_sv;
4038 CvXSUB(cv) = const_sv_xsub;
4043 cv = newCONSTSUB(NULL, name, const_sv);
4046 SvREFCNT_dec(PL_compcv);
4048 PL_sub_generation++;
4055 /* Need to do a C<use attributes $stash_of_cv,\&cv,@attrs>
4056 * before we clobber PL_compcv.
4060 /* Might have had built-in attributes applied -- propagate them. */
4061 CvFLAGS(cv) |= (CvFLAGS(PL_compcv) & CVf_BUILTIN_ATTRS);
4062 if (CvGV(cv) && GvSTASH(CvGV(cv)))
4063 stash = GvSTASH(CvGV(cv));
4064 else if (CvSTASH(cv))
4065 stash = CvSTASH(cv);
4067 stash = PL_curstash;
4070 /* possibly about to re-define existing subr -- ignore old cv */
4071 rcv = (SV*)PL_compcv;
4072 if (name && GvSTASH(gv))
4073 stash = GvSTASH(gv);
4075 stash = PL_curstash;
4077 apply_attrs(stash, rcv, attrs, FALSE);
4079 if (cv) { /* must reuse cv if autoloaded */
4081 /* got here with just attrs -- work done, so bug out */
4082 SAVEFREESV(PL_compcv);
4085 /* transfer PL_compcv to cv */
4087 CvFLAGS(cv) = CvFLAGS(PL_compcv);
4088 CvOUTSIDE(cv) = CvOUTSIDE(PL_compcv);
4089 CvOUTSIDE_SEQ(cv) = CvOUTSIDE_SEQ(PL_compcv);
4090 CvOUTSIDE(PL_compcv) = 0;
4091 CvPADLIST(cv) = CvPADLIST(PL_compcv);
4092 CvPADLIST(PL_compcv) = 0;
4093 /* inner references to PL_compcv must be fixed up ... */
4094 pad_fixup_inner_anons(CvPADLIST(cv), PL_compcv, cv);
4095 /* ... before we throw it away */
4096 SvREFCNT_dec(PL_compcv);
4097 if (PERLDB_INTER)/* Advice debugger on the new sub. */
4098 ++PL_sub_generation;
4105 PL_sub_generation++;
4109 CvFILE_set_from_cop(cv, PL_curcop);
4110 CvSTASH(cv) = PL_curstash;
4113 sv_setpv((SV*)cv, ps);
4115 if (PL_error_count) {
4119 char *s = strrchr(name, ':');
4121 if (strEQ(s, "BEGIN")) {
4123 "BEGIN not safe after errors--compilation aborted";
4124 if (PL_in_eval & EVAL_KEEPERR)
4125 Perl_croak(aTHX_ not_safe);
4127 /* force display of errors found but not reported */
4128 sv_catpv(ERRSV, not_safe);
4129 Perl_croak(aTHX_ "%"SVf, ERRSV);
4138 CvROOT(cv) = newUNOP(OP_LEAVESUBLV, 0,
4139 mod(scalarseq(block), OP_LEAVESUBLV));
4142 CvROOT(cv) = newUNOP(OP_LEAVESUB, 0, scalarseq(block));
4144 CvROOT(cv)->op_private |= OPpREFCOUNTED;
4145 OpREFCNT_set(CvROOT(cv), 1);
4146 CvSTART(cv) = LINKLIST(CvROOT(cv));
4147 CvROOT(cv)->op_next = 0;
4148 CALL_PEEP(CvSTART(cv));
4150 /* now that optimizer has done its work, adjust pad values */
4152 pad_tidy(CvCLONE(cv) ? padtidy_SUBCLONE : padtidy_SUB);
4155 assert(!CvCONST(cv));
4156 if (ps && !*ps && op_const_sv(block, cv))
4160 if (name || aname) {
4162 char *tname = (name ? name : aname);
4164 if (PERLDB_SUBLINE && PL_curstash != PL_debstash) {
4165 SV *sv = NEWSV(0,0);
4166 SV *tmpstr = sv_newmortal();
4167 GV *db_postponed = gv_fetchpv("DB::postponed", GV_ADDMULTI, SVt_PVHV);
4171 Perl_sv_setpvf(aTHX_ sv, "%s:%ld-%ld",
4173 (long)PL_subline, (long)CopLINE(PL_curcop));
4174 gv_efullname3(tmpstr, gv, Nullch);
4175 hv_store(GvHV(PL_DBsub), SvPVX(tmpstr), SvCUR(tmpstr), sv, 0);
4176 hv = GvHVn(db_postponed);
4177 if (HvFILL(hv) > 0 && hv_exists(hv, SvPVX(tmpstr), SvCUR(tmpstr))
4178 && (pcv = GvCV(db_postponed)))
4184 call_sv((SV*)pcv, G_DISCARD);
4188 if ((s = strrchr(tname,':')))
4193 if (*s != 'B' && *s != 'E' && *s != 'C' && *s != 'I')
4196 if (strEQ(s, "BEGIN")) {
4197 I32 oldscope = PL_scopestack_ix;
4199 SAVECOPFILE(&PL_compiling);
4200 SAVECOPLINE(&PL_compiling);
4203 PL_beginav = newAV();
4204 DEBUG_x( dump_sub(gv) );
4205 av_push(PL_beginav, (SV*)cv);
4206 GvCV(gv) = 0; /* cv has been hijacked */
4207 call_list(oldscope, PL_beginav);
4209 PL_curcop = &PL_compiling;
4210 PL_compiling.op_private = (U8)(PL_hints & HINT_PRIVATE_MASK);
4213 else if (strEQ(s, "END") && !PL_error_count) {
4216 DEBUG_x( dump_sub(gv) );
4217 av_unshift(PL_endav, 1);
4218 av_store(PL_endav, 0, (SV*)cv);
4219 GvCV(gv) = 0; /* cv has been hijacked */
4221 else if (strEQ(s, "CHECK") && !PL_error_count) {
4223 PL_checkav = newAV();
4224 DEBUG_x( dump_sub(gv) );
4225 if (PL_main_start && ckWARN(WARN_VOID))
4226 Perl_warner(aTHX_ packWARN(WARN_VOID), "Too late to run CHECK block");
4227 av_unshift(PL_checkav, 1);
4228 av_store(PL_checkav, 0, (SV*)cv);
4229 GvCV(gv) = 0; /* cv has been hijacked */
4231 else if (strEQ(s, "INIT") && !PL_error_count) {
4233 PL_initav = newAV();
4234 DEBUG_x( dump_sub(gv) );
4235 if (PL_main_start && ckWARN(WARN_VOID))
4236 Perl_warner(aTHX_ packWARN(WARN_VOID), "Too late to run INIT block");
4237 av_push(PL_initav, (SV*)cv);
4238 GvCV(gv) = 0; /* cv has been hijacked */
4243 PL_copline = NOLINE;
4248 /* XXX unsafe for threads if eval_owner isn't held */
4250 =for apidoc newCONSTSUB
4252 Creates a constant sub equivalent to Perl C<sub FOO () { 123 }> which is
4253 eligible for inlining at compile-time.
4259 Perl_newCONSTSUB(pTHX_ HV *stash, char *name, SV *sv)
4265 SAVECOPLINE(PL_curcop);
4266 CopLINE_set(PL_curcop, PL_copline);
4269 PL_hints &= ~HINT_BLOCK_SCOPE;
4272 SAVESPTR(PL_curstash);
4273 SAVECOPSTASH(PL_curcop);
4274 PL_curstash = stash;
4275 CopSTASH_set(PL_curcop,stash);
4278 cv = newXS(name, const_sv_xsub, __FILE__);
4279 CvXSUBANY(cv).any_ptr = sv;
4281 sv_setpv((SV*)cv, ""); /* prototype is "" */
4289 =for apidoc U||newXS
4291 Used by C<xsubpp> to hook up XSUBs as Perl subs.
4297 Perl_newXS(pTHX_ char *name, XSUBADDR_t subaddr, char *filename)
4299 GV *gv = gv_fetchpv(name ? name :
4300 (PL_curstash ? "__ANON__" : "__ANON__::__ANON__"),
4301 GV_ADDMULTI, SVt_PVCV);
4305 Perl_croak(aTHX_ "panic: no address for '%s' in '%s'", name, filename);
4307 if ((cv = (name ? GvCV(gv) : Nullcv))) {
4309 /* just a cached method */
4313 else if (CvROOT(cv) || CvXSUB(cv) || GvASSUMECV(gv)) {
4314 /* already defined (or promised) */
4315 if (ckWARN(WARN_REDEFINE) && !(CvGV(cv) && GvSTASH(CvGV(cv))
4316 && strEQ(HvNAME(GvSTASH(CvGV(cv))), "autouse"))) {
4317 line_t oldline = CopLINE(PL_curcop);
4318 if (PL_copline != NOLINE)
4319 CopLINE_set(PL_curcop, PL_copline);
4320 Perl_warner(aTHX_ packWARN(WARN_REDEFINE),
4321 CvCONST(cv) ? "Constant subroutine %s redefined"
4322 : "Subroutine %s redefined"
4324 CopLINE_set(PL_curcop, oldline);
4331 if (cv) /* must reuse cv if autoloaded */
4334 cv = (CV*)NEWSV(1105,0);
4335 sv_upgrade((SV *)cv, SVt_PVCV);
4339 PL_sub_generation++;
4343 (void)gv_fetchfile(filename);
4344 CvFILE(cv) = filename; /* NOTE: not copied, as it is expected to be
4345 an external constant string */
4346 CvXSUB(cv) = subaddr;
4349 char *s = strrchr(name,':');
4355 if (*s != 'B' && *s != 'E' && *s != 'C' && *s != 'I')
4358 if (strEQ(s, "BEGIN")) {
4360 PL_beginav = newAV();
4361 av_push(PL_beginav, (SV*)cv);
4362 GvCV(gv) = 0; /* cv has been hijacked */
4364 else if (strEQ(s, "END")) {
4367 av_unshift(PL_endav, 1);
4368 av_store(PL_endav, 0, (SV*)cv);
4369 GvCV(gv) = 0; /* cv has been hijacked */
4371 else if (strEQ(s, "CHECK")) {
4373 PL_checkav = newAV();
4374 if (PL_main_start && ckWARN(WARN_VOID))
4375 Perl_warner(aTHX_ packWARN(WARN_VOID), "Too late to run CHECK block");
4376 av_unshift(PL_checkav, 1);
4377 av_store(PL_checkav, 0, (SV*)cv);
4378 GvCV(gv) = 0; /* cv has been hijacked */
4380 else if (strEQ(s, "INIT")) {
4382 PL_initav = newAV();
4383 if (PL_main_start && ckWARN(WARN_VOID))
4384 Perl_warner(aTHX_ packWARN(WARN_VOID), "Too late to run INIT block");
4385 av_push(PL_initav, (SV*)cv);
4386 GvCV(gv) = 0; /* cv has been hijacked */
4397 Perl_newFORM(pTHX_ I32 floor, OP *o, OP *block)
4405 name = SvPVx(cSVOPo->op_sv, n_a);
4408 gv = gv_fetchpv(name,TRUE, SVt_PVFM);
4409 #ifdef GV_UNIQUE_CHECK
4411 Perl_croak(aTHX_ "Bad symbol for form (GV is unique)");
4415 if ((cv = GvFORM(gv))) {
4416 if (ckWARN(WARN_REDEFINE)) {
4417 line_t oldline = CopLINE(PL_curcop);
4418 if (PL_copline != NOLINE)
4419 CopLINE_set(PL_curcop, PL_copline);
4420 Perl_warner(aTHX_ packWARN(WARN_REDEFINE), "Format %s redefined",name);
4421 CopLINE_set(PL_curcop, oldline);
4428 CvFILE_set_from_cop(cv, PL_curcop);
4431 pad_tidy(padtidy_FORMAT);
4432 CvROOT(cv) = newUNOP(OP_LEAVEWRITE, 0, scalarseq(block));
4433 CvROOT(cv)->op_private |= OPpREFCOUNTED;
4434 OpREFCNT_set(CvROOT(cv), 1);
4435 CvSTART(cv) = LINKLIST(CvROOT(cv));
4436 CvROOT(cv)->op_next = 0;
4437 CALL_PEEP(CvSTART(cv));
4439 PL_copline = NOLINE;
4444 Perl_newANONLIST(pTHX_ OP *o)
4446 return newUNOP(OP_REFGEN, 0,
4447 mod(list(convert(OP_ANONLIST, 0, o)), OP_REFGEN));
4451 Perl_newANONHASH(pTHX_ OP *o)
4453 return newUNOP(OP_REFGEN, 0,
4454 mod(list(convert(OP_ANONHASH, 0, o)), OP_REFGEN));
4458 Perl_newANONSUB(pTHX_ I32 floor, OP *proto, OP *block)
4460 return newANONATTRSUB(floor, proto, Nullop, block);
4464 Perl_newANONATTRSUB(pTHX_ I32 floor, OP *proto, OP *attrs, OP *block)
4466 return newUNOP(OP_REFGEN, 0,
4467 newSVOP(OP_ANONCODE, 0,
4468 (SV*)newATTRSUB(floor, 0, proto, attrs, block)));
4472 Perl_oopsAV(pTHX_ OP *o)
4474 switch (o->op_type) {
4476 o->op_type = OP_PADAV;
4477 o->op_ppaddr = PL_ppaddr[OP_PADAV];
4478 return ref(o, OP_RV2AV);
4481 o->op_type = OP_RV2AV;
4482 o->op_ppaddr = PL_ppaddr[OP_RV2AV];
4487 if (ckWARN_d(WARN_INTERNAL))
4488 Perl_warner(aTHX_ packWARN(WARN_INTERNAL), "oops: oopsAV");
4495 Perl_oopsHV(pTHX_ OP *o)
4497 switch (o->op_type) {
4500 o->op_type = OP_PADHV;
4501 o->op_ppaddr = PL_ppaddr[OP_PADHV];
4502 return ref(o, OP_RV2HV);
4506 o->op_type = OP_RV2HV;
4507 o->op_ppaddr = PL_ppaddr[OP_RV2HV];
4512 if (ckWARN_d(WARN_INTERNAL))
4513 Perl_warner(aTHX_ packWARN(WARN_INTERNAL), "oops: oopsHV");
4520 Perl_newAVREF(pTHX_ OP *o)
4522 if (o->op_type == OP_PADANY) {
4523 o->op_type = OP_PADAV;
4524 o->op_ppaddr = PL_ppaddr[OP_PADAV];
4527 else if ((o->op_type == OP_RV2AV || o->op_type == OP_PADAV)
4528 && ckWARN(WARN_DEPRECATED)) {
4529 Perl_warner(aTHX_ packWARN(WARN_DEPRECATED),
4530 "Using an array as a reference is deprecated");
4532 return newUNOP(OP_RV2AV, 0, scalar(o));
4536 Perl_newGVREF(pTHX_ I32 type, OP *o)
4538 if (type == OP_MAPSTART || type == OP_GREPSTART || type == OP_SORT)
4539 return newUNOP(OP_NULL, 0, o);
4540 return ref(newUNOP(OP_RV2GV, OPf_REF, o), type);
4544 Perl_newHVREF(pTHX_ OP *o)
4546 if (o->op_type == OP_PADANY) {
4547 o->op_type = OP_PADHV;
4548 o->op_ppaddr = PL_ppaddr[OP_PADHV];
4551 else if ((o->op_type == OP_RV2HV || o->op_type == OP_PADHV)
4552 && ckWARN(WARN_DEPRECATED)) {
4553 Perl_warner(aTHX_ packWARN(WARN_DEPRECATED),
4554 "Using a hash as a reference is deprecated");
4556 return newUNOP(OP_RV2HV, 0, scalar(o));
4560 Perl_oopsCV(pTHX_ OP *o)
4562 Perl_croak(aTHX_ "NOT IMPL LINE %d",__LINE__);
4568 Perl_newCVREF(pTHX_ I32 flags, OP *o)
4570 return newUNOP(OP_RV2CV, flags, scalar(o));
4574 Perl_newSVREF(pTHX_ OP *o)
4576 if (o->op_type == OP_PADANY) {
4577 o->op_type = OP_PADSV;
4578 o->op_ppaddr = PL_ppaddr[OP_PADSV];
4581 else if (o->op_type == OP_THREADSV && !(o->op_flags & OPpDONE_SVREF)) {
4582 o->op_flags |= OPpDONE_SVREF;
4585 return newUNOP(OP_RV2SV, 0, scalar(o));
4588 /* Check routines. */
4591 Perl_ck_anoncode(pTHX_ OP *o)
4593 cSVOPo->op_targ = pad_add_anon(cSVOPo->op_sv, o->op_type);
4594 cSVOPo->op_sv = Nullsv;
4599 Perl_ck_bitop(pTHX_ OP *o)
4601 #define OP_IS_NUMCOMPARE(op) \
4602 ((op) == OP_LT || (op) == OP_I_LT || \
4603 (op) == OP_GT || (op) == OP_I_GT || \
4604 (op) == OP_LE || (op) == OP_I_LE || \
4605 (op) == OP_GE || (op) == OP_I_GE || \
4606 (op) == OP_EQ || (op) == OP_I_EQ || \
4607 (op) == OP_NE || (op) == OP_I_NE || \
4608 (op) == OP_NCMP || (op) == OP_I_NCMP)
4609 o->op_private = (U8)(PL_hints & HINT_PRIVATE_MASK);
4610 if (o->op_type == OP_BIT_OR
4611 || o->op_type == OP_BIT_AND
4612 || o->op_type == OP_BIT_XOR)
4614 OPCODE typfirst = cBINOPo->op_first->op_type;
4615 OPCODE typlast = cBINOPo->op_first->op_sibling->op_type;
4616 if (OP_IS_NUMCOMPARE(typfirst) || OP_IS_NUMCOMPARE(typlast))
4617 if (ckWARN(WARN_PRECEDENCE))
4618 Perl_warner(aTHX_ packWARN(WARN_PRECEDENCE),
4619 "Possible precedence problem on bitwise %c operator",
4620 o->op_type == OP_BIT_OR ? '|'
4621 : o->op_type == OP_BIT_AND ? '&' : '^'
4628 Perl_ck_concat(pTHX_ OP *o)
4630 if (cUNOPo->op_first->op_type == OP_CONCAT)
4631 o->op_flags |= OPf_STACKED;
4636 Perl_ck_spair(pTHX_ OP *o)
4638 if (o->op_flags & OPf_KIDS) {
4641 OPCODE type = o->op_type;
4642 o = modkids(ck_fun(o), type);
4643 kid = cUNOPo->op_first;
4644 newop = kUNOP->op_first->op_sibling;
4646 (newop->op_sibling ||
4647 !(PL_opargs[newop->op_type] & OA_RETSCALAR) ||
4648 newop->op_type == OP_PADAV || newop->op_type == OP_PADHV ||
4649 newop->op_type == OP_RV2AV || newop->op_type == OP_RV2HV)) {
4653 op_free(kUNOP->op_first);
4654 kUNOP->op_first = newop;
4656 o->op_ppaddr = PL_ppaddr[++o->op_type];
4661 Perl_ck_delete(pTHX_ OP *o)
4665 if (o->op_flags & OPf_KIDS) {
4666 OP *kid = cUNOPo->op_first;
4667 switch (kid->op_type) {
4669 o->op_flags |= OPf_SPECIAL;
4672 o->op_private |= OPpSLICE;
4675 o->op_flags |= OPf_SPECIAL;
4680 Perl_croak(aTHX_ "%s argument is not a HASH or ARRAY element or slice",
4689 Perl_ck_die(pTHX_ OP *o)
4692 if (VMSISH_HUSHED) o->op_private |= OPpHUSH_VMSISH;
4698 Perl_ck_eof(pTHX_ OP *o)
4700 I32 type = o->op_type;
4702 if (o->op_flags & OPf_KIDS) {
4703 if (cLISTOPo->op_first->op_type == OP_STUB) {
4705 o = newUNOP(type, OPf_SPECIAL,
4706 newGVOP(OP_GV, 0, gv_fetchpv("main::ARGV", TRUE, SVt_PVAV)));
4714 Perl_ck_eval(pTHX_ OP *o)
4716 PL_hints |= HINT_BLOCK_SCOPE;
4717 if (o->op_flags & OPf_KIDS) {
4718 SVOP *kid = (SVOP*)cUNOPo->op_first;
4721 o->op_flags &= ~OPf_KIDS;
4724 else if (kid->op_type == OP_LINESEQ) {
4727 kid->op_next = o->op_next;
4728 cUNOPo->op_first = 0;
4731 NewOp(1101, enter, 1, LOGOP);
4732 enter->op_type = OP_ENTERTRY;
4733 enter->op_ppaddr = PL_ppaddr[OP_ENTERTRY];
4734 enter->op_private = 0;
4736 /* establish postfix order */
4737 enter->op_next = (OP*)enter;
4739 o = prepend_elem(OP_LINESEQ, (OP*)enter, (OP*)kid);
4740 o->op_type = OP_LEAVETRY;
4741 o->op_ppaddr = PL_ppaddr[OP_LEAVETRY];
4742 enter->op_other = o;
4750 o = newUNOP(OP_ENTEREVAL, 0, newDEFSVOP());
4752 o->op_targ = (PADOFFSET)PL_hints;
4757 Perl_ck_exit(pTHX_ OP *o)
4760 HV *table = GvHV(PL_hintgv);
4762 SV **svp = hv_fetch(table, "vmsish_exit", 11, FALSE);
4763 if (svp && *svp && SvTRUE(*svp))
4764 o->op_private |= OPpEXIT_VMSISH;
4766 if (VMSISH_HUSHED) o->op_private |= OPpHUSH_VMSISH;
4772 Perl_ck_exec(pTHX_ OP *o)
4775 if (o->op_flags & OPf_STACKED) {
4777 kid = cUNOPo->op_first->op_sibling;
4778 if (kid->op_type == OP_RV2GV)
4787 Perl_ck_exists(pTHX_ OP *o)
4790 if (o->op_flags & OPf_KIDS) {
4791 OP *kid = cUNOPo->op_first;
4792 if (kid->op_type == OP_ENTERSUB) {
4793 (void) ref(kid, o->op_type);
4794 if (kid->op_type != OP_RV2CV && !PL_error_count)
4795 Perl_croak(aTHX_ "%s argument is not a subroutine name",
4797 o->op_private |= OPpEXISTS_SUB;
4799 else if (kid->op_type == OP_AELEM)
4800 o->op_flags |= OPf_SPECIAL;
4801 else if (kid->op_type != OP_HELEM)
4802 Perl_croak(aTHX_ "%s argument is not a HASH or ARRAY element",
4811 Perl_ck_gvconst(pTHX_ register OP *o)
4813 o = fold_constants(o);
4814 if (o->op_type == OP_CONST)
4821 Perl_ck_rvconst(pTHX_ register OP *o)
4823 SVOP *kid = (SVOP*)cUNOPo->op_first;
4825 o->op_private |= (PL_hints & HINT_STRICT_REFS);
4826 if (kid->op_type == OP_CONST) {
4830 SV *kidsv = kid->op_sv;
4833 /* Is it a constant from cv_const_sv()? */
4834 if (SvROK(kidsv) && SvREADONLY(kidsv)) {
4835 SV *rsv = SvRV(kidsv);
4836 int svtype = SvTYPE(rsv);
4837 char *badtype = Nullch;
4839 switch (o->op_type) {
4841 if (svtype > SVt_PVMG)
4842 badtype = "a SCALAR";
4845 if (svtype != SVt_PVAV)
4846 badtype = "an ARRAY";
4849 if (svtype != SVt_PVHV)
4853 if (svtype != SVt_PVCV)
4858 Perl_croak(aTHX_ "Constant is not %s reference", badtype);
4861 name = SvPV(kidsv, n_a);
4862 if ((PL_hints & HINT_STRICT_REFS) && (kid->op_private & OPpCONST_BARE)) {
4863 char *badthing = Nullch;
4864 switch (o->op_type) {
4866 badthing = "a SCALAR";
4869 badthing = "an ARRAY";
4872 badthing = "a HASH";
4877 "Can't use bareword (\"%s\") as %s ref while \"strict refs\" in use",
4881 * This is a little tricky. We only want to add the symbol if we
4882 * didn't add it in the lexer. Otherwise we get duplicate strict
4883 * warnings. But if we didn't add it in the lexer, we must at
4884 * least pretend like we wanted to add it even if it existed before,
4885 * or we get possible typo warnings. OPpCONST_ENTERED says
4886 * whether the lexer already added THIS instance of this symbol.
4888 iscv = (o->op_type == OP_RV2CV) * 2;
4890 gv = gv_fetchpv(name,
4891 iscv | !(kid->op_private & OPpCONST_ENTERED),
4894 : o->op_type == OP_RV2SV
4896 : o->op_type == OP_RV2AV
4898 : o->op_type == OP_RV2HV
4901 } while (!gv && !(kid->op_private & OPpCONST_ENTERED) && !iscv++);
4903 kid->op_type = OP_GV;
4904 SvREFCNT_dec(kid->op_sv);
4906 /* XXX hack: dependence on sizeof(PADOP) <= sizeof(SVOP) */
4907 kPADOP->op_padix = pad_alloc(OP_GV, SVs_PADTMP);
4908 SvREFCNT_dec(PAD_SVl(kPADOP->op_padix));
4910 PAD_SETSV(kPADOP->op_padix, (SV*) SvREFCNT_inc(gv));
4912 kid->op_sv = SvREFCNT_inc(gv);
4914 kid->op_private = 0;
4915 kid->op_ppaddr = PL_ppaddr[OP_GV];
4922 Perl_ck_ftst(pTHX_ OP *o)
4924 I32 type = o->op_type;
4926 if (o->op_flags & OPf_REF) {
4929 else if (o->op_flags & OPf_KIDS && cUNOPo->op_first->op_type != OP_STUB) {
4930 SVOP *kid = (SVOP*)cUNOPo->op_first;
4932 if (kid->op_type == OP_CONST && (kid->op_private & OPpCONST_BARE)) {
4934 OP *newop = newGVOP(type, OPf_REF,
4935 gv_fetchpv(SvPVx(kid->op_sv, n_a), TRUE, SVt_PVIO));
4942 if (type == OP_FTTTY)
4943 o = newGVOP(type, OPf_REF, gv_fetchpv("main::STDIN", TRUE,
4946 o = newUNOP(type, 0, newDEFSVOP());
4952 Perl_ck_fun(pTHX_ OP *o)
4958 int type = o->op_type;
4959 register I32 oa = PL_opargs[type] >> OASHIFT;
4961 if (o->op_flags & OPf_STACKED) {
4962 if ((oa & OA_OPTIONAL) && (oa >> 4) && !((oa >> 4) & OA_OPTIONAL))
4965 return no_fh_allowed(o);
4968 if (o->op_flags & OPf_KIDS) {
4970 tokid = &cLISTOPo->op_first;
4971 kid = cLISTOPo->op_first;
4972 if (kid->op_type == OP_PUSHMARK ||
4973 (kid->op_type == OP_NULL && kid->op_targ == OP_PUSHMARK))
4975 tokid = &kid->op_sibling;
4976 kid = kid->op_sibling;
4978 if (!kid && PL_opargs[type] & OA_DEFGV)
4979 *tokid = kid = newDEFSVOP();
4983 sibl = kid->op_sibling;
4986 /* list seen where single (scalar) arg expected? */
4987 if (numargs == 1 && !(oa >> 4)
4988 && kid->op_type == OP_LIST && type != OP_SCALAR)
4990 return too_many_arguments(o,PL_op_desc[type]);
5003 if ((type == OP_PUSH || type == OP_UNSHIFT)
5004 && !kid->op_sibling && ckWARN(WARN_SYNTAX))
5005 Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
5006 "Useless use of %s with no values",
5009 if (kid->op_type == OP_CONST &&
5010 (kid->op_private & OPpCONST_BARE))
5012 char *name = SvPVx(((SVOP*)kid)->op_sv, n_a);
5013 OP *newop = newAVREF(newGVOP(OP_GV, 0,
5014 gv_fetchpv(name, TRUE, SVt_PVAV) ));
5015 if (ckWARN2(WARN_DEPRECATED, WARN_SYNTAX))
5016 Perl_warner(aTHX_ packWARN2(WARN_DEPRECATED, WARN_SYNTAX),
5017 "Array @%s missing the @ in argument %"IVdf" of %s()",
5018 name, (IV)numargs, PL_op_desc[type]);
5021 kid->op_sibling = sibl;
5024 else if (kid->op_type != OP_RV2AV && kid->op_type != OP_PADAV)
5025 bad_type(numargs, "array", PL_op_desc[type], kid);
5029 if (kid->op_type == OP_CONST &&
5030 (kid->op_private & OPpCONST_BARE))
5032 char *name = SvPVx(((SVOP*)kid)->op_sv, n_a);
5033 OP *newop = newHVREF(newGVOP(OP_GV, 0,
5034 gv_fetchpv(name, TRUE, SVt_PVHV) ));
5035 if (ckWARN2(WARN_DEPRECATED, WARN_SYNTAX))
5036 Perl_warner(aTHX_ packWARN2(WARN_DEPRECATED, WARN_SYNTAX),
5037 "Hash %%%s missing the %% in argument %"IVdf" of %s()",
5038 name, (IV)numargs, PL_op_desc[type]);
5041 kid->op_sibling = sibl;
5044 else if (kid->op_type != OP_RV2HV && kid->op_type != OP_PADHV)
5045 bad_type(numargs, "hash", PL_op_desc[type], kid);
5050 OP *newop = newUNOP(OP_NULL, 0, kid);
5051 kid->op_sibling = 0;
5053 newop->op_next = newop;
5055 kid->op_sibling = sibl;
5060 if (kid->op_type != OP_GV && kid->op_type != OP_RV2GV) {
5061 if (kid->op_type == OP_CONST &&
5062 (kid->op_private & OPpCONST_BARE))
5064 OP *newop = newGVOP(OP_GV, 0,
5065 gv_fetchpv(SvPVx(((SVOP*)kid)->op_sv, n_a), TRUE,
5067 if (!(o->op_private & 1) && /* if not unop */
5068 kid == cLISTOPo->op_last)
5069 cLISTOPo->op_last = newop;
5073 else if (kid->op_type == OP_READLINE) {
5074 /* neophyte patrol: open(<FH>), close(<FH>) etc. */
5075 bad_type(numargs, "HANDLE", OP_DESC(o), kid);
5078 I32 flags = OPf_SPECIAL;
5082 /* is this op a FH constructor? */
5083 if (is_handle_constructor(o,numargs)) {
5084 char *name = Nullch;
5088 /* Set a flag to tell rv2gv to vivify
5089 * need to "prove" flag does not mean something
5090 * else already - NI-S 1999/05/07
5093 if (kid->op_type == OP_PADSV) {
5094 /*XXX DAPM 2002.08.25 tmp assert test */
5095 /*XXX*/ assert(av_fetch(PL_comppad_name, (kid->op_targ), FALSE));
5096 /*XXX*/ assert(*av_fetch(PL_comppad_name, (kid->op_targ), FALSE));
5098 name = PAD_COMPNAME_PV(kid->op_targ);
5099 /* SvCUR of a pad namesv can't be trusted
5100 * (see PL_generation), so calc its length
5106 else if (kid->op_type == OP_RV2SV
5107 && kUNOP->op_first->op_type == OP_GV)
5109 GV *gv = cGVOPx_gv(kUNOP->op_first);
5111 len = GvNAMELEN(gv);
5113 else if (kid->op_type == OP_AELEM
5114 || kid->op_type == OP_HELEM)
5116 name = "__ANONIO__";
5122 targ = pad_alloc(OP_RV2GV, SVs_PADTMP);
5123 namesv = PAD_SVl(targ);
5124 (void)SvUPGRADE(namesv, SVt_PV);
5126 sv_setpvn(namesv, "$", 1);
5127 sv_catpvn(namesv, name, len);
5130 kid->op_sibling = 0;
5131 kid = newUNOP(OP_RV2GV, flags, scalar(kid));
5132 kid->op_targ = targ;
5133 kid->op_private |= priv;
5135 kid->op_sibling = sibl;
5141 mod(scalar(kid), type);
5145 tokid = &kid->op_sibling;
5146 kid = kid->op_sibling;
5148 o->op_private |= numargs;
5150 return too_many_arguments(o,OP_DESC(o));
5153 else if (PL_opargs[type] & OA_DEFGV) {
5155 return newUNOP(type, 0, newDEFSVOP());
5159 while (oa & OA_OPTIONAL)
5161 if (oa && oa != OA_LIST)
5162 return too_few_arguments(o,OP_DESC(o));
5168 Perl_ck_glob(pTHX_ OP *o)
5173 if ((o->op_flags & OPf_KIDS) && !cLISTOPo->op_first->op_sibling)
5174 append_elem(OP_GLOB, o, newDEFSVOP());
5176 if (!((gv = gv_fetchpv("glob", FALSE, SVt_PVCV))
5177 && GvCVu(gv) && GvIMPORTED_CV(gv)))
5179 gv = gv_fetchpv("CORE::GLOBAL::glob", FALSE, SVt_PVCV);
5182 #if !defined(PERL_EXTERNAL_GLOB)
5183 /* XXX this can be tightened up and made more failsafe. */
5187 Perl_load_module(aTHX_ PERL_LOADMOD_NOIMPORT,
5188 newSVpvn("File::Glob", 10), Nullsv, Nullsv, Nullsv);
5189 gv = gv_fetchpv("CORE::GLOBAL::glob", FALSE, SVt_PVCV);
5190 glob_gv = gv_fetchpv("File::Glob::csh_glob", FALSE, SVt_PVCV);
5191 GvCV(gv) = GvCV(glob_gv);
5192 SvREFCNT_inc((SV*)GvCV(gv));
5193 GvIMPORTED_CV_on(gv);
5196 #endif /* PERL_EXTERNAL_GLOB */
5198 if (gv && GvCVu(gv) && GvIMPORTED_CV(gv)) {
5199 append_elem(OP_GLOB, o,
5200 newSVOP(OP_CONST, 0, newSViv(PL_glob_index++)));
5201 o->op_type = OP_LIST;
5202 o->op_ppaddr = PL_ppaddr[OP_LIST];
5203 cLISTOPo->op_first->op_type = OP_PUSHMARK;
5204 cLISTOPo->op_first->op_ppaddr = PL_ppaddr[OP_PUSHMARK];
5205 o = newUNOP(OP_ENTERSUB, OPf_STACKED,
5206 append_elem(OP_LIST, o,
5207 scalar(newUNOP(OP_RV2CV, 0,
5208 newGVOP(OP_GV, 0, gv)))));
5209 o = newUNOP(OP_NULL, 0, ck_subr(o));
5210 o->op_targ = OP_GLOB; /* hint at what it used to be */
5213 gv = newGVgen("main");
5215 append_elem(OP_GLOB, o, newGVOP(OP_GV, 0, gv));
5221 Perl_ck_grep(pTHX_ OP *o)
5225 OPCODE type = o->op_type == OP_GREPSTART ? OP_GREPWHILE : OP_MAPWHILE;
5227 o->op_ppaddr = PL_ppaddr[OP_GREPSTART];
5228 NewOp(1101, gwop, 1, LOGOP);
5230 if (o->op_flags & OPf_STACKED) {
5233 kid = cLISTOPo->op_first->op_sibling;
5234 for (k = cLISTOPo->op_first->op_sibling->op_next; k; k = k->op_next) {
5237 kid->op_next = (OP*)gwop;
5238 o->op_flags &= ~OPf_STACKED;
5240 kid = cLISTOPo->op_first->op_sibling;
5241 if (type == OP_MAPWHILE)
5248 kid = cLISTOPo->op_first->op_sibling;
5249 if (kid->op_type != OP_NULL)
5250 Perl_croak(aTHX_ "panic: ck_grep");
5251 kid = kUNOP->op_first;
5253 gwop->op_type = type;
5254 gwop->op_ppaddr = PL_ppaddr[type];
5255 gwop->op_first = listkids(o);
5256 gwop->op_flags |= OPf_KIDS;
5257 gwop->op_private = 1;
5258 gwop->op_other = LINKLIST(kid);
5259 gwop->op_targ = pad_alloc(type, SVs_PADTMP);
5260 kid->op_next = (OP*)gwop;
5262 kid = cLISTOPo->op_first->op_sibling;
5263 if (!kid || !kid->op_sibling)
5264 return too_few_arguments(o,OP_DESC(o));
5265 for (kid = kid->op_sibling; kid; kid = kid->op_sibling)
5266 mod(kid, OP_GREPSTART);
5272 Perl_ck_index(pTHX_ OP *o)
5274 if (o->op_flags & OPf_KIDS) {
5275 OP *kid = cLISTOPo->op_first->op_sibling; /* get past pushmark */
5277 kid = kid->op_sibling; /* get past "big" */
5278 if (kid && kid->op_type == OP_CONST)
5279 fbm_compile(((SVOP*)kid)->op_sv, 0);
5285 Perl_ck_lengthconst(pTHX_ OP *o)
5287 /* XXX length optimization goes here */
5292 Perl_ck_lfun(pTHX_ OP *o)
5294 OPCODE type = o->op_type;
5295 return modkids(ck_fun(o), type);
5299 Perl_ck_defined(pTHX_ OP *o) /* 19990527 MJD */
5301 if ((o->op_flags & OPf_KIDS) && ckWARN2(WARN_DEPRECATED, WARN_SYNTAX)) {
5302 switch (cUNOPo->op_first->op_type) {
5304 /* This is needed for
5305 if (defined %stash::)
5306 to work. Do not break Tk.
5308 break; /* Globals via GV can be undef */
5310 case OP_AASSIGN: /* Is this a good idea? */
5311 Perl_warner(aTHX_ packWARN2(WARN_DEPRECATED, WARN_SYNTAX),
5312 "defined(@array) is deprecated");
5313 Perl_warner(aTHX_ packWARN2(WARN_DEPRECATED, WARN_SYNTAX),
5314 "\t(Maybe you should just omit the defined()?)\n");
5317 /* This is needed for
5318 if (defined %stash::)
5319 to work. Do not break Tk.
5321 break; /* Globals via GV can be undef */
5323 Perl_warner(aTHX_ packWARN2(WARN_DEPRECATED, WARN_SYNTAX),
5324 "defined(%%hash) is deprecated");
5325 Perl_warner(aTHX_ packWARN2(WARN_DEPRECATED, WARN_SYNTAX),
5326 "\t(Maybe you should just omit the defined()?)\n");
5337 Perl_ck_rfun(pTHX_ OP *o)
5339 OPCODE type = o->op_type;
5340 return refkids(ck_fun(o), type);
5344 Perl_ck_listiob(pTHX_ OP *o)
5348 kid = cLISTOPo->op_first;
5351 kid = cLISTOPo->op_first;
5353 if (kid->op_type == OP_PUSHMARK)
5354 kid = kid->op_sibling;
5355 if (kid && o->op_flags & OPf_STACKED)
5356 kid = kid->op_sibling;
5357 else if (kid && !kid->op_sibling) { /* print HANDLE; */
5358 if (kid->op_type == OP_CONST && kid->op_private & OPpCONST_BARE) {
5359 o->op_flags |= OPf_STACKED; /* make it a filehandle */
5360 kid = newUNOP(OP_RV2GV, OPf_REF, scalar(kid));
5361 cLISTOPo->op_first->op_sibling = kid;
5362 cLISTOPo->op_last = kid;
5363 kid = kid->op_sibling;
5368 append_elem(o->op_type, o, newDEFSVOP());
5374 Perl_ck_sassign(pTHX_ OP *o)
5376 OP *kid = cLISTOPo->op_first;
5377 /* has a disposable target? */
5378 if ((PL_opargs[kid->op_type] & OA_TARGLEX)
5379 && !(kid->op_flags & OPf_STACKED)
5380 /* Cannot steal the second time! */
5381 && !(kid->op_private & OPpTARGET_MY))
5383 OP *kkid = kid->op_sibling;
5385 /* Can just relocate the target. */
5386 if (kkid && kkid->op_type == OP_PADSV
5387 && !(kkid->op_private & OPpLVAL_INTRO))
5389 kid->op_targ = kkid->op_targ;
5391 /* Now we do not need PADSV and SASSIGN. */
5392 kid->op_sibling = o->op_sibling; /* NULL */
5393 cLISTOPo->op_first = NULL;
5396 kid->op_private |= OPpTARGET_MY; /* Used for context settings */
5404 Perl_ck_match(pTHX_ OP *o)
5406 o->op_private |= OPpRUNTIME;
5411 Perl_ck_method(pTHX_ OP *o)
5413 OP *kid = cUNOPo->op_first;
5414 if (kid->op_type == OP_CONST) {
5415 SV* sv = kSVOP->op_sv;
5416 if (!(strchr(SvPVX(sv), ':') || strchr(SvPVX(sv), '\''))) {
5418 if (!SvREADONLY(sv) || !SvFAKE(sv)) {
5419 sv = newSVpvn_share(SvPVX(sv), SvCUR(sv), 0);
5422 kSVOP->op_sv = Nullsv;
5424 cmop = newSVOP(OP_METHOD_NAMED, 0, sv);
5433 Perl_ck_null(pTHX_ OP *o)
5439 Perl_ck_open(pTHX_ OP *o)
5441 HV *table = GvHV(PL_hintgv);
5445 svp = hv_fetch(table, "open_IN", 7, FALSE);
5447 mode = mode_from_discipline(*svp);
5448 if (mode & O_BINARY)
5449 o->op_private |= OPpOPEN_IN_RAW;
5450 else if (mode & O_TEXT)
5451 o->op_private |= OPpOPEN_IN_CRLF;
5454 svp = hv_fetch(table, "open_OUT", 8, FALSE);
5456 mode = mode_from_discipline(*svp);
5457 if (mode & O_BINARY)
5458 o->op_private |= OPpOPEN_OUT_RAW;
5459 else if (mode & O_TEXT)
5460 o->op_private |= OPpOPEN_OUT_CRLF;
5463 if (o->op_type == OP_BACKTICK)
5469 Perl_ck_repeat(pTHX_ OP *o)
5471 if (cBINOPo->op_first->op_flags & OPf_PARENS) {
5472 o->op_private |= OPpREPEAT_DOLIST;
5473 cBINOPo->op_first = force_list(cBINOPo->op_first);
5481 Perl_ck_require(pTHX_ OP *o)
5485 if (o->op_flags & OPf_KIDS) { /* Shall we supply missing .pm? */
5486 SVOP *kid = (SVOP*)cUNOPo->op_first;
5488 if (kid->op_type == OP_CONST && (kid->op_private & OPpCONST_BARE)) {
5490 for (s = SvPVX(kid->op_sv); *s; s++) {
5491 if (*s == ':' && s[1] == ':') {
5493 Move(s+2, s+1, strlen(s+2)+1, char);
5494 --SvCUR(kid->op_sv);
5497 if (SvREADONLY(kid->op_sv)) {
5498 SvREADONLY_off(kid->op_sv);
5499 sv_catpvn(kid->op_sv, ".pm", 3);
5500 SvREADONLY_on(kid->op_sv);
5503 sv_catpvn(kid->op_sv, ".pm", 3);
5507 /* handle override, if any */
5508 gv = gv_fetchpv("require", FALSE, SVt_PVCV);
5509 if (!(gv && GvCVu(gv) && GvIMPORTED_CV(gv)))
5510 gv = gv_fetchpv("CORE::GLOBAL::require", FALSE, SVt_PVCV);
5512 if (gv && GvCVu(gv) && GvIMPORTED_CV(gv)) {
5513 OP *kid = cUNOPo->op_first;
5514 cUNOPo->op_first = 0;
5516 return ck_subr(newUNOP(OP_ENTERSUB, OPf_STACKED,
5517 append_elem(OP_LIST, kid,
5518 scalar(newUNOP(OP_RV2CV, 0,
5527 Perl_ck_return(pTHX_ OP *o)
5530 if (CvLVALUE(PL_compcv)) {
5531 for (kid = cLISTOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
5532 mod(kid, OP_LEAVESUBLV);
5539 Perl_ck_retarget(pTHX_ OP *o)
5541 Perl_croak(aTHX_ "NOT IMPL LINE %d",__LINE__);
5548 Perl_ck_select(pTHX_ OP *o)
5551 if (o->op_flags & OPf_KIDS) {
5552 kid = cLISTOPo->op_first->op_sibling; /* get past pushmark */
5553 if (kid && kid->op_sibling) {
5554 o->op_type = OP_SSELECT;
5555 o->op_ppaddr = PL_ppaddr[OP_SSELECT];
5557 return fold_constants(o);
5561 kid = cLISTOPo->op_first->op_sibling; /* get past pushmark */
5562 if (kid && kid->op_type == OP_RV2GV)
5563 kid->op_private &= ~HINT_STRICT_REFS;
5568 Perl_ck_shift(pTHX_ OP *o)
5570 I32 type = o->op_type;
5572 if (!(o->op_flags & OPf_KIDS)) {
5576 argop = newUNOP(OP_RV2AV, 0,
5577 scalar(newGVOP(OP_GV, 0, !CvUNIQUE(PL_compcv) ?
5578 PL_defgv : gv_fetchpv("ARGV", TRUE, SVt_PVAV))));
5579 return newUNOP(type, 0, scalar(argop));
5581 return scalar(modkids(ck_fun(o), type));
5585 Perl_ck_sort(pTHX_ OP *o)
5589 if (o->op_type == OP_SORT && o->op_flags & OPf_STACKED)
5591 firstkid = cLISTOPo->op_first->op_sibling; /* get past pushmark */
5592 if (o->op_flags & OPf_STACKED) { /* may have been cleared */
5594 OP *kid = cUNOPx(firstkid)->op_first; /* get past null */
5596 if (kid->op_type == OP_SCOPE || kid->op_type == OP_LEAVE) {
5598 if (kid->op_type == OP_SCOPE) {
5602 else if (kid->op_type == OP_LEAVE) {
5603 if (o->op_type == OP_SORT) {
5604 op_null(kid); /* wipe out leave */
5607 for (k = kLISTOP->op_first->op_next; k; k = k->op_next) {
5608 if (k->op_next == kid)
5610 /* don't descend into loops */
5611 else if (k->op_type == OP_ENTERLOOP
5612 || k->op_type == OP_ENTERITER)
5614 k = cLOOPx(k)->op_lastop;
5619 kid->op_next = 0; /* just disconnect the leave */
5620 k = kLISTOP->op_first;
5625 if (o->op_type == OP_SORT) {
5626 /* provide scalar context for comparison function/block */
5632 o->op_flags |= OPf_SPECIAL;
5634 else if (kid->op_type == OP_RV2SV || kid->op_type == OP_PADSV)
5637 firstkid = firstkid->op_sibling;
5640 /* provide list context for arguments */
5641 if (o->op_type == OP_SORT)
5648 S_simplify_sort(pTHX_ OP *o)
5650 register OP *kid = cLISTOPo->op_first->op_sibling; /* get past pushmark */
5654 if (!(o->op_flags & OPf_STACKED))
5656 GvMULTI_on(gv_fetchpv("a", TRUE, SVt_PV));
5657 GvMULTI_on(gv_fetchpv("b", TRUE, SVt_PV));
5658 kid = kUNOP->op_first; /* get past null */
5659 if (kid->op_type != OP_SCOPE)
5661 kid = kLISTOP->op_last; /* get past scope */
5662 switch(kid->op_type) {
5670 k = kid; /* remember this node*/
5671 if (kBINOP->op_first->op_type != OP_RV2SV)
5673 kid = kBINOP->op_first; /* get past cmp */
5674 if (kUNOP->op_first->op_type != OP_GV)
5676 kid = kUNOP->op_first; /* get past rv2sv */
5678 if (GvSTASH(gv) != PL_curstash)
5680 if (strEQ(GvNAME(gv), "a"))
5682 else if (strEQ(GvNAME(gv), "b"))
5686 kid = k; /* back to cmp */
5687 if (kBINOP->op_last->op_type != OP_RV2SV)
5689 kid = kBINOP->op_last; /* down to 2nd arg */
5690 if (kUNOP->op_first->op_type != OP_GV)
5692 kid = kUNOP->op_first; /* get past rv2sv */
5694 if (GvSTASH(gv) != PL_curstash
5696 ? strNE(GvNAME(gv), "a")
5697 : strNE(GvNAME(gv), "b")))
5699 o->op_flags &= ~(OPf_STACKED | OPf_SPECIAL);
5701 o->op_private |= OPpSORT_REVERSE;
5702 if (k->op_type == OP_NCMP)
5703 o->op_private |= OPpSORT_NUMERIC;
5704 if (k->op_type == OP_I_NCMP)
5705 o->op_private |= OPpSORT_NUMERIC | OPpSORT_INTEGER;
5706 kid = cLISTOPo->op_first->op_sibling;
5707 cLISTOPo->op_first->op_sibling = kid->op_sibling; /* bypass old block */
5708 op_free(kid); /* then delete it */
5712 Perl_ck_split(pTHX_ OP *o)
5716 if (o->op_flags & OPf_STACKED)
5717 return no_fh_allowed(o);
5719 kid = cLISTOPo->op_first;
5720 if (kid->op_type != OP_NULL)
5721 Perl_croak(aTHX_ "panic: ck_split");
5722 kid = kid->op_sibling;
5723 op_free(cLISTOPo->op_first);
5724 cLISTOPo->op_first = kid;
5726 cLISTOPo->op_first = kid = newSVOP(OP_CONST, 0, newSVpvn(" ", 1));
5727 cLISTOPo->op_last = kid; /* There was only one element previously */
5730 if (kid->op_type != OP_MATCH || kid->op_flags & OPf_STACKED) {
5731 OP *sibl = kid->op_sibling;
5732 kid->op_sibling = 0;
5733 kid = pmruntime( newPMOP(OP_MATCH, OPf_SPECIAL), kid, Nullop);
5734 if (cLISTOPo->op_first == cLISTOPo->op_last)
5735 cLISTOPo->op_last = kid;
5736 cLISTOPo->op_first = kid;
5737 kid->op_sibling = sibl;
5740 kid->op_type = OP_PUSHRE;
5741 kid->op_ppaddr = PL_ppaddr[OP_PUSHRE];
5743 if (ckWARN(WARN_REGEXP) && ((PMOP *)kid)->op_pmflags & PMf_GLOBAL) {
5744 Perl_warner(aTHX_ packWARN(WARN_REGEXP),
5745 "Use of /g modifier is meaningless in split");
5748 if (!kid->op_sibling)
5749 append_elem(OP_SPLIT, o, newDEFSVOP());
5751 kid = kid->op_sibling;
5754 if (!kid->op_sibling)
5755 append_elem(OP_SPLIT, o, newSVOP(OP_CONST, 0, newSViv(0)));
5757 kid = kid->op_sibling;
5760 if (kid->op_sibling)
5761 return too_many_arguments(o,OP_DESC(o));
5767 Perl_ck_join(pTHX_ OP *o)
5769 if (ckWARN(WARN_SYNTAX)) {
5770 OP *kid = cLISTOPo->op_first->op_sibling;
5771 if (kid && kid->op_type == OP_MATCH) {
5772 char *pmstr = "STRING";
5773 if (PM_GETRE(kPMOP))
5774 pmstr = PM_GETRE(kPMOP)->precomp;
5775 Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
5776 "/%s/ should probably be written as \"%s\"",
5784 Perl_ck_subr(pTHX_ OP *o)
5786 OP *prev = ((cUNOPo->op_first->op_sibling)
5787 ? cUNOPo : ((UNOP*)cUNOPo->op_first))->op_first;
5788 OP *o2 = prev->op_sibling;
5795 I32 contextclass = 0;
5799 o->op_private |= OPpENTERSUB_HASTARG;
5800 for (cvop = o2; cvop->op_sibling; cvop = cvop->op_sibling) ;
5801 if (cvop->op_type == OP_RV2CV) {
5803 o->op_private |= (cvop->op_private & OPpENTERSUB_AMPER);
5804 op_null(cvop); /* disable rv2cv */
5805 tmpop = (SVOP*)((UNOP*)cvop)->op_first;
5806 if (tmpop->op_type == OP_GV && !(o->op_private & OPpENTERSUB_AMPER)) {
5807 GV *gv = cGVOPx_gv(tmpop);
5810 tmpop->op_private |= OPpEARLY_CV;
5811 else if (SvPOK(cv)) {
5812 namegv = CvANON(cv) ? gv : CvGV(cv);
5813 proto = SvPV((SV*)cv, n_a);
5817 else if (cvop->op_type == OP_METHOD || cvop->op_type == OP_METHOD_NAMED) {
5818 if (o2->op_type == OP_CONST)
5819 o2->op_private &= ~OPpCONST_STRICT;
5820 else if (o2->op_type == OP_LIST) {
5821 OP *o = ((UNOP*)o2)->op_first->op_sibling;
5822 if (o && o->op_type == OP_CONST)
5823 o->op_private &= ~OPpCONST_STRICT;
5826 o->op_private |= (PL_hints & HINT_STRICT_REFS);
5827 if (PERLDB_SUB && PL_curstash != PL_debstash)
5828 o->op_private |= OPpENTERSUB_DB;
5829 while (o2 != cvop) {
5833 return too_many_arguments(o, gv_ename(namegv));
5851 if (o2->op_type != OP_REFGEN && o2->op_type != OP_UNDEF)
5853 arg == 1 ? "block or sub {}" : "sub {}",
5854 gv_ename(namegv), o2);
5857 /* '*' allows any scalar type, including bareword */
5860 if (o2->op_type == OP_RV2GV)
5861 goto wrapref; /* autoconvert GLOB -> GLOBref */
5862 else if (o2->op_type == OP_CONST)
5863 o2->op_private &= ~OPpCONST_STRICT;
5864 else if (o2->op_type == OP_ENTERSUB) {
5865 /* accidental subroutine, revert to bareword */
5866 OP *gvop = ((UNOP*)o2)->op_first;
5867 if (gvop && gvop->op_type == OP_NULL) {
5868 gvop = ((UNOP*)gvop)->op_first;
5870 for (; gvop->op_sibling; gvop = gvop->op_sibling)
5873 (gvop->op_private & OPpENTERSUB_NOPAREN) &&
5874 (gvop = ((UNOP*)gvop)->op_first) &&
5875 gvop->op_type == OP_GV)
5877 GV *gv = cGVOPx_gv(gvop);
5878 OP *sibling = o2->op_sibling;
5879 SV *n = newSVpvn("",0);
5881 gv_fullname3(n, gv, "");
5882 if (SvCUR(n)>6 && strnEQ(SvPVX(n),"main::",6))
5883 sv_chop(n, SvPVX(n)+6);
5884 o2 = newSVOP(OP_CONST, 0, n);
5885 prev->op_sibling = o2;
5886 o2->op_sibling = sibling;
5902 if (contextclass++ == 0) {
5903 e = strchr(proto, ']');
5904 if (!e || e == proto)
5917 while (*--p != '[');
5918 bad_type(arg, Perl_form(aTHX_ "one of %s", p),
5919 gv_ename(namegv), o2);
5925 if (o2->op_type == OP_RV2GV)
5928 bad_type(arg, "symbol", gv_ename(namegv), o2);
5931 if (o2->op_type == OP_ENTERSUB)
5934 bad_type(arg, "subroutine entry", gv_ename(namegv), o2);
5937 if (o2->op_type == OP_RV2SV ||
5938 o2->op_type == OP_PADSV ||
5939 o2->op_type == OP_HELEM ||
5940 o2->op_type == OP_AELEM ||
5941 o2->op_type == OP_THREADSV)
5944 bad_type(arg, "scalar", gv_ename(namegv), o2);
5947 if (o2->op_type == OP_RV2AV ||
5948 o2->op_type == OP_PADAV)
5951 bad_type(arg, "array", gv_ename(namegv), o2);
5954 if (o2->op_type == OP_RV2HV ||
5955 o2->op_type == OP_PADHV)
5958 bad_type(arg, "hash", gv_ename(namegv), o2);
5963 OP* sib = kid->op_sibling;
5964 kid->op_sibling = 0;
5965 o2 = newUNOP(OP_REFGEN, 0, kid);
5966 o2->op_sibling = sib;
5967 prev->op_sibling = o2;
5969 if (contextclass && e) {
5984 Perl_croak(aTHX_ "Malformed prototype for %s: %"SVf,
5985 gv_ename(namegv), cv);
5990 mod(o2, OP_ENTERSUB);
5992 o2 = o2->op_sibling;
5994 if (proto && !optional &&
5995 (*proto && *proto != '@' && *proto != '%' && *proto != ';'))
5996 return too_few_arguments(o, gv_ename(namegv));
6001 Perl_ck_svconst(pTHX_ OP *o)
6003 SvREADONLY_on(cSVOPo->op_sv);
6008 Perl_ck_trunc(pTHX_ OP *o)
6010 if (o->op_flags & OPf_KIDS) {
6011 SVOP *kid = (SVOP*)cUNOPo->op_first;
6013 if (kid->op_type == OP_NULL)
6014 kid = (SVOP*)kid->op_sibling;
6015 if (kid && kid->op_type == OP_CONST &&
6016 (kid->op_private & OPpCONST_BARE))
6018 o->op_flags |= OPf_SPECIAL;
6019 kid->op_private &= ~OPpCONST_STRICT;
6026 Perl_ck_substr(pTHX_ OP *o)
6029 if ((o->op_flags & OPf_KIDS) && o->op_private == 4) {
6030 OP *kid = cLISTOPo->op_first;
6032 if (kid->op_type == OP_NULL)
6033 kid = kid->op_sibling;
6035 kid->op_flags |= OPf_MOD;
6041 /* A peephole optimizer. We visit the ops in the order they're to execute. */
6044 Perl_peep(pTHX_ register OP *o)
6046 register OP* oldop = 0;
6048 if (!o || o->op_seq)
6052 SAVEVPTR(PL_curcop);
6053 for (; o; o = o->op_next) {
6056 /* The special value -1 is used by the B::C compiler backend to indicate
6057 * that an op is statically defined and should not be freed */
6058 if (!PL_op_seqmax || PL_op_seqmax == (U16)-1)
6061 switch (o->op_type) {
6065 PL_curcop = ((COP*)o); /* for warnings */
6066 o->op_seq = PL_op_seqmax++;
6070 if (cSVOPo->op_private & OPpCONST_STRICT)
6071 no_bareword_allowed(o);
6073 case OP_METHOD_NAMED:
6074 /* Relocate sv to the pad for thread safety.
6075 * Despite being a "constant", the SV is written to,
6076 * for reference counts, sv_upgrade() etc. */
6078 PADOFFSET ix = pad_alloc(OP_CONST, SVs_PADTMP);
6079 if (o->op_type == OP_CONST && SvPADTMP(cSVOPo->op_sv)) {
6080 /* If op_sv is already a PADTMP then it is being used by
6081 * some pad, so make a copy. */
6082 sv_setsv(PAD_SVl(ix),cSVOPo->op_sv);
6083 SvREADONLY_on(PAD_SVl(ix));
6084 SvREFCNT_dec(cSVOPo->op_sv);
6087 SvREFCNT_dec(PAD_SVl(ix));
6088 SvPADTMP_on(cSVOPo->op_sv);
6089 PAD_SETSV(ix, cSVOPo->op_sv);
6090 /* XXX I don't know how this isn't readonly already. */
6091 SvREADONLY_on(PAD_SVl(ix));
6093 cSVOPo->op_sv = Nullsv;
6097 o->op_seq = PL_op_seqmax++;
6101 if (o->op_next && o->op_next->op_type == OP_STRINGIFY) {
6102 if (o->op_next->op_private & OPpTARGET_MY) {
6103 if (o->op_flags & OPf_STACKED) /* chained concats */
6104 goto ignore_optimization;
6106 /* assert(PL_opargs[o->op_type] & OA_TARGLEX); */
6107 o->op_targ = o->op_next->op_targ;
6108 o->op_next->op_targ = 0;
6109 o->op_private |= OPpTARGET_MY;
6112 op_null(o->op_next);
6114 ignore_optimization:
6115 o->op_seq = PL_op_seqmax++;
6118 if ((o->op_flags & OPf_WANT) != OPf_WANT_LIST) {
6119 o->op_seq = PL_op_seqmax++;
6120 break; /* Scalar stub must produce undef. List stub is noop */
6124 if (o->op_targ == OP_NEXTSTATE
6125 || o->op_targ == OP_DBSTATE
6126 || o->op_targ == OP_SETSTATE)
6128 PL_curcop = ((COP*)o);
6130 /* XXX: We avoid setting op_seq here to prevent later calls
6131 to peep() from mistakenly concluding that optimisation
6132 has already occurred. This doesn't fix the real problem,
6133 though (See 20010220.007). AMS 20010719 */
6134 if (oldop && o->op_next) {
6135 oldop->op_next = o->op_next;
6143 if (oldop && o->op_next) {
6144 oldop->op_next = o->op_next;
6147 o->op_seq = PL_op_seqmax++;
6151 if (o->op_next->op_type == OP_RV2SV) {
6152 if (!(o->op_next->op_private & OPpDEREF)) {
6153 op_null(o->op_next);
6154 o->op_private |= o->op_next->op_private & (OPpLVAL_INTRO
6156 o->op_next = o->op_next->op_next;
6157 o->op_type = OP_GVSV;
6158 o->op_ppaddr = PL_ppaddr[OP_GVSV];
6161 else if (o->op_next->op_type == OP_RV2AV) {
6162 OP* pop = o->op_next->op_next;
6164 if (pop && pop->op_type == OP_CONST &&
6165 (PL_op = pop->op_next) &&
6166 pop->op_next->op_type == OP_AELEM &&
6167 !(pop->op_next->op_private &
6168 (OPpLVAL_INTRO|OPpLVAL_DEFER|OPpDEREF|OPpMAYBE_LVSUB)) &&
6169 (i = SvIV(((SVOP*)pop)->op_sv) - PL_curcop->cop_arybase)
6174 op_null(o->op_next);
6175 op_null(pop->op_next);
6177 o->op_flags |= pop->op_next->op_flags & OPf_MOD;
6178 o->op_next = pop->op_next->op_next;
6179 o->op_type = OP_AELEMFAST;
6180 o->op_ppaddr = PL_ppaddr[OP_AELEMFAST];
6181 o->op_private = (U8)i;
6186 else if ((o->op_private & OPpEARLY_CV) && ckWARN(WARN_PROTOTYPE)) {
6188 if (SvTYPE(gv) == SVt_PVGV && GvCV(gv) && SvPVX(GvCV(gv))) {
6189 /* XXX could check prototype here instead of just carping */
6190 SV *sv = sv_newmortal();
6191 gv_efullname3(sv, gv, Nullch);
6192 Perl_warner(aTHX_ packWARN(WARN_PROTOTYPE),
6193 "%"SVf"() called too early to check prototype",
6197 else if (o->op_next->op_type == OP_READLINE
6198 && o->op_next->op_next->op_type == OP_CONCAT
6199 && (o->op_next->op_next->op_flags & OPf_STACKED))
6201 /* Turn "$a .= <FH>" into an OP_RCATLINE. AMS 20010917 */
6202 o->op_type = OP_RCATLINE;
6203 o->op_flags |= OPf_STACKED;
6204 o->op_ppaddr = PL_ppaddr[OP_RCATLINE];
6205 op_null(o->op_next->op_next);
6206 op_null(o->op_next);
6209 o->op_seq = PL_op_seqmax++;
6222 o->op_seq = PL_op_seqmax++;
6223 while (cLOGOP->op_other->op_type == OP_NULL)
6224 cLOGOP->op_other = cLOGOP->op_other->op_next;
6225 peep(cLOGOP->op_other); /* Recursive calls are not replaced by fptr calls */
6230 o->op_seq = PL_op_seqmax++;
6231 while (cLOOP->op_redoop->op_type == OP_NULL)
6232 cLOOP->op_redoop = cLOOP->op_redoop->op_next;
6233 peep(cLOOP->op_redoop);
6234 while (cLOOP->op_nextop->op_type == OP_NULL)
6235 cLOOP->op_nextop = cLOOP->op_nextop->op_next;
6236 peep(cLOOP->op_nextop);
6237 while (cLOOP->op_lastop->op_type == OP_NULL)
6238 cLOOP->op_lastop = cLOOP->op_lastop->op_next;
6239 peep(cLOOP->op_lastop);
6245 o->op_seq = PL_op_seqmax++;
6246 while (cPMOP->op_pmreplstart &&
6247 cPMOP->op_pmreplstart->op_type == OP_NULL)
6248 cPMOP->op_pmreplstart = cPMOP->op_pmreplstart->op_next;
6249 peep(cPMOP->op_pmreplstart);
6253 o->op_seq = PL_op_seqmax++;
6254 if (ckWARN(WARN_SYNTAX) && o->op_next
6255 && o->op_next->op_type == OP_NEXTSTATE) {
6256 if (o->op_next->op_sibling &&
6257 o->op_next->op_sibling->op_type != OP_EXIT &&
6258 o->op_next->op_sibling->op_type != OP_WARN &&
6259 o->op_next->op_sibling->op_type != OP_DIE) {
6260 line_t oldline = CopLINE(PL_curcop);
6262 CopLINE_set(PL_curcop, CopLINE((COP*)o->op_next));
6263 Perl_warner(aTHX_ packWARN(WARN_EXEC),
6264 "Statement unlikely to be reached");
6265 Perl_warner(aTHX_ packWARN(WARN_EXEC),
6266 "\t(Maybe you meant system() when you said exec()?)\n");
6267 CopLINE_set(PL_curcop, oldline);
6278 o->op_seq = PL_op_seqmax++;
6280 if (((BINOP*)o)->op_last->op_type != OP_CONST)
6283 /* Make the CONST have a shared SV */
6284 svp = cSVOPx_svp(((BINOP*)o)->op_last);
6285 if ((!SvFAKE(sv = *svp) || !SvREADONLY(sv)) && !IS_PADCONST(sv)) {
6286 key = SvPV(sv, keylen);
6287 lexname = newSVpvn_share(key,
6288 SvUTF8(sv) ? -(I32)keylen : keylen,
6297 o->op_seq = PL_op_seqmax++;
6307 char* Perl_custom_op_name(pTHX_ OP* o)
6309 IV index = PTR2IV(o->op_ppaddr);
6313 if (!PL_custom_op_names) /* This probably shouldn't happen */
6314 return PL_op_name[OP_CUSTOM];
6316 keysv = sv_2mortal(newSViv(index));
6318 he = hv_fetch_ent(PL_custom_op_names, keysv, 0, 0);
6320 return PL_op_name[OP_CUSTOM]; /* Don't know who you are */
6322 return SvPV_nolen(HeVAL(he));
6325 char* Perl_custom_op_desc(pTHX_ OP* o)
6327 IV index = PTR2IV(o->op_ppaddr);
6331 if (!PL_custom_op_descs)
6332 return PL_op_desc[OP_CUSTOM];
6334 keysv = sv_2mortal(newSViv(index));
6336 he = hv_fetch_ent(PL_custom_op_descs, keysv, 0, 0);
6338 return PL_op_desc[OP_CUSTOM];
6340 return SvPV_nolen(HeVAL(he));
6346 /* Efficient sub that returns a constant scalar value. */
6348 const_sv_xsub(pTHX_ CV* cv)
6353 Perl_croak(aTHX_ "usage: %s::%s()",
6354 HvNAME(GvSTASH(CvGV(cv))), GvNAME(CvGV(cv)));
6358 ST(0) = (SV*)XSANY.any_ptr;