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->*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 void save_lines _((AV *array, SV *sv));
40 static I32 sortcv _((SV *a, SV *b));
41 static void qsortsv _((SV **array, size_t num_elts, I32 (*fun)(SV *a, SV *b)));
42 static OP *doeval _((int gimme, OP** startop));
53 cxix = dopoptosub(cxstack_ix);
57 switch (cxstack[cxix].blk_gimme) {
74 register PMOP *pm = (PMOP*)cLOGOP->op_other;
78 MAGIC *mg = Null(MAGIC*);
82 SV *sv = SvRV(tmpstr);
84 mg = mg_find(sv, 'r');
87 regexp *re = (regexp *)mg->mg_obj;
88 ReREFCNT_dec(pm->op_pmregexp);
89 pm->op_pmregexp = ReREFCNT_inc(re);
92 t = SvPV(tmpstr, len);
94 /* JMR: Check against the last compiled regexp
95 To know for sure, we'd need the length of precomp.
96 But we don't have it, so we must ... take a guess. */
97 if (!pm->op_pmregexp || !pm->op_pmregexp->precomp ||
98 memNE(pm->op_pmregexp->precomp, t, len + 1))
100 if (pm->op_pmregexp) {
101 ReREFCNT_dec(pm->op_pmregexp);
102 pm->op_pmregexp = Null(REGEXP*); /* crucial if regcomp aborts */
105 pm->op_pmflags = pm->op_pmpermflags; /* reset case sensitivity */
106 pm->op_pmregexp = pregcomp(t, t + len, pm);
110 if (!pm->op_pmregexp->prelen && curpm)
112 else if (strEQ("\\s+", pm->op_pmregexp->precomp))
113 pm->op_pmflags |= PMf_WHITE;
115 if (pm->op_pmflags & PMf_KEEP) {
116 pm->op_private &= ~OPpRUNTIME; /* no point compiling again */
117 cLOGOP->op_first->op_next = op->op_next;
125 register PMOP *pm = (PMOP*) cLOGOP->op_other;
126 register PERL_CONTEXT *cx = &cxstack[cxstack_ix];
127 register SV *dstr = cx->sb_dstr;
128 register char *s = cx->sb_s;
129 register char *m = cx->sb_m;
130 char *orig = cx->sb_orig;
131 register REGEXP *rx = cx->sb_rx;
133 rxres_restore(&cx->sb_rxres, rx);
135 if (cx->sb_iters++) {
136 if (cx->sb_iters > cx->sb_maxiters)
137 DIE("Substitution loop");
139 if (!cx->sb_rxtainted)
140 cx->sb_rxtainted = SvTAINTED(TOPs);
141 sv_catsv(dstr, POPs);
144 if (cx->sb_once || !regexec_flags(rx, s, cx->sb_strend, orig,
145 s == m, Nullsv, NULL,
146 cx->sb_safebase ? 0 : REXEC_COPY_STR))
148 SV *targ = cx->sb_targ;
149 sv_catpvn(dstr, s, cx->sb_strend - s);
151 TAINT_IF(cx->sb_rxtainted || RX_MATCH_TAINTED(rx));
153 (void)SvOOK_off(targ);
154 Safefree(SvPVX(targ));
155 SvPVX(targ) = SvPVX(dstr);
156 SvCUR_set(targ, SvCUR(dstr));
157 SvLEN_set(targ, SvLEN(dstr));
160 (void)SvPOK_only(targ);
164 PUSHs(sv_2mortal(newSViv((I32)cx->sb_iters - 1)));
165 LEAVE_SCOPE(cx->sb_oldsave);
167 RETURNOP(pm->op_next);
170 if (rx->subbase && rx->subbase != orig) {
173 cx->sb_orig = orig = rx->subbase;
175 cx->sb_strend = s + (cx->sb_strend - m);
177 cx->sb_m = m = rx->startp[0];
178 sv_catpvn(dstr, s, m-s);
179 cx->sb_s = rx->endp[0];
180 cx->sb_rxtainted |= RX_MATCH_TAINTED(rx);
181 rxres_save(&cx->sb_rxres, rx);
182 RETURNOP(pm->op_pmreplstart);
186 rxres_save(void **rsp, REGEXP *rx)
191 if (!p || p[1] < rx->nparens) {
192 i = 6 + rx->nparens * 2;
200 *p++ = (UV)rx->subbase;
201 rx->subbase = Nullch;
205 *p++ = (UV)rx->subbeg;
206 *p++ = (UV)rx->subend;
207 for (i = 0; i <= rx->nparens; ++i) {
208 *p++ = (UV)rx->startp[i];
209 *p++ = (UV)rx->endp[i];
214 rxres_restore(void **rsp, REGEXP *rx)
219 Safefree(rx->subbase);
220 rx->subbase = (char*)(*p);
225 rx->subbeg = (char*)(*p++);
226 rx->subend = (char*)(*p++);
227 for (i = 0; i <= rx->nparens; ++i) {
228 rx->startp[i] = (char*)(*p++);
229 rx->endp[i] = (char*)(*p++);
234 rxres_free(void **rsp)
239 Safefree((char*)(*p));
247 djSP; dMARK; dORIGMARK;
248 register SV *tmpForm = *++MARK;
260 bool chopspace = (strchr(chopset, ' ') != Nullch);
267 if (!SvMAGICAL(tmpForm) || !SvCOMPILED(tmpForm)) {
268 SvREADONLY_off(tmpForm);
269 doparseform(tmpForm);
272 SvPV_force(formtarget, len);
273 t = SvGROW(formtarget, len + SvCUR(tmpForm) + 1); /* XXX SvCUR bad */
275 f = SvPV(tmpForm, len);
276 /* need to jump to the next word */
277 s = f + len + WORD_ALIGN - SvCUR(tmpForm) % WORD_ALIGN;
286 case FF_LITERAL: arg = fpc[1]; name = "LITERAL"; break;
287 case FF_BLANK: arg = fpc[1]; name = "BLANK"; break;
288 case FF_SKIP: arg = fpc[1]; name = "SKIP"; break;
289 case FF_FETCH: arg = fpc[1]; name = "FETCH"; break;
290 case FF_DECIMAL: arg = fpc[1]; name = "DECIMAL"; break;
292 case FF_CHECKNL: name = "CHECKNL"; break;
293 case FF_CHECKCHOP: name = "CHECKCHOP"; break;
294 case FF_SPACE: name = "SPACE"; break;
295 case FF_HALFSPACE: name = "HALFSPACE"; break;
296 case FF_ITEM: name = "ITEM"; break;
297 case FF_CHOP: name = "CHOP"; break;
298 case FF_LINEGLOB: name = "LINEGLOB"; break;
299 case FF_NEWLINE: name = "NEWLINE"; break;
300 case FF_MORE: name = "MORE"; break;
301 case FF_LINEMARK: name = "LINEMARK"; break;
302 case FF_END: name = "END"; break;
305 PerlIO_printf(PerlIO_stderr(), "%-16s%ld\n", name, (long) arg);
307 PerlIO_printf(PerlIO_stderr(), "%-16s\n", name);
336 warn("Not enough format arguments");
341 item = s = SvPV(sv, len);
343 if (itemsize > fieldsize)
344 itemsize = fieldsize;
345 send = chophere = s + itemsize;
357 item = s = SvPV(sv, len);
359 if (itemsize <= fieldsize) {
360 send = chophere = s + itemsize;
371 itemsize = fieldsize;
372 send = chophere = s + itemsize;
373 while (s < send || (s == send && isSPACE(*s))) {
383 if (strchr(chopset, *s))
388 itemsize = chophere - item;
393 arg = fieldsize - itemsize;
402 arg = fieldsize - itemsize;
416 int ch = *t++ = *s++;
420 if ( !((*t++ = *s++) & ~31) )
430 while (*s && isSPACE(*s))
437 item = s = SvPV(sv, len);
450 SvCUR_set(formtarget, t - SvPVX(formtarget));
451 sv_catpvn(formtarget, item, itemsize);
452 SvGROW(formtarget, SvCUR(formtarget) + SvCUR(tmpForm) + 1);
453 t = SvPVX(formtarget) + SvCUR(formtarget);
458 /* If the field is marked with ^ and the value is undefined,
461 if ((arg & 512) && !SvOK(sv)) {
469 /* Formats aren't yet marked for locales, so assume "yes". */
472 sprintf(t, "%#*.*f", (int) fieldsize, (int) arg & 255, value);
474 sprintf(t, "%*.0f", (int) fieldsize, value);
481 while (t-- > linemark && *t == ' ') ;
489 if (arg) { /* repeat until fields exhausted? */
491 SvCUR_set(formtarget, t - SvPVX(formtarget));
492 lines += FmLINES(formtarget);
495 if (strnEQ(linemark, linemark - arg, arg))
496 DIE("Runaway format");
498 FmLINES(formtarget) = lines;
500 RETURNOP(cLISTOP->op_first);
511 arg = fieldsize - itemsize;
518 if (strnEQ(s," ",3)) {
519 while (s > SvPVX(formtarget) && isSPACE(s[-1]))
530 SvCUR_set(formtarget, t - SvPVX(formtarget));
531 FmLINES(formtarget) += lines;
543 if (stack_base + *markstack_ptr == sp) {
545 if (GIMME_V == G_SCALAR)
547 RETURNOP(op->op_next->op_next);
549 stack_sp = stack_base + *markstack_ptr + 1;
550 pp_pushmark(ARGS); /* push dst */
551 pp_pushmark(ARGS); /* push src */
552 ENTER; /* enter outer scope */
556 /* SAVE_DEFSV does *not* suffice here */
557 save_sptr(&THREADSV(0));
559 SAVESPTR(GvSV(defgv));
560 #endif /* USE_THREADS */
561 ENTER; /* enter inner scope */
564 src = stack_base[*markstack_ptr];
569 if (op->op_type == OP_MAPSTART)
570 pp_pushmark(ARGS); /* push top */
571 return ((LOGOP*)op->op_next)->op_other;
576 DIE("panic: mapstart"); /* uses grepstart */
582 I32 diff = (sp - stack_base) - *markstack_ptr;
590 if (diff > markstack_ptr[-1] - markstack_ptr[-2]) {
591 shift = diff - (markstack_ptr[-1] - markstack_ptr[-2]);
592 count = (sp - stack_base) - markstack_ptr[-1] + 2;
597 markstack_ptr[-1] += shift;
598 *markstack_ptr += shift;
602 dst = stack_base + (markstack_ptr[-2] += diff) - 1;
605 *dst-- = SvTEMP(TOPs) ? POPs : sv_mortalcopy(POPs);
607 LEAVE; /* exit inner scope */
610 if (markstack_ptr[-1] > *markstack_ptr) {
614 (void)POPMARK; /* pop top */
615 LEAVE; /* exit outer scope */
616 (void)POPMARK; /* pop src */
617 items = --*markstack_ptr - markstack_ptr[-1];
618 (void)POPMARK; /* pop dst */
619 SP = stack_base + POPMARK; /* pop original mark */
620 if (gimme == G_SCALAR) {
624 else if (gimme == G_ARRAY)
631 ENTER; /* enter inner scope */
634 src = stack_base[markstack_ptr[-1]];
638 RETURNOP(cLOGOP->op_other);
644 djSP; dMARK; dORIGMARK;
646 SV **myorigmark = ORIGMARK;
652 OP* nextop = op->op_next;
654 if (gimme != G_ARRAY) {
659 if (op->op_flags & OPf_STACKED) {
661 if (op->op_flags & OPf_SPECIAL) {
662 OP *kid = cLISTOP->op_first->op_sibling; /* pass pushmark */
663 kid = kUNOP->op_first; /* pass rv2gv */
664 kid = kUNOP->op_first; /* pass leave */
665 sortcop = kid->op_next;
666 stash = curcop->cop_stash;
669 cv = sv_2cv(*++MARK, &stash, &gv, 0);
670 if (!(cv && CvROOT(cv))) {
672 SV *tmpstr = sv_newmortal();
673 gv_efullname3(tmpstr, gv, Nullch);
674 if (cv && CvXSUB(cv))
675 DIE("Xsub \"%s\" called in sort", SvPVX(tmpstr));
676 DIE("Undefined sort subroutine \"%s\" called",
681 DIE("Xsub called in sort");
682 DIE("Undefined subroutine in sort");
684 DIE("Not a CODE reference in sort");
686 sortcop = CvSTART(cv);
687 SAVESPTR(CvROOT(cv)->op_ppaddr);
688 CvROOT(cv)->op_ppaddr = ppaddr[OP_NULL];
691 curpad = AvARRAY((AV*)AvARRAY(CvPADLIST(cv))[1]);
696 stash = curcop->cop_stash;
700 while (MARK < SP) { /* This may or may not shift down one here. */
702 if (*up = *++MARK) { /* Weed out nulls. */
704 if (!sortcop && !SvPOK(*up))
705 (void)sv_2pv(*up, &na);
709 max = --up - myorigmark;
715 bool oldcatch = CATCH_GET;
723 AvREAL_off(sortstack);
724 av_extend(sortstack, 32);
727 SWITCHSTACK(curstack, sortstack);
728 if (sortstash != stash) {
729 firstgv = gv_fetchpv("a", TRUE, SVt_PV);
730 secondgv = gv_fetchpv("b", TRUE, SVt_PV);
734 SAVESPTR(GvSV(firstgv));
735 SAVESPTR(GvSV(secondgv));
737 PUSHBLOCK(cx, CXt_NULL, stack_base);
738 if (!(op->op_flags & OPf_SPECIAL)) {
739 bool hasargs = FALSE;
740 cx->cx_type = CXt_SUB;
741 cx->blk_gimme = G_SCALAR;
744 (void)SvREFCNT_inc(cv); /* in preparation for POPSUB */
746 sortcxix = cxstack_ix;
747 qsortsv((myorigmark+1), max, sortcv);
750 SWITCHSTACK(sortstack, oldstack);
757 MEXTEND(SP, 20); /* Can't afford stack realloc on signal. */
758 qsortsv(ORIGMARK+1, max,
759 (op->op_private & OPpLOCALE) ? sv_cmp_locale : sv_cmp);
762 stack_sp = ORIGMARK + max;
770 if (GIMME == G_ARRAY)
771 return cCONDOP->op_true;
772 return SvTRUEx(PAD_SV(op->op_targ)) ? cCONDOP->op_false : cCONDOP->op_true;
779 if (GIMME == G_ARRAY) {
780 RETURNOP(((CONDOP*)cUNOP->op_first)->op_false);
784 SV *targ = PAD_SV(op->op_targ);
786 if ((op->op_private & OPpFLIP_LINENUM)
787 ? last_in_gv && SvIV(sv) == IoLINES(GvIOp(last_in_gv))
789 sv_setiv(PAD_SV(cUNOP->op_first->op_targ), 1);
790 if (op->op_flags & OPf_SPECIAL) {
798 RETURNOP(((CONDOP*)cUNOP->op_first)->op_false);
811 if (GIMME == G_ARRAY) {
817 if (SvNIOKp(left) || !SvPOKp(left) ||
818 (looks_like_number(left) && *SvPVX(left) != '0') )
823 EXTEND_MORTAL(max - i + 1);
824 EXTEND(SP, max - i + 1);
827 sv = sv_2mortal(newSViv(i++));
832 SV *final = sv_mortalcopy(right);
834 char *tmps = SvPV(final, len);
836 sv = sv_mortalcopy(left);
837 while (!SvNIOKp(sv) && SvCUR(sv) <= len &&
838 strNE(SvPVX(sv),tmps) ) {
840 sv = sv_2mortal(newSVsv(sv));
843 if (strEQ(SvPVX(sv),tmps))
849 SV *targ = PAD_SV(cUNOP->op_first->op_targ);
851 if ((op->op_private & OPpFLIP_LINENUM)
852 ? last_in_gv && SvIV(sv) == IoLINES(GvIOp(last_in_gv))
854 sv_setiv(PAD_SV(((UNOP*)cUNOP->op_first)->op_first->op_targ), 0);
855 sv_catpv(targ, "E0");
866 dopoptolabel(char *label)
870 register PERL_CONTEXT *cx;
872 for (i = cxstack_ix; i >= 0; i--) {
874 switch (cx->cx_type) {
877 warn("Exiting substitution via %s", op_name[op->op_type]);
881 warn("Exiting subroutine via %s", op_name[op->op_type]);
885 warn("Exiting eval via %s", op_name[op->op_type]);
889 warn("Exiting pseudo-block via %s", op_name[op->op_type]);
892 if (!cx->blk_loop.label ||
893 strNE(label, cx->blk_loop.label) ) {
894 DEBUG_l(deb("(Skipping label #%ld %s)\n",
895 (long)i, cx->blk_loop.label));
898 DEBUG_l( deb("(Found label #%ld %s)\n", (long)i, label));
908 I32 gimme = block_gimme();
909 return (gimme == G_VOID) ? G_SCALAR : gimme;
918 cxix = dopoptosub(cxstack_ix);
922 switch (cxstack[cxix].blk_gimme) {
928 croak("panic: bad gimme: %d\n", cxstack[cxix].blk_gimme);
935 dopoptosub(I32 startingblock)
939 register PERL_CONTEXT *cx;
940 for (i = startingblock; i >= 0; i--) {
942 switch (cx->cx_type) {
947 DEBUG_l( deb("(Found sub #%ld)\n", (long)i));
955 dopoptoeval(I32 startingblock)
959 register PERL_CONTEXT *cx;
960 for (i = startingblock; i >= 0; i--) {
962 switch (cx->cx_type) {
966 DEBUG_l( deb("(Found eval #%ld)\n", (long)i));
974 dopoptoloop(I32 startingblock)
978 register PERL_CONTEXT *cx;
979 for (i = startingblock; i >= 0; i--) {
981 switch (cx->cx_type) {
984 warn("Exiting substitution via %s", op_name[op->op_type]);
988 warn("Exiting subroutine via %s", op_name[op->op_type]);
992 warn("Exiting eval via %s", op_name[op->op_type]);
996 warn("Exiting pseudo-block via %s", op_name[op->op_type]);
999 DEBUG_l( deb("(Found loop #%ld)\n", (long)i));
1010 register PERL_CONTEXT *cx;
1014 while (cxstack_ix > cxix) {
1015 cx = &cxstack[cxstack_ix];
1016 DEBUG_l(PerlIO_printf(Perl_debug_log, "Unwinding block %ld, type %s\n",
1017 (long) cxstack_ix+1, block_type[cx->cx_type]));
1018 /* Note: we don't need to restore the base context info till the end. */
1019 switch (cx->cx_type) {
1022 continue; /* not break */
1040 die_where(char *message)
1045 register PERL_CONTEXT *cx;
1051 STRLEN klen = strlen(message);
1053 svp = hv_fetch(ERRHV, message, klen, TRUE);
1056 static char prefix[] = "\t(in cleanup) ";
1058 sv_upgrade(*svp, SVt_IV);
1059 (void)SvIOK_only(*svp);
1062 SvGROW(err, SvCUR(err)+sizeof(prefix)+klen);
1063 sv_catpvn(err, prefix, sizeof(prefix)-1);
1064 sv_catpvn(err, message, klen);
1070 sv_setpv(ERRSV, message);
1072 cxix = dopoptoeval(cxstack_ix);
1076 if (cxix < cxstack_ix)
1080 if (cx->cx_type != CXt_EVAL) {
1081 PerlIO_printf(PerlIO_stderr(), "panic: die %s", message);
1086 if (gimme == G_SCALAR)
1087 *++newsp = &sv_undef;
1092 if (optype == OP_REQUIRE) {
1093 char* msg = SvPVx(ERRSV, na);
1094 DIE("%s", *msg ? msg : "Compilation failed in require");
1096 return pop_return();
1099 PerlIO_printf(PerlIO_stderr(), "%s",message);
1100 PerlIO_flush(PerlIO_stderr());
1109 if (SvTRUE(left) != SvTRUE(right))
1121 RETURNOP(cLOGOP->op_other);
1130 RETURNOP(cLOGOP->op_other);
1136 register I32 cxix = dopoptosub(cxstack_ix);
1137 register PERL_CONTEXT *cx;
1149 if (GIMME != G_ARRAY)
1153 if (DBsub && cxix >= 0 &&
1154 cxstack[cxix].blk_sub.cv == GvCV(DBsub))
1158 cxix = dopoptosub(cxix - 1);
1160 cx = &cxstack[cxix];
1161 if (cxstack[cxix].cx_type == CXt_SUB) {
1162 dbcxix = dopoptosub(cxix - 1);
1163 /* We expect that cxstack[dbcxix] is CXt_SUB, anyway, the
1164 field below is defined for any cx. */
1165 if (DBsub && dbcxix >= 0 && cxstack[dbcxix].blk_sub.cv == GvCV(DBsub))
1166 cx = &cxstack[dbcxix];
1169 if (GIMME != G_ARRAY) {
1170 hv = cx->blk_oldcop->cop_stash;
1175 sv_setpv(TARG, HvNAME(hv));
1181 hv = cx->blk_oldcop->cop_stash;
1185 PUSHs(sv_2mortal(newSVpv(HvNAME(hv), 0)));
1186 PUSHs(sv_2mortal(newSVpv(SvPVX(GvSV(cx->blk_oldcop->cop_filegv)), 0)));
1187 PUSHs(sv_2mortal(newSViv((I32)cx->blk_oldcop->cop_line)));
1190 if (cx->cx_type == CXt_SUB) { /* So is cxstack[dbcxix]. */
1192 gv_efullname3(sv, CvGV(cxstack[cxix].blk_sub.cv), Nullch);
1193 PUSHs(sv_2mortal(sv));
1194 PUSHs(sv_2mortal(newSViv((I32)cx->blk_sub.hasargs)));
1197 PUSHs(sv_2mortal(newSVpv("(eval)",0)));
1198 PUSHs(sv_2mortal(newSViv(0)));
1200 gimme = (I32)cx->blk_gimme;
1201 if (gimme == G_VOID)
1204 PUSHs(sv_2mortal(newSViv(gimme & G_ARRAY)));
1205 if (cx->cx_type == CXt_EVAL) {
1206 if (cx->blk_eval.old_op_type == OP_ENTEREVAL) {
1207 PUSHs(cx->blk_eval.cur_text);
1210 else if (cx->blk_eval.old_name) { /* Try blocks have old_name == 0. */
1211 /* Require, put the name. */
1212 PUSHs(sv_2mortal(newSVpv(cx->blk_eval.old_name, 0)));
1216 else if (cx->cx_type == CXt_SUB &&
1217 cx->blk_sub.hasargs &&
1218 curcop->cop_stash == debstash)
1220 AV *ary = cx->blk_sub.argarray;
1221 int off = AvARRAY(ary) - AvALLOC(ary);
1225 dbargs = GvAV(gv_AVadd(tmpgv = gv_fetchpv("DB::args", TRUE,
1228 AvREAL_off(dbargs); /* XXX Should be REIFY */
1231 if (AvMAX(dbargs) < AvFILLp(ary) + off)
1232 av_extend(dbargs, AvFILLp(ary) + off);
1233 Copy(AvALLOC(ary), AvARRAY(dbargs), AvFILLp(ary) + 1 + off, SV*);
1234 AvFILLp(dbargs) = AvFILLp(ary) + off;
1240 sortcv(SV *a, SV *b)
1243 I32 oldsaveix = savestack_ix;
1244 I32 oldscopeix = scopestack_ix;
1248 stack_sp = stack_base;
1251 if (stack_sp != stack_base + 1)
1252 croak("Sort subroutine didn't return single value");
1253 if (!SvNIOKp(*stack_sp))
1254 croak("Sort subroutine didn't return a numeric value");
1255 result = SvIV(*stack_sp);
1256 while (scopestack_ix > oldscopeix) {
1259 leave_scope(oldsaveix);
1272 sv_reset(tmps, curcop->cop_stash);
1285 TAINT_NOT; /* Each statement is presumed innocent */
1286 stack_sp = stack_base + cxstack[cxstack_ix].blk_oldsp;
1289 if (op->op_private || SvIV(DBsingle) || SvIV(DBsignal) || SvIV(DBtrace))
1293 register PERL_CONTEXT *cx;
1294 I32 gimme = G_ARRAY;
1301 DIE("No DB::DB routine defined");
1303 if (CvDEPTH(cv) >= 1 && !(debug & (1<<30))) /* don't do recursive DB::DB call */
1315 push_return(op->op_next);
1316 PUSHBLOCK(cx, CXt_SUB, sp);
1319 (void)SvREFCNT_inc(cv);
1321 curpad = AvARRAY((AV*)*av_fetch(CvPADLIST(cv),1,FALSE));
1322 RETURNOP(CvSTART(cv));
1336 register PERL_CONTEXT *cx;
1337 I32 gimme = GIMME_V;
1344 if (op->op_flags & OPf_SPECIAL)
1345 svp = save_threadsv(op->op_targ); /* per-thread variable */
1347 #endif /* USE_THREADS */
1349 svp = &curpad[op->op_targ]; /* "my" variable */
1353 svp = &GvSV((GV*)POPs); /* symbol table variable */
1359 PUSHBLOCK(cx, CXt_LOOP, SP);
1360 PUSHLOOP(cx, svp, MARK);
1361 if (op->op_flags & OPf_STACKED)
1362 cx->blk_loop.iterary = (AV*)SvREFCNT_inc(POPs);
1364 cx->blk_loop.iterary = curstack;
1365 AvFILLp(curstack) = sp - stack_base;
1366 cx->blk_loop.iterix = MARK - stack_base;
1375 register PERL_CONTEXT *cx;
1376 I32 gimme = GIMME_V;
1382 PUSHBLOCK(cx, CXt_LOOP, SP);
1383 PUSHLOOP(cx, 0, SP);
1391 register PERL_CONTEXT *cx;
1392 struct block_loop cxloop;
1400 POPLOOP1(cx); /* Delay POPLOOP2 until stack values are safe */
1403 if (gimme == G_VOID)
1405 else if (gimme == G_SCALAR) {
1407 *++newsp = sv_mortalcopy(*SP);
1409 *++newsp = &sv_undef;
1413 *++newsp = sv_mortalcopy(*++mark);
1414 TAINT_NOT; /* Each item is independent */
1420 POPLOOP2(); /* Stack values are safe: release loop vars ... */
1421 curpm = newpm; /* ... and pop $1 et al */
1433 register PERL_CONTEXT *cx;
1434 struct block_sub cxsub;
1435 bool popsub2 = FALSE;
1441 if (curstack == sortstack) {
1442 if (cxstack_ix == sortcxix || dopoptosub(cxstack_ix) <= sortcxix) {
1443 if (cxstack_ix > sortcxix)
1445 AvARRAY(curstack)[1] = *SP;
1446 stack_sp = stack_base + 1;
1451 cxix = dopoptosub(cxstack_ix);
1453 DIE("Can't return outside a subroutine");
1454 if (cxix < cxstack_ix)
1458 switch (cx->cx_type) {
1460 POPSUB1(cx); /* Delay POPSUB2 until stack values are safe */
1465 if (optype == OP_REQUIRE &&
1466 (MARK == SP || (gimme == G_SCALAR && !SvTRUE(*SP))) )
1468 /* Unassume the success we assumed earlier. */
1469 char *name = cx->blk_eval.old_name;
1470 (void)hv_delete(GvHVn(incgv), name, strlen(name), G_DISCARD);
1471 DIE("%s did not return a true value", name);
1475 DIE("panic: return");
1479 if (gimme == G_SCALAR) {
1481 *++newsp = (popsub2 && SvTEMP(*SP))
1482 ? *SP : sv_mortalcopy(*SP);
1484 *++newsp = &sv_undef;
1486 else if (gimme == G_ARRAY) {
1487 while (++MARK <= SP) {
1488 *++newsp = (popsub2 && SvTEMP(*MARK))
1489 ? *MARK : sv_mortalcopy(*MARK);
1490 TAINT_NOT; /* Each item is independent */
1495 /* Stack values are safe: */
1497 POPSUB2(); /* release CV and @_ ... */
1499 curpm = newpm; /* ... and pop $1 et al */
1502 return pop_return();
1509 register PERL_CONTEXT *cx;
1510 struct block_loop cxloop;
1511 struct block_sub cxsub;
1518 SV **mark = stack_base + cxstack[cxstack_ix].blk_oldsp;
1520 if (op->op_flags & OPf_SPECIAL) {
1521 cxix = dopoptoloop(cxstack_ix);
1523 DIE("Can't \"last\" outside a block");
1526 cxix = dopoptolabel(cPVOP->op_pv);
1528 DIE("Label not found for \"last %s\"", cPVOP->op_pv);
1530 if (cxix < cxstack_ix)
1534 switch (cx->cx_type) {
1536 POPLOOP1(cx); /* Delay POPLOOP2 until stack values are safe */
1538 nextop = cxloop.last_op->op_next;
1541 POPSUB1(cx); /* Delay POPSUB2 until stack values are safe */
1543 nextop = pop_return();
1547 nextop = pop_return();
1554 if (gimme == G_SCALAR) {
1556 *++newsp = ((pop2 == CXt_SUB) && SvTEMP(*SP))
1557 ? *SP : sv_mortalcopy(*SP);
1559 *++newsp = &sv_undef;
1561 else if (gimme == G_ARRAY) {
1562 while (++MARK <= SP) {
1563 *++newsp = ((pop2 == CXt_SUB) && SvTEMP(*MARK))
1564 ? *MARK : sv_mortalcopy(*MARK);
1565 TAINT_NOT; /* Each item is independent */
1571 /* Stack values are safe: */
1574 POPLOOP2(); /* release loop vars ... */
1578 POPSUB2(); /* release CV and @_ ... */
1581 curpm = newpm; /* ... and pop $1 et al */
1590 register PERL_CONTEXT *cx;
1593 if (op->op_flags & OPf_SPECIAL) {
1594 cxix = dopoptoloop(cxstack_ix);
1596 DIE("Can't \"next\" outside a block");
1599 cxix = dopoptolabel(cPVOP->op_pv);
1601 DIE("Label not found for \"next %s\"", cPVOP->op_pv);
1603 if (cxix < cxstack_ix)
1607 oldsave = scopestack[scopestack_ix - 1];
1608 LEAVE_SCOPE(oldsave);
1609 return cx->blk_loop.next_op;
1615 register PERL_CONTEXT *cx;
1618 if (op->op_flags & OPf_SPECIAL) {
1619 cxix = dopoptoloop(cxstack_ix);
1621 DIE("Can't \"redo\" outside a block");
1624 cxix = dopoptolabel(cPVOP->op_pv);
1626 DIE("Label not found for \"redo %s\"", cPVOP->op_pv);
1628 if (cxix < cxstack_ix)
1632 oldsave = scopestack[scopestack_ix - 1];
1633 LEAVE_SCOPE(oldsave);
1634 return cx->blk_loop.redo_op;
1637 static OP* lastgotoprobe;
1640 dofindlabel(OP *o, char *label, OP **opstack, OP **oplimit)
1644 static char too_deep[] = "Target of goto is too deeply nested";
1648 if (o->op_type == OP_LEAVE ||
1649 o->op_type == OP_SCOPE ||
1650 o->op_type == OP_LEAVELOOP ||
1651 o->op_type == OP_LEAVETRY)
1653 *ops++ = cUNOPo->op_first;
1658 if (o->op_flags & OPf_KIDS) {
1659 /* First try all the kids at this level, since that's likeliest. */
1660 for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling) {
1661 if ((kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) &&
1662 kCOP->cop_label && strEQ(kCOP->cop_label, label))
1665 for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling) {
1666 if (kid == lastgotoprobe)
1668 if ((kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) &&
1670 (ops[-1]->op_type != OP_NEXTSTATE &&
1671 ops[-1]->op_type != OP_DBSTATE)))
1673 if (o = dofindlabel(kid, label, ops, oplimit))
1683 return pp_goto(ARGS);
1692 register PERL_CONTEXT *cx;
1693 #define GOTO_DEPTH 64
1694 OP *enterops[GOTO_DEPTH];
1696 int do_dump = (op->op_type == OP_DUMP);
1699 if (op->op_flags & OPf_STACKED) {
1702 /* This egregious kludge implements goto &subroutine */
1703 if (SvROK(sv) && SvTYPE(SvRV(sv)) == SVt_PVCV) {
1705 register PERL_CONTEXT *cx;
1706 CV* cv = (CV*)SvRV(sv);
1711 if (!CvROOT(cv) && !CvXSUB(cv)) {
1713 SV *tmpstr = sv_newmortal();
1714 gv_efullname3(tmpstr, CvGV(cv), Nullch);
1715 DIE("Goto undefined subroutine &%s",SvPVX(tmpstr));
1717 DIE("Goto undefined subroutine");
1720 /* First do some returnish stuff. */
1721 cxix = dopoptosub(cxstack_ix);
1723 DIE("Can't goto subroutine outside a subroutine");
1724 if (cxix < cxstack_ix)
1728 if (cx->blk_sub.hasargs) { /* put @_ back onto stack */
1729 AV* av = cx->blk_sub.argarray;
1731 items = AvFILLp(av) + 1;
1733 EXTEND(stack_sp, items); /* @_ could have been extended. */
1734 Copy(AvARRAY(av), stack_sp, items, SV*);
1737 SvREFCNT_dec(GvAV(defgv));
1738 GvAV(defgv) = cx->blk_sub.savearray;
1739 #endif /* USE_THREADS */
1743 if (!(CvDEPTH(cx->blk_sub.cv) = cx->blk_sub.olddepth))
1744 SvREFCNT_dec(cx->blk_sub.cv);
1745 oldsave = scopestack[scopestack_ix - 1];
1746 LEAVE_SCOPE(oldsave);
1748 /* Now do some callish stuff. */
1751 if (CvOLDSTYLE(cv)) {
1752 I32 (*fp3)_((int,int,int));
1757 fp3 = (I32(*)_((int,int,int)))CvXSUB(cv);
1758 items = (*fp3)(CvXSUBANY(cv).any_i32,
1759 mark - stack_base + 1,
1761 sp = stack_base + items;
1764 stack_sp--; /* There is no cv arg. */
1765 (void)(*CvXSUB(cv))(THIS_ cv);
1768 return pop_return();
1771 AV* padlist = CvPADLIST(cv);
1772 SV** svp = AvARRAY(padlist);
1773 cx->blk_sub.cv = cv;
1774 cx->blk_sub.olddepth = CvDEPTH(cv);
1776 if (CvDEPTH(cv) < 2)
1777 (void)SvREFCNT_inc(cv);
1778 else { /* save temporaries on recursion? */
1779 if (CvDEPTH(cv) == 100 && dowarn)
1780 sub_crush_depth(cv);
1781 if (CvDEPTH(cv) > AvFILLp(padlist)) {
1782 AV *newpad = newAV();
1783 SV **oldpad = AvARRAY(svp[CvDEPTH(cv)-1]);
1784 I32 ix = AvFILLp((AV*)svp[1]);
1785 svp = AvARRAY(svp[0]);
1786 for ( ;ix > 0; ix--) {
1787 if (svp[ix] != &sv_undef) {
1788 char *name = SvPVX(svp[ix]);
1789 if ((SvFLAGS(svp[ix]) & SVf_FAKE)
1792 /* outer lexical or anon code */
1793 av_store(newpad, ix,
1794 SvREFCNT_inc(oldpad[ix]) );
1796 else { /* our own lexical */
1798 av_store(newpad, ix, sv = (SV*)newAV());
1799 else if (*name == '%')
1800 av_store(newpad, ix, sv = (SV*)newHV());
1802 av_store(newpad, ix, sv = NEWSV(0,0));
1807 av_store(newpad, ix, sv = NEWSV(0,0));
1811 if (cx->blk_sub.hasargs) {
1814 av_store(newpad, 0, (SV*)av);
1815 AvFLAGS(av) = AVf_REIFY;
1817 av_store(padlist, CvDEPTH(cv), (SV*)newpad);
1818 AvFILLp(padlist) = CvDEPTH(cv);
1819 svp = AvARRAY(padlist);
1823 if (!cx->blk_sub.hasargs) {
1824 AV* av = (AV*)curpad[0];
1826 items = AvFILLp(av) + 1;
1828 /* Mark is at the end of the stack. */
1830 Copy(AvARRAY(av), sp + 1, items, SV*);
1835 #endif /* USE_THREADS */
1837 curpad = AvARRAY((AV*)svp[CvDEPTH(cv)]);
1839 if (cx->blk_sub.hasargs)
1840 #endif /* USE_THREADS */
1842 AV* av = (AV*)curpad[0];
1846 cx->blk_sub.savearray = GvAV(defgv);
1847 GvAV(defgv) = (AV*)SvREFCNT_inc(av);
1848 #endif /* USE_THREADS */
1849 cx->blk_sub.argarray = av;
1852 if (items >= AvMAX(av) + 1) {
1854 if (AvARRAY(av) != ary) {
1855 AvMAX(av) += AvARRAY(av) - AvALLOC(av);
1856 SvPVX(av) = (char*)ary;
1858 if (items >= AvMAX(av) + 1) {
1859 AvMAX(av) = items - 1;
1860 Renew(ary,items+1,SV*);
1862 SvPVX(av) = (char*)ary;
1865 Copy(mark,AvARRAY(av),items,SV*);
1866 AvFILLp(av) = items - 1;
1874 if (PERLDB_SUB && curstash != debstash) {
1876 * We do not care about using sv to call CV;
1877 * it's for informational purposes only.
1879 SV *sv = GvSV(DBsub);
1881 gv_efullname3(sv, CvGV(cv), Nullch);
1883 RETURNOP(CvSTART(cv));
1887 label = SvPV(sv,na);
1889 else if (op->op_flags & OPf_SPECIAL) {
1891 DIE("goto must have label");
1894 label = cPVOP->op_pv;
1896 if (label && *label) {
1903 for (ix = cxstack_ix; ix >= 0; ix--) {
1905 switch (cx->cx_type) {
1907 gotoprobe = eval_root; /* XXX not good for nested eval */
1910 gotoprobe = cx->blk_oldcop->op_sibling;
1916 gotoprobe = cx->blk_oldcop->op_sibling;
1918 gotoprobe = main_root;
1921 if (CvDEPTH(cx->blk_sub.cv)) {
1922 gotoprobe = CvROOT(cx->blk_sub.cv);
1927 DIE("Can't \"goto\" outside a block");
1931 gotoprobe = main_root;
1934 retop = dofindlabel(gotoprobe, label,
1935 enterops, enterops + GOTO_DEPTH);
1938 lastgotoprobe = gotoprobe;
1941 DIE("Can't find label %s", label);
1943 /* pop unwanted frames */
1945 if (ix < cxstack_ix) {
1952 oldsave = scopestack[scopestack_ix];
1953 LEAVE_SCOPE(oldsave);
1956 /* push wanted frames */
1958 if (*enterops && enterops[1]) {
1960 for (ix = 1; enterops[ix]; ix++) {
1962 /* Eventually we may want to stack the needed arguments
1963 * for each op. For now, we punt on the hard ones. */
1964 if (op->op_type == OP_ENTERITER)
1965 DIE("Can't \"goto\" into the middle of a foreach loop",
1967 (CALLOP->op_ppaddr)(ARGS);
1975 if (!retop) retop = main_start;
1982 restartop = 0; /* hmm, must be GNU unexec().. */
1986 if (curstack == signalstack) {
2004 if (anum == 1 && VMSISH_EXIT)
2017 double value = SvNVx(GvSV(cCOP->cop_gv));
2018 register I32 match = I_32(value);
2021 if (((double)match) > value)
2022 --match; /* was fractional--truncate other way */
2024 match -= cCOP->uop.scop.scop_offset;
2027 else if (match > cCOP->uop.scop.scop_max)
2028 match = cCOP->uop.scop.scop_max;
2029 op = cCOP->uop.scop.scop_next[match];
2039 op = op->op_next; /* can't assume anything */
2041 match = *(SvPVx(GvSV(cCOP->cop_gv), na)) & 255;
2042 match -= cCOP->uop.scop.scop_offset;
2045 else if (match > cCOP->uop.scop.scop_max)
2046 match = cCOP->uop.scop.scop_max;
2047 op = cCOP->uop.scop.scop_next[match];
2056 save_lines(AV *array, SV *sv)
2058 register char *s = SvPVX(sv);
2059 register char *send = SvPVX(sv) + SvCUR(sv);
2061 register I32 line = 1;
2063 while (s && s < send) {
2064 SV *tmpstr = NEWSV(85,0);
2066 sv_upgrade(tmpstr, SVt_PVMG);
2067 t = strchr(s, '\n');
2073 sv_setpvn(tmpstr, s, t - s);
2074 av_store(array, line++, tmpstr);
2089 assert(CATCH_GET == TRUE);
2090 DEBUG_l(deb("Setting up local jumplevel %p, was %p\n", &cur_env, top_env));
2094 default: /* topmost level handles it */
2101 PerlIO_printf(PerlIO_stderr(), "panic: restartop\n");
2117 sv_compile_2op(SV *sv, OP** startop, char *code, AV** avp)
2118 /* sv Text to convert to OP tree. */
2119 /* startop op_free() this to undo. */
2120 /* code Short string id of the caller. */
2122 dSP; /* Make POPBLOCK work. */
2125 I32 gimme = 0; /* SUSPECT - INITIALZE TO WHAT? NI-S */
2129 char tmpbuf[TYPE_DIGITS(long) + 12 + 10];
2135 /* switch to eval mode */
2137 SAVESPTR(compiling.cop_filegv);
2138 SAVEI16(compiling.cop_line);
2139 sprintf(tmpbuf, "_<(%.10s_eval %lu)", code, (unsigned long)++evalseq);
2140 compiling.cop_filegv = gv_fetchfile(tmpbuf+2);
2141 compiling.cop_line = 1;
2142 /* XXX For C<eval "...">s within BEGIN {} blocks, this ends up
2143 deleting the eval's FILEGV from the stash before gv_check() runs
2144 (i.e. before run-time proper). To work around the coredump that
2145 ensues, we always turn GvMULTI_on for any globals that were
2146 introduced within evals. See force_ident(). GSAR 96-10-12 */
2147 safestr = savepv(tmpbuf);
2148 SAVEDELETE(defstash, safestr, strlen(safestr));
2154 op->op_type = 0; /* Avoid uninit warning. */
2155 op->op_flags = 0; /* Avoid uninit warning. */
2156 PUSHBLOCK(cx, CXt_EVAL, SP);
2157 PUSHEVAL(cx, 0, compiling.cop_filegv);
2158 rop = doeval(G_SCALAR, startop);
2162 (*startop)->op_type = OP_NULL;
2163 (*startop)->op_ppaddr = ppaddr[OP_NULL];
2165 *avp = (AV*)SvREFCNT_inc(comppad);
2170 /* With USE_THREADS, eval_owner must be held on entry to doeval */
2172 doeval(int gimme, OP** startop)
2185 /* set up a scratch pad */
2190 SAVESPTR(comppad_name);
2191 SAVEI32(comppad_name_fill);
2192 SAVEI32(min_intro_pending);
2193 SAVEI32(max_intro_pending);
2196 for (i = cxstack_ix - 1; i >= 0; i--) {
2197 PERL_CONTEXT *cx = &cxstack[i];
2198 if (cx->cx_type == CXt_EVAL)
2200 else if (cx->cx_type == CXt_SUB) {
2201 caller = cx->blk_sub.cv;
2207 compcv = (CV*)NEWSV(1104,0);
2208 sv_upgrade((SV *)compcv, SVt_PVCV);
2209 CvUNIQUE_on(compcv);
2211 CvOWNER(compcv) = 0;
2212 New(666, CvMUTEXP(compcv), 1, perl_mutex);
2213 MUTEX_INIT(CvMUTEXP(compcv));
2214 #endif /* USE_THREADS */
2217 av_push(comppad, Nullsv);
2218 curpad = AvARRAY(comppad);
2219 comppad_name = newAV();
2220 comppad_name_fill = 0;
2221 min_intro_pending = 0;
2224 av_store(comppad_name, 0, newSVpv("@_", 2));
2225 curpad[0] = (SV*)newAV();
2226 SvPADMY_on(curpad[0]); /* XXX Needed? */
2227 #endif /* USE_THREADS */
2229 comppadlist = newAV();
2230 AvREAL_off(comppadlist);
2231 av_store(comppadlist, 0, (SV*)comppad_name);
2232 av_store(comppadlist, 1, (SV*)comppad);
2233 CvPADLIST(compcv) = comppadlist;
2235 if (!saveop || saveop->op_type != OP_REQUIRE)
2236 CvOUTSIDE(compcv) = (CV*)SvREFCNT_inc(caller);
2240 /* make sure we compile in the right package */
2242 newstash = curcop->cop_stash;
2243 if (curstash != newstash) {
2245 curstash = newstash;
2249 SAVEFREESV(beginav);
2251 /* try to compile it */
2255 curcop = &compiling;
2256 curcop->cop_arybase = 0;
2258 rs = newSVpv("\n", 1);
2259 if (saveop && saveop->op_flags & OPf_SPECIAL)
2263 if (yyparse() || error_count || !eval_root) {
2267 I32 optype = 0; /* Might be reset by POPEVAL. */
2274 SP = stack_base + POPMARK; /* pop original mark */
2282 if (optype == OP_REQUIRE) {
2283 char* msg = SvPVx(ERRSV, na);
2284 DIE("%s", *msg ? msg : "Compilation failed in require");
2285 } else if (startop) {
2286 char* msg = SvPVx(ERRSV, na);
2290 croak("%sCompilation failed in regexp", (*msg ? msg : "Unknown error\n"));
2293 rs = SvREFCNT_inc(nrs);
2295 MUTEX_LOCK(&eval_mutex);
2297 COND_SIGNAL(&eval_cond);
2298 MUTEX_UNLOCK(&eval_mutex);
2299 #endif /* USE_THREADS */
2303 rs = SvREFCNT_inc(nrs);
2304 compiling.cop_line = 0;
2306 *startop = eval_root;
2307 SvREFCNT_dec(CvOUTSIDE(compcv));
2308 CvOUTSIDE(compcv) = Nullcv;
2310 SAVEFREEOP(eval_root);
2312 scalarvoid(eval_root);
2313 else if (gimme & G_ARRAY)
2318 DEBUG_x(dump_eval());
2320 /* Register with debugger: */
2321 if (PERLDB_INTER && saveop->op_type == OP_REQUIRE) {
2322 CV *cv = perl_get_cv("DB::postponed", FALSE);
2326 XPUSHs((SV*)compiling.cop_filegv);
2328 perl_call_sv((SV*)cv, G_DISCARD);
2332 /* compiled okay, so do it */
2334 CvDEPTH(compcv) = 1;
2335 SP = stack_base + POPMARK; /* pop original mark */
2336 op = saveop; /* The caller may need it. */
2338 MUTEX_LOCK(&eval_mutex);
2340 COND_SIGNAL(&eval_cond);
2341 MUTEX_UNLOCK(&eval_mutex);
2342 #endif /* USE_THREADS */
2344 RETURNOP(eval_start);
2350 register PERL_CONTEXT *cx;
2354 SV *namesv = Nullsv;
2356 I32 gimme = G_SCALAR;
2357 PerlIO *tryrsfp = 0;
2360 if (SvNIOKp(sv) && !SvPOKp(sv)) {
2361 SET_NUMERIC_STANDARD();
2362 if (atof(patchlevel) + 0.00000999 < SvNV(sv))
2363 DIE("Perl %s required--this is only version %s, stopped",
2364 SvPV(sv,na),patchlevel);
2367 name = SvPV(sv, na);
2369 DIE("Null filename used");
2370 TAINT_PROPER("require");
2371 if (op->op_type == OP_REQUIRE &&
2372 (svp = hv_fetch(GvHVn(incgv), name, SvCUR(sv), 0)) &&
2376 /* prepare to compile file */
2381 (name[1] == '.' && name[2] == '/')))
2383 || (name[0] && name[1] == ':')
2386 || (name[0] == '\\' && name[1] == '\\') /* UNC path */
2389 || (strchr(name,':') || ((*name == '[' || *name == '<') &&
2390 (isALNUM(name[1]) || strchr("$-_]>",name[1]))))
2395 tryrsfp = PerlIO_open(name,PERL_SCRIPT_MODE);
2398 AV *ar = GvAVn(incgv);
2402 if ((unixname = tounixspec(name, Nullch)) != Nullch)
2405 namesv = NEWSV(806, 0);
2406 for (i = 0; i <= AvFILL(ar); i++) {
2407 char *dir = SvPVx(*av_fetch(ar, i, TRUE), na);
2410 if ((unixdir = tounixpath(dir, Nullch)) == Nullch)
2412 sv_setpv(namesv, unixdir);
2413 sv_catpv(namesv, unixname);
2415 sv_setpvf(namesv, "%s/%s", dir, name);
2417 tryname = SvPVX(namesv);
2418 tryrsfp = PerlIO_open(tryname, PERL_SCRIPT_MODE);
2420 if (tryname[0] == '.' && tryname[1] == '/')
2427 SAVESPTR(compiling.cop_filegv);
2428 compiling.cop_filegv = gv_fetchfile(tryrsfp ? tryname : name);
2429 SvREFCNT_dec(namesv);
2431 if (op->op_type == OP_REQUIRE) {
2432 SV *msg = sv_2mortal(newSVpvf("Can't locate %s in @INC", name));
2433 SV *dirmsgsv = NEWSV(0, 0);
2434 AV *ar = GvAVn(incgv);
2436 if (instr(SvPVX(msg), ".h "))
2437 sv_catpv(msg, " (change .h to .ph maybe?)");
2438 if (instr(SvPVX(msg), ".ph "))
2439 sv_catpv(msg, " (did you run h2ph?)");
2440 sv_catpv(msg, " (@INC contains:");
2441 for (i = 0; i <= AvFILL(ar); i++) {
2442 char *dir = SvPVx(*av_fetch(ar, i, TRUE), na);
2443 sv_setpvf(dirmsgsv, " %s", dir);
2444 sv_catsv(msg, dirmsgsv);
2446 sv_catpvn(msg, ")", 1);
2447 SvREFCNT_dec(dirmsgsv);
2454 /* Assume success here to prevent recursive requirement. */
2455 (void)hv_store(GvHVn(incgv), name, strlen(name),
2456 newSVsv(GvSV(compiling.cop_filegv)), 0 );
2460 lex_start(sv_2mortal(newSVpv("",0)));
2462 save_aptr(&rsfp_filters);
2463 rsfp_filters = NULL;
2467 name = savepv(name);
2472 /* switch to eval mode */
2474 push_return(op->op_next);
2475 PUSHBLOCK(cx, CXt_EVAL, SP);
2476 PUSHEVAL(cx, name, compiling.cop_filegv);
2478 compiling.cop_line = 0;
2482 MUTEX_LOCK(&eval_mutex);
2483 if (eval_owner && eval_owner != thr)
2485 COND_WAIT(&eval_cond, &eval_mutex);
2487 MUTEX_UNLOCK(&eval_mutex);
2488 #endif /* USE_THREADS */
2489 return DOCATCH(doeval(G_SCALAR, NULL));
2494 return pp_require(ARGS);
2500 register PERL_CONTEXT *cx;
2502 I32 gimme = GIMME_V, was = sub_generation;
2503 char tmpbuf[TYPE_DIGITS(long) + 12];
2508 if (!SvPV(sv,len) || !len)
2510 TAINT_PROPER("eval");
2516 /* switch to eval mode */
2518 SAVESPTR(compiling.cop_filegv);
2519 sprintf(tmpbuf, "_<(eval %lu)", (unsigned long)++evalseq);
2520 compiling.cop_filegv = gv_fetchfile(tmpbuf+2);
2521 compiling.cop_line = 1;
2522 /* XXX For C<eval "...">s within BEGIN {} blocks, this ends up
2523 deleting the eval's FILEGV from the stash before gv_check() runs
2524 (i.e. before run-time proper). To work around the coredump that
2525 ensues, we always turn GvMULTI_on for any globals that were
2526 introduced within evals. See force_ident(). GSAR 96-10-12 */
2527 safestr = savepv(tmpbuf);
2528 SAVEDELETE(defstash, safestr, strlen(safestr));
2530 hints = op->op_targ;
2532 push_return(op->op_next);
2533 PUSHBLOCK(cx, CXt_EVAL, SP);
2534 PUSHEVAL(cx, 0, compiling.cop_filegv);
2536 /* prepare to compile string */
2538 if (PERLDB_LINE && curstash != debstash)
2539 save_lines(GvAV(compiling.cop_filegv), linestr);
2542 MUTEX_LOCK(&eval_mutex);
2543 if (eval_owner && eval_owner != thr)
2545 COND_WAIT(&eval_cond, &eval_mutex);
2547 MUTEX_UNLOCK(&eval_mutex);
2548 #endif /* USE_THREADS */
2549 ret = doeval(gimme, NULL);
2550 if (PERLDB_INTER && was != sub_generation /* Some subs defined here. */
2551 && ret != op->op_next) { /* Successive compilation. */
2552 strcpy(safestr, "_<(eval )"); /* Anything fake and short. */
2554 return DOCATCH(ret);
2564 register PERL_CONTEXT *cx;
2566 U8 save_flags = op -> op_flags;
2571 retop = pop_return();
2574 if (gimme == G_VOID)
2576 else if (gimme == G_SCALAR) {
2579 if (SvFLAGS(TOPs) & SVs_TEMP)
2582 *MARK = sv_mortalcopy(TOPs);
2590 /* in case LEAVE wipes old return values */
2591 for (mark = newsp + 1; mark <= SP; mark++) {
2592 if (!(SvFLAGS(*mark) & SVs_TEMP)) {
2593 *mark = sv_mortalcopy(*mark);
2594 TAINT_NOT; /* Each item is independent */
2598 curpm = newpm; /* Don't pop $1 et al till now */
2601 * Closures mentioned at top level of eval cannot be referenced
2602 * again, and their presence indirectly causes a memory leak.
2603 * (Note that the fact that compcv and friends are still set here
2604 * is, AFAIK, an accident.) --Chip
2606 if (AvFILLp(comppad_name) >= 0) {
2607 SV **svp = AvARRAY(comppad_name);
2609 for (ix = AvFILLp(comppad_name); ix >= 0; ix--) {
2611 if (sv && sv != &sv_undef && *SvPVX(sv) == '&') {
2613 svp[ix] = &sv_undef;
2617 SvREFCNT_dec(CvOUTSIDE(sv));
2618 CvOUTSIDE(sv) = Nullcv;
2631 assert(CvDEPTH(compcv) == 1);
2633 CvDEPTH(compcv) = 0;
2635 if (optype == OP_REQUIRE &&
2636 !(gimme == G_SCALAR ? SvTRUE(*sp) : sp > newsp))
2638 /* Unassume the success we assumed earlier. */
2639 char *name = cx->blk_eval.old_name;
2640 (void)hv_delete(GvHVn(incgv), name, strlen(name), G_DISCARD);
2641 retop = die("%s did not return a true value", name);
2647 if (!(save_flags & OPf_SPECIAL))
2656 register PERL_CONTEXT *cx;
2657 I32 gimme = GIMME_V;
2662 push_return(cLOGOP->op_other->op_next);
2663 PUSHBLOCK(cx, CXt_EVAL, SP);
2665 eval_root = op; /* Only needed so that goto works right. */
2670 return DOCATCH(op->op_next);
2680 register PERL_CONTEXT *cx;
2688 if (gimme == G_VOID)
2690 else if (gimme == G_SCALAR) {
2693 if (SvFLAGS(TOPs) & (SVs_PADTMP|SVs_TEMP))
2696 *MARK = sv_mortalcopy(TOPs);
2705 /* in case LEAVE wipes old return values */
2706 for (mark = newsp + 1; mark <= SP; mark++) {
2707 if (!(SvFLAGS(*mark) & (SVs_PADTMP|SVs_TEMP))) {
2708 *mark = sv_mortalcopy(*mark);
2709 TAINT_NOT; /* Each item is independent */
2713 curpm = newpm; /* Don't pop $1 et al till now */
2724 register char *s = SvPV_force(sv, len);
2725 register char *send = s + len;
2726 register char *base;
2727 register I32 skipspaces = 0;
2730 bool postspace = FALSE;
2738 croak("Null picture in formline");
2740 New(804, fops, (send - s)*3+10, U16); /* Almost certainly too long... */
2745 *fpc++ = FF_LINEMARK;
2746 noblank = repeat = FALSE;
2764 case ' ': case '\t':
2775 *fpc++ = FF_LITERAL;
2783 *fpc++ = skipspaces;
2787 *fpc++ = FF_NEWLINE;
2791 arg = fpc - linepc + 1;
2798 *fpc++ = FF_LINEMARK;
2799 noblank = repeat = FALSE;
2808 ischop = s[-1] == '^';
2814 arg = (s - base) - 1;
2816 *fpc++ = FF_LITERAL;
2825 *fpc++ = FF_LINEGLOB;
2827 else if (*s == '#' || (*s == '.' && s[1] == '#')) {
2828 arg = ischop ? 512 : 0;
2838 arg |= 256 + (s - f);
2840 *fpc++ = s - base; /* fieldsize for FETCH */
2841 *fpc++ = FF_DECIMAL;
2846 bool ismore = FALSE;
2849 while (*++s == '>') ;
2850 prespace = FF_SPACE;
2852 else if (*s == '|') {
2853 while (*++s == '|') ;
2854 prespace = FF_HALFSPACE;
2859 while (*++s == '<') ;
2862 if (*s == '.' && s[1] == '.' && s[2] == '.') {
2866 *fpc++ = s - base; /* fieldsize for FETCH */
2868 *fpc++ = ischop ? FF_CHECKCHOP : FF_CHECKNL;
2886 { /* need to jump to the next word */
2888 z = WORD_ALIGN - SvCUR(sv) % WORD_ALIGN;
2889 SvGROW(sv, SvCUR(sv) + z + arg * sizeof(U16) + 4);
2890 s = SvPVX(sv) + SvCUR(sv) + z;
2892 Copy(fops, s, arg, U16);
2894 sv_magic(sv, Nullsv, 'f', Nullch, 0);
2899 * The rest of this file was derived from source code contributed
2902 * NOTE: this code was derived from Tom Horsley's qsort replacement
2903 * and should not be confused with the original code.
2906 /* Copyright (C) Tom Horsley, 1997. All rights reserved.
2908 Permission granted to distribute under the same terms as perl which are
2911 This program is free software; you can redistribute it and/or modify
2912 it under the terms of either:
2914 a) the GNU General Public License as published by the Free
2915 Software Foundation; either version 1, or (at your option) any
2918 b) the "Artistic License" which comes with this Kit.
2920 Details on the perl license can be found in the perl source code which
2921 may be located via the www.perl.com web page.
2923 This is the most wonderfulest possible qsort I can come up with (and
2924 still be mostly portable) My (limited) tests indicate it consistently
2925 does about 20% fewer calls to compare than does the qsort in the Visual
2926 C++ library, other vendors may vary.
2928 Some of the ideas in here can be found in "Algorithms" by Sedgewick,
2929 others I invented myself (or more likely re-invented since they seemed
2930 pretty obvious once I watched the algorithm operate for a while).
2932 Most of this code was written while watching the Marlins sweep the Giants
2933 in the 1997 National League Playoffs - no Braves fans allowed to use this
2934 code (just kidding :-).
2936 I realize that if I wanted to be true to the perl tradition, the only
2937 comment in this file would be something like:
2939 ...they shuffled back towards the rear of the line. 'No, not at the
2940 rear!' the slave-driver shouted. 'Three files up. And stay there...
2942 However, I really needed to violate that tradition just so I could keep
2943 track of what happens myself, not to mention some poor fool trying to
2944 understand this years from now :-).
2947 /* ********************************************************** Configuration */
2949 #ifndef QSORT_ORDER_GUESS
2950 #define QSORT_ORDER_GUESS 2 /* Select doubling version of the netBSD trick */
2953 /* QSORT_MAX_STACK is the largest number of partitions that can be stacked up for
2954 future processing - a good max upper bound is log base 2 of memory size
2955 (32 on 32 bit machines, 64 on 64 bit machines, etc). In reality can
2956 safely be smaller than that since the program is taking up some space and
2957 most operating systems only let you grab some subset of contiguous
2958 memory (not to mention that you are normally sorting data larger than
2959 1 byte element size :-).
2961 #ifndef QSORT_MAX_STACK
2962 #define QSORT_MAX_STACK 32
2965 /* QSORT_BREAK_EVEN is the size of the largest partition we should insertion sort.
2966 Anything bigger and we use qsort. If you make this too small, the qsort
2967 will probably break (or become less efficient), because it doesn't expect
2968 the middle element of a partition to be the same as the right or left -
2969 you have been warned).
2971 #ifndef QSORT_BREAK_EVEN
2972 #define QSORT_BREAK_EVEN 6
2975 /* ************************************************************* Data Types */
2977 /* hold left and right index values of a partition waiting to be sorted (the
2978 partition includes both left and right - right is NOT one past the end or
2979 anything like that).
2981 struct partition_stack_entry {
2984 #ifdef QSORT_ORDER_GUESS
2985 int qsort_break_even;
2989 /* ******************************************************* Shorthand Macros */
2991 /* Note that these macros will be used from inside the qsort function where
2992 we happen to know that the variable 'elt_size' contains the size of an
2993 array element and the variable 'temp' points to enough space to hold a
2994 temp element and the variable 'array' points to the array being sorted
2995 and 'compare' is the pointer to the compare routine.
2997 Also note that there are very many highly architecture specific ways
2998 these might be sped up, but this is simply the most generally portable
2999 code I could think of.
3002 /* Return < 0 == 0 or > 0 as the value of elt1 is < elt2, == elt2, > elt2
3005 #define qsort_cmp(elt1, elt2) \
3006 ((this->*compare)(array[elt1], array[elt2]))
3008 #define qsort_cmp(elt1, elt2) \
3009 ((*compare)(array[elt1], array[elt2]))
3012 #ifdef QSORT_ORDER_GUESS
3013 #define QSORT_NOTICE_SWAP swapped++;
3015 #define QSORT_NOTICE_SWAP
3018 /* swaps contents of array elements elt1, elt2.
3020 #define qsort_swap(elt1, elt2) \
3023 temp = array[elt1]; \
3024 array[elt1] = array[elt2]; \
3025 array[elt2] = temp; \
3028 /* rotate contents of elt1, elt2, elt3 such that elt1 gets elt2, elt2 gets
3029 elt3 and elt3 gets elt1.
3031 #define qsort_rotate(elt1, elt2, elt3) \
3034 temp = array[elt1]; \
3035 array[elt1] = array[elt2]; \
3036 array[elt2] = array[elt3]; \
3037 array[elt3] = temp; \
3040 /* ************************************************************ Debug stuff */
3047 return; /* good place to set a breakpoint */
3050 #define qsort_assert(t) (void)( (t) || (break_here(), 0) )
3053 doqsort_all_asserts(
3057 int (*compare)(const void * elt1, const void * elt2),
3058 int pc_left, int pc_right, int u_left, int u_right)
3062 qsort_assert(pc_left <= pc_right);
3063 qsort_assert(u_right < pc_left);
3064 qsort_assert(pc_right < u_left);
3065 for (i = u_right + 1; i < pc_left; ++i) {
3066 qsort_assert(qsort_cmp(i, pc_left) < 0);
3068 for (i = pc_left; i < pc_right; ++i) {
3069 qsort_assert(qsort_cmp(i, pc_right) == 0);
3071 for (i = pc_right + 1; i < u_left; ++i) {
3072 qsort_assert(qsort_cmp(pc_right, i) < 0);
3076 #define qsort_all_asserts(PC_LEFT, PC_RIGHT, U_LEFT, U_RIGHT) \
3077 doqsort_all_asserts(array, num_elts, elt_size, compare, \
3078 PC_LEFT, PC_RIGHT, U_LEFT, U_RIGHT)
3082 #define qsort_assert(t) ((void)0)
3084 #define qsort_all_asserts(PC_LEFT, PC_RIGHT, U_LEFT, U_RIGHT) ((void)0)
3088 /* ****************************************************************** qsort */
3092 qsortsv(SV ** array, size_t num_elts, SVCOMPARE compare)
3097 I32 (*compare)(SV *a, SV *b))
3102 struct partition_stack_entry partition_stack[QSORT_MAX_STACK];
3103 int next_stack_entry = 0;
3107 #ifdef QSORT_ORDER_GUESS
3108 int qsort_break_even;
3112 /* Make sure we actually have work to do.
3114 if (num_elts <= 1) {
3118 /* Setup the initial partition definition and fall into the sorting loop
3121 part_right = (int)(num_elts - 1);
3122 #ifdef QSORT_ORDER_GUESS
3123 qsort_break_even = QSORT_BREAK_EVEN;
3125 #define qsort_break_even QSORT_BREAK_EVEN
3128 if ((part_right - part_left) >= qsort_break_even) {
3129 /* OK, this is gonna get hairy, so lets try to document all the
3130 concepts and abbreviations and variables and what they keep
3133 pc: pivot chunk - the set of array elements we accumulate in the
3134 middle of the partition, all equal in value to the original
3135 pivot element selected. The pc is defined by:
3137 pc_left - the leftmost array index of the pc
3138 pc_right - the rightmost array index of the pc
3140 we start with pc_left == pc_right and only one element
3141 in the pivot chunk (but it can grow during the scan).
3143 u: uncompared elements - the set of elements in the partition
3144 we have not yet compared to the pivot value. There are two
3145 uncompared sets during the scan - one to the left of the pc
3146 and one to the right.
3148 u_right - the rightmost index of the left side's uncompared set
3149 u_left - the leftmost index of the right side's uncompared set
3151 The leftmost index of the left sides's uncompared set
3152 doesn't need its own variable because it is always defined
3153 by the leftmost edge of the whole partition (part_left). The
3154 same goes for the rightmost edge of the right partition
3157 We know there are no uncompared elements on the left once we
3158 get u_right < part_left and no uncompared elements on the
3159 right once u_left > part_right. When both these conditions
3160 are met, we have completed the scan of the partition.
3162 Any elements which are between the pivot chunk and the
3163 uncompared elements should be less than the pivot value on
3164 the left side and greater than the pivot value on the right
3165 side (in fact, the goal of the whole algorithm is to arrange
3166 for that to be true and make the groups of less-than and
3167 greater-then elements into new partitions to sort again).
3169 As you marvel at the complexity of the code and wonder why it
3170 has to be so confusing. Consider some of the things this level
3171 of confusion brings:
3173 Once I do a compare, I squeeze every ounce of juice out of it. I
3174 never do compare calls I don't have to do, and I certainly never
3177 I also never swap any elements unless I can prove there is a
3178 good reason. Many sort algorithms will swap a known value with
3179 an uncompared value just to get things in the right place (or
3180 avoid complexity :-), but that uncompared value, once it gets
3181 compared, may then have to be swapped again. A lot of the
3182 complexity of this code is due to the fact that it never swaps
3183 anything except compared values, and it only swaps them when the
3184 compare shows they are out of position.
3186 int pc_left, pc_right;
3187 int u_right, u_left;
3191 pc_left = ((part_left + part_right) / 2);
3193 u_right = pc_left - 1;
3194 u_left = pc_right + 1;
3196 /* Qsort works best when the pivot value is also the median value
3197 in the partition (unfortunately you can't find the median value
3198 without first sorting :-), so to give the algorithm a helping
3199 hand, we pick 3 elements and sort them and use the median value
3200 of that tiny set as the pivot value.
3202 Some versions of qsort like to use the left middle and right as
3203 the 3 elements to sort so they can insure the ends of the
3204 partition will contain values which will stop the scan in the
3205 compare loop, but when you have to call an arbitrarily complex
3206 routine to do a compare, its really better to just keep track of
3207 array index values to know when you hit the edge of the
3208 partition and avoid the extra compare. An even better reason to
3209 avoid using a compare call is the fact that you can drop off the
3210 edge of the array if someone foolishly provides you with an
3211 unstable compare function that doesn't always provide consistent
3214 So, since it is simpler for us to compare the three adjacent
3215 elements in the middle of the partition, those are the ones we
3216 pick here (conveniently pointed at by u_right, pc_left, and
3217 u_left). The values of the left, center, and right elements
3218 are refered to as l c and r in the following comments.
3221 #ifdef QSORT_ORDER_GUESS
3224 s = qsort_cmp(u_right, pc_left);
3227 s = qsort_cmp(pc_left, u_left);
3228 /* if l < c, c < r - already in order - nothing to do */
3230 /* l < c, c == r - already in order, pc grows */
3232 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3234 /* l < c, c > r - need to know more */
3235 s = qsort_cmp(u_right, u_left);
3237 /* l < c, c > r, l < r - swap c & r to get ordered */
3238 qsort_swap(pc_left, u_left);
3239 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3240 } else if (s == 0) {
3241 /* l < c, c > r, l == r - swap c&r, grow pc */
3242 qsort_swap(pc_left, u_left);
3244 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3246 /* l < c, c > r, l > r - make lcr into rlc to get ordered */
3247 qsort_rotate(pc_left, u_right, u_left);
3248 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3251 } else if (s == 0) {
3253 s = qsort_cmp(pc_left, u_left);
3255 /* l == c, c < r - already in order, grow pc */
3257 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3258 } else if (s == 0) {
3259 /* l == c, c == r - already in order, grow pc both ways */
3262 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3264 /* l == c, c > r - swap l & r, grow pc */
3265 qsort_swap(u_right, u_left);
3267 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3271 s = qsort_cmp(pc_left, u_left);
3273 /* l > c, c < r - need to know more */
3274 s = qsort_cmp(u_right, u_left);
3276 /* l > c, c < r, l < r - swap l & c to get ordered */
3277 qsort_swap(u_right, pc_left);
3278 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3279 } else if (s == 0) {
3280 /* l > c, c < r, l == r - swap l & c, grow pc */
3281 qsort_swap(u_right, pc_left);
3283 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3285 /* l > c, c < r, l > r - rotate lcr into crl to order */
3286 qsort_rotate(u_right, pc_left, u_left);
3287 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3289 } else if (s == 0) {
3290 /* l > c, c == r - swap ends, grow pc */
3291 qsort_swap(u_right, u_left);
3293 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3295 /* l > c, c > r - swap ends to get in order */
3296 qsort_swap(u_right, u_left);
3297 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3300 /* We now know the 3 middle elements have been compared and
3301 arranged in the desired order, so we can shrink the uncompared
3306 qsort_all_asserts(pc_left, pc_right, u_left, u_right);
3308 /* The above massive nested if was the simple part :-). We now have
3309 the middle 3 elements ordered and we need to scan through the
3310 uncompared sets on either side, swapping elements that are on
3311 the wrong side or simply shuffling equal elements around to get
3312 all equal elements into the pivot chunk.
3316 int still_work_on_left;
3317 int still_work_on_right;
3319 /* Scan the uncompared values on the left. If I find a value
3320 equal to the pivot value, move it over so it is adjacent to
3321 the pivot chunk and expand the pivot chunk. If I find a value
3322 less than the pivot value, then just leave it - its already
3323 on the correct side of the partition. If I find a greater
3324 value, then stop the scan.
3326 while (still_work_on_left = (u_right >= part_left)) {
3327 s = qsort_cmp(u_right, pc_left);
3330 } else if (s == 0) {
3332 if (pc_left != u_right) {
3333 qsort_swap(u_right, pc_left);
3339 qsort_assert(u_right < pc_left);
3340 qsort_assert(pc_left <= pc_right);
3341 qsort_assert(qsort_cmp(u_right + 1, pc_left) <= 0);
3342 qsort_assert(qsort_cmp(pc_left, pc_right) == 0);
3345 /* Do a mirror image scan of uncompared values on the right
3347 while (still_work_on_right = (u_left <= part_right)) {
3348 s = qsort_cmp(pc_right, u_left);
3351 } else if (s == 0) {
3353 if (pc_right != u_left) {
3354 qsort_swap(pc_right, u_left);
3360 qsort_assert(u_left > pc_right);
3361 qsort_assert(pc_left <= pc_right);
3362 qsort_assert(qsort_cmp(pc_right, u_left - 1) <= 0);
3363 qsort_assert(qsort_cmp(pc_left, pc_right) == 0);
3366 if (still_work_on_left) {
3367 /* I know I have a value on the left side which needs to be
3368 on the right side, but I need to know more to decide
3369 exactly the best thing to do with it.
3371 if (still_work_on_right) {
3372 /* I know I have values on both side which are out of
3373 position. This is a big win because I kill two birds
3374 with one swap (so to speak). I can advance the
3375 uncompared pointers on both sides after swapping both
3376 of them into the right place.
3378 qsort_swap(u_right, u_left);
3381 qsort_all_asserts(pc_left, pc_right, u_left, u_right);
3383 /* I have an out of position value on the left, but the
3384 right is fully scanned, so I "slide" the pivot chunk
3385 and any less-than values left one to make room for the
3386 greater value over on the right. If the out of position
3387 value is immediately adjacent to the pivot chunk (there
3388 are no less-than values), I can do that with a swap,
3389 otherwise, I have to rotate one of the less than values
3390 into the former position of the out of position value
3391 and the right end of the pivot chunk into the left end
3395 if (pc_left == u_right) {
3396 qsort_swap(u_right, pc_right);
3397 qsort_all_asserts(pc_left, pc_right-1, u_left, u_right-1);
3399 qsort_rotate(u_right, pc_left, pc_right);
3400 qsort_all_asserts(pc_left, pc_right-1, u_left, u_right-1);
3405 } else if (still_work_on_right) {
3406 /* Mirror image of complex case above: I have an out of
3407 position value on the right, but the left is fully
3408 scanned, so I need to shuffle things around to make room
3409 for the right value on the left.
3412 if (pc_right == u_left) {
3413 qsort_swap(u_left, pc_left);
3414 qsort_all_asserts(pc_left+1, pc_right, u_left+1, u_right);
3416 qsort_rotate(pc_right, pc_left, u_left);
3417 qsort_all_asserts(pc_left+1, pc_right, u_left+1, u_right);
3422 /* No more scanning required on either side of partition,
3423 break out of loop and figure out next set of partitions
3429 /* The elements in the pivot chunk are now in the right place. They
3430 will never move or be compared again. All I have to do is decide
3431 what to do with the stuff to the left and right of the pivot
3434 Notes on the QSORT_ORDER_GUESS ifdef code:
3436 1. If I just built these partitions without swapping any (or
3437 very many) elements, there is a chance that the elements are
3438 already ordered properly (being properly ordered will
3439 certainly result in no swapping, but the converse can't be
3442 2. A (properly written) insertion sort will run faster on
3443 already ordered data than qsort will.
3445 3. Perhaps there is some way to make a good guess about
3446 switching to an insertion sort earlier than partition size 6
3447 (for instance - we could save the partition size on the stack
3448 and increase the size each time we find we didn't swap, thus
3449 switching to insertion sort earlier for partitions with a
3450 history of not swapping).
3452 4. Naturally, if I just switch right away, it will make
3453 artificial benchmarks with pure ascending (or descending)
3454 data look really good, but is that a good reason in general?
3458 #ifdef QSORT_ORDER_GUESS
3460 #if QSORT_ORDER_GUESS == 1
3461 qsort_break_even = (part_right - part_left) + 1;
3463 #if QSORT_ORDER_GUESS == 2
3464 qsort_break_even *= 2;
3466 #if QSORT_ORDER_GUESS == 3
3467 int prev_break = qsort_break_even;
3468 qsort_break_even *= qsort_break_even;
3469 if (qsort_break_even < prev_break) {
3470 qsort_break_even = (part_right - part_left) + 1;
3474 qsort_break_even = QSORT_BREAK_EVEN;
3478 if (part_left < pc_left) {
3479 /* There are elements on the left which need more processing.
3480 Check the right as well before deciding what to do.
3482 if (pc_right < part_right) {
3483 /* We have two partitions to be sorted. Stack the biggest one
3484 and process the smallest one on the next iteration. This
3485 minimizes the stack height by insuring that any additional
3486 stack entries must come from the smallest partition which
3487 (because it is smallest) will have the fewest
3488 opportunities to generate additional stack entries.
3490 if ((part_right - pc_right) > (pc_left - part_left)) {
3491 /* stack the right partition, process the left */
3492 partition_stack[next_stack_entry].left = pc_right + 1;
3493 partition_stack[next_stack_entry].right = part_right;
3494 #ifdef QSORT_ORDER_GUESS
3495 partition_stack[next_stack_entry].qsort_break_even = qsort_break_even;
3497 part_right = pc_left - 1;
3499 /* stack the left partition, process the right */
3500 partition_stack[next_stack_entry].left = part_left;
3501 partition_stack[next_stack_entry].right = pc_left - 1;
3502 #ifdef QSORT_ORDER_GUESS
3503 partition_stack[next_stack_entry].qsort_break_even = qsort_break_even;
3505 part_left = pc_right + 1;
3507 qsort_assert(next_stack_entry < QSORT_MAX_STACK);
3510 /* The elements on the left are the only remaining elements
3511 that need sorting, arrange for them to be processed as the
3514 part_right = pc_left - 1;
3516 } else if (pc_right < part_right) {
3517 /* There is only one chunk on the right to be sorted, make it
3518 the new partition and loop back around.
3520 part_left = pc_right + 1;
3522 /* This whole partition wound up in the pivot chunk, so
3523 we need to get a new partition off the stack.
3525 if (next_stack_entry == 0) {
3526 /* the stack is empty - we are done */
3530 part_left = partition_stack[next_stack_entry].left;
3531 part_right = partition_stack[next_stack_entry].right;
3532 #ifdef QSORT_ORDER_GUESS
3533 qsort_break_even = partition_stack[next_stack_entry].qsort_break_even;
3537 /* This partition is too small to fool with qsort complexity, just
3538 do an ordinary insertion sort to minimize overhead.
3541 /* Assume 1st element is in right place already, and start checking
3542 at 2nd element to see where it should be inserted.
3544 for (i = part_left + 1; i <= part_right; ++i) {
3546 /* Scan (backwards - just in case 'i' is already in right place)
3547 through the elements already sorted to see if the ith element
3548 belongs ahead of one of them.
3550 for (j = i - 1; j >= part_left; --j) {
3551 if (qsort_cmp(i, j) >= 0) {
3552 /* i belongs right after j
3559 /* Looks like we really need to move some things
3562 for (--i; i >= j; --i)
3563 array[i + 1] = array[i];
3568 /* That partition is now sorted, grab the next one, or get out
3569 of the loop if there aren't any more.
3572 if (next_stack_entry == 0) {
3573 /* the stack is empty - we are done */
3577 part_left = partition_stack[next_stack_entry].left;
3578 part_right = partition_stack[next_stack_entry].right;
3579 #ifdef QSORT_ORDER_GUESS
3580 qsort_break_even = partition_stack[next_stack_entry].qsort_break_even;
3585 /* Believe it or not, the array is sorted at this point! */