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;
1243 while (cxstack_ix > cxix) {
1245 cx = &cxstack[cxstack_ix];
1246 DEBUG_l(PerlIO_printf(Perl_debug_log, "Unwinding block %ld, type %s\n",
1247 (long) cxstack_ix, PL_block_type[CxTYPE(cx)]));
1248 /* Note: we don't need to restore the base context info till the end. */
1249 switch (CxTYPE(cx)) {
1252 continue; /* not break */
1274 * Closures mentioned at top level of eval cannot be referenced
1275 * again, and their presence indirectly causes a memory leak.
1276 * (Note that the fact that compcv and friends are still set here
1277 * is, AFAIK, an accident.) --Chip
1279 * XXX need to get comppad et al from eval's cv rather than
1280 * relying on the incidental global values.
1283 S_free_closures(pTHX)
1286 SV **svp = AvARRAY(PL_comppad_name);
1288 for (ix = AvFILLp(PL_comppad_name); ix >= 0; ix--) {
1290 if (sv && sv != &PL_sv_undef && *SvPVX(sv) == '&') {
1292 svp[ix] = &PL_sv_undef;
1296 SvREFCNT_dec(CvOUTSIDE(sv));
1297 CvOUTSIDE(sv) = Nullcv;
1310 Perl_qerror(pTHX_ SV *err)
1313 sv_catsv(ERRSV, err);
1315 sv_catsv(PL_errors, err);
1317 Perl_warn(aTHX_ "%"SVf, err);
1322 Perl_die_where(pTHX_ char *message, STRLEN msglen)
1327 register PERL_CONTEXT *cx;
1332 if (PL_in_eval & EVAL_KEEPERR) {
1333 static char prefix[] = "\t(in cleanup) ";
1338 else if (SvCUR(err) >= sizeof(prefix)+msglen-1) {
1341 if (*e != *message || strNE(e,message))
1345 SvGROW(err, SvCUR(err)+sizeof(prefix)+msglen);
1346 sv_catpvn(err, prefix, sizeof(prefix)-1);
1347 sv_catpvn(err, message, msglen);
1348 if (ckWARN(WARN_MISC)) {
1349 STRLEN start = SvCUR(err)-msglen-sizeof(prefix)+1;
1350 Perl_warner(aTHX_ WARN_MISC, SvPVX(err)+start);
1355 sv_setpvn(ERRSV, message, msglen);
1358 message = SvPVx(ERRSV, msglen);
1360 while ((cxix = dopoptoeval(cxstack_ix)) < 0
1361 && PL_curstackinfo->si_prev)
1370 if (cxix < cxstack_ix)
1373 POPBLOCK(cx,PL_curpm);
1374 if (CxTYPE(cx) != CXt_EVAL) {
1375 PerlIO_write(Perl_error_log, "panic: die ", 11);
1376 PerlIO_write(Perl_error_log, message, msglen);
1381 if (gimme == G_SCALAR)
1382 *++newsp = &PL_sv_undef;
1383 PL_stack_sp = newsp;
1387 if (optype == OP_REQUIRE) {
1388 char* msg = SvPVx(ERRSV, n_a);
1389 DIE(aTHX_ "%sCompilation failed in require",
1390 *msg ? msg : "Unknown error\n");
1392 return pop_return();
1396 message = SvPVx(ERRSV, msglen);
1399 /* SFIO can really mess with your errno */
1402 PerlIO *serr = Perl_error_log;
1404 PerlIO_write(serr, message, msglen);
1405 (void)PerlIO_flush(serr);
1418 if (SvTRUE(left) != SvTRUE(right))
1430 RETURNOP(cLOGOP->op_other);
1439 RETURNOP(cLOGOP->op_other);
1445 register I32 cxix = dopoptosub(cxstack_ix);
1446 register PERL_CONTEXT *cx;
1447 register PERL_CONTEXT *ccstack = cxstack;
1448 PERL_SI *top_si = PL_curstackinfo;
1459 /* we may be in a higher stacklevel, so dig down deeper */
1460 while (cxix < 0 && top_si->si_type != PERLSI_MAIN) {
1461 top_si = top_si->si_prev;
1462 ccstack = top_si->si_cxstack;
1463 cxix = dopoptosub_at(ccstack, top_si->si_cxix);
1466 if (GIMME != G_ARRAY)
1470 if (PL_DBsub && cxix >= 0 &&
1471 ccstack[cxix].blk_sub.cv == GvCV(PL_DBsub))
1475 cxix = dopoptosub_at(ccstack, cxix - 1);
1478 cx = &ccstack[cxix];
1479 if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
1480 dbcxix = dopoptosub_at(ccstack, cxix - 1);
1481 /* We expect that ccstack[dbcxix] is CXt_SUB, anyway, the
1482 field below is defined for any cx. */
1483 if (PL_DBsub && dbcxix >= 0 && ccstack[dbcxix].blk_sub.cv == GvCV(PL_DBsub))
1484 cx = &ccstack[dbcxix];
1487 stashname = CopSTASHPV(cx->blk_oldcop);
1488 if (GIMME != G_ARRAY) {
1490 PUSHs(&PL_sv_undef);
1493 sv_setpv(TARG, stashname);
1500 PUSHs(&PL_sv_undef);
1502 PUSHs(sv_2mortal(newSVpv(stashname, 0)));
1503 PUSHs(sv_2mortal(newSVpv(CopFILE(cx->blk_oldcop), 0)));
1504 PUSHs(sv_2mortal(newSViv((I32)CopLINE(cx->blk_oldcop))));
1507 if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
1508 /* So is ccstack[dbcxix]. */
1510 gv_efullname3(sv, CvGV(ccstack[cxix].blk_sub.cv), Nullch);
1511 PUSHs(sv_2mortal(sv));
1512 PUSHs(sv_2mortal(newSViv((I32)cx->blk_sub.hasargs)));
1515 PUSHs(sv_2mortal(newSVpvn("(eval)",6)));
1516 PUSHs(sv_2mortal(newSViv(0)));
1518 gimme = (I32)cx->blk_gimme;
1519 if (gimme == G_VOID)
1520 PUSHs(&PL_sv_undef);
1522 PUSHs(sv_2mortal(newSViv(gimme & G_ARRAY)));
1523 if (CxTYPE(cx) == CXt_EVAL) {
1525 if (cx->blk_eval.old_op_type == OP_ENTEREVAL) {
1526 PUSHs(cx->blk_eval.cur_text);
1530 else if (cx->blk_eval.old_namesv) {
1531 PUSHs(sv_2mortal(newSVsv(cx->blk_eval.old_namesv)));
1534 /* eval BLOCK (try blocks have old_namesv == 0) */
1536 PUSHs(&PL_sv_undef);
1537 PUSHs(&PL_sv_undef);
1541 PUSHs(&PL_sv_undef);
1542 PUSHs(&PL_sv_undef);
1544 if (CxTYPE(cx) == CXt_SUB && cx->blk_sub.hasargs
1545 && CopSTASH_eq(PL_curcop, PL_debstash))
1547 AV *ary = cx->blk_sub.argarray;
1548 int off = AvARRAY(ary) - AvALLOC(ary);
1552 PL_dbargs = GvAV(gv_AVadd(tmpgv = gv_fetchpv("DB::args", TRUE,
1555 AvREAL_off(PL_dbargs); /* XXX Should be REIFY */
1558 if (AvMAX(PL_dbargs) < AvFILLp(ary) + off)
1559 av_extend(PL_dbargs, AvFILLp(ary) + off);
1560 Copy(AvALLOC(ary), AvARRAY(PL_dbargs), AvFILLp(ary) + 1 + off, SV*);
1561 AvFILLp(PL_dbargs) = AvFILLp(ary) + off;
1563 /* XXX only hints propagated via op_private are currently
1564 * visible (others are not easily accessible, since they
1565 * use the global PL_hints) */
1566 PUSHs(sv_2mortal(newSViv((I32)cx->blk_oldcop->op_private &
1567 HINT_PRIVATE_MASK)));
1570 SV * old_warnings = cx->blk_oldcop->cop_warnings ;
1571 if (old_warnings == pWARN_NONE || old_warnings == pWARN_STD)
1572 mask = newSVpvn(WARN_NONEstring, WARNsize) ;
1573 else if (old_warnings == pWARN_ALL)
1574 mask = newSVpvn(WARN_ALLstring, WARNsize) ;
1576 mask = newSVsv(old_warnings);
1577 PUSHs(sv_2mortal(mask));
1592 sv_reset(tmps, CopSTASH(PL_curcop));
1604 PL_curcop = (COP*)PL_op;
1605 TAINT_NOT; /* Each statement is presumed innocent */
1606 PL_stack_sp = PL_stack_base + cxstack[cxstack_ix].blk_oldsp;
1609 if (PL_op->op_private || SvIV(PL_DBsingle) || SvIV(PL_DBsignal) || SvIV(PL_DBtrace))
1613 register PERL_CONTEXT *cx;
1614 I32 gimme = G_ARRAY;
1621 DIE(aTHX_ "No DB::DB routine defined");
1623 if (CvDEPTH(cv) >= 1 && !(PL_debug & (1<<30))) /* don't do recursive DB::DB call */
1635 push_return(PL_op->op_next);
1636 PUSHBLOCK(cx, CXt_SUB, SP);
1639 (void)SvREFCNT_inc(cv);
1640 SAVEVPTR(PL_curpad);
1641 PL_curpad = AvARRAY((AV*)*av_fetch(CvPADLIST(cv),1,FALSE));
1642 RETURNOP(CvSTART(cv));
1656 register PERL_CONTEXT *cx;
1657 I32 gimme = GIMME_V;
1659 U32 cxtype = CXt_LOOP;
1668 if (PL_op->op_flags & OPf_SPECIAL) {
1670 svp = &THREADSV(PL_op->op_targ); /* per-thread variable */
1671 SAVEGENERICSV(*svp);
1675 #endif /* USE_THREADS */
1676 if (PL_op->op_targ) {
1677 svp = &PL_curpad[PL_op->op_targ]; /* "my" variable */
1680 iterdata = (void*)PL_op->op_targ;
1681 cxtype |= CXp_PADVAR;
1686 svp = &GvSV(gv); /* symbol table variable */
1687 SAVEGENERICSV(*svp);
1690 iterdata = (void*)gv;
1696 PUSHBLOCK(cx, cxtype, SP);
1698 PUSHLOOP(cx, iterdata, MARK);
1700 PUSHLOOP(cx, svp, MARK);
1702 if (PL_op->op_flags & OPf_STACKED) {
1703 cx->blk_loop.iterary = (AV*)SvREFCNT_inc(POPs);
1704 if (SvTYPE(cx->blk_loop.iterary) != SVt_PVAV) {
1706 if (SvNIOKp(sv) || !SvPOKp(sv) ||
1707 SvNIOKp(cx->blk_loop.iterary) || !SvPOKp(cx->blk_loop.iterary) ||
1708 (looks_like_number(sv) && *SvPVX(sv) != '0' &&
1709 looks_like_number((SV*)cx->blk_loop.iterary) &&
1710 *SvPVX(cx->blk_loop.iterary) != '0'))
1712 if (SvNV(sv) < IV_MIN ||
1713 SvNV((SV*)cx->blk_loop.iterary) >= IV_MAX)
1714 DIE(aTHX_ "Range iterator outside integer range");
1715 cx->blk_loop.iterix = SvIV(sv);
1716 cx->blk_loop.itermax = SvIV((SV*)cx->blk_loop.iterary);
1719 cx->blk_loop.iterlval = newSVsv(sv);
1723 cx->blk_loop.iterary = PL_curstack;
1724 AvFILLp(PL_curstack) = SP - PL_stack_base;
1725 cx->blk_loop.iterix = MARK - PL_stack_base;
1734 register PERL_CONTEXT *cx;
1735 I32 gimme = GIMME_V;
1741 PUSHBLOCK(cx, CXt_LOOP, SP);
1742 PUSHLOOP(cx, 0, SP);
1750 register PERL_CONTEXT *cx;
1758 newsp = PL_stack_base + cx->blk_loop.resetsp;
1761 if (gimme == G_VOID)
1763 else if (gimme == G_SCALAR) {
1765 *++newsp = sv_mortalcopy(*SP);
1767 *++newsp = &PL_sv_undef;
1771 *++newsp = sv_mortalcopy(*++mark);
1772 TAINT_NOT; /* Each item is independent */
1778 POPLOOP(cx); /* Stack values are safe: release loop vars ... */
1779 PL_curpm = newpm; /* ... and pop $1 et al */
1791 register PERL_CONTEXT *cx;
1792 bool popsub2 = FALSE;
1793 bool clear_errsv = FALSE;
1800 if (PL_curstackinfo->si_type == PERLSI_SORT) {
1801 if (cxstack_ix == PL_sortcxix
1802 || dopoptosub(cxstack_ix) <= PL_sortcxix)
1804 if (cxstack_ix > PL_sortcxix)
1805 dounwind(PL_sortcxix);
1806 AvARRAY(PL_curstack)[1] = *SP;
1807 PL_stack_sp = PL_stack_base + 1;
1812 cxix = dopoptosub(cxstack_ix);
1814 DIE(aTHX_ "Can't return outside a subroutine");
1815 if (cxix < cxstack_ix)
1819 switch (CxTYPE(cx)) {
1824 if (!(PL_in_eval & EVAL_KEEPERR))
1829 if (AvFILLp(PL_comppad_name) >= 0)
1832 if (optype == OP_REQUIRE &&
1833 (MARK == SP || (gimme == G_SCALAR && !SvTRUE(*SP))) )
1835 /* Unassume the success we assumed earlier. */
1836 SV *nsv = cx->blk_eval.old_namesv;
1837 (void)hv_delete(GvHVn(PL_incgv), SvPVX(nsv), SvCUR(nsv), G_DISCARD);
1838 DIE(aTHX_ "%s did not return a true value", SvPVX(nsv));
1845 DIE(aTHX_ "panic: return");
1849 if (gimme == G_SCALAR) {
1852 if (cx->blk_sub.cv && CvDEPTH(cx->blk_sub.cv) > 1) {
1854 *++newsp = SvREFCNT_inc(*SP);
1859 sv = SvREFCNT_inc(*SP); /* FREETMPS could clobber it */
1861 *++newsp = sv_mortalcopy(sv);
1866 *++newsp = (SvTEMP(*SP)) ? *SP : sv_mortalcopy(*SP);
1869 *++newsp = sv_mortalcopy(*SP);
1872 *++newsp = &PL_sv_undef;
1874 else if (gimme == G_ARRAY) {
1875 while (++MARK <= SP) {
1876 *++newsp = (popsub2 && SvTEMP(*MARK))
1877 ? *MARK : sv_mortalcopy(*MARK);
1878 TAINT_NOT; /* Each item is independent */
1881 PL_stack_sp = newsp;
1883 /* Stack values are safe: */
1885 POPSUB(cx,sv); /* release CV and @_ ... */
1889 PL_curpm = newpm; /* ... and pop $1 et al */
1895 return pop_return();
1902 register PERL_CONTEXT *cx;
1912 if (PL_op->op_flags & OPf_SPECIAL) {
1913 cxix = dopoptoloop(cxstack_ix);
1915 DIE(aTHX_ "Can't \"last\" outside a loop block");
1918 cxix = dopoptolabel(cPVOP->op_pv);
1920 DIE(aTHX_ "Label not found for \"last %s\"", cPVOP->op_pv);
1922 if (cxix < cxstack_ix)
1927 switch (CxTYPE(cx)) {
1930 newsp = PL_stack_base + cx->blk_loop.resetsp;
1931 nextop = cx->blk_loop.last_op->op_next;
1935 nextop = pop_return();
1939 nextop = pop_return();
1943 nextop = pop_return();
1946 DIE(aTHX_ "panic: last");
1950 if (gimme == G_SCALAR) {
1952 *++newsp = ((pop2 == CXt_SUB) && SvTEMP(*SP))
1953 ? *SP : sv_mortalcopy(*SP);
1955 *++newsp = &PL_sv_undef;
1957 else if (gimme == G_ARRAY) {
1958 while (++MARK <= SP) {
1959 *++newsp = ((pop2 == CXt_SUB) && SvTEMP(*MARK))
1960 ? *MARK : sv_mortalcopy(*MARK);
1961 TAINT_NOT; /* Each item is independent */
1967 /* Stack values are safe: */
1970 POPLOOP(cx); /* release loop vars ... */
1974 POPSUB(cx,sv); /* release CV and @_ ... */
1977 PL_curpm = newpm; /* ... and pop $1 et al */
1987 register PERL_CONTEXT *cx;
1990 if (PL_op->op_flags & OPf_SPECIAL) {
1991 cxix = dopoptoloop(cxstack_ix);
1993 DIE(aTHX_ "Can't \"next\" outside a loop block");
1996 cxix = dopoptolabel(cPVOP->op_pv);
1998 DIE(aTHX_ "Label not found for \"next %s\"", cPVOP->op_pv);
2000 if (cxix < cxstack_ix)
2003 /* clear off anything above the scope we're re-entering, but
2004 * save the rest until after a possible continue block */
2005 inner = PL_scopestack_ix;
2007 if (PL_scopestack_ix < inner)
2008 leave_scope(PL_scopestack[PL_scopestack_ix]);
2009 return cx->blk_loop.next_op;
2015 register PERL_CONTEXT *cx;
2018 if (PL_op->op_flags & OPf_SPECIAL) {
2019 cxix = dopoptoloop(cxstack_ix);
2021 DIE(aTHX_ "Can't \"redo\" outside a loop block");
2024 cxix = dopoptolabel(cPVOP->op_pv);
2026 DIE(aTHX_ "Label not found for \"redo %s\"", cPVOP->op_pv);
2028 if (cxix < cxstack_ix)
2032 oldsave = PL_scopestack[PL_scopestack_ix - 1];
2033 LEAVE_SCOPE(oldsave);
2034 return cx->blk_loop.redo_op;
2038 S_dofindlabel(pTHX_ OP *o, char *label, OP **opstack, OP **oplimit)
2042 static char too_deep[] = "Target of goto is too deeply nested";
2045 Perl_croak(aTHX_ too_deep);
2046 if (o->op_type == OP_LEAVE ||
2047 o->op_type == OP_SCOPE ||
2048 o->op_type == OP_LEAVELOOP ||
2049 o->op_type == OP_LEAVETRY)
2051 *ops++ = cUNOPo->op_first;
2053 Perl_croak(aTHX_ too_deep);
2056 if (o->op_flags & OPf_KIDS) {
2058 /* First try all the kids at this level, since that's likeliest. */
2059 for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling) {
2060 if ((kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) &&
2061 kCOP->cop_label && strEQ(kCOP->cop_label, label))
2064 for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling) {
2065 if (kid == PL_lastgotoprobe)
2067 if ((kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) &&
2069 (ops[-1]->op_type != OP_NEXTSTATE &&
2070 ops[-1]->op_type != OP_DBSTATE)))
2072 if ((o = dofindlabel(kid, label, ops, oplimit)))
2091 register PERL_CONTEXT *cx;
2092 #define GOTO_DEPTH 64
2093 OP *enterops[GOTO_DEPTH];
2095 int do_dump = (PL_op->op_type == OP_DUMP);
2096 static char must_have_label[] = "goto must have label";
2099 if (PL_op->op_flags & OPf_STACKED) {
2103 /* This egregious kludge implements goto &subroutine */
2104 if (SvROK(sv) && SvTYPE(SvRV(sv)) == SVt_PVCV) {
2106 register PERL_CONTEXT *cx;
2107 CV* cv = (CV*)SvRV(sv);
2113 if (!CvROOT(cv) && !CvXSUB(cv)) {
2118 /* autoloaded stub? */
2119 if (cv != GvCV(gv) && (cv = GvCV(gv)))
2121 autogv = gv_autoload4(GvSTASH(gv), GvNAME(gv),
2122 GvNAMELEN(gv), FALSE);
2123 if (autogv && (cv = GvCV(autogv)))
2125 tmpstr = sv_newmortal();
2126 gv_efullname3(tmpstr, gv, Nullch);
2127 DIE(aTHX_ "Goto undefined subroutine &%s",SvPVX(tmpstr));
2129 DIE(aTHX_ "Goto undefined subroutine");
2132 /* First do some returnish stuff. */
2133 cxix = dopoptosub(cxstack_ix);
2135 DIE(aTHX_ "Can't goto subroutine outside a subroutine");
2136 if (cxix < cxstack_ix)
2139 if (CxTYPE(cx) == CXt_EVAL && cx->blk_eval.old_op_type == OP_ENTEREVAL)
2140 DIE(aTHX_ "Can't goto subroutine from an eval-string");
2142 if (CxTYPE(cx) == CXt_SUB && cx->blk_sub.hasargs) {
2143 /* put @_ back onto stack */
2144 AV* av = cx->blk_sub.argarray;
2146 items = AvFILLp(av) + 1;
2148 EXTEND(PL_stack_sp, items); /* @_ could have been extended. */
2149 Copy(AvARRAY(av), PL_stack_sp, items, SV*);
2150 PL_stack_sp += items;
2152 SvREFCNT_dec(GvAV(PL_defgv));
2153 GvAV(PL_defgv) = cx->blk_sub.savearray;
2154 #endif /* USE_THREADS */
2155 /* abandon @_ if it got reified */
2157 (void)sv_2mortal((SV*)av); /* delay until return */
2159 av_extend(av, items-1);
2160 AvFLAGS(av) = AVf_REIFY;
2161 PL_curpad[0] = (SV*)(cx->blk_sub.argarray = av);
2164 else if (CvXSUB(cv)) { /* put GvAV(defgv) back onto stack */
2167 av = (AV*)PL_curpad[0];
2169 av = GvAV(PL_defgv);
2171 items = AvFILLp(av) + 1;
2173 EXTEND(PL_stack_sp, items); /* @_ could have been extended. */
2174 Copy(AvARRAY(av), PL_stack_sp, items, SV*);
2175 PL_stack_sp += items;
2177 if (CxTYPE(cx) == CXt_SUB &&
2178 !(CvDEPTH(cx->blk_sub.cv) = cx->blk_sub.olddepth))
2179 SvREFCNT_dec(cx->blk_sub.cv);
2180 oldsave = PL_scopestack[PL_scopestack_ix - 1];
2181 LEAVE_SCOPE(oldsave);
2183 /* Now do some callish stuff. */
2186 #ifdef PERL_XSUB_OLDSTYLE
2187 if (CvOLDSTYLE(cv)) {
2188 I32 (*fp3)(int,int,int);
2193 fp3 = (I32(*)(int,int,int))CvXSUB(cv);
2194 items = (*fp3)(CvXSUBANY(cv).any_i32,
2195 mark - PL_stack_base + 1,
2197 SP = PL_stack_base + items;
2200 #endif /* PERL_XSUB_OLDSTYLE */
2205 PL_stack_sp--; /* There is no cv arg. */
2206 /* Push a mark for the start of arglist */
2208 (void)(*CvXSUB(cv))(aTHXo_ cv);
2209 /* Pop the current context like a decent sub should */
2210 POPBLOCK(cx, PL_curpm);
2211 /* Do _not_ use PUTBACK, keep the XSUB's return stack! */
2214 return pop_return();
2217 AV* padlist = CvPADLIST(cv);
2218 SV** svp = AvARRAY(padlist);
2219 if (CxTYPE(cx) == CXt_EVAL) {
2220 PL_in_eval = cx->blk_eval.old_in_eval;
2221 PL_eval_root = cx->blk_eval.old_eval_root;
2222 cx->cx_type = CXt_SUB;
2223 cx->blk_sub.hasargs = 0;
2225 cx->blk_sub.cv = cv;
2226 cx->blk_sub.olddepth = CvDEPTH(cv);
2228 if (CvDEPTH(cv) < 2)
2229 (void)SvREFCNT_inc(cv);
2230 else { /* save temporaries on recursion? */
2231 if (CvDEPTH(cv) == 100 && ckWARN(WARN_RECURSION))
2232 sub_crush_depth(cv);
2233 if (CvDEPTH(cv) > AvFILLp(padlist)) {
2234 AV *newpad = newAV();
2235 SV **oldpad = AvARRAY(svp[CvDEPTH(cv)-1]);
2236 I32 ix = AvFILLp((AV*)svp[1]);
2237 I32 names_fill = AvFILLp((AV*)svp[0]);
2238 svp = AvARRAY(svp[0]);
2239 for ( ;ix > 0; ix--) {
2240 if (names_fill >= ix && svp[ix] != &PL_sv_undef) {
2241 char *name = SvPVX(svp[ix]);
2242 if ((SvFLAGS(svp[ix]) & SVf_FAKE)
2245 /* outer lexical or anon code */
2246 av_store(newpad, ix,
2247 SvREFCNT_inc(oldpad[ix]) );
2249 else { /* our own lexical */
2251 av_store(newpad, ix, sv = (SV*)newAV());
2252 else if (*name == '%')
2253 av_store(newpad, ix, sv = (SV*)newHV());
2255 av_store(newpad, ix, sv = NEWSV(0,0));
2259 else if (IS_PADGV(oldpad[ix]) || IS_PADCONST(oldpad[ix])) {
2260 av_store(newpad, ix, sv = SvREFCNT_inc(oldpad[ix]));
2263 av_store(newpad, ix, sv = NEWSV(0,0));
2267 if (cx->blk_sub.hasargs) {
2270 av_store(newpad, 0, (SV*)av);
2271 AvFLAGS(av) = AVf_REIFY;
2273 av_store(padlist, CvDEPTH(cv), (SV*)newpad);
2274 AvFILLp(padlist) = CvDEPTH(cv);
2275 svp = AvARRAY(padlist);
2279 if (!cx->blk_sub.hasargs) {
2280 AV* av = (AV*)PL_curpad[0];
2282 items = AvFILLp(av) + 1;
2284 /* Mark is at the end of the stack. */
2286 Copy(AvARRAY(av), SP + 1, items, SV*);
2291 #endif /* USE_THREADS */
2292 SAVEVPTR(PL_curpad);
2293 PL_curpad = AvARRAY((AV*)svp[CvDEPTH(cv)]);
2295 if (cx->blk_sub.hasargs)
2296 #endif /* USE_THREADS */
2298 AV* av = (AV*)PL_curpad[0];
2302 cx->blk_sub.savearray = GvAV(PL_defgv);
2303 GvAV(PL_defgv) = (AV*)SvREFCNT_inc(av);
2304 #endif /* USE_THREADS */
2305 cx->blk_sub.argarray = av;
2308 if (items >= AvMAX(av) + 1) {
2310 if (AvARRAY(av) != ary) {
2311 AvMAX(av) += AvARRAY(av) - AvALLOC(av);
2312 SvPVX(av) = (char*)ary;
2314 if (items >= AvMAX(av) + 1) {
2315 AvMAX(av) = items - 1;
2316 Renew(ary,items+1,SV*);
2318 SvPVX(av) = (char*)ary;
2321 Copy(mark,AvARRAY(av),items,SV*);
2322 AvFILLp(av) = items - 1;
2323 assert(!AvREAL(av));
2330 if (PERLDB_SUB) { /* Checking curstash breaks DProf. */
2332 * We do not care about using sv to call CV;
2333 * it's for informational purposes only.
2335 SV *sv = GvSV(PL_DBsub);
2338 if (PERLDB_SUB_NN) {
2339 SvIVX(sv) = PTR2IV(cv); /* Already upgraded, saved */
2342 gv_efullname3(sv, CvGV(cv), Nullch);
2345 && (gotocv = get_cv("DB::goto", FALSE)) ) {
2346 PUSHMARK( PL_stack_sp );
2347 call_sv((SV*)gotocv, G_SCALAR | G_NODEBUG);
2351 RETURNOP(CvSTART(cv));
2355 label = SvPV(sv,n_a);
2356 if (!(do_dump || *label))
2357 DIE(aTHX_ must_have_label);
2360 else if (PL_op->op_flags & OPf_SPECIAL) {
2362 DIE(aTHX_ must_have_label);
2365 label = cPVOP->op_pv;
2367 if (label && *label) {
2372 PL_lastgotoprobe = 0;
2374 for (ix = cxstack_ix; ix >= 0; ix--) {
2376 switch (CxTYPE(cx)) {
2378 gotoprobe = PL_eval_root; /* XXX not good for nested eval */
2381 gotoprobe = cx->blk_oldcop->op_sibling;
2387 gotoprobe = cx->blk_oldcop->op_sibling;
2389 gotoprobe = PL_main_root;
2392 if (CvDEPTH(cx->blk_sub.cv)) {
2393 gotoprobe = CvROOT(cx->blk_sub.cv);
2399 DIE(aTHX_ "Can't \"goto\" out of a pseudo block");
2402 DIE(aTHX_ "panic: goto");
2403 gotoprobe = PL_main_root;
2407 retop = dofindlabel(gotoprobe, label,
2408 enterops, enterops + GOTO_DEPTH);
2412 PL_lastgotoprobe = gotoprobe;
2415 DIE(aTHX_ "Can't find label %s", label);
2417 /* pop unwanted frames */
2419 if (ix < cxstack_ix) {
2426 oldsave = PL_scopestack[PL_scopestack_ix];
2427 LEAVE_SCOPE(oldsave);
2430 /* push wanted frames */
2432 if (*enterops && enterops[1]) {
2434 for (ix = 1; enterops[ix]; ix++) {
2435 PL_op = enterops[ix];
2436 /* Eventually we may want to stack the needed arguments
2437 * for each op. For now, we punt on the hard ones. */
2438 if (PL_op->op_type == OP_ENTERITER)
2439 DIE(aTHX_ "Can't \"goto\" into the middle of a foreach loop");
2440 CALL_FPTR(PL_op->op_ppaddr)(aTHX);
2448 if (!retop) retop = PL_main_start;
2450 PL_restartop = retop;
2451 PL_do_undump = TRUE;
2455 PL_restartop = 0; /* hmm, must be GNU unexec().. */
2456 PL_do_undump = FALSE;
2472 if (anum == 1 && (PL_op->op_private & OPpEXIT_VMSISH))
2476 PL_exit_flags |= PERL_EXIT_EXPECTED;
2478 PUSHs(&PL_sv_undef);
2486 NV value = SvNVx(GvSV(cCOP->cop_gv));
2487 register I32 match = I_32(value);
2490 if (((NV)match) > value)
2491 --match; /* was fractional--truncate other way */
2493 match -= cCOP->uop.scop.scop_offset;
2496 else if (match > cCOP->uop.scop.scop_max)
2497 match = cCOP->uop.scop.scop_max;
2498 PL_op = cCOP->uop.scop.scop_next[match];
2508 PL_op = PL_op->op_next; /* can't assume anything */
2511 match = *(SvPVx(GvSV(cCOP->cop_gv), n_a)) & 255;
2512 match -= cCOP->uop.scop.scop_offset;
2515 else if (match > cCOP->uop.scop.scop_max)
2516 match = cCOP->uop.scop.scop_max;
2517 PL_op = cCOP->uop.scop.scop_next[match];
2526 S_save_lines(pTHX_ AV *array, SV *sv)
2528 register char *s = SvPVX(sv);
2529 register char *send = SvPVX(sv) + SvCUR(sv);
2531 register I32 line = 1;
2533 while (s && s < send) {
2534 SV *tmpstr = NEWSV(85,0);
2536 sv_upgrade(tmpstr, SVt_PVMG);
2537 t = strchr(s, '\n');
2543 sv_setpvn(tmpstr, s, t - s);
2544 av_store(array, line++, tmpstr);
2549 #ifdef PERL_FLEXIBLE_EXCEPTIONS
2551 S_docatch_body(pTHX_ va_list args)
2553 return docatch_body();
2558 S_docatch_body(pTHX)
2564 /* In Unicos 10.0.0.6 (T90) the cc seems to botch optimization so that
2565 * if cursi is an auto variable inside S_docatch() cursi doesn't get
2566 * properly saved/restored across longjmps. &/
2567 #ifdef UNICOS_BROKEN_VOLATILE
2568 volatile PERL_SI *cursi;
2572 S_docatch(pTHX_ OP *o)
2577 #ifdef UNICOS_BROKEN_VOLATILE
2579 cursi = PL_curstackinfo;
2581 volatile PERL_SI *cursi = PL_curstackinfo;
2586 assert(CATCH_GET == TRUE);
2589 #ifdef PERL_FLEXIBLE_EXCEPTIONS
2591 CALLPROTECT(aTHX_ pcur_env, &ret, MEMBER_TO_FPTR(S_docatch_body));
2597 #ifndef PERL_FLEXIBLE_EXCEPTIONS
2603 if (PL_restartop && cursi == PL_curstackinfo) {
2604 PL_op = PL_restartop;
2621 Perl_sv_compile_2op(pTHX_ SV *sv, OP** startop, char *code, AV** avp)
2622 /* sv Text to convert to OP tree. */
2623 /* startop op_free() this to undo. */
2624 /* code Short string id of the caller. */
2626 dSP; /* Make POPBLOCK work. */
2629 I32 gimme = 0; /* SUSPECT - INITIALZE TO WHAT? NI-S */
2633 char tbuf[TYPE_DIGITS(long) + 12 + 10];
2634 char *tmpbuf = tbuf;
2640 /* switch to eval mode */
2642 if (PL_curcop == &PL_compiling) {
2643 SAVECOPSTASH(&PL_compiling);
2644 CopSTASH_set(&PL_compiling, PL_curstash);
2646 SAVECOPFILE(&PL_compiling);
2647 SAVECOPLINE(&PL_compiling);
2648 if (PERLDB_NAMEEVAL && CopLINE(PL_curcop)) {
2649 SV *sv = sv_newmortal();
2650 Perl_sv_setpvf(aTHX_ sv, "_<(%.10seval %lu)[%s:%"IVdf"]",
2651 code, (unsigned long)++PL_evalseq,
2652 CopFILE(PL_curcop), (IV)CopLINE(PL_curcop));
2656 sprintf(tmpbuf, "_<(%.10s_eval %lu)", code, (unsigned long)++PL_evalseq);
2657 CopFILE_set(&PL_compiling, tmpbuf+2);
2658 CopLINE_set(&PL_compiling, 1);
2659 /* XXX For C<eval "...">s within BEGIN {} blocks, this ends up
2660 deleting the eval's FILEGV from the stash before gv_check() runs
2661 (i.e. before run-time proper). To work around the coredump that
2662 ensues, we always turn GvMULTI_on for any globals that were
2663 introduced within evals. See force_ident(). GSAR 96-10-12 */
2664 safestr = savepv(tmpbuf);
2665 SAVEDELETE(PL_defstash, safestr, strlen(safestr));
2667 #ifdef OP_IN_REGISTER
2675 PL_op->op_type = OP_ENTEREVAL;
2676 PL_op->op_flags = 0; /* Avoid uninit warning. */
2677 PUSHBLOCK(cx, CXt_EVAL, SP);
2678 PUSHEVAL(cx, 0, Nullgv);
2679 rop = doeval(G_SCALAR, startop);
2680 POPBLOCK(cx,PL_curpm);
2683 (*startop)->op_type = OP_NULL;
2684 (*startop)->op_ppaddr = PL_ppaddr[OP_NULL];
2686 *avp = (AV*)SvREFCNT_inc(PL_comppad);
2688 if (PL_curcop == &PL_compiling)
2689 PL_compiling.op_private = PL_hints;
2690 #ifdef OP_IN_REGISTER
2696 /* With USE_THREADS, eval_owner must be held on entry to doeval */
2698 S_doeval(pTHX_ int gimme, OP** startop)
2706 PL_in_eval = EVAL_INEVAL;
2710 /* set up a scratch pad */
2713 SAVEVPTR(PL_curpad);
2714 SAVESPTR(PL_comppad);
2715 SAVESPTR(PL_comppad_name);
2716 SAVEI32(PL_comppad_name_fill);
2717 SAVEI32(PL_min_intro_pending);
2718 SAVEI32(PL_max_intro_pending);
2721 for (i = cxstack_ix - 1; i >= 0; i--) {
2722 PERL_CONTEXT *cx = &cxstack[i];
2723 if (CxTYPE(cx) == CXt_EVAL)
2725 else if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
2726 caller = cx->blk_sub.cv;
2731 SAVESPTR(PL_compcv);
2732 PL_compcv = (CV*)NEWSV(1104,0);
2733 sv_upgrade((SV *)PL_compcv, SVt_PVCV);
2734 CvEVAL_on(PL_compcv);
2736 CvOWNER(PL_compcv) = 0;
2737 New(666, CvMUTEXP(PL_compcv), 1, perl_mutex);
2738 MUTEX_INIT(CvMUTEXP(PL_compcv));
2739 #endif /* USE_THREADS */
2741 PL_comppad = newAV();
2742 av_push(PL_comppad, Nullsv);
2743 PL_curpad = AvARRAY(PL_comppad);
2744 PL_comppad_name = newAV();
2745 PL_comppad_name_fill = 0;
2746 PL_min_intro_pending = 0;
2749 av_store(PL_comppad_name, 0, newSVpvn("@_", 2));
2750 PL_curpad[0] = (SV*)newAV();
2751 SvPADMY_on(PL_curpad[0]); /* XXX Needed? */
2752 #endif /* USE_THREADS */
2754 comppadlist = newAV();
2755 AvREAL_off(comppadlist);
2756 av_store(comppadlist, 0, (SV*)PL_comppad_name);
2757 av_store(comppadlist, 1, (SV*)PL_comppad);
2758 CvPADLIST(PL_compcv) = comppadlist;
2761 (saveop->op_type != OP_REQUIRE && saveop->op_type != OP_DOFILE))
2763 CvOUTSIDE(PL_compcv) = (CV*)SvREFCNT_inc(caller);
2766 SAVEFREESV(PL_compcv);
2768 /* make sure we compile in the right package */
2770 if (CopSTASH_ne(PL_curcop, PL_curstash)) {
2771 SAVESPTR(PL_curstash);
2772 PL_curstash = CopSTASH(PL_curcop);
2774 SAVESPTR(PL_beginav);
2775 PL_beginav = newAV();
2776 SAVEFREESV(PL_beginav);
2778 /* try to compile it */
2780 PL_eval_root = Nullop;
2782 PL_curcop = &PL_compiling;
2783 PL_curcop->cop_arybase = 0;
2784 SvREFCNT_dec(PL_rs);
2785 PL_rs = newSVpvn("\n", 1);
2786 if (saveop && saveop->op_flags & OPf_SPECIAL)
2787 PL_in_eval |= EVAL_KEEPERR;
2790 if (yyparse() || PL_error_count || !PL_eval_root) {
2794 I32 optype = 0; /* Might be reset by POPEVAL. */
2799 op_free(PL_eval_root);
2800 PL_eval_root = Nullop;
2802 SP = PL_stack_base + POPMARK; /* pop original mark */
2804 POPBLOCK(cx,PL_curpm);
2810 if (optype == OP_REQUIRE) {
2811 char* msg = SvPVx(ERRSV, n_a);
2812 DIE(aTHX_ "%sCompilation failed in require",
2813 *msg ? msg : "Unknown error\n");
2816 char* msg = SvPVx(ERRSV, n_a);
2818 POPBLOCK(cx,PL_curpm);
2820 Perl_croak(aTHX_ "%sCompilation failed in regexp",
2821 (*msg ? msg : "Unknown error\n"));
2823 SvREFCNT_dec(PL_rs);
2824 PL_rs = SvREFCNT_inc(PL_nrs);
2826 MUTEX_LOCK(&PL_eval_mutex);
2828 COND_SIGNAL(&PL_eval_cond);
2829 MUTEX_UNLOCK(&PL_eval_mutex);
2830 #endif /* USE_THREADS */
2833 SvREFCNT_dec(PL_rs);
2834 PL_rs = SvREFCNT_inc(PL_nrs);
2835 CopLINE_set(&PL_compiling, 0);
2837 *startop = PL_eval_root;
2838 SvREFCNT_dec(CvOUTSIDE(PL_compcv));
2839 CvOUTSIDE(PL_compcv) = Nullcv;
2841 SAVEFREEOP(PL_eval_root);
2843 scalarvoid(PL_eval_root);
2844 else if (gimme & G_ARRAY)
2847 scalar(PL_eval_root);
2849 DEBUG_x(dump_eval());
2851 /* Register with debugger: */
2852 if (PERLDB_INTER && saveop->op_type == OP_REQUIRE) {
2853 CV *cv = get_cv("DB::postponed", FALSE);
2857 XPUSHs((SV*)CopFILEGV(&PL_compiling));
2859 call_sv((SV*)cv, G_DISCARD);
2863 /* compiled okay, so do it */
2865 CvDEPTH(PL_compcv) = 1;
2866 SP = PL_stack_base + POPMARK; /* pop original mark */
2867 PL_op = saveop; /* The caller may need it. */
2869 MUTEX_LOCK(&PL_eval_mutex);
2871 COND_SIGNAL(&PL_eval_cond);
2872 MUTEX_UNLOCK(&PL_eval_mutex);
2873 #endif /* USE_THREADS */
2875 RETURNOP(PL_eval_start);
2879 S_doopen_pmc(pTHX_ const char *name, const char *mode)
2881 STRLEN namelen = strlen(name);
2884 if (namelen > 3 && strEQ(name + namelen - 3, ".pm")) {
2885 SV *pmcsv = Perl_newSVpvf(aTHX_ "%s%c", name, 'c');
2886 char *pmc = SvPV_nolen(pmcsv);
2889 if (PerlLIO_stat(pmc, &pmcstat) < 0) {
2890 fp = PerlIO_open(name, mode);
2893 if (PerlLIO_stat(name, &pmstat) < 0 ||
2894 pmstat.st_mtime < pmcstat.st_mtime)
2896 fp = PerlIO_open(pmc, mode);
2899 fp = PerlIO_open(name, mode);
2902 SvREFCNT_dec(pmcsv);
2905 fp = PerlIO_open(name, mode);
2913 register PERL_CONTEXT *cx;
2918 SV *namesv = Nullsv;
2920 I32 gimme = G_SCALAR;
2921 PerlIO *tryrsfp = 0;
2923 int filter_has_file = 0;
2924 GV *filter_child_proc = 0;
2925 SV *filter_state = 0;
2930 if (SvPOK(sv) && SvNOK(sv)) { /* require v5.6.1 */
2931 UV rev = 0, ver = 0, sver = 0;
2933 U8 *s = (U8*)SvPVX(sv);
2934 U8 *end = (U8*)SvPVX(sv) + SvCUR(sv);
2936 rev = utf8_to_uv(s, &len);
2939 ver = utf8_to_uv(s, &len);
2942 sver = utf8_to_uv(s, &len);
2945 if (PERL_REVISION < rev
2946 || (PERL_REVISION == rev
2947 && (PERL_VERSION < ver
2948 || (PERL_VERSION == ver
2949 && PERL_SUBVERSION < sver))))
2951 DIE(aTHX_ "Perl v%"UVuf".%"UVuf".%"UVuf" required--this is only "
2952 "v%d.%d.%d, stopped", rev, ver, sver, PERL_REVISION,
2953 PERL_VERSION, PERL_SUBVERSION);
2957 else if (!SvPOKp(sv)) { /* require 5.005_03 */
2958 if ((NV)PERL_REVISION + ((NV)PERL_VERSION/(NV)1000)
2959 + ((NV)PERL_SUBVERSION/(NV)1000000)
2960 + 0.00000099 < SvNV(sv))
2964 NV nver = (nrev - rev) * 1000;
2965 UV ver = (UV)(nver + 0.0009);
2966 NV nsver = (nver - ver) * 1000;
2967 UV sver = (UV)(nsver + 0.0009);
2969 /* help out with the "use 5.6" confusion */
2970 if (sver == 0 && (rev > 5 || (rev == 5 && ver >= 100))) {
2971 DIE(aTHX_ "Perl v%"UVuf".%"UVuf".%"UVuf" required--"
2972 "this is only v%d.%d.%d, stopped"
2973 " (did you mean v%"UVuf".%"UVuf".0?)",
2974 rev, ver, sver, PERL_REVISION, PERL_VERSION,
2975 PERL_SUBVERSION, rev, ver/100);
2978 DIE(aTHX_ "Perl v%"UVuf".%"UVuf".%"UVuf" required--"
2979 "this is only v%d.%d.%d, stopped",
2980 rev, ver, sver, PERL_REVISION, PERL_VERSION,
2987 name = SvPV(sv, len);
2988 if (!(name && len > 0 && *name))
2989 DIE(aTHX_ "Null filename used");
2990 TAINT_PROPER("require");
2991 if (PL_op->op_type == OP_REQUIRE &&
2992 (svp = hv_fetch(GvHVn(PL_incgv), name, len, 0)) &&
2993 *svp != &PL_sv_undef)
2996 /* prepare to compile file */
2998 if (PERL_FILE_IS_ABSOLUTE(name)
2999 || (*name == '.' && (name[1] == '/' ||
3000 (name[1] == '.' && name[2] == '/'))))
3003 tryrsfp = doopen_pmc(name,PERL_SCRIPT_MODE);
3006 AV *ar = GvAVn(PL_incgv);
3010 if ((unixname = tounixspec(name, Nullch)) != Nullch)
3013 namesv = NEWSV(806, 0);
3014 for (i = 0; i <= AvFILL(ar); i++) {
3015 SV *dirsv = *av_fetch(ar, i, TRUE);
3021 if (SvTYPE(SvRV(loader)) == SVt_PVAV) {
3022 loader = *av_fetch((AV *)SvRV(loader), 0, TRUE);
3025 Perl_sv_setpvf(aTHX_ namesv, "/loader/0x%"UVxf"/%s",
3026 PTR2UV(SvANY(loader)), name);
3027 tryname = SvPVX(namesv);
3038 count = call_sv(loader, G_ARRAY);
3048 if (SvROK(arg) && SvTYPE(SvRV(arg)) == SVt_PVGV) {
3052 if (SvTYPE(arg) == SVt_PVGV) {
3053 IO *io = GvIO((GV *)arg);
3058 tryrsfp = IoIFP(io);
3059 if (IoTYPE(io) == '|') {
3060 /* reading from a child process doesn't
3061 nest -- when returning from reading
3062 the inner module, the outer one is
3063 unreadable (closed?) I've tried to
3064 save the gv to manage the lifespan of
3065 the pipe, but this didn't help. XXX */
3066 filter_child_proc = (GV *)arg;
3067 (void)SvREFCNT_inc(filter_child_proc);
3070 if (IoOFP(io) && IoOFP(io) != IoIFP(io)) {
3071 PerlIO_close(IoOFP(io));
3083 if (SvROK(arg) && SvTYPE(SvRV(arg)) == SVt_PVCV) {
3085 (void)SvREFCNT_inc(filter_sub);
3088 filter_state = SP[i];
3089 (void)SvREFCNT_inc(filter_state);
3093 tryrsfp = PerlIO_open("/dev/null",
3107 filter_has_file = 0;
3108 if (filter_child_proc) {
3109 SvREFCNT_dec(filter_child_proc);
3110 filter_child_proc = 0;
3113 SvREFCNT_dec(filter_state);
3117 SvREFCNT_dec(filter_sub);
3122 char *dir = SvPVx(dirsv, n_a);
3125 if ((unixdir = tounixpath(dir, Nullch)) == Nullch)
3127 sv_setpv(namesv, unixdir);
3128 sv_catpv(namesv, unixname);
3130 Perl_sv_setpvf(aTHX_ namesv, "%s/%s", dir, name);
3132 TAINT_PROPER("require");
3133 tryname = SvPVX(namesv);
3134 tryrsfp = doopen_pmc(tryname, PERL_SCRIPT_MODE);
3136 if (tryname[0] == '.' && tryname[1] == '/')
3144 SAVECOPFILE(&PL_compiling);
3145 CopFILE_set(&PL_compiling, tryrsfp ? tryname : name);
3146 SvREFCNT_dec(namesv);
3148 if (PL_op->op_type == OP_REQUIRE) {
3149 char *msgstr = name;
3150 if (namesv) { /* did we lookup @INC? */
3151 SV *msg = sv_2mortal(newSVpv(msgstr,0));
3152 SV *dirmsgsv = NEWSV(0, 0);
3153 AV *ar = GvAVn(PL_incgv);
3155 sv_catpvn(msg, " in @INC", 8);
3156 if (instr(SvPVX(msg), ".h "))
3157 sv_catpv(msg, " (change .h to .ph maybe?)");
3158 if (instr(SvPVX(msg), ".ph "))
3159 sv_catpv(msg, " (did you run h2ph?)");
3160 sv_catpv(msg, " (@INC contains:");
3161 for (i = 0; i <= AvFILL(ar); i++) {
3162 char *dir = SvPVx(*av_fetch(ar, i, TRUE), n_a);
3163 Perl_sv_setpvf(aTHX_ dirmsgsv, " %s", dir);
3164 sv_catsv(msg, dirmsgsv);
3166 sv_catpvn(msg, ")", 1);
3167 SvREFCNT_dec(dirmsgsv);
3168 msgstr = SvPV_nolen(msg);
3170 DIE(aTHX_ "Can't locate %s", msgstr);
3176 SETERRNO(0, SS$_NORMAL);
3178 /* Assume success here to prevent recursive requirement. */
3179 (void)hv_store(GvHVn(PL_incgv), name, strlen(name),
3180 newSVpv(CopFILE(&PL_compiling), 0), 0 );
3184 lex_start(sv_2mortal(newSVpvn("",0)));
3185 SAVEGENERICSV(PL_rsfp_filters);
3186 PL_rsfp_filters = Nullav;
3191 SAVESPTR(PL_compiling.cop_warnings);
3192 if (PL_dowarn & G_WARN_ALL_ON)
3193 PL_compiling.cop_warnings = pWARN_ALL ;
3194 else if (PL_dowarn & G_WARN_ALL_OFF)
3195 PL_compiling.cop_warnings = pWARN_NONE ;
3197 PL_compiling.cop_warnings = pWARN_STD ;
3199 if (filter_sub || filter_child_proc) {
3200 SV *datasv = filter_add(run_user_filter, Nullsv);
3201 IoLINES(datasv) = filter_has_file;
3202 IoFMT_GV(datasv) = (GV *)filter_child_proc;
3203 IoTOP_GV(datasv) = (GV *)filter_state;
3204 IoBOTTOM_GV(datasv) = (GV *)filter_sub;
3207 /* switch to eval mode */
3208 push_return(PL_op->op_next);
3209 PUSHBLOCK(cx, CXt_EVAL, SP);
3210 PUSHEVAL(cx, name, Nullgv);
3212 SAVECOPLINE(&PL_compiling);
3213 CopLINE_set(&PL_compiling, 0);
3217 MUTEX_LOCK(&PL_eval_mutex);
3218 if (PL_eval_owner && PL_eval_owner != thr)
3219 while (PL_eval_owner)
3220 COND_WAIT(&PL_eval_cond, &PL_eval_mutex);
3221 PL_eval_owner = thr;
3222 MUTEX_UNLOCK(&PL_eval_mutex);
3223 #endif /* USE_THREADS */
3224 return DOCATCH(doeval(G_SCALAR, NULL));
3229 return pp_require();
3235 register PERL_CONTEXT *cx;
3237 I32 gimme = GIMME_V, was = PL_sub_generation;
3238 char tbuf[TYPE_DIGITS(long) + 12];
3239 char *tmpbuf = tbuf;
3244 if (!SvPV(sv,len) || !len)
3246 TAINT_PROPER("eval");
3252 /* switch to eval mode */
3254 SAVECOPFILE(&PL_compiling);
3255 if (PERLDB_NAMEEVAL && CopLINE(PL_curcop)) {
3256 SV *sv = sv_newmortal();
3257 Perl_sv_setpvf(aTHX_ sv, "_<(eval %lu)[%s:%"IVdf"]",
3258 (unsigned long)++PL_evalseq,
3259 CopFILE(PL_curcop), (IV)CopLINE(PL_curcop));
3263 sprintf(tmpbuf, "_<(eval %lu)", (unsigned long)++PL_evalseq);
3264 CopFILE_set(&PL_compiling, tmpbuf+2);
3265 CopLINE_set(&PL_compiling, 1);
3266 /* XXX For C<eval "...">s within BEGIN {} blocks, this ends up
3267 deleting the eval's FILEGV from the stash before gv_check() runs
3268 (i.e. before run-time proper). To work around the coredump that
3269 ensues, we always turn GvMULTI_on for any globals that were
3270 introduced within evals. See force_ident(). GSAR 96-10-12 */
3271 safestr = savepv(tmpbuf);
3272 SAVEDELETE(PL_defstash, safestr, strlen(safestr));
3274 PL_hints = PL_op->op_targ;
3275 SAVESPTR(PL_compiling.cop_warnings);
3276 if (specialWARN(PL_curcop->cop_warnings))
3277 PL_compiling.cop_warnings = PL_curcop->cop_warnings;
3279 PL_compiling.cop_warnings = newSVsv(PL_curcop->cop_warnings);
3280 SAVEFREESV(PL_compiling.cop_warnings);
3283 push_return(PL_op->op_next);
3284 PUSHBLOCK(cx, (CXt_EVAL|CXp_REAL), SP);
3285 PUSHEVAL(cx, 0, Nullgv);
3287 /* prepare to compile string */
3289 if (PERLDB_LINE && PL_curstash != PL_debstash)
3290 save_lines(CopFILEAV(&PL_compiling), PL_linestr);
3293 MUTEX_LOCK(&PL_eval_mutex);
3294 if (PL_eval_owner && PL_eval_owner != thr)
3295 while (PL_eval_owner)
3296 COND_WAIT(&PL_eval_cond, &PL_eval_mutex);
3297 PL_eval_owner = thr;
3298 MUTEX_UNLOCK(&PL_eval_mutex);
3299 #endif /* USE_THREADS */
3300 ret = doeval(gimme, NULL);
3301 if (PERLDB_INTER && was != PL_sub_generation /* Some subs defined here. */
3302 && ret != PL_op->op_next) { /* Successive compilation. */
3303 strcpy(safestr, "_<(eval )"); /* Anything fake and short. */
3305 return DOCATCH(ret);
3315 register PERL_CONTEXT *cx;
3317 U8 save_flags = PL_op -> op_flags;
3322 retop = pop_return();
3325 if (gimme == G_VOID)
3327 else if (gimme == G_SCALAR) {
3330 if (SvFLAGS(TOPs) & SVs_TEMP)
3333 *MARK = sv_mortalcopy(TOPs);
3337 *MARK = &PL_sv_undef;
3342 /* in case LEAVE wipes old return values */
3343 for (mark = newsp + 1; mark <= SP; mark++) {
3344 if (!(SvFLAGS(*mark) & SVs_TEMP)) {
3345 *mark = sv_mortalcopy(*mark);
3346 TAINT_NOT; /* Each item is independent */
3350 PL_curpm = newpm; /* Don't pop $1 et al till now */
3352 if (AvFILLp(PL_comppad_name) >= 0)
3356 assert(CvDEPTH(PL_compcv) == 1);
3358 CvDEPTH(PL_compcv) = 0;
3361 if (optype == OP_REQUIRE &&
3362 !(gimme == G_SCALAR ? SvTRUE(*SP) : SP > newsp))
3364 /* Unassume the success we assumed earlier. */
3365 SV *nsv = cx->blk_eval.old_namesv;
3366 (void)hv_delete(GvHVn(PL_incgv), SvPVX(nsv), SvCUR(nsv), G_DISCARD);
3367 retop = Perl_die(aTHX_ "%s did not return a true value", SvPVX(nsv));
3368 /* die_where() did LEAVE, or we won't be here */
3372 if (!(save_flags & OPf_SPECIAL))
3382 register PERL_CONTEXT *cx;
3383 I32 gimme = GIMME_V;
3388 push_return(cLOGOP->op_other->op_next);
3389 PUSHBLOCK(cx, (CXt_EVAL|CXp_TRYBLOCK), SP);
3391 PL_eval_root = PL_op; /* Only needed so that goto works right. */
3393 PL_in_eval = EVAL_INEVAL;
3396 return DOCATCH(PL_op->op_next);
3406 register PERL_CONTEXT *cx;
3414 if (gimme == G_VOID)
3416 else if (gimme == G_SCALAR) {
3419 if (SvFLAGS(TOPs) & (SVs_PADTMP|SVs_TEMP))
3422 *MARK = sv_mortalcopy(TOPs);
3426 *MARK = &PL_sv_undef;
3431 /* in case LEAVE wipes old return values */
3432 for (mark = newsp + 1; mark <= SP; mark++) {
3433 if (!(SvFLAGS(*mark) & (SVs_PADTMP|SVs_TEMP))) {
3434 *mark = sv_mortalcopy(*mark);
3435 TAINT_NOT; /* Each item is independent */
3439 PL_curpm = newpm; /* Don't pop $1 et al till now */
3447 S_doparseform(pTHX_ SV *sv)
3450 register char *s = SvPV_force(sv, len);
3451 register char *send = s + len;
3452 register char *base;
3453 register I32 skipspaces = 0;
3456 bool postspace = FALSE;
3464 Perl_croak(aTHX_ "Null picture in formline");
3466 New(804, fops, (send - s)*3+10, U16); /* Almost certainly too long... */
3471 *fpc++ = FF_LINEMARK;
3472 noblank = repeat = FALSE;
3490 case ' ': case '\t':
3501 *fpc++ = FF_LITERAL;
3509 *fpc++ = skipspaces;
3513 *fpc++ = FF_NEWLINE;
3517 arg = fpc - linepc + 1;
3524 *fpc++ = FF_LINEMARK;
3525 noblank = repeat = FALSE;
3534 ischop = s[-1] == '^';
3540 arg = (s - base) - 1;
3542 *fpc++ = FF_LITERAL;
3551 *fpc++ = FF_LINEGLOB;
3553 else if (*s == '#' || (*s == '.' && s[1] == '#')) {
3554 arg = ischop ? 512 : 0;
3564 arg |= 256 + (s - f);
3566 *fpc++ = s - base; /* fieldsize for FETCH */
3567 *fpc++ = FF_DECIMAL;
3572 bool ismore = FALSE;
3575 while (*++s == '>') ;
3576 prespace = FF_SPACE;
3578 else if (*s == '|') {
3579 while (*++s == '|') ;
3580 prespace = FF_HALFSPACE;
3585 while (*++s == '<') ;
3588 if (*s == '.' && s[1] == '.' && s[2] == '.') {
3592 *fpc++ = s - base; /* fieldsize for FETCH */
3594 *fpc++ = ischop ? FF_CHECKCHOP : FF_CHECKNL;
3612 { /* need to jump to the next word */
3614 z = WORD_ALIGN - SvCUR(sv) % WORD_ALIGN;
3615 SvGROW(sv, SvCUR(sv) + z + arg * sizeof(U16) + 4);
3616 s = SvPVX(sv) + SvCUR(sv) + z;
3618 Copy(fops, s, arg, U16);
3620 sv_magic(sv, Nullsv, 'f', Nullch, 0);
3625 * The rest of this file was derived from source code contributed
3628 * NOTE: this code was derived from Tom Horsley's qsort replacement
3629 * and should not be confused with the original code.
3632 /* Copyright (C) Tom Horsley, 1997. All rights reserved.
3634 Permission granted to distribute under the same terms as perl which are
3637 This program is free software; you can redistribute it and/or modify
3638 it under the terms of either:
3640 a) the GNU General Public License as published by the Free
3641 Software Foundation; either version 1, or (at your option) any
3644 b) the "Artistic License" which comes with this Kit.
3646 Details on the perl license can be found in the perl source code which
3647 may be located via the www.perl.com web page.
3649 This is the most wonderfulest possible qsort I can come up with (and
3650 still be mostly portable) My (limited) tests indicate it consistently
3651 does about 20% fewer calls to compare than does the qsort in the Visual
3652 C++ library, other vendors may vary.
3654 Some of the ideas in here can be found in "Algorithms" by Sedgewick,
3655 others I invented myself (or more likely re-invented since they seemed
3656 pretty obvious once I watched the algorithm operate for a while).
3658 Most of this code was written while watching the Marlins sweep the Giants
3659 in the 1997 National League Playoffs - no Braves fans allowed to use this
3660 code (just kidding :-).
3662 I realize that if I wanted to be true to the perl tradition, the only
3663 comment in this file would be something like:
3665 ...they shuffled back towards the rear of the line. 'No, not at the
3666 rear!' the slave-driver shouted. 'Three files up. And stay there...
3668 However, I really needed to violate that tradition just so I could keep
3669 track of what happens myself, not to mention some poor fool trying to
3670 understand this years from now :-).
3673 /* ********************************************************** Configuration */
3675 #ifndef QSORT_ORDER_GUESS
3676 #define QSORT_ORDER_GUESS 2 /* Select doubling version of the netBSD trick */
3679 /* QSORT_MAX_STACK is the largest number of partitions that can be stacked up for
3680 future processing - a good max upper bound is log base 2 of memory size
3681 (32 on 32 bit machines, 64 on 64 bit machines, etc). In reality can
3682 safely be smaller than that since the program is taking up some space and
3683 most operating systems only let you grab some subset of contiguous
3684 memory (not to mention that you are normally sorting data larger than
3685 1 byte element size :-).
3687 #ifndef QSORT_MAX_STACK
3688 #define QSORT_MAX_STACK 32
3691 /* QSORT_BREAK_EVEN is the size of the largest partition we should insertion sort.
3692 Anything bigger and we use qsort. If you make this too small, the qsort
3693 will probably break (or become less efficient), because it doesn't expect
3694 the middle element of a partition to be the same as the right or left -
3695 you have been warned).
3697 #ifndef QSORT_BREAK_EVEN
3698 #define QSORT_BREAK_EVEN 6
3701 /* ************************************************************* Data Types */
3703 /* hold left and right index values of a partition waiting to be sorted (the
3704 partition includes both left and right - right is NOT one past the end or
3705 anything like that).
3707 struct partition_stack_entry {
3710 #ifdef QSORT_ORDER_GUESS
3711 int qsort_break_even;
3715 /* ******************************************************* Shorthand Macros */
3717 /* Note that these macros will be used from inside the qsort function where
3718 we happen to know that the variable 'elt_size' contains the size of an
3719 array element and the variable 'temp' points to enough space to hold a
3720 temp element and the variable 'array' points to the array being sorted
3721 and 'compare' is the pointer to the compare routine.
3723 Also note that there are very many highly architecture specific ways
3724 these might be sped up, but this is simply the most generally portable
3725 code I could think of.
3728 /* Return < 0 == 0 or > 0 as the value of elt1 is < elt2, == elt2, > elt2
3730 #define qsort_cmp(elt1, elt2) \
3731 ((*compare)(aTHXo_ array[elt1], array[elt2]))
3733 #ifdef QSORT_ORDER_GUESS
3734 #define QSORT_NOTICE_SWAP swapped++;
3736 #define QSORT_NOTICE_SWAP
3739 /* swaps contents of array elements elt1, elt2.
3741 #define qsort_swap(elt1, elt2) \
3744 temp = array[elt1]; \
3745 array[elt1] = array[elt2]; \
3746 array[elt2] = temp; \
3749 /* rotate contents of elt1, elt2, elt3 such that elt1 gets elt2, elt2 gets
3750 elt3 and elt3 gets elt1.
3752 #define qsort_rotate(elt1, elt2, elt3) \
3755 temp = array[elt1]; \
3756 array[elt1] = array[elt2]; \
3757 array[elt2] = array[elt3]; \
3758 array[elt3] = temp; \
3761 /* ************************************************************ Debug stuff */
3768 return; /* good place to set a breakpoint */
3771 #define qsort_assert(t) (void)( (t) || (break_here(), 0) )
3774 doqsort_all_asserts(
3778 int (*compare)(const void * elt1, const void * elt2),
3779 int pc_left, int pc_right, int u_left, int u_right)
3783 qsort_assert(pc_left <= pc_right);
3784 qsort_assert(u_right < pc_left);
3785 qsort_assert(pc_right < u_left);
3786 for (i = u_right + 1; i < pc_left; ++i) {
3787 qsort_assert(qsort_cmp(i, pc_left) < 0);
3789 for (i = pc_left; i < pc_right; ++i) {
3790 qsort_assert(qsort_cmp(i, pc_right) == 0);
3792 for (i = pc_right + 1; i < u_left; ++i) {
3793 qsort_assert(qsort_cmp(pc_right, i) < 0);
3797 #define qsort_all_asserts(PC_LEFT, PC_RIGHT, U_LEFT, U_RIGHT) \
3798 doqsort_all_asserts(array, num_elts, elt_size, compare, \
3799 PC_LEFT, PC_RIGHT, U_LEFT, U_RIGHT)
3803 #define qsort_assert(t) ((void)0)
3805 #define qsort_all_asserts(PC_LEFT, PC_RIGHT, U_LEFT, U_RIGHT) ((void)0)
3809 /* ****************************************************************** qsort */
3812 S_qsortsv(pTHX_ SV ** array, size_t num_elts, SVCOMPARE_t compare)
3816 struct partition_stack_entry partition_stack[QSORT_MAX_STACK];
3817 int next_stack_entry = 0;
3821 #ifdef QSORT_ORDER_GUESS
3822 int qsort_break_even;
3826 /* Make sure we actually have work to do.
3828 if (num_elts <= 1) {
3832 /* Setup the initial partition definition and fall into the sorting loop
3835 part_right = (int)(num_elts - 1);
3836 #ifdef QSORT_ORDER_GUESS
3837 qsort_break_even = QSORT_BREAK_EVEN;
3839 #define qsort_break_even QSORT_BREAK_EVEN
3842 if ((part_right - part_left) >= qsort_break_even) {
3843 /* OK, this is gonna get hairy, so lets try to document all the
3844 concepts and abbreviations and variables and what they keep
3847 pc: pivot chunk - the set of array elements we accumulate in the
3848 middle of the partition, all equal in value to the original
3849 pivot element selected. The pc is defined by:
3851 pc_left - the leftmost array index of the pc
3852 pc_right - the rightmost array index of the pc
3854 we start with pc_left == pc_right and only one element
3855 in the pivot chunk (but it can grow during the scan).
3857 u: uncompared elements - the set of elements in the partition
3858 we have not yet compared to the pivot value. There are two
3859 uncompared sets during the scan - one to the left of the pc
3860 and one to the right.
3862 u_right - the rightmost index of the left side's uncompared set
3863 u_left - the leftmost index of the right side's uncompared set
3865 The leftmost index of the left sides's uncompared set
3866 doesn't need its own variable because it is always defined
3867 by the leftmost edge of the whole partition (part_left). The
3868 same goes for the rightmost edge of the right partition
3871 We know there are no uncompared elements on the left once we
3872 get u_right < part_left and no uncompared elements on the
3873 right once u_left > part_right. When both these conditions
3874 are met, we have completed the scan of the partition.
3876 Any elements which are between the pivot chunk and the
3877 uncompared elements should be less than the pivot value on
3878 the left side and greater than the pivot value on the right
3879 side (in fact, the goal of the whole algorithm is to arrange
3880 for that to be true and make the groups of less-than and
3881 greater-then elements into new partitions to sort again).
3883 As you marvel at the complexity of the code and wonder why it
3884 has to be so confusing. Consider some of the things this level
3885 of confusion brings:
3887 Once I do a compare, I squeeze every ounce of juice out of it. I
3888 never do compare calls I don't have to do, and I certainly never
3891 I also never swap any elements unless I can prove there is a
3892 good reason. Many sort algorithms will swap a known value with
3893 an uncompared value just to get things in the right place (or
3894 avoid complexity :-), but that uncompared value, once it gets
3895 compared, may then have to be swapped again. A lot of the
3896 complexity of this code is due to the fact that it never swaps
3897 anything except compared values, and it only swaps them when the
3898 compare shows they are out of position.
3900 int pc_left, pc_right;
3901 int u_right, u_left;
3905 pc_left = ((part_left + part_right) / 2);
3907 u_right = pc_left - 1;
3908 u_left = pc_right + 1;
3910 /* Qsort works best when the pivot value is also the median value
3911 in the partition (unfortunately you can't find the median value
3912 without first sorting :-), so to give the algorithm a helping
3913 hand, we pick 3 elements and sort them and use the median value
3914 of that tiny set as the pivot value.
3916 Some versions of qsort like to use the left middle and right as
3917 the 3 elements to sort so they can insure the ends of the
3918 partition will contain values which will stop the scan in the
3919 compare loop, but when you have to call an arbitrarily complex
3920 routine to do a compare, its really better to just keep track of
3921 array index values to know when you hit the edge of the
3922 partition and avoid the extra compare. An even better reason to
3923 avoid using a compare call is the fact that you can drop off the
3924 edge of the array if someone foolishly provides you with an
3925 unstable compare function that doesn't always provide consistent
3928 So, since it is simpler for us to compare the three adjacent
3929 elements in the middle of the partition, those are the ones we
3930 pick here (conveniently pointed at by u_right, pc_left, and
3931 u_left). The values of the left, center, and right elements
3932 are refered to as l c and r in the following comments.
3935 #ifdef QSORT_ORDER_GUESS
3938 s = qsort_cmp(u_right, pc_left);
3941 s = qsort_cmp(pc_left, u_left);
3942 /* if l < c, c < r - already in order - nothing to do */
3944 /* l < c, c == r - already in order, pc grows */
3946 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3948 /* l < c, c > r - need to know more */
3949 s = qsort_cmp(u_right, u_left);
3951 /* l < c, c > r, l < r - swap c & r to get ordered */
3952 qsort_swap(pc_left, u_left);
3953 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3954 } else if (s == 0) {
3955 /* l < c, c > r, l == r - swap c&r, grow pc */
3956 qsort_swap(pc_left, u_left);
3958 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3960 /* l < c, c > r, l > r - make lcr into rlc to get ordered */
3961 qsort_rotate(pc_left, u_right, u_left);
3962 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3965 } else if (s == 0) {
3967 s = qsort_cmp(pc_left, u_left);
3969 /* l == c, c < r - already in order, grow pc */
3971 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3972 } else if (s == 0) {
3973 /* l == c, c == r - already in order, grow pc both ways */
3976 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3978 /* l == c, c > r - swap l & r, grow pc */
3979 qsort_swap(u_right, u_left);
3981 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3985 s = qsort_cmp(pc_left, u_left);
3987 /* l > c, c < r - need to know more */
3988 s = qsort_cmp(u_right, u_left);
3990 /* l > c, c < r, l < r - swap l & c to get ordered */
3991 qsort_swap(u_right, pc_left);
3992 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3993 } else if (s == 0) {
3994 /* l > c, c < r, l == r - swap l & c, grow pc */
3995 qsort_swap(u_right, pc_left);
3997 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3999 /* l > c, c < r, l > r - rotate lcr into crl to order */
4000 qsort_rotate(u_right, pc_left, u_left);
4001 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
4003 } else if (s == 0) {
4004 /* l > c, c == r - swap ends, grow pc */
4005 qsort_swap(u_right, u_left);
4007 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
4009 /* l > c, c > r - swap ends to get in order */
4010 qsort_swap(u_right, u_left);
4011 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
4014 /* We now know the 3 middle elements have been compared and
4015 arranged in the desired order, so we can shrink the uncompared
4020 qsort_all_asserts(pc_left, pc_right, u_left, u_right);
4022 /* The above massive nested if was the simple part :-). We now have
4023 the middle 3 elements ordered and we need to scan through the
4024 uncompared sets on either side, swapping elements that are on
4025 the wrong side or simply shuffling equal elements around to get
4026 all equal elements into the pivot chunk.
4030 int still_work_on_left;
4031 int still_work_on_right;
4033 /* Scan the uncompared values on the left. If I find a value
4034 equal to the pivot value, move it over so it is adjacent to
4035 the pivot chunk and expand the pivot chunk. If I find a value
4036 less than the pivot value, then just leave it - its already
4037 on the correct side of the partition. If I find a greater
4038 value, then stop the scan.
4040 while ((still_work_on_left = (u_right >= part_left))) {
4041 s = qsort_cmp(u_right, pc_left);
4044 } else if (s == 0) {
4046 if (pc_left != u_right) {
4047 qsort_swap(u_right, pc_left);
4053 qsort_assert(u_right < pc_left);
4054 qsort_assert(pc_left <= pc_right);
4055 qsort_assert(qsort_cmp(u_right + 1, pc_left) <= 0);
4056 qsort_assert(qsort_cmp(pc_left, pc_right) == 0);
4059 /* Do a mirror image scan of uncompared values on the right
4061 while ((still_work_on_right = (u_left <= part_right))) {
4062 s = qsort_cmp(pc_right, u_left);
4065 } else if (s == 0) {
4067 if (pc_right != u_left) {
4068 qsort_swap(pc_right, u_left);
4074 qsort_assert(u_left > pc_right);
4075 qsort_assert(pc_left <= pc_right);
4076 qsort_assert(qsort_cmp(pc_right, u_left - 1) <= 0);
4077 qsort_assert(qsort_cmp(pc_left, pc_right) == 0);
4080 if (still_work_on_left) {
4081 /* I know I have a value on the left side which needs to be
4082 on the right side, but I need to know more to decide
4083 exactly the best thing to do with it.
4085 if (still_work_on_right) {
4086 /* I know I have values on both side which are out of
4087 position. This is a big win because I kill two birds
4088 with one swap (so to speak). I can advance the
4089 uncompared pointers on both sides after swapping both
4090 of them into the right place.
4092 qsort_swap(u_right, u_left);
4095 qsort_all_asserts(pc_left, pc_right, u_left, u_right);
4097 /* I have an out of position value on the left, but the
4098 right is fully scanned, so I "slide" the pivot chunk
4099 and any less-than values left one to make room for the
4100 greater value over on the right. If the out of position
4101 value is immediately adjacent to the pivot chunk (there
4102 are no less-than values), I can do that with a swap,
4103 otherwise, I have to rotate one of the less than values
4104 into the former position of the out of position value
4105 and the right end of the pivot chunk into the left end
4109 if (pc_left == u_right) {
4110 qsort_swap(u_right, pc_right);
4111 qsort_all_asserts(pc_left, pc_right-1, u_left, u_right-1);
4113 qsort_rotate(u_right, pc_left, pc_right);
4114 qsort_all_asserts(pc_left, pc_right-1, u_left, u_right-1);
4119 } else if (still_work_on_right) {
4120 /* Mirror image of complex case above: I have an out of
4121 position value on the right, but the left is fully
4122 scanned, so I need to shuffle things around to make room
4123 for the right value on the left.
4126 if (pc_right == u_left) {
4127 qsort_swap(u_left, pc_left);
4128 qsort_all_asserts(pc_left+1, pc_right, u_left+1, u_right);
4130 qsort_rotate(pc_right, pc_left, u_left);
4131 qsort_all_asserts(pc_left+1, pc_right, u_left+1, u_right);
4136 /* No more scanning required on either side of partition,
4137 break out of loop and figure out next set of partitions
4143 /* The elements in the pivot chunk are now in the right place. They
4144 will never move or be compared again. All I have to do is decide
4145 what to do with the stuff to the left and right of the pivot
4148 Notes on the QSORT_ORDER_GUESS ifdef code:
4150 1. If I just built these partitions without swapping any (or
4151 very many) elements, there is a chance that the elements are
4152 already ordered properly (being properly ordered will
4153 certainly result in no swapping, but the converse can't be
4156 2. A (properly written) insertion sort will run faster on
4157 already ordered data than qsort will.
4159 3. Perhaps there is some way to make a good guess about
4160 switching to an insertion sort earlier than partition size 6
4161 (for instance - we could save the partition size on the stack
4162 and increase the size each time we find we didn't swap, thus
4163 switching to insertion sort earlier for partitions with a
4164 history of not swapping).
4166 4. Naturally, if I just switch right away, it will make
4167 artificial benchmarks with pure ascending (or descending)
4168 data look really good, but is that a good reason in general?
4172 #ifdef QSORT_ORDER_GUESS
4174 #if QSORT_ORDER_GUESS == 1
4175 qsort_break_even = (part_right - part_left) + 1;
4177 #if QSORT_ORDER_GUESS == 2
4178 qsort_break_even *= 2;
4180 #if QSORT_ORDER_GUESS == 3
4181 int prev_break = qsort_break_even;
4182 qsort_break_even *= qsort_break_even;
4183 if (qsort_break_even < prev_break) {
4184 qsort_break_even = (part_right - part_left) + 1;
4188 qsort_break_even = QSORT_BREAK_EVEN;
4192 if (part_left < pc_left) {
4193 /* There are elements on the left which need more processing.
4194 Check the right as well before deciding what to do.
4196 if (pc_right < part_right) {
4197 /* We have two partitions to be sorted. Stack the biggest one
4198 and process the smallest one on the next iteration. This
4199 minimizes the stack height by insuring that any additional
4200 stack entries must come from the smallest partition which
4201 (because it is smallest) will have the fewest
4202 opportunities to generate additional stack entries.
4204 if ((part_right - pc_right) > (pc_left - part_left)) {
4205 /* stack the right partition, process the left */
4206 partition_stack[next_stack_entry].left = pc_right + 1;
4207 partition_stack[next_stack_entry].right = part_right;
4208 #ifdef QSORT_ORDER_GUESS
4209 partition_stack[next_stack_entry].qsort_break_even = qsort_break_even;
4211 part_right = pc_left - 1;
4213 /* stack the left partition, process the right */
4214 partition_stack[next_stack_entry].left = part_left;
4215 partition_stack[next_stack_entry].right = pc_left - 1;
4216 #ifdef QSORT_ORDER_GUESS
4217 partition_stack[next_stack_entry].qsort_break_even = qsort_break_even;
4219 part_left = pc_right + 1;
4221 qsort_assert(next_stack_entry < QSORT_MAX_STACK);
4224 /* The elements on the left are the only remaining elements
4225 that need sorting, arrange for them to be processed as the
4228 part_right = pc_left - 1;
4230 } else if (pc_right < part_right) {
4231 /* There is only one chunk on the right to be sorted, make it
4232 the new partition and loop back around.
4234 part_left = pc_right + 1;
4236 /* This whole partition wound up in the pivot chunk, so
4237 we need to get a new partition off the stack.
4239 if (next_stack_entry == 0) {
4240 /* the stack is empty - we are done */
4244 part_left = partition_stack[next_stack_entry].left;
4245 part_right = partition_stack[next_stack_entry].right;
4246 #ifdef QSORT_ORDER_GUESS
4247 qsort_break_even = partition_stack[next_stack_entry].qsort_break_even;
4251 /* This partition is too small to fool with qsort complexity, just
4252 do an ordinary insertion sort to minimize overhead.
4255 /* Assume 1st element is in right place already, and start checking
4256 at 2nd element to see where it should be inserted.
4258 for (i = part_left + 1; i <= part_right; ++i) {
4260 /* Scan (backwards - just in case 'i' is already in right place)
4261 through the elements already sorted to see if the ith element
4262 belongs ahead of one of them.
4264 for (j = i - 1; j >= part_left; --j) {
4265 if (qsort_cmp(i, j) >= 0) {
4266 /* i belongs right after j
4273 /* Looks like we really need to move some things
4277 for (k = i - 1; k >= j; --k)
4278 array[k + 1] = array[k];
4283 /* That partition is now sorted, grab the next one, or get out
4284 of the loop if there aren't any more.
4287 if (next_stack_entry == 0) {
4288 /* the stack is empty - we are done */
4292 part_left = partition_stack[next_stack_entry].left;
4293 part_right = partition_stack[next_stack_entry].right;
4294 #ifdef QSORT_ORDER_GUESS
4295 qsort_break_even = partition_stack[next_stack_entry].qsort_break_even;
4300 /* Believe it or not, the array is sorted at this point! */
4312 sortcv(pTHXo_ SV *a, SV *b)
4315 I32 oldsaveix = PL_savestack_ix;
4316 I32 oldscopeix = PL_scopestack_ix;
4318 GvSV(PL_firstgv) = a;
4319 GvSV(PL_secondgv) = b;
4320 PL_stack_sp = PL_stack_base;
4323 if (PL_stack_sp != PL_stack_base + 1)
4324 Perl_croak(aTHX_ "Sort subroutine didn't return single value");
4325 if (!SvNIOKp(*PL_stack_sp))
4326 Perl_croak(aTHX_ "Sort subroutine didn't return a numeric value");
4327 result = SvIV(*PL_stack_sp);
4328 while (PL_scopestack_ix > oldscopeix) {
4331 leave_scope(oldsaveix);
4336 sortcv_stacked(pTHXo_ SV *a, SV *b)
4339 I32 oldsaveix = PL_savestack_ix;
4340 I32 oldscopeix = PL_scopestack_ix;
4345 av = (AV*)PL_curpad[0];
4347 av = GvAV(PL_defgv);
4350 if (AvMAX(av) < 1) {
4351 SV** ary = AvALLOC(av);
4352 if (AvARRAY(av) != ary) {
4353 AvMAX(av) += AvARRAY(av) - AvALLOC(av);
4354 SvPVX(av) = (char*)ary;
4356 if (AvMAX(av) < 1) {
4359 SvPVX(av) = (char*)ary;
4366 PL_stack_sp = PL_stack_base;
4369 if (PL_stack_sp != PL_stack_base + 1)
4370 Perl_croak(aTHX_ "Sort subroutine didn't return single value");
4371 if (!SvNIOKp(*PL_stack_sp))
4372 Perl_croak(aTHX_ "Sort subroutine didn't return a numeric value");
4373 result = SvIV(*PL_stack_sp);
4374 while (PL_scopestack_ix > oldscopeix) {
4377 leave_scope(oldsaveix);
4382 sortcv_xsub(pTHXo_ SV *a, SV *b)
4385 I32 oldsaveix = PL_savestack_ix;
4386 I32 oldscopeix = PL_scopestack_ix;
4388 CV *cv=(CV*)PL_sortcop;
4396 (void)(*CvXSUB(cv))(aTHXo_ cv);
4397 if (PL_stack_sp != PL_stack_base + 1)
4398 Perl_croak(aTHX_ "Sort subroutine didn't return single value");
4399 if (!SvNIOKp(*PL_stack_sp))
4400 Perl_croak(aTHX_ "Sort subroutine didn't return a numeric value");
4401 result = SvIV(*PL_stack_sp);
4402 while (PL_scopestack_ix > oldscopeix) {
4405 leave_scope(oldsaveix);
4411 sv_ncmp(pTHXo_ SV *a, SV *b)
4415 return nv1 < nv2 ? -1 : nv1 > nv2 ? 1 : 0;
4419 sv_i_ncmp(pTHXo_ SV *a, SV *b)
4423 return iv1 < iv2 ? -1 : iv1 > iv2 ? 1 : 0;
4425 #define tryCALL_AMAGICbin(left,right,meth,svp) STMT_START { \
4427 if (PL_amagic_generation) { \
4428 if (SvAMAGIC(left)||SvAMAGIC(right))\
4429 *svp = amagic_call(left, \
4437 amagic_ncmp(pTHXo_ register SV *a, register SV *b)
4440 tryCALL_AMAGICbin(a,b,ncmp,&tmpsv);
4445 I32 i = SvIVX(tmpsv);
4455 return sv_ncmp(aTHXo_ a, b);
4459 amagic_i_ncmp(pTHXo_ register SV *a, register SV *b)
4462 tryCALL_AMAGICbin(a,b,ncmp,&tmpsv);
4467 I32 i = SvIVX(tmpsv);
4477 return sv_i_ncmp(aTHXo_ a, b);
4481 amagic_cmp(pTHXo_ register SV *str1, register SV *str2)
4484 tryCALL_AMAGICbin(str1,str2,scmp,&tmpsv);
4489 I32 i = SvIVX(tmpsv);
4499 return sv_cmp(str1, str2);
4503 amagic_cmp_locale(pTHXo_ register SV *str1, register SV *str2)
4506 tryCALL_AMAGICbin(str1,str2,scmp,&tmpsv);
4511 I32 i = SvIVX(tmpsv);
4521 return sv_cmp_locale(str1, str2);
4525 run_user_filter(pTHXo_ int idx, SV *buf_sv, int maxlen)
4527 SV *datasv = FILTER_DATA(idx);
4528 int filter_has_file = IoLINES(datasv);
4529 GV *filter_child_proc = (GV *)IoFMT_GV(datasv);
4530 SV *filter_state = (SV *)IoTOP_GV(datasv);
4531 SV *filter_sub = (SV *)IoBOTTOM_GV(datasv);
4534 /* I was having segfault trouble under Linux 2.2.5 after a
4535 parse error occured. (Had to hack around it with a test
4536 for PL_error_count == 0.) Solaris doesn't segfault --
4537 not sure where the trouble is yet. XXX */
4539 if (filter_has_file) {
4540 len = FILTER_READ(idx+1, buf_sv, maxlen);
4543 if (filter_sub && len >= 0) {
4554 PUSHs(sv_2mortal(newSViv(maxlen)));
4556 PUSHs(filter_state);
4559 count = call_sv(filter_sub, G_SCALAR);
4575 IoLINES(datasv) = 0;
4576 if (filter_child_proc) {
4577 SvREFCNT_dec(filter_child_proc);
4578 IoFMT_GV(datasv) = Nullgv;
4581 SvREFCNT_dec(filter_state);
4582 IoTOP_GV(datasv) = Nullgv;
4585 SvREFCNT_dec(filter_sub);
4586 IoBOTTOM_GV(datasv) = Nullgv;
4588 filter_del(run_user_filter);
4597 sv_cmp_locale_static(pTHXo_ register SV *str1, register SV *str2)
4599 return sv_cmp_locale(str1, str2);
4603 sv_cmp_static(pTHXo_ register SV *str1, register SV *str2)
4605 return sv_cmp(str1, str2);
4608 #endif /* PERL_OBJECT */