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_STACK:
1261 case CXt_LOOP_PLAIN:
1262 if ( !CxLABEL(cx) || strNE(label, CxLABEL(cx)) ) {
1263 DEBUG_l(Perl_deb(aTHX_ "(Skipping label #%ld %s)\n",
1264 (long)i, CxLABEL(cx)));
1267 DEBUG_l( Perl_deb(aTHX_ "(Found label #%ld %s)\n", (long)i, label));
1277 Perl_dowantarray(pTHX)
1280 const I32 gimme = block_gimme();
1281 return (gimme == G_VOID) ? G_SCALAR : gimme;
1285 Perl_block_gimme(pTHX)
1288 const I32 cxix = dopoptosub(cxstack_ix);
1292 switch (cxstack[cxix].blk_gimme) {
1300 Perl_croak(aTHX_ "panic: bad gimme: %d\n", cxstack[cxix].blk_gimme);
1307 Perl_is_lvalue_sub(pTHX)
1310 const I32 cxix = dopoptosub(cxstack_ix);
1311 assert(cxix >= 0); /* We should only be called from inside subs */
1313 if (CxLVAL(cxstack + cxix) && CvLVALUE(cxstack[cxix].blk_sub.cv))
1314 return CxLVAL(cxstack + cxix);
1320 S_dopoptosub_at(pTHX_ const PERL_CONTEXT *cxstk, I32 startingblock)
1324 for (i = startingblock; i >= 0; i--) {
1325 register const PERL_CONTEXT * const cx = &cxstk[i];
1326 switch (CxTYPE(cx)) {
1332 DEBUG_l( Perl_deb(aTHX_ "(Found sub #%ld)\n", (long)i));
1340 S_dopoptoeval(pTHX_ I32 startingblock)
1344 for (i = startingblock; i >= 0; i--) {
1345 register const PERL_CONTEXT *cx = &cxstack[i];
1346 switch (CxTYPE(cx)) {
1350 DEBUG_l( Perl_deb(aTHX_ "(Found eval #%ld)\n", (long)i));
1358 S_dopoptoloop(pTHX_ I32 startingblock)
1362 for (i = startingblock; i >= 0; i--) {
1363 register const PERL_CONTEXT * const cx = &cxstack[i];
1364 switch (CxTYPE(cx)) {
1370 if (ckWARN(WARN_EXITING))
1371 Perl_warner(aTHX_ packWARN(WARN_EXITING), "Exiting %s via %s",
1372 context_name[CxTYPE(cx)], OP_NAME(PL_op));
1373 if ((CxTYPE(cx)) == CXt_NULL)
1376 case CXt_LOOP_STACK:
1378 case CXt_LOOP_PLAIN:
1379 DEBUG_l( Perl_deb(aTHX_ "(Found loop #%ld)\n", (long)i));
1387 S_dopoptogiven(pTHX_ I32 startingblock)
1391 for (i = startingblock; i >= 0; i--) {
1392 register const PERL_CONTEXT *cx = &cxstack[i];
1393 switch (CxTYPE(cx)) {
1397 DEBUG_l( Perl_deb(aTHX_ "(Found given #%ld)\n", (long)i));
1399 case CXt_LOOP_PLAIN:
1400 assert(!CxFOREACHDEF(cx));
1402 case CXt_LOOP_STACK:
1404 if (CxFOREACHDEF(cx)) {
1405 DEBUG_l( Perl_deb(aTHX_ "(Found foreach #%ld)\n", (long)i));
1414 S_dopoptowhen(pTHX_ I32 startingblock)
1418 for (i = startingblock; i >= 0; i--) {
1419 register const PERL_CONTEXT *cx = &cxstack[i];
1420 switch (CxTYPE(cx)) {
1424 DEBUG_l( Perl_deb(aTHX_ "(Found when #%ld)\n", (long)i));
1432 Perl_dounwind(pTHX_ I32 cxix)
1437 while (cxstack_ix > cxix) {
1439 register PERL_CONTEXT *cx = &cxstack[cxstack_ix];
1440 DEBUG_l(PerlIO_printf(Perl_debug_log, "Unwinding block %ld, type %s\n",
1441 (long) cxstack_ix, PL_block_type[CxTYPE(cx)]));
1442 /* Note: we don't need to restore the base context info till the end. */
1443 switch (CxTYPE(cx)) {
1446 continue; /* not break */
1454 case CXt_LOOP_STACK:
1456 case CXt_LOOP_PLAIN:
1467 PERL_UNUSED_VAR(optype);
1471 Perl_qerror(pTHX_ SV *err)
1475 sv_catsv(ERRSV, err);
1477 sv_catsv(PL_errors, err);
1479 Perl_warn(aTHX_ "%"SVf, SVfARG(err));
1481 ++PL_parser->error_count;
1485 Perl_die_where(pTHX_ const char *message, STRLEN msglen)
1494 if (PL_in_eval & EVAL_KEEPERR) {
1495 static const char prefix[] = "\t(in cleanup) ";
1496 SV * const err = ERRSV;
1497 const char *e = NULL;
1499 sv_setpvn(err,"",0);
1500 else if (SvCUR(err) >= sizeof(prefix)+msglen-1) {
1502 e = SvPV_const(err, len);
1504 if (*e != *message || strNE(e,message))
1508 SvGROW(err, SvCUR(err)+sizeof(prefix)+msglen);
1509 sv_catpvn(err, prefix, sizeof(prefix)-1);
1510 sv_catpvn(err, message, msglen);
1511 if (ckWARN(WARN_MISC)) {
1512 const STRLEN start = SvCUR(err)-msglen-sizeof(prefix)+1;
1513 Perl_warner(aTHX_ packWARN(WARN_MISC), SvPVX_const(err)+start);
1518 sv_setpvn(ERRSV, message, msglen);
1522 while ((cxix = dopoptoeval(cxstack_ix)) < 0
1523 && PL_curstackinfo->si_prev)
1531 register PERL_CONTEXT *cx;
1534 if (cxix < cxstack_ix)
1537 POPBLOCK(cx,PL_curpm);
1538 if (CxTYPE(cx) != CXt_EVAL) {
1540 message = SvPVx_const(ERRSV, msglen);
1541 PerlIO_write(Perl_error_log, (const char *)"panic: die ", 11);
1542 PerlIO_write(Perl_error_log, message, msglen);
1547 if (gimme == G_SCALAR)
1548 *++newsp = &PL_sv_undef;
1549 PL_stack_sp = newsp;
1553 /* LEAVE could clobber PL_curcop (see save_re_context())
1554 * XXX it might be better to find a way to avoid messing with
1555 * PL_curcop in save_re_context() instead, but this is a more
1556 * minimal fix --GSAR */
1557 PL_curcop = cx->blk_oldcop;
1559 if (optype == OP_REQUIRE) {
1560 const char* const msg = SvPVx_nolen_const(ERRSV);
1561 SV * const nsv = cx->blk_eval.old_namesv;
1562 (void)hv_store(GvHVn(PL_incgv), SvPVX_const(nsv), SvCUR(nsv),
1564 DIE(aTHX_ "%sCompilation failed in require",
1565 *msg ? msg : "Unknown error\n");
1567 assert(CxTYPE(cx) == CXt_EVAL);
1568 return cx->blk_eval.retop;
1572 message = SvPVx_const(ERRSV, msglen);
1574 write_to_stderr(message, msglen);
1582 dVAR; dSP; dPOPTOPssrl;
1583 if (SvTRUE(left) != SvTRUE(right))
1593 register I32 cxix = dopoptosub(cxstack_ix);
1594 register const PERL_CONTEXT *cx;
1595 register const PERL_CONTEXT *ccstack = cxstack;
1596 const PERL_SI *top_si = PL_curstackinfo;
1598 const char *stashname;
1605 /* we may be in a higher stacklevel, so dig down deeper */
1606 while (cxix < 0 && top_si->si_type != PERLSI_MAIN) {
1607 top_si = top_si->si_prev;
1608 ccstack = top_si->si_cxstack;
1609 cxix = dopoptosub_at(ccstack, top_si->si_cxix);
1612 if (GIMME != G_ARRAY) {
1618 /* caller() should not report the automatic calls to &DB::sub */
1619 if (PL_DBsub && GvCV(PL_DBsub) && cxix >= 0 &&
1620 ccstack[cxix].blk_sub.cv == GvCV(PL_DBsub))
1624 cxix = dopoptosub_at(ccstack, cxix - 1);
1627 cx = &ccstack[cxix];
1628 if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
1629 const I32 dbcxix = dopoptosub_at(ccstack, cxix - 1);
1630 /* We expect that ccstack[dbcxix] is CXt_SUB, anyway, the
1631 field below is defined for any cx. */
1632 /* caller() should not report the automatic calls to &DB::sub */
1633 if (PL_DBsub && GvCV(PL_DBsub) && dbcxix >= 0 && ccstack[dbcxix].blk_sub.cv == GvCV(PL_DBsub))
1634 cx = &ccstack[dbcxix];
1637 stashname = CopSTASHPV(cx->blk_oldcop);
1638 if (GIMME != G_ARRAY) {
1641 PUSHs(&PL_sv_undef);
1644 sv_setpv(TARG, stashname);
1653 PUSHs(&PL_sv_undef);
1655 mPUSHs(newSVpv(stashname, 0));
1656 mPUSHs(newSVpv(OutCopFILE(cx->blk_oldcop), 0));
1657 mPUSHi((I32)CopLINE(cx->blk_oldcop));
1660 if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
1661 GV * const cvgv = CvGV(ccstack[cxix].blk_sub.cv);
1662 /* So is ccstack[dbcxix]. */
1664 SV * const sv = newSV(0);
1665 gv_efullname3(sv, cvgv, NULL);
1667 PUSHs(boolSV(CxHASARGS(cx)));
1670 PUSHs(newSVpvs_flags("(unknown)", SVs_TEMP));
1671 PUSHs(boolSV(CxHASARGS(cx)));
1675 PUSHs(newSVpvs_flags("(eval)", SVs_TEMP));
1678 gimme = (I32)cx->blk_gimme;
1679 if (gimme == G_VOID)
1680 PUSHs(&PL_sv_undef);
1682 PUSHs(boolSV((gimme & G_WANT) == G_ARRAY));
1683 if (CxTYPE(cx) == CXt_EVAL) {
1685 if (CxOLD_OP_TYPE(cx) == OP_ENTEREVAL) {
1686 PUSHs(cx->blk_eval.cur_text);
1690 else if (cx->blk_eval.old_namesv) {
1691 mPUSHs(newSVsv(cx->blk_eval.old_namesv));
1694 /* eval BLOCK (try blocks have old_namesv == 0) */
1696 PUSHs(&PL_sv_undef);
1697 PUSHs(&PL_sv_undef);
1701 PUSHs(&PL_sv_undef);
1702 PUSHs(&PL_sv_undef);
1704 if (CxTYPE(cx) == CXt_SUB && CxHASARGS(cx)
1705 && CopSTASH_eq(PL_curcop, PL_debstash))
1707 AV * const ary = cx->blk_sub.argarray;
1708 const int off = AvARRAY(ary) - AvALLOC(ary);
1711 GV* const tmpgv = gv_fetchpvs("DB::args", GV_ADD, SVt_PVAV);
1712 PL_dbargs = GvAV(gv_AVadd(tmpgv));
1714 AvREAL_off(PL_dbargs); /* XXX should be REIFY (see av.h) */
1717 if (AvMAX(PL_dbargs) < AvFILLp(ary) + off)
1718 av_extend(PL_dbargs, AvFILLp(ary) + off);
1719 Copy(AvALLOC(ary), AvARRAY(PL_dbargs), AvFILLp(ary) + 1 + off, SV*);
1720 AvFILLp(PL_dbargs) = AvFILLp(ary) + off;
1722 /* XXX only hints propagated via op_private are currently
1723 * visible (others are not easily accessible, since they
1724 * use the global PL_hints) */
1725 mPUSHi(CopHINTS_get(cx->blk_oldcop));
1728 STRLEN * const old_warnings = cx->blk_oldcop->cop_warnings ;
1730 if (old_warnings == pWARN_NONE ||
1731 (old_warnings == pWARN_STD && (PL_dowarn & G_WARN_ON) == 0))
1732 mask = newSVpvn(WARN_NONEstring, WARNsize) ;
1733 else if (old_warnings == pWARN_ALL ||
1734 (old_warnings == pWARN_STD && PL_dowarn & G_WARN_ON)) {
1735 /* Get the bit mask for $warnings::Bits{all}, because
1736 * it could have been extended by warnings::register */
1738 HV * const bits = get_hv("warnings::Bits", FALSE);
1739 if (bits && (bits_all=hv_fetchs(bits, "all", FALSE))) {
1740 mask = newSVsv(*bits_all);
1743 mask = newSVpvn(WARN_ALLstring, WARNsize) ;
1747 mask = newSVpvn((char *) (old_warnings + 1), old_warnings[0]);
1751 PUSHs(cx->blk_oldcop->cop_hints_hash ?
1752 sv_2mortal(newRV_noinc(
1753 (SV*)Perl_refcounted_he_chain_2hv(aTHX_
1754 cx->blk_oldcop->cop_hints_hash)))
1763 const char * const tmps = (MAXARG < 1) ? (const char *)"" : POPpconstx;
1764 sv_reset(tmps, CopSTASH(PL_curcop));
1769 /* like pp_nextstate, but used instead when the debugger is active */
1774 PL_curcop = (COP*)PL_op;
1775 TAINT_NOT; /* Each statement is presumed innocent */
1776 PL_stack_sp = PL_stack_base + cxstack[cxstack_ix].blk_oldsp;
1779 if (PL_op->op_flags & OPf_SPECIAL /* breakpoint */
1780 || SvIV(PL_DBsingle) || SvIV(PL_DBsignal) || SvIV(PL_DBtrace))
1783 register PERL_CONTEXT *cx;
1784 const I32 gimme = G_ARRAY;
1786 GV * const gv = PL_DBgv;
1787 register CV * const cv = GvCV(gv);
1790 DIE(aTHX_ "No DB::DB routine defined");
1792 if (CvDEPTH(cv) >= 1 && !(PL_debug & DEBUG_DB_RECURSE_FLAG))
1793 /* don't do recursive DB::DB call */
1808 (void)(*CvXSUB(cv))(aTHX_ cv);
1815 PUSHBLOCK(cx, CXt_SUB, SP);
1817 cx->blk_sub.retop = PL_op->op_next;
1820 PAD_SET_CUR_NOSAVE(CvPADLIST(cv), 1);
1821 RETURNOP(CvSTART(cv));
1831 register PERL_CONTEXT *cx;
1832 const I32 gimme = GIMME_V;
1842 if (PL_op->op_targ) {
1843 if (PL_op->op_private & OPpLVAL_INTRO) { /* for my $x (...) */
1844 SvPADSTALE_off(PAD_SVl(PL_op->op_targ));
1845 SAVESETSVFLAGS(PAD_SVl(PL_op->op_targ),
1846 SVs_PADSTALE, SVs_PADSTALE);
1848 #ifndef USE_ITHREADS
1849 svp = &PAD_SVl(PL_op->op_targ); /* "my" variable */
1852 SAVEPADSV(PL_op->op_targ);
1853 iterdata = INT2PTR(void*, PL_op->op_targ);
1854 cxtype |= CXp_PADVAR;
1858 GV * const gv = (GV*)POPs;
1859 svp = &GvSV(gv); /* symbol table variable */
1860 SAVEGENERICSV(*svp);
1863 iterdata = (void*)gv;
1867 if (PL_op->op_private & OPpITER_DEF)
1868 cxtype |= CXp_FOR_DEF;
1872 cxtype |= (PL_op->op_flags & OPf_STACKED) ? CXt_LOOP_FOR : CXt_LOOP_STACK;
1873 PUSHBLOCK(cx, cxtype, SP);
1875 PUSHLOOP_FOR(cx, iterdata, MARK);
1877 PUSHLOOP_FOR(cx, svp, MARK);
1879 if (PL_op->op_flags & OPf_STACKED) {
1880 cx->blk_loop.iterary = (AV*)SvREFCNT_inc(POPs);
1881 if (SvTYPE(cx->blk_loop.iterary) != SVt_PVAV) {
1883 SV * const right = (SV*)cx->blk_loop.iterary;
1886 if (RANGE_IS_NUMERIC(sv,right)) {
1887 #ifdef NV_PRESERVES_UV
1888 if ((SvOK(sv) && ((SvNV(sv) < (NV)IV_MIN) ||
1889 (SvNV(sv) > (NV)IV_MAX)))
1891 (SvOK(right) && ((SvNV(right) > (NV)IV_MAX) ||
1892 (SvNV(right) < (NV)IV_MIN))))
1894 if ((SvOK(sv) && ((SvNV(sv) <= (NV)IV_MIN)
1897 ((SvUV(sv) > (UV)IV_MAX) ||
1898 (SvNV(sv) > (NV)UV_MAX)))))
1900 (SvOK(right) && ((SvNV(right) <= (NV)IV_MIN)
1902 ((SvNV(right) > 0) &&
1903 ((SvUV(right) > (UV)IV_MAX) ||
1904 (SvNV(right) > (NV)UV_MAX))))))
1906 DIE(aTHX_ "Range iterator outside integer range");
1907 cx->blk_loop.iterix = SvIV(sv);
1908 cx->blk_loop.itermax = SvIV(right);
1910 /* for correct -Dstv display */
1911 cx->blk_oldsp = sp - PL_stack_base;
1915 cx->blk_loop.iterlval = newSVsv(sv);
1916 (void) SvPV_force_nolen(cx->blk_loop.iterlval);
1917 (void) SvPV_nolen_const(right);
1920 else if (PL_op->op_private & OPpITER_REVERSED) {
1921 cx->blk_loop.itermax = 0;
1922 cx->blk_loop.iterix = AvFILL(cx->blk_loop.iterary) + 1;
1927 cx->blk_loop.iterary = (SV*)0xDEADBEEF;
1928 if (PL_op->op_private & OPpITER_REVERSED) {
1929 cx->blk_loop.itermax = MARK - PL_stack_base + 1;
1930 cx->blk_loop.iterix = cx->blk_oldsp + 1;
1933 cx->blk_loop.iterix = MARK - PL_stack_base;
1943 register PERL_CONTEXT *cx;
1944 const I32 gimme = GIMME_V;
1950 PUSHBLOCK(cx, CXt_LOOP_PLAIN, SP);
1951 PUSHLOOP_PLAIN(cx, SP);
1959 register PERL_CONTEXT *cx;
1966 assert(CxTYPE_is_LOOP(cx));
1968 newsp = PL_stack_base + cx->blk_loop.resetsp;
1971 if (gimme == G_VOID)
1973 else if (gimme == G_SCALAR) {
1975 *++newsp = sv_mortalcopy(*SP);
1977 *++newsp = &PL_sv_undef;
1981 *++newsp = sv_mortalcopy(*++mark);
1982 TAINT_NOT; /* Each item is independent */
1988 POPLOOP(cx); /* Stack values are safe: release loop vars ... */
1989 PL_curpm = newpm; /* ... and pop $1 et al */
2000 register PERL_CONTEXT *cx;
2001 bool popsub2 = FALSE;
2002 bool clear_errsv = FALSE;
2010 const I32 cxix = dopoptosub(cxstack_ix);
2013 if (CxMULTICALL(cxstack)) { /* In this case we must be in a
2014 * sort block, which is a CXt_NULL
2017 PL_stack_base[1] = *PL_stack_sp;
2018 PL_stack_sp = PL_stack_base + 1;
2022 DIE(aTHX_ "Can't return outside a subroutine");
2024 if (cxix < cxstack_ix)
2027 if (CxMULTICALL(&cxstack[cxix])) {
2028 gimme = cxstack[cxix].blk_gimme;
2029 if (gimme == G_VOID)
2030 PL_stack_sp = PL_stack_base;
2031 else if (gimme == G_SCALAR) {
2032 PL_stack_base[1] = *PL_stack_sp;
2033 PL_stack_sp = PL_stack_base + 1;
2039 switch (CxTYPE(cx)) {
2042 retop = cx->blk_sub.retop;
2043 cxstack_ix++; /* preserve cx entry on stack for use by POPSUB */
2046 if (!(PL_in_eval & EVAL_KEEPERR))
2049 retop = cx->blk_eval.retop;
2053 if (optype == OP_REQUIRE &&
2054 (MARK == SP || (gimme == G_SCALAR && !SvTRUE(*SP))) )
2056 /* Unassume the success we assumed earlier. */
2057 SV * const nsv = cx->blk_eval.old_namesv;
2058 (void)hv_delete(GvHVn(PL_incgv), SvPVX_const(nsv), SvCUR(nsv), G_DISCARD);
2059 DIE(aTHX_ "%"SVf" did not return a true value", SVfARG(nsv));
2064 retop = cx->blk_sub.retop;
2067 DIE(aTHX_ "panic: return");
2071 if (gimme == G_SCALAR) {
2074 if (cx->blk_sub.cv && CvDEPTH(cx->blk_sub.cv) > 1) {
2076 *++newsp = SvREFCNT_inc(*SP);
2081 sv = SvREFCNT_inc(*SP); /* FREETMPS could clobber it */
2083 *++newsp = sv_mortalcopy(sv);
2088 *++newsp = (SvTEMP(*SP)) ? *SP : sv_mortalcopy(*SP);
2091 *++newsp = sv_mortalcopy(*SP);
2094 *++newsp = &PL_sv_undef;
2096 else if (gimme == G_ARRAY) {
2097 while (++MARK <= SP) {
2098 *++newsp = (popsub2 && SvTEMP(*MARK))
2099 ? *MARK : sv_mortalcopy(*MARK);
2100 TAINT_NOT; /* Each item is independent */
2103 PL_stack_sp = newsp;
2106 /* Stack values are safe: */
2109 POPSUB(cx,sv); /* release CV and @_ ... */
2113 PL_curpm = newpm; /* ... and pop $1 et al */
2117 sv_setpvn(ERRSV,"",0);
2125 register PERL_CONTEXT *cx;
2136 if (PL_op->op_flags & OPf_SPECIAL) {
2137 cxix = dopoptoloop(cxstack_ix);
2139 DIE(aTHX_ "Can't \"last\" outside a loop block");
2142 cxix = dopoptolabel(cPVOP->op_pv);
2144 DIE(aTHX_ "Label not found for \"last %s\"", cPVOP->op_pv);
2146 if (cxix < cxstack_ix)
2150 cxstack_ix++; /* temporarily protect top context */
2152 switch (CxTYPE(cx)) {
2153 case CXt_LOOP_STACK:
2155 case CXt_LOOP_PLAIN:
2157 newsp = PL_stack_base + cx->blk_loop.resetsp;
2158 nextop = cx->blk_loop.my_op->op_lastop->op_next;
2162 nextop = cx->blk_sub.retop;
2166 nextop = cx->blk_eval.retop;
2170 nextop = cx->blk_sub.retop;
2173 DIE(aTHX_ "panic: last");
2177 if (gimme == G_SCALAR) {
2179 *++newsp = ((pop2 == CXt_SUB) && SvTEMP(*SP))
2180 ? *SP : sv_mortalcopy(*SP);
2182 *++newsp = &PL_sv_undef;
2184 else if (gimme == G_ARRAY) {
2185 while (++MARK <= SP) {
2186 *++newsp = ((pop2 == CXt_SUB) && SvTEMP(*MARK))
2187 ? *MARK : sv_mortalcopy(*MARK);
2188 TAINT_NOT; /* Each item is independent */
2196 /* Stack values are safe: */
2198 case CXt_LOOP_PLAIN:
2199 case CXt_LOOP_STACK:
2201 POPLOOP(cx); /* release loop vars ... */
2205 POPSUB(cx,sv); /* release CV and @_ ... */
2208 PL_curpm = newpm; /* ... and pop $1 et al */
2211 PERL_UNUSED_VAR(optype);
2212 PERL_UNUSED_VAR(gimme);
2220 register PERL_CONTEXT *cx;
2223 if (PL_op->op_flags & OPf_SPECIAL) {
2224 cxix = dopoptoloop(cxstack_ix);
2226 DIE(aTHX_ "Can't \"next\" outside a loop block");
2229 cxix = dopoptolabel(cPVOP->op_pv);
2231 DIE(aTHX_ "Label not found for \"next %s\"", cPVOP->op_pv);
2233 if (cxix < cxstack_ix)
2236 /* clear off anything above the scope we're re-entering, but
2237 * save the rest until after a possible continue block */
2238 inner = PL_scopestack_ix;
2240 if (PL_scopestack_ix < inner)
2241 leave_scope(PL_scopestack[PL_scopestack_ix]);
2242 PL_curcop = cx->blk_oldcop;
2243 return CX_LOOP_NEXTOP_GET(cx);
2250 register PERL_CONTEXT *cx;
2254 if (PL_op->op_flags & OPf_SPECIAL) {
2255 cxix = dopoptoloop(cxstack_ix);
2257 DIE(aTHX_ "Can't \"redo\" outside a loop block");
2260 cxix = dopoptolabel(cPVOP->op_pv);
2262 DIE(aTHX_ "Label not found for \"redo %s\"", cPVOP->op_pv);
2264 if (cxix < cxstack_ix)
2267 redo_op = cxstack[cxix].blk_loop.my_op->op_redoop;
2268 if (redo_op->op_type == OP_ENTER) {
2269 /* pop one less context to avoid $x being freed in while (my $x..) */
2271 assert(CxTYPE(&cxstack[cxstack_ix]) == CXt_BLOCK);
2272 redo_op = redo_op->op_next;
2276 oldsave = PL_scopestack[PL_scopestack_ix - 1];
2277 LEAVE_SCOPE(oldsave);
2279 PL_curcop = cx->blk_oldcop;
2284 S_dofindlabel(pTHX_ OP *o, const char *label, OP **opstack, OP **oplimit)
2288 static const char too_deep[] = "Target of goto is too deeply nested";
2291 Perl_croak(aTHX_ too_deep);
2292 if (o->op_type == OP_LEAVE ||
2293 o->op_type == OP_SCOPE ||
2294 o->op_type == OP_LEAVELOOP ||
2295 o->op_type == OP_LEAVESUB ||
2296 o->op_type == OP_LEAVETRY)
2298 *ops++ = cUNOPo->op_first;
2300 Perl_croak(aTHX_ too_deep);
2303 if (o->op_flags & OPf_KIDS) {
2305 /* First try all the kids at this level, since that's likeliest. */
2306 for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling) {
2307 if ((kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) &&
2308 kCOP->cop_label && strEQ(kCOP->cop_label, label))
2311 for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling) {
2312 if (kid == PL_lastgotoprobe)
2314 if (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) {
2317 else if (ops[-1]->op_type == OP_NEXTSTATE ||
2318 ops[-1]->op_type == OP_DBSTATE)
2323 if ((o = dofindlabel(kid, label, ops, oplimit)))
2336 register PERL_CONTEXT *cx;
2337 #define GOTO_DEPTH 64
2338 OP *enterops[GOTO_DEPTH];
2339 const char *label = NULL;
2340 const bool do_dump = (PL_op->op_type == OP_DUMP);
2341 static const char must_have_label[] = "goto must have label";
2343 if (PL_op->op_flags & OPf_STACKED) {
2344 SV * const sv = POPs;
2346 /* This egregious kludge implements goto &subroutine */
2347 if (SvROK(sv) && SvTYPE(SvRV(sv)) == SVt_PVCV) {
2349 register PERL_CONTEXT *cx;
2350 CV* cv = (CV*)SvRV(sv);
2357 if (!CvROOT(cv) && !CvXSUB(cv)) {
2358 const GV * const gv = CvGV(cv);
2362 /* autoloaded stub? */
2363 if (cv != GvCV(gv) && (cv = GvCV(gv)))
2365 autogv = gv_autoload4(GvSTASH(gv), GvNAME(gv),
2366 GvNAMELEN(gv), FALSE);
2367 if (autogv && (cv = GvCV(autogv)))
2369 tmpstr = sv_newmortal();
2370 gv_efullname3(tmpstr, gv, NULL);
2371 DIE(aTHX_ "Goto undefined subroutine &%"SVf"", SVfARG(tmpstr));
2373 DIE(aTHX_ "Goto undefined subroutine");
2376 /* First do some returnish stuff. */
2377 SvREFCNT_inc_simple_void(cv); /* avoid premature free during unwind */
2379 cxix = dopoptosub(cxstack_ix);
2381 DIE(aTHX_ "Can't goto subroutine outside a subroutine");
2382 if (cxix < cxstack_ix)
2386 /* ban goto in eval: see <20050521150056.GC20213@iabyn.com> */
2387 if (CxTYPE(cx) == CXt_EVAL) {
2389 DIE(aTHX_ "Can't goto subroutine from an eval-string");
2391 DIE(aTHX_ "Can't goto subroutine from an eval-block");
2393 else if (CxMULTICALL(cx))
2394 DIE(aTHX_ "Can't goto subroutine from a sort sub (or similar callback)");
2395 if (CxTYPE(cx) == CXt_SUB && CxHASARGS(cx)) {
2396 /* put @_ back onto stack */
2397 AV* av = cx->blk_sub.argarray;
2399 items = AvFILLp(av) + 1;
2400 EXTEND(SP, items+1); /* @_ could have been extended. */
2401 Copy(AvARRAY(av), SP + 1, items, SV*);
2402 SvREFCNT_dec(GvAV(PL_defgv));
2403 GvAV(PL_defgv) = cx->blk_sub.savearray;
2405 /* abandon @_ if it got reified */
2410 av_extend(av, items-1);
2412 PAD_SVl(0) = (SV*)(cx->blk_sub.argarray = av);
2415 else if (CvISXSUB(cv)) { /* put GvAV(defgv) back onto stack */
2416 AV* const av = GvAV(PL_defgv);
2417 items = AvFILLp(av) + 1;
2418 EXTEND(SP, items+1); /* @_ could have been extended. */
2419 Copy(AvARRAY(av), SP + 1, items, SV*);
2423 if (CxTYPE(cx) == CXt_SUB &&
2424 !(CvDEPTH(cx->blk_sub.cv) = cx->blk_sub.olddepth))
2425 SvREFCNT_dec(cx->blk_sub.cv);
2426 oldsave = PL_scopestack[PL_scopestack_ix - 1];
2427 LEAVE_SCOPE(oldsave);
2429 /* Now do some callish stuff. */
2431 SAVEFREESV(cv); /* later, undo the 'avoid premature free' hack */
2433 OP* const retop = cx->blk_sub.retop;
2438 for (index=0; index<items; index++)
2439 sv_2mortal(SP[-index]);
2442 /* XS subs don't have a CxSUB, so pop it */
2443 POPBLOCK(cx, PL_curpm);
2444 /* Push a mark for the start of arglist */
2447 (void)(*CvXSUB(cv))(aTHX_ cv);
2452 AV* const padlist = CvPADLIST(cv);
2453 if (CxTYPE(cx) == CXt_EVAL) {
2454 PL_in_eval = CxOLD_IN_EVAL(cx);
2455 PL_eval_root = cx->blk_eval.old_eval_root;
2456 cx->cx_type = CXt_SUB;
2458 cx->blk_sub.cv = cv;
2459 cx->blk_sub.olddepth = CvDEPTH(cv);
2462 if (CvDEPTH(cv) < 2)
2463 SvREFCNT_inc_simple_void_NN(cv);
2465 if (CvDEPTH(cv) == PERL_SUB_DEPTH_WARN && ckWARN(WARN_RECURSION))
2466 sub_crush_depth(cv);
2467 pad_push(padlist, CvDEPTH(cv));
2470 PAD_SET_CUR_NOSAVE(padlist, CvDEPTH(cv));
2473 AV* const av = (AV*)PAD_SVl(0);
2475 cx->blk_sub.savearray = GvAV(PL_defgv);
2476 GvAV(PL_defgv) = (AV*)SvREFCNT_inc_simple(av);
2477 CX_CURPAD_SAVE(cx->blk_sub);
2478 cx->blk_sub.argarray = av;
2480 if (items >= AvMAX(av) + 1) {
2481 SV **ary = AvALLOC(av);
2482 if (AvARRAY(av) != ary) {
2483 AvMAX(av) += AvARRAY(av) - AvALLOC(av);
2486 if (items >= AvMAX(av) + 1) {
2487 AvMAX(av) = items - 1;
2488 Renew(ary,items+1,SV*);
2494 Copy(mark,AvARRAY(av),items,SV*);
2495 AvFILLp(av) = items - 1;
2496 assert(!AvREAL(av));
2498 /* transfer 'ownership' of refcnts to new @_ */
2508 if (PERLDB_SUB) { /* Checking curstash breaks DProf. */
2509 Perl_get_db_sub(aTHX_ NULL, cv);
2511 CV * const gotocv = get_cv("DB::goto", FALSE);
2513 PUSHMARK( PL_stack_sp );
2514 call_sv((SV*)gotocv, G_SCALAR | G_NODEBUG);
2519 RETURNOP(CvSTART(cv));
2523 label = SvPV_nolen_const(sv);
2524 if (!(do_dump || *label))
2525 DIE(aTHX_ must_have_label);
2528 else if (PL_op->op_flags & OPf_SPECIAL) {
2530 DIE(aTHX_ must_have_label);
2533 label = cPVOP->op_pv;
2535 if (label && *label) {
2536 OP *gotoprobe = NULL;
2537 bool leaving_eval = FALSE;
2538 bool in_block = FALSE;
2539 PERL_CONTEXT *last_eval_cx = NULL;
2543 PL_lastgotoprobe = NULL;
2545 for (ix = cxstack_ix; ix >= 0; ix--) {
2547 switch (CxTYPE(cx)) {
2549 leaving_eval = TRUE;
2550 if (!CxTRYBLOCK(cx)) {
2551 gotoprobe = (last_eval_cx ?
2552 last_eval_cx->blk_eval.old_eval_root :
2557 /* else fall through */
2558 case CXt_LOOP_STACK:
2560 case CXt_LOOP_PLAIN:
2561 gotoprobe = cx->blk_oldcop->op_sibling;
2567 gotoprobe = cx->blk_oldcop->op_sibling;
2570 gotoprobe = PL_main_root;
2573 if (CvDEPTH(cx->blk_sub.cv) && !CxMULTICALL(cx)) {
2574 gotoprobe = CvROOT(cx->blk_sub.cv);
2580 DIE(aTHX_ "Can't \"goto\" out of a pseudo block");
2583 DIE(aTHX_ "panic: goto");
2584 gotoprobe = PL_main_root;
2588 retop = dofindlabel(gotoprobe, label,
2589 enterops, enterops + GOTO_DEPTH);
2593 PL_lastgotoprobe = gotoprobe;
2596 DIE(aTHX_ "Can't find label %s", label);
2598 /* if we're leaving an eval, check before we pop any frames
2599 that we're not going to punt, otherwise the error
2602 if (leaving_eval && *enterops && enterops[1]) {
2604 for (i = 1; enterops[i]; i++)
2605 if (enterops[i]->op_type == OP_ENTERITER)
2606 DIE(aTHX_ "Can't \"goto\" into the middle of a foreach loop");
2609 /* pop unwanted frames */
2611 if (ix < cxstack_ix) {
2618 oldsave = PL_scopestack[PL_scopestack_ix];
2619 LEAVE_SCOPE(oldsave);
2622 /* push wanted frames */
2624 if (*enterops && enterops[1]) {
2625 OP * const oldop = PL_op;
2626 ix = enterops[1]->op_type == OP_ENTER && in_block ? 2 : 1;
2627 for (; enterops[ix]; ix++) {
2628 PL_op = enterops[ix];
2629 /* Eventually we may want to stack the needed arguments
2630 * for each op. For now, we punt on the hard ones. */
2631 if (PL_op->op_type == OP_ENTERITER)
2632 DIE(aTHX_ "Can't \"goto\" into the middle of a foreach loop");
2633 CALL_FPTR(PL_op->op_ppaddr)(aTHX);
2641 if (!retop) retop = PL_main_start;
2643 PL_restartop = retop;
2644 PL_do_undump = TRUE;
2648 PL_restartop = 0; /* hmm, must be GNU unexec().. */
2649 PL_do_undump = FALSE;
2666 if (anum == 1 && (PL_op->op_private & OPpEXIT_VMSISH))
2668 VMSISH_HUSHED = VMSISH_HUSHED || (PL_op->op_private & OPpHUSH_VMSISH);
2671 PL_exit_flags |= PERL_EXIT_EXPECTED;
2673 /* KLUDGE: disable exit 0 in BEGIN blocks when we're just compiling */
2674 if (anum || !(PL_minus_c && PL_madskills))
2679 PUSHs(&PL_sv_undef);
2686 S_save_lines(pTHX_ AV *array, SV *sv)
2688 const char *s = SvPVX_const(sv);
2689 const char * const send = SvPVX_const(sv) + SvCUR(sv);
2692 while (s && s < send) {
2694 SV * const tmpstr = newSV_type(SVt_PVMG);
2696 t = strchr(s, '\n');
2702 sv_setpvn(tmpstr, s, t - s);
2703 av_store(array, line++, tmpstr);
2709 S_docatch(pTHX_ OP *o)
2713 OP * const oldop = PL_op;
2717 assert(CATCH_GET == TRUE);
2724 assert(cxstack_ix >= 0);
2725 assert(CxTYPE(&cxstack[cxstack_ix]) == CXt_EVAL);
2726 cxstack[cxstack_ix].blk_eval.cur_top_env = PL_top_env;
2731 /* die caught by an inner eval - continue inner loop */
2733 /* NB XXX we rely on the old popped CxEVAL still being at the top
2734 * of the stack; the way die_where() currently works, this
2735 * assumption is valid. In theory The cur_top_env value should be
2736 * returned in another global, the way retop (aka PL_restartop)
2738 assert(CxTYPE(&cxstack[cxstack_ix+1]) == CXt_EVAL);
2741 && cxstack[cxstack_ix+1].blk_eval.cur_top_env == PL_top_env)
2743 PL_op = PL_restartop;
2760 Perl_sv_compile_2op(pTHX_ SV *sv, OP** startop, const char *code, PAD** padp)
2761 /* sv Text to convert to OP tree. */
2762 /* startop op_free() this to undo. */
2763 /* code Short string id of the caller. */
2765 /* FIXME - how much of this code is common with pp_entereval? */
2766 dVAR; dSP; /* Make POPBLOCK work. */
2772 char tbuf[TYPE_DIGITS(long) + 12 + 10];
2773 char *tmpbuf = tbuf;
2776 CV* runcv = NULL; /* initialise to avoid compiler warnings */
2780 lex_start(sv, NULL, FALSE);
2782 /* switch to eval mode */
2784 if (IN_PERL_COMPILETIME) {
2785 SAVECOPSTASH_FREE(&PL_compiling);
2786 CopSTASH_set(&PL_compiling, PL_curstash);
2788 if (PERLDB_NAMEEVAL && CopLINE(PL_curcop)) {
2789 SV * const sv = sv_newmortal();
2790 Perl_sv_setpvf(aTHX_ sv, "_<(%.10seval %lu)[%s:%"IVdf"]",
2791 code, (unsigned long)++PL_evalseq,
2792 CopFILE(PL_curcop), (IV)CopLINE(PL_curcop));
2797 len = my_snprintf(tmpbuf, sizeof(tbuf), "_<(%.10s_eval %lu)", code,
2798 (unsigned long)++PL_evalseq);
2799 SAVECOPFILE_FREE(&PL_compiling);
2800 CopFILE_set(&PL_compiling, tmpbuf+2);
2801 SAVECOPLINE(&PL_compiling);
2802 CopLINE_set(&PL_compiling, 1);
2803 /* XXX For C<eval "...">s within BEGIN {} blocks, this ends up
2804 deleting the eval's FILEGV from the stash before gv_check() runs
2805 (i.e. before run-time proper). To work around the coredump that
2806 ensues, we always turn GvMULTI_on for any globals that were
2807 introduced within evals. See force_ident(). GSAR 96-10-12 */
2808 safestr = savepvn(tmpbuf, len);
2809 SAVEDELETE(PL_defstash, safestr, len);
2811 #ifdef OP_IN_REGISTER
2817 /* we get here either during compilation, or via pp_regcomp at runtime */
2818 runtime = IN_PERL_RUNTIME;
2820 runcv = find_runcv(NULL);
2823 PL_op->op_type = OP_ENTEREVAL;
2824 PL_op->op_flags = 0; /* Avoid uninit warning. */
2825 PUSHBLOCK(cx, CXt_EVAL|(IN_PERL_COMPILETIME ? 0 : CXp_REAL), SP);
2826 PUSHEVAL(cx, 0, NULL);
2829 (void) doeval(G_SCALAR, startop, runcv, PL_curcop->cop_seq);
2831 (void) doeval(G_SCALAR, startop, PL_compcv, PL_cop_seqmax);
2832 POPBLOCK(cx,PL_curpm);
2835 (*startop)->op_type = OP_NULL;
2836 (*startop)->op_ppaddr = PL_ppaddr[OP_NULL];
2838 /* XXX DAPM do this properly one year */
2839 *padp = (AV*)SvREFCNT_inc_simple(PL_comppad);
2841 if (IN_PERL_COMPILETIME)
2842 CopHINTS_set(&PL_compiling, PL_hints);
2843 #ifdef OP_IN_REGISTER
2846 PERL_UNUSED_VAR(newsp);
2847 PERL_UNUSED_VAR(optype);
2849 return PL_eval_start;
2854 =for apidoc find_runcv
2856 Locate the CV corresponding to the currently executing sub or eval.
2857 If db_seqp is non_null, skip CVs that are in the DB package and populate
2858 *db_seqp with the cop sequence number at the point that the DB:: code was
2859 entered. (allows debuggers to eval in the scope of the breakpoint rather
2860 than in the scope of the debugger itself).
2866 Perl_find_runcv(pTHX_ U32 *db_seqp)
2872 *db_seqp = PL_curcop->cop_seq;
2873 for (si = PL_curstackinfo; si; si = si->si_prev) {
2875 for (ix = si->si_cxix; ix >= 0; ix--) {
2876 const PERL_CONTEXT *cx = &(si->si_cxstack[ix]);
2877 if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
2878 CV * const cv = cx->blk_sub.cv;
2879 /* skip DB:: code */
2880 if (db_seqp && PL_debstash && CvSTASH(cv) == PL_debstash) {
2881 *db_seqp = cx->blk_oldcop->cop_seq;
2886 else if (CxTYPE(cx) == CXt_EVAL && !CxTRYBLOCK(cx))
2894 /* Compile a require/do, an eval '', or a /(?{...})/.
2895 * In the last case, startop is non-null, and contains the address of
2896 * a pointer that should be set to the just-compiled code.
2897 * outside is the lexically enclosing CV (if any) that invoked us.
2898 * Returns a bool indicating whether the compile was successful; if so,
2899 * PL_eval_start contains the first op of the compiled ocde; otherwise,
2900 * pushes undef (also croaks if startop != NULL).
2904 S_doeval(pTHX_ int gimme, OP** startop, CV* outside, U32 seq)
2907 OP * const saveop = PL_op;
2909 PL_in_eval = ((saveop && saveop->op_type == OP_REQUIRE)
2910 ? (EVAL_INREQUIRE | (PL_in_eval & EVAL_INEVAL))
2915 SAVESPTR(PL_compcv);
2916 PL_compcv = (CV*)newSV_type(SVt_PVCV);
2917 CvEVAL_on(PL_compcv);
2918 assert(CxTYPE(&cxstack[cxstack_ix]) == CXt_EVAL);
2919 cxstack[cxstack_ix].blk_eval.cv = PL_compcv;
2921 CvOUTSIDE_SEQ(PL_compcv) = seq;
2922 CvOUTSIDE(PL_compcv) = (CV*)SvREFCNT_inc_simple(outside);
2924 /* set up a scratch pad */
2926 CvPADLIST(PL_compcv) = pad_new(padnew_SAVE);
2927 PL_op = NULL; /* avoid PL_op and PL_curpad referring to different CVs */
2931 SAVEMORTALIZESV(PL_compcv); /* must remain until end of current statement */
2933 /* make sure we compile in the right package */
2935 if (CopSTASH_ne(PL_curcop, PL_curstash)) {
2936 SAVESPTR(PL_curstash);
2937 PL_curstash = CopSTASH(PL_curcop);
2939 /* XXX:ajgo do we really need to alloc an AV for begin/checkunit */
2940 SAVESPTR(PL_beginav);
2941 PL_beginav = newAV();
2942 SAVEFREESV(PL_beginav);
2943 SAVESPTR(PL_unitcheckav);
2944 PL_unitcheckav = newAV();
2945 SAVEFREESV(PL_unitcheckav);
2948 SAVEBOOL(PL_madskills);
2952 /* try to compile it */
2954 PL_eval_root = NULL;
2955 PL_curcop = &PL_compiling;
2956 CopARYBASE_set(PL_curcop, 0);
2957 if (saveop && (saveop->op_type != OP_REQUIRE) && (saveop->op_flags & OPf_SPECIAL))
2958 PL_in_eval |= EVAL_KEEPERR;
2960 sv_setpvn(ERRSV,"",0);
2961 if (yyparse() || PL_parser->error_count || !PL_eval_root) {
2962 SV **newsp; /* Used by POPBLOCK. */
2963 PERL_CONTEXT *cx = &cxstack[cxstack_ix];
2964 I32 optype = 0; /* Might be reset by POPEVAL. */
2969 op_free(PL_eval_root);
2970 PL_eval_root = NULL;
2972 SP = PL_stack_base + POPMARK; /* pop original mark */
2974 POPBLOCK(cx,PL_curpm);
2980 msg = SvPVx_nolen_const(ERRSV);
2981 if (optype == OP_REQUIRE) {
2982 const SV * const nsv = cx->blk_eval.old_namesv;
2983 (void)hv_store(GvHVn(PL_incgv), SvPVX_const(nsv), SvCUR(nsv),
2985 Perl_croak(aTHX_ "%sCompilation failed in require",
2986 *msg ? msg : "Unknown error\n");
2989 POPBLOCK(cx,PL_curpm);
2991 Perl_croak(aTHX_ "%sCompilation failed in regexp",
2992 (*msg ? msg : "Unknown error\n"));
2996 sv_setpvs(ERRSV, "Compilation error");
2999 PERL_UNUSED_VAR(newsp);
3000 PUSHs(&PL_sv_undef);
3004 CopLINE_set(&PL_compiling, 0);
3006 *startop = PL_eval_root;
3008 SAVEFREEOP(PL_eval_root);
3010 /* Set the context for this new optree.
3011 * If the last op is an OP_REQUIRE, force scalar context.
3012 * Otherwise, propagate the context from the eval(). */
3013 if (PL_eval_root->op_type == OP_LEAVEEVAL
3014 && cUNOPx(PL_eval_root)->op_first->op_type == OP_LINESEQ
3015 && cLISTOPx(cUNOPx(PL_eval_root)->op_first)->op_last->op_type
3017 scalar(PL_eval_root);
3018 else if ((gimme & G_WANT) == G_VOID)
3019 scalarvoid(PL_eval_root);
3020 else if ((gimme & G_WANT) == G_ARRAY)
3023 scalar(PL_eval_root);
3025 DEBUG_x(dump_eval());
3027 /* Register with debugger: */
3028 if (PERLDB_INTER && saveop && saveop->op_type == OP_REQUIRE) {
3029 CV * const cv = get_cv("DB::postponed", FALSE);
3033 XPUSHs((SV*)CopFILEGV(&PL_compiling));
3035 call_sv((SV*)cv, G_DISCARD);
3040 call_list(PL_scopestack_ix, PL_unitcheckav);
3042 /* compiled okay, so do it */
3044 CvDEPTH(PL_compcv) = 1;
3045 SP = PL_stack_base + POPMARK; /* pop original mark */
3046 PL_op = saveop; /* The caller may need it. */
3047 PL_parser->lex_state = LEX_NOTPARSING; /* $^S needs this. */
3054 S_check_type_and_open(pTHX_ const char *name)
3057 const int st_rc = PerlLIO_stat(name, &st);
3059 if (st_rc < 0 || S_ISDIR(st.st_mode) || S_ISBLK(st.st_mode)) {
3063 return PerlIO_open(name, PERL_SCRIPT_MODE);
3066 #ifndef PERL_DISABLE_PMC
3068 S_doopen_pm(pTHX_ const char *name, const STRLEN namelen)
3072 if (namelen > 3 && memEQs(name + namelen - 3, 3, ".pm")) {
3073 SV *const pmcsv = newSV(namelen + 2);
3074 char *const pmc = SvPVX(pmcsv);
3077 memcpy(pmc, name, namelen);
3079 pmc[namelen + 1] = '\0';
3081 if (PerlLIO_stat(pmc, &pmcstat) < 0) {
3082 fp = check_type_and_open(name);
3085 fp = check_type_and_open(pmc);
3087 SvREFCNT_dec(pmcsv);
3090 fp = check_type_and_open(name);
3095 # define doopen_pm(name, namelen) check_type_and_open(name)
3096 #endif /* !PERL_DISABLE_PMC */
3101 register PERL_CONTEXT *cx;
3108 int vms_unixname = 0;
3110 const char *tryname = NULL;
3112 const I32 gimme = GIMME_V;
3113 int filter_has_file = 0;
3114 PerlIO *tryrsfp = NULL;
3115 SV *filter_cache = NULL;
3116 SV *filter_state = NULL;
3117 SV *filter_sub = NULL;
3123 if ( (SvNIOKp(sv) || SvVOK(sv)) && PL_op->op_type != OP_DOFILE) {
3124 sv = new_version(sv);
3125 if (!sv_derived_from(PL_patchlevel, "version"))
3126 upg_version(PL_patchlevel, TRUE);
3127 if (cUNOP->op_first->op_type == OP_CONST && cUNOP->op_first->op_private & OPpCONST_NOVER) {
3128 if ( vcmp(sv,PL_patchlevel) <= 0 )
3129 DIE(aTHX_ "Perls since %"SVf" too modern--this is %"SVf", stopped",
3130 SVfARG(vnormal(sv)), SVfARG(vnormal(PL_patchlevel)));
3133 if ( vcmp(sv,PL_patchlevel) > 0 ) {
3136 SV * const req = SvRV(sv);
3137 SV * const pv = *hv_fetchs((HV*)req, "original", FALSE);
3139 /* get the left hand term */
3140 lav = (AV *)SvRV(*hv_fetchs((HV*)req, "version", FALSE));
3142 first = SvIV(*av_fetch(lav,0,0));
3143 if ( first > (int)PERL_REVISION /* probably 'use 6.0' */
3144 || hv_exists((HV*)req, "qv", 2 ) /* qv style */
3145 || av_len(lav) > 1 /* FP with > 3 digits */
3146 || strstr(SvPVX(pv),".0") /* FP with leading 0 */
3148 DIE(aTHX_ "Perl %"SVf" required--this is only "
3149 "%"SVf", stopped", SVfARG(vnormal(req)),
3150 SVfARG(vnormal(PL_patchlevel)));
3152 else { /* probably 'use 5.10' or 'use 5.8' */
3153 SV * hintsv = newSV(0);
3157 second = SvIV(*av_fetch(lav,1,0));
3159 second /= second >= 600 ? 100 : 10;
3160 hintsv = Perl_newSVpvf(aTHX_ "v%d.%d.%d",
3161 (int)first, (int)second,0);
3162 upg_version(hintsv, TRUE);
3164 DIE(aTHX_ "Perl %"SVf" required (did you mean %"SVf"?)"
3165 "--this is only %"SVf", stopped",
3166 SVfARG(vnormal(req)),
3167 SVfARG(vnormal(hintsv)),
3168 SVfARG(vnormal(PL_patchlevel)));
3173 /* We do this only with use, not require. */
3175 /* If we request a version >= 5.9.5, load feature.pm with the
3176 * feature bundle that corresponds to the required version. */
3177 vcmp(sv, sv_2mortal(upg_version(newSVnv(5.009005), FALSE))) >= 0) {
3178 SV *const importsv = vnormal(sv);
3179 *SvPVX_mutable(importsv) = ':';
3181 Perl_load_module(aTHX_ 0, newSVpvs("feature"), NULL, importsv, NULL);
3187 name = SvPV_const(sv, len);
3188 if (!(name && len > 0 && *name))
3189 DIE(aTHX_ "Null filename used");
3190 TAINT_PROPER("require");
3194 /* The key in the %ENV hash is in the syntax of file passed as the argument
3195 * usually this is in UNIX format, but sometimes in VMS format, which
3196 * can result in a module being pulled in more than once.
3197 * To prevent this, the key must be stored in UNIX format if the VMS
3198 * name can be translated to UNIX.
3200 if ((unixname = tounixspec(name, NULL)) != NULL) {
3201 unixlen = strlen(unixname);
3207 /* if not VMS or VMS name can not be translated to UNIX, pass it
3210 unixname = (char *) name;
3213 if (PL_op->op_type == OP_REQUIRE) {
3214 SV * const * const svp = hv_fetch(GvHVn(PL_incgv),
3215 unixname, unixlen, 0);
3217 if (*svp != &PL_sv_undef)
3220 DIE(aTHX_ "Attempt to reload %s aborted.\n"
3221 "Compilation failed in require", unixname);
3225 /* prepare to compile file */
3227 if (path_is_absolute(name)) {
3229 tryrsfp = doopen_pm(name, len);
3231 #ifdef MACOS_TRADITIONAL
3235 MacPerl_CanonDir(name, newname, 1);
3236 if (path_is_absolute(newname)) {
3238 tryrsfp = doopen_pm(newname, strlen(newname));
3243 AV * const ar = GvAVn(PL_incgv);
3249 namesv = newSV_type(SVt_PV);
3250 for (i = 0; i <= AvFILL(ar); i++) {
3251 SV * const dirsv = *av_fetch(ar, i, TRUE);
3253 if (SvTIED_mg((SV*)ar, PERL_MAGIC_tied))
3260 if (SvTYPE(SvRV(loader)) == SVt_PVAV
3261 && !sv_isobject(loader))
3263 loader = *av_fetch((AV *)SvRV(loader), 0, TRUE);
3266 Perl_sv_setpvf(aTHX_ namesv, "/loader/0x%"UVxf"/%s",
3267 PTR2UV(SvRV(dirsv)), name);
3268 tryname = SvPVX_const(namesv);
3279 if (sv_isobject(loader))
3280 count = call_method("INC", G_ARRAY);
3282 count = call_sv(loader, G_ARRAY);
3285 /* Adjust file name if the hook has set an %INC entry */
3286 svp = hv_fetch(GvHVn(PL_incgv), name, len, 0);
3288 tryname = SvPVX_const(*svp);
3297 if (SvROK(arg) && (SvTYPE(SvRV(arg)) <= SVt_PVLV)
3298 && !isGV_with_GP(SvRV(arg))) {
3299 filter_cache = SvRV(arg);
3300 SvREFCNT_inc_simple_void_NN(filter_cache);
3307 if (SvROK(arg) && SvTYPE(SvRV(arg)) == SVt_PVGV) {
3311 if (SvTYPE(arg) == SVt_PVGV) {
3312 IO * const io = GvIO((GV *)arg);
3317 tryrsfp = IoIFP(io);
3318 if (IoOFP(io) && IoOFP(io) != IoIFP(io)) {
3319 PerlIO_close(IoOFP(io));
3330 if (SvROK(arg) && SvTYPE(SvRV(arg)) == SVt_PVCV) {
3332 SvREFCNT_inc_simple_void_NN(filter_sub);
3335 filter_state = SP[i];
3336 SvREFCNT_inc_simple_void(filter_state);
3340 if (!tryrsfp && (filter_cache || filter_sub)) {
3341 tryrsfp = PerlIO_open(BIT_BUCKET,
3356 filter_has_file = 0;
3358 SvREFCNT_dec(filter_cache);
3359 filter_cache = NULL;
3362 SvREFCNT_dec(filter_state);
3363 filter_state = NULL;
3366 SvREFCNT_dec(filter_sub);
3371 if (!path_is_absolute(name)
3372 #ifdef MACOS_TRADITIONAL
3373 /* We consider paths of the form :a:b ambiguous and interpret them first
3374 as global then as local
3376 || (*name == ':' && name[1] != ':' && strchr(name+2, ':'))
3383 dir = SvPV_const(dirsv, dirlen);
3389 #ifdef MACOS_TRADITIONAL
3393 MacPerl_CanonDir(name, buf2, 1);
3394 Perl_sv_setpvf(aTHX_ namesv, "%s%s", MacPerl_CanonDir(dir, buf1, 0), buf2+(buf2[0] == ':'));
3398 if ((unixdir = tounixpath(dir, NULL)) == NULL)
3400 sv_setpv(namesv, unixdir);
3401 sv_catpv(namesv, unixname);
3403 # ifdef __SYMBIAN32__
3404 if (PL_origfilename[0] &&
3405 PL_origfilename[1] == ':' &&
3406 !(dir[0] && dir[1] == ':'))
3407 Perl_sv_setpvf(aTHX_ namesv,
3412 Perl_sv_setpvf(aTHX_ namesv,
3416 /* The equivalent of
3417 Perl_sv_setpvf(aTHX_ namesv, "%s/%s", dir, name);
3418 but without the need to parse the format string, or
3419 call strlen on either pointer, and with the correct
3420 allocation up front. */
3422 char *tmp = SvGROW(namesv, dirlen + len + 2);
3424 memcpy(tmp, dir, dirlen);
3427 /* name came from an SV, so it will have a '\0' at the
3428 end that we can copy as part of this memcpy(). */
3429 memcpy(tmp, name, len + 1);
3431 SvCUR_set(namesv, dirlen + len + 1);
3433 /* Don't even actually have to turn SvPOK_on() as we
3434 access it directly with SvPVX() below. */
3439 TAINT_PROPER("require");
3440 tryname = SvPVX_const(namesv);
3441 tryrsfp = doopen_pm(tryname, SvCUR(namesv));
3443 if (tryname[0] == '.' && tryname[1] == '/')
3447 else if (errno == EMFILE)
3448 /* no point in trying other paths if out of handles */
3455 SAVECOPFILE_FREE(&PL_compiling);
3456 CopFILE_set(&PL_compiling, tryrsfp ? tryname : name);
3457 SvREFCNT_dec(namesv);
3459 if (PL_op->op_type == OP_REQUIRE) {
3460 const char *msgstr = name;
3461 if(errno == EMFILE) {
3463 = sv_2mortal(Perl_newSVpvf(aTHX_ "%s: %s", msgstr,
3465 msgstr = SvPV_nolen_const(msg);
3467 if (namesv) { /* did we lookup @INC? */
3468 AV * const ar = GvAVn(PL_incgv);
3470 SV * const msg = sv_2mortal(Perl_newSVpvf(aTHX_
3471 "%s in @INC%s%s (@INC contains:",
3473 (instr(msgstr, ".h ")
3474 ? " (change .h to .ph maybe?)" : ""),
3475 (instr(msgstr, ".ph ")
3476 ? " (did you run h2ph?)" : "")
3479 for (i = 0; i <= AvFILL(ar); i++) {
3480 sv_catpvs(msg, " ");
3481 sv_catsv(msg, *av_fetch(ar, i, TRUE));
3483 sv_catpvs(msg, ")");
3484 msgstr = SvPV_nolen_const(msg);
3487 DIE(aTHX_ "Can't locate %s", msgstr);
3493 SETERRNO(0, SS_NORMAL);
3495 /* Assume success here to prevent recursive requirement. */
3496 /* name is never assigned to again, so len is still strlen(name) */
3497 /* Check whether a hook in @INC has already filled %INC */
3499 (void)hv_store(GvHVn(PL_incgv),
3500 unixname, unixlen, newSVpv(CopFILE(&PL_compiling),0),0);
3502 SV** const svp = hv_fetch(GvHVn(PL_incgv), unixname, unixlen, 0);
3504 (void)hv_store(GvHVn(PL_incgv),
3505 unixname, unixlen, SvREFCNT_inc_simple(hook_sv), 0 );
3510 lex_start(NULL, tryrsfp, TRUE);
3514 SAVECOMPILEWARNINGS();
3515 if (PL_dowarn & G_WARN_ALL_ON)
3516 PL_compiling.cop_warnings = pWARN_ALL ;
3517 else if (PL_dowarn & G_WARN_ALL_OFF)
3518 PL_compiling.cop_warnings = pWARN_NONE ;
3520 PL_compiling.cop_warnings = pWARN_STD ;
3522 if (filter_sub || filter_cache) {
3523 SV * const datasv = filter_add(S_run_user_filter, NULL);
3524 IoLINES(datasv) = filter_has_file;
3525 IoTOP_GV(datasv) = (GV *)filter_state;
3526 IoBOTTOM_GV(datasv) = (GV *)filter_sub;
3527 IoFMT_GV(datasv) = (GV *)filter_cache;
3530 /* switch to eval mode */
3531 PUSHBLOCK(cx, CXt_EVAL, SP);
3532 PUSHEVAL(cx, name, NULL);
3533 cx->blk_eval.retop = PL_op->op_next;
3535 SAVECOPLINE(&PL_compiling);
3536 CopLINE_set(&PL_compiling, 0);
3540 /* Store and reset encoding. */
3541 encoding = PL_encoding;
3544 if (doeval(gimme, NULL, NULL, PL_curcop->cop_seq))
3545 op = DOCATCH(PL_eval_start);
3547 op = PL_op->op_next;
3549 /* Restore encoding. */
3550 PL_encoding = encoding;
3558 register PERL_CONTEXT *cx;
3560 const I32 gimme = GIMME_V;
3561 const I32 was = PL_sub_generation;
3562 char tbuf[TYPE_DIGITS(long) + 12];
3563 char *tmpbuf = tbuf;
3569 HV *saved_hh = NULL;
3570 const char * const fakestr = "_<(eval )";
3571 const int fakelen = 9 + 1;
3573 if (PL_op->op_private & OPpEVAL_HAS_HH) {
3574 saved_hh = (HV*) SvREFCNT_inc(POPs);
3578 TAINT_IF(SvTAINTED(sv));
3579 TAINT_PROPER("eval");
3582 lex_start(sv, NULL, FALSE);
3585 /* switch to eval mode */
3587 if (PERLDB_NAMEEVAL && CopLINE(PL_curcop)) {
3588 SV * const temp_sv = sv_newmortal();
3589 Perl_sv_setpvf(aTHX_ temp_sv, "_<(eval %lu)[%s:%"IVdf"]",
3590 (unsigned long)++PL_evalseq,
3591 CopFILE(PL_curcop), (IV)CopLINE(PL_curcop));
3592 tmpbuf = SvPVX(temp_sv);
3593 len = SvCUR(temp_sv);
3596 len = my_snprintf(tmpbuf, sizeof(tbuf), "_<(eval %lu)", (unsigned long)++PL_evalseq);
3597 SAVECOPFILE_FREE(&PL_compiling);
3598 CopFILE_set(&PL_compiling, tmpbuf+2);
3599 SAVECOPLINE(&PL_compiling);
3600 CopLINE_set(&PL_compiling, 1);
3601 /* XXX For C<eval "...">s within BEGIN {} blocks, this ends up
3602 deleting the eval's FILEGV from the stash before gv_check() runs
3603 (i.e. before run-time proper). To work around the coredump that
3604 ensues, we always turn GvMULTI_on for any globals that were
3605 introduced within evals. See force_ident(). GSAR 96-10-12 */
3606 safestr = savepvn(tmpbuf, len);
3607 SAVEDELETE(PL_defstash, safestr, len);
3609 PL_hints = PL_op->op_targ;
3611 GvHV(PL_hintgv) = saved_hh;
3612 SAVECOMPILEWARNINGS();
3613 PL_compiling.cop_warnings = DUP_WARNINGS(PL_curcop->cop_warnings);
3614 if (PL_compiling.cop_hints_hash) {
3615 Perl_refcounted_he_free(aTHX_ PL_compiling.cop_hints_hash);
3617 PL_compiling.cop_hints_hash = PL_curcop->cop_hints_hash;
3618 if (PL_compiling.cop_hints_hash) {
3620 PL_compiling.cop_hints_hash->refcounted_he_refcnt++;
3621 HINTS_REFCNT_UNLOCK;
3623 /* special case: an eval '' executed within the DB package gets lexically
3624 * placed in the first non-DB CV rather than the current CV - this
3625 * allows the debugger to execute code, find lexicals etc, in the
3626 * scope of the code being debugged. Passing &seq gets find_runcv
3627 * to do the dirty work for us */
3628 runcv = find_runcv(&seq);
3630 PUSHBLOCK(cx, (CXt_EVAL|CXp_REAL), SP);
3631 PUSHEVAL(cx, 0, NULL);
3632 cx->blk_eval.retop = PL_op->op_next;
3634 /* prepare to compile string */
3636 if (PERLDB_LINE && PL_curstash != PL_debstash)
3637 save_lines(CopFILEAV(&PL_compiling), PL_parser->linestr);
3639 ok = doeval(gimme, NULL, runcv, seq);
3640 if (PERLDB_INTER && was != (I32)PL_sub_generation /* Some subs defined here. */
3642 /* Copy in anything fake and short. */
3643 my_strlcpy(safestr, fakestr, fakelen);
3645 return ok ? DOCATCH(PL_eval_start) : PL_op->op_next;
3655 register PERL_CONTEXT *cx;
3657 const U8 save_flags = PL_op -> op_flags;
3662 retop = cx->blk_eval.retop;
3665 if (gimme == G_VOID)
3667 else if (gimme == G_SCALAR) {
3670 if (SvFLAGS(TOPs) & SVs_TEMP)
3673 *MARK = sv_mortalcopy(TOPs);
3677 *MARK = &PL_sv_undef;
3682 /* in case LEAVE wipes old return values */
3683 for (mark = newsp + 1; mark <= SP; mark++) {
3684 if (!(SvFLAGS(*mark) & SVs_TEMP)) {
3685 *mark = sv_mortalcopy(*mark);
3686 TAINT_NOT; /* Each item is independent */
3690 PL_curpm = newpm; /* Don't pop $1 et al till now */
3693 assert(CvDEPTH(PL_compcv) == 1);
3695 CvDEPTH(PL_compcv) = 0;
3698 if (optype == OP_REQUIRE &&
3699 !(gimme == G_SCALAR ? SvTRUE(*SP) : SP > newsp))
3701 /* Unassume the success we assumed earlier. */
3702 SV * const nsv = cx->blk_eval.old_namesv;
3703 (void)hv_delete(GvHVn(PL_incgv), SvPVX_const(nsv), SvCUR(nsv), G_DISCARD);
3704 retop = Perl_die(aTHX_ "%"SVf" did not return a true value", SVfARG(nsv));
3705 /* die_where() did LEAVE, or we won't be here */
3709 if (!(save_flags & OPf_SPECIAL))
3710 sv_setpvn(ERRSV,"",0);
3716 /* Common code for Perl_call_sv and Perl_fold_constants, put here to keep it
3717 close to the related Perl_create_eval_scope. */
3719 Perl_delete_eval_scope(pTHX)
3724 register PERL_CONTEXT *cx;
3731 PERL_UNUSED_VAR(newsp);
3732 PERL_UNUSED_VAR(gimme);
3733 PERL_UNUSED_VAR(optype);
3736 /* Common-ish code salvaged from Perl_call_sv and pp_entertry, because it was
3737 also needed by Perl_fold_constants. */
3739 Perl_create_eval_scope(pTHX_ U32 flags)
3742 const I32 gimme = GIMME_V;
3747 PUSHBLOCK(cx, (CXt_EVAL|CXp_TRYBLOCK), PL_stack_sp);
3750 PL_in_eval = EVAL_INEVAL;
3751 if (flags & G_KEEPERR)
3752 PL_in_eval |= EVAL_KEEPERR;
3754 sv_setpvn(ERRSV,"",0);
3755 if (flags & G_FAKINGEVAL) {
3756 PL_eval_root = PL_op; /* Only needed so that goto works right. */
3764 PERL_CONTEXT * const cx = create_eval_scope(0);
3765 cx->blk_eval.retop = cLOGOP->op_other->op_next;
3766 return DOCATCH(PL_op->op_next);
3775 register PERL_CONTEXT *cx;
3780 PERL_UNUSED_VAR(optype);
3783 if (gimme == G_VOID)
3785 else if (gimme == G_SCALAR) {
3789 if (SvFLAGS(TOPs) & (SVs_PADTMP|SVs_TEMP))
3792 *MARK = sv_mortalcopy(TOPs);
3796 *MARK = &PL_sv_undef;
3801 /* in case LEAVE wipes old return values */
3803 for (mark = newsp + 1; mark <= SP; mark++) {
3804 if (!(SvFLAGS(*mark) & (SVs_PADTMP|SVs_TEMP))) {
3805 *mark = sv_mortalcopy(*mark);
3806 TAINT_NOT; /* Each item is independent */
3810 PL_curpm = newpm; /* Don't pop $1 et al till now */
3813 sv_setpvn(ERRSV,"",0);
3820 register PERL_CONTEXT *cx;
3821 const I32 gimme = GIMME_V;
3826 if (PL_op->op_targ == 0) {
3827 SV ** const defsv_p = &GvSV(PL_defgv);
3828 *defsv_p = newSVsv(POPs);
3829 SAVECLEARSV(*defsv_p);
3832 sv_setsv(PAD_SV(PL_op->op_targ), POPs);
3834 PUSHBLOCK(cx, CXt_GIVEN, SP);
3843 register PERL_CONTEXT *cx;
3847 PERL_UNUSED_CONTEXT;
3850 assert(CxTYPE(cx) == CXt_GIVEN);
3855 PL_curpm = newpm; /* pop $1 et al */
3862 /* Helper routines used by pp_smartmatch */
3864 S_make_matcher(pTHX_ REGEXP *re)
3867 PMOP *matcher = (PMOP *) newPMOP(OP_MATCH, OPf_WANT_SCALAR | OPf_STACKED);
3868 PM_SETRE(matcher, ReREFCNT_inc(re));
3870 SAVEFREEOP((OP *) matcher);
3877 S_matcher_matches_sv(pTHX_ PMOP *matcher, SV *sv)
3882 PL_op = (OP *) matcher;
3887 return (SvTRUEx(POPs));
3891 S_destroy_matcher(pTHX_ PMOP *matcher)
3894 PERL_UNUSED_ARG(matcher);
3899 /* Do a smart match */
3902 return do_smartmatch(NULL, NULL);
3905 /* This version of do_smartmatch() implements the
3906 * table of smart matches that is found in perlsyn.
3909 S_do_smartmatch(pTHX_ HV *seen_this, HV *seen_other)
3914 SV *e = TOPs; /* e is for 'expression' */
3915 SV *d = TOPm1s; /* d is for 'default', as in PL_defgv */
3916 SV *This, *Other; /* 'This' (and Other to match) to play with C++ */
3917 REGEXP *this_regex, *other_regex;
3919 # define NOT_EMPTY_PROTO(cv) (!SvPOK(cv) || SvCUR(cv) == 0)
3921 # define SM_REF(type) ( \
3922 (SvROK(d) && (SvTYPE(This = SvRV(d)) == SVt_##type) && (Other = e)) \
3923 || (SvROK(e) && (SvTYPE(This = SvRV(e)) == SVt_##type) && (Other = d)))
3925 # define SM_CV_NEP /* Find a code ref without an empty prototype */ \
3926 ((SvROK(d) && (SvTYPE(This = SvRV(d)) == SVt_PVCV) \
3927 && NOT_EMPTY_PROTO(This) && (Other = e)) \
3928 || (SvROK(e) && (SvTYPE(This = SvRV(e)) == SVt_PVCV) \
3929 && NOT_EMPTY_PROTO(This) && (Other = d)))
3931 # define SM_REGEX ( \
3932 (SvROK(d) && (SvTYPE(This = SvRV(d)) == SVt_REGEXP) \
3933 && (this_regex = (REGEXP*) This) \
3936 (SvROK(e) && (SvTYPE(This = SvRV(e)) == SVt_REGEXP) \
3937 && (this_regex = (REGEXP*) This) \
3941 # define SM_OTHER_REF(type) \
3942 (SvROK(Other) && SvTYPE(SvRV(Other)) == SVt_##type)
3944 # define SM_OTHER_REGEX (SvROK(Other) \
3945 && (SvTYPE(SvRV(Other)) == SVt_REGEXP) \
3946 && (other_regex = (REGEXP*) SvRV(Other)))
3949 # define SM_SEEN_THIS(sv) hv_exists_ent(seen_this, \
3950 sv_2mortal(newSViv(PTR2IV(sv))), 0)
3952 # define SM_SEEN_OTHER(sv) hv_exists_ent(seen_other, \
3953 sv_2mortal(newSViv(PTR2IV(sv))), 0)
3955 tryAMAGICbinSET(smart, 0);
3957 SP -= 2; /* Pop the values */
3959 /* Take care only to invoke mg_get() once for each argument.
3960 * Currently we do this by copying the SV if it's magical. */
3963 d = sv_mortalcopy(d);
3970 e = sv_mortalcopy(e);
3975 if ( SM_OTHER_REF(PVCV) && NOT_EMPTY_PROTO(SvRV(Other)) )
3977 if (This == SvRV(Other))
3988 c = call_sv(This, G_SCALAR);
3992 else if (SvTEMP(TOPs))
3993 SvREFCNT_inc_void(TOPs);
3998 else if (SM_REF(PVHV)) {
3999 if (SM_OTHER_REF(PVHV)) {
4000 /* Check that the key-sets are identical */
4002 HV *other_hv = (HV *) SvRV(Other);
4004 bool other_tied = FALSE;
4005 U32 this_key_count = 0,
4006 other_key_count = 0;
4008 /* Tied hashes don't know how many keys they have. */
4009 if (SvTIED_mg(This, PERL_MAGIC_tied)) {
4012 else if (SvTIED_mg((SV *) other_hv, PERL_MAGIC_tied)) {
4013 HV * const temp = other_hv;
4014 other_hv = (HV *) This;
4018 if (SvTIED_mg((SV *) other_hv, PERL_MAGIC_tied))
4021 if (!tied && HvUSEDKEYS((HV *) This) != HvUSEDKEYS(other_hv))
4024 /* The hashes have the same number of keys, so it suffices
4025 to check that one is a subset of the other. */
4026 (void) hv_iterinit((HV *) This);
4027 while ( (he = hv_iternext((HV *) This)) ) {
4029 char * const key = hv_iterkey(he, &key_len);
4033 if(!hv_exists(other_hv, key, key_len)) {
4034 (void) hv_iterinit((HV *) This); /* reset iterator */
4040 (void) hv_iterinit(other_hv);
4041 while ( hv_iternext(other_hv) )
4045 other_key_count = HvUSEDKEYS(other_hv);
4047 if (this_key_count != other_key_count)
4052 else if (SM_OTHER_REF(PVAV)) {
4053 AV * const other_av = (AV *) SvRV(Other);
4054 const I32 other_len = av_len(other_av) + 1;
4057 for (i = 0; i < other_len; ++i) {
4058 SV ** const svp = av_fetch(other_av, i, FALSE);
4062 if (svp) { /* ??? When can this not happen? */
4063 key = SvPV(*svp, key_len);
4064 if (hv_exists((HV *) This, key, key_len))
4070 else if (SM_OTHER_REGEX) {
4071 PMOP * const matcher = make_matcher(other_regex);
4074 (void) hv_iterinit((HV *) This);
4075 while ( (he = hv_iternext((HV *) This)) ) {
4076 if (matcher_matches_sv(matcher, hv_iterkeysv(he))) {
4077 (void) hv_iterinit((HV *) This);
4078 destroy_matcher(matcher);
4082 destroy_matcher(matcher);
4086 if (hv_exists_ent((HV *) This, Other, 0))
4092 else if (SM_REF(PVAV)) {
4093 if (SM_OTHER_REF(PVAV)) {
4094 AV *other_av = (AV *) SvRV(Other);
4095 if (av_len((AV *) This) != av_len(other_av))
4099 const I32 other_len = av_len(other_av);
4101 if (NULL == seen_this) {
4102 seen_this = newHV();
4103 (void) sv_2mortal((SV *) seen_this);
4105 if (NULL == seen_other) {
4106 seen_this = newHV();
4107 (void) sv_2mortal((SV *) seen_other);
4109 for(i = 0; i <= other_len; ++i) {
4110 SV * const * const this_elem = av_fetch((AV *)This, i, FALSE);
4111 SV * const * const other_elem = av_fetch(other_av, i, FALSE);
4113 if (!this_elem || !other_elem) {
4114 if (this_elem || other_elem)
4117 else if (SM_SEEN_THIS(*this_elem)
4118 || SM_SEEN_OTHER(*other_elem))
4120 if (*this_elem != *other_elem)
4124 (void)hv_store_ent(seen_this,
4125 sv_2mortal(newSViv(PTR2IV(*this_elem))),
4127 (void)hv_store_ent(seen_other,
4128 sv_2mortal(newSViv(PTR2IV(*other_elem))),
4134 (void) do_smartmatch(seen_this, seen_other);
4144 else if (SM_OTHER_REGEX) {
4145 PMOP * const matcher = make_matcher(other_regex);
4146 const I32 this_len = av_len((AV *) This);
4149 for(i = 0; i <= this_len; ++i) {
4150 SV * const * const svp = av_fetch((AV *)This, i, FALSE);
4151 if (svp && matcher_matches_sv(matcher, *svp)) {
4152 destroy_matcher(matcher);
4156 destroy_matcher(matcher);
4159 else if (SvIOK(Other) || SvNOK(Other)) {
4162 for(i = 0; i <= AvFILL((AV *) This); ++i) {
4163 SV * const * const svp = av_fetch((AV *)This, i, FALSE);
4170 if (CopHINTS_get(PL_curcop) & HINT_INTEGER)
4180 else if (SvPOK(Other)) {
4181 const I32 this_len = av_len((AV *) This);
4184 for(i = 0; i <= this_len; ++i) {
4185 SV * const * const svp = av_fetch((AV *)This, i, FALSE);
4200 else if (!SvOK(d) || !SvOK(e)) {
4201 if (!SvOK(d) && !SvOK(e))
4206 else if (SM_REGEX) {
4207 PMOP * const matcher = make_matcher(this_regex);
4210 PUSHs(matcher_matches_sv(matcher, Other)
4213 destroy_matcher(matcher);
4216 else if (SM_REF(PVCV)) {
4218 /* This must be a null-prototyped sub, because we
4219 already checked for the other kind. */
4225 c = call_sv(This, G_SCALAR);
4228 PUSHs(&PL_sv_undef);
4229 else if (SvTEMP(TOPs))
4230 SvREFCNT_inc_void(TOPs);
4232 if (SM_OTHER_REF(PVCV)) {
4233 /* This one has to be null-proto'd too.
4234 Call both of 'em, and compare the results */
4236 c = call_sv(SvRV(Other), G_SCALAR);
4239 PUSHs(&PL_sv_undef);
4240 else if (SvTEMP(TOPs))
4241 SvREFCNT_inc_void(TOPs);
4252 else if ( ((SvIOK(d) || SvNOK(d)) && (This = d) && (Other = e))
4253 || ((SvIOK(e) || SvNOK(e)) && (This = e) && (Other = d)) )
4255 if (SvPOK(Other) && !looks_like_number(Other)) {
4256 /* String comparison */
4261 /* Otherwise, numeric comparison */
4264 if (CopHINTS_get(PL_curcop) & HINT_INTEGER)
4275 /* As a last resort, use string comparison */
4284 register PERL_CONTEXT *cx;
4285 const I32 gimme = GIMME_V;
4287 /* This is essentially an optimization: if the match
4288 fails, we don't want to push a context and then
4289 pop it again right away, so we skip straight
4290 to the op that follows the leavewhen.
4292 if ((0 == (PL_op->op_flags & OPf_SPECIAL)) && !SvTRUEx(POPs))
4293 return cLOGOP->op_other->op_next;
4298 PUSHBLOCK(cx, CXt_WHEN, SP);
4307 register PERL_CONTEXT *cx;
4313 assert(CxTYPE(cx) == CXt_WHEN);
4318 PL_curpm = newpm; /* pop $1 et al */
4328 register PERL_CONTEXT *cx;
4331 cxix = dopoptowhen(cxstack_ix);
4333 DIE(aTHX_ "Can't \"continue\" outside a when block");
4334 if (cxix < cxstack_ix)
4337 /* clear off anything above the scope we're re-entering */
4338 inner = PL_scopestack_ix;
4340 if (PL_scopestack_ix < inner)
4341 leave_scope(PL_scopestack[PL_scopestack_ix]);
4342 PL_curcop = cx->blk_oldcop;
4343 return cx->blk_givwhen.leave_op;
4350 register PERL_CONTEXT *cx;
4353 cxix = dopoptogiven(cxstack_ix);
4355 if (PL_op->op_flags & OPf_SPECIAL)
4356 DIE(aTHX_ "Can't use when() outside a topicalizer");
4358 DIE(aTHX_ "Can't \"break\" outside a given block");
4360 if (CxFOREACH(&cxstack[cxix]) && (0 == (PL_op->op_flags & OPf_SPECIAL)))
4361 DIE(aTHX_ "Can't \"break\" in a loop topicalizer");
4363 if (cxix < cxstack_ix)
4366 /* clear off anything above the scope we're re-entering */
4367 inner = PL_scopestack_ix;
4369 if (PL_scopestack_ix < inner)
4370 leave_scope(PL_scopestack[PL_scopestack_ix]);
4371 PL_curcop = cx->blk_oldcop;
4374 return CX_LOOP_NEXTOP_GET(cx);
4376 return cx->blk_givwhen.leave_op;
4380 S_doparseform(pTHX_ SV *sv)
4383 register char *s = SvPV_force(sv, len);
4384 register char * const send = s + len;
4385 register char *base = NULL;
4386 register I32 skipspaces = 0;
4387 bool noblank = FALSE;
4388 bool repeat = FALSE;
4389 bool postspace = FALSE;
4395 bool unchopnum = FALSE;
4396 int maxops = 12; /* FF_LINEMARK + FF_END + 10 (\0 without preceding \n) */
4399 Perl_croak(aTHX_ "Null picture in formline");
4401 /* estimate the buffer size needed */
4402 for (base = s; s <= send; s++) {
4403 if (*s == '\n' || *s == '@' || *s == '^')
4409 Newx(fops, maxops, U32);
4414 *fpc++ = FF_LINEMARK;
4415 noblank = repeat = FALSE;
4433 case ' ': case '\t':
4440 } /* else FALL THROUGH */
4448 *fpc++ = FF_LITERAL;
4456 *fpc++ = (U16)skipspaces;
4460 *fpc++ = FF_NEWLINE;
4464 arg = fpc - linepc + 1;
4471 *fpc++ = FF_LINEMARK;
4472 noblank = repeat = FALSE;
4481 ischop = s[-1] == '^';
4487 arg = (s - base) - 1;
4489 *fpc++ = FF_LITERAL;
4497 *fpc++ = 2; /* skip the @* or ^* */
4499 *fpc++ = FF_LINESNGL;
4502 *fpc++ = FF_LINEGLOB;
4504 else if (*s == '#' || (*s == '.' && s[1] == '#')) {
4505 arg = ischop ? 512 : 0;
4510 const char * const f = ++s;
4513 arg |= 256 + (s - f);
4515 *fpc++ = s - base; /* fieldsize for FETCH */
4516 *fpc++ = FF_DECIMAL;
4518 unchopnum |= ! ischop;
4520 else if (*s == '0' && s[1] == '#') { /* Zero padded decimals */
4521 arg = ischop ? 512 : 0;
4523 s++; /* skip the '0' first */
4527 const char * const f = ++s;
4530 arg |= 256 + (s - f);
4532 *fpc++ = s - base; /* fieldsize for FETCH */
4533 *fpc++ = FF_0DECIMAL;
4535 unchopnum |= ! ischop;
4539 bool ismore = FALSE;
4542 while (*++s == '>') ;
4543 prespace = FF_SPACE;
4545 else if (*s == '|') {
4546 while (*++s == '|') ;
4547 prespace = FF_HALFSPACE;
4552 while (*++s == '<') ;
4555 if (*s == '.' && s[1] == '.' && s[2] == '.') {
4559 *fpc++ = s - base; /* fieldsize for FETCH */
4561 *fpc++ = ischop ? FF_CHECKCHOP : FF_CHECKNL;
4564 *fpc++ = (U16)prespace;
4578 assert (fpc <= fops + maxops); /* ensure our buffer estimate was valid */
4580 { /* need to jump to the next word */
4582 z = WORD_ALIGN - SvCUR(sv) % WORD_ALIGN;
4583 SvGROW(sv, SvCUR(sv) + z + arg * sizeof(U32) + 4);
4584 s = SvPVX(sv) + SvCUR(sv) + z;
4586 Copy(fops, s, arg, U32);
4588 sv_magic(sv, NULL, PERL_MAGIC_fm, NULL, 0);
4591 if (unchopnum && repeat)
4592 DIE(aTHX_ "Repeated format line will never terminate (~~ and @#)");
4598 S_num_overflow(NV value, I32 fldsize, I32 frcsize)
4600 /* Can value be printed in fldsize chars, using %*.*f ? */
4604 int intsize = fldsize - (value < 0 ? 1 : 0);
4611 while (intsize--) pwr *= 10.0;
4612 while (frcsize--) eps /= 10.0;
4615 if (value + eps >= pwr)
4618 if (value - eps <= -pwr)
4625 S_run_user_filter(pTHX_ int idx, SV *buf_sv, int maxlen)
4628 SV * const datasv = FILTER_DATA(idx);
4629 const int filter_has_file = IoLINES(datasv);
4630 SV * const filter_state = (SV *)IoTOP_GV(datasv);
4631 SV * const filter_sub = (SV *)IoBOTTOM_GV(datasv);
4635 const char *got_p = NULL;
4636 const char *prune_from = NULL;
4637 bool read_from_cache = FALSE;
4640 assert(maxlen >= 0);
4643 /* I was having segfault trouble under Linux 2.2.5 after a
4644 parse error occured. (Had to hack around it with a test
4645 for PL_parser->error_count == 0.) Solaris doesn't segfault --
4646 not sure where the trouble is yet. XXX */
4648 if (IoFMT_GV(datasv)) {
4649 SV *const cache = (SV *)IoFMT_GV(datasv);
4652 const char *cache_p = SvPV(cache, cache_len);
4656 /* Running in block mode and we have some cached data already.
4658 if (cache_len >= umaxlen) {
4659 /* In fact, so much data we don't even need to call
4664 const char *const first_nl =
4665 (const char *)memchr(cache_p, '\n', cache_len);
4667 take = first_nl + 1 - cache_p;
4671 sv_catpvn(buf_sv, cache_p, take);
4672 sv_chop(cache, cache_p + take);
4673 /* Definately not EOF */
4677 sv_catsv(buf_sv, cache);
4679 umaxlen -= cache_len;
4682 read_from_cache = TRUE;
4686 /* Filter API says that the filter appends to the contents of the buffer.
4687 Usually the buffer is "", so the details don't matter. But if it's not,
4688 then clearly what it contains is already filtered by this filter, so we
4689 don't want to pass it in a second time.
4690 I'm going to use a mortal in case the upstream filter croaks. */
4691 upstream = ((SvOK(buf_sv) && sv_len(buf_sv)) || SvGMAGICAL(buf_sv))
4692 ? sv_newmortal() : buf_sv;
4693 SvUPGRADE(upstream, SVt_PV);
4695 if (filter_has_file) {
4696 status = FILTER_READ(idx+1, upstream, 0);
4699 if (filter_sub && status >= 0) {
4712 PUSHs(filter_state);
4715 count = call_sv(filter_sub, G_SCALAR);
4730 if(SvOK(upstream)) {
4731 got_p = SvPV(upstream, got_len);
4733 if (got_len > umaxlen) {
4734 prune_from = got_p + umaxlen;
4737 const char *const first_nl =
4738 (const char *)memchr(got_p, '\n', got_len);
4739 if (first_nl && first_nl + 1 < got_p + got_len) {
4740 /* There's a second line here... */
4741 prune_from = first_nl + 1;
4746 /* Oh. Too long. Stuff some in our cache. */
4747 STRLEN cached_len = got_p + got_len - prune_from;
4748 SV *cache = (SV *)IoFMT_GV(datasv);
4751 IoFMT_GV(datasv) = (GV*) (cache = newSV(got_len - umaxlen));
4752 } else if (SvOK(cache)) {
4753 /* Cache should be empty. */
4754 assert(!SvCUR(cache));
4757 sv_setpvn(cache, prune_from, cached_len);
4758 /* If you ask for block mode, you may well split UTF-8 characters.
4759 "If it breaks, you get to keep both parts"
4760 (Your code is broken if you don't put them back together again
4761 before something notices.) */
4762 if (SvUTF8(upstream)) {
4765 SvCUR_set(upstream, got_len - cached_len);
4766 /* Can't yet be EOF */
4771 /* If they are at EOF but buf_sv has something in it, then they may never
4772 have touched the SV upstream, so it may be undefined. If we naively
4773 concatenate it then we get a warning about use of uninitialised value.
4775 if (upstream != buf_sv && (SvOK(upstream) || SvGMAGICAL(upstream))) {
4776 sv_catsv(buf_sv, upstream);
4780 IoLINES(datasv) = 0;
4781 SvREFCNT_dec(IoFMT_GV(datasv));
4783 SvREFCNT_dec(filter_state);
4784 IoTOP_GV(datasv) = NULL;
4787 SvREFCNT_dec(filter_sub);
4788 IoBOTTOM_GV(datasv) = NULL;
4790 filter_del(S_run_user_filter);
4792 if (status == 0 && read_from_cache) {
4793 /* If we read some data from the cache (and by getting here it implies
4794 that we emptied the cache) then we aren't yet at EOF, and mustn't
4795 report that to our caller. */
4801 /* perhaps someone can come up with a better name for
4802 this? it is not really "absolute", per se ... */
4804 S_path_is_absolute(const char *name)
4806 if (PERL_FILE_IS_ABSOLUTE(name)
4807 #ifdef MACOS_TRADITIONAL
4810 || (*name == '.' && (name[1] == '/' ||
4811 (name[1] == '.' && name[2] == '/')))
4823 * c-indentation-style: bsd
4825 * indent-tabs-mode: t
4828 * ex: set ts=8 sts=4 sw=4 noet: