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;
712 bool oldcatch = CATCH_GET;
719 if (sortstash != stash) {
720 firstgv = gv_fetchpv("a", TRUE, SVt_PV);
721 secondgv = gv_fetchpv("b", TRUE, SVt_PV);
725 SAVESPTR(GvSV(firstgv));
726 SAVESPTR(GvSV(secondgv));
728 PUSHBLOCK(cx, CXt_NULL, stack_base);
729 if (!(op->op_flags & OPf_SPECIAL)) {
730 bool hasargs = FALSE;
731 cx->cx_type = CXt_SUB;
732 cx->blk_gimme = G_SCALAR;
735 (void)SvREFCNT_inc(cv); /* in preparation for POPSUB */
737 sortcxix = cxstack_ix;
738 qsortsv((myorigmark+1), max, FUNC_NAME_TO_PTR(sortcv));
748 MEXTEND(SP, 20); /* Can't afford stack realloc on signal. */
749 qsortsv(ORIGMARK+1, max,
750 (op->op_private & OPpLOCALE)
751 ? FUNC_NAME_TO_PTR(sv_cmp_locale)
752 : FUNC_NAME_TO_PTR(sv_cmp));
755 stack_sp = ORIGMARK + max;
763 if (GIMME == G_ARRAY)
764 return cCONDOP->op_true;
765 return SvTRUEx(PAD_SV(op->op_targ)) ? cCONDOP->op_false : cCONDOP->op_true;
772 if (GIMME == G_ARRAY) {
773 RETURNOP(((CONDOP*)cUNOP->op_first)->op_false);
777 SV *targ = PAD_SV(op->op_targ);
779 if ((op->op_private & OPpFLIP_LINENUM)
780 ? last_in_gv && SvIV(sv) == IoLINES(GvIOp(last_in_gv))
782 sv_setiv(PAD_SV(cUNOP->op_first->op_targ), 1);
783 if (op->op_flags & OPf_SPECIAL) {
791 RETURNOP(((CONDOP*)cUNOP->op_first)->op_false);
804 if (GIMME == G_ARRAY) {
810 if (SvNIOKp(left) || !SvPOKp(left) ||
811 (looks_like_number(left) && *SvPVX(left) != '0') )
816 EXTEND_MORTAL(max - i + 1);
817 EXTEND(SP, max - i + 1);
820 sv = sv_2mortal(newSViv(i++));
825 SV *final = sv_mortalcopy(right);
827 char *tmps = SvPV(final, len);
829 sv = sv_mortalcopy(left);
830 while (!SvNIOKp(sv) && SvCUR(sv) <= len &&
831 strNE(SvPVX(sv),tmps) ) {
833 sv = sv_2mortal(newSVsv(sv));
836 if (strEQ(SvPVX(sv),tmps))
842 SV *targ = PAD_SV(cUNOP->op_first->op_targ);
844 if ((op->op_private & OPpFLIP_LINENUM)
845 ? last_in_gv && SvIV(sv) == IoLINES(GvIOp(last_in_gv))
847 sv_setiv(PAD_SV(((UNOP*)cUNOP->op_first)->op_first->op_targ), 0);
848 sv_catpv(targ, "E0");
859 dopoptolabel(char *label)
863 register PERL_CONTEXT *cx;
865 for (i = cxstack_ix; i >= 0; i--) {
867 switch (cx->cx_type) {
870 warn("Exiting substitution via %s", op_name[op->op_type]);
874 warn("Exiting subroutine via %s", op_name[op->op_type]);
878 warn("Exiting eval via %s", op_name[op->op_type]);
882 warn("Exiting pseudo-block via %s", op_name[op->op_type]);
885 if (!cx->blk_loop.label ||
886 strNE(label, cx->blk_loop.label) ) {
887 DEBUG_l(deb("(Skipping label #%ld %s)\n",
888 (long)i, cx->blk_loop.label));
891 DEBUG_l( deb("(Found label #%ld %s)\n", (long)i, label));
901 I32 gimme = block_gimme();
902 return (gimme == G_VOID) ? G_SCALAR : gimme;
911 cxix = dopoptosub(cxstack_ix);
915 switch (cxstack[cxix].blk_gimme) {
921 croak("panic: bad gimme: %d\n", cxstack[cxix].blk_gimme);
928 dopoptosub(I32 startingblock)
932 register PERL_CONTEXT *cx;
933 for (i = startingblock; i >= 0; i--) {
935 switch (cx->cx_type) {
940 DEBUG_l( deb("(Found sub #%ld)\n", (long)i));
948 dopoptoeval(I32 startingblock)
952 register PERL_CONTEXT *cx;
953 for (i = startingblock; i >= 0; i--) {
955 switch (cx->cx_type) {
959 DEBUG_l( deb("(Found eval #%ld)\n", (long)i));
967 dopoptoloop(I32 startingblock)
971 register PERL_CONTEXT *cx;
972 for (i = startingblock; i >= 0; i--) {
974 switch (cx->cx_type) {
977 warn("Exiting substitution via %s", op_name[op->op_type]);
981 warn("Exiting subroutine via %s", op_name[op->op_type]);
985 warn("Exiting eval via %s", op_name[op->op_type]);
989 warn("Exiting pseudo-block via %s", op_name[op->op_type]);
992 DEBUG_l( deb("(Found loop #%ld)\n", (long)i));
1003 register PERL_CONTEXT *cx;
1007 while (cxstack_ix > cxix) {
1008 cx = &cxstack[cxstack_ix];
1009 DEBUG_l(PerlIO_printf(Perl_debug_log, "Unwinding block %ld, type %s\n",
1010 (long) cxstack_ix, block_type[cx->cx_type]));
1011 /* Note: we don't need to restore the base context info till the end. */
1012 switch (cx->cx_type) {
1015 continue; /* not break */
1033 die_where(char *message)
1038 register PERL_CONTEXT *cx;
1044 STRLEN klen = strlen(message);
1046 svp = hv_fetch(ERRHV, message, klen, TRUE);
1049 static char prefix[] = "\t(in cleanup) ";
1051 sv_upgrade(*svp, SVt_IV);
1052 (void)SvIOK_only(*svp);
1055 SvGROW(err, SvCUR(err)+sizeof(prefix)+klen);
1056 sv_catpvn(err, prefix, sizeof(prefix)-1);
1057 sv_catpvn(err, message, klen);
1063 sv_setpv(ERRSV, message);
1065 while ((cxix = dopoptoeval(cxstack_ix)) < 0 && curstackinfo->si_prev) {
1073 if (cxix < cxstack_ix)
1077 if (cx->cx_type != CXt_EVAL) {
1078 PerlIO_printf(PerlIO_stderr(), "panic: die %s", message);
1083 if (gimme == G_SCALAR)
1084 *++newsp = &sv_undef;
1089 if (optype == OP_REQUIRE) {
1090 char* msg = SvPVx(ERRSV, na);
1091 DIE("%s", *msg ? msg : "Compilation failed in require");
1093 return pop_return();
1096 PerlIO_printf(PerlIO_stderr(), "%s",message);
1097 PerlIO_flush(PerlIO_stderr());
1106 if (SvTRUE(left) != SvTRUE(right))
1118 RETURNOP(cLOGOP->op_other);
1127 RETURNOP(cLOGOP->op_other);
1133 register I32 cxix = dopoptosub(cxstack_ix);
1134 register PERL_CONTEXT *cx;
1146 if (GIMME != G_ARRAY)
1150 if (DBsub && cxix >= 0 &&
1151 cxstack[cxix].blk_sub.cv == GvCV(DBsub))
1155 cxix = dopoptosub(cxix - 1);
1157 cx = &cxstack[cxix];
1158 if (cxstack[cxix].cx_type == CXt_SUB) {
1159 dbcxix = dopoptosub(cxix - 1);
1160 /* We expect that cxstack[dbcxix] is CXt_SUB, anyway, the
1161 field below is defined for any cx. */
1162 if (DBsub && dbcxix >= 0 && cxstack[dbcxix].blk_sub.cv == GvCV(DBsub))
1163 cx = &cxstack[dbcxix];
1166 if (GIMME != G_ARRAY) {
1167 hv = cx->blk_oldcop->cop_stash;
1172 sv_setpv(TARG, HvNAME(hv));
1178 hv = cx->blk_oldcop->cop_stash;
1182 PUSHs(sv_2mortal(newSVpv(HvNAME(hv), 0)));
1183 PUSHs(sv_2mortal(newSVpv(SvPVX(GvSV(cx->blk_oldcop->cop_filegv)), 0)));
1184 PUSHs(sv_2mortal(newSViv((I32)cx->blk_oldcop->cop_line)));
1187 if (cx->cx_type == CXt_SUB) { /* So is cxstack[dbcxix]. */
1189 gv_efullname3(sv, CvGV(cxstack[cxix].blk_sub.cv), Nullch);
1190 PUSHs(sv_2mortal(sv));
1191 PUSHs(sv_2mortal(newSViv((I32)cx->blk_sub.hasargs)));
1194 PUSHs(sv_2mortal(newSVpv("(eval)",0)));
1195 PUSHs(sv_2mortal(newSViv(0)));
1197 gimme = (I32)cx->blk_gimme;
1198 if (gimme == G_VOID)
1201 PUSHs(sv_2mortal(newSViv(gimme & G_ARRAY)));
1202 if (cx->cx_type == CXt_EVAL) {
1203 if (cx->blk_eval.old_op_type == OP_ENTEREVAL) {
1204 PUSHs(cx->blk_eval.cur_text);
1207 else if (cx->blk_eval.old_name) { /* Try blocks have old_name == 0. */
1208 /* Require, put the name. */
1209 PUSHs(sv_2mortal(newSVpv(cx->blk_eval.old_name, 0)));
1213 else if (cx->cx_type == CXt_SUB &&
1214 cx->blk_sub.hasargs &&
1215 curcop->cop_stash == debstash)
1217 AV *ary = cx->blk_sub.argarray;
1218 int off = AvARRAY(ary) - AvALLOC(ary);
1222 dbargs = GvAV(gv_AVadd(tmpgv = gv_fetchpv("DB::args", TRUE,
1225 AvREAL_off(dbargs); /* XXX Should be REIFY */
1228 if (AvMAX(dbargs) < AvFILLp(ary) + off)
1229 av_extend(dbargs, AvFILLp(ary) + off);
1230 Copy(AvALLOC(ary), AvARRAY(dbargs), AvFILLp(ary) + 1 + off, SV*);
1231 AvFILLp(dbargs) = AvFILLp(ary) + off;
1237 sortcv(SV *a, SV *b)
1240 I32 oldsaveix = savestack_ix;
1241 I32 oldscopeix = scopestack_ix;
1245 stack_sp = stack_base;
1248 if (stack_sp != stack_base + 1)
1249 croak("Sort subroutine didn't return single value");
1250 if (!SvNIOKp(*stack_sp))
1251 croak("Sort subroutine didn't return a numeric value");
1252 result = SvIV(*stack_sp);
1253 while (scopestack_ix > oldscopeix) {
1256 leave_scope(oldsaveix);
1269 sv_reset(tmps, curcop->cop_stash);
1282 TAINT_NOT; /* Each statement is presumed innocent */
1283 stack_sp = stack_base + cxstack[cxstack_ix].blk_oldsp;
1286 if (op->op_private || SvIV(DBsingle) || SvIV(DBsignal) || SvIV(DBtrace))
1290 register PERL_CONTEXT *cx;
1291 I32 gimme = G_ARRAY;
1298 DIE("No DB::DB routine defined");
1300 if (CvDEPTH(cv) >= 1 && !(debug & (1<<30))) /* don't do recursive DB::DB call */
1312 push_return(op->op_next);
1313 PUSHBLOCK(cx, CXt_SUB, SP);
1316 (void)SvREFCNT_inc(cv);
1318 curpad = AvARRAY((AV*)*av_fetch(CvPADLIST(cv),1,FALSE));
1319 RETURNOP(CvSTART(cv));
1333 register PERL_CONTEXT *cx;
1334 I32 gimme = GIMME_V;
1341 if (op->op_flags & OPf_SPECIAL)
1342 svp = save_threadsv(op->op_targ); /* per-thread variable */
1344 #endif /* USE_THREADS */
1346 svp = &curpad[op->op_targ]; /* "my" variable */
1351 (void)save_scalar(gv);
1352 svp = &GvSV(gv); /* symbol table variable */
1357 PUSHBLOCK(cx, CXt_LOOP, SP);
1358 PUSHLOOP(cx, svp, MARK);
1359 if (op->op_flags & OPf_STACKED)
1360 cx->blk_loop.iterary = (AV*)SvREFCNT_inc(POPs);
1362 cx->blk_loop.iterary = curstack;
1363 AvFILLp(curstack) = SP - stack_base;
1364 cx->blk_loop.iterix = MARK - stack_base;
1373 register PERL_CONTEXT *cx;
1374 I32 gimme = GIMME_V;
1380 PUSHBLOCK(cx, CXt_LOOP, SP);
1381 PUSHLOOP(cx, 0, SP);
1389 register PERL_CONTEXT *cx;
1390 struct block_loop cxloop;
1398 POPLOOP1(cx); /* Delay POPLOOP2 until stack values are safe */
1401 if (gimme == G_VOID)
1403 else if (gimme == G_SCALAR) {
1405 *++newsp = sv_mortalcopy(*SP);
1407 *++newsp = &sv_undef;
1411 *++newsp = sv_mortalcopy(*++mark);
1412 TAINT_NOT; /* Each item is independent */
1418 POPLOOP2(); /* Stack values are safe: release loop vars ... */
1419 curpm = newpm; /* ... and pop $1 et al */
1431 register PERL_CONTEXT *cx;
1432 struct block_sub cxsub;
1433 bool popsub2 = FALSE;
1439 if (curstackinfo->si_type == SI_SORT) {
1440 if (cxstack_ix == sortcxix || dopoptosub(cxstack_ix) <= sortcxix) {
1441 if (cxstack_ix > sortcxix)
1443 AvARRAY(curstack)[1] = *SP;
1444 stack_sp = stack_base + 1;
1449 cxix = dopoptosub(cxstack_ix);
1451 DIE("Can't return outside a subroutine");
1452 if (cxix < cxstack_ix)
1456 switch (cx->cx_type) {
1458 POPSUB1(cx); /* Delay POPSUB2 until stack values are safe */
1463 if (optype == OP_REQUIRE &&
1464 (MARK == SP || (gimme == G_SCALAR && !SvTRUE(*SP))) )
1466 /* Unassume the success we assumed earlier. */
1467 char *name = cx->blk_eval.old_name;
1468 (void)hv_delete(GvHVn(incgv), name, strlen(name), G_DISCARD);
1469 DIE("%s did not return a true value", name);
1473 DIE("panic: return");
1477 if (gimme == G_SCALAR) {
1479 *++newsp = (popsub2 && SvTEMP(*SP))
1480 ? *SP : sv_mortalcopy(*SP);
1482 *++newsp = &sv_undef;
1484 else if (gimme == G_ARRAY) {
1485 while (++MARK <= SP) {
1486 *++newsp = (popsub2 && SvTEMP(*MARK))
1487 ? *MARK : sv_mortalcopy(*MARK);
1488 TAINT_NOT; /* Each item is independent */
1493 /* Stack values are safe: */
1495 POPSUB2(); /* release CV and @_ ... */
1497 curpm = newpm; /* ... and pop $1 et al */
1500 return pop_return();
1507 register PERL_CONTEXT *cx;
1508 struct block_loop cxloop;
1509 struct block_sub cxsub;
1516 SV **mark = stack_base + cxstack[cxstack_ix].blk_oldsp;
1518 if (op->op_flags & OPf_SPECIAL) {
1519 cxix = dopoptoloop(cxstack_ix);
1521 DIE("Can't \"last\" outside a block");
1524 cxix = dopoptolabel(cPVOP->op_pv);
1526 DIE("Label not found for \"last %s\"", cPVOP->op_pv);
1528 if (cxix < cxstack_ix)
1532 switch (cx->cx_type) {
1534 POPLOOP1(cx); /* Delay POPLOOP2 until stack values are safe */
1536 nextop = cxloop.last_op->op_next;
1539 POPSUB1(cx); /* Delay POPSUB2 until stack values are safe */
1541 nextop = pop_return();
1545 nextop = pop_return();
1552 if (gimme == G_SCALAR) {
1554 *++newsp = ((pop2 == CXt_SUB) && SvTEMP(*SP))
1555 ? *SP : sv_mortalcopy(*SP);
1557 *++newsp = &sv_undef;
1559 else if (gimme == G_ARRAY) {
1560 while (++MARK <= SP) {
1561 *++newsp = ((pop2 == CXt_SUB) && SvTEMP(*MARK))
1562 ? *MARK : sv_mortalcopy(*MARK);
1563 TAINT_NOT; /* Each item is independent */
1569 /* Stack values are safe: */
1572 POPLOOP2(); /* release loop vars ... */
1576 POPSUB2(); /* release CV and @_ ... */
1579 curpm = newpm; /* ... and pop $1 et al */
1588 register PERL_CONTEXT *cx;
1591 if (op->op_flags & OPf_SPECIAL) {
1592 cxix = dopoptoloop(cxstack_ix);
1594 DIE("Can't \"next\" outside a block");
1597 cxix = dopoptolabel(cPVOP->op_pv);
1599 DIE("Label not found for \"next %s\"", cPVOP->op_pv);
1601 if (cxix < cxstack_ix)
1605 oldsave = scopestack[scopestack_ix - 1];
1606 LEAVE_SCOPE(oldsave);
1607 return cx->blk_loop.next_op;
1613 register PERL_CONTEXT *cx;
1616 if (op->op_flags & OPf_SPECIAL) {
1617 cxix = dopoptoloop(cxstack_ix);
1619 DIE("Can't \"redo\" outside a block");
1622 cxix = dopoptolabel(cPVOP->op_pv);
1624 DIE("Label not found for \"redo %s\"", cPVOP->op_pv);
1626 if (cxix < cxstack_ix)
1630 oldsave = scopestack[scopestack_ix - 1];
1631 LEAVE_SCOPE(oldsave);
1632 return cx->blk_loop.redo_op;
1636 dofindlabel(OP *o, char *label, OP **opstack, OP **oplimit)
1640 static char too_deep[] = "Target of goto is too deeply nested";
1644 if (o->op_type == OP_LEAVE ||
1645 o->op_type == OP_SCOPE ||
1646 o->op_type == OP_LEAVELOOP ||
1647 o->op_type == OP_LEAVETRY)
1649 *ops++ = cUNOPo->op_first;
1654 if (o->op_flags & OPf_KIDS) {
1655 /* First try all the kids at this level, since that's likeliest. */
1656 for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling) {
1657 if ((kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) &&
1658 kCOP->cop_label && strEQ(kCOP->cop_label, label))
1661 for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling) {
1662 if (kid == lastgotoprobe)
1664 if ((kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) &&
1666 (ops[-1]->op_type != OP_NEXTSTATE &&
1667 ops[-1]->op_type != OP_DBSTATE)))
1669 if (o = dofindlabel(kid, label, ops, oplimit))
1679 return pp_goto(ARGS);
1688 register PERL_CONTEXT *cx;
1689 #define GOTO_DEPTH 64
1690 OP *enterops[GOTO_DEPTH];
1692 int do_dump = (op->op_type == OP_DUMP);
1695 if (op->op_flags & OPf_STACKED) {
1698 /* This egregious kludge implements goto &subroutine */
1699 if (SvROK(sv) && SvTYPE(SvRV(sv)) == SVt_PVCV) {
1701 register PERL_CONTEXT *cx;
1702 CV* cv = (CV*)SvRV(sv);
1707 if (!CvROOT(cv) && !CvXSUB(cv)) {
1709 SV *tmpstr = sv_newmortal();
1710 gv_efullname3(tmpstr, CvGV(cv), Nullch);
1711 DIE("Goto undefined subroutine &%s",SvPVX(tmpstr));
1713 DIE("Goto undefined subroutine");
1716 /* First do some returnish stuff. */
1717 cxix = dopoptosub(cxstack_ix);
1719 DIE("Can't goto subroutine outside a subroutine");
1720 if (cxix < cxstack_ix)
1723 if (cx->cx_type == CXt_EVAL && cx->blk_eval.old_op_type == OP_ENTEREVAL)
1724 DIE("Can't goto subroutine from an eval-string");
1726 if (cx->cx_type == CXt_SUB &&
1727 cx->blk_sub.hasargs) { /* put @_ back onto stack */
1728 AV* av = cx->blk_sub.argarray;
1730 items = AvFILLp(av) + 1;
1732 EXTEND(stack_sp, items); /* @_ could have been extended. */
1733 Copy(AvARRAY(av), stack_sp, items, SV*);
1736 SvREFCNT_dec(GvAV(defgv));
1737 GvAV(defgv) = cx->blk_sub.savearray;
1738 #endif /* USE_THREADS */
1742 if (cx->cx_type == CXt_SUB &&
1743 !(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 if (cx->cx_type == CXt_EVAL) {
1774 in_eval = cx->blk_eval.old_in_eval;
1775 eval_root = cx->blk_eval.old_eval_root;
1776 cx->cx_type = CXt_SUB;
1777 cx->blk_sub.hasargs = 0;
1779 cx->blk_sub.cv = cv;
1780 cx->blk_sub.olddepth = CvDEPTH(cv);
1782 if (CvDEPTH(cv) < 2)
1783 (void)SvREFCNT_inc(cv);
1784 else { /* save temporaries on recursion? */
1785 if (CvDEPTH(cv) == 100 && dowarn)
1786 sub_crush_depth(cv);
1787 if (CvDEPTH(cv) > AvFILLp(padlist)) {
1788 AV *newpad = newAV();
1789 SV **oldpad = AvARRAY(svp[CvDEPTH(cv)-1]);
1790 I32 ix = AvFILLp((AV*)svp[1]);
1791 svp = AvARRAY(svp[0]);
1792 for ( ;ix > 0; ix--) {
1793 if (svp[ix] != &sv_undef) {
1794 char *name = SvPVX(svp[ix]);
1795 if ((SvFLAGS(svp[ix]) & SVf_FAKE)
1798 /* outer lexical or anon code */
1799 av_store(newpad, ix,
1800 SvREFCNT_inc(oldpad[ix]) );
1802 else { /* our own lexical */
1804 av_store(newpad, ix, sv = (SV*)newAV());
1805 else if (*name == '%')
1806 av_store(newpad, ix, sv = (SV*)newHV());
1808 av_store(newpad, ix, sv = NEWSV(0,0));
1813 av_store(newpad, ix, sv = NEWSV(0,0));
1817 if (cx->blk_sub.hasargs) {
1820 av_store(newpad, 0, (SV*)av);
1821 AvFLAGS(av) = AVf_REIFY;
1823 av_store(padlist, CvDEPTH(cv), (SV*)newpad);
1824 AvFILLp(padlist) = CvDEPTH(cv);
1825 svp = AvARRAY(padlist);
1829 if (!cx->blk_sub.hasargs) {
1830 AV* av = (AV*)curpad[0];
1832 items = AvFILLp(av) + 1;
1834 /* Mark is at the end of the stack. */
1836 Copy(AvARRAY(av), SP + 1, items, SV*);
1841 #endif /* USE_THREADS */
1843 curpad = AvARRAY((AV*)svp[CvDEPTH(cv)]);
1845 if (cx->blk_sub.hasargs)
1846 #endif /* USE_THREADS */
1848 AV* av = (AV*)curpad[0];
1852 cx->blk_sub.savearray = GvAV(defgv);
1853 GvAV(defgv) = (AV*)SvREFCNT_inc(av);
1854 #endif /* USE_THREADS */
1855 cx->blk_sub.argarray = av;
1858 if (items >= AvMAX(av) + 1) {
1860 if (AvARRAY(av) != ary) {
1861 AvMAX(av) += AvARRAY(av) - AvALLOC(av);
1862 SvPVX(av) = (char*)ary;
1864 if (items >= AvMAX(av) + 1) {
1865 AvMAX(av) = items - 1;
1866 Renew(ary,items+1,SV*);
1868 SvPVX(av) = (char*)ary;
1871 Copy(mark,AvARRAY(av),items,SV*);
1872 AvFILLp(av) = items - 1;
1880 if (PERLDB_SUB && curstash != debstash) {
1882 * We do not care about using sv to call CV;
1883 * it's for informational purposes only.
1885 SV *sv = GvSV(DBsub);
1887 gv_efullname3(sv, CvGV(cv), Nullch);
1889 RETURNOP(CvSTART(cv));
1893 label = SvPV(sv,na);
1895 else if (op->op_flags & OPf_SPECIAL) {
1897 DIE("goto must have label");
1900 label = cPVOP->op_pv;
1902 if (label && *label) {
1909 for (ix = cxstack_ix; ix >= 0; ix--) {
1911 switch (cx->cx_type) {
1913 gotoprobe = eval_root; /* XXX not good for nested eval */
1916 gotoprobe = cx->blk_oldcop->op_sibling;
1922 gotoprobe = cx->blk_oldcop->op_sibling;
1924 gotoprobe = main_root;
1927 if (CvDEPTH(cx->blk_sub.cv)) {
1928 gotoprobe = CvROOT(cx->blk_sub.cv);
1933 DIE("Can't \"goto\" outside a block");
1937 gotoprobe = main_root;
1940 retop = dofindlabel(gotoprobe, label,
1941 enterops, enterops + GOTO_DEPTH);
1944 lastgotoprobe = gotoprobe;
1947 DIE("Can't find label %s", label);
1949 /* pop unwanted frames */
1951 if (ix < cxstack_ix) {
1958 oldsave = scopestack[scopestack_ix];
1959 LEAVE_SCOPE(oldsave);
1962 /* push wanted frames */
1964 if (*enterops && enterops[1]) {
1966 for (ix = 1; enterops[ix]; ix++) {
1968 /* Eventually we may want to stack the needed arguments
1969 * for each op. For now, we punt on the hard ones. */
1970 if (op->op_type == OP_ENTERITER)
1971 DIE("Can't \"goto\" into the middle of a foreach loop",
1973 (CALLOP->op_ppaddr)(ARGS);
1981 if (!retop) retop = main_start;
1988 restartop = 0; /* hmm, must be GNU unexec().. */
1992 if (top_env->je_prev) {
2010 if (anum == 1 && VMSISH_EXIT)
2023 double value = SvNVx(GvSV(cCOP->cop_gv));
2024 register I32 match = I_32(value);
2027 if (((double)match) > value)
2028 --match; /* was fractional--truncate other way */
2030 match -= cCOP->uop.scop.scop_offset;
2033 else if (match > cCOP->uop.scop.scop_max)
2034 match = cCOP->uop.scop.scop_max;
2035 op = cCOP->uop.scop.scop_next[match];
2045 op = op->op_next; /* can't assume anything */
2047 match = *(SvPVx(GvSV(cCOP->cop_gv), na)) & 255;
2048 match -= cCOP->uop.scop.scop_offset;
2051 else if (match > cCOP->uop.scop.scop_max)
2052 match = cCOP->uop.scop.scop_max;
2053 op = cCOP->uop.scop.scop_next[match];
2062 save_lines(AV *array, SV *sv)
2064 register char *s = SvPVX(sv);
2065 register char *send = SvPVX(sv) + SvCUR(sv);
2067 register I32 line = 1;
2069 while (s && s < send) {
2070 SV *tmpstr = NEWSV(85,0);
2072 sv_upgrade(tmpstr, SVt_PVMG);
2073 t = strchr(s, '\n');
2079 sv_setpvn(tmpstr, s, t - s);
2080 av_store(array, line++, tmpstr);
2095 assert(CATCH_GET == TRUE);
2096 DEBUG_l(deb("Setting up local jumplevel %p, was %p\n", &cur_env, top_env));
2100 default: /* topmost level handles it */
2107 PerlIO_printf(PerlIO_stderr(), "panic: restartop\n");
2123 sv_compile_2op(SV *sv, OP** startop, char *code, AV** avp)
2124 /* sv Text to convert to OP tree. */
2125 /* startop op_free() this to undo. */
2126 /* code Short string id of the caller. */
2128 dSP; /* Make POPBLOCK work. */
2131 I32 gimme = 0; /* SUSPECT - INITIALZE TO WHAT? NI-S */
2135 char tmpbuf[TYPE_DIGITS(long) + 12 + 10];
2141 /* switch to eval mode */
2143 SAVESPTR(compiling.cop_filegv);
2144 SAVEI16(compiling.cop_line);
2145 sprintf(tmpbuf, "_<(%.10s_eval %lu)", code, (unsigned long)++evalseq);
2146 compiling.cop_filegv = gv_fetchfile(tmpbuf+2);
2147 compiling.cop_line = 1;
2148 /* XXX For C<eval "...">s within BEGIN {} blocks, this ends up
2149 deleting the eval's FILEGV from the stash before gv_check() runs
2150 (i.e. before run-time proper). To work around the coredump that
2151 ensues, we always turn GvMULTI_on for any globals that were
2152 introduced within evals. See force_ident(). GSAR 96-10-12 */
2153 safestr = savepv(tmpbuf);
2154 SAVEDELETE(defstash, safestr, strlen(safestr));
2156 #ifdef OP_IN_REGISTER
2164 op->op_type = 0; /* Avoid uninit warning. */
2165 op->op_flags = 0; /* Avoid uninit warning. */
2166 PUSHBLOCK(cx, CXt_EVAL, SP);
2167 PUSHEVAL(cx, 0, compiling.cop_filegv);
2168 rop = doeval(G_SCALAR, startop);
2172 (*startop)->op_type = OP_NULL;
2173 (*startop)->op_ppaddr = ppaddr[OP_NULL];
2175 *avp = (AV*)SvREFCNT_inc(comppad);
2177 #ifdef OP_IN_REGISTER
2183 /* With USE_THREADS, eval_owner must be held on entry to doeval */
2185 doeval(int gimme, OP** startop)
2198 /* set up a scratch pad */
2203 SAVESPTR(comppad_name);
2204 SAVEI32(comppad_name_fill);
2205 SAVEI32(min_intro_pending);
2206 SAVEI32(max_intro_pending);
2209 for (i = cxstack_ix - 1; i >= 0; i--) {
2210 PERL_CONTEXT *cx = &cxstack[i];
2211 if (cx->cx_type == CXt_EVAL)
2213 else if (cx->cx_type == CXt_SUB) {
2214 caller = cx->blk_sub.cv;
2220 compcv = (CV*)NEWSV(1104,0);
2221 sv_upgrade((SV *)compcv, SVt_PVCV);
2222 CvUNIQUE_on(compcv);
2224 CvOWNER(compcv) = 0;
2225 New(666, CvMUTEXP(compcv), 1, perl_mutex);
2226 MUTEX_INIT(CvMUTEXP(compcv));
2227 #endif /* USE_THREADS */
2230 av_push(comppad, Nullsv);
2231 curpad = AvARRAY(comppad);
2232 comppad_name = newAV();
2233 comppad_name_fill = 0;
2234 min_intro_pending = 0;
2237 av_store(comppad_name, 0, newSVpv("@_", 2));
2238 curpad[0] = (SV*)newAV();
2239 SvPADMY_on(curpad[0]); /* XXX Needed? */
2240 #endif /* USE_THREADS */
2242 comppadlist = newAV();
2243 AvREAL_off(comppadlist);
2244 av_store(comppadlist, 0, (SV*)comppad_name);
2245 av_store(comppadlist, 1, (SV*)comppad);
2246 CvPADLIST(compcv) = comppadlist;
2248 if (!saveop || saveop->op_type != OP_REQUIRE)
2249 CvOUTSIDE(compcv) = (CV*)SvREFCNT_inc(caller);
2253 /* make sure we compile in the right package */
2255 newstash = curcop->cop_stash;
2256 if (curstash != newstash) {
2258 curstash = newstash;
2262 SAVEFREESV(beginav);
2264 /* try to compile it */
2268 curcop = &compiling;
2269 curcop->cop_arybase = 0;
2271 rs = newSVpv("\n", 1);
2272 if (saveop && saveop->op_flags & OPf_SPECIAL)
2276 if (yyparse() || error_count || !eval_root) {
2280 I32 optype = 0; /* Might be reset by POPEVAL. */
2287 SP = stack_base + POPMARK; /* pop original mark */
2295 if (optype == OP_REQUIRE) {
2296 char* msg = SvPVx(ERRSV, na);
2297 DIE("%s", *msg ? msg : "Compilation failed in require");
2298 } else if (startop) {
2299 char* msg = SvPVx(ERRSV, na);
2303 croak("%sCompilation failed in regexp", (*msg ? msg : "Unknown error\n"));
2306 rs = SvREFCNT_inc(nrs);
2308 MUTEX_LOCK(&eval_mutex);
2310 COND_SIGNAL(&eval_cond);
2311 MUTEX_UNLOCK(&eval_mutex);
2312 #endif /* USE_THREADS */
2316 rs = SvREFCNT_inc(nrs);
2317 compiling.cop_line = 0;
2319 *startop = eval_root;
2320 SvREFCNT_dec(CvOUTSIDE(compcv));
2321 CvOUTSIDE(compcv) = Nullcv;
2323 SAVEFREEOP(eval_root);
2325 scalarvoid(eval_root);
2326 else if (gimme & G_ARRAY)
2331 DEBUG_x(dump_eval());
2333 /* Register with debugger: */
2334 if (PERLDB_INTER && saveop->op_type == OP_REQUIRE) {
2335 CV *cv = perl_get_cv("DB::postponed", FALSE);
2339 XPUSHs((SV*)compiling.cop_filegv);
2341 perl_call_sv((SV*)cv, G_DISCARD);
2345 /* compiled okay, so do it */
2347 CvDEPTH(compcv) = 1;
2348 SP = stack_base + POPMARK; /* pop original mark */
2349 op = saveop; /* The caller may need it. */
2351 MUTEX_LOCK(&eval_mutex);
2353 COND_SIGNAL(&eval_cond);
2354 MUTEX_UNLOCK(&eval_mutex);
2355 #endif /* USE_THREADS */
2357 RETURNOP(eval_start);
2363 register PERL_CONTEXT *cx;
2368 SV *namesv = Nullsv;
2370 I32 gimme = G_SCALAR;
2371 PerlIO *tryrsfp = 0;
2374 if (SvNIOKp(sv) && !SvPOKp(sv)) {
2375 SET_NUMERIC_STANDARD();
2376 if (atof(patchlevel) + 0.00000999 < SvNV(sv))
2377 DIE("Perl %s required--this is only version %s, stopped",
2378 SvPV(sv,na),patchlevel);
2381 name = SvPV(sv, len);
2382 if (!(name && len > 0 && *name))
2383 DIE("Null filename used");
2384 TAINT_PROPER("require");
2385 if (op->op_type == OP_REQUIRE &&
2386 (svp = hv_fetch(GvHVn(incgv), name, len, 0)) &&
2390 /* prepare to compile file */
2395 (name[1] == '.' && name[2] == '/')))
2397 || (name[0] && name[1] == ':')
2400 || (name[0] == '\\' && name[1] == '\\') /* UNC path */
2403 || (strchr(name,':') || ((*name == '[' || *name == '<') &&
2404 (isALNUM(name[1]) || strchr("$-_]>",name[1]))))
2409 tryrsfp = PerlIO_open(name,PERL_SCRIPT_MODE);
2412 AV *ar = GvAVn(incgv);
2416 if ((unixname = tounixspec(name, Nullch)) != Nullch)
2419 namesv = NEWSV(806, 0);
2420 for (i = 0; i <= AvFILL(ar); i++) {
2421 char *dir = SvPVx(*av_fetch(ar, i, TRUE), na);
2424 if ((unixdir = tounixpath(dir, Nullch)) == Nullch)
2426 sv_setpv(namesv, unixdir);
2427 sv_catpv(namesv, unixname);
2429 sv_setpvf(namesv, "%s/%s", dir, name);
2431 tryname = SvPVX(namesv);
2432 tryrsfp = PerlIO_open(tryname, PERL_SCRIPT_MODE);
2434 if (tryname[0] == '.' && tryname[1] == '/')
2441 SAVESPTR(compiling.cop_filegv);
2442 compiling.cop_filegv = gv_fetchfile(tryrsfp ? tryname : name);
2443 SvREFCNT_dec(namesv);
2445 if (op->op_type == OP_REQUIRE) {
2446 SV *msg = sv_2mortal(newSVpvf("Can't locate %s in @INC", name));
2447 SV *dirmsgsv = NEWSV(0, 0);
2448 AV *ar = GvAVn(incgv);
2450 if (instr(SvPVX(msg), ".h "))
2451 sv_catpv(msg, " (change .h to .ph maybe?)");
2452 if (instr(SvPVX(msg), ".ph "))
2453 sv_catpv(msg, " (did you run h2ph?)");
2454 sv_catpv(msg, " (@INC contains:");
2455 for (i = 0; i <= AvFILL(ar); i++) {
2456 char *dir = SvPVx(*av_fetch(ar, i, TRUE), na);
2457 sv_setpvf(dirmsgsv, " %s", dir);
2458 sv_catsv(msg, dirmsgsv);
2460 sv_catpvn(msg, ")", 1);
2461 SvREFCNT_dec(dirmsgsv);
2468 /* Assume success here to prevent recursive requirement. */
2469 (void)hv_store(GvHVn(incgv), name, strlen(name),
2470 newSVsv(GvSV(compiling.cop_filegv)), 0 );
2474 lex_start(sv_2mortal(newSVpv("",0)));
2476 save_aptr(&rsfp_filters);
2477 rsfp_filters = NULL;
2481 name = savepv(name);
2486 /* switch to eval mode */
2488 push_return(op->op_next);
2489 PUSHBLOCK(cx, CXt_EVAL, SP);
2490 PUSHEVAL(cx, name, compiling.cop_filegv);
2492 compiling.cop_line = 0;
2496 MUTEX_LOCK(&eval_mutex);
2497 if (eval_owner && eval_owner != thr)
2499 COND_WAIT(&eval_cond, &eval_mutex);
2501 MUTEX_UNLOCK(&eval_mutex);
2502 #endif /* USE_THREADS */
2503 return DOCATCH(doeval(G_SCALAR, NULL));
2508 return pp_require(ARGS);
2514 register PERL_CONTEXT *cx;
2516 I32 gimme = GIMME_V, was = sub_generation;
2517 char tmpbuf[TYPE_DIGITS(long) + 12];
2522 if (!SvPV(sv,len) || !len)
2524 TAINT_PROPER("eval");
2530 /* switch to eval mode */
2532 SAVESPTR(compiling.cop_filegv);
2533 sprintf(tmpbuf, "_<(eval %lu)", (unsigned long)++evalseq);
2534 compiling.cop_filegv = gv_fetchfile(tmpbuf+2);
2535 compiling.cop_line = 1;
2536 /* XXX For C<eval "...">s within BEGIN {} blocks, this ends up
2537 deleting the eval's FILEGV from the stash before gv_check() runs
2538 (i.e. before run-time proper). To work around the coredump that
2539 ensues, we always turn GvMULTI_on for any globals that were
2540 introduced within evals. See force_ident(). GSAR 96-10-12 */
2541 safestr = savepv(tmpbuf);
2542 SAVEDELETE(defstash, safestr, strlen(safestr));
2544 hints = op->op_targ;
2546 push_return(op->op_next);
2547 PUSHBLOCK(cx, CXt_EVAL, SP);
2548 PUSHEVAL(cx, 0, compiling.cop_filegv);
2550 /* prepare to compile string */
2552 if (PERLDB_LINE && curstash != debstash)
2553 save_lines(GvAV(compiling.cop_filegv), linestr);
2556 MUTEX_LOCK(&eval_mutex);
2557 if (eval_owner && eval_owner != thr)
2559 COND_WAIT(&eval_cond, &eval_mutex);
2561 MUTEX_UNLOCK(&eval_mutex);
2562 #endif /* USE_THREADS */
2563 ret = doeval(gimme, NULL);
2564 if (PERLDB_INTER && was != sub_generation /* Some subs defined here. */
2565 && ret != op->op_next) { /* Successive compilation. */
2566 strcpy(safestr, "_<(eval )"); /* Anything fake and short. */
2568 return DOCATCH(ret);
2578 register PERL_CONTEXT *cx;
2580 U8 save_flags = op -> op_flags;
2585 retop = pop_return();
2588 if (gimme == G_VOID)
2590 else if (gimme == G_SCALAR) {
2593 if (SvFLAGS(TOPs) & SVs_TEMP)
2596 *MARK = sv_mortalcopy(TOPs);
2604 /* in case LEAVE wipes old return values */
2605 for (mark = newsp + 1; mark <= SP; mark++) {
2606 if (!(SvFLAGS(*mark) & SVs_TEMP)) {
2607 *mark = sv_mortalcopy(*mark);
2608 TAINT_NOT; /* Each item is independent */
2612 curpm = newpm; /* Don't pop $1 et al till now */
2615 * Closures mentioned at top level of eval cannot be referenced
2616 * again, and their presence indirectly causes a memory leak.
2617 * (Note that the fact that compcv and friends are still set here
2618 * is, AFAIK, an accident.) --Chip
2620 if (AvFILLp(comppad_name) >= 0) {
2621 SV **svp = AvARRAY(comppad_name);
2623 for (ix = AvFILLp(comppad_name); ix >= 0; ix--) {
2625 if (sv && sv != &sv_undef && *SvPVX(sv) == '&') {
2627 svp[ix] = &sv_undef;
2631 SvREFCNT_dec(CvOUTSIDE(sv));
2632 CvOUTSIDE(sv) = Nullcv;
2645 assert(CvDEPTH(compcv) == 1);
2647 CvDEPTH(compcv) = 0;
2650 if (optype == OP_REQUIRE &&
2651 !(gimme == G_SCALAR ? SvTRUE(*SP) : SP > newsp))
2653 /* Unassume the success we assumed earlier. */
2654 char *name = cx->blk_eval.old_name;
2655 (void)hv_delete(GvHVn(incgv), name, strlen(name), G_DISCARD);
2656 retop = die("%s did not return a true value", name);
2657 /* die_where() did LEAVE, or we won't be here */
2661 if (!(save_flags & OPf_SPECIAL))
2671 register PERL_CONTEXT *cx;
2672 I32 gimme = GIMME_V;
2677 push_return(cLOGOP->op_other->op_next);
2678 PUSHBLOCK(cx, CXt_EVAL, SP);
2680 eval_root = op; /* Only needed so that goto works right. */
2685 return DOCATCH(op->op_next);
2695 register PERL_CONTEXT *cx;
2703 if (gimme == G_VOID)
2705 else if (gimme == G_SCALAR) {
2708 if (SvFLAGS(TOPs) & (SVs_PADTMP|SVs_TEMP))
2711 *MARK = sv_mortalcopy(TOPs);
2720 /* in case LEAVE wipes old return values */
2721 for (mark = newsp + 1; mark <= SP; mark++) {
2722 if (!(SvFLAGS(*mark) & (SVs_PADTMP|SVs_TEMP))) {
2723 *mark = sv_mortalcopy(*mark);
2724 TAINT_NOT; /* Each item is independent */
2728 curpm = newpm; /* Don't pop $1 et al till now */
2739 register char *s = SvPV_force(sv, len);
2740 register char *send = s + len;
2741 register char *base;
2742 register I32 skipspaces = 0;
2745 bool postspace = FALSE;
2753 croak("Null picture in formline");
2755 New(804, fops, (send - s)*3+10, U16); /* Almost certainly too long... */
2760 *fpc++ = FF_LINEMARK;
2761 noblank = repeat = FALSE;
2779 case ' ': case '\t':
2790 *fpc++ = FF_LITERAL;
2798 *fpc++ = skipspaces;
2802 *fpc++ = FF_NEWLINE;
2806 arg = fpc - linepc + 1;
2813 *fpc++ = FF_LINEMARK;
2814 noblank = repeat = FALSE;
2823 ischop = s[-1] == '^';
2829 arg = (s - base) - 1;
2831 *fpc++ = FF_LITERAL;
2840 *fpc++ = FF_LINEGLOB;
2842 else if (*s == '#' || (*s == '.' && s[1] == '#')) {
2843 arg = ischop ? 512 : 0;
2853 arg |= 256 + (s - f);
2855 *fpc++ = s - base; /* fieldsize for FETCH */
2856 *fpc++ = FF_DECIMAL;
2861 bool ismore = FALSE;
2864 while (*++s == '>') ;
2865 prespace = FF_SPACE;
2867 else if (*s == '|') {
2868 while (*++s == '|') ;
2869 prespace = FF_HALFSPACE;
2874 while (*++s == '<') ;
2877 if (*s == '.' && s[1] == '.' && s[2] == '.') {
2881 *fpc++ = s - base; /* fieldsize for FETCH */
2883 *fpc++ = ischop ? FF_CHECKCHOP : FF_CHECKNL;
2901 { /* need to jump to the next word */
2903 z = WORD_ALIGN - SvCUR(sv) % WORD_ALIGN;
2904 SvGROW(sv, SvCUR(sv) + z + arg * sizeof(U16) + 4);
2905 s = SvPVX(sv) + SvCUR(sv) + z;
2907 Copy(fops, s, arg, U16);
2909 sv_magic(sv, Nullsv, 'f', Nullch, 0);
2914 * The rest of this file was derived from source code contributed
2917 * NOTE: this code was derived from Tom Horsley's qsort replacement
2918 * and should not be confused with the original code.
2921 /* Copyright (C) Tom Horsley, 1997. All rights reserved.
2923 Permission granted to distribute under the same terms as perl which are
2926 This program is free software; you can redistribute it and/or modify
2927 it under the terms of either:
2929 a) the GNU General Public License as published by the Free
2930 Software Foundation; either version 1, or (at your option) any
2933 b) the "Artistic License" which comes with this Kit.
2935 Details on the perl license can be found in the perl source code which
2936 may be located via the www.perl.com web page.
2938 This is the most wonderfulest possible qsort I can come up with (and
2939 still be mostly portable) My (limited) tests indicate it consistently
2940 does about 20% fewer calls to compare than does the qsort in the Visual
2941 C++ library, other vendors may vary.
2943 Some of the ideas in here can be found in "Algorithms" by Sedgewick,
2944 others I invented myself (or more likely re-invented since they seemed
2945 pretty obvious once I watched the algorithm operate for a while).
2947 Most of this code was written while watching the Marlins sweep the Giants
2948 in the 1997 National League Playoffs - no Braves fans allowed to use this
2949 code (just kidding :-).
2951 I realize that if I wanted to be true to the perl tradition, the only
2952 comment in this file would be something like:
2954 ...they shuffled back towards the rear of the line. 'No, not at the
2955 rear!' the slave-driver shouted. 'Three files up. And stay there...
2957 However, I really needed to violate that tradition just so I could keep
2958 track of what happens myself, not to mention some poor fool trying to
2959 understand this years from now :-).
2962 /* ********************************************************** Configuration */
2964 #ifndef QSORT_ORDER_GUESS
2965 #define QSORT_ORDER_GUESS 2 /* Select doubling version of the netBSD trick */
2968 /* QSORT_MAX_STACK is the largest number of partitions that can be stacked up for
2969 future processing - a good max upper bound is log base 2 of memory size
2970 (32 on 32 bit machines, 64 on 64 bit machines, etc). In reality can
2971 safely be smaller than that since the program is taking up some space and
2972 most operating systems only let you grab some subset of contiguous
2973 memory (not to mention that you are normally sorting data larger than
2974 1 byte element size :-).
2976 #ifndef QSORT_MAX_STACK
2977 #define QSORT_MAX_STACK 32
2980 /* QSORT_BREAK_EVEN is the size of the largest partition we should insertion sort.
2981 Anything bigger and we use qsort. If you make this too small, the qsort
2982 will probably break (or become less efficient), because it doesn't expect
2983 the middle element of a partition to be the same as the right or left -
2984 you have been warned).
2986 #ifndef QSORT_BREAK_EVEN
2987 #define QSORT_BREAK_EVEN 6
2990 /* ************************************************************* Data Types */
2992 /* hold left and right index values of a partition waiting to be sorted (the
2993 partition includes both left and right - right is NOT one past the end or
2994 anything like that).
2996 struct partition_stack_entry {
2999 #ifdef QSORT_ORDER_GUESS
3000 int qsort_break_even;
3004 /* ******************************************************* Shorthand Macros */
3006 /* Note that these macros will be used from inside the qsort function where
3007 we happen to know that the variable 'elt_size' contains the size of an
3008 array element and the variable 'temp' points to enough space to hold a
3009 temp element and the variable 'array' points to the array being sorted
3010 and 'compare' is the pointer to the compare routine.
3012 Also note that there are very many highly architecture specific ways
3013 these might be sped up, but this is simply the most generally portable
3014 code I could think of.
3017 /* Return < 0 == 0 or > 0 as the value of elt1 is < elt2, == elt2, > elt2
3020 #define qsort_cmp(elt1, elt2) \
3021 ((this->*compare)(array[elt1], array[elt2]))
3023 #define qsort_cmp(elt1, elt2) \
3024 ((*compare)(array[elt1], array[elt2]))
3027 #ifdef QSORT_ORDER_GUESS
3028 #define QSORT_NOTICE_SWAP swapped++;
3030 #define QSORT_NOTICE_SWAP
3033 /* swaps contents of array elements elt1, elt2.
3035 #define qsort_swap(elt1, elt2) \
3038 temp = array[elt1]; \
3039 array[elt1] = array[elt2]; \
3040 array[elt2] = temp; \
3043 /* rotate contents of elt1, elt2, elt3 such that elt1 gets elt2, elt2 gets
3044 elt3 and elt3 gets elt1.
3046 #define qsort_rotate(elt1, elt2, elt3) \
3049 temp = array[elt1]; \
3050 array[elt1] = array[elt2]; \
3051 array[elt2] = array[elt3]; \
3052 array[elt3] = temp; \
3055 /* ************************************************************ Debug stuff */
3062 return; /* good place to set a breakpoint */
3065 #define qsort_assert(t) (void)( (t) || (break_here(), 0) )
3068 doqsort_all_asserts(
3072 int (*compare)(const void * elt1, const void * elt2),
3073 int pc_left, int pc_right, int u_left, int u_right)
3077 qsort_assert(pc_left <= pc_right);
3078 qsort_assert(u_right < pc_left);
3079 qsort_assert(pc_right < u_left);
3080 for (i = u_right + 1; i < pc_left; ++i) {
3081 qsort_assert(qsort_cmp(i, pc_left) < 0);
3083 for (i = pc_left; i < pc_right; ++i) {
3084 qsort_assert(qsort_cmp(i, pc_right) == 0);
3086 for (i = pc_right + 1; i < u_left; ++i) {
3087 qsort_assert(qsort_cmp(pc_right, i) < 0);
3091 #define qsort_all_asserts(PC_LEFT, PC_RIGHT, U_LEFT, U_RIGHT) \
3092 doqsort_all_asserts(array, num_elts, elt_size, compare, \
3093 PC_LEFT, PC_RIGHT, U_LEFT, U_RIGHT)
3097 #define qsort_assert(t) ((void)0)
3099 #define qsort_all_asserts(PC_LEFT, PC_RIGHT, U_LEFT, U_RIGHT) ((void)0)
3103 /* ****************************************************************** qsort */
3107 qsortsv(SV ** array, size_t num_elts, SVCOMPARE compare)
3112 I32 (*compare)(SV *a, SV *b))
3117 struct partition_stack_entry partition_stack[QSORT_MAX_STACK];
3118 int next_stack_entry = 0;
3122 #ifdef QSORT_ORDER_GUESS
3123 int qsort_break_even;
3127 /* Make sure we actually have work to do.
3129 if (num_elts <= 1) {
3133 /* Setup the initial partition definition and fall into the sorting loop
3136 part_right = (int)(num_elts - 1);
3137 #ifdef QSORT_ORDER_GUESS
3138 qsort_break_even = QSORT_BREAK_EVEN;
3140 #define qsort_break_even QSORT_BREAK_EVEN
3143 if ((part_right - part_left) >= qsort_break_even) {
3144 /* OK, this is gonna get hairy, so lets try to document all the
3145 concepts and abbreviations and variables and what they keep
3148 pc: pivot chunk - the set of array elements we accumulate in the
3149 middle of the partition, all equal in value to the original
3150 pivot element selected. The pc is defined by:
3152 pc_left - the leftmost array index of the pc
3153 pc_right - the rightmost array index of the pc
3155 we start with pc_left == pc_right and only one element
3156 in the pivot chunk (but it can grow during the scan).
3158 u: uncompared elements - the set of elements in the partition
3159 we have not yet compared to the pivot value. There are two
3160 uncompared sets during the scan - one to the left of the pc
3161 and one to the right.
3163 u_right - the rightmost index of the left side's uncompared set
3164 u_left - the leftmost index of the right side's uncompared set
3166 The leftmost index of the left sides's uncompared set
3167 doesn't need its own variable because it is always defined
3168 by the leftmost edge of the whole partition (part_left). The
3169 same goes for the rightmost edge of the right partition
3172 We know there are no uncompared elements on the left once we
3173 get u_right < part_left and no uncompared elements on the
3174 right once u_left > part_right. When both these conditions
3175 are met, we have completed the scan of the partition.
3177 Any elements which are between the pivot chunk and the
3178 uncompared elements should be less than the pivot value on
3179 the left side and greater than the pivot value on the right
3180 side (in fact, the goal of the whole algorithm is to arrange
3181 for that to be true and make the groups of less-than and
3182 greater-then elements into new partitions to sort again).
3184 As you marvel at the complexity of the code and wonder why it
3185 has to be so confusing. Consider some of the things this level
3186 of confusion brings:
3188 Once I do a compare, I squeeze every ounce of juice out of it. I
3189 never do compare calls I don't have to do, and I certainly never
3192 I also never swap any elements unless I can prove there is a
3193 good reason. Many sort algorithms will swap a known value with
3194 an uncompared value just to get things in the right place (or
3195 avoid complexity :-), but that uncompared value, once it gets
3196 compared, may then have to be swapped again. A lot of the
3197 complexity of this code is due to the fact that it never swaps
3198 anything except compared values, and it only swaps them when the
3199 compare shows they are out of position.
3201 int pc_left, pc_right;
3202 int u_right, u_left;
3206 pc_left = ((part_left + part_right) / 2);
3208 u_right = pc_left - 1;
3209 u_left = pc_right + 1;
3211 /* Qsort works best when the pivot value is also the median value
3212 in the partition (unfortunately you can't find the median value
3213 without first sorting :-), so to give the algorithm a helping
3214 hand, we pick 3 elements and sort them and use the median value
3215 of that tiny set as the pivot value.
3217 Some versions of qsort like to use the left middle and right as
3218 the 3 elements to sort so they can insure the ends of the
3219 partition will contain values which will stop the scan in the
3220 compare loop, but when you have to call an arbitrarily complex
3221 routine to do a compare, its really better to just keep track of
3222 array index values to know when you hit the edge of the
3223 partition and avoid the extra compare. An even better reason to
3224 avoid using a compare call is the fact that you can drop off the
3225 edge of the array if someone foolishly provides you with an
3226 unstable compare function that doesn't always provide consistent
3229 So, since it is simpler for us to compare the three adjacent
3230 elements in the middle of the partition, those are the ones we
3231 pick here (conveniently pointed at by u_right, pc_left, and
3232 u_left). The values of the left, center, and right elements
3233 are refered to as l c and r in the following comments.
3236 #ifdef QSORT_ORDER_GUESS
3239 s = qsort_cmp(u_right, pc_left);
3242 s = qsort_cmp(pc_left, u_left);
3243 /* if l < c, c < r - already in order - nothing to do */
3245 /* l < c, c == r - already in order, pc grows */
3247 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3249 /* l < c, c > r - need to know more */
3250 s = qsort_cmp(u_right, u_left);
3252 /* l < c, c > r, l < r - swap c & r to get ordered */
3253 qsort_swap(pc_left, u_left);
3254 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3255 } else if (s == 0) {
3256 /* l < c, c > r, l == r - swap c&r, grow pc */
3257 qsort_swap(pc_left, u_left);
3259 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3261 /* l < c, c > r, l > r - make lcr into rlc to get ordered */
3262 qsort_rotate(pc_left, u_right, u_left);
3263 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3266 } else if (s == 0) {
3268 s = qsort_cmp(pc_left, u_left);
3270 /* l == c, c < r - already in order, grow pc */
3272 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3273 } else if (s == 0) {
3274 /* l == c, c == r - already in order, grow pc both ways */
3277 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3279 /* l == c, c > r - swap l & r, grow pc */
3280 qsort_swap(u_right, u_left);
3282 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3286 s = qsort_cmp(pc_left, u_left);
3288 /* l > c, c < r - need to know more */
3289 s = qsort_cmp(u_right, u_left);
3291 /* l > c, c < r, l < r - swap l & c to get ordered */
3292 qsort_swap(u_right, pc_left);
3293 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3294 } else if (s == 0) {
3295 /* l > c, c < r, l == r - swap l & c, grow pc */
3296 qsort_swap(u_right, pc_left);
3298 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3300 /* l > c, c < r, l > r - rotate lcr into crl to order */
3301 qsort_rotate(u_right, pc_left, u_left);
3302 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3304 } else if (s == 0) {
3305 /* l > c, c == r - swap ends, grow pc */
3306 qsort_swap(u_right, u_left);
3308 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3310 /* l > c, c > r - swap ends to get in order */
3311 qsort_swap(u_right, u_left);
3312 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3315 /* We now know the 3 middle elements have been compared and
3316 arranged in the desired order, so we can shrink the uncompared
3321 qsort_all_asserts(pc_left, pc_right, u_left, u_right);
3323 /* The above massive nested if was the simple part :-). We now have
3324 the middle 3 elements ordered and we need to scan through the
3325 uncompared sets on either side, swapping elements that are on
3326 the wrong side or simply shuffling equal elements around to get
3327 all equal elements into the pivot chunk.
3331 int still_work_on_left;
3332 int still_work_on_right;
3334 /* Scan the uncompared values on the left. If I find a value
3335 equal to the pivot value, move it over so it is adjacent to
3336 the pivot chunk and expand the pivot chunk. If I find a value
3337 less than the pivot value, then just leave it - its already
3338 on the correct side of the partition. If I find a greater
3339 value, then stop the scan.
3341 while (still_work_on_left = (u_right >= part_left)) {
3342 s = qsort_cmp(u_right, pc_left);
3345 } else if (s == 0) {
3347 if (pc_left != u_right) {
3348 qsort_swap(u_right, pc_left);
3354 qsort_assert(u_right < pc_left);
3355 qsort_assert(pc_left <= pc_right);
3356 qsort_assert(qsort_cmp(u_right + 1, pc_left) <= 0);
3357 qsort_assert(qsort_cmp(pc_left, pc_right) == 0);
3360 /* Do a mirror image scan of uncompared values on the right
3362 while (still_work_on_right = (u_left <= part_right)) {
3363 s = qsort_cmp(pc_right, u_left);
3366 } else if (s == 0) {
3368 if (pc_right != u_left) {
3369 qsort_swap(pc_right, u_left);
3375 qsort_assert(u_left > pc_right);
3376 qsort_assert(pc_left <= pc_right);
3377 qsort_assert(qsort_cmp(pc_right, u_left - 1) <= 0);
3378 qsort_assert(qsort_cmp(pc_left, pc_right) == 0);
3381 if (still_work_on_left) {
3382 /* I know I have a value on the left side which needs to be
3383 on the right side, but I need to know more to decide
3384 exactly the best thing to do with it.
3386 if (still_work_on_right) {
3387 /* I know I have values on both side which are out of
3388 position. This is a big win because I kill two birds
3389 with one swap (so to speak). I can advance the
3390 uncompared pointers on both sides after swapping both
3391 of them into the right place.
3393 qsort_swap(u_right, u_left);
3396 qsort_all_asserts(pc_left, pc_right, u_left, u_right);
3398 /* I have an out of position value on the left, but the
3399 right is fully scanned, so I "slide" the pivot chunk
3400 and any less-than values left one to make room for the
3401 greater value over on the right. If the out of position
3402 value is immediately adjacent to the pivot chunk (there
3403 are no less-than values), I can do that with a swap,
3404 otherwise, I have to rotate one of the less than values
3405 into the former position of the out of position value
3406 and the right end of the pivot chunk into the left end
3410 if (pc_left == u_right) {
3411 qsort_swap(u_right, pc_right);
3412 qsort_all_asserts(pc_left, pc_right-1, u_left, u_right-1);
3414 qsort_rotate(u_right, pc_left, pc_right);
3415 qsort_all_asserts(pc_left, pc_right-1, u_left, u_right-1);
3420 } else if (still_work_on_right) {
3421 /* Mirror image of complex case above: I have an out of
3422 position value on the right, but the left is fully
3423 scanned, so I need to shuffle things around to make room
3424 for the right value on the left.
3427 if (pc_right == u_left) {
3428 qsort_swap(u_left, pc_left);
3429 qsort_all_asserts(pc_left+1, pc_right, u_left+1, u_right);
3431 qsort_rotate(pc_right, pc_left, u_left);
3432 qsort_all_asserts(pc_left+1, pc_right, u_left+1, u_right);
3437 /* No more scanning required on either side of partition,
3438 break out of loop and figure out next set of partitions
3444 /* The elements in the pivot chunk are now in the right place. They
3445 will never move or be compared again. All I have to do is decide
3446 what to do with the stuff to the left and right of the pivot
3449 Notes on the QSORT_ORDER_GUESS ifdef code:
3451 1. If I just built these partitions without swapping any (or
3452 very many) elements, there is a chance that the elements are
3453 already ordered properly (being properly ordered will
3454 certainly result in no swapping, but the converse can't be
3457 2. A (properly written) insertion sort will run faster on
3458 already ordered data than qsort will.
3460 3. Perhaps there is some way to make a good guess about
3461 switching to an insertion sort earlier than partition size 6
3462 (for instance - we could save the partition size on the stack
3463 and increase the size each time we find we didn't swap, thus
3464 switching to insertion sort earlier for partitions with a
3465 history of not swapping).
3467 4. Naturally, if I just switch right away, it will make
3468 artificial benchmarks with pure ascending (or descending)
3469 data look really good, but is that a good reason in general?
3473 #ifdef QSORT_ORDER_GUESS
3475 #if QSORT_ORDER_GUESS == 1
3476 qsort_break_even = (part_right - part_left) + 1;
3478 #if QSORT_ORDER_GUESS == 2
3479 qsort_break_even *= 2;
3481 #if QSORT_ORDER_GUESS == 3
3482 int prev_break = qsort_break_even;
3483 qsort_break_even *= qsort_break_even;
3484 if (qsort_break_even < prev_break) {
3485 qsort_break_even = (part_right - part_left) + 1;
3489 qsort_break_even = QSORT_BREAK_EVEN;
3493 if (part_left < pc_left) {
3494 /* There are elements on the left which need more processing.
3495 Check the right as well before deciding what to do.
3497 if (pc_right < part_right) {
3498 /* We have two partitions to be sorted. Stack the biggest one
3499 and process the smallest one on the next iteration. This
3500 minimizes the stack height by insuring that any additional
3501 stack entries must come from the smallest partition which
3502 (because it is smallest) will have the fewest
3503 opportunities to generate additional stack entries.
3505 if ((part_right - pc_right) > (pc_left - part_left)) {
3506 /* stack the right partition, process the left */
3507 partition_stack[next_stack_entry].left = pc_right + 1;
3508 partition_stack[next_stack_entry].right = part_right;
3509 #ifdef QSORT_ORDER_GUESS
3510 partition_stack[next_stack_entry].qsort_break_even = qsort_break_even;
3512 part_right = pc_left - 1;
3514 /* stack the left partition, process the right */
3515 partition_stack[next_stack_entry].left = part_left;
3516 partition_stack[next_stack_entry].right = pc_left - 1;
3517 #ifdef QSORT_ORDER_GUESS
3518 partition_stack[next_stack_entry].qsort_break_even = qsort_break_even;
3520 part_left = pc_right + 1;
3522 qsort_assert(next_stack_entry < QSORT_MAX_STACK);
3525 /* The elements on the left are the only remaining elements
3526 that need sorting, arrange for them to be processed as the
3529 part_right = pc_left - 1;
3531 } else if (pc_right < part_right) {
3532 /* There is only one chunk on the right to be sorted, make it
3533 the new partition and loop back around.
3535 part_left = pc_right + 1;
3537 /* This whole partition wound up in the pivot chunk, so
3538 we need to get a new partition off the stack.
3540 if (next_stack_entry == 0) {
3541 /* the stack is empty - we are done */
3545 part_left = partition_stack[next_stack_entry].left;
3546 part_right = partition_stack[next_stack_entry].right;
3547 #ifdef QSORT_ORDER_GUESS
3548 qsort_break_even = partition_stack[next_stack_entry].qsort_break_even;
3552 /* This partition is too small to fool with qsort complexity, just
3553 do an ordinary insertion sort to minimize overhead.
3556 /* Assume 1st element is in right place already, and start checking
3557 at 2nd element to see where it should be inserted.
3559 for (i = part_left + 1; i <= part_right; ++i) {
3561 /* Scan (backwards - just in case 'i' is already in right place)
3562 through the elements already sorted to see if the ith element
3563 belongs ahead of one of them.
3565 for (j = i - 1; j >= part_left; --j) {
3566 if (qsort_cmp(i, j) >= 0) {
3567 /* i belongs right after j
3574 /* Looks like we really need to move some things
3578 for (k = i - 1; k >= j; --k)
3579 array[k + 1] = array[k];
3584 /* That partition is now sorted, grab the next one, or get out
3585 of the loop if there aren't any more.
3588 if (next_stack_entry == 0) {
3589 /* the stack is empty - we are done */
3593 part_left = partition_stack[next_stack_entry].left;
3594 part_right = partition_stack[next_stack_entry].right;
3595 #ifdef QSORT_ORDER_GUESS
3596 qsort_break_even = partition_stack[next_stack_entry].qsort_break_even;
3601 /* Believe it or not, the array is sorted at this point! */