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". */
572 sprintf(t, "%#*.*f", (int) fieldsize, (int) arg & 255, value);
574 sprintf(t, "%*.0f", (int) fieldsize, value);
581 while (t-- > linemark && *t == ' ') ;
589 if (arg) { /* repeat until fields exhausted? */
591 SvCUR_set(PL_formtarget, t - SvPVX(PL_formtarget));
592 lines += FmLINES(PL_formtarget);
595 if (strnEQ(linemark, linemark - arg, arg))
596 DIE(aTHX_ "Runaway format");
598 FmLINES(PL_formtarget) = lines;
600 RETURNOP(cLISTOP->op_first);
613 while (*s && isSPACE(*s) && s < send)
617 arg = fieldsize - itemsize;
624 if (strnEQ(s," ",3)) {
625 while (s > SvPVX(PL_formtarget) && isSPACE(s[-1]))
636 SvCUR_set(PL_formtarget, t - SvPVX(PL_formtarget));
637 FmLINES(PL_formtarget) += lines;
649 if (PL_stack_base + *PL_markstack_ptr == SP) {
651 if (GIMME_V == G_SCALAR)
652 XPUSHs(sv_2mortal(newSViv(0)));
653 RETURNOP(PL_op->op_next->op_next);
655 PL_stack_sp = PL_stack_base + *PL_markstack_ptr + 1;
656 pp_pushmark(); /* push dst */
657 pp_pushmark(); /* push src */
658 ENTER; /* enter outer scope */
661 /* SAVE_DEFSV does *not* suffice here for USE_THREADS */
663 ENTER; /* enter inner scope */
666 src = PL_stack_base[*PL_markstack_ptr];
671 if (PL_op->op_type == OP_MAPSTART)
672 pp_pushmark(); /* push top */
673 return ((LOGOP*)PL_op->op_next)->op_other;
678 DIE(aTHX_ "panic: mapstart"); /* uses grepstart */
684 I32 diff = (SP - PL_stack_base) - *PL_markstack_ptr;
690 ++PL_markstack_ptr[-1];
692 if (diff > PL_markstack_ptr[-1] - PL_markstack_ptr[-2]) {
693 shift = diff - (PL_markstack_ptr[-1] - PL_markstack_ptr[-2]);
694 count = (SP - PL_stack_base) - PL_markstack_ptr[-1] + 2;
699 PL_markstack_ptr[-1] += shift;
700 *PL_markstack_ptr += shift;
704 dst = PL_stack_base + (PL_markstack_ptr[-2] += diff) - 1;
707 *dst-- = SvTEMP(TOPs) ? POPs : sv_mortalcopy(POPs);
709 LEAVE; /* exit inner scope */
712 if (PL_markstack_ptr[-1] > *PL_markstack_ptr) {
716 (void)POPMARK; /* pop top */
717 LEAVE; /* exit outer scope */
718 (void)POPMARK; /* pop src */
719 items = --*PL_markstack_ptr - PL_markstack_ptr[-1];
720 (void)POPMARK; /* pop dst */
721 SP = PL_stack_base + POPMARK; /* pop original mark */
722 if (gimme == G_SCALAR) {
726 else if (gimme == G_ARRAY)
733 ENTER; /* enter inner scope */
736 src = PL_stack_base[PL_markstack_ptr[-1]];
740 RETURNOP(cLOGOP->op_other);
745 S_sv_ncmp(pTHX_ SV *a, SV *b)
747 double nv1 = SvNV(a);
748 double nv2 = SvNV(b);
749 return nv1 < nv2 ? -1 : nv1 > nv2 ? 1 : 0;
753 S_sv_i_ncmp(pTHX_ SV *a, SV *b)
757 return iv1 < iv2 ? -1 : iv1 > iv2 ? 1 : 0;
759 #define tryCALL_AMAGICbin(left,right,meth,svp) STMT_START { \
761 if (PL_amagic_generation) { \
762 if (SvAMAGIC(left)||SvAMAGIC(right))\
763 *svp = amagic_call(left, \
771 S_amagic_ncmp(pTHX_ register SV *a, register SV *b)
774 tryCALL_AMAGICbin(a,b,ncmp,&tmpsv);
779 I32 i = SvIVX(tmpsv);
789 return sv_ncmp(a, b);
793 S_amagic_i_ncmp(pTHX_ register SV *a, register SV *b)
796 tryCALL_AMAGICbin(a,b,ncmp,&tmpsv);
801 I32 i = SvIVX(tmpsv);
811 return sv_i_ncmp(a, b);
815 S_amagic_cmp(pTHX_ register SV *str1, register SV *str2)
818 tryCALL_AMAGICbin(str1,str2,scmp,&tmpsv);
823 I32 i = SvIVX(tmpsv);
833 return sv_cmp(str1, str2);
837 S_amagic_cmp_locale(pTHX_ register SV *str1, register SV *str2)
840 tryCALL_AMAGICbin(str1,str2,scmp,&tmpsv);
845 I32 i = SvIVX(tmpsv);
855 return sv_cmp_locale(str1, str2);
860 djSP; dMARK; dORIGMARK;
862 SV **myorigmark = ORIGMARK;
868 OP* nextop = PL_op->op_next;
871 if (gimme != G_ARRAY) {
877 SAVEPPTR(PL_sortcop);
878 if (PL_op->op_flags & OPf_STACKED) {
879 if (PL_op->op_flags & OPf_SPECIAL) {
880 OP *kid = cLISTOP->op_first->op_sibling; /* pass pushmark */
881 kid = kUNOP->op_first; /* pass rv2gv */
882 kid = kUNOP->op_first; /* pass leave */
883 PL_sortcop = kid->op_next;
884 stash = PL_curcop->cop_stash;
887 cv = sv_2cv(*++MARK, &stash, &gv, 0);
888 if (!(cv && CvROOT(cv))) {
890 SV *tmpstr = sv_newmortal();
891 gv_efullname3(tmpstr, gv, Nullch);
892 if (cv && CvXSUB(cv))
893 DIE(aTHX_ "Xsub \"%s\" called in sort", SvPVX(tmpstr));
894 DIE(aTHX_ "Undefined sort subroutine \"%s\" called",
899 DIE(aTHX_ "Xsub called in sort");
900 DIE(aTHX_ "Undefined subroutine in sort");
902 DIE(aTHX_ "Not a CODE reference in sort");
904 PL_sortcop = CvSTART(cv);
905 SAVESPTR(CvROOT(cv)->op_ppaddr);
906 CvROOT(cv)->op_ppaddr = PL_ppaddr[OP_NULL];
909 PL_curpad = AvARRAY((AV*)AvARRAY(CvPADLIST(cv))[1]);
914 stash = PL_curcop->cop_stash;
918 while (MARK < SP) { /* This may or may not shift down one here. */
920 if (*up = *++MARK) { /* Weed out nulls. */
922 if (!PL_sortcop && !SvPOK(*up)) {
927 (void)sv_2pv(*up, &n_a);
932 max = --up - myorigmark;
937 bool oldcatch = CATCH_GET;
943 PUSHSTACKi(PERLSI_SORT);
944 if (PL_sortstash != stash) {
945 PL_firstgv = gv_fetchpv("a", TRUE, SVt_PV);
946 PL_secondgv = gv_fetchpv("b", TRUE, SVt_PV);
947 PL_sortstash = stash;
950 SAVESPTR(GvSV(PL_firstgv));
951 SAVESPTR(GvSV(PL_secondgv));
953 PUSHBLOCK(cx, CXt_NULL, PL_stack_base);
954 if (!(PL_op->op_flags & OPf_SPECIAL)) {
955 bool hasargs = FALSE;
956 cx->cx_type = CXt_SUB;
957 cx->blk_gimme = G_SCALAR;
960 (void)SvREFCNT_inc(cv); /* in preparation for POPSUB */
962 PL_sortcxix = cxstack_ix;
963 qsortsv((myorigmark+1), max, FUNC_NAME_TO_PTR(S_sortcv));
965 POPBLOCK(cx,PL_curpm);
973 MEXTEND(SP, 20); /* Can't afford stack realloc on signal. */
974 qsortsv(ORIGMARK+1, max,
975 (PL_op->op_private & OPpSORT_NUMERIC)
976 ? ( (PL_op->op_private & OPpSORT_INTEGER)
978 ? FUNC_NAME_TO_PTR(S_amagic_i_ncmp)
979 : FUNC_NAME_TO_PTR(S_sv_i_ncmp))
981 ? FUNC_NAME_TO_PTR(S_amagic_ncmp)
982 : FUNC_NAME_TO_PTR(S_sv_ncmp)))
983 : ( (PL_op->op_private & OPpLOCALE)
985 ? FUNC_NAME_TO_PTR(S_amagic_cmp_locale)
986 : FUNC_NAME_TO_PTR(Perl_sv_cmp_locale))
988 ? FUNC_NAME_TO_PTR(S_amagic_cmp)
989 : FUNC_NAME_TO_PTR(Perl_sv_cmp) )));
990 if (PL_op->op_private & OPpSORT_REVERSE) {
992 SV **q = ORIGMARK+max;
1002 PL_stack_sp = ORIGMARK + max;
1010 if (GIMME == G_ARRAY)
1011 return cCONDOP->op_true;
1012 if (SvTRUEx(PAD_SV(PL_op->op_targ)))
1013 return cCONDOP->op_false;
1015 return cCONDOP->op_true;
1022 if (GIMME == G_ARRAY) {
1023 RETURNOP(((CONDOP*)cUNOP->op_first)->op_false);
1027 SV *targ = PAD_SV(PL_op->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(cUNOP->op_first->op_targ), 1);
1033 if (PL_op->op_flags & OPf_SPECIAL) {
1041 RETURNOP(((CONDOP*)cUNOP->op_first)->op_false);
1054 if (GIMME == G_ARRAY) {
1060 if (SvGMAGICAL(left))
1062 if (SvGMAGICAL(right))
1065 if (SvNIOKp(left) || !SvPOKp(left) ||
1066 (looks_like_number(left) && *SvPVX(left) != '0') )
1068 if (SvNV(left) < IV_MIN || SvNV(right) > IV_MAX)
1069 Perl_croak(aTHX_ "Range iterator outside integer range");
1080 sv = sv_2mortal(newSViv(i++));
1085 SV *final = sv_mortalcopy(right);
1087 char *tmps = SvPV(final, len);
1089 sv = sv_mortalcopy(left);
1091 while (!SvNIOKp(sv) && SvCUR(sv) <= len) {
1093 if (strEQ(SvPVX(sv),tmps))
1095 sv = sv_2mortal(newSVsv(sv));
1102 SV *targ = PAD_SV(cUNOP->op_first->op_targ);
1104 if ((PL_op->op_private & OPpFLIP_LINENUM)
1105 ? (PL_last_in_gv && SvIV(sv) == (IV)IoLINES(GvIOp(PL_last_in_gv)))
1107 sv_setiv(PAD_SV(((UNOP*)cUNOP->op_first)->op_first->op_targ), 0);
1108 sv_catpv(targ, "E0");
1119 S_dopoptolabel(pTHX_ char *label)
1123 register PERL_CONTEXT *cx;
1125 for (i = cxstack_ix; i >= 0; i--) {
1127 switch (CxTYPE(cx)) {
1129 if (ckWARN(WARN_UNSAFE))
1130 Perl_warner(aTHX_ WARN_UNSAFE, "Exiting substitution via %s",
1131 PL_op_name[PL_op->op_type]);
1134 if (ckWARN(WARN_UNSAFE))
1135 Perl_warner(aTHX_ WARN_UNSAFE, "Exiting subroutine via %s",
1136 PL_op_name[PL_op->op_type]);
1139 if (ckWARN(WARN_UNSAFE))
1140 Perl_warner(aTHX_ WARN_UNSAFE, "Exiting eval via %s",
1141 PL_op_name[PL_op->op_type]);
1144 if (ckWARN(WARN_UNSAFE))
1145 Perl_warner(aTHX_ WARN_UNSAFE, "Exiting pseudo-block via %s",
1146 PL_op_name[PL_op->op_type]);
1149 if (!cx->blk_loop.label ||
1150 strNE(label, cx->blk_loop.label) ) {
1151 DEBUG_l(Perl_deb(aTHX_ "(Skipping label #%ld %s)\n",
1152 (long)i, cx->blk_loop.label));
1155 DEBUG_l( Perl_deb(aTHX_ "(Found label #%ld %s)\n", (long)i, label));
1163 Perl_dowantarray(pTHX)
1165 I32 gimme = block_gimme();
1166 return (gimme == G_VOID) ? G_SCALAR : gimme;
1170 Perl_block_gimme(pTHX)
1175 cxix = dopoptosub(cxstack_ix);
1179 switch (cxstack[cxix].blk_gimme) {
1187 Perl_croak(aTHX_ "panic: bad gimme: %d\n", cxstack[cxix].blk_gimme);
1194 S_dopoptosub(pTHX_ I32 startingblock)
1197 return dopoptosub_at(cxstack, startingblock);
1201 S_dopoptosub_at(pTHX_ PERL_CONTEXT *cxstk, I32 startingblock)
1205 register PERL_CONTEXT *cx;
1206 for (i = startingblock; i >= 0; i--) {
1208 switch (CxTYPE(cx)) {
1213 DEBUG_l( Perl_deb(aTHX_ "(Found sub #%ld)\n", (long)i));
1221 S_dopoptoeval(pTHX_ I32 startingblock)
1225 register PERL_CONTEXT *cx;
1226 for (i = startingblock; i >= 0; i--) {
1228 switch (CxTYPE(cx)) {
1232 DEBUG_l( Perl_deb(aTHX_ "(Found eval #%ld)\n", (long)i));
1240 S_dopoptoloop(pTHX_ I32 startingblock)
1244 register PERL_CONTEXT *cx;
1245 for (i = startingblock; i >= 0; i--) {
1247 switch (CxTYPE(cx)) {
1249 if (ckWARN(WARN_UNSAFE))
1250 Perl_warner(aTHX_ WARN_UNSAFE, "Exiting substitution via %s",
1251 PL_op_name[PL_op->op_type]);
1254 if (ckWARN(WARN_UNSAFE))
1255 Perl_warner(aTHX_ WARN_UNSAFE, "Exiting subroutine via %s",
1256 PL_op_name[PL_op->op_type]);
1259 if (ckWARN(WARN_UNSAFE))
1260 Perl_warner(aTHX_ WARN_UNSAFE, "Exiting eval via %s",
1261 PL_op_name[PL_op->op_type]);
1264 if (ckWARN(WARN_UNSAFE))
1265 Perl_warner(aTHX_ WARN_UNSAFE, "Exiting pseudo-block via %s",
1266 PL_op_name[PL_op->op_type]);
1269 DEBUG_l( Perl_deb(aTHX_ "(Found loop #%ld)\n", (long)i));
1277 Perl_dounwind(pTHX_ I32 cxix)
1280 register PERL_CONTEXT *cx;
1284 while (cxstack_ix > cxix) {
1285 cx = &cxstack[cxstack_ix];
1286 DEBUG_l(PerlIO_printf(Perl_debug_log, "Unwinding block %ld, type %s\n",
1287 (long) cxstack_ix, PL_block_type[CxTYPE(cx)]));
1288 /* Note: we don't need to restore the base context info till the end. */
1289 switch (CxTYPE(cx)) {
1292 continue; /* not break */
1310 * Closures mentioned at top level of eval cannot be referenced
1311 * again, and their presence indirectly causes a memory leak.
1312 * (Note that the fact that compcv and friends are still set here
1313 * is, AFAIK, an accident.) --Chip
1315 * XXX need to get comppad et al from eval's cv rather than
1316 * relying on the incidental global values.
1319 S_free_closures(pTHX)
1322 SV **svp = AvARRAY(PL_comppad_name);
1324 for (ix = AvFILLp(PL_comppad_name); ix >= 0; ix--) {
1326 if (sv && sv != &PL_sv_undef && *SvPVX(sv) == '&') {
1328 svp[ix] = &PL_sv_undef;
1332 SvREFCNT_dec(CvOUTSIDE(sv));
1333 CvOUTSIDE(sv) = Nullcv;
1346 Perl_die_where(pTHX_ char *message, STRLEN msglen)
1352 register PERL_CONTEXT *cx;
1357 if (PL_in_eval & EVAL_KEEPERR) {
1360 svp = hv_fetch(ERRHV, message, msglen, TRUE);
1363 static char prefix[] = "\t(in cleanup) ";
1365 sv_upgrade(*svp, SVt_IV);
1366 (void)SvIOK_only(*svp);
1369 SvGROW(err, SvCUR(err)+sizeof(prefix)+msglen);
1370 sv_catpvn(err, prefix, sizeof(prefix)-1);
1371 sv_catpvn(err, message, msglen);
1372 if (ckWARN(WARN_UNSAFE)) {
1373 STRLEN start = SvCUR(err)-msglen-sizeof(prefix)+1;
1374 Perl_warner(aTHX_ WARN_UNSAFE, SvPVX(err)+start);
1381 sv_setpvn(ERRSV, message, msglen);
1384 message = SvPVx(ERRSV, msglen);
1386 while ((cxix = dopoptoeval(cxstack_ix)) < 0 && PL_curstackinfo->si_prev) {
1394 if (cxix < cxstack_ix)
1397 POPBLOCK(cx,PL_curpm);
1398 if (CxTYPE(cx) != CXt_EVAL) {
1399 PerlIO_write(PerlIO_stderr(), "panic: die ", 11);
1400 PerlIO_write(PerlIO_stderr(), message, msglen);
1405 if (gimme == G_SCALAR)
1406 *++newsp = &PL_sv_undef;
1407 PL_stack_sp = newsp;
1411 if (optype == OP_REQUIRE) {
1412 char* msg = SvPVx(ERRSV, n_a);
1413 DIE(aTHX_ "%s", *msg ? msg : "Compilation failed in require");
1415 return pop_return();
1419 message = SvPVx(ERRSV, msglen);
1422 /* SFIO can really mess with your errno */
1425 PerlIO_write(PerlIO_stderr(), message, msglen);
1426 (void)PerlIO_flush(PerlIO_stderr());
1439 if (SvTRUE(left) != SvTRUE(right))
1451 RETURNOP(cLOGOP->op_other);
1460 RETURNOP(cLOGOP->op_other);
1466 register I32 cxix = dopoptosub(cxstack_ix);
1467 register PERL_CONTEXT *cx;
1468 register PERL_CONTEXT *ccstack = cxstack;
1469 PERL_SI *top_si = PL_curstackinfo;
1480 /* we may be in a higher stacklevel, so dig down deeper */
1481 while (cxix < 0 && top_si->si_type != PERLSI_MAIN) {
1482 top_si = top_si->si_prev;
1483 ccstack = top_si->si_cxstack;
1484 cxix = dopoptosub_at(ccstack, top_si->si_cxix);
1487 if (GIMME != G_ARRAY)
1491 if (PL_DBsub && cxix >= 0 &&
1492 ccstack[cxix].blk_sub.cv == GvCV(PL_DBsub))
1496 cxix = dopoptosub_at(ccstack, cxix - 1);
1499 cx = &ccstack[cxix];
1500 if (CxTYPE(cx) == CXt_SUB) {
1501 dbcxix = dopoptosub_at(ccstack, cxix - 1);
1502 /* We expect that ccstack[dbcxix] is CXt_SUB, anyway, the
1503 field below is defined for any cx. */
1504 if (PL_DBsub && dbcxix >= 0 && ccstack[dbcxix].blk_sub.cv == GvCV(PL_DBsub))
1505 cx = &ccstack[dbcxix];
1508 if (GIMME != G_ARRAY) {
1509 hv = cx->blk_oldcop->cop_stash;
1511 PUSHs(&PL_sv_undef);
1514 sv_setpv(TARG, HvNAME(hv));
1520 hv = cx->blk_oldcop->cop_stash;
1522 PUSHs(&PL_sv_undef);
1524 PUSHs(sv_2mortal(newSVpv(HvNAME(hv), 0)));
1525 PUSHs(sv_2mortal(newSVpvn(SvPVX(GvSV(cx->blk_oldcop->cop_filegv)),
1526 SvCUR(GvSV(cx->blk_oldcop->cop_filegv)))));
1527 PUSHs(sv_2mortal(newSViv((I32)cx->blk_oldcop->cop_line)));
1530 if (CxTYPE(cx) == CXt_SUB) { /* So is ccstack[dbcxix]. */
1532 gv_efullname3(sv, CvGV(ccstack[cxix].blk_sub.cv), Nullch);
1533 PUSHs(sv_2mortal(sv));
1534 PUSHs(sv_2mortal(newSViv((I32)cx->blk_sub.hasargs)));
1537 PUSHs(sv_2mortal(newSVpvn("(eval)",6)));
1538 PUSHs(sv_2mortal(newSViv(0)));
1540 gimme = (I32)cx->blk_gimme;
1541 if (gimme == G_VOID)
1542 PUSHs(&PL_sv_undef);
1544 PUSHs(sv_2mortal(newSViv(gimme & G_ARRAY)));
1545 if (CxTYPE(cx) == CXt_EVAL) {
1546 if (cx->blk_eval.old_op_type == OP_ENTEREVAL) {
1547 PUSHs(cx->blk_eval.cur_text);
1550 else if (cx->blk_eval.old_name) { /* Try blocks have old_name == 0. */
1551 /* Require, put the name. */
1552 PUSHs(sv_2mortal(newSVpv(cx->blk_eval.old_name, 0)));
1556 else if (CxTYPE(cx) == CXt_SUB &&
1557 cx->blk_sub.hasargs &&
1558 PL_curcop->cop_stash == PL_debstash)
1560 AV *ary = cx->blk_sub.argarray;
1561 int off = AvARRAY(ary) - AvALLOC(ary);
1565 PL_dbargs = GvAV(gv_AVadd(tmpgv = gv_fetchpv("DB::args", TRUE,
1568 AvREAL_off(PL_dbargs); /* XXX Should be REIFY */
1571 if (AvMAX(PL_dbargs) < AvFILLp(ary) + off)
1572 av_extend(PL_dbargs, AvFILLp(ary) + off);
1573 Copy(AvALLOC(ary), AvARRAY(PL_dbargs), AvFILLp(ary) + 1 + off, SV*);
1574 AvFILLp(PL_dbargs) = AvFILLp(ary) + off;
1576 /* XXX only hints propagated via op_private are currently
1577 * visible (others are not easily accessible, since they
1578 * use the global PL_hints) */
1579 PUSHs(sv_2mortal(newSViv((I32)cx->blk_oldcop->op_private &
1580 HINT_PRIVATE_MASK)));
1585 S_sortcv(pTHX_ SV *a, SV *b)
1588 I32 oldsaveix = PL_savestack_ix;
1589 I32 oldscopeix = PL_scopestack_ix;
1591 GvSV(PL_firstgv) = a;
1592 GvSV(PL_secondgv) = b;
1593 PL_stack_sp = PL_stack_base;
1596 if (PL_stack_sp != PL_stack_base + 1)
1597 Perl_croak(aTHX_ "Sort subroutine didn't return single value");
1598 if (!SvNIOKp(*PL_stack_sp))
1599 Perl_croak(aTHX_ "Sort subroutine didn't return a numeric value");
1600 result = SvIV(*PL_stack_sp);
1601 while (PL_scopestack_ix > oldscopeix) {
1604 leave_scope(oldsaveix);
1618 sv_reset(tmps, PL_curcop->cop_stash);
1630 PL_curcop = (COP*)PL_op;
1631 TAINT_NOT; /* Each statement is presumed innocent */
1632 PL_stack_sp = PL_stack_base + cxstack[cxstack_ix].blk_oldsp;
1635 if (PL_op->op_private || SvIV(PL_DBsingle) || SvIV(PL_DBsignal) || SvIV(PL_DBtrace))
1639 register PERL_CONTEXT *cx;
1640 I32 gimme = G_ARRAY;
1647 DIE(aTHX_ "No DB::DB routine defined");
1649 if (CvDEPTH(cv) >= 1 && !(PL_debug & (1<<30))) /* don't do recursive DB::DB call */
1661 push_return(PL_op->op_next);
1662 PUSHBLOCK(cx, CXt_SUB, SP);
1665 (void)SvREFCNT_inc(cv);
1666 SAVESPTR(PL_curpad);
1667 PL_curpad = AvARRAY((AV*)*av_fetch(CvPADLIST(cv),1,FALSE));
1668 RETURNOP(CvSTART(cv));
1682 register PERL_CONTEXT *cx;
1683 I32 gimme = GIMME_V;
1690 if (PL_op->op_flags & OPf_SPECIAL) {
1692 svp = &THREADSV(PL_op->op_targ); /* per-thread variable */
1693 SAVEGENERICSV(*svp);
1697 #endif /* USE_THREADS */
1698 if (PL_op->op_targ) {
1699 svp = &PL_curpad[PL_op->op_targ]; /* "my" variable */
1703 svp = &GvSV((GV*)POPs); /* symbol table variable */
1704 SAVEGENERICSV(*svp);
1710 PUSHBLOCK(cx, CXt_LOOP, SP);
1711 PUSHLOOP(cx, svp, MARK);
1712 if (PL_op->op_flags & OPf_STACKED) {
1713 cx->blk_loop.iterary = (AV*)SvREFCNT_inc(POPs);
1714 if (SvTYPE(cx->blk_loop.iterary) != SVt_PVAV) {
1716 if (SvNIOKp(sv) || !SvPOKp(sv) ||
1717 (looks_like_number(sv) && *SvPVX(sv) != '0')) {
1718 if (SvNV(sv) < IV_MIN ||
1719 SvNV((SV*)cx->blk_loop.iterary) >= IV_MAX)
1720 Perl_croak(aTHX_ "Range iterator outside integer range");
1721 cx->blk_loop.iterix = SvIV(sv);
1722 cx->blk_loop.itermax = SvIV((SV*)cx->blk_loop.iterary);
1725 cx->blk_loop.iterlval = newSVsv(sv);
1729 cx->blk_loop.iterary = PL_curstack;
1730 AvFILLp(PL_curstack) = SP - PL_stack_base;
1731 cx->blk_loop.iterix = MARK - PL_stack_base;
1740 register PERL_CONTEXT *cx;
1741 I32 gimme = GIMME_V;
1747 PUSHBLOCK(cx, CXt_LOOP, SP);
1748 PUSHLOOP(cx, 0, SP);
1756 register PERL_CONTEXT *cx;
1757 struct block_loop cxloop;
1765 POPLOOP1(cx); /* Delay POPLOOP2 until stack values are safe */
1768 if (gimme == G_VOID)
1770 else if (gimme == G_SCALAR) {
1772 *++newsp = sv_mortalcopy(*SP);
1774 *++newsp = &PL_sv_undef;
1778 *++newsp = sv_mortalcopy(*++mark);
1779 TAINT_NOT; /* Each item is independent */
1785 POPLOOP2(); /* Stack values are safe: release loop vars ... */
1786 PL_curpm = newpm; /* ... and pop $1 et al */
1798 register PERL_CONTEXT *cx;
1799 struct block_sub cxsub;
1800 bool popsub2 = FALSE;
1806 if (PL_curstackinfo->si_type == PERLSI_SORT) {
1807 if (cxstack_ix == PL_sortcxix || dopoptosub(cxstack_ix) <= PL_sortcxix) {
1808 if (cxstack_ix > PL_sortcxix)
1809 dounwind(PL_sortcxix);
1810 AvARRAY(PL_curstack)[1] = *SP;
1811 PL_stack_sp = PL_stack_base + 1;
1816 cxix = dopoptosub(cxstack_ix);
1818 DIE(aTHX_ "Can't return outside a subroutine");
1819 if (cxix < cxstack_ix)
1823 switch (CxTYPE(cx)) {
1825 POPSUB1(cx); /* Delay POPSUB2 until stack values are safe */
1830 if (AvFILLp(PL_comppad_name) >= 0)
1833 if (optype == OP_REQUIRE &&
1834 (MARK == SP || (gimme == G_SCALAR && !SvTRUE(*SP))) )
1836 /* Unassume the success we assumed earlier. */
1837 char *name = cx->blk_eval.old_name;
1838 (void)hv_delete(GvHVn(PL_incgv), name, strlen(name), G_DISCARD);
1839 DIE(aTHX_ "%s did not return a true value", name);
1843 DIE(aTHX_ "panic: return");
1847 if (gimme == G_SCALAR) {
1850 if (cxsub.cv && CvDEPTH(cxsub.cv) > 1) {
1852 *++newsp = SvREFCNT_inc(*SP);
1857 *++newsp = sv_mortalcopy(*SP);
1860 *++newsp = (SvTEMP(*SP)) ? *SP : sv_mortalcopy(*SP);
1862 *++newsp = sv_mortalcopy(*SP);
1864 *++newsp = &PL_sv_undef;
1866 else if (gimme == G_ARRAY) {
1867 while (++MARK <= SP) {
1868 *++newsp = (popsub2 && SvTEMP(*MARK))
1869 ? *MARK : sv_mortalcopy(*MARK);
1870 TAINT_NOT; /* Each item is independent */
1873 PL_stack_sp = newsp;
1875 /* Stack values are safe: */
1877 POPSUB2(); /* release CV and @_ ... */
1879 PL_curpm = newpm; /* ... and pop $1 et al */
1882 return pop_return();
1889 register PERL_CONTEXT *cx;
1890 struct block_loop cxloop;
1891 struct block_sub cxsub;
1898 SV **mark = PL_stack_base + cxstack[cxstack_ix].blk_oldsp;
1900 if (PL_op->op_flags & OPf_SPECIAL) {
1901 cxix = dopoptoloop(cxstack_ix);
1903 DIE(aTHX_ "Can't \"last\" outside a block");
1906 cxix = dopoptolabel(cPVOP->op_pv);
1908 DIE(aTHX_ "Label not found for \"last %s\"", cPVOP->op_pv);
1910 if (cxix < cxstack_ix)
1914 switch (CxTYPE(cx)) {
1916 POPLOOP1(cx); /* Delay POPLOOP2 until stack values are safe */
1918 nextop = cxloop.last_op->op_next;
1921 POPSUB1(cx); /* Delay POPSUB2 until stack values are safe */
1923 nextop = pop_return();
1927 nextop = pop_return();
1930 DIE(aTHX_ "panic: last");
1934 if (gimme == G_SCALAR) {
1936 *++newsp = ((pop2 == CXt_SUB) && SvTEMP(*SP))
1937 ? *SP : sv_mortalcopy(*SP);
1939 *++newsp = &PL_sv_undef;
1941 else if (gimme == G_ARRAY) {
1942 while (++MARK <= SP) {
1943 *++newsp = ((pop2 == CXt_SUB) && SvTEMP(*MARK))
1944 ? *MARK : sv_mortalcopy(*MARK);
1945 TAINT_NOT; /* Each item is independent */
1951 /* Stack values are safe: */
1954 POPLOOP2(); /* release loop vars ... */
1958 POPSUB2(); /* release CV and @_ ... */
1961 PL_curpm = newpm; /* ... and pop $1 et al */
1970 register PERL_CONTEXT *cx;
1973 if (PL_op->op_flags & OPf_SPECIAL) {
1974 cxix = dopoptoloop(cxstack_ix);
1976 DIE(aTHX_ "Can't \"next\" outside a block");
1979 cxix = dopoptolabel(cPVOP->op_pv);
1981 DIE(aTHX_ "Label not found for \"next %s\"", cPVOP->op_pv);
1983 if (cxix < cxstack_ix)
1987 oldsave = PL_scopestack[PL_scopestack_ix - 1];
1988 LEAVE_SCOPE(oldsave);
1989 return cx->blk_loop.next_op;
1995 register PERL_CONTEXT *cx;
1998 if (PL_op->op_flags & OPf_SPECIAL) {
1999 cxix = dopoptoloop(cxstack_ix);
2001 DIE(aTHX_ "Can't \"redo\" outside a block");
2004 cxix = dopoptolabel(cPVOP->op_pv);
2006 DIE(aTHX_ "Label not found for \"redo %s\"", cPVOP->op_pv);
2008 if (cxix < cxstack_ix)
2012 oldsave = PL_scopestack[PL_scopestack_ix - 1];
2013 LEAVE_SCOPE(oldsave);
2014 return cx->blk_loop.redo_op;
2018 S_dofindlabel(pTHX_ OP *o, char *label, OP **opstack, OP **oplimit)
2022 static char too_deep[] = "Target of goto is too deeply nested";
2025 Perl_croak(aTHX_ too_deep);
2026 if (o->op_type == OP_LEAVE ||
2027 o->op_type == OP_SCOPE ||
2028 o->op_type == OP_LEAVELOOP ||
2029 o->op_type == OP_LEAVETRY)
2031 *ops++ = cUNOPo->op_first;
2033 Perl_croak(aTHX_ too_deep);
2036 if (o->op_flags & OPf_KIDS) {
2038 /* First try all the kids at this level, since that's likeliest. */
2039 for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling) {
2040 if ((kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) &&
2041 kCOP->cop_label && strEQ(kCOP->cop_label, label))
2044 for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling) {
2045 if (kid == PL_lastgotoprobe)
2047 if ((kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) &&
2049 (ops[-1]->op_type != OP_NEXTSTATE &&
2050 ops[-1]->op_type != OP_DBSTATE)))
2052 if (o = dofindlabel(kid, label, ops, oplimit))
2071 register PERL_CONTEXT *cx;
2072 #define GOTO_DEPTH 64
2073 OP *enterops[GOTO_DEPTH];
2075 int do_dump = (PL_op->op_type == OP_DUMP);
2076 static char must_have_label[] = "goto must have label";
2079 if (PL_op->op_flags & OPf_STACKED) {
2083 /* This egregious kludge implements goto &subroutine */
2084 if (SvROK(sv) && SvTYPE(SvRV(sv)) == SVt_PVCV) {
2086 register PERL_CONTEXT *cx;
2087 CV* cv = (CV*)SvRV(sv);
2091 int arg_was_real = 0;
2094 if (!CvROOT(cv) && !CvXSUB(cv)) {
2099 /* autoloaded stub? */
2100 if (cv != GvCV(gv) && (cv = GvCV(gv)))
2102 autogv = gv_autoload4(GvSTASH(gv), GvNAME(gv),
2103 GvNAMELEN(gv), FALSE);
2104 if (autogv && (cv = GvCV(autogv)))
2106 tmpstr = sv_newmortal();
2107 gv_efullname3(tmpstr, gv, Nullch);
2108 DIE(aTHX_ "Goto undefined subroutine &%s",SvPVX(tmpstr));
2110 DIE(aTHX_ "Goto undefined subroutine");
2113 /* First do some returnish stuff. */
2114 cxix = dopoptosub(cxstack_ix);
2116 DIE(aTHX_ "Can't goto subroutine outside a subroutine");
2117 if (cxix < cxstack_ix)
2120 if (CxTYPE(cx) == CXt_EVAL && cx->blk_eval.old_op_type == OP_ENTEREVAL)
2121 DIE(aTHX_ "Can't goto subroutine from an eval-string");
2123 if (CxTYPE(cx) == CXt_SUB &&
2124 cx->blk_sub.hasargs) { /* put @_ back onto stack */
2125 AV* av = cx->blk_sub.argarray;
2127 items = AvFILLp(av) + 1;
2129 EXTEND(PL_stack_sp, items); /* @_ could have been extended. */
2130 Copy(AvARRAY(av), PL_stack_sp, items, SV*);
2131 PL_stack_sp += items;
2133 SvREFCNT_dec(GvAV(PL_defgv));
2134 GvAV(PL_defgv) = cx->blk_sub.savearray;
2135 #endif /* USE_THREADS */
2138 AvREAL_off(av); /* so av_clear() won't clobber elts */
2142 else if (CvXSUB(cv)) { /* put GvAV(defgv) back onto stack */
2146 av = (AV*)PL_curpad[0];
2148 av = GvAV(PL_defgv);
2150 items = AvFILLp(av) + 1;
2152 EXTEND(PL_stack_sp, items); /* @_ could have been extended. */
2153 Copy(AvARRAY(av), PL_stack_sp, items, SV*);
2154 PL_stack_sp += items;
2156 if (CxTYPE(cx) == CXt_SUB &&
2157 !(CvDEPTH(cx->blk_sub.cv) = cx->blk_sub.olddepth))
2158 SvREFCNT_dec(cx->blk_sub.cv);
2159 oldsave = PL_scopestack[PL_scopestack_ix - 1];
2160 LEAVE_SCOPE(oldsave);
2162 /* Now do some callish stuff. */
2165 #ifdef PERL_XSUB_OLDSTYLE
2166 if (CvOLDSTYLE(cv)) {
2167 I32 (*fp3)(int,int,int);
2172 fp3 = (I32(*)(int,int,int)))CvXSUB(cv;
2173 items = (*fp3)(CvXSUBANY(cv).any_i32,
2174 mark - PL_stack_base + 1,
2176 SP = PL_stack_base + items;
2179 #endif /* PERL_XSUB_OLDSTYLE */
2184 PL_stack_sp--; /* There is no cv arg. */
2185 /* Push a mark for the start of arglist */
2187 (void)(*CvXSUB(cv))(aTHX_ cv);
2188 /* Pop the current context like a decent sub should */
2189 POPBLOCK(cx, PL_curpm);
2190 /* Do _not_ use PUTBACK, keep the XSUB's return stack! */
2193 return pop_return();
2196 AV* padlist = CvPADLIST(cv);
2197 SV** svp = AvARRAY(padlist);
2198 if (CxTYPE(cx) == CXt_EVAL) {
2199 PL_in_eval = cx->blk_eval.old_in_eval;
2200 PL_eval_root = cx->blk_eval.old_eval_root;
2201 cx->cx_type = CXt_SUB;
2202 cx->blk_sub.hasargs = 0;
2204 cx->blk_sub.cv = cv;
2205 cx->blk_sub.olddepth = CvDEPTH(cv);
2207 if (CvDEPTH(cv) < 2)
2208 (void)SvREFCNT_inc(cv);
2209 else { /* save temporaries on recursion? */
2210 if (CvDEPTH(cv) == 100 && ckWARN(WARN_RECURSION))
2211 sub_crush_depth(cv);
2212 if (CvDEPTH(cv) > AvFILLp(padlist)) {
2213 AV *newpad = newAV();
2214 SV **oldpad = AvARRAY(svp[CvDEPTH(cv)-1]);
2215 I32 ix = AvFILLp((AV*)svp[1]);
2216 svp = AvARRAY(svp[0]);
2217 for ( ;ix > 0; ix--) {
2218 if (svp[ix] != &PL_sv_undef) {
2219 char *name = SvPVX(svp[ix]);
2220 if ((SvFLAGS(svp[ix]) & SVf_FAKE)
2223 /* outer lexical or anon code */
2224 av_store(newpad, ix,
2225 SvREFCNT_inc(oldpad[ix]) );
2227 else { /* our own lexical */
2229 av_store(newpad, ix, sv = (SV*)newAV());
2230 else if (*name == '%')
2231 av_store(newpad, ix, sv = (SV*)newHV());
2233 av_store(newpad, ix, sv = NEWSV(0,0));
2238 av_store(newpad, ix, sv = NEWSV(0,0));
2242 if (cx->blk_sub.hasargs) {
2245 av_store(newpad, 0, (SV*)av);
2246 AvFLAGS(av) = AVf_REIFY;
2248 av_store(padlist, CvDEPTH(cv), (SV*)newpad);
2249 AvFILLp(padlist) = CvDEPTH(cv);
2250 svp = AvARRAY(padlist);
2254 if (!cx->blk_sub.hasargs) {
2255 AV* av = (AV*)PL_curpad[0];
2257 items = AvFILLp(av) + 1;
2259 /* Mark is at the end of the stack. */
2261 Copy(AvARRAY(av), SP + 1, items, SV*);
2266 #endif /* USE_THREADS */
2267 SAVESPTR(PL_curpad);
2268 PL_curpad = AvARRAY((AV*)svp[CvDEPTH(cv)]);
2270 if (cx->blk_sub.hasargs)
2271 #endif /* USE_THREADS */
2273 AV* av = (AV*)PL_curpad[0];
2277 cx->blk_sub.savearray = GvAV(PL_defgv);
2278 GvAV(PL_defgv) = (AV*)SvREFCNT_inc(av);
2279 #endif /* USE_THREADS */
2280 cx->blk_sub.argarray = av;
2283 if (items >= AvMAX(av) + 1) {
2285 if (AvARRAY(av) != ary) {
2286 AvMAX(av) += AvARRAY(av) - AvALLOC(av);
2287 SvPVX(av) = (char*)ary;
2289 if (items >= AvMAX(av) + 1) {
2290 AvMAX(av) = items - 1;
2291 Renew(ary,items+1,SV*);
2293 SvPVX(av) = (char*)ary;
2296 Copy(mark,AvARRAY(av),items,SV*);
2297 AvFILLp(av) = items - 1;
2298 /* preserve @_ nature */
2309 if (PERLDB_SUB) { /* Checking curstash breaks DProf. */
2311 * We do not care about using sv to call CV;
2312 * it's for informational purposes only.
2314 SV *sv = GvSV(PL_DBsub);
2317 if (PERLDB_SUB_NN) {
2318 SvIVX(sv) = (IV)cv; /* Already upgraded, saved */
2321 gv_efullname3(sv, CvGV(cv), Nullch);
2324 && (gotocv = get_cv("DB::goto", FALSE)) ) {
2325 PUSHMARK( PL_stack_sp );
2326 call_sv((SV*)gotocv, G_SCALAR | G_NODEBUG);
2330 RETURNOP(CvSTART(cv));
2334 label = SvPV(sv,n_a);
2335 if (!(do_dump || *label))
2336 DIE(aTHX_ must_have_label);
2339 else if (PL_op->op_flags & OPf_SPECIAL) {
2341 DIE(aTHX_ must_have_label);
2344 label = cPVOP->op_pv;
2346 if (label && *label) {
2351 PL_lastgotoprobe = 0;
2353 for (ix = cxstack_ix; ix >= 0; ix--) {
2355 switch (CxTYPE(cx)) {
2357 gotoprobe = PL_eval_root; /* XXX not good for nested eval */
2360 gotoprobe = cx->blk_oldcop->op_sibling;
2366 gotoprobe = cx->blk_oldcop->op_sibling;
2368 gotoprobe = PL_main_root;
2371 if (CvDEPTH(cx->blk_sub.cv)) {
2372 gotoprobe = CvROOT(cx->blk_sub.cv);
2377 DIE(aTHX_ "Can't \"goto\" outside a block");
2380 DIE(aTHX_ "panic: goto");
2381 gotoprobe = PL_main_root;
2384 retop = dofindlabel(gotoprobe, label,
2385 enterops, enterops + GOTO_DEPTH);
2388 PL_lastgotoprobe = gotoprobe;
2391 DIE(aTHX_ "Can't find label %s", label);
2393 /* pop unwanted frames */
2395 if (ix < cxstack_ix) {
2402 oldsave = PL_scopestack[PL_scopestack_ix];
2403 LEAVE_SCOPE(oldsave);
2406 /* push wanted frames */
2408 if (*enterops && enterops[1]) {
2410 for (ix = 1; enterops[ix]; ix++) {
2411 PL_op = enterops[ix];
2412 /* Eventually we may want to stack the needed arguments
2413 * for each op. For now, we punt on the hard ones. */
2414 if (PL_op->op_type == OP_ENTERITER)
2415 DIE(aTHX_ "Can't \"goto\" into the middle of a foreach loop",
2417 (CALLOP->op_ppaddr)(aTHX);
2425 if (!retop) retop = PL_main_start;
2427 PL_restartop = retop;
2428 PL_do_undump = TRUE;
2432 PL_restartop = 0; /* hmm, must be GNU unexec().. */
2433 PL_do_undump = FALSE;
2449 if (anum == 1 && VMSISH_EXIT)
2454 PUSHs(&PL_sv_undef);
2462 double value = SvNVx(GvSV(cCOP->cop_gv));
2463 register I32 match = I_32(value);
2466 if (((double)match) > value)
2467 --match; /* was fractional--truncate other way */
2469 match -= cCOP->uop.scop.scop_offset;
2472 else if (match > cCOP->uop.scop.scop_max)
2473 match = cCOP->uop.scop.scop_max;
2474 PL_op = cCOP->uop.scop.scop_next[match];
2484 PL_op = PL_op->op_next; /* can't assume anything */
2487 match = *(SvPVx(GvSV(cCOP->cop_gv), n_a)) & 255;
2488 match -= cCOP->uop.scop.scop_offset;
2491 else if (match > cCOP->uop.scop.scop_max)
2492 match = cCOP->uop.scop.scop_max;
2493 PL_op = cCOP->uop.scop.scop_next[match];
2502 S_save_lines(pTHX_ AV *array, SV *sv)
2504 register char *s = SvPVX(sv);
2505 register char *send = SvPVX(sv) + SvCUR(sv);
2507 register I32 line = 1;
2509 while (s && s < send) {
2510 SV *tmpstr = NEWSV(85,0);
2512 sv_upgrade(tmpstr, SVt_PVMG);
2513 t = strchr(s, '\n');
2519 sv_setpvn(tmpstr, s, t - s);
2520 av_store(array, line++, tmpstr);
2526 S_docatch_body(pTHX_ va_list args)
2533 S_docatch(pTHX_ OP *o)
2540 assert(CATCH_GET == TRUE);
2544 CALLPROTECT(aTHX_ &ret, FUNC_NAME_TO_PTR(S_docatch_body));
2550 PL_op = PL_restartop;
2565 Perl_sv_compile_2op(pTHX_ SV *sv, OP** startop, char *code, AV** avp)
2566 /* sv Text to convert to OP tree. */
2567 /* startop op_free() this to undo. */
2568 /* code Short string id of the caller. */
2570 dSP; /* Make POPBLOCK work. */
2573 I32 gimme = 0; /* SUSPECT - INITIALZE TO WHAT? NI-S */
2576 OP *oop = PL_op, *rop;
2577 char tmpbuf[TYPE_DIGITS(long) + 12 + 10];
2583 /* switch to eval mode */
2585 if (PL_curcop == &PL_compiling) {
2586 SAVESPTR(PL_compiling.cop_stash);
2587 PL_compiling.cop_stash = PL_curstash;
2589 SAVESPTR(PL_compiling.cop_filegv);
2590 SAVEI16(PL_compiling.cop_line);
2591 sprintf(tmpbuf, "_<(%.10s_eval %lu)", code, (unsigned long)++PL_evalseq);
2592 PL_compiling.cop_filegv = gv_fetchfile(tmpbuf+2);
2593 PL_compiling.cop_line = 1;
2594 /* XXX For C<eval "...">s within BEGIN {} blocks, this ends up
2595 deleting the eval's FILEGV from the stash before gv_check() runs
2596 (i.e. before run-time proper). To work around the coredump that
2597 ensues, we always turn GvMULTI_on for any globals that were
2598 introduced within evals. See force_ident(). GSAR 96-10-12 */
2599 safestr = savepv(tmpbuf);
2600 SAVEDELETE(PL_defstash, safestr, strlen(safestr));
2602 #ifdef OP_IN_REGISTER
2610 PL_op->op_type = OP_ENTEREVAL;
2611 PL_op->op_flags = 0; /* Avoid uninit warning. */
2612 PUSHBLOCK(cx, CXt_EVAL, SP);
2613 PUSHEVAL(cx, 0, PL_compiling.cop_filegv);
2614 rop = doeval(G_SCALAR, startop);
2615 POPBLOCK(cx,PL_curpm);
2618 (*startop)->op_type = OP_NULL;
2619 (*startop)->op_ppaddr = PL_ppaddr[OP_NULL];
2621 *avp = (AV*)SvREFCNT_inc(PL_comppad);
2623 if (PL_curcop == &PL_compiling)
2624 PL_compiling.op_private = PL_hints;
2625 #ifdef OP_IN_REGISTER
2631 /* With USE_THREADS, eval_owner must be held on entry to doeval */
2633 S_doeval(pTHX_ int gimme, OP** startop)
2642 PL_in_eval = EVAL_INEVAL;
2646 /* set up a scratch pad */
2649 SAVESPTR(PL_curpad);
2650 SAVESPTR(PL_comppad);
2651 SAVESPTR(PL_comppad_name);
2652 SAVEI32(PL_comppad_name_fill);
2653 SAVEI32(PL_min_intro_pending);
2654 SAVEI32(PL_max_intro_pending);
2657 for (i = cxstack_ix - 1; i >= 0; i--) {
2658 PERL_CONTEXT *cx = &cxstack[i];
2659 if (CxTYPE(cx) == CXt_EVAL)
2661 else if (CxTYPE(cx) == CXt_SUB) {
2662 caller = cx->blk_sub.cv;
2667 SAVESPTR(PL_compcv);
2668 PL_compcv = (CV*)NEWSV(1104,0);
2669 sv_upgrade((SV *)PL_compcv, SVt_PVCV);
2670 CvEVAL_on(PL_compcv);
2672 CvOWNER(PL_compcv) = 0;
2673 New(666, CvMUTEXP(PL_compcv), 1, perl_mutex);
2674 MUTEX_INIT(CvMUTEXP(PL_compcv));
2675 #endif /* USE_THREADS */
2677 PL_comppad = newAV();
2678 av_push(PL_comppad, Nullsv);
2679 PL_curpad = AvARRAY(PL_comppad);
2680 PL_comppad_name = newAV();
2681 PL_comppad_name_fill = 0;
2682 PL_min_intro_pending = 0;
2685 av_store(PL_comppad_name, 0, newSVpvn("@_", 2));
2686 PL_curpad[0] = (SV*)newAV();
2687 SvPADMY_on(PL_curpad[0]); /* XXX Needed? */
2688 #endif /* USE_THREADS */
2690 comppadlist = newAV();
2691 AvREAL_off(comppadlist);
2692 av_store(comppadlist, 0, (SV*)PL_comppad_name);
2693 av_store(comppadlist, 1, (SV*)PL_comppad);
2694 CvPADLIST(PL_compcv) = comppadlist;
2696 if (!saveop || saveop->op_type != OP_REQUIRE)
2697 CvOUTSIDE(PL_compcv) = (CV*)SvREFCNT_inc(caller);
2699 SAVEFREESV(PL_compcv);
2701 /* make sure we compile in the right package */
2703 newstash = PL_curcop->cop_stash;
2704 if (PL_curstash != newstash) {
2705 SAVESPTR(PL_curstash);
2706 PL_curstash = newstash;
2708 SAVESPTR(PL_beginav);
2709 PL_beginav = newAV();
2710 SAVEFREESV(PL_beginav);
2712 /* try to compile it */
2714 PL_eval_root = Nullop;
2716 PL_curcop = &PL_compiling;
2717 PL_curcop->cop_arybase = 0;
2718 SvREFCNT_dec(PL_rs);
2719 PL_rs = newSVpvn("\n", 1);
2720 if (saveop && saveop->op_flags & OPf_SPECIAL)
2721 PL_in_eval |= EVAL_KEEPERR;
2724 if (yyparse() || PL_error_count || !PL_eval_root) {
2728 I32 optype = 0; /* Might be reset by POPEVAL. */
2733 op_free(PL_eval_root);
2734 PL_eval_root = Nullop;
2736 SP = PL_stack_base + POPMARK; /* pop original mark */
2738 POPBLOCK(cx,PL_curpm);
2744 if (optype == OP_REQUIRE) {
2745 char* msg = SvPVx(ERRSV, n_a);
2746 DIE(aTHX_ "%s", *msg ? msg : "Compilation failed in require");
2747 } else if (startop) {
2748 char* msg = SvPVx(ERRSV, n_a);
2750 POPBLOCK(cx,PL_curpm);
2752 Perl_croak(aTHX_ "%sCompilation failed in regexp", (*msg ? msg : "Unknown error\n"));
2754 SvREFCNT_dec(PL_rs);
2755 PL_rs = SvREFCNT_inc(PL_nrs);
2757 MUTEX_LOCK(&PL_eval_mutex);
2759 COND_SIGNAL(&PL_eval_cond);
2760 MUTEX_UNLOCK(&PL_eval_mutex);
2761 #endif /* USE_THREADS */
2764 SvREFCNT_dec(PL_rs);
2765 PL_rs = SvREFCNT_inc(PL_nrs);
2766 PL_compiling.cop_line = 0;
2768 *startop = PL_eval_root;
2769 SvREFCNT_dec(CvOUTSIDE(PL_compcv));
2770 CvOUTSIDE(PL_compcv) = Nullcv;
2772 SAVEFREEOP(PL_eval_root);
2774 scalarvoid(PL_eval_root);
2775 else if (gimme & G_ARRAY)
2778 scalar(PL_eval_root);
2780 DEBUG_x(dump_eval());
2782 /* Register with debugger: */
2783 if (PERLDB_INTER && saveop->op_type == OP_REQUIRE) {
2784 CV *cv = get_cv("DB::postponed", FALSE);
2788 XPUSHs((SV*)PL_compiling.cop_filegv);
2790 call_sv((SV*)cv, G_DISCARD);
2794 /* compiled okay, so do it */
2796 CvDEPTH(PL_compcv) = 1;
2797 SP = PL_stack_base + POPMARK; /* pop original mark */
2798 PL_op = saveop; /* The caller may need it. */
2800 MUTEX_LOCK(&PL_eval_mutex);
2802 COND_SIGNAL(&PL_eval_cond);
2803 MUTEX_UNLOCK(&PL_eval_mutex);
2804 #endif /* USE_THREADS */
2806 RETURNOP(PL_eval_start);
2810 S_doopen_pmc(pTHX_ const char *name, const char *mode)
2812 STRLEN namelen = strlen(name);
2815 if (namelen > 3 && strcmp(name + namelen - 3, ".pm") == 0) {
2816 SV *pmcsv = Perl_newSVpvf(aTHX_ "%s%c", name, 'c');
2817 char *pmc = SvPV_nolen(pmcsv);
2820 if (PerlLIO_stat(pmc, &pmcstat) < 0) {
2821 fp = PerlIO_open(name, mode);
2824 if (PerlLIO_stat(name, &pmstat) < 0 ||
2825 pmstat.st_mtime < pmcstat.st_mtime)
2827 fp = PerlIO_open(pmc, mode);
2830 fp = PerlIO_open(name, mode);
2833 SvREFCNT_dec(pmcsv);
2836 fp = PerlIO_open(name, mode);
2844 register PERL_CONTEXT *cx;
2849 SV *namesv = Nullsv;
2851 I32 gimme = G_SCALAR;
2852 PerlIO *tryrsfp = 0;
2856 if (SvNIOKp(sv) && !SvPOKp(sv)) {
2857 SET_NUMERIC_STANDARD();
2858 if (atof(PL_patchlevel) + 0.00000999 < SvNV(sv))
2859 DIE(aTHX_ "Perl %s required--this is only version %s, stopped",
2860 SvPV(sv,n_a),PL_patchlevel);
2863 name = SvPV(sv, len);
2864 if (!(name && len > 0 && *name))
2865 DIE(aTHX_ "Null filename used");
2866 TAINT_PROPER("require");
2867 if (PL_op->op_type == OP_REQUIRE &&
2868 (svp = hv_fetch(GvHVn(PL_incgv), name, len, 0)) &&
2869 *svp != &PL_sv_undef)
2872 /* prepare to compile file */
2877 (name[1] == '.' && name[2] == '/')))
2879 || (name[0] && name[1] == ':')
2882 || (name[0] == '\\' && name[1] == '\\') /* UNC path */
2885 || (strchr(name,':') || ((*name == '[' || *name == '<') &&
2886 (isALNUM(name[1]) || strchr("$-_]>",name[1]))))
2891 tryrsfp = doopen_pmc(name,PERL_SCRIPT_MODE);
2894 AV *ar = GvAVn(PL_incgv);
2898 if ((unixname = tounixspec(name, Nullch)) != Nullch)
2901 namesv = NEWSV(806, 0);
2902 for (i = 0; i <= AvFILL(ar); i++) {
2903 char *dir = SvPVx(*av_fetch(ar, i, TRUE), n_a);
2906 if ((unixdir = tounixpath(dir, Nullch)) == Nullch)
2908 sv_setpv(namesv, unixdir);
2909 sv_catpv(namesv, unixname);
2911 Perl_sv_setpvf(aTHX_ namesv, "%s/%s", dir, name);
2913 TAINT_PROPER("require");
2914 tryname = SvPVX(namesv);
2915 tryrsfp = doopen_pmc(tryname, PERL_SCRIPT_MODE);
2917 if (tryname[0] == '.' && tryname[1] == '/')
2924 SAVESPTR(PL_compiling.cop_filegv);
2925 PL_compiling.cop_filegv = gv_fetchfile(tryrsfp ? tryname : name);
2926 SvREFCNT_dec(namesv);
2928 if (PL_op->op_type == OP_REQUIRE) {
2929 char *msgstr = name;
2930 if (namesv) { /* did we lookup @INC? */
2931 SV *msg = sv_2mortal(newSVpv(msgstr,0));
2932 SV *dirmsgsv = NEWSV(0, 0);
2933 AV *ar = GvAVn(PL_incgv);
2935 sv_catpvn(msg, " in @INC", 8);
2936 if (instr(SvPVX(msg), ".h "))
2937 sv_catpv(msg, " (change .h to .ph maybe?)");
2938 if (instr(SvPVX(msg), ".ph "))
2939 sv_catpv(msg, " (did you run h2ph?)");
2940 sv_catpv(msg, " (@INC contains:");
2941 for (i = 0; i <= AvFILL(ar); i++) {
2942 char *dir = SvPVx(*av_fetch(ar, i, TRUE), n_a);
2943 Perl_sv_setpvf(aTHX_ dirmsgsv, " %s", dir);
2944 sv_catsv(msg, dirmsgsv);
2946 sv_catpvn(msg, ")", 1);
2947 SvREFCNT_dec(dirmsgsv);
2948 msgstr = SvPV_nolen(msg);
2950 DIE(aTHX_ "Can't locate %s", msgstr);
2956 SETERRNO(0, SS$_NORMAL);
2958 /* Assume success here to prevent recursive requirement. */
2959 (void)hv_store(GvHVn(PL_incgv), name, strlen(name),
2960 newSVsv(GvSV(PL_compiling.cop_filegv)), 0 );
2964 lex_start(sv_2mortal(newSVpvn("",0)));
2965 SAVEGENERICSV(PL_rsfp_filters);
2966 PL_rsfp_filters = Nullav;
2969 name = savepv(name);
2973 SAVEPPTR(PL_compiling.cop_warnings);
2974 PL_compiling.cop_warnings = ((PL_dowarn & G_WARN_ALL_ON) ? WARN_ALL
2977 /* switch to eval mode */
2979 push_return(PL_op->op_next);
2980 PUSHBLOCK(cx, CXt_EVAL, SP);
2981 PUSHEVAL(cx, name, PL_compiling.cop_filegv);
2983 SAVEI16(PL_compiling.cop_line);
2984 PL_compiling.cop_line = 0;
2988 MUTEX_LOCK(&PL_eval_mutex);
2989 if (PL_eval_owner && PL_eval_owner != thr)
2990 while (PL_eval_owner)
2991 COND_WAIT(&PL_eval_cond, &PL_eval_mutex);
2992 PL_eval_owner = thr;
2993 MUTEX_UNLOCK(&PL_eval_mutex);
2994 #endif /* USE_THREADS */
2995 return DOCATCH(doeval(G_SCALAR, NULL));
3000 return pp_require();
3006 register PERL_CONTEXT *cx;
3008 I32 gimme = GIMME_V, was = PL_sub_generation;
3009 char tmpbuf[TYPE_DIGITS(long) + 12];
3014 if (!SvPV(sv,len) || !len)
3016 TAINT_PROPER("eval");
3022 /* switch to eval mode */
3024 SAVESPTR(PL_compiling.cop_filegv);
3025 sprintf(tmpbuf, "_<(eval %lu)", (unsigned long)++PL_evalseq);
3026 PL_compiling.cop_filegv = gv_fetchfile(tmpbuf+2);
3027 PL_compiling.cop_line = 1;
3028 /* XXX For C<eval "...">s within BEGIN {} blocks, this ends up
3029 deleting the eval's FILEGV from the stash before gv_check() runs
3030 (i.e. before run-time proper). To work around the coredump that
3031 ensues, we always turn GvMULTI_on for any globals that were
3032 introduced within evals. See force_ident(). GSAR 96-10-12 */
3033 safestr = savepv(tmpbuf);
3034 SAVEDELETE(PL_defstash, safestr, strlen(safestr));
3036 PL_hints = PL_op->op_targ;
3037 SAVEPPTR(PL_compiling.cop_warnings);
3038 if (PL_compiling.cop_warnings != WARN_ALL
3039 && PL_compiling.cop_warnings != WARN_NONE){
3040 PL_compiling.cop_warnings = newSVsv(PL_compiling.cop_warnings) ;
3041 SAVEFREESV(PL_compiling.cop_warnings) ;
3044 push_return(PL_op->op_next);
3045 PUSHBLOCK(cx, (CXt_EVAL|CXp_REAL), SP);
3046 PUSHEVAL(cx, 0, PL_compiling.cop_filegv);
3048 /* prepare to compile string */
3050 if (PERLDB_LINE && PL_curstash != PL_debstash)
3051 save_lines(GvAV(PL_compiling.cop_filegv), PL_linestr);
3054 MUTEX_LOCK(&PL_eval_mutex);
3055 if (PL_eval_owner && PL_eval_owner != thr)
3056 while (PL_eval_owner)
3057 COND_WAIT(&PL_eval_cond, &PL_eval_mutex);
3058 PL_eval_owner = thr;
3059 MUTEX_UNLOCK(&PL_eval_mutex);
3060 #endif /* USE_THREADS */
3061 ret = doeval(gimme, NULL);
3062 if (PERLDB_INTER && was != PL_sub_generation /* Some subs defined here. */
3063 && ret != PL_op->op_next) { /* Successive compilation. */
3064 strcpy(safestr, "_<(eval )"); /* Anything fake and short. */
3066 return DOCATCH(ret);
3076 register PERL_CONTEXT *cx;
3078 U8 save_flags = PL_op -> op_flags;
3083 retop = pop_return();
3086 if (gimme == G_VOID)
3088 else if (gimme == G_SCALAR) {
3091 if (SvFLAGS(TOPs) & SVs_TEMP)
3094 *MARK = sv_mortalcopy(TOPs);
3098 *MARK = &PL_sv_undef;
3102 /* in case LEAVE wipes old return values */
3103 for (mark = newsp + 1; mark <= SP; mark++) {
3104 if (!(SvFLAGS(*mark) & SVs_TEMP)) {
3105 *mark = sv_mortalcopy(*mark);
3106 TAINT_NOT; /* Each item is independent */
3110 PL_curpm = newpm; /* Don't pop $1 et al till now */
3112 if (AvFILLp(PL_comppad_name) >= 0)
3116 assert(CvDEPTH(PL_compcv) == 1);
3118 CvDEPTH(PL_compcv) = 0;
3121 if (optype == OP_REQUIRE &&
3122 !(gimme == G_SCALAR ? SvTRUE(*SP) : SP > newsp))
3124 /* Unassume the success we assumed earlier. */
3125 char *name = cx->blk_eval.old_name;
3126 (void)hv_delete(GvHVn(PL_incgv), name, strlen(name), G_DISCARD);
3127 retop = Perl_die(aTHX_ "%s did not return a true value", name);
3128 /* die_where() did LEAVE, or we won't be here */
3132 if (!(save_flags & OPf_SPECIAL))
3142 register PERL_CONTEXT *cx;
3143 I32 gimme = GIMME_V;
3148 push_return(cLOGOP->op_other->op_next);
3149 PUSHBLOCK(cx, CXt_EVAL, SP);
3151 PL_eval_root = PL_op; /* Only needed so that goto works right. */
3153 PL_in_eval = EVAL_INEVAL;
3156 return DOCATCH(PL_op->op_next);
3166 register PERL_CONTEXT *cx;
3174 if (gimme == G_VOID)
3176 else if (gimme == G_SCALAR) {
3179 if (SvFLAGS(TOPs) & (SVs_PADTMP|SVs_TEMP))
3182 *MARK = sv_mortalcopy(TOPs);
3186 *MARK = &PL_sv_undef;
3191 /* in case LEAVE wipes old return values */
3192 for (mark = newsp + 1; mark <= SP; mark++) {
3193 if (!(SvFLAGS(*mark) & (SVs_PADTMP|SVs_TEMP))) {
3194 *mark = sv_mortalcopy(*mark);
3195 TAINT_NOT; /* Each item is independent */
3199 PL_curpm = newpm; /* Don't pop $1 et al till now */
3207 S_doparseform(pTHX_ SV *sv)
3210 register char *s = SvPV_force(sv, len);
3211 register char *send = s + len;
3212 register char *base;
3213 register I32 skipspaces = 0;
3216 bool postspace = FALSE;
3224 Perl_croak(aTHX_ "Null picture in formline");
3226 New(804, fops, (send - s)*3+10, U16); /* Almost certainly too long... */
3231 *fpc++ = FF_LINEMARK;
3232 noblank = repeat = FALSE;
3250 case ' ': case '\t':
3261 *fpc++ = FF_LITERAL;
3269 *fpc++ = skipspaces;
3273 *fpc++ = FF_NEWLINE;
3277 arg = fpc - linepc + 1;
3284 *fpc++ = FF_LINEMARK;
3285 noblank = repeat = FALSE;
3294 ischop = s[-1] == '^';
3300 arg = (s - base) - 1;
3302 *fpc++ = FF_LITERAL;
3311 *fpc++ = FF_LINEGLOB;
3313 else if (*s == '#' || (*s == '.' && s[1] == '#')) {
3314 arg = ischop ? 512 : 0;
3324 arg |= 256 + (s - f);
3326 *fpc++ = s - base; /* fieldsize for FETCH */
3327 *fpc++ = FF_DECIMAL;
3332 bool ismore = FALSE;
3335 while (*++s == '>') ;
3336 prespace = FF_SPACE;
3338 else if (*s == '|') {
3339 while (*++s == '|') ;
3340 prespace = FF_HALFSPACE;
3345 while (*++s == '<') ;
3348 if (*s == '.' && s[1] == '.' && s[2] == '.') {
3352 *fpc++ = s - base; /* fieldsize for FETCH */
3354 *fpc++ = ischop ? FF_CHECKCHOP : FF_CHECKNL;
3372 { /* need to jump to the next word */
3374 z = WORD_ALIGN - SvCUR(sv) % WORD_ALIGN;
3375 SvGROW(sv, SvCUR(sv) + z + arg * sizeof(U16) + 4);
3376 s = SvPVX(sv) + SvCUR(sv) + z;
3378 Copy(fops, s, arg, U16);
3380 sv_magic(sv, Nullsv, 'f', Nullch, 0);
3385 * The rest of this file was derived from source code contributed
3388 * NOTE: this code was derived from Tom Horsley's qsort replacement
3389 * and should not be confused with the original code.
3392 /* Copyright (C) Tom Horsley, 1997. All rights reserved.
3394 Permission granted to distribute under the same terms as perl which are
3397 This program is free software; you can redistribute it and/or modify
3398 it under the terms of either:
3400 a) the GNU General Public License as published by the Free
3401 Software Foundation; either version 1, or (at your option) any
3404 b) the "Artistic License" which comes with this Kit.
3406 Details on the perl license can be found in the perl source code which
3407 may be located via the www.perl.com web page.
3409 This is the most wonderfulest possible qsort I can come up with (and
3410 still be mostly portable) My (limited) tests indicate it consistently
3411 does about 20% fewer calls to compare than does the qsort in the Visual
3412 C++ library, other vendors may vary.
3414 Some of the ideas in here can be found in "Algorithms" by Sedgewick,
3415 others I invented myself (or more likely re-invented since they seemed
3416 pretty obvious once I watched the algorithm operate for a while).
3418 Most of this code was written while watching the Marlins sweep the Giants
3419 in the 1997 National League Playoffs - no Braves fans allowed to use this
3420 code (just kidding :-).
3422 I realize that if I wanted to be true to the perl tradition, the only
3423 comment in this file would be something like:
3425 ...they shuffled back towards the rear of the line. 'No, not at the
3426 rear!' the slave-driver shouted. 'Three files up. And stay there...
3428 However, I really needed to violate that tradition just so I could keep
3429 track of what happens myself, not to mention some poor fool trying to
3430 understand this years from now :-).
3433 /* ********************************************************** Configuration */
3435 #ifndef QSORT_ORDER_GUESS
3436 #define QSORT_ORDER_GUESS 2 /* Select doubling version of the netBSD trick */
3439 /* QSORT_MAX_STACK is the largest number of partitions that can be stacked up for
3440 future processing - a good max upper bound is log base 2 of memory size
3441 (32 on 32 bit machines, 64 on 64 bit machines, etc). In reality can
3442 safely be smaller than that since the program is taking up some space and
3443 most operating systems only let you grab some subset of contiguous
3444 memory (not to mention that you are normally sorting data larger than
3445 1 byte element size :-).
3447 #ifndef QSORT_MAX_STACK
3448 #define QSORT_MAX_STACK 32
3451 /* QSORT_BREAK_EVEN is the size of the largest partition we should insertion sort.
3452 Anything bigger and we use qsort. If you make this too small, the qsort
3453 will probably break (or become less efficient), because it doesn't expect
3454 the middle element of a partition to be the same as the right or left -
3455 you have been warned).
3457 #ifndef QSORT_BREAK_EVEN
3458 #define QSORT_BREAK_EVEN 6
3461 /* ************************************************************* Data Types */
3463 /* hold left and right index values of a partition waiting to be sorted (the
3464 partition includes both left and right - right is NOT one past the end or
3465 anything like that).
3467 struct partition_stack_entry {
3470 #ifdef QSORT_ORDER_GUESS
3471 int qsort_break_even;
3475 /* ******************************************************* Shorthand Macros */
3477 /* Note that these macros will be used from inside the qsort function where
3478 we happen to know that the variable 'elt_size' contains the size of an
3479 array element and the variable 'temp' points to enough space to hold a
3480 temp element and the variable 'array' points to the array being sorted
3481 and 'compare' is the pointer to the compare routine.
3483 Also note that there are very many highly architecture specific ways
3484 these might be sped up, but this is simply the most generally portable
3485 code I could think of.
3488 /* Return < 0 == 0 or > 0 as the value of elt1 is < elt2, == elt2, > elt2
3491 #define qsort_cmp(elt1, elt2) \
3492 ((this->*compare)(array[elt1], array[elt2]))
3494 #define qsort_cmp(elt1, elt2) \
3495 ((*compare)(aTHX_ array[elt1], array[elt2]))
3498 #ifdef QSORT_ORDER_GUESS
3499 #define QSORT_NOTICE_SWAP swapped++;
3501 #define QSORT_NOTICE_SWAP
3504 /* swaps contents of array elements elt1, elt2.
3506 #define qsort_swap(elt1, elt2) \
3509 temp = array[elt1]; \
3510 array[elt1] = array[elt2]; \
3511 array[elt2] = temp; \
3514 /* rotate contents of elt1, elt2, elt3 such that elt1 gets elt2, elt2 gets
3515 elt3 and elt3 gets elt1.
3517 #define qsort_rotate(elt1, elt2, elt3) \
3520 temp = array[elt1]; \
3521 array[elt1] = array[elt2]; \
3522 array[elt2] = array[elt3]; \
3523 array[elt3] = temp; \
3526 /* ************************************************************ Debug stuff */
3533 return; /* good place to set a breakpoint */
3536 #define qsort_assert(t) (void)( (t) || (break_here(), 0) )
3539 doqsort_all_asserts(
3543 int (*compare)(const void * elt1, const void * elt2),
3544 int pc_left, int pc_right, int u_left, int u_right)
3548 qsort_assert(pc_left <= pc_right);
3549 qsort_assert(u_right < pc_left);
3550 qsort_assert(pc_right < u_left);
3551 for (i = u_right + 1; i < pc_left; ++i) {
3552 qsort_assert(qsort_cmp(i, pc_left) < 0);
3554 for (i = pc_left; i < pc_right; ++i) {
3555 qsort_assert(qsort_cmp(i, pc_right) == 0);
3557 for (i = pc_right + 1; i < u_left; ++i) {
3558 qsort_assert(qsort_cmp(pc_right, i) < 0);
3562 #define qsort_all_asserts(PC_LEFT, PC_RIGHT, U_LEFT, U_RIGHT) \
3563 doqsort_all_asserts(array, num_elts, elt_size, compare, \
3564 PC_LEFT, PC_RIGHT, U_LEFT, U_RIGHT)
3568 #define qsort_assert(t) ((void)0)
3570 #define qsort_all_asserts(PC_LEFT, PC_RIGHT, U_LEFT, U_RIGHT) ((void)0)
3574 /* ****************************************************************** qsort */
3577 S_qsortsv(pTHX_ SV ** array, size_t num_elts, SVCOMPARE_t compare)
3581 struct partition_stack_entry partition_stack[QSORT_MAX_STACK];
3582 int next_stack_entry = 0;
3586 #ifdef QSORT_ORDER_GUESS
3587 int qsort_break_even;
3591 /* Make sure we actually have work to do.
3593 if (num_elts <= 1) {
3597 /* Setup the initial partition definition and fall into the sorting loop
3600 part_right = (int)(num_elts - 1);
3601 #ifdef QSORT_ORDER_GUESS
3602 qsort_break_even = QSORT_BREAK_EVEN;
3604 #define qsort_break_even QSORT_BREAK_EVEN
3607 if ((part_right - part_left) >= qsort_break_even) {
3608 /* OK, this is gonna get hairy, so lets try to document all the
3609 concepts and abbreviations and variables and what they keep
3612 pc: pivot chunk - the set of array elements we accumulate in the
3613 middle of the partition, all equal in value to the original
3614 pivot element selected. The pc is defined by:
3616 pc_left - the leftmost array index of the pc
3617 pc_right - the rightmost array index of the pc
3619 we start with pc_left == pc_right and only one element
3620 in the pivot chunk (but it can grow during the scan).
3622 u: uncompared elements - the set of elements in the partition
3623 we have not yet compared to the pivot value. There are two
3624 uncompared sets during the scan - one to the left of the pc
3625 and one to the right.
3627 u_right - the rightmost index of the left side's uncompared set
3628 u_left - the leftmost index of the right side's uncompared set
3630 The leftmost index of the left sides's uncompared set
3631 doesn't need its own variable because it is always defined
3632 by the leftmost edge of the whole partition (part_left). The
3633 same goes for the rightmost edge of the right partition
3636 We know there are no uncompared elements on the left once we
3637 get u_right < part_left and no uncompared elements on the
3638 right once u_left > part_right. When both these conditions
3639 are met, we have completed the scan of the partition.
3641 Any elements which are between the pivot chunk and the
3642 uncompared elements should be less than the pivot value on
3643 the left side and greater than the pivot value on the right
3644 side (in fact, the goal of the whole algorithm is to arrange
3645 for that to be true and make the groups of less-than and
3646 greater-then elements into new partitions to sort again).
3648 As you marvel at the complexity of the code and wonder why it
3649 has to be so confusing. Consider some of the things this level
3650 of confusion brings:
3652 Once I do a compare, I squeeze every ounce of juice out of it. I
3653 never do compare calls I don't have to do, and I certainly never
3656 I also never swap any elements unless I can prove there is a
3657 good reason. Many sort algorithms will swap a known value with
3658 an uncompared value just to get things in the right place (or
3659 avoid complexity :-), but that uncompared value, once it gets
3660 compared, may then have to be swapped again. A lot of the
3661 complexity of this code is due to the fact that it never swaps
3662 anything except compared values, and it only swaps them when the
3663 compare shows they are out of position.
3665 int pc_left, pc_right;
3666 int u_right, u_left;
3670 pc_left = ((part_left + part_right) / 2);
3672 u_right = pc_left - 1;
3673 u_left = pc_right + 1;
3675 /* Qsort works best when the pivot value is also the median value
3676 in the partition (unfortunately you can't find the median value
3677 without first sorting :-), so to give the algorithm a helping
3678 hand, we pick 3 elements and sort them and use the median value
3679 of that tiny set as the pivot value.
3681 Some versions of qsort like to use the left middle and right as
3682 the 3 elements to sort so they can insure the ends of the
3683 partition will contain values which will stop the scan in the
3684 compare loop, but when you have to call an arbitrarily complex
3685 routine to do a compare, its really better to just keep track of
3686 array index values to know when you hit the edge of the
3687 partition and avoid the extra compare. An even better reason to
3688 avoid using a compare call is the fact that you can drop off the
3689 edge of the array if someone foolishly provides you with an
3690 unstable compare function that doesn't always provide consistent
3693 So, since it is simpler for us to compare the three adjacent
3694 elements in the middle of the partition, those are the ones we
3695 pick here (conveniently pointed at by u_right, pc_left, and
3696 u_left). The values of the left, center, and right elements
3697 are refered to as l c and r in the following comments.
3700 #ifdef QSORT_ORDER_GUESS
3703 s = qsort_cmp(u_right, pc_left);
3706 s = qsort_cmp(pc_left, u_left);
3707 /* if l < c, c < r - already in order - nothing to do */
3709 /* l < c, c == r - already in order, pc grows */
3711 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3713 /* l < c, c > r - need to know more */
3714 s = qsort_cmp(u_right, u_left);
3716 /* l < c, c > r, l < r - swap c & r to get ordered */
3717 qsort_swap(pc_left, u_left);
3718 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3719 } else if (s == 0) {
3720 /* l < c, c > r, l == r - swap c&r, grow pc */
3721 qsort_swap(pc_left, u_left);
3723 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3725 /* l < c, c > r, l > r - make lcr into rlc to get ordered */
3726 qsort_rotate(pc_left, u_right, u_left);
3727 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3730 } else if (s == 0) {
3732 s = qsort_cmp(pc_left, u_left);
3734 /* l == c, c < r - already in order, grow pc */
3736 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3737 } else if (s == 0) {
3738 /* l == c, c == r - already in order, grow pc both ways */
3741 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3743 /* l == c, c > r - swap l & r, grow pc */
3744 qsort_swap(u_right, u_left);
3746 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3750 s = qsort_cmp(pc_left, u_left);
3752 /* l > c, c < r - need to know more */
3753 s = qsort_cmp(u_right, u_left);
3755 /* l > c, c < r, l < r - swap l & c to get ordered */
3756 qsort_swap(u_right, pc_left);
3757 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3758 } else if (s == 0) {
3759 /* l > c, c < r, l == r - swap l & c, grow pc */
3760 qsort_swap(u_right, pc_left);
3762 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3764 /* l > c, c < r, l > r - rotate lcr into crl to order */
3765 qsort_rotate(u_right, pc_left, u_left);
3766 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3768 } else if (s == 0) {
3769 /* l > c, c == r - swap ends, grow pc */
3770 qsort_swap(u_right, u_left);
3772 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3774 /* l > c, c > r - swap ends to get in order */
3775 qsort_swap(u_right, u_left);
3776 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3779 /* We now know the 3 middle elements have been compared and
3780 arranged in the desired order, so we can shrink the uncompared
3785 qsort_all_asserts(pc_left, pc_right, u_left, u_right);
3787 /* The above massive nested if was the simple part :-). We now have
3788 the middle 3 elements ordered and we need to scan through the
3789 uncompared sets on either side, swapping elements that are on
3790 the wrong side or simply shuffling equal elements around to get
3791 all equal elements into the pivot chunk.
3795 int still_work_on_left;
3796 int still_work_on_right;
3798 /* Scan the uncompared values on the left. If I find a value
3799 equal to the pivot value, move it over so it is adjacent to
3800 the pivot chunk and expand the pivot chunk. If I find a value
3801 less than the pivot value, then just leave it - its already
3802 on the correct side of the partition. If I find a greater
3803 value, then stop the scan.
3805 while (still_work_on_left = (u_right >= part_left)) {
3806 s = qsort_cmp(u_right, pc_left);
3809 } else if (s == 0) {
3811 if (pc_left != u_right) {
3812 qsort_swap(u_right, pc_left);
3818 qsort_assert(u_right < pc_left);
3819 qsort_assert(pc_left <= pc_right);
3820 qsort_assert(qsort_cmp(u_right + 1, pc_left) <= 0);
3821 qsort_assert(qsort_cmp(pc_left, pc_right) == 0);
3824 /* Do a mirror image scan of uncompared values on the right
3826 while (still_work_on_right = (u_left <= part_right)) {
3827 s = qsort_cmp(pc_right, u_left);
3830 } else if (s == 0) {
3832 if (pc_right != u_left) {
3833 qsort_swap(pc_right, u_left);
3839 qsort_assert(u_left > pc_right);
3840 qsort_assert(pc_left <= pc_right);
3841 qsort_assert(qsort_cmp(pc_right, u_left - 1) <= 0);
3842 qsort_assert(qsort_cmp(pc_left, pc_right) == 0);
3845 if (still_work_on_left) {
3846 /* I know I have a value on the left side which needs to be
3847 on the right side, but I need to know more to decide
3848 exactly the best thing to do with it.
3850 if (still_work_on_right) {
3851 /* I know I have values on both side which are out of
3852 position. This is a big win because I kill two birds
3853 with one swap (so to speak). I can advance the
3854 uncompared pointers on both sides after swapping both
3855 of them into the right place.
3857 qsort_swap(u_right, u_left);
3860 qsort_all_asserts(pc_left, pc_right, u_left, u_right);
3862 /* I have an out of position value on the left, but the
3863 right is fully scanned, so I "slide" the pivot chunk
3864 and any less-than values left one to make room for the
3865 greater value over on the right. If the out of position
3866 value is immediately adjacent to the pivot chunk (there
3867 are no less-than values), I can do that with a swap,
3868 otherwise, I have to rotate one of the less than values
3869 into the former position of the out of position value
3870 and the right end of the pivot chunk into the left end
3874 if (pc_left == u_right) {
3875 qsort_swap(u_right, pc_right);
3876 qsort_all_asserts(pc_left, pc_right-1, u_left, u_right-1);
3878 qsort_rotate(u_right, pc_left, pc_right);
3879 qsort_all_asserts(pc_left, pc_right-1, u_left, u_right-1);
3884 } else if (still_work_on_right) {
3885 /* Mirror image of complex case above: I have an out of
3886 position value on the right, but the left is fully
3887 scanned, so I need to shuffle things around to make room
3888 for the right value on the left.
3891 if (pc_right == u_left) {
3892 qsort_swap(u_left, pc_left);
3893 qsort_all_asserts(pc_left+1, pc_right, u_left+1, u_right);
3895 qsort_rotate(pc_right, pc_left, u_left);
3896 qsort_all_asserts(pc_left+1, pc_right, u_left+1, u_right);
3901 /* No more scanning required on either side of partition,
3902 break out of loop and figure out next set of partitions
3908 /* The elements in the pivot chunk are now in the right place. They
3909 will never move or be compared again. All I have to do is decide
3910 what to do with the stuff to the left and right of the pivot
3913 Notes on the QSORT_ORDER_GUESS ifdef code:
3915 1. If I just built these partitions without swapping any (or
3916 very many) elements, there is a chance that the elements are
3917 already ordered properly (being properly ordered will
3918 certainly result in no swapping, but the converse can't be
3921 2. A (properly written) insertion sort will run faster on
3922 already ordered data than qsort will.
3924 3. Perhaps there is some way to make a good guess about
3925 switching to an insertion sort earlier than partition size 6
3926 (for instance - we could save the partition size on the stack
3927 and increase the size each time we find we didn't swap, thus
3928 switching to insertion sort earlier for partitions with a
3929 history of not swapping).
3931 4. Naturally, if I just switch right away, it will make
3932 artificial benchmarks with pure ascending (or descending)
3933 data look really good, but is that a good reason in general?
3937 #ifdef QSORT_ORDER_GUESS
3939 #if QSORT_ORDER_GUESS == 1
3940 qsort_break_even = (part_right - part_left) + 1;
3942 #if QSORT_ORDER_GUESS == 2
3943 qsort_break_even *= 2;
3945 #if QSORT_ORDER_GUESS == 3
3946 int prev_break = qsort_break_even;
3947 qsort_break_even *= qsort_break_even;
3948 if (qsort_break_even < prev_break) {
3949 qsort_break_even = (part_right - part_left) + 1;
3953 qsort_break_even = QSORT_BREAK_EVEN;
3957 if (part_left < pc_left) {
3958 /* There are elements on the left which need more processing.
3959 Check the right as well before deciding what to do.
3961 if (pc_right < part_right) {
3962 /* We have two partitions to be sorted. Stack the biggest one
3963 and process the smallest one on the next iteration. This
3964 minimizes the stack height by insuring that any additional
3965 stack entries must come from the smallest partition which
3966 (because it is smallest) will have the fewest
3967 opportunities to generate additional stack entries.
3969 if ((part_right - pc_right) > (pc_left - part_left)) {
3970 /* stack the right partition, process the left */
3971 partition_stack[next_stack_entry].left = pc_right + 1;
3972 partition_stack[next_stack_entry].right = part_right;
3973 #ifdef QSORT_ORDER_GUESS
3974 partition_stack[next_stack_entry].qsort_break_even = qsort_break_even;
3976 part_right = pc_left - 1;
3978 /* stack the left partition, process the right */
3979 partition_stack[next_stack_entry].left = part_left;
3980 partition_stack[next_stack_entry].right = pc_left - 1;
3981 #ifdef QSORT_ORDER_GUESS
3982 partition_stack[next_stack_entry].qsort_break_even = qsort_break_even;
3984 part_left = pc_right + 1;
3986 qsort_assert(next_stack_entry < QSORT_MAX_STACK);
3989 /* The elements on the left are the only remaining elements
3990 that need sorting, arrange for them to be processed as the
3993 part_right = pc_left - 1;
3995 } else if (pc_right < part_right) {
3996 /* There is only one chunk on the right to be sorted, make it
3997 the new partition and loop back around.
3999 part_left = pc_right + 1;
4001 /* This whole partition wound up in the pivot chunk, so
4002 we need to get a new partition off the stack.
4004 if (next_stack_entry == 0) {
4005 /* the stack is empty - we are done */
4009 part_left = partition_stack[next_stack_entry].left;
4010 part_right = partition_stack[next_stack_entry].right;
4011 #ifdef QSORT_ORDER_GUESS
4012 qsort_break_even = partition_stack[next_stack_entry].qsort_break_even;
4016 /* This partition is too small to fool with qsort complexity, just
4017 do an ordinary insertion sort to minimize overhead.
4020 /* Assume 1st element is in right place already, and start checking
4021 at 2nd element to see where it should be inserted.
4023 for (i = part_left + 1; i <= part_right; ++i) {
4025 /* Scan (backwards - just in case 'i' is already in right place)
4026 through the elements already sorted to see if the ith element
4027 belongs ahead of one of them.
4029 for (j = i - 1; j >= part_left; --j) {
4030 if (qsort_cmp(i, j) >= 0) {
4031 /* i belongs right after j
4038 /* Looks like we really need to move some things
4042 for (k = i - 1; k >= j; --k)
4043 array[k + 1] = array[k];
4048 /* That partition is now sorted, grab the next one, or get out
4049 of the loop if there aren't any more.
4052 if (next_stack_entry == 0) {
4053 /* the stack is empty - we are done */
4057 part_left = partition_stack[next_stack_entry].left;
4058 part_right = partition_stack[next_stack_entry].right;
4059 #ifdef QSORT_ORDER_GUESS
4060 qsort_break_even = partition_stack[next_stack_entry].qsort_break_even;
4065 /* Believe it or not, the array is sorted at this point! */