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 I32 dopoptosub_at _((PERL_CONTEXT *cxstk, I32 startingblock));
40 static void save_lines _((AV *array, SV *sv));
41 static I32 sortcv _((SV *a, SV *b));
42 static void qsortsv _((SV **array, size_t num_elts, I32 (*fun)(SV *a, SV *b)));
43 static OP *doeval _((int gimme, OP** startop));
52 cxix = dopoptosub(cxstack_ix);
56 switch (cxstack[cxix].blk_gimme) {
73 /* XXXX Should store the old value to allow for tie/overload - and
74 restore in regcomp, where marked with XXXX. */
82 register PMOP *pm = (PMOP*)cLOGOP->op_other;
86 MAGIC *mg = Null(MAGIC*);
90 SV *sv = SvRV(tmpstr);
92 mg = mg_find(sv, 'r');
95 regexp *re = (regexp *)mg->mg_obj;
96 ReREFCNT_dec(pm->op_pmregexp);
97 pm->op_pmregexp = ReREFCNT_inc(re);
100 t = SvPV(tmpstr, len);
102 /* Check against the last compiled regexp. */
103 if (!pm->op_pmregexp || !pm->op_pmregexp->precomp ||
104 pm->op_pmregexp->prelen != len ||
105 memNE(pm->op_pmregexp->precomp, t, len))
107 if (pm->op_pmregexp) {
108 ReREFCNT_dec(pm->op_pmregexp);
109 pm->op_pmregexp = Null(REGEXP*); /* crucial if regcomp aborts */
111 if (op->op_flags & OPf_SPECIAL)
112 reginterp_cnt = I32_MAX; /* Mark as safe. */
114 pm->op_pmflags = pm->op_pmpermflags; /* reset case sensitivity */
115 pm->op_pmregexp = CALLREGCOMP(t, t + len, pm);
116 reginterp_cnt = 0; /* XXXX Be extra paranoid - needed
117 inside tie/overload accessors. */
121 #ifndef INCOMPLETE_TAINTS
124 pm->op_pmdynflags |= PMdf_TAINTED;
126 pm->op_pmdynflags &= ~PMdf_TAINTED;
130 if (!pm->op_pmregexp->prelen && curpm)
132 else if (strEQ("\\s+", pm->op_pmregexp->precomp))
133 pm->op_pmflags |= PMf_WHITE;
135 if (pm->op_pmflags & PMf_KEEP) {
136 pm->op_private &= ~OPpRUNTIME; /* no point compiling again */
137 cLOGOP->op_first->op_next = op->op_next;
145 register PMOP *pm = (PMOP*) cLOGOP->op_other;
146 register PERL_CONTEXT *cx = &cxstack[cxstack_ix];
147 register SV *dstr = cx->sb_dstr;
148 register char *s = cx->sb_s;
149 register char *m = cx->sb_m;
150 char *orig = cx->sb_orig;
151 register REGEXP *rx = cx->sb_rx;
153 rxres_restore(&cx->sb_rxres, rx);
155 if (cx->sb_iters++) {
156 if (cx->sb_iters > cx->sb_maxiters)
157 DIE("Substitution loop");
159 if (!(cx->sb_rxtainted & 2) && SvTAINTED(TOPs))
160 cx->sb_rxtainted |= 2;
161 sv_catsv(dstr, POPs);
164 if (cx->sb_once || !CALLREGEXEC(rx, s, cx->sb_strend, orig,
165 s == m, Nullsv, NULL,
166 cx->sb_safebase ? 0 : REXEC_COPY_STR))
168 SV *targ = cx->sb_targ;
169 sv_catpvn(dstr, s, cx->sb_strend - s);
171 cx->sb_rxtainted |= RX_MATCH_TAINTED(rx);
173 (void)SvOOK_off(targ);
174 Safefree(SvPVX(targ));
175 SvPVX(targ) = SvPVX(dstr);
176 SvCUR_set(targ, SvCUR(dstr));
177 SvLEN_set(targ, SvLEN(dstr));
181 TAINT_IF(cx->sb_rxtainted & 1);
182 PUSHs(sv_2mortal(newSViv((I32)cx->sb_iters - 1)));
184 (void)SvPOK_only(targ);
185 TAINT_IF(cx->sb_rxtainted);
189 LEAVE_SCOPE(cx->sb_oldsave);
191 RETURNOP(pm->op_next);
194 if (rx->subbase && rx->subbase != orig) {
197 cx->sb_orig = orig = rx->subbase;
199 cx->sb_strend = s + (cx->sb_strend - m);
201 cx->sb_m = m = rx->startp[0];
202 sv_catpvn(dstr, s, m-s);
203 cx->sb_s = rx->endp[0];
204 cx->sb_rxtainted |= RX_MATCH_TAINTED(rx);
205 rxres_save(&cx->sb_rxres, rx);
206 RETURNOP(pm->op_pmreplstart);
210 rxres_save(void **rsp, REGEXP *rx)
215 if (!p || p[1] < rx->nparens) {
216 i = 6 + rx->nparens * 2;
224 *p++ = (UV)rx->subbase;
225 rx->subbase = Nullch;
229 *p++ = (UV)rx->subbeg;
230 *p++ = (UV)rx->subend;
231 for (i = 0; i <= rx->nparens; ++i) {
232 *p++ = (UV)rx->startp[i];
233 *p++ = (UV)rx->endp[i];
238 rxres_restore(void **rsp, REGEXP *rx)
243 Safefree(rx->subbase);
244 rx->subbase = (char*)(*p);
249 rx->subbeg = (char*)(*p++);
250 rx->subend = (char*)(*p++);
251 for (i = 0; i <= rx->nparens; ++i) {
252 rx->startp[i] = (char*)(*p++);
253 rx->endp[i] = (char*)(*p++);
258 rxres_free(void **rsp)
263 Safefree((char*)(*p));
271 djSP; dMARK; dORIGMARK;
272 register SV *tmpForm = *++MARK;
284 bool chopspace = (strchr(chopset, ' ') != Nullch);
291 if (!SvMAGICAL(tmpForm) || !SvCOMPILED(tmpForm)) {
292 SvREADONLY_off(tmpForm);
293 doparseform(tmpForm);
296 SvPV_force(formtarget, len);
297 t = SvGROW(formtarget, len + SvCUR(tmpForm) + 1); /* XXX SvCUR bad */
299 f = SvPV(tmpForm, len);
300 /* need to jump to the next word */
301 s = f + len + WORD_ALIGN - SvCUR(tmpForm) % WORD_ALIGN;
310 case FF_LITERAL: arg = fpc[1]; name = "LITERAL"; break;
311 case FF_BLANK: arg = fpc[1]; name = "BLANK"; break;
312 case FF_SKIP: arg = fpc[1]; name = "SKIP"; break;
313 case FF_FETCH: arg = fpc[1]; name = "FETCH"; break;
314 case FF_DECIMAL: arg = fpc[1]; name = "DECIMAL"; break;
316 case FF_CHECKNL: name = "CHECKNL"; break;
317 case FF_CHECKCHOP: name = "CHECKCHOP"; break;
318 case FF_SPACE: name = "SPACE"; break;
319 case FF_HALFSPACE: name = "HALFSPACE"; break;
320 case FF_ITEM: name = "ITEM"; break;
321 case FF_CHOP: name = "CHOP"; break;
322 case FF_LINEGLOB: name = "LINEGLOB"; break;
323 case FF_NEWLINE: name = "NEWLINE"; break;
324 case FF_MORE: name = "MORE"; break;
325 case FF_LINEMARK: name = "LINEMARK"; break;
326 case FF_END: name = "END"; break;
329 PerlIO_printf(PerlIO_stderr(), "%-16s%ld\n", name, (long) arg);
331 PerlIO_printf(PerlIO_stderr(), "%-16s\n", name);
360 warn("Not enough format arguments");
365 item = s = SvPV(sv, len);
367 if (itemsize > fieldsize)
368 itemsize = fieldsize;
369 send = chophere = s + itemsize;
381 item = s = SvPV(sv, len);
383 if (itemsize <= fieldsize) {
384 send = chophere = s + itemsize;
395 itemsize = fieldsize;
396 send = chophere = s + itemsize;
397 while (s < send || (s == send && isSPACE(*s))) {
407 if (strchr(chopset, *s))
412 itemsize = chophere - item;
417 arg = fieldsize - itemsize;
426 arg = fieldsize - itemsize;
440 int ch = *t++ = *s++;
444 if ( !((*t++ = *s++) & ~31) )
454 while (*s && isSPACE(*s))
461 item = s = SvPV(sv, len);
474 SvCUR_set(formtarget, t - SvPVX(formtarget));
475 sv_catpvn(formtarget, item, itemsize);
476 SvGROW(formtarget, SvCUR(formtarget) + SvCUR(tmpForm) + 1);
477 t = SvPVX(formtarget) + SvCUR(formtarget);
482 /* If the field is marked with ^ and the value is undefined,
485 if ((arg & 512) && !SvOK(sv)) {
493 /* Formats aren't yet marked for locales, so assume "yes". */
496 sprintf(t, "%#*.*f", (int) fieldsize, (int) arg & 255, value);
498 sprintf(t, "%*.0f", (int) fieldsize, value);
505 while (t-- > linemark && *t == ' ') ;
513 if (arg) { /* repeat until fields exhausted? */
515 SvCUR_set(formtarget, t - SvPVX(formtarget));
516 lines += FmLINES(formtarget);
519 if (strnEQ(linemark, linemark - arg, arg))
520 DIE("Runaway format");
522 FmLINES(formtarget) = lines;
524 RETURNOP(cLISTOP->op_first);
535 arg = fieldsize - itemsize;
542 if (strnEQ(s," ",3)) {
543 while (s > SvPVX(formtarget) && isSPACE(s[-1]))
554 SvCUR_set(formtarget, t - SvPVX(formtarget));
555 FmLINES(formtarget) += lines;
567 if (stack_base + *markstack_ptr == SP) {
569 if (GIMME_V == G_SCALAR)
571 RETURNOP(op->op_next->op_next);
573 stack_sp = stack_base + *markstack_ptr + 1;
574 pp_pushmark(ARGS); /* push dst */
575 pp_pushmark(ARGS); /* push src */
576 ENTER; /* enter outer scope */
580 /* SAVE_DEFSV does *not* suffice here */
581 save_sptr(&THREADSV(0));
583 SAVESPTR(GvSV(defgv));
584 #endif /* USE_THREADS */
585 ENTER; /* enter inner scope */
588 src = stack_base[*markstack_ptr];
593 if (op->op_type == OP_MAPSTART)
594 pp_pushmark(ARGS); /* push top */
595 return ((LOGOP*)op->op_next)->op_other;
600 DIE("panic: mapstart"); /* uses grepstart */
606 I32 diff = (SP - stack_base) - *markstack_ptr;
614 if (diff > markstack_ptr[-1] - markstack_ptr[-2]) {
615 shift = diff - (markstack_ptr[-1] - markstack_ptr[-2]);
616 count = (SP - stack_base) - markstack_ptr[-1] + 2;
621 markstack_ptr[-1] += shift;
622 *markstack_ptr += shift;
626 dst = stack_base + (markstack_ptr[-2] += diff) - 1;
629 *dst-- = SvTEMP(TOPs) ? POPs : sv_mortalcopy(POPs);
631 LEAVE; /* exit inner scope */
634 if (markstack_ptr[-1] > *markstack_ptr) {
638 (void)POPMARK; /* pop top */
639 LEAVE; /* exit outer scope */
640 (void)POPMARK; /* pop src */
641 items = --*markstack_ptr - markstack_ptr[-1];
642 (void)POPMARK; /* pop dst */
643 SP = stack_base + POPMARK; /* pop original mark */
644 if (gimme == G_SCALAR) {
648 else if (gimme == G_ARRAY)
655 ENTER; /* enter inner scope */
658 src = stack_base[markstack_ptr[-1]];
662 RETURNOP(cLOGOP->op_other);
668 djSP; dMARK; dORIGMARK;
670 SV **myorigmark = ORIGMARK;
676 OP* nextop = op->op_next;
678 if (gimme != G_ARRAY) {
685 if (op->op_flags & OPf_STACKED) {
686 if (op->op_flags & OPf_SPECIAL) {
687 OP *kid = cLISTOP->op_first->op_sibling; /* pass pushmark */
688 kid = kUNOP->op_first; /* pass rv2gv */
689 kid = kUNOP->op_first; /* pass leave */
690 sortcop = kid->op_next;
691 stash = curcop->cop_stash;
694 cv = sv_2cv(*++MARK, &stash, &gv, 0);
695 if (!(cv && CvROOT(cv))) {
697 SV *tmpstr = sv_newmortal();
698 gv_efullname3(tmpstr, gv, Nullch);
699 if (cv && CvXSUB(cv))
700 DIE("Xsub \"%s\" called in sort", SvPVX(tmpstr));
701 DIE("Undefined sort subroutine \"%s\" called",
706 DIE("Xsub called in sort");
707 DIE("Undefined subroutine in sort");
709 DIE("Not a CODE reference in sort");
711 sortcop = CvSTART(cv);
712 SAVESPTR(CvROOT(cv)->op_ppaddr);
713 CvROOT(cv)->op_ppaddr = ppaddr[OP_NULL];
716 curpad = AvARRAY((AV*)AvARRAY(CvPADLIST(cv))[1]);
721 stash = curcop->cop_stash;
725 while (MARK < SP) { /* This may or may not shift down one here. */
727 if (*up = *++MARK) { /* Weed out nulls. */
729 if (!sortcop && !SvPOK(*up))
730 (void)sv_2pv(*up, &na);
734 max = --up - myorigmark;
739 bool oldcatch = CATCH_GET;
745 PUSHSTACKi(PERLSI_SORT);
746 if (sortstash != stash) {
747 firstgv = gv_fetchpv("a", TRUE, SVt_PV);
748 secondgv = gv_fetchpv("b", TRUE, SVt_PV);
752 SAVESPTR(GvSV(firstgv));
753 SAVESPTR(GvSV(secondgv));
755 PUSHBLOCK(cx, CXt_NULL, stack_base);
756 if (!(op->op_flags & OPf_SPECIAL)) {
757 bool hasargs = FALSE;
758 cx->cx_type = CXt_SUB;
759 cx->blk_gimme = G_SCALAR;
762 (void)SvREFCNT_inc(cv); /* in preparation for POPSUB */
764 sortcxix = cxstack_ix;
765 qsortsv((myorigmark+1), max, FUNC_NAME_TO_PTR(sortcv));
774 MEXTEND(SP, 20); /* Can't afford stack realloc on signal. */
775 qsortsv(ORIGMARK+1, max,
776 (op->op_private & OPpLOCALE)
777 ? FUNC_NAME_TO_PTR(sv_cmp_locale)
778 : FUNC_NAME_TO_PTR(sv_cmp));
782 stack_sp = ORIGMARK + max;
790 if (GIMME == G_ARRAY)
791 return cCONDOP->op_true;
792 return SvTRUEx(PAD_SV(op->op_targ)) ? cCONDOP->op_false : cCONDOP->op_true;
799 if (GIMME == G_ARRAY) {
800 RETURNOP(((CONDOP*)cUNOP->op_first)->op_false);
804 SV *targ = PAD_SV(op->op_targ);
806 if ((op->op_private & OPpFLIP_LINENUM)
807 ? last_in_gv && SvIV(sv) == IoLINES(GvIOp(last_in_gv))
809 sv_setiv(PAD_SV(cUNOP->op_first->op_targ), 1);
810 if (op->op_flags & OPf_SPECIAL) {
818 RETURNOP(((CONDOP*)cUNOP->op_first)->op_false);
831 if (GIMME == G_ARRAY) {
837 if (SvNIOKp(left) || !SvPOKp(left) ||
838 (looks_like_number(left) && *SvPVX(left) != '0') )
840 if (SvNV(left) < IV_MIN || SvNV(right) >= IV_MAX)
841 croak("Range iterator outside integer range");
845 EXTEND_MORTAL(max - i + 1);
846 EXTEND(SP, max - i + 1);
849 sv = sv_2mortal(newSViv(i++));
854 SV *final = sv_mortalcopy(right);
856 char *tmps = SvPV(final, len);
858 sv = sv_mortalcopy(left);
859 while (!SvNIOKp(sv) && SvCUR(sv) <= len) {
861 if (strEQ(SvPVX(sv),tmps))
863 sv = sv_2mortal(newSVsv(sv));
870 SV *targ = PAD_SV(cUNOP->op_first->op_targ);
872 if ((op->op_private & OPpFLIP_LINENUM)
873 ? last_in_gv && SvIV(sv) == IoLINES(GvIOp(last_in_gv))
875 sv_setiv(PAD_SV(((UNOP*)cUNOP->op_first)->op_first->op_targ), 0);
876 sv_catpv(targ, "E0");
887 dopoptolabel(char *label)
891 register PERL_CONTEXT *cx;
893 for (i = cxstack_ix; i >= 0; i--) {
895 switch (cx->cx_type) {
898 warn("Exiting substitution via %s", op_name[op->op_type]);
902 warn("Exiting subroutine via %s", op_name[op->op_type]);
906 warn("Exiting eval via %s", op_name[op->op_type]);
910 warn("Exiting pseudo-block via %s", op_name[op->op_type]);
913 if (!cx->blk_loop.label ||
914 strNE(label, cx->blk_loop.label) ) {
915 DEBUG_l(deb("(Skipping label #%ld %s)\n",
916 (long)i, cx->blk_loop.label));
919 DEBUG_l( deb("(Found label #%ld %s)\n", (long)i, label));
929 I32 gimme = block_gimme();
930 return (gimme == G_VOID) ? G_SCALAR : gimme;
939 cxix = dopoptosub(cxstack_ix);
943 switch (cxstack[cxix].blk_gimme) {
951 croak("panic: bad gimme: %d\n", cxstack[cxix].blk_gimme);
958 dopoptosub(I32 startingblock)
961 return dopoptosub_at(cxstack, startingblock);
965 dopoptosub_at(PERL_CONTEXT *cxstk, I32 startingblock)
969 register PERL_CONTEXT *cx;
970 for (i = startingblock; i >= 0; i--) {
972 switch (cx->cx_type) {
977 DEBUG_l( deb("(Found sub #%ld)\n", (long)i));
985 dopoptoeval(I32 startingblock)
989 register PERL_CONTEXT *cx;
990 for (i = startingblock; i >= 0; i--) {
992 switch (cx->cx_type) {
996 DEBUG_l( deb("(Found eval #%ld)\n", (long)i));
1004 dopoptoloop(I32 startingblock)
1008 register PERL_CONTEXT *cx;
1009 for (i = startingblock; i >= 0; i--) {
1011 switch (cx->cx_type) {
1014 warn("Exiting substitution via %s", op_name[op->op_type]);
1018 warn("Exiting subroutine via %s", op_name[op->op_type]);
1022 warn("Exiting eval via %s", op_name[op->op_type]);
1026 warn("Exiting pseudo-block via %s", op_name[op->op_type]);
1029 DEBUG_l( deb("(Found loop #%ld)\n", (long)i));
1040 register PERL_CONTEXT *cx;
1044 while (cxstack_ix > cxix) {
1045 cx = &cxstack[cxstack_ix];
1046 DEBUG_l(PerlIO_printf(Perl_debug_log, "Unwinding block %ld, type %s\n",
1047 (long) cxstack_ix, block_type[cx->cx_type]));
1048 /* Note: we don't need to restore the base context info till the end. */
1049 switch (cx->cx_type) {
1052 continue; /* not break */
1070 die_where(char *message)
1075 register PERL_CONTEXT *cx;
1082 STRLEN klen = strlen(message);
1084 svp = hv_fetch(ERRHV, message, klen, TRUE);
1087 static char prefix[] = "\t(in cleanup) ";
1089 sv_upgrade(*svp, SVt_IV);
1090 (void)SvIOK_only(*svp);
1093 SvGROW(err, SvCUR(err)+sizeof(prefix)+klen);
1094 sv_catpvn(err, prefix, sizeof(prefix)-1);
1095 sv_catpvn(err, message, klen);
1101 sv_setpv(ERRSV, message);
1104 message = SvPVx(ERRSV, na);
1106 while ((cxix = dopoptoeval(cxstack_ix)) < 0 && curstackinfo->si_prev) {
1114 if (cxix < cxstack_ix)
1118 if (cx->cx_type != CXt_EVAL) {
1119 PerlIO_printf(PerlIO_stderr(), "panic: die %s", message);
1124 if (gimme == G_SCALAR)
1125 *++newsp = &sv_undef;
1130 if (optype == OP_REQUIRE) {
1131 char* msg = SvPVx(ERRSV, na);
1132 DIE("%s", *msg ? msg : "Compilation failed in require");
1134 return pop_return();
1137 PerlIO_printf(PerlIO_stderr(), "%s",message);
1138 PerlIO_flush(PerlIO_stderr());
1147 if (SvTRUE(left) != SvTRUE(right))
1159 RETURNOP(cLOGOP->op_other);
1168 RETURNOP(cLOGOP->op_other);
1174 register I32 cxix = dopoptosub(cxstack_ix);
1175 register PERL_CONTEXT *cx;
1176 register PERL_CONTEXT *ccstack = cxstack;
1177 PERL_SI *top_si = curstackinfo;
1188 /* we may be in a higher stacklevel, so dig down deeper */
1189 while (cxix < 0 && top_si->si_type != PERLSI_MAIN) {
1190 top_si = top_si->si_prev;
1191 ccstack = top_si->si_cxstack;
1192 cxix = dopoptosub_at(ccstack, top_si->si_cxix);
1195 if (GIMME != G_ARRAY)
1199 if (DBsub && cxix >= 0 &&
1200 ccstack[cxix].blk_sub.cv == GvCV(DBsub))
1204 cxix = dopoptosub_at(ccstack, cxix - 1);
1207 cx = &ccstack[cxix];
1208 if (ccstack[cxix].cx_type == CXt_SUB) {
1209 dbcxix = dopoptosub_at(ccstack, cxix - 1);
1210 /* We expect that ccstack[dbcxix] is CXt_SUB, anyway, the
1211 field below is defined for any cx. */
1212 if (DBsub && dbcxix >= 0 && ccstack[dbcxix].blk_sub.cv == GvCV(DBsub))
1213 cx = &ccstack[dbcxix];
1216 if (GIMME != G_ARRAY) {
1217 hv = cx->blk_oldcop->cop_stash;
1222 sv_setpv(TARG, HvNAME(hv));
1228 hv = cx->blk_oldcop->cop_stash;
1232 PUSHs(sv_2mortal(newSVpv(HvNAME(hv), 0)));
1233 PUSHs(sv_2mortal(newSVpv(SvPVX(GvSV(cx->blk_oldcop->cop_filegv)), 0)));
1234 PUSHs(sv_2mortal(newSViv((I32)cx->blk_oldcop->cop_line)));
1237 if (cx->cx_type == CXt_SUB) { /* So is ccstack[dbcxix]. */
1239 gv_efullname3(sv, CvGV(ccstack[cxix].blk_sub.cv), Nullch);
1240 PUSHs(sv_2mortal(sv));
1241 PUSHs(sv_2mortal(newSViv((I32)cx->blk_sub.hasargs)));
1244 PUSHs(sv_2mortal(newSVpv("(eval)",0)));
1245 PUSHs(sv_2mortal(newSViv(0)));
1247 gimme = (I32)cx->blk_gimme;
1248 if (gimme == G_VOID)
1251 PUSHs(sv_2mortal(newSViv(gimme & G_ARRAY)));
1252 if (cx->cx_type == CXt_EVAL) {
1253 if (cx->blk_eval.old_op_type == OP_ENTEREVAL) {
1254 PUSHs(cx->blk_eval.cur_text);
1257 else if (cx->blk_eval.old_name) { /* Try blocks have old_name == 0. */
1258 /* Require, put the name. */
1259 PUSHs(sv_2mortal(newSVpv(cx->blk_eval.old_name, 0)));
1263 else if (cx->cx_type == CXt_SUB &&
1264 cx->blk_sub.hasargs &&
1265 curcop->cop_stash == debstash)
1267 AV *ary = cx->blk_sub.argarray;
1268 int off = AvARRAY(ary) - AvALLOC(ary);
1272 dbargs = GvAV(gv_AVadd(tmpgv = gv_fetchpv("DB::args", TRUE,
1275 AvREAL_off(dbargs); /* XXX Should be REIFY */
1278 if (AvMAX(dbargs) < AvFILLp(ary) + off)
1279 av_extend(dbargs, AvFILLp(ary) + off);
1280 Copy(AvALLOC(ary), AvARRAY(dbargs), AvFILLp(ary) + 1 + off, SV*);
1281 AvFILLp(dbargs) = AvFILLp(ary) + off;
1287 sortcv(SV *a, SV *b)
1290 I32 oldsaveix = savestack_ix;
1291 I32 oldscopeix = scopestack_ix;
1295 stack_sp = stack_base;
1298 if (stack_sp != stack_base + 1)
1299 croak("Sort subroutine didn't return single value");
1300 if (!SvNIOKp(*stack_sp))
1301 croak("Sort subroutine didn't return a numeric value");
1302 result = SvIV(*stack_sp);
1303 while (scopestack_ix > oldscopeix) {
1306 leave_scope(oldsaveix);
1319 sv_reset(tmps, curcop->cop_stash);
1332 TAINT_NOT; /* Each statement is presumed innocent */
1333 stack_sp = stack_base + cxstack[cxstack_ix].blk_oldsp;
1336 if (op->op_private || SvIV(DBsingle) || SvIV(DBsignal) || SvIV(DBtrace))
1340 register PERL_CONTEXT *cx;
1341 I32 gimme = G_ARRAY;
1348 DIE("No DB::DB routine defined");
1350 if (CvDEPTH(cv) >= 1 && !(debug & (1<<30))) /* don't do recursive DB::DB call */
1362 push_return(op->op_next);
1363 PUSHBLOCK(cx, CXt_SUB, SP);
1366 (void)SvREFCNT_inc(cv);
1368 curpad = AvARRAY((AV*)*av_fetch(CvPADLIST(cv),1,FALSE));
1369 RETURNOP(CvSTART(cv));
1383 register PERL_CONTEXT *cx;
1384 I32 gimme = GIMME_V;
1391 if (op->op_flags & OPf_SPECIAL)
1392 svp = save_threadsv(op->op_targ); /* per-thread variable */
1394 #endif /* USE_THREADS */
1396 svp = &curpad[op->op_targ]; /* "my" variable */
1401 (void)save_scalar(gv);
1402 svp = &GvSV(gv); /* symbol table variable */
1407 PUSHBLOCK(cx, CXt_LOOP, SP);
1408 PUSHLOOP(cx, svp, MARK);
1409 if (op->op_flags & OPf_STACKED) {
1410 cx->blk_loop.iterary = (AV*)SvREFCNT_inc(POPs);
1411 if (SvTYPE(cx->blk_loop.iterary) != SVt_PVAV) {
1413 if (SvNIOKp(sv) || !SvPOKp(sv) ||
1414 (looks_like_number(sv) && *SvPVX(sv) != '0')) {
1415 if (SvNV(sv) < IV_MIN ||
1416 SvNV((SV*)cx->blk_loop.iterary) >= IV_MAX)
1417 croak("Range iterator outside integer range");
1418 cx->blk_loop.iterix = SvIV(sv);
1419 cx->blk_loop.itermax = SvIV((SV*)cx->blk_loop.iterary);
1422 cx->blk_loop.iterlval = newSVsv(sv);
1426 cx->blk_loop.iterary = curstack;
1427 AvFILLp(curstack) = SP - stack_base;
1428 cx->blk_loop.iterix = MARK - stack_base;
1437 register PERL_CONTEXT *cx;
1438 I32 gimme = GIMME_V;
1444 PUSHBLOCK(cx, CXt_LOOP, SP);
1445 PUSHLOOP(cx, 0, SP);
1453 register PERL_CONTEXT *cx;
1454 struct block_loop cxloop;
1462 POPLOOP1(cx); /* Delay POPLOOP2 until stack values are safe */
1465 if (gimme == G_VOID)
1467 else if (gimme == G_SCALAR) {
1469 *++newsp = sv_mortalcopy(*SP);
1471 *++newsp = &sv_undef;
1475 *++newsp = sv_mortalcopy(*++mark);
1476 TAINT_NOT; /* Each item is independent */
1482 POPLOOP2(); /* Stack values are safe: release loop vars ... */
1483 curpm = newpm; /* ... and pop $1 et al */
1495 register PERL_CONTEXT *cx;
1496 struct block_sub cxsub;
1497 bool popsub2 = FALSE;
1503 if (curstackinfo->si_type == PERLSI_SORT) {
1504 if (cxstack_ix == sortcxix || dopoptosub(cxstack_ix) <= sortcxix) {
1505 if (cxstack_ix > sortcxix)
1507 AvARRAY(curstack)[1] = *SP;
1508 stack_sp = stack_base + 1;
1513 cxix = dopoptosub(cxstack_ix);
1515 DIE("Can't return outside a subroutine");
1516 if (cxix < cxstack_ix)
1520 switch (cx->cx_type) {
1522 POPSUB1(cx); /* Delay POPSUB2 until stack values are safe */
1527 if (optype == OP_REQUIRE &&
1528 (MARK == SP || (gimme == G_SCALAR && !SvTRUE(*SP))) )
1530 /* Unassume the success we assumed earlier. */
1531 char *name = cx->blk_eval.old_name;
1532 (void)hv_delete(GvHVn(incgv), name, strlen(name), G_DISCARD);
1533 DIE("%s did not return a true value", name);
1537 DIE("panic: return");
1541 if (gimme == G_SCALAR) {
1544 if (cxsub.cv && CvDEPTH(cxsub.cv) > 1) {
1546 *++newsp = SvREFCNT_inc(*SP);
1551 *++newsp = sv_mortalcopy(*SP);
1554 *++newsp = (SvTEMP(*SP)) ? *SP : sv_mortalcopy(*SP);
1556 *++newsp = sv_mortalcopy(*SP);
1558 *++newsp = &sv_undef;
1560 else if (gimme == G_ARRAY) {
1561 while (++MARK <= SP) {
1562 *++newsp = (popsub2 && SvTEMP(*MARK))
1563 ? *MARK : sv_mortalcopy(*MARK);
1564 TAINT_NOT; /* Each item is independent */
1569 /* Stack values are safe: */
1571 POPSUB2(); /* release CV and @_ ... */
1573 curpm = newpm; /* ... and pop $1 et al */
1576 return pop_return();
1583 register PERL_CONTEXT *cx;
1584 struct block_loop cxloop;
1585 struct block_sub cxsub;
1592 SV **mark = stack_base + cxstack[cxstack_ix].blk_oldsp;
1594 if (op->op_flags & OPf_SPECIAL) {
1595 cxix = dopoptoloop(cxstack_ix);
1597 DIE("Can't \"last\" outside a block");
1600 cxix = dopoptolabel(cPVOP->op_pv);
1602 DIE("Label not found for \"last %s\"", cPVOP->op_pv);
1604 if (cxix < cxstack_ix)
1608 switch (cx->cx_type) {
1610 POPLOOP1(cx); /* Delay POPLOOP2 until stack values are safe */
1612 nextop = cxloop.last_op->op_next;
1615 POPSUB1(cx); /* Delay POPSUB2 until stack values are safe */
1617 nextop = pop_return();
1621 nextop = pop_return();
1628 if (gimme == G_SCALAR) {
1630 *++newsp = ((pop2 == CXt_SUB) && SvTEMP(*SP))
1631 ? *SP : sv_mortalcopy(*SP);
1633 *++newsp = &sv_undef;
1635 else if (gimme == G_ARRAY) {
1636 while (++MARK <= SP) {
1637 *++newsp = ((pop2 == CXt_SUB) && SvTEMP(*MARK))
1638 ? *MARK : sv_mortalcopy(*MARK);
1639 TAINT_NOT; /* Each item is independent */
1645 /* Stack values are safe: */
1648 POPLOOP2(); /* release loop vars ... */
1652 POPSUB2(); /* release CV and @_ ... */
1655 curpm = newpm; /* ... and pop $1 et al */
1664 register PERL_CONTEXT *cx;
1667 if (op->op_flags & OPf_SPECIAL) {
1668 cxix = dopoptoloop(cxstack_ix);
1670 DIE("Can't \"next\" outside a block");
1673 cxix = dopoptolabel(cPVOP->op_pv);
1675 DIE("Label not found for \"next %s\"", cPVOP->op_pv);
1677 if (cxix < cxstack_ix)
1681 oldsave = scopestack[scopestack_ix - 1];
1682 LEAVE_SCOPE(oldsave);
1683 return cx->blk_loop.next_op;
1689 register PERL_CONTEXT *cx;
1692 if (op->op_flags & OPf_SPECIAL) {
1693 cxix = dopoptoloop(cxstack_ix);
1695 DIE("Can't \"redo\" outside a block");
1698 cxix = dopoptolabel(cPVOP->op_pv);
1700 DIE("Label not found for \"redo %s\"", cPVOP->op_pv);
1702 if (cxix < cxstack_ix)
1706 oldsave = scopestack[scopestack_ix - 1];
1707 LEAVE_SCOPE(oldsave);
1708 return cx->blk_loop.redo_op;
1712 dofindlabel(OP *o, char *label, OP **opstack, OP **oplimit)
1716 static char too_deep[] = "Target of goto is too deeply nested";
1720 if (o->op_type == OP_LEAVE ||
1721 o->op_type == OP_SCOPE ||
1722 o->op_type == OP_LEAVELOOP ||
1723 o->op_type == OP_LEAVETRY)
1725 *ops++ = cUNOPo->op_first;
1730 if (o->op_flags & OPf_KIDS) {
1731 /* First try all the kids at this level, since that's likeliest. */
1732 for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling) {
1733 if ((kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) &&
1734 kCOP->cop_label && strEQ(kCOP->cop_label, label))
1737 for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling) {
1738 if (kid == lastgotoprobe)
1740 if ((kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) &&
1742 (ops[-1]->op_type != OP_NEXTSTATE &&
1743 ops[-1]->op_type != OP_DBSTATE)))
1745 if (o = dofindlabel(kid, label, ops, oplimit))
1755 return pp_goto(ARGS);
1764 register PERL_CONTEXT *cx;
1765 #define GOTO_DEPTH 64
1766 OP *enterops[GOTO_DEPTH];
1768 int do_dump = (op->op_type == OP_DUMP);
1771 if (op->op_flags & OPf_STACKED) {
1774 /* This egregious kludge implements goto &subroutine */
1775 if (SvROK(sv) && SvTYPE(SvRV(sv)) == SVt_PVCV) {
1777 register PERL_CONTEXT *cx;
1778 CV* cv = (CV*)SvRV(sv);
1783 if (!CvROOT(cv) && !CvXSUB(cv)) {
1785 SV *tmpstr = sv_newmortal();
1786 gv_efullname3(tmpstr, CvGV(cv), Nullch);
1787 DIE("Goto undefined subroutine &%s",SvPVX(tmpstr));
1789 DIE("Goto undefined subroutine");
1792 /* First do some returnish stuff. */
1793 cxix = dopoptosub(cxstack_ix);
1795 DIE("Can't goto subroutine outside a subroutine");
1796 if (cxix < cxstack_ix)
1799 if (cx->cx_type == CXt_EVAL && cx->blk_eval.old_op_type == OP_ENTEREVAL)
1800 DIE("Can't goto subroutine from an eval-string");
1802 if (cx->cx_type == CXt_SUB &&
1803 cx->blk_sub.hasargs) { /* put @_ back onto stack */
1804 AV* av = cx->blk_sub.argarray;
1806 items = AvFILLp(av) + 1;
1808 EXTEND(stack_sp, items); /* @_ could have been extended. */
1809 Copy(AvARRAY(av), stack_sp, items, SV*);
1812 SvREFCNT_dec(GvAV(defgv));
1813 GvAV(defgv) = cx->blk_sub.savearray;
1814 #endif /* USE_THREADS */
1818 else if (CvXSUB(cv)) { /* put GvAV(defgv) back onto stack */
1822 av = (AV*)curpad[0];
1826 items = AvFILLp(av) + 1;
1828 EXTEND(stack_sp, items); /* @_ could have been extended. */
1829 Copy(AvARRAY(av), stack_sp, items, SV*);
1832 if (cx->cx_type == CXt_SUB &&
1833 !(CvDEPTH(cx->blk_sub.cv) = cx->blk_sub.olddepth))
1834 SvREFCNT_dec(cx->blk_sub.cv);
1835 oldsave = scopestack[scopestack_ix - 1];
1836 LEAVE_SCOPE(oldsave);
1838 /* Now do some callish stuff. */
1841 if (CvOLDSTYLE(cv)) {
1842 I32 (*fp3)_((int,int,int));
1847 fp3 = (I32(*)_((int,int,int)))CvXSUB(cv);
1848 items = (*fp3)(CvXSUBANY(cv).any_i32,
1849 mark - stack_base + 1,
1851 SP = stack_base + items;
1857 stack_sp--; /* There is no cv arg. */
1858 /* Push a mark for the start of arglist */
1860 (void)(*CvXSUB(cv))(cv _PERL_OBJECT_THIS);
1861 /* Pop the current context like a decent sub should */
1862 POPBLOCK(cx, curpm);
1863 /* Do _not_ use PUTBACK, keep the XSUB's return stack! */
1866 return pop_return();
1869 AV* padlist = CvPADLIST(cv);
1870 SV** svp = AvARRAY(padlist);
1871 if (cx->cx_type == CXt_EVAL) {
1872 in_eval = cx->blk_eval.old_in_eval;
1873 eval_root = cx->blk_eval.old_eval_root;
1874 cx->cx_type = CXt_SUB;
1875 cx->blk_sub.hasargs = 0;
1877 cx->blk_sub.cv = cv;
1878 cx->blk_sub.olddepth = CvDEPTH(cv);
1880 if (CvDEPTH(cv) < 2)
1881 (void)SvREFCNT_inc(cv);
1882 else { /* save temporaries on recursion? */
1883 if (CvDEPTH(cv) == 100 && dowarn)
1884 sub_crush_depth(cv);
1885 if (CvDEPTH(cv) > AvFILLp(padlist)) {
1886 AV *newpad = newAV();
1887 SV **oldpad = AvARRAY(svp[CvDEPTH(cv)-1]);
1888 I32 ix = AvFILLp((AV*)svp[1]);
1889 svp = AvARRAY(svp[0]);
1890 for ( ;ix > 0; ix--) {
1891 if (svp[ix] != &sv_undef) {
1892 char *name = SvPVX(svp[ix]);
1893 if ((SvFLAGS(svp[ix]) & SVf_FAKE)
1896 /* outer lexical or anon code */
1897 av_store(newpad, ix,
1898 SvREFCNT_inc(oldpad[ix]) );
1900 else { /* our own lexical */
1902 av_store(newpad, ix, sv = (SV*)newAV());
1903 else if (*name == '%')
1904 av_store(newpad, ix, sv = (SV*)newHV());
1906 av_store(newpad, ix, sv = NEWSV(0,0));
1911 av_store(newpad, ix, sv = NEWSV(0,0));
1915 if (cx->blk_sub.hasargs) {
1918 av_store(newpad, 0, (SV*)av);
1919 AvFLAGS(av) = AVf_REIFY;
1921 av_store(padlist, CvDEPTH(cv), (SV*)newpad);
1922 AvFILLp(padlist) = CvDEPTH(cv);
1923 svp = AvARRAY(padlist);
1927 if (!cx->blk_sub.hasargs) {
1928 AV* av = (AV*)curpad[0];
1930 items = AvFILLp(av) + 1;
1932 /* Mark is at the end of the stack. */
1934 Copy(AvARRAY(av), SP + 1, items, SV*);
1939 #endif /* USE_THREADS */
1941 curpad = AvARRAY((AV*)svp[CvDEPTH(cv)]);
1943 if (cx->blk_sub.hasargs)
1944 #endif /* USE_THREADS */
1946 AV* av = (AV*)curpad[0];
1950 cx->blk_sub.savearray = GvAV(defgv);
1951 GvAV(defgv) = (AV*)SvREFCNT_inc(av);
1952 #endif /* USE_THREADS */
1953 cx->blk_sub.argarray = av;
1956 if (items >= AvMAX(av) + 1) {
1958 if (AvARRAY(av) != ary) {
1959 AvMAX(av) += AvARRAY(av) - AvALLOC(av);
1960 SvPVX(av) = (char*)ary;
1962 if (items >= AvMAX(av) + 1) {
1963 AvMAX(av) = items - 1;
1964 Renew(ary,items+1,SV*);
1966 SvPVX(av) = (char*)ary;
1969 Copy(mark,AvARRAY(av),items,SV*);
1970 AvFILLp(av) = items - 1;
1978 if (PERLDB_SUB) { /* Checking curstash breaks DProf. */
1980 * We do not care about using sv to call CV;
1981 * it's for informational purposes only.
1983 SV *sv = GvSV(DBsub);
1986 if (PERLDB_SUB_NN) {
1987 SvIVX(sv) = (IV)cv; /* Already upgraded, saved */
1990 gv_efullname3(sv, CvGV(cv), Nullch);
1993 && (gotocv = perl_get_cv("DB::goto", FALSE)) ) {
1994 PUSHMARK( stack_sp );
1995 perl_call_sv((SV*)gotocv, G_SCALAR | G_NODEBUG);
1999 RETURNOP(CvSTART(cv));
2003 label = SvPV(sv,na);
2005 else if (op->op_flags & OPf_SPECIAL) {
2007 DIE("goto must have label");
2010 label = cPVOP->op_pv;
2012 if (label && *label) {
2019 for (ix = cxstack_ix; ix >= 0; ix--) {
2021 switch (cx->cx_type) {
2023 gotoprobe = eval_root; /* XXX not good for nested eval */
2026 gotoprobe = cx->blk_oldcop->op_sibling;
2032 gotoprobe = cx->blk_oldcop->op_sibling;
2034 gotoprobe = main_root;
2037 if (CvDEPTH(cx->blk_sub.cv)) {
2038 gotoprobe = CvROOT(cx->blk_sub.cv);
2043 DIE("Can't \"goto\" outside a block");
2047 gotoprobe = main_root;
2050 retop = dofindlabel(gotoprobe, label,
2051 enterops, enterops + GOTO_DEPTH);
2054 lastgotoprobe = gotoprobe;
2057 DIE("Can't find label %s", label);
2059 /* pop unwanted frames */
2061 if (ix < cxstack_ix) {
2068 oldsave = scopestack[scopestack_ix];
2069 LEAVE_SCOPE(oldsave);
2072 /* push wanted frames */
2074 if (*enterops && enterops[1]) {
2076 for (ix = 1; enterops[ix]; ix++) {
2078 /* Eventually we may want to stack the needed arguments
2079 * for each op. For now, we punt on the hard ones. */
2080 if (op->op_type == OP_ENTERITER)
2081 DIE("Can't \"goto\" into the middle of a foreach loop",
2083 (CALLOP->op_ppaddr)(ARGS);
2091 if (!retop) retop = main_start;
2098 restartop = 0; /* hmm, must be GNU unexec().. */
2102 if (top_env->je_prev) {
2120 if (anum == 1 && VMSISH_EXIT)
2133 double value = SvNVx(GvSV(cCOP->cop_gv));
2134 register I32 match = I_32(value);
2137 if (((double)match) > value)
2138 --match; /* was fractional--truncate other way */
2140 match -= cCOP->uop.scop.scop_offset;
2143 else if (match > cCOP->uop.scop.scop_max)
2144 match = cCOP->uop.scop.scop_max;
2145 op = cCOP->uop.scop.scop_next[match];
2155 op = op->op_next; /* can't assume anything */
2157 match = *(SvPVx(GvSV(cCOP->cop_gv), na)) & 255;
2158 match -= cCOP->uop.scop.scop_offset;
2161 else if (match > cCOP->uop.scop.scop_max)
2162 match = cCOP->uop.scop.scop_max;
2163 op = cCOP->uop.scop.scop_next[match];
2172 save_lines(AV *array, SV *sv)
2174 register char *s = SvPVX(sv);
2175 register char *send = SvPVX(sv) + SvCUR(sv);
2177 register I32 line = 1;
2179 while (s && s < send) {
2180 SV *tmpstr = NEWSV(85,0);
2182 sv_upgrade(tmpstr, SVt_PVMG);
2183 t = strchr(s, '\n');
2189 sv_setpvn(tmpstr, s, t - s);
2190 av_store(array, line++, tmpstr);
2205 assert(CATCH_GET == TRUE);
2206 DEBUG_l(deb("Setting up local jumplevel %p, was %p\n", &cur_env, top_env));
2210 default: /* topmost level handles it */
2217 PerlIO_printf(PerlIO_stderr(), "panic: restartop\n");
2233 sv_compile_2op(SV *sv, OP** startop, char *code, AV** avp)
2234 /* sv Text to convert to OP tree. */
2235 /* startop op_free() this to undo. */
2236 /* code Short string id of the caller. */
2238 dSP; /* Make POPBLOCK work. */
2241 I32 gimme = 0; /* SUSPECT - INITIALZE TO WHAT? NI-S */
2245 char tmpbuf[TYPE_DIGITS(long) + 12 + 10];
2251 /* switch to eval mode */
2253 SAVESPTR(compiling.cop_filegv);
2254 SAVEI16(compiling.cop_line);
2255 sprintf(tmpbuf, "_<(%.10s_eval %lu)", code, (unsigned long)++evalseq);
2256 compiling.cop_filegv = gv_fetchfile(tmpbuf+2);
2257 compiling.cop_line = 1;
2258 /* XXX For C<eval "...">s within BEGIN {} blocks, this ends up
2259 deleting the eval's FILEGV from the stash before gv_check() runs
2260 (i.e. before run-time proper). To work around the coredump that
2261 ensues, we always turn GvMULTI_on for any globals that were
2262 introduced within evals. See force_ident(). GSAR 96-10-12 */
2263 safestr = savepv(tmpbuf);
2264 SAVEDELETE(defstash, safestr, strlen(safestr));
2266 #ifdef OP_IN_REGISTER
2274 op->op_type = 0; /* Avoid uninit warning. */
2275 op->op_flags = 0; /* Avoid uninit warning. */
2276 PUSHBLOCK(cx, CXt_EVAL, SP);
2277 PUSHEVAL(cx, 0, compiling.cop_filegv);
2278 rop = doeval(G_SCALAR, startop);
2282 (*startop)->op_type = OP_NULL;
2283 (*startop)->op_ppaddr = ppaddr[OP_NULL];
2285 *avp = (AV*)SvREFCNT_inc(comppad);
2287 #ifdef OP_IN_REGISTER
2293 /* With USE_THREADS, eval_owner must be held on entry to doeval */
2295 doeval(int gimme, OP** startop)
2308 /* set up a scratch pad */
2313 SAVESPTR(comppad_name);
2314 SAVEI32(comppad_name_fill);
2315 SAVEI32(min_intro_pending);
2316 SAVEI32(max_intro_pending);
2319 for (i = cxstack_ix - 1; i >= 0; i--) {
2320 PERL_CONTEXT *cx = &cxstack[i];
2321 if (cx->cx_type == CXt_EVAL)
2323 else if (cx->cx_type == CXt_SUB) {
2324 caller = cx->blk_sub.cv;
2330 compcv = (CV*)NEWSV(1104,0);
2331 sv_upgrade((SV *)compcv, SVt_PVCV);
2332 CvUNIQUE_on(compcv);
2334 CvOWNER(compcv) = 0;
2335 New(666, CvMUTEXP(compcv), 1, perl_mutex);
2336 MUTEX_INIT(CvMUTEXP(compcv));
2337 #endif /* USE_THREADS */
2340 av_push(comppad, Nullsv);
2341 curpad = AvARRAY(comppad);
2342 comppad_name = newAV();
2343 comppad_name_fill = 0;
2344 min_intro_pending = 0;
2347 av_store(comppad_name, 0, newSVpv("@_", 2));
2348 curpad[0] = (SV*)newAV();
2349 SvPADMY_on(curpad[0]); /* XXX Needed? */
2350 #endif /* USE_THREADS */
2352 comppadlist = newAV();
2353 AvREAL_off(comppadlist);
2354 av_store(comppadlist, 0, (SV*)comppad_name);
2355 av_store(comppadlist, 1, (SV*)comppad);
2356 CvPADLIST(compcv) = comppadlist;
2358 if (!saveop || saveop->op_type != OP_REQUIRE)
2359 CvOUTSIDE(compcv) = (CV*)SvREFCNT_inc(caller);
2363 /* make sure we compile in the right package */
2365 newstash = curcop->cop_stash;
2366 if (curstash != newstash) {
2368 curstash = newstash;
2372 SAVEFREESV(beginav);
2374 /* try to compile it */
2378 curcop = &compiling;
2379 curcop->cop_arybase = 0;
2381 rs = newSVpv("\n", 1);
2382 if (saveop && saveop->op_flags & OPf_SPECIAL)
2386 if (yyparse() || error_count || !eval_root) {
2390 I32 optype = 0; /* Might be reset by POPEVAL. */
2397 SP = stack_base + POPMARK; /* pop original mark */
2405 if (optype == OP_REQUIRE) {
2406 char* msg = SvPVx(ERRSV, na);
2407 DIE("%s", *msg ? msg : "Compilation failed in require");
2408 } else if (startop) {
2409 char* msg = SvPVx(ERRSV, na);
2413 croak("%sCompilation failed in regexp", (*msg ? msg : "Unknown error\n"));
2416 rs = SvREFCNT_inc(nrs);
2418 MUTEX_LOCK(&eval_mutex);
2420 COND_SIGNAL(&eval_cond);
2421 MUTEX_UNLOCK(&eval_mutex);
2422 #endif /* USE_THREADS */
2426 rs = SvREFCNT_inc(nrs);
2427 compiling.cop_line = 0;
2429 *startop = eval_root;
2430 SvREFCNT_dec(CvOUTSIDE(compcv));
2431 CvOUTSIDE(compcv) = Nullcv;
2433 SAVEFREEOP(eval_root);
2435 scalarvoid(eval_root);
2436 else if (gimme & G_ARRAY)
2441 DEBUG_x(dump_eval());
2443 /* Register with debugger: */
2444 if (PERLDB_INTER && saveop->op_type == OP_REQUIRE) {
2445 CV *cv = perl_get_cv("DB::postponed", FALSE);
2449 XPUSHs((SV*)compiling.cop_filegv);
2451 perl_call_sv((SV*)cv, G_DISCARD);
2455 /* compiled okay, so do it */
2457 CvDEPTH(compcv) = 1;
2458 SP = stack_base + POPMARK; /* pop original mark */
2459 op = saveop; /* The caller may need it. */
2461 MUTEX_LOCK(&eval_mutex);
2463 COND_SIGNAL(&eval_cond);
2464 MUTEX_UNLOCK(&eval_mutex);
2465 #endif /* USE_THREADS */
2467 RETURNOP(eval_start);
2473 register PERL_CONTEXT *cx;
2478 SV *namesv = Nullsv;
2480 I32 gimme = G_SCALAR;
2481 PerlIO *tryrsfp = 0;
2484 if (SvNIOKp(sv) && !SvPOKp(sv)) {
2485 SET_NUMERIC_STANDARD();
2486 if (atof(patchlevel) + 0.00000999 < SvNV(sv))
2487 DIE("Perl %s required--this is only version %s, stopped",
2488 SvPV(sv,na),patchlevel);
2491 name = SvPV(sv, len);
2492 if (!(name && len > 0 && *name))
2493 DIE("Null filename used");
2494 TAINT_PROPER("require");
2495 if (op->op_type == OP_REQUIRE &&
2496 (svp = hv_fetch(GvHVn(incgv), name, len, 0)) &&
2500 /* prepare to compile file */
2505 (name[1] == '.' && name[2] == '/')))
2507 || (name[0] && name[1] == ':')
2510 || (name[0] == '\\' && name[1] == '\\') /* UNC path */
2513 || (strchr(name,':') || ((*name == '[' || *name == '<') &&
2514 (isALNUM(name[1]) || strchr("$-_]>",name[1]))))
2519 tryrsfp = PerlIO_open(name,PERL_SCRIPT_MODE);
2522 AV *ar = GvAVn(incgv);
2526 if ((unixname = tounixspec(name, Nullch)) != Nullch)
2529 namesv = NEWSV(806, 0);
2530 for (i = 0; i <= AvFILL(ar); i++) {
2531 char *dir = SvPVx(*av_fetch(ar, i, TRUE), na);
2534 if ((unixdir = tounixpath(dir, Nullch)) == Nullch)
2536 sv_setpv(namesv, unixdir);
2537 sv_catpv(namesv, unixname);
2539 sv_setpvf(namesv, "%s/%s", dir, name);
2541 tryname = SvPVX(namesv);
2542 tryrsfp = PerlIO_open(tryname, PERL_SCRIPT_MODE);
2544 if (tryname[0] == '.' && tryname[1] == '/')
2551 SAVESPTR(compiling.cop_filegv);
2552 compiling.cop_filegv = gv_fetchfile(tryrsfp ? tryname : name);
2553 SvREFCNT_dec(namesv);
2555 if (op->op_type == OP_REQUIRE) {
2556 SV *msg = sv_2mortal(newSVpvf("Can't locate %s in @INC", name));
2557 SV *dirmsgsv = NEWSV(0, 0);
2558 AV *ar = GvAVn(incgv);
2560 if (instr(SvPVX(msg), ".h "))
2561 sv_catpv(msg, " (change .h to .ph maybe?)");
2562 if (instr(SvPVX(msg), ".ph "))
2563 sv_catpv(msg, " (did you run h2ph?)");
2564 sv_catpv(msg, " (@INC contains:");
2565 for (i = 0; i <= AvFILL(ar); i++) {
2566 char *dir = SvPVx(*av_fetch(ar, i, TRUE), na);
2567 sv_setpvf(dirmsgsv, " %s", dir);
2568 sv_catsv(msg, dirmsgsv);
2570 sv_catpvn(msg, ")", 1);
2571 SvREFCNT_dec(dirmsgsv);
2578 /* Assume success here to prevent recursive requirement. */
2579 (void)hv_store(GvHVn(incgv), name, strlen(name),
2580 newSVsv(GvSV(compiling.cop_filegv)), 0 );
2584 lex_start(sv_2mortal(newSVpv("",0)));
2586 save_aptr(&rsfp_filters);
2587 rsfp_filters = NULL;
2591 name = savepv(name);
2596 /* switch to eval mode */
2598 push_return(op->op_next);
2599 PUSHBLOCK(cx, CXt_EVAL, SP);
2600 PUSHEVAL(cx, name, compiling.cop_filegv);
2602 compiling.cop_line = 0;
2606 MUTEX_LOCK(&eval_mutex);
2607 if (eval_owner && eval_owner != thr)
2609 COND_WAIT(&eval_cond, &eval_mutex);
2611 MUTEX_UNLOCK(&eval_mutex);
2612 #endif /* USE_THREADS */
2613 return DOCATCH(doeval(G_SCALAR, NULL));
2618 return pp_require(ARGS);
2624 register PERL_CONTEXT *cx;
2626 I32 gimme = GIMME_V, was = sub_generation;
2627 char tmpbuf[TYPE_DIGITS(long) + 12];
2632 if (!SvPV(sv,len) || !len)
2634 TAINT_PROPER("eval");
2640 /* switch to eval mode */
2642 SAVESPTR(compiling.cop_filegv);
2643 sprintf(tmpbuf, "_<(eval %lu)", (unsigned long)++evalseq);
2644 compiling.cop_filegv = gv_fetchfile(tmpbuf+2);
2645 compiling.cop_line = 1;
2646 /* XXX For C<eval "...">s within BEGIN {} blocks, this ends up
2647 deleting the eval's FILEGV from the stash before gv_check() runs
2648 (i.e. before run-time proper). To work around the coredump that
2649 ensues, we always turn GvMULTI_on for any globals that were
2650 introduced within evals. See force_ident(). GSAR 96-10-12 */
2651 safestr = savepv(tmpbuf);
2652 SAVEDELETE(defstash, safestr, strlen(safestr));
2654 hints = op->op_targ;
2656 push_return(op->op_next);
2657 PUSHBLOCK(cx, CXt_EVAL, SP);
2658 PUSHEVAL(cx, 0, compiling.cop_filegv);
2660 /* prepare to compile string */
2662 if (PERLDB_LINE && curstash != debstash)
2663 save_lines(GvAV(compiling.cop_filegv), linestr);
2666 MUTEX_LOCK(&eval_mutex);
2667 if (eval_owner && eval_owner != thr)
2669 COND_WAIT(&eval_cond, &eval_mutex);
2671 MUTEX_UNLOCK(&eval_mutex);
2672 #endif /* USE_THREADS */
2673 ret = doeval(gimme, NULL);
2674 if (PERLDB_INTER && was != sub_generation /* Some subs defined here. */
2675 && ret != op->op_next) { /* Successive compilation. */
2676 strcpy(safestr, "_<(eval )"); /* Anything fake and short. */
2678 return DOCATCH(ret);
2688 register PERL_CONTEXT *cx;
2690 U8 save_flags = op -> op_flags;
2695 retop = pop_return();
2698 if (gimme == G_VOID)
2700 else if (gimme == G_SCALAR) {
2703 if (SvFLAGS(TOPs) & SVs_TEMP)
2706 *MARK = sv_mortalcopy(TOPs);
2714 /* in case LEAVE wipes old return values */
2715 for (mark = newsp + 1; mark <= SP; mark++) {
2716 if (!(SvFLAGS(*mark) & SVs_TEMP)) {
2717 *mark = sv_mortalcopy(*mark);
2718 TAINT_NOT; /* Each item is independent */
2722 curpm = newpm; /* Don't pop $1 et al till now */
2725 * Closures mentioned at top level of eval cannot be referenced
2726 * again, and their presence indirectly causes a memory leak.
2727 * (Note that the fact that compcv and friends are still set here
2728 * is, AFAIK, an accident.) --Chip
2730 if (AvFILLp(comppad_name) >= 0) {
2731 SV **svp = AvARRAY(comppad_name);
2733 for (ix = AvFILLp(comppad_name); ix >= 0; ix--) {
2735 if (sv && sv != &sv_undef && *SvPVX(sv) == '&') {
2737 svp[ix] = &sv_undef;
2741 SvREFCNT_dec(CvOUTSIDE(sv));
2742 CvOUTSIDE(sv) = Nullcv;
2755 assert(CvDEPTH(compcv) == 1);
2757 CvDEPTH(compcv) = 0;
2760 if (optype == OP_REQUIRE &&
2761 !(gimme == G_SCALAR ? SvTRUE(*SP) : SP > newsp))
2763 /* Unassume the success we assumed earlier. */
2764 char *name = cx->blk_eval.old_name;
2765 (void)hv_delete(GvHVn(incgv), name, strlen(name), G_DISCARD);
2766 retop = die("%s did not return a true value", name);
2767 /* die_where() did LEAVE, or we won't be here */
2771 if (!(save_flags & OPf_SPECIAL))
2781 register PERL_CONTEXT *cx;
2782 I32 gimme = GIMME_V;
2787 push_return(cLOGOP->op_other->op_next);
2788 PUSHBLOCK(cx, CXt_EVAL, SP);
2790 eval_root = op; /* Only needed so that goto works right. */
2795 return DOCATCH(op->op_next);
2805 register PERL_CONTEXT *cx;
2813 if (gimme == G_VOID)
2815 else if (gimme == G_SCALAR) {
2818 if (SvFLAGS(TOPs) & (SVs_PADTMP|SVs_TEMP))
2821 *MARK = sv_mortalcopy(TOPs);
2830 /* in case LEAVE wipes old return values */
2831 for (mark = newsp + 1; mark <= SP; mark++) {
2832 if (!(SvFLAGS(*mark) & (SVs_PADTMP|SVs_TEMP))) {
2833 *mark = sv_mortalcopy(*mark);
2834 TAINT_NOT; /* Each item is independent */
2838 curpm = newpm; /* Don't pop $1 et al till now */
2849 register char *s = SvPV_force(sv, len);
2850 register char *send = s + len;
2851 register char *base;
2852 register I32 skipspaces = 0;
2855 bool postspace = FALSE;
2863 croak("Null picture in formline");
2865 New(804, fops, (send - s)*3+10, U16); /* Almost certainly too long... */
2870 *fpc++ = FF_LINEMARK;
2871 noblank = repeat = FALSE;
2889 case ' ': case '\t':
2900 *fpc++ = FF_LITERAL;
2908 *fpc++ = skipspaces;
2912 *fpc++ = FF_NEWLINE;
2916 arg = fpc - linepc + 1;
2923 *fpc++ = FF_LINEMARK;
2924 noblank = repeat = FALSE;
2933 ischop = s[-1] == '^';
2939 arg = (s - base) - 1;
2941 *fpc++ = FF_LITERAL;
2950 *fpc++ = FF_LINEGLOB;
2952 else if (*s == '#' || (*s == '.' && s[1] == '#')) {
2953 arg = ischop ? 512 : 0;
2963 arg |= 256 + (s - f);
2965 *fpc++ = s - base; /* fieldsize for FETCH */
2966 *fpc++ = FF_DECIMAL;
2971 bool ismore = FALSE;
2974 while (*++s == '>') ;
2975 prespace = FF_SPACE;
2977 else if (*s == '|') {
2978 while (*++s == '|') ;
2979 prespace = FF_HALFSPACE;
2984 while (*++s == '<') ;
2987 if (*s == '.' && s[1] == '.' && s[2] == '.') {
2991 *fpc++ = s - base; /* fieldsize for FETCH */
2993 *fpc++ = ischop ? FF_CHECKCHOP : FF_CHECKNL;
3011 { /* need to jump to the next word */
3013 z = WORD_ALIGN - SvCUR(sv) % WORD_ALIGN;
3014 SvGROW(sv, SvCUR(sv) + z + arg * sizeof(U16) + 4);
3015 s = SvPVX(sv) + SvCUR(sv) + z;
3017 Copy(fops, s, arg, U16);
3019 sv_magic(sv, Nullsv, 'f', Nullch, 0);
3024 * The rest of this file was derived from source code contributed
3027 * NOTE: this code was derived from Tom Horsley's qsort replacement
3028 * and should not be confused with the original code.
3031 /* Copyright (C) Tom Horsley, 1997. All rights reserved.
3033 Permission granted to distribute under the same terms as perl which are
3036 This program is free software; you can redistribute it and/or modify
3037 it under the terms of either:
3039 a) the GNU General Public License as published by the Free
3040 Software Foundation; either version 1, or (at your option) any
3043 b) the "Artistic License" which comes with this Kit.
3045 Details on the perl license can be found in the perl source code which
3046 may be located via the www.perl.com web page.
3048 This is the most wonderfulest possible qsort I can come up with (and
3049 still be mostly portable) My (limited) tests indicate it consistently
3050 does about 20% fewer calls to compare than does the qsort in the Visual
3051 C++ library, other vendors may vary.
3053 Some of the ideas in here can be found in "Algorithms" by Sedgewick,
3054 others I invented myself (or more likely re-invented since they seemed
3055 pretty obvious once I watched the algorithm operate for a while).
3057 Most of this code was written while watching the Marlins sweep the Giants
3058 in the 1997 National League Playoffs - no Braves fans allowed to use this
3059 code (just kidding :-).
3061 I realize that if I wanted to be true to the perl tradition, the only
3062 comment in this file would be something like:
3064 ...they shuffled back towards the rear of the line. 'No, not at the
3065 rear!' the slave-driver shouted. 'Three files up. And stay there...
3067 However, I really needed to violate that tradition just so I could keep
3068 track of what happens myself, not to mention some poor fool trying to
3069 understand this years from now :-).
3072 /* ********************************************************** Configuration */
3074 #ifndef QSORT_ORDER_GUESS
3075 #define QSORT_ORDER_GUESS 2 /* Select doubling version of the netBSD trick */
3078 /* QSORT_MAX_STACK is the largest number of partitions that can be stacked up for
3079 future processing - a good max upper bound is log base 2 of memory size
3080 (32 on 32 bit machines, 64 on 64 bit machines, etc). In reality can
3081 safely be smaller than that since the program is taking up some space and
3082 most operating systems only let you grab some subset of contiguous
3083 memory (not to mention that you are normally sorting data larger than
3084 1 byte element size :-).
3086 #ifndef QSORT_MAX_STACK
3087 #define QSORT_MAX_STACK 32
3090 /* QSORT_BREAK_EVEN is the size of the largest partition we should insertion sort.
3091 Anything bigger and we use qsort. If you make this too small, the qsort
3092 will probably break (or become less efficient), because it doesn't expect
3093 the middle element of a partition to be the same as the right or left -
3094 you have been warned).
3096 #ifndef QSORT_BREAK_EVEN
3097 #define QSORT_BREAK_EVEN 6
3100 /* ************************************************************* Data Types */
3102 /* hold left and right index values of a partition waiting to be sorted (the
3103 partition includes both left and right - right is NOT one past the end or
3104 anything like that).
3106 struct partition_stack_entry {
3109 #ifdef QSORT_ORDER_GUESS
3110 int qsort_break_even;
3114 /* ******************************************************* Shorthand Macros */
3116 /* Note that these macros will be used from inside the qsort function where
3117 we happen to know that the variable 'elt_size' contains the size of an
3118 array element and the variable 'temp' points to enough space to hold a
3119 temp element and the variable 'array' points to the array being sorted
3120 and 'compare' is the pointer to the compare routine.
3122 Also note that there are very many highly architecture specific ways
3123 these might be sped up, but this is simply the most generally portable
3124 code I could think of.
3127 /* Return < 0 == 0 or > 0 as the value of elt1 is < elt2, == elt2, > elt2
3130 #define qsort_cmp(elt1, elt2) \
3131 ((this->*compare)(array[elt1], array[elt2]))
3133 #define qsort_cmp(elt1, elt2) \
3134 ((*compare)(array[elt1], array[elt2]))
3137 #ifdef QSORT_ORDER_GUESS
3138 #define QSORT_NOTICE_SWAP swapped++;
3140 #define QSORT_NOTICE_SWAP
3143 /* swaps contents of array elements elt1, elt2.
3145 #define qsort_swap(elt1, elt2) \
3148 temp = array[elt1]; \
3149 array[elt1] = array[elt2]; \
3150 array[elt2] = temp; \
3153 /* rotate contents of elt1, elt2, elt3 such that elt1 gets elt2, elt2 gets
3154 elt3 and elt3 gets elt1.
3156 #define qsort_rotate(elt1, elt2, elt3) \
3159 temp = array[elt1]; \
3160 array[elt1] = array[elt2]; \
3161 array[elt2] = array[elt3]; \
3162 array[elt3] = temp; \
3165 /* ************************************************************ Debug stuff */
3172 return; /* good place to set a breakpoint */
3175 #define qsort_assert(t) (void)( (t) || (break_here(), 0) )
3178 doqsort_all_asserts(
3182 int (*compare)(const void * elt1, const void * elt2),
3183 int pc_left, int pc_right, int u_left, int u_right)
3187 qsort_assert(pc_left <= pc_right);
3188 qsort_assert(u_right < pc_left);
3189 qsort_assert(pc_right < u_left);
3190 for (i = u_right + 1; i < pc_left; ++i) {
3191 qsort_assert(qsort_cmp(i, pc_left) < 0);
3193 for (i = pc_left; i < pc_right; ++i) {
3194 qsort_assert(qsort_cmp(i, pc_right) == 0);
3196 for (i = pc_right + 1; i < u_left; ++i) {
3197 qsort_assert(qsort_cmp(pc_right, i) < 0);
3201 #define qsort_all_asserts(PC_LEFT, PC_RIGHT, U_LEFT, U_RIGHT) \
3202 doqsort_all_asserts(array, num_elts, elt_size, compare, \
3203 PC_LEFT, PC_RIGHT, U_LEFT, U_RIGHT)
3207 #define qsort_assert(t) ((void)0)
3209 #define qsort_all_asserts(PC_LEFT, PC_RIGHT, U_LEFT, U_RIGHT) ((void)0)
3213 /* ****************************************************************** qsort */
3217 qsortsv(SV ** array, size_t num_elts, SVCOMPARE compare)
3222 I32 (*compare)(SV *a, SV *b))
3227 struct partition_stack_entry partition_stack[QSORT_MAX_STACK];
3228 int next_stack_entry = 0;
3232 #ifdef QSORT_ORDER_GUESS
3233 int qsort_break_even;
3237 /* Make sure we actually have work to do.
3239 if (num_elts <= 1) {
3243 /* Setup the initial partition definition and fall into the sorting loop
3246 part_right = (int)(num_elts - 1);
3247 #ifdef QSORT_ORDER_GUESS
3248 qsort_break_even = QSORT_BREAK_EVEN;
3250 #define qsort_break_even QSORT_BREAK_EVEN
3253 if ((part_right - part_left) >= qsort_break_even) {
3254 /* OK, this is gonna get hairy, so lets try to document all the
3255 concepts and abbreviations and variables and what they keep
3258 pc: pivot chunk - the set of array elements we accumulate in the
3259 middle of the partition, all equal in value to the original
3260 pivot element selected. The pc is defined by:
3262 pc_left - the leftmost array index of the pc
3263 pc_right - the rightmost array index of the pc
3265 we start with pc_left == pc_right and only one element
3266 in the pivot chunk (but it can grow during the scan).
3268 u: uncompared elements - the set of elements in the partition
3269 we have not yet compared to the pivot value. There are two
3270 uncompared sets during the scan - one to the left of the pc
3271 and one to the right.
3273 u_right - the rightmost index of the left side's uncompared set
3274 u_left - the leftmost index of the right side's uncompared set
3276 The leftmost index of the left sides's uncompared set
3277 doesn't need its own variable because it is always defined
3278 by the leftmost edge of the whole partition (part_left). The
3279 same goes for the rightmost edge of the right partition
3282 We know there are no uncompared elements on the left once we
3283 get u_right < part_left and no uncompared elements on the
3284 right once u_left > part_right. When both these conditions
3285 are met, we have completed the scan of the partition.
3287 Any elements which are between the pivot chunk and the
3288 uncompared elements should be less than the pivot value on
3289 the left side and greater than the pivot value on the right
3290 side (in fact, the goal of the whole algorithm is to arrange
3291 for that to be true and make the groups of less-than and
3292 greater-then elements into new partitions to sort again).
3294 As you marvel at the complexity of the code and wonder why it
3295 has to be so confusing. Consider some of the things this level
3296 of confusion brings:
3298 Once I do a compare, I squeeze every ounce of juice out of it. I
3299 never do compare calls I don't have to do, and I certainly never
3302 I also never swap any elements unless I can prove there is a
3303 good reason. Many sort algorithms will swap a known value with
3304 an uncompared value just to get things in the right place (or
3305 avoid complexity :-), but that uncompared value, once it gets
3306 compared, may then have to be swapped again. A lot of the
3307 complexity of this code is due to the fact that it never swaps
3308 anything except compared values, and it only swaps them when the
3309 compare shows they are out of position.
3311 int pc_left, pc_right;
3312 int u_right, u_left;
3316 pc_left = ((part_left + part_right) / 2);
3318 u_right = pc_left - 1;
3319 u_left = pc_right + 1;
3321 /* Qsort works best when the pivot value is also the median value
3322 in the partition (unfortunately you can't find the median value
3323 without first sorting :-), so to give the algorithm a helping
3324 hand, we pick 3 elements and sort them and use the median value
3325 of that tiny set as the pivot value.
3327 Some versions of qsort like to use the left middle and right as
3328 the 3 elements to sort so they can insure the ends of the
3329 partition will contain values which will stop the scan in the
3330 compare loop, but when you have to call an arbitrarily complex
3331 routine to do a compare, its really better to just keep track of
3332 array index values to know when you hit the edge of the
3333 partition and avoid the extra compare. An even better reason to
3334 avoid using a compare call is the fact that you can drop off the
3335 edge of the array if someone foolishly provides you with an
3336 unstable compare function that doesn't always provide consistent
3339 So, since it is simpler for us to compare the three adjacent
3340 elements in the middle of the partition, those are the ones we
3341 pick here (conveniently pointed at by u_right, pc_left, and
3342 u_left). The values of the left, center, and right elements
3343 are refered to as l c and r in the following comments.
3346 #ifdef QSORT_ORDER_GUESS
3349 s = qsort_cmp(u_right, pc_left);
3352 s = qsort_cmp(pc_left, u_left);
3353 /* if l < c, c < r - already in order - nothing to do */
3355 /* l < c, c == r - already in order, pc grows */
3357 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3359 /* l < c, c > r - need to know more */
3360 s = qsort_cmp(u_right, u_left);
3362 /* l < c, c > r, l < r - swap c & r to get ordered */
3363 qsort_swap(pc_left, u_left);
3364 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3365 } else if (s == 0) {
3366 /* l < c, c > r, l == r - swap c&r, grow pc */
3367 qsort_swap(pc_left, u_left);
3369 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3371 /* l < c, c > r, l > r - make lcr into rlc to get ordered */
3372 qsort_rotate(pc_left, u_right, u_left);
3373 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3376 } else if (s == 0) {
3378 s = qsort_cmp(pc_left, u_left);
3380 /* l == c, c < r - already in order, grow pc */
3382 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3383 } else if (s == 0) {
3384 /* l == c, c == r - already in order, grow pc both ways */
3387 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3389 /* l == c, c > r - swap l & r, grow pc */
3390 qsort_swap(u_right, u_left);
3392 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3396 s = qsort_cmp(pc_left, u_left);
3398 /* l > c, c < r - need to know more */
3399 s = qsort_cmp(u_right, u_left);
3401 /* l > c, c < r, l < r - swap l & c to get ordered */
3402 qsort_swap(u_right, pc_left);
3403 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3404 } else if (s == 0) {
3405 /* l > c, c < r, l == r - swap l & c, grow pc */
3406 qsort_swap(u_right, pc_left);
3408 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3410 /* l > c, c < r, l > r - rotate lcr into crl to order */
3411 qsort_rotate(u_right, pc_left, u_left);
3412 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3414 } else if (s == 0) {
3415 /* l > c, c == r - swap ends, grow pc */
3416 qsort_swap(u_right, u_left);
3418 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3420 /* l > c, c > r - swap ends to get in order */
3421 qsort_swap(u_right, u_left);
3422 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3425 /* We now know the 3 middle elements have been compared and
3426 arranged in the desired order, so we can shrink the uncompared
3431 qsort_all_asserts(pc_left, pc_right, u_left, u_right);
3433 /* The above massive nested if was the simple part :-). We now have
3434 the middle 3 elements ordered and we need to scan through the
3435 uncompared sets on either side, swapping elements that are on
3436 the wrong side or simply shuffling equal elements around to get
3437 all equal elements into the pivot chunk.
3441 int still_work_on_left;
3442 int still_work_on_right;
3444 /* Scan the uncompared values on the left. If I find a value
3445 equal to the pivot value, move it over so it is adjacent to
3446 the pivot chunk and expand the pivot chunk. If I find a value
3447 less than the pivot value, then just leave it - its already
3448 on the correct side of the partition. If I find a greater
3449 value, then stop the scan.
3451 while (still_work_on_left = (u_right >= part_left)) {
3452 s = qsort_cmp(u_right, pc_left);
3455 } else if (s == 0) {
3457 if (pc_left != u_right) {
3458 qsort_swap(u_right, pc_left);
3464 qsort_assert(u_right < pc_left);
3465 qsort_assert(pc_left <= pc_right);
3466 qsort_assert(qsort_cmp(u_right + 1, pc_left) <= 0);
3467 qsort_assert(qsort_cmp(pc_left, pc_right) == 0);
3470 /* Do a mirror image scan of uncompared values on the right
3472 while (still_work_on_right = (u_left <= part_right)) {
3473 s = qsort_cmp(pc_right, u_left);
3476 } else if (s == 0) {
3478 if (pc_right != u_left) {
3479 qsort_swap(pc_right, u_left);
3485 qsort_assert(u_left > pc_right);
3486 qsort_assert(pc_left <= pc_right);
3487 qsort_assert(qsort_cmp(pc_right, u_left - 1) <= 0);
3488 qsort_assert(qsort_cmp(pc_left, pc_right) == 0);
3491 if (still_work_on_left) {
3492 /* I know I have a value on the left side which needs to be
3493 on the right side, but I need to know more to decide
3494 exactly the best thing to do with it.
3496 if (still_work_on_right) {
3497 /* I know I have values on both side which are out of
3498 position. This is a big win because I kill two birds
3499 with one swap (so to speak). I can advance the
3500 uncompared pointers on both sides after swapping both
3501 of them into the right place.
3503 qsort_swap(u_right, u_left);
3506 qsort_all_asserts(pc_left, pc_right, u_left, u_right);
3508 /* I have an out of position value on the left, but the
3509 right is fully scanned, so I "slide" the pivot chunk
3510 and any less-than values left one to make room for the
3511 greater value over on the right. If the out of position
3512 value is immediately adjacent to the pivot chunk (there
3513 are no less-than values), I can do that with a swap,
3514 otherwise, I have to rotate one of the less than values
3515 into the former position of the out of position value
3516 and the right end of the pivot chunk into the left end
3520 if (pc_left == u_right) {
3521 qsort_swap(u_right, pc_right);
3522 qsort_all_asserts(pc_left, pc_right-1, u_left, u_right-1);
3524 qsort_rotate(u_right, pc_left, pc_right);
3525 qsort_all_asserts(pc_left, pc_right-1, u_left, u_right-1);
3530 } else if (still_work_on_right) {
3531 /* Mirror image of complex case above: I have an out of
3532 position value on the right, but the left is fully
3533 scanned, so I need to shuffle things around to make room
3534 for the right value on the left.
3537 if (pc_right == u_left) {
3538 qsort_swap(u_left, pc_left);
3539 qsort_all_asserts(pc_left+1, pc_right, u_left+1, u_right);
3541 qsort_rotate(pc_right, pc_left, u_left);
3542 qsort_all_asserts(pc_left+1, pc_right, u_left+1, u_right);
3547 /* No more scanning required on either side of partition,
3548 break out of loop and figure out next set of partitions
3554 /* The elements in the pivot chunk are now in the right place. They
3555 will never move or be compared again. All I have to do is decide
3556 what to do with the stuff to the left and right of the pivot
3559 Notes on the QSORT_ORDER_GUESS ifdef code:
3561 1. If I just built these partitions without swapping any (or
3562 very many) elements, there is a chance that the elements are
3563 already ordered properly (being properly ordered will
3564 certainly result in no swapping, but the converse can't be
3567 2. A (properly written) insertion sort will run faster on
3568 already ordered data than qsort will.
3570 3. Perhaps there is some way to make a good guess about
3571 switching to an insertion sort earlier than partition size 6
3572 (for instance - we could save the partition size on the stack
3573 and increase the size each time we find we didn't swap, thus
3574 switching to insertion sort earlier for partitions with a
3575 history of not swapping).
3577 4. Naturally, if I just switch right away, it will make
3578 artificial benchmarks with pure ascending (or descending)
3579 data look really good, but is that a good reason in general?
3583 #ifdef QSORT_ORDER_GUESS
3585 #if QSORT_ORDER_GUESS == 1
3586 qsort_break_even = (part_right - part_left) + 1;
3588 #if QSORT_ORDER_GUESS == 2
3589 qsort_break_even *= 2;
3591 #if QSORT_ORDER_GUESS == 3
3592 int prev_break = qsort_break_even;
3593 qsort_break_even *= qsort_break_even;
3594 if (qsort_break_even < prev_break) {
3595 qsort_break_even = (part_right - part_left) + 1;
3599 qsort_break_even = QSORT_BREAK_EVEN;
3603 if (part_left < pc_left) {
3604 /* There are elements on the left which need more processing.
3605 Check the right as well before deciding what to do.
3607 if (pc_right < part_right) {
3608 /* We have two partitions to be sorted. Stack the biggest one
3609 and process the smallest one on the next iteration. This
3610 minimizes the stack height by insuring that any additional
3611 stack entries must come from the smallest partition which
3612 (because it is smallest) will have the fewest
3613 opportunities to generate additional stack entries.
3615 if ((part_right - pc_right) > (pc_left - part_left)) {
3616 /* stack the right partition, process the left */
3617 partition_stack[next_stack_entry].left = pc_right + 1;
3618 partition_stack[next_stack_entry].right = part_right;
3619 #ifdef QSORT_ORDER_GUESS
3620 partition_stack[next_stack_entry].qsort_break_even = qsort_break_even;
3622 part_right = pc_left - 1;
3624 /* stack the left partition, process the right */
3625 partition_stack[next_stack_entry].left = part_left;
3626 partition_stack[next_stack_entry].right = pc_left - 1;
3627 #ifdef QSORT_ORDER_GUESS
3628 partition_stack[next_stack_entry].qsort_break_even = qsort_break_even;
3630 part_left = pc_right + 1;
3632 qsort_assert(next_stack_entry < QSORT_MAX_STACK);
3635 /* The elements on the left are the only remaining elements
3636 that need sorting, arrange for them to be processed as the
3639 part_right = pc_left - 1;
3641 } else if (pc_right < part_right) {
3642 /* There is only one chunk on the right to be sorted, make it
3643 the new partition and loop back around.
3645 part_left = pc_right + 1;
3647 /* This whole partition wound up in the pivot chunk, so
3648 we need to get a new partition off the stack.
3650 if (next_stack_entry == 0) {
3651 /* the stack is empty - we are done */
3655 part_left = partition_stack[next_stack_entry].left;
3656 part_right = partition_stack[next_stack_entry].right;
3657 #ifdef QSORT_ORDER_GUESS
3658 qsort_break_even = partition_stack[next_stack_entry].qsort_break_even;
3662 /* This partition is too small to fool with qsort complexity, just
3663 do an ordinary insertion sort to minimize overhead.
3666 /* Assume 1st element is in right place already, and start checking
3667 at 2nd element to see where it should be inserted.
3669 for (i = part_left + 1; i <= part_right; ++i) {
3671 /* Scan (backwards - just in case 'i' is already in right place)
3672 through the elements already sorted to see if the ith element
3673 belongs ahead of one of them.
3675 for (j = i - 1; j >= part_left; --j) {
3676 if (qsort_cmp(i, j) >= 0) {
3677 /* i belongs right after j
3684 /* Looks like we really need to move some things
3688 for (k = i - 1; k >= j; --k)
3689 array[k + 1] = array[k];
3694 /* That partition is now sorted, grab the next one, or get out
3695 of the loop if there aren't any more.
3698 if (next_stack_entry == 0) {
3699 /* the stack is empty - we are done */
3703 part_left = partition_stack[next_stack_entry].left;
3704 part_right = partition_stack[next_stack_entry].right;
3705 #ifdef QSORT_ORDER_GUESS
3706 qsort_break_even = partition_stack[next_stack_entry].qsort_break_even;
3711 /* Believe it or not, the array is sorted at this point! */