3 * Copyright (c) 1991-1999, 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);
535 while (*s && isSPACE(*s) && s < send)
539 arg = fieldsize - itemsize;
546 if (strnEQ(s," ",3)) {
547 while (s > SvPVX(PL_formtarget) && isSPACE(s[-1]))
558 SvCUR_set(PL_formtarget, t - SvPVX(PL_formtarget));
559 FmLINES(PL_formtarget) += lines;
571 if (PL_stack_base + *PL_markstack_ptr == SP) {
573 if (GIMME_V == G_SCALAR)
575 RETURNOP(PL_op->op_next->op_next);
577 PL_stack_sp = PL_stack_base + *PL_markstack_ptr + 1;
578 pp_pushmark(ARGS); /* push dst */
579 pp_pushmark(ARGS); /* push src */
580 ENTER; /* enter outer scope */
584 /* SAVE_DEFSV does *not* suffice here */
585 save_sptr(&THREADSV(0));
587 SAVESPTR(GvSV(PL_defgv));
588 #endif /* USE_THREADS */
589 ENTER; /* enter inner scope */
592 src = PL_stack_base[*PL_markstack_ptr];
597 if (PL_op->op_type == OP_MAPSTART)
598 pp_pushmark(ARGS); /* push top */
599 return ((LOGOP*)PL_op->op_next)->op_other;
604 DIE("panic: mapstart"); /* uses grepstart */
610 I32 diff = (SP - PL_stack_base) - *PL_markstack_ptr;
616 ++PL_markstack_ptr[-1];
618 if (diff > PL_markstack_ptr[-1] - PL_markstack_ptr[-2]) {
619 shift = diff - (PL_markstack_ptr[-1] - PL_markstack_ptr[-2]);
620 count = (SP - PL_stack_base) - PL_markstack_ptr[-1] + 2;
625 PL_markstack_ptr[-1] += shift;
626 *PL_markstack_ptr += shift;
630 dst = PL_stack_base + (PL_markstack_ptr[-2] += diff) - 1;
633 *dst-- = SvTEMP(TOPs) ? POPs : sv_mortalcopy(POPs);
635 LEAVE; /* exit inner scope */
638 if (PL_markstack_ptr[-1] > *PL_markstack_ptr) {
642 (void)POPMARK; /* pop top */
643 LEAVE; /* exit outer scope */
644 (void)POPMARK; /* pop src */
645 items = --*PL_markstack_ptr - PL_markstack_ptr[-1];
646 (void)POPMARK; /* pop dst */
647 SP = PL_stack_base + POPMARK; /* pop original mark */
648 if (gimme == G_SCALAR) {
652 else if (gimme == G_ARRAY)
659 ENTER; /* enter inner scope */
662 src = PL_stack_base[PL_markstack_ptr[-1]];
666 RETURNOP(cLOGOP->op_other);
670 #define tryCALL_AMAGICbin(left,right,meth,svp) STMT_START { \
672 if (PL_amagic_generation) { \
673 if (SvAMAGIC(left)||SvAMAGIC(right))\
674 *svp = amagic_call(left, \
682 amagic_cmp(register SV *str1, register SV *str2)
685 tryCALL_AMAGICbin(str1,str2,scmp,&tmpsv);
690 I32 i = SvIVX(tmpsv);
700 return sv_cmp(str1, str2);
704 amagic_cmp_locale(register SV *str1, register SV *str2)
707 tryCALL_AMAGICbin(str1,str2,scmp,&tmpsv);
712 I32 i = SvIVX(tmpsv);
722 return sv_cmp_locale(str1, str2);
727 djSP; dMARK; dORIGMARK;
729 SV **myorigmark = ORIGMARK;
735 OP* nextop = PL_op->op_next;
738 if (gimme != G_ARRAY) {
744 SAVEPPTR(PL_sortcop);
745 if (PL_op->op_flags & OPf_STACKED) {
746 if (PL_op->op_flags & OPf_SPECIAL) {
747 OP *kid = cLISTOP->op_first->op_sibling; /* pass pushmark */
748 kid = kUNOP->op_first; /* pass rv2gv */
749 kid = kUNOP->op_first; /* pass leave */
750 PL_sortcop = kid->op_next;
751 stash = PL_curcop->cop_stash;
754 cv = sv_2cv(*++MARK, &stash, &gv, 0);
755 if (!(cv && CvROOT(cv))) {
757 SV *tmpstr = sv_newmortal();
758 gv_efullname3(tmpstr, gv, Nullch);
759 if (cv && CvXSUB(cv))
760 DIE("Xsub \"%s\" called in sort", SvPVX(tmpstr));
761 DIE("Undefined sort subroutine \"%s\" called",
766 DIE("Xsub called in sort");
767 DIE("Undefined subroutine in sort");
769 DIE("Not a CODE reference in sort");
771 PL_sortcop = CvSTART(cv);
772 SAVESPTR(CvROOT(cv)->op_ppaddr);
773 CvROOT(cv)->op_ppaddr = ppaddr[OP_NULL];
776 PL_curpad = AvARRAY((AV*)AvARRAY(CvPADLIST(cv))[1]);
781 stash = PL_curcop->cop_stash;
785 while (MARK < SP) { /* This may or may not shift down one here. */
787 if (*up = *++MARK) { /* Weed out nulls. */
789 if (!PL_sortcop && !SvPOK(*up)) {
794 (void)sv_2pv(*up, &n_a);
800 max = --up - myorigmark;
805 bool oldcatch = CATCH_GET;
811 PUSHSTACKi(PERLSI_SORT);
812 if (PL_sortstash != stash) {
813 PL_firstgv = gv_fetchpv("a", TRUE, SVt_PV);
814 PL_secondgv = gv_fetchpv("b", TRUE, SVt_PV);
815 PL_sortstash = stash;
818 SAVESPTR(GvSV(PL_firstgv));
819 SAVESPTR(GvSV(PL_secondgv));
821 PUSHBLOCK(cx, CXt_NULL, PL_stack_base);
822 if (!(PL_op->op_flags & OPf_SPECIAL)) {
823 bool hasargs = FALSE;
824 cx->cx_type = CXt_SUB;
825 cx->blk_gimme = G_SCALAR;
828 (void)SvREFCNT_inc(cv); /* in preparation for POPSUB */
830 PL_sortcxix = cxstack_ix;
831 qsortsv((myorigmark+1), max, FUNC_NAME_TO_PTR(sortcv));
833 POPBLOCK(cx,PL_curpm);
840 MEXTEND(SP, 20); /* Can't afford stack realloc on signal. */
841 qsortsv(ORIGMARK+1, max,
842 (PL_op->op_private & OPpLOCALE)
844 ? FUNC_NAME_TO_PTR(amagic_cmp_locale)
845 : FUNC_NAME_TO_PTR(sv_cmp_locale))
847 ? FUNC_NAME_TO_PTR(amagic_cmp)
848 : FUNC_NAME_TO_PTR(sv_cmp) ));
852 PL_stack_sp = ORIGMARK + max;
860 if (GIMME == G_ARRAY)
861 return cCONDOP->op_true;
862 return SvTRUEx(PAD_SV(PL_op->op_targ)) ? cCONDOP->op_false : cCONDOP->op_true;
869 if (GIMME == G_ARRAY) {
870 RETURNOP(((CONDOP*)cUNOP->op_first)->op_false);
874 SV *targ = PAD_SV(PL_op->op_targ);
876 if ((PL_op->op_private & OPpFLIP_LINENUM)
877 ? (PL_last_in_gv && SvIV(sv) == (IV)IoLINES(GvIOp(PL_last_in_gv)))
879 sv_setiv(PAD_SV(cUNOP->op_first->op_targ), 1);
880 if (PL_op->op_flags & OPf_SPECIAL) {
888 RETURNOP(((CONDOP*)cUNOP->op_first)->op_false);
901 if (GIMME == G_ARRAY) {
907 if (SvNIOKp(left) || !SvPOKp(left) ||
908 (looks_like_number(left) && *SvPVX(left) != '0') )
910 if (SvNV(left) < IV_MIN || SvNV(right) > IV_MAX)
911 croak("Range iterator outside integer range");
922 sv = sv_2mortal(newSViv(i++));
927 SV *final = sv_mortalcopy(right);
930 char *tmps = SvPV(final, len);
932 sv = sv_mortalcopy(left);
934 while (!SvNIOKp(sv) && SvCUR(sv) <= len) {
936 if (strEQ(SvPVX(sv),tmps))
938 sv = sv_2mortal(newSVsv(sv));
945 SV *targ = PAD_SV(cUNOP->op_first->op_targ);
947 if ((PL_op->op_private & OPpFLIP_LINENUM)
948 ? (PL_last_in_gv && SvIV(sv) == (IV)IoLINES(GvIOp(PL_last_in_gv)))
950 sv_setiv(PAD_SV(((UNOP*)cUNOP->op_first)->op_first->op_targ), 0);
951 sv_catpv(targ, "E0");
962 dopoptolabel(char *label)
966 register PERL_CONTEXT *cx;
968 for (i = cxstack_ix; i >= 0; i--) {
970 switch (CxTYPE(cx)) {
973 warn("Exiting substitution via %s", op_name[PL_op->op_type]);
977 warn("Exiting subroutine via %s", op_name[PL_op->op_type]);
981 warn("Exiting eval via %s", op_name[PL_op->op_type]);
985 warn("Exiting pseudo-block via %s", op_name[PL_op->op_type]);
988 if (!cx->blk_loop.label ||
989 strNE(label, cx->blk_loop.label) ) {
990 DEBUG_l(deb("(Skipping label #%ld %s)\n",
991 (long)i, cx->blk_loop.label));
994 DEBUG_l( deb("(Found label #%ld %s)\n", (long)i, label));
1004 I32 gimme = block_gimme();
1005 return (gimme == G_VOID) ? G_SCALAR : gimme;
1014 cxix = dopoptosub(cxstack_ix);
1018 switch (cxstack[cxix].blk_gimme) {
1026 croak("panic: bad gimme: %d\n", cxstack[cxix].blk_gimme);
1033 dopoptosub(I32 startingblock)
1036 return dopoptosub_at(cxstack, startingblock);
1040 dopoptosub_at(PERL_CONTEXT *cxstk, I32 startingblock)
1044 register PERL_CONTEXT *cx;
1045 for (i = startingblock; i >= 0; i--) {
1047 switch (CxTYPE(cx)) {
1052 DEBUG_l( deb("(Found sub #%ld)\n", (long)i));
1060 dopoptoeval(I32 startingblock)
1064 register PERL_CONTEXT *cx;
1065 for (i = startingblock; i >= 0; i--) {
1067 switch (CxTYPE(cx)) {
1071 DEBUG_l( deb("(Found eval #%ld)\n", (long)i));
1079 dopoptoloop(I32 startingblock)
1083 register PERL_CONTEXT *cx;
1084 for (i = startingblock; i >= 0; i--) {
1086 switch (CxTYPE(cx)) {
1089 warn("Exiting substitution via %s", op_name[PL_op->op_type]);
1093 warn("Exiting subroutine via %s", op_name[PL_op->op_type]);
1097 warn("Exiting eval via %s", op_name[PL_op->op_type]);
1101 warn("Exiting pseudo-block via %s", op_name[PL_op->op_type]);
1104 DEBUG_l( deb("(Found loop #%ld)\n", (long)i));
1115 register PERL_CONTEXT *cx;
1119 while (cxstack_ix > cxix) {
1120 cx = &cxstack[cxstack_ix];
1121 DEBUG_l(PerlIO_printf(Perl_debug_log, "Unwinding block %ld, type %s\n",
1122 (long) cxstack_ix, block_type[CxTYPE(cx)]));
1123 /* Note: we don't need to restore the base context info till the end. */
1124 switch (CxTYPE(cx)) {
1127 continue; /* not break */
1145 die_where(char *message)
1151 register PERL_CONTEXT *cx;
1156 if (PL_in_eval & 4) {
1158 STRLEN klen = strlen(message);
1160 svp = hv_fetch(ERRHV, message, klen, TRUE);
1163 static char prefix[] = "\t(in cleanup) ";
1165 sv_upgrade(*svp, SVt_IV);
1166 (void)SvIOK_only(*svp);
1169 SvGROW(err, SvCUR(err)+sizeof(prefix)+klen);
1170 sv_catpvn(err, prefix, sizeof(prefix)-1);
1171 sv_catpvn(err, message, klen);
1177 sv_setpv(ERRSV, message);
1180 message = SvPVx(ERRSV, n_a);
1182 while ((cxix = dopoptoeval(cxstack_ix)) < 0 && PL_curstackinfo->si_prev) {
1190 if (cxix < cxstack_ix)
1193 POPBLOCK(cx,PL_curpm);
1194 if (CxTYPE(cx) != CXt_EVAL) {
1195 PerlIO_printf(PerlIO_stderr(), "panic: die %s", message);
1200 if (gimme == G_SCALAR)
1201 *++newsp = &PL_sv_undef;
1202 PL_stack_sp = newsp;
1206 if (optype == OP_REQUIRE) {
1207 char* msg = SvPVx(ERRSV, n_a);
1208 DIE("%s", *msg ? msg : "Compilation failed in require");
1210 return pop_return();
1214 message = SvPVx(ERRSV, n_a);
1215 PerlIO_printf(PerlIO_stderr(), "%s",message);
1216 PerlIO_flush(PerlIO_stderr());
1225 if (SvTRUE(left) != SvTRUE(right))
1237 RETURNOP(cLOGOP->op_other);
1246 RETURNOP(cLOGOP->op_other);
1252 register I32 cxix = dopoptosub(cxstack_ix);
1253 register PERL_CONTEXT *cx;
1254 register PERL_CONTEXT *ccstack = cxstack;
1255 PERL_SI *top_si = PL_curstackinfo;
1266 /* we may be in a higher stacklevel, so dig down deeper */
1267 while (cxix < 0 && top_si->si_type != PERLSI_MAIN) {
1268 top_si = top_si->si_prev;
1269 ccstack = top_si->si_cxstack;
1270 cxix = dopoptosub_at(ccstack, top_si->si_cxix);
1273 if (GIMME != G_ARRAY)
1277 if (PL_DBsub && cxix >= 0 &&
1278 ccstack[cxix].blk_sub.cv == GvCV(PL_DBsub))
1282 cxix = dopoptosub_at(ccstack, cxix - 1);
1285 cx = &ccstack[cxix];
1286 if (CxTYPE(cx) == CXt_SUB) {
1287 dbcxix = dopoptosub_at(ccstack, cxix - 1);
1288 /* We expect that ccstack[dbcxix] is CXt_SUB, anyway, the
1289 field below is defined for any cx. */
1290 if (PL_DBsub && dbcxix >= 0 && ccstack[dbcxix].blk_sub.cv == GvCV(PL_DBsub))
1291 cx = &ccstack[dbcxix];
1294 if (GIMME != G_ARRAY) {
1295 hv = cx->blk_oldcop->cop_stash;
1297 PUSHs(&PL_sv_undef);
1300 sv_setpv(TARG, HvNAME(hv));
1306 hv = cx->blk_oldcop->cop_stash;
1308 PUSHs(&PL_sv_undef);
1310 PUSHs(sv_2mortal(newSVpv(HvNAME(hv), 0)));
1311 PUSHs(sv_2mortal(newSVpv(SvPVX(GvSV(cx->blk_oldcop->cop_filegv)), 0)));
1312 PUSHs(sv_2mortal(newSViv((I32)cx->blk_oldcop->cop_line)));
1315 if (CxTYPE(cx) == CXt_SUB) { /* So is ccstack[dbcxix]. */
1317 gv_efullname3(sv, CvGV(ccstack[cxix].blk_sub.cv), Nullch);
1318 PUSHs(sv_2mortal(sv));
1319 PUSHs(sv_2mortal(newSViv((I32)cx->blk_sub.hasargs)));
1322 PUSHs(sv_2mortal(newSVpv("(eval)",0)));
1323 PUSHs(sv_2mortal(newSViv(0)));
1325 gimme = (I32)cx->blk_gimme;
1326 if (gimme == G_VOID)
1327 PUSHs(&PL_sv_undef);
1329 PUSHs(sv_2mortal(newSViv(gimme & G_ARRAY)));
1330 if (CxTYPE(cx) == CXt_EVAL) {
1331 if (cx->blk_eval.old_op_type == OP_ENTEREVAL) {
1332 PUSHs(cx->blk_eval.cur_text);
1335 else if (cx->blk_eval.old_name) { /* Try blocks have old_name == 0. */
1336 /* Require, put the name. */
1337 PUSHs(sv_2mortal(newSVpv(cx->blk_eval.old_name, 0)));
1341 else if (CxTYPE(cx) == CXt_SUB &&
1342 cx->blk_sub.hasargs &&
1343 PL_curcop->cop_stash == PL_debstash)
1345 AV *ary = cx->blk_sub.argarray;
1346 int off = AvARRAY(ary) - AvALLOC(ary);
1350 PL_dbargs = GvAV(gv_AVadd(tmpgv = gv_fetchpv("DB::args", TRUE,
1353 AvREAL_off(PL_dbargs); /* XXX Should be REIFY */
1356 if (AvMAX(PL_dbargs) < AvFILLp(ary) + off)
1357 av_extend(PL_dbargs, AvFILLp(ary) + off);
1358 Copy(AvALLOC(ary), AvARRAY(PL_dbargs), AvFILLp(ary) + 1 + off, SV*);
1359 AvFILLp(PL_dbargs) = AvFILLp(ary) + off;
1365 sortcv(SV *a, SV *b)
1368 I32 oldsaveix = PL_savestack_ix;
1369 I32 oldscopeix = PL_scopestack_ix;
1371 GvSV(PL_firstgv) = a;
1372 GvSV(PL_secondgv) = b;
1373 PL_stack_sp = PL_stack_base;
1376 if (PL_stack_sp != PL_stack_base + 1)
1377 croak("Sort subroutine didn't return single value");
1378 if (!SvNIOKp(*PL_stack_sp))
1379 croak("Sort subroutine didn't return a numeric value");
1380 result = SvIV(*PL_stack_sp);
1381 while (PL_scopestack_ix > oldscopeix) {
1384 leave_scope(oldsaveix);
1398 sv_reset(tmps, PL_curcop->cop_stash);
1410 PL_curcop = (COP*)PL_op;
1411 TAINT_NOT; /* Each statement is presumed innocent */
1412 PL_stack_sp = PL_stack_base + cxstack[cxstack_ix].blk_oldsp;
1415 if (PL_op->op_private || SvIV(PL_DBsingle) || SvIV(PL_DBsignal) || SvIV(PL_DBtrace))
1419 register PERL_CONTEXT *cx;
1420 I32 gimme = G_ARRAY;
1427 DIE("No DB::DB routine defined");
1429 if (CvDEPTH(cv) >= 1 && !(PL_debug & (1<<30))) /* don't do recursive DB::DB call */
1441 push_return(PL_op->op_next);
1442 PUSHBLOCK(cx, CXt_SUB, SP);
1445 (void)SvREFCNT_inc(cv);
1446 SAVESPTR(PL_curpad);
1447 PL_curpad = AvARRAY((AV*)*av_fetch(CvPADLIST(cv),1,FALSE));
1448 RETURNOP(CvSTART(cv));
1462 register PERL_CONTEXT *cx;
1463 I32 gimme = GIMME_V;
1470 if (PL_op->op_flags & OPf_SPECIAL) {
1472 svp = &THREADSV(PL_op->op_targ); /* per-thread variable */
1473 SAVEGENERICSV(*svp);
1477 #endif /* USE_THREADS */
1478 if (PL_op->op_targ) {
1479 svp = &PL_curpad[PL_op->op_targ]; /* "my" variable */
1483 svp = &GvSV((GV*)POPs); /* symbol table variable */
1484 SAVEGENERICSV(*svp);
1490 PUSHBLOCK(cx, CXt_LOOP, SP);
1491 PUSHLOOP(cx, svp, MARK);
1492 if (PL_op->op_flags & OPf_STACKED) {
1493 cx->blk_loop.iterary = (AV*)SvREFCNT_inc(POPs);
1494 if (SvTYPE(cx->blk_loop.iterary) != SVt_PVAV) {
1496 if (SvNIOKp(sv) || !SvPOKp(sv) ||
1497 (looks_like_number(sv) && *SvPVX(sv) != '0')) {
1498 if (SvNV(sv) < IV_MIN ||
1499 SvNV((SV*)cx->blk_loop.iterary) >= IV_MAX)
1500 croak("Range iterator outside integer range");
1501 cx->blk_loop.iterix = SvIV(sv);
1502 cx->blk_loop.itermax = SvIV((SV*)cx->blk_loop.iterary);
1505 cx->blk_loop.iterlval = newSVsv(sv);
1509 cx->blk_loop.iterary = PL_curstack;
1510 AvFILLp(PL_curstack) = SP - PL_stack_base;
1511 cx->blk_loop.iterix = MARK - PL_stack_base;
1520 register PERL_CONTEXT *cx;
1521 I32 gimme = GIMME_V;
1527 PUSHBLOCK(cx, CXt_LOOP, SP);
1528 PUSHLOOP(cx, 0, SP);
1536 register PERL_CONTEXT *cx;
1537 struct block_loop cxloop;
1545 POPLOOP1(cx); /* Delay POPLOOP2 until stack values are safe */
1548 if (gimme == G_VOID)
1550 else if (gimme == G_SCALAR) {
1552 *++newsp = sv_mortalcopy(*SP);
1554 *++newsp = &PL_sv_undef;
1558 *++newsp = sv_mortalcopy(*++mark);
1559 TAINT_NOT; /* Each item is independent */
1565 POPLOOP2(); /* Stack values are safe: release loop vars ... */
1566 PL_curpm = newpm; /* ... and pop $1 et al */
1578 register PERL_CONTEXT *cx;
1579 struct block_sub cxsub;
1580 bool popsub2 = FALSE;
1586 if (PL_curstackinfo->si_type == PERLSI_SORT) {
1587 if (cxstack_ix == PL_sortcxix || dopoptosub(cxstack_ix) <= PL_sortcxix) {
1588 if (cxstack_ix > PL_sortcxix)
1589 dounwind(PL_sortcxix);
1590 AvARRAY(PL_curstack)[1] = *SP;
1591 PL_stack_sp = PL_stack_base + 1;
1596 cxix = dopoptosub(cxstack_ix);
1598 DIE("Can't return outside a subroutine");
1599 if (cxix < cxstack_ix)
1603 switch (CxTYPE(cx)) {
1605 POPSUB1(cx); /* Delay POPSUB2 until stack values are safe */
1610 if (optype == OP_REQUIRE &&
1611 (MARK == SP || (gimme == G_SCALAR && !SvTRUE(*SP))) )
1613 /* Unassume the success we assumed earlier. */
1614 char *name = cx->blk_eval.old_name;
1615 (void)hv_delete(GvHVn(PL_incgv), name, strlen(name), G_DISCARD);
1616 DIE("%s did not return a true value", name);
1620 DIE("panic: return");
1624 if (gimme == G_SCALAR) {
1627 if (cxsub.cv && CvDEPTH(cxsub.cv) > 1) {
1629 *++newsp = SvREFCNT_inc(*SP);
1634 *++newsp = sv_mortalcopy(*SP);
1637 *++newsp = (SvTEMP(*SP)) ? *SP : sv_mortalcopy(*SP);
1639 *++newsp = sv_mortalcopy(*SP);
1641 *++newsp = &PL_sv_undef;
1643 else if (gimme == G_ARRAY) {
1644 while (++MARK <= SP) {
1645 *++newsp = (popsub2 && SvTEMP(*MARK))
1646 ? *MARK : sv_mortalcopy(*MARK);
1647 TAINT_NOT; /* Each item is independent */
1650 PL_stack_sp = newsp;
1652 /* Stack values are safe: */
1654 POPSUB2(); /* release CV and @_ ... */
1656 PL_curpm = newpm; /* ... and pop $1 et al */
1659 return pop_return();
1666 register PERL_CONTEXT *cx;
1667 struct block_loop cxloop;
1668 struct block_sub cxsub;
1675 SV **mark = PL_stack_base + cxstack[cxstack_ix].blk_oldsp;
1677 if (PL_op->op_flags & OPf_SPECIAL) {
1678 cxix = dopoptoloop(cxstack_ix);
1680 DIE("Can't \"last\" outside a block");
1683 cxix = dopoptolabel(cPVOP->op_pv);
1685 DIE("Label not found for \"last %s\"", cPVOP->op_pv);
1687 if (cxix < cxstack_ix)
1691 switch (CxTYPE(cx)) {
1693 POPLOOP1(cx); /* Delay POPLOOP2 until stack values are safe */
1695 nextop = cxloop.last_op->op_next;
1698 POPSUB1(cx); /* Delay POPSUB2 until stack values are safe */
1700 nextop = pop_return();
1704 nextop = pop_return();
1711 if (gimme == G_SCALAR) {
1713 *++newsp = ((pop2 == CXt_SUB) && SvTEMP(*SP))
1714 ? *SP : sv_mortalcopy(*SP);
1716 *++newsp = &PL_sv_undef;
1718 else if (gimme == G_ARRAY) {
1719 while (++MARK <= SP) {
1720 *++newsp = ((pop2 == CXt_SUB) && SvTEMP(*MARK))
1721 ? *MARK : sv_mortalcopy(*MARK);
1722 TAINT_NOT; /* Each item is independent */
1728 /* Stack values are safe: */
1731 POPLOOP2(); /* release loop vars ... */
1735 POPSUB2(); /* release CV and @_ ... */
1738 PL_curpm = newpm; /* ... and pop $1 et al */
1747 register PERL_CONTEXT *cx;
1750 if (PL_op->op_flags & OPf_SPECIAL) {
1751 cxix = dopoptoloop(cxstack_ix);
1753 DIE("Can't \"next\" outside a block");
1756 cxix = dopoptolabel(cPVOP->op_pv);
1758 DIE("Label not found for \"next %s\"", cPVOP->op_pv);
1760 if (cxix < cxstack_ix)
1764 oldsave = PL_scopestack[PL_scopestack_ix - 1];
1765 LEAVE_SCOPE(oldsave);
1766 return cx->blk_loop.next_op;
1772 register PERL_CONTEXT *cx;
1775 if (PL_op->op_flags & OPf_SPECIAL) {
1776 cxix = dopoptoloop(cxstack_ix);
1778 DIE("Can't \"redo\" outside a block");
1781 cxix = dopoptolabel(cPVOP->op_pv);
1783 DIE("Label not found for \"redo %s\"", cPVOP->op_pv);
1785 if (cxix < cxstack_ix)
1789 oldsave = PL_scopestack[PL_scopestack_ix - 1];
1790 LEAVE_SCOPE(oldsave);
1791 return cx->blk_loop.redo_op;
1795 dofindlabel(OP *o, char *label, OP **opstack, OP **oplimit)
1799 static char too_deep[] = "Target of goto is too deeply nested";
1803 if (o->op_type == OP_LEAVE ||
1804 o->op_type == OP_SCOPE ||
1805 o->op_type == OP_LEAVELOOP ||
1806 o->op_type == OP_LEAVETRY)
1808 *ops++ = cUNOPo->op_first;
1813 if (o->op_flags & OPf_KIDS) {
1815 /* First try all the kids at this level, since that's likeliest. */
1816 for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling) {
1817 if ((kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) &&
1818 kCOP->cop_label && strEQ(kCOP->cop_label, label))
1821 for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling) {
1822 if (kid == PL_lastgotoprobe)
1824 if ((kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) &&
1826 (ops[-1]->op_type != OP_NEXTSTATE &&
1827 ops[-1]->op_type != OP_DBSTATE)))
1829 if (o = dofindlabel(kid, label, ops, oplimit))
1839 return pp_goto(ARGS);
1848 register PERL_CONTEXT *cx;
1849 #define GOTO_DEPTH 64
1850 OP *enterops[GOTO_DEPTH];
1852 int do_dump = (PL_op->op_type == OP_DUMP);
1855 if (PL_op->op_flags & OPf_STACKED) {
1859 /* This egregious kludge implements goto &subroutine */
1860 if (SvROK(sv) && SvTYPE(SvRV(sv)) == SVt_PVCV) {
1862 register PERL_CONTEXT *cx;
1863 CV* cv = (CV*)SvRV(sv);
1867 int arg_was_real = 0;
1870 if (!CvROOT(cv) && !CvXSUB(cv)) {
1875 /* autoloaded stub? */
1876 if (cv != GvCV(gv) && (cv = GvCV(gv)))
1878 autogv = gv_autoload4(GvSTASH(gv), GvNAME(gv),
1879 GvNAMELEN(gv), FALSE);
1880 if (autogv && (cv = GvCV(autogv)))
1882 tmpstr = sv_newmortal();
1883 gv_efullname3(tmpstr, gv, Nullch);
1884 DIE("Goto undefined subroutine &%s",SvPVX(tmpstr));
1886 DIE("Goto undefined subroutine");
1889 /* First do some returnish stuff. */
1890 cxix = dopoptosub(cxstack_ix);
1892 DIE("Can't goto subroutine outside a subroutine");
1893 if (cxix < cxstack_ix)
1896 if (CxTYPE(cx) == CXt_EVAL && cx->blk_eval.old_op_type == OP_ENTEREVAL)
1897 DIE("Can't goto subroutine from an eval-string");
1899 if (CxTYPE(cx) == CXt_SUB &&
1900 cx->blk_sub.hasargs) { /* put @_ back onto stack */
1901 AV* av = cx->blk_sub.argarray;
1903 items = AvFILLp(av) + 1;
1905 EXTEND(PL_stack_sp, items); /* @_ could have been extended. */
1906 Copy(AvARRAY(av), PL_stack_sp, items, SV*);
1907 PL_stack_sp += items;
1909 SvREFCNT_dec(GvAV(PL_defgv));
1910 GvAV(PL_defgv) = cx->blk_sub.savearray;
1911 #endif /* USE_THREADS */
1914 AvREAL_off(av); /* so av_clear() won't clobber elts */
1918 else if (CvXSUB(cv)) { /* put GvAV(defgv) back onto stack */
1922 av = (AV*)PL_curpad[0];
1924 av = GvAV(PL_defgv);
1926 items = AvFILLp(av) + 1;
1928 EXTEND(PL_stack_sp, items); /* @_ could have been extended. */
1929 Copy(AvARRAY(av), PL_stack_sp, items, SV*);
1930 PL_stack_sp += items;
1932 if (CxTYPE(cx) == CXt_SUB &&
1933 !(CvDEPTH(cx->blk_sub.cv) = cx->blk_sub.olddepth))
1934 SvREFCNT_dec(cx->blk_sub.cv);
1935 oldsave = PL_scopestack[PL_scopestack_ix - 1];
1936 LEAVE_SCOPE(oldsave);
1938 /* Now do some callish stuff. */
1941 if (CvOLDSTYLE(cv)) {
1942 I32 (*fp3)_((int,int,int));
1947 fp3 = (I32(*)_((int,int,int)))CvXSUB(cv);
1948 items = (*fp3)(CvXSUBANY(cv).any_i32,
1949 mark - PL_stack_base + 1,
1951 SP = PL_stack_base + items;
1957 PL_stack_sp--; /* There is no cv arg. */
1958 /* Push a mark for the start of arglist */
1960 (void)(*CvXSUB(cv))(cv _PERL_OBJECT_THIS);
1961 /* Pop the current context like a decent sub should */
1962 POPBLOCK(cx, PL_curpm);
1963 /* Do _not_ use PUTBACK, keep the XSUB's return stack! */
1966 return pop_return();
1969 AV* padlist = CvPADLIST(cv);
1970 SV** svp = AvARRAY(padlist);
1971 if (CxTYPE(cx) == CXt_EVAL) {
1972 PL_in_eval = cx->blk_eval.old_in_eval;
1973 PL_eval_root = cx->blk_eval.old_eval_root;
1974 cx->cx_type = CXt_SUB;
1975 cx->blk_sub.hasargs = 0;
1977 cx->blk_sub.cv = cv;
1978 cx->blk_sub.olddepth = CvDEPTH(cv);
1980 if (CvDEPTH(cv) < 2)
1981 (void)SvREFCNT_inc(cv);
1982 else { /* save temporaries on recursion? */
1983 if (CvDEPTH(cv) == 100 && PL_dowarn)
1984 sub_crush_depth(cv);
1985 if (CvDEPTH(cv) > AvFILLp(padlist)) {
1986 AV *newpad = newAV();
1987 SV **oldpad = AvARRAY(svp[CvDEPTH(cv)-1]);
1988 I32 ix = AvFILLp((AV*)svp[1]);
1989 svp = AvARRAY(svp[0]);
1990 for ( ;ix > 0; ix--) {
1991 if (svp[ix] != &PL_sv_undef) {
1992 char *name = SvPVX(svp[ix]);
1993 if ((SvFLAGS(svp[ix]) & SVf_FAKE)
1996 /* outer lexical or anon code */
1997 av_store(newpad, ix,
1998 SvREFCNT_inc(oldpad[ix]) );
2000 else { /* our own lexical */
2002 av_store(newpad, ix, sv = (SV*)newAV());
2003 else if (*name == '%')
2004 av_store(newpad, ix, sv = (SV*)newHV());
2006 av_store(newpad, ix, sv = NEWSV(0,0));
2011 av_store(newpad, ix, sv = NEWSV(0,0));
2015 if (cx->blk_sub.hasargs) {
2018 av_store(newpad, 0, (SV*)av);
2019 AvFLAGS(av) = AVf_REIFY;
2021 av_store(padlist, CvDEPTH(cv), (SV*)newpad);
2022 AvFILLp(padlist) = CvDEPTH(cv);
2023 svp = AvARRAY(padlist);
2027 if (!cx->blk_sub.hasargs) {
2028 AV* av = (AV*)PL_curpad[0];
2030 items = AvFILLp(av) + 1;
2032 /* Mark is at the end of the stack. */
2034 Copy(AvARRAY(av), SP + 1, items, SV*);
2039 #endif /* USE_THREADS */
2040 SAVESPTR(PL_curpad);
2041 PL_curpad = AvARRAY((AV*)svp[CvDEPTH(cv)]);
2043 if (cx->blk_sub.hasargs)
2044 #endif /* USE_THREADS */
2046 AV* av = (AV*)PL_curpad[0];
2050 cx->blk_sub.savearray = GvAV(PL_defgv);
2051 GvAV(PL_defgv) = (AV*)SvREFCNT_inc(av);
2052 #endif /* USE_THREADS */
2053 cx->blk_sub.argarray = av;
2056 if (items >= AvMAX(av) + 1) {
2058 if (AvARRAY(av) != ary) {
2059 AvMAX(av) += AvARRAY(av) - AvALLOC(av);
2060 SvPVX(av) = (char*)ary;
2062 if (items >= AvMAX(av) + 1) {
2063 AvMAX(av) = items - 1;
2064 Renew(ary,items+1,SV*);
2066 SvPVX(av) = (char*)ary;
2069 Copy(mark,AvARRAY(av),items,SV*);
2070 AvFILLp(av) = items - 1;
2071 /* preserve @_ nature */
2082 if (PERLDB_SUB) { /* Checking curstash breaks DProf. */
2084 * We do not care about using sv to call CV;
2085 * it's for informational purposes only.
2087 SV *sv = GvSV(PL_DBsub);
2090 if (PERLDB_SUB_NN) {
2091 SvIVX(sv) = (IV)cv; /* Already upgraded, saved */
2094 gv_efullname3(sv, CvGV(cv), Nullch);
2097 && (gotocv = perl_get_cv("DB::goto", FALSE)) ) {
2098 PUSHMARK( PL_stack_sp );
2099 perl_call_sv((SV*)gotocv, G_SCALAR | G_NODEBUG);
2103 RETURNOP(CvSTART(cv));
2107 label = SvPV(sv,n_a);
2109 else if (PL_op->op_flags & OPf_SPECIAL) {
2111 DIE("goto must have label");
2114 label = cPVOP->op_pv;
2116 if (label && *label) {
2121 PL_lastgotoprobe = 0;
2123 for (ix = cxstack_ix; ix >= 0; ix--) {
2125 switch (CxTYPE(cx)) {
2127 gotoprobe = PL_eval_root; /* XXX not good for nested eval */
2130 gotoprobe = cx->blk_oldcop->op_sibling;
2136 gotoprobe = cx->blk_oldcop->op_sibling;
2138 gotoprobe = PL_main_root;
2141 if (CvDEPTH(cx->blk_sub.cv)) {
2142 gotoprobe = CvROOT(cx->blk_sub.cv);
2147 DIE("Can't \"goto\" outside a block");
2151 gotoprobe = PL_main_root;
2154 retop = dofindlabel(gotoprobe, label,
2155 enterops, enterops + GOTO_DEPTH);
2158 PL_lastgotoprobe = gotoprobe;
2161 DIE("Can't find label %s", label);
2163 /* pop unwanted frames */
2165 if (ix < cxstack_ix) {
2172 oldsave = PL_scopestack[PL_scopestack_ix];
2173 LEAVE_SCOPE(oldsave);
2176 /* push wanted frames */
2178 if (*enterops && enterops[1]) {
2180 for (ix = 1; enterops[ix]; ix++) {
2181 PL_op = enterops[ix];
2182 /* Eventually we may want to stack the needed arguments
2183 * for each op. For now, we punt on the hard ones. */
2184 if (PL_op->op_type == OP_ENTERITER)
2185 DIE("Can't \"goto\" into the middle of a foreach loop",
2187 (CALLOP->op_ppaddr)(ARGS);
2195 if (!retop) retop = PL_main_start;
2197 PL_restartop = retop;
2198 PL_do_undump = TRUE;
2202 PL_restartop = 0; /* hmm, must be GNU unexec().. */
2203 PL_do_undump = FALSE;
2219 if (anum == 1 && VMSISH_EXIT)
2224 PUSHs(&PL_sv_undef);
2232 double value = SvNVx(GvSV(cCOP->cop_gv));
2233 register I32 match = I_32(value);
2236 if (((double)match) > value)
2237 --match; /* was fractional--truncate other way */
2239 match -= cCOP->uop.scop.scop_offset;
2242 else if (match > cCOP->uop.scop.scop_max)
2243 match = cCOP->uop.scop.scop_max;
2244 PL_op = cCOP->uop.scop.scop_next[match];
2254 PL_op = PL_op->op_next; /* can't assume anything */
2257 match = *(SvPVx(GvSV(cCOP->cop_gv), n_a)) & 255;
2258 match -= cCOP->uop.scop.scop_offset;
2261 else if (match > cCOP->uop.scop.scop_max)
2262 match = cCOP->uop.scop.scop_max;
2263 PL_op = cCOP->uop.scop.scop_next[match];
2272 save_lines(AV *array, SV *sv)
2274 register char *s = SvPVX(sv);
2275 register char *send = SvPVX(sv) + SvCUR(sv);
2277 register I32 line = 1;
2279 while (s && s < send) {
2280 SV *tmpstr = NEWSV(85,0);
2282 sv_upgrade(tmpstr, SVt_PVMG);
2283 t = strchr(s, '\n');
2289 sv_setpvn(tmpstr, s, t - s);
2290 av_store(array, line++, tmpstr);
2305 assert(CATCH_GET == TRUE);
2306 DEBUG_l(deb("Setting up local jumplevel %p, was %p\n", &cur_env, PL_top_env));
2310 default: /* topmost level handles it */
2319 PL_op = PL_restartop;
2332 sv_compile_2op(SV *sv, OP** startop, char *code, AV** avp)
2333 /* sv Text to convert to OP tree. */
2334 /* startop op_free() this to undo. */
2335 /* code Short string id of the caller. */
2337 dSP; /* Make POPBLOCK work. */
2340 I32 gimme = 0; /* SUSPECT - INITIALZE TO WHAT? NI-S */
2343 OP *oop = PL_op, *rop;
2344 char tmpbuf[TYPE_DIGITS(long) + 12 + 10];
2350 /* switch to eval mode */
2352 if (PL_curcop == &PL_compiling) {
2353 SAVESPTR(PL_compiling.cop_stash);
2354 PL_compiling.cop_stash = PL_curstash;
2356 SAVESPTR(PL_compiling.cop_filegv);
2357 SAVEI16(PL_compiling.cop_line);
2358 sprintf(tmpbuf, "_<(%.10s_eval %lu)", code, (unsigned long)++PL_evalseq);
2359 PL_compiling.cop_filegv = gv_fetchfile(tmpbuf+2);
2360 PL_compiling.cop_line = 1;
2361 /* XXX For C<eval "...">s within BEGIN {} blocks, this ends up
2362 deleting the eval's FILEGV from the stash before gv_check() runs
2363 (i.e. before run-time proper). To work around the coredump that
2364 ensues, we always turn GvMULTI_on for any globals that were
2365 introduced within evals. See force_ident(). GSAR 96-10-12 */
2366 safestr = savepv(tmpbuf);
2367 SAVEDELETE(PL_defstash, safestr, strlen(safestr));
2369 #ifdef OP_IN_REGISTER
2377 PL_op->op_type = 0; /* Avoid uninit warning. */
2378 PL_op->op_flags = 0; /* Avoid uninit warning. */
2379 PUSHBLOCK(cx, CXt_EVAL, SP);
2380 PUSHEVAL(cx, 0, PL_compiling.cop_filegv);
2381 rop = doeval(G_SCALAR, startop);
2382 POPBLOCK(cx,PL_curpm);
2385 (*startop)->op_type = OP_NULL;
2386 (*startop)->op_ppaddr = ppaddr[OP_NULL];
2388 *avp = (AV*)SvREFCNT_inc(PL_comppad);
2390 #ifdef OP_IN_REGISTER
2396 /* With USE_THREADS, eval_owner must be held on entry to doeval */
2398 doeval(int gimme, OP** startop)
2411 /* set up a scratch pad */
2414 SAVESPTR(PL_curpad);
2415 SAVESPTR(PL_comppad);
2416 SAVESPTR(PL_comppad_name);
2417 SAVEI32(PL_comppad_name_fill);
2418 SAVEI32(PL_min_intro_pending);
2419 SAVEI32(PL_max_intro_pending);
2422 for (i = cxstack_ix - 1; i >= 0; i--) {
2423 PERL_CONTEXT *cx = &cxstack[i];
2424 if (CxTYPE(cx) == CXt_EVAL)
2426 else if (CxTYPE(cx) == CXt_SUB) {
2427 caller = cx->blk_sub.cv;
2432 SAVESPTR(PL_compcv);
2433 PL_compcv = (CV*)NEWSV(1104,0);
2434 sv_upgrade((SV *)PL_compcv, SVt_PVCV);
2435 CvEVAL_on(PL_compcv);
2437 CvOWNER(PL_compcv) = 0;
2438 New(666, CvMUTEXP(PL_compcv), 1, perl_mutex);
2439 MUTEX_INIT(CvMUTEXP(PL_compcv));
2440 #endif /* USE_THREADS */
2442 PL_comppad = newAV();
2443 av_push(PL_comppad, Nullsv);
2444 PL_curpad = AvARRAY(PL_comppad);
2445 PL_comppad_name = newAV();
2446 PL_comppad_name_fill = 0;
2447 PL_min_intro_pending = 0;
2450 av_store(PL_comppad_name, 0, newSVpv("@_", 2));
2451 PL_curpad[0] = (SV*)newAV();
2452 SvPADMY_on(PL_curpad[0]); /* XXX Needed? */
2453 #endif /* USE_THREADS */
2455 comppadlist = newAV();
2456 AvREAL_off(comppadlist);
2457 av_store(comppadlist, 0, (SV*)PL_comppad_name);
2458 av_store(comppadlist, 1, (SV*)PL_comppad);
2459 CvPADLIST(PL_compcv) = comppadlist;
2461 if (!saveop || saveop->op_type != OP_REQUIRE)
2462 CvOUTSIDE(PL_compcv) = (CV*)SvREFCNT_inc(caller);
2464 SAVEFREESV(PL_compcv);
2466 /* make sure we compile in the right package */
2468 newstash = PL_curcop->cop_stash;
2469 if (PL_curstash != newstash) {
2470 SAVESPTR(PL_curstash);
2471 PL_curstash = newstash;
2473 SAVESPTR(PL_beginav);
2474 PL_beginav = newAV();
2475 SAVEFREESV(PL_beginav);
2477 /* try to compile it */
2479 PL_eval_root = Nullop;
2481 PL_curcop = &PL_compiling;
2482 PL_curcop->cop_arybase = 0;
2483 SvREFCNT_dec(PL_rs);
2484 PL_rs = newSVpv("\n", 1);
2485 if (saveop && saveop->op_flags & OPf_SPECIAL)
2489 if (yyparse() || PL_error_count || !PL_eval_root) {
2493 I32 optype = 0; /* Might be reset by POPEVAL. */
2498 op_free(PL_eval_root);
2499 PL_eval_root = Nullop;
2501 SP = PL_stack_base + POPMARK; /* pop original mark */
2503 POPBLOCK(cx,PL_curpm);
2509 if (optype == OP_REQUIRE) {
2510 char* msg = SvPVx(ERRSV, n_a);
2511 DIE("%s", *msg ? msg : "Compilation failed in require");
2512 } else if (startop) {
2513 char* msg = SvPVx(ERRSV, n_a);
2515 POPBLOCK(cx,PL_curpm);
2517 croak("%sCompilation failed in regexp", (*msg ? msg : "Unknown error\n"));
2519 SvREFCNT_dec(PL_rs);
2520 PL_rs = SvREFCNT_inc(PL_nrs);
2522 MUTEX_LOCK(&PL_eval_mutex);
2524 COND_SIGNAL(&PL_eval_cond);
2525 MUTEX_UNLOCK(&PL_eval_mutex);
2526 #endif /* USE_THREADS */
2529 SvREFCNT_dec(PL_rs);
2530 PL_rs = SvREFCNT_inc(PL_nrs);
2531 PL_compiling.cop_line = 0;
2533 *startop = PL_eval_root;
2534 SvREFCNT_dec(CvOUTSIDE(PL_compcv));
2535 CvOUTSIDE(PL_compcv) = Nullcv;
2537 SAVEFREEOP(PL_eval_root);
2539 scalarvoid(PL_eval_root);
2540 else if (gimme & G_ARRAY)
2543 scalar(PL_eval_root);
2545 DEBUG_x(dump_eval());
2547 /* Register with debugger: */
2548 if (PERLDB_INTER && saveop->op_type == OP_REQUIRE) {
2549 CV *cv = perl_get_cv("DB::postponed", FALSE);
2553 XPUSHs((SV*)PL_compiling.cop_filegv);
2555 perl_call_sv((SV*)cv, G_DISCARD);
2559 /* compiled okay, so do it */
2561 CvDEPTH(PL_compcv) = 1;
2562 SP = PL_stack_base + POPMARK; /* pop original mark */
2563 PL_op = saveop; /* The caller may need it. */
2565 MUTEX_LOCK(&PL_eval_mutex);
2567 COND_SIGNAL(&PL_eval_cond);
2568 MUTEX_UNLOCK(&PL_eval_mutex);
2569 #endif /* USE_THREADS */
2571 RETURNOP(PL_eval_start);
2577 register PERL_CONTEXT *cx;
2582 SV *namesv = Nullsv;
2584 I32 gimme = G_SCALAR;
2585 PerlIO *tryrsfp = 0;
2589 if (SvNIOKp(sv) && !SvPOKp(sv)) {
2590 SET_NUMERIC_STANDARD();
2591 if (atof(PL_patchlevel) + 0.00000999 < SvNV(sv))
2592 DIE("Perl %s required--this is only version %s, stopped",
2593 SvPV(sv,n_a),PL_patchlevel);
2596 name = SvPV(sv, len);
2597 if (!(name && len > 0 && *name))
2598 DIE("Null filename used");
2599 TAINT_PROPER("require");
2600 if (PL_op->op_type == OP_REQUIRE &&
2601 (svp = hv_fetch(GvHVn(PL_incgv), name, len, 0)) &&
2602 *svp != &PL_sv_undef)
2605 /* prepare to compile file */
2610 (name[1] == '.' && name[2] == '/')))
2612 || (name[0] && name[1] == ':')
2615 || (name[0] == '\\' && name[1] == '\\') /* UNC path */
2618 || (strchr(name,':') || ((*name == '[' || *name == '<') &&
2619 (isALNUM(name[1]) || strchr("$-_]>",name[1]))))
2624 tryrsfp = PerlIO_open(name,PERL_SCRIPT_MODE);
2627 AV *ar = GvAVn(PL_incgv);
2631 if ((unixname = tounixspec(name, Nullch)) != Nullch)
2634 namesv = NEWSV(806, 0);
2635 for (i = 0; i <= AvFILL(ar); i++) {
2636 char *dir = SvPVx(*av_fetch(ar, i, TRUE), n_a);
2639 if ((unixdir = tounixpath(dir, Nullch)) == Nullch)
2641 sv_setpv(namesv, unixdir);
2642 sv_catpv(namesv, unixname);
2644 sv_setpvf(namesv, "%s/%s", dir, name);
2646 TAINT_PROPER("require");
2647 tryname = SvPVX(namesv);
2648 tryrsfp = PerlIO_open(tryname, PERL_SCRIPT_MODE);
2650 if (tryname[0] == '.' && tryname[1] == '/')
2657 SAVESPTR(PL_compiling.cop_filegv);
2658 PL_compiling.cop_filegv = gv_fetchfile(tryrsfp ? tryname : name);
2659 SvREFCNT_dec(namesv);
2661 if (PL_op->op_type == OP_REQUIRE) {
2662 SV *msg = sv_2mortal(newSVpvf("Can't locate %s in @INC", name));
2663 SV *dirmsgsv = NEWSV(0, 0);
2664 AV *ar = GvAVn(PL_incgv);
2666 if (instr(SvPVX(msg), ".h "))
2667 sv_catpv(msg, " (change .h to .ph maybe?)");
2668 if (instr(SvPVX(msg), ".ph "))
2669 sv_catpv(msg, " (did you run h2ph?)");
2670 sv_catpv(msg, " (@INC contains:");
2671 for (i = 0; i <= AvFILL(ar); i++) {
2672 char *dir = SvPVx(*av_fetch(ar, i, TRUE), n_a);
2673 sv_setpvf(dirmsgsv, " %s", dir);
2674 sv_catsv(msg, dirmsgsv);
2676 sv_catpvn(msg, ")", 1);
2677 SvREFCNT_dec(dirmsgsv);
2684 SETERRNO(0, SS$_NORMAL);
2686 /* Assume success here to prevent recursive requirement. */
2687 (void)hv_store(GvHVn(PL_incgv), name, strlen(name),
2688 newSVsv(GvSV(PL_compiling.cop_filegv)), 0 );
2692 lex_start(sv_2mortal(newSVpv("",0)));
2693 SAVEGENERICSV(PL_rsfp_filters);
2694 PL_rsfp_filters = Nullav;
2697 name = savepv(name);
2702 /* switch to eval mode */
2704 push_return(PL_op->op_next);
2705 PUSHBLOCK(cx, CXt_EVAL, SP);
2706 PUSHEVAL(cx, name, PL_compiling.cop_filegv);
2708 SAVEI16(PL_compiling.cop_line);
2709 PL_compiling.cop_line = 0;
2713 MUTEX_LOCK(&PL_eval_mutex);
2714 if (PL_eval_owner && PL_eval_owner != thr)
2715 while (PL_eval_owner)
2716 COND_WAIT(&PL_eval_cond, &PL_eval_mutex);
2717 PL_eval_owner = thr;
2718 MUTEX_UNLOCK(&PL_eval_mutex);
2719 #endif /* USE_THREADS */
2720 return DOCATCH(doeval(G_SCALAR, NULL));
2725 return pp_require(ARGS);
2731 register PERL_CONTEXT *cx;
2733 I32 gimme = GIMME_V, was = PL_sub_generation;
2734 char tmpbuf[TYPE_DIGITS(long) + 12];
2739 if (!SvPV(sv,len) || !len)
2741 TAINT_PROPER("eval");
2747 /* switch to eval mode */
2749 SAVESPTR(PL_compiling.cop_filegv);
2750 sprintf(tmpbuf, "_<(eval %lu)", (unsigned long)++PL_evalseq);
2751 PL_compiling.cop_filegv = gv_fetchfile(tmpbuf+2);
2752 PL_compiling.cop_line = 1;
2753 /* XXX For C<eval "...">s within BEGIN {} blocks, this ends up
2754 deleting the eval's FILEGV from the stash before gv_check() runs
2755 (i.e. before run-time proper). To work around the coredump that
2756 ensues, we always turn GvMULTI_on for any globals that were
2757 introduced within evals. See force_ident(). GSAR 96-10-12 */
2758 safestr = savepv(tmpbuf);
2759 SAVEDELETE(PL_defstash, safestr, strlen(safestr));
2761 PL_hints = PL_op->op_targ;
2763 push_return(PL_op->op_next);
2764 PUSHBLOCK(cx, (CXt_EVAL|CXp_REAL), SP);
2765 PUSHEVAL(cx, 0, PL_compiling.cop_filegv);
2767 /* prepare to compile string */
2769 if (PERLDB_LINE && PL_curstash != PL_debstash)
2770 save_lines(GvAV(PL_compiling.cop_filegv), PL_linestr);
2773 MUTEX_LOCK(&PL_eval_mutex);
2774 if (PL_eval_owner && PL_eval_owner != thr)
2775 while (PL_eval_owner)
2776 COND_WAIT(&PL_eval_cond, &PL_eval_mutex);
2777 PL_eval_owner = thr;
2778 MUTEX_UNLOCK(&PL_eval_mutex);
2779 #endif /* USE_THREADS */
2780 ret = doeval(gimme, NULL);
2781 if (PERLDB_INTER && was != PL_sub_generation /* Some subs defined here. */
2782 && ret != PL_op->op_next) { /* Successive compilation. */
2783 strcpy(safestr, "_<(eval )"); /* Anything fake and short. */
2785 return DOCATCH(ret);
2795 register PERL_CONTEXT *cx;
2797 U8 save_flags = PL_op -> op_flags;
2802 retop = pop_return();
2805 if (gimme == G_VOID)
2807 else if (gimme == G_SCALAR) {
2810 if (SvFLAGS(TOPs) & SVs_TEMP)
2813 *MARK = sv_mortalcopy(TOPs);
2817 *MARK = &PL_sv_undef;
2821 /* in case LEAVE wipes old return values */
2822 for (mark = newsp + 1; mark <= SP; mark++) {
2823 if (!(SvFLAGS(*mark) & SVs_TEMP)) {
2824 *mark = sv_mortalcopy(*mark);
2825 TAINT_NOT; /* Each item is independent */
2829 PL_curpm = newpm; /* Don't pop $1 et al till now */
2832 * Closures mentioned at top level of eval cannot be referenced
2833 * again, and their presence indirectly causes a memory leak.
2834 * (Note that the fact that compcv and friends are still set here
2835 * is, AFAIK, an accident.) --Chip
2837 if (AvFILLp(PL_comppad_name) >= 0) {
2838 SV **svp = AvARRAY(PL_comppad_name);
2840 for (ix = AvFILLp(PL_comppad_name); ix >= 0; ix--) {
2842 if (sv && sv != &PL_sv_undef && *SvPVX(sv) == '&') {
2844 svp[ix] = &PL_sv_undef;
2848 SvREFCNT_dec(CvOUTSIDE(sv));
2849 CvOUTSIDE(sv) = Nullcv;
2862 assert(CvDEPTH(PL_compcv) == 1);
2864 CvDEPTH(PL_compcv) = 0;
2867 if (optype == OP_REQUIRE &&
2868 !(gimme == G_SCALAR ? SvTRUE(*SP) : SP > newsp))
2870 /* Unassume the success we assumed earlier. */
2871 char *name = cx->blk_eval.old_name;
2872 (void)hv_delete(GvHVn(PL_incgv), name, strlen(name), G_DISCARD);
2873 retop = die("%s did not return a true value", name);
2874 /* die_where() did LEAVE, or we won't be here */
2878 if (!(save_flags & OPf_SPECIAL))
2888 register PERL_CONTEXT *cx;
2889 I32 gimme = GIMME_V;
2894 push_return(cLOGOP->op_other->op_next);
2895 PUSHBLOCK(cx, CXt_EVAL, SP);
2897 PL_eval_root = PL_op; /* Only needed so that goto works right. */
2902 return DOCATCH(PL_op->op_next);
2912 register PERL_CONTEXT *cx;
2920 if (gimme == G_VOID)
2922 else if (gimme == G_SCALAR) {
2925 if (SvFLAGS(TOPs) & (SVs_PADTMP|SVs_TEMP))
2928 *MARK = sv_mortalcopy(TOPs);
2932 *MARK = &PL_sv_undef;
2937 /* in case LEAVE wipes old return values */
2938 for (mark = newsp + 1; mark <= SP; mark++) {
2939 if (!(SvFLAGS(*mark) & (SVs_PADTMP|SVs_TEMP))) {
2940 *mark = sv_mortalcopy(*mark);
2941 TAINT_NOT; /* Each item is independent */
2945 PL_curpm = newpm; /* Don't pop $1 et al till now */
2956 register char *s = SvPV_force(sv, len);
2957 register char *send = s + len;
2958 register char *base;
2959 register I32 skipspaces = 0;
2962 bool postspace = FALSE;
2970 croak("Null picture in formline");
2972 New(804, fops, (send - s)*3+10, U16); /* Almost certainly too long... */
2977 *fpc++ = FF_LINEMARK;
2978 noblank = repeat = FALSE;
2996 case ' ': case '\t':
3007 *fpc++ = FF_LITERAL;
3015 *fpc++ = skipspaces;
3019 *fpc++ = FF_NEWLINE;
3023 arg = fpc - linepc + 1;
3030 *fpc++ = FF_LINEMARK;
3031 noblank = repeat = FALSE;
3040 ischop = s[-1] == '^';
3046 arg = (s - base) - 1;
3048 *fpc++ = FF_LITERAL;
3057 *fpc++ = FF_LINEGLOB;
3059 else if (*s == '#' || (*s == '.' && s[1] == '#')) {
3060 arg = ischop ? 512 : 0;
3070 arg |= 256 + (s - f);
3072 *fpc++ = s - base; /* fieldsize for FETCH */
3073 *fpc++ = FF_DECIMAL;
3078 bool ismore = FALSE;
3081 while (*++s == '>') ;
3082 prespace = FF_SPACE;
3084 else if (*s == '|') {
3085 while (*++s == '|') ;
3086 prespace = FF_HALFSPACE;
3091 while (*++s == '<') ;
3094 if (*s == '.' && s[1] == '.' && s[2] == '.') {
3098 *fpc++ = s - base; /* fieldsize for FETCH */
3100 *fpc++ = ischop ? FF_CHECKCHOP : FF_CHECKNL;
3118 { /* need to jump to the next word */
3120 z = WORD_ALIGN - SvCUR(sv) % WORD_ALIGN;
3121 SvGROW(sv, SvCUR(sv) + z + arg * sizeof(U16) + 4);
3122 s = SvPVX(sv) + SvCUR(sv) + z;
3124 Copy(fops, s, arg, U16);
3126 sv_magic(sv, Nullsv, 'f', Nullch, 0);
3131 * The rest of this file was derived from source code contributed
3134 * NOTE: this code was derived from Tom Horsley's qsort replacement
3135 * and should not be confused with the original code.
3138 /* Copyright (C) Tom Horsley, 1997. All rights reserved.
3140 Permission granted to distribute under the same terms as perl which are
3143 This program is free software; you can redistribute it and/or modify
3144 it under the terms of either:
3146 a) the GNU General Public License as published by the Free
3147 Software Foundation; either version 1, or (at your option) any
3150 b) the "Artistic License" which comes with this Kit.
3152 Details on the perl license can be found in the perl source code which
3153 may be located via the www.perl.com web page.
3155 This is the most wonderfulest possible qsort I can come up with (and
3156 still be mostly portable) My (limited) tests indicate it consistently
3157 does about 20% fewer calls to compare than does the qsort in the Visual
3158 C++ library, other vendors may vary.
3160 Some of the ideas in here can be found in "Algorithms" by Sedgewick,
3161 others I invented myself (or more likely re-invented since they seemed
3162 pretty obvious once I watched the algorithm operate for a while).
3164 Most of this code was written while watching the Marlins sweep the Giants
3165 in the 1997 National League Playoffs - no Braves fans allowed to use this
3166 code (just kidding :-).
3168 I realize that if I wanted to be true to the perl tradition, the only
3169 comment in this file would be something like:
3171 ...they shuffled back towards the rear of the line. 'No, not at the
3172 rear!' the slave-driver shouted. 'Three files up. And stay there...
3174 However, I really needed to violate that tradition just so I could keep
3175 track of what happens myself, not to mention some poor fool trying to
3176 understand this years from now :-).
3179 /* ********************************************************** Configuration */
3181 #ifndef QSORT_ORDER_GUESS
3182 #define QSORT_ORDER_GUESS 2 /* Select doubling version of the netBSD trick */
3185 /* QSORT_MAX_STACK is the largest number of partitions that can be stacked up for
3186 future processing - a good max upper bound is log base 2 of memory size
3187 (32 on 32 bit machines, 64 on 64 bit machines, etc). In reality can
3188 safely be smaller than that since the program is taking up some space and
3189 most operating systems only let you grab some subset of contiguous
3190 memory (not to mention that you are normally sorting data larger than
3191 1 byte element size :-).
3193 #ifndef QSORT_MAX_STACK
3194 #define QSORT_MAX_STACK 32
3197 /* QSORT_BREAK_EVEN is the size of the largest partition we should insertion sort.
3198 Anything bigger and we use qsort. If you make this too small, the qsort
3199 will probably break (or become less efficient), because it doesn't expect
3200 the middle element of a partition to be the same as the right or left -
3201 you have been warned).
3203 #ifndef QSORT_BREAK_EVEN
3204 #define QSORT_BREAK_EVEN 6
3207 /* ************************************************************* Data Types */
3209 /* hold left and right index values of a partition waiting to be sorted (the
3210 partition includes both left and right - right is NOT one past the end or
3211 anything like that).
3213 struct partition_stack_entry {
3216 #ifdef QSORT_ORDER_GUESS
3217 int qsort_break_even;
3221 /* ******************************************************* Shorthand Macros */
3223 /* Note that these macros will be used from inside the qsort function where
3224 we happen to know that the variable 'elt_size' contains the size of an
3225 array element and the variable 'temp' points to enough space to hold a
3226 temp element and the variable 'array' points to the array being sorted
3227 and 'compare' is the pointer to the compare routine.
3229 Also note that there are very many highly architecture specific ways
3230 these might be sped up, but this is simply the most generally portable
3231 code I could think of.
3234 /* Return < 0 == 0 or > 0 as the value of elt1 is < elt2, == elt2, > elt2
3237 #define qsort_cmp(elt1, elt2) \
3238 ((this->*compare)(array[elt1], array[elt2]))
3240 #define qsort_cmp(elt1, elt2) \
3241 ((*compare)(array[elt1], array[elt2]))
3244 #ifdef QSORT_ORDER_GUESS
3245 #define QSORT_NOTICE_SWAP swapped++;
3247 #define QSORT_NOTICE_SWAP
3250 /* swaps contents of array elements elt1, elt2.
3252 #define qsort_swap(elt1, elt2) \
3255 temp = array[elt1]; \
3256 array[elt1] = array[elt2]; \
3257 array[elt2] = temp; \
3260 /* rotate contents of elt1, elt2, elt3 such that elt1 gets elt2, elt2 gets
3261 elt3 and elt3 gets elt1.
3263 #define qsort_rotate(elt1, elt2, elt3) \
3266 temp = array[elt1]; \
3267 array[elt1] = array[elt2]; \
3268 array[elt2] = array[elt3]; \
3269 array[elt3] = temp; \
3272 /* ************************************************************ Debug stuff */
3279 return; /* good place to set a breakpoint */
3282 #define qsort_assert(t) (void)( (t) || (break_here(), 0) )
3285 doqsort_all_asserts(
3289 int (*compare)(const void * elt1, const void * elt2),
3290 int pc_left, int pc_right, int u_left, int u_right)
3294 qsort_assert(pc_left <= pc_right);
3295 qsort_assert(u_right < pc_left);
3296 qsort_assert(pc_right < u_left);
3297 for (i = u_right + 1; i < pc_left; ++i) {
3298 qsort_assert(qsort_cmp(i, pc_left) < 0);
3300 for (i = pc_left; i < pc_right; ++i) {
3301 qsort_assert(qsort_cmp(i, pc_right) == 0);
3303 for (i = pc_right + 1; i < u_left; ++i) {
3304 qsort_assert(qsort_cmp(pc_right, i) < 0);
3308 #define qsort_all_asserts(PC_LEFT, PC_RIGHT, U_LEFT, U_RIGHT) \
3309 doqsort_all_asserts(array, num_elts, elt_size, compare, \
3310 PC_LEFT, PC_RIGHT, U_LEFT, U_RIGHT)
3314 #define qsort_assert(t) ((void)0)
3316 #define qsort_all_asserts(PC_LEFT, PC_RIGHT, U_LEFT, U_RIGHT) ((void)0)
3320 /* ****************************************************************** qsort */
3324 qsortsv(SV ** array, size_t num_elts, SVCOMPARE compare)
3329 I32 (*compare)(SV *a, SV *b))
3334 struct partition_stack_entry partition_stack[QSORT_MAX_STACK];
3335 int next_stack_entry = 0;
3339 #ifdef QSORT_ORDER_GUESS
3340 int qsort_break_even;
3344 /* Make sure we actually have work to do.
3346 if (num_elts <= 1) {
3350 /* Setup the initial partition definition and fall into the sorting loop
3353 part_right = (int)(num_elts - 1);
3354 #ifdef QSORT_ORDER_GUESS
3355 qsort_break_even = QSORT_BREAK_EVEN;
3357 #define qsort_break_even QSORT_BREAK_EVEN
3360 if ((part_right - part_left) >= qsort_break_even) {
3361 /* OK, this is gonna get hairy, so lets try to document all the
3362 concepts and abbreviations and variables and what they keep
3365 pc: pivot chunk - the set of array elements we accumulate in the
3366 middle of the partition, all equal in value to the original
3367 pivot element selected. The pc is defined by:
3369 pc_left - the leftmost array index of the pc
3370 pc_right - the rightmost array index of the pc
3372 we start with pc_left == pc_right and only one element
3373 in the pivot chunk (but it can grow during the scan).
3375 u: uncompared elements - the set of elements in the partition
3376 we have not yet compared to the pivot value. There are two
3377 uncompared sets during the scan - one to the left of the pc
3378 and one to the right.
3380 u_right - the rightmost index of the left side's uncompared set
3381 u_left - the leftmost index of the right side's uncompared set
3383 The leftmost index of the left sides's uncompared set
3384 doesn't need its own variable because it is always defined
3385 by the leftmost edge of the whole partition (part_left). The
3386 same goes for the rightmost edge of the right partition
3389 We know there are no uncompared elements on the left once we
3390 get u_right < part_left and no uncompared elements on the
3391 right once u_left > part_right. When both these conditions
3392 are met, we have completed the scan of the partition.
3394 Any elements which are between the pivot chunk and the
3395 uncompared elements should be less than the pivot value on
3396 the left side and greater than the pivot value on the right
3397 side (in fact, the goal of the whole algorithm is to arrange
3398 for that to be true and make the groups of less-than and
3399 greater-then elements into new partitions to sort again).
3401 As you marvel at the complexity of the code and wonder why it
3402 has to be so confusing. Consider some of the things this level
3403 of confusion brings:
3405 Once I do a compare, I squeeze every ounce of juice out of it. I
3406 never do compare calls I don't have to do, and I certainly never
3409 I also never swap any elements unless I can prove there is a
3410 good reason. Many sort algorithms will swap a known value with
3411 an uncompared value just to get things in the right place (or
3412 avoid complexity :-), but that uncompared value, once it gets
3413 compared, may then have to be swapped again. A lot of the
3414 complexity of this code is due to the fact that it never swaps
3415 anything except compared values, and it only swaps them when the
3416 compare shows they are out of position.
3418 int pc_left, pc_right;
3419 int u_right, u_left;
3423 pc_left = ((part_left + part_right) / 2);
3425 u_right = pc_left - 1;
3426 u_left = pc_right + 1;
3428 /* Qsort works best when the pivot value is also the median value
3429 in the partition (unfortunately you can't find the median value
3430 without first sorting :-), so to give the algorithm a helping
3431 hand, we pick 3 elements and sort them and use the median value
3432 of that tiny set as the pivot value.
3434 Some versions of qsort like to use the left middle and right as
3435 the 3 elements to sort so they can insure the ends of the
3436 partition will contain values which will stop the scan in the
3437 compare loop, but when you have to call an arbitrarily complex
3438 routine to do a compare, its really better to just keep track of
3439 array index values to know when you hit the edge of the
3440 partition and avoid the extra compare. An even better reason to
3441 avoid using a compare call is the fact that you can drop off the
3442 edge of the array if someone foolishly provides you with an
3443 unstable compare function that doesn't always provide consistent
3446 So, since it is simpler for us to compare the three adjacent
3447 elements in the middle of the partition, those are the ones we
3448 pick here (conveniently pointed at by u_right, pc_left, and
3449 u_left). The values of the left, center, and right elements
3450 are refered to as l c and r in the following comments.
3453 #ifdef QSORT_ORDER_GUESS
3456 s = qsort_cmp(u_right, pc_left);
3459 s = qsort_cmp(pc_left, u_left);
3460 /* if l < c, c < r - already in order - nothing to do */
3462 /* l < c, c == r - already in order, pc grows */
3464 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3466 /* l < c, c > r - need to know more */
3467 s = qsort_cmp(u_right, u_left);
3469 /* l < c, c > r, l < r - swap c & r to get ordered */
3470 qsort_swap(pc_left, u_left);
3471 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3472 } else if (s == 0) {
3473 /* l < c, c > r, l == r - swap c&r, grow pc */
3474 qsort_swap(pc_left, u_left);
3476 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3478 /* l < c, c > r, l > r - make lcr into rlc to get ordered */
3479 qsort_rotate(pc_left, u_right, u_left);
3480 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3483 } else if (s == 0) {
3485 s = qsort_cmp(pc_left, u_left);
3487 /* l == c, c < r - already in order, grow pc */
3489 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3490 } else if (s == 0) {
3491 /* l == c, c == r - already in order, grow pc both ways */
3494 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3496 /* l == c, c > r - swap l & r, grow pc */
3497 qsort_swap(u_right, u_left);
3499 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3503 s = qsort_cmp(pc_left, u_left);
3505 /* l > c, c < r - need to know more */
3506 s = qsort_cmp(u_right, u_left);
3508 /* l > c, c < r, l < r - swap l & c to get ordered */
3509 qsort_swap(u_right, pc_left);
3510 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3511 } else if (s == 0) {
3512 /* l > c, c < r, l == r - swap l & c, grow pc */
3513 qsort_swap(u_right, pc_left);
3515 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3517 /* l > c, c < r, l > r - rotate lcr into crl to order */
3518 qsort_rotate(u_right, pc_left, u_left);
3519 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3521 } else if (s == 0) {
3522 /* l > c, c == r - swap ends, grow pc */
3523 qsort_swap(u_right, u_left);
3525 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3527 /* l > c, c > r - swap ends to get in order */
3528 qsort_swap(u_right, u_left);
3529 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3532 /* We now know the 3 middle elements have been compared and
3533 arranged in the desired order, so we can shrink the uncompared
3538 qsort_all_asserts(pc_left, pc_right, u_left, u_right);
3540 /* The above massive nested if was the simple part :-). We now have
3541 the middle 3 elements ordered and we need to scan through the
3542 uncompared sets on either side, swapping elements that are on
3543 the wrong side or simply shuffling equal elements around to get
3544 all equal elements into the pivot chunk.
3548 int still_work_on_left;
3549 int still_work_on_right;
3551 /* Scan the uncompared values on the left. If I find a value
3552 equal to the pivot value, move it over so it is adjacent to
3553 the pivot chunk and expand the pivot chunk. If I find a value
3554 less than the pivot value, then just leave it - its already
3555 on the correct side of the partition. If I find a greater
3556 value, then stop the scan.
3558 while (still_work_on_left = (u_right >= part_left)) {
3559 s = qsort_cmp(u_right, pc_left);
3562 } else if (s == 0) {
3564 if (pc_left != u_right) {
3565 qsort_swap(u_right, pc_left);
3571 qsort_assert(u_right < pc_left);
3572 qsort_assert(pc_left <= pc_right);
3573 qsort_assert(qsort_cmp(u_right + 1, pc_left) <= 0);
3574 qsort_assert(qsort_cmp(pc_left, pc_right) == 0);
3577 /* Do a mirror image scan of uncompared values on the right
3579 while (still_work_on_right = (u_left <= part_right)) {
3580 s = qsort_cmp(pc_right, u_left);
3583 } else if (s == 0) {
3585 if (pc_right != u_left) {
3586 qsort_swap(pc_right, u_left);
3592 qsort_assert(u_left > pc_right);
3593 qsort_assert(pc_left <= pc_right);
3594 qsort_assert(qsort_cmp(pc_right, u_left - 1) <= 0);
3595 qsort_assert(qsort_cmp(pc_left, pc_right) == 0);
3598 if (still_work_on_left) {
3599 /* I know I have a value on the left side which needs to be
3600 on the right side, but I need to know more to decide
3601 exactly the best thing to do with it.
3603 if (still_work_on_right) {
3604 /* I know I have values on both side which are out of
3605 position. This is a big win because I kill two birds
3606 with one swap (so to speak). I can advance the
3607 uncompared pointers on both sides after swapping both
3608 of them into the right place.
3610 qsort_swap(u_right, u_left);
3613 qsort_all_asserts(pc_left, pc_right, u_left, u_right);
3615 /* I have an out of position value on the left, but the
3616 right is fully scanned, so I "slide" the pivot chunk
3617 and any less-than values left one to make room for the
3618 greater value over on the right. If the out of position
3619 value is immediately adjacent to the pivot chunk (there
3620 are no less-than values), I can do that with a swap,
3621 otherwise, I have to rotate one of the less than values
3622 into the former position of the out of position value
3623 and the right end of the pivot chunk into the left end
3627 if (pc_left == u_right) {
3628 qsort_swap(u_right, pc_right);
3629 qsort_all_asserts(pc_left, pc_right-1, u_left, u_right-1);
3631 qsort_rotate(u_right, pc_left, pc_right);
3632 qsort_all_asserts(pc_left, pc_right-1, u_left, u_right-1);
3637 } else if (still_work_on_right) {
3638 /* Mirror image of complex case above: I have an out of
3639 position value on the right, but the left is fully
3640 scanned, so I need to shuffle things around to make room
3641 for the right value on the left.
3644 if (pc_right == u_left) {
3645 qsort_swap(u_left, pc_left);
3646 qsort_all_asserts(pc_left+1, pc_right, u_left+1, u_right);
3648 qsort_rotate(pc_right, pc_left, u_left);
3649 qsort_all_asserts(pc_left+1, pc_right, u_left+1, u_right);
3654 /* No more scanning required on either side of partition,
3655 break out of loop and figure out next set of partitions
3661 /* The elements in the pivot chunk are now in the right place. They
3662 will never move or be compared again. All I have to do is decide
3663 what to do with the stuff to the left and right of the pivot
3666 Notes on the QSORT_ORDER_GUESS ifdef code:
3668 1. If I just built these partitions without swapping any (or
3669 very many) elements, there is a chance that the elements are
3670 already ordered properly (being properly ordered will
3671 certainly result in no swapping, but the converse can't be
3674 2. A (properly written) insertion sort will run faster on
3675 already ordered data than qsort will.
3677 3. Perhaps there is some way to make a good guess about
3678 switching to an insertion sort earlier than partition size 6
3679 (for instance - we could save the partition size on the stack
3680 and increase the size each time we find we didn't swap, thus
3681 switching to insertion sort earlier for partitions with a
3682 history of not swapping).
3684 4. Naturally, if I just switch right away, it will make
3685 artificial benchmarks with pure ascending (or descending)
3686 data look really good, but is that a good reason in general?
3690 #ifdef QSORT_ORDER_GUESS
3692 #if QSORT_ORDER_GUESS == 1
3693 qsort_break_even = (part_right - part_left) + 1;
3695 #if QSORT_ORDER_GUESS == 2
3696 qsort_break_even *= 2;
3698 #if QSORT_ORDER_GUESS == 3
3699 int prev_break = qsort_break_even;
3700 qsort_break_even *= qsort_break_even;
3701 if (qsort_break_even < prev_break) {
3702 qsort_break_even = (part_right - part_left) + 1;
3706 qsort_break_even = QSORT_BREAK_EVEN;
3710 if (part_left < pc_left) {
3711 /* There are elements on the left which need more processing.
3712 Check the right as well before deciding what to do.
3714 if (pc_right < part_right) {
3715 /* We have two partitions to be sorted. Stack the biggest one
3716 and process the smallest one on the next iteration. This
3717 minimizes the stack height by insuring that any additional
3718 stack entries must come from the smallest partition which
3719 (because it is smallest) will have the fewest
3720 opportunities to generate additional stack entries.
3722 if ((part_right - pc_right) > (pc_left - part_left)) {
3723 /* stack the right partition, process the left */
3724 partition_stack[next_stack_entry].left = pc_right + 1;
3725 partition_stack[next_stack_entry].right = part_right;
3726 #ifdef QSORT_ORDER_GUESS
3727 partition_stack[next_stack_entry].qsort_break_even = qsort_break_even;
3729 part_right = pc_left - 1;
3731 /* stack the left partition, process the right */
3732 partition_stack[next_stack_entry].left = part_left;
3733 partition_stack[next_stack_entry].right = pc_left - 1;
3734 #ifdef QSORT_ORDER_GUESS
3735 partition_stack[next_stack_entry].qsort_break_even = qsort_break_even;
3737 part_left = pc_right + 1;
3739 qsort_assert(next_stack_entry < QSORT_MAX_STACK);
3742 /* The elements on the left are the only remaining elements
3743 that need sorting, arrange for them to be processed as the
3746 part_right = pc_left - 1;
3748 } else if (pc_right < part_right) {
3749 /* There is only one chunk on the right to be sorted, make it
3750 the new partition and loop back around.
3752 part_left = pc_right + 1;
3754 /* This whole partition wound up in the pivot chunk, so
3755 we need to get a new partition off the stack.
3757 if (next_stack_entry == 0) {
3758 /* the stack is empty - we are done */
3762 part_left = partition_stack[next_stack_entry].left;
3763 part_right = partition_stack[next_stack_entry].right;
3764 #ifdef QSORT_ORDER_GUESS
3765 qsort_break_even = partition_stack[next_stack_entry].qsort_break_even;
3769 /* This partition is too small to fool with qsort complexity, just
3770 do an ordinary insertion sort to minimize overhead.
3773 /* Assume 1st element is in right place already, and start checking
3774 at 2nd element to see where it should be inserted.
3776 for (i = part_left + 1; i <= part_right; ++i) {
3778 /* Scan (backwards - just in case 'i' is already in right place)
3779 through the elements already sorted to see if the ith element
3780 belongs ahead of one of them.
3782 for (j = i - 1; j >= part_left; --j) {
3783 if (qsort_cmp(i, j) >= 0) {
3784 /* i belongs right after j
3791 /* Looks like we really need to move some things
3795 for (k = i - 1; k >= j; --k)
3796 array[k + 1] = array[k];
3801 /* That partition is now sorted, grab the next one, or get out
3802 of the loop if there aren't any more.
3805 if (next_stack_entry == 0) {
3806 /* the stack is empty - we are done */
3810 part_left = partition_stack[next_stack_entry].left;
3811 part_right = partition_stack[next_stack_entry].right;
3812 #ifdef QSORT_ORDER_GUESS
3813 qsort_break_even = partition_stack[next_stack_entry].qsort_break_even;
3818 /* Believe it or not, the array is sorted at this point! */