3 * Copyright (c) 1991-2002, Larry Wall
5 * You may distribute under the terms of either the GNU General Public
6 * License or the Artistic License, as specified in the README file.
11 * "You see: Mr. Drogo, he married poor Miss Primula Brandybuck. She was
12 * our Mr. Bilbo's first cousin on the mother's side (her mother being the
13 * youngest of the Old Took's daughters); and Mr. Drogo was his second
14 * cousin. So Mr. Frodo is his first *and* second cousin, once removed
15 * either way, as the saying is, if you follow me." --the Gaffer
24 #define CALL_PEEP(o) CALL_FPTR(PL_peepp)(aTHX_ o)
26 #if defined(PL_OP_SLAB_ALLOC)
28 #ifndef PERL_SLAB_SIZE
29 #define PERL_SLAB_SIZE 2048
32 #define NewOp(m,var,c,type) \
33 STMT_START { var = (type *) Slab_Alloc(m,c*sizeof(type)); } STMT_END
35 #define FreeOp(p) Slab_Free(p)
38 S_Slab_Alloc(pTHX_ int m, size_t sz)
41 * To make incrementing use count easy PL_OpSlab is an I32 *
42 * To make inserting the link to slab PL_OpPtr is I32 **
43 * So compute size in units of sizeof(I32 *) as that is how Pl_OpPtr increments
44 * Add an overhead for pointer to slab and round up as a number of pointers
46 sz = (sz + 2*sizeof(I32 *) -1)/sizeof(I32 *);
47 if ((PL_OpSpace -= sz) < 0) {
48 PL_OpPtr = (I32 **) PerlMemShared_malloc(PERL_SLAB_SIZE*sizeof(I32*));
52 Zero(PL_OpPtr,PERL_SLAB_SIZE,I32 **);
53 /* We reserve the 0'th I32 sized chunk as a use count */
54 PL_OpSlab = (I32 *) PL_OpPtr;
55 /* Reduce size by the use count word, and by the size we need.
56 * Latter is to mimic the '-=' in the if() above
58 PL_OpSpace = PERL_SLAB_SIZE - (sizeof(I32)+sizeof(I32 **)-1)/sizeof(I32 **) - sz;
59 /* Allocation pointer starts at the top.
60 Theory: because we build leaves before trunk allocating at end
61 means that at run time access is cache friendly upward
63 PL_OpPtr += PERL_SLAB_SIZE;
65 assert( PL_OpSpace >= 0 );
66 /* Move the allocation pointer down */
68 assert( PL_OpPtr > (I32 **) PL_OpSlab );
69 *PL_OpPtr = PL_OpSlab; /* Note which slab it belongs to */
70 (*PL_OpSlab)++; /* Increment use count of slab */
71 assert( PL_OpPtr+sz <= ((I32 **) PL_OpSlab + PERL_SLAB_SIZE) );
72 assert( *PL_OpSlab > 0 );
73 return (void *)(PL_OpPtr + 1);
77 S_Slab_Free(pTHX_ void *op)
79 I32 **ptr = (I32 **) op;
81 assert( ptr-1 > (I32 **) slab );
82 assert( ptr < ( (I32 **) slab + PERL_SLAB_SIZE) );
86 #define PerlMemShared PerlMem
89 PerlMemShared_free(slab);
90 if (slab == PL_OpSlab) {
97 #define NewOp(m, var, c, type) Newz(m, var, c, type)
98 #define FreeOp(p) Safefree(p)
101 * In the following definition, the ", Nullop" is just to make the compiler
102 * think the expression is of the right type: croak actually does a Siglongjmp.
104 #define CHECKOP(type,o) \
105 ((PL_op_mask && PL_op_mask[type]) \
106 ? ( op_free((OP*)o), \
107 Perl_croak(aTHX_ "'%s' trapped by operation mask", PL_op_desc[type]), \
109 : CALL_FPTR(PL_check[type])(aTHX_ (OP*)o))
111 #define PAD_MAX 999999999
112 #define RETURN_UNLIMITED_NUMBER (PERL_INT_MAX / 2)
115 S_gv_ename(pTHX_ GV *gv)
118 SV* tmpsv = sv_newmortal();
119 gv_efullname3(tmpsv, gv, Nullch);
120 return SvPV(tmpsv,n_a);
124 S_no_fh_allowed(pTHX_ OP *o)
126 yyerror(Perl_form(aTHX_ "Missing comma after first argument to %s function",
132 S_too_few_arguments(pTHX_ OP *o, char *name)
134 yyerror(Perl_form(aTHX_ "Not enough arguments for %s", name));
139 S_too_many_arguments(pTHX_ OP *o, char *name)
141 yyerror(Perl_form(aTHX_ "Too many arguments for %s", name));
146 S_bad_type(pTHX_ I32 n, char *t, char *name, OP *kid)
148 yyerror(Perl_form(aTHX_ "Type of arg %d to %s must be %s (not %s)",
149 (int)n, name, t, OP_DESC(kid)));
153 S_no_bareword_allowed(pTHX_ OP *o)
155 qerror(Perl_mess(aTHX_
156 "Bareword \"%s\" not allowed while \"strict subs\" in use",
157 SvPV_nolen(cSVOPo_sv)));
160 /* "register" allocation */
163 Perl_pad_allocmy(pTHX_ char *name)
168 if (!(PL_in_my == KEY_our ||
170 (USE_UTF8_IN_NAMES && UTF8_IS_START(name[1])) ||
171 (name[1] == '_' && (int)strlen(name) > 2)))
173 if (!isPRINT(name[1]) || strchr("\t\n\r\f", name[1])) {
174 /* 1999-02-27 mjd@plover.com */
176 p = strchr(name, '\0');
177 /* The next block assumes the buffer is at least 205 chars
178 long. At present, it's always at least 256 chars. */
180 strcpy(name+200, "...");
186 /* Move everything else down one character */
187 for (; p-name > 2; p--)
189 name[2] = toCTRL(name[1]);
192 yyerror(Perl_form(aTHX_ "Can't use global %s in \"my\"",name));
194 if (ckWARN(WARN_MISC) && AvFILLp(PL_comppad_name) >= 0) {
195 SV **svp = AvARRAY(PL_comppad_name);
196 HV *ourstash = (PL_curstash ? PL_curstash : PL_defstash);
197 PADOFFSET top = AvFILLp(PL_comppad_name);
198 for (off = top; (I32)off > PL_comppad_name_floor; off--) {
200 && sv != &PL_sv_undef
201 && (SvIVX(sv) == PAD_MAX || SvIVX(sv) == 0)
202 && (PL_in_my != KEY_our
203 || ((SvFLAGS(sv) & SVpad_OUR) && GvSTASH(sv) == ourstash))
204 && strEQ(name, SvPVX(sv)))
206 Perl_warner(aTHX_ packWARN(WARN_MISC),
207 "\"%s\" variable %s masks earlier declaration in same %s",
208 (PL_in_my == KEY_our ? "our" : "my"),
210 (SvIVX(sv) == PAD_MAX ? "scope" : "statement"));
215 if (PL_in_my == KEY_our) {
218 && sv != &PL_sv_undef
219 && (SvIVX(sv) == PAD_MAX || SvIVX(sv) == 0)
220 && ((SvFLAGS(sv) & SVpad_OUR) && GvSTASH(sv) == ourstash)
221 && strEQ(name, SvPVX(sv)))
223 Perl_warner(aTHX_ packWARN(WARN_MISC),
224 "\"our\" variable %s redeclared", name);
225 Perl_warner(aTHX_ packWARN(WARN_MISC),
226 "\t(Did you mean \"local\" instead of \"our\"?)\n");
229 } while ( off-- > 0 );
232 off = pad_alloc(OP_PADSV, SVs_PADMY);
234 sv_upgrade(sv, SVt_PVNV);
236 if (PL_in_my_stash) {
238 yyerror(Perl_form(aTHX_ "Can't declare class for non-scalar %s in \"%s\"",
239 name, PL_in_my == KEY_our ? "our" : "my"));
240 SvFLAGS(sv) |= SVpad_TYPED;
241 (void)SvUPGRADE(sv, SVt_PVMG);
242 SvSTASH(sv) = (HV*)SvREFCNT_inc(PL_in_my_stash);
244 if (PL_in_my == KEY_our) {
245 (void)SvUPGRADE(sv, SVt_PVGV);
246 GvSTASH(sv) = (HV*)SvREFCNT_inc(PL_curstash ? (SV*)PL_curstash : (SV*)PL_defstash);
247 SvFLAGS(sv) |= SVpad_OUR;
249 av_store(PL_comppad_name, off, sv);
250 SvNVX(sv) = (NV)PAD_MAX;
251 SvIVX(sv) = 0; /* Not yet introduced--see newSTATEOP */
252 if (!PL_min_intro_pending)
253 PL_min_intro_pending = off;
254 PL_max_intro_pending = off;
256 av_store(PL_comppad, off, (SV*)newAV());
257 else if (*name == '%')
258 av_store(PL_comppad, off, (SV*)newHV());
259 SvPADMY_on(PL_curpad[off]);
264 S_pad_addlex(pTHX_ SV *proto_namesv)
266 SV *namesv = NEWSV(1103,0);
267 PADOFFSET newoff = pad_alloc(OP_PADSV, SVs_PADMY);
268 sv_upgrade(namesv, SVt_PVNV);
269 sv_setpv(namesv, SvPVX(proto_namesv));
270 av_store(PL_comppad_name, newoff, namesv);
271 SvNVX(namesv) = (NV)PL_curcop->cop_seq;
272 SvIVX(namesv) = PAD_MAX; /* A ref, intro immediately */
273 SvFAKE_on(namesv); /* A ref, not a real var */
274 if (SvFLAGS(proto_namesv) & SVpad_OUR) { /* An "our" variable */
275 SvFLAGS(namesv) |= SVpad_OUR;
276 (void)SvUPGRADE(namesv, SVt_PVGV);
277 GvSTASH(namesv) = (HV*)SvREFCNT_inc((SV*)GvSTASH(proto_namesv));
279 if (SvFLAGS(proto_namesv) & SVpad_TYPED) { /* A typed lexical */
280 SvFLAGS(namesv) |= SVpad_TYPED;
281 (void)SvUPGRADE(namesv, SVt_PVMG);
282 SvSTASH(namesv) = (HV*)SvREFCNT_inc((SV*)SvSTASH(proto_namesv));
287 #define FINDLEX_NOSEARCH 1 /* don't search outer contexts */
290 S_pad_findlex(pTHX_ char *name, PADOFFSET newoff, U32 seq, CV* startcv,
291 I32 cx_ix, I32 saweval, U32 flags)
297 register PERL_CONTEXT *cx;
299 for (cv = startcv; cv; cv = CvOUTSIDE(cv)) {
300 AV *curlist = CvPADLIST(cv);
301 SV **svp = av_fetch(curlist, 0, FALSE);
304 if (!svp || *svp == &PL_sv_undef)
307 svp = AvARRAY(curname);
308 for (off = AvFILLp(curname); off > 0; off--) {
309 if ((sv = svp[off]) &&
310 sv != &PL_sv_undef &&
311 seq <= (U32)SvIVX(sv) &&
312 seq > (U32)I_32(SvNVX(sv)) &&
313 strEQ(SvPVX(sv), name))
324 return 0; /* don't clone from inactive stack frame */
328 oldpad = (AV*)AvARRAY(curlist)[depth];
329 oldsv = *av_fetch(oldpad, off, TRUE);
330 if (!newoff) { /* Not a mere clone operation. */
331 newoff = pad_addlex(sv);
332 if (CvANON(PL_compcv) || SvTYPE(PL_compcv) == SVt_PVFM) {
333 /* "It's closures all the way down." */
334 CvCLONE_on(PL_compcv);
336 if (CvANON(PL_compcv))
337 oldsv = Nullsv; /* no need to keep ref */
342 bcv && bcv != cv && !CvCLONE(bcv);
343 bcv = CvOUTSIDE(bcv))
346 /* install the missing pad entry in intervening
347 * nested subs and mark them cloneable.
348 * XXX fix pad_foo() to not use globals */
349 AV *ocomppad_name = PL_comppad_name;
350 AV *ocomppad = PL_comppad;
351 SV **ocurpad = PL_curpad;
352 AV *padlist = CvPADLIST(bcv);
353 PL_comppad_name = (AV*)AvARRAY(padlist)[0];
354 PL_comppad = (AV*)AvARRAY(padlist)[1];
355 PL_curpad = AvARRAY(PL_comppad);
357 PL_comppad_name = ocomppad_name;
358 PL_comppad = ocomppad;
363 if (ckWARN(WARN_CLOSURE)
364 && !CvUNIQUE(bcv) && !CvUNIQUE(cv))
366 Perl_warner(aTHX_ packWARN(WARN_CLOSURE),
367 "Variable \"%s\" may be unavailable",
375 else if (!CvUNIQUE(PL_compcv)) {
376 if (ckWARN(WARN_CLOSURE) && !SvFAKE(sv) && !CvUNIQUE(cv)
377 && !(SvFLAGS(sv) & SVpad_OUR))
379 Perl_warner(aTHX_ packWARN(WARN_CLOSURE),
380 "Variable \"%s\" will not stay shared", name);
384 av_store(PL_comppad, newoff, SvREFCNT_inc(oldsv));
390 if (flags & FINDLEX_NOSEARCH)
393 /* Nothing in current lexical context--try eval's context, if any.
394 * This is necessary to let the perldb get at lexically scoped variables.
395 * XXX This will also probably interact badly with eval tree caching.
398 for (i = cx_ix; i >= 0; i--) {
400 switch (CxTYPE(cx)) {
402 if (i == 0 && saweval) {
403 return pad_findlex(name, newoff, seq, PL_main_cv, -1, saweval, 0);
407 switch (cx->blk_eval.old_op_type) {
409 if (CxREALEVAL(cx)) {
412 seq = cxstack[i].blk_oldcop->cop_seq;
413 startcv = cxstack[i].blk_eval.cv;
414 if (startcv && CvOUTSIDE(startcv)) {
415 off = pad_findlex(name, newoff, seq, CvOUTSIDE(startcv),
417 if (off) /* continue looking if not found here */
424 /* require/do must have their own scope */
433 if (PL_debstash && CvSTASH(cv) == PL_debstash) { /* ignore DB'* scope */
434 saweval = i; /* so we know where we were called from */
435 seq = cxstack[i].blk_oldcop->cop_seq;
438 return pad_findlex(name, newoff, seq, cv, i-1, saweval,FINDLEX_NOSEARCH);
446 Perl_pad_findmy(pTHX_ char *name)
451 SV **svp = AvARRAY(PL_comppad_name);
452 U32 seq = PL_cop_seqmax;
456 #ifdef USE_5005THREADS
458 * Special case to get lexical (and hence per-thread) @_.
459 * XXX I need to find out how to tell at parse-time whether use
460 * of @_ should refer to a lexical (from a sub) or defgv (global
461 * scope and maybe weird sub-ish things like formats). See
462 * startsub in perly.y. It's possible that @_ could be lexical
463 * (at least from subs) even in non-threaded perl.
465 if (strEQ(name, "@_"))
466 return 0; /* success. (NOT_IN_PAD indicates failure) */
467 #endif /* USE_5005THREADS */
469 /* The one we're looking for is probably just before comppad_name_fill. */
470 for (off = AvFILLp(PL_comppad_name); off > 0; off--) {
471 if ((sv = svp[off]) &&
472 sv != &PL_sv_undef &&
474 (seq <= (U32)SvIVX(sv) &&
475 seq > (U32)I_32(SvNVX(sv)))) &&
476 strEQ(SvPVX(sv), name))
478 if (SvIVX(sv) || SvFLAGS(sv) & SVpad_OUR)
479 return (PADOFFSET)off;
480 pendoff = off; /* this pending def. will override import */
484 outside = CvOUTSIDE(PL_compcv);
486 /* Check if if we're compiling an eval'', and adjust seq to be the
487 * eval's seq number. This depends on eval'' having a non-null
488 * CvOUTSIDE() while it is being compiled. The eval'' itself is
489 * identified by CvEVAL being true and CvGV being null. */
490 if (outside && CvEVAL(PL_compcv) && !CvGV(PL_compcv) && cxstack_ix >= 0) {
491 cx = &cxstack[cxstack_ix];
493 seq = cx->blk_oldcop->cop_seq;
496 /* See if it's in a nested scope */
497 off = pad_findlex(name, 0, seq, outside, cxstack_ix, 0, 0);
499 /* If there is a pending local definition, this new alias must die */
501 SvIVX(AvARRAY(PL_comppad_name)[off]) = seq;
502 return off; /* pad_findlex returns 0 for failure...*/
504 return NOT_IN_PAD; /* ...but we return NOT_IN_PAD for failure */
508 Perl_pad_leavemy(pTHX_ I32 fill)
511 SV **svp = AvARRAY(PL_comppad_name);
513 if (PL_min_intro_pending && fill < PL_min_intro_pending) {
514 for (off = PL_max_intro_pending; off >= PL_min_intro_pending; off--) {
515 if ((sv = svp[off]) && sv != &PL_sv_undef && ckWARN_d(WARN_INTERNAL))
516 Perl_warner(aTHX_ packWARN(WARN_INTERNAL), "%s never introduced", SvPVX(sv));
519 /* "Deintroduce" my variables that are leaving with this scope. */
520 for (off = AvFILLp(PL_comppad_name); off > fill; off--) {
521 if ((sv = svp[off]) && sv != &PL_sv_undef && SvIVX(sv) == PAD_MAX)
522 SvIVX(sv) = PL_cop_seqmax;
527 Perl_pad_alloc(pTHX_ I32 optype, U32 tmptype)
532 if (AvARRAY(PL_comppad) != PL_curpad)
533 Perl_croak(aTHX_ "panic: pad_alloc");
534 if (PL_pad_reset_pending)
536 if (tmptype & SVs_PADMY) {
538 sv = *av_fetch(PL_comppad, AvFILLp(PL_comppad) + 1, TRUE);
539 } while (SvPADBUSY(sv)); /* need a fresh one */
540 retval = AvFILLp(PL_comppad);
543 SV **names = AvARRAY(PL_comppad_name);
544 SSize_t names_fill = AvFILLp(PL_comppad_name);
547 * "foreach" index vars temporarily become aliases to non-"my"
548 * values. Thus we must skip, not just pad values that are
549 * marked as current pad values, but also those with names.
551 if (++PL_padix <= names_fill &&
552 (sv = names[PL_padix]) && sv != &PL_sv_undef)
554 sv = *av_fetch(PL_comppad, PL_padix, TRUE);
555 if (!(SvFLAGS(sv) & (SVs_PADTMP|SVs_PADMY)) &&
556 !IS_PADGV(sv) && !IS_PADCONST(sv))
561 SvFLAGS(sv) |= tmptype;
562 PL_curpad = AvARRAY(PL_comppad);
563 #ifdef USE_5005THREADS
564 DEBUG_X(PerlIO_printf(Perl_debug_log,
565 "0x%"UVxf" Pad 0x%"UVxf" alloc %ld for %s\n",
566 PTR2UV(thr), PTR2UV(PL_curpad),
567 (long) retval, PL_op_name[optype]));
569 DEBUG_X(PerlIO_printf(Perl_debug_log,
570 "Pad 0x%"UVxf" alloc %ld for %s\n",
572 (long) retval, PL_op_name[optype]));
573 #endif /* USE_5005THREADS */
574 return (PADOFFSET)retval;
578 Perl_pad_sv(pTHX_ PADOFFSET po)
580 #ifdef USE_5005THREADS
581 DEBUG_X(PerlIO_printf(Perl_debug_log,
582 "0x%"UVxf" Pad 0x%"UVxf" sv %"IVdf"\n",
583 PTR2UV(thr), PTR2UV(PL_curpad), (IV)po));
586 Perl_croak(aTHX_ "panic: pad_sv po");
587 DEBUG_X(PerlIO_printf(Perl_debug_log, "Pad 0x%"UVxf" sv %"IVdf"\n",
588 PTR2UV(PL_curpad), (IV)po));
589 #endif /* USE_5005THREADS */
590 return PL_curpad[po]; /* eventually we'll turn this into a macro */
594 Perl_pad_free(pTHX_ PADOFFSET po)
598 if (AvARRAY(PL_comppad) != PL_curpad)
599 Perl_croak(aTHX_ "panic: pad_free curpad");
601 Perl_croak(aTHX_ "panic: pad_free po");
602 #ifdef USE_5005THREADS
603 DEBUG_X(PerlIO_printf(Perl_debug_log,
604 "0x%"UVxf" Pad 0x%"UVxf" free %"IVdf"\n",
605 PTR2UV(thr), PTR2UV(PL_curpad), (IV)po));
607 DEBUG_X(PerlIO_printf(Perl_debug_log, "Pad 0x%"UVxf" free %"IVdf"\n",
608 PTR2UV(PL_curpad), (IV)po));
609 #endif /* USE_5005THREADS */
610 if (PL_curpad[po] && PL_curpad[po] != &PL_sv_undef) {
611 SvPADTMP_off(PL_curpad[po]);
613 SvREADONLY_off(PL_curpad[po]); /* could be a freed constant */
616 if ((I32)po < PL_padix)
621 Perl_pad_swipe(pTHX_ PADOFFSET po)
623 if (AvARRAY(PL_comppad) != PL_curpad)
624 Perl_croak(aTHX_ "panic: pad_swipe curpad");
626 Perl_croak(aTHX_ "panic: pad_swipe po");
627 #ifdef USE_5005THREADS
628 DEBUG_X(PerlIO_printf(Perl_debug_log,
629 "0x%"UVxf" Pad 0x%"UVxf" swipe %"IVdf"\n",
630 PTR2UV(thr), PTR2UV(PL_curpad), (IV)po));
632 DEBUG_X(PerlIO_printf(Perl_debug_log, "Pad 0x%"UVxf" swipe %"IVdf"\n",
633 PTR2UV(PL_curpad), (IV)po));
634 #endif /* USE_5005THREADS */
636 SvPADTMP_off(PL_curpad[po]);
637 PL_curpad[po] = NEWSV(1107,0);
638 SvPADTMP_on(PL_curpad[po]);
639 if ((I32)po < PL_padix)
643 /* XXX pad_reset() is currently disabled because it results in serious bugs.
644 * It causes pad temp TARGs to be shared between OPs. Since TARGs are pushed
645 * on the stack by OPs that use them, there are several ways to get an alias
646 * to a shared TARG. Such an alias will change randomly and unpredictably.
647 * We avoid doing this until we can think of a Better Way.
652 #ifdef USE_BROKEN_PAD_RESET
655 if (AvARRAY(PL_comppad) != PL_curpad)
656 Perl_croak(aTHX_ "panic: pad_reset curpad");
657 #ifdef USE_5005THREADS
658 DEBUG_X(PerlIO_printf(Perl_debug_log,
659 "0x%"UVxf" Pad 0x%"UVxf" reset\n",
660 PTR2UV(thr), PTR2UV(PL_curpad)));
662 DEBUG_X(PerlIO_printf(Perl_debug_log, "Pad 0x%"UVxf" reset\n",
664 #endif /* USE_5005THREADS */
665 if (!PL_tainting) { /* Can't mix tainted and non-tainted temporaries. */
666 for (po = AvMAX(PL_comppad); po > PL_padix_floor; po--) {
667 if (PL_curpad[po] && !SvIMMORTAL(PL_curpad[po]))
668 SvPADTMP_off(PL_curpad[po]);
670 PL_padix = PL_padix_floor;
673 PL_pad_reset_pending = FALSE;
676 #ifdef USE_5005THREADS
677 /* find_threadsv is not reentrant */
679 Perl_find_threadsv(pTHX_ const char *name)
684 /* We currently only handle names of a single character */
685 p = strchr(PL_threadsv_names, *name);
688 key = p - PL_threadsv_names;
689 MUTEX_LOCK(&thr->mutex);
690 svp = av_fetch(thr->threadsv, key, FALSE);
692 MUTEX_UNLOCK(&thr->mutex);
694 SV *sv = NEWSV(0, 0);
695 av_store(thr->threadsv, key, sv);
696 thr->threadsvp = AvARRAY(thr->threadsv);
697 MUTEX_UNLOCK(&thr->mutex);
699 * Some magic variables used to be automagically initialised
700 * in gv_fetchpv. Those which are now per-thread magicals get
701 * initialised here instead.
707 sv_setpv(sv, "\034");
708 sv_magic(sv, 0, PERL_MAGIC_sv, name, 1);
713 PL_sawampersand = TRUE;
727 /* XXX %! tied to Errno.pm needs to be added here.
728 * See gv_fetchpv(). */
732 sv_magic(sv, 0, PERL_MAGIC_sv, name, 1);
734 DEBUG_S(PerlIO_printf(Perl_error_log,
735 "find_threadsv: new SV %p for $%s%c\n",
736 sv, (*name < 32) ? "^" : "",
737 (*name < 32) ? toCTRL(*name) : *name));
741 #endif /* USE_5005THREADS */
746 Perl_op_free(pTHX_ OP *o)
748 register OP *kid, *nextkid;
751 if (!o || o->op_seq == (U16)-1)
754 if (o->op_private & OPpREFCOUNTED) {
755 switch (o->op_type) {
763 if (OpREFCNT_dec(o)) {
774 if (o->op_flags & OPf_KIDS) {
775 for (kid = cUNOPo->op_first; kid; kid = nextkid) {
776 nextkid = kid->op_sibling; /* Get before next freeing kid */
782 type = (OPCODE)o->op_targ;
784 /* COP* is not cleared by op_clear() so that we may track line
785 * numbers etc even after null() */
786 if (type == OP_NEXTSTATE || type == OP_SETSTATE || type == OP_DBSTATE)
794 Perl_op_clear(pTHX_ OP *o)
797 switch (o->op_type) {
798 case OP_NULL: /* Was holding old type, if any. */
799 case OP_ENTEREVAL: /* Was holding hints. */
800 #ifdef USE_5005THREADS
801 case OP_THREADSV: /* Was holding index into thr->threadsv AV. */
805 #ifdef USE_5005THREADS
807 if (!(o->op_flags & OPf_SPECIAL))
810 #endif /* USE_5005THREADS */
812 if (!(o->op_flags & OPf_REF)
813 || (PL_check[o->op_type] != MEMBER_TO_FPTR(Perl_ck_ftst)))
820 if (cPADOPo->op_padix > 0) {
823 pad_swipe(cPADOPo->op_padix);
824 /* No GvIN_PAD_off(gv) here, because other references may still
825 * exist on the pad */
828 cPADOPo->op_padix = 0;
831 SvREFCNT_dec(cSVOPo->op_sv);
832 cSVOPo->op_sv = Nullsv;
835 case OP_METHOD_NAMED:
837 SvREFCNT_dec(cSVOPo->op_sv);
838 cSVOPo->op_sv = Nullsv;
844 if (o->op_flags & (OPf_SPECIAL|OPf_STACKED|OPf_KIDS))
848 if (o->op_private & (OPpTRANS_FROM_UTF|OPpTRANS_TO_UTF)) {
849 SvREFCNT_dec(cSVOPo->op_sv);
850 cSVOPo->op_sv = Nullsv;
853 Safefree(cPVOPo->op_pv);
854 cPVOPo->op_pv = Nullch;
858 op_free(cPMOPo->op_pmreplroot);
862 if (INT2PTR(PADOFFSET, cPMOPo->op_pmreplroot)) {
864 GV *gv = (GV*)PL_curpad[INT2PTR(PADOFFSET, cPMOPo->op_pmreplroot)];
865 pad_swipe(INT2PTR(PADOFFSET, cPMOPo->op_pmreplroot));
866 /* No GvIN_PAD_off(gv) here, because other references may still
867 * exist on the pad */
872 SvREFCNT_dec((SV*)cPMOPo->op_pmreplroot);
879 HV *pmstash = PmopSTASH(cPMOPo);
880 if (pmstash && SvREFCNT(pmstash)) {
881 PMOP *pmop = HvPMROOT(pmstash);
882 PMOP *lastpmop = NULL;
884 if (cPMOPo == pmop) {
886 lastpmop->op_pmnext = pmop->op_pmnext;
888 HvPMROOT(pmstash) = pmop->op_pmnext;
892 pmop = pmop->op_pmnext;
895 PmopSTASH_free(cPMOPo);
897 cPMOPo->op_pmreplroot = Nullop;
898 /* we use the "SAFE" version of the PM_ macros here
899 * since sv_clean_all might release some PMOPs
900 * after PL_regex_padav has been cleared
901 * and the clearing of PL_regex_padav needs to
902 * happen before sv_clean_all
904 ReREFCNT_dec(PM_GETRE_SAFE(cPMOPo));
905 PM_SETRE_SAFE(cPMOPo, (REGEXP*)NULL);
907 if(PL_regex_pad) { /* We could be in destruction */
908 av_push((AV*) PL_regex_pad[0],(SV*) PL_regex_pad[(cPMOPo)->op_pmoffset]);
909 SvREPADTMP_on(PL_regex_pad[(cPMOPo)->op_pmoffset]);
910 PM_SETRE(cPMOPo, (cPMOPo)->op_pmoffset);
917 if (o->op_targ > 0) {
918 pad_free(o->op_targ);
924 S_cop_free(pTHX_ COP* cop)
926 Safefree(cop->cop_label); /* FIXME: treaddead ??? */
929 if (! specialWARN(cop->cop_warnings))
930 SvREFCNT_dec(cop->cop_warnings);
931 if (! specialCopIO(cop->cop_io)) {
935 char *s = SvPV(cop->cop_io,len);
936 Perl_warn(aTHX_ "io='%.*s'",(int) len,s); /* ??? --jhi */
939 SvREFCNT_dec(cop->cop_io);
945 Perl_op_null(pTHX_ OP *o)
947 if (o->op_type == OP_NULL)
950 o->op_targ = o->op_type;
951 o->op_type = OP_NULL;
952 o->op_ppaddr = PL_ppaddr[OP_NULL];
955 /* Contextualizers */
957 #define LINKLIST(o) ((o)->op_next ? (o)->op_next : linklist((OP*)o))
960 Perl_linklist(pTHX_ OP *o)
967 /* establish postfix order */
968 if (cUNOPo->op_first) {
969 o->op_next = LINKLIST(cUNOPo->op_first);
970 for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling) {
972 kid->op_next = LINKLIST(kid->op_sibling);
984 Perl_scalarkids(pTHX_ OP *o)
987 if (o && o->op_flags & OPf_KIDS) {
988 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
995 S_scalarboolean(pTHX_ OP *o)
997 if (o->op_type == OP_SASSIGN && cBINOPo->op_first->op_type == OP_CONST) {
998 if (ckWARN(WARN_SYNTAX)) {
999 line_t oldline = CopLINE(PL_curcop);
1001 if (PL_copline != NOLINE)
1002 CopLINE_set(PL_curcop, PL_copline);
1003 Perl_warner(aTHX_ packWARN(WARN_SYNTAX), "Found = in conditional, should be ==");
1004 CopLINE_set(PL_curcop, oldline);
1011 Perl_scalar(pTHX_ OP *o)
1015 /* assumes no premature commitment */
1016 if (!o || (o->op_flags & OPf_WANT) || PL_error_count
1017 || o->op_type == OP_RETURN)
1022 o->op_flags = (o->op_flags & ~OPf_WANT) | OPf_WANT_SCALAR;
1024 switch (o->op_type) {
1026 scalar(cBINOPo->op_first);
1031 for (kid = cUNOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
1035 if ((kid = cLISTOPo->op_first) && kid->op_type == OP_PUSHRE) {
1036 if (!kPMOP->op_pmreplroot)
1037 deprecate_old("implicit split to @_");
1045 if (o->op_flags & OPf_KIDS) {
1046 for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling)
1052 kid = cLISTOPo->op_first;
1054 while ((kid = kid->op_sibling)) {
1055 if (kid->op_sibling)
1060 WITH_THR(PL_curcop = &PL_compiling);
1065 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling) {
1066 if (kid->op_sibling)
1071 WITH_THR(PL_curcop = &PL_compiling);
1074 if (ckWARN(WARN_VOID))
1075 Perl_warner(aTHX_ packWARN(WARN_VOID), "Useless use of sort in scalar context");
1081 Perl_scalarvoid(pTHX_ OP *o)
1088 if (o->op_type == OP_NEXTSTATE
1089 || o->op_type == OP_SETSTATE
1090 || o->op_type == OP_DBSTATE
1091 || (o->op_type == OP_NULL && (o->op_targ == OP_NEXTSTATE
1092 || o->op_targ == OP_SETSTATE
1093 || o->op_targ == OP_DBSTATE)))
1094 PL_curcop = (COP*)o; /* for warning below */
1096 /* assumes no premature commitment */
1097 want = o->op_flags & OPf_WANT;
1098 if ((want && want != OPf_WANT_SCALAR) || PL_error_count
1099 || o->op_type == OP_RETURN)
1104 if ((o->op_private & OPpTARGET_MY)
1105 && (PL_opargs[o->op_type] & OA_TARGLEX))/* OPp share the meaning */
1107 return scalar(o); /* As if inside SASSIGN */
1110 o->op_flags = (o->op_flags & ~OPf_WANT) | OPf_WANT_VOID;
1112 switch (o->op_type) {
1114 if (!(PL_opargs[o->op_type] & OA_FOLDCONST))
1118 if (o->op_flags & OPf_STACKED)
1122 if (o->op_private == 4)
1164 case OP_GETSOCKNAME:
1165 case OP_GETPEERNAME:
1170 case OP_GETPRIORITY:
1194 if (!(o->op_private & (OPpLVAL_INTRO|OPpOUR_INTRO)))
1195 useless = OP_DESC(o);
1202 if (!(o->op_private & (OPpLVAL_INTRO|OPpOUR_INTRO)) &&
1203 (!o->op_sibling || o->op_sibling->op_type != OP_READLINE))
1204 useless = "a variable";
1209 if (cSVOPo->op_private & OPpCONST_STRICT)
1210 no_bareword_allowed(o);
1212 if (ckWARN(WARN_VOID)) {
1213 useless = "a constant";
1214 /* the constants 0 and 1 are permitted as they are
1215 conventionally used as dummies in constructs like
1216 1 while some_condition_with_side_effects; */
1217 if (SvNIOK(sv) && (SvNV(sv) == 0.0 || SvNV(sv) == 1.0))
1219 else if (SvPOK(sv)) {
1220 /* perl4's way of mixing documentation and code
1221 (before the invention of POD) was based on a
1222 trick to mix nroff and perl code. The trick was
1223 built upon these three nroff macros being used in
1224 void context. The pink camel has the details in
1225 the script wrapman near page 319. */
1226 if (strnEQ(SvPVX(sv), "di", 2) ||
1227 strnEQ(SvPVX(sv), "ds", 2) ||
1228 strnEQ(SvPVX(sv), "ig", 2))
1233 op_null(o); /* don't execute or even remember it */
1237 o->op_type = OP_PREINC; /* pre-increment is faster */
1238 o->op_ppaddr = PL_ppaddr[OP_PREINC];
1242 o->op_type = OP_PREDEC; /* pre-decrement is faster */
1243 o->op_ppaddr = PL_ppaddr[OP_PREDEC];
1249 for (kid = cUNOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
1254 if (o->op_flags & OPf_STACKED)
1261 if (!(o->op_flags & OPf_KIDS))
1270 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
1277 /* all requires must return a boolean value */
1278 o->op_flags &= ~OPf_WANT;
1283 if ((kid = cLISTOPo->op_first) && kid->op_type == OP_PUSHRE) {
1284 if (!kPMOP->op_pmreplroot)
1285 deprecate_old("implicit split to @_");
1289 if (useless && ckWARN(WARN_VOID))
1290 Perl_warner(aTHX_ packWARN(WARN_VOID), "Useless use of %s in void context", useless);
1295 Perl_listkids(pTHX_ OP *o)
1298 if (o && o->op_flags & OPf_KIDS) {
1299 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
1306 Perl_list(pTHX_ OP *o)
1310 /* assumes no premature commitment */
1311 if (!o || (o->op_flags & OPf_WANT) || PL_error_count
1312 || o->op_type == OP_RETURN)
1317 if ((o->op_private & OPpTARGET_MY)
1318 && (PL_opargs[o->op_type] & OA_TARGLEX))/* OPp share the meaning */
1320 return o; /* As if inside SASSIGN */
1323 o->op_flags = (o->op_flags & ~OPf_WANT) | OPf_WANT_LIST;
1325 switch (o->op_type) {
1328 list(cBINOPo->op_first);
1333 for (kid = cUNOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
1341 if (!(o->op_flags & OPf_KIDS))
1343 if (!o->op_next && cUNOPo->op_first->op_type == OP_FLOP) {
1344 list(cBINOPo->op_first);
1345 return gen_constant_list(o);
1352 kid = cLISTOPo->op_first;
1354 while ((kid = kid->op_sibling)) {
1355 if (kid->op_sibling)
1360 WITH_THR(PL_curcop = &PL_compiling);
1364 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling) {
1365 if (kid->op_sibling)
1370 WITH_THR(PL_curcop = &PL_compiling);
1373 /* all requires must return a boolean value */
1374 o->op_flags &= ~OPf_WANT;
1381 Perl_scalarseq(pTHX_ OP *o)
1386 if (o->op_type == OP_LINESEQ ||
1387 o->op_type == OP_SCOPE ||
1388 o->op_type == OP_LEAVE ||
1389 o->op_type == OP_LEAVETRY)
1391 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling) {
1392 if (kid->op_sibling) {
1396 PL_curcop = &PL_compiling;
1398 o->op_flags &= ~OPf_PARENS;
1399 if (PL_hints & HINT_BLOCK_SCOPE)
1400 o->op_flags |= OPf_PARENS;
1403 o = newOP(OP_STUB, 0);
1408 S_modkids(pTHX_ OP *o, I32 type)
1411 if (o && o->op_flags & OPf_KIDS) {
1412 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
1419 Perl_mod(pTHX_ OP *o, I32 type)
1424 if (!o || PL_error_count)
1427 if ((o->op_private & OPpTARGET_MY)
1428 && (PL_opargs[o->op_type] & OA_TARGLEX))/* OPp share the meaning */
1433 switch (o->op_type) {
1438 if (!(o->op_private & (OPpCONST_ARYBASE)))
1440 if (PL_eval_start && PL_eval_start->op_type == OP_CONST) {
1441 PL_compiling.cop_arybase = (I32)SvIV(cSVOPx(PL_eval_start)->op_sv);
1445 SAVEI32(PL_compiling.cop_arybase);
1446 PL_compiling.cop_arybase = 0;
1448 else if (type == OP_REFGEN)
1451 Perl_croak(aTHX_ "That use of $[ is unsupported");
1454 if (o->op_flags & OPf_PARENS)
1458 if ((type == OP_UNDEF || type == OP_REFGEN) &&
1459 !(o->op_flags & OPf_STACKED)) {
1460 o->op_type = OP_RV2CV; /* entersub => rv2cv */
1461 o->op_ppaddr = PL_ppaddr[OP_RV2CV];
1462 assert(cUNOPo->op_first->op_type == OP_NULL);
1463 op_null(((LISTOP*)cUNOPo->op_first)->op_first);/* disable pushmark */
1466 else if (o->op_private & OPpENTERSUB_NOMOD)
1468 else { /* lvalue subroutine call */
1469 o->op_private |= OPpLVAL_INTRO;
1470 PL_modcount = RETURN_UNLIMITED_NUMBER;
1471 if (type == OP_GREPSTART || type == OP_ENTERSUB || type == OP_REFGEN) {
1472 /* Backward compatibility mode: */
1473 o->op_private |= OPpENTERSUB_INARGS;
1476 else { /* Compile-time error message: */
1477 OP *kid = cUNOPo->op_first;
1481 if (kid->op_type == OP_PUSHMARK)
1483 if (kid->op_type != OP_NULL || kid->op_targ != OP_LIST)
1485 "panic: unexpected lvalue entersub "
1486 "args: type/targ %ld:%"UVuf,
1487 (long)kid->op_type, (UV)kid->op_targ);
1488 kid = kLISTOP->op_first;
1490 while (kid->op_sibling)
1491 kid = kid->op_sibling;
1492 if (!(kid->op_type == OP_NULL && kid->op_targ == OP_RV2CV)) {
1494 if (kid->op_type == OP_METHOD_NAMED
1495 || kid->op_type == OP_METHOD)
1499 NewOp(1101, newop, 1, UNOP);
1500 newop->op_type = OP_RV2CV;
1501 newop->op_ppaddr = PL_ppaddr[OP_RV2CV];
1502 newop->op_first = Nullop;
1503 newop->op_next = (OP*)newop;
1504 kid->op_sibling = (OP*)newop;
1505 newop->op_private |= OPpLVAL_INTRO;
1509 if (kid->op_type != OP_RV2CV)
1511 "panic: unexpected lvalue entersub "
1512 "entry via type/targ %ld:%"UVuf,
1513 (long)kid->op_type, (UV)kid->op_targ);
1514 kid->op_private |= OPpLVAL_INTRO;
1515 break; /* Postpone until runtime */
1519 kid = kUNOP->op_first;
1520 if (kid->op_type == OP_NULL && kid->op_targ == OP_RV2SV)
1521 kid = kUNOP->op_first;
1522 if (kid->op_type == OP_NULL)
1524 "Unexpected constant lvalue entersub "
1525 "entry via type/targ %ld:%"UVuf,
1526 (long)kid->op_type, (UV)kid->op_targ);
1527 if (kid->op_type != OP_GV) {
1528 /* Restore RV2CV to check lvalueness */
1530 if (kid->op_next && kid->op_next != kid) { /* Happens? */
1531 okid->op_next = kid->op_next;
1532 kid->op_next = okid;
1535 okid->op_next = Nullop;
1536 okid->op_type = OP_RV2CV;
1538 okid->op_ppaddr = PL_ppaddr[OP_RV2CV];
1539 okid->op_private |= OPpLVAL_INTRO;
1543 cv = GvCV(kGVOP_gv);
1553 /* grep, foreach, subcalls, refgen */
1554 if (type == OP_GREPSTART || type == OP_ENTERSUB || type == OP_REFGEN)
1556 yyerror(Perl_form(aTHX_ "Can't modify %s in %s",
1557 (o->op_type == OP_NULL && (o->op_flags & OPf_SPECIAL)
1559 : (o->op_type == OP_ENTERSUB
1560 ? "non-lvalue subroutine call"
1562 type ? PL_op_desc[type] : "local"));
1576 case OP_RIGHT_SHIFT:
1585 if (!(o->op_flags & OPf_STACKED))
1591 for (kid = cUNOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
1597 if (!type && cUNOPo->op_first->op_type != OP_GV)
1598 Perl_croak(aTHX_ "Can't localize through a reference");
1599 if (type == OP_REFGEN && o->op_flags & OPf_PARENS) {
1600 PL_modcount = RETURN_UNLIMITED_NUMBER;
1601 return o; /* Treat \(@foo) like ordinary list. */
1605 if (scalar_mod_type(o, type))
1607 ref(cUNOPo->op_first, o->op_type);
1611 if (type == OP_LEAVESUBLV)
1612 o->op_private |= OPpMAYBE_LVSUB;
1617 PL_modcount = RETURN_UNLIMITED_NUMBER;
1620 if (!type && cUNOPo->op_first->op_type != OP_GV)
1621 Perl_croak(aTHX_ "Can't localize through a reference");
1622 ref(cUNOPo->op_first, o->op_type);
1626 PL_hints |= HINT_BLOCK_SCOPE;
1636 PL_modcount = RETURN_UNLIMITED_NUMBER;
1637 if (type == OP_REFGEN && o->op_flags & OPf_PARENS)
1638 return o; /* Treat \(@foo) like ordinary list. */
1639 if (scalar_mod_type(o, type))
1641 if (type == OP_LEAVESUBLV)
1642 o->op_private |= OPpMAYBE_LVSUB;
1647 Perl_croak(aTHX_ "Can't localize lexical variable %s",
1648 SvPV(*av_fetch(PL_comppad_name, o->op_targ, 4), n_a));
1651 #ifdef USE_5005THREADS
1653 PL_modcount++; /* XXX ??? */
1655 #endif /* USE_5005THREADS */
1661 if (type != OP_SASSIGN)
1665 if (o->op_private == 4) /* don't allow 4 arg substr as lvalue */
1670 if (type == OP_LEAVESUBLV)
1671 o->op_private |= OPpMAYBE_LVSUB;
1673 pad_free(o->op_targ);
1674 o->op_targ = pad_alloc(o->op_type, SVs_PADMY);
1675 assert(SvTYPE(PAD_SV(o->op_targ)) == SVt_NULL);
1676 if (o->op_flags & OPf_KIDS)
1677 mod(cBINOPo->op_first->op_sibling, type);
1682 ref(cBINOPo->op_first, o->op_type);
1683 if (type == OP_ENTERSUB &&
1684 !(o->op_private & (OPpLVAL_INTRO | OPpDEREF)))
1685 o->op_private |= OPpLVAL_DEFER;
1686 if (type == OP_LEAVESUBLV)
1687 o->op_private |= OPpMAYBE_LVSUB;
1695 if (o->op_flags & OPf_KIDS)
1696 mod(cLISTOPo->op_last, type);
1700 if (o->op_flags & OPf_SPECIAL) /* do BLOCK */
1702 else if (!(o->op_flags & OPf_KIDS))
1704 if (o->op_targ != OP_LIST) {
1705 mod(cBINOPo->op_first, type);
1710 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
1715 if (type != OP_LEAVESUBLV)
1717 break; /* mod()ing was handled by ck_return() */
1720 /* [20011101.069] File test operators interpret OPf_REF to mean that
1721 their argument is a filehandle; thus \stat(".") should not set
1723 if (type == OP_REFGEN &&
1724 PL_check[o->op_type] == MEMBER_TO_FPTR(Perl_ck_ftst))
1727 if (type != OP_LEAVESUBLV)
1728 o->op_flags |= OPf_MOD;
1730 if (type == OP_AASSIGN || type == OP_SASSIGN)
1731 o->op_flags |= OPf_SPECIAL|OPf_REF;
1733 o->op_private |= OPpLVAL_INTRO;
1734 o->op_flags &= ~OPf_SPECIAL;
1735 PL_hints |= HINT_BLOCK_SCOPE;
1737 else if (type != OP_GREPSTART && type != OP_ENTERSUB
1738 && type != OP_LEAVESUBLV)
1739 o->op_flags |= OPf_REF;
1744 S_scalar_mod_type(pTHX_ OP *o, I32 type)
1748 if (o->op_type == OP_RV2GV)
1772 case OP_RIGHT_SHIFT:
1791 S_is_handle_constructor(pTHX_ OP *o, I32 argnum)
1793 switch (o->op_type) {
1801 case OP_SELECT: /* XXX c.f. SelectSaver.pm */
1814 Perl_refkids(pTHX_ OP *o, I32 type)
1817 if (o && o->op_flags & OPf_KIDS) {
1818 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
1825 Perl_ref(pTHX_ OP *o, I32 type)
1829 if (!o || PL_error_count)
1832 switch (o->op_type) {
1834 if ((type == OP_EXISTS || type == OP_DEFINED || type == OP_LOCK) &&
1835 !(o->op_flags & OPf_STACKED)) {
1836 o->op_type = OP_RV2CV; /* entersub => rv2cv */
1837 o->op_ppaddr = PL_ppaddr[OP_RV2CV];
1838 assert(cUNOPo->op_first->op_type == OP_NULL);
1839 op_null(((LISTOP*)cUNOPo->op_first)->op_first); /* disable pushmark */
1840 o->op_flags |= OPf_SPECIAL;
1845 for (kid = cUNOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
1849 if (type == OP_DEFINED)
1850 o->op_flags |= OPf_SPECIAL; /* don't create GV */
1851 ref(cUNOPo->op_first, o->op_type);
1854 if (type == OP_RV2SV || type == OP_RV2AV || type == OP_RV2HV) {
1855 o->op_private |= (type == OP_RV2AV ? OPpDEREF_AV
1856 : type == OP_RV2HV ? OPpDEREF_HV
1858 o->op_flags |= OPf_MOD;
1863 o->op_flags |= OPf_MOD; /* XXX ??? */
1868 o->op_flags |= OPf_REF;
1871 if (type == OP_DEFINED)
1872 o->op_flags |= OPf_SPECIAL; /* don't create GV */
1873 ref(cUNOPo->op_first, o->op_type);
1878 o->op_flags |= OPf_REF;
1883 if (!(o->op_flags & OPf_KIDS))
1885 ref(cBINOPo->op_first, type);
1889 ref(cBINOPo->op_first, o->op_type);
1890 if (type == OP_RV2SV || type == OP_RV2AV || type == OP_RV2HV) {
1891 o->op_private |= (type == OP_RV2AV ? OPpDEREF_AV
1892 : type == OP_RV2HV ? OPpDEREF_HV
1894 o->op_flags |= OPf_MOD;
1902 if (!(o->op_flags & OPf_KIDS))
1904 ref(cLISTOPo->op_last, type);
1914 S_dup_attrlist(pTHX_ OP *o)
1918 /* An attrlist is either a simple OP_CONST or an OP_LIST with kids,
1919 * where the first kid is OP_PUSHMARK and the remaining ones
1920 * are OP_CONST. We need to push the OP_CONST values.
1922 if (o->op_type == OP_CONST)
1923 rop = newSVOP(OP_CONST, o->op_flags, SvREFCNT_inc(cSVOPo->op_sv));
1925 assert((o->op_type == OP_LIST) && (o->op_flags & OPf_KIDS));
1926 for (o = cLISTOPo->op_first; o; o=o->op_sibling) {
1927 if (o->op_type == OP_CONST)
1928 rop = append_elem(OP_LIST, rop,
1929 newSVOP(OP_CONST, o->op_flags,
1930 SvREFCNT_inc(cSVOPo->op_sv)));
1937 S_apply_attrs(pTHX_ HV *stash, SV *target, OP *attrs, bool for_my)
1941 /* fake up C<use attributes $pkg,$rv,@attrs> */
1942 ENTER; /* need to protect against side-effects of 'use' */
1945 stashsv = newSVpv(HvNAME(stash), 0);
1947 stashsv = &PL_sv_no;
1949 #define ATTRSMODULE "attributes"
1950 #define ATTRSMODULE_PM "attributes.pm"
1954 /* Don't force the C<use> if we don't need it. */
1955 svp = hv_fetch(GvHVn(PL_incgv), ATTRSMODULE_PM,
1956 sizeof(ATTRSMODULE_PM)-1, 0);
1957 if (svp && *svp != &PL_sv_undef)
1958 ; /* already in %INC */
1960 Perl_load_module(aTHX_ PERL_LOADMOD_NOIMPORT,
1961 newSVpvn(ATTRSMODULE, sizeof(ATTRSMODULE)-1),
1965 Perl_load_module(aTHX_ PERL_LOADMOD_IMPORT_OPS,
1966 newSVpvn(ATTRSMODULE, sizeof(ATTRSMODULE)-1),
1968 prepend_elem(OP_LIST,
1969 newSVOP(OP_CONST, 0, stashsv),
1970 prepend_elem(OP_LIST,
1971 newSVOP(OP_CONST, 0,
1973 dup_attrlist(attrs))));
1979 S_apply_attrs_my(pTHX_ HV *stash, OP *target, OP *attrs, OP **imopsp)
1981 OP *pack, *imop, *arg;
1987 assert(target->op_type == OP_PADSV ||
1988 target->op_type == OP_PADHV ||
1989 target->op_type == OP_PADAV);
1991 /* Ensure that attributes.pm is loaded. */
1992 apply_attrs(stash, pad_sv(target->op_targ), attrs, TRUE);
1994 /* Need package name for method call. */
1995 pack = newSVOP(OP_CONST, 0, newSVpvn(ATTRSMODULE, sizeof(ATTRSMODULE)-1));
1997 /* Build up the real arg-list. */
1999 stashsv = newSVpv(HvNAME(stash), 0);
2001 stashsv = &PL_sv_no;
2002 arg = newOP(OP_PADSV, 0);
2003 arg->op_targ = target->op_targ;
2004 arg = prepend_elem(OP_LIST,
2005 newSVOP(OP_CONST, 0, stashsv),
2006 prepend_elem(OP_LIST,
2007 newUNOP(OP_REFGEN, 0,
2008 mod(arg, OP_REFGEN)),
2009 dup_attrlist(attrs)));
2011 /* Fake up a method call to import */
2012 meth = newSVpvn("import", 6);
2013 (void)SvUPGRADE(meth, SVt_PVIV);
2014 (void)SvIOK_on(meth);
2015 PERL_HASH(SvUVX(meth), SvPVX(meth), SvCUR(meth));
2016 imop = convert(OP_ENTERSUB, OPf_STACKED|OPf_SPECIAL|OPf_WANT_VOID,
2017 append_elem(OP_LIST,
2018 prepend_elem(OP_LIST, pack, list(arg)),
2019 newSVOP(OP_METHOD_NAMED, 0, meth)));
2020 imop->op_private |= OPpENTERSUB_NOMOD;
2022 /* Combine the ops. */
2023 *imopsp = append_elem(OP_LIST, *imopsp, imop);
2027 =notfor apidoc apply_attrs_string
2029 Attempts to apply a list of attributes specified by the C<attrstr> and
2030 C<len> arguments to the subroutine identified by the C<cv> argument which
2031 is expected to be associated with the package identified by the C<stashpv>
2032 argument (see L<attributes>). It gets this wrong, though, in that it
2033 does not correctly identify the boundaries of the individual attribute
2034 specifications within C<attrstr>. This is not really intended for the
2035 public API, but has to be listed here for systems such as AIX which
2036 need an explicit export list for symbols. (It's called from XS code
2037 in support of the C<ATTRS:> keyword from F<xsubpp>.) Patches to fix it
2038 to respect attribute syntax properly would be welcome.
2044 Perl_apply_attrs_string(pTHX_ char *stashpv, CV *cv,
2045 char *attrstr, STRLEN len)
2050 len = strlen(attrstr);
2054 for (; isSPACE(*attrstr) && len; --len, ++attrstr) ;
2056 char *sstr = attrstr;
2057 for (; !isSPACE(*attrstr) && len; --len, ++attrstr) ;
2058 attrs = append_elem(OP_LIST, attrs,
2059 newSVOP(OP_CONST, 0,
2060 newSVpvn(sstr, attrstr-sstr)));
2064 Perl_load_module(aTHX_ PERL_LOADMOD_IMPORT_OPS,
2065 newSVpvn(ATTRSMODULE, sizeof(ATTRSMODULE)-1),
2066 Nullsv, prepend_elem(OP_LIST,
2067 newSVOP(OP_CONST, 0, newSVpv(stashpv,0)),
2068 prepend_elem(OP_LIST,
2069 newSVOP(OP_CONST, 0,
2075 S_my_kid(pTHX_ OP *o, OP *attrs, OP **imopsp)
2080 if (!o || PL_error_count)
2084 if (type == OP_LIST) {
2085 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
2086 my_kid(kid, attrs, imopsp);
2087 } else if (type == OP_UNDEF) {
2089 } else if (type == OP_RV2SV || /* "our" declaration */
2091 type == OP_RV2HV) { /* XXX does this let anything illegal in? */
2092 if (cUNOPo->op_first->op_type != OP_GV) { /* MJD 20011224 */
2093 yyerror(Perl_form(aTHX_ "Can't declare %s in %s",
2094 OP_DESC(o), PL_in_my == KEY_our ? "our" : "my"));
2096 GV *gv = cGVOPx_gv(cUNOPo->op_first);
2098 PL_in_my_stash = Nullhv;
2099 apply_attrs(GvSTASH(gv),
2100 (type == OP_RV2SV ? GvSV(gv) :
2101 type == OP_RV2AV ? (SV*)GvAV(gv) :
2102 type == OP_RV2HV ? (SV*)GvHV(gv) : (SV*)gv),
2105 o->op_private |= OPpOUR_INTRO;
2108 else if (type != OP_PADSV &&
2111 type != OP_PUSHMARK)
2113 yyerror(Perl_form(aTHX_ "Can't declare %s in \"%s\"",
2115 PL_in_my == KEY_our ? "our" : "my"));
2118 else if (attrs && type != OP_PUSHMARK) {
2123 PL_in_my_stash = Nullhv;
2125 /* check for C<my Dog $spot> when deciding package */
2126 namesvp = av_fetch(PL_comppad_name, o->op_targ, FALSE);
2127 if (namesvp && *namesvp && (SvFLAGS(*namesvp) & SVpad_TYPED))
2128 stash = SvSTASH(*namesvp);
2130 stash = PL_curstash;
2131 apply_attrs_my(stash, o, attrs, imopsp);
2133 o->op_flags |= OPf_MOD;
2134 o->op_private |= OPpLVAL_INTRO;
2139 Perl_my_attrs(pTHX_ OP *o, OP *attrs)
2142 int maybe_scalar = 0;
2144 /* [perl #17376]: this appears to be premature, and results in code such as
2145 C< our(%x); > executing in list mode rather than void mode */
2147 if (o->op_flags & OPf_PARENS)
2156 o = my_kid(o, attrs, &rops);
2158 if (maybe_scalar && o->op_type == OP_PADSV) {
2159 o = scalar(append_list(OP_LIST, (LISTOP*)rops, (LISTOP*)o));
2160 o->op_private |= OPpLVAL_INTRO;
2163 o = append_list(OP_LIST, (LISTOP*)o, (LISTOP*)rops);
2166 PL_in_my_stash = Nullhv;
2171 Perl_my(pTHX_ OP *o)
2173 return my_attrs(o, Nullop);
2177 Perl_sawparens(pTHX_ OP *o)
2180 o->op_flags |= OPf_PARENS;
2185 Perl_bind_match(pTHX_ I32 type, OP *left, OP *right)
2189 if (ckWARN(WARN_MISC) &&
2190 (left->op_type == OP_RV2AV ||
2191 left->op_type == OP_RV2HV ||
2192 left->op_type == OP_PADAV ||
2193 left->op_type == OP_PADHV)) {
2194 char *desc = PL_op_desc[(right->op_type == OP_SUBST ||
2195 right->op_type == OP_TRANS)
2196 ? right->op_type : OP_MATCH];
2197 const char *sample = ((left->op_type == OP_RV2AV ||
2198 left->op_type == OP_PADAV)
2199 ? "@array" : "%hash");
2200 Perl_warner(aTHX_ packWARN(WARN_MISC),
2201 "Applying %s to %s will act on scalar(%s)",
2202 desc, sample, sample);
2205 if (right->op_type == OP_CONST &&
2206 cSVOPx(right)->op_private & OPpCONST_BARE &&
2207 cSVOPx(right)->op_private & OPpCONST_STRICT)
2209 no_bareword_allowed(right);
2212 if (!(right->op_flags & OPf_STACKED) &&
2213 (right->op_type == OP_MATCH ||
2214 right->op_type == OP_SUBST ||
2215 right->op_type == OP_TRANS)) {
2216 right->op_flags |= OPf_STACKED;
2217 if (right->op_type != OP_MATCH &&
2218 ! (right->op_type == OP_TRANS &&
2219 right->op_private & OPpTRANS_IDENTICAL))
2220 left = mod(left, right->op_type);
2221 if (right->op_type == OP_TRANS)
2222 o = newBINOP(OP_NULL, OPf_STACKED, scalar(left), right);
2224 o = prepend_elem(right->op_type, scalar(left), right);
2226 return newUNOP(OP_NOT, 0, scalar(o));
2230 return bind_match(type, left,
2231 pmruntime(newPMOP(OP_MATCH, 0), right, Nullop));
2235 Perl_invert(pTHX_ OP *o)
2239 /* XXX need to optimize away NOT NOT here? Or do we let optimizer do it? */
2240 return newUNOP(OP_NOT, OPf_SPECIAL, scalar(o));
2244 Perl_scope(pTHX_ OP *o)
2247 if (o->op_flags & OPf_PARENS || PERLDB_NOOPT || PL_tainting) {
2248 o = prepend_elem(OP_LINESEQ, newOP(OP_ENTER, 0), o);
2249 o->op_type = OP_LEAVE;
2250 o->op_ppaddr = PL_ppaddr[OP_LEAVE];
2253 if (o->op_type == OP_LINESEQ) {
2255 o->op_type = OP_SCOPE;
2256 o->op_ppaddr = PL_ppaddr[OP_SCOPE];
2257 kid = ((LISTOP*)o)->op_first;
2258 if (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE)
2262 o = newLISTOP(OP_SCOPE, 0, o, Nullop);
2269 Perl_save_hints(pTHX)
2272 SAVESPTR(GvHV(PL_hintgv));
2273 GvHV(PL_hintgv) = newHVhv(GvHV(PL_hintgv));
2274 SAVEFREESV(GvHV(PL_hintgv));
2278 Perl_block_start(pTHX_ int full)
2280 int retval = PL_savestack_ix;
2282 SAVEI32(PL_comppad_name_floor);
2283 PL_comppad_name_floor = AvFILLp(PL_comppad_name);
2285 PL_comppad_name_fill = PL_comppad_name_floor;
2286 if (PL_comppad_name_floor < 0)
2287 PL_comppad_name_floor = 0;
2288 SAVEI32(PL_min_intro_pending);
2289 SAVEI32(PL_max_intro_pending);
2290 PL_min_intro_pending = 0;
2291 SAVEI32(PL_comppad_name_fill);
2292 SAVEI32(PL_padix_floor);
2293 PL_padix_floor = PL_padix;
2294 PL_pad_reset_pending = FALSE;
2296 PL_hints &= ~HINT_BLOCK_SCOPE;
2297 SAVESPTR(PL_compiling.cop_warnings);
2298 if (! specialWARN(PL_compiling.cop_warnings)) {
2299 PL_compiling.cop_warnings = newSVsv(PL_compiling.cop_warnings) ;
2300 SAVEFREESV(PL_compiling.cop_warnings) ;
2302 SAVESPTR(PL_compiling.cop_io);
2303 if (! specialCopIO(PL_compiling.cop_io)) {
2304 PL_compiling.cop_io = newSVsv(PL_compiling.cop_io) ;
2305 SAVEFREESV(PL_compiling.cop_io) ;
2311 Perl_block_end(pTHX_ I32 floor, OP *seq)
2313 int needblockscope = PL_hints & HINT_BLOCK_SCOPE;
2314 line_t copline = PL_copline;
2315 /* there should be a nextstate in every block */
2316 OP* retval = seq ? scalarseq(seq) : newSTATEOP(0, Nullch, seq);
2317 PL_copline = copline; /* XXX newSTATEOP may reset PL_copline */
2319 PL_pad_reset_pending = FALSE;
2320 PL_compiling.op_private = (U8)(PL_hints & HINT_PRIVATE_MASK);
2322 PL_hints |= HINT_BLOCK_SCOPE; /* propagate out */
2323 pad_leavemy(PL_comppad_name_fill);
2331 #ifdef USE_5005THREADS
2332 OP *o = newOP(OP_THREADSV, 0);
2333 o->op_targ = find_threadsv("_");
2336 return newSVREF(newGVOP(OP_GV, 0, PL_defgv));
2337 #endif /* USE_5005THREADS */
2341 Perl_newPROG(pTHX_ OP *o)
2346 PL_eval_root = newUNOP(OP_LEAVEEVAL,
2347 ((PL_in_eval & EVAL_KEEPERR)
2348 ? OPf_SPECIAL : 0), o);
2349 PL_eval_start = linklist(PL_eval_root);
2350 PL_eval_root->op_private |= OPpREFCOUNTED;
2351 OpREFCNT_set(PL_eval_root, 1);
2352 PL_eval_root->op_next = 0;
2353 CALL_PEEP(PL_eval_start);
2358 PL_main_root = scope(sawparens(scalarvoid(o)));
2359 PL_curcop = &PL_compiling;
2360 PL_main_start = LINKLIST(PL_main_root);
2361 PL_main_root->op_private |= OPpREFCOUNTED;
2362 OpREFCNT_set(PL_main_root, 1);
2363 PL_main_root->op_next = 0;
2364 CALL_PEEP(PL_main_start);
2367 /* Register with debugger */
2369 CV *cv = get_cv("DB::postponed", FALSE);
2373 XPUSHs((SV*)CopFILEGV(&PL_compiling));
2375 call_sv((SV*)cv, G_DISCARD);
2382 Perl_localize(pTHX_ OP *o, I32 lex)
2384 if (o->op_flags & OPf_PARENS)
2385 /* [perl #17376]: this appears to be premature, and results in code such as
2386 C< our(%x); > executing in list mode rather than void mode */
2393 if (ckWARN(WARN_PARENTHESIS)
2394 && PL_bufptr > PL_oldbufptr && PL_bufptr[-1] == ',')
2396 char *s = PL_bufptr;
2398 while (*s && (isALNUM(*s) || UTF8_IS_CONTINUED(*s) || strchr("@$%, ", *s)))
2401 if (*s == ';' || *s == '=')
2402 Perl_warner(aTHX_ packWARN(WARN_PARENTHESIS),
2403 "Parentheses missing around \"%s\" list",
2404 lex ? (PL_in_my == KEY_our ? "our" : "my") : "local");
2410 o = mod(o, OP_NULL); /* a bit kludgey */
2412 PL_in_my_stash = Nullhv;
2417 Perl_jmaybe(pTHX_ OP *o)
2419 if (o->op_type == OP_LIST) {
2421 #ifdef USE_5005THREADS
2422 o2 = newOP(OP_THREADSV, 0);
2423 o2->op_targ = find_threadsv(";");
2425 o2 = newSVREF(newGVOP(OP_GV, 0, gv_fetchpv(";", TRUE, SVt_PV))),
2426 #endif /* USE_5005THREADS */
2427 o = convert(OP_JOIN, 0, prepend_elem(OP_LIST, o2, o));
2433 Perl_fold_constants(pTHX_ register OP *o)
2436 I32 type = o->op_type;
2439 if (PL_opargs[type] & OA_RETSCALAR)
2441 if (PL_opargs[type] & OA_TARGET && !o->op_targ)
2442 o->op_targ = pad_alloc(type, SVs_PADTMP);
2444 /* integerize op, unless it happens to be C<-foo>.
2445 * XXX should pp_i_negate() do magic string negation instead? */
2446 if ((PL_opargs[type] & OA_OTHERINT) && (PL_hints & HINT_INTEGER)
2447 && !(type == OP_NEGATE && cUNOPo->op_first->op_type == OP_CONST
2448 && (cUNOPo->op_first->op_private & OPpCONST_BARE)))
2450 o->op_ppaddr = PL_ppaddr[type = ++(o->op_type)];
2453 if (!(PL_opargs[type] & OA_FOLDCONST))
2458 /* XXX might want a ck_negate() for this */
2459 cUNOPo->op_first->op_private &= ~OPpCONST_STRICT;
2471 /* XXX what about the numeric ops? */
2472 if (PL_hints & HINT_LOCALE)
2477 goto nope; /* Don't try to run w/ errors */
2479 for (curop = LINKLIST(o); curop != o; curop = LINKLIST(curop)) {
2480 if ((curop->op_type != OP_CONST ||
2481 (curop->op_private & OPpCONST_BARE)) &&
2482 curop->op_type != OP_LIST &&
2483 curop->op_type != OP_SCALAR &&
2484 curop->op_type != OP_NULL &&
2485 curop->op_type != OP_PUSHMARK)
2491 curop = LINKLIST(o);
2495 sv = *(PL_stack_sp--);
2496 if (o->op_targ && sv == PAD_SV(o->op_targ)) /* grab pad temp? */
2497 pad_swipe(o->op_targ);
2498 else if (SvTEMP(sv)) { /* grab mortal temp? */
2499 (void)SvREFCNT_inc(sv);
2503 if (type == OP_RV2GV)
2504 return newGVOP(OP_GV, 0, (GV*)sv);
2506 /* try to smush double to int, but don't smush -2.0 to -2 */
2507 if ((SvFLAGS(sv) & (SVf_IOK|SVf_NOK|SVf_POK)) == SVf_NOK &&
2510 #ifdef PERL_PRESERVE_IVUV
2511 /* Only bother to attempt to fold to IV if
2512 most operators will benefit */
2516 return newSVOP(OP_CONST, 0, sv);
2524 Perl_gen_constant_list(pTHX_ register OP *o)
2527 I32 oldtmps_floor = PL_tmps_floor;
2531 return o; /* Don't attempt to run with errors */
2533 PL_op = curop = LINKLIST(o);
2540 PL_tmps_floor = oldtmps_floor;
2542 o->op_type = OP_RV2AV;
2543 o->op_ppaddr = PL_ppaddr[OP_RV2AV];
2544 o->op_seq = 0; /* needs to be revisited in peep() */
2545 curop = ((UNOP*)o)->op_first;
2546 ((UNOP*)o)->op_first = newSVOP(OP_CONST, 0, SvREFCNT_inc(*PL_stack_sp--));
2553 Perl_convert(pTHX_ I32 type, I32 flags, OP *o)
2555 if (!o || o->op_type != OP_LIST)
2556 o = newLISTOP(OP_LIST, 0, o, Nullop);
2558 o->op_flags &= ~OPf_WANT;
2560 if (!(PL_opargs[type] & OA_MARK))
2561 op_null(cLISTOPo->op_first);
2563 o->op_type = (OPCODE)type;
2564 o->op_ppaddr = PL_ppaddr[type];
2565 o->op_flags |= flags;
2567 o = CHECKOP(type, o);
2568 if (o->op_type != type)
2571 return fold_constants(o);
2574 /* List constructors */
2577 Perl_append_elem(pTHX_ I32 type, OP *first, OP *last)
2585 if (first->op_type != type
2586 || (type == OP_LIST && (first->op_flags & OPf_PARENS)))
2588 return newLISTOP(type, 0, first, last);
2591 if (first->op_flags & OPf_KIDS)
2592 ((LISTOP*)first)->op_last->op_sibling = last;
2594 first->op_flags |= OPf_KIDS;
2595 ((LISTOP*)first)->op_first = last;
2597 ((LISTOP*)first)->op_last = last;
2602 Perl_append_list(pTHX_ I32 type, LISTOP *first, LISTOP *last)
2610 if (first->op_type != type)
2611 return prepend_elem(type, (OP*)first, (OP*)last);
2613 if (last->op_type != type)
2614 return append_elem(type, (OP*)first, (OP*)last);
2616 first->op_last->op_sibling = last->op_first;
2617 first->op_last = last->op_last;
2618 first->op_flags |= (last->op_flags & OPf_KIDS);
2626 Perl_prepend_elem(pTHX_ I32 type, OP *first, OP *last)
2634 if (last->op_type == type) {
2635 if (type == OP_LIST) { /* already a PUSHMARK there */
2636 first->op_sibling = ((LISTOP*)last)->op_first->op_sibling;
2637 ((LISTOP*)last)->op_first->op_sibling = first;
2638 if (!(first->op_flags & OPf_PARENS))
2639 last->op_flags &= ~OPf_PARENS;
2642 if (!(last->op_flags & OPf_KIDS)) {
2643 ((LISTOP*)last)->op_last = first;
2644 last->op_flags |= OPf_KIDS;
2646 first->op_sibling = ((LISTOP*)last)->op_first;
2647 ((LISTOP*)last)->op_first = first;
2649 last->op_flags |= OPf_KIDS;
2653 return newLISTOP(type, 0, first, last);
2659 Perl_newNULLLIST(pTHX)
2661 return newOP(OP_STUB, 0);
2665 Perl_force_list(pTHX_ OP *o)
2667 if (!o || o->op_type != OP_LIST)
2668 o = newLISTOP(OP_LIST, 0, o, Nullop);
2674 Perl_newLISTOP(pTHX_ I32 type, I32 flags, OP *first, OP *last)
2678 NewOp(1101, listop, 1, LISTOP);
2680 listop->op_type = (OPCODE)type;
2681 listop->op_ppaddr = PL_ppaddr[type];
2684 listop->op_flags = (U8)flags;
2688 else if (!first && last)
2691 first->op_sibling = last;
2692 listop->op_first = first;
2693 listop->op_last = last;
2694 if (type == OP_LIST) {
2696 pushop = newOP(OP_PUSHMARK, 0);
2697 pushop->op_sibling = first;
2698 listop->op_first = pushop;
2699 listop->op_flags |= OPf_KIDS;
2701 listop->op_last = pushop;
2708 Perl_newOP(pTHX_ I32 type, I32 flags)
2711 NewOp(1101, o, 1, OP);
2712 o->op_type = (OPCODE)type;
2713 o->op_ppaddr = PL_ppaddr[type];
2714 o->op_flags = (U8)flags;
2717 o->op_private = (U8)(0 | (flags >> 8));
2718 if (PL_opargs[type] & OA_RETSCALAR)
2720 if (PL_opargs[type] & OA_TARGET)
2721 o->op_targ = pad_alloc(type, SVs_PADTMP);
2722 return CHECKOP(type, o);
2726 Perl_newUNOP(pTHX_ I32 type, I32 flags, OP *first)
2731 first = newOP(OP_STUB, 0);
2732 if (PL_opargs[type] & OA_MARK)
2733 first = force_list(first);
2735 NewOp(1101, unop, 1, UNOP);
2736 unop->op_type = (OPCODE)type;
2737 unop->op_ppaddr = PL_ppaddr[type];
2738 unop->op_first = first;
2739 unop->op_flags = flags | OPf_KIDS;
2740 unop->op_private = (U8)(1 | (flags >> 8));
2741 unop = (UNOP*) CHECKOP(type, unop);
2745 return fold_constants((OP *) unop);
2749 Perl_newBINOP(pTHX_ I32 type, I32 flags, OP *first, OP *last)
2752 NewOp(1101, binop, 1, BINOP);
2755 first = newOP(OP_NULL, 0);
2757 binop->op_type = (OPCODE)type;
2758 binop->op_ppaddr = PL_ppaddr[type];
2759 binop->op_first = first;
2760 binop->op_flags = flags | OPf_KIDS;
2763 binop->op_private = (U8)(1 | (flags >> 8));
2766 binop->op_private = (U8)(2 | (flags >> 8));
2767 first->op_sibling = last;
2770 binop = (BINOP*)CHECKOP(type, binop);
2771 if (binop->op_next || binop->op_type != (OPCODE)type)
2774 binop->op_last = binop->op_first->op_sibling;
2776 return fold_constants((OP *)binop);
2780 uvcompare(const void *a, const void *b)
2782 if (*((UV *)a) < (*(UV *)b))
2784 if (*((UV *)a) > (*(UV *)b))
2786 if (*((UV *)a+1) < (*(UV *)b+1))
2788 if (*((UV *)a+1) > (*(UV *)b+1))
2794 Perl_pmtrans(pTHX_ OP *o, OP *expr, OP *repl)
2796 SV *tstr = ((SVOP*)expr)->op_sv;
2797 SV *rstr = ((SVOP*)repl)->op_sv;
2800 U8 *t = (U8*)SvPV(tstr, tlen);
2801 U8 *r = (U8*)SvPV(rstr, rlen);
2808 register short *tbl;
2810 PL_hints |= HINT_BLOCK_SCOPE;
2811 complement = o->op_private & OPpTRANS_COMPLEMENT;
2812 del = o->op_private & OPpTRANS_DELETE;
2813 squash = o->op_private & OPpTRANS_SQUASH;
2816 o->op_private |= OPpTRANS_FROM_UTF;
2819 o->op_private |= OPpTRANS_TO_UTF;
2821 if (o->op_private & (OPpTRANS_FROM_UTF|OPpTRANS_TO_UTF)) {
2822 SV* listsv = newSVpvn("# comment\n",10);
2824 U8* tend = t + tlen;
2825 U8* rend = r + rlen;
2839 I32 from_utf = o->op_private & OPpTRANS_FROM_UTF;
2840 I32 to_utf = o->op_private & OPpTRANS_TO_UTF;
2846 tsave = t = bytes_to_utf8(t, &len);
2849 if (!to_utf && rlen) {
2851 rsave = r = bytes_to_utf8(r, &len);
2855 /* There are several snags with this code on EBCDIC:
2856 1. 0xFF is a legal UTF-EBCDIC byte (there are no illegal bytes).
2857 2. scan_const() in toke.c has encoded chars in native encoding which makes
2858 ranges at least in EBCDIC 0..255 range the bottom odd.
2862 U8 tmpbuf[UTF8_MAXLEN+1];
2865 New(1109, cp, 2*tlen, UV);
2867 transv = newSVpvn("",0);
2869 cp[2*i] = utf8n_to_uvuni(t, tend-t, &ulen, 0);
2871 if (t < tend && NATIVE_TO_UTF(*t) == 0xff) {
2873 cp[2*i+1] = utf8n_to_uvuni(t, tend-t, &ulen, 0);
2877 cp[2*i+1] = cp[2*i];
2881 qsort(cp, i, 2*sizeof(UV), uvcompare);
2882 for (j = 0; j < i; j++) {
2884 diff = val - nextmin;
2886 t = uvuni_to_utf8(tmpbuf,nextmin);
2887 sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf);
2889 U8 range_mark = UTF_TO_NATIVE(0xff);
2890 t = uvuni_to_utf8(tmpbuf, val - 1);
2891 sv_catpvn(transv, (char *)&range_mark, 1);
2892 sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf);
2899 t = uvuni_to_utf8(tmpbuf,nextmin);
2900 sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf);
2902 U8 range_mark = UTF_TO_NATIVE(0xff);
2903 sv_catpvn(transv, (char *)&range_mark, 1);
2905 t = uvuni_to_utf8_flags(tmpbuf, 0x7fffffff,
2906 UNICODE_ALLOW_SUPER);
2907 sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf);
2908 t = (U8*)SvPVX(transv);
2909 tlen = SvCUR(transv);
2913 else if (!rlen && !del) {
2914 r = t; rlen = tlen; rend = tend;
2917 if ((!rlen && !del) || t == r ||
2918 (tlen == rlen && memEQ((char *)t, (char *)r, tlen)))
2920 o->op_private |= OPpTRANS_IDENTICAL;
2924 while (t < tend || tfirst <= tlast) {
2925 /* see if we need more "t" chars */
2926 if (tfirst > tlast) {
2927 tfirst = (I32)utf8n_to_uvuni(t, tend - t, &ulen, 0);
2929 if (t < tend && NATIVE_TO_UTF(*t) == 0xff) { /* illegal utf8 val indicates range */
2931 tlast = (I32)utf8n_to_uvuni(t, tend - t, &ulen, 0);
2938 /* now see if we need more "r" chars */
2939 if (rfirst > rlast) {
2941 rfirst = (I32)utf8n_to_uvuni(r, rend - r, &ulen, 0);
2943 if (r < rend && NATIVE_TO_UTF(*r) == 0xff) { /* illegal utf8 val indicates range */
2945 rlast = (I32)utf8n_to_uvuni(r, rend - r, &ulen, 0);
2954 rfirst = rlast = 0xffffffff;
2958 /* now see which range will peter our first, if either. */
2959 tdiff = tlast - tfirst;
2960 rdiff = rlast - rfirst;
2967 if (rfirst == 0xffffffff) {
2968 diff = tdiff; /* oops, pretend rdiff is infinite */
2970 Perl_sv_catpvf(aTHX_ listsv, "%04lx\t%04lx\tXXXX\n",
2971 (long)tfirst, (long)tlast);
2973 Perl_sv_catpvf(aTHX_ listsv, "%04lx\t\tXXXX\n", (long)tfirst);
2977 Perl_sv_catpvf(aTHX_ listsv, "%04lx\t%04lx\t%04lx\n",
2978 (long)tfirst, (long)(tfirst + diff),
2981 Perl_sv_catpvf(aTHX_ listsv, "%04lx\t\t%04lx\n",
2982 (long)tfirst, (long)rfirst);
2984 if (rfirst + diff > max)
2985 max = rfirst + diff;
2987 grows = (tfirst < rfirst &&
2988 UNISKIP(tfirst) < UNISKIP(rfirst + diff));
3000 else if (max > 0xff)
3005 Safefree(cPVOPo->op_pv);
3006 cSVOPo->op_sv = (SV*)swash_init("utf8", "", listsv, bits, none);
3007 SvREFCNT_dec(listsv);
3009 SvREFCNT_dec(transv);
3011 if (!del && havefinal && rlen)
3012 (void)hv_store((HV*)SvRV((cSVOPo->op_sv)), "FINAL", 5,
3013 newSVuv((UV)final), 0);
3016 o->op_private |= OPpTRANS_GROWS;
3028 tbl = (short*)cPVOPo->op_pv;
3030 Zero(tbl, 256, short);
3031 for (i = 0; i < (I32)tlen; i++)
3033 for (i = 0, j = 0; i < 256; i++) {
3035 if (j >= (I32)rlen) {
3044 if (i < 128 && r[j] >= 128)
3054 o->op_private |= OPpTRANS_IDENTICAL;
3056 else if (j >= (I32)rlen)
3059 cPVOPo->op_pv = (char*)Renew(tbl, 0x101+rlen-j, short);
3060 tbl[0x100] = rlen - j;
3061 for (i=0; i < (I32)rlen - j; i++)
3062 tbl[0x101+i] = r[j+i];
3066 if (!rlen && !del) {
3069 o->op_private |= OPpTRANS_IDENTICAL;
3071 else if (!squash && rlen == tlen && memEQ((char*)t, (char*)r, tlen)) {
3072 o->op_private |= OPpTRANS_IDENTICAL;
3074 for (i = 0; i < 256; i++)
3076 for (i = 0, j = 0; i < (I32)tlen; i++,j++) {
3077 if (j >= (I32)rlen) {
3079 if (tbl[t[i]] == -1)
3085 if (tbl[t[i]] == -1) {
3086 if (t[i] < 128 && r[j] >= 128)
3093 o->op_private |= OPpTRANS_GROWS;
3101 Perl_newPMOP(pTHX_ I32 type, I32 flags)
3105 NewOp(1101, pmop, 1, PMOP);
3106 pmop->op_type = (OPCODE)type;
3107 pmop->op_ppaddr = PL_ppaddr[type];
3108 pmop->op_flags = (U8)flags;
3109 pmop->op_private = (U8)(0 | (flags >> 8));
3111 if (PL_hints & HINT_RE_TAINT)
3112 pmop->op_pmpermflags |= PMf_RETAINT;
3113 if (PL_hints & HINT_LOCALE)
3114 pmop->op_pmpermflags |= PMf_LOCALE;
3115 pmop->op_pmflags = pmop->op_pmpermflags;
3120 if(av_len((AV*) PL_regex_pad[0]) > -1) {
3121 repointer = av_pop((AV*)PL_regex_pad[0]);
3122 pmop->op_pmoffset = SvIV(repointer);
3123 SvREPADTMP_off(repointer);
3124 sv_setiv(repointer,0);
3126 repointer = newSViv(0);
3127 av_push(PL_regex_padav,SvREFCNT_inc(repointer));
3128 pmop->op_pmoffset = av_len(PL_regex_padav);
3129 PL_regex_pad = AvARRAY(PL_regex_padav);
3134 /* link into pm list */
3135 if (type != OP_TRANS && PL_curstash) {
3136 pmop->op_pmnext = HvPMROOT(PL_curstash);
3137 HvPMROOT(PL_curstash) = pmop;
3138 PmopSTASH_set(pmop,PL_curstash);
3145 Perl_pmruntime(pTHX_ OP *o, OP *expr, OP *repl)
3149 I32 repl_has_vars = 0;
3151 if (o->op_type == OP_TRANS)
3152 return pmtrans(o, expr, repl);
3154 PL_hints |= HINT_BLOCK_SCOPE;
3157 if (expr->op_type == OP_CONST) {
3159 SV *pat = ((SVOP*)expr)->op_sv;
3160 char *p = SvPV(pat, plen);
3161 if ((o->op_flags & OPf_SPECIAL) && strEQ(p, " ")) {
3162 sv_setpvn(pat, "\\s+", 3);
3163 p = SvPV(pat, plen);
3164 pm->op_pmflags |= PMf_SKIPWHITE;
3167 pm->op_pmdynflags |= PMdf_UTF8;
3168 PM_SETRE(pm, CALLREGCOMP(aTHX_ p, p + plen, pm));
3169 if (strEQ("\\s+", PM_GETRE(pm)->precomp))
3170 pm->op_pmflags |= PMf_WHITE;
3174 if (pm->op_pmflags & PMf_KEEP || !(PL_hints & HINT_RE_EVAL))
3175 expr = newUNOP((!(PL_hints & HINT_RE_EVAL)
3177 : OP_REGCMAYBE),0,expr);
3179 NewOp(1101, rcop, 1, LOGOP);
3180 rcop->op_type = OP_REGCOMP;
3181 rcop->op_ppaddr = PL_ppaddr[OP_REGCOMP];
3182 rcop->op_first = scalar(expr);
3183 rcop->op_flags |= ((PL_hints & HINT_RE_EVAL)
3184 ? (OPf_SPECIAL | OPf_KIDS)
3186 rcop->op_private = 1;
3189 /* establish postfix order */
3190 if (pm->op_pmflags & PMf_KEEP || !(PL_hints & HINT_RE_EVAL)) {
3192 rcop->op_next = expr;
3193 ((UNOP*)expr)->op_first->op_next = (OP*)rcop;
3196 rcop->op_next = LINKLIST(expr);
3197 expr->op_next = (OP*)rcop;
3200 prepend_elem(o->op_type, scalar((OP*)rcop), o);
3205 if (pm->op_pmflags & PMf_EVAL) {
3207 if (CopLINE(PL_curcop) < PL_multi_end)
3208 CopLINE_set(PL_curcop, (line_t)PL_multi_end);
3210 #ifdef USE_5005THREADS
3211 else if (repl->op_type == OP_THREADSV
3212 && strchr("&`'123456789+",
3213 PL_threadsv_names[repl->op_targ]))
3217 #endif /* USE_5005THREADS */
3218 else if (repl->op_type == OP_CONST)
3222 for (curop = LINKLIST(repl); curop!=repl; curop = LINKLIST(curop)) {
3223 if (PL_opargs[curop->op_type] & OA_DANGEROUS) {
3224 #ifdef USE_5005THREADS
3225 if (curop->op_type == OP_THREADSV) {
3227 if (strchr("&`'123456789+", curop->op_private))
3231 if (curop->op_type == OP_GV) {
3232 GV *gv = cGVOPx_gv(curop);
3234 if (strchr("&`'123456789+", *GvENAME(gv)))
3237 #endif /* USE_5005THREADS */
3238 else if (curop->op_type == OP_RV2CV)
3240 else if (curop->op_type == OP_RV2SV ||
3241 curop->op_type == OP_RV2AV ||
3242 curop->op_type == OP_RV2HV ||
3243 curop->op_type == OP_RV2GV) {
3244 if (lastop && lastop->op_type != OP_GV) /*funny deref?*/
3247 else if (curop->op_type == OP_PADSV ||
3248 curop->op_type == OP_PADAV ||
3249 curop->op_type == OP_PADHV ||
3250 curop->op_type == OP_PADANY) {
3253 else if (curop->op_type == OP_PUSHRE)
3254 ; /* Okay here, dangerous in newASSIGNOP */
3264 || PM_GETRE(pm)->reganch & ROPT_EVAL_SEEN))) {
3265 pm->op_pmflags |= PMf_CONST; /* const for long enough */
3266 pm->op_pmpermflags |= PMf_CONST; /* const for long enough */
3267 prepend_elem(o->op_type, scalar(repl), o);
3270 if (curop == repl && !PM_GETRE(pm)) { /* Has variables. */
3271 pm->op_pmflags |= PMf_MAYBE_CONST;
3272 pm->op_pmpermflags |= PMf_MAYBE_CONST;
3274 NewOp(1101, rcop, 1, LOGOP);
3275 rcop->op_type = OP_SUBSTCONT;
3276 rcop->op_ppaddr = PL_ppaddr[OP_SUBSTCONT];
3277 rcop->op_first = scalar(repl);
3278 rcop->op_flags |= OPf_KIDS;
3279 rcop->op_private = 1;
3282 /* establish postfix order */
3283 rcop->op_next = LINKLIST(repl);
3284 repl->op_next = (OP*)rcop;
3286 pm->op_pmreplroot = scalar((OP*)rcop);
3287 pm->op_pmreplstart = LINKLIST(rcop);
3296 Perl_newSVOP(pTHX_ I32 type, I32 flags, SV *sv)
3299 NewOp(1101, svop, 1, SVOP);
3300 svop->op_type = (OPCODE)type;
3301 svop->op_ppaddr = PL_ppaddr[type];
3303 svop->op_next = (OP*)svop;
3304 svop->op_flags = (U8)flags;
3305 if (PL_opargs[type] & OA_RETSCALAR)
3307 if (PL_opargs[type] & OA_TARGET)
3308 svop->op_targ = pad_alloc(type, SVs_PADTMP);
3309 return CHECKOP(type, svop);
3313 Perl_newPADOP(pTHX_ I32 type, I32 flags, SV *sv)
3316 NewOp(1101, padop, 1, PADOP);
3317 padop->op_type = (OPCODE)type;
3318 padop->op_ppaddr = PL_ppaddr[type];
3319 padop->op_padix = pad_alloc(type, SVs_PADTMP);
3320 SvREFCNT_dec(PL_curpad[padop->op_padix]);
3321 PL_curpad[padop->op_padix] = sv;
3324 padop->op_next = (OP*)padop;
3325 padop->op_flags = (U8)flags;
3326 if (PL_opargs[type] & OA_RETSCALAR)
3328 if (PL_opargs[type] & OA_TARGET)
3329 padop->op_targ = pad_alloc(type, SVs_PADTMP);
3330 return CHECKOP(type, padop);
3334 Perl_newGVOP(pTHX_ I32 type, I32 flags, GV *gv)
3339 return newPADOP(type, flags, SvREFCNT_inc(gv));
3341 return newSVOP(type, flags, SvREFCNT_inc(gv));
3346 Perl_newPVOP(pTHX_ I32 type, I32 flags, char *pv)
3349 NewOp(1101, pvop, 1, PVOP);
3350 pvop->op_type = (OPCODE)type;
3351 pvop->op_ppaddr = PL_ppaddr[type];
3353 pvop->op_next = (OP*)pvop;
3354 pvop->op_flags = (U8)flags;
3355 if (PL_opargs[type] & OA_RETSCALAR)
3357 if (PL_opargs[type] & OA_TARGET)
3358 pvop->op_targ = pad_alloc(type, SVs_PADTMP);
3359 return CHECKOP(type, pvop);
3363 Perl_package(pTHX_ OP *o)
3367 save_hptr(&PL_curstash);
3368 save_item(PL_curstname);
3373 name = SvPV(sv, len);
3374 PL_curstash = gv_stashpvn(name,len,TRUE);
3375 sv_setpvn(PL_curstname, name, len);
3379 deprecate("\"package\" with no arguments");
3380 sv_setpv(PL_curstname,"<none>");
3381 PL_curstash = Nullhv;
3383 PL_hints |= HINT_BLOCK_SCOPE;
3384 PL_copline = NOLINE;
3389 Perl_utilize(pTHX_ int aver, I32 floor, OP *version, OP *id, OP *arg)
3395 if (id->op_type != OP_CONST)
3396 Perl_croak(aTHX_ "Module name must be constant");
3400 if (version != Nullop) {
3401 SV *vesv = ((SVOP*)version)->op_sv;
3403 if (arg == Nullop && !SvNIOKp(vesv)) {
3410 if (version->op_type != OP_CONST || !SvNIOKp(vesv))
3411 Perl_croak(aTHX_ "Version number must be constant number");
3413 /* Make copy of id so we don't free it twice */
3414 pack = newSVOP(OP_CONST, 0, newSVsv(((SVOP*)id)->op_sv));
3416 /* Fake up a method call to VERSION */
3417 meth = newSVpvn("VERSION",7);
3418 sv_upgrade(meth, SVt_PVIV);
3419 (void)SvIOK_on(meth);
3420 PERL_HASH(SvUVX(meth), SvPVX(meth), SvCUR(meth));
3421 veop = convert(OP_ENTERSUB, OPf_STACKED|OPf_SPECIAL,
3422 append_elem(OP_LIST,
3423 prepend_elem(OP_LIST, pack, list(version)),
3424 newSVOP(OP_METHOD_NAMED, 0, meth)));
3428 /* Fake up an import/unimport */
3429 if (arg && arg->op_type == OP_STUB)
3430 imop = arg; /* no import on explicit () */
3431 else if (SvNIOKp(((SVOP*)id)->op_sv)) {
3432 imop = Nullop; /* use 5.0; */
3437 /* Make copy of id so we don't free it twice */
3438 pack = newSVOP(OP_CONST, 0, newSVsv(((SVOP*)id)->op_sv));
3440 /* Fake up a method call to import/unimport */
3441 meth = aver ? newSVpvn("import",6) : newSVpvn("unimport", 8);
3442 (void)SvUPGRADE(meth, SVt_PVIV);
3443 (void)SvIOK_on(meth);
3444 PERL_HASH(SvUVX(meth), SvPVX(meth), SvCUR(meth));
3445 imop = convert(OP_ENTERSUB, OPf_STACKED|OPf_SPECIAL,
3446 append_elem(OP_LIST,
3447 prepend_elem(OP_LIST, pack, list(arg)),
3448 newSVOP(OP_METHOD_NAMED, 0, meth)));
3451 /* Fake up the BEGIN {}, which does its thing immediately. */
3453 newSVOP(OP_CONST, 0, newSVpvn("BEGIN", 5)),
3456 append_elem(OP_LINESEQ,
3457 append_elem(OP_LINESEQ,
3458 newSTATEOP(0, Nullch, newUNOP(OP_REQUIRE, 0, id)),
3459 newSTATEOP(0, Nullch, veop)),
3460 newSTATEOP(0, Nullch, imop) ));
3462 /* The "did you use incorrect case?" warning used to be here.
3463 * The problem is that on case-insensitive filesystems one
3464 * might get false positives for "use" (and "require"):
3465 * "use Strict" or "require CARP" will work. This causes
3466 * portability problems for the script: in case-strict
3467 * filesystems the script will stop working.
3469 * The "incorrect case" warning checked whether "use Foo"
3470 * imported "Foo" to your namespace, but that is wrong, too:
3471 * there is no requirement nor promise in the language that
3472 * a Foo.pm should or would contain anything in package "Foo".
3474 * There is very little Configure-wise that can be done, either:
3475 * the case-sensitivity of the build filesystem of Perl does not
3476 * help in guessing the case-sensitivity of the runtime environment.
3479 PL_hints |= HINT_BLOCK_SCOPE;
3480 PL_copline = NOLINE;
3485 =head1 Embedding Functions
3487 =for apidoc load_module
3489 Loads the module whose name is pointed to by the string part of name.
3490 Note that the actual module name, not its filename, should be given.
3491 Eg, "Foo::Bar" instead of "Foo/Bar.pm". flags can be any of
3492 PERL_LOADMOD_DENY, PERL_LOADMOD_NOIMPORT, or PERL_LOADMOD_IMPORT_OPS
3493 (or 0 for no flags). ver, if specified, provides version semantics
3494 similar to C<use Foo::Bar VERSION>. The optional trailing SV*
3495 arguments can be used to specify arguments to the module's import()
3496 method, similar to C<use Foo::Bar VERSION LIST>.
3501 Perl_load_module(pTHX_ U32 flags, SV *name, SV *ver, ...)
3504 va_start(args, ver);
3505 vload_module(flags, name, ver, &args);
3509 #ifdef PERL_IMPLICIT_CONTEXT
3511 Perl_load_module_nocontext(U32 flags, SV *name, SV *ver, ...)
3515 va_start(args, ver);
3516 vload_module(flags, name, ver, &args);
3522 Perl_vload_module(pTHX_ U32 flags, SV *name, SV *ver, va_list *args)
3524 OP *modname, *veop, *imop;
3526 modname = newSVOP(OP_CONST, 0, name);
3527 modname->op_private |= OPpCONST_BARE;
3529 veop = newSVOP(OP_CONST, 0, ver);
3533 if (flags & PERL_LOADMOD_NOIMPORT) {
3534 imop = sawparens(newNULLLIST());
3536 else if (flags & PERL_LOADMOD_IMPORT_OPS) {
3537 imop = va_arg(*args, OP*);
3542 sv = va_arg(*args, SV*);
3544 imop = append_elem(OP_LIST, imop, newSVOP(OP_CONST, 0, sv));
3545 sv = va_arg(*args, SV*);
3549 line_t ocopline = PL_copline;
3550 int oexpect = PL_expect;
3552 utilize(!(flags & PERL_LOADMOD_DENY), start_subparse(FALSE, 0),
3553 veop, modname, imop);
3554 PL_expect = oexpect;
3555 PL_copline = ocopline;
3560 Perl_dofile(pTHX_ OP *term)
3565 gv = gv_fetchpv("do", FALSE, SVt_PVCV);
3566 if (!(gv && GvCVu(gv) && GvIMPORTED_CV(gv)))
3567 gv = gv_fetchpv("CORE::GLOBAL::do", FALSE, SVt_PVCV);
3569 if (gv && GvCVu(gv) && GvIMPORTED_CV(gv)) {
3570 doop = ck_subr(newUNOP(OP_ENTERSUB, OPf_STACKED,
3571 append_elem(OP_LIST, term,
3572 scalar(newUNOP(OP_RV2CV, 0,
3577 doop = newUNOP(OP_DOFILE, 0, scalar(term));
3583 Perl_newSLICEOP(pTHX_ I32 flags, OP *subscript, OP *listval)
3585 return newBINOP(OP_LSLICE, flags,
3586 list(force_list(subscript)),
3587 list(force_list(listval)) );
3591 S_list_assignment(pTHX_ register OP *o)
3596 if (o->op_type == OP_NULL && o->op_flags & OPf_KIDS)
3597 o = cUNOPo->op_first;
3599 if (o->op_type == OP_COND_EXPR) {
3600 I32 t = list_assignment(cLOGOPo->op_first->op_sibling);
3601 I32 f = list_assignment(cLOGOPo->op_first->op_sibling->op_sibling);
3606 yyerror("Assignment to both a list and a scalar");
3610 if (o->op_type == OP_LIST &&
3611 (o->op_flags & OPf_WANT) == OPf_WANT_SCALAR &&
3612 o->op_private & OPpLVAL_INTRO)
3615 if (o->op_type == OP_LIST || o->op_flags & OPf_PARENS ||
3616 o->op_type == OP_RV2AV || o->op_type == OP_RV2HV ||
3617 o->op_type == OP_ASLICE || o->op_type == OP_HSLICE)
3620 if (o->op_type == OP_PADAV || o->op_type == OP_PADHV)
3623 if (o->op_type == OP_RV2SV)
3630 Perl_newASSIGNOP(pTHX_ I32 flags, OP *left, I32 optype, OP *right)
3635 if (optype == OP_ANDASSIGN || optype == OP_ORASSIGN) {
3636 return newLOGOP(optype, 0,
3637 mod(scalar(left), optype),
3638 newUNOP(OP_SASSIGN, 0, scalar(right)));
3641 return newBINOP(optype, OPf_STACKED,
3642 mod(scalar(left), optype), scalar(right));
3646 if (list_assignment(left)) {
3650 PL_eval_start = right; /* Grandfathering $[ assignment here. Bletch.*/
3651 left = mod(left, OP_AASSIGN);
3659 curop = list(force_list(left));
3660 o = newBINOP(OP_AASSIGN, flags, list(force_list(right)), curop);
3661 o->op_private = (U8)(0 | (flags >> 8));
3662 for (curop = ((LISTOP*)curop)->op_first;
3663 curop; curop = curop->op_sibling)
3665 if (curop->op_type == OP_RV2HV &&
3666 ((UNOP*)curop)->op_first->op_type != OP_GV) {
3667 o->op_private |= OPpASSIGN_HASH;
3671 if (!(left->op_private & OPpLVAL_INTRO)) {
3674 for (curop = LINKLIST(o); curop != o; curop = LINKLIST(curop)) {
3675 if (PL_opargs[curop->op_type] & OA_DANGEROUS) {
3676 if (curop->op_type == OP_GV) {
3677 GV *gv = cGVOPx_gv(curop);
3678 if (gv == PL_defgv || (int)SvCUR(gv) == PL_generation)
3680 SvCUR(gv) = PL_generation;
3682 else if (curop->op_type == OP_PADSV ||
3683 curop->op_type == OP_PADAV ||
3684 curop->op_type == OP_PADHV ||
3685 curop->op_type == OP_PADANY) {
3686 SV **svp = AvARRAY(PL_comppad_name);
3687 SV *sv = svp[curop->op_targ];
3688 if ((int)SvCUR(sv) == PL_generation)
3690 SvCUR(sv) = PL_generation; /* (SvCUR not used any more) */
3692 else if (curop->op_type == OP_RV2CV)
3694 else if (curop->op_type == OP_RV2SV ||
3695 curop->op_type == OP_RV2AV ||
3696 curop->op_type == OP_RV2HV ||
3697 curop->op_type == OP_RV2GV) {
3698 if (lastop->op_type != OP_GV) /* funny deref? */
3701 else if (curop->op_type == OP_PUSHRE) {
3702 if (((PMOP*)curop)->op_pmreplroot) {
3704 GV *gv = (GV*)PL_curpad[INT2PTR(PADOFFSET,((PMOP*)curop)->op_pmreplroot)];
3706 GV *gv = (GV*)((PMOP*)curop)->op_pmreplroot;
3708 if (gv == PL_defgv || (int)SvCUR(gv) == PL_generation)
3710 SvCUR(gv) = PL_generation;
3719 o->op_private |= OPpASSIGN_COMMON;
3721 if (right && right->op_type == OP_SPLIT) {
3723 if ((tmpop = ((LISTOP*)right)->op_first) &&
3724 tmpop->op_type == OP_PUSHRE)
3726 PMOP *pm = (PMOP*)tmpop;
3727 if (left->op_type == OP_RV2AV &&
3728 !(left->op_private & OPpLVAL_INTRO) &&
3729 !(o->op_private & OPpASSIGN_COMMON) )
3731 tmpop = ((UNOP*)left)->op_first;
3732 if (tmpop->op_type == OP_GV && !pm->op_pmreplroot) {
3734 pm->op_pmreplroot = INT2PTR(OP*, cPADOPx(tmpop)->op_padix);
3735 cPADOPx(tmpop)->op_padix = 0; /* steal it */
3737 pm->op_pmreplroot = (OP*)cSVOPx(tmpop)->op_sv;
3738 cSVOPx(tmpop)->op_sv = Nullsv; /* steal it */
3740 pm->op_pmflags |= PMf_ONCE;
3741 tmpop = cUNOPo->op_first; /* to list (nulled) */
3742 tmpop = ((UNOP*)tmpop)->op_first; /* to pushmark */
3743 tmpop->op_sibling = Nullop; /* don't free split */
3744 right->op_next = tmpop->op_next; /* fix starting loc */
3745 op_free(o); /* blow off assign */
3746 right->op_flags &= ~OPf_WANT;
3747 /* "I don't know and I don't care." */
3752 if (PL_modcount < RETURN_UNLIMITED_NUMBER &&
3753 ((LISTOP*)right)->op_last->op_type == OP_CONST)
3755 SV *sv = ((SVOP*)((LISTOP*)right)->op_last)->op_sv;
3757 sv_setiv(sv, PL_modcount+1);
3765 right = newOP(OP_UNDEF, 0);
3766 if (right->op_type == OP_READLINE) {
3767 right->op_flags |= OPf_STACKED;
3768 return newBINOP(OP_NULL, flags, mod(scalar(left), OP_SASSIGN), scalar(right));
3771 PL_eval_start = right; /* Grandfathering $[ assignment here. Bletch.*/
3772 o = newBINOP(OP_SASSIGN, flags,
3773 scalar(right), mod(scalar(left), OP_SASSIGN) );
3785 Perl_newSTATEOP(pTHX_ I32 flags, char *label, OP *o)
3787 U32 seq = intro_my();
3790 NewOp(1101, cop, 1, COP);
3791 if (PERLDB_LINE && CopLINE(PL_curcop) && PL_curstash != PL_debstash) {
3792 cop->op_type = OP_DBSTATE;
3793 cop->op_ppaddr = PL_ppaddr[ OP_DBSTATE ];
3796 cop->op_type = OP_NEXTSTATE;
3797 cop->op_ppaddr = PL_ppaddr[ OP_NEXTSTATE ];
3799 cop->op_flags = (U8)flags;
3800 cop->op_private = (U8)(PL_hints & HINT_PRIVATE_MASK);
3802 cop->op_private |= NATIVE_HINTS;
3804 PL_compiling.op_private = cop->op_private;
3805 cop->op_next = (OP*)cop;
3808 cop->cop_label = label;
3809 PL_hints |= HINT_BLOCK_SCOPE;
3812 cop->cop_arybase = PL_curcop->cop_arybase;
3813 if (specialWARN(PL_curcop->cop_warnings))
3814 cop->cop_warnings = PL_curcop->cop_warnings ;
3816 cop->cop_warnings = newSVsv(PL_curcop->cop_warnings) ;
3817 if (specialCopIO(PL_curcop->cop_io))
3818 cop->cop_io = PL_curcop->cop_io;
3820 cop->cop_io = newSVsv(PL_curcop->cop_io) ;
3823 if (PL_copline == NOLINE)
3824 CopLINE_set(cop, CopLINE(PL_curcop));
3826 CopLINE_set(cop, PL_copline);
3827 PL_copline = NOLINE;
3830 CopFILE_set(cop, CopFILE(PL_curcop)); /* XXX share in a pvtable? */
3832 CopFILEGV_set(cop, CopFILEGV(PL_curcop));
3834 CopSTASH_set(cop, PL_curstash);
3836 if (PERLDB_LINE && PL_curstash != PL_debstash) {
3837 SV **svp = av_fetch(CopFILEAV(PL_curcop), (I32)CopLINE(cop), FALSE);
3838 if (svp && *svp != &PL_sv_undef ) {
3839 (void)SvIOK_on(*svp);
3840 SvIVX(*svp) = PTR2IV(cop);
3844 return prepend_elem(OP_LINESEQ, (OP*)cop, o);
3847 /* "Introduce" my variables to visible status. */
3855 if (! PL_min_intro_pending)
3856 return PL_cop_seqmax;
3858 svp = AvARRAY(PL_comppad_name);
3859 for (i = PL_min_intro_pending; i <= PL_max_intro_pending; i++) {
3860 if ((sv = svp[i]) && sv != &PL_sv_undef && !SvIVX(sv)) {
3861 SvIVX(sv) = PAD_MAX; /* Don't know scope end yet. */
3862 SvNVX(sv) = (NV)PL_cop_seqmax;
3865 PL_min_intro_pending = 0;
3866 PL_comppad_name_fill = PL_max_intro_pending; /* Needn't search higher */
3867 return PL_cop_seqmax++;
3871 Perl_newLOGOP(pTHX_ I32 type, I32 flags, OP *first, OP *other)
3873 return new_logop(type, flags, &first, &other);
3877 S_new_logop(pTHX_ I32 type, I32 flags, OP** firstp, OP** otherp)
3881 OP *first = *firstp;
3882 OP *other = *otherp;
3884 if (type == OP_XOR) /* Not short circuit, but here by precedence. */
3885 return newBINOP(type, flags, scalar(first), scalar(other));
3887 scalarboolean(first);
3888 /* optimize "!a && b" to "a || b", and "!a || b" to "a && b" */
3889 if (first->op_type == OP_NOT && (first->op_flags & OPf_SPECIAL)) {
3890 if (type == OP_AND || type == OP_OR) {
3896 first = *firstp = cUNOPo->op_first;
3898 first->op_next = o->op_next;
3899 cUNOPo->op_first = Nullop;
3903 if (first->op_type == OP_CONST) {
3904 if (ckWARN(WARN_BAREWORD) && (first->op_private & OPpCONST_BARE)) {
3905 if (first->op_private & OPpCONST_STRICT)
3906 no_bareword_allowed(first);
3908 Perl_warner(aTHX_ packWARN(WARN_BAREWORD), "Bareword found in conditional");
3910 if ((type == OP_AND) == (SvTRUE(((SVOP*)first)->op_sv))) {
3921 else if (ckWARN(WARN_MISC) && (first->op_flags & OPf_KIDS)) {
3922 OP *k1 = ((UNOP*)first)->op_first;
3923 OP *k2 = k1->op_sibling;
3925 switch (first->op_type)
3928 if (k2 && k2->op_type == OP_READLINE
3929 && (k2->op_flags & OPf_STACKED)
3930 && ((k1->op_flags & OPf_WANT) == OPf_WANT_SCALAR))
3932 warnop = k2->op_type;
3937 if (k1->op_type == OP_READDIR
3938 || k1->op_type == OP_GLOB
3939 || (k1->op_type == OP_NULL && k1->op_targ == OP_GLOB)
3940 || k1->op_type == OP_EACH)
3942 warnop = ((k1->op_type == OP_NULL)
3943 ? (OPCODE)k1->op_targ : k1->op_type);
3948 line_t oldline = CopLINE(PL_curcop);
3949 CopLINE_set(PL_curcop, PL_copline);
3950 Perl_warner(aTHX_ packWARN(WARN_MISC),
3951 "Value of %s%s can be \"0\"; test with defined()",
3953 ((warnop == OP_READLINE || warnop == OP_GLOB)
3954 ? " construct" : "() operator"));
3955 CopLINE_set(PL_curcop, oldline);
3962 if (type == OP_ANDASSIGN || type == OP_ORASSIGN)
3963 other->op_private |= OPpASSIGN_BACKWARDS; /* other is an OP_SASSIGN */
3965 NewOp(1101, logop, 1, LOGOP);
3967 logop->op_type = (OPCODE)type;
3968 logop->op_ppaddr = PL_ppaddr[type];
3969 logop->op_first = first;
3970 logop->op_flags = flags | OPf_KIDS;
3971 logop->op_other = LINKLIST(other);
3972 logop->op_private = (U8)(1 | (flags >> 8));
3974 /* establish postfix order */
3975 logop->op_next = LINKLIST(first);
3976 first->op_next = (OP*)logop;
3977 first->op_sibling = other;
3979 o = newUNOP(OP_NULL, 0, (OP*)logop);
3986 Perl_newCONDOP(pTHX_ I32 flags, OP *first, OP *trueop, OP *falseop)
3993 return newLOGOP(OP_AND, 0, first, trueop);
3995 return newLOGOP(OP_OR, 0, first, falseop);
3997 scalarboolean(first);
3998 if (first->op_type == OP_CONST) {
3999 if (first->op_private & OPpCONST_BARE &&
4000 first->op_private & OPpCONST_STRICT) {
4001 no_bareword_allowed(first);
4003 if (SvTRUE(((SVOP*)first)->op_sv)) {
4014 NewOp(1101, logop, 1, LOGOP);
4015 logop->op_type = OP_COND_EXPR;
4016 logop->op_ppaddr = PL_ppaddr[OP_COND_EXPR];
4017 logop->op_first = first;
4018 logop->op_flags = flags | OPf_KIDS;
4019 logop->op_private = (U8)(1 | (flags >> 8));
4020 logop->op_other = LINKLIST(trueop);
4021 logop->op_next = LINKLIST(falseop);
4024 /* establish postfix order */
4025 start = LINKLIST(first);
4026 first->op_next = (OP*)logop;
4028 first->op_sibling = trueop;
4029 trueop->op_sibling = falseop;
4030 o = newUNOP(OP_NULL, 0, (OP*)logop);
4032 trueop->op_next = falseop->op_next = o;
4039 Perl_newRANGE(pTHX_ I32 flags, OP *left, OP *right)
4047 NewOp(1101, range, 1, LOGOP);
4049 range->op_type = OP_RANGE;
4050 range->op_ppaddr = PL_ppaddr[OP_RANGE];
4051 range->op_first = left;
4052 range->op_flags = OPf_KIDS;
4053 leftstart = LINKLIST(left);
4054 range->op_other = LINKLIST(right);
4055 range->op_private = (U8)(1 | (flags >> 8));
4057 left->op_sibling = right;
4059 range->op_next = (OP*)range;
4060 flip = newUNOP(OP_FLIP, flags, (OP*)range);
4061 flop = newUNOP(OP_FLOP, 0, flip);
4062 o = newUNOP(OP_NULL, 0, flop);
4064 range->op_next = leftstart;
4066 left->op_next = flip;
4067 right->op_next = flop;
4069 range->op_targ = pad_alloc(OP_RANGE, SVs_PADMY);
4070 sv_upgrade(PAD_SV(range->op_targ), SVt_PVNV);
4071 flip->op_targ = pad_alloc(OP_RANGE, SVs_PADMY);
4072 sv_upgrade(PAD_SV(flip->op_targ), SVt_PVNV);
4074 flip->op_private = left->op_type == OP_CONST ? OPpFLIP_LINENUM : 0;
4075 flop->op_private = right->op_type == OP_CONST ? OPpFLIP_LINENUM : 0;
4078 if (!flip->op_private || !flop->op_private)
4079 linklist(o); /* blow off optimizer unless constant */
4085 Perl_newLOOPOP(pTHX_ I32 flags, I32 debuggable, OP *expr, OP *block)
4089 int once = block && block->op_flags & OPf_SPECIAL &&
4090 (block->op_type == OP_ENTERSUB || block->op_type == OP_NULL);
4093 if (once && expr->op_type == OP_CONST && !SvTRUE(((SVOP*)expr)->op_sv))
4094 return block; /* do {} while 0 does once */
4095 if (expr->op_type == OP_READLINE || expr->op_type == OP_GLOB
4096 || (expr->op_type == OP_NULL && expr->op_targ == OP_GLOB)) {
4097 expr = newUNOP(OP_DEFINED, 0,
4098 newASSIGNOP(0, newDEFSVOP(), 0, expr) );
4099 } else if (expr->op_flags & OPf_KIDS) {
4100 OP *k1 = ((UNOP*)expr)->op_first;
4101 OP *k2 = (k1) ? k1->op_sibling : NULL;
4102 switch (expr->op_type) {
4104 if (k2 && k2->op_type == OP_READLINE
4105 && (k2->op_flags & OPf_STACKED)
4106 && ((k1->op_flags & OPf_WANT) == OPf_WANT_SCALAR))
4107 expr = newUNOP(OP_DEFINED, 0, expr);
4111 if (k1->op_type == OP_READDIR
4112 || k1->op_type == OP_GLOB
4113 || (k1->op_type == OP_NULL && k1->op_targ == OP_GLOB)
4114 || k1->op_type == OP_EACH)
4115 expr = newUNOP(OP_DEFINED, 0, expr);
4121 listop = append_elem(OP_LINESEQ, block, newOP(OP_UNSTACK, 0));
4122 o = new_logop(OP_AND, 0, &expr, &listop);
4125 ((LISTOP*)listop)->op_last->op_next = LINKLIST(o);
4127 if (once && o != listop)
4128 o->op_next = ((LOGOP*)cUNOPo->op_first)->op_other;
4131 o = newUNOP(OP_NULL, 0, o); /* or do {} while 1 loses outer block */
4133 o->op_flags |= flags;
4135 o->op_flags |= OPf_SPECIAL; /* suppress POPBLOCK curpm restoration*/
4140 Perl_newWHILEOP(pTHX_ I32 flags, I32 debuggable, LOOP *loop, I32 whileline, OP *expr, OP *block, OP *cont)
4148 if (expr && (expr->op_type == OP_READLINE || expr->op_type == OP_GLOB
4149 || (expr->op_type == OP_NULL && expr->op_targ == OP_GLOB))) {
4150 expr = newUNOP(OP_DEFINED, 0,
4151 newASSIGNOP(0, newDEFSVOP(), 0, expr) );
4152 } else if (expr && (expr->op_flags & OPf_KIDS)) {
4153 OP *k1 = ((UNOP*)expr)->op_first;
4154 OP *k2 = (k1) ? k1->op_sibling : NULL;
4155 switch (expr->op_type) {
4157 if (k2 && k2->op_type == OP_READLINE
4158 && (k2->op_flags & OPf_STACKED)
4159 && ((k1->op_flags & OPf_WANT) == OPf_WANT_SCALAR))
4160 expr = newUNOP(OP_DEFINED, 0, expr);
4164 if (k1->op_type == OP_READDIR
4165 || k1->op_type == OP_GLOB
4166 || (k1->op_type == OP_NULL && k1->op_targ == OP_GLOB)
4167 || k1->op_type == OP_EACH)
4168 expr = newUNOP(OP_DEFINED, 0, expr);
4174 block = newOP(OP_NULL, 0);
4176 block = scope(block);
4180 next = LINKLIST(cont);
4183 OP *unstack = newOP(OP_UNSTACK, 0);
4186 cont = append_elem(OP_LINESEQ, cont, unstack);
4187 if ((line_t)whileline != NOLINE) {
4188 PL_copline = (line_t)whileline;
4189 cont = append_elem(OP_LINESEQ, cont,
4190 newSTATEOP(0, Nullch, Nullop));
4194 listop = append_list(OP_LINESEQ, (LISTOP*)block, (LISTOP*)cont);
4195 redo = LINKLIST(listop);
4198 PL_copline = (line_t)whileline;
4200 o = new_logop(OP_AND, 0, &expr, &listop);
4201 if (o == expr && o->op_type == OP_CONST && !SvTRUE(cSVOPo->op_sv)) {
4202 op_free(expr); /* oops, it's a while (0) */
4204 return Nullop; /* listop already freed by new_logop */
4207 ((LISTOP*)listop)->op_last->op_next =
4208 (o == listop ? redo : LINKLIST(o));
4214 NewOp(1101,loop,1,LOOP);
4215 loop->op_type = OP_ENTERLOOP;
4216 loop->op_ppaddr = PL_ppaddr[OP_ENTERLOOP];
4217 loop->op_private = 0;
4218 loop->op_next = (OP*)loop;
4221 o = newBINOP(OP_LEAVELOOP, 0, (OP*)loop, o);
4223 loop->op_redoop = redo;
4224 loop->op_lastop = o;
4225 o->op_private |= loopflags;
4228 loop->op_nextop = next;
4230 loop->op_nextop = o;
4232 o->op_flags |= flags;
4233 o->op_private |= (flags >> 8);
4238 Perl_newFOROP(pTHX_ I32 flags,char *label,line_t forline,OP *sv,OP *expr,OP *block,OP *cont)
4242 PADOFFSET padoff = 0;
4246 if (sv->op_type == OP_RV2SV) { /* symbol table variable */
4247 sv->op_type = OP_RV2GV;
4248 sv->op_ppaddr = PL_ppaddr[OP_RV2GV];
4250 else if (sv->op_type == OP_PADSV) { /* private variable */
4251 padoff = sv->op_targ;
4256 else if (sv->op_type == OP_THREADSV) { /* per-thread variable */
4257 padoff = sv->op_targ;
4259 iterflags |= OPf_SPECIAL;
4264 Perl_croak(aTHX_ "Can't use %s for loop variable", PL_op_desc[sv->op_type]);
4267 #ifdef USE_5005THREADS
4268 padoff = find_threadsv("_");
4269 iterflags |= OPf_SPECIAL;
4271 sv = newGVOP(OP_GV, 0, PL_defgv);
4274 if (expr->op_type == OP_RV2AV || expr->op_type == OP_PADAV) {
4275 expr = mod(force_list(scalar(ref(expr, OP_ITER))), OP_GREPSTART);
4276 iterflags |= OPf_STACKED;
4278 else if (expr->op_type == OP_NULL &&
4279 (expr->op_flags & OPf_KIDS) &&
4280 ((BINOP*)expr)->op_first->op_type == OP_FLOP)
4282 /* Basically turn for($x..$y) into the same as for($x,$y), but we
4283 * set the STACKED flag to indicate that these values are to be
4284 * treated as min/max values by 'pp_iterinit'.
4286 UNOP* flip = (UNOP*)((UNOP*)((BINOP*)expr)->op_first)->op_first;
4287 LOGOP* range = (LOGOP*) flip->op_first;
4288 OP* left = range->op_first;
4289 OP* right = left->op_sibling;
4292 range->op_flags &= ~OPf_KIDS;
4293 range->op_first = Nullop;
4295 listop = (LISTOP*)newLISTOP(OP_LIST, 0, left, right);
4296 listop->op_first->op_next = range->op_next;
4297 left->op_next = range->op_other;
4298 right->op_next = (OP*)listop;
4299 listop->op_next = listop->op_first;
4302 expr = (OP*)(listop);
4304 iterflags |= OPf_STACKED;
4307 expr = mod(force_list(expr), OP_GREPSTART);
4311 loop = (LOOP*)list(convert(OP_ENTERITER, iterflags,
4312 append_elem(OP_LIST, expr, scalar(sv))));
4313 assert(!loop->op_next);
4314 #ifdef PL_OP_SLAB_ALLOC
4317 NewOp(1234,tmp,1,LOOP);
4318 Copy(loop,tmp,1,LOOP);
4323 Renew(loop, 1, LOOP);
4325 loop->op_targ = padoff;
4326 wop = newWHILEOP(flags, 1, loop, forline, newOP(OP_ITER, 0), block, cont);
4327 PL_copline = forline;
4328 return newSTATEOP(0, label, wop);
4332 Perl_newLOOPEX(pTHX_ I32 type, OP *label)
4337 if (type != OP_GOTO || label->op_type == OP_CONST) {
4338 /* "last()" means "last" */
4339 if (label->op_type == OP_STUB && (label->op_flags & OPf_PARENS))
4340 o = newOP(type, OPf_SPECIAL);
4342 o = newPVOP(type, 0, savepv(label->op_type == OP_CONST
4343 ? SvPVx(((SVOP*)label)->op_sv, n_a)
4349 if (label->op_type == OP_ENTERSUB)
4350 label = newUNOP(OP_REFGEN, 0, mod(label, OP_REFGEN));
4351 o = newUNOP(type, OPf_STACKED, label);
4353 PL_hints |= HINT_BLOCK_SCOPE;
4358 Perl_cv_undef(pTHX_ CV *cv)
4361 CV *freecv = Nullcv;
4362 bool is_eval = CvEVAL(cv) && !CvGV(cv); /* is this eval"" ? */
4364 #ifdef USE_5005THREADS
4366 MUTEX_DESTROY(CvMUTEXP(cv));
4367 Safefree(CvMUTEXP(cv));
4370 #endif /* USE_5005THREADS */
4373 if (CvFILE(cv) && !CvXSUB(cv)) {
4374 /* for XSUBs CvFILE point directly to static memory; __FILE__ */
4375 Safefree(CvFILE(cv));
4380 if (!CvXSUB(cv) && CvROOT(cv)) {
4381 #ifdef USE_5005THREADS
4382 if (CvDEPTH(cv) || (CvOWNER(cv) && CvOWNER(cv) != thr))
4383 Perl_croak(aTHX_ "Can't undef active subroutine");
4386 Perl_croak(aTHX_ "Can't undef active subroutine");
4387 #endif /* USE_5005THREADS */
4390 SAVEVPTR(PL_curpad);
4393 op_free(CvROOT(cv));
4394 CvROOT(cv) = Nullop;
4397 SvPOK_off((SV*)cv); /* forget prototype */
4399 outsidecv = CvOUTSIDE(cv);
4400 /* Since closure prototypes have the same lifetime as the containing
4401 * CV, they don't hold a refcount on the outside CV. This avoids
4402 * the refcount loop between the outer CV (which keeps a refcount to
4403 * the closure prototype in the pad entry for pp_anoncode()) and the
4404 * closure prototype, and the ensuing memory leak. --GSAR */
4405 if (!CvANON(cv) || CvCLONED(cv))
4407 CvOUTSIDE(cv) = Nullcv;
4409 SvREFCNT_dec((SV*)CvXSUBANY(cv).any_ptr);
4412 if (CvPADLIST(cv)) {
4413 /* may be during global destruction */
4414 if (SvREFCNT(CvPADLIST(cv))) {
4415 AV *padlist = CvPADLIST(cv);
4417 /* pads may be cleared out already during global destruction */
4418 if ((is_eval && !PL_dirty) || CvSPECIAL(cv)) {
4419 /* inner references to eval's cv must be fixed up */
4420 AV *comppad_name = (AV*)AvARRAY(padlist)[0];
4421 AV *comppad = (AV*)AvARRAY(padlist)[1];
4422 SV **namepad = AvARRAY(comppad_name);
4423 SV **curpad = AvARRAY(comppad);
4424 for (ix = AvFILLp(comppad_name); ix > 0; ix--) {
4425 SV *namesv = namepad[ix];
4426 if (namesv && namesv != &PL_sv_undef
4427 && *SvPVX(namesv) == '&'
4428 && ix <= AvFILLp(comppad))
4430 CV *innercv = (CV*)curpad[ix];
4431 if (innercv && SvTYPE(innercv) == SVt_PVCV
4432 && CvOUTSIDE(innercv) == cv)
4434 CvOUTSIDE(innercv) = outsidecv;
4435 if (!CvANON(innercv) || CvCLONED(innercv)) {
4436 (void)SvREFCNT_inc(outsidecv);
4445 SvREFCNT_dec(freecv);
4446 ix = AvFILLp(padlist);
4448 SV* sv = AvARRAY(padlist)[ix--];
4451 if (sv == (SV*)PL_comppad_name)
4452 PL_comppad_name = Nullav;
4453 else if (sv == (SV*)PL_comppad) {
4454 PL_comppad = Nullav;
4455 PL_curpad = Null(SV**);
4459 SvREFCNT_dec((SV*)CvPADLIST(cv));
4461 CvPADLIST(cv) = Nullav;
4464 SvREFCNT_dec(freecv);
4471 #ifdef DEBUG_CLOSURES
4473 S_cv_dump(pTHX_ CV *cv)
4476 CV *outside = CvOUTSIDE(cv);
4477 AV* padlist = CvPADLIST(cv);
4484 PerlIO_printf(Perl_debug_log,
4485 "\tCV=0x%"UVxf" (%s), OUTSIDE=0x%"UVxf" (%s)\n",
4487 (CvANON(cv) ? "ANON"
4488 : (cv == PL_main_cv) ? "MAIN"
4489 : CvUNIQUE(cv) ? "UNIQUE"
4490 : CvGV(cv) ? GvNAME(CvGV(cv)) : "UNDEFINED"),
4493 : CvANON(outside) ? "ANON"
4494 : (outside == PL_main_cv) ? "MAIN"
4495 : CvUNIQUE(outside) ? "UNIQUE"
4496 : CvGV(outside) ? GvNAME(CvGV(outside)) : "UNDEFINED"));
4501 pad_name = (AV*)*av_fetch(padlist, 0, FALSE);
4502 pad = (AV*)*av_fetch(padlist, 1, FALSE);
4503 pname = AvARRAY(pad_name);
4504 ppad = AvARRAY(pad);
4506 for (ix = 1; ix <= AvFILLp(pad_name); ix++) {
4507 if (SvPOK(pname[ix]))
4508 PerlIO_printf(Perl_debug_log,
4509 "\t%4d. 0x%"UVxf" (%s\"%s\" %"IVdf"-%"IVdf")\n",
4510 (int)ix, PTR2UV(ppad[ix]),
4511 SvFAKE(pname[ix]) ? "FAKE " : "",
4513 (IV)I_32(SvNVX(pname[ix])),
4516 #endif /* DEBUGGING */
4518 #endif /* DEBUG_CLOSURES */
4521 S_cv_clone2(pTHX_ CV *proto, CV *outside)
4525 AV* protopadlist = CvPADLIST(proto);
4526 AV* protopad_name = (AV*)*av_fetch(protopadlist, 0, FALSE);
4527 AV* protopad = (AV*)*av_fetch(protopadlist, 1, FALSE);
4528 SV** pname = AvARRAY(protopad_name);
4529 SV** ppad = AvARRAY(protopad);
4530 I32 fname = AvFILLp(protopad_name);
4531 I32 fpad = AvFILLp(protopad);
4535 assert(!CvUNIQUE(proto));
4539 SAVESPTR(PL_comppad_name);
4540 SAVESPTR(PL_compcv);
4542 cv = PL_compcv = (CV*)NEWSV(1104,0);
4543 sv_upgrade((SV *)cv, SvTYPE(proto));
4544 CvFLAGS(cv) = CvFLAGS(proto) & ~CVf_CLONE;
4547 #ifdef USE_5005THREADS
4548 New(666, CvMUTEXP(cv), 1, perl_mutex);
4549 MUTEX_INIT(CvMUTEXP(cv));
4551 #endif /* USE_5005THREADS */
4553 CvFILE(cv) = CvXSUB(proto) ? CvFILE(proto)
4554 : savepv(CvFILE(proto));
4556 CvFILE(cv) = CvFILE(proto);
4558 CvGV(cv) = CvGV(proto);
4559 CvSTASH(cv) = CvSTASH(proto);
4560 CvROOT(cv) = OpREFCNT_inc(CvROOT(proto));
4561 CvSTART(cv) = CvSTART(proto);
4563 CvOUTSIDE(cv) = (CV*)SvREFCNT_inc(outside);
4566 sv_setpvn((SV*)cv, SvPVX(proto), SvCUR(proto));
4568 PL_comppad_name = newAV();
4569 for (ix = fname; ix >= 0; ix--)
4570 av_store(PL_comppad_name, ix, SvREFCNT_inc(pname[ix]));
4572 PL_comppad = newAV();
4574 comppadlist = newAV();
4575 AvREAL_off(comppadlist);
4576 av_store(comppadlist, 0, (SV*)PL_comppad_name);
4577 av_store(comppadlist, 1, (SV*)PL_comppad);
4578 CvPADLIST(cv) = comppadlist;
4579 av_fill(PL_comppad, AvFILLp(protopad));
4580 PL_curpad = AvARRAY(PL_comppad);
4582 av = newAV(); /* will be @_ */
4584 av_store(PL_comppad, 0, (SV*)av);
4585 AvFLAGS(av) = AVf_REIFY;
4587 for (ix = fpad; ix > 0; ix--) {
4588 SV* namesv = (ix <= fname) ? pname[ix] : Nullsv;
4589 if (namesv && namesv != &PL_sv_undef) {
4590 char *name = SvPVX(namesv); /* XXX */
4591 if (SvFLAGS(namesv) & SVf_FAKE) { /* lexical from outside? */
4592 I32 off = pad_findlex(name, ix, SvIVX(namesv),
4593 CvOUTSIDE(cv), cxstack_ix, 0, 0);
4595 PL_curpad[ix] = SvREFCNT_inc(ppad[ix]);
4597 Perl_croak(aTHX_ "panic: cv_clone: %s", name);
4599 else { /* our own lexical */
4602 /* anon code -- we'll come back for it */
4603 sv = SvREFCNT_inc(ppad[ix]);
4605 else if (*name == '@')
4607 else if (*name == '%')
4616 else if (IS_PADGV(ppad[ix]) || IS_PADCONST(ppad[ix])) {
4617 PL_curpad[ix] = SvREFCNT_inc(ppad[ix]);
4620 SV* sv = NEWSV(0,0);
4626 /* Now that vars are all in place, clone nested closures. */
4628 for (ix = fpad; ix > 0; ix--) {
4629 SV* namesv = (ix <= fname) ? pname[ix] : Nullsv;
4631 && namesv != &PL_sv_undef
4632 && !(SvFLAGS(namesv) & SVf_FAKE)
4633 && *SvPVX(namesv) == '&'
4634 && CvCLONE(ppad[ix]))
4636 CV *kid = cv_clone2((CV*)ppad[ix], cv);
4637 SvREFCNT_dec(ppad[ix]);
4640 PL_curpad[ix] = (SV*)kid;
4644 #ifdef DEBUG_CLOSURES
4645 PerlIO_printf(Perl_debug_log, "Cloned inside:\n");
4647 PerlIO_printf(Perl_debug_log, " from:\n");
4649 PerlIO_printf(Perl_debug_log, " to:\n");
4656 SV* const_sv = op_const_sv(CvSTART(cv), cv);
4658 /* constant sub () { $x } closing over $x - see lib/constant.pm */
4660 cv = newCONSTSUB(CvSTASH(proto), 0, const_sv);
4667 Perl_cv_clone(pTHX_ CV *proto)
4670 LOCK_CRED_MUTEX; /* XXX create separate mutex */
4671 cv = cv_clone2(proto, CvOUTSIDE(proto));
4672 UNLOCK_CRED_MUTEX; /* XXX create separate mutex */
4677 Perl_cv_ckproto(pTHX_ CV *cv, GV *gv, char *p)
4679 if (((!p != !SvPOK(cv)) || (p && strNE(p, SvPVX(cv)))) && ckWARN_d(WARN_PROTOTYPE)) {
4680 SV* msg = sv_newmortal();
4684 gv_efullname3(name = sv_newmortal(), gv, Nullch);
4685 sv_setpv(msg, "Prototype mismatch:");
4687 Perl_sv_catpvf(aTHX_ msg, " sub %"SVf, name);
4689 Perl_sv_catpvf(aTHX_ msg, " (%s)", SvPVX(cv));
4690 sv_catpv(msg, " vs ");
4692 Perl_sv_catpvf(aTHX_ msg, "(%s)", p);
4694 sv_catpv(msg, "none");
4695 Perl_warner(aTHX_ packWARN(WARN_PROTOTYPE), "%"SVf, msg);
4699 static void const_sv_xsub(pTHX_ CV* cv);
4703 =head1 Optree Manipulation Functions
4705 =for apidoc cv_const_sv
4707 If C<cv> is a constant sub eligible for inlining. returns the constant
4708 value returned by the sub. Otherwise, returns NULL.
4710 Constant subs can be created with C<newCONSTSUB> or as described in
4711 L<perlsub/"Constant Functions">.
4716 Perl_cv_const_sv(pTHX_ CV *cv)
4718 if (!cv || !CvCONST(cv))
4720 return (SV*)CvXSUBANY(cv).any_ptr;
4724 Perl_op_const_sv(pTHX_ OP *o, CV *cv)
4731 if (o->op_type == OP_LINESEQ && cLISTOPo->op_first)
4732 o = cLISTOPo->op_first->op_sibling;
4734 for (; o; o = o->op_next) {
4735 OPCODE type = o->op_type;
4737 if (sv && o->op_next == o)
4739 if (o->op_next != o) {
4740 if (type == OP_NEXTSTATE || type == OP_NULL || type == OP_PUSHMARK)
4742 if (type == OP_DBSTATE)
4745 if (type == OP_LEAVESUB || type == OP_RETURN)
4749 if (type == OP_CONST && cSVOPo->op_sv)
4751 else if ((type == OP_PADSV || type == OP_CONST) && cv) {
4752 AV* padav = (AV*)(AvARRAY(CvPADLIST(cv))[1]);
4753 sv = padav ? AvARRAY(padav)[o->op_targ] : Nullsv;
4757 /* We get here only from cv_clone2() while creating a closure.
4758 Copy the const value here instead of in cv_clone2 so that
4759 SvREADONLY_on doesn't lead to problems when leaving
4764 if (!SvREADONLY(sv) && SvREFCNT(sv) > 1)
4776 Perl_newMYSUB(pTHX_ I32 floor, OP *o, OP *proto, OP *attrs, OP *block)
4786 Perl_croak(aTHX_ "\"my sub\" not yet implemented");
4790 Perl_newSUB(pTHX_ I32 floor, OP *o, OP *proto, OP *block)
4792 return Perl_newATTRSUB(aTHX_ floor, o, proto, Nullop, block);
4796 Perl_newATTRSUB(pTHX_ I32 floor, OP *o, OP *proto, OP *attrs, OP *block)
4802 char *ps = proto ? SvPVx(((SVOP*)proto)->op_sv, n_a) : Nullch;
4807 name = o ? SvPVx(cSVOPo->op_sv, n_a) : Nullch;
4808 if (!name && PERLDB_NAMEANON && CopLINE(PL_curcop)) {
4809 SV *sv = sv_newmortal();
4810 Perl_sv_setpvf(aTHX_ sv, "%s[%s:%"IVdf"]",
4811 PL_curstash ? "__ANON__" : "__ANON__::__ANON__",
4812 CopFILE(PL_curcop), (IV)CopLINE(PL_curcop));
4817 gv = gv_fetchpv(name ? name : (aname ? aname :
4818 (PL_curstash ? "__ANON__" : "__ANON__::__ANON__")),
4819 GV_ADDMULTI | ((block || attrs) ? 0 : GV_NOINIT),
4829 if (SvTYPE(gv) != SVt_PVGV) { /* Maybe prototype now, and had at
4830 maximum a prototype before. */
4831 if (SvTYPE(gv) > SVt_NULL) {
4832 if (!SvPOK((SV*)gv) && !(SvIOK((SV*)gv) && SvIVX((SV*)gv) == -1)
4833 && ckWARN_d(WARN_PROTOTYPE))
4835 Perl_warner(aTHX_ packWARN(WARN_PROTOTYPE), "Runaway prototype");
4837 cv_ckproto((CV*)gv, NULL, ps);
4840 sv_setpv((SV*)gv, ps);
4842 sv_setiv((SV*)gv, -1);
4843 SvREFCNT_dec(PL_compcv);
4844 cv = PL_compcv = NULL;
4845 PL_sub_generation++;
4849 cv = (!name || GvCVGEN(gv)) ? Nullcv : GvCV(gv);
4851 #ifdef GV_UNIQUE_CHECK
4852 if (cv && GvUNIQUE(gv) && SvREADONLY(cv)) {
4853 Perl_croak(aTHX_ "Can't define subroutine %s (GV is unique)", name);
4857 if (!block || !ps || *ps || attrs)
4860 const_sv = op_const_sv(block, Nullcv);
4863 bool exists = CvROOT(cv) || CvXSUB(cv);
4865 #ifdef GV_UNIQUE_CHECK
4866 if (exists && GvUNIQUE(gv)) {
4867 Perl_croak(aTHX_ "Can't redefine unique subroutine %s", name);
4871 /* if the subroutine doesn't exist and wasn't pre-declared
4872 * with a prototype, assume it will be AUTOLOADed,
4873 * skipping the prototype check
4875 if (exists || SvPOK(cv))
4876 cv_ckproto(cv, gv, ps);
4877 /* already defined (or promised)? */
4878 if (exists || GvASSUMECV(gv)) {
4879 if (!block && !attrs) {
4880 if (CvFLAGS(PL_compcv)) {
4881 /* might have had built-in attrs applied */
4882 CvFLAGS(cv) |= (CvFLAGS(PL_compcv) & CVf_BUILTIN_ATTRS);
4884 /* just a "sub foo;" when &foo is already defined */
4885 SAVEFREESV(PL_compcv);
4888 /* ahem, death to those who redefine active sort subs */
4889 if (PL_curstackinfo->si_type == PERLSI_SORT && PL_sortcop == CvSTART(cv))
4890 Perl_croak(aTHX_ "Can't redefine active sort subroutine %s", name);
4892 if (ckWARN(WARN_REDEFINE)
4894 && (!const_sv || sv_cmp(cv_const_sv(cv), const_sv))))
4896 line_t oldline = CopLINE(PL_curcop);
4897 if (PL_copline != NOLINE)
4898 CopLINE_set(PL_curcop, PL_copline);
4899 Perl_warner(aTHX_ packWARN(WARN_REDEFINE),
4900 CvCONST(cv) ? "Constant subroutine %s redefined"
4901 : "Subroutine %s redefined", name);
4902 CopLINE_set(PL_curcop, oldline);
4910 SvREFCNT_inc(const_sv);
4912 assert(!CvROOT(cv) && !CvCONST(cv));
4913 sv_setpv((SV*)cv, ""); /* prototype is "" */
4914 CvXSUBANY(cv).any_ptr = const_sv;
4915 CvXSUB(cv) = const_sv_xsub;
4920 cv = newCONSTSUB(NULL, name, const_sv);
4923 SvREFCNT_dec(PL_compcv);
4925 PL_sub_generation++;
4932 /* Need to do a C<use attributes $stash_of_cv,\&cv,@attrs>
4933 * before we clobber PL_compcv.
4937 /* Might have had built-in attributes applied -- propagate them. */
4938 CvFLAGS(cv) |= (CvFLAGS(PL_compcv) & CVf_BUILTIN_ATTRS);
4939 if (CvGV(cv) && GvSTASH(CvGV(cv)))
4940 stash = GvSTASH(CvGV(cv));
4941 else if (CvSTASH(cv))
4942 stash = CvSTASH(cv);
4944 stash = PL_curstash;
4947 /* possibly about to re-define existing subr -- ignore old cv */
4948 rcv = (SV*)PL_compcv;
4949 if (name && GvSTASH(gv))
4950 stash = GvSTASH(gv);
4952 stash = PL_curstash;
4954 apply_attrs(stash, rcv, attrs, FALSE);
4956 if (cv) { /* must reuse cv if autoloaded */
4958 /* got here with just attrs -- work done, so bug out */
4959 SAVEFREESV(PL_compcv);
4963 CvFLAGS(cv) = CvFLAGS(PL_compcv);
4964 CvOUTSIDE(cv) = CvOUTSIDE(PL_compcv);
4965 CvOUTSIDE(PL_compcv) = 0;
4966 CvPADLIST(cv) = CvPADLIST(PL_compcv);
4967 CvPADLIST(PL_compcv) = 0;
4968 /* inner references to PL_compcv must be fixed up ... */
4970 AV *padlist = CvPADLIST(cv);
4971 AV *comppad_name = (AV*)AvARRAY(padlist)[0];
4972 AV *comppad = (AV*)AvARRAY(padlist)[1];
4973 SV **namepad = AvARRAY(comppad_name);
4974 SV **curpad = AvARRAY(comppad);
4975 for (ix = AvFILLp(comppad_name); ix > 0; ix--) {
4976 SV *namesv = namepad[ix];
4977 if (namesv && namesv != &PL_sv_undef
4978 && *SvPVX(namesv) == '&')
4980 CV *innercv = (CV*)curpad[ix];
4981 if (CvOUTSIDE(innercv) == PL_compcv) {
4982 CvOUTSIDE(innercv) = cv;
4983 if (!CvANON(innercv) || CvCLONED(innercv)) {
4984 (void)SvREFCNT_inc(cv);
4985 SvREFCNT_dec(PL_compcv);
4991 /* ... before we throw it away */
4992 SvREFCNT_dec(PL_compcv);
4993 if (PERLDB_INTER)/* Advice debugger on the new sub. */
4994 ++PL_sub_generation;
5001 PL_sub_generation++;
5005 CvFILE_set_from_cop(cv, PL_curcop);
5006 CvSTASH(cv) = PL_curstash;
5007 #ifdef USE_5005THREADS
5009 if (!CvMUTEXP(cv)) {
5010 New(666, CvMUTEXP(cv), 1, perl_mutex);
5011 MUTEX_INIT(CvMUTEXP(cv));
5013 #endif /* USE_5005THREADS */
5016 sv_setpv((SV*)cv, ps);
5018 if (PL_error_count) {
5022 char *s = strrchr(name, ':');
5024 if (strEQ(s, "BEGIN")) {
5026 "BEGIN not safe after errors--compilation aborted";
5027 if (PL_in_eval & EVAL_KEEPERR)
5028 Perl_croak(aTHX_ not_safe);
5030 /* force display of errors found but not reported */
5031 sv_catpv(ERRSV, not_safe);
5032 Perl_croak(aTHX_ "%s", SvPVx(ERRSV, n_a));
5040 if (AvFILLp(PL_comppad_name) < AvFILLp(PL_comppad))
5041 av_store(PL_comppad_name, AvFILLp(PL_comppad), Nullsv);
5044 CvROOT(cv) = newUNOP(OP_LEAVESUBLV, 0,
5045 mod(scalarseq(block), OP_LEAVESUBLV));
5048 CvROOT(cv) = newUNOP(OP_LEAVESUB, 0, scalarseq(block));
5050 CvROOT(cv)->op_private |= OPpREFCOUNTED;
5051 OpREFCNT_set(CvROOT(cv), 1);
5052 CvSTART(cv) = LINKLIST(CvROOT(cv));
5053 CvROOT(cv)->op_next = 0;
5054 CALL_PEEP(CvSTART(cv));
5056 /* now that optimizer has done its work, adjust pad values */
5058 SV **namep = AvARRAY(PL_comppad_name);
5059 for (ix = AvFILLp(PL_comppad); ix > 0; ix--) {
5062 if (SvIMMORTAL(PL_curpad[ix]) || IS_PADGV(PL_curpad[ix]) || IS_PADCONST(PL_curpad[ix]))
5065 * The only things that a clonable function needs in its
5066 * pad are references to outer lexicals and anonymous subs.
5067 * The rest are created anew during cloning.
5069 if (!((namesv = namep[ix]) != Nullsv &&
5070 namesv != &PL_sv_undef &&
5072 *SvPVX(namesv) == '&')))
5074 SvREFCNT_dec(PL_curpad[ix]);
5075 PL_curpad[ix] = Nullsv;
5078 assert(!CvCONST(cv));
5079 if (ps && !*ps && op_const_sv(block, cv))
5083 AV *av = newAV(); /* Will be @_ */
5085 av_store(PL_comppad, 0, (SV*)av);
5086 AvFLAGS(av) = AVf_REIFY;
5088 for (ix = AvFILLp(PL_comppad); ix > 0; ix--) {
5089 if (SvIMMORTAL(PL_curpad[ix]) || IS_PADGV(PL_curpad[ix]) || IS_PADCONST(PL_curpad[ix]))
5091 if (!SvPADMY(PL_curpad[ix]))
5092 SvPADTMP_on(PL_curpad[ix]);
5096 /* If a potential closure prototype, don't keep a refcount on outer CV.
5097 * This is okay as the lifetime of the prototype is tied to the
5098 * lifetime of the outer CV. Avoids memory leak due to reference
5101 SvREFCNT_dec(CvOUTSIDE(cv));
5103 if (name || aname) {
5105 char *tname = (name ? name : aname);
5107 if (PERLDB_SUBLINE && PL_curstash != PL_debstash) {
5108 SV *sv = NEWSV(0,0);
5109 SV *tmpstr = sv_newmortal();
5110 GV *db_postponed = gv_fetchpv("DB::postponed", GV_ADDMULTI, SVt_PVHV);
5114 Perl_sv_setpvf(aTHX_ sv, "%s:%ld-%ld",
5116 (long)PL_subline, (long)CopLINE(PL_curcop));
5117 gv_efullname3(tmpstr, gv, Nullch);
5118 hv_store(GvHV(PL_DBsub), SvPVX(tmpstr), SvCUR(tmpstr), sv, 0);
5119 hv = GvHVn(db_postponed);
5120 if (HvFILL(hv) > 0 && hv_exists(hv, SvPVX(tmpstr), SvCUR(tmpstr))
5121 && (pcv = GvCV(db_postponed)))
5127 call_sv((SV*)pcv, G_DISCARD);
5131 if ((s = strrchr(tname,':')))
5136 if (*s != 'B' && *s != 'E' && *s != 'C' && *s != 'I')
5139 if (strEQ(s, "BEGIN")) {
5140 I32 oldscope = PL_scopestack_ix;
5142 SAVECOPFILE(&PL_compiling);
5143 SAVECOPLINE(&PL_compiling);
5146 PL_beginav = newAV();
5147 DEBUG_x( dump_sub(gv) );
5148 av_push(PL_beginav, (SV*)cv);
5149 GvCV(gv) = 0; /* cv has been hijacked */
5150 call_list(oldscope, PL_beginav);
5152 PL_curcop = &PL_compiling;
5153 PL_compiling.op_private = (U8)(PL_hints & HINT_PRIVATE_MASK);
5156 else if (strEQ(s, "END") && !PL_error_count) {
5159 DEBUG_x( dump_sub(gv) );
5160 av_unshift(PL_endav, 1);
5161 av_store(PL_endav, 0, (SV*)cv);
5162 GvCV(gv) = 0; /* cv has been hijacked */
5164 else if (strEQ(s, "CHECK") && !PL_error_count) {
5166 PL_checkav = newAV();
5167 DEBUG_x( dump_sub(gv) );
5168 if (PL_main_start && ckWARN(WARN_VOID))
5169 Perl_warner(aTHX_ packWARN(WARN_VOID), "Too late to run CHECK block");
5170 av_unshift(PL_checkav, 1);
5171 av_store(PL_checkav, 0, (SV*)cv);
5172 GvCV(gv) = 0; /* cv has been hijacked */
5174 else if (strEQ(s, "INIT") && !PL_error_count) {
5176 PL_initav = newAV();
5177 DEBUG_x( dump_sub(gv) );
5178 if (PL_main_start && ckWARN(WARN_VOID))
5179 Perl_warner(aTHX_ packWARN(WARN_VOID), "Too late to run INIT block");
5180 av_push(PL_initav, (SV*)cv);
5181 GvCV(gv) = 0; /* cv has been hijacked */
5186 PL_copline = NOLINE;
5191 /* XXX unsafe for threads if eval_owner isn't held */
5193 =for apidoc newCONSTSUB
5195 Creates a constant sub equivalent to Perl C<sub FOO () { 123 }> which is
5196 eligible for inlining at compile-time.
5202 Perl_newCONSTSUB(pTHX_ HV *stash, char *name, SV *sv)
5208 SAVECOPLINE(PL_curcop);
5209 CopLINE_set(PL_curcop, PL_copline);
5212 PL_hints &= ~HINT_BLOCK_SCOPE;
5215 SAVESPTR(PL_curstash);
5216 SAVECOPSTASH(PL_curcop);
5217 PL_curstash = stash;
5218 CopSTASH_set(PL_curcop,stash);
5221 cv = newXS(name, const_sv_xsub, __FILE__);
5222 CvXSUBANY(cv).any_ptr = sv;
5224 sv_setpv((SV*)cv, ""); /* prototype is "" */
5232 =for apidoc U||newXS
5234 Used by C<xsubpp> to hook up XSUBs as Perl subs.
5240 Perl_newXS(pTHX_ char *name, XSUBADDR_t subaddr, char *filename)
5242 GV *gv = gv_fetchpv(name ? name :
5243 (PL_curstash ? "__ANON__" : "__ANON__::__ANON__"),
5244 GV_ADDMULTI, SVt_PVCV);
5247 if ((cv = (name ? GvCV(gv) : Nullcv))) {
5249 /* just a cached method */
5253 else if (CvROOT(cv) || CvXSUB(cv) || GvASSUMECV(gv)) {
5254 /* already defined (or promised) */
5255 if (ckWARN(WARN_REDEFINE) && !(CvGV(cv) && GvSTASH(CvGV(cv))
5256 && strEQ(HvNAME(GvSTASH(CvGV(cv))), "autouse"))) {
5257 line_t oldline = CopLINE(PL_curcop);
5258 if (PL_copline != NOLINE)
5259 CopLINE_set(PL_curcop, PL_copline);
5260 Perl_warner(aTHX_ packWARN(WARN_REDEFINE),
5261 CvCONST(cv) ? "Constant subroutine %s redefined"
5262 : "Subroutine %s redefined"
5264 CopLINE_set(PL_curcop, oldline);
5271 if (cv) /* must reuse cv if autoloaded */
5274 cv = (CV*)NEWSV(1105,0);
5275 sv_upgrade((SV *)cv, SVt_PVCV);
5279 PL_sub_generation++;
5283 #ifdef USE_5005THREADS
5284 New(666, CvMUTEXP(cv), 1, perl_mutex);
5285 MUTEX_INIT(CvMUTEXP(cv));
5287 #endif /* USE_5005THREADS */
5288 (void)gv_fetchfile(filename);
5289 CvFILE(cv) = filename; /* NOTE: not copied, as it is expected to be
5290 an external constant string */
5291 CvXSUB(cv) = subaddr;
5294 char *s = strrchr(name,':');
5300 if (*s != 'B' && *s != 'E' && *s != 'C' && *s != 'I')
5303 if (strEQ(s, "BEGIN")) {
5305 PL_beginav = newAV();
5306 av_push(PL_beginav, (SV*)cv);
5307 GvCV(gv) = 0; /* cv has been hijacked */
5309 else if (strEQ(s, "END")) {
5312 av_unshift(PL_endav, 1);
5313 av_store(PL_endav, 0, (SV*)cv);
5314 GvCV(gv) = 0; /* cv has been hijacked */
5316 else if (strEQ(s, "CHECK")) {
5318 PL_checkav = newAV();
5319 if (PL_main_start && ckWARN(WARN_VOID))
5320 Perl_warner(aTHX_ packWARN(WARN_VOID), "Too late to run CHECK block");
5321 av_unshift(PL_checkav, 1);
5322 av_store(PL_checkav, 0, (SV*)cv);
5323 GvCV(gv) = 0; /* cv has been hijacked */
5325 else if (strEQ(s, "INIT")) {
5327 PL_initav = newAV();
5328 if (PL_main_start && ckWARN(WARN_VOID))
5329 Perl_warner(aTHX_ packWARN(WARN_VOID), "Too late to run INIT block");
5330 av_push(PL_initav, (SV*)cv);
5331 GvCV(gv) = 0; /* cv has been hijacked */
5342 Perl_newFORM(pTHX_ I32 floor, OP *o, OP *block)
5351 name = SvPVx(cSVOPo->op_sv, n_a);
5354 gv = gv_fetchpv(name,TRUE, SVt_PVFM);
5355 #ifdef GV_UNIQUE_CHECK
5357 Perl_croak(aTHX_ "Bad symbol for form (GV is unique)");
5361 if ((cv = GvFORM(gv))) {
5362 if (ckWARN(WARN_REDEFINE)) {
5363 line_t oldline = CopLINE(PL_curcop);
5364 if (PL_copline != NOLINE)
5365 CopLINE_set(PL_curcop, PL_copline);
5366 Perl_warner(aTHX_ packWARN(WARN_REDEFINE), "Format %s redefined",name);
5367 CopLINE_set(PL_curcop, oldline);
5374 CvFILE_set_from_cop(cv, PL_curcop);
5376 for (ix = AvFILLp(PL_comppad); ix > 0; ix--) {
5377 if (!SvPADMY(PL_curpad[ix]) && !SvIMMORTAL(PL_curpad[ix]))
5378 SvPADTMP_on(PL_curpad[ix]);
5381 CvROOT(cv) = newUNOP(OP_LEAVEWRITE, 0, scalarseq(block));
5382 CvROOT(cv)->op_private |= OPpREFCOUNTED;
5383 OpREFCNT_set(CvROOT(cv), 1);
5384 CvSTART(cv) = LINKLIST(CvROOT(cv));
5385 CvROOT(cv)->op_next = 0;
5386 CALL_PEEP(CvSTART(cv));
5388 PL_copline = NOLINE;
5393 Perl_newANONLIST(pTHX_ OP *o)
5395 return newUNOP(OP_REFGEN, 0,
5396 mod(list(convert(OP_ANONLIST, 0, o)), OP_REFGEN));
5400 Perl_newANONHASH(pTHX_ OP *o)
5402 return newUNOP(OP_REFGEN, 0,
5403 mod(list(convert(OP_ANONHASH, 0, o)), OP_REFGEN));
5407 Perl_newANONSUB(pTHX_ I32 floor, OP *proto, OP *block)
5409 return newANONATTRSUB(floor, proto, Nullop, block);
5413 Perl_newANONATTRSUB(pTHX_ I32 floor, OP *proto, OP *attrs, OP *block)
5415 return newUNOP(OP_REFGEN, 0,
5416 newSVOP(OP_ANONCODE, 0,
5417 (SV*)newATTRSUB(floor, 0, proto, attrs, block)));
5421 Perl_oopsAV(pTHX_ OP *o)
5423 switch (o->op_type) {
5425 o->op_type = OP_PADAV;
5426 o->op_ppaddr = PL_ppaddr[OP_PADAV];
5427 return ref(o, OP_RV2AV);
5430 o->op_type = OP_RV2AV;
5431 o->op_ppaddr = PL_ppaddr[OP_RV2AV];
5436 if (ckWARN_d(WARN_INTERNAL))
5437 Perl_warner(aTHX_ packWARN(WARN_INTERNAL), "oops: oopsAV");
5444 Perl_oopsHV(pTHX_ OP *o)
5446 switch (o->op_type) {
5449 o->op_type = OP_PADHV;
5450 o->op_ppaddr = PL_ppaddr[OP_PADHV];
5451 return ref(o, OP_RV2HV);
5455 o->op_type = OP_RV2HV;
5456 o->op_ppaddr = PL_ppaddr[OP_RV2HV];
5461 if (ckWARN_d(WARN_INTERNAL))
5462 Perl_warner(aTHX_ packWARN(WARN_INTERNAL), "oops: oopsHV");
5469 Perl_newAVREF(pTHX_ OP *o)
5471 if (o->op_type == OP_PADANY) {
5472 o->op_type = OP_PADAV;
5473 o->op_ppaddr = PL_ppaddr[OP_PADAV];
5476 else if ((o->op_type == OP_RV2AV || o->op_type == OP_PADAV)
5477 && ckWARN(WARN_DEPRECATED)) {
5478 Perl_warner(aTHX_ packWARN(WARN_DEPRECATED),
5479 "Using an array as a reference is deprecated");
5481 return newUNOP(OP_RV2AV, 0, scalar(o));
5485 Perl_newGVREF(pTHX_ I32 type, OP *o)
5487 if (type == OP_MAPSTART || type == OP_GREPSTART || type == OP_SORT)
5488 return newUNOP(OP_NULL, 0, o);
5489 return ref(newUNOP(OP_RV2GV, OPf_REF, o), type);
5493 Perl_newHVREF(pTHX_ OP *o)
5495 if (o->op_type == OP_PADANY) {
5496 o->op_type = OP_PADHV;
5497 o->op_ppaddr = PL_ppaddr[OP_PADHV];
5500 else if ((o->op_type == OP_RV2HV || o->op_type == OP_PADHV)
5501 && ckWARN(WARN_DEPRECATED)) {
5502 Perl_warner(aTHX_ packWARN(WARN_DEPRECATED),
5503 "Using a hash as a reference is deprecated");
5505 return newUNOP(OP_RV2HV, 0, scalar(o));
5509 Perl_oopsCV(pTHX_ OP *o)
5511 Perl_croak(aTHX_ "NOT IMPL LINE %d",__LINE__);
5517 Perl_newCVREF(pTHX_ I32 flags, OP *o)
5519 return newUNOP(OP_RV2CV, flags, scalar(o));
5523 Perl_newSVREF(pTHX_ OP *o)
5525 if (o->op_type == OP_PADANY) {
5526 o->op_type = OP_PADSV;
5527 o->op_ppaddr = PL_ppaddr[OP_PADSV];
5530 else if (o->op_type == OP_THREADSV && !(o->op_flags & OPpDONE_SVREF)) {
5531 o->op_flags |= OPpDONE_SVREF;
5534 return newUNOP(OP_RV2SV, 0, scalar(o));
5537 /* Check routines. */
5540 Perl_ck_anoncode(pTHX_ OP *o)
5545 name = NEWSV(1106,0);
5546 sv_upgrade(name, SVt_PVNV);
5547 sv_setpvn(name, "&", 1);
5550 ix = pad_alloc(o->op_type, SVs_PADMY);
5551 av_store(PL_comppad_name, ix, name);
5552 av_store(PL_comppad, ix, cSVOPo->op_sv);
5553 SvPADMY_on(cSVOPo->op_sv);
5554 cSVOPo->op_sv = Nullsv;
5555 cSVOPo->op_targ = ix;
5560 Perl_ck_bitop(pTHX_ OP *o)
5562 #define OP_IS_NUMCOMPARE(op) \
5563 ((op) == OP_LT || (op) == OP_I_LT || \
5564 (op) == OP_GT || (op) == OP_I_GT || \
5565 (op) == OP_LE || (op) == OP_I_LE || \
5566 (op) == OP_GE || (op) == OP_I_GE || \
5567 (op) == OP_EQ || (op) == OP_I_EQ || \
5568 (op) == OP_NE || (op) == OP_I_NE || \
5569 (op) == OP_NCMP || (op) == OP_I_NCMP)
5570 o->op_private = (U8)(PL_hints & HINT_PRIVATE_MASK);
5571 if (o->op_type == OP_BIT_OR
5572 || o->op_type == OP_BIT_AND
5573 || o->op_type == OP_BIT_XOR)
5575 OPCODE typfirst = cBINOPo->op_first->op_type;
5576 OPCODE typlast = cBINOPo->op_first->op_sibling->op_type;
5577 if (OP_IS_NUMCOMPARE(typfirst) || OP_IS_NUMCOMPARE(typlast))
5578 if (ckWARN(WARN_PRECEDENCE))
5579 Perl_warner(aTHX_ packWARN(WARN_PRECEDENCE),
5580 "Possible precedence problem on bitwise %c operator",
5581 o->op_type == OP_BIT_OR ? '|'
5582 : o->op_type == OP_BIT_AND ? '&' : '^'
5589 Perl_ck_concat(pTHX_ OP *o)
5591 if (cUNOPo->op_first->op_type == OP_CONCAT)
5592 o->op_flags |= OPf_STACKED;
5597 Perl_ck_spair(pTHX_ OP *o)
5599 if (o->op_flags & OPf_KIDS) {
5602 OPCODE type = o->op_type;
5603 o = modkids(ck_fun(o), type);
5604 kid = cUNOPo->op_first;
5605 newop = kUNOP->op_first->op_sibling;
5607 (newop->op_sibling ||
5608 !(PL_opargs[newop->op_type] & OA_RETSCALAR) ||
5609 newop->op_type == OP_PADAV || newop->op_type == OP_PADHV ||
5610 newop->op_type == OP_RV2AV || newop->op_type == OP_RV2HV)) {
5614 op_free(kUNOP->op_first);
5615 kUNOP->op_first = newop;
5617 o->op_ppaddr = PL_ppaddr[++o->op_type];
5622 Perl_ck_delete(pTHX_ OP *o)
5626 if (o->op_flags & OPf_KIDS) {
5627 OP *kid = cUNOPo->op_first;
5628 switch (kid->op_type) {
5630 o->op_flags |= OPf_SPECIAL;
5633 o->op_private |= OPpSLICE;
5636 o->op_flags |= OPf_SPECIAL;
5641 Perl_croak(aTHX_ "%s argument is not a HASH or ARRAY element or slice",
5650 Perl_ck_die(pTHX_ OP *o)
5653 if (VMSISH_HUSHED) o->op_private |= OPpHUSH_VMSISH;
5659 Perl_ck_eof(pTHX_ OP *o)
5661 I32 type = o->op_type;
5663 if (o->op_flags & OPf_KIDS) {
5664 if (cLISTOPo->op_first->op_type == OP_STUB) {
5666 o = newUNOP(type, OPf_SPECIAL,
5667 newGVOP(OP_GV, 0, gv_fetchpv("main::ARGV", TRUE, SVt_PVAV)));
5675 Perl_ck_eval(pTHX_ OP *o)
5677 PL_hints |= HINT_BLOCK_SCOPE;
5678 if (o->op_flags & OPf_KIDS) {
5679 SVOP *kid = (SVOP*)cUNOPo->op_first;
5682 o->op_flags &= ~OPf_KIDS;
5685 else if (kid->op_type == OP_LINESEQ) {
5688 kid->op_next = o->op_next;
5689 cUNOPo->op_first = 0;
5692 NewOp(1101, enter, 1, LOGOP);
5693 enter->op_type = OP_ENTERTRY;
5694 enter->op_ppaddr = PL_ppaddr[OP_ENTERTRY];
5695 enter->op_private = 0;
5697 /* establish postfix order */
5698 enter->op_next = (OP*)enter;
5700 o = prepend_elem(OP_LINESEQ, (OP*)enter, (OP*)kid);
5701 o->op_type = OP_LEAVETRY;
5702 o->op_ppaddr = PL_ppaddr[OP_LEAVETRY];
5703 enter->op_other = o;
5711 o = newUNOP(OP_ENTEREVAL, 0, newDEFSVOP());
5713 o->op_targ = (PADOFFSET)PL_hints;
5718 Perl_ck_exit(pTHX_ OP *o)
5721 HV *table = GvHV(PL_hintgv);
5723 SV **svp = hv_fetch(table, "vmsish_exit", 11, FALSE);
5724 if (svp && *svp && SvTRUE(*svp))
5725 o->op_private |= OPpEXIT_VMSISH;
5727 if (VMSISH_HUSHED) o->op_private |= OPpHUSH_VMSISH;
5733 Perl_ck_exec(pTHX_ OP *o)
5736 if (o->op_flags & OPf_STACKED) {
5738 kid = cUNOPo->op_first->op_sibling;
5739 if (kid->op_type == OP_RV2GV)
5748 Perl_ck_exists(pTHX_ OP *o)
5751 if (o->op_flags & OPf_KIDS) {
5752 OP *kid = cUNOPo->op_first;
5753 if (kid->op_type == OP_ENTERSUB) {
5754 (void) ref(kid, o->op_type);
5755 if (kid->op_type != OP_RV2CV && !PL_error_count)
5756 Perl_croak(aTHX_ "%s argument is not a subroutine name",
5758 o->op_private |= OPpEXISTS_SUB;
5760 else if (kid->op_type == OP_AELEM)
5761 o->op_flags |= OPf_SPECIAL;
5762 else if (kid->op_type != OP_HELEM)
5763 Perl_croak(aTHX_ "%s argument is not a HASH or ARRAY element",
5772 Perl_ck_gvconst(pTHX_ register OP *o)
5774 o = fold_constants(o);
5775 if (o->op_type == OP_CONST)
5782 Perl_ck_rvconst(pTHX_ register OP *o)
5784 SVOP *kid = (SVOP*)cUNOPo->op_first;
5786 o->op_private |= (PL_hints & HINT_STRICT_REFS);
5787 if (kid->op_type == OP_CONST) {
5791 SV *kidsv = kid->op_sv;
5794 /* Is it a constant from cv_const_sv()? */
5795 if (SvROK(kidsv) && SvREADONLY(kidsv)) {
5796 SV *rsv = SvRV(kidsv);
5797 int svtype = SvTYPE(rsv);
5798 char *badtype = Nullch;
5800 switch (o->op_type) {
5802 if (svtype > SVt_PVMG)
5803 badtype = "a SCALAR";
5806 if (svtype != SVt_PVAV)
5807 badtype = "an ARRAY";
5810 if (svtype != SVt_PVHV) {
5811 if (svtype == SVt_PVAV) { /* pseudohash? */
5812 SV **ksv = av_fetch((AV*)rsv, 0, FALSE);
5813 if (ksv && SvROK(*ksv)
5814 && SvTYPE(SvRV(*ksv)) == SVt_PVHV)
5823 if (svtype != SVt_PVCV)
5828 Perl_croak(aTHX_ "Constant is not %s reference", badtype);
5831 name = SvPV(kidsv, n_a);
5832 if ((PL_hints & HINT_STRICT_REFS) && (kid->op_private & OPpCONST_BARE)) {
5833 char *badthing = Nullch;
5834 switch (o->op_type) {
5836 badthing = "a SCALAR";
5839 badthing = "an ARRAY";
5842 badthing = "a HASH";
5847 "Can't use bareword (\"%s\") as %s ref while \"strict refs\" in use",
5851 * This is a little tricky. We only want to add the symbol if we
5852 * didn't add it in the lexer. Otherwise we get duplicate strict
5853 * warnings. But if we didn't add it in the lexer, we must at
5854 * least pretend like we wanted to add it even if it existed before,
5855 * or we get possible typo warnings. OPpCONST_ENTERED says
5856 * whether the lexer already added THIS instance of this symbol.
5858 iscv = (o->op_type == OP_RV2CV) * 2;
5860 gv = gv_fetchpv(name,
5861 iscv | !(kid->op_private & OPpCONST_ENTERED),
5864 : o->op_type == OP_RV2SV
5866 : o->op_type == OP_RV2AV
5868 : o->op_type == OP_RV2HV
5871 } while (!gv && !(kid->op_private & OPpCONST_ENTERED) && !iscv++);
5873 kid->op_type = OP_GV;
5874 SvREFCNT_dec(kid->op_sv);
5876 /* XXX hack: dependence on sizeof(PADOP) <= sizeof(SVOP) */
5877 kPADOP->op_padix = pad_alloc(OP_GV, SVs_PADTMP);
5878 SvREFCNT_dec(PL_curpad[kPADOP->op_padix]);
5880 PL_curpad[kPADOP->op_padix] = SvREFCNT_inc(gv);
5882 kid->op_sv = SvREFCNT_inc(gv);
5884 kid->op_private = 0;
5885 kid->op_ppaddr = PL_ppaddr[OP_GV];
5892 Perl_ck_ftst(pTHX_ OP *o)
5894 I32 type = o->op_type;
5896 if (o->op_flags & OPf_REF) {
5899 else if (o->op_flags & OPf_KIDS && cUNOPo->op_first->op_type != OP_STUB) {
5900 SVOP *kid = (SVOP*)cUNOPo->op_first;
5902 if (kid->op_type == OP_CONST && (kid->op_private & OPpCONST_BARE)) {
5904 OP *newop = newGVOP(type, OPf_REF,
5905 gv_fetchpv(SvPVx(kid->op_sv, n_a), TRUE, SVt_PVIO));
5912 if (type == OP_FTTTY)
5913 o = newGVOP(type, OPf_REF, gv_fetchpv("main::STDIN", TRUE,
5916 o = newUNOP(type, 0, newDEFSVOP());
5922 Perl_ck_fun(pTHX_ OP *o)
5928 int type = o->op_type;
5929 register I32 oa = PL_opargs[type] >> OASHIFT;
5931 if (o->op_flags & OPf_STACKED) {
5932 if ((oa & OA_OPTIONAL) && (oa >> 4) && !((oa >> 4) & OA_OPTIONAL))
5935 return no_fh_allowed(o);
5938 if (o->op_flags & OPf_KIDS) {
5940 tokid = &cLISTOPo->op_first;
5941 kid = cLISTOPo->op_first;
5942 if (kid->op_type == OP_PUSHMARK ||
5943 (kid->op_type == OP_NULL && kid->op_targ == OP_PUSHMARK))
5945 tokid = &kid->op_sibling;
5946 kid = kid->op_sibling;
5948 if (!kid && PL_opargs[type] & OA_DEFGV)
5949 *tokid = kid = newDEFSVOP();
5953 sibl = kid->op_sibling;
5956 /* list seen where single (scalar) arg expected? */
5957 if (numargs == 1 && !(oa >> 4)
5958 && kid->op_type == OP_LIST && type != OP_SCALAR)
5960 return too_many_arguments(o,PL_op_desc[type]);
5973 if ((type == OP_PUSH || type == OP_UNSHIFT)
5974 && !kid->op_sibling && ckWARN(WARN_SYNTAX))
5975 Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
5976 "Useless use of %s with no values",
5979 if (kid->op_type == OP_CONST &&
5980 (kid->op_private & OPpCONST_BARE))
5982 char *name = SvPVx(((SVOP*)kid)->op_sv, n_a);
5983 OP *newop = newAVREF(newGVOP(OP_GV, 0,
5984 gv_fetchpv(name, TRUE, SVt_PVAV) ));
5985 if (ckWARN2(WARN_DEPRECATED, WARN_SYNTAX))
5986 Perl_warner(aTHX_ packWARN2(WARN_DEPRECATED, WARN_SYNTAX),
5987 "Array @%s missing the @ in argument %"IVdf" of %s()",
5988 name, (IV)numargs, PL_op_desc[type]);
5991 kid->op_sibling = sibl;
5994 else if (kid->op_type != OP_RV2AV && kid->op_type != OP_PADAV)
5995 bad_type(numargs, "array", PL_op_desc[type], kid);
5999 if (kid->op_type == OP_CONST &&
6000 (kid->op_private & OPpCONST_BARE))
6002 char *name = SvPVx(((SVOP*)kid)->op_sv, n_a);
6003 OP *newop = newHVREF(newGVOP(OP_GV, 0,
6004 gv_fetchpv(name, TRUE, SVt_PVHV) ));
6005 if (ckWARN2(WARN_DEPRECATED, WARN_SYNTAX))
6006 Perl_warner(aTHX_ packWARN2(WARN_DEPRECATED, WARN_SYNTAX),
6007 "Hash %%%s missing the %% in argument %"IVdf" of %s()",
6008 name, (IV)numargs, PL_op_desc[type]);
6011 kid->op_sibling = sibl;
6014 else if (kid->op_type != OP_RV2HV && kid->op_type != OP_PADHV)
6015 bad_type(numargs, "hash", PL_op_desc[type], kid);
6020 OP *newop = newUNOP(OP_NULL, 0, kid);
6021 kid->op_sibling = 0;
6023 newop->op_next = newop;
6025 kid->op_sibling = sibl;
6030 if (kid->op_type != OP_GV && kid->op_type != OP_RV2GV) {
6031 if (kid->op_type == OP_CONST &&
6032 (kid->op_private & OPpCONST_BARE))
6034 OP *newop = newGVOP(OP_GV, 0,
6035 gv_fetchpv(SvPVx(((SVOP*)kid)->op_sv, n_a), TRUE,
6037 if (!(o->op_private & 1) && /* if not unop */
6038 kid == cLISTOPo->op_last)
6039 cLISTOPo->op_last = newop;
6043 else if (kid->op_type == OP_READLINE) {
6044 /* neophyte patrol: open(<FH>), close(<FH>) etc. */
6045 bad_type(numargs, "HANDLE", OP_DESC(o), kid);
6048 I32 flags = OPf_SPECIAL;
6052 /* is this op a FH constructor? */
6053 if (is_handle_constructor(o,numargs)) {
6054 char *name = Nullch;
6058 /* Set a flag to tell rv2gv to vivify
6059 * need to "prove" flag does not mean something
6060 * else already - NI-S 1999/05/07
6063 if (kid->op_type == OP_PADSV) {
6064 SV **namep = av_fetch(PL_comppad_name,
6066 if (namep && *namep)
6067 name = SvPV(*namep, len);
6069 else if (kid->op_type == OP_RV2SV
6070 && kUNOP->op_first->op_type == OP_GV)
6072 GV *gv = cGVOPx_gv(kUNOP->op_first);
6074 len = GvNAMELEN(gv);
6076 else if (kid->op_type == OP_AELEM
6077 || kid->op_type == OP_HELEM)
6079 name = "__ANONIO__";
6085 targ = pad_alloc(OP_RV2GV, SVs_PADTMP);
6086 namesv = PL_curpad[targ];
6087 (void)SvUPGRADE(namesv, SVt_PV);
6089 sv_setpvn(namesv, "$", 1);
6090 sv_catpvn(namesv, name, len);
6093 kid->op_sibling = 0;
6094 kid = newUNOP(OP_RV2GV, flags, scalar(kid));
6095 kid->op_targ = targ;
6096 kid->op_private |= priv;
6098 kid->op_sibling = sibl;
6104 mod(scalar(kid), type);
6108 tokid = &kid->op_sibling;
6109 kid = kid->op_sibling;
6111 o->op_private |= numargs;
6113 return too_many_arguments(o,OP_DESC(o));
6116 else if (PL_opargs[type] & OA_DEFGV) {
6118 return newUNOP(type, 0, newDEFSVOP());
6122 while (oa & OA_OPTIONAL)
6124 if (oa && oa != OA_LIST)
6125 return too_few_arguments(o,OP_DESC(o));
6131 Perl_ck_glob(pTHX_ OP *o)
6136 if ((o->op_flags & OPf_KIDS) && !cLISTOPo->op_first->op_sibling)
6137 append_elem(OP_GLOB, o, newDEFSVOP());
6139 if (!((gv = gv_fetchpv("glob", FALSE, SVt_PVCV))
6140 && GvCVu(gv) && GvIMPORTED_CV(gv)))
6142 gv = gv_fetchpv("CORE::GLOBAL::glob", FALSE, SVt_PVCV);
6145 #if !defined(PERL_EXTERNAL_GLOB)
6146 /* XXX this can be tightened up and made more failsafe. */
6150 Perl_load_module(aTHX_ PERL_LOADMOD_NOIMPORT,
6151 newSVpvn("File::Glob", 10), Nullsv, Nullsv, Nullsv);
6152 gv = gv_fetchpv("CORE::GLOBAL::glob", FALSE, SVt_PVCV);
6153 glob_gv = gv_fetchpv("File::Glob::csh_glob", FALSE, SVt_PVCV);
6154 GvCV(gv) = GvCV(glob_gv);
6155 SvREFCNT_inc((SV*)GvCV(gv));
6156 GvIMPORTED_CV_on(gv);
6159 #endif /* PERL_EXTERNAL_GLOB */
6161 if (gv && GvCVu(gv) && GvIMPORTED_CV(gv)) {
6162 append_elem(OP_GLOB, o,
6163 newSVOP(OP_CONST, 0, newSViv(PL_glob_index++)));
6164 o->op_type = OP_LIST;
6165 o->op_ppaddr = PL_ppaddr[OP_LIST];
6166 cLISTOPo->op_first->op_type = OP_PUSHMARK;
6167 cLISTOPo->op_first->op_ppaddr = PL_ppaddr[OP_PUSHMARK];
6168 o = newUNOP(OP_ENTERSUB, OPf_STACKED,
6169 append_elem(OP_LIST, o,
6170 scalar(newUNOP(OP_RV2CV, 0,
6171 newGVOP(OP_GV, 0, gv)))));
6172 o = newUNOP(OP_NULL, 0, ck_subr(o));
6173 o->op_targ = OP_GLOB; /* hint at what it used to be */
6176 gv = newGVgen("main");
6178 append_elem(OP_GLOB, o, newGVOP(OP_GV, 0, gv));
6184 Perl_ck_grep(pTHX_ OP *o)
6188 OPCODE type = o->op_type == OP_GREPSTART ? OP_GREPWHILE : OP_MAPWHILE;
6190 o->op_ppaddr = PL_ppaddr[OP_GREPSTART];
6191 NewOp(1101, gwop, 1, LOGOP);
6193 if (o->op_flags & OPf_STACKED) {
6196 kid = cLISTOPo->op_first->op_sibling;
6197 for (k = cLISTOPo->op_first->op_sibling->op_next; k; k = k->op_next) {
6200 kid->op_next = (OP*)gwop;
6201 o->op_flags &= ~OPf_STACKED;
6203 kid = cLISTOPo->op_first->op_sibling;
6204 if (type == OP_MAPWHILE)
6211 kid = cLISTOPo->op_first->op_sibling;
6212 if (kid->op_type != OP_NULL)
6213 Perl_croak(aTHX_ "panic: ck_grep");
6214 kid = kUNOP->op_first;
6216 gwop->op_type = type;
6217 gwop->op_ppaddr = PL_ppaddr[type];
6218 gwop->op_first = listkids(o);
6219 gwop->op_flags |= OPf_KIDS;
6220 gwop->op_private = 1;
6221 gwop->op_other = LINKLIST(kid);
6222 gwop->op_targ = pad_alloc(type, SVs_PADTMP);
6223 kid->op_next = (OP*)gwop;
6225 kid = cLISTOPo->op_first->op_sibling;
6226 if (!kid || !kid->op_sibling)
6227 return too_few_arguments(o,OP_DESC(o));
6228 for (kid = kid->op_sibling; kid; kid = kid->op_sibling)
6229 mod(kid, OP_GREPSTART);
6235 Perl_ck_index(pTHX_ OP *o)
6237 if (o->op_flags & OPf_KIDS) {
6238 OP *kid = cLISTOPo->op_first->op_sibling; /* get past pushmark */
6240 kid = kid->op_sibling; /* get past "big" */
6241 if (kid && kid->op_type == OP_CONST)
6242 fbm_compile(((SVOP*)kid)->op_sv, 0);
6248 Perl_ck_lengthconst(pTHX_ OP *o)
6250 /* XXX length optimization goes here */
6255 Perl_ck_lfun(pTHX_ OP *o)
6257 OPCODE type = o->op_type;
6258 return modkids(ck_fun(o), type);
6262 Perl_ck_defined(pTHX_ OP *o) /* 19990527 MJD */
6264 if ((o->op_flags & OPf_KIDS) && ckWARN2(WARN_DEPRECATED, WARN_SYNTAX)) {
6265 switch (cUNOPo->op_first->op_type) {
6267 /* This is needed for
6268 if (defined %stash::)
6269 to work. Do not break Tk.
6271 break; /* Globals via GV can be undef */
6273 case OP_AASSIGN: /* Is this a good idea? */
6274 Perl_warner(aTHX_ packWARN2(WARN_DEPRECATED, WARN_SYNTAX),
6275 "defined(@array) is deprecated");
6276 Perl_warner(aTHX_ packWARN2(WARN_DEPRECATED, WARN_SYNTAX),
6277 "\t(Maybe you should just omit the defined()?)\n");
6280 /* This is needed for
6281 if (defined %stash::)
6282 to work. Do not break Tk.
6284 break; /* Globals via GV can be undef */
6286 Perl_warner(aTHX_ packWARN2(WARN_DEPRECATED, WARN_SYNTAX),
6287 "defined(%%hash) is deprecated");
6288 Perl_warner(aTHX_ packWARN2(WARN_DEPRECATED, WARN_SYNTAX),
6289 "\t(Maybe you should just omit the defined()?)\n");
6300 Perl_ck_rfun(pTHX_ OP *o)
6302 OPCODE type = o->op_type;
6303 return refkids(ck_fun(o), type);
6307 Perl_ck_listiob(pTHX_ OP *o)
6311 kid = cLISTOPo->op_first;
6314 kid = cLISTOPo->op_first;
6316 if (kid->op_type == OP_PUSHMARK)
6317 kid = kid->op_sibling;
6318 if (kid && o->op_flags & OPf_STACKED)
6319 kid = kid->op_sibling;
6320 else if (kid && !kid->op_sibling) { /* print HANDLE; */
6321 if (kid->op_type == OP_CONST && kid->op_private & OPpCONST_BARE) {
6322 o->op_flags |= OPf_STACKED; /* make it a filehandle */
6323 kid = newUNOP(OP_RV2GV, OPf_REF, scalar(kid));
6324 cLISTOPo->op_first->op_sibling = kid;
6325 cLISTOPo->op_last = kid;
6326 kid = kid->op_sibling;
6331 append_elem(o->op_type, o, newDEFSVOP());
6337 Perl_ck_sassign(pTHX_ OP *o)
6339 OP *kid = cLISTOPo->op_first;
6340 /* has a disposable target? */
6341 if ((PL_opargs[kid->op_type] & OA_TARGLEX)
6342 && !(kid->op_flags & OPf_STACKED)
6343 /* Cannot steal the second time! */
6344 && !(kid->op_private & OPpTARGET_MY))
6346 OP *kkid = kid->op_sibling;
6348 /* Can just relocate the target. */
6349 if (kkid && kkid->op_type == OP_PADSV
6350 && !(kkid->op_private & OPpLVAL_INTRO))
6352 kid->op_targ = kkid->op_targ;
6354 /* Now we do not need PADSV and SASSIGN. */
6355 kid->op_sibling = o->op_sibling; /* NULL */
6356 cLISTOPo->op_first = NULL;
6359 kid->op_private |= OPpTARGET_MY; /* Used for context settings */
6367 Perl_ck_match(pTHX_ OP *o)
6369 o->op_private |= OPpRUNTIME;
6374 Perl_ck_method(pTHX_ OP *o)
6376 OP *kid = cUNOPo->op_first;
6377 if (kid->op_type == OP_CONST) {
6378 SV* sv = kSVOP->op_sv;
6379 if (!(strchr(SvPVX(sv), ':') || strchr(SvPVX(sv), '\''))) {
6381 if (!SvREADONLY(sv) || !SvFAKE(sv)) {
6382 sv = newSVpvn_share(SvPVX(sv), SvCUR(sv), 0);
6385 kSVOP->op_sv = Nullsv;
6387 cmop = newSVOP(OP_METHOD_NAMED, 0, sv);
6396 Perl_ck_null(pTHX_ OP *o)
6402 Perl_ck_open(pTHX_ OP *o)
6404 HV *table = GvHV(PL_hintgv);
6408 svp = hv_fetch(table, "open_IN", 7, FALSE);
6410 mode = mode_from_discipline(*svp);
6411 if (mode & O_BINARY)
6412 o->op_private |= OPpOPEN_IN_RAW;
6413 else if (mode & O_TEXT)
6414 o->op_private |= OPpOPEN_IN_CRLF;
6417 svp = hv_fetch(table, "open_OUT", 8, FALSE);
6419 mode = mode_from_discipline(*svp);
6420 if (mode & O_BINARY)
6421 o->op_private |= OPpOPEN_OUT_RAW;
6422 else if (mode & O_TEXT)
6423 o->op_private |= OPpOPEN_OUT_CRLF;
6426 if (o->op_type == OP_BACKTICK)
6432 Perl_ck_repeat(pTHX_ OP *o)
6434 if (cBINOPo->op_first->op_flags & OPf_PARENS) {
6435 o->op_private |= OPpREPEAT_DOLIST;
6436 cBINOPo->op_first = force_list(cBINOPo->op_first);
6444 Perl_ck_require(pTHX_ OP *o)
6448 if (o->op_flags & OPf_KIDS) { /* Shall we supply missing .pm? */
6449 SVOP *kid = (SVOP*)cUNOPo->op_first;
6451 if (kid->op_type == OP_CONST && (kid->op_private & OPpCONST_BARE)) {
6453 for (s = SvPVX(kid->op_sv); *s; s++) {
6454 if (*s == ':' && s[1] == ':') {
6456 Move(s+2, s+1, strlen(s+2)+1, char);
6457 --SvCUR(kid->op_sv);
6460 if (SvREADONLY(kid->op_sv)) {
6461 SvREADONLY_off(kid->op_sv);
6462 sv_catpvn(kid->op_sv, ".pm", 3);
6463 SvREADONLY_on(kid->op_sv);
6466 sv_catpvn(kid->op_sv, ".pm", 3);
6470 /* handle override, if any */
6471 gv = gv_fetchpv("require", FALSE, SVt_PVCV);
6472 if (!(gv && GvCVu(gv) && GvIMPORTED_CV(gv)))
6473 gv = gv_fetchpv("CORE::GLOBAL::require", FALSE, SVt_PVCV);
6475 if (gv && GvCVu(gv) && GvIMPORTED_CV(gv)) {
6476 OP *kid = cUNOPo->op_first;
6477 cUNOPo->op_first = 0;
6479 return ck_subr(newUNOP(OP_ENTERSUB, OPf_STACKED,
6480 append_elem(OP_LIST, kid,
6481 scalar(newUNOP(OP_RV2CV, 0,
6490 Perl_ck_return(pTHX_ OP *o)
6493 if (CvLVALUE(PL_compcv)) {
6494 for (kid = cLISTOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
6495 mod(kid, OP_LEAVESUBLV);
6502 Perl_ck_retarget(pTHX_ OP *o)
6504 Perl_croak(aTHX_ "NOT IMPL LINE %d",__LINE__);
6511 Perl_ck_select(pTHX_ OP *o)
6514 if (o->op_flags & OPf_KIDS) {
6515 kid = cLISTOPo->op_first->op_sibling; /* get past pushmark */
6516 if (kid && kid->op_sibling) {
6517 o->op_type = OP_SSELECT;
6518 o->op_ppaddr = PL_ppaddr[OP_SSELECT];
6520 return fold_constants(o);
6524 kid = cLISTOPo->op_first->op_sibling; /* get past pushmark */
6525 if (kid && kid->op_type == OP_RV2GV)
6526 kid->op_private &= ~HINT_STRICT_REFS;
6531 Perl_ck_shift(pTHX_ OP *o)
6533 I32 type = o->op_type;
6535 if (!(o->op_flags & OPf_KIDS)) {
6539 #ifdef USE_5005THREADS
6540 if (!CvUNIQUE(PL_compcv)) {
6541 argop = newOP(OP_PADAV, OPf_REF);
6542 argop->op_targ = 0; /* PL_curpad[0] is @_ */
6545 argop = newUNOP(OP_RV2AV, 0,
6546 scalar(newGVOP(OP_GV, 0,
6547 gv_fetchpv("ARGV", TRUE, SVt_PVAV))));
6550 argop = newUNOP(OP_RV2AV, 0,
6551 scalar(newGVOP(OP_GV, 0, !CvUNIQUE(PL_compcv) ?
6552 PL_defgv : gv_fetchpv("ARGV", TRUE, SVt_PVAV))));
6553 #endif /* USE_5005THREADS */
6554 return newUNOP(type, 0, scalar(argop));
6556 return scalar(modkids(ck_fun(o), type));
6560 Perl_ck_sort(pTHX_ OP *o)
6564 if (o->op_type == OP_SORT && o->op_flags & OPf_STACKED)
6566 firstkid = cLISTOPo->op_first->op_sibling; /* get past pushmark */
6567 if (o->op_flags & OPf_STACKED) { /* may have been cleared */
6569 OP *kid = cUNOPx(firstkid)->op_first; /* get past null */
6571 if (kid->op_type == OP_SCOPE || kid->op_type == OP_LEAVE) {
6573 if (kid->op_type == OP_SCOPE) {
6577 else if (kid->op_type == OP_LEAVE) {
6578 if (o->op_type == OP_SORT) {
6579 op_null(kid); /* wipe out leave */
6582 for (k = kLISTOP->op_first->op_next; k; k = k->op_next) {
6583 if (k->op_next == kid)
6585 /* don't descend into loops */
6586 else if (k->op_type == OP_ENTERLOOP
6587 || k->op_type == OP_ENTERITER)
6589 k = cLOOPx(k)->op_lastop;
6594 kid->op_next = 0; /* just disconnect the leave */
6595 k = kLISTOP->op_first;
6600 if (o->op_type == OP_SORT) {
6601 /* provide scalar context for comparison function/block */
6607 o->op_flags |= OPf_SPECIAL;
6609 else if (kid->op_type == OP_RV2SV || kid->op_type == OP_PADSV)
6612 firstkid = firstkid->op_sibling;
6615 /* provide list context for arguments */
6616 if (o->op_type == OP_SORT)
6623 S_simplify_sort(pTHX_ OP *o)
6625 register OP *kid = cLISTOPo->op_first->op_sibling; /* get past pushmark */
6629 if (!(o->op_flags & OPf_STACKED))
6631 GvMULTI_on(gv_fetchpv("a", TRUE, SVt_PV));
6632 GvMULTI_on(gv_fetchpv("b", TRUE, SVt_PV));
6633 kid = kUNOP->op_first; /* get past null */
6634 if (kid->op_type != OP_SCOPE)
6636 kid = kLISTOP->op_last; /* get past scope */
6637 switch(kid->op_type) {
6645 k = kid; /* remember this node*/
6646 if (kBINOP->op_first->op_type != OP_RV2SV)
6648 kid = kBINOP->op_first; /* get past cmp */
6649 if (kUNOP->op_first->op_type != OP_GV)
6651 kid = kUNOP->op_first; /* get past rv2sv */
6653 if (GvSTASH(gv) != PL_curstash)
6655 if (strEQ(GvNAME(gv), "a"))
6657 else if (strEQ(GvNAME(gv), "b"))
6661 kid = k; /* back to cmp */
6662 if (kBINOP->op_last->op_type != OP_RV2SV)
6664 kid = kBINOP->op_last; /* down to 2nd arg */
6665 if (kUNOP->op_first->op_type != OP_GV)
6667 kid = kUNOP->op_first; /* get past rv2sv */
6669 if (GvSTASH(gv) != PL_curstash
6671 ? strNE(GvNAME(gv), "a")
6672 : strNE(GvNAME(gv), "b")))
6674 o->op_flags &= ~(OPf_STACKED | OPf_SPECIAL);
6676 o->op_private |= OPpSORT_REVERSE;
6677 if (k->op_type == OP_NCMP)
6678 o->op_private |= OPpSORT_NUMERIC;
6679 if (k->op_type == OP_I_NCMP)
6680 o->op_private |= OPpSORT_NUMERIC | OPpSORT_INTEGER;
6681 kid = cLISTOPo->op_first->op_sibling;
6682 cLISTOPo->op_first->op_sibling = kid->op_sibling; /* bypass old block */
6683 op_free(kid); /* then delete it */
6687 Perl_ck_split(pTHX_ OP *o)
6691 if (o->op_flags & OPf_STACKED)
6692 return no_fh_allowed(o);
6694 kid = cLISTOPo->op_first;
6695 if (kid->op_type != OP_NULL)
6696 Perl_croak(aTHX_ "panic: ck_split");
6697 kid = kid->op_sibling;
6698 op_free(cLISTOPo->op_first);
6699 cLISTOPo->op_first = kid;
6701 cLISTOPo->op_first = kid = newSVOP(OP_CONST, 0, newSVpvn(" ", 1));
6702 cLISTOPo->op_last = kid; /* There was only one element previously */
6705 if (kid->op_type != OP_MATCH || kid->op_flags & OPf_STACKED) {
6706 OP *sibl = kid->op_sibling;
6707 kid->op_sibling = 0;
6708 kid = pmruntime( newPMOP(OP_MATCH, OPf_SPECIAL), kid, Nullop);
6709 if (cLISTOPo->op_first == cLISTOPo->op_last)
6710 cLISTOPo->op_last = kid;
6711 cLISTOPo->op_first = kid;
6712 kid->op_sibling = sibl;
6715 kid->op_type = OP_PUSHRE;
6716 kid->op_ppaddr = PL_ppaddr[OP_PUSHRE];
6718 if (ckWARN(WARN_REGEXP) && ((PMOP *)kid)->op_pmflags & PMf_GLOBAL) {
6719 Perl_warner(aTHX_ packWARN(WARN_REGEXP),
6720 "Use of /g modifier is meaningless in split");
6723 if (!kid->op_sibling)
6724 append_elem(OP_SPLIT, o, newDEFSVOP());
6726 kid = kid->op_sibling;
6729 if (!kid->op_sibling)
6730 append_elem(OP_SPLIT, o, newSVOP(OP_CONST, 0, newSViv(0)));
6732 kid = kid->op_sibling;
6735 if (kid->op_sibling)
6736 return too_many_arguments(o,OP_DESC(o));
6742 Perl_ck_join(pTHX_ OP *o)
6744 if (ckWARN(WARN_SYNTAX)) {
6745 OP *kid = cLISTOPo->op_first->op_sibling;
6746 if (kid && kid->op_type == OP_MATCH) {
6747 char *pmstr = "STRING";
6748 if (PM_GETRE(kPMOP))
6749 pmstr = PM_GETRE(kPMOP)->precomp;
6750 Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
6751 "/%s/ should probably be written as \"%s\"",
6759 Perl_ck_subr(pTHX_ OP *o)
6761 OP *prev = ((cUNOPo->op_first->op_sibling)
6762 ? cUNOPo : ((UNOP*)cUNOPo->op_first))->op_first;
6763 OP *o2 = prev->op_sibling;
6770 I32 contextclass = 0;
6774 o->op_private |= OPpENTERSUB_HASTARG;
6775 for (cvop = o2; cvop->op_sibling; cvop = cvop->op_sibling) ;
6776 if (cvop->op_type == OP_RV2CV) {
6778 o->op_private |= (cvop->op_private & OPpENTERSUB_AMPER);
6779 op_null(cvop); /* disable rv2cv */
6780 tmpop = (SVOP*)((UNOP*)cvop)->op_first;
6781 if (tmpop->op_type == OP_GV && !(o->op_private & OPpENTERSUB_AMPER)) {
6782 GV *gv = cGVOPx_gv(tmpop);
6785 tmpop->op_private |= OPpEARLY_CV;
6786 else if (SvPOK(cv)) {
6787 namegv = CvANON(cv) ? gv : CvGV(cv);
6788 proto = SvPV((SV*)cv, n_a);
6792 else if (cvop->op_type == OP_METHOD || cvop->op_type == OP_METHOD_NAMED) {
6793 if (o2->op_type == OP_CONST)
6794 o2->op_private &= ~OPpCONST_STRICT;
6795 else if (o2->op_type == OP_LIST) {
6796 OP *o = ((UNOP*)o2)->op_first->op_sibling;
6797 if (o && o->op_type == OP_CONST)
6798 o->op_private &= ~OPpCONST_STRICT;
6801 o->op_private |= (PL_hints & HINT_STRICT_REFS);
6802 if (PERLDB_SUB && PL_curstash != PL_debstash)
6803 o->op_private |= OPpENTERSUB_DB;
6804 while (o2 != cvop) {
6808 return too_many_arguments(o, gv_ename(namegv));
6826 if (o2->op_type != OP_REFGEN && o2->op_type != OP_UNDEF)
6828 arg == 1 ? "block or sub {}" : "sub {}",
6829 gv_ename(namegv), o2);
6832 /* '*' allows any scalar type, including bareword */
6835 if (o2->op_type == OP_RV2GV)
6836 goto wrapref; /* autoconvert GLOB -> GLOBref */
6837 else if (o2->op_type == OP_CONST)
6838 o2->op_private &= ~OPpCONST_STRICT;
6839 else if (o2->op_type == OP_ENTERSUB) {
6840 /* accidental subroutine, revert to bareword */
6841 OP *gvop = ((UNOP*)o2)->op_first;
6842 if (gvop && gvop->op_type == OP_NULL) {
6843 gvop = ((UNOP*)gvop)->op_first;
6845 for (; gvop->op_sibling; gvop = gvop->op_sibling)
6848 (gvop->op_private & OPpENTERSUB_NOPAREN) &&
6849 (gvop = ((UNOP*)gvop)->op_first) &&
6850 gvop->op_type == OP_GV)
6852 GV *gv = cGVOPx_gv(gvop);
6853 OP *sibling = o2->op_sibling;
6854 SV *n = newSVpvn("",0);
6856 gv_fullname3(n, gv, "");
6857 if (SvCUR(n)>6 && strnEQ(SvPVX(n),"main::",6))
6858 sv_chop(n, SvPVX(n)+6);
6859 o2 = newSVOP(OP_CONST, 0, n);
6860 prev->op_sibling = o2;
6861 o2->op_sibling = sibling;
6877 if (contextclass++ == 0) {
6878 e = strchr(proto, ']');
6879 if (!e || e == proto)
6892 while (*--p != '[');
6893 bad_type(arg, Perl_form(aTHX_ "one of %s", p),
6894 gv_ename(namegv), o2);
6900 if (o2->op_type == OP_RV2GV)
6903 bad_type(arg, "symbol", gv_ename(namegv), o2);
6906 if (o2->op_type == OP_ENTERSUB)
6909 bad_type(arg, "subroutine entry", gv_ename(namegv), o2);
6912 if (o2->op_type == OP_RV2SV ||
6913 o2->op_type == OP_PADSV ||
6914 o2->op_type == OP_HELEM ||
6915 o2->op_type == OP_AELEM ||
6916 o2->op_type == OP_THREADSV)
6919 bad_type(arg, "scalar", gv_ename(namegv), o2);
6922 if (o2->op_type == OP_RV2AV ||
6923 o2->op_type == OP_PADAV)
6926 bad_type(arg, "array", gv_ename(namegv), o2);
6929 if (o2->op_type == OP_RV2HV ||
6930 o2->op_type == OP_PADHV)
6933 bad_type(arg, "hash", gv_ename(namegv), o2);
6938 OP* sib = kid->op_sibling;
6939 kid->op_sibling = 0;
6940 o2 = newUNOP(OP_REFGEN, 0, kid);
6941 o2->op_sibling = sib;
6942 prev->op_sibling = o2;
6944 if (contextclass && e) {
6959 Perl_croak(aTHX_ "Malformed prototype for %s: %s",
6960 gv_ename(namegv), SvPV((SV*)cv, n_a));
6965 mod(o2, OP_ENTERSUB);
6967 o2 = o2->op_sibling;
6969 if (proto && !optional &&
6970 (*proto && *proto != '@' && *proto != '%' && *proto != ';'))
6971 return too_few_arguments(o, gv_ename(namegv));
6976 Perl_ck_svconst(pTHX_ OP *o)
6978 SvREADONLY_on(cSVOPo->op_sv);
6983 Perl_ck_trunc(pTHX_ OP *o)
6985 if (o->op_flags & OPf_KIDS) {
6986 SVOP *kid = (SVOP*)cUNOPo->op_first;
6988 if (kid->op_type == OP_NULL)
6989 kid = (SVOP*)kid->op_sibling;
6990 if (kid && kid->op_type == OP_CONST &&
6991 (kid->op_private & OPpCONST_BARE))
6993 o->op_flags |= OPf_SPECIAL;
6994 kid->op_private &= ~OPpCONST_STRICT;
7001 Perl_ck_substr(pTHX_ OP *o)
7004 if ((o->op_flags & OPf_KIDS) && o->op_private == 4) {
7005 OP *kid = cLISTOPo->op_first;
7007 if (kid->op_type == OP_NULL)
7008 kid = kid->op_sibling;
7010 kid->op_flags |= OPf_MOD;
7016 /* A peephole optimizer. We visit the ops in the order they're to execute. */
7019 Perl_peep(pTHX_ register OP *o)
7021 register OP* oldop = 0;
7024 if (!o || o->op_seq)
7028 SAVEVPTR(PL_curcop);
7029 for (; o; o = o->op_next) {
7035 switch (o->op_type) {
7039 PL_curcop = ((COP*)o); /* for warnings */
7040 o->op_seq = PL_op_seqmax++;
7044 if (cSVOPo->op_private & OPpCONST_STRICT)
7045 no_bareword_allowed(o);
7047 /* Relocate sv to the pad for thread safety.
7048 * Despite being a "constant", the SV is written to,
7049 * for reference counts, sv_upgrade() etc. */
7051 PADOFFSET ix = pad_alloc(OP_CONST, SVs_PADTMP);
7052 if (SvPADTMP(cSVOPo->op_sv)) {
7053 /* If op_sv is already a PADTMP then it is being used by
7054 * some pad, so make a copy. */
7055 sv_setsv(PL_curpad[ix],cSVOPo->op_sv);
7056 SvREADONLY_on(PL_curpad[ix]);
7057 SvREFCNT_dec(cSVOPo->op_sv);
7060 SvREFCNT_dec(PL_curpad[ix]);
7061 SvPADTMP_on(cSVOPo->op_sv);
7062 PL_curpad[ix] = cSVOPo->op_sv;
7063 /* XXX I don't know how this isn't readonly already. */
7064 SvREADONLY_on(PL_curpad[ix]);
7066 cSVOPo->op_sv = Nullsv;
7070 o->op_seq = PL_op_seqmax++;
7074 if (o->op_next && o->op_next->op_type == OP_STRINGIFY) {
7075 if (o->op_next->op_private & OPpTARGET_MY) {
7076 if (o->op_flags & OPf_STACKED) /* chained concats */
7077 goto ignore_optimization;
7079 /* assert(PL_opargs[o->op_type] & OA_TARGLEX); */
7080 o->op_targ = o->op_next->op_targ;
7081 o->op_next->op_targ = 0;
7082 o->op_private |= OPpTARGET_MY;
7085 op_null(o->op_next);
7087 ignore_optimization:
7088 o->op_seq = PL_op_seqmax++;
7091 if ((o->op_flags & OPf_WANT) != OPf_WANT_LIST) {
7092 o->op_seq = PL_op_seqmax++;
7093 break; /* Scalar stub must produce undef. List stub is noop */
7097 if (o->op_targ == OP_NEXTSTATE
7098 || o->op_targ == OP_DBSTATE
7099 || o->op_targ == OP_SETSTATE)
7101 PL_curcop = ((COP*)o);
7103 /* XXX: We avoid setting op_seq here to prevent later calls
7104 to peep() from mistakenly concluding that optimisation
7105 has already occurred. This doesn't fix the real problem,
7106 though (See 20010220.007). AMS 20010719 */
7107 if (oldop && o->op_next) {
7108 oldop->op_next = o->op_next;
7116 if (oldop && o->op_next) {
7117 oldop->op_next = o->op_next;
7120 o->op_seq = PL_op_seqmax++;
7124 if (o->op_next->op_type == OP_RV2SV) {
7125 if (!(o->op_next->op_private & OPpDEREF)) {
7126 op_null(o->op_next);
7127 o->op_private |= o->op_next->op_private & (OPpLVAL_INTRO
7129 o->op_next = o->op_next->op_next;
7130 o->op_type = OP_GVSV;
7131 o->op_ppaddr = PL_ppaddr[OP_GVSV];
7134 else if (o->op_next->op_type == OP_RV2AV) {
7135 OP* pop = o->op_next->op_next;
7137 if (pop && pop->op_type == OP_CONST &&
7138 (PL_op = pop->op_next) &&
7139 pop->op_next->op_type == OP_AELEM &&
7140 !(pop->op_next->op_private &
7141 (OPpLVAL_INTRO|OPpLVAL_DEFER|OPpDEREF|OPpMAYBE_LVSUB)) &&
7142 (i = SvIV(((SVOP*)pop)->op_sv) - PL_curcop->cop_arybase)
7147 op_null(o->op_next);
7148 op_null(pop->op_next);
7150 o->op_flags |= pop->op_next->op_flags & OPf_MOD;
7151 o->op_next = pop->op_next->op_next;
7152 o->op_type = OP_AELEMFAST;
7153 o->op_ppaddr = PL_ppaddr[OP_AELEMFAST];
7154 o->op_private = (U8)i;
7159 else if ((o->op_private & OPpEARLY_CV) && ckWARN(WARN_PROTOTYPE)) {
7161 if (SvTYPE(gv) == SVt_PVGV && GvCV(gv) && SvPVX(GvCV(gv))) {
7162 /* XXX could check prototype here instead of just carping */
7163 SV *sv = sv_newmortal();
7164 gv_efullname3(sv, gv, Nullch);
7165 Perl_warner(aTHX_ packWARN(WARN_PROTOTYPE),
7166 "%s() called too early to check prototype",
7170 else if (o->op_next->op_type == OP_READLINE
7171 && o->op_next->op_next->op_type == OP_CONCAT
7172 && (o->op_next->op_next->op_flags & OPf_STACKED))
7174 /* Turn "$a .= <FH>" into an OP_RCATLINE. AMS 20010917 */
7175 o->op_type = OP_RCATLINE;
7176 o->op_flags |= OPf_STACKED;
7177 o->op_ppaddr = PL_ppaddr[OP_RCATLINE];
7178 op_null(o->op_next->op_next);
7179 op_null(o->op_next);
7182 o->op_seq = PL_op_seqmax++;
7193 o->op_seq = PL_op_seqmax++;
7194 while (cLOGOP->op_other->op_type == OP_NULL)
7195 cLOGOP->op_other = cLOGOP->op_other->op_next;
7196 peep(cLOGOP->op_other); /* Recursive calls are not replaced by fptr calls */
7201 o->op_seq = PL_op_seqmax++;
7202 while (cLOOP->op_redoop->op_type == OP_NULL)
7203 cLOOP->op_redoop = cLOOP->op_redoop->op_next;
7204 peep(cLOOP->op_redoop);
7205 while (cLOOP->op_nextop->op_type == OP_NULL)
7206 cLOOP->op_nextop = cLOOP->op_nextop->op_next;
7207 peep(cLOOP->op_nextop);
7208 while (cLOOP->op_lastop->op_type == OP_NULL)
7209 cLOOP->op_lastop = cLOOP->op_lastop->op_next;
7210 peep(cLOOP->op_lastop);
7216 o->op_seq = PL_op_seqmax++;
7217 while (cPMOP->op_pmreplstart &&
7218 cPMOP->op_pmreplstart->op_type == OP_NULL)
7219 cPMOP->op_pmreplstart = cPMOP->op_pmreplstart->op_next;
7220 peep(cPMOP->op_pmreplstart);
7224 o->op_seq = PL_op_seqmax++;
7225 if (ckWARN(WARN_SYNTAX) && o->op_next
7226 && o->op_next->op_type == OP_NEXTSTATE) {
7227 if (o->op_next->op_sibling &&
7228 o->op_next->op_sibling->op_type != OP_EXIT &&
7229 o->op_next->op_sibling->op_type != OP_WARN &&
7230 o->op_next->op_sibling->op_type != OP_DIE) {
7231 line_t oldline = CopLINE(PL_curcop);
7233 CopLINE_set(PL_curcop, CopLINE((COP*)o->op_next));
7234 Perl_warner(aTHX_ packWARN(WARN_EXEC),
7235 "Statement unlikely to be reached");
7236 Perl_warner(aTHX_ packWARN(WARN_EXEC),
7237 "\t(Maybe you meant system() when you said exec()?)\n");
7238 CopLINE_set(PL_curcop, oldline);
7247 SV **svp, **indsvp, *sv;
7252 o->op_seq = PL_op_seqmax++;
7254 if (((BINOP*)o)->op_last->op_type != OP_CONST)
7257 /* Make the CONST have a shared SV */
7258 svp = cSVOPx_svp(((BINOP*)o)->op_last);
7259 if ((!SvFAKE(sv = *svp) || !SvREADONLY(sv)) && !IS_PADCONST(sv)) {
7260 key = SvPV(sv, keylen);
7261 lexname = newSVpvn_share(key,
7262 SvUTF8(sv) ? -(I32)keylen : keylen,
7268 if ((o->op_private & (OPpLVAL_INTRO)))
7271 rop = (UNOP*)((BINOP*)o)->op_first;
7272 if (rop->op_type != OP_RV2HV || rop->op_first->op_type != OP_PADSV)
7274 lexname = *av_fetch(PL_comppad_name, rop->op_first->op_targ, TRUE);
7275 if (!(SvFLAGS(lexname) & SVpad_TYPED))
7277 fields = (GV**)hv_fetch(SvSTASH(lexname), "FIELDS", 6, FALSE);
7278 if (!fields || !GvHV(*fields))
7280 key = SvPV(*svp, keylen);
7281 indsvp = hv_fetch(GvHV(*fields), key,
7282 SvUTF8(*svp) ? -(I32)keylen : keylen, FALSE);
7284 Perl_croak(aTHX_ "No such pseudo-hash field \"%s\" in variable %s of type %s",
7285 key, SvPV(lexname, n_a), HvNAME(SvSTASH(lexname)));
7287 ind = SvIV(*indsvp);
7289 Perl_croak(aTHX_ "Bad index while coercing array into hash");
7290 rop->op_type = OP_RV2AV;
7291 rop->op_ppaddr = PL_ppaddr[OP_RV2AV];
7292 o->op_type = OP_AELEM;
7293 o->op_ppaddr = PL_ppaddr[OP_AELEM];
7295 if (SvREADONLY(*svp))
7297 SvFLAGS(sv) |= (SvFLAGS(*svp)
7298 & (SVs_PADBUSY|SVs_PADTMP|SVs_PADMY));
7308 SV **svp, **indsvp, *sv;
7312 SVOP *first_key_op, *key_op;
7314 o->op_seq = PL_op_seqmax++;
7315 if ((o->op_private & (OPpLVAL_INTRO))
7316 /* I bet there's always a pushmark... */
7317 || ((LISTOP*)o)->op_first->op_sibling->op_type != OP_LIST)
7318 /* hmmm, no optimization if list contains only one key. */
7320 rop = (UNOP*)((LISTOP*)o)->op_last;
7321 if (rop->op_type != OP_RV2HV || rop->op_first->op_type != OP_PADSV)
7323 lexname = *av_fetch(PL_comppad_name, rop->op_first->op_targ, TRUE);
7324 if (!(SvFLAGS(lexname) & SVpad_TYPED))
7326 fields = (GV**)hv_fetch(SvSTASH(lexname), "FIELDS", 6, FALSE);
7327 if (!fields || !GvHV(*fields))
7329 /* Again guessing that the pushmark can be jumped over.... */
7330 first_key_op = (SVOP*)((LISTOP*)((LISTOP*)o)->op_first->op_sibling)
7331 ->op_first->op_sibling;
7332 /* Check that the key list contains only constants. */
7333 for (key_op = first_key_op; key_op;
7334 key_op = (SVOP*)key_op->op_sibling)
7335 if (key_op->op_type != OP_CONST)
7339 rop->op_type = OP_RV2AV;
7340 rop->op_ppaddr = PL_ppaddr[OP_RV2AV];
7341 o->op_type = OP_ASLICE;
7342 o->op_ppaddr = PL_ppaddr[OP_ASLICE];
7343 for (key_op = first_key_op; key_op;
7344 key_op = (SVOP*)key_op->op_sibling) {
7345 svp = cSVOPx_svp(key_op);
7346 key = SvPV(*svp, keylen);
7347 indsvp = hv_fetch(GvHV(*fields), key,
7348 SvUTF8(*svp) ? -(I32)keylen : keylen, FALSE);
7350 Perl_croak(aTHX_ "No such pseudo-hash field \"%s\" "
7351 "in variable %s of type %s",
7352 key, SvPV(lexname, n_a), HvNAME(SvSTASH(lexname)));
7354 ind = SvIV(*indsvp);
7356 Perl_croak(aTHX_ "Bad index while coercing array into hash");
7358 if (SvREADONLY(*svp))
7360 SvFLAGS(sv) |= (SvFLAGS(*svp)
7361 & (SVs_PADBUSY|SVs_PADTMP|SVs_PADMY));
7369 o->op_seq = PL_op_seqmax++;
7379 char* Perl_custom_op_name(pTHX_ OP* o)
7381 IV index = PTR2IV(o->op_ppaddr);
7385 if (!PL_custom_op_names) /* This probably shouldn't happen */
7386 return PL_op_name[OP_CUSTOM];
7388 keysv = sv_2mortal(newSViv(index));
7390 he = hv_fetch_ent(PL_custom_op_names, keysv, 0, 0);
7392 return PL_op_name[OP_CUSTOM]; /* Don't know who you are */
7394 return SvPV_nolen(HeVAL(he));
7397 char* Perl_custom_op_desc(pTHX_ OP* o)
7399 IV index = PTR2IV(o->op_ppaddr);
7403 if (!PL_custom_op_descs)
7404 return PL_op_desc[OP_CUSTOM];
7406 keysv = sv_2mortal(newSViv(index));
7408 he = hv_fetch_ent(PL_custom_op_descs, keysv, 0, 0);
7410 return PL_op_desc[OP_CUSTOM];
7412 return SvPV_nolen(HeVAL(he));
7418 /* Efficient sub that returns a constant scalar value. */
7420 const_sv_xsub(pTHX_ CV* cv)
7425 Perl_croak(aTHX_ "usage: %s::%s()",
7426 HvNAME(GvSTASH(CvGV(cv))), GvNAME(CvGV(cv)));
7430 ST(0) = (SV*)XSANY.any_ptr;