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->*PL_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 (PL_op->op_flags & OPf_SPECIAL)
112 PL_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 PL_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 && PL_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 = PL_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(PL_chopset, ' ') != Nullch);
291 if (!SvMAGICAL(tmpForm) || !SvCOMPILED(tmpForm)) {
292 SvREADONLY_off(tmpForm);
293 doparseform(tmpForm);
296 SvPV_force(PL_formtarget, len);
297 t = SvGROW(PL_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(PL_chopset, *s))
412 itemsize = chophere - item;
417 arg = fieldsize - itemsize;
426 arg = fieldsize - itemsize;
440 int ch = *t++ = *s++;
443 if ( !((*t++ = *s++) & ~31) )
452 while (*s && isSPACE(*s))
459 item = s = SvPV(sv, len);
472 SvCUR_set(PL_formtarget, t - SvPVX(PL_formtarget));
473 sv_catpvn(PL_formtarget, item, itemsize);
474 SvGROW(PL_formtarget, SvCUR(PL_formtarget) + SvCUR(tmpForm) + 1);
475 t = SvPVX(PL_formtarget) + SvCUR(PL_formtarget);
480 /* If the field is marked with ^ and the value is undefined,
483 if ((arg & 512) && !SvOK(sv)) {
491 /* Formats aren't yet marked for locales, so assume "yes". */
494 sprintf(t, "%#*.*f", (int) fieldsize, (int) arg & 255, value);
496 sprintf(t, "%*.0f", (int) fieldsize, value);
503 while (t-- > linemark && *t == ' ') ;
511 if (arg) { /* repeat until fields exhausted? */
513 SvCUR_set(PL_formtarget, t - SvPVX(PL_formtarget));
514 lines += FmLINES(PL_formtarget);
517 if (strnEQ(linemark, linemark - arg, arg))
518 DIE("Runaway format");
520 FmLINES(PL_formtarget) = lines;
522 RETURNOP(cLISTOP->op_first);
533 arg = fieldsize - itemsize;
540 if (strnEQ(s," ",3)) {
541 while (s > SvPVX(PL_formtarget) && isSPACE(s[-1]))
552 SvCUR_set(PL_formtarget, t - SvPVX(PL_formtarget));
553 FmLINES(PL_formtarget) += lines;
565 if (PL_stack_base + *PL_markstack_ptr == SP) {
567 if (GIMME_V == G_SCALAR)
569 RETURNOP(PL_op->op_next->op_next);
571 PL_stack_sp = PL_stack_base + *PL_markstack_ptr + 1;
572 pp_pushmark(ARGS); /* push dst */
573 pp_pushmark(ARGS); /* push src */
574 ENTER; /* enter outer scope */
578 /* SAVE_DEFSV does *not* suffice here */
579 save_sptr(&THREADSV(0));
581 SAVESPTR(GvSV(PL_defgv));
582 #endif /* USE_THREADS */
583 ENTER; /* enter inner scope */
586 src = PL_stack_base[*PL_markstack_ptr];
591 if (PL_op->op_type == OP_MAPSTART)
592 pp_pushmark(ARGS); /* push top */
593 return ((LOGOP*)PL_op->op_next)->op_other;
598 DIE("panic: mapstart"); /* uses grepstart */
604 I32 diff = (SP - PL_stack_base) - *PL_markstack_ptr;
610 ++PL_markstack_ptr[-1];
612 if (diff > PL_markstack_ptr[-1] - PL_markstack_ptr[-2]) {
613 shift = diff - (PL_markstack_ptr[-1] - PL_markstack_ptr[-2]);
614 count = (SP - PL_stack_base) - PL_markstack_ptr[-1] + 2;
619 PL_markstack_ptr[-1] += shift;
620 *PL_markstack_ptr += shift;
624 dst = PL_stack_base + (PL_markstack_ptr[-2] += diff) - 1;
627 *dst-- = SvTEMP(TOPs) ? POPs : sv_mortalcopy(POPs);
629 LEAVE; /* exit inner scope */
632 if (PL_markstack_ptr[-1] > *PL_markstack_ptr) {
636 (void)POPMARK; /* pop top */
637 LEAVE; /* exit outer scope */
638 (void)POPMARK; /* pop src */
639 items = --*PL_markstack_ptr - PL_markstack_ptr[-1];
640 (void)POPMARK; /* pop dst */
641 SP = PL_stack_base + POPMARK; /* pop original mark */
642 if (gimme == G_SCALAR) {
646 else if (gimme == G_ARRAY)
653 ENTER; /* enter inner scope */
656 src = PL_stack_base[PL_markstack_ptr[-1]];
660 RETURNOP(cLOGOP->op_other);
666 djSP; dMARK; dORIGMARK;
668 SV **myorigmark = ORIGMARK;
674 OP* nextop = PL_op->op_next;
676 if (gimme != G_ARRAY) {
682 SAVEPPTR(PL_sortcop);
683 if (PL_op->op_flags & OPf_STACKED) {
684 if (PL_op->op_flags & OPf_SPECIAL) {
685 OP *kid = cLISTOP->op_first->op_sibling; /* pass pushmark */
686 kid = kUNOP->op_first; /* pass rv2gv */
687 kid = kUNOP->op_first; /* pass leave */
688 PL_sortcop = kid->op_next;
689 stash = PL_curcop->cop_stash;
692 cv = sv_2cv(*++MARK, &stash, &gv, 0);
693 if (!(cv && CvROOT(cv))) {
695 SV *tmpstr = sv_newmortal();
696 gv_efullname3(tmpstr, gv, Nullch);
697 if (cv && CvXSUB(cv))
698 DIE("Xsub \"%s\" called in sort", SvPVX(tmpstr));
699 DIE("Undefined sort subroutine \"%s\" called",
704 DIE("Xsub called in sort");
705 DIE("Undefined subroutine in sort");
707 DIE("Not a CODE reference in sort");
709 PL_sortcop = CvSTART(cv);
710 SAVESPTR(CvROOT(cv)->op_ppaddr);
711 CvROOT(cv)->op_ppaddr = ppaddr[OP_NULL];
714 PL_curpad = AvARRAY((AV*)AvARRAY(CvPADLIST(cv))[1]);
719 stash = PL_curcop->cop_stash;
723 while (MARK < SP) { /* This may or may not shift down one here. */
725 if (*up = *++MARK) { /* Weed out nulls. */
727 if (!PL_sortcop && !SvPOK(*up))
728 (void)sv_2pv(*up, &PL_na);
732 max = --up - myorigmark;
737 bool oldcatch = CATCH_GET;
743 PUSHSTACKi(PERLSI_SORT);
744 if (PL_sortstash != stash) {
745 PL_firstgv = gv_fetchpv("a", TRUE, SVt_PV);
746 PL_secondgv = gv_fetchpv("b", TRUE, SVt_PV);
747 PL_sortstash = stash;
750 SAVESPTR(GvSV(PL_firstgv));
751 SAVESPTR(GvSV(PL_secondgv));
753 PUSHBLOCK(cx, CXt_NULL, PL_stack_base);
754 if (!(PL_op->op_flags & OPf_SPECIAL)) {
755 bool hasargs = FALSE;
756 cx->cx_type = CXt_SUB;
757 cx->blk_gimme = G_SCALAR;
760 (void)SvREFCNT_inc(cv); /* in preparation for POPSUB */
762 PL_sortcxix = cxstack_ix;
763 qsortsv((myorigmark+1), max, FUNC_NAME_TO_PTR(sortcv));
765 POPBLOCK(cx,PL_curpm);
772 MEXTEND(SP, 20); /* Can't afford stack realloc on signal. */
773 qsortsv(ORIGMARK+1, max,
774 (PL_op->op_private & OPpLOCALE)
775 ? FUNC_NAME_TO_PTR(sv_cmp_locale)
776 : FUNC_NAME_TO_PTR(sv_cmp));
780 PL_stack_sp = ORIGMARK + max;
788 if (GIMME == G_ARRAY)
789 return cCONDOP->op_true;
790 return SvTRUEx(PAD_SV(PL_op->op_targ)) ? cCONDOP->op_false : cCONDOP->op_true;
797 if (GIMME == G_ARRAY) {
798 RETURNOP(((CONDOP*)cUNOP->op_first)->op_false);
802 SV *targ = PAD_SV(PL_op->op_targ);
804 if ((PL_op->op_private & OPpFLIP_LINENUM)
805 ? (PL_last_in_gv && SvIV(sv) == (IV)IoLINES(GvIOp(PL_last_in_gv)))
807 sv_setiv(PAD_SV(cUNOP->op_first->op_targ), 1);
808 if (PL_op->op_flags & OPf_SPECIAL) {
816 RETURNOP(((CONDOP*)cUNOP->op_first)->op_false);
829 if (GIMME == G_ARRAY) {
835 if (SvNIOKp(left) || !SvPOKp(left) ||
836 (looks_like_number(left) && *SvPVX(left) != '0') )
838 if (SvNV(left) < IV_MIN || SvNV(right) >= IV_MAX)
839 croak("Range iterator outside integer range");
843 EXTEND_MORTAL(max - i + 1);
844 EXTEND(SP, max - i + 1);
847 sv = sv_2mortal(newSViv(i++));
852 SV *final = sv_mortalcopy(right);
854 char *tmps = SvPV(final, len);
856 sv = sv_mortalcopy(left);
857 SvPV_force(sv,PL_na);
858 while (!SvNIOKp(sv) && SvCUR(sv) <= len) {
860 if (strEQ(SvPVX(sv),tmps))
862 sv = sv_2mortal(newSVsv(sv));
869 SV *targ = PAD_SV(cUNOP->op_first->op_targ);
871 if ((PL_op->op_private & OPpFLIP_LINENUM)
872 ? (PL_last_in_gv && SvIV(sv) == (IV)IoLINES(GvIOp(PL_last_in_gv)))
874 sv_setiv(PAD_SV(((UNOP*)cUNOP->op_first)->op_first->op_targ), 0);
875 sv_catpv(targ, "E0");
886 dopoptolabel(char *label)
890 register PERL_CONTEXT *cx;
892 for (i = cxstack_ix; i >= 0; i--) {
894 switch (CxTYPE(cx)) {
897 warn("Exiting substitution via %s", op_name[PL_op->op_type]);
901 warn("Exiting subroutine via %s", op_name[PL_op->op_type]);
905 warn("Exiting eval via %s", op_name[PL_op->op_type]);
909 warn("Exiting pseudo-block via %s", op_name[PL_op->op_type]);
912 if (!cx->blk_loop.label ||
913 strNE(label, cx->blk_loop.label) ) {
914 DEBUG_l(deb("(Skipping label #%ld %s)\n",
915 (long)i, cx->blk_loop.label));
918 DEBUG_l( deb("(Found label #%ld %s)\n", (long)i, label));
928 I32 gimme = block_gimme();
929 return (gimme == G_VOID) ? G_SCALAR : gimme;
938 cxix = dopoptosub(cxstack_ix);
942 switch (cxstack[cxix].blk_gimme) {
950 croak("panic: bad gimme: %d\n", cxstack[cxix].blk_gimme);
957 dopoptosub(I32 startingblock)
960 return dopoptosub_at(cxstack, startingblock);
964 dopoptosub_at(PERL_CONTEXT *cxstk, I32 startingblock)
968 register PERL_CONTEXT *cx;
969 for (i = startingblock; i >= 0; i--) {
971 switch (CxTYPE(cx)) {
976 DEBUG_l( deb("(Found sub #%ld)\n", (long)i));
984 dopoptoeval(I32 startingblock)
988 register PERL_CONTEXT *cx;
989 for (i = startingblock; i >= 0; i--) {
991 switch (CxTYPE(cx)) {
995 DEBUG_l( deb("(Found eval #%ld)\n", (long)i));
1003 dopoptoloop(I32 startingblock)
1007 register PERL_CONTEXT *cx;
1008 for (i = startingblock; i >= 0; i--) {
1010 switch (CxTYPE(cx)) {
1013 warn("Exiting substitution via %s", op_name[PL_op->op_type]);
1017 warn("Exiting subroutine via %s", op_name[PL_op->op_type]);
1021 warn("Exiting eval via %s", op_name[PL_op->op_type]);
1025 warn("Exiting pseudo-block via %s", op_name[PL_op->op_type]);
1028 DEBUG_l( deb("(Found loop #%ld)\n", (long)i));
1039 register PERL_CONTEXT *cx;
1043 while (cxstack_ix > cxix) {
1044 cx = &cxstack[cxstack_ix];
1045 DEBUG_l(PerlIO_printf(Perl_debug_log, "Unwinding block %ld, type %s\n",
1046 (long) cxstack_ix, block_type[CxTYPE(cx)]));
1047 /* Note: we don't need to restore the base context info till the end. */
1048 switch (CxTYPE(cx)) {
1051 continue; /* not break */
1069 die_where(char *message)
1074 register PERL_CONTEXT *cx;
1079 if (PL_in_eval & 4) {
1081 STRLEN klen = strlen(message);
1083 svp = hv_fetch(ERRHV, message, klen, TRUE);
1086 static char prefix[] = "\t(in cleanup) ";
1088 sv_upgrade(*svp, SVt_IV);
1089 (void)SvIOK_only(*svp);
1092 SvGROW(err, SvCUR(err)+sizeof(prefix)+klen);
1093 sv_catpvn(err, prefix, sizeof(prefix)-1);
1094 sv_catpvn(err, message, klen);
1100 sv_setpv(ERRSV, message);
1103 message = SvPVx(ERRSV, PL_na);
1105 while ((cxix = dopoptoeval(cxstack_ix)) < 0 && PL_curstackinfo->si_prev) {
1113 if (cxix < cxstack_ix)
1116 POPBLOCK(cx,PL_curpm);
1117 if (CxTYPE(cx) != CXt_EVAL) {
1118 PerlIO_printf(PerlIO_stderr(), "panic: die %s", message);
1123 if (gimme == G_SCALAR)
1124 *++newsp = &PL_sv_undef;
1125 PL_stack_sp = newsp;
1129 if (optype == OP_REQUIRE) {
1130 char* msg = SvPVx(ERRSV, PL_na);
1131 DIE("%s", *msg ? msg : "Compilation failed in require");
1133 return pop_return();
1137 message = SvPVx(ERRSV, PL_na);
1138 PerlIO_printf(PerlIO_stderr(), "%s",message);
1139 PerlIO_flush(PerlIO_stderr());
1148 if (SvTRUE(left) != SvTRUE(right))
1160 RETURNOP(cLOGOP->op_other);
1169 RETURNOP(cLOGOP->op_other);
1175 register I32 cxix = dopoptosub(cxstack_ix);
1176 register PERL_CONTEXT *cx;
1177 register PERL_CONTEXT *ccstack = cxstack;
1178 PERL_SI *top_si = PL_curstackinfo;
1189 /* we may be in a higher stacklevel, so dig down deeper */
1190 while (cxix < 0 && top_si->si_type != PERLSI_MAIN) {
1191 top_si = top_si->si_prev;
1192 ccstack = top_si->si_cxstack;
1193 cxix = dopoptosub_at(ccstack, top_si->si_cxix);
1196 if (GIMME != G_ARRAY)
1200 if (PL_DBsub && cxix >= 0 &&
1201 ccstack[cxix].blk_sub.cv == GvCV(PL_DBsub))
1205 cxix = dopoptosub_at(ccstack, cxix - 1);
1208 cx = &ccstack[cxix];
1209 if (CxTYPE(cx) == CXt_SUB) {
1210 dbcxix = dopoptosub_at(ccstack, cxix - 1);
1211 /* We expect that ccstack[dbcxix] is CXt_SUB, anyway, the
1212 field below is defined for any cx. */
1213 if (PL_DBsub && dbcxix >= 0 && ccstack[dbcxix].blk_sub.cv == GvCV(PL_DBsub))
1214 cx = &ccstack[dbcxix];
1217 if (GIMME != G_ARRAY) {
1218 hv = cx->blk_oldcop->cop_stash;
1220 PUSHs(&PL_sv_undef);
1223 sv_setpv(TARG, HvNAME(hv));
1229 hv = cx->blk_oldcop->cop_stash;
1231 PUSHs(&PL_sv_undef);
1233 PUSHs(sv_2mortal(newSVpv(HvNAME(hv), 0)));
1234 PUSHs(sv_2mortal(newSVpv(SvPVX(GvSV(cx->blk_oldcop->cop_filegv)), 0)));
1235 PUSHs(sv_2mortal(newSViv((I32)cx->blk_oldcop->cop_line)));
1238 if (CxTYPE(cx) == CXt_SUB) { /* So is ccstack[dbcxix]. */
1240 gv_efullname3(sv, CvGV(ccstack[cxix].blk_sub.cv), Nullch);
1241 PUSHs(sv_2mortal(sv));
1242 PUSHs(sv_2mortal(newSViv((I32)cx->blk_sub.hasargs)));
1245 PUSHs(sv_2mortal(newSVpv("(eval)",0)));
1246 PUSHs(sv_2mortal(newSViv(0)));
1248 gimme = (I32)cx->blk_gimme;
1249 if (gimme == G_VOID)
1250 PUSHs(&PL_sv_undef);
1252 PUSHs(sv_2mortal(newSViv(gimme & G_ARRAY)));
1253 if (CxTYPE(cx) == CXt_EVAL) {
1254 if (cx->blk_eval.old_op_type == OP_ENTEREVAL) {
1255 PUSHs(cx->blk_eval.cur_text);
1258 else if (cx->blk_eval.old_name) { /* Try blocks have old_name == 0. */
1259 /* Require, put the name. */
1260 PUSHs(sv_2mortal(newSVpv(cx->blk_eval.old_name, 0)));
1264 else if (CxTYPE(cx) == CXt_SUB &&
1265 cx->blk_sub.hasargs &&
1266 PL_curcop->cop_stash == PL_debstash)
1268 AV *ary = cx->blk_sub.argarray;
1269 int off = AvARRAY(ary) - AvALLOC(ary);
1273 PL_dbargs = GvAV(gv_AVadd(tmpgv = gv_fetchpv("DB::args", TRUE,
1276 AvREAL_off(PL_dbargs); /* XXX Should be REIFY */
1279 if (AvMAX(PL_dbargs) < AvFILLp(ary) + off)
1280 av_extend(PL_dbargs, AvFILLp(ary) + off);
1281 Copy(AvALLOC(ary), AvARRAY(PL_dbargs), AvFILLp(ary) + 1 + off, SV*);
1282 AvFILLp(PL_dbargs) = AvFILLp(ary) + off;
1288 sortcv(SV *a, SV *b)
1291 I32 oldsaveix = PL_savestack_ix;
1292 I32 oldscopeix = PL_scopestack_ix;
1294 GvSV(PL_firstgv) = a;
1295 GvSV(PL_secondgv) = b;
1296 PL_stack_sp = PL_stack_base;
1299 if (PL_stack_sp != PL_stack_base + 1)
1300 croak("Sort subroutine didn't return single value");
1301 if (!SvNIOKp(*PL_stack_sp))
1302 croak("Sort subroutine didn't return a numeric value");
1303 result = SvIV(*PL_stack_sp);
1304 while (PL_scopestack_ix > oldscopeix) {
1307 leave_scope(oldsaveix);
1320 sv_reset(tmps, PL_curcop->cop_stash);
1332 PL_curcop = (COP*)PL_op;
1333 TAINT_NOT; /* Each statement is presumed innocent */
1334 PL_stack_sp = PL_stack_base + cxstack[cxstack_ix].blk_oldsp;
1337 if (PL_op->op_private || SvIV(PL_DBsingle) || SvIV(PL_DBsignal) || SvIV(PL_DBtrace))
1341 register PERL_CONTEXT *cx;
1342 I32 gimme = G_ARRAY;
1349 DIE("No DB::DB routine defined");
1351 if (CvDEPTH(cv) >= 1 && !(PL_debug & (1<<30))) /* don't do recursive DB::DB call */
1363 push_return(PL_op->op_next);
1364 PUSHBLOCK(cx, CXt_SUB, SP);
1367 (void)SvREFCNT_inc(cv);
1368 SAVESPTR(PL_curpad);
1369 PL_curpad = AvARRAY((AV*)*av_fetch(CvPADLIST(cv),1,FALSE));
1370 RETURNOP(CvSTART(cv));
1384 register PERL_CONTEXT *cx;
1385 I32 gimme = GIMME_V;
1392 if (PL_op->op_flags & OPf_SPECIAL)
1393 svp = save_threadsv(PL_op->op_targ); /* per-thread variable */
1395 #endif /* USE_THREADS */
1396 if (PL_op->op_targ) {
1397 svp = &PL_curpad[PL_op->op_targ]; /* "my" variable */
1402 (void)save_scalar(gv);
1403 svp = &GvSV(gv); /* symbol table variable */
1408 PUSHBLOCK(cx, CXt_LOOP, SP);
1409 PUSHLOOP(cx, svp, MARK);
1410 if (PL_op->op_flags & OPf_STACKED) {
1411 cx->blk_loop.iterary = (AV*)SvREFCNT_inc(POPs);
1412 if (SvTYPE(cx->blk_loop.iterary) != SVt_PVAV) {
1414 if (SvNIOKp(sv) || !SvPOKp(sv) ||
1415 (looks_like_number(sv) && *SvPVX(sv) != '0')) {
1416 if (SvNV(sv) < IV_MIN ||
1417 SvNV((SV*)cx->blk_loop.iterary) >= IV_MAX)
1418 croak("Range iterator outside integer range");
1419 cx->blk_loop.iterix = SvIV(sv);
1420 cx->blk_loop.itermax = SvIV((SV*)cx->blk_loop.iterary);
1423 cx->blk_loop.iterlval = newSVsv(sv);
1427 cx->blk_loop.iterary = PL_curstack;
1428 AvFILLp(PL_curstack) = SP - PL_stack_base;
1429 cx->blk_loop.iterix = MARK - PL_stack_base;
1438 register PERL_CONTEXT *cx;
1439 I32 gimme = GIMME_V;
1445 PUSHBLOCK(cx, CXt_LOOP, SP);
1446 PUSHLOOP(cx, 0, SP);
1454 register PERL_CONTEXT *cx;
1455 struct block_loop cxloop;
1463 POPLOOP1(cx); /* Delay POPLOOP2 until stack values are safe */
1466 if (gimme == G_VOID)
1468 else if (gimme == G_SCALAR) {
1470 *++newsp = sv_mortalcopy(*SP);
1472 *++newsp = &PL_sv_undef;
1476 *++newsp = sv_mortalcopy(*++mark);
1477 TAINT_NOT; /* Each item is independent */
1483 POPLOOP2(); /* Stack values are safe: release loop vars ... */
1484 PL_curpm = newpm; /* ... and pop $1 et al */
1496 register PERL_CONTEXT *cx;
1497 struct block_sub cxsub;
1498 bool popsub2 = FALSE;
1504 if (PL_curstackinfo->si_type == PERLSI_SORT) {
1505 if (cxstack_ix == PL_sortcxix || dopoptosub(cxstack_ix) <= PL_sortcxix) {
1506 if (cxstack_ix > PL_sortcxix)
1507 dounwind(PL_sortcxix);
1508 AvARRAY(PL_curstack)[1] = *SP;
1509 PL_stack_sp = PL_stack_base + 1;
1514 cxix = dopoptosub(cxstack_ix);
1516 DIE("Can't return outside a subroutine");
1517 if (cxix < cxstack_ix)
1521 switch (CxTYPE(cx)) {
1523 POPSUB1(cx); /* Delay POPSUB2 until stack values are safe */
1528 if (optype == OP_REQUIRE &&
1529 (MARK == SP || (gimme == G_SCALAR && !SvTRUE(*SP))) )
1531 /* Unassume the success we assumed earlier. */
1532 char *name = cx->blk_eval.old_name;
1533 (void)hv_delete(GvHVn(PL_incgv), name, strlen(name), G_DISCARD);
1534 DIE("%s did not return a true value", name);
1538 DIE("panic: return");
1542 if (gimme == G_SCALAR) {
1545 if (cxsub.cv && CvDEPTH(cxsub.cv) > 1) {
1547 *++newsp = SvREFCNT_inc(*SP);
1552 *++newsp = sv_mortalcopy(*SP);
1555 *++newsp = (SvTEMP(*SP)) ? *SP : sv_mortalcopy(*SP);
1557 *++newsp = sv_mortalcopy(*SP);
1559 *++newsp = &PL_sv_undef;
1561 else if (gimme == G_ARRAY) {
1562 while (++MARK <= SP) {
1563 *++newsp = (popsub2 && SvTEMP(*MARK))
1564 ? *MARK : sv_mortalcopy(*MARK);
1565 TAINT_NOT; /* Each item is independent */
1568 PL_stack_sp = newsp;
1570 /* Stack values are safe: */
1572 POPSUB2(); /* release CV and @_ ... */
1574 PL_curpm = newpm; /* ... and pop $1 et al */
1577 return pop_return();
1584 register PERL_CONTEXT *cx;
1585 struct block_loop cxloop;
1586 struct block_sub cxsub;
1593 SV **mark = PL_stack_base + cxstack[cxstack_ix].blk_oldsp;
1595 if (PL_op->op_flags & OPf_SPECIAL) {
1596 cxix = dopoptoloop(cxstack_ix);
1598 DIE("Can't \"last\" outside a block");
1601 cxix = dopoptolabel(cPVOP->op_pv);
1603 DIE("Label not found for \"last %s\"", cPVOP->op_pv);
1605 if (cxix < cxstack_ix)
1609 switch (CxTYPE(cx)) {
1611 POPLOOP1(cx); /* Delay POPLOOP2 until stack values are safe */
1613 nextop = cxloop.last_op->op_next;
1616 POPSUB1(cx); /* Delay POPSUB2 until stack values are safe */
1618 nextop = pop_return();
1622 nextop = pop_return();
1629 if (gimme == G_SCALAR) {
1631 *++newsp = ((pop2 == CXt_SUB) && SvTEMP(*SP))
1632 ? *SP : sv_mortalcopy(*SP);
1634 *++newsp = &PL_sv_undef;
1636 else if (gimme == G_ARRAY) {
1637 while (++MARK <= SP) {
1638 *++newsp = ((pop2 == CXt_SUB) && SvTEMP(*MARK))
1639 ? *MARK : sv_mortalcopy(*MARK);
1640 TAINT_NOT; /* Each item is independent */
1646 /* Stack values are safe: */
1649 POPLOOP2(); /* release loop vars ... */
1653 POPSUB2(); /* release CV and @_ ... */
1656 PL_curpm = newpm; /* ... and pop $1 et al */
1665 register PERL_CONTEXT *cx;
1668 if (PL_op->op_flags & OPf_SPECIAL) {
1669 cxix = dopoptoloop(cxstack_ix);
1671 DIE("Can't \"next\" outside a block");
1674 cxix = dopoptolabel(cPVOP->op_pv);
1676 DIE("Label not found for \"next %s\"", cPVOP->op_pv);
1678 if (cxix < cxstack_ix)
1682 oldsave = PL_scopestack[PL_scopestack_ix - 1];
1683 LEAVE_SCOPE(oldsave);
1684 return cx->blk_loop.next_op;
1690 register PERL_CONTEXT *cx;
1693 if (PL_op->op_flags & OPf_SPECIAL) {
1694 cxix = dopoptoloop(cxstack_ix);
1696 DIE("Can't \"redo\" outside a block");
1699 cxix = dopoptolabel(cPVOP->op_pv);
1701 DIE("Label not found for \"redo %s\"", cPVOP->op_pv);
1703 if (cxix < cxstack_ix)
1707 oldsave = PL_scopestack[PL_scopestack_ix - 1];
1708 LEAVE_SCOPE(oldsave);
1709 return cx->blk_loop.redo_op;
1713 dofindlabel(OP *o, char *label, OP **opstack, OP **oplimit)
1717 static char too_deep[] = "Target of goto is too deeply nested";
1721 if (o->op_type == OP_LEAVE ||
1722 o->op_type == OP_SCOPE ||
1723 o->op_type == OP_LEAVELOOP ||
1724 o->op_type == OP_LEAVETRY)
1726 *ops++ = cUNOPo->op_first;
1731 if (o->op_flags & OPf_KIDS) {
1733 /* First try all the kids at this level, since that's likeliest. */
1734 for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling) {
1735 if ((kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) &&
1736 kCOP->cop_label && strEQ(kCOP->cop_label, label))
1739 for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling) {
1740 if (kid == PL_lastgotoprobe)
1742 if ((kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) &&
1744 (ops[-1]->op_type != OP_NEXTSTATE &&
1745 ops[-1]->op_type != OP_DBSTATE)))
1747 if (o = dofindlabel(kid, label, ops, oplimit))
1757 return pp_goto(ARGS);
1766 register PERL_CONTEXT *cx;
1767 #define GOTO_DEPTH 64
1768 OP *enterops[GOTO_DEPTH];
1770 int do_dump = (PL_op->op_type == OP_DUMP);
1773 if (PL_op->op_flags & OPf_STACKED) {
1776 /* This egregious kludge implements goto &subroutine */
1777 if (SvROK(sv) && SvTYPE(SvRV(sv)) == SVt_PVCV) {
1779 register PERL_CONTEXT *cx;
1780 CV* cv = (CV*)SvRV(sv);
1784 int arg_was_real = 0;
1787 if (!CvROOT(cv) && !CvXSUB(cv)) {
1792 /* autoloaded stub? */
1793 if (cv != GvCV(gv) && (cv = GvCV(gv)))
1795 autogv = gv_autoload4(GvSTASH(gv), GvNAME(gv),
1796 GvNAMELEN(gv), FALSE);
1797 if (autogv && (cv = GvCV(autogv)))
1799 tmpstr = sv_newmortal();
1800 gv_efullname3(tmpstr, gv, Nullch);
1801 DIE("Goto undefined subroutine &%s",SvPVX(tmpstr));
1803 DIE("Goto undefined subroutine");
1806 /* First do some returnish stuff. */
1807 cxix = dopoptosub(cxstack_ix);
1809 DIE("Can't goto subroutine outside a subroutine");
1810 if (cxix < cxstack_ix)
1813 if (CxTYPE(cx) == CXt_EVAL && cx->blk_eval.old_op_type == OP_ENTEREVAL)
1814 DIE("Can't goto subroutine from an eval-string");
1816 if (CxTYPE(cx) == CXt_SUB &&
1817 cx->blk_sub.hasargs) { /* put @_ back onto stack */
1818 AV* av = cx->blk_sub.argarray;
1820 items = AvFILLp(av) + 1;
1822 EXTEND(PL_stack_sp, items); /* @_ could have been extended. */
1823 Copy(AvARRAY(av), PL_stack_sp, items, SV*);
1824 PL_stack_sp += items;
1826 SvREFCNT_dec(GvAV(PL_defgv));
1827 GvAV(PL_defgv) = cx->blk_sub.savearray;
1828 #endif /* USE_THREADS */
1831 AvREAL_off(av); /* so av_clear() won't clobber elts */
1835 else if (CvXSUB(cv)) { /* put GvAV(defgv) back onto stack */
1839 av = (AV*)PL_curpad[0];
1841 av = GvAV(PL_defgv);
1843 items = AvFILLp(av) + 1;
1845 EXTEND(PL_stack_sp, items); /* @_ could have been extended. */
1846 Copy(AvARRAY(av), PL_stack_sp, items, SV*);
1847 PL_stack_sp += items;
1849 if (CxTYPE(cx) == CXt_SUB &&
1850 !(CvDEPTH(cx->blk_sub.cv) = cx->blk_sub.olddepth))
1851 SvREFCNT_dec(cx->blk_sub.cv);
1852 oldsave = PL_scopestack[PL_scopestack_ix - 1];
1853 LEAVE_SCOPE(oldsave);
1855 /* Now do some callish stuff. */
1858 if (CvOLDSTYLE(cv)) {
1859 I32 (*fp3)_((int,int,int));
1864 fp3 = (I32(*)_((int,int,int)))CvXSUB(cv);
1865 items = (*fp3)(CvXSUBANY(cv).any_i32,
1866 mark - PL_stack_base + 1,
1868 SP = PL_stack_base + items;
1874 PL_stack_sp--; /* There is no cv arg. */
1875 /* Push a mark for the start of arglist */
1877 (void)(*CvXSUB(cv))(cv _PERL_OBJECT_THIS);
1878 /* Pop the current context like a decent sub should */
1879 POPBLOCK(cx, PL_curpm);
1880 /* Do _not_ use PUTBACK, keep the XSUB's return stack! */
1883 return pop_return();
1886 AV* padlist = CvPADLIST(cv);
1887 SV** svp = AvARRAY(padlist);
1888 if (CxTYPE(cx) == CXt_EVAL) {
1889 PL_in_eval = cx->blk_eval.old_in_eval;
1890 PL_eval_root = cx->blk_eval.old_eval_root;
1891 cx->cx_type = CXt_SUB;
1892 cx->blk_sub.hasargs = 0;
1894 cx->blk_sub.cv = cv;
1895 cx->blk_sub.olddepth = CvDEPTH(cv);
1897 if (CvDEPTH(cv) < 2)
1898 (void)SvREFCNT_inc(cv);
1899 else { /* save temporaries on recursion? */
1900 if (CvDEPTH(cv) == 100 && PL_dowarn)
1901 sub_crush_depth(cv);
1902 if (CvDEPTH(cv) > AvFILLp(padlist)) {
1903 AV *newpad = newAV();
1904 SV **oldpad = AvARRAY(svp[CvDEPTH(cv)-1]);
1905 I32 ix = AvFILLp((AV*)svp[1]);
1906 svp = AvARRAY(svp[0]);
1907 for ( ;ix > 0; ix--) {
1908 if (svp[ix] != &PL_sv_undef) {
1909 char *name = SvPVX(svp[ix]);
1910 if ((SvFLAGS(svp[ix]) & SVf_FAKE)
1913 /* outer lexical or anon code */
1914 av_store(newpad, ix,
1915 SvREFCNT_inc(oldpad[ix]) );
1917 else { /* our own lexical */
1919 av_store(newpad, ix, sv = (SV*)newAV());
1920 else if (*name == '%')
1921 av_store(newpad, ix, sv = (SV*)newHV());
1923 av_store(newpad, ix, sv = NEWSV(0,0));
1928 av_store(newpad, ix, sv = NEWSV(0,0));
1932 if (cx->blk_sub.hasargs) {
1935 av_store(newpad, 0, (SV*)av);
1936 AvFLAGS(av) = AVf_REIFY;
1938 av_store(padlist, CvDEPTH(cv), (SV*)newpad);
1939 AvFILLp(padlist) = CvDEPTH(cv);
1940 svp = AvARRAY(padlist);
1944 if (!cx->blk_sub.hasargs) {
1945 AV* av = (AV*)PL_curpad[0];
1947 items = AvFILLp(av) + 1;
1949 /* Mark is at the end of the stack. */
1951 Copy(AvARRAY(av), SP + 1, items, SV*);
1956 #endif /* USE_THREADS */
1957 SAVESPTR(PL_curpad);
1958 PL_curpad = AvARRAY((AV*)svp[CvDEPTH(cv)]);
1960 if (cx->blk_sub.hasargs)
1961 #endif /* USE_THREADS */
1963 AV* av = (AV*)PL_curpad[0];
1967 cx->blk_sub.savearray = GvAV(PL_defgv);
1968 GvAV(PL_defgv) = (AV*)SvREFCNT_inc(av);
1969 #endif /* USE_THREADS */
1970 cx->blk_sub.argarray = av;
1973 if (items >= AvMAX(av) + 1) {
1975 if (AvARRAY(av) != ary) {
1976 AvMAX(av) += AvARRAY(av) - AvALLOC(av);
1977 SvPVX(av) = (char*)ary;
1979 if (items >= AvMAX(av) + 1) {
1980 AvMAX(av) = items - 1;
1981 Renew(ary,items+1,SV*);
1983 SvPVX(av) = (char*)ary;
1986 Copy(mark,AvARRAY(av),items,SV*);
1987 AvFILLp(av) = items - 1;
1988 /* preserve @_ nature */
1999 if (PERLDB_SUB) { /* Checking curstash breaks DProf. */
2001 * We do not care about using sv to call CV;
2002 * it's for informational purposes only.
2004 SV *sv = GvSV(PL_DBsub);
2007 if (PERLDB_SUB_NN) {
2008 SvIVX(sv) = (IV)cv; /* Already upgraded, saved */
2011 gv_efullname3(sv, CvGV(cv), Nullch);
2014 && (gotocv = perl_get_cv("DB::goto", FALSE)) ) {
2015 PUSHMARK( PL_stack_sp );
2016 perl_call_sv((SV*)gotocv, G_SCALAR | G_NODEBUG);
2020 RETURNOP(CvSTART(cv));
2024 label = SvPV(sv,PL_na);
2026 else if (PL_op->op_flags & OPf_SPECIAL) {
2028 DIE("goto must have label");
2031 label = cPVOP->op_pv;
2033 if (label && *label) {
2038 PL_lastgotoprobe = 0;
2040 for (ix = cxstack_ix; ix >= 0; ix--) {
2042 switch (CxTYPE(cx)) {
2044 gotoprobe = PL_eval_root; /* XXX not good for nested eval */
2047 gotoprobe = cx->blk_oldcop->op_sibling;
2053 gotoprobe = cx->blk_oldcop->op_sibling;
2055 gotoprobe = PL_main_root;
2058 if (CvDEPTH(cx->blk_sub.cv)) {
2059 gotoprobe = CvROOT(cx->blk_sub.cv);
2064 DIE("Can't \"goto\" outside a block");
2068 gotoprobe = PL_main_root;
2071 retop = dofindlabel(gotoprobe, label,
2072 enterops, enterops + GOTO_DEPTH);
2075 PL_lastgotoprobe = gotoprobe;
2078 DIE("Can't find label %s", label);
2080 /* pop unwanted frames */
2082 if (ix < cxstack_ix) {
2089 oldsave = PL_scopestack[PL_scopestack_ix];
2090 LEAVE_SCOPE(oldsave);
2093 /* push wanted frames */
2095 if (*enterops && enterops[1]) {
2097 for (ix = 1; enterops[ix]; ix++) {
2098 PL_op = enterops[ix];
2099 /* Eventually we may want to stack the needed arguments
2100 * for each op. For now, we punt on the hard ones. */
2101 if (PL_op->op_type == OP_ENTERITER)
2102 DIE("Can't \"goto\" into the middle of a foreach loop",
2104 (CALLOP->op_ppaddr)(ARGS);
2112 if (!retop) retop = PL_main_start;
2114 PL_restartop = retop;
2115 PL_do_undump = TRUE;
2119 PL_restartop = 0; /* hmm, must be GNU unexec().. */
2120 PL_do_undump = FALSE;
2136 if (anum == 1 && VMSISH_EXIT)
2141 PUSHs(&PL_sv_undef);
2149 double value = SvNVx(GvSV(cCOP->cop_gv));
2150 register I32 match = I_32(value);
2153 if (((double)match) > value)
2154 --match; /* was fractional--truncate other way */
2156 match -= cCOP->uop.scop.scop_offset;
2159 else if (match > cCOP->uop.scop.scop_max)
2160 match = cCOP->uop.scop.scop_max;
2161 PL_op = cCOP->uop.scop.scop_next[match];
2171 PL_op = PL_op->op_next; /* can't assume anything */
2173 match = *(SvPVx(GvSV(cCOP->cop_gv), PL_na)) & 255;
2174 match -= cCOP->uop.scop.scop_offset;
2177 else if (match > cCOP->uop.scop.scop_max)
2178 match = cCOP->uop.scop.scop_max;
2179 PL_op = cCOP->uop.scop.scop_next[match];
2188 save_lines(AV *array, SV *sv)
2190 register char *s = SvPVX(sv);
2191 register char *send = SvPVX(sv) + SvCUR(sv);
2193 register I32 line = 1;
2195 while (s && s < send) {
2196 SV *tmpstr = NEWSV(85,0);
2198 sv_upgrade(tmpstr, SVt_PVMG);
2199 t = strchr(s, '\n');
2205 sv_setpvn(tmpstr, s, t - s);
2206 av_store(array, line++, tmpstr);
2221 assert(CATCH_GET == TRUE);
2222 DEBUG_l(deb("Setting up local jumplevel %p, was %p\n", &cur_env, PL_top_env));
2226 default: /* topmost level handles it */
2235 PL_op = PL_restartop;
2248 sv_compile_2op(SV *sv, OP** startop, char *code, AV** avp)
2249 /* sv Text to convert to OP tree. */
2250 /* startop op_free() this to undo. */
2251 /* code Short string id of the caller. */
2253 dSP; /* Make POPBLOCK work. */
2256 I32 gimme = 0; /* SUSPECT - INITIALZE TO WHAT? NI-S */
2259 OP *oop = PL_op, *rop;
2260 char tmpbuf[TYPE_DIGITS(long) + 12 + 10];
2266 /* switch to eval mode */
2268 if (PL_curcop == &PL_compiling) {
2269 SAVESPTR(PL_compiling.cop_stash);
2270 PL_compiling.cop_stash = PL_curstash;
2272 SAVESPTR(PL_compiling.cop_filegv);
2273 SAVEI16(PL_compiling.cop_line);
2274 sprintf(tmpbuf, "_<(%.10s_eval %lu)", code, (unsigned long)++PL_evalseq);
2275 PL_compiling.cop_filegv = gv_fetchfile(tmpbuf+2);
2276 PL_compiling.cop_line = 1;
2277 /* XXX For C<eval "...">s within BEGIN {} blocks, this ends up
2278 deleting the eval's FILEGV from the stash before gv_check() runs
2279 (i.e. before run-time proper). To work around the coredump that
2280 ensues, we always turn GvMULTI_on for any globals that were
2281 introduced within evals. See force_ident(). GSAR 96-10-12 */
2282 safestr = savepv(tmpbuf);
2283 SAVEDELETE(PL_defstash, safestr, strlen(safestr));
2285 #ifdef OP_IN_REGISTER
2293 PL_op->op_type = 0; /* Avoid uninit warning. */
2294 PL_op->op_flags = 0; /* Avoid uninit warning. */
2295 PUSHBLOCK(cx, CXt_EVAL, SP);
2296 PUSHEVAL(cx, 0, PL_compiling.cop_filegv);
2297 rop = doeval(G_SCALAR, startop);
2298 POPBLOCK(cx,PL_curpm);
2301 (*startop)->op_type = OP_NULL;
2302 (*startop)->op_ppaddr = ppaddr[OP_NULL];
2304 *avp = (AV*)SvREFCNT_inc(PL_comppad);
2306 #ifdef OP_IN_REGISTER
2312 /* With USE_THREADS, eval_owner must be held on entry to doeval */
2314 doeval(int gimme, OP** startop)
2327 /* set up a scratch pad */
2330 SAVESPTR(PL_curpad);
2331 SAVESPTR(PL_comppad);
2332 SAVESPTR(PL_comppad_name);
2333 SAVEI32(PL_comppad_name_fill);
2334 SAVEI32(PL_min_intro_pending);
2335 SAVEI32(PL_max_intro_pending);
2338 for (i = cxstack_ix - 1; i >= 0; i--) {
2339 PERL_CONTEXT *cx = &cxstack[i];
2340 if (CxTYPE(cx) == CXt_EVAL)
2342 else if (CxTYPE(cx) == CXt_SUB) {
2343 caller = cx->blk_sub.cv;
2348 SAVESPTR(PL_compcv);
2349 PL_compcv = (CV*)NEWSV(1104,0);
2350 sv_upgrade((SV *)PL_compcv, SVt_PVCV);
2351 CvUNIQUE_on(PL_compcv);
2353 CvOWNER(PL_compcv) = 0;
2354 New(666, CvMUTEXP(PL_compcv), 1, perl_mutex);
2355 MUTEX_INIT(CvMUTEXP(PL_compcv));
2356 #endif /* USE_THREADS */
2358 PL_comppad = newAV();
2359 av_push(PL_comppad, Nullsv);
2360 PL_curpad = AvARRAY(PL_comppad);
2361 PL_comppad_name = newAV();
2362 PL_comppad_name_fill = 0;
2363 PL_min_intro_pending = 0;
2366 av_store(PL_comppad_name, 0, newSVpv("@_", 2));
2367 PL_curpad[0] = (SV*)newAV();
2368 SvPADMY_on(PL_curpad[0]); /* XXX Needed? */
2369 #endif /* USE_THREADS */
2371 comppadlist = newAV();
2372 AvREAL_off(comppadlist);
2373 av_store(comppadlist, 0, (SV*)PL_comppad_name);
2374 av_store(comppadlist, 1, (SV*)PL_comppad);
2375 CvPADLIST(PL_compcv) = comppadlist;
2377 if (!saveop || saveop->op_type != OP_REQUIRE)
2378 CvOUTSIDE(PL_compcv) = (CV*)SvREFCNT_inc(caller);
2380 SAVEFREESV(PL_compcv);
2382 /* make sure we compile in the right package */
2384 newstash = PL_curcop->cop_stash;
2385 if (PL_curstash != newstash) {
2386 SAVESPTR(PL_curstash);
2387 PL_curstash = newstash;
2389 SAVESPTR(PL_beginav);
2390 PL_beginav = newAV();
2391 SAVEFREESV(PL_beginav);
2393 /* try to compile it */
2395 PL_eval_root = Nullop;
2397 PL_curcop = &PL_compiling;
2398 PL_curcop->cop_arybase = 0;
2399 SvREFCNT_dec(PL_rs);
2400 PL_rs = newSVpv("\n", 1);
2401 if (saveop && saveop->op_flags & OPf_SPECIAL)
2405 if (yyparse() || PL_error_count || !PL_eval_root) {
2409 I32 optype = 0; /* Might be reset by POPEVAL. */
2413 op_free(PL_eval_root);
2414 PL_eval_root = Nullop;
2416 SP = PL_stack_base + POPMARK; /* pop original mark */
2418 POPBLOCK(cx,PL_curpm);
2424 if (optype == OP_REQUIRE) {
2425 char* msg = SvPVx(ERRSV, PL_na);
2426 DIE("%s", *msg ? msg : "Compilation failed in require");
2427 } else if (startop) {
2428 char* msg = SvPVx(ERRSV, PL_na);
2430 POPBLOCK(cx,PL_curpm);
2432 croak("%sCompilation failed in regexp", (*msg ? msg : "Unknown error\n"));
2434 SvREFCNT_dec(PL_rs);
2435 PL_rs = SvREFCNT_inc(PL_nrs);
2437 MUTEX_LOCK(&PL_eval_mutex);
2439 COND_SIGNAL(&PL_eval_cond);
2440 MUTEX_UNLOCK(&PL_eval_mutex);
2441 #endif /* USE_THREADS */
2444 SvREFCNT_dec(PL_rs);
2445 PL_rs = SvREFCNT_inc(PL_nrs);
2446 PL_compiling.cop_line = 0;
2448 *startop = PL_eval_root;
2449 SvREFCNT_dec(CvOUTSIDE(PL_compcv));
2450 CvOUTSIDE(PL_compcv) = Nullcv;
2452 SAVEFREEOP(PL_eval_root);
2454 scalarvoid(PL_eval_root);
2455 else if (gimme & G_ARRAY)
2458 scalar(PL_eval_root);
2460 DEBUG_x(dump_eval());
2462 /* Register with debugger: */
2463 if (PERLDB_INTER && saveop->op_type == OP_REQUIRE) {
2464 CV *cv = perl_get_cv("DB::postponed", FALSE);
2468 XPUSHs((SV*)PL_compiling.cop_filegv);
2470 perl_call_sv((SV*)cv, G_DISCARD);
2474 /* compiled okay, so do it */
2476 CvDEPTH(PL_compcv) = 1;
2477 SP = PL_stack_base + POPMARK; /* pop original mark */
2478 PL_op = saveop; /* The caller may need it. */
2480 MUTEX_LOCK(&PL_eval_mutex);
2482 COND_SIGNAL(&PL_eval_cond);
2483 MUTEX_UNLOCK(&PL_eval_mutex);
2484 #endif /* USE_THREADS */
2486 RETURNOP(PL_eval_start);
2492 register PERL_CONTEXT *cx;
2497 SV *namesv = Nullsv;
2499 I32 gimme = G_SCALAR;
2500 PerlIO *tryrsfp = 0;
2503 if (SvNIOKp(sv) && !SvPOKp(sv)) {
2504 SET_NUMERIC_STANDARD();
2505 if (atof(PL_patchlevel) + 0.00000999 < SvNV(sv))
2506 DIE("Perl %s required--this is only version %s, stopped",
2507 SvPV(sv,PL_na),PL_patchlevel);
2510 name = SvPV(sv, len);
2511 if (!(name && len > 0 && *name))
2512 DIE("Null filename used");
2513 TAINT_PROPER("require");
2514 if (PL_op->op_type == OP_REQUIRE &&
2515 (svp = hv_fetch(GvHVn(PL_incgv), name, len, 0)) &&
2516 *svp != &PL_sv_undef)
2519 /* prepare to compile file */
2524 (name[1] == '.' && name[2] == '/')))
2526 || (name[0] && name[1] == ':')
2529 || (name[0] == '\\' && name[1] == '\\') /* UNC path */
2532 || (strchr(name,':') || ((*name == '[' || *name == '<') &&
2533 (isALNUM(name[1]) || strchr("$-_]>",name[1]))))
2538 tryrsfp = PerlIO_open(name,PERL_SCRIPT_MODE);
2541 AV *ar = GvAVn(PL_incgv);
2545 if ((unixname = tounixspec(name, Nullch)) != Nullch)
2548 namesv = NEWSV(806, 0);
2549 for (i = 0; i <= AvFILL(ar); i++) {
2550 char *dir = SvPVx(*av_fetch(ar, i, TRUE), PL_na);
2553 if ((unixdir = tounixpath(dir, Nullch)) == Nullch)
2555 sv_setpv(namesv, unixdir);
2556 sv_catpv(namesv, unixname);
2558 sv_setpvf(namesv, "%s/%s", dir, name);
2560 TAINT_PROPER("require");
2561 tryname = SvPVX(namesv);
2562 tryrsfp = PerlIO_open(tryname, PERL_SCRIPT_MODE);
2564 if (tryname[0] == '.' && tryname[1] == '/')
2571 SAVESPTR(PL_compiling.cop_filegv);
2572 PL_compiling.cop_filegv = gv_fetchfile(tryrsfp ? tryname : name);
2573 SvREFCNT_dec(namesv);
2575 if (PL_op->op_type == OP_REQUIRE) {
2576 SV *msg = sv_2mortal(newSVpvf("Can't locate %s in @INC", name));
2577 SV *dirmsgsv = NEWSV(0, 0);
2578 AV *ar = GvAVn(PL_incgv);
2580 if (instr(SvPVX(msg), ".h "))
2581 sv_catpv(msg, " (change .h to .ph maybe?)");
2582 if (instr(SvPVX(msg), ".ph "))
2583 sv_catpv(msg, " (did you run h2ph?)");
2584 sv_catpv(msg, " (@INC contains:");
2585 for (i = 0; i <= AvFILL(ar); i++) {
2586 char *dir = SvPVx(*av_fetch(ar, i, TRUE), PL_na);
2587 sv_setpvf(dirmsgsv, " %s", dir);
2588 sv_catsv(msg, dirmsgsv);
2590 sv_catpvn(msg, ")", 1);
2591 SvREFCNT_dec(dirmsgsv);
2598 /* Assume success here to prevent recursive requirement. */
2599 (void)hv_store(GvHVn(PL_incgv), name, strlen(name),
2600 newSVsv(GvSV(PL_compiling.cop_filegv)), 0 );
2604 lex_start(sv_2mortal(newSVpv("",0)));
2605 if (PL_rsfp_filters){
2606 save_aptr(&PL_rsfp_filters);
2607 PL_rsfp_filters = NULL;
2611 name = savepv(name);
2616 /* switch to eval mode */
2618 push_return(PL_op->op_next);
2619 PUSHBLOCK(cx, CXt_EVAL, SP);
2620 PUSHEVAL(cx, name, PL_compiling.cop_filegv);
2622 SAVEI16(PL_compiling.cop_line);
2623 PL_compiling.cop_line = 0;
2627 MUTEX_LOCK(&PL_eval_mutex);
2628 if (PL_eval_owner && PL_eval_owner != thr)
2629 while (PL_eval_owner)
2630 COND_WAIT(&PL_eval_cond, &PL_eval_mutex);
2631 PL_eval_owner = thr;
2632 MUTEX_UNLOCK(&PL_eval_mutex);
2633 #endif /* USE_THREADS */
2634 return DOCATCH(doeval(G_SCALAR, NULL));
2639 return pp_require(ARGS);
2645 register PERL_CONTEXT *cx;
2647 I32 gimme = GIMME_V, was = PL_sub_generation;
2648 char tmpbuf[TYPE_DIGITS(long) + 12];
2653 if (!SvPV(sv,len) || !len)
2655 TAINT_PROPER("eval");
2661 /* switch to eval mode */
2663 SAVESPTR(PL_compiling.cop_filegv);
2664 sprintf(tmpbuf, "_<(eval %lu)", (unsigned long)++PL_evalseq);
2665 PL_compiling.cop_filegv = gv_fetchfile(tmpbuf+2);
2666 PL_compiling.cop_line = 1;
2667 /* XXX For C<eval "...">s within BEGIN {} blocks, this ends up
2668 deleting the eval's FILEGV from the stash before gv_check() runs
2669 (i.e. before run-time proper). To work around the coredump that
2670 ensues, we always turn GvMULTI_on for any globals that were
2671 introduced within evals. See force_ident(). GSAR 96-10-12 */
2672 safestr = savepv(tmpbuf);
2673 SAVEDELETE(PL_defstash, safestr, strlen(safestr));
2675 PL_hints = PL_op->op_targ;
2677 push_return(PL_op->op_next);
2678 PUSHBLOCK(cx, (CXt_EVAL|CXp_REAL), SP);
2679 PUSHEVAL(cx, 0, PL_compiling.cop_filegv);
2681 /* prepare to compile string */
2683 if (PERLDB_LINE && PL_curstash != PL_debstash)
2684 save_lines(GvAV(PL_compiling.cop_filegv), PL_linestr);
2687 MUTEX_LOCK(&PL_eval_mutex);
2688 if (PL_eval_owner && PL_eval_owner != thr)
2689 while (PL_eval_owner)
2690 COND_WAIT(&PL_eval_cond, &PL_eval_mutex);
2691 PL_eval_owner = thr;
2692 MUTEX_UNLOCK(&PL_eval_mutex);
2693 #endif /* USE_THREADS */
2694 ret = doeval(gimme, NULL);
2695 if (PERLDB_INTER && was != PL_sub_generation /* Some subs defined here. */
2696 && ret != PL_op->op_next) { /* Successive compilation. */
2697 strcpy(safestr, "_<(eval )"); /* Anything fake and short. */
2699 return DOCATCH(ret);
2709 register PERL_CONTEXT *cx;
2711 U8 save_flags = PL_op -> op_flags;
2716 retop = pop_return();
2719 if (gimme == G_VOID)
2721 else if (gimme == G_SCALAR) {
2724 if (SvFLAGS(TOPs) & SVs_TEMP)
2727 *MARK = sv_mortalcopy(TOPs);
2731 *MARK = &PL_sv_undef;
2735 /* in case LEAVE wipes old return values */
2736 for (mark = newsp + 1; mark <= SP; mark++) {
2737 if (!(SvFLAGS(*mark) & SVs_TEMP)) {
2738 *mark = sv_mortalcopy(*mark);
2739 TAINT_NOT; /* Each item is independent */
2743 PL_curpm = newpm; /* Don't pop $1 et al till now */
2746 * Closures mentioned at top level of eval cannot be referenced
2747 * again, and their presence indirectly causes a memory leak.
2748 * (Note that the fact that compcv and friends are still set here
2749 * is, AFAIK, an accident.) --Chip
2751 if (AvFILLp(PL_comppad_name) >= 0) {
2752 SV **svp = AvARRAY(PL_comppad_name);
2754 for (ix = AvFILLp(PL_comppad_name); ix >= 0; ix--) {
2756 if (sv && sv != &PL_sv_undef && *SvPVX(sv) == '&') {
2758 svp[ix] = &PL_sv_undef;
2762 SvREFCNT_dec(CvOUTSIDE(sv));
2763 CvOUTSIDE(sv) = Nullcv;
2776 assert(CvDEPTH(PL_compcv) == 1);
2778 CvDEPTH(PL_compcv) = 0;
2781 if (optype == OP_REQUIRE &&
2782 !(gimme == G_SCALAR ? SvTRUE(*SP) : SP > newsp))
2784 /* Unassume the success we assumed earlier. */
2785 char *name = cx->blk_eval.old_name;
2786 (void)hv_delete(GvHVn(PL_incgv), name, strlen(name), G_DISCARD);
2787 retop = die("%s did not return a true value", name);
2788 /* die_where() did LEAVE, or we won't be here */
2792 if (!(save_flags & OPf_SPECIAL))
2802 register PERL_CONTEXT *cx;
2803 I32 gimme = GIMME_V;
2808 push_return(cLOGOP->op_other->op_next);
2809 PUSHBLOCK(cx, CXt_EVAL, SP);
2811 PL_eval_root = PL_op; /* Only needed so that goto works right. */
2816 return DOCATCH(PL_op->op_next);
2826 register PERL_CONTEXT *cx;
2834 if (gimme == G_VOID)
2836 else if (gimme == G_SCALAR) {
2839 if (SvFLAGS(TOPs) & (SVs_PADTMP|SVs_TEMP))
2842 *MARK = sv_mortalcopy(TOPs);
2846 *MARK = &PL_sv_undef;
2851 /* in case LEAVE wipes old return values */
2852 for (mark = newsp + 1; mark <= SP; mark++) {
2853 if (!(SvFLAGS(*mark) & (SVs_PADTMP|SVs_TEMP))) {
2854 *mark = sv_mortalcopy(*mark);
2855 TAINT_NOT; /* Each item is independent */
2859 PL_curpm = newpm; /* Don't pop $1 et al till now */
2870 register char *s = SvPV_force(sv, len);
2871 register char *send = s + len;
2872 register char *base;
2873 register I32 skipspaces = 0;
2876 bool postspace = FALSE;
2884 croak("Null picture in formline");
2886 New(804, fops, (send - s)*3+10, U16); /* Almost certainly too long... */
2891 *fpc++ = FF_LINEMARK;
2892 noblank = repeat = FALSE;
2910 case ' ': case '\t':
2921 *fpc++ = FF_LITERAL;
2929 *fpc++ = skipspaces;
2933 *fpc++ = FF_NEWLINE;
2937 arg = fpc - linepc + 1;
2944 *fpc++ = FF_LINEMARK;
2945 noblank = repeat = FALSE;
2954 ischop = s[-1] == '^';
2960 arg = (s - base) - 1;
2962 *fpc++ = FF_LITERAL;
2971 *fpc++ = FF_LINEGLOB;
2973 else if (*s == '#' || (*s == '.' && s[1] == '#')) {
2974 arg = ischop ? 512 : 0;
2984 arg |= 256 + (s - f);
2986 *fpc++ = s - base; /* fieldsize for FETCH */
2987 *fpc++ = FF_DECIMAL;
2992 bool ismore = FALSE;
2995 while (*++s == '>') ;
2996 prespace = FF_SPACE;
2998 else if (*s == '|') {
2999 while (*++s == '|') ;
3000 prespace = FF_HALFSPACE;
3005 while (*++s == '<') ;
3008 if (*s == '.' && s[1] == '.' && s[2] == '.') {
3012 *fpc++ = s - base; /* fieldsize for FETCH */
3014 *fpc++ = ischop ? FF_CHECKCHOP : FF_CHECKNL;
3032 { /* need to jump to the next word */
3034 z = WORD_ALIGN - SvCUR(sv) % WORD_ALIGN;
3035 SvGROW(sv, SvCUR(sv) + z + arg * sizeof(U16) + 4);
3036 s = SvPVX(sv) + SvCUR(sv) + z;
3038 Copy(fops, s, arg, U16);
3040 sv_magic(sv, Nullsv, 'f', Nullch, 0);
3045 * The rest of this file was derived from source code contributed
3048 * NOTE: this code was derived from Tom Horsley's qsort replacement
3049 * and should not be confused with the original code.
3052 /* Copyright (C) Tom Horsley, 1997. All rights reserved.
3054 Permission granted to distribute under the same terms as perl which are
3057 This program is free software; you can redistribute it and/or modify
3058 it under the terms of either:
3060 a) the GNU General Public License as published by the Free
3061 Software Foundation; either version 1, or (at your option) any
3064 b) the "Artistic License" which comes with this Kit.
3066 Details on the perl license can be found in the perl source code which
3067 may be located via the www.perl.com web page.
3069 This is the most wonderfulest possible qsort I can come up with (and
3070 still be mostly portable) My (limited) tests indicate it consistently
3071 does about 20% fewer calls to compare than does the qsort in the Visual
3072 C++ library, other vendors may vary.
3074 Some of the ideas in here can be found in "Algorithms" by Sedgewick,
3075 others I invented myself (or more likely re-invented since they seemed
3076 pretty obvious once I watched the algorithm operate for a while).
3078 Most of this code was written while watching the Marlins sweep the Giants
3079 in the 1997 National League Playoffs - no Braves fans allowed to use this
3080 code (just kidding :-).
3082 I realize that if I wanted to be true to the perl tradition, the only
3083 comment in this file would be something like:
3085 ...they shuffled back towards the rear of the line. 'No, not at the
3086 rear!' the slave-driver shouted. 'Three files up. And stay there...
3088 However, I really needed to violate that tradition just so I could keep
3089 track of what happens myself, not to mention some poor fool trying to
3090 understand this years from now :-).
3093 /* ********************************************************** Configuration */
3095 #ifndef QSORT_ORDER_GUESS
3096 #define QSORT_ORDER_GUESS 2 /* Select doubling version of the netBSD trick */
3099 /* QSORT_MAX_STACK is the largest number of partitions that can be stacked up for
3100 future processing - a good max upper bound is log base 2 of memory size
3101 (32 on 32 bit machines, 64 on 64 bit machines, etc). In reality can
3102 safely be smaller than that since the program is taking up some space and
3103 most operating systems only let you grab some subset of contiguous
3104 memory (not to mention that you are normally sorting data larger than
3105 1 byte element size :-).
3107 #ifndef QSORT_MAX_STACK
3108 #define QSORT_MAX_STACK 32
3111 /* QSORT_BREAK_EVEN is the size of the largest partition we should insertion sort.
3112 Anything bigger and we use qsort. If you make this too small, the qsort
3113 will probably break (or become less efficient), because it doesn't expect
3114 the middle element of a partition to be the same as the right or left -
3115 you have been warned).
3117 #ifndef QSORT_BREAK_EVEN
3118 #define QSORT_BREAK_EVEN 6
3121 /* ************************************************************* Data Types */
3123 /* hold left and right index values of a partition waiting to be sorted (the
3124 partition includes both left and right - right is NOT one past the end or
3125 anything like that).
3127 struct partition_stack_entry {
3130 #ifdef QSORT_ORDER_GUESS
3131 int qsort_break_even;
3135 /* ******************************************************* Shorthand Macros */
3137 /* Note that these macros will be used from inside the qsort function where
3138 we happen to know that the variable 'elt_size' contains the size of an
3139 array element and the variable 'temp' points to enough space to hold a
3140 temp element and the variable 'array' points to the array being sorted
3141 and 'compare' is the pointer to the compare routine.
3143 Also note that there are very many highly architecture specific ways
3144 these might be sped up, but this is simply the most generally portable
3145 code I could think of.
3148 /* Return < 0 == 0 or > 0 as the value of elt1 is < elt2, == elt2, > elt2
3151 #define qsort_cmp(elt1, elt2) \
3152 ((this->*compare)(array[elt1], array[elt2]))
3154 #define qsort_cmp(elt1, elt2) \
3155 ((*compare)(array[elt1], array[elt2]))
3158 #ifdef QSORT_ORDER_GUESS
3159 #define QSORT_NOTICE_SWAP swapped++;
3161 #define QSORT_NOTICE_SWAP
3164 /* swaps contents of array elements elt1, elt2.
3166 #define qsort_swap(elt1, elt2) \
3169 temp = array[elt1]; \
3170 array[elt1] = array[elt2]; \
3171 array[elt2] = temp; \
3174 /* rotate contents of elt1, elt2, elt3 such that elt1 gets elt2, elt2 gets
3175 elt3 and elt3 gets elt1.
3177 #define qsort_rotate(elt1, elt2, elt3) \
3180 temp = array[elt1]; \
3181 array[elt1] = array[elt2]; \
3182 array[elt2] = array[elt3]; \
3183 array[elt3] = temp; \
3186 /* ************************************************************ Debug stuff */
3193 return; /* good place to set a breakpoint */
3196 #define qsort_assert(t) (void)( (t) || (break_here(), 0) )
3199 doqsort_all_asserts(
3203 int (*compare)(const void * elt1, const void * elt2),
3204 int pc_left, int pc_right, int u_left, int u_right)
3208 qsort_assert(pc_left <= pc_right);
3209 qsort_assert(u_right < pc_left);
3210 qsort_assert(pc_right < u_left);
3211 for (i = u_right + 1; i < pc_left; ++i) {
3212 qsort_assert(qsort_cmp(i, pc_left) < 0);
3214 for (i = pc_left; i < pc_right; ++i) {
3215 qsort_assert(qsort_cmp(i, pc_right) == 0);
3217 for (i = pc_right + 1; i < u_left; ++i) {
3218 qsort_assert(qsort_cmp(pc_right, i) < 0);
3222 #define qsort_all_asserts(PC_LEFT, PC_RIGHT, U_LEFT, U_RIGHT) \
3223 doqsort_all_asserts(array, num_elts, elt_size, compare, \
3224 PC_LEFT, PC_RIGHT, U_LEFT, U_RIGHT)
3228 #define qsort_assert(t) ((void)0)
3230 #define qsort_all_asserts(PC_LEFT, PC_RIGHT, U_LEFT, U_RIGHT) ((void)0)
3234 /* ****************************************************************** qsort */
3238 qsortsv(SV ** array, size_t num_elts, SVCOMPARE compare)
3243 I32 (*compare)(SV *a, SV *b))
3248 struct partition_stack_entry partition_stack[QSORT_MAX_STACK];
3249 int next_stack_entry = 0;
3253 #ifdef QSORT_ORDER_GUESS
3254 int qsort_break_even;
3258 /* Make sure we actually have work to do.
3260 if (num_elts <= 1) {
3264 /* Setup the initial partition definition and fall into the sorting loop
3267 part_right = (int)(num_elts - 1);
3268 #ifdef QSORT_ORDER_GUESS
3269 qsort_break_even = QSORT_BREAK_EVEN;
3271 #define qsort_break_even QSORT_BREAK_EVEN
3274 if ((part_right - part_left) >= qsort_break_even) {
3275 /* OK, this is gonna get hairy, so lets try to document all the
3276 concepts and abbreviations and variables and what they keep
3279 pc: pivot chunk - the set of array elements we accumulate in the
3280 middle of the partition, all equal in value to the original
3281 pivot element selected. The pc is defined by:
3283 pc_left - the leftmost array index of the pc
3284 pc_right - the rightmost array index of the pc
3286 we start with pc_left == pc_right and only one element
3287 in the pivot chunk (but it can grow during the scan).
3289 u: uncompared elements - the set of elements in the partition
3290 we have not yet compared to the pivot value. There are two
3291 uncompared sets during the scan - one to the left of the pc
3292 and one to the right.
3294 u_right - the rightmost index of the left side's uncompared set
3295 u_left - the leftmost index of the right side's uncompared set
3297 The leftmost index of the left sides's uncompared set
3298 doesn't need its own variable because it is always defined
3299 by the leftmost edge of the whole partition (part_left). The
3300 same goes for the rightmost edge of the right partition
3303 We know there are no uncompared elements on the left once we
3304 get u_right < part_left and no uncompared elements on the
3305 right once u_left > part_right. When both these conditions
3306 are met, we have completed the scan of the partition.
3308 Any elements which are between the pivot chunk and the
3309 uncompared elements should be less than the pivot value on
3310 the left side and greater than the pivot value on the right
3311 side (in fact, the goal of the whole algorithm is to arrange
3312 for that to be true and make the groups of less-than and
3313 greater-then elements into new partitions to sort again).
3315 As you marvel at the complexity of the code and wonder why it
3316 has to be so confusing. Consider some of the things this level
3317 of confusion brings:
3319 Once I do a compare, I squeeze every ounce of juice out of it. I
3320 never do compare calls I don't have to do, and I certainly never
3323 I also never swap any elements unless I can prove there is a
3324 good reason. Many sort algorithms will swap a known value with
3325 an uncompared value just to get things in the right place (or
3326 avoid complexity :-), but that uncompared value, once it gets
3327 compared, may then have to be swapped again. A lot of the
3328 complexity of this code is due to the fact that it never swaps
3329 anything except compared values, and it only swaps them when the
3330 compare shows they are out of position.
3332 int pc_left, pc_right;
3333 int u_right, u_left;
3337 pc_left = ((part_left + part_right) / 2);
3339 u_right = pc_left - 1;
3340 u_left = pc_right + 1;
3342 /* Qsort works best when the pivot value is also the median value
3343 in the partition (unfortunately you can't find the median value
3344 without first sorting :-), so to give the algorithm a helping
3345 hand, we pick 3 elements and sort them and use the median value
3346 of that tiny set as the pivot value.
3348 Some versions of qsort like to use the left middle and right as
3349 the 3 elements to sort so they can insure the ends of the
3350 partition will contain values which will stop the scan in the
3351 compare loop, but when you have to call an arbitrarily complex
3352 routine to do a compare, its really better to just keep track of
3353 array index values to know when you hit the edge of the
3354 partition and avoid the extra compare. An even better reason to
3355 avoid using a compare call is the fact that you can drop off the
3356 edge of the array if someone foolishly provides you with an
3357 unstable compare function that doesn't always provide consistent
3360 So, since it is simpler for us to compare the three adjacent
3361 elements in the middle of the partition, those are the ones we
3362 pick here (conveniently pointed at by u_right, pc_left, and
3363 u_left). The values of the left, center, and right elements
3364 are refered to as l c and r in the following comments.
3367 #ifdef QSORT_ORDER_GUESS
3370 s = qsort_cmp(u_right, pc_left);
3373 s = qsort_cmp(pc_left, u_left);
3374 /* if l < c, c < r - already in order - nothing to do */
3376 /* l < c, c == r - already in order, pc grows */
3378 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3380 /* l < c, c > r - need to know more */
3381 s = qsort_cmp(u_right, u_left);
3383 /* l < c, c > r, l < r - swap c & r to get ordered */
3384 qsort_swap(pc_left, u_left);
3385 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3386 } else if (s == 0) {
3387 /* l < c, c > r, l == r - swap c&r, grow pc */
3388 qsort_swap(pc_left, u_left);
3390 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3392 /* l < c, c > r, l > r - make lcr into rlc to get ordered */
3393 qsort_rotate(pc_left, u_right, u_left);
3394 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3397 } else if (s == 0) {
3399 s = qsort_cmp(pc_left, u_left);
3401 /* l == c, c < r - already in order, grow pc */
3403 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3404 } else if (s == 0) {
3405 /* l == c, c == r - already in order, grow pc both ways */
3408 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3410 /* l == c, c > r - swap l & r, grow pc */
3411 qsort_swap(u_right, u_left);
3413 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3417 s = qsort_cmp(pc_left, u_left);
3419 /* l > c, c < r - need to know more */
3420 s = qsort_cmp(u_right, u_left);
3422 /* l > c, c < r, l < r - swap l & c to get ordered */
3423 qsort_swap(u_right, pc_left);
3424 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3425 } else if (s == 0) {
3426 /* l > c, c < r, l == r - swap l & c, grow pc */
3427 qsort_swap(u_right, pc_left);
3429 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3431 /* l > c, c < r, l > r - rotate lcr into crl to order */
3432 qsort_rotate(u_right, pc_left, u_left);
3433 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3435 } else if (s == 0) {
3436 /* l > c, c == r - swap ends, grow pc */
3437 qsort_swap(u_right, u_left);
3439 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3441 /* l > c, c > r - swap ends to get in order */
3442 qsort_swap(u_right, u_left);
3443 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3446 /* We now know the 3 middle elements have been compared and
3447 arranged in the desired order, so we can shrink the uncompared
3452 qsort_all_asserts(pc_left, pc_right, u_left, u_right);
3454 /* The above massive nested if was the simple part :-). We now have
3455 the middle 3 elements ordered and we need to scan through the
3456 uncompared sets on either side, swapping elements that are on
3457 the wrong side or simply shuffling equal elements around to get
3458 all equal elements into the pivot chunk.
3462 int still_work_on_left;
3463 int still_work_on_right;
3465 /* Scan the uncompared values on the left. If I find a value
3466 equal to the pivot value, move it over so it is adjacent to
3467 the pivot chunk and expand the pivot chunk. If I find a value
3468 less than the pivot value, then just leave it - its already
3469 on the correct side of the partition. If I find a greater
3470 value, then stop the scan.
3472 while (still_work_on_left = (u_right >= part_left)) {
3473 s = qsort_cmp(u_right, pc_left);
3476 } else if (s == 0) {
3478 if (pc_left != u_right) {
3479 qsort_swap(u_right, pc_left);
3485 qsort_assert(u_right < pc_left);
3486 qsort_assert(pc_left <= pc_right);
3487 qsort_assert(qsort_cmp(u_right + 1, pc_left) <= 0);
3488 qsort_assert(qsort_cmp(pc_left, pc_right) == 0);
3491 /* Do a mirror image scan of uncompared values on the right
3493 while (still_work_on_right = (u_left <= part_right)) {
3494 s = qsort_cmp(pc_right, u_left);
3497 } else if (s == 0) {
3499 if (pc_right != u_left) {
3500 qsort_swap(pc_right, u_left);
3506 qsort_assert(u_left > pc_right);
3507 qsort_assert(pc_left <= pc_right);
3508 qsort_assert(qsort_cmp(pc_right, u_left - 1) <= 0);
3509 qsort_assert(qsort_cmp(pc_left, pc_right) == 0);
3512 if (still_work_on_left) {
3513 /* I know I have a value on the left side which needs to be
3514 on the right side, but I need to know more to decide
3515 exactly the best thing to do with it.
3517 if (still_work_on_right) {
3518 /* I know I have values on both side which are out of
3519 position. This is a big win because I kill two birds
3520 with one swap (so to speak). I can advance the
3521 uncompared pointers on both sides after swapping both
3522 of them into the right place.
3524 qsort_swap(u_right, u_left);
3527 qsort_all_asserts(pc_left, pc_right, u_left, u_right);
3529 /* I have an out of position value on the left, but the
3530 right is fully scanned, so I "slide" the pivot chunk
3531 and any less-than values left one to make room for the
3532 greater value over on the right. If the out of position
3533 value is immediately adjacent to the pivot chunk (there
3534 are no less-than values), I can do that with a swap,
3535 otherwise, I have to rotate one of the less than values
3536 into the former position of the out of position value
3537 and the right end of the pivot chunk into the left end
3541 if (pc_left == u_right) {
3542 qsort_swap(u_right, pc_right);
3543 qsort_all_asserts(pc_left, pc_right-1, u_left, u_right-1);
3545 qsort_rotate(u_right, pc_left, pc_right);
3546 qsort_all_asserts(pc_left, pc_right-1, u_left, u_right-1);
3551 } else if (still_work_on_right) {
3552 /* Mirror image of complex case above: I have an out of
3553 position value on the right, but the left is fully
3554 scanned, so I need to shuffle things around to make room
3555 for the right value on the left.
3558 if (pc_right == u_left) {
3559 qsort_swap(u_left, pc_left);
3560 qsort_all_asserts(pc_left+1, pc_right, u_left+1, u_right);
3562 qsort_rotate(pc_right, pc_left, u_left);
3563 qsort_all_asserts(pc_left+1, pc_right, u_left+1, u_right);
3568 /* No more scanning required on either side of partition,
3569 break out of loop and figure out next set of partitions
3575 /* The elements in the pivot chunk are now in the right place. They
3576 will never move or be compared again. All I have to do is decide
3577 what to do with the stuff to the left and right of the pivot
3580 Notes on the QSORT_ORDER_GUESS ifdef code:
3582 1. If I just built these partitions without swapping any (or
3583 very many) elements, there is a chance that the elements are
3584 already ordered properly (being properly ordered will
3585 certainly result in no swapping, but the converse can't be
3588 2. A (properly written) insertion sort will run faster on
3589 already ordered data than qsort will.
3591 3. Perhaps there is some way to make a good guess about
3592 switching to an insertion sort earlier than partition size 6
3593 (for instance - we could save the partition size on the stack
3594 and increase the size each time we find we didn't swap, thus
3595 switching to insertion sort earlier for partitions with a
3596 history of not swapping).
3598 4. Naturally, if I just switch right away, it will make
3599 artificial benchmarks with pure ascending (or descending)
3600 data look really good, but is that a good reason in general?
3604 #ifdef QSORT_ORDER_GUESS
3606 #if QSORT_ORDER_GUESS == 1
3607 qsort_break_even = (part_right - part_left) + 1;
3609 #if QSORT_ORDER_GUESS == 2
3610 qsort_break_even *= 2;
3612 #if QSORT_ORDER_GUESS == 3
3613 int prev_break = qsort_break_even;
3614 qsort_break_even *= qsort_break_even;
3615 if (qsort_break_even < prev_break) {
3616 qsort_break_even = (part_right - part_left) + 1;
3620 qsort_break_even = QSORT_BREAK_EVEN;
3624 if (part_left < pc_left) {
3625 /* There are elements on the left which need more processing.
3626 Check the right as well before deciding what to do.
3628 if (pc_right < part_right) {
3629 /* We have two partitions to be sorted. Stack the biggest one
3630 and process the smallest one on the next iteration. This
3631 minimizes the stack height by insuring that any additional
3632 stack entries must come from the smallest partition which
3633 (because it is smallest) will have the fewest
3634 opportunities to generate additional stack entries.
3636 if ((part_right - pc_right) > (pc_left - part_left)) {
3637 /* stack the right partition, process the left */
3638 partition_stack[next_stack_entry].left = pc_right + 1;
3639 partition_stack[next_stack_entry].right = part_right;
3640 #ifdef QSORT_ORDER_GUESS
3641 partition_stack[next_stack_entry].qsort_break_even = qsort_break_even;
3643 part_right = pc_left - 1;
3645 /* stack the left partition, process the right */
3646 partition_stack[next_stack_entry].left = part_left;
3647 partition_stack[next_stack_entry].right = pc_left - 1;
3648 #ifdef QSORT_ORDER_GUESS
3649 partition_stack[next_stack_entry].qsort_break_even = qsort_break_even;
3651 part_left = pc_right + 1;
3653 qsort_assert(next_stack_entry < QSORT_MAX_STACK);
3656 /* The elements on the left are the only remaining elements
3657 that need sorting, arrange for them to be processed as the
3660 part_right = pc_left - 1;
3662 } else if (pc_right < part_right) {
3663 /* There is only one chunk on the right to be sorted, make it
3664 the new partition and loop back around.
3666 part_left = pc_right + 1;
3668 /* This whole partition wound up in the pivot chunk, so
3669 we need to get a new partition off the stack.
3671 if (next_stack_entry == 0) {
3672 /* the stack is empty - we are done */
3676 part_left = partition_stack[next_stack_entry].left;
3677 part_right = partition_stack[next_stack_entry].right;
3678 #ifdef QSORT_ORDER_GUESS
3679 qsort_break_even = partition_stack[next_stack_entry].qsort_break_even;
3683 /* This partition is too small to fool with qsort complexity, just
3684 do an ordinary insertion sort to minimize overhead.
3687 /* Assume 1st element is in right place already, and start checking
3688 at 2nd element to see where it should be inserted.
3690 for (i = part_left + 1; i <= part_right; ++i) {
3692 /* Scan (backwards - just in case 'i' is already in right place)
3693 through the elements already sorted to see if the ith element
3694 belongs ahead of one of them.
3696 for (j = i - 1; j >= part_left; --j) {
3697 if (qsort_cmp(i, j) >= 0) {
3698 /* i belongs right after j
3705 /* Looks like we really need to move some things
3709 for (k = i - 1; k >= j; --k)
3710 array[k + 1] = array[k];
3715 /* That partition is now sorted, grab the next one, or get out
3716 of the loop if there aren't any more.
3719 if (next_stack_entry == 0) {
3720 /* the stack is empty - we are done */
3724 part_left = partition_stack[next_stack_entry].left;
3725 part_right = partition_stack[next_stack_entry].right;
3726 #ifdef QSORT_ORDER_GUESS
3727 qsort_break_even = partition_stack[next_stack_entry].qsort_break_even;
3732 /* Believe it or not, the array is sorted at this point! */