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 = CopSTASH(PL_curcop);
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 = CopSTASH(PL_curcop);
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 stashname = CopSTASHPV(cx->blk_oldcop);
1432 if (GIMME != G_ARRAY) {
1434 PUSHs(&PL_sv_undef);
1437 sv_setpv(TARG, stashname);
1444 PUSHs(&PL_sv_undef);
1446 PUSHs(sv_2mortal(newSVpv(stashname, 0)));
1447 PUSHs(sv_2mortal(newSVpv(CopFILE(cx->blk_oldcop), 0)));
1448 PUSHs(sv_2mortal(newSViv((I32)CopLINE(cx->blk_oldcop))));
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 && CopSTASH_eq(PL_curcop, 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, CopSTASH(PL_curcop));
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;
1705 if (PL_curstackinfo->si_type == PERLSI_SORT) {
1706 if (cxstack_ix == PL_sortcxix || dopoptosub(cxstack_ix) <= PL_sortcxix) {
1707 if (cxstack_ix > PL_sortcxix)
1708 dounwind(PL_sortcxix);
1709 AvARRAY(PL_curstack)[1] = *SP;
1710 PL_stack_sp = PL_stack_base + 1;
1715 cxix = dopoptosub(cxstack_ix);
1717 DIE(aTHX_ "Can't return outside a subroutine");
1718 if (cxix < cxstack_ix)
1722 switch (CxTYPE(cx)) {
1728 if (AvFILLp(PL_comppad_name) >= 0)
1731 if (optype == OP_REQUIRE &&
1732 (MARK == SP || (gimme == G_SCALAR && !SvTRUE(*SP))) )
1734 /* Unassume the success we assumed earlier. */
1735 char *name = cx->blk_eval.old_name;
1736 (void)hv_delete(GvHVn(PL_incgv), name, strlen(name), G_DISCARD);
1737 DIE(aTHX_ "%s did not return a true value", name);
1741 DIE(aTHX_ "panic: return");
1745 if (gimme == G_SCALAR) {
1748 if (cx->blk_sub.cv && CvDEPTH(cx->blk_sub.cv) > 1) {
1750 *++newsp = SvREFCNT_inc(*SP);
1755 *++newsp = sv_mortalcopy(*SP);
1758 *++newsp = (SvTEMP(*SP)) ? *SP : sv_mortalcopy(*SP);
1760 *++newsp = sv_mortalcopy(*SP);
1762 *++newsp = &PL_sv_undef;
1764 else if (gimme == G_ARRAY) {
1765 while (++MARK <= SP) {
1766 *++newsp = (popsub2 && SvTEMP(*MARK))
1767 ? *MARK : sv_mortalcopy(*MARK);
1768 TAINT_NOT; /* Each item is independent */
1771 PL_stack_sp = newsp;
1773 /* Stack values are safe: */
1775 POPSUB(cx,sv); /* release CV and @_ ... */
1779 PL_curpm = newpm; /* ... and pop $1 et al */
1783 return pop_return();
1790 register PERL_CONTEXT *cx;
1800 if (PL_op->op_flags & OPf_SPECIAL) {
1801 cxix = dopoptoloop(cxstack_ix);
1803 DIE(aTHX_ "Can't \"last\" outside a block");
1806 cxix = dopoptolabel(cPVOP->op_pv);
1808 DIE(aTHX_ "Label not found for \"last %s\"", cPVOP->op_pv);
1810 if (cxix < cxstack_ix)
1815 switch (CxTYPE(cx)) {
1818 newsp = PL_stack_base + cx->blk_loop.resetsp;
1819 nextop = cx->blk_loop.last_op->op_next;
1823 nextop = pop_return();
1827 nextop = pop_return();
1830 DIE(aTHX_ "panic: last");
1834 if (gimme == G_SCALAR) {
1836 *++newsp = ((pop2 == CXt_SUB) && SvTEMP(*SP))
1837 ? *SP : sv_mortalcopy(*SP);
1839 *++newsp = &PL_sv_undef;
1841 else if (gimme == G_ARRAY) {
1842 while (++MARK <= SP) {
1843 *++newsp = ((pop2 == CXt_SUB) && SvTEMP(*MARK))
1844 ? *MARK : sv_mortalcopy(*MARK);
1845 TAINT_NOT; /* Each item is independent */
1851 /* Stack values are safe: */
1854 POPLOOP(cx); /* release loop vars ... */
1858 POPSUB(cx,sv); /* release CV and @_ ... */
1861 PL_curpm = newpm; /* ... and pop $1 et al */
1871 register PERL_CONTEXT *cx;
1874 if (PL_op->op_flags & OPf_SPECIAL) {
1875 cxix = dopoptoloop(cxstack_ix);
1877 DIE(aTHX_ "Can't \"next\" outside a block");
1880 cxix = dopoptolabel(cPVOP->op_pv);
1882 DIE(aTHX_ "Label not found for \"next %s\"", cPVOP->op_pv);
1884 if (cxix < cxstack_ix)
1888 oldsave = PL_scopestack[PL_scopestack_ix - 1];
1889 LEAVE_SCOPE(oldsave);
1890 return cx->blk_loop.next_op;
1896 register PERL_CONTEXT *cx;
1899 if (PL_op->op_flags & OPf_SPECIAL) {
1900 cxix = dopoptoloop(cxstack_ix);
1902 DIE(aTHX_ "Can't \"redo\" outside a block");
1905 cxix = dopoptolabel(cPVOP->op_pv);
1907 DIE(aTHX_ "Label not found for \"redo %s\"", cPVOP->op_pv);
1909 if (cxix < cxstack_ix)
1913 oldsave = PL_scopestack[PL_scopestack_ix - 1];
1914 LEAVE_SCOPE(oldsave);
1915 return cx->blk_loop.redo_op;
1919 S_dofindlabel(pTHX_ OP *o, char *label, OP **opstack, OP **oplimit)
1923 static char too_deep[] = "Target of goto is too deeply nested";
1926 Perl_croak(aTHX_ too_deep);
1927 if (o->op_type == OP_LEAVE ||
1928 o->op_type == OP_SCOPE ||
1929 o->op_type == OP_LEAVELOOP ||
1930 o->op_type == OP_LEAVETRY)
1932 *ops++ = cUNOPo->op_first;
1934 Perl_croak(aTHX_ too_deep);
1937 if (o->op_flags & OPf_KIDS) {
1939 /* First try all the kids at this level, since that's likeliest. */
1940 for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling) {
1941 if ((kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) &&
1942 kCOP->cop_label && strEQ(kCOP->cop_label, label))
1945 for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling) {
1946 if (kid == PL_lastgotoprobe)
1948 if ((kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) &&
1950 (ops[-1]->op_type != OP_NEXTSTATE &&
1951 ops[-1]->op_type != OP_DBSTATE)))
1953 if (o = dofindlabel(kid, label, ops, oplimit))
1972 register PERL_CONTEXT *cx;
1973 #define GOTO_DEPTH 64
1974 OP *enterops[GOTO_DEPTH];
1976 int do_dump = (PL_op->op_type == OP_DUMP);
1977 static char must_have_label[] = "goto must have label";
1980 if (PL_op->op_flags & OPf_STACKED) {
1984 /* This egregious kludge implements goto &subroutine */
1985 if (SvROK(sv) && SvTYPE(SvRV(sv)) == SVt_PVCV) {
1987 register PERL_CONTEXT *cx;
1988 CV* cv = (CV*)SvRV(sv);
1994 if (!CvROOT(cv) && !CvXSUB(cv)) {
1999 /* autoloaded stub? */
2000 if (cv != GvCV(gv) && (cv = GvCV(gv)))
2002 autogv = gv_autoload4(GvSTASH(gv), GvNAME(gv),
2003 GvNAMELEN(gv), FALSE);
2004 if (autogv && (cv = GvCV(autogv)))
2006 tmpstr = sv_newmortal();
2007 gv_efullname3(tmpstr, gv, Nullch);
2008 DIE(aTHX_ "Goto undefined subroutine &%s",SvPVX(tmpstr));
2010 DIE(aTHX_ "Goto undefined subroutine");
2013 /* First do some returnish stuff. */
2014 cxix = dopoptosub(cxstack_ix);
2016 DIE(aTHX_ "Can't goto subroutine outside a subroutine");
2017 if (cxix < cxstack_ix)
2020 if (CxTYPE(cx) == CXt_EVAL && cx->blk_eval.old_op_type == OP_ENTEREVAL)
2021 DIE(aTHX_ "Can't goto subroutine from an eval-string");
2023 if (CxTYPE(cx) == CXt_SUB && cx->blk_sub.hasargs) {
2024 /* put @_ back onto stack */
2025 AV* av = cx->blk_sub.argarray;
2027 items = AvFILLp(av) + 1;
2029 EXTEND(PL_stack_sp, items); /* @_ could have been extended. */
2030 Copy(AvARRAY(av), PL_stack_sp, items, SV*);
2031 PL_stack_sp += items;
2033 SvREFCNT_dec(GvAV(PL_defgv));
2034 GvAV(PL_defgv) = cx->blk_sub.savearray;
2035 #endif /* USE_THREADS */
2036 /* abandon @_ if it got reified */
2038 (void)sv_2mortal((SV*)av); /* delay until return */
2040 av_extend(av, items-1);
2041 AvFLAGS(av) = AVf_REIFY;
2042 PL_curpad[0] = (SV*)(cx->blk_sub.argarray = av);
2045 else if (CvXSUB(cv)) { /* put GvAV(defgv) back onto stack */
2049 av = (AV*)PL_curpad[0];
2051 av = GvAV(PL_defgv);
2053 items = AvFILLp(av) + 1;
2055 EXTEND(PL_stack_sp, items); /* @_ could have been extended. */
2056 Copy(AvARRAY(av), PL_stack_sp, items, SV*);
2057 PL_stack_sp += items;
2059 if (CxTYPE(cx) == CXt_SUB &&
2060 !(CvDEPTH(cx->blk_sub.cv) = cx->blk_sub.olddepth))
2061 SvREFCNT_dec(cx->blk_sub.cv);
2062 oldsave = PL_scopestack[PL_scopestack_ix - 1];
2063 LEAVE_SCOPE(oldsave);
2065 /* Now do some callish stuff. */
2068 #ifdef PERL_XSUB_OLDSTYLE
2069 if (CvOLDSTYLE(cv)) {
2070 I32 (*fp3)(int,int,int);
2075 fp3 = (I32(*)(int,int,int)))CvXSUB(cv;
2076 items = (*fp3)(CvXSUBANY(cv).any_i32,
2077 mark - PL_stack_base + 1,
2079 SP = PL_stack_base + items;
2082 #endif /* PERL_XSUB_OLDSTYLE */
2087 PL_stack_sp--; /* There is no cv arg. */
2088 /* Push a mark for the start of arglist */
2090 (void)(*CvXSUB(cv))(aTHXo_ cv);
2091 /* Pop the current context like a decent sub should */
2092 POPBLOCK(cx, PL_curpm);
2093 /* Do _not_ use PUTBACK, keep the XSUB's return stack! */
2096 return pop_return();
2099 AV* padlist = CvPADLIST(cv);
2100 SV** svp = AvARRAY(padlist);
2101 if (CxTYPE(cx) == CXt_EVAL) {
2102 PL_in_eval = cx->blk_eval.old_in_eval;
2103 PL_eval_root = cx->blk_eval.old_eval_root;
2104 cx->cx_type = CXt_SUB;
2105 cx->blk_sub.hasargs = 0;
2107 cx->blk_sub.cv = cv;
2108 cx->blk_sub.olddepth = CvDEPTH(cv);
2110 if (CvDEPTH(cv) < 2)
2111 (void)SvREFCNT_inc(cv);
2112 else { /* save temporaries on recursion? */
2113 if (CvDEPTH(cv) == 100 && ckWARN(WARN_RECURSION))
2114 sub_crush_depth(cv);
2115 if (CvDEPTH(cv) > AvFILLp(padlist)) {
2116 AV *newpad = newAV();
2117 SV **oldpad = AvARRAY(svp[CvDEPTH(cv)-1]);
2118 I32 ix = AvFILLp((AV*)svp[1]);
2119 svp = AvARRAY(svp[0]);
2120 for ( ;ix > 0; ix--) {
2121 if (svp[ix] != &PL_sv_undef) {
2122 char *name = SvPVX(svp[ix]);
2123 if ((SvFLAGS(svp[ix]) & SVf_FAKE)
2126 /* outer lexical or anon code */
2127 av_store(newpad, ix,
2128 SvREFCNT_inc(oldpad[ix]) );
2130 else { /* our own lexical */
2132 av_store(newpad, ix, sv = (SV*)newAV());
2133 else if (*name == '%')
2134 av_store(newpad, ix, sv = (SV*)newHV());
2136 av_store(newpad, ix, sv = NEWSV(0,0));
2140 else if (IS_PADGV(oldpad[ix])) {
2141 av_store(newpad, ix, sv = SvREFCNT_inc(oldpad[ix]));
2144 av_store(newpad, ix, sv = NEWSV(0,0));
2148 if (cx->blk_sub.hasargs) {
2151 av_store(newpad, 0, (SV*)av);
2152 AvFLAGS(av) = AVf_REIFY;
2154 av_store(padlist, CvDEPTH(cv), (SV*)newpad);
2155 AvFILLp(padlist) = CvDEPTH(cv);
2156 svp = AvARRAY(padlist);
2160 if (!cx->blk_sub.hasargs) {
2161 AV* av = (AV*)PL_curpad[0];
2163 items = AvFILLp(av) + 1;
2165 /* Mark is at the end of the stack. */
2167 Copy(AvARRAY(av), SP + 1, items, SV*);
2172 #endif /* USE_THREADS */
2173 SAVESPTR(PL_curpad);
2174 PL_curpad = AvARRAY((AV*)svp[CvDEPTH(cv)]);
2176 if (cx->blk_sub.hasargs)
2177 #endif /* USE_THREADS */
2179 AV* av = (AV*)PL_curpad[0];
2183 cx->blk_sub.savearray = GvAV(PL_defgv);
2184 GvAV(PL_defgv) = (AV*)SvREFCNT_inc(av);
2185 #endif /* USE_THREADS */
2186 cx->blk_sub.argarray = av;
2189 if (items >= AvMAX(av) + 1) {
2191 if (AvARRAY(av) != ary) {
2192 AvMAX(av) += AvARRAY(av) - AvALLOC(av);
2193 SvPVX(av) = (char*)ary;
2195 if (items >= AvMAX(av) + 1) {
2196 AvMAX(av) = items - 1;
2197 Renew(ary,items+1,SV*);
2199 SvPVX(av) = (char*)ary;
2202 Copy(mark,AvARRAY(av),items,SV*);
2203 AvFILLp(av) = items - 1;
2204 assert(!AvREAL(av));
2211 if (PERLDB_SUB) { /* Checking curstash breaks DProf. */
2213 * We do not care about using sv to call CV;
2214 * it's for informational purposes only.
2216 SV *sv = GvSV(PL_DBsub);
2219 if (PERLDB_SUB_NN) {
2220 SvIVX(sv) = PTR2IV(cv); /* Already upgraded, saved */
2223 gv_efullname3(sv, CvGV(cv), Nullch);
2226 && (gotocv = get_cv("DB::goto", FALSE)) ) {
2227 PUSHMARK( PL_stack_sp );
2228 call_sv((SV*)gotocv, G_SCALAR | G_NODEBUG);
2232 RETURNOP(CvSTART(cv));
2236 label = SvPV(sv,n_a);
2237 if (!(do_dump || *label))
2238 DIE(aTHX_ must_have_label);
2241 else if (PL_op->op_flags & OPf_SPECIAL) {
2243 DIE(aTHX_ must_have_label);
2246 label = cPVOP->op_pv;
2248 if (label && *label) {
2253 PL_lastgotoprobe = 0;
2255 for (ix = cxstack_ix; ix >= 0; ix--) {
2257 switch (CxTYPE(cx)) {
2259 gotoprobe = PL_eval_root; /* XXX not good for nested eval */
2262 gotoprobe = cx->blk_oldcop->op_sibling;
2268 gotoprobe = cx->blk_oldcop->op_sibling;
2270 gotoprobe = PL_main_root;
2273 if (CvDEPTH(cx->blk_sub.cv)) {
2274 gotoprobe = CvROOT(cx->blk_sub.cv);
2279 DIE(aTHX_ "Can't \"goto\" outside a block");
2282 DIE(aTHX_ "panic: goto");
2283 gotoprobe = PL_main_root;
2286 retop = dofindlabel(gotoprobe, label,
2287 enterops, enterops + GOTO_DEPTH);
2290 PL_lastgotoprobe = gotoprobe;
2293 DIE(aTHX_ "Can't find label %s", label);
2295 /* pop unwanted frames */
2297 if (ix < cxstack_ix) {
2304 oldsave = PL_scopestack[PL_scopestack_ix];
2305 LEAVE_SCOPE(oldsave);
2308 /* push wanted frames */
2310 if (*enterops && enterops[1]) {
2312 for (ix = 1; enterops[ix]; ix++) {
2313 PL_op = enterops[ix];
2314 /* Eventually we may want to stack the needed arguments
2315 * for each op. For now, we punt on the hard ones. */
2316 if (PL_op->op_type == OP_ENTERITER)
2317 DIE(aTHX_ "Can't \"goto\" into the middle of a foreach loop",
2319 CALL_FPTR(PL_op->op_ppaddr)(aTHX);
2327 if (!retop) retop = PL_main_start;
2329 PL_restartop = retop;
2330 PL_do_undump = TRUE;
2334 PL_restartop = 0; /* hmm, must be GNU unexec().. */
2335 PL_do_undump = FALSE;
2351 if (anum == 1 && VMSISH_EXIT)
2356 PUSHs(&PL_sv_undef);
2364 NV value = SvNVx(GvSV(cCOP->cop_gv));
2365 register I32 match = I_32(value);
2368 if (((NV)match) > value)
2369 --match; /* was fractional--truncate other way */
2371 match -= cCOP->uop.scop.scop_offset;
2374 else if (match > cCOP->uop.scop.scop_max)
2375 match = cCOP->uop.scop.scop_max;
2376 PL_op = cCOP->uop.scop.scop_next[match];
2386 PL_op = PL_op->op_next; /* can't assume anything */
2389 match = *(SvPVx(GvSV(cCOP->cop_gv), n_a)) & 255;
2390 match -= cCOP->uop.scop.scop_offset;
2393 else if (match > cCOP->uop.scop.scop_max)
2394 match = cCOP->uop.scop.scop_max;
2395 PL_op = cCOP->uop.scop.scop_next[match];
2404 S_save_lines(pTHX_ AV *array, SV *sv)
2406 register char *s = SvPVX(sv);
2407 register char *send = SvPVX(sv) + SvCUR(sv);
2409 register I32 line = 1;
2411 while (s && s < send) {
2412 SV *tmpstr = NEWSV(85,0);
2414 sv_upgrade(tmpstr, SVt_PVMG);
2415 t = strchr(s, '\n');
2421 sv_setpvn(tmpstr, s, t - s);
2422 av_store(array, line++, tmpstr);
2428 S_docatch_body(pTHX_ va_list args)
2435 S_docatch(pTHX_ OP *o)
2440 volatile PERL_SI *cursi = PL_curstackinfo;
2444 assert(CATCH_GET == TRUE);
2448 CALLPROTECT(aTHX_ pcur_env, &ret, MEMBER_TO_FPTR(S_docatch_body));
2453 if (PL_restartop && cursi == PL_curstackinfo) {
2454 PL_op = PL_restartop;
2469 Perl_sv_compile_2op(pTHX_ SV *sv, OP** startop, char *code, AV** avp)
2470 /* sv Text to convert to OP tree. */
2471 /* startop op_free() this to undo. */
2472 /* code Short string id of the caller. */
2474 dSP; /* Make POPBLOCK work. */
2477 I32 gimme = 0; /* SUSPECT - INITIALZE TO WHAT? NI-S */
2480 OP *oop = PL_op, *rop;
2481 char tmpbuf[TYPE_DIGITS(long) + 12 + 10];
2487 /* switch to eval mode */
2489 if (PL_curcop == &PL_compiling) {
2490 SAVECOPSTASH(&PL_compiling);
2491 CopSTASH_set(&PL_compiling, PL_curstash);
2493 SAVECOPFILE(&PL_compiling);
2494 SAVECOPLINE(&PL_compiling);
2495 sprintf(tmpbuf, "_<(%.10s_eval %lu)", code, (unsigned long)++PL_evalseq);
2496 CopFILE_set(&PL_compiling, tmpbuf+2);
2497 CopLINE_set(&PL_compiling, 1);
2498 /* XXX For C<eval "...">s within BEGIN {} blocks, this ends up
2499 deleting the eval's FILEGV from the stash before gv_check() runs
2500 (i.e. before run-time proper). To work around the coredump that
2501 ensues, we always turn GvMULTI_on for any globals that were
2502 introduced within evals. See force_ident(). GSAR 96-10-12 */
2503 safestr = savepv(tmpbuf);
2504 SAVEDELETE(PL_defstash, safestr, strlen(safestr));
2506 #ifdef OP_IN_REGISTER
2514 PL_op->op_type = OP_ENTEREVAL;
2515 PL_op->op_flags = 0; /* Avoid uninit warning. */
2516 PUSHBLOCK(cx, CXt_EVAL, SP);
2517 PUSHEVAL(cx, 0, Nullgv);
2518 rop = doeval(G_SCALAR, startop);
2519 POPBLOCK(cx,PL_curpm);
2522 (*startop)->op_type = OP_NULL;
2523 (*startop)->op_ppaddr = PL_ppaddr[OP_NULL];
2525 *avp = (AV*)SvREFCNT_inc(PL_comppad);
2527 if (PL_curcop == &PL_compiling)
2528 PL_compiling.op_private = PL_hints;
2529 #ifdef OP_IN_REGISTER
2535 /* With USE_THREADS, eval_owner must be held on entry to doeval */
2537 S_doeval(pTHX_ int gimme, OP** startop)
2545 PL_in_eval = EVAL_INEVAL;
2549 /* set up a scratch pad */
2552 SAVESPTR(PL_curpad);
2553 SAVESPTR(PL_comppad);
2554 SAVESPTR(PL_comppad_name);
2555 SAVEI32(PL_comppad_name_fill);
2556 SAVEI32(PL_min_intro_pending);
2557 SAVEI32(PL_max_intro_pending);
2560 for (i = cxstack_ix - 1; i >= 0; i--) {
2561 PERL_CONTEXT *cx = &cxstack[i];
2562 if (CxTYPE(cx) == CXt_EVAL)
2564 else if (CxTYPE(cx) == CXt_SUB) {
2565 caller = cx->blk_sub.cv;
2570 SAVESPTR(PL_compcv);
2571 PL_compcv = (CV*)NEWSV(1104,0);
2572 sv_upgrade((SV *)PL_compcv, SVt_PVCV);
2573 CvEVAL_on(PL_compcv);
2575 CvOWNER(PL_compcv) = 0;
2576 New(666, CvMUTEXP(PL_compcv), 1, perl_mutex);
2577 MUTEX_INIT(CvMUTEXP(PL_compcv));
2578 #endif /* USE_THREADS */
2580 PL_comppad = newAV();
2581 av_push(PL_comppad, Nullsv);
2582 PL_curpad = AvARRAY(PL_comppad);
2583 PL_comppad_name = newAV();
2584 PL_comppad_name_fill = 0;
2585 PL_min_intro_pending = 0;
2588 av_store(PL_comppad_name, 0, newSVpvn("@_", 2));
2589 PL_curpad[0] = (SV*)newAV();
2590 SvPADMY_on(PL_curpad[0]); /* XXX Needed? */
2591 #endif /* USE_THREADS */
2593 comppadlist = newAV();
2594 AvREAL_off(comppadlist);
2595 av_store(comppadlist, 0, (SV*)PL_comppad_name);
2596 av_store(comppadlist, 1, (SV*)PL_comppad);
2597 CvPADLIST(PL_compcv) = comppadlist;
2599 if (!saveop || saveop->op_type != OP_REQUIRE)
2600 CvOUTSIDE(PL_compcv) = (CV*)SvREFCNT_inc(caller);
2602 SAVEFREESV(PL_compcv);
2604 /* make sure we compile in the right package */
2606 if (CopSTASH_ne(PL_curcop, PL_curstash)) {
2607 SAVESPTR(PL_curstash);
2608 PL_curstash = CopSTASH(PL_curcop);
2610 SAVESPTR(PL_beginav);
2611 PL_beginav = newAV();
2612 SAVEFREESV(PL_beginav);
2614 /* try to compile it */
2616 PL_eval_root = Nullop;
2618 PL_curcop = &PL_compiling;
2619 PL_curcop->cop_arybase = 0;
2620 SvREFCNT_dec(PL_rs);
2621 PL_rs = newSVpvn("\n", 1);
2622 if (saveop && saveop->op_flags & OPf_SPECIAL)
2623 PL_in_eval |= EVAL_KEEPERR;
2626 if (yyparse() || PL_error_count || !PL_eval_root) {
2630 I32 optype = 0; /* Might be reset by POPEVAL. */
2635 op_free(PL_eval_root);
2636 PL_eval_root = Nullop;
2638 SP = PL_stack_base + POPMARK; /* pop original mark */
2640 POPBLOCK(cx,PL_curpm);
2646 if (optype == OP_REQUIRE) {
2647 char* msg = SvPVx(ERRSV, n_a);
2648 DIE(aTHX_ "%sCompilation failed in require",
2649 *msg ? msg : "Unknown error\n");
2652 char* msg = SvPVx(ERRSV, n_a);
2654 POPBLOCK(cx,PL_curpm);
2656 Perl_croak(aTHX_ "%sCompilation failed in regexp",
2657 (*msg ? msg : "Unknown error\n"));
2659 SvREFCNT_dec(PL_rs);
2660 PL_rs = SvREFCNT_inc(PL_nrs);
2662 MUTEX_LOCK(&PL_eval_mutex);
2664 COND_SIGNAL(&PL_eval_cond);
2665 MUTEX_UNLOCK(&PL_eval_mutex);
2666 #endif /* USE_THREADS */
2669 SvREFCNT_dec(PL_rs);
2670 PL_rs = SvREFCNT_inc(PL_nrs);
2671 CopLINE_set(&PL_compiling, 0);
2673 *startop = PL_eval_root;
2674 SvREFCNT_dec(CvOUTSIDE(PL_compcv));
2675 CvOUTSIDE(PL_compcv) = Nullcv;
2677 SAVEFREEOP(PL_eval_root);
2679 scalarvoid(PL_eval_root);
2680 else if (gimme & G_ARRAY)
2683 scalar(PL_eval_root);
2685 DEBUG_x(dump_eval());
2687 /* Register with debugger: */
2688 if (PERLDB_INTER && saveop->op_type == OP_REQUIRE) {
2689 CV *cv = get_cv("DB::postponed", FALSE);
2693 XPUSHs((SV*)CopFILEGV(&PL_compiling));
2695 call_sv((SV*)cv, G_DISCARD);
2699 /* compiled okay, so do it */
2701 CvDEPTH(PL_compcv) = 1;
2702 SP = PL_stack_base + POPMARK; /* pop original mark */
2703 PL_op = saveop; /* The caller may need it. */
2705 MUTEX_LOCK(&PL_eval_mutex);
2707 COND_SIGNAL(&PL_eval_cond);
2708 MUTEX_UNLOCK(&PL_eval_mutex);
2709 #endif /* USE_THREADS */
2711 RETURNOP(PL_eval_start);
2715 S_doopen_pmc(pTHX_ const char *name, const char *mode)
2717 STRLEN namelen = strlen(name);
2720 if (namelen > 3 && strEQ(name + namelen - 3, ".pm")) {
2721 SV *pmcsv = Perl_newSVpvf(aTHX_ "%s%c", name, 'c');
2722 char *pmc = SvPV_nolen(pmcsv);
2725 if (PerlLIO_stat(pmc, &pmcstat) < 0) {
2726 fp = PerlIO_open(name, mode);
2729 if (PerlLIO_stat(name, &pmstat) < 0 ||
2730 pmstat.st_mtime < pmcstat.st_mtime)
2732 fp = PerlIO_open(pmc, mode);
2735 fp = PerlIO_open(name, mode);
2738 SvREFCNT_dec(pmcsv);
2741 fp = PerlIO_open(name, mode);
2749 register PERL_CONTEXT *cx;
2754 SV *namesv = Nullsv;
2756 I32 gimme = G_SCALAR;
2757 PerlIO *tryrsfp = 0;
2759 int filter_has_file = 0;
2760 GV *filter_child_proc = 0;
2761 SV *filter_state = 0;
2765 if (SvNIOKp(sv) && !SvPOKp(sv)) {
2766 if (Atof(PL_patchlevel) + 0.00000999 < SvNV(sv))
2767 DIE(aTHX_ "Perl %s required--this is only version %s, stopped",
2768 SvPV(sv,n_a),PL_patchlevel);
2771 name = SvPV(sv, len);
2772 if (!(name && len > 0 && *name))
2773 DIE(aTHX_ "Null filename used");
2774 TAINT_PROPER("require");
2775 if (PL_op->op_type == OP_REQUIRE &&
2776 (svp = hv_fetch(GvHVn(PL_incgv), name, len, 0)) &&
2777 *svp != &PL_sv_undef)
2780 /* prepare to compile file */
2782 if (PERL_FILE_IS_ABSOLUTE(name)
2783 || (*name == '.' && (name[1] == '/' ||
2784 (name[1] == '.' && name[2] == '/'))))
2787 tryrsfp = doopen_pmc(name,PERL_SCRIPT_MODE);
2790 AV *ar = GvAVn(PL_incgv);
2794 if ((unixname = tounixspec(name, Nullch)) != Nullch)
2797 namesv = NEWSV(806, 0);
2798 for (i = 0; i <= AvFILL(ar); i++) {
2799 SV *dirsv = *av_fetch(ar, i, TRUE);
2805 if (SvTYPE(SvRV(loader)) == SVt_PVAV) {
2806 loader = *av_fetch((AV *)SvRV(loader), 0, TRUE);
2809 Perl_sv_setpvf(aTHX_ namesv, "/loader/0x%"UVxf"/%s",
2810 PTR2UV(SvANY(loader)), name);
2811 tryname = SvPVX(namesv);
2822 count = call_sv(loader, G_ARRAY);
2832 if (SvROK(arg) && SvTYPE(SvRV(arg)) == SVt_PVGV) {
2836 if (SvTYPE(arg) == SVt_PVGV) {
2837 IO *io = GvIO((GV *)arg);
2842 tryrsfp = IoIFP(io);
2843 if (IoTYPE(io) == '|') {
2844 /* reading from a child process doesn't
2845 nest -- when returning from reading
2846 the inner module, the outer one is
2847 unreadable (closed?) I've tried to
2848 save the gv to manage the lifespan of
2849 the pipe, but this didn't help. XXX */
2850 filter_child_proc = (GV *)arg;
2851 (void)SvREFCNT_inc(filter_child_proc);
2854 if (IoOFP(io) && IoOFP(io) != IoIFP(io)) {
2855 PerlIO_close(IoOFP(io));
2867 if (SvROK(arg) && SvTYPE(SvRV(arg)) == SVt_PVCV) {
2869 (void)SvREFCNT_inc(filter_sub);
2872 filter_state = SP[i];
2873 (void)SvREFCNT_inc(filter_state);
2877 tryrsfp = PerlIO_open("/dev/null",
2891 filter_has_file = 0;
2892 if (filter_child_proc) {
2893 SvREFCNT_dec(filter_child_proc);
2894 filter_child_proc = 0;
2897 SvREFCNT_dec(filter_state);
2901 SvREFCNT_dec(filter_sub);
2906 char *dir = SvPVx(dirsv, n_a);
2909 if ((unixdir = tounixpath(dir, Nullch)) == Nullch)
2911 sv_setpv(namesv, unixdir);
2912 sv_catpv(namesv, unixname);
2914 Perl_sv_setpvf(aTHX_ namesv, "%s/%s", dir, name);
2916 TAINT_PROPER("require");
2917 tryname = SvPVX(namesv);
2918 tryrsfp = doopen_pmc(tryname, PERL_SCRIPT_MODE);
2920 if (tryname[0] == '.' && tryname[1] == '/')
2928 SAVECOPFILE(&PL_compiling);
2929 CopFILE_set(&PL_compiling, tryrsfp ? tryname : name);
2930 SvREFCNT_dec(namesv);
2932 if (PL_op->op_type == OP_REQUIRE) {
2933 char *msgstr = name;
2934 if (namesv) { /* did we lookup @INC? */
2935 SV *msg = sv_2mortal(newSVpv(msgstr,0));
2936 SV *dirmsgsv = NEWSV(0, 0);
2937 AV *ar = GvAVn(PL_incgv);
2939 sv_catpvn(msg, " in @INC", 8);
2940 if (instr(SvPVX(msg), ".h "))
2941 sv_catpv(msg, " (change .h to .ph maybe?)");
2942 if (instr(SvPVX(msg), ".ph "))
2943 sv_catpv(msg, " (did you run h2ph?)");
2944 sv_catpv(msg, " (@INC contains:");
2945 for (i = 0; i <= AvFILL(ar); i++) {
2946 char *dir = SvPVx(*av_fetch(ar, i, TRUE), n_a);
2947 Perl_sv_setpvf(aTHX_ dirmsgsv, " %s", dir);
2948 sv_catsv(msg, dirmsgsv);
2950 sv_catpvn(msg, ")", 1);
2951 SvREFCNT_dec(dirmsgsv);
2952 msgstr = SvPV_nolen(msg);
2954 DIE(aTHX_ "Can't locate %s", msgstr);
2960 SETERRNO(0, SS$_NORMAL);
2962 /* Assume success here to prevent recursive requirement. */
2963 (void)hv_store(GvHVn(PL_incgv), name, strlen(name),
2964 newSVpv(CopFILE(&PL_compiling), 0), 0 );
2968 lex_start(sv_2mortal(newSVpvn("",0)));
2969 SAVEGENERICSV(PL_rsfp_filters);
2970 PL_rsfp_filters = Nullav;
2973 name = savepv(name);
2977 SAVEPPTR(PL_compiling.cop_warnings);
2978 if (PL_dowarn & G_WARN_ALL_ON)
2979 PL_compiling.cop_warnings = WARN_ALL ;
2980 else if (PL_dowarn & G_WARN_ALL_OFF)
2981 PL_compiling.cop_warnings = WARN_NONE ;
2983 PL_compiling.cop_warnings = WARN_STD ;
2985 if (filter_sub || filter_child_proc) {
2986 SV *datasv = filter_add(run_user_filter, Nullsv);
2987 IoLINES(datasv) = filter_has_file;
2988 IoFMT_GV(datasv) = (GV *)filter_child_proc;
2989 IoTOP_GV(datasv) = (GV *)filter_state;
2990 IoBOTTOM_GV(datasv) = (GV *)filter_sub;
2993 /* switch to eval mode */
2994 push_return(PL_op->op_next);
2995 PUSHBLOCK(cx, CXt_EVAL, SP);
2996 PUSHEVAL(cx, name, Nullgv);
2998 SAVECOPLINE(&PL_compiling);
2999 CopLINE_set(&PL_compiling, 0);
3003 MUTEX_LOCK(&PL_eval_mutex);
3004 if (PL_eval_owner && PL_eval_owner != thr)
3005 while (PL_eval_owner)
3006 COND_WAIT(&PL_eval_cond, &PL_eval_mutex);
3007 PL_eval_owner = thr;
3008 MUTEX_UNLOCK(&PL_eval_mutex);
3009 #endif /* USE_THREADS */
3010 return DOCATCH(doeval(G_SCALAR, NULL));
3015 return pp_require();
3021 register PERL_CONTEXT *cx;
3023 I32 gimme = GIMME_V, was = PL_sub_generation;
3024 char tmpbuf[TYPE_DIGITS(long) + 12];
3029 if (!SvPV(sv,len) || !len)
3031 TAINT_PROPER("eval");
3037 /* switch to eval mode */
3039 SAVECOPFILE(&PL_compiling);
3040 sprintf(tmpbuf, "_<(eval %lu)", (unsigned long)++PL_evalseq);
3041 CopFILE_set(&PL_compiling, tmpbuf+2);
3042 CopLINE_set(&PL_compiling, 1);
3043 /* XXX For C<eval "...">s within BEGIN {} blocks, this ends up
3044 deleting the eval's FILEGV from the stash before gv_check() runs
3045 (i.e. before run-time proper). To work around the coredump that
3046 ensues, we always turn GvMULTI_on for any globals that were
3047 introduced within evals. See force_ident(). GSAR 96-10-12 */
3048 safestr = savepv(tmpbuf);
3049 SAVEDELETE(PL_defstash, safestr, strlen(safestr));
3051 PL_hints = PL_op->op_targ;
3052 SAVEPPTR(PL_compiling.cop_warnings);
3053 if (!specialWARN(PL_compiling.cop_warnings)) {
3054 PL_compiling.cop_warnings = newSVsv(PL_compiling.cop_warnings) ;
3055 SAVEFREESV(PL_compiling.cop_warnings) ;
3058 push_return(PL_op->op_next);
3059 PUSHBLOCK(cx, (CXt_EVAL|CXp_REAL), SP);
3060 PUSHEVAL(cx, 0, Nullgv);
3062 /* prepare to compile string */
3064 if (PERLDB_LINE && PL_curstash != PL_debstash)
3065 save_lines(CopFILEAV(&PL_compiling), PL_linestr);
3068 MUTEX_LOCK(&PL_eval_mutex);
3069 if (PL_eval_owner && PL_eval_owner != thr)
3070 while (PL_eval_owner)
3071 COND_WAIT(&PL_eval_cond, &PL_eval_mutex);
3072 PL_eval_owner = thr;
3073 MUTEX_UNLOCK(&PL_eval_mutex);
3074 #endif /* USE_THREADS */
3075 ret = doeval(gimme, NULL);
3076 if (PERLDB_INTER && was != PL_sub_generation /* Some subs defined here. */
3077 && ret != PL_op->op_next) { /* Successive compilation. */
3078 strcpy(safestr, "_<(eval )"); /* Anything fake and short. */
3080 return DOCATCH(ret);
3090 register PERL_CONTEXT *cx;
3092 U8 save_flags = PL_op -> op_flags;
3097 retop = pop_return();
3100 if (gimme == G_VOID)
3102 else if (gimme == G_SCALAR) {
3105 if (SvFLAGS(TOPs) & SVs_TEMP)
3108 *MARK = sv_mortalcopy(TOPs);
3112 *MARK = &PL_sv_undef;
3117 /* in case LEAVE wipes old return values */
3118 for (mark = newsp + 1; mark <= SP; mark++) {
3119 if (!(SvFLAGS(*mark) & SVs_TEMP)) {
3120 *mark = sv_mortalcopy(*mark);
3121 TAINT_NOT; /* Each item is independent */
3125 PL_curpm = newpm; /* Don't pop $1 et al till now */
3127 if (AvFILLp(PL_comppad_name) >= 0)
3131 assert(CvDEPTH(PL_compcv) == 1);
3133 CvDEPTH(PL_compcv) = 0;
3136 if (optype == OP_REQUIRE &&
3137 !(gimme == G_SCALAR ? SvTRUE(*SP) : SP > newsp))
3139 /* Unassume the success we assumed earlier. */
3140 char *name = cx->blk_eval.old_name;
3141 (void)hv_delete(GvHVn(PL_incgv), name, strlen(name), G_DISCARD);
3142 retop = Perl_die(aTHX_ "%s did not return a true value", name);
3143 /* die_where() did LEAVE, or we won't be here */
3147 if (!(save_flags & OPf_SPECIAL))
3157 register PERL_CONTEXT *cx;
3158 I32 gimme = GIMME_V;
3163 push_return(cLOGOP->op_other->op_next);
3164 PUSHBLOCK(cx, CXt_EVAL, SP);
3166 PL_eval_root = PL_op; /* Only needed so that goto works right. */
3168 PL_in_eval = EVAL_INEVAL;
3171 return DOCATCH(PL_op->op_next);
3181 register PERL_CONTEXT *cx;
3189 if (gimme == G_VOID)
3191 else if (gimme == G_SCALAR) {
3194 if (SvFLAGS(TOPs) & (SVs_PADTMP|SVs_TEMP))
3197 *MARK = sv_mortalcopy(TOPs);
3201 *MARK = &PL_sv_undef;
3206 /* in case LEAVE wipes old return values */
3207 for (mark = newsp + 1; mark <= SP; mark++) {
3208 if (!(SvFLAGS(*mark) & (SVs_PADTMP|SVs_TEMP))) {
3209 *mark = sv_mortalcopy(*mark);
3210 TAINT_NOT; /* Each item is independent */
3214 PL_curpm = newpm; /* Don't pop $1 et al till now */
3222 S_doparseform(pTHX_ SV *sv)
3225 register char *s = SvPV_force(sv, len);
3226 register char *send = s + len;
3227 register char *base;
3228 register I32 skipspaces = 0;
3231 bool postspace = FALSE;
3239 Perl_croak(aTHX_ "Null picture in formline");
3241 New(804, fops, (send - s)*3+10, U16); /* Almost certainly too long... */
3246 *fpc++ = FF_LINEMARK;
3247 noblank = repeat = FALSE;
3265 case ' ': case '\t':
3276 *fpc++ = FF_LITERAL;
3284 *fpc++ = skipspaces;
3288 *fpc++ = FF_NEWLINE;
3292 arg = fpc - linepc + 1;
3299 *fpc++ = FF_LINEMARK;
3300 noblank = repeat = FALSE;
3309 ischop = s[-1] == '^';
3315 arg = (s - base) - 1;
3317 *fpc++ = FF_LITERAL;
3326 *fpc++ = FF_LINEGLOB;
3328 else if (*s == '#' || (*s == '.' && s[1] == '#')) {
3329 arg = ischop ? 512 : 0;
3339 arg |= 256 + (s - f);
3341 *fpc++ = s - base; /* fieldsize for FETCH */
3342 *fpc++ = FF_DECIMAL;
3347 bool ismore = FALSE;
3350 while (*++s == '>') ;
3351 prespace = FF_SPACE;
3353 else if (*s == '|') {
3354 while (*++s == '|') ;
3355 prespace = FF_HALFSPACE;
3360 while (*++s == '<') ;
3363 if (*s == '.' && s[1] == '.' && s[2] == '.') {
3367 *fpc++ = s - base; /* fieldsize for FETCH */
3369 *fpc++ = ischop ? FF_CHECKCHOP : FF_CHECKNL;
3387 { /* need to jump to the next word */
3389 z = WORD_ALIGN - SvCUR(sv) % WORD_ALIGN;
3390 SvGROW(sv, SvCUR(sv) + z + arg * sizeof(U16) + 4);
3391 s = SvPVX(sv) + SvCUR(sv) + z;
3393 Copy(fops, s, arg, U16);
3395 sv_magic(sv, Nullsv, 'f', Nullch, 0);
3400 * The rest of this file was derived from source code contributed
3403 * NOTE: this code was derived from Tom Horsley's qsort replacement
3404 * and should not be confused with the original code.
3407 /* Copyright (C) Tom Horsley, 1997. All rights reserved.
3409 Permission granted to distribute under the same terms as perl which are
3412 This program is free software; you can redistribute it and/or modify
3413 it under the terms of either:
3415 a) the GNU General Public License as published by the Free
3416 Software Foundation; either version 1, or (at your option) any
3419 b) the "Artistic License" which comes with this Kit.
3421 Details on the perl license can be found in the perl source code which
3422 may be located via the www.perl.com web page.
3424 This is the most wonderfulest possible qsort I can come up with (and
3425 still be mostly portable) My (limited) tests indicate it consistently
3426 does about 20% fewer calls to compare than does the qsort in the Visual
3427 C++ library, other vendors may vary.
3429 Some of the ideas in here can be found in "Algorithms" by Sedgewick,
3430 others I invented myself (or more likely re-invented since they seemed
3431 pretty obvious once I watched the algorithm operate for a while).
3433 Most of this code was written while watching the Marlins sweep the Giants
3434 in the 1997 National League Playoffs - no Braves fans allowed to use this
3435 code (just kidding :-).
3437 I realize that if I wanted to be true to the perl tradition, the only
3438 comment in this file would be something like:
3440 ...they shuffled back towards the rear of the line. 'No, not at the
3441 rear!' the slave-driver shouted. 'Three files up. And stay there...
3443 However, I really needed to violate that tradition just so I could keep
3444 track of what happens myself, not to mention some poor fool trying to
3445 understand this years from now :-).
3448 /* ********************************************************** Configuration */
3450 #ifndef QSORT_ORDER_GUESS
3451 #define QSORT_ORDER_GUESS 2 /* Select doubling version of the netBSD trick */
3454 /* QSORT_MAX_STACK is the largest number of partitions that can be stacked up for
3455 future processing - a good max upper bound is log base 2 of memory size
3456 (32 on 32 bit machines, 64 on 64 bit machines, etc). In reality can
3457 safely be smaller than that since the program is taking up some space and
3458 most operating systems only let you grab some subset of contiguous
3459 memory (not to mention that you are normally sorting data larger than
3460 1 byte element size :-).
3462 #ifndef QSORT_MAX_STACK
3463 #define QSORT_MAX_STACK 32
3466 /* QSORT_BREAK_EVEN is the size of the largest partition we should insertion sort.
3467 Anything bigger and we use qsort. If you make this too small, the qsort
3468 will probably break (or become less efficient), because it doesn't expect
3469 the middle element of a partition to be the same as the right or left -
3470 you have been warned).
3472 #ifndef QSORT_BREAK_EVEN
3473 #define QSORT_BREAK_EVEN 6
3476 /* ************************************************************* Data Types */
3478 /* hold left and right index values of a partition waiting to be sorted (the
3479 partition includes both left and right - right is NOT one past the end or
3480 anything like that).
3482 struct partition_stack_entry {
3485 #ifdef QSORT_ORDER_GUESS
3486 int qsort_break_even;
3490 /* ******************************************************* Shorthand Macros */
3492 /* Note that these macros will be used from inside the qsort function where
3493 we happen to know that the variable 'elt_size' contains the size of an
3494 array element and the variable 'temp' points to enough space to hold a
3495 temp element and the variable 'array' points to the array being sorted
3496 and 'compare' is the pointer to the compare routine.
3498 Also note that there are very many highly architecture specific ways
3499 these might be sped up, but this is simply the most generally portable
3500 code I could think of.
3503 /* Return < 0 == 0 or > 0 as the value of elt1 is < elt2, == elt2, > elt2
3505 #define qsort_cmp(elt1, elt2) \
3506 ((*compare)(aTHXo_ array[elt1], array[elt2]))
3508 #ifdef QSORT_ORDER_GUESS
3509 #define QSORT_NOTICE_SWAP swapped++;
3511 #define QSORT_NOTICE_SWAP
3514 /* swaps contents of array elements elt1, elt2.
3516 #define qsort_swap(elt1, elt2) \
3519 temp = array[elt1]; \
3520 array[elt1] = array[elt2]; \
3521 array[elt2] = temp; \
3524 /* rotate contents of elt1, elt2, elt3 such that elt1 gets elt2, elt2 gets
3525 elt3 and elt3 gets elt1.
3527 #define qsort_rotate(elt1, elt2, elt3) \
3530 temp = array[elt1]; \
3531 array[elt1] = array[elt2]; \
3532 array[elt2] = array[elt3]; \
3533 array[elt3] = temp; \
3536 /* ************************************************************ Debug stuff */
3543 return; /* good place to set a breakpoint */
3546 #define qsort_assert(t) (void)( (t) || (break_here(), 0) )
3549 doqsort_all_asserts(
3553 int (*compare)(const void * elt1, const void * elt2),
3554 int pc_left, int pc_right, int u_left, int u_right)
3558 qsort_assert(pc_left <= pc_right);
3559 qsort_assert(u_right < pc_left);
3560 qsort_assert(pc_right < u_left);
3561 for (i = u_right + 1; i < pc_left; ++i) {
3562 qsort_assert(qsort_cmp(i, pc_left) < 0);
3564 for (i = pc_left; i < pc_right; ++i) {
3565 qsort_assert(qsort_cmp(i, pc_right) == 0);
3567 for (i = pc_right + 1; i < u_left; ++i) {
3568 qsort_assert(qsort_cmp(pc_right, i) < 0);
3572 #define qsort_all_asserts(PC_LEFT, PC_RIGHT, U_LEFT, U_RIGHT) \
3573 doqsort_all_asserts(array, num_elts, elt_size, compare, \
3574 PC_LEFT, PC_RIGHT, U_LEFT, U_RIGHT)
3578 #define qsort_assert(t) ((void)0)
3580 #define qsort_all_asserts(PC_LEFT, PC_RIGHT, U_LEFT, U_RIGHT) ((void)0)
3584 /* ****************************************************************** qsort */
3587 S_qsortsv(pTHX_ SV ** array, size_t num_elts, SVCOMPARE_t compare)
3591 struct partition_stack_entry partition_stack[QSORT_MAX_STACK];
3592 int next_stack_entry = 0;
3596 #ifdef QSORT_ORDER_GUESS
3597 int qsort_break_even;
3601 /* Make sure we actually have work to do.
3603 if (num_elts <= 1) {
3607 /* Setup the initial partition definition and fall into the sorting loop
3610 part_right = (int)(num_elts - 1);
3611 #ifdef QSORT_ORDER_GUESS
3612 qsort_break_even = QSORT_BREAK_EVEN;
3614 #define qsort_break_even QSORT_BREAK_EVEN
3617 if ((part_right - part_left) >= qsort_break_even) {
3618 /* OK, this is gonna get hairy, so lets try to document all the
3619 concepts and abbreviations and variables and what they keep
3622 pc: pivot chunk - the set of array elements we accumulate in the
3623 middle of the partition, all equal in value to the original
3624 pivot element selected. The pc is defined by:
3626 pc_left - the leftmost array index of the pc
3627 pc_right - the rightmost array index of the pc
3629 we start with pc_left == pc_right and only one element
3630 in the pivot chunk (but it can grow during the scan).
3632 u: uncompared elements - the set of elements in the partition
3633 we have not yet compared to the pivot value. There are two
3634 uncompared sets during the scan - one to the left of the pc
3635 and one to the right.
3637 u_right - the rightmost index of the left side's uncompared set
3638 u_left - the leftmost index of the right side's uncompared set
3640 The leftmost index of the left sides's uncompared set
3641 doesn't need its own variable because it is always defined
3642 by the leftmost edge of the whole partition (part_left). The
3643 same goes for the rightmost edge of the right partition
3646 We know there are no uncompared elements on the left once we
3647 get u_right < part_left and no uncompared elements on the
3648 right once u_left > part_right. When both these conditions
3649 are met, we have completed the scan of the partition.
3651 Any elements which are between the pivot chunk and the
3652 uncompared elements should be less than the pivot value on
3653 the left side and greater than the pivot value on the right
3654 side (in fact, the goal of the whole algorithm is to arrange
3655 for that to be true and make the groups of less-than and
3656 greater-then elements into new partitions to sort again).
3658 As you marvel at the complexity of the code and wonder why it
3659 has to be so confusing. Consider some of the things this level
3660 of confusion brings:
3662 Once I do a compare, I squeeze every ounce of juice out of it. I
3663 never do compare calls I don't have to do, and I certainly never
3666 I also never swap any elements unless I can prove there is a
3667 good reason. Many sort algorithms will swap a known value with
3668 an uncompared value just to get things in the right place (or
3669 avoid complexity :-), but that uncompared value, once it gets
3670 compared, may then have to be swapped again. A lot of the
3671 complexity of this code is due to the fact that it never swaps
3672 anything except compared values, and it only swaps them when the
3673 compare shows they are out of position.
3675 int pc_left, pc_right;
3676 int u_right, u_left;
3680 pc_left = ((part_left + part_right) / 2);
3682 u_right = pc_left - 1;
3683 u_left = pc_right + 1;
3685 /* Qsort works best when the pivot value is also the median value
3686 in the partition (unfortunately you can't find the median value
3687 without first sorting :-), so to give the algorithm a helping
3688 hand, we pick 3 elements and sort them and use the median value
3689 of that tiny set as the pivot value.
3691 Some versions of qsort like to use the left middle and right as
3692 the 3 elements to sort so they can insure the ends of the
3693 partition will contain values which will stop the scan in the
3694 compare loop, but when you have to call an arbitrarily complex
3695 routine to do a compare, its really better to just keep track of
3696 array index values to know when you hit the edge of the
3697 partition and avoid the extra compare. An even better reason to
3698 avoid using a compare call is the fact that you can drop off the
3699 edge of the array if someone foolishly provides you with an
3700 unstable compare function that doesn't always provide consistent
3703 So, since it is simpler for us to compare the three adjacent
3704 elements in the middle of the partition, those are the ones we
3705 pick here (conveniently pointed at by u_right, pc_left, and
3706 u_left). The values of the left, center, and right elements
3707 are refered to as l c and r in the following comments.
3710 #ifdef QSORT_ORDER_GUESS
3713 s = qsort_cmp(u_right, pc_left);
3716 s = qsort_cmp(pc_left, u_left);
3717 /* if l < c, c < r - already in order - nothing to do */
3719 /* l < c, c == r - already in order, pc grows */
3721 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3723 /* l < c, c > r - need to know more */
3724 s = qsort_cmp(u_right, u_left);
3726 /* l < c, c > r, l < r - swap c & r to get ordered */
3727 qsort_swap(pc_left, u_left);
3728 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3729 } else if (s == 0) {
3730 /* l < c, c > r, l == r - swap c&r, grow pc */
3731 qsort_swap(pc_left, u_left);
3733 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3735 /* l < c, c > r, l > r - make lcr into rlc to get ordered */
3736 qsort_rotate(pc_left, u_right, u_left);
3737 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3740 } else if (s == 0) {
3742 s = qsort_cmp(pc_left, u_left);
3744 /* l == c, c < r - already in order, grow pc */
3746 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3747 } else if (s == 0) {
3748 /* l == c, c == r - already in order, grow pc both ways */
3751 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3753 /* l == c, c > r - swap l & r, grow pc */
3754 qsort_swap(u_right, u_left);
3756 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3760 s = qsort_cmp(pc_left, u_left);
3762 /* l > c, c < r - need to know more */
3763 s = qsort_cmp(u_right, u_left);
3765 /* l > c, c < r, l < r - swap l & c to get ordered */
3766 qsort_swap(u_right, pc_left);
3767 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3768 } else if (s == 0) {
3769 /* l > c, c < r, l == r - swap l & c, grow pc */
3770 qsort_swap(u_right, pc_left);
3772 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3774 /* l > c, c < r, l > r - rotate lcr into crl to order */
3775 qsort_rotate(u_right, pc_left, u_left);
3776 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3778 } else if (s == 0) {
3779 /* l > c, c == r - swap ends, grow pc */
3780 qsort_swap(u_right, u_left);
3782 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3784 /* l > c, c > r - swap ends to get in order */
3785 qsort_swap(u_right, u_left);
3786 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3789 /* We now know the 3 middle elements have been compared and
3790 arranged in the desired order, so we can shrink the uncompared
3795 qsort_all_asserts(pc_left, pc_right, u_left, u_right);
3797 /* The above massive nested if was the simple part :-). We now have
3798 the middle 3 elements ordered and we need to scan through the
3799 uncompared sets on either side, swapping elements that are on
3800 the wrong side or simply shuffling equal elements around to get
3801 all equal elements into the pivot chunk.
3805 int still_work_on_left;
3806 int still_work_on_right;
3808 /* Scan the uncompared values on the left. If I find a value
3809 equal to the pivot value, move it over so it is adjacent to
3810 the pivot chunk and expand the pivot chunk. If I find a value
3811 less than the pivot value, then just leave it - its already
3812 on the correct side of the partition. If I find a greater
3813 value, then stop the scan.
3815 while (still_work_on_left = (u_right >= part_left)) {
3816 s = qsort_cmp(u_right, pc_left);
3819 } else if (s == 0) {
3821 if (pc_left != u_right) {
3822 qsort_swap(u_right, pc_left);
3828 qsort_assert(u_right < pc_left);
3829 qsort_assert(pc_left <= pc_right);
3830 qsort_assert(qsort_cmp(u_right + 1, pc_left) <= 0);
3831 qsort_assert(qsort_cmp(pc_left, pc_right) == 0);
3834 /* Do a mirror image scan of uncompared values on the right
3836 while (still_work_on_right = (u_left <= part_right)) {
3837 s = qsort_cmp(pc_right, u_left);
3840 } else if (s == 0) {
3842 if (pc_right != u_left) {
3843 qsort_swap(pc_right, u_left);
3849 qsort_assert(u_left > pc_right);
3850 qsort_assert(pc_left <= pc_right);
3851 qsort_assert(qsort_cmp(pc_right, u_left - 1) <= 0);
3852 qsort_assert(qsort_cmp(pc_left, pc_right) == 0);
3855 if (still_work_on_left) {
3856 /* I know I have a value on the left side which needs to be
3857 on the right side, but I need to know more to decide
3858 exactly the best thing to do with it.
3860 if (still_work_on_right) {
3861 /* I know I have values on both side which are out of
3862 position. This is a big win because I kill two birds
3863 with one swap (so to speak). I can advance the
3864 uncompared pointers on both sides after swapping both
3865 of them into the right place.
3867 qsort_swap(u_right, u_left);
3870 qsort_all_asserts(pc_left, pc_right, u_left, u_right);
3872 /* I have an out of position value on the left, but the
3873 right is fully scanned, so I "slide" the pivot chunk
3874 and any less-than values left one to make room for the
3875 greater value over on the right. If the out of position
3876 value is immediately adjacent to the pivot chunk (there
3877 are no less-than values), I can do that with a swap,
3878 otherwise, I have to rotate one of the less than values
3879 into the former position of the out of position value
3880 and the right end of the pivot chunk into the left end
3884 if (pc_left == u_right) {
3885 qsort_swap(u_right, pc_right);
3886 qsort_all_asserts(pc_left, pc_right-1, u_left, u_right-1);
3888 qsort_rotate(u_right, pc_left, pc_right);
3889 qsort_all_asserts(pc_left, pc_right-1, u_left, u_right-1);
3894 } else if (still_work_on_right) {
3895 /* Mirror image of complex case above: I have an out of
3896 position value on the right, but the left is fully
3897 scanned, so I need to shuffle things around to make room
3898 for the right value on the left.
3901 if (pc_right == u_left) {
3902 qsort_swap(u_left, pc_left);
3903 qsort_all_asserts(pc_left+1, pc_right, u_left+1, u_right);
3905 qsort_rotate(pc_right, pc_left, u_left);
3906 qsort_all_asserts(pc_left+1, pc_right, u_left+1, u_right);
3911 /* No more scanning required on either side of partition,
3912 break out of loop and figure out next set of partitions
3918 /* The elements in the pivot chunk are now in the right place. They
3919 will never move or be compared again. All I have to do is decide
3920 what to do with the stuff to the left and right of the pivot
3923 Notes on the QSORT_ORDER_GUESS ifdef code:
3925 1. If I just built these partitions without swapping any (or
3926 very many) elements, there is a chance that the elements are
3927 already ordered properly (being properly ordered will
3928 certainly result in no swapping, but the converse can't be
3931 2. A (properly written) insertion sort will run faster on
3932 already ordered data than qsort will.
3934 3. Perhaps there is some way to make a good guess about
3935 switching to an insertion sort earlier than partition size 6
3936 (for instance - we could save the partition size on the stack
3937 and increase the size each time we find we didn't swap, thus
3938 switching to insertion sort earlier for partitions with a
3939 history of not swapping).
3941 4. Naturally, if I just switch right away, it will make
3942 artificial benchmarks with pure ascending (or descending)
3943 data look really good, but is that a good reason in general?
3947 #ifdef QSORT_ORDER_GUESS
3949 #if QSORT_ORDER_GUESS == 1
3950 qsort_break_even = (part_right - part_left) + 1;
3952 #if QSORT_ORDER_GUESS == 2
3953 qsort_break_even *= 2;
3955 #if QSORT_ORDER_GUESS == 3
3956 int prev_break = qsort_break_even;
3957 qsort_break_even *= qsort_break_even;
3958 if (qsort_break_even < prev_break) {
3959 qsort_break_even = (part_right - part_left) + 1;
3963 qsort_break_even = QSORT_BREAK_EVEN;
3967 if (part_left < pc_left) {
3968 /* There are elements on the left which need more processing.
3969 Check the right as well before deciding what to do.
3971 if (pc_right < part_right) {
3972 /* We have two partitions to be sorted. Stack the biggest one
3973 and process the smallest one on the next iteration. This
3974 minimizes the stack height by insuring that any additional
3975 stack entries must come from the smallest partition which
3976 (because it is smallest) will have the fewest
3977 opportunities to generate additional stack entries.
3979 if ((part_right - pc_right) > (pc_left - part_left)) {
3980 /* stack the right partition, process the left */
3981 partition_stack[next_stack_entry].left = pc_right + 1;
3982 partition_stack[next_stack_entry].right = part_right;
3983 #ifdef QSORT_ORDER_GUESS
3984 partition_stack[next_stack_entry].qsort_break_even = qsort_break_even;
3986 part_right = pc_left - 1;
3988 /* stack the left partition, process the right */
3989 partition_stack[next_stack_entry].left = part_left;
3990 partition_stack[next_stack_entry].right = pc_left - 1;
3991 #ifdef QSORT_ORDER_GUESS
3992 partition_stack[next_stack_entry].qsort_break_even = qsort_break_even;
3994 part_left = pc_right + 1;
3996 qsort_assert(next_stack_entry < QSORT_MAX_STACK);
3999 /* The elements on the left are the only remaining elements
4000 that need sorting, arrange for them to be processed as the
4003 part_right = pc_left - 1;
4005 } else if (pc_right < part_right) {
4006 /* There is only one chunk on the right to be sorted, make it
4007 the new partition and loop back around.
4009 part_left = pc_right + 1;
4011 /* This whole partition wound up in the pivot chunk, so
4012 we need to get a new partition off the stack.
4014 if (next_stack_entry == 0) {
4015 /* the stack is empty - we are done */
4019 part_left = partition_stack[next_stack_entry].left;
4020 part_right = partition_stack[next_stack_entry].right;
4021 #ifdef QSORT_ORDER_GUESS
4022 qsort_break_even = partition_stack[next_stack_entry].qsort_break_even;
4026 /* This partition is too small to fool with qsort complexity, just
4027 do an ordinary insertion sort to minimize overhead.
4030 /* Assume 1st element is in right place already, and start checking
4031 at 2nd element to see where it should be inserted.
4033 for (i = part_left + 1; i <= part_right; ++i) {
4035 /* Scan (backwards - just in case 'i' is already in right place)
4036 through the elements already sorted to see if the ith element
4037 belongs ahead of one of them.
4039 for (j = i - 1; j >= part_left; --j) {
4040 if (qsort_cmp(i, j) >= 0) {
4041 /* i belongs right after j
4048 /* Looks like we really need to move some things
4052 for (k = i - 1; k >= j; --k)
4053 array[k + 1] = array[k];
4058 /* That partition is now sorted, grab the next one, or get out
4059 of the loop if there aren't any more.
4062 if (next_stack_entry == 0) {
4063 /* the stack is empty - we are done */
4067 part_left = partition_stack[next_stack_entry].left;
4068 part_right = partition_stack[next_stack_entry].right;
4069 #ifdef QSORT_ORDER_GUESS
4070 qsort_break_even = partition_stack[next_stack_entry].qsort_break_even;
4075 /* Believe it or not, the array is sorted at this point! */
4087 sortcv(pTHXo_ SV *a, SV *b)
4090 I32 oldsaveix = PL_savestack_ix;
4091 I32 oldscopeix = PL_scopestack_ix;
4093 GvSV(PL_firstgv) = a;
4094 GvSV(PL_secondgv) = b;
4095 PL_stack_sp = PL_stack_base;
4098 if (PL_stack_sp != PL_stack_base + 1)
4099 Perl_croak(aTHX_ "Sort subroutine didn't return single value");
4100 if (!SvNIOKp(*PL_stack_sp))
4101 Perl_croak(aTHX_ "Sort subroutine didn't return a numeric value");
4102 result = SvIV(*PL_stack_sp);
4103 while (PL_scopestack_ix > oldscopeix) {
4106 leave_scope(oldsaveix);
4112 sv_ncmp(pTHXo_ SV *a, SV *b)
4116 return nv1 < nv2 ? -1 : nv1 > nv2 ? 1 : 0;
4120 sv_i_ncmp(pTHXo_ SV *a, SV *b)
4124 return iv1 < iv2 ? -1 : iv1 > iv2 ? 1 : 0;
4126 #define tryCALL_AMAGICbin(left,right,meth,svp) STMT_START { \
4128 if (PL_amagic_generation) { \
4129 if (SvAMAGIC(left)||SvAMAGIC(right))\
4130 *svp = amagic_call(left, \
4138 amagic_ncmp(pTHXo_ register SV *a, register SV *b)
4141 tryCALL_AMAGICbin(a,b,ncmp,&tmpsv);
4146 I32 i = SvIVX(tmpsv);
4156 return sv_ncmp(aTHXo_ a, b);
4160 amagic_i_ncmp(pTHXo_ register SV *a, register SV *b)
4163 tryCALL_AMAGICbin(a,b,ncmp,&tmpsv);
4168 I32 i = SvIVX(tmpsv);
4178 return sv_i_ncmp(aTHXo_ a, b);
4182 amagic_cmp(pTHXo_ register SV *str1, register SV *str2)
4185 tryCALL_AMAGICbin(str1,str2,scmp,&tmpsv);
4190 I32 i = SvIVX(tmpsv);
4200 return sv_cmp(str1, str2);
4204 amagic_cmp_locale(pTHXo_ register SV *str1, register SV *str2)
4207 tryCALL_AMAGICbin(str1,str2,scmp,&tmpsv);
4212 I32 i = SvIVX(tmpsv);
4222 return sv_cmp_locale(str1, str2);
4226 run_user_filter(pTHXo_ int idx, SV *buf_sv, int maxlen)
4228 SV *datasv = FILTER_DATA(idx);
4229 int filter_has_file = IoLINES(datasv);
4230 GV *filter_child_proc = (GV *)IoFMT_GV(datasv);
4231 SV *filter_state = (SV *)IoTOP_GV(datasv);
4232 SV *filter_sub = (SV *)IoBOTTOM_GV(datasv);
4235 /* I was having segfault trouble under Linux 2.2.5 after a
4236 parse error occured. (Had to hack around it with a test
4237 for PL_error_count == 0.) Solaris doesn't segfault --
4238 not sure where the trouble is yet. XXX */
4240 if (filter_has_file) {
4241 len = FILTER_READ(idx+1, buf_sv, maxlen);
4244 if (filter_sub && len >= 0) {
4255 PUSHs(sv_2mortal(newSViv(maxlen)));
4257 PUSHs(filter_state);
4260 count = call_sv(filter_sub, G_SCALAR);
4276 IoLINES(datasv) = 0;
4277 if (filter_child_proc) {
4278 SvREFCNT_dec(filter_child_proc);
4279 IoFMT_GV(datasv) = Nullgv;
4282 SvREFCNT_dec(filter_state);
4283 IoTOP_GV(datasv) = Nullgv;
4286 SvREFCNT_dec(filter_sub);
4287 IoBOTTOM_GV(datasv) = Nullgv;
4289 filter_del(run_user_filter);
4298 sv_cmp_locale_static(pTHXo_ register SV *str1, register SV *str2)
4300 return sv_cmp_locale(str1, str2);
4304 sv_cmp_static(pTHXo_ register SV *str1, register SV *str2)
4306 return sv_cmp(str1, str2);
4309 #endif /* PERL_OBJECT */