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_ "%_", 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",
2396 CALL_FPTR(PL_op->op_ppaddr)(aTHX);
2404 if (!retop) retop = PL_main_start;
2406 PL_restartop = retop;
2407 PL_do_undump = TRUE;
2411 PL_restartop = 0; /* hmm, must be GNU unexec().. */
2412 PL_do_undump = FALSE;
2428 if (anum == 1 && VMSISH_EXIT)
2432 PL_exit_flags |= PERL_EXIT_EXPECTED;
2434 PUSHs(&PL_sv_undef);
2442 NV value = SvNVx(GvSV(cCOP->cop_gv));
2443 register I32 match = I_32(value);
2446 if (((NV)match) > value)
2447 --match; /* was fractional--truncate other way */
2449 match -= cCOP->uop.scop.scop_offset;
2452 else if (match > cCOP->uop.scop.scop_max)
2453 match = cCOP->uop.scop.scop_max;
2454 PL_op = cCOP->uop.scop.scop_next[match];
2464 PL_op = PL_op->op_next; /* can't assume anything */
2467 match = *(SvPVx(GvSV(cCOP->cop_gv), n_a)) & 255;
2468 match -= cCOP->uop.scop.scop_offset;
2471 else if (match > cCOP->uop.scop.scop_max)
2472 match = cCOP->uop.scop.scop_max;
2473 PL_op = cCOP->uop.scop.scop_next[match];
2482 S_save_lines(pTHX_ AV *array, SV *sv)
2484 register char *s = SvPVX(sv);
2485 register char *send = SvPVX(sv) + SvCUR(sv);
2487 register I32 line = 1;
2489 while (s && s < send) {
2490 SV *tmpstr = NEWSV(85,0);
2492 sv_upgrade(tmpstr, SVt_PVMG);
2493 t = strchr(s, '\n');
2499 sv_setpvn(tmpstr, s, t - s);
2500 av_store(array, line++, tmpstr);
2506 S_docatch_body(pTHX_ va_list args)
2513 S_docatch(pTHX_ OP *o)
2518 volatile PERL_SI *cursi = PL_curstackinfo;
2522 assert(CATCH_GET == TRUE);
2526 CALLPROTECT(aTHX_ pcur_env, &ret, MEMBER_TO_FPTR(S_docatch_body));
2531 if (PL_restartop && cursi == PL_curstackinfo) {
2532 PL_op = PL_restartop;
2547 Perl_sv_compile_2op(pTHX_ SV *sv, OP** startop, char *code, AV** avp)
2548 /* sv Text to convert to OP tree. */
2549 /* startop op_free() this to undo. */
2550 /* code Short string id of the caller. */
2552 dSP; /* Make POPBLOCK work. */
2555 I32 gimme = 0; /* SUSPECT - INITIALZE TO WHAT? NI-S */
2558 OP *oop = PL_op, *rop;
2559 char tmpbuf[TYPE_DIGITS(long) + 12 + 10];
2565 /* switch to eval mode */
2567 if (PL_curcop == &PL_compiling) {
2568 SAVECOPSTASH(&PL_compiling);
2569 CopSTASH_set(&PL_compiling, PL_curstash);
2571 SAVECOPFILE(&PL_compiling);
2572 SAVECOPLINE(&PL_compiling);
2573 sprintf(tmpbuf, "_<(%.10s_eval %lu)", code, (unsigned long)++PL_evalseq);
2574 CopFILE_set(&PL_compiling, tmpbuf+2);
2575 CopLINE_set(&PL_compiling, 1);
2576 /* XXX For C<eval "...">s within BEGIN {} blocks, this ends up
2577 deleting the eval's FILEGV from the stash before gv_check() runs
2578 (i.e. before run-time proper). To work around the coredump that
2579 ensues, we always turn GvMULTI_on for any globals that were
2580 introduced within evals. See force_ident(). GSAR 96-10-12 */
2581 safestr = savepv(tmpbuf);
2582 SAVEDELETE(PL_defstash, safestr, strlen(safestr));
2584 #ifdef OP_IN_REGISTER
2592 PL_op->op_type = OP_ENTEREVAL;
2593 PL_op->op_flags = 0; /* Avoid uninit warning. */
2594 PUSHBLOCK(cx, CXt_EVAL, SP);
2595 PUSHEVAL(cx, 0, Nullgv);
2596 rop = doeval(G_SCALAR, startop);
2597 POPBLOCK(cx,PL_curpm);
2600 (*startop)->op_type = OP_NULL;
2601 (*startop)->op_ppaddr = PL_ppaddr[OP_NULL];
2603 *avp = (AV*)SvREFCNT_inc(PL_comppad);
2605 if (PL_curcop == &PL_compiling)
2606 PL_compiling.op_private = PL_hints;
2607 #ifdef OP_IN_REGISTER
2613 /* With USE_THREADS, eval_owner must be held on entry to doeval */
2615 S_doeval(pTHX_ int gimme, OP** startop)
2623 PL_in_eval = EVAL_INEVAL;
2627 /* set up a scratch pad */
2630 SAVEVPTR(PL_curpad);
2631 SAVESPTR(PL_comppad);
2632 SAVESPTR(PL_comppad_name);
2633 SAVEI32(PL_comppad_name_fill);
2634 SAVEI32(PL_min_intro_pending);
2635 SAVEI32(PL_max_intro_pending);
2638 for (i = cxstack_ix - 1; i >= 0; i--) {
2639 PERL_CONTEXT *cx = &cxstack[i];
2640 if (CxTYPE(cx) == CXt_EVAL)
2642 else if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
2643 caller = cx->blk_sub.cv;
2648 SAVESPTR(PL_compcv);
2649 PL_compcv = (CV*)NEWSV(1104,0);
2650 sv_upgrade((SV *)PL_compcv, SVt_PVCV);
2651 CvEVAL_on(PL_compcv);
2653 CvOWNER(PL_compcv) = 0;
2654 New(666, CvMUTEXP(PL_compcv), 1, perl_mutex);
2655 MUTEX_INIT(CvMUTEXP(PL_compcv));
2656 #endif /* USE_THREADS */
2658 PL_comppad = newAV();
2659 av_push(PL_comppad, Nullsv);
2660 PL_curpad = AvARRAY(PL_comppad);
2661 PL_comppad_name = newAV();
2662 PL_comppad_name_fill = 0;
2663 PL_min_intro_pending = 0;
2666 av_store(PL_comppad_name, 0, newSVpvn("@_", 2));
2667 PL_curpad[0] = (SV*)newAV();
2668 SvPADMY_on(PL_curpad[0]); /* XXX Needed? */
2669 #endif /* USE_THREADS */
2671 comppadlist = newAV();
2672 AvREAL_off(comppadlist);
2673 av_store(comppadlist, 0, (SV*)PL_comppad_name);
2674 av_store(comppadlist, 1, (SV*)PL_comppad);
2675 CvPADLIST(PL_compcv) = comppadlist;
2677 if (!saveop || saveop->op_type != OP_REQUIRE)
2678 CvOUTSIDE(PL_compcv) = (CV*)SvREFCNT_inc(caller);
2680 SAVEFREESV(PL_compcv);
2682 /* make sure we compile in the right package */
2684 if (CopSTASH_ne(PL_curcop, PL_curstash)) {
2685 SAVESPTR(PL_curstash);
2686 PL_curstash = CopSTASH(PL_curcop);
2688 SAVESPTR(PL_beginav);
2689 PL_beginav = newAV();
2690 SAVEFREESV(PL_beginav);
2692 /* try to compile it */
2694 PL_eval_root = Nullop;
2696 PL_curcop = &PL_compiling;
2697 PL_curcop->cop_arybase = 0;
2698 SvREFCNT_dec(PL_rs);
2699 PL_rs = newSVpvn("\n", 1);
2700 if (saveop && saveop->op_flags & OPf_SPECIAL)
2701 PL_in_eval |= EVAL_KEEPERR;
2704 if (yyparse() || PL_error_count || !PL_eval_root) {
2708 I32 optype = 0; /* Might be reset by POPEVAL. */
2713 op_free(PL_eval_root);
2714 PL_eval_root = Nullop;
2716 SP = PL_stack_base + POPMARK; /* pop original mark */
2718 POPBLOCK(cx,PL_curpm);
2724 if (optype == OP_REQUIRE) {
2725 char* msg = SvPVx(ERRSV, n_a);
2726 DIE(aTHX_ "%sCompilation failed in require",
2727 *msg ? msg : "Unknown error\n");
2730 char* msg = SvPVx(ERRSV, n_a);
2732 POPBLOCK(cx,PL_curpm);
2734 Perl_croak(aTHX_ "%sCompilation failed in regexp",
2735 (*msg ? msg : "Unknown error\n"));
2737 SvREFCNT_dec(PL_rs);
2738 PL_rs = SvREFCNT_inc(PL_nrs);
2740 MUTEX_LOCK(&PL_eval_mutex);
2742 COND_SIGNAL(&PL_eval_cond);
2743 MUTEX_UNLOCK(&PL_eval_mutex);
2744 #endif /* USE_THREADS */
2747 SvREFCNT_dec(PL_rs);
2748 PL_rs = SvREFCNT_inc(PL_nrs);
2749 CopLINE_set(&PL_compiling, 0);
2751 *startop = PL_eval_root;
2752 SvREFCNT_dec(CvOUTSIDE(PL_compcv));
2753 CvOUTSIDE(PL_compcv) = Nullcv;
2755 SAVEFREEOP(PL_eval_root);
2757 scalarvoid(PL_eval_root);
2758 else if (gimme & G_ARRAY)
2761 scalar(PL_eval_root);
2763 DEBUG_x(dump_eval());
2765 /* Register with debugger: */
2766 if (PERLDB_INTER && saveop->op_type == OP_REQUIRE) {
2767 CV *cv = get_cv("DB::postponed", FALSE);
2771 XPUSHs((SV*)CopFILEGV(&PL_compiling));
2773 call_sv((SV*)cv, G_DISCARD);
2777 /* compiled okay, so do it */
2779 CvDEPTH(PL_compcv) = 1;
2780 SP = PL_stack_base + POPMARK; /* pop original mark */
2781 PL_op = saveop; /* The caller may need it. */
2783 MUTEX_LOCK(&PL_eval_mutex);
2785 COND_SIGNAL(&PL_eval_cond);
2786 MUTEX_UNLOCK(&PL_eval_mutex);
2787 #endif /* USE_THREADS */
2789 RETURNOP(PL_eval_start);
2793 S_doopen_pmc(pTHX_ const char *name, const char *mode)
2795 STRLEN namelen = strlen(name);
2798 if (namelen > 3 && strEQ(name + namelen - 3, ".pm")) {
2799 SV *pmcsv = Perl_newSVpvf(aTHX_ "%s%c", name, 'c');
2800 char *pmc = SvPV_nolen(pmcsv);
2803 if (PerlLIO_stat(pmc, &pmcstat) < 0) {
2804 fp = PerlIO_open(name, mode);
2807 if (PerlLIO_stat(name, &pmstat) < 0 ||
2808 pmstat.st_mtime < pmcstat.st_mtime)
2810 fp = PerlIO_open(pmc, mode);
2813 fp = PerlIO_open(name, mode);
2816 SvREFCNT_dec(pmcsv);
2819 fp = PerlIO_open(name, mode);
2827 register PERL_CONTEXT *cx;
2832 SV *namesv = Nullsv;
2834 I32 gimme = G_SCALAR;
2835 PerlIO *tryrsfp = 0;
2837 int filter_has_file = 0;
2838 GV *filter_child_proc = 0;
2839 SV *filter_state = 0;
2845 if (SvPOKp(sv) && SvUTF8(sv)) { /* require v5.6.1 */
2847 U8 *s = (U8*)SvPVX(sv);
2848 U8 *end = (U8*)SvPVX(sv) + SvCUR(sv);
2850 rev = utf8_to_uv(s, &len);
2853 ver = utf8_to_uv(s, &len);
2856 sver = utf8_to_uv(s, &len);
2865 if (PERL_REVISION < rev
2866 || (PERL_REVISION == rev
2867 && (PERL_VERSION < ver
2868 || (PERL_VERSION == ver
2869 && PERL_SUBVERSION < sver))))
2871 DIE(aTHX_ "Perl v%"UVuf".%"UVuf".%"UVuf" required--this is only version "
2872 "v%"UVuf".%"UVuf".%"UVuf", stopped", rev, ver, sver, PERL_REVISION,
2873 PERL_VERSION, PERL_SUBVERSION);
2876 else if (!SvPOKp(sv)) { /* require 5.005_03 */
2879 ver = (UV)((n-rev)*1000);
2880 sver = (UV)((((n-rev)*1000 - ver) + 0.0009) * 1000);
2882 if ((NV)PERL_REVISION + ((NV)PERL_VERSION/(NV)1000)
2883 + ((NV)PERL_SUBVERSION/(NV)1000000)
2884 + 0.00000099 < SvNV(sv))
2886 DIE(aTHX_ "Perl v%"UVuf".%"UVuf".%"UVuf" required--this is only version "
2887 "v%"UVuf".%"UVuf".%"UVuf", stopped", rev, ver, sver, PERL_REVISION,
2888 PERL_VERSION, PERL_SUBVERSION);
2893 name = SvPV(sv, len);
2894 if (!(name && len > 0 && *name))
2895 DIE(aTHX_ "Null filename used");
2896 TAINT_PROPER("require");
2897 if (PL_op->op_type == OP_REQUIRE &&
2898 (svp = hv_fetch(GvHVn(PL_incgv), name, len, 0)) &&
2899 *svp != &PL_sv_undef)
2902 /* prepare to compile file */
2904 if (PERL_FILE_IS_ABSOLUTE(name)
2905 || (*name == '.' && (name[1] == '/' ||
2906 (name[1] == '.' && name[2] == '/'))))
2909 tryrsfp = doopen_pmc(name,PERL_SCRIPT_MODE);
2912 AV *ar = GvAVn(PL_incgv);
2916 if ((unixname = tounixspec(name, Nullch)) != Nullch)
2919 namesv = NEWSV(806, 0);
2920 for (i = 0; i <= AvFILL(ar); i++) {
2921 SV *dirsv = *av_fetch(ar, i, TRUE);
2927 if (SvTYPE(SvRV(loader)) == SVt_PVAV) {
2928 loader = *av_fetch((AV *)SvRV(loader), 0, TRUE);
2931 Perl_sv_setpvf(aTHX_ namesv, "/loader/0x%"UVxf"/%s",
2932 PTR2UV(SvANY(loader)), name);
2933 tryname = SvPVX(namesv);
2944 count = call_sv(loader, G_ARRAY);
2954 if (SvROK(arg) && SvTYPE(SvRV(arg)) == SVt_PVGV) {
2958 if (SvTYPE(arg) == SVt_PVGV) {
2959 IO *io = GvIO((GV *)arg);
2964 tryrsfp = IoIFP(io);
2965 if (IoTYPE(io) == '|') {
2966 /* reading from a child process doesn't
2967 nest -- when returning from reading
2968 the inner module, the outer one is
2969 unreadable (closed?) I've tried to
2970 save the gv to manage the lifespan of
2971 the pipe, but this didn't help. XXX */
2972 filter_child_proc = (GV *)arg;
2973 (void)SvREFCNT_inc(filter_child_proc);
2976 if (IoOFP(io) && IoOFP(io) != IoIFP(io)) {
2977 PerlIO_close(IoOFP(io));
2989 if (SvROK(arg) && SvTYPE(SvRV(arg)) == SVt_PVCV) {
2991 (void)SvREFCNT_inc(filter_sub);
2994 filter_state = SP[i];
2995 (void)SvREFCNT_inc(filter_state);
2999 tryrsfp = PerlIO_open("/dev/null",
3013 filter_has_file = 0;
3014 if (filter_child_proc) {
3015 SvREFCNT_dec(filter_child_proc);
3016 filter_child_proc = 0;
3019 SvREFCNT_dec(filter_state);
3023 SvREFCNT_dec(filter_sub);
3028 char *dir = SvPVx(dirsv, n_a);
3031 if ((unixdir = tounixpath(dir, Nullch)) == Nullch)
3033 sv_setpv(namesv, unixdir);
3034 sv_catpv(namesv, unixname);
3036 Perl_sv_setpvf(aTHX_ namesv, "%s/%s", dir, name);
3038 TAINT_PROPER("require");
3039 tryname = SvPVX(namesv);
3040 tryrsfp = doopen_pmc(tryname, PERL_SCRIPT_MODE);
3042 if (tryname[0] == '.' && tryname[1] == '/')
3050 SAVECOPFILE(&PL_compiling);
3051 CopFILE_set(&PL_compiling, tryrsfp ? tryname : name);
3052 SvREFCNT_dec(namesv);
3054 if (PL_op->op_type == OP_REQUIRE) {
3055 char *msgstr = name;
3056 if (namesv) { /* did we lookup @INC? */
3057 SV *msg = sv_2mortal(newSVpv(msgstr,0));
3058 SV *dirmsgsv = NEWSV(0, 0);
3059 AV *ar = GvAVn(PL_incgv);
3061 sv_catpvn(msg, " in @INC", 8);
3062 if (instr(SvPVX(msg), ".h "))
3063 sv_catpv(msg, " (change .h to .ph maybe?)");
3064 if (instr(SvPVX(msg), ".ph "))
3065 sv_catpv(msg, " (did you run h2ph?)");
3066 sv_catpv(msg, " (@INC contains:");
3067 for (i = 0; i <= AvFILL(ar); i++) {
3068 char *dir = SvPVx(*av_fetch(ar, i, TRUE), n_a);
3069 Perl_sv_setpvf(aTHX_ dirmsgsv, " %s", dir);
3070 sv_catsv(msg, dirmsgsv);
3072 sv_catpvn(msg, ")", 1);
3073 SvREFCNT_dec(dirmsgsv);
3074 msgstr = SvPV_nolen(msg);
3076 DIE(aTHX_ "Can't locate %s", msgstr);
3082 SETERRNO(0, SS$_NORMAL);
3084 /* Assume success here to prevent recursive requirement. */
3085 (void)hv_store(GvHVn(PL_incgv), name, strlen(name),
3086 newSVpv(CopFILE(&PL_compiling), 0), 0 );
3090 lex_start(sv_2mortal(newSVpvn("",0)));
3091 SAVEGENERICSV(PL_rsfp_filters);
3092 PL_rsfp_filters = Nullav;
3097 SAVESPTR(PL_compiling.cop_warnings);
3098 if (PL_dowarn & G_WARN_ALL_ON)
3099 PL_compiling.cop_warnings = WARN_ALL ;
3100 else if (PL_dowarn & G_WARN_ALL_OFF)
3101 PL_compiling.cop_warnings = WARN_NONE ;
3103 PL_compiling.cop_warnings = WARN_STD ;
3105 if (filter_sub || filter_child_proc) {
3106 SV *datasv = filter_add(run_user_filter, Nullsv);
3107 IoLINES(datasv) = filter_has_file;
3108 IoFMT_GV(datasv) = (GV *)filter_child_proc;
3109 IoTOP_GV(datasv) = (GV *)filter_state;
3110 IoBOTTOM_GV(datasv) = (GV *)filter_sub;
3113 /* switch to eval mode */
3114 push_return(PL_op->op_next);
3115 PUSHBLOCK(cx, CXt_EVAL, SP);
3116 PUSHEVAL(cx, name, Nullgv);
3118 SAVECOPLINE(&PL_compiling);
3119 CopLINE_set(&PL_compiling, 0);
3123 MUTEX_LOCK(&PL_eval_mutex);
3124 if (PL_eval_owner && PL_eval_owner != thr)
3125 while (PL_eval_owner)
3126 COND_WAIT(&PL_eval_cond, &PL_eval_mutex);
3127 PL_eval_owner = thr;
3128 MUTEX_UNLOCK(&PL_eval_mutex);
3129 #endif /* USE_THREADS */
3130 return DOCATCH(doeval(G_SCALAR, NULL));
3135 return pp_require();
3141 register PERL_CONTEXT *cx;
3143 I32 gimme = GIMME_V, was = PL_sub_generation;
3144 char tmpbuf[TYPE_DIGITS(long) + 12];
3149 if (!SvPV(sv,len) || !len)
3151 TAINT_PROPER("eval");
3157 /* switch to eval mode */
3159 SAVECOPFILE(&PL_compiling);
3160 sprintf(tmpbuf, "_<(eval %lu)", (unsigned long)++PL_evalseq);
3161 CopFILE_set(&PL_compiling, tmpbuf+2);
3162 CopLINE_set(&PL_compiling, 1);
3163 /* XXX For C<eval "...">s within BEGIN {} blocks, this ends up
3164 deleting the eval's FILEGV from the stash before gv_check() runs
3165 (i.e. before run-time proper). To work around the coredump that
3166 ensues, we always turn GvMULTI_on for any globals that were
3167 introduced within evals. See force_ident(). GSAR 96-10-12 */
3168 safestr = savepv(tmpbuf);
3169 SAVEDELETE(PL_defstash, safestr, strlen(safestr));
3171 PL_hints = PL_op->op_targ;
3172 SAVESPTR(PL_compiling.cop_warnings);
3173 if (!specialWARN(PL_compiling.cop_warnings)) {
3174 PL_compiling.cop_warnings = newSVsv(PL_compiling.cop_warnings) ;
3175 SAVEFREESV(PL_compiling.cop_warnings) ;
3178 push_return(PL_op->op_next);
3179 PUSHBLOCK(cx, (CXt_EVAL|CXp_REAL), SP);
3180 PUSHEVAL(cx, 0, Nullgv);
3182 /* prepare to compile string */
3184 if (PERLDB_LINE && PL_curstash != PL_debstash)
3185 save_lines(CopFILEAV(&PL_compiling), PL_linestr);
3188 MUTEX_LOCK(&PL_eval_mutex);
3189 if (PL_eval_owner && PL_eval_owner != thr)
3190 while (PL_eval_owner)
3191 COND_WAIT(&PL_eval_cond, &PL_eval_mutex);
3192 PL_eval_owner = thr;
3193 MUTEX_UNLOCK(&PL_eval_mutex);
3194 #endif /* USE_THREADS */
3195 ret = doeval(gimme, NULL);
3196 if (PERLDB_INTER && was != PL_sub_generation /* Some subs defined here. */
3197 && ret != PL_op->op_next) { /* Successive compilation. */
3198 strcpy(safestr, "_<(eval )"); /* Anything fake and short. */
3200 return DOCATCH(ret);
3210 register PERL_CONTEXT *cx;
3212 U8 save_flags = PL_op -> op_flags;
3217 retop = pop_return();
3220 if (gimme == G_VOID)
3222 else if (gimme == G_SCALAR) {
3225 if (SvFLAGS(TOPs) & SVs_TEMP)
3228 *MARK = sv_mortalcopy(TOPs);
3232 *MARK = &PL_sv_undef;
3237 /* in case LEAVE wipes old return values */
3238 for (mark = newsp + 1; mark <= SP; mark++) {
3239 if (!(SvFLAGS(*mark) & SVs_TEMP)) {
3240 *mark = sv_mortalcopy(*mark);
3241 TAINT_NOT; /* Each item is independent */
3245 PL_curpm = newpm; /* Don't pop $1 et al till now */
3247 if (AvFILLp(PL_comppad_name) >= 0)
3251 assert(CvDEPTH(PL_compcv) == 1);
3253 CvDEPTH(PL_compcv) = 0;
3256 if (optype == OP_REQUIRE &&
3257 !(gimme == G_SCALAR ? SvTRUE(*SP) : SP > newsp))
3259 /* Unassume the success we assumed earlier. */
3260 char *name = cx->blk_eval.old_name;
3261 (void)hv_delete(GvHVn(PL_incgv), name, strlen(name), G_DISCARD);
3262 retop = Perl_die(aTHX_ "%s did not return a true value", name);
3263 /* die_where() did LEAVE, or we won't be here */
3267 if (!(save_flags & OPf_SPECIAL))
3277 register PERL_CONTEXT *cx;
3278 I32 gimme = GIMME_V;
3283 push_return(cLOGOP->op_other->op_next);
3284 PUSHBLOCK(cx, CXt_EVAL, SP);
3286 PL_eval_root = PL_op; /* Only needed so that goto works right. */
3288 PL_in_eval = EVAL_INEVAL;
3291 return DOCATCH(PL_op->op_next);
3301 register PERL_CONTEXT *cx;
3309 if (gimme == G_VOID)
3311 else if (gimme == G_SCALAR) {
3314 if (SvFLAGS(TOPs) & (SVs_PADTMP|SVs_TEMP))
3317 *MARK = sv_mortalcopy(TOPs);
3321 *MARK = &PL_sv_undef;
3326 /* in case LEAVE wipes old return values */
3327 for (mark = newsp + 1; mark <= SP; mark++) {
3328 if (!(SvFLAGS(*mark) & (SVs_PADTMP|SVs_TEMP))) {
3329 *mark = sv_mortalcopy(*mark);
3330 TAINT_NOT; /* Each item is independent */
3334 PL_curpm = newpm; /* Don't pop $1 et al till now */
3342 S_doparseform(pTHX_ SV *sv)
3345 register char *s = SvPV_force(sv, len);
3346 register char *send = s + len;
3347 register char *base;
3348 register I32 skipspaces = 0;
3351 bool postspace = FALSE;
3359 Perl_croak(aTHX_ "Null picture in formline");
3361 New(804, fops, (send - s)*3+10, U16); /* Almost certainly too long... */
3366 *fpc++ = FF_LINEMARK;
3367 noblank = repeat = FALSE;
3385 case ' ': case '\t':
3396 *fpc++ = FF_LITERAL;
3404 *fpc++ = skipspaces;
3408 *fpc++ = FF_NEWLINE;
3412 arg = fpc - linepc + 1;
3419 *fpc++ = FF_LINEMARK;
3420 noblank = repeat = FALSE;
3429 ischop = s[-1] == '^';
3435 arg = (s - base) - 1;
3437 *fpc++ = FF_LITERAL;
3446 *fpc++ = FF_LINEGLOB;
3448 else if (*s == '#' || (*s == '.' && s[1] == '#')) {
3449 arg = ischop ? 512 : 0;
3459 arg |= 256 + (s - f);
3461 *fpc++ = s - base; /* fieldsize for FETCH */
3462 *fpc++ = FF_DECIMAL;
3467 bool ismore = FALSE;
3470 while (*++s == '>') ;
3471 prespace = FF_SPACE;
3473 else if (*s == '|') {
3474 while (*++s == '|') ;
3475 prespace = FF_HALFSPACE;
3480 while (*++s == '<') ;
3483 if (*s == '.' && s[1] == '.' && s[2] == '.') {
3487 *fpc++ = s - base; /* fieldsize for FETCH */
3489 *fpc++ = ischop ? FF_CHECKCHOP : FF_CHECKNL;
3507 { /* need to jump to the next word */
3509 z = WORD_ALIGN - SvCUR(sv) % WORD_ALIGN;
3510 SvGROW(sv, SvCUR(sv) + z + arg * sizeof(U16) + 4);
3511 s = SvPVX(sv) + SvCUR(sv) + z;
3513 Copy(fops, s, arg, U16);
3515 sv_magic(sv, Nullsv, 'f', Nullch, 0);
3520 * The rest of this file was derived from source code contributed
3523 * NOTE: this code was derived from Tom Horsley's qsort replacement
3524 * and should not be confused with the original code.
3527 /* Copyright (C) Tom Horsley, 1997. All rights reserved.
3529 Permission granted to distribute under the same terms as perl which are
3532 This program is free software; you can redistribute it and/or modify
3533 it under the terms of either:
3535 a) the GNU General Public License as published by the Free
3536 Software Foundation; either version 1, or (at your option) any
3539 b) the "Artistic License" which comes with this Kit.
3541 Details on the perl license can be found in the perl source code which
3542 may be located via the www.perl.com web page.
3544 This is the most wonderfulest possible qsort I can come up with (and
3545 still be mostly portable) My (limited) tests indicate it consistently
3546 does about 20% fewer calls to compare than does the qsort in the Visual
3547 C++ library, other vendors may vary.
3549 Some of the ideas in here can be found in "Algorithms" by Sedgewick,
3550 others I invented myself (or more likely re-invented since they seemed
3551 pretty obvious once I watched the algorithm operate for a while).
3553 Most of this code was written while watching the Marlins sweep the Giants
3554 in the 1997 National League Playoffs - no Braves fans allowed to use this
3555 code (just kidding :-).
3557 I realize that if I wanted to be true to the perl tradition, the only
3558 comment in this file would be something like:
3560 ...they shuffled back towards the rear of the line. 'No, not at the
3561 rear!' the slave-driver shouted. 'Three files up. And stay there...
3563 However, I really needed to violate that tradition just so I could keep
3564 track of what happens myself, not to mention some poor fool trying to
3565 understand this years from now :-).
3568 /* ********************************************************** Configuration */
3570 #ifndef QSORT_ORDER_GUESS
3571 #define QSORT_ORDER_GUESS 2 /* Select doubling version of the netBSD trick */
3574 /* QSORT_MAX_STACK is the largest number of partitions that can be stacked up for
3575 future processing - a good max upper bound is log base 2 of memory size
3576 (32 on 32 bit machines, 64 on 64 bit machines, etc). In reality can
3577 safely be smaller than that since the program is taking up some space and
3578 most operating systems only let you grab some subset of contiguous
3579 memory (not to mention that you are normally sorting data larger than
3580 1 byte element size :-).
3582 #ifndef QSORT_MAX_STACK
3583 #define QSORT_MAX_STACK 32
3586 /* QSORT_BREAK_EVEN is the size of the largest partition we should insertion sort.
3587 Anything bigger and we use qsort. If you make this too small, the qsort
3588 will probably break (or become less efficient), because it doesn't expect
3589 the middle element of a partition to be the same as the right or left -
3590 you have been warned).
3592 #ifndef QSORT_BREAK_EVEN
3593 #define QSORT_BREAK_EVEN 6
3596 /* ************************************************************* Data Types */
3598 /* hold left and right index values of a partition waiting to be sorted (the
3599 partition includes both left and right - right is NOT one past the end or
3600 anything like that).
3602 struct partition_stack_entry {
3605 #ifdef QSORT_ORDER_GUESS
3606 int qsort_break_even;
3610 /* ******************************************************* Shorthand Macros */
3612 /* Note that these macros will be used from inside the qsort function where
3613 we happen to know that the variable 'elt_size' contains the size of an
3614 array element and the variable 'temp' points to enough space to hold a
3615 temp element and the variable 'array' points to the array being sorted
3616 and 'compare' is the pointer to the compare routine.
3618 Also note that there are very many highly architecture specific ways
3619 these might be sped up, but this is simply the most generally portable
3620 code I could think of.
3623 /* Return < 0 == 0 or > 0 as the value of elt1 is < elt2, == elt2, > elt2
3625 #define qsort_cmp(elt1, elt2) \
3626 ((*compare)(aTHXo_ array[elt1], array[elt2]))
3628 #ifdef QSORT_ORDER_GUESS
3629 #define QSORT_NOTICE_SWAP swapped++;
3631 #define QSORT_NOTICE_SWAP
3634 /* swaps contents of array elements elt1, elt2.
3636 #define qsort_swap(elt1, elt2) \
3639 temp = array[elt1]; \
3640 array[elt1] = array[elt2]; \
3641 array[elt2] = temp; \
3644 /* rotate contents of elt1, elt2, elt3 such that elt1 gets elt2, elt2 gets
3645 elt3 and elt3 gets elt1.
3647 #define qsort_rotate(elt1, elt2, elt3) \
3650 temp = array[elt1]; \
3651 array[elt1] = array[elt2]; \
3652 array[elt2] = array[elt3]; \
3653 array[elt3] = temp; \
3656 /* ************************************************************ Debug stuff */
3663 return; /* good place to set a breakpoint */
3666 #define qsort_assert(t) (void)( (t) || (break_here(), 0) )
3669 doqsort_all_asserts(
3673 int (*compare)(const void * elt1, const void * elt2),
3674 int pc_left, int pc_right, int u_left, int u_right)
3678 qsort_assert(pc_left <= pc_right);
3679 qsort_assert(u_right < pc_left);
3680 qsort_assert(pc_right < u_left);
3681 for (i = u_right + 1; i < pc_left; ++i) {
3682 qsort_assert(qsort_cmp(i, pc_left) < 0);
3684 for (i = pc_left; i < pc_right; ++i) {
3685 qsort_assert(qsort_cmp(i, pc_right) == 0);
3687 for (i = pc_right + 1; i < u_left; ++i) {
3688 qsort_assert(qsort_cmp(pc_right, i) < 0);
3692 #define qsort_all_asserts(PC_LEFT, PC_RIGHT, U_LEFT, U_RIGHT) \
3693 doqsort_all_asserts(array, num_elts, elt_size, compare, \
3694 PC_LEFT, PC_RIGHT, U_LEFT, U_RIGHT)
3698 #define qsort_assert(t) ((void)0)
3700 #define qsort_all_asserts(PC_LEFT, PC_RIGHT, U_LEFT, U_RIGHT) ((void)0)
3704 /* ****************************************************************** qsort */
3707 S_qsortsv(pTHX_ SV ** array, size_t num_elts, SVCOMPARE_t compare)
3711 struct partition_stack_entry partition_stack[QSORT_MAX_STACK];
3712 int next_stack_entry = 0;
3716 #ifdef QSORT_ORDER_GUESS
3717 int qsort_break_even;
3721 /* Make sure we actually have work to do.
3723 if (num_elts <= 1) {
3727 /* Setup the initial partition definition and fall into the sorting loop
3730 part_right = (int)(num_elts - 1);
3731 #ifdef QSORT_ORDER_GUESS
3732 qsort_break_even = QSORT_BREAK_EVEN;
3734 #define qsort_break_even QSORT_BREAK_EVEN
3737 if ((part_right - part_left) >= qsort_break_even) {
3738 /* OK, this is gonna get hairy, so lets try to document all the
3739 concepts and abbreviations and variables and what they keep
3742 pc: pivot chunk - the set of array elements we accumulate in the
3743 middle of the partition, all equal in value to the original
3744 pivot element selected. The pc is defined by:
3746 pc_left - the leftmost array index of the pc
3747 pc_right - the rightmost array index of the pc
3749 we start with pc_left == pc_right and only one element
3750 in the pivot chunk (but it can grow during the scan).
3752 u: uncompared elements - the set of elements in the partition
3753 we have not yet compared to the pivot value. There are two
3754 uncompared sets during the scan - one to the left of the pc
3755 and one to the right.
3757 u_right - the rightmost index of the left side's uncompared set
3758 u_left - the leftmost index of the right side's uncompared set
3760 The leftmost index of the left sides's uncompared set
3761 doesn't need its own variable because it is always defined
3762 by the leftmost edge of the whole partition (part_left). The
3763 same goes for the rightmost edge of the right partition
3766 We know there are no uncompared elements on the left once we
3767 get u_right < part_left and no uncompared elements on the
3768 right once u_left > part_right. When both these conditions
3769 are met, we have completed the scan of the partition.
3771 Any elements which are between the pivot chunk and the
3772 uncompared elements should be less than the pivot value on
3773 the left side and greater than the pivot value on the right
3774 side (in fact, the goal of the whole algorithm is to arrange
3775 for that to be true and make the groups of less-than and
3776 greater-then elements into new partitions to sort again).
3778 As you marvel at the complexity of the code and wonder why it
3779 has to be so confusing. Consider some of the things this level
3780 of confusion brings:
3782 Once I do a compare, I squeeze every ounce of juice out of it. I
3783 never do compare calls I don't have to do, and I certainly never
3786 I also never swap any elements unless I can prove there is a
3787 good reason. Many sort algorithms will swap a known value with
3788 an uncompared value just to get things in the right place (or
3789 avoid complexity :-), but that uncompared value, once it gets
3790 compared, may then have to be swapped again. A lot of the
3791 complexity of this code is due to the fact that it never swaps
3792 anything except compared values, and it only swaps them when the
3793 compare shows they are out of position.
3795 int pc_left, pc_right;
3796 int u_right, u_left;
3800 pc_left = ((part_left + part_right) / 2);
3802 u_right = pc_left - 1;
3803 u_left = pc_right + 1;
3805 /* Qsort works best when the pivot value is also the median value
3806 in the partition (unfortunately you can't find the median value
3807 without first sorting :-), so to give the algorithm a helping
3808 hand, we pick 3 elements and sort them and use the median value
3809 of that tiny set as the pivot value.
3811 Some versions of qsort like to use the left middle and right as
3812 the 3 elements to sort so they can insure the ends of the
3813 partition will contain values which will stop the scan in the
3814 compare loop, but when you have to call an arbitrarily complex
3815 routine to do a compare, its really better to just keep track of
3816 array index values to know when you hit the edge of the
3817 partition and avoid the extra compare. An even better reason to
3818 avoid using a compare call is the fact that you can drop off the
3819 edge of the array if someone foolishly provides you with an
3820 unstable compare function that doesn't always provide consistent
3823 So, since it is simpler for us to compare the three adjacent
3824 elements in the middle of the partition, those are the ones we
3825 pick here (conveniently pointed at by u_right, pc_left, and
3826 u_left). The values of the left, center, and right elements
3827 are refered to as l c and r in the following comments.
3830 #ifdef QSORT_ORDER_GUESS
3833 s = qsort_cmp(u_right, pc_left);
3836 s = qsort_cmp(pc_left, u_left);
3837 /* if l < c, c < r - already in order - nothing to do */
3839 /* l < c, c == r - already in order, pc grows */
3841 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3843 /* l < c, c > r - need to know more */
3844 s = qsort_cmp(u_right, u_left);
3846 /* l < c, c > r, l < r - swap c & r to get ordered */
3847 qsort_swap(pc_left, u_left);
3848 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3849 } else if (s == 0) {
3850 /* l < c, c > r, l == r - swap c&r, grow pc */
3851 qsort_swap(pc_left, u_left);
3853 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3855 /* l < c, c > r, l > r - make lcr into rlc to get ordered */
3856 qsort_rotate(pc_left, u_right, u_left);
3857 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3860 } else if (s == 0) {
3862 s = qsort_cmp(pc_left, u_left);
3864 /* l == c, c < r - already in order, grow pc */
3866 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3867 } else if (s == 0) {
3868 /* l == c, c == r - already in order, grow pc both ways */
3871 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3873 /* l == c, c > r - swap l & r, grow pc */
3874 qsort_swap(u_right, u_left);
3876 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3880 s = qsort_cmp(pc_left, u_left);
3882 /* l > c, c < r - need to know more */
3883 s = qsort_cmp(u_right, u_left);
3885 /* l > c, c < r, l < r - swap l & c to get ordered */
3886 qsort_swap(u_right, pc_left);
3887 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3888 } else if (s == 0) {
3889 /* l > c, c < r, l == r - swap l & c, grow pc */
3890 qsort_swap(u_right, pc_left);
3892 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3894 /* l > c, c < r, l > r - rotate lcr into crl to order */
3895 qsort_rotate(u_right, pc_left, u_left);
3896 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3898 } else if (s == 0) {
3899 /* l > c, c == r - swap ends, grow pc */
3900 qsort_swap(u_right, u_left);
3902 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3904 /* l > c, c > r - swap ends to get in order */
3905 qsort_swap(u_right, u_left);
3906 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3909 /* We now know the 3 middle elements have been compared and
3910 arranged in the desired order, so we can shrink the uncompared
3915 qsort_all_asserts(pc_left, pc_right, u_left, u_right);
3917 /* The above massive nested if was the simple part :-). We now have
3918 the middle 3 elements ordered and we need to scan through the
3919 uncompared sets on either side, swapping elements that are on
3920 the wrong side or simply shuffling equal elements around to get
3921 all equal elements into the pivot chunk.
3925 int still_work_on_left;
3926 int still_work_on_right;
3928 /* Scan the uncompared values on the left. If I find a value
3929 equal to the pivot value, move it over so it is adjacent to
3930 the pivot chunk and expand the pivot chunk. If I find a value
3931 less than the pivot value, then just leave it - its already
3932 on the correct side of the partition. If I find a greater
3933 value, then stop the scan.
3935 while (still_work_on_left = (u_right >= part_left)) {
3936 s = qsort_cmp(u_right, pc_left);
3939 } else if (s == 0) {
3941 if (pc_left != u_right) {
3942 qsort_swap(u_right, pc_left);
3948 qsort_assert(u_right < pc_left);
3949 qsort_assert(pc_left <= pc_right);
3950 qsort_assert(qsort_cmp(u_right + 1, pc_left) <= 0);
3951 qsort_assert(qsort_cmp(pc_left, pc_right) == 0);
3954 /* Do a mirror image scan of uncompared values on the right
3956 while (still_work_on_right = (u_left <= part_right)) {
3957 s = qsort_cmp(pc_right, u_left);
3960 } else if (s == 0) {
3962 if (pc_right != u_left) {
3963 qsort_swap(pc_right, u_left);
3969 qsort_assert(u_left > pc_right);
3970 qsort_assert(pc_left <= pc_right);
3971 qsort_assert(qsort_cmp(pc_right, u_left - 1) <= 0);
3972 qsort_assert(qsort_cmp(pc_left, pc_right) == 0);
3975 if (still_work_on_left) {
3976 /* I know I have a value on the left side which needs to be
3977 on the right side, but I need to know more to decide
3978 exactly the best thing to do with it.
3980 if (still_work_on_right) {
3981 /* I know I have values on both side which are out of
3982 position. This is a big win because I kill two birds
3983 with one swap (so to speak). I can advance the
3984 uncompared pointers on both sides after swapping both
3985 of them into the right place.
3987 qsort_swap(u_right, u_left);
3990 qsort_all_asserts(pc_left, pc_right, u_left, u_right);
3992 /* I have an out of position value on the left, but the
3993 right is fully scanned, so I "slide" the pivot chunk
3994 and any less-than values left one to make room for the
3995 greater value over on the right. If the out of position
3996 value is immediately adjacent to the pivot chunk (there
3997 are no less-than values), I can do that with a swap,
3998 otherwise, I have to rotate one of the less than values
3999 into the former position of the out of position value
4000 and the right end of the pivot chunk into the left end
4004 if (pc_left == u_right) {
4005 qsort_swap(u_right, pc_right);
4006 qsort_all_asserts(pc_left, pc_right-1, u_left, u_right-1);
4008 qsort_rotate(u_right, pc_left, pc_right);
4009 qsort_all_asserts(pc_left, pc_right-1, u_left, u_right-1);
4014 } else if (still_work_on_right) {
4015 /* Mirror image of complex case above: I have an out of
4016 position value on the right, but the left is fully
4017 scanned, so I need to shuffle things around to make room
4018 for the right value on the left.
4021 if (pc_right == u_left) {
4022 qsort_swap(u_left, pc_left);
4023 qsort_all_asserts(pc_left+1, pc_right, u_left+1, u_right);
4025 qsort_rotate(pc_right, pc_left, u_left);
4026 qsort_all_asserts(pc_left+1, pc_right, u_left+1, u_right);
4031 /* No more scanning required on either side of partition,
4032 break out of loop and figure out next set of partitions
4038 /* The elements in the pivot chunk are now in the right place. They
4039 will never move or be compared again. All I have to do is decide
4040 what to do with the stuff to the left and right of the pivot
4043 Notes on the QSORT_ORDER_GUESS ifdef code:
4045 1. If I just built these partitions without swapping any (or
4046 very many) elements, there is a chance that the elements are
4047 already ordered properly (being properly ordered will
4048 certainly result in no swapping, but the converse can't be
4051 2. A (properly written) insertion sort will run faster on
4052 already ordered data than qsort will.
4054 3. Perhaps there is some way to make a good guess about
4055 switching to an insertion sort earlier than partition size 6
4056 (for instance - we could save the partition size on the stack
4057 and increase the size each time we find we didn't swap, thus
4058 switching to insertion sort earlier for partitions with a
4059 history of not swapping).
4061 4. Naturally, if I just switch right away, it will make
4062 artificial benchmarks with pure ascending (or descending)
4063 data look really good, but is that a good reason in general?
4067 #ifdef QSORT_ORDER_GUESS
4069 #if QSORT_ORDER_GUESS == 1
4070 qsort_break_even = (part_right - part_left) + 1;
4072 #if QSORT_ORDER_GUESS == 2
4073 qsort_break_even *= 2;
4075 #if QSORT_ORDER_GUESS == 3
4076 int prev_break = qsort_break_even;
4077 qsort_break_even *= qsort_break_even;
4078 if (qsort_break_even < prev_break) {
4079 qsort_break_even = (part_right - part_left) + 1;
4083 qsort_break_even = QSORT_BREAK_EVEN;
4087 if (part_left < pc_left) {
4088 /* There are elements on the left which need more processing.
4089 Check the right as well before deciding what to do.
4091 if (pc_right < part_right) {
4092 /* We have two partitions to be sorted. Stack the biggest one
4093 and process the smallest one on the next iteration. This
4094 minimizes the stack height by insuring that any additional
4095 stack entries must come from the smallest partition which
4096 (because it is smallest) will have the fewest
4097 opportunities to generate additional stack entries.
4099 if ((part_right - pc_right) > (pc_left - part_left)) {
4100 /* stack the right partition, process the left */
4101 partition_stack[next_stack_entry].left = pc_right + 1;
4102 partition_stack[next_stack_entry].right = part_right;
4103 #ifdef QSORT_ORDER_GUESS
4104 partition_stack[next_stack_entry].qsort_break_even = qsort_break_even;
4106 part_right = pc_left - 1;
4108 /* stack the left partition, process the right */
4109 partition_stack[next_stack_entry].left = part_left;
4110 partition_stack[next_stack_entry].right = pc_left - 1;
4111 #ifdef QSORT_ORDER_GUESS
4112 partition_stack[next_stack_entry].qsort_break_even = qsort_break_even;
4114 part_left = pc_right + 1;
4116 qsort_assert(next_stack_entry < QSORT_MAX_STACK);
4119 /* The elements on the left are the only remaining elements
4120 that need sorting, arrange for them to be processed as the
4123 part_right = pc_left - 1;
4125 } else if (pc_right < part_right) {
4126 /* There is only one chunk on the right to be sorted, make it
4127 the new partition and loop back around.
4129 part_left = pc_right + 1;
4131 /* This whole partition wound up in the pivot chunk, so
4132 we need to get a new partition off the stack.
4134 if (next_stack_entry == 0) {
4135 /* the stack is empty - we are done */
4139 part_left = partition_stack[next_stack_entry].left;
4140 part_right = partition_stack[next_stack_entry].right;
4141 #ifdef QSORT_ORDER_GUESS
4142 qsort_break_even = partition_stack[next_stack_entry].qsort_break_even;
4146 /* This partition is too small to fool with qsort complexity, just
4147 do an ordinary insertion sort to minimize overhead.
4150 /* Assume 1st element is in right place already, and start checking
4151 at 2nd element to see where it should be inserted.
4153 for (i = part_left + 1; i <= part_right; ++i) {
4155 /* Scan (backwards - just in case 'i' is already in right place)
4156 through the elements already sorted to see if the ith element
4157 belongs ahead of one of them.
4159 for (j = i - 1; j >= part_left; --j) {
4160 if (qsort_cmp(i, j) >= 0) {
4161 /* i belongs right after j
4168 /* Looks like we really need to move some things
4172 for (k = i - 1; k >= j; --k)
4173 array[k + 1] = array[k];
4178 /* That partition is now sorted, grab the next one, or get out
4179 of the loop if there aren't any more.
4182 if (next_stack_entry == 0) {
4183 /* the stack is empty - we are done */
4187 part_left = partition_stack[next_stack_entry].left;
4188 part_right = partition_stack[next_stack_entry].right;
4189 #ifdef QSORT_ORDER_GUESS
4190 qsort_break_even = partition_stack[next_stack_entry].qsort_break_even;
4195 /* Believe it or not, the array is sorted at this point! */
4207 sortcv(pTHXo_ SV *a, SV *b)
4210 I32 oldsaveix = PL_savestack_ix;
4211 I32 oldscopeix = PL_scopestack_ix;
4213 GvSV(PL_firstgv) = a;
4214 GvSV(PL_secondgv) = b;
4215 PL_stack_sp = PL_stack_base;
4218 if (PL_stack_sp != PL_stack_base + 1)
4219 Perl_croak(aTHX_ "Sort subroutine didn't return single value");
4220 if (!SvNIOKp(*PL_stack_sp))
4221 Perl_croak(aTHX_ "Sort subroutine didn't return a numeric value");
4222 result = SvIV(*PL_stack_sp);
4223 while (PL_scopestack_ix > oldscopeix) {
4226 leave_scope(oldsaveix);
4231 sortcv_stacked(pTHXo_ SV *a, SV *b)
4234 I32 oldsaveix = PL_savestack_ix;
4235 I32 oldscopeix = PL_scopestack_ix;
4240 av = (AV*)PL_curpad[0];
4242 av = GvAV(PL_defgv);
4245 if (AvMAX(av) < 1) {
4246 SV** ary = AvALLOC(av);
4247 if (AvARRAY(av) != ary) {
4248 AvMAX(av) += AvARRAY(av) - AvALLOC(av);
4249 SvPVX(av) = (char*)ary;
4251 if (AvMAX(av) < 1) {
4254 SvPVX(av) = (char*)ary;
4261 PL_stack_sp = PL_stack_base;
4264 if (PL_stack_sp != PL_stack_base + 1)
4265 Perl_croak(aTHX_ "Sort subroutine didn't return single value");
4266 if (!SvNIOKp(*PL_stack_sp))
4267 Perl_croak(aTHX_ "Sort subroutine didn't return a numeric value");
4268 result = SvIV(*PL_stack_sp);
4269 while (PL_scopestack_ix > oldscopeix) {
4272 leave_scope(oldsaveix);
4277 sortcv_xsub(pTHXo_ SV *a, SV *b)
4280 I32 oldsaveix = PL_savestack_ix;
4281 I32 oldscopeix = PL_scopestack_ix;
4283 CV *cv=(CV*)PL_sortcop;
4291 (void)(*CvXSUB(cv))(aTHXo_ cv);
4292 if (PL_stack_sp != PL_stack_base + 1)
4293 Perl_croak(aTHX_ "Sort subroutine didn't return single value");
4294 if (!SvNIOKp(*PL_stack_sp))
4295 Perl_croak(aTHX_ "Sort subroutine didn't return a numeric value");
4296 result = SvIV(*PL_stack_sp);
4297 while (PL_scopestack_ix > oldscopeix) {
4300 leave_scope(oldsaveix);
4306 sv_ncmp(pTHXo_ SV *a, SV *b)
4310 return nv1 < nv2 ? -1 : nv1 > nv2 ? 1 : 0;
4314 sv_i_ncmp(pTHXo_ SV *a, SV *b)
4318 return iv1 < iv2 ? -1 : iv1 > iv2 ? 1 : 0;
4320 #define tryCALL_AMAGICbin(left,right,meth,svp) STMT_START { \
4322 if (PL_amagic_generation) { \
4323 if (SvAMAGIC(left)||SvAMAGIC(right))\
4324 *svp = amagic_call(left, \
4332 amagic_ncmp(pTHXo_ register SV *a, register SV *b)
4335 tryCALL_AMAGICbin(a,b,ncmp,&tmpsv);
4340 I32 i = SvIVX(tmpsv);
4350 return sv_ncmp(aTHXo_ a, b);
4354 amagic_i_ncmp(pTHXo_ register SV *a, register SV *b)
4357 tryCALL_AMAGICbin(a,b,ncmp,&tmpsv);
4362 I32 i = SvIVX(tmpsv);
4372 return sv_i_ncmp(aTHXo_ a, b);
4376 amagic_cmp(pTHXo_ register SV *str1, register SV *str2)
4379 tryCALL_AMAGICbin(str1,str2,scmp,&tmpsv);
4384 I32 i = SvIVX(tmpsv);
4394 return sv_cmp(str1, str2);
4398 amagic_cmp_locale(pTHXo_ register SV *str1, register SV *str2)
4401 tryCALL_AMAGICbin(str1,str2,scmp,&tmpsv);
4406 I32 i = SvIVX(tmpsv);
4416 return sv_cmp_locale(str1, str2);
4420 run_user_filter(pTHXo_ int idx, SV *buf_sv, int maxlen)
4422 SV *datasv = FILTER_DATA(idx);
4423 int filter_has_file = IoLINES(datasv);
4424 GV *filter_child_proc = (GV *)IoFMT_GV(datasv);
4425 SV *filter_state = (SV *)IoTOP_GV(datasv);
4426 SV *filter_sub = (SV *)IoBOTTOM_GV(datasv);
4429 /* I was having segfault trouble under Linux 2.2.5 after a
4430 parse error occured. (Had to hack around it with a test
4431 for PL_error_count == 0.) Solaris doesn't segfault --
4432 not sure where the trouble is yet. XXX */
4434 if (filter_has_file) {
4435 len = FILTER_READ(idx+1, buf_sv, maxlen);
4438 if (filter_sub && len >= 0) {
4449 PUSHs(sv_2mortal(newSViv(maxlen)));
4451 PUSHs(filter_state);
4454 count = call_sv(filter_sub, G_SCALAR);
4470 IoLINES(datasv) = 0;
4471 if (filter_child_proc) {
4472 SvREFCNT_dec(filter_child_proc);
4473 IoFMT_GV(datasv) = Nullgv;
4476 SvREFCNT_dec(filter_state);
4477 IoTOP_GV(datasv) = Nullgv;
4480 SvREFCNT_dec(filter_sub);
4481 IoBOTTOM_GV(datasv) = Nullgv;
4483 filter_del(run_user_filter);
4492 sv_cmp_locale_static(pTHXo_ register SV *str1, register SV *str2)
4494 return sv_cmp_locale(str1, str2);
4498 sv_cmp_static(pTHXo_ register SV *str1, register SV *str2)
4500 return sv_cmp(str1, str2);
4503 #endif /* PERL_OBJECT */