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))
30 #define CALLOP this->*PL_op
35 static I32 sortcv(pTHXo_ SV *a, SV *b);
36 static I32 sv_ncmp(pTHXo_ SV *a, SV *b);
37 static I32 sv_i_ncmp(pTHXo_ SV *a, SV *b);
38 static I32 amagic_ncmp(pTHXo_ SV *a, SV *b);
39 static I32 amagic_i_ncmp(pTHXo_ SV *a, SV *b);
40 static I32 amagic_cmp(pTHXo_ SV *a, SV *b);
41 static I32 amagic_cmp_locale(pTHXo_ SV *a, SV *b);
43 static I32 sv_cmp_static(pTHXo_ SV *a, SV *b);
44 static I32 sv_cmp_locale_static(pTHXo_ SV *a, SV *b);
46 #define sv_cmp_static Perl_sv_cmp
47 #define sv_cmp_locale_static Perl_sv_cmp_locale
56 cxix = dopoptosub(cxstack_ix);
60 switch (cxstack[cxix].blk_gimme) {
77 /* XXXX Should store the old value to allow for tie/overload - and
78 restore in regcomp, where marked with XXXX. */
86 register PMOP *pm = (PMOP*)cLOGOP->op_other;
90 MAGIC *mg = Null(MAGIC*);
94 SV *sv = SvRV(tmpstr);
96 mg = mg_find(sv, 'r');
99 regexp *re = (regexp *)mg->mg_obj;
100 ReREFCNT_dec(pm->op_pmregexp);
101 pm->op_pmregexp = ReREFCNT_inc(re);
104 t = SvPV(tmpstr, len);
106 /* Check against the last compiled regexp. */
107 if (!pm->op_pmregexp || !pm->op_pmregexp->precomp ||
108 pm->op_pmregexp->prelen != len ||
109 memNE(pm->op_pmregexp->precomp, t, len))
111 if (pm->op_pmregexp) {
112 ReREFCNT_dec(pm->op_pmregexp);
113 pm->op_pmregexp = Null(REGEXP*); /* crucial if regcomp aborts */
115 if (PL_op->op_flags & OPf_SPECIAL)
116 PL_reginterp_cnt = I32_MAX; /* Mark as safe. */
118 pm->op_pmflags = pm->op_pmpermflags; /* reset case sensitivity */
119 pm->op_pmregexp = CALLREGCOMP(aTHX_ t, t + len, pm);
120 PL_reginterp_cnt = 0; /* XXXX Be extra paranoid - needed
121 inside tie/overload accessors. */
125 #ifndef INCOMPLETE_TAINTS
128 pm->op_pmdynflags |= PMdf_TAINTED;
130 pm->op_pmdynflags &= ~PMdf_TAINTED;
134 if (!pm->op_pmregexp->prelen && PL_curpm)
136 else if (strEQ("\\s+", pm->op_pmregexp->precomp))
137 pm->op_pmflags |= PMf_WHITE;
139 if (pm->op_pmflags & PMf_KEEP) {
140 pm->op_private &= ~OPpRUNTIME; /* no point compiling again */
141 cLOGOP->op_first->op_next = PL_op->op_next;
149 register PMOP *pm = (PMOP*) cLOGOP->op_other;
150 register PERL_CONTEXT *cx = &cxstack[cxstack_ix];
151 register SV *dstr = cx->sb_dstr;
152 register char *s = cx->sb_s;
153 register char *m = cx->sb_m;
154 char *orig = cx->sb_orig;
155 register REGEXP *rx = cx->sb_rx;
157 rxres_restore(&cx->sb_rxres, rx);
159 if (cx->sb_iters++) {
160 if (cx->sb_iters > cx->sb_maxiters)
161 DIE(aTHX_ "Substitution loop");
163 if (!(cx->sb_rxtainted & 2) && SvTAINTED(TOPs))
164 cx->sb_rxtainted |= 2;
165 sv_catsv(dstr, POPs);
168 if (cx->sb_once || !CALLREGEXEC(aTHX_ rx, s, cx->sb_strend, orig,
169 s == m, cx->sb_targ, NULL,
170 ((cx->sb_rflags & REXEC_COPY_STR)
171 ? (REXEC_IGNOREPOS|REXEC_NOT_FIRST)
172 : (REXEC_COPY_STR|REXEC_IGNOREPOS|REXEC_NOT_FIRST))))
174 SV *targ = cx->sb_targ;
175 sv_catpvn(dstr, s, cx->sb_strend - s);
177 cx->sb_rxtainted |= RX_MATCH_TAINTED(rx);
179 (void)SvOOK_off(targ);
180 Safefree(SvPVX(targ));
181 SvPVX(targ) = SvPVX(dstr);
182 SvCUR_set(targ, SvCUR(dstr));
183 SvLEN_set(targ, SvLEN(dstr));
187 TAINT_IF(cx->sb_rxtainted & 1);
188 PUSHs(sv_2mortal(newSViv((I32)cx->sb_iters - 1)));
190 (void)SvPOK_only(targ);
191 TAINT_IF(cx->sb_rxtainted);
195 LEAVE_SCOPE(cx->sb_oldsave);
197 RETURNOP(pm->op_next);
200 if (RX_MATCH_COPIED(rx) && rx->subbeg != orig) {
203 cx->sb_orig = orig = rx->subbeg;
205 cx->sb_strend = s + (cx->sb_strend - m);
207 cx->sb_m = m = rx->startp[0] + orig;
208 sv_catpvn(dstr, s, m-s);
209 cx->sb_s = rx->endp[0] + orig;
210 cx->sb_rxtainted |= RX_MATCH_TAINTED(rx);
211 rxres_save(&cx->sb_rxres, rx);
212 RETURNOP(pm->op_pmreplstart);
216 Perl_rxres_save(pTHX_ void **rsp, REGEXP *rx)
221 if (!p || p[1] < rx->nparens) {
222 i = 6 + rx->nparens * 2;
230 *p++ = (UV)(RX_MATCH_COPIED(rx) ? rx->subbeg : Nullch);
231 RX_MATCH_COPIED_off(rx);
235 *p++ = (UV)rx->subbeg;
236 *p++ = (UV)rx->sublen;
237 for (i = 0; i <= rx->nparens; ++i) {
238 *p++ = (UV)rx->startp[i];
239 *p++ = (UV)rx->endp[i];
244 Perl_rxres_restore(pTHX_ void **rsp, REGEXP *rx)
249 if (RX_MATCH_COPIED(rx))
250 Safefree(rx->subbeg);
251 RX_MATCH_COPIED_set(rx, *p);
256 rx->subbeg = (char*)(*p++);
257 rx->sublen = (I32)(*p++);
258 for (i = 0; i <= rx->nparens; ++i) {
259 rx->startp[i] = (I32)(*p++);
260 rx->endp[i] = (I32)(*p++);
265 Perl_rxres_free(pTHX_ void **rsp)
270 Safefree((char*)(*p));
278 djSP; dMARK; dORIGMARK;
279 register SV *tmpForm = *++MARK;
291 bool chopspace = (strchr(PL_chopset, ' ') != Nullch);
297 STRLEN fudge = SvCUR(tmpForm) * (IN_UTF8 ? 3 : 1) + 1;
299 if (!SvMAGICAL(tmpForm) || !SvCOMPILED(tmpForm)) {
300 SvREADONLY_off(tmpForm);
301 doparseform(tmpForm);
304 SvPV_force(PL_formtarget, len);
305 t = SvGROW(PL_formtarget, len + fudge + 1); /* XXX SvCUR bad */
307 f = SvPV(tmpForm, len);
308 /* need to jump to the next word */
309 s = f + len + WORD_ALIGN - SvCUR(tmpForm) % WORD_ALIGN;
318 case FF_LITERAL: arg = fpc[1]; name = "LITERAL"; break;
319 case FF_BLANK: arg = fpc[1]; name = "BLANK"; break;
320 case FF_SKIP: arg = fpc[1]; name = "SKIP"; break;
321 case FF_FETCH: arg = fpc[1]; name = "FETCH"; break;
322 case FF_DECIMAL: arg = fpc[1]; name = "DECIMAL"; break;
324 case FF_CHECKNL: name = "CHECKNL"; break;
325 case FF_CHECKCHOP: name = "CHECKCHOP"; break;
326 case FF_SPACE: name = "SPACE"; break;
327 case FF_HALFSPACE: name = "HALFSPACE"; break;
328 case FF_ITEM: name = "ITEM"; break;
329 case FF_CHOP: name = "CHOP"; break;
330 case FF_LINEGLOB: name = "LINEGLOB"; break;
331 case FF_NEWLINE: name = "NEWLINE"; break;
332 case FF_MORE: name = "MORE"; break;
333 case FF_LINEMARK: name = "LINEMARK"; break;
334 case FF_END: name = "END"; break;
337 PerlIO_printf(PerlIO_stderr(), "%-16s%ld\n", name, (long) arg);
339 PerlIO_printf(PerlIO_stderr(), "%-16s\n", name);
367 if (ckWARN(WARN_SYNTAX))
368 Perl_warner(aTHX_ WARN_SYNTAX, "Not enough format arguments");
373 item = s = SvPV(sv, len);
376 itemsize = sv_len_utf8(sv);
377 if (itemsize != len) {
379 if (itemsize > fieldsize) {
380 itemsize = fieldsize;
381 itembytes = itemsize;
382 sv_pos_u2b(sv, &itembytes, 0);
386 send = chophere = s + itembytes;
395 sv_pos_b2u(sv, &itemsize);
399 if (itemsize > fieldsize)
400 itemsize = fieldsize;
401 send = chophere = s + itemsize;
413 item = s = SvPV(sv, len);
416 itemsize = sv_len_utf8(sv);
417 if (itemsize != len) {
419 if (itemsize <= fieldsize) {
420 send = chophere = s + itemsize;
431 itemsize = fieldsize;
432 itembytes = itemsize;
433 sv_pos_u2b(sv, &itembytes, 0);
434 send = chophere = s + itembytes;
435 while (s < send || (s == send && isSPACE(*s))) {
445 if (strchr(PL_chopset, *s))
450 itemsize = chophere - item;
451 sv_pos_b2u(sv, &itemsize);
456 if (itemsize <= fieldsize) {
457 send = chophere = s + itemsize;
468 itemsize = fieldsize;
469 send = chophere = s + itemsize;
470 while (s < send || (s == send && isSPACE(*s))) {
480 if (strchr(PL_chopset, *s))
485 itemsize = chophere - item;
490 arg = fieldsize - itemsize;
499 arg = fieldsize - itemsize;
514 switch (UTF8SKIP(s)) {
525 if ( !((*t++ = *s++) & ~31) )
533 int ch = *t++ = *s++;
536 if ( !((*t++ = *s++) & ~31) )
545 while (*s && isSPACE(*s))
552 item = s = SvPV(sv, len);
565 SvCUR_set(PL_formtarget, t - SvPVX(PL_formtarget));
566 sv_catpvn(PL_formtarget, item, itemsize);
567 SvGROW(PL_formtarget, SvCUR(PL_formtarget) + fudge + 1);
568 t = SvPVX(PL_formtarget) + SvCUR(PL_formtarget);
573 /* If the field is marked with ^ and the value is undefined,
576 if ((arg & 512) && !SvOK(sv)) {
584 /* Formats aren't yet marked for locales, so assume "yes". */
586 RESTORE_NUMERIC_LOCAL();
587 #if defined(USE_LONG_DOUBLE)
589 sprintf(t, "%#*.*Lf",
590 (int) fieldsize, (int) arg & 255, value);
592 sprintf(t, "%*.0Lf", (int) fieldsize, value);
597 (int) fieldsize, (int) arg & 255, value);
600 (int) fieldsize, value);
603 RESTORE_NUMERIC_STANDARD();
610 while (t-- > linemark && *t == ' ') ;
618 if (arg) { /* repeat until fields exhausted? */
620 SvCUR_set(PL_formtarget, t - SvPVX(PL_formtarget));
621 lines += FmLINES(PL_formtarget);
624 if (strnEQ(linemark, linemark - arg, arg))
625 DIE(aTHX_ "Runaway format");
627 FmLINES(PL_formtarget) = lines;
629 RETURNOP(cLISTOP->op_first);
642 while (*s && isSPACE(*s) && s < send)
646 arg = fieldsize - itemsize;
653 if (strnEQ(s," ",3)) {
654 while (s > SvPVX(PL_formtarget) && isSPACE(s[-1]))
665 SvCUR_set(PL_formtarget, t - SvPVX(PL_formtarget));
666 FmLINES(PL_formtarget) += lines;
678 if (PL_stack_base + *PL_markstack_ptr == SP) {
680 if (GIMME_V == G_SCALAR)
681 XPUSHs(sv_2mortal(newSViv(0)));
682 RETURNOP(PL_op->op_next->op_next);
684 PL_stack_sp = PL_stack_base + *PL_markstack_ptr + 1;
685 pp_pushmark(); /* push dst */
686 pp_pushmark(); /* push src */
687 ENTER; /* enter outer scope */
690 /* SAVE_DEFSV does *not* suffice here for USE_THREADS */
692 ENTER; /* enter inner scope */
695 src = PL_stack_base[*PL_markstack_ptr];
700 if (PL_op->op_type == OP_MAPSTART)
701 pp_pushmark(); /* push top */
702 return ((LOGOP*)PL_op->op_next)->op_other;
707 DIE(aTHX_ "panic: mapstart"); /* uses grepstart */
713 I32 diff = (SP - PL_stack_base) - *PL_markstack_ptr;
719 ++PL_markstack_ptr[-1];
721 if (diff > PL_markstack_ptr[-1] - PL_markstack_ptr[-2]) {
722 shift = diff - (PL_markstack_ptr[-1] - PL_markstack_ptr[-2]);
723 count = (SP - PL_stack_base) - PL_markstack_ptr[-1] + 2;
728 PL_markstack_ptr[-1] += shift;
729 *PL_markstack_ptr += shift;
733 dst = PL_stack_base + (PL_markstack_ptr[-2] += diff) - 1;
736 *dst-- = SvTEMP(TOPs) ? POPs : sv_mortalcopy(POPs);
738 LEAVE; /* exit inner scope */
741 if (PL_markstack_ptr[-1] > *PL_markstack_ptr) {
745 (void)POPMARK; /* pop top */
746 LEAVE; /* exit outer scope */
747 (void)POPMARK; /* pop src */
748 items = --*PL_markstack_ptr - PL_markstack_ptr[-1];
749 (void)POPMARK; /* pop dst */
750 SP = PL_stack_base + POPMARK; /* pop original mark */
751 if (gimme == G_SCALAR) {
755 else if (gimme == G_ARRAY)
762 ENTER; /* enter inner scope */
765 src = PL_stack_base[PL_markstack_ptr[-1]];
769 RETURNOP(cLOGOP->op_other);
775 djSP; dMARK; dORIGMARK;
777 SV **myorigmark = ORIGMARK;
783 OP* nextop = PL_op->op_next;
786 if (gimme != G_ARRAY) {
792 SAVEPPTR(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 = PL_curcop->cop_stash;
802 cv = sv_2cv(*++MARK, &stash, &gv, 0);
803 if (!(cv && CvROOT(cv))) {
805 SV *tmpstr = sv_newmortal();
806 gv_efullname3(tmpstr, gv, Nullch);
807 if (cv && CvXSUB(cv))
808 DIE(aTHX_ "Xsub \"%s\" called in sort", SvPVX(tmpstr));
809 DIE(aTHX_ "Undefined sort subroutine \"%s\" called",
814 DIE(aTHX_ "Xsub called in sort");
815 DIE(aTHX_ "Undefined subroutine in sort");
817 DIE(aTHX_ "Not a CODE reference in sort");
819 PL_sortcop = CvSTART(cv);
820 SAVESPTR(CvROOT(cv)->op_ppaddr);
821 CvROOT(cv)->op_ppaddr = PL_ppaddr[OP_NULL];
824 PL_curpad = AvARRAY((AV*)AvARRAY(CvPADLIST(cv))[1]);
829 stash = PL_curcop->cop_stash;
833 while (MARK < SP) { /* This may or may not shift down one here. */
835 if (*up = *++MARK) { /* Weed out nulls. */
837 if (!PL_sortcop && !SvPOK(*up)) {
842 (void)sv_2pv(*up, &n_a);
847 max = --up - myorigmark;
852 bool oldcatch = CATCH_GET;
858 PUSHSTACKi(PERLSI_SORT);
859 if (PL_sortstash != stash) {
860 PL_firstgv = gv_fetchpv("a", TRUE, SVt_PV);
861 PL_secondgv = gv_fetchpv("b", TRUE, SVt_PV);
862 PL_sortstash = stash;
865 SAVESPTR(GvSV(PL_firstgv));
866 SAVESPTR(GvSV(PL_secondgv));
868 PUSHBLOCK(cx, CXt_NULL, PL_stack_base);
869 if (!(PL_op->op_flags & OPf_SPECIAL)) {
870 bool hasargs = FALSE;
871 cx->cx_type = CXt_SUB;
872 cx->blk_gimme = G_SCALAR;
875 (void)SvREFCNT_inc(cv); /* in preparation for POPSUB */
877 PL_sortcxix = cxstack_ix;
878 qsortsv((myorigmark+1), max, sortcv);
880 POPBLOCK(cx,PL_curpm);
888 MEXTEND(SP, 20); /* Can't afford stack realloc on signal. */
889 qsortsv(ORIGMARK+1, max,
890 (PL_op->op_private & OPpSORT_NUMERIC)
891 ? ( (PL_op->op_private & OPpSORT_INTEGER)
892 ? ( overloading ? amagic_i_ncmp : sv_i_ncmp)
893 : ( overloading ? amagic_ncmp : sv_ncmp))
894 : ( (PL_op->op_private & OPpLOCALE)
897 : sv_cmp_locale_static)
898 : ( overloading ? amagic_cmp : sv_cmp_static)));
899 if (PL_op->op_private & OPpSORT_REVERSE) {
901 SV **q = ORIGMARK+max;
911 PL_stack_sp = ORIGMARK + max;
919 if (GIMME == G_ARRAY)
921 if (SvTRUEx(PAD_SV(PL_op->op_targ)))
922 return cLOGOP->op_other;
931 if (GIMME == G_ARRAY) {
932 RETURNOP(((LOGOP*)cUNOP->op_first)->op_other);
936 SV *targ = PAD_SV(PL_op->op_targ);
938 if ((PL_op->op_private & OPpFLIP_LINENUM)
939 ? (PL_last_in_gv && SvIV(sv) == (IV)IoLINES(GvIOp(PL_last_in_gv)))
941 sv_setiv(PAD_SV(cUNOP->op_first->op_targ), 1);
942 if (PL_op->op_flags & OPf_SPECIAL) {
950 RETURNOP(((LOGOP*)cUNOP->op_first)->op_other);
963 if (GIMME == G_ARRAY) {
969 if (SvGMAGICAL(left))
971 if (SvGMAGICAL(right))
974 if (SvNIOKp(left) || !SvPOKp(left) ||
975 (looks_like_number(left) && *SvPVX(left) != '0') )
977 if (SvNV(left) < IV_MIN || SvNV(right) > IV_MAX)
978 Perl_croak(aTHX_ "Range iterator outside integer range");
989 sv = sv_2mortal(newSViv(i++));
994 SV *final = sv_mortalcopy(right);
996 char *tmps = SvPV(final, len);
998 sv = sv_mortalcopy(left);
1000 while (!SvNIOKp(sv) && SvCUR(sv) <= len) {
1002 if (strEQ(SvPVX(sv),tmps))
1004 sv = sv_2mortal(newSVsv(sv));
1011 SV *targ = PAD_SV(cUNOP->op_first->op_targ);
1013 if ((PL_op->op_private & OPpFLIP_LINENUM)
1014 ? (PL_last_in_gv && SvIV(sv) == (IV)IoLINES(GvIOp(PL_last_in_gv)))
1016 sv_setiv(PAD_SV(((UNOP*)cUNOP->op_first)->op_first->op_targ), 0);
1017 sv_catpv(targ, "E0");
1028 S_dopoptolabel(pTHX_ char *label)
1032 register PERL_CONTEXT *cx;
1034 for (i = cxstack_ix; i >= 0; i--) {
1036 switch (CxTYPE(cx)) {
1038 if (ckWARN(WARN_UNSAFE))
1039 Perl_warner(aTHX_ WARN_UNSAFE, "Exiting substitution via %s",
1040 PL_op_name[PL_op->op_type]);
1043 if (ckWARN(WARN_UNSAFE))
1044 Perl_warner(aTHX_ WARN_UNSAFE, "Exiting subroutine via %s",
1045 PL_op_name[PL_op->op_type]);
1048 if (ckWARN(WARN_UNSAFE))
1049 Perl_warner(aTHX_ WARN_UNSAFE, "Exiting eval via %s",
1050 PL_op_name[PL_op->op_type]);
1053 if (ckWARN(WARN_UNSAFE))
1054 Perl_warner(aTHX_ WARN_UNSAFE, "Exiting pseudo-block via %s",
1055 PL_op_name[PL_op->op_type]);
1058 if (!cx->blk_loop.label ||
1059 strNE(label, cx->blk_loop.label) ) {
1060 DEBUG_l(Perl_deb(aTHX_ "(Skipping label #%ld %s)\n",
1061 (long)i, cx->blk_loop.label));
1064 DEBUG_l( Perl_deb(aTHX_ "(Found label #%ld %s)\n", (long)i, label));
1072 Perl_dowantarray(pTHX)
1074 I32 gimme = block_gimme();
1075 return (gimme == G_VOID) ? G_SCALAR : gimme;
1079 Perl_block_gimme(pTHX)
1084 cxix = dopoptosub(cxstack_ix);
1088 switch (cxstack[cxix].blk_gimme) {
1096 Perl_croak(aTHX_ "panic: bad gimme: %d\n", cxstack[cxix].blk_gimme);
1103 S_dopoptosub(pTHX_ I32 startingblock)
1106 return dopoptosub_at(cxstack, startingblock);
1110 S_dopoptosub_at(pTHX_ PERL_CONTEXT *cxstk, I32 startingblock)
1114 register PERL_CONTEXT *cx;
1115 for (i = startingblock; i >= 0; i--) {
1117 switch (CxTYPE(cx)) {
1122 DEBUG_l( Perl_deb(aTHX_ "(Found sub #%ld)\n", (long)i));
1130 S_dopoptoeval(pTHX_ I32 startingblock)
1134 register PERL_CONTEXT *cx;
1135 for (i = startingblock; i >= 0; i--) {
1137 switch (CxTYPE(cx)) {
1141 DEBUG_l( Perl_deb(aTHX_ "(Found eval #%ld)\n", (long)i));
1149 S_dopoptoloop(pTHX_ I32 startingblock)
1153 register PERL_CONTEXT *cx;
1154 for (i = startingblock; i >= 0; i--) {
1156 switch (CxTYPE(cx)) {
1158 if (ckWARN(WARN_UNSAFE))
1159 Perl_warner(aTHX_ WARN_UNSAFE, "Exiting substitution via %s",
1160 PL_op_name[PL_op->op_type]);
1163 if (ckWARN(WARN_UNSAFE))
1164 Perl_warner(aTHX_ WARN_UNSAFE, "Exiting subroutine via %s",
1165 PL_op_name[PL_op->op_type]);
1168 if (ckWARN(WARN_UNSAFE))
1169 Perl_warner(aTHX_ WARN_UNSAFE, "Exiting eval via %s",
1170 PL_op_name[PL_op->op_type]);
1173 if (ckWARN(WARN_UNSAFE))
1174 Perl_warner(aTHX_ WARN_UNSAFE, "Exiting pseudo-block via %s",
1175 PL_op_name[PL_op->op_type]);
1178 DEBUG_l( Perl_deb(aTHX_ "(Found loop #%ld)\n", (long)i));
1186 Perl_dounwind(pTHX_ I32 cxix)
1189 register PERL_CONTEXT *cx;
1193 while (cxstack_ix > cxix) {
1194 cx = &cxstack[cxstack_ix];
1195 DEBUG_l(PerlIO_printf(Perl_debug_log, "Unwinding block %ld, type %s\n",
1196 (long) cxstack_ix, PL_block_type[CxTYPE(cx)]));
1197 /* Note: we don't need to restore the base context info till the end. */
1198 switch (CxTYPE(cx)) {
1201 continue; /* not break */
1219 * Closures mentioned at top level of eval cannot be referenced
1220 * again, and their presence indirectly causes a memory leak.
1221 * (Note that the fact that compcv and friends are still set here
1222 * is, AFAIK, an accident.) --Chip
1224 * XXX need to get comppad et al from eval's cv rather than
1225 * relying on the incidental global values.
1228 S_free_closures(pTHX)
1231 SV **svp = AvARRAY(PL_comppad_name);
1233 for (ix = AvFILLp(PL_comppad_name); ix >= 0; ix--) {
1235 if (sv && sv != &PL_sv_undef && *SvPVX(sv) == '&') {
1237 svp[ix] = &PL_sv_undef;
1241 SvREFCNT_dec(CvOUTSIDE(sv));
1242 CvOUTSIDE(sv) = Nullcv;
1255 Perl_die_where(pTHX_ char *message, STRLEN msglen)
1261 register PERL_CONTEXT *cx;
1266 if (PL_in_eval & EVAL_KEEPERR) {
1269 svp = hv_fetch(ERRHV, message, msglen, TRUE);
1272 static char prefix[] = "\t(in cleanup) ";
1274 sv_upgrade(*svp, SVt_IV);
1275 (void)SvIOK_only(*svp);
1278 SvGROW(err, SvCUR(err)+sizeof(prefix)+msglen);
1279 sv_catpvn(err, prefix, sizeof(prefix)-1);
1280 sv_catpvn(err, message, msglen);
1281 if (ckWARN(WARN_UNSAFE)) {
1282 STRLEN start = SvCUR(err)-msglen-sizeof(prefix)+1;
1283 Perl_warner(aTHX_ WARN_UNSAFE, SvPVX(err)+start);
1290 sv_setpvn(ERRSV, message, msglen);
1293 message = SvPVx(ERRSV, msglen);
1295 while ((cxix = dopoptoeval(cxstack_ix)) < 0 && PL_curstackinfo->si_prev) {
1303 if (cxix < cxstack_ix)
1306 POPBLOCK(cx,PL_curpm);
1307 if (CxTYPE(cx) != CXt_EVAL) {
1308 PerlIO_write(PerlIO_stderr(), "panic: die ", 11);
1309 PerlIO_write(PerlIO_stderr(), message, msglen);
1314 if (gimme == G_SCALAR)
1315 *++newsp = &PL_sv_undef;
1316 PL_stack_sp = newsp;
1320 if (optype == OP_REQUIRE) {
1321 char* msg = SvPVx(ERRSV, n_a);
1322 DIE(aTHX_ "%s", *msg ? msg : "Compilation failed in require");
1324 return pop_return();
1328 message = SvPVx(ERRSV, msglen);
1331 /* SFIO can really mess with your errno */
1334 PerlIO_write(PerlIO_stderr(), message, msglen);
1335 (void)PerlIO_flush(PerlIO_stderr());
1348 if (SvTRUE(left) != SvTRUE(right))
1360 RETURNOP(cLOGOP->op_other);
1369 RETURNOP(cLOGOP->op_other);
1375 register I32 cxix = dopoptosub(cxstack_ix);
1376 register PERL_CONTEXT *cx;
1377 register PERL_CONTEXT *ccstack = cxstack;
1378 PERL_SI *top_si = PL_curstackinfo;
1389 /* we may be in a higher stacklevel, so dig down deeper */
1390 while (cxix < 0 && top_si->si_type != PERLSI_MAIN) {
1391 top_si = top_si->si_prev;
1392 ccstack = top_si->si_cxstack;
1393 cxix = dopoptosub_at(ccstack, top_si->si_cxix);
1396 if (GIMME != G_ARRAY)
1400 if (PL_DBsub && cxix >= 0 &&
1401 ccstack[cxix].blk_sub.cv == GvCV(PL_DBsub))
1405 cxix = dopoptosub_at(ccstack, cxix - 1);
1408 cx = &ccstack[cxix];
1409 if (CxTYPE(cx) == CXt_SUB) {
1410 dbcxix = dopoptosub_at(ccstack, cxix - 1);
1411 /* We expect that ccstack[dbcxix] is CXt_SUB, anyway, the
1412 field below is defined for any cx. */
1413 if (PL_DBsub && dbcxix >= 0 && ccstack[dbcxix].blk_sub.cv == GvCV(PL_DBsub))
1414 cx = &ccstack[dbcxix];
1417 if (GIMME != G_ARRAY) {
1418 hv = cx->blk_oldcop->cop_stash;
1420 PUSHs(&PL_sv_undef);
1423 sv_setpv(TARG, HvNAME(hv));
1429 hv = cx->blk_oldcop->cop_stash;
1431 PUSHs(&PL_sv_undef);
1433 PUSHs(sv_2mortal(newSVpv(HvNAME(hv), 0)));
1434 PUSHs(sv_2mortal(newSVpvn(SvPVX(GvSV(cx->blk_oldcop->cop_filegv)),
1435 SvCUR(GvSV(cx->blk_oldcop->cop_filegv)))));
1436 PUSHs(sv_2mortal(newSViv((I32)cx->blk_oldcop->cop_line)));
1439 if (CxTYPE(cx) == CXt_SUB) { /* So is ccstack[dbcxix]. */
1441 gv_efullname3(sv, CvGV(ccstack[cxix].blk_sub.cv), Nullch);
1442 PUSHs(sv_2mortal(sv));
1443 PUSHs(sv_2mortal(newSViv((I32)cx->blk_sub.hasargs)));
1446 PUSHs(sv_2mortal(newSVpvn("(eval)",6)));
1447 PUSHs(sv_2mortal(newSViv(0)));
1449 gimme = (I32)cx->blk_gimme;
1450 if (gimme == G_VOID)
1451 PUSHs(&PL_sv_undef);
1453 PUSHs(sv_2mortal(newSViv(gimme & G_ARRAY)));
1454 if (CxTYPE(cx) == CXt_EVAL) {
1455 if (cx->blk_eval.old_op_type == OP_ENTEREVAL) {
1456 PUSHs(cx->blk_eval.cur_text);
1459 else if (cx->blk_eval.old_name) { /* Try blocks have old_name == 0. */
1460 /* Require, put the name. */
1461 PUSHs(sv_2mortal(newSVpv(cx->blk_eval.old_name, 0)));
1466 PUSHs(&PL_sv_undef);
1467 PUSHs(&PL_sv_undef);
1469 if (CxTYPE(cx) == CXt_SUB && cx->blk_sub.hasargs
1470 && PL_curcop->cop_stash == PL_debstash)
1472 AV *ary = cx->blk_sub.argarray;
1473 int off = AvARRAY(ary) - AvALLOC(ary);
1477 PL_dbargs = GvAV(gv_AVadd(tmpgv = gv_fetchpv("DB::args", TRUE,
1480 AvREAL_off(PL_dbargs); /* XXX Should be REIFY */
1483 if (AvMAX(PL_dbargs) < AvFILLp(ary) + off)
1484 av_extend(PL_dbargs, AvFILLp(ary) + off);
1485 Copy(AvALLOC(ary), AvARRAY(PL_dbargs), AvFILLp(ary) + 1 + off, SV*);
1486 AvFILLp(PL_dbargs) = AvFILLp(ary) + off;
1488 /* XXX only hints propagated via op_private are currently
1489 * visible (others are not easily accessible, since they
1490 * use the global PL_hints) */
1491 PUSHs(sv_2mortal(newSViv((I32)cx->blk_oldcop->op_private &
1492 HINT_PRIVATE_MASK)));
1506 sv_reset(tmps, PL_curcop->cop_stash);
1518 PL_curcop = (COP*)PL_op;
1519 TAINT_NOT; /* Each statement is presumed innocent */
1520 PL_stack_sp = PL_stack_base + cxstack[cxstack_ix].blk_oldsp;
1523 if (PL_op->op_private || SvIV(PL_DBsingle) || SvIV(PL_DBsignal) || SvIV(PL_DBtrace))
1527 register PERL_CONTEXT *cx;
1528 I32 gimme = G_ARRAY;
1535 DIE(aTHX_ "No DB::DB routine defined");
1537 if (CvDEPTH(cv) >= 1 && !(PL_debug & (1<<30))) /* don't do recursive DB::DB call */
1549 push_return(PL_op->op_next);
1550 PUSHBLOCK(cx, CXt_SUB, SP);
1553 (void)SvREFCNT_inc(cv);
1554 SAVESPTR(PL_curpad);
1555 PL_curpad = AvARRAY((AV*)*av_fetch(CvPADLIST(cv),1,FALSE));
1556 RETURNOP(CvSTART(cv));
1570 register PERL_CONTEXT *cx;
1571 I32 gimme = GIMME_V;
1578 if (PL_op->op_flags & OPf_SPECIAL) {
1580 svp = &THREADSV(PL_op->op_targ); /* per-thread variable */
1581 SAVEGENERICSV(*svp);
1585 #endif /* USE_THREADS */
1586 if (PL_op->op_targ) {
1587 svp = &PL_curpad[PL_op->op_targ]; /* "my" variable */
1591 svp = &GvSV((GV*)POPs); /* symbol table variable */
1592 SAVEGENERICSV(*svp);
1598 PUSHBLOCK(cx, CXt_LOOP, SP);
1599 PUSHLOOP(cx, svp, MARK);
1600 if (PL_op->op_flags & OPf_STACKED) {
1601 cx->blk_loop.iterary = (AV*)SvREFCNT_inc(POPs);
1602 if (SvTYPE(cx->blk_loop.iterary) != SVt_PVAV) {
1604 if (SvNIOKp(sv) || !SvPOKp(sv) ||
1605 (looks_like_number(sv) && *SvPVX(sv) != '0')) {
1606 if (SvNV(sv) < IV_MIN ||
1607 SvNV((SV*)cx->blk_loop.iterary) >= IV_MAX)
1608 Perl_croak(aTHX_ "Range iterator outside integer range");
1609 cx->blk_loop.iterix = SvIV(sv);
1610 cx->blk_loop.itermax = SvIV((SV*)cx->blk_loop.iterary);
1613 cx->blk_loop.iterlval = newSVsv(sv);
1617 cx->blk_loop.iterary = PL_curstack;
1618 AvFILLp(PL_curstack) = SP - PL_stack_base;
1619 cx->blk_loop.iterix = MARK - PL_stack_base;
1628 register PERL_CONTEXT *cx;
1629 I32 gimme = GIMME_V;
1635 PUSHBLOCK(cx, CXt_LOOP, SP);
1636 PUSHLOOP(cx, 0, SP);
1644 register PERL_CONTEXT *cx;
1645 struct block_loop cxloop;
1653 POPLOOP1(cx); /* Delay POPLOOP2 until stack values are safe */
1656 if (gimme == G_VOID)
1658 else if (gimme == G_SCALAR) {
1660 *++newsp = sv_mortalcopy(*SP);
1662 *++newsp = &PL_sv_undef;
1666 *++newsp = sv_mortalcopy(*++mark);
1667 TAINT_NOT; /* Each item is independent */
1673 POPLOOP2(); /* Stack values are safe: release loop vars ... */
1674 PL_curpm = newpm; /* ... and pop $1 et al */
1686 register PERL_CONTEXT *cx;
1687 struct block_sub cxsub;
1688 bool popsub2 = FALSE;
1694 if (PL_curstackinfo->si_type == PERLSI_SORT) {
1695 if (cxstack_ix == PL_sortcxix || dopoptosub(cxstack_ix) <= PL_sortcxix) {
1696 if (cxstack_ix > PL_sortcxix)
1697 dounwind(PL_sortcxix);
1698 AvARRAY(PL_curstack)[1] = *SP;
1699 PL_stack_sp = PL_stack_base + 1;
1704 cxix = dopoptosub(cxstack_ix);
1706 DIE(aTHX_ "Can't return outside a subroutine");
1707 if (cxix < cxstack_ix)
1711 switch (CxTYPE(cx)) {
1713 POPSUB1(cx); /* Delay POPSUB2 until stack values are safe */
1718 if (AvFILLp(PL_comppad_name) >= 0)
1721 if (optype == OP_REQUIRE &&
1722 (MARK == SP || (gimme == G_SCALAR && !SvTRUE(*SP))) )
1724 /* Unassume the success we assumed earlier. */
1725 char *name = cx->blk_eval.old_name;
1726 (void)hv_delete(GvHVn(PL_incgv), name, strlen(name), G_DISCARD);
1727 DIE(aTHX_ "%s did not return a true value", name);
1731 DIE(aTHX_ "panic: return");
1735 if (gimme == G_SCALAR) {
1738 if (cxsub.cv && CvDEPTH(cxsub.cv) > 1) {
1740 *++newsp = SvREFCNT_inc(*SP);
1745 *++newsp = sv_mortalcopy(*SP);
1748 *++newsp = (SvTEMP(*SP)) ? *SP : sv_mortalcopy(*SP);
1750 *++newsp = sv_mortalcopy(*SP);
1752 *++newsp = &PL_sv_undef;
1754 else if (gimme == G_ARRAY) {
1755 while (++MARK <= SP) {
1756 *++newsp = (popsub2 && SvTEMP(*MARK))
1757 ? *MARK : sv_mortalcopy(*MARK);
1758 TAINT_NOT; /* Each item is independent */
1761 PL_stack_sp = newsp;
1763 /* Stack values are safe: */
1765 POPSUB2(); /* release CV and @_ ... */
1767 PL_curpm = newpm; /* ... and pop $1 et al */
1770 return pop_return();
1777 register PERL_CONTEXT *cx;
1778 struct block_loop cxloop;
1779 struct block_sub cxsub;
1786 SV **mark = PL_stack_base + cxstack[cxstack_ix].blk_oldsp;
1788 if (PL_op->op_flags & OPf_SPECIAL) {
1789 cxix = dopoptoloop(cxstack_ix);
1791 DIE(aTHX_ "Can't \"last\" outside a block");
1794 cxix = dopoptolabel(cPVOP->op_pv);
1796 DIE(aTHX_ "Label not found for \"last %s\"", cPVOP->op_pv);
1798 if (cxix < cxstack_ix)
1802 switch (CxTYPE(cx)) {
1804 POPLOOP1(cx); /* Delay POPLOOP2 until stack values are safe */
1806 nextop = cxloop.last_op->op_next;
1809 POPSUB1(cx); /* Delay POPSUB2 until stack values are safe */
1811 nextop = pop_return();
1815 nextop = pop_return();
1818 DIE(aTHX_ "panic: last");
1822 if (gimme == G_SCALAR) {
1824 *++newsp = ((pop2 == CXt_SUB) && SvTEMP(*SP))
1825 ? *SP : sv_mortalcopy(*SP);
1827 *++newsp = &PL_sv_undef;
1829 else if (gimme == G_ARRAY) {
1830 while (++MARK <= SP) {
1831 *++newsp = ((pop2 == CXt_SUB) && SvTEMP(*MARK))
1832 ? *MARK : sv_mortalcopy(*MARK);
1833 TAINT_NOT; /* Each item is independent */
1839 /* Stack values are safe: */
1842 POPLOOP2(); /* release loop vars ... */
1846 POPSUB2(); /* release CV and @_ ... */
1849 PL_curpm = newpm; /* ... and pop $1 et al */
1858 register PERL_CONTEXT *cx;
1861 if (PL_op->op_flags & OPf_SPECIAL) {
1862 cxix = dopoptoloop(cxstack_ix);
1864 DIE(aTHX_ "Can't \"next\" outside a block");
1867 cxix = dopoptolabel(cPVOP->op_pv);
1869 DIE(aTHX_ "Label not found for \"next %s\"", cPVOP->op_pv);
1871 if (cxix < cxstack_ix)
1875 oldsave = PL_scopestack[PL_scopestack_ix - 1];
1876 LEAVE_SCOPE(oldsave);
1877 return cx->blk_loop.next_op;
1883 register PERL_CONTEXT *cx;
1886 if (PL_op->op_flags & OPf_SPECIAL) {
1887 cxix = dopoptoloop(cxstack_ix);
1889 DIE(aTHX_ "Can't \"redo\" outside a block");
1892 cxix = dopoptolabel(cPVOP->op_pv);
1894 DIE(aTHX_ "Label not found for \"redo %s\"", cPVOP->op_pv);
1896 if (cxix < cxstack_ix)
1900 oldsave = PL_scopestack[PL_scopestack_ix - 1];
1901 LEAVE_SCOPE(oldsave);
1902 return cx->blk_loop.redo_op;
1906 S_dofindlabel(pTHX_ OP *o, char *label, OP **opstack, OP **oplimit)
1910 static char too_deep[] = "Target of goto is too deeply nested";
1913 Perl_croak(aTHX_ too_deep);
1914 if (o->op_type == OP_LEAVE ||
1915 o->op_type == OP_SCOPE ||
1916 o->op_type == OP_LEAVELOOP ||
1917 o->op_type == OP_LEAVETRY)
1919 *ops++ = cUNOPo->op_first;
1921 Perl_croak(aTHX_ too_deep);
1924 if (o->op_flags & OPf_KIDS) {
1926 /* First try all the kids at this level, since that's likeliest. */
1927 for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling) {
1928 if ((kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE)
1929 && kCOP->cop_label && strEQ(kCOP->cop_label, label))
1934 for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling) {
1935 if (kid == PL_lastgotoprobe)
1937 if ((kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE)
1938 && (ops == opstack || (ops[-1]->op_type != OP_NEXTSTATE
1939 && ops[-1]->op_type != OP_DBSTATE)))
1944 if (o = dofindlabel(kid, label, ops, oplimit))
1962 register PERL_CONTEXT *cx;
1963 #define GOTO_DEPTH 64
1964 OP *enterops[GOTO_DEPTH];
1966 int do_dump = (PL_op->op_type == OP_DUMP);
1967 static char must_have_label[] = "goto must have label";
1970 if (PL_op->op_flags & OPf_STACKED) {
1974 /* This egregious kludge implements goto &subroutine */
1975 if (SvROK(sv) && SvTYPE(SvRV(sv)) == SVt_PVCV) {
1977 register PERL_CONTEXT *cx;
1978 CV* cv = (CV*)SvRV(sv);
1982 int arg_was_real = 0;
1985 if (!CvROOT(cv) && !CvXSUB(cv)) {
1990 /* autoloaded stub? */
1991 if (cv != GvCV(gv) && (cv = GvCV(gv)))
1993 autogv = gv_autoload4(GvSTASH(gv), GvNAME(gv),
1994 GvNAMELEN(gv), FALSE);
1995 if (autogv && (cv = GvCV(autogv)))
1997 tmpstr = sv_newmortal();
1998 gv_efullname3(tmpstr, gv, Nullch);
1999 DIE(aTHX_ "Goto undefined subroutine &%s",SvPVX(tmpstr));
2001 DIE(aTHX_ "Goto undefined subroutine");
2004 /* First do some returnish stuff. */
2005 cxix = dopoptosub(cxstack_ix);
2007 DIE(aTHX_ "Can't goto subroutine outside a subroutine");
2008 if (cxix < cxstack_ix)
2011 if (CxTYPE(cx) == CXt_EVAL && cx->blk_eval.old_op_type == OP_ENTEREVAL)
2012 DIE(aTHX_ "Can't goto subroutine from an eval-string");
2014 if (CxTYPE(cx) == CXt_SUB &&
2015 cx->blk_sub.hasargs) { /* put @_ back onto stack */
2016 AV* av = cx->blk_sub.argarray;
2018 items = AvFILLp(av) + 1;
2020 EXTEND(PL_stack_sp, items); /* @_ could have been extended. */
2021 Copy(AvARRAY(av), PL_stack_sp, items, SV*);
2022 PL_stack_sp += items;
2024 SvREFCNT_dec(GvAV(PL_defgv));
2025 GvAV(PL_defgv) = cx->blk_sub.savearray;
2026 #endif /* USE_THREADS */
2029 AvREAL_off(av); /* so av_clear() won't clobber elts */
2033 else if (CvXSUB(cv)) { /* put GvAV(defgv) back onto stack */
2037 av = (AV*)PL_curpad[0];
2039 av = GvAV(PL_defgv);
2041 items = AvFILLp(av) + 1;
2043 EXTEND(PL_stack_sp, items); /* @_ could have been extended. */
2044 Copy(AvARRAY(av), PL_stack_sp, items, SV*);
2045 PL_stack_sp += items;
2047 if (CxTYPE(cx) == CXt_SUB &&
2048 !(CvDEPTH(cx->blk_sub.cv) = cx->blk_sub.olddepth))
2049 SvREFCNT_dec(cx->blk_sub.cv);
2050 oldsave = PL_scopestack[PL_scopestack_ix - 1];
2051 LEAVE_SCOPE(oldsave);
2053 /* Now do some callish stuff. */
2056 #ifdef PERL_XSUB_OLDSTYLE
2057 if (CvOLDSTYLE(cv)) {
2058 I32 (*fp3)(int,int,int);
2063 fp3 = (I32(*)(int,int,int)))CvXSUB(cv;
2064 items = (*fp3)(CvXSUBANY(cv).any_i32,
2065 mark - PL_stack_base + 1,
2067 SP = PL_stack_base + items;
2070 #endif /* PERL_XSUB_OLDSTYLE */
2075 PL_stack_sp--; /* There is no cv arg. */
2076 /* Push a mark for the start of arglist */
2078 (void)(*CvXSUB(cv))(aTHXo_ cv);
2079 /* Pop the current context like a decent sub should */
2080 POPBLOCK(cx, PL_curpm);
2081 /* Do _not_ use PUTBACK, keep the XSUB's return stack! */
2084 return pop_return();
2087 AV* padlist = CvPADLIST(cv);
2088 SV** svp = AvARRAY(padlist);
2089 if (CxTYPE(cx) == CXt_EVAL) {
2090 PL_in_eval = cx->blk_eval.old_in_eval;
2091 PL_eval_root = cx->blk_eval.old_eval_root;
2092 cx->cx_type = CXt_SUB;
2093 cx->blk_sub.hasargs = 0;
2095 cx->blk_sub.cv = cv;
2096 cx->blk_sub.olddepth = CvDEPTH(cv);
2098 if (CvDEPTH(cv) < 2)
2099 (void)SvREFCNT_inc(cv);
2100 else { /* save temporaries on recursion? */
2101 if (CvDEPTH(cv) == 100 && ckWARN(WARN_RECURSION))
2102 sub_crush_depth(cv);
2103 if (CvDEPTH(cv) > AvFILLp(padlist)) {
2104 AV *newpad = newAV();
2105 SV **oldpad = AvARRAY(svp[CvDEPTH(cv)-1]);
2106 I32 ix = AvFILLp((AV*)svp[1]);
2107 svp = AvARRAY(svp[0]);
2108 for ( ;ix > 0; ix--) {
2109 if (svp[ix] != &PL_sv_undef) {
2110 char *name = SvPVX(svp[ix]);
2111 if ((SvFLAGS(svp[ix]) & SVf_FAKE)
2114 /* outer lexical or anon code */
2115 av_store(newpad, ix,
2116 SvREFCNT_inc(oldpad[ix]) );
2118 else { /* our own lexical */
2120 av_store(newpad, ix, sv = (SV*)newAV());
2121 else if (*name == '%')
2122 av_store(newpad, ix, sv = (SV*)newHV());
2124 av_store(newpad, ix, sv = NEWSV(0,0));
2129 av_store(newpad, ix, sv = NEWSV(0,0));
2133 if (cx->blk_sub.hasargs) {
2136 av_store(newpad, 0, (SV*)av);
2137 AvFLAGS(av) = AVf_REIFY;
2139 av_store(padlist, CvDEPTH(cv), (SV*)newpad);
2140 AvFILLp(padlist) = CvDEPTH(cv);
2141 svp = AvARRAY(padlist);
2145 if (!cx->blk_sub.hasargs) {
2146 AV* av = (AV*)PL_curpad[0];
2148 items = AvFILLp(av) + 1;
2150 /* Mark is at the end of the stack. */
2152 Copy(AvARRAY(av), SP + 1, items, SV*);
2157 #endif /* USE_THREADS */
2158 SAVESPTR(PL_curpad);
2159 PL_curpad = AvARRAY((AV*)svp[CvDEPTH(cv)]);
2161 if (cx->blk_sub.hasargs)
2162 #endif /* USE_THREADS */
2164 AV* av = (AV*)PL_curpad[0];
2168 cx->blk_sub.savearray = GvAV(PL_defgv);
2169 GvAV(PL_defgv) = (AV*)SvREFCNT_inc(av);
2170 #endif /* USE_THREADS */
2171 cx->blk_sub.argarray = av;
2174 if (items >= AvMAX(av) + 1) {
2176 if (AvARRAY(av) != ary) {
2177 AvMAX(av) += AvARRAY(av) - AvALLOC(av);
2178 SvPVX(av) = (char*)ary;
2180 if (items >= AvMAX(av) + 1) {
2181 AvMAX(av) = items - 1;
2182 Renew(ary,items+1,SV*);
2184 SvPVX(av) = (char*)ary;
2187 Copy(mark,AvARRAY(av),items,SV*);
2188 AvFILLp(av) = items - 1;
2189 /* preserve @_ nature */
2200 if (PERLDB_SUB) { /* Checking curstash breaks DProf. */
2202 * We do not care about using sv to call CV;
2203 * it's for informational purposes only.
2205 SV *sv = GvSV(PL_DBsub);
2208 if (PERLDB_SUB_NN) {
2209 SvIVX(sv) = (IV)cv; /* Already upgraded, saved */
2212 gv_efullname3(sv, CvGV(cv), Nullch);
2215 && (gotocv = get_cv("DB::goto", FALSE)) ) {
2216 PUSHMARK( PL_stack_sp );
2217 call_sv((SV*)gotocv, G_SCALAR | G_NODEBUG);
2221 RETURNOP(CvSTART(cv));
2225 label = SvPV(sv,n_a);
2226 if (!(do_dump || *label))
2227 DIE(aTHX_ must_have_label);
2230 else if (PL_op->op_flags & OPf_SPECIAL) {
2232 DIE(aTHX_ must_have_label);
2235 label = cPVOP->op_pv;
2237 if (label && *label) {
2242 PL_lastgotoprobe = 0;
2244 for (ix = cxstack_ix; ix >= 0; ix--) {
2246 switch (CxTYPE(cx)) {
2248 gotoprobe = PL_eval_root; /* XXX not good for nested eval */
2251 gotoprobe = cx->blk_oldcop->op_sibling;
2257 gotoprobe = cx->blk_oldcop->op_sibling;
2259 gotoprobe = PL_main_root;
2262 if (CvDEPTH(cx->blk_sub.cv)) {
2263 gotoprobe = CvROOT(cx->blk_sub.cv);
2268 DIE(aTHX_ "Can't \"goto\" outside a block");
2271 DIE(aTHX_ "panic: goto");
2272 gotoprobe = PL_main_root;
2275 retop = dofindlabel(gotoprobe, label,
2276 enterops, enterops + GOTO_DEPTH);
2279 PL_lastgotoprobe = gotoprobe;
2282 DIE(aTHX_ "Can't find label %s", label);
2284 /* pop unwanted frames */
2286 if (ix < cxstack_ix) {
2293 oldsave = PL_scopestack[PL_scopestack_ix];
2294 LEAVE_SCOPE(oldsave);
2297 /* push wanted frames */
2299 if (*enterops && enterops[1]) {
2301 for (ix = 1; enterops[ix]; ix++) {
2302 PL_op = enterops[ix];
2303 /* Eventually we may want to stack the needed arguments
2304 * for each op. For now, we punt on the hard ones. */
2305 if (PL_op->op_type == OP_ENTERITER)
2306 DIE(aTHX_ "Can't \"goto\" into the middle of a foreach loop",
2308 (CALLOP->op_ppaddr)(aTHX);
2316 if (!retop) retop = PL_main_start;
2318 PL_restartop = retop;
2319 PL_do_undump = TRUE;
2323 PL_restartop = 0; /* hmm, must be GNU unexec().. */
2324 PL_do_undump = FALSE;
2340 if (anum == 1 && VMSISH_EXIT)
2345 PUSHs(&PL_sv_undef);
2353 NV value = SvNVx(GvSV(cCOP->cop_gv));
2354 register I32 match = I_32(value);
2357 if (((NV)match) > value)
2358 --match; /* was fractional--truncate other way */
2360 match -= cCOP->uop.scop.scop_offset;
2363 else if (match > cCOP->uop.scop.scop_max)
2364 match = cCOP->uop.scop.scop_max;
2365 PL_op = cCOP->uop.scop.scop_next[match];
2375 PL_op = PL_op->op_next; /* can't assume anything */
2378 match = *(SvPVx(GvSV(cCOP->cop_gv), n_a)) & 255;
2379 match -= cCOP->uop.scop.scop_offset;
2382 else if (match > cCOP->uop.scop.scop_max)
2383 match = cCOP->uop.scop.scop_max;
2384 PL_op = cCOP->uop.scop.scop_next[match];
2393 S_save_lines(pTHX_ AV *array, SV *sv)
2395 register char *s = SvPVX(sv);
2396 register char *send = SvPVX(sv) + SvCUR(sv);
2398 register I32 line = 1;
2400 while (s && s < send) {
2401 SV *tmpstr = NEWSV(85,0);
2403 sv_upgrade(tmpstr, SVt_PVMG);
2404 t = strchr(s, '\n');
2410 sv_setpvn(tmpstr, s, t - s);
2411 av_store(array, line++, tmpstr);
2417 S_docatch_body(pTHX_ va_list args)
2424 S_docatch(pTHX_ OP *o)
2431 assert(CATCH_GET == TRUE);
2435 CALLPROTECT(aTHX_ &ret, MEMBER_TO_FPTR(S_docatch_body));
2441 PL_op = PL_restartop;
2456 Perl_sv_compile_2op(pTHX_ SV *sv, OP** startop, char *code, AV** avp)
2457 /* sv Text to convert to OP tree. */
2458 /* startop op_free() this to undo. */
2459 /* code Short string id of the caller. */
2461 dSP; /* Make POPBLOCK work. */
2464 I32 gimme = 0; /* SUSPECT - INITIALZE TO WHAT? NI-S */
2467 OP *oop = PL_op, *rop;
2468 char tmpbuf[TYPE_DIGITS(long) + 12 + 10];
2474 /* switch to eval mode */
2476 if (PL_curcop == &PL_compiling) {
2477 SAVESPTR(PL_compiling.cop_stash);
2478 PL_compiling.cop_stash = PL_curstash;
2480 SAVESPTR(PL_compiling.cop_filegv);
2481 SAVEI16(PL_compiling.cop_line);
2482 sprintf(tmpbuf, "_<(%.10s_eval %lu)", code, (unsigned long)++PL_evalseq);
2483 PL_compiling.cop_filegv = gv_fetchfile(tmpbuf+2);
2484 PL_compiling.cop_line = 1;
2485 /* XXX For C<eval "...">s within BEGIN {} blocks, this ends up
2486 deleting the eval's FILEGV from the stash before gv_check() runs
2487 (i.e. before run-time proper). To work around the coredump that
2488 ensues, we always turn GvMULTI_on for any globals that were
2489 introduced within evals. See force_ident(). GSAR 96-10-12 */
2490 safestr = savepv(tmpbuf);
2491 SAVEDELETE(PL_defstash, safestr, strlen(safestr));
2493 #ifdef OP_IN_REGISTER
2501 PL_op->op_type = OP_ENTEREVAL;
2502 PL_op->op_flags = 0; /* Avoid uninit warning. */
2503 PUSHBLOCK(cx, CXt_EVAL, SP);
2504 PUSHEVAL(cx, 0, PL_compiling.cop_filegv);
2505 rop = doeval(G_SCALAR, startop);
2506 POPBLOCK(cx,PL_curpm);
2509 (*startop)->op_type = OP_NULL;
2510 (*startop)->op_ppaddr = PL_ppaddr[OP_NULL];
2512 *avp = (AV*)SvREFCNT_inc(PL_comppad);
2514 if (PL_curcop == &PL_compiling)
2515 PL_compiling.op_private = PL_hints;
2516 #ifdef OP_IN_REGISTER
2522 /* With USE_THREADS, eval_owner must be held on entry to doeval */
2524 S_doeval(pTHX_ int gimme, OP** startop)
2533 PL_in_eval = EVAL_INEVAL;
2537 /* set up a scratch pad */
2540 SAVESPTR(PL_curpad);
2541 SAVESPTR(PL_comppad);
2542 SAVESPTR(PL_comppad_name);
2543 SAVEI32(PL_comppad_name_fill);
2544 SAVEI32(PL_min_intro_pending);
2545 SAVEI32(PL_max_intro_pending);
2548 for (i = cxstack_ix - 1; i >= 0; i--) {
2549 PERL_CONTEXT *cx = &cxstack[i];
2550 if (CxTYPE(cx) == CXt_EVAL)
2552 else if (CxTYPE(cx) == CXt_SUB) {
2553 caller = cx->blk_sub.cv;
2558 SAVESPTR(PL_compcv);
2559 PL_compcv = (CV*)NEWSV(1104,0);
2560 sv_upgrade((SV *)PL_compcv, SVt_PVCV);
2561 CvEVAL_on(PL_compcv);
2563 CvOWNER(PL_compcv) = 0;
2564 New(666, CvMUTEXP(PL_compcv), 1, perl_mutex);
2565 MUTEX_INIT(CvMUTEXP(PL_compcv));
2566 #endif /* USE_THREADS */
2568 PL_comppad = newAV();
2569 av_push(PL_comppad, Nullsv);
2570 PL_curpad = AvARRAY(PL_comppad);
2571 PL_comppad_name = newAV();
2572 PL_comppad_name_fill = 0;
2573 PL_min_intro_pending = 0;
2576 av_store(PL_comppad_name, 0, newSVpvn("@_", 2));
2577 PL_curpad[0] = (SV*)newAV();
2578 SvPADMY_on(PL_curpad[0]); /* XXX Needed? */
2579 #endif /* USE_THREADS */
2581 comppadlist = newAV();
2582 AvREAL_off(comppadlist);
2583 av_store(comppadlist, 0, (SV*)PL_comppad_name);
2584 av_store(comppadlist, 1, (SV*)PL_comppad);
2585 CvPADLIST(PL_compcv) = comppadlist;
2587 if (!saveop || saveop->op_type != OP_REQUIRE)
2588 CvOUTSIDE(PL_compcv) = (CV*)SvREFCNT_inc(caller);
2590 SAVEFREESV(PL_compcv);
2592 /* make sure we compile in the right package */
2594 newstash = PL_curcop->cop_stash;
2595 if (PL_curstash != newstash) {
2596 SAVESPTR(PL_curstash);
2597 PL_curstash = newstash;
2599 SAVESPTR(PL_beginav);
2600 PL_beginav = newAV();
2601 SAVEFREESV(PL_beginav);
2603 /* try to compile it */
2605 PL_eval_root = Nullop;
2607 PL_curcop = &PL_compiling;
2608 PL_curcop->cop_arybase = 0;
2609 SvREFCNT_dec(PL_rs);
2610 PL_rs = newSVpvn("\n", 1);
2611 if (saveop && saveop->op_flags & OPf_SPECIAL)
2612 PL_in_eval |= EVAL_KEEPERR;
2615 if (yyparse() || PL_error_count || !PL_eval_root) {
2619 I32 optype = 0; /* Might be reset by POPEVAL. */
2624 op_free(PL_eval_root);
2625 PL_eval_root = Nullop;
2627 SP = PL_stack_base + POPMARK; /* pop original mark */
2629 POPBLOCK(cx,PL_curpm);
2635 if (optype == OP_REQUIRE) {
2636 char* msg = SvPVx(ERRSV, n_a);
2637 DIE(aTHX_ "%s", *msg ? msg : "Compilation failed in require");
2638 } else if (startop) {
2639 char* msg = SvPVx(ERRSV, n_a);
2641 POPBLOCK(cx,PL_curpm);
2643 Perl_croak(aTHX_ "%sCompilation failed in regexp", (*msg ? msg : "Unknown error\n"));
2645 SvREFCNT_dec(PL_rs);
2646 PL_rs = SvREFCNT_inc(PL_nrs);
2648 MUTEX_LOCK(&PL_eval_mutex);
2650 COND_SIGNAL(&PL_eval_cond);
2651 MUTEX_UNLOCK(&PL_eval_mutex);
2652 #endif /* USE_THREADS */
2655 SvREFCNT_dec(PL_rs);
2656 PL_rs = SvREFCNT_inc(PL_nrs);
2657 PL_compiling.cop_line = 0;
2659 *startop = PL_eval_root;
2660 SvREFCNT_dec(CvOUTSIDE(PL_compcv));
2661 CvOUTSIDE(PL_compcv) = Nullcv;
2663 SAVEFREEOP(PL_eval_root);
2665 scalarvoid(PL_eval_root);
2666 else if (gimme & G_ARRAY)
2669 scalar(PL_eval_root);
2671 DEBUG_x(dump_eval());
2673 /* Register with debugger: */
2674 if (PERLDB_INTER && saveop->op_type == OP_REQUIRE) {
2675 CV *cv = get_cv("DB::postponed", FALSE);
2679 XPUSHs((SV*)PL_compiling.cop_filegv);
2681 call_sv((SV*)cv, G_DISCARD);
2685 /* compiled okay, so do it */
2687 CvDEPTH(PL_compcv) = 1;
2688 SP = PL_stack_base + POPMARK; /* pop original mark */
2689 PL_op = saveop; /* The caller may need it. */
2691 MUTEX_LOCK(&PL_eval_mutex);
2693 COND_SIGNAL(&PL_eval_cond);
2694 MUTEX_UNLOCK(&PL_eval_mutex);
2695 #endif /* USE_THREADS */
2697 RETURNOP(PL_eval_start);
2701 S_doopen_pmc(pTHX_ const char *name, const char *mode)
2703 STRLEN namelen = strlen(name);
2706 if (namelen > 3 && strEQ(name + namelen - 3, ".pm")) {
2707 SV *pmcsv = Perl_newSVpvf(aTHX_ "%s%c", name, 'c');
2708 char *pmc = SvPV_nolen(pmcsv);
2711 if (PerlLIO_stat(pmc, &pmcstat) < 0) {
2712 fp = PerlIO_open(name, mode);
2715 if (PerlLIO_stat(name, &pmstat) < 0 ||
2716 pmstat.st_mtime < pmcstat.st_mtime)
2718 fp = PerlIO_open(pmc, mode);
2721 fp = PerlIO_open(name, mode);
2724 SvREFCNT_dec(pmcsv);
2727 fp = PerlIO_open(name, mode);
2735 register PERL_CONTEXT *cx;
2740 SV *namesv = Nullsv;
2742 I32 gimme = G_SCALAR;
2743 PerlIO *tryrsfp = 0;
2747 if (SvNIOKp(sv) && !SvPOKp(sv)) {
2748 if (Atof(PL_patchlevel) + 0.00000999 < SvNV(sv))
2749 DIE(aTHX_ "Perl %s required--this is only version %s, stopped",
2750 SvPV(sv,n_a),PL_patchlevel);
2753 name = SvPV(sv, len);
2754 if (!(name && len > 0 && *name))
2755 DIE(aTHX_ "Null filename used");
2756 TAINT_PROPER("require");
2757 if (PL_op->op_type == OP_REQUIRE &&
2758 (svp = hv_fetch(GvHVn(PL_incgv), name, len, 0)) &&
2759 *svp != &PL_sv_undef)
2762 /* prepare to compile file */
2767 (name[1] == '.' && name[2] == '/')))
2769 || (name[0] && name[1] == ':')
2772 || (name[0] == '\\' && name[1] == '\\') /* UNC path */
2775 || (strchr(name,':') || ((*name == '[' || *name == '<') &&
2776 (isALNUM(name[1]) || strchr("$-_]>",name[1]))))
2781 tryrsfp = doopen_pmc(name,PERL_SCRIPT_MODE);
2784 AV *ar = GvAVn(PL_incgv);
2788 if ((unixname = tounixspec(name, Nullch)) != Nullch)
2791 namesv = NEWSV(806, 0);
2792 for (i = 0; i <= AvFILL(ar); i++) {
2793 char *dir = SvPVx(*av_fetch(ar, i, TRUE), n_a);
2796 if ((unixdir = tounixpath(dir, Nullch)) == Nullch)
2798 sv_setpv(namesv, unixdir);
2799 sv_catpv(namesv, unixname);
2801 Perl_sv_setpvf(aTHX_ namesv, "%s/%s", dir, name);
2803 TAINT_PROPER("require");
2804 tryname = SvPVX(namesv);
2805 tryrsfp = doopen_pmc(tryname, PERL_SCRIPT_MODE);
2807 if (tryname[0] == '.' && tryname[1] == '/')
2814 SAVESPTR(PL_compiling.cop_filegv);
2815 PL_compiling.cop_filegv = gv_fetchfile(tryrsfp ? tryname : name);
2816 SvREFCNT_dec(namesv);
2818 if (PL_op->op_type == OP_REQUIRE) {
2819 char *msgstr = name;
2820 if (namesv) { /* did we lookup @INC? */
2821 SV *msg = sv_2mortal(newSVpv(msgstr,0));
2822 SV *dirmsgsv = NEWSV(0, 0);
2823 AV *ar = GvAVn(PL_incgv);
2825 sv_catpvn(msg, " in @INC", 8);
2826 if (instr(SvPVX(msg), ".h "))
2827 sv_catpv(msg, " (change .h to .ph maybe?)");
2828 if (instr(SvPVX(msg), ".ph "))
2829 sv_catpv(msg, " (did you run h2ph?)");
2830 sv_catpv(msg, " (@INC contains:");
2831 for (i = 0; i <= AvFILL(ar); i++) {
2832 char *dir = SvPVx(*av_fetch(ar, i, TRUE), n_a);
2833 Perl_sv_setpvf(aTHX_ dirmsgsv, " %s", dir);
2834 sv_catsv(msg, dirmsgsv);
2836 sv_catpvn(msg, ")", 1);
2837 SvREFCNT_dec(dirmsgsv);
2838 msgstr = SvPV_nolen(msg);
2840 DIE(aTHX_ "Can't locate %s", msgstr);
2846 SETERRNO(0, SS$_NORMAL);
2848 /* Assume success here to prevent recursive requirement. */
2849 (void)hv_store(GvHVn(PL_incgv), name, strlen(name),
2850 newSVsv(GvSV(PL_compiling.cop_filegv)), 0 );
2854 lex_start(sv_2mortal(newSVpvn("",0)));
2855 SAVEGENERICSV(PL_rsfp_filters);
2856 PL_rsfp_filters = Nullav;
2859 name = savepv(name);
2863 SAVEPPTR(PL_compiling.cop_warnings);
2864 if (PL_dowarn & G_WARN_ALL_ON)
2865 PL_compiling.cop_warnings = WARN_ALL ;
2866 else if (PL_dowarn & G_WARN_ALL_OFF)
2867 PL_compiling.cop_warnings = WARN_NONE ;
2869 PL_compiling.cop_warnings = WARN_STD ;
2871 /* switch to eval mode */
2873 push_return(PL_op->op_next);
2874 PUSHBLOCK(cx, CXt_EVAL, SP);
2875 PUSHEVAL(cx, name, PL_compiling.cop_filegv);
2877 SAVEI16(PL_compiling.cop_line);
2878 PL_compiling.cop_line = 0;
2882 MUTEX_LOCK(&PL_eval_mutex);
2883 if (PL_eval_owner && PL_eval_owner != thr)
2884 while (PL_eval_owner)
2885 COND_WAIT(&PL_eval_cond, &PL_eval_mutex);
2886 PL_eval_owner = thr;
2887 MUTEX_UNLOCK(&PL_eval_mutex);
2888 #endif /* USE_THREADS */
2889 return DOCATCH(doeval(G_SCALAR, NULL));
2894 return pp_require();
2900 register PERL_CONTEXT *cx;
2902 I32 gimme = GIMME_V, was = PL_sub_generation;
2903 char tmpbuf[TYPE_DIGITS(long) + 12];
2908 if (!SvPV(sv,len) || !len)
2910 TAINT_PROPER("eval");
2916 /* switch to eval mode */
2918 SAVESPTR(PL_compiling.cop_filegv);
2919 sprintf(tmpbuf, "_<(eval %lu)", (unsigned long)++PL_evalseq);
2920 PL_compiling.cop_filegv = gv_fetchfile(tmpbuf+2);
2921 PL_compiling.cop_line = 1;
2922 /* XXX For C<eval "...">s within BEGIN {} blocks, this ends up
2923 deleting the eval's FILEGV from the stash before gv_check() runs
2924 (i.e. before run-time proper). To work around the coredump that
2925 ensues, we always turn GvMULTI_on for any globals that were
2926 introduced within evals. See force_ident(). GSAR 96-10-12 */
2927 safestr = savepv(tmpbuf);
2928 SAVEDELETE(PL_defstash, safestr, strlen(safestr));
2930 PL_hints = PL_op->op_targ;
2931 SAVEPPTR(PL_compiling.cop_warnings);
2932 if (!specialWARN(PL_compiling.cop_warnings)) {
2933 PL_compiling.cop_warnings = newSVsv(PL_compiling.cop_warnings) ;
2934 SAVEFREESV(PL_compiling.cop_warnings) ;
2937 push_return(PL_op->op_next);
2938 PUSHBLOCK(cx, (CXt_EVAL|CXp_REAL), SP);
2939 PUSHEVAL(cx, 0, PL_compiling.cop_filegv);
2941 /* prepare to compile string */
2943 if (PERLDB_LINE && PL_curstash != PL_debstash)
2944 save_lines(GvAV(PL_compiling.cop_filegv), PL_linestr);
2947 MUTEX_LOCK(&PL_eval_mutex);
2948 if (PL_eval_owner && PL_eval_owner != thr)
2949 while (PL_eval_owner)
2950 COND_WAIT(&PL_eval_cond, &PL_eval_mutex);
2951 PL_eval_owner = thr;
2952 MUTEX_UNLOCK(&PL_eval_mutex);
2953 #endif /* USE_THREADS */
2954 ret = doeval(gimme, NULL);
2955 if (PERLDB_INTER && was != PL_sub_generation /* Some subs defined here. */
2956 && ret != PL_op->op_next) { /* Successive compilation. */
2957 strcpy(safestr, "_<(eval )"); /* Anything fake and short. */
2959 return DOCATCH(ret);
2969 register PERL_CONTEXT *cx;
2971 U8 save_flags = PL_op -> op_flags;
2976 retop = pop_return();
2979 if (gimme == G_VOID)
2981 else if (gimme == G_SCALAR) {
2984 if (SvFLAGS(TOPs) & SVs_TEMP)
2987 *MARK = sv_mortalcopy(TOPs);
2991 *MARK = &PL_sv_undef;
2995 /* in case LEAVE wipes old return values */
2996 for (mark = newsp + 1; mark <= SP; mark++) {
2997 if (!(SvFLAGS(*mark) & SVs_TEMP)) {
2998 *mark = sv_mortalcopy(*mark);
2999 TAINT_NOT; /* Each item is independent */
3003 PL_curpm = newpm; /* Don't pop $1 et al till now */
3005 if (AvFILLp(PL_comppad_name) >= 0)
3009 assert(CvDEPTH(PL_compcv) == 1);
3011 CvDEPTH(PL_compcv) = 0;
3014 if (optype == OP_REQUIRE &&
3015 !(gimme == G_SCALAR ? SvTRUE(*SP) : SP > newsp))
3017 /* Unassume the success we assumed earlier. */
3018 char *name = cx->blk_eval.old_name;
3019 (void)hv_delete(GvHVn(PL_incgv), name, strlen(name), G_DISCARD);
3020 retop = Perl_die(aTHX_ "%s did not return a true value", name);
3021 /* die_where() did LEAVE, or we won't be here */
3025 if (!(save_flags & OPf_SPECIAL))
3035 register PERL_CONTEXT *cx;
3036 I32 gimme = GIMME_V;
3041 push_return(cLOGOP->op_other->op_next);
3042 PUSHBLOCK(cx, CXt_EVAL, SP);
3044 PL_eval_root = PL_op; /* Only needed so that goto works right. */
3046 PL_in_eval = EVAL_INEVAL;
3049 return DOCATCH(PL_op->op_next);
3059 register PERL_CONTEXT *cx;
3067 if (gimme == G_VOID)
3069 else if (gimme == G_SCALAR) {
3072 if (SvFLAGS(TOPs) & (SVs_PADTMP|SVs_TEMP))
3075 *MARK = sv_mortalcopy(TOPs);
3079 *MARK = &PL_sv_undef;
3084 /* in case LEAVE wipes old return values */
3085 for (mark = newsp + 1; mark <= SP; mark++) {
3086 if (!(SvFLAGS(*mark) & (SVs_PADTMP|SVs_TEMP))) {
3087 *mark = sv_mortalcopy(*mark);
3088 TAINT_NOT; /* Each item is independent */
3092 PL_curpm = newpm; /* Don't pop $1 et al till now */
3100 S_doparseform(pTHX_ SV *sv)
3103 register char *s = SvPV_force(sv, len);
3104 register char *send = s + len;
3105 register char *base;
3106 register I32 skipspaces = 0;
3109 bool postspace = FALSE;
3117 Perl_croak(aTHX_ "Null picture in formline");
3119 New(804, fops, (send - s)*3+10, U16); /* Almost certainly too long... */
3124 *fpc++ = FF_LINEMARK;
3125 noblank = repeat = FALSE;
3143 case ' ': case '\t':
3154 *fpc++ = FF_LITERAL;
3162 *fpc++ = skipspaces;
3166 *fpc++ = FF_NEWLINE;
3170 arg = fpc - linepc + 1;
3177 *fpc++ = FF_LINEMARK;
3178 noblank = repeat = FALSE;
3187 ischop = s[-1] == '^';
3193 arg = (s - base) - 1;
3195 *fpc++ = FF_LITERAL;
3204 *fpc++ = FF_LINEGLOB;
3206 else if (*s == '#' || (*s == '.' && s[1] == '#')) {
3207 arg = ischop ? 512 : 0;
3217 arg |= 256 + (s - f);
3219 *fpc++ = s - base; /* fieldsize for FETCH */
3220 *fpc++ = FF_DECIMAL;
3225 bool ismore = FALSE;
3228 while (*++s == '>') ;
3229 prespace = FF_SPACE;
3231 else if (*s == '|') {
3232 while (*++s == '|') ;
3233 prespace = FF_HALFSPACE;
3238 while (*++s == '<') ;
3241 if (*s == '.' && s[1] == '.' && s[2] == '.') {
3245 *fpc++ = s - base; /* fieldsize for FETCH */
3247 *fpc++ = ischop ? FF_CHECKCHOP : FF_CHECKNL;
3265 { /* need to jump to the next word */
3267 z = WORD_ALIGN - SvCUR(sv) % WORD_ALIGN;
3268 SvGROW(sv, SvCUR(sv) + z + arg * sizeof(U16) + 4);
3269 s = SvPVX(sv) + SvCUR(sv) + z;
3271 Copy(fops, s, arg, U16);
3273 sv_magic(sv, Nullsv, 'f', Nullch, 0);
3278 * The rest of this file was derived from source code contributed
3281 * NOTE: this code was derived from Tom Horsley's qsort replacement
3282 * and should not be confused with the original code.
3285 /* Copyright (C) Tom Horsley, 1997. All rights reserved.
3287 Permission granted to distribute under the same terms as perl which are
3290 This program is free software; you can redistribute it and/or modify
3291 it under the terms of either:
3293 a) the GNU General Public License as published by the Free
3294 Software Foundation; either version 1, or (at your option) any
3297 b) the "Artistic License" which comes with this Kit.
3299 Details on the perl license can be found in the perl source code which
3300 may be located via the www.perl.com web page.
3302 This is the most wonderfulest possible qsort I can come up with (and
3303 still be mostly portable) My (limited) tests indicate it consistently
3304 does about 20% fewer calls to compare than does the qsort in the Visual
3305 C++ library, other vendors may vary.
3307 Some of the ideas in here can be found in "Algorithms" by Sedgewick,
3308 others I invented myself (or more likely re-invented since they seemed
3309 pretty obvious once I watched the algorithm operate for a while).
3311 Most of this code was written while watching the Marlins sweep the Giants
3312 in the 1997 National League Playoffs - no Braves fans allowed to use this
3313 code (just kidding :-).
3315 I realize that if I wanted to be true to the perl tradition, the only
3316 comment in this file would be something like:
3318 ...they shuffled back towards the rear of the line. 'No, not at the
3319 rear!' the slave-driver shouted. 'Three files up. And stay there...
3321 However, I really needed to violate that tradition just so I could keep
3322 track of what happens myself, not to mention some poor fool trying to
3323 understand this years from now :-).
3326 /* ********************************************************** Configuration */
3328 #ifndef QSORT_ORDER_GUESS
3329 #define QSORT_ORDER_GUESS 2 /* Select doubling version of the netBSD trick */
3332 /* QSORT_MAX_STACK is the largest number of partitions that can be stacked up for
3333 future processing - a good max upper bound is log base 2 of memory size
3334 (32 on 32 bit machines, 64 on 64 bit machines, etc). In reality can
3335 safely be smaller than that since the program is taking up some space and
3336 most operating systems only let you grab some subset of contiguous
3337 memory (not to mention that you are normally sorting data larger than
3338 1 byte element size :-).
3340 #ifndef QSORT_MAX_STACK
3341 #define QSORT_MAX_STACK 32
3344 /* QSORT_BREAK_EVEN is the size of the largest partition we should insertion sort.
3345 Anything bigger and we use qsort. If you make this too small, the qsort
3346 will probably break (or become less efficient), because it doesn't expect
3347 the middle element of a partition to be the same as the right or left -
3348 you have been warned).
3350 #ifndef QSORT_BREAK_EVEN
3351 #define QSORT_BREAK_EVEN 6
3354 /* ************************************************************* Data Types */
3356 /* hold left and right index values of a partition waiting to be sorted (the
3357 partition includes both left and right - right is NOT one past the end or
3358 anything like that).
3360 struct partition_stack_entry {
3363 #ifdef QSORT_ORDER_GUESS
3364 int qsort_break_even;
3368 /* ******************************************************* Shorthand Macros */
3370 /* Note that these macros will be used from inside the qsort function where
3371 we happen to know that the variable 'elt_size' contains the size of an
3372 array element and the variable 'temp' points to enough space to hold a
3373 temp element and the variable 'array' points to the array being sorted
3374 and 'compare' is the pointer to the compare routine.
3376 Also note that there are very many highly architecture specific ways
3377 these might be sped up, but this is simply the most generally portable
3378 code I could think of.
3381 /* Return < 0 == 0 or > 0 as the value of elt1 is < elt2, == elt2, > elt2
3383 #define qsort_cmp(elt1, elt2) \
3384 ((*compare)(aTHXo_ array[elt1], array[elt2]))
3386 #ifdef QSORT_ORDER_GUESS
3387 #define QSORT_NOTICE_SWAP swapped++;
3389 #define QSORT_NOTICE_SWAP
3392 /* swaps contents of array elements elt1, elt2.
3394 #define qsort_swap(elt1, elt2) \
3397 temp = array[elt1]; \
3398 array[elt1] = array[elt2]; \
3399 array[elt2] = temp; \
3402 /* rotate contents of elt1, elt2, elt3 such that elt1 gets elt2, elt2 gets
3403 elt3 and elt3 gets elt1.
3405 #define qsort_rotate(elt1, elt2, elt3) \
3408 temp = array[elt1]; \
3409 array[elt1] = array[elt2]; \
3410 array[elt2] = array[elt3]; \
3411 array[elt3] = temp; \
3414 /* ************************************************************ Debug stuff */
3421 return; /* good place to set a breakpoint */
3424 #define qsort_assert(t) (void)( (t) || (break_here(), 0) )
3427 doqsort_all_asserts(
3431 int (*compare)(const void * elt1, const void * elt2),
3432 int pc_left, int pc_right, int u_left, int u_right)
3436 qsort_assert(pc_left <= pc_right);
3437 qsort_assert(u_right < pc_left);
3438 qsort_assert(pc_right < u_left);
3439 for (i = u_right + 1; i < pc_left; ++i) {
3440 qsort_assert(qsort_cmp(i, pc_left) < 0);
3442 for (i = pc_left; i < pc_right; ++i) {
3443 qsort_assert(qsort_cmp(i, pc_right) == 0);
3445 for (i = pc_right + 1; i < u_left; ++i) {
3446 qsort_assert(qsort_cmp(pc_right, i) < 0);
3450 #define qsort_all_asserts(PC_LEFT, PC_RIGHT, U_LEFT, U_RIGHT) \
3451 doqsort_all_asserts(array, num_elts, elt_size, compare, \
3452 PC_LEFT, PC_RIGHT, U_LEFT, U_RIGHT)
3456 #define qsort_assert(t) ((void)0)
3458 #define qsort_all_asserts(PC_LEFT, PC_RIGHT, U_LEFT, U_RIGHT) ((void)0)
3462 /* ****************************************************************** qsort */
3465 S_qsortsv(pTHX_ SV ** array, size_t num_elts, SVCOMPARE_t compare)
3469 struct partition_stack_entry partition_stack[QSORT_MAX_STACK];
3470 int next_stack_entry = 0;
3474 #ifdef QSORT_ORDER_GUESS
3475 int qsort_break_even;
3479 /* Make sure we actually have work to do.
3481 if (num_elts <= 1) {
3485 /* Setup the initial partition definition and fall into the sorting loop
3488 part_right = (int)(num_elts - 1);
3489 #ifdef QSORT_ORDER_GUESS
3490 qsort_break_even = QSORT_BREAK_EVEN;
3492 #define qsort_break_even QSORT_BREAK_EVEN
3495 if ((part_right - part_left) >= qsort_break_even) {
3496 /* OK, this is gonna get hairy, so lets try to document all the
3497 concepts and abbreviations and variables and what they keep
3500 pc: pivot chunk - the set of array elements we accumulate in the
3501 middle of the partition, all equal in value to the original
3502 pivot element selected. The pc is defined by:
3504 pc_left - the leftmost array index of the pc
3505 pc_right - the rightmost array index of the pc
3507 we start with pc_left == pc_right and only one element
3508 in the pivot chunk (but it can grow during the scan).
3510 u: uncompared elements - the set of elements in the partition
3511 we have not yet compared to the pivot value. There are two
3512 uncompared sets during the scan - one to the left of the pc
3513 and one to the right.
3515 u_right - the rightmost index of the left side's uncompared set
3516 u_left - the leftmost index of the right side's uncompared set
3518 The leftmost index of the left sides's uncompared set
3519 doesn't need its own variable because it is always defined
3520 by the leftmost edge of the whole partition (part_left). The
3521 same goes for the rightmost edge of the right partition
3524 We know there are no uncompared elements on the left once we
3525 get u_right < part_left and no uncompared elements on the
3526 right once u_left > part_right. When both these conditions
3527 are met, we have completed the scan of the partition.
3529 Any elements which are between the pivot chunk and the
3530 uncompared elements should be less than the pivot value on
3531 the left side and greater than the pivot value on the right
3532 side (in fact, the goal of the whole algorithm is to arrange
3533 for that to be true and make the groups of less-than and
3534 greater-then elements into new partitions to sort again).
3536 As you marvel at the complexity of the code and wonder why it
3537 has to be so confusing. Consider some of the things this level
3538 of confusion brings:
3540 Once I do a compare, I squeeze every ounce of juice out of it. I
3541 never do compare calls I don't have to do, and I certainly never
3544 I also never swap any elements unless I can prove there is a
3545 good reason. Many sort algorithms will swap a known value with
3546 an uncompared value just to get things in the right place (or
3547 avoid complexity :-), but that uncompared value, once it gets
3548 compared, may then have to be swapped again. A lot of the
3549 complexity of this code is due to the fact that it never swaps
3550 anything except compared values, and it only swaps them when the
3551 compare shows they are out of position.
3553 int pc_left, pc_right;
3554 int u_right, u_left;
3558 pc_left = ((part_left + part_right) / 2);
3560 u_right = pc_left - 1;
3561 u_left = pc_right + 1;
3563 /* Qsort works best when the pivot value is also the median value
3564 in the partition (unfortunately you can't find the median value
3565 without first sorting :-), so to give the algorithm a helping
3566 hand, we pick 3 elements and sort them and use the median value
3567 of that tiny set as the pivot value.
3569 Some versions of qsort like to use the left middle and right as
3570 the 3 elements to sort so they can insure the ends of the
3571 partition will contain values which will stop the scan in the
3572 compare loop, but when you have to call an arbitrarily complex
3573 routine to do a compare, its really better to just keep track of
3574 array index values to know when you hit the edge of the
3575 partition and avoid the extra compare. An even better reason to
3576 avoid using a compare call is the fact that you can drop off the
3577 edge of the array if someone foolishly provides you with an
3578 unstable compare function that doesn't always provide consistent
3581 So, since it is simpler for us to compare the three adjacent
3582 elements in the middle of the partition, those are the ones we
3583 pick here (conveniently pointed at by u_right, pc_left, and
3584 u_left). The values of the left, center, and right elements
3585 are refered to as l c and r in the following comments.
3588 #ifdef QSORT_ORDER_GUESS
3591 s = qsort_cmp(u_right, pc_left);
3594 s = qsort_cmp(pc_left, u_left);
3595 /* if l < c, c < r - already in order - nothing to do */
3597 /* l < c, c == r - already in order, pc grows */
3599 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3601 /* l < c, c > r - need to know more */
3602 s = qsort_cmp(u_right, u_left);
3604 /* l < c, c > r, l < r - swap c & r to get ordered */
3605 qsort_swap(pc_left, u_left);
3606 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3607 } else if (s == 0) {
3608 /* l < c, c > r, l == r - swap c&r, grow pc */
3609 qsort_swap(pc_left, u_left);
3611 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3613 /* l < c, c > r, l > r - make lcr into rlc to get ordered */
3614 qsort_rotate(pc_left, u_right, u_left);
3615 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3618 } else if (s == 0) {
3620 s = qsort_cmp(pc_left, u_left);
3622 /* l == c, c < r - already in order, grow pc */
3624 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3625 } else if (s == 0) {
3626 /* l == c, c == r - already in order, grow pc both ways */
3629 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3631 /* l == c, c > r - swap l & r, grow pc */
3632 qsort_swap(u_right, u_left);
3634 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3638 s = qsort_cmp(pc_left, u_left);
3640 /* l > c, c < r - need to know more */
3641 s = qsort_cmp(u_right, u_left);
3643 /* l > c, c < r, l < r - swap l & c to get ordered */
3644 qsort_swap(u_right, pc_left);
3645 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3646 } else if (s == 0) {
3647 /* l > c, c < r, l == r - swap l & c, grow pc */
3648 qsort_swap(u_right, pc_left);
3650 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3652 /* l > c, c < r, l > r - rotate lcr into crl to order */
3653 qsort_rotate(u_right, pc_left, u_left);
3654 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3656 } else if (s == 0) {
3657 /* l > c, c == r - swap ends, grow pc */
3658 qsort_swap(u_right, u_left);
3660 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3662 /* l > c, c > r - swap ends to get in order */
3663 qsort_swap(u_right, u_left);
3664 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3667 /* We now know the 3 middle elements have been compared and
3668 arranged in the desired order, so we can shrink the uncompared
3673 qsort_all_asserts(pc_left, pc_right, u_left, u_right);
3675 /* The above massive nested if was the simple part :-). We now have
3676 the middle 3 elements ordered and we need to scan through the
3677 uncompared sets on either side, swapping elements that are on
3678 the wrong side or simply shuffling equal elements around to get
3679 all equal elements into the pivot chunk.
3683 int still_work_on_left;
3684 int still_work_on_right;
3686 /* Scan the uncompared values on the left. If I find a value
3687 equal to the pivot value, move it over so it is adjacent to
3688 the pivot chunk and expand the pivot chunk. If I find a value
3689 less than the pivot value, then just leave it - its already
3690 on the correct side of the partition. If I find a greater
3691 value, then stop the scan.
3693 while (still_work_on_left = (u_right >= part_left)) {
3694 s = qsort_cmp(u_right, pc_left);
3697 } else if (s == 0) {
3699 if (pc_left != u_right) {
3700 qsort_swap(u_right, pc_left);
3706 qsort_assert(u_right < pc_left);
3707 qsort_assert(pc_left <= pc_right);
3708 qsort_assert(qsort_cmp(u_right + 1, pc_left) <= 0);
3709 qsort_assert(qsort_cmp(pc_left, pc_right) == 0);
3712 /* Do a mirror image scan of uncompared values on the right
3714 while (still_work_on_right = (u_left <= part_right)) {
3715 s = qsort_cmp(pc_right, u_left);
3718 } else if (s == 0) {
3720 if (pc_right != u_left) {
3721 qsort_swap(pc_right, u_left);
3727 qsort_assert(u_left > pc_right);
3728 qsort_assert(pc_left <= pc_right);
3729 qsort_assert(qsort_cmp(pc_right, u_left - 1) <= 0);
3730 qsort_assert(qsort_cmp(pc_left, pc_right) == 0);
3733 if (still_work_on_left) {
3734 /* I know I have a value on the left side which needs to be
3735 on the right side, but I need to know more to decide
3736 exactly the best thing to do with it.
3738 if (still_work_on_right) {
3739 /* I know I have values on both side which are out of
3740 position. This is a big win because I kill two birds
3741 with one swap (so to speak). I can advance the
3742 uncompared pointers on both sides after swapping both
3743 of them into the right place.
3745 qsort_swap(u_right, u_left);
3748 qsort_all_asserts(pc_left, pc_right, u_left, u_right);
3750 /* I have an out of position value on the left, but the
3751 right is fully scanned, so I "slide" the pivot chunk
3752 and any less-than values left one to make room for the
3753 greater value over on the right. If the out of position
3754 value is immediately adjacent to the pivot chunk (there
3755 are no less-than values), I can do that with a swap,
3756 otherwise, I have to rotate one of the less than values
3757 into the former position of the out of position value
3758 and the right end of the pivot chunk into the left end
3762 if (pc_left == u_right) {
3763 qsort_swap(u_right, pc_right);
3764 qsort_all_asserts(pc_left, pc_right-1, u_left, u_right-1);
3766 qsort_rotate(u_right, pc_left, pc_right);
3767 qsort_all_asserts(pc_left, pc_right-1, u_left, u_right-1);
3772 } else if (still_work_on_right) {
3773 /* Mirror image of complex case above: I have an out of
3774 position value on the right, but the left is fully
3775 scanned, so I need to shuffle things around to make room
3776 for the right value on the left.
3779 if (pc_right == u_left) {
3780 qsort_swap(u_left, pc_left);
3781 qsort_all_asserts(pc_left+1, pc_right, u_left+1, u_right);
3783 qsort_rotate(pc_right, pc_left, u_left);
3784 qsort_all_asserts(pc_left+1, pc_right, u_left+1, u_right);
3789 /* No more scanning required on either side of partition,
3790 break out of loop and figure out next set of partitions
3796 /* The elements in the pivot chunk are now in the right place. They
3797 will never move or be compared again. All I have to do is decide
3798 what to do with the stuff to the left and right of the pivot
3801 Notes on the QSORT_ORDER_GUESS ifdef code:
3803 1. If I just built these partitions without swapping any (or
3804 very many) elements, there is a chance that the elements are
3805 already ordered properly (being properly ordered will
3806 certainly result in no swapping, but the converse can't be
3809 2. A (properly written) insertion sort will run faster on
3810 already ordered data than qsort will.
3812 3. Perhaps there is some way to make a good guess about
3813 switching to an insertion sort earlier than partition size 6
3814 (for instance - we could save the partition size on the stack
3815 and increase the size each time we find we didn't swap, thus
3816 switching to insertion sort earlier for partitions with a
3817 history of not swapping).
3819 4. Naturally, if I just switch right away, it will make
3820 artificial benchmarks with pure ascending (or descending)
3821 data look really good, but is that a good reason in general?
3825 #ifdef QSORT_ORDER_GUESS
3827 #if QSORT_ORDER_GUESS == 1
3828 qsort_break_even = (part_right - part_left) + 1;
3830 #if QSORT_ORDER_GUESS == 2
3831 qsort_break_even *= 2;
3833 #if QSORT_ORDER_GUESS == 3
3834 int prev_break = qsort_break_even;
3835 qsort_break_even *= qsort_break_even;
3836 if (qsort_break_even < prev_break) {
3837 qsort_break_even = (part_right - part_left) + 1;
3841 qsort_break_even = QSORT_BREAK_EVEN;
3845 if (part_left < pc_left) {
3846 /* There are elements on the left which need more processing.
3847 Check the right as well before deciding what to do.
3849 if (pc_right < part_right) {
3850 /* We have two partitions to be sorted. Stack the biggest one
3851 and process the smallest one on the next iteration. This
3852 minimizes the stack height by insuring that any additional
3853 stack entries must come from the smallest partition which
3854 (because it is smallest) will have the fewest
3855 opportunities to generate additional stack entries.
3857 if ((part_right - pc_right) > (pc_left - part_left)) {
3858 /* stack the right partition, process the left */
3859 partition_stack[next_stack_entry].left = pc_right + 1;
3860 partition_stack[next_stack_entry].right = part_right;
3861 #ifdef QSORT_ORDER_GUESS
3862 partition_stack[next_stack_entry].qsort_break_even = qsort_break_even;
3864 part_right = pc_left - 1;
3866 /* stack the left partition, process the right */
3867 partition_stack[next_stack_entry].left = part_left;
3868 partition_stack[next_stack_entry].right = pc_left - 1;
3869 #ifdef QSORT_ORDER_GUESS
3870 partition_stack[next_stack_entry].qsort_break_even = qsort_break_even;
3872 part_left = pc_right + 1;
3874 qsort_assert(next_stack_entry < QSORT_MAX_STACK);
3877 /* The elements on the left are the only remaining elements
3878 that need sorting, arrange for them to be processed as the
3881 part_right = pc_left - 1;
3883 } else if (pc_right < part_right) {
3884 /* There is only one chunk on the right to be sorted, make it
3885 the new partition and loop back around.
3887 part_left = pc_right + 1;
3889 /* This whole partition wound up in the pivot chunk, so
3890 we need to get a new partition off the stack.
3892 if (next_stack_entry == 0) {
3893 /* the stack is empty - we are done */
3897 part_left = partition_stack[next_stack_entry].left;
3898 part_right = partition_stack[next_stack_entry].right;
3899 #ifdef QSORT_ORDER_GUESS
3900 qsort_break_even = partition_stack[next_stack_entry].qsort_break_even;
3904 /* This partition is too small to fool with qsort complexity, just
3905 do an ordinary insertion sort to minimize overhead.
3908 /* Assume 1st element is in right place already, and start checking
3909 at 2nd element to see where it should be inserted.
3911 for (i = part_left + 1; i <= part_right; ++i) {
3913 /* Scan (backwards - just in case 'i' is already in right place)
3914 through the elements already sorted to see if the ith element
3915 belongs ahead of one of them.
3917 for (j = i - 1; j >= part_left; --j) {
3918 if (qsort_cmp(i, j) >= 0) {
3919 /* i belongs right after j
3926 /* Looks like we really need to move some things
3930 for (k = i - 1; k >= j; --k)
3931 array[k + 1] = array[k];
3936 /* That partition is now sorted, grab the next one, or get out
3937 of the loop if there aren't any more.
3940 if (next_stack_entry == 0) {
3941 /* the stack is empty - we are done */
3945 part_left = partition_stack[next_stack_entry].left;
3946 part_right = partition_stack[next_stack_entry].right;
3947 #ifdef QSORT_ORDER_GUESS
3948 qsort_break_even = partition_stack[next_stack_entry].qsort_break_even;
3953 /* Believe it or not, the array is sorted at this point! */
3966 sortcv(pTHXo_ SV *a, SV *b)
3969 I32 oldsaveix = PL_savestack_ix;
3970 I32 oldscopeix = PL_scopestack_ix;
3972 GvSV(PL_firstgv) = a;
3973 GvSV(PL_secondgv) = b;
3974 PL_stack_sp = PL_stack_base;
3977 if (PL_stack_sp != PL_stack_base + 1)
3978 Perl_croak(aTHX_ "Sort subroutine didn't return single value");
3979 if (!SvNIOKp(*PL_stack_sp))
3980 Perl_croak(aTHX_ "Sort subroutine didn't return a numeric value");
3981 result = SvIV(*PL_stack_sp);
3982 while (PL_scopestack_ix > oldscopeix) {
3985 leave_scope(oldsaveix);
3991 sv_ncmp(pTHXo_ SV *a, SV *b)
3995 return nv1 < nv2 ? -1 : nv1 > nv2 ? 1 : 0;
3999 sv_i_ncmp(pTHXo_ SV *a, SV *b)
4003 return iv1 < iv2 ? -1 : iv1 > iv2 ? 1 : 0;
4005 #define tryCALL_AMAGICbin(left,right,meth,svp) STMT_START { \
4007 if (PL_amagic_generation) { \
4008 if (SvAMAGIC(left)||SvAMAGIC(right))\
4009 *svp = amagic_call(left, \
4017 amagic_ncmp(pTHXo_ register SV *a, register SV *b)
4020 tryCALL_AMAGICbin(a,b,ncmp,&tmpsv);
4025 I32 i = SvIVX(tmpsv);
4035 return sv_ncmp(aTHXo_ a, b);
4039 amagic_i_ncmp(pTHXo_ register SV *a, register SV *b)
4042 tryCALL_AMAGICbin(a,b,ncmp,&tmpsv);
4047 I32 i = SvIVX(tmpsv);
4057 return sv_i_ncmp(aTHXo_ a, b);
4061 amagic_cmp(pTHXo_ register SV *str1, register SV *str2)
4064 tryCALL_AMAGICbin(str1,str2,scmp,&tmpsv);
4069 I32 i = SvIVX(tmpsv);
4079 return sv_cmp(str1, str2);
4083 amagic_cmp_locale(pTHXo_ register SV *str1, register SV *str2)
4086 tryCALL_AMAGICbin(str1,str2,scmp,&tmpsv);
4091 I32 i = SvIVX(tmpsv);
4101 return sv_cmp_locale(str1, str2);
4107 sv_cmp_locale_static(pTHXo_ register SV *str1, register SV *str2)
4109 return sv_cmp_locale(str1, str2);
4113 sv_cmp_static(pTHXo_ register SV *str1, register SV *str2)
4115 return sv_cmp(str1, str2);
4118 #endif /* PERL_OBJECT */