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 *prx = cx->sb_rx;
131 rxres_restore(&cx->sb_rxres, prx);
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(prx, 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(prx));
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 (prx->subbase && prx->subbase != orig) {
171 cx->sb_orig = orig = prx->subbase;
173 cx->sb_strend = s + (cx->sb_strend - m);
175 cx->sb_m = m = prx->startp[0];
176 sv_catpvn(dstr, s, m-s);
177 cx->sb_s = prx->endp[0];
178 cx->sb_rxtainted |= RX_MATCH_TAINTED(prx);
179 rxres_save(&cx->sb_rxres, prx);
180 RETURNOP(pm->op_pmreplstart);
184 rxres_save(void **rsp, REGEXP *prx)
189 if (!p || p[1] < prx->nparens) {
190 i = 6 + prx->nparens * 2;
198 *p++ = (UV)prx->subbase;
199 prx->subbase = Nullch;
203 *p++ = (UV)prx->subbeg;
204 *p++ = (UV)prx->subend;
205 for (i = 0; i <= prx->nparens; ++i) {
206 *p++ = (UV)prx->startp[i];
207 *p++ = (UV)prx->endp[i];
212 rxres_restore(void **rsp, REGEXP *prx)
217 Safefree(prx->subbase);
218 prx->subbase = (char*)(*p);
223 prx->subbeg = (char*)(*p++);
224 prx->subend = (char*)(*p++);
225 for (i = 0; i <= prx->nparens; ++i) {
226 prx->startp[i] = (char*)(*p++);
227 prx->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, FUNC_NAME_TO_PTR(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)
758 ? FUNC_NAME_TO_PTR(sv_cmp_locale)
759 : FUNC_NAME_TO_PTR(sv_cmp));
762 stack_sp = ORIGMARK + max;
770 if (GIMME == G_ARRAY)
771 return cCONDOP->op_true;
772 return SvTRUEx(PAD_SV(op->op_targ)) ? cCONDOP->op_false : cCONDOP->op_true;
779 if (GIMME == G_ARRAY) {
780 RETURNOP(((CONDOP*)cUNOP->op_first)->op_false);
784 SV *targ = PAD_SV(op->op_targ);
786 if ((op->op_private & OPpFLIP_LINENUM)
787 ? last_in_gv && SvIV(sv) == IoLINES(GvIOp(last_in_gv))
789 sv_setiv(PAD_SV(cUNOP->op_first->op_targ), 1);
790 if (op->op_flags & OPf_SPECIAL) {
798 RETURNOP(((CONDOP*)cUNOP->op_first)->op_false);
811 if (GIMME == G_ARRAY) {
817 if (SvNIOKp(left) || !SvPOKp(left) ||
818 (looks_like_number(left) && *SvPVX(left) != '0') )
823 EXTEND_MORTAL(max - i + 1);
824 EXTEND(SP, max - i + 1);
827 sv = sv_2mortal(newSViv(i++));
832 SV *final = sv_mortalcopy(right);
834 char *tmps = SvPV(final, len);
836 sv = sv_mortalcopy(left);
837 while (!SvNIOKp(sv) && SvCUR(sv) <= len &&
838 strNE(SvPVX(sv),tmps) ) {
840 sv = sv_2mortal(newSVsv(sv));
843 if (strEQ(SvPVX(sv),tmps))
849 SV *targ = PAD_SV(cUNOP->op_first->op_targ);
851 if ((op->op_private & OPpFLIP_LINENUM)
852 ? last_in_gv && SvIV(sv) == IoLINES(GvIOp(last_in_gv))
854 sv_setiv(PAD_SV(((UNOP*)cUNOP->op_first)->op_first->op_targ), 0);
855 sv_catpv(targ, "E0");
866 dopoptolabel(char *label)
870 register PERL_CONTEXT *cx;
872 for (i = cxstack_ix; i >= 0; i--) {
874 switch (cx->cx_type) {
877 warn("Exiting substitution via %s", op_name[op->op_type]);
881 warn("Exiting subroutine via %s", op_name[op->op_type]);
885 warn("Exiting eval via %s", op_name[op->op_type]);
889 warn("Exiting pseudo-block via %s", op_name[op->op_type]);
892 if (!cx->blk_loop.label ||
893 strNE(label, cx->blk_loop.label) ) {
894 DEBUG_l(deb("(Skipping label #%ld %s)\n",
895 (long)i, cx->blk_loop.label));
898 DEBUG_l( deb("(Found label #%ld %s)\n", (long)i, label));
908 I32 gimme = block_gimme();
909 return (gimme == G_VOID) ? G_SCALAR : gimme;
918 cxix = dopoptosub(cxstack_ix);
922 switch (cxstack[cxix].blk_gimme) {
928 croak("panic: bad gimme: %d\n", cxstack[cxix].blk_gimme);
935 dopoptosub(I32 startingblock)
939 register PERL_CONTEXT *cx;
940 for (i = startingblock; i >= 0; i--) {
942 switch (cx->cx_type) {
947 DEBUG_l( deb("(Found sub #%ld)\n", (long)i));
955 dopoptoeval(I32 startingblock)
959 register PERL_CONTEXT *cx;
960 for (i = startingblock; i >= 0; i--) {
962 switch (cx->cx_type) {
966 DEBUG_l( deb("(Found eval #%ld)\n", (long)i));
974 dopoptoloop(I32 startingblock)
978 register PERL_CONTEXT *cx;
979 for (i = startingblock; i >= 0; i--) {
981 switch (cx->cx_type) {
984 warn("Exiting substitution via %s", op_name[op->op_type]);
988 warn("Exiting subroutine via %s", op_name[op->op_type]);
992 warn("Exiting eval via %s", op_name[op->op_type]);
996 warn("Exiting pseudo-block via %s", op_name[op->op_type]);
999 DEBUG_l( deb("(Found loop #%ld)\n", (long)i));
1010 register PERL_CONTEXT *cx;
1014 while (cxstack_ix > cxix) {
1015 cx = &cxstack[cxstack_ix];
1016 DEBUG_l(PerlIO_printf(Perl_debug_log, "Unwinding block %ld, type %s\n",
1017 (long) cxstack_ix, block_type[cx->cx_type]));
1018 /* Note: we don't need to restore the base context info till the end. */
1019 switch (cx->cx_type) {
1022 continue; /* not break */
1040 die_where(char *message)
1045 register PERL_CONTEXT *cx;
1051 STRLEN klen = strlen(message);
1053 svp = hv_fetch(ERRHV, message, klen, TRUE);
1056 static char prefix[] = "\t(in cleanup) ";
1058 sv_upgrade(*svp, SVt_IV);
1059 (void)SvIOK_only(*svp);
1062 SvGROW(err, SvCUR(err)+sizeof(prefix)+klen);
1063 sv_catpvn(err, prefix, sizeof(prefix)-1);
1064 sv_catpvn(err, message, klen);
1070 sv_setpv(ERRSV, message);
1072 cxix = dopoptoeval(cxstack_ix);
1076 if (cxix < cxstack_ix)
1080 if (cx->cx_type != CXt_EVAL) {
1081 PerlIO_printf(PerlIO_stderr(), "panic: die %s", message);
1086 if (gimme == G_SCALAR)
1087 *++newsp = &sv_undef;
1092 if (optype == OP_REQUIRE) {
1093 char* msg = SvPVx(ERRSV, na);
1094 DIE("%s", *msg ? msg : "Compilation failed in require");
1096 return pop_return();
1099 PerlIO_printf(PerlIO_stderr(), "%s",message);
1100 PerlIO_flush(PerlIO_stderr());
1109 if (SvTRUE(left) != SvTRUE(right))
1121 RETURNOP(cLOGOP->op_other);
1130 RETURNOP(cLOGOP->op_other);
1136 register I32 cxix = dopoptosub(cxstack_ix);
1137 register PERL_CONTEXT *cx;
1149 if (GIMME != G_ARRAY)
1153 if (DBsub && cxix >= 0 &&
1154 cxstack[cxix].blk_sub.cv == GvCV(DBsub))
1158 cxix = dopoptosub(cxix - 1);
1160 cx = &cxstack[cxix];
1161 if (cxstack[cxix].cx_type == CXt_SUB) {
1162 dbcxix = dopoptosub(cxix - 1);
1163 /* We expect that cxstack[dbcxix] is CXt_SUB, anyway, the
1164 field below is defined for any cx. */
1165 if (DBsub && dbcxix >= 0 && cxstack[dbcxix].blk_sub.cv == GvCV(DBsub))
1166 cx = &cxstack[dbcxix];
1169 if (GIMME != G_ARRAY) {
1170 hv = cx->blk_oldcop->cop_stash;
1175 sv_setpv(TARG, HvNAME(hv));
1181 hv = cx->blk_oldcop->cop_stash;
1185 PUSHs(sv_2mortal(newSVpv(HvNAME(hv), 0)));
1186 PUSHs(sv_2mortal(newSVpv(SvPVX(GvSV(cx->blk_oldcop->cop_filegv)), 0)));
1187 PUSHs(sv_2mortal(newSViv((I32)cx->blk_oldcop->cop_line)));
1190 if (cx->cx_type == CXt_SUB) { /* So is cxstack[dbcxix]. */
1192 gv_efullname3(sv, CvGV(cxstack[cxix].blk_sub.cv), Nullch);
1193 PUSHs(sv_2mortal(sv));
1194 PUSHs(sv_2mortal(newSViv((I32)cx->blk_sub.hasargs)));
1197 PUSHs(sv_2mortal(newSVpv("(eval)",0)));
1198 PUSHs(sv_2mortal(newSViv(0)));
1200 gimme = (I32)cx->blk_gimme;
1201 if (gimme == G_VOID)
1204 PUSHs(sv_2mortal(newSViv(gimme & G_ARRAY)));
1205 if (cx->cx_type == CXt_EVAL) {
1206 if (cx->blk_eval.old_op_type == OP_ENTEREVAL) {
1207 PUSHs(cx->blk_eval.cur_text);
1210 else if (cx->blk_eval.old_name) { /* Try blocks have old_name == 0. */
1211 /* Require, put the name. */
1212 PUSHs(sv_2mortal(newSVpv(cx->blk_eval.old_name, 0)));
1216 else if (cx->cx_type == CXt_SUB &&
1217 cx->blk_sub.hasargs &&
1218 curcop->cop_stash == debstash)
1220 AV *ary = cx->blk_sub.argarray;
1221 int off = AvARRAY(ary) - AvALLOC(ary);
1225 dbargs = GvAV(gv_AVadd(tmpgv = gv_fetchpv("DB::args", TRUE,
1228 AvREAL_off(dbargs); /* XXX Should be REIFY */
1231 if (AvMAX(dbargs) < AvFILLp(ary) + off)
1232 av_extend(dbargs, AvFILLp(ary) + off);
1233 Copy(AvALLOC(ary), AvARRAY(dbargs), AvFILLp(ary) + 1 + off, SV*);
1234 AvFILLp(dbargs) = AvFILLp(ary) + off;
1240 sortcv(SV *a, SV *b)
1243 I32 oldsaveix = savestack_ix;
1244 I32 oldscopeix = scopestack_ix;
1248 stack_sp = stack_base;
1251 if (stack_sp != stack_base + 1)
1252 croak("Sort subroutine didn't return single value");
1253 if (!SvNIOKp(*stack_sp))
1254 croak("Sort subroutine didn't return a numeric value");
1255 result = SvIV(*stack_sp);
1256 while (scopestack_ix > oldscopeix) {
1259 leave_scope(oldsaveix);
1272 sv_reset(tmps, curcop->cop_stash);
1285 TAINT_NOT; /* Each statement is presumed innocent */
1286 stack_sp = stack_base + cxstack[cxstack_ix].blk_oldsp;
1289 if (op->op_private || SvIV(DBsingle) || SvIV(DBsignal) || SvIV(DBtrace))
1293 register PERL_CONTEXT *cx;
1294 I32 gimme = G_ARRAY;
1301 DIE("No DB::DB routine defined");
1303 if (CvDEPTH(cv) >= 1 && !(debug & (1<<30))) /* don't do recursive DB::DB call */
1315 push_return(op->op_next);
1316 PUSHBLOCK(cx, CXt_SUB, SP);
1319 (void)SvREFCNT_inc(cv);
1321 curpad = AvARRAY((AV*)*av_fetch(CvPADLIST(cv),1,FALSE));
1322 RETURNOP(CvSTART(cv));
1336 register PERL_CONTEXT *cx;
1337 I32 gimme = GIMME_V;
1344 if (op->op_flags & OPf_SPECIAL)
1345 svp = save_threadsv(op->op_targ); /* per-thread variable */
1347 #endif /* USE_THREADS */
1349 svp = &curpad[op->op_targ]; /* "my" variable */
1354 (void)save_scalar(gv);
1355 svp = &GvSV(gv); /* symbol table variable */
1360 PUSHBLOCK(cx, CXt_LOOP, SP);
1361 PUSHLOOP(cx, svp, MARK);
1362 if (op->op_flags & OPf_STACKED)
1363 cx->blk_loop.iterary = (AV*)SvREFCNT_inc(POPs);
1365 cx->blk_loop.iterary = curstack;
1366 AvFILLp(curstack) = SP - stack_base;
1367 cx->blk_loop.iterix = MARK - stack_base;
1376 register PERL_CONTEXT *cx;
1377 I32 gimme = GIMME_V;
1383 PUSHBLOCK(cx, CXt_LOOP, SP);
1384 PUSHLOOP(cx, 0, SP);
1392 register PERL_CONTEXT *cx;
1393 struct block_loop cxloop;
1401 POPLOOP1(cx); /* Delay POPLOOP2 until stack values are safe */
1404 if (gimme == G_VOID)
1406 else if (gimme == G_SCALAR) {
1408 *++newsp = sv_mortalcopy(*SP);
1410 *++newsp = &sv_undef;
1414 *++newsp = sv_mortalcopy(*++mark);
1415 TAINT_NOT; /* Each item is independent */
1421 POPLOOP2(); /* Stack values are safe: release loop vars ... */
1422 curpm = newpm; /* ... and pop $1 et al */
1434 register PERL_CONTEXT *cx;
1435 struct block_sub cxsub;
1436 bool popsub2 = FALSE;
1442 if (curstack == sortstack) {
1443 if (cxstack_ix == sortcxix || dopoptosub(cxstack_ix) <= sortcxix) {
1444 if (cxstack_ix > sortcxix)
1446 AvARRAY(curstack)[1] = *SP;
1447 stack_sp = stack_base + 1;
1452 cxix = dopoptosub(cxstack_ix);
1454 DIE("Can't return outside a subroutine");
1455 if (cxix < cxstack_ix)
1459 switch (cx->cx_type) {
1461 POPSUB1(cx); /* Delay POPSUB2 until stack values are safe */
1466 if (optype == OP_REQUIRE &&
1467 (MARK == SP || (gimme == G_SCALAR && !SvTRUE(*SP))) )
1469 /* Unassume the success we assumed earlier. */
1470 char *name = cx->blk_eval.old_name;
1471 (void)hv_delete(GvHVn(incgv), name, strlen(name), G_DISCARD);
1472 DIE("%s did not return a true value", name);
1476 DIE("panic: return");
1480 if (gimme == G_SCALAR) {
1482 *++newsp = (popsub2 && SvTEMP(*SP))
1483 ? *SP : sv_mortalcopy(*SP);
1485 *++newsp = &sv_undef;
1487 else if (gimme == G_ARRAY) {
1488 while (++MARK <= SP) {
1489 *++newsp = (popsub2 && SvTEMP(*MARK))
1490 ? *MARK : sv_mortalcopy(*MARK);
1491 TAINT_NOT; /* Each item is independent */
1496 /* Stack values are safe: */
1498 POPSUB2(); /* release CV and @_ ... */
1500 curpm = newpm; /* ... and pop $1 et al */
1503 return pop_return();
1510 register PERL_CONTEXT *cx;
1511 struct block_loop cxloop;
1512 struct block_sub cxsub;
1519 SV **mark = stack_base + cxstack[cxstack_ix].blk_oldsp;
1521 if (op->op_flags & OPf_SPECIAL) {
1522 cxix = dopoptoloop(cxstack_ix);
1524 DIE("Can't \"last\" outside a block");
1527 cxix = dopoptolabel(cPVOP->op_pv);
1529 DIE("Label not found for \"last %s\"", cPVOP->op_pv);
1531 if (cxix < cxstack_ix)
1535 switch (cx->cx_type) {
1537 POPLOOP1(cx); /* Delay POPLOOP2 until stack values are safe */
1539 nextop = cxloop.last_op->op_next;
1542 POPSUB1(cx); /* Delay POPSUB2 until stack values are safe */
1544 nextop = pop_return();
1548 nextop = pop_return();
1555 if (gimme == G_SCALAR) {
1557 *++newsp = ((pop2 == CXt_SUB) && SvTEMP(*SP))
1558 ? *SP : sv_mortalcopy(*SP);
1560 *++newsp = &sv_undef;
1562 else if (gimme == G_ARRAY) {
1563 while (++MARK <= SP) {
1564 *++newsp = ((pop2 == CXt_SUB) && SvTEMP(*MARK))
1565 ? *MARK : sv_mortalcopy(*MARK);
1566 TAINT_NOT; /* Each item is independent */
1572 /* Stack values are safe: */
1575 POPLOOP2(); /* release loop vars ... */
1579 POPSUB2(); /* release CV and @_ ... */
1582 curpm = newpm; /* ... and pop $1 et al */
1591 register PERL_CONTEXT *cx;
1594 if (op->op_flags & OPf_SPECIAL) {
1595 cxix = dopoptoloop(cxstack_ix);
1597 DIE("Can't \"next\" outside a block");
1600 cxix = dopoptolabel(cPVOP->op_pv);
1602 DIE("Label not found for \"next %s\"", cPVOP->op_pv);
1604 if (cxix < cxstack_ix)
1608 oldsave = scopestack[scopestack_ix - 1];
1609 LEAVE_SCOPE(oldsave);
1610 return cx->blk_loop.next_op;
1616 register PERL_CONTEXT *cx;
1619 if (op->op_flags & OPf_SPECIAL) {
1620 cxix = dopoptoloop(cxstack_ix);
1622 DIE("Can't \"redo\" outside a block");
1625 cxix = dopoptolabel(cPVOP->op_pv);
1627 DIE("Label not found for \"redo %s\"", cPVOP->op_pv);
1629 if (cxix < cxstack_ix)
1633 oldsave = scopestack[scopestack_ix - 1];
1634 LEAVE_SCOPE(oldsave);
1635 return cx->blk_loop.redo_op;
1639 dofindlabel(OP *o, char *label, OP **opstack, OP **oplimit)
1643 static char too_deep[] = "Target of goto is too deeply nested";
1647 if (o->op_type == OP_LEAVE ||
1648 o->op_type == OP_SCOPE ||
1649 o->op_type == OP_LEAVELOOP ||
1650 o->op_type == OP_LEAVETRY)
1652 *ops++ = cUNOPo->op_first;
1657 if (o->op_flags & OPf_KIDS) {
1658 /* First try all the kids at this level, since that's likeliest. */
1659 for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling) {
1660 if ((kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) &&
1661 kCOP->cop_label && strEQ(kCOP->cop_label, label))
1664 for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling) {
1665 if (kid == lastgotoprobe)
1667 if ((kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) &&
1669 (ops[-1]->op_type != OP_NEXTSTATE &&
1670 ops[-1]->op_type != OP_DBSTATE)))
1672 if (o = dofindlabel(kid, label, ops, oplimit))
1682 return pp_goto(ARGS);
1691 register PERL_CONTEXT *cx;
1692 #define GOTO_DEPTH 64
1693 OP *enterops[GOTO_DEPTH];
1695 int do_dump = (op->op_type == OP_DUMP);
1698 if (op->op_flags & OPf_STACKED) {
1701 /* This egregious kludge implements goto &subroutine */
1702 if (SvROK(sv) && SvTYPE(SvRV(sv)) == SVt_PVCV) {
1704 register PERL_CONTEXT *cx;
1705 CV* cv = (CV*)SvRV(sv);
1710 if (!CvROOT(cv) && !CvXSUB(cv)) {
1712 SV *tmpstr = sv_newmortal();
1713 gv_efullname3(tmpstr, CvGV(cv), Nullch);
1714 DIE("Goto undefined subroutine &%s",SvPVX(tmpstr));
1716 DIE("Goto undefined subroutine");
1719 /* First do some returnish stuff. */
1720 cxix = dopoptosub(cxstack_ix);
1722 DIE("Can't goto subroutine outside a subroutine");
1723 if (cxix < cxstack_ix)
1726 if (cx->cx_type == CXt_EVAL && cx->blk_eval.old_op_type == OP_ENTEREVAL)
1727 DIE("Can't goto subroutine from an eval-string");
1729 if (cx->cx_type == CXt_SUB &&
1730 cx->blk_sub.hasargs) { /* put @_ back onto stack */
1731 AV* av = cx->blk_sub.argarray;
1733 items = AvFILLp(av) + 1;
1735 EXTEND(stack_sp, items); /* @_ could have been extended. */
1736 Copy(AvARRAY(av), stack_sp, items, SV*);
1739 SvREFCNT_dec(GvAV(defgv));
1740 GvAV(defgv) = cx->blk_sub.savearray;
1741 #endif /* USE_THREADS */
1745 if (cx->cx_type == CXt_SUB &&
1746 !(CvDEPTH(cx->blk_sub.cv) = cx->blk_sub.olddepth))
1747 SvREFCNT_dec(cx->blk_sub.cv);
1748 oldsave = scopestack[scopestack_ix - 1];
1749 LEAVE_SCOPE(oldsave);
1751 /* Now do some callish stuff. */
1754 if (CvOLDSTYLE(cv)) {
1755 I32 (*fp3)_((int,int,int));
1760 fp3 = (I32(*)_((int,int,int)))CvXSUB(cv);
1761 items = (*fp3)(CvXSUBANY(cv).any_i32,
1762 mark - stack_base + 1,
1764 SP = stack_base + items;
1767 stack_sp--; /* There is no cv arg. */
1768 (void)(*CvXSUB(cv))(THIS_ cv);
1771 return pop_return();
1774 AV* padlist = CvPADLIST(cv);
1775 SV** svp = AvARRAY(padlist);
1776 if (cx->cx_type == CXt_EVAL) {
1777 in_eval = cx->blk_eval.old_in_eval;
1778 eval_root = cx->blk_eval.old_eval_root;
1779 cx->cx_type = CXt_SUB;
1780 cx->blk_sub.hasargs = 0;
1782 cx->blk_sub.cv = cv;
1783 cx->blk_sub.olddepth = CvDEPTH(cv);
1785 if (CvDEPTH(cv) < 2)
1786 (void)SvREFCNT_inc(cv);
1787 else { /* save temporaries on recursion? */
1788 if (CvDEPTH(cv) == 100 && dowarn)
1789 sub_crush_depth(cv);
1790 if (CvDEPTH(cv) > AvFILLp(padlist)) {
1791 AV *newpad = newAV();
1792 SV **oldpad = AvARRAY(svp[CvDEPTH(cv)-1]);
1793 I32 ix = AvFILLp((AV*)svp[1]);
1794 svp = AvARRAY(svp[0]);
1795 for ( ;ix > 0; ix--) {
1796 if (svp[ix] != &sv_undef) {
1797 char *name = SvPVX(svp[ix]);
1798 if ((SvFLAGS(svp[ix]) & SVf_FAKE)
1801 /* outer lexical or anon code */
1802 av_store(newpad, ix,
1803 SvREFCNT_inc(oldpad[ix]) );
1805 else { /* our own lexical */
1807 av_store(newpad, ix, sv = (SV*)newAV());
1808 else if (*name == '%')
1809 av_store(newpad, ix, sv = (SV*)newHV());
1811 av_store(newpad, ix, sv = NEWSV(0,0));
1816 av_store(newpad, ix, sv = NEWSV(0,0));
1820 if (cx->blk_sub.hasargs) {
1823 av_store(newpad, 0, (SV*)av);
1824 AvFLAGS(av) = AVf_REIFY;
1826 av_store(padlist, CvDEPTH(cv), (SV*)newpad);
1827 AvFILLp(padlist) = CvDEPTH(cv);
1828 svp = AvARRAY(padlist);
1832 if (!cx->blk_sub.hasargs) {
1833 AV* av = (AV*)curpad[0];
1835 items = AvFILLp(av) + 1;
1837 /* Mark is at the end of the stack. */
1839 Copy(AvARRAY(av), SP + 1, items, SV*);
1844 #endif /* USE_THREADS */
1846 curpad = AvARRAY((AV*)svp[CvDEPTH(cv)]);
1848 if (cx->blk_sub.hasargs)
1849 #endif /* USE_THREADS */
1851 AV* av = (AV*)curpad[0];
1855 cx->blk_sub.savearray = GvAV(defgv);
1856 GvAV(defgv) = (AV*)SvREFCNT_inc(av);
1857 #endif /* USE_THREADS */
1858 cx->blk_sub.argarray = av;
1861 if (items >= AvMAX(av) + 1) {
1863 if (AvARRAY(av) != ary) {
1864 AvMAX(av) += AvARRAY(av) - AvALLOC(av);
1865 SvPVX(av) = (char*)ary;
1867 if (items >= AvMAX(av) + 1) {
1868 AvMAX(av) = items - 1;
1869 Renew(ary,items+1,SV*);
1871 SvPVX(av) = (char*)ary;
1874 Copy(mark,AvARRAY(av),items,SV*);
1875 AvFILLp(av) = items - 1;
1883 if (PERLDB_SUB && curstash != debstash) {
1885 * We do not care about using sv to call CV;
1886 * it's for informational purposes only.
1888 SV *sv = GvSV(DBsub);
1890 gv_efullname3(sv, CvGV(cv), Nullch);
1892 RETURNOP(CvSTART(cv));
1896 label = SvPV(sv,na);
1898 else if (op->op_flags & OPf_SPECIAL) {
1900 DIE("goto must have label");
1903 label = cPVOP->op_pv;
1905 if (label && *label) {
1912 for (ix = cxstack_ix; ix >= 0; ix--) {
1914 switch (cx->cx_type) {
1916 gotoprobe = eval_root; /* XXX not good for nested eval */
1919 gotoprobe = cx->blk_oldcop->op_sibling;
1925 gotoprobe = cx->blk_oldcop->op_sibling;
1927 gotoprobe = main_root;
1930 if (CvDEPTH(cx->blk_sub.cv)) {
1931 gotoprobe = CvROOT(cx->blk_sub.cv);
1936 DIE("Can't \"goto\" outside a block");
1940 gotoprobe = main_root;
1943 retop = dofindlabel(gotoprobe, label,
1944 enterops, enterops + GOTO_DEPTH);
1947 lastgotoprobe = gotoprobe;
1950 DIE("Can't find label %s", label);
1952 /* pop unwanted frames */
1954 if (ix < cxstack_ix) {
1961 oldsave = scopestack[scopestack_ix];
1962 LEAVE_SCOPE(oldsave);
1965 /* push wanted frames */
1967 if (*enterops && enterops[1]) {
1969 for (ix = 1; enterops[ix]; ix++) {
1971 /* Eventually we may want to stack the needed arguments
1972 * for each op. For now, we punt on the hard ones. */
1973 if (op->op_type == OP_ENTERITER)
1974 DIE("Can't \"goto\" into the middle of a foreach loop",
1976 (CALLOP->op_ppaddr)(ARGS);
1984 if (!retop) retop = main_start;
1991 restartop = 0; /* hmm, must be GNU unexec().. */
1995 if (curstack == signalstack) {
2013 if (anum == 1 && VMSISH_EXIT)
2026 double value = SvNVx(GvSV(cCOP->cop_gv));
2027 register I32 match = I_32(value);
2030 if (((double)match) > value)
2031 --match; /* was fractional--truncate other way */
2033 match -= cCOP->uop.scop.scop_offset;
2036 else if (match > cCOP->uop.scop.scop_max)
2037 match = cCOP->uop.scop.scop_max;
2038 op = cCOP->uop.scop.scop_next[match];
2048 op = op->op_next; /* can't assume anything */
2050 match = *(SvPVx(GvSV(cCOP->cop_gv), na)) & 255;
2051 match -= cCOP->uop.scop.scop_offset;
2054 else if (match > cCOP->uop.scop.scop_max)
2055 match = cCOP->uop.scop.scop_max;
2056 op = cCOP->uop.scop.scop_next[match];
2065 save_lines(AV *array, SV *sv)
2067 register char *s = SvPVX(sv);
2068 register char *send = SvPVX(sv) + SvCUR(sv);
2070 register I32 line = 1;
2072 while (s && s < send) {
2073 SV *tmpstr = NEWSV(85,0);
2075 sv_upgrade(tmpstr, SVt_PVMG);
2076 t = strchr(s, '\n');
2082 sv_setpvn(tmpstr, s, t - s);
2083 av_store(array, line++, tmpstr);
2098 assert(CATCH_GET == TRUE);
2099 DEBUG_l(deb("Setting up local jumplevel %p, was %p\n", &cur_env, top_env));
2103 default: /* topmost level handles it */
2110 PerlIO_printf(PerlIO_stderr(), "panic: restartop\n");
2126 sv_compile_2op(SV *sv, OP** startop, char *code, AV** avp)
2127 /* sv Text to convert to OP tree. */
2128 /* startop op_free() this to undo. */
2129 /* code Short string id of the caller. */
2131 dSP; /* Make POPBLOCK work. */
2134 I32 gimme = 0; /* SUSPECT - INITIALZE TO WHAT? NI-S */
2138 char tmpbuf[TYPE_DIGITS(long) + 12 + 10];
2144 /* switch to eval mode */
2146 SAVESPTR(compiling.cop_filegv);
2147 SAVEI16(compiling.cop_line);
2148 sprintf(tmpbuf, "_<(%.10s_eval %lu)", code, (unsigned long)++evalseq);
2149 compiling.cop_filegv = gv_fetchfile(tmpbuf+2);
2150 compiling.cop_line = 1;
2151 /* XXX For C<eval "...">s within BEGIN {} blocks, this ends up
2152 deleting the eval's FILEGV from the stash before gv_check() runs
2153 (i.e. before run-time proper). To work around the coredump that
2154 ensues, we always turn GvMULTI_on for any globals that were
2155 introduced within evals. See force_ident(). GSAR 96-10-12 */
2156 safestr = savepv(tmpbuf);
2157 SAVEDELETE(defstash, safestr, strlen(safestr));
2159 #ifdef OP_IN_REGISTER
2167 op->op_type = 0; /* Avoid uninit warning. */
2168 op->op_flags = 0; /* Avoid uninit warning. */
2169 PUSHBLOCK(cx, CXt_EVAL, SP);
2170 PUSHEVAL(cx, 0, compiling.cop_filegv);
2171 rop = doeval(G_SCALAR, startop);
2175 (*startop)->op_type = OP_NULL;
2176 (*startop)->op_ppaddr = ppaddr[OP_NULL];
2178 *avp = (AV*)SvREFCNT_inc(comppad);
2180 #ifdef OP_IN_REGISTER
2186 /* With USE_THREADS, eval_owner must be held on entry to doeval */
2188 doeval(int gimme, OP** startop)
2201 /* set up a scratch pad */
2206 SAVESPTR(comppad_name);
2207 SAVEI32(comppad_name_fill);
2208 SAVEI32(min_intro_pending);
2209 SAVEI32(max_intro_pending);
2212 for (i = cxstack_ix - 1; i >= 0; i--) {
2213 PERL_CONTEXT *cx = &cxstack[i];
2214 if (cx->cx_type == CXt_EVAL)
2216 else if (cx->cx_type == CXt_SUB) {
2217 caller = cx->blk_sub.cv;
2223 compcv = (CV*)NEWSV(1104,0);
2224 sv_upgrade((SV *)compcv, SVt_PVCV);
2225 CvUNIQUE_on(compcv);
2227 CvOWNER(compcv) = 0;
2228 New(666, CvMUTEXP(compcv), 1, perl_mutex);
2229 MUTEX_INIT(CvMUTEXP(compcv));
2230 #endif /* USE_THREADS */
2233 av_push(comppad, Nullsv);
2234 curpad = AvARRAY(comppad);
2235 comppad_name = newAV();
2236 comppad_name_fill = 0;
2237 min_intro_pending = 0;
2240 av_store(comppad_name, 0, newSVpv("@_", 2));
2241 curpad[0] = (SV*)newAV();
2242 SvPADMY_on(curpad[0]); /* XXX Needed? */
2243 #endif /* USE_THREADS */
2245 comppadlist = newAV();
2246 AvREAL_off(comppadlist);
2247 av_store(comppadlist, 0, (SV*)comppad_name);
2248 av_store(comppadlist, 1, (SV*)comppad);
2249 CvPADLIST(compcv) = comppadlist;
2251 if (!saveop || saveop->op_type != OP_REQUIRE)
2252 CvOUTSIDE(compcv) = (CV*)SvREFCNT_inc(caller);
2256 /* make sure we compile in the right package */
2258 newstash = curcop->cop_stash;
2259 if (curstash != newstash) {
2261 curstash = newstash;
2265 SAVEFREESV(beginav);
2267 /* try to compile it */
2271 curcop = &compiling;
2272 curcop->cop_arybase = 0;
2274 rs = newSVpv("\n", 1);
2275 if (saveop && saveop->op_flags & OPf_SPECIAL)
2279 if (yyparse() || error_count || !eval_root) {
2283 I32 optype = 0; /* Might be reset by POPEVAL. */
2290 SP = stack_base + POPMARK; /* pop original mark */
2298 if (optype == OP_REQUIRE) {
2299 char* msg = SvPVx(ERRSV, na);
2300 DIE("%s", *msg ? msg : "Compilation failed in require");
2301 } else if (startop) {
2302 char* msg = SvPVx(ERRSV, na);
2306 croak("%sCompilation failed in regexp", (*msg ? msg : "Unknown error\n"));
2309 rs = SvREFCNT_inc(nrs);
2311 MUTEX_LOCK(&eval_mutex);
2313 COND_SIGNAL(&eval_cond);
2314 MUTEX_UNLOCK(&eval_mutex);
2315 #endif /* USE_THREADS */
2319 rs = SvREFCNT_inc(nrs);
2320 compiling.cop_line = 0;
2322 *startop = eval_root;
2323 SvREFCNT_dec(CvOUTSIDE(compcv));
2324 CvOUTSIDE(compcv) = Nullcv;
2326 SAVEFREEOP(eval_root);
2328 scalarvoid(eval_root);
2329 else if (gimme & G_ARRAY)
2334 DEBUG_x(dump_eval());
2336 /* Register with debugger: */
2337 if (PERLDB_INTER && saveop->op_type == OP_REQUIRE) {
2338 CV *cv = perl_get_cv("DB::postponed", FALSE);
2342 XPUSHs((SV*)compiling.cop_filegv);
2344 perl_call_sv((SV*)cv, G_DISCARD);
2348 /* compiled okay, so do it */
2350 CvDEPTH(compcv) = 1;
2351 SP = stack_base + POPMARK; /* pop original mark */
2352 op = saveop; /* The caller may need it. */
2354 MUTEX_LOCK(&eval_mutex);
2356 COND_SIGNAL(&eval_cond);
2357 MUTEX_UNLOCK(&eval_mutex);
2358 #endif /* USE_THREADS */
2360 RETURNOP(eval_start);
2366 register PERL_CONTEXT *cx;
2371 SV *namesv = Nullsv;
2373 I32 gimme = G_SCALAR;
2374 PerlIO *tryrsfp = 0;
2377 if (SvNIOKp(sv) && !SvPOKp(sv)) {
2378 SET_NUMERIC_STANDARD();
2379 if (atof(patchlevel) + 0.00000999 < SvNV(sv))
2380 DIE("Perl %s required--this is only version %s, stopped",
2381 SvPV(sv,na),patchlevel);
2384 name = SvPV(sv, len);
2385 if (!(name && len > 0 && *name))
2386 DIE("Null filename used");
2387 TAINT_PROPER("require");
2388 if (op->op_type == OP_REQUIRE &&
2389 (svp = hv_fetch(GvHVn(incgv), name, len, 0)) &&
2393 /* prepare to compile file */
2398 (name[1] == '.' && name[2] == '/')))
2400 || (name[0] && name[1] == ':')
2403 || (name[0] == '\\' && name[1] == '\\') /* UNC path */
2406 || (strchr(name,':') || ((*name == '[' || *name == '<') &&
2407 (isALNUM(name[1]) || strchr("$-_]>",name[1]))))
2412 tryrsfp = PerlIO_open(name,PERL_SCRIPT_MODE);
2415 AV *ar = GvAVn(incgv);
2419 if ((unixname = tounixspec(name, Nullch)) != Nullch)
2422 namesv = NEWSV(806, 0);
2423 for (i = 0; i <= AvFILL(ar); i++) {
2424 char *dir = SvPVx(*av_fetch(ar, i, TRUE), na);
2427 if ((unixdir = tounixpath(dir, Nullch)) == Nullch)
2429 sv_setpv(namesv, unixdir);
2430 sv_catpv(namesv, unixname);
2432 sv_setpvf(namesv, "%s/%s", dir, name);
2434 tryname = SvPVX(namesv);
2435 tryrsfp = PerlIO_open(tryname, PERL_SCRIPT_MODE);
2437 if (tryname[0] == '.' && tryname[1] == '/')
2444 SAVESPTR(compiling.cop_filegv);
2445 compiling.cop_filegv = gv_fetchfile(tryrsfp ? tryname : name);
2446 SvREFCNT_dec(namesv);
2448 if (op->op_type == OP_REQUIRE) {
2449 SV *msg = sv_2mortal(newSVpvf("Can't locate %s in @INC", name));
2450 SV *dirmsgsv = NEWSV(0, 0);
2451 AV *ar = GvAVn(incgv);
2453 if (instr(SvPVX(msg), ".h "))
2454 sv_catpv(msg, " (change .h to .ph maybe?)");
2455 if (instr(SvPVX(msg), ".ph "))
2456 sv_catpv(msg, " (did you run h2ph?)");
2457 sv_catpv(msg, " (@INC contains:");
2458 for (i = 0; i <= AvFILL(ar); i++) {
2459 char *dir = SvPVx(*av_fetch(ar, i, TRUE), na);
2460 sv_setpvf(dirmsgsv, " %s", dir);
2461 sv_catsv(msg, dirmsgsv);
2463 sv_catpvn(msg, ")", 1);
2464 SvREFCNT_dec(dirmsgsv);
2471 /* Assume success here to prevent recursive requirement. */
2472 (void)hv_store(GvHVn(incgv), name, strlen(name),
2473 newSVsv(GvSV(compiling.cop_filegv)), 0 );
2477 lex_start(sv_2mortal(newSVpv("",0)));
2479 save_aptr(&rsfp_filters);
2480 rsfp_filters = NULL;
2484 name = savepv(name);
2489 /* switch to eval mode */
2491 push_return(op->op_next);
2492 PUSHBLOCK(cx, CXt_EVAL, SP);
2493 PUSHEVAL(cx, name, compiling.cop_filegv);
2495 compiling.cop_line = 0;
2499 MUTEX_LOCK(&eval_mutex);
2500 if (eval_owner && eval_owner != thr)
2502 COND_WAIT(&eval_cond, &eval_mutex);
2504 MUTEX_UNLOCK(&eval_mutex);
2505 #endif /* USE_THREADS */
2506 return DOCATCH(doeval(G_SCALAR, NULL));
2511 return pp_require(ARGS);
2517 register PERL_CONTEXT *cx;
2519 I32 gimme = GIMME_V, was = sub_generation;
2520 char tmpbuf[TYPE_DIGITS(long) + 12];
2525 if (!SvPV(sv,len) || !len)
2527 TAINT_PROPER("eval");
2533 /* switch to eval mode */
2535 SAVESPTR(compiling.cop_filegv);
2536 sprintf(tmpbuf, "_<(eval %lu)", (unsigned long)++evalseq);
2537 compiling.cop_filegv = gv_fetchfile(tmpbuf+2);
2538 compiling.cop_line = 1;
2539 /* XXX For C<eval "...">s within BEGIN {} blocks, this ends up
2540 deleting the eval's FILEGV from the stash before gv_check() runs
2541 (i.e. before run-time proper). To work around the coredump that
2542 ensues, we always turn GvMULTI_on for any globals that were
2543 introduced within evals. See force_ident(). GSAR 96-10-12 */
2544 safestr = savepv(tmpbuf);
2545 SAVEDELETE(defstash, safestr, strlen(safestr));
2547 hints = op->op_targ;
2549 push_return(op->op_next);
2550 PUSHBLOCK(cx, CXt_EVAL, SP);
2551 PUSHEVAL(cx, 0, compiling.cop_filegv);
2553 /* prepare to compile string */
2555 if (PERLDB_LINE && curstash != debstash)
2556 save_lines(GvAV(compiling.cop_filegv), linestr);
2559 MUTEX_LOCK(&eval_mutex);
2560 if (eval_owner && eval_owner != thr)
2562 COND_WAIT(&eval_cond, &eval_mutex);
2564 MUTEX_UNLOCK(&eval_mutex);
2565 #endif /* USE_THREADS */
2566 ret = doeval(gimme, NULL);
2567 if (PERLDB_INTER && was != sub_generation /* Some subs defined here. */
2568 && ret != op->op_next) { /* Successive compilation. */
2569 strcpy(safestr, "_<(eval )"); /* Anything fake and short. */
2571 return DOCATCH(ret);
2581 register PERL_CONTEXT *cx;
2583 U8 save_flags = op -> op_flags;
2588 retop = pop_return();
2591 if (gimme == G_VOID)
2593 else if (gimme == G_SCALAR) {
2596 if (SvFLAGS(TOPs) & SVs_TEMP)
2599 *MARK = sv_mortalcopy(TOPs);
2607 /* in case LEAVE wipes old return values */
2608 for (mark = newsp + 1; mark <= SP; mark++) {
2609 if (!(SvFLAGS(*mark) & SVs_TEMP)) {
2610 *mark = sv_mortalcopy(*mark);
2611 TAINT_NOT; /* Each item is independent */
2615 curpm = newpm; /* Don't pop $1 et al till now */
2618 * Closures mentioned at top level of eval cannot be referenced
2619 * again, and their presence indirectly causes a memory leak.
2620 * (Note that the fact that compcv and friends are still set here
2621 * is, AFAIK, an accident.) --Chip
2623 if (AvFILLp(comppad_name) >= 0) {
2624 SV **svp = AvARRAY(comppad_name);
2626 for (ix = AvFILLp(comppad_name); ix >= 0; ix--) {
2628 if (sv && sv != &sv_undef && *SvPVX(sv) == '&') {
2630 svp[ix] = &sv_undef;
2634 SvREFCNT_dec(CvOUTSIDE(sv));
2635 CvOUTSIDE(sv) = Nullcv;
2648 assert(CvDEPTH(compcv) == 1);
2650 CvDEPTH(compcv) = 0;
2653 if (optype == OP_REQUIRE &&
2654 !(gimme == G_SCALAR ? SvTRUE(*SP) : SP > newsp))
2656 /* Unassume the success we assumed earlier. */
2657 char *name = cx->blk_eval.old_name;
2658 (void)hv_delete(GvHVn(incgv), name, strlen(name), G_DISCARD);
2659 retop = die("%s did not return a true value", name);
2660 /* die_where() did LEAVE, or we won't be here */
2664 if (!(save_flags & OPf_SPECIAL))
2674 register PERL_CONTEXT *cx;
2675 I32 gimme = GIMME_V;
2680 push_return(cLOGOP->op_other->op_next);
2681 PUSHBLOCK(cx, CXt_EVAL, SP);
2683 eval_root = op; /* Only needed so that goto works right. */
2688 return DOCATCH(op->op_next);
2698 register PERL_CONTEXT *cx;
2706 if (gimme == G_VOID)
2708 else if (gimme == G_SCALAR) {
2711 if (SvFLAGS(TOPs) & (SVs_PADTMP|SVs_TEMP))
2714 *MARK = sv_mortalcopy(TOPs);
2723 /* in case LEAVE wipes old return values */
2724 for (mark = newsp + 1; mark <= SP; mark++) {
2725 if (!(SvFLAGS(*mark) & (SVs_PADTMP|SVs_TEMP))) {
2726 *mark = sv_mortalcopy(*mark);
2727 TAINT_NOT; /* Each item is independent */
2731 curpm = newpm; /* Don't pop $1 et al till now */
2742 register char *s = SvPV_force(sv, len);
2743 register char *send = s + len;
2744 register char *base;
2745 register I32 skipspaces = 0;
2748 bool postspace = FALSE;
2756 croak("Null picture in formline");
2758 New(804, fops, (send - s)*3+10, U16); /* Almost certainly too long... */
2763 *fpc++ = FF_LINEMARK;
2764 noblank = repeat = FALSE;
2782 case ' ': case '\t':
2793 *fpc++ = FF_LITERAL;
2801 *fpc++ = skipspaces;
2805 *fpc++ = FF_NEWLINE;
2809 arg = fpc - linepc + 1;
2816 *fpc++ = FF_LINEMARK;
2817 noblank = repeat = FALSE;
2826 ischop = s[-1] == '^';
2832 arg = (s - base) - 1;
2834 *fpc++ = FF_LITERAL;
2843 *fpc++ = FF_LINEGLOB;
2845 else if (*s == '#' || (*s == '.' && s[1] == '#')) {
2846 arg = ischop ? 512 : 0;
2856 arg |= 256 + (s - f);
2858 *fpc++ = s - base; /* fieldsize for FETCH */
2859 *fpc++ = FF_DECIMAL;
2864 bool ismore = FALSE;
2867 while (*++s == '>') ;
2868 prespace = FF_SPACE;
2870 else if (*s == '|') {
2871 while (*++s == '|') ;
2872 prespace = FF_HALFSPACE;
2877 while (*++s == '<') ;
2880 if (*s == '.' && s[1] == '.' && s[2] == '.') {
2884 *fpc++ = s - base; /* fieldsize for FETCH */
2886 *fpc++ = ischop ? FF_CHECKCHOP : FF_CHECKNL;
2904 { /* need to jump to the next word */
2906 z = WORD_ALIGN - SvCUR(sv) % WORD_ALIGN;
2907 SvGROW(sv, SvCUR(sv) + z + arg * sizeof(U16) + 4);
2908 s = SvPVX(sv) + SvCUR(sv) + z;
2910 Copy(fops, s, arg, U16);
2912 sv_magic(sv, Nullsv, 'f', Nullch, 0);
2917 * The rest of this file was derived from source code contributed
2920 * NOTE: this code was derived from Tom Horsley's qsort replacement
2921 * and should not be confused with the original code.
2924 /* Copyright (C) Tom Horsley, 1997. All rights reserved.
2926 Permission granted to distribute under the same terms as perl which are
2929 This program is free software; you can redistribute it and/or modify
2930 it under the terms of either:
2932 a) the GNU General Public License as published by the Free
2933 Software Foundation; either version 1, or (at your option) any
2936 b) the "Artistic License" which comes with this Kit.
2938 Details on the perl license can be found in the perl source code which
2939 may be located via the www.perl.com web page.
2941 This is the most wonderfulest possible qsort I can come up with (and
2942 still be mostly portable) My (limited) tests indicate it consistently
2943 does about 20% fewer calls to compare than does the qsort in the Visual
2944 C++ library, other vendors may vary.
2946 Some of the ideas in here can be found in "Algorithms" by Sedgewick,
2947 others I invented myself (or more likely re-invented since they seemed
2948 pretty obvious once I watched the algorithm operate for a while).
2950 Most of this code was written while watching the Marlins sweep the Giants
2951 in the 1997 National League Playoffs - no Braves fans allowed to use this
2952 code (just kidding :-).
2954 I realize that if I wanted to be true to the perl tradition, the only
2955 comment in this file would be something like:
2957 ...they shuffled back towards the rear of the line. 'No, not at the
2958 rear!' the slave-driver shouted. 'Three files up. And stay there...
2960 However, I really needed to violate that tradition just so I could keep
2961 track of what happens myself, not to mention some poor fool trying to
2962 understand this years from now :-).
2965 /* ********************************************************** Configuration */
2967 #ifndef QSORT_ORDER_GUESS
2968 #define QSORT_ORDER_GUESS 2 /* Select doubling version of the netBSD trick */
2971 /* QSORT_MAX_STACK is the largest number of partitions that can be stacked up for
2972 future processing - a good max upper bound is log base 2 of memory size
2973 (32 on 32 bit machines, 64 on 64 bit machines, etc). In reality can
2974 safely be smaller than that since the program is taking up some space and
2975 most operating systems only let you grab some subset of contiguous
2976 memory (not to mention that you are normally sorting data larger than
2977 1 byte element size :-).
2979 #ifndef QSORT_MAX_STACK
2980 #define QSORT_MAX_STACK 32
2983 /* QSORT_BREAK_EVEN is the size of the largest partition we should insertion sort.
2984 Anything bigger and we use qsort. If you make this too small, the qsort
2985 will probably break (or become less efficient), because it doesn't expect
2986 the middle element of a partition to be the same as the right or left -
2987 you have been warned).
2989 #ifndef QSORT_BREAK_EVEN
2990 #define QSORT_BREAK_EVEN 6
2993 /* ************************************************************* Data Types */
2995 /* hold left and right index values of a partition waiting to be sorted (the
2996 partition includes both left and right - right is NOT one past the end or
2997 anything like that).
2999 struct partition_stack_entry {
3002 #ifdef QSORT_ORDER_GUESS
3003 int qsort_break_even;
3007 /* ******************************************************* Shorthand Macros */
3009 /* Note that these macros will be used from inside the qsort function where
3010 we happen to know that the variable 'elt_size' contains the size of an
3011 array element and the variable 'temp' points to enough space to hold a
3012 temp element and the variable 'array' points to the array being sorted
3013 and 'compare' is the pointer to the compare routine.
3015 Also note that there are very many highly architecture specific ways
3016 these might be sped up, but this is simply the most generally portable
3017 code I could think of.
3020 /* Return < 0 == 0 or > 0 as the value of elt1 is < elt2, == elt2, > elt2
3023 #define qsort_cmp(elt1, elt2) \
3024 ((this->*compare)(array[elt1], array[elt2]))
3026 #define qsort_cmp(elt1, elt2) \
3027 ((*compare)(array[elt1], array[elt2]))
3030 #ifdef QSORT_ORDER_GUESS
3031 #define QSORT_NOTICE_SWAP swapped++;
3033 #define QSORT_NOTICE_SWAP
3036 /* swaps contents of array elements elt1, elt2.
3038 #define qsort_swap(elt1, elt2) \
3041 temp = array[elt1]; \
3042 array[elt1] = array[elt2]; \
3043 array[elt2] = temp; \
3046 /* rotate contents of elt1, elt2, elt3 such that elt1 gets elt2, elt2 gets
3047 elt3 and elt3 gets elt1.
3049 #define qsort_rotate(elt1, elt2, elt3) \
3052 temp = array[elt1]; \
3053 array[elt1] = array[elt2]; \
3054 array[elt2] = array[elt3]; \
3055 array[elt3] = temp; \
3058 /* ************************************************************ Debug stuff */
3065 return; /* good place to set a breakpoint */
3068 #define qsort_assert(t) (void)( (t) || (break_here(), 0) )
3071 doqsort_all_asserts(
3075 int (*compare)(const void * elt1, const void * elt2),
3076 int pc_left, int pc_right, int u_left, int u_right)
3080 qsort_assert(pc_left <= pc_right);
3081 qsort_assert(u_right < pc_left);
3082 qsort_assert(pc_right < u_left);
3083 for (i = u_right + 1; i < pc_left; ++i) {
3084 qsort_assert(qsort_cmp(i, pc_left) < 0);
3086 for (i = pc_left; i < pc_right; ++i) {
3087 qsort_assert(qsort_cmp(i, pc_right) == 0);
3089 for (i = pc_right + 1; i < u_left; ++i) {
3090 qsort_assert(qsort_cmp(pc_right, i) < 0);
3094 #define qsort_all_asserts(PC_LEFT, PC_RIGHT, U_LEFT, U_RIGHT) \
3095 doqsort_all_asserts(array, num_elts, elt_size, compare, \
3096 PC_LEFT, PC_RIGHT, U_LEFT, U_RIGHT)
3100 #define qsort_assert(t) ((void)0)
3102 #define qsort_all_asserts(PC_LEFT, PC_RIGHT, U_LEFT, U_RIGHT) ((void)0)
3106 /* ****************************************************************** qsort */
3110 qsortsv(SV ** array, size_t num_elts, SVCOMPARE compare)
3115 I32 (*compare)(SV *a, SV *b))
3120 struct partition_stack_entry partition_stack[QSORT_MAX_STACK];
3121 int next_stack_entry = 0;
3125 #ifdef QSORT_ORDER_GUESS
3126 int qsort_break_even;
3130 /* Make sure we actually have work to do.
3132 if (num_elts <= 1) {
3136 /* Setup the initial partition definition and fall into the sorting loop
3139 part_right = (int)(num_elts - 1);
3140 #ifdef QSORT_ORDER_GUESS
3141 qsort_break_even = QSORT_BREAK_EVEN;
3143 #define qsort_break_even QSORT_BREAK_EVEN
3146 if ((part_right - part_left) >= qsort_break_even) {
3147 /* OK, this is gonna get hairy, so lets try to document all the
3148 concepts and abbreviations and variables and what they keep
3151 pc: pivot chunk - the set of array elements we accumulate in the
3152 middle of the partition, all equal in value to the original
3153 pivot element selected. The pc is defined by:
3155 pc_left - the leftmost array index of the pc
3156 pc_right - the rightmost array index of the pc
3158 we start with pc_left == pc_right and only one element
3159 in the pivot chunk (but it can grow during the scan).
3161 u: uncompared elements - the set of elements in the partition
3162 we have not yet compared to the pivot value. There are two
3163 uncompared sets during the scan - one to the left of the pc
3164 and one to the right.
3166 u_right - the rightmost index of the left side's uncompared set
3167 u_left - the leftmost index of the right side's uncompared set
3169 The leftmost index of the left sides's uncompared set
3170 doesn't need its own variable because it is always defined
3171 by the leftmost edge of the whole partition (part_left). The
3172 same goes for the rightmost edge of the right partition
3175 We know there are no uncompared elements on the left once we
3176 get u_right < part_left and no uncompared elements on the
3177 right once u_left > part_right. When both these conditions
3178 are met, we have completed the scan of the partition.
3180 Any elements which are between the pivot chunk and the
3181 uncompared elements should be less than the pivot value on
3182 the left side and greater than the pivot value on the right
3183 side (in fact, the goal of the whole algorithm is to arrange
3184 for that to be true and make the groups of less-than and
3185 greater-then elements into new partitions to sort again).
3187 As you marvel at the complexity of the code and wonder why it
3188 has to be so confusing. Consider some of the things this level
3189 of confusion brings:
3191 Once I do a compare, I squeeze every ounce of juice out of it. I
3192 never do compare calls I don't have to do, and I certainly never
3195 I also never swap any elements unless I can prove there is a
3196 good reason. Many sort algorithms will swap a known value with
3197 an uncompared value just to get things in the right place (or
3198 avoid complexity :-), but that uncompared value, once it gets
3199 compared, may then have to be swapped again. A lot of the
3200 complexity of this code is due to the fact that it never swaps
3201 anything except compared values, and it only swaps them when the
3202 compare shows they are out of position.
3204 int pc_left, pc_right;
3205 int u_right, u_left;
3209 pc_left = ((part_left + part_right) / 2);
3211 u_right = pc_left - 1;
3212 u_left = pc_right + 1;
3214 /* Qsort works best when the pivot value is also the median value
3215 in the partition (unfortunately you can't find the median value
3216 without first sorting :-), so to give the algorithm a helping
3217 hand, we pick 3 elements and sort them and use the median value
3218 of that tiny set as the pivot value.
3220 Some versions of qsort like to use the left middle and right as
3221 the 3 elements to sort so they can insure the ends of the
3222 partition will contain values which will stop the scan in the
3223 compare loop, but when you have to call an arbitrarily complex
3224 routine to do a compare, its really better to just keep track of
3225 array index values to know when you hit the edge of the
3226 partition and avoid the extra compare. An even better reason to
3227 avoid using a compare call is the fact that you can drop off the
3228 edge of the array if someone foolishly provides you with an
3229 unstable compare function that doesn't always provide consistent
3232 So, since it is simpler for us to compare the three adjacent
3233 elements in the middle of the partition, those are the ones we
3234 pick here (conveniently pointed at by u_right, pc_left, and
3235 u_left). The values of the left, center, and right elements
3236 are refered to as l c and r in the following comments.
3239 #ifdef QSORT_ORDER_GUESS
3242 s = qsort_cmp(u_right, pc_left);
3245 s = qsort_cmp(pc_left, u_left);
3246 /* if l < c, c < r - already in order - nothing to do */
3248 /* l < c, c == r - already in order, pc grows */
3250 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3252 /* l < c, c > r - need to know more */
3253 s = qsort_cmp(u_right, u_left);
3255 /* l < c, c > r, l < r - swap c & r to get ordered */
3256 qsort_swap(pc_left, u_left);
3257 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3258 } else if (s == 0) {
3259 /* l < c, c > r, l == r - swap c&r, grow pc */
3260 qsort_swap(pc_left, u_left);
3262 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3264 /* l < c, c > r, l > r - make lcr into rlc to get ordered */
3265 qsort_rotate(pc_left, u_right, u_left);
3266 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3269 } else if (s == 0) {
3271 s = qsort_cmp(pc_left, u_left);
3273 /* l == c, c < r - already in order, grow pc */
3275 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3276 } else if (s == 0) {
3277 /* l == c, c == r - already in order, grow pc both ways */
3280 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3282 /* l == c, c > r - swap l & r, grow pc */
3283 qsort_swap(u_right, u_left);
3285 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3289 s = qsort_cmp(pc_left, u_left);
3291 /* l > c, c < r - need to know more */
3292 s = qsort_cmp(u_right, u_left);
3294 /* l > c, c < r, l < r - swap l & c to get ordered */
3295 qsort_swap(u_right, pc_left);
3296 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3297 } else if (s == 0) {
3298 /* l > c, c < r, l == r - swap l & c, grow pc */
3299 qsort_swap(u_right, pc_left);
3301 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3303 /* l > c, c < r, l > r - rotate lcr into crl to order */
3304 qsort_rotate(u_right, pc_left, u_left);
3305 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3307 } else if (s == 0) {
3308 /* l > c, c == r - swap ends, grow pc */
3309 qsort_swap(u_right, u_left);
3311 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3313 /* l > c, c > r - swap ends to get in order */
3314 qsort_swap(u_right, u_left);
3315 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3318 /* We now know the 3 middle elements have been compared and
3319 arranged in the desired order, so we can shrink the uncompared
3324 qsort_all_asserts(pc_left, pc_right, u_left, u_right);
3326 /* The above massive nested if was the simple part :-). We now have
3327 the middle 3 elements ordered and we need to scan through the
3328 uncompared sets on either side, swapping elements that are on
3329 the wrong side or simply shuffling equal elements around to get
3330 all equal elements into the pivot chunk.
3334 int still_work_on_left;
3335 int still_work_on_right;
3337 /* Scan the uncompared values on the left. If I find a value
3338 equal to the pivot value, move it over so it is adjacent to
3339 the pivot chunk and expand the pivot chunk. If I find a value
3340 less than the pivot value, then just leave it - its already
3341 on the correct side of the partition. If I find a greater
3342 value, then stop the scan.
3344 while (still_work_on_left = (u_right >= part_left)) {
3345 s = qsort_cmp(u_right, pc_left);
3348 } else if (s == 0) {
3350 if (pc_left != u_right) {
3351 qsort_swap(u_right, pc_left);
3357 qsort_assert(u_right < pc_left);
3358 qsort_assert(pc_left <= pc_right);
3359 qsort_assert(qsort_cmp(u_right + 1, pc_left) <= 0);
3360 qsort_assert(qsort_cmp(pc_left, pc_right) == 0);
3363 /* Do a mirror image scan of uncompared values on the right
3365 while (still_work_on_right = (u_left <= part_right)) {
3366 s = qsort_cmp(pc_right, u_left);
3369 } else if (s == 0) {
3371 if (pc_right != u_left) {
3372 qsort_swap(pc_right, u_left);
3378 qsort_assert(u_left > pc_right);
3379 qsort_assert(pc_left <= pc_right);
3380 qsort_assert(qsort_cmp(pc_right, u_left - 1) <= 0);
3381 qsort_assert(qsort_cmp(pc_left, pc_right) == 0);
3384 if (still_work_on_left) {
3385 /* I know I have a value on the left side which needs to be
3386 on the right side, but I need to know more to decide
3387 exactly the best thing to do with it.
3389 if (still_work_on_right) {
3390 /* I know I have values on both side which are out of
3391 position. This is a big win because I kill two birds
3392 with one swap (so to speak). I can advance the
3393 uncompared pointers on both sides after swapping both
3394 of them into the right place.
3396 qsort_swap(u_right, u_left);
3399 qsort_all_asserts(pc_left, pc_right, u_left, u_right);
3401 /* I have an out of position value on the left, but the
3402 right is fully scanned, so I "slide" the pivot chunk
3403 and any less-than values left one to make room for the
3404 greater value over on the right. If the out of position
3405 value is immediately adjacent to the pivot chunk (there
3406 are no less-than values), I can do that with a swap,
3407 otherwise, I have to rotate one of the less than values
3408 into the former position of the out of position value
3409 and the right end of the pivot chunk into the left end
3413 if (pc_left == u_right) {
3414 qsort_swap(u_right, pc_right);
3415 qsort_all_asserts(pc_left, pc_right-1, u_left, u_right-1);
3417 qsort_rotate(u_right, pc_left, pc_right);
3418 qsort_all_asserts(pc_left, pc_right-1, u_left, u_right-1);
3423 } else if (still_work_on_right) {
3424 /* Mirror image of complex case above: I have an out of
3425 position value on the right, but the left is fully
3426 scanned, so I need to shuffle things around to make room
3427 for the right value on the left.
3430 if (pc_right == u_left) {
3431 qsort_swap(u_left, pc_left);
3432 qsort_all_asserts(pc_left+1, pc_right, u_left+1, u_right);
3434 qsort_rotate(pc_right, pc_left, u_left);
3435 qsort_all_asserts(pc_left+1, pc_right, u_left+1, u_right);
3440 /* No more scanning required on either side of partition,
3441 break out of loop and figure out next set of partitions
3447 /* The elements in the pivot chunk are now in the right place. They
3448 will never move or be compared again. All I have to do is decide
3449 what to do with the stuff to the left and right of the pivot
3452 Notes on the QSORT_ORDER_GUESS ifdef code:
3454 1. If I just built these partitions without swapping any (or
3455 very many) elements, there is a chance that the elements are
3456 already ordered properly (being properly ordered will
3457 certainly result in no swapping, but the converse can't be
3460 2. A (properly written) insertion sort will run faster on
3461 already ordered data than qsort will.
3463 3. Perhaps there is some way to make a good guess about
3464 switching to an insertion sort earlier than partition size 6
3465 (for instance - we could save the partition size on the stack
3466 and increase the size each time we find we didn't swap, thus
3467 switching to insertion sort earlier for partitions with a
3468 history of not swapping).
3470 4. Naturally, if I just switch right away, it will make
3471 artificial benchmarks with pure ascending (or descending)
3472 data look really good, but is that a good reason in general?
3476 #ifdef QSORT_ORDER_GUESS
3478 #if QSORT_ORDER_GUESS == 1
3479 qsort_break_even = (part_right - part_left) + 1;
3481 #if QSORT_ORDER_GUESS == 2
3482 qsort_break_even *= 2;
3484 #if QSORT_ORDER_GUESS == 3
3485 int prev_break = qsort_break_even;
3486 qsort_break_even *= qsort_break_even;
3487 if (qsort_break_even < prev_break) {
3488 qsort_break_even = (part_right - part_left) + 1;
3492 qsort_break_even = QSORT_BREAK_EVEN;
3496 if (part_left < pc_left) {
3497 /* There are elements on the left which need more processing.
3498 Check the right as well before deciding what to do.
3500 if (pc_right < part_right) {
3501 /* We have two partitions to be sorted. Stack the biggest one
3502 and process the smallest one on the next iteration. This
3503 minimizes the stack height by insuring that any additional
3504 stack entries must come from the smallest partition which
3505 (because it is smallest) will have the fewest
3506 opportunities to generate additional stack entries.
3508 if ((part_right - pc_right) > (pc_left - part_left)) {
3509 /* stack the right partition, process the left */
3510 partition_stack[next_stack_entry].left = pc_right + 1;
3511 partition_stack[next_stack_entry].right = part_right;
3512 #ifdef QSORT_ORDER_GUESS
3513 partition_stack[next_stack_entry].qsort_break_even = qsort_break_even;
3515 part_right = pc_left - 1;
3517 /* stack the left partition, process the right */
3518 partition_stack[next_stack_entry].left = part_left;
3519 partition_stack[next_stack_entry].right = pc_left - 1;
3520 #ifdef QSORT_ORDER_GUESS
3521 partition_stack[next_stack_entry].qsort_break_even = qsort_break_even;
3523 part_left = pc_right + 1;
3525 qsort_assert(next_stack_entry < QSORT_MAX_STACK);
3528 /* The elements on the left are the only remaining elements
3529 that need sorting, arrange for them to be processed as the
3532 part_right = pc_left - 1;
3534 } else if (pc_right < part_right) {
3535 /* There is only one chunk on the right to be sorted, make it
3536 the new partition and loop back around.
3538 part_left = pc_right + 1;
3540 /* This whole partition wound up in the pivot chunk, so
3541 we need to get a new partition off the stack.
3543 if (next_stack_entry == 0) {
3544 /* the stack is empty - we are done */
3548 part_left = partition_stack[next_stack_entry].left;
3549 part_right = partition_stack[next_stack_entry].right;
3550 #ifdef QSORT_ORDER_GUESS
3551 qsort_break_even = partition_stack[next_stack_entry].qsort_break_even;
3555 /* This partition is too small to fool with qsort complexity, just
3556 do an ordinary insertion sort to minimize overhead.
3559 /* Assume 1st element is in right place already, and start checking
3560 at 2nd element to see where it should be inserted.
3562 for (i = part_left + 1; i <= part_right; ++i) {
3564 /* Scan (backwards - just in case 'i' is already in right place)
3565 through the elements already sorted to see if the ith element
3566 belongs ahead of one of them.
3568 for (j = i - 1; j >= part_left; --j) {
3569 if (qsort_cmp(i, j) >= 0) {
3570 /* i belongs right after j
3577 /* Looks like we really need to move some things
3581 for (k = i - 1; k >= j; --k)
3582 array[k + 1] = array[k];
3587 /* That partition is now sorted, grab the next one, or get out
3588 of the loop if there aren't any more.
3591 if (next_stack_entry == 0) {
3592 /* the stack is empty - we are done */
3596 part_left = partition_stack[next_stack_entry].left;
3597 part_right = partition_stack[next_stack_entry].right;
3598 #ifdef QSORT_ORDER_GUESS
3599 qsort_break_even = partition_stack[next_stack_entry].qsort_break_even;
3604 /* Believe it or not, the array is sorted at this point! */