3 * Copyright (c) 1991-1997, Larry Wall
5 * You may distribute under the terms of either the GNU General Public
6 * License or the Artistic License, as specified in the README file.
11 * Now far ahead the Road has gone,
12 * And I must follow, if I can,
13 * Pursuing it with eager feet,
14 * Until it joins some larger way
15 * Where many paths and errands meet.
16 * And whither then? I cannot say.
23 #define WORD_ALIGN sizeof(U16)
26 #define DOCATCH(o) ((CATCH_GET == TRUE) ? docatch(o) : (o))
29 #define CALLOP this->*PL_op
32 static OP *docatch _((OP *o));
33 static OP *dofindlabel _((OP *o, char *label, OP **opstack, OP **oplimit));
34 static void doparseform _((SV *sv));
35 static I32 dopoptoeval _((I32 startingblock));
36 static I32 dopoptolabel _((char *label));
37 static I32 dopoptoloop _((I32 startingblock));
38 static I32 dopoptosub _((I32 startingblock));
39 static I32 dopoptosub_at _((PERL_CONTEXT *cxstk, I32 startingblock));
40 static void save_lines _((AV *array, SV *sv));
41 static I32 sortcv _((SV *a, SV *b));
42 static void qsortsv _((SV **array, size_t num_elts, I32 (*fun)(SV *a, SV *b)));
43 static OP *doeval _((int gimme, OP** startop));
52 cxix = dopoptosub(cxstack_ix);
56 switch (cxstack[cxix].blk_gimme) {
73 /* XXXX Should store the old value to allow for tie/overload - and
74 restore in regcomp, where marked with XXXX. */
82 register PMOP *pm = (PMOP*)cLOGOP->op_other;
86 MAGIC *mg = Null(MAGIC*);
90 SV *sv = SvRV(tmpstr);
92 mg = mg_find(sv, 'r');
95 regexp *re = (regexp *)mg->mg_obj;
96 ReREFCNT_dec(pm->op_pmregexp);
97 pm->op_pmregexp = ReREFCNT_inc(re);
100 t = SvPV(tmpstr, len);
102 /* Check against the last compiled regexp. */
103 if (!pm->op_pmregexp || !pm->op_pmregexp->precomp ||
104 pm->op_pmregexp->prelen != len ||
105 memNE(pm->op_pmregexp->precomp, t, len))
107 if (pm->op_pmregexp) {
108 ReREFCNT_dec(pm->op_pmregexp);
109 pm->op_pmregexp = Null(REGEXP*); /* crucial if regcomp aborts */
111 if (PL_op->op_flags & OPf_SPECIAL)
112 PL_reginterp_cnt = I32_MAX; /* Mark as safe. */
114 pm->op_pmflags = pm->op_pmpermflags; /* reset case sensitivity */
115 pm->op_pmregexp = CALLREGCOMP(t, t + len, pm);
116 PL_reginterp_cnt = 0; /* XXXX Be extra paranoid - needed
117 inside tie/overload accessors. */
121 #ifndef INCOMPLETE_TAINTS
124 pm->op_pmdynflags |= PMdf_TAINTED;
126 pm->op_pmdynflags &= ~PMdf_TAINTED;
130 if (!pm->op_pmregexp->prelen && PL_curpm)
132 else if (strEQ("\\s+", pm->op_pmregexp->precomp))
133 pm->op_pmflags |= PMf_WHITE;
135 if (pm->op_pmflags & PMf_KEEP) {
136 pm->op_private &= ~OPpRUNTIME; /* no point compiling again */
137 cLOGOP->op_first->op_next = PL_op->op_next;
145 register PMOP *pm = (PMOP*) cLOGOP->op_other;
146 register PERL_CONTEXT *cx = &cxstack[cxstack_ix];
147 register SV *dstr = cx->sb_dstr;
148 register char *s = cx->sb_s;
149 register char *m = cx->sb_m;
150 char *orig = cx->sb_orig;
151 register REGEXP *rx = cx->sb_rx;
153 rxres_restore(&cx->sb_rxres, rx);
155 if (cx->sb_iters++) {
156 if (cx->sb_iters > cx->sb_maxiters)
157 DIE("Substitution loop");
159 if (!(cx->sb_rxtainted & 2) && SvTAINTED(TOPs))
160 cx->sb_rxtainted |= 2;
161 sv_catsv(dstr, POPs);
164 if (cx->sb_once || !CALLREGEXEC(rx, s, cx->sb_strend, orig,
165 s == m, Nullsv, NULL,
166 cx->sb_safebase ? 0 : REXEC_COPY_STR))
168 SV *targ = cx->sb_targ;
169 sv_catpvn(dstr, s, cx->sb_strend - s);
171 cx->sb_rxtainted |= RX_MATCH_TAINTED(rx);
173 (void)SvOOK_off(targ);
174 Safefree(SvPVX(targ));
175 SvPVX(targ) = SvPVX(dstr);
176 SvCUR_set(targ, SvCUR(dstr));
177 SvLEN_set(targ, SvLEN(dstr));
181 TAINT_IF(cx->sb_rxtainted & 1);
182 PUSHs(sv_2mortal(newSViv((I32)cx->sb_iters - 1)));
184 (void)SvPOK_only(targ);
185 TAINT_IF(cx->sb_rxtainted);
189 LEAVE_SCOPE(cx->sb_oldsave);
191 RETURNOP(pm->op_next);
194 if (rx->subbase && rx->subbase != orig) {
197 cx->sb_orig = orig = rx->subbase;
199 cx->sb_strend = s + (cx->sb_strend - m);
201 cx->sb_m = m = rx->startp[0];
202 sv_catpvn(dstr, s, m-s);
203 cx->sb_s = rx->endp[0];
204 cx->sb_rxtainted |= RX_MATCH_TAINTED(rx);
205 rxres_save(&cx->sb_rxres, rx);
206 RETURNOP(pm->op_pmreplstart);
210 rxres_save(void **rsp, REGEXP *rx)
215 if (!p || p[1] < rx->nparens) {
216 i = 6 + rx->nparens * 2;
224 *p++ = (UV)rx->subbase;
225 rx->subbase = Nullch;
229 *p++ = (UV)rx->subbeg;
230 *p++ = (UV)rx->subend;
231 for (i = 0; i <= rx->nparens; ++i) {
232 *p++ = (UV)rx->startp[i];
233 *p++ = (UV)rx->endp[i];
238 rxres_restore(void **rsp, REGEXP *rx)
243 Safefree(rx->subbase);
244 rx->subbase = (char*)(*p);
249 rx->subbeg = (char*)(*p++);
250 rx->subend = (char*)(*p++);
251 for (i = 0; i <= rx->nparens; ++i) {
252 rx->startp[i] = (char*)(*p++);
253 rx->endp[i] = (char*)(*p++);
258 rxres_free(void **rsp)
263 Safefree((char*)(*p));
271 djSP; dMARK; dORIGMARK;
272 register SV *tmpForm = *++MARK;
284 bool chopspace = (strchr(PL_chopset, ' ') != Nullch);
290 STRLEN fudge = SvCUR(tmpForm) * (IN_UTF8 ? 3 : 1) + 1;
292 if (!SvMAGICAL(tmpForm) || !SvCOMPILED(tmpForm)) {
293 SvREADONLY_off(tmpForm);
294 doparseform(tmpForm);
297 SvPV_force(PL_formtarget, len);
298 t = SvGROW(PL_formtarget, len + fudge + 1); /* XXX SvCUR bad */
300 f = SvPV(tmpForm, len);
301 /* need to jump to the next word */
302 s = f + len + WORD_ALIGN - SvCUR(tmpForm) % WORD_ALIGN;
311 case FF_LITERAL: arg = fpc[1]; name = "LITERAL"; break;
312 case FF_BLANK: arg = fpc[1]; name = "BLANK"; break;
313 case FF_SKIP: arg = fpc[1]; name = "SKIP"; break;
314 case FF_FETCH: arg = fpc[1]; name = "FETCH"; break;
315 case FF_DECIMAL: arg = fpc[1]; name = "DECIMAL"; break;
317 case FF_CHECKNL: name = "CHECKNL"; break;
318 case FF_CHECKCHOP: name = "CHECKCHOP"; break;
319 case FF_SPACE: name = "SPACE"; break;
320 case FF_HALFSPACE: name = "HALFSPACE"; break;
321 case FF_ITEM: name = "ITEM"; break;
322 case FF_CHOP: name = "CHOP"; break;
323 case FF_LINEGLOB: name = "LINEGLOB"; break;
324 case FF_NEWLINE: name = "NEWLINE"; break;
325 case FF_MORE: name = "MORE"; break;
326 case FF_LINEMARK: name = "LINEMARK"; break;
327 case FF_END: name = "END"; break;
330 PerlIO_printf(PerlIO_stderr(), "%-16s%ld\n", name, (long) arg);
332 PerlIO_printf(PerlIO_stderr(), "%-16s\n", name);
361 warn("Not enough format arguments");
366 item = s = SvPV(sv, len);
369 itemsize = sv_len_utf8(sv);
370 if (itemsize != len) {
372 if (itemsize > fieldsize) {
373 itemsize = fieldsize;
374 itembytes = itemsize;
375 sv_pos_u2b(sv, &itembytes, 0);
379 send = chophere = s + itembytes;
388 sv_pos_b2u(sv, &itemsize);
392 if (itemsize > fieldsize)
393 itemsize = fieldsize;
394 send = chophere = s + itemsize;
406 item = s = SvPV(sv, len);
409 itemsize = sv_len_utf8(sv);
410 if (itemsize != len) {
412 if (itemsize <= fieldsize) {
413 send = chophere = s + itemsize;
424 itemsize = fieldsize;
425 itembytes = itemsize;
426 sv_pos_u2b(sv, &itembytes, 0);
427 send = chophere = s + itembytes;
428 while (s < send || (s == send && isSPACE(*s))) {
438 if (strchr(PL_chopset, *s))
443 itemsize = chophere - item;
444 sv_pos_b2u(sv, &itemsize);
449 if (itemsize <= fieldsize) {
450 send = chophere = s + itemsize;
461 itemsize = fieldsize;
462 send = chophere = s + itemsize;
463 while (s < send || (s == send && isSPACE(*s))) {
473 if (strchr(PL_chopset, *s))
478 itemsize = chophere - item;
483 arg = fieldsize - itemsize;
492 arg = fieldsize - itemsize;
507 switch (UTF8SKIP(s)) {
518 if ( !((*t++ = *s++) & ~31) )
526 int ch = *t++ = *s++;
529 if ( !((*t++ = *s++) & ~31) )
538 while (*s && isSPACE(*s))
545 item = s = SvPV(sv, len);
558 SvCUR_set(PL_formtarget, t - SvPVX(PL_formtarget));
559 sv_catpvn(PL_formtarget, item, itemsize);
560 SvGROW(PL_formtarget, SvCUR(PL_formtarget) + fudge + 1);
561 t = SvPVX(PL_formtarget) + SvCUR(PL_formtarget);
566 /* If the field is marked with ^ and the value is undefined,
569 if ((arg & 512) && !SvOK(sv)) {
577 /* Formats aren't yet marked for locales, so assume "yes". */
580 sprintf(t, "%#*.*f", (int) fieldsize, (int) arg & 255, value);
582 sprintf(t, "%*.0f", (int) fieldsize, value);
589 while (t-- > linemark && *t == ' ') ;
597 if (arg) { /* repeat until fields exhausted? */
599 SvCUR_set(PL_formtarget, t - SvPVX(PL_formtarget));
600 lines += FmLINES(PL_formtarget);
603 if (strnEQ(linemark, linemark - arg, arg))
604 DIE("Runaway format");
606 FmLINES(PL_formtarget) = lines;
608 RETURNOP(cLISTOP->op_first);
619 arg = fieldsize - itemsize;
626 if (strnEQ(s," ",3)) {
627 while (s > SvPVX(PL_formtarget) && isSPACE(s[-1]))
638 SvCUR_set(PL_formtarget, t - SvPVX(PL_formtarget));
639 FmLINES(PL_formtarget) += lines;
651 if (PL_stack_base + *PL_markstack_ptr == SP) {
653 if (GIMME_V == G_SCALAR)
655 RETURNOP(PL_op->op_next->op_next);
657 PL_stack_sp = PL_stack_base + *PL_markstack_ptr + 1;
658 pp_pushmark(ARGS); /* push dst */
659 pp_pushmark(ARGS); /* push src */
660 ENTER; /* enter outer scope */
664 /* SAVE_DEFSV does *not* suffice here */
665 save_sptr(&THREADSV(0));
667 SAVESPTR(GvSV(PL_defgv));
668 #endif /* USE_THREADS */
669 ENTER; /* enter inner scope */
672 src = PL_stack_base[*PL_markstack_ptr];
677 if (PL_op->op_type == OP_MAPSTART)
678 pp_pushmark(ARGS); /* push top */
679 return ((LOGOP*)PL_op->op_next)->op_other;
684 DIE("panic: mapstart"); /* uses grepstart */
690 I32 diff = (SP - PL_stack_base) - *PL_markstack_ptr;
696 ++PL_markstack_ptr[-1];
698 if (diff > PL_markstack_ptr[-1] - PL_markstack_ptr[-2]) {
699 shift = diff - (PL_markstack_ptr[-1] - PL_markstack_ptr[-2]);
700 count = (SP - PL_stack_base) - PL_markstack_ptr[-1] + 2;
705 PL_markstack_ptr[-1] += shift;
706 *PL_markstack_ptr += shift;
710 dst = PL_stack_base + (PL_markstack_ptr[-2] += diff) - 1;
713 *dst-- = SvTEMP(TOPs) ? POPs : sv_mortalcopy(POPs);
715 LEAVE; /* exit inner scope */
718 if (PL_markstack_ptr[-1] > *PL_markstack_ptr) {
722 (void)POPMARK; /* pop top */
723 LEAVE; /* exit outer scope */
724 (void)POPMARK; /* pop src */
725 items = --*PL_markstack_ptr - PL_markstack_ptr[-1];
726 (void)POPMARK; /* pop dst */
727 SP = PL_stack_base + POPMARK; /* pop original mark */
728 if (gimme == G_SCALAR) {
732 else if (gimme == G_ARRAY)
739 ENTER; /* enter inner scope */
742 src = PL_stack_base[PL_markstack_ptr[-1]];
746 RETURNOP(cLOGOP->op_other);
752 djSP; dMARK; dORIGMARK;
754 SV **myorigmark = ORIGMARK;
760 OP* nextop = PL_op->op_next;
762 if (gimme != G_ARRAY) {
768 SAVEPPTR(PL_sortcop);
769 if (PL_op->op_flags & OPf_STACKED) {
770 if (PL_op->op_flags & OPf_SPECIAL) {
771 OP *kid = cLISTOP->op_first->op_sibling; /* pass pushmark */
772 kid = kUNOP->op_first; /* pass rv2gv */
773 kid = kUNOP->op_first; /* pass leave */
774 PL_sortcop = kid->op_next;
775 stash = PL_curcop->cop_stash;
778 cv = sv_2cv(*++MARK, &stash, &gv, 0);
779 if (!(cv && CvROOT(cv))) {
781 SV *tmpstr = sv_newmortal();
782 gv_efullname3(tmpstr, gv, Nullch);
783 if (cv && CvXSUB(cv))
784 DIE("Xsub \"%s\" called in sort", SvPVX(tmpstr));
785 DIE("Undefined sort subroutine \"%s\" called",
790 DIE("Xsub called in sort");
791 DIE("Undefined subroutine in sort");
793 DIE("Not a CODE reference in sort");
795 PL_sortcop = CvSTART(cv);
796 SAVESPTR(CvROOT(cv)->op_ppaddr);
797 CvROOT(cv)->op_ppaddr = ppaddr[OP_NULL];
800 PL_curpad = AvARRAY((AV*)AvARRAY(CvPADLIST(cv))[1]);
805 stash = PL_curcop->cop_stash;
809 while (MARK < SP) { /* This may or may not shift down one here. */
811 if (*up = *++MARK) { /* Weed out nulls. */
813 if (!PL_sortcop && !SvPOK(*up))
814 (void)sv_2pv(*up, &PL_na);
818 max = --up - myorigmark;
823 bool oldcatch = CATCH_GET;
829 PUSHSTACKi(PERLSI_SORT);
830 if (PL_sortstash != stash) {
831 PL_firstgv = gv_fetchpv("a", TRUE, SVt_PV);
832 PL_secondgv = gv_fetchpv("b", TRUE, SVt_PV);
833 PL_sortstash = stash;
836 SAVESPTR(GvSV(PL_firstgv));
837 SAVESPTR(GvSV(PL_secondgv));
839 PUSHBLOCK(cx, CXt_NULL, PL_stack_base);
840 if (!(PL_op->op_flags & OPf_SPECIAL)) {
841 bool hasargs = FALSE;
842 cx->cx_type = CXt_SUB;
843 cx->blk_gimme = G_SCALAR;
846 (void)SvREFCNT_inc(cv); /* in preparation for POPSUB */
848 PL_sortcxix = cxstack_ix;
849 qsortsv((myorigmark+1), max, FUNC_NAME_TO_PTR(sortcv));
851 POPBLOCK(cx,PL_curpm);
858 MEXTEND(SP, 20); /* Can't afford stack realloc on signal. */
859 qsortsv(ORIGMARK+1, max,
860 (PL_op->op_private & OPpLOCALE)
861 ? FUNC_NAME_TO_PTR(sv_cmp_locale)
862 : FUNC_NAME_TO_PTR(sv_cmp));
866 PL_stack_sp = ORIGMARK + max;
874 if (GIMME == G_ARRAY)
875 return cCONDOP->op_true;
876 return SvTRUEx(PAD_SV(PL_op->op_targ)) ? cCONDOP->op_false : cCONDOP->op_true;
883 if (GIMME == G_ARRAY) {
884 RETURNOP(((CONDOP*)cUNOP->op_first)->op_false);
888 SV *targ = PAD_SV(PL_op->op_targ);
890 if ((PL_op->op_private & OPpFLIP_LINENUM)
891 ? (PL_last_in_gv && SvIV(sv) == (IV)IoLINES(GvIOp(PL_last_in_gv)))
893 sv_setiv(PAD_SV(cUNOP->op_first->op_targ), 1);
894 if (PL_op->op_flags & OPf_SPECIAL) {
902 RETURNOP(((CONDOP*)cUNOP->op_first)->op_false);
915 if (GIMME == G_ARRAY) {
921 if (SvNIOKp(left) || !SvPOKp(left) ||
922 (looks_like_number(left) && *SvPVX(left) != '0') )
924 if (SvNV(left) < IV_MIN || SvNV(right) >= IV_MAX)
925 croak("Range iterator outside integer range");
929 EXTEND_MORTAL(max - i + 1);
930 EXTEND(SP, max - i + 1);
933 sv = sv_2mortal(newSViv(i++));
938 SV *final = sv_mortalcopy(right);
940 char *tmps = SvPV(final, len);
942 sv = sv_mortalcopy(left);
943 SvPV_force(sv,PL_na);
944 while (!SvNIOKp(sv) && SvCUR(sv) <= len) {
946 if (strEQ(SvPVX(sv),tmps))
948 sv = sv_2mortal(newSVsv(sv));
955 SV *targ = PAD_SV(cUNOP->op_first->op_targ);
957 if ((PL_op->op_private & OPpFLIP_LINENUM)
958 ? (PL_last_in_gv && SvIV(sv) == (IV)IoLINES(GvIOp(PL_last_in_gv)))
960 sv_setiv(PAD_SV(((UNOP*)cUNOP->op_first)->op_first->op_targ), 0);
961 sv_catpv(targ, "E0");
972 dopoptolabel(char *label)
976 register PERL_CONTEXT *cx;
978 for (i = cxstack_ix; i >= 0; i--) {
980 switch (cx->cx_type) {
983 warn("Exiting substitution via %s", op_name[PL_op->op_type]);
987 warn("Exiting subroutine via %s", op_name[PL_op->op_type]);
991 warn("Exiting eval via %s", op_name[PL_op->op_type]);
995 warn("Exiting pseudo-block via %s", op_name[PL_op->op_type]);
998 if (!cx->blk_loop.label ||
999 strNE(label, cx->blk_loop.label) ) {
1000 DEBUG_l(deb("(Skipping label #%ld %s)\n",
1001 (long)i, cx->blk_loop.label));
1004 DEBUG_l( deb("(Found label #%ld %s)\n", (long)i, label));
1014 I32 gimme = block_gimme();
1015 return (gimme == G_VOID) ? G_SCALAR : gimme;
1024 cxix = dopoptosub(cxstack_ix);
1028 switch (cxstack[cxix].blk_gimme) {
1036 croak("panic: bad gimme: %d\n", cxstack[cxix].blk_gimme);
1043 dopoptosub(I32 startingblock)
1046 return dopoptosub_at(cxstack, startingblock);
1050 dopoptosub_at(PERL_CONTEXT *cxstk, I32 startingblock)
1054 register PERL_CONTEXT *cx;
1055 for (i = startingblock; i >= 0; i--) {
1057 switch (cx->cx_type) {
1062 DEBUG_l( deb("(Found sub #%ld)\n", (long)i));
1070 dopoptoeval(I32 startingblock)
1074 register PERL_CONTEXT *cx;
1075 for (i = startingblock; i >= 0; i--) {
1077 switch (cx->cx_type) {
1081 DEBUG_l( deb("(Found eval #%ld)\n", (long)i));
1089 dopoptoloop(I32 startingblock)
1093 register PERL_CONTEXT *cx;
1094 for (i = startingblock; i >= 0; i--) {
1096 switch (cx->cx_type) {
1099 warn("Exiting substitution via %s", op_name[PL_op->op_type]);
1103 warn("Exiting subroutine via %s", op_name[PL_op->op_type]);
1107 warn("Exiting eval via %s", op_name[PL_op->op_type]);
1111 warn("Exiting pseudo-block via %s", op_name[PL_op->op_type]);
1114 DEBUG_l( deb("(Found loop #%ld)\n", (long)i));
1125 register PERL_CONTEXT *cx;
1129 while (cxstack_ix > cxix) {
1130 cx = &cxstack[cxstack_ix];
1131 DEBUG_l(PerlIO_printf(Perl_debug_log, "Unwinding block %ld, type %s\n",
1132 (long) cxstack_ix, block_type[cx->cx_type]));
1133 /* Note: we don't need to restore the base context info till the end. */
1134 switch (cx->cx_type) {
1137 continue; /* not break */
1155 die_where(char *message)
1160 register PERL_CONTEXT *cx;
1165 if (PL_in_eval & 4) {
1167 STRLEN klen = strlen(message);
1169 svp = hv_fetch(ERRHV, message, klen, TRUE);
1172 static char prefix[] = "\t(in cleanup) ";
1174 sv_upgrade(*svp, SVt_IV);
1175 (void)SvIOK_only(*svp);
1178 SvGROW(err, SvCUR(err)+sizeof(prefix)+klen);
1179 sv_catpvn(err, prefix, sizeof(prefix)-1);
1180 sv_catpvn(err, message, klen);
1186 sv_setpv(ERRSV, message);
1189 message = SvPVx(ERRSV, PL_na);
1191 while ((cxix = dopoptoeval(cxstack_ix)) < 0 && PL_curstackinfo->si_prev) {
1199 if (cxix < cxstack_ix)
1202 POPBLOCK(cx,PL_curpm);
1203 if (cx->cx_type != CXt_EVAL) {
1204 PerlIO_printf(PerlIO_stderr(), "panic: die %s", message);
1209 if (gimme == G_SCALAR)
1210 *++newsp = &PL_sv_undef;
1211 PL_stack_sp = newsp;
1215 if (optype == OP_REQUIRE) {
1216 char* msg = SvPVx(ERRSV, PL_na);
1217 DIE("%s", *msg ? msg : "Compilation failed in require");
1219 return pop_return();
1222 PerlIO_printf(PerlIO_stderr(), "%s",message);
1223 PerlIO_flush(PerlIO_stderr());
1232 if (SvTRUE(left) != SvTRUE(right))
1244 RETURNOP(cLOGOP->op_other);
1253 RETURNOP(cLOGOP->op_other);
1259 register I32 cxix = dopoptosub(cxstack_ix);
1260 register PERL_CONTEXT *cx;
1261 register PERL_CONTEXT *ccstack = cxstack;
1262 PERL_SI *top_si = PL_curstackinfo;
1273 /* we may be in a higher stacklevel, so dig down deeper */
1274 while (cxix < 0 && top_si->si_type != PERLSI_MAIN) {
1275 top_si = top_si->si_prev;
1276 ccstack = top_si->si_cxstack;
1277 cxix = dopoptosub_at(ccstack, top_si->si_cxix);
1280 if (GIMME != G_ARRAY)
1284 if (PL_DBsub && cxix >= 0 &&
1285 ccstack[cxix].blk_sub.cv == GvCV(PL_DBsub))
1289 cxix = dopoptosub_at(ccstack, cxix - 1);
1292 cx = &ccstack[cxix];
1293 if (ccstack[cxix].cx_type == CXt_SUB) {
1294 dbcxix = dopoptosub_at(ccstack, cxix - 1);
1295 /* We expect that ccstack[dbcxix] is CXt_SUB, anyway, the
1296 field below is defined for any cx. */
1297 if (PL_DBsub && dbcxix >= 0 && ccstack[dbcxix].blk_sub.cv == GvCV(PL_DBsub))
1298 cx = &ccstack[dbcxix];
1301 if (GIMME != G_ARRAY) {
1302 hv = cx->blk_oldcop->cop_stash;
1304 PUSHs(&PL_sv_undef);
1307 sv_setpv(TARG, HvNAME(hv));
1313 hv = cx->blk_oldcop->cop_stash;
1315 PUSHs(&PL_sv_undef);
1317 PUSHs(sv_2mortal(newSVpv(HvNAME(hv), 0)));
1318 PUSHs(sv_2mortal(newSVpv(SvPVX(GvSV(cx->blk_oldcop->cop_filegv)), 0)));
1319 PUSHs(sv_2mortal(newSViv((I32)cx->blk_oldcop->cop_line)));
1322 if (cx->cx_type == CXt_SUB) { /* So is ccstack[dbcxix]. */
1324 gv_efullname3(sv, CvGV(ccstack[cxix].blk_sub.cv), Nullch);
1325 PUSHs(sv_2mortal(sv));
1326 PUSHs(sv_2mortal(newSViv((I32)cx->blk_sub.hasargs)));
1329 PUSHs(sv_2mortal(newSVpv("(eval)",0)));
1330 PUSHs(sv_2mortal(newSViv(0)));
1332 gimme = (I32)cx->blk_gimme;
1333 if (gimme == G_VOID)
1334 PUSHs(&PL_sv_undef);
1336 PUSHs(sv_2mortal(newSViv(gimme & G_ARRAY)));
1337 if (cx->cx_type == CXt_EVAL) {
1338 if (cx->blk_eval.old_op_type == OP_ENTEREVAL) {
1339 PUSHs(cx->blk_eval.cur_text);
1342 else if (cx->blk_eval.old_name) { /* Try blocks have old_name == 0. */
1343 /* Require, put the name. */
1344 PUSHs(sv_2mortal(newSVpv(cx->blk_eval.old_name, 0)));
1348 else if (cx->cx_type == CXt_SUB &&
1349 cx->blk_sub.hasargs &&
1350 PL_curcop->cop_stash == PL_debstash)
1352 AV *ary = cx->blk_sub.argarray;
1353 int off = AvARRAY(ary) - AvALLOC(ary);
1357 PL_dbargs = GvAV(gv_AVadd(tmpgv = gv_fetchpv("DB::args", TRUE,
1360 AvREAL_off(PL_dbargs); /* XXX Should be REIFY */
1363 if (AvMAX(PL_dbargs) < AvFILLp(ary) + off)
1364 av_extend(PL_dbargs, AvFILLp(ary) + off);
1365 Copy(AvALLOC(ary), AvARRAY(PL_dbargs), AvFILLp(ary) + 1 + off, SV*);
1366 AvFILLp(PL_dbargs) = AvFILLp(ary) + off;
1372 sortcv(SV *a, SV *b)
1375 I32 oldsaveix = PL_savestack_ix;
1376 I32 oldscopeix = PL_scopestack_ix;
1378 GvSV(PL_firstgv) = a;
1379 GvSV(PL_secondgv) = b;
1380 PL_stack_sp = PL_stack_base;
1383 if (PL_stack_sp != PL_stack_base + 1)
1384 croak("Sort subroutine didn't return single value");
1385 if (!SvNIOKp(*PL_stack_sp))
1386 croak("Sort subroutine didn't return a numeric value");
1387 result = SvIV(*PL_stack_sp);
1388 while (PL_scopestack_ix > oldscopeix) {
1391 leave_scope(oldsaveix);
1404 sv_reset(tmps, PL_curcop->cop_stash);
1416 PL_curcop = (COP*)PL_op;
1417 TAINT_NOT; /* Each statement is presumed innocent */
1418 PL_stack_sp = PL_stack_base + cxstack[cxstack_ix].blk_oldsp;
1421 if (PL_op->op_private || SvIV(PL_DBsingle) || SvIV(PL_DBsignal) || SvIV(PL_DBtrace))
1425 register PERL_CONTEXT *cx;
1426 I32 gimme = G_ARRAY;
1433 DIE("No DB::DB routine defined");
1435 if (CvDEPTH(cv) >= 1 && !(PL_debug & (1<<30))) /* don't do recursive DB::DB call */
1447 push_return(PL_op->op_next);
1448 PUSHBLOCK(cx, CXt_SUB, SP);
1451 (void)SvREFCNT_inc(cv);
1452 SAVESPTR(PL_curpad);
1453 PL_curpad = AvARRAY((AV*)*av_fetch(CvPADLIST(cv),1,FALSE));
1454 RETURNOP(CvSTART(cv));
1468 register PERL_CONTEXT *cx;
1469 I32 gimme = GIMME_V;
1476 if (PL_op->op_flags & OPf_SPECIAL)
1477 svp = save_threadsv(PL_op->op_targ); /* per-thread variable */
1479 #endif /* USE_THREADS */
1480 if (PL_op->op_targ) {
1481 svp = &PL_curpad[PL_op->op_targ]; /* "my" variable */
1486 (void)save_scalar(gv);
1487 svp = &GvSV(gv); /* symbol table variable */
1492 PUSHBLOCK(cx, CXt_LOOP, SP);
1493 PUSHLOOP(cx, svp, MARK);
1494 if (PL_op->op_flags & OPf_STACKED) {
1495 cx->blk_loop.iterary = (AV*)SvREFCNT_inc(POPs);
1496 if (SvTYPE(cx->blk_loop.iterary) != SVt_PVAV) {
1498 if (SvNIOKp(sv) || !SvPOKp(sv) ||
1499 (looks_like_number(sv) && *SvPVX(sv) != '0')) {
1500 if (SvNV(sv) < IV_MIN ||
1501 SvNV((SV*)cx->blk_loop.iterary) >= IV_MAX)
1502 croak("Range iterator outside integer range");
1503 cx->blk_loop.iterix = SvIV(sv);
1504 cx->blk_loop.itermax = SvIV((SV*)cx->blk_loop.iterary);
1507 cx->blk_loop.iterlval = newSVsv(sv);
1511 cx->blk_loop.iterary = PL_curstack;
1512 AvFILLp(PL_curstack) = SP - PL_stack_base;
1513 cx->blk_loop.iterix = MARK - PL_stack_base;
1522 register PERL_CONTEXT *cx;
1523 I32 gimme = GIMME_V;
1529 PUSHBLOCK(cx, CXt_LOOP, SP);
1530 PUSHLOOP(cx, 0, SP);
1538 register PERL_CONTEXT *cx;
1539 struct block_loop cxloop;
1547 POPLOOP1(cx); /* Delay POPLOOP2 until stack values are safe */
1550 if (gimme == G_VOID)
1552 else if (gimme == G_SCALAR) {
1554 *++newsp = sv_mortalcopy(*SP);
1556 *++newsp = &PL_sv_undef;
1560 *++newsp = sv_mortalcopy(*++mark);
1561 TAINT_NOT; /* Each item is independent */
1567 POPLOOP2(); /* Stack values are safe: release loop vars ... */
1568 PL_curpm = newpm; /* ... and pop $1 et al */
1580 register PERL_CONTEXT *cx;
1581 struct block_sub cxsub;
1582 bool popsub2 = FALSE;
1588 if (PL_curstackinfo->si_type == PERLSI_SORT) {
1589 if (cxstack_ix == PL_sortcxix || dopoptosub(cxstack_ix) <= PL_sortcxix) {
1590 if (cxstack_ix > PL_sortcxix)
1591 dounwind(PL_sortcxix);
1592 AvARRAY(PL_curstack)[1] = *SP;
1593 PL_stack_sp = PL_stack_base + 1;
1598 cxix = dopoptosub(cxstack_ix);
1600 DIE("Can't return outside a subroutine");
1601 if (cxix < cxstack_ix)
1605 switch (cx->cx_type) {
1607 POPSUB1(cx); /* Delay POPSUB2 until stack values are safe */
1612 if (optype == OP_REQUIRE &&
1613 (MARK == SP || (gimme == G_SCALAR && !SvTRUE(*SP))) )
1615 /* Unassume the success we assumed earlier. */
1616 char *name = cx->blk_eval.old_name;
1617 (void)hv_delete(GvHVn(PL_incgv), name, strlen(name), G_DISCARD);
1618 DIE("%s did not return a true value", name);
1622 DIE("panic: return");
1626 if (gimme == G_SCALAR) {
1629 if (cxsub.cv && CvDEPTH(cxsub.cv) > 1) {
1631 *++newsp = SvREFCNT_inc(*SP);
1636 *++newsp = sv_mortalcopy(*SP);
1639 *++newsp = (SvTEMP(*SP)) ? *SP : sv_mortalcopy(*SP);
1641 *++newsp = sv_mortalcopy(*SP);
1643 *++newsp = &PL_sv_undef;
1645 else if (gimme == G_ARRAY) {
1646 while (++MARK <= SP) {
1647 *++newsp = (popsub2 && SvTEMP(*MARK))
1648 ? *MARK : sv_mortalcopy(*MARK);
1649 TAINT_NOT; /* Each item is independent */
1652 PL_stack_sp = newsp;
1654 /* Stack values are safe: */
1656 POPSUB2(); /* release CV and @_ ... */
1658 PL_curpm = newpm; /* ... and pop $1 et al */
1661 return pop_return();
1668 register PERL_CONTEXT *cx;
1669 struct block_loop cxloop;
1670 struct block_sub cxsub;
1677 SV **mark = PL_stack_base + cxstack[cxstack_ix].blk_oldsp;
1679 if (PL_op->op_flags & OPf_SPECIAL) {
1680 cxix = dopoptoloop(cxstack_ix);
1682 DIE("Can't \"last\" outside a block");
1685 cxix = dopoptolabel(cPVOP->op_pv);
1687 DIE("Label not found for \"last %s\"", cPVOP->op_pv);
1689 if (cxix < cxstack_ix)
1693 switch (cx->cx_type) {
1695 POPLOOP1(cx); /* Delay POPLOOP2 until stack values are safe */
1697 nextop = cxloop.last_op->op_next;
1700 POPSUB1(cx); /* Delay POPSUB2 until stack values are safe */
1702 nextop = pop_return();
1706 nextop = pop_return();
1713 if (gimme == G_SCALAR) {
1715 *++newsp = ((pop2 == CXt_SUB) && SvTEMP(*SP))
1716 ? *SP : sv_mortalcopy(*SP);
1718 *++newsp = &PL_sv_undef;
1720 else if (gimme == G_ARRAY) {
1721 while (++MARK <= SP) {
1722 *++newsp = ((pop2 == CXt_SUB) && SvTEMP(*MARK))
1723 ? *MARK : sv_mortalcopy(*MARK);
1724 TAINT_NOT; /* Each item is independent */
1730 /* Stack values are safe: */
1733 POPLOOP2(); /* release loop vars ... */
1737 POPSUB2(); /* release CV and @_ ... */
1740 PL_curpm = newpm; /* ... and pop $1 et al */
1749 register PERL_CONTEXT *cx;
1752 if (PL_op->op_flags & OPf_SPECIAL) {
1753 cxix = dopoptoloop(cxstack_ix);
1755 DIE("Can't \"next\" outside a block");
1758 cxix = dopoptolabel(cPVOP->op_pv);
1760 DIE("Label not found for \"next %s\"", cPVOP->op_pv);
1762 if (cxix < cxstack_ix)
1766 oldsave = PL_scopestack[PL_scopestack_ix - 1];
1767 LEAVE_SCOPE(oldsave);
1768 return cx->blk_loop.next_op;
1774 register PERL_CONTEXT *cx;
1777 if (PL_op->op_flags & OPf_SPECIAL) {
1778 cxix = dopoptoloop(cxstack_ix);
1780 DIE("Can't \"redo\" outside a block");
1783 cxix = dopoptolabel(cPVOP->op_pv);
1785 DIE("Label not found for \"redo %s\"", cPVOP->op_pv);
1787 if (cxix < cxstack_ix)
1791 oldsave = PL_scopestack[PL_scopestack_ix - 1];
1792 LEAVE_SCOPE(oldsave);
1793 return cx->blk_loop.redo_op;
1797 dofindlabel(OP *o, char *label, OP **opstack, OP **oplimit)
1801 static char too_deep[] = "Target of goto is too deeply nested";
1805 if (o->op_type == OP_LEAVE ||
1806 o->op_type == OP_SCOPE ||
1807 o->op_type == OP_LEAVELOOP ||
1808 o->op_type == OP_LEAVETRY)
1810 *ops++ = cUNOPo->op_first;
1815 if (o->op_flags & OPf_KIDS) {
1817 /* First try all the kids at this level, since that's likeliest. */
1818 for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling) {
1819 if ((kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) &&
1820 kCOP->cop_label && strEQ(kCOP->cop_label, label))
1823 for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling) {
1824 if (kid == PL_lastgotoprobe)
1826 if ((kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) &&
1828 (ops[-1]->op_type != OP_NEXTSTATE &&
1829 ops[-1]->op_type != OP_DBSTATE)))
1831 if (o = dofindlabel(kid, label, ops, oplimit))
1841 return pp_goto(ARGS);
1850 register PERL_CONTEXT *cx;
1851 #define GOTO_DEPTH 64
1852 OP *enterops[GOTO_DEPTH];
1854 int do_dump = (PL_op->op_type == OP_DUMP);
1857 if (PL_op->op_flags & OPf_STACKED) {
1860 /* This egregious kludge implements goto &subroutine */
1861 if (SvROK(sv) && SvTYPE(SvRV(sv)) == SVt_PVCV) {
1863 register PERL_CONTEXT *cx;
1864 CV* cv = (CV*)SvRV(sv);
1869 if (!CvROOT(cv) && !CvXSUB(cv)) {
1871 SV *tmpstr = sv_newmortal();
1872 gv_efullname3(tmpstr, CvGV(cv), Nullch);
1873 DIE("Goto undefined subroutine &%s",SvPVX(tmpstr));
1875 DIE("Goto undefined subroutine");
1878 /* First do some returnish stuff. */
1879 cxix = dopoptosub(cxstack_ix);
1881 DIE("Can't goto subroutine outside a subroutine");
1882 if (cxix < cxstack_ix)
1885 if (cx->cx_type == CXt_EVAL && cx->blk_eval.old_op_type == OP_ENTEREVAL)
1886 DIE("Can't goto subroutine from an eval-string");
1888 if (cx->cx_type == CXt_SUB &&
1889 cx->blk_sub.hasargs) { /* put @_ back onto stack */
1890 AV* av = cx->blk_sub.argarray;
1892 items = AvFILLp(av) + 1;
1894 EXTEND(PL_stack_sp, items); /* @_ could have been extended. */
1895 Copy(AvARRAY(av), PL_stack_sp, items, SV*);
1896 PL_stack_sp += items;
1898 SvREFCNT_dec(GvAV(PL_defgv));
1899 GvAV(PL_defgv) = cx->blk_sub.savearray;
1900 #endif /* USE_THREADS */
1904 else if (CvXSUB(cv)) { /* put GvAV(defgv) back onto stack */
1908 av = (AV*)PL_curpad[0];
1910 av = GvAV(PL_defgv);
1912 items = AvFILLp(av) + 1;
1914 EXTEND(PL_stack_sp, items); /* @_ could have been extended. */
1915 Copy(AvARRAY(av), PL_stack_sp, items, SV*);
1916 PL_stack_sp += items;
1918 if (cx->cx_type == CXt_SUB &&
1919 !(CvDEPTH(cx->blk_sub.cv) = cx->blk_sub.olddepth))
1920 SvREFCNT_dec(cx->blk_sub.cv);
1921 oldsave = PL_scopestack[PL_scopestack_ix - 1];
1922 LEAVE_SCOPE(oldsave);
1924 /* Now do some callish stuff. */
1927 if (CvOLDSTYLE(cv)) {
1928 I32 (*fp3)_((int,int,int));
1933 fp3 = (I32(*)_((int,int,int)))CvXSUB(cv);
1934 items = (*fp3)(CvXSUBANY(cv).any_i32,
1935 mark - PL_stack_base + 1,
1937 SP = PL_stack_base + items;
1943 PL_stack_sp--; /* There is no cv arg. */
1944 /* Push a mark for the start of arglist */
1946 (void)(*CvXSUB(cv))(cv _PERL_OBJECT_THIS);
1947 /* Pop the current context like a decent sub should */
1948 POPBLOCK(cx, PL_curpm);
1949 /* Do _not_ use PUTBACK, keep the XSUB's return stack! */
1952 return pop_return();
1955 AV* padlist = CvPADLIST(cv);
1956 SV** svp = AvARRAY(padlist);
1957 if (cx->cx_type == CXt_EVAL) {
1958 PL_in_eval = cx->blk_eval.old_in_eval;
1959 PL_eval_root = cx->blk_eval.old_eval_root;
1960 cx->cx_type = CXt_SUB;
1961 cx->blk_sub.hasargs = 0;
1963 cx->blk_sub.cv = cv;
1964 cx->blk_sub.olddepth = CvDEPTH(cv);
1966 if (CvDEPTH(cv) < 2)
1967 (void)SvREFCNT_inc(cv);
1968 else { /* save temporaries on recursion? */
1969 if (CvDEPTH(cv) == 100 && PL_dowarn)
1970 sub_crush_depth(cv);
1971 if (CvDEPTH(cv) > AvFILLp(padlist)) {
1972 AV *newpad = newAV();
1973 SV **oldpad = AvARRAY(svp[CvDEPTH(cv)-1]);
1974 I32 ix = AvFILLp((AV*)svp[1]);
1975 svp = AvARRAY(svp[0]);
1976 for ( ;ix > 0; ix--) {
1977 if (svp[ix] != &PL_sv_undef) {
1978 char *name = SvPVX(svp[ix]);
1979 if ((SvFLAGS(svp[ix]) & SVf_FAKE)
1982 /* outer lexical or anon code */
1983 av_store(newpad, ix,
1984 SvREFCNT_inc(oldpad[ix]) );
1986 else { /* our own lexical */
1988 av_store(newpad, ix, sv = (SV*)newAV());
1989 else if (*name == '%')
1990 av_store(newpad, ix, sv = (SV*)newHV());
1992 av_store(newpad, ix, sv = NEWSV(0,0));
1997 av_store(newpad, ix, sv = NEWSV(0,0));
2001 if (cx->blk_sub.hasargs) {
2004 av_store(newpad, 0, (SV*)av);
2005 AvFLAGS(av) = AVf_REIFY;
2007 av_store(padlist, CvDEPTH(cv), (SV*)newpad);
2008 AvFILLp(padlist) = CvDEPTH(cv);
2009 svp = AvARRAY(padlist);
2013 if (!cx->blk_sub.hasargs) {
2014 AV* av = (AV*)PL_curpad[0];
2016 items = AvFILLp(av) + 1;
2018 /* Mark is at the end of the stack. */
2020 Copy(AvARRAY(av), SP + 1, items, SV*);
2025 #endif /* USE_THREADS */
2026 SAVESPTR(PL_curpad);
2027 PL_curpad = AvARRAY((AV*)svp[CvDEPTH(cv)]);
2029 if (cx->blk_sub.hasargs)
2030 #endif /* USE_THREADS */
2032 AV* av = (AV*)PL_curpad[0];
2036 cx->blk_sub.savearray = GvAV(PL_defgv);
2037 GvAV(PL_defgv) = (AV*)SvREFCNT_inc(av);
2038 #endif /* USE_THREADS */
2039 cx->blk_sub.argarray = av;
2042 if (items >= AvMAX(av) + 1) {
2044 if (AvARRAY(av) != ary) {
2045 AvMAX(av) += AvARRAY(av) - AvALLOC(av);
2046 SvPVX(av) = (char*)ary;
2048 if (items >= AvMAX(av) + 1) {
2049 AvMAX(av) = items - 1;
2050 Renew(ary,items+1,SV*);
2052 SvPVX(av) = (char*)ary;
2055 Copy(mark,AvARRAY(av),items,SV*);
2056 AvFILLp(av) = items - 1;
2064 if (PERLDB_SUB) { /* Checking curstash breaks DProf. */
2066 * We do not care about using sv to call CV;
2067 * it's for informational purposes only.
2069 SV *sv = GvSV(PL_DBsub);
2072 if (PERLDB_SUB_NN) {
2073 SvIVX(sv) = (IV)cv; /* Already upgraded, saved */
2076 gv_efullname3(sv, CvGV(cv), Nullch);
2079 && (gotocv = perl_get_cv("DB::goto", FALSE)) ) {
2080 PUSHMARK( PL_stack_sp );
2081 perl_call_sv((SV*)gotocv, G_SCALAR | G_NODEBUG);
2085 RETURNOP(CvSTART(cv));
2089 label = SvPV(sv,PL_na);
2091 else if (PL_op->op_flags & OPf_SPECIAL) {
2093 DIE("goto must have label");
2096 label = cPVOP->op_pv;
2098 if (label && *label) {
2103 PL_lastgotoprobe = 0;
2105 for (ix = cxstack_ix; ix >= 0; ix--) {
2107 switch (cx->cx_type) {
2109 gotoprobe = PL_eval_root; /* XXX not good for nested eval */
2112 gotoprobe = cx->blk_oldcop->op_sibling;
2118 gotoprobe = cx->blk_oldcop->op_sibling;
2120 gotoprobe = PL_main_root;
2123 if (CvDEPTH(cx->blk_sub.cv)) {
2124 gotoprobe = CvROOT(cx->blk_sub.cv);
2129 DIE("Can't \"goto\" outside a block");
2133 gotoprobe = PL_main_root;
2136 retop = dofindlabel(gotoprobe, label,
2137 enterops, enterops + GOTO_DEPTH);
2140 PL_lastgotoprobe = gotoprobe;
2143 DIE("Can't find label %s", label);
2145 /* pop unwanted frames */
2147 if (ix < cxstack_ix) {
2154 oldsave = PL_scopestack[PL_scopestack_ix];
2155 LEAVE_SCOPE(oldsave);
2158 /* push wanted frames */
2160 if (*enterops && enterops[1]) {
2162 for (ix = 1; enterops[ix]; ix++) {
2163 PL_op = enterops[ix];
2164 /* Eventually we may want to stack the needed arguments
2165 * for each op. For now, we punt on the hard ones. */
2166 if (PL_op->op_type == OP_ENTERITER)
2167 DIE("Can't \"goto\" into the middle of a foreach loop",
2169 (CALLOP->op_ppaddr)(ARGS);
2177 if (!retop) retop = PL_main_start;
2179 PL_restartop = retop;
2180 PL_do_undump = TRUE;
2184 PL_restartop = 0; /* hmm, must be GNU unexec().. */
2185 PL_do_undump = FALSE;
2188 if (PL_top_env->je_prev) {
2189 PL_restartop = retop;
2206 if (anum == 1 && VMSISH_EXIT)
2211 PUSHs(&PL_sv_undef);
2219 double value = SvNVx(GvSV(cCOP->cop_gv));
2220 register I32 match = I_32(value);
2223 if (((double)match) > value)
2224 --match; /* was fractional--truncate other way */
2226 match -= cCOP->uop.scop.scop_offset;
2229 else if (match > cCOP->uop.scop.scop_max)
2230 match = cCOP->uop.scop.scop_max;
2231 PL_op = cCOP->uop.scop.scop_next[match];
2241 PL_op = PL_op->op_next; /* can't assume anything */
2243 match = *(SvPVx(GvSV(cCOP->cop_gv), PL_na)) & 255;
2244 match -= cCOP->uop.scop.scop_offset;
2247 else if (match > cCOP->uop.scop.scop_max)
2248 match = cCOP->uop.scop.scop_max;
2249 PL_op = cCOP->uop.scop.scop_next[match];
2258 save_lines(AV *array, SV *sv)
2260 register char *s = SvPVX(sv);
2261 register char *send = SvPVX(sv) + SvCUR(sv);
2263 register I32 line = 1;
2265 while (s && s < send) {
2266 SV *tmpstr = NEWSV(85,0);
2268 sv_upgrade(tmpstr, SVt_PVMG);
2269 t = strchr(s, '\n');
2275 sv_setpvn(tmpstr, s, t - s);
2276 av_store(array, line++, tmpstr);
2291 assert(CATCH_GET == TRUE);
2292 DEBUG_l(deb("Setting up local jumplevel %p, was %p\n", &cur_env, PL_top_env));
2296 default: /* topmost level handles it */
2302 if (!PL_restartop) {
2303 PerlIO_printf(PerlIO_stderr(), "panic: restartop\n");
2306 PL_op = PL_restartop;
2319 sv_compile_2op(SV *sv, OP** startop, char *code, AV** avp)
2320 /* sv Text to convert to OP tree. */
2321 /* startop op_free() this to undo. */
2322 /* code Short string id of the caller. */
2324 dSP; /* Make POPBLOCK work. */
2327 I32 gimme = 0; /* SUSPECT - INITIALZE TO WHAT? NI-S */
2330 OP *oop = PL_op, *rop;
2331 char tmpbuf[TYPE_DIGITS(long) + 12 + 10];
2337 /* switch to eval mode */
2339 if (PL_curcop == &PL_compiling) {
2340 SAVESPTR(PL_compiling.cop_stash);
2341 PL_compiling.cop_stash = PL_curstash;
2343 SAVESPTR(PL_compiling.cop_filegv);
2344 SAVEI16(PL_compiling.cop_line);
2345 sprintf(tmpbuf, "_<(%.10s_eval %lu)", code, (unsigned long)++PL_evalseq);
2346 PL_compiling.cop_filegv = gv_fetchfile(tmpbuf+2);
2347 PL_compiling.cop_line = 1;
2348 /* XXX For C<eval "...">s within BEGIN {} blocks, this ends up
2349 deleting the eval's FILEGV from the stash before gv_check() runs
2350 (i.e. before run-time proper). To work around the coredump that
2351 ensues, we always turn GvMULTI_on for any globals that were
2352 introduced within evals. See force_ident(). GSAR 96-10-12 */
2353 safestr = savepv(tmpbuf);
2354 SAVEDELETE(PL_defstash, safestr, strlen(safestr));
2356 #ifdef OP_IN_REGISTER
2364 PL_op->op_type = 0; /* Avoid uninit warning. */
2365 PL_op->op_flags = 0; /* Avoid uninit warning. */
2366 PUSHBLOCK(cx, CXt_EVAL, SP);
2367 PUSHEVAL(cx, 0, PL_compiling.cop_filegv);
2368 rop = doeval(G_SCALAR, startop);
2369 POPBLOCK(cx,PL_curpm);
2372 (*startop)->op_type = OP_NULL;
2373 (*startop)->op_ppaddr = ppaddr[OP_NULL];
2375 *avp = (AV*)SvREFCNT_inc(PL_comppad);
2377 if (curcop = &PL_compiling)
2378 PL_compiling.op_private = PL_hints;
2379 #ifdef OP_IN_REGISTER
2385 /* With USE_THREADS, eval_owner must be held on entry to doeval */
2387 doeval(int gimme, OP** startop)
2400 /* set up a scratch pad */
2403 SAVESPTR(PL_curpad);
2404 SAVESPTR(PL_comppad);
2405 SAVESPTR(PL_comppad_name);
2406 SAVEI32(PL_comppad_name_fill);
2407 SAVEI32(PL_min_intro_pending);
2408 SAVEI32(PL_max_intro_pending);
2411 for (i = cxstack_ix; i >= 0; i--) {
2412 PERL_CONTEXT *cx = &cxstack[i];
2413 if (cx->cx_type == CXt_EVAL)
2415 else if (cx->cx_type == CXt_SUB) {
2416 caller = cx->blk_sub.cv;
2421 SAVESPTR(PL_compcv);
2422 PL_compcv = (CV*)NEWSV(1104,0);
2423 sv_upgrade((SV *)PL_compcv, SVt_PVCV);
2424 CvUNIQUE_on(PL_compcv);
2426 CvOWNER(PL_compcv) = 0;
2427 New(666, CvMUTEXP(PL_compcv), 1, perl_mutex);
2428 MUTEX_INIT(CvMUTEXP(PL_compcv));
2429 #endif /* USE_THREADS */
2431 PL_comppad = newAV();
2432 av_push(PL_comppad, Nullsv);
2433 PL_curpad = AvARRAY(PL_comppad);
2434 PL_comppad_name = newAV();
2435 PL_comppad_name_fill = 0;
2436 PL_min_intro_pending = 0;
2439 av_store(PL_comppad_name, 0, newSVpv("@_", 2));
2440 PL_curpad[0] = (SV*)newAV();
2441 SvPADMY_on(PL_curpad[0]); /* XXX Needed? */
2442 #endif /* USE_THREADS */
2444 comppadlist = newAV();
2445 AvREAL_off(comppadlist);
2446 av_store(comppadlist, 0, (SV*)PL_comppad_name);
2447 av_store(comppadlist, 1, (SV*)PL_comppad);
2448 CvPADLIST(PL_compcv) = comppadlist;
2450 if (!saveop || saveop->op_type != OP_REQUIRE)
2451 CvOUTSIDE(PL_compcv) = (CV*)SvREFCNT_inc(caller);
2453 SAVEFREESV(PL_compcv);
2455 /* make sure we compile in the right package */
2457 newstash = PL_curcop->cop_stash;
2458 if (PL_curstash != newstash) {
2459 SAVESPTR(PL_curstash);
2460 PL_curstash = newstash;
2462 SAVESPTR(PL_beginav);
2463 PL_beginav = newAV();
2464 SAVEFREESV(PL_beginav);
2466 /* try to compile it */
2468 PL_eval_root = Nullop;
2470 PL_curcop = &PL_compiling;
2471 PL_curcop->cop_arybase = 0;
2472 SvREFCNT_dec(PL_rs);
2473 PL_rs = newSVpv("\n", 1);
2474 if (saveop && saveop->op_flags & OPf_SPECIAL)
2478 if (yyparse() || PL_error_count || !PL_eval_root) {
2482 I32 optype = 0; /* Might be reset by POPEVAL. */
2486 op_free(PL_eval_root);
2487 PL_eval_root = Nullop;
2489 SP = PL_stack_base + POPMARK; /* pop original mark */
2491 POPBLOCK(cx,PL_curpm);
2497 if (optype == OP_REQUIRE) {
2498 char* msg = SvPVx(ERRSV, PL_na);
2499 DIE("%s", *msg ? msg : "Compilation failed in require");
2500 } else if (startop) {
2501 char* msg = SvPVx(ERRSV, PL_na);
2503 POPBLOCK(cx,PL_curpm);
2505 croak("%sCompilation failed in regexp", (*msg ? msg : "Unknown error\n"));
2507 SvREFCNT_dec(PL_rs);
2508 PL_rs = SvREFCNT_inc(PL_nrs);
2510 MUTEX_LOCK(&PL_eval_mutex);
2512 COND_SIGNAL(&PL_eval_cond);
2513 MUTEX_UNLOCK(&PL_eval_mutex);
2514 #endif /* USE_THREADS */
2517 SvREFCNT_dec(PL_rs);
2518 PL_rs = SvREFCNT_inc(PL_nrs);
2519 PL_compiling.cop_line = 0;
2521 *startop = PL_eval_root;
2522 SvREFCNT_dec(CvOUTSIDE(PL_compcv));
2523 CvOUTSIDE(PL_compcv) = Nullcv;
2525 SAVEFREEOP(PL_eval_root);
2527 scalarvoid(PL_eval_root);
2528 else if (gimme & G_ARRAY)
2531 scalar(PL_eval_root);
2533 DEBUG_x(dump_eval());
2535 /* Register with debugger: */
2536 if (PERLDB_INTER && saveop->op_type == OP_REQUIRE) {
2537 CV *cv = perl_get_cv("DB::postponed", FALSE);
2541 XPUSHs((SV*)PL_compiling.cop_filegv);
2543 perl_call_sv((SV*)cv, G_DISCARD);
2547 /* compiled okay, so do it */
2549 CvDEPTH(PL_compcv) = 1;
2550 SP = PL_stack_base + POPMARK; /* pop original mark */
2551 PL_op = saveop; /* The caller may need it. */
2553 MUTEX_LOCK(&PL_eval_mutex);
2555 COND_SIGNAL(&PL_eval_cond);
2556 MUTEX_UNLOCK(&PL_eval_mutex);
2557 #endif /* USE_THREADS */
2559 RETURNOP(PL_eval_start);
2565 register PERL_CONTEXT *cx;
2570 SV *namesv = Nullsv;
2572 I32 gimme = G_SCALAR;
2573 PerlIO *tryrsfp = 0;
2576 if (SvNIOKp(sv) && !SvPOKp(sv)) {
2577 SET_NUMERIC_STANDARD();
2578 if (atof(PL_patchlevel) + 0.00000999 < SvNV(sv))
2579 DIE("Perl %s required--this is only version %s, stopped",
2580 SvPV(sv,PL_na),PL_patchlevel);
2583 name = SvPV(sv, len);
2584 if (!(name && len > 0 && *name))
2585 DIE("Null filename used");
2586 TAINT_PROPER("require");
2587 if (PL_op->op_type == OP_REQUIRE &&
2588 (svp = hv_fetch(GvHVn(PL_incgv), name, len, 0)) &&
2589 *svp != &PL_sv_undef)
2592 /* prepare to compile file */
2597 (name[1] == '.' && name[2] == '/')))
2599 || (name[0] && name[1] == ':')
2602 || (name[0] == '\\' && name[1] == '\\') /* UNC path */
2605 || (strchr(name,':') || ((*name == '[' || *name == '<') &&
2606 (isALNUM(name[1]) || strchr("$-_]>",name[1]))))
2611 tryrsfp = PerlIO_open(name,PERL_SCRIPT_MODE);
2614 AV *ar = GvAVn(PL_incgv);
2618 if ((unixname = tounixspec(name, Nullch)) != Nullch)
2621 namesv = NEWSV(806, 0);
2622 for (i = 0; i <= AvFILL(ar); i++) {
2623 char *dir = SvPVx(*av_fetch(ar, i, TRUE), PL_na);
2626 if ((unixdir = tounixpath(dir, Nullch)) == Nullch)
2628 sv_setpv(namesv, unixdir);
2629 sv_catpv(namesv, unixname);
2631 sv_setpvf(namesv, "%s/%s", dir, name);
2633 tryname = SvPVX(namesv);
2634 tryrsfp = PerlIO_open(tryname, PERL_SCRIPT_MODE);
2636 if (tryname[0] == '.' && tryname[1] == '/')
2643 SAVESPTR(PL_compiling.cop_filegv);
2644 PL_compiling.cop_filegv = gv_fetchfile(tryrsfp ? tryname : name);
2645 SvREFCNT_dec(namesv);
2647 if (PL_op->op_type == OP_REQUIRE) {
2648 SV *msg = sv_2mortal(newSVpvf("Can't locate %s in @INC", name));
2649 SV *dirmsgsv = NEWSV(0, 0);
2650 AV *ar = GvAVn(PL_incgv);
2652 if (instr(SvPVX(msg), ".h "))
2653 sv_catpv(msg, " (change .h to .ph maybe?)");
2654 if (instr(SvPVX(msg), ".ph "))
2655 sv_catpv(msg, " (did you run h2ph?)");
2656 sv_catpv(msg, " (@INC contains:");
2657 for (i = 0; i <= AvFILL(ar); i++) {
2658 char *dir = SvPVx(*av_fetch(ar, i, TRUE), PL_na);
2659 sv_setpvf(dirmsgsv, " %s", dir);
2660 sv_catsv(msg, dirmsgsv);
2662 sv_catpvn(msg, ")", 1);
2663 SvREFCNT_dec(dirmsgsv);
2670 /* Assume success here to prevent recursive requirement. */
2671 (void)hv_store(GvHVn(PL_incgv), name, strlen(name),
2672 newSVsv(GvSV(PL_compiling.cop_filegv)), 0 );
2676 lex_start(sv_2mortal(newSVpv("",0)));
2677 if (PL_rsfp_filters){
2678 save_aptr(&PL_rsfp_filters);
2679 PL_rsfp_filters = NULL;
2683 name = savepv(name);
2688 /* switch to eval mode */
2690 push_return(PL_op->op_next);
2691 PUSHBLOCK(cx, CXt_EVAL, SP);
2692 PUSHEVAL(cx, name, PL_compiling.cop_filegv);
2694 PL_compiling.cop_line = 0;
2698 MUTEX_LOCK(&PL_eval_mutex);
2699 if (PL_eval_owner && PL_eval_owner != thr)
2700 while (PL_eval_owner)
2701 COND_WAIT(&PL_eval_cond, &PL_eval_mutex);
2702 PL_eval_owner = thr;
2703 MUTEX_UNLOCK(&PL_eval_mutex);
2704 #endif /* USE_THREADS */
2705 return DOCATCH(doeval(G_SCALAR, NULL));
2710 return pp_require(ARGS);
2716 register PERL_CONTEXT *cx;
2718 I32 gimme = GIMME_V, was = PL_sub_generation;
2719 char tmpbuf[TYPE_DIGITS(long) + 12];
2724 if (!SvPV(sv,len) || !len)
2726 TAINT_PROPER("eval");
2732 /* switch to eval mode */
2734 SAVESPTR(PL_compiling.cop_filegv);
2735 sprintf(tmpbuf, "_<(eval %lu)", (unsigned long)++PL_evalseq);
2736 PL_compiling.cop_filegv = gv_fetchfile(tmpbuf+2);
2737 PL_compiling.cop_line = 1;
2738 /* XXX For C<eval "...">s within BEGIN {} blocks, this ends up
2739 deleting the eval's FILEGV from the stash before gv_check() runs
2740 (i.e. before run-time proper). To work around the coredump that
2741 ensues, we always turn GvMULTI_on for any globals that were
2742 introduced within evals. See force_ident(). GSAR 96-10-12 */
2743 safestr = savepv(tmpbuf);
2744 SAVEDELETE(PL_defstash, safestr, strlen(safestr));
2746 PL_hints = PL_op->op_targ;
2748 push_return(PL_op->op_next);
2749 PUSHBLOCK(cx, CXt_EVAL, SP);
2750 PUSHEVAL(cx, 0, PL_compiling.cop_filegv);
2752 /* prepare to compile string */
2754 if (PERLDB_LINE && PL_curstash != PL_debstash)
2755 save_lines(GvAV(PL_compiling.cop_filegv), PL_linestr);
2758 MUTEX_LOCK(&PL_eval_mutex);
2759 if (PL_eval_owner && PL_eval_owner != thr)
2760 while (PL_eval_owner)
2761 COND_WAIT(&PL_eval_cond, &PL_eval_mutex);
2762 PL_eval_owner = thr;
2763 MUTEX_UNLOCK(&PL_eval_mutex);
2764 #endif /* USE_THREADS */
2765 ret = doeval(gimme, NULL);
2766 if (PERLDB_INTER && was != PL_sub_generation /* Some subs defined here. */
2767 && ret != PL_op->op_next) { /* Successive compilation. */
2768 strcpy(safestr, "_<(eval )"); /* Anything fake and short. */
2770 return DOCATCH(ret);
2780 register PERL_CONTEXT *cx;
2782 U8 save_flags = PL_op -> op_flags;
2787 retop = pop_return();
2790 if (gimme == G_VOID)
2792 else if (gimme == G_SCALAR) {
2795 if (SvFLAGS(TOPs) & SVs_TEMP)
2798 *MARK = sv_mortalcopy(TOPs);
2802 *MARK = &PL_sv_undef;
2806 /* in case LEAVE wipes old return values */
2807 for (mark = newsp + 1; mark <= SP; mark++) {
2808 if (!(SvFLAGS(*mark) & SVs_TEMP)) {
2809 *mark = sv_mortalcopy(*mark);
2810 TAINT_NOT; /* Each item is independent */
2814 PL_curpm = newpm; /* Don't pop $1 et al till now */
2817 * Closures mentioned at top level of eval cannot be referenced
2818 * again, and their presence indirectly causes a memory leak.
2819 * (Note that the fact that compcv and friends are still set here
2820 * is, AFAIK, an accident.) --Chip
2822 if (AvFILLp(PL_comppad_name) >= 0) {
2823 SV **svp = AvARRAY(PL_comppad_name);
2825 for (ix = AvFILLp(PL_comppad_name); ix >= 0; ix--) {
2827 if (sv && sv != &PL_sv_undef && *SvPVX(sv) == '&') {
2829 svp[ix] = &PL_sv_undef;
2833 SvREFCNT_dec(CvOUTSIDE(sv));
2834 CvOUTSIDE(sv) = Nullcv;
2847 assert(CvDEPTH(PL_compcv) == 1);
2849 CvDEPTH(PL_compcv) = 0;
2852 if (optype == OP_REQUIRE &&
2853 !(gimme == G_SCALAR ? SvTRUE(*SP) : SP > newsp))
2855 /* Unassume the success we assumed earlier. */
2856 char *name = cx->blk_eval.old_name;
2857 (void)hv_delete(GvHVn(PL_incgv), name, strlen(name), G_DISCARD);
2858 retop = die("%s did not return a true value", name);
2859 /* die_where() did LEAVE, or we won't be here */
2863 if (!(save_flags & OPf_SPECIAL))
2873 register PERL_CONTEXT *cx;
2874 I32 gimme = GIMME_V;
2879 push_return(cLOGOP->op_other->op_next);
2880 PUSHBLOCK(cx, CXt_EVAL, SP);
2882 PL_eval_root = PL_op; /* Only needed so that goto works right. */
2887 return DOCATCH(PL_op->op_next);
2897 register PERL_CONTEXT *cx;
2905 if (gimme == G_VOID)
2907 else if (gimme == G_SCALAR) {
2910 if (SvFLAGS(TOPs) & (SVs_PADTMP|SVs_TEMP))
2913 *MARK = sv_mortalcopy(TOPs);
2917 *MARK = &PL_sv_undef;
2922 /* in case LEAVE wipes old return values */
2923 for (mark = newsp + 1; mark <= SP; mark++) {
2924 if (!(SvFLAGS(*mark) & (SVs_PADTMP|SVs_TEMP))) {
2925 *mark = sv_mortalcopy(*mark);
2926 TAINT_NOT; /* Each item is independent */
2930 PL_curpm = newpm; /* Don't pop $1 et al till now */
2941 register char *s = SvPV_force(sv, len);
2942 register char *send = s + len;
2943 register char *base;
2944 register I32 skipspaces = 0;
2947 bool postspace = FALSE;
2955 croak("Null picture in formline");
2957 New(804, fops, (send - s)*3+10, U16); /* Almost certainly too long... */
2962 *fpc++ = FF_LINEMARK;
2963 noblank = repeat = FALSE;
2981 case ' ': case '\t':
2992 *fpc++ = FF_LITERAL;
3000 *fpc++ = skipspaces;
3004 *fpc++ = FF_NEWLINE;
3008 arg = fpc - linepc + 1;
3015 *fpc++ = FF_LINEMARK;
3016 noblank = repeat = FALSE;
3025 ischop = s[-1] == '^';
3031 arg = (s - base) - 1;
3033 *fpc++ = FF_LITERAL;
3042 *fpc++ = FF_LINEGLOB;
3044 else if (*s == '#' || (*s == '.' && s[1] == '#')) {
3045 arg = ischop ? 512 : 0;
3055 arg |= 256 + (s - f);
3057 *fpc++ = s - base; /* fieldsize for FETCH */
3058 *fpc++ = FF_DECIMAL;
3063 bool ismore = FALSE;
3066 while (*++s == '>') ;
3067 prespace = FF_SPACE;
3069 else if (*s == '|') {
3070 while (*++s == '|') ;
3071 prespace = FF_HALFSPACE;
3076 while (*++s == '<') ;
3079 if (*s == '.' && s[1] == '.' && s[2] == '.') {
3083 *fpc++ = s - base; /* fieldsize for FETCH */
3085 *fpc++ = ischop ? FF_CHECKCHOP : FF_CHECKNL;
3103 { /* need to jump to the next word */
3105 z = WORD_ALIGN - SvCUR(sv) % WORD_ALIGN;
3106 SvGROW(sv, SvCUR(sv) + z + arg * sizeof(U16) + 4);
3107 s = SvPVX(sv) + SvCUR(sv) + z;
3109 Copy(fops, s, arg, U16);
3111 sv_magic(sv, Nullsv, 'f', Nullch, 0);
3116 * The rest of this file was derived from source code contributed
3119 * NOTE: this code was derived from Tom Horsley's qsort replacement
3120 * and should not be confused with the original code.
3123 /* Copyright (C) Tom Horsley, 1997. All rights reserved.
3125 Permission granted to distribute under the same terms as perl which are
3128 This program is free software; you can redistribute it and/or modify
3129 it under the terms of either:
3131 a) the GNU General Public License as published by the Free
3132 Software Foundation; either version 1, or (at your option) any
3135 b) the "Artistic License" which comes with this Kit.
3137 Details on the perl license can be found in the perl source code which
3138 may be located via the www.perl.com web page.
3140 This is the most wonderfulest possible qsort I can come up with (and
3141 still be mostly portable) My (limited) tests indicate it consistently
3142 does about 20% fewer calls to compare than does the qsort in the Visual
3143 C++ library, other vendors may vary.
3145 Some of the ideas in here can be found in "Algorithms" by Sedgewick,
3146 others I invented myself (or more likely re-invented since they seemed
3147 pretty obvious once I watched the algorithm operate for a while).
3149 Most of this code was written while watching the Marlins sweep the Giants
3150 in the 1997 National League Playoffs - no Braves fans allowed to use this
3151 code (just kidding :-).
3153 I realize that if I wanted to be true to the perl tradition, the only
3154 comment in this file would be something like:
3156 ...they shuffled back towards the rear of the line. 'No, not at the
3157 rear!' the slave-driver shouted. 'Three files up. And stay there...
3159 However, I really needed to violate that tradition just so I could keep
3160 track of what happens myself, not to mention some poor fool trying to
3161 understand this years from now :-).
3164 /* ********************************************************** Configuration */
3166 #ifndef QSORT_ORDER_GUESS
3167 #define QSORT_ORDER_GUESS 2 /* Select doubling version of the netBSD trick */
3170 /* QSORT_MAX_STACK is the largest number of partitions that can be stacked up for
3171 future processing - a good max upper bound is log base 2 of memory size
3172 (32 on 32 bit machines, 64 on 64 bit machines, etc). In reality can
3173 safely be smaller than that since the program is taking up some space and
3174 most operating systems only let you grab some subset of contiguous
3175 memory (not to mention that you are normally sorting data larger than
3176 1 byte element size :-).
3178 #ifndef QSORT_MAX_STACK
3179 #define QSORT_MAX_STACK 32
3182 /* QSORT_BREAK_EVEN is the size of the largest partition we should insertion sort.
3183 Anything bigger and we use qsort. If you make this too small, the qsort
3184 will probably break (or become less efficient), because it doesn't expect
3185 the middle element of a partition to be the same as the right or left -
3186 you have been warned).
3188 #ifndef QSORT_BREAK_EVEN
3189 #define QSORT_BREAK_EVEN 6
3192 /* ************************************************************* Data Types */
3194 /* hold left and right index values of a partition waiting to be sorted (the
3195 partition includes both left and right - right is NOT one past the end or
3196 anything like that).
3198 struct partition_stack_entry {
3201 #ifdef QSORT_ORDER_GUESS
3202 int qsort_break_even;
3206 /* ******************************************************* Shorthand Macros */
3208 /* Note that these macros will be used from inside the qsort function where
3209 we happen to know that the variable 'elt_size' contains the size of an
3210 array element and the variable 'temp' points to enough space to hold a
3211 temp element and the variable 'array' points to the array being sorted
3212 and 'compare' is the pointer to the compare routine.
3214 Also note that there are very many highly architecture specific ways
3215 these might be sped up, but this is simply the most generally portable
3216 code I could think of.
3219 /* Return < 0 == 0 or > 0 as the value of elt1 is < elt2, == elt2, > elt2
3222 #define qsort_cmp(elt1, elt2) \
3223 ((this->*compare)(array[elt1], array[elt2]))
3225 #define qsort_cmp(elt1, elt2) \
3226 ((*compare)(array[elt1], array[elt2]))
3229 #ifdef QSORT_ORDER_GUESS
3230 #define QSORT_NOTICE_SWAP swapped++;
3232 #define QSORT_NOTICE_SWAP
3235 /* swaps contents of array elements elt1, elt2.
3237 #define qsort_swap(elt1, elt2) \
3240 temp = array[elt1]; \
3241 array[elt1] = array[elt2]; \
3242 array[elt2] = temp; \
3245 /* rotate contents of elt1, elt2, elt3 such that elt1 gets elt2, elt2 gets
3246 elt3 and elt3 gets elt1.
3248 #define qsort_rotate(elt1, elt2, elt3) \
3251 temp = array[elt1]; \
3252 array[elt1] = array[elt2]; \
3253 array[elt2] = array[elt3]; \
3254 array[elt3] = temp; \
3257 /* ************************************************************ Debug stuff */
3264 return; /* good place to set a breakpoint */
3267 #define qsort_assert(t) (void)( (t) || (break_here(), 0) )
3270 doqsort_all_asserts(
3274 int (*compare)(const void * elt1, const void * elt2),
3275 int pc_left, int pc_right, int u_left, int u_right)
3279 qsort_assert(pc_left <= pc_right);
3280 qsort_assert(u_right < pc_left);
3281 qsort_assert(pc_right < u_left);
3282 for (i = u_right + 1; i < pc_left; ++i) {
3283 qsort_assert(qsort_cmp(i, pc_left) < 0);
3285 for (i = pc_left; i < pc_right; ++i) {
3286 qsort_assert(qsort_cmp(i, pc_right) == 0);
3288 for (i = pc_right + 1; i < u_left; ++i) {
3289 qsort_assert(qsort_cmp(pc_right, i) < 0);
3293 #define qsort_all_asserts(PC_LEFT, PC_RIGHT, U_LEFT, U_RIGHT) \
3294 doqsort_all_asserts(array, num_elts, elt_size, compare, \
3295 PC_LEFT, PC_RIGHT, U_LEFT, U_RIGHT)
3299 #define qsort_assert(t) ((void)0)
3301 #define qsort_all_asserts(PC_LEFT, PC_RIGHT, U_LEFT, U_RIGHT) ((void)0)
3305 /* ****************************************************************** qsort */
3309 qsortsv(SV ** array, size_t num_elts, SVCOMPARE compare)
3314 I32 (*compare)(SV *a, SV *b))
3319 struct partition_stack_entry partition_stack[QSORT_MAX_STACK];
3320 int next_stack_entry = 0;
3324 #ifdef QSORT_ORDER_GUESS
3325 int qsort_break_even;
3329 /* Make sure we actually have work to do.
3331 if (num_elts <= 1) {
3335 /* Setup the initial partition definition and fall into the sorting loop
3338 part_right = (int)(num_elts - 1);
3339 #ifdef QSORT_ORDER_GUESS
3340 qsort_break_even = QSORT_BREAK_EVEN;
3342 #define qsort_break_even QSORT_BREAK_EVEN
3345 if ((part_right - part_left) >= qsort_break_even) {
3346 /* OK, this is gonna get hairy, so lets try to document all the
3347 concepts and abbreviations and variables and what they keep
3350 pc: pivot chunk - the set of array elements we accumulate in the
3351 middle of the partition, all equal in value to the original
3352 pivot element selected. The pc is defined by:
3354 pc_left - the leftmost array index of the pc
3355 pc_right - the rightmost array index of the pc
3357 we start with pc_left == pc_right and only one element
3358 in the pivot chunk (but it can grow during the scan).
3360 u: uncompared elements - the set of elements in the partition
3361 we have not yet compared to the pivot value. There are two
3362 uncompared sets during the scan - one to the left of the pc
3363 and one to the right.
3365 u_right - the rightmost index of the left side's uncompared set
3366 u_left - the leftmost index of the right side's uncompared set
3368 The leftmost index of the left sides's uncompared set
3369 doesn't need its own variable because it is always defined
3370 by the leftmost edge of the whole partition (part_left). The
3371 same goes for the rightmost edge of the right partition
3374 We know there are no uncompared elements on the left once we
3375 get u_right < part_left and no uncompared elements on the
3376 right once u_left > part_right. When both these conditions
3377 are met, we have completed the scan of the partition.
3379 Any elements which are between the pivot chunk and the
3380 uncompared elements should be less than the pivot value on
3381 the left side and greater than the pivot value on the right
3382 side (in fact, the goal of the whole algorithm is to arrange
3383 for that to be true and make the groups of less-than and
3384 greater-then elements into new partitions to sort again).
3386 As you marvel at the complexity of the code and wonder why it
3387 has to be so confusing. Consider some of the things this level
3388 of confusion brings:
3390 Once I do a compare, I squeeze every ounce of juice out of it. I
3391 never do compare calls I don't have to do, and I certainly never
3394 I also never swap any elements unless I can prove there is a
3395 good reason. Many sort algorithms will swap a known value with
3396 an uncompared value just to get things in the right place (or
3397 avoid complexity :-), but that uncompared value, once it gets
3398 compared, may then have to be swapped again. A lot of the
3399 complexity of this code is due to the fact that it never swaps
3400 anything except compared values, and it only swaps them when the
3401 compare shows they are out of position.
3403 int pc_left, pc_right;
3404 int u_right, u_left;
3408 pc_left = ((part_left + part_right) / 2);
3410 u_right = pc_left - 1;
3411 u_left = pc_right + 1;
3413 /* Qsort works best when the pivot value is also the median value
3414 in the partition (unfortunately you can't find the median value
3415 without first sorting :-), so to give the algorithm a helping
3416 hand, we pick 3 elements and sort them and use the median value
3417 of that tiny set as the pivot value.
3419 Some versions of qsort like to use the left middle and right as
3420 the 3 elements to sort so they can insure the ends of the
3421 partition will contain values which will stop the scan in the
3422 compare loop, but when you have to call an arbitrarily complex
3423 routine to do a compare, its really better to just keep track of
3424 array index values to know when you hit the edge of the
3425 partition and avoid the extra compare. An even better reason to
3426 avoid using a compare call is the fact that you can drop off the
3427 edge of the array if someone foolishly provides you with an
3428 unstable compare function that doesn't always provide consistent
3431 So, since it is simpler for us to compare the three adjacent
3432 elements in the middle of the partition, those are the ones we
3433 pick here (conveniently pointed at by u_right, pc_left, and
3434 u_left). The values of the left, center, and right elements
3435 are refered to as l c and r in the following comments.
3438 #ifdef QSORT_ORDER_GUESS
3441 s = qsort_cmp(u_right, pc_left);
3444 s = qsort_cmp(pc_left, u_left);
3445 /* if l < c, c < r - already in order - nothing to do */
3447 /* l < c, c == r - already in order, pc grows */
3449 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3451 /* l < c, c > r - need to know more */
3452 s = qsort_cmp(u_right, u_left);
3454 /* l < c, c > r, l < r - swap c & r to get ordered */
3455 qsort_swap(pc_left, u_left);
3456 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3457 } else if (s == 0) {
3458 /* l < c, c > r, l == r - swap c&r, grow pc */
3459 qsort_swap(pc_left, u_left);
3461 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3463 /* l < c, c > r, l > r - make lcr into rlc to get ordered */
3464 qsort_rotate(pc_left, u_right, u_left);
3465 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3468 } else if (s == 0) {
3470 s = qsort_cmp(pc_left, u_left);
3472 /* l == c, c < r - already in order, grow pc */
3474 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3475 } else if (s == 0) {
3476 /* l == c, c == r - already in order, grow pc both ways */
3479 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3481 /* l == c, c > r - swap l & r, grow pc */
3482 qsort_swap(u_right, u_left);
3484 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3488 s = qsort_cmp(pc_left, u_left);
3490 /* l > c, c < r - need to know more */
3491 s = qsort_cmp(u_right, u_left);
3493 /* l > c, c < r, l < r - swap l & c to get ordered */
3494 qsort_swap(u_right, pc_left);
3495 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3496 } else if (s == 0) {
3497 /* l > c, c < r, l == r - swap l & c, grow pc */
3498 qsort_swap(u_right, pc_left);
3500 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3502 /* l > c, c < r, l > r - rotate lcr into crl to order */
3503 qsort_rotate(u_right, pc_left, u_left);
3504 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3506 } else if (s == 0) {
3507 /* l > c, c == r - swap ends, grow pc */
3508 qsort_swap(u_right, u_left);
3510 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3512 /* l > c, c > r - swap ends to get in order */
3513 qsort_swap(u_right, u_left);
3514 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3517 /* We now know the 3 middle elements have been compared and
3518 arranged in the desired order, so we can shrink the uncompared
3523 qsort_all_asserts(pc_left, pc_right, u_left, u_right);
3525 /* The above massive nested if was the simple part :-). We now have
3526 the middle 3 elements ordered and we need to scan through the
3527 uncompared sets on either side, swapping elements that are on
3528 the wrong side or simply shuffling equal elements around to get
3529 all equal elements into the pivot chunk.
3533 int still_work_on_left;
3534 int still_work_on_right;
3536 /* Scan the uncompared values on the left. If I find a value
3537 equal to the pivot value, move it over so it is adjacent to
3538 the pivot chunk and expand the pivot chunk. If I find a value
3539 less than the pivot value, then just leave it - its already
3540 on the correct side of the partition. If I find a greater
3541 value, then stop the scan.
3543 while (still_work_on_left = (u_right >= part_left)) {
3544 s = qsort_cmp(u_right, pc_left);
3547 } else if (s == 0) {
3549 if (pc_left != u_right) {
3550 qsort_swap(u_right, pc_left);
3556 qsort_assert(u_right < pc_left);
3557 qsort_assert(pc_left <= pc_right);
3558 qsort_assert(qsort_cmp(u_right + 1, pc_left) <= 0);
3559 qsort_assert(qsort_cmp(pc_left, pc_right) == 0);
3562 /* Do a mirror image scan of uncompared values on the right
3564 while (still_work_on_right = (u_left <= part_right)) {
3565 s = qsort_cmp(pc_right, u_left);
3568 } else if (s == 0) {
3570 if (pc_right != u_left) {
3571 qsort_swap(pc_right, u_left);
3577 qsort_assert(u_left > pc_right);
3578 qsort_assert(pc_left <= pc_right);
3579 qsort_assert(qsort_cmp(pc_right, u_left - 1) <= 0);
3580 qsort_assert(qsort_cmp(pc_left, pc_right) == 0);
3583 if (still_work_on_left) {
3584 /* I know I have a value on the left side which needs to be
3585 on the right side, but I need to know more to decide
3586 exactly the best thing to do with it.
3588 if (still_work_on_right) {
3589 /* I know I have values on both side which are out of
3590 position. This is a big win because I kill two birds
3591 with one swap (so to speak). I can advance the
3592 uncompared pointers on both sides after swapping both
3593 of them into the right place.
3595 qsort_swap(u_right, u_left);
3598 qsort_all_asserts(pc_left, pc_right, u_left, u_right);
3600 /* I have an out of position value on the left, but the
3601 right is fully scanned, so I "slide" the pivot chunk
3602 and any less-than values left one to make room for the
3603 greater value over on the right. If the out of position
3604 value is immediately adjacent to the pivot chunk (there
3605 are no less-than values), I can do that with a swap,
3606 otherwise, I have to rotate one of the less than values
3607 into the former position of the out of position value
3608 and the right end of the pivot chunk into the left end
3612 if (pc_left == u_right) {
3613 qsort_swap(u_right, pc_right);
3614 qsort_all_asserts(pc_left, pc_right-1, u_left, u_right-1);
3616 qsort_rotate(u_right, pc_left, pc_right);
3617 qsort_all_asserts(pc_left, pc_right-1, u_left, u_right-1);
3622 } else if (still_work_on_right) {
3623 /* Mirror image of complex case above: I have an out of
3624 position value on the right, but the left is fully
3625 scanned, so I need to shuffle things around to make room
3626 for the right value on the left.
3629 if (pc_right == u_left) {
3630 qsort_swap(u_left, pc_left);
3631 qsort_all_asserts(pc_left+1, pc_right, u_left+1, u_right);
3633 qsort_rotate(pc_right, pc_left, u_left);
3634 qsort_all_asserts(pc_left+1, pc_right, u_left+1, u_right);
3639 /* No more scanning required on either side of partition,
3640 break out of loop and figure out next set of partitions
3646 /* The elements in the pivot chunk are now in the right place. They
3647 will never move or be compared again. All I have to do is decide
3648 what to do with the stuff to the left and right of the pivot
3651 Notes on the QSORT_ORDER_GUESS ifdef code:
3653 1. If I just built these partitions without swapping any (or
3654 very many) elements, there is a chance that the elements are
3655 already ordered properly (being properly ordered will
3656 certainly result in no swapping, but the converse can't be
3659 2. A (properly written) insertion sort will run faster on
3660 already ordered data than qsort will.
3662 3. Perhaps there is some way to make a good guess about
3663 switching to an insertion sort earlier than partition size 6
3664 (for instance - we could save the partition size on the stack
3665 and increase the size each time we find we didn't swap, thus
3666 switching to insertion sort earlier for partitions with a
3667 history of not swapping).
3669 4. Naturally, if I just switch right away, it will make
3670 artificial benchmarks with pure ascending (or descending)
3671 data look really good, but is that a good reason in general?
3675 #ifdef QSORT_ORDER_GUESS
3677 #if QSORT_ORDER_GUESS == 1
3678 qsort_break_even = (part_right - part_left) + 1;
3680 #if QSORT_ORDER_GUESS == 2
3681 qsort_break_even *= 2;
3683 #if QSORT_ORDER_GUESS == 3
3684 int prev_break = qsort_break_even;
3685 qsort_break_even *= qsort_break_even;
3686 if (qsort_break_even < prev_break) {
3687 qsort_break_even = (part_right - part_left) + 1;
3691 qsort_break_even = QSORT_BREAK_EVEN;
3695 if (part_left < pc_left) {
3696 /* There are elements on the left which need more processing.
3697 Check the right as well before deciding what to do.
3699 if (pc_right < part_right) {
3700 /* We have two partitions to be sorted. Stack the biggest one
3701 and process the smallest one on the next iteration. This
3702 minimizes the stack height by insuring that any additional
3703 stack entries must come from the smallest partition which
3704 (because it is smallest) will have the fewest
3705 opportunities to generate additional stack entries.
3707 if ((part_right - pc_right) > (pc_left - part_left)) {
3708 /* stack the right partition, process the left */
3709 partition_stack[next_stack_entry].left = pc_right + 1;
3710 partition_stack[next_stack_entry].right = part_right;
3711 #ifdef QSORT_ORDER_GUESS
3712 partition_stack[next_stack_entry].qsort_break_even = qsort_break_even;
3714 part_right = pc_left - 1;
3716 /* stack the left partition, process the right */
3717 partition_stack[next_stack_entry].left = part_left;
3718 partition_stack[next_stack_entry].right = pc_left - 1;
3719 #ifdef QSORT_ORDER_GUESS
3720 partition_stack[next_stack_entry].qsort_break_even = qsort_break_even;
3722 part_left = pc_right + 1;
3724 qsort_assert(next_stack_entry < QSORT_MAX_STACK);
3727 /* The elements on the left are the only remaining elements
3728 that need sorting, arrange for them to be processed as the
3731 part_right = pc_left - 1;
3733 } else if (pc_right < part_right) {
3734 /* There is only one chunk on the right to be sorted, make it
3735 the new partition and loop back around.
3737 part_left = pc_right + 1;
3739 /* This whole partition wound up in the pivot chunk, so
3740 we need to get a new partition off the stack.
3742 if (next_stack_entry == 0) {
3743 /* the stack is empty - we are done */
3747 part_left = partition_stack[next_stack_entry].left;
3748 part_right = partition_stack[next_stack_entry].right;
3749 #ifdef QSORT_ORDER_GUESS
3750 qsort_break_even = partition_stack[next_stack_entry].qsort_break_even;
3754 /* This partition is too small to fool with qsort complexity, just
3755 do an ordinary insertion sort to minimize overhead.
3758 /* Assume 1st element is in right place already, and start checking
3759 at 2nd element to see where it should be inserted.
3761 for (i = part_left + 1; i <= part_right; ++i) {
3763 /* Scan (backwards - just in case 'i' is already in right place)
3764 through the elements already sorted to see if the ith element
3765 belongs ahead of one of them.
3767 for (j = i - 1; j >= part_left; --j) {
3768 if (qsort_cmp(i, j) >= 0) {
3769 /* i belongs right after j
3776 /* Looks like we really need to move some things
3780 for (k = i - 1; k >= j; --k)
3781 array[k + 1] = array[k];
3786 /* That partition is now sorted, grab the next one, or get out
3787 of the loop if there aren't any more.
3790 if (next_stack_entry == 0) {
3791 /* the stack is empty - we are done */
3795 part_left = partition_stack[next_stack_entry].left;
3796 part_right = partition_stack[next_stack_entry].right;
3797 #ifdef QSORT_ORDER_GUESS
3798 qsort_break_even = partition_stack[next_stack_entry].qsort_break_even;
3803 /* Believe it or not, the array is sorted at this point! */