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 sortcv_stacked(pTHXo_ SV *a, SV *b);
31 static I32 sortcv_xsub(pTHXo_ SV *a, SV *b);
32 static I32 sv_ncmp(pTHXo_ SV *a, SV *b);
33 static I32 sv_i_ncmp(pTHXo_ SV *a, SV *b);
34 static I32 amagic_ncmp(pTHXo_ SV *a, SV *b);
35 static I32 amagic_i_ncmp(pTHXo_ SV *a, SV *b);
36 static I32 amagic_cmp(pTHXo_ SV *a, SV *b);
37 static I32 amagic_cmp_locale(pTHXo_ SV *a, SV *b);
38 static I32 run_user_filter(pTHXo_ int idx, SV *buf_sv, int maxlen);
41 static I32 sv_cmp_static(pTHXo_ SV *a, SV *b);
42 static I32 sv_cmp_locale_static(pTHXo_ SV *a, SV *b);
44 #define sv_cmp_static Perl_sv_cmp
45 #define sv_cmp_locale_static Perl_sv_cmp_locale
54 cxix = dopoptosub(cxstack_ix);
58 switch (cxstack[cxix].blk_gimme) {
75 /* XXXX Should store the old value to allow for tie/overload - and
76 restore in regcomp, where marked with XXXX. */
84 register PMOP *pm = (PMOP*)cLOGOP->op_other;
88 MAGIC *mg = Null(MAGIC*);
92 SV *sv = SvRV(tmpstr);
94 mg = mg_find(sv, 'r');
97 regexp *re = (regexp *)mg->mg_obj;
98 ReREFCNT_dec(pm->op_pmregexp);
99 pm->op_pmregexp = ReREFCNT_inc(re);
102 t = SvPV(tmpstr, len);
104 /* Check against the last compiled regexp. */
105 if (!pm->op_pmregexp || !pm->op_pmregexp->precomp ||
106 pm->op_pmregexp->prelen != len ||
107 memNE(pm->op_pmregexp->precomp, t, len))
109 if (pm->op_pmregexp) {
110 ReREFCNT_dec(pm->op_pmregexp);
111 pm->op_pmregexp = Null(REGEXP*); /* crucial if regcomp aborts */
113 if (PL_op->op_flags & OPf_SPECIAL)
114 PL_reginterp_cnt = I32_MAX; /* Mark as safe. */
116 pm->op_pmflags = pm->op_pmpermflags; /* reset case sensitivity */
117 pm->op_pmregexp = CALLREGCOMP(aTHX_ t, t + len, pm);
118 PL_reginterp_cnt = 0; /* XXXX Be extra paranoid - needed
119 inside tie/overload accessors. */
123 #ifndef INCOMPLETE_TAINTS
126 pm->op_pmdynflags |= PMdf_TAINTED;
128 pm->op_pmdynflags &= ~PMdf_TAINTED;
132 if (!pm->op_pmregexp->prelen && PL_curpm)
134 else if (strEQ("\\s+", pm->op_pmregexp->precomp))
135 pm->op_pmflags |= PMf_WHITE;
137 if (pm->op_pmflags & PMf_KEEP) {
138 pm->op_private &= ~OPpRUNTIME; /* no point compiling again */
139 cLOGOP->op_first->op_next = PL_op->op_next;
147 register PMOP *pm = (PMOP*) cLOGOP->op_other;
148 register PERL_CONTEXT *cx = &cxstack[cxstack_ix];
149 register SV *dstr = cx->sb_dstr;
150 register char *s = cx->sb_s;
151 register char *m = cx->sb_m;
152 char *orig = cx->sb_orig;
153 register REGEXP *rx = cx->sb_rx;
155 rxres_restore(&cx->sb_rxres, rx);
157 if (cx->sb_iters++) {
158 if (cx->sb_iters > cx->sb_maxiters)
159 DIE(aTHX_ "Substitution loop");
161 if (!(cx->sb_rxtainted & 2) && SvTAINTED(TOPs))
162 cx->sb_rxtainted |= 2;
163 sv_catsv(dstr, POPs);
166 if (cx->sb_once || !CALLREGEXEC(aTHX_ rx, s, cx->sb_strend, orig,
167 s == m, cx->sb_targ, NULL,
168 ((cx->sb_rflags & REXEC_COPY_STR)
169 ? (REXEC_IGNOREPOS|REXEC_NOT_FIRST)
170 : (REXEC_COPY_STR|REXEC_IGNOREPOS|REXEC_NOT_FIRST))))
172 SV *targ = cx->sb_targ;
173 sv_catpvn(dstr, s, cx->sb_strend - s);
175 cx->sb_rxtainted |= RX_MATCH_TAINTED(rx);
177 (void)SvOOK_off(targ);
178 Safefree(SvPVX(targ));
179 SvPVX(targ) = SvPVX(dstr);
180 SvCUR_set(targ, SvCUR(dstr));
181 SvLEN_set(targ, SvLEN(dstr));
185 TAINT_IF(cx->sb_rxtainted & 1);
186 PUSHs(sv_2mortal(newSViv((I32)cx->sb_iters - 1)));
188 (void)SvPOK_only(targ);
189 TAINT_IF(cx->sb_rxtainted);
193 LEAVE_SCOPE(cx->sb_oldsave);
195 RETURNOP(pm->op_next);
198 if (RX_MATCH_COPIED(rx) && rx->subbeg != orig) {
201 cx->sb_orig = orig = rx->subbeg;
203 cx->sb_strend = s + (cx->sb_strend - m);
205 cx->sb_m = m = rx->startp[0] + orig;
206 sv_catpvn(dstr, s, m-s);
207 cx->sb_s = rx->endp[0] + orig;
208 cx->sb_rxtainted |= RX_MATCH_TAINTED(rx);
209 rxres_save(&cx->sb_rxres, rx);
210 RETURNOP(pm->op_pmreplstart);
214 Perl_rxres_save(pTHX_ void **rsp, REGEXP *rx)
219 if (!p || p[1] < rx->nparens) {
220 i = 6 + rx->nparens * 2;
228 *p++ = PTR2UV(RX_MATCH_COPIED(rx) ? rx->subbeg : Nullch);
229 RX_MATCH_COPIED_off(rx);
233 *p++ = PTR2UV(rx->subbeg);
234 *p++ = (UV)rx->sublen;
235 for (i = 0; i <= rx->nparens; ++i) {
236 *p++ = (UV)rx->startp[i];
237 *p++ = (UV)rx->endp[i];
242 Perl_rxres_restore(pTHX_ void **rsp, REGEXP *rx)
247 if (RX_MATCH_COPIED(rx))
248 Safefree(rx->subbeg);
249 RX_MATCH_COPIED_set(rx, *p);
254 rx->subbeg = INT2PTR(char*,*p++);
255 rx->sublen = (I32)(*p++);
256 for (i = 0; i <= rx->nparens; ++i) {
257 rx->startp[i] = (I32)(*p++);
258 rx->endp[i] = (I32)(*p++);
263 Perl_rxres_free(pTHX_ void **rsp)
268 Safefree(INT2PTR(char*,*p));
276 djSP; dMARK; dORIGMARK;
277 register SV *tmpForm = *++MARK;
289 bool chopspace = (strchr(PL_chopset, ' ') != Nullch);
295 STRLEN fudge = SvCUR(tmpForm) * (IN_UTF8 ? 3 : 1) + 1;
297 if (!SvMAGICAL(tmpForm) || !SvCOMPILED(tmpForm)) {
298 SvREADONLY_off(tmpForm);
299 doparseform(tmpForm);
302 SvPV_force(PL_formtarget, len);
303 t = SvGROW(PL_formtarget, len + fudge + 1); /* XXX SvCUR bad */
305 f = SvPV(tmpForm, len);
306 /* need to jump to the next word */
307 s = f + len + WORD_ALIGN - SvCUR(tmpForm) % WORD_ALIGN;
316 case FF_LITERAL: arg = fpc[1]; name = "LITERAL"; break;
317 case FF_BLANK: arg = fpc[1]; name = "BLANK"; break;
318 case FF_SKIP: arg = fpc[1]; name = "SKIP"; break;
319 case FF_FETCH: arg = fpc[1]; name = "FETCH"; break;
320 case FF_DECIMAL: arg = fpc[1]; name = "DECIMAL"; break;
322 case FF_CHECKNL: name = "CHECKNL"; break;
323 case FF_CHECKCHOP: name = "CHECKCHOP"; break;
324 case FF_SPACE: name = "SPACE"; break;
325 case FF_HALFSPACE: name = "HALFSPACE"; break;
326 case FF_ITEM: name = "ITEM"; break;
327 case FF_CHOP: name = "CHOP"; break;
328 case FF_LINEGLOB: name = "LINEGLOB"; break;
329 case FF_NEWLINE: name = "NEWLINE"; break;
330 case FF_MORE: name = "MORE"; break;
331 case FF_LINEMARK: name = "LINEMARK"; break;
332 case FF_END: name = "END"; break;
335 PerlIO_printf(Perl_debug_log, "%-16s%ld\n", name, (long) arg);
337 PerlIO_printf(Perl_debug_log, "%-16s\n", name);
365 if (ckWARN(WARN_SYNTAX))
366 Perl_warner(aTHX_ WARN_SYNTAX, "Not enough format arguments");
371 item = s = SvPV(sv, len);
374 itemsize = sv_len_utf8(sv);
375 if (itemsize != len) {
377 if (itemsize > fieldsize) {
378 itemsize = fieldsize;
379 itembytes = itemsize;
380 sv_pos_u2b(sv, &itembytes, 0);
384 send = chophere = s + itembytes;
393 sv_pos_b2u(sv, &itemsize);
397 if (itemsize > fieldsize)
398 itemsize = fieldsize;
399 send = chophere = s + itemsize;
411 item = s = SvPV(sv, len);
414 itemsize = sv_len_utf8(sv);
415 if (itemsize != len) {
417 if (itemsize <= fieldsize) {
418 send = chophere = s + itemsize;
429 itemsize = fieldsize;
430 itembytes = itemsize;
431 sv_pos_u2b(sv, &itembytes, 0);
432 send = chophere = s + itembytes;
433 while (s < send || (s == send && isSPACE(*s))) {
443 if (strchr(PL_chopset, *s))
448 itemsize = chophere - item;
449 sv_pos_b2u(sv, &itemsize);
454 if (itemsize <= fieldsize) {
455 send = chophere = s + itemsize;
466 itemsize = fieldsize;
467 send = chophere = s + itemsize;
468 while (s < send || (s == send && isSPACE(*s))) {
478 if (strchr(PL_chopset, *s))
483 itemsize = chophere - item;
488 arg = fieldsize - itemsize;
497 arg = fieldsize - itemsize;
512 switch (UTF8SKIP(s)) {
523 if ( !((*t++ = *s++) & ~31) )
531 int ch = *t++ = *s++;
534 if ( !((*t++ = *s++) & ~31) )
543 while (*s && isSPACE(*s))
550 item = s = SvPV(sv, len);
563 SvCUR_set(PL_formtarget, t - SvPVX(PL_formtarget));
564 sv_catpvn(PL_formtarget, item, itemsize);
565 SvGROW(PL_formtarget, SvCUR(PL_formtarget) + fudge + 1);
566 t = SvPVX(PL_formtarget) + SvCUR(PL_formtarget);
571 /* If the field is marked with ^ and the value is undefined,
574 if ((arg & 512) && !SvOK(sv)) {
582 /* Formats aren't yet marked for locales, so assume "yes". */
584 RESTORE_NUMERIC_LOCAL();
585 #if defined(USE_LONG_DOUBLE)
587 sprintf(t, "%#*.*" PERL_PRIfldbl,
588 (int) fieldsize, (int) arg & 255, value);
590 sprintf(t, "%*.0" PERL_PRIfldbl, (int) fieldsize, value);
595 (int) fieldsize, (int) arg & 255, value);
598 (int) fieldsize, value);
601 RESTORE_NUMERIC_STANDARD();
608 while (t-- > linemark && *t == ' ') ;
616 if (arg) { /* repeat until fields exhausted? */
618 SvCUR_set(PL_formtarget, t - SvPVX(PL_formtarget));
619 lines += FmLINES(PL_formtarget);
622 if (strnEQ(linemark, linemark - arg, arg))
623 DIE(aTHX_ "Runaway format");
625 FmLINES(PL_formtarget) = lines;
627 RETURNOP(cLISTOP->op_first);
640 while (*s && isSPACE(*s) && s < send)
644 arg = fieldsize - itemsize;
651 if (strnEQ(s," ",3)) {
652 while (s > SvPVX(PL_formtarget) && isSPACE(s[-1]))
663 SvCUR_set(PL_formtarget, t - SvPVX(PL_formtarget));
664 FmLINES(PL_formtarget) += lines;
676 if (PL_stack_base + *PL_markstack_ptr == SP) {
678 if (GIMME_V == G_SCALAR)
679 XPUSHs(sv_2mortal(newSViv(0)));
680 RETURNOP(PL_op->op_next->op_next);
682 PL_stack_sp = PL_stack_base + *PL_markstack_ptr + 1;
683 pp_pushmark(); /* push dst */
684 pp_pushmark(); /* push src */
685 ENTER; /* enter outer scope */
688 /* SAVE_DEFSV does *not* suffice here for USE_THREADS */
690 ENTER; /* enter inner scope */
693 src = PL_stack_base[*PL_markstack_ptr];
698 if (PL_op->op_type == OP_MAPSTART)
699 pp_pushmark(); /* push top */
700 return ((LOGOP*)PL_op->op_next)->op_other;
705 DIE(aTHX_ "panic: mapstart"); /* uses grepstart */
711 I32 diff = (SP - PL_stack_base) - *PL_markstack_ptr;
717 ++PL_markstack_ptr[-1];
719 if (diff > PL_markstack_ptr[-1] - PL_markstack_ptr[-2]) {
720 shift = diff - (PL_markstack_ptr[-1] - PL_markstack_ptr[-2]);
721 count = (SP - PL_stack_base) - PL_markstack_ptr[-1] + 2;
726 PL_markstack_ptr[-1] += shift;
727 *PL_markstack_ptr += shift;
731 dst = PL_stack_base + (PL_markstack_ptr[-2] += diff) - 1;
734 *dst-- = SvTEMP(TOPs) ? POPs : sv_mortalcopy(POPs);
736 LEAVE; /* exit inner scope */
739 if (PL_markstack_ptr[-1] > *PL_markstack_ptr) {
743 (void)POPMARK; /* pop top */
744 LEAVE; /* exit outer scope */
745 (void)POPMARK; /* pop src */
746 items = --*PL_markstack_ptr - PL_markstack_ptr[-1];
747 (void)POPMARK; /* pop dst */
748 SP = PL_stack_base + POPMARK; /* pop original mark */
749 if (gimme == G_SCALAR) {
753 else if (gimme == G_ARRAY)
760 ENTER; /* enter inner scope */
763 src = PL_stack_base[PL_markstack_ptr[-1]];
767 RETURNOP(cLOGOP->op_other);
773 djSP; dMARK; dORIGMARK;
775 SV **myorigmark = ORIGMARK;
781 OP* nextop = PL_op->op_next;
783 bool hasargs = FALSE;
786 if (gimme != G_ARRAY) {
792 SAVEVPTR(PL_sortcop);
793 if (PL_op->op_flags & OPf_STACKED) {
794 if (PL_op->op_flags & OPf_SPECIAL) {
795 OP *kid = cLISTOP->op_first->op_sibling; /* pass pushmark */
796 kid = kUNOP->op_first; /* pass rv2gv */
797 kid = kUNOP->op_first; /* pass leave */
798 PL_sortcop = kid->op_next;
799 stash = CopSTASH(PL_curcop);
802 cv = sv_2cv(*++MARK, &stash, &gv, 0);
803 if (cv && SvPOK(cv)) {
805 char *proto = SvPV((SV*)cv, n_a);
806 if (proto && strEQ(proto, "$$")) {
810 if (!(cv && CvROOT(cv))) {
811 if (cv && CvXSUB(cv)) {
815 SV *tmpstr = sv_newmortal();
816 gv_efullname3(tmpstr, gv, Nullch);
817 DIE(aTHX_ "Undefined sort subroutine \"%s\" called",
821 DIE(aTHX_ "Undefined subroutine in sort");
826 PL_sortcop = (OP*)cv;
828 PL_sortcop = CvSTART(cv);
829 SAVEVPTR(CvROOT(cv)->op_ppaddr);
830 CvROOT(cv)->op_ppaddr = PL_ppaddr[OP_NULL];
833 PL_curpad = AvARRAY((AV*)AvARRAY(CvPADLIST(cv))[1]);
839 stash = CopSTASH(PL_curcop);
843 while (MARK < SP) { /* This may or may not shift down one here. */
845 if (*up = *++MARK) { /* Weed out nulls. */
847 if (!PL_sortcop && !SvPOK(*up)) {
852 (void)sv_2pv(*up, &n_a);
857 max = --up - myorigmark;
862 bool oldcatch = CATCH_GET;
868 PUSHSTACKi(PERLSI_SORT);
869 if (PL_sortstash != stash) {
870 PL_firstgv = gv_fetchpv("a", TRUE, SVt_PV);
871 PL_secondgv = gv_fetchpv("b", TRUE, SVt_PV);
872 PL_sortstash = stash;
875 SAVESPTR(GvSV(PL_firstgv));
876 SAVESPTR(GvSV(PL_secondgv));
878 PUSHBLOCK(cx, CXt_NULL, PL_stack_base);
879 if (!(PL_op->op_flags & OPf_SPECIAL)) {
880 cx->cx_type = CXt_SUB;
881 cx->blk_gimme = G_SCALAR;
884 (void)SvREFCNT_inc(cv); /* in preparation for POPSUB */
886 PL_sortcxix = cxstack_ix;
888 if (hasargs && !is_xsub) {
889 /* This is mostly copied from pp_entersub */
890 AV *av = (AV*)PL_curpad[0];
893 cx->blk_sub.savearray = GvAV(PL_defgv);
894 GvAV(PL_defgv) = (AV*)SvREFCNT_inc(av);
895 #endif /* USE_THREADS */
896 cx->blk_sub.argarray = av;
898 qsortsv((myorigmark+1), max,
899 is_xsub ? sortcv_xsub : hasargs ? sortcv_stacked : sortcv);
901 POPBLOCK(cx,PL_curpm);
909 MEXTEND(SP, 20); /* Can't afford stack realloc on signal. */
910 qsortsv(ORIGMARK+1, max,
911 (PL_op->op_private & OPpSORT_NUMERIC)
912 ? ( (PL_op->op_private & OPpSORT_INTEGER)
913 ? ( overloading ? amagic_i_ncmp : sv_i_ncmp)
914 : ( overloading ? amagic_ncmp : sv_ncmp))
915 : ( (PL_op->op_private & OPpLOCALE)
918 : sv_cmp_locale_static)
919 : ( overloading ? amagic_cmp : sv_cmp_static)));
920 if (PL_op->op_private & OPpSORT_REVERSE) {
922 SV **q = ORIGMARK+max;
932 PL_stack_sp = ORIGMARK + max;
940 if (GIMME == G_ARRAY)
942 if (SvTRUEx(PAD_SV(PL_op->op_targ)))
943 return cLOGOP->op_other;
952 if (GIMME == G_ARRAY) {
953 RETURNOP(((LOGOP*)cUNOP->op_first)->op_other);
957 SV *targ = PAD_SV(PL_op->op_targ);
959 if ((PL_op->op_private & OPpFLIP_LINENUM)
960 ? (PL_last_in_gv && SvIV(sv) == (IV)IoLINES(GvIOp(PL_last_in_gv)))
962 sv_setiv(PAD_SV(cUNOP->op_first->op_targ), 1);
963 if (PL_op->op_flags & OPf_SPECIAL) {
971 RETURNOP(((LOGOP*)cUNOP->op_first)->op_other);
984 if (GIMME == G_ARRAY) {
990 if (SvGMAGICAL(left))
992 if (SvGMAGICAL(right))
995 if (SvNIOKp(left) || !SvPOKp(left) ||
996 (looks_like_number(left) && *SvPVX(left) != '0') )
998 if (SvNV(left) < IV_MIN || SvNV(right) > IV_MAX)
999 DIE(aTHX_ "Range iterator outside integer range");
1010 sv = sv_2mortal(newSViv(i++));
1015 SV *final = sv_mortalcopy(right);
1017 char *tmps = SvPV(final, len);
1019 sv = sv_mortalcopy(left);
1021 while (!SvNIOKp(sv) && SvCUR(sv) <= len) {
1023 if (strEQ(SvPVX(sv),tmps))
1025 sv = sv_2mortal(newSVsv(sv));
1032 SV *targ = PAD_SV(cUNOP->op_first->op_targ);
1034 if ((PL_op->op_private & OPpFLIP_LINENUM)
1035 ? (PL_last_in_gv && SvIV(sv) == (IV)IoLINES(GvIOp(PL_last_in_gv)))
1037 sv_setiv(PAD_SV(((UNOP*)cUNOP->op_first)->op_first->op_targ), 0);
1038 sv_catpv(targ, "E0");
1049 S_dopoptolabel(pTHX_ char *label)
1053 register PERL_CONTEXT *cx;
1055 for (i = cxstack_ix; i >= 0; i--) {
1057 switch (CxTYPE(cx)) {
1059 if (ckWARN(WARN_UNSAFE))
1060 Perl_warner(aTHX_ WARN_UNSAFE, "Exiting substitution via %s",
1061 PL_op_name[PL_op->op_type]);
1064 if (ckWARN(WARN_UNSAFE))
1065 Perl_warner(aTHX_ WARN_UNSAFE, "Exiting subroutine via %s",
1066 PL_op_name[PL_op->op_type]);
1069 if (ckWARN(WARN_UNSAFE))
1070 Perl_warner(aTHX_ WARN_UNSAFE, "Exiting format via %s",
1071 PL_op_name[PL_op->op_type]);
1074 if (ckWARN(WARN_UNSAFE))
1075 Perl_warner(aTHX_ WARN_UNSAFE, "Exiting eval via %s",
1076 PL_op_name[PL_op->op_type]);
1079 if (ckWARN(WARN_UNSAFE))
1080 Perl_warner(aTHX_ WARN_UNSAFE, "Exiting pseudo-block via %s",
1081 PL_op_name[PL_op->op_type]);
1084 if (!cx->blk_loop.label ||
1085 strNE(label, cx->blk_loop.label) ) {
1086 DEBUG_l(Perl_deb(aTHX_ "(Skipping label #%ld %s)\n",
1087 (long)i, cx->blk_loop.label));
1090 DEBUG_l( Perl_deb(aTHX_ "(Found label #%ld %s)\n", (long)i, label));
1098 Perl_dowantarray(pTHX)
1100 I32 gimme = block_gimme();
1101 return (gimme == G_VOID) ? G_SCALAR : gimme;
1105 Perl_block_gimme(pTHX)
1110 cxix = dopoptosub(cxstack_ix);
1114 switch (cxstack[cxix].blk_gimme) {
1122 Perl_croak(aTHX_ "panic: bad gimme: %d\n", cxstack[cxix].blk_gimme);
1129 S_dopoptosub(pTHX_ I32 startingblock)
1132 return dopoptosub_at(cxstack, startingblock);
1136 S_dopoptosub_at(pTHX_ PERL_CONTEXT *cxstk, I32 startingblock)
1140 register PERL_CONTEXT *cx;
1141 for (i = startingblock; i >= 0; i--) {
1143 switch (CxTYPE(cx)) {
1149 DEBUG_l( Perl_deb(aTHX_ "(Found sub #%ld)\n", (long)i));
1157 S_dopoptoeval(pTHX_ I32 startingblock)
1161 register PERL_CONTEXT *cx;
1162 for (i = startingblock; i >= 0; i--) {
1164 switch (CxTYPE(cx)) {
1168 DEBUG_l( Perl_deb(aTHX_ "(Found eval #%ld)\n", (long)i));
1176 S_dopoptoloop(pTHX_ I32 startingblock)
1180 register PERL_CONTEXT *cx;
1181 for (i = startingblock; i >= 0; i--) {
1183 switch (CxTYPE(cx)) {
1185 if (ckWARN(WARN_UNSAFE))
1186 Perl_warner(aTHX_ WARN_UNSAFE, "Exiting substitution via %s",
1187 PL_op_name[PL_op->op_type]);
1190 if (ckWARN(WARN_UNSAFE))
1191 Perl_warner(aTHX_ WARN_UNSAFE, "Exiting subroutine via %s",
1192 PL_op_name[PL_op->op_type]);
1195 if (ckWARN(WARN_UNSAFE))
1196 Perl_warner(aTHX_ WARN_UNSAFE, "Exiting format via %s",
1197 PL_op_name[PL_op->op_type]);
1200 if (ckWARN(WARN_UNSAFE))
1201 Perl_warner(aTHX_ WARN_UNSAFE, "Exiting eval via %s",
1202 PL_op_name[PL_op->op_type]);
1205 if (ckWARN(WARN_UNSAFE))
1206 Perl_warner(aTHX_ WARN_UNSAFE, "Exiting pseudo-block via %s",
1207 PL_op_name[PL_op->op_type]);
1210 DEBUG_l( Perl_deb(aTHX_ "(Found loop #%ld)\n", (long)i));
1218 Perl_dounwind(pTHX_ I32 cxix)
1221 register PERL_CONTEXT *cx;
1225 while (cxstack_ix > cxix) {
1227 cx = &cxstack[cxstack_ix];
1228 DEBUG_l(PerlIO_printf(Perl_debug_log, "Unwinding block %ld, type %s\n",
1229 (long) cxstack_ix, PL_block_type[CxTYPE(cx)]));
1230 /* Note: we don't need to restore the base context info till the end. */
1231 switch (CxTYPE(cx)) {
1234 continue; /* not break */
1256 * Closures mentioned at top level of eval cannot be referenced
1257 * again, and their presence indirectly causes a memory leak.
1258 * (Note that the fact that compcv and friends are still set here
1259 * is, AFAIK, an accident.) --Chip
1261 * XXX need to get comppad et al from eval's cv rather than
1262 * relying on the incidental global values.
1265 S_free_closures(pTHX)
1268 SV **svp = AvARRAY(PL_comppad_name);
1270 for (ix = AvFILLp(PL_comppad_name); ix >= 0; ix--) {
1272 if (sv && sv != &PL_sv_undef && *SvPVX(sv) == '&') {
1274 svp[ix] = &PL_sv_undef;
1278 SvREFCNT_dec(CvOUTSIDE(sv));
1279 CvOUTSIDE(sv) = Nullcv;
1292 Perl_qerror(pTHX_ SV *err)
1295 sv_catsv(ERRSV, err);
1297 sv_catsv(PL_errors, err);
1299 Perl_warn(aTHX_ "%_", err);
1304 Perl_die_where(pTHX_ char *message, STRLEN msglen)
1310 register PERL_CONTEXT *cx;
1315 if (PL_in_eval & EVAL_KEEPERR) {
1316 static char prefix[] = "\t(in cleanup) ";
1321 else if (SvCUR(err) >= sizeof(prefix)+msglen-1) {
1324 if (*e != *message || strNE(e,message))
1328 SvGROW(err, SvCUR(err)+sizeof(prefix)+msglen);
1329 sv_catpvn(err, prefix, sizeof(prefix)-1);
1330 sv_catpvn(err, message, msglen);
1331 if (ckWARN(WARN_UNSAFE)) {
1332 STRLEN start = SvCUR(err)-msglen-sizeof(prefix)+1;
1333 Perl_warner(aTHX_ WARN_UNSAFE, SvPVX(err)+start);
1338 sv_setpvn(ERRSV, message, msglen);
1341 message = SvPVx(ERRSV, msglen);
1343 while ((cxix = dopoptoeval(cxstack_ix)) < 0
1344 && PL_curstackinfo->si_prev)
1353 if (cxix < cxstack_ix)
1356 POPBLOCK(cx,PL_curpm);
1357 if (CxTYPE(cx) != CXt_EVAL) {
1358 PerlIO_write(Perl_error_log, "panic: die ", 11);
1359 PerlIO_write(Perl_error_log, message, msglen);
1364 if (gimme == G_SCALAR)
1365 *++newsp = &PL_sv_undef;
1366 PL_stack_sp = newsp;
1370 if (optype == OP_REQUIRE) {
1371 char* msg = SvPVx(ERRSV, n_a);
1372 DIE(aTHX_ "%sCompilation failed in require",
1373 *msg ? msg : "Unknown error\n");
1375 return pop_return();
1379 message = SvPVx(ERRSV, msglen);
1382 /* SFIO can really mess with your errno */
1385 PerlIO *serr = Perl_error_log;
1387 PerlIO_write(serr, message, msglen);
1388 (void)PerlIO_flush(serr);
1401 if (SvTRUE(left) != SvTRUE(right))
1413 RETURNOP(cLOGOP->op_other);
1422 RETURNOP(cLOGOP->op_other);
1428 register I32 cxix = dopoptosub(cxstack_ix);
1429 register PERL_CONTEXT *cx;
1430 register PERL_CONTEXT *ccstack = cxstack;
1431 PERL_SI *top_si = PL_curstackinfo;
1442 /* we may be in a higher stacklevel, so dig down deeper */
1443 while (cxix < 0 && top_si->si_type != PERLSI_MAIN) {
1444 top_si = top_si->si_prev;
1445 ccstack = top_si->si_cxstack;
1446 cxix = dopoptosub_at(ccstack, top_si->si_cxix);
1449 if (GIMME != G_ARRAY)
1453 if (PL_DBsub && cxix >= 0 &&
1454 ccstack[cxix].blk_sub.cv == GvCV(PL_DBsub))
1458 cxix = dopoptosub_at(ccstack, cxix - 1);
1461 cx = &ccstack[cxix];
1462 if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
1463 dbcxix = dopoptosub_at(ccstack, cxix - 1);
1464 /* We expect that ccstack[dbcxix] is CXt_SUB, anyway, the
1465 field below is defined for any cx. */
1466 if (PL_DBsub && dbcxix >= 0 && ccstack[dbcxix].blk_sub.cv == GvCV(PL_DBsub))
1467 cx = &ccstack[dbcxix];
1470 stashname = CopSTASHPV(cx->blk_oldcop);
1471 if (GIMME != G_ARRAY) {
1473 PUSHs(&PL_sv_undef);
1476 sv_setpv(TARG, stashname);
1483 PUSHs(&PL_sv_undef);
1485 PUSHs(sv_2mortal(newSVpv(stashname, 0)));
1486 PUSHs(sv_2mortal(newSVpv(CopFILE(cx->blk_oldcop), 0)));
1487 PUSHs(sv_2mortal(newSViv((I32)CopLINE(cx->blk_oldcop))));
1490 if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
1491 /* So is ccstack[dbcxix]. */
1493 gv_efullname3(sv, CvGV(ccstack[cxix].blk_sub.cv), Nullch);
1494 PUSHs(sv_2mortal(sv));
1495 PUSHs(sv_2mortal(newSViv((I32)cx->blk_sub.hasargs)));
1498 PUSHs(sv_2mortal(newSVpvn("(eval)",6)));
1499 PUSHs(sv_2mortal(newSViv(0)));
1501 gimme = (I32)cx->blk_gimme;
1502 if (gimme == G_VOID)
1503 PUSHs(&PL_sv_undef);
1505 PUSHs(sv_2mortal(newSViv(gimme & G_ARRAY)));
1506 if (CxTYPE(cx) == CXt_EVAL) {
1507 if (cx->blk_eval.old_op_type == OP_ENTEREVAL) {
1508 PUSHs(cx->blk_eval.cur_text);
1511 else if (cx->blk_eval.old_name) { /* Try blocks have old_name == 0. */
1512 /* Require, put the name. */
1513 PUSHs(sv_2mortal(newSVpv(cx->blk_eval.old_name, 0)));
1518 PUSHs(&PL_sv_undef);
1519 PUSHs(&PL_sv_undef);
1521 if (CxTYPE(cx) == CXt_SUB && cx->blk_sub.hasargs
1522 && CopSTASH_eq(PL_curcop, PL_debstash))
1524 AV *ary = cx->blk_sub.argarray;
1525 int off = AvARRAY(ary) - AvALLOC(ary);
1529 PL_dbargs = GvAV(gv_AVadd(tmpgv = gv_fetchpv("DB::args", TRUE,
1532 AvREAL_off(PL_dbargs); /* XXX Should be REIFY */
1535 if (AvMAX(PL_dbargs) < AvFILLp(ary) + off)
1536 av_extend(PL_dbargs, AvFILLp(ary) + off);
1537 Copy(AvALLOC(ary), AvARRAY(PL_dbargs), AvFILLp(ary) + 1 + off, SV*);
1538 AvFILLp(PL_dbargs) = AvFILLp(ary) + off;
1540 /* XXX only hints propagated via op_private are currently
1541 * visible (others are not easily accessible, since they
1542 * use the global PL_hints) */
1543 PUSHs(sv_2mortal(newSViv((I32)cx->blk_oldcop->op_private &
1544 HINT_PRIVATE_MASK)));
1558 sv_reset(tmps, CopSTASH(PL_curcop));
1570 PL_curcop = (COP*)PL_op;
1571 TAINT_NOT; /* Each statement is presumed innocent */
1572 PL_stack_sp = PL_stack_base + cxstack[cxstack_ix].blk_oldsp;
1575 if (PL_op->op_private || SvIV(PL_DBsingle) || SvIV(PL_DBsignal) || SvIV(PL_DBtrace))
1579 register PERL_CONTEXT *cx;
1580 I32 gimme = G_ARRAY;
1587 DIE(aTHX_ "No DB::DB routine defined");
1589 if (CvDEPTH(cv) >= 1 && !(PL_debug & (1<<30))) /* don't do recursive DB::DB call */
1601 push_return(PL_op->op_next);
1602 PUSHBLOCK(cx, CXt_SUB, SP);
1605 (void)SvREFCNT_inc(cv);
1606 SAVEVPTR(PL_curpad);
1607 PL_curpad = AvARRAY((AV*)*av_fetch(CvPADLIST(cv),1,FALSE));
1608 RETURNOP(CvSTART(cv));
1622 register PERL_CONTEXT *cx;
1623 I32 gimme = GIMME_V;
1625 U32 cxtype = CXt_LOOP;
1634 if (PL_op->op_flags & OPf_SPECIAL) {
1636 svp = &THREADSV(PL_op->op_targ); /* per-thread variable */
1637 SAVEGENERICSV(*svp);
1641 #endif /* USE_THREADS */
1642 if (PL_op->op_targ) {
1643 svp = &PL_curpad[PL_op->op_targ]; /* "my" variable */
1646 iterdata = (void*)PL_op->op_targ;
1647 cxtype |= CXp_PADVAR;
1652 svp = &GvSV(gv); /* symbol table variable */
1653 SAVEGENERICSV(*svp);
1656 iterdata = (void*)gv;
1662 PUSHBLOCK(cx, cxtype, SP);
1664 PUSHLOOP(cx, iterdata, MARK);
1666 PUSHLOOP(cx, svp, MARK);
1668 if (PL_op->op_flags & OPf_STACKED) {
1669 cx->blk_loop.iterary = (AV*)SvREFCNT_inc(POPs);
1670 if (SvTYPE(cx->blk_loop.iterary) != SVt_PVAV) {
1672 if (SvNIOKp(sv) || !SvPOKp(sv) ||
1673 (looks_like_number(sv) && *SvPVX(sv) != '0')) {
1674 if (SvNV(sv) < IV_MIN ||
1675 SvNV((SV*)cx->blk_loop.iterary) >= IV_MAX)
1676 DIE(aTHX_ "Range iterator outside integer range");
1677 cx->blk_loop.iterix = SvIV(sv);
1678 cx->blk_loop.itermax = SvIV((SV*)cx->blk_loop.iterary);
1681 cx->blk_loop.iterlval = newSVsv(sv);
1685 cx->blk_loop.iterary = PL_curstack;
1686 AvFILLp(PL_curstack) = SP - PL_stack_base;
1687 cx->blk_loop.iterix = MARK - PL_stack_base;
1696 register PERL_CONTEXT *cx;
1697 I32 gimme = GIMME_V;
1703 PUSHBLOCK(cx, CXt_LOOP, SP);
1704 PUSHLOOP(cx, 0, SP);
1712 register PERL_CONTEXT *cx;
1720 newsp = PL_stack_base + cx->blk_loop.resetsp;
1723 if (gimme == G_VOID)
1725 else if (gimme == G_SCALAR) {
1727 *++newsp = sv_mortalcopy(*SP);
1729 *++newsp = &PL_sv_undef;
1733 *++newsp = sv_mortalcopy(*++mark);
1734 TAINT_NOT; /* Each item is independent */
1740 POPLOOP(cx); /* Stack values are safe: release loop vars ... */
1741 PL_curpm = newpm; /* ... and pop $1 et al */
1753 register PERL_CONTEXT *cx;
1754 bool popsub2 = FALSE;
1761 if (PL_curstackinfo->si_type == PERLSI_SORT) {
1762 if (cxstack_ix == PL_sortcxix
1763 || dopoptosub(cxstack_ix) <= PL_sortcxix)
1765 if (cxstack_ix > PL_sortcxix)
1766 dounwind(PL_sortcxix);
1767 AvARRAY(PL_curstack)[1] = *SP;
1768 PL_stack_sp = PL_stack_base + 1;
1773 cxix = dopoptosub(cxstack_ix);
1775 DIE(aTHX_ "Can't return outside a subroutine");
1776 if (cxix < cxstack_ix)
1780 switch (CxTYPE(cx)) {
1786 if (AvFILLp(PL_comppad_name) >= 0)
1789 if (optype == OP_REQUIRE &&
1790 (MARK == SP || (gimme == G_SCALAR && !SvTRUE(*SP))) )
1792 /* Unassume the success we assumed earlier. */
1793 char *name = cx->blk_eval.old_name;
1794 (void)hv_delete(GvHVn(PL_incgv), name, strlen(name), G_DISCARD);
1795 DIE(aTHX_ "%s did not return a true value", name);
1802 DIE(aTHX_ "panic: return");
1806 if (gimme == G_SCALAR) {
1809 if (cx->blk_sub.cv && CvDEPTH(cx->blk_sub.cv) > 1) {
1811 *++newsp = SvREFCNT_inc(*SP);
1816 *++newsp = sv_mortalcopy(*SP);
1819 *++newsp = (SvTEMP(*SP)) ? *SP : sv_mortalcopy(*SP);
1821 *++newsp = sv_mortalcopy(*SP);
1823 *++newsp = &PL_sv_undef;
1825 else if (gimme == G_ARRAY) {
1826 while (++MARK <= SP) {
1827 *++newsp = (popsub2 && SvTEMP(*MARK))
1828 ? *MARK : sv_mortalcopy(*MARK);
1829 TAINT_NOT; /* Each item is independent */
1832 PL_stack_sp = newsp;
1834 /* Stack values are safe: */
1836 POPSUB(cx,sv); /* release CV and @_ ... */
1840 PL_curpm = newpm; /* ... and pop $1 et al */
1844 return pop_return();
1851 register PERL_CONTEXT *cx;
1861 if (PL_op->op_flags & OPf_SPECIAL) {
1862 cxix = dopoptoloop(cxstack_ix);
1864 DIE(aTHX_ "Can't \"last\" outside a loop block");
1867 cxix = dopoptolabel(cPVOP->op_pv);
1869 DIE(aTHX_ "Label not found for \"last %s\"", cPVOP->op_pv);
1871 if (cxix < cxstack_ix)
1876 switch (CxTYPE(cx)) {
1879 newsp = PL_stack_base + cx->blk_loop.resetsp;
1880 nextop = cx->blk_loop.last_op->op_next;
1884 nextop = pop_return();
1888 nextop = pop_return();
1892 nextop = pop_return();
1895 DIE(aTHX_ "panic: last");
1899 if (gimme == G_SCALAR) {
1901 *++newsp = ((pop2 == CXt_SUB) && SvTEMP(*SP))
1902 ? *SP : sv_mortalcopy(*SP);
1904 *++newsp = &PL_sv_undef;
1906 else if (gimme == G_ARRAY) {
1907 while (++MARK <= SP) {
1908 *++newsp = ((pop2 == CXt_SUB) && SvTEMP(*MARK))
1909 ? *MARK : sv_mortalcopy(*MARK);
1910 TAINT_NOT; /* Each item is independent */
1916 /* Stack values are safe: */
1919 POPLOOP(cx); /* release loop vars ... */
1923 POPSUB(cx,sv); /* release CV and @_ ... */
1926 PL_curpm = newpm; /* ... and pop $1 et al */
1936 register PERL_CONTEXT *cx;
1939 if (PL_op->op_flags & OPf_SPECIAL) {
1940 cxix = dopoptoloop(cxstack_ix);
1942 DIE(aTHX_ "Can't \"next\" outside a loop block");
1945 cxix = dopoptolabel(cPVOP->op_pv);
1947 DIE(aTHX_ "Label not found for \"next %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.next_op;
1961 register PERL_CONTEXT *cx;
1964 if (PL_op->op_flags & OPf_SPECIAL) {
1965 cxix = dopoptoloop(cxstack_ix);
1967 DIE(aTHX_ "Can't \"redo\" outside a loop block");
1970 cxix = dopoptolabel(cPVOP->op_pv);
1972 DIE(aTHX_ "Label not found for \"redo %s\"", cPVOP->op_pv);
1974 if (cxix < cxstack_ix)
1978 oldsave = PL_scopestack[PL_scopestack_ix - 1];
1979 LEAVE_SCOPE(oldsave);
1980 return cx->blk_loop.redo_op;
1984 S_dofindlabel(pTHX_ OP *o, char *label, OP **opstack, OP **oplimit)
1988 static char too_deep[] = "Target of goto is too deeply nested";
1991 Perl_croak(aTHX_ too_deep);
1992 if (o->op_type == OP_LEAVE ||
1993 o->op_type == OP_SCOPE ||
1994 o->op_type == OP_LEAVELOOP ||
1995 o->op_type == OP_LEAVETRY)
1997 *ops++ = cUNOPo->op_first;
1999 Perl_croak(aTHX_ too_deep);
2002 if (o->op_flags & OPf_KIDS) {
2004 /* First try all the kids at this level, since that's likeliest. */
2005 for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling) {
2006 if ((kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) &&
2007 kCOP->cop_label && strEQ(kCOP->cop_label, label))
2010 for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling) {
2011 if (kid == PL_lastgotoprobe)
2013 if ((kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) &&
2015 (ops[-1]->op_type != OP_NEXTSTATE &&
2016 ops[-1]->op_type != OP_DBSTATE)))
2018 if (o = dofindlabel(kid, label, ops, oplimit))
2037 register PERL_CONTEXT *cx;
2038 #define GOTO_DEPTH 64
2039 OP *enterops[GOTO_DEPTH];
2041 int do_dump = (PL_op->op_type == OP_DUMP);
2042 static char must_have_label[] = "goto must have label";
2045 if (PL_op->op_flags & OPf_STACKED) {
2049 /* This egregious kludge implements goto &subroutine */
2050 if (SvROK(sv) && SvTYPE(SvRV(sv)) == SVt_PVCV) {
2052 register PERL_CONTEXT *cx;
2053 CV* cv = (CV*)SvRV(sv);
2059 if (!CvROOT(cv) && !CvXSUB(cv)) {
2064 /* autoloaded stub? */
2065 if (cv != GvCV(gv) && (cv = GvCV(gv)))
2067 autogv = gv_autoload4(GvSTASH(gv), GvNAME(gv),
2068 GvNAMELEN(gv), FALSE);
2069 if (autogv && (cv = GvCV(autogv)))
2071 tmpstr = sv_newmortal();
2072 gv_efullname3(tmpstr, gv, Nullch);
2073 DIE(aTHX_ "Goto undefined subroutine &%s",SvPVX(tmpstr));
2075 DIE(aTHX_ "Goto undefined subroutine");
2078 /* First do some returnish stuff. */
2079 cxix = dopoptosub(cxstack_ix);
2081 DIE(aTHX_ "Can't goto subroutine outside a subroutine");
2082 if (cxix < cxstack_ix)
2085 if (CxTYPE(cx) == CXt_EVAL && cx->blk_eval.old_op_type == OP_ENTEREVAL)
2086 DIE(aTHX_ "Can't goto subroutine from an eval-string");
2088 if (CxTYPE(cx) == CXt_SUB && cx->blk_sub.hasargs) {
2089 /* put @_ back onto stack */
2090 AV* av = cx->blk_sub.argarray;
2092 items = AvFILLp(av) + 1;
2094 EXTEND(PL_stack_sp, items); /* @_ could have been extended. */
2095 Copy(AvARRAY(av), PL_stack_sp, items, SV*);
2096 PL_stack_sp += items;
2098 SvREFCNT_dec(GvAV(PL_defgv));
2099 GvAV(PL_defgv) = cx->blk_sub.savearray;
2100 #endif /* USE_THREADS */
2101 /* abandon @_ if it got reified */
2103 (void)sv_2mortal((SV*)av); /* delay until return */
2105 av_extend(av, items-1);
2106 AvFLAGS(av) = AVf_REIFY;
2107 PL_curpad[0] = (SV*)(cx->blk_sub.argarray = av);
2110 else if (CvXSUB(cv)) { /* put GvAV(defgv) back onto stack */
2114 av = (AV*)PL_curpad[0];
2116 av = GvAV(PL_defgv);
2118 items = AvFILLp(av) + 1;
2120 EXTEND(PL_stack_sp, items); /* @_ could have been extended. */
2121 Copy(AvARRAY(av), PL_stack_sp, items, SV*);
2122 PL_stack_sp += items;
2124 if (CxTYPE(cx) == CXt_SUB &&
2125 !(CvDEPTH(cx->blk_sub.cv) = cx->blk_sub.olddepth))
2126 SvREFCNT_dec(cx->blk_sub.cv);
2127 oldsave = PL_scopestack[PL_scopestack_ix - 1];
2128 LEAVE_SCOPE(oldsave);
2130 /* Now do some callish stuff. */
2133 #ifdef PERL_XSUB_OLDSTYLE
2134 if (CvOLDSTYLE(cv)) {
2135 I32 (*fp3)(int,int,int);
2140 fp3 = (I32(*)(int,int,int))CvXSUB(cv);
2141 items = (*fp3)(CvXSUBANY(cv).any_i32,
2142 mark - PL_stack_base + 1,
2144 SP = PL_stack_base + items;
2147 #endif /* PERL_XSUB_OLDSTYLE */
2152 PL_stack_sp--; /* There is no cv arg. */
2153 /* Push a mark for the start of arglist */
2155 (void)(*CvXSUB(cv))(aTHXo_ cv);
2156 /* Pop the current context like a decent sub should */
2157 POPBLOCK(cx, PL_curpm);
2158 /* Do _not_ use PUTBACK, keep the XSUB's return stack! */
2161 return pop_return();
2164 AV* padlist = CvPADLIST(cv);
2165 SV** svp = AvARRAY(padlist);
2166 if (CxTYPE(cx) == CXt_EVAL) {
2167 PL_in_eval = cx->blk_eval.old_in_eval;
2168 PL_eval_root = cx->blk_eval.old_eval_root;
2169 cx->cx_type = CXt_SUB;
2170 cx->blk_sub.hasargs = 0;
2172 cx->blk_sub.cv = cv;
2173 cx->blk_sub.olddepth = CvDEPTH(cv);
2175 if (CvDEPTH(cv) < 2)
2176 (void)SvREFCNT_inc(cv);
2177 else { /* save temporaries on recursion? */
2178 if (CvDEPTH(cv) == 100 && ckWARN(WARN_RECURSION))
2179 sub_crush_depth(cv);
2180 if (CvDEPTH(cv) > AvFILLp(padlist)) {
2181 AV *newpad = newAV();
2182 SV **oldpad = AvARRAY(svp[CvDEPTH(cv)-1]);
2183 I32 ix = AvFILLp((AV*)svp[1]);
2184 I32 names_fill = AvFILLp((AV*)svp[0]);
2185 svp = AvARRAY(svp[0]);
2186 for ( ;ix > 0; ix--) {
2187 if (names_fill >= ix && svp[ix] != &PL_sv_undef) {
2188 char *name = SvPVX(svp[ix]);
2189 if ((SvFLAGS(svp[ix]) & SVf_FAKE)
2192 /* outer lexical or anon code */
2193 av_store(newpad, ix,
2194 SvREFCNT_inc(oldpad[ix]) );
2196 else { /* our own lexical */
2198 av_store(newpad, ix, sv = (SV*)newAV());
2199 else if (*name == '%')
2200 av_store(newpad, ix, sv = (SV*)newHV());
2202 av_store(newpad, ix, sv = NEWSV(0,0));
2206 else if (IS_PADGV(oldpad[ix]) || IS_PADCONST(oldpad[ix])) {
2207 av_store(newpad, ix, sv = SvREFCNT_inc(oldpad[ix]));
2210 av_store(newpad, ix, sv = NEWSV(0,0));
2214 if (cx->blk_sub.hasargs) {
2217 av_store(newpad, 0, (SV*)av);
2218 AvFLAGS(av) = AVf_REIFY;
2220 av_store(padlist, CvDEPTH(cv), (SV*)newpad);
2221 AvFILLp(padlist) = CvDEPTH(cv);
2222 svp = AvARRAY(padlist);
2226 if (!cx->blk_sub.hasargs) {
2227 AV* av = (AV*)PL_curpad[0];
2229 items = AvFILLp(av) + 1;
2231 /* Mark is at the end of the stack. */
2233 Copy(AvARRAY(av), SP + 1, items, SV*);
2238 #endif /* USE_THREADS */
2239 SAVEVPTR(PL_curpad);
2240 PL_curpad = AvARRAY((AV*)svp[CvDEPTH(cv)]);
2242 if (cx->blk_sub.hasargs)
2243 #endif /* USE_THREADS */
2245 AV* av = (AV*)PL_curpad[0];
2249 cx->blk_sub.savearray = GvAV(PL_defgv);
2250 GvAV(PL_defgv) = (AV*)SvREFCNT_inc(av);
2251 #endif /* USE_THREADS */
2252 cx->blk_sub.argarray = av;
2255 if (items >= AvMAX(av) + 1) {
2257 if (AvARRAY(av) != ary) {
2258 AvMAX(av) += AvARRAY(av) - AvALLOC(av);
2259 SvPVX(av) = (char*)ary;
2261 if (items >= AvMAX(av) + 1) {
2262 AvMAX(av) = items - 1;
2263 Renew(ary,items+1,SV*);
2265 SvPVX(av) = (char*)ary;
2268 Copy(mark,AvARRAY(av),items,SV*);
2269 AvFILLp(av) = items - 1;
2270 assert(!AvREAL(av));
2277 if (PERLDB_SUB) { /* Checking curstash breaks DProf. */
2279 * We do not care about using sv to call CV;
2280 * it's for informational purposes only.
2282 SV *sv = GvSV(PL_DBsub);
2285 if (PERLDB_SUB_NN) {
2286 SvIVX(sv) = PTR2IV(cv); /* Already upgraded, saved */
2289 gv_efullname3(sv, CvGV(cv), Nullch);
2292 && (gotocv = get_cv("DB::goto", FALSE)) ) {
2293 PUSHMARK( PL_stack_sp );
2294 call_sv((SV*)gotocv, G_SCALAR | G_NODEBUG);
2298 RETURNOP(CvSTART(cv));
2302 label = SvPV(sv,n_a);
2303 if (!(do_dump || *label))
2304 DIE(aTHX_ must_have_label);
2307 else if (PL_op->op_flags & OPf_SPECIAL) {
2309 DIE(aTHX_ must_have_label);
2312 label = cPVOP->op_pv;
2314 if (label && *label) {
2319 PL_lastgotoprobe = 0;
2321 for (ix = cxstack_ix; ix >= 0; ix--) {
2323 switch (CxTYPE(cx)) {
2325 gotoprobe = PL_eval_root; /* XXX not good for nested eval */
2328 gotoprobe = cx->blk_oldcop->op_sibling;
2334 gotoprobe = cx->blk_oldcop->op_sibling;
2336 gotoprobe = PL_main_root;
2339 if (CvDEPTH(cx->blk_sub.cv)) {
2340 gotoprobe = CvROOT(cx->blk_sub.cv);
2346 DIE(aTHX_ "Can't \"goto\" out of a pseudo block");
2349 DIE(aTHX_ "panic: goto");
2350 gotoprobe = PL_main_root;
2353 retop = dofindlabel(gotoprobe, label,
2354 enterops, enterops + GOTO_DEPTH);
2357 PL_lastgotoprobe = gotoprobe;
2360 DIE(aTHX_ "Can't find label %s", label);
2362 /* pop unwanted frames */
2364 if (ix < cxstack_ix) {
2371 oldsave = PL_scopestack[PL_scopestack_ix];
2372 LEAVE_SCOPE(oldsave);
2375 /* push wanted frames */
2377 if (*enterops && enterops[1]) {
2379 for (ix = 1; enterops[ix]; ix++) {
2380 PL_op = enterops[ix];
2381 /* Eventually we may want to stack the needed arguments
2382 * for each op. For now, we punt on the hard ones. */
2383 if (PL_op->op_type == OP_ENTERITER)
2384 DIE(aTHX_ "Can't \"goto\" into the middle of a foreach loop",
2386 CALL_FPTR(PL_op->op_ppaddr)(aTHX);
2394 if (!retop) retop = PL_main_start;
2396 PL_restartop = retop;
2397 PL_do_undump = TRUE;
2401 PL_restartop = 0; /* hmm, must be GNU unexec().. */
2402 PL_do_undump = FALSE;
2418 if (anum == 1 && VMSISH_EXIT)
2422 PL_exit_flags |= PERL_EXIT_EXPECTED;
2424 PUSHs(&PL_sv_undef);
2432 NV value = SvNVx(GvSV(cCOP->cop_gv));
2433 register I32 match = I_32(value);
2436 if (((NV)match) > value)
2437 --match; /* was fractional--truncate other way */
2439 match -= cCOP->uop.scop.scop_offset;
2442 else if (match > cCOP->uop.scop.scop_max)
2443 match = cCOP->uop.scop.scop_max;
2444 PL_op = cCOP->uop.scop.scop_next[match];
2454 PL_op = PL_op->op_next; /* can't assume anything */
2457 match = *(SvPVx(GvSV(cCOP->cop_gv), n_a)) & 255;
2458 match -= cCOP->uop.scop.scop_offset;
2461 else if (match > cCOP->uop.scop.scop_max)
2462 match = cCOP->uop.scop.scop_max;
2463 PL_op = cCOP->uop.scop.scop_next[match];
2472 S_save_lines(pTHX_ AV *array, SV *sv)
2474 register char *s = SvPVX(sv);
2475 register char *send = SvPVX(sv) + SvCUR(sv);
2477 register I32 line = 1;
2479 while (s && s < send) {
2480 SV *tmpstr = NEWSV(85,0);
2482 sv_upgrade(tmpstr, SVt_PVMG);
2483 t = strchr(s, '\n');
2489 sv_setpvn(tmpstr, s, t - s);
2490 av_store(array, line++, tmpstr);
2496 S_docatch_body(pTHX_ va_list args)
2503 S_docatch(pTHX_ OP *o)
2508 volatile PERL_SI *cursi = PL_curstackinfo;
2512 assert(CATCH_GET == TRUE);
2516 CALLPROTECT(aTHX_ pcur_env, &ret, MEMBER_TO_FPTR(S_docatch_body));
2521 if (PL_restartop && cursi == PL_curstackinfo) {
2522 PL_op = PL_restartop;
2537 Perl_sv_compile_2op(pTHX_ SV *sv, OP** startop, char *code, AV** avp)
2538 /* sv Text to convert to OP tree. */
2539 /* startop op_free() this to undo. */
2540 /* code Short string id of the caller. */
2542 dSP; /* Make POPBLOCK work. */
2545 I32 gimme = 0; /* SUSPECT - INITIALZE TO WHAT? NI-S */
2548 OP *oop = PL_op, *rop;
2549 char tmpbuf[TYPE_DIGITS(long) + 12 + 10];
2555 /* switch to eval mode */
2557 if (PL_curcop == &PL_compiling) {
2558 SAVECOPSTASH(&PL_compiling);
2559 CopSTASH_set(&PL_compiling, PL_curstash);
2561 SAVECOPFILE(&PL_compiling);
2562 SAVECOPLINE(&PL_compiling);
2563 sprintf(tmpbuf, "_<(%.10s_eval %lu)", code, (unsigned long)++PL_evalseq);
2564 CopFILE_set(&PL_compiling, tmpbuf+2);
2565 CopLINE_set(&PL_compiling, 1);
2566 /* XXX For C<eval "...">s within BEGIN {} blocks, this ends up
2567 deleting the eval's FILEGV from the stash before gv_check() runs
2568 (i.e. before run-time proper). To work around the coredump that
2569 ensues, we always turn GvMULTI_on for any globals that were
2570 introduced within evals. See force_ident(). GSAR 96-10-12 */
2571 safestr = savepv(tmpbuf);
2572 SAVEDELETE(PL_defstash, safestr, strlen(safestr));
2574 #ifdef OP_IN_REGISTER
2582 PL_op->op_type = OP_ENTEREVAL;
2583 PL_op->op_flags = 0; /* Avoid uninit warning. */
2584 PUSHBLOCK(cx, CXt_EVAL, SP);
2585 PUSHEVAL(cx, 0, Nullgv);
2586 rop = doeval(G_SCALAR, startop);
2587 POPBLOCK(cx,PL_curpm);
2590 (*startop)->op_type = OP_NULL;
2591 (*startop)->op_ppaddr = PL_ppaddr[OP_NULL];
2593 *avp = (AV*)SvREFCNT_inc(PL_comppad);
2595 if (PL_curcop == &PL_compiling)
2596 PL_compiling.op_private = PL_hints;
2597 #ifdef OP_IN_REGISTER
2603 /* With USE_THREADS, eval_owner must be held on entry to doeval */
2605 S_doeval(pTHX_ int gimme, OP** startop)
2613 PL_in_eval = EVAL_INEVAL;
2617 /* set up a scratch pad */
2620 SAVEVPTR(PL_curpad);
2621 SAVESPTR(PL_comppad);
2622 SAVESPTR(PL_comppad_name);
2623 SAVEI32(PL_comppad_name_fill);
2624 SAVEI32(PL_min_intro_pending);
2625 SAVEI32(PL_max_intro_pending);
2628 for (i = cxstack_ix - 1; i >= 0; i--) {
2629 PERL_CONTEXT *cx = &cxstack[i];
2630 if (CxTYPE(cx) == CXt_EVAL)
2632 else if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
2633 caller = cx->blk_sub.cv;
2638 SAVESPTR(PL_compcv);
2639 PL_compcv = (CV*)NEWSV(1104,0);
2640 sv_upgrade((SV *)PL_compcv, SVt_PVCV);
2641 CvEVAL_on(PL_compcv);
2643 CvOWNER(PL_compcv) = 0;
2644 New(666, CvMUTEXP(PL_compcv), 1, perl_mutex);
2645 MUTEX_INIT(CvMUTEXP(PL_compcv));
2646 #endif /* USE_THREADS */
2648 PL_comppad = newAV();
2649 av_push(PL_comppad, Nullsv);
2650 PL_curpad = AvARRAY(PL_comppad);
2651 PL_comppad_name = newAV();
2652 PL_comppad_name_fill = 0;
2653 PL_min_intro_pending = 0;
2656 av_store(PL_comppad_name, 0, newSVpvn("@_", 2));
2657 PL_curpad[0] = (SV*)newAV();
2658 SvPADMY_on(PL_curpad[0]); /* XXX Needed? */
2659 #endif /* USE_THREADS */
2661 comppadlist = newAV();
2662 AvREAL_off(comppadlist);
2663 av_store(comppadlist, 0, (SV*)PL_comppad_name);
2664 av_store(comppadlist, 1, (SV*)PL_comppad);
2665 CvPADLIST(PL_compcv) = comppadlist;
2667 if (!saveop || saveop->op_type != OP_REQUIRE)
2668 CvOUTSIDE(PL_compcv) = (CV*)SvREFCNT_inc(caller);
2670 SAVEFREESV(PL_compcv);
2672 /* make sure we compile in the right package */
2674 if (CopSTASH_ne(PL_curcop, PL_curstash)) {
2675 SAVESPTR(PL_curstash);
2676 PL_curstash = CopSTASH(PL_curcop);
2678 SAVESPTR(PL_beginav);
2679 PL_beginav = newAV();
2680 SAVEFREESV(PL_beginav);
2682 /* try to compile it */
2684 PL_eval_root = Nullop;
2686 PL_curcop = &PL_compiling;
2687 PL_curcop->cop_arybase = 0;
2688 SvREFCNT_dec(PL_rs);
2689 PL_rs = newSVpvn("\n", 1);
2690 if (saveop && saveop->op_flags & OPf_SPECIAL)
2691 PL_in_eval |= EVAL_KEEPERR;
2694 if (yyparse() || PL_error_count || !PL_eval_root) {
2698 I32 optype = 0; /* Might be reset by POPEVAL. */
2703 op_free(PL_eval_root);
2704 PL_eval_root = Nullop;
2706 SP = PL_stack_base + POPMARK; /* pop original mark */
2708 POPBLOCK(cx,PL_curpm);
2714 if (optype == OP_REQUIRE) {
2715 char* msg = SvPVx(ERRSV, n_a);
2716 DIE(aTHX_ "%sCompilation failed in require",
2717 *msg ? msg : "Unknown error\n");
2720 char* msg = SvPVx(ERRSV, n_a);
2722 POPBLOCK(cx,PL_curpm);
2724 Perl_croak(aTHX_ "%sCompilation failed in regexp",
2725 (*msg ? msg : "Unknown error\n"));
2727 SvREFCNT_dec(PL_rs);
2728 PL_rs = SvREFCNT_inc(PL_nrs);
2730 MUTEX_LOCK(&PL_eval_mutex);
2732 COND_SIGNAL(&PL_eval_cond);
2733 MUTEX_UNLOCK(&PL_eval_mutex);
2734 #endif /* USE_THREADS */
2737 SvREFCNT_dec(PL_rs);
2738 PL_rs = SvREFCNT_inc(PL_nrs);
2739 CopLINE_set(&PL_compiling, 0);
2741 *startop = PL_eval_root;
2742 SvREFCNT_dec(CvOUTSIDE(PL_compcv));
2743 CvOUTSIDE(PL_compcv) = Nullcv;
2745 SAVEFREEOP(PL_eval_root);
2747 scalarvoid(PL_eval_root);
2748 else if (gimme & G_ARRAY)
2751 scalar(PL_eval_root);
2753 DEBUG_x(dump_eval());
2755 /* Register with debugger: */
2756 if (PERLDB_INTER && saveop->op_type == OP_REQUIRE) {
2757 CV *cv = get_cv("DB::postponed", FALSE);
2761 XPUSHs((SV*)CopFILEGV(&PL_compiling));
2763 call_sv((SV*)cv, G_DISCARD);
2767 /* compiled okay, so do it */
2769 CvDEPTH(PL_compcv) = 1;
2770 SP = PL_stack_base + POPMARK; /* pop original mark */
2771 PL_op = saveop; /* The caller may need it. */
2773 MUTEX_LOCK(&PL_eval_mutex);
2775 COND_SIGNAL(&PL_eval_cond);
2776 MUTEX_UNLOCK(&PL_eval_mutex);
2777 #endif /* USE_THREADS */
2779 RETURNOP(PL_eval_start);
2783 S_doopen_pmc(pTHX_ const char *name, const char *mode)
2785 STRLEN namelen = strlen(name);
2788 if (namelen > 3 && strEQ(name + namelen - 3, ".pm")) {
2789 SV *pmcsv = Perl_newSVpvf(aTHX_ "%s%c", name, 'c');
2790 char *pmc = SvPV_nolen(pmcsv);
2793 if (PerlLIO_stat(pmc, &pmcstat) < 0) {
2794 fp = PerlIO_open(name, mode);
2797 if (PerlLIO_stat(name, &pmstat) < 0 ||
2798 pmstat.st_mtime < pmcstat.st_mtime)
2800 fp = PerlIO_open(pmc, mode);
2803 fp = PerlIO_open(name, mode);
2806 SvREFCNT_dec(pmcsv);
2809 fp = PerlIO_open(name, mode);
2817 register PERL_CONTEXT *cx;
2822 SV *namesv = Nullsv;
2824 I32 gimme = G_SCALAR;
2825 PerlIO *tryrsfp = 0;
2827 int filter_has_file = 0;
2828 GV *filter_child_proc = 0;
2829 SV *filter_state = 0;
2833 if (SvNIOKp(sv) && !SvPOKp(sv)) {
2834 if (Atof(PL_patchlevel) + 0.00000999 < SvNV(sv))
2835 DIE(aTHX_ "Perl %s required--this is only version %s, stopped",
2836 SvPV(sv,n_a),PL_patchlevel);
2839 name = SvPV(sv, len);
2840 if (!(name && len > 0 && *name))
2841 DIE(aTHX_ "Null filename used");
2842 TAINT_PROPER("require");
2843 if (PL_op->op_type == OP_REQUIRE &&
2844 (svp = hv_fetch(GvHVn(PL_incgv), name, len, 0)) &&
2845 *svp != &PL_sv_undef)
2848 /* prepare to compile file */
2850 if (PERL_FILE_IS_ABSOLUTE(name)
2851 || (*name == '.' && (name[1] == '/' ||
2852 (name[1] == '.' && name[2] == '/'))))
2855 tryrsfp = doopen_pmc(name,PERL_SCRIPT_MODE);
2858 AV *ar = GvAVn(PL_incgv);
2862 if ((unixname = tounixspec(name, Nullch)) != Nullch)
2865 namesv = NEWSV(806, 0);
2866 for (i = 0; i <= AvFILL(ar); i++) {
2867 SV *dirsv = *av_fetch(ar, i, TRUE);
2873 if (SvTYPE(SvRV(loader)) == SVt_PVAV) {
2874 loader = *av_fetch((AV *)SvRV(loader), 0, TRUE);
2877 Perl_sv_setpvf(aTHX_ namesv, "/loader/0x%"UVxf"/%s",
2878 PTR2UV(SvANY(loader)), name);
2879 tryname = SvPVX(namesv);
2890 count = call_sv(loader, G_ARRAY);
2900 if (SvROK(arg) && SvTYPE(SvRV(arg)) == SVt_PVGV) {
2904 if (SvTYPE(arg) == SVt_PVGV) {
2905 IO *io = GvIO((GV *)arg);
2910 tryrsfp = IoIFP(io);
2911 if (IoTYPE(io) == '|') {
2912 /* reading from a child process doesn't
2913 nest -- when returning from reading
2914 the inner module, the outer one is
2915 unreadable (closed?) I've tried to
2916 save the gv to manage the lifespan of
2917 the pipe, but this didn't help. XXX */
2918 filter_child_proc = (GV *)arg;
2919 (void)SvREFCNT_inc(filter_child_proc);
2922 if (IoOFP(io) && IoOFP(io) != IoIFP(io)) {
2923 PerlIO_close(IoOFP(io));
2935 if (SvROK(arg) && SvTYPE(SvRV(arg)) == SVt_PVCV) {
2937 (void)SvREFCNT_inc(filter_sub);
2940 filter_state = SP[i];
2941 (void)SvREFCNT_inc(filter_state);
2945 tryrsfp = PerlIO_open("/dev/null",
2959 filter_has_file = 0;
2960 if (filter_child_proc) {
2961 SvREFCNT_dec(filter_child_proc);
2962 filter_child_proc = 0;
2965 SvREFCNT_dec(filter_state);
2969 SvREFCNT_dec(filter_sub);
2974 char *dir = SvPVx(dirsv, n_a);
2977 if ((unixdir = tounixpath(dir, Nullch)) == Nullch)
2979 sv_setpv(namesv, unixdir);
2980 sv_catpv(namesv, unixname);
2982 Perl_sv_setpvf(aTHX_ namesv, "%s/%s", dir, name);
2984 TAINT_PROPER("require");
2985 tryname = SvPVX(namesv);
2986 tryrsfp = doopen_pmc(tryname, PERL_SCRIPT_MODE);
2988 if (tryname[0] == '.' && tryname[1] == '/')
2996 SAVECOPFILE(&PL_compiling);
2997 CopFILE_set(&PL_compiling, tryrsfp ? tryname : name);
2998 SvREFCNT_dec(namesv);
3000 if (PL_op->op_type == OP_REQUIRE) {
3001 char *msgstr = name;
3002 if (namesv) { /* did we lookup @INC? */
3003 SV *msg = sv_2mortal(newSVpv(msgstr,0));
3004 SV *dirmsgsv = NEWSV(0, 0);
3005 AV *ar = GvAVn(PL_incgv);
3007 sv_catpvn(msg, " in @INC", 8);
3008 if (instr(SvPVX(msg), ".h "))
3009 sv_catpv(msg, " (change .h to .ph maybe?)");
3010 if (instr(SvPVX(msg), ".ph "))
3011 sv_catpv(msg, " (did you run h2ph?)");
3012 sv_catpv(msg, " (@INC contains:");
3013 for (i = 0; i <= AvFILL(ar); i++) {
3014 char *dir = SvPVx(*av_fetch(ar, i, TRUE), n_a);
3015 Perl_sv_setpvf(aTHX_ dirmsgsv, " %s", dir);
3016 sv_catsv(msg, dirmsgsv);
3018 sv_catpvn(msg, ")", 1);
3019 SvREFCNT_dec(dirmsgsv);
3020 msgstr = SvPV_nolen(msg);
3022 DIE(aTHX_ "Can't locate %s", msgstr);
3028 SETERRNO(0, SS$_NORMAL);
3030 /* Assume success here to prevent recursive requirement. */
3031 (void)hv_store(GvHVn(PL_incgv), name, strlen(name),
3032 newSVpv(CopFILE(&PL_compiling), 0), 0 );
3036 lex_start(sv_2mortal(newSVpvn("",0)));
3037 SAVEGENERICSV(PL_rsfp_filters);
3038 PL_rsfp_filters = Nullav;
3043 SAVESPTR(PL_compiling.cop_warnings);
3044 if (PL_dowarn & G_WARN_ALL_ON)
3045 PL_compiling.cop_warnings = WARN_ALL ;
3046 else if (PL_dowarn & G_WARN_ALL_OFF)
3047 PL_compiling.cop_warnings = WARN_NONE ;
3049 PL_compiling.cop_warnings = WARN_STD ;
3051 if (filter_sub || filter_child_proc) {
3052 SV *datasv = filter_add(run_user_filter, Nullsv);
3053 IoLINES(datasv) = filter_has_file;
3054 IoFMT_GV(datasv) = (GV *)filter_child_proc;
3055 IoTOP_GV(datasv) = (GV *)filter_state;
3056 IoBOTTOM_GV(datasv) = (GV *)filter_sub;
3059 /* switch to eval mode */
3060 push_return(PL_op->op_next);
3061 PUSHBLOCK(cx, CXt_EVAL, SP);
3062 PUSHEVAL(cx, name, Nullgv);
3064 SAVECOPLINE(&PL_compiling);
3065 CopLINE_set(&PL_compiling, 0);
3069 MUTEX_LOCK(&PL_eval_mutex);
3070 if (PL_eval_owner && PL_eval_owner != thr)
3071 while (PL_eval_owner)
3072 COND_WAIT(&PL_eval_cond, &PL_eval_mutex);
3073 PL_eval_owner = thr;
3074 MUTEX_UNLOCK(&PL_eval_mutex);
3075 #endif /* USE_THREADS */
3076 return DOCATCH(doeval(G_SCALAR, NULL));
3081 return pp_require();
3087 register PERL_CONTEXT *cx;
3089 I32 gimme = GIMME_V, was = PL_sub_generation;
3090 char tmpbuf[TYPE_DIGITS(long) + 12];
3095 if (!SvPV(sv,len) || !len)
3097 TAINT_PROPER("eval");
3103 /* switch to eval mode */
3105 SAVECOPFILE(&PL_compiling);
3106 sprintf(tmpbuf, "_<(eval %lu)", (unsigned long)++PL_evalseq);
3107 CopFILE_set(&PL_compiling, tmpbuf+2);
3108 CopLINE_set(&PL_compiling, 1);
3109 /* XXX For C<eval "...">s within BEGIN {} blocks, this ends up
3110 deleting the eval's FILEGV from the stash before gv_check() runs
3111 (i.e. before run-time proper). To work around the coredump that
3112 ensues, we always turn GvMULTI_on for any globals that were
3113 introduced within evals. See force_ident(). GSAR 96-10-12 */
3114 safestr = savepv(tmpbuf);
3115 SAVEDELETE(PL_defstash, safestr, strlen(safestr));
3117 PL_hints = PL_op->op_targ;
3118 SAVESPTR(PL_compiling.cop_warnings);
3119 if (!specialWARN(PL_compiling.cop_warnings)) {
3120 PL_compiling.cop_warnings = newSVsv(PL_compiling.cop_warnings) ;
3121 SAVEFREESV(PL_compiling.cop_warnings) ;
3124 push_return(PL_op->op_next);
3125 PUSHBLOCK(cx, (CXt_EVAL|CXp_REAL), SP);
3126 PUSHEVAL(cx, 0, Nullgv);
3128 /* prepare to compile string */
3130 if (PERLDB_LINE && PL_curstash != PL_debstash)
3131 save_lines(CopFILEAV(&PL_compiling), PL_linestr);
3134 MUTEX_LOCK(&PL_eval_mutex);
3135 if (PL_eval_owner && PL_eval_owner != thr)
3136 while (PL_eval_owner)
3137 COND_WAIT(&PL_eval_cond, &PL_eval_mutex);
3138 PL_eval_owner = thr;
3139 MUTEX_UNLOCK(&PL_eval_mutex);
3140 #endif /* USE_THREADS */
3141 ret = doeval(gimme, NULL);
3142 if (PERLDB_INTER && was != PL_sub_generation /* Some subs defined here. */
3143 && ret != PL_op->op_next) { /* Successive compilation. */
3144 strcpy(safestr, "_<(eval )"); /* Anything fake and short. */
3146 return DOCATCH(ret);
3156 register PERL_CONTEXT *cx;
3158 U8 save_flags = PL_op -> op_flags;
3163 retop = pop_return();
3166 if (gimme == G_VOID)
3168 else if (gimme == G_SCALAR) {
3171 if (SvFLAGS(TOPs) & SVs_TEMP)
3174 *MARK = sv_mortalcopy(TOPs);
3178 *MARK = &PL_sv_undef;
3183 /* in case LEAVE wipes old return values */
3184 for (mark = newsp + 1; mark <= SP; mark++) {
3185 if (!(SvFLAGS(*mark) & SVs_TEMP)) {
3186 *mark = sv_mortalcopy(*mark);
3187 TAINT_NOT; /* Each item is independent */
3191 PL_curpm = newpm; /* Don't pop $1 et al till now */
3193 if (AvFILLp(PL_comppad_name) >= 0)
3197 assert(CvDEPTH(PL_compcv) == 1);
3199 CvDEPTH(PL_compcv) = 0;
3202 if (optype == OP_REQUIRE &&
3203 !(gimme == G_SCALAR ? SvTRUE(*SP) : SP > newsp))
3205 /* Unassume the success we assumed earlier. */
3206 char *name = cx->blk_eval.old_name;
3207 (void)hv_delete(GvHVn(PL_incgv), name, strlen(name), G_DISCARD);
3208 retop = Perl_die(aTHX_ "%s did not return a true value", name);
3209 /* die_where() did LEAVE, or we won't be here */
3213 if (!(save_flags & OPf_SPECIAL))
3223 register PERL_CONTEXT *cx;
3224 I32 gimme = GIMME_V;
3229 push_return(cLOGOP->op_other->op_next);
3230 PUSHBLOCK(cx, CXt_EVAL, SP);
3232 PL_eval_root = PL_op; /* Only needed so that goto works right. */
3234 PL_in_eval = EVAL_INEVAL;
3237 return DOCATCH(PL_op->op_next);
3247 register PERL_CONTEXT *cx;
3255 if (gimme == G_VOID)
3257 else if (gimme == G_SCALAR) {
3260 if (SvFLAGS(TOPs) & (SVs_PADTMP|SVs_TEMP))
3263 *MARK = sv_mortalcopy(TOPs);
3267 *MARK = &PL_sv_undef;
3272 /* in case LEAVE wipes old return values */
3273 for (mark = newsp + 1; mark <= SP; mark++) {
3274 if (!(SvFLAGS(*mark) & (SVs_PADTMP|SVs_TEMP))) {
3275 *mark = sv_mortalcopy(*mark);
3276 TAINT_NOT; /* Each item is independent */
3280 PL_curpm = newpm; /* Don't pop $1 et al till now */
3288 S_doparseform(pTHX_ SV *sv)
3291 register char *s = SvPV_force(sv, len);
3292 register char *send = s + len;
3293 register char *base;
3294 register I32 skipspaces = 0;
3297 bool postspace = FALSE;
3305 Perl_croak(aTHX_ "Null picture in formline");
3307 New(804, fops, (send - s)*3+10, U16); /* Almost certainly too long... */
3312 *fpc++ = FF_LINEMARK;
3313 noblank = repeat = FALSE;
3331 case ' ': case '\t':
3342 *fpc++ = FF_LITERAL;
3350 *fpc++ = skipspaces;
3354 *fpc++ = FF_NEWLINE;
3358 arg = fpc - linepc + 1;
3365 *fpc++ = FF_LINEMARK;
3366 noblank = repeat = FALSE;
3375 ischop = s[-1] == '^';
3381 arg = (s - base) - 1;
3383 *fpc++ = FF_LITERAL;
3392 *fpc++ = FF_LINEGLOB;
3394 else if (*s == '#' || (*s == '.' && s[1] == '#')) {
3395 arg = ischop ? 512 : 0;
3405 arg |= 256 + (s - f);
3407 *fpc++ = s - base; /* fieldsize for FETCH */
3408 *fpc++ = FF_DECIMAL;
3413 bool ismore = FALSE;
3416 while (*++s == '>') ;
3417 prespace = FF_SPACE;
3419 else if (*s == '|') {
3420 while (*++s == '|') ;
3421 prespace = FF_HALFSPACE;
3426 while (*++s == '<') ;
3429 if (*s == '.' && s[1] == '.' && s[2] == '.') {
3433 *fpc++ = s - base; /* fieldsize for FETCH */
3435 *fpc++ = ischop ? FF_CHECKCHOP : FF_CHECKNL;
3453 { /* need to jump to the next word */
3455 z = WORD_ALIGN - SvCUR(sv) % WORD_ALIGN;
3456 SvGROW(sv, SvCUR(sv) + z + arg * sizeof(U16) + 4);
3457 s = SvPVX(sv) + SvCUR(sv) + z;
3459 Copy(fops, s, arg, U16);
3461 sv_magic(sv, Nullsv, 'f', Nullch, 0);
3466 * The rest of this file was derived from source code contributed
3469 * NOTE: this code was derived from Tom Horsley's qsort replacement
3470 * and should not be confused with the original code.
3473 /* Copyright (C) Tom Horsley, 1997. All rights reserved.
3475 Permission granted to distribute under the same terms as perl which are
3478 This program is free software; you can redistribute it and/or modify
3479 it under the terms of either:
3481 a) the GNU General Public License as published by the Free
3482 Software Foundation; either version 1, or (at your option) any
3485 b) the "Artistic License" which comes with this Kit.
3487 Details on the perl license can be found in the perl source code which
3488 may be located via the www.perl.com web page.
3490 This is the most wonderfulest possible qsort I can come up with (and
3491 still be mostly portable) My (limited) tests indicate it consistently
3492 does about 20% fewer calls to compare than does the qsort in the Visual
3493 C++ library, other vendors may vary.
3495 Some of the ideas in here can be found in "Algorithms" by Sedgewick,
3496 others I invented myself (or more likely re-invented since they seemed
3497 pretty obvious once I watched the algorithm operate for a while).
3499 Most of this code was written while watching the Marlins sweep the Giants
3500 in the 1997 National League Playoffs - no Braves fans allowed to use this
3501 code (just kidding :-).
3503 I realize that if I wanted to be true to the perl tradition, the only
3504 comment in this file would be something like:
3506 ...they shuffled back towards the rear of the line. 'No, not at the
3507 rear!' the slave-driver shouted. 'Three files up. And stay there...
3509 However, I really needed to violate that tradition just so I could keep
3510 track of what happens myself, not to mention some poor fool trying to
3511 understand this years from now :-).
3514 /* ********************************************************** Configuration */
3516 #ifndef QSORT_ORDER_GUESS
3517 #define QSORT_ORDER_GUESS 2 /* Select doubling version of the netBSD trick */
3520 /* QSORT_MAX_STACK is the largest number of partitions that can be stacked up for
3521 future processing - a good max upper bound is log base 2 of memory size
3522 (32 on 32 bit machines, 64 on 64 bit machines, etc). In reality can
3523 safely be smaller than that since the program is taking up some space and
3524 most operating systems only let you grab some subset of contiguous
3525 memory (not to mention that you are normally sorting data larger than
3526 1 byte element size :-).
3528 #ifndef QSORT_MAX_STACK
3529 #define QSORT_MAX_STACK 32
3532 /* QSORT_BREAK_EVEN is the size of the largest partition we should insertion sort.
3533 Anything bigger and we use qsort. If you make this too small, the qsort
3534 will probably break (or become less efficient), because it doesn't expect
3535 the middle element of a partition to be the same as the right or left -
3536 you have been warned).
3538 #ifndef QSORT_BREAK_EVEN
3539 #define QSORT_BREAK_EVEN 6
3542 /* ************************************************************* Data Types */
3544 /* hold left and right index values of a partition waiting to be sorted (the
3545 partition includes both left and right - right is NOT one past the end or
3546 anything like that).
3548 struct partition_stack_entry {
3551 #ifdef QSORT_ORDER_GUESS
3552 int qsort_break_even;
3556 /* ******************************************************* Shorthand Macros */
3558 /* Note that these macros will be used from inside the qsort function where
3559 we happen to know that the variable 'elt_size' contains the size of an
3560 array element and the variable 'temp' points to enough space to hold a
3561 temp element and the variable 'array' points to the array being sorted
3562 and 'compare' is the pointer to the compare routine.
3564 Also note that there are very many highly architecture specific ways
3565 these might be sped up, but this is simply the most generally portable
3566 code I could think of.
3569 /* Return < 0 == 0 or > 0 as the value of elt1 is < elt2, == elt2, > elt2
3571 #define qsort_cmp(elt1, elt2) \
3572 ((*compare)(aTHXo_ array[elt1], array[elt2]))
3574 #ifdef QSORT_ORDER_GUESS
3575 #define QSORT_NOTICE_SWAP swapped++;
3577 #define QSORT_NOTICE_SWAP
3580 /* swaps contents of array elements elt1, elt2.
3582 #define qsort_swap(elt1, elt2) \
3585 temp = array[elt1]; \
3586 array[elt1] = array[elt2]; \
3587 array[elt2] = temp; \
3590 /* rotate contents of elt1, elt2, elt3 such that elt1 gets elt2, elt2 gets
3591 elt3 and elt3 gets elt1.
3593 #define qsort_rotate(elt1, elt2, elt3) \
3596 temp = array[elt1]; \
3597 array[elt1] = array[elt2]; \
3598 array[elt2] = array[elt3]; \
3599 array[elt3] = temp; \
3602 /* ************************************************************ Debug stuff */
3609 return; /* good place to set a breakpoint */
3612 #define qsort_assert(t) (void)( (t) || (break_here(), 0) )
3615 doqsort_all_asserts(
3619 int (*compare)(const void * elt1, const void * elt2),
3620 int pc_left, int pc_right, int u_left, int u_right)
3624 qsort_assert(pc_left <= pc_right);
3625 qsort_assert(u_right < pc_left);
3626 qsort_assert(pc_right < u_left);
3627 for (i = u_right + 1; i < pc_left; ++i) {
3628 qsort_assert(qsort_cmp(i, pc_left) < 0);
3630 for (i = pc_left; i < pc_right; ++i) {
3631 qsort_assert(qsort_cmp(i, pc_right) == 0);
3633 for (i = pc_right + 1; i < u_left; ++i) {
3634 qsort_assert(qsort_cmp(pc_right, i) < 0);
3638 #define qsort_all_asserts(PC_LEFT, PC_RIGHT, U_LEFT, U_RIGHT) \
3639 doqsort_all_asserts(array, num_elts, elt_size, compare, \
3640 PC_LEFT, PC_RIGHT, U_LEFT, U_RIGHT)
3644 #define qsort_assert(t) ((void)0)
3646 #define qsort_all_asserts(PC_LEFT, PC_RIGHT, U_LEFT, U_RIGHT) ((void)0)
3650 /* ****************************************************************** qsort */
3653 S_qsortsv(pTHX_ SV ** array, size_t num_elts, SVCOMPARE_t compare)
3657 struct partition_stack_entry partition_stack[QSORT_MAX_STACK];
3658 int next_stack_entry = 0;
3662 #ifdef QSORT_ORDER_GUESS
3663 int qsort_break_even;
3667 /* Make sure we actually have work to do.
3669 if (num_elts <= 1) {
3673 /* Setup the initial partition definition and fall into the sorting loop
3676 part_right = (int)(num_elts - 1);
3677 #ifdef QSORT_ORDER_GUESS
3678 qsort_break_even = QSORT_BREAK_EVEN;
3680 #define qsort_break_even QSORT_BREAK_EVEN
3683 if ((part_right - part_left) >= qsort_break_even) {
3684 /* OK, this is gonna get hairy, so lets try to document all the
3685 concepts and abbreviations and variables and what they keep
3688 pc: pivot chunk - the set of array elements we accumulate in the
3689 middle of the partition, all equal in value to the original
3690 pivot element selected. The pc is defined by:
3692 pc_left - the leftmost array index of the pc
3693 pc_right - the rightmost array index of the pc
3695 we start with pc_left == pc_right and only one element
3696 in the pivot chunk (but it can grow during the scan).
3698 u: uncompared elements - the set of elements in the partition
3699 we have not yet compared to the pivot value. There are two
3700 uncompared sets during the scan - one to the left of the pc
3701 and one to the right.
3703 u_right - the rightmost index of the left side's uncompared set
3704 u_left - the leftmost index of the right side's uncompared set
3706 The leftmost index of the left sides's uncompared set
3707 doesn't need its own variable because it is always defined
3708 by the leftmost edge of the whole partition (part_left). The
3709 same goes for the rightmost edge of the right partition
3712 We know there are no uncompared elements on the left once we
3713 get u_right < part_left and no uncompared elements on the
3714 right once u_left > part_right. When both these conditions
3715 are met, we have completed the scan of the partition.
3717 Any elements which are between the pivot chunk and the
3718 uncompared elements should be less than the pivot value on
3719 the left side and greater than the pivot value on the right
3720 side (in fact, the goal of the whole algorithm is to arrange
3721 for that to be true and make the groups of less-than and
3722 greater-then elements into new partitions to sort again).
3724 As you marvel at the complexity of the code and wonder why it
3725 has to be so confusing. Consider some of the things this level
3726 of confusion brings:
3728 Once I do a compare, I squeeze every ounce of juice out of it. I
3729 never do compare calls I don't have to do, and I certainly never
3732 I also never swap any elements unless I can prove there is a
3733 good reason. Many sort algorithms will swap a known value with
3734 an uncompared value just to get things in the right place (or
3735 avoid complexity :-), but that uncompared value, once it gets
3736 compared, may then have to be swapped again. A lot of the
3737 complexity of this code is due to the fact that it never swaps
3738 anything except compared values, and it only swaps them when the
3739 compare shows they are out of position.
3741 int pc_left, pc_right;
3742 int u_right, u_left;
3746 pc_left = ((part_left + part_right) / 2);
3748 u_right = pc_left - 1;
3749 u_left = pc_right + 1;
3751 /* Qsort works best when the pivot value is also the median value
3752 in the partition (unfortunately you can't find the median value
3753 without first sorting :-), so to give the algorithm a helping
3754 hand, we pick 3 elements and sort them and use the median value
3755 of that tiny set as the pivot value.
3757 Some versions of qsort like to use the left middle and right as
3758 the 3 elements to sort so they can insure the ends of the
3759 partition will contain values which will stop the scan in the
3760 compare loop, but when you have to call an arbitrarily complex
3761 routine to do a compare, its really better to just keep track of
3762 array index values to know when you hit the edge of the
3763 partition and avoid the extra compare. An even better reason to
3764 avoid using a compare call is the fact that you can drop off the
3765 edge of the array if someone foolishly provides you with an
3766 unstable compare function that doesn't always provide consistent
3769 So, since it is simpler for us to compare the three adjacent
3770 elements in the middle of the partition, those are the ones we
3771 pick here (conveniently pointed at by u_right, pc_left, and
3772 u_left). The values of the left, center, and right elements
3773 are refered to as l c and r in the following comments.
3776 #ifdef QSORT_ORDER_GUESS
3779 s = qsort_cmp(u_right, pc_left);
3782 s = qsort_cmp(pc_left, u_left);
3783 /* if l < c, c < r - already in order - nothing to do */
3785 /* l < c, c == r - already in order, pc grows */
3787 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3789 /* l < c, c > r - need to know more */
3790 s = qsort_cmp(u_right, u_left);
3792 /* l < c, c > r, l < r - swap c & r to get ordered */
3793 qsort_swap(pc_left, u_left);
3794 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3795 } else if (s == 0) {
3796 /* l < c, c > r, l == r - swap c&r, grow pc */
3797 qsort_swap(pc_left, u_left);
3799 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3801 /* l < c, c > r, l > r - make lcr into rlc to get ordered */
3802 qsort_rotate(pc_left, u_right, u_left);
3803 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3806 } else if (s == 0) {
3808 s = qsort_cmp(pc_left, u_left);
3810 /* l == c, c < r - already in order, grow pc */
3812 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3813 } else if (s == 0) {
3814 /* l == c, c == r - already in order, grow pc both ways */
3817 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3819 /* l == c, c > r - swap l & r, grow pc */
3820 qsort_swap(u_right, u_left);
3822 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3826 s = qsort_cmp(pc_left, u_left);
3828 /* l > c, c < r - need to know more */
3829 s = qsort_cmp(u_right, u_left);
3831 /* l > c, c < r, l < r - swap l & c to get ordered */
3832 qsort_swap(u_right, pc_left);
3833 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3834 } else if (s == 0) {
3835 /* l > c, c < r, l == r - swap l & c, grow pc */
3836 qsort_swap(u_right, pc_left);
3838 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3840 /* l > c, c < r, l > r - rotate lcr into crl to order */
3841 qsort_rotate(u_right, pc_left, u_left);
3842 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3844 } else if (s == 0) {
3845 /* l > c, c == r - swap ends, grow pc */
3846 qsort_swap(u_right, u_left);
3848 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3850 /* l > c, c > r - swap ends to get in order */
3851 qsort_swap(u_right, u_left);
3852 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3855 /* We now know the 3 middle elements have been compared and
3856 arranged in the desired order, so we can shrink the uncompared
3861 qsort_all_asserts(pc_left, pc_right, u_left, u_right);
3863 /* The above massive nested if was the simple part :-). We now have
3864 the middle 3 elements ordered and we need to scan through the
3865 uncompared sets on either side, swapping elements that are on
3866 the wrong side or simply shuffling equal elements around to get
3867 all equal elements into the pivot chunk.
3871 int still_work_on_left;
3872 int still_work_on_right;
3874 /* Scan the uncompared values on the left. If I find a value
3875 equal to the pivot value, move it over so it is adjacent to
3876 the pivot chunk and expand the pivot chunk. If I find a value
3877 less than the pivot value, then just leave it - its already
3878 on the correct side of the partition. If I find a greater
3879 value, then stop the scan.
3881 while (still_work_on_left = (u_right >= part_left)) {
3882 s = qsort_cmp(u_right, pc_left);
3885 } else if (s == 0) {
3887 if (pc_left != u_right) {
3888 qsort_swap(u_right, pc_left);
3894 qsort_assert(u_right < pc_left);
3895 qsort_assert(pc_left <= pc_right);
3896 qsort_assert(qsort_cmp(u_right + 1, pc_left) <= 0);
3897 qsort_assert(qsort_cmp(pc_left, pc_right) == 0);
3900 /* Do a mirror image scan of uncompared values on the right
3902 while (still_work_on_right = (u_left <= part_right)) {
3903 s = qsort_cmp(pc_right, u_left);
3906 } else if (s == 0) {
3908 if (pc_right != u_left) {
3909 qsort_swap(pc_right, u_left);
3915 qsort_assert(u_left > pc_right);
3916 qsort_assert(pc_left <= pc_right);
3917 qsort_assert(qsort_cmp(pc_right, u_left - 1) <= 0);
3918 qsort_assert(qsort_cmp(pc_left, pc_right) == 0);
3921 if (still_work_on_left) {
3922 /* I know I have a value on the left side which needs to be
3923 on the right side, but I need to know more to decide
3924 exactly the best thing to do with it.
3926 if (still_work_on_right) {
3927 /* I know I have values on both side which are out of
3928 position. This is a big win because I kill two birds
3929 with one swap (so to speak). I can advance the
3930 uncompared pointers on both sides after swapping both
3931 of them into the right place.
3933 qsort_swap(u_right, u_left);
3936 qsort_all_asserts(pc_left, pc_right, u_left, u_right);
3938 /* I have an out of position value on the left, but the
3939 right is fully scanned, so I "slide" the pivot chunk
3940 and any less-than values left one to make room for the
3941 greater value over on the right. If the out of position
3942 value is immediately adjacent to the pivot chunk (there
3943 are no less-than values), I can do that with a swap,
3944 otherwise, I have to rotate one of the less than values
3945 into the former position of the out of position value
3946 and the right end of the pivot chunk into the left end
3950 if (pc_left == u_right) {
3951 qsort_swap(u_right, pc_right);
3952 qsort_all_asserts(pc_left, pc_right-1, u_left, u_right-1);
3954 qsort_rotate(u_right, pc_left, pc_right);
3955 qsort_all_asserts(pc_left, pc_right-1, u_left, u_right-1);
3960 } else if (still_work_on_right) {
3961 /* Mirror image of complex case above: I have an out of
3962 position value on the right, but the left is fully
3963 scanned, so I need to shuffle things around to make room
3964 for the right value on the left.
3967 if (pc_right == u_left) {
3968 qsort_swap(u_left, pc_left);
3969 qsort_all_asserts(pc_left+1, pc_right, u_left+1, u_right);
3971 qsort_rotate(pc_right, pc_left, u_left);
3972 qsort_all_asserts(pc_left+1, pc_right, u_left+1, u_right);
3977 /* No more scanning required on either side of partition,
3978 break out of loop and figure out next set of partitions
3984 /* The elements in the pivot chunk are now in the right place. They
3985 will never move or be compared again. All I have to do is decide
3986 what to do with the stuff to the left and right of the pivot
3989 Notes on the QSORT_ORDER_GUESS ifdef code:
3991 1. If I just built these partitions without swapping any (or
3992 very many) elements, there is a chance that the elements are
3993 already ordered properly (being properly ordered will
3994 certainly result in no swapping, but the converse can't be
3997 2. A (properly written) insertion sort will run faster on
3998 already ordered data than qsort will.
4000 3. Perhaps there is some way to make a good guess about
4001 switching to an insertion sort earlier than partition size 6
4002 (for instance - we could save the partition size on the stack
4003 and increase the size each time we find we didn't swap, thus
4004 switching to insertion sort earlier for partitions with a
4005 history of not swapping).
4007 4. Naturally, if I just switch right away, it will make
4008 artificial benchmarks with pure ascending (or descending)
4009 data look really good, but is that a good reason in general?
4013 #ifdef QSORT_ORDER_GUESS
4015 #if QSORT_ORDER_GUESS == 1
4016 qsort_break_even = (part_right - part_left) + 1;
4018 #if QSORT_ORDER_GUESS == 2
4019 qsort_break_even *= 2;
4021 #if QSORT_ORDER_GUESS == 3
4022 int prev_break = qsort_break_even;
4023 qsort_break_even *= qsort_break_even;
4024 if (qsort_break_even < prev_break) {
4025 qsort_break_even = (part_right - part_left) + 1;
4029 qsort_break_even = QSORT_BREAK_EVEN;
4033 if (part_left < pc_left) {
4034 /* There are elements on the left which need more processing.
4035 Check the right as well before deciding what to do.
4037 if (pc_right < part_right) {
4038 /* We have two partitions to be sorted. Stack the biggest one
4039 and process the smallest one on the next iteration. This
4040 minimizes the stack height by insuring that any additional
4041 stack entries must come from the smallest partition which
4042 (because it is smallest) will have the fewest
4043 opportunities to generate additional stack entries.
4045 if ((part_right - pc_right) > (pc_left - part_left)) {
4046 /* stack the right partition, process the left */
4047 partition_stack[next_stack_entry].left = pc_right + 1;
4048 partition_stack[next_stack_entry].right = part_right;
4049 #ifdef QSORT_ORDER_GUESS
4050 partition_stack[next_stack_entry].qsort_break_even = qsort_break_even;
4052 part_right = pc_left - 1;
4054 /* stack the left partition, process the right */
4055 partition_stack[next_stack_entry].left = part_left;
4056 partition_stack[next_stack_entry].right = pc_left - 1;
4057 #ifdef QSORT_ORDER_GUESS
4058 partition_stack[next_stack_entry].qsort_break_even = qsort_break_even;
4060 part_left = pc_right + 1;
4062 qsort_assert(next_stack_entry < QSORT_MAX_STACK);
4065 /* The elements on the left are the only remaining elements
4066 that need sorting, arrange for them to be processed as the
4069 part_right = pc_left - 1;
4071 } else if (pc_right < part_right) {
4072 /* There is only one chunk on the right to be sorted, make it
4073 the new partition and loop back around.
4075 part_left = pc_right + 1;
4077 /* This whole partition wound up in the pivot chunk, so
4078 we need to get a new partition off the stack.
4080 if (next_stack_entry == 0) {
4081 /* the stack is empty - we are done */
4085 part_left = partition_stack[next_stack_entry].left;
4086 part_right = partition_stack[next_stack_entry].right;
4087 #ifdef QSORT_ORDER_GUESS
4088 qsort_break_even = partition_stack[next_stack_entry].qsort_break_even;
4092 /* This partition is too small to fool with qsort complexity, just
4093 do an ordinary insertion sort to minimize overhead.
4096 /* Assume 1st element is in right place already, and start checking
4097 at 2nd element to see where it should be inserted.
4099 for (i = part_left + 1; i <= part_right; ++i) {
4101 /* Scan (backwards - just in case 'i' is already in right place)
4102 through the elements already sorted to see if the ith element
4103 belongs ahead of one of them.
4105 for (j = i - 1; j >= part_left; --j) {
4106 if (qsort_cmp(i, j) >= 0) {
4107 /* i belongs right after j
4114 /* Looks like we really need to move some things
4118 for (k = i - 1; k >= j; --k)
4119 array[k + 1] = array[k];
4124 /* That partition is now sorted, grab the next one, or get out
4125 of the loop if there aren't any more.
4128 if (next_stack_entry == 0) {
4129 /* the stack is empty - we are done */
4133 part_left = partition_stack[next_stack_entry].left;
4134 part_right = partition_stack[next_stack_entry].right;
4135 #ifdef QSORT_ORDER_GUESS
4136 qsort_break_even = partition_stack[next_stack_entry].qsort_break_even;
4141 /* Believe it or not, the array is sorted at this point! */
4153 sortcv(pTHXo_ SV *a, SV *b)
4156 I32 oldsaveix = PL_savestack_ix;
4157 I32 oldscopeix = PL_scopestack_ix;
4159 GvSV(PL_firstgv) = a;
4160 GvSV(PL_secondgv) = b;
4161 PL_stack_sp = PL_stack_base;
4164 if (PL_stack_sp != PL_stack_base + 1)
4165 Perl_croak(aTHX_ "Sort subroutine didn't return single value");
4166 if (!SvNIOKp(*PL_stack_sp))
4167 Perl_croak(aTHX_ "Sort subroutine didn't return a numeric value");
4168 result = SvIV(*PL_stack_sp);
4169 while (PL_scopestack_ix > oldscopeix) {
4172 leave_scope(oldsaveix);
4177 sortcv_stacked(pTHXo_ SV *a, SV *b)
4180 I32 oldsaveix = PL_savestack_ix;
4181 I32 oldscopeix = PL_scopestack_ix;
4183 AV *av = GvAV(PL_defgv);
4185 if (AvMAX(av) < 1) {
4186 SV** ary = AvALLOC(av);
4187 if (AvARRAY(av) != ary) {
4188 AvMAX(av) += AvARRAY(av) - AvALLOC(av);
4189 SvPVX(av) = (char*)ary;
4191 if (AvMAX(av) < 1) {
4194 SvPVX(av) = (char*)ary;
4201 PL_stack_sp = PL_stack_base;
4204 if (PL_stack_sp != PL_stack_base + 1)
4205 Perl_croak(aTHX_ "Sort subroutine didn't return single value");
4206 if (!SvNIOKp(*PL_stack_sp))
4207 Perl_croak(aTHX_ "Sort subroutine didn't return a numeric value");
4208 result = SvIV(*PL_stack_sp);
4209 while (PL_scopestack_ix > oldscopeix) {
4212 leave_scope(oldsaveix);
4217 sortcv_xsub(pTHXo_ SV *a, SV *b)
4220 I32 oldsaveix = PL_savestack_ix;
4221 I32 oldscopeix = PL_scopestack_ix;
4223 CV *cv=(CV*)PL_sortcop;
4231 (void)(*CvXSUB(cv))(aTHXo_ cv);
4232 if (PL_stack_sp != PL_stack_base + 1)
4233 Perl_croak(aTHX_ "Sort subroutine didn't return single value");
4234 if (!SvNIOKp(*PL_stack_sp))
4235 Perl_croak(aTHX_ "Sort subroutine didn't return a numeric value");
4236 result = SvIV(*PL_stack_sp);
4237 while (PL_scopestack_ix > oldscopeix) {
4240 leave_scope(oldsaveix);
4246 sv_ncmp(pTHXo_ SV *a, SV *b)
4250 return nv1 < nv2 ? -1 : nv1 > nv2 ? 1 : 0;
4254 sv_i_ncmp(pTHXo_ SV *a, SV *b)
4258 return iv1 < iv2 ? -1 : iv1 > iv2 ? 1 : 0;
4260 #define tryCALL_AMAGICbin(left,right,meth,svp) STMT_START { \
4262 if (PL_amagic_generation) { \
4263 if (SvAMAGIC(left)||SvAMAGIC(right))\
4264 *svp = amagic_call(left, \
4272 amagic_ncmp(pTHXo_ register SV *a, register SV *b)
4275 tryCALL_AMAGICbin(a,b,ncmp,&tmpsv);
4280 I32 i = SvIVX(tmpsv);
4290 return sv_ncmp(aTHXo_ a, b);
4294 amagic_i_ncmp(pTHXo_ register SV *a, register SV *b)
4297 tryCALL_AMAGICbin(a,b,ncmp,&tmpsv);
4302 I32 i = SvIVX(tmpsv);
4312 return sv_i_ncmp(aTHXo_ a, b);
4316 amagic_cmp(pTHXo_ register SV *str1, register SV *str2)
4319 tryCALL_AMAGICbin(str1,str2,scmp,&tmpsv);
4324 I32 i = SvIVX(tmpsv);
4334 return sv_cmp(str1, str2);
4338 amagic_cmp_locale(pTHXo_ register SV *str1, register SV *str2)
4341 tryCALL_AMAGICbin(str1,str2,scmp,&tmpsv);
4346 I32 i = SvIVX(tmpsv);
4356 return sv_cmp_locale(str1, str2);
4360 run_user_filter(pTHXo_ int idx, SV *buf_sv, int maxlen)
4362 SV *datasv = FILTER_DATA(idx);
4363 int filter_has_file = IoLINES(datasv);
4364 GV *filter_child_proc = (GV *)IoFMT_GV(datasv);
4365 SV *filter_state = (SV *)IoTOP_GV(datasv);
4366 SV *filter_sub = (SV *)IoBOTTOM_GV(datasv);
4369 /* I was having segfault trouble under Linux 2.2.5 after a
4370 parse error occured. (Had to hack around it with a test
4371 for PL_error_count == 0.) Solaris doesn't segfault --
4372 not sure where the trouble is yet. XXX */
4374 if (filter_has_file) {
4375 len = FILTER_READ(idx+1, buf_sv, maxlen);
4378 if (filter_sub && len >= 0) {
4389 PUSHs(sv_2mortal(newSViv(maxlen)));
4391 PUSHs(filter_state);
4394 count = call_sv(filter_sub, G_SCALAR);
4410 IoLINES(datasv) = 0;
4411 if (filter_child_proc) {
4412 SvREFCNT_dec(filter_child_proc);
4413 IoFMT_GV(datasv) = Nullgv;
4416 SvREFCNT_dec(filter_state);
4417 IoTOP_GV(datasv) = Nullgv;
4420 SvREFCNT_dec(filter_sub);
4421 IoBOTTOM_GV(datasv) = Nullgv;
4423 filter_del(run_user_filter);
4432 sv_cmp_locale_static(pTHXo_ register SV *str1, register SV *str2)
4434 return sv_cmp_locale(str1, str2);
4438 sv_cmp_static(pTHXo_ register SV *str1, register SV *str2)
4440 return sv_cmp(str1, str2);
4443 #endif /* PERL_OBJECT */