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.
20 #define PERL_IN_PP_CTL_C
24 #define WORD_ALIGN sizeof(U16)
27 #define DOCATCH(o) ((CATCH_GET == TRUE) ? docatch(o) : (o))
30 #define CALLOP this->*PL_op
41 cxix = dopoptosub(cxstack_ix);
45 switch (cxstack[cxix].blk_gimme) {
62 /* XXXX Should store the old value to allow for tie/overload - and
63 restore in regcomp, where marked with XXXX. */
71 register PMOP *pm = (PMOP*)cLOGOP->op_other;
75 MAGIC *mg = Null(MAGIC*);
79 SV *sv = SvRV(tmpstr);
81 mg = mg_find(sv, 'r');
84 regexp *re = (regexp *)mg->mg_obj;
85 ReREFCNT_dec(pm->op_pmregexp);
86 pm->op_pmregexp = ReREFCNT_inc(re);
89 t = SvPV(tmpstr, len);
91 /* Check against the last compiled regexp. */
92 if (!pm->op_pmregexp || !pm->op_pmregexp->precomp ||
93 pm->op_pmregexp->prelen != len ||
94 memNE(pm->op_pmregexp->precomp, t, len))
96 if (pm->op_pmregexp) {
97 ReREFCNT_dec(pm->op_pmregexp);
98 pm->op_pmregexp = Null(REGEXP*); /* crucial if regcomp aborts */
100 if (PL_op->op_flags & OPf_SPECIAL)
101 PL_reginterp_cnt = I32_MAX; /* Mark as safe. */
103 pm->op_pmflags = pm->op_pmpermflags; /* reset case sensitivity */
104 pm->op_pmregexp = CALLREGCOMP(aTHX_ t, t + len, pm);
105 PL_reginterp_cnt = 0; /* XXXX Be extra paranoid - needed
106 inside tie/overload accessors. */
110 #ifndef INCOMPLETE_TAINTS
113 pm->op_pmdynflags |= PMdf_TAINTED;
115 pm->op_pmdynflags &= ~PMdf_TAINTED;
119 if (!pm->op_pmregexp->prelen && PL_curpm)
121 else if (strEQ("\\s+", pm->op_pmregexp->precomp))
122 pm->op_pmflags |= PMf_WHITE;
124 if (pm->op_pmflags & PMf_KEEP) {
125 pm->op_private &= ~OPpRUNTIME; /* no point compiling again */
126 cLOGOP->op_first->op_next = PL_op->op_next;
134 register PMOP *pm = (PMOP*) cLOGOP->op_other;
135 register PERL_CONTEXT *cx = &cxstack[cxstack_ix];
136 register SV *dstr = cx->sb_dstr;
137 register char *s = cx->sb_s;
138 register char *m = cx->sb_m;
139 char *orig = cx->sb_orig;
140 register REGEXP *rx = cx->sb_rx;
142 rxres_restore(&cx->sb_rxres, rx);
144 if (cx->sb_iters++) {
145 if (cx->sb_iters > cx->sb_maxiters)
146 DIE(aTHX_ "Substitution loop");
148 if (!(cx->sb_rxtainted & 2) && SvTAINTED(TOPs))
149 cx->sb_rxtainted |= 2;
150 sv_catsv(dstr, POPs);
153 if (cx->sb_once || !CALLREGEXEC(aTHX_ rx, s, cx->sb_strend, orig,
154 s == m, cx->sb_targ, NULL,
155 ((cx->sb_rflags & REXEC_COPY_STR)
156 ? (REXEC_IGNOREPOS|REXEC_NOT_FIRST)
157 : (REXEC_COPY_STR|REXEC_IGNOREPOS|REXEC_NOT_FIRST))))
159 SV *targ = cx->sb_targ;
160 sv_catpvn(dstr, s, cx->sb_strend - s);
162 cx->sb_rxtainted |= RX_MATCH_TAINTED(rx);
164 (void)SvOOK_off(targ);
165 Safefree(SvPVX(targ));
166 SvPVX(targ) = SvPVX(dstr);
167 SvCUR_set(targ, SvCUR(dstr));
168 SvLEN_set(targ, SvLEN(dstr));
172 TAINT_IF(cx->sb_rxtainted & 1);
173 PUSHs(sv_2mortal(newSViv((I32)cx->sb_iters - 1)));
175 (void)SvPOK_only(targ);
176 TAINT_IF(cx->sb_rxtainted);
180 LEAVE_SCOPE(cx->sb_oldsave);
182 RETURNOP(pm->op_next);
185 if (RX_MATCH_COPIED(rx) && rx->subbeg != orig) {
188 cx->sb_orig = orig = rx->subbeg;
190 cx->sb_strend = s + (cx->sb_strend - m);
192 cx->sb_m = m = rx->startp[0] + orig;
193 sv_catpvn(dstr, s, m-s);
194 cx->sb_s = rx->endp[0] + orig;
195 cx->sb_rxtainted |= RX_MATCH_TAINTED(rx);
196 rxres_save(&cx->sb_rxres, rx);
197 RETURNOP(pm->op_pmreplstart);
201 Perl_rxres_save(pTHX_ void **rsp, REGEXP *rx)
206 if (!p || p[1] < rx->nparens) {
207 i = 6 + rx->nparens * 2;
215 *p++ = (UV)(RX_MATCH_COPIED(rx) ? rx->subbeg : Nullch);
216 RX_MATCH_COPIED_off(rx);
220 *p++ = (UV)rx->subbeg;
221 *p++ = (UV)rx->sublen;
222 for (i = 0; i <= rx->nparens; ++i) {
223 *p++ = (UV)rx->startp[i];
224 *p++ = (UV)rx->endp[i];
229 Perl_rxres_restore(pTHX_ void **rsp, REGEXP *rx)
234 if (RX_MATCH_COPIED(rx))
235 Safefree(rx->subbeg);
236 RX_MATCH_COPIED_set(rx, *p);
241 rx->subbeg = (char*)(*p++);
242 rx->sublen = (I32)(*p++);
243 for (i = 0; i <= rx->nparens; ++i) {
244 rx->startp[i] = (I32)(*p++);
245 rx->endp[i] = (I32)(*p++);
250 Perl_rxres_free(pTHX_ void **rsp)
255 Safefree((char*)(*p));
263 djSP; dMARK; dORIGMARK;
264 register SV *tmpForm = *++MARK;
276 bool chopspace = (strchr(PL_chopset, ' ') != Nullch);
282 STRLEN fudge = SvCUR(tmpForm) * (IN_UTF8 ? 3 : 1) + 1;
284 if (!SvMAGICAL(tmpForm) || !SvCOMPILED(tmpForm)) {
285 SvREADONLY_off(tmpForm);
286 doparseform(tmpForm);
289 SvPV_force(PL_formtarget, len);
290 t = SvGROW(PL_formtarget, len + fudge + 1); /* XXX SvCUR bad */
292 f = SvPV(tmpForm, len);
293 /* need to jump to the next word */
294 s = f + len + WORD_ALIGN - SvCUR(tmpForm) % WORD_ALIGN;
303 case FF_LITERAL: arg = fpc[1]; name = "LITERAL"; break;
304 case FF_BLANK: arg = fpc[1]; name = "BLANK"; break;
305 case FF_SKIP: arg = fpc[1]; name = "SKIP"; break;
306 case FF_FETCH: arg = fpc[1]; name = "FETCH"; break;
307 case FF_DECIMAL: arg = fpc[1]; name = "DECIMAL"; break;
309 case FF_CHECKNL: name = "CHECKNL"; break;
310 case FF_CHECKCHOP: name = "CHECKCHOP"; break;
311 case FF_SPACE: name = "SPACE"; break;
312 case FF_HALFSPACE: name = "HALFSPACE"; break;
313 case FF_ITEM: name = "ITEM"; break;
314 case FF_CHOP: name = "CHOP"; break;
315 case FF_LINEGLOB: name = "LINEGLOB"; break;
316 case FF_NEWLINE: name = "NEWLINE"; break;
317 case FF_MORE: name = "MORE"; break;
318 case FF_LINEMARK: name = "LINEMARK"; break;
319 case FF_END: name = "END"; break;
322 PerlIO_printf(PerlIO_stderr(), "%-16s%ld\n", name, (long) arg);
324 PerlIO_printf(PerlIO_stderr(), "%-16s\n", name);
352 if (ckWARN(WARN_SYNTAX))
353 Perl_warner(aTHX_ WARN_SYNTAX, "Not enough format arguments");
358 item = s = SvPV(sv, len);
361 itemsize = sv_len_utf8(sv);
362 if (itemsize != len) {
364 if (itemsize > fieldsize) {
365 itemsize = fieldsize;
366 itembytes = itemsize;
367 sv_pos_u2b(sv, &itembytes, 0);
371 send = chophere = s + itembytes;
380 sv_pos_b2u(sv, &itemsize);
384 if (itemsize > fieldsize)
385 itemsize = fieldsize;
386 send = chophere = s + itemsize;
398 item = s = SvPV(sv, len);
401 itemsize = sv_len_utf8(sv);
402 if (itemsize != len) {
404 if (itemsize <= fieldsize) {
405 send = chophere = s + itemsize;
416 itemsize = fieldsize;
417 itembytes = itemsize;
418 sv_pos_u2b(sv, &itembytes, 0);
419 send = chophere = s + itembytes;
420 while (s < send || (s == send && isSPACE(*s))) {
430 if (strchr(PL_chopset, *s))
435 itemsize = chophere - item;
436 sv_pos_b2u(sv, &itemsize);
441 if (itemsize <= fieldsize) {
442 send = chophere = s + itemsize;
453 itemsize = fieldsize;
454 send = chophere = s + itemsize;
455 while (s < send || (s == send && isSPACE(*s))) {
465 if (strchr(PL_chopset, *s))
470 itemsize = chophere - item;
475 arg = fieldsize - itemsize;
484 arg = fieldsize - itemsize;
499 switch (UTF8SKIP(s)) {
510 if ( !((*t++ = *s++) & ~31) )
518 int ch = *t++ = *s++;
521 if ( !((*t++ = *s++) & ~31) )
530 while (*s && isSPACE(*s))
537 item = s = SvPV(sv, len);
550 SvCUR_set(PL_formtarget, t - SvPVX(PL_formtarget));
551 sv_catpvn(PL_formtarget, item, itemsize);
552 SvGROW(PL_formtarget, SvCUR(PL_formtarget) + fudge + 1);
553 t = SvPVX(PL_formtarget) + SvCUR(PL_formtarget);
558 /* If the field is marked with ^ and the value is undefined,
561 if ((arg & 512) && !SvOK(sv)) {
569 /* Formats aren't yet marked for locales, so assume "yes". */
571 RESTORE_NUMERIC_LOCAL();
572 #if defined(USE_LONG_DOUBLE)
574 sprintf(t, "%#*.*Lf",
575 (int) fieldsize, (int) arg & 255, value);
577 sprintf(t, "%*.0Lf", (int) fieldsize, value);
582 (int) fieldsize, (int) arg & 255, value);
585 (int) fieldsize, value);
588 RESTORE_NUMERIC_STANDARD();
595 while (t-- > linemark && *t == ' ') ;
603 if (arg) { /* repeat until fields exhausted? */
605 SvCUR_set(PL_formtarget, t - SvPVX(PL_formtarget));
606 lines += FmLINES(PL_formtarget);
609 if (strnEQ(linemark, linemark - arg, arg))
610 DIE(aTHX_ "Runaway format");
612 FmLINES(PL_formtarget) = lines;
614 RETURNOP(cLISTOP->op_first);
627 while (*s && isSPACE(*s) && s < send)
631 arg = fieldsize - itemsize;
638 if (strnEQ(s," ",3)) {
639 while (s > SvPVX(PL_formtarget) && isSPACE(s[-1]))
650 SvCUR_set(PL_formtarget, t - SvPVX(PL_formtarget));
651 FmLINES(PL_formtarget) += lines;
663 if (PL_stack_base + *PL_markstack_ptr == SP) {
665 if (GIMME_V == G_SCALAR)
666 XPUSHs(sv_2mortal(newSViv(0)));
667 RETURNOP(PL_op->op_next->op_next);
669 PL_stack_sp = PL_stack_base + *PL_markstack_ptr + 1;
670 pp_pushmark(); /* push dst */
671 pp_pushmark(); /* push src */
672 ENTER; /* enter outer scope */
675 /* SAVE_DEFSV does *not* suffice here for USE_THREADS */
677 ENTER; /* enter inner scope */
680 src = PL_stack_base[*PL_markstack_ptr];
685 if (PL_op->op_type == OP_MAPSTART)
686 pp_pushmark(); /* push top */
687 return ((LOGOP*)PL_op->op_next)->op_other;
692 DIE(aTHX_ "panic: mapstart"); /* uses grepstart */
698 I32 diff = (SP - PL_stack_base) - *PL_markstack_ptr;
704 ++PL_markstack_ptr[-1];
706 if (diff > PL_markstack_ptr[-1] - PL_markstack_ptr[-2]) {
707 shift = diff - (PL_markstack_ptr[-1] - PL_markstack_ptr[-2]);
708 count = (SP - PL_stack_base) - PL_markstack_ptr[-1] + 2;
713 PL_markstack_ptr[-1] += shift;
714 *PL_markstack_ptr += shift;
718 dst = PL_stack_base + (PL_markstack_ptr[-2] += diff) - 1;
721 *dst-- = SvTEMP(TOPs) ? POPs : sv_mortalcopy(POPs);
723 LEAVE; /* exit inner scope */
726 if (PL_markstack_ptr[-1] > *PL_markstack_ptr) {
730 (void)POPMARK; /* pop top */
731 LEAVE; /* exit outer scope */
732 (void)POPMARK; /* pop src */
733 items = --*PL_markstack_ptr - PL_markstack_ptr[-1];
734 (void)POPMARK; /* pop dst */
735 SP = PL_stack_base + POPMARK; /* pop original mark */
736 if (gimme == G_SCALAR) {
740 else if (gimme == G_ARRAY)
747 ENTER; /* enter inner scope */
750 src = PL_stack_base[PL_markstack_ptr[-1]];
754 RETURNOP(cLOGOP->op_other);
759 S_sv_ncmp(pTHX_ SV *a, SV *b)
763 return nv1 < nv2 ? -1 : nv1 > nv2 ? 1 : 0;
767 S_sv_i_ncmp(pTHX_ SV *a, SV *b)
771 return iv1 < iv2 ? -1 : iv1 > iv2 ? 1 : 0;
773 #define tryCALL_AMAGICbin(left,right,meth,svp) STMT_START { \
775 if (PL_amagic_generation) { \
776 if (SvAMAGIC(left)||SvAMAGIC(right))\
777 *svp = amagic_call(left, \
785 S_amagic_ncmp(pTHX_ register SV *a, register SV *b)
788 tryCALL_AMAGICbin(a,b,ncmp,&tmpsv);
793 I32 i = SvIVX(tmpsv);
803 return sv_ncmp(a, b);
807 S_amagic_i_ncmp(pTHX_ register SV *a, register SV *b)
810 tryCALL_AMAGICbin(a,b,ncmp,&tmpsv);
815 I32 i = SvIVX(tmpsv);
825 return sv_i_ncmp(a, b);
829 S_amagic_cmp(pTHX_ register SV *str1, register SV *str2)
832 tryCALL_AMAGICbin(str1,str2,scmp,&tmpsv);
837 I32 i = SvIVX(tmpsv);
847 return sv_cmp(str1, str2);
851 S_amagic_cmp_locale(pTHX_ register SV *str1, register SV *str2)
854 tryCALL_AMAGICbin(str1,str2,scmp,&tmpsv);
859 I32 i = SvIVX(tmpsv);
869 return sv_cmp_locale(str1, str2);
874 djSP; dMARK; dORIGMARK;
876 SV **myorigmark = ORIGMARK;
882 OP* nextop = PL_op->op_next;
885 if (gimme != G_ARRAY) {
891 SAVEPPTR(PL_sortcop);
892 if (PL_op->op_flags & OPf_STACKED) {
893 if (PL_op->op_flags & OPf_SPECIAL) {
894 OP *kid = cLISTOP->op_first->op_sibling; /* pass pushmark */
895 kid = kUNOP->op_first; /* pass rv2gv */
896 kid = kUNOP->op_first; /* pass leave */
897 PL_sortcop = kid->op_next;
898 stash = PL_curcop->cop_stash;
901 cv = sv_2cv(*++MARK, &stash, &gv, 0);
902 if (!(cv && CvROOT(cv))) {
904 SV *tmpstr = sv_newmortal();
905 gv_efullname3(tmpstr, gv, Nullch);
906 if (cv && CvXSUB(cv))
907 DIE(aTHX_ "Xsub \"%s\" called in sort", SvPVX(tmpstr));
908 DIE(aTHX_ "Undefined sort subroutine \"%s\" called",
913 DIE(aTHX_ "Xsub called in sort");
914 DIE(aTHX_ "Undefined subroutine in sort");
916 DIE(aTHX_ "Not a CODE reference in sort");
918 PL_sortcop = CvSTART(cv);
919 SAVESPTR(CvROOT(cv)->op_ppaddr);
920 CvROOT(cv)->op_ppaddr = PL_ppaddr[OP_NULL];
923 PL_curpad = AvARRAY((AV*)AvARRAY(CvPADLIST(cv))[1]);
928 stash = PL_curcop->cop_stash;
932 while (MARK < SP) { /* This may or may not shift down one here. */
934 if (*up = *++MARK) { /* Weed out nulls. */
936 if (!PL_sortcop && !SvPOK(*up)) {
941 (void)sv_2pv(*up, &n_a);
946 max = --up - myorigmark;
951 bool oldcatch = CATCH_GET;
957 PUSHSTACKi(PERLSI_SORT);
958 if (PL_sortstash != stash) {
959 PL_firstgv = gv_fetchpv("a", TRUE, SVt_PV);
960 PL_secondgv = gv_fetchpv("b", TRUE, SVt_PV);
961 PL_sortstash = stash;
964 SAVESPTR(GvSV(PL_firstgv));
965 SAVESPTR(GvSV(PL_secondgv));
967 PUSHBLOCK(cx, CXt_NULL, PL_stack_base);
968 if (!(PL_op->op_flags & OPf_SPECIAL)) {
969 bool hasargs = FALSE;
970 cx->cx_type = CXt_SUB;
971 cx->blk_gimme = G_SCALAR;
974 (void)SvREFCNT_inc(cv); /* in preparation for POPSUB */
976 PL_sortcxix = cxstack_ix;
977 qsortsv((myorigmark+1), max, FUNC_NAME_TO_PTR(S_sortcv));
979 POPBLOCK(cx,PL_curpm);
987 MEXTEND(SP, 20); /* Can't afford stack realloc on signal. */
988 qsortsv(ORIGMARK+1, max,
989 (PL_op->op_private & OPpSORT_NUMERIC)
990 ? ( (PL_op->op_private & OPpSORT_INTEGER)
992 ? FUNC_NAME_TO_PTR(S_amagic_i_ncmp)
993 : FUNC_NAME_TO_PTR(S_sv_i_ncmp))
995 ? FUNC_NAME_TO_PTR(S_amagic_ncmp)
996 : FUNC_NAME_TO_PTR(S_sv_ncmp)))
997 : ( (PL_op->op_private & OPpLOCALE)
999 ? FUNC_NAME_TO_PTR(S_amagic_cmp_locale)
1000 : FUNC_NAME_TO_PTR(Perl_sv_cmp_locale))
1002 ? FUNC_NAME_TO_PTR(S_amagic_cmp)
1003 : FUNC_NAME_TO_PTR(Perl_sv_cmp) )));
1004 if (PL_op->op_private & OPpSORT_REVERSE) {
1005 SV **p = ORIGMARK+1;
1006 SV **q = ORIGMARK+max;
1016 PL_stack_sp = ORIGMARK + max;
1024 if (GIMME == G_ARRAY)
1025 return cCONDOP->op_true;
1026 if (SvTRUEx(PAD_SV(PL_op->op_targ)))
1027 return cCONDOP->op_false;
1029 return cCONDOP->op_true;
1036 if (GIMME == G_ARRAY) {
1037 RETURNOP(((CONDOP*)cUNOP->op_first)->op_false);
1041 SV *targ = PAD_SV(PL_op->op_targ);
1043 if ((PL_op->op_private & OPpFLIP_LINENUM)
1044 ? (PL_last_in_gv && SvIV(sv) == (IV)IoLINES(GvIOp(PL_last_in_gv)))
1046 sv_setiv(PAD_SV(cUNOP->op_first->op_targ), 1);
1047 if (PL_op->op_flags & OPf_SPECIAL) {
1055 RETURNOP(((CONDOP*)cUNOP->op_first)->op_false);
1068 if (GIMME == G_ARRAY) {
1074 if (SvGMAGICAL(left))
1076 if (SvGMAGICAL(right))
1079 if (SvNIOKp(left) || !SvPOKp(left) ||
1080 (looks_like_number(left) && *SvPVX(left) != '0') )
1082 if (SvNV(left) < IV_MIN || SvNV(right) > IV_MAX)
1083 Perl_croak(aTHX_ "Range iterator outside integer range");
1094 sv = sv_2mortal(newSViv(i++));
1099 SV *final = sv_mortalcopy(right);
1101 char *tmps = SvPV(final, len);
1103 sv = sv_mortalcopy(left);
1105 while (!SvNIOKp(sv) && SvCUR(sv) <= len) {
1107 if (strEQ(SvPVX(sv),tmps))
1109 sv = sv_2mortal(newSVsv(sv));
1116 SV *targ = PAD_SV(cUNOP->op_first->op_targ);
1118 if ((PL_op->op_private & OPpFLIP_LINENUM)
1119 ? (PL_last_in_gv && SvIV(sv) == (IV)IoLINES(GvIOp(PL_last_in_gv)))
1121 sv_setiv(PAD_SV(((UNOP*)cUNOP->op_first)->op_first->op_targ), 0);
1122 sv_catpv(targ, "E0");
1133 S_dopoptolabel(pTHX_ char *label)
1137 register PERL_CONTEXT *cx;
1139 for (i = cxstack_ix; i >= 0; i--) {
1141 switch (CxTYPE(cx)) {
1143 if (ckWARN(WARN_UNSAFE))
1144 Perl_warner(aTHX_ WARN_UNSAFE, "Exiting substitution via %s",
1145 PL_op_name[PL_op->op_type]);
1148 if (ckWARN(WARN_UNSAFE))
1149 Perl_warner(aTHX_ WARN_UNSAFE, "Exiting subroutine via %s",
1150 PL_op_name[PL_op->op_type]);
1153 if (ckWARN(WARN_UNSAFE))
1154 Perl_warner(aTHX_ WARN_UNSAFE, "Exiting eval via %s",
1155 PL_op_name[PL_op->op_type]);
1158 if (ckWARN(WARN_UNSAFE))
1159 Perl_warner(aTHX_ WARN_UNSAFE, "Exiting pseudo-block via %s",
1160 PL_op_name[PL_op->op_type]);
1163 if (!cx->blk_loop.label ||
1164 strNE(label, cx->blk_loop.label) ) {
1165 DEBUG_l(Perl_deb(aTHX_ "(Skipping label #%ld %s)\n",
1166 (long)i, cx->blk_loop.label));
1169 DEBUG_l( Perl_deb(aTHX_ "(Found label #%ld %s)\n", (long)i, label));
1177 Perl_dowantarray(pTHX)
1179 I32 gimme = block_gimme();
1180 return (gimme == G_VOID) ? G_SCALAR : gimme;
1184 Perl_block_gimme(pTHX)
1189 cxix = dopoptosub(cxstack_ix);
1193 switch (cxstack[cxix].blk_gimme) {
1201 Perl_croak(aTHX_ "panic: bad gimme: %d\n", cxstack[cxix].blk_gimme);
1208 S_dopoptosub(pTHX_ I32 startingblock)
1211 return dopoptosub_at(cxstack, startingblock);
1215 S_dopoptosub_at(pTHX_ PERL_CONTEXT *cxstk, I32 startingblock)
1219 register PERL_CONTEXT *cx;
1220 for (i = startingblock; i >= 0; i--) {
1222 switch (CxTYPE(cx)) {
1227 DEBUG_l( Perl_deb(aTHX_ "(Found sub #%ld)\n", (long)i));
1235 S_dopoptoeval(pTHX_ I32 startingblock)
1239 register PERL_CONTEXT *cx;
1240 for (i = startingblock; i >= 0; i--) {
1242 switch (CxTYPE(cx)) {
1246 DEBUG_l( Perl_deb(aTHX_ "(Found eval #%ld)\n", (long)i));
1254 S_dopoptoloop(pTHX_ I32 startingblock)
1258 register PERL_CONTEXT *cx;
1259 for (i = startingblock; i >= 0; i--) {
1261 switch (CxTYPE(cx)) {
1263 if (ckWARN(WARN_UNSAFE))
1264 Perl_warner(aTHX_ WARN_UNSAFE, "Exiting substitution via %s",
1265 PL_op_name[PL_op->op_type]);
1268 if (ckWARN(WARN_UNSAFE))
1269 Perl_warner(aTHX_ WARN_UNSAFE, "Exiting subroutine via %s",
1270 PL_op_name[PL_op->op_type]);
1273 if (ckWARN(WARN_UNSAFE))
1274 Perl_warner(aTHX_ WARN_UNSAFE, "Exiting eval via %s",
1275 PL_op_name[PL_op->op_type]);
1278 if (ckWARN(WARN_UNSAFE))
1279 Perl_warner(aTHX_ WARN_UNSAFE, "Exiting pseudo-block via %s",
1280 PL_op_name[PL_op->op_type]);
1283 DEBUG_l( Perl_deb(aTHX_ "(Found loop #%ld)\n", (long)i));
1291 Perl_dounwind(pTHX_ I32 cxix)
1294 register PERL_CONTEXT *cx;
1298 while (cxstack_ix > cxix) {
1299 cx = &cxstack[cxstack_ix];
1300 DEBUG_l(PerlIO_printf(Perl_debug_log, "Unwinding block %ld, type %s\n",
1301 (long) cxstack_ix, PL_block_type[CxTYPE(cx)]));
1302 /* Note: we don't need to restore the base context info till the end. */
1303 switch (CxTYPE(cx)) {
1306 continue; /* not break */
1324 * Closures mentioned at top level of eval cannot be referenced
1325 * again, and their presence indirectly causes a memory leak.
1326 * (Note that the fact that compcv and friends are still set here
1327 * is, AFAIK, an accident.) --Chip
1329 * XXX need to get comppad et al from eval's cv rather than
1330 * relying on the incidental global values.
1333 S_free_closures(pTHX)
1336 SV **svp = AvARRAY(PL_comppad_name);
1338 for (ix = AvFILLp(PL_comppad_name); ix >= 0; ix--) {
1340 if (sv && sv != &PL_sv_undef && *SvPVX(sv) == '&') {
1342 svp[ix] = &PL_sv_undef;
1346 SvREFCNT_dec(CvOUTSIDE(sv));
1347 CvOUTSIDE(sv) = Nullcv;
1360 Perl_die_where(pTHX_ char *message, STRLEN msglen)
1366 register PERL_CONTEXT *cx;
1371 if (PL_in_eval & EVAL_KEEPERR) {
1374 svp = hv_fetch(ERRHV, message, msglen, TRUE);
1377 static char prefix[] = "\t(in cleanup) ";
1379 sv_upgrade(*svp, SVt_IV);
1380 (void)SvIOK_only(*svp);
1383 SvGROW(err, SvCUR(err)+sizeof(prefix)+msglen);
1384 sv_catpvn(err, prefix, sizeof(prefix)-1);
1385 sv_catpvn(err, message, msglen);
1386 if (ckWARN(WARN_UNSAFE)) {
1387 STRLEN start = SvCUR(err)-msglen-sizeof(prefix)+1;
1388 Perl_warner(aTHX_ WARN_UNSAFE, SvPVX(err)+start);
1395 sv_setpvn(ERRSV, message, msglen);
1398 message = SvPVx(ERRSV, msglen);
1400 while ((cxix = dopoptoeval(cxstack_ix)) < 0 && PL_curstackinfo->si_prev) {
1408 if (cxix < cxstack_ix)
1411 POPBLOCK(cx,PL_curpm);
1412 if (CxTYPE(cx) != CXt_EVAL) {
1413 PerlIO_write(PerlIO_stderr(), "panic: die ", 11);
1414 PerlIO_write(PerlIO_stderr(), message, msglen);
1419 if (gimme == G_SCALAR)
1420 *++newsp = &PL_sv_undef;
1421 PL_stack_sp = newsp;
1425 if (optype == OP_REQUIRE) {
1426 char* msg = SvPVx(ERRSV, n_a);
1427 DIE(aTHX_ "%s", *msg ? msg : "Compilation failed in require");
1429 return pop_return();
1433 message = SvPVx(ERRSV, msglen);
1436 /* SFIO can really mess with your errno */
1439 PerlIO_write(PerlIO_stderr(), message, msglen);
1440 (void)PerlIO_flush(PerlIO_stderr());
1453 if (SvTRUE(left) != SvTRUE(right))
1465 RETURNOP(cLOGOP->op_other);
1474 RETURNOP(cLOGOP->op_other);
1480 register I32 cxix = dopoptosub(cxstack_ix);
1481 register PERL_CONTEXT *cx;
1482 register PERL_CONTEXT *ccstack = cxstack;
1483 PERL_SI *top_si = PL_curstackinfo;
1494 /* we may be in a higher stacklevel, so dig down deeper */
1495 while (cxix < 0 && top_si->si_type != PERLSI_MAIN) {
1496 top_si = top_si->si_prev;
1497 ccstack = top_si->si_cxstack;
1498 cxix = dopoptosub_at(ccstack, top_si->si_cxix);
1501 if (GIMME != G_ARRAY)
1505 if (PL_DBsub && cxix >= 0 &&
1506 ccstack[cxix].blk_sub.cv == GvCV(PL_DBsub))
1510 cxix = dopoptosub_at(ccstack, cxix - 1);
1513 cx = &ccstack[cxix];
1514 if (CxTYPE(cx) == CXt_SUB) {
1515 dbcxix = dopoptosub_at(ccstack, cxix - 1);
1516 /* We expect that ccstack[dbcxix] is CXt_SUB, anyway, the
1517 field below is defined for any cx. */
1518 if (PL_DBsub && dbcxix >= 0 && ccstack[dbcxix].blk_sub.cv == GvCV(PL_DBsub))
1519 cx = &ccstack[dbcxix];
1522 if (GIMME != G_ARRAY) {
1523 hv = cx->blk_oldcop->cop_stash;
1525 PUSHs(&PL_sv_undef);
1528 sv_setpv(TARG, HvNAME(hv));
1534 hv = cx->blk_oldcop->cop_stash;
1536 PUSHs(&PL_sv_undef);
1538 PUSHs(sv_2mortal(newSVpv(HvNAME(hv), 0)));
1539 PUSHs(sv_2mortal(newSVpvn(SvPVX(GvSV(cx->blk_oldcop->cop_filegv)),
1540 SvCUR(GvSV(cx->blk_oldcop->cop_filegv)))));
1541 PUSHs(sv_2mortal(newSViv((I32)cx->blk_oldcop->cop_line)));
1544 if (CxTYPE(cx) == CXt_SUB) { /* So is ccstack[dbcxix]. */
1546 gv_efullname3(sv, CvGV(ccstack[cxix].blk_sub.cv), Nullch);
1547 PUSHs(sv_2mortal(sv));
1548 PUSHs(sv_2mortal(newSViv((I32)cx->blk_sub.hasargs)));
1551 PUSHs(sv_2mortal(newSVpvn("(eval)",6)));
1552 PUSHs(sv_2mortal(newSViv(0)));
1554 gimme = (I32)cx->blk_gimme;
1555 if (gimme == G_VOID)
1556 PUSHs(&PL_sv_undef);
1558 PUSHs(sv_2mortal(newSViv(gimme & G_ARRAY)));
1559 if (CxTYPE(cx) == CXt_EVAL) {
1560 if (cx->blk_eval.old_op_type == OP_ENTEREVAL) {
1561 PUSHs(cx->blk_eval.cur_text);
1564 else if (cx->blk_eval.old_name) { /* Try blocks have old_name == 0. */
1565 /* Require, put the name. */
1566 PUSHs(sv_2mortal(newSVpv(cx->blk_eval.old_name, 0)));
1570 else if (CxTYPE(cx) == CXt_SUB &&
1571 cx->blk_sub.hasargs &&
1572 PL_curcop->cop_stash == PL_debstash)
1574 AV *ary = cx->blk_sub.argarray;
1575 int off = AvARRAY(ary) - AvALLOC(ary);
1579 PL_dbargs = GvAV(gv_AVadd(tmpgv = gv_fetchpv("DB::args", TRUE,
1582 AvREAL_off(PL_dbargs); /* XXX Should be REIFY */
1585 if (AvMAX(PL_dbargs) < AvFILLp(ary) + off)
1586 av_extend(PL_dbargs, AvFILLp(ary) + off);
1587 Copy(AvALLOC(ary), AvARRAY(PL_dbargs), AvFILLp(ary) + 1 + off, SV*);
1588 AvFILLp(PL_dbargs) = AvFILLp(ary) + off;
1590 /* XXX only hints propagated via op_private are currently
1591 * visible (others are not easily accessible, since they
1592 * use the global PL_hints) */
1593 PUSHs(sv_2mortal(newSViv((I32)cx->blk_oldcop->op_private &
1594 HINT_PRIVATE_MASK)));
1599 S_sortcv(pTHX_ SV *a, SV *b)
1602 I32 oldsaveix = PL_savestack_ix;
1603 I32 oldscopeix = PL_scopestack_ix;
1605 GvSV(PL_firstgv) = a;
1606 GvSV(PL_secondgv) = b;
1607 PL_stack_sp = PL_stack_base;
1610 if (PL_stack_sp != PL_stack_base + 1)
1611 Perl_croak(aTHX_ "Sort subroutine didn't return single value");
1612 if (!SvNIOKp(*PL_stack_sp))
1613 Perl_croak(aTHX_ "Sort subroutine didn't return a numeric value");
1614 result = SvIV(*PL_stack_sp);
1615 while (PL_scopestack_ix > oldscopeix) {
1618 leave_scope(oldsaveix);
1632 sv_reset(tmps, PL_curcop->cop_stash);
1644 PL_curcop = (COP*)PL_op;
1645 TAINT_NOT; /* Each statement is presumed innocent */
1646 PL_stack_sp = PL_stack_base + cxstack[cxstack_ix].blk_oldsp;
1649 if (PL_op->op_private || SvIV(PL_DBsingle) || SvIV(PL_DBsignal) || SvIV(PL_DBtrace))
1653 register PERL_CONTEXT *cx;
1654 I32 gimme = G_ARRAY;
1661 DIE(aTHX_ "No DB::DB routine defined");
1663 if (CvDEPTH(cv) >= 1 && !(PL_debug & (1<<30))) /* don't do recursive DB::DB call */
1675 push_return(PL_op->op_next);
1676 PUSHBLOCK(cx, CXt_SUB, SP);
1679 (void)SvREFCNT_inc(cv);
1680 SAVESPTR(PL_curpad);
1681 PL_curpad = AvARRAY((AV*)*av_fetch(CvPADLIST(cv),1,FALSE));
1682 RETURNOP(CvSTART(cv));
1696 register PERL_CONTEXT *cx;
1697 I32 gimme = GIMME_V;
1704 if (PL_op->op_flags & OPf_SPECIAL) {
1706 svp = &THREADSV(PL_op->op_targ); /* per-thread variable */
1707 SAVEGENERICSV(*svp);
1711 #endif /* USE_THREADS */
1712 if (PL_op->op_targ) {
1713 svp = &PL_curpad[PL_op->op_targ]; /* "my" variable */
1717 svp = &GvSV((GV*)POPs); /* symbol table variable */
1718 SAVEGENERICSV(*svp);
1724 PUSHBLOCK(cx, CXt_LOOP, SP);
1725 PUSHLOOP(cx, svp, MARK);
1726 if (PL_op->op_flags & OPf_STACKED) {
1727 cx->blk_loop.iterary = (AV*)SvREFCNT_inc(POPs);
1728 if (SvTYPE(cx->blk_loop.iterary) != SVt_PVAV) {
1730 if (SvNIOKp(sv) || !SvPOKp(sv) ||
1731 (looks_like_number(sv) && *SvPVX(sv) != '0')) {
1732 if (SvNV(sv) < IV_MIN ||
1733 SvNV((SV*)cx->blk_loop.iterary) >= IV_MAX)
1734 Perl_croak(aTHX_ "Range iterator outside integer range");
1735 cx->blk_loop.iterix = SvIV(sv);
1736 cx->blk_loop.itermax = SvIV((SV*)cx->blk_loop.iterary);
1739 cx->blk_loop.iterlval = newSVsv(sv);
1743 cx->blk_loop.iterary = PL_curstack;
1744 AvFILLp(PL_curstack) = SP - PL_stack_base;
1745 cx->blk_loop.iterix = MARK - PL_stack_base;
1754 register PERL_CONTEXT *cx;
1755 I32 gimme = GIMME_V;
1761 PUSHBLOCK(cx, CXt_LOOP, SP);
1762 PUSHLOOP(cx, 0, SP);
1770 register PERL_CONTEXT *cx;
1771 struct block_loop cxloop;
1779 POPLOOP1(cx); /* Delay POPLOOP2 until stack values are safe */
1782 if (gimme == G_VOID)
1784 else if (gimme == G_SCALAR) {
1786 *++newsp = sv_mortalcopy(*SP);
1788 *++newsp = &PL_sv_undef;
1792 *++newsp = sv_mortalcopy(*++mark);
1793 TAINT_NOT; /* Each item is independent */
1799 POPLOOP2(); /* Stack values are safe: release loop vars ... */
1800 PL_curpm = newpm; /* ... and pop $1 et al */
1812 register PERL_CONTEXT *cx;
1813 struct block_sub cxsub;
1814 bool popsub2 = FALSE;
1820 if (PL_curstackinfo->si_type == PERLSI_SORT) {
1821 if (cxstack_ix == PL_sortcxix || dopoptosub(cxstack_ix) <= PL_sortcxix) {
1822 if (cxstack_ix > PL_sortcxix)
1823 dounwind(PL_sortcxix);
1824 AvARRAY(PL_curstack)[1] = *SP;
1825 PL_stack_sp = PL_stack_base + 1;
1830 cxix = dopoptosub(cxstack_ix);
1832 DIE(aTHX_ "Can't return outside a subroutine");
1833 if (cxix < cxstack_ix)
1837 switch (CxTYPE(cx)) {
1839 POPSUB1(cx); /* Delay POPSUB2 until stack values are safe */
1844 if (AvFILLp(PL_comppad_name) >= 0)
1847 if (optype == OP_REQUIRE &&
1848 (MARK == SP || (gimme == G_SCALAR && !SvTRUE(*SP))) )
1850 /* Unassume the success we assumed earlier. */
1851 char *name = cx->blk_eval.old_name;
1852 (void)hv_delete(GvHVn(PL_incgv), name, strlen(name), G_DISCARD);
1853 DIE(aTHX_ "%s did not return a true value", name);
1857 DIE(aTHX_ "panic: return");
1861 if (gimme == G_SCALAR) {
1864 if (cxsub.cv && CvDEPTH(cxsub.cv) > 1) {
1866 *++newsp = SvREFCNT_inc(*SP);
1871 *++newsp = sv_mortalcopy(*SP);
1874 *++newsp = (SvTEMP(*SP)) ? *SP : sv_mortalcopy(*SP);
1876 *++newsp = sv_mortalcopy(*SP);
1878 *++newsp = &PL_sv_undef;
1880 else if (gimme == G_ARRAY) {
1881 while (++MARK <= SP) {
1882 *++newsp = (popsub2 && SvTEMP(*MARK))
1883 ? *MARK : sv_mortalcopy(*MARK);
1884 TAINT_NOT; /* Each item is independent */
1887 PL_stack_sp = newsp;
1889 /* Stack values are safe: */
1891 POPSUB2(); /* release CV and @_ ... */
1893 PL_curpm = newpm; /* ... and pop $1 et al */
1896 return pop_return();
1903 register PERL_CONTEXT *cx;
1904 struct block_loop cxloop;
1905 struct block_sub cxsub;
1912 SV **mark = PL_stack_base + cxstack[cxstack_ix].blk_oldsp;
1914 if (PL_op->op_flags & OPf_SPECIAL) {
1915 cxix = dopoptoloop(cxstack_ix);
1917 DIE(aTHX_ "Can't \"last\" outside a block");
1920 cxix = dopoptolabel(cPVOP->op_pv);
1922 DIE(aTHX_ "Label not found for \"last %s\"", cPVOP->op_pv);
1924 if (cxix < cxstack_ix)
1928 switch (CxTYPE(cx)) {
1930 POPLOOP1(cx); /* Delay POPLOOP2 until stack values are safe */
1932 nextop = cxloop.last_op->op_next;
1935 POPSUB1(cx); /* Delay POPSUB2 until stack values are safe */
1937 nextop = pop_return();
1941 nextop = pop_return();
1944 DIE(aTHX_ "panic: last");
1948 if (gimme == G_SCALAR) {
1950 *++newsp = ((pop2 == CXt_SUB) && SvTEMP(*SP))
1951 ? *SP : sv_mortalcopy(*SP);
1953 *++newsp = &PL_sv_undef;
1955 else if (gimme == G_ARRAY) {
1956 while (++MARK <= SP) {
1957 *++newsp = ((pop2 == CXt_SUB) && SvTEMP(*MARK))
1958 ? *MARK : sv_mortalcopy(*MARK);
1959 TAINT_NOT; /* Each item is independent */
1965 /* Stack values are safe: */
1968 POPLOOP2(); /* release loop vars ... */
1972 POPSUB2(); /* release CV and @_ ... */
1975 PL_curpm = newpm; /* ... and pop $1 et al */
1984 register PERL_CONTEXT *cx;
1987 if (PL_op->op_flags & OPf_SPECIAL) {
1988 cxix = dopoptoloop(cxstack_ix);
1990 DIE(aTHX_ "Can't \"next\" outside a block");
1993 cxix = dopoptolabel(cPVOP->op_pv);
1995 DIE(aTHX_ "Label not found for \"next %s\"", cPVOP->op_pv);
1997 if (cxix < cxstack_ix)
2001 oldsave = PL_scopestack[PL_scopestack_ix - 1];
2002 LEAVE_SCOPE(oldsave);
2003 return cx->blk_loop.next_op;
2009 register PERL_CONTEXT *cx;
2012 if (PL_op->op_flags & OPf_SPECIAL) {
2013 cxix = dopoptoloop(cxstack_ix);
2015 DIE(aTHX_ "Can't \"redo\" outside a block");
2018 cxix = dopoptolabel(cPVOP->op_pv);
2020 DIE(aTHX_ "Label not found for \"redo %s\"", cPVOP->op_pv);
2022 if (cxix < cxstack_ix)
2026 oldsave = PL_scopestack[PL_scopestack_ix - 1];
2027 LEAVE_SCOPE(oldsave);
2028 return cx->blk_loop.redo_op;
2032 S_dofindlabel(pTHX_ OP *o, char *label, OP **opstack, OP **oplimit)
2036 static char too_deep[] = "Target of goto is too deeply nested";
2039 Perl_croak(aTHX_ too_deep);
2040 if (o->op_type == OP_LEAVE ||
2041 o->op_type == OP_SCOPE ||
2042 o->op_type == OP_LEAVELOOP ||
2043 o->op_type == OP_LEAVETRY)
2045 *ops++ = cUNOPo->op_first;
2047 Perl_croak(aTHX_ too_deep);
2050 if (o->op_flags & OPf_KIDS) {
2052 /* First try all the kids at this level, since that's likeliest. */
2053 for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling) {
2054 if ((kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) &&
2055 kCOP->cop_label && strEQ(kCOP->cop_label, label))
2058 for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling) {
2059 if (kid == PL_lastgotoprobe)
2061 if ((kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) &&
2063 (ops[-1]->op_type != OP_NEXTSTATE &&
2064 ops[-1]->op_type != OP_DBSTATE)))
2066 if (o = dofindlabel(kid, label, ops, oplimit))
2085 register PERL_CONTEXT *cx;
2086 #define GOTO_DEPTH 64
2087 OP *enterops[GOTO_DEPTH];
2089 int do_dump = (PL_op->op_type == OP_DUMP);
2090 static char must_have_label[] = "goto must have label";
2093 if (PL_op->op_flags & OPf_STACKED) {
2097 /* This egregious kludge implements goto &subroutine */
2098 if (SvROK(sv) && SvTYPE(SvRV(sv)) == SVt_PVCV) {
2100 register PERL_CONTEXT *cx;
2101 CV* cv = (CV*)SvRV(sv);
2105 int arg_was_real = 0;
2108 if (!CvROOT(cv) && !CvXSUB(cv)) {
2113 /* autoloaded stub? */
2114 if (cv != GvCV(gv) && (cv = GvCV(gv)))
2116 autogv = gv_autoload4(GvSTASH(gv), GvNAME(gv),
2117 GvNAMELEN(gv), FALSE);
2118 if (autogv && (cv = GvCV(autogv)))
2120 tmpstr = sv_newmortal();
2121 gv_efullname3(tmpstr, gv, Nullch);
2122 DIE(aTHX_ "Goto undefined subroutine &%s",SvPVX(tmpstr));
2124 DIE(aTHX_ "Goto undefined subroutine");
2127 /* First do some returnish stuff. */
2128 cxix = dopoptosub(cxstack_ix);
2130 DIE(aTHX_ "Can't goto subroutine outside a subroutine");
2131 if (cxix < cxstack_ix)
2134 if (CxTYPE(cx) == CXt_EVAL && cx->blk_eval.old_op_type == OP_ENTEREVAL)
2135 DIE(aTHX_ "Can't goto subroutine from an eval-string");
2137 if (CxTYPE(cx) == CXt_SUB &&
2138 cx->blk_sub.hasargs) { /* put @_ back onto stack */
2139 AV* av = cx->blk_sub.argarray;
2141 items = AvFILLp(av) + 1;
2143 EXTEND(PL_stack_sp, items); /* @_ could have been extended. */
2144 Copy(AvARRAY(av), PL_stack_sp, items, SV*);
2145 PL_stack_sp += items;
2147 SvREFCNT_dec(GvAV(PL_defgv));
2148 GvAV(PL_defgv) = cx->blk_sub.savearray;
2149 #endif /* USE_THREADS */
2152 AvREAL_off(av); /* so av_clear() won't clobber elts */
2156 else if (CvXSUB(cv)) { /* put GvAV(defgv) back onto stack */
2160 av = (AV*)PL_curpad[0];
2162 av = GvAV(PL_defgv);
2164 items = AvFILLp(av) + 1;
2166 EXTEND(PL_stack_sp, items); /* @_ could have been extended. */
2167 Copy(AvARRAY(av), PL_stack_sp, items, SV*);
2168 PL_stack_sp += items;
2170 if (CxTYPE(cx) == CXt_SUB &&
2171 !(CvDEPTH(cx->blk_sub.cv) = cx->blk_sub.olddepth))
2172 SvREFCNT_dec(cx->blk_sub.cv);
2173 oldsave = PL_scopestack[PL_scopestack_ix - 1];
2174 LEAVE_SCOPE(oldsave);
2176 /* Now do some callish stuff. */
2179 #ifdef PERL_XSUB_OLDSTYLE
2180 if (CvOLDSTYLE(cv)) {
2181 I32 (*fp3)(int,int,int);
2186 fp3 = (I32(*)(int,int,int)))CvXSUB(cv;
2187 items = (*fp3)(CvXSUBANY(cv).any_i32,
2188 mark - PL_stack_base + 1,
2190 SP = PL_stack_base + items;
2193 #endif /* PERL_XSUB_OLDSTYLE */
2198 PL_stack_sp--; /* There is no cv arg. */
2199 /* Push a mark for the start of arglist */
2201 (void)(*CvXSUB(cv))(aTHXo_ cv);
2202 /* Pop the current context like a decent sub should */
2203 POPBLOCK(cx, PL_curpm);
2204 /* Do _not_ use PUTBACK, keep the XSUB's return stack! */
2207 return pop_return();
2210 AV* padlist = CvPADLIST(cv);
2211 SV** svp = AvARRAY(padlist);
2212 if (CxTYPE(cx) == CXt_EVAL) {
2213 PL_in_eval = cx->blk_eval.old_in_eval;
2214 PL_eval_root = cx->blk_eval.old_eval_root;
2215 cx->cx_type = CXt_SUB;
2216 cx->blk_sub.hasargs = 0;
2218 cx->blk_sub.cv = cv;
2219 cx->blk_sub.olddepth = CvDEPTH(cv);
2221 if (CvDEPTH(cv) < 2)
2222 (void)SvREFCNT_inc(cv);
2223 else { /* save temporaries on recursion? */
2224 if (CvDEPTH(cv) == 100 && ckWARN(WARN_RECURSION))
2225 sub_crush_depth(cv);
2226 if (CvDEPTH(cv) > AvFILLp(padlist)) {
2227 AV *newpad = newAV();
2228 SV **oldpad = AvARRAY(svp[CvDEPTH(cv)-1]);
2229 I32 ix = AvFILLp((AV*)svp[1]);
2230 svp = AvARRAY(svp[0]);
2231 for ( ;ix > 0; ix--) {
2232 if (svp[ix] != &PL_sv_undef) {
2233 char *name = SvPVX(svp[ix]);
2234 if ((SvFLAGS(svp[ix]) & SVf_FAKE)
2237 /* outer lexical or anon code */
2238 av_store(newpad, ix,
2239 SvREFCNT_inc(oldpad[ix]) );
2241 else { /* our own lexical */
2243 av_store(newpad, ix, sv = (SV*)newAV());
2244 else if (*name == '%')
2245 av_store(newpad, ix, sv = (SV*)newHV());
2247 av_store(newpad, ix, sv = NEWSV(0,0));
2252 av_store(newpad, ix, sv = NEWSV(0,0));
2256 if (cx->blk_sub.hasargs) {
2259 av_store(newpad, 0, (SV*)av);
2260 AvFLAGS(av) = AVf_REIFY;
2262 av_store(padlist, CvDEPTH(cv), (SV*)newpad);
2263 AvFILLp(padlist) = CvDEPTH(cv);
2264 svp = AvARRAY(padlist);
2268 if (!cx->blk_sub.hasargs) {
2269 AV* av = (AV*)PL_curpad[0];
2271 items = AvFILLp(av) + 1;
2273 /* Mark is at the end of the stack. */
2275 Copy(AvARRAY(av), SP + 1, items, SV*);
2280 #endif /* USE_THREADS */
2281 SAVESPTR(PL_curpad);
2282 PL_curpad = AvARRAY((AV*)svp[CvDEPTH(cv)]);
2284 if (cx->blk_sub.hasargs)
2285 #endif /* USE_THREADS */
2287 AV* av = (AV*)PL_curpad[0];
2291 cx->blk_sub.savearray = GvAV(PL_defgv);
2292 GvAV(PL_defgv) = (AV*)SvREFCNT_inc(av);
2293 #endif /* USE_THREADS */
2294 cx->blk_sub.argarray = av;
2297 if (items >= AvMAX(av) + 1) {
2299 if (AvARRAY(av) != ary) {
2300 AvMAX(av) += AvARRAY(av) - AvALLOC(av);
2301 SvPVX(av) = (char*)ary;
2303 if (items >= AvMAX(av) + 1) {
2304 AvMAX(av) = items - 1;
2305 Renew(ary,items+1,SV*);
2307 SvPVX(av) = (char*)ary;
2310 Copy(mark,AvARRAY(av),items,SV*);
2311 AvFILLp(av) = items - 1;
2312 /* preserve @_ nature */
2323 if (PERLDB_SUB) { /* Checking curstash breaks DProf. */
2325 * We do not care about using sv to call CV;
2326 * it's for informational purposes only.
2328 SV *sv = GvSV(PL_DBsub);
2331 if (PERLDB_SUB_NN) {
2332 SvIVX(sv) = (IV)cv; /* Already upgraded, saved */
2335 gv_efullname3(sv, CvGV(cv), Nullch);
2338 && (gotocv = get_cv("DB::goto", FALSE)) ) {
2339 PUSHMARK( PL_stack_sp );
2340 call_sv((SV*)gotocv, G_SCALAR | G_NODEBUG);
2344 RETURNOP(CvSTART(cv));
2348 label = SvPV(sv,n_a);
2349 if (!(do_dump || *label))
2350 DIE(aTHX_ must_have_label);
2353 else if (PL_op->op_flags & OPf_SPECIAL) {
2355 DIE(aTHX_ must_have_label);
2358 label = cPVOP->op_pv;
2360 if (label && *label) {
2365 PL_lastgotoprobe = 0;
2367 for (ix = cxstack_ix; ix >= 0; ix--) {
2369 switch (CxTYPE(cx)) {
2371 gotoprobe = PL_eval_root; /* XXX not good for nested eval */
2374 gotoprobe = cx->blk_oldcop->op_sibling;
2380 gotoprobe = cx->blk_oldcop->op_sibling;
2382 gotoprobe = PL_main_root;
2385 if (CvDEPTH(cx->blk_sub.cv)) {
2386 gotoprobe = CvROOT(cx->blk_sub.cv);
2391 DIE(aTHX_ "Can't \"goto\" outside a block");
2394 DIE(aTHX_ "panic: goto");
2395 gotoprobe = PL_main_root;
2398 retop = dofindlabel(gotoprobe, label,
2399 enterops, enterops + GOTO_DEPTH);
2402 PL_lastgotoprobe = gotoprobe;
2405 DIE(aTHX_ "Can't find label %s", label);
2407 /* pop unwanted frames */
2409 if (ix < cxstack_ix) {
2416 oldsave = PL_scopestack[PL_scopestack_ix];
2417 LEAVE_SCOPE(oldsave);
2420 /* push wanted frames */
2422 if (*enterops && enterops[1]) {
2424 for (ix = 1; enterops[ix]; ix++) {
2425 PL_op = enterops[ix];
2426 /* Eventually we may want to stack the needed arguments
2427 * for each op. For now, we punt on the hard ones. */
2428 if (PL_op->op_type == OP_ENTERITER)
2429 DIE(aTHX_ "Can't \"goto\" into the middle of a foreach loop",
2431 (CALLOP->op_ppaddr)(aTHX);
2439 if (!retop) retop = PL_main_start;
2441 PL_restartop = retop;
2442 PL_do_undump = TRUE;
2446 PL_restartop = 0; /* hmm, must be GNU unexec().. */
2447 PL_do_undump = FALSE;
2463 if (anum == 1 && VMSISH_EXIT)
2468 PUSHs(&PL_sv_undef);
2476 NV value = SvNVx(GvSV(cCOP->cop_gv));
2477 register I32 match = I_32(value);
2480 if (((NV)match) > value)
2481 --match; /* was fractional--truncate other way */
2483 match -= cCOP->uop.scop.scop_offset;
2486 else if (match > cCOP->uop.scop.scop_max)
2487 match = cCOP->uop.scop.scop_max;
2488 PL_op = cCOP->uop.scop.scop_next[match];
2498 PL_op = PL_op->op_next; /* can't assume anything */
2501 match = *(SvPVx(GvSV(cCOP->cop_gv), n_a)) & 255;
2502 match -= cCOP->uop.scop.scop_offset;
2505 else if (match > cCOP->uop.scop.scop_max)
2506 match = cCOP->uop.scop.scop_max;
2507 PL_op = cCOP->uop.scop.scop_next[match];
2516 S_save_lines(pTHX_ AV *array, SV *sv)
2518 register char *s = SvPVX(sv);
2519 register char *send = SvPVX(sv) + SvCUR(sv);
2521 register I32 line = 1;
2523 while (s && s < send) {
2524 SV *tmpstr = NEWSV(85,0);
2526 sv_upgrade(tmpstr, SVt_PVMG);
2527 t = strchr(s, '\n');
2533 sv_setpvn(tmpstr, s, t - s);
2534 av_store(array, line++, tmpstr);
2540 S_docatch_body(pTHX_ va_list args)
2547 S_docatch(pTHX_ OP *o)
2554 assert(CATCH_GET == TRUE);
2558 CALLPROTECT(aTHX_ &ret, FUNC_NAME_TO_PTR(S_docatch_body));
2564 PL_op = PL_restartop;
2579 Perl_sv_compile_2op(pTHX_ SV *sv, OP** startop, char *code, AV** avp)
2580 /* sv Text to convert to OP tree. */
2581 /* startop op_free() this to undo. */
2582 /* code Short string id of the caller. */
2584 dSP; /* Make POPBLOCK work. */
2587 I32 gimme = 0; /* SUSPECT - INITIALZE TO WHAT? NI-S */
2590 OP *oop = PL_op, *rop;
2591 char tmpbuf[TYPE_DIGITS(long) + 12 + 10];
2597 /* switch to eval mode */
2599 if (PL_curcop == &PL_compiling) {
2600 SAVESPTR(PL_compiling.cop_stash);
2601 PL_compiling.cop_stash = PL_curstash;
2603 SAVESPTR(PL_compiling.cop_filegv);
2604 SAVEI16(PL_compiling.cop_line);
2605 sprintf(tmpbuf, "_<(%.10s_eval %lu)", code, (unsigned long)++PL_evalseq);
2606 PL_compiling.cop_filegv = gv_fetchfile(tmpbuf+2);
2607 PL_compiling.cop_line = 1;
2608 /* XXX For C<eval "...">s within BEGIN {} blocks, this ends up
2609 deleting the eval's FILEGV from the stash before gv_check() runs
2610 (i.e. before run-time proper). To work around the coredump that
2611 ensues, we always turn GvMULTI_on for any globals that were
2612 introduced within evals. See force_ident(). GSAR 96-10-12 */
2613 safestr = savepv(tmpbuf);
2614 SAVEDELETE(PL_defstash, safestr, strlen(safestr));
2616 #ifdef OP_IN_REGISTER
2624 PL_op->op_type = OP_ENTEREVAL;
2625 PL_op->op_flags = 0; /* Avoid uninit warning. */
2626 PUSHBLOCK(cx, CXt_EVAL, SP);
2627 PUSHEVAL(cx, 0, PL_compiling.cop_filegv);
2628 rop = doeval(G_SCALAR, startop);
2629 POPBLOCK(cx,PL_curpm);
2632 (*startop)->op_type = OP_NULL;
2633 (*startop)->op_ppaddr = PL_ppaddr[OP_NULL];
2635 *avp = (AV*)SvREFCNT_inc(PL_comppad);
2637 if (PL_curcop == &PL_compiling)
2638 PL_compiling.op_private = PL_hints;
2639 #ifdef OP_IN_REGISTER
2645 /* With USE_THREADS, eval_owner must be held on entry to doeval */
2647 S_doeval(pTHX_ int gimme, OP** startop)
2656 PL_in_eval = EVAL_INEVAL;
2660 /* set up a scratch pad */
2663 SAVESPTR(PL_curpad);
2664 SAVESPTR(PL_comppad);
2665 SAVESPTR(PL_comppad_name);
2666 SAVEI32(PL_comppad_name_fill);
2667 SAVEI32(PL_min_intro_pending);
2668 SAVEI32(PL_max_intro_pending);
2671 for (i = cxstack_ix - 1; i >= 0; i--) {
2672 PERL_CONTEXT *cx = &cxstack[i];
2673 if (CxTYPE(cx) == CXt_EVAL)
2675 else if (CxTYPE(cx) == CXt_SUB) {
2676 caller = cx->blk_sub.cv;
2681 SAVESPTR(PL_compcv);
2682 PL_compcv = (CV*)NEWSV(1104,0);
2683 sv_upgrade((SV *)PL_compcv, SVt_PVCV);
2684 CvEVAL_on(PL_compcv);
2686 CvOWNER(PL_compcv) = 0;
2687 New(666, CvMUTEXP(PL_compcv), 1, perl_mutex);
2688 MUTEX_INIT(CvMUTEXP(PL_compcv));
2689 #endif /* USE_THREADS */
2691 PL_comppad = newAV();
2692 av_push(PL_comppad, Nullsv);
2693 PL_curpad = AvARRAY(PL_comppad);
2694 PL_comppad_name = newAV();
2695 PL_comppad_name_fill = 0;
2696 PL_min_intro_pending = 0;
2699 av_store(PL_comppad_name, 0, newSVpvn("@_", 2));
2700 PL_curpad[0] = (SV*)newAV();
2701 SvPADMY_on(PL_curpad[0]); /* XXX Needed? */
2702 #endif /* USE_THREADS */
2704 comppadlist = newAV();
2705 AvREAL_off(comppadlist);
2706 av_store(comppadlist, 0, (SV*)PL_comppad_name);
2707 av_store(comppadlist, 1, (SV*)PL_comppad);
2708 CvPADLIST(PL_compcv) = comppadlist;
2710 if (!saveop || saveop->op_type != OP_REQUIRE)
2711 CvOUTSIDE(PL_compcv) = (CV*)SvREFCNT_inc(caller);
2713 SAVEFREESV(PL_compcv);
2715 /* make sure we compile in the right package */
2717 newstash = PL_curcop->cop_stash;
2718 if (PL_curstash != newstash) {
2719 SAVESPTR(PL_curstash);
2720 PL_curstash = newstash;
2722 SAVESPTR(PL_beginav);
2723 PL_beginav = newAV();
2724 SAVEFREESV(PL_beginav);
2726 /* try to compile it */
2728 PL_eval_root = Nullop;
2730 PL_curcop = &PL_compiling;
2731 PL_curcop->cop_arybase = 0;
2732 SvREFCNT_dec(PL_rs);
2733 PL_rs = newSVpvn("\n", 1);
2734 if (saveop && saveop->op_flags & OPf_SPECIAL)
2735 PL_in_eval |= EVAL_KEEPERR;
2738 if (yyparse() || PL_error_count || !PL_eval_root) {
2742 I32 optype = 0; /* Might be reset by POPEVAL. */
2747 op_free(PL_eval_root);
2748 PL_eval_root = Nullop;
2750 SP = PL_stack_base + POPMARK; /* pop original mark */
2752 POPBLOCK(cx,PL_curpm);
2758 if (optype == OP_REQUIRE) {
2759 char* msg = SvPVx(ERRSV, n_a);
2760 DIE(aTHX_ "%s", *msg ? msg : "Compilation failed in require");
2761 } else if (startop) {
2762 char* msg = SvPVx(ERRSV, n_a);
2764 POPBLOCK(cx,PL_curpm);
2766 Perl_croak(aTHX_ "%sCompilation failed in regexp", (*msg ? msg : "Unknown error\n"));
2768 SvREFCNT_dec(PL_rs);
2769 PL_rs = SvREFCNT_inc(PL_nrs);
2771 MUTEX_LOCK(&PL_eval_mutex);
2773 COND_SIGNAL(&PL_eval_cond);
2774 MUTEX_UNLOCK(&PL_eval_mutex);
2775 #endif /* USE_THREADS */
2778 SvREFCNT_dec(PL_rs);
2779 PL_rs = SvREFCNT_inc(PL_nrs);
2780 PL_compiling.cop_line = 0;
2782 *startop = PL_eval_root;
2783 SvREFCNT_dec(CvOUTSIDE(PL_compcv));
2784 CvOUTSIDE(PL_compcv) = Nullcv;
2786 SAVEFREEOP(PL_eval_root);
2788 scalarvoid(PL_eval_root);
2789 else if (gimme & G_ARRAY)
2792 scalar(PL_eval_root);
2794 DEBUG_x(dump_eval());
2796 /* Register with debugger: */
2797 if (PERLDB_INTER && saveop->op_type == OP_REQUIRE) {
2798 CV *cv = get_cv("DB::postponed", FALSE);
2802 XPUSHs((SV*)PL_compiling.cop_filegv);
2804 call_sv((SV*)cv, G_DISCARD);
2808 /* compiled okay, so do it */
2810 CvDEPTH(PL_compcv) = 1;
2811 SP = PL_stack_base + POPMARK; /* pop original mark */
2812 PL_op = saveop; /* The caller may need it. */
2814 MUTEX_LOCK(&PL_eval_mutex);
2816 COND_SIGNAL(&PL_eval_cond);
2817 MUTEX_UNLOCK(&PL_eval_mutex);
2818 #endif /* USE_THREADS */
2820 RETURNOP(PL_eval_start);
2824 S_doopen_pmc(pTHX_ const char *name, const char *mode)
2826 STRLEN namelen = strlen(name);
2829 if (namelen > 3 && strEQ(name + namelen - 3, ".pm")) {
2830 SV *pmcsv = Perl_newSVpvf(aTHX_ "%s%c", name, 'c');
2831 char *pmc = SvPV_nolen(pmcsv);
2834 if (PerlLIO_stat(pmc, &pmcstat) < 0) {
2835 fp = PerlIO_open(name, mode);
2838 if (PerlLIO_stat(name, &pmstat) < 0 ||
2839 pmstat.st_mtime < pmcstat.st_mtime)
2841 fp = PerlIO_open(pmc, mode);
2844 fp = PerlIO_open(name, mode);
2847 SvREFCNT_dec(pmcsv);
2850 fp = PerlIO_open(name, mode);
2858 register PERL_CONTEXT *cx;
2863 SV *namesv = Nullsv;
2865 I32 gimme = G_SCALAR;
2866 PerlIO *tryrsfp = 0;
2870 if (SvNIOKp(sv) && !SvPOKp(sv)) {
2871 if (Atof(PL_patchlevel) + 0.00000999 < SvNV(sv))
2872 DIE(aTHX_ "Perl %s required--this is only version %s, stopped",
2873 SvPV(sv,n_a),PL_patchlevel);
2876 name = SvPV(sv, len);
2877 if (!(name && len > 0 && *name))
2878 DIE(aTHX_ "Null filename used");
2879 TAINT_PROPER("require");
2880 if (PL_op->op_type == OP_REQUIRE &&
2881 (svp = hv_fetch(GvHVn(PL_incgv), name, len, 0)) &&
2882 *svp != &PL_sv_undef)
2885 /* prepare to compile file */
2890 (name[1] == '.' && name[2] == '/')))
2892 || (name[0] && name[1] == ':')
2895 || (name[0] == '\\' && name[1] == '\\') /* UNC path */
2898 || (strchr(name,':') || ((*name == '[' || *name == '<') &&
2899 (isALNUM(name[1]) || strchr("$-_]>",name[1]))))
2904 tryrsfp = doopen_pmc(name,PERL_SCRIPT_MODE);
2907 AV *ar = GvAVn(PL_incgv);
2911 if ((unixname = tounixspec(name, Nullch)) != Nullch)
2914 namesv = NEWSV(806, 0);
2915 for (i = 0; i <= AvFILL(ar); i++) {
2916 char *dir = SvPVx(*av_fetch(ar, i, TRUE), n_a);
2919 if ((unixdir = tounixpath(dir, Nullch)) == Nullch)
2921 sv_setpv(namesv, unixdir);
2922 sv_catpv(namesv, unixname);
2924 Perl_sv_setpvf(aTHX_ namesv, "%s/%s", dir, name);
2926 TAINT_PROPER("require");
2927 tryname = SvPVX(namesv);
2928 tryrsfp = doopen_pmc(tryname, PERL_SCRIPT_MODE);
2930 if (tryname[0] == '.' && tryname[1] == '/')
2937 SAVESPTR(PL_compiling.cop_filegv);
2938 PL_compiling.cop_filegv = gv_fetchfile(tryrsfp ? tryname : name);
2939 SvREFCNT_dec(namesv);
2941 if (PL_op->op_type == OP_REQUIRE) {
2942 char *msgstr = name;
2943 if (namesv) { /* did we lookup @INC? */
2944 SV *msg = sv_2mortal(newSVpv(msgstr,0));
2945 SV *dirmsgsv = NEWSV(0, 0);
2946 AV *ar = GvAVn(PL_incgv);
2948 sv_catpvn(msg, " in @INC", 8);
2949 if (instr(SvPVX(msg), ".h "))
2950 sv_catpv(msg, " (change .h to .ph maybe?)");
2951 if (instr(SvPVX(msg), ".ph "))
2952 sv_catpv(msg, " (did you run h2ph?)");
2953 sv_catpv(msg, " (@INC contains:");
2954 for (i = 0; i <= AvFILL(ar); i++) {
2955 char *dir = SvPVx(*av_fetch(ar, i, TRUE), n_a);
2956 Perl_sv_setpvf(aTHX_ dirmsgsv, " %s", dir);
2957 sv_catsv(msg, dirmsgsv);
2959 sv_catpvn(msg, ")", 1);
2960 SvREFCNT_dec(dirmsgsv);
2961 msgstr = SvPV_nolen(msg);
2963 DIE(aTHX_ "Can't locate %s", msgstr);
2969 SETERRNO(0, SS$_NORMAL);
2971 /* Assume success here to prevent recursive requirement. */
2972 (void)hv_store(GvHVn(PL_incgv), name, strlen(name),
2973 newSVsv(GvSV(PL_compiling.cop_filegv)), 0 );
2977 lex_start(sv_2mortal(newSVpvn("",0)));
2978 SAVEGENERICSV(PL_rsfp_filters);
2979 PL_rsfp_filters = Nullav;
2982 name = savepv(name);
2986 SAVEPPTR(PL_compiling.cop_warnings);
2987 PL_compiling.cop_warnings = ((PL_dowarn & G_WARN_ALL_ON) ? WARN_ALL
2990 /* switch to eval mode */
2992 push_return(PL_op->op_next);
2993 PUSHBLOCK(cx, CXt_EVAL, SP);
2994 PUSHEVAL(cx, name, PL_compiling.cop_filegv);
2996 SAVEI16(PL_compiling.cop_line);
2997 PL_compiling.cop_line = 0;
3001 MUTEX_LOCK(&PL_eval_mutex);
3002 if (PL_eval_owner && PL_eval_owner != thr)
3003 while (PL_eval_owner)
3004 COND_WAIT(&PL_eval_cond, &PL_eval_mutex);
3005 PL_eval_owner = thr;
3006 MUTEX_UNLOCK(&PL_eval_mutex);
3007 #endif /* USE_THREADS */
3008 return DOCATCH(doeval(G_SCALAR, NULL));
3013 return pp_require();
3019 register PERL_CONTEXT *cx;
3021 I32 gimme = GIMME_V, was = PL_sub_generation;
3022 char tmpbuf[TYPE_DIGITS(long) + 12];
3027 if (!SvPV(sv,len) || !len)
3029 TAINT_PROPER("eval");
3035 /* switch to eval mode */
3037 SAVESPTR(PL_compiling.cop_filegv);
3038 sprintf(tmpbuf, "_<(eval %lu)", (unsigned long)++PL_evalseq);
3039 PL_compiling.cop_filegv = gv_fetchfile(tmpbuf+2);
3040 PL_compiling.cop_line = 1;
3041 /* XXX For C<eval "...">s within BEGIN {} blocks, this ends up
3042 deleting the eval's FILEGV from the stash before gv_check() runs
3043 (i.e. before run-time proper). To work around the coredump that
3044 ensues, we always turn GvMULTI_on for any globals that were
3045 introduced within evals. See force_ident(). GSAR 96-10-12 */
3046 safestr = savepv(tmpbuf);
3047 SAVEDELETE(PL_defstash, safestr, strlen(safestr));
3049 PL_hints = PL_op->op_targ;
3050 SAVEPPTR(PL_compiling.cop_warnings);
3051 if (PL_compiling.cop_warnings != WARN_ALL
3052 && PL_compiling.cop_warnings != WARN_NONE){
3053 PL_compiling.cop_warnings = newSVsv(PL_compiling.cop_warnings) ;
3054 SAVEFREESV(PL_compiling.cop_warnings) ;
3057 push_return(PL_op->op_next);
3058 PUSHBLOCK(cx, (CXt_EVAL|CXp_REAL), SP);
3059 PUSHEVAL(cx, 0, PL_compiling.cop_filegv);
3061 /* prepare to compile string */
3063 if (PERLDB_LINE && PL_curstash != PL_debstash)
3064 save_lines(GvAV(PL_compiling.cop_filegv), PL_linestr);
3067 MUTEX_LOCK(&PL_eval_mutex);
3068 if (PL_eval_owner && PL_eval_owner != thr)
3069 while (PL_eval_owner)
3070 COND_WAIT(&PL_eval_cond, &PL_eval_mutex);
3071 PL_eval_owner = thr;
3072 MUTEX_UNLOCK(&PL_eval_mutex);
3073 #endif /* USE_THREADS */
3074 ret = doeval(gimme, NULL);
3075 if (PERLDB_INTER && was != PL_sub_generation /* Some subs defined here. */
3076 && ret != PL_op->op_next) { /* Successive compilation. */
3077 strcpy(safestr, "_<(eval )"); /* Anything fake and short. */
3079 return DOCATCH(ret);
3089 register PERL_CONTEXT *cx;
3091 U8 save_flags = PL_op -> op_flags;
3096 retop = pop_return();
3099 if (gimme == G_VOID)
3101 else if (gimme == G_SCALAR) {
3104 if (SvFLAGS(TOPs) & SVs_TEMP)
3107 *MARK = sv_mortalcopy(TOPs);
3111 *MARK = &PL_sv_undef;
3115 /* in case LEAVE wipes old return values */
3116 for (mark = newsp + 1; mark <= SP; mark++) {
3117 if (!(SvFLAGS(*mark) & SVs_TEMP)) {
3118 *mark = sv_mortalcopy(*mark);
3119 TAINT_NOT; /* Each item is independent */
3123 PL_curpm = newpm; /* Don't pop $1 et al till now */
3125 if (AvFILLp(PL_comppad_name) >= 0)
3129 assert(CvDEPTH(PL_compcv) == 1);
3131 CvDEPTH(PL_compcv) = 0;
3134 if (optype == OP_REQUIRE &&
3135 !(gimme == G_SCALAR ? SvTRUE(*SP) : SP > newsp))
3137 /* Unassume the success we assumed earlier. */
3138 char *name = cx->blk_eval.old_name;
3139 (void)hv_delete(GvHVn(PL_incgv), name, strlen(name), G_DISCARD);
3140 retop = Perl_die(aTHX_ "%s did not return a true value", name);
3141 /* die_where() did LEAVE, or we won't be here */
3145 if (!(save_flags & OPf_SPECIAL))
3155 register PERL_CONTEXT *cx;
3156 I32 gimme = GIMME_V;
3161 push_return(cLOGOP->op_other->op_next);
3162 PUSHBLOCK(cx, CXt_EVAL, SP);
3164 PL_eval_root = PL_op; /* Only needed so that goto works right. */
3166 PL_in_eval = EVAL_INEVAL;
3169 return DOCATCH(PL_op->op_next);
3179 register PERL_CONTEXT *cx;
3187 if (gimme == G_VOID)
3189 else if (gimme == G_SCALAR) {
3192 if (SvFLAGS(TOPs) & (SVs_PADTMP|SVs_TEMP))
3195 *MARK = sv_mortalcopy(TOPs);
3199 *MARK = &PL_sv_undef;
3204 /* in case LEAVE wipes old return values */
3205 for (mark = newsp + 1; mark <= SP; mark++) {
3206 if (!(SvFLAGS(*mark) & (SVs_PADTMP|SVs_TEMP))) {
3207 *mark = sv_mortalcopy(*mark);
3208 TAINT_NOT; /* Each item is independent */
3212 PL_curpm = newpm; /* Don't pop $1 et al till now */
3220 S_doparseform(pTHX_ SV *sv)
3223 register char *s = SvPV_force(sv, len);
3224 register char *send = s + len;
3225 register char *base;
3226 register I32 skipspaces = 0;
3229 bool postspace = FALSE;
3237 Perl_croak(aTHX_ "Null picture in formline");
3239 New(804, fops, (send - s)*3+10, U16); /* Almost certainly too long... */
3244 *fpc++ = FF_LINEMARK;
3245 noblank = repeat = FALSE;
3263 case ' ': case '\t':
3274 *fpc++ = FF_LITERAL;
3282 *fpc++ = skipspaces;
3286 *fpc++ = FF_NEWLINE;
3290 arg = fpc - linepc + 1;
3297 *fpc++ = FF_LINEMARK;
3298 noblank = repeat = FALSE;
3307 ischop = s[-1] == '^';
3313 arg = (s - base) - 1;
3315 *fpc++ = FF_LITERAL;
3324 *fpc++ = FF_LINEGLOB;
3326 else if (*s == '#' || (*s == '.' && s[1] == '#')) {
3327 arg = ischop ? 512 : 0;
3337 arg |= 256 + (s - f);
3339 *fpc++ = s - base; /* fieldsize for FETCH */
3340 *fpc++ = FF_DECIMAL;
3345 bool ismore = FALSE;
3348 while (*++s == '>') ;
3349 prespace = FF_SPACE;
3351 else if (*s == '|') {
3352 while (*++s == '|') ;
3353 prespace = FF_HALFSPACE;
3358 while (*++s == '<') ;
3361 if (*s == '.' && s[1] == '.' && s[2] == '.') {
3365 *fpc++ = s - base; /* fieldsize for FETCH */
3367 *fpc++ = ischop ? FF_CHECKCHOP : FF_CHECKNL;
3385 { /* need to jump to the next word */
3387 z = WORD_ALIGN - SvCUR(sv) % WORD_ALIGN;
3388 SvGROW(sv, SvCUR(sv) + z + arg * sizeof(U16) + 4);
3389 s = SvPVX(sv) + SvCUR(sv) + z;
3391 Copy(fops, s, arg, U16);
3393 sv_magic(sv, Nullsv, 'f', Nullch, 0);
3398 * The rest of this file was derived from source code contributed
3401 * NOTE: this code was derived from Tom Horsley's qsort replacement
3402 * and should not be confused with the original code.
3405 /* Copyright (C) Tom Horsley, 1997. All rights reserved.
3407 Permission granted to distribute under the same terms as perl which are
3410 This program is free software; you can redistribute it and/or modify
3411 it under the terms of either:
3413 a) the GNU General Public License as published by the Free
3414 Software Foundation; either version 1, or (at your option) any
3417 b) the "Artistic License" which comes with this Kit.
3419 Details on the perl license can be found in the perl source code which
3420 may be located via the www.perl.com web page.
3422 This is the most wonderfulest possible qsort I can come up with (and
3423 still be mostly portable) My (limited) tests indicate it consistently
3424 does about 20% fewer calls to compare than does the qsort in the Visual
3425 C++ library, other vendors may vary.
3427 Some of the ideas in here can be found in "Algorithms" by Sedgewick,
3428 others I invented myself (or more likely re-invented since they seemed
3429 pretty obvious once I watched the algorithm operate for a while).
3431 Most of this code was written while watching the Marlins sweep the Giants
3432 in the 1997 National League Playoffs - no Braves fans allowed to use this
3433 code (just kidding :-).
3435 I realize that if I wanted to be true to the perl tradition, the only
3436 comment in this file would be something like:
3438 ...they shuffled back towards the rear of the line. 'No, not at the
3439 rear!' the slave-driver shouted. 'Three files up. And stay there...
3441 However, I really needed to violate that tradition just so I could keep
3442 track of what happens myself, not to mention some poor fool trying to
3443 understand this years from now :-).
3446 /* ********************************************************** Configuration */
3448 #ifndef QSORT_ORDER_GUESS
3449 #define QSORT_ORDER_GUESS 2 /* Select doubling version of the netBSD trick */
3452 /* QSORT_MAX_STACK is the largest number of partitions that can be stacked up for
3453 future processing - a good max upper bound is log base 2 of memory size
3454 (32 on 32 bit machines, 64 on 64 bit machines, etc). In reality can
3455 safely be smaller than that since the program is taking up some space and
3456 most operating systems only let you grab some subset of contiguous
3457 memory (not to mention that you are normally sorting data larger than
3458 1 byte element size :-).
3460 #ifndef QSORT_MAX_STACK
3461 #define QSORT_MAX_STACK 32
3464 /* QSORT_BREAK_EVEN is the size of the largest partition we should insertion sort.
3465 Anything bigger and we use qsort. If you make this too small, the qsort
3466 will probably break (or become less efficient), because it doesn't expect
3467 the middle element of a partition to be the same as the right or left -
3468 you have been warned).
3470 #ifndef QSORT_BREAK_EVEN
3471 #define QSORT_BREAK_EVEN 6
3474 /* ************************************************************* Data Types */
3476 /* hold left and right index values of a partition waiting to be sorted (the
3477 partition includes both left and right - right is NOT one past the end or
3478 anything like that).
3480 struct partition_stack_entry {
3483 #ifdef QSORT_ORDER_GUESS
3484 int qsort_break_even;
3488 /* ******************************************************* Shorthand Macros */
3490 /* Note that these macros will be used from inside the qsort function where
3491 we happen to know that the variable 'elt_size' contains the size of an
3492 array element and the variable 'temp' points to enough space to hold a
3493 temp element and the variable 'array' points to the array being sorted
3494 and 'compare' is the pointer to the compare routine.
3496 Also note that there are very many highly architecture specific ways
3497 these might be sped up, but this is simply the most generally portable
3498 code I could think of.
3501 /* Return < 0 == 0 or > 0 as the value of elt1 is < elt2, == elt2, > elt2
3504 #define qsort_cmp(elt1, elt2) \
3505 ((this->*compare)(array[elt1], array[elt2]))
3507 #define qsort_cmp(elt1, elt2) \
3508 ((*compare)(aTHX_ array[elt1], array[elt2]))
3511 #ifdef QSORT_ORDER_GUESS
3512 #define QSORT_NOTICE_SWAP swapped++;
3514 #define QSORT_NOTICE_SWAP
3517 /* swaps contents of array elements elt1, elt2.
3519 #define qsort_swap(elt1, elt2) \
3522 temp = array[elt1]; \
3523 array[elt1] = array[elt2]; \
3524 array[elt2] = temp; \
3527 /* rotate contents of elt1, elt2, elt3 such that elt1 gets elt2, elt2 gets
3528 elt3 and elt3 gets elt1.
3530 #define qsort_rotate(elt1, elt2, elt3) \
3533 temp = array[elt1]; \
3534 array[elt1] = array[elt2]; \
3535 array[elt2] = array[elt3]; \
3536 array[elt3] = temp; \
3539 /* ************************************************************ Debug stuff */
3546 return; /* good place to set a breakpoint */
3549 #define qsort_assert(t) (void)( (t) || (break_here(), 0) )
3552 doqsort_all_asserts(
3556 int (*compare)(const void * elt1, const void * elt2),
3557 int pc_left, int pc_right, int u_left, int u_right)
3561 qsort_assert(pc_left <= pc_right);
3562 qsort_assert(u_right < pc_left);
3563 qsort_assert(pc_right < u_left);
3564 for (i = u_right + 1; i < pc_left; ++i) {
3565 qsort_assert(qsort_cmp(i, pc_left) < 0);
3567 for (i = pc_left; i < pc_right; ++i) {
3568 qsort_assert(qsort_cmp(i, pc_right) == 0);
3570 for (i = pc_right + 1; i < u_left; ++i) {
3571 qsort_assert(qsort_cmp(pc_right, i) < 0);
3575 #define qsort_all_asserts(PC_LEFT, PC_RIGHT, U_LEFT, U_RIGHT) \
3576 doqsort_all_asserts(array, num_elts, elt_size, compare, \
3577 PC_LEFT, PC_RIGHT, U_LEFT, U_RIGHT)
3581 #define qsort_assert(t) ((void)0)
3583 #define qsort_all_asserts(PC_LEFT, PC_RIGHT, U_LEFT, U_RIGHT) ((void)0)
3587 /* ****************************************************************** qsort */
3590 S_qsortsv(pTHX_ SV ** array, size_t num_elts, SVCOMPARE_t compare)
3594 struct partition_stack_entry partition_stack[QSORT_MAX_STACK];
3595 int next_stack_entry = 0;
3599 #ifdef QSORT_ORDER_GUESS
3600 int qsort_break_even;
3604 /* Make sure we actually have work to do.
3606 if (num_elts <= 1) {
3610 /* Setup the initial partition definition and fall into the sorting loop
3613 part_right = (int)(num_elts - 1);
3614 #ifdef QSORT_ORDER_GUESS
3615 qsort_break_even = QSORT_BREAK_EVEN;
3617 #define qsort_break_even QSORT_BREAK_EVEN
3620 if ((part_right - part_left) >= qsort_break_even) {
3621 /* OK, this is gonna get hairy, so lets try to document all the
3622 concepts and abbreviations and variables and what they keep
3625 pc: pivot chunk - the set of array elements we accumulate in the
3626 middle of the partition, all equal in value to the original
3627 pivot element selected. The pc is defined by:
3629 pc_left - the leftmost array index of the pc
3630 pc_right - the rightmost array index of the pc
3632 we start with pc_left == pc_right and only one element
3633 in the pivot chunk (but it can grow during the scan).
3635 u: uncompared elements - the set of elements in the partition
3636 we have not yet compared to the pivot value. There are two
3637 uncompared sets during the scan - one to the left of the pc
3638 and one to the right.
3640 u_right - the rightmost index of the left side's uncompared set
3641 u_left - the leftmost index of the right side's uncompared set
3643 The leftmost index of the left sides's uncompared set
3644 doesn't need its own variable because it is always defined
3645 by the leftmost edge of the whole partition (part_left). The
3646 same goes for the rightmost edge of the right partition
3649 We know there are no uncompared elements on the left once we
3650 get u_right < part_left and no uncompared elements on the
3651 right once u_left > part_right. When both these conditions
3652 are met, we have completed the scan of the partition.
3654 Any elements which are between the pivot chunk and the
3655 uncompared elements should be less than the pivot value on
3656 the left side and greater than the pivot value on the right
3657 side (in fact, the goal of the whole algorithm is to arrange
3658 for that to be true and make the groups of less-than and
3659 greater-then elements into new partitions to sort again).
3661 As you marvel at the complexity of the code and wonder why it
3662 has to be so confusing. Consider some of the things this level
3663 of confusion brings:
3665 Once I do a compare, I squeeze every ounce of juice out of it. I
3666 never do compare calls I don't have to do, and I certainly never
3669 I also never swap any elements unless I can prove there is a
3670 good reason. Many sort algorithms will swap a known value with
3671 an uncompared value just to get things in the right place (or
3672 avoid complexity :-), but that uncompared value, once it gets
3673 compared, may then have to be swapped again. A lot of the
3674 complexity of this code is due to the fact that it never swaps
3675 anything except compared values, and it only swaps them when the
3676 compare shows they are out of position.
3678 int pc_left, pc_right;
3679 int u_right, u_left;
3683 pc_left = ((part_left + part_right) / 2);
3685 u_right = pc_left - 1;
3686 u_left = pc_right + 1;
3688 /* Qsort works best when the pivot value is also the median value
3689 in the partition (unfortunately you can't find the median value
3690 without first sorting :-), so to give the algorithm a helping
3691 hand, we pick 3 elements and sort them and use the median value
3692 of that tiny set as the pivot value.
3694 Some versions of qsort like to use the left middle and right as
3695 the 3 elements to sort so they can insure the ends of the
3696 partition will contain values which will stop the scan in the
3697 compare loop, but when you have to call an arbitrarily complex
3698 routine to do a compare, its really better to just keep track of
3699 array index values to know when you hit the edge of the
3700 partition and avoid the extra compare. An even better reason to
3701 avoid using a compare call is the fact that you can drop off the
3702 edge of the array if someone foolishly provides you with an
3703 unstable compare function that doesn't always provide consistent
3706 So, since it is simpler for us to compare the three adjacent
3707 elements in the middle of the partition, those are the ones we
3708 pick here (conveniently pointed at by u_right, pc_left, and
3709 u_left). The values of the left, center, and right elements
3710 are refered to as l c and r in the following comments.
3713 #ifdef QSORT_ORDER_GUESS
3716 s = qsort_cmp(u_right, pc_left);
3719 s = qsort_cmp(pc_left, u_left);
3720 /* if l < c, c < r - already in order - nothing to do */
3722 /* l < c, c == r - already in order, pc grows */
3724 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3726 /* l < c, c > r - need to know more */
3727 s = qsort_cmp(u_right, u_left);
3729 /* l < c, c > r, l < r - swap c & r to get ordered */
3730 qsort_swap(pc_left, u_left);
3731 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3732 } else if (s == 0) {
3733 /* l < c, c > r, l == r - swap c&r, grow pc */
3734 qsort_swap(pc_left, u_left);
3736 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3738 /* l < c, c > r, l > r - make lcr into rlc to get ordered */
3739 qsort_rotate(pc_left, u_right, u_left);
3740 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3743 } else if (s == 0) {
3745 s = qsort_cmp(pc_left, u_left);
3747 /* l == c, c < r - already in order, grow pc */
3749 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3750 } else if (s == 0) {
3751 /* l == c, c == r - already in order, grow pc both ways */
3754 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3756 /* l == c, c > r - swap l & r, grow pc */
3757 qsort_swap(u_right, u_left);
3759 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3763 s = qsort_cmp(pc_left, u_left);
3765 /* l > c, c < r - need to know more */
3766 s = qsort_cmp(u_right, u_left);
3768 /* l > c, c < r, l < r - swap l & c to get ordered */
3769 qsort_swap(u_right, pc_left);
3770 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3771 } else if (s == 0) {
3772 /* l > c, c < r, l == r - swap l & c, grow pc */
3773 qsort_swap(u_right, pc_left);
3775 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3777 /* l > c, c < r, l > r - rotate lcr into crl to order */
3778 qsort_rotate(u_right, pc_left, u_left);
3779 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3781 } else if (s == 0) {
3782 /* l > c, c == r - swap ends, grow pc */
3783 qsort_swap(u_right, u_left);
3785 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3787 /* l > c, c > r - swap ends to get in order */
3788 qsort_swap(u_right, u_left);
3789 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3792 /* We now know the 3 middle elements have been compared and
3793 arranged in the desired order, so we can shrink the uncompared
3798 qsort_all_asserts(pc_left, pc_right, u_left, u_right);
3800 /* The above massive nested if was the simple part :-). We now have
3801 the middle 3 elements ordered and we need to scan through the
3802 uncompared sets on either side, swapping elements that are on
3803 the wrong side or simply shuffling equal elements around to get
3804 all equal elements into the pivot chunk.
3808 int still_work_on_left;
3809 int still_work_on_right;
3811 /* Scan the uncompared values on the left. If I find a value
3812 equal to the pivot value, move it over so it is adjacent to
3813 the pivot chunk and expand the pivot chunk. If I find a value
3814 less than the pivot value, then just leave it - its already
3815 on the correct side of the partition. If I find a greater
3816 value, then stop the scan.
3818 while (still_work_on_left = (u_right >= part_left)) {
3819 s = qsort_cmp(u_right, pc_left);
3822 } else if (s == 0) {
3824 if (pc_left != u_right) {
3825 qsort_swap(u_right, pc_left);
3831 qsort_assert(u_right < pc_left);
3832 qsort_assert(pc_left <= pc_right);
3833 qsort_assert(qsort_cmp(u_right + 1, pc_left) <= 0);
3834 qsort_assert(qsort_cmp(pc_left, pc_right) == 0);
3837 /* Do a mirror image scan of uncompared values on the right
3839 while (still_work_on_right = (u_left <= part_right)) {
3840 s = qsort_cmp(pc_right, u_left);
3843 } else if (s == 0) {
3845 if (pc_right != u_left) {
3846 qsort_swap(pc_right, u_left);
3852 qsort_assert(u_left > pc_right);
3853 qsort_assert(pc_left <= pc_right);
3854 qsort_assert(qsort_cmp(pc_right, u_left - 1) <= 0);
3855 qsort_assert(qsort_cmp(pc_left, pc_right) == 0);
3858 if (still_work_on_left) {
3859 /* I know I have a value on the left side which needs to be
3860 on the right side, but I need to know more to decide
3861 exactly the best thing to do with it.
3863 if (still_work_on_right) {
3864 /* I know I have values on both side which are out of
3865 position. This is a big win because I kill two birds
3866 with one swap (so to speak). I can advance the
3867 uncompared pointers on both sides after swapping both
3868 of them into the right place.
3870 qsort_swap(u_right, u_left);
3873 qsort_all_asserts(pc_left, pc_right, u_left, u_right);
3875 /* I have an out of position value on the left, but the
3876 right is fully scanned, so I "slide" the pivot chunk
3877 and any less-than values left one to make room for the
3878 greater value over on the right. If the out of position
3879 value is immediately adjacent to the pivot chunk (there
3880 are no less-than values), I can do that with a swap,
3881 otherwise, I have to rotate one of the less than values
3882 into the former position of the out of position value
3883 and the right end of the pivot chunk into the left end
3887 if (pc_left == u_right) {
3888 qsort_swap(u_right, pc_right);
3889 qsort_all_asserts(pc_left, pc_right-1, u_left, u_right-1);
3891 qsort_rotate(u_right, pc_left, pc_right);
3892 qsort_all_asserts(pc_left, pc_right-1, u_left, u_right-1);
3897 } else if (still_work_on_right) {
3898 /* Mirror image of complex case above: I have an out of
3899 position value on the right, but the left is fully
3900 scanned, so I need to shuffle things around to make room
3901 for the right value on the left.
3904 if (pc_right == u_left) {
3905 qsort_swap(u_left, pc_left);
3906 qsort_all_asserts(pc_left+1, pc_right, u_left+1, u_right);
3908 qsort_rotate(pc_right, pc_left, u_left);
3909 qsort_all_asserts(pc_left+1, pc_right, u_left+1, u_right);
3914 /* No more scanning required on either side of partition,
3915 break out of loop and figure out next set of partitions
3921 /* The elements in the pivot chunk are now in the right place. They
3922 will never move or be compared again. All I have to do is decide
3923 what to do with the stuff to the left and right of the pivot
3926 Notes on the QSORT_ORDER_GUESS ifdef code:
3928 1. If I just built these partitions without swapping any (or
3929 very many) elements, there is a chance that the elements are
3930 already ordered properly (being properly ordered will
3931 certainly result in no swapping, but the converse can't be
3934 2. A (properly written) insertion sort will run faster on
3935 already ordered data than qsort will.
3937 3. Perhaps there is some way to make a good guess about
3938 switching to an insertion sort earlier than partition size 6
3939 (for instance - we could save the partition size on the stack
3940 and increase the size each time we find we didn't swap, thus
3941 switching to insertion sort earlier for partitions with a
3942 history of not swapping).
3944 4. Naturally, if I just switch right away, it will make
3945 artificial benchmarks with pure ascending (or descending)
3946 data look really good, but is that a good reason in general?
3950 #ifdef QSORT_ORDER_GUESS
3952 #if QSORT_ORDER_GUESS == 1
3953 qsort_break_even = (part_right - part_left) + 1;
3955 #if QSORT_ORDER_GUESS == 2
3956 qsort_break_even *= 2;
3958 #if QSORT_ORDER_GUESS == 3
3959 int prev_break = qsort_break_even;
3960 qsort_break_even *= qsort_break_even;
3961 if (qsort_break_even < prev_break) {
3962 qsort_break_even = (part_right - part_left) + 1;
3966 qsort_break_even = QSORT_BREAK_EVEN;
3970 if (part_left < pc_left) {
3971 /* There are elements on the left which need more processing.
3972 Check the right as well before deciding what to do.
3974 if (pc_right < part_right) {
3975 /* We have two partitions to be sorted. Stack the biggest one
3976 and process the smallest one on the next iteration. This
3977 minimizes the stack height by insuring that any additional
3978 stack entries must come from the smallest partition which
3979 (because it is smallest) will have the fewest
3980 opportunities to generate additional stack entries.
3982 if ((part_right - pc_right) > (pc_left - part_left)) {
3983 /* stack the right partition, process the left */
3984 partition_stack[next_stack_entry].left = pc_right + 1;
3985 partition_stack[next_stack_entry].right = part_right;
3986 #ifdef QSORT_ORDER_GUESS
3987 partition_stack[next_stack_entry].qsort_break_even = qsort_break_even;
3989 part_right = pc_left - 1;
3991 /* stack the left partition, process the right */
3992 partition_stack[next_stack_entry].left = part_left;
3993 partition_stack[next_stack_entry].right = pc_left - 1;
3994 #ifdef QSORT_ORDER_GUESS
3995 partition_stack[next_stack_entry].qsort_break_even = qsort_break_even;
3997 part_left = pc_right + 1;
3999 qsort_assert(next_stack_entry < QSORT_MAX_STACK);
4002 /* The elements on the left are the only remaining elements
4003 that need sorting, arrange for them to be processed as the
4006 part_right = pc_left - 1;
4008 } else if (pc_right < part_right) {
4009 /* There is only one chunk on the right to be sorted, make it
4010 the new partition and loop back around.
4012 part_left = pc_right + 1;
4014 /* This whole partition wound up in the pivot chunk, so
4015 we need to get a new partition off the stack.
4017 if (next_stack_entry == 0) {
4018 /* the stack is empty - we are done */
4022 part_left = partition_stack[next_stack_entry].left;
4023 part_right = partition_stack[next_stack_entry].right;
4024 #ifdef QSORT_ORDER_GUESS
4025 qsort_break_even = partition_stack[next_stack_entry].qsort_break_even;
4029 /* This partition is too small to fool with qsort complexity, just
4030 do an ordinary insertion sort to minimize overhead.
4033 /* Assume 1st element is in right place already, and start checking
4034 at 2nd element to see where it should be inserted.
4036 for (i = part_left + 1; i <= part_right; ++i) {
4038 /* Scan (backwards - just in case 'i' is already in right place)
4039 through the elements already sorted to see if the ith element
4040 belongs ahead of one of them.
4042 for (j = i - 1; j >= part_left; --j) {
4043 if (qsort_cmp(i, j) >= 0) {
4044 /* i belongs right after j
4051 /* Looks like we really need to move some things
4055 for (k = i - 1; k >= j; --k)
4056 array[k + 1] = array[k];
4061 /* That partition is now sorted, grab the next one, or get out
4062 of the loop if there aren't any more.
4065 if (next_stack_entry == 0) {
4066 /* the stack is empty - we are done */
4070 part_left = partition_stack[next_stack_entry].left;
4071 part_right = partition_stack[next_stack_entry].right;
4072 #ifdef QSORT_ORDER_GUESS
4073 qsort_break_even = partition_stack[next_stack_entry].qsort_break_even;
4078 /* Believe it or not, the array is sorted at this point! */