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))
29 static I32 sortcv(pTHXo_ SV *a, SV *b);
30 static I32 sv_ncmp(pTHXo_ SV *a, SV *b);
31 static I32 sv_i_ncmp(pTHXo_ SV *a, SV *b);
32 static I32 amagic_ncmp(pTHXo_ SV *a, SV *b);
33 static I32 amagic_i_ncmp(pTHXo_ SV *a, SV *b);
34 static I32 amagic_cmp(pTHXo_ SV *a, SV *b);
35 static I32 amagic_cmp_locale(pTHXo_ SV *a, SV *b);
36 static I32 run_user_filter(pTHXo_ int idx, SV *buf_sv, int maxlen);
39 static I32 sv_cmp_static(pTHXo_ SV *a, SV *b);
40 static I32 sv_cmp_locale_static(pTHXo_ SV *a, SV *b);
42 #define sv_cmp_static Perl_sv_cmp
43 #define sv_cmp_locale_static Perl_sv_cmp_locale
52 cxix = dopoptosub(cxstack_ix);
56 switch (cxstack[cxix].blk_gimme) {
73 /* XXXX Should store the old value to allow for tie/overload - and
74 restore in regcomp, where marked with XXXX. */
82 register PMOP *pm = (PMOP*)cLOGOP->op_other;
86 MAGIC *mg = Null(MAGIC*);
90 SV *sv = SvRV(tmpstr);
92 mg = mg_find(sv, 'r');
95 regexp *re = (regexp *)mg->mg_obj;
96 ReREFCNT_dec(pm->op_pmregexp);
97 pm->op_pmregexp = ReREFCNT_inc(re);
100 t = SvPV(tmpstr, len);
102 /* Check against the last compiled regexp. */
103 if (!pm->op_pmregexp || !pm->op_pmregexp->precomp ||
104 pm->op_pmregexp->prelen != len ||
105 memNE(pm->op_pmregexp->precomp, t, len))
107 if (pm->op_pmregexp) {
108 ReREFCNT_dec(pm->op_pmregexp);
109 pm->op_pmregexp = Null(REGEXP*); /* crucial if regcomp aborts */
111 if (PL_op->op_flags & OPf_SPECIAL)
112 PL_reginterp_cnt = I32_MAX; /* Mark as safe. */
114 pm->op_pmflags = pm->op_pmpermflags; /* reset case sensitivity */
115 pm->op_pmregexp = CALLREGCOMP(aTHX_ t, t + len, pm);
116 PL_reginterp_cnt = 0; /* XXXX Be extra paranoid - needed
117 inside tie/overload accessors. */
121 #ifndef INCOMPLETE_TAINTS
124 pm->op_pmdynflags |= PMdf_TAINTED;
126 pm->op_pmdynflags &= ~PMdf_TAINTED;
130 if (!pm->op_pmregexp->prelen && PL_curpm)
132 else if (strEQ("\\s+", pm->op_pmregexp->precomp))
133 pm->op_pmflags |= PMf_WHITE;
135 if (pm->op_pmflags & PMf_KEEP) {
136 pm->op_private &= ~OPpRUNTIME; /* no point compiling again */
137 cLOGOP->op_first->op_next = PL_op->op_next;
145 register PMOP *pm = (PMOP*) cLOGOP->op_other;
146 register PERL_CONTEXT *cx = &cxstack[cxstack_ix];
147 register SV *dstr = cx->sb_dstr;
148 register char *s = cx->sb_s;
149 register char *m = cx->sb_m;
150 char *orig = cx->sb_orig;
151 register REGEXP *rx = cx->sb_rx;
153 rxres_restore(&cx->sb_rxres, rx);
155 if (cx->sb_iters++) {
156 if (cx->sb_iters > cx->sb_maxiters)
157 DIE(aTHX_ "Substitution loop");
159 if (!(cx->sb_rxtainted & 2) && SvTAINTED(TOPs))
160 cx->sb_rxtainted |= 2;
161 sv_catsv(dstr, POPs);
164 if (cx->sb_once || !CALLREGEXEC(aTHX_ rx, s, cx->sb_strend, orig,
165 s == m, cx->sb_targ, NULL,
166 ((cx->sb_rflags & REXEC_COPY_STR)
167 ? (REXEC_IGNOREPOS|REXEC_NOT_FIRST)
168 : (REXEC_COPY_STR|REXEC_IGNOREPOS|REXEC_NOT_FIRST))))
170 SV *targ = cx->sb_targ;
171 sv_catpvn(dstr, s, cx->sb_strend - s);
173 cx->sb_rxtainted |= RX_MATCH_TAINTED(rx);
175 (void)SvOOK_off(targ);
176 Safefree(SvPVX(targ));
177 SvPVX(targ) = SvPVX(dstr);
178 SvCUR_set(targ, SvCUR(dstr));
179 SvLEN_set(targ, SvLEN(dstr));
183 TAINT_IF(cx->sb_rxtainted & 1);
184 PUSHs(sv_2mortal(newSViv((I32)cx->sb_iters - 1)));
186 (void)SvPOK_only(targ);
187 TAINT_IF(cx->sb_rxtainted);
191 LEAVE_SCOPE(cx->sb_oldsave);
193 RETURNOP(pm->op_next);
196 if (RX_MATCH_COPIED(rx) && rx->subbeg != orig) {
199 cx->sb_orig = orig = rx->subbeg;
201 cx->sb_strend = s + (cx->sb_strend - m);
203 cx->sb_m = m = rx->startp[0] + orig;
204 sv_catpvn(dstr, s, m-s);
205 cx->sb_s = rx->endp[0] + orig;
206 cx->sb_rxtainted |= RX_MATCH_TAINTED(rx);
207 rxres_save(&cx->sb_rxres, rx);
208 RETURNOP(pm->op_pmreplstart);
212 Perl_rxres_save(pTHX_ void **rsp, REGEXP *rx)
217 if (!p || p[1] < rx->nparens) {
218 i = 6 + rx->nparens * 2;
226 *p++ = PTR2UV(RX_MATCH_COPIED(rx) ? rx->subbeg : Nullch);
227 RX_MATCH_COPIED_off(rx);
231 *p++ = PTR2UV(rx->subbeg);
232 *p++ = (UV)rx->sublen;
233 for (i = 0; i <= rx->nparens; ++i) {
234 *p++ = (UV)rx->startp[i];
235 *p++ = (UV)rx->endp[i];
240 Perl_rxres_restore(pTHX_ void **rsp, REGEXP *rx)
245 if (RX_MATCH_COPIED(rx))
246 Safefree(rx->subbeg);
247 RX_MATCH_COPIED_set(rx, *p);
252 rx->subbeg = INT2PTR(char*,*p++);
253 rx->sublen = (I32)(*p++);
254 for (i = 0; i <= rx->nparens; ++i) {
255 rx->startp[i] = (I32)(*p++);
256 rx->endp[i] = (I32)(*p++);
261 Perl_rxres_free(pTHX_ void **rsp)
266 Safefree(INT2PTR(char*,*p));
274 djSP; dMARK; dORIGMARK;
275 register SV *tmpForm = *++MARK;
287 bool chopspace = (strchr(PL_chopset, ' ') != Nullch);
293 STRLEN fudge = SvCUR(tmpForm) * (IN_UTF8 ? 3 : 1) + 1;
295 if (!SvMAGICAL(tmpForm) || !SvCOMPILED(tmpForm)) {
296 SvREADONLY_off(tmpForm);
297 doparseform(tmpForm);
300 SvPV_force(PL_formtarget, len);
301 t = SvGROW(PL_formtarget, len + fudge + 1); /* XXX SvCUR bad */
303 f = SvPV(tmpForm, len);
304 /* need to jump to the next word */
305 s = f + len + WORD_ALIGN - SvCUR(tmpForm) % WORD_ALIGN;
314 case FF_LITERAL: arg = fpc[1]; name = "LITERAL"; break;
315 case FF_BLANK: arg = fpc[1]; name = "BLANK"; break;
316 case FF_SKIP: arg = fpc[1]; name = "SKIP"; break;
317 case FF_FETCH: arg = fpc[1]; name = "FETCH"; break;
318 case FF_DECIMAL: arg = fpc[1]; name = "DECIMAL"; break;
320 case FF_CHECKNL: name = "CHECKNL"; break;
321 case FF_CHECKCHOP: name = "CHECKCHOP"; break;
322 case FF_SPACE: name = "SPACE"; break;
323 case FF_HALFSPACE: name = "HALFSPACE"; break;
324 case FF_ITEM: name = "ITEM"; break;
325 case FF_CHOP: name = "CHOP"; break;
326 case FF_LINEGLOB: name = "LINEGLOB"; break;
327 case FF_NEWLINE: name = "NEWLINE"; break;
328 case FF_MORE: name = "MORE"; break;
329 case FF_LINEMARK: name = "LINEMARK"; break;
330 case FF_END: name = "END"; break;
333 PerlIO_printf(Perl_debug_log, "%-16s%ld\n", name, (long) arg);
335 PerlIO_printf(Perl_debug_log, "%-16s\n", name);
363 if (ckWARN(WARN_SYNTAX))
364 Perl_warner(aTHX_ WARN_SYNTAX, "Not enough format arguments");
369 item = s = SvPV(sv, len);
372 itemsize = sv_len_utf8(sv);
373 if (itemsize != len) {
375 if (itemsize > fieldsize) {
376 itemsize = fieldsize;
377 itembytes = itemsize;
378 sv_pos_u2b(sv, &itembytes, 0);
382 send = chophere = s + itembytes;
391 sv_pos_b2u(sv, &itemsize);
395 if (itemsize > fieldsize)
396 itemsize = fieldsize;
397 send = chophere = s + itemsize;
409 item = s = SvPV(sv, len);
412 itemsize = sv_len_utf8(sv);
413 if (itemsize != len) {
415 if (itemsize <= fieldsize) {
416 send = chophere = s + itemsize;
427 itemsize = fieldsize;
428 itembytes = itemsize;
429 sv_pos_u2b(sv, &itembytes, 0);
430 send = chophere = s + itembytes;
431 while (s < send || (s == send && isSPACE(*s))) {
441 if (strchr(PL_chopset, *s))
446 itemsize = chophere - item;
447 sv_pos_b2u(sv, &itemsize);
452 if (itemsize <= fieldsize) {
453 send = chophere = s + itemsize;
464 itemsize = fieldsize;
465 send = chophere = s + itemsize;
466 while (s < send || (s == send && isSPACE(*s))) {
476 if (strchr(PL_chopset, *s))
481 itemsize = chophere - item;
486 arg = fieldsize - itemsize;
495 arg = fieldsize - itemsize;
510 switch (UTF8SKIP(s)) {
521 if ( !((*t++ = *s++) & ~31) )
529 int ch = *t++ = *s++;
532 if ( !((*t++ = *s++) & ~31) )
541 while (*s && isSPACE(*s))
548 item = s = SvPV(sv, len);
561 SvCUR_set(PL_formtarget, t - SvPVX(PL_formtarget));
562 sv_catpvn(PL_formtarget, item, itemsize);
563 SvGROW(PL_formtarget, SvCUR(PL_formtarget) + fudge + 1);
564 t = SvPVX(PL_formtarget) + SvCUR(PL_formtarget);
569 /* If the field is marked with ^ and the value is undefined,
572 if ((arg & 512) && !SvOK(sv)) {
580 /* Formats aren't yet marked for locales, so assume "yes". */
582 RESTORE_NUMERIC_LOCAL();
583 #if defined(USE_LONG_DOUBLE)
585 sprintf(t, "%#*.*" PERL_PRIfldbl,
586 (int) fieldsize, (int) arg & 255, value);
588 sprintf(t, "%*.0" PERL_PRIfldbl, (int) fieldsize, value);
593 (int) fieldsize, (int) arg & 255, value);
596 (int) fieldsize, value);
599 RESTORE_NUMERIC_STANDARD();
606 while (t-- > linemark && *t == ' ') ;
614 if (arg) { /* repeat until fields exhausted? */
616 SvCUR_set(PL_formtarget, t - SvPVX(PL_formtarget));
617 lines += FmLINES(PL_formtarget);
620 if (strnEQ(linemark, linemark - arg, arg))
621 DIE(aTHX_ "Runaway format");
623 FmLINES(PL_formtarget) = lines;
625 RETURNOP(cLISTOP->op_first);
638 while (*s && isSPACE(*s) && s < send)
642 arg = fieldsize - itemsize;
649 if (strnEQ(s," ",3)) {
650 while (s > SvPVX(PL_formtarget) && isSPACE(s[-1]))
661 SvCUR_set(PL_formtarget, t - SvPVX(PL_formtarget));
662 FmLINES(PL_formtarget) += lines;
674 if (PL_stack_base + *PL_markstack_ptr == SP) {
676 if (GIMME_V == G_SCALAR)
677 XPUSHs(sv_2mortal(newSViv(0)));
678 RETURNOP(PL_op->op_next->op_next);
680 PL_stack_sp = PL_stack_base + *PL_markstack_ptr + 1;
681 pp_pushmark(); /* push dst */
682 pp_pushmark(); /* push src */
683 ENTER; /* enter outer scope */
686 /* SAVE_DEFSV does *not* suffice here for USE_THREADS */
688 ENTER; /* enter inner scope */
691 src = PL_stack_base[*PL_markstack_ptr];
696 if (PL_op->op_type == OP_MAPSTART)
697 pp_pushmark(); /* push top */
698 return ((LOGOP*)PL_op->op_next)->op_other;
703 DIE(aTHX_ "panic: mapstart"); /* uses grepstart */
709 I32 diff = (SP - PL_stack_base) - *PL_markstack_ptr;
715 ++PL_markstack_ptr[-1];
717 if (diff > PL_markstack_ptr[-1] - PL_markstack_ptr[-2]) {
718 shift = diff - (PL_markstack_ptr[-1] - PL_markstack_ptr[-2]);
719 count = (SP - PL_stack_base) - PL_markstack_ptr[-1] + 2;
724 PL_markstack_ptr[-1] += shift;
725 *PL_markstack_ptr += shift;
729 dst = PL_stack_base + (PL_markstack_ptr[-2] += diff) - 1;
732 *dst-- = SvTEMP(TOPs) ? POPs : sv_mortalcopy(POPs);
734 LEAVE; /* exit inner scope */
737 if (PL_markstack_ptr[-1] > *PL_markstack_ptr) {
741 (void)POPMARK; /* pop top */
742 LEAVE; /* exit outer scope */
743 (void)POPMARK; /* pop src */
744 items = --*PL_markstack_ptr - PL_markstack_ptr[-1];
745 (void)POPMARK; /* pop dst */
746 SP = PL_stack_base + POPMARK; /* pop original mark */
747 if (gimme == G_SCALAR) {
751 else if (gimme == G_ARRAY)
758 ENTER; /* enter inner scope */
761 src = PL_stack_base[PL_markstack_ptr[-1]];
765 RETURNOP(cLOGOP->op_other);
771 djSP; dMARK; dORIGMARK;
773 SV **myorigmark = ORIGMARK;
779 OP* nextop = PL_op->op_next;
782 if (gimme != G_ARRAY) {
788 SAVEPPTR(PL_sortcop);
789 if (PL_op->op_flags & OPf_STACKED) {
790 if (PL_op->op_flags & OPf_SPECIAL) {
791 OP *kid = cLISTOP->op_first->op_sibling; /* pass pushmark */
792 kid = kUNOP->op_first; /* pass rv2gv */
793 kid = kUNOP->op_first; /* pass leave */
794 PL_sortcop = kid->op_next;
795 stash = PL_curcop->cop_stash;
798 cv = sv_2cv(*++MARK, &stash, &gv, 0);
799 if (!(cv && CvROOT(cv))) {
801 SV *tmpstr = sv_newmortal();
802 gv_efullname3(tmpstr, gv, Nullch);
803 if (cv && CvXSUB(cv))
804 DIE(aTHX_ "Xsub \"%s\" called in sort", SvPVX(tmpstr));
805 DIE(aTHX_ "Undefined sort subroutine \"%s\" called",
810 DIE(aTHX_ "Xsub called in sort");
811 DIE(aTHX_ "Undefined subroutine in sort");
813 DIE(aTHX_ "Not a CODE reference in sort");
815 PL_sortcop = CvSTART(cv);
816 SAVESPTR(CvROOT(cv)->op_ppaddr);
817 CvROOT(cv)->op_ppaddr = PL_ppaddr[OP_NULL];
820 PL_curpad = AvARRAY((AV*)AvARRAY(CvPADLIST(cv))[1]);
825 stash = PL_curcop->cop_stash;
829 while (MARK < SP) { /* This may or may not shift down one here. */
831 if (*up = *++MARK) { /* Weed out nulls. */
833 if (!PL_sortcop && !SvPOK(*up)) {
838 (void)sv_2pv(*up, &n_a);
843 max = --up - myorigmark;
848 bool oldcatch = CATCH_GET;
854 PUSHSTACKi(PERLSI_SORT);
855 if (PL_sortstash != stash) {
856 PL_firstgv = gv_fetchpv("a", TRUE, SVt_PV);
857 PL_secondgv = gv_fetchpv("b", TRUE, SVt_PV);
858 PL_sortstash = stash;
861 SAVESPTR(GvSV(PL_firstgv));
862 SAVESPTR(GvSV(PL_secondgv));
864 PUSHBLOCK(cx, CXt_NULL, PL_stack_base);
865 if (!(PL_op->op_flags & OPf_SPECIAL)) {
866 bool hasargs = FALSE;
867 cx->cx_type = CXt_SUB;
868 cx->blk_gimme = G_SCALAR;
871 (void)SvREFCNT_inc(cv); /* in preparation for POPSUB */
873 PL_sortcxix = cxstack_ix;
874 qsortsv((myorigmark+1), max, sortcv);
876 POPBLOCK(cx,PL_curpm);
884 MEXTEND(SP, 20); /* Can't afford stack realloc on signal. */
885 qsortsv(ORIGMARK+1, max,
886 (PL_op->op_private & OPpSORT_NUMERIC)
887 ? ( (PL_op->op_private & OPpSORT_INTEGER)
888 ? ( overloading ? amagic_i_ncmp : sv_i_ncmp)
889 : ( overloading ? amagic_ncmp : sv_ncmp))
890 : ( (PL_op->op_private & OPpLOCALE)
893 : sv_cmp_locale_static)
894 : ( overloading ? amagic_cmp : sv_cmp_static)));
895 if (PL_op->op_private & OPpSORT_REVERSE) {
897 SV **q = ORIGMARK+max;
907 PL_stack_sp = ORIGMARK + max;
915 if (GIMME == G_ARRAY)
917 if (SvTRUEx(PAD_SV(PL_op->op_targ)))
918 return cLOGOP->op_other;
927 if (GIMME == G_ARRAY) {
928 RETURNOP(((LOGOP*)cUNOP->op_first)->op_other);
932 SV *targ = PAD_SV(PL_op->op_targ);
934 if ((PL_op->op_private & OPpFLIP_LINENUM)
935 ? (PL_last_in_gv && SvIV(sv) == (IV)IoLINES(GvIOp(PL_last_in_gv)))
937 sv_setiv(PAD_SV(cUNOP->op_first->op_targ), 1);
938 if (PL_op->op_flags & OPf_SPECIAL) {
946 RETURNOP(((LOGOP*)cUNOP->op_first)->op_other);
959 if (GIMME == G_ARRAY) {
965 if (SvGMAGICAL(left))
967 if (SvGMAGICAL(right))
970 if (SvNIOKp(left) || !SvPOKp(left) ||
971 (looks_like_number(left) && *SvPVX(left) != '0') )
973 if (SvNV(left) < IV_MIN || SvNV(right) > IV_MAX)
974 DIE(aTHX_ "Range iterator outside integer range");
985 sv = sv_2mortal(newSViv(i++));
990 SV *final = sv_mortalcopy(right);
992 char *tmps = SvPV(final, len);
994 sv = sv_mortalcopy(left);
996 while (!SvNIOKp(sv) && SvCUR(sv) <= len) {
998 if (strEQ(SvPVX(sv),tmps))
1000 sv = sv_2mortal(newSVsv(sv));
1007 SV *targ = PAD_SV(cUNOP->op_first->op_targ);
1009 if ((PL_op->op_private & OPpFLIP_LINENUM)
1010 ? (PL_last_in_gv && SvIV(sv) == (IV)IoLINES(GvIOp(PL_last_in_gv)))
1012 sv_setiv(PAD_SV(((UNOP*)cUNOP->op_first)->op_first->op_targ), 0);
1013 sv_catpv(targ, "E0");
1024 S_dopoptolabel(pTHX_ char *label)
1028 register PERL_CONTEXT *cx;
1030 for (i = cxstack_ix; i >= 0; i--) {
1032 switch (CxTYPE(cx)) {
1034 if (ckWARN(WARN_UNSAFE))
1035 Perl_warner(aTHX_ WARN_UNSAFE, "Exiting substitution via %s",
1036 PL_op_name[PL_op->op_type]);
1039 if (ckWARN(WARN_UNSAFE))
1040 Perl_warner(aTHX_ WARN_UNSAFE, "Exiting subroutine via %s",
1041 PL_op_name[PL_op->op_type]);
1044 if (ckWARN(WARN_UNSAFE))
1045 Perl_warner(aTHX_ WARN_UNSAFE, "Exiting eval via %s",
1046 PL_op_name[PL_op->op_type]);
1049 if (ckWARN(WARN_UNSAFE))
1050 Perl_warner(aTHX_ WARN_UNSAFE, "Exiting pseudo-block via %s",
1051 PL_op_name[PL_op->op_type]);
1054 if (!cx->blk_loop.label ||
1055 strNE(label, cx->blk_loop.label) ) {
1056 DEBUG_l(Perl_deb(aTHX_ "(Skipping label #%ld %s)\n",
1057 (long)i, cx->blk_loop.label));
1060 DEBUG_l( Perl_deb(aTHX_ "(Found label #%ld %s)\n", (long)i, label));
1068 Perl_dowantarray(pTHX)
1070 I32 gimme = block_gimme();
1071 return (gimme == G_VOID) ? G_SCALAR : gimme;
1075 Perl_block_gimme(pTHX)
1080 cxix = dopoptosub(cxstack_ix);
1084 switch (cxstack[cxix].blk_gimme) {
1092 Perl_croak(aTHX_ "panic: bad gimme: %d\n", cxstack[cxix].blk_gimme);
1099 S_dopoptosub(pTHX_ I32 startingblock)
1102 return dopoptosub_at(cxstack, startingblock);
1106 S_dopoptosub_at(pTHX_ PERL_CONTEXT *cxstk, I32 startingblock)
1110 register PERL_CONTEXT *cx;
1111 for (i = startingblock; i >= 0; i--) {
1113 switch (CxTYPE(cx)) {
1118 DEBUG_l( Perl_deb(aTHX_ "(Found sub #%ld)\n", (long)i));
1126 S_dopoptoeval(pTHX_ I32 startingblock)
1130 register PERL_CONTEXT *cx;
1131 for (i = startingblock; i >= 0; i--) {
1133 switch (CxTYPE(cx)) {
1137 DEBUG_l( Perl_deb(aTHX_ "(Found eval #%ld)\n", (long)i));
1145 S_dopoptoloop(pTHX_ I32 startingblock)
1149 register PERL_CONTEXT *cx;
1150 for (i = startingblock; i >= 0; i--) {
1152 switch (CxTYPE(cx)) {
1154 if (ckWARN(WARN_UNSAFE))
1155 Perl_warner(aTHX_ WARN_UNSAFE, "Exiting substitution via %s",
1156 PL_op_name[PL_op->op_type]);
1159 if (ckWARN(WARN_UNSAFE))
1160 Perl_warner(aTHX_ WARN_UNSAFE, "Exiting subroutine via %s",
1161 PL_op_name[PL_op->op_type]);
1164 if (ckWARN(WARN_UNSAFE))
1165 Perl_warner(aTHX_ WARN_UNSAFE, "Exiting eval via %s",
1166 PL_op_name[PL_op->op_type]);
1169 if (ckWARN(WARN_UNSAFE))
1170 Perl_warner(aTHX_ WARN_UNSAFE, "Exiting pseudo-block via %s",
1171 PL_op_name[PL_op->op_type]);
1174 DEBUG_l( Perl_deb(aTHX_ "(Found loop #%ld)\n", (long)i));
1182 Perl_dounwind(pTHX_ I32 cxix)
1185 register PERL_CONTEXT *cx;
1189 while (cxstack_ix > cxix) {
1191 cx = &cxstack[cxstack_ix];
1192 DEBUG_l(PerlIO_printf(Perl_debug_log, "Unwinding block %ld, type %s\n",
1193 (long) cxstack_ix, PL_block_type[CxTYPE(cx)]));
1194 /* Note: we don't need to restore the base context info till the end. */
1195 switch (CxTYPE(cx)) {
1198 continue; /* not break */
1217 * Closures mentioned at top level of eval cannot be referenced
1218 * again, and their presence indirectly causes a memory leak.
1219 * (Note that the fact that compcv and friends are still set here
1220 * is, AFAIK, an accident.) --Chip
1222 * XXX need to get comppad et al from eval's cv rather than
1223 * relying on the incidental global values.
1226 S_free_closures(pTHX)
1229 SV **svp = AvARRAY(PL_comppad_name);
1231 for (ix = AvFILLp(PL_comppad_name); ix >= 0; ix--) {
1233 if (sv && sv != &PL_sv_undef && *SvPVX(sv) == '&') {
1235 svp[ix] = &PL_sv_undef;
1239 SvREFCNT_dec(CvOUTSIDE(sv));
1240 CvOUTSIDE(sv) = Nullcv;
1253 Perl_qerror(pTHX_ SV *err)
1256 sv_catsv(ERRSV, err);
1258 sv_catsv(PL_errors, err);
1260 Perl_warn(aTHX_ "%_", err);
1265 Perl_die_where(pTHX_ char *message, STRLEN msglen)
1271 register PERL_CONTEXT *cx;
1276 if (PL_in_eval & EVAL_KEEPERR) {
1277 static char prefix[] = "\t(in cleanup) ";
1282 else if (SvCUR(err) >= sizeof(prefix)+msglen-1) {
1285 if (*e != *message || strNE(e,message))
1289 SvGROW(err, SvCUR(err)+sizeof(prefix)+msglen);
1290 sv_catpvn(err, prefix, sizeof(prefix)-1);
1291 sv_catpvn(err, message, msglen);
1292 if (ckWARN(WARN_UNSAFE)) {
1293 STRLEN start = SvCUR(err)-msglen-sizeof(prefix)+1;
1294 Perl_warner(aTHX_ WARN_UNSAFE, SvPVX(err)+start);
1299 sv_setpvn(ERRSV, message, msglen);
1302 message = SvPVx(ERRSV, msglen);
1304 while ((cxix = dopoptoeval(cxstack_ix)) < 0
1305 && PL_curstackinfo->si_prev)
1314 if (cxix < cxstack_ix)
1317 POPBLOCK(cx,PL_curpm);
1318 if (CxTYPE(cx) != CXt_EVAL) {
1319 PerlIO_write(Perl_error_log, "panic: die ", 11);
1320 PerlIO_write(Perl_error_log, message, msglen);
1325 if (gimme == G_SCALAR)
1326 *++newsp = &PL_sv_undef;
1327 PL_stack_sp = newsp;
1331 if (optype == OP_REQUIRE) {
1332 char* msg = SvPVx(ERRSV, n_a);
1333 DIE(aTHX_ "%sCompilation failed in require",
1334 *msg ? msg : "Unknown error\n");
1336 return pop_return();
1340 message = SvPVx(ERRSV, msglen);
1343 /* SFIO can really mess with your errno */
1346 PerlIO *serr = Perl_error_log;
1348 PerlIO_write(serr, message, msglen);
1349 (void)PerlIO_flush(serr);
1362 if (SvTRUE(left) != SvTRUE(right))
1374 RETURNOP(cLOGOP->op_other);
1383 RETURNOP(cLOGOP->op_other);
1389 register I32 cxix = dopoptosub(cxstack_ix);
1390 register PERL_CONTEXT *cx;
1391 register PERL_CONTEXT *ccstack = cxstack;
1392 PERL_SI *top_si = PL_curstackinfo;
1403 /* we may be in a higher stacklevel, so dig down deeper */
1404 while (cxix < 0 && top_si->si_type != PERLSI_MAIN) {
1405 top_si = top_si->si_prev;
1406 ccstack = top_si->si_cxstack;
1407 cxix = dopoptosub_at(ccstack, top_si->si_cxix);
1410 if (GIMME != G_ARRAY)
1414 if (PL_DBsub && cxix >= 0 &&
1415 ccstack[cxix].blk_sub.cv == GvCV(PL_DBsub))
1419 cxix = dopoptosub_at(ccstack, cxix - 1);
1422 cx = &ccstack[cxix];
1423 if (CxTYPE(cx) == CXt_SUB) {
1424 dbcxix = dopoptosub_at(ccstack, cxix - 1);
1425 /* We expect that ccstack[dbcxix] is CXt_SUB, anyway, the
1426 field below is defined for any cx. */
1427 if (PL_DBsub && dbcxix >= 0 && ccstack[dbcxix].blk_sub.cv == GvCV(PL_DBsub))
1428 cx = &ccstack[dbcxix];
1431 if (GIMME != G_ARRAY) {
1432 hv = cx->blk_oldcop->cop_stash;
1434 PUSHs(&PL_sv_undef);
1437 sv_setpv(TARG, HvNAME(hv));
1443 hv = cx->blk_oldcop->cop_stash;
1445 PUSHs(&PL_sv_undef);
1447 PUSHs(sv_2mortal(newSVpv(HvNAME(hv), 0)));
1448 PUSHs(sv_2mortal(newSVpvn(SvPVX(GvSV(cx->blk_oldcop->cop_filegv)),
1449 SvCUR(GvSV(cx->blk_oldcop->cop_filegv)))));
1450 PUSHs(sv_2mortal(newSViv((I32)cx->blk_oldcop->cop_line)));
1453 if (CxTYPE(cx) == CXt_SUB) { /* So is ccstack[dbcxix]. */
1455 gv_efullname3(sv, CvGV(ccstack[cxix].blk_sub.cv), Nullch);
1456 PUSHs(sv_2mortal(sv));
1457 PUSHs(sv_2mortal(newSViv((I32)cx->blk_sub.hasargs)));
1460 PUSHs(sv_2mortal(newSVpvn("(eval)",6)));
1461 PUSHs(sv_2mortal(newSViv(0)));
1463 gimme = (I32)cx->blk_gimme;
1464 if (gimme == G_VOID)
1465 PUSHs(&PL_sv_undef);
1467 PUSHs(sv_2mortal(newSViv(gimme & G_ARRAY)));
1468 if (CxTYPE(cx) == CXt_EVAL) {
1469 if (cx->blk_eval.old_op_type == OP_ENTEREVAL) {
1470 PUSHs(cx->blk_eval.cur_text);
1473 else if (cx->blk_eval.old_name) { /* Try blocks have old_name == 0. */
1474 /* Require, put the name. */
1475 PUSHs(sv_2mortal(newSVpv(cx->blk_eval.old_name, 0)));
1480 PUSHs(&PL_sv_undef);
1481 PUSHs(&PL_sv_undef);
1483 if (CxTYPE(cx) == CXt_SUB && cx->blk_sub.hasargs
1484 && PL_curcop->cop_stash == PL_debstash)
1486 AV *ary = cx->blk_sub.argarray;
1487 int off = AvARRAY(ary) - AvALLOC(ary);
1491 PL_dbargs = GvAV(gv_AVadd(tmpgv = gv_fetchpv("DB::args", TRUE,
1494 AvREAL_off(PL_dbargs); /* XXX Should be REIFY */
1497 if (AvMAX(PL_dbargs) < AvFILLp(ary) + off)
1498 av_extend(PL_dbargs, AvFILLp(ary) + off);
1499 Copy(AvALLOC(ary), AvARRAY(PL_dbargs), AvFILLp(ary) + 1 + off, SV*);
1500 AvFILLp(PL_dbargs) = AvFILLp(ary) + off;
1502 /* XXX only hints propagated via op_private are currently
1503 * visible (others are not easily accessible, since they
1504 * use the global PL_hints) */
1505 PUSHs(sv_2mortal(newSViv((I32)cx->blk_oldcop->op_private &
1506 HINT_PRIVATE_MASK)));
1520 sv_reset(tmps, PL_curcop->cop_stash);
1532 PL_curcop = (COP*)PL_op;
1533 TAINT_NOT; /* Each statement is presumed innocent */
1534 PL_stack_sp = PL_stack_base + cxstack[cxstack_ix].blk_oldsp;
1537 if (PL_op->op_private || SvIV(PL_DBsingle) || SvIV(PL_DBsignal) || SvIV(PL_DBtrace))
1541 register PERL_CONTEXT *cx;
1542 I32 gimme = G_ARRAY;
1549 DIE(aTHX_ "No DB::DB routine defined");
1551 if (CvDEPTH(cv) >= 1 && !(PL_debug & (1<<30))) /* don't do recursive DB::DB call */
1563 push_return(PL_op->op_next);
1564 PUSHBLOCK(cx, CXt_SUB, SP);
1567 (void)SvREFCNT_inc(cv);
1568 SAVESPTR(PL_curpad);
1569 PL_curpad = AvARRAY((AV*)*av_fetch(CvPADLIST(cv),1,FALSE));
1570 RETURNOP(CvSTART(cv));
1584 register PERL_CONTEXT *cx;
1585 I32 gimme = GIMME_V;
1592 if (PL_op->op_flags & OPf_SPECIAL) {
1594 svp = &THREADSV(PL_op->op_targ); /* per-thread variable */
1595 SAVEGENERICSV(*svp);
1599 #endif /* USE_THREADS */
1600 if (PL_op->op_targ) {
1601 svp = &PL_curpad[PL_op->op_targ]; /* "my" variable */
1605 svp = &GvSV((GV*)POPs); /* symbol table variable */
1606 SAVEGENERICSV(*svp);
1612 PUSHBLOCK(cx, CXt_LOOP, SP);
1613 PUSHLOOP(cx, svp, MARK);
1614 if (PL_op->op_flags & OPf_STACKED) {
1615 cx->blk_loop.iterary = (AV*)SvREFCNT_inc(POPs);
1616 if (SvTYPE(cx->blk_loop.iterary) != SVt_PVAV) {
1618 if (SvNIOKp(sv) || !SvPOKp(sv) ||
1619 (looks_like_number(sv) && *SvPVX(sv) != '0')) {
1620 if (SvNV(sv) < IV_MIN ||
1621 SvNV((SV*)cx->blk_loop.iterary) >= IV_MAX)
1622 DIE(aTHX_ "Range iterator outside integer range");
1623 cx->blk_loop.iterix = SvIV(sv);
1624 cx->blk_loop.itermax = SvIV((SV*)cx->blk_loop.iterary);
1627 cx->blk_loop.iterlval = newSVsv(sv);
1631 cx->blk_loop.iterary = PL_curstack;
1632 AvFILLp(PL_curstack) = SP - PL_stack_base;
1633 cx->blk_loop.iterix = MARK - PL_stack_base;
1642 register PERL_CONTEXT *cx;
1643 I32 gimme = GIMME_V;
1649 PUSHBLOCK(cx, CXt_LOOP, SP);
1650 PUSHLOOP(cx, 0, SP);
1658 register PERL_CONTEXT *cx;
1666 newsp = PL_stack_base + cx->blk_loop.resetsp;
1669 if (gimme == G_VOID)
1671 else if (gimme == G_SCALAR) {
1673 *++newsp = sv_mortalcopy(*SP);
1675 *++newsp = &PL_sv_undef;
1679 *++newsp = sv_mortalcopy(*++mark);
1680 TAINT_NOT; /* Each item is independent */
1686 POPLOOP(cx); /* Stack values are safe: release loop vars ... */
1687 PL_curpm = newpm; /* ... and pop $1 et al */
1699 register PERL_CONTEXT *cx;
1700 bool popsub2 = FALSE;
1707 if (PL_curstackinfo->si_type == PERLSI_SORT) {
1708 if (cxstack_ix == PL_sortcxix || dopoptosub(cxstack_ix) <= PL_sortcxix) {
1709 if (cxstack_ix > PL_sortcxix)
1710 dounwind(PL_sortcxix);
1711 AvARRAY(PL_curstack)[1] = *SP;
1712 PL_stack_sp = PL_stack_base + 1;
1717 cxix = dopoptosub(cxstack_ix);
1719 DIE(aTHX_ "Can't return outside a subroutine");
1720 if (cxix < cxstack_ix)
1724 switch (CxTYPE(cx)) {
1730 if (AvFILLp(PL_comppad_name) >= 0)
1733 if (optype == OP_REQUIRE &&
1734 (MARK == SP || (gimme == G_SCALAR && !SvTRUE(*SP))) )
1736 /* Unassume the success we assumed earlier. */
1737 char *name = cx->blk_eval.old_name;
1738 (void)hv_delete(GvHVn(PL_incgv), name, strlen(name), G_DISCARD);
1739 DIE(aTHX_ "%s did not return a true value", name);
1743 DIE(aTHX_ "panic: return");
1747 if (gimme == G_SCALAR) {
1750 if (cx->blk_sub.cv && CvDEPTH(cx->blk_sub.cv) > 1) {
1752 *++newsp = SvREFCNT_inc(*SP);
1757 *++newsp = sv_mortalcopy(*SP);
1760 *++newsp = (SvTEMP(*SP)) ? *SP : sv_mortalcopy(*SP);
1762 *++newsp = sv_mortalcopy(*SP);
1764 *++newsp = &PL_sv_undef;
1766 else if (gimme == G_ARRAY) {
1767 while (++MARK <= SP) {
1768 *++newsp = (popsub2 && SvTEMP(*MARK))
1769 ? *MARK : sv_mortalcopy(*MARK);
1770 TAINT_NOT; /* Each item is independent */
1773 PL_stack_sp = newsp;
1775 /* Stack values are safe: */
1777 POPSUB(cx,sv); /* release CV and @_ ... */
1781 PL_curpm = newpm; /* ... and pop $1 et al */
1785 return pop_return();
1792 register PERL_CONTEXT *cx;
1802 if (PL_op->op_flags & OPf_SPECIAL) {
1803 cxix = dopoptoloop(cxstack_ix);
1805 DIE(aTHX_ "Can't \"last\" outside a block");
1808 cxix = dopoptolabel(cPVOP->op_pv);
1810 DIE(aTHX_ "Label not found for \"last %s\"", cPVOP->op_pv);
1812 if (cxix < cxstack_ix)
1817 switch (CxTYPE(cx)) {
1820 newsp = PL_stack_base + cx->blk_loop.resetsp;
1821 nextop = cx->blk_loop.last_op->op_next;
1825 nextop = pop_return();
1829 nextop = pop_return();
1832 DIE(aTHX_ "panic: last");
1836 if (gimme == G_SCALAR) {
1838 *++newsp = ((pop2 == CXt_SUB) && SvTEMP(*SP))
1839 ? *SP : sv_mortalcopy(*SP);
1841 *++newsp = &PL_sv_undef;
1843 else if (gimme == G_ARRAY) {
1844 while (++MARK <= SP) {
1845 *++newsp = ((pop2 == CXt_SUB) && SvTEMP(*MARK))
1846 ? *MARK : sv_mortalcopy(*MARK);
1847 TAINT_NOT; /* Each item is independent */
1853 /* Stack values are safe: */
1856 POPLOOP(cx); /* release loop vars ... */
1860 POPSUB(cx,sv); /* release CV and @_ ... */
1863 PL_curpm = newpm; /* ... and pop $1 et al */
1873 register PERL_CONTEXT *cx;
1876 if (PL_op->op_flags & OPf_SPECIAL) {
1877 cxix = dopoptoloop(cxstack_ix);
1879 DIE(aTHX_ "Can't \"next\" outside a block");
1882 cxix = dopoptolabel(cPVOP->op_pv);
1884 DIE(aTHX_ "Label not found for \"next %s\"", cPVOP->op_pv);
1886 if (cxix < cxstack_ix)
1890 oldsave = PL_scopestack[PL_scopestack_ix - 1];
1891 LEAVE_SCOPE(oldsave);
1892 return cx->blk_loop.next_op;
1898 register PERL_CONTEXT *cx;
1901 if (PL_op->op_flags & OPf_SPECIAL) {
1902 cxix = dopoptoloop(cxstack_ix);
1904 DIE(aTHX_ "Can't \"redo\" outside a block");
1907 cxix = dopoptolabel(cPVOP->op_pv);
1909 DIE(aTHX_ "Label not found for \"redo %s\"", cPVOP->op_pv);
1911 if (cxix < cxstack_ix)
1915 oldsave = PL_scopestack[PL_scopestack_ix - 1];
1916 LEAVE_SCOPE(oldsave);
1917 return cx->blk_loop.redo_op;
1921 S_dofindlabel(pTHX_ OP *o, char *label, OP **opstack, OP **oplimit)
1925 static char too_deep[] = "Target of goto is too deeply nested";
1928 Perl_croak(aTHX_ too_deep);
1929 if (o->op_type == OP_LEAVE ||
1930 o->op_type == OP_SCOPE ||
1931 o->op_type == OP_LEAVELOOP ||
1932 o->op_type == OP_LEAVETRY)
1934 *ops++ = cUNOPo->op_first;
1936 Perl_croak(aTHX_ too_deep);
1939 if (o->op_flags & OPf_KIDS) {
1941 /* First try all the kids at this level, since that's likeliest. */
1942 for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling) {
1943 if ((kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) &&
1944 kCOP->cop_label && strEQ(kCOP->cop_label, label))
1947 for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling) {
1948 if (kid == PL_lastgotoprobe)
1950 if ((kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) &&
1952 (ops[-1]->op_type != OP_NEXTSTATE &&
1953 ops[-1]->op_type != OP_DBSTATE)))
1955 if (o = dofindlabel(kid, label, ops, oplimit))
1974 register PERL_CONTEXT *cx;
1975 #define GOTO_DEPTH 64
1976 OP *enterops[GOTO_DEPTH];
1978 int do_dump = (PL_op->op_type == OP_DUMP);
1979 static char must_have_label[] = "goto must have label";
1982 if (PL_op->op_flags & OPf_STACKED) {
1986 /* This egregious kludge implements goto &subroutine */
1987 if (SvROK(sv) && SvTYPE(SvRV(sv)) == SVt_PVCV) {
1989 register PERL_CONTEXT *cx;
1990 CV* cv = (CV*)SvRV(sv);
1996 if (!CvROOT(cv) && !CvXSUB(cv)) {
2001 /* autoloaded stub? */
2002 if (cv != GvCV(gv) && (cv = GvCV(gv)))
2004 autogv = gv_autoload4(GvSTASH(gv), GvNAME(gv),
2005 GvNAMELEN(gv), FALSE);
2006 if (autogv && (cv = GvCV(autogv)))
2008 tmpstr = sv_newmortal();
2009 gv_efullname3(tmpstr, gv, Nullch);
2010 DIE(aTHX_ "Goto undefined subroutine &%s",SvPVX(tmpstr));
2012 DIE(aTHX_ "Goto undefined subroutine");
2015 /* First do some returnish stuff. */
2016 cxix = dopoptosub(cxstack_ix);
2018 DIE(aTHX_ "Can't goto subroutine outside a subroutine");
2019 if (cxix < cxstack_ix)
2022 if (CxTYPE(cx) == CXt_EVAL && cx->blk_eval.old_op_type == OP_ENTEREVAL)
2023 DIE(aTHX_ "Can't goto subroutine from an eval-string");
2025 if (CxTYPE(cx) == CXt_SUB && cx->blk_sub.hasargs) {
2026 /* put @_ back onto stack */
2027 AV* av = cx->blk_sub.argarray;
2029 items = AvFILLp(av) + 1;
2031 EXTEND(PL_stack_sp, items); /* @_ could have been extended. */
2032 Copy(AvARRAY(av), PL_stack_sp, items, SV*);
2033 PL_stack_sp += items;
2035 SvREFCNT_dec(GvAV(PL_defgv));
2036 GvAV(PL_defgv) = cx->blk_sub.savearray;
2037 #endif /* USE_THREADS */
2038 /* abandon @_ if it got reified */
2040 (void)sv_2mortal((SV*)av); /* delay until return */
2042 av_extend(av, items-1);
2043 AvFLAGS(av) = AVf_REIFY;
2044 PL_curpad[0] = (SV*)(cx->blk_sub.argarray = av);
2047 else if (CvXSUB(cv)) { /* put GvAV(defgv) back onto stack */
2051 av = (AV*)PL_curpad[0];
2053 av = GvAV(PL_defgv);
2055 items = AvFILLp(av) + 1;
2057 EXTEND(PL_stack_sp, items); /* @_ could have been extended. */
2058 Copy(AvARRAY(av), PL_stack_sp, items, SV*);
2059 PL_stack_sp += items;
2061 if (CxTYPE(cx) == CXt_SUB &&
2062 !(CvDEPTH(cx->blk_sub.cv) = cx->blk_sub.olddepth))
2063 SvREFCNT_dec(cx->blk_sub.cv);
2064 oldsave = PL_scopestack[PL_scopestack_ix - 1];
2065 LEAVE_SCOPE(oldsave);
2067 /* Now do some callish stuff. */
2070 #ifdef PERL_XSUB_OLDSTYLE
2071 if (CvOLDSTYLE(cv)) {
2072 I32 (*fp3)(int,int,int);
2077 fp3 = (I32(*)(int,int,int)))CvXSUB(cv;
2078 items = (*fp3)(CvXSUBANY(cv).any_i32,
2079 mark - PL_stack_base + 1,
2081 SP = PL_stack_base + items;
2084 #endif /* PERL_XSUB_OLDSTYLE */
2089 PL_stack_sp--; /* There is no cv arg. */
2090 /* Push a mark for the start of arglist */
2092 (void)(*CvXSUB(cv))(aTHXo_ cv);
2093 /* Pop the current context like a decent sub should */
2094 POPBLOCK(cx, PL_curpm);
2095 /* Do _not_ use PUTBACK, keep the XSUB's return stack! */
2098 return pop_return();
2101 AV* padlist = CvPADLIST(cv);
2102 SV** svp = AvARRAY(padlist);
2103 if (CxTYPE(cx) == CXt_EVAL) {
2104 PL_in_eval = cx->blk_eval.old_in_eval;
2105 PL_eval_root = cx->blk_eval.old_eval_root;
2106 cx->cx_type = CXt_SUB;
2107 cx->blk_sub.hasargs = 0;
2109 cx->blk_sub.cv = cv;
2110 cx->blk_sub.olddepth = CvDEPTH(cv);
2112 if (CvDEPTH(cv) < 2)
2113 (void)SvREFCNT_inc(cv);
2114 else { /* save temporaries on recursion? */
2115 if (CvDEPTH(cv) == 100 && ckWARN(WARN_RECURSION))
2116 sub_crush_depth(cv);
2117 if (CvDEPTH(cv) > AvFILLp(padlist)) {
2118 AV *newpad = newAV();
2119 SV **oldpad = AvARRAY(svp[CvDEPTH(cv)-1]);
2120 I32 ix = AvFILLp((AV*)svp[1]);
2121 svp = AvARRAY(svp[0]);
2122 for ( ;ix > 0; ix--) {
2123 if (svp[ix] != &PL_sv_undef) {
2124 char *name = SvPVX(svp[ix]);
2125 if ((SvFLAGS(svp[ix]) & SVf_FAKE)
2128 /* outer lexical or anon code */
2129 av_store(newpad, ix,
2130 SvREFCNT_inc(oldpad[ix]) );
2132 else { /* our own lexical */
2134 av_store(newpad, ix, sv = (SV*)newAV());
2135 else if (*name == '%')
2136 av_store(newpad, ix, sv = (SV*)newHV());
2138 av_store(newpad, ix, sv = NEWSV(0,0));
2143 av_store(newpad, ix, sv = NEWSV(0,0));
2147 if (cx->blk_sub.hasargs) {
2150 av_store(newpad, 0, (SV*)av);
2151 AvFLAGS(av) = AVf_REIFY;
2153 av_store(padlist, CvDEPTH(cv), (SV*)newpad);
2154 AvFILLp(padlist) = CvDEPTH(cv);
2155 svp = AvARRAY(padlist);
2159 if (!cx->blk_sub.hasargs) {
2160 AV* av = (AV*)PL_curpad[0];
2162 items = AvFILLp(av) + 1;
2164 /* Mark is at the end of the stack. */
2166 Copy(AvARRAY(av), SP + 1, items, SV*);
2171 #endif /* USE_THREADS */
2172 SAVESPTR(PL_curpad);
2173 PL_curpad = AvARRAY((AV*)svp[CvDEPTH(cv)]);
2175 if (cx->blk_sub.hasargs)
2176 #endif /* USE_THREADS */
2178 AV* av = (AV*)PL_curpad[0];
2182 cx->blk_sub.savearray = GvAV(PL_defgv);
2183 GvAV(PL_defgv) = (AV*)SvREFCNT_inc(av);
2184 #endif /* USE_THREADS */
2185 cx->blk_sub.argarray = av;
2188 if (items >= AvMAX(av) + 1) {
2190 if (AvARRAY(av) != ary) {
2191 AvMAX(av) += AvARRAY(av) - AvALLOC(av);
2192 SvPVX(av) = (char*)ary;
2194 if (items >= AvMAX(av) + 1) {
2195 AvMAX(av) = items - 1;
2196 Renew(ary,items+1,SV*);
2198 SvPVX(av) = (char*)ary;
2201 Copy(mark,AvARRAY(av),items,SV*);
2202 AvFILLp(av) = items - 1;
2203 assert(!AvREAL(av));
2210 if (PERLDB_SUB) { /* Checking curstash breaks DProf. */
2212 * We do not care about using sv to call CV;
2213 * it's for informational purposes only.
2215 SV *sv = GvSV(PL_DBsub);
2218 if (PERLDB_SUB_NN) {
2219 SvIVX(sv) = PTR2IV(cv); /* Already upgraded, saved */
2222 gv_efullname3(sv, CvGV(cv), Nullch);
2225 && (gotocv = get_cv("DB::goto", FALSE)) ) {
2226 PUSHMARK( PL_stack_sp );
2227 call_sv((SV*)gotocv, G_SCALAR | G_NODEBUG);
2231 RETURNOP(CvSTART(cv));
2235 label = SvPV(sv,n_a);
2236 if (!(do_dump || *label))
2237 DIE(aTHX_ must_have_label);
2240 else if (PL_op->op_flags & OPf_SPECIAL) {
2242 DIE(aTHX_ must_have_label);
2245 label = cPVOP->op_pv;
2247 if (label && *label) {
2252 PL_lastgotoprobe = 0;
2254 for (ix = cxstack_ix; ix >= 0; ix--) {
2256 switch (CxTYPE(cx)) {
2258 gotoprobe = PL_eval_root; /* XXX not good for nested eval */
2261 gotoprobe = cx->blk_oldcop->op_sibling;
2267 gotoprobe = cx->blk_oldcop->op_sibling;
2269 gotoprobe = PL_main_root;
2272 if (CvDEPTH(cx->blk_sub.cv)) {
2273 gotoprobe = CvROOT(cx->blk_sub.cv);
2278 DIE(aTHX_ "Can't \"goto\" outside a block");
2281 DIE(aTHX_ "panic: goto");
2282 gotoprobe = PL_main_root;
2285 retop = dofindlabel(gotoprobe, label,
2286 enterops, enterops + GOTO_DEPTH);
2289 PL_lastgotoprobe = gotoprobe;
2292 DIE(aTHX_ "Can't find label %s", label);
2294 /* pop unwanted frames */
2296 if (ix < cxstack_ix) {
2303 oldsave = PL_scopestack[PL_scopestack_ix];
2304 LEAVE_SCOPE(oldsave);
2307 /* push wanted frames */
2309 if (*enterops && enterops[1]) {
2311 for (ix = 1; enterops[ix]; ix++) {
2312 PL_op = enterops[ix];
2313 /* Eventually we may want to stack the needed arguments
2314 * for each op. For now, we punt on the hard ones. */
2315 if (PL_op->op_type == OP_ENTERITER)
2316 DIE(aTHX_ "Can't \"goto\" into the middle of a foreach loop",
2318 CALL_FPTR(PL_op->op_ppaddr)(aTHX);
2326 if (!retop) retop = PL_main_start;
2328 PL_restartop = retop;
2329 PL_do_undump = TRUE;
2333 PL_restartop = 0; /* hmm, must be GNU unexec().. */
2334 PL_do_undump = FALSE;
2350 if (anum == 1 && VMSISH_EXIT)
2355 PUSHs(&PL_sv_undef);
2363 NV value = SvNVx(GvSV(cCOP->cop_gv));
2364 register I32 match = I_32(value);
2367 if (((NV)match) > value)
2368 --match; /* was fractional--truncate other way */
2370 match -= cCOP->uop.scop.scop_offset;
2373 else if (match > cCOP->uop.scop.scop_max)
2374 match = cCOP->uop.scop.scop_max;
2375 PL_op = cCOP->uop.scop.scop_next[match];
2385 PL_op = PL_op->op_next; /* can't assume anything */
2388 match = *(SvPVx(GvSV(cCOP->cop_gv), n_a)) & 255;
2389 match -= cCOP->uop.scop.scop_offset;
2392 else if (match > cCOP->uop.scop.scop_max)
2393 match = cCOP->uop.scop.scop_max;
2394 PL_op = cCOP->uop.scop.scop_next[match];
2403 S_save_lines(pTHX_ AV *array, SV *sv)
2405 register char *s = SvPVX(sv);
2406 register char *send = SvPVX(sv) + SvCUR(sv);
2408 register I32 line = 1;
2410 while (s && s < send) {
2411 SV *tmpstr = NEWSV(85,0);
2413 sv_upgrade(tmpstr, SVt_PVMG);
2414 t = strchr(s, '\n');
2420 sv_setpvn(tmpstr, s, t - s);
2421 av_store(array, line++, tmpstr);
2427 S_docatch_body(pTHX_ va_list args)
2434 S_docatch(pTHX_ OP *o)
2441 assert(CATCH_GET == TRUE);
2445 CALLPROTECT(aTHX_ &ret, MEMBER_TO_FPTR(S_docatch_body));
2451 PL_op = PL_restartop;
2466 Perl_sv_compile_2op(pTHX_ SV *sv, OP** startop, char *code, AV** avp)
2467 /* sv Text to convert to OP tree. */
2468 /* startop op_free() this to undo. */
2469 /* code Short string id of the caller. */
2471 dSP; /* Make POPBLOCK work. */
2474 I32 gimme = 0; /* SUSPECT - INITIALZE TO WHAT? NI-S */
2477 OP *oop = PL_op, *rop;
2478 char tmpbuf[TYPE_DIGITS(long) + 12 + 10];
2484 /* switch to eval mode */
2486 if (PL_curcop == &PL_compiling) {
2487 SAVESPTR(PL_compiling.cop_stash);
2488 PL_compiling.cop_stash = PL_curstash;
2490 SAVESPTR(PL_compiling.cop_filegv);
2491 SAVEI16(PL_compiling.cop_line);
2492 sprintf(tmpbuf, "_<(%.10s_eval %lu)", code, (unsigned long)++PL_evalseq);
2493 PL_compiling.cop_filegv = gv_fetchfile(tmpbuf+2);
2494 PL_compiling.cop_line = 1;
2495 /* XXX For C<eval "...">s within BEGIN {} blocks, this ends up
2496 deleting the eval's FILEGV from the stash before gv_check() runs
2497 (i.e. before run-time proper). To work around the coredump that
2498 ensues, we always turn GvMULTI_on for any globals that were
2499 introduced within evals. See force_ident(). GSAR 96-10-12 */
2500 safestr = savepv(tmpbuf);
2501 SAVEDELETE(PL_defstash, safestr, strlen(safestr));
2503 #ifdef OP_IN_REGISTER
2511 PL_op->op_type = OP_ENTEREVAL;
2512 PL_op->op_flags = 0; /* Avoid uninit warning. */
2513 PUSHBLOCK(cx, CXt_EVAL, SP);
2514 PUSHEVAL(cx, 0, PL_compiling.cop_filegv);
2515 rop = doeval(G_SCALAR, startop);
2516 POPBLOCK(cx,PL_curpm);
2519 (*startop)->op_type = OP_NULL;
2520 (*startop)->op_ppaddr = PL_ppaddr[OP_NULL];
2522 *avp = (AV*)SvREFCNT_inc(PL_comppad);
2524 if (PL_curcop == &PL_compiling)
2525 PL_compiling.op_private = PL_hints;
2526 #ifdef OP_IN_REGISTER
2532 /* With USE_THREADS, eval_owner must be held on entry to doeval */
2534 S_doeval(pTHX_ int gimme, OP** startop)
2543 PL_in_eval = EVAL_INEVAL;
2547 /* set up a scratch pad */
2550 SAVESPTR(PL_curpad);
2551 SAVESPTR(PL_comppad);
2552 SAVESPTR(PL_comppad_name);
2553 SAVEI32(PL_comppad_name_fill);
2554 SAVEI32(PL_min_intro_pending);
2555 SAVEI32(PL_max_intro_pending);
2558 for (i = cxstack_ix - 1; i >= 0; i--) {
2559 PERL_CONTEXT *cx = &cxstack[i];
2560 if (CxTYPE(cx) == CXt_EVAL)
2562 else if (CxTYPE(cx) == CXt_SUB) {
2563 caller = cx->blk_sub.cv;
2568 SAVESPTR(PL_compcv);
2569 PL_compcv = (CV*)NEWSV(1104,0);
2570 sv_upgrade((SV *)PL_compcv, SVt_PVCV);
2571 CvEVAL_on(PL_compcv);
2573 CvOWNER(PL_compcv) = 0;
2574 New(666, CvMUTEXP(PL_compcv), 1, perl_mutex);
2575 MUTEX_INIT(CvMUTEXP(PL_compcv));
2576 #endif /* USE_THREADS */
2578 PL_comppad = newAV();
2579 av_push(PL_comppad, Nullsv);
2580 PL_curpad = AvARRAY(PL_comppad);
2581 PL_comppad_name = newAV();
2582 PL_comppad_name_fill = 0;
2583 PL_min_intro_pending = 0;
2586 av_store(PL_comppad_name, 0, newSVpvn("@_", 2));
2587 PL_curpad[0] = (SV*)newAV();
2588 SvPADMY_on(PL_curpad[0]); /* XXX Needed? */
2589 #endif /* USE_THREADS */
2591 comppadlist = newAV();
2592 AvREAL_off(comppadlist);
2593 av_store(comppadlist, 0, (SV*)PL_comppad_name);
2594 av_store(comppadlist, 1, (SV*)PL_comppad);
2595 CvPADLIST(PL_compcv) = comppadlist;
2597 if (!saveop || saveop->op_type != OP_REQUIRE)
2598 CvOUTSIDE(PL_compcv) = (CV*)SvREFCNT_inc(caller);
2600 SAVEFREESV(PL_compcv);
2602 /* make sure we compile in the right package */
2604 newstash = PL_curcop->cop_stash;
2605 if (PL_curstash != newstash) {
2606 SAVESPTR(PL_curstash);
2607 PL_curstash = newstash;
2609 SAVESPTR(PL_beginav);
2610 PL_beginav = newAV();
2611 SAVEFREESV(PL_beginav);
2613 /* try to compile it */
2615 PL_eval_root = Nullop;
2617 PL_curcop = &PL_compiling;
2618 PL_curcop->cop_arybase = 0;
2619 SvREFCNT_dec(PL_rs);
2620 PL_rs = newSVpvn("\n", 1);
2621 if (saveop && saveop->op_flags & OPf_SPECIAL)
2622 PL_in_eval |= EVAL_KEEPERR;
2625 if (yyparse() || PL_error_count || !PL_eval_root) {
2629 I32 optype = 0; /* Might be reset by POPEVAL. */
2634 op_free(PL_eval_root);
2635 PL_eval_root = Nullop;
2637 SP = PL_stack_base + POPMARK; /* pop original mark */
2639 POPBLOCK(cx,PL_curpm);
2645 if (optype == OP_REQUIRE) {
2646 char* msg = SvPVx(ERRSV, n_a);
2647 DIE(aTHX_ "%sCompilation failed in require",
2648 *msg ? msg : "Unknown error\n");
2651 char* msg = SvPVx(ERRSV, n_a);
2653 POPBLOCK(cx,PL_curpm);
2655 Perl_croak(aTHX_ "%sCompilation failed in regexp",
2656 (*msg ? msg : "Unknown error\n"));
2658 SvREFCNT_dec(PL_rs);
2659 PL_rs = SvREFCNT_inc(PL_nrs);
2661 MUTEX_LOCK(&PL_eval_mutex);
2663 COND_SIGNAL(&PL_eval_cond);
2664 MUTEX_UNLOCK(&PL_eval_mutex);
2665 #endif /* USE_THREADS */
2668 SvREFCNT_dec(PL_rs);
2669 PL_rs = SvREFCNT_inc(PL_nrs);
2670 PL_compiling.cop_line = 0;
2672 *startop = PL_eval_root;
2673 SvREFCNT_dec(CvOUTSIDE(PL_compcv));
2674 CvOUTSIDE(PL_compcv) = Nullcv;
2676 SAVEFREEOP(PL_eval_root);
2678 scalarvoid(PL_eval_root);
2679 else if (gimme & G_ARRAY)
2682 scalar(PL_eval_root);
2684 DEBUG_x(dump_eval());
2686 /* Register with debugger: */
2687 if (PERLDB_INTER && saveop->op_type == OP_REQUIRE) {
2688 CV *cv = get_cv("DB::postponed", FALSE);
2692 XPUSHs((SV*)PL_compiling.cop_filegv);
2694 call_sv((SV*)cv, G_DISCARD);
2698 /* compiled okay, so do it */
2700 CvDEPTH(PL_compcv) = 1;
2701 SP = PL_stack_base + POPMARK; /* pop original mark */
2702 PL_op = saveop; /* The caller may need it. */
2704 MUTEX_LOCK(&PL_eval_mutex);
2706 COND_SIGNAL(&PL_eval_cond);
2707 MUTEX_UNLOCK(&PL_eval_mutex);
2708 #endif /* USE_THREADS */
2710 RETURNOP(PL_eval_start);
2714 S_doopen_pmc(pTHX_ const char *name, const char *mode)
2716 STRLEN namelen = strlen(name);
2719 if (namelen > 3 && strEQ(name + namelen - 3, ".pm")) {
2720 SV *pmcsv = Perl_newSVpvf(aTHX_ "%s%c", name, 'c');
2721 char *pmc = SvPV_nolen(pmcsv);
2724 if (PerlLIO_stat(pmc, &pmcstat) < 0) {
2725 fp = PerlIO_open(name, mode);
2728 if (PerlLIO_stat(name, &pmstat) < 0 ||
2729 pmstat.st_mtime < pmcstat.st_mtime)
2731 fp = PerlIO_open(pmc, mode);
2734 fp = PerlIO_open(name, mode);
2737 SvREFCNT_dec(pmcsv);
2740 fp = PerlIO_open(name, mode);
2748 register PERL_CONTEXT *cx;
2753 SV *namesv = Nullsv;
2755 I32 gimme = G_SCALAR;
2756 PerlIO *tryrsfp = 0;
2758 int filter_has_file = 0;
2759 GV *filter_child_proc = 0;
2760 SV *filter_state = 0;
2764 if (SvNIOKp(sv) && !SvPOKp(sv)) {
2765 if (Atof(PL_patchlevel) + 0.00000999 < SvNV(sv))
2766 DIE(aTHX_ "Perl %s required--this is only version %s, stopped",
2767 SvPV(sv,n_a),PL_patchlevel);
2770 name = SvPV(sv, len);
2771 if (!(name && len > 0 && *name))
2772 DIE(aTHX_ "Null filename used");
2773 TAINT_PROPER("require");
2774 if (PL_op->op_type == OP_REQUIRE &&
2775 (svp = hv_fetch(GvHVn(PL_incgv), name, len, 0)) &&
2776 *svp != &PL_sv_undef)
2779 /* prepare to compile file */
2784 (name[1] == '.' && name[2] == '/')))
2786 || (name[0] && name[1] == ':')
2789 || (name[0] == '\\' && name[1] == '\\') /* UNC path */
2792 || (strchr(name,':') || ((*name == '[' || *name == '<') &&
2793 (isALNUM(name[1]) || strchr("$-_]>",name[1]))))
2798 tryrsfp = doopen_pmc(name,PERL_SCRIPT_MODE);
2801 AV *ar = GvAVn(PL_incgv);
2805 if ((unixname = tounixspec(name, Nullch)) != Nullch)
2808 namesv = NEWSV(806, 0);
2809 for (i = 0; i <= AvFILL(ar); i++) {
2810 SV *dirsv = *av_fetch(ar, i, TRUE);
2816 if (SvTYPE(SvRV(loader)) == SVt_PVAV) {
2817 loader = *av_fetch((AV *)SvRV(loader), 0, TRUE);
2820 Perl_sv_setpvf(aTHX_ namesv, "/loader/0x%lx/%s",
2821 SvANY(loader), name);
2822 tryname = SvPVX(namesv);
2833 count = call_sv(loader, G_ARRAY);
2843 if (SvROK(arg) && SvTYPE(SvRV(arg)) == SVt_PVGV) {
2847 if (SvTYPE(arg) == SVt_PVGV) {
2848 IO *io = GvIO((GV *)arg);
2853 tryrsfp = IoIFP(io);
2854 if (IoTYPE(io) == '|') {
2855 /* reading from a child process doesn't
2856 nest -- when returning from reading
2857 the inner module, the outer one is
2858 unreadable (closed?) I've tried to
2859 save the gv to manage the lifespan of
2860 the pipe, but this didn't help. XXX */
2861 filter_child_proc = (GV *)arg;
2862 (void)SvREFCNT_inc(filter_child_proc);
2865 if (IoOFP(io) && IoOFP(io) != IoIFP(io)) {
2866 PerlIO_close(IoOFP(io));
2878 if (SvROK(arg) && SvTYPE(SvRV(arg)) == SVt_PVCV) {
2880 (void)SvREFCNT_inc(filter_sub);
2883 filter_state = SP[i];
2884 (void)SvREFCNT_inc(filter_state);
2888 tryrsfp = PerlIO_open("/dev/null",
2902 filter_has_file = 0;
2903 if (filter_child_proc) {
2904 SvREFCNT_dec(filter_child_proc);
2905 filter_child_proc = 0;
2908 SvREFCNT_dec(filter_state);
2912 SvREFCNT_dec(filter_sub);
2917 char *dir = SvPVx(dirsv, n_a);
2920 if ((unixdir = tounixpath(dir, Nullch)) == Nullch)
2922 sv_setpv(namesv, unixdir);
2923 sv_catpv(namesv, unixname);
2925 Perl_sv_setpvf(aTHX_ namesv, "%s/%s", dir, name);
2927 TAINT_PROPER("require");
2928 tryname = SvPVX(namesv);
2929 tryrsfp = doopen_pmc(tryname, PERL_SCRIPT_MODE);
2931 if (tryname[0] == '.' && tryname[1] == '/')
2939 SAVESPTR(PL_compiling.cop_filegv);
2940 PL_compiling.cop_filegv = gv_fetchfile(tryrsfp ? tryname : name);
2941 SvREFCNT_dec(namesv);
2943 if (PL_op->op_type == OP_REQUIRE) {
2944 char *msgstr = name;
2945 if (namesv) { /* did we lookup @INC? */
2946 SV *msg = sv_2mortal(newSVpv(msgstr,0));
2947 SV *dirmsgsv = NEWSV(0, 0);
2948 AV *ar = GvAVn(PL_incgv);
2950 sv_catpvn(msg, " in @INC", 8);
2951 if (instr(SvPVX(msg), ".h "))
2952 sv_catpv(msg, " (change .h to .ph maybe?)");
2953 if (instr(SvPVX(msg), ".ph "))
2954 sv_catpv(msg, " (did you run h2ph?)");
2955 sv_catpv(msg, " (@INC contains:");
2956 for (i = 0; i <= AvFILL(ar); i++) {
2957 char *dir = SvPVx(*av_fetch(ar, i, TRUE), n_a);
2958 Perl_sv_setpvf(aTHX_ dirmsgsv, " %s", dir);
2959 sv_catsv(msg, dirmsgsv);
2961 sv_catpvn(msg, ")", 1);
2962 SvREFCNT_dec(dirmsgsv);
2963 msgstr = SvPV_nolen(msg);
2965 DIE(aTHX_ "Can't locate %s", msgstr);
2971 SETERRNO(0, SS$_NORMAL);
2973 /* Assume success here to prevent recursive requirement. */
2974 (void)hv_store(GvHVn(PL_incgv), name, strlen(name),
2975 newSVsv(GvSV(PL_compiling.cop_filegv)), 0 );
2979 lex_start(sv_2mortal(newSVpvn("",0)));
2980 SAVEGENERICSV(PL_rsfp_filters);
2981 PL_rsfp_filters = Nullav;
2984 name = savepv(name);
2988 SAVEPPTR(PL_compiling.cop_warnings);
2989 if (PL_dowarn & G_WARN_ALL_ON)
2990 PL_compiling.cop_warnings = WARN_ALL ;
2991 else if (PL_dowarn & G_WARN_ALL_OFF)
2992 PL_compiling.cop_warnings = WARN_NONE ;
2994 PL_compiling.cop_warnings = WARN_STD ;
2996 if (filter_sub || filter_child_proc) {
2997 SV *datasv = filter_add(run_user_filter, Nullsv);
2998 IoLINES(datasv) = filter_has_file;
2999 IoFMT_GV(datasv) = (GV *)filter_child_proc;
3000 IoTOP_GV(datasv) = (GV *)filter_state;
3001 IoBOTTOM_GV(datasv) = (GV *)filter_sub;
3004 /* switch to eval mode */
3005 push_return(PL_op->op_next);
3006 PUSHBLOCK(cx, CXt_EVAL, SP);
3007 PUSHEVAL(cx, name, PL_compiling.cop_filegv);
3009 SAVEI16(PL_compiling.cop_line);
3010 PL_compiling.cop_line = 0;
3014 MUTEX_LOCK(&PL_eval_mutex);
3015 if (PL_eval_owner && PL_eval_owner != thr)
3016 while (PL_eval_owner)
3017 COND_WAIT(&PL_eval_cond, &PL_eval_mutex);
3018 PL_eval_owner = thr;
3019 MUTEX_UNLOCK(&PL_eval_mutex);
3020 #endif /* USE_THREADS */
3021 return DOCATCH(doeval(G_SCALAR, NULL));
3026 return pp_require();
3032 register PERL_CONTEXT *cx;
3034 I32 gimme = GIMME_V, was = PL_sub_generation;
3035 char tmpbuf[TYPE_DIGITS(long) + 12];
3040 if (!SvPV(sv,len) || !len)
3042 TAINT_PROPER("eval");
3048 /* switch to eval mode */
3050 SAVESPTR(PL_compiling.cop_filegv);
3051 sprintf(tmpbuf, "_<(eval %lu)", (unsigned long)++PL_evalseq);
3052 PL_compiling.cop_filegv = gv_fetchfile(tmpbuf+2);
3053 PL_compiling.cop_line = 1;
3054 /* XXX For C<eval "...">s within BEGIN {} blocks, this ends up
3055 deleting the eval's FILEGV from the stash before gv_check() runs
3056 (i.e. before run-time proper). To work around the coredump that
3057 ensues, we always turn GvMULTI_on for any globals that were
3058 introduced within evals. See force_ident(). GSAR 96-10-12 */
3059 safestr = savepv(tmpbuf);
3060 SAVEDELETE(PL_defstash, safestr, strlen(safestr));
3062 PL_hints = PL_op->op_targ;
3063 SAVEPPTR(PL_compiling.cop_warnings);
3064 if (!specialWARN(PL_compiling.cop_warnings)) {
3065 PL_compiling.cop_warnings = newSVsv(PL_compiling.cop_warnings) ;
3066 SAVEFREESV(PL_compiling.cop_warnings) ;
3069 push_return(PL_op->op_next);
3070 PUSHBLOCK(cx, (CXt_EVAL|CXp_REAL), SP);
3071 PUSHEVAL(cx, 0, PL_compiling.cop_filegv);
3073 /* prepare to compile string */
3075 if (PERLDB_LINE && PL_curstash != PL_debstash)
3076 save_lines(GvAV(PL_compiling.cop_filegv), PL_linestr);
3079 MUTEX_LOCK(&PL_eval_mutex);
3080 if (PL_eval_owner && PL_eval_owner != thr)
3081 while (PL_eval_owner)
3082 COND_WAIT(&PL_eval_cond, &PL_eval_mutex);
3083 PL_eval_owner = thr;
3084 MUTEX_UNLOCK(&PL_eval_mutex);
3085 #endif /* USE_THREADS */
3086 ret = doeval(gimme, NULL);
3087 if (PERLDB_INTER && was != PL_sub_generation /* Some subs defined here. */
3088 && ret != PL_op->op_next) { /* Successive compilation. */
3089 strcpy(safestr, "_<(eval )"); /* Anything fake and short. */
3091 return DOCATCH(ret);
3101 register PERL_CONTEXT *cx;
3103 U8 save_flags = PL_op -> op_flags;
3108 retop = pop_return();
3111 if (gimme == G_VOID)
3113 else if (gimme == G_SCALAR) {
3116 if (SvFLAGS(TOPs) & SVs_TEMP)
3119 *MARK = sv_mortalcopy(TOPs);
3123 *MARK = &PL_sv_undef;
3127 /* in case LEAVE wipes old return values */
3128 for (mark = newsp + 1; mark <= SP; mark++) {
3129 if (!(SvFLAGS(*mark) & SVs_TEMP)) {
3130 *mark = sv_mortalcopy(*mark);
3131 TAINT_NOT; /* Each item is independent */
3135 PL_curpm = newpm; /* Don't pop $1 et al till now */
3137 if (AvFILLp(PL_comppad_name) >= 0)
3141 assert(CvDEPTH(PL_compcv) == 1);
3143 CvDEPTH(PL_compcv) = 0;
3146 if (optype == OP_REQUIRE &&
3147 !(gimme == G_SCALAR ? SvTRUE(*SP) : SP > newsp))
3149 /* Unassume the success we assumed earlier. */
3150 char *name = cx->blk_eval.old_name;
3151 (void)hv_delete(GvHVn(PL_incgv), name, strlen(name), G_DISCARD);
3152 retop = Perl_die(aTHX_ "%s did not return a true value", name);
3153 /* die_where() did LEAVE, or we won't be here */
3157 if (!(save_flags & OPf_SPECIAL))
3167 register PERL_CONTEXT *cx;
3168 I32 gimme = GIMME_V;
3173 push_return(cLOGOP->op_other->op_next);
3174 PUSHBLOCK(cx, CXt_EVAL, SP);
3176 PL_eval_root = PL_op; /* Only needed so that goto works right. */
3178 PL_in_eval = EVAL_INEVAL;
3181 return DOCATCH(PL_op->op_next);
3191 register PERL_CONTEXT *cx;
3199 if (gimme == G_VOID)
3201 else if (gimme == G_SCALAR) {
3204 if (SvFLAGS(TOPs) & (SVs_PADTMP|SVs_TEMP))
3207 *MARK = sv_mortalcopy(TOPs);
3211 *MARK = &PL_sv_undef;
3216 /* in case LEAVE wipes old return values */
3217 for (mark = newsp + 1; mark <= SP; mark++) {
3218 if (!(SvFLAGS(*mark) & (SVs_PADTMP|SVs_TEMP))) {
3219 *mark = sv_mortalcopy(*mark);
3220 TAINT_NOT; /* Each item is independent */
3224 PL_curpm = newpm; /* Don't pop $1 et al till now */
3232 S_doparseform(pTHX_ SV *sv)
3235 register char *s = SvPV_force(sv, len);
3236 register char *send = s + len;
3237 register char *base;
3238 register I32 skipspaces = 0;
3241 bool postspace = FALSE;
3249 Perl_croak(aTHX_ "Null picture in formline");
3251 New(804, fops, (send - s)*3+10, U16); /* Almost certainly too long... */
3256 *fpc++ = FF_LINEMARK;
3257 noblank = repeat = FALSE;
3275 case ' ': case '\t':
3286 *fpc++ = FF_LITERAL;
3294 *fpc++ = skipspaces;
3298 *fpc++ = FF_NEWLINE;
3302 arg = fpc - linepc + 1;
3309 *fpc++ = FF_LINEMARK;
3310 noblank = repeat = FALSE;
3319 ischop = s[-1] == '^';
3325 arg = (s - base) - 1;
3327 *fpc++ = FF_LITERAL;
3336 *fpc++ = FF_LINEGLOB;
3338 else if (*s == '#' || (*s == '.' && s[1] == '#')) {
3339 arg = ischop ? 512 : 0;
3349 arg |= 256 + (s - f);
3351 *fpc++ = s - base; /* fieldsize for FETCH */
3352 *fpc++ = FF_DECIMAL;
3357 bool ismore = FALSE;
3360 while (*++s == '>') ;
3361 prespace = FF_SPACE;
3363 else if (*s == '|') {
3364 while (*++s == '|') ;
3365 prespace = FF_HALFSPACE;
3370 while (*++s == '<') ;
3373 if (*s == '.' && s[1] == '.' && s[2] == '.') {
3377 *fpc++ = s - base; /* fieldsize for FETCH */
3379 *fpc++ = ischop ? FF_CHECKCHOP : FF_CHECKNL;
3397 { /* need to jump to the next word */
3399 z = WORD_ALIGN - SvCUR(sv) % WORD_ALIGN;
3400 SvGROW(sv, SvCUR(sv) + z + arg * sizeof(U16) + 4);
3401 s = SvPVX(sv) + SvCUR(sv) + z;
3403 Copy(fops, s, arg, U16);
3405 sv_magic(sv, Nullsv, 'f', Nullch, 0);
3410 * The rest of this file was derived from source code contributed
3413 * NOTE: this code was derived from Tom Horsley's qsort replacement
3414 * and should not be confused with the original code.
3417 /* Copyright (C) Tom Horsley, 1997. All rights reserved.
3419 Permission granted to distribute under the same terms as perl which are
3422 This program is free software; you can redistribute it and/or modify
3423 it under the terms of either:
3425 a) the GNU General Public License as published by the Free
3426 Software Foundation; either version 1, or (at your option) any
3429 b) the "Artistic License" which comes with this Kit.
3431 Details on the perl license can be found in the perl source code which
3432 may be located via the www.perl.com web page.
3434 This is the most wonderfulest possible qsort I can come up with (and
3435 still be mostly portable) My (limited) tests indicate it consistently
3436 does about 20% fewer calls to compare than does the qsort in the Visual
3437 C++ library, other vendors may vary.
3439 Some of the ideas in here can be found in "Algorithms" by Sedgewick,
3440 others I invented myself (or more likely re-invented since they seemed
3441 pretty obvious once I watched the algorithm operate for a while).
3443 Most of this code was written while watching the Marlins sweep the Giants
3444 in the 1997 National League Playoffs - no Braves fans allowed to use this
3445 code (just kidding :-).
3447 I realize that if I wanted to be true to the perl tradition, the only
3448 comment in this file would be something like:
3450 ...they shuffled back towards the rear of the line. 'No, not at the
3451 rear!' the slave-driver shouted. 'Three files up. And stay there...
3453 However, I really needed to violate that tradition just so I could keep
3454 track of what happens myself, not to mention some poor fool trying to
3455 understand this years from now :-).
3458 /* ********************************************************** Configuration */
3460 #ifndef QSORT_ORDER_GUESS
3461 #define QSORT_ORDER_GUESS 2 /* Select doubling version of the netBSD trick */
3464 /* QSORT_MAX_STACK is the largest number of partitions that can be stacked up for
3465 future processing - a good max upper bound is log base 2 of memory size
3466 (32 on 32 bit machines, 64 on 64 bit machines, etc). In reality can
3467 safely be smaller than that since the program is taking up some space and
3468 most operating systems only let you grab some subset of contiguous
3469 memory (not to mention that you are normally sorting data larger than
3470 1 byte element size :-).
3472 #ifndef QSORT_MAX_STACK
3473 #define QSORT_MAX_STACK 32
3476 /* QSORT_BREAK_EVEN is the size of the largest partition we should insertion sort.
3477 Anything bigger and we use qsort. If you make this too small, the qsort
3478 will probably break (or become less efficient), because it doesn't expect
3479 the middle element of a partition to be the same as the right or left -
3480 you have been warned).
3482 #ifndef QSORT_BREAK_EVEN
3483 #define QSORT_BREAK_EVEN 6
3486 /* ************************************************************* Data Types */
3488 /* hold left and right index values of a partition waiting to be sorted (the
3489 partition includes both left and right - right is NOT one past the end or
3490 anything like that).
3492 struct partition_stack_entry {
3495 #ifdef QSORT_ORDER_GUESS
3496 int qsort_break_even;
3500 /* ******************************************************* Shorthand Macros */
3502 /* Note that these macros will be used from inside the qsort function where
3503 we happen to know that the variable 'elt_size' contains the size of an
3504 array element and the variable 'temp' points to enough space to hold a
3505 temp element and the variable 'array' points to the array being sorted
3506 and 'compare' is the pointer to the compare routine.
3508 Also note that there are very many highly architecture specific ways
3509 these might be sped up, but this is simply the most generally portable
3510 code I could think of.
3513 /* Return < 0 == 0 or > 0 as the value of elt1 is < elt2, == elt2, > elt2
3515 #define qsort_cmp(elt1, elt2) \
3516 ((*compare)(aTHXo_ array[elt1], array[elt2]))
3518 #ifdef QSORT_ORDER_GUESS
3519 #define QSORT_NOTICE_SWAP swapped++;
3521 #define QSORT_NOTICE_SWAP
3524 /* swaps contents of array elements elt1, elt2.
3526 #define qsort_swap(elt1, elt2) \
3529 temp = array[elt1]; \
3530 array[elt1] = array[elt2]; \
3531 array[elt2] = temp; \
3534 /* rotate contents of elt1, elt2, elt3 such that elt1 gets elt2, elt2 gets
3535 elt3 and elt3 gets elt1.
3537 #define qsort_rotate(elt1, elt2, elt3) \
3540 temp = array[elt1]; \
3541 array[elt1] = array[elt2]; \
3542 array[elt2] = array[elt3]; \
3543 array[elt3] = temp; \
3546 /* ************************************************************ Debug stuff */
3553 return; /* good place to set a breakpoint */
3556 #define qsort_assert(t) (void)( (t) || (break_here(), 0) )
3559 doqsort_all_asserts(
3563 int (*compare)(const void * elt1, const void * elt2),
3564 int pc_left, int pc_right, int u_left, int u_right)
3568 qsort_assert(pc_left <= pc_right);
3569 qsort_assert(u_right < pc_left);
3570 qsort_assert(pc_right < u_left);
3571 for (i = u_right + 1; i < pc_left; ++i) {
3572 qsort_assert(qsort_cmp(i, pc_left) < 0);
3574 for (i = pc_left; i < pc_right; ++i) {
3575 qsort_assert(qsort_cmp(i, pc_right) == 0);
3577 for (i = pc_right + 1; i < u_left; ++i) {
3578 qsort_assert(qsort_cmp(pc_right, i) < 0);
3582 #define qsort_all_asserts(PC_LEFT, PC_RIGHT, U_LEFT, U_RIGHT) \
3583 doqsort_all_asserts(array, num_elts, elt_size, compare, \
3584 PC_LEFT, PC_RIGHT, U_LEFT, U_RIGHT)
3588 #define qsort_assert(t) ((void)0)
3590 #define qsort_all_asserts(PC_LEFT, PC_RIGHT, U_LEFT, U_RIGHT) ((void)0)
3594 /* ****************************************************************** qsort */
3597 S_qsortsv(pTHX_ SV ** array, size_t num_elts, SVCOMPARE_t compare)
3601 struct partition_stack_entry partition_stack[QSORT_MAX_STACK];
3602 int next_stack_entry = 0;
3606 #ifdef QSORT_ORDER_GUESS
3607 int qsort_break_even;
3611 /* Make sure we actually have work to do.
3613 if (num_elts <= 1) {
3617 /* Setup the initial partition definition and fall into the sorting loop
3620 part_right = (int)(num_elts - 1);
3621 #ifdef QSORT_ORDER_GUESS
3622 qsort_break_even = QSORT_BREAK_EVEN;
3624 #define qsort_break_even QSORT_BREAK_EVEN
3627 if ((part_right - part_left) >= qsort_break_even) {
3628 /* OK, this is gonna get hairy, so lets try to document all the
3629 concepts and abbreviations and variables and what they keep
3632 pc: pivot chunk - the set of array elements we accumulate in the
3633 middle of the partition, all equal in value to the original
3634 pivot element selected. The pc is defined by:
3636 pc_left - the leftmost array index of the pc
3637 pc_right - the rightmost array index of the pc
3639 we start with pc_left == pc_right and only one element
3640 in the pivot chunk (but it can grow during the scan).
3642 u: uncompared elements - the set of elements in the partition
3643 we have not yet compared to the pivot value. There are two
3644 uncompared sets during the scan - one to the left of the pc
3645 and one to the right.
3647 u_right - the rightmost index of the left side's uncompared set
3648 u_left - the leftmost index of the right side's uncompared set
3650 The leftmost index of the left sides's uncompared set
3651 doesn't need its own variable because it is always defined
3652 by the leftmost edge of the whole partition (part_left). The
3653 same goes for the rightmost edge of the right partition
3656 We know there are no uncompared elements on the left once we
3657 get u_right < part_left and no uncompared elements on the
3658 right once u_left > part_right. When both these conditions
3659 are met, we have completed the scan of the partition.
3661 Any elements which are between the pivot chunk and the
3662 uncompared elements should be less than the pivot value on
3663 the left side and greater than the pivot value on the right
3664 side (in fact, the goal of the whole algorithm is to arrange
3665 for that to be true and make the groups of less-than and
3666 greater-then elements into new partitions to sort again).
3668 As you marvel at the complexity of the code and wonder why it
3669 has to be so confusing. Consider some of the things this level
3670 of confusion brings:
3672 Once I do a compare, I squeeze every ounce of juice out of it. I
3673 never do compare calls I don't have to do, and I certainly never
3676 I also never swap any elements unless I can prove there is a
3677 good reason. Many sort algorithms will swap a known value with
3678 an uncompared value just to get things in the right place (or
3679 avoid complexity :-), but that uncompared value, once it gets
3680 compared, may then have to be swapped again. A lot of the
3681 complexity of this code is due to the fact that it never swaps
3682 anything except compared values, and it only swaps them when the
3683 compare shows they are out of position.
3685 int pc_left, pc_right;
3686 int u_right, u_left;
3690 pc_left = ((part_left + part_right) / 2);
3692 u_right = pc_left - 1;
3693 u_left = pc_right + 1;
3695 /* Qsort works best when the pivot value is also the median value
3696 in the partition (unfortunately you can't find the median value
3697 without first sorting :-), so to give the algorithm a helping
3698 hand, we pick 3 elements and sort them and use the median value
3699 of that tiny set as the pivot value.
3701 Some versions of qsort like to use the left middle and right as
3702 the 3 elements to sort so they can insure the ends of the
3703 partition will contain values which will stop the scan in the
3704 compare loop, but when you have to call an arbitrarily complex
3705 routine to do a compare, its really better to just keep track of
3706 array index values to know when you hit the edge of the
3707 partition and avoid the extra compare. An even better reason to
3708 avoid using a compare call is the fact that you can drop off the
3709 edge of the array if someone foolishly provides you with an
3710 unstable compare function that doesn't always provide consistent
3713 So, since it is simpler for us to compare the three adjacent
3714 elements in the middle of the partition, those are the ones we
3715 pick here (conveniently pointed at by u_right, pc_left, and
3716 u_left). The values of the left, center, and right elements
3717 are refered to as l c and r in the following comments.
3720 #ifdef QSORT_ORDER_GUESS
3723 s = qsort_cmp(u_right, pc_left);
3726 s = qsort_cmp(pc_left, u_left);
3727 /* if l < c, c < r - already in order - nothing to do */
3729 /* l < c, c == r - already in order, pc grows */
3731 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3733 /* l < c, c > r - need to know more */
3734 s = qsort_cmp(u_right, u_left);
3736 /* l < c, c > r, l < r - swap c & r to get ordered */
3737 qsort_swap(pc_left, u_left);
3738 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3739 } else if (s == 0) {
3740 /* l < c, c > r, l == r - swap c&r, grow pc */
3741 qsort_swap(pc_left, u_left);
3743 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3745 /* l < c, c > r, l > r - make lcr into rlc to get ordered */
3746 qsort_rotate(pc_left, u_right, u_left);
3747 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3750 } else if (s == 0) {
3752 s = qsort_cmp(pc_left, u_left);
3754 /* l == c, c < r - already in order, grow pc */
3756 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3757 } else if (s == 0) {
3758 /* l == c, c == r - already in order, grow pc both ways */
3761 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3763 /* l == c, c > r - swap l & r, grow pc */
3764 qsort_swap(u_right, u_left);
3766 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3770 s = qsort_cmp(pc_left, u_left);
3772 /* l > c, c < r - need to know more */
3773 s = qsort_cmp(u_right, u_left);
3775 /* l > c, c < r, l < r - swap l & c to get ordered */
3776 qsort_swap(u_right, pc_left);
3777 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3778 } else if (s == 0) {
3779 /* l > c, c < r, l == r - swap l & c, grow pc */
3780 qsort_swap(u_right, pc_left);
3782 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3784 /* l > c, c < r, l > r - rotate lcr into crl to order */
3785 qsort_rotate(u_right, pc_left, u_left);
3786 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3788 } else if (s == 0) {
3789 /* l > c, c == r - swap ends, grow pc */
3790 qsort_swap(u_right, u_left);
3792 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3794 /* l > c, c > r - swap ends to get in order */
3795 qsort_swap(u_right, u_left);
3796 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3799 /* We now know the 3 middle elements have been compared and
3800 arranged in the desired order, so we can shrink the uncompared
3805 qsort_all_asserts(pc_left, pc_right, u_left, u_right);
3807 /* The above massive nested if was the simple part :-). We now have
3808 the middle 3 elements ordered and we need to scan through the
3809 uncompared sets on either side, swapping elements that are on
3810 the wrong side or simply shuffling equal elements around to get
3811 all equal elements into the pivot chunk.
3815 int still_work_on_left;
3816 int still_work_on_right;
3818 /* Scan the uncompared values on the left. If I find a value
3819 equal to the pivot value, move it over so it is adjacent to
3820 the pivot chunk and expand the pivot chunk. If I find a value
3821 less than the pivot value, then just leave it - its already
3822 on the correct side of the partition. If I find a greater
3823 value, then stop the scan.
3825 while (still_work_on_left = (u_right >= part_left)) {
3826 s = qsort_cmp(u_right, pc_left);
3829 } else if (s == 0) {
3831 if (pc_left != u_right) {
3832 qsort_swap(u_right, pc_left);
3838 qsort_assert(u_right < pc_left);
3839 qsort_assert(pc_left <= pc_right);
3840 qsort_assert(qsort_cmp(u_right + 1, pc_left) <= 0);
3841 qsort_assert(qsort_cmp(pc_left, pc_right) == 0);
3844 /* Do a mirror image scan of uncompared values on the right
3846 while (still_work_on_right = (u_left <= part_right)) {
3847 s = qsort_cmp(pc_right, u_left);
3850 } else if (s == 0) {
3852 if (pc_right != u_left) {
3853 qsort_swap(pc_right, u_left);
3859 qsort_assert(u_left > pc_right);
3860 qsort_assert(pc_left <= pc_right);
3861 qsort_assert(qsort_cmp(pc_right, u_left - 1) <= 0);
3862 qsort_assert(qsort_cmp(pc_left, pc_right) == 0);
3865 if (still_work_on_left) {
3866 /* I know I have a value on the left side which needs to be
3867 on the right side, but I need to know more to decide
3868 exactly the best thing to do with it.
3870 if (still_work_on_right) {
3871 /* I know I have values on both side which are out of
3872 position. This is a big win because I kill two birds
3873 with one swap (so to speak). I can advance the
3874 uncompared pointers on both sides after swapping both
3875 of them into the right place.
3877 qsort_swap(u_right, u_left);
3880 qsort_all_asserts(pc_left, pc_right, u_left, u_right);
3882 /* I have an out of position value on the left, but the
3883 right is fully scanned, so I "slide" the pivot chunk
3884 and any less-than values left one to make room for the
3885 greater value over on the right. If the out of position
3886 value is immediately adjacent to the pivot chunk (there
3887 are no less-than values), I can do that with a swap,
3888 otherwise, I have to rotate one of the less than values
3889 into the former position of the out of position value
3890 and the right end of the pivot chunk into the left end
3894 if (pc_left == u_right) {
3895 qsort_swap(u_right, pc_right);
3896 qsort_all_asserts(pc_left, pc_right-1, u_left, u_right-1);
3898 qsort_rotate(u_right, pc_left, pc_right);
3899 qsort_all_asserts(pc_left, pc_right-1, u_left, u_right-1);
3904 } else if (still_work_on_right) {
3905 /* Mirror image of complex case above: I have an out of
3906 position value on the right, but the left is fully
3907 scanned, so I need to shuffle things around to make room
3908 for the right value on the left.
3911 if (pc_right == u_left) {
3912 qsort_swap(u_left, pc_left);
3913 qsort_all_asserts(pc_left+1, pc_right, u_left+1, u_right);
3915 qsort_rotate(pc_right, pc_left, u_left);
3916 qsort_all_asserts(pc_left+1, pc_right, u_left+1, u_right);
3921 /* No more scanning required on either side of partition,
3922 break out of loop and figure out next set of partitions
3928 /* The elements in the pivot chunk are now in the right place. They
3929 will never move or be compared again. All I have to do is decide
3930 what to do with the stuff to the left and right of the pivot
3933 Notes on the QSORT_ORDER_GUESS ifdef code:
3935 1. If I just built these partitions without swapping any (or
3936 very many) elements, there is a chance that the elements are
3937 already ordered properly (being properly ordered will
3938 certainly result in no swapping, but the converse can't be
3941 2. A (properly written) insertion sort will run faster on
3942 already ordered data than qsort will.
3944 3. Perhaps there is some way to make a good guess about
3945 switching to an insertion sort earlier than partition size 6
3946 (for instance - we could save the partition size on the stack
3947 and increase the size each time we find we didn't swap, thus
3948 switching to insertion sort earlier for partitions with a
3949 history of not swapping).
3951 4. Naturally, if I just switch right away, it will make
3952 artificial benchmarks with pure ascending (or descending)
3953 data look really good, but is that a good reason in general?
3957 #ifdef QSORT_ORDER_GUESS
3959 #if QSORT_ORDER_GUESS == 1
3960 qsort_break_even = (part_right - part_left) + 1;
3962 #if QSORT_ORDER_GUESS == 2
3963 qsort_break_even *= 2;
3965 #if QSORT_ORDER_GUESS == 3
3966 int prev_break = qsort_break_even;
3967 qsort_break_even *= qsort_break_even;
3968 if (qsort_break_even < prev_break) {
3969 qsort_break_even = (part_right - part_left) + 1;
3973 qsort_break_even = QSORT_BREAK_EVEN;
3977 if (part_left < pc_left) {
3978 /* There are elements on the left which need more processing.
3979 Check the right as well before deciding what to do.
3981 if (pc_right < part_right) {
3982 /* We have two partitions to be sorted. Stack the biggest one
3983 and process the smallest one on the next iteration. This
3984 minimizes the stack height by insuring that any additional
3985 stack entries must come from the smallest partition which
3986 (because it is smallest) will have the fewest
3987 opportunities to generate additional stack entries.
3989 if ((part_right - pc_right) > (pc_left - part_left)) {
3990 /* stack the right partition, process the left */
3991 partition_stack[next_stack_entry].left = pc_right + 1;
3992 partition_stack[next_stack_entry].right = part_right;
3993 #ifdef QSORT_ORDER_GUESS
3994 partition_stack[next_stack_entry].qsort_break_even = qsort_break_even;
3996 part_right = pc_left - 1;
3998 /* stack the left partition, process the right */
3999 partition_stack[next_stack_entry].left = part_left;
4000 partition_stack[next_stack_entry].right = pc_left - 1;
4001 #ifdef QSORT_ORDER_GUESS
4002 partition_stack[next_stack_entry].qsort_break_even = qsort_break_even;
4004 part_left = pc_right + 1;
4006 qsort_assert(next_stack_entry < QSORT_MAX_STACK);
4009 /* The elements on the left are the only remaining elements
4010 that need sorting, arrange for them to be processed as the
4013 part_right = pc_left - 1;
4015 } else if (pc_right < part_right) {
4016 /* There is only one chunk on the right to be sorted, make it
4017 the new partition and loop back around.
4019 part_left = pc_right + 1;
4021 /* This whole partition wound up in the pivot chunk, so
4022 we need to get a new partition off the stack.
4024 if (next_stack_entry == 0) {
4025 /* the stack is empty - we are done */
4029 part_left = partition_stack[next_stack_entry].left;
4030 part_right = partition_stack[next_stack_entry].right;
4031 #ifdef QSORT_ORDER_GUESS
4032 qsort_break_even = partition_stack[next_stack_entry].qsort_break_even;
4036 /* This partition is too small to fool with qsort complexity, just
4037 do an ordinary insertion sort to minimize overhead.
4040 /* Assume 1st element is in right place already, and start checking
4041 at 2nd element to see where it should be inserted.
4043 for (i = part_left + 1; i <= part_right; ++i) {
4045 /* Scan (backwards - just in case 'i' is already in right place)
4046 through the elements already sorted to see if the ith element
4047 belongs ahead of one of them.
4049 for (j = i - 1; j >= part_left; --j) {
4050 if (qsort_cmp(i, j) >= 0) {
4051 /* i belongs right after j
4058 /* Looks like we really need to move some things
4062 for (k = i - 1; k >= j; --k)
4063 array[k + 1] = array[k];
4068 /* That partition is now sorted, grab the next one, or get out
4069 of the loop if there aren't any more.
4072 if (next_stack_entry == 0) {
4073 /* the stack is empty - we are done */
4077 part_left = partition_stack[next_stack_entry].left;
4078 part_right = partition_stack[next_stack_entry].right;
4079 #ifdef QSORT_ORDER_GUESS
4080 qsort_break_even = partition_stack[next_stack_entry].qsort_break_even;
4085 /* Believe it or not, the array is sorted at this point! */
4098 sortcv(pTHXo_ SV *a, SV *b)
4101 I32 oldsaveix = PL_savestack_ix;
4102 I32 oldscopeix = PL_scopestack_ix;
4104 GvSV(PL_firstgv) = a;
4105 GvSV(PL_secondgv) = b;
4106 PL_stack_sp = PL_stack_base;
4109 if (PL_stack_sp != PL_stack_base + 1)
4110 Perl_croak(aTHX_ "Sort subroutine didn't return single value");
4111 if (!SvNIOKp(*PL_stack_sp))
4112 Perl_croak(aTHX_ "Sort subroutine didn't return a numeric value");
4113 result = SvIV(*PL_stack_sp);
4114 while (PL_scopestack_ix > oldscopeix) {
4117 leave_scope(oldsaveix);
4123 sv_ncmp(pTHXo_ SV *a, SV *b)
4127 return nv1 < nv2 ? -1 : nv1 > nv2 ? 1 : 0;
4131 sv_i_ncmp(pTHXo_ SV *a, SV *b)
4135 return iv1 < iv2 ? -1 : iv1 > iv2 ? 1 : 0;
4137 #define tryCALL_AMAGICbin(left,right,meth,svp) STMT_START { \
4139 if (PL_amagic_generation) { \
4140 if (SvAMAGIC(left)||SvAMAGIC(right))\
4141 *svp = amagic_call(left, \
4149 amagic_ncmp(pTHXo_ register SV *a, register SV *b)
4152 tryCALL_AMAGICbin(a,b,ncmp,&tmpsv);
4157 I32 i = SvIVX(tmpsv);
4167 return sv_ncmp(aTHXo_ a, b);
4171 amagic_i_ncmp(pTHXo_ register SV *a, register SV *b)
4174 tryCALL_AMAGICbin(a,b,ncmp,&tmpsv);
4179 I32 i = SvIVX(tmpsv);
4189 return sv_i_ncmp(aTHXo_ a, b);
4193 amagic_cmp(pTHXo_ register SV *str1, register SV *str2)
4196 tryCALL_AMAGICbin(str1,str2,scmp,&tmpsv);
4201 I32 i = SvIVX(tmpsv);
4211 return sv_cmp(str1, str2);
4215 amagic_cmp_locale(pTHXo_ register SV *str1, register SV *str2)
4218 tryCALL_AMAGICbin(str1,str2,scmp,&tmpsv);
4223 I32 i = SvIVX(tmpsv);
4233 return sv_cmp_locale(str1, str2);
4237 run_user_filter(pTHXo_ int idx, SV *buf_sv, int maxlen)
4239 SV *datasv = FILTER_DATA(idx);
4240 int filter_has_file = IoLINES(datasv);
4241 GV *filter_child_proc = (GV *)IoFMT_GV(datasv);
4242 SV *filter_state = (SV *)IoTOP_GV(datasv);
4243 SV *filter_sub = (SV *)IoBOTTOM_GV(datasv);
4246 /* I was having segfault trouble under Linux 2.2.5 after a
4247 parse error occured. (Had to hack around it with a test
4248 for PL_error_count == 0.) Solaris doesn't segfault --
4249 not sure where the trouble is yet. XXX */
4251 if (filter_has_file) {
4252 len = FILTER_READ(idx+1, buf_sv, maxlen);
4255 if (filter_sub && len >= 0) {
4266 PUSHs(sv_2mortal(newSViv(maxlen)));
4268 PUSHs(filter_state);
4271 count = call_sv(filter_sub, G_SCALAR);
4287 IoLINES(datasv) = 0;
4288 if (filter_child_proc) {
4289 SvREFCNT_dec(filter_child_proc);
4290 IoFMT_GV(datasv) = Nullgv;
4293 SvREFCNT_dec(filter_state);
4294 IoTOP_GV(datasv) = Nullgv;
4297 SvREFCNT_dec(filter_sub);
4298 IoBOTTOM_GV(datasv) = Nullgv;
4300 filter_del(run_user_filter);
4309 sv_cmp_locale_static(pTHXo_ register SV *str1, register SV *str2)
4311 return sv_cmp_locale(str1, str2);
4315 sv_cmp_static(pTHXo_ register SV *str1, register SV *str2)
4317 return sv_cmp(str1, str2);
4320 #endif /* PERL_OBJECT */