3 * Copyright (C) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
4 * 2000, 2001, 2002, 2003, by Larry Wall and others
6 * You may distribute under the terms of either the GNU General Public
7 * License or the Artistic License, as specified in the README file.
12 * "You see: Mr. Drogo, he married poor Miss Primula Brandybuck. She was
13 * our Mr. Bilbo's first cousin on the mother's side (her mother being the
14 * youngest of the Old Took's daughters); and Mr. Drogo was his second
15 * cousin. So Mr. Frodo is his first *and* second cousin, once removed
16 * either way, as the saying is, if you follow me." --the Gaffer
25 #define CALL_PEEP(o) CALL_FPTR(PL_peepp)(aTHX_ o)
27 #if defined(PL_OP_SLAB_ALLOC)
29 #ifndef PERL_SLAB_SIZE
30 #define PERL_SLAB_SIZE 2048
34 Perl_Slab_Alloc(pTHX_ int m, size_t sz)
37 * To make incrementing use count easy PL_OpSlab is an I32 *
38 * To make inserting the link to slab PL_OpPtr is I32 **
39 * So compute size in units of sizeof(I32 *) as that is how Pl_OpPtr increments
40 * Add an overhead for pointer to slab and round up as a number of pointers
42 sz = (sz + 2*sizeof(I32 *) -1)/sizeof(I32 *);
43 if ((PL_OpSpace -= sz) < 0) {
44 PL_OpPtr = (I32 **) PerlMemShared_malloc(PERL_SLAB_SIZE*sizeof(I32*));
48 Zero(PL_OpPtr,PERL_SLAB_SIZE,I32 **);
49 /* We reserve the 0'th I32 sized chunk as a use count */
50 PL_OpSlab = (I32 *) PL_OpPtr;
51 /* Reduce size by the use count word, and by the size we need.
52 * Latter is to mimic the '-=' in the if() above
54 PL_OpSpace = PERL_SLAB_SIZE - (sizeof(I32)+sizeof(I32 **)-1)/sizeof(I32 **) - sz;
55 /* Allocation pointer starts at the top.
56 Theory: because we build leaves before trunk allocating at end
57 means that at run time access is cache friendly upward
59 PL_OpPtr += PERL_SLAB_SIZE;
61 assert( PL_OpSpace >= 0 );
62 /* Move the allocation pointer down */
64 assert( PL_OpPtr > (I32 **) PL_OpSlab );
65 *PL_OpPtr = PL_OpSlab; /* Note which slab it belongs to */
66 (*PL_OpSlab)++; /* Increment use count of slab */
67 assert( PL_OpPtr+sz <= ((I32 **) PL_OpSlab + PERL_SLAB_SIZE) );
68 assert( *PL_OpSlab > 0 );
69 return (void *)(PL_OpPtr + 1);
73 Perl_Slab_Free(pTHX_ void *op)
75 I32 **ptr = (I32 **) op;
77 assert( ptr-1 > (I32 **) slab );
78 assert( ptr < ( (I32 **) slab + PERL_SLAB_SIZE) );
82 # define PerlMemShared PerlMem
85 PerlMemShared_free(slab);
86 if (slab == PL_OpSlab) {
93 * In the following definition, the ", Nullop" is just to make the compiler
94 * think the expression is of the right type: croak actually does a Siglongjmp.
96 #define CHECKOP(type,o) \
97 ((PL_op_mask && PL_op_mask[type]) \
98 ? ( op_free((OP*)o), \
99 Perl_croak(aTHX_ "'%s' trapped by operation mask", PL_op_desc[type]), \
101 : CALL_FPTR(PL_check[type])(aTHX_ (OP*)o))
103 #define RETURN_UNLIMITED_NUMBER (PERL_INT_MAX / 2)
106 S_gv_ename(pTHX_ GV *gv)
109 SV* tmpsv = sv_newmortal();
110 gv_efullname3(tmpsv, gv, Nullch);
111 return SvPV(tmpsv,n_a);
115 S_no_fh_allowed(pTHX_ OP *o)
117 yyerror(Perl_form(aTHX_ "Missing comma after first argument to %s function",
123 S_too_few_arguments(pTHX_ OP *o, char *name)
125 yyerror(Perl_form(aTHX_ "Not enough arguments for %s", name));
130 S_too_many_arguments(pTHX_ OP *o, char *name)
132 yyerror(Perl_form(aTHX_ "Too many arguments for %s", name));
137 S_bad_type(pTHX_ I32 n, char *t, char *name, OP *kid)
139 yyerror(Perl_form(aTHX_ "Type of arg %d to %s must be %s (not %s)",
140 (int)n, name, t, OP_DESC(kid)));
144 S_no_bareword_allowed(pTHX_ OP *o)
146 qerror(Perl_mess(aTHX_
147 "Bareword \"%"SVf"\" not allowed while \"strict subs\" in use",
151 /* "register" allocation */
154 Perl_allocmy(pTHX_ char *name)
158 /* complain about "my $_" etc etc */
159 if (!(PL_in_my == KEY_our ||
161 (USE_UTF8_IN_NAMES && UTF8_IS_START(name[1])) ||
162 (name[1] == '_' && (int)strlen(name) > 2)))
164 if (!isPRINT(name[1]) || strchr("\t\n\r\f", name[1])) {
165 /* 1999-02-27 mjd@plover.com */
167 p = strchr(name, '\0');
168 /* The next block assumes the buffer is at least 205 chars
169 long. At present, it's always at least 256 chars. */
171 strcpy(name+200, "...");
177 /* Move everything else down one character */
178 for (; p-name > 2; p--)
180 name[2] = toCTRL(name[1]);
183 yyerror(Perl_form(aTHX_ "Can't use global %s in \"my\"",name));
185 /* check for duplicate declaration */
187 (bool)(PL_in_my == KEY_our),
188 (PL_curstash ? PL_curstash : PL_defstash)
191 if (PL_in_my_stash && *name != '$') {
192 yyerror(Perl_form(aTHX_
193 "Can't declare class for non-scalar %s in \"%s\"",
194 name, PL_in_my == KEY_our ? "our" : "my"));
197 /* allocate a spare slot and store the name in that slot */
199 off = pad_add_name(name,
202 ? (PL_curstash ? PL_curstash : PL_defstash)
211 #ifdef USE_5005THREADS
212 /* find_threadsv is not reentrant */
214 Perl_find_threadsv(pTHX_ const char *name)
219 /* We currently only handle names of a single character */
220 p = strchr(PL_threadsv_names, *name);
223 key = p - PL_threadsv_names;
224 MUTEX_LOCK(&thr->mutex);
225 svp = av_fetch(thr->threadsv, key, FALSE);
227 MUTEX_UNLOCK(&thr->mutex);
229 SV *sv = NEWSV(0, 0);
230 av_store(thr->threadsv, key, sv);
231 thr->threadsvp = AvARRAY(thr->threadsv);
232 MUTEX_UNLOCK(&thr->mutex);
234 * Some magic variables used to be automagically initialised
235 * in gv_fetchpv. Those which are now per-thread magicals get
236 * initialised here instead.
242 sv_setpv(sv, "\034");
243 sv_magic(sv, 0, PERL_MAGIC_sv, name, 1);
248 PL_sawampersand = TRUE;
262 /* XXX %! tied to Errno.pm needs to be added here.
263 * See gv_fetchpv(). */
267 sv_magic(sv, 0, PERL_MAGIC_sv, name, 1);
269 DEBUG_S(PerlIO_printf(Perl_error_log,
270 "find_threadsv: new SV %p for $%s%c\n",
271 sv, (*name < 32) ? "^" : "",
272 (*name < 32) ? toCTRL(*name) : *name));
276 #endif /* USE_5005THREADS */
281 Perl_op_free(pTHX_ OP *o)
283 register OP *kid, *nextkid;
286 if (!o || o->op_seq == (U16)-1)
289 if (o->op_private & OPpREFCOUNTED) {
290 switch (o->op_type) {
298 if (OpREFCNT_dec(o)) {
309 if (o->op_flags & OPf_KIDS) {
310 for (kid = cUNOPo->op_first; kid; kid = nextkid) {
311 nextkid = kid->op_sibling; /* Get before next freeing kid */
317 type = (OPCODE)o->op_targ;
319 /* COP* is not cleared by op_clear() so that we may track line
320 * numbers etc even after null() */
321 if (type == OP_NEXTSTATE || type == OP_SETSTATE || type == OP_DBSTATE)
329 Perl_op_clear(pTHX_ OP *o)
332 switch (o->op_type) {
333 case OP_NULL: /* Was holding old type, if any. */
334 case OP_ENTEREVAL: /* Was holding hints. */
335 #ifdef USE_5005THREADS
336 case OP_THREADSV: /* Was holding index into thr->threadsv AV. */
340 #ifdef USE_5005THREADS
342 if (!(o->op_flags & OPf_SPECIAL))
345 #endif /* USE_5005THREADS */
347 if (!(o->op_flags & OPf_REF)
348 || (PL_check[o->op_type] != MEMBER_TO_FPTR(Perl_ck_ftst)))
355 if (cPADOPo->op_padix > 0) {
356 /* No GvIN_PAD_off(cGVOPo_gv) here, because other references
357 * may still exist on the pad */
358 pad_swipe(cPADOPo->op_padix, TRUE);
359 cPADOPo->op_padix = 0;
362 SvREFCNT_dec(cSVOPo->op_sv);
363 cSVOPo->op_sv = Nullsv;
366 case OP_METHOD_NAMED:
368 SvREFCNT_dec(cSVOPo->op_sv);
369 cSVOPo->op_sv = Nullsv;
372 Even if op_clear does a pad_free for the target of the op,
373 pad_free doesn't actually remove the sv that exists in the bad
374 instead it lives on. This results in that it could be reused as
375 a target later on when the pad was reallocated.
378 pad_swipe(o->op_targ,1);
387 if (o->op_flags & (OPf_SPECIAL|OPf_STACKED|OPf_KIDS))
391 if (o->op_private & (OPpTRANS_FROM_UTF|OPpTRANS_TO_UTF)) {
392 SvREFCNT_dec(cSVOPo->op_sv);
393 cSVOPo->op_sv = Nullsv;
396 Safefree(cPVOPo->op_pv);
397 cPVOPo->op_pv = Nullch;
401 op_free(cPMOPo->op_pmreplroot);
405 if (INT2PTR(PADOFFSET, cPMOPo->op_pmreplroot)) {
406 /* No GvIN_PAD_off here, because other references may still
407 * exist on the pad */
408 pad_swipe(INT2PTR(PADOFFSET, cPMOPo->op_pmreplroot), TRUE);
411 SvREFCNT_dec((SV*)cPMOPo->op_pmreplroot);
418 HV *pmstash = PmopSTASH(cPMOPo);
419 if (pmstash && SvREFCNT(pmstash)) {
420 PMOP *pmop = HvPMROOT(pmstash);
421 PMOP *lastpmop = NULL;
423 if (cPMOPo == pmop) {
425 lastpmop->op_pmnext = pmop->op_pmnext;
427 HvPMROOT(pmstash) = pmop->op_pmnext;
431 pmop = pmop->op_pmnext;
434 PmopSTASH_free(cPMOPo);
436 cPMOPo->op_pmreplroot = Nullop;
437 /* we use the "SAFE" version of the PM_ macros here
438 * since sv_clean_all might release some PMOPs
439 * after PL_regex_padav has been cleared
440 * and the clearing of PL_regex_padav needs to
441 * happen before sv_clean_all
443 ReREFCNT_dec(PM_GETRE_SAFE(cPMOPo));
444 PM_SETRE_SAFE(cPMOPo, (REGEXP*)NULL);
446 if(PL_regex_pad) { /* We could be in destruction */
447 av_push((AV*) PL_regex_pad[0],(SV*) PL_regex_pad[(cPMOPo)->op_pmoffset]);
448 SvREPADTMP_on(PL_regex_pad[(cPMOPo)->op_pmoffset]);
449 PM_SETRE(cPMOPo, (cPMOPo)->op_pmoffset);
456 if (o->op_targ > 0) {
457 pad_free(o->op_targ);
463 S_cop_free(pTHX_ COP* cop)
465 Safefree(cop->cop_label); /* FIXME: treaddead ??? */
468 if (! specialWARN(cop->cop_warnings))
469 SvREFCNT_dec(cop->cop_warnings);
470 if (! specialCopIO(cop->cop_io)) {
474 char *s = SvPV(cop->cop_io,len);
475 Perl_warn(aTHX_ "io='%.*s'",(int) len,s); /* ??? --jhi */
478 SvREFCNT_dec(cop->cop_io);
484 Perl_op_null(pTHX_ OP *o)
486 if (o->op_type == OP_NULL)
489 o->op_targ = o->op_type;
490 o->op_type = OP_NULL;
491 o->op_ppaddr = PL_ppaddr[OP_NULL];
494 /* Contextualizers */
496 #define LINKLIST(o) ((o)->op_next ? (o)->op_next : linklist((OP*)o))
499 Perl_linklist(pTHX_ OP *o)
506 /* establish postfix order */
507 if (cUNOPo->op_first) {
508 o->op_next = LINKLIST(cUNOPo->op_first);
509 for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling) {
511 kid->op_next = LINKLIST(kid->op_sibling);
523 Perl_scalarkids(pTHX_ OP *o)
526 if (o && o->op_flags & OPf_KIDS) {
527 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
534 S_scalarboolean(pTHX_ OP *o)
536 if (o->op_type == OP_SASSIGN && cBINOPo->op_first->op_type == OP_CONST) {
537 if (ckWARN(WARN_SYNTAX)) {
538 line_t oldline = CopLINE(PL_curcop);
540 if (PL_copline != NOLINE)
541 CopLINE_set(PL_curcop, PL_copline);
542 Perl_warner(aTHX_ packWARN(WARN_SYNTAX), "Found = in conditional, should be ==");
543 CopLINE_set(PL_curcop, oldline);
550 Perl_scalar(pTHX_ OP *o)
554 /* assumes no premature commitment */
555 if (!o || (o->op_flags & OPf_WANT) || PL_error_count
556 || o->op_type == OP_RETURN)
561 o->op_flags = (o->op_flags & ~OPf_WANT) | OPf_WANT_SCALAR;
563 switch (o->op_type) {
565 scalar(cBINOPo->op_first);
570 for (kid = cUNOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
574 if ((kid = cLISTOPo->op_first) && kid->op_type == OP_PUSHRE) {
575 if (!kPMOP->op_pmreplroot)
576 deprecate_old("implicit split to @_");
584 if (o->op_flags & OPf_KIDS) {
585 for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling)
591 kid = cLISTOPo->op_first;
593 while ((kid = kid->op_sibling)) {
599 WITH_THR(PL_curcop = &PL_compiling);
604 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling) {
610 WITH_THR(PL_curcop = &PL_compiling);
613 if (ckWARN(WARN_VOID))
614 Perl_warner(aTHX_ packWARN(WARN_VOID), "Useless use of sort in scalar context");
620 Perl_scalarvoid(pTHX_ OP *o)
627 if (o->op_type == OP_NEXTSTATE
628 || o->op_type == OP_SETSTATE
629 || o->op_type == OP_DBSTATE
630 || (o->op_type == OP_NULL && (o->op_targ == OP_NEXTSTATE
631 || o->op_targ == OP_SETSTATE
632 || o->op_targ == OP_DBSTATE)))
633 PL_curcop = (COP*)o; /* for warning below */
635 /* assumes no premature commitment */
636 want = o->op_flags & OPf_WANT;
637 if ((want && want != OPf_WANT_SCALAR) || PL_error_count
638 || o->op_type == OP_RETURN)
643 if ((o->op_private & OPpTARGET_MY)
644 && (PL_opargs[o->op_type] & OA_TARGLEX))/* OPp share the meaning */
646 return scalar(o); /* As if inside SASSIGN */
649 o->op_flags = (o->op_flags & ~OPf_WANT) | OPf_WANT_VOID;
651 switch (o->op_type) {
653 if (!(PL_opargs[o->op_type] & OA_FOLDCONST))
657 if (o->op_flags & OPf_STACKED)
661 if (o->op_private == 4)
733 if (!(o->op_private & (OPpLVAL_INTRO|OPpOUR_INTRO)))
734 useless = OP_DESC(o);
741 if (!(o->op_private & (OPpLVAL_INTRO|OPpOUR_INTRO)) &&
742 (!o->op_sibling || o->op_sibling->op_type != OP_READLINE))
743 useless = "a variable";
748 if (cSVOPo->op_private & OPpCONST_STRICT)
749 no_bareword_allowed(o);
751 if (ckWARN(WARN_VOID)) {
752 useless = "a constant";
753 /* the constants 0 and 1 are permitted as they are
754 conventionally used as dummies in constructs like
755 1 while some_condition_with_side_effects; */
756 if (SvNIOK(sv) && (SvNV(sv) == 0.0 || SvNV(sv) == 1.0))
758 else if (SvPOK(sv)) {
759 /* perl4's way of mixing documentation and code
760 (before the invention of POD) was based on a
761 trick to mix nroff and perl code. The trick was
762 built upon these three nroff macros being used in
763 void context. The pink camel has the details in
764 the script wrapman near page 319. */
765 if (strnEQ(SvPVX(sv), "di", 2) ||
766 strnEQ(SvPVX(sv), "ds", 2) ||
767 strnEQ(SvPVX(sv), "ig", 2))
772 op_null(o); /* don't execute or even remember it */
776 o->op_type = OP_PREINC; /* pre-increment is faster */
777 o->op_ppaddr = PL_ppaddr[OP_PREINC];
781 o->op_type = OP_PREDEC; /* pre-decrement is faster */
782 o->op_ppaddr = PL_ppaddr[OP_PREDEC];
788 for (kid = cUNOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
793 if (o->op_flags & OPf_STACKED)
800 if (!(o->op_flags & OPf_KIDS))
809 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
816 /* all requires must return a boolean value */
817 o->op_flags &= ~OPf_WANT;
822 if ((kid = cLISTOPo->op_first) && kid->op_type == OP_PUSHRE) {
823 if (!kPMOP->op_pmreplroot)
824 deprecate_old("implicit split to @_");
828 if (useless && ckWARN(WARN_VOID))
829 Perl_warner(aTHX_ packWARN(WARN_VOID), "Useless use of %s in void context", useless);
834 Perl_listkids(pTHX_ OP *o)
837 if (o && o->op_flags & OPf_KIDS) {
838 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
845 Perl_list(pTHX_ OP *o)
849 /* assumes no premature commitment */
850 if (!o || (o->op_flags & OPf_WANT) || PL_error_count
851 || o->op_type == OP_RETURN)
856 if ((o->op_private & OPpTARGET_MY)
857 && (PL_opargs[o->op_type] & OA_TARGLEX))/* OPp share the meaning */
859 return o; /* As if inside SASSIGN */
862 o->op_flags = (o->op_flags & ~OPf_WANT) | OPf_WANT_LIST;
864 switch (o->op_type) {
867 list(cBINOPo->op_first);
872 for (kid = cUNOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
880 if (!(o->op_flags & OPf_KIDS))
882 if (!o->op_next && cUNOPo->op_first->op_type == OP_FLOP) {
883 list(cBINOPo->op_first);
884 return gen_constant_list(o);
891 kid = cLISTOPo->op_first;
893 while ((kid = kid->op_sibling)) {
899 WITH_THR(PL_curcop = &PL_compiling);
903 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling) {
909 WITH_THR(PL_curcop = &PL_compiling);
912 /* all requires must return a boolean value */
913 o->op_flags &= ~OPf_WANT;
920 Perl_scalarseq(pTHX_ OP *o)
925 if (o->op_type == OP_LINESEQ ||
926 o->op_type == OP_SCOPE ||
927 o->op_type == OP_LEAVE ||
928 o->op_type == OP_LEAVETRY)
930 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling) {
931 if (kid->op_sibling) {
935 PL_curcop = &PL_compiling;
937 o->op_flags &= ~OPf_PARENS;
938 if (PL_hints & HINT_BLOCK_SCOPE)
939 o->op_flags |= OPf_PARENS;
942 o = newOP(OP_STUB, 0);
947 S_modkids(pTHX_ OP *o, I32 type)
950 if (o && o->op_flags & OPf_KIDS) {
951 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
958 Perl_mod(pTHX_ OP *o, I32 type)
962 if (!o || PL_error_count)
965 if ((o->op_private & OPpTARGET_MY)
966 && (PL_opargs[o->op_type] & OA_TARGLEX))/* OPp share the meaning */
971 switch (o->op_type) {
976 if (!(o->op_private & (OPpCONST_ARYBASE)))
978 if (PL_eval_start && PL_eval_start->op_type == OP_CONST) {
979 PL_compiling.cop_arybase = (I32)SvIV(cSVOPx(PL_eval_start)->op_sv);
983 SAVEI32(PL_compiling.cop_arybase);
984 PL_compiling.cop_arybase = 0;
986 else if (type == OP_REFGEN)
989 Perl_croak(aTHX_ "That use of $[ is unsupported");
992 if (o->op_flags & OPf_PARENS)
996 if ((type == OP_UNDEF || type == OP_REFGEN) &&
997 !(o->op_flags & OPf_STACKED)) {
998 o->op_type = OP_RV2CV; /* entersub => rv2cv */
999 o->op_ppaddr = PL_ppaddr[OP_RV2CV];
1000 assert(cUNOPo->op_first->op_type == OP_NULL);
1001 op_null(((LISTOP*)cUNOPo->op_first)->op_first);/* disable pushmark */
1004 else if (o->op_private & OPpENTERSUB_NOMOD)
1006 else { /* lvalue subroutine call */
1007 o->op_private |= OPpLVAL_INTRO;
1008 PL_modcount = RETURN_UNLIMITED_NUMBER;
1009 if (type == OP_GREPSTART || type == OP_ENTERSUB || type == OP_REFGEN) {
1010 /* Backward compatibility mode: */
1011 o->op_private |= OPpENTERSUB_INARGS;
1014 else { /* Compile-time error message: */
1015 OP *kid = cUNOPo->op_first;
1019 if (kid->op_type == OP_PUSHMARK)
1021 if (kid->op_type != OP_NULL || kid->op_targ != OP_LIST)
1023 "panic: unexpected lvalue entersub "
1024 "args: type/targ %ld:%"UVuf,
1025 (long)kid->op_type, (UV)kid->op_targ);
1026 kid = kLISTOP->op_first;
1028 while (kid->op_sibling)
1029 kid = kid->op_sibling;
1030 if (!(kid->op_type == OP_NULL && kid->op_targ == OP_RV2CV)) {
1032 if (kid->op_type == OP_METHOD_NAMED
1033 || kid->op_type == OP_METHOD)
1037 NewOp(1101, newop, 1, UNOP);
1038 newop->op_type = OP_RV2CV;
1039 newop->op_ppaddr = PL_ppaddr[OP_RV2CV];
1040 newop->op_first = Nullop;
1041 newop->op_next = (OP*)newop;
1042 kid->op_sibling = (OP*)newop;
1043 newop->op_private |= OPpLVAL_INTRO;
1047 if (kid->op_type != OP_RV2CV)
1049 "panic: unexpected lvalue entersub "
1050 "entry via type/targ %ld:%"UVuf,
1051 (long)kid->op_type, (UV)kid->op_targ);
1052 kid->op_private |= OPpLVAL_INTRO;
1053 break; /* Postpone until runtime */
1057 kid = kUNOP->op_first;
1058 if (kid->op_type == OP_NULL && kid->op_targ == OP_RV2SV)
1059 kid = kUNOP->op_first;
1060 if (kid->op_type == OP_NULL)
1062 "Unexpected constant lvalue entersub "
1063 "entry via type/targ %ld:%"UVuf,
1064 (long)kid->op_type, (UV)kid->op_targ);
1065 if (kid->op_type != OP_GV) {
1066 /* Restore RV2CV to check lvalueness */
1068 if (kid->op_next && kid->op_next != kid) { /* Happens? */
1069 okid->op_next = kid->op_next;
1070 kid->op_next = okid;
1073 okid->op_next = Nullop;
1074 okid->op_type = OP_RV2CV;
1076 okid->op_ppaddr = PL_ppaddr[OP_RV2CV];
1077 okid->op_private |= OPpLVAL_INTRO;
1081 cv = GvCV(kGVOP_gv);
1091 /* grep, foreach, subcalls, refgen */
1092 if (type == OP_GREPSTART || type == OP_ENTERSUB || type == OP_REFGEN)
1094 yyerror(Perl_form(aTHX_ "Can't modify %s in %s",
1095 (o->op_type == OP_NULL && (o->op_flags & OPf_SPECIAL)
1097 : (o->op_type == OP_ENTERSUB
1098 ? "non-lvalue subroutine call"
1100 type ? PL_op_desc[type] : "local"));
1114 case OP_RIGHT_SHIFT:
1123 if (!(o->op_flags & OPf_STACKED))
1129 for (kid = cUNOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
1135 if (type == OP_REFGEN && o->op_flags & OPf_PARENS) {
1136 PL_modcount = RETURN_UNLIMITED_NUMBER;
1137 return o; /* Treat \(@foo) like ordinary list. */
1141 if (scalar_mod_type(o, type))
1143 ref(cUNOPo->op_first, o->op_type);
1147 if (type == OP_LEAVESUBLV)
1148 o->op_private |= OPpMAYBE_LVSUB;
1153 PL_modcount = RETURN_UNLIMITED_NUMBER;
1156 ref(cUNOPo->op_first, o->op_type);
1160 PL_hints |= HINT_BLOCK_SCOPE;
1170 PL_modcount = RETURN_UNLIMITED_NUMBER;
1171 if (type == OP_REFGEN && o->op_flags & OPf_PARENS)
1172 return o; /* Treat \(@foo) like ordinary list. */
1173 if (scalar_mod_type(o, type))
1175 if (type == OP_LEAVESUBLV)
1176 o->op_private |= OPpMAYBE_LVSUB;
1181 { /* XXX DAPM 2002.08.25 tmp assert test */
1182 /* XXX */ assert(av_fetch(PL_comppad_name, (o->op_targ), FALSE));
1183 /* XXX */ assert(*av_fetch(PL_comppad_name, (o->op_targ), FALSE));
1185 Perl_croak(aTHX_ "Can't localize lexical variable %s",
1186 PAD_COMPNAME_PV(o->op_targ));
1190 #ifdef USE_5005THREADS
1192 PL_modcount++; /* XXX ??? */
1194 #endif /* USE_5005THREADS */
1200 if (type != OP_SASSIGN)
1204 if (o->op_private == 4) /* don't allow 4 arg substr as lvalue */
1209 if (type == OP_LEAVESUBLV)
1210 o->op_private |= OPpMAYBE_LVSUB;
1212 pad_free(o->op_targ);
1213 o->op_targ = pad_alloc(o->op_type, SVs_PADMY);
1214 assert(SvTYPE(PAD_SV(o->op_targ)) == SVt_NULL);
1215 if (o->op_flags & OPf_KIDS)
1216 mod(cBINOPo->op_first->op_sibling, type);
1221 ref(cBINOPo->op_first, o->op_type);
1222 if (type == OP_ENTERSUB &&
1223 !(o->op_private & (OPpLVAL_INTRO | OPpDEREF)))
1224 o->op_private |= OPpLVAL_DEFER;
1225 if (type == OP_LEAVESUBLV)
1226 o->op_private |= OPpMAYBE_LVSUB;
1234 if (o->op_flags & OPf_KIDS)
1235 mod(cLISTOPo->op_last, type);
1239 if (o->op_flags & OPf_SPECIAL) /* do BLOCK */
1241 else if (!(o->op_flags & OPf_KIDS))
1243 if (o->op_targ != OP_LIST) {
1244 mod(cBINOPo->op_first, type);
1249 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
1254 if (type != OP_LEAVESUBLV)
1256 break; /* mod()ing was handled by ck_return() */
1259 /* [20011101.069] File test operators interpret OPf_REF to mean that
1260 their argument is a filehandle; thus \stat(".") should not set
1262 if (type == OP_REFGEN &&
1263 PL_check[o->op_type] == MEMBER_TO_FPTR(Perl_ck_ftst))
1266 if (type != OP_LEAVESUBLV)
1267 o->op_flags |= OPf_MOD;
1269 if (type == OP_AASSIGN || type == OP_SASSIGN)
1270 o->op_flags |= OPf_SPECIAL|OPf_REF;
1272 o->op_private |= OPpLVAL_INTRO;
1273 o->op_flags &= ~OPf_SPECIAL;
1274 PL_hints |= HINT_BLOCK_SCOPE;
1276 else if (type != OP_GREPSTART && type != OP_ENTERSUB
1277 && type != OP_LEAVESUBLV)
1278 o->op_flags |= OPf_REF;
1283 S_scalar_mod_type(pTHX_ OP *o, I32 type)
1287 if (o->op_type == OP_RV2GV)
1311 case OP_RIGHT_SHIFT:
1330 S_is_handle_constructor(pTHX_ OP *o, I32 argnum)
1332 switch (o->op_type) {
1340 case OP_SELECT: /* XXX c.f. SelectSaver.pm */
1353 Perl_refkids(pTHX_ OP *o, I32 type)
1356 if (o && o->op_flags & OPf_KIDS) {
1357 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
1364 Perl_ref(pTHX_ OP *o, I32 type)
1368 if (!o || PL_error_count)
1371 switch (o->op_type) {
1373 if ((type == OP_EXISTS || type == OP_DEFINED || type == OP_LOCK) &&
1374 !(o->op_flags & OPf_STACKED)) {
1375 o->op_type = OP_RV2CV; /* entersub => rv2cv */
1376 o->op_ppaddr = PL_ppaddr[OP_RV2CV];
1377 assert(cUNOPo->op_first->op_type == OP_NULL);
1378 op_null(((LISTOP*)cUNOPo->op_first)->op_first); /* disable pushmark */
1379 o->op_flags |= OPf_SPECIAL;
1384 for (kid = cUNOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
1388 if (type == OP_DEFINED)
1389 o->op_flags |= OPf_SPECIAL; /* don't create GV */
1390 ref(cUNOPo->op_first, o->op_type);
1393 if (type == OP_RV2SV || type == OP_RV2AV || type == OP_RV2HV) {
1394 o->op_private |= (type == OP_RV2AV ? OPpDEREF_AV
1395 : type == OP_RV2HV ? OPpDEREF_HV
1397 o->op_flags |= OPf_MOD;
1402 o->op_flags |= OPf_MOD; /* XXX ??? */
1407 o->op_flags |= OPf_REF;
1410 if (type == OP_DEFINED)
1411 o->op_flags |= OPf_SPECIAL; /* don't create GV */
1412 ref(cUNOPo->op_first, o->op_type);
1417 o->op_flags |= OPf_REF;
1422 if (!(o->op_flags & OPf_KIDS))
1424 ref(cBINOPo->op_first, type);
1428 ref(cBINOPo->op_first, o->op_type);
1429 if (type == OP_RV2SV || type == OP_RV2AV || type == OP_RV2HV) {
1430 o->op_private |= (type == OP_RV2AV ? OPpDEREF_AV
1431 : type == OP_RV2HV ? OPpDEREF_HV
1433 o->op_flags |= OPf_MOD;
1441 if (!(o->op_flags & OPf_KIDS))
1443 ref(cLISTOPo->op_last, type);
1453 S_dup_attrlist(pTHX_ OP *o)
1457 /* An attrlist is either a simple OP_CONST or an OP_LIST with kids,
1458 * where the first kid is OP_PUSHMARK and the remaining ones
1459 * are OP_CONST. We need to push the OP_CONST values.
1461 if (o->op_type == OP_CONST)
1462 rop = newSVOP(OP_CONST, o->op_flags, SvREFCNT_inc(cSVOPo->op_sv));
1464 assert((o->op_type == OP_LIST) && (o->op_flags & OPf_KIDS));
1465 for (o = cLISTOPo->op_first; o; o=o->op_sibling) {
1466 if (o->op_type == OP_CONST)
1467 rop = append_elem(OP_LIST, rop,
1468 newSVOP(OP_CONST, o->op_flags,
1469 SvREFCNT_inc(cSVOPo->op_sv)));
1476 S_apply_attrs(pTHX_ HV *stash, SV *target, OP *attrs, bool for_my)
1480 /* fake up C<use attributes $pkg,$rv,@attrs> */
1481 ENTER; /* need to protect against side-effects of 'use' */
1484 stashsv = newSVpv(HvNAME(stash), 0);
1486 stashsv = &PL_sv_no;
1488 #define ATTRSMODULE "attributes"
1489 #define ATTRSMODULE_PM "attributes.pm"
1493 /* Don't force the C<use> if we don't need it. */
1494 svp = hv_fetch(GvHVn(PL_incgv), ATTRSMODULE_PM,
1495 sizeof(ATTRSMODULE_PM)-1, 0);
1496 if (svp && *svp != &PL_sv_undef)
1497 ; /* already in %INC */
1499 Perl_load_module(aTHX_ PERL_LOADMOD_NOIMPORT,
1500 newSVpvn(ATTRSMODULE, sizeof(ATTRSMODULE)-1),
1504 Perl_load_module(aTHX_ PERL_LOADMOD_IMPORT_OPS,
1505 newSVpvn(ATTRSMODULE, sizeof(ATTRSMODULE)-1),
1507 prepend_elem(OP_LIST,
1508 newSVOP(OP_CONST, 0, stashsv),
1509 prepend_elem(OP_LIST,
1510 newSVOP(OP_CONST, 0,
1512 dup_attrlist(attrs))));
1518 S_apply_attrs_my(pTHX_ HV *stash, OP *target, OP *attrs, OP **imopsp)
1520 OP *pack, *imop, *arg;
1526 assert(target->op_type == OP_PADSV ||
1527 target->op_type == OP_PADHV ||
1528 target->op_type == OP_PADAV);
1530 /* Ensure that attributes.pm is loaded. */
1531 apply_attrs(stash, PAD_SV(target->op_targ), attrs, TRUE);
1533 /* Need package name for method call. */
1534 pack = newSVOP(OP_CONST, 0, newSVpvn(ATTRSMODULE, sizeof(ATTRSMODULE)-1));
1536 /* Build up the real arg-list. */
1538 stashsv = newSVpv(HvNAME(stash), 0);
1540 stashsv = &PL_sv_no;
1541 arg = newOP(OP_PADSV, 0);
1542 arg->op_targ = target->op_targ;
1543 arg = prepend_elem(OP_LIST,
1544 newSVOP(OP_CONST, 0, stashsv),
1545 prepend_elem(OP_LIST,
1546 newUNOP(OP_REFGEN, 0,
1547 mod(arg, OP_REFGEN)),
1548 dup_attrlist(attrs)));
1550 /* Fake up a method call to import */
1551 meth = newSVpvn("import", 6);
1552 (void)SvUPGRADE(meth, SVt_PVIV);
1553 (void)SvIOK_on(meth);
1554 PERL_HASH(SvUVX(meth), SvPVX(meth), SvCUR(meth));
1555 imop = convert(OP_ENTERSUB, OPf_STACKED|OPf_SPECIAL|OPf_WANT_VOID,
1556 append_elem(OP_LIST,
1557 prepend_elem(OP_LIST, pack, list(arg)),
1558 newSVOP(OP_METHOD_NAMED, 0, meth)));
1559 imop->op_private |= OPpENTERSUB_NOMOD;
1561 /* Combine the ops. */
1562 *imopsp = append_elem(OP_LIST, *imopsp, imop);
1566 =notfor apidoc apply_attrs_string
1568 Attempts to apply a list of attributes specified by the C<attrstr> and
1569 C<len> arguments to the subroutine identified by the C<cv> argument which
1570 is expected to be associated with the package identified by the C<stashpv>
1571 argument (see L<attributes>). It gets this wrong, though, in that it
1572 does not correctly identify the boundaries of the individual attribute
1573 specifications within C<attrstr>. This is not really intended for the
1574 public API, but has to be listed here for systems such as AIX which
1575 need an explicit export list for symbols. (It's called from XS code
1576 in support of the C<ATTRS:> keyword from F<xsubpp>.) Patches to fix it
1577 to respect attribute syntax properly would be welcome.
1583 Perl_apply_attrs_string(pTHX_ char *stashpv, CV *cv,
1584 char *attrstr, STRLEN len)
1589 len = strlen(attrstr);
1593 for (; isSPACE(*attrstr) && len; --len, ++attrstr) ;
1595 char *sstr = attrstr;
1596 for (; !isSPACE(*attrstr) && len; --len, ++attrstr) ;
1597 attrs = append_elem(OP_LIST, attrs,
1598 newSVOP(OP_CONST, 0,
1599 newSVpvn(sstr, attrstr-sstr)));
1603 Perl_load_module(aTHX_ PERL_LOADMOD_IMPORT_OPS,
1604 newSVpvn(ATTRSMODULE, sizeof(ATTRSMODULE)-1),
1605 Nullsv, prepend_elem(OP_LIST,
1606 newSVOP(OP_CONST, 0, newSVpv(stashpv,0)),
1607 prepend_elem(OP_LIST,
1608 newSVOP(OP_CONST, 0,
1614 S_my_kid(pTHX_ OP *o, OP *attrs, OP **imopsp)
1619 if (!o || PL_error_count)
1623 if (type == OP_LIST) {
1624 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
1625 my_kid(kid, attrs, imopsp);
1626 } else if (type == OP_UNDEF) {
1628 } else if (type == OP_RV2SV || /* "our" declaration */
1630 type == OP_RV2HV) { /* XXX does this let anything illegal in? */
1631 if (cUNOPo->op_first->op_type != OP_GV) { /* MJD 20011224 */
1632 yyerror(Perl_form(aTHX_ "Can't declare %s in %s",
1633 OP_DESC(o), PL_in_my == KEY_our ? "our" : "my"));
1635 GV *gv = cGVOPx_gv(cUNOPo->op_first);
1637 PL_in_my_stash = Nullhv;
1638 apply_attrs(GvSTASH(gv),
1639 (type == OP_RV2SV ? GvSV(gv) :
1640 type == OP_RV2AV ? (SV*)GvAV(gv) :
1641 type == OP_RV2HV ? (SV*)GvHV(gv) : (SV*)gv),
1644 o->op_private |= OPpOUR_INTRO;
1647 else if (type != OP_PADSV &&
1650 type != OP_PUSHMARK)
1652 yyerror(Perl_form(aTHX_ "Can't declare %s in \"%s\"",
1654 PL_in_my == KEY_our ? "our" : "my"));
1657 else if (attrs && type != OP_PUSHMARK) {
1661 PL_in_my_stash = Nullhv;
1663 /* check for C<my Dog $spot> when deciding package */
1664 stash = PAD_COMPNAME_TYPE(o->op_targ);
1666 stash = PL_curstash;
1667 apply_attrs_my(stash, o, attrs, imopsp);
1669 o->op_flags |= OPf_MOD;
1670 o->op_private |= OPpLVAL_INTRO;
1675 Perl_my_attrs(pTHX_ OP *o, OP *attrs)
1678 int maybe_scalar = 0;
1680 /* [perl #17376]: this appears to be premature, and results in code such as
1681 C< our(%x); > executing in list mode rather than void mode */
1683 if (o->op_flags & OPf_PARENS)
1692 o = my_kid(o, attrs, &rops);
1694 if (maybe_scalar && o->op_type == OP_PADSV) {
1695 o = scalar(append_list(OP_LIST, (LISTOP*)rops, (LISTOP*)o));
1696 o->op_private |= OPpLVAL_INTRO;
1699 o = append_list(OP_LIST, (LISTOP*)o, (LISTOP*)rops);
1702 PL_in_my_stash = Nullhv;
1707 Perl_my(pTHX_ OP *o)
1709 return my_attrs(o, Nullop);
1713 Perl_sawparens(pTHX_ OP *o)
1716 o->op_flags |= OPf_PARENS;
1721 Perl_bind_match(pTHX_ I32 type, OP *left, OP *right)
1725 if (ckWARN(WARN_MISC) &&
1726 (left->op_type == OP_RV2AV ||
1727 left->op_type == OP_RV2HV ||
1728 left->op_type == OP_PADAV ||
1729 left->op_type == OP_PADHV)) {
1730 char *desc = PL_op_desc[(right->op_type == OP_SUBST ||
1731 right->op_type == OP_TRANS)
1732 ? right->op_type : OP_MATCH];
1733 const char *sample = ((left->op_type == OP_RV2AV ||
1734 left->op_type == OP_PADAV)
1735 ? "@array" : "%hash");
1736 Perl_warner(aTHX_ packWARN(WARN_MISC),
1737 "Applying %s to %s will act on scalar(%s)",
1738 desc, sample, sample);
1741 if (right->op_type == OP_CONST &&
1742 cSVOPx(right)->op_private & OPpCONST_BARE &&
1743 cSVOPx(right)->op_private & OPpCONST_STRICT)
1745 no_bareword_allowed(right);
1748 if (!(right->op_flags & OPf_STACKED) &&
1749 (right->op_type == OP_MATCH ||
1750 right->op_type == OP_SUBST ||
1751 right->op_type == OP_TRANS)) {
1752 right->op_flags |= OPf_STACKED;
1753 if (right->op_type != OP_MATCH &&
1754 ! (right->op_type == OP_TRANS &&
1755 right->op_private & OPpTRANS_IDENTICAL))
1756 left = mod(left, right->op_type);
1757 if (right->op_type == OP_TRANS)
1758 o = newBINOP(OP_NULL, OPf_STACKED, scalar(left), right);
1760 o = prepend_elem(right->op_type, scalar(left), right);
1762 return newUNOP(OP_NOT, 0, scalar(o));
1766 return bind_match(type, left,
1767 pmruntime(newPMOP(OP_MATCH, 0), right, Nullop));
1771 Perl_invert(pTHX_ OP *o)
1775 /* XXX need to optimize away NOT NOT here? Or do we let optimizer do it? */
1776 return newUNOP(OP_NOT, OPf_SPECIAL, scalar(o));
1780 Perl_scope(pTHX_ OP *o)
1783 if (o->op_flags & OPf_PARENS || PERLDB_NOOPT || PL_tainting) {
1784 o = prepend_elem(OP_LINESEQ, newOP(OP_ENTER, 0), o);
1785 o->op_type = OP_LEAVE;
1786 o->op_ppaddr = PL_ppaddr[OP_LEAVE];
1788 else if (o->op_type == OP_LINESEQ) {
1790 o->op_type = OP_SCOPE;
1791 o->op_ppaddr = PL_ppaddr[OP_SCOPE];
1792 kid = ((LISTOP*)o)->op_first;
1793 if (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE)
1797 o = newLISTOP(OP_SCOPE, 0, o, Nullop);
1803 Perl_save_hints(pTHX)
1806 SAVESPTR(GvHV(PL_hintgv));
1807 GvHV(PL_hintgv) = newHVhv(GvHV(PL_hintgv));
1808 SAVEFREESV(GvHV(PL_hintgv));
1812 Perl_block_start(pTHX_ int full)
1814 int retval = PL_savestack_ix;
1815 /* If there were syntax errors, don't try to start a block */
1816 if (PL_yynerrs) return retval;
1818 pad_block_start(full);
1820 PL_hints &= ~HINT_BLOCK_SCOPE;
1821 SAVESPTR(PL_compiling.cop_warnings);
1822 if (! specialWARN(PL_compiling.cop_warnings)) {
1823 PL_compiling.cop_warnings = newSVsv(PL_compiling.cop_warnings) ;
1824 SAVEFREESV(PL_compiling.cop_warnings) ;
1826 SAVESPTR(PL_compiling.cop_io);
1827 if (! specialCopIO(PL_compiling.cop_io)) {
1828 PL_compiling.cop_io = newSVsv(PL_compiling.cop_io) ;
1829 SAVEFREESV(PL_compiling.cop_io) ;
1835 Perl_block_end(pTHX_ I32 floor, OP *seq)
1837 int needblockscope = PL_hints & HINT_BLOCK_SCOPE;
1838 OP* retval = scalarseq(seq);
1839 /* If there were syntax errors, don't try to close a block */
1840 if (PL_yynerrs) return retval;
1842 PL_compiling.op_private = (U8)(PL_hints & HINT_PRIVATE_MASK);
1844 PL_hints |= HINT_BLOCK_SCOPE; /* propagate out */
1852 #ifdef USE_5005THREADS
1853 OP *o = newOP(OP_THREADSV, 0);
1854 o->op_targ = find_threadsv("_");
1857 return newSVREF(newGVOP(OP_GV, 0, PL_defgv));
1858 #endif /* USE_5005THREADS */
1862 Perl_newPROG(pTHX_ OP *o)
1867 PL_eval_root = newUNOP(OP_LEAVEEVAL,
1868 ((PL_in_eval & EVAL_KEEPERR)
1869 ? OPf_SPECIAL : 0), o);
1870 PL_eval_start = linklist(PL_eval_root);
1871 PL_eval_root->op_private |= OPpREFCOUNTED;
1872 OpREFCNT_set(PL_eval_root, 1);
1873 PL_eval_root->op_next = 0;
1874 CALL_PEEP(PL_eval_start);
1877 if (o->op_type == OP_STUB) {
1878 PL_comppad_name = 0;
1883 PL_main_root = scope(sawparens(scalarvoid(o)));
1884 PL_curcop = &PL_compiling;
1885 PL_main_start = LINKLIST(PL_main_root);
1886 PL_main_root->op_private |= OPpREFCOUNTED;
1887 OpREFCNT_set(PL_main_root, 1);
1888 PL_main_root->op_next = 0;
1889 CALL_PEEP(PL_main_start);
1892 /* Register with debugger */
1894 CV *cv = get_cv("DB::postponed", FALSE);
1898 XPUSHs((SV*)CopFILEGV(&PL_compiling));
1900 call_sv((SV*)cv, G_DISCARD);
1907 Perl_localize(pTHX_ OP *o, I32 lex)
1909 if (o->op_flags & OPf_PARENS)
1910 /* [perl #17376]: this appears to be premature, and results in code such as
1911 C< our(%x); > executing in list mode rather than void mode */
1918 if (ckWARN(WARN_PARENTHESIS)
1919 && PL_bufptr > PL_oldbufptr && PL_bufptr[-1] == ',')
1921 char *s = PL_bufptr;
1924 /* some heuristics to detect a potential error */
1925 while (*s && (strchr(", \t\n", *s)
1926 || (strchr("@$%*", *s) && ++sigil) ))
1929 while (*s && (isALNUM(*s) || UTF8_IS_CONTINUED(*s)
1930 || strchr("@$%*, \t\n", *s)))
1933 if (*s == ';' || *s == '=')
1934 Perl_warner(aTHX_ packWARN(WARN_PARENTHESIS),
1935 "Parentheses missing around \"%s\" list",
1936 lex ? (PL_in_my == KEY_our ? "our" : "my")
1944 o = mod(o, OP_NULL); /* a bit kludgey */
1946 PL_in_my_stash = Nullhv;
1951 Perl_jmaybe(pTHX_ OP *o)
1953 if (o->op_type == OP_LIST) {
1955 #ifdef USE_5005THREADS
1956 o2 = newOP(OP_THREADSV, 0);
1957 o2->op_targ = find_threadsv(";");
1959 o2 = newSVREF(newGVOP(OP_GV, 0, gv_fetchpv(";", TRUE, SVt_PV))),
1960 #endif /* USE_5005THREADS */
1961 o = convert(OP_JOIN, 0, prepend_elem(OP_LIST, o2, o));
1967 Perl_fold_constants(pTHX_ register OP *o)
1970 I32 type = o->op_type;
1973 if (PL_opargs[type] & OA_RETSCALAR)
1975 if (PL_opargs[type] & OA_TARGET && !o->op_targ)
1976 o->op_targ = pad_alloc(type, SVs_PADTMP);
1978 /* integerize op, unless it happens to be C<-foo>.
1979 * XXX should pp_i_negate() do magic string negation instead? */
1980 if ((PL_opargs[type] & OA_OTHERINT) && (PL_hints & HINT_INTEGER)
1981 && !(type == OP_NEGATE && cUNOPo->op_first->op_type == OP_CONST
1982 && (cUNOPo->op_first->op_private & OPpCONST_BARE)))
1984 o->op_ppaddr = PL_ppaddr[type = ++(o->op_type)];
1987 if (!(PL_opargs[type] & OA_FOLDCONST))
1992 /* XXX might want a ck_negate() for this */
1993 cUNOPo->op_first->op_private &= ~OPpCONST_STRICT;
2005 /* XXX what about the numeric ops? */
2006 if (PL_hints & HINT_LOCALE)
2011 goto nope; /* Don't try to run w/ errors */
2013 for (curop = LINKLIST(o); curop != o; curop = LINKLIST(curop)) {
2014 if ((curop->op_type != OP_CONST ||
2015 (curop->op_private & OPpCONST_BARE)) &&
2016 curop->op_type != OP_LIST &&
2017 curop->op_type != OP_SCALAR &&
2018 curop->op_type != OP_NULL &&
2019 curop->op_type != OP_PUSHMARK)
2025 curop = LINKLIST(o);
2029 sv = *(PL_stack_sp--);
2030 if (o->op_targ && sv == PAD_SV(o->op_targ)) /* grab pad temp? */
2031 pad_swipe(o->op_targ, FALSE);
2032 else if (SvTEMP(sv)) { /* grab mortal temp? */
2033 (void)SvREFCNT_inc(sv);
2037 if (type == OP_RV2GV)
2038 return newGVOP(OP_GV, 0, (GV*)sv);
2039 return newSVOP(OP_CONST, 0, sv);
2046 Perl_gen_constant_list(pTHX_ register OP *o)
2049 I32 oldtmps_floor = PL_tmps_floor;
2053 return o; /* Don't attempt to run with errors */
2055 PL_op = curop = LINKLIST(o);
2062 PL_tmps_floor = oldtmps_floor;
2064 o->op_type = OP_RV2AV;
2065 o->op_ppaddr = PL_ppaddr[OP_RV2AV];
2066 o->op_flags &= ~OPf_REF; /* treat \(1..2) like an ordinary list */
2067 o->op_flags |= OPf_PARENS; /* and flatten \(1..2,3) */
2068 o->op_seq = 0; /* needs to be revisited in peep() */
2069 curop = ((UNOP*)o)->op_first;
2070 ((UNOP*)o)->op_first = newSVOP(OP_CONST, 0, SvREFCNT_inc(*PL_stack_sp--));
2077 Perl_convert(pTHX_ I32 type, I32 flags, OP *o)
2079 if (!o || o->op_type != OP_LIST)
2080 o = newLISTOP(OP_LIST, 0, o, Nullop);
2082 o->op_flags &= ~OPf_WANT;
2084 if (!(PL_opargs[type] & OA_MARK))
2085 op_null(cLISTOPo->op_first);
2087 o->op_type = (OPCODE)type;
2088 o->op_ppaddr = PL_ppaddr[type];
2089 o->op_flags |= flags;
2091 o = CHECKOP(type, o);
2092 if (o->op_type != type)
2095 return fold_constants(o);
2098 /* List constructors */
2101 Perl_append_elem(pTHX_ I32 type, OP *first, OP *last)
2109 if (first->op_type != type
2110 || (type == OP_LIST && (first->op_flags & OPf_PARENS)))
2112 return newLISTOP(type, 0, first, last);
2115 if (first->op_flags & OPf_KIDS)
2116 ((LISTOP*)first)->op_last->op_sibling = last;
2118 first->op_flags |= OPf_KIDS;
2119 ((LISTOP*)first)->op_first = last;
2121 ((LISTOP*)first)->op_last = last;
2126 Perl_append_list(pTHX_ I32 type, LISTOP *first, LISTOP *last)
2134 if (first->op_type != type)
2135 return prepend_elem(type, (OP*)first, (OP*)last);
2137 if (last->op_type != type)
2138 return append_elem(type, (OP*)first, (OP*)last);
2140 first->op_last->op_sibling = last->op_first;
2141 first->op_last = last->op_last;
2142 first->op_flags |= (last->op_flags & OPf_KIDS);
2150 Perl_prepend_elem(pTHX_ I32 type, OP *first, OP *last)
2158 if (last->op_type == type) {
2159 if (type == OP_LIST) { /* already a PUSHMARK there */
2160 first->op_sibling = ((LISTOP*)last)->op_first->op_sibling;
2161 ((LISTOP*)last)->op_first->op_sibling = first;
2162 if (!(first->op_flags & OPf_PARENS))
2163 last->op_flags &= ~OPf_PARENS;
2166 if (!(last->op_flags & OPf_KIDS)) {
2167 ((LISTOP*)last)->op_last = first;
2168 last->op_flags |= OPf_KIDS;
2170 first->op_sibling = ((LISTOP*)last)->op_first;
2171 ((LISTOP*)last)->op_first = first;
2173 last->op_flags |= OPf_KIDS;
2177 return newLISTOP(type, 0, first, last);
2183 Perl_newNULLLIST(pTHX)
2185 return newOP(OP_STUB, 0);
2189 Perl_force_list(pTHX_ OP *o)
2191 if (!o || o->op_type != OP_LIST)
2192 o = newLISTOP(OP_LIST, 0, o, Nullop);
2198 Perl_newLISTOP(pTHX_ I32 type, I32 flags, OP *first, OP *last)
2202 NewOp(1101, listop, 1, LISTOP);
2204 listop->op_type = (OPCODE)type;
2205 listop->op_ppaddr = PL_ppaddr[type];
2208 listop->op_flags = (U8)flags;
2212 else if (!first && last)
2215 first->op_sibling = last;
2216 listop->op_first = first;
2217 listop->op_last = last;
2218 if (type == OP_LIST) {
2220 pushop = newOP(OP_PUSHMARK, 0);
2221 pushop->op_sibling = first;
2222 listop->op_first = pushop;
2223 listop->op_flags |= OPf_KIDS;
2225 listop->op_last = pushop;
2228 return CHECKOP(type, listop);
2232 Perl_newOP(pTHX_ I32 type, I32 flags)
2235 NewOp(1101, o, 1, OP);
2236 o->op_type = (OPCODE)type;
2237 o->op_ppaddr = PL_ppaddr[type];
2238 o->op_flags = (U8)flags;
2241 o->op_private = (U8)(0 | (flags >> 8));
2242 if (PL_opargs[type] & OA_RETSCALAR)
2244 if (PL_opargs[type] & OA_TARGET)
2245 o->op_targ = pad_alloc(type, SVs_PADTMP);
2246 return CHECKOP(type, o);
2250 Perl_newUNOP(pTHX_ I32 type, I32 flags, OP *first)
2255 first = newOP(OP_STUB, 0);
2256 if (PL_opargs[type] & OA_MARK)
2257 first = force_list(first);
2259 NewOp(1101, unop, 1, UNOP);
2260 unop->op_type = (OPCODE)type;
2261 unop->op_ppaddr = PL_ppaddr[type];
2262 unop->op_first = first;
2263 unop->op_flags = flags | OPf_KIDS;
2264 unop->op_private = (U8)(1 | (flags >> 8));
2265 unop = (UNOP*) CHECKOP(type, unop);
2269 return fold_constants((OP *) unop);
2273 Perl_newBINOP(pTHX_ I32 type, I32 flags, OP *first, OP *last)
2276 NewOp(1101, binop, 1, BINOP);
2279 first = newOP(OP_NULL, 0);
2281 binop->op_type = (OPCODE)type;
2282 binop->op_ppaddr = PL_ppaddr[type];
2283 binop->op_first = first;
2284 binop->op_flags = flags | OPf_KIDS;
2287 binop->op_private = (U8)(1 | (flags >> 8));
2290 binop->op_private = (U8)(2 | (flags >> 8));
2291 first->op_sibling = last;
2294 binop = (BINOP*)CHECKOP(type, binop);
2295 if (binop->op_next || binop->op_type != (OPCODE)type)
2298 binop->op_last = binop->op_first->op_sibling;
2300 return fold_constants((OP *)binop);
2304 uvcompare(const void *a, const void *b)
2306 if (*((UV *)a) < (*(UV *)b))
2308 if (*((UV *)a) > (*(UV *)b))
2310 if (*((UV *)a+1) < (*(UV *)b+1))
2312 if (*((UV *)a+1) > (*(UV *)b+1))
2318 Perl_pmtrans(pTHX_ OP *o, OP *expr, OP *repl)
2320 SV *tstr = ((SVOP*)expr)->op_sv;
2321 SV *rstr = ((SVOP*)repl)->op_sv;
2324 U8 *t = (U8*)SvPV(tstr, tlen);
2325 U8 *r = (U8*)SvPV(rstr, rlen);
2332 register short *tbl;
2334 PL_hints |= HINT_BLOCK_SCOPE;
2335 complement = o->op_private & OPpTRANS_COMPLEMENT;
2336 del = o->op_private & OPpTRANS_DELETE;
2337 squash = o->op_private & OPpTRANS_SQUASH;
2340 o->op_private |= OPpTRANS_FROM_UTF;
2343 o->op_private |= OPpTRANS_TO_UTF;
2345 if (o->op_private & (OPpTRANS_FROM_UTF|OPpTRANS_TO_UTF)) {
2346 SV* listsv = newSVpvn("# comment\n",10);
2348 U8* tend = t + tlen;
2349 U8* rend = r + rlen;
2363 I32 from_utf = o->op_private & OPpTRANS_FROM_UTF;
2364 I32 to_utf = o->op_private & OPpTRANS_TO_UTF;
2370 tsave = t = bytes_to_utf8(t, &len);
2373 if (!to_utf && rlen) {
2375 rsave = r = bytes_to_utf8(r, &len);
2379 /* There are several snags with this code on EBCDIC:
2380 1. 0xFF is a legal UTF-EBCDIC byte (there are no illegal bytes).
2381 2. scan_const() in toke.c has encoded chars in native encoding which makes
2382 ranges at least in EBCDIC 0..255 range the bottom odd.
2386 U8 tmpbuf[UTF8_MAXLEN+1];
2389 New(1109, cp, 2*tlen, UV);
2391 transv = newSVpvn("",0);
2393 cp[2*i] = utf8n_to_uvuni(t, tend-t, &ulen, 0);
2395 if (t < tend && NATIVE_TO_UTF(*t) == 0xff) {
2397 cp[2*i+1] = utf8n_to_uvuni(t, tend-t, &ulen, 0);
2401 cp[2*i+1] = cp[2*i];
2405 qsort(cp, i, 2*sizeof(UV), uvcompare);
2406 for (j = 0; j < i; j++) {
2408 diff = val - nextmin;
2410 t = uvuni_to_utf8(tmpbuf,nextmin);
2411 sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf);
2413 U8 range_mark = UTF_TO_NATIVE(0xff);
2414 t = uvuni_to_utf8(tmpbuf, val - 1);
2415 sv_catpvn(transv, (char *)&range_mark, 1);
2416 sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf);
2423 t = uvuni_to_utf8(tmpbuf,nextmin);
2424 sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf);
2426 U8 range_mark = UTF_TO_NATIVE(0xff);
2427 sv_catpvn(transv, (char *)&range_mark, 1);
2429 t = uvuni_to_utf8_flags(tmpbuf, 0x7fffffff,
2430 UNICODE_ALLOW_SUPER);
2431 sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf);
2432 t = (U8*)SvPVX(transv);
2433 tlen = SvCUR(transv);
2437 else if (!rlen && !del) {
2438 r = t; rlen = tlen; rend = tend;
2441 if ((!rlen && !del) || t == r ||
2442 (tlen == rlen && memEQ((char *)t, (char *)r, tlen)))
2444 o->op_private |= OPpTRANS_IDENTICAL;
2448 while (t < tend || tfirst <= tlast) {
2449 /* see if we need more "t" chars */
2450 if (tfirst > tlast) {
2451 tfirst = (I32)utf8n_to_uvuni(t, tend - t, &ulen, 0);
2453 if (t < tend && NATIVE_TO_UTF(*t) == 0xff) { /* illegal utf8 val indicates range */
2455 tlast = (I32)utf8n_to_uvuni(t, tend - t, &ulen, 0);
2462 /* now see if we need more "r" chars */
2463 if (rfirst > rlast) {
2465 rfirst = (I32)utf8n_to_uvuni(r, rend - r, &ulen, 0);
2467 if (r < rend && NATIVE_TO_UTF(*r) == 0xff) { /* illegal utf8 val indicates range */
2469 rlast = (I32)utf8n_to_uvuni(r, rend - r, &ulen, 0);
2478 rfirst = rlast = 0xffffffff;
2482 /* now see which range will peter our first, if either. */
2483 tdiff = tlast - tfirst;
2484 rdiff = rlast - rfirst;
2491 if (rfirst == 0xffffffff) {
2492 diff = tdiff; /* oops, pretend rdiff is infinite */
2494 Perl_sv_catpvf(aTHX_ listsv, "%04lx\t%04lx\tXXXX\n",
2495 (long)tfirst, (long)tlast);
2497 Perl_sv_catpvf(aTHX_ listsv, "%04lx\t\tXXXX\n", (long)tfirst);
2501 Perl_sv_catpvf(aTHX_ listsv, "%04lx\t%04lx\t%04lx\n",
2502 (long)tfirst, (long)(tfirst + diff),
2505 Perl_sv_catpvf(aTHX_ listsv, "%04lx\t\t%04lx\n",
2506 (long)tfirst, (long)rfirst);
2508 if (rfirst + diff > max)
2509 max = rfirst + diff;
2511 grows = (tfirst < rfirst &&
2512 UNISKIP(tfirst) < UNISKIP(rfirst + diff));
2524 else if (max > 0xff)
2529 Safefree(cPVOPo->op_pv);
2530 cSVOPo->op_sv = (SV*)swash_init("utf8", "", listsv, bits, none);
2531 SvREFCNT_dec(listsv);
2533 SvREFCNT_dec(transv);
2535 if (!del && havefinal && rlen)
2536 (void)hv_store((HV*)SvRV((cSVOPo->op_sv)), "FINAL", 5,
2537 newSVuv((UV)final), 0);
2540 o->op_private |= OPpTRANS_GROWS;
2552 tbl = (short*)cPVOPo->op_pv;
2554 Zero(tbl, 256, short);
2555 for (i = 0; i < (I32)tlen; i++)
2557 for (i = 0, j = 0; i < 256; i++) {
2559 if (j >= (I32)rlen) {
2568 if (i < 128 && r[j] >= 128)
2578 o->op_private |= OPpTRANS_IDENTICAL;
2580 else if (j >= (I32)rlen)
2583 cPVOPo->op_pv = (char*)Renew(tbl, 0x101+rlen-j, short);
2584 tbl[0x100] = rlen - j;
2585 for (i=0; i < (I32)rlen - j; i++)
2586 tbl[0x101+i] = r[j+i];
2590 if (!rlen && !del) {
2593 o->op_private |= OPpTRANS_IDENTICAL;
2595 else if (!squash && rlen == tlen && memEQ((char*)t, (char*)r, tlen)) {
2596 o->op_private |= OPpTRANS_IDENTICAL;
2598 for (i = 0; i < 256; i++)
2600 for (i = 0, j = 0; i < (I32)tlen; i++,j++) {
2601 if (j >= (I32)rlen) {
2603 if (tbl[t[i]] == -1)
2609 if (tbl[t[i]] == -1) {
2610 if (t[i] < 128 && r[j] >= 128)
2617 o->op_private |= OPpTRANS_GROWS;
2625 Perl_newPMOP(pTHX_ I32 type, I32 flags)
2629 NewOp(1101, pmop, 1, PMOP);
2630 pmop->op_type = (OPCODE)type;
2631 pmop->op_ppaddr = PL_ppaddr[type];
2632 pmop->op_flags = (U8)flags;
2633 pmop->op_private = (U8)(0 | (flags >> 8));
2635 if (PL_hints & HINT_RE_TAINT)
2636 pmop->op_pmpermflags |= PMf_RETAINT;
2637 if (PL_hints & HINT_LOCALE)
2638 pmop->op_pmpermflags |= PMf_LOCALE;
2639 pmop->op_pmflags = pmop->op_pmpermflags;
2644 if(av_len((AV*) PL_regex_pad[0]) > -1) {
2645 repointer = av_pop((AV*)PL_regex_pad[0]);
2646 pmop->op_pmoffset = SvIV(repointer);
2647 SvREPADTMP_off(repointer);
2648 sv_setiv(repointer,0);
2650 repointer = newSViv(0);
2651 av_push(PL_regex_padav,SvREFCNT_inc(repointer));
2652 pmop->op_pmoffset = av_len(PL_regex_padav);
2653 PL_regex_pad = AvARRAY(PL_regex_padav);
2658 /* link into pm list */
2659 if (type != OP_TRANS && PL_curstash) {
2660 pmop->op_pmnext = HvPMROOT(PL_curstash);
2661 HvPMROOT(PL_curstash) = pmop;
2662 PmopSTASH_set(pmop,PL_curstash);
2665 return CHECKOP(type, pmop);
2669 Perl_pmruntime(pTHX_ OP *o, OP *expr, OP *repl)
2673 I32 repl_has_vars = 0;
2675 if (o->op_type == OP_TRANS)
2676 return pmtrans(o, expr, repl);
2678 PL_hints |= HINT_BLOCK_SCOPE;
2681 if (expr->op_type == OP_CONST) {
2683 SV *pat = ((SVOP*)expr)->op_sv;
2684 char *p = SvPV(pat, plen);
2685 if ((o->op_flags & OPf_SPECIAL) && strEQ(p, " ")) {
2686 sv_setpvn(pat, "\\s+", 3);
2687 p = SvPV(pat, plen);
2688 pm->op_pmflags |= PMf_SKIPWHITE;
2691 pm->op_pmdynflags |= PMdf_UTF8;
2692 PM_SETRE(pm, CALLREGCOMP(aTHX_ p, p + plen, pm));
2693 if (strEQ("\\s+", PM_GETRE(pm)->precomp))
2694 pm->op_pmflags |= PMf_WHITE;
2698 if (pm->op_pmflags & PMf_KEEP || !(PL_hints & HINT_RE_EVAL))
2699 expr = newUNOP((!(PL_hints & HINT_RE_EVAL)
2701 : OP_REGCMAYBE),0,expr);
2703 NewOp(1101, rcop, 1, LOGOP);
2704 rcop->op_type = OP_REGCOMP;
2705 rcop->op_ppaddr = PL_ppaddr[OP_REGCOMP];
2706 rcop->op_first = scalar(expr);
2707 rcop->op_flags |= ((PL_hints & HINT_RE_EVAL)
2708 ? (OPf_SPECIAL | OPf_KIDS)
2710 rcop->op_private = 1;
2713 /* establish postfix order */
2714 if (pm->op_pmflags & PMf_KEEP || !(PL_hints & HINT_RE_EVAL)) {
2716 rcop->op_next = expr;
2717 ((UNOP*)expr)->op_first->op_next = (OP*)rcop;
2720 rcop->op_next = LINKLIST(expr);
2721 expr->op_next = (OP*)rcop;
2724 prepend_elem(o->op_type, scalar((OP*)rcop), o);
2729 if (pm->op_pmflags & PMf_EVAL) {
2731 if (CopLINE(PL_curcop) < (line_t)PL_multi_end)
2732 CopLINE_set(PL_curcop, (line_t)PL_multi_end);
2734 #ifdef USE_5005THREADS
2735 else if (repl->op_type == OP_THREADSV
2736 && strchr("&`'123456789+",
2737 PL_threadsv_names[repl->op_targ]))
2741 #endif /* USE_5005THREADS */
2742 else if (repl->op_type == OP_CONST)
2746 for (curop = LINKLIST(repl); curop!=repl; curop = LINKLIST(curop)) {
2747 if (PL_opargs[curop->op_type] & OA_DANGEROUS) {
2748 #ifdef USE_5005THREADS
2749 if (curop->op_type == OP_THREADSV) {
2751 if (strchr("&`'123456789+", curop->op_private))
2755 if (curop->op_type == OP_GV) {
2756 GV *gv = cGVOPx_gv(curop);
2758 if (strchr("&`'123456789+-\016\022", *GvENAME(gv)))
2761 #endif /* USE_5005THREADS */
2762 else if (curop->op_type == OP_RV2CV)
2764 else if (curop->op_type == OP_RV2SV ||
2765 curop->op_type == OP_RV2AV ||
2766 curop->op_type == OP_RV2HV ||
2767 curop->op_type == OP_RV2GV) {
2768 if (lastop && lastop->op_type != OP_GV) /*funny deref?*/
2771 else if (curop->op_type == OP_PADSV ||
2772 curop->op_type == OP_PADAV ||
2773 curop->op_type == OP_PADHV ||
2774 curop->op_type == OP_PADANY) {
2777 else if (curop->op_type == OP_PUSHRE)
2778 ; /* Okay here, dangerous in newASSIGNOP */
2788 || PM_GETRE(pm)->reganch & ROPT_EVAL_SEEN))) {
2789 pm->op_pmflags |= PMf_CONST; /* const for long enough */
2790 pm->op_pmpermflags |= PMf_CONST; /* const for long enough */
2791 prepend_elem(o->op_type, scalar(repl), o);
2794 if (curop == repl && !PM_GETRE(pm)) { /* Has variables. */
2795 pm->op_pmflags |= PMf_MAYBE_CONST;
2796 pm->op_pmpermflags |= PMf_MAYBE_CONST;
2798 NewOp(1101, rcop, 1, LOGOP);
2799 rcop->op_type = OP_SUBSTCONT;
2800 rcop->op_ppaddr = PL_ppaddr[OP_SUBSTCONT];
2801 rcop->op_first = scalar(repl);
2802 rcop->op_flags |= OPf_KIDS;
2803 rcop->op_private = 1;
2806 /* establish postfix order */
2807 rcop->op_next = LINKLIST(repl);
2808 repl->op_next = (OP*)rcop;
2810 pm->op_pmreplroot = scalar((OP*)rcop);
2811 pm->op_pmreplstart = LINKLIST(rcop);
2820 Perl_newSVOP(pTHX_ I32 type, I32 flags, SV *sv)
2823 NewOp(1101, svop, 1, SVOP);
2824 svop->op_type = (OPCODE)type;
2825 svop->op_ppaddr = PL_ppaddr[type];
2827 svop->op_next = (OP*)svop;
2828 svop->op_flags = (U8)flags;
2829 if (PL_opargs[type] & OA_RETSCALAR)
2831 if (PL_opargs[type] & OA_TARGET)
2832 svop->op_targ = pad_alloc(type, SVs_PADTMP);
2833 return CHECKOP(type, svop);
2837 Perl_newPADOP(pTHX_ I32 type, I32 flags, SV *sv)
2840 NewOp(1101, padop, 1, PADOP);
2841 padop->op_type = (OPCODE)type;
2842 padop->op_ppaddr = PL_ppaddr[type];
2843 padop->op_padix = pad_alloc(type, SVs_PADTMP);
2844 SvREFCNT_dec(PAD_SVl(padop->op_padix));
2845 PAD_SETSV(padop->op_padix, sv);
2848 padop->op_next = (OP*)padop;
2849 padop->op_flags = (U8)flags;
2850 if (PL_opargs[type] & OA_RETSCALAR)
2852 if (PL_opargs[type] & OA_TARGET)
2853 padop->op_targ = pad_alloc(type, SVs_PADTMP);
2854 return CHECKOP(type, padop);
2858 Perl_newGVOP(pTHX_ I32 type, I32 flags, GV *gv)
2863 return newPADOP(type, flags, SvREFCNT_inc(gv));
2865 return newSVOP(type, flags, SvREFCNT_inc(gv));
2870 Perl_newPVOP(pTHX_ I32 type, I32 flags, char *pv)
2873 NewOp(1101, pvop, 1, PVOP);
2874 pvop->op_type = (OPCODE)type;
2875 pvop->op_ppaddr = PL_ppaddr[type];
2877 pvop->op_next = (OP*)pvop;
2878 pvop->op_flags = (U8)flags;
2879 if (PL_opargs[type] & OA_RETSCALAR)
2881 if (PL_opargs[type] & OA_TARGET)
2882 pvop->op_targ = pad_alloc(type, SVs_PADTMP);
2883 return CHECKOP(type, pvop);
2887 Perl_package(pTHX_ OP *o)
2891 save_hptr(&PL_curstash);
2892 save_item(PL_curstname);
2897 name = SvPV(sv, len);
2898 PL_curstash = gv_stashpvn(name,len,TRUE);
2899 sv_setpvn(PL_curstname, name, len);
2903 deprecate("\"package\" with no arguments");
2904 sv_setpv(PL_curstname,"<none>");
2905 PL_curstash = Nullhv;
2907 PL_hints |= HINT_BLOCK_SCOPE;
2908 PL_copline = NOLINE;
2913 Perl_utilize(pTHX_ int aver, I32 floor, OP *version, OP *idop, OP *arg)
2919 if (idop->op_type != OP_CONST)
2920 Perl_croak(aTHX_ "Module name must be constant");
2924 if (version != Nullop) {
2925 SV *vesv = ((SVOP*)version)->op_sv;
2927 if (arg == Nullop && !SvNIOKp(vesv)) {
2934 if (version->op_type != OP_CONST || !SvNIOKp(vesv))
2935 Perl_croak(aTHX_ "Version number must be constant number");
2937 /* Make copy of idop so we don't free it twice */
2938 pack = newSVOP(OP_CONST, 0, newSVsv(((SVOP*)idop)->op_sv));
2940 /* Fake up a method call to VERSION */
2941 meth = newSVpvn("VERSION",7);
2942 sv_upgrade(meth, SVt_PVIV);
2943 (void)SvIOK_on(meth);
2944 PERL_HASH(SvUVX(meth), SvPVX(meth), SvCUR(meth));
2945 veop = convert(OP_ENTERSUB, OPf_STACKED|OPf_SPECIAL,
2946 append_elem(OP_LIST,
2947 prepend_elem(OP_LIST, pack, list(version)),
2948 newSVOP(OP_METHOD_NAMED, 0, meth)));
2952 /* Fake up an import/unimport */
2953 if (arg && arg->op_type == OP_STUB)
2954 imop = arg; /* no import on explicit () */
2955 else if (SvNIOKp(((SVOP*)idop)->op_sv)) {
2956 imop = Nullop; /* use 5.0; */
2961 /* Make copy of idop so we don't free it twice */
2962 pack = newSVOP(OP_CONST, 0, newSVsv(((SVOP*)idop)->op_sv));
2964 /* Fake up a method call to import/unimport */
2965 meth = aver ? newSVpvn("import",6) : newSVpvn("unimport", 8);
2966 (void)SvUPGRADE(meth, SVt_PVIV);
2967 (void)SvIOK_on(meth);
2968 PERL_HASH(SvUVX(meth), SvPVX(meth), SvCUR(meth));
2969 imop = convert(OP_ENTERSUB, OPf_STACKED|OPf_SPECIAL,
2970 append_elem(OP_LIST,
2971 prepend_elem(OP_LIST, pack, list(arg)),
2972 newSVOP(OP_METHOD_NAMED, 0, meth)));
2975 /* Fake up the BEGIN {}, which does its thing immediately. */
2977 newSVOP(OP_CONST, 0, newSVpvn("BEGIN", 5)),
2980 append_elem(OP_LINESEQ,
2981 append_elem(OP_LINESEQ,
2982 newSTATEOP(0, Nullch, newUNOP(OP_REQUIRE, 0, idop)),
2983 newSTATEOP(0, Nullch, veop)),
2984 newSTATEOP(0, Nullch, imop) ));
2986 /* The "did you use incorrect case?" warning used to be here.
2987 * The problem is that on case-insensitive filesystems one
2988 * might get false positives for "use" (and "require"):
2989 * "use Strict" or "require CARP" will work. This causes
2990 * portability problems for the script: in case-strict
2991 * filesystems the script will stop working.
2993 * The "incorrect case" warning checked whether "use Foo"
2994 * imported "Foo" to your namespace, but that is wrong, too:
2995 * there is no requirement nor promise in the language that
2996 * a Foo.pm should or would contain anything in package "Foo".
2998 * There is very little Configure-wise that can be done, either:
2999 * the case-sensitivity of the build filesystem of Perl does not
3000 * help in guessing the case-sensitivity of the runtime environment.
3003 PL_hints |= HINT_BLOCK_SCOPE;
3004 PL_copline = NOLINE;
3006 PL_cop_seqmax++; /* Purely for B::*'s benefit */
3010 =head1 Embedding Functions
3012 =for apidoc load_module
3014 Loads the module whose name is pointed to by the string part of name.
3015 Note that the actual module name, not its filename, should be given.
3016 Eg, "Foo::Bar" instead of "Foo/Bar.pm". flags can be any of
3017 PERL_LOADMOD_DENY, PERL_LOADMOD_NOIMPORT, or PERL_LOADMOD_IMPORT_OPS
3018 (or 0 for no flags). ver, if specified, provides version semantics
3019 similar to C<use Foo::Bar VERSION>. The optional trailing SV*
3020 arguments can be used to specify arguments to the module's import()
3021 method, similar to C<use Foo::Bar VERSION LIST>.
3026 Perl_load_module(pTHX_ U32 flags, SV *name, SV *ver, ...)
3029 va_start(args, ver);
3030 vload_module(flags, name, ver, &args);
3034 #ifdef PERL_IMPLICIT_CONTEXT
3036 Perl_load_module_nocontext(U32 flags, SV *name, SV *ver, ...)
3040 va_start(args, ver);
3041 vload_module(flags, name, ver, &args);
3047 Perl_vload_module(pTHX_ U32 flags, SV *name, SV *ver, va_list *args)
3049 OP *modname, *veop, *imop;
3051 modname = newSVOP(OP_CONST, 0, name);
3052 modname->op_private |= OPpCONST_BARE;
3054 veop = newSVOP(OP_CONST, 0, ver);
3058 if (flags & PERL_LOADMOD_NOIMPORT) {
3059 imop = sawparens(newNULLLIST());
3061 else if (flags & PERL_LOADMOD_IMPORT_OPS) {
3062 imop = va_arg(*args, OP*);
3067 sv = va_arg(*args, SV*);
3069 imop = append_elem(OP_LIST, imop, newSVOP(OP_CONST, 0, sv));
3070 sv = va_arg(*args, SV*);
3074 line_t ocopline = PL_copline;
3075 COP *ocurcop = PL_curcop;
3076 int oexpect = PL_expect;
3078 utilize(!(flags & PERL_LOADMOD_DENY), start_subparse(FALSE, 0),
3079 veop, modname, imop);
3080 PL_expect = oexpect;
3081 PL_copline = ocopline;
3082 PL_curcop = ocurcop;
3087 Perl_dofile(pTHX_ OP *term)
3092 gv = gv_fetchpv("do", FALSE, SVt_PVCV);
3093 if (!(gv && GvCVu(gv) && GvIMPORTED_CV(gv)))
3094 gv = gv_fetchpv("CORE::GLOBAL::do", FALSE, SVt_PVCV);
3096 if (gv && GvCVu(gv) && GvIMPORTED_CV(gv)) {
3097 doop = ck_subr(newUNOP(OP_ENTERSUB, OPf_STACKED,
3098 append_elem(OP_LIST, term,
3099 scalar(newUNOP(OP_RV2CV, 0,
3104 doop = newUNOP(OP_DOFILE, 0, scalar(term));
3110 Perl_newSLICEOP(pTHX_ I32 flags, OP *subscript, OP *listval)
3112 return newBINOP(OP_LSLICE, flags,
3113 list(force_list(subscript)),
3114 list(force_list(listval)) );
3118 S_list_assignment(pTHX_ register OP *o)
3123 if (o->op_type == OP_NULL && o->op_flags & OPf_KIDS)
3124 o = cUNOPo->op_first;
3126 if (o->op_type == OP_COND_EXPR) {
3127 I32 t = list_assignment(cLOGOPo->op_first->op_sibling);
3128 I32 f = list_assignment(cLOGOPo->op_first->op_sibling->op_sibling);
3133 yyerror("Assignment to both a list and a scalar");
3137 if (o->op_type == OP_LIST &&
3138 (o->op_flags & OPf_WANT) == OPf_WANT_SCALAR &&
3139 o->op_private & OPpLVAL_INTRO)
3142 if (o->op_type == OP_LIST || o->op_flags & OPf_PARENS ||
3143 o->op_type == OP_RV2AV || o->op_type == OP_RV2HV ||
3144 o->op_type == OP_ASLICE || o->op_type == OP_HSLICE)
3147 if (o->op_type == OP_PADAV || o->op_type == OP_PADHV)
3150 if (o->op_type == OP_RV2SV)
3157 Perl_newASSIGNOP(pTHX_ I32 flags, OP *left, I32 optype, OP *right)
3162 if (optype == OP_ANDASSIGN || optype == OP_ORASSIGN) {
3163 return newLOGOP(optype, 0,
3164 mod(scalar(left), optype),
3165 newUNOP(OP_SASSIGN, 0, scalar(right)));
3168 return newBINOP(optype, OPf_STACKED,
3169 mod(scalar(left), optype), scalar(right));
3173 if (list_assignment(left)) {
3177 PL_eval_start = right; /* Grandfathering $[ assignment here. Bletch.*/
3178 left = mod(left, OP_AASSIGN);
3186 curop = list(force_list(left));
3187 o = newBINOP(OP_AASSIGN, flags, list(force_list(right)), curop);
3188 o->op_private = (U8)(0 | (flags >> 8));
3189 for (curop = ((LISTOP*)curop)->op_first;
3190 curop; curop = curop->op_sibling)
3192 if (curop->op_type == OP_RV2HV &&
3193 ((UNOP*)curop)->op_first->op_type != OP_GV) {
3194 o->op_private |= OPpASSIGN_HASH;
3199 /* PL_generation sorcery:
3200 * an assignment like ($a,$b) = ($c,$d) is easier than
3201 * ($a,$b) = ($c,$a), since there is no need for temporary vars.
3202 * To detect whether there are common vars, the global var
3203 * PL_generation is incremented for each assign op we compile.
3204 * Then, while compiling the assign op, we run through all the
3205 * variables on both sides of the assignment, setting a spare slot
3206 * in each of them to PL_generation. If any of them already have
3207 * that value, we know we've got commonality. We could use a
3208 * single bit marker, but then we'd have to make 2 passes, first
3209 * to clear the flag, then to test and set it. To find somewhere
3210 * to store these values, evil chicanery is done with SvCUR().
3213 if (!(left->op_private & OPpLVAL_INTRO)) {
3216 for (curop = LINKLIST(o); curop != o; curop = LINKLIST(curop)) {
3217 if (PL_opargs[curop->op_type] & OA_DANGEROUS) {
3218 if (curop->op_type == OP_GV) {
3219 GV *gv = cGVOPx_gv(curop);
3220 if (gv == PL_defgv || (int)SvCUR(gv) == PL_generation)
3222 SvCUR(gv) = PL_generation;
3224 else if (curop->op_type == OP_PADSV ||
3225 curop->op_type == OP_PADAV ||
3226 curop->op_type == OP_PADHV ||
3227 curop->op_type == OP_PADANY)
3229 if ((int)PAD_COMPNAME_GEN(curop->op_targ)
3232 PAD_COMPNAME_GEN(curop->op_targ)
3236 else if (curop->op_type == OP_RV2CV)
3238 else if (curop->op_type == OP_RV2SV ||
3239 curop->op_type == OP_RV2AV ||
3240 curop->op_type == OP_RV2HV ||
3241 curop->op_type == OP_RV2GV) {
3242 if (lastop->op_type != OP_GV) /* funny deref? */
3245 else if (curop->op_type == OP_PUSHRE) {
3246 if (((PMOP*)curop)->op_pmreplroot) {
3248 GV *gv = (GV*)PAD_SVl(INT2PTR(PADOFFSET,
3249 ((PMOP*)curop)->op_pmreplroot));
3251 GV *gv = (GV*)((PMOP*)curop)->op_pmreplroot;
3253 if (gv == PL_defgv || (int)SvCUR(gv) == PL_generation)
3255 SvCUR(gv) = PL_generation;
3264 o->op_private |= OPpASSIGN_COMMON;
3266 if (right && right->op_type == OP_SPLIT) {
3268 if ((tmpop = ((LISTOP*)right)->op_first) &&
3269 tmpop->op_type == OP_PUSHRE)
3271 PMOP *pm = (PMOP*)tmpop;
3272 if (left->op_type == OP_RV2AV &&
3273 !(left->op_private & OPpLVAL_INTRO) &&
3274 !(o->op_private & OPpASSIGN_COMMON) )
3276 tmpop = ((UNOP*)left)->op_first;
3277 if (tmpop->op_type == OP_GV && !pm->op_pmreplroot) {
3279 pm->op_pmreplroot = INT2PTR(OP*, cPADOPx(tmpop)->op_padix);
3280 cPADOPx(tmpop)->op_padix = 0; /* steal it */
3282 pm->op_pmreplroot = (OP*)cSVOPx(tmpop)->op_sv;
3283 cSVOPx(tmpop)->op_sv = Nullsv; /* steal it */
3285 pm->op_pmflags |= PMf_ONCE;
3286 tmpop = cUNOPo->op_first; /* to list (nulled) */
3287 tmpop = ((UNOP*)tmpop)->op_first; /* to pushmark */
3288 tmpop->op_sibling = Nullop; /* don't free split */
3289 right->op_next = tmpop->op_next; /* fix starting loc */
3290 op_free(o); /* blow off assign */
3291 right->op_flags &= ~OPf_WANT;
3292 /* "I don't know and I don't care." */
3297 if (PL_modcount < RETURN_UNLIMITED_NUMBER &&
3298 ((LISTOP*)right)->op_last->op_type == OP_CONST)
3300 SV *sv = ((SVOP*)((LISTOP*)right)->op_last)->op_sv;
3302 sv_setiv(sv, PL_modcount+1);
3310 right = newOP(OP_UNDEF, 0);
3311 if (right->op_type == OP_READLINE) {
3312 right->op_flags |= OPf_STACKED;
3313 return newBINOP(OP_NULL, flags, mod(scalar(left), OP_SASSIGN), scalar(right));
3316 PL_eval_start = right; /* Grandfathering $[ assignment here. Bletch.*/
3317 o = newBINOP(OP_SASSIGN, flags,
3318 scalar(right), mod(scalar(left), OP_SASSIGN) );
3330 Perl_newSTATEOP(pTHX_ I32 flags, char *label, OP *o)
3332 U32 seq = intro_my();
3335 NewOp(1101, cop, 1, COP);
3336 if (PERLDB_LINE && CopLINE(PL_curcop) && PL_curstash != PL_debstash) {
3337 cop->op_type = OP_DBSTATE;
3338 cop->op_ppaddr = PL_ppaddr[ OP_DBSTATE ];
3341 cop->op_type = OP_NEXTSTATE;
3342 cop->op_ppaddr = PL_ppaddr[ OP_NEXTSTATE ];
3344 cop->op_flags = (U8)flags;
3345 cop->op_private = (U8)(PL_hints & HINT_PRIVATE_MASK);
3347 cop->op_private |= NATIVE_HINTS;
3349 PL_compiling.op_private = cop->op_private;
3350 cop->op_next = (OP*)cop;
3353 cop->cop_label = label;
3354 PL_hints |= HINT_BLOCK_SCOPE;
3357 cop->cop_arybase = PL_curcop->cop_arybase;
3358 if (specialWARN(PL_curcop->cop_warnings))
3359 cop->cop_warnings = PL_curcop->cop_warnings ;
3361 cop->cop_warnings = newSVsv(PL_curcop->cop_warnings) ;
3362 if (specialCopIO(PL_curcop->cop_io))
3363 cop->cop_io = PL_curcop->cop_io;
3365 cop->cop_io = newSVsv(PL_curcop->cop_io) ;
3368 if (PL_copline == NOLINE)
3369 CopLINE_set(cop, CopLINE(PL_curcop));
3371 CopLINE_set(cop, PL_copline);
3372 PL_copline = NOLINE;
3375 CopFILE_set(cop, CopFILE(PL_curcop)); /* XXX share in a pvtable? */
3377 CopFILEGV_set(cop, CopFILEGV(PL_curcop));
3379 CopSTASH_set(cop, PL_curstash);
3381 if (PERLDB_LINE && PL_curstash != PL_debstash) {
3382 SV **svp = av_fetch(CopFILEAV(PL_curcop), (I32)CopLINE(cop), FALSE);
3383 if (svp && *svp != &PL_sv_undef ) {
3384 (void)SvIOK_on(*svp);
3385 SvIVX(*svp) = PTR2IV(cop);
3389 return prepend_elem(OP_LINESEQ, (OP*)cop, o);
3394 Perl_newLOGOP(pTHX_ I32 type, I32 flags, OP *first, OP *other)
3396 return new_logop(type, flags, &first, &other);
3400 S_new_logop(pTHX_ I32 type, I32 flags, OP** firstp, OP** otherp)
3404 OP *first = *firstp;
3405 OP *other = *otherp;
3407 if (type == OP_XOR) /* Not short circuit, but here by precedence. */
3408 return newBINOP(type, flags, scalar(first), scalar(other));
3410 scalarboolean(first);
3411 /* optimize "!a && b" to "a || b", and "!a || b" to "a && b" */
3412 if (first->op_type == OP_NOT && (first->op_flags & OPf_SPECIAL)) {
3413 if (type == OP_AND || type == OP_OR) {
3419 first = *firstp = cUNOPo->op_first;
3421 first->op_next = o->op_next;
3422 cUNOPo->op_first = Nullop;
3426 if (first->op_type == OP_CONST) {
3427 if (ckWARN(WARN_BAREWORD) && (first->op_private & OPpCONST_BARE)) {
3428 if (first->op_private & OPpCONST_STRICT)
3429 no_bareword_allowed(first);
3431 Perl_warner(aTHX_ packWARN(WARN_BAREWORD), "Bareword found in conditional");
3433 if ((type == OP_AND) == (SvTRUE(((SVOP*)first)->op_sv))) {
3444 else if (ckWARN(WARN_MISC) && (first->op_flags & OPf_KIDS)) {
3445 OP *k1 = ((UNOP*)first)->op_first;
3446 OP *k2 = k1->op_sibling;
3448 switch (first->op_type)
3451 if (k2 && k2->op_type == OP_READLINE
3452 && (k2->op_flags & OPf_STACKED)
3453 && ((k1->op_flags & OPf_WANT) == OPf_WANT_SCALAR))
3455 warnop = k2->op_type;
3460 if (k1->op_type == OP_READDIR
3461 || k1->op_type == OP_GLOB
3462 || (k1->op_type == OP_NULL && k1->op_targ == OP_GLOB)
3463 || k1->op_type == OP_EACH)
3465 warnop = ((k1->op_type == OP_NULL)
3466 ? (OPCODE)k1->op_targ : k1->op_type);
3471 line_t oldline = CopLINE(PL_curcop);
3472 CopLINE_set(PL_curcop, PL_copline);
3473 Perl_warner(aTHX_ packWARN(WARN_MISC),
3474 "Value of %s%s can be \"0\"; test with defined()",
3476 ((warnop == OP_READLINE || warnop == OP_GLOB)
3477 ? " construct" : "() operator"));
3478 CopLINE_set(PL_curcop, oldline);
3485 if (type == OP_ANDASSIGN || type == OP_ORASSIGN)
3486 other->op_private |= OPpASSIGN_BACKWARDS; /* other is an OP_SASSIGN */
3488 NewOp(1101, logop, 1, LOGOP);
3490 logop->op_type = (OPCODE)type;
3491 logop->op_ppaddr = PL_ppaddr[type];
3492 logop->op_first = first;
3493 logop->op_flags = flags | OPf_KIDS;
3494 logop->op_other = LINKLIST(other);
3495 logop->op_private = (U8)(1 | (flags >> 8));
3497 /* establish postfix order */
3498 logop->op_next = LINKLIST(first);
3499 first->op_next = (OP*)logop;
3500 first->op_sibling = other;
3502 CHECKOP(type,logop);
3504 o = newUNOP(OP_NULL, 0, (OP*)logop);
3511 Perl_newCONDOP(pTHX_ I32 flags, OP *first, OP *trueop, OP *falseop)
3518 return newLOGOP(OP_AND, 0, first, trueop);
3520 return newLOGOP(OP_OR, 0, first, falseop);
3522 scalarboolean(first);
3523 if (first->op_type == OP_CONST) {
3524 if (first->op_private & OPpCONST_BARE &&
3525 first->op_private & OPpCONST_STRICT) {
3526 no_bareword_allowed(first);
3528 if (SvTRUE(((SVOP*)first)->op_sv)) {
3539 NewOp(1101, logop, 1, LOGOP);
3540 logop->op_type = OP_COND_EXPR;
3541 logop->op_ppaddr = PL_ppaddr[OP_COND_EXPR];
3542 logop->op_first = first;
3543 logop->op_flags = flags | OPf_KIDS;
3544 logop->op_private = (U8)(1 | (flags >> 8));
3545 logop->op_other = LINKLIST(trueop);
3546 logop->op_next = LINKLIST(falseop);
3548 CHECKOP(OP_COND_EXPR, /* that's logop->op_type */
3551 /* establish postfix order */
3552 start = LINKLIST(first);
3553 first->op_next = (OP*)logop;
3555 first->op_sibling = trueop;
3556 trueop->op_sibling = falseop;
3557 o = newUNOP(OP_NULL, 0, (OP*)logop);
3559 trueop->op_next = falseop->op_next = o;
3566 Perl_newRANGE(pTHX_ I32 flags, OP *left, OP *right)
3574 NewOp(1101, range, 1, LOGOP);
3576 range->op_type = OP_RANGE;
3577 range->op_ppaddr = PL_ppaddr[OP_RANGE];
3578 range->op_first = left;
3579 range->op_flags = OPf_KIDS;
3580 leftstart = LINKLIST(left);
3581 range->op_other = LINKLIST(right);
3582 range->op_private = (U8)(1 | (flags >> 8));
3584 left->op_sibling = right;
3586 range->op_next = (OP*)range;
3587 flip = newUNOP(OP_FLIP, flags, (OP*)range);
3588 flop = newUNOP(OP_FLOP, 0, flip);
3589 o = newUNOP(OP_NULL, 0, flop);
3591 range->op_next = leftstart;
3593 left->op_next = flip;
3594 right->op_next = flop;
3596 range->op_targ = pad_alloc(OP_RANGE, SVs_PADMY);
3597 sv_upgrade(PAD_SV(range->op_targ), SVt_PVNV);
3598 flip->op_targ = pad_alloc(OP_RANGE, SVs_PADMY);
3599 sv_upgrade(PAD_SV(flip->op_targ), SVt_PVNV);
3601 flip->op_private = left->op_type == OP_CONST ? OPpFLIP_LINENUM : 0;
3602 flop->op_private = right->op_type == OP_CONST ? OPpFLIP_LINENUM : 0;
3605 if (!flip->op_private || !flop->op_private)
3606 linklist(o); /* blow off optimizer unless constant */
3612 Perl_newLOOPOP(pTHX_ I32 flags, I32 debuggable, OP *expr, OP *block)
3616 int once = block && block->op_flags & OPf_SPECIAL &&
3617 (block->op_type == OP_ENTERSUB || block->op_type == OP_NULL);
3620 if (once && expr->op_type == OP_CONST && !SvTRUE(((SVOP*)expr)->op_sv))
3621 return block; /* do {} while 0 does once */
3622 if (expr->op_type == OP_READLINE || expr->op_type == OP_GLOB
3623 || (expr->op_type == OP_NULL && expr->op_targ == OP_GLOB)) {
3624 expr = newUNOP(OP_DEFINED, 0,
3625 newASSIGNOP(0, newDEFSVOP(), 0, expr) );
3626 } else if (expr->op_flags & OPf_KIDS) {
3627 OP *k1 = ((UNOP*)expr)->op_first;
3628 OP *k2 = (k1) ? k1->op_sibling : NULL;
3629 switch (expr->op_type) {
3631 if (k2 && k2->op_type == OP_READLINE
3632 && (k2->op_flags & OPf_STACKED)
3633 && ((k1->op_flags & OPf_WANT) == OPf_WANT_SCALAR))
3634 expr = newUNOP(OP_DEFINED, 0, expr);
3638 if (k1->op_type == OP_READDIR
3639 || k1->op_type == OP_GLOB
3640 || (k1->op_type == OP_NULL && k1->op_targ == OP_GLOB)
3641 || k1->op_type == OP_EACH)
3642 expr = newUNOP(OP_DEFINED, 0, expr);
3648 listop = append_elem(OP_LINESEQ, block, newOP(OP_UNSTACK, 0));
3649 o = new_logop(OP_AND, 0, &expr, &listop);
3652 ((LISTOP*)listop)->op_last->op_next = LINKLIST(o);
3654 if (once && o != listop)
3655 o->op_next = ((LOGOP*)cUNOPo->op_first)->op_other;
3658 o = newUNOP(OP_NULL, 0, o); /* or do {} while 1 loses outer block */
3660 o->op_flags |= flags;
3662 o->op_flags |= OPf_SPECIAL; /* suppress POPBLOCK curpm restoration*/
3667 Perl_newWHILEOP(pTHX_ I32 flags, I32 debuggable, LOOP *loop, I32 whileline, OP *expr, OP *block, OP *cont)
3675 if (expr && (expr->op_type == OP_READLINE || expr->op_type == OP_GLOB
3676 || (expr->op_type == OP_NULL && expr->op_targ == OP_GLOB))) {
3677 expr = newUNOP(OP_DEFINED, 0,
3678 newASSIGNOP(0, newDEFSVOP(), 0, expr) );
3679 } else if (expr && (expr->op_flags & OPf_KIDS)) {
3680 OP *k1 = ((UNOP*)expr)->op_first;
3681 OP *k2 = (k1) ? k1->op_sibling : NULL;
3682 switch (expr->op_type) {
3684 if (k2 && k2->op_type == OP_READLINE
3685 && (k2->op_flags & OPf_STACKED)
3686 && ((k1->op_flags & OPf_WANT) == OPf_WANT_SCALAR))
3687 expr = newUNOP(OP_DEFINED, 0, expr);
3691 if (k1->op_type == OP_READDIR
3692 || k1->op_type == OP_GLOB
3693 || (k1->op_type == OP_NULL && k1->op_targ == OP_GLOB)
3694 || k1->op_type == OP_EACH)
3695 expr = newUNOP(OP_DEFINED, 0, expr);
3701 block = newOP(OP_NULL, 0);
3703 block = scope(block);
3707 next = LINKLIST(cont);
3710 OP *unstack = newOP(OP_UNSTACK, 0);
3713 cont = append_elem(OP_LINESEQ, cont, unstack);
3716 listop = append_list(OP_LINESEQ, (LISTOP*)block, (LISTOP*)cont);
3717 redo = LINKLIST(listop);
3720 PL_copline = (line_t)whileline;
3722 o = new_logop(OP_AND, 0, &expr, &listop);
3723 if (o == expr && o->op_type == OP_CONST && !SvTRUE(cSVOPo->op_sv)) {
3724 op_free(expr); /* oops, it's a while (0) */
3726 return Nullop; /* listop already freed by new_logop */
3729 ((LISTOP*)listop)->op_last->op_next =
3730 (o == listop ? redo : LINKLIST(o));
3736 NewOp(1101,loop,1,LOOP);
3737 loop->op_type = OP_ENTERLOOP;
3738 loop->op_ppaddr = PL_ppaddr[OP_ENTERLOOP];
3739 loop->op_private = 0;
3740 loop->op_next = (OP*)loop;
3743 o = newBINOP(OP_LEAVELOOP, 0, (OP*)loop, o);
3745 loop->op_redoop = redo;
3746 loop->op_lastop = o;
3747 o->op_private |= loopflags;
3750 loop->op_nextop = next;
3752 loop->op_nextop = o;
3754 o->op_flags |= flags;
3755 o->op_private |= (flags >> 8);
3760 Perl_newFOROP(pTHX_ I32 flags,char *label,line_t forline,OP *sv,OP *expr,OP *block,OP *cont)
3764 PADOFFSET padoff = 0;
3769 if (sv->op_type == OP_RV2SV) { /* symbol table variable */
3770 iterpflags = sv->op_private & OPpOUR_INTRO; /* for our $x () */
3771 sv->op_type = OP_RV2GV;
3772 sv->op_ppaddr = PL_ppaddr[OP_RV2GV];
3774 else if (sv->op_type == OP_PADSV) { /* private variable */
3775 iterpflags = sv->op_private & OPpLVAL_INTRO; /* for my $x () */
3776 padoff = sv->op_targ;
3781 else if (sv->op_type == OP_THREADSV) { /* per-thread variable */
3782 padoff = sv->op_targ;
3784 iterflags |= OPf_SPECIAL;
3789 Perl_croak(aTHX_ "Can't use %s for loop variable", PL_op_desc[sv->op_type]);
3792 #ifdef USE_5005THREADS
3793 padoff = find_threadsv("_");
3794 iterflags |= OPf_SPECIAL;
3796 sv = newGVOP(OP_GV, 0, PL_defgv);
3799 if (expr->op_type == OP_RV2AV || expr->op_type == OP_PADAV) {
3800 expr = mod(force_list(scalar(ref(expr, OP_ITER))), OP_GREPSTART);
3801 iterflags |= OPf_STACKED;
3803 else if (expr->op_type == OP_NULL &&
3804 (expr->op_flags & OPf_KIDS) &&
3805 ((BINOP*)expr)->op_first->op_type == OP_FLOP)
3807 /* Basically turn for($x..$y) into the same as for($x,$y), but we
3808 * set the STACKED flag to indicate that these values are to be
3809 * treated as min/max values by 'pp_iterinit'.
3811 UNOP* flip = (UNOP*)((UNOP*)((BINOP*)expr)->op_first)->op_first;
3812 LOGOP* range = (LOGOP*) flip->op_first;
3813 OP* left = range->op_first;
3814 OP* right = left->op_sibling;
3817 range->op_flags &= ~OPf_KIDS;
3818 range->op_first = Nullop;
3820 listop = (LISTOP*)newLISTOP(OP_LIST, 0, left, right);
3821 listop->op_first->op_next = range->op_next;
3822 left->op_next = range->op_other;
3823 right->op_next = (OP*)listop;
3824 listop->op_next = listop->op_first;
3827 expr = (OP*)(listop);
3829 iterflags |= OPf_STACKED;
3832 expr = mod(force_list(expr), OP_GREPSTART);
3836 loop = (LOOP*)list(convert(OP_ENTERITER, iterflags,
3837 append_elem(OP_LIST, expr, scalar(sv))));
3838 assert(!loop->op_next);
3839 /* for my $x () sets OPpLVAL_INTRO;
3840 * for our $x () sets OPpOUR_INTRO; both only used by Deparse.pm */
3841 loop->op_private = (U8)iterpflags;
3842 #ifdef PL_OP_SLAB_ALLOC
3845 NewOp(1234,tmp,1,LOOP);
3846 Copy(loop,tmp,1,LOOP);
3851 Renew(loop, 1, LOOP);
3853 loop->op_targ = padoff;
3854 wop = newWHILEOP(flags, 1, loop, forline, newOP(OP_ITER, 0), block, cont);
3855 PL_copline = forline;
3856 return newSTATEOP(0, label, wop);
3860 Perl_newLOOPEX(pTHX_ I32 type, OP *label)
3865 if (type != OP_GOTO || label->op_type == OP_CONST) {
3866 /* "last()" means "last" */
3867 if (label->op_type == OP_STUB && (label->op_flags & OPf_PARENS))
3868 o = newOP(type, OPf_SPECIAL);
3870 o = newPVOP(type, 0, savepv(label->op_type == OP_CONST
3871 ? SvPVx(((SVOP*)label)->op_sv, n_a)
3877 /* Check whether it's going to be a goto &function */
3878 if (label->op_type == OP_ENTERSUB
3879 && !(label->op_flags & OPf_STACKED))
3880 label = newUNOP(OP_REFGEN, 0, mod(label, OP_REFGEN));
3881 o = newUNOP(type, OPf_STACKED, label);
3883 PL_hints |= HINT_BLOCK_SCOPE;
3888 =for apidoc cv_undef
3890 Clear out all the active components of a CV. This can happen either
3891 by an explicit C<undef &foo>, or by the reference count going to zero.
3892 In the former case, we keep the CvOUTSIDE pointer, so that any anonymous
3893 children can still follow the full lexical scope chain.
3899 Perl_cv_undef(pTHX_ CV *cv)
3901 #ifdef USE_5005THREADS
3903 MUTEX_DESTROY(CvMUTEXP(cv));
3904 Safefree(CvMUTEXP(cv));
3907 #endif /* USE_5005THREADS */
3910 if (CvFILE(cv) && !CvXSUB(cv)) {
3911 /* for XSUBs CvFILE point directly to static memory; __FILE__ */
3912 Safefree(CvFILE(cv));
3917 if (!CvXSUB(cv) && CvROOT(cv)) {
3918 #ifdef USE_5005THREADS
3919 if (CvDEPTH(cv) || (CvOWNER(cv) && CvOWNER(cv) != thr))
3920 Perl_croak(aTHX_ "Can't undef active subroutine");
3923 Perl_croak(aTHX_ "Can't undef active subroutine");
3924 #endif /* USE_5005THREADS */
3927 PAD_SAVE_SETNULLPAD();
3929 op_free(CvROOT(cv));
3930 CvROOT(cv) = Nullop;
3933 SvPOK_off((SV*)cv); /* forget prototype */
3938 /* remove CvOUTSIDE unless this is an undef rather than a free */
3939 if (!SvREFCNT(cv) && CvOUTSIDE(cv)) {
3940 if (!CvWEAKOUTSIDE(cv))
3941 SvREFCNT_dec(CvOUTSIDE(cv));
3942 CvOUTSIDE(cv) = Nullcv;
3945 SvREFCNT_dec((SV*)CvXSUBANY(cv).any_ptr);
3951 /* delete all flags except WEAKOUTSIDE */
3952 CvFLAGS(cv) &= CVf_WEAKOUTSIDE;
3956 Perl_cv_ckproto(pTHX_ CV *cv, GV *gv, char *p)
3958 if (((!p != !SvPOK(cv)) || (p && strNE(p, SvPVX(cv)))) && ckWARN_d(WARN_PROTOTYPE)) {
3959 SV* msg = sv_newmortal();
3963 gv_efullname3(name = sv_newmortal(), gv, Nullch);
3964 sv_setpv(msg, "Prototype mismatch:");
3966 Perl_sv_catpvf(aTHX_ msg, " sub %"SVf, name);
3968 Perl_sv_catpvf(aTHX_ msg, " (%"SVf")", (SV *)cv);
3969 sv_catpv(msg, " vs ");
3971 Perl_sv_catpvf(aTHX_ msg, "(%s)", p);
3973 sv_catpv(msg, "none");
3974 Perl_warner(aTHX_ packWARN(WARN_PROTOTYPE), "%"SVf, msg);
3978 static void const_sv_xsub(pTHX_ CV* cv);
3982 =head1 Optree Manipulation Functions
3984 =for apidoc cv_const_sv
3986 If C<cv> is a constant sub eligible for inlining. returns the constant
3987 value returned by the sub. Otherwise, returns NULL.
3989 Constant subs can be created with C<newCONSTSUB> or as described in
3990 L<perlsub/"Constant Functions">.
3995 Perl_cv_const_sv(pTHX_ CV *cv)
3997 if (!cv || !CvCONST(cv))
3999 return (SV*)CvXSUBANY(cv).any_ptr;
4003 Perl_op_const_sv(pTHX_ OP *o, CV *cv)
4010 if (o->op_type == OP_LINESEQ && cLISTOPo->op_first)
4011 o = cLISTOPo->op_first->op_sibling;
4013 for (; o; o = o->op_next) {
4014 OPCODE type = o->op_type;
4016 if (sv && o->op_next == o)
4018 if (o->op_next != o) {
4019 if (type == OP_NEXTSTATE || type == OP_NULL || type == OP_PUSHMARK)
4021 if (type == OP_DBSTATE)
4024 if (type == OP_LEAVESUB || type == OP_RETURN)
4028 if (type == OP_CONST && cSVOPo->op_sv)
4030 else if ((type == OP_PADSV || type == OP_CONST) && cv) {
4031 sv = PAD_BASE_SV(CvPADLIST(cv), o->op_targ);
4035 /* We get here only from cv_clone2() while creating a closure.
4036 Copy the const value here instead of in cv_clone2 so that
4037 SvREADONLY_on doesn't lead to problems when leaving
4042 if (!SvREADONLY(sv) && SvREFCNT(sv) > 1)
4054 Perl_newMYSUB(pTHX_ I32 floor, OP *o, OP *proto, OP *attrs, OP *block)
4064 Perl_croak(aTHX_ "\"my sub\" not yet implemented");
4068 Perl_newSUB(pTHX_ I32 floor, OP *o, OP *proto, OP *block)
4070 return Perl_newATTRSUB(aTHX_ floor, o, proto, Nullop, block);
4074 Perl_newATTRSUB(pTHX_ I32 floor, OP *o, OP *proto, OP *attrs, OP *block)
4080 char *ps = proto ? SvPVx(((SVOP*)proto)->op_sv, n_a) : Nullch;
4084 name = o ? SvPVx(cSVOPo->op_sv, n_a) : Nullch;
4085 if (!name && PERLDB_NAMEANON && CopLINE(PL_curcop)) {
4086 SV *sv = sv_newmortal();
4087 Perl_sv_setpvf(aTHX_ sv, "%s[%s:%"IVdf"]",
4088 PL_curstash ? "__ANON__" : "__ANON__::__ANON__",
4089 CopFILE(PL_curcop), (IV)CopLINE(PL_curcop));
4094 gv = gv_fetchpv(name ? name : (aname ? aname :
4095 (PL_curstash ? "__ANON__" : "__ANON__::__ANON__")),
4096 GV_ADDMULTI | ((block || attrs) ? 0 : GV_NOINIT),
4106 if (SvTYPE(gv) != SVt_PVGV) { /* Maybe prototype now, and had at
4107 maximum a prototype before. */
4108 if (SvTYPE(gv) > SVt_NULL) {
4109 if (!SvPOK((SV*)gv) && !(SvIOK((SV*)gv) && SvIVX((SV*)gv) == -1)
4110 && ckWARN_d(WARN_PROTOTYPE))
4112 Perl_warner(aTHX_ packWARN(WARN_PROTOTYPE), "Runaway prototype");
4114 cv_ckproto((CV*)gv, NULL, ps);
4117 sv_setpv((SV*)gv, ps);
4119 sv_setiv((SV*)gv, -1);
4120 SvREFCNT_dec(PL_compcv);
4121 cv = PL_compcv = NULL;
4122 PL_sub_generation++;
4126 cv = (!name || GvCVGEN(gv)) ? Nullcv : GvCV(gv);
4128 #ifdef GV_UNIQUE_CHECK
4129 if (cv && GvUNIQUE(gv) && SvREADONLY(cv)) {
4130 Perl_croak(aTHX_ "Can't define subroutine %s (GV is unique)", name);
4134 if (!block || !ps || *ps || attrs)
4137 const_sv = op_const_sv(block, Nullcv);
4140 bool exists = CvROOT(cv) || CvXSUB(cv);
4142 #ifdef GV_UNIQUE_CHECK
4143 if (exists && GvUNIQUE(gv)) {
4144 Perl_croak(aTHX_ "Can't redefine unique subroutine %s", name);
4148 /* if the subroutine doesn't exist and wasn't pre-declared
4149 * with a prototype, assume it will be AUTOLOADed,
4150 * skipping the prototype check
4152 if (exists || SvPOK(cv))
4153 cv_ckproto(cv, gv, ps);
4154 /* already defined (or promised)? */
4155 if (exists || GvASSUMECV(gv)) {
4156 if (!block && !attrs) {
4157 if (CvFLAGS(PL_compcv)) {
4158 /* might have had built-in attrs applied */
4159 CvFLAGS(cv) |= (CvFLAGS(PL_compcv) & CVf_BUILTIN_ATTRS);
4161 /* just a "sub foo;" when &foo is already defined */
4162 SAVEFREESV(PL_compcv);
4165 /* ahem, death to those who redefine active sort subs */
4166 if (PL_curstackinfo->si_type == PERLSI_SORT && PL_sortcop == CvSTART(cv))
4167 Perl_croak(aTHX_ "Can't redefine active sort subroutine %s", name);
4169 if (ckWARN(WARN_REDEFINE)
4171 && (!const_sv || sv_cmp(cv_const_sv(cv), const_sv))))
4173 line_t oldline = CopLINE(PL_curcop);
4174 if (PL_copline != NOLINE)
4175 CopLINE_set(PL_curcop, PL_copline);
4176 Perl_warner(aTHX_ packWARN(WARN_REDEFINE),
4177 CvCONST(cv) ? "Constant subroutine %s redefined"
4178 : "Subroutine %s redefined", name);
4179 CopLINE_set(PL_curcop, oldline);
4187 SvREFCNT_inc(const_sv);
4189 assert(!CvROOT(cv) && !CvCONST(cv));
4190 sv_setpv((SV*)cv, ""); /* prototype is "" */
4191 CvXSUBANY(cv).any_ptr = const_sv;
4192 CvXSUB(cv) = const_sv_xsub;
4197 cv = newCONSTSUB(NULL, name, const_sv);
4200 SvREFCNT_dec(PL_compcv);
4202 PL_sub_generation++;
4209 /* Need to do a C<use attributes $stash_of_cv,\&cv,@attrs>
4210 * before we clobber PL_compcv.
4214 /* Might have had built-in attributes applied -- propagate them. */
4215 CvFLAGS(cv) |= (CvFLAGS(PL_compcv) & CVf_BUILTIN_ATTRS);
4216 if (CvGV(cv) && GvSTASH(CvGV(cv)))
4217 stash = GvSTASH(CvGV(cv));
4218 else if (CvSTASH(cv))
4219 stash = CvSTASH(cv);
4221 stash = PL_curstash;
4224 /* possibly about to re-define existing subr -- ignore old cv */
4225 rcv = (SV*)PL_compcv;
4226 if (name && GvSTASH(gv))
4227 stash = GvSTASH(gv);
4229 stash = PL_curstash;
4231 apply_attrs(stash, rcv, attrs, FALSE);
4233 if (cv) { /* must reuse cv if autoloaded */
4235 /* got here with just attrs -- work done, so bug out */
4236 SAVEFREESV(PL_compcv);
4239 /* transfer PL_compcv to cv */
4241 CvFLAGS(cv) = CvFLAGS(PL_compcv);
4242 CvOUTSIDE(cv) = CvOUTSIDE(PL_compcv);
4243 CvOUTSIDE_SEQ(cv) = CvOUTSIDE_SEQ(PL_compcv);
4244 CvOUTSIDE(PL_compcv) = 0;
4245 CvPADLIST(cv) = CvPADLIST(PL_compcv);
4246 CvPADLIST(PL_compcv) = 0;
4247 /* inner references to PL_compcv must be fixed up ... */
4248 pad_fixup_inner_anons(CvPADLIST(cv), PL_compcv, cv);
4249 /* ... before we throw it away */
4250 SvREFCNT_dec(PL_compcv);
4251 if (PERLDB_INTER)/* Advice debugger on the new sub. */
4252 ++PL_sub_generation;
4259 PL_sub_generation++;
4263 CvFILE_set_from_cop(cv, PL_curcop);
4264 CvSTASH(cv) = PL_curstash;
4265 #ifdef USE_5005THREADS
4267 if (!CvMUTEXP(cv)) {
4268 New(666, CvMUTEXP(cv), 1, perl_mutex);
4269 MUTEX_INIT(CvMUTEXP(cv));
4271 #endif /* USE_5005THREADS */
4274 sv_setpv((SV*)cv, ps);
4276 if (PL_error_count) {
4280 char *s = strrchr(name, ':');
4282 if (strEQ(s, "BEGIN")) {
4284 "BEGIN not safe after errors--compilation aborted";
4285 if (PL_in_eval & EVAL_KEEPERR)
4286 Perl_croak(aTHX_ not_safe);
4288 /* force display of errors found but not reported */
4289 sv_catpv(ERRSV, not_safe);
4290 Perl_croak(aTHX_ "%"SVf, ERRSV);
4299 CvROOT(cv) = newUNOP(OP_LEAVESUBLV, 0,
4300 mod(scalarseq(block), OP_LEAVESUBLV));
4303 /* This makes sub {}; work as expected. */
4304 if (block->op_type == OP_STUB) {
4306 block = newSTATEOP(0, Nullch, 0);
4308 CvROOT(cv) = newUNOP(OP_LEAVESUB, 0, scalarseq(block));
4310 CvROOT(cv)->op_private |= OPpREFCOUNTED;
4311 OpREFCNT_set(CvROOT(cv), 1);
4312 CvSTART(cv) = LINKLIST(CvROOT(cv));
4313 CvROOT(cv)->op_next = 0;
4314 CALL_PEEP(CvSTART(cv));
4316 /* now that optimizer has done its work, adjust pad values */
4318 pad_tidy(CvCLONE(cv) ? padtidy_SUBCLONE : padtidy_SUB);
4321 assert(!CvCONST(cv));
4322 if (ps && !*ps && op_const_sv(block, cv))
4326 if (name || aname) {
4328 char *tname = (name ? name : aname);
4330 if (PERLDB_SUBLINE && PL_curstash != PL_debstash) {
4331 SV *sv = NEWSV(0,0);
4332 SV *tmpstr = sv_newmortal();
4333 GV *db_postponed = gv_fetchpv("DB::postponed", GV_ADDMULTI, SVt_PVHV);
4337 Perl_sv_setpvf(aTHX_ sv, "%s:%ld-%ld",
4339 (long)PL_subline, (long)CopLINE(PL_curcop));
4340 gv_efullname3(tmpstr, gv, Nullch);
4341 hv_store(GvHV(PL_DBsub), SvPVX(tmpstr), SvCUR(tmpstr), sv, 0);
4342 hv = GvHVn(db_postponed);
4343 if (HvFILL(hv) > 0 && hv_exists(hv, SvPVX(tmpstr), SvCUR(tmpstr))
4344 && (pcv = GvCV(db_postponed)))
4350 call_sv((SV*)pcv, G_DISCARD);
4354 if ((s = strrchr(tname,':')))
4359 if (*s != 'B' && *s != 'E' && *s != 'C' && *s != 'I')
4362 if (strEQ(s, "BEGIN")) {
4363 I32 oldscope = PL_scopestack_ix;
4365 SAVECOPFILE(&PL_compiling);
4366 SAVECOPLINE(&PL_compiling);
4369 PL_beginav = newAV();
4370 DEBUG_x( dump_sub(gv) );
4371 av_push(PL_beginav, (SV*)cv);
4372 GvCV(gv) = 0; /* cv has been hijacked */
4373 call_list(oldscope, PL_beginav);
4375 PL_curcop = &PL_compiling;
4376 PL_compiling.op_private = (U8)(PL_hints & HINT_PRIVATE_MASK);
4379 else if (strEQ(s, "END") && !PL_error_count) {
4382 DEBUG_x( dump_sub(gv) );
4383 av_unshift(PL_endav, 1);
4384 av_store(PL_endav, 0, (SV*)cv);
4385 GvCV(gv) = 0; /* cv has been hijacked */
4387 else if (strEQ(s, "CHECK") && !PL_error_count) {
4389 PL_checkav = newAV();
4390 DEBUG_x( dump_sub(gv) );
4391 if (PL_main_start && ckWARN(WARN_VOID))
4392 Perl_warner(aTHX_ packWARN(WARN_VOID), "Too late to run CHECK block");
4393 av_unshift(PL_checkav, 1);
4394 av_store(PL_checkav, 0, (SV*)cv);
4395 GvCV(gv) = 0; /* cv has been hijacked */
4397 else if (strEQ(s, "INIT") && !PL_error_count) {
4399 PL_initav = newAV();
4400 DEBUG_x( dump_sub(gv) );
4401 if (PL_main_start && ckWARN(WARN_VOID))
4402 Perl_warner(aTHX_ packWARN(WARN_VOID), "Too late to run INIT block");
4403 av_push(PL_initav, (SV*)cv);
4404 GvCV(gv) = 0; /* cv has been hijacked */
4409 PL_copline = NOLINE;
4414 /* XXX unsafe for threads if eval_owner isn't held */
4416 =for apidoc newCONSTSUB
4418 Creates a constant sub equivalent to Perl C<sub FOO () { 123 }> which is
4419 eligible for inlining at compile-time.
4425 Perl_newCONSTSUB(pTHX_ HV *stash, char *name, SV *sv)
4431 SAVECOPLINE(PL_curcop);
4432 CopLINE_set(PL_curcop, PL_copline);
4435 PL_hints &= ~HINT_BLOCK_SCOPE;
4438 SAVESPTR(PL_curstash);
4439 SAVECOPSTASH(PL_curcop);
4440 PL_curstash = stash;
4441 CopSTASH_set(PL_curcop,stash);
4444 cv = newXS(name, const_sv_xsub, savepv(CopFILE(PL_curcop)));
4445 CvXSUBANY(cv).any_ptr = sv;
4447 sv_setpv((SV*)cv, ""); /* prototype is "" */
4450 CopSTASH_free(PL_curcop);
4458 =for apidoc U||newXS
4460 Used by C<xsubpp> to hook up XSUBs as Perl subs.
4466 Perl_newXS(pTHX_ char *name, XSUBADDR_t subaddr, char *filename)
4468 GV *gv = gv_fetchpv(name ? name :
4469 (PL_curstash ? "__ANON__" : "__ANON__::__ANON__"),
4470 GV_ADDMULTI, SVt_PVCV);
4473 if ((cv = (name ? GvCV(gv) : Nullcv))) {
4475 /* just a cached method */
4479 else if (CvROOT(cv) || CvXSUB(cv) || GvASSUMECV(gv)) {
4480 /* already defined (or promised) */
4481 if (ckWARN(WARN_REDEFINE) && !(CvGV(cv) && GvSTASH(CvGV(cv))
4482 && strEQ(HvNAME(GvSTASH(CvGV(cv))), "autouse"))) {
4483 line_t oldline = CopLINE(PL_curcop);
4484 if (PL_copline != NOLINE)
4485 CopLINE_set(PL_curcop, PL_copline);
4486 Perl_warner(aTHX_ packWARN(WARN_REDEFINE),
4487 CvCONST(cv) ? "Constant subroutine %s redefined"
4488 : "Subroutine %s redefined"
4490 CopLINE_set(PL_curcop, oldline);
4497 if (cv) /* must reuse cv if autoloaded */
4500 cv = (CV*)NEWSV(1105,0);
4501 sv_upgrade((SV *)cv, SVt_PVCV);
4505 PL_sub_generation++;
4509 #ifdef USE_5005THREADS
4510 New(666, CvMUTEXP(cv), 1, perl_mutex);
4511 MUTEX_INIT(CvMUTEXP(cv));
4513 #endif /* USE_5005THREADS */
4514 (void)gv_fetchfile(filename);
4515 CvFILE(cv) = filename; /* NOTE: not copied, as it is expected to be
4516 an external constant string */
4517 CvXSUB(cv) = subaddr;
4520 char *s = strrchr(name,':');
4526 if (*s != 'B' && *s != 'E' && *s != 'C' && *s != 'I')
4529 if (strEQ(s, "BEGIN")) {
4531 PL_beginav = newAV();
4532 av_push(PL_beginav, (SV*)cv);
4533 GvCV(gv) = 0; /* cv has been hijacked */
4535 else if (strEQ(s, "END")) {
4538 av_unshift(PL_endav, 1);
4539 av_store(PL_endav, 0, (SV*)cv);
4540 GvCV(gv) = 0; /* cv has been hijacked */
4542 else if (strEQ(s, "CHECK")) {
4544 PL_checkav = newAV();
4545 if (PL_main_start && ckWARN(WARN_VOID))
4546 Perl_warner(aTHX_ packWARN(WARN_VOID), "Too late to run CHECK block");
4547 av_unshift(PL_checkav, 1);
4548 av_store(PL_checkav, 0, (SV*)cv);
4549 GvCV(gv) = 0; /* cv has been hijacked */
4551 else if (strEQ(s, "INIT")) {
4553 PL_initav = newAV();
4554 if (PL_main_start && ckWARN(WARN_VOID))
4555 Perl_warner(aTHX_ packWARN(WARN_VOID), "Too late to run INIT block");
4556 av_push(PL_initav, (SV*)cv);
4557 GvCV(gv) = 0; /* cv has been hijacked */
4568 Perl_newFORM(pTHX_ I32 floor, OP *o, OP *block)
4576 name = SvPVx(cSVOPo->op_sv, n_a);
4579 gv = gv_fetchpv(name,TRUE, SVt_PVFM);
4580 #ifdef GV_UNIQUE_CHECK
4582 Perl_croak(aTHX_ "Bad symbol for form (GV is unique)");
4586 if ((cv = GvFORM(gv))) {
4587 if (ckWARN(WARN_REDEFINE)) {
4588 line_t oldline = CopLINE(PL_curcop);
4589 if (PL_copline != NOLINE)
4590 CopLINE_set(PL_curcop, PL_copline);
4591 Perl_warner(aTHX_ packWARN(WARN_REDEFINE), "Format %s redefined",name);
4592 CopLINE_set(PL_curcop, oldline);
4599 CvFILE_set_from_cop(cv, PL_curcop);
4602 pad_tidy(padtidy_FORMAT);
4603 CvROOT(cv) = newUNOP(OP_LEAVEWRITE, 0, scalarseq(block));
4604 CvROOT(cv)->op_private |= OPpREFCOUNTED;
4605 OpREFCNT_set(CvROOT(cv), 1);
4606 CvSTART(cv) = LINKLIST(CvROOT(cv));
4607 CvROOT(cv)->op_next = 0;
4608 CALL_PEEP(CvSTART(cv));
4610 PL_copline = NOLINE;
4615 Perl_newANONLIST(pTHX_ OP *o)
4617 return newUNOP(OP_REFGEN, 0,
4618 mod(list(convert(OP_ANONLIST, 0, o)), OP_REFGEN));
4622 Perl_newANONHASH(pTHX_ OP *o)
4624 return newUNOP(OP_REFGEN, 0,
4625 mod(list(convert(OP_ANONHASH, 0, o)), OP_REFGEN));
4629 Perl_newANONSUB(pTHX_ I32 floor, OP *proto, OP *block)
4631 return newANONATTRSUB(floor, proto, Nullop, block);
4635 Perl_newANONATTRSUB(pTHX_ I32 floor, OP *proto, OP *attrs, OP *block)
4637 return newUNOP(OP_REFGEN, 0,
4638 newSVOP(OP_ANONCODE, 0,
4639 (SV*)newATTRSUB(floor, 0, proto, attrs, block)));
4643 Perl_oopsAV(pTHX_ OP *o)
4645 switch (o->op_type) {
4647 o->op_type = OP_PADAV;
4648 o->op_ppaddr = PL_ppaddr[OP_PADAV];
4649 return ref(o, OP_RV2AV);
4652 o->op_type = OP_RV2AV;
4653 o->op_ppaddr = PL_ppaddr[OP_RV2AV];
4658 if (ckWARN_d(WARN_INTERNAL))
4659 Perl_warner(aTHX_ packWARN(WARN_INTERNAL), "oops: oopsAV");
4666 Perl_oopsHV(pTHX_ OP *o)
4668 switch (o->op_type) {
4671 o->op_type = OP_PADHV;
4672 o->op_ppaddr = PL_ppaddr[OP_PADHV];
4673 return ref(o, OP_RV2HV);
4677 o->op_type = OP_RV2HV;
4678 o->op_ppaddr = PL_ppaddr[OP_RV2HV];
4683 if (ckWARN_d(WARN_INTERNAL))
4684 Perl_warner(aTHX_ packWARN(WARN_INTERNAL), "oops: oopsHV");
4691 Perl_newAVREF(pTHX_ OP *o)
4693 if (o->op_type == OP_PADANY) {
4694 o->op_type = OP_PADAV;
4695 o->op_ppaddr = PL_ppaddr[OP_PADAV];
4698 else if ((o->op_type == OP_RV2AV || o->op_type == OP_PADAV)
4699 && ckWARN(WARN_DEPRECATED)) {
4700 Perl_warner(aTHX_ packWARN(WARN_DEPRECATED),
4701 "Using an array as a reference is deprecated");
4703 return newUNOP(OP_RV2AV, 0, scalar(o));
4707 Perl_newGVREF(pTHX_ I32 type, OP *o)
4709 if (type == OP_MAPSTART || type == OP_GREPSTART || type == OP_SORT)
4710 return newUNOP(OP_NULL, 0, o);
4711 return ref(newUNOP(OP_RV2GV, OPf_REF, o), type);
4715 Perl_newHVREF(pTHX_ OP *o)
4717 if (o->op_type == OP_PADANY) {
4718 o->op_type = OP_PADHV;
4719 o->op_ppaddr = PL_ppaddr[OP_PADHV];
4722 else if ((o->op_type == OP_RV2HV || o->op_type == OP_PADHV)
4723 && ckWARN(WARN_DEPRECATED)) {
4724 Perl_warner(aTHX_ packWARN(WARN_DEPRECATED),
4725 "Using a hash as a reference is deprecated");
4727 return newUNOP(OP_RV2HV, 0, scalar(o));
4731 Perl_oopsCV(pTHX_ OP *o)
4733 Perl_croak(aTHX_ "NOT IMPL LINE %d",__LINE__);
4739 Perl_newCVREF(pTHX_ I32 flags, OP *o)
4741 return newUNOP(OP_RV2CV, flags, scalar(o));
4745 Perl_newSVREF(pTHX_ OP *o)
4747 if (o->op_type == OP_PADANY) {
4748 o->op_type = OP_PADSV;
4749 o->op_ppaddr = PL_ppaddr[OP_PADSV];
4752 else if (o->op_type == OP_THREADSV && !(o->op_flags & OPpDONE_SVREF)) {
4753 o->op_flags |= OPpDONE_SVREF;
4756 return newUNOP(OP_RV2SV, 0, scalar(o));
4759 /* Check routines. */
4762 Perl_ck_anoncode(pTHX_ OP *o)
4764 cSVOPo->op_targ = pad_add_anon(cSVOPo->op_sv, o->op_type);
4765 cSVOPo->op_sv = Nullsv;
4770 Perl_ck_bitop(pTHX_ OP *o)
4772 #define OP_IS_NUMCOMPARE(op) \
4773 ((op) == OP_LT || (op) == OP_I_LT || \
4774 (op) == OP_GT || (op) == OP_I_GT || \
4775 (op) == OP_LE || (op) == OP_I_LE || \
4776 (op) == OP_GE || (op) == OP_I_GE || \
4777 (op) == OP_EQ || (op) == OP_I_EQ || \
4778 (op) == OP_NE || (op) == OP_I_NE || \
4779 (op) == OP_NCMP || (op) == OP_I_NCMP)
4780 o->op_private = (U8)(PL_hints & HINT_PRIVATE_MASK);
4781 if (!(o->op_flags & OPf_STACKED) /* Not an assignment */
4782 && (o->op_type == OP_BIT_OR
4783 || o->op_type == OP_BIT_AND
4784 || o->op_type == OP_BIT_XOR))
4786 OP * left = cBINOPo->op_first;
4787 OP * right = left->op_sibling;
4788 if ((OP_IS_NUMCOMPARE(left->op_type) &&
4789 (left->op_flags & OPf_PARENS) == 0) ||
4790 (OP_IS_NUMCOMPARE(right->op_type) &&
4791 (right->op_flags & OPf_PARENS) == 0))
4792 if (ckWARN(WARN_PRECEDENCE))
4793 Perl_warner(aTHX_ packWARN(WARN_PRECEDENCE),
4794 "Possible precedence problem on bitwise %c operator",
4795 o->op_type == OP_BIT_OR ? '|'
4796 : o->op_type == OP_BIT_AND ? '&' : '^'
4803 Perl_ck_concat(pTHX_ OP *o)
4805 OP *kid = cUNOPo->op_first;
4806 if (kid->op_type == OP_CONCAT && !(kid->op_private & OPpTARGET_MY) &&
4807 !(kUNOP->op_first->op_flags & OPf_MOD))
4808 o->op_flags |= OPf_STACKED;
4813 Perl_ck_spair(pTHX_ OP *o)
4815 if (o->op_flags & OPf_KIDS) {
4818 OPCODE type = o->op_type;
4819 o = modkids(ck_fun(o), type);
4820 kid = cUNOPo->op_first;
4821 newop = kUNOP->op_first->op_sibling;
4823 (newop->op_sibling ||
4824 !(PL_opargs[newop->op_type] & OA_RETSCALAR) ||
4825 newop->op_type == OP_PADAV || newop->op_type == OP_PADHV ||
4826 newop->op_type == OP_RV2AV || newop->op_type == OP_RV2HV)) {
4830 op_free(kUNOP->op_first);
4831 kUNOP->op_first = newop;
4833 o->op_ppaddr = PL_ppaddr[++o->op_type];
4838 Perl_ck_delete(pTHX_ OP *o)
4842 if (o->op_flags & OPf_KIDS) {
4843 OP *kid = cUNOPo->op_first;
4844 switch (kid->op_type) {
4846 o->op_flags |= OPf_SPECIAL;
4849 o->op_private |= OPpSLICE;
4852 o->op_flags |= OPf_SPECIAL;
4857 Perl_croak(aTHX_ "%s argument is not a HASH or ARRAY element or slice",
4866 Perl_ck_die(pTHX_ OP *o)
4869 if (VMSISH_HUSHED) o->op_private |= OPpHUSH_VMSISH;
4875 Perl_ck_eof(pTHX_ OP *o)
4877 I32 type = o->op_type;
4879 if (o->op_flags & OPf_KIDS) {
4880 if (cLISTOPo->op_first->op_type == OP_STUB) {
4882 o = newUNOP(type, OPf_SPECIAL, newGVOP(OP_GV, 0, PL_argvgv));
4890 Perl_ck_eval(pTHX_ OP *o)
4892 PL_hints |= HINT_BLOCK_SCOPE;
4893 if (o->op_flags & OPf_KIDS) {
4894 SVOP *kid = (SVOP*)cUNOPo->op_first;
4897 o->op_flags &= ~OPf_KIDS;
4900 else if (kid->op_type == OP_LINESEQ || kid->op_type == OP_STUB) {
4903 cUNOPo->op_first = 0;
4906 NewOp(1101, enter, 1, LOGOP);
4907 enter->op_type = OP_ENTERTRY;
4908 enter->op_ppaddr = PL_ppaddr[OP_ENTERTRY];
4909 enter->op_private = 0;
4911 /* establish postfix order */
4912 enter->op_next = (OP*)enter;
4914 o = prepend_elem(OP_LINESEQ, (OP*)enter, (OP*)kid);
4915 o->op_type = OP_LEAVETRY;
4916 o->op_ppaddr = PL_ppaddr[OP_LEAVETRY];
4917 enter->op_other = o;
4925 o = newUNOP(OP_ENTEREVAL, 0, newDEFSVOP());
4927 o->op_targ = (PADOFFSET)PL_hints;
4932 Perl_ck_exit(pTHX_ OP *o)
4935 HV *table = GvHV(PL_hintgv);
4937 SV **svp = hv_fetch(table, "vmsish_exit", 11, FALSE);
4938 if (svp && *svp && SvTRUE(*svp))
4939 o->op_private |= OPpEXIT_VMSISH;
4941 if (VMSISH_HUSHED) o->op_private |= OPpHUSH_VMSISH;
4947 Perl_ck_exec(pTHX_ OP *o)
4950 if (o->op_flags & OPf_STACKED) {
4952 kid = cUNOPo->op_first->op_sibling;
4953 if (kid->op_type == OP_RV2GV)
4962 Perl_ck_exists(pTHX_ OP *o)
4965 if (o->op_flags & OPf_KIDS) {
4966 OP *kid = cUNOPo->op_first;
4967 if (kid->op_type == OP_ENTERSUB) {
4968 (void) ref(kid, o->op_type);
4969 if (kid->op_type != OP_RV2CV && !PL_error_count)
4970 Perl_croak(aTHX_ "%s argument is not a subroutine name",
4972 o->op_private |= OPpEXISTS_SUB;
4974 else if (kid->op_type == OP_AELEM)
4975 o->op_flags |= OPf_SPECIAL;
4976 else if (kid->op_type != OP_HELEM)
4977 Perl_croak(aTHX_ "%s argument is not a HASH or ARRAY element",
4986 Perl_ck_gvconst(pTHX_ register OP *o)
4988 o = fold_constants(o);
4989 if (o->op_type == OP_CONST)
4996 Perl_ck_rvconst(pTHX_ register OP *o)
4998 SVOP *kid = (SVOP*)cUNOPo->op_first;
5000 o->op_private |= (PL_hints & HINT_STRICT_REFS);
5001 if (kid->op_type == OP_CONST) {
5005 SV *kidsv = kid->op_sv;
5008 /* Is it a constant from cv_const_sv()? */
5009 if (SvROK(kidsv) && SvREADONLY(kidsv)) {
5010 SV *rsv = SvRV(kidsv);
5011 int svtype = SvTYPE(rsv);
5012 char *badtype = Nullch;
5014 switch (o->op_type) {
5016 if (svtype > SVt_PVMG)
5017 badtype = "a SCALAR";
5020 if (svtype != SVt_PVAV)
5021 badtype = "an ARRAY";
5024 if (svtype != SVt_PVHV) {
5025 if (svtype == SVt_PVAV) { /* pseudohash? */
5026 SV **ksv = av_fetch((AV*)rsv, 0, FALSE);
5027 if (ksv && SvROK(*ksv)
5028 && SvTYPE(SvRV(*ksv)) == SVt_PVHV)
5037 if (svtype != SVt_PVCV)
5042 Perl_croak(aTHX_ "Constant is not %s reference", badtype);
5045 name = SvPV(kidsv, n_a);
5046 if ((PL_hints & HINT_STRICT_REFS) && (kid->op_private & OPpCONST_BARE)) {
5047 char *badthing = Nullch;
5048 switch (o->op_type) {
5050 badthing = "a SCALAR";
5053 badthing = "an ARRAY";
5056 badthing = "a HASH";
5061 "Can't use bareword (\"%s\") as %s ref while \"strict refs\" in use",
5065 * This is a little tricky. We only want to add the symbol if we
5066 * didn't add it in the lexer. Otherwise we get duplicate strict
5067 * warnings. But if we didn't add it in the lexer, we must at
5068 * least pretend like we wanted to add it even if it existed before,
5069 * or we get possible typo warnings. OPpCONST_ENTERED says
5070 * whether the lexer already added THIS instance of this symbol.
5072 iscv = (o->op_type == OP_RV2CV) * 2;
5074 gv = gv_fetchpv(name,
5075 iscv | !(kid->op_private & OPpCONST_ENTERED),
5078 : o->op_type == OP_RV2SV
5080 : o->op_type == OP_RV2AV
5082 : o->op_type == OP_RV2HV
5085 } while (!gv && !(kid->op_private & OPpCONST_ENTERED) && !iscv++);
5087 kid->op_type = OP_GV;
5088 SvREFCNT_dec(kid->op_sv);
5090 /* XXX hack: dependence on sizeof(PADOP) <= sizeof(SVOP) */
5091 kPADOP->op_padix = pad_alloc(OP_GV, SVs_PADTMP);
5092 SvREFCNT_dec(PAD_SVl(kPADOP->op_padix));
5094 PAD_SETSV(kPADOP->op_padix, (SV*) SvREFCNT_inc(gv));
5096 kid->op_sv = SvREFCNT_inc(gv);
5098 kid->op_private = 0;
5099 kid->op_ppaddr = PL_ppaddr[OP_GV];
5106 Perl_ck_ftst(pTHX_ OP *o)
5108 I32 type = o->op_type;
5110 if (o->op_flags & OPf_REF) {
5113 else if (o->op_flags & OPf_KIDS && cUNOPo->op_first->op_type != OP_STUB) {
5114 SVOP *kid = (SVOP*)cUNOPo->op_first;
5116 if (kid->op_type == OP_CONST && (kid->op_private & OPpCONST_BARE)) {
5118 OP *newop = newGVOP(type, OPf_REF,
5119 gv_fetchpv(SvPVx(kid->op_sv, n_a), TRUE, SVt_PVIO));
5124 if ((PL_hints & HINT_FILETEST_ACCESS) &&
5125 OP_IS_FILETEST_ACCESS(o))
5126 o->op_private |= OPpFT_ACCESS;
5131 if (type == OP_FTTTY)
5132 o = newGVOP(type, OPf_REF, PL_stdingv);
5134 o = newUNOP(type, 0, newDEFSVOP());
5140 Perl_ck_fun(pTHX_ OP *o)
5146 int type = o->op_type;
5147 register I32 oa = PL_opargs[type] >> OASHIFT;
5149 if (o->op_flags & OPf_STACKED) {
5150 if ((oa & OA_OPTIONAL) && (oa >> 4) && !((oa >> 4) & OA_OPTIONAL))
5153 return no_fh_allowed(o);
5156 if (o->op_flags & OPf_KIDS) {
5158 tokid = &cLISTOPo->op_first;
5159 kid = cLISTOPo->op_first;
5160 if (kid->op_type == OP_PUSHMARK ||
5161 (kid->op_type == OP_NULL && kid->op_targ == OP_PUSHMARK))
5163 tokid = &kid->op_sibling;
5164 kid = kid->op_sibling;
5166 if (!kid && PL_opargs[type] & OA_DEFGV)
5167 *tokid = kid = newDEFSVOP();
5171 sibl = kid->op_sibling;
5174 /* list seen where single (scalar) arg expected? */
5175 if (numargs == 1 && !(oa >> 4)
5176 && kid->op_type == OP_LIST && type != OP_SCALAR)
5178 return too_many_arguments(o,PL_op_desc[type]);
5191 if ((type == OP_PUSH || type == OP_UNSHIFT)
5192 && !kid->op_sibling && ckWARN(WARN_SYNTAX))
5193 Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
5194 "Useless use of %s with no values",
5197 if (kid->op_type == OP_CONST &&
5198 (kid->op_private & OPpCONST_BARE))
5200 char *name = SvPVx(((SVOP*)kid)->op_sv, n_a);
5201 OP *newop = newAVREF(newGVOP(OP_GV, 0,
5202 gv_fetchpv(name, TRUE, SVt_PVAV) ));
5203 if (ckWARN2(WARN_DEPRECATED, WARN_SYNTAX))
5204 Perl_warner(aTHX_ packWARN2(WARN_DEPRECATED, WARN_SYNTAX),
5205 "Array @%s missing the @ in argument %"IVdf" of %s()",
5206 name, (IV)numargs, PL_op_desc[type]);
5209 kid->op_sibling = sibl;
5212 else if (kid->op_type != OP_RV2AV && kid->op_type != OP_PADAV)
5213 bad_type(numargs, "array", PL_op_desc[type], kid);
5217 if (kid->op_type == OP_CONST &&
5218 (kid->op_private & OPpCONST_BARE))
5220 char *name = SvPVx(((SVOP*)kid)->op_sv, n_a);
5221 OP *newop = newHVREF(newGVOP(OP_GV, 0,
5222 gv_fetchpv(name, TRUE, SVt_PVHV) ));
5223 if (ckWARN2(WARN_DEPRECATED, WARN_SYNTAX))
5224 Perl_warner(aTHX_ packWARN2(WARN_DEPRECATED, WARN_SYNTAX),
5225 "Hash %%%s missing the %% in argument %"IVdf" of %s()",
5226 name, (IV)numargs, PL_op_desc[type]);
5229 kid->op_sibling = sibl;
5232 else if (kid->op_type != OP_RV2HV && kid->op_type != OP_PADHV)
5233 bad_type(numargs, "hash", PL_op_desc[type], kid);
5238 OP *newop = newUNOP(OP_NULL, 0, kid);
5239 kid->op_sibling = 0;
5241 newop->op_next = newop;
5243 kid->op_sibling = sibl;
5248 if (kid->op_type != OP_GV && kid->op_type != OP_RV2GV) {
5249 if (kid->op_type == OP_CONST &&
5250 (kid->op_private & OPpCONST_BARE))
5252 OP *newop = newGVOP(OP_GV, 0,
5253 gv_fetchpv(SvPVx(((SVOP*)kid)->op_sv, n_a), TRUE,
5255 if (!(o->op_private & 1) && /* if not unop */
5256 kid == cLISTOPo->op_last)
5257 cLISTOPo->op_last = newop;
5261 else if (kid->op_type == OP_READLINE) {
5262 /* neophyte patrol: open(<FH>), close(<FH>) etc. */
5263 bad_type(numargs, "HANDLE", OP_DESC(o), kid);
5266 I32 flags = OPf_SPECIAL;
5270 /* is this op a FH constructor? */
5271 if (is_handle_constructor(o,numargs)) {
5272 char *name = Nullch;
5276 /* Set a flag to tell rv2gv to vivify
5277 * need to "prove" flag does not mean something
5278 * else already - NI-S 1999/05/07
5281 if (kid->op_type == OP_PADSV) {
5282 /*XXX DAPM 2002.08.25 tmp assert test */
5283 /*XXX*/ assert(av_fetch(PL_comppad_name, (kid->op_targ), FALSE));
5284 /*XXX*/ assert(*av_fetch(PL_comppad_name, (kid->op_targ), FALSE));
5286 name = PAD_COMPNAME_PV(kid->op_targ);
5287 /* SvCUR of a pad namesv can't be trusted
5288 * (see PL_generation), so calc its length
5294 else if (kid->op_type == OP_RV2SV
5295 && kUNOP->op_first->op_type == OP_GV)
5297 GV *gv = cGVOPx_gv(kUNOP->op_first);
5299 len = GvNAMELEN(gv);
5301 else if (kid->op_type == OP_AELEM
5302 || kid->op_type == OP_HELEM)
5307 if ((op = ((BINOP*)kid)->op_first)) {
5308 SV *tmpstr = Nullsv;
5310 kid->op_type == OP_AELEM ?
5312 if (((op->op_type == OP_RV2AV) ||
5313 (op->op_type == OP_RV2HV)) &&
5314 (op = ((UNOP*)op)->op_first) &&
5315 (op->op_type == OP_GV)) {
5316 /* packagevar $a[] or $h{} */
5317 GV *gv = cGVOPx_gv(op);
5325 else if (op->op_type == OP_PADAV
5326 || op->op_type == OP_PADHV) {
5327 /* lexicalvar $a[] or $h{} */
5329 PAD_COMPNAME_PV(op->op_targ);
5339 name = SvPV(tmpstr, len);
5344 name = "__ANONIO__";
5351 targ = pad_alloc(OP_RV2GV, SVs_PADTMP);
5352 namesv = PAD_SVl(targ);
5353 (void)SvUPGRADE(namesv, SVt_PV);
5355 sv_setpvn(namesv, "$", 1);
5356 sv_catpvn(namesv, name, len);
5359 kid->op_sibling = 0;
5360 kid = newUNOP(OP_RV2GV, flags, scalar(kid));
5361 kid->op_targ = targ;
5362 kid->op_private |= priv;
5364 kid->op_sibling = sibl;
5370 mod(scalar(kid), type);
5374 tokid = &kid->op_sibling;
5375 kid = kid->op_sibling;
5377 o->op_private |= numargs;
5379 return too_many_arguments(o,OP_DESC(o));
5382 else if (PL_opargs[type] & OA_DEFGV) {
5384 return newUNOP(type, 0, newDEFSVOP());
5388 while (oa & OA_OPTIONAL)
5390 if (oa && oa != OA_LIST)
5391 return too_few_arguments(o,OP_DESC(o));
5397 Perl_ck_glob(pTHX_ OP *o)
5402 if ((o->op_flags & OPf_KIDS) && !cLISTOPo->op_first->op_sibling)
5403 append_elem(OP_GLOB, o, newDEFSVOP());
5405 if (!((gv = gv_fetchpv("glob", FALSE, SVt_PVCV))
5406 && GvCVu(gv) && GvIMPORTED_CV(gv)))
5408 gv = gv_fetchpv("CORE::GLOBAL::glob", FALSE, SVt_PVCV);
5411 #if !defined(PERL_EXTERNAL_GLOB)
5412 /* XXX this can be tightened up and made more failsafe. */
5413 if (!(gv && GvCVu(gv) && GvIMPORTED_CV(gv))) {
5416 Perl_load_module(aTHX_ PERL_LOADMOD_NOIMPORT,
5417 newSVpvn("File::Glob", 10), Nullsv, Nullsv, Nullsv);
5418 gv = gv_fetchpv("CORE::GLOBAL::glob", FALSE, SVt_PVCV);
5419 glob_gv = gv_fetchpv("File::Glob::csh_glob", FALSE, SVt_PVCV);
5420 GvCV(gv) = GvCV(glob_gv);
5421 SvREFCNT_inc((SV*)GvCV(gv));
5422 GvIMPORTED_CV_on(gv);
5425 #endif /* PERL_EXTERNAL_GLOB */
5427 if (gv && GvCVu(gv) && GvIMPORTED_CV(gv)) {
5428 append_elem(OP_GLOB, o,
5429 newSVOP(OP_CONST, 0, newSViv(PL_glob_index++)));
5430 o->op_type = OP_LIST;
5431 o->op_ppaddr = PL_ppaddr[OP_LIST];
5432 cLISTOPo->op_first->op_type = OP_PUSHMARK;
5433 cLISTOPo->op_first->op_ppaddr = PL_ppaddr[OP_PUSHMARK];
5434 o = newUNOP(OP_ENTERSUB, OPf_STACKED,
5435 append_elem(OP_LIST, o,
5436 scalar(newUNOP(OP_RV2CV, 0,
5437 newGVOP(OP_GV, 0, gv)))));
5438 o = newUNOP(OP_NULL, 0, ck_subr(o));
5439 o->op_targ = OP_GLOB; /* hint at what it used to be */
5442 gv = newGVgen("main");
5444 append_elem(OP_GLOB, o, newGVOP(OP_GV, 0, gv));
5450 Perl_ck_grep(pTHX_ OP *o)
5454 OPCODE type = o->op_type == OP_GREPSTART ? OP_GREPWHILE : OP_MAPWHILE;
5456 o->op_ppaddr = PL_ppaddr[OP_GREPSTART];
5457 NewOp(1101, gwop, 1, LOGOP);
5459 if (o->op_flags & OPf_STACKED) {
5462 kid = cLISTOPo->op_first->op_sibling;
5463 for (k = cLISTOPo->op_first->op_sibling->op_next; k; k = k->op_next) {
5466 kid->op_next = (OP*)gwop;
5467 o->op_flags &= ~OPf_STACKED;
5469 kid = cLISTOPo->op_first->op_sibling;
5470 if (type == OP_MAPWHILE)
5477 kid = cLISTOPo->op_first->op_sibling;
5478 if (kid->op_type != OP_NULL)
5479 Perl_croak(aTHX_ "panic: ck_grep");
5480 kid = kUNOP->op_first;
5482 gwop->op_type = type;
5483 gwop->op_ppaddr = PL_ppaddr[type];
5484 gwop->op_first = listkids(o);
5485 gwop->op_flags |= OPf_KIDS;
5486 gwop->op_private = 1;
5487 gwop->op_other = LINKLIST(kid);
5488 gwop->op_targ = pad_alloc(type, SVs_PADTMP);
5489 kid->op_next = (OP*)gwop;
5491 kid = cLISTOPo->op_first->op_sibling;
5492 if (!kid || !kid->op_sibling)
5493 return too_few_arguments(o,OP_DESC(o));
5494 for (kid = kid->op_sibling; kid; kid = kid->op_sibling)
5495 mod(kid, OP_GREPSTART);
5501 Perl_ck_index(pTHX_ OP *o)
5503 if (o->op_flags & OPf_KIDS) {
5504 OP *kid = cLISTOPo->op_first->op_sibling; /* get past pushmark */
5506 kid = kid->op_sibling; /* get past "big" */
5507 if (kid && kid->op_type == OP_CONST)
5508 fbm_compile(((SVOP*)kid)->op_sv, 0);
5514 Perl_ck_lengthconst(pTHX_ OP *o)
5516 /* XXX length optimization goes here */
5521 Perl_ck_lfun(pTHX_ OP *o)
5523 OPCODE type = o->op_type;
5524 return modkids(ck_fun(o), type);
5528 Perl_ck_defined(pTHX_ OP *o) /* 19990527 MJD */
5530 if ((o->op_flags & OPf_KIDS) && ckWARN2(WARN_DEPRECATED, WARN_SYNTAX)) {
5531 switch (cUNOPo->op_first->op_type) {
5533 /* This is needed for
5534 if (defined %stash::)
5535 to work. Do not break Tk.
5537 break; /* Globals via GV can be undef */
5539 case OP_AASSIGN: /* Is this a good idea? */
5540 Perl_warner(aTHX_ packWARN2(WARN_DEPRECATED, WARN_SYNTAX),
5541 "defined(@array) is deprecated");
5542 Perl_warner(aTHX_ packWARN2(WARN_DEPRECATED, WARN_SYNTAX),
5543 "\t(Maybe you should just omit the defined()?)\n");
5546 /* This is needed for
5547 if (defined %stash::)
5548 to work. Do not break Tk.
5550 break; /* Globals via GV can be undef */
5552 Perl_warner(aTHX_ packWARN2(WARN_DEPRECATED, WARN_SYNTAX),
5553 "defined(%%hash) is deprecated");
5554 Perl_warner(aTHX_ packWARN2(WARN_DEPRECATED, WARN_SYNTAX),
5555 "\t(Maybe you should just omit the defined()?)\n");
5566 Perl_ck_rfun(pTHX_ OP *o)
5568 OPCODE type = o->op_type;
5569 return refkids(ck_fun(o), type);
5573 Perl_ck_listiob(pTHX_ OP *o)
5577 kid = cLISTOPo->op_first;
5580 kid = cLISTOPo->op_first;
5582 if (kid->op_type == OP_PUSHMARK)
5583 kid = kid->op_sibling;
5584 if (kid && o->op_flags & OPf_STACKED)
5585 kid = kid->op_sibling;
5586 else if (kid && !kid->op_sibling) { /* print HANDLE; */
5587 if (kid->op_type == OP_CONST && kid->op_private & OPpCONST_BARE) {
5588 o->op_flags |= OPf_STACKED; /* make it a filehandle */
5589 kid = newUNOP(OP_RV2GV, OPf_REF, scalar(kid));
5590 cLISTOPo->op_first->op_sibling = kid;
5591 cLISTOPo->op_last = kid;
5592 kid = kid->op_sibling;
5597 append_elem(o->op_type, o, newDEFSVOP());
5603 Perl_ck_sassign(pTHX_ OP *o)
5605 OP *kid = cLISTOPo->op_first;
5606 /* has a disposable target? */
5607 if ((PL_opargs[kid->op_type] & OA_TARGLEX)
5608 && !(kid->op_flags & OPf_STACKED)
5609 /* Cannot steal the second time! */
5610 && !(kid->op_private & OPpTARGET_MY))
5612 OP *kkid = kid->op_sibling;
5614 /* Can just relocate the target. */
5615 if (kkid && kkid->op_type == OP_PADSV
5616 && !(kkid->op_private & OPpLVAL_INTRO))
5618 kid->op_targ = kkid->op_targ;
5620 /* Now we do not need PADSV and SASSIGN. */
5621 kid->op_sibling = o->op_sibling; /* NULL */
5622 cLISTOPo->op_first = NULL;
5625 kid->op_private |= OPpTARGET_MY; /* Used for context settings */
5633 Perl_ck_match(pTHX_ OP *o)
5635 o->op_private |= OPpRUNTIME;
5640 Perl_ck_method(pTHX_ OP *o)
5642 OP *kid = cUNOPo->op_first;
5643 if (kid->op_type == OP_CONST) {
5644 SV* sv = kSVOP->op_sv;
5645 if (!(strchr(SvPVX(sv), ':') || strchr(SvPVX(sv), '\''))) {
5647 if (!SvREADONLY(sv) || !SvFAKE(sv)) {
5648 sv = newSVpvn_share(SvPVX(sv), SvCUR(sv), 0);
5651 kSVOP->op_sv = Nullsv;
5653 cmop = newSVOP(OP_METHOD_NAMED, 0, sv);
5662 Perl_ck_null(pTHX_ OP *o)
5668 Perl_ck_open(pTHX_ OP *o)
5670 HV *table = GvHV(PL_hintgv);
5674 svp = hv_fetch(table, "open_IN", 7, FALSE);
5676 mode = mode_from_discipline(*svp);
5677 if (mode & O_BINARY)
5678 o->op_private |= OPpOPEN_IN_RAW;
5679 else if (mode & O_TEXT)
5680 o->op_private |= OPpOPEN_IN_CRLF;
5683 svp = hv_fetch(table, "open_OUT", 8, FALSE);
5685 mode = mode_from_discipline(*svp);
5686 if (mode & O_BINARY)
5687 o->op_private |= OPpOPEN_OUT_RAW;
5688 else if (mode & O_TEXT)
5689 o->op_private |= OPpOPEN_OUT_CRLF;
5692 if (o->op_type == OP_BACKTICK)
5695 /* In case of three-arg dup open remove strictness
5696 * from the last arg if it is a bareword. */
5697 OP *first = cLISTOPx(o)->op_first; /* The pushmark. */
5698 OP *last = cLISTOPx(o)->op_last; /* The bareword. */
5702 if ((last->op_type == OP_CONST) && /* The bareword. */
5703 (last->op_private & OPpCONST_BARE) &&
5704 (last->op_private & OPpCONST_STRICT) &&
5705 (oa = first->op_sibling) && /* The fh. */
5706 (oa = oa->op_sibling) && /* The mode. */
5707 SvPOK(((SVOP*)oa)->op_sv) &&
5708 (mode = SvPVX(((SVOP*)oa)->op_sv)) &&
5709 mode[0] == '>' && mode[1] == '&' && /* A dup open. */
5710 (last == oa->op_sibling)) /* The bareword. */
5711 last->op_private &= ~OPpCONST_STRICT;
5717 Perl_ck_repeat(pTHX_ OP *o)
5719 if (cBINOPo->op_first->op_flags & OPf_PARENS) {
5720 o->op_private |= OPpREPEAT_DOLIST;
5721 cBINOPo->op_first = force_list(cBINOPo->op_first);
5729 Perl_ck_require(pTHX_ OP *o)
5733 if (o->op_flags & OPf_KIDS) { /* Shall we supply missing .pm? */
5734 SVOP *kid = (SVOP*)cUNOPo->op_first;
5736 if (kid->op_type == OP_CONST && (kid->op_private & OPpCONST_BARE)) {
5738 for (s = SvPVX(kid->op_sv); *s; s++) {
5739 if (*s == ':' && s[1] == ':') {
5741 Move(s+2, s+1, strlen(s+2)+1, char);
5742 --SvCUR(kid->op_sv);
5745 if (SvREADONLY(kid->op_sv)) {
5746 SvREADONLY_off(kid->op_sv);
5747 sv_catpvn(kid->op_sv, ".pm", 3);
5748 SvREADONLY_on(kid->op_sv);
5751 sv_catpvn(kid->op_sv, ".pm", 3);
5755 /* handle override, if any */
5756 gv = gv_fetchpv("require", FALSE, SVt_PVCV);
5757 if (!(gv && GvCVu(gv) && GvIMPORTED_CV(gv)))
5758 gv = gv_fetchpv("CORE::GLOBAL::require", FALSE, SVt_PVCV);
5760 if (gv && GvCVu(gv) && GvIMPORTED_CV(gv)) {
5761 OP *kid = cUNOPo->op_first;
5762 cUNOPo->op_first = 0;
5764 return ck_subr(newUNOP(OP_ENTERSUB, OPf_STACKED,
5765 append_elem(OP_LIST, kid,
5766 scalar(newUNOP(OP_RV2CV, 0,
5775 Perl_ck_return(pTHX_ OP *o)
5778 if (CvLVALUE(PL_compcv)) {
5779 for (kid = cLISTOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
5780 mod(kid, OP_LEAVESUBLV);
5787 Perl_ck_retarget(pTHX_ OP *o)
5789 Perl_croak(aTHX_ "NOT IMPL LINE %d",__LINE__);
5796 Perl_ck_select(pTHX_ OP *o)
5799 if (o->op_flags & OPf_KIDS) {
5800 kid = cLISTOPo->op_first->op_sibling; /* get past pushmark */
5801 if (kid && kid->op_sibling) {
5802 o->op_type = OP_SSELECT;
5803 o->op_ppaddr = PL_ppaddr[OP_SSELECT];
5805 return fold_constants(o);
5809 kid = cLISTOPo->op_first->op_sibling; /* get past pushmark */
5810 if (kid && kid->op_type == OP_RV2GV)
5811 kid->op_private &= ~HINT_STRICT_REFS;
5816 Perl_ck_shift(pTHX_ OP *o)
5818 I32 type = o->op_type;
5820 if (!(o->op_flags & OPf_KIDS)) {
5824 #ifdef USE_5005THREADS
5825 if (!CvUNIQUE(PL_compcv)) {
5826 argop = newOP(OP_PADAV, OPf_REF);
5827 argop->op_targ = 0; /* PAD_SV(0) is @_ */
5830 argop = newUNOP(OP_RV2AV, 0,
5831 scalar(newGVOP(OP_GV, 0,
5832 gv_fetchpv("ARGV", TRUE, SVt_PVAV))));
5835 argop = newUNOP(OP_RV2AV, 0,
5836 scalar(newGVOP(OP_GV, 0, CvUNIQUE(PL_compcv) ? PL_argvgv : PL_defgv)));
5837 #endif /* USE_5005THREADS */
5838 return newUNOP(type, 0, scalar(argop));
5840 return scalar(modkids(ck_fun(o), type));
5844 Perl_ck_sort(pTHX_ OP *o)
5848 if (o->op_type == OP_SORT && o->op_flags & OPf_STACKED)
5850 firstkid = cLISTOPo->op_first->op_sibling; /* get past pushmark */
5851 if (o->op_flags & OPf_STACKED) { /* may have been cleared */
5853 OP *kid = cUNOPx(firstkid)->op_first; /* get past null */
5855 if (kid->op_type == OP_SCOPE || kid->op_type == OP_LEAVE) {
5857 if (kid->op_type == OP_SCOPE) {
5861 else if (kid->op_type == OP_LEAVE) {
5862 if (o->op_type == OP_SORT) {
5863 op_null(kid); /* wipe out leave */
5866 for (k = kLISTOP->op_first->op_next; k; k = k->op_next) {
5867 if (k->op_next == kid)
5869 /* don't descend into loops */
5870 else if (k->op_type == OP_ENTERLOOP
5871 || k->op_type == OP_ENTERITER)
5873 k = cLOOPx(k)->op_lastop;
5878 kid->op_next = 0; /* just disconnect the leave */
5879 k = kLISTOP->op_first;
5884 if (o->op_type == OP_SORT) {
5885 /* provide scalar context for comparison function/block */
5891 o->op_flags |= OPf_SPECIAL;
5893 else if (kid->op_type == OP_RV2SV || kid->op_type == OP_PADSV)
5896 firstkid = firstkid->op_sibling;
5899 /* provide list context for arguments */
5900 if (o->op_type == OP_SORT)
5907 S_simplify_sort(pTHX_ OP *o)
5909 register OP *kid = cLISTOPo->op_first->op_sibling; /* get past pushmark */
5913 if (!(o->op_flags & OPf_STACKED))
5915 GvMULTI_on(gv_fetchpv("a", TRUE, SVt_PV));
5916 GvMULTI_on(gv_fetchpv("b", TRUE, SVt_PV));
5917 kid = kUNOP->op_first; /* get past null */
5918 if (kid->op_type != OP_SCOPE)
5920 kid = kLISTOP->op_last; /* get past scope */
5921 switch(kid->op_type) {
5929 k = kid; /* remember this node*/
5930 if (kBINOP->op_first->op_type != OP_RV2SV)
5932 kid = kBINOP->op_first; /* get past cmp */
5933 if (kUNOP->op_first->op_type != OP_GV)
5935 kid = kUNOP->op_first; /* get past rv2sv */
5937 if (GvSTASH(gv) != PL_curstash)
5939 if (strEQ(GvNAME(gv), "a"))
5941 else if (strEQ(GvNAME(gv), "b"))
5945 kid = k; /* back to cmp */
5946 if (kBINOP->op_last->op_type != OP_RV2SV)
5948 kid = kBINOP->op_last; /* down to 2nd arg */
5949 if (kUNOP->op_first->op_type != OP_GV)
5951 kid = kUNOP->op_first; /* get past rv2sv */
5953 if (GvSTASH(gv) != PL_curstash
5955 ? strNE(GvNAME(gv), "a")
5956 : strNE(GvNAME(gv), "b")))
5958 o->op_flags &= ~(OPf_STACKED | OPf_SPECIAL);
5960 o->op_private |= OPpSORT_REVERSE;
5961 if (k->op_type == OP_NCMP)
5962 o->op_private |= OPpSORT_NUMERIC;
5963 if (k->op_type == OP_I_NCMP)
5964 o->op_private |= OPpSORT_NUMERIC | OPpSORT_INTEGER;
5965 kid = cLISTOPo->op_first->op_sibling;
5966 cLISTOPo->op_first->op_sibling = kid->op_sibling; /* bypass old block */
5967 op_free(kid); /* then delete it */
5971 Perl_ck_split(pTHX_ OP *o)
5975 if (o->op_flags & OPf_STACKED)
5976 return no_fh_allowed(o);
5978 kid = cLISTOPo->op_first;
5979 if (kid->op_type != OP_NULL)
5980 Perl_croak(aTHX_ "panic: ck_split");
5981 kid = kid->op_sibling;
5982 op_free(cLISTOPo->op_first);
5983 cLISTOPo->op_first = kid;
5985 cLISTOPo->op_first = kid = newSVOP(OP_CONST, 0, newSVpvn(" ", 1));
5986 cLISTOPo->op_last = kid; /* There was only one element previously */
5989 if (kid->op_type != OP_MATCH || kid->op_flags & OPf_STACKED) {
5990 OP *sibl = kid->op_sibling;
5991 kid->op_sibling = 0;
5992 kid = pmruntime( newPMOP(OP_MATCH, OPf_SPECIAL), kid, Nullop);
5993 if (cLISTOPo->op_first == cLISTOPo->op_last)
5994 cLISTOPo->op_last = kid;
5995 cLISTOPo->op_first = kid;
5996 kid->op_sibling = sibl;
5999 kid->op_type = OP_PUSHRE;
6000 kid->op_ppaddr = PL_ppaddr[OP_PUSHRE];
6002 if (ckWARN(WARN_REGEXP) && ((PMOP *)kid)->op_pmflags & PMf_GLOBAL) {
6003 Perl_warner(aTHX_ packWARN(WARN_REGEXP),
6004 "Use of /g modifier is meaningless in split");
6007 if (!kid->op_sibling)
6008 append_elem(OP_SPLIT, o, newDEFSVOP());
6010 kid = kid->op_sibling;
6013 if (!kid->op_sibling)
6014 append_elem(OP_SPLIT, o, newSVOP(OP_CONST, 0, newSViv(0)));
6016 kid = kid->op_sibling;
6019 if (kid->op_sibling)
6020 return too_many_arguments(o,OP_DESC(o));
6026 Perl_ck_join(pTHX_ OP *o)
6028 if (ckWARN(WARN_SYNTAX)) {
6029 OP *kid = cLISTOPo->op_first->op_sibling;
6030 if (kid && kid->op_type == OP_MATCH) {
6031 char *pmstr = "STRING";
6032 if (PM_GETRE(kPMOP))
6033 pmstr = PM_GETRE(kPMOP)->precomp;
6034 Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
6035 "/%s/ should probably be written as \"%s\"",
6043 Perl_ck_subr(pTHX_ OP *o)
6045 OP *prev = ((cUNOPo->op_first->op_sibling)
6046 ? cUNOPo : ((UNOP*)cUNOPo->op_first))->op_first;
6047 OP *o2 = prev->op_sibling;
6054 I32 contextclass = 0;
6058 o->op_private |= OPpENTERSUB_HASTARG;
6059 for (cvop = o2; cvop->op_sibling; cvop = cvop->op_sibling) ;
6060 if (cvop->op_type == OP_RV2CV) {
6062 o->op_private |= (cvop->op_private & OPpENTERSUB_AMPER);
6063 op_null(cvop); /* disable rv2cv */
6064 tmpop = (SVOP*)((UNOP*)cvop)->op_first;
6065 if (tmpop->op_type == OP_GV && !(o->op_private & OPpENTERSUB_AMPER)) {
6066 GV *gv = cGVOPx_gv(tmpop);
6069 tmpop->op_private |= OPpEARLY_CV;
6070 else if (SvPOK(cv)) {
6071 namegv = CvANON(cv) ? gv : CvGV(cv);
6072 proto = SvPV((SV*)cv, n_a);
6076 else if (cvop->op_type == OP_METHOD || cvop->op_type == OP_METHOD_NAMED) {
6077 if (o2->op_type == OP_CONST)
6078 o2->op_private &= ~OPpCONST_STRICT;
6079 else if (o2->op_type == OP_LIST) {
6080 OP *o = ((UNOP*)o2)->op_first->op_sibling;
6081 if (o && o->op_type == OP_CONST)
6082 o->op_private &= ~OPpCONST_STRICT;
6085 o->op_private |= (PL_hints & HINT_STRICT_REFS);
6086 if (PERLDB_SUB && PL_curstash != PL_debstash)
6087 o->op_private |= OPpENTERSUB_DB;
6088 while (o2 != cvop) {
6092 return too_many_arguments(o, gv_ename(namegv));
6110 if (o2->op_type != OP_REFGEN && o2->op_type != OP_UNDEF)
6112 arg == 1 ? "block or sub {}" : "sub {}",
6113 gv_ename(namegv), o2);
6116 /* '*' allows any scalar type, including bareword */
6119 if (o2->op_type == OP_RV2GV)
6120 goto wrapref; /* autoconvert GLOB -> GLOBref */
6121 else if (o2->op_type == OP_CONST)
6122 o2->op_private &= ~OPpCONST_STRICT;
6123 else if (o2->op_type == OP_ENTERSUB) {
6124 /* accidental subroutine, revert to bareword */
6125 OP *gvop = ((UNOP*)o2)->op_first;
6126 if (gvop && gvop->op_type == OP_NULL) {
6127 gvop = ((UNOP*)gvop)->op_first;
6129 for (; gvop->op_sibling; gvop = gvop->op_sibling)
6132 (gvop->op_private & OPpENTERSUB_NOPAREN) &&
6133 (gvop = ((UNOP*)gvop)->op_first) &&
6134 gvop->op_type == OP_GV)
6136 GV *gv = cGVOPx_gv(gvop);
6137 OP *sibling = o2->op_sibling;
6138 SV *n = newSVpvn("",0);
6140 gv_fullname3(n, gv, "");
6141 if (SvCUR(n)>6 && strnEQ(SvPVX(n),"main::",6))
6142 sv_chop(n, SvPVX(n)+6);
6143 o2 = newSVOP(OP_CONST, 0, n);
6144 prev->op_sibling = o2;
6145 o2->op_sibling = sibling;
6161 if (contextclass++ == 0) {
6162 e = strchr(proto, ']');
6163 if (!e || e == proto)
6176 while (*--p != '[');
6177 bad_type(arg, Perl_form(aTHX_ "one of %s", p),
6178 gv_ename(namegv), o2);
6184 if (o2->op_type == OP_RV2GV)
6187 bad_type(arg, "symbol", gv_ename(namegv), o2);
6190 if (o2->op_type == OP_ENTERSUB)
6193 bad_type(arg, "subroutine entry", gv_ename(namegv), o2);
6196 if (o2->op_type == OP_RV2SV ||
6197 o2->op_type == OP_PADSV ||
6198 o2->op_type == OP_HELEM ||
6199 o2->op_type == OP_AELEM ||
6200 o2->op_type == OP_THREADSV)
6203 bad_type(arg, "scalar", gv_ename(namegv), o2);
6206 if (o2->op_type == OP_RV2AV ||
6207 o2->op_type == OP_PADAV)
6210 bad_type(arg, "array", gv_ename(namegv), o2);
6213 if (o2->op_type == OP_RV2HV ||
6214 o2->op_type == OP_PADHV)
6217 bad_type(arg, "hash", gv_ename(namegv), o2);
6222 OP* sib = kid->op_sibling;
6223 kid->op_sibling = 0;
6224 o2 = newUNOP(OP_REFGEN, 0, kid);
6225 o2->op_sibling = sib;
6226 prev->op_sibling = o2;
6228 if (contextclass && e) {
6243 Perl_croak(aTHX_ "Malformed prototype for %s: %"SVf,
6244 gv_ename(namegv), cv);
6249 mod(o2, OP_ENTERSUB);
6251 o2 = o2->op_sibling;
6253 if (proto && !optional &&
6254 (*proto && *proto != '@' && *proto != '%' && *proto != ';'))
6255 return too_few_arguments(o, gv_ename(namegv));
6260 Perl_ck_svconst(pTHX_ OP *o)
6262 SvREADONLY_on(cSVOPo->op_sv);
6267 Perl_ck_trunc(pTHX_ OP *o)
6269 if (o->op_flags & OPf_KIDS) {
6270 SVOP *kid = (SVOP*)cUNOPo->op_first;
6272 if (kid->op_type == OP_NULL)
6273 kid = (SVOP*)kid->op_sibling;
6274 if (kid && kid->op_type == OP_CONST &&
6275 (kid->op_private & OPpCONST_BARE))
6277 o->op_flags |= OPf_SPECIAL;
6278 kid->op_private &= ~OPpCONST_STRICT;
6285 Perl_ck_substr(pTHX_ OP *o)
6288 if ((o->op_flags & OPf_KIDS) && o->op_private == 4) {
6289 OP *kid = cLISTOPo->op_first;
6291 if (kid->op_type == OP_NULL)
6292 kid = kid->op_sibling;
6294 kid->op_flags |= OPf_MOD;
6300 /* A peephole optimizer. We visit the ops in the order they're to execute. */
6303 Perl_peep(pTHX_ register OP *o)
6305 register OP* oldop = 0;
6308 if (!o || o->op_seq)
6312 SAVEVPTR(PL_curcop);
6313 for (; o; o = o->op_next) {
6316 /* The special value -1 is used by the B::C compiler backend to indicate
6317 * that an op is statically defined and should not be freed */
6318 if (!PL_op_seqmax || PL_op_seqmax == (U16)-1)
6321 switch (o->op_type) {
6325 PL_curcop = ((COP*)o); /* for warnings */
6326 o->op_seq = PL_op_seqmax++;
6330 if (cSVOPo->op_private & OPpCONST_STRICT)
6331 no_bareword_allowed(o);
6333 case OP_METHOD_NAMED:
6334 /* Relocate sv to the pad for thread safety.
6335 * Despite being a "constant", the SV is written to,
6336 * for reference counts, sv_upgrade() etc. */
6338 PADOFFSET ix = pad_alloc(OP_CONST, SVs_PADTMP);
6339 if (o->op_type == OP_CONST && SvPADTMP(cSVOPo->op_sv)) {
6340 /* If op_sv is already a PADTMP then it is being used by
6341 * some pad, so make a copy. */
6342 sv_setsv(PAD_SVl(ix),cSVOPo->op_sv);
6343 SvREADONLY_on(PAD_SVl(ix));
6344 SvREFCNT_dec(cSVOPo->op_sv);
6347 SvREFCNT_dec(PAD_SVl(ix));
6348 SvPADTMP_on(cSVOPo->op_sv);
6349 PAD_SETSV(ix, cSVOPo->op_sv);
6350 /* XXX I don't know how this isn't readonly already. */
6351 SvREADONLY_on(PAD_SVl(ix));
6353 cSVOPo->op_sv = Nullsv;
6357 o->op_seq = PL_op_seqmax++;
6361 if (o->op_next && o->op_next->op_type == OP_STRINGIFY) {
6362 if (o->op_next->op_private & OPpTARGET_MY) {
6363 if (o->op_flags & OPf_STACKED) /* chained concats */
6364 goto ignore_optimization;
6366 /* assert(PL_opargs[o->op_type] & OA_TARGLEX); */
6367 o->op_targ = o->op_next->op_targ;
6368 o->op_next->op_targ = 0;
6369 o->op_private |= OPpTARGET_MY;
6372 op_null(o->op_next);
6374 ignore_optimization:
6375 o->op_seq = PL_op_seqmax++;
6378 if ((o->op_flags & OPf_WANT) != OPf_WANT_LIST) {
6379 o->op_seq = PL_op_seqmax++;
6380 break; /* Scalar stub must produce undef. List stub is noop */
6384 if (o->op_targ == OP_NEXTSTATE
6385 || o->op_targ == OP_DBSTATE
6386 || o->op_targ == OP_SETSTATE)
6388 PL_curcop = ((COP*)o);
6390 /* XXX: We avoid setting op_seq here to prevent later calls
6391 to peep() from mistakenly concluding that optimisation
6392 has already occurred. This doesn't fix the real problem,
6393 though (See 20010220.007). AMS 20010719 */
6394 if (oldop && o->op_next) {
6395 oldop->op_next = o->op_next;
6403 if (oldop && o->op_next) {
6404 oldop->op_next = o->op_next;
6407 o->op_seq = PL_op_seqmax++;
6411 if (o->op_next->op_type == OP_RV2SV) {
6412 if (!(o->op_next->op_private & OPpDEREF)) {
6413 op_null(o->op_next);
6414 o->op_private |= o->op_next->op_private & (OPpLVAL_INTRO
6416 o->op_next = o->op_next->op_next;
6417 o->op_type = OP_GVSV;
6418 o->op_ppaddr = PL_ppaddr[OP_GVSV];
6421 else if (o->op_next->op_type == OP_RV2AV) {
6422 OP* pop = o->op_next->op_next;
6424 if (pop && pop->op_type == OP_CONST &&
6425 (PL_op = pop->op_next) &&
6426 pop->op_next->op_type == OP_AELEM &&
6427 !(pop->op_next->op_private &
6428 (OPpLVAL_INTRO|OPpLVAL_DEFER|OPpDEREF|OPpMAYBE_LVSUB)) &&
6429 (i = SvIV(((SVOP*)pop)->op_sv) - PL_curcop->cop_arybase)
6434 op_null(o->op_next);
6435 op_null(pop->op_next);
6437 o->op_flags |= pop->op_next->op_flags & OPf_MOD;
6438 o->op_next = pop->op_next->op_next;
6439 o->op_type = OP_AELEMFAST;
6440 o->op_ppaddr = PL_ppaddr[OP_AELEMFAST];
6441 o->op_private = (U8)i;
6446 else if ((o->op_private & OPpEARLY_CV) && ckWARN(WARN_PROTOTYPE)) {
6448 if (SvTYPE(gv) == SVt_PVGV && GvCV(gv) && SvPVX(GvCV(gv))) {
6449 /* XXX could check prototype here instead of just carping */
6450 SV *sv = sv_newmortal();
6451 gv_efullname3(sv, gv, Nullch);
6452 Perl_warner(aTHX_ packWARN(WARN_PROTOTYPE),
6453 "%"SVf"() called too early to check prototype",
6457 else if (o->op_next->op_type == OP_READLINE
6458 && o->op_next->op_next->op_type == OP_CONCAT
6459 && (o->op_next->op_next->op_flags & OPf_STACKED))
6461 /* Turn "$a .= <FH>" into an OP_RCATLINE. AMS 20010917 */
6462 o->op_type = OP_RCATLINE;
6463 o->op_flags |= OPf_STACKED;
6464 o->op_ppaddr = PL_ppaddr[OP_RCATLINE];
6465 op_null(o->op_next->op_next);
6466 op_null(o->op_next);
6469 o->op_seq = PL_op_seqmax++;
6480 o->op_seq = PL_op_seqmax++;
6481 while (cLOGOP->op_other->op_type == OP_NULL)
6482 cLOGOP->op_other = cLOGOP->op_other->op_next;
6483 peep(cLOGOP->op_other); /* Recursive calls are not replaced by fptr calls */
6488 o->op_seq = PL_op_seqmax++;
6489 while (cLOOP->op_redoop->op_type == OP_NULL)
6490 cLOOP->op_redoop = cLOOP->op_redoop->op_next;
6491 peep(cLOOP->op_redoop);
6492 while (cLOOP->op_nextop->op_type == OP_NULL)
6493 cLOOP->op_nextop = cLOOP->op_nextop->op_next;
6494 peep(cLOOP->op_nextop);
6495 while (cLOOP->op_lastop->op_type == OP_NULL)
6496 cLOOP->op_lastop = cLOOP->op_lastop->op_next;
6497 peep(cLOOP->op_lastop);
6503 o->op_seq = PL_op_seqmax++;
6504 while (cPMOP->op_pmreplstart &&
6505 cPMOP->op_pmreplstart->op_type == OP_NULL)
6506 cPMOP->op_pmreplstart = cPMOP->op_pmreplstart->op_next;
6507 peep(cPMOP->op_pmreplstart);
6511 o->op_seq = PL_op_seqmax++;
6512 if (ckWARN(WARN_SYNTAX) && o->op_next
6513 && o->op_next->op_type == OP_NEXTSTATE) {
6514 if (o->op_next->op_sibling &&
6515 o->op_next->op_sibling->op_type != OP_EXIT &&
6516 o->op_next->op_sibling->op_type != OP_WARN &&
6517 o->op_next->op_sibling->op_type != OP_DIE) {
6518 line_t oldline = CopLINE(PL_curcop);
6520 CopLINE_set(PL_curcop, CopLINE((COP*)o->op_next));
6521 Perl_warner(aTHX_ packWARN(WARN_EXEC),
6522 "Statement unlikely to be reached");
6523 Perl_warner(aTHX_ packWARN(WARN_EXEC),
6524 "\t(Maybe you meant system() when you said exec()?)\n");
6525 CopLINE_set(PL_curcop, oldline);
6534 SV **svp, **indsvp, *sv;
6539 o->op_seq = PL_op_seqmax++;
6541 if (((BINOP*)o)->op_last->op_type != OP_CONST)
6544 /* Make the CONST have a shared SV */
6545 svp = cSVOPx_svp(((BINOP*)o)->op_last);
6546 if ((!SvFAKE(sv = *svp) || !SvREADONLY(sv)) && !IS_PADCONST(sv)) {
6547 key = SvPV(sv, keylen);
6548 lexname = newSVpvn_share(key,
6549 SvUTF8(sv) ? -(I32)keylen : keylen,
6555 if ((o->op_private & (OPpLVAL_INTRO)))
6558 rop = (UNOP*)((BINOP*)o)->op_first;
6559 if (rop->op_type != OP_RV2HV || rop->op_first->op_type != OP_PADSV)
6561 lexname = *av_fetch(PL_comppad_name, rop->op_first->op_targ, TRUE);
6562 if (!(SvFLAGS(lexname) & SVpad_TYPED))
6564 fields = (GV**)hv_fetch(SvSTASH(lexname), "FIELDS", 6, FALSE);
6565 if (!fields || !GvHV(*fields))
6567 key = SvPV(*svp, keylen);
6568 indsvp = hv_fetch(GvHV(*fields), key,
6569 SvUTF8(*svp) ? -(I32)keylen : keylen, FALSE);
6571 Perl_croak(aTHX_ "No such pseudo-hash field \"%s\" in variable %s of type %s",
6572 key, SvPV(lexname, n_a), HvNAME(SvSTASH(lexname)));
6574 ind = SvIV(*indsvp);
6576 Perl_croak(aTHX_ "Bad index while coercing array into hash");
6577 rop->op_type = OP_RV2AV;
6578 rop->op_ppaddr = PL_ppaddr[OP_RV2AV];
6579 o->op_type = OP_AELEM;
6580 o->op_ppaddr = PL_ppaddr[OP_AELEM];
6582 if (SvREADONLY(*svp))
6584 SvFLAGS(sv) |= (SvFLAGS(*svp)
6585 & (SVs_PADBUSY|SVs_PADTMP|SVs_PADMY));
6595 SV **svp, **indsvp, *sv;
6599 SVOP *first_key_op, *key_op;
6601 o->op_seq = PL_op_seqmax++;
6602 if ((o->op_private & (OPpLVAL_INTRO))
6603 /* I bet there's always a pushmark... */
6604 || ((LISTOP*)o)->op_first->op_sibling->op_type != OP_LIST)
6605 /* hmmm, no optimization if list contains only one key. */
6607 rop = (UNOP*)((LISTOP*)o)->op_last;
6608 if (rop->op_type != OP_RV2HV || rop->op_first->op_type != OP_PADSV)
6610 lexname = *av_fetch(PL_comppad_name, rop->op_first->op_targ, TRUE);
6611 if (!(SvFLAGS(lexname) & SVpad_TYPED))
6613 fields = (GV**)hv_fetch(SvSTASH(lexname), "FIELDS", 6, FALSE);
6614 if (!fields || !GvHV(*fields))
6616 /* Again guessing that the pushmark can be jumped over.... */
6617 first_key_op = (SVOP*)((LISTOP*)((LISTOP*)o)->op_first->op_sibling)
6618 ->op_first->op_sibling;
6619 /* Check that the key list contains only constants. */
6620 for (key_op = first_key_op; key_op;
6621 key_op = (SVOP*)key_op->op_sibling)
6622 if (key_op->op_type != OP_CONST)
6626 rop->op_type = OP_RV2AV;
6627 rop->op_ppaddr = PL_ppaddr[OP_RV2AV];
6628 o->op_type = OP_ASLICE;
6629 o->op_ppaddr = PL_ppaddr[OP_ASLICE];
6630 for (key_op = first_key_op; key_op;
6631 key_op = (SVOP*)key_op->op_sibling) {
6632 svp = cSVOPx_svp(key_op);
6633 key = SvPV(*svp, keylen);
6634 indsvp = hv_fetch(GvHV(*fields), key,
6635 SvUTF8(*svp) ? -(I32)keylen : keylen, FALSE);
6637 Perl_croak(aTHX_ "No such pseudo-hash field \"%s\" "
6638 "in variable %s of type %s",
6639 key, SvPV(lexname, n_a), HvNAME(SvSTASH(lexname)));
6641 ind = SvIV(*indsvp);
6643 Perl_croak(aTHX_ "Bad index while coercing array into hash");
6645 if (SvREADONLY(*svp))
6647 SvFLAGS(sv) |= (SvFLAGS(*svp)
6648 & (SVs_PADBUSY|SVs_PADTMP|SVs_PADMY));
6656 o->op_seq = PL_op_seqmax++;
6666 char* Perl_custom_op_name(pTHX_ OP* o)
6668 IV index = PTR2IV(o->op_ppaddr);
6672 if (!PL_custom_op_names) /* This probably shouldn't happen */
6673 return PL_op_name[OP_CUSTOM];
6675 keysv = sv_2mortal(newSViv(index));
6677 he = hv_fetch_ent(PL_custom_op_names, keysv, 0, 0);
6679 return PL_op_name[OP_CUSTOM]; /* Don't know who you are */
6681 return SvPV_nolen(HeVAL(he));
6684 char* Perl_custom_op_desc(pTHX_ OP* o)
6686 IV index = PTR2IV(o->op_ppaddr);
6690 if (!PL_custom_op_descs)
6691 return PL_op_desc[OP_CUSTOM];
6693 keysv = sv_2mortal(newSViv(index));
6695 he = hv_fetch_ent(PL_custom_op_descs, keysv, 0, 0);
6697 return PL_op_desc[OP_CUSTOM];
6699 return SvPV_nolen(HeVAL(he));
6705 /* Efficient sub that returns a constant scalar value. */
6707 const_sv_xsub(pTHX_ CV* cv)
6712 Perl_croak(aTHX_ "usage: %s::%s()",
6713 HvNAME(GvSTASH(CvGV(cv))), GvNAME(CvGV(cv)));
6717 ST(0) = (SV*)XSANY.any_ptr;