3 * Copyright (C) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
4 * 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007 by Larry Wall and others
6 * You may distribute under the terms of either the GNU General Public
7 * License or the Artistic License, as specified in the README file.
12 * Now far ahead the Road has gone,
13 * And I must follow, if I can,
14 * Pursuing it with eager feet,
15 * Until it joins some larger way
16 * Where many paths and errands meet.
17 * And whither then? I cannot say.
20 /* This file contains control-oriented pp ("push/pop") functions that
21 * execute the opcodes that make up a perl program. A typical pp function
22 * expects to find its arguments on the stack, and usually pushes its
23 * results onto the stack, hence the 'pp' terminology. Each OP structure
24 * contains a pointer to the relevant pp_foo() function.
26 * Control-oriented means things like pp_enteriter() and pp_next(), which
27 * alter the flow of control of the program.
32 #define PERL_IN_PP_CTL_C
36 #define WORD_ALIGN sizeof(U32)
39 #define DOCATCH(o) ((CATCH_GET == TRUE) ? docatch(o) : (o))
41 #define dopoptosub(plop) dopoptosub_at(cxstack, (plop))
50 cxix = dopoptosub(cxstack_ix);
54 switch (cxstack[cxix].blk_gimme) {
67 /* XXXX Should store the old value to allow for tie/overload - and
68 restore in regcomp, where marked with XXXX. */
78 register PMOP *pm = (PMOP*)cLOGOP->op_other;
82 /* prevent recompiling under /o and ithreads. */
83 #if defined(USE_ITHREADS)
84 if (pm->op_pmflags & PMf_KEEP && PM_GETRE(pm)) {
85 if (PL_op->op_flags & OPf_STACKED) {
94 if (PL_op->op_flags & OPf_STACKED) {
95 /* multiple args; concatentate them */
97 tmpstr = PAD_SV(ARGTARG);
98 sv_setpvn(tmpstr, "", 0);
99 while (++MARK <= SP) {
100 if (PL_amagic_generation) {
102 if ((SvAMAGIC(tmpstr) || SvAMAGIC(*MARK)) &&
103 (sv = amagic_call(tmpstr, *MARK, concat_amg, AMGf_assign)))
105 sv_setsv(tmpstr, sv);
109 sv_catsv(tmpstr, *MARK);
118 SV * const sv = SvRV(tmpstr);
119 if (SvTYPE(sv) == SVt_REGEXP)
123 re = reg_temp_copy(re);
124 ReREFCNT_dec(PM_GETRE(pm));
129 const char *t = SvOK(tmpstr) ? SvPV_const(tmpstr, len) : "";
131 assert (re != (REGEXP*) &PL_sv_undef);
133 /* Check against the last compiled regexp. */
134 if (!re || !RX_PRECOMP(re) || RX_PRELEN(re) != len ||
135 memNE(RX_PRECOMP(re), t, len))
137 const regexp_engine *eng = re ? RX_ENGINE(re) : NULL;
138 U32 pm_flags = pm->op_pmflags & PMf_COMPILETIME;
142 PM_SETRE(pm, (REGEXP*) &PL_sv_undef);
144 PM_SETRE(pm, NULL); /* crucial if regcomp aborts */
146 } else if (PL_curcop->cop_hints_hash) {
147 SV *ptr = Perl_refcounted_he_fetch(aTHX_ PL_curcop->cop_hints_hash, 0,
149 if (ptr && SvIOK(ptr) && SvIV(ptr))
150 eng = INT2PTR(regexp_engine*,SvIV(ptr));
153 if (PL_op->op_flags & OPf_SPECIAL)
154 PL_reginterp_cnt = I32_MAX; /* Mark as safe. */
156 if (DO_UTF8(tmpstr)) {
157 assert (SvUTF8(tmpstr));
158 } else if (SvUTF8(tmpstr)) {
159 /* Not doing UTF-8, despite what the SV says. Is this only if
160 we're trapped in use 'bytes'? */
161 /* Make a copy of the octet sequence, but without the flag on,
162 as the compiler now honours the SvUTF8 flag on tmpstr. */
164 const char *const p = SvPV(tmpstr, len);
165 tmpstr = newSVpvn_flags(p, len, SVs_TEMP);
169 PM_SETRE(pm, CALLREGCOMP_ENG(eng, tmpstr, pm_flags));
171 PM_SETRE(pm, CALLREGCOMP(tmpstr, pm_flags));
173 PL_reginterp_cnt = 0; /* XXXX Be extra paranoid - needed
174 inside tie/overload accessors. */
180 #ifndef INCOMPLETE_TAINTS
183 RX_EXTFLAGS(re) |= RXf_TAINTED;
185 RX_EXTFLAGS(re) &= ~RXf_TAINTED;
189 if (!RX_PRELEN(PM_GETRE(pm)) && PL_curpm)
193 #if !defined(USE_ITHREADS)
194 /* can't change the optree at runtime either */
195 /* PMf_KEEP is handled differently under threads to avoid these problems */
196 if (pm->op_pmflags & PMf_KEEP) {
197 pm->op_private &= ~OPpRUNTIME; /* no point compiling again */
198 cLOGOP->op_first->op_next = PL_op->op_next;
208 register PERL_CONTEXT *cx = &cxstack[cxstack_ix];
209 register PMOP * const pm = (PMOP*) cLOGOP->op_other;
210 register SV * const dstr = cx->sb_dstr;
211 register char *s = cx->sb_s;
212 register char *m = cx->sb_m;
213 char *orig = cx->sb_orig;
214 register REGEXP * const rx = cx->sb_rx;
216 REGEXP *old = PM_GETRE(pm);
220 PM_SETRE(pm,ReREFCNT_inc(rx));
223 rxres_restore(&cx->sb_rxres, rx);
224 RX_MATCH_UTF8_set(rx, DO_UTF8(cx->sb_targ));
226 if (cx->sb_iters++) {
227 const I32 saviters = cx->sb_iters;
228 if (cx->sb_iters > cx->sb_maxiters)
229 DIE(aTHX_ "Substitution loop");
231 if (!(cx->sb_rxtainted & 2) && SvTAINTED(TOPs))
232 cx->sb_rxtainted |= 2;
233 sv_catsv(dstr, POPs);
234 FREETMPS; /* Prevent excess tmp stack */
237 if (CxONCE(cx) || !CALLREGEXEC(rx, s, cx->sb_strend, orig,
238 s == m, cx->sb_targ, NULL,
239 ((cx->sb_rflags & REXEC_COPY_STR)
240 ? (REXEC_IGNOREPOS|REXEC_NOT_FIRST)
241 : (REXEC_COPY_STR|REXEC_IGNOREPOS|REXEC_NOT_FIRST))))
243 SV * const targ = cx->sb_targ;
245 assert(cx->sb_strend >= s);
246 if(cx->sb_strend > s) {
247 if (DO_UTF8(dstr) && !SvUTF8(targ))
248 sv_catpvn_utf8_upgrade(dstr, s, cx->sb_strend - s, nsv);
250 sv_catpvn(dstr, s, cx->sb_strend - s);
252 cx->sb_rxtainted |= RX_MATCH_TAINTED(rx);
254 #ifdef PERL_OLD_COPY_ON_WRITE
256 sv_force_normal_flags(targ, SV_COW_DROP_PV);
262 SvPV_set(targ, SvPVX(dstr));
263 SvCUR_set(targ, SvCUR(dstr));
264 SvLEN_set(targ, SvLEN(dstr));
267 SvPV_set(dstr, NULL);
269 TAINT_IF(cx->sb_rxtainted & 1);
270 mPUSHi(saviters - 1);
272 (void)SvPOK_only_UTF8(targ);
273 TAINT_IF(cx->sb_rxtainted);
277 LEAVE_SCOPE(cx->sb_oldsave);
279 RETURNOP(pm->op_next);
281 cx->sb_iters = saviters;
283 if (RX_MATCH_COPIED(rx) && RX_SUBBEG(rx) != orig) {
286 cx->sb_orig = orig = RX_SUBBEG(rx);
288 cx->sb_strend = s + (cx->sb_strend - m);
290 cx->sb_m = m = RX_OFFS(rx)[0].start + orig;
292 if (DO_UTF8(dstr) && !SvUTF8(cx->sb_targ))
293 sv_catpvn_utf8_upgrade(dstr, s, m - s, nsv);
295 sv_catpvn(dstr, s, m-s);
297 cx->sb_s = RX_OFFS(rx)[0].end + orig;
298 { /* Update the pos() information. */
299 SV * const sv = cx->sb_targ;
302 SvUPGRADE(sv, SVt_PVMG);
303 if (!(mg = mg_find(sv, PERL_MAGIC_regex_global))) {
304 #ifdef PERL_OLD_COPY_ON_WRITE
306 sv_force_normal_flags(sv, 0);
308 mg = sv_magicext(sv, NULL, PERL_MAGIC_regex_global, &PL_vtbl_mglob,
317 (void)ReREFCNT_inc(rx);
318 cx->sb_rxtainted |= RX_MATCH_TAINTED(rx);
319 rxres_save(&cx->sb_rxres, rx);
320 RETURNOP(pm->op_pmstashstartu.op_pmreplstart);
324 Perl_rxres_save(pTHX_ void **rsp, REGEXP *rx)
330 if (!p || p[1] < RX_NPARENS(rx)) {
331 #ifdef PERL_OLD_COPY_ON_WRITE
332 i = 7 + RX_NPARENS(rx) * 2;
334 i = 6 + RX_NPARENS(rx) * 2;
343 *p++ = PTR2UV(RX_MATCH_COPIED(rx) ? RX_SUBBEG(rx) : NULL);
344 RX_MATCH_COPIED_off(rx);
346 #ifdef PERL_OLD_COPY_ON_WRITE
347 *p++ = PTR2UV(RX_SAVED_COPY(rx));
348 RX_SAVED_COPY(rx) = NULL;
351 *p++ = RX_NPARENS(rx);
353 *p++ = PTR2UV(RX_SUBBEG(rx));
354 *p++ = (UV)RX_SUBLEN(rx);
355 for (i = 0; i <= RX_NPARENS(rx); ++i) {
356 *p++ = (UV)RX_OFFS(rx)[i].start;
357 *p++ = (UV)RX_OFFS(rx)[i].end;
362 Perl_rxres_restore(pTHX_ void **rsp, REGEXP *rx)
368 RX_MATCH_COPY_FREE(rx);
369 RX_MATCH_COPIED_set(rx, *p);
372 #ifdef PERL_OLD_COPY_ON_WRITE
373 if (RX_SAVED_COPY(rx))
374 SvREFCNT_dec (RX_SAVED_COPY(rx));
375 RX_SAVED_COPY(rx) = INT2PTR(SV*,*p);
379 RX_NPARENS(rx) = *p++;
381 RX_SUBBEG(rx) = INT2PTR(char*,*p++);
382 RX_SUBLEN(rx) = (I32)(*p++);
383 for (i = 0; i <= RX_NPARENS(rx); ++i) {
384 RX_OFFS(rx)[i].start = (I32)(*p++);
385 RX_OFFS(rx)[i].end = (I32)(*p++);
390 Perl_rxres_free(pTHX_ void **rsp)
392 UV * const p = (UV*)*rsp;
397 void *tmp = INT2PTR(char*,*p);
400 PoisonFree(*p, 1, sizeof(*p));
402 Safefree(INT2PTR(char*,*p));
404 #ifdef PERL_OLD_COPY_ON_WRITE
406 SvREFCNT_dec (INT2PTR(SV*,p[1]));
416 dVAR; dSP; dMARK; dORIGMARK;
417 register SV * const tmpForm = *++MARK;
422 register SV *sv = NULL;
423 const char *item = NULL;
427 bool chopspace = (strchr(PL_chopset, ' ') != NULL);
428 const char *chophere = NULL;
429 char *linemark = NULL;
431 bool gotsome = FALSE;
433 const STRLEN fudge = SvPOK(tmpForm)
434 ? (SvCUR(tmpForm) * (IN_BYTES ? 1 : 3) + 1) : 0;
435 bool item_is_utf8 = FALSE;
436 bool targ_is_utf8 = FALSE;
438 OP * parseres = NULL;
442 if (!SvMAGICAL(tmpForm) || !SvCOMPILED(tmpForm)) {
443 if (SvREADONLY(tmpForm)) {
444 SvREADONLY_off(tmpForm);
445 parseres = doparseform(tmpForm);
446 SvREADONLY_on(tmpForm);
449 parseres = doparseform(tmpForm);
453 SvPV_force(PL_formtarget, len);
454 if (DO_UTF8(PL_formtarget))
456 t = SvGROW(PL_formtarget, len + fudge + 1); /* XXX SvCUR bad */
458 f = SvPV_const(tmpForm, len);
459 /* need to jump to the next word */
460 fpc = (U32*)(f + len + WORD_ALIGN - SvCUR(tmpForm) % WORD_ALIGN);
464 const char *name = "???";
467 case FF_LITERAL: arg = fpc[1]; name = "LITERAL"; break;
468 case FF_BLANK: arg = fpc[1]; name = "BLANK"; break;
469 case FF_SKIP: arg = fpc[1]; name = "SKIP"; break;
470 case FF_FETCH: arg = fpc[1]; name = "FETCH"; break;
471 case FF_DECIMAL: arg = fpc[1]; name = "DECIMAL"; break;
473 case FF_CHECKNL: name = "CHECKNL"; break;
474 case FF_CHECKCHOP: name = "CHECKCHOP"; break;
475 case FF_SPACE: name = "SPACE"; break;
476 case FF_HALFSPACE: name = "HALFSPACE"; break;
477 case FF_ITEM: name = "ITEM"; break;
478 case FF_CHOP: name = "CHOP"; break;
479 case FF_LINEGLOB: name = "LINEGLOB"; break;
480 case FF_NEWLINE: name = "NEWLINE"; break;
481 case FF_MORE: name = "MORE"; break;
482 case FF_LINEMARK: name = "LINEMARK"; break;
483 case FF_END: name = "END"; break;
484 case FF_0DECIMAL: name = "0DECIMAL"; break;
485 case FF_LINESNGL: name = "LINESNGL"; break;
488 PerlIO_printf(Perl_debug_log, "%-16s%ld\n", name, (long) arg);
490 PerlIO_printf(Perl_debug_log, "%-16s\n", name);
501 if (targ_is_utf8 && !SvUTF8(tmpForm)) {
502 SvCUR_set(PL_formtarget, t - SvPVX_const(PL_formtarget));
504 sv_catpvn_utf8_upgrade(PL_formtarget, f, arg, nsv);
505 t = SvEND(PL_formtarget);
508 if (!targ_is_utf8 && DO_UTF8(tmpForm)) {
509 SvCUR_set(PL_formtarget, t - SvPVX_const(PL_formtarget));
511 sv_utf8_upgrade(PL_formtarget);
512 SvGROW(PL_formtarget, SvCUR(PL_formtarget) + fudge + 1);
513 t = SvEND(PL_formtarget);
533 if (ckWARN(WARN_SYNTAX))
534 Perl_warner(aTHX_ packWARN(WARN_SYNTAX), "Not enough format arguments");
541 const char *s = item = SvPV_const(sv, len);
544 itemsize = sv_len_utf8(sv);
545 if (itemsize != (I32)len) {
547 if (itemsize > fieldsize) {
548 itemsize = fieldsize;
549 itembytes = itemsize;
550 sv_pos_u2b(sv, &itembytes, 0);
554 send = chophere = s + itembytes;
564 sv_pos_b2u(sv, &itemsize);
568 item_is_utf8 = FALSE;
569 if (itemsize > fieldsize)
570 itemsize = fieldsize;
571 send = chophere = s + itemsize;
585 const char *s = item = SvPV_const(sv, len);
588 itemsize = sv_len_utf8(sv);
589 if (itemsize != (I32)len) {
591 if (itemsize <= fieldsize) {
592 const char *send = chophere = s + itemsize;
605 itemsize = fieldsize;
606 itembytes = itemsize;
607 sv_pos_u2b(sv, &itembytes, 0);
608 send = chophere = s + itembytes;
609 while (s < send || (s == send && isSPACE(*s))) {
619 if (strchr(PL_chopset, *s))
624 itemsize = chophere - item;
625 sv_pos_b2u(sv, &itemsize);
631 item_is_utf8 = FALSE;
632 if (itemsize <= fieldsize) {
633 const char *const send = chophere = s + itemsize;
646 itemsize = fieldsize;
647 send = chophere = s + itemsize;
648 while (s < send || (s == send && isSPACE(*s))) {
658 if (strchr(PL_chopset, *s))
663 itemsize = chophere - item;
669 arg = fieldsize - itemsize;
678 arg = fieldsize - itemsize;
689 const char *s = item;
693 SvCUR_set(PL_formtarget, t - SvPVX_const(PL_formtarget));
695 sv_utf8_upgrade(PL_formtarget);
696 SvGROW(PL_formtarget, SvCUR(PL_formtarget) + fudge + 1);
697 t = SvEND(PL_formtarget);
701 if (UTF8_IS_CONTINUED(*s)) {
702 STRLEN skip = UTF8SKIP(s);
719 if ( !((*t++ = *s++) & ~31) )
725 if (targ_is_utf8 && !item_is_utf8) {
726 SvCUR_set(PL_formtarget, t - SvPVX_const(PL_formtarget));
728 sv_catpvn_utf8_upgrade(PL_formtarget, s, arg, nsv);
729 for (; t < SvEND(PL_formtarget); t++) {
742 const int ch = *t++ = *s++;
745 if ( !((*t++ = *s++) & ~31) )
754 const char *s = chophere;
772 const char *s = item = SvPV_const(sv, len);
774 if ((item_is_utf8 = DO_UTF8(sv)))
775 itemsize = sv_len_utf8(sv);
777 bool chopped = FALSE;
778 const char *const send = s + len;
780 chophere = s + itemsize;
796 SvCUR_set(PL_formtarget, t - SvPVX_const(PL_formtarget));
798 SvUTF8_on(PL_formtarget);
800 SvCUR_set(sv, chophere - item);
801 sv_catsv(PL_formtarget, sv);
802 SvCUR_set(sv, itemsize);
804 sv_catsv(PL_formtarget, sv);
806 SvCUR_set(PL_formtarget, SvCUR(PL_formtarget) - 1);
807 SvGROW(PL_formtarget, SvCUR(PL_formtarget) + fudge + 1);
808 t = SvPVX(PL_formtarget) + SvCUR(PL_formtarget);
817 #if defined(USE_LONG_DOUBLE)
820 "%#0*.*" PERL_PRIfldbl : "%0*.*" PERL_PRIfldbl);
824 "%#0*.*f" : "%0*.*f");
829 #if defined(USE_LONG_DOUBLE)
831 ((arg & 256) ? "%#*.*" PERL_PRIfldbl : "%*.*" PERL_PRIfldbl);
834 ((arg & 256) ? "%#*.*f" : "%*.*f");
837 /* If the field is marked with ^ and the value is undefined,
839 if ((arg & 512) && !SvOK(sv)) {
847 /* overflow evidence */
848 if (num_overflow(value, fieldsize, arg)) {
854 /* Formats aren't yet marked for locales, so assume "yes". */
856 STORE_NUMERIC_STANDARD_SET_LOCAL();
857 my_snprintf(t, SvLEN(PL_formtarget) - (t - SvPVX(PL_formtarget)), fmt, (int) fieldsize, (int) arg & 255, value);
858 RESTORE_NUMERIC_STANDARD();
865 while (t-- > linemark && *t == ' ') ;
873 if (arg) { /* repeat until fields exhausted? */
875 SvCUR_set(PL_formtarget, t - SvPVX_const(PL_formtarget));
876 lines += FmLINES(PL_formtarget);
879 if (strnEQ(linemark, linemark - arg, arg))
880 DIE(aTHX_ "Runaway format");
883 SvUTF8_on(PL_formtarget);
884 FmLINES(PL_formtarget) = lines;
886 RETURNOP(cLISTOP->op_first);
897 const char *s = chophere;
898 const char *send = item + len;
900 while (isSPACE(*s) && (s < send))
905 arg = fieldsize - itemsize;
912 if (strnEQ(s1," ",3)) {
913 while (s1 > SvPVX_const(PL_formtarget) && isSPACE(s1[-1]))
924 SvCUR_set(PL_formtarget, t - SvPVX_const(PL_formtarget));
926 SvUTF8_on(PL_formtarget);
927 FmLINES(PL_formtarget) += lines;
939 if (PL_stack_base + *PL_markstack_ptr == SP) {
941 if (GIMME_V == G_SCALAR)
943 RETURNOP(PL_op->op_next->op_next);
945 PL_stack_sp = PL_stack_base + *PL_markstack_ptr + 1;
946 pp_pushmark(); /* push dst */
947 pp_pushmark(); /* push src */
948 ENTER; /* enter outer scope */
951 if (PL_op->op_private & OPpGREP_LEX)
952 SAVESPTR(PAD_SVl(PL_op->op_targ));
955 ENTER; /* enter inner scope */
958 src = PL_stack_base[*PL_markstack_ptr];
960 if (PL_op->op_private & OPpGREP_LEX)
961 PAD_SVl(PL_op->op_targ) = src;
966 if (PL_op->op_type == OP_MAPSTART)
967 pp_pushmark(); /* push top */
968 return ((LOGOP*)PL_op->op_next)->op_other;
974 const I32 gimme = GIMME_V;
975 I32 items = (SP - PL_stack_base) - *PL_markstack_ptr; /* how many new items */
981 /* first, move source pointer to the next item in the source list */
982 ++PL_markstack_ptr[-1];
984 /* if there are new items, push them into the destination list */
985 if (items && gimme != G_VOID) {
986 /* might need to make room back there first */
987 if (items > PL_markstack_ptr[-1] - PL_markstack_ptr[-2]) {
988 /* XXX this implementation is very pessimal because the stack
989 * is repeatedly extended for every set of items. Is possible
990 * to do this without any stack extension or copying at all
991 * by maintaining a separate list over which the map iterates
992 * (like foreach does). --gsar */
994 /* everything in the stack after the destination list moves
995 * towards the end the stack by the amount of room needed */
996 shift = items - (PL_markstack_ptr[-1] - PL_markstack_ptr[-2]);
998 /* items to shift up (accounting for the moved source pointer) */
999 count = (SP - PL_stack_base) - (PL_markstack_ptr[-1] - 1);
1001 /* This optimization is by Ben Tilly and it does
1002 * things differently from what Sarathy (gsar)
1003 * is describing. The downside of this optimization is
1004 * that leaves "holes" (uninitialized and hopefully unused areas)
1005 * to the Perl stack, but on the other hand this
1006 * shouldn't be a problem. If Sarathy's idea gets
1007 * implemented, this optimization should become
1008 * irrelevant. --jhi */
1010 shift = count; /* Avoid shifting too often --Ben Tilly */
1014 dst = (SP += shift);
1015 PL_markstack_ptr[-1] += shift;
1016 *PL_markstack_ptr += shift;
1020 /* copy the new items down to the destination list */
1021 dst = PL_stack_base + (PL_markstack_ptr[-2] += items) - 1;
1022 if (gimme == G_ARRAY) {
1024 *dst-- = SvTEMP(TOPs) ? POPs : sv_mortalcopy(POPs);
1027 /* scalar context: we don't care about which values map returns
1028 * (we use undef here). And so we certainly don't want to do mortal
1029 * copies of meaningless values. */
1030 while (items-- > 0) {
1032 *dst-- = &PL_sv_undef;
1036 LEAVE; /* exit inner scope */
1039 if (PL_markstack_ptr[-1] > *PL_markstack_ptr) {
1041 (void)POPMARK; /* pop top */
1042 LEAVE; /* exit outer scope */
1043 (void)POPMARK; /* pop src */
1044 items = --*PL_markstack_ptr - PL_markstack_ptr[-1];
1045 (void)POPMARK; /* pop dst */
1046 SP = PL_stack_base + POPMARK; /* pop original mark */
1047 if (gimme == G_SCALAR) {
1048 if (PL_op->op_private & OPpGREP_LEX) {
1049 SV* sv = sv_newmortal();
1050 sv_setiv(sv, items);
1058 else if (gimme == G_ARRAY)
1065 ENTER; /* enter inner scope */
1068 /* set $_ to the new source item */
1069 src = PL_stack_base[PL_markstack_ptr[-1]];
1071 if (PL_op->op_private & OPpGREP_LEX)
1072 PAD_SVl(PL_op->op_targ) = src;
1076 RETURNOP(cLOGOP->op_other);
1085 if (GIMME == G_ARRAY)
1087 if (SvTRUEx(PAD_SV(PL_op->op_targ)))
1088 return cLOGOP->op_other;
1098 if (GIMME == G_ARRAY) {
1099 RETURNOP(((LOGOP*)cUNOP->op_first)->op_other);
1103 SV * const targ = PAD_SV(PL_op->op_targ);
1106 if (PL_op->op_private & OPpFLIP_LINENUM) {
1107 if (GvIO(PL_last_in_gv)) {
1108 flip = SvIV(sv) == (IV)IoLINES(GvIOp(PL_last_in_gv));
1111 GV * const gv = gv_fetchpvs(".", GV_ADD|GV_NOTQUAL, SVt_PV);
1113 flip = SvIV(sv) == SvIV(GvSV(gv));
1119 sv_setiv(PAD_SV(cUNOP->op_first->op_targ), 1);
1120 if (PL_op->op_flags & OPf_SPECIAL) {
1128 RETURNOP(((LOGOP*)cUNOP->op_first)->op_other);
1131 sv_setpvn(TARG, "", 0);
1137 /* This code tries to decide if "$left .. $right" should use the
1138 magical string increment, or if the range is numeric (we make
1139 an exception for .."0" [#18165]). AMS 20021031. */
1141 #define RANGE_IS_NUMERIC(left,right) ( \
1142 SvNIOKp(left) || (SvOK(left) && !SvPOKp(left)) || \
1143 SvNIOKp(right) || (SvOK(right) && !SvPOKp(right)) || \
1144 (((!SvOK(left) && SvOK(right)) || ((!SvOK(left) || \
1145 looks_like_number(left)) && SvPOKp(left) && *SvPVX_const(left) != '0')) \
1146 && (!SvOK(right) || looks_like_number(right))))
1152 if (GIMME == G_ARRAY) {
1158 if (RANGE_IS_NUMERIC(left,right)) {
1161 if ((SvOK(left) && SvNV(left) < IV_MIN) ||
1162 (SvOK(right) && SvNV(right) > IV_MAX))
1163 DIE(aTHX_ "Range iterator outside integer range");
1174 SV * const sv = sv_2mortal(newSViv(i++));
1179 SV * const final = sv_mortalcopy(right);
1181 const char * const tmps = SvPV_const(final, len);
1183 SV *sv = sv_mortalcopy(left);
1184 SvPV_force_nolen(sv);
1185 while (!SvNIOKp(sv) && SvCUR(sv) <= len) {
1187 if (strEQ(SvPVX_const(sv),tmps))
1189 sv = sv_2mortal(newSVsv(sv));
1196 SV * const targ = PAD_SV(cUNOP->op_first->op_targ);
1200 if (PL_op->op_private & OPpFLIP_LINENUM) {
1201 if (GvIO(PL_last_in_gv)) {
1202 flop = SvIV(sv) == (IV)IoLINES(GvIOp(PL_last_in_gv));
1205 GV * const gv = gv_fetchpvs(".", GV_ADD|GV_NOTQUAL, SVt_PV);
1206 if (gv && GvSV(gv)) flop = SvIV(sv) == SvIV(GvSV(gv));
1214 sv_setiv(PAD_SV(((UNOP*)cUNOP->op_first)->op_first->op_targ), 0);
1215 sv_catpvs(targ, "E0");
1225 static const char * const context_name[] = {
1238 S_dopoptolabel(pTHX_ const char *label)
1243 for (i = cxstack_ix; i >= 0; i--) {
1244 register const PERL_CONTEXT * const cx = &cxstack[i];
1245 switch (CxTYPE(cx)) {
1253 if (ckWARN(WARN_EXITING))
1254 Perl_warner(aTHX_ packWARN(WARN_EXITING), "Exiting %s via %s",
1255 context_name[CxTYPE(cx)], OP_NAME(PL_op));
1256 if (CxTYPE(cx) == CXt_NULL)
1259 case CXt_LOOP_LAZYIV:
1260 case CXt_LOOP_LAZYSV:
1262 case CXt_LOOP_PLAIN:
1263 if ( !CxLABEL(cx) || strNE(label, CxLABEL(cx)) ) {
1264 DEBUG_l(Perl_deb(aTHX_ "(Skipping label #%ld %s)\n",
1265 (long)i, CxLABEL(cx)));
1268 DEBUG_l( Perl_deb(aTHX_ "(Found label #%ld %s)\n", (long)i, label));
1278 Perl_dowantarray(pTHX)
1281 const I32 gimme = block_gimme();
1282 return (gimme == G_VOID) ? G_SCALAR : gimme;
1286 Perl_block_gimme(pTHX)
1289 const I32 cxix = dopoptosub(cxstack_ix);
1293 switch (cxstack[cxix].blk_gimme) {
1301 Perl_croak(aTHX_ "panic: bad gimme: %d\n", cxstack[cxix].blk_gimme);
1308 Perl_is_lvalue_sub(pTHX)
1311 const I32 cxix = dopoptosub(cxstack_ix);
1312 assert(cxix >= 0); /* We should only be called from inside subs */
1314 if (CxLVAL(cxstack + cxix) && CvLVALUE(cxstack[cxix].blk_sub.cv))
1315 return CxLVAL(cxstack + cxix);
1321 S_dopoptosub_at(pTHX_ const PERL_CONTEXT *cxstk, I32 startingblock)
1325 for (i = startingblock; i >= 0; i--) {
1326 register const PERL_CONTEXT * const cx = &cxstk[i];
1327 switch (CxTYPE(cx)) {
1333 DEBUG_l( Perl_deb(aTHX_ "(Found sub #%ld)\n", (long)i));
1341 S_dopoptoeval(pTHX_ I32 startingblock)
1345 for (i = startingblock; i >= 0; i--) {
1346 register const PERL_CONTEXT *cx = &cxstack[i];
1347 switch (CxTYPE(cx)) {
1351 DEBUG_l( Perl_deb(aTHX_ "(Found eval #%ld)\n", (long)i));
1359 S_dopoptoloop(pTHX_ I32 startingblock)
1363 for (i = startingblock; i >= 0; i--) {
1364 register const PERL_CONTEXT * const cx = &cxstack[i];
1365 switch (CxTYPE(cx)) {
1371 if (ckWARN(WARN_EXITING))
1372 Perl_warner(aTHX_ packWARN(WARN_EXITING), "Exiting %s via %s",
1373 context_name[CxTYPE(cx)], OP_NAME(PL_op));
1374 if ((CxTYPE(cx)) == CXt_NULL)
1377 case CXt_LOOP_LAZYIV:
1378 case CXt_LOOP_LAZYSV:
1380 case CXt_LOOP_PLAIN:
1381 DEBUG_l( Perl_deb(aTHX_ "(Found loop #%ld)\n", (long)i));
1389 S_dopoptogiven(pTHX_ I32 startingblock)
1393 for (i = startingblock; i >= 0; i--) {
1394 register const PERL_CONTEXT *cx = &cxstack[i];
1395 switch (CxTYPE(cx)) {
1399 DEBUG_l( Perl_deb(aTHX_ "(Found given #%ld)\n", (long)i));
1401 case CXt_LOOP_PLAIN:
1402 assert(!CxFOREACHDEF(cx));
1404 case CXt_LOOP_LAZYIV:
1405 case CXt_LOOP_LAZYSV:
1407 if (CxFOREACHDEF(cx)) {
1408 DEBUG_l( Perl_deb(aTHX_ "(Found foreach #%ld)\n", (long)i));
1417 S_dopoptowhen(pTHX_ I32 startingblock)
1421 for (i = startingblock; i >= 0; i--) {
1422 register const PERL_CONTEXT *cx = &cxstack[i];
1423 switch (CxTYPE(cx)) {
1427 DEBUG_l( Perl_deb(aTHX_ "(Found when #%ld)\n", (long)i));
1435 Perl_dounwind(pTHX_ I32 cxix)
1440 while (cxstack_ix > cxix) {
1442 register PERL_CONTEXT *cx = &cxstack[cxstack_ix];
1443 DEBUG_l(PerlIO_printf(Perl_debug_log, "Unwinding block %ld, type %s\n",
1444 (long) cxstack_ix, PL_block_type[CxTYPE(cx)]));
1445 /* Note: we don't need to restore the base context info till the end. */
1446 switch (CxTYPE(cx)) {
1449 continue; /* not break */
1457 case CXt_LOOP_LAZYIV:
1458 case CXt_LOOP_LAZYSV:
1460 case CXt_LOOP_PLAIN:
1471 PERL_UNUSED_VAR(optype);
1475 Perl_qerror(pTHX_ SV *err)
1479 sv_catsv(ERRSV, err);
1481 sv_catsv(PL_errors, err);
1483 Perl_warn(aTHX_ "%"SVf, SVfARG(err));
1485 ++PL_parser->error_count;
1489 Perl_die_where(pTHX_ const char *message, STRLEN msglen)
1498 if (PL_in_eval & EVAL_KEEPERR) {
1499 static const char prefix[] = "\t(in cleanup) ";
1500 SV * const err = ERRSV;
1501 const char *e = NULL;
1503 sv_setpvn(err,"",0);
1504 else if (SvCUR(err) >= sizeof(prefix)+msglen-1) {
1506 e = SvPV_const(err, len);
1508 if (*e != *message || strNE(e,message))
1512 SvGROW(err, SvCUR(err)+sizeof(prefix)+msglen);
1513 sv_catpvn(err, prefix, sizeof(prefix)-1);
1514 sv_catpvn(err, message, msglen);
1515 if (ckWARN(WARN_MISC)) {
1516 const STRLEN start = SvCUR(err)-msglen-sizeof(prefix)+1;
1517 Perl_warner(aTHX_ packWARN(WARN_MISC), SvPVX_const(err)+start);
1522 sv_setpvn(ERRSV, message, msglen);
1526 while ((cxix = dopoptoeval(cxstack_ix)) < 0
1527 && PL_curstackinfo->si_prev)
1535 register PERL_CONTEXT *cx;
1538 if (cxix < cxstack_ix)
1541 POPBLOCK(cx,PL_curpm);
1542 if (CxTYPE(cx) != CXt_EVAL) {
1544 message = SvPVx_const(ERRSV, msglen);
1545 PerlIO_write(Perl_error_log, (const char *)"panic: die ", 11);
1546 PerlIO_write(Perl_error_log, message, msglen);
1551 if (gimme == G_SCALAR)
1552 *++newsp = &PL_sv_undef;
1553 PL_stack_sp = newsp;
1557 /* LEAVE could clobber PL_curcop (see save_re_context())
1558 * XXX it might be better to find a way to avoid messing with
1559 * PL_curcop in save_re_context() instead, but this is a more
1560 * minimal fix --GSAR */
1561 PL_curcop = cx->blk_oldcop;
1563 if (optype == OP_REQUIRE) {
1564 const char* const msg = SvPVx_nolen_const(ERRSV);
1565 SV * const nsv = cx->blk_eval.old_namesv;
1566 (void)hv_store(GvHVn(PL_incgv), SvPVX_const(nsv), SvCUR(nsv),
1568 DIE(aTHX_ "%sCompilation failed in require",
1569 *msg ? msg : "Unknown error\n");
1571 assert(CxTYPE(cx) == CXt_EVAL);
1572 return cx->blk_eval.retop;
1576 message = SvPVx_const(ERRSV, msglen);
1578 write_to_stderr(message, msglen);
1586 dVAR; dSP; dPOPTOPssrl;
1587 if (SvTRUE(left) != SvTRUE(right))
1597 register I32 cxix = dopoptosub(cxstack_ix);
1598 register const PERL_CONTEXT *cx;
1599 register const PERL_CONTEXT *ccstack = cxstack;
1600 const PERL_SI *top_si = PL_curstackinfo;
1602 const char *stashname;
1609 /* we may be in a higher stacklevel, so dig down deeper */
1610 while (cxix < 0 && top_si->si_type != PERLSI_MAIN) {
1611 top_si = top_si->si_prev;
1612 ccstack = top_si->si_cxstack;
1613 cxix = dopoptosub_at(ccstack, top_si->si_cxix);
1616 if (GIMME != G_ARRAY) {
1622 /* caller() should not report the automatic calls to &DB::sub */
1623 if (PL_DBsub && GvCV(PL_DBsub) && cxix >= 0 &&
1624 ccstack[cxix].blk_sub.cv == GvCV(PL_DBsub))
1628 cxix = dopoptosub_at(ccstack, cxix - 1);
1631 cx = &ccstack[cxix];
1632 if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
1633 const I32 dbcxix = dopoptosub_at(ccstack, cxix - 1);
1634 /* We expect that ccstack[dbcxix] is CXt_SUB, anyway, the
1635 field below is defined for any cx. */
1636 /* caller() should not report the automatic calls to &DB::sub */
1637 if (PL_DBsub && GvCV(PL_DBsub) && dbcxix >= 0 && ccstack[dbcxix].blk_sub.cv == GvCV(PL_DBsub))
1638 cx = &ccstack[dbcxix];
1641 stashname = CopSTASHPV(cx->blk_oldcop);
1642 if (GIMME != G_ARRAY) {
1645 PUSHs(&PL_sv_undef);
1648 sv_setpv(TARG, stashname);
1657 PUSHs(&PL_sv_undef);
1659 mPUSHs(newSVpv(stashname, 0));
1660 mPUSHs(newSVpv(OutCopFILE(cx->blk_oldcop), 0));
1661 mPUSHi((I32)CopLINE(cx->blk_oldcop));
1664 if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
1665 GV * const cvgv = CvGV(ccstack[cxix].blk_sub.cv);
1666 /* So is ccstack[dbcxix]. */
1668 SV * const sv = newSV(0);
1669 gv_efullname3(sv, cvgv, NULL);
1671 PUSHs(boolSV(CxHASARGS(cx)));
1674 PUSHs(newSVpvs_flags("(unknown)", SVs_TEMP));
1675 PUSHs(boolSV(CxHASARGS(cx)));
1679 PUSHs(newSVpvs_flags("(eval)", SVs_TEMP));
1682 gimme = (I32)cx->blk_gimme;
1683 if (gimme == G_VOID)
1684 PUSHs(&PL_sv_undef);
1686 PUSHs(boolSV((gimme & G_WANT) == G_ARRAY));
1687 if (CxTYPE(cx) == CXt_EVAL) {
1689 if (CxOLD_OP_TYPE(cx) == OP_ENTEREVAL) {
1690 PUSHs(cx->blk_eval.cur_text);
1694 else if (cx->blk_eval.old_namesv) {
1695 mPUSHs(newSVsv(cx->blk_eval.old_namesv));
1698 /* eval BLOCK (try blocks have old_namesv == 0) */
1700 PUSHs(&PL_sv_undef);
1701 PUSHs(&PL_sv_undef);
1705 PUSHs(&PL_sv_undef);
1706 PUSHs(&PL_sv_undef);
1708 if (CxTYPE(cx) == CXt_SUB && CxHASARGS(cx)
1709 && CopSTASH_eq(PL_curcop, PL_debstash))
1711 AV * const ary = cx->blk_sub.argarray;
1712 const int off = AvARRAY(ary) - AvALLOC(ary);
1715 GV* const tmpgv = gv_fetchpvs("DB::args", GV_ADD, SVt_PVAV);
1716 PL_dbargs = GvAV(gv_AVadd(tmpgv));
1718 AvREAL_off(PL_dbargs); /* XXX should be REIFY (see av.h) */
1721 if (AvMAX(PL_dbargs) < AvFILLp(ary) + off)
1722 av_extend(PL_dbargs, AvFILLp(ary) + off);
1723 Copy(AvALLOC(ary), AvARRAY(PL_dbargs), AvFILLp(ary) + 1 + off, SV*);
1724 AvFILLp(PL_dbargs) = AvFILLp(ary) + off;
1726 /* XXX only hints propagated via op_private are currently
1727 * visible (others are not easily accessible, since they
1728 * use the global PL_hints) */
1729 mPUSHi(CopHINTS_get(cx->blk_oldcop));
1732 STRLEN * const old_warnings = cx->blk_oldcop->cop_warnings ;
1734 if (old_warnings == pWARN_NONE ||
1735 (old_warnings == pWARN_STD && (PL_dowarn & G_WARN_ON) == 0))
1736 mask = newSVpvn(WARN_NONEstring, WARNsize) ;
1737 else if (old_warnings == pWARN_ALL ||
1738 (old_warnings == pWARN_STD && PL_dowarn & G_WARN_ON)) {
1739 /* Get the bit mask for $warnings::Bits{all}, because
1740 * it could have been extended by warnings::register */
1742 HV * const bits = get_hv("warnings::Bits", FALSE);
1743 if (bits && (bits_all=hv_fetchs(bits, "all", FALSE))) {
1744 mask = newSVsv(*bits_all);
1747 mask = newSVpvn(WARN_ALLstring, WARNsize) ;
1751 mask = newSVpvn((char *) (old_warnings + 1), old_warnings[0]);
1755 PUSHs(cx->blk_oldcop->cop_hints_hash ?
1756 sv_2mortal(newRV_noinc(
1757 (SV*)Perl_refcounted_he_chain_2hv(aTHX_
1758 cx->blk_oldcop->cop_hints_hash)))
1767 const char * const tmps = (MAXARG < 1) ? (const char *)"" : POPpconstx;
1768 sv_reset(tmps, CopSTASH(PL_curcop));
1773 /* like pp_nextstate, but used instead when the debugger is active */
1778 PL_curcop = (COP*)PL_op;
1779 TAINT_NOT; /* Each statement is presumed innocent */
1780 PL_stack_sp = PL_stack_base + cxstack[cxstack_ix].blk_oldsp;
1783 if (PL_op->op_flags & OPf_SPECIAL /* breakpoint */
1784 || SvIV(PL_DBsingle) || SvIV(PL_DBsignal) || SvIV(PL_DBtrace))
1787 register PERL_CONTEXT *cx;
1788 const I32 gimme = G_ARRAY;
1790 GV * const gv = PL_DBgv;
1791 register CV * const cv = GvCV(gv);
1794 DIE(aTHX_ "No DB::DB routine defined");
1796 if (CvDEPTH(cv) >= 1 && !(PL_debug & DEBUG_DB_RECURSE_FLAG))
1797 /* don't do recursive DB::DB call */
1812 (void)(*CvXSUB(cv))(aTHX_ cv);
1819 PUSHBLOCK(cx, CXt_SUB, SP);
1821 cx->blk_sub.retop = PL_op->op_next;
1824 PAD_SET_CUR_NOSAVE(CvPADLIST(cv), 1);
1825 RETURNOP(CvSTART(cv));
1835 register PERL_CONTEXT *cx;
1836 const I32 gimme = GIMME_V;
1838 U8 cxtype = CXt_LOOP_FOR;
1846 if (PL_op->op_targ) {
1847 if (PL_op->op_private & OPpLVAL_INTRO) { /* for my $x (...) */
1848 SvPADSTALE_off(PAD_SVl(PL_op->op_targ));
1849 SAVESETSVFLAGS(PAD_SVl(PL_op->op_targ),
1850 SVs_PADSTALE, SVs_PADSTALE);
1852 #ifndef USE_ITHREADS
1853 svp = &PAD_SVl(PL_op->op_targ); /* "my" variable */
1856 SAVEPADSV(PL_op->op_targ);
1857 iterdata = INT2PTR(void*, PL_op->op_targ);
1858 cxtype |= CXp_PADVAR;
1862 GV * const gv = (GV*)POPs;
1863 svp = &GvSV(gv); /* symbol table variable */
1864 SAVEGENERICSV(*svp);
1867 iterdata = (void*)gv;
1871 if (PL_op->op_private & OPpITER_DEF)
1872 cxtype |= CXp_FOR_DEF;
1876 PUSHBLOCK(cx, cxtype, SP);
1878 PUSHLOOP_FOR(cx, iterdata, MARK);
1880 PUSHLOOP_FOR(cx, svp, MARK);
1882 if (PL_op->op_flags & OPf_STACKED) {
1883 SV *maybe_ary = POPs;
1884 if (SvTYPE(maybe_ary) != SVt_PVAV) {
1886 SV * const right = maybe_ary;
1889 if (RANGE_IS_NUMERIC(sv,right)) {
1890 cx->cx_type &= ~CXTYPEMASK;
1891 cx->cx_type |= CXt_LOOP_LAZYIV;
1892 /* Make sure that no-one re-orders cop.h and breaks our
1894 assert(CxTYPE(cx) == CXt_LOOP_LAZYIV);
1895 #ifdef NV_PRESERVES_UV
1896 if ((SvOK(sv) && ((SvNV(sv) < (NV)IV_MIN) ||
1897 (SvNV(sv) > (NV)IV_MAX)))
1899 (SvOK(right) && ((SvNV(right) > (NV)IV_MAX) ||
1900 (SvNV(right) < (NV)IV_MIN))))
1902 if ((SvOK(sv) && ((SvNV(sv) <= (NV)IV_MIN)
1905 ((SvUV(sv) > (UV)IV_MAX) ||
1906 (SvNV(sv) > (NV)UV_MAX)))))
1908 (SvOK(right) && ((SvNV(right) <= (NV)IV_MIN)
1910 ((SvNV(right) > 0) &&
1911 ((SvUV(right) > (UV)IV_MAX) ||
1912 (SvNV(right) > (NV)UV_MAX))))))
1914 DIE(aTHX_ "Range iterator outside integer range");
1915 cx->blk_loop.state_u.lazyiv.cur = SvIV(sv);
1916 cx->blk_loop.state_u.lazyiv.end = SvIV(right);
1918 /* for correct -Dstv display */
1919 cx->blk_oldsp = sp - PL_stack_base;
1923 cx->cx_type &= ~CXTYPEMASK;
1924 cx->cx_type |= CXt_LOOP_LAZYSV;
1925 /* Make sure that no-one re-orders cop.h and breaks our
1927 assert(CxTYPE(cx) == CXt_LOOP_LAZYSV);
1928 cx->blk_loop.state_u.lazysv.cur = newSVsv(sv);
1929 cx->blk_loop.state_u.lazysv.end = right;
1930 SvREFCNT_inc(right);
1931 (void) SvPV_force_nolen(cx->blk_loop.state_u.lazysv.cur);
1932 /* This will do the upgrade to SVt_PV, and warn if the value
1933 is uninitialised. */
1934 (void) SvPV_nolen_const(right);
1935 /* Doing this avoids a check every time in pp_iter in pp_hot.c
1936 to replace !SvOK() with a pointer to "". */
1938 SvREFCNT_dec(right);
1939 cx->blk_loop.state_u.lazysv.end = &PL_sv_no;
1943 else /* SvTYPE(maybe_ary) == SVt_PVAV */ {
1944 cx->blk_loop.state_u.ary.ary = (AV*)maybe_ary;
1945 SvREFCNT_inc(maybe_ary);
1946 cx->blk_loop.state_u.ary.ix =
1947 (PL_op->op_private & OPpITER_REVERSED) ?
1948 AvFILL(cx->blk_loop.state_u.ary.ary) + 1 :
1952 else { /* iterating over items on the stack */
1953 cx->blk_loop.state_u.ary.ary = NULL; /* means to use the stack */
1954 if (PL_op->op_private & OPpITER_REVERSED) {
1955 cx->blk_loop.state_u.ary.ix = cx->blk_oldsp + 1;
1958 cx->blk_loop.state_u.ary.ix = MARK - PL_stack_base;
1968 register PERL_CONTEXT *cx;
1969 const I32 gimme = GIMME_V;
1975 PUSHBLOCK(cx, CXt_LOOP_PLAIN, SP);
1976 PUSHLOOP_PLAIN(cx, SP);
1984 register PERL_CONTEXT *cx;
1991 assert(CxTYPE_is_LOOP(cx));
1993 newsp = PL_stack_base + cx->blk_loop.resetsp;
1996 if (gimme == G_VOID)
1998 else if (gimme == G_SCALAR) {
2000 *++newsp = sv_mortalcopy(*SP);
2002 *++newsp = &PL_sv_undef;
2006 *++newsp = sv_mortalcopy(*++mark);
2007 TAINT_NOT; /* Each item is independent */
2013 POPLOOP(cx); /* Stack values are safe: release loop vars ... */
2014 PL_curpm = newpm; /* ... and pop $1 et al */
2025 register PERL_CONTEXT *cx;
2026 bool popsub2 = FALSE;
2027 bool clear_errsv = FALSE;
2035 const I32 cxix = dopoptosub(cxstack_ix);
2038 if (CxMULTICALL(cxstack)) { /* In this case we must be in a
2039 * sort block, which is a CXt_NULL
2042 PL_stack_base[1] = *PL_stack_sp;
2043 PL_stack_sp = PL_stack_base + 1;
2047 DIE(aTHX_ "Can't return outside a subroutine");
2049 if (cxix < cxstack_ix)
2052 if (CxMULTICALL(&cxstack[cxix])) {
2053 gimme = cxstack[cxix].blk_gimme;
2054 if (gimme == G_VOID)
2055 PL_stack_sp = PL_stack_base;
2056 else if (gimme == G_SCALAR) {
2057 PL_stack_base[1] = *PL_stack_sp;
2058 PL_stack_sp = PL_stack_base + 1;
2064 switch (CxTYPE(cx)) {
2067 retop = cx->blk_sub.retop;
2068 cxstack_ix++; /* preserve cx entry on stack for use by POPSUB */
2071 if (!(PL_in_eval & EVAL_KEEPERR))
2074 retop = cx->blk_eval.retop;
2078 if (optype == OP_REQUIRE &&
2079 (MARK == SP || (gimme == G_SCALAR && !SvTRUE(*SP))) )
2081 /* Unassume the success we assumed earlier. */
2082 SV * const nsv = cx->blk_eval.old_namesv;
2083 (void)hv_delete(GvHVn(PL_incgv), SvPVX_const(nsv), SvCUR(nsv), G_DISCARD);
2084 DIE(aTHX_ "%"SVf" did not return a true value", SVfARG(nsv));
2089 retop = cx->blk_sub.retop;
2092 DIE(aTHX_ "panic: return");
2096 if (gimme == G_SCALAR) {
2099 if (cx->blk_sub.cv && CvDEPTH(cx->blk_sub.cv) > 1) {
2101 *++newsp = SvREFCNT_inc(*SP);
2106 sv = SvREFCNT_inc(*SP); /* FREETMPS could clobber it */
2108 *++newsp = sv_mortalcopy(sv);
2113 *++newsp = (SvTEMP(*SP)) ? *SP : sv_mortalcopy(*SP);
2116 *++newsp = sv_mortalcopy(*SP);
2119 *++newsp = &PL_sv_undef;
2121 else if (gimme == G_ARRAY) {
2122 while (++MARK <= SP) {
2123 *++newsp = (popsub2 && SvTEMP(*MARK))
2124 ? *MARK : sv_mortalcopy(*MARK);
2125 TAINT_NOT; /* Each item is independent */
2128 PL_stack_sp = newsp;
2131 /* Stack values are safe: */
2134 POPSUB(cx,sv); /* release CV and @_ ... */
2138 PL_curpm = newpm; /* ... and pop $1 et al */
2142 sv_setpvn(ERRSV,"",0);
2150 register PERL_CONTEXT *cx;
2161 if (PL_op->op_flags & OPf_SPECIAL) {
2162 cxix = dopoptoloop(cxstack_ix);
2164 DIE(aTHX_ "Can't \"last\" outside a loop block");
2167 cxix = dopoptolabel(cPVOP->op_pv);
2169 DIE(aTHX_ "Label not found for \"last %s\"", cPVOP->op_pv);
2171 if (cxix < cxstack_ix)
2175 cxstack_ix++; /* temporarily protect top context */
2177 switch (CxTYPE(cx)) {
2178 case CXt_LOOP_LAZYIV:
2179 case CXt_LOOP_LAZYSV:
2181 case CXt_LOOP_PLAIN:
2183 newsp = PL_stack_base + cx->blk_loop.resetsp;
2184 nextop = cx->blk_loop.my_op->op_lastop->op_next;
2188 nextop = cx->blk_sub.retop;
2192 nextop = cx->blk_eval.retop;
2196 nextop = cx->blk_sub.retop;
2199 DIE(aTHX_ "panic: last");
2203 if (gimme == G_SCALAR) {
2205 *++newsp = ((pop2 == CXt_SUB) && SvTEMP(*SP))
2206 ? *SP : sv_mortalcopy(*SP);
2208 *++newsp = &PL_sv_undef;
2210 else if (gimme == G_ARRAY) {
2211 while (++MARK <= SP) {
2212 *++newsp = ((pop2 == CXt_SUB) && SvTEMP(*MARK))
2213 ? *MARK : sv_mortalcopy(*MARK);
2214 TAINT_NOT; /* Each item is independent */
2222 /* Stack values are safe: */
2224 case CXt_LOOP_LAZYIV:
2225 case CXt_LOOP_PLAIN:
2226 case CXt_LOOP_LAZYSV:
2228 POPLOOP(cx); /* release loop vars ... */
2232 POPSUB(cx,sv); /* release CV and @_ ... */
2235 PL_curpm = newpm; /* ... and pop $1 et al */
2238 PERL_UNUSED_VAR(optype);
2239 PERL_UNUSED_VAR(gimme);
2247 register PERL_CONTEXT *cx;
2250 if (PL_op->op_flags & OPf_SPECIAL) {
2251 cxix = dopoptoloop(cxstack_ix);
2253 DIE(aTHX_ "Can't \"next\" outside a loop block");
2256 cxix = dopoptolabel(cPVOP->op_pv);
2258 DIE(aTHX_ "Label not found for \"next %s\"", cPVOP->op_pv);
2260 if (cxix < cxstack_ix)
2263 /* clear off anything above the scope we're re-entering, but
2264 * save the rest until after a possible continue block */
2265 inner = PL_scopestack_ix;
2267 if (PL_scopestack_ix < inner)
2268 leave_scope(PL_scopestack[PL_scopestack_ix]);
2269 PL_curcop = cx->blk_oldcop;
2270 return CX_LOOP_NEXTOP_GET(cx);
2277 register PERL_CONTEXT *cx;
2281 if (PL_op->op_flags & OPf_SPECIAL) {
2282 cxix = dopoptoloop(cxstack_ix);
2284 DIE(aTHX_ "Can't \"redo\" outside a loop block");
2287 cxix = dopoptolabel(cPVOP->op_pv);
2289 DIE(aTHX_ "Label not found for \"redo %s\"", cPVOP->op_pv);
2291 if (cxix < cxstack_ix)
2294 redo_op = cxstack[cxix].blk_loop.my_op->op_redoop;
2295 if (redo_op->op_type == OP_ENTER) {
2296 /* pop one less context to avoid $x being freed in while (my $x..) */
2298 assert(CxTYPE(&cxstack[cxstack_ix]) == CXt_BLOCK);
2299 redo_op = redo_op->op_next;
2303 oldsave = PL_scopestack[PL_scopestack_ix - 1];
2304 LEAVE_SCOPE(oldsave);
2306 PL_curcop = cx->blk_oldcop;
2311 S_dofindlabel(pTHX_ OP *o, const char *label, OP **opstack, OP **oplimit)
2315 static const char too_deep[] = "Target of goto is too deeply nested";
2318 Perl_croak(aTHX_ too_deep);
2319 if (o->op_type == OP_LEAVE ||
2320 o->op_type == OP_SCOPE ||
2321 o->op_type == OP_LEAVELOOP ||
2322 o->op_type == OP_LEAVESUB ||
2323 o->op_type == OP_LEAVETRY)
2325 *ops++ = cUNOPo->op_first;
2327 Perl_croak(aTHX_ too_deep);
2330 if (o->op_flags & OPf_KIDS) {
2332 /* First try all the kids at this level, since that's likeliest. */
2333 for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling) {
2334 if ((kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) &&
2335 kCOP->cop_label && strEQ(kCOP->cop_label, label))
2338 for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling) {
2339 if (kid == PL_lastgotoprobe)
2341 if (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) {
2344 else if (ops[-1]->op_type == OP_NEXTSTATE ||
2345 ops[-1]->op_type == OP_DBSTATE)
2350 if ((o = dofindlabel(kid, label, ops, oplimit)))
2363 register PERL_CONTEXT *cx;
2364 #define GOTO_DEPTH 64
2365 OP *enterops[GOTO_DEPTH];
2366 const char *label = NULL;
2367 const bool do_dump = (PL_op->op_type == OP_DUMP);
2368 static const char must_have_label[] = "goto must have label";
2370 if (PL_op->op_flags & OPf_STACKED) {
2371 SV * const sv = POPs;
2373 /* This egregious kludge implements goto &subroutine */
2374 if (SvROK(sv) && SvTYPE(SvRV(sv)) == SVt_PVCV) {
2376 register PERL_CONTEXT *cx;
2377 CV* cv = (CV*)SvRV(sv);
2384 if (!CvROOT(cv) && !CvXSUB(cv)) {
2385 const GV * const gv = CvGV(cv);
2389 /* autoloaded stub? */
2390 if (cv != GvCV(gv) && (cv = GvCV(gv)))
2392 autogv = gv_autoload4(GvSTASH(gv), GvNAME(gv),
2393 GvNAMELEN(gv), FALSE);
2394 if (autogv && (cv = GvCV(autogv)))
2396 tmpstr = sv_newmortal();
2397 gv_efullname3(tmpstr, gv, NULL);
2398 DIE(aTHX_ "Goto undefined subroutine &%"SVf"", SVfARG(tmpstr));
2400 DIE(aTHX_ "Goto undefined subroutine");
2403 /* First do some returnish stuff. */
2404 SvREFCNT_inc_simple_void(cv); /* avoid premature free during unwind */
2406 cxix = dopoptosub(cxstack_ix);
2408 DIE(aTHX_ "Can't goto subroutine outside a subroutine");
2409 if (cxix < cxstack_ix)
2413 /* ban goto in eval: see <20050521150056.GC20213@iabyn.com> */
2414 if (CxTYPE(cx) == CXt_EVAL) {
2416 DIE(aTHX_ "Can't goto subroutine from an eval-string");
2418 DIE(aTHX_ "Can't goto subroutine from an eval-block");
2420 else if (CxMULTICALL(cx))
2421 DIE(aTHX_ "Can't goto subroutine from a sort sub (or similar callback)");
2422 if (CxTYPE(cx) == CXt_SUB && CxHASARGS(cx)) {
2423 /* put @_ back onto stack */
2424 AV* av = cx->blk_sub.argarray;
2426 items = AvFILLp(av) + 1;
2427 EXTEND(SP, items+1); /* @_ could have been extended. */
2428 Copy(AvARRAY(av), SP + 1, items, SV*);
2429 SvREFCNT_dec(GvAV(PL_defgv));
2430 GvAV(PL_defgv) = cx->blk_sub.savearray;
2432 /* abandon @_ if it got reified */
2437 av_extend(av, items-1);
2439 PAD_SVl(0) = (SV*)(cx->blk_sub.argarray = av);
2442 else if (CvISXSUB(cv)) { /* put GvAV(defgv) back onto stack */
2443 AV* const av = GvAV(PL_defgv);
2444 items = AvFILLp(av) + 1;
2445 EXTEND(SP, items+1); /* @_ could have been extended. */
2446 Copy(AvARRAY(av), SP + 1, items, SV*);
2450 if (CxTYPE(cx) == CXt_SUB &&
2451 !(CvDEPTH(cx->blk_sub.cv) = cx->blk_sub.olddepth))
2452 SvREFCNT_dec(cx->blk_sub.cv);
2453 oldsave = PL_scopestack[PL_scopestack_ix - 1];
2454 LEAVE_SCOPE(oldsave);
2456 /* Now do some callish stuff. */
2458 SAVEFREESV(cv); /* later, undo the 'avoid premature free' hack */
2460 OP* const retop = cx->blk_sub.retop;
2465 for (index=0; index<items; index++)
2466 sv_2mortal(SP[-index]);
2469 /* XS subs don't have a CxSUB, so pop it */
2470 POPBLOCK(cx, PL_curpm);
2471 /* Push a mark for the start of arglist */
2474 (void)(*CvXSUB(cv))(aTHX_ cv);
2479 AV* const padlist = CvPADLIST(cv);
2480 if (CxTYPE(cx) == CXt_EVAL) {
2481 PL_in_eval = CxOLD_IN_EVAL(cx);
2482 PL_eval_root = cx->blk_eval.old_eval_root;
2483 cx->cx_type = CXt_SUB;
2485 cx->blk_sub.cv = cv;
2486 cx->blk_sub.olddepth = CvDEPTH(cv);
2489 if (CvDEPTH(cv) < 2)
2490 SvREFCNT_inc_simple_void_NN(cv);
2492 if (CvDEPTH(cv) == PERL_SUB_DEPTH_WARN && ckWARN(WARN_RECURSION))
2493 sub_crush_depth(cv);
2494 pad_push(padlist, CvDEPTH(cv));
2497 PAD_SET_CUR_NOSAVE(padlist, CvDEPTH(cv));
2500 AV* const av = (AV*)PAD_SVl(0);
2502 cx->blk_sub.savearray = GvAV(PL_defgv);
2503 GvAV(PL_defgv) = (AV*)SvREFCNT_inc_simple(av);
2504 CX_CURPAD_SAVE(cx->blk_sub);
2505 cx->blk_sub.argarray = av;
2507 if (items >= AvMAX(av) + 1) {
2508 SV **ary = AvALLOC(av);
2509 if (AvARRAY(av) != ary) {
2510 AvMAX(av) += AvARRAY(av) - AvALLOC(av);
2513 if (items >= AvMAX(av) + 1) {
2514 AvMAX(av) = items - 1;
2515 Renew(ary,items+1,SV*);
2521 Copy(mark,AvARRAY(av),items,SV*);
2522 AvFILLp(av) = items - 1;
2523 assert(!AvREAL(av));
2525 /* transfer 'ownership' of refcnts to new @_ */
2535 if (PERLDB_SUB) { /* Checking curstash breaks DProf. */
2536 Perl_get_db_sub(aTHX_ NULL, cv);
2538 CV * const gotocv = get_cv("DB::goto", FALSE);
2540 PUSHMARK( PL_stack_sp );
2541 call_sv((SV*)gotocv, G_SCALAR | G_NODEBUG);
2546 RETURNOP(CvSTART(cv));
2550 label = SvPV_nolen_const(sv);
2551 if (!(do_dump || *label))
2552 DIE(aTHX_ must_have_label);
2555 else if (PL_op->op_flags & OPf_SPECIAL) {
2557 DIE(aTHX_ must_have_label);
2560 label = cPVOP->op_pv;
2562 if (label && *label) {
2563 OP *gotoprobe = NULL;
2564 bool leaving_eval = FALSE;
2565 bool in_block = FALSE;
2566 PERL_CONTEXT *last_eval_cx = NULL;
2570 PL_lastgotoprobe = NULL;
2572 for (ix = cxstack_ix; ix >= 0; ix--) {
2574 switch (CxTYPE(cx)) {
2576 leaving_eval = TRUE;
2577 if (!CxTRYBLOCK(cx)) {
2578 gotoprobe = (last_eval_cx ?
2579 last_eval_cx->blk_eval.old_eval_root :
2584 /* else fall through */
2585 case CXt_LOOP_LAZYIV:
2586 case CXt_LOOP_LAZYSV:
2588 case CXt_LOOP_PLAIN:
2589 gotoprobe = cx->blk_oldcop->op_sibling;
2595 gotoprobe = cx->blk_oldcop->op_sibling;
2598 gotoprobe = PL_main_root;
2601 if (CvDEPTH(cx->blk_sub.cv) && !CxMULTICALL(cx)) {
2602 gotoprobe = CvROOT(cx->blk_sub.cv);
2608 DIE(aTHX_ "Can't \"goto\" out of a pseudo block");
2611 DIE(aTHX_ "panic: goto");
2612 gotoprobe = PL_main_root;
2616 retop = dofindlabel(gotoprobe, label,
2617 enterops, enterops + GOTO_DEPTH);
2621 PL_lastgotoprobe = gotoprobe;
2624 DIE(aTHX_ "Can't find label %s", label);
2626 /* if we're leaving an eval, check before we pop any frames
2627 that we're not going to punt, otherwise the error
2630 if (leaving_eval && *enterops && enterops[1]) {
2632 for (i = 1; enterops[i]; i++)
2633 if (enterops[i]->op_type == OP_ENTERITER)
2634 DIE(aTHX_ "Can't \"goto\" into the middle of a foreach loop");
2637 /* pop unwanted frames */
2639 if (ix < cxstack_ix) {
2646 oldsave = PL_scopestack[PL_scopestack_ix];
2647 LEAVE_SCOPE(oldsave);
2650 /* push wanted frames */
2652 if (*enterops && enterops[1]) {
2653 OP * const oldop = PL_op;
2654 ix = enterops[1]->op_type == OP_ENTER && in_block ? 2 : 1;
2655 for (; enterops[ix]; ix++) {
2656 PL_op = enterops[ix];
2657 /* Eventually we may want to stack the needed arguments
2658 * for each op. For now, we punt on the hard ones. */
2659 if (PL_op->op_type == OP_ENTERITER)
2660 DIE(aTHX_ "Can't \"goto\" into the middle of a foreach loop");
2661 CALL_FPTR(PL_op->op_ppaddr)(aTHX);
2669 if (!retop) retop = PL_main_start;
2671 PL_restartop = retop;
2672 PL_do_undump = TRUE;
2676 PL_restartop = 0; /* hmm, must be GNU unexec().. */
2677 PL_do_undump = FALSE;
2694 if (anum == 1 && (PL_op->op_private & OPpEXIT_VMSISH))
2696 VMSISH_HUSHED = VMSISH_HUSHED || (PL_op->op_private & OPpHUSH_VMSISH);
2699 PL_exit_flags |= PERL_EXIT_EXPECTED;
2701 /* KLUDGE: disable exit 0 in BEGIN blocks when we're just compiling */
2702 if (anum || !(PL_minus_c && PL_madskills))
2707 PUSHs(&PL_sv_undef);
2714 S_save_lines(pTHX_ AV *array, SV *sv)
2716 const char *s = SvPVX_const(sv);
2717 const char * const send = SvPVX_const(sv) + SvCUR(sv);
2720 while (s && s < send) {
2722 SV * const tmpstr = newSV_type(SVt_PVMG);
2724 t = strchr(s, '\n');
2730 sv_setpvn(tmpstr, s, t - s);
2731 av_store(array, line++, tmpstr);
2737 S_docatch(pTHX_ OP *o)
2741 OP * const oldop = PL_op;
2745 assert(CATCH_GET == TRUE);
2752 assert(cxstack_ix >= 0);
2753 assert(CxTYPE(&cxstack[cxstack_ix]) == CXt_EVAL);
2754 cxstack[cxstack_ix].blk_eval.cur_top_env = PL_top_env;
2759 /* die caught by an inner eval - continue inner loop */
2761 /* NB XXX we rely on the old popped CxEVAL still being at the top
2762 * of the stack; the way die_where() currently works, this
2763 * assumption is valid. In theory The cur_top_env value should be
2764 * returned in another global, the way retop (aka PL_restartop)
2766 assert(CxTYPE(&cxstack[cxstack_ix+1]) == CXt_EVAL);
2769 && cxstack[cxstack_ix+1].blk_eval.cur_top_env == PL_top_env)
2771 PL_op = PL_restartop;
2788 Perl_sv_compile_2op(pTHX_ SV *sv, OP** startop, const char *code, PAD** padp)
2789 /* sv Text to convert to OP tree. */
2790 /* startop op_free() this to undo. */
2791 /* code Short string id of the caller. */
2793 /* FIXME - how much of this code is common with pp_entereval? */
2794 dVAR; dSP; /* Make POPBLOCK work. */
2800 char tbuf[TYPE_DIGITS(long) + 12 + 10];
2801 char *tmpbuf = tbuf;
2804 CV* runcv = NULL; /* initialise to avoid compiler warnings */
2808 lex_start(sv, NULL, FALSE);
2810 /* switch to eval mode */
2812 if (IN_PERL_COMPILETIME) {
2813 SAVECOPSTASH_FREE(&PL_compiling);
2814 CopSTASH_set(&PL_compiling, PL_curstash);
2816 if (PERLDB_NAMEEVAL && CopLINE(PL_curcop)) {
2817 SV * const sv = sv_newmortal();
2818 Perl_sv_setpvf(aTHX_ sv, "_<(%.10seval %lu)[%s:%"IVdf"]",
2819 code, (unsigned long)++PL_evalseq,
2820 CopFILE(PL_curcop), (IV)CopLINE(PL_curcop));
2825 len = my_snprintf(tmpbuf, sizeof(tbuf), "_<(%.10s_eval %lu)", code,
2826 (unsigned long)++PL_evalseq);
2827 SAVECOPFILE_FREE(&PL_compiling);
2828 CopFILE_set(&PL_compiling, tmpbuf+2);
2829 SAVECOPLINE(&PL_compiling);
2830 CopLINE_set(&PL_compiling, 1);
2831 /* XXX For C<eval "...">s within BEGIN {} blocks, this ends up
2832 deleting the eval's FILEGV from the stash before gv_check() runs
2833 (i.e. before run-time proper). To work around the coredump that
2834 ensues, we always turn GvMULTI_on for any globals that were
2835 introduced within evals. See force_ident(). GSAR 96-10-12 */
2836 safestr = savepvn(tmpbuf, len);
2837 SAVEDELETE(PL_defstash, safestr, len);
2839 #ifdef OP_IN_REGISTER
2845 /* we get here either during compilation, or via pp_regcomp at runtime */
2846 runtime = IN_PERL_RUNTIME;
2848 runcv = find_runcv(NULL);
2851 PL_op->op_type = OP_ENTEREVAL;
2852 PL_op->op_flags = 0; /* Avoid uninit warning. */
2853 PUSHBLOCK(cx, CXt_EVAL|(IN_PERL_COMPILETIME ? 0 : CXp_REAL), SP);
2854 PUSHEVAL(cx, 0, NULL);
2857 (void) doeval(G_SCALAR, startop, runcv, PL_curcop->cop_seq);
2859 (void) doeval(G_SCALAR, startop, PL_compcv, PL_cop_seqmax);
2860 POPBLOCK(cx,PL_curpm);
2863 (*startop)->op_type = OP_NULL;
2864 (*startop)->op_ppaddr = PL_ppaddr[OP_NULL];
2866 /* XXX DAPM do this properly one year */
2867 *padp = (AV*)SvREFCNT_inc_simple(PL_comppad);
2869 if (IN_PERL_COMPILETIME)
2870 CopHINTS_set(&PL_compiling, PL_hints);
2871 #ifdef OP_IN_REGISTER
2874 PERL_UNUSED_VAR(newsp);
2875 PERL_UNUSED_VAR(optype);
2877 return PL_eval_start;
2882 =for apidoc find_runcv
2884 Locate the CV corresponding to the currently executing sub or eval.
2885 If db_seqp is non_null, skip CVs that are in the DB package and populate
2886 *db_seqp with the cop sequence number at the point that the DB:: code was
2887 entered. (allows debuggers to eval in the scope of the breakpoint rather
2888 than in the scope of the debugger itself).
2894 Perl_find_runcv(pTHX_ U32 *db_seqp)
2900 *db_seqp = PL_curcop->cop_seq;
2901 for (si = PL_curstackinfo; si; si = si->si_prev) {
2903 for (ix = si->si_cxix; ix >= 0; ix--) {
2904 const PERL_CONTEXT *cx = &(si->si_cxstack[ix]);
2905 if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
2906 CV * const cv = cx->blk_sub.cv;
2907 /* skip DB:: code */
2908 if (db_seqp && PL_debstash && CvSTASH(cv) == PL_debstash) {
2909 *db_seqp = cx->blk_oldcop->cop_seq;
2914 else if (CxTYPE(cx) == CXt_EVAL && !CxTRYBLOCK(cx))
2922 /* Compile a require/do, an eval '', or a /(?{...})/.
2923 * In the last case, startop is non-null, and contains the address of
2924 * a pointer that should be set to the just-compiled code.
2925 * outside is the lexically enclosing CV (if any) that invoked us.
2926 * Returns a bool indicating whether the compile was successful; if so,
2927 * PL_eval_start contains the first op of the compiled ocde; otherwise,
2928 * pushes undef (also croaks if startop != NULL).
2932 S_doeval(pTHX_ int gimme, OP** startop, CV* outside, U32 seq)
2935 OP * const saveop = PL_op;
2937 PL_in_eval = ((saveop && saveop->op_type == OP_REQUIRE)
2938 ? (EVAL_INREQUIRE | (PL_in_eval & EVAL_INEVAL))
2943 SAVESPTR(PL_compcv);
2944 PL_compcv = (CV*)newSV_type(SVt_PVCV);
2945 CvEVAL_on(PL_compcv);
2946 assert(CxTYPE(&cxstack[cxstack_ix]) == CXt_EVAL);
2947 cxstack[cxstack_ix].blk_eval.cv = PL_compcv;
2949 CvOUTSIDE_SEQ(PL_compcv) = seq;
2950 CvOUTSIDE(PL_compcv) = (CV*)SvREFCNT_inc_simple(outside);
2952 /* set up a scratch pad */
2954 CvPADLIST(PL_compcv) = pad_new(padnew_SAVE);
2955 PL_op = NULL; /* avoid PL_op and PL_curpad referring to different CVs */
2959 SAVEMORTALIZESV(PL_compcv); /* must remain until end of current statement */
2961 /* make sure we compile in the right package */
2963 if (CopSTASH_ne(PL_curcop, PL_curstash)) {
2964 SAVESPTR(PL_curstash);
2965 PL_curstash = CopSTASH(PL_curcop);
2967 /* XXX:ajgo do we really need to alloc an AV for begin/checkunit */
2968 SAVESPTR(PL_beginav);
2969 PL_beginav = newAV();
2970 SAVEFREESV(PL_beginav);
2971 SAVESPTR(PL_unitcheckav);
2972 PL_unitcheckav = newAV();
2973 SAVEFREESV(PL_unitcheckav);
2976 SAVEBOOL(PL_madskills);
2980 /* try to compile it */
2982 PL_eval_root = NULL;
2983 PL_curcop = &PL_compiling;
2984 CopARYBASE_set(PL_curcop, 0);
2985 if (saveop && (saveop->op_type != OP_REQUIRE) && (saveop->op_flags & OPf_SPECIAL))
2986 PL_in_eval |= EVAL_KEEPERR;
2988 sv_setpvn(ERRSV,"",0);
2989 if (yyparse() || PL_parser->error_count || !PL_eval_root) {
2990 SV **newsp; /* Used by POPBLOCK. */
2991 PERL_CONTEXT *cx = &cxstack[cxstack_ix];
2992 I32 optype = 0; /* Might be reset by POPEVAL. */
2997 op_free(PL_eval_root);
2998 PL_eval_root = NULL;
3000 SP = PL_stack_base + POPMARK; /* pop original mark */
3002 POPBLOCK(cx,PL_curpm);
3008 msg = SvPVx_nolen_const(ERRSV);
3009 if (optype == OP_REQUIRE) {
3010 const SV * const nsv = cx->blk_eval.old_namesv;
3011 (void)hv_store(GvHVn(PL_incgv), SvPVX_const(nsv), SvCUR(nsv),
3013 Perl_croak(aTHX_ "%sCompilation failed in require",
3014 *msg ? msg : "Unknown error\n");
3017 POPBLOCK(cx,PL_curpm);
3019 Perl_croak(aTHX_ "%sCompilation failed in regexp",
3020 (*msg ? msg : "Unknown error\n"));
3024 sv_setpvs(ERRSV, "Compilation error");
3027 PERL_UNUSED_VAR(newsp);
3028 PUSHs(&PL_sv_undef);
3032 CopLINE_set(&PL_compiling, 0);
3034 *startop = PL_eval_root;
3036 SAVEFREEOP(PL_eval_root);
3038 /* Set the context for this new optree.
3039 * If the last op is an OP_REQUIRE, force scalar context.
3040 * Otherwise, propagate the context from the eval(). */
3041 if (PL_eval_root->op_type == OP_LEAVEEVAL
3042 && cUNOPx(PL_eval_root)->op_first->op_type == OP_LINESEQ
3043 && cLISTOPx(cUNOPx(PL_eval_root)->op_first)->op_last->op_type
3045 scalar(PL_eval_root);
3046 else if ((gimme & G_WANT) == G_VOID)
3047 scalarvoid(PL_eval_root);
3048 else if ((gimme & G_WANT) == G_ARRAY)
3051 scalar(PL_eval_root);
3053 DEBUG_x(dump_eval());
3055 /* Register with debugger: */
3056 if (PERLDB_INTER && saveop && saveop->op_type == OP_REQUIRE) {
3057 CV * const cv = get_cv("DB::postponed", FALSE);
3061 XPUSHs((SV*)CopFILEGV(&PL_compiling));
3063 call_sv((SV*)cv, G_DISCARD);
3068 call_list(PL_scopestack_ix, PL_unitcheckav);
3070 /* compiled okay, so do it */
3072 CvDEPTH(PL_compcv) = 1;
3073 SP = PL_stack_base + POPMARK; /* pop original mark */
3074 PL_op = saveop; /* The caller may need it. */
3075 PL_parser->lex_state = LEX_NOTPARSING; /* $^S needs this. */
3082 S_check_type_and_open(pTHX_ const char *name)
3085 const int st_rc = PerlLIO_stat(name, &st);
3087 if (st_rc < 0 || S_ISDIR(st.st_mode) || S_ISBLK(st.st_mode)) {
3091 return PerlIO_open(name, PERL_SCRIPT_MODE);
3094 #ifndef PERL_DISABLE_PMC
3096 S_doopen_pm(pTHX_ const char *name, const STRLEN namelen)
3100 if (namelen > 3 && memEQs(name + namelen - 3, 3, ".pm")) {
3101 SV *const pmcsv = newSV(namelen + 2);
3102 char *const pmc = SvPVX(pmcsv);
3105 memcpy(pmc, name, namelen);
3107 pmc[namelen + 1] = '\0';
3109 if (PerlLIO_stat(pmc, &pmcstat) < 0) {
3110 fp = check_type_and_open(name);
3113 fp = check_type_and_open(pmc);
3115 SvREFCNT_dec(pmcsv);
3118 fp = check_type_and_open(name);
3123 # define doopen_pm(name, namelen) check_type_and_open(name)
3124 #endif /* !PERL_DISABLE_PMC */
3129 register PERL_CONTEXT *cx;
3136 int vms_unixname = 0;
3138 const char *tryname = NULL;
3140 const I32 gimme = GIMME_V;
3141 int filter_has_file = 0;
3142 PerlIO *tryrsfp = NULL;
3143 SV *filter_cache = NULL;
3144 SV *filter_state = NULL;
3145 SV *filter_sub = NULL;
3151 if ( (SvNIOKp(sv) || SvVOK(sv)) && PL_op->op_type != OP_DOFILE) {
3152 sv = new_version(sv);
3153 if (!sv_derived_from(PL_patchlevel, "version"))
3154 upg_version(PL_patchlevel, TRUE);
3155 if (cUNOP->op_first->op_type == OP_CONST && cUNOP->op_first->op_private & OPpCONST_NOVER) {
3156 if ( vcmp(sv,PL_patchlevel) <= 0 )
3157 DIE(aTHX_ "Perls since %"SVf" too modern--this is %"SVf", stopped",
3158 SVfARG(vnormal(sv)), SVfARG(vnormal(PL_patchlevel)));
3161 if ( vcmp(sv,PL_patchlevel) > 0 ) {
3164 SV * const req = SvRV(sv);
3165 SV * const pv = *hv_fetchs((HV*)req, "original", FALSE);
3167 /* get the left hand term */
3168 lav = (AV *)SvRV(*hv_fetchs((HV*)req, "version", FALSE));
3170 first = SvIV(*av_fetch(lav,0,0));
3171 if ( first > (int)PERL_REVISION /* probably 'use 6.0' */
3172 || hv_exists((HV*)req, "qv", 2 ) /* qv style */
3173 || av_len(lav) > 1 /* FP with > 3 digits */
3174 || strstr(SvPVX(pv),".0") /* FP with leading 0 */
3176 DIE(aTHX_ "Perl %"SVf" required--this is only "
3177 "%"SVf", stopped", SVfARG(vnormal(req)),
3178 SVfARG(vnormal(PL_patchlevel)));
3180 else { /* probably 'use 5.10' or 'use 5.8' */
3181 SV * hintsv = newSV(0);
3185 second = SvIV(*av_fetch(lav,1,0));
3187 second /= second >= 600 ? 100 : 10;
3188 hintsv = Perl_newSVpvf(aTHX_ "v%d.%d.%d",
3189 (int)first, (int)second,0);
3190 upg_version(hintsv, TRUE);
3192 DIE(aTHX_ "Perl %"SVf" required (did you mean %"SVf"?)"
3193 "--this is only %"SVf", stopped",
3194 SVfARG(vnormal(req)),
3195 SVfARG(vnormal(hintsv)),
3196 SVfARG(vnormal(PL_patchlevel)));
3201 /* We do this only with use, not require. */
3203 /* If we request a version >= 5.9.5, load feature.pm with the
3204 * feature bundle that corresponds to the required version. */
3205 vcmp(sv, sv_2mortal(upg_version(newSVnv(5.009005), FALSE))) >= 0) {
3206 SV *const importsv = vnormal(sv);
3207 *SvPVX_mutable(importsv) = ':';
3209 Perl_load_module(aTHX_ 0, newSVpvs("feature"), NULL, importsv, NULL);
3215 name = SvPV_const(sv, len);
3216 if (!(name && len > 0 && *name))
3217 DIE(aTHX_ "Null filename used");
3218 TAINT_PROPER("require");
3222 /* The key in the %ENV hash is in the syntax of file passed as the argument
3223 * usually this is in UNIX format, but sometimes in VMS format, which
3224 * can result in a module being pulled in more than once.
3225 * To prevent this, the key must be stored in UNIX format if the VMS
3226 * name can be translated to UNIX.
3228 if ((unixname = tounixspec(name, NULL)) != NULL) {
3229 unixlen = strlen(unixname);
3235 /* if not VMS or VMS name can not be translated to UNIX, pass it
3238 unixname = (char *) name;
3241 if (PL_op->op_type == OP_REQUIRE) {
3242 SV * const * const svp = hv_fetch(GvHVn(PL_incgv),
3243 unixname, unixlen, 0);
3245 if (*svp != &PL_sv_undef)
3248 DIE(aTHX_ "Attempt to reload %s aborted.\n"
3249 "Compilation failed in require", unixname);
3253 /* prepare to compile file */
3255 if (path_is_absolute(name)) {
3257 tryrsfp = doopen_pm(name, len);
3259 #ifdef MACOS_TRADITIONAL
3263 MacPerl_CanonDir(name, newname, 1);
3264 if (path_is_absolute(newname)) {
3266 tryrsfp = doopen_pm(newname, strlen(newname));
3271 AV * const ar = GvAVn(PL_incgv);
3277 namesv = newSV_type(SVt_PV);
3278 for (i = 0; i <= AvFILL(ar); i++) {
3279 SV * const dirsv = *av_fetch(ar, i, TRUE);
3281 if (SvTIED_mg((SV*)ar, PERL_MAGIC_tied))
3288 if (SvTYPE(SvRV(loader)) == SVt_PVAV
3289 && !sv_isobject(loader))
3291 loader = *av_fetch((AV *)SvRV(loader), 0, TRUE);
3294 Perl_sv_setpvf(aTHX_ namesv, "/loader/0x%"UVxf"/%s",
3295 PTR2UV(SvRV(dirsv)), name);
3296 tryname = SvPVX_const(namesv);
3307 if (sv_isobject(loader))
3308 count = call_method("INC", G_ARRAY);
3310 count = call_sv(loader, G_ARRAY);
3313 /* Adjust file name if the hook has set an %INC entry */
3314 svp = hv_fetch(GvHVn(PL_incgv), name, len, 0);
3316 tryname = SvPVX_const(*svp);
3325 if (SvROK(arg) && (SvTYPE(SvRV(arg)) <= SVt_PVLV)
3326 && !isGV_with_GP(SvRV(arg))) {
3327 filter_cache = SvRV(arg);
3328 SvREFCNT_inc_simple_void_NN(filter_cache);
3335 if (SvROK(arg) && SvTYPE(SvRV(arg)) == SVt_PVGV) {
3339 if (SvTYPE(arg) == SVt_PVGV) {
3340 IO * const io = GvIO((GV *)arg);
3345 tryrsfp = IoIFP(io);
3346 if (IoOFP(io) && IoOFP(io) != IoIFP(io)) {
3347 PerlIO_close(IoOFP(io));
3358 if (SvROK(arg) && SvTYPE(SvRV(arg)) == SVt_PVCV) {
3360 SvREFCNT_inc_simple_void_NN(filter_sub);
3363 filter_state = SP[i];
3364 SvREFCNT_inc_simple_void(filter_state);
3368 if (!tryrsfp && (filter_cache || filter_sub)) {
3369 tryrsfp = PerlIO_open(BIT_BUCKET,
3384 filter_has_file = 0;
3386 SvREFCNT_dec(filter_cache);
3387 filter_cache = NULL;
3390 SvREFCNT_dec(filter_state);
3391 filter_state = NULL;
3394 SvREFCNT_dec(filter_sub);
3399 if (!path_is_absolute(name)
3400 #ifdef MACOS_TRADITIONAL
3401 /* We consider paths of the form :a:b ambiguous and interpret them first
3402 as global then as local
3404 || (*name == ':' && name[1] != ':' && strchr(name+2, ':'))
3411 dir = SvPV_const(dirsv, dirlen);
3417 #ifdef MACOS_TRADITIONAL
3421 MacPerl_CanonDir(name, buf2, 1);
3422 Perl_sv_setpvf(aTHX_ namesv, "%s%s", MacPerl_CanonDir(dir, buf1, 0), buf2+(buf2[0] == ':'));
3426 if ((unixdir = tounixpath(dir, NULL)) == NULL)
3428 sv_setpv(namesv, unixdir);
3429 sv_catpv(namesv, unixname);
3431 # ifdef __SYMBIAN32__
3432 if (PL_origfilename[0] &&
3433 PL_origfilename[1] == ':' &&
3434 !(dir[0] && dir[1] == ':'))
3435 Perl_sv_setpvf(aTHX_ namesv,
3440 Perl_sv_setpvf(aTHX_ namesv,
3444 /* The equivalent of
3445 Perl_sv_setpvf(aTHX_ namesv, "%s/%s", dir, name);
3446 but without the need to parse the format string, or
3447 call strlen on either pointer, and with the correct
3448 allocation up front. */
3450 char *tmp = SvGROW(namesv, dirlen + len + 2);
3452 memcpy(tmp, dir, dirlen);
3455 /* name came from an SV, so it will have a '\0' at the
3456 end that we can copy as part of this memcpy(). */
3457 memcpy(tmp, name, len + 1);
3459 SvCUR_set(namesv, dirlen + len + 1);
3461 /* Don't even actually have to turn SvPOK_on() as we
3462 access it directly with SvPVX() below. */
3467 TAINT_PROPER("require");
3468 tryname = SvPVX_const(namesv);
3469 tryrsfp = doopen_pm(tryname, SvCUR(namesv));
3471 if (tryname[0] == '.' && tryname[1] == '/')
3475 else if (errno == EMFILE)
3476 /* no point in trying other paths if out of handles */
3483 SAVECOPFILE_FREE(&PL_compiling);
3484 CopFILE_set(&PL_compiling, tryrsfp ? tryname : name);
3485 SvREFCNT_dec(namesv);
3487 if (PL_op->op_type == OP_REQUIRE) {
3488 const char *msgstr = name;
3489 if(errno == EMFILE) {
3491 = sv_2mortal(Perl_newSVpvf(aTHX_ "%s: %s", msgstr,
3493 msgstr = SvPV_nolen_const(msg);
3495 if (namesv) { /* did we lookup @INC? */
3496 AV * const ar = GvAVn(PL_incgv);
3498 SV * const msg = sv_2mortal(Perl_newSVpvf(aTHX_
3499 "%s in @INC%s%s (@INC contains:",
3501 (instr(msgstr, ".h ")
3502 ? " (change .h to .ph maybe?)" : ""),
3503 (instr(msgstr, ".ph ")
3504 ? " (did you run h2ph?)" : "")
3507 for (i = 0; i <= AvFILL(ar); i++) {
3508 sv_catpvs(msg, " ");
3509 sv_catsv(msg, *av_fetch(ar, i, TRUE));
3511 sv_catpvs(msg, ")");
3512 msgstr = SvPV_nolen_const(msg);
3515 DIE(aTHX_ "Can't locate %s", msgstr);
3521 SETERRNO(0, SS_NORMAL);
3523 /* Assume success here to prevent recursive requirement. */
3524 /* name is never assigned to again, so len is still strlen(name) */
3525 /* Check whether a hook in @INC has already filled %INC */
3527 (void)hv_store(GvHVn(PL_incgv),
3528 unixname, unixlen, newSVpv(CopFILE(&PL_compiling),0),0);
3530 SV** const svp = hv_fetch(GvHVn(PL_incgv), unixname, unixlen, 0);
3532 (void)hv_store(GvHVn(PL_incgv),
3533 unixname, unixlen, SvREFCNT_inc_simple(hook_sv), 0 );
3538 lex_start(NULL, tryrsfp, TRUE);
3542 SAVECOMPILEWARNINGS();
3543 if (PL_dowarn & G_WARN_ALL_ON)
3544 PL_compiling.cop_warnings = pWARN_ALL ;
3545 else if (PL_dowarn & G_WARN_ALL_OFF)
3546 PL_compiling.cop_warnings = pWARN_NONE ;
3548 PL_compiling.cop_warnings = pWARN_STD ;
3550 if (filter_sub || filter_cache) {
3551 SV * const datasv = filter_add(S_run_user_filter, NULL);
3552 IoLINES(datasv) = filter_has_file;
3553 IoTOP_GV(datasv) = (GV *)filter_state;
3554 IoBOTTOM_GV(datasv) = (GV *)filter_sub;
3555 IoFMT_GV(datasv) = (GV *)filter_cache;
3558 /* switch to eval mode */
3559 PUSHBLOCK(cx, CXt_EVAL, SP);
3560 PUSHEVAL(cx, name, NULL);
3561 cx->blk_eval.retop = PL_op->op_next;
3563 SAVECOPLINE(&PL_compiling);
3564 CopLINE_set(&PL_compiling, 0);
3568 /* Store and reset encoding. */
3569 encoding = PL_encoding;
3572 if (doeval(gimme, NULL, NULL, PL_curcop->cop_seq))
3573 op = DOCATCH(PL_eval_start);
3575 op = PL_op->op_next;
3577 /* Restore encoding. */
3578 PL_encoding = encoding;
3586 register PERL_CONTEXT *cx;
3588 const I32 gimme = GIMME_V;
3589 const I32 was = PL_sub_generation;
3590 char tbuf[TYPE_DIGITS(long) + 12];
3591 char *tmpbuf = tbuf;
3597 HV *saved_hh = NULL;
3598 const char * const fakestr = "_<(eval )";
3599 const int fakelen = 9 + 1;
3601 if (PL_op->op_private & OPpEVAL_HAS_HH) {
3602 saved_hh = (HV*) SvREFCNT_inc(POPs);
3606 TAINT_IF(SvTAINTED(sv));
3607 TAINT_PROPER("eval");
3610 lex_start(sv, NULL, FALSE);
3613 /* switch to eval mode */
3615 if (PERLDB_NAMEEVAL && CopLINE(PL_curcop)) {
3616 SV * const temp_sv = sv_newmortal();
3617 Perl_sv_setpvf(aTHX_ temp_sv, "_<(eval %lu)[%s:%"IVdf"]",
3618 (unsigned long)++PL_evalseq,
3619 CopFILE(PL_curcop), (IV)CopLINE(PL_curcop));
3620 tmpbuf = SvPVX(temp_sv);
3621 len = SvCUR(temp_sv);
3624 len = my_snprintf(tmpbuf, sizeof(tbuf), "_<(eval %lu)", (unsigned long)++PL_evalseq);
3625 SAVECOPFILE_FREE(&PL_compiling);
3626 CopFILE_set(&PL_compiling, tmpbuf+2);
3627 SAVECOPLINE(&PL_compiling);
3628 CopLINE_set(&PL_compiling, 1);
3629 /* XXX For C<eval "...">s within BEGIN {} blocks, this ends up
3630 deleting the eval's FILEGV from the stash before gv_check() runs
3631 (i.e. before run-time proper). To work around the coredump that
3632 ensues, we always turn GvMULTI_on for any globals that were
3633 introduced within evals. See force_ident(). GSAR 96-10-12 */
3634 safestr = savepvn(tmpbuf, len);
3635 SAVEDELETE(PL_defstash, safestr, len);
3637 PL_hints = PL_op->op_targ;
3639 GvHV(PL_hintgv) = saved_hh;
3640 SAVECOMPILEWARNINGS();
3641 PL_compiling.cop_warnings = DUP_WARNINGS(PL_curcop->cop_warnings);
3642 if (PL_compiling.cop_hints_hash) {
3643 Perl_refcounted_he_free(aTHX_ PL_compiling.cop_hints_hash);
3645 PL_compiling.cop_hints_hash = PL_curcop->cop_hints_hash;
3646 if (PL_compiling.cop_hints_hash) {
3648 PL_compiling.cop_hints_hash->refcounted_he_refcnt++;
3649 HINTS_REFCNT_UNLOCK;
3651 /* special case: an eval '' executed within the DB package gets lexically
3652 * placed in the first non-DB CV rather than the current CV - this
3653 * allows the debugger to execute code, find lexicals etc, in the
3654 * scope of the code being debugged. Passing &seq gets find_runcv
3655 * to do the dirty work for us */
3656 runcv = find_runcv(&seq);
3658 PUSHBLOCK(cx, (CXt_EVAL|CXp_REAL), SP);
3659 PUSHEVAL(cx, 0, NULL);
3660 cx->blk_eval.retop = PL_op->op_next;
3662 /* prepare to compile string */
3664 if (PERLDB_LINE && PL_curstash != PL_debstash)
3665 save_lines(CopFILEAV(&PL_compiling), PL_parser->linestr);
3667 ok = doeval(gimme, NULL, runcv, seq);
3668 if (PERLDB_INTER && was != (I32)PL_sub_generation /* Some subs defined here. */
3670 /* Copy in anything fake and short. */
3671 my_strlcpy(safestr, fakestr, fakelen);
3673 return ok ? DOCATCH(PL_eval_start) : PL_op->op_next;
3683 register PERL_CONTEXT *cx;
3685 const U8 save_flags = PL_op -> op_flags;
3690 retop = cx->blk_eval.retop;
3693 if (gimme == G_VOID)
3695 else if (gimme == G_SCALAR) {
3698 if (SvFLAGS(TOPs) & SVs_TEMP)
3701 *MARK = sv_mortalcopy(TOPs);
3705 *MARK = &PL_sv_undef;
3710 /* in case LEAVE wipes old return values */
3711 for (mark = newsp + 1; mark <= SP; mark++) {
3712 if (!(SvFLAGS(*mark) & SVs_TEMP)) {
3713 *mark = sv_mortalcopy(*mark);
3714 TAINT_NOT; /* Each item is independent */
3718 PL_curpm = newpm; /* Don't pop $1 et al till now */
3721 assert(CvDEPTH(PL_compcv) == 1);
3723 CvDEPTH(PL_compcv) = 0;
3726 if (optype == OP_REQUIRE &&
3727 !(gimme == G_SCALAR ? SvTRUE(*SP) : SP > newsp))
3729 /* Unassume the success we assumed earlier. */
3730 SV * const nsv = cx->blk_eval.old_namesv;
3731 (void)hv_delete(GvHVn(PL_incgv), SvPVX_const(nsv), SvCUR(nsv), G_DISCARD);
3732 retop = Perl_die(aTHX_ "%"SVf" did not return a true value", SVfARG(nsv));
3733 /* die_where() did LEAVE, or we won't be here */
3737 if (!(save_flags & OPf_SPECIAL))
3738 sv_setpvn(ERRSV,"",0);
3744 /* Common code for Perl_call_sv and Perl_fold_constants, put here to keep it
3745 close to the related Perl_create_eval_scope. */
3747 Perl_delete_eval_scope(pTHX)
3752 register PERL_CONTEXT *cx;
3759 PERL_UNUSED_VAR(newsp);
3760 PERL_UNUSED_VAR(gimme);
3761 PERL_UNUSED_VAR(optype);
3764 /* Common-ish code salvaged from Perl_call_sv and pp_entertry, because it was
3765 also needed by Perl_fold_constants. */
3767 Perl_create_eval_scope(pTHX_ U32 flags)
3770 const I32 gimme = GIMME_V;
3775 PUSHBLOCK(cx, (CXt_EVAL|CXp_TRYBLOCK), PL_stack_sp);
3778 PL_in_eval = EVAL_INEVAL;
3779 if (flags & G_KEEPERR)
3780 PL_in_eval |= EVAL_KEEPERR;
3782 sv_setpvn(ERRSV,"",0);
3783 if (flags & G_FAKINGEVAL) {
3784 PL_eval_root = PL_op; /* Only needed so that goto works right. */
3792 PERL_CONTEXT * const cx = create_eval_scope(0);
3793 cx->blk_eval.retop = cLOGOP->op_other->op_next;
3794 return DOCATCH(PL_op->op_next);
3803 register PERL_CONTEXT *cx;
3808 PERL_UNUSED_VAR(optype);
3811 if (gimme == G_VOID)
3813 else if (gimme == G_SCALAR) {
3817 if (SvFLAGS(TOPs) & (SVs_PADTMP|SVs_TEMP))
3820 *MARK = sv_mortalcopy(TOPs);
3824 *MARK = &PL_sv_undef;
3829 /* in case LEAVE wipes old return values */
3831 for (mark = newsp + 1; mark <= SP; mark++) {
3832 if (!(SvFLAGS(*mark) & (SVs_PADTMP|SVs_TEMP))) {
3833 *mark = sv_mortalcopy(*mark);
3834 TAINT_NOT; /* Each item is independent */
3838 PL_curpm = newpm; /* Don't pop $1 et al till now */
3841 sv_setpvn(ERRSV,"",0);
3848 register PERL_CONTEXT *cx;
3849 const I32 gimme = GIMME_V;
3854 if (PL_op->op_targ == 0) {
3855 SV ** const defsv_p = &GvSV(PL_defgv);
3856 *defsv_p = newSVsv(POPs);
3857 SAVECLEARSV(*defsv_p);
3860 sv_setsv(PAD_SV(PL_op->op_targ), POPs);
3862 PUSHBLOCK(cx, CXt_GIVEN, SP);
3871 register PERL_CONTEXT *cx;
3875 PERL_UNUSED_CONTEXT;
3878 assert(CxTYPE(cx) == CXt_GIVEN);
3883 PL_curpm = newpm; /* pop $1 et al */
3890 /* Helper routines used by pp_smartmatch */
3892 S_make_matcher(pTHX_ REGEXP *re)
3895 PMOP *matcher = (PMOP *) newPMOP(OP_MATCH, OPf_WANT_SCALAR | OPf_STACKED);
3896 PM_SETRE(matcher, ReREFCNT_inc(re));
3898 SAVEFREEOP((OP *) matcher);
3905 S_matcher_matches_sv(pTHX_ PMOP *matcher, SV *sv)
3910 PL_op = (OP *) matcher;
3915 return (SvTRUEx(POPs));
3919 S_destroy_matcher(pTHX_ PMOP *matcher)
3922 PERL_UNUSED_ARG(matcher);
3927 /* Do a smart match */
3930 return do_smartmatch(NULL, NULL);
3933 /* This version of do_smartmatch() implements the
3934 * table of smart matches that is found in perlsyn.
3937 S_do_smartmatch(pTHX_ HV *seen_this, HV *seen_other)
3942 SV *e = TOPs; /* e is for 'expression' */
3943 SV *d = TOPm1s; /* d is for 'default', as in PL_defgv */
3944 SV *This, *Other; /* 'This' (and Other to match) to play with C++ */
3945 REGEXP *this_regex, *other_regex;
3947 # define NOT_EMPTY_PROTO(cv) (!SvPOK(cv) || SvCUR(cv) == 0)
3949 # define SM_REF(type) ( \
3950 (SvROK(d) && (SvTYPE(This = SvRV(d)) == SVt_##type) && (Other = e)) \
3951 || (SvROK(e) && (SvTYPE(This = SvRV(e)) == SVt_##type) && (Other = d)))
3953 # define SM_CV_NEP /* Find a code ref without an empty prototype */ \
3954 ((SvROK(d) && (SvTYPE(This = SvRV(d)) == SVt_PVCV) \
3955 && NOT_EMPTY_PROTO(This) && (Other = e)) \
3956 || (SvROK(e) && (SvTYPE(This = SvRV(e)) == SVt_PVCV) \
3957 && NOT_EMPTY_PROTO(This) && (Other = d)))
3959 # define SM_REGEX ( \
3960 (SvROK(d) && (SvTYPE(This = SvRV(d)) == SVt_REGEXP) \
3961 && (this_regex = (REGEXP*) This) \
3964 (SvROK(e) && (SvTYPE(This = SvRV(e)) == SVt_REGEXP) \
3965 && (this_regex = (REGEXP*) This) \
3969 # define SM_OTHER_REF(type) \
3970 (SvROK(Other) && SvTYPE(SvRV(Other)) == SVt_##type)
3972 # define SM_OTHER_REGEX (SvROK(Other) \
3973 && (SvTYPE(SvRV(Other)) == SVt_REGEXP) \
3974 && (other_regex = (REGEXP*) SvRV(Other)))
3977 # define SM_SEEN_THIS(sv) hv_exists_ent(seen_this, \
3978 sv_2mortal(newSViv(PTR2IV(sv))), 0)
3980 # define SM_SEEN_OTHER(sv) hv_exists_ent(seen_other, \
3981 sv_2mortal(newSViv(PTR2IV(sv))), 0)
3983 tryAMAGICbinSET(smart, 0);
3985 SP -= 2; /* Pop the values */
3987 /* Take care only to invoke mg_get() once for each argument.
3988 * Currently we do this by copying the SV if it's magical. */
3991 d = sv_mortalcopy(d);
3998 e = sv_mortalcopy(e);
4003 if ( SM_OTHER_REF(PVCV) && NOT_EMPTY_PROTO(SvRV(Other)) )
4005 if (This == SvRV(Other))
4016 c = call_sv(This, G_SCALAR);
4020 else if (SvTEMP(TOPs))
4021 SvREFCNT_inc_void(TOPs);
4026 else if (SM_REF(PVHV)) {
4027 if (SM_OTHER_REF(PVHV)) {
4028 /* Check that the key-sets are identical */
4030 HV *other_hv = (HV *) SvRV(Other);
4032 bool other_tied = FALSE;
4033 U32 this_key_count = 0,
4034 other_key_count = 0;
4036 /* Tied hashes don't know how many keys they have. */
4037 if (SvTIED_mg(This, PERL_MAGIC_tied)) {
4040 else if (SvTIED_mg((SV *) other_hv, PERL_MAGIC_tied)) {
4041 HV * const temp = other_hv;
4042 other_hv = (HV *) This;
4046 if (SvTIED_mg((SV *) other_hv, PERL_MAGIC_tied))
4049 if (!tied && HvUSEDKEYS((HV *) This) != HvUSEDKEYS(other_hv))
4052 /* The hashes have the same number of keys, so it suffices
4053 to check that one is a subset of the other. */
4054 (void) hv_iterinit((HV *) This);
4055 while ( (he = hv_iternext((HV *) This)) ) {
4057 char * const key = hv_iterkey(he, &key_len);
4061 if(!hv_exists(other_hv, key, key_len)) {
4062 (void) hv_iterinit((HV *) This); /* reset iterator */
4068 (void) hv_iterinit(other_hv);
4069 while ( hv_iternext(other_hv) )
4073 other_key_count = HvUSEDKEYS(other_hv);
4075 if (this_key_count != other_key_count)
4080 else if (SM_OTHER_REF(PVAV)) {
4081 AV * const other_av = (AV *) SvRV(Other);
4082 const I32 other_len = av_len(other_av) + 1;
4085 for (i = 0; i < other_len; ++i) {
4086 SV ** const svp = av_fetch(other_av, i, FALSE);
4090 if (svp) { /* ??? When can this not happen? */
4091 key = SvPV(*svp, key_len);
4092 if (hv_exists((HV *) This, key, key_len))
4098 else if (SM_OTHER_REGEX) {
4099 PMOP * const matcher = make_matcher(other_regex);
4102 (void) hv_iterinit((HV *) This);
4103 while ( (he = hv_iternext((HV *) This)) ) {
4104 if (matcher_matches_sv(matcher, hv_iterkeysv(he))) {
4105 (void) hv_iterinit((HV *) This);
4106 destroy_matcher(matcher);
4110 destroy_matcher(matcher);
4114 if (hv_exists_ent((HV *) This, Other, 0))
4120 else if (SM_REF(PVAV)) {
4121 if (SM_OTHER_REF(PVAV)) {
4122 AV *other_av = (AV *) SvRV(Other);
4123 if (av_len((AV *) This) != av_len(other_av))
4127 const I32 other_len = av_len(other_av);
4129 if (NULL == seen_this) {
4130 seen_this = newHV();
4131 (void) sv_2mortal((SV *) seen_this);
4133 if (NULL == seen_other) {
4134 seen_this = newHV();
4135 (void) sv_2mortal((SV *) seen_other);
4137 for(i = 0; i <= other_len; ++i) {
4138 SV * const * const this_elem = av_fetch((AV *)This, i, FALSE);
4139 SV * const * const other_elem = av_fetch(other_av, i, FALSE);
4141 if (!this_elem || !other_elem) {
4142 if (this_elem || other_elem)
4145 else if (SM_SEEN_THIS(*this_elem)
4146 || SM_SEEN_OTHER(*other_elem))
4148 if (*this_elem != *other_elem)
4152 (void)hv_store_ent(seen_this,
4153 sv_2mortal(newSViv(PTR2IV(*this_elem))),
4155 (void)hv_store_ent(seen_other,
4156 sv_2mortal(newSViv(PTR2IV(*other_elem))),
4162 (void) do_smartmatch(seen_this, seen_other);
4172 else if (SM_OTHER_REGEX) {
4173 PMOP * const matcher = make_matcher(other_regex);
4174 const I32 this_len = av_len((AV *) This);
4177 for(i = 0; i <= this_len; ++i) {
4178 SV * const * const svp = av_fetch((AV *)This, i, FALSE);
4179 if (svp && matcher_matches_sv(matcher, *svp)) {
4180 destroy_matcher(matcher);
4184 destroy_matcher(matcher);
4187 else if (SvIOK(Other) || SvNOK(Other)) {
4190 for(i = 0; i <= AvFILL((AV *) This); ++i) {
4191 SV * const * const svp = av_fetch((AV *)This, i, FALSE);
4198 if (CopHINTS_get(PL_curcop) & HINT_INTEGER)
4208 else if (SvPOK(Other)) {
4209 const I32 this_len = av_len((AV *) This);
4212 for(i = 0; i <= this_len; ++i) {
4213 SV * const * const svp = av_fetch((AV *)This, i, FALSE);
4228 else if (!SvOK(d) || !SvOK(e)) {
4229 if (!SvOK(d) && !SvOK(e))
4234 else if (SM_REGEX) {
4235 PMOP * const matcher = make_matcher(this_regex);
4238 PUSHs(matcher_matches_sv(matcher, Other)
4241 destroy_matcher(matcher);
4244 else if (SM_REF(PVCV)) {
4246 /* This must be a null-prototyped sub, because we
4247 already checked for the other kind. */
4253 c = call_sv(This, G_SCALAR);
4256 PUSHs(&PL_sv_undef);
4257 else if (SvTEMP(TOPs))
4258 SvREFCNT_inc_void(TOPs);
4260 if (SM_OTHER_REF(PVCV)) {
4261 /* This one has to be null-proto'd too.
4262 Call both of 'em, and compare the results */
4264 c = call_sv(SvRV(Other), G_SCALAR);
4267 PUSHs(&PL_sv_undef);
4268 else if (SvTEMP(TOPs))
4269 SvREFCNT_inc_void(TOPs);
4280 else if ( ((SvIOK(d) || SvNOK(d)) && (This = d) && (Other = e))
4281 || ((SvIOK(e) || SvNOK(e)) && (This = e) && (Other = d)) )
4283 if (SvPOK(Other) && !looks_like_number(Other)) {
4284 /* String comparison */
4289 /* Otherwise, numeric comparison */
4292 if (CopHINTS_get(PL_curcop) & HINT_INTEGER)
4303 /* As a last resort, use string comparison */
4312 register PERL_CONTEXT *cx;
4313 const I32 gimme = GIMME_V;
4315 /* This is essentially an optimization: if the match
4316 fails, we don't want to push a context and then
4317 pop it again right away, so we skip straight
4318 to the op that follows the leavewhen.
4320 if ((0 == (PL_op->op_flags & OPf_SPECIAL)) && !SvTRUEx(POPs))
4321 return cLOGOP->op_other->op_next;
4326 PUSHBLOCK(cx, CXt_WHEN, SP);
4335 register PERL_CONTEXT *cx;
4341 assert(CxTYPE(cx) == CXt_WHEN);
4346 PL_curpm = newpm; /* pop $1 et al */
4356 register PERL_CONTEXT *cx;
4359 cxix = dopoptowhen(cxstack_ix);
4361 DIE(aTHX_ "Can't \"continue\" outside a when block");
4362 if (cxix < cxstack_ix)
4365 /* clear off anything above the scope we're re-entering */
4366 inner = PL_scopestack_ix;
4368 if (PL_scopestack_ix < inner)
4369 leave_scope(PL_scopestack[PL_scopestack_ix]);
4370 PL_curcop = cx->blk_oldcop;
4371 return cx->blk_givwhen.leave_op;
4378 register PERL_CONTEXT *cx;
4381 cxix = dopoptogiven(cxstack_ix);
4383 if (PL_op->op_flags & OPf_SPECIAL)
4384 DIE(aTHX_ "Can't use when() outside a topicalizer");
4386 DIE(aTHX_ "Can't \"break\" outside a given block");
4388 if (CxFOREACH(&cxstack[cxix]) && (0 == (PL_op->op_flags & OPf_SPECIAL)))
4389 DIE(aTHX_ "Can't \"break\" in a loop topicalizer");
4391 if (cxix < cxstack_ix)
4394 /* clear off anything above the scope we're re-entering */
4395 inner = PL_scopestack_ix;
4397 if (PL_scopestack_ix < inner)
4398 leave_scope(PL_scopestack[PL_scopestack_ix]);
4399 PL_curcop = cx->blk_oldcop;
4402 return CX_LOOP_NEXTOP_GET(cx);
4404 return cx->blk_givwhen.leave_op;
4408 S_doparseform(pTHX_ SV *sv)
4411 register char *s = SvPV_force(sv, len);
4412 register char * const send = s + len;
4413 register char *base = NULL;
4414 register I32 skipspaces = 0;
4415 bool noblank = FALSE;
4416 bool repeat = FALSE;
4417 bool postspace = FALSE;
4423 bool unchopnum = FALSE;
4424 int maxops = 12; /* FF_LINEMARK + FF_END + 10 (\0 without preceding \n) */
4427 Perl_croak(aTHX_ "Null picture in formline");
4429 /* estimate the buffer size needed */
4430 for (base = s; s <= send; s++) {
4431 if (*s == '\n' || *s == '@' || *s == '^')
4437 Newx(fops, maxops, U32);
4442 *fpc++ = FF_LINEMARK;
4443 noblank = repeat = FALSE;
4461 case ' ': case '\t':
4468 } /* else FALL THROUGH */
4476 *fpc++ = FF_LITERAL;
4484 *fpc++ = (U16)skipspaces;
4488 *fpc++ = FF_NEWLINE;
4492 arg = fpc - linepc + 1;
4499 *fpc++ = FF_LINEMARK;
4500 noblank = repeat = FALSE;
4509 ischop = s[-1] == '^';
4515 arg = (s - base) - 1;
4517 *fpc++ = FF_LITERAL;
4525 *fpc++ = 2; /* skip the @* or ^* */
4527 *fpc++ = FF_LINESNGL;
4530 *fpc++ = FF_LINEGLOB;
4532 else if (*s == '#' || (*s == '.' && s[1] == '#')) {
4533 arg = ischop ? 512 : 0;
4538 const char * const f = ++s;
4541 arg |= 256 + (s - f);
4543 *fpc++ = s - base; /* fieldsize for FETCH */
4544 *fpc++ = FF_DECIMAL;
4546 unchopnum |= ! ischop;
4548 else if (*s == '0' && s[1] == '#') { /* Zero padded decimals */
4549 arg = ischop ? 512 : 0;
4551 s++; /* skip the '0' first */
4555 const char * const f = ++s;
4558 arg |= 256 + (s - f);
4560 *fpc++ = s - base; /* fieldsize for FETCH */
4561 *fpc++ = FF_0DECIMAL;
4563 unchopnum |= ! ischop;
4567 bool ismore = FALSE;
4570 while (*++s == '>') ;
4571 prespace = FF_SPACE;
4573 else if (*s == '|') {
4574 while (*++s == '|') ;
4575 prespace = FF_HALFSPACE;
4580 while (*++s == '<') ;
4583 if (*s == '.' && s[1] == '.' && s[2] == '.') {
4587 *fpc++ = s - base; /* fieldsize for FETCH */
4589 *fpc++ = ischop ? FF_CHECKCHOP : FF_CHECKNL;
4592 *fpc++ = (U16)prespace;
4606 assert (fpc <= fops + maxops); /* ensure our buffer estimate was valid */
4608 { /* need to jump to the next word */
4610 z = WORD_ALIGN - SvCUR(sv) % WORD_ALIGN;
4611 SvGROW(sv, SvCUR(sv) + z + arg * sizeof(U32) + 4);
4612 s = SvPVX(sv) + SvCUR(sv) + z;
4614 Copy(fops, s, arg, U32);
4616 sv_magic(sv, NULL, PERL_MAGIC_fm, NULL, 0);
4619 if (unchopnum && repeat)
4620 DIE(aTHX_ "Repeated format line will never terminate (~~ and @#)");
4626 S_num_overflow(NV value, I32 fldsize, I32 frcsize)
4628 /* Can value be printed in fldsize chars, using %*.*f ? */
4632 int intsize = fldsize - (value < 0 ? 1 : 0);
4639 while (intsize--) pwr *= 10.0;
4640 while (frcsize--) eps /= 10.0;
4643 if (value + eps >= pwr)
4646 if (value - eps <= -pwr)
4653 S_run_user_filter(pTHX_ int idx, SV *buf_sv, int maxlen)
4656 SV * const datasv = FILTER_DATA(idx);
4657 const int filter_has_file = IoLINES(datasv);
4658 SV * const filter_state = (SV *)IoTOP_GV(datasv);
4659 SV * const filter_sub = (SV *)IoBOTTOM_GV(datasv);
4663 const char *got_p = NULL;
4664 const char *prune_from = NULL;
4665 bool read_from_cache = FALSE;
4668 assert(maxlen >= 0);
4671 /* I was having segfault trouble under Linux 2.2.5 after a
4672 parse error occured. (Had to hack around it with a test
4673 for PL_parser->error_count == 0.) Solaris doesn't segfault --
4674 not sure where the trouble is yet. XXX */
4676 if (IoFMT_GV(datasv)) {
4677 SV *const cache = (SV *)IoFMT_GV(datasv);
4680 const char *cache_p = SvPV(cache, cache_len);
4684 /* Running in block mode and we have some cached data already.
4686 if (cache_len >= umaxlen) {
4687 /* In fact, so much data we don't even need to call
4692 const char *const first_nl =
4693 (const char *)memchr(cache_p, '\n', cache_len);
4695 take = first_nl + 1 - cache_p;
4699 sv_catpvn(buf_sv, cache_p, take);
4700 sv_chop(cache, cache_p + take);
4701 /* Definately not EOF */
4705 sv_catsv(buf_sv, cache);
4707 umaxlen -= cache_len;
4710 read_from_cache = TRUE;
4714 /* Filter API says that the filter appends to the contents of the buffer.
4715 Usually the buffer is "", so the details don't matter. But if it's not,
4716 then clearly what it contains is already filtered by this filter, so we
4717 don't want to pass it in a second time.
4718 I'm going to use a mortal in case the upstream filter croaks. */
4719 upstream = ((SvOK(buf_sv) && sv_len(buf_sv)) || SvGMAGICAL(buf_sv))
4720 ? sv_newmortal() : buf_sv;
4721 SvUPGRADE(upstream, SVt_PV);
4723 if (filter_has_file) {
4724 status = FILTER_READ(idx+1, upstream, 0);
4727 if (filter_sub && status >= 0) {
4740 PUSHs(filter_state);
4743 count = call_sv(filter_sub, G_SCALAR);
4758 if(SvOK(upstream)) {
4759 got_p = SvPV(upstream, got_len);
4761 if (got_len > umaxlen) {
4762 prune_from = got_p + umaxlen;
4765 const char *const first_nl =
4766 (const char *)memchr(got_p, '\n', got_len);
4767 if (first_nl && first_nl + 1 < got_p + got_len) {
4768 /* There's a second line here... */
4769 prune_from = first_nl + 1;
4774 /* Oh. Too long. Stuff some in our cache. */
4775 STRLEN cached_len = got_p + got_len - prune_from;
4776 SV *cache = (SV *)IoFMT_GV(datasv);
4779 IoFMT_GV(datasv) = (GV*) (cache = newSV(got_len - umaxlen));
4780 } else if (SvOK(cache)) {
4781 /* Cache should be empty. */
4782 assert(!SvCUR(cache));
4785 sv_setpvn(cache, prune_from, cached_len);
4786 /* If you ask for block mode, you may well split UTF-8 characters.
4787 "If it breaks, you get to keep both parts"
4788 (Your code is broken if you don't put them back together again
4789 before something notices.) */
4790 if (SvUTF8(upstream)) {
4793 SvCUR_set(upstream, got_len - cached_len);
4794 /* Can't yet be EOF */
4799 /* If they are at EOF but buf_sv has something in it, then they may never
4800 have touched the SV upstream, so it may be undefined. If we naively
4801 concatenate it then we get a warning about use of uninitialised value.
4803 if (upstream != buf_sv && (SvOK(upstream) || SvGMAGICAL(upstream))) {
4804 sv_catsv(buf_sv, upstream);
4808 IoLINES(datasv) = 0;
4809 SvREFCNT_dec(IoFMT_GV(datasv));
4811 SvREFCNT_dec(filter_state);
4812 IoTOP_GV(datasv) = NULL;
4815 SvREFCNT_dec(filter_sub);
4816 IoBOTTOM_GV(datasv) = NULL;
4818 filter_del(S_run_user_filter);
4820 if (status == 0 && read_from_cache) {
4821 /* If we read some data from the cache (and by getting here it implies
4822 that we emptied the cache) then we aren't yet at EOF, and mustn't
4823 report that to our caller. */
4829 /* perhaps someone can come up with a better name for
4830 this? it is not really "absolute", per se ... */
4832 S_path_is_absolute(const char *name)
4834 if (PERL_FILE_IS_ABSOLUTE(name)
4835 #ifdef MACOS_TRADITIONAL
4838 || (*name == '.' && (name[1] == '/' ||
4839 (name[1] == '.' && name[2] == '/')))
4851 * c-indentation-style: bsd
4853 * indent-tabs-mode: t
4856 * ex: set ts=8 sts=4 sw=4 noet: