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) {
1190 cx = &cxstack[cxstack_ix];
1191 DEBUG_l(PerlIO_printf(Perl_debug_log, "Unwinding block %ld, type %s\n",
1192 (long) cxstack_ix, PL_block_type[CxTYPE(cx)]));
1193 /* Note: we don't need to restore the base context info till the end. */
1194 switch (CxTYPE(cx)) {
1197 continue; /* not break */
1215 * Closures mentioned at top level of eval cannot be referenced
1216 * again, and their presence indirectly causes a memory leak.
1217 * (Note that the fact that compcv and friends are still set here
1218 * is, AFAIK, an accident.) --Chip
1220 * XXX need to get comppad et al from eval's cv rather than
1221 * relying on the incidental global values.
1224 S_free_closures(pTHX)
1227 SV **svp = AvARRAY(PL_comppad_name);
1229 for (ix = AvFILLp(PL_comppad_name); ix >= 0; ix--) {
1231 if (sv && sv != &PL_sv_undef && *SvPVX(sv) == '&') {
1233 svp[ix] = &PL_sv_undef;
1237 SvREFCNT_dec(CvOUTSIDE(sv));
1238 CvOUTSIDE(sv) = Nullcv;
1251 Perl_qerror(pTHX_ SV *err)
1254 sv_catsv(ERRSV, err);
1256 sv_catsv(PL_errors, err);
1258 Perl_warn(aTHX_ "%_", err);
1263 Perl_die_where(pTHX_ char *message, STRLEN msglen)
1269 register PERL_CONTEXT *cx;
1274 if (PL_in_eval & EVAL_KEEPERR) {
1275 static char prefix[] = "\t(in cleanup) ";
1280 else if (SvCUR(err) >= sizeof(prefix)+msglen-1) {
1283 if (*e != *message || strNE(e,message))
1287 SvGROW(err, SvCUR(err)+sizeof(prefix)+msglen);
1288 sv_catpvn(err, prefix, sizeof(prefix)-1);
1289 sv_catpvn(err, message, msglen);
1290 if (ckWARN(WARN_UNSAFE)) {
1291 STRLEN start = SvCUR(err)-msglen-sizeof(prefix)+1;
1292 Perl_warner(aTHX_ WARN_UNSAFE, SvPVX(err)+start);
1297 sv_setpvn(ERRSV, message, msglen);
1300 message = SvPVx(ERRSV, msglen);
1302 while ((cxix = dopoptoeval(cxstack_ix)) < 0
1303 && PL_curstackinfo->si_prev)
1312 if (cxix < cxstack_ix)
1315 POPBLOCK(cx,PL_curpm);
1316 if (CxTYPE(cx) != CXt_EVAL) {
1317 PerlIO_write(Perl_error_log, "panic: die ", 11);
1318 PerlIO_write(Perl_error_log, message, msglen);
1323 if (gimme == G_SCALAR)
1324 *++newsp = &PL_sv_undef;
1325 PL_stack_sp = newsp;
1329 if (optype == OP_REQUIRE) {
1330 char* msg = SvPVx(ERRSV, n_a);
1331 DIE(aTHX_ "%sCompilation failed in require",
1332 *msg ? msg : "Unknown error\n");
1334 return pop_return();
1338 message = SvPVx(ERRSV, msglen);
1341 /* SFIO can really mess with your errno */
1344 PerlIO *serr = Perl_error_log;
1346 PerlIO_write(serr, message, msglen);
1347 (void)PerlIO_flush(serr);
1360 if (SvTRUE(left) != SvTRUE(right))
1372 RETURNOP(cLOGOP->op_other);
1381 RETURNOP(cLOGOP->op_other);
1387 register I32 cxix = dopoptosub(cxstack_ix);
1388 register PERL_CONTEXT *cx;
1389 register PERL_CONTEXT *ccstack = cxstack;
1390 PERL_SI *top_si = PL_curstackinfo;
1401 /* we may be in a higher stacklevel, so dig down deeper */
1402 while (cxix < 0 && top_si->si_type != PERLSI_MAIN) {
1403 top_si = top_si->si_prev;
1404 ccstack = top_si->si_cxstack;
1405 cxix = dopoptosub_at(ccstack, top_si->si_cxix);
1408 if (GIMME != G_ARRAY)
1412 if (PL_DBsub && cxix >= 0 &&
1413 ccstack[cxix].blk_sub.cv == GvCV(PL_DBsub))
1417 cxix = dopoptosub_at(ccstack, cxix - 1);
1420 cx = &ccstack[cxix];
1421 if (CxTYPE(cx) == CXt_SUB) {
1422 dbcxix = dopoptosub_at(ccstack, cxix - 1);
1423 /* We expect that ccstack[dbcxix] is CXt_SUB, anyway, the
1424 field below is defined for any cx. */
1425 if (PL_DBsub && dbcxix >= 0 && ccstack[dbcxix].blk_sub.cv == GvCV(PL_DBsub))
1426 cx = &ccstack[dbcxix];
1429 if (GIMME != G_ARRAY) {
1430 hv = cx->blk_oldcop->cop_stash;
1432 PUSHs(&PL_sv_undef);
1435 sv_setpv(TARG, HvNAME(hv));
1441 hv = cx->blk_oldcop->cop_stash;
1443 PUSHs(&PL_sv_undef);
1445 PUSHs(sv_2mortal(newSVpv(HvNAME(hv), 0)));
1446 PUSHs(sv_2mortal(newSVpvn(SvPVX(GvSV(cx->blk_oldcop->cop_filegv)),
1447 SvCUR(GvSV(cx->blk_oldcop->cop_filegv)))));
1448 PUSHs(sv_2mortal(newSViv((I32)cx->blk_oldcop->cop_line)));
1451 if (CxTYPE(cx) == CXt_SUB) { /* So is ccstack[dbcxix]. */
1453 gv_efullname3(sv, CvGV(ccstack[cxix].blk_sub.cv), Nullch);
1454 PUSHs(sv_2mortal(sv));
1455 PUSHs(sv_2mortal(newSViv((I32)cx->blk_sub.hasargs)));
1458 PUSHs(sv_2mortal(newSVpvn("(eval)",6)));
1459 PUSHs(sv_2mortal(newSViv(0)));
1461 gimme = (I32)cx->blk_gimme;
1462 if (gimme == G_VOID)
1463 PUSHs(&PL_sv_undef);
1465 PUSHs(sv_2mortal(newSViv(gimme & G_ARRAY)));
1466 if (CxTYPE(cx) == CXt_EVAL) {
1467 if (cx->blk_eval.old_op_type == OP_ENTEREVAL) {
1468 PUSHs(cx->blk_eval.cur_text);
1471 else if (cx->blk_eval.old_name) { /* Try blocks have old_name == 0. */
1472 /* Require, put the name. */
1473 PUSHs(sv_2mortal(newSVpv(cx->blk_eval.old_name, 0)));
1478 PUSHs(&PL_sv_undef);
1479 PUSHs(&PL_sv_undef);
1481 if (CxTYPE(cx) == CXt_SUB && cx->blk_sub.hasargs
1482 && PL_curcop->cop_stash == PL_debstash)
1484 AV *ary = cx->blk_sub.argarray;
1485 int off = AvARRAY(ary) - AvALLOC(ary);
1489 PL_dbargs = GvAV(gv_AVadd(tmpgv = gv_fetchpv("DB::args", TRUE,
1492 AvREAL_off(PL_dbargs); /* XXX Should be REIFY */
1495 if (AvMAX(PL_dbargs) < AvFILLp(ary) + off)
1496 av_extend(PL_dbargs, AvFILLp(ary) + off);
1497 Copy(AvALLOC(ary), AvARRAY(PL_dbargs), AvFILLp(ary) + 1 + off, SV*);
1498 AvFILLp(PL_dbargs) = AvFILLp(ary) + off;
1500 /* XXX only hints propagated via op_private are currently
1501 * visible (others are not easily accessible, since they
1502 * use the global PL_hints) */
1503 PUSHs(sv_2mortal(newSViv((I32)cx->blk_oldcop->op_private &
1504 HINT_PRIVATE_MASK)));
1518 sv_reset(tmps, PL_curcop->cop_stash);
1530 PL_curcop = (COP*)PL_op;
1531 TAINT_NOT; /* Each statement is presumed innocent */
1532 PL_stack_sp = PL_stack_base + cxstack[cxstack_ix].blk_oldsp;
1535 if (PL_op->op_private || SvIV(PL_DBsingle) || SvIV(PL_DBsignal) || SvIV(PL_DBtrace))
1539 register PERL_CONTEXT *cx;
1540 I32 gimme = G_ARRAY;
1547 DIE(aTHX_ "No DB::DB routine defined");
1549 if (CvDEPTH(cv) >= 1 && !(PL_debug & (1<<30))) /* don't do recursive DB::DB call */
1561 push_return(PL_op->op_next);
1562 PUSHBLOCK(cx, CXt_SUB, SP);
1565 (void)SvREFCNT_inc(cv);
1566 SAVESPTR(PL_curpad);
1567 PL_curpad = AvARRAY((AV*)*av_fetch(CvPADLIST(cv),1,FALSE));
1568 RETURNOP(CvSTART(cv));
1582 register PERL_CONTEXT *cx;
1583 I32 gimme = GIMME_V;
1590 if (PL_op->op_flags & OPf_SPECIAL) {
1592 svp = &THREADSV(PL_op->op_targ); /* per-thread variable */
1593 SAVEGENERICSV(*svp);
1597 #endif /* USE_THREADS */
1598 if (PL_op->op_targ) {
1599 svp = &PL_curpad[PL_op->op_targ]; /* "my" variable */
1603 svp = &GvSV((GV*)POPs); /* symbol table variable */
1604 SAVEGENERICSV(*svp);
1610 PUSHBLOCK(cx, CXt_LOOP, SP);
1611 PUSHLOOP(cx, svp, MARK);
1612 if (PL_op->op_flags & OPf_STACKED) {
1613 cx->blk_loop.iterary = (AV*)SvREFCNT_inc(POPs);
1614 if (SvTYPE(cx->blk_loop.iterary) != SVt_PVAV) {
1616 if (SvNIOKp(sv) || !SvPOKp(sv) ||
1617 (looks_like_number(sv) && *SvPVX(sv) != '0')) {
1618 if (SvNV(sv) < IV_MIN ||
1619 SvNV((SV*)cx->blk_loop.iterary) >= IV_MAX)
1620 DIE(aTHX_ "Range iterator outside integer range");
1621 cx->blk_loop.iterix = SvIV(sv);
1622 cx->blk_loop.itermax = SvIV((SV*)cx->blk_loop.iterary);
1625 cx->blk_loop.iterlval = newSVsv(sv);
1629 cx->blk_loop.iterary = PL_curstack;
1630 AvFILLp(PL_curstack) = SP - PL_stack_base;
1631 cx->blk_loop.iterix = MARK - PL_stack_base;
1640 register PERL_CONTEXT *cx;
1641 I32 gimme = GIMME_V;
1647 PUSHBLOCK(cx, CXt_LOOP, SP);
1648 PUSHLOOP(cx, 0, SP);
1656 register PERL_CONTEXT *cx;
1664 newsp = PL_stack_base + cx->blk_loop.resetsp;
1667 if (gimme == G_VOID)
1669 else if (gimme == G_SCALAR) {
1671 *++newsp = sv_mortalcopy(*SP);
1673 *++newsp = &PL_sv_undef;
1677 *++newsp = sv_mortalcopy(*++mark);
1678 TAINT_NOT; /* Each item is independent */
1684 POPLOOP(cx); /* Stack values are safe: release loop vars ... */
1685 PL_curpm = newpm; /* ... and pop $1 et al */
1697 register PERL_CONTEXT *cx;
1698 bool popsub2 = FALSE;
1704 if (PL_curstackinfo->si_type == PERLSI_SORT) {
1705 if (cxstack_ix == PL_sortcxix || dopoptosub(cxstack_ix) <= PL_sortcxix) {
1706 if (cxstack_ix > PL_sortcxix)
1707 dounwind(PL_sortcxix);
1708 AvARRAY(PL_curstack)[1] = *SP;
1709 PL_stack_sp = PL_stack_base + 1;
1714 cxix = dopoptosub(cxstack_ix);
1716 DIE(aTHX_ "Can't return outside a subroutine");
1717 if (cxix < cxstack_ix)
1721 switch (CxTYPE(cx)) {
1727 if (AvFILLp(PL_comppad_name) >= 0)
1730 if (optype == OP_REQUIRE &&
1731 (MARK == SP || (gimme == G_SCALAR && !SvTRUE(*SP))) )
1733 /* Unassume the success we assumed earlier. */
1734 char *name = cx->blk_eval.old_name;
1735 (void)hv_delete(GvHVn(PL_incgv), name, strlen(name), G_DISCARD);
1736 DIE(aTHX_ "%s did not return a true value", name);
1740 DIE(aTHX_ "panic: return");
1744 if (gimme == G_SCALAR) {
1747 if (cx->blk_sub.cv && CvDEPTH(cx->blk_sub.cv) > 1) {
1749 *++newsp = SvREFCNT_inc(*SP);
1754 *++newsp = sv_mortalcopy(*SP);
1757 *++newsp = (SvTEMP(*SP)) ? *SP : sv_mortalcopy(*SP);
1759 *++newsp = sv_mortalcopy(*SP);
1761 *++newsp = &PL_sv_undef;
1763 else if (gimme == G_ARRAY) {
1764 while (++MARK <= SP) {
1765 *++newsp = (popsub2 && SvTEMP(*MARK))
1766 ? *MARK : sv_mortalcopy(*MARK);
1767 TAINT_NOT; /* Each item is independent */
1770 PL_stack_sp = newsp;
1772 /* Stack values are safe: */
1774 POPSUB(cx); /* release CV and @_ ... */
1776 PL_curpm = newpm; /* ... and pop $1 et al */
1779 return pop_return();
1786 register PERL_CONTEXT *cx;
1795 if (PL_op->op_flags & OPf_SPECIAL) {
1796 cxix = dopoptoloop(cxstack_ix);
1798 DIE(aTHX_ "Can't \"last\" outside a block");
1801 cxix = dopoptolabel(cPVOP->op_pv);
1803 DIE(aTHX_ "Label not found for \"last %s\"", cPVOP->op_pv);
1805 if (cxix < cxstack_ix)
1810 switch (CxTYPE(cx)) {
1813 newsp = PL_stack_base + cx->blk_loop.resetsp;
1814 nextop = cx->blk_loop.last_op->op_next;
1818 nextop = pop_return();
1822 nextop = pop_return();
1825 DIE(aTHX_ "panic: last");
1829 if (gimme == G_SCALAR) {
1831 *++newsp = ((pop2 == CXt_SUB) && SvTEMP(*SP))
1832 ? *SP : sv_mortalcopy(*SP);
1834 *++newsp = &PL_sv_undef;
1836 else if (gimme == G_ARRAY) {
1837 while (++MARK <= SP) {
1838 *++newsp = ((pop2 == CXt_SUB) && SvTEMP(*MARK))
1839 ? *MARK : sv_mortalcopy(*MARK);
1840 TAINT_NOT; /* Each item is independent */
1846 /* Stack values are safe: */
1849 POPLOOP(cx); /* release loop vars ... */
1853 POPSUB(cx); /* release CV and @_ ... */
1856 PL_curpm = newpm; /* ... and pop $1 et al */
1865 register PERL_CONTEXT *cx;
1868 if (PL_op->op_flags & OPf_SPECIAL) {
1869 cxix = dopoptoloop(cxstack_ix);
1871 DIE(aTHX_ "Can't \"next\" outside a block");
1874 cxix = dopoptolabel(cPVOP->op_pv);
1876 DIE(aTHX_ "Label not found for \"next %s\"", cPVOP->op_pv);
1878 if (cxix < cxstack_ix)
1882 oldsave = PL_scopestack[PL_scopestack_ix - 1];
1883 LEAVE_SCOPE(oldsave);
1884 return cx->blk_loop.next_op;
1890 register PERL_CONTEXT *cx;
1893 if (PL_op->op_flags & OPf_SPECIAL) {
1894 cxix = dopoptoloop(cxstack_ix);
1896 DIE(aTHX_ "Can't \"redo\" outside a block");
1899 cxix = dopoptolabel(cPVOP->op_pv);
1901 DIE(aTHX_ "Label not found for \"redo %s\"", cPVOP->op_pv);
1903 if (cxix < cxstack_ix)
1907 oldsave = PL_scopestack[PL_scopestack_ix - 1];
1908 LEAVE_SCOPE(oldsave);
1909 return cx->blk_loop.redo_op;
1913 S_dofindlabel(pTHX_ OP *o, char *label, OP **opstack, OP **oplimit)
1917 static char too_deep[] = "Target of goto is too deeply nested";
1920 Perl_croak(aTHX_ too_deep);
1921 if (o->op_type == OP_LEAVE ||
1922 o->op_type == OP_SCOPE ||
1923 o->op_type == OP_LEAVELOOP ||
1924 o->op_type == OP_LEAVETRY)
1926 *ops++ = cUNOPo->op_first;
1928 Perl_croak(aTHX_ too_deep);
1931 if (o->op_flags & OPf_KIDS) {
1933 /* First try all the kids at this level, since that's likeliest. */
1934 for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling) {
1935 if ((kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) &&
1936 kCOP->cop_label && strEQ(kCOP->cop_label, label))
1939 for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling) {
1940 if (kid == PL_lastgotoprobe)
1942 if ((kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) &&
1944 (ops[-1]->op_type != OP_NEXTSTATE &&
1945 ops[-1]->op_type != OP_DBSTATE)))
1947 if (o = dofindlabel(kid, label, ops, oplimit))
1966 register PERL_CONTEXT *cx;
1967 #define GOTO_DEPTH 64
1968 OP *enterops[GOTO_DEPTH];
1970 int do_dump = (PL_op->op_type == OP_DUMP);
1971 static char must_have_label[] = "goto must have label";
1974 if (PL_op->op_flags & OPf_STACKED) {
1978 /* This egregious kludge implements goto &subroutine */
1979 if (SvROK(sv) && SvTYPE(SvRV(sv)) == SVt_PVCV) {
1981 register PERL_CONTEXT *cx;
1982 CV* cv = (CV*)SvRV(sv);
1988 if (!CvROOT(cv) && !CvXSUB(cv)) {
1993 /* autoloaded stub? */
1994 if (cv != GvCV(gv) && (cv = GvCV(gv)))
1996 autogv = gv_autoload4(GvSTASH(gv), GvNAME(gv),
1997 GvNAMELEN(gv), FALSE);
1998 if (autogv && (cv = GvCV(autogv)))
2000 tmpstr = sv_newmortal();
2001 gv_efullname3(tmpstr, gv, Nullch);
2002 DIE(aTHX_ "Goto undefined subroutine &%s",SvPVX(tmpstr));
2004 DIE(aTHX_ "Goto undefined subroutine");
2007 /* First do some returnish stuff. */
2008 cxix = dopoptosub(cxstack_ix);
2010 DIE(aTHX_ "Can't goto subroutine outside a subroutine");
2011 if (cxix < cxstack_ix)
2014 if (CxTYPE(cx) == CXt_EVAL && cx->blk_eval.old_op_type == OP_ENTEREVAL)
2015 DIE(aTHX_ "Can't goto subroutine from an eval-string");
2017 if (CxTYPE(cx) == CXt_SUB && cx->blk_sub.hasargs) {
2018 /* put @_ back onto stack */
2019 AV* av = cx->blk_sub.argarray;
2021 items = AvFILLp(av) + 1;
2023 EXTEND(PL_stack_sp, items); /* @_ could have been extended. */
2024 Copy(AvARRAY(av), PL_stack_sp, items, SV*);
2025 PL_stack_sp += items;
2027 SvREFCNT_dec(GvAV(PL_defgv));
2028 GvAV(PL_defgv) = cx->blk_sub.savearray;
2029 #endif /* USE_THREADS */
2030 /* abandon @_ if it got reified */
2032 (void)sv_2mortal((SV*)av); /* delay until return */
2034 av_extend(av, items-1);
2035 AvFLAGS(av) = AVf_REIFY;
2036 PL_curpad[0] = (SV*)(cx->blk_sub.argarray = av);
2039 else if (CvXSUB(cv)) { /* put GvAV(defgv) back onto stack */
2043 av = (AV*)PL_curpad[0];
2045 av = GvAV(PL_defgv);
2047 items = AvFILLp(av) + 1;
2049 EXTEND(PL_stack_sp, items); /* @_ could have been extended. */
2050 Copy(AvARRAY(av), PL_stack_sp, items, SV*);
2051 PL_stack_sp += items;
2053 if (CxTYPE(cx) == CXt_SUB &&
2054 !(CvDEPTH(cx->blk_sub.cv) = cx->blk_sub.olddepth))
2055 SvREFCNT_dec(cx->blk_sub.cv);
2056 oldsave = PL_scopestack[PL_scopestack_ix - 1];
2057 LEAVE_SCOPE(oldsave);
2059 /* Now do some callish stuff. */
2062 #ifdef PERL_XSUB_OLDSTYLE
2063 if (CvOLDSTYLE(cv)) {
2064 I32 (*fp3)(int,int,int);
2069 fp3 = (I32(*)(int,int,int)))CvXSUB(cv;
2070 items = (*fp3)(CvXSUBANY(cv).any_i32,
2071 mark - PL_stack_base + 1,
2073 SP = PL_stack_base + items;
2076 #endif /* PERL_XSUB_OLDSTYLE */
2081 PL_stack_sp--; /* There is no cv arg. */
2082 /* Push a mark for the start of arglist */
2084 (void)(*CvXSUB(cv))(aTHXo_ cv);
2085 /* Pop the current context like a decent sub should */
2086 POPBLOCK(cx, PL_curpm);
2087 /* Do _not_ use PUTBACK, keep the XSUB's return stack! */
2090 return pop_return();
2093 AV* padlist = CvPADLIST(cv);
2094 SV** svp = AvARRAY(padlist);
2095 if (CxTYPE(cx) == CXt_EVAL) {
2096 PL_in_eval = cx->blk_eval.old_in_eval;
2097 PL_eval_root = cx->blk_eval.old_eval_root;
2098 cx->cx_type = CXt_SUB;
2099 cx->blk_sub.hasargs = 0;
2101 cx->blk_sub.cv = cv;
2102 cx->blk_sub.olddepth = CvDEPTH(cv);
2104 if (CvDEPTH(cv) < 2)
2105 (void)SvREFCNT_inc(cv);
2106 else { /* save temporaries on recursion? */
2107 if (CvDEPTH(cv) == 100 && ckWARN(WARN_RECURSION))
2108 sub_crush_depth(cv);
2109 if (CvDEPTH(cv) > AvFILLp(padlist)) {
2110 AV *newpad = newAV();
2111 SV **oldpad = AvARRAY(svp[CvDEPTH(cv)-1]);
2112 I32 ix = AvFILLp((AV*)svp[1]);
2113 svp = AvARRAY(svp[0]);
2114 for ( ;ix > 0; ix--) {
2115 if (svp[ix] != &PL_sv_undef) {
2116 char *name = SvPVX(svp[ix]);
2117 if ((SvFLAGS(svp[ix]) & SVf_FAKE)
2120 /* outer lexical or anon code */
2121 av_store(newpad, ix,
2122 SvREFCNT_inc(oldpad[ix]) );
2124 else { /* our own lexical */
2126 av_store(newpad, ix, sv = (SV*)newAV());
2127 else if (*name == '%')
2128 av_store(newpad, ix, sv = (SV*)newHV());
2130 av_store(newpad, ix, sv = NEWSV(0,0));
2135 av_store(newpad, ix, sv = NEWSV(0,0));
2139 if (cx->blk_sub.hasargs) {
2142 av_store(newpad, 0, (SV*)av);
2143 AvFLAGS(av) = AVf_REIFY;
2145 av_store(padlist, CvDEPTH(cv), (SV*)newpad);
2146 AvFILLp(padlist) = CvDEPTH(cv);
2147 svp = AvARRAY(padlist);
2151 if (!cx->blk_sub.hasargs) {
2152 AV* av = (AV*)PL_curpad[0];
2154 items = AvFILLp(av) + 1;
2156 /* Mark is at the end of the stack. */
2158 Copy(AvARRAY(av), SP + 1, items, SV*);
2163 #endif /* USE_THREADS */
2164 SAVESPTR(PL_curpad);
2165 PL_curpad = AvARRAY((AV*)svp[CvDEPTH(cv)]);
2167 if (cx->blk_sub.hasargs)
2168 #endif /* USE_THREADS */
2170 AV* av = (AV*)PL_curpad[0];
2174 cx->blk_sub.savearray = GvAV(PL_defgv);
2175 GvAV(PL_defgv) = (AV*)SvREFCNT_inc(av);
2176 #endif /* USE_THREADS */
2177 cx->blk_sub.argarray = av;
2180 if (items >= AvMAX(av) + 1) {
2182 if (AvARRAY(av) != ary) {
2183 AvMAX(av) += AvARRAY(av) - AvALLOC(av);
2184 SvPVX(av) = (char*)ary;
2186 if (items >= AvMAX(av) + 1) {
2187 AvMAX(av) = items - 1;
2188 Renew(ary,items+1,SV*);
2190 SvPVX(av) = (char*)ary;
2193 Copy(mark,AvARRAY(av),items,SV*);
2194 AvFILLp(av) = items - 1;
2195 assert(!AvREAL(av));
2202 if (PERLDB_SUB) { /* Checking curstash breaks DProf. */
2204 * We do not care about using sv to call CV;
2205 * it's for informational purposes only.
2207 SV *sv = GvSV(PL_DBsub);
2210 if (PERLDB_SUB_NN) {
2211 SvIVX(sv) = PTR2IV(cv); /* Already upgraded, saved */
2214 gv_efullname3(sv, CvGV(cv), Nullch);
2217 && (gotocv = get_cv("DB::goto", FALSE)) ) {
2218 PUSHMARK( PL_stack_sp );
2219 call_sv((SV*)gotocv, G_SCALAR | G_NODEBUG);
2223 RETURNOP(CvSTART(cv));
2227 label = SvPV(sv,n_a);
2228 if (!(do_dump || *label))
2229 DIE(aTHX_ must_have_label);
2232 else if (PL_op->op_flags & OPf_SPECIAL) {
2234 DIE(aTHX_ must_have_label);
2237 label = cPVOP->op_pv;
2239 if (label && *label) {
2244 PL_lastgotoprobe = 0;
2246 for (ix = cxstack_ix; ix >= 0; ix--) {
2248 switch (CxTYPE(cx)) {
2250 gotoprobe = PL_eval_root; /* XXX not good for nested eval */
2253 gotoprobe = cx->blk_oldcop->op_sibling;
2259 gotoprobe = cx->blk_oldcop->op_sibling;
2261 gotoprobe = PL_main_root;
2264 if (CvDEPTH(cx->blk_sub.cv)) {
2265 gotoprobe = CvROOT(cx->blk_sub.cv);
2270 DIE(aTHX_ "Can't \"goto\" outside a block");
2273 DIE(aTHX_ "panic: goto");
2274 gotoprobe = PL_main_root;
2277 retop = dofindlabel(gotoprobe, label,
2278 enterops, enterops + GOTO_DEPTH);
2281 PL_lastgotoprobe = gotoprobe;
2284 DIE(aTHX_ "Can't find label %s", label);
2286 /* pop unwanted frames */
2288 if (ix < cxstack_ix) {
2295 oldsave = PL_scopestack[PL_scopestack_ix];
2296 LEAVE_SCOPE(oldsave);
2299 /* push wanted frames */
2301 if (*enterops && enterops[1]) {
2303 for (ix = 1; enterops[ix]; ix++) {
2304 PL_op = enterops[ix];
2305 /* Eventually we may want to stack the needed arguments
2306 * for each op. For now, we punt on the hard ones. */
2307 if (PL_op->op_type == OP_ENTERITER)
2308 DIE(aTHX_ "Can't \"goto\" into the middle of a foreach loop",
2310 CALL_FPTR(PL_op->op_ppaddr)(aTHX);
2318 if (!retop) retop = PL_main_start;
2320 PL_restartop = retop;
2321 PL_do_undump = TRUE;
2325 PL_restartop = 0; /* hmm, must be GNU unexec().. */
2326 PL_do_undump = FALSE;
2342 if (anum == 1 && VMSISH_EXIT)
2347 PUSHs(&PL_sv_undef);
2355 NV value = SvNVx(GvSV(cCOP->cop_gv));
2356 register I32 match = I_32(value);
2359 if (((NV)match) > value)
2360 --match; /* was fractional--truncate other way */
2362 match -= cCOP->uop.scop.scop_offset;
2365 else if (match > cCOP->uop.scop.scop_max)
2366 match = cCOP->uop.scop.scop_max;
2367 PL_op = cCOP->uop.scop.scop_next[match];
2377 PL_op = PL_op->op_next; /* can't assume anything */
2380 match = *(SvPVx(GvSV(cCOP->cop_gv), n_a)) & 255;
2381 match -= cCOP->uop.scop.scop_offset;
2384 else if (match > cCOP->uop.scop.scop_max)
2385 match = cCOP->uop.scop.scop_max;
2386 PL_op = cCOP->uop.scop.scop_next[match];
2395 S_save_lines(pTHX_ AV *array, SV *sv)
2397 register char *s = SvPVX(sv);
2398 register char *send = SvPVX(sv) + SvCUR(sv);
2400 register I32 line = 1;
2402 while (s && s < send) {
2403 SV *tmpstr = NEWSV(85,0);
2405 sv_upgrade(tmpstr, SVt_PVMG);
2406 t = strchr(s, '\n');
2412 sv_setpvn(tmpstr, s, t - s);
2413 av_store(array, line++, tmpstr);
2419 S_docatch_body(pTHX_ va_list args)
2426 S_docatch(pTHX_ OP *o)
2433 assert(CATCH_GET == TRUE);
2437 CALLPROTECT(aTHX_ &ret, MEMBER_TO_FPTR(S_docatch_body));
2443 PL_op = PL_restartop;
2458 Perl_sv_compile_2op(pTHX_ SV *sv, OP** startop, char *code, AV** avp)
2459 /* sv Text to convert to OP tree. */
2460 /* startop op_free() this to undo. */
2461 /* code Short string id of the caller. */
2463 dSP; /* Make POPBLOCK work. */
2466 I32 gimme = 0; /* SUSPECT - INITIALZE TO WHAT? NI-S */
2469 OP *oop = PL_op, *rop;
2470 char tmpbuf[TYPE_DIGITS(long) + 12 + 10];
2476 /* switch to eval mode */
2478 if (PL_curcop == &PL_compiling) {
2479 SAVESPTR(PL_compiling.cop_stash);
2480 PL_compiling.cop_stash = PL_curstash;
2482 SAVESPTR(PL_compiling.cop_filegv);
2483 SAVEI16(PL_compiling.cop_line);
2484 sprintf(tmpbuf, "_<(%.10s_eval %lu)", code, (unsigned long)++PL_evalseq);
2485 PL_compiling.cop_filegv = gv_fetchfile(tmpbuf+2);
2486 PL_compiling.cop_line = 1;
2487 /* XXX For C<eval "...">s within BEGIN {} blocks, this ends up
2488 deleting the eval's FILEGV from the stash before gv_check() runs
2489 (i.e. before run-time proper). To work around the coredump that
2490 ensues, we always turn GvMULTI_on for any globals that were
2491 introduced within evals. See force_ident(). GSAR 96-10-12 */
2492 safestr = savepv(tmpbuf);
2493 SAVEDELETE(PL_defstash, safestr, strlen(safestr));
2495 #ifdef OP_IN_REGISTER
2503 PL_op->op_type = OP_ENTEREVAL;
2504 PL_op->op_flags = 0; /* Avoid uninit warning. */
2505 PUSHBLOCK(cx, CXt_EVAL, SP);
2506 PUSHEVAL(cx, 0, PL_compiling.cop_filegv);
2507 rop = doeval(G_SCALAR, startop);
2508 POPBLOCK(cx,PL_curpm);
2511 (*startop)->op_type = OP_NULL;
2512 (*startop)->op_ppaddr = PL_ppaddr[OP_NULL];
2514 *avp = (AV*)SvREFCNT_inc(PL_comppad);
2516 if (PL_curcop == &PL_compiling)
2517 PL_compiling.op_private = PL_hints;
2518 #ifdef OP_IN_REGISTER
2524 /* With USE_THREADS, eval_owner must be held on entry to doeval */
2526 S_doeval(pTHX_ int gimme, OP** startop)
2535 PL_in_eval = EVAL_INEVAL;
2539 /* set up a scratch pad */
2542 SAVESPTR(PL_curpad);
2543 SAVESPTR(PL_comppad);
2544 SAVESPTR(PL_comppad_name);
2545 SAVEI32(PL_comppad_name_fill);
2546 SAVEI32(PL_min_intro_pending);
2547 SAVEI32(PL_max_intro_pending);
2550 for (i = cxstack_ix - 1; i >= 0; i--) {
2551 PERL_CONTEXT *cx = &cxstack[i];
2552 if (CxTYPE(cx) == CXt_EVAL)
2554 else if (CxTYPE(cx) == CXt_SUB) {
2555 caller = cx->blk_sub.cv;
2560 SAVESPTR(PL_compcv);
2561 PL_compcv = (CV*)NEWSV(1104,0);
2562 sv_upgrade((SV *)PL_compcv, SVt_PVCV);
2563 CvEVAL_on(PL_compcv);
2565 CvOWNER(PL_compcv) = 0;
2566 New(666, CvMUTEXP(PL_compcv), 1, perl_mutex);
2567 MUTEX_INIT(CvMUTEXP(PL_compcv));
2568 #endif /* USE_THREADS */
2570 PL_comppad = newAV();
2571 av_push(PL_comppad, Nullsv);
2572 PL_curpad = AvARRAY(PL_comppad);
2573 PL_comppad_name = newAV();
2574 PL_comppad_name_fill = 0;
2575 PL_min_intro_pending = 0;
2578 av_store(PL_comppad_name, 0, newSVpvn("@_", 2));
2579 PL_curpad[0] = (SV*)newAV();
2580 SvPADMY_on(PL_curpad[0]); /* XXX Needed? */
2581 #endif /* USE_THREADS */
2583 comppadlist = newAV();
2584 AvREAL_off(comppadlist);
2585 av_store(comppadlist, 0, (SV*)PL_comppad_name);
2586 av_store(comppadlist, 1, (SV*)PL_comppad);
2587 CvPADLIST(PL_compcv) = comppadlist;
2589 if (!saveop || saveop->op_type != OP_REQUIRE)
2590 CvOUTSIDE(PL_compcv) = (CV*)SvREFCNT_inc(caller);
2592 SAVEFREESV(PL_compcv);
2594 /* make sure we compile in the right package */
2596 newstash = PL_curcop->cop_stash;
2597 if (PL_curstash != newstash) {
2598 SAVESPTR(PL_curstash);
2599 PL_curstash = newstash;
2601 SAVESPTR(PL_beginav);
2602 PL_beginav = newAV();
2603 SAVEFREESV(PL_beginav);
2605 /* try to compile it */
2607 PL_eval_root = Nullop;
2609 PL_curcop = &PL_compiling;
2610 PL_curcop->cop_arybase = 0;
2611 SvREFCNT_dec(PL_rs);
2612 PL_rs = newSVpvn("\n", 1);
2613 if (saveop && saveop->op_flags & OPf_SPECIAL)
2614 PL_in_eval |= EVAL_KEEPERR;
2617 if (yyparse() || PL_error_count || !PL_eval_root) {
2621 I32 optype = 0; /* Might be reset by POPEVAL. */
2626 op_free(PL_eval_root);
2627 PL_eval_root = Nullop;
2629 SP = PL_stack_base + POPMARK; /* pop original mark */
2631 POPBLOCK(cx,PL_curpm);
2637 if (optype == OP_REQUIRE) {
2638 char* msg = SvPVx(ERRSV, n_a);
2639 DIE(aTHX_ "%sCompilation failed in require",
2640 *msg ? msg : "Unknown error\n");
2643 char* msg = SvPVx(ERRSV, n_a);
2645 POPBLOCK(cx,PL_curpm);
2647 Perl_croak(aTHX_ "%sCompilation failed in regexp",
2648 (*msg ? msg : "Unknown error\n"));
2650 SvREFCNT_dec(PL_rs);
2651 PL_rs = SvREFCNT_inc(PL_nrs);
2653 MUTEX_LOCK(&PL_eval_mutex);
2655 COND_SIGNAL(&PL_eval_cond);
2656 MUTEX_UNLOCK(&PL_eval_mutex);
2657 #endif /* USE_THREADS */
2660 SvREFCNT_dec(PL_rs);
2661 PL_rs = SvREFCNT_inc(PL_nrs);
2662 PL_compiling.cop_line = 0;
2664 *startop = PL_eval_root;
2665 SvREFCNT_dec(CvOUTSIDE(PL_compcv));
2666 CvOUTSIDE(PL_compcv) = Nullcv;
2668 SAVEFREEOP(PL_eval_root);
2670 scalarvoid(PL_eval_root);
2671 else if (gimme & G_ARRAY)
2674 scalar(PL_eval_root);
2676 DEBUG_x(dump_eval());
2678 /* Register with debugger: */
2679 if (PERLDB_INTER && saveop->op_type == OP_REQUIRE) {
2680 CV *cv = get_cv("DB::postponed", FALSE);
2684 XPUSHs((SV*)PL_compiling.cop_filegv);
2686 call_sv((SV*)cv, G_DISCARD);
2690 /* compiled okay, so do it */
2692 CvDEPTH(PL_compcv) = 1;
2693 SP = PL_stack_base + POPMARK; /* pop original mark */
2694 PL_op = saveop; /* The caller may need it. */
2696 MUTEX_LOCK(&PL_eval_mutex);
2698 COND_SIGNAL(&PL_eval_cond);
2699 MUTEX_UNLOCK(&PL_eval_mutex);
2700 #endif /* USE_THREADS */
2702 RETURNOP(PL_eval_start);
2706 S_doopen_pmc(pTHX_ const char *name, const char *mode)
2708 STRLEN namelen = strlen(name);
2711 if (namelen > 3 && strEQ(name + namelen - 3, ".pm")) {
2712 SV *pmcsv = Perl_newSVpvf(aTHX_ "%s%c", name, 'c');
2713 char *pmc = SvPV_nolen(pmcsv);
2716 if (PerlLIO_stat(pmc, &pmcstat) < 0) {
2717 fp = PerlIO_open(name, mode);
2720 if (PerlLIO_stat(name, &pmstat) < 0 ||
2721 pmstat.st_mtime < pmcstat.st_mtime)
2723 fp = PerlIO_open(pmc, mode);
2726 fp = PerlIO_open(name, mode);
2729 SvREFCNT_dec(pmcsv);
2732 fp = PerlIO_open(name, mode);
2740 register PERL_CONTEXT *cx;
2745 SV *namesv = Nullsv;
2747 I32 gimme = G_SCALAR;
2748 PerlIO *tryrsfp = 0;
2750 int filter_has_file = 0;
2751 GV *filter_child_proc = 0;
2752 SV *filter_state = 0;
2756 if (SvNIOKp(sv) && !SvPOKp(sv)) {
2757 if (Atof(PL_patchlevel) + 0.00000999 < SvNV(sv))
2758 DIE(aTHX_ "Perl %s required--this is only version %s, stopped",
2759 SvPV(sv,n_a),PL_patchlevel);
2762 name = SvPV(sv, len);
2763 if (!(name && len > 0 && *name))
2764 DIE(aTHX_ "Null filename used");
2765 TAINT_PROPER("require");
2766 if (PL_op->op_type == OP_REQUIRE &&
2767 (svp = hv_fetch(GvHVn(PL_incgv), name, len, 0)) &&
2768 *svp != &PL_sv_undef)
2771 /* prepare to compile file */
2776 (name[1] == '.' && name[2] == '/')))
2778 || (name[0] && name[1] == ':')
2781 || (name[0] == '\\' && name[1] == '\\') /* UNC path */
2784 || (strchr(name,':') || ((*name == '[' || *name == '<') &&
2785 (isALNUM(name[1]) || strchr("$-_]>",name[1]))))
2790 tryrsfp = doopen_pmc(name,PERL_SCRIPT_MODE);
2793 AV *ar = GvAVn(PL_incgv);
2797 if ((unixname = tounixspec(name, Nullch)) != Nullch)
2800 namesv = NEWSV(806, 0);
2801 for (i = 0; i <= AvFILL(ar); i++) {
2802 SV *dirsv = *av_fetch(ar, i, TRUE);
2808 if (SvTYPE(SvRV(loader)) == SVt_PVAV) {
2809 loader = *av_fetch((AV *)SvRV(loader), 0, TRUE);
2812 Perl_sv_setpvf(aTHX_ namesv, "/loader/0x%lx/%s",
2813 SvANY(loader), name);
2814 tryname = SvPVX(namesv);
2825 count = call_sv(loader, G_ARRAY);
2835 if (SvROK(arg) && SvTYPE(SvRV(arg)) == SVt_PVGV) {
2839 if (SvTYPE(arg) == SVt_PVGV) {
2840 IO *io = GvIO((GV *)arg);
2845 tryrsfp = IoIFP(io);
2846 if (IoTYPE(io) == '|') {
2847 /* reading from a child process doesn't
2848 nest -- when returning from reading
2849 the inner module, the outer one is
2850 unreadable (closed?) I've tried to
2851 save the gv to manage the lifespan of
2852 the pipe, but this didn't help. XXX */
2853 filter_child_proc = (GV *)arg;
2854 (void)SvREFCNT_inc(filter_child_proc);
2857 if (IoOFP(io) && IoOFP(io) != IoIFP(io)) {
2858 PerlIO_close(IoOFP(io));
2870 if (SvROK(arg) && SvTYPE(SvRV(arg)) == SVt_PVCV) {
2872 (void)SvREFCNT_inc(filter_sub);
2875 filter_state = SP[i];
2876 (void)SvREFCNT_inc(filter_state);
2880 tryrsfp = PerlIO_open("/dev/null",
2894 filter_has_file = 0;
2895 if (filter_child_proc) {
2896 SvREFCNT_dec(filter_child_proc);
2897 filter_child_proc = 0;
2900 SvREFCNT_dec(filter_state);
2904 SvREFCNT_dec(filter_sub);
2909 char *dir = SvPVx(dirsv, n_a);
2912 if ((unixdir = tounixpath(dir, Nullch)) == Nullch)
2914 sv_setpv(namesv, unixdir);
2915 sv_catpv(namesv, unixname);
2917 Perl_sv_setpvf(aTHX_ namesv, "%s/%s", dir, name);
2919 TAINT_PROPER("require");
2920 tryname = SvPVX(namesv);
2921 tryrsfp = doopen_pmc(tryname, PERL_SCRIPT_MODE);
2923 if (tryname[0] == '.' && tryname[1] == '/')
2931 SAVESPTR(PL_compiling.cop_filegv);
2932 PL_compiling.cop_filegv = gv_fetchfile(tryrsfp ? tryname : name);
2933 SvREFCNT_dec(namesv);
2935 if (PL_op->op_type == OP_REQUIRE) {
2936 char *msgstr = name;
2937 if (namesv) { /* did we lookup @INC? */
2938 SV *msg = sv_2mortal(newSVpv(msgstr,0));
2939 SV *dirmsgsv = NEWSV(0, 0);
2940 AV *ar = GvAVn(PL_incgv);
2942 sv_catpvn(msg, " in @INC", 8);
2943 if (instr(SvPVX(msg), ".h "))
2944 sv_catpv(msg, " (change .h to .ph maybe?)");
2945 if (instr(SvPVX(msg), ".ph "))
2946 sv_catpv(msg, " (did you run h2ph?)");
2947 sv_catpv(msg, " (@INC contains:");
2948 for (i = 0; i <= AvFILL(ar); i++) {
2949 char *dir = SvPVx(*av_fetch(ar, i, TRUE), n_a);
2950 Perl_sv_setpvf(aTHX_ dirmsgsv, " %s", dir);
2951 sv_catsv(msg, dirmsgsv);
2953 sv_catpvn(msg, ")", 1);
2954 SvREFCNT_dec(dirmsgsv);
2955 msgstr = SvPV_nolen(msg);
2957 DIE(aTHX_ "Can't locate %s", msgstr);
2963 SETERRNO(0, SS$_NORMAL);
2965 /* Assume success here to prevent recursive requirement. */
2966 (void)hv_store(GvHVn(PL_incgv), name, strlen(name),
2967 newSVsv(GvSV(PL_compiling.cop_filegv)), 0 );
2971 lex_start(sv_2mortal(newSVpvn("",0)));
2972 SAVEGENERICSV(PL_rsfp_filters);
2973 PL_rsfp_filters = Nullav;
2976 name = savepv(name);
2980 SAVEPPTR(PL_compiling.cop_warnings);
2981 if (PL_dowarn & G_WARN_ALL_ON)
2982 PL_compiling.cop_warnings = WARN_ALL ;
2983 else if (PL_dowarn & G_WARN_ALL_OFF)
2984 PL_compiling.cop_warnings = WARN_NONE ;
2986 PL_compiling.cop_warnings = WARN_STD ;
2988 if (filter_sub || filter_child_proc) {
2989 SV *datasv = filter_add(run_user_filter, Nullsv);
2990 IoLINES(datasv) = filter_has_file;
2991 IoFMT_GV(datasv) = (GV *)filter_child_proc;
2992 IoTOP_GV(datasv) = (GV *)filter_state;
2993 IoBOTTOM_GV(datasv) = (GV *)filter_sub;
2996 /* switch to eval mode */
2997 push_return(PL_op->op_next);
2998 PUSHBLOCK(cx, CXt_EVAL, SP);
2999 PUSHEVAL(cx, name, PL_compiling.cop_filegv);
3001 SAVEI16(PL_compiling.cop_line);
3002 PL_compiling.cop_line = 0;
3006 MUTEX_LOCK(&PL_eval_mutex);
3007 if (PL_eval_owner && PL_eval_owner != thr)
3008 while (PL_eval_owner)
3009 COND_WAIT(&PL_eval_cond, &PL_eval_mutex);
3010 PL_eval_owner = thr;
3011 MUTEX_UNLOCK(&PL_eval_mutex);
3012 #endif /* USE_THREADS */
3013 return DOCATCH(doeval(G_SCALAR, NULL));
3018 return pp_require();
3024 register PERL_CONTEXT *cx;
3026 I32 gimme = GIMME_V, was = PL_sub_generation;
3027 char tmpbuf[TYPE_DIGITS(long) + 12];
3032 if (!SvPV(sv,len) || !len)
3034 TAINT_PROPER("eval");
3040 /* switch to eval mode */
3042 SAVESPTR(PL_compiling.cop_filegv);
3043 sprintf(tmpbuf, "_<(eval %lu)", (unsigned long)++PL_evalseq);
3044 PL_compiling.cop_filegv = gv_fetchfile(tmpbuf+2);
3045 PL_compiling.cop_line = 1;
3046 /* XXX For C<eval "...">s within BEGIN {} blocks, this ends up
3047 deleting the eval's FILEGV from the stash before gv_check() runs
3048 (i.e. before run-time proper). To work around the coredump that
3049 ensues, we always turn GvMULTI_on for any globals that were
3050 introduced within evals. See force_ident(). GSAR 96-10-12 */
3051 safestr = savepv(tmpbuf);
3052 SAVEDELETE(PL_defstash, safestr, strlen(safestr));
3054 PL_hints = PL_op->op_targ;
3055 SAVEPPTR(PL_compiling.cop_warnings);
3056 if (!specialWARN(PL_compiling.cop_warnings)) {
3057 PL_compiling.cop_warnings = newSVsv(PL_compiling.cop_warnings) ;
3058 SAVEFREESV(PL_compiling.cop_warnings) ;
3061 push_return(PL_op->op_next);
3062 PUSHBLOCK(cx, (CXt_EVAL|CXp_REAL), SP);
3063 PUSHEVAL(cx, 0, PL_compiling.cop_filegv);
3065 /* prepare to compile string */
3067 if (PERLDB_LINE && PL_curstash != PL_debstash)
3068 save_lines(GvAV(PL_compiling.cop_filegv), PL_linestr);
3071 MUTEX_LOCK(&PL_eval_mutex);
3072 if (PL_eval_owner && PL_eval_owner != thr)
3073 while (PL_eval_owner)
3074 COND_WAIT(&PL_eval_cond, &PL_eval_mutex);
3075 PL_eval_owner = thr;
3076 MUTEX_UNLOCK(&PL_eval_mutex);
3077 #endif /* USE_THREADS */
3078 ret = doeval(gimme, NULL);
3079 if (PERLDB_INTER && was != PL_sub_generation /* Some subs defined here. */
3080 && ret != PL_op->op_next) { /* Successive compilation. */
3081 strcpy(safestr, "_<(eval )"); /* Anything fake and short. */
3083 return DOCATCH(ret);
3093 register PERL_CONTEXT *cx;
3095 U8 save_flags = PL_op -> op_flags;
3100 retop = pop_return();
3103 if (gimme == G_VOID)
3105 else if (gimme == G_SCALAR) {
3108 if (SvFLAGS(TOPs) & SVs_TEMP)
3111 *MARK = sv_mortalcopy(TOPs);
3115 *MARK = &PL_sv_undef;
3119 /* in case LEAVE wipes old return values */
3120 for (mark = newsp + 1; mark <= SP; mark++) {
3121 if (!(SvFLAGS(*mark) & SVs_TEMP)) {
3122 *mark = sv_mortalcopy(*mark);
3123 TAINT_NOT; /* Each item is independent */
3127 PL_curpm = newpm; /* Don't pop $1 et al till now */
3129 if (AvFILLp(PL_comppad_name) >= 0)
3133 assert(CvDEPTH(PL_compcv) == 1);
3135 CvDEPTH(PL_compcv) = 0;
3138 if (optype == OP_REQUIRE &&
3139 !(gimme == G_SCALAR ? SvTRUE(*SP) : SP > newsp))
3141 /* Unassume the success we assumed earlier. */
3142 char *name = cx->blk_eval.old_name;
3143 (void)hv_delete(GvHVn(PL_incgv), name, strlen(name), G_DISCARD);
3144 retop = Perl_die(aTHX_ "%s did not return a true value", name);
3145 /* die_where() did LEAVE, or we won't be here */
3149 if (!(save_flags & OPf_SPECIAL))
3159 register PERL_CONTEXT *cx;
3160 I32 gimme = GIMME_V;
3165 push_return(cLOGOP->op_other->op_next);
3166 PUSHBLOCK(cx, CXt_EVAL, SP);
3168 PL_eval_root = PL_op; /* Only needed so that goto works right. */
3170 PL_in_eval = EVAL_INEVAL;
3173 return DOCATCH(PL_op->op_next);
3183 register PERL_CONTEXT *cx;
3191 if (gimme == G_VOID)
3193 else if (gimme == G_SCALAR) {
3196 if (SvFLAGS(TOPs) & (SVs_PADTMP|SVs_TEMP))
3199 *MARK = sv_mortalcopy(TOPs);
3203 *MARK = &PL_sv_undef;
3208 /* in case LEAVE wipes old return values */
3209 for (mark = newsp + 1; mark <= SP; mark++) {
3210 if (!(SvFLAGS(*mark) & (SVs_PADTMP|SVs_TEMP))) {
3211 *mark = sv_mortalcopy(*mark);
3212 TAINT_NOT; /* Each item is independent */
3216 PL_curpm = newpm; /* Don't pop $1 et al till now */
3224 S_doparseform(pTHX_ SV *sv)
3227 register char *s = SvPV_force(sv, len);
3228 register char *send = s + len;
3229 register char *base;
3230 register I32 skipspaces = 0;
3233 bool postspace = FALSE;
3241 Perl_croak(aTHX_ "Null picture in formline");
3243 New(804, fops, (send - s)*3+10, U16); /* Almost certainly too long... */
3248 *fpc++ = FF_LINEMARK;
3249 noblank = repeat = FALSE;
3267 case ' ': case '\t':
3278 *fpc++ = FF_LITERAL;
3286 *fpc++ = skipspaces;
3290 *fpc++ = FF_NEWLINE;
3294 arg = fpc - linepc + 1;
3301 *fpc++ = FF_LINEMARK;
3302 noblank = repeat = FALSE;
3311 ischop = s[-1] == '^';
3317 arg = (s - base) - 1;
3319 *fpc++ = FF_LITERAL;
3328 *fpc++ = FF_LINEGLOB;
3330 else if (*s == '#' || (*s == '.' && s[1] == '#')) {
3331 arg = ischop ? 512 : 0;
3341 arg |= 256 + (s - f);
3343 *fpc++ = s - base; /* fieldsize for FETCH */
3344 *fpc++ = FF_DECIMAL;
3349 bool ismore = FALSE;
3352 while (*++s == '>') ;
3353 prespace = FF_SPACE;
3355 else if (*s == '|') {
3356 while (*++s == '|') ;
3357 prespace = FF_HALFSPACE;
3362 while (*++s == '<') ;
3365 if (*s == '.' && s[1] == '.' && s[2] == '.') {
3369 *fpc++ = s - base; /* fieldsize for FETCH */
3371 *fpc++ = ischop ? FF_CHECKCHOP : FF_CHECKNL;
3389 { /* need to jump to the next word */
3391 z = WORD_ALIGN - SvCUR(sv) % WORD_ALIGN;
3392 SvGROW(sv, SvCUR(sv) + z + arg * sizeof(U16) + 4);
3393 s = SvPVX(sv) + SvCUR(sv) + z;
3395 Copy(fops, s, arg, U16);
3397 sv_magic(sv, Nullsv, 'f', Nullch, 0);
3402 * The rest of this file was derived from source code contributed
3405 * NOTE: this code was derived from Tom Horsley's qsort replacement
3406 * and should not be confused with the original code.
3409 /* Copyright (C) Tom Horsley, 1997. All rights reserved.
3411 Permission granted to distribute under the same terms as perl which are
3414 This program is free software; you can redistribute it and/or modify
3415 it under the terms of either:
3417 a) the GNU General Public License as published by the Free
3418 Software Foundation; either version 1, or (at your option) any
3421 b) the "Artistic License" which comes with this Kit.
3423 Details on the perl license can be found in the perl source code which
3424 may be located via the www.perl.com web page.
3426 This is the most wonderfulest possible qsort I can come up with (and
3427 still be mostly portable) My (limited) tests indicate it consistently
3428 does about 20% fewer calls to compare than does the qsort in the Visual
3429 C++ library, other vendors may vary.
3431 Some of the ideas in here can be found in "Algorithms" by Sedgewick,
3432 others I invented myself (or more likely re-invented since they seemed
3433 pretty obvious once I watched the algorithm operate for a while).
3435 Most of this code was written while watching the Marlins sweep the Giants
3436 in the 1997 National League Playoffs - no Braves fans allowed to use this
3437 code (just kidding :-).
3439 I realize that if I wanted to be true to the perl tradition, the only
3440 comment in this file would be something like:
3442 ...they shuffled back towards the rear of the line. 'No, not at the
3443 rear!' the slave-driver shouted. 'Three files up. And stay there...
3445 However, I really needed to violate that tradition just so I could keep
3446 track of what happens myself, not to mention some poor fool trying to
3447 understand this years from now :-).
3450 /* ********************************************************** Configuration */
3452 #ifndef QSORT_ORDER_GUESS
3453 #define QSORT_ORDER_GUESS 2 /* Select doubling version of the netBSD trick */
3456 /* QSORT_MAX_STACK is the largest number of partitions that can be stacked up for
3457 future processing - a good max upper bound is log base 2 of memory size
3458 (32 on 32 bit machines, 64 on 64 bit machines, etc). In reality can
3459 safely be smaller than that since the program is taking up some space and
3460 most operating systems only let you grab some subset of contiguous
3461 memory (not to mention that you are normally sorting data larger than
3462 1 byte element size :-).
3464 #ifndef QSORT_MAX_STACK
3465 #define QSORT_MAX_STACK 32
3468 /* QSORT_BREAK_EVEN is the size of the largest partition we should insertion sort.
3469 Anything bigger and we use qsort. If you make this too small, the qsort
3470 will probably break (or become less efficient), because it doesn't expect
3471 the middle element of a partition to be the same as the right or left -
3472 you have been warned).
3474 #ifndef QSORT_BREAK_EVEN
3475 #define QSORT_BREAK_EVEN 6
3478 /* ************************************************************* Data Types */
3480 /* hold left and right index values of a partition waiting to be sorted (the
3481 partition includes both left and right - right is NOT one past the end or
3482 anything like that).
3484 struct partition_stack_entry {
3487 #ifdef QSORT_ORDER_GUESS
3488 int qsort_break_even;
3492 /* ******************************************************* Shorthand Macros */
3494 /* Note that these macros will be used from inside the qsort function where
3495 we happen to know that the variable 'elt_size' contains the size of an
3496 array element and the variable 'temp' points to enough space to hold a
3497 temp element and the variable 'array' points to the array being sorted
3498 and 'compare' is the pointer to the compare routine.
3500 Also note that there are very many highly architecture specific ways
3501 these might be sped up, but this is simply the most generally portable
3502 code I could think of.
3505 /* Return < 0 == 0 or > 0 as the value of elt1 is < elt2, == elt2, > elt2
3507 #define qsort_cmp(elt1, elt2) \
3508 ((*compare)(aTHXo_ array[elt1], array[elt2]))
3510 #ifdef QSORT_ORDER_GUESS
3511 #define QSORT_NOTICE_SWAP swapped++;
3513 #define QSORT_NOTICE_SWAP
3516 /* swaps contents of array elements elt1, elt2.
3518 #define qsort_swap(elt1, elt2) \
3521 temp = array[elt1]; \
3522 array[elt1] = array[elt2]; \
3523 array[elt2] = temp; \
3526 /* rotate contents of elt1, elt2, elt3 such that elt1 gets elt2, elt2 gets
3527 elt3 and elt3 gets elt1.
3529 #define qsort_rotate(elt1, elt2, elt3) \
3532 temp = array[elt1]; \
3533 array[elt1] = array[elt2]; \
3534 array[elt2] = array[elt3]; \
3535 array[elt3] = temp; \
3538 /* ************************************************************ Debug stuff */
3545 return; /* good place to set a breakpoint */
3548 #define qsort_assert(t) (void)( (t) || (break_here(), 0) )
3551 doqsort_all_asserts(
3555 int (*compare)(const void * elt1, const void * elt2),
3556 int pc_left, int pc_right, int u_left, int u_right)
3560 qsort_assert(pc_left <= pc_right);
3561 qsort_assert(u_right < pc_left);
3562 qsort_assert(pc_right < u_left);
3563 for (i = u_right + 1; i < pc_left; ++i) {
3564 qsort_assert(qsort_cmp(i, pc_left) < 0);
3566 for (i = pc_left; i < pc_right; ++i) {
3567 qsort_assert(qsort_cmp(i, pc_right) == 0);
3569 for (i = pc_right + 1; i < u_left; ++i) {
3570 qsort_assert(qsort_cmp(pc_right, i) < 0);
3574 #define qsort_all_asserts(PC_LEFT, PC_RIGHT, U_LEFT, U_RIGHT) \
3575 doqsort_all_asserts(array, num_elts, elt_size, compare, \
3576 PC_LEFT, PC_RIGHT, U_LEFT, U_RIGHT)
3580 #define qsort_assert(t) ((void)0)
3582 #define qsort_all_asserts(PC_LEFT, PC_RIGHT, U_LEFT, U_RIGHT) ((void)0)
3586 /* ****************************************************************** qsort */
3589 S_qsortsv(pTHX_ SV ** array, size_t num_elts, SVCOMPARE_t compare)
3593 struct partition_stack_entry partition_stack[QSORT_MAX_STACK];
3594 int next_stack_entry = 0;
3598 #ifdef QSORT_ORDER_GUESS
3599 int qsort_break_even;
3603 /* Make sure we actually have work to do.
3605 if (num_elts <= 1) {
3609 /* Setup the initial partition definition and fall into the sorting loop
3612 part_right = (int)(num_elts - 1);
3613 #ifdef QSORT_ORDER_GUESS
3614 qsort_break_even = QSORT_BREAK_EVEN;
3616 #define qsort_break_even QSORT_BREAK_EVEN
3619 if ((part_right - part_left) >= qsort_break_even) {
3620 /* OK, this is gonna get hairy, so lets try to document all the
3621 concepts and abbreviations and variables and what they keep
3624 pc: pivot chunk - the set of array elements we accumulate in the
3625 middle of the partition, all equal in value to the original
3626 pivot element selected. The pc is defined by:
3628 pc_left - the leftmost array index of the pc
3629 pc_right - the rightmost array index of the pc
3631 we start with pc_left == pc_right and only one element
3632 in the pivot chunk (but it can grow during the scan).
3634 u: uncompared elements - the set of elements in the partition
3635 we have not yet compared to the pivot value. There are two
3636 uncompared sets during the scan - one to the left of the pc
3637 and one to the right.
3639 u_right - the rightmost index of the left side's uncompared set
3640 u_left - the leftmost index of the right side's uncompared set
3642 The leftmost index of the left sides's uncompared set
3643 doesn't need its own variable because it is always defined
3644 by the leftmost edge of the whole partition (part_left). The
3645 same goes for the rightmost edge of the right partition
3648 We know there are no uncompared elements on the left once we
3649 get u_right < part_left and no uncompared elements on the
3650 right once u_left > part_right. When both these conditions
3651 are met, we have completed the scan of the partition.
3653 Any elements which are between the pivot chunk and the
3654 uncompared elements should be less than the pivot value on
3655 the left side and greater than the pivot value on the right
3656 side (in fact, the goal of the whole algorithm is to arrange
3657 for that to be true and make the groups of less-than and
3658 greater-then elements into new partitions to sort again).
3660 As you marvel at the complexity of the code and wonder why it
3661 has to be so confusing. Consider some of the things this level
3662 of confusion brings:
3664 Once I do a compare, I squeeze every ounce of juice out of it. I
3665 never do compare calls I don't have to do, and I certainly never
3668 I also never swap any elements unless I can prove there is a
3669 good reason. Many sort algorithms will swap a known value with
3670 an uncompared value just to get things in the right place (or
3671 avoid complexity :-), but that uncompared value, once it gets
3672 compared, may then have to be swapped again. A lot of the
3673 complexity of this code is due to the fact that it never swaps
3674 anything except compared values, and it only swaps them when the
3675 compare shows they are out of position.
3677 int pc_left, pc_right;
3678 int u_right, u_left;
3682 pc_left = ((part_left + part_right) / 2);
3684 u_right = pc_left - 1;
3685 u_left = pc_right + 1;
3687 /* Qsort works best when the pivot value is also the median value
3688 in the partition (unfortunately you can't find the median value
3689 without first sorting :-), so to give the algorithm a helping
3690 hand, we pick 3 elements and sort them and use the median value
3691 of that tiny set as the pivot value.
3693 Some versions of qsort like to use the left middle and right as
3694 the 3 elements to sort so they can insure the ends of the
3695 partition will contain values which will stop the scan in the
3696 compare loop, but when you have to call an arbitrarily complex
3697 routine to do a compare, its really better to just keep track of
3698 array index values to know when you hit the edge of the
3699 partition and avoid the extra compare. An even better reason to
3700 avoid using a compare call is the fact that you can drop off the
3701 edge of the array if someone foolishly provides you with an
3702 unstable compare function that doesn't always provide consistent
3705 So, since it is simpler for us to compare the three adjacent
3706 elements in the middle of the partition, those are the ones we
3707 pick here (conveniently pointed at by u_right, pc_left, and
3708 u_left). The values of the left, center, and right elements
3709 are refered to as l c and r in the following comments.
3712 #ifdef QSORT_ORDER_GUESS
3715 s = qsort_cmp(u_right, pc_left);
3718 s = qsort_cmp(pc_left, u_left);
3719 /* if l < c, c < r - already in order - nothing to do */
3721 /* l < c, c == r - already in order, pc grows */
3723 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3725 /* l < c, c > r - need to know more */
3726 s = qsort_cmp(u_right, u_left);
3728 /* l < c, c > r, l < r - swap c & r to get ordered */
3729 qsort_swap(pc_left, u_left);
3730 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3731 } else if (s == 0) {
3732 /* l < c, c > r, l == r - swap c&r, grow pc */
3733 qsort_swap(pc_left, u_left);
3735 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3737 /* l < c, c > r, l > r - make lcr into rlc to get ordered */
3738 qsort_rotate(pc_left, u_right, u_left);
3739 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3742 } else if (s == 0) {
3744 s = qsort_cmp(pc_left, u_left);
3746 /* l == c, c < r - already in order, grow pc */
3748 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3749 } else if (s == 0) {
3750 /* l == c, c == r - already in order, grow pc both ways */
3753 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3755 /* l == c, c > r - swap l & r, grow pc */
3756 qsort_swap(u_right, u_left);
3758 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3762 s = qsort_cmp(pc_left, u_left);
3764 /* l > c, c < r - need to know more */
3765 s = qsort_cmp(u_right, u_left);
3767 /* l > c, c < r, l < r - swap l & c to get ordered */
3768 qsort_swap(u_right, pc_left);
3769 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3770 } else if (s == 0) {
3771 /* l > c, c < r, l == r - swap l & c, grow pc */
3772 qsort_swap(u_right, pc_left);
3774 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3776 /* l > c, c < r, l > r - rotate lcr into crl to order */
3777 qsort_rotate(u_right, pc_left, u_left);
3778 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3780 } else if (s == 0) {
3781 /* l > c, c == r - swap ends, grow pc */
3782 qsort_swap(u_right, u_left);
3784 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3786 /* l > c, c > r - swap ends to get in order */
3787 qsort_swap(u_right, u_left);
3788 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3791 /* We now know the 3 middle elements have been compared and
3792 arranged in the desired order, so we can shrink the uncompared
3797 qsort_all_asserts(pc_left, pc_right, u_left, u_right);
3799 /* The above massive nested if was the simple part :-). We now have
3800 the middle 3 elements ordered and we need to scan through the
3801 uncompared sets on either side, swapping elements that are on
3802 the wrong side or simply shuffling equal elements around to get
3803 all equal elements into the pivot chunk.
3807 int still_work_on_left;
3808 int still_work_on_right;
3810 /* Scan the uncompared values on the left. If I find a value
3811 equal to the pivot value, move it over so it is adjacent to
3812 the pivot chunk and expand the pivot chunk. If I find a value
3813 less than the pivot value, then just leave it - its already
3814 on the correct side of the partition. If I find a greater
3815 value, then stop the scan.
3817 while (still_work_on_left = (u_right >= part_left)) {
3818 s = qsort_cmp(u_right, pc_left);
3821 } else if (s == 0) {
3823 if (pc_left != u_right) {
3824 qsort_swap(u_right, pc_left);
3830 qsort_assert(u_right < pc_left);
3831 qsort_assert(pc_left <= pc_right);
3832 qsort_assert(qsort_cmp(u_right + 1, pc_left) <= 0);
3833 qsort_assert(qsort_cmp(pc_left, pc_right) == 0);
3836 /* Do a mirror image scan of uncompared values on the right
3838 while (still_work_on_right = (u_left <= part_right)) {
3839 s = qsort_cmp(pc_right, u_left);
3842 } else if (s == 0) {
3844 if (pc_right != u_left) {
3845 qsort_swap(pc_right, u_left);
3851 qsort_assert(u_left > pc_right);
3852 qsort_assert(pc_left <= pc_right);
3853 qsort_assert(qsort_cmp(pc_right, u_left - 1) <= 0);
3854 qsort_assert(qsort_cmp(pc_left, pc_right) == 0);
3857 if (still_work_on_left) {
3858 /* I know I have a value on the left side which needs to be
3859 on the right side, but I need to know more to decide
3860 exactly the best thing to do with it.
3862 if (still_work_on_right) {
3863 /* I know I have values on both side which are out of
3864 position. This is a big win because I kill two birds
3865 with one swap (so to speak). I can advance the
3866 uncompared pointers on both sides after swapping both
3867 of them into the right place.
3869 qsort_swap(u_right, u_left);
3872 qsort_all_asserts(pc_left, pc_right, u_left, u_right);
3874 /* I have an out of position value on the left, but the
3875 right is fully scanned, so I "slide" the pivot chunk
3876 and any less-than values left one to make room for the
3877 greater value over on the right. If the out of position
3878 value is immediately adjacent to the pivot chunk (there
3879 are no less-than values), I can do that with a swap,
3880 otherwise, I have to rotate one of the less than values
3881 into the former position of the out of position value
3882 and the right end of the pivot chunk into the left end
3886 if (pc_left == u_right) {
3887 qsort_swap(u_right, pc_right);
3888 qsort_all_asserts(pc_left, pc_right-1, u_left, u_right-1);
3890 qsort_rotate(u_right, pc_left, pc_right);
3891 qsort_all_asserts(pc_left, pc_right-1, u_left, u_right-1);
3896 } else if (still_work_on_right) {
3897 /* Mirror image of complex case above: I have an out of
3898 position value on the right, but the left is fully
3899 scanned, so I need to shuffle things around to make room
3900 for the right value on the left.
3903 if (pc_right == u_left) {
3904 qsort_swap(u_left, pc_left);
3905 qsort_all_asserts(pc_left+1, pc_right, u_left+1, u_right);
3907 qsort_rotate(pc_right, pc_left, u_left);
3908 qsort_all_asserts(pc_left+1, pc_right, u_left+1, u_right);
3913 /* No more scanning required on either side of partition,
3914 break out of loop and figure out next set of partitions
3920 /* The elements in the pivot chunk are now in the right place. They
3921 will never move or be compared again. All I have to do is decide
3922 what to do with the stuff to the left and right of the pivot
3925 Notes on the QSORT_ORDER_GUESS ifdef code:
3927 1. If I just built these partitions without swapping any (or
3928 very many) elements, there is a chance that the elements are
3929 already ordered properly (being properly ordered will
3930 certainly result in no swapping, but the converse can't be
3933 2. A (properly written) insertion sort will run faster on
3934 already ordered data than qsort will.
3936 3. Perhaps there is some way to make a good guess about
3937 switching to an insertion sort earlier than partition size 6
3938 (for instance - we could save the partition size on the stack
3939 and increase the size each time we find we didn't swap, thus
3940 switching to insertion sort earlier for partitions with a
3941 history of not swapping).
3943 4. Naturally, if I just switch right away, it will make
3944 artificial benchmarks with pure ascending (or descending)
3945 data look really good, but is that a good reason in general?
3949 #ifdef QSORT_ORDER_GUESS
3951 #if QSORT_ORDER_GUESS == 1
3952 qsort_break_even = (part_right - part_left) + 1;
3954 #if QSORT_ORDER_GUESS == 2
3955 qsort_break_even *= 2;
3957 #if QSORT_ORDER_GUESS == 3
3958 int prev_break = qsort_break_even;
3959 qsort_break_even *= qsort_break_even;
3960 if (qsort_break_even < prev_break) {
3961 qsort_break_even = (part_right - part_left) + 1;
3965 qsort_break_even = QSORT_BREAK_EVEN;
3969 if (part_left < pc_left) {
3970 /* There are elements on the left which need more processing.
3971 Check the right as well before deciding what to do.
3973 if (pc_right < part_right) {
3974 /* We have two partitions to be sorted. Stack the biggest one
3975 and process the smallest one on the next iteration. This
3976 minimizes the stack height by insuring that any additional
3977 stack entries must come from the smallest partition which
3978 (because it is smallest) will have the fewest
3979 opportunities to generate additional stack entries.
3981 if ((part_right - pc_right) > (pc_left - part_left)) {
3982 /* stack the right partition, process the left */
3983 partition_stack[next_stack_entry].left = pc_right + 1;
3984 partition_stack[next_stack_entry].right = part_right;
3985 #ifdef QSORT_ORDER_GUESS
3986 partition_stack[next_stack_entry].qsort_break_even = qsort_break_even;
3988 part_right = pc_left - 1;
3990 /* stack the left partition, process the right */
3991 partition_stack[next_stack_entry].left = part_left;
3992 partition_stack[next_stack_entry].right = pc_left - 1;
3993 #ifdef QSORT_ORDER_GUESS
3994 partition_stack[next_stack_entry].qsort_break_even = qsort_break_even;
3996 part_left = pc_right + 1;
3998 qsort_assert(next_stack_entry < QSORT_MAX_STACK);
4001 /* The elements on the left are the only remaining elements
4002 that need sorting, arrange for them to be processed as the
4005 part_right = pc_left - 1;
4007 } else if (pc_right < part_right) {
4008 /* There is only one chunk on the right to be sorted, make it
4009 the new partition and loop back around.
4011 part_left = pc_right + 1;
4013 /* This whole partition wound up in the pivot chunk, so
4014 we need to get a new partition off the stack.
4016 if (next_stack_entry == 0) {
4017 /* the stack is empty - we are done */
4021 part_left = partition_stack[next_stack_entry].left;
4022 part_right = partition_stack[next_stack_entry].right;
4023 #ifdef QSORT_ORDER_GUESS
4024 qsort_break_even = partition_stack[next_stack_entry].qsort_break_even;
4028 /* This partition is too small to fool with qsort complexity, just
4029 do an ordinary insertion sort to minimize overhead.
4032 /* Assume 1st element is in right place already, and start checking
4033 at 2nd element to see where it should be inserted.
4035 for (i = part_left + 1; i <= part_right; ++i) {
4037 /* Scan (backwards - just in case 'i' is already in right place)
4038 through the elements already sorted to see if the ith element
4039 belongs ahead of one of them.
4041 for (j = i - 1; j >= part_left; --j) {
4042 if (qsort_cmp(i, j) >= 0) {
4043 /* i belongs right after j
4050 /* Looks like we really need to move some things
4054 for (k = i - 1; k >= j; --k)
4055 array[k + 1] = array[k];
4060 /* That partition is now sorted, grab the next one, or get out
4061 of the loop if there aren't any more.
4064 if (next_stack_entry == 0) {
4065 /* the stack is empty - we are done */
4069 part_left = partition_stack[next_stack_entry].left;
4070 part_right = partition_stack[next_stack_entry].right;
4071 #ifdef QSORT_ORDER_GUESS
4072 qsort_break_even = partition_stack[next_stack_entry].qsort_break_even;
4077 /* Believe it or not, the array is sorted at this point! */
4090 sortcv(pTHXo_ SV *a, SV *b)
4093 I32 oldsaveix = PL_savestack_ix;
4094 I32 oldscopeix = PL_scopestack_ix;
4096 GvSV(PL_firstgv) = a;
4097 GvSV(PL_secondgv) = b;
4098 PL_stack_sp = PL_stack_base;
4101 if (PL_stack_sp != PL_stack_base + 1)
4102 Perl_croak(aTHX_ "Sort subroutine didn't return single value");
4103 if (!SvNIOKp(*PL_stack_sp))
4104 Perl_croak(aTHX_ "Sort subroutine didn't return a numeric value");
4105 result = SvIV(*PL_stack_sp);
4106 while (PL_scopestack_ix > oldscopeix) {
4109 leave_scope(oldsaveix);
4115 sv_ncmp(pTHXo_ SV *a, SV *b)
4119 return nv1 < nv2 ? -1 : nv1 > nv2 ? 1 : 0;
4123 sv_i_ncmp(pTHXo_ SV *a, SV *b)
4127 return iv1 < iv2 ? -1 : iv1 > iv2 ? 1 : 0;
4129 #define tryCALL_AMAGICbin(left,right,meth,svp) STMT_START { \
4131 if (PL_amagic_generation) { \
4132 if (SvAMAGIC(left)||SvAMAGIC(right))\
4133 *svp = amagic_call(left, \
4141 amagic_ncmp(pTHXo_ register SV *a, register SV *b)
4144 tryCALL_AMAGICbin(a,b,ncmp,&tmpsv);
4149 I32 i = SvIVX(tmpsv);
4159 return sv_ncmp(aTHXo_ a, b);
4163 amagic_i_ncmp(pTHXo_ register SV *a, register SV *b)
4166 tryCALL_AMAGICbin(a,b,ncmp,&tmpsv);
4171 I32 i = SvIVX(tmpsv);
4181 return sv_i_ncmp(aTHXo_ a, b);
4185 amagic_cmp(pTHXo_ register SV *str1, register SV *str2)
4188 tryCALL_AMAGICbin(str1,str2,scmp,&tmpsv);
4193 I32 i = SvIVX(tmpsv);
4203 return sv_cmp(str1, str2);
4207 amagic_cmp_locale(pTHXo_ register SV *str1, register SV *str2)
4210 tryCALL_AMAGICbin(str1,str2,scmp,&tmpsv);
4215 I32 i = SvIVX(tmpsv);
4225 return sv_cmp_locale(str1, str2);
4229 run_user_filter(pTHXo_ int idx, SV *buf_sv, int maxlen)
4231 SV *datasv = FILTER_DATA(idx);
4232 int filter_has_file = IoLINES(datasv);
4233 GV *filter_child_proc = (GV *)IoFMT_GV(datasv);
4234 SV *filter_state = (SV *)IoTOP_GV(datasv);
4235 SV *filter_sub = (SV *)IoBOTTOM_GV(datasv);
4238 /* I was having segfault trouble under Linux 2.2.5 after a
4239 parse error occured. (Had to hack around it with a test
4240 for PL_error_count == 0.) Solaris doesn't segfault --
4241 not sure where the trouble is yet. XXX */
4243 if (filter_has_file) {
4244 len = FILTER_READ(idx+1, buf_sv, maxlen);
4247 if (filter_sub && len >= 0) {
4258 PUSHs(sv_2mortal(newSViv(maxlen)));
4260 PUSHs(filter_state);
4263 count = call_sv(filter_sub, G_SCALAR);
4279 IoLINES(datasv) = 0;
4280 if (filter_child_proc) {
4281 SvREFCNT_dec(filter_child_proc);
4282 IoFMT_GV(datasv) = Nullgv;
4285 SvREFCNT_dec(filter_state);
4286 IoTOP_GV(datasv) = Nullgv;
4289 SvREFCNT_dec(filter_sub);
4290 IoBOTTOM_GV(datasv) = Nullgv;
4292 filter_del(run_user_filter);
4301 sv_cmp_locale_static(pTHXo_ register SV *str1, register SV *str2)
4303 return sv_cmp_locale(str1, str2);
4307 sv_cmp_static(pTHXo_ register SV *str1, register SV *str2)
4309 return sv_cmp(str1, str2);
4312 #endif /* PERL_OBJECT */