3 * Copyright (C) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
4 * 2000, 2001, 2002, 2003, by Larry Wall and others
6 * You may distribute under the terms of either the GNU General Public
7 * License or the Artistic License, as specified in the README file.
12 * "You see: Mr. Drogo, he married poor Miss Primula Brandybuck. She was
13 * our Mr. Bilbo's first cousin on the mother's side (her mother being the
14 * youngest of the Old Took's daughters); and Mr. Drogo was his second
15 * cousin. So Mr. Frodo is his first *and* second cousin, once removed
16 * either way, as the saying is, if you follow me." --the Gaffer
25 #define CALL_PEEP(o) CALL_FPTR(PL_peepp)(aTHX_ o)
27 #if defined(PL_OP_SLAB_ALLOC)
29 #ifndef PERL_SLAB_SIZE
30 #define PERL_SLAB_SIZE 2048
33 #define NewOp(m,var,c,type) \
34 STMT_START { var = (type *) Slab_Alloc(m,c*sizeof(type)); } STMT_END
36 #define FreeOp(p) Slab_Free(p)
39 S_Slab_Alloc(pTHX_ int m, size_t sz)
42 * To make incrementing use count easy PL_OpSlab is an I32 *
43 * To make inserting the link to slab PL_OpPtr is I32 **
44 * So compute size in units of sizeof(I32 *) as that is how Pl_OpPtr increments
45 * Add an overhead for pointer to slab and round up as a number of pointers
47 sz = (sz + 2*sizeof(I32 *) -1)/sizeof(I32 *);
48 if ((PL_OpSpace -= sz) < 0) {
49 PL_OpPtr = (I32 **) PerlMemShared_malloc(PERL_SLAB_SIZE*sizeof(I32*));
53 Zero(PL_OpPtr,PERL_SLAB_SIZE,I32 **);
54 /* We reserve the 0'th I32 sized chunk as a use count */
55 PL_OpSlab = (I32 *) PL_OpPtr;
56 /* Reduce size by the use count word, and by the size we need.
57 * Latter is to mimic the '-=' in the if() above
59 PL_OpSpace = PERL_SLAB_SIZE - (sizeof(I32)+sizeof(I32 **)-1)/sizeof(I32 **) - sz;
60 /* Allocation pointer starts at the top.
61 Theory: because we build leaves before trunk allocating at end
62 means that at run time access is cache friendly upward
64 PL_OpPtr += PERL_SLAB_SIZE;
66 assert( PL_OpSpace >= 0 );
67 /* Move the allocation pointer down */
69 assert( PL_OpPtr > (I32 **) PL_OpSlab );
70 *PL_OpPtr = PL_OpSlab; /* Note which slab it belongs to */
71 (*PL_OpSlab)++; /* Increment use count of slab */
72 assert( PL_OpPtr+sz <= ((I32 **) PL_OpSlab + PERL_SLAB_SIZE) );
73 assert( *PL_OpSlab > 0 );
74 return (void *)(PL_OpPtr + 1);
78 S_Slab_Free(pTHX_ void *op)
80 I32 **ptr = (I32 **) op;
82 assert( ptr-1 > (I32 **) slab );
83 assert( ptr < ( (I32 **) slab + PERL_SLAB_SIZE) );
87 #define PerlMemShared PerlMem
90 PerlMemShared_free(slab);
91 if (slab == PL_OpSlab) {
98 #define NewOp(m, var, c, type) Newz(m, var, c, type)
99 #define FreeOp(p) Safefree(p)
102 * In the following definition, the ", Nullop" is just to make the compiler
103 * think the expression is of the right type: croak actually does a Siglongjmp.
105 #define CHECKOP(type,o) \
106 ((PL_op_mask && PL_op_mask[type]) \
107 ? ( op_free((OP*)o), \
108 Perl_croak(aTHX_ "'%s' trapped by operation mask", PL_op_desc[type]), \
110 : CALL_FPTR(PL_check[type])(aTHX_ (OP*)o))
112 #define RETURN_UNLIMITED_NUMBER (PERL_INT_MAX / 2)
115 S_gv_ename(pTHX_ GV *gv)
118 SV* tmpsv = sv_newmortal();
119 gv_efullname3(tmpsv, gv, Nullch);
120 return SvPV(tmpsv,n_a);
124 S_no_fh_allowed(pTHX_ OP *o)
126 yyerror(Perl_form(aTHX_ "Missing comma after first argument to %s function",
132 S_too_few_arguments(pTHX_ OP *o, char *name)
134 yyerror(Perl_form(aTHX_ "Not enough arguments for %s", name));
139 S_too_many_arguments(pTHX_ OP *o, char *name)
141 yyerror(Perl_form(aTHX_ "Too many arguments for %s", name));
146 S_bad_type(pTHX_ I32 n, char *t, char *name, OP *kid)
148 yyerror(Perl_form(aTHX_ "Type of arg %d to %s must be %s (not %s)",
149 (int)n, name, t, OP_DESC(kid)));
153 S_no_bareword_allowed(pTHX_ OP *o)
155 qerror(Perl_mess(aTHX_
156 "Bareword \"%"SVf"\" not allowed while \"strict subs\" in use",
160 /* "register" allocation */
163 Perl_allocmy(pTHX_ char *name)
167 /* complain about "my $_" etc etc */
168 if (!(PL_in_my == KEY_our ||
170 (USE_UTF8_IN_NAMES && UTF8_IS_START(name[1])) ||
171 (name[1] == '_' && (int)strlen(name) > 2)))
173 if (!isPRINT(name[1]) || strchr("\t\n\r\f", name[1])) {
174 /* 1999-02-27 mjd@plover.com */
176 p = strchr(name, '\0');
177 /* The next block assumes the buffer is at least 205 chars
178 long. At present, it's always at least 256 chars. */
180 strcpy(name+200, "...");
186 /* Move everything else down one character */
187 for (; p-name > 2; p--)
189 name[2] = toCTRL(name[1]);
192 yyerror(Perl_form(aTHX_ "Can't use global %s in \"my\"",name));
194 /* check for duplicate declaration */
196 (bool)(PL_in_my == KEY_our),
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)
220 #ifdef USE_5005THREADS
221 /* find_threadsv is not reentrant */
223 Perl_find_threadsv(pTHX_ const char *name)
228 /* We currently only handle names of a single character */
229 p = strchr(PL_threadsv_names, *name);
232 key = p - PL_threadsv_names;
233 MUTEX_LOCK(&thr->mutex);
234 svp = av_fetch(thr->threadsv, key, FALSE);
236 MUTEX_UNLOCK(&thr->mutex);
238 SV *sv = NEWSV(0, 0);
239 av_store(thr->threadsv, key, sv);
240 thr->threadsvp = AvARRAY(thr->threadsv);
241 MUTEX_UNLOCK(&thr->mutex);
243 * Some magic variables used to be automagically initialised
244 * in gv_fetchpv. Those which are now per-thread magicals get
245 * initialised here instead.
251 sv_setpv(sv, "\034");
252 sv_magic(sv, 0, PERL_MAGIC_sv, name, 1);
257 PL_sawampersand = TRUE;
271 /* XXX %! tied to Errno.pm needs to be added here.
272 * See gv_fetchpv(). */
276 sv_magic(sv, 0, PERL_MAGIC_sv, name, 1);
278 DEBUG_S(PerlIO_printf(Perl_error_log,
279 "find_threadsv: new SV %p for $%s%c\n",
280 sv, (*name < 32) ? "^" : "",
281 (*name < 32) ? toCTRL(*name) : *name));
285 #endif /* USE_5005THREADS */
290 Perl_op_free(pTHX_ OP *o)
292 register OP *kid, *nextkid;
295 if (!o || o->op_seq == (U16)-1)
298 if (o->op_private & OPpREFCOUNTED) {
299 switch (o->op_type) {
307 if (OpREFCNT_dec(o)) {
318 if (o->op_flags & OPf_KIDS) {
319 for (kid = cUNOPo->op_first; kid; kid = nextkid) {
320 nextkid = kid->op_sibling; /* Get before next freeing kid */
326 type = (OPCODE)o->op_targ;
328 /* COP* is not cleared by op_clear() so that we may track line
329 * numbers etc even after null() */
330 if (type == OP_NEXTSTATE || type == OP_SETSTATE || type == OP_DBSTATE)
338 Perl_op_clear(pTHX_ OP *o)
341 switch (o->op_type) {
342 case OP_NULL: /* Was holding old type, if any. */
343 case OP_ENTEREVAL: /* Was holding hints. */
344 #ifdef USE_5005THREADS
345 case OP_THREADSV: /* Was holding index into thr->threadsv AV. */
349 #ifdef USE_5005THREADS
351 if (!(o->op_flags & OPf_SPECIAL))
354 #endif /* USE_5005THREADS */
356 if (!(o->op_flags & OPf_REF)
357 || (PL_check[o->op_type] != MEMBER_TO_FPTR(Perl_ck_ftst)))
364 if (cPADOPo->op_padix > 0) {
365 /* No GvIN_PAD_off(cGVOPo_gv) here, because other references
366 * may still exist on the pad */
367 pad_swipe(cPADOPo->op_padix, TRUE);
368 cPADOPo->op_padix = 0;
371 SvREFCNT_dec(cSVOPo->op_sv);
372 cSVOPo->op_sv = Nullsv;
375 case OP_METHOD_NAMED:
377 SvREFCNT_dec(cSVOPo->op_sv);
378 cSVOPo->op_sv = Nullsv;
381 Even if op_clear does a pad_free for the target of the op,
382 pad_free doesn't actually remove the sv that exists in the bad
383 instead it lives on. This results in that it could be reused as
384 a target later on when the pad was reallocated.
387 pad_swipe(o->op_targ,1);
396 if (o->op_flags & (OPf_SPECIAL|OPf_STACKED|OPf_KIDS))
400 if (o->op_private & (OPpTRANS_FROM_UTF|OPpTRANS_TO_UTF)) {
401 SvREFCNT_dec(cSVOPo->op_sv);
402 cSVOPo->op_sv = Nullsv;
405 Safefree(cPVOPo->op_pv);
406 cPVOPo->op_pv = Nullch;
410 op_free(cPMOPo->op_pmreplroot);
414 if (INT2PTR(PADOFFSET, cPMOPo->op_pmreplroot)) {
415 /* No GvIN_PAD_off here, because other references may still
416 * exist on the pad */
417 pad_swipe(INT2PTR(PADOFFSET, cPMOPo->op_pmreplroot), TRUE);
420 SvREFCNT_dec((SV*)cPMOPo->op_pmreplroot);
427 HV *pmstash = PmopSTASH(cPMOPo);
428 if (pmstash && SvREFCNT(pmstash)) {
429 PMOP *pmop = HvPMROOT(pmstash);
430 PMOP *lastpmop = NULL;
432 if (cPMOPo == pmop) {
434 lastpmop->op_pmnext = pmop->op_pmnext;
436 HvPMROOT(pmstash) = pmop->op_pmnext;
440 pmop = pmop->op_pmnext;
443 PmopSTASH_free(cPMOPo);
445 cPMOPo->op_pmreplroot = Nullop;
446 /* we use the "SAFE" version of the PM_ macros here
447 * since sv_clean_all might release some PMOPs
448 * after PL_regex_padav has been cleared
449 * and the clearing of PL_regex_padav needs to
450 * happen before sv_clean_all
452 ReREFCNT_dec(PM_GETRE_SAFE(cPMOPo));
453 PM_SETRE_SAFE(cPMOPo, (REGEXP*)NULL);
455 if(PL_regex_pad) { /* We could be in destruction */
456 av_push((AV*) PL_regex_pad[0],(SV*) PL_regex_pad[(cPMOPo)->op_pmoffset]);
457 SvREPADTMP_on(PL_regex_pad[(cPMOPo)->op_pmoffset]);
458 PM_SETRE(cPMOPo, (cPMOPo)->op_pmoffset);
465 if (o->op_targ > 0) {
466 pad_free(o->op_targ);
472 S_cop_free(pTHX_ COP* cop)
474 Safefree(cop->cop_label); /* FIXME: treaddead ??? */
477 if (! specialWARN(cop->cop_warnings))
478 SvREFCNT_dec(cop->cop_warnings);
479 if (! specialCopIO(cop->cop_io)) {
483 char *s = SvPV(cop->cop_io,len);
484 Perl_warn(aTHX_ "io='%.*s'",(int) len,s); /* ??? --jhi */
487 SvREFCNT_dec(cop->cop_io);
493 Perl_op_null(pTHX_ OP *o)
495 if (o->op_type == OP_NULL)
498 o->op_targ = o->op_type;
499 o->op_type = OP_NULL;
500 o->op_ppaddr = PL_ppaddr[OP_NULL];
503 /* Contextualizers */
505 #define LINKLIST(o) ((o)->op_next ? (o)->op_next : linklist((OP*)o))
508 Perl_linklist(pTHX_ OP *o)
515 /* establish postfix order */
516 if (cUNOPo->op_first) {
517 o->op_next = LINKLIST(cUNOPo->op_first);
518 for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling) {
520 kid->op_next = LINKLIST(kid->op_sibling);
532 Perl_scalarkids(pTHX_ OP *o)
535 if (o && o->op_flags & OPf_KIDS) {
536 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
543 S_scalarboolean(pTHX_ OP *o)
545 if (o->op_type == OP_SASSIGN && cBINOPo->op_first->op_type == OP_CONST) {
546 if (ckWARN(WARN_SYNTAX)) {
547 line_t oldline = CopLINE(PL_curcop);
549 if (PL_copline != NOLINE)
550 CopLINE_set(PL_curcop, PL_copline);
551 Perl_warner(aTHX_ packWARN(WARN_SYNTAX), "Found = in conditional, should be ==");
552 CopLINE_set(PL_curcop, oldline);
559 Perl_scalar(pTHX_ OP *o)
563 /* assumes no premature commitment */
564 if (!o || (o->op_flags & OPf_WANT) || PL_error_count
565 || o->op_type == OP_RETURN)
570 o->op_flags = (o->op_flags & ~OPf_WANT) | OPf_WANT_SCALAR;
572 switch (o->op_type) {
574 scalar(cBINOPo->op_first);
579 for (kid = cUNOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
583 if ((kid = cLISTOPo->op_first) && kid->op_type == OP_PUSHRE) {
584 if (!kPMOP->op_pmreplroot)
585 deprecate_old("implicit split to @_");
593 if (o->op_flags & OPf_KIDS) {
594 for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling)
600 kid = cLISTOPo->op_first;
602 while ((kid = kid->op_sibling)) {
608 WITH_THR(PL_curcop = &PL_compiling);
613 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling) {
619 WITH_THR(PL_curcop = &PL_compiling);
622 if (ckWARN(WARN_VOID))
623 Perl_warner(aTHX_ packWARN(WARN_VOID), "Useless use of sort in scalar context");
629 Perl_scalarvoid(pTHX_ OP *o)
636 if (o->op_type == OP_NEXTSTATE
637 || o->op_type == OP_SETSTATE
638 || o->op_type == OP_DBSTATE
639 || (o->op_type == OP_NULL && (o->op_targ == OP_NEXTSTATE
640 || o->op_targ == OP_SETSTATE
641 || o->op_targ == OP_DBSTATE)))
642 PL_curcop = (COP*)o; /* for warning below */
644 /* assumes no premature commitment */
645 want = o->op_flags & OPf_WANT;
646 if ((want && want != OPf_WANT_SCALAR) || PL_error_count
647 || o->op_type == OP_RETURN)
652 if ((o->op_private & OPpTARGET_MY)
653 && (PL_opargs[o->op_type] & OA_TARGLEX))/* OPp share the meaning */
655 return scalar(o); /* As if inside SASSIGN */
658 o->op_flags = (o->op_flags & ~OPf_WANT) | OPf_WANT_VOID;
660 switch (o->op_type) {
662 if (!(PL_opargs[o->op_type] & OA_FOLDCONST))
666 if (o->op_flags & OPf_STACKED)
670 if (o->op_private == 4)
742 if (!(o->op_private & (OPpLVAL_INTRO|OPpOUR_INTRO)))
743 useless = OP_DESC(o);
750 if (!(o->op_private & (OPpLVAL_INTRO|OPpOUR_INTRO)) &&
751 (!o->op_sibling || o->op_sibling->op_type != OP_READLINE))
752 useless = "a variable";
757 if (cSVOPo->op_private & OPpCONST_STRICT)
758 no_bareword_allowed(o);
760 if (ckWARN(WARN_VOID)) {
761 useless = "a constant";
762 /* the constants 0 and 1 are permitted as they are
763 conventionally used as dummies in constructs like
764 1 while some_condition_with_side_effects; */
765 if (SvNIOK(sv) && (SvNV(sv) == 0.0 || SvNV(sv) == 1.0))
767 else if (SvPOK(sv)) {
768 /* perl4's way of mixing documentation and code
769 (before the invention of POD) was based on a
770 trick to mix nroff and perl code. The trick was
771 built upon these three nroff macros being used in
772 void context. The pink camel has the details in
773 the script wrapman near page 319. */
774 if (strnEQ(SvPVX(sv), "di", 2) ||
775 strnEQ(SvPVX(sv), "ds", 2) ||
776 strnEQ(SvPVX(sv), "ig", 2))
781 op_null(o); /* don't execute or even remember it */
785 o->op_type = OP_PREINC; /* pre-increment is faster */
786 o->op_ppaddr = PL_ppaddr[OP_PREINC];
790 o->op_type = OP_PREDEC; /* pre-decrement is faster */
791 o->op_ppaddr = PL_ppaddr[OP_PREDEC];
797 for (kid = cUNOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
802 if (o->op_flags & OPf_STACKED)
809 if (!(o->op_flags & OPf_KIDS))
818 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
825 /* all requires must return a boolean value */
826 o->op_flags &= ~OPf_WANT;
831 if ((kid = cLISTOPo->op_first) && kid->op_type == OP_PUSHRE) {
832 if (!kPMOP->op_pmreplroot)
833 deprecate_old("implicit split to @_");
837 if (useless && ckWARN(WARN_VOID))
838 Perl_warner(aTHX_ packWARN(WARN_VOID), "Useless use of %s in void context", useless);
843 Perl_listkids(pTHX_ OP *o)
846 if (o && o->op_flags & OPf_KIDS) {
847 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
854 Perl_list(pTHX_ OP *o)
858 /* assumes no premature commitment */
859 if (!o || (o->op_flags & OPf_WANT) || PL_error_count
860 || o->op_type == OP_RETURN)
865 if ((o->op_private & OPpTARGET_MY)
866 && (PL_opargs[o->op_type] & OA_TARGLEX))/* OPp share the meaning */
868 return o; /* As if inside SASSIGN */
871 o->op_flags = (o->op_flags & ~OPf_WANT) | OPf_WANT_LIST;
873 switch (o->op_type) {
876 list(cBINOPo->op_first);
881 for (kid = cUNOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
889 if (!(o->op_flags & OPf_KIDS))
891 if (!o->op_next && cUNOPo->op_first->op_type == OP_FLOP) {
892 list(cBINOPo->op_first);
893 return gen_constant_list(o);
900 kid = cLISTOPo->op_first;
902 while ((kid = kid->op_sibling)) {
908 WITH_THR(PL_curcop = &PL_compiling);
912 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling) {
918 WITH_THR(PL_curcop = &PL_compiling);
921 /* all requires must return a boolean value */
922 o->op_flags &= ~OPf_WANT;
929 Perl_scalarseq(pTHX_ OP *o)
934 if (o->op_type == OP_LINESEQ ||
935 o->op_type == OP_SCOPE ||
936 o->op_type == OP_LEAVE ||
937 o->op_type == OP_LEAVETRY)
939 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling) {
940 if (kid->op_sibling) {
944 PL_curcop = &PL_compiling;
946 o->op_flags &= ~OPf_PARENS;
947 if (PL_hints & HINT_BLOCK_SCOPE)
948 o->op_flags |= OPf_PARENS;
951 o = newOP(OP_STUB, 0);
956 S_modkids(pTHX_ OP *o, I32 type)
959 if (o && o->op_flags & OPf_KIDS) {
960 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
967 Perl_mod(pTHX_ OP *o, I32 type)
971 if (!o || PL_error_count)
974 if ((o->op_private & OPpTARGET_MY)
975 && (PL_opargs[o->op_type] & OA_TARGLEX))/* OPp share the meaning */
980 switch (o->op_type) {
985 if (!(o->op_private & (OPpCONST_ARYBASE)))
987 if (PL_eval_start && PL_eval_start->op_type == OP_CONST) {
988 PL_compiling.cop_arybase = (I32)SvIV(cSVOPx(PL_eval_start)->op_sv);
992 SAVEI32(PL_compiling.cop_arybase);
993 PL_compiling.cop_arybase = 0;
995 else if (type == OP_REFGEN)
998 Perl_croak(aTHX_ "That use of $[ is unsupported");
1001 if (o->op_flags & OPf_PARENS)
1005 if ((type == OP_UNDEF || type == OP_REFGEN) &&
1006 !(o->op_flags & OPf_STACKED)) {
1007 o->op_type = OP_RV2CV; /* entersub => rv2cv */
1008 o->op_ppaddr = PL_ppaddr[OP_RV2CV];
1009 assert(cUNOPo->op_first->op_type == OP_NULL);
1010 op_null(((LISTOP*)cUNOPo->op_first)->op_first);/* disable pushmark */
1013 else if (o->op_private & OPpENTERSUB_NOMOD)
1015 else { /* lvalue subroutine call */
1016 o->op_private |= OPpLVAL_INTRO;
1017 PL_modcount = RETURN_UNLIMITED_NUMBER;
1018 if (type == OP_GREPSTART || type == OP_ENTERSUB || type == OP_REFGEN) {
1019 /* Backward compatibility mode: */
1020 o->op_private |= OPpENTERSUB_INARGS;
1023 else { /* Compile-time error message: */
1024 OP *kid = cUNOPo->op_first;
1028 if (kid->op_type == OP_PUSHMARK)
1030 if (kid->op_type != OP_NULL || kid->op_targ != OP_LIST)
1032 "panic: unexpected lvalue entersub "
1033 "args: type/targ %ld:%"UVuf,
1034 (long)kid->op_type, (UV)kid->op_targ);
1035 kid = kLISTOP->op_first;
1037 while (kid->op_sibling)
1038 kid = kid->op_sibling;
1039 if (!(kid->op_type == OP_NULL && kid->op_targ == OP_RV2CV)) {
1041 if (kid->op_type == OP_METHOD_NAMED
1042 || kid->op_type == OP_METHOD)
1046 NewOp(1101, newop, 1, UNOP);
1047 newop->op_type = OP_RV2CV;
1048 newop->op_ppaddr = PL_ppaddr[OP_RV2CV];
1049 newop->op_first = Nullop;
1050 newop->op_next = (OP*)newop;
1051 kid->op_sibling = (OP*)newop;
1052 newop->op_private |= OPpLVAL_INTRO;
1056 if (kid->op_type != OP_RV2CV)
1058 "panic: unexpected lvalue entersub "
1059 "entry via type/targ %ld:%"UVuf,
1060 (long)kid->op_type, (UV)kid->op_targ);
1061 kid->op_private |= OPpLVAL_INTRO;
1062 break; /* Postpone until runtime */
1066 kid = kUNOP->op_first;
1067 if (kid->op_type == OP_NULL && kid->op_targ == OP_RV2SV)
1068 kid = kUNOP->op_first;
1069 if (kid->op_type == OP_NULL)
1071 "Unexpected constant lvalue entersub "
1072 "entry via type/targ %ld:%"UVuf,
1073 (long)kid->op_type, (UV)kid->op_targ);
1074 if (kid->op_type != OP_GV) {
1075 /* Restore RV2CV to check lvalueness */
1077 if (kid->op_next && kid->op_next != kid) { /* Happens? */
1078 okid->op_next = kid->op_next;
1079 kid->op_next = okid;
1082 okid->op_next = Nullop;
1083 okid->op_type = OP_RV2CV;
1085 okid->op_ppaddr = PL_ppaddr[OP_RV2CV];
1086 okid->op_private |= OPpLVAL_INTRO;
1090 cv = GvCV(kGVOP_gv);
1100 /* grep, foreach, subcalls, refgen */
1101 if (type == OP_GREPSTART || type == OP_ENTERSUB || type == OP_REFGEN)
1103 yyerror(Perl_form(aTHX_ "Can't modify %s in %s",
1104 (o->op_type == OP_NULL && (o->op_flags & OPf_SPECIAL)
1106 : (o->op_type == OP_ENTERSUB
1107 ? "non-lvalue subroutine call"
1109 type ? PL_op_desc[type] : "local"));
1123 case OP_RIGHT_SHIFT:
1132 if (!(o->op_flags & OPf_STACKED))
1138 for (kid = cUNOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
1144 if (type == OP_REFGEN && o->op_flags & OPf_PARENS) {
1145 PL_modcount = RETURN_UNLIMITED_NUMBER;
1146 return o; /* Treat \(@foo) like ordinary list. */
1150 if (scalar_mod_type(o, type))
1152 ref(cUNOPo->op_first, o->op_type);
1156 if (type == OP_LEAVESUBLV)
1157 o->op_private |= OPpMAYBE_LVSUB;
1162 PL_modcount = RETURN_UNLIMITED_NUMBER;
1165 ref(cUNOPo->op_first, o->op_type);
1169 PL_hints |= HINT_BLOCK_SCOPE;
1179 PL_modcount = RETURN_UNLIMITED_NUMBER;
1180 if (type == OP_REFGEN && o->op_flags & OPf_PARENS)
1181 return o; /* Treat \(@foo) like ordinary list. */
1182 if (scalar_mod_type(o, type))
1184 if (type == OP_LEAVESUBLV)
1185 o->op_private |= OPpMAYBE_LVSUB;
1190 { /* XXX DAPM 2002.08.25 tmp assert test */
1191 /* XXX */ assert(av_fetch(PL_comppad_name, (o->op_targ), FALSE));
1192 /* XXX */ assert(*av_fetch(PL_comppad_name, (o->op_targ), FALSE));
1194 Perl_croak(aTHX_ "Can't localize lexical variable %s",
1195 PAD_COMPNAME_PV(o->op_targ));
1199 #ifdef USE_5005THREADS
1201 PL_modcount++; /* XXX ??? */
1203 #endif /* USE_5005THREADS */
1209 if (type != OP_SASSIGN)
1213 if (o->op_private == 4) /* don't allow 4 arg substr as lvalue */
1218 if (type == OP_LEAVESUBLV)
1219 o->op_private |= OPpMAYBE_LVSUB;
1221 pad_free(o->op_targ);
1222 o->op_targ = pad_alloc(o->op_type, SVs_PADMY);
1223 assert(SvTYPE(PAD_SV(o->op_targ)) == SVt_NULL);
1224 if (o->op_flags & OPf_KIDS)
1225 mod(cBINOPo->op_first->op_sibling, type);
1230 ref(cBINOPo->op_first, o->op_type);
1231 if (type == OP_ENTERSUB &&
1232 !(o->op_private & (OPpLVAL_INTRO | OPpDEREF)))
1233 o->op_private |= OPpLVAL_DEFER;
1234 if (type == OP_LEAVESUBLV)
1235 o->op_private |= OPpMAYBE_LVSUB;
1243 if (o->op_flags & OPf_KIDS)
1244 mod(cLISTOPo->op_last, type);
1248 if (o->op_flags & OPf_SPECIAL) /* do BLOCK */
1250 else if (!(o->op_flags & OPf_KIDS))
1252 if (o->op_targ != OP_LIST) {
1253 mod(cBINOPo->op_first, type);
1258 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
1263 if (type != OP_LEAVESUBLV)
1265 break; /* mod()ing was handled by ck_return() */
1268 /* [20011101.069] File test operators interpret OPf_REF to mean that
1269 their argument is a filehandle; thus \stat(".") should not set
1271 if (type == OP_REFGEN &&
1272 PL_check[o->op_type] == MEMBER_TO_FPTR(Perl_ck_ftst))
1275 if (type != OP_LEAVESUBLV)
1276 o->op_flags |= OPf_MOD;
1278 if (type == OP_AASSIGN || type == OP_SASSIGN)
1279 o->op_flags |= OPf_SPECIAL|OPf_REF;
1281 o->op_private |= OPpLVAL_INTRO;
1282 o->op_flags &= ~OPf_SPECIAL;
1283 PL_hints |= HINT_BLOCK_SCOPE;
1285 else if (type != OP_GREPSTART && type != OP_ENTERSUB
1286 && type != OP_LEAVESUBLV)
1287 o->op_flags |= OPf_REF;
1292 S_scalar_mod_type(pTHX_ OP *o, I32 type)
1296 if (o->op_type == OP_RV2GV)
1320 case OP_RIGHT_SHIFT:
1339 S_is_handle_constructor(pTHX_ OP *o, I32 argnum)
1341 switch (o->op_type) {
1349 case OP_SELECT: /* XXX c.f. SelectSaver.pm */
1362 Perl_refkids(pTHX_ OP *o, I32 type)
1365 if (o && o->op_flags & OPf_KIDS) {
1366 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
1373 Perl_ref(pTHX_ OP *o, I32 type)
1377 if (!o || PL_error_count)
1380 switch (o->op_type) {
1382 if ((type == OP_EXISTS || type == OP_DEFINED || type == OP_LOCK) &&
1383 !(o->op_flags & OPf_STACKED)) {
1384 o->op_type = OP_RV2CV; /* entersub => rv2cv */
1385 o->op_ppaddr = PL_ppaddr[OP_RV2CV];
1386 assert(cUNOPo->op_first->op_type == OP_NULL);
1387 op_null(((LISTOP*)cUNOPo->op_first)->op_first); /* disable pushmark */
1388 o->op_flags |= OPf_SPECIAL;
1393 for (kid = cUNOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
1397 if (type == OP_DEFINED)
1398 o->op_flags |= OPf_SPECIAL; /* don't create GV */
1399 ref(cUNOPo->op_first, o->op_type);
1402 if (type == OP_RV2SV || type == OP_RV2AV || type == OP_RV2HV) {
1403 o->op_private |= (type == OP_RV2AV ? OPpDEREF_AV
1404 : type == OP_RV2HV ? OPpDEREF_HV
1406 o->op_flags |= OPf_MOD;
1411 o->op_flags |= OPf_MOD; /* XXX ??? */
1416 o->op_flags |= OPf_REF;
1419 if (type == OP_DEFINED)
1420 o->op_flags |= OPf_SPECIAL; /* don't create GV */
1421 ref(cUNOPo->op_first, o->op_type);
1426 o->op_flags |= OPf_REF;
1431 if (!(o->op_flags & OPf_KIDS))
1433 ref(cBINOPo->op_first, type);
1437 ref(cBINOPo->op_first, o->op_type);
1438 if (type == OP_RV2SV || type == OP_RV2AV || type == OP_RV2HV) {
1439 o->op_private |= (type == OP_RV2AV ? OPpDEREF_AV
1440 : type == OP_RV2HV ? OPpDEREF_HV
1442 o->op_flags |= OPf_MOD;
1450 if (!(o->op_flags & OPf_KIDS))
1452 ref(cLISTOPo->op_last, type);
1462 S_dup_attrlist(pTHX_ OP *o)
1466 /* An attrlist is either a simple OP_CONST or an OP_LIST with kids,
1467 * where the first kid is OP_PUSHMARK and the remaining ones
1468 * are OP_CONST. We need to push the OP_CONST values.
1470 if (o->op_type == OP_CONST)
1471 rop = newSVOP(OP_CONST, o->op_flags, SvREFCNT_inc(cSVOPo->op_sv));
1473 assert((o->op_type == OP_LIST) && (o->op_flags & OPf_KIDS));
1474 for (o = cLISTOPo->op_first; o; o=o->op_sibling) {
1475 if (o->op_type == OP_CONST)
1476 rop = append_elem(OP_LIST, rop,
1477 newSVOP(OP_CONST, o->op_flags,
1478 SvREFCNT_inc(cSVOPo->op_sv)));
1485 S_apply_attrs(pTHX_ HV *stash, SV *target, OP *attrs, bool for_my)
1489 /* fake up C<use attributes $pkg,$rv,@attrs> */
1490 ENTER; /* need to protect against side-effects of 'use' */
1493 stashsv = newSVpv(HvNAME(stash), 0);
1495 stashsv = &PL_sv_no;
1497 #define ATTRSMODULE "attributes"
1498 #define ATTRSMODULE_PM "attributes.pm"
1502 /* Don't force the C<use> if we don't need it. */
1503 svp = hv_fetch(GvHVn(PL_incgv), ATTRSMODULE_PM,
1504 sizeof(ATTRSMODULE_PM)-1, 0);
1505 if (svp && *svp != &PL_sv_undef)
1506 ; /* already in %INC */
1508 Perl_load_module(aTHX_ PERL_LOADMOD_NOIMPORT,
1509 newSVpvn(ATTRSMODULE, sizeof(ATTRSMODULE)-1),
1513 Perl_load_module(aTHX_ PERL_LOADMOD_IMPORT_OPS,
1514 newSVpvn(ATTRSMODULE, sizeof(ATTRSMODULE)-1),
1516 prepend_elem(OP_LIST,
1517 newSVOP(OP_CONST, 0, stashsv),
1518 prepend_elem(OP_LIST,
1519 newSVOP(OP_CONST, 0,
1521 dup_attrlist(attrs))));
1527 S_apply_attrs_my(pTHX_ HV *stash, OP *target, OP *attrs, OP **imopsp)
1529 OP *pack, *imop, *arg;
1535 assert(target->op_type == OP_PADSV ||
1536 target->op_type == OP_PADHV ||
1537 target->op_type == OP_PADAV);
1539 /* Ensure that attributes.pm is loaded. */
1540 apply_attrs(stash, PAD_SV(target->op_targ), attrs, TRUE);
1542 /* Need package name for method call. */
1543 pack = newSVOP(OP_CONST, 0, newSVpvn(ATTRSMODULE, sizeof(ATTRSMODULE)-1));
1545 /* Build up the real arg-list. */
1547 stashsv = newSVpv(HvNAME(stash), 0);
1549 stashsv = &PL_sv_no;
1550 arg = newOP(OP_PADSV, 0);
1551 arg->op_targ = target->op_targ;
1552 arg = prepend_elem(OP_LIST,
1553 newSVOP(OP_CONST, 0, stashsv),
1554 prepend_elem(OP_LIST,
1555 newUNOP(OP_REFGEN, 0,
1556 mod(arg, OP_REFGEN)),
1557 dup_attrlist(attrs)));
1559 /* Fake up a method call to import */
1560 meth = newSVpvn("import", 6);
1561 (void)SvUPGRADE(meth, SVt_PVIV);
1562 (void)SvIOK_on(meth);
1563 PERL_HASH(SvUVX(meth), SvPVX(meth), SvCUR(meth));
1564 imop = convert(OP_ENTERSUB, OPf_STACKED|OPf_SPECIAL|OPf_WANT_VOID,
1565 append_elem(OP_LIST,
1566 prepend_elem(OP_LIST, pack, list(arg)),
1567 newSVOP(OP_METHOD_NAMED, 0, meth)));
1568 imop->op_private |= OPpENTERSUB_NOMOD;
1570 /* Combine the ops. */
1571 *imopsp = append_elem(OP_LIST, *imopsp, imop);
1575 =notfor apidoc apply_attrs_string
1577 Attempts to apply a list of attributes specified by the C<attrstr> and
1578 C<len> arguments to the subroutine identified by the C<cv> argument which
1579 is expected to be associated with the package identified by the C<stashpv>
1580 argument (see L<attributes>). It gets this wrong, though, in that it
1581 does not correctly identify the boundaries of the individual attribute
1582 specifications within C<attrstr>. This is not really intended for the
1583 public API, but has to be listed here for systems such as AIX which
1584 need an explicit export list for symbols. (It's called from XS code
1585 in support of the C<ATTRS:> keyword from F<xsubpp>.) Patches to fix it
1586 to respect attribute syntax properly would be welcome.
1592 Perl_apply_attrs_string(pTHX_ char *stashpv, CV *cv,
1593 char *attrstr, STRLEN len)
1598 len = strlen(attrstr);
1602 for (; isSPACE(*attrstr) && len; --len, ++attrstr) ;
1604 char *sstr = attrstr;
1605 for (; !isSPACE(*attrstr) && len; --len, ++attrstr) ;
1606 attrs = append_elem(OP_LIST, attrs,
1607 newSVOP(OP_CONST, 0,
1608 newSVpvn(sstr, attrstr-sstr)));
1612 Perl_load_module(aTHX_ PERL_LOADMOD_IMPORT_OPS,
1613 newSVpvn(ATTRSMODULE, sizeof(ATTRSMODULE)-1),
1614 Nullsv, prepend_elem(OP_LIST,
1615 newSVOP(OP_CONST, 0, newSVpv(stashpv,0)),
1616 prepend_elem(OP_LIST,
1617 newSVOP(OP_CONST, 0,
1623 S_my_kid(pTHX_ OP *o, OP *attrs, OP **imopsp)
1628 if (!o || PL_error_count)
1632 if (type == OP_LIST) {
1633 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
1634 my_kid(kid, attrs, imopsp);
1635 } else if (type == OP_UNDEF) {
1637 } else if (type == OP_RV2SV || /* "our" declaration */
1639 type == OP_RV2HV) { /* XXX does this let anything illegal in? */
1640 if (cUNOPo->op_first->op_type != OP_GV) { /* MJD 20011224 */
1641 yyerror(Perl_form(aTHX_ "Can't declare %s in %s",
1642 OP_DESC(o), PL_in_my == KEY_our ? "our" : "my"));
1644 GV *gv = cGVOPx_gv(cUNOPo->op_first);
1646 PL_in_my_stash = Nullhv;
1647 apply_attrs(GvSTASH(gv),
1648 (type == OP_RV2SV ? GvSV(gv) :
1649 type == OP_RV2AV ? (SV*)GvAV(gv) :
1650 type == OP_RV2HV ? (SV*)GvHV(gv) : (SV*)gv),
1653 o->op_private |= OPpOUR_INTRO;
1656 else if (type != OP_PADSV &&
1659 type != OP_PUSHMARK)
1661 yyerror(Perl_form(aTHX_ "Can't declare %s in \"%s\"",
1663 PL_in_my == KEY_our ? "our" : "my"));
1666 else if (attrs && type != OP_PUSHMARK) {
1670 PL_in_my_stash = Nullhv;
1672 /* check for C<my Dog $spot> when deciding package */
1673 stash = PAD_COMPNAME_TYPE(o->op_targ);
1675 stash = PL_curstash;
1676 apply_attrs_my(stash, o, attrs, imopsp);
1678 o->op_flags |= OPf_MOD;
1679 o->op_private |= OPpLVAL_INTRO;
1684 Perl_my_attrs(pTHX_ OP *o, OP *attrs)
1687 int maybe_scalar = 0;
1689 /* [perl #17376]: this appears to be premature, and results in code such as
1690 C< our(%x); > executing in list mode rather than void mode */
1692 if (o->op_flags & OPf_PARENS)
1701 o = my_kid(o, attrs, &rops);
1703 if (maybe_scalar && o->op_type == OP_PADSV) {
1704 o = scalar(append_list(OP_LIST, (LISTOP*)rops, (LISTOP*)o));
1705 o->op_private |= OPpLVAL_INTRO;
1708 o = append_list(OP_LIST, (LISTOP*)o, (LISTOP*)rops);
1711 PL_in_my_stash = Nullhv;
1716 Perl_my(pTHX_ OP *o)
1718 return my_attrs(o, Nullop);
1722 Perl_sawparens(pTHX_ OP *o)
1725 o->op_flags |= OPf_PARENS;
1730 Perl_bind_match(pTHX_ I32 type, OP *left, OP *right)
1734 if (ckWARN(WARN_MISC) &&
1735 (left->op_type == OP_RV2AV ||
1736 left->op_type == OP_RV2HV ||
1737 left->op_type == OP_PADAV ||
1738 left->op_type == OP_PADHV)) {
1739 char *desc = PL_op_desc[(right->op_type == OP_SUBST ||
1740 right->op_type == OP_TRANS)
1741 ? right->op_type : OP_MATCH];
1742 const char *sample = ((left->op_type == OP_RV2AV ||
1743 left->op_type == OP_PADAV)
1744 ? "@array" : "%hash");
1745 Perl_warner(aTHX_ packWARN(WARN_MISC),
1746 "Applying %s to %s will act on scalar(%s)",
1747 desc, sample, sample);
1750 if (right->op_type == OP_CONST &&
1751 cSVOPx(right)->op_private & OPpCONST_BARE &&
1752 cSVOPx(right)->op_private & OPpCONST_STRICT)
1754 no_bareword_allowed(right);
1757 if (!(right->op_flags & OPf_STACKED) &&
1758 (right->op_type == OP_MATCH ||
1759 right->op_type == OP_SUBST ||
1760 right->op_type == OP_TRANS)) {
1761 right->op_flags |= OPf_STACKED;
1762 if (right->op_type != OP_MATCH &&
1763 ! (right->op_type == OP_TRANS &&
1764 right->op_private & OPpTRANS_IDENTICAL))
1765 left = mod(left, right->op_type);
1766 if (right->op_type == OP_TRANS)
1767 o = newBINOP(OP_NULL, OPf_STACKED, scalar(left), right);
1769 o = prepend_elem(right->op_type, scalar(left), right);
1771 return newUNOP(OP_NOT, 0, scalar(o));
1775 return bind_match(type, left,
1776 pmruntime(newPMOP(OP_MATCH, 0), right, Nullop));
1780 Perl_invert(pTHX_ OP *o)
1784 /* XXX need to optimize away NOT NOT here? Or do we let optimizer do it? */
1785 return newUNOP(OP_NOT, OPf_SPECIAL, scalar(o));
1789 Perl_scope(pTHX_ OP *o)
1792 if (o->op_flags & OPf_PARENS || PERLDB_NOOPT || PL_tainting) {
1793 o = prepend_elem(OP_LINESEQ, newOP(OP_ENTER, 0), o);
1794 o->op_type = OP_LEAVE;
1795 o->op_ppaddr = PL_ppaddr[OP_LEAVE];
1797 else if (o->op_type == OP_LINESEQ) {
1799 o->op_type = OP_SCOPE;
1800 o->op_ppaddr = PL_ppaddr[OP_SCOPE];
1801 kid = ((LISTOP*)o)->op_first;
1802 if (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE)
1806 o = newLISTOP(OP_SCOPE, 0, o, Nullop);
1812 Perl_save_hints(pTHX)
1815 SAVESPTR(GvHV(PL_hintgv));
1816 GvHV(PL_hintgv) = newHVhv(GvHV(PL_hintgv));
1817 SAVEFREESV(GvHV(PL_hintgv));
1821 Perl_block_start(pTHX_ int full)
1823 int retval = PL_savestack_ix;
1824 /* If there were syntax errors, don't try to start a block */
1825 if (PL_yynerrs) return retval;
1827 pad_block_start(full);
1829 PL_hints &= ~HINT_BLOCK_SCOPE;
1830 SAVESPTR(PL_compiling.cop_warnings);
1831 if (! specialWARN(PL_compiling.cop_warnings)) {
1832 PL_compiling.cop_warnings = newSVsv(PL_compiling.cop_warnings) ;
1833 SAVEFREESV(PL_compiling.cop_warnings) ;
1835 SAVESPTR(PL_compiling.cop_io);
1836 if (! specialCopIO(PL_compiling.cop_io)) {
1837 PL_compiling.cop_io = newSVsv(PL_compiling.cop_io) ;
1838 SAVEFREESV(PL_compiling.cop_io) ;
1844 Perl_block_end(pTHX_ I32 floor, OP *seq)
1846 int needblockscope = PL_hints & HINT_BLOCK_SCOPE;
1847 OP* retval = scalarseq(seq);
1848 /* If there were syntax errors, don't try to close a block */
1849 if (PL_yynerrs) return retval;
1851 PL_compiling.op_private = (U8)(PL_hints & HINT_PRIVATE_MASK);
1853 PL_hints |= HINT_BLOCK_SCOPE; /* propagate out */
1861 #ifdef USE_5005THREADS
1862 OP *o = newOP(OP_THREADSV, 0);
1863 o->op_targ = find_threadsv("_");
1866 return newSVREF(newGVOP(OP_GV, 0, PL_defgv));
1867 #endif /* USE_5005THREADS */
1871 Perl_newPROG(pTHX_ OP *o)
1876 PL_eval_root = newUNOP(OP_LEAVEEVAL,
1877 ((PL_in_eval & EVAL_KEEPERR)
1878 ? OPf_SPECIAL : 0), o);
1879 PL_eval_start = linklist(PL_eval_root);
1880 PL_eval_root->op_private |= OPpREFCOUNTED;
1881 OpREFCNT_set(PL_eval_root, 1);
1882 PL_eval_root->op_next = 0;
1883 CALL_PEEP(PL_eval_start);
1886 if (o->op_type == OP_STUB) {
1887 PL_comppad_name = 0;
1891 PL_main_root = scope(sawparens(scalarvoid(o)));
1892 PL_curcop = &PL_compiling;
1893 PL_main_start = LINKLIST(PL_main_root);
1894 PL_main_root->op_private |= OPpREFCOUNTED;
1895 OpREFCNT_set(PL_main_root, 1);
1896 PL_main_root->op_next = 0;
1897 CALL_PEEP(PL_main_start);
1900 /* Register with debugger */
1902 CV *cv = get_cv("DB::postponed", FALSE);
1906 XPUSHs((SV*)CopFILEGV(&PL_compiling));
1908 call_sv((SV*)cv, G_DISCARD);
1915 Perl_localize(pTHX_ OP *o, I32 lex)
1917 if (o->op_flags & OPf_PARENS)
1918 /* [perl #17376]: this appears to be premature, and results in code such as
1919 C< our(%x); > executing in list mode rather than void mode */
1926 if (ckWARN(WARN_PARENTHESIS)
1927 && PL_bufptr > PL_oldbufptr && PL_bufptr[-1] == ',')
1929 char *s = PL_bufptr;
1932 /* some heuristics to detect a potential error */
1933 while (*s && (strchr(", \t\n", *s)
1934 || (strchr("@$%*", *s) && ++sigil) ))
1937 while (*s && (isALNUM(*s) || UTF8_IS_CONTINUED(*s)
1938 || strchr("@$%*, \t\n", *s)))
1941 if (*s == ';' || *s == '=')
1942 Perl_warner(aTHX_ packWARN(WARN_PARENTHESIS),
1943 "Parentheses missing around \"%s\" list",
1944 lex ? (PL_in_my == KEY_our ? "our" : "my")
1952 o = mod(o, OP_NULL); /* a bit kludgey */
1954 PL_in_my_stash = Nullhv;
1959 Perl_jmaybe(pTHX_ OP *o)
1961 if (o->op_type == OP_LIST) {
1963 #ifdef USE_5005THREADS
1964 o2 = newOP(OP_THREADSV, 0);
1965 o2->op_targ = find_threadsv(";");
1967 o2 = newSVREF(newGVOP(OP_GV, 0, gv_fetchpv(";", TRUE, SVt_PV))),
1968 #endif /* USE_5005THREADS */
1969 o = convert(OP_JOIN, 0, prepend_elem(OP_LIST, o2, o));
1975 Perl_fold_constants(pTHX_ register OP *o)
1978 I32 type = o->op_type;
1981 if (PL_opargs[type] & OA_RETSCALAR)
1983 if (PL_opargs[type] & OA_TARGET && !o->op_targ)
1984 o->op_targ = pad_alloc(type, SVs_PADTMP);
1986 /* integerize op, unless it happens to be C<-foo>.
1987 * XXX should pp_i_negate() do magic string negation instead? */
1988 if ((PL_opargs[type] & OA_OTHERINT) && (PL_hints & HINT_INTEGER)
1989 && !(type == OP_NEGATE && cUNOPo->op_first->op_type == OP_CONST
1990 && (cUNOPo->op_first->op_private & OPpCONST_BARE)))
1992 o->op_ppaddr = PL_ppaddr[type = ++(o->op_type)];
1995 if (!(PL_opargs[type] & OA_FOLDCONST))
2000 /* XXX might want a ck_negate() for this */
2001 cUNOPo->op_first->op_private &= ~OPpCONST_STRICT;
2013 /* XXX what about the numeric ops? */
2014 if (PL_hints & HINT_LOCALE)
2019 goto nope; /* Don't try to run w/ errors */
2021 for (curop = LINKLIST(o); curop != o; curop = LINKLIST(curop)) {
2022 if ((curop->op_type != OP_CONST ||
2023 (curop->op_private & OPpCONST_BARE)) &&
2024 curop->op_type != OP_LIST &&
2025 curop->op_type != OP_SCALAR &&
2026 curop->op_type != OP_NULL &&
2027 curop->op_type != OP_PUSHMARK)
2033 curop = LINKLIST(o);
2037 sv = *(PL_stack_sp--);
2038 if (o->op_targ && sv == PAD_SV(o->op_targ)) /* grab pad temp? */
2039 pad_swipe(o->op_targ, FALSE);
2040 else if (SvTEMP(sv)) { /* grab mortal temp? */
2041 (void)SvREFCNT_inc(sv);
2045 if (type == OP_RV2GV)
2046 return newGVOP(OP_GV, 0, (GV*)sv);
2047 return newSVOP(OP_CONST, 0, sv);
2054 Perl_gen_constant_list(pTHX_ register OP *o)
2057 I32 oldtmps_floor = PL_tmps_floor;
2061 return o; /* Don't attempt to run with errors */
2063 PL_op = curop = LINKLIST(o);
2070 PL_tmps_floor = oldtmps_floor;
2072 o->op_type = OP_RV2AV;
2073 o->op_ppaddr = PL_ppaddr[OP_RV2AV];
2074 o->op_flags &= ~OPf_REF; /* treat \(1..2) like an ordinary list */
2075 o->op_flags |= OPf_PARENS; /* and flatten \(1..2,3) */
2076 o->op_seq = 0; /* needs to be revisited in peep() */
2077 curop = ((UNOP*)o)->op_first;
2078 ((UNOP*)o)->op_first = newSVOP(OP_CONST, 0, SvREFCNT_inc(*PL_stack_sp--));
2085 Perl_convert(pTHX_ I32 type, I32 flags, OP *o)
2087 if (!o || o->op_type != OP_LIST)
2088 o = newLISTOP(OP_LIST, 0, o, Nullop);
2090 o->op_flags &= ~OPf_WANT;
2092 if (!(PL_opargs[type] & OA_MARK))
2093 op_null(cLISTOPo->op_first);
2095 o->op_type = (OPCODE)type;
2096 o->op_ppaddr = PL_ppaddr[type];
2097 o->op_flags |= flags;
2099 o = CHECKOP(type, o);
2100 if (o->op_type != type)
2103 return fold_constants(o);
2106 /* List constructors */
2109 Perl_append_elem(pTHX_ I32 type, OP *first, OP *last)
2117 if (first->op_type != type
2118 || (type == OP_LIST && (first->op_flags & OPf_PARENS)))
2120 return newLISTOP(type, 0, first, last);
2123 if (first->op_flags & OPf_KIDS)
2124 ((LISTOP*)first)->op_last->op_sibling = last;
2126 first->op_flags |= OPf_KIDS;
2127 ((LISTOP*)first)->op_first = last;
2129 ((LISTOP*)first)->op_last = last;
2134 Perl_append_list(pTHX_ I32 type, LISTOP *first, LISTOP *last)
2142 if (first->op_type != type)
2143 return prepend_elem(type, (OP*)first, (OP*)last);
2145 if (last->op_type != type)
2146 return append_elem(type, (OP*)first, (OP*)last);
2148 first->op_last->op_sibling = last->op_first;
2149 first->op_last = last->op_last;
2150 first->op_flags |= (last->op_flags & OPf_KIDS);
2158 Perl_prepend_elem(pTHX_ I32 type, OP *first, OP *last)
2166 if (last->op_type == type) {
2167 if (type == OP_LIST) { /* already a PUSHMARK there */
2168 first->op_sibling = ((LISTOP*)last)->op_first->op_sibling;
2169 ((LISTOP*)last)->op_first->op_sibling = first;
2170 if (!(first->op_flags & OPf_PARENS))
2171 last->op_flags &= ~OPf_PARENS;
2174 if (!(last->op_flags & OPf_KIDS)) {
2175 ((LISTOP*)last)->op_last = first;
2176 last->op_flags |= OPf_KIDS;
2178 first->op_sibling = ((LISTOP*)last)->op_first;
2179 ((LISTOP*)last)->op_first = first;
2181 last->op_flags |= OPf_KIDS;
2185 return newLISTOP(type, 0, first, last);
2191 Perl_newNULLLIST(pTHX)
2193 return newOP(OP_STUB, 0);
2197 Perl_force_list(pTHX_ OP *o)
2199 if (!o || o->op_type != OP_LIST)
2200 o = newLISTOP(OP_LIST, 0, o, Nullop);
2206 Perl_newLISTOP(pTHX_ I32 type, I32 flags, OP *first, OP *last)
2210 NewOp(1101, listop, 1, LISTOP);
2212 listop->op_type = (OPCODE)type;
2213 listop->op_ppaddr = PL_ppaddr[type];
2216 listop->op_flags = (U8)flags;
2220 else if (!first && last)
2223 first->op_sibling = last;
2224 listop->op_first = first;
2225 listop->op_last = last;
2226 if (type == OP_LIST) {
2228 pushop = newOP(OP_PUSHMARK, 0);
2229 pushop->op_sibling = first;
2230 listop->op_first = pushop;
2231 listop->op_flags |= OPf_KIDS;
2233 listop->op_last = pushop;
2236 return CHECKOP(type, listop);
2240 Perl_newOP(pTHX_ I32 type, I32 flags)
2243 NewOp(1101, o, 1, OP);
2244 o->op_type = (OPCODE)type;
2245 o->op_ppaddr = PL_ppaddr[type];
2246 o->op_flags = (U8)flags;
2249 o->op_private = (U8)(0 | (flags >> 8));
2250 if (PL_opargs[type] & OA_RETSCALAR)
2252 if (PL_opargs[type] & OA_TARGET)
2253 o->op_targ = pad_alloc(type, SVs_PADTMP);
2254 return CHECKOP(type, o);
2258 Perl_newUNOP(pTHX_ I32 type, I32 flags, OP *first)
2263 first = newOP(OP_STUB, 0);
2264 if (PL_opargs[type] & OA_MARK)
2265 first = force_list(first);
2267 NewOp(1101, unop, 1, UNOP);
2268 unop->op_type = (OPCODE)type;
2269 unop->op_ppaddr = PL_ppaddr[type];
2270 unop->op_first = first;
2271 unop->op_flags = flags | OPf_KIDS;
2272 unop->op_private = (U8)(1 | (flags >> 8));
2273 unop = (UNOP*) CHECKOP(type, unop);
2277 return fold_constants((OP *) unop);
2281 Perl_newBINOP(pTHX_ I32 type, I32 flags, OP *first, OP *last)
2284 NewOp(1101, binop, 1, BINOP);
2287 first = newOP(OP_NULL, 0);
2289 binop->op_type = (OPCODE)type;
2290 binop->op_ppaddr = PL_ppaddr[type];
2291 binop->op_first = first;
2292 binop->op_flags = flags | OPf_KIDS;
2295 binop->op_private = (U8)(1 | (flags >> 8));
2298 binop->op_private = (U8)(2 | (flags >> 8));
2299 first->op_sibling = last;
2302 binop = (BINOP*)CHECKOP(type, binop);
2303 if (binop->op_next || binop->op_type != (OPCODE)type)
2306 binop->op_last = binop->op_first->op_sibling;
2308 return fold_constants((OP *)binop);
2312 uvcompare(const void *a, const void *b)
2314 if (*((UV *)a) < (*(UV *)b))
2316 if (*((UV *)a) > (*(UV *)b))
2318 if (*((UV *)a+1) < (*(UV *)b+1))
2320 if (*((UV *)a+1) > (*(UV *)b+1))
2326 Perl_pmtrans(pTHX_ OP *o, OP *expr, OP *repl)
2328 SV *tstr = ((SVOP*)expr)->op_sv;
2329 SV *rstr = ((SVOP*)repl)->op_sv;
2332 U8 *t = (U8*)SvPV(tstr, tlen);
2333 U8 *r = (U8*)SvPV(rstr, rlen);
2340 register short *tbl;
2342 PL_hints |= HINT_BLOCK_SCOPE;
2343 complement = o->op_private & OPpTRANS_COMPLEMENT;
2344 del = o->op_private & OPpTRANS_DELETE;
2345 squash = o->op_private & OPpTRANS_SQUASH;
2348 o->op_private |= OPpTRANS_FROM_UTF;
2351 o->op_private |= OPpTRANS_TO_UTF;
2353 if (o->op_private & (OPpTRANS_FROM_UTF|OPpTRANS_TO_UTF)) {
2354 SV* listsv = newSVpvn("# comment\n",10);
2356 U8* tend = t + tlen;
2357 U8* rend = r + rlen;
2371 I32 from_utf = o->op_private & OPpTRANS_FROM_UTF;
2372 I32 to_utf = o->op_private & OPpTRANS_TO_UTF;
2378 tsave = t = bytes_to_utf8(t, &len);
2381 if (!to_utf && rlen) {
2383 rsave = r = bytes_to_utf8(r, &len);
2387 /* There are several snags with this code on EBCDIC:
2388 1. 0xFF is a legal UTF-EBCDIC byte (there are no illegal bytes).
2389 2. scan_const() in toke.c has encoded chars in native encoding which makes
2390 ranges at least in EBCDIC 0..255 range the bottom odd.
2394 U8 tmpbuf[UTF8_MAXLEN+1];
2397 New(1109, cp, 2*tlen, UV);
2399 transv = newSVpvn("",0);
2401 cp[2*i] = utf8n_to_uvuni(t, tend-t, &ulen, 0);
2403 if (t < tend && NATIVE_TO_UTF(*t) == 0xff) {
2405 cp[2*i+1] = utf8n_to_uvuni(t, tend-t, &ulen, 0);
2409 cp[2*i+1] = cp[2*i];
2413 qsort(cp, i, 2*sizeof(UV), uvcompare);
2414 for (j = 0; j < i; j++) {
2416 diff = val - nextmin;
2418 t = uvuni_to_utf8(tmpbuf,nextmin);
2419 sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf);
2421 U8 range_mark = UTF_TO_NATIVE(0xff);
2422 t = uvuni_to_utf8(tmpbuf, val - 1);
2423 sv_catpvn(transv, (char *)&range_mark, 1);
2424 sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf);
2431 t = uvuni_to_utf8(tmpbuf,nextmin);
2432 sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf);
2434 U8 range_mark = UTF_TO_NATIVE(0xff);
2435 sv_catpvn(transv, (char *)&range_mark, 1);
2437 t = uvuni_to_utf8_flags(tmpbuf, 0x7fffffff,
2438 UNICODE_ALLOW_SUPER);
2439 sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf);
2440 t = (U8*)SvPVX(transv);
2441 tlen = SvCUR(transv);
2445 else if (!rlen && !del) {
2446 r = t; rlen = tlen; rend = tend;
2449 if ((!rlen && !del) || t == r ||
2450 (tlen == rlen && memEQ((char *)t, (char *)r, tlen)))
2452 o->op_private |= OPpTRANS_IDENTICAL;
2456 while (t < tend || tfirst <= tlast) {
2457 /* see if we need more "t" chars */
2458 if (tfirst > tlast) {
2459 tfirst = (I32)utf8n_to_uvuni(t, tend - t, &ulen, 0);
2461 if (t < tend && NATIVE_TO_UTF(*t) == 0xff) { /* illegal utf8 val indicates range */
2463 tlast = (I32)utf8n_to_uvuni(t, tend - t, &ulen, 0);
2470 /* now see if we need more "r" chars */
2471 if (rfirst > rlast) {
2473 rfirst = (I32)utf8n_to_uvuni(r, rend - r, &ulen, 0);
2475 if (r < rend && NATIVE_TO_UTF(*r) == 0xff) { /* illegal utf8 val indicates range */
2477 rlast = (I32)utf8n_to_uvuni(r, rend - r, &ulen, 0);
2486 rfirst = rlast = 0xffffffff;
2490 /* now see which range will peter our first, if either. */
2491 tdiff = tlast - tfirst;
2492 rdiff = rlast - rfirst;
2499 if (rfirst == 0xffffffff) {
2500 diff = tdiff; /* oops, pretend rdiff is infinite */
2502 Perl_sv_catpvf(aTHX_ listsv, "%04lx\t%04lx\tXXXX\n",
2503 (long)tfirst, (long)tlast);
2505 Perl_sv_catpvf(aTHX_ listsv, "%04lx\t\tXXXX\n", (long)tfirst);
2509 Perl_sv_catpvf(aTHX_ listsv, "%04lx\t%04lx\t%04lx\n",
2510 (long)tfirst, (long)(tfirst + diff),
2513 Perl_sv_catpvf(aTHX_ listsv, "%04lx\t\t%04lx\n",
2514 (long)tfirst, (long)rfirst);
2516 if (rfirst + diff > max)
2517 max = rfirst + diff;
2519 grows = (tfirst < rfirst &&
2520 UNISKIP(tfirst) < UNISKIP(rfirst + diff));
2532 else if (max > 0xff)
2537 Safefree(cPVOPo->op_pv);
2538 cSVOPo->op_sv = (SV*)swash_init("utf8", "", listsv, bits, none);
2539 SvREFCNT_dec(listsv);
2541 SvREFCNT_dec(transv);
2543 if (!del && havefinal && rlen)
2544 (void)hv_store((HV*)SvRV((cSVOPo->op_sv)), "FINAL", 5,
2545 newSVuv((UV)final), 0);
2548 o->op_private |= OPpTRANS_GROWS;
2560 tbl = (short*)cPVOPo->op_pv;
2562 Zero(tbl, 256, short);
2563 for (i = 0; i < (I32)tlen; i++)
2565 for (i = 0, j = 0; i < 256; i++) {
2567 if (j >= (I32)rlen) {
2576 if (i < 128 && r[j] >= 128)
2586 o->op_private |= OPpTRANS_IDENTICAL;
2588 else if (j >= (I32)rlen)
2591 cPVOPo->op_pv = (char*)Renew(tbl, 0x101+rlen-j, short);
2592 tbl[0x100] = rlen - j;
2593 for (i=0; i < (I32)rlen - j; i++)
2594 tbl[0x101+i] = r[j+i];
2598 if (!rlen && !del) {
2601 o->op_private |= OPpTRANS_IDENTICAL;
2603 else if (!squash && rlen == tlen && memEQ((char*)t, (char*)r, tlen)) {
2604 o->op_private |= OPpTRANS_IDENTICAL;
2606 for (i = 0; i < 256; i++)
2608 for (i = 0, j = 0; i < (I32)tlen; i++,j++) {
2609 if (j >= (I32)rlen) {
2611 if (tbl[t[i]] == -1)
2617 if (tbl[t[i]] == -1) {
2618 if (t[i] < 128 && r[j] >= 128)
2625 o->op_private |= OPpTRANS_GROWS;
2633 Perl_newPMOP(pTHX_ I32 type, I32 flags)
2637 NewOp(1101, pmop, 1, PMOP);
2638 pmop->op_type = (OPCODE)type;
2639 pmop->op_ppaddr = PL_ppaddr[type];
2640 pmop->op_flags = (U8)flags;
2641 pmop->op_private = (U8)(0 | (flags >> 8));
2643 if (PL_hints & HINT_RE_TAINT)
2644 pmop->op_pmpermflags |= PMf_RETAINT;
2645 if (PL_hints & HINT_LOCALE)
2646 pmop->op_pmpermflags |= PMf_LOCALE;
2647 pmop->op_pmflags = pmop->op_pmpermflags;
2652 if(av_len((AV*) PL_regex_pad[0]) > -1) {
2653 repointer = av_pop((AV*)PL_regex_pad[0]);
2654 pmop->op_pmoffset = SvIV(repointer);
2655 SvREPADTMP_off(repointer);
2656 sv_setiv(repointer,0);
2658 repointer = newSViv(0);
2659 av_push(PL_regex_padav,SvREFCNT_inc(repointer));
2660 pmop->op_pmoffset = av_len(PL_regex_padav);
2661 PL_regex_pad = AvARRAY(PL_regex_padav);
2666 /* link into pm list */
2667 if (type != OP_TRANS && PL_curstash) {
2668 pmop->op_pmnext = HvPMROOT(PL_curstash);
2669 HvPMROOT(PL_curstash) = pmop;
2670 PmopSTASH_set(pmop,PL_curstash);
2673 return CHECKOP(type, pmop);
2677 Perl_pmruntime(pTHX_ OP *o, OP *expr, OP *repl)
2681 I32 repl_has_vars = 0;
2683 if (o->op_type == OP_TRANS)
2684 return pmtrans(o, expr, repl);
2686 PL_hints |= HINT_BLOCK_SCOPE;
2689 if (expr->op_type == OP_CONST) {
2691 SV *pat = ((SVOP*)expr)->op_sv;
2692 char *p = SvPV(pat, plen);
2693 if ((o->op_flags & OPf_SPECIAL) && strEQ(p, " ")) {
2694 sv_setpvn(pat, "\\s+", 3);
2695 p = SvPV(pat, plen);
2696 pm->op_pmflags |= PMf_SKIPWHITE;
2699 pm->op_pmdynflags |= PMdf_UTF8;
2700 PM_SETRE(pm, CALLREGCOMP(aTHX_ p, p + plen, pm));
2701 if (strEQ("\\s+", PM_GETRE(pm)->precomp))
2702 pm->op_pmflags |= PMf_WHITE;
2706 if (pm->op_pmflags & PMf_KEEP || !(PL_hints & HINT_RE_EVAL))
2707 expr = newUNOP((!(PL_hints & HINT_RE_EVAL)
2709 : OP_REGCMAYBE),0,expr);
2711 NewOp(1101, rcop, 1, LOGOP);
2712 rcop->op_type = OP_REGCOMP;
2713 rcop->op_ppaddr = PL_ppaddr[OP_REGCOMP];
2714 rcop->op_first = scalar(expr);
2715 rcop->op_flags |= ((PL_hints & HINT_RE_EVAL)
2716 ? (OPf_SPECIAL | OPf_KIDS)
2718 rcop->op_private = 1;
2721 /* establish postfix order */
2722 if (pm->op_pmflags & PMf_KEEP || !(PL_hints & HINT_RE_EVAL)) {
2724 rcop->op_next = expr;
2725 ((UNOP*)expr)->op_first->op_next = (OP*)rcop;
2728 rcop->op_next = LINKLIST(expr);
2729 expr->op_next = (OP*)rcop;
2732 prepend_elem(o->op_type, scalar((OP*)rcop), o);
2737 if (pm->op_pmflags & PMf_EVAL) {
2739 if (CopLINE(PL_curcop) < (line_t)PL_multi_end)
2740 CopLINE_set(PL_curcop, (line_t)PL_multi_end);
2742 #ifdef USE_5005THREADS
2743 else if (repl->op_type == OP_THREADSV
2744 && strchr("&`'123456789+",
2745 PL_threadsv_names[repl->op_targ]))
2749 #endif /* USE_5005THREADS */
2750 else if (repl->op_type == OP_CONST)
2754 for (curop = LINKLIST(repl); curop!=repl; curop = LINKLIST(curop)) {
2755 if (PL_opargs[curop->op_type] & OA_DANGEROUS) {
2756 #ifdef USE_5005THREADS
2757 if (curop->op_type == OP_THREADSV) {
2759 if (strchr("&`'123456789+", curop->op_private))
2763 if (curop->op_type == OP_GV) {
2764 GV *gv = cGVOPx_gv(curop);
2766 if (strchr("&`'123456789+-\016\022", *GvENAME(gv)))
2769 #endif /* USE_5005THREADS */
2770 else if (curop->op_type == OP_RV2CV)
2772 else if (curop->op_type == OP_RV2SV ||
2773 curop->op_type == OP_RV2AV ||
2774 curop->op_type == OP_RV2HV ||
2775 curop->op_type == OP_RV2GV) {
2776 if (lastop && lastop->op_type != OP_GV) /*funny deref?*/
2779 else if (curop->op_type == OP_PADSV ||
2780 curop->op_type == OP_PADAV ||
2781 curop->op_type == OP_PADHV ||
2782 curop->op_type == OP_PADANY) {
2785 else if (curop->op_type == OP_PUSHRE)
2786 ; /* Okay here, dangerous in newASSIGNOP */
2796 || PM_GETRE(pm)->reganch & ROPT_EVAL_SEEN))) {
2797 pm->op_pmflags |= PMf_CONST; /* const for long enough */
2798 pm->op_pmpermflags |= PMf_CONST; /* const for long enough */
2799 prepend_elem(o->op_type, scalar(repl), o);
2802 if (curop == repl && !PM_GETRE(pm)) { /* Has variables. */
2803 pm->op_pmflags |= PMf_MAYBE_CONST;
2804 pm->op_pmpermflags |= PMf_MAYBE_CONST;
2806 NewOp(1101, rcop, 1, LOGOP);
2807 rcop->op_type = OP_SUBSTCONT;
2808 rcop->op_ppaddr = PL_ppaddr[OP_SUBSTCONT];
2809 rcop->op_first = scalar(repl);
2810 rcop->op_flags |= OPf_KIDS;
2811 rcop->op_private = 1;
2814 /* establish postfix order */
2815 rcop->op_next = LINKLIST(repl);
2816 repl->op_next = (OP*)rcop;
2818 pm->op_pmreplroot = scalar((OP*)rcop);
2819 pm->op_pmreplstart = LINKLIST(rcop);
2828 Perl_newSVOP(pTHX_ I32 type, I32 flags, SV *sv)
2831 NewOp(1101, svop, 1, SVOP);
2832 svop->op_type = (OPCODE)type;
2833 svop->op_ppaddr = PL_ppaddr[type];
2835 svop->op_next = (OP*)svop;
2836 svop->op_flags = (U8)flags;
2837 if (PL_opargs[type] & OA_RETSCALAR)
2839 if (PL_opargs[type] & OA_TARGET)
2840 svop->op_targ = pad_alloc(type, SVs_PADTMP);
2841 return CHECKOP(type, svop);
2845 Perl_newPADOP(pTHX_ I32 type, I32 flags, SV *sv)
2848 NewOp(1101, padop, 1, PADOP);
2849 padop->op_type = (OPCODE)type;
2850 padop->op_ppaddr = PL_ppaddr[type];
2851 padop->op_padix = pad_alloc(type, SVs_PADTMP);
2852 SvREFCNT_dec(PAD_SVl(padop->op_padix));
2853 PAD_SETSV(padop->op_padix, sv);
2856 padop->op_next = (OP*)padop;
2857 padop->op_flags = (U8)flags;
2858 if (PL_opargs[type] & OA_RETSCALAR)
2860 if (PL_opargs[type] & OA_TARGET)
2861 padop->op_targ = pad_alloc(type, SVs_PADTMP);
2862 return CHECKOP(type, padop);
2866 Perl_newGVOP(pTHX_ I32 type, I32 flags, GV *gv)
2871 return newPADOP(type, flags, SvREFCNT_inc(gv));
2873 return newSVOP(type, flags, SvREFCNT_inc(gv));
2878 Perl_newPVOP(pTHX_ I32 type, I32 flags, char *pv)
2881 NewOp(1101, pvop, 1, PVOP);
2882 pvop->op_type = (OPCODE)type;
2883 pvop->op_ppaddr = PL_ppaddr[type];
2885 pvop->op_next = (OP*)pvop;
2886 pvop->op_flags = (U8)flags;
2887 if (PL_opargs[type] & OA_RETSCALAR)
2889 if (PL_opargs[type] & OA_TARGET)
2890 pvop->op_targ = pad_alloc(type, SVs_PADTMP);
2891 return CHECKOP(type, pvop);
2895 Perl_package(pTHX_ OP *o)
2899 save_hptr(&PL_curstash);
2900 save_item(PL_curstname);
2905 name = SvPV(sv, len);
2906 PL_curstash = gv_stashpvn(name,len,TRUE);
2907 sv_setpvn(PL_curstname, name, len);
2911 deprecate("\"package\" with no arguments");
2912 sv_setpv(PL_curstname,"<none>");
2913 PL_curstash = Nullhv;
2915 PL_hints |= HINT_BLOCK_SCOPE;
2916 PL_copline = NOLINE;
2921 Perl_utilize(pTHX_ int aver, I32 floor, OP *version, OP *idop, OP *arg)
2927 if (idop->op_type != OP_CONST)
2928 Perl_croak(aTHX_ "Module name must be constant");
2932 if (version != Nullop) {
2933 SV *vesv = ((SVOP*)version)->op_sv;
2935 if (arg == Nullop && !SvNIOKp(vesv)) {
2942 if (version->op_type != OP_CONST || !SvNIOKp(vesv))
2943 Perl_croak(aTHX_ "Version number must be constant number");
2945 /* Make copy of idop so we don't free it twice */
2946 pack = newSVOP(OP_CONST, 0, newSVsv(((SVOP*)idop)->op_sv));
2948 /* Fake up a method call to VERSION */
2949 meth = newSVpvn("VERSION",7);
2950 sv_upgrade(meth, SVt_PVIV);
2951 (void)SvIOK_on(meth);
2952 PERL_HASH(SvUVX(meth), SvPVX(meth), SvCUR(meth));
2953 veop = convert(OP_ENTERSUB, OPf_STACKED|OPf_SPECIAL,
2954 append_elem(OP_LIST,
2955 prepend_elem(OP_LIST, pack, list(version)),
2956 newSVOP(OP_METHOD_NAMED, 0, meth)));
2960 /* Fake up an import/unimport */
2961 if (arg && arg->op_type == OP_STUB)
2962 imop = arg; /* no import on explicit () */
2963 else if (SvNIOKp(((SVOP*)idop)->op_sv)) {
2964 imop = Nullop; /* use 5.0; */
2969 /* Make copy of idop so we don't free it twice */
2970 pack = newSVOP(OP_CONST, 0, newSVsv(((SVOP*)idop)->op_sv));
2972 /* Fake up a method call to import/unimport */
2973 meth = aver ? newSVpvn("import",6) : newSVpvn("unimport", 8);
2974 (void)SvUPGRADE(meth, SVt_PVIV);
2975 (void)SvIOK_on(meth);
2976 PERL_HASH(SvUVX(meth), SvPVX(meth), SvCUR(meth));
2977 imop = convert(OP_ENTERSUB, OPf_STACKED|OPf_SPECIAL,
2978 append_elem(OP_LIST,
2979 prepend_elem(OP_LIST, pack, list(arg)),
2980 newSVOP(OP_METHOD_NAMED, 0, meth)));
2983 /* Fake up the BEGIN {}, which does its thing immediately. */
2985 newSVOP(OP_CONST, 0, newSVpvn("BEGIN", 5)),
2988 append_elem(OP_LINESEQ,
2989 append_elem(OP_LINESEQ,
2990 newSTATEOP(0, Nullch, newUNOP(OP_REQUIRE, 0, idop)),
2991 newSTATEOP(0, Nullch, veop)),
2992 newSTATEOP(0, Nullch, imop) ));
2994 /* The "did you use incorrect case?" warning used to be here.
2995 * The problem is that on case-insensitive filesystems one
2996 * might get false positives for "use" (and "require"):
2997 * "use Strict" or "require CARP" will work. This causes
2998 * portability problems for the script: in case-strict
2999 * filesystems the script will stop working.
3001 * The "incorrect case" warning checked whether "use Foo"
3002 * imported "Foo" to your namespace, but that is wrong, too:
3003 * there is no requirement nor promise in the language that
3004 * a Foo.pm should or would contain anything in package "Foo".
3006 * There is very little Configure-wise that can be done, either:
3007 * the case-sensitivity of the build filesystem of Perl does not
3008 * help in guessing the case-sensitivity of the runtime environment.
3011 PL_hints |= HINT_BLOCK_SCOPE;
3012 PL_copline = NOLINE;
3014 PL_cop_seqmax++; /* Purely for B::*'s benefit */
3018 =head1 Embedding Functions
3020 =for apidoc load_module
3022 Loads the module whose name is pointed to by the string part of name.
3023 Note that the actual module name, not its filename, should be given.
3024 Eg, "Foo::Bar" instead of "Foo/Bar.pm". flags can be any of
3025 PERL_LOADMOD_DENY, PERL_LOADMOD_NOIMPORT, or PERL_LOADMOD_IMPORT_OPS
3026 (or 0 for no flags). ver, if specified, provides version semantics
3027 similar to C<use Foo::Bar VERSION>. The optional trailing SV*
3028 arguments can be used to specify arguments to the module's import()
3029 method, similar to C<use Foo::Bar VERSION LIST>.
3034 Perl_load_module(pTHX_ U32 flags, SV *name, SV *ver, ...)
3037 va_start(args, ver);
3038 vload_module(flags, name, ver, &args);
3042 #ifdef PERL_IMPLICIT_CONTEXT
3044 Perl_load_module_nocontext(U32 flags, SV *name, SV *ver, ...)
3048 va_start(args, ver);
3049 vload_module(flags, name, ver, &args);
3055 Perl_vload_module(pTHX_ U32 flags, SV *name, SV *ver, va_list *args)
3057 OP *modname, *veop, *imop;
3059 modname = newSVOP(OP_CONST, 0, name);
3060 modname->op_private |= OPpCONST_BARE;
3062 veop = newSVOP(OP_CONST, 0, ver);
3066 if (flags & PERL_LOADMOD_NOIMPORT) {
3067 imop = sawparens(newNULLLIST());
3069 else if (flags & PERL_LOADMOD_IMPORT_OPS) {
3070 imop = va_arg(*args, OP*);
3075 sv = va_arg(*args, SV*);
3077 imop = append_elem(OP_LIST, imop, newSVOP(OP_CONST, 0, sv));
3078 sv = va_arg(*args, SV*);
3082 line_t ocopline = PL_copline;
3083 COP *ocurcop = PL_curcop;
3084 int oexpect = PL_expect;
3086 utilize(!(flags & PERL_LOADMOD_DENY), start_subparse(FALSE, 0),
3087 veop, modname, imop);
3088 PL_expect = oexpect;
3089 PL_copline = ocopline;
3090 PL_curcop = ocurcop;
3095 Perl_dofile(pTHX_ OP *term)
3100 gv = gv_fetchpv("do", FALSE, SVt_PVCV);
3101 if (!(gv && GvCVu(gv) && GvIMPORTED_CV(gv)))
3102 gv = gv_fetchpv("CORE::GLOBAL::do", FALSE, SVt_PVCV);
3104 if (gv && GvCVu(gv) && GvIMPORTED_CV(gv)) {
3105 doop = ck_subr(newUNOP(OP_ENTERSUB, OPf_STACKED,
3106 append_elem(OP_LIST, term,
3107 scalar(newUNOP(OP_RV2CV, 0,
3112 doop = newUNOP(OP_DOFILE, 0, scalar(term));
3118 Perl_newSLICEOP(pTHX_ I32 flags, OP *subscript, OP *listval)
3120 return newBINOP(OP_LSLICE, flags,
3121 list(force_list(subscript)),
3122 list(force_list(listval)) );
3126 S_list_assignment(pTHX_ register OP *o)
3131 if (o->op_type == OP_NULL && o->op_flags & OPf_KIDS)
3132 o = cUNOPo->op_first;
3134 if (o->op_type == OP_COND_EXPR) {
3135 I32 t = list_assignment(cLOGOPo->op_first->op_sibling);
3136 I32 f = list_assignment(cLOGOPo->op_first->op_sibling->op_sibling);
3141 yyerror("Assignment to both a list and a scalar");
3145 if (o->op_type == OP_LIST &&
3146 (o->op_flags & OPf_WANT) == OPf_WANT_SCALAR &&
3147 o->op_private & OPpLVAL_INTRO)
3150 if (o->op_type == OP_LIST || o->op_flags & OPf_PARENS ||
3151 o->op_type == OP_RV2AV || o->op_type == OP_RV2HV ||
3152 o->op_type == OP_ASLICE || o->op_type == OP_HSLICE)
3155 if (o->op_type == OP_PADAV || o->op_type == OP_PADHV)
3158 if (o->op_type == OP_RV2SV)
3165 Perl_newASSIGNOP(pTHX_ I32 flags, OP *left, I32 optype, OP *right)
3170 if (optype == OP_ANDASSIGN || optype == OP_ORASSIGN) {
3171 return newLOGOP(optype, 0,
3172 mod(scalar(left), optype),
3173 newUNOP(OP_SASSIGN, 0, scalar(right)));
3176 return newBINOP(optype, OPf_STACKED,
3177 mod(scalar(left), optype), scalar(right));
3181 if (list_assignment(left)) {
3185 PL_eval_start = right; /* Grandfathering $[ assignment here. Bletch.*/
3186 left = mod(left, OP_AASSIGN);
3194 curop = list(force_list(left));
3195 o = newBINOP(OP_AASSIGN, flags, list(force_list(right)), curop);
3196 o->op_private = (U8)(0 | (flags >> 8));
3197 for (curop = ((LISTOP*)curop)->op_first;
3198 curop; curop = curop->op_sibling)
3200 if (curop->op_type == OP_RV2HV &&
3201 ((UNOP*)curop)->op_first->op_type != OP_GV) {
3202 o->op_private |= OPpASSIGN_HASH;
3207 /* PL_generation sorcery:
3208 * an assignment like ($a,$b) = ($c,$d) is easier than
3209 * ($a,$b) = ($c,$a), since there is no need for temporary vars.
3210 * To detect whether there are common vars, the global var
3211 * PL_generation is incremented for each assign op we compile.
3212 * Then, while compiling the assign op, we run through all the
3213 * variables on both sides of the assignment, setting a spare slot
3214 * in each of them to PL_generation. If any of them already have
3215 * that value, we know we've got commonality. We could use a
3216 * single bit marker, but then we'd have to make 2 passes, first
3217 * to clear the flag, then to test and set it. To find somewhere
3218 * to store these values, evil chicanery is done with SvCUR().
3221 if (!(left->op_private & OPpLVAL_INTRO)) {
3224 for (curop = LINKLIST(o); curop != o; curop = LINKLIST(curop)) {
3225 if (PL_opargs[curop->op_type] & OA_DANGEROUS) {
3226 if (curop->op_type == OP_GV) {
3227 GV *gv = cGVOPx_gv(curop);
3228 if (gv == PL_defgv || (int)SvCUR(gv) == PL_generation)
3230 SvCUR(gv) = PL_generation;
3232 else if (curop->op_type == OP_PADSV ||
3233 curop->op_type == OP_PADAV ||
3234 curop->op_type == OP_PADHV ||
3235 curop->op_type == OP_PADANY)
3237 if ((int)PAD_COMPNAME_GEN(curop->op_targ)
3240 PAD_COMPNAME_GEN(curop->op_targ)
3244 else if (curop->op_type == OP_RV2CV)
3246 else if (curop->op_type == OP_RV2SV ||
3247 curop->op_type == OP_RV2AV ||
3248 curop->op_type == OP_RV2HV ||
3249 curop->op_type == OP_RV2GV) {
3250 if (lastop->op_type != OP_GV) /* funny deref? */
3253 else if (curop->op_type == OP_PUSHRE) {
3254 if (((PMOP*)curop)->op_pmreplroot) {
3256 GV *gv = (GV*)PAD_SVl(INT2PTR(PADOFFSET,
3257 ((PMOP*)curop)->op_pmreplroot));
3259 GV *gv = (GV*)((PMOP*)curop)->op_pmreplroot;
3261 if (gv == PL_defgv || (int)SvCUR(gv) == PL_generation)
3263 SvCUR(gv) = PL_generation;
3272 o->op_private |= OPpASSIGN_COMMON;
3274 if (right && right->op_type == OP_SPLIT) {
3276 if ((tmpop = ((LISTOP*)right)->op_first) &&
3277 tmpop->op_type == OP_PUSHRE)
3279 PMOP *pm = (PMOP*)tmpop;
3280 if (left->op_type == OP_RV2AV &&
3281 !(left->op_private & OPpLVAL_INTRO) &&
3282 !(o->op_private & OPpASSIGN_COMMON) )
3284 tmpop = ((UNOP*)left)->op_first;
3285 if (tmpop->op_type == OP_GV && !pm->op_pmreplroot) {
3287 pm->op_pmreplroot = INT2PTR(OP*, cPADOPx(tmpop)->op_padix);
3288 cPADOPx(tmpop)->op_padix = 0; /* steal it */
3290 pm->op_pmreplroot = (OP*)cSVOPx(tmpop)->op_sv;
3291 cSVOPx(tmpop)->op_sv = Nullsv; /* steal it */
3293 pm->op_pmflags |= PMf_ONCE;
3294 tmpop = cUNOPo->op_first; /* to list (nulled) */
3295 tmpop = ((UNOP*)tmpop)->op_first; /* to pushmark */
3296 tmpop->op_sibling = Nullop; /* don't free split */
3297 right->op_next = tmpop->op_next; /* fix starting loc */
3298 op_free(o); /* blow off assign */
3299 right->op_flags &= ~OPf_WANT;
3300 /* "I don't know and I don't care." */
3305 if (PL_modcount < RETURN_UNLIMITED_NUMBER &&
3306 ((LISTOP*)right)->op_last->op_type == OP_CONST)
3308 SV *sv = ((SVOP*)((LISTOP*)right)->op_last)->op_sv;
3310 sv_setiv(sv, PL_modcount+1);
3318 right = newOP(OP_UNDEF, 0);
3319 if (right->op_type == OP_READLINE) {
3320 right->op_flags |= OPf_STACKED;
3321 return newBINOP(OP_NULL, flags, mod(scalar(left), OP_SASSIGN), scalar(right));
3324 PL_eval_start = right; /* Grandfathering $[ assignment here. Bletch.*/
3325 o = newBINOP(OP_SASSIGN, flags,
3326 scalar(right), mod(scalar(left), OP_SASSIGN) );
3338 Perl_newSTATEOP(pTHX_ I32 flags, char *label, OP *o)
3340 U32 seq = intro_my();
3343 NewOp(1101, cop, 1, COP);
3344 if (PERLDB_LINE && CopLINE(PL_curcop) && PL_curstash != PL_debstash) {
3345 cop->op_type = OP_DBSTATE;
3346 cop->op_ppaddr = PL_ppaddr[ OP_DBSTATE ];
3349 cop->op_type = OP_NEXTSTATE;
3350 cop->op_ppaddr = PL_ppaddr[ OP_NEXTSTATE ];
3352 cop->op_flags = (U8)flags;
3353 cop->op_private = (U8)(PL_hints & HINT_PRIVATE_MASK);
3355 cop->op_private |= NATIVE_HINTS;
3357 PL_compiling.op_private = cop->op_private;
3358 cop->op_next = (OP*)cop;
3361 cop->cop_label = label;
3362 PL_hints |= HINT_BLOCK_SCOPE;
3365 cop->cop_arybase = PL_curcop->cop_arybase;
3366 if (specialWARN(PL_curcop->cop_warnings))
3367 cop->cop_warnings = PL_curcop->cop_warnings ;
3369 cop->cop_warnings = newSVsv(PL_curcop->cop_warnings) ;
3370 if (specialCopIO(PL_curcop->cop_io))
3371 cop->cop_io = PL_curcop->cop_io;
3373 cop->cop_io = newSVsv(PL_curcop->cop_io) ;
3376 if (PL_copline == NOLINE)
3377 CopLINE_set(cop, CopLINE(PL_curcop));
3379 CopLINE_set(cop, PL_copline);
3380 PL_copline = NOLINE;
3383 CopFILE_set(cop, CopFILE(PL_curcop)); /* XXX share in a pvtable? */
3385 CopFILEGV_set(cop, CopFILEGV(PL_curcop));
3387 CopSTASH_set(cop, PL_curstash);
3389 if (PERLDB_LINE && PL_curstash != PL_debstash) {
3390 SV **svp = av_fetch(CopFILEAV(PL_curcop), (I32)CopLINE(cop), FALSE);
3391 if (svp && *svp != &PL_sv_undef ) {
3392 (void)SvIOK_on(*svp);
3393 SvIVX(*svp) = PTR2IV(cop);
3397 return prepend_elem(OP_LINESEQ, (OP*)cop, o);
3402 Perl_newLOGOP(pTHX_ I32 type, I32 flags, OP *first, OP *other)
3404 return new_logop(type, flags, &first, &other);
3408 S_new_logop(pTHX_ I32 type, I32 flags, OP** firstp, OP** otherp)
3412 OP *first = *firstp;
3413 OP *other = *otherp;
3415 if (type == OP_XOR) /* Not short circuit, but here by precedence. */
3416 return newBINOP(type, flags, scalar(first), scalar(other));
3418 scalarboolean(first);
3419 /* optimize "!a && b" to "a || b", and "!a || b" to "a && b" */
3420 if (first->op_type == OP_NOT && (first->op_flags & OPf_SPECIAL)) {
3421 if (type == OP_AND || type == OP_OR) {
3427 first = *firstp = cUNOPo->op_first;
3429 first->op_next = o->op_next;
3430 cUNOPo->op_first = Nullop;
3434 if (first->op_type == OP_CONST) {
3435 if (ckWARN(WARN_BAREWORD) && (first->op_private & OPpCONST_BARE)) {
3436 if (first->op_private & OPpCONST_STRICT)
3437 no_bareword_allowed(first);
3439 Perl_warner(aTHX_ packWARN(WARN_BAREWORD), "Bareword found in conditional");
3441 if ((type == OP_AND) == (SvTRUE(((SVOP*)first)->op_sv))) {
3452 else if (ckWARN(WARN_MISC) && (first->op_flags & OPf_KIDS)) {
3453 OP *k1 = ((UNOP*)first)->op_first;
3454 OP *k2 = k1->op_sibling;
3456 switch (first->op_type)
3459 if (k2 && k2->op_type == OP_READLINE
3460 && (k2->op_flags & OPf_STACKED)
3461 && ((k1->op_flags & OPf_WANT) == OPf_WANT_SCALAR))
3463 warnop = k2->op_type;
3468 if (k1->op_type == OP_READDIR
3469 || k1->op_type == OP_GLOB
3470 || (k1->op_type == OP_NULL && k1->op_targ == OP_GLOB)
3471 || k1->op_type == OP_EACH)
3473 warnop = ((k1->op_type == OP_NULL)
3474 ? (OPCODE)k1->op_targ : k1->op_type);
3479 line_t oldline = CopLINE(PL_curcop);
3480 CopLINE_set(PL_curcop, PL_copline);
3481 Perl_warner(aTHX_ packWARN(WARN_MISC),
3482 "Value of %s%s can be \"0\"; test with defined()",
3484 ((warnop == OP_READLINE || warnop == OP_GLOB)
3485 ? " construct" : "() operator"));
3486 CopLINE_set(PL_curcop, oldline);
3493 if (type == OP_ANDASSIGN || type == OP_ORASSIGN)
3494 other->op_private |= OPpASSIGN_BACKWARDS; /* other is an OP_SASSIGN */
3496 NewOp(1101, logop, 1, LOGOP);
3498 logop->op_type = (OPCODE)type;
3499 logop->op_ppaddr = PL_ppaddr[type];
3500 logop->op_first = first;
3501 logop->op_flags = flags | OPf_KIDS;
3502 logop->op_other = LINKLIST(other);
3503 logop->op_private = (U8)(1 | (flags >> 8));
3505 /* establish postfix order */
3506 logop->op_next = LINKLIST(first);
3507 first->op_next = (OP*)logop;
3508 first->op_sibling = other;
3510 CHECKOP(type,logop);
3512 o = newUNOP(OP_NULL, 0, (OP*)logop);
3519 Perl_newCONDOP(pTHX_ I32 flags, OP *first, OP *trueop, OP *falseop)
3526 return newLOGOP(OP_AND, 0, first, trueop);
3528 return newLOGOP(OP_OR, 0, first, falseop);
3530 scalarboolean(first);
3531 if (first->op_type == OP_CONST) {
3532 if (first->op_private & OPpCONST_BARE &&
3533 first->op_private & OPpCONST_STRICT) {
3534 no_bareword_allowed(first);
3536 if (SvTRUE(((SVOP*)first)->op_sv)) {
3547 NewOp(1101, logop, 1, LOGOP);
3548 logop->op_type = OP_COND_EXPR;
3549 logop->op_ppaddr = PL_ppaddr[OP_COND_EXPR];
3550 logop->op_first = first;
3551 logop->op_flags = flags | OPf_KIDS;
3552 logop->op_private = (U8)(1 | (flags >> 8));
3553 logop->op_other = LINKLIST(trueop);
3554 logop->op_next = LINKLIST(falseop);
3556 CHECKOP(OP_COND_EXPR, /* that's logop->op_type */
3559 /* establish postfix order */
3560 start = LINKLIST(first);
3561 first->op_next = (OP*)logop;
3563 first->op_sibling = trueop;
3564 trueop->op_sibling = falseop;
3565 o = newUNOP(OP_NULL, 0, (OP*)logop);
3567 trueop->op_next = falseop->op_next = o;
3574 Perl_newRANGE(pTHX_ I32 flags, OP *left, OP *right)
3582 NewOp(1101, range, 1, LOGOP);
3584 range->op_type = OP_RANGE;
3585 range->op_ppaddr = PL_ppaddr[OP_RANGE];
3586 range->op_first = left;
3587 range->op_flags = OPf_KIDS;
3588 leftstart = LINKLIST(left);
3589 range->op_other = LINKLIST(right);
3590 range->op_private = (U8)(1 | (flags >> 8));
3592 left->op_sibling = right;
3594 range->op_next = (OP*)range;
3595 flip = newUNOP(OP_FLIP, flags, (OP*)range);
3596 flop = newUNOP(OP_FLOP, 0, flip);
3597 o = newUNOP(OP_NULL, 0, flop);
3599 range->op_next = leftstart;
3601 left->op_next = flip;
3602 right->op_next = flop;
3604 range->op_targ = pad_alloc(OP_RANGE, SVs_PADMY);
3605 sv_upgrade(PAD_SV(range->op_targ), SVt_PVNV);
3606 flip->op_targ = pad_alloc(OP_RANGE, SVs_PADMY);
3607 sv_upgrade(PAD_SV(flip->op_targ), SVt_PVNV);
3609 flip->op_private = left->op_type == OP_CONST ? OPpFLIP_LINENUM : 0;
3610 flop->op_private = right->op_type == OP_CONST ? OPpFLIP_LINENUM : 0;
3613 if (!flip->op_private || !flop->op_private)
3614 linklist(o); /* blow off optimizer unless constant */
3620 Perl_newLOOPOP(pTHX_ I32 flags, I32 debuggable, OP *expr, OP *block)
3624 int once = block && block->op_flags & OPf_SPECIAL &&
3625 (block->op_type == OP_ENTERSUB || block->op_type == OP_NULL);
3628 if (once && expr->op_type == OP_CONST && !SvTRUE(((SVOP*)expr)->op_sv))
3629 return block; /* do {} while 0 does once */
3630 if (expr->op_type == OP_READLINE || expr->op_type == OP_GLOB
3631 || (expr->op_type == OP_NULL && expr->op_targ == OP_GLOB)) {
3632 expr = newUNOP(OP_DEFINED, 0,
3633 newASSIGNOP(0, newDEFSVOP(), 0, expr) );
3634 } else if (expr->op_flags & OPf_KIDS) {
3635 OP *k1 = ((UNOP*)expr)->op_first;
3636 OP *k2 = (k1) ? k1->op_sibling : NULL;
3637 switch (expr->op_type) {
3639 if (k2 && k2->op_type == OP_READLINE
3640 && (k2->op_flags & OPf_STACKED)
3641 && ((k1->op_flags & OPf_WANT) == OPf_WANT_SCALAR))
3642 expr = newUNOP(OP_DEFINED, 0, expr);
3646 if (k1->op_type == OP_READDIR
3647 || k1->op_type == OP_GLOB
3648 || (k1->op_type == OP_NULL && k1->op_targ == OP_GLOB)
3649 || k1->op_type == OP_EACH)
3650 expr = newUNOP(OP_DEFINED, 0, expr);
3656 listop = append_elem(OP_LINESEQ, block, newOP(OP_UNSTACK, 0));
3657 o = new_logop(OP_AND, 0, &expr, &listop);
3660 ((LISTOP*)listop)->op_last->op_next = LINKLIST(o);
3662 if (once && o != listop)
3663 o->op_next = ((LOGOP*)cUNOPo->op_first)->op_other;
3666 o = newUNOP(OP_NULL, 0, o); /* or do {} while 1 loses outer block */
3668 o->op_flags |= flags;
3670 o->op_flags |= OPf_SPECIAL; /* suppress POPBLOCK curpm restoration*/
3675 Perl_newWHILEOP(pTHX_ I32 flags, I32 debuggable, LOOP *loop, I32 whileline, OP *expr, OP *block, OP *cont)
3683 if (expr && (expr->op_type == OP_READLINE || expr->op_type == OP_GLOB
3684 || (expr->op_type == OP_NULL && expr->op_targ == OP_GLOB))) {
3685 expr = newUNOP(OP_DEFINED, 0,
3686 newASSIGNOP(0, newDEFSVOP(), 0, expr) );
3687 } else if (expr && (expr->op_flags & OPf_KIDS)) {
3688 OP *k1 = ((UNOP*)expr)->op_first;
3689 OP *k2 = (k1) ? k1->op_sibling : NULL;
3690 switch (expr->op_type) {
3692 if (k2 && k2->op_type == OP_READLINE
3693 && (k2->op_flags & OPf_STACKED)
3694 && ((k1->op_flags & OPf_WANT) == OPf_WANT_SCALAR))
3695 expr = newUNOP(OP_DEFINED, 0, expr);
3699 if (k1->op_type == OP_READDIR
3700 || k1->op_type == OP_GLOB
3701 || (k1->op_type == OP_NULL && k1->op_targ == OP_GLOB)
3702 || k1->op_type == OP_EACH)
3703 expr = newUNOP(OP_DEFINED, 0, expr);
3709 block = newOP(OP_NULL, 0);
3711 block = scope(block);
3715 next = LINKLIST(cont);
3718 OP *unstack = newOP(OP_UNSTACK, 0);
3721 cont = append_elem(OP_LINESEQ, cont, unstack);
3724 listop = append_list(OP_LINESEQ, (LISTOP*)block, (LISTOP*)cont);
3725 redo = LINKLIST(listop);
3728 PL_copline = (line_t)whileline;
3730 o = new_logop(OP_AND, 0, &expr, &listop);
3731 if (o == expr && o->op_type == OP_CONST && !SvTRUE(cSVOPo->op_sv)) {
3732 op_free(expr); /* oops, it's a while (0) */
3734 return Nullop; /* listop already freed by new_logop */
3737 ((LISTOP*)listop)->op_last->op_next =
3738 (o == listop ? redo : LINKLIST(o));
3744 NewOp(1101,loop,1,LOOP);
3745 loop->op_type = OP_ENTERLOOP;
3746 loop->op_ppaddr = PL_ppaddr[OP_ENTERLOOP];
3747 loop->op_private = 0;
3748 loop->op_next = (OP*)loop;
3751 o = newBINOP(OP_LEAVELOOP, 0, (OP*)loop, o);
3753 loop->op_redoop = redo;
3754 loop->op_lastop = o;
3755 o->op_private |= loopflags;
3758 loop->op_nextop = next;
3760 loop->op_nextop = o;
3762 o->op_flags |= flags;
3763 o->op_private |= (flags >> 8);
3768 Perl_newFOROP(pTHX_ I32 flags,char *label,line_t forline,OP *sv,OP *expr,OP *block,OP *cont)
3772 PADOFFSET padoff = 0;
3777 if (sv->op_type == OP_RV2SV) { /* symbol table variable */
3778 iterpflags = sv->op_private & OPpOUR_INTRO; /* for our $x () */
3779 sv->op_type = OP_RV2GV;
3780 sv->op_ppaddr = PL_ppaddr[OP_RV2GV];
3782 else if (sv->op_type == OP_PADSV) { /* private variable */
3783 iterpflags = sv->op_private & OPpLVAL_INTRO; /* for my $x () */
3784 padoff = sv->op_targ;
3789 else if (sv->op_type == OP_THREADSV) { /* per-thread variable */
3790 padoff = sv->op_targ;
3792 iterflags |= OPf_SPECIAL;
3797 Perl_croak(aTHX_ "Can't use %s for loop variable", PL_op_desc[sv->op_type]);
3800 #ifdef USE_5005THREADS
3801 padoff = find_threadsv("_");
3802 iterflags |= OPf_SPECIAL;
3804 sv = newGVOP(OP_GV, 0, PL_defgv);
3807 if (expr->op_type == OP_RV2AV || expr->op_type == OP_PADAV) {
3808 expr = mod(force_list(scalar(ref(expr, OP_ITER))), OP_GREPSTART);
3809 iterflags |= OPf_STACKED;
3811 else if (expr->op_type == OP_NULL &&
3812 (expr->op_flags & OPf_KIDS) &&
3813 ((BINOP*)expr)->op_first->op_type == OP_FLOP)
3815 /* Basically turn for($x..$y) into the same as for($x,$y), but we
3816 * set the STACKED flag to indicate that these values are to be
3817 * treated as min/max values by 'pp_iterinit'.
3819 UNOP* flip = (UNOP*)((UNOP*)((BINOP*)expr)->op_first)->op_first;
3820 LOGOP* range = (LOGOP*) flip->op_first;
3821 OP* left = range->op_first;
3822 OP* right = left->op_sibling;
3825 range->op_flags &= ~OPf_KIDS;
3826 range->op_first = Nullop;
3828 listop = (LISTOP*)newLISTOP(OP_LIST, 0, left, right);
3829 listop->op_first->op_next = range->op_next;
3830 left->op_next = range->op_other;
3831 right->op_next = (OP*)listop;
3832 listop->op_next = listop->op_first;
3835 expr = (OP*)(listop);
3837 iterflags |= OPf_STACKED;
3840 expr = mod(force_list(expr), OP_GREPSTART);
3844 loop = (LOOP*)list(convert(OP_ENTERITER, iterflags,
3845 append_elem(OP_LIST, expr, scalar(sv))));
3846 assert(!loop->op_next);
3847 /* for my $x () sets OPpLVAL_INTRO;
3848 * for our $x () sets OPpOUR_INTRO; both only used by Deparse.pm */
3849 loop->op_private = (U8)iterpflags;
3850 #ifdef PL_OP_SLAB_ALLOC
3853 NewOp(1234,tmp,1,LOOP);
3854 Copy(loop,tmp,1,LOOP);
3859 Renew(loop, 1, LOOP);
3861 loop->op_targ = padoff;
3862 wop = newWHILEOP(flags, 1, loop, forline, newOP(OP_ITER, 0), block, cont);
3863 PL_copline = forline;
3864 return newSTATEOP(0, label, wop);
3868 Perl_newLOOPEX(pTHX_ I32 type, OP *label)
3873 if (type != OP_GOTO || label->op_type == OP_CONST) {
3874 /* "last()" means "last" */
3875 if (label->op_type == OP_STUB && (label->op_flags & OPf_PARENS))
3876 o = newOP(type, OPf_SPECIAL);
3878 o = newPVOP(type, 0, savepv(label->op_type == OP_CONST
3879 ? SvPVx(((SVOP*)label)->op_sv, n_a)
3885 if (label->op_type == OP_ENTERSUB)
3886 label = newUNOP(OP_REFGEN, 0, mod(label, OP_REFGEN));
3887 o = newUNOP(type, OPf_STACKED, label);
3889 PL_hints |= HINT_BLOCK_SCOPE;
3894 =for apidoc cv_undef
3896 Clear out all the active components of a CV. This can happen either
3897 by an explicit C<undef &foo>, or by the reference count going to zero.
3898 In the former case, we keep the CvOUTSIDE pointer, so that any anonymous
3899 children can still follow the full lexical scope chain.
3905 Perl_cv_undef(pTHX_ CV *cv)
3907 #ifdef USE_5005THREADS
3909 MUTEX_DESTROY(CvMUTEXP(cv));
3910 Safefree(CvMUTEXP(cv));
3913 #endif /* USE_5005THREADS */
3916 if (CvFILE(cv) && !CvXSUB(cv)) {
3917 /* for XSUBs CvFILE point directly to static memory; __FILE__ */
3918 Safefree(CvFILE(cv));
3923 if (!CvXSUB(cv) && CvROOT(cv)) {
3924 #ifdef USE_5005THREADS
3925 if (CvDEPTH(cv) || (CvOWNER(cv) && CvOWNER(cv) != thr))
3926 Perl_croak(aTHX_ "Can't undef active subroutine");
3929 Perl_croak(aTHX_ "Can't undef active subroutine");
3930 #endif /* USE_5005THREADS */
3933 PAD_SAVE_SETNULLPAD();
3935 op_free(CvROOT(cv));
3936 CvROOT(cv) = Nullop;
3939 SvPOK_off((SV*)cv); /* forget prototype */
3944 /* remove CvOUTSIDE unless this is an undef rather than a free */
3945 if (!SvREFCNT(cv) && CvOUTSIDE(cv)) {
3946 if (!CvWEAKOUTSIDE(cv))
3947 SvREFCNT_dec(CvOUTSIDE(cv));
3948 CvOUTSIDE(cv) = Nullcv;
3951 SvREFCNT_dec((SV*)CvXSUBANY(cv).any_ptr);
3957 /* delete all flags except WEAKOUTSIDE */
3958 CvFLAGS(cv) &= CVf_WEAKOUTSIDE;
3962 Perl_cv_ckproto(pTHX_ CV *cv, GV *gv, char *p)
3964 if (((!p != !SvPOK(cv)) || (p && strNE(p, SvPVX(cv)))) && ckWARN_d(WARN_PROTOTYPE)) {
3965 SV* msg = sv_newmortal();
3969 gv_efullname3(name = sv_newmortal(), gv, Nullch);
3970 sv_setpv(msg, "Prototype mismatch:");
3972 Perl_sv_catpvf(aTHX_ msg, " sub %"SVf, name);
3974 Perl_sv_catpvf(aTHX_ msg, " (%"SVf")", (SV *)cv);
3975 sv_catpv(msg, " vs ");
3977 Perl_sv_catpvf(aTHX_ msg, "(%s)", p);
3979 sv_catpv(msg, "none");
3980 Perl_warner(aTHX_ packWARN(WARN_PROTOTYPE), "%"SVf, msg);
3984 static void const_sv_xsub(pTHX_ CV* cv);
3988 =head1 Optree Manipulation Functions
3990 =for apidoc cv_const_sv
3992 If C<cv> is a constant sub eligible for inlining. returns the constant
3993 value returned by the sub. Otherwise, returns NULL.
3995 Constant subs can be created with C<newCONSTSUB> or as described in
3996 L<perlsub/"Constant Functions">.
4001 Perl_cv_const_sv(pTHX_ CV *cv)
4003 if (!cv || !CvCONST(cv))
4005 return (SV*)CvXSUBANY(cv).any_ptr;
4009 Perl_op_const_sv(pTHX_ OP *o, CV *cv)
4016 if (o->op_type == OP_LINESEQ && cLISTOPo->op_first)
4017 o = cLISTOPo->op_first->op_sibling;
4019 for (; o; o = o->op_next) {
4020 OPCODE type = o->op_type;
4022 if (sv && o->op_next == o)
4024 if (o->op_next != o) {
4025 if (type == OP_NEXTSTATE || type == OP_NULL || type == OP_PUSHMARK)
4027 if (type == OP_DBSTATE)
4030 if (type == OP_LEAVESUB || type == OP_RETURN)
4034 if (type == OP_CONST && cSVOPo->op_sv)
4036 else if ((type == OP_PADSV || type == OP_CONST) && cv) {
4037 sv = PAD_BASE_SV(CvPADLIST(cv), o->op_targ);
4041 /* We get here only from cv_clone2() while creating a closure.
4042 Copy the const value here instead of in cv_clone2 so that
4043 SvREADONLY_on doesn't lead to problems when leaving
4048 if (!SvREADONLY(sv) && SvREFCNT(sv) > 1)
4060 Perl_newMYSUB(pTHX_ I32 floor, OP *o, OP *proto, OP *attrs, OP *block)
4070 Perl_croak(aTHX_ "\"my sub\" not yet implemented");
4074 Perl_newSUB(pTHX_ I32 floor, OP *o, OP *proto, OP *block)
4076 return Perl_newATTRSUB(aTHX_ floor, o, proto, Nullop, block);
4080 Perl_newATTRSUB(pTHX_ I32 floor, OP *o, OP *proto, OP *attrs, OP *block)
4086 char *ps = proto ? SvPVx(((SVOP*)proto)->op_sv, n_a) : Nullch;
4090 name = o ? SvPVx(cSVOPo->op_sv, n_a) : Nullch;
4091 if (!name && PERLDB_NAMEANON && CopLINE(PL_curcop)) {
4092 SV *sv = sv_newmortal();
4093 Perl_sv_setpvf(aTHX_ sv, "%s[%s:%"IVdf"]",
4094 PL_curstash ? "__ANON__" : "__ANON__::__ANON__",
4095 CopFILE(PL_curcop), (IV)CopLINE(PL_curcop));
4100 gv = gv_fetchpv(name ? name : (aname ? aname :
4101 (PL_curstash ? "__ANON__" : "__ANON__::__ANON__")),
4102 GV_ADDMULTI | ((block || attrs) ? 0 : GV_NOINIT),
4112 if (SvTYPE(gv) != SVt_PVGV) { /* Maybe prototype now, and had at
4113 maximum a prototype before. */
4114 if (SvTYPE(gv) > SVt_NULL) {
4115 if (!SvPOK((SV*)gv) && !(SvIOK((SV*)gv) && SvIVX((SV*)gv) == -1)
4116 && ckWARN_d(WARN_PROTOTYPE))
4118 Perl_warner(aTHX_ packWARN(WARN_PROTOTYPE), "Runaway prototype");
4120 cv_ckproto((CV*)gv, NULL, ps);
4123 sv_setpv((SV*)gv, ps);
4125 sv_setiv((SV*)gv, -1);
4126 SvREFCNT_dec(PL_compcv);
4127 cv = PL_compcv = NULL;
4128 PL_sub_generation++;
4132 cv = (!name || GvCVGEN(gv)) ? Nullcv : GvCV(gv);
4134 #ifdef GV_UNIQUE_CHECK
4135 if (cv && GvUNIQUE(gv) && SvREADONLY(cv)) {
4136 Perl_croak(aTHX_ "Can't define subroutine %s (GV is unique)", name);
4140 if (!block || !ps || *ps || attrs)
4143 const_sv = op_const_sv(block, Nullcv);
4146 bool exists = CvROOT(cv) || CvXSUB(cv);
4148 #ifdef GV_UNIQUE_CHECK
4149 if (exists && GvUNIQUE(gv)) {
4150 Perl_croak(aTHX_ "Can't redefine unique subroutine %s", name);
4154 /* if the subroutine doesn't exist and wasn't pre-declared
4155 * with a prototype, assume it will be AUTOLOADed,
4156 * skipping the prototype check
4158 if (exists || SvPOK(cv))
4159 cv_ckproto(cv, gv, ps);
4160 /* already defined (or promised)? */
4161 if (exists || GvASSUMECV(gv)) {
4162 if (!block && !attrs) {
4163 if (CvFLAGS(PL_compcv)) {
4164 /* might have had built-in attrs applied */
4165 CvFLAGS(cv) |= (CvFLAGS(PL_compcv) & CVf_BUILTIN_ATTRS);
4167 /* just a "sub foo;" when &foo is already defined */
4168 SAVEFREESV(PL_compcv);
4171 /* ahem, death to those who redefine active sort subs */
4172 if (PL_curstackinfo->si_type == PERLSI_SORT && PL_sortcop == CvSTART(cv))
4173 Perl_croak(aTHX_ "Can't redefine active sort subroutine %s", name);
4175 if (ckWARN(WARN_REDEFINE)
4177 && (!const_sv || sv_cmp(cv_const_sv(cv), const_sv))))
4179 line_t oldline = CopLINE(PL_curcop);
4180 if (PL_copline != NOLINE)
4181 CopLINE_set(PL_curcop, PL_copline);
4182 Perl_warner(aTHX_ packWARN(WARN_REDEFINE),
4183 CvCONST(cv) ? "Constant subroutine %s redefined"
4184 : "Subroutine %s redefined", name);
4185 CopLINE_set(PL_curcop, oldline);
4193 SvREFCNT_inc(const_sv);
4195 assert(!CvROOT(cv) && !CvCONST(cv));
4196 sv_setpv((SV*)cv, ""); /* prototype is "" */
4197 CvXSUBANY(cv).any_ptr = const_sv;
4198 CvXSUB(cv) = const_sv_xsub;
4203 cv = newCONSTSUB(NULL, name, const_sv);
4206 SvREFCNT_dec(PL_compcv);
4208 PL_sub_generation++;
4215 /* Need to do a C<use attributes $stash_of_cv,\&cv,@attrs>
4216 * before we clobber PL_compcv.
4220 /* Might have had built-in attributes applied -- propagate them. */
4221 CvFLAGS(cv) |= (CvFLAGS(PL_compcv) & CVf_BUILTIN_ATTRS);
4222 if (CvGV(cv) && GvSTASH(CvGV(cv)))
4223 stash = GvSTASH(CvGV(cv));
4224 else if (CvSTASH(cv))
4225 stash = CvSTASH(cv);
4227 stash = PL_curstash;
4230 /* possibly about to re-define existing subr -- ignore old cv */
4231 rcv = (SV*)PL_compcv;
4232 if (name && GvSTASH(gv))
4233 stash = GvSTASH(gv);
4235 stash = PL_curstash;
4237 apply_attrs(stash, rcv, attrs, FALSE);
4239 if (cv) { /* must reuse cv if autoloaded */
4241 /* got here with just attrs -- work done, so bug out */
4242 SAVEFREESV(PL_compcv);
4245 /* transfer PL_compcv to cv */
4247 CvFLAGS(cv) = CvFLAGS(PL_compcv);
4248 CvOUTSIDE(cv) = CvOUTSIDE(PL_compcv);
4249 CvOUTSIDE_SEQ(cv) = CvOUTSIDE_SEQ(PL_compcv);
4250 CvOUTSIDE(PL_compcv) = 0;
4251 CvPADLIST(cv) = CvPADLIST(PL_compcv);
4252 CvPADLIST(PL_compcv) = 0;
4253 /* inner references to PL_compcv must be fixed up ... */
4254 pad_fixup_inner_anons(CvPADLIST(cv), PL_compcv, cv);
4255 /* ... before we throw it away */
4256 SvREFCNT_dec(PL_compcv);
4257 if (PERLDB_INTER)/* Advice debugger on the new sub. */
4258 ++PL_sub_generation;
4265 PL_sub_generation++;
4269 CvFILE_set_from_cop(cv, PL_curcop);
4270 CvSTASH(cv) = PL_curstash;
4271 #ifdef USE_5005THREADS
4273 if (!CvMUTEXP(cv)) {
4274 New(666, CvMUTEXP(cv), 1, perl_mutex);
4275 MUTEX_INIT(CvMUTEXP(cv));
4277 #endif /* USE_5005THREADS */
4280 sv_setpv((SV*)cv, ps);
4282 if (PL_error_count) {
4286 char *s = strrchr(name, ':');
4288 if (strEQ(s, "BEGIN")) {
4290 "BEGIN not safe after errors--compilation aborted";
4291 if (PL_in_eval & EVAL_KEEPERR)
4292 Perl_croak(aTHX_ not_safe);
4294 /* force display of errors found but not reported */
4295 sv_catpv(ERRSV, not_safe);
4296 Perl_croak(aTHX_ "%"SVf, ERRSV);
4305 CvROOT(cv) = newUNOP(OP_LEAVESUBLV, 0,
4306 mod(scalarseq(block), OP_LEAVESUBLV));
4309 CvROOT(cv) = newUNOP(OP_LEAVESUB, 0, scalarseq(block));
4311 CvROOT(cv)->op_private |= OPpREFCOUNTED;
4312 OpREFCNT_set(CvROOT(cv), 1);
4313 CvSTART(cv) = LINKLIST(CvROOT(cv));
4314 CvROOT(cv)->op_next = 0;
4315 CALL_PEEP(CvSTART(cv));
4317 /* now that optimizer has done its work, adjust pad values */
4319 pad_tidy(CvCLONE(cv) ? padtidy_SUBCLONE : padtidy_SUB);
4322 assert(!CvCONST(cv));
4323 if (ps && !*ps && op_const_sv(block, cv))
4327 if (name || aname) {
4329 char *tname = (name ? name : aname);
4331 if (PERLDB_SUBLINE && PL_curstash != PL_debstash) {
4332 SV *sv = NEWSV(0,0);
4333 SV *tmpstr = sv_newmortal();
4334 GV *db_postponed = gv_fetchpv("DB::postponed", GV_ADDMULTI, SVt_PVHV);
4338 Perl_sv_setpvf(aTHX_ sv, "%s:%ld-%ld",
4340 (long)PL_subline, (long)CopLINE(PL_curcop));
4341 gv_efullname3(tmpstr, gv, Nullch);
4342 hv_store(GvHV(PL_DBsub), SvPVX(tmpstr), SvCUR(tmpstr), sv, 0);
4343 hv = GvHVn(db_postponed);
4344 if (HvFILL(hv) > 0 && hv_exists(hv, SvPVX(tmpstr), SvCUR(tmpstr))
4345 && (pcv = GvCV(db_postponed)))
4351 call_sv((SV*)pcv, G_DISCARD);
4355 if ((s = strrchr(tname,':')))
4360 if (*s != 'B' && *s != 'E' && *s != 'C' && *s != 'I')
4363 if (strEQ(s, "BEGIN")) {
4364 I32 oldscope = PL_scopestack_ix;
4366 SAVECOPFILE(&PL_compiling);
4367 SAVECOPLINE(&PL_compiling);
4370 PL_beginav = newAV();
4371 DEBUG_x( dump_sub(gv) );
4372 av_push(PL_beginav, (SV*)cv);
4373 GvCV(gv) = 0; /* cv has been hijacked */
4374 call_list(oldscope, PL_beginav);
4376 PL_curcop = &PL_compiling;
4377 PL_compiling.op_private = (U8)(PL_hints & HINT_PRIVATE_MASK);
4380 else if (strEQ(s, "END") && !PL_error_count) {
4383 DEBUG_x( dump_sub(gv) );
4384 av_unshift(PL_endav, 1);
4385 av_store(PL_endav, 0, (SV*)cv);
4386 GvCV(gv) = 0; /* cv has been hijacked */
4388 else if (strEQ(s, "CHECK") && !PL_error_count) {
4390 PL_checkav = newAV();
4391 DEBUG_x( dump_sub(gv) );
4392 if (PL_main_start && ckWARN(WARN_VOID))
4393 Perl_warner(aTHX_ packWARN(WARN_VOID), "Too late to run CHECK block");
4394 av_unshift(PL_checkav, 1);
4395 av_store(PL_checkav, 0, (SV*)cv);
4396 GvCV(gv) = 0; /* cv has been hijacked */
4398 else if (strEQ(s, "INIT") && !PL_error_count) {
4400 PL_initav = newAV();
4401 DEBUG_x( dump_sub(gv) );
4402 if (PL_main_start && ckWARN(WARN_VOID))
4403 Perl_warner(aTHX_ packWARN(WARN_VOID), "Too late to run INIT block");
4404 av_push(PL_initav, (SV*)cv);
4405 GvCV(gv) = 0; /* cv has been hijacked */
4410 PL_copline = NOLINE;
4415 /* XXX unsafe for threads if eval_owner isn't held */
4417 =for apidoc newCONSTSUB
4419 Creates a constant sub equivalent to Perl C<sub FOO () { 123 }> which is
4420 eligible for inlining at compile-time.
4426 Perl_newCONSTSUB(pTHX_ HV *stash, char *name, SV *sv)
4432 SAVECOPLINE(PL_curcop);
4433 CopLINE_set(PL_curcop, PL_copline);
4436 PL_hints &= ~HINT_BLOCK_SCOPE;
4439 SAVESPTR(PL_curstash);
4440 SAVECOPSTASH(PL_curcop);
4441 PL_curstash = stash;
4442 CopSTASH_set(PL_curcop,stash);
4445 cv = newXS(name, const_sv_xsub, savepv(CopFILE(PL_curcop)));
4446 CvXSUBANY(cv).any_ptr = sv;
4448 sv_setpv((SV*)cv, ""); /* prototype is "" */
4456 =for apidoc U||newXS
4458 Used by C<xsubpp> to hook up XSUBs as Perl subs.
4464 Perl_newXS(pTHX_ char *name, XSUBADDR_t subaddr, char *filename)
4466 GV *gv = gv_fetchpv(name ? name :
4467 (PL_curstash ? "__ANON__" : "__ANON__::__ANON__"),
4468 GV_ADDMULTI, SVt_PVCV);
4471 if ((cv = (name ? GvCV(gv) : Nullcv))) {
4473 /* just a cached method */
4477 else if (CvROOT(cv) || CvXSUB(cv) || GvASSUMECV(gv)) {
4478 /* already defined (or promised) */
4479 if (ckWARN(WARN_REDEFINE) && !(CvGV(cv) && GvSTASH(CvGV(cv))
4480 && strEQ(HvNAME(GvSTASH(CvGV(cv))), "autouse"))) {
4481 line_t oldline = CopLINE(PL_curcop);
4482 if (PL_copline != NOLINE)
4483 CopLINE_set(PL_curcop, PL_copline);
4484 Perl_warner(aTHX_ packWARN(WARN_REDEFINE),
4485 CvCONST(cv) ? "Constant subroutine %s redefined"
4486 : "Subroutine %s redefined"
4488 CopLINE_set(PL_curcop, oldline);
4495 if (cv) /* must reuse cv if autoloaded */
4498 cv = (CV*)NEWSV(1105,0);
4499 sv_upgrade((SV *)cv, SVt_PVCV);
4503 PL_sub_generation++;
4507 #ifdef USE_5005THREADS
4508 New(666, CvMUTEXP(cv), 1, perl_mutex);
4509 MUTEX_INIT(CvMUTEXP(cv));
4511 #endif /* USE_5005THREADS */
4512 (void)gv_fetchfile(filename);
4513 CvFILE(cv) = filename; /* NOTE: not copied, as it is expected to be
4514 an external constant string */
4515 CvXSUB(cv) = subaddr;
4518 char *s = strrchr(name,':');
4524 if (*s != 'B' && *s != 'E' && *s != 'C' && *s != 'I')
4527 if (strEQ(s, "BEGIN")) {
4529 PL_beginav = newAV();
4530 av_push(PL_beginav, (SV*)cv);
4531 GvCV(gv) = 0; /* cv has been hijacked */
4533 else if (strEQ(s, "END")) {
4536 av_unshift(PL_endav, 1);
4537 av_store(PL_endav, 0, (SV*)cv);
4538 GvCV(gv) = 0; /* cv has been hijacked */
4540 else if (strEQ(s, "CHECK")) {
4542 PL_checkav = newAV();
4543 if (PL_main_start && ckWARN(WARN_VOID))
4544 Perl_warner(aTHX_ packWARN(WARN_VOID), "Too late to run CHECK block");
4545 av_unshift(PL_checkav, 1);
4546 av_store(PL_checkav, 0, (SV*)cv);
4547 GvCV(gv) = 0; /* cv has been hijacked */
4549 else if (strEQ(s, "INIT")) {
4551 PL_initav = newAV();
4552 if (PL_main_start && ckWARN(WARN_VOID))
4553 Perl_warner(aTHX_ packWARN(WARN_VOID), "Too late to run INIT block");
4554 av_push(PL_initav, (SV*)cv);
4555 GvCV(gv) = 0; /* cv has been hijacked */
4566 Perl_newFORM(pTHX_ I32 floor, OP *o, OP *block)
4574 name = SvPVx(cSVOPo->op_sv, n_a);
4577 gv = gv_fetchpv(name,TRUE, SVt_PVFM);
4578 #ifdef GV_UNIQUE_CHECK
4580 Perl_croak(aTHX_ "Bad symbol for form (GV is unique)");
4584 if ((cv = GvFORM(gv))) {
4585 if (ckWARN(WARN_REDEFINE)) {
4586 line_t oldline = CopLINE(PL_curcop);
4587 if (PL_copline != NOLINE)
4588 CopLINE_set(PL_curcop, PL_copline);
4589 Perl_warner(aTHX_ packWARN(WARN_REDEFINE), "Format %s redefined",name);
4590 CopLINE_set(PL_curcop, oldline);
4597 CvFILE_set_from_cop(cv, PL_curcop);
4600 pad_tidy(padtidy_FORMAT);
4601 CvROOT(cv) = newUNOP(OP_LEAVEWRITE, 0, scalarseq(block));
4602 CvROOT(cv)->op_private |= OPpREFCOUNTED;
4603 OpREFCNT_set(CvROOT(cv), 1);
4604 CvSTART(cv) = LINKLIST(CvROOT(cv));
4605 CvROOT(cv)->op_next = 0;
4606 CALL_PEEP(CvSTART(cv));
4608 PL_copline = NOLINE;
4613 Perl_newANONLIST(pTHX_ OP *o)
4615 return newUNOP(OP_REFGEN, 0,
4616 mod(list(convert(OP_ANONLIST, 0, o)), OP_REFGEN));
4620 Perl_newANONHASH(pTHX_ OP *o)
4622 return newUNOP(OP_REFGEN, 0,
4623 mod(list(convert(OP_ANONHASH, 0, o)), OP_REFGEN));
4627 Perl_newANONSUB(pTHX_ I32 floor, OP *proto, OP *block)
4629 return newANONATTRSUB(floor, proto, Nullop, block);
4633 Perl_newANONATTRSUB(pTHX_ I32 floor, OP *proto, OP *attrs, OP *block)
4635 return newUNOP(OP_REFGEN, 0,
4636 newSVOP(OP_ANONCODE, 0,
4637 (SV*)newATTRSUB(floor, 0, proto, attrs, block)));
4641 Perl_oopsAV(pTHX_ OP *o)
4643 switch (o->op_type) {
4645 o->op_type = OP_PADAV;
4646 o->op_ppaddr = PL_ppaddr[OP_PADAV];
4647 return ref(o, OP_RV2AV);
4650 o->op_type = OP_RV2AV;
4651 o->op_ppaddr = PL_ppaddr[OP_RV2AV];
4656 if (ckWARN_d(WARN_INTERNAL))
4657 Perl_warner(aTHX_ packWARN(WARN_INTERNAL), "oops: oopsAV");
4664 Perl_oopsHV(pTHX_ OP *o)
4666 switch (o->op_type) {
4669 o->op_type = OP_PADHV;
4670 o->op_ppaddr = PL_ppaddr[OP_PADHV];
4671 return ref(o, OP_RV2HV);
4675 o->op_type = OP_RV2HV;
4676 o->op_ppaddr = PL_ppaddr[OP_RV2HV];
4681 if (ckWARN_d(WARN_INTERNAL))
4682 Perl_warner(aTHX_ packWARN(WARN_INTERNAL), "oops: oopsHV");
4689 Perl_newAVREF(pTHX_ OP *o)
4691 if (o->op_type == OP_PADANY) {
4692 o->op_type = OP_PADAV;
4693 o->op_ppaddr = PL_ppaddr[OP_PADAV];
4696 else if ((o->op_type == OP_RV2AV || o->op_type == OP_PADAV)
4697 && ckWARN(WARN_DEPRECATED)) {
4698 Perl_warner(aTHX_ packWARN(WARN_DEPRECATED),
4699 "Using an array as a reference is deprecated");
4701 return newUNOP(OP_RV2AV, 0, scalar(o));
4705 Perl_newGVREF(pTHX_ I32 type, OP *o)
4707 if (type == OP_MAPSTART || type == OP_GREPSTART || type == OP_SORT)
4708 return newUNOP(OP_NULL, 0, o);
4709 return ref(newUNOP(OP_RV2GV, OPf_REF, o), type);
4713 Perl_newHVREF(pTHX_ OP *o)
4715 if (o->op_type == OP_PADANY) {
4716 o->op_type = OP_PADHV;
4717 o->op_ppaddr = PL_ppaddr[OP_PADHV];
4720 else if ((o->op_type == OP_RV2HV || o->op_type == OP_PADHV)
4721 && ckWARN(WARN_DEPRECATED)) {
4722 Perl_warner(aTHX_ packWARN(WARN_DEPRECATED),
4723 "Using a hash as a reference is deprecated");
4725 return newUNOP(OP_RV2HV, 0, scalar(o));
4729 Perl_oopsCV(pTHX_ OP *o)
4731 Perl_croak(aTHX_ "NOT IMPL LINE %d",__LINE__);
4737 Perl_newCVREF(pTHX_ I32 flags, OP *o)
4739 return newUNOP(OP_RV2CV, flags, scalar(o));
4743 Perl_newSVREF(pTHX_ OP *o)
4745 if (o->op_type == OP_PADANY) {
4746 o->op_type = OP_PADSV;
4747 o->op_ppaddr = PL_ppaddr[OP_PADSV];
4750 else if (o->op_type == OP_THREADSV && !(o->op_flags & OPpDONE_SVREF)) {
4751 o->op_flags |= OPpDONE_SVREF;
4754 return newUNOP(OP_RV2SV, 0, scalar(o));
4757 /* Check routines. */
4760 Perl_ck_anoncode(pTHX_ OP *o)
4762 cSVOPo->op_targ = pad_add_anon(cSVOPo->op_sv, o->op_type);
4763 cSVOPo->op_sv = Nullsv;
4768 Perl_ck_bitop(pTHX_ OP *o)
4770 #define OP_IS_NUMCOMPARE(op) \
4771 ((op) == OP_LT || (op) == OP_I_LT || \
4772 (op) == OP_GT || (op) == OP_I_GT || \
4773 (op) == OP_LE || (op) == OP_I_LE || \
4774 (op) == OP_GE || (op) == OP_I_GE || \
4775 (op) == OP_EQ || (op) == OP_I_EQ || \
4776 (op) == OP_NE || (op) == OP_I_NE || \
4777 (op) == OP_NCMP || (op) == OP_I_NCMP)
4778 o->op_private = (U8)(PL_hints & HINT_PRIVATE_MASK);
4779 if (!(o->op_flags & OPf_STACKED) /* Not an assignment */
4780 && (o->op_type == OP_BIT_OR
4781 || o->op_type == OP_BIT_AND
4782 || o->op_type == OP_BIT_XOR))
4784 OP * left = cBINOPo->op_first;
4785 OP * right = left->op_sibling;
4786 if ((OP_IS_NUMCOMPARE(left->op_type) &&
4787 (left->op_flags & OPf_PARENS) == 0) ||
4788 (OP_IS_NUMCOMPARE(right->op_type) &&
4789 (right->op_flags & OPf_PARENS) == 0))
4790 if (ckWARN(WARN_PRECEDENCE))
4791 Perl_warner(aTHX_ packWARN(WARN_PRECEDENCE),
4792 "Possible precedence problem on bitwise %c operator",
4793 o->op_type == OP_BIT_OR ? '|'
4794 : o->op_type == OP_BIT_AND ? '&' : '^'
4801 Perl_ck_concat(pTHX_ OP *o)
4803 OP *kid = cUNOPo->op_first;
4804 if (kid->op_type == OP_CONCAT && !(kUNOP->op_first->op_flags & OPf_MOD))
4805 o->op_flags |= OPf_STACKED;
4810 Perl_ck_spair(pTHX_ OP *o)
4812 if (o->op_flags & OPf_KIDS) {
4815 OPCODE type = o->op_type;
4816 o = modkids(ck_fun(o), type);
4817 kid = cUNOPo->op_first;
4818 newop = kUNOP->op_first->op_sibling;
4820 (newop->op_sibling ||
4821 !(PL_opargs[newop->op_type] & OA_RETSCALAR) ||
4822 newop->op_type == OP_PADAV || newop->op_type == OP_PADHV ||
4823 newop->op_type == OP_RV2AV || newop->op_type == OP_RV2HV)) {
4827 op_free(kUNOP->op_first);
4828 kUNOP->op_first = newop;
4830 o->op_ppaddr = PL_ppaddr[++o->op_type];
4835 Perl_ck_delete(pTHX_ OP *o)
4839 if (o->op_flags & OPf_KIDS) {
4840 OP *kid = cUNOPo->op_first;
4841 switch (kid->op_type) {
4843 o->op_flags |= OPf_SPECIAL;
4846 o->op_private |= OPpSLICE;
4849 o->op_flags |= OPf_SPECIAL;
4854 Perl_croak(aTHX_ "%s argument is not a HASH or ARRAY element or slice",
4863 Perl_ck_die(pTHX_ OP *o)
4866 if (VMSISH_HUSHED) o->op_private |= OPpHUSH_VMSISH;
4872 Perl_ck_eof(pTHX_ OP *o)
4874 I32 type = o->op_type;
4876 if (o->op_flags & OPf_KIDS) {
4877 if (cLISTOPo->op_first->op_type == OP_STUB) {
4879 o = newUNOP(type, OPf_SPECIAL, newGVOP(OP_GV, 0, PL_argvgv));
4887 Perl_ck_eval(pTHX_ OP *o)
4889 PL_hints |= HINT_BLOCK_SCOPE;
4890 if (o->op_flags & OPf_KIDS) {
4891 SVOP *kid = (SVOP*)cUNOPo->op_first;
4894 o->op_flags &= ~OPf_KIDS;
4897 else if (kid->op_type == OP_LINESEQ || kid->op_type == OP_STUB) {
4900 cUNOPo->op_first = 0;
4903 NewOp(1101, enter, 1, LOGOP);
4904 enter->op_type = OP_ENTERTRY;
4905 enter->op_ppaddr = PL_ppaddr[OP_ENTERTRY];
4906 enter->op_private = 0;
4908 /* establish postfix order */
4909 enter->op_next = (OP*)enter;
4911 o = prepend_elem(OP_LINESEQ, (OP*)enter, (OP*)kid);
4912 o->op_type = OP_LEAVETRY;
4913 o->op_ppaddr = PL_ppaddr[OP_LEAVETRY];
4914 enter->op_other = o;
4922 o = newUNOP(OP_ENTEREVAL, 0, newDEFSVOP());
4924 o->op_targ = (PADOFFSET)PL_hints;
4929 Perl_ck_exit(pTHX_ OP *o)
4932 HV *table = GvHV(PL_hintgv);
4934 SV **svp = hv_fetch(table, "vmsish_exit", 11, FALSE);
4935 if (svp && *svp && SvTRUE(*svp))
4936 o->op_private |= OPpEXIT_VMSISH;
4938 if (VMSISH_HUSHED) o->op_private |= OPpHUSH_VMSISH;
4944 Perl_ck_exec(pTHX_ OP *o)
4947 if (o->op_flags & OPf_STACKED) {
4949 kid = cUNOPo->op_first->op_sibling;
4950 if (kid->op_type == OP_RV2GV)
4959 Perl_ck_exists(pTHX_ OP *o)
4962 if (o->op_flags & OPf_KIDS) {
4963 OP *kid = cUNOPo->op_first;
4964 if (kid->op_type == OP_ENTERSUB) {
4965 (void) ref(kid, o->op_type);
4966 if (kid->op_type != OP_RV2CV && !PL_error_count)
4967 Perl_croak(aTHX_ "%s argument is not a subroutine name",
4969 o->op_private |= OPpEXISTS_SUB;
4971 else if (kid->op_type == OP_AELEM)
4972 o->op_flags |= OPf_SPECIAL;
4973 else if (kid->op_type != OP_HELEM)
4974 Perl_croak(aTHX_ "%s argument is not a HASH or ARRAY element",
4983 Perl_ck_gvconst(pTHX_ register OP *o)
4985 o = fold_constants(o);
4986 if (o->op_type == OP_CONST)
4993 Perl_ck_rvconst(pTHX_ register OP *o)
4995 SVOP *kid = (SVOP*)cUNOPo->op_first;
4997 o->op_private |= (PL_hints & HINT_STRICT_REFS);
4998 if (kid->op_type == OP_CONST) {
5002 SV *kidsv = kid->op_sv;
5005 /* Is it a constant from cv_const_sv()? */
5006 if (SvROK(kidsv) && SvREADONLY(kidsv)) {
5007 SV *rsv = SvRV(kidsv);
5008 int svtype = SvTYPE(rsv);
5009 char *badtype = Nullch;
5011 switch (o->op_type) {
5013 if (svtype > SVt_PVMG)
5014 badtype = "a SCALAR";
5017 if (svtype != SVt_PVAV)
5018 badtype = "an ARRAY";
5021 if (svtype != SVt_PVHV) {
5022 if (svtype == SVt_PVAV) { /* pseudohash? */
5023 SV **ksv = av_fetch((AV*)rsv, 0, FALSE);
5024 if (ksv && SvROK(*ksv)
5025 && SvTYPE(SvRV(*ksv)) == SVt_PVHV)
5034 if (svtype != SVt_PVCV)
5039 Perl_croak(aTHX_ "Constant is not %s reference", badtype);
5042 name = SvPV(kidsv, n_a);
5043 if ((PL_hints & HINT_STRICT_REFS) && (kid->op_private & OPpCONST_BARE)) {
5044 char *badthing = Nullch;
5045 switch (o->op_type) {
5047 badthing = "a SCALAR";
5050 badthing = "an ARRAY";
5053 badthing = "a HASH";
5058 "Can't use bareword (\"%s\") as %s ref while \"strict refs\" in use",
5062 * This is a little tricky. We only want to add the symbol if we
5063 * didn't add it in the lexer. Otherwise we get duplicate strict
5064 * warnings. But if we didn't add it in the lexer, we must at
5065 * least pretend like we wanted to add it even if it existed before,
5066 * or we get possible typo warnings. OPpCONST_ENTERED says
5067 * whether the lexer already added THIS instance of this symbol.
5069 iscv = (o->op_type == OP_RV2CV) * 2;
5071 gv = gv_fetchpv(name,
5072 iscv | !(kid->op_private & OPpCONST_ENTERED),
5075 : o->op_type == OP_RV2SV
5077 : o->op_type == OP_RV2AV
5079 : o->op_type == OP_RV2HV
5082 } while (!gv && !(kid->op_private & OPpCONST_ENTERED) && !iscv++);
5084 kid->op_type = OP_GV;
5085 SvREFCNT_dec(kid->op_sv);
5087 /* XXX hack: dependence on sizeof(PADOP) <= sizeof(SVOP) */
5088 kPADOP->op_padix = pad_alloc(OP_GV, SVs_PADTMP);
5089 SvREFCNT_dec(PAD_SVl(kPADOP->op_padix));
5091 PAD_SETSV(kPADOP->op_padix, (SV*) SvREFCNT_inc(gv));
5093 kid->op_sv = SvREFCNT_inc(gv);
5095 kid->op_private = 0;
5096 kid->op_ppaddr = PL_ppaddr[OP_GV];
5103 Perl_ck_ftst(pTHX_ OP *o)
5105 I32 type = o->op_type;
5107 if (o->op_flags & OPf_REF) {
5110 else if (o->op_flags & OPf_KIDS && cUNOPo->op_first->op_type != OP_STUB) {
5111 SVOP *kid = (SVOP*)cUNOPo->op_first;
5113 if (kid->op_type == OP_CONST && (kid->op_private & OPpCONST_BARE)) {
5115 OP *newop = newGVOP(type, OPf_REF,
5116 gv_fetchpv(SvPVx(kid->op_sv, n_a), TRUE, SVt_PVIO));
5121 if ((PL_hints & HINT_FILETEST_ACCESS) &&
5122 OP_IS_FILETEST_ACCESS(o))
5123 o->op_private |= OPpFT_ACCESS;
5128 if (type == OP_FTTTY)
5129 o = newGVOP(type, OPf_REF, PL_stdingv);
5131 o = newUNOP(type, 0, newDEFSVOP());
5137 Perl_ck_fun(pTHX_ OP *o)
5143 int type = o->op_type;
5144 register I32 oa = PL_opargs[type] >> OASHIFT;
5146 if (o->op_flags & OPf_STACKED) {
5147 if ((oa & OA_OPTIONAL) && (oa >> 4) && !((oa >> 4) & OA_OPTIONAL))
5150 return no_fh_allowed(o);
5153 if (o->op_flags & OPf_KIDS) {
5155 tokid = &cLISTOPo->op_first;
5156 kid = cLISTOPo->op_first;
5157 if (kid->op_type == OP_PUSHMARK ||
5158 (kid->op_type == OP_NULL && kid->op_targ == OP_PUSHMARK))
5160 tokid = &kid->op_sibling;
5161 kid = kid->op_sibling;
5163 if (!kid && PL_opargs[type] & OA_DEFGV)
5164 *tokid = kid = newDEFSVOP();
5168 sibl = kid->op_sibling;
5171 /* list seen where single (scalar) arg expected? */
5172 if (numargs == 1 && !(oa >> 4)
5173 && kid->op_type == OP_LIST && type != OP_SCALAR)
5175 return too_many_arguments(o,PL_op_desc[type]);
5188 if ((type == OP_PUSH || type == OP_UNSHIFT)
5189 && !kid->op_sibling && ckWARN(WARN_SYNTAX))
5190 Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
5191 "Useless use of %s with no values",
5194 if (kid->op_type == OP_CONST &&
5195 (kid->op_private & OPpCONST_BARE))
5197 char *name = SvPVx(((SVOP*)kid)->op_sv, n_a);
5198 OP *newop = newAVREF(newGVOP(OP_GV, 0,
5199 gv_fetchpv(name, TRUE, SVt_PVAV) ));
5200 if (ckWARN2(WARN_DEPRECATED, WARN_SYNTAX))
5201 Perl_warner(aTHX_ packWARN2(WARN_DEPRECATED, WARN_SYNTAX),
5202 "Array @%s missing the @ in argument %"IVdf" of %s()",
5203 name, (IV)numargs, PL_op_desc[type]);
5206 kid->op_sibling = sibl;
5209 else if (kid->op_type != OP_RV2AV && kid->op_type != OP_PADAV)
5210 bad_type(numargs, "array", PL_op_desc[type], kid);
5214 if (kid->op_type == OP_CONST &&
5215 (kid->op_private & OPpCONST_BARE))
5217 char *name = SvPVx(((SVOP*)kid)->op_sv, n_a);
5218 OP *newop = newHVREF(newGVOP(OP_GV, 0,
5219 gv_fetchpv(name, TRUE, SVt_PVHV) ));
5220 if (ckWARN2(WARN_DEPRECATED, WARN_SYNTAX))
5221 Perl_warner(aTHX_ packWARN2(WARN_DEPRECATED, WARN_SYNTAX),
5222 "Hash %%%s missing the %% in argument %"IVdf" of %s()",
5223 name, (IV)numargs, PL_op_desc[type]);
5226 kid->op_sibling = sibl;
5229 else if (kid->op_type != OP_RV2HV && kid->op_type != OP_PADHV)
5230 bad_type(numargs, "hash", PL_op_desc[type], kid);
5235 OP *newop = newUNOP(OP_NULL, 0, kid);
5236 kid->op_sibling = 0;
5238 newop->op_next = newop;
5240 kid->op_sibling = sibl;
5245 if (kid->op_type != OP_GV && kid->op_type != OP_RV2GV) {
5246 if (kid->op_type == OP_CONST &&
5247 (kid->op_private & OPpCONST_BARE))
5249 OP *newop = newGVOP(OP_GV, 0,
5250 gv_fetchpv(SvPVx(((SVOP*)kid)->op_sv, n_a), TRUE,
5252 if (!(o->op_private & 1) && /* if not unop */
5253 kid == cLISTOPo->op_last)
5254 cLISTOPo->op_last = newop;
5258 else if (kid->op_type == OP_READLINE) {
5259 /* neophyte patrol: open(<FH>), close(<FH>) etc. */
5260 bad_type(numargs, "HANDLE", OP_DESC(o), kid);
5263 I32 flags = OPf_SPECIAL;
5267 /* is this op a FH constructor? */
5268 if (is_handle_constructor(o,numargs)) {
5269 char *name = Nullch;
5273 /* Set a flag to tell rv2gv to vivify
5274 * need to "prove" flag does not mean something
5275 * else already - NI-S 1999/05/07
5278 if (kid->op_type == OP_PADSV) {
5279 /*XXX DAPM 2002.08.25 tmp assert test */
5280 /*XXX*/ assert(av_fetch(PL_comppad_name, (kid->op_targ), FALSE));
5281 /*XXX*/ assert(*av_fetch(PL_comppad_name, (kid->op_targ), FALSE));
5283 name = PAD_COMPNAME_PV(kid->op_targ);
5284 /* SvCUR of a pad namesv can't be trusted
5285 * (see PL_generation), so calc its length
5291 else if (kid->op_type == OP_RV2SV
5292 && kUNOP->op_first->op_type == OP_GV)
5294 GV *gv = cGVOPx_gv(kUNOP->op_first);
5296 len = GvNAMELEN(gv);
5298 else if (kid->op_type == OP_AELEM
5299 || kid->op_type == OP_HELEM)
5304 if ((op = ((BINOP*)kid)->op_first)) {
5305 SV *tmpstr = Nullsv;
5307 kid->op_type == OP_AELEM ?
5309 if (((op->op_type == OP_RV2AV) ||
5310 (op->op_type == OP_RV2HV)) &&
5311 (op = ((UNOP*)op)->op_first) &&
5312 (op->op_type == OP_GV)) {
5313 /* packagevar $a[] or $h{} */
5314 GV *gv = cGVOPx_gv(op);
5322 else if (op->op_type == OP_PADAV
5323 || op->op_type == OP_PADHV) {
5324 /* lexicalvar $a[] or $h{} */
5326 PAD_COMPNAME_PV(op->op_targ);
5336 name = savepv(SvPVX(tmpstr));
5342 name = "__ANONIO__";
5349 targ = pad_alloc(OP_RV2GV, SVs_PADTMP);
5350 namesv = PAD_SVl(targ);
5351 (void)SvUPGRADE(namesv, SVt_PV);
5353 sv_setpvn(namesv, "$", 1);
5354 sv_catpvn(namesv, name, len);
5357 kid->op_sibling = 0;
5358 kid = newUNOP(OP_RV2GV, flags, scalar(kid));
5359 kid->op_targ = targ;
5360 kid->op_private |= priv;
5362 kid->op_sibling = sibl;
5368 mod(scalar(kid), type);
5372 tokid = &kid->op_sibling;
5373 kid = kid->op_sibling;
5375 o->op_private |= numargs;
5377 return too_many_arguments(o,OP_DESC(o));
5380 else if (PL_opargs[type] & OA_DEFGV) {
5382 return newUNOP(type, 0, newDEFSVOP());
5386 while (oa & OA_OPTIONAL)
5388 if (oa && oa != OA_LIST)
5389 return too_few_arguments(o,OP_DESC(o));
5395 Perl_ck_glob(pTHX_ OP *o)
5400 if ((o->op_flags & OPf_KIDS) && !cLISTOPo->op_first->op_sibling)
5401 append_elem(OP_GLOB, o, newDEFSVOP());
5403 if (!((gv = gv_fetchpv("glob", FALSE, SVt_PVCV))
5404 && GvCVu(gv) && GvIMPORTED_CV(gv)))
5406 gv = gv_fetchpv("CORE::GLOBAL::glob", FALSE, SVt_PVCV);
5409 #if !defined(PERL_EXTERNAL_GLOB)
5410 /* XXX this can be tightened up and made more failsafe. */
5414 Perl_load_module(aTHX_ PERL_LOADMOD_NOIMPORT,
5415 newSVpvn("File::Glob", 10), Nullsv, Nullsv, Nullsv);
5416 gv = gv_fetchpv("CORE::GLOBAL::glob", FALSE, SVt_PVCV);
5417 glob_gv = gv_fetchpv("File::Glob::csh_glob", FALSE, SVt_PVCV);
5418 GvCV(gv) = GvCV(glob_gv);
5419 SvREFCNT_inc((SV*)GvCV(gv));
5420 GvIMPORTED_CV_on(gv);
5423 #endif /* PERL_EXTERNAL_GLOB */
5425 if (gv && GvCVu(gv) && GvIMPORTED_CV(gv)) {
5426 append_elem(OP_GLOB, o,
5427 newSVOP(OP_CONST, 0, newSViv(PL_glob_index++)));
5428 o->op_type = OP_LIST;
5429 o->op_ppaddr = PL_ppaddr[OP_LIST];
5430 cLISTOPo->op_first->op_type = OP_PUSHMARK;
5431 cLISTOPo->op_first->op_ppaddr = PL_ppaddr[OP_PUSHMARK];
5432 o = newUNOP(OP_ENTERSUB, OPf_STACKED,
5433 append_elem(OP_LIST, o,
5434 scalar(newUNOP(OP_RV2CV, 0,
5435 newGVOP(OP_GV, 0, gv)))));
5436 o = newUNOP(OP_NULL, 0, ck_subr(o));
5437 o->op_targ = OP_GLOB; /* hint at what it used to be */
5440 gv = newGVgen("main");
5442 append_elem(OP_GLOB, o, newGVOP(OP_GV, 0, gv));
5448 Perl_ck_grep(pTHX_ OP *o)
5452 OPCODE type = o->op_type == OP_GREPSTART ? OP_GREPWHILE : OP_MAPWHILE;
5454 o->op_ppaddr = PL_ppaddr[OP_GREPSTART];
5455 NewOp(1101, gwop, 1, LOGOP);
5457 if (o->op_flags & OPf_STACKED) {
5460 kid = cLISTOPo->op_first->op_sibling;
5461 for (k = cLISTOPo->op_first->op_sibling->op_next; k; k = k->op_next) {
5464 kid->op_next = (OP*)gwop;
5465 o->op_flags &= ~OPf_STACKED;
5467 kid = cLISTOPo->op_first->op_sibling;
5468 if (type == OP_MAPWHILE)
5475 kid = cLISTOPo->op_first->op_sibling;
5476 if (kid->op_type != OP_NULL)
5477 Perl_croak(aTHX_ "panic: ck_grep");
5478 kid = kUNOP->op_first;
5480 gwop->op_type = type;
5481 gwop->op_ppaddr = PL_ppaddr[type];
5482 gwop->op_first = listkids(o);
5483 gwop->op_flags |= OPf_KIDS;
5484 gwop->op_private = 1;
5485 gwop->op_other = LINKLIST(kid);
5486 gwop->op_targ = pad_alloc(type, SVs_PADTMP);
5487 kid->op_next = (OP*)gwop;
5489 kid = cLISTOPo->op_first->op_sibling;
5490 if (!kid || !kid->op_sibling)
5491 return too_few_arguments(o,OP_DESC(o));
5492 for (kid = kid->op_sibling; kid; kid = kid->op_sibling)
5493 mod(kid, OP_GREPSTART);
5499 Perl_ck_index(pTHX_ OP *o)
5501 if (o->op_flags & OPf_KIDS) {
5502 OP *kid = cLISTOPo->op_first->op_sibling; /* get past pushmark */
5504 kid = kid->op_sibling; /* get past "big" */
5505 if (kid && kid->op_type == OP_CONST)
5506 fbm_compile(((SVOP*)kid)->op_sv, 0);
5512 Perl_ck_lengthconst(pTHX_ OP *o)
5514 /* XXX length optimization goes here */
5519 Perl_ck_lfun(pTHX_ OP *o)
5521 OPCODE type = o->op_type;
5522 return modkids(ck_fun(o), type);
5526 Perl_ck_defined(pTHX_ OP *o) /* 19990527 MJD */
5528 if ((o->op_flags & OPf_KIDS) && ckWARN2(WARN_DEPRECATED, WARN_SYNTAX)) {
5529 switch (cUNOPo->op_first->op_type) {
5531 /* This is needed for
5532 if (defined %stash::)
5533 to work. Do not break Tk.
5535 break; /* Globals via GV can be undef */
5537 case OP_AASSIGN: /* Is this a good idea? */
5538 Perl_warner(aTHX_ packWARN2(WARN_DEPRECATED, WARN_SYNTAX),
5539 "defined(@array) is deprecated");
5540 Perl_warner(aTHX_ packWARN2(WARN_DEPRECATED, WARN_SYNTAX),
5541 "\t(Maybe you should just omit the defined()?)\n");
5544 /* This is needed for
5545 if (defined %stash::)
5546 to work. Do not break Tk.
5548 break; /* Globals via GV can be undef */
5550 Perl_warner(aTHX_ packWARN2(WARN_DEPRECATED, WARN_SYNTAX),
5551 "defined(%%hash) is deprecated");
5552 Perl_warner(aTHX_ packWARN2(WARN_DEPRECATED, WARN_SYNTAX),
5553 "\t(Maybe you should just omit the defined()?)\n");
5564 Perl_ck_rfun(pTHX_ OP *o)
5566 OPCODE type = o->op_type;
5567 return refkids(ck_fun(o), type);
5571 Perl_ck_listiob(pTHX_ OP *o)
5575 kid = cLISTOPo->op_first;
5578 kid = cLISTOPo->op_first;
5580 if (kid->op_type == OP_PUSHMARK)
5581 kid = kid->op_sibling;
5582 if (kid && o->op_flags & OPf_STACKED)
5583 kid = kid->op_sibling;
5584 else if (kid && !kid->op_sibling) { /* print HANDLE; */
5585 if (kid->op_type == OP_CONST && kid->op_private & OPpCONST_BARE) {
5586 o->op_flags |= OPf_STACKED; /* make it a filehandle */
5587 kid = newUNOP(OP_RV2GV, OPf_REF, scalar(kid));
5588 cLISTOPo->op_first->op_sibling = kid;
5589 cLISTOPo->op_last = kid;
5590 kid = kid->op_sibling;
5595 append_elem(o->op_type, o, newDEFSVOP());
5601 Perl_ck_sassign(pTHX_ OP *o)
5603 OP *kid = cLISTOPo->op_first;
5604 /* has a disposable target? */
5605 if ((PL_opargs[kid->op_type] & OA_TARGLEX)
5606 && !(kid->op_flags & OPf_STACKED)
5607 /* Cannot steal the second time! */
5608 && !(kid->op_private & OPpTARGET_MY))
5610 OP *kkid = kid->op_sibling;
5612 /* Can just relocate the target. */
5613 if (kkid && kkid->op_type == OP_PADSV
5614 && !(kkid->op_private & OPpLVAL_INTRO))
5616 kid->op_targ = kkid->op_targ;
5618 /* Now we do not need PADSV and SASSIGN. */
5619 kid->op_sibling = o->op_sibling; /* NULL */
5620 cLISTOPo->op_first = NULL;
5623 kid->op_private |= OPpTARGET_MY; /* Used for context settings */
5631 Perl_ck_match(pTHX_ OP *o)
5633 o->op_private |= OPpRUNTIME;
5638 Perl_ck_method(pTHX_ OP *o)
5640 OP *kid = cUNOPo->op_first;
5641 if (kid->op_type == OP_CONST) {
5642 SV* sv = kSVOP->op_sv;
5643 if (!(strchr(SvPVX(sv), ':') || strchr(SvPVX(sv), '\''))) {
5645 if (!SvREADONLY(sv) || !SvFAKE(sv)) {
5646 sv = newSVpvn_share(SvPVX(sv), SvCUR(sv), 0);
5649 kSVOP->op_sv = Nullsv;
5651 cmop = newSVOP(OP_METHOD_NAMED, 0, sv);
5660 Perl_ck_null(pTHX_ OP *o)
5666 Perl_ck_open(pTHX_ OP *o)
5668 HV *table = GvHV(PL_hintgv);
5672 svp = hv_fetch(table, "open_IN", 7, FALSE);
5674 mode = mode_from_discipline(*svp);
5675 if (mode & O_BINARY)
5676 o->op_private |= OPpOPEN_IN_RAW;
5677 else if (mode & O_TEXT)
5678 o->op_private |= OPpOPEN_IN_CRLF;
5681 svp = hv_fetch(table, "open_OUT", 8, FALSE);
5683 mode = mode_from_discipline(*svp);
5684 if (mode & O_BINARY)
5685 o->op_private |= OPpOPEN_OUT_RAW;
5686 else if (mode & O_TEXT)
5687 o->op_private |= OPpOPEN_OUT_CRLF;
5690 if (o->op_type == OP_BACKTICK)
5693 /* In case of three-arg dup open remove strictness
5694 * from the last arg if it is a bareword. */
5695 OP *first = cLISTOPx(o)->op_first; /* The pushmark. */
5696 OP *last = cLISTOPx(o)->op_last; /* The bareword. */
5700 if ((last->op_type == OP_CONST) && /* The bareword. */
5701 (last->op_private & OPpCONST_BARE) &&
5702 (last->op_private & OPpCONST_STRICT) &&
5703 (oa = first->op_sibling) && /* The fh. */
5704 (oa = oa->op_sibling) && /* The mode. */
5705 SvPOK(((SVOP*)oa)->op_sv) &&
5706 (mode = SvPVX(((SVOP*)oa)->op_sv)) &&
5707 mode[0] == '>' && mode[1] == '&' && /* A dup open. */
5708 (last == oa->op_sibling)) /* The bareword. */
5709 last->op_private &= ~OPpCONST_STRICT;
5715 Perl_ck_repeat(pTHX_ OP *o)
5717 if (cBINOPo->op_first->op_flags & OPf_PARENS) {
5718 o->op_private |= OPpREPEAT_DOLIST;
5719 cBINOPo->op_first = force_list(cBINOPo->op_first);
5727 Perl_ck_require(pTHX_ OP *o)
5731 if (o->op_flags & OPf_KIDS) { /* Shall we supply missing .pm? */
5732 SVOP *kid = (SVOP*)cUNOPo->op_first;
5734 if (kid->op_type == OP_CONST && (kid->op_private & OPpCONST_BARE)) {
5736 for (s = SvPVX(kid->op_sv); *s; s++) {
5737 if (*s == ':' && s[1] == ':') {
5739 Move(s+2, s+1, strlen(s+2)+1, char);
5740 --SvCUR(kid->op_sv);
5743 if (SvREADONLY(kid->op_sv)) {
5744 SvREADONLY_off(kid->op_sv);
5745 sv_catpvn(kid->op_sv, ".pm", 3);
5746 SvREADONLY_on(kid->op_sv);
5749 sv_catpvn(kid->op_sv, ".pm", 3);
5753 /* handle override, if any */
5754 gv = gv_fetchpv("require", FALSE, SVt_PVCV);
5755 if (!(gv && GvCVu(gv) && GvIMPORTED_CV(gv)))
5756 gv = gv_fetchpv("CORE::GLOBAL::require", FALSE, SVt_PVCV);
5758 if (gv && GvCVu(gv) && GvIMPORTED_CV(gv)) {
5759 OP *kid = cUNOPo->op_first;
5760 cUNOPo->op_first = 0;
5762 return ck_subr(newUNOP(OP_ENTERSUB, OPf_STACKED,
5763 append_elem(OP_LIST, kid,
5764 scalar(newUNOP(OP_RV2CV, 0,
5773 Perl_ck_return(pTHX_ OP *o)
5776 if (CvLVALUE(PL_compcv)) {
5777 for (kid = cLISTOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
5778 mod(kid, OP_LEAVESUBLV);
5785 Perl_ck_retarget(pTHX_ OP *o)
5787 Perl_croak(aTHX_ "NOT IMPL LINE %d",__LINE__);
5794 Perl_ck_select(pTHX_ OP *o)
5797 if (o->op_flags & OPf_KIDS) {
5798 kid = cLISTOPo->op_first->op_sibling; /* get past pushmark */
5799 if (kid && kid->op_sibling) {
5800 o->op_type = OP_SSELECT;
5801 o->op_ppaddr = PL_ppaddr[OP_SSELECT];
5803 return fold_constants(o);
5807 kid = cLISTOPo->op_first->op_sibling; /* get past pushmark */
5808 if (kid && kid->op_type == OP_RV2GV)
5809 kid->op_private &= ~HINT_STRICT_REFS;
5814 Perl_ck_shift(pTHX_ OP *o)
5816 I32 type = o->op_type;
5818 if (!(o->op_flags & OPf_KIDS)) {
5822 #ifdef USE_5005THREADS
5823 if (!CvUNIQUE(PL_compcv)) {
5824 argop = newOP(OP_PADAV, OPf_REF);
5825 argop->op_targ = 0; /* PAD_SV(0) is @_ */
5828 argop = newUNOP(OP_RV2AV, 0,
5829 scalar(newGVOP(OP_GV, 0,
5830 gv_fetchpv("ARGV", TRUE, SVt_PVAV))));
5833 argop = newUNOP(OP_RV2AV, 0,
5834 scalar(newGVOP(OP_GV, 0, CvUNIQUE(PL_compcv) ? PL_argvgv : PL_defgv)));
5835 #endif /* USE_5005THREADS */
5836 return newUNOP(type, 0, scalar(argop));
5838 return scalar(modkids(ck_fun(o), type));
5842 Perl_ck_sort(pTHX_ OP *o)
5846 if (o->op_type == OP_SORT && o->op_flags & OPf_STACKED)
5848 firstkid = cLISTOPo->op_first->op_sibling; /* get past pushmark */
5849 if (o->op_flags & OPf_STACKED) { /* may have been cleared */
5851 OP *kid = cUNOPx(firstkid)->op_first; /* get past null */
5853 if (kid->op_type == OP_SCOPE || kid->op_type == OP_LEAVE) {
5855 if (kid->op_type == OP_SCOPE) {
5859 else if (kid->op_type == OP_LEAVE) {
5860 if (o->op_type == OP_SORT) {
5861 op_null(kid); /* wipe out leave */
5864 for (k = kLISTOP->op_first->op_next; k; k = k->op_next) {
5865 if (k->op_next == kid)
5867 /* don't descend into loops */
5868 else if (k->op_type == OP_ENTERLOOP
5869 || k->op_type == OP_ENTERITER)
5871 k = cLOOPx(k)->op_lastop;
5876 kid->op_next = 0; /* just disconnect the leave */
5877 k = kLISTOP->op_first;
5882 if (o->op_type == OP_SORT) {
5883 /* provide scalar context for comparison function/block */
5889 o->op_flags |= OPf_SPECIAL;
5891 else if (kid->op_type == OP_RV2SV || kid->op_type == OP_PADSV)
5894 firstkid = firstkid->op_sibling;
5897 /* provide list context for arguments */
5898 if (o->op_type == OP_SORT)
5905 S_simplify_sort(pTHX_ OP *o)
5907 register OP *kid = cLISTOPo->op_first->op_sibling; /* get past pushmark */
5911 if (!(o->op_flags & OPf_STACKED))
5913 GvMULTI_on(gv_fetchpv("a", TRUE, SVt_PV));
5914 GvMULTI_on(gv_fetchpv("b", TRUE, SVt_PV));
5915 kid = kUNOP->op_first; /* get past null */
5916 if (kid->op_type != OP_SCOPE)
5918 kid = kLISTOP->op_last; /* get past scope */
5919 switch(kid->op_type) {
5927 k = kid; /* remember this node*/
5928 if (kBINOP->op_first->op_type != OP_RV2SV)
5930 kid = kBINOP->op_first; /* get past cmp */
5931 if (kUNOP->op_first->op_type != OP_GV)
5933 kid = kUNOP->op_first; /* get past rv2sv */
5935 if (GvSTASH(gv) != PL_curstash)
5937 if (strEQ(GvNAME(gv), "a"))
5939 else if (strEQ(GvNAME(gv), "b"))
5943 kid = k; /* back to cmp */
5944 if (kBINOP->op_last->op_type != OP_RV2SV)
5946 kid = kBINOP->op_last; /* down to 2nd arg */
5947 if (kUNOP->op_first->op_type != OP_GV)
5949 kid = kUNOP->op_first; /* get past rv2sv */
5951 if (GvSTASH(gv) != PL_curstash
5953 ? strNE(GvNAME(gv), "a")
5954 : strNE(GvNAME(gv), "b")))
5956 o->op_flags &= ~(OPf_STACKED | OPf_SPECIAL);
5958 o->op_private |= OPpSORT_REVERSE;
5959 if (k->op_type == OP_NCMP)
5960 o->op_private |= OPpSORT_NUMERIC;
5961 if (k->op_type == OP_I_NCMP)
5962 o->op_private |= OPpSORT_NUMERIC | OPpSORT_INTEGER;
5963 kid = cLISTOPo->op_first->op_sibling;
5964 cLISTOPo->op_first->op_sibling = kid->op_sibling; /* bypass old block */
5965 op_free(kid); /* then delete it */
5969 Perl_ck_split(pTHX_ OP *o)
5973 if (o->op_flags & OPf_STACKED)
5974 return no_fh_allowed(o);
5976 kid = cLISTOPo->op_first;
5977 if (kid->op_type != OP_NULL)
5978 Perl_croak(aTHX_ "panic: ck_split");
5979 kid = kid->op_sibling;
5980 op_free(cLISTOPo->op_first);
5981 cLISTOPo->op_first = kid;
5983 cLISTOPo->op_first = kid = newSVOP(OP_CONST, 0, newSVpvn(" ", 1));
5984 cLISTOPo->op_last = kid; /* There was only one element previously */
5987 if (kid->op_type != OP_MATCH || kid->op_flags & OPf_STACKED) {
5988 OP *sibl = kid->op_sibling;
5989 kid->op_sibling = 0;
5990 kid = pmruntime( newPMOP(OP_MATCH, OPf_SPECIAL), kid, Nullop);
5991 if (cLISTOPo->op_first == cLISTOPo->op_last)
5992 cLISTOPo->op_last = kid;
5993 cLISTOPo->op_first = kid;
5994 kid->op_sibling = sibl;
5997 kid->op_type = OP_PUSHRE;
5998 kid->op_ppaddr = PL_ppaddr[OP_PUSHRE];
6000 if (ckWARN(WARN_REGEXP) && ((PMOP *)kid)->op_pmflags & PMf_GLOBAL) {
6001 Perl_warner(aTHX_ packWARN(WARN_REGEXP),
6002 "Use of /g modifier is meaningless in split");
6005 if (!kid->op_sibling)
6006 append_elem(OP_SPLIT, o, newDEFSVOP());
6008 kid = kid->op_sibling;
6011 if (!kid->op_sibling)
6012 append_elem(OP_SPLIT, o, newSVOP(OP_CONST, 0, newSViv(0)));
6014 kid = kid->op_sibling;
6017 if (kid->op_sibling)
6018 return too_many_arguments(o,OP_DESC(o));
6024 Perl_ck_join(pTHX_ OP *o)
6026 if (ckWARN(WARN_SYNTAX)) {
6027 OP *kid = cLISTOPo->op_first->op_sibling;
6028 if (kid && kid->op_type == OP_MATCH) {
6029 char *pmstr = "STRING";
6030 if (PM_GETRE(kPMOP))
6031 pmstr = PM_GETRE(kPMOP)->precomp;
6032 Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
6033 "/%s/ should probably be written as \"%s\"",
6041 Perl_ck_subr(pTHX_ OP *o)
6043 OP *prev = ((cUNOPo->op_first->op_sibling)
6044 ? cUNOPo : ((UNOP*)cUNOPo->op_first))->op_first;
6045 OP *o2 = prev->op_sibling;
6052 I32 contextclass = 0;
6056 o->op_private |= OPpENTERSUB_HASTARG;
6057 for (cvop = o2; cvop->op_sibling; cvop = cvop->op_sibling) ;
6058 if (cvop->op_type == OP_RV2CV) {
6060 o->op_private |= (cvop->op_private & OPpENTERSUB_AMPER);
6061 op_null(cvop); /* disable rv2cv */
6062 tmpop = (SVOP*)((UNOP*)cvop)->op_first;
6063 if (tmpop->op_type == OP_GV && !(o->op_private & OPpENTERSUB_AMPER)) {
6064 GV *gv = cGVOPx_gv(tmpop);
6067 tmpop->op_private |= OPpEARLY_CV;
6068 else if (SvPOK(cv)) {
6069 namegv = CvANON(cv) ? gv : CvGV(cv);
6070 proto = SvPV((SV*)cv, n_a);
6074 else if (cvop->op_type == OP_METHOD || cvop->op_type == OP_METHOD_NAMED) {
6075 if (o2->op_type == OP_CONST)
6076 o2->op_private &= ~OPpCONST_STRICT;
6077 else if (o2->op_type == OP_LIST) {
6078 OP *o = ((UNOP*)o2)->op_first->op_sibling;
6079 if (o && o->op_type == OP_CONST)
6080 o->op_private &= ~OPpCONST_STRICT;
6083 o->op_private |= (PL_hints & HINT_STRICT_REFS);
6084 if (PERLDB_SUB && PL_curstash != PL_debstash)
6085 o->op_private |= OPpENTERSUB_DB;
6086 while (o2 != cvop) {
6090 return too_many_arguments(o, gv_ename(namegv));
6108 if (o2->op_type != OP_REFGEN && o2->op_type != OP_UNDEF)
6110 arg == 1 ? "block or sub {}" : "sub {}",
6111 gv_ename(namegv), o2);
6114 /* '*' allows any scalar type, including bareword */
6117 if (o2->op_type == OP_RV2GV)
6118 goto wrapref; /* autoconvert GLOB -> GLOBref */
6119 else if (o2->op_type == OP_CONST)
6120 o2->op_private &= ~OPpCONST_STRICT;
6121 else if (o2->op_type == OP_ENTERSUB) {
6122 /* accidental subroutine, revert to bareword */
6123 OP *gvop = ((UNOP*)o2)->op_first;
6124 if (gvop && gvop->op_type == OP_NULL) {
6125 gvop = ((UNOP*)gvop)->op_first;
6127 for (; gvop->op_sibling; gvop = gvop->op_sibling)
6130 (gvop->op_private & OPpENTERSUB_NOPAREN) &&
6131 (gvop = ((UNOP*)gvop)->op_first) &&
6132 gvop->op_type == OP_GV)
6134 GV *gv = cGVOPx_gv(gvop);
6135 OP *sibling = o2->op_sibling;
6136 SV *n = newSVpvn("",0);
6138 gv_fullname3(n, gv, "");
6139 if (SvCUR(n)>6 && strnEQ(SvPVX(n),"main::",6))
6140 sv_chop(n, SvPVX(n)+6);
6141 o2 = newSVOP(OP_CONST, 0, n);
6142 prev->op_sibling = o2;
6143 o2->op_sibling = sibling;
6159 if (contextclass++ == 0) {
6160 e = strchr(proto, ']');
6161 if (!e || e == proto)
6174 while (*--p != '[');
6175 bad_type(arg, Perl_form(aTHX_ "one of %s", p),
6176 gv_ename(namegv), o2);
6182 if (o2->op_type == OP_RV2GV)
6185 bad_type(arg, "symbol", gv_ename(namegv), o2);
6188 if (o2->op_type == OP_ENTERSUB)
6191 bad_type(arg, "subroutine entry", gv_ename(namegv), o2);
6194 if (o2->op_type == OP_RV2SV ||
6195 o2->op_type == OP_PADSV ||
6196 o2->op_type == OP_HELEM ||
6197 o2->op_type == OP_AELEM ||
6198 o2->op_type == OP_THREADSV)
6201 bad_type(arg, "scalar", gv_ename(namegv), o2);
6204 if (o2->op_type == OP_RV2AV ||
6205 o2->op_type == OP_PADAV)
6208 bad_type(arg, "array", gv_ename(namegv), o2);
6211 if (o2->op_type == OP_RV2HV ||
6212 o2->op_type == OP_PADHV)
6215 bad_type(arg, "hash", gv_ename(namegv), o2);
6220 OP* sib = kid->op_sibling;
6221 kid->op_sibling = 0;
6222 o2 = newUNOP(OP_REFGEN, 0, kid);
6223 o2->op_sibling = sib;
6224 prev->op_sibling = o2;
6226 if (contextclass && e) {
6241 Perl_croak(aTHX_ "Malformed prototype for %s: %"SVf,
6242 gv_ename(namegv), cv);
6247 mod(o2, OP_ENTERSUB);
6249 o2 = o2->op_sibling;
6251 if (proto && !optional &&
6252 (*proto && *proto != '@' && *proto != '%' && *proto != ';'))
6253 return too_few_arguments(o, gv_ename(namegv));
6258 Perl_ck_svconst(pTHX_ OP *o)
6260 SvREADONLY_on(cSVOPo->op_sv);
6265 Perl_ck_trunc(pTHX_ OP *o)
6267 if (o->op_flags & OPf_KIDS) {
6268 SVOP *kid = (SVOP*)cUNOPo->op_first;
6270 if (kid->op_type == OP_NULL)
6271 kid = (SVOP*)kid->op_sibling;
6272 if (kid && kid->op_type == OP_CONST &&
6273 (kid->op_private & OPpCONST_BARE))
6275 o->op_flags |= OPf_SPECIAL;
6276 kid->op_private &= ~OPpCONST_STRICT;
6283 Perl_ck_substr(pTHX_ OP *o)
6286 if ((o->op_flags & OPf_KIDS) && o->op_private == 4) {
6287 OP *kid = cLISTOPo->op_first;
6289 if (kid->op_type == OP_NULL)
6290 kid = kid->op_sibling;
6292 kid->op_flags |= OPf_MOD;
6298 /* A peephole optimizer. We visit the ops in the order they're to execute. */
6301 Perl_peep(pTHX_ register OP *o)
6303 register OP* oldop = 0;
6306 if (!o || o->op_seq)
6310 SAVEVPTR(PL_curcop);
6311 for (; o; o = o->op_next) {
6314 /* The special value -1 is used by the B::C compiler backend to indicate
6315 * that an op is statically defined and should not be freed */
6316 if (!PL_op_seqmax || PL_op_seqmax == (U16)-1)
6319 switch (o->op_type) {
6323 PL_curcop = ((COP*)o); /* for warnings */
6324 o->op_seq = PL_op_seqmax++;
6328 if (cSVOPo->op_private & OPpCONST_STRICT)
6329 no_bareword_allowed(o);
6331 case OP_METHOD_NAMED:
6332 /* Relocate sv to the pad for thread safety.
6333 * Despite being a "constant", the SV is written to,
6334 * for reference counts, sv_upgrade() etc. */
6336 PADOFFSET ix = pad_alloc(OP_CONST, SVs_PADTMP);
6337 if (o->op_type == OP_CONST && SvPADTMP(cSVOPo->op_sv)) {
6338 /* If op_sv is already a PADTMP then it is being used by
6339 * some pad, so make a copy. */
6340 sv_setsv(PAD_SVl(ix),cSVOPo->op_sv);
6341 SvREADONLY_on(PAD_SVl(ix));
6342 SvREFCNT_dec(cSVOPo->op_sv);
6345 SvREFCNT_dec(PAD_SVl(ix));
6346 SvPADTMP_on(cSVOPo->op_sv);
6347 PAD_SETSV(ix, cSVOPo->op_sv);
6348 /* XXX I don't know how this isn't readonly already. */
6349 SvREADONLY_on(PAD_SVl(ix));
6351 cSVOPo->op_sv = Nullsv;
6355 o->op_seq = PL_op_seqmax++;
6359 if (o->op_next && o->op_next->op_type == OP_STRINGIFY) {
6360 if (o->op_next->op_private & OPpTARGET_MY) {
6361 if (o->op_flags & OPf_STACKED) /* chained concats */
6362 goto ignore_optimization;
6364 /* assert(PL_opargs[o->op_type] & OA_TARGLEX); */
6365 o->op_targ = o->op_next->op_targ;
6366 o->op_next->op_targ = 0;
6367 o->op_private |= OPpTARGET_MY;
6370 op_null(o->op_next);
6372 ignore_optimization:
6373 o->op_seq = PL_op_seqmax++;
6376 if ((o->op_flags & OPf_WANT) != OPf_WANT_LIST) {
6377 o->op_seq = PL_op_seqmax++;
6378 break; /* Scalar stub must produce undef. List stub is noop */
6382 if (o->op_targ == OP_NEXTSTATE
6383 || o->op_targ == OP_DBSTATE
6384 || o->op_targ == OP_SETSTATE)
6386 PL_curcop = ((COP*)o);
6388 /* XXX: We avoid setting op_seq here to prevent later calls
6389 to peep() from mistakenly concluding that optimisation
6390 has already occurred. This doesn't fix the real problem,
6391 though (See 20010220.007). AMS 20010719 */
6392 if (oldop && o->op_next) {
6393 oldop->op_next = o->op_next;
6401 if (oldop && o->op_next) {
6402 oldop->op_next = o->op_next;
6405 o->op_seq = PL_op_seqmax++;
6409 if (o->op_next->op_type == OP_RV2SV) {
6410 if (!(o->op_next->op_private & OPpDEREF)) {
6411 op_null(o->op_next);
6412 o->op_private |= o->op_next->op_private & (OPpLVAL_INTRO
6414 o->op_next = o->op_next->op_next;
6415 o->op_type = OP_GVSV;
6416 o->op_ppaddr = PL_ppaddr[OP_GVSV];
6419 else if (o->op_next->op_type == OP_RV2AV) {
6420 OP* pop = o->op_next->op_next;
6422 if (pop && pop->op_type == OP_CONST &&
6423 (PL_op = pop->op_next) &&
6424 pop->op_next->op_type == OP_AELEM &&
6425 !(pop->op_next->op_private &
6426 (OPpLVAL_INTRO|OPpLVAL_DEFER|OPpDEREF|OPpMAYBE_LVSUB)) &&
6427 (i = SvIV(((SVOP*)pop)->op_sv) - PL_curcop->cop_arybase)
6432 op_null(o->op_next);
6433 op_null(pop->op_next);
6435 o->op_flags |= pop->op_next->op_flags & OPf_MOD;
6436 o->op_next = pop->op_next->op_next;
6437 o->op_type = OP_AELEMFAST;
6438 o->op_ppaddr = PL_ppaddr[OP_AELEMFAST];
6439 o->op_private = (U8)i;
6444 else if ((o->op_private & OPpEARLY_CV) && ckWARN(WARN_PROTOTYPE)) {
6446 if (SvTYPE(gv) == SVt_PVGV && GvCV(gv) && SvPVX(GvCV(gv))) {
6447 /* XXX could check prototype here instead of just carping */
6448 SV *sv = sv_newmortal();
6449 gv_efullname3(sv, gv, Nullch);
6450 Perl_warner(aTHX_ packWARN(WARN_PROTOTYPE),
6451 "%"SVf"() called too early to check prototype",
6455 else if (o->op_next->op_type == OP_READLINE
6456 && o->op_next->op_next->op_type == OP_CONCAT
6457 && (o->op_next->op_next->op_flags & OPf_STACKED))
6459 /* Turn "$a .= <FH>" into an OP_RCATLINE. AMS 20010917 */
6460 o->op_type = OP_RCATLINE;
6461 o->op_flags |= OPf_STACKED;
6462 o->op_ppaddr = PL_ppaddr[OP_RCATLINE];
6463 op_null(o->op_next->op_next);
6464 op_null(o->op_next);
6467 o->op_seq = PL_op_seqmax++;
6478 o->op_seq = PL_op_seqmax++;
6479 while (cLOGOP->op_other->op_type == OP_NULL)
6480 cLOGOP->op_other = cLOGOP->op_other->op_next;
6481 peep(cLOGOP->op_other); /* Recursive calls are not replaced by fptr calls */
6486 o->op_seq = PL_op_seqmax++;
6487 while (cLOOP->op_redoop->op_type == OP_NULL)
6488 cLOOP->op_redoop = cLOOP->op_redoop->op_next;
6489 peep(cLOOP->op_redoop);
6490 while (cLOOP->op_nextop->op_type == OP_NULL)
6491 cLOOP->op_nextop = cLOOP->op_nextop->op_next;
6492 peep(cLOOP->op_nextop);
6493 while (cLOOP->op_lastop->op_type == OP_NULL)
6494 cLOOP->op_lastop = cLOOP->op_lastop->op_next;
6495 peep(cLOOP->op_lastop);
6501 o->op_seq = PL_op_seqmax++;
6502 while (cPMOP->op_pmreplstart &&
6503 cPMOP->op_pmreplstart->op_type == OP_NULL)
6504 cPMOP->op_pmreplstart = cPMOP->op_pmreplstart->op_next;
6505 peep(cPMOP->op_pmreplstart);
6509 o->op_seq = PL_op_seqmax++;
6510 if (ckWARN(WARN_SYNTAX) && o->op_next
6511 && o->op_next->op_type == OP_NEXTSTATE) {
6512 if (o->op_next->op_sibling &&
6513 o->op_next->op_sibling->op_type != OP_EXIT &&
6514 o->op_next->op_sibling->op_type != OP_WARN &&
6515 o->op_next->op_sibling->op_type != OP_DIE) {
6516 line_t oldline = CopLINE(PL_curcop);
6518 CopLINE_set(PL_curcop, CopLINE((COP*)o->op_next));
6519 Perl_warner(aTHX_ packWARN(WARN_EXEC),
6520 "Statement unlikely to be reached");
6521 Perl_warner(aTHX_ packWARN(WARN_EXEC),
6522 "\t(Maybe you meant system() when you said exec()?)\n");
6523 CopLINE_set(PL_curcop, oldline);
6532 SV **svp, **indsvp, *sv;
6537 o->op_seq = PL_op_seqmax++;
6539 if (((BINOP*)o)->op_last->op_type != OP_CONST)
6542 /* Make the CONST have a shared SV */
6543 svp = cSVOPx_svp(((BINOP*)o)->op_last);
6544 if ((!SvFAKE(sv = *svp) || !SvREADONLY(sv)) && !IS_PADCONST(sv)) {
6545 key = SvPV(sv, keylen);
6546 lexname = newSVpvn_share(key,
6547 SvUTF8(sv) ? -(I32)keylen : keylen,
6553 if ((o->op_private & (OPpLVAL_INTRO)))
6556 rop = (UNOP*)((BINOP*)o)->op_first;
6557 if (rop->op_type != OP_RV2HV || rop->op_first->op_type != OP_PADSV)
6559 lexname = *av_fetch(PL_comppad_name, rop->op_first->op_targ, TRUE);
6560 if (!(SvFLAGS(lexname) & SVpad_TYPED))
6562 fields = (GV**)hv_fetch(SvSTASH(lexname), "FIELDS", 6, FALSE);
6563 if (!fields || !GvHV(*fields))
6565 key = SvPV(*svp, keylen);
6566 indsvp = hv_fetch(GvHV(*fields), key,
6567 SvUTF8(*svp) ? -(I32)keylen : keylen, FALSE);
6569 Perl_croak(aTHX_ "No such pseudo-hash field \"%s\" in variable %s of type %s",
6570 key, SvPV(lexname, n_a), HvNAME(SvSTASH(lexname)));
6572 ind = SvIV(*indsvp);
6574 Perl_croak(aTHX_ "Bad index while coercing array into hash");
6575 rop->op_type = OP_RV2AV;
6576 rop->op_ppaddr = PL_ppaddr[OP_RV2AV];
6577 o->op_type = OP_AELEM;
6578 o->op_ppaddr = PL_ppaddr[OP_AELEM];
6580 if (SvREADONLY(*svp))
6582 SvFLAGS(sv) |= (SvFLAGS(*svp)
6583 & (SVs_PADBUSY|SVs_PADTMP|SVs_PADMY));
6593 SV **svp, **indsvp, *sv;
6597 SVOP *first_key_op, *key_op;
6599 o->op_seq = PL_op_seqmax++;
6600 if ((o->op_private & (OPpLVAL_INTRO))
6601 /* I bet there's always a pushmark... */
6602 || ((LISTOP*)o)->op_first->op_sibling->op_type != OP_LIST)
6603 /* hmmm, no optimization if list contains only one key. */
6605 rop = (UNOP*)((LISTOP*)o)->op_last;
6606 if (rop->op_type != OP_RV2HV || rop->op_first->op_type != OP_PADSV)
6608 lexname = *av_fetch(PL_comppad_name, rop->op_first->op_targ, TRUE);
6609 if (!(SvFLAGS(lexname) & SVpad_TYPED))
6611 fields = (GV**)hv_fetch(SvSTASH(lexname), "FIELDS", 6, FALSE);
6612 if (!fields || !GvHV(*fields))
6614 /* Again guessing that the pushmark can be jumped over.... */
6615 first_key_op = (SVOP*)((LISTOP*)((LISTOP*)o)->op_first->op_sibling)
6616 ->op_first->op_sibling;
6617 /* Check that the key list contains only constants. */
6618 for (key_op = first_key_op; key_op;
6619 key_op = (SVOP*)key_op->op_sibling)
6620 if (key_op->op_type != OP_CONST)
6624 rop->op_type = OP_RV2AV;
6625 rop->op_ppaddr = PL_ppaddr[OP_RV2AV];
6626 o->op_type = OP_ASLICE;
6627 o->op_ppaddr = PL_ppaddr[OP_ASLICE];
6628 for (key_op = first_key_op; key_op;
6629 key_op = (SVOP*)key_op->op_sibling) {
6630 svp = cSVOPx_svp(key_op);
6631 key = SvPV(*svp, keylen);
6632 indsvp = hv_fetch(GvHV(*fields), key,
6633 SvUTF8(*svp) ? -(I32)keylen : keylen, FALSE);
6635 Perl_croak(aTHX_ "No such pseudo-hash field \"%s\" "
6636 "in variable %s of type %s",
6637 key, SvPV(lexname, n_a), HvNAME(SvSTASH(lexname)));
6639 ind = SvIV(*indsvp);
6641 Perl_croak(aTHX_ "Bad index while coercing array into hash");
6643 if (SvREADONLY(*svp))
6645 SvFLAGS(sv) |= (SvFLAGS(*svp)
6646 & (SVs_PADBUSY|SVs_PADTMP|SVs_PADMY));
6654 o->op_seq = PL_op_seqmax++;
6664 char* Perl_custom_op_name(pTHX_ OP* o)
6666 IV index = PTR2IV(o->op_ppaddr);
6670 if (!PL_custom_op_names) /* This probably shouldn't happen */
6671 return PL_op_name[OP_CUSTOM];
6673 keysv = sv_2mortal(newSViv(index));
6675 he = hv_fetch_ent(PL_custom_op_names, keysv, 0, 0);
6677 return PL_op_name[OP_CUSTOM]; /* Don't know who you are */
6679 return SvPV_nolen(HeVAL(he));
6682 char* Perl_custom_op_desc(pTHX_ OP* o)
6684 IV index = PTR2IV(o->op_ppaddr);
6688 if (!PL_custom_op_descs)
6689 return PL_op_desc[OP_CUSTOM];
6691 keysv = sv_2mortal(newSViv(index));
6693 he = hv_fetch_ent(PL_custom_op_descs, keysv, 0, 0);
6695 return PL_op_desc[OP_CUSTOM];
6697 return SvPV_nolen(HeVAL(he));
6703 /* Efficient sub that returns a constant scalar value. */
6705 const_sv_xsub(pTHX_ CV* cv)
6710 Perl_croak(aTHX_ "usage: %s::%s()",
6711 HvNAME(GvSTASH(CvGV(cv))), GvNAME(CvGV(cv)));
6715 ST(0) = (SV*)XSANY.any_ptr;