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 SAVEVPTR(PL_sortcop);
789 if (PL_op->op_flags & OPf_STACKED) {
790 if (PL_op->op_flags & OPf_SPECIAL) {
791 OP *kid = cLISTOP->op_first->op_sibling; /* pass pushmark */
792 kid = kUNOP->op_first; /* pass rv2gv */
793 kid = kUNOP->op_first; /* pass leave */
794 PL_sortcop = kid->op_next;
795 stash = CopSTASH(PL_curcop);
798 cv = sv_2cv(*++MARK, &stash, &gv, 0);
799 if (!(cv && CvROOT(cv))) {
801 SV *tmpstr = sv_newmortal();
802 gv_efullname3(tmpstr, gv, Nullch);
803 if (cv && CvXSUB(cv))
804 DIE(aTHX_ "Xsub \"%s\" called in sort", SvPVX(tmpstr));
805 DIE(aTHX_ "Undefined sort subroutine \"%s\" called",
810 DIE(aTHX_ "Xsub called in sort");
811 DIE(aTHX_ "Undefined subroutine in sort");
813 DIE(aTHX_ "Not a CODE reference in sort");
815 PL_sortcop = CvSTART(cv);
816 SAVEVPTR(CvROOT(cv)->op_ppaddr);
817 CvROOT(cv)->op_ppaddr = PL_ppaddr[OP_NULL];
820 PL_curpad = AvARRAY((AV*)AvARRAY(CvPADLIST(cv))[1]);
825 stash = CopSTASH(PL_curcop);
829 while (MARK < SP) { /* This may or may not shift down one here. */
831 if (*up = *++MARK) { /* Weed out nulls. */
833 if (!PL_sortcop && !SvPOK(*up)) {
838 (void)sv_2pv(*up, &n_a);
843 max = --up - myorigmark;
848 bool oldcatch = CATCH_GET;
854 PUSHSTACKi(PERLSI_SORT);
855 if (PL_sortstash != stash) {
856 PL_firstgv = gv_fetchpv("a", TRUE, SVt_PV);
857 PL_secondgv = gv_fetchpv("b", TRUE, SVt_PV);
858 PL_sortstash = stash;
861 SAVESPTR(GvSV(PL_firstgv));
862 SAVESPTR(GvSV(PL_secondgv));
864 PUSHBLOCK(cx, CXt_NULL, PL_stack_base);
865 if (!(PL_op->op_flags & OPf_SPECIAL)) {
866 bool hasargs = FALSE;
867 cx->cx_type = CXt_SUB;
868 cx->blk_gimme = G_SCALAR;
871 (void)SvREFCNT_inc(cv); /* in preparation for POPSUB */
873 PL_sortcxix = cxstack_ix;
874 qsortsv((myorigmark+1), max, sortcv);
876 POPBLOCK(cx,PL_curpm);
884 MEXTEND(SP, 20); /* Can't afford stack realloc on signal. */
885 qsortsv(ORIGMARK+1, max,
886 (PL_op->op_private & OPpSORT_NUMERIC)
887 ? ( (PL_op->op_private & OPpSORT_INTEGER)
888 ? ( overloading ? amagic_i_ncmp : sv_i_ncmp)
889 : ( overloading ? amagic_ncmp : sv_ncmp))
890 : ( (PL_op->op_private & OPpLOCALE)
893 : sv_cmp_locale_static)
894 : ( overloading ? amagic_cmp : sv_cmp_static)));
895 if (PL_op->op_private & OPpSORT_REVERSE) {
897 SV **q = ORIGMARK+max;
907 PL_stack_sp = ORIGMARK + max;
915 if (GIMME == G_ARRAY)
917 if (SvTRUEx(PAD_SV(PL_op->op_targ)))
918 return cLOGOP->op_other;
927 if (GIMME == G_ARRAY) {
928 RETURNOP(((LOGOP*)cUNOP->op_first)->op_other);
932 SV *targ = PAD_SV(PL_op->op_targ);
934 if ((PL_op->op_private & OPpFLIP_LINENUM)
935 ? (PL_last_in_gv && SvIV(sv) == (IV)IoLINES(GvIOp(PL_last_in_gv)))
937 sv_setiv(PAD_SV(cUNOP->op_first->op_targ), 1);
938 if (PL_op->op_flags & OPf_SPECIAL) {
946 RETURNOP(((LOGOP*)cUNOP->op_first)->op_other);
959 if (GIMME == G_ARRAY) {
965 if (SvGMAGICAL(left))
967 if (SvGMAGICAL(right))
970 if (SvNIOKp(left) || !SvPOKp(left) ||
971 (looks_like_number(left) && *SvPVX(left) != '0') )
973 if (SvNV(left) < IV_MIN || SvNV(right) > IV_MAX)
974 DIE(aTHX_ "Range iterator outside integer range");
985 sv = sv_2mortal(newSViv(i++));
990 SV *final = sv_mortalcopy(right);
992 char *tmps = SvPV(final, len);
994 sv = sv_mortalcopy(left);
996 while (!SvNIOKp(sv) && SvCUR(sv) <= len) {
998 if (strEQ(SvPVX(sv),tmps))
1000 sv = sv_2mortal(newSVsv(sv));
1007 SV *targ = PAD_SV(cUNOP->op_first->op_targ);
1009 if ((PL_op->op_private & OPpFLIP_LINENUM)
1010 ? (PL_last_in_gv && SvIV(sv) == (IV)IoLINES(GvIOp(PL_last_in_gv)))
1012 sv_setiv(PAD_SV(((UNOP*)cUNOP->op_first)->op_first->op_targ), 0);
1013 sv_catpv(targ, "E0");
1024 S_dopoptolabel(pTHX_ char *label)
1028 register PERL_CONTEXT *cx;
1030 for (i = cxstack_ix; i >= 0; i--) {
1032 switch (CxTYPE(cx)) {
1034 if (ckWARN(WARN_UNSAFE))
1035 Perl_warner(aTHX_ WARN_UNSAFE, "Exiting substitution via %s",
1036 PL_op_name[PL_op->op_type]);
1039 if (ckWARN(WARN_UNSAFE))
1040 Perl_warner(aTHX_ WARN_UNSAFE, "Exiting subroutine via %s",
1041 PL_op_name[PL_op->op_type]);
1044 if (ckWARN(WARN_UNSAFE))
1045 Perl_warner(aTHX_ WARN_UNSAFE, "Exiting format via %s",
1046 PL_op_name[PL_op->op_type]);
1049 if (ckWARN(WARN_UNSAFE))
1050 Perl_warner(aTHX_ WARN_UNSAFE, "Exiting eval via %s",
1051 PL_op_name[PL_op->op_type]);
1054 if (ckWARN(WARN_UNSAFE))
1055 Perl_warner(aTHX_ WARN_UNSAFE, "Exiting pseudo-block via %s",
1056 PL_op_name[PL_op->op_type]);
1059 if (!cx->blk_loop.label ||
1060 strNE(label, cx->blk_loop.label) ) {
1061 DEBUG_l(Perl_deb(aTHX_ "(Skipping label #%ld %s)\n",
1062 (long)i, cx->blk_loop.label));
1065 DEBUG_l( Perl_deb(aTHX_ "(Found label #%ld %s)\n", (long)i, label));
1073 Perl_dowantarray(pTHX)
1075 I32 gimme = block_gimme();
1076 return (gimme == G_VOID) ? G_SCALAR : gimme;
1080 Perl_block_gimme(pTHX)
1085 cxix = dopoptosub(cxstack_ix);
1089 switch (cxstack[cxix].blk_gimme) {
1097 Perl_croak(aTHX_ "panic: bad gimme: %d\n", cxstack[cxix].blk_gimme);
1104 S_dopoptosub(pTHX_ I32 startingblock)
1107 return dopoptosub_at(cxstack, startingblock);
1111 S_dopoptosub_at(pTHX_ PERL_CONTEXT *cxstk, I32 startingblock)
1115 register PERL_CONTEXT *cx;
1116 for (i = startingblock; i >= 0; i--) {
1118 switch (CxTYPE(cx)) {
1124 DEBUG_l( Perl_deb(aTHX_ "(Found sub #%ld)\n", (long)i));
1132 S_dopoptoeval(pTHX_ I32 startingblock)
1136 register PERL_CONTEXT *cx;
1137 for (i = startingblock; i >= 0; i--) {
1139 switch (CxTYPE(cx)) {
1143 DEBUG_l( Perl_deb(aTHX_ "(Found eval #%ld)\n", (long)i));
1151 S_dopoptoloop(pTHX_ I32 startingblock)
1155 register PERL_CONTEXT *cx;
1156 for (i = startingblock; i >= 0; i--) {
1158 switch (CxTYPE(cx)) {
1160 if (ckWARN(WARN_UNSAFE))
1161 Perl_warner(aTHX_ WARN_UNSAFE, "Exiting substitution via %s",
1162 PL_op_name[PL_op->op_type]);
1165 if (ckWARN(WARN_UNSAFE))
1166 Perl_warner(aTHX_ WARN_UNSAFE, "Exiting subroutine via %s",
1167 PL_op_name[PL_op->op_type]);
1170 if (ckWARN(WARN_UNSAFE))
1171 Perl_warner(aTHX_ WARN_UNSAFE, "Exiting format via %s",
1172 PL_op_name[PL_op->op_type]);
1175 if (ckWARN(WARN_UNSAFE))
1176 Perl_warner(aTHX_ WARN_UNSAFE, "Exiting eval via %s",
1177 PL_op_name[PL_op->op_type]);
1180 if (ckWARN(WARN_UNSAFE))
1181 Perl_warner(aTHX_ WARN_UNSAFE, "Exiting pseudo-block via %s",
1182 PL_op_name[PL_op->op_type]);
1185 DEBUG_l( Perl_deb(aTHX_ "(Found loop #%ld)\n", (long)i));
1193 Perl_dounwind(pTHX_ I32 cxix)
1196 register PERL_CONTEXT *cx;
1200 while (cxstack_ix > cxix) {
1202 cx = &cxstack[cxstack_ix];
1203 DEBUG_l(PerlIO_printf(Perl_debug_log, "Unwinding block %ld, type %s\n",
1204 (long) cxstack_ix, PL_block_type[CxTYPE(cx)]));
1205 /* Note: we don't need to restore the base context info till the end. */
1206 switch (CxTYPE(cx)) {
1209 continue; /* not break */
1231 * Closures mentioned at top level of eval cannot be referenced
1232 * again, and their presence indirectly causes a memory leak.
1233 * (Note that the fact that compcv and friends are still set here
1234 * is, AFAIK, an accident.) --Chip
1236 * XXX need to get comppad et al from eval's cv rather than
1237 * relying on the incidental global values.
1240 S_free_closures(pTHX)
1243 SV **svp = AvARRAY(PL_comppad_name);
1245 for (ix = AvFILLp(PL_comppad_name); ix >= 0; ix--) {
1247 if (sv && sv != &PL_sv_undef && *SvPVX(sv) == '&') {
1249 svp[ix] = &PL_sv_undef;
1253 SvREFCNT_dec(CvOUTSIDE(sv));
1254 CvOUTSIDE(sv) = Nullcv;
1267 Perl_qerror(pTHX_ SV *err)
1270 sv_catsv(ERRSV, err);
1272 sv_catsv(PL_errors, err);
1274 Perl_warn(aTHX_ "%_", err);
1279 Perl_die_where(pTHX_ char *message, STRLEN msglen)
1285 register PERL_CONTEXT *cx;
1290 if (PL_in_eval & EVAL_KEEPERR) {
1291 static char prefix[] = "\t(in cleanup) ";
1296 else if (SvCUR(err) >= sizeof(prefix)+msglen-1) {
1299 if (*e != *message || strNE(e,message))
1303 SvGROW(err, SvCUR(err)+sizeof(prefix)+msglen);
1304 sv_catpvn(err, prefix, sizeof(prefix)-1);
1305 sv_catpvn(err, message, msglen);
1306 if (ckWARN(WARN_UNSAFE)) {
1307 STRLEN start = SvCUR(err)-msglen-sizeof(prefix)+1;
1308 Perl_warner(aTHX_ WARN_UNSAFE, SvPVX(err)+start);
1313 sv_setpvn(ERRSV, message, msglen);
1316 message = SvPVx(ERRSV, msglen);
1318 while ((cxix = dopoptoeval(cxstack_ix)) < 0
1319 && PL_curstackinfo->si_prev)
1328 if (cxix < cxstack_ix)
1331 POPBLOCK(cx,PL_curpm);
1332 if (CxTYPE(cx) != CXt_EVAL) {
1333 PerlIO_write(Perl_error_log, "panic: die ", 11);
1334 PerlIO_write(Perl_error_log, message, msglen);
1339 if (gimme == G_SCALAR)
1340 *++newsp = &PL_sv_undef;
1341 PL_stack_sp = newsp;
1345 if (optype == OP_REQUIRE) {
1346 char* msg = SvPVx(ERRSV, n_a);
1347 DIE(aTHX_ "%sCompilation failed in require",
1348 *msg ? msg : "Unknown error\n");
1350 return pop_return();
1354 message = SvPVx(ERRSV, msglen);
1357 /* SFIO can really mess with your errno */
1360 PerlIO *serr = Perl_error_log;
1362 PerlIO_write(serr, message, msglen);
1363 (void)PerlIO_flush(serr);
1376 if (SvTRUE(left) != SvTRUE(right))
1388 RETURNOP(cLOGOP->op_other);
1397 RETURNOP(cLOGOP->op_other);
1403 register I32 cxix = dopoptosub(cxstack_ix);
1404 register PERL_CONTEXT *cx;
1405 register PERL_CONTEXT *ccstack = cxstack;
1406 PERL_SI *top_si = PL_curstackinfo;
1417 /* we may be in a higher stacklevel, so dig down deeper */
1418 while (cxix < 0 && top_si->si_type != PERLSI_MAIN) {
1419 top_si = top_si->si_prev;
1420 ccstack = top_si->si_cxstack;
1421 cxix = dopoptosub_at(ccstack, top_si->si_cxix);
1424 if (GIMME != G_ARRAY)
1428 if (PL_DBsub && cxix >= 0 &&
1429 ccstack[cxix].blk_sub.cv == GvCV(PL_DBsub))
1433 cxix = dopoptosub_at(ccstack, cxix - 1);
1436 cx = &ccstack[cxix];
1437 if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
1438 dbcxix = dopoptosub_at(ccstack, cxix - 1);
1439 /* We expect that ccstack[dbcxix] is CXt_SUB, anyway, the
1440 field below is defined for any cx. */
1441 if (PL_DBsub && dbcxix >= 0 && ccstack[dbcxix].blk_sub.cv == GvCV(PL_DBsub))
1442 cx = &ccstack[dbcxix];
1445 stashname = CopSTASHPV(cx->blk_oldcop);
1446 if (GIMME != G_ARRAY) {
1448 PUSHs(&PL_sv_undef);
1451 sv_setpv(TARG, stashname);
1458 PUSHs(&PL_sv_undef);
1460 PUSHs(sv_2mortal(newSVpv(stashname, 0)));
1461 PUSHs(sv_2mortal(newSVpv(CopFILE(cx->blk_oldcop), 0)));
1462 PUSHs(sv_2mortal(newSViv((I32)CopLINE(cx->blk_oldcop))));
1465 if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
1466 /* So is ccstack[dbcxix]. */
1468 gv_efullname3(sv, CvGV(ccstack[cxix].blk_sub.cv), Nullch);
1469 PUSHs(sv_2mortal(sv));
1470 PUSHs(sv_2mortal(newSViv((I32)cx->blk_sub.hasargs)));
1473 PUSHs(sv_2mortal(newSVpvn("(eval)",6)));
1474 PUSHs(sv_2mortal(newSViv(0)));
1476 gimme = (I32)cx->blk_gimme;
1477 if (gimme == G_VOID)
1478 PUSHs(&PL_sv_undef);
1480 PUSHs(sv_2mortal(newSViv(gimme & G_ARRAY)));
1481 if (CxTYPE(cx) == CXt_EVAL) {
1482 if (cx->blk_eval.old_op_type == OP_ENTEREVAL) {
1483 PUSHs(cx->blk_eval.cur_text);
1486 else if (cx->blk_eval.old_name) { /* Try blocks have old_name == 0. */
1487 /* Require, put the name. */
1488 PUSHs(sv_2mortal(newSVpv(cx->blk_eval.old_name, 0)));
1493 PUSHs(&PL_sv_undef);
1494 PUSHs(&PL_sv_undef);
1496 if (CxTYPE(cx) == CXt_SUB && cx->blk_sub.hasargs
1497 && CopSTASH_eq(PL_curcop, PL_debstash))
1499 AV *ary = cx->blk_sub.argarray;
1500 int off = AvARRAY(ary) - AvALLOC(ary);
1504 PL_dbargs = GvAV(gv_AVadd(tmpgv = gv_fetchpv("DB::args", TRUE,
1507 AvREAL_off(PL_dbargs); /* XXX Should be REIFY */
1510 if (AvMAX(PL_dbargs) < AvFILLp(ary) + off)
1511 av_extend(PL_dbargs, AvFILLp(ary) + off);
1512 Copy(AvALLOC(ary), AvARRAY(PL_dbargs), AvFILLp(ary) + 1 + off, SV*);
1513 AvFILLp(PL_dbargs) = AvFILLp(ary) + off;
1515 /* XXX only hints propagated via op_private are currently
1516 * visible (others are not easily accessible, since they
1517 * use the global PL_hints) */
1518 PUSHs(sv_2mortal(newSViv((I32)cx->blk_oldcop->op_private &
1519 HINT_PRIVATE_MASK)));
1533 sv_reset(tmps, CopSTASH(PL_curcop));
1545 PL_curcop = (COP*)PL_op;
1546 TAINT_NOT; /* Each statement is presumed innocent */
1547 PL_stack_sp = PL_stack_base + cxstack[cxstack_ix].blk_oldsp;
1550 if (PL_op->op_private || SvIV(PL_DBsingle) || SvIV(PL_DBsignal) || SvIV(PL_DBtrace))
1554 register PERL_CONTEXT *cx;
1555 I32 gimme = G_ARRAY;
1562 DIE(aTHX_ "No DB::DB routine defined");
1564 if (CvDEPTH(cv) >= 1 && !(PL_debug & (1<<30))) /* don't do recursive DB::DB call */
1576 push_return(PL_op->op_next);
1577 PUSHBLOCK(cx, CXt_SUB, SP);
1580 (void)SvREFCNT_inc(cv);
1581 SAVEVPTR(PL_curpad);
1582 PL_curpad = AvARRAY((AV*)*av_fetch(CvPADLIST(cv),1,FALSE));
1583 RETURNOP(CvSTART(cv));
1597 register PERL_CONTEXT *cx;
1598 I32 gimme = GIMME_V;
1600 U32 cxtype = CXt_LOOP;
1609 if (PL_op->op_flags & OPf_SPECIAL) {
1611 svp = &THREADSV(PL_op->op_targ); /* per-thread variable */
1612 SAVEGENERICSV(*svp);
1616 #endif /* USE_THREADS */
1617 if (PL_op->op_targ) {
1618 svp = &PL_curpad[PL_op->op_targ]; /* "my" variable */
1621 iterdata = (void*)PL_op->op_targ;
1622 cxtype |= CXp_PADVAR;
1627 svp = &GvSV(gv); /* symbol table variable */
1628 SAVEGENERICSV(*svp);
1631 iterdata = (void*)gv;
1637 PUSHBLOCK(cx, cxtype, SP);
1639 PUSHLOOP(cx, iterdata, MARK);
1641 PUSHLOOP(cx, svp, MARK);
1643 if (PL_op->op_flags & OPf_STACKED) {
1644 cx->blk_loop.iterary = (AV*)SvREFCNT_inc(POPs);
1645 if (SvTYPE(cx->blk_loop.iterary) != SVt_PVAV) {
1647 if (SvNIOKp(sv) || !SvPOKp(sv) ||
1648 (looks_like_number(sv) && *SvPVX(sv) != '0')) {
1649 if (SvNV(sv) < IV_MIN ||
1650 SvNV((SV*)cx->blk_loop.iterary) >= IV_MAX)
1651 DIE(aTHX_ "Range iterator outside integer range");
1652 cx->blk_loop.iterix = SvIV(sv);
1653 cx->blk_loop.itermax = SvIV((SV*)cx->blk_loop.iterary);
1656 cx->blk_loop.iterlval = newSVsv(sv);
1660 cx->blk_loop.iterary = PL_curstack;
1661 AvFILLp(PL_curstack) = SP - PL_stack_base;
1662 cx->blk_loop.iterix = MARK - PL_stack_base;
1671 register PERL_CONTEXT *cx;
1672 I32 gimme = GIMME_V;
1678 PUSHBLOCK(cx, CXt_LOOP, SP);
1679 PUSHLOOP(cx, 0, SP);
1687 register PERL_CONTEXT *cx;
1695 newsp = PL_stack_base + cx->blk_loop.resetsp;
1698 if (gimme == G_VOID)
1700 else if (gimme == G_SCALAR) {
1702 *++newsp = sv_mortalcopy(*SP);
1704 *++newsp = &PL_sv_undef;
1708 *++newsp = sv_mortalcopy(*++mark);
1709 TAINT_NOT; /* Each item is independent */
1715 POPLOOP(cx); /* Stack values are safe: release loop vars ... */
1716 PL_curpm = newpm; /* ... and pop $1 et al */
1728 register PERL_CONTEXT *cx;
1729 bool popsub2 = FALSE;
1736 if (PL_curstackinfo->si_type == PERLSI_SORT) {
1737 if (cxstack_ix == PL_sortcxix
1738 || dopoptosub(cxstack_ix) <= PL_sortcxix)
1740 if (cxstack_ix > PL_sortcxix)
1741 dounwind(PL_sortcxix);
1742 AvARRAY(PL_curstack)[1] = *SP;
1743 PL_stack_sp = PL_stack_base + 1;
1748 cxix = dopoptosub(cxstack_ix);
1750 DIE(aTHX_ "Can't return outside a subroutine");
1751 if (cxix < cxstack_ix)
1755 switch (CxTYPE(cx)) {
1761 if (AvFILLp(PL_comppad_name) >= 0)
1764 if (optype == OP_REQUIRE &&
1765 (MARK == SP || (gimme == G_SCALAR && !SvTRUE(*SP))) )
1767 /* Unassume the success we assumed earlier. */
1768 char *name = cx->blk_eval.old_name;
1769 (void)hv_delete(GvHVn(PL_incgv), name, strlen(name), G_DISCARD);
1770 DIE(aTHX_ "%s did not return a true value", name);
1777 DIE(aTHX_ "panic: return");
1781 if (gimme == G_SCALAR) {
1784 if (cx->blk_sub.cv && CvDEPTH(cx->blk_sub.cv) > 1) {
1786 *++newsp = SvREFCNT_inc(*SP);
1791 *++newsp = sv_mortalcopy(*SP);
1794 *++newsp = (SvTEMP(*SP)) ? *SP : sv_mortalcopy(*SP);
1796 *++newsp = sv_mortalcopy(*SP);
1798 *++newsp = &PL_sv_undef;
1800 else if (gimme == G_ARRAY) {
1801 while (++MARK <= SP) {
1802 *++newsp = (popsub2 && SvTEMP(*MARK))
1803 ? *MARK : sv_mortalcopy(*MARK);
1804 TAINT_NOT; /* Each item is independent */
1807 PL_stack_sp = newsp;
1809 /* Stack values are safe: */
1811 POPSUB(cx,sv); /* release CV and @_ ... */
1815 PL_curpm = newpm; /* ... and pop $1 et al */
1819 return pop_return();
1826 register PERL_CONTEXT *cx;
1836 if (PL_op->op_flags & OPf_SPECIAL) {
1837 cxix = dopoptoloop(cxstack_ix);
1839 DIE(aTHX_ "Can't \"last\" outside a block");
1842 cxix = dopoptolabel(cPVOP->op_pv);
1844 DIE(aTHX_ "Label not found for \"last %s\"", cPVOP->op_pv);
1846 if (cxix < cxstack_ix)
1851 switch (CxTYPE(cx)) {
1854 newsp = PL_stack_base + cx->blk_loop.resetsp;
1855 nextop = cx->blk_loop.last_op->op_next;
1859 nextop = pop_return();
1863 nextop = pop_return();
1867 nextop = pop_return();
1870 DIE(aTHX_ "panic: last");
1874 if (gimme == G_SCALAR) {
1876 *++newsp = ((pop2 == CXt_SUB) && SvTEMP(*SP))
1877 ? *SP : sv_mortalcopy(*SP);
1879 *++newsp = &PL_sv_undef;
1881 else if (gimme == G_ARRAY) {
1882 while (++MARK <= SP) {
1883 *++newsp = ((pop2 == CXt_SUB) && SvTEMP(*MARK))
1884 ? *MARK : sv_mortalcopy(*MARK);
1885 TAINT_NOT; /* Each item is independent */
1891 /* Stack values are safe: */
1894 POPLOOP(cx); /* release loop vars ... */
1898 POPSUB(cx,sv); /* release CV and @_ ... */
1901 PL_curpm = newpm; /* ... and pop $1 et al */
1911 register PERL_CONTEXT *cx;
1914 if (PL_op->op_flags & OPf_SPECIAL) {
1915 cxix = dopoptoloop(cxstack_ix);
1917 DIE(aTHX_ "Can't \"next\" outside a block");
1920 cxix = dopoptolabel(cPVOP->op_pv);
1922 DIE(aTHX_ "Label not found for \"next %s\"", cPVOP->op_pv);
1924 if (cxix < cxstack_ix)
1928 oldsave = PL_scopestack[PL_scopestack_ix - 1];
1929 LEAVE_SCOPE(oldsave);
1930 return cx->blk_loop.next_op;
1936 register PERL_CONTEXT *cx;
1939 if (PL_op->op_flags & OPf_SPECIAL) {
1940 cxix = dopoptoloop(cxstack_ix);
1942 DIE(aTHX_ "Can't \"redo\" outside a block");
1945 cxix = dopoptolabel(cPVOP->op_pv);
1947 DIE(aTHX_ "Label not found for \"redo %s\"", cPVOP->op_pv);
1949 if (cxix < cxstack_ix)
1953 oldsave = PL_scopestack[PL_scopestack_ix - 1];
1954 LEAVE_SCOPE(oldsave);
1955 return cx->blk_loop.redo_op;
1959 S_dofindlabel(pTHX_ OP *o, char *label, OP **opstack, OP **oplimit)
1963 static char too_deep[] = "Target of goto is too deeply nested";
1966 Perl_croak(aTHX_ too_deep);
1967 if (o->op_type == OP_LEAVE ||
1968 o->op_type == OP_SCOPE ||
1969 o->op_type == OP_LEAVELOOP ||
1970 o->op_type == OP_LEAVETRY)
1972 *ops++ = cUNOPo->op_first;
1974 Perl_croak(aTHX_ too_deep);
1977 if (o->op_flags & OPf_KIDS) {
1979 /* First try all the kids at this level, since that's likeliest. */
1980 for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling) {
1981 if ((kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) &&
1982 kCOP->cop_label && strEQ(kCOP->cop_label, label))
1985 for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling) {
1986 if (kid == PL_lastgotoprobe)
1988 if ((kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) &&
1990 (ops[-1]->op_type != OP_NEXTSTATE &&
1991 ops[-1]->op_type != OP_DBSTATE)))
1993 if (o = dofindlabel(kid, label, ops, oplimit))
2012 register PERL_CONTEXT *cx;
2013 #define GOTO_DEPTH 64
2014 OP *enterops[GOTO_DEPTH];
2016 int do_dump = (PL_op->op_type == OP_DUMP);
2017 static char must_have_label[] = "goto must have label";
2020 if (PL_op->op_flags & OPf_STACKED) {
2024 /* This egregious kludge implements goto &subroutine */
2025 if (SvROK(sv) && SvTYPE(SvRV(sv)) == SVt_PVCV) {
2027 register PERL_CONTEXT *cx;
2028 CV* cv = (CV*)SvRV(sv);
2034 if (!CvROOT(cv) && !CvXSUB(cv)) {
2039 /* autoloaded stub? */
2040 if (cv != GvCV(gv) && (cv = GvCV(gv)))
2042 autogv = gv_autoload4(GvSTASH(gv), GvNAME(gv),
2043 GvNAMELEN(gv), FALSE);
2044 if (autogv && (cv = GvCV(autogv)))
2046 tmpstr = sv_newmortal();
2047 gv_efullname3(tmpstr, gv, Nullch);
2048 DIE(aTHX_ "Goto undefined subroutine &%s",SvPVX(tmpstr));
2050 DIE(aTHX_ "Goto undefined subroutine");
2053 /* First do some returnish stuff. */
2054 cxix = dopoptosub(cxstack_ix);
2056 DIE(aTHX_ "Can't goto subroutine outside a subroutine");
2057 if (cxix < cxstack_ix)
2060 if (CxTYPE(cx) == CXt_EVAL && cx->blk_eval.old_op_type == OP_ENTEREVAL)
2061 DIE(aTHX_ "Can't goto subroutine from an eval-string");
2063 if (CxTYPE(cx) == CXt_SUB && cx->blk_sub.hasargs) {
2064 /* put @_ back onto stack */
2065 AV* av = cx->blk_sub.argarray;
2067 items = AvFILLp(av) + 1;
2069 EXTEND(PL_stack_sp, items); /* @_ could have been extended. */
2070 Copy(AvARRAY(av), PL_stack_sp, items, SV*);
2071 PL_stack_sp += items;
2073 SvREFCNT_dec(GvAV(PL_defgv));
2074 GvAV(PL_defgv) = cx->blk_sub.savearray;
2075 #endif /* USE_THREADS */
2076 /* abandon @_ if it got reified */
2078 (void)sv_2mortal((SV*)av); /* delay until return */
2080 av_extend(av, items-1);
2081 AvFLAGS(av) = AVf_REIFY;
2082 PL_curpad[0] = (SV*)(cx->blk_sub.argarray = av);
2085 else if (CvXSUB(cv)) { /* put GvAV(defgv) back onto stack */
2089 av = (AV*)PL_curpad[0];
2091 av = GvAV(PL_defgv);
2093 items = AvFILLp(av) + 1;
2095 EXTEND(PL_stack_sp, items); /* @_ could have been extended. */
2096 Copy(AvARRAY(av), PL_stack_sp, items, SV*);
2097 PL_stack_sp += items;
2099 if (CxTYPE(cx) == CXt_SUB &&
2100 !(CvDEPTH(cx->blk_sub.cv) = cx->blk_sub.olddepth))
2101 SvREFCNT_dec(cx->blk_sub.cv);
2102 oldsave = PL_scopestack[PL_scopestack_ix - 1];
2103 LEAVE_SCOPE(oldsave);
2105 /* Now do some callish stuff. */
2108 #ifdef PERL_XSUB_OLDSTYLE
2109 if (CvOLDSTYLE(cv)) {
2110 I32 (*fp3)(int,int,int);
2115 fp3 = (I32(*)(int,int,int))CvXSUB(cv);
2116 items = (*fp3)(CvXSUBANY(cv).any_i32,
2117 mark - PL_stack_base + 1,
2119 SP = PL_stack_base + items;
2122 #endif /* PERL_XSUB_OLDSTYLE */
2127 PL_stack_sp--; /* There is no cv arg. */
2128 /* Push a mark for the start of arglist */
2130 (void)(*CvXSUB(cv))(aTHXo_ cv);
2131 /* Pop the current context like a decent sub should */
2132 POPBLOCK(cx, PL_curpm);
2133 /* Do _not_ use PUTBACK, keep the XSUB's return stack! */
2136 return pop_return();
2139 AV* padlist = CvPADLIST(cv);
2140 SV** svp = AvARRAY(padlist);
2141 if (CxTYPE(cx) == CXt_EVAL) {
2142 PL_in_eval = cx->blk_eval.old_in_eval;
2143 PL_eval_root = cx->blk_eval.old_eval_root;
2144 cx->cx_type = CXt_SUB;
2145 cx->blk_sub.hasargs = 0;
2147 cx->blk_sub.cv = cv;
2148 cx->blk_sub.olddepth = CvDEPTH(cv);
2150 if (CvDEPTH(cv) < 2)
2151 (void)SvREFCNT_inc(cv);
2152 else { /* save temporaries on recursion? */
2153 if (CvDEPTH(cv) == 100 && ckWARN(WARN_RECURSION))
2154 sub_crush_depth(cv);
2155 if (CvDEPTH(cv) > AvFILLp(padlist)) {
2156 AV *newpad = newAV();
2157 SV **oldpad = AvARRAY(svp[CvDEPTH(cv)-1]);
2158 I32 ix = AvFILLp((AV*)svp[1]);
2159 I32 names_fill = AvFILLp((AV*)svp[0]);
2160 svp = AvARRAY(svp[0]);
2161 for ( ;ix > 0; ix--) {
2162 if (names_fill >= ix && svp[ix] != &PL_sv_undef) {
2163 char *name = SvPVX(svp[ix]);
2164 if ((SvFLAGS(svp[ix]) & SVf_FAKE)
2167 /* outer lexical or anon code */
2168 av_store(newpad, ix,
2169 SvREFCNT_inc(oldpad[ix]) );
2171 else { /* our own lexical */
2173 av_store(newpad, ix, sv = (SV*)newAV());
2174 else if (*name == '%')
2175 av_store(newpad, ix, sv = (SV*)newHV());
2177 av_store(newpad, ix, sv = NEWSV(0,0));
2181 else if (IS_PADGV(oldpad[ix]) || IS_PADCONST(oldpad[ix])) {
2182 av_store(newpad, ix, sv = SvREFCNT_inc(oldpad[ix]));
2185 av_store(newpad, ix, sv = NEWSV(0,0));
2189 if (cx->blk_sub.hasargs) {
2192 av_store(newpad, 0, (SV*)av);
2193 AvFLAGS(av) = AVf_REIFY;
2195 av_store(padlist, CvDEPTH(cv), (SV*)newpad);
2196 AvFILLp(padlist) = CvDEPTH(cv);
2197 svp = AvARRAY(padlist);
2201 if (!cx->blk_sub.hasargs) {
2202 AV* av = (AV*)PL_curpad[0];
2204 items = AvFILLp(av) + 1;
2206 /* Mark is at the end of the stack. */
2208 Copy(AvARRAY(av), SP + 1, items, SV*);
2213 #endif /* USE_THREADS */
2214 SAVEVPTR(PL_curpad);
2215 PL_curpad = AvARRAY((AV*)svp[CvDEPTH(cv)]);
2217 if (cx->blk_sub.hasargs)
2218 #endif /* USE_THREADS */
2220 AV* av = (AV*)PL_curpad[0];
2224 cx->blk_sub.savearray = GvAV(PL_defgv);
2225 GvAV(PL_defgv) = (AV*)SvREFCNT_inc(av);
2226 #endif /* USE_THREADS */
2227 cx->blk_sub.argarray = av;
2230 if (items >= AvMAX(av) + 1) {
2232 if (AvARRAY(av) != ary) {
2233 AvMAX(av) += AvARRAY(av) - AvALLOC(av);
2234 SvPVX(av) = (char*)ary;
2236 if (items >= AvMAX(av) + 1) {
2237 AvMAX(av) = items - 1;
2238 Renew(ary,items+1,SV*);
2240 SvPVX(av) = (char*)ary;
2243 Copy(mark,AvARRAY(av),items,SV*);
2244 AvFILLp(av) = items - 1;
2245 assert(!AvREAL(av));
2252 if (PERLDB_SUB) { /* Checking curstash breaks DProf. */
2254 * We do not care about using sv to call CV;
2255 * it's for informational purposes only.
2257 SV *sv = GvSV(PL_DBsub);
2260 if (PERLDB_SUB_NN) {
2261 SvIVX(sv) = PTR2IV(cv); /* Already upgraded, saved */
2264 gv_efullname3(sv, CvGV(cv), Nullch);
2267 && (gotocv = get_cv("DB::goto", FALSE)) ) {
2268 PUSHMARK( PL_stack_sp );
2269 call_sv((SV*)gotocv, G_SCALAR | G_NODEBUG);
2273 RETURNOP(CvSTART(cv));
2277 label = SvPV(sv,n_a);
2278 if (!(do_dump || *label))
2279 DIE(aTHX_ must_have_label);
2282 else if (PL_op->op_flags & OPf_SPECIAL) {
2284 DIE(aTHX_ must_have_label);
2287 label = cPVOP->op_pv;
2289 if (label && *label) {
2294 PL_lastgotoprobe = 0;
2296 for (ix = cxstack_ix; ix >= 0; ix--) {
2298 switch (CxTYPE(cx)) {
2300 gotoprobe = PL_eval_root; /* XXX not good for nested eval */
2303 gotoprobe = cx->blk_oldcop->op_sibling;
2309 gotoprobe = cx->blk_oldcop->op_sibling;
2311 gotoprobe = PL_main_root;
2314 if (CvDEPTH(cx->blk_sub.cv)) {
2315 gotoprobe = CvROOT(cx->blk_sub.cv);
2321 DIE(aTHX_ "Can't \"goto\" outside a block");
2324 DIE(aTHX_ "panic: goto");
2325 gotoprobe = PL_main_root;
2328 retop = dofindlabel(gotoprobe, label,
2329 enterops, enterops + GOTO_DEPTH);
2332 PL_lastgotoprobe = gotoprobe;
2335 DIE(aTHX_ "Can't find label %s", label);
2337 /* pop unwanted frames */
2339 if (ix < cxstack_ix) {
2346 oldsave = PL_scopestack[PL_scopestack_ix];
2347 LEAVE_SCOPE(oldsave);
2350 /* push wanted frames */
2352 if (*enterops && enterops[1]) {
2354 for (ix = 1; enterops[ix]; ix++) {
2355 PL_op = enterops[ix];
2356 /* Eventually we may want to stack the needed arguments
2357 * for each op. For now, we punt on the hard ones. */
2358 if (PL_op->op_type == OP_ENTERITER)
2359 DIE(aTHX_ "Can't \"goto\" into the middle of a foreach loop",
2361 CALL_FPTR(PL_op->op_ppaddr)(aTHX);
2369 if (!retop) retop = PL_main_start;
2371 PL_restartop = retop;
2372 PL_do_undump = TRUE;
2376 PL_restartop = 0; /* hmm, must be GNU unexec().. */
2377 PL_do_undump = FALSE;
2393 if (anum == 1 && VMSISH_EXIT)
2397 PL_exit_flags |= PERL_EXIT_EXPECTED;
2399 PUSHs(&PL_sv_undef);
2407 NV value = SvNVx(GvSV(cCOP->cop_gv));
2408 register I32 match = I_32(value);
2411 if (((NV)match) > value)
2412 --match; /* was fractional--truncate other way */
2414 match -= cCOP->uop.scop.scop_offset;
2417 else if (match > cCOP->uop.scop.scop_max)
2418 match = cCOP->uop.scop.scop_max;
2419 PL_op = cCOP->uop.scop.scop_next[match];
2429 PL_op = PL_op->op_next; /* can't assume anything */
2432 match = *(SvPVx(GvSV(cCOP->cop_gv), n_a)) & 255;
2433 match -= cCOP->uop.scop.scop_offset;
2436 else if (match > cCOP->uop.scop.scop_max)
2437 match = cCOP->uop.scop.scop_max;
2438 PL_op = cCOP->uop.scop.scop_next[match];
2447 S_save_lines(pTHX_ AV *array, SV *sv)
2449 register char *s = SvPVX(sv);
2450 register char *send = SvPVX(sv) + SvCUR(sv);
2452 register I32 line = 1;
2454 while (s && s < send) {
2455 SV *tmpstr = NEWSV(85,0);
2457 sv_upgrade(tmpstr, SVt_PVMG);
2458 t = strchr(s, '\n');
2464 sv_setpvn(tmpstr, s, t - s);
2465 av_store(array, line++, tmpstr);
2471 S_docatch_body(pTHX_ va_list args)
2478 S_docatch(pTHX_ OP *o)
2483 volatile PERL_SI *cursi = PL_curstackinfo;
2487 assert(CATCH_GET == TRUE);
2491 CALLPROTECT(aTHX_ pcur_env, &ret, MEMBER_TO_FPTR(S_docatch_body));
2496 if (PL_restartop && cursi == PL_curstackinfo) {
2497 PL_op = PL_restartop;
2512 Perl_sv_compile_2op(pTHX_ SV *sv, OP** startop, char *code, AV** avp)
2513 /* sv Text to convert to OP tree. */
2514 /* startop op_free() this to undo. */
2515 /* code Short string id of the caller. */
2517 dSP; /* Make POPBLOCK work. */
2520 I32 gimme = 0; /* SUSPECT - INITIALZE TO WHAT? NI-S */
2523 OP *oop = PL_op, *rop;
2524 char tmpbuf[TYPE_DIGITS(long) + 12 + 10];
2530 /* switch to eval mode */
2532 if (PL_curcop == &PL_compiling) {
2533 SAVECOPSTASH(&PL_compiling);
2534 CopSTASH_set(&PL_compiling, PL_curstash);
2536 SAVECOPFILE(&PL_compiling);
2537 SAVECOPLINE(&PL_compiling);
2538 sprintf(tmpbuf, "_<(%.10s_eval %lu)", code, (unsigned long)++PL_evalseq);
2539 CopFILE_set(&PL_compiling, tmpbuf+2);
2540 CopLINE_set(&PL_compiling, 1);
2541 /* XXX For C<eval "...">s within BEGIN {} blocks, this ends up
2542 deleting the eval's FILEGV from the stash before gv_check() runs
2543 (i.e. before run-time proper). To work around the coredump that
2544 ensues, we always turn GvMULTI_on for any globals that were
2545 introduced within evals. See force_ident(). GSAR 96-10-12 */
2546 safestr = savepv(tmpbuf);
2547 SAVEDELETE(PL_defstash, safestr, strlen(safestr));
2549 #ifdef OP_IN_REGISTER
2557 PL_op->op_type = OP_ENTEREVAL;
2558 PL_op->op_flags = 0; /* Avoid uninit warning. */
2559 PUSHBLOCK(cx, CXt_EVAL, SP);
2560 PUSHEVAL(cx, 0, Nullgv);
2561 rop = doeval(G_SCALAR, startop);
2562 POPBLOCK(cx,PL_curpm);
2565 (*startop)->op_type = OP_NULL;
2566 (*startop)->op_ppaddr = PL_ppaddr[OP_NULL];
2568 *avp = (AV*)SvREFCNT_inc(PL_comppad);
2570 if (PL_curcop == &PL_compiling)
2571 PL_compiling.op_private = PL_hints;
2572 #ifdef OP_IN_REGISTER
2578 /* With USE_THREADS, eval_owner must be held on entry to doeval */
2580 S_doeval(pTHX_ int gimme, OP** startop)
2588 PL_in_eval = EVAL_INEVAL;
2592 /* set up a scratch pad */
2595 SAVEVPTR(PL_curpad);
2596 SAVESPTR(PL_comppad);
2597 SAVESPTR(PL_comppad_name);
2598 SAVEI32(PL_comppad_name_fill);
2599 SAVEI32(PL_min_intro_pending);
2600 SAVEI32(PL_max_intro_pending);
2603 for (i = cxstack_ix - 1; i >= 0; i--) {
2604 PERL_CONTEXT *cx = &cxstack[i];
2605 if (CxTYPE(cx) == CXt_EVAL)
2607 else if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
2608 caller = cx->blk_sub.cv;
2613 SAVESPTR(PL_compcv);
2614 PL_compcv = (CV*)NEWSV(1104,0);
2615 sv_upgrade((SV *)PL_compcv, SVt_PVCV);
2616 CvEVAL_on(PL_compcv);
2618 CvOWNER(PL_compcv) = 0;
2619 New(666, CvMUTEXP(PL_compcv), 1, perl_mutex);
2620 MUTEX_INIT(CvMUTEXP(PL_compcv));
2621 #endif /* USE_THREADS */
2623 PL_comppad = newAV();
2624 av_push(PL_comppad, Nullsv);
2625 PL_curpad = AvARRAY(PL_comppad);
2626 PL_comppad_name = newAV();
2627 PL_comppad_name_fill = 0;
2628 PL_min_intro_pending = 0;
2631 av_store(PL_comppad_name, 0, newSVpvn("@_", 2));
2632 PL_curpad[0] = (SV*)newAV();
2633 SvPADMY_on(PL_curpad[0]); /* XXX Needed? */
2634 #endif /* USE_THREADS */
2636 comppadlist = newAV();
2637 AvREAL_off(comppadlist);
2638 av_store(comppadlist, 0, (SV*)PL_comppad_name);
2639 av_store(comppadlist, 1, (SV*)PL_comppad);
2640 CvPADLIST(PL_compcv) = comppadlist;
2642 if (!saveop || saveop->op_type != OP_REQUIRE)
2643 CvOUTSIDE(PL_compcv) = (CV*)SvREFCNT_inc(caller);
2645 SAVEFREESV(PL_compcv);
2647 /* make sure we compile in the right package */
2649 if (CopSTASH_ne(PL_curcop, PL_curstash)) {
2650 SAVESPTR(PL_curstash);
2651 PL_curstash = CopSTASH(PL_curcop);
2653 SAVESPTR(PL_beginav);
2654 PL_beginav = newAV();
2655 SAVEFREESV(PL_beginav);
2657 /* try to compile it */
2659 PL_eval_root = Nullop;
2661 PL_curcop = &PL_compiling;
2662 PL_curcop->cop_arybase = 0;
2663 SvREFCNT_dec(PL_rs);
2664 PL_rs = newSVpvn("\n", 1);
2665 if (saveop && saveop->op_flags & OPf_SPECIAL)
2666 PL_in_eval |= EVAL_KEEPERR;
2669 if (yyparse() || PL_error_count || !PL_eval_root) {
2673 I32 optype = 0; /* Might be reset by POPEVAL. */
2678 op_free(PL_eval_root);
2679 PL_eval_root = Nullop;
2681 SP = PL_stack_base + POPMARK; /* pop original mark */
2683 POPBLOCK(cx,PL_curpm);
2689 if (optype == OP_REQUIRE) {
2690 char* msg = SvPVx(ERRSV, n_a);
2691 DIE(aTHX_ "%sCompilation failed in require",
2692 *msg ? msg : "Unknown error\n");
2695 char* msg = SvPVx(ERRSV, n_a);
2697 POPBLOCK(cx,PL_curpm);
2699 Perl_croak(aTHX_ "%sCompilation failed in regexp",
2700 (*msg ? msg : "Unknown error\n"));
2702 SvREFCNT_dec(PL_rs);
2703 PL_rs = SvREFCNT_inc(PL_nrs);
2705 MUTEX_LOCK(&PL_eval_mutex);
2707 COND_SIGNAL(&PL_eval_cond);
2708 MUTEX_UNLOCK(&PL_eval_mutex);
2709 #endif /* USE_THREADS */
2712 SvREFCNT_dec(PL_rs);
2713 PL_rs = SvREFCNT_inc(PL_nrs);
2714 CopLINE_set(&PL_compiling, 0);
2716 *startop = PL_eval_root;
2717 SvREFCNT_dec(CvOUTSIDE(PL_compcv));
2718 CvOUTSIDE(PL_compcv) = Nullcv;
2720 SAVEFREEOP(PL_eval_root);
2722 scalarvoid(PL_eval_root);
2723 else if (gimme & G_ARRAY)
2726 scalar(PL_eval_root);
2728 DEBUG_x(dump_eval());
2730 /* Register with debugger: */
2731 if (PERLDB_INTER && saveop->op_type == OP_REQUIRE) {
2732 CV *cv = get_cv("DB::postponed", FALSE);
2736 XPUSHs((SV*)CopFILEGV(&PL_compiling));
2738 call_sv((SV*)cv, G_DISCARD);
2742 /* compiled okay, so do it */
2744 CvDEPTH(PL_compcv) = 1;
2745 SP = PL_stack_base + POPMARK; /* pop original mark */
2746 PL_op = saveop; /* The caller may need it. */
2748 MUTEX_LOCK(&PL_eval_mutex);
2750 COND_SIGNAL(&PL_eval_cond);
2751 MUTEX_UNLOCK(&PL_eval_mutex);
2752 #endif /* USE_THREADS */
2754 RETURNOP(PL_eval_start);
2758 S_doopen_pmc(pTHX_ const char *name, const char *mode)
2760 STRLEN namelen = strlen(name);
2763 if (namelen > 3 && strEQ(name + namelen - 3, ".pm")) {
2764 SV *pmcsv = Perl_newSVpvf(aTHX_ "%s%c", name, 'c');
2765 char *pmc = SvPV_nolen(pmcsv);
2768 if (PerlLIO_stat(pmc, &pmcstat) < 0) {
2769 fp = PerlIO_open(name, mode);
2772 if (PerlLIO_stat(name, &pmstat) < 0 ||
2773 pmstat.st_mtime < pmcstat.st_mtime)
2775 fp = PerlIO_open(pmc, mode);
2778 fp = PerlIO_open(name, mode);
2781 SvREFCNT_dec(pmcsv);
2784 fp = PerlIO_open(name, mode);
2792 register PERL_CONTEXT *cx;
2797 SV *namesv = Nullsv;
2799 I32 gimme = G_SCALAR;
2800 PerlIO *tryrsfp = 0;
2802 int filter_has_file = 0;
2803 GV *filter_child_proc = 0;
2804 SV *filter_state = 0;
2808 if (SvNIOKp(sv) && !SvPOKp(sv)) {
2809 if (Atof(PL_patchlevel) + 0.00000999 < SvNV(sv))
2810 DIE(aTHX_ "Perl %s required--this is only version %s, stopped",
2811 SvPV(sv,n_a),PL_patchlevel);
2814 name = SvPV(sv, len);
2815 if (!(name && len > 0 && *name))
2816 DIE(aTHX_ "Null filename used");
2817 TAINT_PROPER("require");
2818 if (PL_op->op_type == OP_REQUIRE &&
2819 (svp = hv_fetch(GvHVn(PL_incgv), name, len, 0)) &&
2820 *svp != &PL_sv_undef)
2823 /* prepare to compile file */
2825 if (PERL_FILE_IS_ABSOLUTE(name)
2826 || (*name == '.' && (name[1] == '/' ||
2827 (name[1] == '.' && name[2] == '/'))))
2830 tryrsfp = doopen_pmc(name,PERL_SCRIPT_MODE);
2833 AV *ar = GvAVn(PL_incgv);
2837 if ((unixname = tounixspec(name, Nullch)) != Nullch)
2840 namesv = NEWSV(806, 0);
2841 for (i = 0; i <= AvFILL(ar); i++) {
2842 SV *dirsv = *av_fetch(ar, i, TRUE);
2848 if (SvTYPE(SvRV(loader)) == SVt_PVAV) {
2849 loader = *av_fetch((AV *)SvRV(loader), 0, TRUE);
2852 Perl_sv_setpvf(aTHX_ namesv, "/loader/0x%"UVxf"/%s",
2853 PTR2UV(SvANY(loader)), name);
2854 tryname = SvPVX(namesv);
2865 count = call_sv(loader, G_ARRAY);
2875 if (SvROK(arg) && SvTYPE(SvRV(arg)) == SVt_PVGV) {
2879 if (SvTYPE(arg) == SVt_PVGV) {
2880 IO *io = GvIO((GV *)arg);
2885 tryrsfp = IoIFP(io);
2886 if (IoTYPE(io) == '|') {
2887 /* reading from a child process doesn't
2888 nest -- when returning from reading
2889 the inner module, the outer one is
2890 unreadable (closed?) I've tried to
2891 save the gv to manage the lifespan of
2892 the pipe, but this didn't help. XXX */
2893 filter_child_proc = (GV *)arg;
2894 (void)SvREFCNT_inc(filter_child_proc);
2897 if (IoOFP(io) && IoOFP(io) != IoIFP(io)) {
2898 PerlIO_close(IoOFP(io));
2910 if (SvROK(arg) && SvTYPE(SvRV(arg)) == SVt_PVCV) {
2912 (void)SvREFCNT_inc(filter_sub);
2915 filter_state = SP[i];
2916 (void)SvREFCNT_inc(filter_state);
2920 tryrsfp = PerlIO_open("/dev/null",
2934 filter_has_file = 0;
2935 if (filter_child_proc) {
2936 SvREFCNT_dec(filter_child_proc);
2937 filter_child_proc = 0;
2940 SvREFCNT_dec(filter_state);
2944 SvREFCNT_dec(filter_sub);
2949 char *dir = SvPVx(dirsv, n_a);
2952 if ((unixdir = tounixpath(dir, Nullch)) == Nullch)
2954 sv_setpv(namesv, unixdir);
2955 sv_catpv(namesv, unixname);
2957 Perl_sv_setpvf(aTHX_ namesv, "%s/%s", dir, name);
2959 TAINT_PROPER("require");
2960 tryname = SvPVX(namesv);
2961 tryrsfp = doopen_pmc(tryname, PERL_SCRIPT_MODE);
2963 if (tryname[0] == '.' && tryname[1] == '/')
2971 SAVECOPFILE(&PL_compiling);
2972 CopFILE_set(&PL_compiling, tryrsfp ? tryname : name);
2973 SvREFCNT_dec(namesv);
2975 if (PL_op->op_type == OP_REQUIRE) {
2976 char *msgstr = name;
2977 if (namesv) { /* did we lookup @INC? */
2978 SV *msg = sv_2mortal(newSVpv(msgstr,0));
2979 SV *dirmsgsv = NEWSV(0, 0);
2980 AV *ar = GvAVn(PL_incgv);
2982 sv_catpvn(msg, " in @INC", 8);
2983 if (instr(SvPVX(msg), ".h "))
2984 sv_catpv(msg, " (change .h to .ph maybe?)");
2985 if (instr(SvPVX(msg), ".ph "))
2986 sv_catpv(msg, " (did you run h2ph?)");
2987 sv_catpv(msg, " (@INC contains:");
2988 for (i = 0; i <= AvFILL(ar); i++) {
2989 char *dir = SvPVx(*av_fetch(ar, i, TRUE), n_a);
2990 Perl_sv_setpvf(aTHX_ dirmsgsv, " %s", dir);
2991 sv_catsv(msg, dirmsgsv);
2993 sv_catpvn(msg, ")", 1);
2994 SvREFCNT_dec(dirmsgsv);
2995 msgstr = SvPV_nolen(msg);
2997 DIE(aTHX_ "Can't locate %s", msgstr);
3003 SETERRNO(0, SS$_NORMAL);
3005 /* Assume success here to prevent recursive requirement. */
3006 (void)hv_store(GvHVn(PL_incgv), name, strlen(name),
3007 newSVpv(CopFILE(&PL_compiling), 0), 0 );
3011 lex_start(sv_2mortal(newSVpvn("",0)));
3012 SAVEGENERICSV(PL_rsfp_filters);
3013 PL_rsfp_filters = Nullav;
3018 SAVESPTR(PL_compiling.cop_warnings);
3019 if (PL_dowarn & G_WARN_ALL_ON)
3020 PL_compiling.cop_warnings = WARN_ALL ;
3021 else if (PL_dowarn & G_WARN_ALL_OFF)
3022 PL_compiling.cop_warnings = WARN_NONE ;
3024 PL_compiling.cop_warnings = WARN_STD ;
3026 if (filter_sub || filter_child_proc) {
3027 SV *datasv = filter_add(run_user_filter, Nullsv);
3028 IoLINES(datasv) = filter_has_file;
3029 IoFMT_GV(datasv) = (GV *)filter_child_proc;
3030 IoTOP_GV(datasv) = (GV *)filter_state;
3031 IoBOTTOM_GV(datasv) = (GV *)filter_sub;
3034 /* switch to eval mode */
3035 push_return(PL_op->op_next);
3036 PUSHBLOCK(cx, CXt_EVAL, SP);
3037 PUSHEVAL(cx, name, Nullgv);
3039 SAVECOPLINE(&PL_compiling);
3040 CopLINE_set(&PL_compiling, 0);
3044 MUTEX_LOCK(&PL_eval_mutex);
3045 if (PL_eval_owner && PL_eval_owner != thr)
3046 while (PL_eval_owner)
3047 COND_WAIT(&PL_eval_cond, &PL_eval_mutex);
3048 PL_eval_owner = thr;
3049 MUTEX_UNLOCK(&PL_eval_mutex);
3050 #endif /* USE_THREADS */
3051 return DOCATCH(doeval(G_SCALAR, NULL));
3056 return pp_require();
3062 register PERL_CONTEXT *cx;
3064 I32 gimme = GIMME_V, was = PL_sub_generation;
3065 char tmpbuf[TYPE_DIGITS(long) + 12];
3070 if (!SvPV(sv,len) || !len)
3072 TAINT_PROPER("eval");
3078 /* switch to eval mode */
3080 SAVECOPFILE(&PL_compiling);
3081 sprintf(tmpbuf, "_<(eval %lu)", (unsigned long)++PL_evalseq);
3082 CopFILE_set(&PL_compiling, tmpbuf+2);
3083 CopLINE_set(&PL_compiling, 1);
3084 /* XXX For C<eval "...">s within BEGIN {} blocks, this ends up
3085 deleting the eval's FILEGV from the stash before gv_check() runs
3086 (i.e. before run-time proper). To work around the coredump that
3087 ensues, we always turn GvMULTI_on for any globals that were
3088 introduced within evals. See force_ident(). GSAR 96-10-12 */
3089 safestr = savepv(tmpbuf);
3090 SAVEDELETE(PL_defstash, safestr, strlen(safestr));
3092 PL_hints = PL_op->op_targ;
3093 SAVESPTR(PL_compiling.cop_warnings);
3094 if (!specialWARN(PL_compiling.cop_warnings)) {
3095 PL_compiling.cop_warnings = newSVsv(PL_compiling.cop_warnings) ;
3096 SAVEFREESV(PL_compiling.cop_warnings) ;
3099 push_return(PL_op->op_next);
3100 PUSHBLOCK(cx, (CXt_EVAL|CXp_REAL), SP);
3101 PUSHEVAL(cx, 0, Nullgv);
3103 /* prepare to compile string */
3105 if (PERLDB_LINE && PL_curstash != PL_debstash)
3106 save_lines(CopFILEAV(&PL_compiling), PL_linestr);
3109 MUTEX_LOCK(&PL_eval_mutex);
3110 if (PL_eval_owner && PL_eval_owner != thr)
3111 while (PL_eval_owner)
3112 COND_WAIT(&PL_eval_cond, &PL_eval_mutex);
3113 PL_eval_owner = thr;
3114 MUTEX_UNLOCK(&PL_eval_mutex);
3115 #endif /* USE_THREADS */
3116 ret = doeval(gimme, NULL);
3117 if (PERLDB_INTER && was != PL_sub_generation /* Some subs defined here. */
3118 && ret != PL_op->op_next) { /* Successive compilation. */
3119 strcpy(safestr, "_<(eval )"); /* Anything fake and short. */
3121 return DOCATCH(ret);
3131 register PERL_CONTEXT *cx;
3133 U8 save_flags = PL_op -> op_flags;
3138 retop = pop_return();
3141 if (gimme == G_VOID)
3143 else if (gimme == G_SCALAR) {
3146 if (SvFLAGS(TOPs) & SVs_TEMP)
3149 *MARK = sv_mortalcopy(TOPs);
3153 *MARK = &PL_sv_undef;
3158 /* in case LEAVE wipes old return values */
3159 for (mark = newsp + 1; mark <= SP; mark++) {
3160 if (!(SvFLAGS(*mark) & SVs_TEMP)) {
3161 *mark = sv_mortalcopy(*mark);
3162 TAINT_NOT; /* Each item is independent */
3166 PL_curpm = newpm; /* Don't pop $1 et al till now */
3168 if (AvFILLp(PL_comppad_name) >= 0)
3172 assert(CvDEPTH(PL_compcv) == 1);
3174 CvDEPTH(PL_compcv) = 0;
3177 if (optype == OP_REQUIRE &&
3178 !(gimme == G_SCALAR ? SvTRUE(*SP) : SP > newsp))
3180 /* Unassume the success we assumed earlier. */
3181 char *name = cx->blk_eval.old_name;
3182 (void)hv_delete(GvHVn(PL_incgv), name, strlen(name), G_DISCARD);
3183 retop = Perl_die(aTHX_ "%s did not return a true value", name);
3184 /* die_where() did LEAVE, or we won't be here */
3188 if (!(save_flags & OPf_SPECIAL))
3198 register PERL_CONTEXT *cx;
3199 I32 gimme = GIMME_V;
3204 push_return(cLOGOP->op_other->op_next);
3205 PUSHBLOCK(cx, CXt_EVAL, SP);
3207 PL_eval_root = PL_op; /* Only needed so that goto works right. */
3209 PL_in_eval = EVAL_INEVAL;
3212 return DOCATCH(PL_op->op_next);
3222 register PERL_CONTEXT *cx;
3230 if (gimme == G_VOID)
3232 else if (gimme == G_SCALAR) {
3235 if (SvFLAGS(TOPs) & (SVs_PADTMP|SVs_TEMP))
3238 *MARK = sv_mortalcopy(TOPs);
3242 *MARK = &PL_sv_undef;
3247 /* in case LEAVE wipes old return values */
3248 for (mark = newsp + 1; mark <= SP; mark++) {
3249 if (!(SvFLAGS(*mark) & (SVs_PADTMP|SVs_TEMP))) {
3250 *mark = sv_mortalcopy(*mark);
3251 TAINT_NOT; /* Each item is independent */
3255 PL_curpm = newpm; /* Don't pop $1 et al till now */
3263 S_doparseform(pTHX_ SV *sv)
3266 register char *s = SvPV_force(sv, len);
3267 register char *send = s + len;
3268 register char *base;
3269 register I32 skipspaces = 0;
3272 bool postspace = FALSE;
3280 Perl_croak(aTHX_ "Null picture in formline");
3282 New(804, fops, (send - s)*3+10, U16); /* Almost certainly too long... */
3287 *fpc++ = FF_LINEMARK;
3288 noblank = repeat = FALSE;
3306 case ' ': case '\t':
3317 *fpc++ = FF_LITERAL;
3325 *fpc++ = skipspaces;
3329 *fpc++ = FF_NEWLINE;
3333 arg = fpc - linepc + 1;
3340 *fpc++ = FF_LINEMARK;
3341 noblank = repeat = FALSE;
3350 ischop = s[-1] == '^';
3356 arg = (s - base) - 1;
3358 *fpc++ = FF_LITERAL;
3367 *fpc++ = FF_LINEGLOB;
3369 else if (*s == '#' || (*s == '.' && s[1] == '#')) {
3370 arg = ischop ? 512 : 0;
3380 arg |= 256 + (s - f);
3382 *fpc++ = s - base; /* fieldsize for FETCH */
3383 *fpc++ = FF_DECIMAL;
3388 bool ismore = FALSE;
3391 while (*++s == '>') ;
3392 prespace = FF_SPACE;
3394 else if (*s == '|') {
3395 while (*++s == '|') ;
3396 prespace = FF_HALFSPACE;
3401 while (*++s == '<') ;
3404 if (*s == '.' && s[1] == '.' && s[2] == '.') {
3408 *fpc++ = s - base; /* fieldsize for FETCH */
3410 *fpc++ = ischop ? FF_CHECKCHOP : FF_CHECKNL;
3428 { /* need to jump to the next word */
3430 z = WORD_ALIGN - SvCUR(sv) % WORD_ALIGN;
3431 SvGROW(sv, SvCUR(sv) + z + arg * sizeof(U16) + 4);
3432 s = SvPVX(sv) + SvCUR(sv) + z;
3434 Copy(fops, s, arg, U16);
3436 sv_magic(sv, Nullsv, 'f', Nullch, 0);
3441 * The rest of this file was derived from source code contributed
3444 * NOTE: this code was derived from Tom Horsley's qsort replacement
3445 * and should not be confused with the original code.
3448 /* Copyright (C) Tom Horsley, 1997. All rights reserved.
3450 Permission granted to distribute under the same terms as perl which are
3453 This program is free software; you can redistribute it and/or modify
3454 it under the terms of either:
3456 a) the GNU General Public License as published by the Free
3457 Software Foundation; either version 1, or (at your option) any
3460 b) the "Artistic License" which comes with this Kit.
3462 Details on the perl license can be found in the perl source code which
3463 may be located via the www.perl.com web page.
3465 This is the most wonderfulest possible qsort I can come up with (and
3466 still be mostly portable) My (limited) tests indicate it consistently
3467 does about 20% fewer calls to compare than does the qsort in the Visual
3468 C++ library, other vendors may vary.
3470 Some of the ideas in here can be found in "Algorithms" by Sedgewick,
3471 others I invented myself (or more likely re-invented since they seemed
3472 pretty obvious once I watched the algorithm operate for a while).
3474 Most of this code was written while watching the Marlins sweep the Giants
3475 in the 1997 National League Playoffs - no Braves fans allowed to use this
3476 code (just kidding :-).
3478 I realize that if I wanted to be true to the perl tradition, the only
3479 comment in this file would be something like:
3481 ...they shuffled back towards the rear of the line. 'No, not at the
3482 rear!' the slave-driver shouted. 'Three files up. And stay there...
3484 However, I really needed to violate that tradition just so I could keep
3485 track of what happens myself, not to mention some poor fool trying to
3486 understand this years from now :-).
3489 /* ********************************************************** Configuration */
3491 #ifndef QSORT_ORDER_GUESS
3492 #define QSORT_ORDER_GUESS 2 /* Select doubling version of the netBSD trick */
3495 /* QSORT_MAX_STACK is the largest number of partitions that can be stacked up for
3496 future processing - a good max upper bound is log base 2 of memory size
3497 (32 on 32 bit machines, 64 on 64 bit machines, etc). In reality can
3498 safely be smaller than that since the program is taking up some space and
3499 most operating systems only let you grab some subset of contiguous
3500 memory (not to mention that you are normally sorting data larger than
3501 1 byte element size :-).
3503 #ifndef QSORT_MAX_STACK
3504 #define QSORT_MAX_STACK 32
3507 /* QSORT_BREAK_EVEN is the size of the largest partition we should insertion sort.
3508 Anything bigger and we use qsort. If you make this too small, the qsort
3509 will probably break (or become less efficient), because it doesn't expect
3510 the middle element of a partition to be the same as the right or left -
3511 you have been warned).
3513 #ifndef QSORT_BREAK_EVEN
3514 #define QSORT_BREAK_EVEN 6
3517 /* ************************************************************* Data Types */
3519 /* hold left and right index values of a partition waiting to be sorted (the
3520 partition includes both left and right - right is NOT one past the end or
3521 anything like that).
3523 struct partition_stack_entry {
3526 #ifdef QSORT_ORDER_GUESS
3527 int qsort_break_even;
3531 /* ******************************************************* Shorthand Macros */
3533 /* Note that these macros will be used from inside the qsort function where
3534 we happen to know that the variable 'elt_size' contains the size of an
3535 array element and the variable 'temp' points to enough space to hold a
3536 temp element and the variable 'array' points to the array being sorted
3537 and 'compare' is the pointer to the compare routine.
3539 Also note that there are very many highly architecture specific ways
3540 these might be sped up, but this is simply the most generally portable
3541 code I could think of.
3544 /* Return < 0 == 0 or > 0 as the value of elt1 is < elt2, == elt2, > elt2
3546 #define qsort_cmp(elt1, elt2) \
3547 ((*compare)(aTHXo_ array[elt1], array[elt2]))
3549 #ifdef QSORT_ORDER_GUESS
3550 #define QSORT_NOTICE_SWAP swapped++;
3552 #define QSORT_NOTICE_SWAP
3555 /* swaps contents of array elements elt1, elt2.
3557 #define qsort_swap(elt1, elt2) \
3560 temp = array[elt1]; \
3561 array[elt1] = array[elt2]; \
3562 array[elt2] = temp; \
3565 /* rotate contents of elt1, elt2, elt3 such that elt1 gets elt2, elt2 gets
3566 elt3 and elt3 gets elt1.
3568 #define qsort_rotate(elt1, elt2, elt3) \
3571 temp = array[elt1]; \
3572 array[elt1] = array[elt2]; \
3573 array[elt2] = array[elt3]; \
3574 array[elt3] = temp; \
3577 /* ************************************************************ Debug stuff */
3584 return; /* good place to set a breakpoint */
3587 #define qsort_assert(t) (void)( (t) || (break_here(), 0) )
3590 doqsort_all_asserts(
3594 int (*compare)(const void * elt1, const void * elt2),
3595 int pc_left, int pc_right, int u_left, int u_right)
3599 qsort_assert(pc_left <= pc_right);
3600 qsort_assert(u_right < pc_left);
3601 qsort_assert(pc_right < u_left);
3602 for (i = u_right + 1; i < pc_left; ++i) {
3603 qsort_assert(qsort_cmp(i, pc_left) < 0);
3605 for (i = pc_left; i < pc_right; ++i) {
3606 qsort_assert(qsort_cmp(i, pc_right) == 0);
3608 for (i = pc_right + 1; i < u_left; ++i) {
3609 qsort_assert(qsort_cmp(pc_right, i) < 0);
3613 #define qsort_all_asserts(PC_LEFT, PC_RIGHT, U_LEFT, U_RIGHT) \
3614 doqsort_all_asserts(array, num_elts, elt_size, compare, \
3615 PC_LEFT, PC_RIGHT, U_LEFT, U_RIGHT)
3619 #define qsort_assert(t) ((void)0)
3621 #define qsort_all_asserts(PC_LEFT, PC_RIGHT, U_LEFT, U_RIGHT) ((void)0)
3625 /* ****************************************************************** qsort */
3628 S_qsortsv(pTHX_ SV ** array, size_t num_elts, SVCOMPARE_t compare)
3632 struct partition_stack_entry partition_stack[QSORT_MAX_STACK];
3633 int next_stack_entry = 0;
3637 #ifdef QSORT_ORDER_GUESS
3638 int qsort_break_even;
3642 /* Make sure we actually have work to do.
3644 if (num_elts <= 1) {
3648 /* Setup the initial partition definition and fall into the sorting loop
3651 part_right = (int)(num_elts - 1);
3652 #ifdef QSORT_ORDER_GUESS
3653 qsort_break_even = QSORT_BREAK_EVEN;
3655 #define qsort_break_even QSORT_BREAK_EVEN
3658 if ((part_right - part_left) >= qsort_break_even) {
3659 /* OK, this is gonna get hairy, so lets try to document all the
3660 concepts and abbreviations and variables and what they keep
3663 pc: pivot chunk - the set of array elements we accumulate in the
3664 middle of the partition, all equal in value to the original
3665 pivot element selected. The pc is defined by:
3667 pc_left - the leftmost array index of the pc
3668 pc_right - the rightmost array index of the pc
3670 we start with pc_left == pc_right and only one element
3671 in the pivot chunk (but it can grow during the scan).
3673 u: uncompared elements - the set of elements in the partition
3674 we have not yet compared to the pivot value. There are two
3675 uncompared sets during the scan - one to the left of the pc
3676 and one to the right.
3678 u_right - the rightmost index of the left side's uncompared set
3679 u_left - the leftmost index of the right side's uncompared set
3681 The leftmost index of the left sides's uncompared set
3682 doesn't need its own variable because it is always defined
3683 by the leftmost edge of the whole partition (part_left). The
3684 same goes for the rightmost edge of the right partition
3687 We know there are no uncompared elements on the left once we
3688 get u_right < part_left and no uncompared elements on the
3689 right once u_left > part_right. When both these conditions
3690 are met, we have completed the scan of the partition.
3692 Any elements which are between the pivot chunk and the
3693 uncompared elements should be less than the pivot value on
3694 the left side and greater than the pivot value on the right
3695 side (in fact, the goal of the whole algorithm is to arrange
3696 for that to be true and make the groups of less-than and
3697 greater-then elements into new partitions to sort again).
3699 As you marvel at the complexity of the code and wonder why it
3700 has to be so confusing. Consider some of the things this level
3701 of confusion brings:
3703 Once I do a compare, I squeeze every ounce of juice out of it. I
3704 never do compare calls I don't have to do, and I certainly never
3707 I also never swap any elements unless I can prove there is a
3708 good reason. Many sort algorithms will swap a known value with
3709 an uncompared value just to get things in the right place (or
3710 avoid complexity :-), but that uncompared value, once it gets
3711 compared, may then have to be swapped again. A lot of the
3712 complexity of this code is due to the fact that it never swaps
3713 anything except compared values, and it only swaps them when the
3714 compare shows they are out of position.
3716 int pc_left, pc_right;
3717 int u_right, u_left;
3721 pc_left = ((part_left + part_right) / 2);
3723 u_right = pc_left - 1;
3724 u_left = pc_right + 1;
3726 /* Qsort works best when the pivot value is also the median value
3727 in the partition (unfortunately you can't find the median value
3728 without first sorting :-), so to give the algorithm a helping
3729 hand, we pick 3 elements and sort them and use the median value
3730 of that tiny set as the pivot value.
3732 Some versions of qsort like to use the left middle and right as
3733 the 3 elements to sort so they can insure the ends of the
3734 partition will contain values which will stop the scan in the
3735 compare loop, but when you have to call an arbitrarily complex
3736 routine to do a compare, its really better to just keep track of
3737 array index values to know when you hit the edge of the
3738 partition and avoid the extra compare. An even better reason to
3739 avoid using a compare call is the fact that you can drop off the
3740 edge of the array if someone foolishly provides you with an
3741 unstable compare function that doesn't always provide consistent
3744 So, since it is simpler for us to compare the three adjacent
3745 elements in the middle of the partition, those are the ones we
3746 pick here (conveniently pointed at by u_right, pc_left, and
3747 u_left). The values of the left, center, and right elements
3748 are refered to as l c and r in the following comments.
3751 #ifdef QSORT_ORDER_GUESS
3754 s = qsort_cmp(u_right, pc_left);
3757 s = qsort_cmp(pc_left, u_left);
3758 /* if l < c, c < r - already in order - nothing to do */
3760 /* l < c, c == r - already in order, pc grows */
3762 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3764 /* l < c, c > r - need to know more */
3765 s = qsort_cmp(u_right, u_left);
3767 /* l < c, c > r, l < r - swap c & r to get ordered */
3768 qsort_swap(pc_left, u_left);
3769 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3770 } else if (s == 0) {
3771 /* l < c, c > r, l == r - swap c&r, grow pc */
3772 qsort_swap(pc_left, u_left);
3774 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3776 /* l < c, c > r, l > r - make lcr into rlc to get ordered */
3777 qsort_rotate(pc_left, u_right, u_left);
3778 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3781 } else if (s == 0) {
3783 s = qsort_cmp(pc_left, u_left);
3785 /* l == c, c < r - already in order, grow pc */
3787 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3788 } else if (s == 0) {
3789 /* l == c, c == r - already in order, grow pc both ways */
3792 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3794 /* l == c, c > r - swap l & r, grow pc */
3795 qsort_swap(u_right, u_left);
3797 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3801 s = qsort_cmp(pc_left, u_left);
3803 /* l > c, c < r - need to know more */
3804 s = qsort_cmp(u_right, u_left);
3806 /* l > c, c < r, l < r - swap l & c to get ordered */
3807 qsort_swap(u_right, pc_left);
3808 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3809 } else if (s == 0) {
3810 /* l > c, c < r, l == r - swap l & c, grow pc */
3811 qsort_swap(u_right, pc_left);
3813 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3815 /* l > c, c < r, l > r - rotate lcr into crl to order */
3816 qsort_rotate(u_right, pc_left, u_left);
3817 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3819 } else if (s == 0) {
3820 /* l > c, c == r - swap ends, grow pc */
3821 qsort_swap(u_right, u_left);
3823 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3825 /* l > c, c > r - swap ends to get in order */
3826 qsort_swap(u_right, u_left);
3827 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3830 /* We now know the 3 middle elements have been compared and
3831 arranged in the desired order, so we can shrink the uncompared
3836 qsort_all_asserts(pc_left, pc_right, u_left, u_right);
3838 /* The above massive nested if was the simple part :-). We now have
3839 the middle 3 elements ordered and we need to scan through the
3840 uncompared sets on either side, swapping elements that are on
3841 the wrong side or simply shuffling equal elements around to get
3842 all equal elements into the pivot chunk.
3846 int still_work_on_left;
3847 int still_work_on_right;
3849 /* Scan the uncompared values on the left. If I find a value
3850 equal to the pivot value, move it over so it is adjacent to
3851 the pivot chunk and expand the pivot chunk. If I find a value
3852 less than the pivot value, then just leave it - its already
3853 on the correct side of the partition. If I find a greater
3854 value, then stop the scan.
3856 while (still_work_on_left = (u_right >= part_left)) {
3857 s = qsort_cmp(u_right, pc_left);
3860 } else if (s == 0) {
3862 if (pc_left != u_right) {
3863 qsort_swap(u_right, pc_left);
3869 qsort_assert(u_right < pc_left);
3870 qsort_assert(pc_left <= pc_right);
3871 qsort_assert(qsort_cmp(u_right + 1, pc_left) <= 0);
3872 qsort_assert(qsort_cmp(pc_left, pc_right) == 0);
3875 /* Do a mirror image scan of uncompared values on the right
3877 while (still_work_on_right = (u_left <= part_right)) {
3878 s = qsort_cmp(pc_right, u_left);
3881 } else if (s == 0) {
3883 if (pc_right != u_left) {
3884 qsort_swap(pc_right, u_left);
3890 qsort_assert(u_left > pc_right);
3891 qsort_assert(pc_left <= pc_right);
3892 qsort_assert(qsort_cmp(pc_right, u_left - 1) <= 0);
3893 qsort_assert(qsort_cmp(pc_left, pc_right) == 0);
3896 if (still_work_on_left) {
3897 /* I know I have a value on the left side which needs to be
3898 on the right side, but I need to know more to decide
3899 exactly the best thing to do with it.
3901 if (still_work_on_right) {
3902 /* I know I have values on both side which are out of
3903 position. This is a big win because I kill two birds
3904 with one swap (so to speak). I can advance the
3905 uncompared pointers on both sides after swapping both
3906 of them into the right place.
3908 qsort_swap(u_right, u_left);
3911 qsort_all_asserts(pc_left, pc_right, u_left, u_right);
3913 /* I have an out of position value on the left, but the
3914 right is fully scanned, so I "slide" the pivot chunk
3915 and any less-than values left one to make room for the
3916 greater value over on the right. If the out of position
3917 value is immediately adjacent to the pivot chunk (there
3918 are no less-than values), I can do that with a swap,
3919 otherwise, I have to rotate one of the less than values
3920 into the former position of the out of position value
3921 and the right end of the pivot chunk into the left end
3925 if (pc_left == u_right) {
3926 qsort_swap(u_right, pc_right);
3927 qsort_all_asserts(pc_left, pc_right-1, u_left, u_right-1);
3929 qsort_rotate(u_right, pc_left, pc_right);
3930 qsort_all_asserts(pc_left, pc_right-1, u_left, u_right-1);
3935 } else if (still_work_on_right) {
3936 /* Mirror image of complex case above: I have an out of
3937 position value on the right, but the left is fully
3938 scanned, so I need to shuffle things around to make room
3939 for the right value on the left.
3942 if (pc_right == u_left) {
3943 qsort_swap(u_left, pc_left);
3944 qsort_all_asserts(pc_left+1, pc_right, u_left+1, u_right);
3946 qsort_rotate(pc_right, pc_left, u_left);
3947 qsort_all_asserts(pc_left+1, pc_right, u_left+1, u_right);
3952 /* No more scanning required on either side of partition,
3953 break out of loop and figure out next set of partitions
3959 /* The elements in the pivot chunk are now in the right place. They
3960 will never move or be compared again. All I have to do is decide
3961 what to do with the stuff to the left and right of the pivot
3964 Notes on the QSORT_ORDER_GUESS ifdef code:
3966 1. If I just built these partitions without swapping any (or
3967 very many) elements, there is a chance that the elements are
3968 already ordered properly (being properly ordered will
3969 certainly result in no swapping, but the converse can't be
3972 2. A (properly written) insertion sort will run faster on
3973 already ordered data than qsort will.
3975 3. Perhaps there is some way to make a good guess about
3976 switching to an insertion sort earlier than partition size 6
3977 (for instance - we could save the partition size on the stack
3978 and increase the size each time we find we didn't swap, thus
3979 switching to insertion sort earlier for partitions with a
3980 history of not swapping).
3982 4. Naturally, if I just switch right away, it will make
3983 artificial benchmarks with pure ascending (or descending)
3984 data look really good, but is that a good reason in general?
3988 #ifdef QSORT_ORDER_GUESS
3990 #if QSORT_ORDER_GUESS == 1
3991 qsort_break_even = (part_right - part_left) + 1;
3993 #if QSORT_ORDER_GUESS == 2
3994 qsort_break_even *= 2;
3996 #if QSORT_ORDER_GUESS == 3
3997 int prev_break = qsort_break_even;
3998 qsort_break_even *= qsort_break_even;
3999 if (qsort_break_even < prev_break) {
4000 qsort_break_even = (part_right - part_left) + 1;
4004 qsort_break_even = QSORT_BREAK_EVEN;
4008 if (part_left < pc_left) {
4009 /* There are elements on the left which need more processing.
4010 Check the right as well before deciding what to do.
4012 if (pc_right < part_right) {
4013 /* We have two partitions to be sorted. Stack the biggest one
4014 and process the smallest one on the next iteration. This
4015 minimizes the stack height by insuring that any additional
4016 stack entries must come from the smallest partition which
4017 (because it is smallest) will have the fewest
4018 opportunities to generate additional stack entries.
4020 if ((part_right - pc_right) > (pc_left - part_left)) {
4021 /* stack the right partition, process the left */
4022 partition_stack[next_stack_entry].left = pc_right + 1;
4023 partition_stack[next_stack_entry].right = part_right;
4024 #ifdef QSORT_ORDER_GUESS
4025 partition_stack[next_stack_entry].qsort_break_even = qsort_break_even;
4027 part_right = pc_left - 1;
4029 /* stack the left partition, process the right */
4030 partition_stack[next_stack_entry].left = part_left;
4031 partition_stack[next_stack_entry].right = pc_left - 1;
4032 #ifdef QSORT_ORDER_GUESS
4033 partition_stack[next_stack_entry].qsort_break_even = qsort_break_even;
4035 part_left = pc_right + 1;
4037 qsort_assert(next_stack_entry < QSORT_MAX_STACK);
4040 /* The elements on the left are the only remaining elements
4041 that need sorting, arrange for them to be processed as the
4044 part_right = pc_left - 1;
4046 } else if (pc_right < part_right) {
4047 /* There is only one chunk on the right to be sorted, make it
4048 the new partition and loop back around.
4050 part_left = pc_right + 1;
4052 /* This whole partition wound up in the pivot chunk, so
4053 we need to get a new partition off the stack.
4055 if (next_stack_entry == 0) {
4056 /* the stack is empty - we are done */
4060 part_left = partition_stack[next_stack_entry].left;
4061 part_right = partition_stack[next_stack_entry].right;
4062 #ifdef QSORT_ORDER_GUESS
4063 qsort_break_even = partition_stack[next_stack_entry].qsort_break_even;
4067 /* This partition is too small to fool with qsort complexity, just
4068 do an ordinary insertion sort to minimize overhead.
4071 /* Assume 1st element is in right place already, and start checking
4072 at 2nd element to see where it should be inserted.
4074 for (i = part_left + 1; i <= part_right; ++i) {
4076 /* Scan (backwards - just in case 'i' is already in right place)
4077 through the elements already sorted to see if the ith element
4078 belongs ahead of one of them.
4080 for (j = i - 1; j >= part_left; --j) {
4081 if (qsort_cmp(i, j) >= 0) {
4082 /* i belongs right after j
4089 /* Looks like we really need to move some things
4093 for (k = i - 1; k >= j; --k)
4094 array[k + 1] = array[k];
4099 /* That partition is now sorted, grab the next one, or get out
4100 of the loop if there aren't any more.
4103 if (next_stack_entry == 0) {
4104 /* the stack is empty - we are done */
4108 part_left = partition_stack[next_stack_entry].left;
4109 part_right = partition_stack[next_stack_entry].right;
4110 #ifdef QSORT_ORDER_GUESS
4111 qsort_break_even = partition_stack[next_stack_entry].qsort_break_even;
4116 /* Believe it or not, the array is sorted at this point! */
4128 sortcv(pTHXo_ SV *a, SV *b)
4131 I32 oldsaveix = PL_savestack_ix;
4132 I32 oldscopeix = PL_scopestack_ix;
4134 GvSV(PL_firstgv) = a;
4135 GvSV(PL_secondgv) = b;
4136 PL_stack_sp = PL_stack_base;
4139 if (PL_stack_sp != PL_stack_base + 1)
4140 Perl_croak(aTHX_ "Sort subroutine didn't return single value");
4141 if (!SvNIOKp(*PL_stack_sp))
4142 Perl_croak(aTHX_ "Sort subroutine didn't return a numeric value");
4143 result = SvIV(*PL_stack_sp);
4144 while (PL_scopestack_ix > oldscopeix) {
4147 leave_scope(oldsaveix);
4153 sv_ncmp(pTHXo_ SV *a, SV *b)
4157 return nv1 < nv2 ? -1 : nv1 > nv2 ? 1 : 0;
4161 sv_i_ncmp(pTHXo_ SV *a, SV *b)
4165 return iv1 < iv2 ? -1 : iv1 > iv2 ? 1 : 0;
4167 #define tryCALL_AMAGICbin(left,right,meth,svp) STMT_START { \
4169 if (PL_amagic_generation) { \
4170 if (SvAMAGIC(left)||SvAMAGIC(right))\
4171 *svp = amagic_call(left, \
4179 amagic_ncmp(pTHXo_ register SV *a, register SV *b)
4182 tryCALL_AMAGICbin(a,b,ncmp,&tmpsv);
4187 I32 i = SvIVX(tmpsv);
4197 return sv_ncmp(aTHXo_ a, b);
4201 amagic_i_ncmp(pTHXo_ register SV *a, register SV *b)
4204 tryCALL_AMAGICbin(a,b,ncmp,&tmpsv);
4209 I32 i = SvIVX(tmpsv);
4219 return sv_i_ncmp(aTHXo_ a, b);
4223 amagic_cmp(pTHXo_ register SV *str1, register SV *str2)
4226 tryCALL_AMAGICbin(str1,str2,scmp,&tmpsv);
4231 I32 i = SvIVX(tmpsv);
4241 return sv_cmp(str1, str2);
4245 amagic_cmp_locale(pTHXo_ register SV *str1, register SV *str2)
4248 tryCALL_AMAGICbin(str1,str2,scmp,&tmpsv);
4253 I32 i = SvIVX(tmpsv);
4263 return sv_cmp_locale(str1, str2);
4267 run_user_filter(pTHXo_ int idx, SV *buf_sv, int maxlen)
4269 SV *datasv = FILTER_DATA(idx);
4270 int filter_has_file = IoLINES(datasv);
4271 GV *filter_child_proc = (GV *)IoFMT_GV(datasv);
4272 SV *filter_state = (SV *)IoTOP_GV(datasv);
4273 SV *filter_sub = (SV *)IoBOTTOM_GV(datasv);
4276 /* I was having segfault trouble under Linux 2.2.5 after a
4277 parse error occured. (Had to hack around it with a test
4278 for PL_error_count == 0.) Solaris doesn't segfault --
4279 not sure where the trouble is yet. XXX */
4281 if (filter_has_file) {
4282 len = FILTER_READ(idx+1, buf_sv, maxlen);
4285 if (filter_sub && len >= 0) {
4296 PUSHs(sv_2mortal(newSViv(maxlen)));
4298 PUSHs(filter_state);
4301 count = call_sv(filter_sub, G_SCALAR);
4317 IoLINES(datasv) = 0;
4318 if (filter_child_proc) {
4319 SvREFCNT_dec(filter_child_proc);
4320 IoFMT_GV(datasv) = Nullgv;
4323 SvREFCNT_dec(filter_state);
4324 IoTOP_GV(datasv) = Nullgv;
4327 SvREFCNT_dec(filter_sub);
4328 IoBOTTOM_GV(datasv) = Nullgv;
4330 filter_del(run_user_filter);
4339 sv_cmp_locale_static(pTHXo_ register SV *str1, register SV *str2)
4341 return sv_cmp_locale(str1, str2);
4345 sv_cmp_static(pTHXo_ register SV *str1, register SV *str2)
4347 return sv_cmp(str1, str2);
4350 #endif /* PERL_OBJECT */