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));
44 static I32 amagic_cmp _((SV *str1, SV *str2));
45 static I32 amagic_cmp_locale _((SV *str1, SV *str2));
54 cxix = dopoptosub(cxstack_ix);
58 switch (cxstack[cxix].blk_gimme) {
75 /* XXXX Should store the old value to allow for tie/overload - and
76 restore in regcomp, where marked with XXXX. */
84 register PMOP *pm = (PMOP*)cLOGOP->op_other;
88 MAGIC *mg = Null(MAGIC*);
92 SV *sv = SvRV(tmpstr);
94 mg = mg_find(sv, 'r');
97 regexp *re = (regexp *)mg->mg_obj;
98 ReREFCNT_dec(pm->op_pmregexp);
99 pm->op_pmregexp = ReREFCNT_inc(re);
102 t = SvPV(tmpstr, len);
104 /* Check against the last compiled regexp. */
105 if (!pm->op_pmregexp || !pm->op_pmregexp->precomp ||
106 pm->op_pmregexp->prelen != len ||
107 memNE(pm->op_pmregexp->precomp, t, len))
109 if (pm->op_pmregexp) {
110 ReREFCNT_dec(pm->op_pmregexp);
111 pm->op_pmregexp = Null(REGEXP*); /* crucial if regcomp aborts */
113 if (PL_op->op_flags & OPf_SPECIAL)
114 PL_reginterp_cnt = I32_MAX; /* Mark as safe. */
116 pm->op_pmflags = pm->op_pmpermflags; /* reset case sensitivity */
117 pm->op_pmregexp = CALLREGCOMP(t, t + len, pm);
118 PL_reginterp_cnt = 0; /* XXXX Be extra paranoid - needed
119 inside tie/overload accessors. */
123 #ifndef INCOMPLETE_TAINTS
126 pm->op_pmdynflags |= PMdf_TAINTED;
128 pm->op_pmdynflags &= ~PMdf_TAINTED;
132 if (!pm->op_pmregexp->prelen && PL_curpm)
134 else if (strEQ("\\s+", pm->op_pmregexp->precomp))
135 pm->op_pmflags |= PMf_WHITE;
137 if (pm->op_pmflags & PMf_KEEP) {
138 pm->op_private &= ~OPpRUNTIME; /* no point compiling again */
139 cLOGOP->op_first->op_next = PL_op->op_next;
147 register PMOP *pm = (PMOP*) cLOGOP->op_other;
148 register PERL_CONTEXT *cx = &cxstack[cxstack_ix];
149 register SV *dstr = cx->sb_dstr;
150 register char *s = cx->sb_s;
151 register char *m = cx->sb_m;
152 char *orig = cx->sb_orig;
153 register REGEXP *rx = cx->sb_rx;
155 rxres_restore(&cx->sb_rxres, rx);
157 if (cx->sb_iters++) {
158 if (cx->sb_iters > cx->sb_maxiters)
159 DIE("Substitution loop");
161 if (!(cx->sb_rxtainted & 2) && SvTAINTED(TOPs))
162 cx->sb_rxtainted |= 2;
163 sv_catsv(dstr, POPs);
166 if (cx->sb_once || !CALLREGEXEC(rx, s, cx->sb_strend, orig,
167 s == m, cx->sb_targ, NULL,
168 ((cx->sb_rflags & REXEC_COPY_STR)
170 : (REXEC_COPY_STR|REXEC_IGNOREPOS))))
172 SV *targ = cx->sb_targ;
173 sv_catpvn(dstr, s, cx->sb_strend - s);
175 cx->sb_rxtainted |= RX_MATCH_TAINTED(rx);
177 (void)SvOOK_off(targ);
178 Safefree(SvPVX(targ));
179 SvPVX(targ) = SvPVX(dstr);
180 SvCUR_set(targ, SvCUR(dstr));
181 SvLEN_set(targ, SvLEN(dstr));
185 TAINT_IF(cx->sb_rxtainted & 1);
186 PUSHs(sv_2mortal(newSViv((I32)cx->sb_iters - 1)));
188 (void)SvPOK_only(targ);
189 TAINT_IF(cx->sb_rxtainted);
193 LEAVE_SCOPE(cx->sb_oldsave);
195 RETURNOP(pm->op_next);
198 if (rx->subbase && rx->subbase != orig) {
201 cx->sb_orig = orig = rx->subbase;
203 cx->sb_strend = s + (cx->sb_strend - m);
205 cx->sb_m = m = rx->startp[0];
206 sv_catpvn(dstr, s, m-s);
207 cx->sb_s = rx->endp[0];
208 cx->sb_rxtainted |= RX_MATCH_TAINTED(rx);
209 rxres_save(&cx->sb_rxres, rx);
210 RETURNOP(pm->op_pmreplstart);
214 rxres_save(void **rsp, REGEXP *rx)
219 if (!p || p[1] < rx->nparens) {
220 i = 6 + rx->nparens * 2;
228 *p++ = (UV)rx->subbase;
229 rx->subbase = Nullch;
233 *p++ = (UV)rx->subbeg;
234 *p++ = (UV)rx->subend;
235 for (i = 0; i <= rx->nparens; ++i) {
236 *p++ = (UV)rx->startp[i];
237 *p++ = (UV)rx->endp[i];
242 rxres_restore(void **rsp, REGEXP *rx)
247 Safefree(rx->subbase);
248 rx->subbase = (char*)(*p);
253 rx->subbeg = (char*)(*p++);
254 rx->subend = (char*)(*p++);
255 for (i = 0; i <= rx->nparens; ++i) {
256 rx->startp[i] = (char*)(*p++);
257 rx->endp[i] = (char*)(*p++);
262 rxres_free(void **rsp)
267 Safefree((char*)(*p));
275 djSP; dMARK; dORIGMARK;
276 register SV *tmpForm = *++MARK;
288 bool chopspace = (strchr(PL_chopset, ' ') != Nullch);
294 STRLEN fudge = SvCUR(tmpForm) * (IN_UTF8 ? 3 : 1) + 1;
296 if (!SvMAGICAL(tmpForm) || !SvCOMPILED(tmpForm)) {
297 SvREADONLY_off(tmpForm);
298 doparseform(tmpForm);
301 SvPV_force(PL_formtarget, len);
302 t = SvGROW(PL_formtarget, len + fudge + 1); /* XXX SvCUR bad */
304 f = SvPV(tmpForm, len);
305 /* need to jump to the next word */
306 s = f + len + WORD_ALIGN - SvCUR(tmpForm) % WORD_ALIGN;
315 case FF_LITERAL: arg = fpc[1]; name = "LITERAL"; break;
316 case FF_BLANK: arg = fpc[1]; name = "BLANK"; break;
317 case FF_SKIP: arg = fpc[1]; name = "SKIP"; break;
318 case FF_FETCH: arg = fpc[1]; name = "FETCH"; break;
319 case FF_DECIMAL: arg = fpc[1]; name = "DECIMAL"; break;
321 case FF_CHECKNL: name = "CHECKNL"; break;
322 case FF_CHECKCHOP: name = "CHECKCHOP"; break;
323 case FF_SPACE: name = "SPACE"; break;
324 case FF_HALFSPACE: name = "HALFSPACE"; break;
325 case FF_ITEM: name = "ITEM"; break;
326 case FF_CHOP: name = "CHOP"; break;
327 case FF_LINEGLOB: name = "LINEGLOB"; break;
328 case FF_NEWLINE: name = "NEWLINE"; break;
329 case FF_MORE: name = "MORE"; break;
330 case FF_LINEMARK: name = "LINEMARK"; break;
331 case FF_END: name = "END"; break;
334 PerlIO_printf(PerlIO_stderr(), "%-16s%ld\n", name, (long) arg);
336 PerlIO_printf(PerlIO_stderr(), "%-16s\n", name);
364 if (ckWARN(WARN_SYNTAX))
365 warner(WARN_SYNTAX, "Not enough format arguments");
370 item = s = SvPV(sv, len);
373 itemsize = sv_len_utf8(sv);
374 if (itemsize != len) {
376 if (itemsize > fieldsize) {
377 itemsize = fieldsize;
378 itembytes = itemsize;
379 sv_pos_u2b(sv, &itembytes, 0);
383 send = chophere = s + itembytes;
392 sv_pos_b2u(sv, &itemsize);
396 if (itemsize > fieldsize)
397 itemsize = fieldsize;
398 send = chophere = s + itemsize;
410 item = s = SvPV(sv, len);
413 itemsize = sv_len_utf8(sv);
414 if (itemsize != len) {
416 if (itemsize <= fieldsize) {
417 send = chophere = s + itemsize;
428 itemsize = fieldsize;
429 itembytes = itemsize;
430 sv_pos_u2b(sv, &itembytes, 0);
431 send = chophere = s + itembytes;
432 while (s < send || (s == send && isSPACE(*s))) {
442 if (strchr(PL_chopset, *s))
447 itemsize = chophere - item;
448 sv_pos_b2u(sv, &itemsize);
453 if (itemsize <= fieldsize) {
454 send = chophere = s + itemsize;
465 itemsize = fieldsize;
466 send = chophere = s + itemsize;
467 while (s < send || (s == send && isSPACE(*s))) {
477 if (strchr(PL_chopset, *s))
482 itemsize = chophere - item;
487 arg = fieldsize - itemsize;
496 arg = fieldsize - itemsize;
511 switch (UTF8SKIP(s)) {
522 if ( !((*t++ = *s++) & ~31) )
530 int ch = *t++ = *s++;
533 if ( !((*t++ = *s++) & ~31) )
542 while (*s && isSPACE(*s))
549 item = s = SvPV(sv, len);
562 SvCUR_set(PL_formtarget, t - SvPVX(PL_formtarget));
563 sv_catpvn(PL_formtarget, item, itemsize);
564 SvGROW(PL_formtarget, SvCUR(PL_formtarget) + fudge + 1);
565 t = SvPVX(PL_formtarget) + SvCUR(PL_formtarget);
570 /* If the field is marked with ^ and the value is undefined,
573 if ((arg & 512) && !SvOK(sv)) {
581 /* Formats aren't yet marked for locales, so assume "yes". */
584 sprintf(t, "%#*.*f", (int) fieldsize, (int) arg & 255, value);
586 sprintf(t, "%*.0f", (int) fieldsize, value);
593 while (t-- > linemark && *t == ' ') ;
601 if (arg) { /* repeat until fields exhausted? */
603 SvCUR_set(PL_formtarget, t - SvPVX(PL_formtarget));
604 lines += FmLINES(PL_formtarget);
607 if (strnEQ(linemark, linemark - arg, arg))
608 DIE("Runaway format");
610 FmLINES(PL_formtarget) = lines;
612 RETURNOP(cLISTOP->op_first);
625 while (*s && isSPACE(*s) && s < send)
629 arg = fieldsize - itemsize;
636 if (strnEQ(s," ",3)) {
637 while (s > SvPVX(PL_formtarget) && isSPACE(s[-1]))
648 SvCUR_set(PL_formtarget, t - SvPVX(PL_formtarget));
649 FmLINES(PL_formtarget) += lines;
661 if (PL_stack_base + *PL_markstack_ptr == SP) {
663 if (GIMME_V == G_SCALAR)
665 RETURNOP(PL_op->op_next->op_next);
667 PL_stack_sp = PL_stack_base + *PL_markstack_ptr + 1;
668 pp_pushmark(ARGS); /* push dst */
669 pp_pushmark(ARGS); /* push src */
670 ENTER; /* enter outer scope */
673 /* SAVE_DEFSV does *not* suffice here for USE_THREADS */
675 ENTER; /* enter inner scope */
678 src = PL_stack_base[*PL_markstack_ptr];
683 if (PL_op->op_type == OP_MAPSTART)
684 pp_pushmark(ARGS); /* push top */
685 return ((LOGOP*)PL_op->op_next)->op_other;
690 DIE("panic: mapstart"); /* uses grepstart */
696 I32 diff = (SP - PL_stack_base) - *PL_markstack_ptr;
702 ++PL_markstack_ptr[-1];
704 if (diff > PL_markstack_ptr[-1] - PL_markstack_ptr[-2]) {
705 shift = diff - (PL_markstack_ptr[-1] - PL_markstack_ptr[-2]);
706 count = (SP - PL_stack_base) - PL_markstack_ptr[-1] + 2;
711 PL_markstack_ptr[-1] += shift;
712 *PL_markstack_ptr += shift;
716 dst = PL_stack_base + (PL_markstack_ptr[-2] += diff) - 1;
719 *dst-- = SvTEMP(TOPs) ? POPs : sv_mortalcopy(POPs);
721 LEAVE; /* exit inner scope */
724 if (PL_markstack_ptr[-1] > *PL_markstack_ptr) {
728 (void)POPMARK; /* pop top */
729 LEAVE; /* exit outer scope */
730 (void)POPMARK; /* pop src */
731 items = --*PL_markstack_ptr - PL_markstack_ptr[-1];
732 (void)POPMARK; /* pop dst */
733 SP = PL_stack_base + POPMARK; /* pop original mark */
734 if (gimme == G_SCALAR) {
738 else if (gimme == G_ARRAY)
745 ENTER; /* enter inner scope */
748 src = PL_stack_base[PL_markstack_ptr[-1]];
752 RETURNOP(cLOGOP->op_other);
756 #define tryCALL_AMAGICbin(left,right,meth,svp) STMT_START { \
758 if (PL_amagic_generation) { \
759 if (SvAMAGIC(left)||SvAMAGIC(right))\
760 *svp = amagic_call(left, \
768 amagic_cmp(register SV *str1, register SV *str2)
771 tryCALL_AMAGICbin(str1,str2,scmp,&tmpsv);
776 I32 i = SvIVX(tmpsv);
786 return sv_cmp(str1, str2);
790 amagic_cmp_locale(register SV *str1, register SV *str2)
793 tryCALL_AMAGICbin(str1,str2,scmp,&tmpsv);
798 I32 i = SvIVX(tmpsv);
808 return sv_cmp_locale(str1, str2);
813 djSP; dMARK; dORIGMARK;
815 SV **myorigmark = ORIGMARK;
821 OP* nextop = PL_op->op_next;
824 if (gimme != G_ARRAY) {
830 SAVEPPTR(PL_sortcop);
831 if (PL_op->op_flags & OPf_STACKED) {
832 if (PL_op->op_flags & OPf_SPECIAL) {
833 OP *kid = cLISTOP->op_first->op_sibling; /* pass pushmark */
834 kid = kUNOP->op_first; /* pass rv2gv */
835 kid = kUNOP->op_first; /* pass leave */
836 PL_sortcop = kid->op_next;
837 stash = PL_curcop->cop_stash;
840 cv = sv_2cv(*++MARK, &stash, &gv, 0);
841 if (!(cv && CvROOT(cv))) {
843 SV *tmpstr = sv_newmortal();
844 gv_efullname3(tmpstr, gv, Nullch);
845 if (cv && CvXSUB(cv))
846 DIE("Xsub \"%s\" called in sort", SvPVX(tmpstr));
847 DIE("Undefined sort subroutine \"%s\" called",
852 DIE("Xsub called in sort");
853 DIE("Undefined subroutine in sort");
855 DIE("Not a CODE reference in sort");
857 PL_sortcop = CvSTART(cv);
858 SAVESPTR(CvROOT(cv)->op_ppaddr);
859 CvROOT(cv)->op_ppaddr = PL_ppaddr[OP_NULL];
862 PL_curpad = AvARRAY((AV*)AvARRAY(CvPADLIST(cv))[1]);
867 stash = PL_curcop->cop_stash;
871 while (MARK < SP) { /* This may or may not shift down one here. */
873 if (*up = *++MARK) { /* Weed out nulls. */
875 if (!PL_sortcop && !SvPOK(*up)) {
880 (void)sv_2pv(*up, &n_a);
885 max = --up - myorigmark;
890 bool oldcatch = CATCH_GET;
896 PUSHSTACKi(PERLSI_SORT);
897 if (PL_sortstash != stash) {
898 PL_firstgv = gv_fetchpv("a", TRUE, SVt_PV);
899 PL_secondgv = gv_fetchpv("b", TRUE, SVt_PV);
900 PL_sortstash = stash;
903 SAVESPTR(GvSV(PL_firstgv));
904 SAVESPTR(GvSV(PL_secondgv));
906 PUSHBLOCK(cx, CXt_NULL, PL_stack_base);
907 if (!(PL_op->op_flags & OPf_SPECIAL)) {
908 bool hasargs = FALSE;
909 cx->cx_type = CXt_SUB;
910 cx->blk_gimme = G_SCALAR;
913 (void)SvREFCNT_inc(cv); /* in preparation for POPSUB */
915 PL_sortcxix = cxstack_ix;
916 qsortsv((myorigmark+1), max, FUNC_NAME_TO_PTR(sortcv));
918 POPBLOCK(cx,PL_curpm);
926 MEXTEND(SP, 20); /* Can't afford stack realloc on signal. */
927 qsortsv(ORIGMARK+1, max,
928 (PL_op->op_private & OPpLOCALE)
930 ? FUNC_NAME_TO_PTR(amagic_cmp_locale)
931 : FUNC_NAME_TO_PTR(sv_cmp_locale))
933 ? FUNC_NAME_TO_PTR(amagic_cmp)
934 : FUNC_NAME_TO_PTR(sv_cmp) ));
938 PL_stack_sp = ORIGMARK + max;
946 if (GIMME == G_ARRAY)
947 return cCONDOP->op_true;
948 return SvTRUEx(PAD_SV(PL_op->op_targ)) ? cCONDOP->op_false : cCONDOP->op_true;
955 if (GIMME == G_ARRAY) {
956 RETURNOP(((CONDOP*)cUNOP->op_first)->op_false);
960 SV *targ = PAD_SV(PL_op->op_targ);
962 if ((PL_op->op_private & OPpFLIP_LINENUM)
963 ? (PL_last_in_gv && SvIV(sv) == (IV)IoLINES(GvIOp(PL_last_in_gv)))
965 sv_setiv(PAD_SV(cUNOP->op_first->op_targ), 1);
966 if (PL_op->op_flags & OPf_SPECIAL) {
974 RETURNOP(((CONDOP*)cUNOP->op_first)->op_false);
987 if (GIMME == G_ARRAY) {
993 if (SvNIOKp(left) || !SvPOKp(left) ||
994 (looks_like_number(left) && *SvPVX(left) != '0') )
996 if (SvNV(left) < IV_MIN || SvNV(right) >= IV_MAX)
997 croak("Range iterator outside integer range");
1001 EXTEND_MORTAL(max - i + 1);
1002 EXTEND(SP, max - i + 1);
1005 sv = sv_2mortal(newSViv(i++));
1010 SV *final = sv_mortalcopy(right);
1012 char *tmps = SvPV(final, len);
1014 sv = sv_mortalcopy(left);
1016 while (!SvNIOKp(sv) && SvCUR(sv) <= len) {
1018 if (strEQ(SvPVX(sv),tmps))
1020 sv = sv_2mortal(newSVsv(sv));
1027 SV *targ = PAD_SV(cUNOP->op_first->op_targ);
1029 if ((PL_op->op_private & OPpFLIP_LINENUM)
1030 ? (PL_last_in_gv && SvIV(sv) == (IV)IoLINES(GvIOp(PL_last_in_gv)))
1032 sv_setiv(PAD_SV(((UNOP*)cUNOP->op_first)->op_first->op_targ), 0);
1033 sv_catpv(targ, "E0");
1044 dopoptolabel(char *label)
1048 register PERL_CONTEXT *cx;
1050 for (i = cxstack_ix; i >= 0; i--) {
1052 switch (CxTYPE(cx)) {
1054 if (ckWARN(WARN_UNSAFE))
1055 warner(WARN_UNSAFE, "Exiting substitution via %s",
1056 PL_op_name[PL_op->op_type]);
1059 if (ckWARN(WARN_UNSAFE))
1060 warner(WARN_UNSAFE, "Exiting subroutine via %s",
1061 PL_op_name[PL_op->op_type]);
1064 if (ckWARN(WARN_UNSAFE))
1065 warner(WARN_UNSAFE, "Exiting eval via %s",
1066 PL_op_name[PL_op->op_type]);
1069 if (ckWARN(WARN_UNSAFE))
1070 warner(WARN_UNSAFE, "Exiting pseudo-block via %s",
1071 PL_op_name[PL_op->op_type]);
1074 if (!cx->blk_loop.label ||
1075 strNE(label, cx->blk_loop.label) ) {
1076 DEBUG_l(deb("(Skipping label #%ld %s)\n",
1077 (long)i, cx->blk_loop.label));
1080 DEBUG_l( deb("(Found label #%ld %s)\n", (long)i, label));
1090 I32 gimme = block_gimme();
1091 return (gimme == G_VOID) ? G_SCALAR : gimme;
1100 cxix = dopoptosub(cxstack_ix);
1104 switch (cxstack[cxix].blk_gimme) {
1112 croak("panic: bad gimme: %d\n", cxstack[cxix].blk_gimme);
1119 dopoptosub(I32 startingblock)
1122 return dopoptosub_at(cxstack, startingblock);
1126 dopoptosub_at(PERL_CONTEXT *cxstk, I32 startingblock)
1130 register PERL_CONTEXT *cx;
1131 for (i = startingblock; i >= 0; i--) {
1133 switch (CxTYPE(cx)) {
1138 DEBUG_l( deb("(Found sub #%ld)\n", (long)i));
1146 dopoptoeval(I32 startingblock)
1150 register PERL_CONTEXT *cx;
1151 for (i = startingblock; i >= 0; i--) {
1153 switch (CxTYPE(cx)) {
1157 DEBUG_l( deb("(Found eval #%ld)\n", (long)i));
1165 dopoptoloop(I32 startingblock)
1169 register PERL_CONTEXT *cx;
1170 for (i = startingblock; i >= 0; i--) {
1172 switch (CxTYPE(cx)) {
1174 if (ckWARN(WARN_UNSAFE))
1175 warner(WARN_UNSAFE, "Exiting substitution via %s",
1176 PL_op_name[PL_op->op_type]);
1179 if (ckWARN(WARN_UNSAFE))
1180 warner(WARN_UNSAFE, "Exiting subroutine via %s",
1181 PL_op_name[PL_op->op_type]);
1184 if (ckWARN(WARN_UNSAFE))
1185 warner(WARN_UNSAFE, "Exiting eval via %s",
1186 PL_op_name[PL_op->op_type]);
1189 if (ckWARN(WARN_UNSAFE))
1190 warner(WARN_UNSAFE, "Exiting pseudo-block via %s",
1191 PL_op_name[PL_op->op_type]);
1194 DEBUG_l( deb("(Found loop #%ld)\n", (long)i));
1205 register PERL_CONTEXT *cx;
1209 while (cxstack_ix > cxix) {
1210 cx = &cxstack[cxstack_ix];
1211 DEBUG_l(PerlIO_printf(Perl_debug_log, "Unwinding block %ld, type %s\n",
1212 (long) cxstack_ix, PL_block_type[CxTYPE(cx)]));
1213 /* Note: we don't need to restore the base context info till the end. */
1214 switch (CxTYPE(cx)) {
1217 continue; /* not break */
1235 die_where(char *message)
1241 register PERL_CONTEXT *cx;
1246 if (PL_in_eval & 4) {
1248 STRLEN klen = strlen(message);
1250 svp = hv_fetch(ERRHV, message, klen, TRUE);
1253 static char prefix[] = "\t(in cleanup) ";
1255 sv_upgrade(*svp, SVt_IV);
1256 (void)SvIOK_only(*svp);
1259 SvGROW(err, SvCUR(err)+sizeof(prefix)+klen);
1260 sv_catpvn(err, prefix, sizeof(prefix)-1);
1261 sv_catpvn(err, message, klen);
1262 if (ckWARN(WARN_UNSAFE)) {
1263 STRLEN start = SvCUR(err)-klen-sizeof(prefix)+1;
1264 warner(WARN_UNSAFE, SvPVX(err)+start);
1271 sv_setpv(ERRSV, message);
1274 message = SvPVx(ERRSV, n_a);
1276 while ((cxix = dopoptoeval(cxstack_ix)) < 0 && PL_curstackinfo->si_prev) {
1284 if (cxix < cxstack_ix)
1287 POPBLOCK(cx,PL_curpm);
1288 if (CxTYPE(cx) != CXt_EVAL) {
1289 PerlIO_printf(PerlIO_stderr(), "panic: die %s", message);
1294 if (gimme == G_SCALAR)
1295 *++newsp = &PL_sv_undef;
1296 PL_stack_sp = newsp;
1300 if (optype == OP_REQUIRE) {
1301 char* msg = SvPVx(ERRSV, n_a);
1302 DIE("%s", *msg ? msg : "Compilation failed in require");
1304 return pop_return();
1308 message = SvPVx(ERRSV, n_a);
1309 PerlIO_printf(PerlIO_stderr(), "%s",message);
1310 PerlIO_flush(PerlIO_stderr());
1319 if (SvTRUE(left) != SvTRUE(right))
1331 RETURNOP(cLOGOP->op_other);
1340 RETURNOP(cLOGOP->op_other);
1346 register I32 cxix = dopoptosub(cxstack_ix);
1347 register PERL_CONTEXT *cx;
1348 register PERL_CONTEXT *ccstack = cxstack;
1349 PERL_SI *top_si = PL_curstackinfo;
1360 /* we may be in a higher stacklevel, so dig down deeper */
1361 while (cxix < 0 && top_si->si_type != PERLSI_MAIN) {
1362 top_si = top_si->si_prev;
1363 ccstack = top_si->si_cxstack;
1364 cxix = dopoptosub_at(ccstack, top_si->si_cxix);
1367 if (GIMME != G_ARRAY)
1371 if (PL_DBsub && cxix >= 0 &&
1372 ccstack[cxix].blk_sub.cv == GvCV(PL_DBsub))
1376 cxix = dopoptosub_at(ccstack, cxix - 1);
1379 cx = &ccstack[cxix];
1380 if (CxTYPE(cx) == CXt_SUB) {
1381 dbcxix = dopoptosub_at(ccstack, cxix - 1);
1382 /* We expect that ccstack[dbcxix] is CXt_SUB, anyway, the
1383 field below is defined for any cx. */
1384 if (PL_DBsub && dbcxix >= 0 && ccstack[dbcxix].blk_sub.cv == GvCV(PL_DBsub))
1385 cx = &ccstack[dbcxix];
1388 if (GIMME != G_ARRAY) {
1389 hv = cx->blk_oldcop->cop_stash;
1391 PUSHs(&PL_sv_undef);
1394 sv_setpv(TARG, HvNAME(hv));
1400 hv = cx->blk_oldcop->cop_stash;
1402 PUSHs(&PL_sv_undef);
1404 PUSHs(sv_2mortal(newSVpv(HvNAME(hv), 0)));
1405 PUSHs(sv_2mortal(newSVpv(SvPVX(GvSV(cx->blk_oldcop->cop_filegv)), 0)));
1406 PUSHs(sv_2mortal(newSViv((I32)cx->blk_oldcop->cop_line)));
1409 if (CxTYPE(cx) == CXt_SUB) { /* So is ccstack[dbcxix]. */
1411 gv_efullname3(sv, CvGV(ccstack[cxix].blk_sub.cv), Nullch);
1412 PUSHs(sv_2mortal(sv));
1413 PUSHs(sv_2mortal(newSViv((I32)cx->blk_sub.hasargs)));
1416 PUSHs(sv_2mortal(newSVpv("(eval)",0)));
1417 PUSHs(sv_2mortal(newSViv(0)));
1419 gimme = (I32)cx->blk_gimme;
1420 if (gimme == G_VOID)
1421 PUSHs(&PL_sv_undef);
1423 PUSHs(sv_2mortal(newSViv(gimme & G_ARRAY)));
1424 if (CxTYPE(cx) == CXt_EVAL) {
1425 if (cx->blk_eval.old_op_type == OP_ENTEREVAL) {
1426 PUSHs(cx->blk_eval.cur_text);
1429 else if (cx->blk_eval.old_name) { /* Try blocks have old_name == 0. */
1430 /* Require, put the name. */
1431 PUSHs(sv_2mortal(newSVpv(cx->blk_eval.old_name, 0)));
1435 else if (CxTYPE(cx) == CXt_SUB &&
1436 cx->blk_sub.hasargs &&
1437 PL_curcop->cop_stash == PL_debstash)
1439 AV *ary = cx->blk_sub.argarray;
1440 int off = AvARRAY(ary) - AvALLOC(ary);
1444 PL_dbargs = GvAV(gv_AVadd(tmpgv = gv_fetchpv("DB::args", TRUE,
1447 AvREAL_off(PL_dbargs); /* XXX Should be REIFY */
1450 if (AvMAX(PL_dbargs) < AvFILLp(ary) + off)
1451 av_extend(PL_dbargs, AvFILLp(ary) + off);
1452 Copy(AvALLOC(ary), AvARRAY(PL_dbargs), AvFILLp(ary) + 1 + off, SV*);
1453 AvFILLp(PL_dbargs) = AvFILLp(ary) + off;
1459 sortcv(SV *a, SV *b)
1462 I32 oldsaveix = PL_savestack_ix;
1463 I32 oldscopeix = PL_scopestack_ix;
1465 GvSV(PL_firstgv) = a;
1466 GvSV(PL_secondgv) = b;
1467 PL_stack_sp = PL_stack_base;
1470 if (PL_stack_sp != PL_stack_base + 1)
1471 croak("Sort subroutine didn't return single value");
1472 if (!SvNIOKp(*PL_stack_sp))
1473 croak("Sort subroutine didn't return a numeric value");
1474 result = SvIV(*PL_stack_sp);
1475 while (PL_scopestack_ix > oldscopeix) {
1478 leave_scope(oldsaveix);
1492 sv_reset(tmps, PL_curcop->cop_stash);
1504 PL_curcop = (COP*)PL_op;
1505 TAINT_NOT; /* Each statement is presumed innocent */
1506 PL_stack_sp = PL_stack_base + cxstack[cxstack_ix].blk_oldsp;
1509 if (PL_op->op_private || SvIV(PL_DBsingle) || SvIV(PL_DBsignal) || SvIV(PL_DBtrace))
1513 register PERL_CONTEXT *cx;
1514 I32 gimme = G_ARRAY;
1521 DIE("No DB::DB routine defined");
1523 if (CvDEPTH(cv) >= 1 && !(PL_debug & (1<<30))) /* don't do recursive DB::DB call */
1535 push_return(PL_op->op_next);
1536 PUSHBLOCK(cx, CXt_SUB, SP);
1539 (void)SvREFCNT_inc(cv);
1540 SAVESPTR(PL_curpad);
1541 PL_curpad = AvARRAY((AV*)*av_fetch(CvPADLIST(cv),1,FALSE));
1542 RETURNOP(CvSTART(cv));
1556 register PERL_CONTEXT *cx;
1557 I32 gimme = GIMME_V;
1564 if (PL_op->op_flags & OPf_SPECIAL)
1565 svp = save_threadsv(PL_op->op_targ); /* per-thread variable */
1567 #endif /* USE_THREADS */
1568 if (PL_op->op_targ) {
1569 svp = &PL_curpad[PL_op->op_targ]; /* "my" variable */
1574 (void)save_scalar(gv);
1575 svp = &GvSV(gv); /* symbol table variable */
1580 PUSHBLOCK(cx, CXt_LOOP, SP);
1581 PUSHLOOP(cx, svp, MARK);
1582 if (PL_op->op_flags & OPf_STACKED) {
1583 cx->blk_loop.iterary = (AV*)SvREFCNT_inc(POPs);
1584 if (SvTYPE(cx->blk_loop.iterary) != SVt_PVAV) {
1586 if (SvNIOKp(sv) || !SvPOKp(sv) ||
1587 (looks_like_number(sv) && *SvPVX(sv) != '0')) {
1588 if (SvNV(sv) < IV_MIN ||
1589 SvNV((SV*)cx->blk_loop.iterary) >= IV_MAX)
1590 croak("Range iterator outside integer range");
1591 cx->blk_loop.iterix = SvIV(sv);
1592 cx->blk_loop.itermax = SvIV((SV*)cx->blk_loop.iterary);
1595 cx->blk_loop.iterlval = newSVsv(sv);
1599 cx->blk_loop.iterary = PL_curstack;
1600 AvFILLp(PL_curstack) = SP - PL_stack_base;
1601 cx->blk_loop.iterix = MARK - PL_stack_base;
1610 register PERL_CONTEXT *cx;
1611 I32 gimme = GIMME_V;
1617 PUSHBLOCK(cx, CXt_LOOP, SP);
1618 PUSHLOOP(cx, 0, SP);
1626 register PERL_CONTEXT *cx;
1627 struct block_loop cxloop;
1635 POPLOOP1(cx); /* Delay POPLOOP2 until stack values are safe */
1638 if (gimme == G_VOID)
1640 else if (gimme == G_SCALAR) {
1642 *++newsp = sv_mortalcopy(*SP);
1644 *++newsp = &PL_sv_undef;
1648 *++newsp = sv_mortalcopy(*++mark);
1649 TAINT_NOT; /* Each item is independent */
1655 POPLOOP2(); /* Stack values are safe: release loop vars ... */
1656 PL_curpm = newpm; /* ... and pop $1 et al */
1668 register PERL_CONTEXT *cx;
1669 struct block_sub cxsub;
1670 bool popsub2 = FALSE;
1676 if (PL_curstackinfo->si_type == PERLSI_SORT) {
1677 if (cxstack_ix == PL_sortcxix || dopoptosub(cxstack_ix) <= PL_sortcxix) {
1678 if (cxstack_ix > PL_sortcxix)
1679 dounwind(PL_sortcxix);
1680 AvARRAY(PL_curstack)[1] = *SP;
1681 PL_stack_sp = PL_stack_base + 1;
1686 cxix = dopoptosub(cxstack_ix);
1688 DIE("Can't return outside a subroutine");
1689 if (cxix < cxstack_ix)
1693 switch (CxTYPE(cx)) {
1695 POPSUB1(cx); /* Delay POPSUB2 until stack values are safe */
1700 if (optype == OP_REQUIRE &&
1701 (MARK == SP || (gimme == G_SCALAR && !SvTRUE(*SP))) )
1703 /* Unassume the success we assumed earlier. */
1704 char *name = cx->blk_eval.old_name;
1705 (void)hv_delete(GvHVn(PL_incgv), name, strlen(name), G_DISCARD);
1706 DIE("%s did not return a true value", name);
1710 DIE("panic: return");
1714 if (gimme == G_SCALAR) {
1717 if (cxsub.cv && CvDEPTH(cxsub.cv) > 1) {
1719 *++newsp = SvREFCNT_inc(*SP);
1724 *++newsp = sv_mortalcopy(*SP);
1727 *++newsp = (SvTEMP(*SP)) ? *SP : sv_mortalcopy(*SP);
1729 *++newsp = sv_mortalcopy(*SP);
1731 *++newsp = &PL_sv_undef;
1733 else if (gimme == G_ARRAY) {
1734 while (++MARK <= SP) {
1735 *++newsp = (popsub2 && SvTEMP(*MARK))
1736 ? *MARK : sv_mortalcopy(*MARK);
1737 TAINT_NOT; /* Each item is independent */
1740 PL_stack_sp = newsp;
1742 /* Stack values are safe: */
1744 POPSUB2(); /* release CV and @_ ... */
1746 PL_curpm = newpm; /* ... and pop $1 et al */
1749 return pop_return();
1756 register PERL_CONTEXT *cx;
1757 struct block_loop cxloop;
1758 struct block_sub cxsub;
1765 SV **mark = PL_stack_base + cxstack[cxstack_ix].blk_oldsp;
1767 if (PL_op->op_flags & OPf_SPECIAL) {
1768 cxix = dopoptoloop(cxstack_ix);
1770 DIE("Can't \"last\" outside a block");
1773 cxix = dopoptolabel(cPVOP->op_pv);
1775 DIE("Label not found for \"last %s\"", cPVOP->op_pv);
1777 if (cxix < cxstack_ix)
1781 switch (CxTYPE(cx)) {
1783 POPLOOP1(cx); /* Delay POPLOOP2 until stack values are safe */
1785 nextop = cxloop.last_op->op_next;
1788 POPSUB1(cx); /* Delay POPSUB2 until stack values are safe */
1790 nextop = pop_return();
1794 nextop = pop_return();
1801 if (gimme == G_SCALAR) {
1803 *++newsp = ((pop2 == CXt_SUB) && SvTEMP(*SP))
1804 ? *SP : sv_mortalcopy(*SP);
1806 *++newsp = &PL_sv_undef;
1808 else if (gimme == G_ARRAY) {
1809 while (++MARK <= SP) {
1810 *++newsp = ((pop2 == CXt_SUB) && SvTEMP(*MARK))
1811 ? *MARK : sv_mortalcopy(*MARK);
1812 TAINT_NOT; /* Each item is independent */
1818 /* Stack values are safe: */
1821 POPLOOP2(); /* release loop vars ... */
1825 POPSUB2(); /* release CV and @_ ... */
1828 PL_curpm = newpm; /* ... and pop $1 et al */
1837 register PERL_CONTEXT *cx;
1840 if (PL_op->op_flags & OPf_SPECIAL) {
1841 cxix = dopoptoloop(cxstack_ix);
1843 DIE("Can't \"next\" outside a block");
1846 cxix = dopoptolabel(cPVOP->op_pv);
1848 DIE("Label not found for \"next %s\"", cPVOP->op_pv);
1850 if (cxix < cxstack_ix)
1854 oldsave = PL_scopestack[PL_scopestack_ix - 1];
1855 LEAVE_SCOPE(oldsave);
1856 return cx->blk_loop.next_op;
1862 register PERL_CONTEXT *cx;
1865 if (PL_op->op_flags & OPf_SPECIAL) {
1866 cxix = dopoptoloop(cxstack_ix);
1868 DIE("Can't \"redo\" outside a block");
1871 cxix = dopoptolabel(cPVOP->op_pv);
1873 DIE("Label not found for \"redo %s\"", cPVOP->op_pv);
1875 if (cxix < cxstack_ix)
1879 oldsave = PL_scopestack[PL_scopestack_ix - 1];
1880 LEAVE_SCOPE(oldsave);
1881 return cx->blk_loop.redo_op;
1885 dofindlabel(OP *o, char *label, OP **opstack, OP **oplimit)
1889 static char too_deep[] = "Target of goto is too deeply nested";
1893 if (o->op_type == OP_LEAVE ||
1894 o->op_type == OP_SCOPE ||
1895 o->op_type == OP_LEAVELOOP ||
1896 o->op_type == OP_LEAVETRY)
1898 *ops++ = cUNOPo->op_first;
1903 if (o->op_flags & OPf_KIDS) {
1905 /* First try all the kids at this level, since that's likeliest. */
1906 for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling) {
1907 if ((kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) &&
1908 kCOP->cop_label && strEQ(kCOP->cop_label, label))
1911 for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling) {
1912 if (kid == PL_lastgotoprobe)
1914 if ((kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) &&
1916 (ops[-1]->op_type != OP_NEXTSTATE &&
1917 ops[-1]->op_type != OP_DBSTATE)))
1919 if (o = dofindlabel(kid, label, ops, oplimit))
1929 return pp_goto(ARGS);
1938 register PERL_CONTEXT *cx;
1939 #define GOTO_DEPTH 64
1940 OP *enterops[GOTO_DEPTH];
1942 int do_dump = (PL_op->op_type == OP_DUMP);
1945 if (PL_op->op_flags & OPf_STACKED) {
1949 /* This egregious kludge implements goto &subroutine */
1950 if (SvROK(sv) && SvTYPE(SvRV(sv)) == SVt_PVCV) {
1952 register PERL_CONTEXT *cx;
1953 CV* cv = (CV*)SvRV(sv);
1957 int arg_was_real = 0;
1960 if (!CvROOT(cv) && !CvXSUB(cv)) {
1965 /* autoloaded stub? */
1966 if (cv != GvCV(gv) && (cv = GvCV(gv)))
1968 autogv = gv_autoload4(GvSTASH(gv), GvNAME(gv),
1969 GvNAMELEN(gv), FALSE);
1970 if (autogv && (cv = GvCV(autogv)))
1972 tmpstr = sv_newmortal();
1973 gv_efullname3(tmpstr, gv, Nullch);
1974 DIE("Goto undefined subroutine &%s",SvPVX(tmpstr));
1976 DIE("Goto undefined subroutine");
1979 /* First do some returnish stuff. */
1980 cxix = dopoptosub(cxstack_ix);
1982 DIE("Can't goto subroutine outside a subroutine");
1983 if (cxix < cxstack_ix)
1986 if (CxTYPE(cx) == CXt_EVAL && cx->blk_eval.old_op_type == OP_ENTEREVAL)
1987 DIE("Can't goto subroutine from an eval-string");
1989 if (CxTYPE(cx) == CXt_SUB &&
1990 cx->blk_sub.hasargs) { /* put @_ back onto stack */
1991 AV* av = cx->blk_sub.argarray;
1993 items = AvFILLp(av) + 1;
1995 EXTEND(PL_stack_sp, items); /* @_ could have been extended. */
1996 Copy(AvARRAY(av), PL_stack_sp, items, SV*);
1997 PL_stack_sp += items;
1999 SvREFCNT_dec(GvAV(PL_defgv));
2000 GvAV(PL_defgv) = cx->blk_sub.savearray;
2001 #endif /* USE_THREADS */
2004 AvREAL_off(av); /* so av_clear() won't clobber elts */
2008 else if (CvXSUB(cv)) { /* put GvAV(defgv) back onto stack */
2012 av = (AV*)PL_curpad[0];
2014 av = GvAV(PL_defgv);
2016 items = AvFILLp(av) + 1;
2018 EXTEND(PL_stack_sp, items); /* @_ could have been extended. */
2019 Copy(AvARRAY(av), PL_stack_sp, items, SV*);
2020 PL_stack_sp += items;
2022 if (CxTYPE(cx) == CXt_SUB &&
2023 !(CvDEPTH(cx->blk_sub.cv) = cx->blk_sub.olddepth))
2024 SvREFCNT_dec(cx->blk_sub.cv);
2025 oldsave = PL_scopestack[PL_scopestack_ix - 1];
2026 LEAVE_SCOPE(oldsave);
2028 /* Now do some callish stuff. */
2031 if (CvOLDSTYLE(cv)) {
2032 I32 (*fp3)_((int,int,int));
2037 fp3 = (I32(*)_((int,int,int)))CvXSUB(cv);
2038 items = (*fp3)(CvXSUBANY(cv).any_i32,
2039 mark - PL_stack_base + 1,
2041 SP = PL_stack_base + items;
2047 PL_stack_sp--; /* There is no cv arg. */
2048 /* Push a mark for the start of arglist */
2050 (void)(*CvXSUB(cv))(cv _PERL_OBJECT_THIS);
2051 /* Pop the current context like a decent sub should */
2052 POPBLOCK(cx, PL_curpm);
2053 /* Do _not_ use PUTBACK, keep the XSUB's return stack! */
2056 return pop_return();
2059 AV* padlist = CvPADLIST(cv);
2060 SV** svp = AvARRAY(padlist);
2061 if (CxTYPE(cx) == CXt_EVAL) {
2062 PL_in_eval = cx->blk_eval.old_in_eval;
2063 PL_eval_root = cx->blk_eval.old_eval_root;
2064 cx->cx_type = CXt_SUB;
2065 cx->blk_sub.hasargs = 0;
2067 cx->blk_sub.cv = cv;
2068 cx->blk_sub.olddepth = CvDEPTH(cv);
2070 if (CvDEPTH(cv) < 2)
2071 (void)SvREFCNT_inc(cv);
2072 else { /* save temporaries on recursion? */
2073 if (CvDEPTH(cv) == 100 && ckWARN(WARN_RECURSION))
2074 sub_crush_depth(cv);
2075 if (CvDEPTH(cv) > AvFILLp(padlist)) {
2076 AV *newpad = newAV();
2077 SV **oldpad = AvARRAY(svp[CvDEPTH(cv)-1]);
2078 I32 ix = AvFILLp((AV*)svp[1]);
2079 svp = AvARRAY(svp[0]);
2080 for ( ;ix > 0; ix--) {
2081 if (svp[ix] != &PL_sv_undef) {
2082 char *name = SvPVX(svp[ix]);
2083 if ((SvFLAGS(svp[ix]) & SVf_FAKE)
2086 /* outer lexical or anon code */
2087 av_store(newpad, ix,
2088 SvREFCNT_inc(oldpad[ix]) );
2090 else { /* our own lexical */
2092 av_store(newpad, ix, sv = (SV*)newAV());
2093 else if (*name == '%')
2094 av_store(newpad, ix, sv = (SV*)newHV());
2096 av_store(newpad, ix, sv = NEWSV(0,0));
2101 av_store(newpad, ix, sv = NEWSV(0,0));
2105 if (cx->blk_sub.hasargs) {
2108 av_store(newpad, 0, (SV*)av);
2109 AvFLAGS(av) = AVf_REIFY;
2111 av_store(padlist, CvDEPTH(cv), (SV*)newpad);
2112 AvFILLp(padlist) = CvDEPTH(cv);
2113 svp = AvARRAY(padlist);
2117 if (!cx->blk_sub.hasargs) {
2118 AV* av = (AV*)PL_curpad[0];
2120 items = AvFILLp(av) + 1;
2122 /* Mark is at the end of the stack. */
2124 Copy(AvARRAY(av), SP + 1, items, SV*);
2129 #endif /* USE_THREADS */
2130 SAVESPTR(PL_curpad);
2131 PL_curpad = AvARRAY((AV*)svp[CvDEPTH(cv)]);
2133 if (cx->blk_sub.hasargs)
2134 #endif /* USE_THREADS */
2136 AV* av = (AV*)PL_curpad[0];
2140 cx->blk_sub.savearray = GvAV(PL_defgv);
2141 GvAV(PL_defgv) = (AV*)SvREFCNT_inc(av);
2142 #endif /* USE_THREADS */
2143 cx->blk_sub.argarray = av;
2146 if (items >= AvMAX(av) + 1) {
2148 if (AvARRAY(av) != ary) {
2149 AvMAX(av) += AvARRAY(av) - AvALLOC(av);
2150 SvPVX(av) = (char*)ary;
2152 if (items >= AvMAX(av) + 1) {
2153 AvMAX(av) = items - 1;
2154 Renew(ary,items+1,SV*);
2156 SvPVX(av) = (char*)ary;
2159 Copy(mark,AvARRAY(av),items,SV*);
2160 AvFILLp(av) = items - 1;
2161 /* preserve @_ nature */
2172 if (PERLDB_SUB) { /* Checking curstash breaks DProf. */
2174 * We do not care about using sv to call CV;
2175 * it's for informational purposes only.
2177 SV *sv = GvSV(PL_DBsub);
2180 if (PERLDB_SUB_NN) {
2181 SvIVX(sv) = (IV)cv; /* Already upgraded, saved */
2184 gv_efullname3(sv, CvGV(cv), Nullch);
2187 && (gotocv = perl_get_cv("DB::goto", FALSE)) ) {
2188 PUSHMARK( PL_stack_sp );
2189 perl_call_sv((SV*)gotocv, G_SCALAR | G_NODEBUG);
2193 RETURNOP(CvSTART(cv));
2197 label = SvPV(sv,n_a);
2199 else if (PL_op->op_flags & OPf_SPECIAL) {
2201 DIE("goto must have label");
2204 label = cPVOP->op_pv;
2206 if (label && *label) {
2211 PL_lastgotoprobe = 0;
2213 for (ix = cxstack_ix; ix >= 0; ix--) {
2215 switch (CxTYPE(cx)) {
2217 gotoprobe = PL_eval_root; /* XXX not good for nested eval */
2220 gotoprobe = cx->blk_oldcop->op_sibling;
2226 gotoprobe = cx->blk_oldcop->op_sibling;
2228 gotoprobe = PL_main_root;
2231 if (CvDEPTH(cx->blk_sub.cv)) {
2232 gotoprobe = CvROOT(cx->blk_sub.cv);
2237 DIE("Can't \"goto\" outside a block");
2241 gotoprobe = PL_main_root;
2244 retop = dofindlabel(gotoprobe, label,
2245 enterops, enterops + GOTO_DEPTH);
2248 PL_lastgotoprobe = gotoprobe;
2251 DIE("Can't find label %s", label);
2253 /* pop unwanted frames */
2255 if (ix < cxstack_ix) {
2262 oldsave = PL_scopestack[PL_scopestack_ix];
2263 LEAVE_SCOPE(oldsave);
2266 /* push wanted frames */
2268 if (*enterops && enterops[1]) {
2270 for (ix = 1; enterops[ix]; ix++) {
2271 PL_op = enterops[ix];
2272 /* Eventually we may want to stack the needed arguments
2273 * for each op. For now, we punt on the hard ones. */
2274 if (PL_op->op_type == OP_ENTERITER)
2275 DIE("Can't \"goto\" into the middle of a foreach loop",
2277 (CALLOP->op_ppaddr)(ARGS);
2285 if (!retop) retop = PL_main_start;
2287 PL_restartop = retop;
2288 PL_do_undump = TRUE;
2292 PL_restartop = 0; /* hmm, must be GNU unexec().. */
2293 PL_do_undump = FALSE;
2309 if (anum == 1 && VMSISH_EXIT)
2314 PUSHs(&PL_sv_undef);
2322 double value = SvNVx(GvSV(cCOP->cop_gv));
2323 register I32 match = I_32(value);
2326 if (((double)match) > value)
2327 --match; /* was fractional--truncate other way */
2329 match -= cCOP->uop.scop.scop_offset;
2332 else if (match > cCOP->uop.scop.scop_max)
2333 match = cCOP->uop.scop.scop_max;
2334 PL_op = cCOP->uop.scop.scop_next[match];
2344 PL_op = PL_op->op_next; /* can't assume anything */
2347 match = *(SvPVx(GvSV(cCOP->cop_gv), n_a)) & 255;
2348 match -= cCOP->uop.scop.scop_offset;
2351 else if (match > cCOP->uop.scop.scop_max)
2352 match = cCOP->uop.scop.scop_max;
2353 PL_op = cCOP->uop.scop.scop_next[match];
2362 save_lines(AV *array, SV *sv)
2364 register char *s = SvPVX(sv);
2365 register char *send = SvPVX(sv) + SvCUR(sv);
2367 register I32 line = 1;
2369 while (s && s < send) {
2370 SV *tmpstr = NEWSV(85,0);
2372 sv_upgrade(tmpstr, SVt_PVMG);
2373 t = strchr(s, '\n');
2379 sv_setpvn(tmpstr, s, t - s);
2380 av_store(array, line++, tmpstr);
2395 assert(CATCH_GET == TRUE);
2396 DEBUG_l(deb("Setting up local jumplevel %p, was %p\n", &cur_env, PL_top_env));
2400 default: /* topmost level handles it */
2409 PL_op = PL_restartop;
2422 sv_compile_2op(SV *sv, OP** startop, char *code, AV** avp)
2423 /* sv Text to convert to OP tree. */
2424 /* startop op_free() this to undo. */
2425 /* code Short string id of the caller. */
2427 dSP; /* Make POPBLOCK work. */
2430 I32 gimme = 0; /* SUSPECT - INITIALZE TO WHAT? NI-S */
2433 OP *oop = PL_op, *rop;
2434 char tmpbuf[TYPE_DIGITS(long) + 12 + 10];
2440 /* switch to eval mode */
2442 if (PL_curcop == &PL_compiling) {
2443 SAVESPTR(PL_compiling.cop_stash);
2444 PL_compiling.cop_stash = PL_curstash;
2446 SAVESPTR(PL_compiling.cop_filegv);
2447 SAVEI16(PL_compiling.cop_line);
2448 sprintf(tmpbuf, "_<(%.10s_eval %lu)", code, (unsigned long)++PL_evalseq);
2449 PL_compiling.cop_filegv = gv_fetchfile(tmpbuf+2);
2450 PL_compiling.cop_line = 1;
2451 /* XXX For C<eval "...">s within BEGIN {} blocks, this ends up
2452 deleting the eval's FILEGV from the stash before gv_check() runs
2453 (i.e. before run-time proper). To work around the coredump that
2454 ensues, we always turn GvMULTI_on for any globals that were
2455 introduced within evals. See force_ident(). GSAR 96-10-12 */
2456 safestr = savepv(tmpbuf);
2457 SAVEDELETE(PL_defstash, safestr, strlen(safestr));
2459 #ifdef OP_IN_REGISTER
2467 PL_op->op_type = OP_ENTEREVAL;
2468 PL_op->op_flags = 0; /* Avoid uninit warning. */
2469 PUSHBLOCK(cx, CXt_EVAL, SP);
2470 PUSHEVAL(cx, 0, PL_compiling.cop_filegv);
2471 rop = doeval(G_SCALAR, startop);
2472 POPBLOCK(cx,PL_curpm);
2475 (*startop)->op_type = OP_NULL;
2476 (*startop)->op_ppaddr = PL_ppaddr[OP_NULL];
2478 *avp = (AV*)SvREFCNT_inc(PL_comppad);
2480 if (PL_curcop == &PL_compiling)
2481 PL_compiling.op_private = PL_hints;
2482 #ifdef OP_IN_REGISTER
2488 /* With USE_THREADS, eval_owner must be held on entry to doeval */
2490 doeval(int gimme, OP** startop)
2503 /* set up a scratch pad */
2506 SAVESPTR(PL_curpad);
2507 SAVESPTR(PL_comppad);
2508 SAVESPTR(PL_comppad_name);
2509 SAVEI32(PL_comppad_name_fill);
2510 SAVEI32(PL_min_intro_pending);
2511 SAVEI32(PL_max_intro_pending);
2514 for (i = cxstack_ix - 1; i >= 0; i--) {
2515 PERL_CONTEXT *cx = &cxstack[i];
2516 if (CxTYPE(cx) == CXt_EVAL)
2518 else if (CxTYPE(cx) == CXt_SUB) {
2519 caller = cx->blk_sub.cv;
2524 SAVESPTR(PL_compcv);
2525 PL_compcv = (CV*)NEWSV(1104,0);
2526 sv_upgrade((SV *)PL_compcv, SVt_PVCV);
2527 CvUNIQUE_on(PL_compcv);
2529 CvOWNER(PL_compcv) = 0;
2530 New(666, CvMUTEXP(PL_compcv), 1, perl_mutex);
2531 MUTEX_INIT(CvMUTEXP(PL_compcv));
2532 #endif /* USE_THREADS */
2534 PL_comppad = newAV();
2535 av_push(PL_comppad, Nullsv);
2536 PL_curpad = AvARRAY(PL_comppad);
2537 PL_comppad_name = newAV();
2538 PL_comppad_name_fill = 0;
2539 PL_min_intro_pending = 0;
2542 av_store(PL_comppad_name, 0, newSVpv("@_", 2));
2543 PL_curpad[0] = (SV*)newAV();
2544 SvPADMY_on(PL_curpad[0]); /* XXX Needed? */
2545 #endif /* USE_THREADS */
2547 comppadlist = newAV();
2548 AvREAL_off(comppadlist);
2549 av_store(comppadlist, 0, (SV*)PL_comppad_name);
2550 av_store(comppadlist, 1, (SV*)PL_comppad);
2551 CvPADLIST(PL_compcv) = comppadlist;
2553 if (!saveop || saveop->op_type != OP_REQUIRE)
2554 CvOUTSIDE(PL_compcv) = (CV*)SvREFCNT_inc(caller);
2556 SAVEFREESV(PL_compcv);
2558 /* make sure we compile in the right package */
2560 newstash = PL_curcop->cop_stash;
2561 if (PL_curstash != newstash) {
2562 SAVESPTR(PL_curstash);
2563 PL_curstash = newstash;
2565 SAVESPTR(PL_beginav);
2566 PL_beginav = newAV();
2567 SAVEFREESV(PL_beginav);
2569 /* try to compile it */
2571 PL_eval_root = Nullop;
2573 PL_curcop = &PL_compiling;
2574 PL_curcop->cop_arybase = 0;
2575 SvREFCNT_dec(PL_rs);
2576 PL_rs = newSVpv("\n", 1);
2577 if (saveop && saveop->op_flags & OPf_SPECIAL)
2581 if (yyparse() || PL_error_count || !PL_eval_root) {
2585 I32 optype = 0; /* Might be reset by POPEVAL. */
2590 op_free(PL_eval_root);
2591 PL_eval_root = Nullop;
2593 SP = PL_stack_base + POPMARK; /* pop original mark */
2595 POPBLOCK(cx,PL_curpm);
2601 if (optype == OP_REQUIRE) {
2602 char* msg = SvPVx(ERRSV, n_a);
2603 DIE("%s", *msg ? msg : "Compilation failed in require");
2604 } else if (startop) {
2605 char* msg = SvPVx(ERRSV, n_a);
2607 POPBLOCK(cx,PL_curpm);
2609 croak("%sCompilation failed in regexp", (*msg ? msg : "Unknown error\n"));
2611 SvREFCNT_dec(PL_rs);
2612 PL_rs = SvREFCNT_inc(PL_nrs);
2614 MUTEX_LOCK(&PL_eval_mutex);
2616 COND_SIGNAL(&PL_eval_cond);
2617 MUTEX_UNLOCK(&PL_eval_mutex);
2618 #endif /* USE_THREADS */
2621 SvREFCNT_dec(PL_rs);
2622 PL_rs = SvREFCNT_inc(PL_nrs);
2623 PL_compiling.cop_line = 0;
2625 *startop = PL_eval_root;
2626 SvREFCNT_dec(CvOUTSIDE(PL_compcv));
2627 CvOUTSIDE(PL_compcv) = Nullcv;
2629 SAVEFREEOP(PL_eval_root);
2631 scalarvoid(PL_eval_root);
2632 else if (gimme & G_ARRAY)
2635 scalar(PL_eval_root);
2637 DEBUG_x(dump_eval());
2639 /* Register with debugger: */
2640 if (PERLDB_INTER && saveop->op_type == OP_REQUIRE) {
2641 CV *cv = perl_get_cv("DB::postponed", FALSE);
2645 XPUSHs((SV*)PL_compiling.cop_filegv);
2647 perl_call_sv((SV*)cv, G_DISCARD);
2651 /* compiled okay, so do it */
2653 CvDEPTH(PL_compcv) = 1;
2654 SP = PL_stack_base + POPMARK; /* pop original mark */
2655 PL_op = saveop; /* The caller may need it. */
2657 MUTEX_LOCK(&PL_eval_mutex);
2659 COND_SIGNAL(&PL_eval_cond);
2660 MUTEX_UNLOCK(&PL_eval_mutex);
2661 #endif /* USE_THREADS */
2663 RETURNOP(PL_eval_start);
2669 register PERL_CONTEXT *cx;
2674 SV *namesv = Nullsv;
2676 I32 gimme = G_SCALAR;
2677 PerlIO *tryrsfp = 0;
2681 if (SvNIOKp(sv) && !SvPOKp(sv)) {
2682 SET_NUMERIC_STANDARD();
2683 if (atof(PL_patchlevel) + 0.00000999 < SvNV(sv))
2684 DIE("Perl %s required--this is only version %s, stopped",
2685 SvPV(sv,n_a),PL_patchlevel);
2688 name = SvPV(sv, len);
2689 if (!(name && len > 0 && *name))
2690 DIE("Null filename used");
2691 TAINT_PROPER("require");
2692 if (PL_op->op_type == OP_REQUIRE &&
2693 (svp = hv_fetch(GvHVn(PL_incgv), name, len, 0)) &&
2694 *svp != &PL_sv_undef)
2697 /* prepare to compile file */
2702 (name[1] == '.' && name[2] == '/')))
2704 || (name[0] && name[1] == ':')
2707 || (name[0] == '\\' && name[1] == '\\') /* UNC path */
2710 || (strchr(name,':') || ((*name == '[' || *name == '<') &&
2711 (isALNUM(name[1]) || strchr("$-_]>",name[1]))))
2716 tryrsfp = PerlIO_open(name,PERL_SCRIPT_MODE);
2719 AV *ar = GvAVn(PL_incgv);
2723 if ((unixname = tounixspec(name, Nullch)) != Nullch)
2726 namesv = NEWSV(806, 0);
2727 for (i = 0; i <= AvFILL(ar); i++) {
2728 char *dir = SvPVx(*av_fetch(ar, i, TRUE), n_a);
2731 if ((unixdir = tounixpath(dir, Nullch)) == Nullch)
2733 sv_setpv(namesv, unixdir);
2734 sv_catpv(namesv, unixname);
2736 sv_setpvf(namesv, "%s/%s", dir, name);
2738 TAINT_PROPER("require");
2739 tryname = SvPVX(namesv);
2740 tryrsfp = PerlIO_open(tryname, PERL_SCRIPT_MODE);
2742 if (tryname[0] == '.' && tryname[1] == '/')
2749 SAVESPTR(PL_compiling.cop_filegv);
2750 PL_compiling.cop_filegv = gv_fetchfile(tryrsfp ? tryname : name);
2751 SvREFCNT_dec(namesv);
2753 if (PL_op->op_type == OP_REQUIRE) {
2754 SV *msg = sv_2mortal(newSVpvf("Can't locate %s in @INC", name));
2755 SV *dirmsgsv = NEWSV(0, 0);
2756 AV *ar = GvAVn(PL_incgv);
2758 if (instr(SvPVX(msg), ".h "))
2759 sv_catpv(msg, " (change .h to .ph maybe?)");
2760 if (instr(SvPVX(msg), ".ph "))
2761 sv_catpv(msg, " (did you run h2ph?)");
2762 sv_catpv(msg, " (@INC contains:");
2763 for (i = 0; i <= AvFILL(ar); i++) {
2764 char *dir = SvPVx(*av_fetch(ar, i, TRUE), n_a);
2765 sv_setpvf(dirmsgsv, " %s", dir);
2766 sv_catsv(msg, dirmsgsv);
2768 sv_catpvn(msg, ")", 1);
2769 SvREFCNT_dec(dirmsgsv);
2776 SETERRNO(0, SS$_NORMAL);
2778 /* Assume success here to prevent recursive requirement. */
2779 (void)hv_store(GvHVn(PL_incgv), name, strlen(name),
2780 newSVsv(GvSV(PL_compiling.cop_filegv)), 0 );
2784 lex_start(sv_2mortal(newSVpv("",0)));
2785 SAVEGENERICSV(PL_rsfp_filters);
2786 PL_rsfp_filters = Nullav;
2789 name = savepv(name);
2793 SAVEPPTR(PL_compiling.cop_warnings);
2794 PL_compiling.cop_warnings = ((PL_dowarn & G_WARN_ALL_ON) ? WARN_ALL
2797 /* switch to eval mode */
2799 push_return(PL_op->op_next);
2800 PUSHBLOCK(cx, CXt_EVAL, SP);
2801 PUSHEVAL(cx, name, PL_compiling.cop_filegv);
2803 SAVEI16(PL_compiling.cop_line);
2804 PL_compiling.cop_line = 0;
2808 MUTEX_LOCK(&PL_eval_mutex);
2809 if (PL_eval_owner && PL_eval_owner != thr)
2810 while (PL_eval_owner)
2811 COND_WAIT(&PL_eval_cond, &PL_eval_mutex);
2812 PL_eval_owner = thr;
2813 MUTEX_UNLOCK(&PL_eval_mutex);
2814 #endif /* USE_THREADS */
2815 return DOCATCH(doeval(G_SCALAR, NULL));
2820 return pp_require(ARGS);
2826 register PERL_CONTEXT *cx;
2828 I32 gimme = GIMME_V, was = PL_sub_generation;
2829 char tmpbuf[TYPE_DIGITS(long) + 12];
2834 if (!SvPV(sv,len) || !len)
2836 TAINT_PROPER("eval");
2842 /* switch to eval mode */
2844 SAVESPTR(PL_compiling.cop_filegv);
2845 sprintf(tmpbuf, "_<(eval %lu)", (unsigned long)++PL_evalseq);
2846 PL_compiling.cop_filegv = gv_fetchfile(tmpbuf+2);
2847 PL_compiling.cop_line = 1;
2848 /* XXX For C<eval "...">s within BEGIN {} blocks, this ends up
2849 deleting the eval's FILEGV from the stash before gv_check() runs
2850 (i.e. before run-time proper). To work around the coredump that
2851 ensues, we always turn GvMULTI_on for any globals that were
2852 introduced within evals. See force_ident(). GSAR 96-10-12 */
2853 safestr = savepv(tmpbuf);
2854 SAVEDELETE(PL_defstash, safestr, strlen(safestr));
2856 PL_hints = PL_op->op_targ;
2857 SAVEPPTR(PL_compiling.cop_warnings);
2858 if (PL_compiling.cop_warnings != WARN_ALL
2859 && PL_compiling.cop_warnings != WARN_NONE){
2860 PL_compiling.cop_warnings = newSVsv(PL_compiling.cop_warnings) ;
2861 SAVEFREESV(PL_compiling.cop_warnings) ;
2864 push_return(PL_op->op_next);
2865 PUSHBLOCK(cx, (CXt_EVAL|CXp_REAL), SP);
2866 PUSHEVAL(cx, 0, PL_compiling.cop_filegv);
2868 /* prepare to compile string */
2870 if (PERLDB_LINE && PL_curstash != PL_debstash)
2871 save_lines(GvAV(PL_compiling.cop_filegv), PL_linestr);
2874 MUTEX_LOCK(&PL_eval_mutex);
2875 if (PL_eval_owner && PL_eval_owner != thr)
2876 while (PL_eval_owner)
2877 COND_WAIT(&PL_eval_cond, &PL_eval_mutex);
2878 PL_eval_owner = thr;
2879 MUTEX_UNLOCK(&PL_eval_mutex);
2880 #endif /* USE_THREADS */
2881 ret = doeval(gimme, NULL);
2882 if (PERLDB_INTER && was != PL_sub_generation /* Some subs defined here. */
2883 && ret != PL_op->op_next) { /* Successive compilation. */
2884 strcpy(safestr, "_<(eval )"); /* Anything fake and short. */
2886 return DOCATCH(ret);
2896 register PERL_CONTEXT *cx;
2898 U8 save_flags = PL_op -> op_flags;
2903 retop = pop_return();
2906 if (gimme == G_VOID)
2908 else if (gimme == G_SCALAR) {
2911 if (SvFLAGS(TOPs) & SVs_TEMP)
2914 *MARK = sv_mortalcopy(TOPs);
2918 *MARK = &PL_sv_undef;
2922 /* in case LEAVE wipes old return values */
2923 for (mark = newsp + 1; mark <= SP; mark++) {
2924 if (!(SvFLAGS(*mark) & SVs_TEMP)) {
2925 *mark = sv_mortalcopy(*mark);
2926 TAINT_NOT; /* Each item is independent */
2930 PL_curpm = newpm; /* Don't pop $1 et al till now */
2933 * Closures mentioned at top level of eval cannot be referenced
2934 * again, and their presence indirectly causes a memory leak.
2935 * (Note that the fact that compcv and friends are still set here
2936 * is, AFAIK, an accident.) --Chip
2938 if (AvFILLp(PL_comppad_name) >= 0) {
2939 SV **svp = AvARRAY(PL_comppad_name);
2941 for (ix = AvFILLp(PL_comppad_name); ix >= 0; ix--) {
2943 if (sv && sv != &PL_sv_undef && *SvPVX(sv) == '&') {
2945 svp[ix] = &PL_sv_undef;
2949 SvREFCNT_dec(CvOUTSIDE(sv));
2950 CvOUTSIDE(sv) = Nullcv;
2963 assert(CvDEPTH(PL_compcv) == 1);
2965 CvDEPTH(PL_compcv) = 0;
2968 if (optype == OP_REQUIRE &&
2969 !(gimme == G_SCALAR ? SvTRUE(*SP) : SP > newsp))
2971 /* Unassume the success we assumed earlier. */
2972 char *name = cx->blk_eval.old_name;
2973 (void)hv_delete(GvHVn(PL_incgv), name, strlen(name), G_DISCARD);
2974 retop = die("%s did not return a true value", name);
2975 /* die_where() did LEAVE, or we won't be here */
2979 if (!(save_flags & OPf_SPECIAL))
2989 register PERL_CONTEXT *cx;
2990 I32 gimme = GIMME_V;
2995 push_return(cLOGOP->op_other->op_next);
2996 PUSHBLOCK(cx, CXt_EVAL, SP);
2998 PL_eval_root = PL_op; /* Only needed so that goto works right. */
3003 return DOCATCH(PL_op->op_next);
3013 register PERL_CONTEXT *cx;
3021 if (gimme == G_VOID)
3023 else if (gimme == G_SCALAR) {
3026 if (SvFLAGS(TOPs) & (SVs_PADTMP|SVs_TEMP))
3029 *MARK = sv_mortalcopy(TOPs);
3033 *MARK = &PL_sv_undef;
3038 /* in case LEAVE wipes old return values */
3039 for (mark = newsp + 1; mark <= SP; mark++) {
3040 if (!(SvFLAGS(*mark) & (SVs_PADTMP|SVs_TEMP))) {
3041 *mark = sv_mortalcopy(*mark);
3042 TAINT_NOT; /* Each item is independent */
3046 PL_curpm = newpm; /* Don't pop $1 et al till now */
3057 register char *s = SvPV_force(sv, len);
3058 register char *send = s + len;
3059 register char *base;
3060 register I32 skipspaces = 0;
3063 bool postspace = FALSE;
3071 croak("Null picture in formline");
3073 New(804, fops, (send - s)*3+10, U16); /* Almost certainly too long... */
3078 *fpc++ = FF_LINEMARK;
3079 noblank = repeat = FALSE;
3097 case ' ': case '\t':
3108 *fpc++ = FF_LITERAL;
3116 *fpc++ = skipspaces;
3120 *fpc++ = FF_NEWLINE;
3124 arg = fpc - linepc + 1;
3131 *fpc++ = FF_LINEMARK;
3132 noblank = repeat = FALSE;
3141 ischop = s[-1] == '^';
3147 arg = (s - base) - 1;
3149 *fpc++ = FF_LITERAL;
3158 *fpc++ = FF_LINEGLOB;
3160 else if (*s == '#' || (*s == '.' && s[1] == '#')) {
3161 arg = ischop ? 512 : 0;
3171 arg |= 256 + (s - f);
3173 *fpc++ = s - base; /* fieldsize for FETCH */
3174 *fpc++ = FF_DECIMAL;
3179 bool ismore = FALSE;
3182 while (*++s == '>') ;
3183 prespace = FF_SPACE;
3185 else if (*s == '|') {
3186 while (*++s == '|') ;
3187 prespace = FF_HALFSPACE;
3192 while (*++s == '<') ;
3195 if (*s == '.' && s[1] == '.' && s[2] == '.') {
3199 *fpc++ = s - base; /* fieldsize for FETCH */
3201 *fpc++ = ischop ? FF_CHECKCHOP : FF_CHECKNL;
3219 { /* need to jump to the next word */
3221 z = WORD_ALIGN - SvCUR(sv) % WORD_ALIGN;
3222 SvGROW(sv, SvCUR(sv) + z + arg * sizeof(U16) + 4);
3223 s = SvPVX(sv) + SvCUR(sv) + z;
3225 Copy(fops, s, arg, U16);
3227 sv_magic(sv, Nullsv, 'f', Nullch, 0);
3232 * The rest of this file was derived from source code contributed
3235 * NOTE: this code was derived from Tom Horsley's qsort replacement
3236 * and should not be confused with the original code.
3239 /* Copyright (C) Tom Horsley, 1997. All rights reserved.
3241 Permission granted to distribute under the same terms as perl which are
3244 This program is free software; you can redistribute it and/or modify
3245 it under the terms of either:
3247 a) the GNU General Public License as published by the Free
3248 Software Foundation; either version 1, or (at your option) any
3251 b) the "Artistic License" which comes with this Kit.
3253 Details on the perl license can be found in the perl source code which
3254 may be located via the www.perl.com web page.
3256 This is the most wonderfulest possible qsort I can come up with (and
3257 still be mostly portable) My (limited) tests indicate it consistently
3258 does about 20% fewer calls to compare than does the qsort in the Visual
3259 C++ library, other vendors may vary.
3261 Some of the ideas in here can be found in "Algorithms" by Sedgewick,
3262 others I invented myself (or more likely re-invented since they seemed
3263 pretty obvious once I watched the algorithm operate for a while).
3265 Most of this code was written while watching the Marlins sweep the Giants
3266 in the 1997 National League Playoffs - no Braves fans allowed to use this
3267 code (just kidding :-).
3269 I realize that if I wanted to be true to the perl tradition, the only
3270 comment in this file would be something like:
3272 ...they shuffled back towards the rear of the line. 'No, not at the
3273 rear!' the slave-driver shouted. 'Three files up. And stay there...
3275 However, I really needed to violate that tradition just so I could keep
3276 track of what happens myself, not to mention some poor fool trying to
3277 understand this years from now :-).
3280 /* ********************************************************** Configuration */
3282 #ifndef QSORT_ORDER_GUESS
3283 #define QSORT_ORDER_GUESS 2 /* Select doubling version of the netBSD trick */
3286 /* QSORT_MAX_STACK is the largest number of partitions that can be stacked up for
3287 future processing - a good max upper bound is log base 2 of memory size
3288 (32 on 32 bit machines, 64 on 64 bit machines, etc). In reality can
3289 safely be smaller than that since the program is taking up some space and
3290 most operating systems only let you grab some subset of contiguous
3291 memory (not to mention that you are normally sorting data larger than
3292 1 byte element size :-).
3294 #ifndef QSORT_MAX_STACK
3295 #define QSORT_MAX_STACK 32
3298 /* QSORT_BREAK_EVEN is the size of the largest partition we should insertion sort.
3299 Anything bigger and we use qsort. If you make this too small, the qsort
3300 will probably break (or become less efficient), because it doesn't expect
3301 the middle element of a partition to be the same as the right or left -
3302 you have been warned).
3304 #ifndef QSORT_BREAK_EVEN
3305 #define QSORT_BREAK_EVEN 6
3308 /* ************************************************************* Data Types */
3310 /* hold left and right index values of a partition waiting to be sorted (the
3311 partition includes both left and right - right is NOT one past the end or
3312 anything like that).
3314 struct partition_stack_entry {
3317 #ifdef QSORT_ORDER_GUESS
3318 int qsort_break_even;
3322 /* ******************************************************* Shorthand Macros */
3324 /* Note that these macros will be used from inside the qsort function where
3325 we happen to know that the variable 'elt_size' contains the size of an
3326 array element and the variable 'temp' points to enough space to hold a
3327 temp element and the variable 'array' points to the array being sorted
3328 and 'compare' is the pointer to the compare routine.
3330 Also note that there are very many highly architecture specific ways
3331 these might be sped up, but this is simply the most generally portable
3332 code I could think of.
3335 /* Return < 0 == 0 or > 0 as the value of elt1 is < elt2, == elt2, > elt2
3338 #define qsort_cmp(elt1, elt2) \
3339 ((this->*compare)(array[elt1], array[elt2]))
3341 #define qsort_cmp(elt1, elt2) \
3342 ((*compare)(array[elt1], array[elt2]))
3345 #ifdef QSORT_ORDER_GUESS
3346 #define QSORT_NOTICE_SWAP swapped++;
3348 #define QSORT_NOTICE_SWAP
3351 /* swaps contents of array elements elt1, elt2.
3353 #define qsort_swap(elt1, elt2) \
3356 temp = array[elt1]; \
3357 array[elt1] = array[elt2]; \
3358 array[elt2] = temp; \
3361 /* rotate contents of elt1, elt2, elt3 such that elt1 gets elt2, elt2 gets
3362 elt3 and elt3 gets elt1.
3364 #define qsort_rotate(elt1, elt2, elt3) \
3367 temp = array[elt1]; \
3368 array[elt1] = array[elt2]; \
3369 array[elt2] = array[elt3]; \
3370 array[elt3] = temp; \
3373 /* ************************************************************ Debug stuff */
3380 return; /* good place to set a breakpoint */
3383 #define qsort_assert(t) (void)( (t) || (break_here(), 0) )
3386 doqsort_all_asserts(
3390 int (*compare)(const void * elt1, const void * elt2),
3391 int pc_left, int pc_right, int u_left, int u_right)
3395 qsort_assert(pc_left <= pc_right);
3396 qsort_assert(u_right < pc_left);
3397 qsort_assert(pc_right < u_left);
3398 for (i = u_right + 1; i < pc_left; ++i) {
3399 qsort_assert(qsort_cmp(i, pc_left) < 0);
3401 for (i = pc_left; i < pc_right; ++i) {
3402 qsort_assert(qsort_cmp(i, pc_right) == 0);
3404 for (i = pc_right + 1; i < u_left; ++i) {
3405 qsort_assert(qsort_cmp(pc_right, i) < 0);
3409 #define qsort_all_asserts(PC_LEFT, PC_RIGHT, U_LEFT, U_RIGHT) \
3410 doqsort_all_asserts(array, num_elts, elt_size, compare, \
3411 PC_LEFT, PC_RIGHT, U_LEFT, U_RIGHT)
3415 #define qsort_assert(t) ((void)0)
3417 #define qsort_all_asserts(PC_LEFT, PC_RIGHT, U_LEFT, U_RIGHT) ((void)0)
3421 /* ****************************************************************** qsort */
3425 qsortsv(SV ** array, size_t num_elts, SVCOMPARE compare)
3430 I32 (*compare)(SV *a, SV *b))
3435 struct partition_stack_entry partition_stack[QSORT_MAX_STACK];
3436 int next_stack_entry = 0;
3440 #ifdef QSORT_ORDER_GUESS
3441 int qsort_break_even;
3445 /* Make sure we actually have work to do.
3447 if (num_elts <= 1) {
3451 /* Setup the initial partition definition and fall into the sorting loop
3454 part_right = (int)(num_elts - 1);
3455 #ifdef QSORT_ORDER_GUESS
3456 qsort_break_even = QSORT_BREAK_EVEN;
3458 #define qsort_break_even QSORT_BREAK_EVEN
3461 if ((part_right - part_left) >= qsort_break_even) {
3462 /* OK, this is gonna get hairy, so lets try to document all the
3463 concepts and abbreviations and variables and what they keep
3466 pc: pivot chunk - the set of array elements we accumulate in the
3467 middle of the partition, all equal in value to the original
3468 pivot element selected. The pc is defined by:
3470 pc_left - the leftmost array index of the pc
3471 pc_right - the rightmost array index of the pc
3473 we start with pc_left == pc_right and only one element
3474 in the pivot chunk (but it can grow during the scan).
3476 u: uncompared elements - the set of elements in the partition
3477 we have not yet compared to the pivot value. There are two
3478 uncompared sets during the scan - one to the left of the pc
3479 and one to the right.
3481 u_right - the rightmost index of the left side's uncompared set
3482 u_left - the leftmost index of the right side's uncompared set
3484 The leftmost index of the left sides's uncompared set
3485 doesn't need its own variable because it is always defined
3486 by the leftmost edge of the whole partition (part_left). The
3487 same goes for the rightmost edge of the right partition
3490 We know there are no uncompared elements on the left once we
3491 get u_right < part_left and no uncompared elements on the
3492 right once u_left > part_right. When both these conditions
3493 are met, we have completed the scan of the partition.
3495 Any elements which are between the pivot chunk and the
3496 uncompared elements should be less than the pivot value on
3497 the left side and greater than the pivot value on the right
3498 side (in fact, the goal of the whole algorithm is to arrange
3499 for that to be true and make the groups of less-than and
3500 greater-then elements into new partitions to sort again).
3502 As you marvel at the complexity of the code and wonder why it
3503 has to be so confusing. Consider some of the things this level
3504 of confusion brings:
3506 Once I do a compare, I squeeze every ounce of juice out of it. I
3507 never do compare calls I don't have to do, and I certainly never
3510 I also never swap any elements unless I can prove there is a
3511 good reason. Many sort algorithms will swap a known value with
3512 an uncompared value just to get things in the right place (or
3513 avoid complexity :-), but that uncompared value, once it gets
3514 compared, may then have to be swapped again. A lot of the
3515 complexity of this code is due to the fact that it never swaps
3516 anything except compared values, and it only swaps them when the
3517 compare shows they are out of position.
3519 int pc_left, pc_right;
3520 int u_right, u_left;
3524 pc_left = ((part_left + part_right) / 2);
3526 u_right = pc_left - 1;
3527 u_left = pc_right + 1;
3529 /* Qsort works best when the pivot value is also the median value
3530 in the partition (unfortunately you can't find the median value
3531 without first sorting :-), so to give the algorithm a helping
3532 hand, we pick 3 elements and sort them and use the median value
3533 of that tiny set as the pivot value.
3535 Some versions of qsort like to use the left middle and right as
3536 the 3 elements to sort so they can insure the ends of the
3537 partition will contain values which will stop the scan in the
3538 compare loop, but when you have to call an arbitrarily complex
3539 routine to do a compare, its really better to just keep track of
3540 array index values to know when you hit the edge of the
3541 partition and avoid the extra compare. An even better reason to
3542 avoid using a compare call is the fact that you can drop off the
3543 edge of the array if someone foolishly provides you with an
3544 unstable compare function that doesn't always provide consistent
3547 So, since it is simpler for us to compare the three adjacent
3548 elements in the middle of the partition, those are the ones we
3549 pick here (conveniently pointed at by u_right, pc_left, and
3550 u_left). The values of the left, center, and right elements
3551 are refered to as l c and r in the following comments.
3554 #ifdef QSORT_ORDER_GUESS
3557 s = qsort_cmp(u_right, pc_left);
3560 s = qsort_cmp(pc_left, u_left);
3561 /* if l < c, c < r - already in order - nothing to do */
3563 /* l < c, c == r - already in order, pc grows */
3565 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3567 /* l < c, c > r - need to know more */
3568 s = qsort_cmp(u_right, u_left);
3570 /* l < c, c > r, l < r - swap c & r to get ordered */
3571 qsort_swap(pc_left, u_left);
3572 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3573 } else if (s == 0) {
3574 /* l < c, c > r, l == r - swap c&r, grow pc */
3575 qsort_swap(pc_left, u_left);
3577 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3579 /* l < c, c > r, l > r - make lcr into rlc to get ordered */
3580 qsort_rotate(pc_left, u_right, u_left);
3581 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3584 } else if (s == 0) {
3586 s = qsort_cmp(pc_left, u_left);
3588 /* l == c, c < r - already in order, grow pc */
3590 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3591 } else if (s == 0) {
3592 /* l == c, c == r - already in order, grow pc both ways */
3595 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3597 /* l == c, c > r - swap l & r, grow pc */
3598 qsort_swap(u_right, u_left);
3600 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3604 s = qsort_cmp(pc_left, u_left);
3606 /* l > c, c < r - need to know more */
3607 s = qsort_cmp(u_right, u_left);
3609 /* l > c, c < r, l < r - swap l & c to get ordered */
3610 qsort_swap(u_right, pc_left);
3611 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3612 } else if (s == 0) {
3613 /* l > c, c < r, l == r - swap l & c, grow pc */
3614 qsort_swap(u_right, pc_left);
3616 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3618 /* l > c, c < r, l > r - rotate lcr into crl to order */
3619 qsort_rotate(u_right, pc_left, u_left);
3620 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3622 } else if (s == 0) {
3623 /* l > c, c == r - swap ends, grow pc */
3624 qsort_swap(u_right, u_left);
3626 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3628 /* l > c, c > r - swap ends to get in order */
3629 qsort_swap(u_right, u_left);
3630 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3633 /* We now know the 3 middle elements have been compared and
3634 arranged in the desired order, so we can shrink the uncompared
3639 qsort_all_asserts(pc_left, pc_right, u_left, u_right);
3641 /* The above massive nested if was the simple part :-). We now have
3642 the middle 3 elements ordered and we need to scan through the
3643 uncompared sets on either side, swapping elements that are on
3644 the wrong side or simply shuffling equal elements around to get
3645 all equal elements into the pivot chunk.
3649 int still_work_on_left;
3650 int still_work_on_right;
3652 /* Scan the uncompared values on the left. If I find a value
3653 equal to the pivot value, move it over so it is adjacent to
3654 the pivot chunk and expand the pivot chunk. If I find a value
3655 less than the pivot value, then just leave it - its already
3656 on the correct side of the partition. If I find a greater
3657 value, then stop the scan.
3659 while (still_work_on_left = (u_right >= part_left)) {
3660 s = qsort_cmp(u_right, pc_left);
3663 } else if (s == 0) {
3665 if (pc_left != u_right) {
3666 qsort_swap(u_right, pc_left);
3672 qsort_assert(u_right < pc_left);
3673 qsort_assert(pc_left <= pc_right);
3674 qsort_assert(qsort_cmp(u_right + 1, pc_left) <= 0);
3675 qsort_assert(qsort_cmp(pc_left, pc_right) == 0);
3678 /* Do a mirror image scan of uncompared values on the right
3680 while (still_work_on_right = (u_left <= part_right)) {
3681 s = qsort_cmp(pc_right, u_left);
3684 } else if (s == 0) {
3686 if (pc_right != u_left) {
3687 qsort_swap(pc_right, u_left);
3693 qsort_assert(u_left > pc_right);
3694 qsort_assert(pc_left <= pc_right);
3695 qsort_assert(qsort_cmp(pc_right, u_left - 1) <= 0);
3696 qsort_assert(qsort_cmp(pc_left, pc_right) == 0);
3699 if (still_work_on_left) {
3700 /* I know I have a value on the left side which needs to be
3701 on the right side, but I need to know more to decide
3702 exactly the best thing to do with it.
3704 if (still_work_on_right) {
3705 /* I know I have values on both side which are out of
3706 position. This is a big win because I kill two birds
3707 with one swap (so to speak). I can advance the
3708 uncompared pointers on both sides after swapping both
3709 of them into the right place.
3711 qsort_swap(u_right, u_left);
3714 qsort_all_asserts(pc_left, pc_right, u_left, u_right);
3716 /* I have an out of position value on the left, but the
3717 right is fully scanned, so I "slide" the pivot chunk
3718 and any less-than values left one to make room for the
3719 greater value over on the right. If the out of position
3720 value is immediately adjacent to the pivot chunk (there
3721 are no less-than values), I can do that with a swap,
3722 otherwise, I have to rotate one of the less than values
3723 into the former position of the out of position value
3724 and the right end of the pivot chunk into the left end
3728 if (pc_left == u_right) {
3729 qsort_swap(u_right, pc_right);
3730 qsort_all_asserts(pc_left, pc_right-1, u_left, u_right-1);
3732 qsort_rotate(u_right, pc_left, pc_right);
3733 qsort_all_asserts(pc_left, pc_right-1, u_left, u_right-1);
3738 } else if (still_work_on_right) {
3739 /* Mirror image of complex case above: I have an out of
3740 position value on the right, but the left is fully
3741 scanned, so I need to shuffle things around to make room
3742 for the right value on the left.
3745 if (pc_right == u_left) {
3746 qsort_swap(u_left, pc_left);
3747 qsort_all_asserts(pc_left+1, pc_right, u_left+1, u_right);
3749 qsort_rotate(pc_right, pc_left, u_left);
3750 qsort_all_asserts(pc_left+1, pc_right, u_left+1, u_right);
3755 /* No more scanning required on either side of partition,
3756 break out of loop and figure out next set of partitions
3762 /* The elements in the pivot chunk are now in the right place. They
3763 will never move or be compared again. All I have to do is decide
3764 what to do with the stuff to the left and right of the pivot
3767 Notes on the QSORT_ORDER_GUESS ifdef code:
3769 1. If I just built these partitions without swapping any (or
3770 very many) elements, there is a chance that the elements are
3771 already ordered properly (being properly ordered will
3772 certainly result in no swapping, but the converse can't be
3775 2. A (properly written) insertion sort will run faster on
3776 already ordered data than qsort will.
3778 3. Perhaps there is some way to make a good guess about
3779 switching to an insertion sort earlier than partition size 6
3780 (for instance - we could save the partition size on the stack
3781 and increase the size each time we find we didn't swap, thus
3782 switching to insertion sort earlier for partitions with a
3783 history of not swapping).
3785 4. Naturally, if I just switch right away, it will make
3786 artificial benchmarks with pure ascending (or descending)
3787 data look really good, but is that a good reason in general?
3791 #ifdef QSORT_ORDER_GUESS
3793 #if QSORT_ORDER_GUESS == 1
3794 qsort_break_even = (part_right - part_left) + 1;
3796 #if QSORT_ORDER_GUESS == 2
3797 qsort_break_even *= 2;
3799 #if QSORT_ORDER_GUESS == 3
3800 int prev_break = qsort_break_even;
3801 qsort_break_even *= qsort_break_even;
3802 if (qsort_break_even < prev_break) {
3803 qsort_break_even = (part_right - part_left) + 1;
3807 qsort_break_even = QSORT_BREAK_EVEN;
3811 if (part_left < pc_left) {
3812 /* There are elements on the left which need more processing.
3813 Check the right as well before deciding what to do.
3815 if (pc_right < part_right) {
3816 /* We have two partitions to be sorted. Stack the biggest one
3817 and process the smallest one on the next iteration. This
3818 minimizes the stack height by insuring that any additional
3819 stack entries must come from the smallest partition which
3820 (because it is smallest) will have the fewest
3821 opportunities to generate additional stack entries.
3823 if ((part_right - pc_right) > (pc_left - part_left)) {
3824 /* stack the right partition, process the left */
3825 partition_stack[next_stack_entry].left = pc_right + 1;
3826 partition_stack[next_stack_entry].right = part_right;
3827 #ifdef QSORT_ORDER_GUESS
3828 partition_stack[next_stack_entry].qsort_break_even = qsort_break_even;
3830 part_right = pc_left - 1;
3832 /* stack the left partition, process the right */
3833 partition_stack[next_stack_entry].left = part_left;
3834 partition_stack[next_stack_entry].right = pc_left - 1;
3835 #ifdef QSORT_ORDER_GUESS
3836 partition_stack[next_stack_entry].qsort_break_even = qsort_break_even;
3838 part_left = pc_right + 1;
3840 qsort_assert(next_stack_entry < QSORT_MAX_STACK);
3843 /* The elements on the left are the only remaining elements
3844 that need sorting, arrange for them to be processed as the
3847 part_right = pc_left - 1;
3849 } else if (pc_right < part_right) {
3850 /* There is only one chunk on the right to be sorted, make it
3851 the new partition and loop back around.
3853 part_left = pc_right + 1;
3855 /* This whole partition wound up in the pivot chunk, so
3856 we need to get a new partition off the stack.
3858 if (next_stack_entry == 0) {
3859 /* the stack is empty - we are done */
3863 part_left = partition_stack[next_stack_entry].left;
3864 part_right = partition_stack[next_stack_entry].right;
3865 #ifdef QSORT_ORDER_GUESS
3866 qsort_break_even = partition_stack[next_stack_entry].qsort_break_even;
3870 /* This partition is too small to fool with qsort complexity, just
3871 do an ordinary insertion sort to minimize overhead.
3874 /* Assume 1st element is in right place already, and start checking
3875 at 2nd element to see where it should be inserted.
3877 for (i = part_left + 1; i <= part_right; ++i) {
3879 /* Scan (backwards - just in case 'i' is already in right place)
3880 through the elements already sorted to see if the ith element
3881 belongs ahead of one of them.
3883 for (j = i - 1; j >= part_left; --j) {
3884 if (qsort_cmp(i, j) >= 0) {
3885 /* i belongs right after j
3892 /* Looks like we really need to move some things
3896 for (k = i - 1; k >= j; --k)
3897 array[k + 1] = array[k];
3902 /* That partition is now sorted, grab the next one, or get out
3903 of the loop if there aren't any more.
3906 if (next_stack_entry == 0) {
3907 /* the stack is empty - we are done */
3911 part_left = partition_stack[next_stack_entry].left;
3912 part_right = partition_stack[next_stack_entry].right;
3913 #ifdef QSORT_ORDER_GUESS
3914 qsort_break_even = partition_stack[next_stack_entry].qsort_break_even;
3919 /* Believe it or not, the array is sorted at this point! */