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(PerlIO_stderr(), "%-16s%ld\n", name, (long) arg);
335 PerlIO_printf(PerlIO_stderr(), "%-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 Perl_croak(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_die_where(pTHX_ char *message, STRLEN msglen)
1257 register PERL_CONTEXT *cx;
1262 if (PL_in_eval & EVAL_KEEPERR) {
1265 svp = hv_fetch(ERRHV, message, msglen, TRUE);
1268 static char prefix[] = "\t(in cleanup) ";
1270 sv_upgrade(*svp, SVt_IV);
1271 (void)SvIOK_only(*svp);
1274 SvGROW(err, SvCUR(err)+sizeof(prefix)+msglen);
1275 sv_catpvn(err, prefix, sizeof(prefix)-1);
1276 sv_catpvn(err, message, msglen);
1277 if (ckWARN(WARN_UNSAFE)) {
1278 STRLEN start = SvCUR(err)-msglen-sizeof(prefix)+1;
1279 Perl_warner(aTHX_ WARN_UNSAFE, SvPVX(err)+start);
1286 sv_setpvn(ERRSV, message, msglen);
1289 message = SvPVx(ERRSV, msglen);
1291 while ((cxix = dopoptoeval(cxstack_ix)) < 0 && PL_curstackinfo->si_prev) {
1299 if (cxix < cxstack_ix)
1302 POPBLOCK(cx,PL_curpm);
1303 if (CxTYPE(cx) != CXt_EVAL) {
1304 PerlIO_write(PerlIO_stderr(), "panic: die ", 11);
1305 PerlIO_write(PerlIO_stderr(), message, msglen);
1310 if (gimme == G_SCALAR)
1311 *++newsp = &PL_sv_undef;
1312 PL_stack_sp = newsp;
1316 if (optype == OP_REQUIRE) {
1317 char* msg = SvPVx(ERRSV, n_a);
1318 DIE(aTHX_ "%s", *msg ? msg : "Compilation failed in require");
1320 return pop_return();
1324 message = SvPVx(ERRSV, msglen);
1327 /* SFIO can really mess with your errno */
1330 PerlIO_write(PerlIO_stderr(), message, msglen);
1331 (void)PerlIO_flush(PerlIO_stderr());
1344 if (SvTRUE(left) != SvTRUE(right))
1356 RETURNOP(cLOGOP->op_other);
1365 RETURNOP(cLOGOP->op_other);
1371 register I32 cxix = dopoptosub(cxstack_ix);
1372 register PERL_CONTEXT *cx;
1373 register PERL_CONTEXT *ccstack = cxstack;
1374 PERL_SI *top_si = PL_curstackinfo;
1385 /* we may be in a higher stacklevel, so dig down deeper */
1386 while (cxix < 0 && top_si->si_type != PERLSI_MAIN) {
1387 top_si = top_si->si_prev;
1388 ccstack = top_si->si_cxstack;
1389 cxix = dopoptosub_at(ccstack, top_si->si_cxix);
1392 if (GIMME != G_ARRAY)
1396 if (PL_DBsub && cxix >= 0 &&
1397 ccstack[cxix].blk_sub.cv == GvCV(PL_DBsub))
1401 cxix = dopoptosub_at(ccstack, cxix - 1);
1404 cx = &ccstack[cxix];
1405 if (CxTYPE(cx) == CXt_SUB) {
1406 dbcxix = dopoptosub_at(ccstack, cxix - 1);
1407 /* We expect that ccstack[dbcxix] is CXt_SUB, anyway, the
1408 field below is defined for any cx. */
1409 if (PL_DBsub && dbcxix >= 0 && ccstack[dbcxix].blk_sub.cv == GvCV(PL_DBsub))
1410 cx = &ccstack[dbcxix];
1413 if (GIMME != G_ARRAY) {
1414 hv = cx->blk_oldcop->cop_stash;
1416 PUSHs(&PL_sv_undef);
1419 sv_setpv(TARG, HvNAME(hv));
1425 hv = cx->blk_oldcop->cop_stash;
1427 PUSHs(&PL_sv_undef);
1429 PUSHs(sv_2mortal(newSVpv(HvNAME(hv), 0)));
1430 PUSHs(sv_2mortal(newSVpvn(SvPVX(GvSV(cx->blk_oldcop->cop_filegv)),
1431 SvCUR(GvSV(cx->blk_oldcop->cop_filegv)))));
1432 PUSHs(sv_2mortal(newSViv((I32)cx->blk_oldcop->cop_line)));
1435 if (CxTYPE(cx) == CXt_SUB) { /* So is ccstack[dbcxix]. */
1437 gv_efullname3(sv, CvGV(ccstack[cxix].blk_sub.cv), Nullch);
1438 PUSHs(sv_2mortal(sv));
1439 PUSHs(sv_2mortal(newSViv((I32)cx->blk_sub.hasargs)));
1442 PUSHs(sv_2mortal(newSVpvn("(eval)",6)));
1443 PUSHs(sv_2mortal(newSViv(0)));
1445 gimme = (I32)cx->blk_gimme;
1446 if (gimme == G_VOID)
1447 PUSHs(&PL_sv_undef);
1449 PUSHs(sv_2mortal(newSViv(gimme & G_ARRAY)));
1450 if (CxTYPE(cx) == CXt_EVAL) {
1451 if (cx->blk_eval.old_op_type == OP_ENTEREVAL) {
1452 PUSHs(cx->blk_eval.cur_text);
1455 else if (cx->blk_eval.old_name) { /* Try blocks have old_name == 0. */
1456 /* Require, put the name. */
1457 PUSHs(sv_2mortal(newSVpv(cx->blk_eval.old_name, 0)));
1462 PUSHs(&PL_sv_undef);
1463 PUSHs(&PL_sv_undef);
1465 if (CxTYPE(cx) == CXt_SUB && cx->blk_sub.hasargs
1466 && PL_curcop->cop_stash == PL_debstash)
1468 AV *ary = cx->blk_sub.argarray;
1469 int off = AvARRAY(ary) - AvALLOC(ary);
1473 PL_dbargs = GvAV(gv_AVadd(tmpgv = gv_fetchpv("DB::args", TRUE,
1476 AvREAL_off(PL_dbargs); /* XXX Should be REIFY */
1479 if (AvMAX(PL_dbargs) < AvFILLp(ary) + off)
1480 av_extend(PL_dbargs, AvFILLp(ary) + off);
1481 Copy(AvALLOC(ary), AvARRAY(PL_dbargs), AvFILLp(ary) + 1 + off, SV*);
1482 AvFILLp(PL_dbargs) = AvFILLp(ary) + off;
1484 /* XXX only hints propagated via op_private are currently
1485 * visible (others are not easily accessible, since they
1486 * use the global PL_hints) */
1487 PUSHs(sv_2mortal(newSViv((I32)cx->blk_oldcop->op_private &
1488 HINT_PRIVATE_MASK)));
1502 sv_reset(tmps, PL_curcop->cop_stash);
1514 PL_curcop = (COP*)PL_op;
1515 TAINT_NOT; /* Each statement is presumed innocent */
1516 PL_stack_sp = PL_stack_base + cxstack[cxstack_ix].blk_oldsp;
1519 if (PL_op->op_private || SvIV(PL_DBsingle) || SvIV(PL_DBsignal) || SvIV(PL_DBtrace))
1523 register PERL_CONTEXT *cx;
1524 I32 gimme = G_ARRAY;
1531 DIE(aTHX_ "No DB::DB routine defined");
1533 if (CvDEPTH(cv) >= 1 && !(PL_debug & (1<<30))) /* don't do recursive DB::DB call */
1545 push_return(PL_op->op_next);
1546 PUSHBLOCK(cx, CXt_SUB, SP);
1549 (void)SvREFCNT_inc(cv);
1550 SAVESPTR(PL_curpad);
1551 PL_curpad = AvARRAY((AV*)*av_fetch(CvPADLIST(cv),1,FALSE));
1552 RETURNOP(CvSTART(cv));
1566 register PERL_CONTEXT *cx;
1567 I32 gimme = GIMME_V;
1574 if (PL_op->op_flags & OPf_SPECIAL) {
1576 svp = &THREADSV(PL_op->op_targ); /* per-thread variable */
1577 SAVEGENERICSV(*svp);
1581 #endif /* USE_THREADS */
1582 if (PL_op->op_targ) {
1583 svp = &PL_curpad[PL_op->op_targ]; /* "my" variable */
1587 svp = &GvSV((GV*)POPs); /* symbol table variable */
1588 SAVEGENERICSV(*svp);
1594 PUSHBLOCK(cx, CXt_LOOP, SP);
1595 PUSHLOOP(cx, svp, MARK);
1596 if (PL_op->op_flags & OPf_STACKED) {
1597 cx->blk_loop.iterary = (AV*)SvREFCNT_inc(POPs);
1598 if (SvTYPE(cx->blk_loop.iterary) != SVt_PVAV) {
1600 if (SvNIOKp(sv) || !SvPOKp(sv) ||
1601 (looks_like_number(sv) && *SvPVX(sv) != '0')) {
1602 if (SvNV(sv) < IV_MIN ||
1603 SvNV((SV*)cx->blk_loop.iterary) >= IV_MAX)
1604 Perl_croak(aTHX_ "Range iterator outside integer range");
1605 cx->blk_loop.iterix = SvIV(sv);
1606 cx->blk_loop.itermax = SvIV((SV*)cx->blk_loop.iterary);
1609 cx->blk_loop.iterlval = newSVsv(sv);
1613 cx->blk_loop.iterary = PL_curstack;
1614 AvFILLp(PL_curstack) = SP - PL_stack_base;
1615 cx->blk_loop.iterix = MARK - PL_stack_base;
1624 register PERL_CONTEXT *cx;
1625 I32 gimme = GIMME_V;
1631 PUSHBLOCK(cx, CXt_LOOP, SP);
1632 PUSHLOOP(cx, 0, SP);
1640 register PERL_CONTEXT *cx;
1641 struct block_loop cxloop;
1649 POPLOOP1(cx); /* Delay POPLOOP2 until stack values are safe */
1652 if (gimme == G_VOID)
1654 else if (gimme == G_SCALAR) {
1656 *++newsp = sv_mortalcopy(*SP);
1658 *++newsp = &PL_sv_undef;
1662 *++newsp = sv_mortalcopy(*++mark);
1663 TAINT_NOT; /* Each item is independent */
1669 POPLOOP2(); /* Stack values are safe: release loop vars ... */
1670 PL_curpm = newpm; /* ... and pop $1 et al */
1682 register PERL_CONTEXT *cx;
1683 struct block_sub cxsub;
1684 bool popsub2 = FALSE;
1690 if (PL_curstackinfo->si_type == PERLSI_SORT) {
1691 if (cxstack_ix == PL_sortcxix || dopoptosub(cxstack_ix) <= PL_sortcxix) {
1692 if (cxstack_ix > PL_sortcxix)
1693 dounwind(PL_sortcxix);
1694 AvARRAY(PL_curstack)[1] = *SP;
1695 PL_stack_sp = PL_stack_base + 1;
1700 cxix = dopoptosub(cxstack_ix);
1702 DIE(aTHX_ "Can't return outside a subroutine");
1703 if (cxix < cxstack_ix)
1707 switch (CxTYPE(cx)) {
1709 POPSUB1(cx); /* Delay POPSUB2 until stack values are safe */
1714 if (AvFILLp(PL_comppad_name) >= 0)
1717 if (optype == OP_REQUIRE &&
1718 (MARK == SP || (gimme == G_SCALAR && !SvTRUE(*SP))) )
1720 /* Unassume the success we assumed earlier. */
1721 char *name = cx->blk_eval.old_name;
1722 (void)hv_delete(GvHVn(PL_incgv), name, strlen(name), G_DISCARD);
1723 DIE(aTHX_ "%s did not return a true value", name);
1727 DIE(aTHX_ "panic: return");
1731 if (gimme == G_SCALAR) {
1734 if (cxsub.cv && CvDEPTH(cxsub.cv) > 1) {
1736 *++newsp = SvREFCNT_inc(*SP);
1741 *++newsp = sv_mortalcopy(*SP);
1744 *++newsp = (SvTEMP(*SP)) ? *SP : sv_mortalcopy(*SP);
1746 *++newsp = sv_mortalcopy(*SP);
1748 *++newsp = &PL_sv_undef;
1750 else if (gimme == G_ARRAY) {
1751 while (++MARK <= SP) {
1752 *++newsp = (popsub2 && SvTEMP(*MARK))
1753 ? *MARK : sv_mortalcopy(*MARK);
1754 TAINT_NOT; /* Each item is independent */
1757 PL_stack_sp = newsp;
1759 /* Stack values are safe: */
1761 POPSUB2(); /* release CV and @_ ... */
1763 PL_curpm = newpm; /* ... and pop $1 et al */
1766 return pop_return();
1773 register PERL_CONTEXT *cx;
1774 struct block_loop cxloop;
1775 struct block_sub cxsub;
1782 SV **mark = PL_stack_base + cxstack[cxstack_ix].blk_oldsp;
1784 if (PL_op->op_flags & OPf_SPECIAL) {
1785 cxix = dopoptoloop(cxstack_ix);
1787 DIE(aTHX_ "Can't \"last\" outside a block");
1790 cxix = dopoptolabel(cPVOP->op_pv);
1792 DIE(aTHX_ "Label not found for \"last %s\"", cPVOP->op_pv);
1794 if (cxix < cxstack_ix)
1798 switch (CxTYPE(cx)) {
1800 POPLOOP1(cx); /* Delay POPLOOP2 until stack values are safe */
1802 nextop = cxloop.last_op->op_next;
1805 POPSUB1(cx); /* Delay POPSUB2 until stack values are safe */
1807 nextop = pop_return();
1811 nextop = pop_return();
1814 DIE(aTHX_ "panic: last");
1818 if (gimme == G_SCALAR) {
1820 *++newsp = ((pop2 == CXt_SUB) && SvTEMP(*SP))
1821 ? *SP : sv_mortalcopy(*SP);
1823 *++newsp = &PL_sv_undef;
1825 else if (gimme == G_ARRAY) {
1826 while (++MARK <= SP) {
1827 *++newsp = ((pop2 == CXt_SUB) && SvTEMP(*MARK))
1828 ? *MARK : sv_mortalcopy(*MARK);
1829 TAINT_NOT; /* Each item is independent */
1835 /* Stack values are safe: */
1838 POPLOOP2(); /* release loop vars ... */
1842 POPSUB2(); /* release CV and @_ ... */
1845 PL_curpm = newpm; /* ... and pop $1 et al */
1854 register PERL_CONTEXT *cx;
1857 if (PL_op->op_flags & OPf_SPECIAL) {
1858 cxix = dopoptoloop(cxstack_ix);
1860 DIE(aTHX_ "Can't \"next\" outside a block");
1863 cxix = dopoptolabel(cPVOP->op_pv);
1865 DIE(aTHX_ "Label not found for \"next %s\"", cPVOP->op_pv);
1867 if (cxix < cxstack_ix)
1871 oldsave = PL_scopestack[PL_scopestack_ix - 1];
1872 LEAVE_SCOPE(oldsave);
1873 return cx->blk_loop.next_op;
1879 register PERL_CONTEXT *cx;
1882 if (PL_op->op_flags & OPf_SPECIAL) {
1883 cxix = dopoptoloop(cxstack_ix);
1885 DIE(aTHX_ "Can't \"redo\" outside a block");
1888 cxix = dopoptolabel(cPVOP->op_pv);
1890 DIE(aTHX_ "Label not found for \"redo %s\"", cPVOP->op_pv);
1892 if (cxix < cxstack_ix)
1896 oldsave = PL_scopestack[PL_scopestack_ix - 1];
1897 LEAVE_SCOPE(oldsave);
1898 return cx->blk_loop.redo_op;
1902 S_dofindlabel(pTHX_ OP *o, char *label, OP **opstack, OP **oplimit)
1906 static char too_deep[] = "Target of goto is too deeply nested";
1909 Perl_croak(aTHX_ too_deep);
1910 if (o->op_type == OP_LEAVE ||
1911 o->op_type == OP_SCOPE ||
1912 o->op_type == OP_LEAVELOOP ||
1913 o->op_type == OP_LEAVETRY)
1915 *ops++ = cUNOPo->op_first;
1917 Perl_croak(aTHX_ too_deep);
1920 if (o->op_flags & OPf_KIDS) {
1922 /* First try all the kids at this level, since that's likeliest. */
1923 for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling) {
1924 if ((kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) &&
1925 kCOP->cop_label && strEQ(kCOP->cop_label, label))
1928 for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling) {
1929 if (kid == PL_lastgotoprobe)
1931 if ((kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) &&
1933 (ops[-1]->op_type != OP_NEXTSTATE &&
1934 ops[-1]->op_type != OP_DBSTATE)))
1936 if (o = dofindlabel(kid, label, ops, oplimit))
1955 register PERL_CONTEXT *cx;
1956 #define GOTO_DEPTH 64
1957 OP *enterops[GOTO_DEPTH];
1959 int do_dump = (PL_op->op_type == OP_DUMP);
1960 static char must_have_label[] = "goto must have label";
1963 if (PL_op->op_flags & OPf_STACKED) {
1967 /* This egregious kludge implements goto &subroutine */
1968 if (SvROK(sv) && SvTYPE(SvRV(sv)) == SVt_PVCV) {
1970 register PERL_CONTEXT *cx;
1971 CV* cv = (CV*)SvRV(sv);
1977 if (!CvROOT(cv) && !CvXSUB(cv)) {
1982 /* autoloaded stub? */
1983 if (cv != GvCV(gv) && (cv = GvCV(gv)))
1985 autogv = gv_autoload4(GvSTASH(gv), GvNAME(gv),
1986 GvNAMELEN(gv), FALSE);
1987 if (autogv && (cv = GvCV(autogv)))
1989 tmpstr = sv_newmortal();
1990 gv_efullname3(tmpstr, gv, Nullch);
1991 DIE(aTHX_ "Goto undefined subroutine &%s",SvPVX(tmpstr));
1993 DIE(aTHX_ "Goto undefined subroutine");
1996 /* First do some returnish stuff. */
1997 cxix = dopoptosub(cxstack_ix);
1999 DIE(aTHX_ "Can't goto subroutine outside a subroutine");
2000 if (cxix < cxstack_ix)
2003 if (CxTYPE(cx) == CXt_EVAL && cx->blk_eval.old_op_type == OP_ENTEREVAL)
2004 DIE(aTHX_ "Can't goto subroutine from an eval-string");
2006 if (CxTYPE(cx) == CXt_SUB && cx->blk_sub.hasargs) {
2007 /* put @_ back onto stack */
2008 AV* av = cx->blk_sub.argarray;
2010 items = AvFILLp(av) + 1;
2012 EXTEND(PL_stack_sp, items); /* @_ could have been extended. */
2013 Copy(AvARRAY(av), PL_stack_sp, items, SV*);
2014 PL_stack_sp += items;
2016 SvREFCNT_dec(GvAV(PL_defgv));
2017 GvAV(PL_defgv) = cx->blk_sub.savearray;
2018 #endif /* USE_THREADS */
2019 /* abandon @_ if it got reified */
2021 (void)sv_2mortal((SV*)av); /* delay until return */
2023 av_extend(av, items-1);
2024 AvFLAGS(av) = AVf_REIFY;
2025 PL_curpad[0] = (SV*)(cx->blk_sub.argarray = av);
2028 else if (CvXSUB(cv)) { /* put GvAV(defgv) back onto stack */
2032 av = (AV*)PL_curpad[0];
2034 av = GvAV(PL_defgv);
2036 items = AvFILLp(av) + 1;
2038 EXTEND(PL_stack_sp, items); /* @_ could have been extended. */
2039 Copy(AvARRAY(av), PL_stack_sp, items, SV*);
2040 PL_stack_sp += items;
2042 if (CxTYPE(cx) == CXt_SUB &&
2043 !(CvDEPTH(cx->blk_sub.cv) = cx->blk_sub.olddepth))
2044 SvREFCNT_dec(cx->blk_sub.cv);
2045 oldsave = PL_scopestack[PL_scopestack_ix - 1];
2046 LEAVE_SCOPE(oldsave);
2048 /* Now do some callish stuff. */
2051 #ifdef PERL_XSUB_OLDSTYLE
2052 if (CvOLDSTYLE(cv)) {
2053 I32 (*fp3)(int,int,int);
2058 fp3 = (I32(*)(int,int,int)))CvXSUB(cv;
2059 items = (*fp3)(CvXSUBANY(cv).any_i32,
2060 mark - PL_stack_base + 1,
2062 SP = PL_stack_base + items;
2065 #endif /* PERL_XSUB_OLDSTYLE */
2070 PL_stack_sp--; /* There is no cv arg. */
2071 /* Push a mark for the start of arglist */
2073 (void)(*CvXSUB(cv))(aTHXo_ cv);
2074 /* Pop the current context like a decent sub should */
2075 POPBLOCK(cx, PL_curpm);
2076 /* Do _not_ use PUTBACK, keep the XSUB's return stack! */
2079 return pop_return();
2082 AV* padlist = CvPADLIST(cv);
2083 SV** svp = AvARRAY(padlist);
2084 if (CxTYPE(cx) == CXt_EVAL) {
2085 PL_in_eval = cx->blk_eval.old_in_eval;
2086 PL_eval_root = cx->blk_eval.old_eval_root;
2087 cx->cx_type = CXt_SUB;
2088 cx->blk_sub.hasargs = 0;
2090 cx->blk_sub.cv = cv;
2091 cx->blk_sub.olddepth = CvDEPTH(cv);
2093 if (CvDEPTH(cv) < 2)
2094 (void)SvREFCNT_inc(cv);
2095 else { /* save temporaries on recursion? */
2096 if (CvDEPTH(cv) == 100 && ckWARN(WARN_RECURSION))
2097 sub_crush_depth(cv);
2098 if (CvDEPTH(cv) > AvFILLp(padlist)) {
2099 AV *newpad = newAV();
2100 SV **oldpad = AvARRAY(svp[CvDEPTH(cv)-1]);
2101 I32 ix = AvFILLp((AV*)svp[1]);
2102 svp = AvARRAY(svp[0]);
2103 for ( ;ix > 0; ix--) {
2104 if (svp[ix] != &PL_sv_undef) {
2105 char *name = SvPVX(svp[ix]);
2106 if ((SvFLAGS(svp[ix]) & SVf_FAKE)
2109 /* outer lexical or anon code */
2110 av_store(newpad, ix,
2111 SvREFCNT_inc(oldpad[ix]) );
2113 else { /* our own lexical */
2115 av_store(newpad, ix, sv = (SV*)newAV());
2116 else if (*name == '%')
2117 av_store(newpad, ix, sv = (SV*)newHV());
2119 av_store(newpad, ix, sv = NEWSV(0,0));
2124 av_store(newpad, ix, sv = NEWSV(0,0));
2128 if (cx->blk_sub.hasargs) {
2131 av_store(newpad, 0, (SV*)av);
2132 AvFLAGS(av) = AVf_REIFY;
2134 av_store(padlist, CvDEPTH(cv), (SV*)newpad);
2135 AvFILLp(padlist) = CvDEPTH(cv);
2136 svp = AvARRAY(padlist);
2140 if (!cx->blk_sub.hasargs) {
2141 AV* av = (AV*)PL_curpad[0];
2143 items = AvFILLp(av) + 1;
2145 /* Mark is at the end of the stack. */
2147 Copy(AvARRAY(av), SP + 1, items, SV*);
2152 #endif /* USE_THREADS */
2153 SAVESPTR(PL_curpad);
2154 PL_curpad = AvARRAY((AV*)svp[CvDEPTH(cv)]);
2156 if (cx->blk_sub.hasargs)
2157 #endif /* USE_THREADS */
2159 AV* av = (AV*)PL_curpad[0];
2163 cx->blk_sub.savearray = GvAV(PL_defgv);
2164 GvAV(PL_defgv) = (AV*)SvREFCNT_inc(av);
2165 #endif /* USE_THREADS */
2166 cx->blk_sub.argarray = av;
2169 if (items >= AvMAX(av) + 1) {
2171 if (AvARRAY(av) != ary) {
2172 AvMAX(av) += AvARRAY(av) - AvALLOC(av);
2173 SvPVX(av) = (char*)ary;
2175 if (items >= AvMAX(av) + 1) {
2176 AvMAX(av) = items - 1;
2177 Renew(ary,items+1,SV*);
2179 SvPVX(av) = (char*)ary;
2182 Copy(mark,AvARRAY(av),items,SV*);
2183 AvFILLp(av) = items - 1;
2184 assert(!AvREAL(av));
2191 if (PERLDB_SUB) { /* Checking curstash breaks DProf. */
2193 * We do not care about using sv to call CV;
2194 * it's for informational purposes only.
2196 SV *sv = GvSV(PL_DBsub);
2199 if (PERLDB_SUB_NN) {
2200 SvIVX(sv) = PTR2IV(cv); /* Already upgraded, saved */
2203 gv_efullname3(sv, CvGV(cv), Nullch);
2206 && (gotocv = get_cv("DB::goto", FALSE)) ) {
2207 PUSHMARK( PL_stack_sp );
2208 call_sv((SV*)gotocv, G_SCALAR | G_NODEBUG);
2212 RETURNOP(CvSTART(cv));
2216 label = SvPV(sv,n_a);
2217 if (!(do_dump || *label))
2218 DIE(aTHX_ must_have_label);
2221 else if (PL_op->op_flags & OPf_SPECIAL) {
2223 DIE(aTHX_ must_have_label);
2226 label = cPVOP->op_pv;
2228 if (label && *label) {
2233 PL_lastgotoprobe = 0;
2235 for (ix = cxstack_ix; ix >= 0; ix--) {
2237 switch (CxTYPE(cx)) {
2239 gotoprobe = PL_eval_root; /* XXX not good for nested eval */
2242 gotoprobe = cx->blk_oldcop->op_sibling;
2248 gotoprobe = cx->blk_oldcop->op_sibling;
2250 gotoprobe = PL_main_root;
2253 if (CvDEPTH(cx->blk_sub.cv)) {
2254 gotoprobe = CvROOT(cx->blk_sub.cv);
2259 DIE(aTHX_ "Can't \"goto\" outside a block");
2262 DIE(aTHX_ "panic: goto");
2263 gotoprobe = PL_main_root;
2266 retop = dofindlabel(gotoprobe, label,
2267 enterops, enterops + GOTO_DEPTH);
2270 PL_lastgotoprobe = gotoprobe;
2273 DIE(aTHX_ "Can't find label %s", label);
2275 /* pop unwanted frames */
2277 if (ix < cxstack_ix) {
2284 oldsave = PL_scopestack[PL_scopestack_ix];
2285 LEAVE_SCOPE(oldsave);
2288 /* push wanted frames */
2290 if (*enterops && enterops[1]) {
2292 for (ix = 1; enterops[ix]; ix++) {
2293 PL_op = enterops[ix];
2294 /* Eventually we may want to stack the needed arguments
2295 * for each op. For now, we punt on the hard ones. */
2296 if (PL_op->op_type == OP_ENTERITER)
2297 DIE(aTHX_ "Can't \"goto\" into the middle of a foreach loop",
2299 CALL_FPTR(PL_op->op_ppaddr)(aTHX);
2307 if (!retop) retop = PL_main_start;
2309 PL_restartop = retop;
2310 PL_do_undump = TRUE;
2314 PL_restartop = 0; /* hmm, must be GNU unexec().. */
2315 PL_do_undump = FALSE;
2331 if (anum == 1 && VMSISH_EXIT)
2336 PUSHs(&PL_sv_undef);
2344 NV value = SvNVx(GvSV(cCOP->cop_gv));
2345 register I32 match = I_32(value);
2348 if (((NV)match) > value)
2349 --match; /* was fractional--truncate other way */
2351 match -= cCOP->uop.scop.scop_offset;
2354 else if (match > cCOP->uop.scop.scop_max)
2355 match = cCOP->uop.scop.scop_max;
2356 PL_op = cCOP->uop.scop.scop_next[match];
2366 PL_op = PL_op->op_next; /* can't assume anything */
2369 match = *(SvPVx(GvSV(cCOP->cop_gv), n_a)) & 255;
2370 match -= cCOP->uop.scop.scop_offset;
2373 else if (match > cCOP->uop.scop.scop_max)
2374 match = cCOP->uop.scop.scop_max;
2375 PL_op = cCOP->uop.scop.scop_next[match];
2384 S_save_lines(pTHX_ AV *array, SV *sv)
2386 register char *s = SvPVX(sv);
2387 register char *send = SvPVX(sv) + SvCUR(sv);
2389 register I32 line = 1;
2391 while (s && s < send) {
2392 SV *tmpstr = NEWSV(85,0);
2394 sv_upgrade(tmpstr, SVt_PVMG);
2395 t = strchr(s, '\n');
2401 sv_setpvn(tmpstr, s, t - s);
2402 av_store(array, line++, tmpstr);
2408 S_docatch_body(pTHX_ va_list args)
2415 S_docatch(pTHX_ OP *o)
2422 assert(CATCH_GET == TRUE);
2426 CALLPROTECT(aTHX_ &ret, MEMBER_TO_FPTR(S_docatch_body));
2432 PL_op = PL_restartop;
2447 Perl_sv_compile_2op(pTHX_ SV *sv, OP** startop, char *code, AV** avp)
2448 /* sv Text to convert to OP tree. */
2449 /* startop op_free() this to undo. */
2450 /* code Short string id of the caller. */
2452 dSP; /* Make POPBLOCK work. */
2455 I32 gimme = 0; /* SUSPECT - INITIALZE TO WHAT? NI-S */
2458 OP *oop = PL_op, *rop;
2459 char tmpbuf[TYPE_DIGITS(long) + 12 + 10];
2465 /* switch to eval mode */
2467 if (PL_curcop == &PL_compiling) {
2468 SAVESPTR(PL_compiling.cop_stash);
2469 PL_compiling.cop_stash = PL_curstash;
2471 SAVESPTR(PL_compiling.cop_filegv);
2472 SAVEI16(PL_compiling.cop_line);
2473 sprintf(tmpbuf, "_<(%.10s_eval %lu)", code, (unsigned long)++PL_evalseq);
2474 PL_compiling.cop_filegv = gv_fetchfile(tmpbuf+2);
2475 PL_compiling.cop_line = 1;
2476 /* XXX For C<eval "...">s within BEGIN {} blocks, this ends up
2477 deleting the eval's FILEGV from the stash before gv_check() runs
2478 (i.e. before run-time proper). To work around the coredump that
2479 ensues, we always turn GvMULTI_on for any globals that were
2480 introduced within evals. See force_ident(). GSAR 96-10-12 */
2481 safestr = savepv(tmpbuf);
2482 SAVEDELETE(PL_defstash, safestr, strlen(safestr));
2484 #ifdef OP_IN_REGISTER
2492 PL_op->op_type = OP_ENTEREVAL;
2493 PL_op->op_flags = 0; /* Avoid uninit warning. */
2494 PUSHBLOCK(cx, CXt_EVAL, SP);
2495 PUSHEVAL(cx, 0, PL_compiling.cop_filegv);
2496 rop = doeval(G_SCALAR, startop);
2497 POPBLOCK(cx,PL_curpm);
2500 (*startop)->op_type = OP_NULL;
2501 (*startop)->op_ppaddr = PL_ppaddr[OP_NULL];
2503 *avp = (AV*)SvREFCNT_inc(PL_comppad);
2505 if (PL_curcop == &PL_compiling)
2506 PL_compiling.op_private = PL_hints;
2507 #ifdef OP_IN_REGISTER
2513 /* With USE_THREADS, eval_owner must be held on entry to doeval */
2515 S_doeval(pTHX_ int gimme, OP** startop)
2524 PL_in_eval = EVAL_INEVAL;
2528 /* set up a scratch pad */
2531 SAVESPTR(PL_curpad);
2532 SAVESPTR(PL_comppad);
2533 SAVESPTR(PL_comppad_name);
2534 SAVEI32(PL_comppad_name_fill);
2535 SAVEI32(PL_min_intro_pending);
2536 SAVEI32(PL_max_intro_pending);
2539 for (i = cxstack_ix - 1; i >= 0; i--) {
2540 PERL_CONTEXT *cx = &cxstack[i];
2541 if (CxTYPE(cx) == CXt_EVAL)
2543 else if (CxTYPE(cx) == CXt_SUB) {
2544 caller = cx->blk_sub.cv;
2549 SAVESPTR(PL_compcv);
2550 PL_compcv = (CV*)NEWSV(1104,0);
2551 sv_upgrade((SV *)PL_compcv, SVt_PVCV);
2552 CvEVAL_on(PL_compcv);
2554 CvOWNER(PL_compcv) = 0;
2555 New(666, CvMUTEXP(PL_compcv), 1, perl_mutex);
2556 MUTEX_INIT(CvMUTEXP(PL_compcv));
2557 #endif /* USE_THREADS */
2559 PL_comppad = newAV();
2560 av_push(PL_comppad, Nullsv);
2561 PL_curpad = AvARRAY(PL_comppad);
2562 PL_comppad_name = newAV();
2563 PL_comppad_name_fill = 0;
2564 PL_min_intro_pending = 0;
2567 av_store(PL_comppad_name, 0, newSVpvn("@_", 2));
2568 PL_curpad[0] = (SV*)newAV();
2569 SvPADMY_on(PL_curpad[0]); /* XXX Needed? */
2570 #endif /* USE_THREADS */
2572 comppadlist = newAV();
2573 AvREAL_off(comppadlist);
2574 av_store(comppadlist, 0, (SV*)PL_comppad_name);
2575 av_store(comppadlist, 1, (SV*)PL_comppad);
2576 CvPADLIST(PL_compcv) = comppadlist;
2578 if (!saveop || saveop->op_type != OP_REQUIRE)
2579 CvOUTSIDE(PL_compcv) = (CV*)SvREFCNT_inc(caller);
2581 SAVEFREESV(PL_compcv);
2583 /* make sure we compile in the right package */
2585 newstash = PL_curcop->cop_stash;
2586 if (PL_curstash != newstash) {
2587 SAVESPTR(PL_curstash);
2588 PL_curstash = newstash;
2590 SAVESPTR(PL_beginav);
2591 PL_beginav = newAV();
2592 SAVEFREESV(PL_beginav);
2594 /* try to compile it */
2596 PL_eval_root = Nullop;
2598 PL_curcop = &PL_compiling;
2599 PL_curcop->cop_arybase = 0;
2600 SvREFCNT_dec(PL_rs);
2601 PL_rs = newSVpvn("\n", 1);
2602 if (saveop && saveop->op_flags & OPf_SPECIAL)
2603 PL_in_eval |= EVAL_KEEPERR;
2606 if (yyparse() || PL_error_count || !PL_eval_root) {
2610 I32 optype = 0; /* Might be reset by POPEVAL. */
2615 op_free(PL_eval_root);
2616 PL_eval_root = Nullop;
2618 SP = PL_stack_base + POPMARK; /* pop original mark */
2620 POPBLOCK(cx,PL_curpm);
2626 if (optype == OP_REQUIRE) {
2627 char* msg = SvPVx(ERRSV, n_a);
2628 DIE(aTHX_ "%s", *msg ? msg : "Compilation failed in require");
2629 } else if (startop) {
2630 char* msg = SvPVx(ERRSV, n_a);
2632 POPBLOCK(cx,PL_curpm);
2634 Perl_croak(aTHX_ "%sCompilation failed in regexp", (*msg ? msg : "Unknown error\n"));
2636 SvREFCNT_dec(PL_rs);
2637 PL_rs = SvREFCNT_inc(PL_nrs);
2639 MUTEX_LOCK(&PL_eval_mutex);
2641 COND_SIGNAL(&PL_eval_cond);
2642 MUTEX_UNLOCK(&PL_eval_mutex);
2643 #endif /* USE_THREADS */
2646 SvREFCNT_dec(PL_rs);
2647 PL_rs = SvREFCNT_inc(PL_nrs);
2648 PL_compiling.cop_line = 0;
2650 *startop = PL_eval_root;
2651 SvREFCNT_dec(CvOUTSIDE(PL_compcv));
2652 CvOUTSIDE(PL_compcv) = Nullcv;
2654 SAVEFREEOP(PL_eval_root);
2656 scalarvoid(PL_eval_root);
2657 else if (gimme & G_ARRAY)
2660 scalar(PL_eval_root);
2662 DEBUG_x(dump_eval());
2664 /* Register with debugger: */
2665 if (PERLDB_INTER && saveop->op_type == OP_REQUIRE) {
2666 CV *cv = get_cv("DB::postponed", FALSE);
2670 XPUSHs((SV*)PL_compiling.cop_filegv);
2672 call_sv((SV*)cv, G_DISCARD);
2676 /* compiled okay, so do it */
2678 CvDEPTH(PL_compcv) = 1;
2679 SP = PL_stack_base + POPMARK; /* pop original mark */
2680 PL_op = saveop; /* The caller may need it. */
2682 MUTEX_LOCK(&PL_eval_mutex);
2684 COND_SIGNAL(&PL_eval_cond);
2685 MUTEX_UNLOCK(&PL_eval_mutex);
2686 #endif /* USE_THREADS */
2688 RETURNOP(PL_eval_start);
2692 S_doopen_pmc(pTHX_ const char *name, const char *mode)
2694 STRLEN namelen = strlen(name);
2697 if (namelen > 3 && strEQ(name + namelen - 3, ".pm")) {
2698 SV *pmcsv = Perl_newSVpvf(aTHX_ "%s%c", name, 'c');
2699 char *pmc = SvPV_nolen(pmcsv);
2702 if (PerlLIO_stat(pmc, &pmcstat) < 0) {
2703 fp = PerlIO_open(name, mode);
2706 if (PerlLIO_stat(name, &pmstat) < 0 ||
2707 pmstat.st_mtime < pmcstat.st_mtime)
2709 fp = PerlIO_open(pmc, mode);
2712 fp = PerlIO_open(name, mode);
2715 SvREFCNT_dec(pmcsv);
2718 fp = PerlIO_open(name, mode);
2726 register PERL_CONTEXT *cx;
2731 SV *namesv = Nullsv;
2733 I32 gimme = G_SCALAR;
2734 PerlIO *tryrsfp = 0;
2736 int filter_has_file = 0;
2737 GV *filter_child_proc = 0;
2738 SV *filter_state = 0;
2742 if (SvNIOKp(sv) && !SvPOKp(sv)) {
2743 if (Atof(PL_patchlevel) + 0.00000999 < SvNV(sv))
2744 DIE(aTHX_ "Perl %s required--this is only version %s, stopped",
2745 SvPV(sv,n_a),PL_patchlevel);
2748 name = SvPV(sv, len);
2749 if (!(name && len > 0 && *name))
2750 DIE(aTHX_ "Null filename used");
2751 TAINT_PROPER("require");
2752 if (PL_op->op_type == OP_REQUIRE &&
2753 (svp = hv_fetch(GvHVn(PL_incgv), name, len, 0)) &&
2754 *svp != &PL_sv_undef)
2757 /* prepare to compile file */
2762 (name[1] == '.' && name[2] == '/')))
2764 || (name[0] && name[1] == ':')
2767 || (name[0] == '\\' && name[1] == '\\') /* UNC path */
2770 || (strchr(name,':') || ((*name == '[' || *name == '<') &&
2771 (isALNUM(name[1]) || strchr("$-_]>",name[1]))))
2776 tryrsfp = doopen_pmc(name,PERL_SCRIPT_MODE);
2779 AV *ar = GvAVn(PL_incgv);
2783 if ((unixname = tounixspec(name, Nullch)) != Nullch)
2786 namesv = NEWSV(806, 0);
2787 for (i = 0; i <= AvFILL(ar); i++) {
2788 SV *dirsv = *av_fetch(ar, i, TRUE);
2794 if (SvTYPE(SvRV(loader)) == SVt_PVAV) {
2795 loader = *av_fetch((AV *)SvRV(loader), 0, TRUE);
2798 Perl_sv_setpvf(aTHX_ namesv, "/loader/0x%lx/%s",
2799 SvANY(loader), name);
2800 tryname = SvPVX(namesv);
2811 count = call_sv(loader, G_ARRAY);
2821 if (SvROK(arg) && SvTYPE(SvRV(arg)) == SVt_PVGV) {
2825 if (SvTYPE(arg) == SVt_PVGV) {
2826 IO *io = GvIO((GV *)arg);
2831 tryrsfp = IoIFP(io);
2832 if (IoTYPE(io) == '|') {
2833 /* reading from a child process doesn't
2834 nest -- when returning from reading
2835 the inner module, the outer one is
2836 unreadable (closed?) I've tried to
2837 save the gv to manage the lifespan of
2838 the pipe, but this didn't help. XXX */
2839 filter_child_proc = (GV *)arg;
2840 (void)SvREFCNT_inc(filter_child_proc);
2843 if (IoOFP(io) && IoOFP(io) != IoIFP(io)) {
2844 PerlIO_close(IoOFP(io));
2856 if (SvROK(arg) && SvTYPE(SvRV(arg)) == SVt_PVCV) {
2858 (void)SvREFCNT_inc(filter_sub);
2861 filter_state = SP[i];
2862 (void)SvREFCNT_inc(filter_state);
2866 tryrsfp = PerlIO_open("/dev/null",
2880 filter_has_file = 0;
2881 if (filter_child_proc) {
2882 SvREFCNT_dec(filter_child_proc);
2883 filter_child_proc = 0;
2886 SvREFCNT_dec(filter_state);
2890 SvREFCNT_dec(filter_sub);
2895 char *dir = SvPVx(dirsv, n_a);
2898 if ((unixdir = tounixpath(dir, Nullch)) == Nullch)
2900 sv_setpv(namesv, unixdir);
2901 sv_catpv(namesv, unixname);
2903 Perl_sv_setpvf(aTHX_ namesv, "%s/%s", dir, name);
2905 TAINT_PROPER("require");
2906 tryname = SvPVX(namesv);
2907 tryrsfp = doopen_pmc(tryname, PERL_SCRIPT_MODE);
2909 if (tryname[0] == '.' && tryname[1] == '/')
2917 SAVESPTR(PL_compiling.cop_filegv);
2918 PL_compiling.cop_filegv = gv_fetchfile(tryrsfp ? tryname : name);
2919 SvREFCNT_dec(namesv);
2921 if (PL_op->op_type == OP_REQUIRE) {
2922 char *msgstr = name;
2923 if (namesv) { /* did we lookup @INC? */
2924 SV *msg = sv_2mortal(newSVpv(msgstr,0));
2925 SV *dirmsgsv = NEWSV(0, 0);
2926 AV *ar = GvAVn(PL_incgv);
2928 sv_catpvn(msg, " in @INC", 8);
2929 if (instr(SvPVX(msg), ".h "))
2930 sv_catpv(msg, " (change .h to .ph maybe?)");
2931 if (instr(SvPVX(msg), ".ph "))
2932 sv_catpv(msg, " (did you run h2ph?)");
2933 sv_catpv(msg, " (@INC contains:");
2934 for (i = 0; i <= AvFILL(ar); i++) {
2935 char *dir = SvPVx(*av_fetch(ar, i, TRUE), n_a);
2936 Perl_sv_setpvf(aTHX_ dirmsgsv, " %s", dir);
2937 sv_catsv(msg, dirmsgsv);
2939 sv_catpvn(msg, ")", 1);
2940 SvREFCNT_dec(dirmsgsv);
2941 msgstr = SvPV_nolen(msg);
2943 DIE(aTHX_ "Can't locate %s", msgstr);
2949 SETERRNO(0, SS$_NORMAL);
2951 /* Assume success here to prevent recursive requirement. */
2952 (void)hv_store(GvHVn(PL_incgv), name, strlen(name),
2953 newSVsv(GvSV(PL_compiling.cop_filegv)), 0 );
2957 lex_start(sv_2mortal(newSVpvn("",0)));
2958 SAVEGENERICSV(PL_rsfp_filters);
2959 PL_rsfp_filters = Nullav;
2962 name = savepv(name);
2966 SAVEPPTR(PL_compiling.cop_warnings);
2967 if (PL_dowarn & G_WARN_ALL_ON)
2968 PL_compiling.cop_warnings = WARN_ALL ;
2969 else if (PL_dowarn & G_WARN_ALL_OFF)
2970 PL_compiling.cop_warnings = WARN_NONE ;
2972 PL_compiling.cop_warnings = WARN_STD ;
2974 if (filter_sub || filter_child_proc) {
2975 SV *datasv = filter_add(run_user_filter, Nullsv);
2976 IoLINES(datasv) = filter_has_file;
2977 IoFMT_GV(datasv) = (GV *)filter_child_proc;
2978 IoTOP_GV(datasv) = (GV *)filter_state;
2979 IoBOTTOM_GV(datasv) = (GV *)filter_sub;
2982 /* switch to eval mode */
2983 push_return(PL_op->op_next);
2984 PUSHBLOCK(cx, CXt_EVAL, SP);
2985 PUSHEVAL(cx, name, PL_compiling.cop_filegv);
2987 SAVEI16(PL_compiling.cop_line);
2988 PL_compiling.cop_line = 0;
2992 MUTEX_LOCK(&PL_eval_mutex);
2993 if (PL_eval_owner && PL_eval_owner != thr)
2994 while (PL_eval_owner)
2995 COND_WAIT(&PL_eval_cond, &PL_eval_mutex);
2996 PL_eval_owner = thr;
2997 MUTEX_UNLOCK(&PL_eval_mutex);
2998 #endif /* USE_THREADS */
2999 return DOCATCH(doeval(G_SCALAR, NULL));
3004 return pp_require();
3010 register PERL_CONTEXT *cx;
3012 I32 gimme = GIMME_V, was = PL_sub_generation;
3013 char tmpbuf[TYPE_DIGITS(long) + 12];
3018 if (!SvPV(sv,len) || !len)
3020 TAINT_PROPER("eval");
3026 /* switch to eval mode */
3028 SAVESPTR(PL_compiling.cop_filegv);
3029 sprintf(tmpbuf, "_<(eval %lu)", (unsigned long)++PL_evalseq);
3030 PL_compiling.cop_filegv = gv_fetchfile(tmpbuf+2);
3031 PL_compiling.cop_line = 1;
3032 /* XXX For C<eval "...">s within BEGIN {} blocks, this ends up
3033 deleting the eval's FILEGV from the stash before gv_check() runs
3034 (i.e. before run-time proper). To work around the coredump that
3035 ensues, we always turn GvMULTI_on for any globals that were
3036 introduced within evals. See force_ident(). GSAR 96-10-12 */
3037 safestr = savepv(tmpbuf);
3038 SAVEDELETE(PL_defstash, safestr, strlen(safestr));
3040 PL_hints = PL_op->op_targ;
3041 SAVEPPTR(PL_compiling.cop_warnings);
3042 if (!specialWARN(PL_compiling.cop_warnings)) {
3043 PL_compiling.cop_warnings = newSVsv(PL_compiling.cop_warnings) ;
3044 SAVEFREESV(PL_compiling.cop_warnings) ;
3047 push_return(PL_op->op_next);
3048 PUSHBLOCK(cx, (CXt_EVAL|CXp_REAL), SP);
3049 PUSHEVAL(cx, 0, PL_compiling.cop_filegv);
3051 /* prepare to compile string */
3053 if (PERLDB_LINE && PL_curstash != PL_debstash)
3054 save_lines(GvAV(PL_compiling.cop_filegv), PL_linestr);
3057 MUTEX_LOCK(&PL_eval_mutex);
3058 if (PL_eval_owner && PL_eval_owner != thr)
3059 while (PL_eval_owner)
3060 COND_WAIT(&PL_eval_cond, &PL_eval_mutex);
3061 PL_eval_owner = thr;
3062 MUTEX_UNLOCK(&PL_eval_mutex);
3063 #endif /* USE_THREADS */
3064 ret = doeval(gimme, NULL);
3065 if (PERLDB_INTER && was != PL_sub_generation /* Some subs defined here. */
3066 && ret != PL_op->op_next) { /* Successive compilation. */
3067 strcpy(safestr, "_<(eval )"); /* Anything fake and short. */
3069 return DOCATCH(ret);
3079 register PERL_CONTEXT *cx;
3081 U8 save_flags = PL_op -> op_flags;
3086 retop = pop_return();
3089 if (gimme == G_VOID)
3091 else if (gimme == G_SCALAR) {
3094 if (SvFLAGS(TOPs) & SVs_TEMP)
3097 *MARK = sv_mortalcopy(TOPs);
3101 *MARK = &PL_sv_undef;
3105 /* in case LEAVE wipes old return values */
3106 for (mark = newsp + 1; mark <= SP; mark++) {
3107 if (!(SvFLAGS(*mark) & SVs_TEMP)) {
3108 *mark = sv_mortalcopy(*mark);
3109 TAINT_NOT; /* Each item is independent */
3113 PL_curpm = newpm; /* Don't pop $1 et al till now */
3115 if (AvFILLp(PL_comppad_name) >= 0)
3119 assert(CvDEPTH(PL_compcv) == 1);
3121 CvDEPTH(PL_compcv) = 0;
3124 if (optype == OP_REQUIRE &&
3125 !(gimme == G_SCALAR ? SvTRUE(*SP) : SP > newsp))
3127 /* Unassume the success we assumed earlier. */
3128 char *name = cx->blk_eval.old_name;
3129 (void)hv_delete(GvHVn(PL_incgv), name, strlen(name), G_DISCARD);
3130 retop = Perl_die(aTHX_ "%s did not return a true value", name);
3131 /* die_where() did LEAVE, or we won't be here */
3135 if (!(save_flags & OPf_SPECIAL))
3145 register PERL_CONTEXT *cx;
3146 I32 gimme = GIMME_V;
3151 push_return(cLOGOP->op_other->op_next);
3152 PUSHBLOCK(cx, CXt_EVAL, SP);
3154 PL_eval_root = PL_op; /* Only needed so that goto works right. */
3156 PL_in_eval = EVAL_INEVAL;
3159 return DOCATCH(PL_op->op_next);
3169 register PERL_CONTEXT *cx;
3177 if (gimme == G_VOID)
3179 else if (gimme == G_SCALAR) {
3182 if (SvFLAGS(TOPs) & (SVs_PADTMP|SVs_TEMP))
3185 *MARK = sv_mortalcopy(TOPs);
3189 *MARK = &PL_sv_undef;
3194 /* in case LEAVE wipes old return values */
3195 for (mark = newsp + 1; mark <= SP; mark++) {
3196 if (!(SvFLAGS(*mark) & (SVs_PADTMP|SVs_TEMP))) {
3197 *mark = sv_mortalcopy(*mark);
3198 TAINT_NOT; /* Each item is independent */
3202 PL_curpm = newpm; /* Don't pop $1 et al till now */
3210 S_doparseform(pTHX_ SV *sv)
3213 register char *s = SvPV_force(sv, len);
3214 register char *send = s + len;
3215 register char *base;
3216 register I32 skipspaces = 0;
3219 bool postspace = FALSE;
3227 Perl_croak(aTHX_ "Null picture in formline");
3229 New(804, fops, (send - s)*3+10, U16); /* Almost certainly too long... */
3234 *fpc++ = FF_LINEMARK;
3235 noblank = repeat = FALSE;
3253 case ' ': case '\t':
3264 *fpc++ = FF_LITERAL;
3272 *fpc++ = skipspaces;
3276 *fpc++ = FF_NEWLINE;
3280 arg = fpc - linepc + 1;
3287 *fpc++ = FF_LINEMARK;
3288 noblank = repeat = FALSE;
3297 ischop = s[-1] == '^';
3303 arg = (s - base) - 1;
3305 *fpc++ = FF_LITERAL;
3314 *fpc++ = FF_LINEGLOB;
3316 else if (*s == '#' || (*s == '.' && s[1] == '#')) {
3317 arg = ischop ? 512 : 0;
3327 arg |= 256 + (s - f);
3329 *fpc++ = s - base; /* fieldsize for FETCH */
3330 *fpc++ = FF_DECIMAL;
3335 bool ismore = FALSE;
3338 while (*++s == '>') ;
3339 prespace = FF_SPACE;
3341 else if (*s == '|') {
3342 while (*++s == '|') ;
3343 prespace = FF_HALFSPACE;
3348 while (*++s == '<') ;
3351 if (*s == '.' && s[1] == '.' && s[2] == '.') {
3355 *fpc++ = s - base; /* fieldsize for FETCH */
3357 *fpc++ = ischop ? FF_CHECKCHOP : FF_CHECKNL;
3375 { /* need to jump to the next word */
3377 z = WORD_ALIGN - SvCUR(sv) % WORD_ALIGN;
3378 SvGROW(sv, SvCUR(sv) + z + arg * sizeof(U16) + 4);
3379 s = SvPVX(sv) + SvCUR(sv) + z;
3381 Copy(fops, s, arg, U16);
3383 sv_magic(sv, Nullsv, 'f', Nullch, 0);
3388 * The rest of this file was derived from source code contributed
3391 * NOTE: this code was derived from Tom Horsley's qsort replacement
3392 * and should not be confused with the original code.
3395 /* Copyright (C) Tom Horsley, 1997. All rights reserved.
3397 Permission granted to distribute under the same terms as perl which are
3400 This program is free software; you can redistribute it and/or modify
3401 it under the terms of either:
3403 a) the GNU General Public License as published by the Free
3404 Software Foundation; either version 1, or (at your option) any
3407 b) the "Artistic License" which comes with this Kit.
3409 Details on the perl license can be found in the perl source code which
3410 may be located via the www.perl.com web page.
3412 This is the most wonderfulest possible qsort I can come up with (and
3413 still be mostly portable) My (limited) tests indicate it consistently
3414 does about 20% fewer calls to compare than does the qsort in the Visual
3415 C++ library, other vendors may vary.
3417 Some of the ideas in here can be found in "Algorithms" by Sedgewick,
3418 others I invented myself (or more likely re-invented since they seemed
3419 pretty obvious once I watched the algorithm operate for a while).
3421 Most of this code was written while watching the Marlins sweep the Giants
3422 in the 1997 National League Playoffs - no Braves fans allowed to use this
3423 code (just kidding :-).
3425 I realize that if I wanted to be true to the perl tradition, the only
3426 comment in this file would be something like:
3428 ...they shuffled back towards the rear of the line. 'No, not at the
3429 rear!' the slave-driver shouted. 'Three files up. And stay there...
3431 However, I really needed to violate that tradition just so I could keep
3432 track of what happens myself, not to mention some poor fool trying to
3433 understand this years from now :-).
3436 /* ********************************************************** Configuration */
3438 #ifndef QSORT_ORDER_GUESS
3439 #define QSORT_ORDER_GUESS 2 /* Select doubling version of the netBSD trick */
3442 /* QSORT_MAX_STACK is the largest number of partitions that can be stacked up for
3443 future processing - a good max upper bound is log base 2 of memory size
3444 (32 on 32 bit machines, 64 on 64 bit machines, etc). In reality can
3445 safely be smaller than that since the program is taking up some space and
3446 most operating systems only let you grab some subset of contiguous
3447 memory (not to mention that you are normally sorting data larger than
3448 1 byte element size :-).
3450 #ifndef QSORT_MAX_STACK
3451 #define QSORT_MAX_STACK 32
3454 /* QSORT_BREAK_EVEN is the size of the largest partition we should insertion sort.
3455 Anything bigger and we use qsort. If you make this too small, the qsort
3456 will probably break (or become less efficient), because it doesn't expect
3457 the middle element of a partition to be the same as the right or left -
3458 you have been warned).
3460 #ifndef QSORT_BREAK_EVEN
3461 #define QSORT_BREAK_EVEN 6
3464 /* ************************************************************* Data Types */
3466 /* hold left and right index values of a partition waiting to be sorted (the
3467 partition includes both left and right - right is NOT one past the end or
3468 anything like that).
3470 struct partition_stack_entry {
3473 #ifdef QSORT_ORDER_GUESS
3474 int qsort_break_even;
3478 /* ******************************************************* Shorthand Macros */
3480 /* Note that these macros will be used from inside the qsort function where
3481 we happen to know that the variable 'elt_size' contains the size of an
3482 array element and the variable 'temp' points to enough space to hold a
3483 temp element and the variable 'array' points to the array being sorted
3484 and 'compare' is the pointer to the compare routine.
3486 Also note that there are very many highly architecture specific ways
3487 these might be sped up, but this is simply the most generally portable
3488 code I could think of.
3491 /* Return < 0 == 0 or > 0 as the value of elt1 is < elt2, == elt2, > elt2
3493 #define qsort_cmp(elt1, elt2) \
3494 ((*compare)(aTHXo_ array[elt1], array[elt2]))
3496 #ifdef QSORT_ORDER_GUESS
3497 #define QSORT_NOTICE_SWAP swapped++;
3499 #define QSORT_NOTICE_SWAP
3502 /* swaps contents of array elements elt1, elt2.
3504 #define qsort_swap(elt1, elt2) \
3507 temp = array[elt1]; \
3508 array[elt1] = array[elt2]; \
3509 array[elt2] = temp; \
3512 /* rotate contents of elt1, elt2, elt3 such that elt1 gets elt2, elt2 gets
3513 elt3 and elt3 gets elt1.
3515 #define qsort_rotate(elt1, elt2, elt3) \
3518 temp = array[elt1]; \
3519 array[elt1] = array[elt2]; \
3520 array[elt2] = array[elt3]; \
3521 array[elt3] = temp; \
3524 /* ************************************************************ Debug stuff */
3531 return; /* good place to set a breakpoint */
3534 #define qsort_assert(t) (void)( (t) || (break_here(), 0) )
3537 doqsort_all_asserts(
3541 int (*compare)(const void * elt1, const void * elt2),
3542 int pc_left, int pc_right, int u_left, int u_right)
3546 qsort_assert(pc_left <= pc_right);
3547 qsort_assert(u_right < pc_left);
3548 qsort_assert(pc_right < u_left);
3549 for (i = u_right + 1; i < pc_left; ++i) {
3550 qsort_assert(qsort_cmp(i, pc_left) < 0);
3552 for (i = pc_left; i < pc_right; ++i) {
3553 qsort_assert(qsort_cmp(i, pc_right) == 0);
3555 for (i = pc_right + 1; i < u_left; ++i) {
3556 qsort_assert(qsort_cmp(pc_right, i) < 0);
3560 #define qsort_all_asserts(PC_LEFT, PC_RIGHT, U_LEFT, U_RIGHT) \
3561 doqsort_all_asserts(array, num_elts, elt_size, compare, \
3562 PC_LEFT, PC_RIGHT, U_LEFT, U_RIGHT)
3566 #define qsort_assert(t) ((void)0)
3568 #define qsort_all_asserts(PC_LEFT, PC_RIGHT, U_LEFT, U_RIGHT) ((void)0)
3572 /* ****************************************************************** qsort */
3575 S_qsortsv(pTHX_ SV ** array, size_t num_elts, SVCOMPARE_t compare)
3579 struct partition_stack_entry partition_stack[QSORT_MAX_STACK];
3580 int next_stack_entry = 0;
3584 #ifdef QSORT_ORDER_GUESS
3585 int qsort_break_even;
3589 /* Make sure we actually have work to do.
3591 if (num_elts <= 1) {
3595 /* Setup the initial partition definition and fall into the sorting loop
3598 part_right = (int)(num_elts - 1);
3599 #ifdef QSORT_ORDER_GUESS
3600 qsort_break_even = QSORT_BREAK_EVEN;
3602 #define qsort_break_even QSORT_BREAK_EVEN
3605 if ((part_right - part_left) >= qsort_break_even) {
3606 /* OK, this is gonna get hairy, so lets try to document all the
3607 concepts and abbreviations and variables and what they keep
3610 pc: pivot chunk - the set of array elements we accumulate in the
3611 middle of the partition, all equal in value to the original
3612 pivot element selected. The pc is defined by:
3614 pc_left - the leftmost array index of the pc
3615 pc_right - the rightmost array index of the pc
3617 we start with pc_left == pc_right and only one element
3618 in the pivot chunk (but it can grow during the scan).
3620 u: uncompared elements - the set of elements in the partition
3621 we have not yet compared to the pivot value. There are two
3622 uncompared sets during the scan - one to the left of the pc
3623 and one to the right.
3625 u_right - the rightmost index of the left side's uncompared set
3626 u_left - the leftmost index of the right side's uncompared set
3628 The leftmost index of the left sides's uncompared set
3629 doesn't need its own variable because it is always defined
3630 by the leftmost edge of the whole partition (part_left). The
3631 same goes for the rightmost edge of the right partition
3634 We know there are no uncompared elements on the left once we
3635 get u_right < part_left and no uncompared elements on the
3636 right once u_left > part_right. When both these conditions
3637 are met, we have completed the scan of the partition.
3639 Any elements which are between the pivot chunk and the
3640 uncompared elements should be less than the pivot value on
3641 the left side and greater than the pivot value on the right
3642 side (in fact, the goal of the whole algorithm is to arrange
3643 for that to be true and make the groups of less-than and
3644 greater-then elements into new partitions to sort again).
3646 As you marvel at the complexity of the code and wonder why it
3647 has to be so confusing. Consider some of the things this level
3648 of confusion brings:
3650 Once I do a compare, I squeeze every ounce of juice out of it. I
3651 never do compare calls I don't have to do, and I certainly never
3654 I also never swap any elements unless I can prove there is a
3655 good reason. Many sort algorithms will swap a known value with
3656 an uncompared value just to get things in the right place (or
3657 avoid complexity :-), but that uncompared value, once it gets
3658 compared, may then have to be swapped again. A lot of the
3659 complexity of this code is due to the fact that it never swaps
3660 anything except compared values, and it only swaps them when the
3661 compare shows they are out of position.
3663 int pc_left, pc_right;
3664 int u_right, u_left;
3668 pc_left = ((part_left + part_right) / 2);
3670 u_right = pc_left - 1;
3671 u_left = pc_right + 1;
3673 /* Qsort works best when the pivot value is also the median value
3674 in the partition (unfortunately you can't find the median value
3675 without first sorting :-), so to give the algorithm a helping
3676 hand, we pick 3 elements and sort them and use the median value
3677 of that tiny set as the pivot value.
3679 Some versions of qsort like to use the left middle and right as
3680 the 3 elements to sort so they can insure the ends of the
3681 partition will contain values which will stop the scan in the
3682 compare loop, but when you have to call an arbitrarily complex
3683 routine to do a compare, its really better to just keep track of
3684 array index values to know when you hit the edge of the
3685 partition and avoid the extra compare. An even better reason to
3686 avoid using a compare call is the fact that you can drop off the
3687 edge of the array if someone foolishly provides you with an
3688 unstable compare function that doesn't always provide consistent
3691 So, since it is simpler for us to compare the three adjacent
3692 elements in the middle of the partition, those are the ones we
3693 pick here (conveniently pointed at by u_right, pc_left, and
3694 u_left). The values of the left, center, and right elements
3695 are refered to as l c and r in the following comments.
3698 #ifdef QSORT_ORDER_GUESS
3701 s = qsort_cmp(u_right, pc_left);
3704 s = qsort_cmp(pc_left, u_left);
3705 /* if l < c, c < r - already in order - nothing to do */
3707 /* l < c, c == r - already in order, pc grows */
3709 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3711 /* l < c, c > r - need to know more */
3712 s = qsort_cmp(u_right, u_left);
3714 /* l < c, c > r, l < r - swap c & r to get ordered */
3715 qsort_swap(pc_left, u_left);
3716 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3717 } else if (s == 0) {
3718 /* l < c, c > r, l == r - swap c&r, grow pc */
3719 qsort_swap(pc_left, u_left);
3721 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3723 /* l < c, c > r, l > r - make lcr into rlc to get ordered */
3724 qsort_rotate(pc_left, u_right, u_left);
3725 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3728 } else if (s == 0) {
3730 s = qsort_cmp(pc_left, u_left);
3732 /* l == c, c < r - already in order, grow pc */
3734 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3735 } else if (s == 0) {
3736 /* l == c, c == r - already in order, grow pc both ways */
3739 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3741 /* l == c, c > r - swap l & r, grow pc */
3742 qsort_swap(u_right, u_left);
3744 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3748 s = qsort_cmp(pc_left, u_left);
3750 /* l > c, c < r - need to know more */
3751 s = qsort_cmp(u_right, u_left);
3753 /* l > c, c < r, l < r - swap l & c to get ordered */
3754 qsort_swap(u_right, pc_left);
3755 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3756 } else if (s == 0) {
3757 /* l > c, c < r, l == r - swap l & c, grow pc */
3758 qsort_swap(u_right, pc_left);
3760 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3762 /* l > c, c < r, l > r - rotate lcr into crl to order */
3763 qsort_rotate(u_right, pc_left, u_left);
3764 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3766 } else if (s == 0) {
3767 /* l > c, c == r - swap ends, grow pc */
3768 qsort_swap(u_right, u_left);
3770 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3772 /* l > c, c > r - swap ends to get in order */
3773 qsort_swap(u_right, u_left);
3774 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3777 /* We now know the 3 middle elements have been compared and
3778 arranged in the desired order, so we can shrink the uncompared
3783 qsort_all_asserts(pc_left, pc_right, u_left, u_right);
3785 /* The above massive nested if was the simple part :-). We now have
3786 the middle 3 elements ordered and we need to scan through the
3787 uncompared sets on either side, swapping elements that are on
3788 the wrong side or simply shuffling equal elements around to get
3789 all equal elements into the pivot chunk.
3793 int still_work_on_left;
3794 int still_work_on_right;
3796 /* Scan the uncompared values on the left. If I find a value
3797 equal to the pivot value, move it over so it is adjacent to
3798 the pivot chunk and expand the pivot chunk. If I find a value
3799 less than the pivot value, then just leave it - its already
3800 on the correct side of the partition. If I find a greater
3801 value, then stop the scan.
3803 while (still_work_on_left = (u_right >= part_left)) {
3804 s = qsort_cmp(u_right, pc_left);
3807 } else if (s == 0) {
3809 if (pc_left != u_right) {
3810 qsort_swap(u_right, pc_left);
3816 qsort_assert(u_right < pc_left);
3817 qsort_assert(pc_left <= pc_right);
3818 qsort_assert(qsort_cmp(u_right + 1, pc_left) <= 0);
3819 qsort_assert(qsort_cmp(pc_left, pc_right) == 0);
3822 /* Do a mirror image scan of uncompared values on the right
3824 while (still_work_on_right = (u_left <= part_right)) {
3825 s = qsort_cmp(pc_right, u_left);
3828 } else if (s == 0) {
3830 if (pc_right != u_left) {
3831 qsort_swap(pc_right, u_left);
3837 qsort_assert(u_left > pc_right);
3838 qsort_assert(pc_left <= pc_right);
3839 qsort_assert(qsort_cmp(pc_right, u_left - 1) <= 0);
3840 qsort_assert(qsort_cmp(pc_left, pc_right) == 0);
3843 if (still_work_on_left) {
3844 /* I know I have a value on the left side which needs to be
3845 on the right side, but I need to know more to decide
3846 exactly the best thing to do with it.
3848 if (still_work_on_right) {
3849 /* I know I have values on both side which are out of
3850 position. This is a big win because I kill two birds
3851 with one swap (so to speak). I can advance the
3852 uncompared pointers on both sides after swapping both
3853 of them into the right place.
3855 qsort_swap(u_right, u_left);
3858 qsort_all_asserts(pc_left, pc_right, u_left, u_right);
3860 /* I have an out of position value on the left, but the
3861 right is fully scanned, so I "slide" the pivot chunk
3862 and any less-than values left one to make room for the
3863 greater value over on the right. If the out of position
3864 value is immediately adjacent to the pivot chunk (there
3865 are no less-than values), I can do that with a swap,
3866 otherwise, I have to rotate one of the less than values
3867 into the former position of the out of position value
3868 and the right end of the pivot chunk into the left end
3872 if (pc_left == u_right) {
3873 qsort_swap(u_right, pc_right);
3874 qsort_all_asserts(pc_left, pc_right-1, u_left, u_right-1);
3876 qsort_rotate(u_right, pc_left, pc_right);
3877 qsort_all_asserts(pc_left, pc_right-1, u_left, u_right-1);
3882 } else if (still_work_on_right) {
3883 /* Mirror image of complex case above: I have an out of
3884 position value on the right, but the left is fully
3885 scanned, so I need to shuffle things around to make room
3886 for the right value on the left.
3889 if (pc_right == u_left) {
3890 qsort_swap(u_left, pc_left);
3891 qsort_all_asserts(pc_left+1, pc_right, u_left+1, u_right);
3893 qsort_rotate(pc_right, pc_left, u_left);
3894 qsort_all_asserts(pc_left+1, pc_right, u_left+1, u_right);
3899 /* No more scanning required on either side of partition,
3900 break out of loop and figure out next set of partitions
3906 /* The elements in the pivot chunk are now in the right place. They
3907 will never move or be compared again. All I have to do is decide
3908 what to do with the stuff to the left and right of the pivot
3911 Notes on the QSORT_ORDER_GUESS ifdef code:
3913 1. If I just built these partitions without swapping any (or
3914 very many) elements, there is a chance that the elements are
3915 already ordered properly (being properly ordered will
3916 certainly result in no swapping, but the converse can't be
3919 2. A (properly written) insertion sort will run faster on
3920 already ordered data than qsort will.
3922 3. Perhaps there is some way to make a good guess about
3923 switching to an insertion sort earlier than partition size 6
3924 (for instance - we could save the partition size on the stack
3925 and increase the size each time we find we didn't swap, thus
3926 switching to insertion sort earlier for partitions with a
3927 history of not swapping).
3929 4. Naturally, if I just switch right away, it will make
3930 artificial benchmarks with pure ascending (or descending)
3931 data look really good, but is that a good reason in general?
3935 #ifdef QSORT_ORDER_GUESS
3937 #if QSORT_ORDER_GUESS == 1
3938 qsort_break_even = (part_right - part_left) + 1;
3940 #if QSORT_ORDER_GUESS == 2
3941 qsort_break_even *= 2;
3943 #if QSORT_ORDER_GUESS == 3
3944 int prev_break = qsort_break_even;
3945 qsort_break_even *= qsort_break_even;
3946 if (qsort_break_even < prev_break) {
3947 qsort_break_even = (part_right - part_left) + 1;
3951 qsort_break_even = QSORT_BREAK_EVEN;
3955 if (part_left < pc_left) {
3956 /* There are elements on the left which need more processing.
3957 Check the right as well before deciding what to do.
3959 if (pc_right < part_right) {
3960 /* We have two partitions to be sorted. Stack the biggest one
3961 and process the smallest one on the next iteration. This
3962 minimizes the stack height by insuring that any additional
3963 stack entries must come from the smallest partition which
3964 (because it is smallest) will have the fewest
3965 opportunities to generate additional stack entries.
3967 if ((part_right - pc_right) > (pc_left - part_left)) {
3968 /* stack the right partition, process the left */
3969 partition_stack[next_stack_entry].left = pc_right + 1;
3970 partition_stack[next_stack_entry].right = part_right;
3971 #ifdef QSORT_ORDER_GUESS
3972 partition_stack[next_stack_entry].qsort_break_even = qsort_break_even;
3974 part_right = pc_left - 1;
3976 /* stack the left partition, process the right */
3977 partition_stack[next_stack_entry].left = part_left;
3978 partition_stack[next_stack_entry].right = pc_left - 1;
3979 #ifdef QSORT_ORDER_GUESS
3980 partition_stack[next_stack_entry].qsort_break_even = qsort_break_even;
3982 part_left = pc_right + 1;
3984 qsort_assert(next_stack_entry < QSORT_MAX_STACK);
3987 /* The elements on the left are the only remaining elements
3988 that need sorting, arrange for them to be processed as the
3991 part_right = pc_left - 1;
3993 } else if (pc_right < part_right) {
3994 /* There is only one chunk on the right to be sorted, make it
3995 the new partition and loop back around.
3997 part_left = pc_right + 1;
3999 /* This whole partition wound up in the pivot chunk, so
4000 we need to get a new partition off the stack.
4002 if (next_stack_entry == 0) {
4003 /* the stack is empty - we are done */
4007 part_left = partition_stack[next_stack_entry].left;
4008 part_right = partition_stack[next_stack_entry].right;
4009 #ifdef QSORT_ORDER_GUESS
4010 qsort_break_even = partition_stack[next_stack_entry].qsort_break_even;
4014 /* This partition is too small to fool with qsort complexity, just
4015 do an ordinary insertion sort to minimize overhead.
4018 /* Assume 1st element is in right place already, and start checking
4019 at 2nd element to see where it should be inserted.
4021 for (i = part_left + 1; i <= part_right; ++i) {
4023 /* Scan (backwards - just in case 'i' is already in right place)
4024 through the elements already sorted to see if the ith element
4025 belongs ahead of one of them.
4027 for (j = i - 1; j >= part_left; --j) {
4028 if (qsort_cmp(i, j) >= 0) {
4029 /* i belongs right after j
4036 /* Looks like we really need to move some things
4040 for (k = i - 1; k >= j; --k)
4041 array[k + 1] = array[k];
4046 /* That partition is now sorted, grab the next one, or get out
4047 of the loop if there aren't any more.
4050 if (next_stack_entry == 0) {
4051 /* the stack is empty - we are done */
4055 part_left = partition_stack[next_stack_entry].left;
4056 part_right = partition_stack[next_stack_entry].right;
4057 #ifdef QSORT_ORDER_GUESS
4058 qsort_break_even = partition_stack[next_stack_entry].qsort_break_even;
4063 /* Believe it or not, the array is sorted at this point! */
4076 sortcv(pTHXo_ SV *a, SV *b)
4079 I32 oldsaveix = PL_savestack_ix;
4080 I32 oldscopeix = PL_scopestack_ix;
4082 GvSV(PL_firstgv) = a;
4083 GvSV(PL_secondgv) = b;
4084 PL_stack_sp = PL_stack_base;
4087 if (PL_stack_sp != PL_stack_base + 1)
4088 Perl_croak(aTHX_ "Sort subroutine didn't return single value");
4089 if (!SvNIOKp(*PL_stack_sp))
4090 Perl_croak(aTHX_ "Sort subroutine didn't return a numeric value");
4091 result = SvIV(*PL_stack_sp);
4092 while (PL_scopestack_ix > oldscopeix) {
4095 leave_scope(oldsaveix);
4101 sv_ncmp(pTHXo_ SV *a, SV *b)
4105 return nv1 < nv2 ? -1 : nv1 > nv2 ? 1 : 0;
4109 sv_i_ncmp(pTHXo_ SV *a, SV *b)
4113 return iv1 < iv2 ? -1 : iv1 > iv2 ? 1 : 0;
4115 #define tryCALL_AMAGICbin(left,right,meth,svp) STMT_START { \
4117 if (PL_amagic_generation) { \
4118 if (SvAMAGIC(left)||SvAMAGIC(right))\
4119 *svp = amagic_call(left, \
4127 amagic_ncmp(pTHXo_ register SV *a, register SV *b)
4130 tryCALL_AMAGICbin(a,b,ncmp,&tmpsv);
4135 I32 i = SvIVX(tmpsv);
4145 return sv_ncmp(aTHXo_ a, b);
4149 amagic_i_ncmp(pTHXo_ register SV *a, register SV *b)
4152 tryCALL_AMAGICbin(a,b,ncmp,&tmpsv);
4157 I32 i = SvIVX(tmpsv);
4167 return sv_i_ncmp(aTHXo_ a, b);
4171 amagic_cmp(pTHXo_ register SV *str1, register SV *str2)
4174 tryCALL_AMAGICbin(str1,str2,scmp,&tmpsv);
4179 I32 i = SvIVX(tmpsv);
4189 return sv_cmp(str1, str2);
4193 amagic_cmp_locale(pTHXo_ register SV *str1, register SV *str2)
4196 tryCALL_AMAGICbin(str1,str2,scmp,&tmpsv);
4201 I32 i = SvIVX(tmpsv);
4211 return sv_cmp_locale(str1, str2);
4215 run_user_filter(pTHXo_ int idx, SV *buf_sv, int maxlen)
4217 SV *datasv = FILTER_DATA(idx);
4218 int filter_has_file = IoLINES(datasv);
4219 GV *filter_child_proc = (GV *)IoFMT_GV(datasv);
4220 SV *filter_state = (SV *)IoTOP_GV(datasv);
4221 SV *filter_sub = (SV *)IoBOTTOM_GV(datasv);
4224 /* I was having segfault trouble under Linux 2.2.5 after a
4225 parse error occured. (Had to hack around it with a test
4226 for PL_error_count == 0.) Solaris doesn't segfault --
4227 not sure where the trouble is yet. XXX */
4229 if (filter_has_file) {
4230 len = FILTER_READ(idx+1, buf_sv, maxlen);
4233 if (filter_sub && len >= 0) {
4244 PUSHs(sv_2mortal(newSViv(maxlen)));
4246 PUSHs(filter_state);
4249 count = call_sv(filter_sub, G_SCALAR);
4265 IoLINES(datasv) = 0;
4266 if (filter_child_proc) {
4267 SvREFCNT_dec(filter_child_proc);
4268 IoFMT_GV(datasv) = Nullgv;
4271 SvREFCNT_dec(filter_state);
4272 IoTOP_GV(datasv) = Nullgv;
4275 SvREFCNT_dec(filter_sub);
4276 IoBOTTOM_GV(datasv) = Nullgv;
4278 filter_del(run_user_filter);
4287 sv_cmp_locale_static(pTHXo_ register SV *str1, register SV *str2)
4289 return sv_cmp_locale(str1, str2);
4293 sv_cmp_static(pTHXo_ register SV *str1, register SV *str2)
4295 return sv_cmp(str1, str2);
4298 #endif /* PERL_OBJECT */