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;
1657 struct block_loop cxloop;
1665 POPLOOP1(cx); /* Delay POPLOOP2 until stack values are safe */
1668 if (gimme == G_VOID)
1670 else if (gimme == G_SCALAR) {
1672 *++newsp = sv_mortalcopy(*SP);
1674 *++newsp = &PL_sv_undef;
1678 *++newsp = sv_mortalcopy(*++mark);
1679 TAINT_NOT; /* Each item is independent */
1685 POPLOOP2(); /* Stack values are safe: release loop vars ... */
1686 PL_curpm = newpm; /* ... and pop $1 et al */
1698 register PERL_CONTEXT *cx;
1699 struct block_sub cxsub;
1700 bool popsub2 = FALSE;
1706 if (PL_curstackinfo->si_type == PERLSI_SORT) {
1707 if (cxstack_ix == PL_sortcxix || dopoptosub(cxstack_ix) <= PL_sortcxix) {
1708 if (cxstack_ix > PL_sortcxix)
1709 dounwind(PL_sortcxix);
1710 AvARRAY(PL_curstack)[1] = *SP;
1711 PL_stack_sp = PL_stack_base + 1;
1716 cxix = dopoptosub(cxstack_ix);
1718 DIE(aTHX_ "Can't return outside a subroutine");
1719 if (cxix < cxstack_ix)
1723 switch (CxTYPE(cx)) {
1725 POPSUB1(cx); /* Delay POPSUB2 until stack values are safe */
1730 if (AvFILLp(PL_comppad_name) >= 0)
1733 if (optype == OP_REQUIRE &&
1734 (MARK == SP || (gimme == G_SCALAR && !SvTRUE(*SP))) )
1736 /* Unassume the success we assumed earlier. */
1737 char *name = cx->blk_eval.old_name;
1738 (void)hv_delete(GvHVn(PL_incgv), name, strlen(name), G_DISCARD);
1739 DIE(aTHX_ "%s did not return a true value", name);
1743 DIE(aTHX_ "panic: return");
1747 if (gimme == G_SCALAR) {
1750 if (cxsub.cv && CvDEPTH(cxsub.cv) > 1) {
1752 *++newsp = SvREFCNT_inc(*SP);
1757 *++newsp = sv_mortalcopy(*SP);
1760 *++newsp = (SvTEMP(*SP)) ? *SP : sv_mortalcopy(*SP);
1762 *++newsp = sv_mortalcopy(*SP);
1764 *++newsp = &PL_sv_undef;
1766 else if (gimme == G_ARRAY) {
1767 while (++MARK <= SP) {
1768 *++newsp = (popsub2 && SvTEMP(*MARK))
1769 ? *MARK : sv_mortalcopy(*MARK);
1770 TAINT_NOT; /* Each item is independent */
1773 PL_stack_sp = newsp;
1775 /* Stack values are safe: */
1777 POPSUB2(); /* release CV and @_ ... */
1779 PL_curpm = newpm; /* ... and pop $1 et al */
1782 return pop_return();
1789 register PERL_CONTEXT *cx;
1790 struct block_loop cxloop;
1791 struct block_sub cxsub;
1798 SV **mark = PL_stack_base + cxstack[cxstack_ix].blk_oldsp;
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)
1814 switch (CxTYPE(cx)) {
1816 POPLOOP1(cx); /* Delay POPLOOP2 until stack values are safe */
1818 nextop = cxloop.last_op->op_next;
1821 POPSUB1(cx); /* Delay POPSUB2 until stack values are safe */
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 POPLOOP2(); /* release loop vars ... */
1858 POPSUB2(); /* release CV and @_ ... */
1861 PL_curpm = newpm; /* ... and pop $1 et al */
1870 register PERL_CONTEXT *cx;
1873 if (PL_op->op_flags & OPf_SPECIAL) {
1874 cxix = dopoptoloop(cxstack_ix);
1876 DIE(aTHX_ "Can't \"next\" outside a block");
1879 cxix = dopoptolabel(cPVOP->op_pv);
1881 DIE(aTHX_ "Label not found for \"next %s\"", cPVOP->op_pv);
1883 if (cxix < cxstack_ix)
1887 oldsave = PL_scopestack[PL_scopestack_ix - 1];
1888 LEAVE_SCOPE(oldsave);
1889 return cx->blk_loop.next_op;
1895 register PERL_CONTEXT *cx;
1898 if (PL_op->op_flags & OPf_SPECIAL) {
1899 cxix = dopoptoloop(cxstack_ix);
1901 DIE(aTHX_ "Can't \"redo\" outside a block");
1904 cxix = dopoptolabel(cPVOP->op_pv);
1906 DIE(aTHX_ "Label not found for \"redo %s\"", cPVOP->op_pv);
1908 if (cxix < cxstack_ix)
1912 oldsave = PL_scopestack[PL_scopestack_ix - 1];
1913 LEAVE_SCOPE(oldsave);
1914 return cx->blk_loop.redo_op;
1918 S_dofindlabel(pTHX_ OP *o, char *label, OP **opstack, OP **oplimit)
1922 static char too_deep[] = "Target of goto is too deeply nested";
1925 Perl_croak(aTHX_ too_deep);
1926 if (o->op_type == OP_LEAVE ||
1927 o->op_type == OP_SCOPE ||
1928 o->op_type == OP_LEAVELOOP ||
1929 o->op_type == OP_LEAVETRY)
1931 *ops++ = cUNOPo->op_first;
1933 Perl_croak(aTHX_ too_deep);
1936 if (o->op_flags & OPf_KIDS) {
1938 /* First try all the kids at this level, since that's likeliest. */
1939 for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling) {
1940 if ((kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) &&
1941 kCOP->cop_label && strEQ(kCOP->cop_label, label))
1944 for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling) {
1945 if (kid == PL_lastgotoprobe)
1947 if ((kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) &&
1949 (ops[-1]->op_type != OP_NEXTSTATE &&
1950 ops[-1]->op_type != OP_DBSTATE)))
1952 if (o = dofindlabel(kid, label, ops, oplimit))
1971 register PERL_CONTEXT *cx;
1972 #define GOTO_DEPTH 64
1973 OP *enterops[GOTO_DEPTH];
1975 int do_dump = (PL_op->op_type == OP_DUMP);
1976 static char must_have_label[] = "goto must have label";
1979 if (PL_op->op_flags & OPf_STACKED) {
1983 /* This egregious kludge implements goto &subroutine */
1984 if (SvROK(sv) && SvTYPE(SvRV(sv)) == SVt_PVCV) {
1986 register PERL_CONTEXT *cx;
1987 CV* cv = (CV*)SvRV(sv);
1993 if (!CvROOT(cv) && !CvXSUB(cv)) {
1998 /* autoloaded stub? */
1999 if (cv != GvCV(gv) && (cv = GvCV(gv)))
2001 autogv = gv_autoload4(GvSTASH(gv), GvNAME(gv),
2002 GvNAMELEN(gv), FALSE);
2003 if (autogv && (cv = GvCV(autogv)))
2005 tmpstr = sv_newmortal();
2006 gv_efullname3(tmpstr, gv, Nullch);
2007 DIE(aTHX_ "Goto undefined subroutine &%s",SvPVX(tmpstr));
2009 DIE(aTHX_ "Goto undefined subroutine");
2012 /* First do some returnish stuff. */
2013 cxix = dopoptosub(cxstack_ix);
2015 DIE(aTHX_ "Can't goto subroutine outside a subroutine");
2016 if (cxix < cxstack_ix)
2019 if (CxTYPE(cx) == CXt_EVAL && cx->blk_eval.old_op_type == OP_ENTEREVAL)
2020 DIE(aTHX_ "Can't goto subroutine from an eval-string");
2022 if (CxTYPE(cx) == CXt_SUB && cx->blk_sub.hasargs) {
2023 /* put @_ back onto stack */
2024 AV* av = cx->blk_sub.argarray;
2026 items = AvFILLp(av) + 1;
2028 EXTEND(PL_stack_sp, items); /* @_ could have been extended. */
2029 Copy(AvARRAY(av), PL_stack_sp, items, SV*);
2030 PL_stack_sp += items;
2032 SvREFCNT_dec(GvAV(PL_defgv));
2033 GvAV(PL_defgv) = cx->blk_sub.savearray;
2034 #endif /* USE_THREADS */
2035 /* abandon @_ if it got reified */
2037 (void)sv_2mortal((SV*)av); /* delay until return */
2039 av_extend(av, items-1);
2040 AvFLAGS(av) = AVf_REIFY;
2041 PL_curpad[0] = (SV*)(cx->blk_sub.argarray = av);
2044 else if (CvXSUB(cv)) { /* put GvAV(defgv) back onto stack */
2048 av = (AV*)PL_curpad[0];
2050 av = GvAV(PL_defgv);
2052 items = AvFILLp(av) + 1;
2054 EXTEND(PL_stack_sp, items); /* @_ could have been extended. */
2055 Copy(AvARRAY(av), PL_stack_sp, items, SV*);
2056 PL_stack_sp += items;
2058 if (CxTYPE(cx) == CXt_SUB &&
2059 !(CvDEPTH(cx->blk_sub.cv) = cx->blk_sub.olddepth))
2060 SvREFCNT_dec(cx->blk_sub.cv);
2061 oldsave = PL_scopestack[PL_scopestack_ix - 1];
2062 LEAVE_SCOPE(oldsave);
2064 /* Now do some callish stuff. */
2067 #ifdef PERL_XSUB_OLDSTYLE
2068 if (CvOLDSTYLE(cv)) {
2069 I32 (*fp3)(int,int,int);
2074 fp3 = (I32(*)(int,int,int)))CvXSUB(cv;
2075 items = (*fp3)(CvXSUBANY(cv).any_i32,
2076 mark - PL_stack_base + 1,
2078 SP = PL_stack_base + items;
2081 #endif /* PERL_XSUB_OLDSTYLE */
2086 PL_stack_sp--; /* There is no cv arg. */
2087 /* Push a mark for the start of arglist */
2089 (void)(*CvXSUB(cv))(aTHXo_ cv);
2090 /* Pop the current context like a decent sub should */
2091 POPBLOCK(cx, PL_curpm);
2092 /* Do _not_ use PUTBACK, keep the XSUB's return stack! */
2095 return pop_return();
2098 AV* padlist = CvPADLIST(cv);
2099 SV** svp = AvARRAY(padlist);
2100 if (CxTYPE(cx) == CXt_EVAL) {
2101 PL_in_eval = cx->blk_eval.old_in_eval;
2102 PL_eval_root = cx->blk_eval.old_eval_root;
2103 cx->cx_type = CXt_SUB;
2104 cx->blk_sub.hasargs = 0;
2106 cx->blk_sub.cv = cv;
2107 cx->blk_sub.olddepth = CvDEPTH(cv);
2109 if (CvDEPTH(cv) < 2)
2110 (void)SvREFCNT_inc(cv);
2111 else { /* save temporaries on recursion? */
2112 if (CvDEPTH(cv) == 100 && ckWARN(WARN_RECURSION))
2113 sub_crush_depth(cv);
2114 if (CvDEPTH(cv) > AvFILLp(padlist)) {
2115 AV *newpad = newAV();
2116 SV **oldpad = AvARRAY(svp[CvDEPTH(cv)-1]);
2117 I32 ix = AvFILLp((AV*)svp[1]);
2118 svp = AvARRAY(svp[0]);
2119 for ( ;ix > 0; ix--) {
2120 if (svp[ix] != &PL_sv_undef) {
2121 char *name = SvPVX(svp[ix]);
2122 if ((SvFLAGS(svp[ix]) & SVf_FAKE)
2125 /* outer lexical or anon code */
2126 av_store(newpad, ix,
2127 SvREFCNT_inc(oldpad[ix]) );
2129 else { /* our own lexical */
2131 av_store(newpad, ix, sv = (SV*)newAV());
2132 else if (*name == '%')
2133 av_store(newpad, ix, sv = (SV*)newHV());
2135 av_store(newpad, ix, sv = NEWSV(0,0));
2140 av_store(newpad, ix, sv = NEWSV(0,0));
2144 if (cx->blk_sub.hasargs) {
2147 av_store(newpad, 0, (SV*)av);
2148 AvFLAGS(av) = AVf_REIFY;
2150 av_store(padlist, CvDEPTH(cv), (SV*)newpad);
2151 AvFILLp(padlist) = CvDEPTH(cv);
2152 svp = AvARRAY(padlist);
2156 if (!cx->blk_sub.hasargs) {
2157 AV* av = (AV*)PL_curpad[0];
2159 items = AvFILLp(av) + 1;
2161 /* Mark is at the end of the stack. */
2163 Copy(AvARRAY(av), SP + 1, items, SV*);
2168 #endif /* USE_THREADS */
2169 SAVESPTR(PL_curpad);
2170 PL_curpad = AvARRAY((AV*)svp[CvDEPTH(cv)]);
2172 if (cx->blk_sub.hasargs)
2173 #endif /* USE_THREADS */
2175 AV* av = (AV*)PL_curpad[0];
2179 cx->blk_sub.savearray = GvAV(PL_defgv);
2180 GvAV(PL_defgv) = (AV*)SvREFCNT_inc(av);
2181 #endif /* USE_THREADS */
2182 cx->blk_sub.argarray = av;
2185 if (items >= AvMAX(av) + 1) {
2187 if (AvARRAY(av) != ary) {
2188 AvMAX(av) += AvARRAY(av) - AvALLOC(av);
2189 SvPVX(av) = (char*)ary;
2191 if (items >= AvMAX(av) + 1) {
2192 AvMAX(av) = items - 1;
2193 Renew(ary,items+1,SV*);
2195 SvPVX(av) = (char*)ary;
2198 Copy(mark,AvARRAY(av),items,SV*);
2199 AvFILLp(av) = items - 1;
2200 assert(!AvREAL(av));
2207 if (PERLDB_SUB) { /* Checking curstash breaks DProf. */
2209 * We do not care about using sv to call CV;
2210 * it's for informational purposes only.
2212 SV *sv = GvSV(PL_DBsub);
2215 if (PERLDB_SUB_NN) {
2216 SvIVX(sv) = PTR2IV(cv); /* Already upgraded, saved */
2219 gv_efullname3(sv, CvGV(cv), Nullch);
2222 && (gotocv = get_cv("DB::goto", FALSE)) ) {
2223 PUSHMARK( PL_stack_sp );
2224 call_sv((SV*)gotocv, G_SCALAR | G_NODEBUG);
2228 RETURNOP(CvSTART(cv));
2232 label = SvPV(sv,n_a);
2233 if (!(do_dump || *label))
2234 DIE(aTHX_ must_have_label);
2237 else if (PL_op->op_flags & OPf_SPECIAL) {
2239 DIE(aTHX_ must_have_label);
2242 label = cPVOP->op_pv;
2244 if (label && *label) {
2249 PL_lastgotoprobe = 0;
2251 for (ix = cxstack_ix; ix >= 0; ix--) {
2253 switch (CxTYPE(cx)) {
2255 gotoprobe = PL_eval_root; /* XXX not good for nested eval */
2258 gotoprobe = cx->blk_oldcop->op_sibling;
2264 gotoprobe = cx->blk_oldcop->op_sibling;
2266 gotoprobe = PL_main_root;
2269 if (CvDEPTH(cx->blk_sub.cv)) {
2270 gotoprobe = CvROOT(cx->blk_sub.cv);
2275 DIE(aTHX_ "Can't \"goto\" outside a block");
2278 DIE(aTHX_ "panic: goto");
2279 gotoprobe = PL_main_root;
2282 retop = dofindlabel(gotoprobe, label,
2283 enterops, enterops + GOTO_DEPTH);
2286 PL_lastgotoprobe = gotoprobe;
2289 DIE(aTHX_ "Can't find label %s", label);
2291 /* pop unwanted frames */
2293 if (ix < cxstack_ix) {
2300 oldsave = PL_scopestack[PL_scopestack_ix];
2301 LEAVE_SCOPE(oldsave);
2304 /* push wanted frames */
2306 if (*enterops && enterops[1]) {
2308 for (ix = 1; enterops[ix]; ix++) {
2309 PL_op = enterops[ix];
2310 /* Eventually we may want to stack the needed arguments
2311 * for each op. For now, we punt on the hard ones. */
2312 if (PL_op->op_type == OP_ENTERITER)
2313 DIE(aTHX_ "Can't \"goto\" into the middle of a foreach loop",
2315 CALL_FPTR(PL_op->op_ppaddr)(aTHX);
2323 if (!retop) retop = PL_main_start;
2325 PL_restartop = retop;
2326 PL_do_undump = TRUE;
2330 PL_restartop = 0; /* hmm, must be GNU unexec().. */
2331 PL_do_undump = FALSE;
2347 if (anum == 1 && VMSISH_EXIT)
2352 PUSHs(&PL_sv_undef);
2360 NV value = SvNVx(GvSV(cCOP->cop_gv));
2361 register I32 match = I_32(value);
2364 if (((NV)match) > value)
2365 --match; /* was fractional--truncate other way */
2367 match -= cCOP->uop.scop.scop_offset;
2370 else if (match > cCOP->uop.scop.scop_max)
2371 match = cCOP->uop.scop.scop_max;
2372 PL_op = cCOP->uop.scop.scop_next[match];
2382 PL_op = PL_op->op_next; /* can't assume anything */
2385 match = *(SvPVx(GvSV(cCOP->cop_gv), n_a)) & 255;
2386 match -= cCOP->uop.scop.scop_offset;
2389 else if (match > cCOP->uop.scop.scop_max)
2390 match = cCOP->uop.scop.scop_max;
2391 PL_op = cCOP->uop.scop.scop_next[match];
2400 S_save_lines(pTHX_ AV *array, SV *sv)
2402 register char *s = SvPVX(sv);
2403 register char *send = SvPVX(sv) + SvCUR(sv);
2405 register I32 line = 1;
2407 while (s && s < send) {
2408 SV *tmpstr = NEWSV(85,0);
2410 sv_upgrade(tmpstr, SVt_PVMG);
2411 t = strchr(s, '\n');
2417 sv_setpvn(tmpstr, s, t - s);
2418 av_store(array, line++, tmpstr);
2424 S_docatch_body(pTHX_ va_list args)
2431 S_docatch(pTHX_ OP *o)
2438 assert(CATCH_GET == TRUE);
2442 CALLPROTECT(aTHX_ &ret, MEMBER_TO_FPTR(S_docatch_body));
2448 PL_op = PL_restartop;
2463 Perl_sv_compile_2op(pTHX_ SV *sv, OP** startop, char *code, AV** avp)
2464 /* sv Text to convert to OP tree. */
2465 /* startop op_free() this to undo. */
2466 /* code Short string id of the caller. */
2468 dSP; /* Make POPBLOCK work. */
2471 I32 gimme = 0; /* SUSPECT - INITIALZE TO WHAT? NI-S */
2474 OP *oop = PL_op, *rop;
2475 char tmpbuf[TYPE_DIGITS(long) + 12 + 10];
2481 /* switch to eval mode */
2483 if (PL_curcop == &PL_compiling) {
2484 SAVESPTR(PL_compiling.cop_stash);
2485 PL_compiling.cop_stash = PL_curstash;
2487 SAVESPTR(PL_compiling.cop_filegv);
2488 SAVEI16(PL_compiling.cop_line);
2489 sprintf(tmpbuf, "_<(%.10s_eval %lu)", code, (unsigned long)++PL_evalseq);
2490 PL_compiling.cop_filegv = gv_fetchfile(tmpbuf+2);
2491 PL_compiling.cop_line = 1;
2492 /* XXX For C<eval "...">s within BEGIN {} blocks, this ends up
2493 deleting the eval's FILEGV from the stash before gv_check() runs
2494 (i.e. before run-time proper). To work around the coredump that
2495 ensues, we always turn GvMULTI_on for any globals that were
2496 introduced within evals. See force_ident(). GSAR 96-10-12 */
2497 safestr = savepv(tmpbuf);
2498 SAVEDELETE(PL_defstash, safestr, strlen(safestr));
2500 #ifdef OP_IN_REGISTER
2508 PL_op->op_type = OP_ENTEREVAL;
2509 PL_op->op_flags = 0; /* Avoid uninit warning. */
2510 PUSHBLOCK(cx, CXt_EVAL, SP);
2511 PUSHEVAL(cx, 0, PL_compiling.cop_filegv);
2512 rop = doeval(G_SCALAR, startop);
2513 POPBLOCK(cx,PL_curpm);
2516 (*startop)->op_type = OP_NULL;
2517 (*startop)->op_ppaddr = PL_ppaddr[OP_NULL];
2519 *avp = (AV*)SvREFCNT_inc(PL_comppad);
2521 if (PL_curcop == &PL_compiling)
2522 PL_compiling.op_private = PL_hints;
2523 #ifdef OP_IN_REGISTER
2529 /* With USE_THREADS, eval_owner must be held on entry to doeval */
2531 S_doeval(pTHX_ int gimme, OP** startop)
2540 PL_in_eval = EVAL_INEVAL;
2544 /* set up a scratch pad */
2547 SAVESPTR(PL_curpad);
2548 SAVESPTR(PL_comppad);
2549 SAVESPTR(PL_comppad_name);
2550 SAVEI32(PL_comppad_name_fill);
2551 SAVEI32(PL_min_intro_pending);
2552 SAVEI32(PL_max_intro_pending);
2555 for (i = cxstack_ix - 1; i >= 0; i--) {
2556 PERL_CONTEXT *cx = &cxstack[i];
2557 if (CxTYPE(cx) == CXt_EVAL)
2559 else if (CxTYPE(cx) == CXt_SUB) {
2560 caller = cx->blk_sub.cv;
2565 SAVESPTR(PL_compcv);
2566 PL_compcv = (CV*)NEWSV(1104,0);
2567 sv_upgrade((SV *)PL_compcv, SVt_PVCV);
2568 CvEVAL_on(PL_compcv);
2570 CvOWNER(PL_compcv) = 0;
2571 New(666, CvMUTEXP(PL_compcv), 1, perl_mutex);
2572 MUTEX_INIT(CvMUTEXP(PL_compcv));
2573 #endif /* USE_THREADS */
2575 PL_comppad = newAV();
2576 av_push(PL_comppad, Nullsv);
2577 PL_curpad = AvARRAY(PL_comppad);
2578 PL_comppad_name = newAV();
2579 PL_comppad_name_fill = 0;
2580 PL_min_intro_pending = 0;
2583 av_store(PL_comppad_name, 0, newSVpvn("@_", 2));
2584 PL_curpad[0] = (SV*)newAV();
2585 SvPADMY_on(PL_curpad[0]); /* XXX Needed? */
2586 #endif /* USE_THREADS */
2588 comppadlist = newAV();
2589 AvREAL_off(comppadlist);
2590 av_store(comppadlist, 0, (SV*)PL_comppad_name);
2591 av_store(comppadlist, 1, (SV*)PL_comppad);
2592 CvPADLIST(PL_compcv) = comppadlist;
2594 if (!saveop || saveop->op_type != OP_REQUIRE)
2595 CvOUTSIDE(PL_compcv) = (CV*)SvREFCNT_inc(caller);
2597 SAVEFREESV(PL_compcv);
2599 /* make sure we compile in the right package */
2601 newstash = PL_curcop->cop_stash;
2602 if (PL_curstash != newstash) {
2603 SAVESPTR(PL_curstash);
2604 PL_curstash = newstash;
2606 SAVESPTR(PL_beginav);
2607 PL_beginav = newAV();
2608 SAVEFREESV(PL_beginav);
2610 /* try to compile it */
2612 PL_eval_root = Nullop;
2614 PL_curcop = &PL_compiling;
2615 PL_curcop->cop_arybase = 0;
2616 SvREFCNT_dec(PL_rs);
2617 PL_rs = newSVpvn("\n", 1);
2618 if (saveop && saveop->op_flags & OPf_SPECIAL)
2619 PL_in_eval |= EVAL_KEEPERR;
2622 if (yyparse() || PL_error_count || !PL_eval_root) {
2626 I32 optype = 0; /* Might be reset by POPEVAL. */
2631 op_free(PL_eval_root);
2632 PL_eval_root = Nullop;
2634 SP = PL_stack_base + POPMARK; /* pop original mark */
2636 POPBLOCK(cx,PL_curpm);
2642 if (optype == OP_REQUIRE) {
2643 char* msg = SvPVx(ERRSV, n_a);
2644 DIE(aTHX_ "%sCompilation failed in require",
2645 *msg ? msg : "Unknown error\n");
2648 char* msg = SvPVx(ERRSV, n_a);
2650 POPBLOCK(cx,PL_curpm);
2652 Perl_croak(aTHX_ "%sCompilation failed in regexp",
2653 (*msg ? msg : "Unknown error\n"));
2655 SvREFCNT_dec(PL_rs);
2656 PL_rs = SvREFCNT_inc(PL_nrs);
2658 MUTEX_LOCK(&PL_eval_mutex);
2660 COND_SIGNAL(&PL_eval_cond);
2661 MUTEX_UNLOCK(&PL_eval_mutex);
2662 #endif /* USE_THREADS */
2665 SvREFCNT_dec(PL_rs);
2666 PL_rs = SvREFCNT_inc(PL_nrs);
2667 PL_compiling.cop_line = 0;
2669 *startop = PL_eval_root;
2670 SvREFCNT_dec(CvOUTSIDE(PL_compcv));
2671 CvOUTSIDE(PL_compcv) = Nullcv;
2673 SAVEFREEOP(PL_eval_root);
2675 scalarvoid(PL_eval_root);
2676 else if (gimme & G_ARRAY)
2679 scalar(PL_eval_root);
2681 DEBUG_x(dump_eval());
2683 /* Register with debugger: */
2684 if (PERLDB_INTER && saveop->op_type == OP_REQUIRE) {
2685 CV *cv = get_cv("DB::postponed", FALSE);
2689 XPUSHs((SV*)PL_compiling.cop_filegv);
2691 call_sv((SV*)cv, G_DISCARD);
2695 /* compiled okay, so do it */
2697 CvDEPTH(PL_compcv) = 1;
2698 SP = PL_stack_base + POPMARK; /* pop original mark */
2699 PL_op = saveop; /* The caller may need it. */
2701 MUTEX_LOCK(&PL_eval_mutex);
2703 COND_SIGNAL(&PL_eval_cond);
2704 MUTEX_UNLOCK(&PL_eval_mutex);
2705 #endif /* USE_THREADS */
2707 RETURNOP(PL_eval_start);
2711 S_doopen_pmc(pTHX_ const char *name, const char *mode)
2713 STRLEN namelen = strlen(name);
2716 if (namelen > 3 && strEQ(name + namelen - 3, ".pm")) {
2717 SV *pmcsv = Perl_newSVpvf(aTHX_ "%s%c", name, 'c');
2718 char *pmc = SvPV_nolen(pmcsv);
2721 if (PerlLIO_stat(pmc, &pmcstat) < 0) {
2722 fp = PerlIO_open(name, mode);
2725 if (PerlLIO_stat(name, &pmstat) < 0 ||
2726 pmstat.st_mtime < pmcstat.st_mtime)
2728 fp = PerlIO_open(pmc, mode);
2731 fp = PerlIO_open(name, mode);
2734 SvREFCNT_dec(pmcsv);
2737 fp = PerlIO_open(name, mode);
2745 register PERL_CONTEXT *cx;
2750 SV *namesv = Nullsv;
2752 I32 gimme = G_SCALAR;
2753 PerlIO *tryrsfp = 0;
2755 int filter_has_file = 0;
2756 GV *filter_child_proc = 0;
2757 SV *filter_state = 0;
2761 if (SvNIOKp(sv) && !SvPOKp(sv)) {
2762 if (Atof(PL_patchlevel) + 0.00000999 < SvNV(sv))
2763 DIE(aTHX_ "Perl %s required--this is only version %s, stopped",
2764 SvPV(sv,n_a),PL_patchlevel);
2767 name = SvPV(sv, len);
2768 if (!(name && len > 0 && *name))
2769 DIE(aTHX_ "Null filename used");
2770 TAINT_PROPER("require");
2771 if (PL_op->op_type == OP_REQUIRE &&
2772 (svp = hv_fetch(GvHVn(PL_incgv), name, len, 0)) &&
2773 *svp != &PL_sv_undef)
2776 /* prepare to compile file */
2781 (name[1] == '.' && name[2] == '/')))
2783 || (name[0] && name[1] == ':')
2786 || (name[0] == '\\' && name[1] == '\\') /* UNC path */
2789 || (strchr(name,':') || ((*name == '[' || *name == '<') &&
2790 (isALNUM(name[1]) || strchr("$-_]>",name[1]))))
2795 tryrsfp = doopen_pmc(name,PERL_SCRIPT_MODE);
2798 AV *ar = GvAVn(PL_incgv);
2802 if ((unixname = tounixspec(name, Nullch)) != Nullch)
2805 namesv = NEWSV(806, 0);
2806 for (i = 0; i <= AvFILL(ar); i++) {
2807 SV *dirsv = *av_fetch(ar, i, TRUE);
2813 if (SvTYPE(SvRV(loader)) == SVt_PVAV) {
2814 loader = *av_fetch((AV *)SvRV(loader), 0, TRUE);
2817 Perl_sv_setpvf(aTHX_ namesv, "/loader/0x%lx/%s",
2818 SvANY(loader), name);
2819 tryname = SvPVX(namesv);
2830 count = call_sv(loader, G_ARRAY);
2840 if (SvROK(arg) && SvTYPE(SvRV(arg)) == SVt_PVGV) {
2844 if (SvTYPE(arg) == SVt_PVGV) {
2845 IO *io = GvIO((GV *)arg);
2850 tryrsfp = IoIFP(io);
2851 if (IoTYPE(io) == '|') {
2852 /* reading from a child process doesn't
2853 nest -- when returning from reading
2854 the inner module, the outer one is
2855 unreadable (closed?) I've tried to
2856 save the gv to manage the lifespan of
2857 the pipe, but this didn't help. XXX */
2858 filter_child_proc = (GV *)arg;
2859 (void)SvREFCNT_inc(filter_child_proc);
2862 if (IoOFP(io) && IoOFP(io) != IoIFP(io)) {
2863 PerlIO_close(IoOFP(io));
2875 if (SvROK(arg) && SvTYPE(SvRV(arg)) == SVt_PVCV) {
2877 (void)SvREFCNT_inc(filter_sub);
2880 filter_state = SP[i];
2881 (void)SvREFCNT_inc(filter_state);
2885 tryrsfp = PerlIO_open("/dev/null",
2899 filter_has_file = 0;
2900 if (filter_child_proc) {
2901 SvREFCNT_dec(filter_child_proc);
2902 filter_child_proc = 0;
2905 SvREFCNT_dec(filter_state);
2909 SvREFCNT_dec(filter_sub);
2914 char *dir = SvPVx(dirsv, n_a);
2917 if ((unixdir = tounixpath(dir, Nullch)) == Nullch)
2919 sv_setpv(namesv, unixdir);
2920 sv_catpv(namesv, unixname);
2922 Perl_sv_setpvf(aTHX_ namesv, "%s/%s", dir, name);
2924 TAINT_PROPER("require");
2925 tryname = SvPVX(namesv);
2926 tryrsfp = doopen_pmc(tryname, PERL_SCRIPT_MODE);
2928 if (tryname[0] == '.' && tryname[1] == '/')
2936 SAVESPTR(PL_compiling.cop_filegv);
2937 PL_compiling.cop_filegv = gv_fetchfile(tryrsfp ? tryname : name);
2938 SvREFCNT_dec(namesv);
2940 if (PL_op->op_type == OP_REQUIRE) {
2941 char *msgstr = name;
2942 if (namesv) { /* did we lookup @INC? */
2943 SV *msg = sv_2mortal(newSVpv(msgstr,0));
2944 SV *dirmsgsv = NEWSV(0, 0);
2945 AV *ar = GvAVn(PL_incgv);
2947 sv_catpvn(msg, " in @INC", 8);
2948 if (instr(SvPVX(msg), ".h "))
2949 sv_catpv(msg, " (change .h to .ph maybe?)");
2950 if (instr(SvPVX(msg), ".ph "))
2951 sv_catpv(msg, " (did you run h2ph?)");
2952 sv_catpv(msg, " (@INC contains:");
2953 for (i = 0; i <= AvFILL(ar); i++) {
2954 char *dir = SvPVx(*av_fetch(ar, i, TRUE), n_a);
2955 Perl_sv_setpvf(aTHX_ dirmsgsv, " %s", dir);
2956 sv_catsv(msg, dirmsgsv);
2958 sv_catpvn(msg, ")", 1);
2959 SvREFCNT_dec(dirmsgsv);
2960 msgstr = SvPV_nolen(msg);
2962 DIE(aTHX_ "Can't locate %s", msgstr);
2968 SETERRNO(0, SS$_NORMAL);
2970 /* Assume success here to prevent recursive requirement. */
2971 (void)hv_store(GvHVn(PL_incgv), name, strlen(name),
2972 newSVsv(GvSV(PL_compiling.cop_filegv)), 0 );
2976 lex_start(sv_2mortal(newSVpvn("",0)));
2977 SAVEGENERICSV(PL_rsfp_filters);
2978 PL_rsfp_filters = Nullav;
2981 name = savepv(name);
2985 SAVEPPTR(PL_compiling.cop_warnings);
2986 if (PL_dowarn & G_WARN_ALL_ON)
2987 PL_compiling.cop_warnings = WARN_ALL ;
2988 else if (PL_dowarn & G_WARN_ALL_OFF)
2989 PL_compiling.cop_warnings = WARN_NONE ;
2991 PL_compiling.cop_warnings = WARN_STD ;
2993 if (filter_sub || filter_child_proc) {
2994 SV *datasv = filter_add(run_user_filter, Nullsv);
2995 IoLINES(datasv) = filter_has_file;
2996 IoFMT_GV(datasv) = (GV *)filter_child_proc;
2997 IoTOP_GV(datasv) = (GV *)filter_state;
2998 IoBOTTOM_GV(datasv) = (GV *)filter_sub;
3001 /* switch to eval mode */
3002 push_return(PL_op->op_next);
3003 PUSHBLOCK(cx, CXt_EVAL, SP);
3004 PUSHEVAL(cx, name, PL_compiling.cop_filegv);
3006 SAVEI16(PL_compiling.cop_line);
3007 PL_compiling.cop_line = 0;
3011 MUTEX_LOCK(&PL_eval_mutex);
3012 if (PL_eval_owner && PL_eval_owner != thr)
3013 while (PL_eval_owner)
3014 COND_WAIT(&PL_eval_cond, &PL_eval_mutex);
3015 PL_eval_owner = thr;
3016 MUTEX_UNLOCK(&PL_eval_mutex);
3017 #endif /* USE_THREADS */
3018 return DOCATCH(doeval(G_SCALAR, NULL));
3023 return pp_require();
3029 register PERL_CONTEXT *cx;
3031 I32 gimme = GIMME_V, was = PL_sub_generation;
3032 char tmpbuf[TYPE_DIGITS(long) + 12];
3037 if (!SvPV(sv,len) || !len)
3039 TAINT_PROPER("eval");
3045 /* switch to eval mode */
3047 SAVESPTR(PL_compiling.cop_filegv);
3048 sprintf(tmpbuf, "_<(eval %lu)", (unsigned long)++PL_evalseq);
3049 PL_compiling.cop_filegv = gv_fetchfile(tmpbuf+2);
3050 PL_compiling.cop_line = 1;
3051 /* XXX For C<eval "...">s within BEGIN {} blocks, this ends up
3052 deleting the eval's FILEGV from the stash before gv_check() runs
3053 (i.e. before run-time proper). To work around the coredump that
3054 ensues, we always turn GvMULTI_on for any globals that were
3055 introduced within evals. See force_ident(). GSAR 96-10-12 */
3056 safestr = savepv(tmpbuf);
3057 SAVEDELETE(PL_defstash, safestr, strlen(safestr));
3059 PL_hints = PL_op->op_targ;
3060 SAVEPPTR(PL_compiling.cop_warnings);
3061 if (!specialWARN(PL_compiling.cop_warnings)) {
3062 PL_compiling.cop_warnings = newSVsv(PL_compiling.cop_warnings) ;
3063 SAVEFREESV(PL_compiling.cop_warnings) ;
3066 push_return(PL_op->op_next);
3067 PUSHBLOCK(cx, (CXt_EVAL|CXp_REAL), SP);
3068 PUSHEVAL(cx, 0, PL_compiling.cop_filegv);
3070 /* prepare to compile string */
3072 if (PERLDB_LINE && PL_curstash != PL_debstash)
3073 save_lines(GvAV(PL_compiling.cop_filegv), PL_linestr);
3076 MUTEX_LOCK(&PL_eval_mutex);
3077 if (PL_eval_owner && PL_eval_owner != thr)
3078 while (PL_eval_owner)
3079 COND_WAIT(&PL_eval_cond, &PL_eval_mutex);
3080 PL_eval_owner = thr;
3081 MUTEX_UNLOCK(&PL_eval_mutex);
3082 #endif /* USE_THREADS */
3083 ret = doeval(gimme, NULL);
3084 if (PERLDB_INTER && was != PL_sub_generation /* Some subs defined here. */
3085 && ret != PL_op->op_next) { /* Successive compilation. */
3086 strcpy(safestr, "_<(eval )"); /* Anything fake and short. */
3088 return DOCATCH(ret);
3098 register PERL_CONTEXT *cx;
3100 U8 save_flags = PL_op -> op_flags;
3105 retop = pop_return();
3108 if (gimme == G_VOID)
3110 else if (gimme == G_SCALAR) {
3113 if (SvFLAGS(TOPs) & SVs_TEMP)
3116 *MARK = sv_mortalcopy(TOPs);
3120 *MARK = &PL_sv_undef;
3124 /* in case LEAVE wipes old return values */
3125 for (mark = newsp + 1; mark <= SP; mark++) {
3126 if (!(SvFLAGS(*mark) & SVs_TEMP)) {
3127 *mark = sv_mortalcopy(*mark);
3128 TAINT_NOT; /* Each item is independent */
3132 PL_curpm = newpm; /* Don't pop $1 et al till now */
3134 if (AvFILLp(PL_comppad_name) >= 0)
3138 assert(CvDEPTH(PL_compcv) == 1);
3140 CvDEPTH(PL_compcv) = 0;
3143 if (optype == OP_REQUIRE &&
3144 !(gimme == G_SCALAR ? SvTRUE(*SP) : SP > newsp))
3146 /* Unassume the success we assumed earlier. */
3147 char *name = cx->blk_eval.old_name;
3148 (void)hv_delete(GvHVn(PL_incgv), name, strlen(name), G_DISCARD);
3149 retop = Perl_die(aTHX_ "%s did not return a true value", name);
3150 /* die_where() did LEAVE, or we won't be here */
3154 if (!(save_flags & OPf_SPECIAL))
3164 register PERL_CONTEXT *cx;
3165 I32 gimme = GIMME_V;
3170 push_return(cLOGOP->op_other->op_next);
3171 PUSHBLOCK(cx, CXt_EVAL, SP);
3173 PL_eval_root = PL_op; /* Only needed so that goto works right. */
3175 PL_in_eval = EVAL_INEVAL;
3178 return DOCATCH(PL_op->op_next);
3188 register PERL_CONTEXT *cx;
3196 if (gimme == G_VOID)
3198 else if (gimme == G_SCALAR) {
3201 if (SvFLAGS(TOPs) & (SVs_PADTMP|SVs_TEMP))
3204 *MARK = sv_mortalcopy(TOPs);
3208 *MARK = &PL_sv_undef;
3213 /* in case LEAVE wipes old return values */
3214 for (mark = newsp + 1; mark <= SP; mark++) {
3215 if (!(SvFLAGS(*mark) & (SVs_PADTMP|SVs_TEMP))) {
3216 *mark = sv_mortalcopy(*mark);
3217 TAINT_NOT; /* Each item is independent */
3221 PL_curpm = newpm; /* Don't pop $1 et al till now */
3229 S_doparseform(pTHX_ SV *sv)
3232 register char *s = SvPV_force(sv, len);
3233 register char *send = s + len;
3234 register char *base;
3235 register I32 skipspaces = 0;
3238 bool postspace = FALSE;
3246 Perl_croak(aTHX_ "Null picture in formline");
3248 New(804, fops, (send - s)*3+10, U16); /* Almost certainly too long... */
3253 *fpc++ = FF_LINEMARK;
3254 noblank = repeat = FALSE;
3272 case ' ': case '\t':
3283 *fpc++ = FF_LITERAL;
3291 *fpc++ = skipspaces;
3295 *fpc++ = FF_NEWLINE;
3299 arg = fpc - linepc + 1;
3306 *fpc++ = FF_LINEMARK;
3307 noblank = repeat = FALSE;
3316 ischop = s[-1] == '^';
3322 arg = (s - base) - 1;
3324 *fpc++ = FF_LITERAL;
3333 *fpc++ = FF_LINEGLOB;
3335 else if (*s == '#' || (*s == '.' && s[1] == '#')) {
3336 arg = ischop ? 512 : 0;
3346 arg |= 256 + (s - f);
3348 *fpc++ = s - base; /* fieldsize for FETCH */
3349 *fpc++ = FF_DECIMAL;
3354 bool ismore = FALSE;
3357 while (*++s == '>') ;
3358 prespace = FF_SPACE;
3360 else if (*s == '|') {
3361 while (*++s == '|') ;
3362 prespace = FF_HALFSPACE;
3367 while (*++s == '<') ;
3370 if (*s == '.' && s[1] == '.' && s[2] == '.') {
3374 *fpc++ = s - base; /* fieldsize for FETCH */
3376 *fpc++ = ischop ? FF_CHECKCHOP : FF_CHECKNL;
3394 { /* need to jump to the next word */
3396 z = WORD_ALIGN - SvCUR(sv) % WORD_ALIGN;
3397 SvGROW(sv, SvCUR(sv) + z + arg * sizeof(U16) + 4);
3398 s = SvPVX(sv) + SvCUR(sv) + z;
3400 Copy(fops, s, arg, U16);
3402 sv_magic(sv, Nullsv, 'f', Nullch, 0);
3407 * The rest of this file was derived from source code contributed
3410 * NOTE: this code was derived from Tom Horsley's qsort replacement
3411 * and should not be confused with the original code.
3414 /* Copyright (C) Tom Horsley, 1997. All rights reserved.
3416 Permission granted to distribute under the same terms as perl which are
3419 This program is free software; you can redistribute it and/or modify
3420 it under the terms of either:
3422 a) the GNU General Public License as published by the Free
3423 Software Foundation; either version 1, or (at your option) any
3426 b) the "Artistic License" which comes with this Kit.
3428 Details on the perl license can be found in the perl source code which
3429 may be located via the www.perl.com web page.
3431 This is the most wonderfulest possible qsort I can come up with (and
3432 still be mostly portable) My (limited) tests indicate it consistently
3433 does about 20% fewer calls to compare than does the qsort in the Visual
3434 C++ library, other vendors may vary.
3436 Some of the ideas in here can be found in "Algorithms" by Sedgewick,
3437 others I invented myself (or more likely re-invented since they seemed
3438 pretty obvious once I watched the algorithm operate for a while).
3440 Most of this code was written while watching the Marlins sweep the Giants
3441 in the 1997 National League Playoffs - no Braves fans allowed to use this
3442 code (just kidding :-).
3444 I realize that if I wanted to be true to the perl tradition, the only
3445 comment in this file would be something like:
3447 ...they shuffled back towards the rear of the line. 'No, not at the
3448 rear!' the slave-driver shouted. 'Three files up. And stay there...
3450 However, I really needed to violate that tradition just so I could keep
3451 track of what happens myself, not to mention some poor fool trying to
3452 understand this years from now :-).
3455 /* ********************************************************** Configuration */
3457 #ifndef QSORT_ORDER_GUESS
3458 #define QSORT_ORDER_GUESS 2 /* Select doubling version of the netBSD trick */
3461 /* QSORT_MAX_STACK is the largest number of partitions that can be stacked up for
3462 future processing - a good max upper bound is log base 2 of memory size
3463 (32 on 32 bit machines, 64 on 64 bit machines, etc). In reality can
3464 safely be smaller than that since the program is taking up some space and
3465 most operating systems only let you grab some subset of contiguous
3466 memory (not to mention that you are normally sorting data larger than
3467 1 byte element size :-).
3469 #ifndef QSORT_MAX_STACK
3470 #define QSORT_MAX_STACK 32
3473 /* QSORT_BREAK_EVEN is the size of the largest partition we should insertion sort.
3474 Anything bigger and we use qsort. If you make this too small, the qsort
3475 will probably break (or become less efficient), because it doesn't expect
3476 the middle element of a partition to be the same as the right or left -
3477 you have been warned).
3479 #ifndef QSORT_BREAK_EVEN
3480 #define QSORT_BREAK_EVEN 6
3483 /* ************************************************************* Data Types */
3485 /* hold left and right index values of a partition waiting to be sorted (the
3486 partition includes both left and right - right is NOT one past the end or
3487 anything like that).
3489 struct partition_stack_entry {
3492 #ifdef QSORT_ORDER_GUESS
3493 int qsort_break_even;
3497 /* ******************************************************* Shorthand Macros */
3499 /* Note that these macros will be used from inside the qsort function where
3500 we happen to know that the variable 'elt_size' contains the size of an
3501 array element and the variable 'temp' points to enough space to hold a
3502 temp element and the variable 'array' points to the array being sorted
3503 and 'compare' is the pointer to the compare routine.
3505 Also note that there are very many highly architecture specific ways
3506 these might be sped up, but this is simply the most generally portable
3507 code I could think of.
3510 /* Return < 0 == 0 or > 0 as the value of elt1 is < elt2, == elt2, > elt2
3512 #define qsort_cmp(elt1, elt2) \
3513 ((*compare)(aTHXo_ array[elt1], array[elt2]))
3515 #ifdef QSORT_ORDER_GUESS
3516 #define QSORT_NOTICE_SWAP swapped++;
3518 #define QSORT_NOTICE_SWAP
3521 /* swaps contents of array elements elt1, elt2.
3523 #define qsort_swap(elt1, elt2) \
3526 temp = array[elt1]; \
3527 array[elt1] = array[elt2]; \
3528 array[elt2] = temp; \
3531 /* rotate contents of elt1, elt2, elt3 such that elt1 gets elt2, elt2 gets
3532 elt3 and elt3 gets elt1.
3534 #define qsort_rotate(elt1, elt2, elt3) \
3537 temp = array[elt1]; \
3538 array[elt1] = array[elt2]; \
3539 array[elt2] = array[elt3]; \
3540 array[elt3] = temp; \
3543 /* ************************************************************ Debug stuff */
3550 return; /* good place to set a breakpoint */
3553 #define qsort_assert(t) (void)( (t) || (break_here(), 0) )
3556 doqsort_all_asserts(
3560 int (*compare)(const void * elt1, const void * elt2),
3561 int pc_left, int pc_right, int u_left, int u_right)
3565 qsort_assert(pc_left <= pc_right);
3566 qsort_assert(u_right < pc_left);
3567 qsort_assert(pc_right < u_left);
3568 for (i = u_right + 1; i < pc_left; ++i) {
3569 qsort_assert(qsort_cmp(i, pc_left) < 0);
3571 for (i = pc_left; i < pc_right; ++i) {
3572 qsort_assert(qsort_cmp(i, pc_right) == 0);
3574 for (i = pc_right + 1; i < u_left; ++i) {
3575 qsort_assert(qsort_cmp(pc_right, i) < 0);
3579 #define qsort_all_asserts(PC_LEFT, PC_RIGHT, U_LEFT, U_RIGHT) \
3580 doqsort_all_asserts(array, num_elts, elt_size, compare, \
3581 PC_LEFT, PC_RIGHT, U_LEFT, U_RIGHT)
3585 #define qsort_assert(t) ((void)0)
3587 #define qsort_all_asserts(PC_LEFT, PC_RIGHT, U_LEFT, U_RIGHT) ((void)0)
3591 /* ****************************************************************** qsort */
3594 S_qsortsv(pTHX_ SV ** array, size_t num_elts, SVCOMPARE_t compare)
3598 struct partition_stack_entry partition_stack[QSORT_MAX_STACK];
3599 int next_stack_entry = 0;
3603 #ifdef QSORT_ORDER_GUESS
3604 int qsort_break_even;
3608 /* Make sure we actually have work to do.
3610 if (num_elts <= 1) {
3614 /* Setup the initial partition definition and fall into the sorting loop
3617 part_right = (int)(num_elts - 1);
3618 #ifdef QSORT_ORDER_GUESS
3619 qsort_break_even = QSORT_BREAK_EVEN;
3621 #define qsort_break_even QSORT_BREAK_EVEN
3624 if ((part_right - part_left) >= qsort_break_even) {
3625 /* OK, this is gonna get hairy, so lets try to document all the
3626 concepts and abbreviations and variables and what they keep
3629 pc: pivot chunk - the set of array elements we accumulate in the
3630 middle of the partition, all equal in value to the original
3631 pivot element selected. The pc is defined by:
3633 pc_left - the leftmost array index of the pc
3634 pc_right - the rightmost array index of the pc
3636 we start with pc_left == pc_right and only one element
3637 in the pivot chunk (but it can grow during the scan).
3639 u: uncompared elements - the set of elements in the partition
3640 we have not yet compared to the pivot value. There are two
3641 uncompared sets during the scan - one to the left of the pc
3642 and one to the right.
3644 u_right - the rightmost index of the left side's uncompared set
3645 u_left - the leftmost index of the right side's uncompared set
3647 The leftmost index of the left sides's uncompared set
3648 doesn't need its own variable because it is always defined
3649 by the leftmost edge of the whole partition (part_left). The
3650 same goes for the rightmost edge of the right partition
3653 We know there are no uncompared elements on the left once we
3654 get u_right < part_left and no uncompared elements on the
3655 right once u_left > part_right. When both these conditions
3656 are met, we have completed the scan of the partition.
3658 Any elements which are between the pivot chunk and the
3659 uncompared elements should be less than the pivot value on
3660 the left side and greater than the pivot value on the right
3661 side (in fact, the goal of the whole algorithm is to arrange
3662 for that to be true and make the groups of less-than and
3663 greater-then elements into new partitions to sort again).
3665 As you marvel at the complexity of the code and wonder why it
3666 has to be so confusing. Consider some of the things this level
3667 of confusion brings:
3669 Once I do a compare, I squeeze every ounce of juice out of it. I
3670 never do compare calls I don't have to do, and I certainly never
3673 I also never swap any elements unless I can prove there is a
3674 good reason. Many sort algorithms will swap a known value with
3675 an uncompared value just to get things in the right place (or
3676 avoid complexity :-), but that uncompared value, once it gets
3677 compared, may then have to be swapped again. A lot of the
3678 complexity of this code is due to the fact that it never swaps
3679 anything except compared values, and it only swaps them when the
3680 compare shows they are out of position.
3682 int pc_left, pc_right;
3683 int u_right, u_left;
3687 pc_left = ((part_left + part_right) / 2);
3689 u_right = pc_left - 1;
3690 u_left = pc_right + 1;
3692 /* Qsort works best when the pivot value is also the median value
3693 in the partition (unfortunately you can't find the median value
3694 without first sorting :-), so to give the algorithm a helping
3695 hand, we pick 3 elements and sort them and use the median value
3696 of that tiny set as the pivot value.
3698 Some versions of qsort like to use the left middle and right as
3699 the 3 elements to sort so they can insure the ends of the
3700 partition will contain values which will stop the scan in the
3701 compare loop, but when you have to call an arbitrarily complex
3702 routine to do a compare, its really better to just keep track of
3703 array index values to know when you hit the edge of the
3704 partition and avoid the extra compare. An even better reason to
3705 avoid using a compare call is the fact that you can drop off the
3706 edge of the array if someone foolishly provides you with an
3707 unstable compare function that doesn't always provide consistent
3710 So, since it is simpler for us to compare the three adjacent
3711 elements in the middle of the partition, those are the ones we
3712 pick here (conveniently pointed at by u_right, pc_left, and
3713 u_left). The values of the left, center, and right elements
3714 are refered to as l c and r in the following comments.
3717 #ifdef QSORT_ORDER_GUESS
3720 s = qsort_cmp(u_right, pc_left);
3723 s = qsort_cmp(pc_left, u_left);
3724 /* if l < c, c < r - already in order - nothing to do */
3726 /* l < c, c == r - already in order, pc grows */
3728 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3730 /* l < c, c > r - need to know more */
3731 s = qsort_cmp(u_right, u_left);
3733 /* l < c, c > r, l < r - swap c & r to get ordered */
3734 qsort_swap(pc_left, u_left);
3735 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3736 } else if (s == 0) {
3737 /* l < c, c > r, l == r - swap c&r, grow pc */
3738 qsort_swap(pc_left, u_left);
3740 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3742 /* l < c, c > r, l > r - make lcr into rlc to get ordered */
3743 qsort_rotate(pc_left, u_right, u_left);
3744 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3747 } else if (s == 0) {
3749 s = qsort_cmp(pc_left, u_left);
3751 /* l == c, c < r - already in order, grow pc */
3753 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3754 } else if (s == 0) {
3755 /* l == c, c == r - already in order, grow pc both ways */
3758 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3760 /* l == c, c > r - swap l & r, grow pc */
3761 qsort_swap(u_right, u_left);
3763 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3767 s = qsort_cmp(pc_left, u_left);
3769 /* l > c, c < r - need to know more */
3770 s = qsort_cmp(u_right, u_left);
3772 /* l > c, c < r, l < r - swap l & c to get ordered */
3773 qsort_swap(u_right, pc_left);
3774 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3775 } else if (s == 0) {
3776 /* l > c, c < r, l == r - swap l & c, grow pc */
3777 qsort_swap(u_right, pc_left);
3779 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3781 /* l > c, c < r, l > r - rotate lcr into crl to order */
3782 qsort_rotate(u_right, pc_left, u_left);
3783 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3785 } else if (s == 0) {
3786 /* l > c, c == r - swap ends, grow pc */
3787 qsort_swap(u_right, u_left);
3789 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3791 /* l > c, c > r - swap ends to get in order */
3792 qsort_swap(u_right, u_left);
3793 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3796 /* We now know the 3 middle elements have been compared and
3797 arranged in the desired order, so we can shrink the uncompared
3802 qsort_all_asserts(pc_left, pc_right, u_left, u_right);
3804 /* The above massive nested if was the simple part :-). We now have
3805 the middle 3 elements ordered and we need to scan through the
3806 uncompared sets on either side, swapping elements that are on
3807 the wrong side or simply shuffling equal elements around to get
3808 all equal elements into the pivot chunk.
3812 int still_work_on_left;
3813 int still_work_on_right;
3815 /* Scan the uncompared values on the left. If I find a value
3816 equal to the pivot value, move it over so it is adjacent to
3817 the pivot chunk and expand the pivot chunk. If I find a value
3818 less than the pivot value, then just leave it - its already
3819 on the correct side of the partition. If I find a greater
3820 value, then stop the scan.
3822 while (still_work_on_left = (u_right >= part_left)) {
3823 s = qsort_cmp(u_right, pc_left);
3826 } else if (s == 0) {
3828 if (pc_left != u_right) {
3829 qsort_swap(u_right, pc_left);
3835 qsort_assert(u_right < pc_left);
3836 qsort_assert(pc_left <= pc_right);
3837 qsort_assert(qsort_cmp(u_right + 1, pc_left) <= 0);
3838 qsort_assert(qsort_cmp(pc_left, pc_right) == 0);
3841 /* Do a mirror image scan of uncompared values on the right
3843 while (still_work_on_right = (u_left <= part_right)) {
3844 s = qsort_cmp(pc_right, u_left);
3847 } else if (s == 0) {
3849 if (pc_right != u_left) {
3850 qsort_swap(pc_right, u_left);
3856 qsort_assert(u_left > pc_right);
3857 qsort_assert(pc_left <= pc_right);
3858 qsort_assert(qsort_cmp(pc_right, u_left - 1) <= 0);
3859 qsort_assert(qsort_cmp(pc_left, pc_right) == 0);
3862 if (still_work_on_left) {
3863 /* I know I have a value on the left side which needs to be
3864 on the right side, but I need to know more to decide
3865 exactly the best thing to do with it.
3867 if (still_work_on_right) {
3868 /* I know I have values on both side which are out of
3869 position. This is a big win because I kill two birds
3870 with one swap (so to speak). I can advance the
3871 uncompared pointers on both sides after swapping both
3872 of them into the right place.
3874 qsort_swap(u_right, u_left);
3877 qsort_all_asserts(pc_left, pc_right, u_left, u_right);
3879 /* I have an out of position value on the left, but the
3880 right is fully scanned, so I "slide" the pivot chunk
3881 and any less-than values left one to make room for the
3882 greater value over on the right. If the out of position
3883 value is immediately adjacent to the pivot chunk (there
3884 are no less-than values), I can do that with a swap,
3885 otherwise, I have to rotate one of the less than values
3886 into the former position of the out of position value
3887 and the right end of the pivot chunk into the left end
3891 if (pc_left == u_right) {
3892 qsort_swap(u_right, pc_right);
3893 qsort_all_asserts(pc_left, pc_right-1, u_left, u_right-1);
3895 qsort_rotate(u_right, pc_left, pc_right);
3896 qsort_all_asserts(pc_left, pc_right-1, u_left, u_right-1);
3901 } else if (still_work_on_right) {
3902 /* Mirror image of complex case above: I have an out of
3903 position value on the right, but the left is fully
3904 scanned, so I need to shuffle things around to make room
3905 for the right value on the left.
3908 if (pc_right == u_left) {
3909 qsort_swap(u_left, pc_left);
3910 qsort_all_asserts(pc_left+1, pc_right, u_left+1, u_right);
3912 qsort_rotate(pc_right, pc_left, u_left);
3913 qsort_all_asserts(pc_left+1, pc_right, u_left+1, u_right);
3918 /* No more scanning required on either side of partition,
3919 break out of loop and figure out next set of partitions
3925 /* The elements in the pivot chunk are now in the right place. They
3926 will never move or be compared again. All I have to do is decide
3927 what to do with the stuff to the left and right of the pivot
3930 Notes on the QSORT_ORDER_GUESS ifdef code:
3932 1. If I just built these partitions without swapping any (or
3933 very many) elements, there is a chance that the elements are
3934 already ordered properly (being properly ordered will
3935 certainly result in no swapping, but the converse can't be
3938 2. A (properly written) insertion sort will run faster on
3939 already ordered data than qsort will.
3941 3. Perhaps there is some way to make a good guess about
3942 switching to an insertion sort earlier than partition size 6
3943 (for instance - we could save the partition size on the stack
3944 and increase the size each time we find we didn't swap, thus
3945 switching to insertion sort earlier for partitions with a
3946 history of not swapping).
3948 4. Naturally, if I just switch right away, it will make
3949 artificial benchmarks with pure ascending (or descending)
3950 data look really good, but is that a good reason in general?
3954 #ifdef QSORT_ORDER_GUESS
3956 #if QSORT_ORDER_GUESS == 1
3957 qsort_break_even = (part_right - part_left) + 1;
3959 #if QSORT_ORDER_GUESS == 2
3960 qsort_break_even *= 2;
3962 #if QSORT_ORDER_GUESS == 3
3963 int prev_break = qsort_break_even;
3964 qsort_break_even *= qsort_break_even;
3965 if (qsort_break_even < prev_break) {
3966 qsort_break_even = (part_right - part_left) + 1;
3970 qsort_break_even = QSORT_BREAK_EVEN;
3974 if (part_left < pc_left) {
3975 /* There are elements on the left which need more processing.
3976 Check the right as well before deciding what to do.
3978 if (pc_right < part_right) {
3979 /* We have two partitions to be sorted. Stack the biggest one
3980 and process the smallest one on the next iteration. This
3981 minimizes the stack height by insuring that any additional
3982 stack entries must come from the smallest partition which
3983 (because it is smallest) will have the fewest
3984 opportunities to generate additional stack entries.
3986 if ((part_right - pc_right) > (pc_left - part_left)) {
3987 /* stack the right partition, process the left */
3988 partition_stack[next_stack_entry].left = pc_right + 1;
3989 partition_stack[next_stack_entry].right = part_right;
3990 #ifdef QSORT_ORDER_GUESS
3991 partition_stack[next_stack_entry].qsort_break_even = qsort_break_even;
3993 part_right = pc_left - 1;
3995 /* stack the left partition, process the right */
3996 partition_stack[next_stack_entry].left = part_left;
3997 partition_stack[next_stack_entry].right = pc_left - 1;
3998 #ifdef QSORT_ORDER_GUESS
3999 partition_stack[next_stack_entry].qsort_break_even = qsort_break_even;
4001 part_left = pc_right + 1;
4003 qsort_assert(next_stack_entry < QSORT_MAX_STACK);
4006 /* The elements on the left are the only remaining elements
4007 that need sorting, arrange for them to be processed as the
4010 part_right = pc_left - 1;
4012 } else if (pc_right < part_right) {
4013 /* There is only one chunk on the right to be sorted, make it
4014 the new partition and loop back around.
4016 part_left = pc_right + 1;
4018 /* This whole partition wound up in the pivot chunk, so
4019 we need to get a new partition off the stack.
4021 if (next_stack_entry == 0) {
4022 /* the stack is empty - we are done */
4026 part_left = partition_stack[next_stack_entry].left;
4027 part_right = partition_stack[next_stack_entry].right;
4028 #ifdef QSORT_ORDER_GUESS
4029 qsort_break_even = partition_stack[next_stack_entry].qsort_break_even;
4033 /* This partition is too small to fool with qsort complexity, just
4034 do an ordinary insertion sort to minimize overhead.
4037 /* Assume 1st element is in right place already, and start checking
4038 at 2nd element to see where it should be inserted.
4040 for (i = part_left + 1; i <= part_right; ++i) {
4042 /* Scan (backwards - just in case 'i' is already in right place)
4043 through the elements already sorted to see if the ith element
4044 belongs ahead of one of them.
4046 for (j = i - 1; j >= part_left; --j) {
4047 if (qsort_cmp(i, j) >= 0) {
4048 /* i belongs right after j
4055 /* Looks like we really need to move some things
4059 for (k = i - 1; k >= j; --k)
4060 array[k + 1] = array[k];
4065 /* That partition is now sorted, grab the next one, or get out
4066 of the loop if there aren't any more.
4069 if (next_stack_entry == 0) {
4070 /* the stack is empty - we are done */
4074 part_left = partition_stack[next_stack_entry].left;
4075 part_right = partition_stack[next_stack_entry].right;
4076 #ifdef QSORT_ORDER_GUESS
4077 qsort_break_even = partition_stack[next_stack_entry].qsort_break_even;
4082 /* Believe it or not, the array is sorted at this point! */
4095 sortcv(pTHXo_ SV *a, SV *b)
4098 I32 oldsaveix = PL_savestack_ix;
4099 I32 oldscopeix = PL_scopestack_ix;
4101 GvSV(PL_firstgv) = a;
4102 GvSV(PL_secondgv) = b;
4103 PL_stack_sp = PL_stack_base;
4106 if (PL_stack_sp != PL_stack_base + 1)
4107 Perl_croak(aTHX_ "Sort subroutine didn't return single value");
4108 if (!SvNIOKp(*PL_stack_sp))
4109 Perl_croak(aTHX_ "Sort subroutine didn't return a numeric value");
4110 result = SvIV(*PL_stack_sp);
4111 while (PL_scopestack_ix > oldscopeix) {
4114 leave_scope(oldsaveix);
4120 sv_ncmp(pTHXo_ SV *a, SV *b)
4124 return nv1 < nv2 ? -1 : nv1 > nv2 ? 1 : 0;
4128 sv_i_ncmp(pTHXo_ SV *a, SV *b)
4132 return iv1 < iv2 ? -1 : iv1 > iv2 ? 1 : 0;
4134 #define tryCALL_AMAGICbin(left,right,meth,svp) STMT_START { \
4136 if (PL_amagic_generation) { \
4137 if (SvAMAGIC(left)||SvAMAGIC(right))\
4138 *svp = amagic_call(left, \
4146 amagic_ncmp(pTHXo_ register SV *a, register SV *b)
4149 tryCALL_AMAGICbin(a,b,ncmp,&tmpsv);
4154 I32 i = SvIVX(tmpsv);
4164 return sv_ncmp(aTHXo_ a, b);
4168 amagic_i_ncmp(pTHXo_ register SV *a, register SV *b)
4171 tryCALL_AMAGICbin(a,b,ncmp,&tmpsv);
4176 I32 i = SvIVX(tmpsv);
4186 return sv_i_ncmp(aTHXo_ a, b);
4190 amagic_cmp(pTHXo_ register SV *str1, register SV *str2)
4193 tryCALL_AMAGICbin(str1,str2,scmp,&tmpsv);
4198 I32 i = SvIVX(tmpsv);
4208 return sv_cmp(str1, str2);
4212 amagic_cmp_locale(pTHXo_ register SV *str1, register SV *str2)
4215 tryCALL_AMAGICbin(str1,str2,scmp,&tmpsv);
4220 I32 i = SvIVX(tmpsv);
4230 return sv_cmp_locale(str1, str2);
4234 run_user_filter(pTHXo_ int idx, SV *buf_sv, int maxlen)
4236 SV *datasv = FILTER_DATA(idx);
4237 int filter_has_file = IoLINES(datasv);
4238 GV *filter_child_proc = (GV *)IoFMT_GV(datasv);
4239 SV *filter_state = (SV *)IoTOP_GV(datasv);
4240 SV *filter_sub = (SV *)IoBOTTOM_GV(datasv);
4243 /* I was having segfault trouble under Linux 2.2.5 after a
4244 parse error occured. (Had to hack around it with a test
4245 for PL_error_count == 0.) Solaris doesn't segfault --
4246 not sure where the trouble is yet. XXX */
4248 if (filter_has_file) {
4249 len = FILTER_READ(idx+1, buf_sv, maxlen);
4252 if (filter_sub && len >= 0) {
4263 PUSHs(sv_2mortal(newSViv(maxlen)));
4265 PUSHs(filter_state);
4268 count = call_sv(filter_sub, G_SCALAR);
4284 IoLINES(datasv) = 0;
4285 if (filter_child_proc) {
4286 SvREFCNT_dec(filter_child_proc);
4287 IoFMT_GV(datasv) = Nullgv;
4290 SvREFCNT_dec(filter_state);
4291 IoTOP_GV(datasv) = Nullgv;
4294 SvREFCNT_dec(filter_sub);
4295 IoBOTTOM_GV(datasv) = Nullgv;
4297 filter_del(run_user_filter);
4306 sv_cmp_locale_static(pTHXo_ register SV *str1, register SV *str2)
4308 return sv_cmp_locale(str1, str2);
4312 sv_cmp_static(pTHXo_ register SV *str1, register SV *str2)
4314 return sv_cmp(str1, str2);
4317 #endif /* PERL_OBJECT */