3 * Copyright (c) 1991-1999, Larry Wall
5 * You may distribute under the terms of either the GNU General Public
6 * License or the Artistic License, as specified in the README file.
11 * Now far ahead the Road has gone,
12 * And I must follow, if I can,
13 * Pursuing it with eager feet,
14 * Until it joins some larger way
15 * Where many paths and errands meet.
16 * And whither then? I cannot say.
20 #define PERL_IN_PP_CTL_C
24 #define WORD_ALIGN sizeof(U16)
27 #define DOCATCH(o) ((CATCH_GET == TRUE) ? docatch(o) : (o))
29 static I32 sortcv(pTHXo_ SV *a, SV *b);
30 static I32 sortcv_stacked(pTHXo_ SV *a, SV *b);
31 static I32 sortcv_xsub(pTHXo_ SV *a, SV *b);
32 static I32 sv_ncmp(pTHXo_ SV *a, SV *b);
33 static I32 sv_i_ncmp(pTHXo_ SV *a, SV *b);
34 static I32 amagic_ncmp(pTHXo_ SV *a, SV *b);
35 static I32 amagic_i_ncmp(pTHXo_ SV *a, SV *b);
36 static I32 amagic_cmp(pTHXo_ SV *a, SV *b);
37 static I32 amagic_cmp_locale(pTHXo_ SV *a, SV *b);
38 static I32 run_user_filter(pTHXo_ int idx, SV *buf_sv, int maxlen);
41 static I32 sv_cmp_static(pTHXo_ SV *a, SV *b);
42 static I32 sv_cmp_locale_static(pTHXo_ SV *a, SV *b);
44 #define sv_cmp_static Perl_sv_cmp
45 #define sv_cmp_locale_static Perl_sv_cmp_locale
54 cxix = dopoptosub(cxstack_ix);
58 switch (cxstack[cxix].blk_gimme) {
75 /* XXXX Should store the old value to allow for tie/overload - and
76 restore in regcomp, where marked with XXXX. */
84 register PMOP *pm = (PMOP*)cLOGOP->op_other;
88 MAGIC *mg = Null(MAGIC*);
92 SV *sv = SvRV(tmpstr);
94 mg = mg_find(sv, 'r');
97 regexp *re = (regexp *)mg->mg_obj;
98 ReREFCNT_dec(pm->op_pmregexp);
99 pm->op_pmregexp = ReREFCNT_inc(re);
102 t = SvPV(tmpstr, len);
104 /* Check against the last compiled regexp. */
105 if (!pm->op_pmregexp || !pm->op_pmregexp->precomp ||
106 pm->op_pmregexp->prelen != len ||
107 memNE(pm->op_pmregexp->precomp, t, len))
109 if (pm->op_pmregexp) {
110 ReREFCNT_dec(pm->op_pmregexp);
111 pm->op_pmregexp = Null(REGEXP*); /* crucial if regcomp aborts */
113 if (PL_op->op_flags & OPf_SPECIAL)
114 PL_reginterp_cnt = I32_MAX; /* Mark as safe. */
116 pm->op_pmflags = pm->op_pmpermflags; /* reset case sensitivity */
117 pm->op_pmregexp = CALLREGCOMP(aTHX_ t, t + len, pm);
118 PL_reginterp_cnt = 0; /* XXXX Be extra paranoid - needed
119 inside tie/overload accessors. */
123 #ifndef INCOMPLETE_TAINTS
126 pm->op_pmdynflags |= PMdf_TAINTED;
128 pm->op_pmdynflags &= ~PMdf_TAINTED;
132 if (!pm->op_pmregexp->prelen && PL_curpm)
134 else if (strEQ("\\s+", pm->op_pmregexp->precomp))
135 pm->op_pmflags |= PMf_WHITE;
137 /* XXX runtime compiled output needs to move to the pad */
138 if (pm->op_pmflags & PMf_KEEP) {
139 pm->op_private &= ~OPpRUNTIME; /* no point compiling again */
140 #if !defined(USE_ITHREADS) && !defined(USE_THREADS)
141 /* XXX can't change the optree at runtime either */
142 cLOGOP->op_first->op_next = PL_op->op_next;
151 register PMOP *pm = (PMOP*) cLOGOP->op_other;
152 register PERL_CONTEXT *cx = &cxstack[cxstack_ix];
153 register SV *dstr = cx->sb_dstr;
154 register char *s = cx->sb_s;
155 register char *m = cx->sb_m;
156 char *orig = cx->sb_orig;
157 register REGEXP *rx = cx->sb_rx;
159 rxres_restore(&cx->sb_rxres, rx);
161 if (cx->sb_iters++) {
162 if (cx->sb_iters > cx->sb_maxiters)
163 DIE(aTHX_ "Substitution loop");
165 if (!(cx->sb_rxtainted & 2) && SvTAINTED(TOPs))
166 cx->sb_rxtainted |= 2;
167 sv_catsv(dstr, POPs);
170 if (cx->sb_once || !CALLREGEXEC(aTHX_ rx, s, cx->sb_strend, orig,
171 s == m, cx->sb_targ, NULL,
172 ((cx->sb_rflags & REXEC_COPY_STR)
173 ? (REXEC_IGNOREPOS|REXEC_NOT_FIRST)
174 : (REXEC_COPY_STR|REXEC_IGNOREPOS|REXEC_NOT_FIRST))))
176 SV *targ = cx->sb_targ;
177 sv_catpvn(dstr, s, cx->sb_strend - s);
179 cx->sb_rxtainted |= RX_MATCH_TAINTED(rx);
181 (void)SvOOK_off(targ);
182 Safefree(SvPVX(targ));
183 SvPVX(targ) = SvPVX(dstr);
184 SvCUR_set(targ, SvCUR(dstr));
185 SvLEN_set(targ, SvLEN(dstr));
189 TAINT_IF(cx->sb_rxtainted & 1);
190 PUSHs(sv_2mortal(newSViv((I32)cx->sb_iters - 1)));
192 (void)SvPOK_only(targ);
193 TAINT_IF(cx->sb_rxtainted);
197 LEAVE_SCOPE(cx->sb_oldsave);
199 RETURNOP(pm->op_next);
202 if (RX_MATCH_COPIED(rx) && rx->subbeg != orig) {
205 cx->sb_orig = orig = rx->subbeg;
207 cx->sb_strend = s + (cx->sb_strend - m);
209 cx->sb_m = m = rx->startp[0] + orig;
210 sv_catpvn(dstr, s, m-s);
211 cx->sb_s = rx->endp[0] + orig;
212 cx->sb_rxtainted |= RX_MATCH_TAINTED(rx);
213 rxres_save(&cx->sb_rxres, rx);
214 RETURNOP(pm->op_pmreplstart);
218 Perl_rxres_save(pTHX_ void **rsp, REGEXP *rx)
223 if (!p || p[1] < rx->nparens) {
224 i = 6 + rx->nparens * 2;
232 *p++ = PTR2UV(RX_MATCH_COPIED(rx) ? rx->subbeg : Nullch);
233 RX_MATCH_COPIED_off(rx);
237 *p++ = PTR2UV(rx->subbeg);
238 *p++ = (UV)rx->sublen;
239 for (i = 0; i <= rx->nparens; ++i) {
240 *p++ = (UV)rx->startp[i];
241 *p++ = (UV)rx->endp[i];
246 Perl_rxres_restore(pTHX_ void **rsp, REGEXP *rx)
251 if (RX_MATCH_COPIED(rx))
252 Safefree(rx->subbeg);
253 RX_MATCH_COPIED_set(rx, *p);
258 rx->subbeg = INT2PTR(char*,*p++);
259 rx->sublen = (I32)(*p++);
260 for (i = 0; i <= rx->nparens; ++i) {
261 rx->startp[i] = (I32)(*p++);
262 rx->endp[i] = (I32)(*p++);
267 Perl_rxres_free(pTHX_ void **rsp)
272 Safefree(INT2PTR(char*,*p));
280 djSP; dMARK; dORIGMARK;
281 register SV *tmpForm = *++MARK;
293 bool chopspace = (strchr(PL_chopset, ' ') != Nullch);
299 STRLEN fudge = SvCUR(tmpForm) * (IN_UTF8 ? 3 : 1) + 1;
301 if (!SvMAGICAL(tmpForm) || !SvCOMPILED(tmpForm)) {
302 SvREADONLY_off(tmpForm);
303 doparseform(tmpForm);
306 SvPV_force(PL_formtarget, len);
307 t = SvGROW(PL_formtarget, len + fudge + 1); /* XXX SvCUR bad */
309 f = SvPV(tmpForm, len);
310 /* need to jump to the next word */
311 s = f + len + WORD_ALIGN - SvCUR(tmpForm) % WORD_ALIGN;
320 case FF_LITERAL: arg = fpc[1]; name = "LITERAL"; break;
321 case FF_BLANK: arg = fpc[1]; name = "BLANK"; break;
322 case FF_SKIP: arg = fpc[1]; name = "SKIP"; break;
323 case FF_FETCH: arg = fpc[1]; name = "FETCH"; break;
324 case FF_DECIMAL: arg = fpc[1]; name = "DECIMAL"; break;
326 case FF_CHECKNL: name = "CHECKNL"; break;
327 case FF_CHECKCHOP: name = "CHECKCHOP"; break;
328 case FF_SPACE: name = "SPACE"; break;
329 case FF_HALFSPACE: name = "HALFSPACE"; break;
330 case FF_ITEM: name = "ITEM"; break;
331 case FF_CHOP: name = "CHOP"; break;
332 case FF_LINEGLOB: name = "LINEGLOB"; break;
333 case FF_NEWLINE: name = "NEWLINE"; break;
334 case FF_MORE: name = "MORE"; break;
335 case FF_LINEMARK: name = "LINEMARK"; break;
336 case FF_END: name = "END"; break;
339 PerlIO_printf(Perl_debug_log, "%-16s%ld\n", name, (long) arg);
341 PerlIO_printf(Perl_debug_log, "%-16s\n", name);
369 if (ckWARN(WARN_SYNTAX))
370 Perl_warner(aTHX_ WARN_SYNTAX, "Not enough format arguments");
375 item = s = SvPV(sv, len);
378 itemsize = sv_len_utf8(sv);
379 if (itemsize != len) {
381 if (itemsize > fieldsize) {
382 itemsize = fieldsize;
383 itembytes = itemsize;
384 sv_pos_u2b(sv, &itembytes, 0);
388 send = chophere = s + itembytes;
397 sv_pos_b2u(sv, &itemsize);
401 if (itemsize > fieldsize)
402 itemsize = fieldsize;
403 send = chophere = s + itemsize;
415 item = s = SvPV(sv, len);
418 itemsize = sv_len_utf8(sv);
419 if (itemsize != len) {
421 if (itemsize <= fieldsize) {
422 send = chophere = s + itemsize;
433 itemsize = fieldsize;
434 itembytes = itemsize;
435 sv_pos_u2b(sv, &itembytes, 0);
436 send = chophere = s + itembytes;
437 while (s < send || (s == send && isSPACE(*s))) {
447 if (strchr(PL_chopset, *s))
452 itemsize = chophere - item;
453 sv_pos_b2u(sv, &itemsize);
458 if (itemsize <= fieldsize) {
459 send = chophere = s + itemsize;
470 itemsize = fieldsize;
471 send = chophere = s + itemsize;
472 while (s < send || (s == send && isSPACE(*s))) {
482 if (strchr(PL_chopset, *s))
487 itemsize = chophere - item;
492 arg = fieldsize - itemsize;
501 arg = fieldsize - itemsize;
516 switch (UTF8SKIP(s)) {
527 if ( !((*t++ = *s++) & ~31) )
535 int ch = *t++ = *s++;
538 if ( !((*t++ = *s++) & ~31) )
547 while (*s && isSPACE(*s))
554 item = s = SvPV(sv, len);
567 SvCUR_set(PL_formtarget, t - SvPVX(PL_formtarget));
568 sv_catpvn(PL_formtarget, item, itemsize);
569 SvGROW(PL_formtarget, SvCUR(PL_formtarget) + fudge + 1);
570 t = SvPVX(PL_formtarget) + SvCUR(PL_formtarget);
575 /* If the field is marked with ^ and the value is undefined,
578 if ((arg & 512) && !SvOK(sv)) {
586 /* Formats aren't yet marked for locales, so assume "yes". */
588 RESTORE_NUMERIC_LOCAL();
589 #if defined(USE_LONG_DOUBLE)
591 sprintf(t, "%#*.*" PERL_PRIfldbl,
592 (int) fieldsize, (int) arg & 255, value);
594 sprintf(t, "%*.0" PERL_PRIfldbl, (int) fieldsize, value);
599 (int) fieldsize, (int) arg & 255, value);
602 (int) fieldsize, value);
605 RESTORE_NUMERIC_STANDARD();
612 while (t-- > linemark && *t == ' ') ;
620 if (arg) { /* repeat until fields exhausted? */
622 SvCUR_set(PL_formtarget, t - SvPVX(PL_formtarget));
623 lines += FmLINES(PL_formtarget);
626 if (strnEQ(linemark, linemark - arg, arg))
627 DIE(aTHX_ "Runaway format");
629 FmLINES(PL_formtarget) = lines;
631 RETURNOP(cLISTOP->op_first);
644 while (*s && isSPACE(*s) && s < send)
648 arg = fieldsize - itemsize;
655 if (strnEQ(s," ",3)) {
656 while (s > SvPVX(PL_formtarget) && isSPACE(s[-1]))
667 SvCUR_set(PL_formtarget, t - SvPVX(PL_formtarget));
668 FmLINES(PL_formtarget) += lines;
680 if (PL_stack_base + *PL_markstack_ptr == SP) {
682 if (GIMME_V == G_SCALAR)
683 XPUSHs(sv_2mortal(newSViv(0)));
684 RETURNOP(PL_op->op_next->op_next);
686 PL_stack_sp = PL_stack_base + *PL_markstack_ptr + 1;
687 pp_pushmark(); /* push dst */
688 pp_pushmark(); /* push src */
689 ENTER; /* enter outer scope */
692 /* SAVE_DEFSV does *not* suffice here for USE_THREADS */
694 ENTER; /* enter inner scope */
697 src = PL_stack_base[*PL_markstack_ptr];
702 if (PL_op->op_type == OP_MAPSTART)
703 pp_pushmark(); /* push top */
704 return ((LOGOP*)PL_op->op_next)->op_other;
709 DIE(aTHX_ "panic: mapstart"); /* uses grepstart */
715 I32 diff = (SP - PL_stack_base) - *PL_markstack_ptr;
721 ++PL_markstack_ptr[-1];
723 if (diff > PL_markstack_ptr[-1] - PL_markstack_ptr[-2]) {
724 shift = diff - (PL_markstack_ptr[-1] - PL_markstack_ptr[-2]);
725 count = (SP - PL_stack_base) - PL_markstack_ptr[-1] + 2;
730 PL_markstack_ptr[-1] += shift;
731 *PL_markstack_ptr += shift;
735 dst = PL_stack_base + (PL_markstack_ptr[-2] += diff) - 1;
738 *dst-- = SvTEMP(TOPs) ? POPs : sv_mortalcopy(POPs);
740 LEAVE; /* exit inner scope */
743 if (PL_markstack_ptr[-1] > *PL_markstack_ptr) {
747 (void)POPMARK; /* pop top */
748 LEAVE; /* exit outer scope */
749 (void)POPMARK; /* pop src */
750 items = --*PL_markstack_ptr - PL_markstack_ptr[-1];
751 (void)POPMARK; /* pop dst */
752 SP = PL_stack_base + POPMARK; /* pop original mark */
753 if (gimme == G_SCALAR) {
757 else if (gimme == G_ARRAY)
764 ENTER; /* enter inner scope */
767 src = PL_stack_base[PL_markstack_ptr[-1]];
771 RETURNOP(cLOGOP->op_other);
777 djSP; dMARK; dORIGMARK;
779 SV **myorigmark = ORIGMARK;
785 OP* nextop = PL_op->op_next;
787 bool hasargs = FALSE;
790 if (gimme != G_ARRAY) {
796 SAVEVPTR(PL_sortcop);
797 if (PL_op->op_flags & OPf_STACKED) {
798 if (PL_op->op_flags & OPf_SPECIAL) {
799 OP *kid = cLISTOP->op_first->op_sibling; /* pass pushmark */
800 kid = kUNOP->op_first; /* pass rv2gv */
801 kid = kUNOP->op_first; /* pass leave */
802 PL_sortcop = kid->op_next;
803 stash = CopSTASH(PL_curcop);
806 cv = sv_2cv(*++MARK, &stash, &gv, 0);
807 if (cv && SvPOK(cv)) {
809 char *proto = SvPV((SV*)cv, n_a);
810 if (proto && strEQ(proto, "$$")) {
814 if (!(cv && CvROOT(cv))) {
815 if (cv && CvXSUB(cv)) {
819 SV *tmpstr = sv_newmortal();
820 gv_efullname3(tmpstr, gv, Nullch);
821 DIE(aTHX_ "Undefined sort subroutine \"%s\" called",
825 DIE(aTHX_ "Undefined subroutine in sort");
830 PL_sortcop = (OP*)cv;
832 PL_sortcop = CvSTART(cv);
833 SAVEVPTR(CvROOT(cv)->op_ppaddr);
834 CvROOT(cv)->op_ppaddr = PL_ppaddr[OP_NULL];
837 PL_curpad = AvARRAY((AV*)AvARRAY(CvPADLIST(cv))[1]);
843 stash = CopSTASH(PL_curcop);
847 while (MARK < SP) { /* This may or may not shift down one here. */
849 if (*up = *++MARK) { /* Weed out nulls. */
851 if (!PL_sortcop && !SvPOK(*up)) {
856 (void)sv_2pv(*up, &n_a);
861 max = --up - myorigmark;
866 bool oldcatch = CATCH_GET;
872 PUSHSTACKi(PERLSI_SORT);
873 if (PL_sortstash != stash) {
874 PL_firstgv = gv_fetchpv("a", TRUE, SVt_PV);
875 PL_secondgv = gv_fetchpv("b", TRUE, SVt_PV);
876 PL_sortstash = stash;
879 SAVESPTR(GvSV(PL_firstgv));
880 SAVESPTR(GvSV(PL_secondgv));
882 PUSHBLOCK(cx, CXt_NULL, PL_stack_base);
883 if (!(PL_op->op_flags & OPf_SPECIAL)) {
884 cx->cx_type = CXt_SUB;
885 cx->blk_gimme = G_SCALAR;
888 (void)SvREFCNT_inc(cv); /* in preparation for POPSUB */
890 PL_sortcxix = cxstack_ix;
892 if (hasargs && !is_xsub) {
893 /* This is mostly copied from pp_entersub */
894 AV *av = (AV*)PL_curpad[0];
897 cx->blk_sub.savearray = GvAV(PL_defgv);
898 GvAV(PL_defgv) = (AV*)SvREFCNT_inc(av);
899 #endif /* USE_THREADS */
900 cx->blk_sub.argarray = av;
902 qsortsv((myorigmark+1), max,
903 is_xsub ? sortcv_xsub : hasargs ? sortcv_stacked : sortcv);
905 POPBLOCK(cx,PL_curpm);
913 MEXTEND(SP, 20); /* Can't afford stack realloc on signal. */
914 qsortsv(ORIGMARK+1, max,
915 (PL_op->op_private & OPpSORT_NUMERIC)
916 ? ( (PL_op->op_private & OPpSORT_INTEGER)
917 ? ( overloading ? amagic_i_ncmp : sv_i_ncmp)
918 : ( overloading ? amagic_ncmp : sv_ncmp))
919 : ( (PL_op->op_private & OPpLOCALE)
922 : sv_cmp_locale_static)
923 : ( overloading ? amagic_cmp : sv_cmp_static)));
924 if (PL_op->op_private & OPpSORT_REVERSE) {
926 SV **q = ORIGMARK+max;
936 PL_stack_sp = ORIGMARK + max;
944 if (GIMME == G_ARRAY)
946 if (SvTRUEx(PAD_SV(PL_op->op_targ)))
947 return cLOGOP->op_other;
956 if (GIMME == G_ARRAY) {
957 RETURNOP(((LOGOP*)cUNOP->op_first)->op_other);
961 SV *targ = PAD_SV(PL_op->op_targ);
963 if ((PL_op->op_private & OPpFLIP_LINENUM)
964 ? (PL_last_in_gv && SvIV(sv) == (IV)IoLINES(GvIOp(PL_last_in_gv)))
966 sv_setiv(PAD_SV(cUNOP->op_first->op_targ), 1);
967 if (PL_op->op_flags & OPf_SPECIAL) {
975 RETURNOP(((LOGOP*)cUNOP->op_first)->op_other);
988 if (GIMME == G_ARRAY) {
994 if (SvGMAGICAL(left))
996 if (SvGMAGICAL(right))
999 if (SvNIOKp(left) || !SvPOKp(left) ||
1000 SvNIOKp(right) || !SvPOKp(right) ||
1001 (looks_like_number(left) && *SvPVX(left) != '0' &&
1002 looks_like_number(right) && *SvPVX(right) != '0'))
1004 if (SvNV(left) < IV_MIN || SvNV(right) > IV_MAX)
1005 DIE(aTHX_ "Range iterator outside integer range");
1016 sv = sv_2mortal(newSViv(i++));
1021 SV *final = sv_mortalcopy(right);
1023 char *tmps = SvPV(final, len);
1025 sv = sv_mortalcopy(left);
1027 while (!SvNIOKp(sv) && SvCUR(sv) <= len) {
1029 if (strEQ(SvPVX(sv),tmps))
1031 sv = sv_2mortal(newSVsv(sv));
1038 SV *targ = PAD_SV(cUNOP->op_first->op_targ);
1040 if ((PL_op->op_private & OPpFLIP_LINENUM)
1041 ? (PL_last_in_gv && SvIV(sv) == (IV)IoLINES(GvIOp(PL_last_in_gv)))
1043 sv_setiv(PAD_SV(((UNOP*)cUNOP->op_first)->op_first->op_targ), 0);
1044 sv_catpv(targ, "E0");
1055 S_dopoptolabel(pTHX_ char *label)
1059 register PERL_CONTEXT *cx;
1061 for (i = cxstack_ix; i >= 0; i--) {
1063 switch (CxTYPE(cx)) {
1065 if (ckWARN(WARN_UNSAFE))
1066 Perl_warner(aTHX_ WARN_UNSAFE, "Exiting substitution via %s",
1067 PL_op_name[PL_op->op_type]);
1070 if (ckWARN(WARN_UNSAFE))
1071 Perl_warner(aTHX_ WARN_UNSAFE, "Exiting subroutine via %s",
1072 PL_op_name[PL_op->op_type]);
1075 if (ckWARN(WARN_UNSAFE))
1076 Perl_warner(aTHX_ WARN_UNSAFE, "Exiting format via %s",
1077 PL_op_name[PL_op->op_type]);
1080 if (ckWARN(WARN_UNSAFE))
1081 Perl_warner(aTHX_ WARN_UNSAFE, "Exiting eval via %s",
1082 PL_op_name[PL_op->op_type]);
1085 if (ckWARN(WARN_UNSAFE))
1086 Perl_warner(aTHX_ WARN_UNSAFE, "Exiting pseudo-block via %s",
1087 PL_op_name[PL_op->op_type]);
1090 if (!cx->blk_loop.label ||
1091 strNE(label, cx->blk_loop.label) ) {
1092 DEBUG_l(Perl_deb(aTHX_ "(Skipping label #%ld %s)\n",
1093 (long)i, cx->blk_loop.label));
1096 DEBUG_l( Perl_deb(aTHX_ "(Found label #%ld %s)\n", (long)i, label));
1104 Perl_dowantarray(pTHX)
1106 I32 gimme = block_gimme();
1107 return (gimme == G_VOID) ? G_SCALAR : gimme;
1111 Perl_block_gimme(pTHX)
1116 cxix = dopoptosub(cxstack_ix);
1120 switch (cxstack[cxix].blk_gimme) {
1128 Perl_croak(aTHX_ "panic: bad gimme: %d\n", cxstack[cxix].blk_gimme);
1135 S_dopoptosub(pTHX_ I32 startingblock)
1138 return dopoptosub_at(cxstack, startingblock);
1142 S_dopoptosub_at(pTHX_ PERL_CONTEXT *cxstk, I32 startingblock)
1146 register PERL_CONTEXT *cx;
1147 for (i = startingblock; i >= 0; i--) {
1149 switch (CxTYPE(cx)) {
1155 DEBUG_l( Perl_deb(aTHX_ "(Found sub #%ld)\n", (long)i));
1163 S_dopoptoeval(pTHX_ I32 startingblock)
1167 register PERL_CONTEXT *cx;
1168 for (i = startingblock; i >= 0; i--) {
1170 switch (CxTYPE(cx)) {
1174 DEBUG_l( Perl_deb(aTHX_ "(Found eval #%ld)\n", (long)i));
1182 S_dopoptoloop(pTHX_ I32 startingblock)
1186 register PERL_CONTEXT *cx;
1187 for (i = startingblock; i >= 0; i--) {
1189 switch (CxTYPE(cx)) {
1191 if (ckWARN(WARN_UNSAFE))
1192 Perl_warner(aTHX_ WARN_UNSAFE, "Exiting substitution via %s",
1193 PL_op_name[PL_op->op_type]);
1196 if (ckWARN(WARN_UNSAFE))
1197 Perl_warner(aTHX_ WARN_UNSAFE, "Exiting subroutine via %s",
1198 PL_op_name[PL_op->op_type]);
1201 if (ckWARN(WARN_UNSAFE))
1202 Perl_warner(aTHX_ WARN_UNSAFE, "Exiting format via %s",
1203 PL_op_name[PL_op->op_type]);
1206 if (ckWARN(WARN_UNSAFE))
1207 Perl_warner(aTHX_ WARN_UNSAFE, "Exiting eval via %s",
1208 PL_op_name[PL_op->op_type]);
1211 if (ckWARN(WARN_UNSAFE))
1212 Perl_warner(aTHX_ WARN_UNSAFE, "Exiting pseudo-block via %s",
1213 PL_op_name[PL_op->op_type]);
1216 DEBUG_l( Perl_deb(aTHX_ "(Found loop #%ld)\n", (long)i));
1224 Perl_dounwind(pTHX_ I32 cxix)
1227 register PERL_CONTEXT *cx;
1231 while (cxstack_ix > cxix) {
1233 cx = &cxstack[cxstack_ix];
1234 DEBUG_l(PerlIO_printf(Perl_debug_log, "Unwinding block %ld, type %s\n",
1235 (long) cxstack_ix, PL_block_type[CxTYPE(cx)]));
1236 /* Note: we don't need to restore the base context info till the end. */
1237 switch (CxTYPE(cx)) {
1240 continue; /* not break */
1262 * Closures mentioned at top level of eval cannot be referenced
1263 * again, and their presence indirectly causes a memory leak.
1264 * (Note that the fact that compcv and friends are still set here
1265 * is, AFAIK, an accident.) --Chip
1267 * XXX need to get comppad et al from eval's cv rather than
1268 * relying on the incidental global values.
1271 S_free_closures(pTHX)
1274 SV **svp = AvARRAY(PL_comppad_name);
1276 for (ix = AvFILLp(PL_comppad_name); ix >= 0; ix--) {
1278 if (sv && sv != &PL_sv_undef && *SvPVX(sv) == '&') {
1280 svp[ix] = &PL_sv_undef;
1284 SvREFCNT_dec(CvOUTSIDE(sv));
1285 CvOUTSIDE(sv) = Nullcv;
1298 Perl_qerror(pTHX_ SV *err)
1301 sv_catsv(ERRSV, err);
1303 sv_catsv(PL_errors, err);
1305 Perl_warn(aTHX_ "%"SVf, err);
1310 Perl_die_where(pTHX_ char *message, STRLEN msglen)
1316 register PERL_CONTEXT *cx;
1321 if (PL_in_eval & EVAL_KEEPERR) {
1322 static char prefix[] = "\t(in cleanup) ";
1327 else if (SvCUR(err) >= sizeof(prefix)+msglen-1) {
1330 if (*e != *message || strNE(e,message))
1334 SvGROW(err, SvCUR(err)+sizeof(prefix)+msglen);
1335 sv_catpvn(err, prefix, sizeof(prefix)-1);
1336 sv_catpvn(err, message, msglen);
1337 if (ckWARN(WARN_UNSAFE)) {
1338 STRLEN start = SvCUR(err)-msglen-sizeof(prefix)+1;
1339 Perl_warner(aTHX_ WARN_UNSAFE, SvPVX(err)+start);
1344 sv_setpvn(ERRSV, message, msglen);
1347 message = SvPVx(ERRSV, msglen);
1349 while ((cxix = dopoptoeval(cxstack_ix)) < 0
1350 && PL_curstackinfo->si_prev)
1359 if (cxix < cxstack_ix)
1362 POPBLOCK(cx,PL_curpm);
1363 if (CxTYPE(cx) != CXt_EVAL) {
1364 PerlIO_write(Perl_error_log, "panic: die ", 11);
1365 PerlIO_write(Perl_error_log, message, msglen);
1370 if (gimme == G_SCALAR)
1371 *++newsp = &PL_sv_undef;
1372 PL_stack_sp = newsp;
1376 if (optype == OP_REQUIRE) {
1377 char* msg = SvPVx(ERRSV, n_a);
1378 DIE(aTHX_ "%sCompilation failed in require",
1379 *msg ? msg : "Unknown error\n");
1381 return pop_return();
1385 message = SvPVx(ERRSV, msglen);
1388 /* SFIO can really mess with your errno */
1391 PerlIO *serr = Perl_error_log;
1393 PerlIO_write(serr, message, msglen);
1394 (void)PerlIO_flush(serr);
1407 if (SvTRUE(left) != SvTRUE(right))
1419 RETURNOP(cLOGOP->op_other);
1428 RETURNOP(cLOGOP->op_other);
1434 register I32 cxix = dopoptosub(cxstack_ix);
1435 register PERL_CONTEXT *cx;
1436 register PERL_CONTEXT *ccstack = cxstack;
1437 PERL_SI *top_si = PL_curstackinfo;
1448 /* we may be in a higher stacklevel, so dig down deeper */
1449 while (cxix < 0 && top_si->si_type != PERLSI_MAIN) {
1450 top_si = top_si->si_prev;
1451 ccstack = top_si->si_cxstack;
1452 cxix = dopoptosub_at(ccstack, top_si->si_cxix);
1455 if (GIMME != G_ARRAY)
1459 if (PL_DBsub && cxix >= 0 &&
1460 ccstack[cxix].blk_sub.cv == GvCV(PL_DBsub))
1464 cxix = dopoptosub_at(ccstack, cxix - 1);
1467 cx = &ccstack[cxix];
1468 if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
1469 dbcxix = dopoptosub_at(ccstack, cxix - 1);
1470 /* We expect that ccstack[dbcxix] is CXt_SUB, anyway, the
1471 field below is defined for any cx. */
1472 if (PL_DBsub && dbcxix >= 0 && ccstack[dbcxix].blk_sub.cv == GvCV(PL_DBsub))
1473 cx = &ccstack[dbcxix];
1476 stashname = CopSTASHPV(cx->blk_oldcop);
1477 if (GIMME != G_ARRAY) {
1479 PUSHs(&PL_sv_undef);
1482 sv_setpv(TARG, stashname);
1489 PUSHs(&PL_sv_undef);
1491 PUSHs(sv_2mortal(newSVpv(stashname, 0)));
1492 PUSHs(sv_2mortal(newSVpv(CopFILE(cx->blk_oldcop), 0)));
1493 PUSHs(sv_2mortal(newSViv((I32)CopLINE(cx->blk_oldcop))));
1496 if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
1497 /* So is ccstack[dbcxix]. */
1499 gv_efullname3(sv, CvGV(ccstack[cxix].blk_sub.cv), Nullch);
1500 PUSHs(sv_2mortal(sv));
1501 PUSHs(sv_2mortal(newSViv((I32)cx->blk_sub.hasargs)));
1504 PUSHs(sv_2mortal(newSVpvn("(eval)",6)));
1505 PUSHs(sv_2mortal(newSViv(0)));
1507 gimme = (I32)cx->blk_gimme;
1508 if (gimme == G_VOID)
1509 PUSHs(&PL_sv_undef);
1511 PUSHs(sv_2mortal(newSViv(gimme & G_ARRAY)));
1512 if (CxTYPE(cx) == CXt_EVAL) {
1513 if (cx->blk_eval.old_op_type == OP_ENTEREVAL) {
1514 PUSHs(cx->blk_eval.cur_text);
1517 else if (cx->blk_eval.old_name) { /* Try blocks have old_name == 0. */
1518 /* Require, put the name. */
1519 PUSHs(sv_2mortal(newSVpv(cx->blk_eval.old_name, 0)));
1524 PUSHs(&PL_sv_undef);
1525 PUSHs(&PL_sv_undef);
1527 if (CxTYPE(cx) == CXt_SUB && cx->blk_sub.hasargs
1528 && CopSTASH_eq(PL_curcop, PL_debstash))
1530 AV *ary = cx->blk_sub.argarray;
1531 int off = AvARRAY(ary) - AvALLOC(ary);
1535 PL_dbargs = GvAV(gv_AVadd(tmpgv = gv_fetchpv("DB::args", TRUE,
1538 AvREAL_off(PL_dbargs); /* XXX Should be REIFY */
1541 if (AvMAX(PL_dbargs) < AvFILLp(ary) + off)
1542 av_extend(PL_dbargs, AvFILLp(ary) + off);
1543 Copy(AvALLOC(ary), AvARRAY(PL_dbargs), AvFILLp(ary) + 1 + off, SV*);
1544 AvFILLp(PL_dbargs) = AvFILLp(ary) + off;
1546 /* XXX only hints propagated via op_private are currently
1547 * visible (others are not easily accessible, since they
1548 * use the global PL_hints) */
1549 PUSHs(sv_2mortal(newSViv((I32)cx->blk_oldcop->op_private &
1550 HINT_PRIVATE_MASK)));
1564 sv_reset(tmps, CopSTASH(PL_curcop));
1576 PL_curcop = (COP*)PL_op;
1577 TAINT_NOT; /* Each statement is presumed innocent */
1578 PL_stack_sp = PL_stack_base + cxstack[cxstack_ix].blk_oldsp;
1581 if (PL_op->op_private || SvIV(PL_DBsingle) || SvIV(PL_DBsignal) || SvIV(PL_DBtrace))
1585 register PERL_CONTEXT *cx;
1586 I32 gimme = G_ARRAY;
1593 DIE(aTHX_ "No DB::DB routine defined");
1595 if (CvDEPTH(cv) >= 1 && !(PL_debug & (1<<30))) /* don't do recursive DB::DB call */
1607 push_return(PL_op->op_next);
1608 PUSHBLOCK(cx, CXt_SUB, SP);
1611 (void)SvREFCNT_inc(cv);
1612 SAVEVPTR(PL_curpad);
1613 PL_curpad = AvARRAY((AV*)*av_fetch(CvPADLIST(cv),1,FALSE));
1614 RETURNOP(CvSTART(cv));
1628 register PERL_CONTEXT *cx;
1629 I32 gimme = GIMME_V;
1631 U32 cxtype = CXt_LOOP;
1640 if (PL_op->op_flags & OPf_SPECIAL) {
1642 svp = &THREADSV(PL_op->op_targ); /* per-thread variable */
1643 SAVEGENERICSV(*svp);
1647 #endif /* USE_THREADS */
1648 if (PL_op->op_targ) {
1649 svp = &PL_curpad[PL_op->op_targ]; /* "my" variable */
1652 iterdata = (void*)PL_op->op_targ;
1653 cxtype |= CXp_PADVAR;
1658 svp = &GvSV(gv); /* symbol table variable */
1659 SAVEGENERICSV(*svp);
1662 iterdata = (void*)gv;
1668 PUSHBLOCK(cx, cxtype, SP);
1670 PUSHLOOP(cx, iterdata, MARK);
1672 PUSHLOOP(cx, svp, MARK);
1674 if (PL_op->op_flags & OPf_STACKED) {
1675 cx->blk_loop.iterary = (AV*)SvREFCNT_inc(POPs);
1676 if (SvTYPE(cx->blk_loop.iterary) != SVt_PVAV) {
1678 if (SvNIOKp(sv) || !SvPOKp(sv) ||
1679 SvNIOKp(cx->blk_loop.iterary) || !SvPOKp(cx->blk_loop.iterary) ||
1680 (looks_like_number(sv) && *SvPVX(sv) != '0' &&
1681 looks_like_number((SV*)cx->blk_loop.iterary) &&
1682 *SvPVX(cx->blk_loop.iterary) != '0'))
1684 if (SvNV(sv) < IV_MIN ||
1685 SvNV((SV*)cx->blk_loop.iterary) >= IV_MAX)
1686 DIE(aTHX_ "Range iterator outside integer range");
1687 cx->blk_loop.iterix = SvIV(sv);
1688 cx->blk_loop.itermax = SvIV((SV*)cx->blk_loop.iterary);
1691 cx->blk_loop.iterlval = newSVsv(sv);
1695 cx->blk_loop.iterary = PL_curstack;
1696 AvFILLp(PL_curstack) = SP - PL_stack_base;
1697 cx->blk_loop.iterix = MARK - PL_stack_base;
1706 register PERL_CONTEXT *cx;
1707 I32 gimme = GIMME_V;
1713 PUSHBLOCK(cx, CXt_LOOP, SP);
1714 PUSHLOOP(cx, 0, SP);
1722 register PERL_CONTEXT *cx;
1730 newsp = PL_stack_base + cx->blk_loop.resetsp;
1733 if (gimme == G_VOID)
1735 else if (gimme == G_SCALAR) {
1737 *++newsp = sv_mortalcopy(*SP);
1739 *++newsp = &PL_sv_undef;
1743 *++newsp = sv_mortalcopy(*++mark);
1744 TAINT_NOT; /* Each item is independent */
1750 POPLOOP(cx); /* Stack values are safe: release loop vars ... */
1751 PL_curpm = newpm; /* ... and pop $1 et al */
1763 register PERL_CONTEXT *cx;
1764 bool popsub2 = FALSE;
1771 if (PL_curstackinfo->si_type == PERLSI_SORT) {
1772 if (cxstack_ix == PL_sortcxix
1773 || dopoptosub(cxstack_ix) <= PL_sortcxix)
1775 if (cxstack_ix > PL_sortcxix)
1776 dounwind(PL_sortcxix);
1777 AvARRAY(PL_curstack)[1] = *SP;
1778 PL_stack_sp = PL_stack_base + 1;
1783 cxix = dopoptosub(cxstack_ix);
1785 DIE(aTHX_ "Can't return outside a subroutine");
1786 if (cxix < cxstack_ix)
1790 switch (CxTYPE(cx)) {
1796 if (AvFILLp(PL_comppad_name) >= 0)
1799 if (optype == OP_REQUIRE &&
1800 (MARK == SP || (gimme == G_SCALAR && !SvTRUE(*SP))) )
1802 /* Unassume the success we assumed earlier. */
1803 char *name = cx->blk_eval.old_name;
1804 (void)hv_delete(GvHVn(PL_incgv), name, strlen(name), G_DISCARD);
1805 DIE(aTHX_ "%s did not return a true value", name);
1812 DIE(aTHX_ "panic: return");
1816 if (gimme == G_SCALAR) {
1819 if (cx->blk_sub.cv && CvDEPTH(cx->blk_sub.cv) > 1) {
1821 *++newsp = SvREFCNT_inc(*SP);
1826 *++newsp = sv_mortalcopy(*SP);
1829 *++newsp = (SvTEMP(*SP)) ? *SP : sv_mortalcopy(*SP);
1831 *++newsp = sv_mortalcopy(*SP);
1833 *++newsp = &PL_sv_undef;
1835 else if (gimme == G_ARRAY) {
1836 while (++MARK <= SP) {
1837 *++newsp = (popsub2 && SvTEMP(*MARK))
1838 ? *MARK : sv_mortalcopy(*MARK);
1839 TAINT_NOT; /* Each item is independent */
1842 PL_stack_sp = newsp;
1844 /* Stack values are safe: */
1846 POPSUB(cx,sv); /* release CV and @_ ... */
1850 PL_curpm = newpm; /* ... and pop $1 et al */
1854 return pop_return();
1861 register PERL_CONTEXT *cx;
1871 if (PL_op->op_flags & OPf_SPECIAL) {
1872 cxix = dopoptoloop(cxstack_ix);
1874 DIE(aTHX_ "Can't \"last\" outside a loop block");
1877 cxix = dopoptolabel(cPVOP->op_pv);
1879 DIE(aTHX_ "Label not found for \"last %s\"", cPVOP->op_pv);
1881 if (cxix < cxstack_ix)
1886 switch (CxTYPE(cx)) {
1889 newsp = PL_stack_base + cx->blk_loop.resetsp;
1890 nextop = cx->blk_loop.last_op->op_next;
1894 nextop = pop_return();
1898 nextop = pop_return();
1902 nextop = pop_return();
1905 DIE(aTHX_ "panic: last");
1909 if (gimme == G_SCALAR) {
1911 *++newsp = ((pop2 == CXt_SUB) && SvTEMP(*SP))
1912 ? *SP : sv_mortalcopy(*SP);
1914 *++newsp = &PL_sv_undef;
1916 else if (gimme == G_ARRAY) {
1917 while (++MARK <= SP) {
1918 *++newsp = ((pop2 == CXt_SUB) && SvTEMP(*MARK))
1919 ? *MARK : sv_mortalcopy(*MARK);
1920 TAINT_NOT; /* Each item is independent */
1926 /* Stack values are safe: */
1929 POPLOOP(cx); /* release loop vars ... */
1933 POPSUB(cx,sv); /* release CV and @_ ... */
1936 PL_curpm = newpm; /* ... and pop $1 et al */
1946 register PERL_CONTEXT *cx;
1949 if (PL_op->op_flags & OPf_SPECIAL) {
1950 cxix = dopoptoloop(cxstack_ix);
1952 DIE(aTHX_ "Can't \"next\" outside a loop block");
1955 cxix = dopoptolabel(cPVOP->op_pv);
1957 DIE(aTHX_ "Label not found for \"next %s\"", cPVOP->op_pv);
1959 if (cxix < cxstack_ix)
1963 oldsave = PL_scopestack[PL_scopestack_ix - 1];
1964 LEAVE_SCOPE(oldsave);
1965 return cx->blk_loop.next_op;
1971 register PERL_CONTEXT *cx;
1974 if (PL_op->op_flags & OPf_SPECIAL) {
1975 cxix = dopoptoloop(cxstack_ix);
1977 DIE(aTHX_ "Can't \"redo\" outside a loop block");
1980 cxix = dopoptolabel(cPVOP->op_pv);
1982 DIE(aTHX_ "Label not found for \"redo %s\"", cPVOP->op_pv);
1984 if (cxix < cxstack_ix)
1988 oldsave = PL_scopestack[PL_scopestack_ix - 1];
1989 LEAVE_SCOPE(oldsave);
1990 return cx->blk_loop.redo_op;
1994 S_dofindlabel(pTHX_ OP *o, char *label, OP **opstack, OP **oplimit)
1998 static char too_deep[] = "Target of goto is too deeply nested";
2001 Perl_croak(aTHX_ too_deep);
2002 if (o->op_type == OP_LEAVE ||
2003 o->op_type == OP_SCOPE ||
2004 o->op_type == OP_LEAVELOOP ||
2005 o->op_type == OP_LEAVETRY)
2007 *ops++ = cUNOPo->op_first;
2009 Perl_croak(aTHX_ too_deep);
2012 if (o->op_flags & OPf_KIDS) {
2014 /* First try all the kids at this level, since that's likeliest. */
2015 for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling) {
2016 if ((kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) &&
2017 kCOP->cop_label && strEQ(kCOP->cop_label, label))
2020 for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling) {
2021 if (kid == PL_lastgotoprobe)
2023 if ((kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) &&
2025 (ops[-1]->op_type != OP_NEXTSTATE &&
2026 ops[-1]->op_type != OP_DBSTATE)))
2028 if (o = dofindlabel(kid, label, ops, oplimit))
2047 register PERL_CONTEXT *cx;
2048 #define GOTO_DEPTH 64
2049 OP *enterops[GOTO_DEPTH];
2051 int do_dump = (PL_op->op_type == OP_DUMP);
2052 static char must_have_label[] = "goto must have label";
2055 if (PL_op->op_flags & OPf_STACKED) {
2059 /* This egregious kludge implements goto &subroutine */
2060 if (SvROK(sv) && SvTYPE(SvRV(sv)) == SVt_PVCV) {
2062 register PERL_CONTEXT *cx;
2063 CV* cv = (CV*)SvRV(sv);
2069 if (!CvROOT(cv) && !CvXSUB(cv)) {
2074 /* autoloaded stub? */
2075 if (cv != GvCV(gv) && (cv = GvCV(gv)))
2077 autogv = gv_autoload4(GvSTASH(gv), GvNAME(gv),
2078 GvNAMELEN(gv), FALSE);
2079 if (autogv && (cv = GvCV(autogv)))
2081 tmpstr = sv_newmortal();
2082 gv_efullname3(tmpstr, gv, Nullch);
2083 DIE(aTHX_ "Goto undefined subroutine &%s",SvPVX(tmpstr));
2085 DIE(aTHX_ "Goto undefined subroutine");
2088 /* First do some returnish stuff. */
2089 cxix = dopoptosub(cxstack_ix);
2091 DIE(aTHX_ "Can't goto subroutine outside a subroutine");
2092 if (cxix < cxstack_ix)
2095 if (CxTYPE(cx) == CXt_EVAL && cx->blk_eval.old_op_type == OP_ENTEREVAL)
2096 DIE(aTHX_ "Can't goto subroutine from an eval-string");
2098 if (CxTYPE(cx) == CXt_SUB && cx->blk_sub.hasargs) {
2099 /* put @_ back onto stack */
2100 AV* av = cx->blk_sub.argarray;
2102 items = AvFILLp(av) + 1;
2104 EXTEND(PL_stack_sp, items); /* @_ could have been extended. */
2105 Copy(AvARRAY(av), PL_stack_sp, items, SV*);
2106 PL_stack_sp += items;
2108 SvREFCNT_dec(GvAV(PL_defgv));
2109 GvAV(PL_defgv) = cx->blk_sub.savearray;
2110 #endif /* USE_THREADS */
2111 /* abandon @_ if it got reified */
2113 (void)sv_2mortal((SV*)av); /* delay until return */
2115 av_extend(av, items-1);
2116 AvFLAGS(av) = AVf_REIFY;
2117 PL_curpad[0] = (SV*)(cx->blk_sub.argarray = av);
2120 else if (CvXSUB(cv)) { /* put GvAV(defgv) back onto stack */
2124 av = (AV*)PL_curpad[0];
2126 av = GvAV(PL_defgv);
2128 items = AvFILLp(av) + 1;
2130 EXTEND(PL_stack_sp, items); /* @_ could have been extended. */
2131 Copy(AvARRAY(av), PL_stack_sp, items, SV*);
2132 PL_stack_sp += items;
2134 if (CxTYPE(cx) == CXt_SUB &&
2135 !(CvDEPTH(cx->blk_sub.cv) = cx->blk_sub.olddepth))
2136 SvREFCNT_dec(cx->blk_sub.cv);
2137 oldsave = PL_scopestack[PL_scopestack_ix - 1];
2138 LEAVE_SCOPE(oldsave);
2140 /* Now do some callish stuff. */
2143 #ifdef PERL_XSUB_OLDSTYLE
2144 if (CvOLDSTYLE(cv)) {
2145 I32 (*fp3)(int,int,int);
2150 fp3 = (I32(*)(int,int,int))CvXSUB(cv);
2151 items = (*fp3)(CvXSUBANY(cv).any_i32,
2152 mark - PL_stack_base + 1,
2154 SP = PL_stack_base + items;
2157 #endif /* PERL_XSUB_OLDSTYLE */
2162 PL_stack_sp--; /* There is no cv arg. */
2163 /* Push a mark for the start of arglist */
2165 (void)(*CvXSUB(cv))(aTHXo_ cv);
2166 /* Pop the current context like a decent sub should */
2167 POPBLOCK(cx, PL_curpm);
2168 /* Do _not_ use PUTBACK, keep the XSUB's return stack! */
2171 return pop_return();
2174 AV* padlist = CvPADLIST(cv);
2175 SV** svp = AvARRAY(padlist);
2176 if (CxTYPE(cx) == CXt_EVAL) {
2177 PL_in_eval = cx->blk_eval.old_in_eval;
2178 PL_eval_root = cx->blk_eval.old_eval_root;
2179 cx->cx_type = CXt_SUB;
2180 cx->blk_sub.hasargs = 0;
2182 cx->blk_sub.cv = cv;
2183 cx->blk_sub.olddepth = CvDEPTH(cv);
2185 if (CvDEPTH(cv) < 2)
2186 (void)SvREFCNT_inc(cv);
2187 else { /* save temporaries on recursion? */
2188 if (CvDEPTH(cv) == 100 && ckWARN(WARN_RECURSION))
2189 sub_crush_depth(cv);
2190 if (CvDEPTH(cv) > AvFILLp(padlist)) {
2191 AV *newpad = newAV();
2192 SV **oldpad = AvARRAY(svp[CvDEPTH(cv)-1]);
2193 I32 ix = AvFILLp((AV*)svp[1]);
2194 I32 names_fill = AvFILLp((AV*)svp[0]);
2195 svp = AvARRAY(svp[0]);
2196 for ( ;ix > 0; ix--) {
2197 if (names_fill >= ix && svp[ix] != &PL_sv_undef) {
2198 char *name = SvPVX(svp[ix]);
2199 if ((SvFLAGS(svp[ix]) & SVf_FAKE)
2202 /* outer lexical or anon code */
2203 av_store(newpad, ix,
2204 SvREFCNT_inc(oldpad[ix]) );
2206 else { /* our own lexical */
2208 av_store(newpad, ix, sv = (SV*)newAV());
2209 else if (*name == '%')
2210 av_store(newpad, ix, sv = (SV*)newHV());
2212 av_store(newpad, ix, sv = NEWSV(0,0));
2216 else if (IS_PADGV(oldpad[ix]) || IS_PADCONST(oldpad[ix])) {
2217 av_store(newpad, ix, sv = SvREFCNT_inc(oldpad[ix]));
2220 av_store(newpad, ix, sv = NEWSV(0,0));
2224 if (cx->blk_sub.hasargs) {
2227 av_store(newpad, 0, (SV*)av);
2228 AvFLAGS(av) = AVf_REIFY;
2230 av_store(padlist, CvDEPTH(cv), (SV*)newpad);
2231 AvFILLp(padlist) = CvDEPTH(cv);
2232 svp = AvARRAY(padlist);
2236 if (!cx->blk_sub.hasargs) {
2237 AV* av = (AV*)PL_curpad[0];
2239 items = AvFILLp(av) + 1;
2241 /* Mark is at the end of the stack. */
2243 Copy(AvARRAY(av), SP + 1, items, SV*);
2248 #endif /* USE_THREADS */
2249 SAVEVPTR(PL_curpad);
2250 PL_curpad = AvARRAY((AV*)svp[CvDEPTH(cv)]);
2252 if (cx->blk_sub.hasargs)
2253 #endif /* USE_THREADS */
2255 AV* av = (AV*)PL_curpad[0];
2259 cx->blk_sub.savearray = GvAV(PL_defgv);
2260 GvAV(PL_defgv) = (AV*)SvREFCNT_inc(av);
2261 #endif /* USE_THREADS */
2262 cx->blk_sub.argarray = av;
2265 if (items >= AvMAX(av) + 1) {
2267 if (AvARRAY(av) != ary) {
2268 AvMAX(av) += AvARRAY(av) - AvALLOC(av);
2269 SvPVX(av) = (char*)ary;
2271 if (items >= AvMAX(av) + 1) {
2272 AvMAX(av) = items - 1;
2273 Renew(ary,items+1,SV*);
2275 SvPVX(av) = (char*)ary;
2278 Copy(mark,AvARRAY(av),items,SV*);
2279 AvFILLp(av) = items - 1;
2280 assert(!AvREAL(av));
2287 if (PERLDB_SUB) { /* Checking curstash breaks DProf. */
2289 * We do not care about using sv to call CV;
2290 * it's for informational purposes only.
2292 SV *sv = GvSV(PL_DBsub);
2295 if (PERLDB_SUB_NN) {
2296 SvIVX(sv) = PTR2IV(cv); /* Already upgraded, saved */
2299 gv_efullname3(sv, CvGV(cv), Nullch);
2302 && (gotocv = get_cv("DB::goto", FALSE)) ) {
2303 PUSHMARK( PL_stack_sp );
2304 call_sv((SV*)gotocv, G_SCALAR | G_NODEBUG);
2308 RETURNOP(CvSTART(cv));
2312 label = SvPV(sv,n_a);
2313 if (!(do_dump || *label))
2314 DIE(aTHX_ must_have_label);
2317 else if (PL_op->op_flags & OPf_SPECIAL) {
2319 DIE(aTHX_ must_have_label);
2322 label = cPVOP->op_pv;
2324 if (label && *label) {
2329 PL_lastgotoprobe = 0;
2331 for (ix = cxstack_ix; ix >= 0; ix--) {
2333 switch (CxTYPE(cx)) {
2335 gotoprobe = PL_eval_root; /* XXX not good for nested eval */
2338 gotoprobe = cx->blk_oldcop->op_sibling;
2344 gotoprobe = cx->blk_oldcop->op_sibling;
2346 gotoprobe = PL_main_root;
2349 if (CvDEPTH(cx->blk_sub.cv)) {
2350 gotoprobe = CvROOT(cx->blk_sub.cv);
2356 DIE(aTHX_ "Can't \"goto\" out of a pseudo block");
2359 DIE(aTHX_ "panic: goto");
2360 gotoprobe = PL_main_root;
2363 retop = dofindlabel(gotoprobe, label,
2364 enterops, enterops + GOTO_DEPTH);
2367 PL_lastgotoprobe = gotoprobe;
2370 DIE(aTHX_ "Can't find label %s", label);
2372 /* pop unwanted frames */
2374 if (ix < cxstack_ix) {
2381 oldsave = PL_scopestack[PL_scopestack_ix];
2382 LEAVE_SCOPE(oldsave);
2385 /* push wanted frames */
2387 if (*enterops && enterops[1]) {
2389 for (ix = 1; enterops[ix]; ix++) {
2390 PL_op = enterops[ix];
2391 /* Eventually we may want to stack the needed arguments
2392 * for each op. For now, we punt on the hard ones. */
2393 if (PL_op->op_type == OP_ENTERITER)
2394 DIE(aTHX_ "Can't \"goto\" into the middle of a foreach loop");
2395 CALL_FPTR(PL_op->op_ppaddr)(aTHX);
2403 if (!retop) retop = PL_main_start;
2405 PL_restartop = retop;
2406 PL_do_undump = TRUE;
2410 PL_restartop = 0; /* hmm, must be GNU unexec().. */
2411 PL_do_undump = FALSE;
2427 if (anum == 1 && VMSISH_EXIT)
2431 PL_exit_flags |= PERL_EXIT_EXPECTED;
2433 PUSHs(&PL_sv_undef);
2441 NV value = SvNVx(GvSV(cCOP->cop_gv));
2442 register I32 match = I_32(value);
2445 if (((NV)match) > value)
2446 --match; /* was fractional--truncate other way */
2448 match -= cCOP->uop.scop.scop_offset;
2451 else if (match > cCOP->uop.scop.scop_max)
2452 match = cCOP->uop.scop.scop_max;
2453 PL_op = cCOP->uop.scop.scop_next[match];
2463 PL_op = PL_op->op_next; /* can't assume anything */
2466 match = *(SvPVx(GvSV(cCOP->cop_gv), n_a)) & 255;
2467 match -= cCOP->uop.scop.scop_offset;
2470 else if (match > cCOP->uop.scop.scop_max)
2471 match = cCOP->uop.scop.scop_max;
2472 PL_op = cCOP->uop.scop.scop_next[match];
2481 S_save_lines(pTHX_ AV *array, SV *sv)
2483 register char *s = SvPVX(sv);
2484 register char *send = SvPVX(sv) + SvCUR(sv);
2486 register I32 line = 1;
2488 while (s && s < send) {
2489 SV *tmpstr = NEWSV(85,0);
2491 sv_upgrade(tmpstr, SVt_PVMG);
2492 t = strchr(s, '\n');
2498 sv_setpvn(tmpstr, s, t - s);
2499 av_store(array, line++, tmpstr);
2505 S_docatch_body(pTHX_ va_list args)
2512 S_docatch(pTHX_ OP *o)
2517 volatile PERL_SI *cursi = PL_curstackinfo;
2521 assert(CATCH_GET == TRUE);
2525 CALLPROTECT(aTHX_ pcur_env, &ret, MEMBER_TO_FPTR(S_docatch_body));
2530 if (PL_restartop && cursi == PL_curstackinfo) {
2531 PL_op = PL_restartop;
2546 Perl_sv_compile_2op(pTHX_ SV *sv, OP** startop, char *code, AV** avp)
2547 /* sv Text to convert to OP tree. */
2548 /* startop op_free() this to undo. */
2549 /* code Short string id of the caller. */
2551 dSP; /* Make POPBLOCK work. */
2554 I32 gimme = 0; /* SUSPECT - INITIALZE TO WHAT? NI-S */
2557 OP *oop = PL_op, *rop;
2558 char tmpbuf[TYPE_DIGITS(long) + 12 + 10];
2564 /* switch to eval mode */
2566 if (PL_curcop == &PL_compiling) {
2567 SAVECOPSTASH(&PL_compiling);
2568 CopSTASH_set(&PL_compiling, PL_curstash);
2570 SAVECOPFILE(&PL_compiling);
2571 SAVECOPLINE(&PL_compiling);
2572 sprintf(tmpbuf, "_<(%.10s_eval %lu)", code, (unsigned long)++PL_evalseq);
2573 CopFILE_set(&PL_compiling, tmpbuf+2);
2574 CopLINE_set(&PL_compiling, 1);
2575 /* XXX For C<eval "...">s within BEGIN {} blocks, this ends up
2576 deleting the eval's FILEGV from the stash before gv_check() runs
2577 (i.e. before run-time proper). To work around the coredump that
2578 ensues, we always turn GvMULTI_on for any globals that were
2579 introduced within evals. See force_ident(). GSAR 96-10-12 */
2580 safestr = savepv(tmpbuf);
2581 SAVEDELETE(PL_defstash, safestr, strlen(safestr));
2583 #ifdef OP_IN_REGISTER
2591 PL_op->op_type = OP_ENTEREVAL;
2592 PL_op->op_flags = 0; /* Avoid uninit warning. */
2593 PUSHBLOCK(cx, CXt_EVAL, SP);
2594 PUSHEVAL(cx, 0, Nullgv);
2595 rop = doeval(G_SCALAR, startop);
2596 POPBLOCK(cx,PL_curpm);
2599 (*startop)->op_type = OP_NULL;
2600 (*startop)->op_ppaddr = PL_ppaddr[OP_NULL];
2602 *avp = (AV*)SvREFCNT_inc(PL_comppad);
2604 if (PL_curcop == &PL_compiling)
2605 PL_compiling.op_private = PL_hints;
2606 #ifdef OP_IN_REGISTER
2612 /* With USE_THREADS, eval_owner must be held on entry to doeval */
2614 S_doeval(pTHX_ int gimme, OP** startop)
2622 PL_in_eval = EVAL_INEVAL;
2626 /* set up a scratch pad */
2629 SAVEVPTR(PL_curpad);
2630 SAVESPTR(PL_comppad);
2631 SAVESPTR(PL_comppad_name);
2632 SAVEI32(PL_comppad_name_fill);
2633 SAVEI32(PL_min_intro_pending);
2634 SAVEI32(PL_max_intro_pending);
2637 for (i = cxstack_ix - 1; i >= 0; i--) {
2638 PERL_CONTEXT *cx = &cxstack[i];
2639 if (CxTYPE(cx) == CXt_EVAL)
2641 else if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
2642 caller = cx->blk_sub.cv;
2647 SAVESPTR(PL_compcv);
2648 PL_compcv = (CV*)NEWSV(1104,0);
2649 sv_upgrade((SV *)PL_compcv, SVt_PVCV);
2650 CvEVAL_on(PL_compcv);
2652 CvOWNER(PL_compcv) = 0;
2653 New(666, CvMUTEXP(PL_compcv), 1, perl_mutex);
2654 MUTEX_INIT(CvMUTEXP(PL_compcv));
2655 #endif /* USE_THREADS */
2657 PL_comppad = newAV();
2658 av_push(PL_comppad, Nullsv);
2659 PL_curpad = AvARRAY(PL_comppad);
2660 PL_comppad_name = newAV();
2661 PL_comppad_name_fill = 0;
2662 PL_min_intro_pending = 0;
2665 av_store(PL_comppad_name, 0, newSVpvn("@_", 2));
2666 PL_curpad[0] = (SV*)newAV();
2667 SvPADMY_on(PL_curpad[0]); /* XXX Needed? */
2668 #endif /* USE_THREADS */
2670 comppadlist = newAV();
2671 AvREAL_off(comppadlist);
2672 av_store(comppadlist, 0, (SV*)PL_comppad_name);
2673 av_store(comppadlist, 1, (SV*)PL_comppad);
2674 CvPADLIST(PL_compcv) = comppadlist;
2676 if (!saveop || saveop->op_type != OP_REQUIRE)
2677 CvOUTSIDE(PL_compcv) = (CV*)SvREFCNT_inc(caller);
2679 SAVEFREESV(PL_compcv);
2681 /* make sure we compile in the right package */
2683 if (CopSTASH_ne(PL_curcop, PL_curstash)) {
2684 SAVESPTR(PL_curstash);
2685 PL_curstash = CopSTASH(PL_curcop);
2687 SAVESPTR(PL_beginav);
2688 PL_beginav = newAV();
2689 SAVEFREESV(PL_beginav);
2691 /* try to compile it */
2693 PL_eval_root = Nullop;
2695 PL_curcop = &PL_compiling;
2696 PL_curcop->cop_arybase = 0;
2697 SvREFCNT_dec(PL_rs);
2698 PL_rs = newSVpvn("\n", 1);
2699 if (saveop && saveop->op_flags & OPf_SPECIAL)
2700 PL_in_eval |= EVAL_KEEPERR;
2703 if (yyparse() || PL_error_count || !PL_eval_root) {
2707 I32 optype = 0; /* Might be reset by POPEVAL. */
2712 op_free(PL_eval_root);
2713 PL_eval_root = Nullop;
2715 SP = PL_stack_base + POPMARK; /* pop original mark */
2717 POPBLOCK(cx,PL_curpm);
2723 if (optype == OP_REQUIRE) {
2724 char* msg = SvPVx(ERRSV, n_a);
2725 DIE(aTHX_ "%sCompilation failed in require",
2726 *msg ? msg : "Unknown error\n");
2729 char* msg = SvPVx(ERRSV, n_a);
2731 POPBLOCK(cx,PL_curpm);
2733 Perl_croak(aTHX_ "%sCompilation failed in regexp",
2734 (*msg ? msg : "Unknown error\n"));
2736 SvREFCNT_dec(PL_rs);
2737 PL_rs = SvREFCNT_inc(PL_nrs);
2739 MUTEX_LOCK(&PL_eval_mutex);
2741 COND_SIGNAL(&PL_eval_cond);
2742 MUTEX_UNLOCK(&PL_eval_mutex);
2743 #endif /* USE_THREADS */
2746 SvREFCNT_dec(PL_rs);
2747 PL_rs = SvREFCNT_inc(PL_nrs);
2748 CopLINE_set(&PL_compiling, 0);
2750 *startop = PL_eval_root;
2751 SvREFCNT_dec(CvOUTSIDE(PL_compcv));
2752 CvOUTSIDE(PL_compcv) = Nullcv;
2754 SAVEFREEOP(PL_eval_root);
2756 scalarvoid(PL_eval_root);
2757 else if (gimme & G_ARRAY)
2760 scalar(PL_eval_root);
2762 DEBUG_x(dump_eval());
2764 /* Register with debugger: */
2765 if (PERLDB_INTER && saveop->op_type == OP_REQUIRE) {
2766 CV *cv = get_cv("DB::postponed", FALSE);
2770 XPUSHs((SV*)CopFILEGV(&PL_compiling));
2772 call_sv((SV*)cv, G_DISCARD);
2776 /* compiled okay, so do it */
2778 CvDEPTH(PL_compcv) = 1;
2779 SP = PL_stack_base + POPMARK; /* pop original mark */
2780 PL_op = saveop; /* The caller may need it. */
2782 MUTEX_LOCK(&PL_eval_mutex);
2784 COND_SIGNAL(&PL_eval_cond);
2785 MUTEX_UNLOCK(&PL_eval_mutex);
2786 #endif /* USE_THREADS */
2788 RETURNOP(PL_eval_start);
2792 S_doopen_pmc(pTHX_ const char *name, const char *mode)
2794 STRLEN namelen = strlen(name);
2797 if (namelen > 3 && strEQ(name + namelen - 3, ".pm")) {
2798 SV *pmcsv = Perl_newSVpvf(aTHX_ "%s%c", name, 'c');
2799 char *pmc = SvPV_nolen(pmcsv);
2802 if (PerlLIO_stat(pmc, &pmcstat) < 0) {
2803 fp = PerlIO_open(name, mode);
2806 if (PerlLIO_stat(name, &pmstat) < 0 ||
2807 pmstat.st_mtime < pmcstat.st_mtime)
2809 fp = PerlIO_open(pmc, mode);
2812 fp = PerlIO_open(name, mode);
2815 SvREFCNT_dec(pmcsv);
2818 fp = PerlIO_open(name, mode);
2826 register PERL_CONTEXT *cx;
2831 SV *namesv = Nullsv;
2833 I32 gimme = G_SCALAR;
2834 PerlIO *tryrsfp = 0;
2836 int filter_has_file = 0;
2837 GV *filter_child_proc = 0;
2838 SV *filter_state = 0;
2844 if (SvPOKp(sv) && SvUTF8(sv)) { /* require v5.6.1 */
2846 U8 *s = (U8*)SvPVX(sv);
2847 U8 *end = (U8*)SvPVX(sv) + SvCUR(sv);
2849 rev = utf8_to_uv(s, &len);
2852 ver = utf8_to_uv(s, &len);
2855 sver = utf8_to_uv(s, &len);
2864 if (PERL_REVISION < rev
2865 || (PERL_REVISION == rev
2866 && (PERL_VERSION < ver
2867 || (PERL_VERSION == ver
2868 && PERL_SUBVERSION < sver))))
2870 DIE(aTHX_ "Perl v%"UVuf".%"UVuf".%"UVuf" required--this is only version "
2871 "v%d.%d.%d, stopped", rev, ver, sver, PERL_REVISION,
2872 PERL_VERSION, PERL_SUBVERSION);
2875 else if (!SvPOKp(sv)) { /* require 5.005_03 */
2878 ver = (UV)((n-rev)*1000);
2879 sver = (UV)((((n-rev)*1000 - ver) + 0.0009) * 1000);
2881 if ((NV)PERL_REVISION + ((NV)PERL_VERSION/(NV)1000)
2882 + ((NV)PERL_SUBVERSION/(NV)1000000)
2883 + 0.00000099 < SvNV(sv))
2885 DIE(aTHX_ "Perl v%"UVuf".%"UVuf".%"UVuf" required--this is only version "
2886 "v%d.%d.%d, stopped", rev, ver, sver, PERL_REVISION,
2887 PERL_VERSION, PERL_SUBVERSION);
2892 name = SvPV(sv, len);
2893 if (!(name && len > 0 && *name))
2894 DIE(aTHX_ "Null filename used");
2895 TAINT_PROPER("require");
2896 if (PL_op->op_type == OP_REQUIRE &&
2897 (svp = hv_fetch(GvHVn(PL_incgv), name, len, 0)) &&
2898 *svp != &PL_sv_undef)
2901 /* prepare to compile file */
2903 if (PERL_FILE_IS_ABSOLUTE(name)
2904 || (*name == '.' && (name[1] == '/' ||
2905 (name[1] == '.' && name[2] == '/'))))
2908 tryrsfp = doopen_pmc(name,PERL_SCRIPT_MODE);
2911 AV *ar = GvAVn(PL_incgv);
2915 if ((unixname = tounixspec(name, Nullch)) != Nullch)
2918 namesv = NEWSV(806, 0);
2919 for (i = 0; i <= AvFILL(ar); i++) {
2920 SV *dirsv = *av_fetch(ar, i, TRUE);
2926 if (SvTYPE(SvRV(loader)) == SVt_PVAV) {
2927 loader = *av_fetch((AV *)SvRV(loader), 0, TRUE);
2930 Perl_sv_setpvf(aTHX_ namesv, "/loader/0x%"UVxf"/%s",
2931 PTR2UV(SvANY(loader)), name);
2932 tryname = SvPVX(namesv);
2943 count = call_sv(loader, G_ARRAY);
2953 if (SvROK(arg) && SvTYPE(SvRV(arg)) == SVt_PVGV) {
2957 if (SvTYPE(arg) == SVt_PVGV) {
2958 IO *io = GvIO((GV *)arg);
2963 tryrsfp = IoIFP(io);
2964 if (IoTYPE(io) == '|') {
2965 /* reading from a child process doesn't
2966 nest -- when returning from reading
2967 the inner module, the outer one is
2968 unreadable (closed?) I've tried to
2969 save the gv to manage the lifespan of
2970 the pipe, but this didn't help. XXX */
2971 filter_child_proc = (GV *)arg;
2972 (void)SvREFCNT_inc(filter_child_proc);
2975 if (IoOFP(io) && IoOFP(io) != IoIFP(io)) {
2976 PerlIO_close(IoOFP(io));
2988 if (SvROK(arg) && SvTYPE(SvRV(arg)) == SVt_PVCV) {
2990 (void)SvREFCNT_inc(filter_sub);
2993 filter_state = SP[i];
2994 (void)SvREFCNT_inc(filter_state);
2998 tryrsfp = PerlIO_open("/dev/null",
3012 filter_has_file = 0;
3013 if (filter_child_proc) {
3014 SvREFCNT_dec(filter_child_proc);
3015 filter_child_proc = 0;
3018 SvREFCNT_dec(filter_state);
3022 SvREFCNT_dec(filter_sub);
3027 char *dir = SvPVx(dirsv, n_a);
3030 if ((unixdir = tounixpath(dir, Nullch)) == Nullch)
3032 sv_setpv(namesv, unixdir);
3033 sv_catpv(namesv, unixname);
3035 Perl_sv_setpvf(aTHX_ namesv, "%s/%s", dir, name);
3037 TAINT_PROPER("require");
3038 tryname = SvPVX(namesv);
3039 tryrsfp = doopen_pmc(tryname, PERL_SCRIPT_MODE);
3041 if (tryname[0] == '.' && tryname[1] == '/')
3049 SAVECOPFILE(&PL_compiling);
3050 CopFILE_set(&PL_compiling, tryrsfp ? tryname : name);
3051 SvREFCNT_dec(namesv);
3053 if (PL_op->op_type == OP_REQUIRE) {
3054 char *msgstr = name;
3055 if (namesv) { /* did we lookup @INC? */
3056 SV *msg = sv_2mortal(newSVpv(msgstr,0));
3057 SV *dirmsgsv = NEWSV(0, 0);
3058 AV *ar = GvAVn(PL_incgv);
3060 sv_catpvn(msg, " in @INC", 8);
3061 if (instr(SvPVX(msg), ".h "))
3062 sv_catpv(msg, " (change .h to .ph maybe?)");
3063 if (instr(SvPVX(msg), ".ph "))
3064 sv_catpv(msg, " (did you run h2ph?)");
3065 sv_catpv(msg, " (@INC contains:");
3066 for (i = 0; i <= AvFILL(ar); i++) {
3067 char *dir = SvPVx(*av_fetch(ar, i, TRUE), n_a);
3068 Perl_sv_setpvf(aTHX_ dirmsgsv, " %s", dir);
3069 sv_catsv(msg, dirmsgsv);
3071 sv_catpvn(msg, ")", 1);
3072 SvREFCNT_dec(dirmsgsv);
3073 msgstr = SvPV_nolen(msg);
3075 DIE(aTHX_ "Can't locate %s", msgstr);
3081 SETERRNO(0, SS$_NORMAL);
3083 /* Assume success here to prevent recursive requirement. */
3084 (void)hv_store(GvHVn(PL_incgv), name, strlen(name),
3085 newSVpv(CopFILE(&PL_compiling), 0), 0 );
3089 lex_start(sv_2mortal(newSVpvn("",0)));
3090 SAVEGENERICSV(PL_rsfp_filters);
3091 PL_rsfp_filters = Nullav;
3096 SAVESPTR(PL_compiling.cop_warnings);
3097 if (PL_dowarn & G_WARN_ALL_ON)
3098 PL_compiling.cop_warnings = WARN_ALL ;
3099 else if (PL_dowarn & G_WARN_ALL_OFF)
3100 PL_compiling.cop_warnings = WARN_NONE ;
3102 PL_compiling.cop_warnings = WARN_STD ;
3104 if (filter_sub || filter_child_proc) {
3105 SV *datasv = filter_add(run_user_filter, Nullsv);
3106 IoLINES(datasv) = filter_has_file;
3107 IoFMT_GV(datasv) = (GV *)filter_child_proc;
3108 IoTOP_GV(datasv) = (GV *)filter_state;
3109 IoBOTTOM_GV(datasv) = (GV *)filter_sub;
3112 /* switch to eval mode */
3113 push_return(PL_op->op_next);
3114 PUSHBLOCK(cx, CXt_EVAL, SP);
3115 PUSHEVAL(cx, name, Nullgv);
3117 SAVECOPLINE(&PL_compiling);
3118 CopLINE_set(&PL_compiling, 0);
3122 MUTEX_LOCK(&PL_eval_mutex);
3123 if (PL_eval_owner && PL_eval_owner != thr)
3124 while (PL_eval_owner)
3125 COND_WAIT(&PL_eval_cond, &PL_eval_mutex);
3126 PL_eval_owner = thr;
3127 MUTEX_UNLOCK(&PL_eval_mutex);
3128 #endif /* USE_THREADS */
3129 return DOCATCH(doeval(G_SCALAR, NULL));
3134 return pp_require();
3140 register PERL_CONTEXT *cx;
3142 I32 gimme = GIMME_V, was = PL_sub_generation;
3143 char tmpbuf[TYPE_DIGITS(long) + 12];
3148 if (!SvPV(sv,len) || !len)
3150 TAINT_PROPER("eval");
3156 /* switch to eval mode */
3158 SAVECOPFILE(&PL_compiling);
3159 sprintf(tmpbuf, "_<(eval %lu)", (unsigned long)++PL_evalseq);
3160 CopFILE_set(&PL_compiling, tmpbuf+2);
3161 CopLINE_set(&PL_compiling, 1);
3162 /* XXX For C<eval "...">s within BEGIN {} blocks, this ends up
3163 deleting the eval's FILEGV from the stash before gv_check() runs
3164 (i.e. before run-time proper). To work around the coredump that
3165 ensues, we always turn GvMULTI_on for any globals that were
3166 introduced within evals. See force_ident(). GSAR 96-10-12 */
3167 safestr = savepv(tmpbuf);
3168 SAVEDELETE(PL_defstash, safestr, strlen(safestr));
3170 PL_hints = PL_op->op_targ;
3171 SAVESPTR(PL_compiling.cop_warnings);
3172 if (!specialWARN(PL_compiling.cop_warnings)) {
3173 PL_compiling.cop_warnings = newSVsv(PL_compiling.cop_warnings) ;
3174 SAVEFREESV(PL_compiling.cop_warnings) ;
3177 push_return(PL_op->op_next);
3178 PUSHBLOCK(cx, (CXt_EVAL|CXp_REAL), SP);
3179 PUSHEVAL(cx, 0, Nullgv);
3181 /* prepare to compile string */
3183 if (PERLDB_LINE && PL_curstash != PL_debstash)
3184 save_lines(CopFILEAV(&PL_compiling), PL_linestr);
3187 MUTEX_LOCK(&PL_eval_mutex);
3188 if (PL_eval_owner && PL_eval_owner != thr)
3189 while (PL_eval_owner)
3190 COND_WAIT(&PL_eval_cond, &PL_eval_mutex);
3191 PL_eval_owner = thr;
3192 MUTEX_UNLOCK(&PL_eval_mutex);
3193 #endif /* USE_THREADS */
3194 ret = doeval(gimme, NULL);
3195 if (PERLDB_INTER && was != PL_sub_generation /* Some subs defined here. */
3196 && ret != PL_op->op_next) { /* Successive compilation. */
3197 strcpy(safestr, "_<(eval )"); /* Anything fake and short. */
3199 return DOCATCH(ret);
3209 register PERL_CONTEXT *cx;
3211 U8 save_flags = PL_op -> op_flags;
3216 retop = pop_return();
3219 if (gimme == G_VOID)
3221 else if (gimme == G_SCALAR) {
3224 if (SvFLAGS(TOPs) & SVs_TEMP)
3227 *MARK = sv_mortalcopy(TOPs);
3231 *MARK = &PL_sv_undef;
3236 /* in case LEAVE wipes old return values */
3237 for (mark = newsp + 1; mark <= SP; mark++) {
3238 if (!(SvFLAGS(*mark) & SVs_TEMP)) {
3239 *mark = sv_mortalcopy(*mark);
3240 TAINT_NOT; /* Each item is independent */
3244 PL_curpm = newpm; /* Don't pop $1 et al till now */
3246 if (AvFILLp(PL_comppad_name) >= 0)
3250 assert(CvDEPTH(PL_compcv) == 1);
3252 CvDEPTH(PL_compcv) = 0;
3255 if (optype == OP_REQUIRE &&
3256 !(gimme == G_SCALAR ? SvTRUE(*SP) : SP > newsp))
3258 /* Unassume the success we assumed earlier. */
3259 char *name = cx->blk_eval.old_name;
3260 (void)hv_delete(GvHVn(PL_incgv), name, strlen(name), G_DISCARD);
3261 retop = Perl_die(aTHX_ "%s did not return a true value", name);
3262 /* die_where() did LEAVE, or we won't be here */
3266 if (!(save_flags & OPf_SPECIAL))
3276 register PERL_CONTEXT *cx;
3277 I32 gimme = GIMME_V;
3282 push_return(cLOGOP->op_other->op_next);
3283 PUSHBLOCK(cx, CXt_EVAL, SP);
3285 PL_eval_root = PL_op; /* Only needed so that goto works right. */
3287 PL_in_eval = EVAL_INEVAL;
3290 return DOCATCH(PL_op->op_next);
3300 register PERL_CONTEXT *cx;
3308 if (gimme == G_VOID)
3310 else if (gimme == G_SCALAR) {
3313 if (SvFLAGS(TOPs) & (SVs_PADTMP|SVs_TEMP))
3316 *MARK = sv_mortalcopy(TOPs);
3320 *MARK = &PL_sv_undef;
3325 /* in case LEAVE wipes old return values */
3326 for (mark = newsp + 1; mark <= SP; mark++) {
3327 if (!(SvFLAGS(*mark) & (SVs_PADTMP|SVs_TEMP))) {
3328 *mark = sv_mortalcopy(*mark);
3329 TAINT_NOT; /* Each item is independent */
3333 PL_curpm = newpm; /* Don't pop $1 et al till now */
3341 S_doparseform(pTHX_ SV *sv)
3344 register char *s = SvPV_force(sv, len);
3345 register char *send = s + len;
3346 register char *base;
3347 register I32 skipspaces = 0;
3350 bool postspace = FALSE;
3358 Perl_croak(aTHX_ "Null picture in formline");
3360 New(804, fops, (send - s)*3+10, U16); /* Almost certainly too long... */
3365 *fpc++ = FF_LINEMARK;
3366 noblank = repeat = FALSE;
3384 case ' ': case '\t':
3395 *fpc++ = FF_LITERAL;
3403 *fpc++ = skipspaces;
3407 *fpc++ = FF_NEWLINE;
3411 arg = fpc - linepc + 1;
3418 *fpc++ = FF_LINEMARK;
3419 noblank = repeat = FALSE;
3428 ischop = s[-1] == '^';
3434 arg = (s - base) - 1;
3436 *fpc++ = FF_LITERAL;
3445 *fpc++ = FF_LINEGLOB;
3447 else if (*s == '#' || (*s == '.' && s[1] == '#')) {
3448 arg = ischop ? 512 : 0;
3458 arg |= 256 + (s - f);
3460 *fpc++ = s - base; /* fieldsize for FETCH */
3461 *fpc++ = FF_DECIMAL;
3466 bool ismore = FALSE;
3469 while (*++s == '>') ;
3470 prespace = FF_SPACE;
3472 else if (*s == '|') {
3473 while (*++s == '|') ;
3474 prespace = FF_HALFSPACE;
3479 while (*++s == '<') ;
3482 if (*s == '.' && s[1] == '.' && s[2] == '.') {
3486 *fpc++ = s - base; /* fieldsize for FETCH */
3488 *fpc++ = ischop ? FF_CHECKCHOP : FF_CHECKNL;
3506 { /* need to jump to the next word */
3508 z = WORD_ALIGN - SvCUR(sv) % WORD_ALIGN;
3509 SvGROW(sv, SvCUR(sv) + z + arg * sizeof(U16) + 4);
3510 s = SvPVX(sv) + SvCUR(sv) + z;
3512 Copy(fops, s, arg, U16);
3514 sv_magic(sv, Nullsv, 'f', Nullch, 0);
3519 * The rest of this file was derived from source code contributed
3522 * NOTE: this code was derived from Tom Horsley's qsort replacement
3523 * and should not be confused with the original code.
3526 /* Copyright (C) Tom Horsley, 1997. All rights reserved.
3528 Permission granted to distribute under the same terms as perl which are
3531 This program is free software; you can redistribute it and/or modify
3532 it under the terms of either:
3534 a) the GNU General Public License as published by the Free
3535 Software Foundation; either version 1, or (at your option) any
3538 b) the "Artistic License" which comes with this Kit.
3540 Details on the perl license can be found in the perl source code which
3541 may be located via the www.perl.com web page.
3543 This is the most wonderfulest possible qsort I can come up with (and
3544 still be mostly portable) My (limited) tests indicate it consistently
3545 does about 20% fewer calls to compare than does the qsort in the Visual
3546 C++ library, other vendors may vary.
3548 Some of the ideas in here can be found in "Algorithms" by Sedgewick,
3549 others I invented myself (or more likely re-invented since they seemed
3550 pretty obvious once I watched the algorithm operate for a while).
3552 Most of this code was written while watching the Marlins sweep the Giants
3553 in the 1997 National League Playoffs - no Braves fans allowed to use this
3554 code (just kidding :-).
3556 I realize that if I wanted to be true to the perl tradition, the only
3557 comment in this file would be something like:
3559 ...they shuffled back towards the rear of the line. 'No, not at the
3560 rear!' the slave-driver shouted. 'Three files up. And stay there...
3562 However, I really needed to violate that tradition just so I could keep
3563 track of what happens myself, not to mention some poor fool trying to
3564 understand this years from now :-).
3567 /* ********************************************************** Configuration */
3569 #ifndef QSORT_ORDER_GUESS
3570 #define QSORT_ORDER_GUESS 2 /* Select doubling version of the netBSD trick */
3573 /* QSORT_MAX_STACK is the largest number of partitions that can be stacked up for
3574 future processing - a good max upper bound is log base 2 of memory size
3575 (32 on 32 bit machines, 64 on 64 bit machines, etc). In reality can
3576 safely be smaller than that since the program is taking up some space and
3577 most operating systems only let you grab some subset of contiguous
3578 memory (not to mention that you are normally sorting data larger than
3579 1 byte element size :-).
3581 #ifndef QSORT_MAX_STACK
3582 #define QSORT_MAX_STACK 32
3585 /* QSORT_BREAK_EVEN is the size of the largest partition we should insertion sort.
3586 Anything bigger and we use qsort. If you make this too small, the qsort
3587 will probably break (or become less efficient), because it doesn't expect
3588 the middle element of a partition to be the same as the right or left -
3589 you have been warned).
3591 #ifndef QSORT_BREAK_EVEN
3592 #define QSORT_BREAK_EVEN 6
3595 /* ************************************************************* Data Types */
3597 /* hold left and right index values of a partition waiting to be sorted (the
3598 partition includes both left and right - right is NOT one past the end or
3599 anything like that).
3601 struct partition_stack_entry {
3604 #ifdef QSORT_ORDER_GUESS
3605 int qsort_break_even;
3609 /* ******************************************************* Shorthand Macros */
3611 /* Note that these macros will be used from inside the qsort function where
3612 we happen to know that the variable 'elt_size' contains the size of an
3613 array element and the variable 'temp' points to enough space to hold a
3614 temp element and the variable 'array' points to the array being sorted
3615 and 'compare' is the pointer to the compare routine.
3617 Also note that there are very many highly architecture specific ways
3618 these might be sped up, but this is simply the most generally portable
3619 code I could think of.
3622 /* Return < 0 == 0 or > 0 as the value of elt1 is < elt2, == elt2, > elt2
3624 #define qsort_cmp(elt1, elt2) \
3625 ((*compare)(aTHXo_ array[elt1], array[elt2]))
3627 #ifdef QSORT_ORDER_GUESS
3628 #define QSORT_NOTICE_SWAP swapped++;
3630 #define QSORT_NOTICE_SWAP
3633 /* swaps contents of array elements elt1, elt2.
3635 #define qsort_swap(elt1, elt2) \
3638 temp = array[elt1]; \
3639 array[elt1] = array[elt2]; \
3640 array[elt2] = temp; \
3643 /* rotate contents of elt1, elt2, elt3 such that elt1 gets elt2, elt2 gets
3644 elt3 and elt3 gets elt1.
3646 #define qsort_rotate(elt1, elt2, elt3) \
3649 temp = array[elt1]; \
3650 array[elt1] = array[elt2]; \
3651 array[elt2] = array[elt3]; \
3652 array[elt3] = temp; \
3655 /* ************************************************************ Debug stuff */
3662 return; /* good place to set a breakpoint */
3665 #define qsort_assert(t) (void)( (t) || (break_here(), 0) )
3668 doqsort_all_asserts(
3672 int (*compare)(const void * elt1, const void * elt2),
3673 int pc_left, int pc_right, int u_left, int u_right)
3677 qsort_assert(pc_left <= pc_right);
3678 qsort_assert(u_right < pc_left);
3679 qsort_assert(pc_right < u_left);
3680 for (i = u_right + 1; i < pc_left; ++i) {
3681 qsort_assert(qsort_cmp(i, pc_left) < 0);
3683 for (i = pc_left; i < pc_right; ++i) {
3684 qsort_assert(qsort_cmp(i, pc_right) == 0);
3686 for (i = pc_right + 1; i < u_left; ++i) {
3687 qsort_assert(qsort_cmp(pc_right, i) < 0);
3691 #define qsort_all_asserts(PC_LEFT, PC_RIGHT, U_LEFT, U_RIGHT) \
3692 doqsort_all_asserts(array, num_elts, elt_size, compare, \
3693 PC_LEFT, PC_RIGHT, U_LEFT, U_RIGHT)
3697 #define qsort_assert(t) ((void)0)
3699 #define qsort_all_asserts(PC_LEFT, PC_RIGHT, U_LEFT, U_RIGHT) ((void)0)
3703 /* ****************************************************************** qsort */
3706 S_qsortsv(pTHX_ SV ** array, size_t num_elts, SVCOMPARE_t compare)
3710 struct partition_stack_entry partition_stack[QSORT_MAX_STACK];
3711 int next_stack_entry = 0;
3715 #ifdef QSORT_ORDER_GUESS
3716 int qsort_break_even;
3720 /* Make sure we actually have work to do.
3722 if (num_elts <= 1) {
3726 /* Setup the initial partition definition and fall into the sorting loop
3729 part_right = (int)(num_elts - 1);
3730 #ifdef QSORT_ORDER_GUESS
3731 qsort_break_even = QSORT_BREAK_EVEN;
3733 #define qsort_break_even QSORT_BREAK_EVEN
3736 if ((part_right - part_left) >= qsort_break_even) {
3737 /* OK, this is gonna get hairy, so lets try to document all the
3738 concepts and abbreviations and variables and what they keep
3741 pc: pivot chunk - the set of array elements we accumulate in the
3742 middle of the partition, all equal in value to the original
3743 pivot element selected. The pc is defined by:
3745 pc_left - the leftmost array index of the pc
3746 pc_right - the rightmost array index of the pc
3748 we start with pc_left == pc_right and only one element
3749 in the pivot chunk (but it can grow during the scan).
3751 u: uncompared elements - the set of elements in the partition
3752 we have not yet compared to the pivot value. There are two
3753 uncompared sets during the scan - one to the left of the pc
3754 and one to the right.
3756 u_right - the rightmost index of the left side's uncompared set
3757 u_left - the leftmost index of the right side's uncompared set
3759 The leftmost index of the left sides's uncompared set
3760 doesn't need its own variable because it is always defined
3761 by the leftmost edge of the whole partition (part_left). The
3762 same goes for the rightmost edge of the right partition
3765 We know there are no uncompared elements on the left once we
3766 get u_right < part_left and no uncompared elements on the
3767 right once u_left > part_right. When both these conditions
3768 are met, we have completed the scan of the partition.
3770 Any elements which are between the pivot chunk and the
3771 uncompared elements should be less than the pivot value on
3772 the left side and greater than the pivot value on the right
3773 side (in fact, the goal of the whole algorithm is to arrange
3774 for that to be true and make the groups of less-than and
3775 greater-then elements into new partitions to sort again).
3777 As you marvel at the complexity of the code and wonder why it
3778 has to be so confusing. Consider some of the things this level
3779 of confusion brings:
3781 Once I do a compare, I squeeze every ounce of juice out of it. I
3782 never do compare calls I don't have to do, and I certainly never
3785 I also never swap any elements unless I can prove there is a
3786 good reason. Many sort algorithms will swap a known value with
3787 an uncompared value just to get things in the right place (or
3788 avoid complexity :-), but that uncompared value, once it gets
3789 compared, may then have to be swapped again. A lot of the
3790 complexity of this code is due to the fact that it never swaps
3791 anything except compared values, and it only swaps them when the
3792 compare shows they are out of position.
3794 int pc_left, pc_right;
3795 int u_right, u_left;
3799 pc_left = ((part_left + part_right) / 2);
3801 u_right = pc_left - 1;
3802 u_left = pc_right + 1;
3804 /* Qsort works best when the pivot value is also the median value
3805 in the partition (unfortunately you can't find the median value
3806 without first sorting :-), so to give the algorithm a helping
3807 hand, we pick 3 elements and sort them and use the median value
3808 of that tiny set as the pivot value.
3810 Some versions of qsort like to use the left middle and right as
3811 the 3 elements to sort so they can insure the ends of the
3812 partition will contain values which will stop the scan in the
3813 compare loop, but when you have to call an arbitrarily complex
3814 routine to do a compare, its really better to just keep track of
3815 array index values to know when you hit the edge of the
3816 partition and avoid the extra compare. An even better reason to
3817 avoid using a compare call is the fact that you can drop off the
3818 edge of the array if someone foolishly provides you with an
3819 unstable compare function that doesn't always provide consistent
3822 So, since it is simpler for us to compare the three adjacent
3823 elements in the middle of the partition, those are the ones we
3824 pick here (conveniently pointed at by u_right, pc_left, and
3825 u_left). The values of the left, center, and right elements
3826 are refered to as l c and r in the following comments.
3829 #ifdef QSORT_ORDER_GUESS
3832 s = qsort_cmp(u_right, pc_left);
3835 s = qsort_cmp(pc_left, u_left);
3836 /* if l < c, c < r - already in order - nothing to do */
3838 /* l < c, c == r - already in order, pc grows */
3840 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3842 /* l < c, c > r - need to know more */
3843 s = qsort_cmp(u_right, u_left);
3845 /* l < c, c > r, l < r - swap c & r to get ordered */
3846 qsort_swap(pc_left, u_left);
3847 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3848 } else if (s == 0) {
3849 /* l < c, c > r, l == r - swap c&r, grow pc */
3850 qsort_swap(pc_left, u_left);
3852 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3854 /* l < c, c > r, l > r - make lcr into rlc to get ordered */
3855 qsort_rotate(pc_left, u_right, u_left);
3856 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3859 } else if (s == 0) {
3861 s = qsort_cmp(pc_left, u_left);
3863 /* l == c, c < r - already in order, grow pc */
3865 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3866 } else if (s == 0) {
3867 /* l == c, c == r - already in order, grow pc both ways */
3870 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3872 /* l == c, c > r - swap l & r, grow pc */
3873 qsort_swap(u_right, u_left);
3875 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3879 s = qsort_cmp(pc_left, u_left);
3881 /* l > c, c < r - need to know more */
3882 s = qsort_cmp(u_right, u_left);
3884 /* l > c, c < r, l < r - swap l & c to get ordered */
3885 qsort_swap(u_right, pc_left);
3886 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3887 } else if (s == 0) {
3888 /* l > c, c < r, l == r - swap l & c, grow pc */
3889 qsort_swap(u_right, pc_left);
3891 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3893 /* l > c, c < r, l > r - rotate lcr into crl to order */
3894 qsort_rotate(u_right, pc_left, u_left);
3895 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3897 } else if (s == 0) {
3898 /* l > c, c == r - swap ends, grow pc */
3899 qsort_swap(u_right, u_left);
3901 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3903 /* l > c, c > r - swap ends to get in order */
3904 qsort_swap(u_right, u_left);
3905 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3908 /* We now know the 3 middle elements have been compared and
3909 arranged in the desired order, so we can shrink the uncompared
3914 qsort_all_asserts(pc_left, pc_right, u_left, u_right);
3916 /* The above massive nested if was the simple part :-). We now have
3917 the middle 3 elements ordered and we need to scan through the
3918 uncompared sets on either side, swapping elements that are on
3919 the wrong side or simply shuffling equal elements around to get
3920 all equal elements into the pivot chunk.
3924 int still_work_on_left;
3925 int still_work_on_right;
3927 /* Scan the uncompared values on the left. If I find a value
3928 equal to the pivot value, move it over so it is adjacent to
3929 the pivot chunk and expand the pivot chunk. If I find a value
3930 less than the pivot value, then just leave it - its already
3931 on the correct side of the partition. If I find a greater
3932 value, then stop the scan.
3934 while (still_work_on_left = (u_right >= part_left)) {
3935 s = qsort_cmp(u_right, pc_left);
3938 } else if (s == 0) {
3940 if (pc_left != u_right) {
3941 qsort_swap(u_right, pc_left);
3947 qsort_assert(u_right < pc_left);
3948 qsort_assert(pc_left <= pc_right);
3949 qsort_assert(qsort_cmp(u_right + 1, pc_left) <= 0);
3950 qsort_assert(qsort_cmp(pc_left, pc_right) == 0);
3953 /* Do a mirror image scan of uncompared values on the right
3955 while (still_work_on_right = (u_left <= part_right)) {
3956 s = qsort_cmp(pc_right, u_left);
3959 } else if (s == 0) {
3961 if (pc_right != u_left) {
3962 qsort_swap(pc_right, u_left);
3968 qsort_assert(u_left > pc_right);
3969 qsort_assert(pc_left <= pc_right);
3970 qsort_assert(qsort_cmp(pc_right, u_left - 1) <= 0);
3971 qsort_assert(qsort_cmp(pc_left, pc_right) == 0);
3974 if (still_work_on_left) {
3975 /* I know I have a value on the left side which needs to be
3976 on the right side, but I need to know more to decide
3977 exactly the best thing to do with it.
3979 if (still_work_on_right) {
3980 /* I know I have values on both side which are out of
3981 position. This is a big win because I kill two birds
3982 with one swap (so to speak). I can advance the
3983 uncompared pointers on both sides after swapping both
3984 of them into the right place.
3986 qsort_swap(u_right, u_left);
3989 qsort_all_asserts(pc_left, pc_right, u_left, u_right);
3991 /* I have an out of position value on the left, but the
3992 right is fully scanned, so I "slide" the pivot chunk
3993 and any less-than values left one to make room for the
3994 greater value over on the right. If the out of position
3995 value is immediately adjacent to the pivot chunk (there
3996 are no less-than values), I can do that with a swap,
3997 otherwise, I have to rotate one of the less than values
3998 into the former position of the out of position value
3999 and the right end of the pivot chunk into the left end
4003 if (pc_left == u_right) {
4004 qsort_swap(u_right, pc_right);
4005 qsort_all_asserts(pc_left, pc_right-1, u_left, u_right-1);
4007 qsort_rotate(u_right, pc_left, pc_right);
4008 qsort_all_asserts(pc_left, pc_right-1, u_left, u_right-1);
4013 } else if (still_work_on_right) {
4014 /* Mirror image of complex case above: I have an out of
4015 position value on the right, but the left is fully
4016 scanned, so I need to shuffle things around to make room
4017 for the right value on the left.
4020 if (pc_right == u_left) {
4021 qsort_swap(u_left, pc_left);
4022 qsort_all_asserts(pc_left+1, pc_right, u_left+1, u_right);
4024 qsort_rotate(pc_right, pc_left, u_left);
4025 qsort_all_asserts(pc_left+1, pc_right, u_left+1, u_right);
4030 /* No more scanning required on either side of partition,
4031 break out of loop and figure out next set of partitions
4037 /* The elements in the pivot chunk are now in the right place. They
4038 will never move or be compared again. All I have to do is decide
4039 what to do with the stuff to the left and right of the pivot
4042 Notes on the QSORT_ORDER_GUESS ifdef code:
4044 1. If I just built these partitions without swapping any (or
4045 very many) elements, there is a chance that the elements are
4046 already ordered properly (being properly ordered will
4047 certainly result in no swapping, but the converse can't be
4050 2. A (properly written) insertion sort will run faster on
4051 already ordered data than qsort will.
4053 3. Perhaps there is some way to make a good guess about
4054 switching to an insertion sort earlier than partition size 6
4055 (for instance - we could save the partition size on the stack
4056 and increase the size each time we find we didn't swap, thus
4057 switching to insertion sort earlier for partitions with a
4058 history of not swapping).
4060 4. Naturally, if I just switch right away, it will make
4061 artificial benchmarks with pure ascending (or descending)
4062 data look really good, but is that a good reason in general?
4066 #ifdef QSORT_ORDER_GUESS
4068 #if QSORT_ORDER_GUESS == 1
4069 qsort_break_even = (part_right - part_left) + 1;
4071 #if QSORT_ORDER_GUESS == 2
4072 qsort_break_even *= 2;
4074 #if QSORT_ORDER_GUESS == 3
4075 int prev_break = qsort_break_even;
4076 qsort_break_even *= qsort_break_even;
4077 if (qsort_break_even < prev_break) {
4078 qsort_break_even = (part_right - part_left) + 1;
4082 qsort_break_even = QSORT_BREAK_EVEN;
4086 if (part_left < pc_left) {
4087 /* There are elements on the left which need more processing.
4088 Check the right as well before deciding what to do.
4090 if (pc_right < part_right) {
4091 /* We have two partitions to be sorted. Stack the biggest one
4092 and process the smallest one on the next iteration. This
4093 minimizes the stack height by insuring that any additional
4094 stack entries must come from the smallest partition which
4095 (because it is smallest) will have the fewest
4096 opportunities to generate additional stack entries.
4098 if ((part_right - pc_right) > (pc_left - part_left)) {
4099 /* stack the right partition, process the left */
4100 partition_stack[next_stack_entry].left = pc_right + 1;
4101 partition_stack[next_stack_entry].right = part_right;
4102 #ifdef QSORT_ORDER_GUESS
4103 partition_stack[next_stack_entry].qsort_break_even = qsort_break_even;
4105 part_right = pc_left - 1;
4107 /* stack the left partition, process the right */
4108 partition_stack[next_stack_entry].left = part_left;
4109 partition_stack[next_stack_entry].right = pc_left - 1;
4110 #ifdef QSORT_ORDER_GUESS
4111 partition_stack[next_stack_entry].qsort_break_even = qsort_break_even;
4113 part_left = pc_right + 1;
4115 qsort_assert(next_stack_entry < QSORT_MAX_STACK);
4118 /* The elements on the left are the only remaining elements
4119 that need sorting, arrange for them to be processed as the
4122 part_right = pc_left - 1;
4124 } else if (pc_right < part_right) {
4125 /* There is only one chunk on the right to be sorted, make it
4126 the new partition and loop back around.
4128 part_left = pc_right + 1;
4130 /* This whole partition wound up in the pivot chunk, so
4131 we need to get a new partition off the stack.
4133 if (next_stack_entry == 0) {
4134 /* the stack is empty - we are done */
4138 part_left = partition_stack[next_stack_entry].left;
4139 part_right = partition_stack[next_stack_entry].right;
4140 #ifdef QSORT_ORDER_GUESS
4141 qsort_break_even = partition_stack[next_stack_entry].qsort_break_even;
4145 /* This partition is too small to fool with qsort complexity, just
4146 do an ordinary insertion sort to minimize overhead.
4149 /* Assume 1st element is in right place already, and start checking
4150 at 2nd element to see where it should be inserted.
4152 for (i = part_left + 1; i <= part_right; ++i) {
4154 /* Scan (backwards - just in case 'i' is already in right place)
4155 through the elements already sorted to see if the ith element
4156 belongs ahead of one of them.
4158 for (j = i - 1; j >= part_left; --j) {
4159 if (qsort_cmp(i, j) >= 0) {
4160 /* i belongs right after j
4167 /* Looks like we really need to move some things
4171 for (k = i - 1; k >= j; --k)
4172 array[k + 1] = array[k];
4177 /* That partition is now sorted, grab the next one, or get out
4178 of the loop if there aren't any more.
4181 if (next_stack_entry == 0) {
4182 /* the stack is empty - we are done */
4186 part_left = partition_stack[next_stack_entry].left;
4187 part_right = partition_stack[next_stack_entry].right;
4188 #ifdef QSORT_ORDER_GUESS
4189 qsort_break_even = partition_stack[next_stack_entry].qsort_break_even;
4194 /* Believe it or not, the array is sorted at this point! */
4206 sortcv(pTHXo_ SV *a, SV *b)
4209 I32 oldsaveix = PL_savestack_ix;
4210 I32 oldscopeix = PL_scopestack_ix;
4212 GvSV(PL_firstgv) = a;
4213 GvSV(PL_secondgv) = b;
4214 PL_stack_sp = PL_stack_base;
4217 if (PL_stack_sp != PL_stack_base + 1)
4218 Perl_croak(aTHX_ "Sort subroutine didn't return single value");
4219 if (!SvNIOKp(*PL_stack_sp))
4220 Perl_croak(aTHX_ "Sort subroutine didn't return a numeric value");
4221 result = SvIV(*PL_stack_sp);
4222 while (PL_scopestack_ix > oldscopeix) {
4225 leave_scope(oldsaveix);
4230 sortcv_stacked(pTHXo_ SV *a, SV *b)
4233 I32 oldsaveix = PL_savestack_ix;
4234 I32 oldscopeix = PL_scopestack_ix;
4239 av = (AV*)PL_curpad[0];
4241 av = GvAV(PL_defgv);
4244 if (AvMAX(av) < 1) {
4245 SV** ary = AvALLOC(av);
4246 if (AvARRAY(av) != ary) {
4247 AvMAX(av) += AvARRAY(av) - AvALLOC(av);
4248 SvPVX(av) = (char*)ary;
4250 if (AvMAX(av) < 1) {
4253 SvPVX(av) = (char*)ary;
4260 PL_stack_sp = PL_stack_base;
4263 if (PL_stack_sp != PL_stack_base + 1)
4264 Perl_croak(aTHX_ "Sort subroutine didn't return single value");
4265 if (!SvNIOKp(*PL_stack_sp))
4266 Perl_croak(aTHX_ "Sort subroutine didn't return a numeric value");
4267 result = SvIV(*PL_stack_sp);
4268 while (PL_scopestack_ix > oldscopeix) {
4271 leave_scope(oldsaveix);
4276 sortcv_xsub(pTHXo_ SV *a, SV *b)
4279 I32 oldsaveix = PL_savestack_ix;
4280 I32 oldscopeix = PL_scopestack_ix;
4282 CV *cv=(CV*)PL_sortcop;
4290 (void)(*CvXSUB(cv))(aTHXo_ cv);
4291 if (PL_stack_sp != PL_stack_base + 1)
4292 Perl_croak(aTHX_ "Sort subroutine didn't return single value");
4293 if (!SvNIOKp(*PL_stack_sp))
4294 Perl_croak(aTHX_ "Sort subroutine didn't return a numeric value");
4295 result = SvIV(*PL_stack_sp);
4296 while (PL_scopestack_ix > oldscopeix) {
4299 leave_scope(oldsaveix);
4305 sv_ncmp(pTHXo_ SV *a, SV *b)
4309 return nv1 < nv2 ? -1 : nv1 > nv2 ? 1 : 0;
4313 sv_i_ncmp(pTHXo_ SV *a, SV *b)
4317 return iv1 < iv2 ? -1 : iv1 > iv2 ? 1 : 0;
4319 #define tryCALL_AMAGICbin(left,right,meth,svp) STMT_START { \
4321 if (PL_amagic_generation) { \
4322 if (SvAMAGIC(left)||SvAMAGIC(right))\
4323 *svp = amagic_call(left, \
4331 amagic_ncmp(pTHXo_ register SV *a, register SV *b)
4334 tryCALL_AMAGICbin(a,b,ncmp,&tmpsv);
4339 I32 i = SvIVX(tmpsv);
4349 return sv_ncmp(aTHXo_ a, b);
4353 amagic_i_ncmp(pTHXo_ register SV *a, register SV *b)
4356 tryCALL_AMAGICbin(a,b,ncmp,&tmpsv);
4361 I32 i = SvIVX(tmpsv);
4371 return sv_i_ncmp(aTHXo_ a, b);
4375 amagic_cmp(pTHXo_ register SV *str1, register SV *str2)
4378 tryCALL_AMAGICbin(str1,str2,scmp,&tmpsv);
4383 I32 i = SvIVX(tmpsv);
4393 return sv_cmp(str1, str2);
4397 amagic_cmp_locale(pTHXo_ register SV *str1, register SV *str2)
4400 tryCALL_AMAGICbin(str1,str2,scmp,&tmpsv);
4405 I32 i = SvIVX(tmpsv);
4415 return sv_cmp_locale(str1, str2);
4419 run_user_filter(pTHXo_ int idx, SV *buf_sv, int maxlen)
4421 SV *datasv = FILTER_DATA(idx);
4422 int filter_has_file = IoLINES(datasv);
4423 GV *filter_child_proc = (GV *)IoFMT_GV(datasv);
4424 SV *filter_state = (SV *)IoTOP_GV(datasv);
4425 SV *filter_sub = (SV *)IoBOTTOM_GV(datasv);
4428 /* I was having segfault trouble under Linux 2.2.5 after a
4429 parse error occured. (Had to hack around it with a test
4430 for PL_error_count == 0.) Solaris doesn't segfault --
4431 not sure where the trouble is yet. XXX */
4433 if (filter_has_file) {
4434 len = FILTER_READ(idx+1, buf_sv, maxlen);
4437 if (filter_sub && len >= 0) {
4448 PUSHs(sv_2mortal(newSViv(maxlen)));
4450 PUSHs(filter_state);
4453 count = call_sv(filter_sub, G_SCALAR);
4469 IoLINES(datasv) = 0;
4470 if (filter_child_proc) {
4471 SvREFCNT_dec(filter_child_proc);
4472 IoFMT_GV(datasv) = Nullgv;
4475 SvREFCNT_dec(filter_state);
4476 IoTOP_GV(datasv) = Nullgv;
4479 SvREFCNT_dec(filter_sub);
4480 IoBOTTOM_GV(datasv) = Nullgv;
4482 filter_del(run_user_filter);
4491 sv_cmp_locale_static(pTHXo_ register SV *str1, register SV *str2)
4493 return sv_cmp_locale(str1, str2);
4497 sv_cmp_static(pTHXo_ register SV *str1, register SV *str2)
4499 return sv_cmp(str1, str2);
4502 #endif /* PERL_OBJECT */