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));
51 cxix = dopoptosub(cxstack_ix);
55 switch (cxstack[cxix].blk_gimme) {
72 register PMOP *pm = (PMOP*)cLOGOP->op_other;
76 MAGIC *mg = Null(MAGIC*);
80 SV *sv = SvRV(tmpstr);
82 mg = mg_find(sv, 'r');
85 regexp *re = (regexp *)mg->mg_obj;
86 ReREFCNT_dec(pm->op_pmregexp);
87 pm->op_pmregexp = ReREFCNT_inc(re);
90 t = SvPV(tmpstr, len);
92 /* JMR: Check against the last compiled regexp
93 To know for sure, we'd need the length of precomp.
94 But we don't have it, so we must ... take a guess. */
95 if (!pm->op_pmregexp || !pm->op_pmregexp->precomp ||
96 memNE(pm->op_pmregexp->precomp, t, len + 1))
98 if (pm->op_pmregexp) {
99 ReREFCNT_dec(pm->op_pmregexp);
100 pm->op_pmregexp = Null(REGEXP*); /* crucial if regcomp aborts */
103 pm->op_pmflags = pm->op_pmpermflags; /* reset case sensitivity */
104 pm->op_pmregexp = pregcomp(t, t + len, pm);
108 if (!pm->op_pmregexp->prelen && curpm)
110 else if (strEQ("\\s+", pm->op_pmregexp->precomp))
111 pm->op_pmflags |= PMf_WHITE;
113 if (pm->op_pmflags & PMf_KEEP) {
114 pm->op_private &= ~OPpRUNTIME; /* no point compiling again */
115 cLOGOP->op_first->op_next = op->op_next;
123 register PMOP *pm = (PMOP*) cLOGOP->op_other;
124 register PERL_CONTEXT *cx = &cxstack[cxstack_ix];
125 register SV *dstr = cx->sb_dstr;
126 register char *s = cx->sb_s;
127 register char *m = cx->sb_m;
128 char *orig = cx->sb_orig;
129 register REGEXP *rx = cx->sb_rx;
131 rxres_restore(&cx->sb_rxres, rx);
133 if (cx->sb_iters++) {
134 if (cx->sb_iters > cx->sb_maxiters)
135 DIE("Substitution loop");
137 if (!cx->sb_rxtainted)
138 cx->sb_rxtainted = SvTAINTED(TOPs);
139 sv_catsv(dstr, POPs);
142 if (cx->sb_once || !regexec_flags(rx, s, cx->sb_strend, orig,
143 s == m, Nullsv, NULL,
144 cx->sb_safebase ? 0 : REXEC_COPY_STR))
146 SV *targ = cx->sb_targ;
147 sv_catpvn(dstr, s, cx->sb_strend - s);
149 TAINT_IF(cx->sb_rxtainted || RX_MATCH_TAINTED(rx));
151 (void)SvOOK_off(targ);
152 Safefree(SvPVX(targ));
153 SvPVX(targ) = SvPVX(dstr);
154 SvCUR_set(targ, SvCUR(dstr));
155 SvLEN_set(targ, SvLEN(dstr));
158 (void)SvPOK_only(targ);
162 PUSHs(sv_2mortal(newSViv((I32)cx->sb_iters - 1)));
163 LEAVE_SCOPE(cx->sb_oldsave);
165 RETURNOP(pm->op_next);
168 if (rx->subbase && rx->subbase != orig) {
171 cx->sb_orig = orig = rx->subbase;
173 cx->sb_strend = s + (cx->sb_strend - m);
175 cx->sb_m = m = rx->startp[0];
176 sv_catpvn(dstr, s, m-s);
177 cx->sb_s = rx->endp[0];
178 cx->sb_rxtainted |= RX_MATCH_TAINTED(rx);
179 rxres_save(&cx->sb_rxres, rx);
180 RETURNOP(pm->op_pmreplstart);
184 rxres_save(void **rsp, REGEXP *rx)
189 if (!p || p[1] < rx->nparens) {
190 i = 6 + rx->nparens * 2;
198 *p++ = (UV)rx->subbase;
199 rx->subbase = Nullch;
203 *p++ = (UV)rx->subbeg;
204 *p++ = (UV)rx->subend;
205 for (i = 0; i <= rx->nparens; ++i) {
206 *p++ = (UV)rx->startp[i];
207 *p++ = (UV)rx->endp[i];
212 rxres_restore(void **rsp, REGEXP *rx)
217 Safefree(rx->subbase);
218 rx->subbase = (char*)(*p);
223 rx->subbeg = (char*)(*p++);
224 rx->subend = (char*)(*p++);
225 for (i = 0; i <= rx->nparens; ++i) {
226 rx->startp[i] = (char*)(*p++);
227 rx->endp[i] = (char*)(*p++);
232 rxres_free(void **rsp)
237 Safefree((char*)(*p));
245 djSP; dMARK; dORIGMARK;
246 register SV *tmpForm = *++MARK;
258 bool chopspace = (strchr(chopset, ' ') != Nullch);
265 if (!SvMAGICAL(tmpForm) || !SvCOMPILED(tmpForm)) {
266 SvREADONLY_off(tmpForm);
267 doparseform(tmpForm);
270 SvPV_force(formtarget, len);
271 t = SvGROW(formtarget, len + SvCUR(tmpForm) + 1); /* XXX SvCUR bad */
273 f = SvPV(tmpForm, len);
274 /* need to jump to the next word */
275 s = f + len + WORD_ALIGN - SvCUR(tmpForm) % WORD_ALIGN;
284 case FF_LITERAL: arg = fpc[1]; name = "LITERAL"; break;
285 case FF_BLANK: arg = fpc[1]; name = "BLANK"; break;
286 case FF_SKIP: arg = fpc[1]; name = "SKIP"; break;
287 case FF_FETCH: arg = fpc[1]; name = "FETCH"; break;
288 case FF_DECIMAL: arg = fpc[1]; name = "DECIMAL"; break;
290 case FF_CHECKNL: name = "CHECKNL"; break;
291 case FF_CHECKCHOP: name = "CHECKCHOP"; break;
292 case FF_SPACE: name = "SPACE"; break;
293 case FF_HALFSPACE: name = "HALFSPACE"; break;
294 case FF_ITEM: name = "ITEM"; break;
295 case FF_CHOP: name = "CHOP"; break;
296 case FF_LINEGLOB: name = "LINEGLOB"; break;
297 case FF_NEWLINE: name = "NEWLINE"; break;
298 case FF_MORE: name = "MORE"; break;
299 case FF_LINEMARK: name = "LINEMARK"; break;
300 case FF_END: name = "END"; break;
303 PerlIO_printf(PerlIO_stderr(), "%-16s%ld\n", name, (long) arg);
305 PerlIO_printf(PerlIO_stderr(), "%-16s\n", name);
334 warn("Not enough format arguments");
339 item = s = SvPV(sv, len);
341 if (itemsize > fieldsize)
342 itemsize = fieldsize;
343 send = chophere = s + itemsize;
355 item = s = SvPV(sv, len);
357 if (itemsize <= fieldsize) {
358 send = chophere = s + itemsize;
369 itemsize = fieldsize;
370 send = chophere = s + itemsize;
371 while (s < send || (s == send && isSPACE(*s))) {
381 if (strchr(chopset, *s))
386 itemsize = chophere - item;
391 arg = fieldsize - itemsize;
400 arg = fieldsize - itemsize;
414 int ch = *t++ = *s++;
418 if ( !((*t++ = *s++) & ~31) )
428 while (*s && isSPACE(*s))
435 item = s = SvPV(sv, len);
448 SvCUR_set(formtarget, t - SvPVX(formtarget));
449 sv_catpvn(formtarget, item, itemsize);
450 SvGROW(formtarget, SvCUR(formtarget) + SvCUR(tmpForm) + 1);
451 t = SvPVX(formtarget) + SvCUR(formtarget);
456 /* If the field is marked with ^ and the value is undefined,
459 if ((arg & 512) && !SvOK(sv)) {
467 /* Formats aren't yet marked for locales, so assume "yes". */
470 sprintf(t, "%#*.*f", (int) fieldsize, (int) arg & 255, value);
472 sprintf(t, "%*.0f", (int) fieldsize, value);
479 while (t-- > linemark && *t == ' ') ;
487 if (arg) { /* repeat until fields exhausted? */
489 SvCUR_set(formtarget, t - SvPVX(formtarget));
490 lines += FmLINES(formtarget);
493 if (strnEQ(linemark, linemark - arg, arg))
494 DIE("Runaway format");
496 FmLINES(formtarget) = lines;
498 RETURNOP(cLISTOP->op_first);
509 arg = fieldsize - itemsize;
516 if (strnEQ(s," ",3)) {
517 while (s > SvPVX(formtarget) && isSPACE(s[-1]))
528 SvCUR_set(formtarget, t - SvPVX(formtarget));
529 FmLINES(formtarget) += lines;
541 if (stack_base + *markstack_ptr == SP) {
543 if (GIMME_V == G_SCALAR)
545 RETURNOP(op->op_next->op_next);
547 stack_sp = stack_base + *markstack_ptr + 1;
548 pp_pushmark(ARGS); /* push dst */
549 pp_pushmark(ARGS); /* push src */
550 ENTER; /* enter outer scope */
554 /* SAVE_DEFSV does *not* suffice here */
555 save_sptr(&THREADSV(0));
557 SAVESPTR(GvSV(defgv));
558 #endif /* USE_THREADS */
559 ENTER; /* enter inner scope */
562 src = stack_base[*markstack_ptr];
567 if (op->op_type == OP_MAPSTART)
568 pp_pushmark(ARGS); /* push top */
569 return ((LOGOP*)op->op_next)->op_other;
574 DIE("panic: mapstart"); /* uses grepstart */
580 I32 diff = (SP - stack_base) - *markstack_ptr;
588 if (diff > markstack_ptr[-1] - markstack_ptr[-2]) {
589 shift = diff - (markstack_ptr[-1] - markstack_ptr[-2]);
590 count = (SP - stack_base) - markstack_ptr[-1] + 2;
595 markstack_ptr[-1] += shift;
596 *markstack_ptr += shift;
600 dst = stack_base + (markstack_ptr[-2] += diff) - 1;
603 *dst-- = SvTEMP(TOPs) ? POPs : sv_mortalcopy(POPs);
605 LEAVE; /* exit inner scope */
608 if (markstack_ptr[-1] > *markstack_ptr) {
612 (void)POPMARK; /* pop top */
613 LEAVE; /* exit outer scope */
614 (void)POPMARK; /* pop src */
615 items = --*markstack_ptr - markstack_ptr[-1];
616 (void)POPMARK; /* pop dst */
617 SP = stack_base + POPMARK; /* pop original mark */
618 if (gimme == G_SCALAR) {
622 else if (gimme == G_ARRAY)
629 ENTER; /* enter inner scope */
632 src = stack_base[markstack_ptr[-1]];
636 RETURNOP(cLOGOP->op_other);
642 djSP; dMARK; dORIGMARK;
644 SV **myorigmark = ORIGMARK;
650 OP* nextop = op->op_next;
652 if (gimme != G_ARRAY) {
657 if (op->op_flags & OPf_STACKED) {
659 if (op->op_flags & OPf_SPECIAL) {
660 OP *kid = cLISTOP->op_first->op_sibling; /* pass pushmark */
661 kid = kUNOP->op_first; /* pass rv2gv */
662 kid = kUNOP->op_first; /* pass leave */
663 sortcop = kid->op_next;
664 stash = curcop->cop_stash;
667 cv = sv_2cv(*++MARK, &stash, &gv, 0);
668 if (!(cv && CvROOT(cv))) {
670 SV *tmpstr = sv_newmortal();
671 gv_efullname3(tmpstr, gv, Nullch);
672 if (cv && CvXSUB(cv))
673 DIE("Xsub \"%s\" called in sort", SvPVX(tmpstr));
674 DIE("Undefined sort subroutine \"%s\" called",
679 DIE("Xsub called in sort");
680 DIE("Undefined subroutine in sort");
682 DIE("Not a CODE reference in sort");
684 sortcop = CvSTART(cv);
685 SAVESPTR(CvROOT(cv)->op_ppaddr);
686 CvROOT(cv)->op_ppaddr = ppaddr[OP_NULL];
689 curpad = AvARRAY((AV*)AvARRAY(CvPADLIST(cv))[1]);
694 stash = curcop->cop_stash;
698 while (MARK < SP) { /* This may or may not shift down one here. */
700 if (*up = *++MARK) { /* Weed out nulls. */
702 if (!sortcop && !SvPOK(*up))
703 (void)sv_2pv(*up, &na);
707 max = --up - myorigmark;
713 bool oldcatch = CATCH_GET;
721 AvREAL_off(sortstack);
722 av_extend(sortstack, 32);
725 SWITCHSTACK(curstack, sortstack);
726 if (sortstash != stash) {
727 firstgv = gv_fetchpv("a", TRUE, SVt_PV);
728 secondgv = gv_fetchpv("b", TRUE, SVt_PV);
732 SAVESPTR(GvSV(firstgv));
733 SAVESPTR(GvSV(secondgv));
735 PUSHBLOCK(cx, CXt_NULL, stack_base);
736 if (!(op->op_flags & OPf_SPECIAL)) {
737 bool hasargs = FALSE;
738 cx->cx_type = CXt_SUB;
739 cx->blk_gimme = G_SCALAR;
742 (void)SvREFCNT_inc(cv); /* in preparation for POPSUB */
744 sortcxix = cxstack_ix;
745 qsortsv((myorigmark+1), max, sortcv);
748 SWITCHSTACK(sortstack, oldstack);
755 MEXTEND(SP, 20); /* Can't afford stack realloc on signal. */
756 qsortsv(ORIGMARK+1, max,
757 (op->op_private & OPpLOCALE) ? sv_cmp_locale : sv_cmp);
760 stack_sp = ORIGMARK + max;
768 if (GIMME == G_ARRAY)
769 return cCONDOP->op_true;
770 return SvTRUEx(PAD_SV(op->op_targ)) ? cCONDOP->op_false : cCONDOP->op_true;
777 if (GIMME == G_ARRAY) {
778 RETURNOP(((CONDOP*)cUNOP->op_first)->op_false);
782 SV *targ = PAD_SV(op->op_targ);
784 if ((op->op_private & OPpFLIP_LINENUM)
785 ? last_in_gv && SvIV(sv) == IoLINES(GvIOp(last_in_gv))
787 sv_setiv(PAD_SV(cUNOP->op_first->op_targ), 1);
788 if (op->op_flags & OPf_SPECIAL) {
796 RETURNOP(((CONDOP*)cUNOP->op_first)->op_false);
809 if (GIMME == G_ARRAY) {
815 if (SvNIOKp(left) || !SvPOKp(left) ||
816 (looks_like_number(left) && *SvPVX(left) != '0') )
821 EXTEND_MORTAL(max - i + 1);
822 EXTEND(SP, max - i + 1);
825 sv = sv_2mortal(newSViv(i++));
830 SV *final = sv_mortalcopy(right);
832 char *tmps = SvPV(final, len);
834 sv = sv_mortalcopy(left);
835 while (!SvNIOKp(sv) && SvCUR(sv) <= len &&
836 strNE(SvPVX(sv),tmps) ) {
838 sv = sv_2mortal(newSVsv(sv));
841 if (strEQ(SvPVX(sv),tmps))
847 SV *targ = PAD_SV(cUNOP->op_first->op_targ);
849 if ((op->op_private & OPpFLIP_LINENUM)
850 ? last_in_gv && SvIV(sv) == IoLINES(GvIOp(last_in_gv))
852 sv_setiv(PAD_SV(((UNOP*)cUNOP->op_first)->op_first->op_targ), 0);
853 sv_catpv(targ, "E0");
864 dopoptolabel(char *label)
868 register PERL_CONTEXT *cx;
870 for (i = cxstack_ix; i >= 0; i--) {
872 switch (cx->cx_type) {
875 warn("Exiting substitution via %s", op_name[op->op_type]);
879 warn("Exiting subroutine via %s", op_name[op->op_type]);
883 warn("Exiting eval via %s", op_name[op->op_type]);
887 warn("Exiting pseudo-block via %s", op_name[op->op_type]);
890 if (!cx->blk_loop.label ||
891 strNE(label, cx->blk_loop.label) ) {
892 DEBUG_l(deb("(Skipping label #%ld %s)\n",
893 (long)i, cx->blk_loop.label));
896 DEBUG_l( deb("(Found label #%ld %s)\n", (long)i, label));
906 I32 gimme = block_gimme();
907 return (gimme == G_VOID) ? G_SCALAR : gimme;
916 cxix = dopoptosub(cxstack_ix);
920 switch (cxstack[cxix].blk_gimme) {
926 croak("panic: bad gimme: %d\n", cxstack[cxix].blk_gimme);
933 dopoptosub(I32 startingblock)
937 register PERL_CONTEXT *cx;
938 for (i = startingblock; i >= 0; i--) {
940 switch (cx->cx_type) {
945 DEBUG_l( deb("(Found sub #%ld)\n", (long)i));
953 dopoptoeval(I32 startingblock)
957 register PERL_CONTEXT *cx;
958 for (i = startingblock; i >= 0; i--) {
960 switch (cx->cx_type) {
964 DEBUG_l( deb("(Found eval #%ld)\n", (long)i));
972 dopoptoloop(I32 startingblock)
976 register PERL_CONTEXT *cx;
977 for (i = startingblock; i >= 0; i--) {
979 switch (cx->cx_type) {
982 warn("Exiting substitution via %s", op_name[op->op_type]);
986 warn("Exiting subroutine via %s", op_name[op->op_type]);
990 warn("Exiting eval via %s", op_name[op->op_type]);
994 warn("Exiting pseudo-block via %s", op_name[op->op_type]);
997 DEBUG_l( deb("(Found loop #%ld)\n", (long)i));
1008 register PERL_CONTEXT *cx;
1012 while (cxstack_ix > cxix) {
1013 cx = &cxstack[cxstack_ix];
1014 DEBUG_l(PerlIO_printf(Perl_debug_log, "Unwinding block %ld, type %s\n",
1015 (long) cxstack_ix, block_type[cx->cx_type]));
1016 /* Note: we don't need to restore the base context info till the end. */
1017 switch (cx->cx_type) {
1020 continue; /* not break */
1038 die_where(char *message)
1043 register PERL_CONTEXT *cx;
1049 STRLEN klen = strlen(message);
1051 svp = hv_fetch(ERRHV, message, klen, TRUE);
1054 static char prefix[] = "\t(in cleanup) ";
1056 sv_upgrade(*svp, SVt_IV);
1057 (void)SvIOK_only(*svp);
1060 SvGROW(err, SvCUR(err)+sizeof(prefix)+klen);
1061 sv_catpvn(err, prefix, sizeof(prefix)-1);
1062 sv_catpvn(err, message, klen);
1068 sv_setpv(ERRSV, message);
1070 cxix = dopoptoeval(cxstack_ix);
1074 if (cxix < cxstack_ix)
1078 if (cx->cx_type != CXt_EVAL) {
1079 PerlIO_printf(PerlIO_stderr(), "panic: die %s", message);
1084 if (gimme == G_SCALAR)
1085 *++newsp = &sv_undef;
1090 if (optype == OP_REQUIRE) {
1091 char* msg = SvPVx(ERRSV, na);
1092 DIE("%s", *msg ? msg : "Compilation failed in require");
1094 return pop_return();
1097 PerlIO_printf(PerlIO_stderr(), "%s",message);
1098 PerlIO_flush(PerlIO_stderr());
1107 if (SvTRUE(left) != SvTRUE(right))
1119 RETURNOP(cLOGOP->op_other);
1128 RETURNOP(cLOGOP->op_other);
1134 register I32 cxix = dopoptosub(cxstack_ix);
1135 register PERL_CONTEXT *cx;
1147 if (GIMME != G_ARRAY)
1151 if (DBsub && cxix >= 0 &&
1152 cxstack[cxix].blk_sub.cv == GvCV(DBsub))
1156 cxix = dopoptosub(cxix - 1);
1158 cx = &cxstack[cxix];
1159 if (cxstack[cxix].cx_type == CXt_SUB) {
1160 dbcxix = dopoptosub(cxix - 1);
1161 /* We expect that cxstack[dbcxix] is CXt_SUB, anyway, the
1162 field below is defined for any cx. */
1163 if (DBsub && dbcxix >= 0 && cxstack[dbcxix].blk_sub.cv == GvCV(DBsub))
1164 cx = &cxstack[dbcxix];
1167 if (GIMME != G_ARRAY) {
1168 hv = cx->blk_oldcop->cop_stash;
1173 sv_setpv(TARG, HvNAME(hv));
1179 hv = cx->blk_oldcop->cop_stash;
1183 PUSHs(sv_2mortal(newSVpv(HvNAME(hv), 0)));
1184 PUSHs(sv_2mortal(newSVpv(SvPVX(GvSV(cx->blk_oldcop->cop_filegv)), 0)));
1185 PUSHs(sv_2mortal(newSViv((I32)cx->blk_oldcop->cop_line)));
1188 if (cx->cx_type == CXt_SUB) { /* So is cxstack[dbcxix]. */
1190 gv_efullname3(sv, CvGV(cxstack[cxix].blk_sub.cv), Nullch);
1191 PUSHs(sv_2mortal(sv));
1192 PUSHs(sv_2mortal(newSViv((I32)cx->blk_sub.hasargs)));
1195 PUSHs(sv_2mortal(newSVpv("(eval)",0)));
1196 PUSHs(sv_2mortal(newSViv(0)));
1198 gimme = (I32)cx->blk_gimme;
1199 if (gimme == G_VOID)
1202 PUSHs(sv_2mortal(newSViv(gimme & G_ARRAY)));
1203 if (cx->cx_type == CXt_EVAL) {
1204 if (cx->blk_eval.old_op_type == OP_ENTEREVAL) {
1205 PUSHs(cx->blk_eval.cur_text);
1208 else if (cx->blk_eval.old_name) { /* Try blocks have old_name == 0. */
1209 /* Require, put the name. */
1210 PUSHs(sv_2mortal(newSVpv(cx->blk_eval.old_name, 0)));
1214 else if (cx->cx_type == CXt_SUB &&
1215 cx->blk_sub.hasargs &&
1216 curcop->cop_stash == debstash)
1218 AV *ary = cx->blk_sub.argarray;
1219 int off = AvARRAY(ary) - AvALLOC(ary);
1223 dbargs = GvAV(gv_AVadd(tmpgv = gv_fetchpv("DB::args", TRUE,
1226 AvREAL_off(dbargs); /* XXX Should be REIFY */
1229 if (AvMAX(dbargs) < AvFILLp(ary) + off)
1230 av_extend(dbargs, AvFILLp(ary) + off);
1231 Copy(AvALLOC(ary), AvARRAY(dbargs), AvFILLp(ary) + 1 + off, SV*);
1232 AvFILLp(dbargs) = AvFILLp(ary) + off;
1238 sortcv(SV *a, SV *b)
1241 I32 oldsaveix = savestack_ix;
1242 I32 oldscopeix = scopestack_ix;
1246 stack_sp = stack_base;
1249 if (stack_sp != stack_base + 1)
1250 croak("Sort subroutine didn't return single value");
1251 if (!SvNIOKp(*stack_sp))
1252 croak("Sort subroutine didn't return a numeric value");
1253 result = SvIV(*stack_sp);
1254 while (scopestack_ix > oldscopeix) {
1257 leave_scope(oldsaveix);
1270 sv_reset(tmps, curcop->cop_stash);
1283 TAINT_NOT; /* Each statement is presumed innocent */
1284 stack_sp = stack_base + cxstack[cxstack_ix].blk_oldsp;
1287 if (op->op_private || SvIV(DBsingle) || SvIV(DBsignal) || SvIV(DBtrace))
1291 register PERL_CONTEXT *cx;
1292 I32 gimme = G_ARRAY;
1299 DIE("No DB::DB routine defined");
1301 if (CvDEPTH(cv) >= 1 && !(debug & (1<<30))) /* don't do recursive DB::DB call */
1313 push_return(op->op_next);
1314 PUSHBLOCK(cx, CXt_SUB, SP);
1317 (void)SvREFCNT_inc(cv);
1319 curpad = AvARRAY((AV*)*av_fetch(CvPADLIST(cv),1,FALSE));
1320 RETURNOP(CvSTART(cv));
1334 register PERL_CONTEXT *cx;
1335 I32 gimme = GIMME_V;
1342 if (op->op_flags & OPf_SPECIAL)
1343 svp = save_threadsv(op->op_targ); /* per-thread variable */
1345 #endif /* USE_THREADS */
1347 svp = &curpad[op->op_targ]; /* "my" variable */
1352 (void)save_scalar(gv);
1353 svp = &GvSV(gv); /* symbol table variable */
1358 PUSHBLOCK(cx, CXt_LOOP, SP);
1359 PUSHLOOP(cx, svp, MARK);
1360 if (op->op_flags & OPf_STACKED)
1361 cx->blk_loop.iterary = (AV*)SvREFCNT_inc(POPs);
1363 cx->blk_loop.iterary = curstack;
1364 AvFILLp(curstack) = SP - stack_base;
1365 cx->blk_loop.iterix = MARK - stack_base;
1374 register PERL_CONTEXT *cx;
1375 I32 gimme = GIMME_V;
1381 PUSHBLOCK(cx, CXt_LOOP, SP);
1382 PUSHLOOP(cx, 0, SP);
1390 register PERL_CONTEXT *cx;
1391 struct block_loop cxloop;
1399 POPLOOP1(cx); /* Delay POPLOOP2 until stack values are safe */
1402 if (gimme == G_VOID)
1404 else if (gimme == G_SCALAR) {
1406 *++newsp = sv_mortalcopy(*SP);
1408 *++newsp = &sv_undef;
1412 *++newsp = sv_mortalcopy(*++mark);
1413 TAINT_NOT; /* Each item is independent */
1419 POPLOOP2(); /* Stack values are safe: release loop vars ... */
1420 curpm = newpm; /* ... and pop $1 et al */
1432 register PERL_CONTEXT *cx;
1433 struct block_sub cxsub;
1434 bool popsub2 = FALSE;
1440 if (curstack == sortstack) {
1441 if (cxstack_ix == sortcxix || dopoptosub(cxstack_ix) <= sortcxix) {
1442 if (cxstack_ix > sortcxix)
1444 AvARRAY(curstack)[1] = *SP;
1445 stack_sp = stack_base + 1;
1450 cxix = dopoptosub(cxstack_ix);
1452 DIE("Can't return outside a subroutine");
1453 if (cxix < cxstack_ix)
1457 switch (cx->cx_type) {
1459 POPSUB1(cx); /* Delay POPSUB2 until stack values are safe */
1464 if (optype == OP_REQUIRE &&
1465 (MARK == SP || (gimme == G_SCALAR && !SvTRUE(*SP))) )
1467 /* Unassume the success we assumed earlier. */
1468 char *name = cx->blk_eval.old_name;
1469 (void)hv_delete(GvHVn(incgv), name, strlen(name), G_DISCARD);
1470 DIE("%s did not return a true value", name);
1474 DIE("panic: return");
1478 if (gimme == G_SCALAR) {
1480 *++newsp = (popsub2 && SvTEMP(*SP))
1481 ? *SP : sv_mortalcopy(*SP);
1483 *++newsp = &sv_undef;
1485 else if (gimme == G_ARRAY) {
1486 while (++MARK <= SP) {
1487 *++newsp = (popsub2 && SvTEMP(*MARK))
1488 ? *MARK : sv_mortalcopy(*MARK);
1489 TAINT_NOT; /* Each item is independent */
1494 /* Stack values are safe: */
1496 POPSUB2(); /* release CV and @_ ... */
1498 curpm = newpm; /* ... and pop $1 et al */
1501 return pop_return();
1508 register PERL_CONTEXT *cx;
1509 struct block_loop cxloop;
1510 struct block_sub cxsub;
1517 SV **mark = stack_base + cxstack[cxstack_ix].blk_oldsp;
1519 if (op->op_flags & OPf_SPECIAL) {
1520 cxix = dopoptoloop(cxstack_ix);
1522 DIE("Can't \"last\" outside a block");
1525 cxix = dopoptolabel(cPVOP->op_pv);
1527 DIE("Label not found for \"last %s\"", cPVOP->op_pv);
1529 if (cxix < cxstack_ix)
1533 switch (cx->cx_type) {
1535 POPLOOP1(cx); /* Delay POPLOOP2 until stack values are safe */
1537 nextop = cxloop.last_op->op_next;
1540 POPSUB1(cx); /* Delay POPSUB2 until stack values are safe */
1542 nextop = pop_return();
1546 nextop = pop_return();
1553 if (gimme == G_SCALAR) {
1555 *++newsp = ((pop2 == CXt_SUB) && SvTEMP(*SP))
1556 ? *SP : sv_mortalcopy(*SP);
1558 *++newsp = &sv_undef;
1560 else if (gimme == G_ARRAY) {
1561 while (++MARK <= SP) {
1562 *++newsp = ((pop2 == CXt_SUB) && SvTEMP(*MARK))
1563 ? *MARK : sv_mortalcopy(*MARK);
1564 TAINT_NOT; /* Each item is independent */
1570 /* Stack values are safe: */
1573 POPLOOP2(); /* release loop vars ... */
1577 POPSUB2(); /* release CV and @_ ... */
1580 curpm = newpm; /* ... and pop $1 et al */
1589 register PERL_CONTEXT *cx;
1592 if (op->op_flags & OPf_SPECIAL) {
1593 cxix = dopoptoloop(cxstack_ix);
1595 DIE("Can't \"next\" outside a block");
1598 cxix = dopoptolabel(cPVOP->op_pv);
1600 DIE("Label not found for \"next %s\"", cPVOP->op_pv);
1602 if (cxix < cxstack_ix)
1606 oldsave = scopestack[scopestack_ix - 1];
1607 LEAVE_SCOPE(oldsave);
1608 return cx->blk_loop.next_op;
1614 register PERL_CONTEXT *cx;
1617 if (op->op_flags & OPf_SPECIAL) {
1618 cxix = dopoptoloop(cxstack_ix);
1620 DIE("Can't \"redo\" outside a block");
1623 cxix = dopoptolabel(cPVOP->op_pv);
1625 DIE("Label not found for \"redo %s\"", cPVOP->op_pv);
1627 if (cxix < cxstack_ix)
1631 oldsave = scopestack[scopestack_ix - 1];
1632 LEAVE_SCOPE(oldsave);
1633 return cx->blk_loop.redo_op;
1637 dofindlabel(OP *o, char *label, OP **opstack, OP **oplimit)
1641 static char too_deep[] = "Target of goto is too deeply nested";
1645 if (o->op_type == OP_LEAVE ||
1646 o->op_type == OP_SCOPE ||
1647 o->op_type == OP_LEAVELOOP ||
1648 o->op_type == OP_LEAVETRY)
1650 *ops++ = cUNOPo->op_first;
1655 if (o->op_flags & OPf_KIDS) {
1656 /* First try all the kids at this level, since that's likeliest. */
1657 for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling) {
1658 if ((kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) &&
1659 kCOP->cop_label && strEQ(kCOP->cop_label, label))
1662 for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling) {
1663 if (kid == lastgotoprobe)
1665 if ((kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) &&
1667 (ops[-1]->op_type != OP_NEXTSTATE &&
1668 ops[-1]->op_type != OP_DBSTATE)))
1670 if (o = dofindlabel(kid, label, ops, oplimit))
1680 return pp_goto(ARGS);
1689 register PERL_CONTEXT *cx;
1690 #define GOTO_DEPTH 64
1691 OP *enterops[GOTO_DEPTH];
1693 int do_dump = (op->op_type == OP_DUMP);
1696 if (op->op_flags & OPf_STACKED) {
1699 /* This egregious kludge implements goto &subroutine */
1700 if (SvROK(sv) && SvTYPE(SvRV(sv)) == SVt_PVCV) {
1702 register PERL_CONTEXT *cx;
1703 CV* cv = (CV*)SvRV(sv);
1708 if (!CvROOT(cv) && !CvXSUB(cv)) {
1710 SV *tmpstr = sv_newmortal();
1711 gv_efullname3(tmpstr, CvGV(cv), Nullch);
1712 DIE("Goto undefined subroutine &%s",SvPVX(tmpstr));
1714 DIE("Goto undefined subroutine");
1717 /* First do some returnish stuff. */
1718 cxix = dopoptosub(cxstack_ix);
1720 DIE("Can't goto subroutine outside a subroutine");
1721 if (cxix < cxstack_ix)
1724 if (cx->cx_type == CXt_EVAL && cx->blk_eval.old_op_type == OP_ENTEREVAL)
1725 DIE("Can't goto subroutine from an eval-string");
1727 if (cx->cx_type == CXt_SUB &&
1728 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 (cx->cx_type == CXt_SUB &&
1744 !(CvDEPTH(cx->blk_sub.cv) = cx->blk_sub.olddepth))
1745 SvREFCNT_dec(cx->blk_sub.cv);
1746 oldsave = scopestack[scopestack_ix - 1];
1747 LEAVE_SCOPE(oldsave);
1749 /* Now do some callish stuff. */
1752 if (CvOLDSTYLE(cv)) {
1753 I32 (*fp3)_((int,int,int));
1758 fp3 = (I32(*)_((int,int,int)))CvXSUB(cv);
1759 items = (*fp3)(CvXSUBANY(cv).any_i32,
1760 mark - stack_base + 1,
1762 SP = stack_base + items;
1765 stack_sp--; /* There is no cv arg. */
1766 (void)(*CvXSUB(cv))(THIS_ cv);
1769 return pop_return();
1772 AV* padlist = CvPADLIST(cv);
1773 SV** svp = AvARRAY(padlist);
1774 if (cx->cx_type == CXt_EVAL) {
1775 in_eval = cx->blk_eval.old_in_eval;
1776 eval_root = cx->blk_eval.old_eval_root;
1777 cx->cx_type = CXt_SUB;
1778 cx->blk_sub.hasargs = 0;
1780 cx->blk_sub.cv = cv;
1781 cx->blk_sub.olddepth = CvDEPTH(cv);
1783 if (CvDEPTH(cv) < 2)
1784 (void)SvREFCNT_inc(cv);
1785 else { /* save temporaries on recursion? */
1786 if (CvDEPTH(cv) == 100 && dowarn)
1787 sub_crush_depth(cv);
1788 if (CvDEPTH(cv) > AvFILLp(padlist)) {
1789 AV *newpad = newAV();
1790 SV **oldpad = AvARRAY(svp[CvDEPTH(cv)-1]);
1791 I32 ix = AvFILLp((AV*)svp[1]);
1792 svp = AvARRAY(svp[0]);
1793 for ( ;ix > 0; ix--) {
1794 if (svp[ix] != &sv_undef) {
1795 char *name = SvPVX(svp[ix]);
1796 if ((SvFLAGS(svp[ix]) & SVf_FAKE)
1799 /* outer lexical or anon code */
1800 av_store(newpad, ix,
1801 SvREFCNT_inc(oldpad[ix]) );
1803 else { /* our own lexical */
1805 av_store(newpad, ix, sv = (SV*)newAV());
1806 else if (*name == '%')
1807 av_store(newpad, ix, sv = (SV*)newHV());
1809 av_store(newpad, ix, sv = NEWSV(0,0));
1814 av_store(newpad, ix, sv = NEWSV(0,0));
1818 if (cx->blk_sub.hasargs) {
1821 av_store(newpad, 0, (SV*)av);
1822 AvFLAGS(av) = AVf_REIFY;
1824 av_store(padlist, CvDEPTH(cv), (SV*)newpad);
1825 AvFILLp(padlist) = CvDEPTH(cv);
1826 svp = AvARRAY(padlist);
1830 if (!cx->blk_sub.hasargs) {
1831 AV* av = (AV*)curpad[0];
1833 items = AvFILLp(av) + 1;
1835 /* Mark is at the end of the stack. */
1837 Copy(AvARRAY(av), SP + 1, items, SV*);
1842 #endif /* USE_THREADS */
1844 curpad = AvARRAY((AV*)svp[CvDEPTH(cv)]);
1846 if (cx->blk_sub.hasargs)
1847 #endif /* USE_THREADS */
1849 AV* av = (AV*)curpad[0];
1853 cx->blk_sub.savearray = GvAV(defgv);
1854 GvAV(defgv) = (AV*)SvREFCNT_inc(av);
1855 #endif /* USE_THREADS */
1856 cx->blk_sub.argarray = av;
1859 if (items >= AvMAX(av) + 1) {
1861 if (AvARRAY(av) != ary) {
1862 AvMAX(av) += AvARRAY(av) - AvALLOC(av);
1863 SvPVX(av) = (char*)ary;
1865 if (items >= AvMAX(av) + 1) {
1866 AvMAX(av) = items - 1;
1867 Renew(ary,items+1,SV*);
1869 SvPVX(av) = (char*)ary;
1872 Copy(mark,AvARRAY(av),items,SV*);
1873 AvFILLp(av) = items - 1;
1881 if (PERLDB_SUB && curstash != debstash) {
1883 * We do not care about using sv to call CV;
1884 * it's for informational purposes only.
1886 SV *sv = GvSV(DBsub);
1888 gv_efullname3(sv, CvGV(cv), Nullch);
1890 RETURNOP(CvSTART(cv));
1894 label = SvPV(sv,na);
1896 else if (op->op_flags & OPf_SPECIAL) {
1898 DIE("goto must have label");
1901 label = cPVOP->op_pv;
1903 if (label && *label) {
1910 for (ix = cxstack_ix; ix >= 0; ix--) {
1912 switch (cx->cx_type) {
1914 gotoprobe = eval_root; /* XXX not good for nested eval */
1917 gotoprobe = cx->blk_oldcop->op_sibling;
1923 gotoprobe = cx->blk_oldcop->op_sibling;
1925 gotoprobe = main_root;
1928 if (CvDEPTH(cx->blk_sub.cv)) {
1929 gotoprobe = CvROOT(cx->blk_sub.cv);
1934 DIE("Can't \"goto\" outside a block");
1938 gotoprobe = main_root;
1941 retop = dofindlabel(gotoprobe, label,
1942 enterops, enterops + GOTO_DEPTH);
1945 lastgotoprobe = gotoprobe;
1948 DIE("Can't find label %s", label);
1950 /* pop unwanted frames */
1952 if (ix < cxstack_ix) {
1959 oldsave = scopestack[scopestack_ix];
1960 LEAVE_SCOPE(oldsave);
1963 /* push wanted frames */
1965 if (*enterops && enterops[1]) {
1967 for (ix = 1; enterops[ix]; ix++) {
1969 /* Eventually we may want to stack the needed arguments
1970 * for each op. For now, we punt on the hard ones. */
1971 if (op->op_type == OP_ENTERITER)
1972 DIE("Can't \"goto\" into the middle of a foreach loop",
1974 (CALLOP->op_ppaddr)(ARGS);
1982 if (!retop) retop = main_start;
1989 restartop = 0; /* hmm, must be GNU unexec().. */
1993 if (curstack == signalstack) {
2011 if (anum == 1 && VMSISH_EXIT)
2024 double value = SvNVx(GvSV(cCOP->cop_gv));
2025 register I32 match = I_32(value);
2028 if (((double)match) > value)
2029 --match; /* was fractional--truncate other way */
2031 match -= cCOP->uop.scop.scop_offset;
2034 else if (match > cCOP->uop.scop.scop_max)
2035 match = cCOP->uop.scop.scop_max;
2036 op = cCOP->uop.scop.scop_next[match];
2046 op = op->op_next; /* can't assume anything */
2048 match = *(SvPVx(GvSV(cCOP->cop_gv), na)) & 255;
2049 match -= cCOP->uop.scop.scop_offset;
2052 else if (match > cCOP->uop.scop.scop_max)
2053 match = cCOP->uop.scop.scop_max;
2054 op = cCOP->uop.scop.scop_next[match];
2063 save_lines(AV *array, SV *sv)
2065 register char *s = SvPVX(sv);
2066 register char *send = SvPVX(sv) + SvCUR(sv);
2068 register I32 line = 1;
2070 while (s && s < send) {
2071 SV *tmpstr = NEWSV(85,0);
2073 sv_upgrade(tmpstr, SVt_PVMG);
2074 t = strchr(s, '\n');
2080 sv_setpvn(tmpstr, s, t - s);
2081 av_store(array, line++, tmpstr);
2096 assert(CATCH_GET == TRUE);
2097 DEBUG_l(deb("Setting up local jumplevel %p, was %p\n", &cur_env, top_env));
2101 default: /* topmost level handles it */
2108 PerlIO_printf(PerlIO_stderr(), "panic: restartop\n");
2124 sv_compile_2op(SV *sv, OP** startop, char *code, AV** avp)
2125 /* sv Text to convert to OP tree. */
2126 /* startop op_free() this to undo. */
2127 /* code Short string id of the caller. */
2129 dSP; /* Make POPBLOCK work. */
2132 I32 gimme = 0; /* SUSPECT - INITIALZE TO WHAT? NI-S */
2136 char tmpbuf[TYPE_DIGITS(long) + 12 + 10];
2142 /* switch to eval mode */
2144 SAVESPTR(compiling.cop_filegv);
2145 SAVEI16(compiling.cop_line);
2146 sprintf(tmpbuf, "_<(%.10s_eval %lu)", code, (unsigned long)++evalseq);
2147 compiling.cop_filegv = gv_fetchfile(tmpbuf+2);
2148 compiling.cop_line = 1;
2149 /* XXX For C<eval "...">s within BEGIN {} blocks, this ends up
2150 deleting the eval's FILEGV from the stash before gv_check() runs
2151 (i.e. before run-time proper). To work around the coredump that
2152 ensues, we always turn GvMULTI_on for any globals that were
2153 introduced within evals. See force_ident(). GSAR 96-10-12 */
2154 safestr = savepv(tmpbuf);
2155 SAVEDELETE(defstash, safestr, strlen(safestr));
2157 #ifdef OP_IN_REGISTER
2165 op->op_type = 0; /* Avoid uninit warning. */
2166 op->op_flags = 0; /* Avoid uninit warning. */
2167 PUSHBLOCK(cx, CXt_EVAL, SP);
2168 PUSHEVAL(cx, 0, compiling.cop_filegv);
2169 rop = doeval(G_SCALAR, startop);
2173 (*startop)->op_type = OP_NULL;
2174 (*startop)->op_ppaddr = ppaddr[OP_NULL];
2176 *avp = (AV*)SvREFCNT_inc(comppad);
2178 #ifdef OP_IN_REGISTER
2184 /* With USE_THREADS, eval_owner must be held on entry to doeval */
2186 doeval(int gimme, OP** startop)
2199 /* set up a scratch pad */
2204 SAVESPTR(comppad_name);
2205 SAVEI32(comppad_name_fill);
2206 SAVEI32(min_intro_pending);
2207 SAVEI32(max_intro_pending);
2210 for (i = cxstack_ix - 1; i >= 0; i--) {
2211 PERL_CONTEXT *cx = &cxstack[i];
2212 if (cx->cx_type == CXt_EVAL)
2214 else if (cx->cx_type == CXt_SUB) {
2215 caller = cx->blk_sub.cv;
2221 compcv = (CV*)NEWSV(1104,0);
2222 sv_upgrade((SV *)compcv, SVt_PVCV);
2223 CvUNIQUE_on(compcv);
2225 CvOWNER(compcv) = 0;
2226 New(666, CvMUTEXP(compcv), 1, perl_mutex);
2227 MUTEX_INIT(CvMUTEXP(compcv));
2228 #endif /* USE_THREADS */
2231 av_push(comppad, Nullsv);
2232 curpad = AvARRAY(comppad);
2233 comppad_name = newAV();
2234 comppad_name_fill = 0;
2235 min_intro_pending = 0;
2238 av_store(comppad_name, 0, newSVpv("@_", 2));
2239 curpad[0] = (SV*)newAV();
2240 SvPADMY_on(curpad[0]); /* XXX Needed? */
2241 #endif /* USE_THREADS */
2243 comppadlist = newAV();
2244 AvREAL_off(comppadlist);
2245 av_store(comppadlist, 0, (SV*)comppad_name);
2246 av_store(comppadlist, 1, (SV*)comppad);
2247 CvPADLIST(compcv) = comppadlist;
2249 if (!saveop || saveop->op_type != OP_REQUIRE)
2250 CvOUTSIDE(compcv) = (CV*)SvREFCNT_inc(caller);
2254 /* make sure we compile in the right package */
2256 newstash = curcop->cop_stash;
2257 if (curstash != newstash) {
2259 curstash = newstash;
2263 SAVEFREESV(beginav);
2265 /* try to compile it */
2269 curcop = &compiling;
2270 curcop->cop_arybase = 0;
2272 rs = newSVpv("\n", 1);
2273 if (saveop && saveop->op_flags & OPf_SPECIAL)
2277 if (yyparse() || error_count || !eval_root) {
2281 I32 optype = 0; /* Might be reset by POPEVAL. */
2288 SP = stack_base + POPMARK; /* pop original mark */
2296 if (optype == OP_REQUIRE) {
2297 char* msg = SvPVx(ERRSV, na);
2298 DIE("%s", *msg ? msg : "Compilation failed in require");
2299 } else if (startop) {
2300 char* msg = SvPVx(ERRSV, na);
2304 croak("%sCompilation failed in regexp", (*msg ? msg : "Unknown error\n"));
2307 rs = SvREFCNT_inc(nrs);
2309 MUTEX_LOCK(&eval_mutex);
2311 COND_SIGNAL(&eval_cond);
2312 MUTEX_UNLOCK(&eval_mutex);
2313 #endif /* USE_THREADS */
2317 rs = SvREFCNT_inc(nrs);
2318 compiling.cop_line = 0;
2320 *startop = eval_root;
2321 SvREFCNT_dec(CvOUTSIDE(compcv));
2322 CvOUTSIDE(compcv) = Nullcv;
2324 SAVEFREEOP(eval_root);
2326 scalarvoid(eval_root);
2327 else if (gimme & G_ARRAY)
2332 DEBUG_x(dump_eval());
2334 /* Register with debugger: */
2335 if (PERLDB_INTER && saveop->op_type == OP_REQUIRE) {
2336 CV *cv = perl_get_cv("DB::postponed", FALSE);
2340 XPUSHs((SV*)compiling.cop_filegv);
2342 perl_call_sv((SV*)cv, G_DISCARD);
2346 /* compiled okay, so do it */
2348 CvDEPTH(compcv) = 1;
2349 SP = stack_base + POPMARK; /* pop original mark */
2350 op = saveop; /* The caller may need it. */
2352 MUTEX_LOCK(&eval_mutex);
2354 COND_SIGNAL(&eval_cond);
2355 MUTEX_UNLOCK(&eval_mutex);
2356 #endif /* USE_THREADS */
2358 RETURNOP(eval_start);
2364 register PERL_CONTEXT *cx;
2369 SV *namesv = Nullsv;
2371 I32 gimme = G_SCALAR;
2372 PerlIO *tryrsfp = 0;
2375 if (SvNIOKp(sv) && !SvPOKp(sv)) {
2376 SET_NUMERIC_STANDARD();
2377 if (atof(patchlevel) + 0.00000999 < SvNV(sv))
2378 DIE("Perl %s required--this is only version %s, stopped",
2379 SvPV(sv,na),patchlevel);
2382 name = SvPV(sv, len);
2383 if (!(name && len > 0 && *name))
2384 DIE("Null filename used");
2385 TAINT_PROPER("require");
2386 if (op->op_type == OP_REQUIRE &&
2387 (svp = hv_fetch(GvHVn(incgv), name, len, 0)) &&
2391 /* prepare to compile file */
2396 (name[1] == '.' && name[2] == '/')))
2398 || (name[0] && name[1] == ':')
2401 || (name[0] == '\\' && name[1] == '\\') /* UNC path */
2404 || (strchr(name,':') || ((*name == '[' || *name == '<') &&
2405 (isALNUM(name[1]) || strchr("$-_]>",name[1]))))
2410 tryrsfp = PerlIO_open(name,PERL_SCRIPT_MODE);
2413 AV *ar = GvAVn(incgv);
2417 if ((unixname = tounixspec(name, Nullch)) != Nullch)
2420 namesv = NEWSV(806, 0);
2421 for (i = 0; i <= AvFILL(ar); i++) {
2422 char *dir = SvPVx(*av_fetch(ar, i, TRUE), na);
2425 if ((unixdir = tounixpath(dir, Nullch)) == Nullch)
2427 sv_setpv(namesv, unixdir);
2428 sv_catpv(namesv, unixname);
2430 sv_setpvf(namesv, "%s/%s", dir, name);
2432 tryname = SvPVX(namesv);
2433 tryrsfp = PerlIO_open(tryname, PERL_SCRIPT_MODE);
2435 if (tryname[0] == '.' && tryname[1] == '/')
2442 SAVESPTR(compiling.cop_filegv);
2443 compiling.cop_filegv = gv_fetchfile(tryrsfp ? tryname : name);
2444 SvREFCNT_dec(namesv);
2446 if (op->op_type == OP_REQUIRE) {
2447 SV *msg = sv_2mortal(newSVpvf("Can't locate %s in @INC", name));
2448 SV *dirmsgsv = NEWSV(0, 0);
2449 AV *ar = GvAVn(incgv);
2451 if (instr(SvPVX(msg), ".h "))
2452 sv_catpv(msg, " (change .h to .ph maybe?)");
2453 if (instr(SvPVX(msg), ".ph "))
2454 sv_catpv(msg, " (did you run h2ph?)");
2455 sv_catpv(msg, " (@INC contains:");
2456 for (i = 0; i <= AvFILL(ar); i++) {
2457 char *dir = SvPVx(*av_fetch(ar, i, TRUE), na);
2458 sv_setpvf(dirmsgsv, " %s", dir);
2459 sv_catsv(msg, dirmsgsv);
2461 sv_catpvn(msg, ")", 1);
2462 SvREFCNT_dec(dirmsgsv);
2469 /* Assume success here to prevent recursive requirement. */
2470 (void)hv_store(GvHVn(incgv), name, strlen(name),
2471 newSVsv(GvSV(compiling.cop_filegv)), 0 );
2475 lex_start(sv_2mortal(newSVpv("",0)));
2477 save_aptr(&rsfp_filters);
2478 rsfp_filters = NULL;
2482 name = savepv(name);
2487 /* switch to eval mode */
2489 push_return(op->op_next);
2490 PUSHBLOCK(cx, CXt_EVAL, SP);
2491 PUSHEVAL(cx, name, compiling.cop_filegv);
2493 compiling.cop_line = 0;
2497 MUTEX_LOCK(&eval_mutex);
2498 if (eval_owner && eval_owner != thr)
2500 COND_WAIT(&eval_cond, &eval_mutex);
2502 MUTEX_UNLOCK(&eval_mutex);
2503 #endif /* USE_THREADS */
2504 return DOCATCH(doeval(G_SCALAR, NULL));
2509 return pp_require(ARGS);
2515 register PERL_CONTEXT *cx;
2517 I32 gimme = GIMME_V, was = sub_generation;
2518 char tmpbuf[TYPE_DIGITS(long) + 12];
2523 if (!SvPV(sv,len) || !len)
2525 TAINT_PROPER("eval");
2531 /* switch to eval mode */
2533 SAVESPTR(compiling.cop_filegv);
2534 sprintf(tmpbuf, "_<(eval %lu)", (unsigned long)++evalseq);
2535 compiling.cop_filegv = gv_fetchfile(tmpbuf+2);
2536 compiling.cop_line = 1;
2537 /* XXX For C<eval "...">s within BEGIN {} blocks, this ends up
2538 deleting the eval's FILEGV from the stash before gv_check() runs
2539 (i.e. before run-time proper). To work around the coredump that
2540 ensues, we always turn GvMULTI_on for any globals that were
2541 introduced within evals. See force_ident(). GSAR 96-10-12 */
2542 safestr = savepv(tmpbuf);
2543 SAVEDELETE(defstash, safestr, strlen(safestr));
2545 hints = op->op_targ;
2547 push_return(op->op_next);
2548 PUSHBLOCK(cx, CXt_EVAL, SP);
2549 PUSHEVAL(cx, 0, compiling.cop_filegv);
2551 /* prepare to compile string */
2553 if (PERLDB_LINE && curstash != debstash)
2554 save_lines(GvAV(compiling.cop_filegv), linestr);
2557 MUTEX_LOCK(&eval_mutex);
2558 if (eval_owner && eval_owner != thr)
2560 COND_WAIT(&eval_cond, &eval_mutex);
2562 MUTEX_UNLOCK(&eval_mutex);
2563 #endif /* USE_THREADS */
2564 ret = doeval(gimme, NULL);
2565 if (PERLDB_INTER && was != sub_generation /* Some subs defined here. */
2566 && ret != op->op_next) { /* Successive compilation. */
2567 strcpy(safestr, "_<(eval )"); /* Anything fake and short. */
2569 return DOCATCH(ret);
2579 register PERL_CONTEXT *cx;
2581 U8 save_flags = op -> op_flags;
2586 retop = pop_return();
2589 if (gimme == G_VOID)
2591 else if (gimme == G_SCALAR) {
2594 if (SvFLAGS(TOPs) & SVs_TEMP)
2597 *MARK = sv_mortalcopy(TOPs);
2605 /* in case LEAVE wipes old return values */
2606 for (mark = newsp + 1; mark <= SP; mark++) {
2607 if (!(SvFLAGS(*mark) & SVs_TEMP)) {
2608 *mark = sv_mortalcopy(*mark);
2609 TAINT_NOT; /* Each item is independent */
2613 curpm = newpm; /* Don't pop $1 et al till now */
2616 * Closures mentioned at top level of eval cannot be referenced
2617 * again, and their presence indirectly causes a memory leak.
2618 * (Note that the fact that compcv and friends are still set here
2619 * is, AFAIK, an accident.) --Chip
2621 if (AvFILLp(comppad_name) >= 0) {
2622 SV **svp = AvARRAY(comppad_name);
2624 for (ix = AvFILLp(comppad_name); ix >= 0; ix--) {
2626 if (sv && sv != &sv_undef && *SvPVX(sv) == '&') {
2628 svp[ix] = &sv_undef;
2632 SvREFCNT_dec(CvOUTSIDE(sv));
2633 CvOUTSIDE(sv) = Nullcv;
2646 assert(CvDEPTH(compcv) == 1);
2648 CvDEPTH(compcv) = 0;
2651 if (optype == OP_REQUIRE &&
2652 !(gimme == G_SCALAR ? SvTRUE(*SP) : SP > newsp))
2654 /* Unassume the success we assumed earlier. */
2655 char *name = cx->blk_eval.old_name;
2656 (void)hv_delete(GvHVn(incgv), name, strlen(name), G_DISCARD);
2657 retop = die("%s did not return a true value", name);
2658 /* die_where() did LEAVE, or we won't be here */
2662 if (!(save_flags & OPf_SPECIAL))
2672 register PERL_CONTEXT *cx;
2673 I32 gimme = GIMME_V;
2678 push_return(cLOGOP->op_other->op_next);
2679 PUSHBLOCK(cx, CXt_EVAL, SP);
2681 eval_root = op; /* Only needed so that goto works right. */
2686 return DOCATCH(op->op_next);
2696 register PERL_CONTEXT *cx;
2704 if (gimme == G_VOID)
2706 else if (gimme == G_SCALAR) {
2709 if (SvFLAGS(TOPs) & (SVs_PADTMP|SVs_TEMP))
2712 *MARK = sv_mortalcopy(TOPs);
2721 /* in case LEAVE wipes old return values */
2722 for (mark = newsp + 1; mark <= SP; mark++) {
2723 if (!(SvFLAGS(*mark) & (SVs_PADTMP|SVs_TEMP))) {
2724 *mark = sv_mortalcopy(*mark);
2725 TAINT_NOT; /* Each item is independent */
2729 curpm = newpm; /* Don't pop $1 et al till now */
2740 register char *s = SvPV_force(sv, len);
2741 register char *send = s + len;
2742 register char *base;
2743 register I32 skipspaces = 0;
2746 bool postspace = FALSE;
2754 croak("Null picture in formline");
2756 New(804, fops, (send - s)*3+10, U16); /* Almost certainly too long... */
2761 *fpc++ = FF_LINEMARK;
2762 noblank = repeat = FALSE;
2780 case ' ': case '\t':
2791 *fpc++ = FF_LITERAL;
2799 *fpc++ = skipspaces;
2803 *fpc++ = FF_NEWLINE;
2807 arg = fpc - linepc + 1;
2814 *fpc++ = FF_LINEMARK;
2815 noblank = repeat = FALSE;
2824 ischop = s[-1] == '^';
2830 arg = (s - base) - 1;
2832 *fpc++ = FF_LITERAL;
2841 *fpc++ = FF_LINEGLOB;
2843 else if (*s == '#' || (*s == '.' && s[1] == '#')) {
2844 arg = ischop ? 512 : 0;
2854 arg |= 256 + (s - f);
2856 *fpc++ = s - base; /* fieldsize for FETCH */
2857 *fpc++ = FF_DECIMAL;
2862 bool ismore = FALSE;
2865 while (*++s == '>') ;
2866 prespace = FF_SPACE;
2868 else if (*s == '|') {
2869 while (*++s == '|') ;
2870 prespace = FF_HALFSPACE;
2875 while (*++s == '<') ;
2878 if (*s == '.' && s[1] == '.' && s[2] == '.') {
2882 *fpc++ = s - base; /* fieldsize for FETCH */
2884 *fpc++ = ischop ? FF_CHECKCHOP : FF_CHECKNL;
2902 { /* need to jump to the next word */
2904 z = WORD_ALIGN - SvCUR(sv) % WORD_ALIGN;
2905 SvGROW(sv, SvCUR(sv) + z + arg * sizeof(U16) + 4);
2906 s = SvPVX(sv) + SvCUR(sv) + z;
2908 Copy(fops, s, arg, U16);
2910 sv_magic(sv, Nullsv, 'f', Nullch, 0);
2915 * The rest of this file was derived from source code contributed
2918 * NOTE: this code was derived from Tom Horsley's qsort replacement
2919 * and should not be confused with the original code.
2922 /* Copyright (C) Tom Horsley, 1997. All rights reserved.
2924 Permission granted to distribute under the same terms as perl which are
2927 This program is free software; you can redistribute it and/or modify
2928 it under the terms of either:
2930 a) the GNU General Public License as published by the Free
2931 Software Foundation; either version 1, or (at your option) any
2934 b) the "Artistic License" which comes with this Kit.
2936 Details on the perl license can be found in the perl source code which
2937 may be located via the www.perl.com web page.
2939 This is the most wonderfulest possible qsort I can come up with (and
2940 still be mostly portable) My (limited) tests indicate it consistently
2941 does about 20% fewer calls to compare than does the qsort in the Visual
2942 C++ library, other vendors may vary.
2944 Some of the ideas in here can be found in "Algorithms" by Sedgewick,
2945 others I invented myself (or more likely re-invented since they seemed
2946 pretty obvious once I watched the algorithm operate for a while).
2948 Most of this code was written while watching the Marlins sweep the Giants
2949 in the 1997 National League Playoffs - no Braves fans allowed to use this
2950 code (just kidding :-).
2952 I realize that if I wanted to be true to the perl tradition, the only
2953 comment in this file would be something like:
2955 ...they shuffled back towards the rear of the line. 'No, not at the
2956 rear!' the slave-driver shouted. 'Three files up. And stay there...
2958 However, I really needed to violate that tradition just so I could keep
2959 track of what happens myself, not to mention some poor fool trying to
2960 understand this years from now :-).
2963 /* ********************************************************** Configuration */
2965 #ifndef QSORT_ORDER_GUESS
2966 #define QSORT_ORDER_GUESS 2 /* Select doubling version of the netBSD trick */
2969 /* QSORT_MAX_STACK is the largest number of partitions that can be stacked up for
2970 future processing - a good max upper bound is log base 2 of memory size
2971 (32 on 32 bit machines, 64 on 64 bit machines, etc). In reality can
2972 safely be smaller than that since the program is taking up some space and
2973 most operating systems only let you grab some subset of contiguous
2974 memory (not to mention that you are normally sorting data larger than
2975 1 byte element size :-).
2977 #ifndef QSORT_MAX_STACK
2978 #define QSORT_MAX_STACK 32
2981 /* QSORT_BREAK_EVEN is the size of the largest partition we should insertion sort.
2982 Anything bigger and we use qsort. If you make this too small, the qsort
2983 will probably break (or become less efficient), because it doesn't expect
2984 the middle element of a partition to be the same as the right or left -
2985 you have been warned).
2987 #ifndef QSORT_BREAK_EVEN
2988 #define QSORT_BREAK_EVEN 6
2991 /* ************************************************************* Data Types */
2993 /* hold left and right index values of a partition waiting to be sorted (the
2994 partition includes both left and right - right is NOT one past the end or
2995 anything like that).
2997 struct partition_stack_entry {
3000 #ifdef QSORT_ORDER_GUESS
3001 int qsort_break_even;
3005 /* ******************************************************* Shorthand Macros */
3007 /* Note that these macros will be used from inside the qsort function where
3008 we happen to know that the variable 'elt_size' contains the size of an
3009 array element and the variable 'temp' points to enough space to hold a
3010 temp element and the variable 'array' points to the array being sorted
3011 and 'compare' is the pointer to the compare routine.
3013 Also note that there are very many highly architecture specific ways
3014 these might be sped up, but this is simply the most generally portable
3015 code I could think of.
3018 /* Return < 0 == 0 or > 0 as the value of elt1 is < elt2, == elt2, > elt2
3021 #define qsort_cmp(elt1, elt2) \
3022 ((this->*compare)(array[elt1], array[elt2]))
3024 #define qsort_cmp(elt1, elt2) \
3025 ((*compare)(array[elt1], array[elt2]))
3028 #ifdef QSORT_ORDER_GUESS
3029 #define QSORT_NOTICE_SWAP swapped++;
3031 #define QSORT_NOTICE_SWAP
3034 /* swaps contents of array elements elt1, elt2.
3036 #define qsort_swap(elt1, elt2) \
3039 temp = array[elt1]; \
3040 array[elt1] = array[elt2]; \
3041 array[elt2] = temp; \
3044 /* rotate contents of elt1, elt2, elt3 such that elt1 gets elt2, elt2 gets
3045 elt3 and elt3 gets elt1.
3047 #define qsort_rotate(elt1, elt2, elt3) \
3050 temp = array[elt1]; \
3051 array[elt1] = array[elt2]; \
3052 array[elt2] = array[elt3]; \
3053 array[elt3] = temp; \
3056 /* ************************************************************ Debug stuff */
3063 return; /* good place to set a breakpoint */
3066 #define qsort_assert(t) (void)( (t) || (break_here(), 0) )
3069 doqsort_all_asserts(
3073 int (*compare)(const void * elt1, const void * elt2),
3074 int pc_left, int pc_right, int u_left, int u_right)
3078 qsort_assert(pc_left <= pc_right);
3079 qsort_assert(u_right < pc_left);
3080 qsort_assert(pc_right < u_left);
3081 for (i = u_right + 1; i < pc_left; ++i) {
3082 qsort_assert(qsort_cmp(i, pc_left) < 0);
3084 for (i = pc_left; i < pc_right; ++i) {
3085 qsort_assert(qsort_cmp(i, pc_right) == 0);
3087 for (i = pc_right + 1; i < u_left; ++i) {
3088 qsort_assert(qsort_cmp(pc_right, i) < 0);
3092 #define qsort_all_asserts(PC_LEFT, PC_RIGHT, U_LEFT, U_RIGHT) \
3093 doqsort_all_asserts(array, num_elts, elt_size, compare, \
3094 PC_LEFT, PC_RIGHT, U_LEFT, U_RIGHT)
3098 #define qsort_assert(t) ((void)0)
3100 #define qsort_all_asserts(PC_LEFT, PC_RIGHT, U_LEFT, U_RIGHT) ((void)0)
3104 /* ****************************************************************** qsort */
3108 qsortsv(SV ** array, size_t num_elts, SVCOMPARE compare)
3113 I32 (*compare)(SV *a, SV *b))
3118 struct partition_stack_entry partition_stack[QSORT_MAX_STACK];
3119 int next_stack_entry = 0;
3123 #ifdef QSORT_ORDER_GUESS
3124 int qsort_break_even;
3128 /* Make sure we actually have work to do.
3130 if (num_elts <= 1) {
3134 /* Setup the initial partition definition and fall into the sorting loop
3137 part_right = (int)(num_elts - 1);
3138 #ifdef QSORT_ORDER_GUESS
3139 qsort_break_even = QSORT_BREAK_EVEN;
3141 #define qsort_break_even QSORT_BREAK_EVEN
3144 if ((part_right - part_left) >= qsort_break_even) {
3145 /* OK, this is gonna get hairy, so lets try to document all the
3146 concepts and abbreviations and variables and what they keep
3149 pc: pivot chunk - the set of array elements we accumulate in the
3150 middle of the partition, all equal in value to the original
3151 pivot element selected. The pc is defined by:
3153 pc_left - the leftmost array index of the pc
3154 pc_right - the rightmost array index of the pc
3156 we start with pc_left == pc_right and only one element
3157 in the pivot chunk (but it can grow during the scan).
3159 u: uncompared elements - the set of elements in the partition
3160 we have not yet compared to the pivot value. There are two
3161 uncompared sets during the scan - one to the left of the pc
3162 and one to the right.
3164 u_right - the rightmost index of the left side's uncompared set
3165 u_left - the leftmost index of the right side's uncompared set
3167 The leftmost index of the left sides's uncompared set
3168 doesn't need its own variable because it is always defined
3169 by the leftmost edge of the whole partition (part_left). The
3170 same goes for the rightmost edge of the right partition
3173 We know there are no uncompared elements on the left once we
3174 get u_right < part_left and no uncompared elements on the
3175 right once u_left > part_right. When both these conditions
3176 are met, we have completed the scan of the partition.
3178 Any elements which are between the pivot chunk and the
3179 uncompared elements should be less than the pivot value on
3180 the left side and greater than the pivot value on the right
3181 side (in fact, the goal of the whole algorithm is to arrange
3182 for that to be true and make the groups of less-than and
3183 greater-then elements into new partitions to sort again).
3185 As you marvel at the complexity of the code and wonder why it
3186 has to be so confusing. Consider some of the things this level
3187 of confusion brings:
3189 Once I do a compare, I squeeze every ounce of juice out of it. I
3190 never do compare calls I don't have to do, and I certainly never
3193 I also never swap any elements unless I can prove there is a
3194 good reason. Many sort algorithms will swap a known value with
3195 an uncompared value just to get things in the right place (or
3196 avoid complexity :-), but that uncompared value, once it gets
3197 compared, may then have to be swapped again. A lot of the
3198 complexity of this code is due to the fact that it never swaps
3199 anything except compared values, and it only swaps them when the
3200 compare shows they are out of position.
3202 int pc_left, pc_right;
3203 int u_right, u_left;
3207 pc_left = ((part_left + part_right) / 2);
3209 u_right = pc_left - 1;
3210 u_left = pc_right + 1;
3212 /* Qsort works best when the pivot value is also the median value
3213 in the partition (unfortunately you can't find the median value
3214 without first sorting :-), so to give the algorithm a helping
3215 hand, we pick 3 elements and sort them and use the median value
3216 of that tiny set as the pivot value.
3218 Some versions of qsort like to use the left middle and right as
3219 the 3 elements to sort so they can insure the ends of the
3220 partition will contain values which will stop the scan in the
3221 compare loop, but when you have to call an arbitrarily complex
3222 routine to do a compare, its really better to just keep track of
3223 array index values to know when you hit the edge of the
3224 partition and avoid the extra compare. An even better reason to
3225 avoid using a compare call is the fact that you can drop off the
3226 edge of the array if someone foolishly provides you with an
3227 unstable compare function that doesn't always provide consistent
3230 So, since it is simpler for us to compare the three adjacent
3231 elements in the middle of the partition, those are the ones we
3232 pick here (conveniently pointed at by u_right, pc_left, and
3233 u_left). The values of the left, center, and right elements
3234 are refered to as l c and r in the following comments.
3237 #ifdef QSORT_ORDER_GUESS
3240 s = qsort_cmp(u_right, pc_left);
3243 s = qsort_cmp(pc_left, u_left);
3244 /* if l < c, c < r - already in order - nothing to do */
3246 /* l < c, c == r - already in order, pc grows */
3248 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3250 /* l < c, c > r - need to know more */
3251 s = qsort_cmp(u_right, u_left);
3253 /* l < c, c > r, l < r - swap c & r to get ordered */
3254 qsort_swap(pc_left, u_left);
3255 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3256 } else if (s == 0) {
3257 /* l < c, c > r, l == r - swap c&r, grow pc */
3258 qsort_swap(pc_left, u_left);
3260 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3262 /* l < c, c > r, l > r - make lcr into rlc to get ordered */
3263 qsort_rotate(pc_left, u_right, u_left);
3264 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3267 } else if (s == 0) {
3269 s = qsort_cmp(pc_left, u_left);
3271 /* l == c, c < r - already in order, grow pc */
3273 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3274 } else if (s == 0) {
3275 /* l == c, c == r - already in order, grow pc both ways */
3278 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3280 /* l == c, c > r - swap l & r, grow pc */
3281 qsort_swap(u_right, u_left);
3283 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3287 s = qsort_cmp(pc_left, u_left);
3289 /* l > c, c < r - need to know more */
3290 s = qsort_cmp(u_right, u_left);
3292 /* l > c, c < r, l < r - swap l & c to get ordered */
3293 qsort_swap(u_right, pc_left);
3294 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3295 } else if (s == 0) {
3296 /* l > c, c < r, l == r - swap l & c, grow pc */
3297 qsort_swap(u_right, pc_left);
3299 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3301 /* l > c, c < r, l > r - rotate lcr into crl to order */
3302 qsort_rotate(u_right, pc_left, u_left);
3303 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3305 } else if (s == 0) {
3306 /* l > c, c == r - swap ends, grow pc */
3307 qsort_swap(u_right, u_left);
3309 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3311 /* l > c, c > r - swap ends to get in order */
3312 qsort_swap(u_right, u_left);
3313 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3316 /* We now know the 3 middle elements have been compared and
3317 arranged in the desired order, so we can shrink the uncompared
3322 qsort_all_asserts(pc_left, pc_right, u_left, u_right);
3324 /* The above massive nested if was the simple part :-). We now have
3325 the middle 3 elements ordered and we need to scan through the
3326 uncompared sets on either side, swapping elements that are on
3327 the wrong side or simply shuffling equal elements around to get
3328 all equal elements into the pivot chunk.
3332 int still_work_on_left;
3333 int still_work_on_right;
3335 /* Scan the uncompared values on the left. If I find a value
3336 equal to the pivot value, move it over so it is adjacent to
3337 the pivot chunk and expand the pivot chunk. If I find a value
3338 less than the pivot value, then just leave it - its already
3339 on the correct side of the partition. If I find a greater
3340 value, then stop the scan.
3342 while (still_work_on_left = (u_right >= part_left)) {
3343 s = qsort_cmp(u_right, pc_left);
3346 } else if (s == 0) {
3348 if (pc_left != u_right) {
3349 qsort_swap(u_right, pc_left);
3355 qsort_assert(u_right < pc_left);
3356 qsort_assert(pc_left <= pc_right);
3357 qsort_assert(qsort_cmp(u_right + 1, pc_left) <= 0);
3358 qsort_assert(qsort_cmp(pc_left, pc_right) == 0);
3361 /* Do a mirror image scan of uncompared values on the right
3363 while (still_work_on_right = (u_left <= part_right)) {
3364 s = qsort_cmp(pc_right, u_left);
3367 } else if (s == 0) {
3369 if (pc_right != u_left) {
3370 qsort_swap(pc_right, u_left);
3376 qsort_assert(u_left > pc_right);
3377 qsort_assert(pc_left <= pc_right);
3378 qsort_assert(qsort_cmp(pc_right, u_left - 1) <= 0);
3379 qsort_assert(qsort_cmp(pc_left, pc_right) == 0);
3382 if (still_work_on_left) {
3383 /* I know I have a value on the left side which needs to be
3384 on the right side, but I need to know more to decide
3385 exactly the best thing to do with it.
3387 if (still_work_on_right) {
3388 /* I know I have values on both side which are out of
3389 position. This is a big win because I kill two birds
3390 with one swap (so to speak). I can advance the
3391 uncompared pointers on both sides after swapping both
3392 of them into the right place.
3394 qsort_swap(u_right, u_left);
3397 qsort_all_asserts(pc_left, pc_right, u_left, u_right);
3399 /* I have an out of position value on the left, but the
3400 right is fully scanned, so I "slide" the pivot chunk
3401 and any less-than values left one to make room for the
3402 greater value over on the right. If the out of position
3403 value is immediately adjacent to the pivot chunk (there
3404 are no less-than values), I can do that with a swap,
3405 otherwise, I have to rotate one of the less than values
3406 into the former position of the out of position value
3407 and the right end of the pivot chunk into the left end
3411 if (pc_left == u_right) {
3412 qsort_swap(u_right, pc_right);
3413 qsort_all_asserts(pc_left, pc_right-1, u_left, u_right-1);
3415 qsort_rotate(u_right, pc_left, pc_right);
3416 qsort_all_asserts(pc_left, pc_right-1, u_left, u_right-1);
3421 } else if (still_work_on_right) {
3422 /* Mirror image of complex case above: I have an out of
3423 position value on the right, but the left is fully
3424 scanned, so I need to shuffle things around to make room
3425 for the right value on the left.
3428 if (pc_right == u_left) {
3429 qsort_swap(u_left, pc_left);
3430 qsort_all_asserts(pc_left+1, pc_right, u_left+1, u_right);
3432 qsort_rotate(pc_right, pc_left, u_left);
3433 qsort_all_asserts(pc_left+1, pc_right, u_left+1, u_right);
3438 /* No more scanning required on either side of partition,
3439 break out of loop and figure out next set of partitions
3445 /* The elements in the pivot chunk are now in the right place. They
3446 will never move or be compared again. All I have to do is decide
3447 what to do with the stuff to the left and right of the pivot
3450 Notes on the QSORT_ORDER_GUESS ifdef code:
3452 1. If I just built these partitions without swapping any (or
3453 very many) elements, there is a chance that the elements are
3454 already ordered properly (being properly ordered will
3455 certainly result in no swapping, but the converse can't be
3458 2. A (properly written) insertion sort will run faster on
3459 already ordered data than qsort will.
3461 3. Perhaps there is some way to make a good guess about
3462 switching to an insertion sort earlier than partition size 6
3463 (for instance - we could save the partition size on the stack
3464 and increase the size each time we find we didn't swap, thus
3465 switching to insertion sort earlier for partitions with a
3466 history of not swapping).
3468 4. Naturally, if I just switch right away, it will make
3469 artificial benchmarks with pure ascending (or descending)
3470 data look really good, but is that a good reason in general?
3474 #ifdef QSORT_ORDER_GUESS
3476 #if QSORT_ORDER_GUESS == 1
3477 qsort_break_even = (part_right - part_left) + 1;
3479 #if QSORT_ORDER_GUESS == 2
3480 qsort_break_even *= 2;
3482 #if QSORT_ORDER_GUESS == 3
3483 int prev_break = qsort_break_even;
3484 qsort_break_even *= qsort_break_even;
3485 if (qsort_break_even < prev_break) {
3486 qsort_break_even = (part_right - part_left) + 1;
3490 qsort_break_even = QSORT_BREAK_EVEN;
3494 if (part_left < pc_left) {
3495 /* There are elements on the left which need more processing.
3496 Check the right as well before deciding what to do.
3498 if (pc_right < part_right) {
3499 /* We have two partitions to be sorted. Stack the biggest one
3500 and process the smallest one on the next iteration. This
3501 minimizes the stack height by insuring that any additional
3502 stack entries must come from the smallest partition which
3503 (because it is smallest) will have the fewest
3504 opportunities to generate additional stack entries.
3506 if ((part_right - pc_right) > (pc_left - part_left)) {
3507 /* stack the right partition, process the left */
3508 partition_stack[next_stack_entry].left = pc_right + 1;
3509 partition_stack[next_stack_entry].right = part_right;
3510 #ifdef QSORT_ORDER_GUESS
3511 partition_stack[next_stack_entry].qsort_break_even = qsort_break_even;
3513 part_right = pc_left - 1;
3515 /* stack the left partition, process the right */
3516 partition_stack[next_stack_entry].left = part_left;
3517 partition_stack[next_stack_entry].right = pc_left - 1;
3518 #ifdef QSORT_ORDER_GUESS
3519 partition_stack[next_stack_entry].qsort_break_even = qsort_break_even;
3521 part_left = pc_right + 1;
3523 qsort_assert(next_stack_entry < QSORT_MAX_STACK);
3526 /* The elements on the left are the only remaining elements
3527 that need sorting, arrange for them to be processed as the
3530 part_right = pc_left - 1;
3532 } else if (pc_right < part_right) {
3533 /* There is only one chunk on the right to be sorted, make it
3534 the new partition and loop back around.
3536 part_left = pc_right + 1;
3538 /* This whole partition wound up in the pivot chunk, so
3539 we need to get a new partition off the stack.
3541 if (next_stack_entry == 0) {
3542 /* the stack is empty - we are done */
3546 part_left = partition_stack[next_stack_entry].left;
3547 part_right = partition_stack[next_stack_entry].right;
3548 #ifdef QSORT_ORDER_GUESS
3549 qsort_break_even = partition_stack[next_stack_entry].qsort_break_even;
3553 /* This partition is too small to fool with qsort complexity, just
3554 do an ordinary insertion sort to minimize overhead.
3557 /* Assume 1st element is in right place already, and start checking
3558 at 2nd element to see where it should be inserted.
3560 for (i = part_left + 1; i <= part_right; ++i) {
3562 /* Scan (backwards - just in case 'i' is already in right place)
3563 through the elements already sorted to see if the ith element
3564 belongs ahead of one of them.
3566 for (j = i - 1; j >= part_left; --j) {
3567 if (qsort_cmp(i, j) >= 0) {
3568 /* i belongs right after j
3575 /* Looks like we really need to move some things
3579 for (k = i - 1; k >= j; --k)
3580 array[k + 1] = array[k];
3585 /* That partition is now sorted, grab the next one, or get out
3586 of the loop if there aren't any more.
3589 if (next_stack_entry == 0) {
3590 /* the stack is empty - we are done */
3594 part_left = partition_stack[next_stack_entry].left;
3595 part_right = partition_stack[next_stack_entry].right;
3596 #ifdef QSORT_ORDER_GUESS
3597 qsort_break_even = partition_stack[next_stack_entry].qsort_break_even;
3602 /* Believe it or not, the array is sorted at this point! */