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 (PL_sortstash != stash) {
887 PL_firstgv = gv_fetchpv("a", TRUE, SVt_PV);
888 PL_secondgv = gv_fetchpv("b", TRUE, SVt_PV);
889 PL_sortstash = stash;
892 SAVESPTR(GvSV(PL_firstgv));
893 SAVESPTR(GvSV(PL_secondgv));
895 PUSHBLOCK(cx, CXt_NULL, PL_stack_base);
896 if (!(PL_op->op_flags & OPf_SPECIAL)) {
897 cx->cx_type = CXt_SUB;
898 cx->blk_gimme = G_SCALAR;
901 (void)SvREFCNT_inc(cv); /* in preparation for POPSUB */
903 PL_sortcxix = cxstack_ix;
905 if (hasargs && !is_xsub) {
906 /* This is mostly copied from pp_entersub */
907 AV *av = (AV*)PL_curpad[0];
910 cx->blk_sub.savearray = GvAV(PL_defgv);
911 GvAV(PL_defgv) = (AV*)SvREFCNT_inc(av);
912 #endif /* USE_THREADS */
913 cx->blk_sub.argarray = av;
915 qsortsv((myorigmark+1), max,
916 is_xsub ? sortcv_xsub : hasargs ? sortcv_stacked : sortcv);
918 POPBLOCK(cx,PL_curpm);
926 MEXTEND(SP, 20); /* Can't afford stack realloc on signal. */
927 qsortsv(ORIGMARK+1, max,
928 (PL_op->op_private & OPpSORT_NUMERIC)
929 ? ( (PL_op->op_private & OPpSORT_INTEGER)
930 ? ( overloading ? amagic_i_ncmp : sv_i_ncmp)
931 : ( overloading ? amagic_ncmp : sv_ncmp))
932 : ( (PL_op->op_private & OPpLOCALE)
935 : sv_cmp_locale_static)
936 : ( overloading ? amagic_cmp : sv_cmp_static)));
937 if (PL_op->op_private & OPpSORT_REVERSE) {
939 SV **q = ORIGMARK+max;
949 PL_stack_sp = ORIGMARK + max;
957 if (GIMME == G_ARRAY)
959 if (SvTRUEx(PAD_SV(PL_op->op_targ)))
960 return cLOGOP->op_other;
969 if (GIMME == G_ARRAY) {
970 RETURNOP(((LOGOP*)cUNOP->op_first)->op_other);
974 SV *targ = PAD_SV(PL_op->op_targ);
976 if ((PL_op->op_private & OPpFLIP_LINENUM)
977 ? (PL_last_in_gv && SvIV(sv) == (IV)IoLINES(GvIOp(PL_last_in_gv)))
979 sv_setiv(PAD_SV(cUNOP->op_first->op_targ), 1);
980 if (PL_op->op_flags & OPf_SPECIAL) {
988 RETURNOP(((LOGOP*)cUNOP->op_first)->op_other);
1001 if (GIMME == G_ARRAY) {
1007 if (SvGMAGICAL(left))
1009 if (SvGMAGICAL(right))
1012 if (SvNIOKp(left) || !SvPOKp(left) ||
1013 SvNIOKp(right) || !SvPOKp(right) ||
1014 (looks_like_number(left) && *SvPVX(left) != '0' &&
1015 looks_like_number(right) && *SvPVX(right) != '0'))
1017 if (SvNV(left) < IV_MIN || SvNV(right) > IV_MAX)
1018 DIE(aTHX_ "Range iterator outside integer range");
1029 sv = sv_2mortal(newSViv(i++));
1034 SV *final = sv_mortalcopy(right);
1036 char *tmps = SvPV(final, len);
1038 sv = sv_mortalcopy(left);
1040 while (!SvNIOKp(sv) && SvCUR(sv) <= len) {
1042 if (strEQ(SvPVX(sv),tmps))
1044 sv = sv_2mortal(newSVsv(sv));
1051 SV *targ = PAD_SV(cUNOP->op_first->op_targ);
1053 if ((PL_op->op_private & OPpFLIP_LINENUM)
1054 ? (PL_last_in_gv && SvIV(sv) == (IV)IoLINES(GvIOp(PL_last_in_gv)))
1056 sv_setiv(PAD_SV(((UNOP*)cUNOP->op_first)->op_first->op_targ), 0);
1057 sv_catpv(targ, "E0");
1068 S_dopoptolabel(pTHX_ char *label)
1072 register PERL_CONTEXT *cx;
1074 for (i = cxstack_ix; i >= 0; i--) {
1076 switch (CxTYPE(cx)) {
1078 if (ckWARN(WARN_EXITING))
1079 Perl_warner(aTHX_ WARN_EXITING, "Exiting substitution via %s",
1080 PL_op_name[PL_op->op_type]);
1083 if (ckWARN(WARN_EXITING))
1084 Perl_warner(aTHX_ WARN_EXITING, "Exiting subroutine via %s",
1085 PL_op_name[PL_op->op_type]);
1088 if (ckWARN(WARN_EXITING))
1089 Perl_warner(aTHX_ WARN_EXITING, "Exiting format via %s",
1090 PL_op_name[PL_op->op_type]);
1093 if (ckWARN(WARN_EXITING))
1094 Perl_warner(aTHX_ WARN_EXITING, "Exiting eval via %s",
1095 PL_op_name[PL_op->op_type]);
1098 if (ckWARN(WARN_EXITING))
1099 Perl_warner(aTHX_ WARN_EXITING, "Exiting pseudo-block via %s",
1100 PL_op_name[PL_op->op_type]);
1103 if (!cx->blk_loop.label ||
1104 strNE(label, cx->blk_loop.label) ) {
1105 DEBUG_l(Perl_deb(aTHX_ "(Skipping label #%ld %s)\n",
1106 (long)i, cx->blk_loop.label));
1109 DEBUG_l( Perl_deb(aTHX_ "(Found label #%ld %s)\n", (long)i, label));
1117 Perl_dowantarray(pTHX)
1119 I32 gimme = block_gimme();
1120 return (gimme == G_VOID) ? G_SCALAR : gimme;
1124 Perl_block_gimme(pTHX)
1129 cxix = dopoptosub(cxstack_ix);
1133 switch (cxstack[cxix].blk_gimme) {
1141 Perl_croak(aTHX_ "panic: bad gimme: %d\n", cxstack[cxix].blk_gimme);
1148 S_dopoptosub(pTHX_ I32 startingblock)
1151 return dopoptosub_at(cxstack, startingblock);
1155 S_dopoptosub_at(pTHX_ PERL_CONTEXT *cxstk, I32 startingblock)
1159 register PERL_CONTEXT *cx;
1160 for (i = startingblock; i >= 0; i--) {
1162 switch (CxTYPE(cx)) {
1168 DEBUG_l( Perl_deb(aTHX_ "(Found sub #%ld)\n", (long)i));
1176 S_dopoptoeval(pTHX_ I32 startingblock)
1180 register PERL_CONTEXT *cx;
1181 for (i = startingblock; i >= 0; i--) {
1183 switch (CxTYPE(cx)) {
1187 DEBUG_l( Perl_deb(aTHX_ "(Found eval #%ld)\n", (long)i));
1195 S_dopoptoloop(pTHX_ I32 startingblock)
1199 register PERL_CONTEXT *cx;
1200 for (i = startingblock; i >= 0; i--) {
1202 switch (CxTYPE(cx)) {
1204 if (ckWARN(WARN_EXITING))
1205 Perl_warner(aTHX_ WARN_EXITING, "Exiting substitution via %s",
1206 PL_op_name[PL_op->op_type]);
1209 if (ckWARN(WARN_EXITING))
1210 Perl_warner(aTHX_ WARN_EXITING, "Exiting subroutine via %s",
1211 PL_op_name[PL_op->op_type]);
1214 if (ckWARN(WARN_EXITING))
1215 Perl_warner(aTHX_ WARN_EXITING, "Exiting format via %s",
1216 PL_op_name[PL_op->op_type]);
1219 if (ckWARN(WARN_EXITING))
1220 Perl_warner(aTHX_ WARN_EXITING, "Exiting eval via %s",
1221 PL_op_name[PL_op->op_type]);
1224 if (ckWARN(WARN_EXITING))
1225 Perl_warner(aTHX_ WARN_EXITING, "Exiting pseudo-block via %s",
1226 PL_op_name[PL_op->op_type]);
1229 DEBUG_l( Perl_deb(aTHX_ "(Found loop #%ld)\n", (long)i));
1237 Perl_dounwind(pTHX_ I32 cxix)
1240 register PERL_CONTEXT *cx;
1244 while (cxstack_ix > cxix) {
1246 cx = &cxstack[cxstack_ix];
1247 DEBUG_l(PerlIO_printf(Perl_debug_log, "Unwinding block %ld, type %s\n",
1248 (long) cxstack_ix, PL_block_type[CxTYPE(cx)]));
1249 /* Note: we don't need to restore the base context info till the end. */
1250 switch (CxTYPE(cx)) {
1253 continue; /* not break */
1275 * Closures mentioned at top level of eval cannot be referenced
1276 * again, and their presence indirectly causes a memory leak.
1277 * (Note that the fact that compcv and friends are still set here
1278 * is, AFAIK, an accident.) --Chip
1280 * XXX need to get comppad et al from eval's cv rather than
1281 * relying on the incidental global values.
1284 S_free_closures(pTHX)
1287 SV **svp = AvARRAY(PL_comppad_name);
1289 for (ix = AvFILLp(PL_comppad_name); ix >= 0; ix--) {
1291 if (sv && sv != &PL_sv_undef && *SvPVX(sv) == '&') {
1293 svp[ix] = &PL_sv_undef;
1297 SvREFCNT_dec(CvOUTSIDE(sv));
1298 CvOUTSIDE(sv) = Nullcv;
1311 Perl_qerror(pTHX_ SV *err)
1314 sv_catsv(ERRSV, err);
1316 sv_catsv(PL_errors, err);
1318 Perl_warn(aTHX_ "%"SVf, err);
1323 Perl_die_where(pTHX_ char *message, STRLEN msglen)
1329 register PERL_CONTEXT *cx;
1334 if (PL_in_eval & EVAL_KEEPERR) {
1335 static char prefix[] = "\t(in cleanup) ";
1340 else if (SvCUR(err) >= sizeof(prefix)+msglen-1) {
1343 if (*e != *message || strNE(e,message))
1347 SvGROW(err, SvCUR(err)+sizeof(prefix)+msglen);
1348 sv_catpvn(err, prefix, sizeof(prefix)-1);
1349 sv_catpvn(err, message, msglen);
1350 if (ckWARN(WARN_MISC)) {
1351 STRLEN start = SvCUR(err)-msglen-sizeof(prefix)+1;
1352 Perl_warner(aTHX_ WARN_MISC, SvPVX(err)+start);
1357 sv_setpvn(ERRSV, message, msglen);
1360 message = SvPVx(ERRSV, msglen);
1362 while ((cxix = dopoptoeval(cxstack_ix)) < 0
1363 && PL_curstackinfo->si_prev)
1372 if (cxix < cxstack_ix)
1375 POPBLOCK(cx,PL_curpm);
1376 if (CxTYPE(cx) != CXt_EVAL) {
1377 PerlIO_write(Perl_error_log, "panic: die ", 11);
1378 PerlIO_write(Perl_error_log, message, msglen);
1383 if (gimme == G_SCALAR)
1384 *++newsp = &PL_sv_undef;
1385 PL_stack_sp = newsp;
1389 if (optype == OP_REQUIRE) {
1390 char* msg = SvPVx(ERRSV, n_a);
1391 DIE(aTHX_ "%sCompilation failed in require",
1392 *msg ? msg : "Unknown error\n");
1394 return pop_return();
1398 message = SvPVx(ERRSV, msglen);
1401 /* SFIO can really mess with your errno */
1404 PerlIO *serr = Perl_error_log;
1406 PerlIO_write(serr, message, msglen);
1407 (void)PerlIO_flush(serr);
1420 if (SvTRUE(left) != SvTRUE(right))
1432 RETURNOP(cLOGOP->op_other);
1441 RETURNOP(cLOGOP->op_other);
1447 register I32 cxix = dopoptosub(cxstack_ix);
1448 register PERL_CONTEXT *cx;
1449 register PERL_CONTEXT *ccstack = cxstack;
1450 PERL_SI *top_si = PL_curstackinfo;
1461 /* we may be in a higher stacklevel, so dig down deeper */
1462 while (cxix < 0 && top_si->si_type != PERLSI_MAIN) {
1463 top_si = top_si->si_prev;
1464 ccstack = top_si->si_cxstack;
1465 cxix = dopoptosub_at(ccstack, top_si->si_cxix);
1468 if (GIMME != G_ARRAY)
1472 if (PL_DBsub && cxix >= 0 &&
1473 ccstack[cxix].blk_sub.cv == GvCV(PL_DBsub))
1477 cxix = dopoptosub_at(ccstack, cxix - 1);
1480 cx = &ccstack[cxix];
1481 if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
1482 dbcxix = dopoptosub_at(ccstack, cxix - 1);
1483 /* We expect that ccstack[dbcxix] is CXt_SUB, anyway, the
1484 field below is defined for any cx. */
1485 if (PL_DBsub && dbcxix >= 0 && ccstack[dbcxix].blk_sub.cv == GvCV(PL_DBsub))
1486 cx = &ccstack[dbcxix];
1489 stashname = CopSTASHPV(cx->blk_oldcop);
1490 if (GIMME != G_ARRAY) {
1492 PUSHs(&PL_sv_undef);
1495 sv_setpv(TARG, stashname);
1502 PUSHs(&PL_sv_undef);
1504 PUSHs(sv_2mortal(newSVpv(stashname, 0)));
1505 PUSHs(sv_2mortal(newSVpv(CopFILE(cx->blk_oldcop), 0)));
1506 PUSHs(sv_2mortal(newSViv((I32)CopLINE(cx->blk_oldcop))));
1509 if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
1510 /* So is ccstack[dbcxix]. */
1512 gv_efullname3(sv, CvGV(ccstack[cxix].blk_sub.cv), Nullch);
1513 PUSHs(sv_2mortal(sv));
1514 PUSHs(sv_2mortal(newSViv((I32)cx->blk_sub.hasargs)));
1517 PUSHs(sv_2mortal(newSVpvn("(eval)",6)));
1518 PUSHs(sv_2mortal(newSViv(0)));
1520 gimme = (I32)cx->blk_gimme;
1521 if (gimme == G_VOID)
1522 PUSHs(&PL_sv_undef);
1524 PUSHs(sv_2mortal(newSViv(gimme & G_ARRAY)));
1525 if (CxTYPE(cx) == CXt_EVAL) {
1526 if (cx->blk_eval.old_op_type == OP_ENTEREVAL) {
1527 PUSHs(cx->blk_eval.cur_text);
1530 /* try blocks have old_namesv == 0 */
1531 else if (cx->blk_eval.old_namesv) {
1532 PUSHs(sv_2mortal(newSVsv(cx->blk_eval.old_namesv)));
1537 PUSHs(&PL_sv_undef);
1538 PUSHs(&PL_sv_undef);
1540 if (CxTYPE(cx) == CXt_SUB && cx->blk_sub.hasargs
1541 && CopSTASH_eq(PL_curcop, PL_debstash))
1543 AV *ary = cx->blk_sub.argarray;
1544 int off = AvARRAY(ary) - AvALLOC(ary);
1548 PL_dbargs = GvAV(gv_AVadd(tmpgv = gv_fetchpv("DB::args", TRUE,
1551 AvREAL_off(PL_dbargs); /* XXX Should be REIFY */
1554 if (AvMAX(PL_dbargs) < AvFILLp(ary) + off)
1555 av_extend(PL_dbargs, AvFILLp(ary) + off);
1556 Copy(AvALLOC(ary), AvARRAY(PL_dbargs), AvFILLp(ary) + 1 + off, SV*);
1557 AvFILLp(PL_dbargs) = AvFILLp(ary) + off;
1559 /* XXX only hints propagated via op_private are currently
1560 * visible (others are not easily accessible, since they
1561 * use the global PL_hints) */
1562 PUSHs(sv_2mortal(newSViv((I32)cx->blk_oldcop->op_private &
1563 HINT_PRIVATE_MASK)));
1566 SV * old_warnings = cx->blk_oldcop->cop_warnings ;
1567 if (old_warnings == WARN_NONE || old_warnings == WARN_STD)
1568 mask = newSVpvn(WARN_NONEstring, WARNsize) ;
1569 else if (old_warnings == WARN_ALL)
1570 mask = newSVpvn(WARN_ALLstring, WARNsize) ;
1572 mask = newSVsv(old_warnings);
1573 PUSHs(sv_2mortal(mask));
1588 sv_reset(tmps, CopSTASH(PL_curcop));
1600 PL_curcop = (COP*)PL_op;
1601 TAINT_NOT; /* Each statement is presumed innocent */
1602 PL_stack_sp = PL_stack_base + cxstack[cxstack_ix].blk_oldsp;
1605 if (PL_op->op_private || SvIV(PL_DBsingle) || SvIV(PL_DBsignal) || SvIV(PL_DBtrace))
1609 register PERL_CONTEXT *cx;
1610 I32 gimme = G_ARRAY;
1617 DIE(aTHX_ "No DB::DB routine defined");
1619 if (CvDEPTH(cv) >= 1 && !(PL_debug & (1<<30))) /* don't do recursive DB::DB call */
1631 push_return(PL_op->op_next);
1632 PUSHBLOCK(cx, CXt_SUB, SP);
1635 (void)SvREFCNT_inc(cv);
1636 SAVEVPTR(PL_curpad);
1637 PL_curpad = AvARRAY((AV*)*av_fetch(CvPADLIST(cv),1,FALSE));
1638 RETURNOP(CvSTART(cv));
1652 register PERL_CONTEXT *cx;
1653 I32 gimme = GIMME_V;
1655 U32 cxtype = CXt_LOOP;
1664 if (PL_op->op_flags & OPf_SPECIAL) {
1666 svp = &THREADSV(PL_op->op_targ); /* per-thread variable */
1667 SAVEGENERICSV(*svp);
1671 #endif /* USE_THREADS */
1672 if (PL_op->op_targ) {
1673 svp = &PL_curpad[PL_op->op_targ]; /* "my" variable */
1676 iterdata = (void*)PL_op->op_targ;
1677 cxtype |= CXp_PADVAR;
1682 svp = &GvSV(gv); /* symbol table variable */
1683 SAVEGENERICSV(*svp);
1686 iterdata = (void*)gv;
1692 PUSHBLOCK(cx, cxtype, SP);
1694 PUSHLOOP(cx, iterdata, MARK);
1696 PUSHLOOP(cx, svp, MARK);
1698 if (PL_op->op_flags & OPf_STACKED) {
1699 cx->blk_loop.iterary = (AV*)SvREFCNT_inc(POPs);
1700 if (SvTYPE(cx->blk_loop.iterary) != SVt_PVAV) {
1702 if (SvNIOKp(sv) || !SvPOKp(sv) ||
1703 SvNIOKp(cx->blk_loop.iterary) || !SvPOKp(cx->blk_loop.iterary) ||
1704 (looks_like_number(sv) && *SvPVX(sv) != '0' &&
1705 looks_like_number((SV*)cx->blk_loop.iterary) &&
1706 *SvPVX(cx->blk_loop.iterary) != '0'))
1708 if (SvNV(sv) < IV_MIN ||
1709 SvNV((SV*)cx->blk_loop.iterary) >= IV_MAX)
1710 DIE(aTHX_ "Range iterator outside integer range");
1711 cx->blk_loop.iterix = SvIV(sv);
1712 cx->blk_loop.itermax = SvIV((SV*)cx->blk_loop.iterary);
1715 cx->blk_loop.iterlval = newSVsv(sv);
1719 cx->blk_loop.iterary = PL_curstack;
1720 AvFILLp(PL_curstack) = SP - PL_stack_base;
1721 cx->blk_loop.iterix = MARK - PL_stack_base;
1730 register PERL_CONTEXT *cx;
1731 I32 gimme = GIMME_V;
1737 PUSHBLOCK(cx, CXt_LOOP, SP);
1738 PUSHLOOP(cx, 0, SP);
1746 register PERL_CONTEXT *cx;
1754 newsp = PL_stack_base + cx->blk_loop.resetsp;
1757 if (gimme == G_VOID)
1759 else if (gimme == G_SCALAR) {
1761 *++newsp = sv_mortalcopy(*SP);
1763 *++newsp = &PL_sv_undef;
1767 *++newsp = sv_mortalcopy(*++mark);
1768 TAINT_NOT; /* Each item is independent */
1774 POPLOOP(cx); /* Stack values are safe: release loop vars ... */
1775 PL_curpm = newpm; /* ... and pop $1 et al */
1787 register PERL_CONTEXT *cx;
1788 bool popsub2 = FALSE;
1795 if (PL_curstackinfo->si_type == PERLSI_SORT) {
1796 if (cxstack_ix == PL_sortcxix
1797 || dopoptosub(cxstack_ix) <= PL_sortcxix)
1799 if (cxstack_ix > PL_sortcxix)
1800 dounwind(PL_sortcxix);
1801 AvARRAY(PL_curstack)[1] = *SP;
1802 PL_stack_sp = PL_stack_base + 1;
1807 cxix = dopoptosub(cxstack_ix);
1809 DIE(aTHX_ "Can't return outside a subroutine");
1810 if (cxix < cxstack_ix)
1814 switch (CxTYPE(cx)) {
1820 if (AvFILLp(PL_comppad_name) >= 0)
1823 if (optype == OP_REQUIRE &&
1824 (MARK == SP || (gimme == G_SCALAR && !SvTRUE(*SP))) )
1826 /* Unassume the success we assumed earlier. */
1827 SV *nsv = cx->blk_eval.old_namesv;
1828 (void)hv_delete(GvHVn(PL_incgv), SvPVX(nsv), SvCUR(nsv), G_DISCARD);
1829 DIE(aTHX_ "%s did not return a true value", SvPVX(nsv));
1836 DIE(aTHX_ "panic: return");
1840 if (gimme == G_SCALAR) {
1843 if (cx->blk_sub.cv && CvDEPTH(cx->blk_sub.cv) > 1) {
1845 *++newsp = SvREFCNT_inc(*SP);
1850 *++newsp = sv_mortalcopy(*SP);
1853 *++newsp = (SvTEMP(*SP)) ? *SP : sv_mortalcopy(*SP);
1855 *++newsp = sv_mortalcopy(*SP);
1857 *++newsp = &PL_sv_undef;
1859 else if (gimme == G_ARRAY) {
1860 while (++MARK <= SP) {
1861 *++newsp = (popsub2 && SvTEMP(*MARK))
1862 ? *MARK : sv_mortalcopy(*MARK);
1863 TAINT_NOT; /* Each item is independent */
1866 PL_stack_sp = newsp;
1868 /* Stack values are safe: */
1870 POPSUB(cx,sv); /* release CV and @_ ... */
1874 PL_curpm = newpm; /* ... and pop $1 et al */
1878 return pop_return();
1885 register PERL_CONTEXT *cx;
1895 if (PL_op->op_flags & OPf_SPECIAL) {
1896 cxix = dopoptoloop(cxstack_ix);
1898 DIE(aTHX_ "Can't \"last\" outside a loop block");
1901 cxix = dopoptolabel(cPVOP->op_pv);
1903 DIE(aTHX_ "Label not found for \"last %s\"", cPVOP->op_pv);
1905 if (cxix < cxstack_ix)
1910 switch (CxTYPE(cx)) {
1913 newsp = PL_stack_base + cx->blk_loop.resetsp;
1914 nextop = cx->blk_loop.last_op->op_next;
1918 nextop = pop_return();
1922 nextop = pop_return();
1926 nextop = pop_return();
1929 DIE(aTHX_ "panic: last");
1933 if (gimme == G_SCALAR) {
1935 *++newsp = ((pop2 == CXt_SUB) && SvTEMP(*SP))
1936 ? *SP : sv_mortalcopy(*SP);
1938 *++newsp = &PL_sv_undef;
1940 else if (gimme == G_ARRAY) {
1941 while (++MARK <= SP) {
1942 *++newsp = ((pop2 == CXt_SUB) && SvTEMP(*MARK))
1943 ? *MARK : sv_mortalcopy(*MARK);
1944 TAINT_NOT; /* Each item is independent */
1950 /* Stack values are safe: */
1953 POPLOOP(cx); /* release loop vars ... */
1957 POPSUB(cx,sv); /* release CV and @_ ... */
1960 PL_curpm = newpm; /* ... and pop $1 et al */
1970 register PERL_CONTEXT *cx;
1973 if (PL_op->op_flags & OPf_SPECIAL) {
1974 cxix = dopoptoloop(cxstack_ix);
1976 DIE(aTHX_ "Can't \"next\" outside a loop block");
1979 cxix = dopoptolabel(cPVOP->op_pv);
1981 DIE(aTHX_ "Label not found for \"next %s\"", cPVOP->op_pv);
1983 if (cxix < cxstack_ix)
1986 cx = &cxstack[cxstack_ix];
1988 OP *nextop = cx->blk_loop.next_op;
1989 /* clean scope, but only if there's no continue block */
1990 if (nextop == cUNOPx(cx->blk_loop.last_op)->op_first->op_next) {
1992 oldsave = PL_scopestack[PL_scopestack_ix - 1];
1993 LEAVE_SCOPE(oldsave);
2002 register PERL_CONTEXT *cx;
2005 if (PL_op->op_flags & OPf_SPECIAL) {
2006 cxix = dopoptoloop(cxstack_ix);
2008 DIE(aTHX_ "Can't \"redo\" outside a loop block");
2011 cxix = dopoptolabel(cPVOP->op_pv);
2013 DIE(aTHX_ "Label not found for \"redo %s\"", cPVOP->op_pv);
2015 if (cxix < cxstack_ix)
2019 oldsave = PL_scopestack[PL_scopestack_ix - 1];
2020 LEAVE_SCOPE(oldsave);
2021 return cx->blk_loop.redo_op;
2025 S_dofindlabel(pTHX_ OP *o, char *label, OP **opstack, OP **oplimit)
2029 static char too_deep[] = "Target of goto is too deeply nested";
2032 Perl_croak(aTHX_ too_deep);
2033 if (o->op_type == OP_LEAVE ||
2034 o->op_type == OP_SCOPE ||
2035 o->op_type == OP_LEAVELOOP ||
2036 o->op_type == OP_LEAVETRY)
2038 *ops++ = cUNOPo->op_first;
2040 Perl_croak(aTHX_ too_deep);
2043 if (o->op_flags & OPf_KIDS) {
2045 /* First try all the kids at this level, since that's likeliest. */
2046 for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling) {
2047 if ((kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) &&
2048 kCOP->cop_label && strEQ(kCOP->cop_label, label))
2051 for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling) {
2052 if (kid == PL_lastgotoprobe)
2054 if ((kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) &&
2056 (ops[-1]->op_type != OP_NEXTSTATE &&
2057 ops[-1]->op_type != OP_DBSTATE)))
2059 if (o = dofindlabel(kid, label, ops, oplimit))
2078 register PERL_CONTEXT *cx;
2079 #define GOTO_DEPTH 64
2080 OP *enterops[GOTO_DEPTH];
2082 int do_dump = (PL_op->op_type == OP_DUMP);
2083 static char must_have_label[] = "goto must have label";
2086 if (PL_op->op_flags & OPf_STACKED) {
2090 /* This egregious kludge implements goto &subroutine */
2091 if (SvROK(sv) && SvTYPE(SvRV(sv)) == SVt_PVCV) {
2093 register PERL_CONTEXT *cx;
2094 CV* cv = (CV*)SvRV(sv);
2100 if (!CvROOT(cv) && !CvXSUB(cv)) {
2105 /* autoloaded stub? */
2106 if (cv != GvCV(gv) && (cv = GvCV(gv)))
2108 autogv = gv_autoload4(GvSTASH(gv), GvNAME(gv),
2109 GvNAMELEN(gv), FALSE);
2110 if (autogv && (cv = GvCV(autogv)))
2112 tmpstr = sv_newmortal();
2113 gv_efullname3(tmpstr, gv, Nullch);
2114 DIE(aTHX_ "Goto undefined subroutine &%s",SvPVX(tmpstr));
2116 DIE(aTHX_ "Goto undefined subroutine");
2119 /* First do some returnish stuff. */
2120 cxix = dopoptosub(cxstack_ix);
2122 DIE(aTHX_ "Can't goto subroutine outside a subroutine");
2123 if (cxix < cxstack_ix)
2126 if (CxTYPE(cx) == CXt_EVAL && cx->blk_eval.old_op_type == OP_ENTEREVAL)
2127 DIE(aTHX_ "Can't goto subroutine from an eval-string");
2129 if (CxTYPE(cx) == CXt_SUB && cx->blk_sub.hasargs) {
2130 /* put @_ back onto stack */
2131 AV* av = cx->blk_sub.argarray;
2133 items = AvFILLp(av) + 1;
2135 EXTEND(PL_stack_sp, items); /* @_ could have been extended. */
2136 Copy(AvARRAY(av), PL_stack_sp, items, SV*);
2137 PL_stack_sp += items;
2139 SvREFCNT_dec(GvAV(PL_defgv));
2140 GvAV(PL_defgv) = cx->blk_sub.savearray;
2141 #endif /* USE_THREADS */
2142 /* abandon @_ if it got reified */
2144 (void)sv_2mortal((SV*)av); /* delay until return */
2146 av_extend(av, items-1);
2147 AvFLAGS(av) = AVf_REIFY;
2148 PL_curpad[0] = (SV*)(cx->blk_sub.argarray = av);
2151 else if (CvXSUB(cv)) { /* put GvAV(defgv) back onto stack */
2155 av = (AV*)PL_curpad[0];
2157 av = GvAV(PL_defgv);
2159 items = AvFILLp(av) + 1;
2161 EXTEND(PL_stack_sp, items); /* @_ could have been extended. */
2162 Copy(AvARRAY(av), PL_stack_sp, items, SV*);
2163 PL_stack_sp += items;
2165 if (CxTYPE(cx) == CXt_SUB &&
2166 !(CvDEPTH(cx->blk_sub.cv) = cx->blk_sub.olddepth))
2167 SvREFCNT_dec(cx->blk_sub.cv);
2168 oldsave = PL_scopestack[PL_scopestack_ix - 1];
2169 LEAVE_SCOPE(oldsave);
2171 /* Now do some callish stuff. */
2174 #ifdef PERL_XSUB_OLDSTYLE
2175 if (CvOLDSTYLE(cv)) {
2176 I32 (*fp3)(int,int,int);
2181 fp3 = (I32(*)(int,int,int))CvXSUB(cv);
2182 items = (*fp3)(CvXSUBANY(cv).any_i32,
2183 mark - PL_stack_base + 1,
2185 SP = PL_stack_base + items;
2188 #endif /* PERL_XSUB_OLDSTYLE */
2193 PL_stack_sp--; /* There is no cv arg. */
2194 /* Push a mark for the start of arglist */
2196 (void)(*CvXSUB(cv))(aTHXo_ cv);
2197 /* Pop the current context like a decent sub should */
2198 POPBLOCK(cx, PL_curpm);
2199 /* Do _not_ use PUTBACK, keep the XSUB's return stack! */
2202 return pop_return();
2205 AV* padlist = CvPADLIST(cv);
2206 SV** svp = AvARRAY(padlist);
2207 if (CxTYPE(cx) == CXt_EVAL) {
2208 PL_in_eval = cx->blk_eval.old_in_eval;
2209 PL_eval_root = cx->blk_eval.old_eval_root;
2210 cx->cx_type = CXt_SUB;
2211 cx->blk_sub.hasargs = 0;
2213 cx->blk_sub.cv = cv;
2214 cx->blk_sub.olddepth = CvDEPTH(cv);
2216 if (CvDEPTH(cv) < 2)
2217 (void)SvREFCNT_inc(cv);
2218 else { /* save temporaries on recursion? */
2219 if (CvDEPTH(cv) == 100 && ckWARN(WARN_RECURSION))
2220 sub_crush_depth(cv);
2221 if (CvDEPTH(cv) > AvFILLp(padlist)) {
2222 AV *newpad = newAV();
2223 SV **oldpad = AvARRAY(svp[CvDEPTH(cv)-1]);
2224 I32 ix = AvFILLp((AV*)svp[1]);
2225 I32 names_fill = AvFILLp((AV*)svp[0]);
2226 svp = AvARRAY(svp[0]);
2227 for ( ;ix > 0; ix--) {
2228 if (names_fill >= ix && svp[ix] != &PL_sv_undef) {
2229 char *name = SvPVX(svp[ix]);
2230 if ((SvFLAGS(svp[ix]) & SVf_FAKE)
2233 /* outer lexical or anon code */
2234 av_store(newpad, ix,
2235 SvREFCNT_inc(oldpad[ix]) );
2237 else { /* our own lexical */
2239 av_store(newpad, ix, sv = (SV*)newAV());
2240 else if (*name == '%')
2241 av_store(newpad, ix, sv = (SV*)newHV());
2243 av_store(newpad, ix, sv = NEWSV(0,0));
2247 else if (IS_PADGV(oldpad[ix]) || IS_PADCONST(oldpad[ix])) {
2248 av_store(newpad, ix, sv = SvREFCNT_inc(oldpad[ix]));
2251 av_store(newpad, ix, sv = NEWSV(0,0));
2255 if (cx->blk_sub.hasargs) {
2258 av_store(newpad, 0, (SV*)av);
2259 AvFLAGS(av) = AVf_REIFY;
2261 av_store(padlist, CvDEPTH(cv), (SV*)newpad);
2262 AvFILLp(padlist) = CvDEPTH(cv);
2263 svp = AvARRAY(padlist);
2267 if (!cx->blk_sub.hasargs) {
2268 AV* av = (AV*)PL_curpad[0];
2270 items = AvFILLp(av) + 1;
2272 /* Mark is at the end of the stack. */
2274 Copy(AvARRAY(av), SP + 1, items, SV*);
2279 #endif /* USE_THREADS */
2280 SAVEVPTR(PL_curpad);
2281 PL_curpad = AvARRAY((AV*)svp[CvDEPTH(cv)]);
2283 if (cx->blk_sub.hasargs)
2284 #endif /* USE_THREADS */
2286 AV* av = (AV*)PL_curpad[0];
2290 cx->blk_sub.savearray = GvAV(PL_defgv);
2291 GvAV(PL_defgv) = (AV*)SvREFCNT_inc(av);
2292 #endif /* USE_THREADS */
2293 cx->blk_sub.argarray = av;
2296 if (items >= AvMAX(av) + 1) {
2298 if (AvARRAY(av) != ary) {
2299 AvMAX(av) += AvARRAY(av) - AvALLOC(av);
2300 SvPVX(av) = (char*)ary;
2302 if (items >= AvMAX(av) + 1) {
2303 AvMAX(av) = items - 1;
2304 Renew(ary,items+1,SV*);
2306 SvPVX(av) = (char*)ary;
2309 Copy(mark,AvARRAY(av),items,SV*);
2310 AvFILLp(av) = items - 1;
2311 assert(!AvREAL(av));
2318 if (PERLDB_SUB) { /* Checking curstash breaks DProf. */
2320 * We do not care about using sv to call CV;
2321 * it's for informational purposes only.
2323 SV *sv = GvSV(PL_DBsub);
2326 if (PERLDB_SUB_NN) {
2327 SvIVX(sv) = PTR2IV(cv); /* Already upgraded, saved */
2330 gv_efullname3(sv, CvGV(cv), Nullch);
2333 && (gotocv = get_cv("DB::goto", FALSE)) ) {
2334 PUSHMARK( PL_stack_sp );
2335 call_sv((SV*)gotocv, G_SCALAR | G_NODEBUG);
2339 RETURNOP(CvSTART(cv));
2343 label = SvPV(sv,n_a);
2344 if (!(do_dump || *label))
2345 DIE(aTHX_ must_have_label);
2348 else if (PL_op->op_flags & OPf_SPECIAL) {
2350 DIE(aTHX_ must_have_label);
2353 label = cPVOP->op_pv;
2355 if (label && *label) {
2360 PL_lastgotoprobe = 0;
2362 for (ix = cxstack_ix; ix >= 0; ix--) {
2364 switch (CxTYPE(cx)) {
2366 gotoprobe = PL_eval_root; /* XXX not good for nested eval */
2369 gotoprobe = cx->blk_oldcop->op_sibling;
2375 gotoprobe = cx->blk_oldcop->op_sibling;
2377 gotoprobe = PL_main_root;
2380 if (CvDEPTH(cx->blk_sub.cv)) {
2381 gotoprobe = CvROOT(cx->blk_sub.cv);
2387 DIE(aTHX_ "Can't \"goto\" out of a pseudo block");
2390 DIE(aTHX_ "panic: goto");
2391 gotoprobe = PL_main_root;
2394 retop = dofindlabel(gotoprobe, label,
2395 enterops, enterops + GOTO_DEPTH);
2398 PL_lastgotoprobe = gotoprobe;
2401 DIE(aTHX_ "Can't find label %s", label);
2403 /* pop unwanted frames */
2405 if (ix < cxstack_ix) {
2412 oldsave = PL_scopestack[PL_scopestack_ix];
2413 LEAVE_SCOPE(oldsave);
2416 /* push wanted frames */
2418 if (*enterops && enterops[1]) {
2420 for (ix = 1; enterops[ix]; ix++) {
2421 PL_op = enterops[ix];
2422 /* Eventually we may want to stack the needed arguments
2423 * for each op. For now, we punt on the hard ones. */
2424 if (PL_op->op_type == OP_ENTERITER)
2425 DIE(aTHX_ "Can't \"goto\" into the middle of a foreach loop");
2426 CALL_FPTR(PL_op->op_ppaddr)(aTHX);
2434 if (!retop) retop = PL_main_start;
2436 PL_restartop = retop;
2437 PL_do_undump = TRUE;
2441 PL_restartop = 0; /* hmm, must be GNU unexec().. */
2442 PL_do_undump = FALSE;
2458 if (anum == 1 && VMSISH_EXIT)
2462 PL_exit_flags |= PERL_EXIT_EXPECTED;
2464 PUSHs(&PL_sv_undef);
2472 NV value = SvNVx(GvSV(cCOP->cop_gv));
2473 register I32 match = I_32(value);
2476 if (((NV)match) > value)
2477 --match; /* was fractional--truncate other way */
2479 match -= cCOP->uop.scop.scop_offset;
2482 else if (match > cCOP->uop.scop.scop_max)
2483 match = cCOP->uop.scop.scop_max;
2484 PL_op = cCOP->uop.scop.scop_next[match];
2494 PL_op = PL_op->op_next; /* can't assume anything */
2497 match = *(SvPVx(GvSV(cCOP->cop_gv), n_a)) & 255;
2498 match -= cCOP->uop.scop.scop_offset;
2501 else if (match > cCOP->uop.scop.scop_max)
2502 match = cCOP->uop.scop.scop_max;
2503 PL_op = cCOP->uop.scop.scop_next[match];
2512 S_save_lines(pTHX_ AV *array, SV *sv)
2514 register char *s = SvPVX(sv);
2515 register char *send = SvPVX(sv) + SvCUR(sv);
2517 register I32 line = 1;
2519 while (s && s < send) {
2520 SV *tmpstr = NEWSV(85,0);
2522 sv_upgrade(tmpstr, SVt_PVMG);
2523 t = strchr(s, '\n');
2529 sv_setpvn(tmpstr, s, t - s);
2530 av_store(array, line++, tmpstr);
2535 #ifdef PERL_FLEXIBLE_EXCEPTIONS
2537 S_docatch_body(pTHX_ va_list args)
2539 return docatch_body();
2544 S_docatch_body(pTHX)
2551 S_docatch(pTHX_ OP *o)
2556 volatile PERL_SI *cursi = PL_curstackinfo;
2560 assert(CATCH_GET == TRUE);
2563 #ifdef PERL_FLEXIBLE_EXCEPTIONS
2565 CALLPROTECT(aTHX_ pcur_env, &ret, MEMBER_TO_FPTR(S_docatch_body));
2571 #ifndef PERL_FLEXIBLE_EXCEPTIONS
2577 if (PL_restartop && cursi == PL_curstackinfo) {
2578 PL_op = PL_restartop;
2595 Perl_sv_compile_2op(pTHX_ SV *sv, OP** startop, char *code, AV** avp)
2596 /* sv Text to convert to OP tree. */
2597 /* startop op_free() this to undo. */
2598 /* code Short string id of the caller. */
2600 dSP; /* Make POPBLOCK work. */
2603 I32 gimme = 0; /* SUSPECT - INITIALZE TO WHAT? NI-S */
2606 OP *oop = PL_op, *rop;
2607 char tbuf[TYPE_DIGITS(long) + 12 + 10];
2608 char *tmpbuf = tbuf;
2614 /* switch to eval mode */
2616 if (PL_curcop == &PL_compiling) {
2617 SAVECOPSTASH(&PL_compiling);
2618 CopSTASH_set(&PL_compiling, PL_curstash);
2620 SAVECOPFILE(&PL_compiling);
2621 SAVECOPLINE(&PL_compiling);
2622 if (PERLDB_NAMEEVAL && CopLINE(PL_curcop)) {
2623 SV *sv = sv_newmortal();
2624 Perl_sv_setpvf(aTHX_ sv, "_<(%.10seval %lu)[%s:%"IVdf"]",
2625 code, (unsigned long)++PL_evalseq,
2626 CopFILE(PL_curcop), (IV)CopLINE(PL_curcop));
2630 sprintf(tmpbuf, "_<(%.10s_eval %lu)", code, (unsigned long)++PL_evalseq);
2631 CopFILE_set(&PL_compiling, tmpbuf+2);
2632 CopLINE_set(&PL_compiling, 1);
2633 /* XXX For C<eval "...">s within BEGIN {} blocks, this ends up
2634 deleting the eval's FILEGV from the stash before gv_check() runs
2635 (i.e. before run-time proper). To work around the coredump that
2636 ensues, we always turn GvMULTI_on for any globals that were
2637 introduced within evals. See force_ident(). GSAR 96-10-12 */
2638 safestr = savepv(tmpbuf);
2639 SAVEDELETE(PL_defstash, safestr, strlen(safestr));
2641 #ifdef OP_IN_REGISTER
2649 PL_op->op_type = OP_ENTEREVAL;
2650 PL_op->op_flags = 0; /* Avoid uninit warning. */
2651 PUSHBLOCK(cx, CXt_EVAL, SP);
2652 PUSHEVAL(cx, 0, Nullgv);
2653 rop = doeval(G_SCALAR, startop);
2654 POPBLOCK(cx,PL_curpm);
2657 (*startop)->op_type = OP_NULL;
2658 (*startop)->op_ppaddr = PL_ppaddr[OP_NULL];
2660 *avp = (AV*)SvREFCNT_inc(PL_comppad);
2662 if (PL_curcop == &PL_compiling)
2663 PL_compiling.op_private = PL_hints;
2664 #ifdef OP_IN_REGISTER
2670 /* With USE_THREADS, eval_owner must be held on entry to doeval */
2672 S_doeval(pTHX_ int gimme, OP** startop)
2680 PL_in_eval = EVAL_INEVAL;
2684 /* set up a scratch pad */
2687 SAVEVPTR(PL_curpad);
2688 SAVESPTR(PL_comppad);
2689 SAVESPTR(PL_comppad_name);
2690 SAVEI32(PL_comppad_name_fill);
2691 SAVEI32(PL_min_intro_pending);
2692 SAVEI32(PL_max_intro_pending);
2695 for (i = cxstack_ix - 1; i >= 0; i--) {
2696 PERL_CONTEXT *cx = &cxstack[i];
2697 if (CxTYPE(cx) == CXt_EVAL)
2699 else if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
2700 caller = cx->blk_sub.cv;
2705 SAVESPTR(PL_compcv);
2706 PL_compcv = (CV*)NEWSV(1104,0);
2707 sv_upgrade((SV *)PL_compcv, SVt_PVCV);
2708 CvEVAL_on(PL_compcv);
2710 CvOWNER(PL_compcv) = 0;
2711 New(666, CvMUTEXP(PL_compcv), 1, perl_mutex);
2712 MUTEX_INIT(CvMUTEXP(PL_compcv));
2713 #endif /* USE_THREADS */
2715 PL_comppad = newAV();
2716 av_push(PL_comppad, Nullsv);
2717 PL_curpad = AvARRAY(PL_comppad);
2718 PL_comppad_name = newAV();
2719 PL_comppad_name_fill = 0;
2720 PL_min_intro_pending = 0;
2723 av_store(PL_comppad_name, 0, newSVpvn("@_", 2));
2724 PL_curpad[0] = (SV*)newAV();
2725 SvPADMY_on(PL_curpad[0]); /* XXX Needed? */
2726 #endif /* USE_THREADS */
2728 comppadlist = newAV();
2729 AvREAL_off(comppadlist);
2730 av_store(comppadlist, 0, (SV*)PL_comppad_name);
2731 av_store(comppadlist, 1, (SV*)PL_comppad);
2732 CvPADLIST(PL_compcv) = comppadlist;
2734 if (!saveop || saveop->op_type != OP_REQUIRE)
2735 CvOUTSIDE(PL_compcv) = (CV*)SvREFCNT_inc(caller);
2737 SAVEFREESV(PL_compcv);
2739 /* make sure we compile in the right package */
2741 if (CopSTASH_ne(PL_curcop, PL_curstash)) {
2742 SAVESPTR(PL_curstash);
2743 PL_curstash = CopSTASH(PL_curcop);
2745 SAVESPTR(PL_beginav);
2746 PL_beginav = newAV();
2747 SAVEFREESV(PL_beginav);
2749 /* try to compile it */
2751 PL_eval_root = Nullop;
2753 PL_curcop = &PL_compiling;
2754 PL_curcop->cop_arybase = 0;
2755 SvREFCNT_dec(PL_rs);
2756 PL_rs = newSVpvn("\n", 1);
2757 if (saveop && saveop->op_flags & OPf_SPECIAL)
2758 PL_in_eval |= EVAL_KEEPERR;
2761 if (yyparse() || PL_error_count || !PL_eval_root) {
2765 I32 optype = 0; /* Might be reset by POPEVAL. */
2770 op_free(PL_eval_root);
2771 PL_eval_root = Nullop;
2773 SP = PL_stack_base + POPMARK; /* pop original mark */
2775 POPBLOCK(cx,PL_curpm);
2781 if (optype == OP_REQUIRE) {
2782 char* msg = SvPVx(ERRSV, n_a);
2783 DIE(aTHX_ "%sCompilation failed in require",
2784 *msg ? msg : "Unknown error\n");
2787 char* msg = SvPVx(ERRSV, n_a);
2789 POPBLOCK(cx,PL_curpm);
2791 Perl_croak(aTHX_ "%sCompilation failed in regexp",
2792 (*msg ? msg : "Unknown error\n"));
2794 SvREFCNT_dec(PL_rs);
2795 PL_rs = SvREFCNT_inc(PL_nrs);
2797 MUTEX_LOCK(&PL_eval_mutex);
2799 COND_SIGNAL(&PL_eval_cond);
2800 MUTEX_UNLOCK(&PL_eval_mutex);
2801 #endif /* USE_THREADS */
2804 SvREFCNT_dec(PL_rs);
2805 PL_rs = SvREFCNT_inc(PL_nrs);
2806 CopLINE_set(&PL_compiling, 0);
2808 *startop = PL_eval_root;
2809 SvREFCNT_dec(CvOUTSIDE(PL_compcv));
2810 CvOUTSIDE(PL_compcv) = Nullcv;
2812 SAVEFREEOP(PL_eval_root);
2814 scalarvoid(PL_eval_root);
2815 else if (gimme & G_ARRAY)
2818 scalar(PL_eval_root);
2820 DEBUG_x(dump_eval());
2822 /* Register with debugger: */
2823 if (PERLDB_INTER && saveop->op_type == OP_REQUIRE) {
2824 CV *cv = get_cv("DB::postponed", FALSE);
2828 XPUSHs((SV*)CopFILEGV(&PL_compiling));
2830 call_sv((SV*)cv, G_DISCARD);
2834 /* compiled okay, so do it */
2836 CvDEPTH(PL_compcv) = 1;
2837 SP = PL_stack_base + POPMARK; /* pop original mark */
2838 PL_op = saveop; /* The caller may need it. */
2840 MUTEX_LOCK(&PL_eval_mutex);
2842 COND_SIGNAL(&PL_eval_cond);
2843 MUTEX_UNLOCK(&PL_eval_mutex);
2844 #endif /* USE_THREADS */
2846 RETURNOP(PL_eval_start);
2850 S_doopen_pmc(pTHX_ const char *name, const char *mode)
2852 STRLEN namelen = strlen(name);
2855 if (namelen > 3 && strEQ(name + namelen - 3, ".pm")) {
2856 SV *pmcsv = Perl_newSVpvf(aTHX_ "%s%c", name, 'c');
2857 char *pmc = SvPV_nolen(pmcsv);
2860 if (PerlLIO_stat(pmc, &pmcstat) < 0) {
2861 fp = PerlIO_open(name, mode);
2864 if (PerlLIO_stat(name, &pmstat) < 0 ||
2865 pmstat.st_mtime < pmcstat.st_mtime)
2867 fp = PerlIO_open(pmc, mode);
2870 fp = PerlIO_open(name, mode);
2873 SvREFCNT_dec(pmcsv);
2876 fp = PerlIO_open(name, mode);
2884 register PERL_CONTEXT *cx;
2889 SV *namesv = Nullsv;
2891 I32 gimme = G_SCALAR;
2892 PerlIO *tryrsfp = 0;
2894 int filter_has_file = 0;
2895 GV *filter_child_proc = 0;
2896 SV *filter_state = 0;
2902 if (SvPOKp(sv)) { /* require v5.6.1 */
2904 U8 *s = (U8*)SvPVX(sv);
2905 U8 *end = (U8*)SvPVX(sv) + SvCUR(sv);
2907 rev = utf8_to_uv(s, &len);
2910 ver = utf8_to_uv(s, &len);
2913 sver = utf8_to_uv(s, &len);
2922 if (PERL_REVISION < rev
2923 || (PERL_REVISION == rev
2924 && (PERL_VERSION < ver
2925 || (PERL_VERSION == ver
2926 && PERL_SUBVERSION < sver))))
2928 DIE(aTHX_ "Perl v%"UVuf".%"UVuf".%"UVuf" required--this is only version "
2929 "v%d.%d.%d, stopped", rev, ver, sver, PERL_REVISION,
2930 PERL_VERSION, PERL_SUBVERSION);
2933 else if (!SvPOKp(sv)) { /* require 5.005_03 */
2934 if ((NV)PERL_REVISION + ((NV)PERL_VERSION/(NV)1000)
2935 + ((NV)PERL_SUBVERSION/(NV)1000000)
2936 + 0.00000099 < SvNV(sv))
2940 NV nver = (nrev - rev) * 1000;
2941 UV ver = (UV)(nver + 0.0009);
2942 NV nsver = (nver - ver) * 1000;
2943 UV sver = (UV)(nsver + 0.0009);
2945 DIE(aTHX_ "Perl v%"UVuf".%"UVuf".%"UVuf" required--this is only version "
2946 "v%d.%d.%d, stopped", rev, ver, sver, PERL_REVISION,
2947 PERL_VERSION, PERL_SUBVERSION);
2952 name = SvPV(sv, len);
2953 if (!(name && len > 0 && *name))
2954 DIE(aTHX_ "Null filename used");
2955 TAINT_PROPER("require");
2956 if (PL_op->op_type == OP_REQUIRE &&
2957 (svp = hv_fetch(GvHVn(PL_incgv), name, len, 0)) &&
2958 *svp != &PL_sv_undef)
2961 /* prepare to compile file */
2963 if (PERL_FILE_IS_ABSOLUTE(name)
2964 || (*name == '.' && (name[1] == '/' ||
2965 (name[1] == '.' && name[2] == '/'))))
2968 tryrsfp = doopen_pmc(name,PERL_SCRIPT_MODE);
2971 AV *ar = GvAVn(PL_incgv);
2975 if ((unixname = tounixspec(name, Nullch)) != Nullch)
2978 namesv = NEWSV(806, 0);
2979 for (i = 0; i <= AvFILL(ar); i++) {
2980 SV *dirsv = *av_fetch(ar, i, TRUE);
2986 if (SvTYPE(SvRV(loader)) == SVt_PVAV) {
2987 loader = *av_fetch((AV *)SvRV(loader), 0, TRUE);
2990 Perl_sv_setpvf(aTHX_ namesv, "/loader/0x%"UVxf"/%s",
2991 PTR2UV(SvANY(loader)), name);
2992 tryname = SvPVX(namesv);
3003 count = call_sv(loader, G_ARRAY);
3013 if (SvROK(arg) && SvTYPE(SvRV(arg)) == SVt_PVGV) {
3017 if (SvTYPE(arg) == SVt_PVGV) {
3018 IO *io = GvIO((GV *)arg);
3023 tryrsfp = IoIFP(io);
3024 if (IoTYPE(io) == '|') {
3025 /* reading from a child process doesn't
3026 nest -- when returning from reading
3027 the inner module, the outer one is
3028 unreadable (closed?) I've tried to
3029 save the gv to manage the lifespan of
3030 the pipe, but this didn't help. XXX */
3031 filter_child_proc = (GV *)arg;
3032 (void)SvREFCNT_inc(filter_child_proc);
3035 if (IoOFP(io) && IoOFP(io) != IoIFP(io)) {
3036 PerlIO_close(IoOFP(io));
3048 if (SvROK(arg) && SvTYPE(SvRV(arg)) == SVt_PVCV) {
3050 (void)SvREFCNT_inc(filter_sub);
3053 filter_state = SP[i];
3054 (void)SvREFCNT_inc(filter_state);
3058 tryrsfp = PerlIO_open("/dev/null",
3072 filter_has_file = 0;
3073 if (filter_child_proc) {
3074 SvREFCNT_dec(filter_child_proc);
3075 filter_child_proc = 0;
3078 SvREFCNT_dec(filter_state);
3082 SvREFCNT_dec(filter_sub);
3087 char *dir = SvPVx(dirsv, n_a);
3090 if ((unixdir = tounixpath(dir, Nullch)) == Nullch)
3092 sv_setpv(namesv, unixdir);
3093 sv_catpv(namesv, unixname);
3095 Perl_sv_setpvf(aTHX_ namesv, "%s/%s", dir, name);
3097 TAINT_PROPER("require");
3098 tryname = SvPVX(namesv);
3099 tryrsfp = doopen_pmc(tryname, PERL_SCRIPT_MODE);
3101 if (tryname[0] == '.' && tryname[1] == '/')
3109 SAVECOPFILE(&PL_compiling);
3110 CopFILE_set(&PL_compiling, tryrsfp ? tryname : name);
3111 SvREFCNT_dec(namesv);
3113 if (PL_op->op_type == OP_REQUIRE) {
3114 char *msgstr = name;
3115 if (namesv) { /* did we lookup @INC? */
3116 SV *msg = sv_2mortal(newSVpv(msgstr,0));
3117 SV *dirmsgsv = NEWSV(0, 0);
3118 AV *ar = GvAVn(PL_incgv);
3120 sv_catpvn(msg, " in @INC", 8);
3121 if (instr(SvPVX(msg), ".h "))
3122 sv_catpv(msg, " (change .h to .ph maybe?)");
3123 if (instr(SvPVX(msg), ".ph "))
3124 sv_catpv(msg, " (did you run h2ph?)");
3125 sv_catpv(msg, " (@INC contains:");
3126 for (i = 0; i <= AvFILL(ar); i++) {
3127 char *dir = SvPVx(*av_fetch(ar, i, TRUE), n_a);
3128 Perl_sv_setpvf(aTHX_ dirmsgsv, " %s", dir);
3129 sv_catsv(msg, dirmsgsv);
3131 sv_catpvn(msg, ")", 1);
3132 SvREFCNT_dec(dirmsgsv);
3133 msgstr = SvPV_nolen(msg);
3135 DIE(aTHX_ "Can't locate %s", msgstr);
3141 SETERRNO(0, SS$_NORMAL);
3143 /* Assume success here to prevent recursive requirement. */
3144 (void)hv_store(GvHVn(PL_incgv), name, strlen(name),
3145 newSVpv(CopFILE(&PL_compiling), 0), 0 );
3149 lex_start(sv_2mortal(newSVpvn("",0)));
3150 SAVEGENERICSV(PL_rsfp_filters);
3151 PL_rsfp_filters = Nullav;
3156 SAVESPTR(PL_compiling.cop_warnings);
3157 if (PL_dowarn & G_WARN_ALL_ON)
3158 PL_compiling.cop_warnings = WARN_ALL ;
3159 else if (PL_dowarn & G_WARN_ALL_OFF)
3160 PL_compiling.cop_warnings = WARN_NONE ;
3162 PL_compiling.cop_warnings = WARN_STD ;
3164 if (filter_sub || filter_child_proc) {
3165 SV *datasv = filter_add(run_user_filter, Nullsv);
3166 IoLINES(datasv) = filter_has_file;
3167 IoFMT_GV(datasv) = (GV *)filter_child_proc;
3168 IoTOP_GV(datasv) = (GV *)filter_state;
3169 IoBOTTOM_GV(datasv) = (GV *)filter_sub;
3172 /* switch to eval mode */
3173 push_return(PL_op->op_next);
3174 PUSHBLOCK(cx, CXt_EVAL, SP);
3175 PUSHEVAL(cx, name, Nullgv);
3177 SAVECOPLINE(&PL_compiling);
3178 CopLINE_set(&PL_compiling, 0);
3182 MUTEX_LOCK(&PL_eval_mutex);
3183 if (PL_eval_owner && PL_eval_owner != thr)
3184 while (PL_eval_owner)
3185 COND_WAIT(&PL_eval_cond, &PL_eval_mutex);
3186 PL_eval_owner = thr;
3187 MUTEX_UNLOCK(&PL_eval_mutex);
3188 #endif /* USE_THREADS */
3189 return DOCATCH(doeval(G_SCALAR, NULL));
3194 return pp_require();
3200 register PERL_CONTEXT *cx;
3202 I32 gimme = GIMME_V, was = PL_sub_generation;
3203 char tbuf[TYPE_DIGITS(long) + 12];
3204 char *tmpbuf = tbuf;
3209 if (!SvPV(sv,len) || !len)
3211 TAINT_PROPER("eval");
3217 /* switch to eval mode */
3219 SAVECOPFILE(&PL_compiling);
3220 if (PERLDB_NAMEEVAL && CopLINE(PL_curcop)) {
3221 SV *sv = sv_newmortal();
3222 Perl_sv_setpvf(aTHX_ sv, "_<(eval %lu)[%s:%"IVdf"]",
3223 (unsigned long)++PL_evalseq,
3224 CopFILE(PL_curcop), (IV)CopLINE(PL_curcop));
3228 sprintf(tmpbuf, "_<(eval %lu)", (unsigned long)++PL_evalseq);
3229 CopFILE_set(&PL_compiling, tmpbuf+2);
3230 CopLINE_set(&PL_compiling, 1);
3231 /* XXX For C<eval "...">s within BEGIN {} blocks, this ends up
3232 deleting the eval's FILEGV from the stash before gv_check() runs
3233 (i.e. before run-time proper). To work around the coredump that
3234 ensues, we always turn GvMULTI_on for any globals that were
3235 introduced within evals. See force_ident(). GSAR 96-10-12 */
3236 safestr = savepv(tmpbuf);
3237 SAVEDELETE(PL_defstash, safestr, strlen(safestr));
3239 PL_hints = PL_op->op_targ;
3240 SAVESPTR(PL_compiling.cop_warnings);
3241 if (!specialWARN(PL_compiling.cop_warnings)) {
3242 PL_compiling.cop_warnings = newSVsv(PL_compiling.cop_warnings) ;
3243 SAVEFREESV(PL_compiling.cop_warnings) ;
3246 push_return(PL_op->op_next);
3247 PUSHBLOCK(cx, (CXt_EVAL|CXp_REAL), SP);
3248 PUSHEVAL(cx, 0, Nullgv);
3250 /* prepare to compile string */
3252 if (PERLDB_LINE && PL_curstash != PL_debstash)
3253 save_lines(CopFILEAV(&PL_compiling), PL_linestr);
3256 MUTEX_LOCK(&PL_eval_mutex);
3257 if (PL_eval_owner && PL_eval_owner != thr)
3258 while (PL_eval_owner)
3259 COND_WAIT(&PL_eval_cond, &PL_eval_mutex);
3260 PL_eval_owner = thr;
3261 MUTEX_UNLOCK(&PL_eval_mutex);
3262 #endif /* USE_THREADS */
3263 ret = doeval(gimme, NULL);
3264 if (PERLDB_INTER && was != PL_sub_generation /* Some subs defined here. */
3265 && ret != PL_op->op_next) { /* Successive compilation. */
3266 strcpy(safestr, "_<(eval )"); /* Anything fake and short. */
3268 return DOCATCH(ret);
3278 register PERL_CONTEXT *cx;
3280 U8 save_flags = PL_op -> op_flags;
3285 retop = pop_return();
3288 if (gimme == G_VOID)
3290 else if (gimme == G_SCALAR) {
3293 if (SvFLAGS(TOPs) & SVs_TEMP)
3296 *MARK = sv_mortalcopy(TOPs);
3300 *MARK = &PL_sv_undef;
3305 /* in case LEAVE wipes old return values */
3306 for (mark = newsp + 1; mark <= SP; mark++) {
3307 if (!(SvFLAGS(*mark) & SVs_TEMP)) {
3308 *mark = sv_mortalcopy(*mark);
3309 TAINT_NOT; /* Each item is independent */
3313 PL_curpm = newpm; /* Don't pop $1 et al till now */
3315 if (AvFILLp(PL_comppad_name) >= 0)
3319 assert(CvDEPTH(PL_compcv) == 1);
3321 CvDEPTH(PL_compcv) = 0;
3324 if (optype == OP_REQUIRE &&
3325 !(gimme == G_SCALAR ? SvTRUE(*SP) : SP > newsp))
3327 /* Unassume the success we assumed earlier. */
3328 SV *nsv = cx->blk_eval.old_namesv;
3329 (void)hv_delete(GvHVn(PL_incgv), SvPVX(nsv), SvCUR(nsv), G_DISCARD);
3330 retop = Perl_die(aTHX_ "%s did not return a true value", SvPVX(nsv));
3331 /* die_where() did LEAVE, or we won't be here */
3335 if (!(save_flags & OPf_SPECIAL))
3345 register PERL_CONTEXT *cx;
3346 I32 gimme = GIMME_V;
3351 push_return(cLOGOP->op_other->op_next);
3352 PUSHBLOCK(cx, CXt_EVAL, SP);
3354 PL_eval_root = PL_op; /* Only needed so that goto works right. */
3356 PL_in_eval = EVAL_INEVAL;
3359 return DOCATCH(PL_op->op_next);
3369 register PERL_CONTEXT *cx;
3377 if (gimme == G_VOID)
3379 else if (gimme == G_SCALAR) {
3382 if (SvFLAGS(TOPs) & (SVs_PADTMP|SVs_TEMP))
3385 *MARK = sv_mortalcopy(TOPs);
3389 *MARK = &PL_sv_undef;
3394 /* in case LEAVE wipes old return values */
3395 for (mark = newsp + 1; mark <= SP; mark++) {
3396 if (!(SvFLAGS(*mark) & (SVs_PADTMP|SVs_TEMP))) {
3397 *mark = sv_mortalcopy(*mark);
3398 TAINT_NOT; /* Each item is independent */
3402 PL_curpm = newpm; /* Don't pop $1 et al till now */
3410 S_doparseform(pTHX_ SV *sv)
3413 register char *s = SvPV_force(sv, len);
3414 register char *send = s + len;
3415 register char *base;
3416 register I32 skipspaces = 0;
3419 bool postspace = FALSE;
3427 Perl_croak(aTHX_ "Null picture in formline");
3429 New(804, fops, (send - s)*3+10, U16); /* Almost certainly too long... */
3434 *fpc++ = FF_LINEMARK;
3435 noblank = repeat = FALSE;
3453 case ' ': case '\t':
3464 *fpc++ = FF_LITERAL;
3472 *fpc++ = skipspaces;
3476 *fpc++ = FF_NEWLINE;
3480 arg = fpc - linepc + 1;
3487 *fpc++ = FF_LINEMARK;
3488 noblank = repeat = FALSE;
3497 ischop = s[-1] == '^';
3503 arg = (s - base) - 1;
3505 *fpc++ = FF_LITERAL;
3514 *fpc++ = FF_LINEGLOB;
3516 else if (*s == '#' || (*s == '.' && s[1] == '#')) {
3517 arg = ischop ? 512 : 0;
3527 arg |= 256 + (s - f);
3529 *fpc++ = s - base; /* fieldsize for FETCH */
3530 *fpc++ = FF_DECIMAL;
3535 bool ismore = FALSE;
3538 while (*++s == '>') ;
3539 prespace = FF_SPACE;
3541 else if (*s == '|') {
3542 while (*++s == '|') ;
3543 prespace = FF_HALFSPACE;
3548 while (*++s == '<') ;
3551 if (*s == '.' && s[1] == '.' && s[2] == '.') {
3555 *fpc++ = s - base; /* fieldsize for FETCH */
3557 *fpc++ = ischop ? FF_CHECKCHOP : FF_CHECKNL;
3575 { /* need to jump to the next word */
3577 z = WORD_ALIGN - SvCUR(sv) % WORD_ALIGN;
3578 SvGROW(sv, SvCUR(sv) + z + arg * sizeof(U16) + 4);
3579 s = SvPVX(sv) + SvCUR(sv) + z;
3581 Copy(fops, s, arg, U16);
3583 sv_magic(sv, Nullsv, 'f', Nullch, 0);
3588 * The rest of this file was derived from source code contributed
3591 * NOTE: this code was derived from Tom Horsley's qsort replacement
3592 * and should not be confused with the original code.
3595 /* Copyright (C) Tom Horsley, 1997. All rights reserved.
3597 Permission granted to distribute under the same terms as perl which are
3600 This program is free software; you can redistribute it and/or modify
3601 it under the terms of either:
3603 a) the GNU General Public License as published by the Free
3604 Software Foundation; either version 1, or (at your option) any
3607 b) the "Artistic License" which comes with this Kit.
3609 Details on the perl license can be found in the perl source code which
3610 may be located via the www.perl.com web page.
3612 This is the most wonderfulest possible qsort I can come up with (and
3613 still be mostly portable) My (limited) tests indicate it consistently
3614 does about 20% fewer calls to compare than does the qsort in the Visual
3615 C++ library, other vendors may vary.
3617 Some of the ideas in here can be found in "Algorithms" by Sedgewick,
3618 others I invented myself (or more likely re-invented since they seemed
3619 pretty obvious once I watched the algorithm operate for a while).
3621 Most of this code was written while watching the Marlins sweep the Giants
3622 in the 1997 National League Playoffs - no Braves fans allowed to use this
3623 code (just kidding :-).
3625 I realize that if I wanted to be true to the perl tradition, the only
3626 comment in this file would be something like:
3628 ...they shuffled back towards the rear of the line. 'No, not at the
3629 rear!' the slave-driver shouted. 'Three files up. And stay there...
3631 However, I really needed to violate that tradition just so I could keep
3632 track of what happens myself, not to mention some poor fool trying to
3633 understand this years from now :-).
3636 /* ********************************************************** Configuration */
3638 #ifndef QSORT_ORDER_GUESS
3639 #define QSORT_ORDER_GUESS 2 /* Select doubling version of the netBSD trick */
3642 /* QSORT_MAX_STACK is the largest number of partitions that can be stacked up for
3643 future processing - a good max upper bound is log base 2 of memory size
3644 (32 on 32 bit machines, 64 on 64 bit machines, etc). In reality can
3645 safely be smaller than that since the program is taking up some space and
3646 most operating systems only let you grab some subset of contiguous
3647 memory (not to mention that you are normally sorting data larger than
3648 1 byte element size :-).
3650 #ifndef QSORT_MAX_STACK
3651 #define QSORT_MAX_STACK 32
3654 /* QSORT_BREAK_EVEN is the size of the largest partition we should insertion sort.
3655 Anything bigger and we use qsort. If you make this too small, the qsort
3656 will probably break (or become less efficient), because it doesn't expect
3657 the middle element of a partition to be the same as the right or left -
3658 you have been warned).
3660 #ifndef QSORT_BREAK_EVEN
3661 #define QSORT_BREAK_EVEN 6
3664 /* ************************************************************* Data Types */
3666 /* hold left and right index values of a partition waiting to be sorted (the
3667 partition includes both left and right - right is NOT one past the end or
3668 anything like that).
3670 struct partition_stack_entry {
3673 #ifdef QSORT_ORDER_GUESS
3674 int qsort_break_even;
3678 /* ******************************************************* Shorthand Macros */
3680 /* Note that these macros will be used from inside the qsort function where
3681 we happen to know that the variable 'elt_size' contains the size of an
3682 array element and the variable 'temp' points to enough space to hold a
3683 temp element and the variable 'array' points to the array being sorted
3684 and 'compare' is the pointer to the compare routine.
3686 Also note that there are very many highly architecture specific ways
3687 these might be sped up, but this is simply the most generally portable
3688 code I could think of.
3691 /* Return < 0 == 0 or > 0 as the value of elt1 is < elt2, == elt2, > elt2
3693 #define qsort_cmp(elt1, elt2) \
3694 ((*compare)(aTHXo_ array[elt1], array[elt2]))
3696 #ifdef QSORT_ORDER_GUESS
3697 #define QSORT_NOTICE_SWAP swapped++;
3699 #define QSORT_NOTICE_SWAP
3702 /* swaps contents of array elements elt1, elt2.
3704 #define qsort_swap(elt1, elt2) \
3707 temp = array[elt1]; \
3708 array[elt1] = array[elt2]; \
3709 array[elt2] = temp; \
3712 /* rotate contents of elt1, elt2, elt3 such that elt1 gets elt2, elt2 gets
3713 elt3 and elt3 gets elt1.
3715 #define qsort_rotate(elt1, elt2, elt3) \
3718 temp = array[elt1]; \
3719 array[elt1] = array[elt2]; \
3720 array[elt2] = array[elt3]; \
3721 array[elt3] = temp; \
3724 /* ************************************************************ Debug stuff */
3731 return; /* good place to set a breakpoint */
3734 #define qsort_assert(t) (void)( (t) || (break_here(), 0) )
3737 doqsort_all_asserts(
3741 int (*compare)(const void * elt1, const void * elt2),
3742 int pc_left, int pc_right, int u_left, int u_right)
3746 qsort_assert(pc_left <= pc_right);
3747 qsort_assert(u_right < pc_left);
3748 qsort_assert(pc_right < u_left);
3749 for (i = u_right + 1; i < pc_left; ++i) {
3750 qsort_assert(qsort_cmp(i, pc_left) < 0);
3752 for (i = pc_left; i < pc_right; ++i) {
3753 qsort_assert(qsort_cmp(i, pc_right) == 0);
3755 for (i = pc_right + 1; i < u_left; ++i) {
3756 qsort_assert(qsort_cmp(pc_right, i) < 0);
3760 #define qsort_all_asserts(PC_LEFT, PC_RIGHT, U_LEFT, U_RIGHT) \
3761 doqsort_all_asserts(array, num_elts, elt_size, compare, \
3762 PC_LEFT, PC_RIGHT, U_LEFT, U_RIGHT)
3766 #define qsort_assert(t) ((void)0)
3768 #define qsort_all_asserts(PC_LEFT, PC_RIGHT, U_LEFT, U_RIGHT) ((void)0)
3772 /* ****************************************************************** qsort */
3775 S_qsortsv(pTHX_ SV ** array, size_t num_elts, SVCOMPARE_t compare)
3779 struct partition_stack_entry partition_stack[QSORT_MAX_STACK];
3780 int next_stack_entry = 0;
3784 #ifdef QSORT_ORDER_GUESS
3785 int qsort_break_even;
3789 /* Make sure we actually have work to do.
3791 if (num_elts <= 1) {
3795 /* Setup the initial partition definition and fall into the sorting loop
3798 part_right = (int)(num_elts - 1);
3799 #ifdef QSORT_ORDER_GUESS
3800 qsort_break_even = QSORT_BREAK_EVEN;
3802 #define qsort_break_even QSORT_BREAK_EVEN
3805 if ((part_right - part_left) >= qsort_break_even) {
3806 /* OK, this is gonna get hairy, so lets try to document all the
3807 concepts and abbreviations and variables and what they keep
3810 pc: pivot chunk - the set of array elements we accumulate in the
3811 middle of the partition, all equal in value to the original
3812 pivot element selected. The pc is defined by:
3814 pc_left - the leftmost array index of the pc
3815 pc_right - the rightmost array index of the pc
3817 we start with pc_left == pc_right and only one element
3818 in the pivot chunk (but it can grow during the scan).
3820 u: uncompared elements - the set of elements in the partition
3821 we have not yet compared to the pivot value. There are two
3822 uncompared sets during the scan - one to the left of the pc
3823 and one to the right.
3825 u_right - the rightmost index of the left side's uncompared set
3826 u_left - the leftmost index of the right side's uncompared set
3828 The leftmost index of the left sides's uncompared set
3829 doesn't need its own variable because it is always defined
3830 by the leftmost edge of the whole partition (part_left). The
3831 same goes for the rightmost edge of the right partition
3834 We know there are no uncompared elements on the left once we
3835 get u_right < part_left and no uncompared elements on the
3836 right once u_left > part_right. When both these conditions
3837 are met, we have completed the scan of the partition.
3839 Any elements which are between the pivot chunk and the
3840 uncompared elements should be less than the pivot value on
3841 the left side and greater than the pivot value on the right
3842 side (in fact, the goal of the whole algorithm is to arrange
3843 for that to be true and make the groups of less-than and
3844 greater-then elements into new partitions to sort again).
3846 As you marvel at the complexity of the code and wonder why it
3847 has to be so confusing. Consider some of the things this level
3848 of confusion brings:
3850 Once I do a compare, I squeeze every ounce of juice out of it. I
3851 never do compare calls I don't have to do, and I certainly never
3854 I also never swap any elements unless I can prove there is a
3855 good reason. Many sort algorithms will swap a known value with
3856 an uncompared value just to get things in the right place (or
3857 avoid complexity :-), but that uncompared value, once it gets
3858 compared, may then have to be swapped again. A lot of the
3859 complexity of this code is due to the fact that it never swaps
3860 anything except compared values, and it only swaps them when the
3861 compare shows they are out of position.
3863 int pc_left, pc_right;
3864 int u_right, u_left;
3868 pc_left = ((part_left + part_right) / 2);
3870 u_right = pc_left - 1;
3871 u_left = pc_right + 1;
3873 /* Qsort works best when the pivot value is also the median value
3874 in the partition (unfortunately you can't find the median value
3875 without first sorting :-), so to give the algorithm a helping
3876 hand, we pick 3 elements and sort them and use the median value
3877 of that tiny set as the pivot value.
3879 Some versions of qsort like to use the left middle and right as
3880 the 3 elements to sort so they can insure the ends of the
3881 partition will contain values which will stop the scan in the
3882 compare loop, but when you have to call an arbitrarily complex
3883 routine to do a compare, its really better to just keep track of
3884 array index values to know when you hit the edge of the
3885 partition and avoid the extra compare. An even better reason to
3886 avoid using a compare call is the fact that you can drop off the
3887 edge of the array if someone foolishly provides you with an
3888 unstable compare function that doesn't always provide consistent
3891 So, since it is simpler for us to compare the three adjacent
3892 elements in the middle of the partition, those are the ones we
3893 pick here (conveniently pointed at by u_right, pc_left, and
3894 u_left). The values of the left, center, and right elements
3895 are refered to as l c and r in the following comments.
3898 #ifdef QSORT_ORDER_GUESS
3901 s = qsort_cmp(u_right, pc_left);
3904 s = qsort_cmp(pc_left, u_left);
3905 /* if l < c, c < r - already in order - nothing to do */
3907 /* l < c, c == r - already in order, pc grows */
3909 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3911 /* l < c, c > r - need to know more */
3912 s = qsort_cmp(u_right, u_left);
3914 /* l < c, c > r, l < r - swap c & r to get ordered */
3915 qsort_swap(pc_left, u_left);
3916 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3917 } else if (s == 0) {
3918 /* l < c, c > r, l == r - swap c&r, grow pc */
3919 qsort_swap(pc_left, u_left);
3921 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3923 /* l < c, c > r, l > r - make lcr into rlc to get ordered */
3924 qsort_rotate(pc_left, u_right, u_left);
3925 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3928 } else if (s == 0) {
3930 s = qsort_cmp(pc_left, u_left);
3932 /* l == c, c < r - already in order, grow pc */
3934 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3935 } else if (s == 0) {
3936 /* l == c, c == r - already in order, grow pc both ways */
3939 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3941 /* l == c, c > r - swap l & r, grow pc */
3942 qsort_swap(u_right, u_left);
3944 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3948 s = qsort_cmp(pc_left, u_left);
3950 /* l > c, c < r - need to know more */
3951 s = qsort_cmp(u_right, u_left);
3953 /* l > c, c < r, l < r - swap l & c to get ordered */
3954 qsort_swap(u_right, pc_left);
3955 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3956 } else if (s == 0) {
3957 /* l > c, c < r, l == r - swap l & c, grow pc */
3958 qsort_swap(u_right, pc_left);
3960 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3962 /* l > c, c < r, l > r - rotate lcr into crl to order */
3963 qsort_rotate(u_right, pc_left, u_left);
3964 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3966 } else if (s == 0) {
3967 /* l > c, c == r - swap ends, grow pc */
3968 qsort_swap(u_right, u_left);
3970 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3972 /* l > c, c > r - swap ends to get in order */
3973 qsort_swap(u_right, u_left);
3974 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3977 /* We now know the 3 middle elements have been compared and
3978 arranged in the desired order, so we can shrink the uncompared
3983 qsort_all_asserts(pc_left, pc_right, u_left, u_right);
3985 /* The above massive nested if was the simple part :-). We now have
3986 the middle 3 elements ordered and we need to scan through the
3987 uncompared sets on either side, swapping elements that are on
3988 the wrong side or simply shuffling equal elements around to get
3989 all equal elements into the pivot chunk.
3993 int still_work_on_left;
3994 int still_work_on_right;
3996 /* Scan the uncompared values on the left. If I find a value
3997 equal to the pivot value, move it over so it is adjacent to
3998 the pivot chunk and expand the pivot chunk. If I find a value
3999 less than the pivot value, then just leave it - its already
4000 on the correct side of the partition. If I find a greater
4001 value, then stop the scan.
4003 while (still_work_on_left = (u_right >= part_left)) {
4004 s = qsort_cmp(u_right, pc_left);
4007 } else if (s == 0) {
4009 if (pc_left != u_right) {
4010 qsort_swap(u_right, pc_left);
4016 qsort_assert(u_right < pc_left);
4017 qsort_assert(pc_left <= pc_right);
4018 qsort_assert(qsort_cmp(u_right + 1, pc_left) <= 0);
4019 qsort_assert(qsort_cmp(pc_left, pc_right) == 0);
4022 /* Do a mirror image scan of uncompared values on the right
4024 while (still_work_on_right = (u_left <= part_right)) {
4025 s = qsort_cmp(pc_right, u_left);
4028 } else if (s == 0) {
4030 if (pc_right != u_left) {
4031 qsort_swap(pc_right, u_left);
4037 qsort_assert(u_left > pc_right);
4038 qsort_assert(pc_left <= pc_right);
4039 qsort_assert(qsort_cmp(pc_right, u_left - 1) <= 0);
4040 qsort_assert(qsort_cmp(pc_left, pc_right) == 0);
4043 if (still_work_on_left) {
4044 /* I know I have a value on the left side which needs to be
4045 on the right side, but I need to know more to decide
4046 exactly the best thing to do with it.
4048 if (still_work_on_right) {
4049 /* I know I have values on both side which are out of
4050 position. This is a big win because I kill two birds
4051 with one swap (so to speak). I can advance the
4052 uncompared pointers on both sides after swapping both
4053 of them into the right place.
4055 qsort_swap(u_right, u_left);
4058 qsort_all_asserts(pc_left, pc_right, u_left, u_right);
4060 /* I have an out of position value on the left, but the
4061 right is fully scanned, so I "slide" the pivot chunk
4062 and any less-than values left one to make room for the
4063 greater value over on the right. If the out of position
4064 value is immediately adjacent to the pivot chunk (there
4065 are no less-than values), I can do that with a swap,
4066 otherwise, I have to rotate one of the less than values
4067 into the former position of the out of position value
4068 and the right end of the pivot chunk into the left end
4072 if (pc_left == u_right) {
4073 qsort_swap(u_right, pc_right);
4074 qsort_all_asserts(pc_left, pc_right-1, u_left, u_right-1);
4076 qsort_rotate(u_right, pc_left, pc_right);
4077 qsort_all_asserts(pc_left, pc_right-1, u_left, u_right-1);
4082 } else if (still_work_on_right) {
4083 /* Mirror image of complex case above: I have an out of
4084 position value on the right, but the left is fully
4085 scanned, so I need to shuffle things around to make room
4086 for the right value on the left.
4089 if (pc_right == u_left) {
4090 qsort_swap(u_left, pc_left);
4091 qsort_all_asserts(pc_left+1, pc_right, u_left+1, u_right);
4093 qsort_rotate(pc_right, pc_left, u_left);
4094 qsort_all_asserts(pc_left+1, pc_right, u_left+1, u_right);
4099 /* No more scanning required on either side of partition,
4100 break out of loop and figure out next set of partitions
4106 /* The elements in the pivot chunk are now in the right place. They
4107 will never move or be compared again. All I have to do is decide
4108 what to do with the stuff to the left and right of the pivot
4111 Notes on the QSORT_ORDER_GUESS ifdef code:
4113 1. If I just built these partitions without swapping any (or
4114 very many) elements, there is a chance that the elements are
4115 already ordered properly (being properly ordered will
4116 certainly result in no swapping, but the converse can't be
4119 2. A (properly written) insertion sort will run faster on
4120 already ordered data than qsort will.
4122 3. Perhaps there is some way to make a good guess about
4123 switching to an insertion sort earlier than partition size 6
4124 (for instance - we could save the partition size on the stack
4125 and increase the size each time we find we didn't swap, thus
4126 switching to insertion sort earlier for partitions with a
4127 history of not swapping).
4129 4. Naturally, if I just switch right away, it will make
4130 artificial benchmarks with pure ascending (or descending)
4131 data look really good, but is that a good reason in general?
4135 #ifdef QSORT_ORDER_GUESS
4137 #if QSORT_ORDER_GUESS == 1
4138 qsort_break_even = (part_right - part_left) + 1;
4140 #if QSORT_ORDER_GUESS == 2
4141 qsort_break_even *= 2;
4143 #if QSORT_ORDER_GUESS == 3
4144 int prev_break = qsort_break_even;
4145 qsort_break_even *= qsort_break_even;
4146 if (qsort_break_even < prev_break) {
4147 qsort_break_even = (part_right - part_left) + 1;
4151 qsort_break_even = QSORT_BREAK_EVEN;
4155 if (part_left < pc_left) {
4156 /* There are elements on the left which need more processing.
4157 Check the right as well before deciding what to do.
4159 if (pc_right < part_right) {
4160 /* We have two partitions to be sorted. Stack the biggest one
4161 and process the smallest one on the next iteration. This
4162 minimizes the stack height by insuring that any additional
4163 stack entries must come from the smallest partition which
4164 (because it is smallest) will have the fewest
4165 opportunities to generate additional stack entries.
4167 if ((part_right - pc_right) > (pc_left - part_left)) {
4168 /* stack the right partition, process the left */
4169 partition_stack[next_stack_entry].left = pc_right + 1;
4170 partition_stack[next_stack_entry].right = part_right;
4171 #ifdef QSORT_ORDER_GUESS
4172 partition_stack[next_stack_entry].qsort_break_even = qsort_break_even;
4174 part_right = pc_left - 1;
4176 /* stack the left partition, process the right */
4177 partition_stack[next_stack_entry].left = part_left;
4178 partition_stack[next_stack_entry].right = pc_left - 1;
4179 #ifdef QSORT_ORDER_GUESS
4180 partition_stack[next_stack_entry].qsort_break_even = qsort_break_even;
4182 part_left = pc_right + 1;
4184 qsort_assert(next_stack_entry < QSORT_MAX_STACK);
4187 /* The elements on the left are the only remaining elements
4188 that need sorting, arrange for them to be processed as the
4191 part_right = pc_left - 1;
4193 } else if (pc_right < part_right) {
4194 /* There is only one chunk on the right to be sorted, make it
4195 the new partition and loop back around.
4197 part_left = pc_right + 1;
4199 /* This whole partition wound up in the pivot chunk, so
4200 we need to get a new partition off the stack.
4202 if (next_stack_entry == 0) {
4203 /* the stack is empty - we are done */
4207 part_left = partition_stack[next_stack_entry].left;
4208 part_right = partition_stack[next_stack_entry].right;
4209 #ifdef QSORT_ORDER_GUESS
4210 qsort_break_even = partition_stack[next_stack_entry].qsort_break_even;
4214 /* This partition is too small to fool with qsort complexity, just
4215 do an ordinary insertion sort to minimize overhead.
4218 /* Assume 1st element is in right place already, and start checking
4219 at 2nd element to see where it should be inserted.
4221 for (i = part_left + 1; i <= part_right; ++i) {
4223 /* Scan (backwards - just in case 'i' is already in right place)
4224 through the elements already sorted to see if the ith element
4225 belongs ahead of one of them.
4227 for (j = i - 1; j >= part_left; --j) {
4228 if (qsort_cmp(i, j) >= 0) {
4229 /* i belongs right after j
4236 /* Looks like we really need to move some things
4240 for (k = i - 1; k >= j; --k)
4241 array[k + 1] = array[k];
4246 /* That partition is now sorted, grab the next one, or get out
4247 of the loop if there aren't any more.
4250 if (next_stack_entry == 0) {
4251 /* the stack is empty - we are done */
4255 part_left = partition_stack[next_stack_entry].left;
4256 part_right = partition_stack[next_stack_entry].right;
4257 #ifdef QSORT_ORDER_GUESS
4258 qsort_break_even = partition_stack[next_stack_entry].qsort_break_even;
4263 /* Believe it or not, the array is sorted at this point! */
4275 sortcv(pTHXo_ SV *a, SV *b)
4278 I32 oldsaveix = PL_savestack_ix;
4279 I32 oldscopeix = PL_scopestack_ix;
4281 GvSV(PL_firstgv) = a;
4282 GvSV(PL_secondgv) = b;
4283 PL_stack_sp = PL_stack_base;
4286 if (PL_stack_sp != PL_stack_base + 1)
4287 Perl_croak(aTHX_ "Sort subroutine didn't return single value");
4288 if (!SvNIOKp(*PL_stack_sp))
4289 Perl_croak(aTHX_ "Sort subroutine didn't return a numeric value");
4290 result = SvIV(*PL_stack_sp);
4291 while (PL_scopestack_ix > oldscopeix) {
4294 leave_scope(oldsaveix);
4299 sortcv_stacked(pTHXo_ SV *a, SV *b)
4302 I32 oldsaveix = PL_savestack_ix;
4303 I32 oldscopeix = PL_scopestack_ix;
4308 av = (AV*)PL_curpad[0];
4310 av = GvAV(PL_defgv);
4313 if (AvMAX(av) < 1) {
4314 SV** ary = AvALLOC(av);
4315 if (AvARRAY(av) != ary) {
4316 AvMAX(av) += AvARRAY(av) - AvALLOC(av);
4317 SvPVX(av) = (char*)ary;
4319 if (AvMAX(av) < 1) {
4322 SvPVX(av) = (char*)ary;
4329 PL_stack_sp = PL_stack_base;
4332 if (PL_stack_sp != PL_stack_base + 1)
4333 Perl_croak(aTHX_ "Sort subroutine didn't return single value");
4334 if (!SvNIOKp(*PL_stack_sp))
4335 Perl_croak(aTHX_ "Sort subroutine didn't return a numeric value");
4336 result = SvIV(*PL_stack_sp);
4337 while (PL_scopestack_ix > oldscopeix) {
4340 leave_scope(oldsaveix);
4345 sortcv_xsub(pTHXo_ SV *a, SV *b)
4348 I32 oldsaveix = PL_savestack_ix;
4349 I32 oldscopeix = PL_scopestack_ix;
4351 CV *cv=(CV*)PL_sortcop;
4359 (void)(*CvXSUB(cv))(aTHXo_ cv);
4360 if (PL_stack_sp != PL_stack_base + 1)
4361 Perl_croak(aTHX_ "Sort subroutine didn't return single value");
4362 if (!SvNIOKp(*PL_stack_sp))
4363 Perl_croak(aTHX_ "Sort subroutine didn't return a numeric value");
4364 result = SvIV(*PL_stack_sp);
4365 while (PL_scopestack_ix > oldscopeix) {
4368 leave_scope(oldsaveix);
4374 sv_ncmp(pTHXo_ SV *a, SV *b)
4378 return nv1 < nv2 ? -1 : nv1 > nv2 ? 1 : 0;
4382 sv_i_ncmp(pTHXo_ SV *a, SV *b)
4386 return iv1 < iv2 ? -1 : iv1 > iv2 ? 1 : 0;
4388 #define tryCALL_AMAGICbin(left,right,meth,svp) STMT_START { \
4390 if (PL_amagic_generation) { \
4391 if (SvAMAGIC(left)||SvAMAGIC(right))\
4392 *svp = amagic_call(left, \
4400 amagic_ncmp(pTHXo_ register SV *a, register SV *b)
4403 tryCALL_AMAGICbin(a,b,ncmp,&tmpsv);
4408 I32 i = SvIVX(tmpsv);
4418 return sv_ncmp(aTHXo_ a, b);
4422 amagic_i_ncmp(pTHXo_ register SV *a, register SV *b)
4425 tryCALL_AMAGICbin(a,b,ncmp,&tmpsv);
4430 I32 i = SvIVX(tmpsv);
4440 return sv_i_ncmp(aTHXo_ a, b);
4444 amagic_cmp(pTHXo_ register SV *str1, register SV *str2)
4447 tryCALL_AMAGICbin(str1,str2,scmp,&tmpsv);
4452 I32 i = SvIVX(tmpsv);
4462 return sv_cmp(str1, str2);
4466 amagic_cmp_locale(pTHXo_ register SV *str1, register SV *str2)
4469 tryCALL_AMAGICbin(str1,str2,scmp,&tmpsv);
4474 I32 i = SvIVX(tmpsv);
4484 return sv_cmp_locale(str1, str2);
4488 run_user_filter(pTHXo_ int idx, SV *buf_sv, int maxlen)
4490 SV *datasv = FILTER_DATA(idx);
4491 int filter_has_file = IoLINES(datasv);
4492 GV *filter_child_proc = (GV *)IoFMT_GV(datasv);
4493 SV *filter_state = (SV *)IoTOP_GV(datasv);
4494 SV *filter_sub = (SV *)IoBOTTOM_GV(datasv);
4497 /* I was having segfault trouble under Linux 2.2.5 after a
4498 parse error occured. (Had to hack around it with a test
4499 for PL_error_count == 0.) Solaris doesn't segfault --
4500 not sure where the trouble is yet. XXX */
4502 if (filter_has_file) {
4503 len = FILTER_READ(idx+1, buf_sv, maxlen);
4506 if (filter_sub && len >= 0) {
4517 PUSHs(sv_2mortal(newSViv(maxlen)));
4519 PUSHs(filter_state);
4522 count = call_sv(filter_sub, G_SCALAR);
4538 IoLINES(datasv) = 0;
4539 if (filter_child_proc) {
4540 SvREFCNT_dec(filter_child_proc);
4541 IoFMT_GV(datasv) = Nullgv;
4544 SvREFCNT_dec(filter_state);
4545 IoTOP_GV(datasv) = Nullgv;
4548 SvREFCNT_dec(filter_sub);
4549 IoBOTTOM_GV(datasv) = Nullgv;
4551 filter_del(run_user_filter);
4560 sv_cmp_locale_static(pTHXo_ register SV *str1, register SV *str2)
4562 return sv_cmp_locale(str1, str2);
4566 sv_cmp_static(pTHXo_ register SV *str1, register SV *str2)
4568 return sv_cmp(str1, str2);
4571 #endif /* PERL_OBJECT */