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 (cx->cx_type) {
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 (cx->cx_type) {
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 (cx->cx_type) {
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 (cx->cx_type) {
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[cx->cx_type]));
1047 /* Note: we don't need to restore the base context info till the end. */
1048 switch (cx->cx_type) {
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 (cx->cx_type != 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();
1136 PerlIO_printf(PerlIO_stderr(), "%s",message);
1137 PerlIO_flush(PerlIO_stderr());
1146 if (SvTRUE(left) != SvTRUE(right))
1158 RETURNOP(cLOGOP->op_other);
1167 RETURNOP(cLOGOP->op_other);
1173 register I32 cxix = dopoptosub(cxstack_ix);
1174 register PERL_CONTEXT *cx;
1175 register PERL_CONTEXT *ccstack = cxstack;
1176 PERL_SI *top_si = PL_curstackinfo;
1187 /* we may be in a higher stacklevel, so dig down deeper */
1188 while (cxix < 0 && top_si->si_type != PERLSI_MAIN) {
1189 top_si = top_si->si_prev;
1190 ccstack = top_si->si_cxstack;
1191 cxix = dopoptosub_at(ccstack, top_si->si_cxix);
1194 if (GIMME != G_ARRAY)
1198 if (PL_DBsub && cxix >= 0 &&
1199 ccstack[cxix].blk_sub.cv == GvCV(PL_DBsub))
1203 cxix = dopoptosub_at(ccstack, cxix - 1);
1206 cx = &ccstack[cxix];
1207 if (ccstack[cxix].cx_type == CXt_SUB) {
1208 dbcxix = dopoptosub_at(ccstack, cxix - 1);
1209 /* We expect that ccstack[dbcxix] is CXt_SUB, anyway, the
1210 field below is defined for any cx. */
1211 if (PL_DBsub && dbcxix >= 0 && ccstack[dbcxix].blk_sub.cv == GvCV(PL_DBsub))
1212 cx = &ccstack[dbcxix];
1215 if (GIMME != G_ARRAY) {
1216 hv = cx->blk_oldcop->cop_stash;
1218 PUSHs(&PL_sv_undef);
1221 sv_setpv(TARG, HvNAME(hv));
1227 hv = cx->blk_oldcop->cop_stash;
1229 PUSHs(&PL_sv_undef);
1231 PUSHs(sv_2mortal(newSVpv(HvNAME(hv), 0)));
1232 PUSHs(sv_2mortal(newSVpv(SvPVX(GvSV(cx->blk_oldcop->cop_filegv)), 0)));
1233 PUSHs(sv_2mortal(newSViv((I32)cx->blk_oldcop->cop_line)));
1236 if (cx->cx_type == CXt_SUB) { /* So is ccstack[dbcxix]. */
1238 gv_efullname3(sv, CvGV(ccstack[cxix].blk_sub.cv), Nullch);
1239 PUSHs(sv_2mortal(sv));
1240 PUSHs(sv_2mortal(newSViv((I32)cx->blk_sub.hasargs)));
1243 PUSHs(sv_2mortal(newSVpv("(eval)",0)));
1244 PUSHs(sv_2mortal(newSViv(0)));
1246 gimme = (I32)cx->blk_gimme;
1247 if (gimme == G_VOID)
1248 PUSHs(&PL_sv_undef);
1250 PUSHs(sv_2mortal(newSViv(gimme & G_ARRAY)));
1251 if (cx->cx_type == CXt_EVAL) {
1252 if (cx->blk_eval.old_op_type == OP_ENTEREVAL) {
1253 PUSHs(cx->blk_eval.cur_text);
1256 else if (cx->blk_eval.old_name) { /* Try blocks have old_name == 0. */
1257 /* Require, put the name. */
1258 PUSHs(sv_2mortal(newSVpv(cx->blk_eval.old_name, 0)));
1262 else if (cx->cx_type == CXt_SUB &&
1263 cx->blk_sub.hasargs &&
1264 PL_curcop->cop_stash == PL_debstash)
1266 AV *ary = cx->blk_sub.argarray;
1267 int off = AvARRAY(ary) - AvALLOC(ary);
1271 PL_dbargs = GvAV(gv_AVadd(tmpgv = gv_fetchpv("DB::args", TRUE,
1274 AvREAL_off(PL_dbargs); /* XXX Should be REIFY */
1277 if (AvMAX(PL_dbargs) < AvFILLp(ary) + off)
1278 av_extend(PL_dbargs, AvFILLp(ary) + off);
1279 Copy(AvALLOC(ary), AvARRAY(PL_dbargs), AvFILLp(ary) + 1 + off, SV*);
1280 AvFILLp(PL_dbargs) = AvFILLp(ary) + off;
1286 sortcv(SV *a, SV *b)
1289 I32 oldsaveix = PL_savestack_ix;
1290 I32 oldscopeix = PL_scopestack_ix;
1292 GvSV(PL_firstgv) = a;
1293 GvSV(PL_secondgv) = b;
1294 PL_stack_sp = PL_stack_base;
1297 if (PL_stack_sp != PL_stack_base + 1)
1298 croak("Sort subroutine didn't return single value");
1299 if (!SvNIOKp(*PL_stack_sp))
1300 croak("Sort subroutine didn't return a numeric value");
1301 result = SvIV(*PL_stack_sp);
1302 while (PL_scopestack_ix > oldscopeix) {
1305 leave_scope(oldsaveix);
1318 sv_reset(tmps, PL_curcop->cop_stash);
1330 PL_curcop = (COP*)PL_op;
1331 TAINT_NOT; /* Each statement is presumed innocent */
1332 PL_stack_sp = PL_stack_base + cxstack[cxstack_ix].blk_oldsp;
1335 if (PL_op->op_private || SvIV(PL_DBsingle) || SvIV(PL_DBsignal) || SvIV(PL_DBtrace))
1339 register PERL_CONTEXT *cx;
1340 I32 gimme = G_ARRAY;
1347 DIE("No DB::DB routine defined");
1349 if (CvDEPTH(cv) >= 1 && !(PL_debug & (1<<30))) /* don't do recursive DB::DB call */
1361 push_return(PL_op->op_next);
1362 PUSHBLOCK(cx, CXt_SUB, SP);
1365 (void)SvREFCNT_inc(cv);
1366 SAVESPTR(PL_curpad);
1367 PL_curpad = AvARRAY((AV*)*av_fetch(CvPADLIST(cv),1,FALSE));
1368 RETURNOP(CvSTART(cv));
1382 register PERL_CONTEXT *cx;
1383 I32 gimme = GIMME_V;
1390 if (PL_op->op_flags & OPf_SPECIAL)
1391 svp = save_threadsv(PL_op->op_targ); /* per-thread variable */
1393 #endif /* USE_THREADS */
1394 if (PL_op->op_targ) {
1395 svp = &PL_curpad[PL_op->op_targ]; /* "my" variable */
1400 (void)save_scalar(gv);
1401 svp = &GvSV(gv); /* symbol table variable */
1406 PUSHBLOCK(cx, CXt_LOOP, SP);
1407 PUSHLOOP(cx, svp, MARK);
1408 if (PL_op->op_flags & OPf_STACKED) {
1409 cx->blk_loop.iterary = (AV*)SvREFCNT_inc(POPs);
1410 if (SvTYPE(cx->blk_loop.iterary) != SVt_PVAV) {
1412 if (SvNIOKp(sv) || !SvPOKp(sv) ||
1413 (looks_like_number(sv) && *SvPVX(sv) != '0')) {
1414 if (SvNV(sv) < IV_MIN ||
1415 SvNV((SV*)cx->blk_loop.iterary) >= IV_MAX)
1416 croak("Range iterator outside integer range");
1417 cx->blk_loop.iterix = SvIV(sv);
1418 cx->blk_loop.itermax = SvIV((SV*)cx->blk_loop.iterary);
1421 cx->blk_loop.iterlval = newSVsv(sv);
1425 cx->blk_loop.iterary = PL_curstack;
1426 AvFILLp(PL_curstack) = SP - PL_stack_base;
1427 cx->blk_loop.iterix = MARK - PL_stack_base;
1436 register PERL_CONTEXT *cx;
1437 I32 gimme = GIMME_V;
1443 PUSHBLOCK(cx, CXt_LOOP, SP);
1444 PUSHLOOP(cx, 0, SP);
1452 register PERL_CONTEXT *cx;
1453 struct block_loop cxloop;
1461 POPLOOP1(cx); /* Delay POPLOOP2 until stack values are safe */
1464 if (gimme == G_VOID)
1466 else if (gimme == G_SCALAR) {
1468 *++newsp = sv_mortalcopy(*SP);
1470 *++newsp = &PL_sv_undef;
1474 *++newsp = sv_mortalcopy(*++mark);
1475 TAINT_NOT; /* Each item is independent */
1481 POPLOOP2(); /* Stack values are safe: release loop vars ... */
1482 PL_curpm = newpm; /* ... and pop $1 et al */
1494 register PERL_CONTEXT *cx;
1495 struct block_sub cxsub;
1496 bool popsub2 = FALSE;
1502 if (PL_curstackinfo->si_type == PERLSI_SORT) {
1503 if (cxstack_ix == PL_sortcxix || dopoptosub(cxstack_ix) <= PL_sortcxix) {
1504 if (cxstack_ix > PL_sortcxix)
1505 dounwind(PL_sortcxix);
1506 AvARRAY(PL_curstack)[1] = *SP;
1507 PL_stack_sp = PL_stack_base + 1;
1512 cxix = dopoptosub(cxstack_ix);
1514 DIE("Can't return outside a subroutine");
1515 if (cxix < cxstack_ix)
1519 switch (cx->cx_type) {
1521 POPSUB1(cx); /* Delay POPSUB2 until stack values are safe */
1526 if (optype == OP_REQUIRE &&
1527 (MARK == SP || (gimme == G_SCALAR && !SvTRUE(*SP))) )
1529 /* Unassume the success we assumed earlier. */
1530 char *name = cx->blk_eval.old_name;
1531 (void)hv_delete(GvHVn(PL_incgv), name, strlen(name), G_DISCARD);
1532 DIE("%s did not return a true value", name);
1536 DIE("panic: return");
1540 if (gimme == G_SCALAR) {
1543 if (cxsub.cv && CvDEPTH(cxsub.cv) > 1) {
1545 *++newsp = SvREFCNT_inc(*SP);
1550 *++newsp = sv_mortalcopy(*SP);
1553 *++newsp = (SvTEMP(*SP)) ? *SP : sv_mortalcopy(*SP);
1555 *++newsp = sv_mortalcopy(*SP);
1557 *++newsp = &PL_sv_undef;
1559 else if (gimme == G_ARRAY) {
1560 while (++MARK <= SP) {
1561 *++newsp = (popsub2 && SvTEMP(*MARK))
1562 ? *MARK : sv_mortalcopy(*MARK);
1563 TAINT_NOT; /* Each item is independent */
1566 PL_stack_sp = newsp;
1568 /* Stack values are safe: */
1570 POPSUB2(); /* release CV and @_ ... */
1572 PL_curpm = newpm; /* ... and pop $1 et al */
1575 return pop_return();
1582 register PERL_CONTEXT *cx;
1583 struct block_loop cxloop;
1584 struct block_sub cxsub;
1591 SV **mark = PL_stack_base + cxstack[cxstack_ix].blk_oldsp;
1593 if (PL_op->op_flags & OPf_SPECIAL) {
1594 cxix = dopoptoloop(cxstack_ix);
1596 DIE("Can't \"last\" outside a block");
1599 cxix = dopoptolabel(cPVOP->op_pv);
1601 DIE("Label not found for \"last %s\"", cPVOP->op_pv);
1603 if (cxix < cxstack_ix)
1607 switch (cx->cx_type) {
1609 POPLOOP1(cx); /* Delay POPLOOP2 until stack values are safe */
1611 nextop = cxloop.last_op->op_next;
1614 POPSUB1(cx); /* Delay POPSUB2 until stack values are safe */
1616 nextop = pop_return();
1620 nextop = pop_return();
1627 if (gimme == G_SCALAR) {
1629 *++newsp = ((pop2 == CXt_SUB) && SvTEMP(*SP))
1630 ? *SP : sv_mortalcopy(*SP);
1632 *++newsp = &PL_sv_undef;
1634 else if (gimme == G_ARRAY) {
1635 while (++MARK <= SP) {
1636 *++newsp = ((pop2 == CXt_SUB) && SvTEMP(*MARK))
1637 ? *MARK : sv_mortalcopy(*MARK);
1638 TAINT_NOT; /* Each item is independent */
1644 /* Stack values are safe: */
1647 POPLOOP2(); /* release loop vars ... */
1651 POPSUB2(); /* release CV and @_ ... */
1654 PL_curpm = newpm; /* ... and pop $1 et al */
1663 register PERL_CONTEXT *cx;
1666 if (PL_op->op_flags & OPf_SPECIAL) {
1667 cxix = dopoptoloop(cxstack_ix);
1669 DIE("Can't \"next\" outside a block");
1672 cxix = dopoptolabel(cPVOP->op_pv);
1674 DIE("Label not found for \"next %s\"", cPVOP->op_pv);
1676 if (cxix < cxstack_ix)
1680 oldsave = PL_scopestack[PL_scopestack_ix - 1];
1681 LEAVE_SCOPE(oldsave);
1682 return cx->blk_loop.next_op;
1688 register PERL_CONTEXT *cx;
1691 if (PL_op->op_flags & OPf_SPECIAL) {
1692 cxix = dopoptoloop(cxstack_ix);
1694 DIE("Can't \"redo\" outside a block");
1697 cxix = dopoptolabel(cPVOP->op_pv);
1699 DIE("Label not found for \"redo %s\"", cPVOP->op_pv);
1701 if (cxix < cxstack_ix)
1705 oldsave = PL_scopestack[PL_scopestack_ix - 1];
1706 LEAVE_SCOPE(oldsave);
1707 return cx->blk_loop.redo_op;
1711 dofindlabel(OP *o, char *label, OP **opstack, OP **oplimit)
1715 static char too_deep[] = "Target of goto is too deeply nested";
1719 if (o->op_type == OP_LEAVE ||
1720 o->op_type == OP_SCOPE ||
1721 o->op_type == OP_LEAVELOOP ||
1722 o->op_type == OP_LEAVETRY)
1724 *ops++ = cUNOPo->op_first;
1729 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 == PL_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 = (PL_op->op_type == OP_DUMP);
1771 if (PL_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(PL_stack_sp, items); /* @_ could have been extended. */
1809 Copy(AvARRAY(av), PL_stack_sp, items, SV*);
1810 PL_stack_sp += items;
1812 SvREFCNT_dec(GvAV(PL_defgv));
1813 GvAV(PL_defgv) = cx->blk_sub.savearray;
1814 #endif /* USE_THREADS */
1818 else if (CvXSUB(cv)) { /* put GvAV(defgv) back onto stack */
1822 av = (AV*)PL_curpad[0];
1824 av = GvAV(PL_defgv);
1826 items = AvFILLp(av) + 1;
1828 EXTEND(PL_stack_sp, items); /* @_ could have been extended. */
1829 Copy(AvARRAY(av), PL_stack_sp, items, SV*);
1830 PL_stack_sp += items;
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 = PL_scopestack[PL_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 - PL_stack_base + 1,
1851 SP = PL_stack_base + items;
1857 PL_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, PL_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 PL_in_eval = cx->blk_eval.old_in_eval;
1873 PL_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 && PL_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] != &PL_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*)PL_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 */
1940 SAVESPTR(PL_curpad);
1941 PL_curpad = AvARRAY((AV*)svp[CvDEPTH(cv)]);
1943 if (cx->blk_sub.hasargs)
1944 #endif /* USE_THREADS */
1946 AV* av = (AV*)PL_curpad[0];
1950 cx->blk_sub.savearray = GvAV(PL_defgv);
1951 GvAV(PL_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(PL_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( PL_stack_sp );
1995 perl_call_sv((SV*)gotocv, G_SCALAR | G_NODEBUG);
1999 RETURNOP(CvSTART(cv));
2003 label = SvPV(sv,PL_na);
2005 else if (PL_op->op_flags & OPf_SPECIAL) {
2007 DIE("goto must have label");
2010 label = cPVOP->op_pv;
2012 if (label && *label) {
2017 PL_lastgotoprobe = 0;
2019 for (ix = cxstack_ix; ix >= 0; ix--) {
2021 switch (cx->cx_type) {
2023 gotoprobe = PL_eval_root; /* XXX not good for nested eval */
2026 gotoprobe = cx->blk_oldcop->op_sibling;
2032 gotoprobe = cx->blk_oldcop->op_sibling;
2034 gotoprobe = PL_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 = PL_main_root;
2050 retop = dofindlabel(gotoprobe, label,
2051 enterops, enterops + GOTO_DEPTH);
2054 PL_lastgotoprobe = gotoprobe;
2057 DIE("Can't find label %s", label);
2059 /* pop unwanted frames */
2061 if (ix < cxstack_ix) {
2068 oldsave = PL_scopestack[PL_scopestack_ix];
2069 LEAVE_SCOPE(oldsave);
2072 /* push wanted frames */
2074 if (*enterops && enterops[1]) {
2076 for (ix = 1; enterops[ix]; ix++) {
2077 PL_op = enterops[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 (PL_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 = PL_main_start;
2093 PL_restartop = retop;
2094 PL_do_undump = TRUE;
2098 PL_restartop = 0; /* hmm, must be GNU unexec().. */
2099 PL_do_undump = FALSE;
2102 if (PL_top_env->je_prev) {
2103 PL_restartop = retop;
2120 if (anum == 1 && VMSISH_EXIT)
2125 PUSHs(&PL_sv_undef);
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 PL_op = cCOP->uop.scop.scop_next[match];
2155 PL_op = PL_op->op_next; /* can't assume anything */
2157 match = *(SvPVx(GvSV(cCOP->cop_gv), PL_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 PL_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, PL_top_env));
2210 default: /* topmost level handles it */
2216 if (!PL_restartop) {
2217 PerlIO_printf(PerlIO_stderr(), "panic: restartop\n");
2220 PL_op = PL_restartop;
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 */
2244 OP *oop = PL_op, *rop;
2245 char tmpbuf[TYPE_DIGITS(long) + 12 + 10];
2251 /* switch to eval mode */
2253 if (PL_curcop == &PL_compiling) {
2254 SAVESPTR(PL_compiling.cop_stash);
2255 PL_compiling.cop_stash = PL_curstash;
2257 SAVESPTR(PL_compiling.cop_filegv);
2258 SAVEI16(PL_compiling.cop_line);
2259 sprintf(tmpbuf, "_<(%.10s_eval %lu)", code, (unsigned long)++PL_evalseq);
2260 PL_compiling.cop_filegv = gv_fetchfile(tmpbuf+2);
2261 PL_compiling.cop_line = 1;
2262 /* XXX For C<eval "...">s within BEGIN {} blocks, this ends up
2263 deleting the eval's FILEGV from the stash before gv_check() runs
2264 (i.e. before run-time proper). To work around the coredump that
2265 ensues, we always turn GvMULTI_on for any globals that were
2266 introduced within evals. See force_ident(). GSAR 96-10-12 */
2267 safestr = savepv(tmpbuf);
2268 SAVEDELETE(PL_defstash, safestr, strlen(safestr));
2270 #ifdef OP_IN_REGISTER
2278 PL_op->op_type = 0; /* Avoid uninit warning. */
2279 PL_op->op_flags = 0; /* Avoid uninit warning. */
2280 PUSHBLOCK(cx, CXt_EVAL, SP);
2281 PUSHEVAL(cx, 0, PL_compiling.cop_filegv);
2282 rop = doeval(G_SCALAR, startop);
2283 POPBLOCK(cx,PL_curpm);
2286 (*startop)->op_type = OP_NULL;
2287 (*startop)->op_ppaddr = ppaddr[OP_NULL];
2289 *avp = (AV*)SvREFCNT_inc(PL_comppad);
2291 #ifdef OP_IN_REGISTER
2297 /* With USE_THREADS, eval_owner must be held on entry to doeval */
2299 doeval(int gimme, OP** startop)
2312 /* set up a scratch pad */
2315 SAVESPTR(PL_curpad);
2316 SAVESPTR(PL_comppad);
2317 SAVESPTR(PL_comppad_name);
2318 SAVEI32(PL_comppad_name_fill);
2319 SAVEI32(PL_min_intro_pending);
2320 SAVEI32(PL_max_intro_pending);
2323 for (i = cxstack_ix; i >= 0; i--) {
2324 PERL_CONTEXT *cx = &cxstack[i];
2325 if (cx->cx_type == CXt_EVAL)
2327 else if (cx->cx_type == CXt_SUB) {
2328 caller = cx->blk_sub.cv;
2333 SAVESPTR(PL_compcv);
2334 PL_compcv = (CV*)NEWSV(1104,0);
2335 sv_upgrade((SV *)PL_compcv, SVt_PVCV);
2336 CvUNIQUE_on(PL_compcv);
2338 CvOWNER(PL_compcv) = 0;
2339 New(666, CvMUTEXP(PL_compcv), 1, perl_mutex);
2340 MUTEX_INIT(CvMUTEXP(PL_compcv));
2341 #endif /* USE_THREADS */
2343 PL_comppad = newAV();
2344 av_push(PL_comppad, Nullsv);
2345 PL_curpad = AvARRAY(PL_comppad);
2346 PL_comppad_name = newAV();
2347 PL_comppad_name_fill = 0;
2348 PL_min_intro_pending = 0;
2351 av_store(PL_comppad_name, 0, newSVpv("@_", 2));
2352 PL_curpad[0] = (SV*)newAV();
2353 SvPADMY_on(PL_curpad[0]); /* XXX Needed? */
2354 #endif /* USE_THREADS */
2356 comppadlist = newAV();
2357 AvREAL_off(comppadlist);
2358 av_store(comppadlist, 0, (SV*)PL_comppad_name);
2359 av_store(comppadlist, 1, (SV*)PL_comppad);
2360 CvPADLIST(PL_compcv) = comppadlist;
2362 if (!saveop || saveop->op_type != OP_REQUIRE)
2363 CvOUTSIDE(PL_compcv) = (CV*)SvREFCNT_inc(caller);
2365 SAVEFREESV(PL_compcv);
2367 /* make sure we compile in the right package */
2369 newstash = PL_curcop->cop_stash;
2370 if (PL_curstash != newstash) {
2371 SAVESPTR(PL_curstash);
2372 PL_curstash = newstash;
2374 SAVESPTR(PL_beginav);
2375 PL_beginav = newAV();
2376 SAVEFREESV(PL_beginav);
2378 /* try to compile it */
2380 PL_eval_root = Nullop;
2382 PL_curcop = &PL_compiling;
2383 PL_curcop->cop_arybase = 0;
2384 SvREFCNT_dec(PL_rs);
2385 PL_rs = newSVpv("\n", 1);
2386 if (saveop && saveop->op_flags & OPf_SPECIAL)
2390 if (yyparse() || PL_error_count || !PL_eval_root) {
2394 I32 optype = 0; /* Might be reset by POPEVAL. */
2398 op_free(PL_eval_root);
2399 PL_eval_root = Nullop;
2401 SP = PL_stack_base + POPMARK; /* pop original mark */
2403 POPBLOCK(cx,PL_curpm);
2409 if (optype == OP_REQUIRE) {
2410 char* msg = SvPVx(ERRSV, PL_na);
2411 DIE("%s", *msg ? msg : "Compilation failed in require");
2412 } else if (startop) {
2413 char* msg = SvPVx(ERRSV, PL_na);
2415 POPBLOCK(cx,PL_curpm);
2417 croak("%sCompilation failed in regexp", (*msg ? msg : "Unknown error\n"));
2419 SvREFCNT_dec(PL_rs);
2420 PL_rs = SvREFCNT_inc(PL_nrs);
2422 MUTEX_LOCK(&PL_eval_mutex);
2424 COND_SIGNAL(&PL_eval_cond);
2425 MUTEX_UNLOCK(&PL_eval_mutex);
2426 #endif /* USE_THREADS */
2429 SvREFCNT_dec(PL_rs);
2430 PL_rs = SvREFCNT_inc(PL_nrs);
2431 PL_compiling.cop_line = 0;
2433 *startop = PL_eval_root;
2434 SvREFCNT_dec(CvOUTSIDE(PL_compcv));
2435 CvOUTSIDE(PL_compcv) = Nullcv;
2437 SAVEFREEOP(PL_eval_root);
2439 scalarvoid(PL_eval_root);
2440 else if (gimme & G_ARRAY)
2443 scalar(PL_eval_root);
2445 DEBUG_x(dump_eval());
2447 /* Register with debugger: */
2448 if (PERLDB_INTER && saveop->op_type == OP_REQUIRE) {
2449 CV *cv = perl_get_cv("DB::postponed", FALSE);
2453 XPUSHs((SV*)PL_compiling.cop_filegv);
2455 perl_call_sv((SV*)cv, G_DISCARD);
2459 /* compiled okay, so do it */
2461 CvDEPTH(PL_compcv) = 1;
2462 SP = PL_stack_base + POPMARK; /* pop original mark */
2463 PL_op = saveop; /* The caller may need it. */
2465 MUTEX_LOCK(&PL_eval_mutex);
2467 COND_SIGNAL(&PL_eval_cond);
2468 MUTEX_UNLOCK(&PL_eval_mutex);
2469 #endif /* USE_THREADS */
2471 RETURNOP(PL_eval_start);
2477 register PERL_CONTEXT *cx;
2482 SV *namesv = Nullsv;
2484 I32 gimme = G_SCALAR;
2485 PerlIO *tryrsfp = 0;
2488 if (SvNIOKp(sv) && !SvPOKp(sv)) {
2489 SET_NUMERIC_STANDARD();
2490 if (atof(PL_patchlevel) + 0.00000999 < SvNV(sv))
2491 DIE("Perl %s required--this is only version %s, stopped",
2492 SvPV(sv,PL_na),PL_patchlevel);
2495 name = SvPV(sv, len);
2496 if (!(name && len > 0 && *name))
2497 DIE("Null filename used");
2498 TAINT_PROPER("require");
2499 if (PL_op->op_type == OP_REQUIRE &&
2500 (svp = hv_fetch(GvHVn(PL_incgv), name, len, 0)) &&
2501 *svp != &PL_sv_undef)
2504 /* prepare to compile file */
2509 (name[1] == '.' && name[2] == '/')))
2511 || (name[0] && name[1] == ':')
2514 || (name[0] == '\\' && name[1] == '\\') /* UNC path */
2517 || (strchr(name,':') || ((*name == '[' || *name == '<') &&
2518 (isALNUM(name[1]) || strchr("$-_]>",name[1]))))
2523 tryrsfp = PerlIO_open(name,PERL_SCRIPT_MODE);
2526 AV *ar = GvAVn(PL_incgv);
2530 if ((unixname = tounixspec(name, Nullch)) != Nullch)
2533 namesv = NEWSV(806, 0);
2534 for (i = 0; i <= AvFILL(ar); i++) {
2535 char *dir = SvPVx(*av_fetch(ar, i, TRUE), PL_na);
2538 if ((unixdir = tounixpath(dir, Nullch)) == Nullch)
2540 sv_setpv(namesv, unixdir);
2541 sv_catpv(namesv, unixname);
2543 sv_setpvf(namesv, "%s/%s", dir, name);
2545 tryname = SvPVX(namesv);
2546 tryrsfp = PerlIO_open(tryname, PERL_SCRIPT_MODE);
2548 if (tryname[0] == '.' && tryname[1] == '/')
2555 SAVESPTR(PL_compiling.cop_filegv);
2556 PL_compiling.cop_filegv = gv_fetchfile(tryrsfp ? tryname : name);
2557 SvREFCNT_dec(namesv);
2559 if (PL_op->op_type == OP_REQUIRE) {
2560 SV *msg = sv_2mortal(newSVpvf("Can't locate %s in @INC", name));
2561 SV *dirmsgsv = NEWSV(0, 0);
2562 AV *ar = GvAVn(PL_incgv);
2564 if (instr(SvPVX(msg), ".h "))
2565 sv_catpv(msg, " (change .h to .ph maybe?)");
2566 if (instr(SvPVX(msg), ".ph "))
2567 sv_catpv(msg, " (did you run h2ph?)");
2568 sv_catpv(msg, " (@INC contains:");
2569 for (i = 0; i <= AvFILL(ar); i++) {
2570 char *dir = SvPVx(*av_fetch(ar, i, TRUE), PL_na);
2571 sv_setpvf(dirmsgsv, " %s", dir);
2572 sv_catsv(msg, dirmsgsv);
2574 sv_catpvn(msg, ")", 1);
2575 SvREFCNT_dec(dirmsgsv);
2582 /* Assume success here to prevent recursive requirement. */
2583 (void)hv_store(GvHVn(PL_incgv), name, strlen(name),
2584 newSVsv(GvSV(PL_compiling.cop_filegv)), 0 );
2588 lex_start(sv_2mortal(newSVpv("",0)));
2589 if (PL_rsfp_filters){
2590 save_aptr(&PL_rsfp_filters);
2591 PL_rsfp_filters = NULL;
2595 name = savepv(name);
2600 /* switch to eval mode */
2602 push_return(PL_op->op_next);
2603 PUSHBLOCK(cx, CXt_EVAL, SP);
2604 PUSHEVAL(cx, name, PL_compiling.cop_filegv);
2606 PL_compiling.cop_line = 0;
2610 MUTEX_LOCK(&PL_eval_mutex);
2611 if (PL_eval_owner && PL_eval_owner != thr)
2612 while (PL_eval_owner)
2613 COND_WAIT(&PL_eval_cond, &PL_eval_mutex);
2614 PL_eval_owner = thr;
2615 MUTEX_UNLOCK(&PL_eval_mutex);
2616 #endif /* USE_THREADS */
2617 return DOCATCH(doeval(G_SCALAR, NULL));
2622 return pp_require(ARGS);
2628 register PERL_CONTEXT *cx;
2630 I32 gimme = GIMME_V, was = PL_sub_generation;
2631 char tmpbuf[TYPE_DIGITS(long) + 12];
2636 if (!SvPV(sv,len) || !len)
2638 TAINT_PROPER("eval");
2644 /* switch to eval mode */
2646 SAVESPTR(PL_compiling.cop_filegv);
2647 sprintf(tmpbuf, "_<(eval %lu)", (unsigned long)++PL_evalseq);
2648 PL_compiling.cop_filegv = gv_fetchfile(tmpbuf+2);
2649 PL_compiling.cop_line = 1;
2650 /* XXX For C<eval "...">s within BEGIN {} blocks, this ends up
2651 deleting the eval's FILEGV from the stash before gv_check() runs
2652 (i.e. before run-time proper). To work around the coredump that
2653 ensues, we always turn GvMULTI_on for any globals that were
2654 introduced within evals. See force_ident(). GSAR 96-10-12 */
2655 safestr = savepv(tmpbuf);
2656 SAVEDELETE(PL_defstash, safestr, strlen(safestr));
2658 PL_hints = PL_op->op_targ;
2660 push_return(PL_op->op_next);
2661 PUSHBLOCK(cx, CXt_EVAL, SP);
2662 PUSHEVAL(cx, 0, PL_compiling.cop_filegv);
2664 /* prepare to compile string */
2666 if (PERLDB_LINE && PL_curstash != PL_debstash)
2667 save_lines(GvAV(PL_compiling.cop_filegv), PL_linestr);
2670 MUTEX_LOCK(&PL_eval_mutex);
2671 if (PL_eval_owner && PL_eval_owner != thr)
2672 while (PL_eval_owner)
2673 COND_WAIT(&PL_eval_cond, &PL_eval_mutex);
2674 PL_eval_owner = thr;
2675 MUTEX_UNLOCK(&PL_eval_mutex);
2676 #endif /* USE_THREADS */
2677 ret = doeval(gimme, NULL);
2678 if (PERLDB_INTER && was != PL_sub_generation /* Some subs defined here. */
2679 && ret != PL_op->op_next) { /* Successive compilation. */
2680 strcpy(safestr, "_<(eval )"); /* Anything fake and short. */
2682 return DOCATCH(ret);
2692 register PERL_CONTEXT *cx;
2694 U8 save_flags = PL_op -> op_flags;
2699 retop = pop_return();
2702 if (gimme == G_VOID)
2704 else if (gimme == G_SCALAR) {
2707 if (SvFLAGS(TOPs) & SVs_TEMP)
2710 *MARK = sv_mortalcopy(TOPs);
2714 *MARK = &PL_sv_undef;
2718 /* in case LEAVE wipes old return values */
2719 for (mark = newsp + 1; mark <= SP; mark++) {
2720 if (!(SvFLAGS(*mark) & SVs_TEMP)) {
2721 *mark = sv_mortalcopy(*mark);
2722 TAINT_NOT; /* Each item is independent */
2726 PL_curpm = newpm; /* Don't pop $1 et al till now */
2729 * Closures mentioned at top level of eval cannot be referenced
2730 * again, and their presence indirectly causes a memory leak.
2731 * (Note that the fact that compcv and friends are still set here
2732 * is, AFAIK, an accident.) --Chip
2734 if (AvFILLp(PL_comppad_name) >= 0) {
2735 SV **svp = AvARRAY(PL_comppad_name);
2737 for (ix = AvFILLp(PL_comppad_name); ix >= 0; ix--) {
2739 if (sv && sv != &PL_sv_undef && *SvPVX(sv) == '&') {
2741 svp[ix] = &PL_sv_undef;
2745 SvREFCNT_dec(CvOUTSIDE(sv));
2746 CvOUTSIDE(sv) = Nullcv;
2759 assert(CvDEPTH(PL_compcv) == 1);
2761 CvDEPTH(PL_compcv) = 0;
2764 if (optype == OP_REQUIRE &&
2765 !(gimme == G_SCALAR ? SvTRUE(*SP) : SP > newsp))
2767 /* Unassume the success we assumed earlier. */
2768 char *name = cx->blk_eval.old_name;
2769 (void)hv_delete(GvHVn(PL_incgv), name, strlen(name), G_DISCARD);
2770 retop = die("%s did not return a true value", name);
2771 /* die_where() did LEAVE, or we won't be here */
2775 if (!(save_flags & OPf_SPECIAL))
2785 register PERL_CONTEXT *cx;
2786 I32 gimme = GIMME_V;
2791 push_return(cLOGOP->op_other->op_next);
2792 PUSHBLOCK(cx, CXt_EVAL, SP);
2794 PL_eval_root = PL_op; /* Only needed so that goto works right. */
2799 return DOCATCH(PL_op->op_next);
2809 register PERL_CONTEXT *cx;
2817 if (gimme == G_VOID)
2819 else if (gimme == G_SCALAR) {
2822 if (SvFLAGS(TOPs) & (SVs_PADTMP|SVs_TEMP))
2825 *MARK = sv_mortalcopy(TOPs);
2829 *MARK = &PL_sv_undef;
2834 /* in case LEAVE wipes old return values */
2835 for (mark = newsp + 1; mark <= SP; mark++) {
2836 if (!(SvFLAGS(*mark) & (SVs_PADTMP|SVs_TEMP))) {
2837 *mark = sv_mortalcopy(*mark);
2838 TAINT_NOT; /* Each item is independent */
2842 PL_curpm = newpm; /* Don't pop $1 et al till now */
2853 register char *s = SvPV_force(sv, len);
2854 register char *send = s + len;
2855 register char *base;
2856 register I32 skipspaces = 0;
2859 bool postspace = FALSE;
2867 croak("Null picture in formline");
2869 New(804, fops, (send - s)*3+10, U16); /* Almost certainly too long... */
2874 *fpc++ = FF_LINEMARK;
2875 noblank = repeat = FALSE;
2893 case ' ': case '\t':
2904 *fpc++ = FF_LITERAL;
2912 *fpc++ = skipspaces;
2916 *fpc++ = FF_NEWLINE;
2920 arg = fpc - linepc + 1;
2927 *fpc++ = FF_LINEMARK;
2928 noblank = repeat = FALSE;
2937 ischop = s[-1] == '^';
2943 arg = (s - base) - 1;
2945 *fpc++ = FF_LITERAL;
2954 *fpc++ = FF_LINEGLOB;
2956 else if (*s == '#' || (*s == '.' && s[1] == '#')) {
2957 arg = ischop ? 512 : 0;
2967 arg |= 256 + (s - f);
2969 *fpc++ = s - base; /* fieldsize for FETCH */
2970 *fpc++ = FF_DECIMAL;
2975 bool ismore = FALSE;
2978 while (*++s == '>') ;
2979 prespace = FF_SPACE;
2981 else if (*s == '|') {
2982 while (*++s == '|') ;
2983 prespace = FF_HALFSPACE;
2988 while (*++s == '<') ;
2991 if (*s == '.' && s[1] == '.' && s[2] == '.') {
2995 *fpc++ = s - base; /* fieldsize for FETCH */
2997 *fpc++ = ischop ? FF_CHECKCHOP : FF_CHECKNL;
3015 { /* need to jump to the next word */
3017 z = WORD_ALIGN - SvCUR(sv) % WORD_ALIGN;
3018 SvGROW(sv, SvCUR(sv) + z + arg * sizeof(U16) + 4);
3019 s = SvPVX(sv) + SvCUR(sv) + z;
3021 Copy(fops, s, arg, U16);
3023 sv_magic(sv, Nullsv, 'f', Nullch, 0);
3028 * The rest of this file was derived from source code contributed
3031 * NOTE: this code was derived from Tom Horsley's qsort replacement
3032 * and should not be confused with the original code.
3035 /* Copyright (C) Tom Horsley, 1997. All rights reserved.
3037 Permission granted to distribute under the same terms as perl which are
3040 This program is free software; you can redistribute it and/or modify
3041 it under the terms of either:
3043 a) the GNU General Public License as published by the Free
3044 Software Foundation; either version 1, or (at your option) any
3047 b) the "Artistic License" which comes with this Kit.
3049 Details on the perl license can be found in the perl source code which
3050 may be located via the www.perl.com web page.
3052 This is the most wonderfulest possible qsort I can come up with (and
3053 still be mostly portable) My (limited) tests indicate it consistently
3054 does about 20% fewer calls to compare than does the qsort in the Visual
3055 C++ library, other vendors may vary.
3057 Some of the ideas in here can be found in "Algorithms" by Sedgewick,
3058 others I invented myself (or more likely re-invented since they seemed
3059 pretty obvious once I watched the algorithm operate for a while).
3061 Most of this code was written while watching the Marlins sweep the Giants
3062 in the 1997 National League Playoffs - no Braves fans allowed to use this
3063 code (just kidding :-).
3065 I realize that if I wanted to be true to the perl tradition, the only
3066 comment in this file would be something like:
3068 ...they shuffled back towards the rear of the line. 'No, not at the
3069 rear!' the slave-driver shouted. 'Three files up. And stay there...
3071 However, I really needed to violate that tradition just so I could keep
3072 track of what happens myself, not to mention some poor fool trying to
3073 understand this years from now :-).
3076 /* ********************************************************** Configuration */
3078 #ifndef QSORT_ORDER_GUESS
3079 #define QSORT_ORDER_GUESS 2 /* Select doubling version of the netBSD trick */
3082 /* QSORT_MAX_STACK is the largest number of partitions that can be stacked up for
3083 future processing - a good max upper bound is log base 2 of memory size
3084 (32 on 32 bit machines, 64 on 64 bit machines, etc). In reality can
3085 safely be smaller than that since the program is taking up some space and
3086 most operating systems only let you grab some subset of contiguous
3087 memory (not to mention that you are normally sorting data larger than
3088 1 byte element size :-).
3090 #ifndef QSORT_MAX_STACK
3091 #define QSORT_MAX_STACK 32
3094 /* QSORT_BREAK_EVEN is the size of the largest partition we should insertion sort.
3095 Anything bigger and we use qsort. If you make this too small, the qsort
3096 will probably break (or become less efficient), because it doesn't expect
3097 the middle element of a partition to be the same as the right or left -
3098 you have been warned).
3100 #ifndef QSORT_BREAK_EVEN
3101 #define QSORT_BREAK_EVEN 6
3104 /* ************************************************************* Data Types */
3106 /* hold left and right index values of a partition waiting to be sorted (the
3107 partition includes both left and right - right is NOT one past the end or
3108 anything like that).
3110 struct partition_stack_entry {
3113 #ifdef QSORT_ORDER_GUESS
3114 int qsort_break_even;
3118 /* ******************************************************* Shorthand Macros */
3120 /* Note that these macros will be used from inside the qsort function where
3121 we happen to know that the variable 'elt_size' contains the size of an
3122 array element and the variable 'temp' points to enough space to hold a
3123 temp element and the variable 'array' points to the array being sorted
3124 and 'compare' is the pointer to the compare routine.
3126 Also note that there are very many highly architecture specific ways
3127 these might be sped up, but this is simply the most generally portable
3128 code I could think of.
3131 /* Return < 0 == 0 or > 0 as the value of elt1 is < elt2, == elt2, > elt2
3134 #define qsort_cmp(elt1, elt2) \
3135 ((this->*compare)(array[elt1], array[elt2]))
3137 #define qsort_cmp(elt1, elt2) \
3138 ((*compare)(array[elt1], array[elt2]))
3141 #ifdef QSORT_ORDER_GUESS
3142 #define QSORT_NOTICE_SWAP swapped++;
3144 #define QSORT_NOTICE_SWAP
3147 /* swaps contents of array elements elt1, elt2.
3149 #define qsort_swap(elt1, elt2) \
3152 temp = array[elt1]; \
3153 array[elt1] = array[elt2]; \
3154 array[elt2] = temp; \
3157 /* rotate contents of elt1, elt2, elt3 such that elt1 gets elt2, elt2 gets
3158 elt3 and elt3 gets elt1.
3160 #define qsort_rotate(elt1, elt2, elt3) \
3163 temp = array[elt1]; \
3164 array[elt1] = array[elt2]; \
3165 array[elt2] = array[elt3]; \
3166 array[elt3] = temp; \
3169 /* ************************************************************ Debug stuff */
3176 return; /* good place to set a breakpoint */
3179 #define qsort_assert(t) (void)( (t) || (break_here(), 0) )
3182 doqsort_all_asserts(
3186 int (*compare)(const void * elt1, const void * elt2),
3187 int pc_left, int pc_right, int u_left, int u_right)
3191 qsort_assert(pc_left <= pc_right);
3192 qsort_assert(u_right < pc_left);
3193 qsort_assert(pc_right < u_left);
3194 for (i = u_right + 1; i < pc_left; ++i) {
3195 qsort_assert(qsort_cmp(i, pc_left) < 0);
3197 for (i = pc_left; i < pc_right; ++i) {
3198 qsort_assert(qsort_cmp(i, pc_right) == 0);
3200 for (i = pc_right + 1; i < u_left; ++i) {
3201 qsort_assert(qsort_cmp(pc_right, i) < 0);
3205 #define qsort_all_asserts(PC_LEFT, PC_RIGHT, U_LEFT, U_RIGHT) \
3206 doqsort_all_asserts(array, num_elts, elt_size, compare, \
3207 PC_LEFT, PC_RIGHT, U_LEFT, U_RIGHT)
3211 #define qsort_assert(t) ((void)0)
3213 #define qsort_all_asserts(PC_LEFT, PC_RIGHT, U_LEFT, U_RIGHT) ((void)0)
3217 /* ****************************************************************** qsort */
3221 qsortsv(SV ** array, size_t num_elts, SVCOMPARE compare)
3226 I32 (*compare)(SV *a, SV *b))
3231 struct partition_stack_entry partition_stack[QSORT_MAX_STACK];
3232 int next_stack_entry = 0;
3236 #ifdef QSORT_ORDER_GUESS
3237 int qsort_break_even;
3241 /* Make sure we actually have work to do.
3243 if (num_elts <= 1) {
3247 /* Setup the initial partition definition and fall into the sorting loop
3250 part_right = (int)(num_elts - 1);
3251 #ifdef QSORT_ORDER_GUESS
3252 qsort_break_even = QSORT_BREAK_EVEN;
3254 #define qsort_break_even QSORT_BREAK_EVEN
3257 if ((part_right - part_left) >= qsort_break_even) {
3258 /* OK, this is gonna get hairy, so lets try to document all the
3259 concepts and abbreviations and variables and what they keep
3262 pc: pivot chunk - the set of array elements we accumulate in the
3263 middle of the partition, all equal in value to the original
3264 pivot element selected. The pc is defined by:
3266 pc_left - the leftmost array index of the pc
3267 pc_right - the rightmost array index of the pc
3269 we start with pc_left == pc_right and only one element
3270 in the pivot chunk (but it can grow during the scan).
3272 u: uncompared elements - the set of elements in the partition
3273 we have not yet compared to the pivot value. There are two
3274 uncompared sets during the scan - one to the left of the pc
3275 and one to the right.
3277 u_right - the rightmost index of the left side's uncompared set
3278 u_left - the leftmost index of the right side's uncompared set
3280 The leftmost index of the left sides's uncompared set
3281 doesn't need its own variable because it is always defined
3282 by the leftmost edge of the whole partition (part_left). The
3283 same goes for the rightmost edge of the right partition
3286 We know there are no uncompared elements on the left once we
3287 get u_right < part_left and no uncompared elements on the
3288 right once u_left > part_right. When both these conditions
3289 are met, we have completed the scan of the partition.
3291 Any elements which are between the pivot chunk and the
3292 uncompared elements should be less than the pivot value on
3293 the left side and greater than the pivot value on the right
3294 side (in fact, the goal of the whole algorithm is to arrange
3295 for that to be true and make the groups of less-than and
3296 greater-then elements into new partitions to sort again).
3298 As you marvel at the complexity of the code and wonder why it
3299 has to be so confusing. Consider some of the things this level
3300 of confusion brings:
3302 Once I do a compare, I squeeze every ounce of juice out of it. I
3303 never do compare calls I don't have to do, and I certainly never
3306 I also never swap any elements unless I can prove there is a
3307 good reason. Many sort algorithms will swap a known value with
3308 an uncompared value just to get things in the right place (or
3309 avoid complexity :-), but that uncompared value, once it gets
3310 compared, may then have to be swapped again. A lot of the
3311 complexity of this code is due to the fact that it never swaps
3312 anything except compared values, and it only swaps them when the
3313 compare shows they are out of position.
3315 int pc_left, pc_right;
3316 int u_right, u_left;
3320 pc_left = ((part_left + part_right) / 2);
3322 u_right = pc_left - 1;
3323 u_left = pc_right + 1;
3325 /* Qsort works best when the pivot value is also the median value
3326 in the partition (unfortunately you can't find the median value
3327 without first sorting :-), so to give the algorithm a helping
3328 hand, we pick 3 elements and sort them and use the median value
3329 of that tiny set as the pivot value.
3331 Some versions of qsort like to use the left middle and right as
3332 the 3 elements to sort so they can insure the ends of the
3333 partition will contain values which will stop the scan in the
3334 compare loop, but when you have to call an arbitrarily complex
3335 routine to do a compare, its really better to just keep track of
3336 array index values to know when you hit the edge of the
3337 partition and avoid the extra compare. An even better reason to
3338 avoid using a compare call is the fact that you can drop off the
3339 edge of the array if someone foolishly provides you with an
3340 unstable compare function that doesn't always provide consistent
3343 So, since it is simpler for us to compare the three adjacent
3344 elements in the middle of the partition, those are the ones we
3345 pick here (conveniently pointed at by u_right, pc_left, and
3346 u_left). The values of the left, center, and right elements
3347 are refered to as l c and r in the following comments.
3350 #ifdef QSORT_ORDER_GUESS
3353 s = qsort_cmp(u_right, pc_left);
3356 s = qsort_cmp(pc_left, u_left);
3357 /* if l < c, c < r - already in order - nothing to do */
3359 /* l < c, c == r - already in order, pc grows */
3361 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3363 /* l < c, c > r - need to know more */
3364 s = qsort_cmp(u_right, u_left);
3366 /* l < c, c > r, l < r - swap c & r to get ordered */
3367 qsort_swap(pc_left, u_left);
3368 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3369 } else if (s == 0) {
3370 /* l < c, c > r, l == r - swap c&r, grow pc */
3371 qsort_swap(pc_left, u_left);
3373 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3375 /* l < c, c > r, l > r - make lcr into rlc to get ordered */
3376 qsort_rotate(pc_left, u_right, u_left);
3377 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3380 } else if (s == 0) {
3382 s = qsort_cmp(pc_left, u_left);
3384 /* l == c, c < r - already in order, grow pc */
3386 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3387 } else if (s == 0) {
3388 /* l == c, c == r - already in order, grow pc both ways */
3391 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3393 /* l == c, c > r - swap l & r, grow pc */
3394 qsort_swap(u_right, u_left);
3396 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3400 s = qsort_cmp(pc_left, u_left);
3402 /* l > c, c < r - need to know more */
3403 s = qsort_cmp(u_right, u_left);
3405 /* l > c, c < r, l < r - swap l & c to get ordered */
3406 qsort_swap(u_right, pc_left);
3407 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3408 } else if (s == 0) {
3409 /* l > c, c < r, l == r - swap l & c, grow pc */
3410 qsort_swap(u_right, pc_left);
3412 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3414 /* l > c, c < r, l > r - rotate lcr into crl to order */
3415 qsort_rotate(u_right, pc_left, u_left);
3416 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3418 } else if (s == 0) {
3419 /* l > c, c == r - swap ends, grow pc */
3420 qsort_swap(u_right, u_left);
3422 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3424 /* l > c, c > r - swap ends to get in order */
3425 qsort_swap(u_right, u_left);
3426 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3429 /* We now know the 3 middle elements have been compared and
3430 arranged in the desired order, so we can shrink the uncompared
3435 qsort_all_asserts(pc_left, pc_right, u_left, u_right);
3437 /* The above massive nested if was the simple part :-). We now have
3438 the middle 3 elements ordered and we need to scan through the
3439 uncompared sets on either side, swapping elements that are on
3440 the wrong side or simply shuffling equal elements around to get
3441 all equal elements into the pivot chunk.
3445 int still_work_on_left;
3446 int still_work_on_right;
3448 /* Scan the uncompared values on the left. If I find a value
3449 equal to the pivot value, move it over so it is adjacent to
3450 the pivot chunk and expand the pivot chunk. If I find a value
3451 less than the pivot value, then just leave it - its already
3452 on the correct side of the partition. If I find a greater
3453 value, then stop the scan.
3455 while (still_work_on_left = (u_right >= part_left)) {
3456 s = qsort_cmp(u_right, pc_left);
3459 } else if (s == 0) {
3461 if (pc_left != u_right) {
3462 qsort_swap(u_right, pc_left);
3468 qsort_assert(u_right < pc_left);
3469 qsort_assert(pc_left <= pc_right);
3470 qsort_assert(qsort_cmp(u_right + 1, pc_left) <= 0);
3471 qsort_assert(qsort_cmp(pc_left, pc_right) == 0);
3474 /* Do a mirror image scan of uncompared values on the right
3476 while (still_work_on_right = (u_left <= part_right)) {
3477 s = qsort_cmp(pc_right, u_left);
3480 } else if (s == 0) {
3482 if (pc_right != u_left) {
3483 qsort_swap(pc_right, u_left);
3489 qsort_assert(u_left > pc_right);
3490 qsort_assert(pc_left <= pc_right);
3491 qsort_assert(qsort_cmp(pc_right, u_left - 1) <= 0);
3492 qsort_assert(qsort_cmp(pc_left, pc_right) == 0);
3495 if (still_work_on_left) {
3496 /* I know I have a value on the left side which needs to be
3497 on the right side, but I need to know more to decide
3498 exactly the best thing to do with it.
3500 if (still_work_on_right) {
3501 /* I know I have values on both side which are out of
3502 position. This is a big win because I kill two birds
3503 with one swap (so to speak). I can advance the
3504 uncompared pointers on both sides after swapping both
3505 of them into the right place.
3507 qsort_swap(u_right, u_left);
3510 qsort_all_asserts(pc_left, pc_right, u_left, u_right);
3512 /* I have an out of position value on the left, but the
3513 right is fully scanned, so I "slide" the pivot chunk
3514 and any less-than values left one to make room for the
3515 greater value over on the right. If the out of position
3516 value is immediately adjacent to the pivot chunk (there
3517 are no less-than values), I can do that with a swap,
3518 otherwise, I have to rotate one of the less than values
3519 into the former position of the out of position value
3520 and the right end of the pivot chunk into the left end
3524 if (pc_left == u_right) {
3525 qsort_swap(u_right, pc_right);
3526 qsort_all_asserts(pc_left, pc_right-1, u_left, u_right-1);
3528 qsort_rotate(u_right, pc_left, pc_right);
3529 qsort_all_asserts(pc_left, pc_right-1, u_left, u_right-1);
3534 } else if (still_work_on_right) {
3535 /* Mirror image of complex case above: I have an out of
3536 position value on the right, but the left is fully
3537 scanned, so I need to shuffle things around to make room
3538 for the right value on the left.
3541 if (pc_right == u_left) {
3542 qsort_swap(u_left, pc_left);
3543 qsort_all_asserts(pc_left+1, pc_right, u_left+1, u_right);
3545 qsort_rotate(pc_right, pc_left, u_left);
3546 qsort_all_asserts(pc_left+1, pc_right, u_left+1, u_right);
3551 /* No more scanning required on either side of partition,
3552 break out of loop and figure out next set of partitions
3558 /* The elements in the pivot chunk are now in the right place. They
3559 will never move or be compared again. All I have to do is decide
3560 what to do with the stuff to the left and right of the pivot
3563 Notes on the QSORT_ORDER_GUESS ifdef code:
3565 1. If I just built these partitions without swapping any (or
3566 very many) elements, there is a chance that the elements are
3567 already ordered properly (being properly ordered will
3568 certainly result in no swapping, but the converse can't be
3571 2. A (properly written) insertion sort will run faster on
3572 already ordered data than qsort will.
3574 3. Perhaps there is some way to make a good guess about
3575 switching to an insertion sort earlier than partition size 6
3576 (for instance - we could save the partition size on the stack
3577 and increase the size each time we find we didn't swap, thus
3578 switching to insertion sort earlier for partitions with a
3579 history of not swapping).
3581 4. Naturally, if I just switch right away, it will make
3582 artificial benchmarks with pure ascending (or descending)
3583 data look really good, but is that a good reason in general?
3587 #ifdef QSORT_ORDER_GUESS
3589 #if QSORT_ORDER_GUESS == 1
3590 qsort_break_even = (part_right - part_left) + 1;
3592 #if QSORT_ORDER_GUESS == 2
3593 qsort_break_even *= 2;
3595 #if QSORT_ORDER_GUESS == 3
3596 int prev_break = qsort_break_even;
3597 qsort_break_even *= qsort_break_even;
3598 if (qsort_break_even < prev_break) {
3599 qsort_break_even = (part_right - part_left) + 1;
3603 qsort_break_even = QSORT_BREAK_EVEN;
3607 if (part_left < pc_left) {
3608 /* There are elements on the left which need more processing.
3609 Check the right as well before deciding what to do.
3611 if (pc_right < part_right) {
3612 /* We have two partitions to be sorted. Stack the biggest one
3613 and process the smallest one on the next iteration. This
3614 minimizes the stack height by insuring that any additional
3615 stack entries must come from the smallest partition which
3616 (because it is smallest) will have the fewest
3617 opportunities to generate additional stack entries.
3619 if ((part_right - pc_right) > (pc_left - part_left)) {
3620 /* stack the right partition, process the left */
3621 partition_stack[next_stack_entry].left = pc_right + 1;
3622 partition_stack[next_stack_entry].right = part_right;
3623 #ifdef QSORT_ORDER_GUESS
3624 partition_stack[next_stack_entry].qsort_break_even = qsort_break_even;
3626 part_right = pc_left - 1;
3628 /* stack the left partition, process the right */
3629 partition_stack[next_stack_entry].left = part_left;
3630 partition_stack[next_stack_entry].right = pc_left - 1;
3631 #ifdef QSORT_ORDER_GUESS
3632 partition_stack[next_stack_entry].qsort_break_even = qsort_break_even;
3634 part_left = pc_right + 1;
3636 qsort_assert(next_stack_entry < QSORT_MAX_STACK);
3639 /* The elements on the left are the only remaining elements
3640 that need sorting, arrange for them to be processed as the
3643 part_right = pc_left - 1;
3645 } else if (pc_right < part_right) {
3646 /* There is only one chunk on the right to be sorted, make it
3647 the new partition and loop back around.
3649 part_left = pc_right + 1;
3651 /* This whole partition wound up in the pivot chunk, so
3652 we need to get a new partition off the stack.
3654 if (next_stack_entry == 0) {
3655 /* the stack is empty - we are done */
3659 part_left = partition_stack[next_stack_entry].left;
3660 part_right = partition_stack[next_stack_entry].right;
3661 #ifdef QSORT_ORDER_GUESS
3662 qsort_break_even = partition_stack[next_stack_entry].qsort_break_even;
3666 /* This partition is too small to fool with qsort complexity, just
3667 do an ordinary insertion sort to minimize overhead.
3670 /* Assume 1st element is in right place already, and start checking
3671 at 2nd element to see where it should be inserted.
3673 for (i = part_left + 1; i <= part_right; ++i) {
3675 /* Scan (backwards - just in case 'i' is already in right place)
3676 through the elements already sorted to see if the ith element
3677 belongs ahead of one of them.
3679 for (j = i - 1; j >= part_left; --j) {
3680 if (qsort_cmp(i, j) >= 0) {
3681 /* i belongs right after j
3688 /* Looks like we really need to move some things
3692 for (k = i - 1; k >= j; --k)
3693 array[k + 1] = array[k];
3698 /* That partition is now sorted, grab the next one, or get out
3699 of the loop if there aren't any more.
3702 if (next_stack_entry == 0) {
3703 /* the stack is empty - we are done */
3707 part_left = partition_stack[next_stack_entry].left;
3708 part_right = partition_stack[next_stack_entry].right;
3709 #ifdef QSORT_ORDER_GUESS
3710 qsort_break_even = partition_stack[next_stack_entry].qsort_break_even;
3715 /* Believe it or not, the array is sorted at this point! */