3 * Copyright (c) 1991-2000, 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 */
118 pm->op_pmdynflags |= PMdf_UTF8;
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 /* XXX runtime compiled output needs to move to the pad */
140 if (pm->op_pmflags & PMf_KEEP) {
141 pm->op_private &= ~OPpRUNTIME; /* no point compiling again */
142 #if !defined(USE_ITHREADS) && !defined(USE_THREADS)
143 /* XXX can't change the optree at runtime either */
144 cLOGOP->op_first->op_next = PL_op->op_next;
153 register PMOP *pm = (PMOP*) cLOGOP->op_other;
154 register PERL_CONTEXT *cx = &cxstack[cxstack_ix];
155 register SV *dstr = cx->sb_dstr;
156 register char *s = cx->sb_s;
157 register char *m = cx->sb_m;
158 char *orig = cx->sb_orig;
159 register REGEXP *rx = cx->sb_rx;
161 rxres_restore(&cx->sb_rxres, rx);
163 if (cx->sb_iters++) {
164 if (cx->sb_iters > cx->sb_maxiters)
165 DIE(aTHX_ "Substitution loop");
167 if (!(cx->sb_rxtainted & 2) && SvTAINTED(TOPs))
168 cx->sb_rxtainted |= 2;
169 sv_catsv(dstr, POPs);
172 if (cx->sb_once || !CALLREGEXEC(aTHX_ rx, s, cx->sb_strend, orig,
173 s == m, cx->sb_targ, NULL,
174 ((cx->sb_rflags & REXEC_COPY_STR)
175 ? (REXEC_IGNOREPOS|REXEC_NOT_FIRST)
176 : (REXEC_COPY_STR|REXEC_IGNOREPOS|REXEC_NOT_FIRST))))
178 SV *targ = cx->sb_targ;
179 sv_catpvn(dstr, s, cx->sb_strend - s);
181 cx->sb_rxtainted |= RX_MATCH_TAINTED(rx);
183 (void)SvOOK_off(targ);
184 Safefree(SvPVX(targ));
185 SvPVX(targ) = SvPVX(dstr);
186 SvCUR_set(targ, SvCUR(dstr));
187 SvLEN_set(targ, SvLEN(dstr));
191 TAINT_IF(cx->sb_rxtainted & 1);
192 PUSHs(sv_2mortal(newSViv((I32)cx->sb_iters - 1)));
194 (void)SvPOK_only(targ);
195 TAINT_IF(cx->sb_rxtainted);
199 LEAVE_SCOPE(cx->sb_oldsave);
201 RETURNOP(pm->op_next);
204 if (RX_MATCH_COPIED(rx) && rx->subbeg != orig) {
207 cx->sb_orig = orig = rx->subbeg;
209 cx->sb_strend = s + (cx->sb_strend - m);
211 cx->sb_m = m = rx->startp[0] + orig;
212 sv_catpvn(dstr, s, m-s);
213 cx->sb_s = rx->endp[0] + orig;
214 cx->sb_rxtainted |= RX_MATCH_TAINTED(rx);
215 rxres_save(&cx->sb_rxres, rx);
216 RETURNOP(pm->op_pmreplstart);
220 Perl_rxres_save(pTHX_ void **rsp, REGEXP *rx)
225 if (!p || p[1] < rx->nparens) {
226 i = 6 + rx->nparens * 2;
234 *p++ = PTR2UV(RX_MATCH_COPIED(rx) ? rx->subbeg : Nullch);
235 RX_MATCH_COPIED_off(rx);
239 *p++ = PTR2UV(rx->subbeg);
240 *p++ = (UV)rx->sublen;
241 for (i = 0; i <= rx->nparens; ++i) {
242 *p++ = (UV)rx->startp[i];
243 *p++ = (UV)rx->endp[i];
248 Perl_rxres_restore(pTHX_ void **rsp, REGEXP *rx)
253 if (RX_MATCH_COPIED(rx))
254 Safefree(rx->subbeg);
255 RX_MATCH_COPIED_set(rx, *p);
260 rx->subbeg = INT2PTR(char*,*p++);
261 rx->sublen = (I32)(*p++);
262 for (i = 0; i <= rx->nparens; ++i) {
263 rx->startp[i] = (I32)(*p++);
264 rx->endp[i] = (I32)(*p++);
269 Perl_rxres_free(pTHX_ void **rsp)
274 Safefree(INT2PTR(char*,*p));
282 djSP; dMARK; dORIGMARK;
283 register SV *tmpForm = *++MARK;
295 bool chopspace = (strchr(PL_chopset, ' ') != Nullch);
301 STRLEN fudge = SvCUR(tmpForm) * (IN_BYTE ? 1 : 3) + 1;
302 bool item_is_utf = FALSE;
304 if (!SvMAGICAL(tmpForm) || !SvCOMPILED(tmpForm)) {
305 if (SvREADONLY(tmpForm)) {
306 SvREADONLY_off(tmpForm);
307 doparseform(tmpForm);
308 SvREADONLY_on(tmpForm);
311 doparseform(tmpForm);
314 SvPV_force(PL_formtarget, len);
315 t = SvGROW(PL_formtarget, len + fudge + 1); /* XXX SvCUR bad */
317 f = SvPV(tmpForm, len);
318 /* need to jump to the next word */
319 s = f + len + WORD_ALIGN - SvCUR(tmpForm) % WORD_ALIGN;
328 case FF_LITERAL: arg = fpc[1]; name = "LITERAL"; break;
329 case FF_BLANK: arg = fpc[1]; name = "BLANK"; break;
330 case FF_SKIP: arg = fpc[1]; name = "SKIP"; break;
331 case FF_FETCH: arg = fpc[1]; name = "FETCH"; break;
332 case FF_DECIMAL: arg = fpc[1]; name = "DECIMAL"; break;
334 case FF_CHECKNL: name = "CHECKNL"; break;
335 case FF_CHECKCHOP: name = "CHECKCHOP"; break;
336 case FF_SPACE: name = "SPACE"; break;
337 case FF_HALFSPACE: name = "HALFSPACE"; break;
338 case FF_ITEM: name = "ITEM"; break;
339 case FF_CHOP: name = "CHOP"; break;
340 case FF_LINEGLOB: name = "LINEGLOB"; break;
341 case FF_NEWLINE: name = "NEWLINE"; break;
342 case FF_MORE: name = "MORE"; break;
343 case FF_LINEMARK: name = "LINEMARK"; break;
344 case FF_END: name = "END"; break;
347 PerlIO_printf(Perl_debug_log, "%-16s%ld\n", name, (long) arg);
349 PerlIO_printf(Perl_debug_log, "%-16s\n", name);
377 if (ckWARN(WARN_SYNTAX))
378 Perl_warner(aTHX_ WARN_SYNTAX, "Not enough format arguments");
383 item = s = SvPV(sv, len);
386 itemsize = sv_len_utf8(sv);
387 if (itemsize != len) {
389 if (itemsize > fieldsize) {
390 itemsize = fieldsize;
391 itembytes = itemsize;
392 sv_pos_u2b(sv, &itembytes, 0);
396 send = chophere = s + itembytes;
406 sv_pos_b2u(sv, &itemsize);
411 if (itemsize > fieldsize)
412 itemsize = fieldsize;
413 send = chophere = s + itemsize;
425 item = s = SvPV(sv, len);
428 itemsize = sv_len_utf8(sv);
429 if (itemsize != len) {
431 if (itemsize <= fieldsize) {
432 send = chophere = s + itemsize;
443 itemsize = fieldsize;
444 itembytes = itemsize;
445 sv_pos_u2b(sv, &itembytes, 0);
446 send = chophere = s + itembytes;
447 while (s < send || (s == send && isSPACE(*s))) {
457 if (strchr(PL_chopset, *s))
462 itemsize = chophere - item;
463 sv_pos_b2u(sv, &itemsize);
470 if (itemsize <= fieldsize) {
471 send = chophere = s + itemsize;
482 itemsize = fieldsize;
483 send = chophere = s + itemsize;
484 while (s < send || (s == send && isSPACE(*s))) {
494 if (strchr(PL_chopset, *s))
499 itemsize = chophere - item;
504 arg = fieldsize - itemsize;
513 arg = fieldsize - itemsize;
528 switch (UTF8SKIP(s)) {
539 if ( !((*t++ = *s++) & ~31) )
547 int ch = *t++ = *s++;
550 if ( !((*t++ = *s++) & ~31) )
559 while (*s && isSPACE(*s))
566 item = s = SvPV(sv, len);
568 item_is_utf = FALSE; /* XXX is this correct? */
580 SvCUR_set(PL_formtarget, t - SvPVX(PL_formtarget));
581 sv_catpvn(PL_formtarget, item, itemsize);
582 SvGROW(PL_formtarget, SvCUR(PL_formtarget) + fudge + 1);
583 t = SvPVX(PL_formtarget) + SvCUR(PL_formtarget);
588 /* If the field is marked with ^ and the value is undefined,
591 if ((arg & 512) && !SvOK(sv)) {
599 /* Formats aren't yet marked for locales, so assume "yes". */
601 RESTORE_NUMERIC_LOCAL();
602 #if defined(USE_LONG_DOUBLE)
604 sprintf(t, "%#*.*" PERL_PRIfldbl,
605 (int) fieldsize, (int) arg & 255, value);
607 sprintf(t, "%*.0" PERL_PRIfldbl, (int) fieldsize, value);
612 (int) fieldsize, (int) arg & 255, value);
615 (int) fieldsize, value);
618 RESTORE_NUMERIC_STANDARD();
625 while (t-- > linemark && *t == ' ') ;
633 if (arg) { /* repeat until fields exhausted? */
635 SvCUR_set(PL_formtarget, t - SvPVX(PL_formtarget));
636 lines += FmLINES(PL_formtarget);
639 if (strnEQ(linemark, linemark - arg, arg))
640 DIE(aTHX_ "Runaway format");
642 FmLINES(PL_formtarget) = lines;
644 RETURNOP(cLISTOP->op_first);
657 while (*s && isSPACE(*s) && s < send)
661 arg = fieldsize - itemsize;
668 if (strnEQ(s," ",3)) {
669 while (s > SvPVX(PL_formtarget) && isSPACE(s[-1]))
680 SvCUR_set(PL_formtarget, t - SvPVX(PL_formtarget));
681 FmLINES(PL_formtarget) += lines;
693 if (PL_stack_base + *PL_markstack_ptr == SP) {
695 if (GIMME_V == G_SCALAR)
696 XPUSHs(sv_2mortal(newSViv(0)));
697 RETURNOP(PL_op->op_next->op_next);
699 PL_stack_sp = PL_stack_base + *PL_markstack_ptr + 1;
700 pp_pushmark(); /* push dst */
701 pp_pushmark(); /* push src */
702 ENTER; /* enter outer scope */
705 /* SAVE_DEFSV does *not* suffice here for USE_THREADS */
707 ENTER; /* enter inner scope */
710 src = PL_stack_base[*PL_markstack_ptr];
715 if (PL_op->op_type == OP_MAPSTART)
716 pp_pushmark(); /* push top */
717 return ((LOGOP*)PL_op->op_next)->op_other;
722 DIE(aTHX_ "panic: mapstart"); /* uses grepstart */
728 I32 diff = (SP - PL_stack_base) - *PL_markstack_ptr;
734 ++PL_markstack_ptr[-1];
736 if (diff > PL_markstack_ptr[-1] - PL_markstack_ptr[-2]) {
737 shift = diff - (PL_markstack_ptr[-1] - PL_markstack_ptr[-2]);
738 count = (SP - PL_stack_base) - PL_markstack_ptr[-1] + 2;
743 PL_markstack_ptr[-1] += shift;
744 *PL_markstack_ptr += shift;
748 dst = PL_stack_base + (PL_markstack_ptr[-2] += diff) - 1;
751 *dst-- = SvTEMP(TOPs) ? POPs : sv_mortalcopy(POPs);
753 LEAVE; /* exit inner scope */
756 if (PL_markstack_ptr[-1] > *PL_markstack_ptr) {
760 (void)POPMARK; /* pop top */
761 LEAVE; /* exit outer scope */
762 (void)POPMARK; /* pop src */
763 items = --*PL_markstack_ptr - PL_markstack_ptr[-1];
764 (void)POPMARK; /* pop dst */
765 SP = PL_stack_base + POPMARK; /* pop original mark */
766 if (gimme == G_SCALAR) {
770 else if (gimme == G_ARRAY)
777 ENTER; /* enter inner scope */
780 src = PL_stack_base[PL_markstack_ptr[-1]];
784 RETURNOP(cLOGOP->op_other);
790 djSP; dMARK; dORIGMARK;
792 SV **myorigmark = ORIGMARK;
798 OP* nextop = PL_op->op_next;
800 bool hasargs = FALSE;
803 if (gimme != G_ARRAY) {
809 SAVEVPTR(PL_sortcop);
810 if (PL_op->op_flags & OPf_STACKED) {
811 if (PL_op->op_flags & OPf_SPECIAL) {
812 OP *kid = cLISTOP->op_first->op_sibling; /* pass pushmark */
813 kid = kUNOP->op_first; /* pass rv2gv */
814 kid = kUNOP->op_first; /* pass leave */
815 PL_sortcop = kid->op_next;
816 stash = CopSTASH(PL_curcop);
819 cv = sv_2cv(*++MARK, &stash, &gv, 0);
820 if (cv && SvPOK(cv)) {
822 char *proto = SvPV((SV*)cv, n_a);
823 if (proto && strEQ(proto, "$$")) {
827 if (!(cv && CvROOT(cv))) {
828 if (cv && CvXSUB(cv)) {
832 SV *tmpstr = sv_newmortal();
833 gv_efullname3(tmpstr, gv, Nullch);
834 DIE(aTHX_ "Undefined sort subroutine \"%s\" called",
838 DIE(aTHX_ "Undefined subroutine in sort");
843 PL_sortcop = (OP*)cv;
845 PL_sortcop = CvSTART(cv);
846 SAVEVPTR(CvROOT(cv)->op_ppaddr);
847 CvROOT(cv)->op_ppaddr = PL_ppaddr[OP_NULL];
850 PL_curpad = AvARRAY((AV*)AvARRAY(CvPADLIST(cv))[1]);
856 stash = CopSTASH(PL_curcop);
860 while (MARK < SP) { /* This may or may not shift down one here. */
862 if ((*up = *++MARK)) { /* Weed out nulls. */
864 if (!PL_sortcop && !SvPOK(*up)) {
869 (void)sv_2pv(*up, &n_a);
874 max = --up - myorigmark;
879 bool oldcatch = CATCH_GET;
885 PUSHSTACKi(PERLSI_SORT);
886 if (!hasargs && !is_xsub) {
887 if (PL_sortstash != stash || !PL_firstgv || !PL_secondgv) {
888 SAVESPTR(PL_firstgv);
889 SAVESPTR(PL_secondgv);
890 PL_firstgv = gv_fetchpv("a", TRUE, SVt_PV);
891 PL_secondgv = gv_fetchpv("b", TRUE, SVt_PV);
892 PL_sortstash = stash;
894 SAVESPTR(GvSV(PL_firstgv));
895 SAVESPTR(GvSV(PL_secondgv));
898 PUSHBLOCK(cx, CXt_NULL, PL_stack_base);
899 if (!(PL_op->op_flags & OPf_SPECIAL)) {
900 cx->cx_type = CXt_SUB;
901 cx->blk_gimme = G_SCALAR;
904 (void)SvREFCNT_inc(cv); /* in preparation for POPSUB */
906 PL_sortcxix = cxstack_ix;
908 if (hasargs && !is_xsub) {
909 /* This is mostly copied from pp_entersub */
910 AV *av = (AV*)PL_curpad[0];
913 cx->blk_sub.savearray = GvAV(PL_defgv);
914 GvAV(PL_defgv) = (AV*)SvREFCNT_inc(av);
915 #endif /* USE_THREADS */
916 cx->blk_sub.oldcurpad = PL_curpad;
917 cx->blk_sub.argarray = av;
919 qsortsv((myorigmark+1), max,
920 is_xsub ? sortcv_xsub : hasargs ? sortcv_stacked : sortcv);
922 POPBLOCK(cx,PL_curpm);
930 MEXTEND(SP, 20); /* Can't afford stack realloc on signal. */
931 qsortsv(ORIGMARK+1, max,
932 (PL_op->op_private & OPpSORT_NUMERIC)
933 ? ( (PL_op->op_private & OPpSORT_INTEGER)
934 ? ( overloading ? amagic_i_ncmp : sv_i_ncmp)
935 : ( overloading ? amagic_ncmp : sv_ncmp))
936 : ( (PL_op->op_private & OPpLOCALE)
939 : sv_cmp_locale_static)
940 : ( overloading ? amagic_cmp : sv_cmp_static)));
941 if (PL_op->op_private & OPpSORT_REVERSE) {
943 SV **q = ORIGMARK+max;
953 PL_stack_sp = ORIGMARK + max;
961 if (GIMME == G_ARRAY)
963 if (SvTRUEx(PAD_SV(PL_op->op_targ)))
964 return cLOGOP->op_other;
973 if (GIMME == G_ARRAY) {
974 RETURNOP(((LOGOP*)cUNOP->op_first)->op_other);
978 SV *targ = PAD_SV(PL_op->op_targ);
980 if ((PL_op->op_private & OPpFLIP_LINENUM)
981 ? (PL_last_in_gv && SvIV(sv) == (IV)IoLINES(GvIOp(PL_last_in_gv)))
983 sv_setiv(PAD_SV(cUNOP->op_first->op_targ), 1);
984 if (PL_op->op_flags & OPf_SPECIAL) {
992 RETURNOP(((LOGOP*)cUNOP->op_first)->op_other);
1005 if (GIMME == G_ARRAY) {
1011 if (SvGMAGICAL(left))
1013 if (SvGMAGICAL(right))
1016 if (SvNIOKp(left) || !SvPOKp(left) ||
1017 SvNIOKp(right) || !SvPOKp(right) ||
1018 (looks_like_number(left) && *SvPVX(left) != '0' &&
1019 looks_like_number(right) && *SvPVX(right) != '0'))
1021 if (SvNV(left) < IV_MIN || SvNV(right) > IV_MAX)
1022 DIE(aTHX_ "Range iterator outside integer range");
1033 sv = sv_2mortal(newSViv(i++));
1038 SV *final = sv_mortalcopy(right);
1040 char *tmps = SvPV(final, len);
1042 sv = sv_mortalcopy(left);
1044 while (!SvNIOKp(sv) && SvCUR(sv) <= len) {
1046 if (strEQ(SvPVX(sv),tmps))
1048 sv = sv_2mortal(newSVsv(sv));
1055 SV *targ = PAD_SV(cUNOP->op_first->op_targ);
1057 if ((PL_op->op_private & OPpFLIP_LINENUM)
1058 ? (PL_last_in_gv && SvIV(sv) == (IV)IoLINES(GvIOp(PL_last_in_gv)))
1060 sv_setiv(PAD_SV(((UNOP*)cUNOP->op_first)->op_first->op_targ), 0);
1061 sv_catpv(targ, "E0");
1072 S_dopoptolabel(pTHX_ char *label)
1076 register PERL_CONTEXT *cx;
1078 for (i = cxstack_ix; i >= 0; i--) {
1080 switch (CxTYPE(cx)) {
1082 if (ckWARN(WARN_EXITING))
1083 Perl_warner(aTHX_ WARN_EXITING, "Exiting substitution via %s",
1084 PL_op_name[PL_op->op_type]);
1087 if (ckWARN(WARN_EXITING))
1088 Perl_warner(aTHX_ WARN_EXITING, "Exiting subroutine via %s",
1089 PL_op_name[PL_op->op_type]);
1092 if (ckWARN(WARN_EXITING))
1093 Perl_warner(aTHX_ WARN_EXITING, "Exiting format via %s",
1094 PL_op_name[PL_op->op_type]);
1097 if (ckWARN(WARN_EXITING))
1098 Perl_warner(aTHX_ WARN_EXITING, "Exiting eval via %s",
1099 PL_op_name[PL_op->op_type]);
1102 if (ckWARN(WARN_EXITING))
1103 Perl_warner(aTHX_ WARN_EXITING, "Exiting pseudo-block via %s",
1104 PL_op_name[PL_op->op_type]);
1107 if (!cx->blk_loop.label ||
1108 strNE(label, cx->blk_loop.label) ) {
1109 DEBUG_l(Perl_deb(aTHX_ "(Skipping label #%ld %s)\n",
1110 (long)i, cx->blk_loop.label));
1113 DEBUG_l( Perl_deb(aTHX_ "(Found label #%ld %s)\n", (long)i, label));
1121 Perl_dowantarray(pTHX)
1123 I32 gimme = block_gimme();
1124 return (gimme == G_VOID) ? G_SCALAR : gimme;
1128 Perl_block_gimme(pTHX)
1133 cxix = dopoptosub(cxstack_ix);
1137 switch (cxstack[cxix].blk_gimme) {
1145 Perl_croak(aTHX_ "panic: bad gimme: %d\n", cxstack[cxix].blk_gimme);
1152 S_dopoptosub(pTHX_ I32 startingblock)
1155 return dopoptosub_at(cxstack, startingblock);
1159 S_dopoptosub_at(pTHX_ PERL_CONTEXT *cxstk, I32 startingblock)
1163 register PERL_CONTEXT *cx;
1164 for (i = startingblock; i >= 0; i--) {
1166 switch (CxTYPE(cx)) {
1172 DEBUG_l( Perl_deb(aTHX_ "(Found sub #%ld)\n", (long)i));
1180 S_dopoptoeval(pTHX_ I32 startingblock)
1184 register PERL_CONTEXT *cx;
1185 for (i = startingblock; i >= 0; i--) {
1187 switch (CxTYPE(cx)) {
1191 DEBUG_l( Perl_deb(aTHX_ "(Found eval #%ld)\n", (long)i));
1199 S_dopoptoloop(pTHX_ I32 startingblock)
1203 register PERL_CONTEXT *cx;
1204 for (i = startingblock; i >= 0; i--) {
1206 switch (CxTYPE(cx)) {
1208 if (ckWARN(WARN_EXITING))
1209 Perl_warner(aTHX_ WARN_EXITING, "Exiting substitution via %s",
1210 PL_op_name[PL_op->op_type]);
1213 if (ckWARN(WARN_EXITING))
1214 Perl_warner(aTHX_ WARN_EXITING, "Exiting subroutine via %s",
1215 PL_op_name[PL_op->op_type]);
1218 if (ckWARN(WARN_EXITING))
1219 Perl_warner(aTHX_ WARN_EXITING, "Exiting format via %s",
1220 PL_op_name[PL_op->op_type]);
1223 if (ckWARN(WARN_EXITING))
1224 Perl_warner(aTHX_ WARN_EXITING, "Exiting eval via %s",
1225 PL_op_name[PL_op->op_type]);
1228 if (ckWARN(WARN_EXITING))
1229 Perl_warner(aTHX_ WARN_EXITING, "Exiting pseudo-block via %s",
1230 PL_op_name[PL_op->op_type]);
1233 DEBUG_l( Perl_deb(aTHX_ "(Found loop #%ld)\n", (long)i));
1241 Perl_dounwind(pTHX_ I32 cxix)
1244 register PERL_CONTEXT *cx;
1247 while (cxstack_ix > cxix) {
1249 cx = &cxstack[cxstack_ix];
1250 DEBUG_l(PerlIO_printf(Perl_debug_log, "Unwinding block %ld, type %s\n",
1251 (long) cxstack_ix, PL_block_type[CxTYPE(cx)]));
1252 /* Note: we don't need to restore the base context info till the end. */
1253 switch (CxTYPE(cx)) {
1256 continue; /* not break */
1278 * Closures mentioned at top level of eval cannot be referenced
1279 * again, and their presence indirectly causes a memory leak.
1280 * (Note that the fact that compcv and friends are still set here
1281 * is, AFAIK, an accident.) --Chip
1283 * XXX need to get comppad et al from eval's cv rather than
1284 * relying on the incidental global values.
1287 S_free_closures(pTHX)
1290 SV **svp = AvARRAY(PL_comppad_name);
1292 for (ix = AvFILLp(PL_comppad_name); ix >= 0; ix--) {
1294 if (sv && sv != &PL_sv_undef && *SvPVX(sv) == '&') {
1296 svp[ix] = &PL_sv_undef;
1300 SvREFCNT_dec(CvOUTSIDE(sv));
1301 CvOUTSIDE(sv) = Nullcv;
1314 Perl_qerror(pTHX_ SV *err)
1317 sv_catsv(ERRSV, err);
1319 sv_catsv(PL_errors, err);
1321 Perl_warn(aTHX_ "%"SVf, err);
1326 Perl_die_where(pTHX_ char *message, STRLEN msglen)
1331 register PERL_CONTEXT *cx;
1336 if (PL_in_eval & EVAL_KEEPERR) {
1337 static char prefix[] = "\t(in cleanup) ";
1342 else if (SvCUR(err) >= sizeof(prefix)+msglen-1) {
1345 if (*e != *message || strNE(e,message))
1349 SvGROW(err, SvCUR(err)+sizeof(prefix)+msglen);
1350 sv_catpvn(err, prefix, sizeof(prefix)-1);
1351 sv_catpvn(err, message, msglen);
1352 if (ckWARN(WARN_MISC)) {
1353 STRLEN start = SvCUR(err)-msglen-sizeof(prefix)+1;
1354 Perl_warner(aTHX_ WARN_MISC, SvPVX(err)+start);
1359 sv_setpvn(ERRSV, message, msglen);
1362 message = SvPVx(ERRSV, msglen);
1364 while ((cxix = dopoptoeval(cxstack_ix)) < 0
1365 && PL_curstackinfo->si_prev)
1374 if (cxix < cxstack_ix)
1377 POPBLOCK(cx,PL_curpm);
1378 if (CxTYPE(cx) != CXt_EVAL) {
1379 PerlIO_write(Perl_error_log, "panic: die ", 11);
1380 PerlIO_write(Perl_error_log, message, msglen);
1385 if (gimme == G_SCALAR)
1386 *++newsp = &PL_sv_undef;
1387 PL_stack_sp = newsp;
1391 if (optype == OP_REQUIRE) {
1392 char* msg = SvPVx(ERRSV, n_a);
1393 DIE(aTHX_ "%sCompilation failed in require",
1394 *msg ? msg : "Unknown error\n");
1396 return pop_return();
1400 message = SvPVx(ERRSV, msglen);
1403 /* SFIO can really mess with your errno */
1406 PerlIO *serr = Perl_error_log;
1408 PerlIO_write(serr, message, msglen);
1409 (void)PerlIO_flush(serr);
1422 if (SvTRUE(left) != SvTRUE(right))
1434 RETURNOP(cLOGOP->op_other);
1443 RETURNOP(cLOGOP->op_other);
1449 register I32 cxix = dopoptosub(cxstack_ix);
1450 register PERL_CONTEXT *cx;
1451 register PERL_CONTEXT *ccstack = cxstack;
1452 PERL_SI *top_si = PL_curstackinfo;
1463 /* we may be in a higher stacklevel, so dig down deeper */
1464 while (cxix < 0 && top_si->si_type != PERLSI_MAIN) {
1465 top_si = top_si->si_prev;
1466 ccstack = top_si->si_cxstack;
1467 cxix = dopoptosub_at(ccstack, top_si->si_cxix);
1470 if (GIMME != G_ARRAY)
1474 if (PL_DBsub && cxix >= 0 &&
1475 ccstack[cxix].blk_sub.cv == GvCV(PL_DBsub))
1479 cxix = dopoptosub_at(ccstack, cxix - 1);
1482 cx = &ccstack[cxix];
1483 if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
1484 dbcxix = dopoptosub_at(ccstack, cxix - 1);
1485 /* We expect that ccstack[dbcxix] is CXt_SUB, anyway, the
1486 field below is defined for any cx. */
1487 if (PL_DBsub && dbcxix >= 0 && ccstack[dbcxix].blk_sub.cv == GvCV(PL_DBsub))
1488 cx = &ccstack[dbcxix];
1491 stashname = CopSTASHPV(cx->blk_oldcop);
1492 if (GIMME != G_ARRAY) {
1494 PUSHs(&PL_sv_undef);
1497 sv_setpv(TARG, stashname);
1504 PUSHs(&PL_sv_undef);
1506 PUSHs(sv_2mortal(newSVpv(stashname, 0)));
1507 PUSHs(sv_2mortal(newSVpv(CopFILE(cx->blk_oldcop), 0)));
1508 PUSHs(sv_2mortal(newSViv((I32)CopLINE(cx->blk_oldcop))));
1511 if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
1512 /* So is ccstack[dbcxix]. */
1514 gv_efullname3(sv, CvGV(ccstack[cxix].blk_sub.cv), Nullch);
1515 PUSHs(sv_2mortal(sv));
1516 PUSHs(sv_2mortal(newSViv((I32)cx->blk_sub.hasargs)));
1519 PUSHs(sv_2mortal(newSVpvn("(eval)",6)));
1520 PUSHs(sv_2mortal(newSViv(0)));
1522 gimme = (I32)cx->blk_gimme;
1523 if (gimme == G_VOID)
1524 PUSHs(&PL_sv_undef);
1526 PUSHs(sv_2mortal(newSViv(gimme & G_ARRAY)));
1527 if (CxTYPE(cx) == CXt_EVAL) {
1529 if (cx->blk_eval.old_op_type == OP_ENTEREVAL) {
1530 PUSHs(cx->blk_eval.cur_text);
1534 else if (cx->blk_eval.old_namesv) {
1535 PUSHs(sv_2mortal(newSVsv(cx->blk_eval.old_namesv)));
1538 /* eval BLOCK (try blocks have old_namesv == 0) */
1540 PUSHs(&PL_sv_undef);
1541 PUSHs(&PL_sv_undef);
1545 PUSHs(&PL_sv_undef);
1546 PUSHs(&PL_sv_undef);
1548 if (CxTYPE(cx) == CXt_SUB && cx->blk_sub.hasargs
1549 && CopSTASH_eq(PL_curcop, PL_debstash))
1551 AV *ary = cx->blk_sub.argarray;
1552 int off = AvARRAY(ary) - AvALLOC(ary);
1556 PL_dbargs = GvAV(gv_AVadd(tmpgv = gv_fetchpv("DB::args", TRUE,
1559 AvREAL_off(PL_dbargs); /* XXX should be REIFY (see av.h) */
1562 if (AvMAX(PL_dbargs) < AvFILLp(ary) + off)
1563 av_extend(PL_dbargs, AvFILLp(ary) + off);
1564 Copy(AvALLOC(ary), AvARRAY(PL_dbargs), AvFILLp(ary) + 1 + off, SV*);
1565 AvFILLp(PL_dbargs) = AvFILLp(ary) + off;
1567 /* XXX only hints propagated via op_private are currently
1568 * visible (others are not easily accessible, since they
1569 * use the global PL_hints) */
1570 PUSHs(sv_2mortal(newSViv((I32)cx->blk_oldcop->op_private &
1571 HINT_PRIVATE_MASK)));
1574 SV * old_warnings = cx->blk_oldcop->cop_warnings ;
1576 if (old_warnings == pWARN_NONE ||
1577 (old_warnings == pWARN_STD && (PL_dowarn & G_WARN_ON) == 0))
1578 mask = newSVpvn(WARN_NONEstring, WARNsize) ;
1579 else if (old_warnings == pWARN_ALL ||
1580 (old_warnings == pWARN_STD && PL_dowarn & G_WARN_ON))
1581 mask = newSVpvn(WARN_ALLstring, WARNsize) ;
1583 mask = newSVsv(old_warnings);
1584 PUSHs(sv_2mortal(mask));
1599 sv_reset(tmps, CopSTASH(PL_curcop));
1611 PL_curcop = (COP*)PL_op;
1612 TAINT_NOT; /* Each statement is presumed innocent */
1613 PL_stack_sp = PL_stack_base + cxstack[cxstack_ix].blk_oldsp;
1616 if (PL_op->op_private || SvIV(PL_DBsingle) || SvIV(PL_DBsignal) || SvIV(PL_DBtrace))
1620 register PERL_CONTEXT *cx;
1621 I32 gimme = G_ARRAY;
1628 DIE(aTHX_ "No DB::DB routine defined");
1630 if (CvDEPTH(cv) >= 1 && !(PL_debug & (1<<30))) /* don't do recursive DB::DB call */
1642 push_return(PL_op->op_next);
1643 PUSHBLOCK(cx, CXt_SUB, SP);
1646 (void)SvREFCNT_inc(cv);
1647 SAVEVPTR(PL_curpad);
1648 PL_curpad = AvARRAY((AV*)*av_fetch(CvPADLIST(cv),1,FALSE));
1649 RETURNOP(CvSTART(cv));
1663 register PERL_CONTEXT *cx;
1664 I32 gimme = GIMME_V;
1666 U32 cxtype = CXt_LOOP;
1675 if (PL_op->op_flags & OPf_SPECIAL) {
1677 svp = &THREADSV(PL_op->op_targ); /* per-thread variable */
1678 SAVEGENERICSV(*svp);
1682 #endif /* USE_THREADS */
1683 if (PL_op->op_targ) {
1684 svp = &PL_curpad[PL_op->op_targ]; /* "my" variable */
1687 iterdata = (void*)PL_op->op_targ;
1688 cxtype |= CXp_PADVAR;
1693 svp = &GvSV(gv); /* symbol table variable */
1694 SAVEGENERICSV(*svp);
1697 iterdata = (void*)gv;
1703 PUSHBLOCK(cx, cxtype, SP);
1705 PUSHLOOP(cx, iterdata, MARK);
1707 PUSHLOOP(cx, svp, MARK);
1709 if (PL_op->op_flags & OPf_STACKED) {
1710 cx->blk_loop.iterary = (AV*)SvREFCNT_inc(POPs);
1711 if (SvTYPE(cx->blk_loop.iterary) != SVt_PVAV) {
1713 if (SvNIOKp(sv) || !SvPOKp(sv) ||
1714 SvNIOKp(cx->blk_loop.iterary) || !SvPOKp(cx->blk_loop.iterary) ||
1715 (looks_like_number(sv) && *SvPVX(sv) != '0' &&
1716 looks_like_number((SV*)cx->blk_loop.iterary) &&
1717 *SvPVX(cx->blk_loop.iterary) != '0'))
1719 if (SvNV(sv) < IV_MIN ||
1720 SvNV((SV*)cx->blk_loop.iterary) >= IV_MAX)
1721 DIE(aTHX_ "Range iterator outside integer range");
1722 cx->blk_loop.iterix = SvIV(sv);
1723 cx->blk_loop.itermax = SvIV((SV*)cx->blk_loop.iterary);
1726 cx->blk_loop.iterlval = newSVsv(sv);
1730 cx->blk_loop.iterary = PL_curstack;
1731 AvFILLp(PL_curstack) = SP - PL_stack_base;
1732 cx->blk_loop.iterix = MARK - PL_stack_base;
1741 register PERL_CONTEXT *cx;
1742 I32 gimme = GIMME_V;
1748 PUSHBLOCK(cx, CXt_LOOP, SP);
1749 PUSHLOOP(cx, 0, SP);
1757 register PERL_CONTEXT *cx;
1765 newsp = PL_stack_base + cx->blk_loop.resetsp;
1768 if (gimme == G_VOID)
1770 else if (gimme == G_SCALAR) {
1772 *++newsp = sv_mortalcopy(*SP);
1774 *++newsp = &PL_sv_undef;
1778 *++newsp = sv_mortalcopy(*++mark);
1779 TAINT_NOT; /* Each item is independent */
1785 POPLOOP(cx); /* Stack values are safe: release loop vars ... */
1786 PL_curpm = newpm; /* ... and pop $1 et al */
1798 register PERL_CONTEXT *cx;
1799 bool popsub2 = FALSE;
1800 bool clear_errsv = FALSE;
1807 if (PL_curstackinfo->si_type == PERLSI_SORT) {
1808 if (cxstack_ix == PL_sortcxix
1809 || dopoptosub(cxstack_ix) <= PL_sortcxix)
1811 if (cxstack_ix > PL_sortcxix)
1812 dounwind(PL_sortcxix);
1813 AvARRAY(PL_curstack)[1] = *SP;
1814 PL_stack_sp = PL_stack_base + 1;
1819 cxix = dopoptosub(cxstack_ix);
1821 DIE(aTHX_ "Can't return outside a subroutine");
1822 if (cxix < cxstack_ix)
1826 switch (CxTYPE(cx)) {
1831 if (!(PL_in_eval & EVAL_KEEPERR))
1836 if (AvFILLp(PL_comppad_name) >= 0)
1839 if (optype == OP_REQUIRE &&
1840 (MARK == SP || (gimme == G_SCALAR && !SvTRUE(*SP))) )
1842 /* Unassume the success we assumed earlier. */
1843 SV *nsv = cx->blk_eval.old_namesv;
1844 (void)hv_delete(GvHVn(PL_incgv), SvPVX(nsv), SvCUR(nsv), G_DISCARD);
1845 DIE(aTHX_ "%s did not return a true value", SvPVX(nsv));
1852 DIE(aTHX_ "panic: return");
1856 if (gimme == G_SCALAR) {
1859 if (cx->blk_sub.cv && CvDEPTH(cx->blk_sub.cv) > 1) {
1861 *++newsp = SvREFCNT_inc(*SP);
1866 sv = SvREFCNT_inc(*SP); /* FREETMPS could clobber it */
1868 *++newsp = sv_mortalcopy(sv);
1873 *++newsp = (SvTEMP(*SP)) ? *SP : sv_mortalcopy(*SP);
1876 *++newsp = sv_mortalcopy(*SP);
1879 *++newsp = &PL_sv_undef;
1881 else if (gimme == G_ARRAY) {
1882 while (++MARK <= SP) {
1883 *++newsp = (popsub2 && SvTEMP(*MARK))
1884 ? *MARK : sv_mortalcopy(*MARK);
1885 TAINT_NOT; /* Each item is independent */
1888 PL_stack_sp = newsp;
1890 /* Stack values are safe: */
1892 POPSUB(cx,sv); /* release CV and @_ ... */
1896 PL_curpm = newpm; /* ... and pop $1 et al */
1902 return pop_return();
1909 register PERL_CONTEXT *cx;
1919 if (PL_op->op_flags & OPf_SPECIAL) {
1920 cxix = dopoptoloop(cxstack_ix);
1922 DIE(aTHX_ "Can't \"last\" outside a loop block");
1925 cxix = dopoptolabel(cPVOP->op_pv);
1927 DIE(aTHX_ "Label not found for \"last %s\"", cPVOP->op_pv);
1929 if (cxix < cxstack_ix)
1934 switch (CxTYPE(cx)) {
1937 newsp = PL_stack_base + cx->blk_loop.resetsp;
1938 nextop = cx->blk_loop.last_op->op_next;
1942 nextop = pop_return();
1946 nextop = pop_return();
1950 nextop = pop_return();
1953 DIE(aTHX_ "panic: last");
1957 if (gimme == G_SCALAR) {
1959 *++newsp = ((pop2 == CXt_SUB) && SvTEMP(*SP))
1960 ? *SP : sv_mortalcopy(*SP);
1962 *++newsp = &PL_sv_undef;
1964 else if (gimme == G_ARRAY) {
1965 while (++MARK <= SP) {
1966 *++newsp = ((pop2 == CXt_SUB) && SvTEMP(*MARK))
1967 ? *MARK : sv_mortalcopy(*MARK);
1968 TAINT_NOT; /* Each item is independent */
1974 /* Stack values are safe: */
1977 POPLOOP(cx); /* release loop vars ... */
1981 POPSUB(cx,sv); /* release CV and @_ ... */
1984 PL_curpm = newpm; /* ... and pop $1 et al */
1994 register PERL_CONTEXT *cx;
1997 if (PL_op->op_flags & OPf_SPECIAL) {
1998 cxix = dopoptoloop(cxstack_ix);
2000 DIE(aTHX_ "Can't \"next\" outside a loop block");
2003 cxix = dopoptolabel(cPVOP->op_pv);
2005 DIE(aTHX_ "Label not found for \"next %s\"", cPVOP->op_pv);
2007 if (cxix < cxstack_ix)
2010 /* clear off anything above the scope we're re-entering, but
2011 * save the rest until after a possible continue block */
2012 inner = PL_scopestack_ix;
2014 if (PL_scopestack_ix < inner)
2015 leave_scope(PL_scopestack[PL_scopestack_ix]);
2016 return cx->blk_loop.next_op;
2022 register PERL_CONTEXT *cx;
2025 if (PL_op->op_flags & OPf_SPECIAL) {
2026 cxix = dopoptoloop(cxstack_ix);
2028 DIE(aTHX_ "Can't \"redo\" outside a loop block");
2031 cxix = dopoptolabel(cPVOP->op_pv);
2033 DIE(aTHX_ "Label not found for \"redo %s\"", cPVOP->op_pv);
2035 if (cxix < cxstack_ix)
2039 oldsave = PL_scopestack[PL_scopestack_ix - 1];
2040 LEAVE_SCOPE(oldsave);
2041 return cx->blk_loop.redo_op;
2045 S_dofindlabel(pTHX_ OP *o, char *label, OP **opstack, OP **oplimit)
2049 static char too_deep[] = "Target of goto is too deeply nested";
2052 Perl_croak(aTHX_ too_deep);
2053 if (o->op_type == OP_LEAVE ||
2054 o->op_type == OP_SCOPE ||
2055 o->op_type == OP_LEAVELOOP ||
2056 o->op_type == OP_LEAVETRY)
2058 *ops++ = cUNOPo->op_first;
2060 Perl_croak(aTHX_ too_deep);
2063 if (o->op_flags & OPf_KIDS) {
2065 /* First try all the kids at this level, since that's likeliest. */
2066 for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling) {
2067 if ((kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) &&
2068 kCOP->cop_label && strEQ(kCOP->cop_label, label))
2071 for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling) {
2072 if (kid == PL_lastgotoprobe)
2074 if ((kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) &&
2076 (ops[-1]->op_type != OP_NEXTSTATE &&
2077 ops[-1]->op_type != OP_DBSTATE)))
2079 if ((o = dofindlabel(kid, label, ops, oplimit)))
2098 register PERL_CONTEXT *cx;
2099 #define GOTO_DEPTH 64
2100 OP *enterops[GOTO_DEPTH];
2102 int do_dump = (PL_op->op_type == OP_DUMP);
2103 static char must_have_label[] = "goto must have label";
2106 if (PL_op->op_flags & OPf_STACKED) {
2110 /* This egregious kludge implements goto &subroutine */
2111 if (SvROK(sv) && SvTYPE(SvRV(sv)) == SVt_PVCV) {
2113 register PERL_CONTEXT *cx;
2114 CV* cv = (CV*)SvRV(sv);
2120 if (!CvROOT(cv) && !CvXSUB(cv)) {
2125 /* autoloaded stub? */
2126 if (cv != GvCV(gv) && (cv = GvCV(gv)))
2128 autogv = gv_autoload4(GvSTASH(gv), GvNAME(gv),
2129 GvNAMELEN(gv), FALSE);
2130 if (autogv && (cv = GvCV(autogv)))
2132 tmpstr = sv_newmortal();
2133 gv_efullname3(tmpstr, gv, Nullch);
2134 DIE(aTHX_ "Goto undefined subroutine &%s",SvPVX(tmpstr));
2136 DIE(aTHX_ "Goto undefined subroutine");
2139 /* First do some returnish stuff. */
2140 cxix = dopoptosub(cxstack_ix);
2142 DIE(aTHX_ "Can't goto subroutine outside a subroutine");
2143 if (cxix < cxstack_ix)
2146 if (CxTYPE(cx) == CXt_EVAL && cx->blk_eval.old_op_type == OP_ENTEREVAL)
2147 DIE(aTHX_ "Can't goto subroutine from an eval-string");
2149 if (CxTYPE(cx) == CXt_SUB && cx->blk_sub.hasargs) {
2150 /* put @_ back onto stack */
2151 AV* av = cx->blk_sub.argarray;
2153 items = AvFILLp(av) + 1;
2155 EXTEND(PL_stack_sp, items); /* @_ could have been extended. */
2156 Copy(AvARRAY(av), PL_stack_sp, items, SV*);
2157 PL_stack_sp += items;
2159 SvREFCNT_dec(GvAV(PL_defgv));
2160 GvAV(PL_defgv) = cx->blk_sub.savearray;
2161 #endif /* USE_THREADS */
2162 /* abandon @_ if it got reified */
2164 (void)sv_2mortal((SV*)av); /* delay until return */
2166 av_extend(av, items-1);
2167 AvFLAGS(av) = AVf_REIFY;
2168 PL_curpad[0] = (SV*)(cx->blk_sub.argarray = av);
2171 else if (CvXSUB(cv)) { /* put GvAV(defgv) back onto stack */
2174 av = (AV*)PL_curpad[0];
2176 av = GvAV(PL_defgv);
2178 items = AvFILLp(av) + 1;
2180 EXTEND(PL_stack_sp, items); /* @_ could have been extended. */
2181 Copy(AvARRAY(av), PL_stack_sp, items, SV*);
2182 PL_stack_sp += items;
2184 if (CxTYPE(cx) == CXt_SUB &&
2185 !(CvDEPTH(cx->blk_sub.cv) = cx->blk_sub.olddepth))
2186 SvREFCNT_dec(cx->blk_sub.cv);
2187 oldsave = PL_scopestack[PL_scopestack_ix - 1];
2188 LEAVE_SCOPE(oldsave);
2190 /* Now do some callish stuff. */
2193 #ifdef PERL_XSUB_OLDSTYLE
2194 if (CvOLDSTYLE(cv)) {
2195 I32 (*fp3)(int,int,int);
2200 fp3 = (I32(*)(int,int,int))CvXSUB(cv);
2201 items = (*fp3)(CvXSUBANY(cv).any_i32,
2202 mark - PL_stack_base + 1,
2204 SP = PL_stack_base + items;
2207 #endif /* PERL_XSUB_OLDSTYLE */
2212 PL_stack_sp--; /* There is no cv arg. */
2213 /* Push a mark for the start of arglist */
2215 (void)(*CvXSUB(cv))(aTHXo_ cv);
2216 /* Pop the current context like a decent sub should */
2217 POPBLOCK(cx, PL_curpm);
2218 /* Do _not_ use PUTBACK, keep the XSUB's return stack! */
2221 return pop_return();
2224 AV* padlist = CvPADLIST(cv);
2225 SV** svp = AvARRAY(padlist);
2226 if (CxTYPE(cx) == CXt_EVAL) {
2227 PL_in_eval = cx->blk_eval.old_in_eval;
2228 PL_eval_root = cx->blk_eval.old_eval_root;
2229 cx->cx_type = CXt_SUB;
2230 cx->blk_sub.hasargs = 0;
2232 cx->blk_sub.cv = cv;
2233 cx->blk_sub.olddepth = CvDEPTH(cv);
2235 if (CvDEPTH(cv) < 2)
2236 (void)SvREFCNT_inc(cv);
2237 else { /* save temporaries on recursion? */
2238 if (CvDEPTH(cv) == 100 && ckWARN(WARN_RECURSION))
2239 sub_crush_depth(cv);
2240 if (CvDEPTH(cv) > AvFILLp(padlist)) {
2241 AV *newpad = newAV();
2242 SV **oldpad = AvARRAY(svp[CvDEPTH(cv)-1]);
2243 I32 ix = AvFILLp((AV*)svp[1]);
2244 I32 names_fill = AvFILLp((AV*)svp[0]);
2245 svp = AvARRAY(svp[0]);
2246 for ( ;ix > 0; ix--) {
2247 if (names_fill >= ix && svp[ix] != &PL_sv_undef) {
2248 char *name = SvPVX(svp[ix]);
2249 if ((SvFLAGS(svp[ix]) & SVf_FAKE)
2252 /* outer lexical or anon code */
2253 av_store(newpad, ix,
2254 SvREFCNT_inc(oldpad[ix]) );
2256 else { /* our own lexical */
2258 av_store(newpad, ix, sv = (SV*)newAV());
2259 else if (*name == '%')
2260 av_store(newpad, ix, sv = (SV*)newHV());
2262 av_store(newpad, ix, sv = NEWSV(0,0));
2266 else if (IS_PADGV(oldpad[ix]) || IS_PADCONST(oldpad[ix])) {
2267 av_store(newpad, ix, sv = SvREFCNT_inc(oldpad[ix]));
2270 av_store(newpad, ix, sv = NEWSV(0,0));
2274 if (cx->blk_sub.hasargs) {
2277 av_store(newpad, 0, (SV*)av);
2278 AvFLAGS(av) = AVf_REIFY;
2280 av_store(padlist, CvDEPTH(cv), (SV*)newpad);
2281 AvFILLp(padlist) = CvDEPTH(cv);
2282 svp = AvARRAY(padlist);
2286 if (!cx->blk_sub.hasargs) {
2287 AV* av = (AV*)PL_curpad[0];
2289 items = AvFILLp(av) + 1;
2291 /* Mark is at the end of the stack. */
2293 Copy(AvARRAY(av), SP + 1, items, SV*);
2298 #endif /* USE_THREADS */
2299 SAVEVPTR(PL_curpad);
2300 PL_curpad = AvARRAY((AV*)svp[CvDEPTH(cv)]);
2302 if (cx->blk_sub.hasargs)
2303 #endif /* USE_THREADS */
2305 AV* av = (AV*)PL_curpad[0];
2309 cx->blk_sub.savearray = GvAV(PL_defgv);
2310 GvAV(PL_defgv) = (AV*)SvREFCNT_inc(av);
2311 #endif /* USE_THREADS */
2312 cx->blk_sub.oldcurpad = PL_curpad;
2313 cx->blk_sub.argarray = av;
2316 if (items >= AvMAX(av) + 1) {
2318 if (AvARRAY(av) != ary) {
2319 AvMAX(av) += AvARRAY(av) - AvALLOC(av);
2320 SvPVX(av) = (char*)ary;
2322 if (items >= AvMAX(av) + 1) {
2323 AvMAX(av) = items - 1;
2324 Renew(ary,items+1,SV*);
2326 SvPVX(av) = (char*)ary;
2329 Copy(mark,AvARRAY(av),items,SV*);
2330 AvFILLp(av) = items - 1;
2331 assert(!AvREAL(av));
2338 if (PERLDB_SUB) { /* Checking curstash breaks DProf. */
2340 * We do not care about using sv to call CV;
2341 * it's for informational purposes only.
2343 SV *sv = GvSV(PL_DBsub);
2346 if (PERLDB_SUB_NN) {
2347 SvIVX(sv) = PTR2IV(cv); /* Already upgraded, saved */
2350 gv_efullname3(sv, CvGV(cv), Nullch);
2353 && (gotocv = get_cv("DB::goto", FALSE)) ) {
2354 PUSHMARK( PL_stack_sp );
2355 call_sv((SV*)gotocv, G_SCALAR | G_NODEBUG);
2359 RETURNOP(CvSTART(cv));
2363 label = SvPV(sv,n_a);
2364 if (!(do_dump || *label))
2365 DIE(aTHX_ must_have_label);
2368 else if (PL_op->op_flags & OPf_SPECIAL) {
2370 DIE(aTHX_ must_have_label);
2373 label = cPVOP->op_pv;
2375 if (label && *label) {
2380 PL_lastgotoprobe = 0;
2382 for (ix = cxstack_ix; ix >= 0; ix--) {
2384 switch (CxTYPE(cx)) {
2386 gotoprobe = PL_eval_root; /* XXX not good for nested eval */
2389 gotoprobe = cx->blk_oldcop->op_sibling;
2395 gotoprobe = cx->blk_oldcop->op_sibling;
2397 gotoprobe = PL_main_root;
2400 if (CvDEPTH(cx->blk_sub.cv)) {
2401 gotoprobe = CvROOT(cx->blk_sub.cv);
2407 DIE(aTHX_ "Can't \"goto\" out of a pseudo block");
2410 DIE(aTHX_ "panic: goto");
2411 gotoprobe = PL_main_root;
2415 retop = dofindlabel(gotoprobe, label,
2416 enterops, enterops + GOTO_DEPTH);
2420 PL_lastgotoprobe = gotoprobe;
2423 DIE(aTHX_ "Can't find label %s", label);
2425 /* pop unwanted frames */
2427 if (ix < cxstack_ix) {
2434 oldsave = PL_scopestack[PL_scopestack_ix];
2435 LEAVE_SCOPE(oldsave);
2438 /* push wanted frames */
2440 if (*enterops && enterops[1]) {
2442 for (ix = 1; enterops[ix]; ix++) {
2443 PL_op = enterops[ix];
2444 /* Eventually we may want to stack the needed arguments
2445 * for each op. For now, we punt on the hard ones. */
2446 if (PL_op->op_type == OP_ENTERITER)
2447 DIE(aTHX_ "Can't \"goto\" into the middle of a foreach loop");
2448 CALL_FPTR(PL_op->op_ppaddr)(aTHX);
2456 if (!retop) retop = PL_main_start;
2458 PL_restartop = retop;
2459 PL_do_undump = TRUE;
2463 PL_restartop = 0; /* hmm, must be GNU unexec().. */
2464 PL_do_undump = FALSE;
2480 if (anum == 1 && (PL_op->op_private & OPpEXIT_VMSISH))
2484 PL_exit_flags |= PERL_EXIT_EXPECTED;
2486 PUSHs(&PL_sv_undef);
2494 NV value = SvNVx(GvSV(cCOP->cop_gv));
2495 register I32 match = I_32(value);
2498 if (((NV)match) > value)
2499 --match; /* was fractional--truncate other way */
2501 match -= cCOP->uop.scop.scop_offset;
2504 else if (match > cCOP->uop.scop.scop_max)
2505 match = cCOP->uop.scop.scop_max;
2506 PL_op = cCOP->uop.scop.scop_next[match];
2516 PL_op = PL_op->op_next; /* can't assume anything */
2519 match = *(SvPVx(GvSV(cCOP->cop_gv), n_a)) & 255;
2520 match -= cCOP->uop.scop.scop_offset;
2523 else if (match > cCOP->uop.scop.scop_max)
2524 match = cCOP->uop.scop.scop_max;
2525 PL_op = cCOP->uop.scop.scop_next[match];
2534 S_save_lines(pTHX_ AV *array, SV *sv)
2536 register char *s = SvPVX(sv);
2537 register char *send = SvPVX(sv) + SvCUR(sv);
2539 register I32 line = 1;
2541 while (s && s < send) {
2542 SV *tmpstr = NEWSV(85,0);
2544 sv_upgrade(tmpstr, SVt_PVMG);
2545 t = strchr(s, '\n');
2551 sv_setpvn(tmpstr, s, t - s);
2552 av_store(array, line++, tmpstr);
2557 #ifdef PERL_FLEXIBLE_EXCEPTIONS
2559 S_docatch_body(pTHX_ va_list args)
2561 return docatch_body();
2566 S_docatch_body(pTHX)
2573 S_docatch(pTHX_ OP *o)
2578 volatile PERL_SI *cursi = PL_curstackinfo;
2582 assert(CATCH_GET == TRUE);
2585 #ifdef PERL_FLEXIBLE_EXCEPTIONS
2587 CALLPROTECT(aTHX_ pcur_env, &ret, MEMBER_TO_FPTR(S_docatch_body));
2593 #ifndef PERL_FLEXIBLE_EXCEPTIONS
2599 if (PL_restartop && cursi == PL_curstackinfo) {
2600 PL_op = PL_restartop;
2617 Perl_sv_compile_2op(pTHX_ SV *sv, OP** startop, char *code, AV** avp)
2618 /* sv Text to convert to OP tree. */
2619 /* startop op_free() this to undo. */
2620 /* code Short string id of the caller. */
2622 dSP; /* Make POPBLOCK work. */
2625 I32 gimme = 0; /* SUSPECT - INITIALZE TO WHAT? NI-S */
2629 char tbuf[TYPE_DIGITS(long) + 12 + 10];
2630 char *tmpbuf = tbuf;
2636 /* switch to eval mode */
2638 if (PL_curcop == &PL_compiling) {
2639 SAVECOPSTASH_FREE(&PL_compiling);
2640 CopSTASH_set(&PL_compiling, PL_curstash);
2642 if (PERLDB_NAMEEVAL && CopLINE(PL_curcop)) {
2643 SV *sv = sv_newmortal();
2644 Perl_sv_setpvf(aTHX_ sv, "_<(%.10seval %lu)[%s:%"IVdf"]",
2645 code, (unsigned long)++PL_evalseq,
2646 CopFILE(PL_curcop), (IV)CopLINE(PL_curcop));
2650 sprintf(tmpbuf, "_<(%.10s_eval %lu)", code, (unsigned long)++PL_evalseq);
2651 SAVECOPFILE_FREE(&PL_compiling);
2652 CopFILE_set(&PL_compiling, tmpbuf+2);
2653 SAVECOPLINE(&PL_compiling);
2654 CopLINE_set(&PL_compiling, 1);
2655 /* XXX For C<eval "...">s within BEGIN {} blocks, this ends up
2656 deleting the eval's FILEGV from the stash before gv_check() runs
2657 (i.e. before run-time proper). To work around the coredump that
2658 ensues, we always turn GvMULTI_on for any globals that were
2659 introduced within evals. See force_ident(). GSAR 96-10-12 */
2660 safestr = savepv(tmpbuf);
2661 SAVEDELETE(PL_defstash, safestr, strlen(safestr));
2663 #ifdef OP_IN_REGISTER
2671 PL_op->op_type = OP_ENTEREVAL;
2672 PL_op->op_flags = 0; /* Avoid uninit warning. */
2673 PUSHBLOCK(cx, CXt_EVAL, SP);
2674 PUSHEVAL(cx, 0, Nullgv);
2675 rop = doeval(G_SCALAR, startop);
2676 POPBLOCK(cx,PL_curpm);
2679 (*startop)->op_type = OP_NULL;
2680 (*startop)->op_ppaddr = PL_ppaddr[OP_NULL];
2682 *avp = (AV*)SvREFCNT_inc(PL_comppad);
2684 if (PL_curcop == &PL_compiling)
2685 PL_compiling.op_private = PL_hints;
2686 #ifdef OP_IN_REGISTER
2692 /* With USE_THREADS, eval_owner must be held on entry to doeval */
2694 S_doeval(pTHX_ int gimme, OP** startop)
2702 PL_in_eval = EVAL_INEVAL;
2706 /* set up a scratch pad */
2709 SAVEVPTR(PL_curpad);
2710 SAVESPTR(PL_comppad);
2711 SAVESPTR(PL_comppad_name);
2712 SAVEI32(PL_comppad_name_fill);
2713 SAVEI32(PL_min_intro_pending);
2714 SAVEI32(PL_max_intro_pending);
2717 for (i = cxstack_ix - 1; i >= 0; i--) {
2718 PERL_CONTEXT *cx = &cxstack[i];
2719 if (CxTYPE(cx) == CXt_EVAL)
2721 else if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
2722 caller = cx->blk_sub.cv;
2727 SAVESPTR(PL_compcv);
2728 PL_compcv = (CV*)NEWSV(1104,0);
2729 sv_upgrade((SV *)PL_compcv, SVt_PVCV);
2730 CvEVAL_on(PL_compcv);
2732 CvOWNER(PL_compcv) = 0;
2733 New(666, CvMUTEXP(PL_compcv), 1, perl_mutex);
2734 MUTEX_INIT(CvMUTEXP(PL_compcv));
2735 #endif /* USE_THREADS */
2737 PL_comppad = newAV();
2738 av_push(PL_comppad, Nullsv);
2739 PL_curpad = AvARRAY(PL_comppad);
2740 PL_comppad_name = newAV();
2741 PL_comppad_name_fill = 0;
2742 PL_min_intro_pending = 0;
2745 av_store(PL_comppad_name, 0, newSVpvn("@_", 2));
2746 PL_curpad[0] = (SV*)newAV();
2747 SvPADMY_on(PL_curpad[0]); /* XXX Needed? */
2748 #endif /* USE_THREADS */
2750 comppadlist = newAV();
2751 AvREAL_off(comppadlist);
2752 av_store(comppadlist, 0, (SV*)PL_comppad_name);
2753 av_store(comppadlist, 1, (SV*)PL_comppad);
2754 CvPADLIST(PL_compcv) = comppadlist;
2757 (saveop->op_type != OP_REQUIRE && saveop->op_type != OP_DOFILE))
2759 CvOUTSIDE(PL_compcv) = (CV*)SvREFCNT_inc(caller);
2762 SAVEFREESV(PL_compcv);
2764 /* make sure we compile in the right package */
2766 if (CopSTASH_ne(PL_curcop, PL_curstash)) {
2767 SAVESPTR(PL_curstash);
2768 PL_curstash = CopSTASH(PL_curcop);
2770 SAVESPTR(PL_beginav);
2771 PL_beginav = newAV();
2772 SAVEFREESV(PL_beginav);
2773 SAVEI32(PL_error_count);
2775 /* try to compile it */
2777 PL_eval_root = Nullop;
2779 PL_curcop = &PL_compiling;
2780 PL_curcop->cop_arybase = 0;
2781 SvREFCNT_dec(PL_rs);
2782 PL_rs = newSVpvn("\n", 1);
2783 if (saveop && saveop->op_flags & OPf_SPECIAL)
2784 PL_in_eval |= EVAL_KEEPERR;
2787 if (yyparse() || PL_error_count || !PL_eval_root) {
2791 I32 optype = 0; /* Might be reset by POPEVAL. */
2796 op_free(PL_eval_root);
2797 PL_eval_root = Nullop;
2799 SP = PL_stack_base + POPMARK; /* pop original mark */
2801 POPBLOCK(cx,PL_curpm);
2807 if (optype == OP_REQUIRE) {
2808 char* msg = SvPVx(ERRSV, n_a);
2809 DIE(aTHX_ "%sCompilation failed in require",
2810 *msg ? msg : "Unknown error\n");
2813 char* msg = SvPVx(ERRSV, n_a);
2815 POPBLOCK(cx,PL_curpm);
2817 Perl_croak(aTHX_ "%sCompilation failed in regexp",
2818 (*msg ? msg : "Unknown error\n"));
2820 SvREFCNT_dec(PL_rs);
2821 PL_rs = SvREFCNT_inc(PL_nrs);
2823 MUTEX_LOCK(&PL_eval_mutex);
2825 COND_SIGNAL(&PL_eval_cond);
2826 MUTEX_UNLOCK(&PL_eval_mutex);
2827 #endif /* USE_THREADS */
2830 SvREFCNT_dec(PL_rs);
2831 PL_rs = SvREFCNT_inc(PL_nrs);
2832 CopLINE_set(&PL_compiling, 0);
2834 *startop = PL_eval_root;
2835 SvREFCNT_dec(CvOUTSIDE(PL_compcv));
2836 CvOUTSIDE(PL_compcv) = Nullcv;
2838 SAVEFREEOP(PL_eval_root);
2840 scalarvoid(PL_eval_root);
2841 else if (gimme & G_ARRAY)
2844 scalar(PL_eval_root);
2846 DEBUG_x(dump_eval());
2848 /* Register with debugger: */
2849 if (PERLDB_INTER && saveop->op_type == OP_REQUIRE) {
2850 CV *cv = get_cv("DB::postponed", FALSE);
2854 XPUSHs((SV*)CopFILEGV(&PL_compiling));
2856 call_sv((SV*)cv, G_DISCARD);
2860 /* compiled okay, so do it */
2862 CvDEPTH(PL_compcv) = 1;
2863 SP = PL_stack_base + POPMARK; /* pop original mark */
2864 PL_op = saveop; /* The caller may need it. */
2866 MUTEX_LOCK(&PL_eval_mutex);
2868 COND_SIGNAL(&PL_eval_cond);
2869 MUTEX_UNLOCK(&PL_eval_mutex);
2870 #endif /* USE_THREADS */
2872 RETURNOP(PL_eval_start);
2876 S_doopen_pmc(pTHX_ const char *name, const char *mode)
2878 STRLEN namelen = strlen(name);
2881 if (namelen > 3 && strEQ(name + namelen - 3, ".pm")) {
2882 SV *pmcsv = Perl_newSVpvf(aTHX_ "%s%c", name, 'c');
2883 char *pmc = SvPV_nolen(pmcsv);
2886 if (PerlLIO_stat(pmc, &pmcstat) < 0) {
2887 fp = PerlIO_open(name, mode);
2890 if (PerlLIO_stat(name, &pmstat) < 0 ||
2891 pmstat.st_mtime < pmcstat.st_mtime)
2893 fp = PerlIO_open(pmc, mode);
2896 fp = PerlIO_open(name, mode);
2899 SvREFCNT_dec(pmcsv);
2902 fp = PerlIO_open(name, mode);
2910 register PERL_CONTEXT *cx;
2915 SV *namesv = Nullsv;
2917 I32 gimme = G_SCALAR;
2918 PerlIO *tryrsfp = 0;
2920 int filter_has_file = 0;
2921 GV *filter_child_proc = 0;
2922 SV *filter_state = 0;
2927 if (SvPOK(sv) && SvNOK(sv)) { /* require v5.6.1 */
2928 UV rev = 0, ver = 0, sver = 0;
2930 U8 *s = (U8*)SvPVX(sv);
2931 U8 *end = (U8*)SvPVX(sv) + SvCUR(sv);
2933 rev = utf8_to_uv(s, &len);
2936 ver = utf8_to_uv(s, &len);
2939 sver = utf8_to_uv(s, &len);
2942 if (PERL_REVISION < rev
2943 || (PERL_REVISION == rev
2944 && (PERL_VERSION < ver
2945 || (PERL_VERSION == ver
2946 && PERL_SUBVERSION < sver))))
2948 DIE(aTHX_ "Perl v%"UVuf".%"UVuf".%"UVuf" required--this is only "
2949 "v%d.%d.%d, stopped", rev, ver, sver, PERL_REVISION,
2950 PERL_VERSION, PERL_SUBVERSION);
2954 else if (!SvPOKp(sv)) { /* require 5.005_03 */
2955 if ((NV)PERL_REVISION + ((NV)PERL_VERSION/(NV)1000)
2956 + ((NV)PERL_SUBVERSION/(NV)1000000)
2957 + 0.00000099 < SvNV(sv))
2961 NV nver = (nrev - rev) * 1000;
2962 UV ver = (UV)(nver + 0.0009);
2963 NV nsver = (nver - ver) * 1000;
2964 UV sver = (UV)(nsver + 0.0009);
2966 /* help out with the "use 5.6" confusion */
2967 if (sver == 0 && (rev > 5 || (rev == 5 && ver >= 100))) {
2968 DIE(aTHX_ "Perl v%"UVuf".%"UVuf".%"UVuf" required--"
2969 "this is only v%d.%d.%d, stopped"
2970 " (did you mean v%"UVuf".%"UVuf".0?)",
2971 rev, ver, sver, PERL_REVISION, PERL_VERSION,
2972 PERL_SUBVERSION, rev, ver/100);
2975 DIE(aTHX_ "Perl v%"UVuf".%"UVuf".%"UVuf" required--"
2976 "this is only v%d.%d.%d, stopped",
2977 rev, ver, sver, PERL_REVISION, PERL_VERSION,
2984 name = SvPV(sv, len);
2985 if (!(name && len > 0 && *name))
2986 DIE(aTHX_ "Null filename used");
2987 TAINT_PROPER("require");
2988 if (PL_op->op_type == OP_REQUIRE &&
2989 (svp = hv_fetch(GvHVn(PL_incgv), name, len, 0)) &&
2990 *svp != &PL_sv_undef)
2993 /* prepare to compile file */
2995 if (PERL_FILE_IS_ABSOLUTE(name)
2996 || (*name == '.' && (name[1] == '/' ||
2997 (name[1] == '.' && name[2] == '/'))))
3000 tryrsfp = doopen_pmc(name,PERL_SCRIPT_MODE);
3001 #ifdef MACOS_TRADITIONAL
3002 /* We consider paths of the form :a:b ambiguous and interpret them first
3003 as global then as local
3005 if (!tryrsfp && name[0] == ':' && name[1] != ':' && strchr(name+2, ':'))
3014 AV *ar = GvAVn(PL_incgv);
3018 if ((unixname = tounixspec(name, Nullch)) != Nullch)
3021 namesv = NEWSV(806, 0);
3022 for (i = 0; i <= AvFILL(ar); i++) {
3023 SV *dirsv = *av_fetch(ar, i, TRUE);
3029 if (SvTYPE(SvRV(loader)) == SVt_PVAV) {
3030 loader = *av_fetch((AV *)SvRV(loader), 0, TRUE);
3033 Perl_sv_setpvf(aTHX_ namesv, "/loader/0x%"UVxf"/%s",
3034 PTR2UV(SvANY(loader)), name);
3035 tryname = SvPVX(namesv);
3046 count = call_sv(loader, G_ARRAY);
3056 if (SvROK(arg) && SvTYPE(SvRV(arg)) == SVt_PVGV) {
3060 if (SvTYPE(arg) == SVt_PVGV) {
3061 IO *io = GvIO((GV *)arg);
3066 tryrsfp = IoIFP(io);
3067 if (IoTYPE(io) == '|') {
3068 /* reading from a child process doesn't
3069 nest -- when returning from reading
3070 the inner module, the outer one is
3071 unreadable (closed?) I've tried to
3072 save the gv to manage the lifespan of
3073 the pipe, but this didn't help. XXX */
3074 filter_child_proc = (GV *)arg;
3075 (void)SvREFCNT_inc(filter_child_proc);
3078 if (IoOFP(io) && IoOFP(io) != IoIFP(io)) {
3079 PerlIO_close(IoOFP(io));
3091 if (SvROK(arg) && SvTYPE(SvRV(arg)) == SVt_PVCV) {
3093 (void)SvREFCNT_inc(filter_sub);
3096 filter_state = SP[i];
3097 (void)SvREFCNT_inc(filter_state);
3101 tryrsfp = PerlIO_open("/dev/null",
3115 filter_has_file = 0;
3116 if (filter_child_proc) {
3117 SvREFCNT_dec(filter_child_proc);
3118 filter_child_proc = 0;
3121 SvREFCNT_dec(filter_state);
3125 SvREFCNT_dec(filter_sub);
3130 char *dir = SvPVx(dirsv, n_a);
3131 #ifdef MACOS_TRADITIONAL
3132 /* We have ensured in incpush that library ends with ':' */
3133 Perl_sv_setpvf(aTHX_ namesv, "%s%s", dir, name+(name[0] == ':'));
3137 if ((unixdir = tounixpath(dir, Nullch)) == Nullch)
3139 sv_setpv(namesv, unixdir);
3140 sv_catpv(namesv, unixname);
3142 Perl_sv_setpvf(aTHX_ namesv, "%s/%s", dir, name);
3145 TAINT_PROPER("require");
3146 tryname = SvPVX(namesv);
3147 #ifdef MACOS_TRADITIONAL
3149 /* Convert slashes in the name part, but not the directory part, to colons */
3151 for (colon = tryname+strlen(dir); colon = strchr(colon, '/'); )
3155 tryrsfp = doopen_pmc(tryname, PERL_SCRIPT_MODE);
3157 if (tryname[0] == '.' && tryname[1] == '/')
3165 SAVECOPFILE_FREE(&PL_compiling);
3166 CopFILE_set(&PL_compiling, tryrsfp ? tryname : name);
3167 SvREFCNT_dec(namesv);
3169 if (PL_op->op_type == OP_REQUIRE) {
3170 char *msgstr = name;
3171 if (namesv) { /* did we lookup @INC? */
3172 SV *msg = sv_2mortal(newSVpv(msgstr,0));
3173 SV *dirmsgsv = NEWSV(0, 0);
3174 AV *ar = GvAVn(PL_incgv);
3176 sv_catpvn(msg, " in @INC", 8);
3177 if (instr(SvPVX(msg), ".h "))
3178 sv_catpv(msg, " (change .h to .ph maybe?)");
3179 if (instr(SvPVX(msg), ".ph "))
3180 sv_catpv(msg, " (did you run h2ph?)");
3181 sv_catpv(msg, " (@INC contains:");
3182 for (i = 0; i <= AvFILL(ar); i++) {
3183 char *dir = SvPVx(*av_fetch(ar, i, TRUE), n_a);
3184 Perl_sv_setpvf(aTHX_ dirmsgsv, " %s", dir);
3185 sv_catsv(msg, dirmsgsv);
3187 sv_catpvn(msg, ")", 1);
3188 SvREFCNT_dec(dirmsgsv);
3189 msgstr = SvPV_nolen(msg);
3191 DIE(aTHX_ "Can't locate %s", msgstr);
3197 SETERRNO(0, SS$_NORMAL);
3199 /* Assume success here to prevent recursive requirement. */
3200 (void)hv_store(GvHVn(PL_incgv), name, strlen(name),
3201 newSVpv(CopFILE(&PL_compiling), 0), 0 );
3205 lex_start(sv_2mortal(newSVpvn("",0)));
3206 SAVEGENERICSV(PL_rsfp_filters);
3207 PL_rsfp_filters = Nullav;
3212 SAVESPTR(PL_compiling.cop_warnings);
3213 if (PL_dowarn & G_WARN_ALL_ON)
3214 PL_compiling.cop_warnings = pWARN_ALL ;
3215 else if (PL_dowarn & G_WARN_ALL_OFF)
3216 PL_compiling.cop_warnings = pWARN_NONE ;
3218 PL_compiling.cop_warnings = pWARN_STD ;
3220 if (filter_sub || filter_child_proc) {
3221 SV *datasv = filter_add(run_user_filter, Nullsv);
3222 IoLINES(datasv) = filter_has_file;
3223 IoFMT_GV(datasv) = (GV *)filter_child_proc;
3224 IoTOP_GV(datasv) = (GV *)filter_state;
3225 IoBOTTOM_GV(datasv) = (GV *)filter_sub;
3228 /* switch to eval mode */
3229 push_return(PL_op->op_next);
3230 PUSHBLOCK(cx, CXt_EVAL, SP);
3231 PUSHEVAL(cx, name, Nullgv);
3233 SAVECOPLINE(&PL_compiling);
3234 CopLINE_set(&PL_compiling, 0);
3238 MUTEX_LOCK(&PL_eval_mutex);
3239 if (PL_eval_owner && PL_eval_owner != thr)
3240 while (PL_eval_owner)
3241 COND_WAIT(&PL_eval_cond, &PL_eval_mutex);
3242 PL_eval_owner = thr;
3243 MUTEX_UNLOCK(&PL_eval_mutex);
3244 #endif /* USE_THREADS */
3245 return DOCATCH(doeval(G_SCALAR, NULL));
3250 return pp_require();
3256 register PERL_CONTEXT *cx;
3258 I32 gimme = GIMME_V, was = PL_sub_generation;
3259 char tbuf[TYPE_DIGITS(long) + 12];
3260 char *tmpbuf = tbuf;
3265 if (!SvPV(sv,len) || !len)
3267 TAINT_PROPER("eval");
3273 /* switch to eval mode */
3275 if (PERLDB_NAMEEVAL && CopLINE(PL_curcop)) {
3276 SV *sv = sv_newmortal();
3277 Perl_sv_setpvf(aTHX_ sv, "_<(eval %lu)[%s:%"IVdf"]",
3278 (unsigned long)++PL_evalseq,
3279 CopFILE(PL_curcop), (IV)CopLINE(PL_curcop));
3283 sprintf(tmpbuf, "_<(eval %lu)", (unsigned long)++PL_evalseq);
3284 SAVECOPFILE_FREE(&PL_compiling);
3285 CopFILE_set(&PL_compiling, tmpbuf+2);
3286 SAVECOPLINE(&PL_compiling);
3287 CopLINE_set(&PL_compiling, 1);
3288 /* XXX For C<eval "...">s within BEGIN {} blocks, this ends up
3289 deleting the eval's FILEGV from the stash before gv_check() runs
3290 (i.e. before run-time proper). To work around the coredump that
3291 ensues, we always turn GvMULTI_on for any globals that were
3292 introduced within evals. See force_ident(). GSAR 96-10-12 */
3293 safestr = savepv(tmpbuf);
3294 SAVEDELETE(PL_defstash, safestr, strlen(safestr));
3296 PL_hints = PL_op->op_targ;
3297 SAVESPTR(PL_compiling.cop_warnings);
3298 if (specialWARN(PL_curcop->cop_warnings))
3299 PL_compiling.cop_warnings = PL_curcop->cop_warnings;
3301 PL_compiling.cop_warnings = newSVsv(PL_curcop->cop_warnings);
3302 SAVEFREESV(PL_compiling.cop_warnings);
3305 push_return(PL_op->op_next);
3306 PUSHBLOCK(cx, (CXt_EVAL|CXp_REAL), SP);
3307 PUSHEVAL(cx, 0, Nullgv);
3309 /* prepare to compile string */
3311 if (PERLDB_LINE && PL_curstash != PL_debstash)
3312 save_lines(CopFILEAV(&PL_compiling), PL_linestr);
3315 MUTEX_LOCK(&PL_eval_mutex);
3316 if (PL_eval_owner && PL_eval_owner != thr)
3317 while (PL_eval_owner)
3318 COND_WAIT(&PL_eval_cond, &PL_eval_mutex);
3319 PL_eval_owner = thr;
3320 MUTEX_UNLOCK(&PL_eval_mutex);
3321 #endif /* USE_THREADS */
3322 ret = doeval(gimme, NULL);
3323 if (PERLDB_INTER && was != PL_sub_generation /* Some subs defined here. */
3324 && ret != PL_op->op_next) { /* Successive compilation. */
3325 strcpy(safestr, "_<(eval )"); /* Anything fake and short. */
3327 return DOCATCH(ret);
3337 register PERL_CONTEXT *cx;
3339 U8 save_flags = PL_op -> op_flags;
3344 retop = pop_return();
3347 if (gimme == G_VOID)
3349 else if (gimme == G_SCALAR) {
3352 if (SvFLAGS(TOPs) & SVs_TEMP)
3355 *MARK = sv_mortalcopy(TOPs);
3359 *MARK = &PL_sv_undef;
3364 /* in case LEAVE wipes old return values */
3365 for (mark = newsp + 1; mark <= SP; mark++) {
3366 if (!(SvFLAGS(*mark) & SVs_TEMP)) {
3367 *mark = sv_mortalcopy(*mark);
3368 TAINT_NOT; /* Each item is independent */
3372 PL_curpm = newpm; /* Don't pop $1 et al till now */
3374 if (AvFILLp(PL_comppad_name) >= 0)
3378 assert(CvDEPTH(PL_compcv) == 1);
3380 CvDEPTH(PL_compcv) = 0;
3383 if (optype == OP_REQUIRE &&
3384 !(gimme == G_SCALAR ? SvTRUE(*SP) : SP > newsp))
3386 /* Unassume the success we assumed earlier. */
3387 SV *nsv = cx->blk_eval.old_namesv;
3388 (void)hv_delete(GvHVn(PL_incgv), SvPVX(nsv), SvCUR(nsv), G_DISCARD);
3389 retop = Perl_die(aTHX_ "%s did not return a true value", SvPVX(nsv));
3390 /* die_where() did LEAVE, or we won't be here */
3394 if (!(save_flags & OPf_SPECIAL))
3404 register PERL_CONTEXT *cx;
3405 I32 gimme = GIMME_V;
3410 push_return(cLOGOP->op_other->op_next);
3411 PUSHBLOCK(cx, (CXt_EVAL|CXp_TRYBLOCK), SP);
3413 PL_eval_root = PL_op; /* Only needed so that goto works right. */
3415 PL_in_eval = EVAL_INEVAL;
3418 return DOCATCH(PL_op->op_next);
3428 register PERL_CONTEXT *cx;
3436 if (gimme == G_VOID)
3438 else if (gimme == G_SCALAR) {
3441 if (SvFLAGS(TOPs) & (SVs_PADTMP|SVs_TEMP))
3444 *MARK = sv_mortalcopy(TOPs);
3448 *MARK = &PL_sv_undef;
3453 /* in case LEAVE wipes old return values */
3454 for (mark = newsp + 1; mark <= SP; mark++) {
3455 if (!(SvFLAGS(*mark) & (SVs_PADTMP|SVs_TEMP))) {
3456 *mark = sv_mortalcopy(*mark);
3457 TAINT_NOT; /* Each item is independent */
3461 PL_curpm = newpm; /* Don't pop $1 et al till now */
3469 S_doparseform(pTHX_ SV *sv)
3472 register char *s = SvPV_force(sv, len);
3473 register char *send = s + len;
3474 register char *base;
3475 register I32 skipspaces = 0;
3478 bool postspace = FALSE;
3486 Perl_croak(aTHX_ "Null picture in formline");
3488 New(804, fops, (send - s)*3+10, U16); /* Almost certainly too long... */
3493 *fpc++ = FF_LINEMARK;
3494 noblank = repeat = FALSE;
3512 case ' ': case '\t':
3523 *fpc++ = FF_LITERAL;
3531 *fpc++ = skipspaces;
3535 *fpc++ = FF_NEWLINE;
3539 arg = fpc - linepc + 1;
3546 *fpc++ = FF_LINEMARK;
3547 noblank = repeat = FALSE;
3556 ischop = s[-1] == '^';
3562 arg = (s - base) - 1;
3564 *fpc++ = FF_LITERAL;
3573 *fpc++ = FF_LINEGLOB;
3575 else if (*s == '#' || (*s == '.' && s[1] == '#')) {
3576 arg = ischop ? 512 : 0;
3586 arg |= 256 + (s - f);
3588 *fpc++ = s - base; /* fieldsize for FETCH */
3589 *fpc++ = FF_DECIMAL;
3594 bool ismore = FALSE;
3597 while (*++s == '>') ;
3598 prespace = FF_SPACE;
3600 else if (*s == '|') {
3601 while (*++s == '|') ;
3602 prespace = FF_HALFSPACE;
3607 while (*++s == '<') ;
3610 if (*s == '.' && s[1] == '.' && s[2] == '.') {
3614 *fpc++ = s - base; /* fieldsize for FETCH */
3616 *fpc++ = ischop ? FF_CHECKCHOP : FF_CHECKNL;
3634 { /* need to jump to the next word */
3636 z = WORD_ALIGN - SvCUR(sv) % WORD_ALIGN;
3637 SvGROW(sv, SvCUR(sv) + z + arg * sizeof(U16) + 4);
3638 s = SvPVX(sv) + SvCUR(sv) + z;
3640 Copy(fops, s, arg, U16);
3642 sv_magic(sv, Nullsv, 'f', Nullch, 0);
3647 * The rest of this file was derived from source code contributed
3650 * NOTE: this code was derived from Tom Horsley's qsort replacement
3651 * and should not be confused with the original code.
3654 /* Copyright (C) Tom Horsley, 1997. All rights reserved.
3656 Permission granted to distribute under the same terms as perl which are
3659 This program is free software; you can redistribute it and/or modify
3660 it under the terms of either:
3662 a) the GNU General Public License as published by the Free
3663 Software Foundation; either version 1, or (at your option) any
3666 b) the "Artistic License" which comes with this Kit.
3668 Details on the perl license can be found in the perl source code which
3669 may be located via the www.perl.com web page.
3671 This is the most wonderfulest possible qsort I can come up with (and
3672 still be mostly portable) My (limited) tests indicate it consistently
3673 does about 20% fewer calls to compare than does the qsort in the Visual
3674 C++ library, other vendors may vary.
3676 Some of the ideas in here can be found in "Algorithms" by Sedgewick,
3677 others I invented myself (or more likely re-invented since they seemed
3678 pretty obvious once I watched the algorithm operate for a while).
3680 Most of this code was written while watching the Marlins sweep the Giants
3681 in the 1997 National League Playoffs - no Braves fans allowed to use this
3682 code (just kidding :-).
3684 I realize that if I wanted to be true to the perl tradition, the only
3685 comment in this file would be something like:
3687 ...they shuffled back towards the rear of the line. 'No, not at the
3688 rear!' the slave-driver shouted. 'Three files up. And stay there...
3690 However, I really needed to violate that tradition just so I could keep
3691 track of what happens myself, not to mention some poor fool trying to
3692 understand this years from now :-).
3695 /* ********************************************************** Configuration */
3697 #ifndef QSORT_ORDER_GUESS
3698 #define QSORT_ORDER_GUESS 2 /* Select doubling version of the netBSD trick */
3701 /* QSORT_MAX_STACK is the largest number of partitions that can be stacked up for
3702 future processing - a good max upper bound is log base 2 of memory size
3703 (32 on 32 bit machines, 64 on 64 bit machines, etc). In reality can
3704 safely be smaller than that since the program is taking up some space and
3705 most operating systems only let you grab some subset of contiguous
3706 memory (not to mention that you are normally sorting data larger than
3707 1 byte element size :-).
3709 #ifndef QSORT_MAX_STACK
3710 #define QSORT_MAX_STACK 32
3713 /* QSORT_BREAK_EVEN is the size of the largest partition we should insertion sort.
3714 Anything bigger and we use qsort. If you make this too small, the qsort
3715 will probably break (or become less efficient), because it doesn't expect
3716 the middle element of a partition to be the same as the right or left -
3717 you have been warned).
3719 #ifndef QSORT_BREAK_EVEN
3720 #define QSORT_BREAK_EVEN 6
3723 /* ************************************************************* Data Types */
3725 /* hold left and right index values of a partition waiting to be sorted (the
3726 partition includes both left and right - right is NOT one past the end or
3727 anything like that).
3729 struct partition_stack_entry {
3732 #ifdef QSORT_ORDER_GUESS
3733 int qsort_break_even;
3737 /* ******************************************************* Shorthand Macros */
3739 /* Note that these macros will be used from inside the qsort function where
3740 we happen to know that the variable 'elt_size' contains the size of an
3741 array element and the variable 'temp' points to enough space to hold a
3742 temp element and the variable 'array' points to the array being sorted
3743 and 'compare' is the pointer to the compare routine.
3745 Also note that there are very many highly architecture specific ways
3746 these might be sped up, but this is simply the most generally portable
3747 code I could think of.
3750 /* Return < 0 == 0 or > 0 as the value of elt1 is < elt2, == elt2, > elt2
3752 #define qsort_cmp(elt1, elt2) \
3753 ((*compare)(aTHXo_ array[elt1], array[elt2]))
3755 #ifdef QSORT_ORDER_GUESS
3756 #define QSORT_NOTICE_SWAP swapped++;
3758 #define QSORT_NOTICE_SWAP
3761 /* swaps contents of array elements elt1, elt2.
3763 #define qsort_swap(elt1, elt2) \
3766 temp = array[elt1]; \
3767 array[elt1] = array[elt2]; \
3768 array[elt2] = temp; \
3771 /* rotate contents of elt1, elt2, elt3 such that elt1 gets elt2, elt2 gets
3772 elt3 and elt3 gets elt1.
3774 #define qsort_rotate(elt1, elt2, elt3) \
3777 temp = array[elt1]; \
3778 array[elt1] = array[elt2]; \
3779 array[elt2] = array[elt3]; \
3780 array[elt3] = temp; \
3783 /* ************************************************************ Debug stuff */
3790 return; /* good place to set a breakpoint */
3793 #define qsort_assert(t) (void)( (t) || (break_here(), 0) )
3796 doqsort_all_asserts(
3800 int (*compare)(const void * elt1, const void * elt2),
3801 int pc_left, int pc_right, int u_left, int u_right)
3805 qsort_assert(pc_left <= pc_right);
3806 qsort_assert(u_right < pc_left);
3807 qsort_assert(pc_right < u_left);
3808 for (i = u_right + 1; i < pc_left; ++i) {
3809 qsort_assert(qsort_cmp(i, pc_left) < 0);
3811 for (i = pc_left; i < pc_right; ++i) {
3812 qsort_assert(qsort_cmp(i, pc_right) == 0);
3814 for (i = pc_right + 1; i < u_left; ++i) {
3815 qsort_assert(qsort_cmp(pc_right, i) < 0);
3819 #define qsort_all_asserts(PC_LEFT, PC_RIGHT, U_LEFT, U_RIGHT) \
3820 doqsort_all_asserts(array, num_elts, elt_size, compare, \
3821 PC_LEFT, PC_RIGHT, U_LEFT, U_RIGHT)
3825 #define qsort_assert(t) ((void)0)
3827 #define qsort_all_asserts(PC_LEFT, PC_RIGHT, U_LEFT, U_RIGHT) ((void)0)
3831 /* ****************************************************************** qsort */
3834 S_qsortsv(pTHX_ SV ** array, size_t num_elts, SVCOMPARE_t compare)
3838 struct partition_stack_entry partition_stack[QSORT_MAX_STACK];
3839 int next_stack_entry = 0;
3843 #ifdef QSORT_ORDER_GUESS
3844 int qsort_break_even;
3848 /* Make sure we actually have work to do.
3850 if (num_elts <= 1) {
3854 /* Setup the initial partition definition and fall into the sorting loop
3857 part_right = (int)(num_elts - 1);
3858 #ifdef QSORT_ORDER_GUESS
3859 qsort_break_even = QSORT_BREAK_EVEN;
3861 #define qsort_break_even QSORT_BREAK_EVEN
3864 if ((part_right - part_left) >= qsort_break_even) {
3865 /* OK, this is gonna get hairy, so lets try to document all the
3866 concepts and abbreviations and variables and what they keep
3869 pc: pivot chunk - the set of array elements we accumulate in the
3870 middle of the partition, all equal in value to the original
3871 pivot element selected. The pc is defined by:
3873 pc_left - the leftmost array index of the pc
3874 pc_right - the rightmost array index of the pc
3876 we start with pc_left == pc_right and only one element
3877 in the pivot chunk (but it can grow during the scan).
3879 u: uncompared elements - the set of elements in the partition
3880 we have not yet compared to the pivot value. There are two
3881 uncompared sets during the scan - one to the left of the pc
3882 and one to the right.
3884 u_right - the rightmost index of the left side's uncompared set
3885 u_left - the leftmost index of the right side's uncompared set
3887 The leftmost index of the left sides's uncompared set
3888 doesn't need its own variable because it is always defined
3889 by the leftmost edge of the whole partition (part_left). The
3890 same goes for the rightmost edge of the right partition
3893 We know there are no uncompared elements on the left once we
3894 get u_right < part_left and no uncompared elements on the
3895 right once u_left > part_right. When both these conditions
3896 are met, we have completed the scan of the partition.
3898 Any elements which are between the pivot chunk and the
3899 uncompared elements should be less than the pivot value on
3900 the left side and greater than the pivot value on the right
3901 side (in fact, the goal of the whole algorithm is to arrange
3902 for that to be true and make the groups of less-than and
3903 greater-then elements into new partitions to sort again).
3905 As you marvel at the complexity of the code and wonder why it
3906 has to be so confusing. Consider some of the things this level
3907 of confusion brings:
3909 Once I do a compare, I squeeze every ounce of juice out of it. I
3910 never do compare calls I don't have to do, and I certainly never
3913 I also never swap any elements unless I can prove there is a
3914 good reason. Many sort algorithms will swap a known value with
3915 an uncompared value just to get things in the right place (or
3916 avoid complexity :-), but that uncompared value, once it gets
3917 compared, may then have to be swapped again. A lot of the
3918 complexity of this code is due to the fact that it never swaps
3919 anything except compared values, and it only swaps them when the
3920 compare shows they are out of position.
3922 int pc_left, pc_right;
3923 int u_right, u_left;
3927 pc_left = ((part_left + part_right) / 2);
3929 u_right = pc_left - 1;
3930 u_left = pc_right + 1;
3932 /* Qsort works best when the pivot value is also the median value
3933 in the partition (unfortunately you can't find the median value
3934 without first sorting :-), so to give the algorithm a helping
3935 hand, we pick 3 elements and sort them and use the median value
3936 of that tiny set as the pivot value.
3938 Some versions of qsort like to use the left middle and right as
3939 the 3 elements to sort so they can insure the ends of the
3940 partition will contain values which will stop the scan in the
3941 compare loop, but when you have to call an arbitrarily complex
3942 routine to do a compare, its really better to just keep track of
3943 array index values to know when you hit the edge of the
3944 partition and avoid the extra compare. An even better reason to
3945 avoid using a compare call is the fact that you can drop off the
3946 edge of the array if someone foolishly provides you with an
3947 unstable compare function that doesn't always provide consistent
3950 So, since it is simpler for us to compare the three adjacent
3951 elements in the middle of the partition, those are the ones we
3952 pick here (conveniently pointed at by u_right, pc_left, and
3953 u_left). The values of the left, center, and right elements
3954 are refered to as l c and r in the following comments.
3957 #ifdef QSORT_ORDER_GUESS
3960 s = qsort_cmp(u_right, pc_left);
3963 s = qsort_cmp(pc_left, u_left);
3964 /* if l < c, c < r - already in order - nothing to do */
3966 /* l < c, c == r - already in order, pc grows */
3968 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3970 /* l < c, c > r - need to know more */
3971 s = qsort_cmp(u_right, u_left);
3973 /* l < c, c > r, l < r - swap c & r to get ordered */
3974 qsort_swap(pc_left, u_left);
3975 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3976 } else if (s == 0) {
3977 /* l < c, c > r, l == r - swap c&r, grow pc */
3978 qsort_swap(pc_left, u_left);
3980 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3982 /* l < c, c > r, l > r - make lcr into rlc to get ordered */
3983 qsort_rotate(pc_left, u_right, u_left);
3984 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3987 } else if (s == 0) {
3989 s = qsort_cmp(pc_left, u_left);
3991 /* l == c, c < r - already in order, grow pc */
3993 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3994 } else if (s == 0) {
3995 /* l == c, c == r - already in order, grow pc both ways */
3998 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
4000 /* l == c, c > r - swap l & r, grow pc */
4001 qsort_swap(u_right, u_left);
4003 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
4007 s = qsort_cmp(pc_left, u_left);
4009 /* l > c, c < r - need to know more */
4010 s = qsort_cmp(u_right, u_left);
4012 /* l > c, c < r, l < r - swap l & c to get ordered */
4013 qsort_swap(u_right, pc_left);
4014 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
4015 } else if (s == 0) {
4016 /* l > c, c < r, l == r - swap l & c, grow pc */
4017 qsort_swap(u_right, pc_left);
4019 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
4021 /* l > c, c < r, l > r - rotate lcr into crl to order */
4022 qsort_rotate(u_right, pc_left, u_left);
4023 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
4025 } else if (s == 0) {
4026 /* l > c, c == r - swap ends, grow pc */
4027 qsort_swap(u_right, u_left);
4029 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
4031 /* l > c, c > r - swap ends to get in order */
4032 qsort_swap(u_right, u_left);
4033 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
4036 /* We now know the 3 middle elements have been compared and
4037 arranged in the desired order, so we can shrink the uncompared
4042 qsort_all_asserts(pc_left, pc_right, u_left, u_right);
4044 /* The above massive nested if was the simple part :-). We now have
4045 the middle 3 elements ordered and we need to scan through the
4046 uncompared sets on either side, swapping elements that are on
4047 the wrong side or simply shuffling equal elements around to get
4048 all equal elements into the pivot chunk.
4052 int still_work_on_left;
4053 int still_work_on_right;
4055 /* Scan the uncompared values on the left. If I find a value
4056 equal to the pivot value, move it over so it is adjacent to
4057 the pivot chunk and expand the pivot chunk. If I find a value
4058 less than the pivot value, then just leave it - its already
4059 on the correct side of the partition. If I find a greater
4060 value, then stop the scan.
4062 while ((still_work_on_left = (u_right >= part_left))) {
4063 s = qsort_cmp(u_right, pc_left);
4066 } else if (s == 0) {
4068 if (pc_left != u_right) {
4069 qsort_swap(u_right, pc_left);
4075 qsort_assert(u_right < pc_left);
4076 qsort_assert(pc_left <= pc_right);
4077 qsort_assert(qsort_cmp(u_right + 1, pc_left) <= 0);
4078 qsort_assert(qsort_cmp(pc_left, pc_right) == 0);
4081 /* Do a mirror image scan of uncompared values on the right
4083 while ((still_work_on_right = (u_left <= part_right))) {
4084 s = qsort_cmp(pc_right, u_left);
4087 } else if (s == 0) {
4089 if (pc_right != u_left) {
4090 qsort_swap(pc_right, u_left);
4096 qsort_assert(u_left > pc_right);
4097 qsort_assert(pc_left <= pc_right);
4098 qsort_assert(qsort_cmp(pc_right, u_left - 1) <= 0);
4099 qsort_assert(qsort_cmp(pc_left, pc_right) == 0);
4102 if (still_work_on_left) {
4103 /* I know I have a value on the left side which needs to be
4104 on the right side, but I need to know more to decide
4105 exactly the best thing to do with it.
4107 if (still_work_on_right) {
4108 /* I know I have values on both side which are out of
4109 position. This is a big win because I kill two birds
4110 with one swap (so to speak). I can advance the
4111 uncompared pointers on both sides after swapping both
4112 of them into the right place.
4114 qsort_swap(u_right, u_left);
4117 qsort_all_asserts(pc_left, pc_right, u_left, u_right);
4119 /* I have an out of position value on the left, but the
4120 right is fully scanned, so I "slide" the pivot chunk
4121 and any less-than values left one to make room for the
4122 greater value over on the right. If the out of position
4123 value is immediately adjacent to the pivot chunk (there
4124 are no less-than values), I can do that with a swap,
4125 otherwise, I have to rotate one of the less than values
4126 into the former position of the out of position value
4127 and the right end of the pivot chunk into the left end
4131 if (pc_left == u_right) {
4132 qsort_swap(u_right, pc_right);
4133 qsort_all_asserts(pc_left, pc_right-1, u_left, u_right-1);
4135 qsort_rotate(u_right, pc_left, pc_right);
4136 qsort_all_asserts(pc_left, pc_right-1, u_left, u_right-1);
4141 } else if (still_work_on_right) {
4142 /* Mirror image of complex case above: I have an out of
4143 position value on the right, but the left is fully
4144 scanned, so I need to shuffle things around to make room
4145 for the right value on the left.
4148 if (pc_right == u_left) {
4149 qsort_swap(u_left, pc_left);
4150 qsort_all_asserts(pc_left+1, pc_right, u_left+1, u_right);
4152 qsort_rotate(pc_right, pc_left, u_left);
4153 qsort_all_asserts(pc_left+1, pc_right, u_left+1, u_right);
4158 /* No more scanning required on either side of partition,
4159 break out of loop and figure out next set of partitions
4165 /* The elements in the pivot chunk are now in the right place. They
4166 will never move or be compared again. All I have to do is decide
4167 what to do with the stuff to the left and right of the pivot
4170 Notes on the QSORT_ORDER_GUESS ifdef code:
4172 1. If I just built these partitions without swapping any (or
4173 very many) elements, there is a chance that the elements are
4174 already ordered properly (being properly ordered will
4175 certainly result in no swapping, but the converse can't be
4178 2. A (properly written) insertion sort will run faster on
4179 already ordered data than qsort will.
4181 3. Perhaps there is some way to make a good guess about
4182 switching to an insertion sort earlier than partition size 6
4183 (for instance - we could save the partition size on the stack
4184 and increase the size each time we find we didn't swap, thus
4185 switching to insertion sort earlier for partitions with a
4186 history of not swapping).
4188 4. Naturally, if I just switch right away, it will make
4189 artificial benchmarks with pure ascending (or descending)
4190 data look really good, but is that a good reason in general?
4194 #ifdef QSORT_ORDER_GUESS
4196 #if QSORT_ORDER_GUESS == 1
4197 qsort_break_even = (part_right - part_left) + 1;
4199 #if QSORT_ORDER_GUESS == 2
4200 qsort_break_even *= 2;
4202 #if QSORT_ORDER_GUESS == 3
4203 int prev_break = qsort_break_even;
4204 qsort_break_even *= qsort_break_even;
4205 if (qsort_break_even < prev_break) {
4206 qsort_break_even = (part_right - part_left) + 1;
4210 qsort_break_even = QSORT_BREAK_EVEN;
4214 if (part_left < pc_left) {
4215 /* There are elements on the left which need more processing.
4216 Check the right as well before deciding what to do.
4218 if (pc_right < part_right) {
4219 /* We have two partitions to be sorted. Stack the biggest one
4220 and process the smallest one on the next iteration. This
4221 minimizes the stack height by insuring that any additional
4222 stack entries must come from the smallest partition which
4223 (because it is smallest) will have the fewest
4224 opportunities to generate additional stack entries.
4226 if ((part_right - pc_right) > (pc_left - part_left)) {
4227 /* stack the right partition, process the left */
4228 partition_stack[next_stack_entry].left = pc_right + 1;
4229 partition_stack[next_stack_entry].right = part_right;
4230 #ifdef QSORT_ORDER_GUESS
4231 partition_stack[next_stack_entry].qsort_break_even = qsort_break_even;
4233 part_right = pc_left - 1;
4235 /* stack the left partition, process the right */
4236 partition_stack[next_stack_entry].left = part_left;
4237 partition_stack[next_stack_entry].right = pc_left - 1;
4238 #ifdef QSORT_ORDER_GUESS
4239 partition_stack[next_stack_entry].qsort_break_even = qsort_break_even;
4241 part_left = pc_right + 1;
4243 qsort_assert(next_stack_entry < QSORT_MAX_STACK);
4246 /* The elements on the left are the only remaining elements
4247 that need sorting, arrange for them to be processed as the
4250 part_right = pc_left - 1;
4252 } else if (pc_right < part_right) {
4253 /* There is only one chunk on the right to be sorted, make it
4254 the new partition and loop back around.
4256 part_left = pc_right + 1;
4258 /* This whole partition wound up in the pivot chunk, so
4259 we need to get a new partition off the stack.
4261 if (next_stack_entry == 0) {
4262 /* the stack is empty - we are done */
4266 part_left = partition_stack[next_stack_entry].left;
4267 part_right = partition_stack[next_stack_entry].right;
4268 #ifdef QSORT_ORDER_GUESS
4269 qsort_break_even = partition_stack[next_stack_entry].qsort_break_even;
4273 /* This partition is too small to fool with qsort complexity, just
4274 do an ordinary insertion sort to minimize overhead.
4277 /* Assume 1st element is in right place already, and start checking
4278 at 2nd element to see where it should be inserted.
4280 for (i = part_left + 1; i <= part_right; ++i) {
4282 /* Scan (backwards - just in case 'i' is already in right place)
4283 through the elements already sorted to see if the ith element
4284 belongs ahead of one of them.
4286 for (j = i - 1; j >= part_left; --j) {
4287 if (qsort_cmp(i, j) >= 0) {
4288 /* i belongs right after j
4295 /* Looks like we really need to move some things
4299 for (k = i - 1; k >= j; --k)
4300 array[k + 1] = array[k];
4305 /* That partition is now sorted, grab the next one, or get out
4306 of the loop if there aren't any more.
4309 if (next_stack_entry == 0) {
4310 /* the stack is empty - we are done */
4314 part_left = partition_stack[next_stack_entry].left;
4315 part_right = partition_stack[next_stack_entry].right;
4316 #ifdef QSORT_ORDER_GUESS
4317 qsort_break_even = partition_stack[next_stack_entry].qsort_break_even;
4322 /* Believe it or not, the array is sorted at this point! */
4334 sortcv(pTHXo_ SV *a, SV *b)
4337 I32 oldsaveix = PL_savestack_ix;
4338 I32 oldscopeix = PL_scopestack_ix;
4340 GvSV(PL_firstgv) = a;
4341 GvSV(PL_secondgv) = b;
4342 PL_stack_sp = PL_stack_base;
4345 if (PL_stack_sp != PL_stack_base + 1)
4346 Perl_croak(aTHX_ "Sort subroutine didn't return single value");
4347 if (!SvNIOKp(*PL_stack_sp))
4348 Perl_croak(aTHX_ "Sort subroutine didn't return a numeric value");
4349 result = SvIV(*PL_stack_sp);
4350 while (PL_scopestack_ix > oldscopeix) {
4353 leave_scope(oldsaveix);
4358 sortcv_stacked(pTHXo_ SV *a, SV *b)
4361 I32 oldsaveix = PL_savestack_ix;
4362 I32 oldscopeix = PL_scopestack_ix;
4367 av = (AV*)PL_curpad[0];
4369 av = GvAV(PL_defgv);
4372 if (AvMAX(av) < 1) {
4373 SV** ary = AvALLOC(av);
4374 if (AvARRAY(av) != ary) {
4375 AvMAX(av) += AvARRAY(av) - AvALLOC(av);
4376 SvPVX(av) = (char*)ary;
4378 if (AvMAX(av) < 1) {
4381 SvPVX(av) = (char*)ary;
4388 PL_stack_sp = PL_stack_base;
4391 if (PL_stack_sp != PL_stack_base + 1)
4392 Perl_croak(aTHX_ "Sort subroutine didn't return single value");
4393 if (!SvNIOKp(*PL_stack_sp))
4394 Perl_croak(aTHX_ "Sort subroutine didn't return a numeric value");
4395 result = SvIV(*PL_stack_sp);
4396 while (PL_scopestack_ix > oldscopeix) {
4399 leave_scope(oldsaveix);
4404 sortcv_xsub(pTHXo_ SV *a, SV *b)
4407 I32 oldsaveix = PL_savestack_ix;
4408 I32 oldscopeix = PL_scopestack_ix;
4410 CV *cv=(CV*)PL_sortcop;
4418 (void)(*CvXSUB(cv))(aTHXo_ cv);
4419 if (PL_stack_sp != PL_stack_base + 1)
4420 Perl_croak(aTHX_ "Sort subroutine didn't return single value");
4421 if (!SvNIOKp(*PL_stack_sp))
4422 Perl_croak(aTHX_ "Sort subroutine didn't return a numeric value");
4423 result = SvIV(*PL_stack_sp);
4424 while (PL_scopestack_ix > oldscopeix) {
4427 leave_scope(oldsaveix);
4433 sv_ncmp(pTHXo_ SV *a, SV *b)
4437 return nv1 < nv2 ? -1 : nv1 > nv2 ? 1 : 0;
4441 sv_i_ncmp(pTHXo_ SV *a, SV *b)
4445 return iv1 < iv2 ? -1 : iv1 > iv2 ? 1 : 0;
4447 #define tryCALL_AMAGICbin(left,right,meth,svp) STMT_START { \
4449 if (PL_amagic_generation) { \
4450 if (SvAMAGIC(left)||SvAMAGIC(right))\
4451 *svp = amagic_call(left, \
4459 amagic_ncmp(pTHXo_ register SV *a, register SV *b)
4462 tryCALL_AMAGICbin(a,b,ncmp,&tmpsv);
4467 I32 i = SvIVX(tmpsv);
4477 return sv_ncmp(aTHXo_ a, b);
4481 amagic_i_ncmp(pTHXo_ register SV *a, register SV *b)
4484 tryCALL_AMAGICbin(a,b,ncmp,&tmpsv);
4489 I32 i = SvIVX(tmpsv);
4499 return sv_i_ncmp(aTHXo_ a, b);
4503 amagic_cmp(pTHXo_ register SV *str1, register SV *str2)
4506 tryCALL_AMAGICbin(str1,str2,scmp,&tmpsv);
4511 I32 i = SvIVX(tmpsv);
4521 return sv_cmp(str1, str2);
4525 amagic_cmp_locale(pTHXo_ register SV *str1, register SV *str2)
4528 tryCALL_AMAGICbin(str1,str2,scmp,&tmpsv);
4533 I32 i = SvIVX(tmpsv);
4543 return sv_cmp_locale(str1, str2);
4547 run_user_filter(pTHXo_ int idx, SV *buf_sv, int maxlen)
4549 SV *datasv = FILTER_DATA(idx);
4550 int filter_has_file = IoLINES(datasv);
4551 GV *filter_child_proc = (GV *)IoFMT_GV(datasv);
4552 SV *filter_state = (SV *)IoTOP_GV(datasv);
4553 SV *filter_sub = (SV *)IoBOTTOM_GV(datasv);
4556 /* I was having segfault trouble under Linux 2.2.5 after a
4557 parse error occured. (Had to hack around it with a test
4558 for PL_error_count == 0.) Solaris doesn't segfault --
4559 not sure where the trouble is yet. XXX */
4561 if (filter_has_file) {
4562 len = FILTER_READ(idx+1, buf_sv, maxlen);
4565 if (filter_sub && len >= 0) {
4576 PUSHs(sv_2mortal(newSViv(maxlen)));
4578 PUSHs(filter_state);
4581 count = call_sv(filter_sub, G_SCALAR);
4597 IoLINES(datasv) = 0;
4598 if (filter_child_proc) {
4599 SvREFCNT_dec(filter_child_proc);
4600 IoFMT_GV(datasv) = Nullgv;
4603 SvREFCNT_dec(filter_state);
4604 IoTOP_GV(datasv) = Nullgv;
4607 SvREFCNT_dec(filter_sub);
4608 IoBOTTOM_GV(datasv) = Nullgv;
4610 filter_del(run_user_filter);
4619 sv_cmp_locale_static(pTHXo_ register SV *str1, register SV *str2)
4621 return sv_cmp_locale(str1, str2);
4625 sv_cmp_static(pTHXo_ register SV *str1, register SV *str2)
4627 return sv_cmp(str1, str2);
4630 #endif /* PERL_OBJECT */