3 * Copyright (c) 1991-1999, Larry Wall
5 * You may distribute under the terms of either the GNU General Public
6 * License or the Artistic License, as specified in the README file.
11 * Now far ahead the Road has gone,
12 * And I must follow, if I can,
13 * Pursuing it with eager feet,
14 * Until it joins some larger way
15 * Where many paths and errands meet.
16 * And whither then? I cannot say.
20 #define PERL_IN_PP_CTL_C
24 #define WORD_ALIGN sizeof(U16)
27 #define DOCATCH(o) ((CATCH_GET == TRUE) ? docatch(o) : (o))
29 static I32 sortcv(pTHXo_ SV *a, SV *b);
30 static I32 sv_ncmp(pTHXo_ SV *a, SV *b);
31 static I32 sv_i_ncmp(pTHXo_ SV *a, SV *b);
32 static I32 amagic_ncmp(pTHXo_ SV *a, SV *b);
33 static I32 amagic_i_ncmp(pTHXo_ SV *a, SV *b);
34 static I32 amagic_cmp(pTHXo_ SV *a, SV *b);
35 static I32 amagic_cmp_locale(pTHXo_ SV *a, SV *b);
36 static I32 run_user_filter(pTHXo_ int idx, SV *buf_sv, int maxlen);
39 static I32 sv_cmp_static(pTHXo_ SV *a, SV *b);
40 static I32 sv_cmp_locale_static(pTHXo_ SV *a, SV *b);
42 #define sv_cmp_static Perl_sv_cmp
43 #define sv_cmp_locale_static Perl_sv_cmp_locale
52 cxix = dopoptosub(cxstack_ix);
56 switch (cxstack[cxix].blk_gimme) {
73 /* XXXX Should store the old value to allow for tie/overload - and
74 restore in regcomp, where marked with XXXX. */
82 register PMOP *pm = (PMOP*)cLOGOP->op_other;
86 MAGIC *mg = Null(MAGIC*);
90 SV *sv = SvRV(tmpstr);
92 mg = mg_find(sv, 'r');
95 regexp *re = (regexp *)mg->mg_obj;
96 ReREFCNT_dec(pm->op_pmregexp);
97 pm->op_pmregexp = ReREFCNT_inc(re);
100 t = SvPV(tmpstr, len);
102 /* Check against the last compiled regexp. */
103 if (!pm->op_pmregexp || !pm->op_pmregexp->precomp ||
104 pm->op_pmregexp->prelen != len ||
105 memNE(pm->op_pmregexp->precomp, t, len))
107 if (pm->op_pmregexp) {
108 ReREFCNT_dec(pm->op_pmregexp);
109 pm->op_pmregexp = Null(REGEXP*); /* crucial if regcomp aborts */
111 if (PL_op->op_flags & OPf_SPECIAL)
112 PL_reginterp_cnt = I32_MAX; /* Mark as safe. */
114 pm->op_pmflags = pm->op_pmpermflags; /* reset case sensitivity */
115 pm->op_pmregexp = CALLREGCOMP(aTHX_ t, t + len, pm);
116 PL_reginterp_cnt = 0; /* XXXX Be extra paranoid - needed
117 inside tie/overload accessors. */
121 #ifndef INCOMPLETE_TAINTS
124 pm->op_pmdynflags |= PMdf_TAINTED;
126 pm->op_pmdynflags &= ~PMdf_TAINTED;
130 if (!pm->op_pmregexp->prelen && PL_curpm)
132 else if (strEQ("\\s+", pm->op_pmregexp->precomp))
133 pm->op_pmflags |= PMf_WHITE;
135 if (pm->op_pmflags & PMf_KEEP) {
136 pm->op_private &= ~OPpRUNTIME; /* no point compiling again */
137 cLOGOP->op_first->op_next = PL_op->op_next;
145 register PMOP *pm = (PMOP*) cLOGOP->op_other;
146 register PERL_CONTEXT *cx = &cxstack[cxstack_ix];
147 register SV *dstr = cx->sb_dstr;
148 register char *s = cx->sb_s;
149 register char *m = cx->sb_m;
150 char *orig = cx->sb_orig;
151 register REGEXP *rx = cx->sb_rx;
153 rxres_restore(&cx->sb_rxres, rx);
155 if (cx->sb_iters++) {
156 if (cx->sb_iters > cx->sb_maxiters)
157 DIE(aTHX_ "Substitution loop");
159 if (!(cx->sb_rxtainted & 2) && SvTAINTED(TOPs))
160 cx->sb_rxtainted |= 2;
161 sv_catsv(dstr, POPs);
164 if (cx->sb_once || !CALLREGEXEC(aTHX_ rx, s, cx->sb_strend, orig,
165 s == m, cx->sb_targ, NULL,
166 ((cx->sb_rflags & REXEC_COPY_STR)
167 ? (REXEC_IGNOREPOS|REXEC_NOT_FIRST)
168 : (REXEC_COPY_STR|REXEC_IGNOREPOS|REXEC_NOT_FIRST))))
170 SV *targ = cx->sb_targ;
171 sv_catpvn(dstr, s, cx->sb_strend - s);
173 cx->sb_rxtainted |= RX_MATCH_TAINTED(rx);
175 (void)SvOOK_off(targ);
176 Safefree(SvPVX(targ));
177 SvPVX(targ) = SvPVX(dstr);
178 SvCUR_set(targ, SvCUR(dstr));
179 SvLEN_set(targ, SvLEN(dstr));
183 TAINT_IF(cx->sb_rxtainted & 1);
184 PUSHs(sv_2mortal(newSViv((I32)cx->sb_iters - 1)));
186 (void)SvPOK_only(targ);
187 TAINT_IF(cx->sb_rxtainted);
191 LEAVE_SCOPE(cx->sb_oldsave);
193 RETURNOP(pm->op_next);
196 if (RX_MATCH_COPIED(rx) && rx->subbeg != orig) {
199 cx->sb_orig = orig = rx->subbeg;
201 cx->sb_strend = s + (cx->sb_strend - m);
203 cx->sb_m = m = rx->startp[0] + orig;
204 sv_catpvn(dstr, s, m-s);
205 cx->sb_s = rx->endp[0] + orig;
206 cx->sb_rxtainted |= RX_MATCH_TAINTED(rx);
207 rxres_save(&cx->sb_rxres, rx);
208 RETURNOP(pm->op_pmreplstart);
212 Perl_rxres_save(pTHX_ void **rsp, REGEXP *rx)
217 if (!p || p[1] < rx->nparens) {
218 i = 6 + rx->nparens * 2;
226 *p++ = PTR2UV(RX_MATCH_COPIED(rx) ? rx->subbeg : Nullch);
227 RX_MATCH_COPIED_off(rx);
231 *p++ = PTR2UV(rx->subbeg);
232 *p++ = (UV)rx->sublen;
233 for (i = 0; i <= rx->nparens; ++i) {
234 *p++ = (UV)rx->startp[i];
235 *p++ = (UV)rx->endp[i];
240 Perl_rxres_restore(pTHX_ void **rsp, REGEXP *rx)
245 if (RX_MATCH_COPIED(rx))
246 Safefree(rx->subbeg);
247 RX_MATCH_COPIED_set(rx, *p);
252 rx->subbeg = INT2PTR(char*,*p++);
253 rx->sublen = (I32)(*p++);
254 for (i = 0; i <= rx->nparens; ++i) {
255 rx->startp[i] = (I32)(*p++);
256 rx->endp[i] = (I32)(*p++);
261 Perl_rxres_free(pTHX_ void **rsp)
266 Safefree(INT2PTR(char*,*p));
274 djSP; dMARK; dORIGMARK;
275 register SV *tmpForm = *++MARK;
287 bool chopspace = (strchr(PL_chopset, ' ') != Nullch);
293 STRLEN fudge = SvCUR(tmpForm) * (IN_UTF8 ? 3 : 1) + 1;
295 if (!SvMAGICAL(tmpForm) || !SvCOMPILED(tmpForm)) {
296 SvREADONLY_off(tmpForm);
297 doparseform(tmpForm);
300 SvPV_force(PL_formtarget, len);
301 t = SvGROW(PL_formtarget, len + fudge + 1); /* XXX SvCUR bad */
303 f = SvPV(tmpForm, len);
304 /* need to jump to the next word */
305 s = f + len + WORD_ALIGN - SvCUR(tmpForm) % WORD_ALIGN;
314 case FF_LITERAL: arg = fpc[1]; name = "LITERAL"; break;
315 case FF_BLANK: arg = fpc[1]; name = "BLANK"; break;
316 case FF_SKIP: arg = fpc[1]; name = "SKIP"; break;
317 case FF_FETCH: arg = fpc[1]; name = "FETCH"; break;
318 case FF_DECIMAL: arg = fpc[1]; name = "DECIMAL"; break;
320 case FF_CHECKNL: name = "CHECKNL"; break;
321 case FF_CHECKCHOP: name = "CHECKCHOP"; break;
322 case FF_SPACE: name = "SPACE"; break;
323 case FF_HALFSPACE: name = "HALFSPACE"; break;
324 case FF_ITEM: name = "ITEM"; break;
325 case FF_CHOP: name = "CHOP"; break;
326 case FF_LINEGLOB: name = "LINEGLOB"; break;
327 case FF_NEWLINE: name = "NEWLINE"; break;
328 case FF_MORE: name = "MORE"; break;
329 case FF_LINEMARK: name = "LINEMARK"; break;
330 case FF_END: name = "END"; break;
333 PerlIO_printf(Perl_debug_log, "%-16s%ld\n", name, (long) arg);
335 PerlIO_printf(Perl_debug_log, "%-16s\n", name);
363 if (ckWARN(WARN_SYNTAX))
364 Perl_warner(aTHX_ WARN_SYNTAX, "Not enough format arguments");
369 item = s = SvPV(sv, len);
372 itemsize = sv_len_utf8(sv);
373 if (itemsize != len) {
375 if (itemsize > fieldsize) {
376 itemsize = fieldsize;
377 itembytes = itemsize;
378 sv_pos_u2b(sv, &itembytes, 0);
382 send = chophere = s + itembytes;
391 sv_pos_b2u(sv, &itemsize);
395 if (itemsize > fieldsize)
396 itemsize = fieldsize;
397 send = chophere = s + itemsize;
409 item = s = SvPV(sv, len);
412 itemsize = sv_len_utf8(sv);
413 if (itemsize != len) {
415 if (itemsize <= fieldsize) {
416 send = chophere = s + itemsize;
427 itemsize = fieldsize;
428 itembytes = itemsize;
429 sv_pos_u2b(sv, &itembytes, 0);
430 send = chophere = s + itembytes;
431 while (s < send || (s == send && isSPACE(*s))) {
441 if (strchr(PL_chopset, *s))
446 itemsize = chophere - item;
447 sv_pos_b2u(sv, &itemsize);
452 if (itemsize <= fieldsize) {
453 send = chophere = s + itemsize;
464 itemsize = fieldsize;
465 send = chophere = s + itemsize;
466 while (s < send || (s == send && isSPACE(*s))) {
476 if (strchr(PL_chopset, *s))
481 itemsize = chophere - item;
486 arg = fieldsize - itemsize;
495 arg = fieldsize - itemsize;
510 switch (UTF8SKIP(s)) {
521 if ( !((*t++ = *s++) & ~31) )
529 int ch = *t++ = *s++;
532 if ( !((*t++ = *s++) & ~31) )
541 while (*s && isSPACE(*s))
548 item = s = SvPV(sv, len);
561 SvCUR_set(PL_formtarget, t - SvPVX(PL_formtarget));
562 sv_catpvn(PL_formtarget, item, itemsize);
563 SvGROW(PL_formtarget, SvCUR(PL_formtarget) + fudge + 1);
564 t = SvPVX(PL_formtarget) + SvCUR(PL_formtarget);
569 /* If the field is marked with ^ and the value is undefined,
572 if ((arg & 512) && !SvOK(sv)) {
580 /* Formats aren't yet marked for locales, so assume "yes". */
582 RESTORE_NUMERIC_LOCAL();
583 #if defined(USE_LONG_DOUBLE)
585 sprintf(t, "%#*.*" PERL_PRIfldbl,
586 (int) fieldsize, (int) arg & 255, value);
588 sprintf(t, "%*.0" PERL_PRIfldbl, (int) fieldsize, value);
593 (int) fieldsize, (int) arg & 255, value);
596 (int) fieldsize, value);
599 RESTORE_NUMERIC_STANDARD();
606 while (t-- > linemark && *t == ' ') ;
614 if (arg) { /* repeat until fields exhausted? */
616 SvCUR_set(PL_formtarget, t - SvPVX(PL_formtarget));
617 lines += FmLINES(PL_formtarget);
620 if (strnEQ(linemark, linemark - arg, arg))
621 DIE(aTHX_ "Runaway format");
623 FmLINES(PL_formtarget) = lines;
625 RETURNOP(cLISTOP->op_first);
638 while (*s && isSPACE(*s) && s < send)
642 arg = fieldsize - itemsize;
649 if (strnEQ(s," ",3)) {
650 while (s > SvPVX(PL_formtarget) && isSPACE(s[-1]))
661 SvCUR_set(PL_formtarget, t - SvPVX(PL_formtarget));
662 FmLINES(PL_formtarget) += lines;
674 if (PL_stack_base + *PL_markstack_ptr == SP) {
676 if (GIMME_V == G_SCALAR)
677 XPUSHs(sv_2mortal(newSViv(0)));
678 RETURNOP(PL_op->op_next->op_next);
680 PL_stack_sp = PL_stack_base + *PL_markstack_ptr + 1;
681 pp_pushmark(); /* push dst */
682 pp_pushmark(); /* push src */
683 ENTER; /* enter outer scope */
686 /* SAVE_DEFSV does *not* suffice here for USE_THREADS */
688 ENTER; /* enter inner scope */
691 src = PL_stack_base[*PL_markstack_ptr];
696 if (PL_op->op_type == OP_MAPSTART)
697 pp_pushmark(); /* push top */
698 return ((LOGOP*)PL_op->op_next)->op_other;
703 DIE(aTHX_ "panic: mapstart"); /* uses grepstart */
709 I32 diff = (SP - PL_stack_base) - *PL_markstack_ptr;
715 ++PL_markstack_ptr[-1];
717 if (diff > PL_markstack_ptr[-1] - PL_markstack_ptr[-2]) {
718 shift = diff - (PL_markstack_ptr[-1] - PL_markstack_ptr[-2]);
719 count = (SP - PL_stack_base) - PL_markstack_ptr[-1] + 2;
724 PL_markstack_ptr[-1] += shift;
725 *PL_markstack_ptr += shift;
729 dst = PL_stack_base + (PL_markstack_ptr[-2] += diff) - 1;
732 *dst-- = SvTEMP(TOPs) ? POPs : sv_mortalcopy(POPs);
734 LEAVE; /* exit inner scope */
737 if (PL_markstack_ptr[-1] > *PL_markstack_ptr) {
741 (void)POPMARK; /* pop top */
742 LEAVE; /* exit outer scope */
743 (void)POPMARK; /* pop src */
744 items = --*PL_markstack_ptr - PL_markstack_ptr[-1];
745 (void)POPMARK; /* pop dst */
746 SP = PL_stack_base + POPMARK; /* pop original mark */
747 if (gimme == G_SCALAR) {
751 else if (gimme == G_ARRAY)
758 ENTER; /* enter inner scope */
761 src = PL_stack_base[PL_markstack_ptr[-1]];
765 RETURNOP(cLOGOP->op_other);
771 djSP; dMARK; dORIGMARK;
773 SV **myorigmark = ORIGMARK;
779 OP* nextop = PL_op->op_next;
782 if (gimme != G_ARRAY) {
788 SAVEPPTR(PL_sortcop);
789 if (PL_op->op_flags & OPf_STACKED) {
790 if (PL_op->op_flags & OPf_SPECIAL) {
791 OP *kid = cLISTOP->op_first->op_sibling; /* pass pushmark */
792 kid = kUNOP->op_first; /* pass rv2gv */
793 kid = kUNOP->op_first; /* pass leave */
794 PL_sortcop = kid->op_next;
795 stash = PL_curcop->cop_stash;
798 cv = sv_2cv(*++MARK, &stash, &gv, 0);
799 if (!(cv && CvROOT(cv))) {
801 SV *tmpstr = sv_newmortal();
802 gv_efullname3(tmpstr, gv, Nullch);
803 if (cv && CvXSUB(cv))
804 DIE(aTHX_ "Xsub \"%s\" called in sort", SvPVX(tmpstr));
805 DIE(aTHX_ "Undefined sort subroutine \"%s\" called",
810 DIE(aTHX_ "Xsub called in sort");
811 DIE(aTHX_ "Undefined subroutine in sort");
813 DIE(aTHX_ "Not a CODE reference in sort");
815 PL_sortcop = CvSTART(cv);
816 SAVESPTR(CvROOT(cv)->op_ppaddr);
817 CvROOT(cv)->op_ppaddr = PL_ppaddr[OP_NULL];
820 PL_curpad = AvARRAY((AV*)AvARRAY(CvPADLIST(cv))[1]);
825 stash = PL_curcop->cop_stash;
829 while (MARK < SP) { /* This may or may not shift down one here. */
831 if (*up = *++MARK) { /* Weed out nulls. */
833 if (!PL_sortcop && !SvPOK(*up)) {
838 (void)sv_2pv(*up, &n_a);
843 max = --up - myorigmark;
848 bool oldcatch = CATCH_GET;
854 PUSHSTACKi(PERLSI_SORT);
855 if (PL_sortstash != stash) {
856 PL_firstgv = gv_fetchpv("a", TRUE, SVt_PV);
857 PL_secondgv = gv_fetchpv("b", TRUE, SVt_PV);
858 PL_sortstash = stash;
861 SAVESPTR(GvSV(PL_firstgv));
862 SAVESPTR(GvSV(PL_secondgv));
864 PUSHBLOCK(cx, CXt_NULL, PL_stack_base);
865 if (!(PL_op->op_flags & OPf_SPECIAL)) {
866 bool hasargs = FALSE;
867 cx->cx_type = CXt_SUB;
868 cx->blk_gimme = G_SCALAR;
871 (void)SvREFCNT_inc(cv); /* in preparation for POPSUB */
873 PL_sortcxix = cxstack_ix;
874 qsortsv((myorigmark+1), max, sortcv);
876 POPBLOCK(cx,PL_curpm);
884 MEXTEND(SP, 20); /* Can't afford stack realloc on signal. */
885 qsortsv(ORIGMARK+1, max,
886 (PL_op->op_private & OPpSORT_NUMERIC)
887 ? ( (PL_op->op_private & OPpSORT_INTEGER)
888 ? ( overloading ? amagic_i_ncmp : sv_i_ncmp)
889 : ( overloading ? amagic_ncmp : sv_ncmp))
890 : ( (PL_op->op_private & OPpLOCALE)
893 : sv_cmp_locale_static)
894 : ( overloading ? amagic_cmp : sv_cmp_static)));
895 if (PL_op->op_private & OPpSORT_REVERSE) {
897 SV **q = ORIGMARK+max;
907 PL_stack_sp = ORIGMARK + max;
915 if (GIMME == G_ARRAY)
917 if (SvTRUEx(PAD_SV(PL_op->op_targ)))
918 return cLOGOP->op_other;
927 if (GIMME == G_ARRAY) {
928 RETURNOP(((LOGOP*)cUNOP->op_first)->op_other);
932 SV *targ = PAD_SV(PL_op->op_targ);
934 if ((PL_op->op_private & OPpFLIP_LINENUM)
935 ? (PL_last_in_gv && SvIV(sv) == (IV)IoLINES(GvIOp(PL_last_in_gv)))
937 sv_setiv(PAD_SV(cUNOP->op_first->op_targ), 1);
938 if (PL_op->op_flags & OPf_SPECIAL) {
946 RETURNOP(((LOGOP*)cUNOP->op_first)->op_other);
959 if (GIMME == G_ARRAY) {
965 if (SvGMAGICAL(left))
967 if (SvGMAGICAL(right))
970 if (SvNIOKp(left) || !SvPOKp(left) ||
971 (looks_like_number(left) && *SvPVX(left) != '0') )
973 if (SvNV(left) < IV_MIN || SvNV(right) > IV_MAX)
974 DIE(aTHX_ "Range iterator outside integer range");
985 sv = sv_2mortal(newSViv(i++));
990 SV *final = sv_mortalcopy(right);
992 char *tmps = SvPV(final, len);
994 sv = sv_mortalcopy(left);
996 while (!SvNIOKp(sv) && SvCUR(sv) <= len) {
998 if (strEQ(SvPVX(sv),tmps))
1000 sv = sv_2mortal(newSVsv(sv));
1007 SV *targ = PAD_SV(cUNOP->op_first->op_targ);
1009 if ((PL_op->op_private & OPpFLIP_LINENUM)
1010 ? (PL_last_in_gv && SvIV(sv) == (IV)IoLINES(GvIOp(PL_last_in_gv)))
1012 sv_setiv(PAD_SV(((UNOP*)cUNOP->op_first)->op_first->op_targ), 0);
1013 sv_catpv(targ, "E0");
1024 S_dopoptolabel(pTHX_ char *label)
1028 register PERL_CONTEXT *cx;
1030 for (i = cxstack_ix; i >= 0; i--) {
1032 switch (CxTYPE(cx)) {
1034 if (ckWARN(WARN_UNSAFE))
1035 Perl_warner(aTHX_ WARN_UNSAFE, "Exiting substitution via %s",
1036 PL_op_name[PL_op->op_type]);
1039 if (ckWARN(WARN_UNSAFE))
1040 Perl_warner(aTHX_ WARN_UNSAFE, "Exiting subroutine via %s",
1041 PL_op_name[PL_op->op_type]);
1044 if (ckWARN(WARN_UNSAFE))
1045 Perl_warner(aTHX_ WARN_UNSAFE, "Exiting eval via %s",
1046 PL_op_name[PL_op->op_type]);
1049 if (ckWARN(WARN_UNSAFE))
1050 Perl_warner(aTHX_ WARN_UNSAFE, "Exiting pseudo-block via %s",
1051 PL_op_name[PL_op->op_type]);
1054 if (!cx->blk_loop.label ||
1055 strNE(label, cx->blk_loop.label) ) {
1056 DEBUG_l(Perl_deb(aTHX_ "(Skipping label #%ld %s)\n",
1057 (long)i, cx->blk_loop.label));
1060 DEBUG_l( Perl_deb(aTHX_ "(Found label #%ld %s)\n", (long)i, label));
1068 Perl_dowantarray(pTHX)
1070 I32 gimme = block_gimme();
1071 return (gimme == G_VOID) ? G_SCALAR : gimme;
1075 Perl_block_gimme(pTHX)
1080 cxix = dopoptosub(cxstack_ix);
1084 switch (cxstack[cxix].blk_gimme) {
1092 Perl_croak(aTHX_ "panic: bad gimme: %d\n", cxstack[cxix].blk_gimme);
1099 S_dopoptosub(pTHX_ I32 startingblock)
1102 return dopoptosub_at(cxstack, startingblock);
1106 S_dopoptosub_at(pTHX_ PERL_CONTEXT *cxstk, I32 startingblock)
1110 register PERL_CONTEXT *cx;
1111 for (i = startingblock; i >= 0; i--) {
1113 switch (CxTYPE(cx)) {
1118 DEBUG_l( Perl_deb(aTHX_ "(Found sub #%ld)\n", (long)i));
1126 S_dopoptoeval(pTHX_ I32 startingblock)
1130 register PERL_CONTEXT *cx;
1131 for (i = startingblock; i >= 0; i--) {
1133 switch (CxTYPE(cx)) {
1137 DEBUG_l( Perl_deb(aTHX_ "(Found eval #%ld)\n", (long)i));
1145 S_dopoptoloop(pTHX_ I32 startingblock)
1149 register PERL_CONTEXT *cx;
1150 for (i = startingblock; i >= 0; i--) {
1152 switch (CxTYPE(cx)) {
1154 if (ckWARN(WARN_UNSAFE))
1155 Perl_warner(aTHX_ WARN_UNSAFE, "Exiting substitution via %s",
1156 PL_op_name[PL_op->op_type]);
1159 if (ckWARN(WARN_UNSAFE))
1160 Perl_warner(aTHX_ WARN_UNSAFE, "Exiting subroutine via %s",
1161 PL_op_name[PL_op->op_type]);
1164 if (ckWARN(WARN_UNSAFE))
1165 Perl_warner(aTHX_ WARN_UNSAFE, "Exiting eval via %s",
1166 PL_op_name[PL_op->op_type]);
1169 if (ckWARN(WARN_UNSAFE))
1170 Perl_warner(aTHX_ WARN_UNSAFE, "Exiting pseudo-block via %s",
1171 PL_op_name[PL_op->op_type]);
1174 DEBUG_l( Perl_deb(aTHX_ "(Found loop #%ld)\n", (long)i));
1182 Perl_dounwind(pTHX_ I32 cxix)
1185 register PERL_CONTEXT *cx;
1189 while (cxstack_ix > cxix) {
1191 cx = &cxstack[cxstack_ix];
1192 DEBUG_l(PerlIO_printf(Perl_debug_log, "Unwinding block %ld, type %s\n",
1193 (long) cxstack_ix, PL_block_type[CxTYPE(cx)]));
1194 /* Note: we don't need to restore the base context info till the end. */
1195 switch (CxTYPE(cx)) {
1198 continue; /* not break */
1217 * Closures mentioned at top level of eval cannot be referenced
1218 * again, and their presence indirectly causes a memory leak.
1219 * (Note that the fact that compcv and friends are still set here
1220 * is, AFAIK, an accident.) --Chip
1222 * XXX need to get comppad et al from eval's cv rather than
1223 * relying on the incidental global values.
1226 S_free_closures(pTHX)
1229 SV **svp = AvARRAY(PL_comppad_name);
1231 for (ix = AvFILLp(PL_comppad_name); ix >= 0; ix--) {
1233 if (sv && sv != &PL_sv_undef && *SvPVX(sv) == '&') {
1235 svp[ix] = &PL_sv_undef;
1239 SvREFCNT_dec(CvOUTSIDE(sv));
1240 CvOUTSIDE(sv) = Nullcv;
1253 Perl_qerror(pTHX_ SV *err)
1256 sv_catsv(ERRSV, err);
1258 sv_catsv(PL_errors, err);
1260 Perl_warn(aTHX_ "%_", err);
1265 Perl_die_where(pTHX_ char *message, STRLEN msglen)
1271 register PERL_CONTEXT *cx;
1276 if (PL_in_eval & EVAL_KEEPERR) {
1277 static char prefix[] = "\t(in cleanup) ";
1282 else if (SvCUR(err) >= sizeof(prefix)+msglen-1) {
1285 if (*e != *message || strNE(e,message))
1289 SvGROW(err, SvCUR(err)+sizeof(prefix)+msglen);
1290 sv_catpvn(err, prefix, sizeof(prefix)-1);
1291 sv_catpvn(err, message, msglen);
1292 if (ckWARN(WARN_UNSAFE)) {
1293 STRLEN start = SvCUR(err)-msglen-sizeof(prefix)+1;
1294 Perl_warner(aTHX_ WARN_UNSAFE, SvPVX(err)+start);
1299 sv_setpvn(ERRSV, message, msglen);
1302 message = SvPVx(ERRSV, msglen);
1304 while ((cxix = dopoptoeval(cxstack_ix)) < 0
1305 && PL_curstackinfo->si_prev)
1314 if (cxix < cxstack_ix)
1317 POPBLOCK(cx,PL_curpm);
1318 if (CxTYPE(cx) != CXt_EVAL) {
1319 PerlIO_write(Perl_error_log, "panic: die ", 11);
1320 PerlIO_write(Perl_error_log, message, msglen);
1325 if (gimme == G_SCALAR)
1326 *++newsp = &PL_sv_undef;
1327 PL_stack_sp = newsp;
1331 if (optype == OP_REQUIRE) {
1332 char* msg = SvPVx(ERRSV, n_a);
1333 DIE(aTHX_ "%sCompilation failed in require",
1334 *msg ? msg : "Unknown error\n");
1336 return pop_return();
1340 message = SvPVx(ERRSV, msglen);
1343 /* SFIO can really mess with your errno */
1346 PerlIO *serr = Perl_error_log;
1348 PerlIO_write(serr, message, msglen);
1349 (void)PerlIO_flush(serr);
1362 if (SvTRUE(left) != SvTRUE(right))
1374 RETURNOP(cLOGOP->op_other);
1383 RETURNOP(cLOGOP->op_other);
1389 register I32 cxix = dopoptosub(cxstack_ix);
1390 register PERL_CONTEXT *cx;
1391 register PERL_CONTEXT *ccstack = cxstack;
1392 PERL_SI *top_si = PL_curstackinfo;
1403 /* we may be in a higher stacklevel, so dig down deeper */
1404 while (cxix < 0 && top_si->si_type != PERLSI_MAIN) {
1405 top_si = top_si->si_prev;
1406 ccstack = top_si->si_cxstack;
1407 cxix = dopoptosub_at(ccstack, top_si->si_cxix);
1410 if (GIMME != G_ARRAY)
1414 if (PL_DBsub && cxix >= 0 &&
1415 ccstack[cxix].blk_sub.cv == GvCV(PL_DBsub))
1419 cxix = dopoptosub_at(ccstack, cxix - 1);
1422 cx = &ccstack[cxix];
1423 if (CxTYPE(cx) == CXt_SUB) {
1424 dbcxix = dopoptosub_at(ccstack, cxix - 1);
1425 /* We expect that ccstack[dbcxix] is CXt_SUB, anyway, the
1426 field below is defined for any cx. */
1427 if (PL_DBsub && dbcxix >= 0 && ccstack[dbcxix].blk_sub.cv == GvCV(PL_DBsub))
1428 cx = &ccstack[dbcxix];
1431 if (GIMME != G_ARRAY) {
1432 hv = cx->blk_oldcop->cop_stash;
1434 PUSHs(&PL_sv_undef);
1437 sv_setpv(TARG, HvNAME(hv));
1443 hv = cx->blk_oldcop->cop_stash;
1445 PUSHs(&PL_sv_undef);
1447 PUSHs(sv_2mortal(newSVpv(HvNAME(hv), 0)));
1448 PUSHs(sv_2mortal(newSVsv(CopFILESV(cx->blk_oldcop))));
1449 PUSHs(sv_2mortal(newSViv((I32)cx->blk_oldcop->cop_line)));
1452 if (CxTYPE(cx) == CXt_SUB) { /* So is ccstack[dbcxix]. */
1454 gv_efullname3(sv, CvGV(ccstack[cxix].blk_sub.cv), Nullch);
1455 PUSHs(sv_2mortal(sv));
1456 PUSHs(sv_2mortal(newSViv((I32)cx->blk_sub.hasargs)));
1459 PUSHs(sv_2mortal(newSVpvn("(eval)",6)));
1460 PUSHs(sv_2mortal(newSViv(0)));
1462 gimme = (I32)cx->blk_gimme;
1463 if (gimme == G_VOID)
1464 PUSHs(&PL_sv_undef);
1466 PUSHs(sv_2mortal(newSViv(gimme & G_ARRAY)));
1467 if (CxTYPE(cx) == CXt_EVAL) {
1468 if (cx->blk_eval.old_op_type == OP_ENTEREVAL) {
1469 PUSHs(cx->blk_eval.cur_text);
1472 else if (cx->blk_eval.old_name) { /* Try blocks have old_name == 0. */
1473 /* Require, put the name. */
1474 PUSHs(sv_2mortal(newSVpv(cx->blk_eval.old_name, 0)));
1479 PUSHs(&PL_sv_undef);
1480 PUSHs(&PL_sv_undef);
1482 if (CxTYPE(cx) == CXt_SUB && cx->blk_sub.hasargs
1483 && PL_curcop->cop_stash == PL_debstash)
1485 AV *ary = cx->blk_sub.argarray;
1486 int off = AvARRAY(ary) - AvALLOC(ary);
1490 PL_dbargs = GvAV(gv_AVadd(tmpgv = gv_fetchpv("DB::args", TRUE,
1493 AvREAL_off(PL_dbargs); /* XXX Should be REIFY */
1496 if (AvMAX(PL_dbargs) < AvFILLp(ary) + off)
1497 av_extend(PL_dbargs, AvFILLp(ary) + off);
1498 Copy(AvALLOC(ary), AvARRAY(PL_dbargs), AvFILLp(ary) + 1 + off, SV*);
1499 AvFILLp(PL_dbargs) = AvFILLp(ary) + off;
1501 /* XXX only hints propagated via op_private are currently
1502 * visible (others are not easily accessible, since they
1503 * use the global PL_hints) */
1504 PUSHs(sv_2mortal(newSViv((I32)cx->blk_oldcop->op_private &
1505 HINT_PRIVATE_MASK)));
1519 sv_reset(tmps, PL_curcop->cop_stash);
1531 PL_curcop = (COP*)PL_op;
1532 TAINT_NOT; /* Each statement is presumed innocent */
1533 PL_stack_sp = PL_stack_base + cxstack[cxstack_ix].blk_oldsp;
1536 if (PL_op->op_private || SvIV(PL_DBsingle) || SvIV(PL_DBsignal) || SvIV(PL_DBtrace))
1540 register PERL_CONTEXT *cx;
1541 I32 gimme = G_ARRAY;
1548 DIE(aTHX_ "No DB::DB routine defined");
1550 if (CvDEPTH(cv) >= 1 && !(PL_debug & (1<<30))) /* don't do recursive DB::DB call */
1562 push_return(PL_op->op_next);
1563 PUSHBLOCK(cx, CXt_SUB, SP);
1566 (void)SvREFCNT_inc(cv);
1567 SAVESPTR(PL_curpad);
1568 PL_curpad = AvARRAY((AV*)*av_fetch(CvPADLIST(cv),1,FALSE));
1569 RETURNOP(CvSTART(cv));
1583 register PERL_CONTEXT *cx;
1584 I32 gimme = GIMME_V;
1591 if (PL_op->op_flags & OPf_SPECIAL) {
1593 svp = &THREADSV(PL_op->op_targ); /* per-thread variable */
1594 SAVEGENERICSV(*svp);
1598 #endif /* USE_THREADS */
1599 if (PL_op->op_targ) {
1600 svp = &PL_curpad[PL_op->op_targ]; /* "my" variable */
1604 svp = &GvSV((GV*)POPs); /* symbol table variable */
1605 SAVEGENERICSV(*svp);
1611 PUSHBLOCK(cx, CXt_LOOP, SP);
1612 PUSHLOOP(cx, svp, MARK);
1613 if (PL_op->op_flags & OPf_STACKED) {
1614 cx->blk_loop.iterary = (AV*)SvREFCNT_inc(POPs);
1615 if (SvTYPE(cx->blk_loop.iterary) != SVt_PVAV) {
1617 if (SvNIOKp(sv) || !SvPOKp(sv) ||
1618 (looks_like_number(sv) && *SvPVX(sv) != '0')) {
1619 if (SvNV(sv) < IV_MIN ||
1620 SvNV((SV*)cx->blk_loop.iterary) >= IV_MAX)
1621 DIE(aTHX_ "Range iterator outside integer range");
1622 cx->blk_loop.iterix = SvIV(sv);
1623 cx->blk_loop.itermax = SvIV((SV*)cx->blk_loop.iterary);
1626 cx->blk_loop.iterlval = newSVsv(sv);
1630 cx->blk_loop.iterary = PL_curstack;
1631 AvFILLp(PL_curstack) = SP - PL_stack_base;
1632 cx->blk_loop.iterix = MARK - PL_stack_base;
1641 register PERL_CONTEXT *cx;
1642 I32 gimme = GIMME_V;
1648 PUSHBLOCK(cx, CXt_LOOP, SP);
1649 PUSHLOOP(cx, 0, SP);
1657 register PERL_CONTEXT *cx;
1665 newsp = PL_stack_base + cx->blk_loop.resetsp;
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 POPLOOP(cx); /* Stack values are safe: release loop vars ... */
1686 PL_curpm = newpm; /* ... and pop $1 et al */
1698 register PERL_CONTEXT *cx;
1699 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)) {
1729 if (AvFILLp(PL_comppad_name) >= 0)
1732 if (optype == OP_REQUIRE &&
1733 (MARK == SP || (gimme == G_SCALAR && !SvTRUE(*SP))) )
1735 /* Unassume the success we assumed earlier. */
1736 char *name = cx->blk_eval.old_name;
1737 (void)hv_delete(GvHVn(PL_incgv), name, strlen(name), G_DISCARD);
1738 DIE(aTHX_ "%s did not return a true value", name);
1742 DIE(aTHX_ "panic: return");
1746 if (gimme == G_SCALAR) {
1749 if (cx->blk_sub.cv && CvDEPTH(cx->blk_sub.cv) > 1) {
1751 *++newsp = SvREFCNT_inc(*SP);
1756 *++newsp = sv_mortalcopy(*SP);
1759 *++newsp = (SvTEMP(*SP)) ? *SP : sv_mortalcopy(*SP);
1761 *++newsp = sv_mortalcopy(*SP);
1763 *++newsp = &PL_sv_undef;
1765 else if (gimme == G_ARRAY) {
1766 while (++MARK <= SP) {
1767 *++newsp = (popsub2 && SvTEMP(*MARK))
1768 ? *MARK : sv_mortalcopy(*MARK);
1769 TAINT_NOT; /* Each item is independent */
1772 PL_stack_sp = newsp;
1774 /* Stack values are safe: */
1776 POPSUB(cx,sv); /* release CV and @_ ... */
1780 PL_curpm = newpm; /* ... and pop $1 et al */
1784 return pop_return();
1791 register PERL_CONTEXT *cx;
1801 if (PL_op->op_flags & OPf_SPECIAL) {
1802 cxix = dopoptoloop(cxstack_ix);
1804 DIE(aTHX_ "Can't \"last\" outside a block");
1807 cxix = dopoptolabel(cPVOP->op_pv);
1809 DIE(aTHX_ "Label not found for \"last %s\"", cPVOP->op_pv);
1811 if (cxix < cxstack_ix)
1816 switch (CxTYPE(cx)) {
1819 newsp = PL_stack_base + cx->blk_loop.resetsp;
1820 nextop = cx->blk_loop.last_op->op_next;
1824 nextop = pop_return();
1828 nextop = pop_return();
1831 DIE(aTHX_ "panic: last");
1835 if (gimme == G_SCALAR) {
1837 *++newsp = ((pop2 == CXt_SUB) && SvTEMP(*SP))
1838 ? *SP : sv_mortalcopy(*SP);
1840 *++newsp = &PL_sv_undef;
1842 else if (gimme == G_ARRAY) {
1843 while (++MARK <= SP) {
1844 *++newsp = ((pop2 == CXt_SUB) && SvTEMP(*MARK))
1845 ? *MARK : sv_mortalcopy(*MARK);
1846 TAINT_NOT; /* Each item is independent */
1852 /* Stack values are safe: */
1855 POPLOOP(cx); /* release loop vars ... */
1859 POPSUB(cx,sv); /* release CV and @_ ... */
1862 PL_curpm = newpm; /* ... and pop $1 et al */
1872 register PERL_CONTEXT *cx;
1875 if (PL_op->op_flags & OPf_SPECIAL) {
1876 cxix = dopoptoloop(cxstack_ix);
1878 DIE(aTHX_ "Can't \"next\" outside a block");
1881 cxix = dopoptolabel(cPVOP->op_pv);
1883 DIE(aTHX_ "Label not found for \"next %s\"", cPVOP->op_pv);
1885 if (cxix < cxstack_ix)
1889 oldsave = PL_scopestack[PL_scopestack_ix - 1];
1890 LEAVE_SCOPE(oldsave);
1891 return cx->blk_loop.next_op;
1897 register PERL_CONTEXT *cx;
1900 if (PL_op->op_flags & OPf_SPECIAL) {
1901 cxix = dopoptoloop(cxstack_ix);
1903 DIE(aTHX_ "Can't \"redo\" outside a block");
1906 cxix = dopoptolabel(cPVOP->op_pv);
1908 DIE(aTHX_ "Label not found for \"redo %s\"", cPVOP->op_pv);
1910 if (cxix < cxstack_ix)
1914 oldsave = PL_scopestack[PL_scopestack_ix - 1];
1915 LEAVE_SCOPE(oldsave);
1916 return cx->blk_loop.redo_op;
1920 S_dofindlabel(pTHX_ OP *o, char *label, OP **opstack, OP **oplimit)
1924 static char too_deep[] = "Target of goto is too deeply nested";
1927 Perl_croak(aTHX_ too_deep);
1928 if (o->op_type == OP_LEAVE ||
1929 o->op_type == OP_SCOPE ||
1930 o->op_type == OP_LEAVELOOP ||
1931 o->op_type == OP_LEAVETRY)
1933 *ops++ = cUNOPo->op_first;
1935 Perl_croak(aTHX_ too_deep);
1938 if (o->op_flags & OPf_KIDS) {
1940 /* First try all the kids at this level, since that's likeliest. */
1941 for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling) {
1942 if ((kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) &&
1943 kCOP->cop_label && strEQ(kCOP->cop_label, label))
1946 for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling) {
1947 if (kid == PL_lastgotoprobe)
1949 if ((kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) &&
1951 (ops[-1]->op_type != OP_NEXTSTATE &&
1952 ops[-1]->op_type != OP_DBSTATE)))
1954 if (o = dofindlabel(kid, label, ops, oplimit))
1973 register PERL_CONTEXT *cx;
1974 #define GOTO_DEPTH 64
1975 OP *enterops[GOTO_DEPTH];
1977 int do_dump = (PL_op->op_type == OP_DUMP);
1978 static char must_have_label[] = "goto must have label";
1981 if (PL_op->op_flags & OPf_STACKED) {
1985 /* This egregious kludge implements goto &subroutine */
1986 if (SvROK(sv) && SvTYPE(SvRV(sv)) == SVt_PVCV) {
1988 register PERL_CONTEXT *cx;
1989 CV* cv = (CV*)SvRV(sv);
1995 if (!CvROOT(cv) && !CvXSUB(cv)) {
2000 /* autoloaded stub? */
2001 if (cv != GvCV(gv) && (cv = GvCV(gv)))
2003 autogv = gv_autoload4(GvSTASH(gv), GvNAME(gv),
2004 GvNAMELEN(gv), FALSE);
2005 if (autogv && (cv = GvCV(autogv)))
2007 tmpstr = sv_newmortal();
2008 gv_efullname3(tmpstr, gv, Nullch);
2009 DIE(aTHX_ "Goto undefined subroutine &%s",SvPVX(tmpstr));
2011 DIE(aTHX_ "Goto undefined subroutine");
2014 /* First do some returnish stuff. */
2015 cxix = dopoptosub(cxstack_ix);
2017 DIE(aTHX_ "Can't goto subroutine outside a subroutine");
2018 if (cxix < cxstack_ix)
2021 if (CxTYPE(cx) == CXt_EVAL && cx->blk_eval.old_op_type == OP_ENTEREVAL)
2022 DIE(aTHX_ "Can't goto subroutine from an eval-string");
2024 if (CxTYPE(cx) == CXt_SUB && cx->blk_sub.hasargs) {
2025 /* put @_ back onto stack */
2026 AV* av = cx->blk_sub.argarray;
2028 items = AvFILLp(av) + 1;
2030 EXTEND(PL_stack_sp, items); /* @_ could have been extended. */
2031 Copy(AvARRAY(av), PL_stack_sp, items, SV*);
2032 PL_stack_sp += items;
2034 SvREFCNT_dec(GvAV(PL_defgv));
2035 GvAV(PL_defgv) = cx->blk_sub.savearray;
2036 #endif /* USE_THREADS */
2037 /* abandon @_ if it got reified */
2039 (void)sv_2mortal((SV*)av); /* delay until return */
2041 av_extend(av, items-1);
2042 AvFLAGS(av) = AVf_REIFY;
2043 PL_curpad[0] = (SV*)(cx->blk_sub.argarray = av);
2046 else if (CvXSUB(cv)) { /* put GvAV(defgv) back onto stack */
2050 av = (AV*)PL_curpad[0];
2052 av = GvAV(PL_defgv);
2054 items = AvFILLp(av) + 1;
2056 EXTEND(PL_stack_sp, items); /* @_ could have been extended. */
2057 Copy(AvARRAY(av), PL_stack_sp, items, SV*);
2058 PL_stack_sp += items;
2060 if (CxTYPE(cx) == CXt_SUB &&
2061 !(CvDEPTH(cx->blk_sub.cv) = cx->blk_sub.olddepth))
2062 SvREFCNT_dec(cx->blk_sub.cv);
2063 oldsave = PL_scopestack[PL_scopestack_ix - 1];
2064 LEAVE_SCOPE(oldsave);
2066 /* Now do some callish stuff. */
2069 #ifdef PERL_XSUB_OLDSTYLE
2070 if (CvOLDSTYLE(cv)) {
2071 I32 (*fp3)(int,int,int);
2076 fp3 = (I32(*)(int,int,int)))CvXSUB(cv;
2077 items = (*fp3)(CvXSUBANY(cv).any_i32,
2078 mark - PL_stack_base + 1,
2080 SP = PL_stack_base + items;
2083 #endif /* PERL_XSUB_OLDSTYLE */
2088 PL_stack_sp--; /* There is no cv arg. */
2089 /* Push a mark for the start of arglist */
2091 (void)(*CvXSUB(cv))(aTHXo_ cv);
2092 /* Pop the current context like a decent sub should */
2093 POPBLOCK(cx, PL_curpm);
2094 /* Do _not_ use PUTBACK, keep the XSUB's return stack! */
2097 return pop_return();
2100 AV* padlist = CvPADLIST(cv);
2101 SV** svp = AvARRAY(padlist);
2102 if (CxTYPE(cx) == CXt_EVAL) {
2103 PL_in_eval = cx->blk_eval.old_in_eval;
2104 PL_eval_root = cx->blk_eval.old_eval_root;
2105 cx->cx_type = CXt_SUB;
2106 cx->blk_sub.hasargs = 0;
2108 cx->blk_sub.cv = cv;
2109 cx->blk_sub.olddepth = CvDEPTH(cv);
2111 if (CvDEPTH(cv) < 2)
2112 (void)SvREFCNT_inc(cv);
2113 else { /* save temporaries on recursion? */
2114 if (CvDEPTH(cv) == 100 && ckWARN(WARN_RECURSION))
2115 sub_crush_depth(cv);
2116 if (CvDEPTH(cv) > AvFILLp(padlist)) {
2117 AV *newpad = newAV();
2118 SV **oldpad = AvARRAY(svp[CvDEPTH(cv)-1]);
2119 I32 ix = AvFILLp((AV*)svp[1]);
2120 svp = AvARRAY(svp[0]);
2121 for ( ;ix > 0; ix--) {
2122 if (svp[ix] != &PL_sv_undef) {
2123 char *name = SvPVX(svp[ix]);
2124 if ((SvFLAGS(svp[ix]) & SVf_FAKE)
2127 /* outer lexical or anon code */
2128 av_store(newpad, ix,
2129 SvREFCNT_inc(oldpad[ix]) );
2131 else { /* our own lexical */
2133 av_store(newpad, ix, sv = (SV*)newAV());
2134 else if (*name == '%')
2135 av_store(newpad, ix, sv = (SV*)newHV());
2137 av_store(newpad, ix, sv = NEWSV(0,0));
2141 else if (IS_PADGV(oldpad[ix])) {
2142 av_store(newpad, ix, sv = SvREFCNT_inc(oldpad[ix]));
2145 av_store(newpad, ix, sv = NEWSV(0,0));
2149 if (cx->blk_sub.hasargs) {
2152 av_store(newpad, 0, (SV*)av);
2153 AvFLAGS(av) = AVf_REIFY;
2155 av_store(padlist, CvDEPTH(cv), (SV*)newpad);
2156 AvFILLp(padlist) = CvDEPTH(cv);
2157 svp = AvARRAY(padlist);
2161 if (!cx->blk_sub.hasargs) {
2162 AV* av = (AV*)PL_curpad[0];
2164 items = AvFILLp(av) + 1;
2166 /* Mark is at the end of the stack. */
2168 Copy(AvARRAY(av), SP + 1, items, SV*);
2173 #endif /* USE_THREADS */
2174 SAVESPTR(PL_curpad);
2175 PL_curpad = AvARRAY((AV*)svp[CvDEPTH(cv)]);
2177 if (cx->blk_sub.hasargs)
2178 #endif /* USE_THREADS */
2180 AV* av = (AV*)PL_curpad[0];
2184 cx->blk_sub.savearray = GvAV(PL_defgv);
2185 GvAV(PL_defgv) = (AV*)SvREFCNT_inc(av);
2186 #endif /* USE_THREADS */
2187 cx->blk_sub.argarray = av;
2190 if (items >= AvMAX(av) + 1) {
2192 if (AvARRAY(av) != ary) {
2193 AvMAX(av) += AvARRAY(av) - AvALLOC(av);
2194 SvPVX(av) = (char*)ary;
2196 if (items >= AvMAX(av) + 1) {
2197 AvMAX(av) = items - 1;
2198 Renew(ary,items+1,SV*);
2200 SvPVX(av) = (char*)ary;
2203 Copy(mark,AvARRAY(av),items,SV*);
2204 AvFILLp(av) = items - 1;
2205 assert(!AvREAL(av));
2212 if (PERLDB_SUB) { /* Checking curstash breaks DProf. */
2214 * We do not care about using sv to call CV;
2215 * it's for informational purposes only.
2217 SV *sv = GvSV(PL_DBsub);
2220 if (PERLDB_SUB_NN) {
2221 SvIVX(sv) = PTR2IV(cv); /* Already upgraded, saved */
2224 gv_efullname3(sv, CvGV(cv), Nullch);
2227 && (gotocv = get_cv("DB::goto", FALSE)) ) {
2228 PUSHMARK( PL_stack_sp );
2229 call_sv((SV*)gotocv, G_SCALAR | G_NODEBUG);
2233 RETURNOP(CvSTART(cv));
2237 label = SvPV(sv,n_a);
2238 if (!(do_dump || *label))
2239 DIE(aTHX_ must_have_label);
2242 else if (PL_op->op_flags & OPf_SPECIAL) {
2244 DIE(aTHX_ must_have_label);
2247 label = cPVOP->op_pv;
2249 if (label && *label) {
2254 PL_lastgotoprobe = 0;
2256 for (ix = cxstack_ix; ix >= 0; ix--) {
2258 switch (CxTYPE(cx)) {
2260 gotoprobe = PL_eval_root; /* XXX not good for nested eval */
2263 gotoprobe = cx->blk_oldcop->op_sibling;
2269 gotoprobe = cx->blk_oldcop->op_sibling;
2271 gotoprobe = PL_main_root;
2274 if (CvDEPTH(cx->blk_sub.cv)) {
2275 gotoprobe = CvROOT(cx->blk_sub.cv);
2280 DIE(aTHX_ "Can't \"goto\" outside a block");
2283 DIE(aTHX_ "panic: goto");
2284 gotoprobe = PL_main_root;
2287 retop = dofindlabel(gotoprobe, label,
2288 enterops, enterops + GOTO_DEPTH);
2291 PL_lastgotoprobe = gotoprobe;
2294 DIE(aTHX_ "Can't find label %s", label);
2296 /* pop unwanted frames */
2298 if (ix < cxstack_ix) {
2305 oldsave = PL_scopestack[PL_scopestack_ix];
2306 LEAVE_SCOPE(oldsave);
2309 /* push wanted frames */
2311 if (*enterops && enterops[1]) {
2313 for (ix = 1; enterops[ix]; ix++) {
2314 PL_op = enterops[ix];
2315 /* Eventually we may want to stack the needed arguments
2316 * for each op. For now, we punt on the hard ones. */
2317 if (PL_op->op_type == OP_ENTERITER)
2318 DIE(aTHX_ "Can't \"goto\" into the middle of a foreach loop",
2320 CALL_FPTR(PL_op->op_ppaddr)(aTHX);
2328 if (!retop) retop = PL_main_start;
2330 PL_restartop = retop;
2331 PL_do_undump = TRUE;
2335 PL_restartop = 0; /* hmm, must be GNU unexec().. */
2336 PL_do_undump = FALSE;
2352 if (anum == 1 && VMSISH_EXIT)
2357 PUSHs(&PL_sv_undef);
2365 NV value = SvNVx(GvSV(cCOP->cop_gv));
2366 register I32 match = I_32(value);
2369 if (((NV)match) > value)
2370 --match; /* was fractional--truncate other way */
2372 match -= cCOP->uop.scop.scop_offset;
2375 else if (match > cCOP->uop.scop.scop_max)
2376 match = cCOP->uop.scop.scop_max;
2377 PL_op = cCOP->uop.scop.scop_next[match];
2387 PL_op = PL_op->op_next; /* can't assume anything */
2390 match = *(SvPVx(GvSV(cCOP->cop_gv), n_a)) & 255;
2391 match -= cCOP->uop.scop.scop_offset;
2394 else if (match > cCOP->uop.scop.scop_max)
2395 match = cCOP->uop.scop.scop_max;
2396 PL_op = cCOP->uop.scop.scop_next[match];
2405 S_save_lines(pTHX_ AV *array, SV *sv)
2407 register char *s = SvPVX(sv);
2408 register char *send = SvPVX(sv) + SvCUR(sv);
2410 register I32 line = 1;
2412 while (s && s < send) {
2413 SV *tmpstr = NEWSV(85,0);
2415 sv_upgrade(tmpstr, SVt_PVMG);
2416 t = strchr(s, '\n');
2422 sv_setpvn(tmpstr, s, t - s);
2423 av_store(array, line++, tmpstr);
2429 S_docatch_body(pTHX_ va_list args)
2436 S_docatch(pTHX_ OP *o)
2441 volatile PERL_SI *cursi = PL_curstackinfo;
2445 assert(CATCH_GET == TRUE);
2449 CALLPROTECT(aTHX_ pcur_env, &ret, MEMBER_TO_FPTR(S_docatch_body));
2454 if (PL_restartop && cursi == PL_curstackinfo) {
2455 PL_op = PL_restartop;
2470 Perl_sv_compile_2op(pTHX_ SV *sv, OP** startop, char *code, AV** avp)
2471 /* sv Text to convert to OP tree. */
2472 /* startop op_free() this to undo. */
2473 /* code Short string id of the caller. */
2475 dSP; /* Make POPBLOCK work. */
2478 I32 gimme = 0; /* SUSPECT - INITIALZE TO WHAT? NI-S */
2481 OP *oop = PL_op, *rop;
2482 char tmpbuf[TYPE_DIGITS(long) + 12 + 10];
2488 /* switch to eval mode */
2490 if (PL_curcop == &PL_compiling) {
2491 SAVESPTR(PL_compiling.cop_stash);
2492 PL_compiling.cop_stash = PL_curstash;
2494 SAVESPTR(CopFILEGV(&PL_compiling));
2495 SAVEI16(PL_compiling.cop_line);
2496 sprintf(tmpbuf, "_<(%.10s_eval %lu)", code, (unsigned long)++PL_evalseq);
2497 CopFILEGV_set(&PL_compiling, gv_fetchfile(tmpbuf+2));
2498 PL_compiling.cop_line = 1;
2499 /* XXX For C<eval "...">s within BEGIN {} blocks, this ends up
2500 deleting the eval's FILEGV from the stash before gv_check() runs
2501 (i.e. before run-time proper). To work around the coredump that
2502 ensues, we always turn GvMULTI_on for any globals that were
2503 introduced within evals. See force_ident(). GSAR 96-10-12 */
2504 safestr = savepv(tmpbuf);
2505 SAVEDELETE(PL_defstash, safestr, strlen(safestr));
2507 #ifdef OP_IN_REGISTER
2515 PL_op->op_type = OP_ENTEREVAL;
2516 PL_op->op_flags = 0; /* Avoid uninit warning. */
2517 PUSHBLOCK(cx, CXt_EVAL, SP);
2518 PUSHEVAL(cx, 0, Nullgv);
2519 rop = doeval(G_SCALAR, startop);
2520 POPBLOCK(cx,PL_curpm);
2523 (*startop)->op_type = OP_NULL;
2524 (*startop)->op_ppaddr = PL_ppaddr[OP_NULL];
2526 *avp = (AV*)SvREFCNT_inc(PL_comppad);
2528 if (PL_curcop == &PL_compiling)
2529 PL_compiling.op_private = PL_hints;
2530 #ifdef OP_IN_REGISTER
2536 /* With USE_THREADS, eval_owner must be held on entry to doeval */
2538 S_doeval(pTHX_ int gimme, OP** startop)
2547 PL_in_eval = EVAL_INEVAL;
2551 /* set up a scratch pad */
2554 SAVESPTR(PL_curpad);
2555 SAVESPTR(PL_comppad);
2556 SAVESPTR(PL_comppad_name);
2557 SAVEI32(PL_comppad_name_fill);
2558 SAVEI32(PL_min_intro_pending);
2559 SAVEI32(PL_max_intro_pending);
2562 for (i = cxstack_ix - 1; i >= 0; i--) {
2563 PERL_CONTEXT *cx = &cxstack[i];
2564 if (CxTYPE(cx) == CXt_EVAL)
2566 else if (CxTYPE(cx) == CXt_SUB) {
2567 caller = cx->blk_sub.cv;
2572 SAVESPTR(PL_compcv);
2573 PL_compcv = (CV*)NEWSV(1104,0);
2574 sv_upgrade((SV *)PL_compcv, SVt_PVCV);
2575 CvEVAL_on(PL_compcv);
2577 CvOWNER(PL_compcv) = 0;
2578 New(666, CvMUTEXP(PL_compcv), 1, perl_mutex);
2579 MUTEX_INIT(CvMUTEXP(PL_compcv));
2580 #endif /* USE_THREADS */
2582 PL_comppad = newAV();
2583 av_push(PL_comppad, Nullsv);
2584 PL_curpad = AvARRAY(PL_comppad);
2585 PL_comppad_name = newAV();
2586 PL_comppad_name_fill = 0;
2587 PL_min_intro_pending = 0;
2590 av_store(PL_comppad_name, 0, newSVpvn("@_", 2));
2591 PL_curpad[0] = (SV*)newAV();
2592 SvPADMY_on(PL_curpad[0]); /* XXX Needed? */
2593 #endif /* USE_THREADS */
2595 comppadlist = newAV();
2596 AvREAL_off(comppadlist);
2597 av_store(comppadlist, 0, (SV*)PL_comppad_name);
2598 av_store(comppadlist, 1, (SV*)PL_comppad);
2599 CvPADLIST(PL_compcv) = comppadlist;
2601 if (!saveop || saveop->op_type != OP_REQUIRE)
2602 CvOUTSIDE(PL_compcv) = (CV*)SvREFCNT_inc(caller);
2604 SAVEFREESV(PL_compcv);
2606 /* make sure we compile in the right package */
2608 newstash = PL_curcop->cop_stash;
2609 if (PL_curstash != newstash) {
2610 SAVESPTR(PL_curstash);
2611 PL_curstash = newstash;
2613 SAVESPTR(PL_beginav);
2614 PL_beginav = newAV();
2615 SAVEFREESV(PL_beginav);
2617 /* try to compile it */
2619 PL_eval_root = Nullop;
2621 PL_curcop = &PL_compiling;
2622 PL_curcop->cop_arybase = 0;
2623 SvREFCNT_dec(PL_rs);
2624 PL_rs = newSVpvn("\n", 1);
2625 if (saveop && saveop->op_flags & OPf_SPECIAL)
2626 PL_in_eval |= EVAL_KEEPERR;
2629 if (yyparse() || PL_error_count || !PL_eval_root) {
2633 I32 optype = 0; /* Might be reset by POPEVAL. */
2638 op_free(PL_eval_root);
2639 PL_eval_root = Nullop;
2641 SP = PL_stack_base + POPMARK; /* pop original mark */
2643 POPBLOCK(cx,PL_curpm);
2649 if (optype == OP_REQUIRE) {
2650 char* msg = SvPVx(ERRSV, n_a);
2651 DIE(aTHX_ "%sCompilation failed in require",
2652 *msg ? msg : "Unknown error\n");
2655 char* msg = SvPVx(ERRSV, n_a);
2657 POPBLOCK(cx,PL_curpm);
2659 Perl_croak(aTHX_ "%sCompilation failed in regexp",
2660 (*msg ? msg : "Unknown error\n"));
2662 SvREFCNT_dec(PL_rs);
2663 PL_rs = SvREFCNT_inc(PL_nrs);
2665 MUTEX_LOCK(&PL_eval_mutex);
2667 COND_SIGNAL(&PL_eval_cond);
2668 MUTEX_UNLOCK(&PL_eval_mutex);
2669 #endif /* USE_THREADS */
2672 SvREFCNT_dec(PL_rs);
2673 PL_rs = SvREFCNT_inc(PL_nrs);
2674 PL_compiling.cop_line = 0;
2676 *startop = PL_eval_root;
2677 SvREFCNT_dec(CvOUTSIDE(PL_compcv));
2678 CvOUTSIDE(PL_compcv) = Nullcv;
2680 SAVEFREEOP(PL_eval_root);
2682 scalarvoid(PL_eval_root);
2683 else if (gimme & G_ARRAY)
2686 scalar(PL_eval_root);
2688 DEBUG_x(dump_eval());
2690 /* Register with debugger: */
2691 if (PERLDB_INTER && saveop->op_type == OP_REQUIRE) {
2692 CV *cv = get_cv("DB::postponed", FALSE);
2696 XPUSHs((SV*)CopFILEGV(&PL_compiling));
2698 call_sv((SV*)cv, G_DISCARD);
2702 /* compiled okay, so do it */
2704 CvDEPTH(PL_compcv) = 1;
2705 SP = PL_stack_base + POPMARK; /* pop original mark */
2706 PL_op = saveop; /* The caller may need it. */
2708 MUTEX_LOCK(&PL_eval_mutex);
2710 COND_SIGNAL(&PL_eval_cond);
2711 MUTEX_UNLOCK(&PL_eval_mutex);
2712 #endif /* USE_THREADS */
2714 RETURNOP(PL_eval_start);
2718 S_doopen_pmc(pTHX_ const char *name, const char *mode)
2720 STRLEN namelen = strlen(name);
2723 if (namelen > 3 && strEQ(name + namelen - 3, ".pm")) {
2724 SV *pmcsv = Perl_newSVpvf(aTHX_ "%s%c", name, 'c');
2725 char *pmc = SvPV_nolen(pmcsv);
2728 if (PerlLIO_stat(pmc, &pmcstat) < 0) {
2729 fp = PerlIO_open(name, mode);
2732 if (PerlLIO_stat(name, &pmstat) < 0 ||
2733 pmstat.st_mtime < pmcstat.st_mtime)
2735 fp = PerlIO_open(pmc, mode);
2738 fp = PerlIO_open(name, mode);
2741 SvREFCNT_dec(pmcsv);
2744 fp = PerlIO_open(name, mode);
2752 register PERL_CONTEXT *cx;
2757 SV *namesv = Nullsv;
2759 I32 gimme = G_SCALAR;
2760 PerlIO *tryrsfp = 0;
2762 int filter_has_file = 0;
2763 GV *filter_child_proc = 0;
2764 SV *filter_state = 0;
2768 if (SvNIOKp(sv) && !SvPOKp(sv)) {
2769 if (Atof(PL_patchlevel) + 0.00000999 < SvNV(sv))
2770 DIE(aTHX_ "Perl %s required--this is only version %s, stopped",
2771 SvPV(sv,n_a),PL_patchlevel);
2774 name = SvPV(sv, len);
2775 if (!(name && len > 0 && *name))
2776 DIE(aTHX_ "Null filename used");
2777 TAINT_PROPER("require");
2778 if (PL_op->op_type == OP_REQUIRE &&
2779 (svp = hv_fetch(GvHVn(PL_incgv), name, len, 0)) &&
2780 *svp != &PL_sv_undef)
2783 /* prepare to compile file */
2788 (name[1] == '.' && name[2] == '/')))
2790 || (name[0] && name[1] == ':')
2793 || (name[0] == '\\' && name[1] == '\\') /* UNC path */
2796 || (strchr(name,':') || ((*name == '[' || *name == '<') &&
2797 (isALNUM(name[1]) || strchr("$-_]>",name[1]))))
2802 tryrsfp = doopen_pmc(name,PERL_SCRIPT_MODE);
2805 AV *ar = GvAVn(PL_incgv);
2809 if ((unixname = tounixspec(name, Nullch)) != Nullch)
2812 namesv = NEWSV(806, 0);
2813 for (i = 0; i <= AvFILL(ar); i++) {
2814 SV *dirsv = *av_fetch(ar, i, TRUE);
2820 if (SvTYPE(SvRV(loader)) == SVt_PVAV) {
2821 loader = *av_fetch((AV *)SvRV(loader), 0, TRUE);
2824 Perl_sv_setpvf(aTHX_ namesv, "/loader/0x%"UVxf"/%s",
2825 PTR2UV(SvANY(loader)), name);
2826 tryname = SvPVX(namesv);
2837 count = call_sv(loader, G_ARRAY);
2847 if (SvROK(arg) && SvTYPE(SvRV(arg)) == SVt_PVGV) {
2851 if (SvTYPE(arg) == SVt_PVGV) {
2852 IO *io = GvIO((GV *)arg);
2857 tryrsfp = IoIFP(io);
2858 if (IoTYPE(io) == '|') {
2859 /* reading from a child process doesn't
2860 nest -- when returning from reading
2861 the inner module, the outer one is
2862 unreadable (closed?) I've tried to
2863 save the gv to manage the lifespan of
2864 the pipe, but this didn't help. XXX */
2865 filter_child_proc = (GV *)arg;
2866 (void)SvREFCNT_inc(filter_child_proc);
2869 if (IoOFP(io) && IoOFP(io) != IoIFP(io)) {
2870 PerlIO_close(IoOFP(io));
2882 if (SvROK(arg) && SvTYPE(SvRV(arg)) == SVt_PVCV) {
2884 (void)SvREFCNT_inc(filter_sub);
2887 filter_state = SP[i];
2888 (void)SvREFCNT_inc(filter_state);
2892 tryrsfp = PerlIO_open("/dev/null",
2906 filter_has_file = 0;
2907 if (filter_child_proc) {
2908 SvREFCNT_dec(filter_child_proc);
2909 filter_child_proc = 0;
2912 SvREFCNT_dec(filter_state);
2916 SvREFCNT_dec(filter_sub);
2921 char *dir = SvPVx(dirsv, n_a);
2924 if ((unixdir = tounixpath(dir, Nullch)) == Nullch)
2926 sv_setpv(namesv, unixdir);
2927 sv_catpv(namesv, unixname);
2929 Perl_sv_setpvf(aTHX_ namesv, "%s/%s", dir, name);
2931 TAINT_PROPER("require");
2932 tryname = SvPVX(namesv);
2933 tryrsfp = doopen_pmc(tryname, PERL_SCRIPT_MODE);
2935 if (tryname[0] == '.' && tryname[1] == '/')
2943 SAVESPTR(CopFILEGV(&PL_compiling));
2944 CopFILEGV_set(&PL_compiling, gv_fetchfile(tryrsfp ? tryname : name));
2945 SvREFCNT_dec(namesv);
2947 if (PL_op->op_type == OP_REQUIRE) {
2948 char *msgstr = name;
2949 if (namesv) { /* did we lookup @INC? */
2950 SV *msg = sv_2mortal(newSVpv(msgstr,0));
2951 SV *dirmsgsv = NEWSV(0, 0);
2952 AV *ar = GvAVn(PL_incgv);
2954 sv_catpvn(msg, " in @INC", 8);
2955 if (instr(SvPVX(msg), ".h "))
2956 sv_catpv(msg, " (change .h to .ph maybe?)");
2957 if (instr(SvPVX(msg), ".ph "))
2958 sv_catpv(msg, " (did you run h2ph?)");
2959 sv_catpv(msg, " (@INC contains:");
2960 for (i = 0; i <= AvFILL(ar); i++) {
2961 char *dir = SvPVx(*av_fetch(ar, i, TRUE), n_a);
2962 Perl_sv_setpvf(aTHX_ dirmsgsv, " %s", dir);
2963 sv_catsv(msg, dirmsgsv);
2965 sv_catpvn(msg, ")", 1);
2966 SvREFCNT_dec(dirmsgsv);
2967 msgstr = SvPV_nolen(msg);
2969 DIE(aTHX_ "Can't locate %s", msgstr);
2975 SETERRNO(0, SS$_NORMAL);
2977 /* Assume success here to prevent recursive requirement. */
2978 (void)hv_store(GvHVn(PL_incgv), name, strlen(name),
2979 newSVsv(CopFILESV(&PL_compiling)), 0 );
2983 lex_start(sv_2mortal(newSVpvn("",0)));
2984 SAVEGENERICSV(PL_rsfp_filters);
2985 PL_rsfp_filters = Nullav;
2988 name = savepv(name);
2992 SAVEPPTR(PL_compiling.cop_warnings);
2993 if (PL_dowarn & G_WARN_ALL_ON)
2994 PL_compiling.cop_warnings = WARN_ALL ;
2995 else if (PL_dowarn & G_WARN_ALL_OFF)
2996 PL_compiling.cop_warnings = WARN_NONE ;
2998 PL_compiling.cop_warnings = WARN_STD ;
3000 if (filter_sub || filter_child_proc) {
3001 SV *datasv = filter_add(run_user_filter, Nullsv);
3002 IoLINES(datasv) = filter_has_file;
3003 IoFMT_GV(datasv) = (GV *)filter_child_proc;
3004 IoTOP_GV(datasv) = (GV *)filter_state;
3005 IoBOTTOM_GV(datasv) = (GV *)filter_sub;
3008 /* switch to eval mode */
3009 push_return(PL_op->op_next);
3010 PUSHBLOCK(cx, CXt_EVAL, SP);
3011 PUSHEVAL(cx, name, Nullgv);
3013 SAVEI16(PL_compiling.cop_line);
3014 PL_compiling.cop_line = 0;
3018 MUTEX_LOCK(&PL_eval_mutex);
3019 if (PL_eval_owner && PL_eval_owner != thr)
3020 while (PL_eval_owner)
3021 COND_WAIT(&PL_eval_cond, &PL_eval_mutex);
3022 PL_eval_owner = thr;
3023 MUTEX_UNLOCK(&PL_eval_mutex);
3024 #endif /* USE_THREADS */
3025 return DOCATCH(doeval(G_SCALAR, NULL));
3030 return pp_require();
3036 register PERL_CONTEXT *cx;
3038 I32 gimme = GIMME_V, was = PL_sub_generation;
3039 char tmpbuf[TYPE_DIGITS(long) + 12];
3044 if (!SvPV(sv,len) || !len)
3046 TAINT_PROPER("eval");
3052 /* switch to eval mode */
3054 SAVESPTR(CopFILEGV(&PL_compiling));
3055 sprintf(tmpbuf, "_<(eval %lu)", (unsigned long)++PL_evalseq);
3056 CopFILEGV_set(&PL_compiling, gv_fetchfile(tmpbuf+2));
3057 PL_compiling.cop_line = 1;
3058 /* XXX For C<eval "...">s within BEGIN {} blocks, this ends up
3059 deleting the eval's FILEGV from the stash before gv_check() runs
3060 (i.e. before run-time proper). To work around the coredump that
3061 ensues, we always turn GvMULTI_on for any globals that were
3062 introduced within evals. See force_ident(). GSAR 96-10-12 */
3063 safestr = savepv(tmpbuf);
3064 SAVEDELETE(PL_defstash, safestr, strlen(safestr));
3066 PL_hints = PL_op->op_targ;
3067 SAVEPPTR(PL_compiling.cop_warnings);
3068 if (!specialWARN(PL_compiling.cop_warnings)) {
3069 PL_compiling.cop_warnings = newSVsv(PL_compiling.cop_warnings) ;
3070 SAVEFREESV(PL_compiling.cop_warnings) ;
3073 push_return(PL_op->op_next);
3074 PUSHBLOCK(cx, (CXt_EVAL|CXp_REAL), SP);
3075 PUSHEVAL(cx, 0, Nullgv);
3077 /* prepare to compile string */
3079 if (PERLDB_LINE && PL_curstash != PL_debstash)
3080 save_lines(CopFILEAV(&PL_compiling), PL_linestr);
3083 MUTEX_LOCK(&PL_eval_mutex);
3084 if (PL_eval_owner && PL_eval_owner != thr)
3085 while (PL_eval_owner)
3086 COND_WAIT(&PL_eval_cond, &PL_eval_mutex);
3087 PL_eval_owner = thr;
3088 MUTEX_UNLOCK(&PL_eval_mutex);
3089 #endif /* USE_THREADS */
3090 ret = doeval(gimme, NULL);
3091 if (PERLDB_INTER && was != PL_sub_generation /* Some subs defined here. */
3092 && ret != PL_op->op_next) { /* Successive compilation. */
3093 strcpy(safestr, "_<(eval )"); /* Anything fake and short. */
3095 return DOCATCH(ret);
3105 register PERL_CONTEXT *cx;
3107 U8 save_flags = PL_op -> op_flags;
3112 retop = pop_return();
3115 if (gimme == G_VOID)
3117 else if (gimme == G_SCALAR) {
3120 if (SvFLAGS(TOPs) & SVs_TEMP)
3123 *MARK = sv_mortalcopy(TOPs);
3127 *MARK = &PL_sv_undef;
3132 /* in case LEAVE wipes old return values */
3133 for (mark = newsp + 1; mark <= SP; mark++) {
3134 if (!(SvFLAGS(*mark) & SVs_TEMP)) {
3135 *mark = sv_mortalcopy(*mark);
3136 TAINT_NOT; /* Each item is independent */
3140 PL_curpm = newpm; /* Don't pop $1 et al till now */
3142 if (AvFILLp(PL_comppad_name) >= 0)
3146 assert(CvDEPTH(PL_compcv) == 1);
3148 CvDEPTH(PL_compcv) = 0;
3151 if (optype == OP_REQUIRE &&
3152 !(gimme == G_SCALAR ? SvTRUE(*SP) : SP > newsp))
3154 /* Unassume the success we assumed earlier. */
3155 char *name = cx->blk_eval.old_name;
3156 (void)hv_delete(GvHVn(PL_incgv), name, strlen(name), G_DISCARD);
3157 retop = Perl_die(aTHX_ "%s did not return a true value", name);
3158 /* die_where() did LEAVE, or we won't be here */
3162 if (!(save_flags & OPf_SPECIAL))
3172 register PERL_CONTEXT *cx;
3173 I32 gimme = GIMME_V;
3178 push_return(cLOGOP->op_other->op_next);
3179 PUSHBLOCK(cx, CXt_EVAL, SP);
3181 PL_eval_root = PL_op; /* Only needed so that goto works right. */
3183 PL_in_eval = EVAL_INEVAL;
3186 return DOCATCH(PL_op->op_next);
3196 register PERL_CONTEXT *cx;
3204 if (gimme == G_VOID)
3206 else if (gimme == G_SCALAR) {
3209 if (SvFLAGS(TOPs) & (SVs_PADTMP|SVs_TEMP))
3212 *MARK = sv_mortalcopy(TOPs);
3216 *MARK = &PL_sv_undef;
3221 /* in case LEAVE wipes old return values */
3222 for (mark = newsp + 1; mark <= SP; mark++) {
3223 if (!(SvFLAGS(*mark) & (SVs_PADTMP|SVs_TEMP))) {
3224 *mark = sv_mortalcopy(*mark);
3225 TAINT_NOT; /* Each item is independent */
3229 PL_curpm = newpm; /* Don't pop $1 et al till now */
3237 S_doparseform(pTHX_ SV *sv)
3240 register char *s = SvPV_force(sv, len);
3241 register char *send = s + len;
3242 register char *base;
3243 register I32 skipspaces = 0;
3246 bool postspace = FALSE;
3254 Perl_croak(aTHX_ "Null picture in formline");
3256 New(804, fops, (send - s)*3+10, U16); /* Almost certainly too long... */
3261 *fpc++ = FF_LINEMARK;
3262 noblank = repeat = FALSE;
3280 case ' ': case '\t':
3291 *fpc++ = FF_LITERAL;
3299 *fpc++ = skipspaces;
3303 *fpc++ = FF_NEWLINE;
3307 arg = fpc - linepc + 1;
3314 *fpc++ = FF_LINEMARK;
3315 noblank = repeat = FALSE;
3324 ischop = s[-1] == '^';
3330 arg = (s - base) - 1;
3332 *fpc++ = FF_LITERAL;
3341 *fpc++ = FF_LINEGLOB;
3343 else if (*s == '#' || (*s == '.' && s[1] == '#')) {
3344 arg = ischop ? 512 : 0;
3354 arg |= 256 + (s - f);
3356 *fpc++ = s - base; /* fieldsize for FETCH */
3357 *fpc++ = FF_DECIMAL;
3362 bool ismore = FALSE;
3365 while (*++s == '>') ;
3366 prespace = FF_SPACE;
3368 else if (*s == '|') {
3369 while (*++s == '|') ;
3370 prespace = FF_HALFSPACE;
3375 while (*++s == '<') ;
3378 if (*s == '.' && s[1] == '.' && s[2] == '.') {
3382 *fpc++ = s - base; /* fieldsize for FETCH */
3384 *fpc++ = ischop ? FF_CHECKCHOP : FF_CHECKNL;
3402 { /* need to jump to the next word */
3404 z = WORD_ALIGN - SvCUR(sv) % WORD_ALIGN;
3405 SvGROW(sv, SvCUR(sv) + z + arg * sizeof(U16) + 4);
3406 s = SvPVX(sv) + SvCUR(sv) + z;
3408 Copy(fops, s, arg, U16);
3410 sv_magic(sv, Nullsv, 'f', Nullch, 0);
3415 * The rest of this file was derived from source code contributed
3418 * NOTE: this code was derived from Tom Horsley's qsort replacement
3419 * and should not be confused with the original code.
3422 /* Copyright (C) Tom Horsley, 1997. All rights reserved.
3424 Permission granted to distribute under the same terms as perl which are
3427 This program is free software; you can redistribute it and/or modify
3428 it under the terms of either:
3430 a) the GNU General Public License as published by the Free
3431 Software Foundation; either version 1, or (at your option) any
3434 b) the "Artistic License" which comes with this Kit.
3436 Details on the perl license can be found in the perl source code which
3437 may be located via the www.perl.com web page.
3439 This is the most wonderfulest possible qsort I can come up with (and
3440 still be mostly portable) My (limited) tests indicate it consistently
3441 does about 20% fewer calls to compare than does the qsort in the Visual
3442 C++ library, other vendors may vary.
3444 Some of the ideas in here can be found in "Algorithms" by Sedgewick,
3445 others I invented myself (or more likely re-invented since they seemed
3446 pretty obvious once I watched the algorithm operate for a while).
3448 Most of this code was written while watching the Marlins sweep the Giants
3449 in the 1997 National League Playoffs - no Braves fans allowed to use this
3450 code (just kidding :-).
3452 I realize that if I wanted to be true to the perl tradition, the only
3453 comment in this file would be something like:
3455 ...they shuffled back towards the rear of the line. 'No, not at the
3456 rear!' the slave-driver shouted. 'Three files up. And stay there...
3458 However, I really needed to violate that tradition just so I could keep
3459 track of what happens myself, not to mention some poor fool trying to
3460 understand this years from now :-).
3463 /* ********************************************************** Configuration */
3465 #ifndef QSORT_ORDER_GUESS
3466 #define QSORT_ORDER_GUESS 2 /* Select doubling version of the netBSD trick */
3469 /* QSORT_MAX_STACK is the largest number of partitions that can be stacked up for
3470 future processing - a good max upper bound is log base 2 of memory size
3471 (32 on 32 bit machines, 64 on 64 bit machines, etc). In reality can
3472 safely be smaller than that since the program is taking up some space and
3473 most operating systems only let you grab some subset of contiguous
3474 memory (not to mention that you are normally sorting data larger than
3475 1 byte element size :-).
3477 #ifndef QSORT_MAX_STACK
3478 #define QSORT_MAX_STACK 32
3481 /* QSORT_BREAK_EVEN is the size of the largest partition we should insertion sort.
3482 Anything bigger and we use qsort. If you make this too small, the qsort
3483 will probably break (or become less efficient), because it doesn't expect
3484 the middle element of a partition to be the same as the right or left -
3485 you have been warned).
3487 #ifndef QSORT_BREAK_EVEN
3488 #define QSORT_BREAK_EVEN 6
3491 /* ************************************************************* Data Types */
3493 /* hold left and right index values of a partition waiting to be sorted (the
3494 partition includes both left and right - right is NOT one past the end or
3495 anything like that).
3497 struct partition_stack_entry {
3500 #ifdef QSORT_ORDER_GUESS
3501 int qsort_break_even;
3505 /* ******************************************************* Shorthand Macros */
3507 /* Note that these macros will be used from inside the qsort function where
3508 we happen to know that the variable 'elt_size' contains the size of an
3509 array element and the variable 'temp' points to enough space to hold a
3510 temp element and the variable 'array' points to the array being sorted
3511 and 'compare' is the pointer to the compare routine.
3513 Also note that there are very many highly architecture specific ways
3514 these might be sped up, but this is simply the most generally portable
3515 code I could think of.
3518 /* Return < 0 == 0 or > 0 as the value of elt1 is < elt2, == elt2, > elt2
3520 #define qsort_cmp(elt1, elt2) \
3521 ((*compare)(aTHXo_ array[elt1], array[elt2]))
3523 #ifdef QSORT_ORDER_GUESS
3524 #define QSORT_NOTICE_SWAP swapped++;
3526 #define QSORT_NOTICE_SWAP
3529 /* swaps contents of array elements elt1, elt2.
3531 #define qsort_swap(elt1, elt2) \
3534 temp = array[elt1]; \
3535 array[elt1] = array[elt2]; \
3536 array[elt2] = temp; \
3539 /* rotate contents of elt1, elt2, elt3 such that elt1 gets elt2, elt2 gets
3540 elt3 and elt3 gets elt1.
3542 #define qsort_rotate(elt1, elt2, elt3) \
3545 temp = array[elt1]; \
3546 array[elt1] = array[elt2]; \
3547 array[elt2] = array[elt3]; \
3548 array[elt3] = temp; \
3551 /* ************************************************************ Debug stuff */
3558 return; /* good place to set a breakpoint */
3561 #define qsort_assert(t) (void)( (t) || (break_here(), 0) )
3564 doqsort_all_asserts(
3568 int (*compare)(const void * elt1, const void * elt2),
3569 int pc_left, int pc_right, int u_left, int u_right)
3573 qsort_assert(pc_left <= pc_right);
3574 qsort_assert(u_right < pc_left);
3575 qsort_assert(pc_right < u_left);
3576 for (i = u_right + 1; i < pc_left; ++i) {
3577 qsort_assert(qsort_cmp(i, pc_left) < 0);
3579 for (i = pc_left; i < pc_right; ++i) {
3580 qsort_assert(qsort_cmp(i, pc_right) == 0);
3582 for (i = pc_right + 1; i < u_left; ++i) {
3583 qsort_assert(qsort_cmp(pc_right, i) < 0);
3587 #define qsort_all_asserts(PC_LEFT, PC_RIGHT, U_LEFT, U_RIGHT) \
3588 doqsort_all_asserts(array, num_elts, elt_size, compare, \
3589 PC_LEFT, PC_RIGHT, U_LEFT, U_RIGHT)
3593 #define qsort_assert(t) ((void)0)
3595 #define qsort_all_asserts(PC_LEFT, PC_RIGHT, U_LEFT, U_RIGHT) ((void)0)
3599 /* ****************************************************************** qsort */
3602 S_qsortsv(pTHX_ SV ** array, size_t num_elts, SVCOMPARE_t compare)
3606 struct partition_stack_entry partition_stack[QSORT_MAX_STACK];
3607 int next_stack_entry = 0;
3611 #ifdef QSORT_ORDER_GUESS
3612 int qsort_break_even;
3616 /* Make sure we actually have work to do.
3618 if (num_elts <= 1) {
3622 /* Setup the initial partition definition and fall into the sorting loop
3625 part_right = (int)(num_elts - 1);
3626 #ifdef QSORT_ORDER_GUESS
3627 qsort_break_even = QSORT_BREAK_EVEN;
3629 #define qsort_break_even QSORT_BREAK_EVEN
3632 if ((part_right - part_left) >= qsort_break_even) {
3633 /* OK, this is gonna get hairy, so lets try to document all the
3634 concepts and abbreviations and variables and what they keep
3637 pc: pivot chunk - the set of array elements we accumulate in the
3638 middle of the partition, all equal in value to the original
3639 pivot element selected. The pc is defined by:
3641 pc_left - the leftmost array index of the pc
3642 pc_right - the rightmost array index of the pc
3644 we start with pc_left == pc_right and only one element
3645 in the pivot chunk (but it can grow during the scan).
3647 u: uncompared elements - the set of elements in the partition
3648 we have not yet compared to the pivot value. There are two
3649 uncompared sets during the scan - one to the left of the pc
3650 and one to the right.
3652 u_right - the rightmost index of the left side's uncompared set
3653 u_left - the leftmost index of the right side's uncompared set
3655 The leftmost index of the left sides's uncompared set
3656 doesn't need its own variable because it is always defined
3657 by the leftmost edge of the whole partition (part_left). The
3658 same goes for the rightmost edge of the right partition
3661 We know there are no uncompared elements on the left once we
3662 get u_right < part_left and no uncompared elements on the
3663 right once u_left > part_right. When both these conditions
3664 are met, we have completed the scan of the partition.
3666 Any elements which are between the pivot chunk and the
3667 uncompared elements should be less than the pivot value on
3668 the left side and greater than the pivot value on the right
3669 side (in fact, the goal of the whole algorithm is to arrange
3670 for that to be true and make the groups of less-than and
3671 greater-then elements into new partitions to sort again).
3673 As you marvel at the complexity of the code and wonder why it
3674 has to be so confusing. Consider some of the things this level
3675 of confusion brings:
3677 Once I do a compare, I squeeze every ounce of juice out of it. I
3678 never do compare calls I don't have to do, and I certainly never
3681 I also never swap any elements unless I can prove there is a
3682 good reason. Many sort algorithms will swap a known value with
3683 an uncompared value just to get things in the right place (or
3684 avoid complexity :-), but that uncompared value, once it gets
3685 compared, may then have to be swapped again. A lot of the
3686 complexity of this code is due to the fact that it never swaps
3687 anything except compared values, and it only swaps them when the
3688 compare shows they are out of position.
3690 int pc_left, pc_right;
3691 int u_right, u_left;
3695 pc_left = ((part_left + part_right) / 2);
3697 u_right = pc_left - 1;
3698 u_left = pc_right + 1;
3700 /* Qsort works best when the pivot value is also the median value
3701 in the partition (unfortunately you can't find the median value
3702 without first sorting :-), so to give the algorithm a helping
3703 hand, we pick 3 elements and sort them and use the median value
3704 of that tiny set as the pivot value.
3706 Some versions of qsort like to use the left middle and right as
3707 the 3 elements to sort so they can insure the ends of the
3708 partition will contain values which will stop the scan in the
3709 compare loop, but when you have to call an arbitrarily complex
3710 routine to do a compare, its really better to just keep track of
3711 array index values to know when you hit the edge of the
3712 partition and avoid the extra compare. An even better reason to
3713 avoid using a compare call is the fact that you can drop off the
3714 edge of the array if someone foolishly provides you with an
3715 unstable compare function that doesn't always provide consistent
3718 So, since it is simpler for us to compare the three adjacent
3719 elements in the middle of the partition, those are the ones we
3720 pick here (conveniently pointed at by u_right, pc_left, and
3721 u_left). The values of the left, center, and right elements
3722 are refered to as l c and r in the following comments.
3725 #ifdef QSORT_ORDER_GUESS
3728 s = qsort_cmp(u_right, pc_left);
3731 s = qsort_cmp(pc_left, u_left);
3732 /* if l < c, c < r - already in order - nothing to do */
3734 /* l < c, c == r - already in order, pc grows */
3736 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3738 /* l < c, c > r - need to know more */
3739 s = qsort_cmp(u_right, u_left);
3741 /* l < c, c > r, l < r - swap c & r to get ordered */
3742 qsort_swap(pc_left, u_left);
3743 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3744 } else if (s == 0) {
3745 /* l < c, c > r, l == r - swap c&r, grow pc */
3746 qsort_swap(pc_left, u_left);
3748 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3750 /* l < c, c > r, l > r - make lcr into rlc to get ordered */
3751 qsort_rotate(pc_left, u_right, u_left);
3752 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3755 } else if (s == 0) {
3757 s = qsort_cmp(pc_left, u_left);
3759 /* l == c, c < r - already in order, grow pc */
3761 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3762 } else if (s == 0) {
3763 /* l == c, c == r - already in order, grow pc both ways */
3766 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3768 /* l == c, c > r - swap l & r, grow pc */
3769 qsort_swap(u_right, u_left);
3771 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3775 s = qsort_cmp(pc_left, u_left);
3777 /* l > c, c < r - need to know more */
3778 s = qsort_cmp(u_right, u_left);
3780 /* l > c, c < r, l < r - swap l & c to get ordered */
3781 qsort_swap(u_right, pc_left);
3782 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3783 } else if (s == 0) {
3784 /* l > c, c < r, l == r - swap l & c, grow pc */
3785 qsort_swap(u_right, pc_left);
3787 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3789 /* l > c, c < r, l > r - rotate lcr into crl to order */
3790 qsort_rotate(u_right, pc_left, u_left);
3791 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3793 } else if (s == 0) {
3794 /* l > c, c == r - swap ends, grow pc */
3795 qsort_swap(u_right, u_left);
3797 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3799 /* l > c, c > r - swap ends to get in order */
3800 qsort_swap(u_right, u_left);
3801 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3804 /* We now know the 3 middle elements have been compared and
3805 arranged in the desired order, so we can shrink the uncompared
3810 qsort_all_asserts(pc_left, pc_right, u_left, u_right);
3812 /* The above massive nested if was the simple part :-). We now have
3813 the middle 3 elements ordered and we need to scan through the
3814 uncompared sets on either side, swapping elements that are on
3815 the wrong side or simply shuffling equal elements around to get
3816 all equal elements into the pivot chunk.
3820 int still_work_on_left;
3821 int still_work_on_right;
3823 /* Scan the uncompared values on the left. If I find a value
3824 equal to the pivot value, move it over so it is adjacent to
3825 the pivot chunk and expand the pivot chunk. If I find a value
3826 less than the pivot value, then just leave it - its already
3827 on the correct side of the partition. If I find a greater
3828 value, then stop the scan.
3830 while (still_work_on_left = (u_right >= part_left)) {
3831 s = qsort_cmp(u_right, pc_left);
3834 } else if (s == 0) {
3836 if (pc_left != u_right) {
3837 qsort_swap(u_right, pc_left);
3843 qsort_assert(u_right < pc_left);
3844 qsort_assert(pc_left <= pc_right);
3845 qsort_assert(qsort_cmp(u_right + 1, pc_left) <= 0);
3846 qsort_assert(qsort_cmp(pc_left, pc_right) == 0);
3849 /* Do a mirror image scan of uncompared values on the right
3851 while (still_work_on_right = (u_left <= part_right)) {
3852 s = qsort_cmp(pc_right, u_left);
3855 } else if (s == 0) {
3857 if (pc_right != u_left) {
3858 qsort_swap(pc_right, u_left);
3864 qsort_assert(u_left > pc_right);
3865 qsort_assert(pc_left <= pc_right);
3866 qsort_assert(qsort_cmp(pc_right, u_left - 1) <= 0);
3867 qsort_assert(qsort_cmp(pc_left, pc_right) == 0);
3870 if (still_work_on_left) {
3871 /* I know I have a value on the left side which needs to be
3872 on the right side, but I need to know more to decide
3873 exactly the best thing to do with it.
3875 if (still_work_on_right) {
3876 /* I know I have values on both side which are out of
3877 position. This is a big win because I kill two birds
3878 with one swap (so to speak). I can advance the
3879 uncompared pointers on both sides after swapping both
3880 of them into the right place.
3882 qsort_swap(u_right, u_left);
3885 qsort_all_asserts(pc_left, pc_right, u_left, u_right);
3887 /* I have an out of position value on the left, but the
3888 right is fully scanned, so I "slide" the pivot chunk
3889 and any less-than values left one to make room for the
3890 greater value over on the right. If the out of position
3891 value is immediately adjacent to the pivot chunk (there
3892 are no less-than values), I can do that with a swap,
3893 otherwise, I have to rotate one of the less than values
3894 into the former position of the out of position value
3895 and the right end of the pivot chunk into the left end
3899 if (pc_left == u_right) {
3900 qsort_swap(u_right, pc_right);
3901 qsort_all_asserts(pc_left, pc_right-1, u_left, u_right-1);
3903 qsort_rotate(u_right, pc_left, pc_right);
3904 qsort_all_asserts(pc_left, pc_right-1, u_left, u_right-1);
3909 } else if (still_work_on_right) {
3910 /* Mirror image of complex case above: I have an out of
3911 position value on the right, but the left is fully
3912 scanned, so I need to shuffle things around to make room
3913 for the right value on the left.
3916 if (pc_right == u_left) {
3917 qsort_swap(u_left, pc_left);
3918 qsort_all_asserts(pc_left+1, pc_right, u_left+1, u_right);
3920 qsort_rotate(pc_right, pc_left, u_left);
3921 qsort_all_asserts(pc_left+1, pc_right, u_left+1, u_right);
3926 /* No more scanning required on either side of partition,
3927 break out of loop and figure out next set of partitions
3933 /* The elements in the pivot chunk are now in the right place. They
3934 will never move or be compared again. All I have to do is decide
3935 what to do with the stuff to the left and right of the pivot
3938 Notes on the QSORT_ORDER_GUESS ifdef code:
3940 1. If I just built these partitions without swapping any (or
3941 very many) elements, there is a chance that the elements are
3942 already ordered properly (being properly ordered will
3943 certainly result in no swapping, but the converse can't be
3946 2. A (properly written) insertion sort will run faster on
3947 already ordered data than qsort will.
3949 3. Perhaps there is some way to make a good guess about
3950 switching to an insertion sort earlier than partition size 6
3951 (for instance - we could save the partition size on the stack
3952 and increase the size each time we find we didn't swap, thus
3953 switching to insertion sort earlier for partitions with a
3954 history of not swapping).
3956 4. Naturally, if I just switch right away, it will make
3957 artificial benchmarks with pure ascending (or descending)
3958 data look really good, but is that a good reason in general?
3962 #ifdef QSORT_ORDER_GUESS
3964 #if QSORT_ORDER_GUESS == 1
3965 qsort_break_even = (part_right - part_left) + 1;
3967 #if QSORT_ORDER_GUESS == 2
3968 qsort_break_even *= 2;
3970 #if QSORT_ORDER_GUESS == 3
3971 int prev_break = qsort_break_even;
3972 qsort_break_even *= qsort_break_even;
3973 if (qsort_break_even < prev_break) {
3974 qsort_break_even = (part_right - part_left) + 1;
3978 qsort_break_even = QSORT_BREAK_EVEN;
3982 if (part_left < pc_left) {
3983 /* There are elements on the left which need more processing.
3984 Check the right as well before deciding what to do.
3986 if (pc_right < part_right) {
3987 /* We have two partitions to be sorted. Stack the biggest one
3988 and process the smallest one on the next iteration. This
3989 minimizes the stack height by insuring that any additional
3990 stack entries must come from the smallest partition which
3991 (because it is smallest) will have the fewest
3992 opportunities to generate additional stack entries.
3994 if ((part_right - pc_right) > (pc_left - part_left)) {
3995 /* stack the right partition, process the left */
3996 partition_stack[next_stack_entry].left = pc_right + 1;
3997 partition_stack[next_stack_entry].right = part_right;
3998 #ifdef QSORT_ORDER_GUESS
3999 partition_stack[next_stack_entry].qsort_break_even = qsort_break_even;
4001 part_right = pc_left - 1;
4003 /* stack the left partition, process the right */
4004 partition_stack[next_stack_entry].left = part_left;
4005 partition_stack[next_stack_entry].right = pc_left - 1;
4006 #ifdef QSORT_ORDER_GUESS
4007 partition_stack[next_stack_entry].qsort_break_even = qsort_break_even;
4009 part_left = pc_right + 1;
4011 qsort_assert(next_stack_entry < QSORT_MAX_STACK);
4014 /* The elements on the left are the only remaining elements
4015 that need sorting, arrange for them to be processed as the
4018 part_right = pc_left - 1;
4020 } else if (pc_right < part_right) {
4021 /* There is only one chunk on the right to be sorted, make it
4022 the new partition and loop back around.
4024 part_left = pc_right + 1;
4026 /* This whole partition wound up in the pivot chunk, so
4027 we need to get a new partition off the stack.
4029 if (next_stack_entry == 0) {
4030 /* the stack is empty - we are done */
4034 part_left = partition_stack[next_stack_entry].left;
4035 part_right = partition_stack[next_stack_entry].right;
4036 #ifdef QSORT_ORDER_GUESS
4037 qsort_break_even = partition_stack[next_stack_entry].qsort_break_even;
4041 /* This partition is too small to fool with qsort complexity, just
4042 do an ordinary insertion sort to minimize overhead.
4045 /* Assume 1st element is in right place already, and start checking
4046 at 2nd element to see where it should be inserted.
4048 for (i = part_left + 1; i <= part_right; ++i) {
4050 /* Scan (backwards - just in case 'i' is already in right place)
4051 through the elements already sorted to see if the ith element
4052 belongs ahead of one of them.
4054 for (j = i - 1; j >= part_left; --j) {
4055 if (qsort_cmp(i, j) >= 0) {
4056 /* i belongs right after j
4063 /* Looks like we really need to move some things
4067 for (k = i - 1; k >= j; --k)
4068 array[k + 1] = array[k];
4073 /* That partition is now sorted, grab the next one, or get out
4074 of the loop if there aren't any more.
4077 if (next_stack_entry == 0) {
4078 /* the stack is empty - we are done */
4082 part_left = partition_stack[next_stack_entry].left;
4083 part_right = partition_stack[next_stack_entry].right;
4084 #ifdef QSORT_ORDER_GUESS
4085 qsort_break_even = partition_stack[next_stack_entry].qsort_break_even;
4090 /* Believe it or not, the array is sorted at this point! */
4102 sortcv(pTHXo_ SV *a, SV *b)
4105 I32 oldsaveix = PL_savestack_ix;
4106 I32 oldscopeix = PL_scopestack_ix;
4108 GvSV(PL_firstgv) = a;
4109 GvSV(PL_secondgv) = b;
4110 PL_stack_sp = PL_stack_base;
4113 if (PL_stack_sp != PL_stack_base + 1)
4114 Perl_croak(aTHX_ "Sort subroutine didn't return single value");
4115 if (!SvNIOKp(*PL_stack_sp))
4116 Perl_croak(aTHX_ "Sort subroutine didn't return a numeric value");
4117 result = SvIV(*PL_stack_sp);
4118 while (PL_scopestack_ix > oldscopeix) {
4121 leave_scope(oldsaveix);
4127 sv_ncmp(pTHXo_ SV *a, SV *b)
4131 return nv1 < nv2 ? -1 : nv1 > nv2 ? 1 : 0;
4135 sv_i_ncmp(pTHXo_ SV *a, SV *b)
4139 return iv1 < iv2 ? -1 : iv1 > iv2 ? 1 : 0;
4141 #define tryCALL_AMAGICbin(left,right,meth,svp) STMT_START { \
4143 if (PL_amagic_generation) { \
4144 if (SvAMAGIC(left)||SvAMAGIC(right))\
4145 *svp = amagic_call(left, \
4153 amagic_ncmp(pTHXo_ register SV *a, register SV *b)
4156 tryCALL_AMAGICbin(a,b,ncmp,&tmpsv);
4161 I32 i = SvIVX(tmpsv);
4171 return sv_ncmp(aTHXo_ a, b);
4175 amagic_i_ncmp(pTHXo_ register SV *a, register SV *b)
4178 tryCALL_AMAGICbin(a,b,ncmp,&tmpsv);
4183 I32 i = SvIVX(tmpsv);
4193 return sv_i_ncmp(aTHXo_ a, b);
4197 amagic_cmp(pTHXo_ register SV *str1, register SV *str2)
4200 tryCALL_AMAGICbin(str1,str2,scmp,&tmpsv);
4205 I32 i = SvIVX(tmpsv);
4215 return sv_cmp(str1, str2);
4219 amagic_cmp_locale(pTHXo_ register SV *str1, register SV *str2)
4222 tryCALL_AMAGICbin(str1,str2,scmp,&tmpsv);
4227 I32 i = SvIVX(tmpsv);
4237 return sv_cmp_locale(str1, str2);
4241 run_user_filter(pTHXo_ int idx, SV *buf_sv, int maxlen)
4243 SV *datasv = FILTER_DATA(idx);
4244 int filter_has_file = IoLINES(datasv);
4245 GV *filter_child_proc = (GV *)IoFMT_GV(datasv);
4246 SV *filter_state = (SV *)IoTOP_GV(datasv);
4247 SV *filter_sub = (SV *)IoBOTTOM_GV(datasv);
4250 /* I was having segfault trouble under Linux 2.2.5 after a
4251 parse error occured. (Had to hack around it with a test
4252 for PL_error_count == 0.) Solaris doesn't segfault --
4253 not sure where the trouble is yet. XXX */
4255 if (filter_has_file) {
4256 len = FILTER_READ(idx+1, buf_sv, maxlen);
4259 if (filter_sub && len >= 0) {
4270 PUSHs(sv_2mortal(newSViv(maxlen)));
4272 PUSHs(filter_state);
4275 count = call_sv(filter_sub, G_SCALAR);
4291 IoLINES(datasv) = 0;
4292 if (filter_child_proc) {
4293 SvREFCNT_dec(filter_child_proc);
4294 IoFMT_GV(datasv) = Nullgv;
4297 SvREFCNT_dec(filter_state);
4298 IoTOP_GV(datasv) = Nullgv;
4301 SvREFCNT_dec(filter_sub);
4302 IoBOTTOM_GV(datasv) = Nullgv;
4304 filter_del(run_user_filter);
4313 sv_cmp_locale_static(pTHXo_ register SV *str1, register SV *str2)
4315 return sv_cmp_locale(str1, str2);
4319 sv_cmp_static(pTHXo_ register SV *str1, register SV *str2)
4321 return sv_cmp(str1, str2);
4324 #endif /* PERL_OBJECT */