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 sv_ncmp(pTHXo_ SV *a, SV *b);
31 static I32 sv_i_ncmp(pTHXo_ SV *a, SV *b);
32 static I32 amagic_ncmp(pTHXo_ SV *a, SV *b);
33 static I32 amagic_i_ncmp(pTHXo_ SV *a, SV *b);
34 static I32 amagic_cmp(pTHXo_ SV *a, SV *b);
35 static I32 amagic_cmp_locale(pTHXo_ SV *a, SV *b);
36 static I32 run_user_filter(pTHXo_ int idx, SV *buf_sv, int maxlen);
39 static I32 sv_cmp_static(pTHXo_ SV *a, SV *b);
40 static I32 sv_cmp_locale_static(pTHXo_ SV *a, SV *b);
42 #define sv_cmp_static Perl_sv_cmp
43 #define sv_cmp_locale_static Perl_sv_cmp_locale
52 cxix = dopoptosub(cxstack_ix);
56 switch (cxstack[cxix].blk_gimme) {
73 /* XXXX Should store the old value to allow for tie/overload - and
74 restore in regcomp, where marked with XXXX. */
82 register PMOP *pm = (PMOP*)cLOGOP->op_other;
86 MAGIC *mg = Null(MAGIC*);
90 SV *sv = SvRV(tmpstr);
92 mg = mg_find(sv, 'r');
95 regexp *re = (regexp *)mg->mg_obj;
96 ReREFCNT_dec(pm->op_pmregexp);
97 pm->op_pmregexp = ReREFCNT_inc(re);
100 t = SvPV(tmpstr, len);
102 /* Check against the last compiled regexp. */
103 if (!pm->op_pmregexp || !pm->op_pmregexp->precomp ||
104 pm->op_pmregexp->prelen != len ||
105 memNE(pm->op_pmregexp->precomp, t, len))
107 if (pm->op_pmregexp) {
108 ReREFCNT_dec(pm->op_pmregexp);
109 pm->op_pmregexp = Null(REGEXP*); /* crucial if regcomp aborts */
111 if (PL_op->op_flags & OPf_SPECIAL)
112 PL_reginterp_cnt = I32_MAX; /* Mark as safe. */
114 pm->op_pmflags = pm->op_pmpermflags; /* reset case sensitivity */
115 pm->op_pmregexp = CALLREGCOMP(aTHX_ t, t + len, pm);
116 PL_reginterp_cnt = 0; /* XXXX Be extra paranoid - needed
117 inside tie/overload accessors. */
121 #ifndef INCOMPLETE_TAINTS
124 pm->op_pmdynflags |= PMdf_TAINTED;
126 pm->op_pmdynflags &= ~PMdf_TAINTED;
130 if (!pm->op_pmregexp->prelen && PL_curpm)
132 else if (strEQ("\\s+", pm->op_pmregexp->precomp))
133 pm->op_pmflags |= PMf_WHITE;
135 if (pm->op_pmflags & PMf_KEEP) {
136 pm->op_private &= ~OPpRUNTIME; /* no point compiling again */
137 cLOGOP->op_first->op_next = PL_op->op_next;
145 register PMOP *pm = (PMOP*) cLOGOP->op_other;
146 register PERL_CONTEXT *cx = &cxstack[cxstack_ix];
147 register SV *dstr = cx->sb_dstr;
148 register char *s = cx->sb_s;
149 register char *m = cx->sb_m;
150 char *orig = cx->sb_orig;
151 register REGEXP *rx = cx->sb_rx;
153 rxres_restore(&cx->sb_rxres, rx);
155 if (cx->sb_iters++) {
156 if (cx->sb_iters > cx->sb_maxiters)
157 DIE(aTHX_ "Substitution loop");
159 if (!(cx->sb_rxtainted & 2) && SvTAINTED(TOPs))
160 cx->sb_rxtainted |= 2;
161 sv_catsv(dstr, POPs);
164 if (cx->sb_once || !CALLREGEXEC(aTHX_ rx, s, cx->sb_strend, orig,
165 s == m, cx->sb_targ, NULL,
166 ((cx->sb_rflags & REXEC_COPY_STR)
167 ? (REXEC_IGNOREPOS|REXEC_NOT_FIRST)
168 : (REXEC_COPY_STR|REXEC_IGNOREPOS|REXEC_NOT_FIRST))))
170 SV *targ = cx->sb_targ;
171 sv_catpvn(dstr, s, cx->sb_strend - s);
173 cx->sb_rxtainted |= RX_MATCH_TAINTED(rx);
175 (void)SvOOK_off(targ);
176 Safefree(SvPVX(targ));
177 SvPVX(targ) = SvPVX(dstr);
178 SvCUR_set(targ, SvCUR(dstr));
179 SvLEN_set(targ, SvLEN(dstr));
183 TAINT_IF(cx->sb_rxtainted & 1);
184 PUSHs(sv_2mortal(newSViv((I32)cx->sb_iters - 1)));
186 (void)SvPOK_only(targ);
187 TAINT_IF(cx->sb_rxtainted);
191 LEAVE_SCOPE(cx->sb_oldsave);
193 RETURNOP(pm->op_next);
196 if (RX_MATCH_COPIED(rx) && rx->subbeg != orig) {
199 cx->sb_orig = orig = rx->subbeg;
201 cx->sb_strend = s + (cx->sb_strend - m);
203 cx->sb_m = m = rx->startp[0] + orig;
204 sv_catpvn(dstr, s, m-s);
205 cx->sb_s = rx->endp[0] + orig;
206 cx->sb_rxtainted |= RX_MATCH_TAINTED(rx);
207 rxres_save(&cx->sb_rxres, rx);
208 RETURNOP(pm->op_pmreplstart);
212 Perl_rxres_save(pTHX_ void **rsp, REGEXP *rx)
217 if (!p || p[1] < rx->nparens) {
218 i = 6 + rx->nparens * 2;
226 *p++ = PTR2UV(RX_MATCH_COPIED(rx) ? rx->subbeg : Nullch);
227 RX_MATCH_COPIED_off(rx);
231 *p++ = PTR2UV(rx->subbeg);
232 *p++ = (UV)rx->sublen;
233 for (i = 0; i <= rx->nparens; ++i) {
234 *p++ = (UV)rx->startp[i];
235 *p++ = (UV)rx->endp[i];
240 Perl_rxres_restore(pTHX_ void **rsp, REGEXP *rx)
245 if (RX_MATCH_COPIED(rx))
246 Safefree(rx->subbeg);
247 RX_MATCH_COPIED_set(rx, *p);
252 rx->subbeg = INT2PTR(char*,*p++);
253 rx->sublen = (I32)(*p++);
254 for (i = 0; i <= rx->nparens; ++i) {
255 rx->startp[i] = (I32)(*p++);
256 rx->endp[i] = (I32)(*p++);
261 Perl_rxres_free(pTHX_ void **rsp)
266 Safefree(INT2PTR(char*,*p));
274 djSP; dMARK; dORIGMARK;
275 register SV *tmpForm = *++MARK;
287 bool chopspace = (strchr(PL_chopset, ' ') != Nullch);
293 STRLEN fudge = SvCUR(tmpForm) * (IN_UTF8 ? 3 : 1) + 1;
295 if (!SvMAGICAL(tmpForm) || !SvCOMPILED(tmpForm)) {
296 SvREADONLY_off(tmpForm);
297 doparseform(tmpForm);
300 SvPV_force(PL_formtarget, len);
301 t = SvGROW(PL_formtarget, len + fudge + 1); /* XXX SvCUR bad */
303 f = SvPV(tmpForm, len);
304 /* need to jump to the next word */
305 s = f + len + WORD_ALIGN - SvCUR(tmpForm) % WORD_ALIGN;
314 case FF_LITERAL: arg = fpc[1]; name = "LITERAL"; break;
315 case FF_BLANK: arg = fpc[1]; name = "BLANK"; break;
316 case FF_SKIP: arg = fpc[1]; name = "SKIP"; break;
317 case FF_FETCH: arg = fpc[1]; name = "FETCH"; break;
318 case FF_DECIMAL: arg = fpc[1]; name = "DECIMAL"; break;
320 case FF_CHECKNL: name = "CHECKNL"; break;
321 case FF_CHECKCHOP: name = "CHECKCHOP"; break;
322 case FF_SPACE: name = "SPACE"; break;
323 case FF_HALFSPACE: name = "HALFSPACE"; break;
324 case FF_ITEM: name = "ITEM"; break;
325 case FF_CHOP: name = "CHOP"; break;
326 case FF_LINEGLOB: name = "LINEGLOB"; break;
327 case FF_NEWLINE: name = "NEWLINE"; break;
328 case FF_MORE: name = "MORE"; break;
329 case FF_LINEMARK: name = "LINEMARK"; break;
330 case FF_END: name = "END"; break;
333 PerlIO_printf(Perl_debug_log, "%-16s%ld\n", name, (long) arg);
335 PerlIO_printf(Perl_debug_log, "%-16s\n", name);
363 if (ckWARN(WARN_SYNTAX))
364 Perl_warner(aTHX_ WARN_SYNTAX, "Not enough format arguments");
369 item = s = SvPV(sv, len);
372 itemsize = sv_len_utf8(sv);
373 if (itemsize != len) {
375 if (itemsize > fieldsize) {
376 itemsize = fieldsize;
377 itembytes = itemsize;
378 sv_pos_u2b(sv, &itembytes, 0);
382 send = chophere = s + itembytes;
391 sv_pos_b2u(sv, &itemsize);
395 if (itemsize > fieldsize)
396 itemsize = fieldsize;
397 send = chophere = s + itemsize;
409 item = s = SvPV(sv, len);
412 itemsize = sv_len_utf8(sv);
413 if (itemsize != len) {
415 if (itemsize <= fieldsize) {
416 send = chophere = s + itemsize;
427 itemsize = fieldsize;
428 itembytes = itemsize;
429 sv_pos_u2b(sv, &itembytes, 0);
430 send = chophere = s + itembytes;
431 while (s < send || (s == send && isSPACE(*s))) {
441 if (strchr(PL_chopset, *s))
446 itemsize = chophere - item;
447 sv_pos_b2u(sv, &itemsize);
452 if (itemsize <= fieldsize) {
453 send = chophere = s + itemsize;
464 itemsize = fieldsize;
465 send = chophere = s + itemsize;
466 while (s < send || (s == send && isSPACE(*s))) {
476 if (strchr(PL_chopset, *s))
481 itemsize = chophere - item;
486 arg = fieldsize - itemsize;
495 arg = fieldsize - itemsize;
510 switch (UTF8SKIP(s)) {
521 if ( !((*t++ = *s++) & ~31) )
529 int ch = *t++ = *s++;
532 if ( !((*t++ = *s++) & ~31) )
541 while (*s && isSPACE(*s))
548 item = s = SvPV(sv, len);
561 SvCUR_set(PL_formtarget, t - SvPVX(PL_formtarget));
562 sv_catpvn(PL_formtarget, item, itemsize);
563 SvGROW(PL_formtarget, SvCUR(PL_formtarget) + fudge + 1);
564 t = SvPVX(PL_formtarget) + SvCUR(PL_formtarget);
569 /* If the field is marked with ^ and the value is undefined,
572 if ((arg & 512) && !SvOK(sv)) {
580 /* Formats aren't yet marked for locales, so assume "yes". */
582 RESTORE_NUMERIC_LOCAL();
583 #if defined(USE_LONG_DOUBLE)
585 sprintf(t, "%#*.*" PERL_PRIfldbl,
586 (int) fieldsize, (int) arg & 255, value);
588 sprintf(t, "%*.0" PERL_PRIfldbl, (int) fieldsize, value);
593 (int) fieldsize, (int) arg & 255, value);
596 (int) fieldsize, value);
599 RESTORE_NUMERIC_STANDARD();
606 while (t-- > linemark && *t == ' ') ;
614 if (arg) { /* repeat until fields exhausted? */
616 SvCUR_set(PL_formtarget, t - SvPVX(PL_formtarget));
617 lines += FmLINES(PL_formtarget);
620 if (strnEQ(linemark, linemark - arg, arg))
621 DIE(aTHX_ "Runaway format");
623 FmLINES(PL_formtarget) = lines;
625 RETURNOP(cLISTOP->op_first);
638 while (*s && isSPACE(*s) && s < send)
642 arg = fieldsize - itemsize;
649 if (strnEQ(s," ",3)) {
650 while (s > SvPVX(PL_formtarget) && isSPACE(s[-1]))
661 SvCUR_set(PL_formtarget, t - SvPVX(PL_formtarget));
662 FmLINES(PL_formtarget) += lines;
674 if (PL_stack_base + *PL_markstack_ptr == SP) {
676 if (GIMME_V == G_SCALAR)
677 XPUSHs(sv_2mortal(newSViv(0)));
678 RETURNOP(PL_op->op_next->op_next);
680 PL_stack_sp = PL_stack_base + *PL_markstack_ptr + 1;
681 pp_pushmark(); /* push dst */
682 pp_pushmark(); /* push src */
683 ENTER; /* enter outer scope */
686 /* SAVE_DEFSV does *not* suffice here for USE_THREADS */
688 ENTER; /* enter inner scope */
691 src = PL_stack_base[*PL_markstack_ptr];
696 if (PL_op->op_type == OP_MAPSTART)
697 pp_pushmark(); /* push top */
698 return ((LOGOP*)PL_op->op_next)->op_other;
703 DIE(aTHX_ "panic: mapstart"); /* uses grepstart */
709 I32 diff = (SP - PL_stack_base) - *PL_markstack_ptr;
715 ++PL_markstack_ptr[-1];
717 if (diff > PL_markstack_ptr[-1] - PL_markstack_ptr[-2]) {
718 shift = diff - (PL_markstack_ptr[-1] - PL_markstack_ptr[-2]);
719 count = (SP - PL_stack_base) - PL_markstack_ptr[-1] + 2;
724 PL_markstack_ptr[-1] += shift;
725 *PL_markstack_ptr += shift;
729 dst = PL_stack_base + (PL_markstack_ptr[-2] += diff) - 1;
732 *dst-- = SvTEMP(TOPs) ? POPs : sv_mortalcopy(POPs);
734 LEAVE; /* exit inner scope */
737 if (PL_markstack_ptr[-1] > *PL_markstack_ptr) {
741 (void)POPMARK; /* pop top */
742 LEAVE; /* exit outer scope */
743 (void)POPMARK; /* pop src */
744 items = --*PL_markstack_ptr - PL_markstack_ptr[-1];
745 (void)POPMARK; /* pop dst */
746 SP = PL_stack_base + POPMARK; /* pop original mark */
747 if (gimme == G_SCALAR) {
751 else if (gimme == G_ARRAY)
758 ENTER; /* enter inner scope */
761 src = PL_stack_base[PL_markstack_ptr[-1]];
765 RETURNOP(cLOGOP->op_other);
771 djSP; dMARK; dORIGMARK;
773 SV **myorigmark = ORIGMARK;
779 OP* nextop = PL_op->op_next;
782 if (gimme != G_ARRAY) {
788 SAVEPPTR(PL_sortcop);
789 if (PL_op->op_flags & OPf_STACKED) {
790 if (PL_op->op_flags & OPf_SPECIAL) {
791 OP *kid = cLISTOP->op_first->op_sibling; /* pass pushmark */
792 kid = kUNOP->op_first; /* pass rv2gv */
793 kid = kUNOP->op_first; /* pass leave */
794 PL_sortcop = kid->op_next;
795 stash = PL_curcop->cop_stash;
798 cv = sv_2cv(*++MARK, &stash, &gv, 0);
799 if (!(cv && CvROOT(cv))) {
801 SV *tmpstr = sv_newmortal();
802 gv_efullname3(tmpstr, gv, Nullch);
803 if (cv && CvXSUB(cv))
804 DIE(aTHX_ "Xsub \"%s\" called in sort", SvPVX(tmpstr));
805 DIE(aTHX_ "Undefined sort subroutine \"%s\" called",
810 DIE(aTHX_ "Xsub called in sort");
811 DIE(aTHX_ "Undefined subroutine in sort");
813 DIE(aTHX_ "Not a CODE reference in sort");
815 PL_sortcop = CvSTART(cv);
816 SAVESPTR(CvROOT(cv)->op_ppaddr);
817 CvROOT(cv)->op_ppaddr = PL_ppaddr[OP_NULL];
820 PL_curpad = AvARRAY((AV*)AvARRAY(CvPADLIST(cv))[1]);
825 stash = PL_curcop->cop_stash;
829 while (MARK < SP) { /* This may or may not shift down one here. */
831 if (*up = *++MARK) { /* Weed out nulls. */
833 if (!PL_sortcop && !SvPOK(*up)) {
838 (void)sv_2pv(*up, &n_a);
843 max = --up - myorigmark;
848 bool oldcatch = CATCH_GET;
854 PUSHSTACKi(PERLSI_SORT);
855 if (PL_sortstash != stash) {
856 PL_firstgv = gv_fetchpv("a", TRUE, SVt_PV);
857 PL_secondgv = gv_fetchpv("b", TRUE, SVt_PV);
858 PL_sortstash = stash;
861 SAVESPTR(GvSV(PL_firstgv));
862 SAVESPTR(GvSV(PL_secondgv));
864 PUSHBLOCK(cx, CXt_NULL, PL_stack_base);
865 if (!(PL_op->op_flags & OPf_SPECIAL)) {
866 bool hasargs = FALSE;
867 cx->cx_type = CXt_SUB;
868 cx->blk_gimme = G_SCALAR;
871 (void)SvREFCNT_inc(cv); /* in preparation for POPSUB */
873 PL_sortcxix = cxstack_ix;
874 qsortsv((myorigmark+1), max, sortcv);
876 POPBLOCK(cx,PL_curpm);
884 MEXTEND(SP, 20); /* Can't afford stack realloc on signal. */
885 qsortsv(ORIGMARK+1, max,
886 (PL_op->op_private & OPpSORT_NUMERIC)
887 ? ( (PL_op->op_private & OPpSORT_INTEGER)
888 ? ( overloading ? amagic_i_ncmp : sv_i_ncmp)
889 : ( overloading ? amagic_ncmp : sv_ncmp))
890 : ( (PL_op->op_private & OPpLOCALE)
893 : sv_cmp_locale_static)
894 : ( overloading ? amagic_cmp : sv_cmp_static)));
895 if (PL_op->op_private & OPpSORT_REVERSE) {
897 SV **q = ORIGMARK+max;
907 PL_stack_sp = ORIGMARK + max;
915 if (GIMME == G_ARRAY)
917 if (SvTRUEx(PAD_SV(PL_op->op_targ)))
918 return cLOGOP->op_other;
927 if (GIMME == G_ARRAY) {
928 RETURNOP(((LOGOP*)cUNOP->op_first)->op_other);
932 SV *targ = PAD_SV(PL_op->op_targ);
934 if ((PL_op->op_private & OPpFLIP_LINENUM)
935 ? (PL_last_in_gv && SvIV(sv) == (IV)IoLINES(GvIOp(PL_last_in_gv)))
937 sv_setiv(PAD_SV(cUNOP->op_first->op_targ), 1);
938 if (PL_op->op_flags & OPf_SPECIAL) {
946 RETURNOP(((LOGOP*)cUNOP->op_first)->op_other);
959 if (GIMME == G_ARRAY) {
965 if (SvGMAGICAL(left))
967 if (SvGMAGICAL(right))
970 if (SvNIOKp(left) || !SvPOKp(left) ||
971 (looks_like_number(left) && *SvPVX(left) != '0') )
973 if (SvNV(left) < IV_MIN || SvNV(right) > IV_MAX)
974 DIE(aTHX_ "Range iterator outside integer range");
985 sv = sv_2mortal(newSViv(i++));
990 SV *final = sv_mortalcopy(right);
992 char *tmps = SvPV(final, len);
994 sv = sv_mortalcopy(left);
996 while (!SvNIOKp(sv) && SvCUR(sv) <= len) {
998 if (strEQ(SvPVX(sv),tmps))
1000 sv = sv_2mortal(newSVsv(sv));
1007 SV *targ = PAD_SV(cUNOP->op_first->op_targ);
1009 if ((PL_op->op_private & OPpFLIP_LINENUM)
1010 ? (PL_last_in_gv && SvIV(sv) == (IV)IoLINES(GvIOp(PL_last_in_gv)))
1012 sv_setiv(PAD_SV(((UNOP*)cUNOP->op_first)->op_first->op_targ), 0);
1013 sv_catpv(targ, "E0");
1024 S_dopoptolabel(pTHX_ char *label)
1028 register PERL_CONTEXT *cx;
1030 for (i = cxstack_ix; i >= 0; i--) {
1032 switch (CxTYPE(cx)) {
1034 if (ckWARN(WARN_UNSAFE))
1035 Perl_warner(aTHX_ WARN_UNSAFE, "Exiting substitution via %s",
1036 PL_op_name[PL_op->op_type]);
1039 if (ckWARN(WARN_UNSAFE))
1040 Perl_warner(aTHX_ WARN_UNSAFE, "Exiting subroutine via %s",
1041 PL_op_name[PL_op->op_type]);
1044 if (ckWARN(WARN_UNSAFE))
1045 Perl_warner(aTHX_ WARN_UNSAFE, "Exiting eval via %s",
1046 PL_op_name[PL_op->op_type]);
1049 if (ckWARN(WARN_UNSAFE))
1050 Perl_warner(aTHX_ WARN_UNSAFE, "Exiting pseudo-block via %s",
1051 PL_op_name[PL_op->op_type]);
1054 if (!cx->blk_loop.label ||
1055 strNE(label, cx->blk_loop.label) ) {
1056 DEBUG_l(Perl_deb(aTHX_ "(Skipping label #%ld %s)\n",
1057 (long)i, cx->blk_loop.label));
1060 DEBUG_l( Perl_deb(aTHX_ "(Found label #%ld %s)\n", (long)i, label));
1068 Perl_dowantarray(pTHX)
1070 I32 gimme = block_gimme();
1071 return (gimme == G_VOID) ? G_SCALAR : gimme;
1075 Perl_block_gimme(pTHX)
1080 cxix = dopoptosub(cxstack_ix);
1084 switch (cxstack[cxix].blk_gimme) {
1092 Perl_croak(aTHX_ "panic: bad gimme: %d\n", cxstack[cxix].blk_gimme);
1099 S_dopoptosub(pTHX_ I32 startingblock)
1102 return dopoptosub_at(cxstack, startingblock);
1106 S_dopoptosub_at(pTHX_ PERL_CONTEXT *cxstk, I32 startingblock)
1110 register PERL_CONTEXT *cx;
1111 for (i = startingblock; i >= 0; i--) {
1113 switch (CxTYPE(cx)) {
1118 DEBUG_l( Perl_deb(aTHX_ "(Found sub #%ld)\n", (long)i));
1126 S_dopoptoeval(pTHX_ I32 startingblock)
1130 register PERL_CONTEXT *cx;
1131 for (i = startingblock; i >= 0; i--) {
1133 switch (CxTYPE(cx)) {
1137 DEBUG_l( Perl_deb(aTHX_ "(Found eval #%ld)\n", (long)i));
1145 S_dopoptoloop(pTHX_ I32 startingblock)
1149 register PERL_CONTEXT *cx;
1150 for (i = startingblock; i >= 0; i--) {
1152 switch (CxTYPE(cx)) {
1154 if (ckWARN(WARN_UNSAFE))
1155 Perl_warner(aTHX_ WARN_UNSAFE, "Exiting substitution via %s",
1156 PL_op_name[PL_op->op_type]);
1159 if (ckWARN(WARN_UNSAFE))
1160 Perl_warner(aTHX_ WARN_UNSAFE, "Exiting subroutine via %s",
1161 PL_op_name[PL_op->op_type]);
1164 if (ckWARN(WARN_UNSAFE))
1165 Perl_warner(aTHX_ WARN_UNSAFE, "Exiting eval via %s",
1166 PL_op_name[PL_op->op_type]);
1169 if (ckWARN(WARN_UNSAFE))
1170 Perl_warner(aTHX_ WARN_UNSAFE, "Exiting pseudo-block via %s",
1171 PL_op_name[PL_op->op_type]);
1174 DEBUG_l( Perl_deb(aTHX_ "(Found loop #%ld)\n", (long)i));
1182 Perl_dounwind(pTHX_ I32 cxix)
1185 register PERL_CONTEXT *cx;
1189 while (cxstack_ix > cxix) {
1190 cx = &cxstack[cxstack_ix];
1191 DEBUG_l(PerlIO_printf(Perl_debug_log, "Unwinding block %ld, type %s\n",
1192 (long) cxstack_ix, PL_block_type[CxTYPE(cx)]));
1193 /* Note: we don't need to restore the base context info till the end. */
1194 switch (CxTYPE(cx)) {
1197 continue; /* not break */
1215 * Closures mentioned at top level of eval cannot be referenced
1216 * again, and their presence indirectly causes a memory leak.
1217 * (Note that the fact that compcv and friends are still set here
1218 * is, AFAIK, an accident.) --Chip
1220 * XXX need to get comppad et al from eval's cv rather than
1221 * relying on the incidental global values.
1224 S_free_closures(pTHX)
1227 SV **svp = AvARRAY(PL_comppad_name);
1229 for (ix = AvFILLp(PL_comppad_name); ix >= 0; ix--) {
1231 if (sv && sv != &PL_sv_undef && *SvPVX(sv) == '&') {
1233 svp[ix] = &PL_sv_undef;
1237 SvREFCNT_dec(CvOUTSIDE(sv));
1238 CvOUTSIDE(sv) = Nullcv;
1251 Perl_qerror(pTHX_ SV *err)
1254 sv_catsv(ERRSV, err);
1256 sv_catsv(PL_errors, err);
1258 Perl_warn(aTHX_ "%_", err);
1263 Perl_die_where(pTHX_ char *message, STRLEN msglen)
1269 register PERL_CONTEXT *cx;
1274 if (PL_in_eval & EVAL_KEEPERR) {
1277 svp = hv_fetch(ERRHV, message, msglen, TRUE);
1280 static char prefix[] = "\t(in cleanup) ";
1282 sv_upgrade(*svp, SVt_IV);
1283 (void)SvIOK_only(*svp);
1286 SvGROW(err, SvCUR(err)+sizeof(prefix)+msglen);
1287 sv_catpvn(err, prefix, sizeof(prefix)-1);
1288 sv_catpvn(err, message, msglen);
1289 if (ckWARN(WARN_UNSAFE)) {
1290 STRLEN start = SvCUR(err)-msglen-sizeof(prefix)+1;
1291 Perl_warner(aTHX_ WARN_UNSAFE, SvPVX(err)+start);
1298 sv_setpvn(ERRSV, message, msglen);
1301 message = SvPVx(ERRSV, msglen);
1303 while ((cxix = dopoptoeval(cxstack_ix)) < 0
1304 && PL_curstackinfo->si_prev)
1313 if (cxix < cxstack_ix)
1316 POPBLOCK(cx,PL_curpm);
1317 if (CxTYPE(cx) != CXt_EVAL) {
1318 PerlIO_write(Perl_error_log, "panic: die ", 11);
1319 PerlIO_write(Perl_error_log, message, msglen);
1324 if (gimme == G_SCALAR)
1325 *++newsp = &PL_sv_undef;
1326 PL_stack_sp = newsp;
1330 if (optype == OP_REQUIRE) {
1331 char* msg = SvPVx(ERRSV, n_a);
1332 DIE(aTHX_ "%sCompilation failed in require",
1333 *msg ? msg : "Unknown error\n");
1335 return pop_return();
1339 message = SvPVx(ERRSV, msglen);
1342 /* SFIO can really mess with your errno */
1345 PerlIO *serr = Perl_error_log;
1347 PerlIO_write(serr, message, msglen);
1348 (void)PerlIO_flush(serr);
1361 if (SvTRUE(left) != SvTRUE(right))
1373 RETURNOP(cLOGOP->op_other);
1382 RETURNOP(cLOGOP->op_other);
1388 register I32 cxix = dopoptosub(cxstack_ix);
1389 register PERL_CONTEXT *cx;
1390 register PERL_CONTEXT *ccstack = cxstack;
1391 PERL_SI *top_si = PL_curstackinfo;
1402 /* we may be in a higher stacklevel, so dig down deeper */
1403 while (cxix < 0 && top_si->si_type != PERLSI_MAIN) {
1404 top_si = top_si->si_prev;
1405 ccstack = top_si->si_cxstack;
1406 cxix = dopoptosub_at(ccstack, top_si->si_cxix);
1409 if (GIMME != G_ARRAY)
1413 if (PL_DBsub && cxix >= 0 &&
1414 ccstack[cxix].blk_sub.cv == GvCV(PL_DBsub))
1418 cxix = dopoptosub_at(ccstack, cxix - 1);
1421 cx = &ccstack[cxix];
1422 if (CxTYPE(cx) == CXt_SUB) {
1423 dbcxix = dopoptosub_at(ccstack, cxix - 1);
1424 /* We expect that ccstack[dbcxix] is CXt_SUB, anyway, the
1425 field below is defined for any cx. */
1426 if (PL_DBsub && dbcxix >= 0 && ccstack[dbcxix].blk_sub.cv == GvCV(PL_DBsub))
1427 cx = &ccstack[dbcxix];
1430 if (GIMME != G_ARRAY) {
1431 hv = cx->blk_oldcop->cop_stash;
1433 PUSHs(&PL_sv_undef);
1436 sv_setpv(TARG, HvNAME(hv));
1442 hv = cx->blk_oldcop->cop_stash;
1444 PUSHs(&PL_sv_undef);
1446 PUSHs(sv_2mortal(newSVpv(HvNAME(hv), 0)));
1447 PUSHs(sv_2mortal(newSVpvn(SvPVX(GvSV(cx->blk_oldcop->cop_filegv)),
1448 SvCUR(GvSV(cx->blk_oldcop->cop_filegv)))));
1449 PUSHs(sv_2mortal(newSViv((I32)cx->blk_oldcop->cop_line)));
1452 if (CxTYPE(cx) == CXt_SUB) { /* So is ccstack[dbcxix]. */
1454 gv_efullname3(sv, CvGV(ccstack[cxix].blk_sub.cv), Nullch);
1455 PUSHs(sv_2mortal(sv));
1456 PUSHs(sv_2mortal(newSViv((I32)cx->blk_sub.hasargs)));
1459 PUSHs(sv_2mortal(newSVpvn("(eval)",6)));
1460 PUSHs(sv_2mortal(newSViv(0)));
1462 gimme = (I32)cx->blk_gimme;
1463 if (gimme == G_VOID)
1464 PUSHs(&PL_sv_undef);
1466 PUSHs(sv_2mortal(newSViv(gimme & G_ARRAY)));
1467 if (CxTYPE(cx) == CXt_EVAL) {
1468 if (cx->blk_eval.old_op_type == OP_ENTEREVAL) {
1469 PUSHs(cx->blk_eval.cur_text);
1472 else if (cx->blk_eval.old_name) { /* Try blocks have old_name == 0. */
1473 /* Require, put the name. */
1474 PUSHs(sv_2mortal(newSVpv(cx->blk_eval.old_name, 0)));
1479 PUSHs(&PL_sv_undef);
1480 PUSHs(&PL_sv_undef);
1482 if (CxTYPE(cx) == CXt_SUB && cx->blk_sub.hasargs
1483 && PL_curcop->cop_stash == PL_debstash)
1485 AV *ary = cx->blk_sub.argarray;
1486 int off = AvARRAY(ary) - AvALLOC(ary);
1490 PL_dbargs = GvAV(gv_AVadd(tmpgv = gv_fetchpv("DB::args", TRUE,
1493 AvREAL_off(PL_dbargs); /* XXX Should be REIFY */
1496 if (AvMAX(PL_dbargs) < AvFILLp(ary) + off)
1497 av_extend(PL_dbargs, AvFILLp(ary) + off);
1498 Copy(AvALLOC(ary), AvARRAY(PL_dbargs), AvFILLp(ary) + 1 + off, SV*);
1499 AvFILLp(PL_dbargs) = AvFILLp(ary) + off;
1501 /* XXX only hints propagated via op_private are currently
1502 * visible (others are not easily accessible, since they
1503 * use the global PL_hints) */
1504 PUSHs(sv_2mortal(newSViv((I32)cx->blk_oldcop->op_private &
1505 HINT_PRIVATE_MASK)));
1519 sv_reset(tmps, PL_curcop->cop_stash);
1531 PL_curcop = (COP*)PL_op;
1532 TAINT_NOT; /* Each statement is presumed innocent */
1533 PL_stack_sp = PL_stack_base + cxstack[cxstack_ix].blk_oldsp;
1536 if (PL_op->op_private || SvIV(PL_DBsingle) || SvIV(PL_DBsignal) || SvIV(PL_DBtrace))
1540 register PERL_CONTEXT *cx;
1541 I32 gimme = G_ARRAY;
1548 DIE(aTHX_ "No DB::DB routine defined");
1550 if (CvDEPTH(cv) >= 1 && !(PL_debug & (1<<30))) /* don't do recursive DB::DB call */
1562 push_return(PL_op->op_next);
1563 PUSHBLOCK(cx, CXt_SUB, SP);
1566 (void)SvREFCNT_inc(cv);
1567 SAVESPTR(PL_curpad);
1568 PL_curpad = AvARRAY((AV*)*av_fetch(CvPADLIST(cv),1,FALSE));
1569 RETURNOP(CvSTART(cv));
1583 register PERL_CONTEXT *cx;
1584 I32 gimme = GIMME_V;
1591 if (PL_op->op_flags & OPf_SPECIAL) {
1593 svp = &THREADSV(PL_op->op_targ); /* per-thread variable */
1594 SAVEGENERICSV(*svp);
1598 #endif /* USE_THREADS */
1599 if (PL_op->op_targ) {
1600 svp = &PL_curpad[PL_op->op_targ]; /* "my" variable */
1604 svp = &GvSV((GV*)POPs); /* symbol table variable */
1605 SAVEGENERICSV(*svp);
1611 PUSHBLOCK(cx, CXt_LOOP, SP);
1612 PUSHLOOP(cx, svp, MARK);
1613 if (PL_op->op_flags & OPf_STACKED) {
1614 cx->blk_loop.iterary = (AV*)SvREFCNT_inc(POPs);
1615 if (SvTYPE(cx->blk_loop.iterary) != SVt_PVAV) {
1617 if (SvNIOKp(sv) || !SvPOKp(sv) ||
1618 (looks_like_number(sv) && *SvPVX(sv) != '0')) {
1619 if (SvNV(sv) < IV_MIN ||
1620 SvNV((SV*)cx->blk_loop.iterary) >= IV_MAX)
1621 DIE(aTHX_ "Range iterator outside integer range");
1622 cx->blk_loop.iterix = SvIV(sv);
1623 cx->blk_loop.itermax = SvIV((SV*)cx->blk_loop.iterary);
1626 cx->blk_loop.iterlval = newSVsv(sv);
1630 cx->blk_loop.iterary = PL_curstack;
1631 AvFILLp(PL_curstack) = SP - PL_stack_base;
1632 cx->blk_loop.iterix = MARK - PL_stack_base;
1641 register PERL_CONTEXT *cx;
1642 I32 gimme = GIMME_V;
1648 PUSHBLOCK(cx, CXt_LOOP, SP);
1649 PUSHLOOP(cx, 0, SP);
1657 register PERL_CONTEXT *cx;
1658 struct block_loop cxloop;
1666 POPLOOP1(cx); /* Delay POPLOOP2 until stack values are safe */
1669 if (gimme == G_VOID)
1671 else if (gimme == G_SCALAR) {
1673 *++newsp = sv_mortalcopy(*SP);
1675 *++newsp = &PL_sv_undef;
1679 *++newsp = sv_mortalcopy(*++mark);
1680 TAINT_NOT; /* Each item is independent */
1686 POPLOOP2(); /* Stack values are safe: release loop vars ... */
1687 PL_curpm = newpm; /* ... and pop $1 et al */
1699 register PERL_CONTEXT *cx;
1700 struct block_sub cxsub;
1701 bool popsub2 = FALSE;
1707 if (PL_curstackinfo->si_type == PERLSI_SORT) {
1708 if (cxstack_ix == PL_sortcxix || dopoptosub(cxstack_ix) <= PL_sortcxix) {
1709 if (cxstack_ix > PL_sortcxix)
1710 dounwind(PL_sortcxix);
1711 AvARRAY(PL_curstack)[1] = *SP;
1712 PL_stack_sp = PL_stack_base + 1;
1717 cxix = dopoptosub(cxstack_ix);
1719 DIE(aTHX_ "Can't return outside a subroutine");
1720 if (cxix < cxstack_ix)
1724 switch (CxTYPE(cx)) {
1726 POPSUB1(cx); /* Delay POPSUB2 until stack values are safe */
1731 if (AvFILLp(PL_comppad_name) >= 0)
1734 if (optype == OP_REQUIRE &&
1735 (MARK == SP || (gimme == G_SCALAR && !SvTRUE(*SP))) )
1737 /* Unassume the success we assumed earlier. */
1738 char *name = cx->blk_eval.old_name;
1739 (void)hv_delete(GvHVn(PL_incgv), name, strlen(name), G_DISCARD);
1740 DIE(aTHX_ "%s did not return a true value", name);
1744 DIE(aTHX_ "panic: return");
1748 if (gimme == G_SCALAR) {
1751 if (cxsub.cv && CvDEPTH(cxsub.cv) > 1) {
1753 *++newsp = SvREFCNT_inc(*SP);
1758 *++newsp = sv_mortalcopy(*SP);
1761 *++newsp = (SvTEMP(*SP)) ? *SP : sv_mortalcopy(*SP);
1763 *++newsp = sv_mortalcopy(*SP);
1765 *++newsp = &PL_sv_undef;
1767 else if (gimme == G_ARRAY) {
1768 while (++MARK <= SP) {
1769 *++newsp = (popsub2 && SvTEMP(*MARK))
1770 ? *MARK : sv_mortalcopy(*MARK);
1771 TAINT_NOT; /* Each item is independent */
1774 PL_stack_sp = newsp;
1776 /* Stack values are safe: */
1778 POPSUB2(); /* release CV and @_ ... */
1780 PL_curpm = newpm; /* ... and pop $1 et al */
1783 return pop_return();
1790 register PERL_CONTEXT *cx;
1791 struct block_loop cxloop;
1792 struct block_sub cxsub;
1799 SV **mark = PL_stack_base + cxstack[cxstack_ix].blk_oldsp;
1801 if (PL_op->op_flags & OPf_SPECIAL) {
1802 cxix = dopoptoloop(cxstack_ix);
1804 DIE(aTHX_ "Can't \"last\" outside a block");
1807 cxix = dopoptolabel(cPVOP->op_pv);
1809 DIE(aTHX_ "Label not found for \"last %s\"", cPVOP->op_pv);
1811 if (cxix < cxstack_ix)
1815 switch (CxTYPE(cx)) {
1817 POPLOOP1(cx); /* Delay POPLOOP2 until stack values are safe */
1819 nextop = cxloop.last_op->op_next;
1822 POPSUB1(cx); /* Delay POPSUB2 until stack values are safe */
1824 nextop = pop_return();
1828 nextop = pop_return();
1831 DIE(aTHX_ "panic: last");
1835 if (gimme == G_SCALAR) {
1837 *++newsp = ((pop2 == CXt_SUB) && SvTEMP(*SP))
1838 ? *SP : sv_mortalcopy(*SP);
1840 *++newsp = &PL_sv_undef;
1842 else if (gimme == G_ARRAY) {
1843 while (++MARK <= SP) {
1844 *++newsp = ((pop2 == CXt_SUB) && SvTEMP(*MARK))
1845 ? *MARK : sv_mortalcopy(*MARK);
1846 TAINT_NOT; /* Each item is independent */
1852 /* Stack values are safe: */
1855 POPLOOP2(); /* release loop vars ... */
1859 POPSUB2(); /* release CV and @_ ... */
1862 PL_curpm = newpm; /* ... and pop $1 et al */
1871 register PERL_CONTEXT *cx;
1874 if (PL_op->op_flags & OPf_SPECIAL) {
1875 cxix = dopoptoloop(cxstack_ix);
1877 DIE(aTHX_ "Can't \"next\" outside a block");
1880 cxix = dopoptolabel(cPVOP->op_pv);
1882 DIE(aTHX_ "Label not found for \"next %s\"", cPVOP->op_pv);
1884 if (cxix < cxstack_ix)
1888 oldsave = PL_scopestack[PL_scopestack_ix - 1];
1889 LEAVE_SCOPE(oldsave);
1890 return cx->blk_loop.next_op;
1896 register PERL_CONTEXT *cx;
1899 if (PL_op->op_flags & OPf_SPECIAL) {
1900 cxix = dopoptoloop(cxstack_ix);
1902 DIE(aTHX_ "Can't \"redo\" outside a block");
1905 cxix = dopoptolabel(cPVOP->op_pv);
1907 DIE(aTHX_ "Label not found for \"redo %s\"", cPVOP->op_pv);
1909 if (cxix < cxstack_ix)
1913 oldsave = PL_scopestack[PL_scopestack_ix - 1];
1914 LEAVE_SCOPE(oldsave);
1915 return cx->blk_loop.redo_op;
1919 S_dofindlabel(pTHX_ OP *o, char *label, OP **opstack, OP **oplimit)
1923 static char too_deep[] = "Target of goto is too deeply nested";
1926 Perl_croak(aTHX_ too_deep);
1927 if (o->op_type == OP_LEAVE ||
1928 o->op_type == OP_SCOPE ||
1929 o->op_type == OP_LEAVELOOP ||
1930 o->op_type == OP_LEAVETRY)
1932 *ops++ = cUNOPo->op_first;
1934 Perl_croak(aTHX_ too_deep);
1937 if (o->op_flags & OPf_KIDS) {
1939 /* First try all the kids at this level, since that's likeliest. */
1940 for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling) {
1941 if ((kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) &&
1942 kCOP->cop_label && strEQ(kCOP->cop_label, label))
1945 for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling) {
1946 if (kid == PL_lastgotoprobe)
1948 if ((kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) &&
1950 (ops[-1]->op_type != OP_NEXTSTATE &&
1951 ops[-1]->op_type != OP_DBSTATE)))
1953 if (o = dofindlabel(kid, label, ops, oplimit))
1972 register PERL_CONTEXT *cx;
1973 #define GOTO_DEPTH 64
1974 OP *enterops[GOTO_DEPTH];
1976 int do_dump = (PL_op->op_type == OP_DUMP);
1977 static char must_have_label[] = "goto must have label";
1980 if (PL_op->op_flags & OPf_STACKED) {
1984 /* This egregious kludge implements goto &subroutine */
1985 if (SvROK(sv) && SvTYPE(SvRV(sv)) == SVt_PVCV) {
1987 register PERL_CONTEXT *cx;
1988 CV* cv = (CV*)SvRV(sv);
1994 if (!CvROOT(cv) && !CvXSUB(cv)) {
1999 /* autoloaded stub? */
2000 if (cv != GvCV(gv) && (cv = GvCV(gv)))
2002 autogv = gv_autoload4(GvSTASH(gv), GvNAME(gv),
2003 GvNAMELEN(gv), FALSE);
2004 if (autogv && (cv = GvCV(autogv)))
2006 tmpstr = sv_newmortal();
2007 gv_efullname3(tmpstr, gv, Nullch);
2008 DIE(aTHX_ "Goto undefined subroutine &%s",SvPVX(tmpstr));
2010 DIE(aTHX_ "Goto undefined subroutine");
2013 /* First do some returnish stuff. */
2014 cxix = dopoptosub(cxstack_ix);
2016 DIE(aTHX_ "Can't goto subroutine outside a subroutine");
2017 if (cxix < cxstack_ix)
2020 if (CxTYPE(cx) == CXt_EVAL && cx->blk_eval.old_op_type == OP_ENTEREVAL)
2021 DIE(aTHX_ "Can't goto subroutine from an eval-string");
2023 if (CxTYPE(cx) == CXt_SUB && cx->blk_sub.hasargs) {
2024 /* put @_ back onto stack */
2025 AV* av = cx->blk_sub.argarray;
2027 items = AvFILLp(av) + 1;
2029 EXTEND(PL_stack_sp, items); /* @_ could have been extended. */
2030 Copy(AvARRAY(av), PL_stack_sp, items, SV*);
2031 PL_stack_sp += items;
2033 SvREFCNT_dec(GvAV(PL_defgv));
2034 GvAV(PL_defgv) = cx->blk_sub.savearray;
2035 #endif /* USE_THREADS */
2036 /* abandon @_ if it got reified */
2038 (void)sv_2mortal((SV*)av); /* delay until return */
2040 av_extend(av, items-1);
2041 AvFLAGS(av) = AVf_REIFY;
2042 PL_curpad[0] = (SV*)(cx->blk_sub.argarray = av);
2045 else if (CvXSUB(cv)) { /* put GvAV(defgv) back onto stack */
2049 av = (AV*)PL_curpad[0];
2051 av = GvAV(PL_defgv);
2053 items = AvFILLp(av) + 1;
2055 EXTEND(PL_stack_sp, items); /* @_ could have been extended. */
2056 Copy(AvARRAY(av), PL_stack_sp, items, SV*);
2057 PL_stack_sp += items;
2059 if (CxTYPE(cx) == CXt_SUB &&
2060 !(CvDEPTH(cx->blk_sub.cv) = cx->blk_sub.olddepth))
2061 SvREFCNT_dec(cx->blk_sub.cv);
2062 oldsave = PL_scopestack[PL_scopestack_ix - 1];
2063 LEAVE_SCOPE(oldsave);
2065 /* Now do some callish stuff. */
2068 #ifdef PERL_XSUB_OLDSTYLE
2069 if (CvOLDSTYLE(cv)) {
2070 I32 (*fp3)(int,int,int);
2075 fp3 = (I32(*)(int,int,int)))CvXSUB(cv;
2076 items = (*fp3)(CvXSUBANY(cv).any_i32,
2077 mark - PL_stack_base + 1,
2079 SP = PL_stack_base + items;
2082 #endif /* PERL_XSUB_OLDSTYLE */
2087 PL_stack_sp--; /* There is no cv arg. */
2088 /* Push a mark for the start of arglist */
2090 (void)(*CvXSUB(cv))(aTHXo_ cv);
2091 /* Pop the current context like a decent sub should */
2092 POPBLOCK(cx, PL_curpm);
2093 /* Do _not_ use PUTBACK, keep the XSUB's return stack! */
2096 return pop_return();
2099 AV* padlist = CvPADLIST(cv);
2100 SV** svp = AvARRAY(padlist);
2101 if (CxTYPE(cx) == CXt_EVAL) {
2102 PL_in_eval = cx->blk_eval.old_in_eval;
2103 PL_eval_root = cx->blk_eval.old_eval_root;
2104 cx->cx_type = CXt_SUB;
2105 cx->blk_sub.hasargs = 0;
2107 cx->blk_sub.cv = cv;
2108 cx->blk_sub.olddepth = CvDEPTH(cv);
2110 if (CvDEPTH(cv) < 2)
2111 (void)SvREFCNT_inc(cv);
2112 else { /* save temporaries on recursion? */
2113 if (CvDEPTH(cv) == 100 && ckWARN(WARN_RECURSION))
2114 sub_crush_depth(cv);
2115 if (CvDEPTH(cv) > AvFILLp(padlist)) {
2116 AV *newpad = newAV();
2117 SV **oldpad = AvARRAY(svp[CvDEPTH(cv)-1]);
2118 I32 ix = AvFILLp((AV*)svp[1]);
2119 svp = AvARRAY(svp[0]);
2120 for ( ;ix > 0; ix--) {
2121 if (svp[ix] != &PL_sv_undef) {
2122 char *name = SvPVX(svp[ix]);
2123 if ((SvFLAGS(svp[ix]) & SVf_FAKE)
2126 /* outer lexical or anon code */
2127 av_store(newpad, ix,
2128 SvREFCNT_inc(oldpad[ix]) );
2130 else { /* our own lexical */
2132 av_store(newpad, ix, sv = (SV*)newAV());
2133 else if (*name == '%')
2134 av_store(newpad, ix, sv = (SV*)newHV());
2136 av_store(newpad, ix, sv = NEWSV(0,0));
2141 av_store(newpad, ix, sv = NEWSV(0,0));
2145 if (cx->blk_sub.hasargs) {
2148 av_store(newpad, 0, (SV*)av);
2149 AvFLAGS(av) = AVf_REIFY;
2151 av_store(padlist, CvDEPTH(cv), (SV*)newpad);
2152 AvFILLp(padlist) = CvDEPTH(cv);
2153 svp = AvARRAY(padlist);
2157 if (!cx->blk_sub.hasargs) {
2158 AV* av = (AV*)PL_curpad[0];
2160 items = AvFILLp(av) + 1;
2162 /* Mark is at the end of the stack. */
2164 Copy(AvARRAY(av), SP + 1, items, SV*);
2169 #endif /* USE_THREADS */
2170 SAVESPTR(PL_curpad);
2171 PL_curpad = AvARRAY((AV*)svp[CvDEPTH(cv)]);
2173 if (cx->blk_sub.hasargs)
2174 #endif /* USE_THREADS */
2176 AV* av = (AV*)PL_curpad[0];
2180 cx->blk_sub.savearray = GvAV(PL_defgv);
2181 GvAV(PL_defgv) = (AV*)SvREFCNT_inc(av);
2182 #endif /* USE_THREADS */
2183 cx->blk_sub.argarray = av;
2186 if (items >= AvMAX(av) + 1) {
2188 if (AvARRAY(av) != ary) {
2189 AvMAX(av) += AvARRAY(av) - AvALLOC(av);
2190 SvPVX(av) = (char*)ary;
2192 if (items >= AvMAX(av) + 1) {
2193 AvMAX(av) = items - 1;
2194 Renew(ary,items+1,SV*);
2196 SvPVX(av) = (char*)ary;
2199 Copy(mark,AvARRAY(av),items,SV*);
2200 AvFILLp(av) = items - 1;
2201 assert(!AvREAL(av));
2208 if (PERLDB_SUB) { /* Checking curstash breaks DProf. */
2210 * We do not care about using sv to call CV;
2211 * it's for informational purposes only.
2213 SV *sv = GvSV(PL_DBsub);
2216 if (PERLDB_SUB_NN) {
2217 SvIVX(sv) = PTR2IV(cv); /* Already upgraded, saved */
2220 gv_efullname3(sv, CvGV(cv), Nullch);
2223 && (gotocv = get_cv("DB::goto", FALSE)) ) {
2224 PUSHMARK( PL_stack_sp );
2225 call_sv((SV*)gotocv, G_SCALAR | G_NODEBUG);
2229 RETURNOP(CvSTART(cv));
2233 label = SvPV(sv,n_a);
2234 if (!(do_dump || *label))
2235 DIE(aTHX_ must_have_label);
2238 else if (PL_op->op_flags & OPf_SPECIAL) {
2240 DIE(aTHX_ must_have_label);
2243 label = cPVOP->op_pv;
2245 if (label && *label) {
2250 PL_lastgotoprobe = 0;
2252 for (ix = cxstack_ix; ix >= 0; ix--) {
2254 switch (CxTYPE(cx)) {
2256 gotoprobe = PL_eval_root; /* XXX not good for nested eval */
2259 gotoprobe = cx->blk_oldcop->op_sibling;
2265 gotoprobe = cx->blk_oldcop->op_sibling;
2267 gotoprobe = PL_main_root;
2270 if (CvDEPTH(cx->blk_sub.cv)) {
2271 gotoprobe = CvROOT(cx->blk_sub.cv);
2276 DIE(aTHX_ "Can't \"goto\" outside a block");
2279 DIE(aTHX_ "panic: goto");
2280 gotoprobe = PL_main_root;
2283 retop = dofindlabel(gotoprobe, label,
2284 enterops, enterops + GOTO_DEPTH);
2287 PL_lastgotoprobe = gotoprobe;
2290 DIE(aTHX_ "Can't find label %s", label);
2292 /* pop unwanted frames */
2294 if (ix < cxstack_ix) {
2301 oldsave = PL_scopestack[PL_scopestack_ix];
2302 LEAVE_SCOPE(oldsave);
2305 /* push wanted frames */
2307 if (*enterops && enterops[1]) {
2309 for (ix = 1; enterops[ix]; ix++) {
2310 PL_op = enterops[ix];
2311 /* Eventually we may want to stack the needed arguments
2312 * for each op. For now, we punt on the hard ones. */
2313 if (PL_op->op_type == OP_ENTERITER)
2314 DIE(aTHX_ "Can't \"goto\" into the middle of a foreach loop",
2316 CALL_FPTR(PL_op->op_ppaddr)(aTHX);
2324 if (!retop) retop = PL_main_start;
2326 PL_restartop = retop;
2327 PL_do_undump = TRUE;
2331 PL_restartop = 0; /* hmm, must be GNU unexec().. */
2332 PL_do_undump = FALSE;
2348 if (anum == 1 && VMSISH_EXIT)
2353 PUSHs(&PL_sv_undef);
2361 NV value = SvNVx(GvSV(cCOP->cop_gv));
2362 register I32 match = I_32(value);
2365 if (((NV)match) > value)
2366 --match; /* was fractional--truncate other way */
2368 match -= cCOP->uop.scop.scop_offset;
2371 else if (match > cCOP->uop.scop.scop_max)
2372 match = cCOP->uop.scop.scop_max;
2373 PL_op = cCOP->uop.scop.scop_next[match];
2383 PL_op = PL_op->op_next; /* can't assume anything */
2386 match = *(SvPVx(GvSV(cCOP->cop_gv), n_a)) & 255;
2387 match -= cCOP->uop.scop.scop_offset;
2390 else if (match > cCOP->uop.scop.scop_max)
2391 match = cCOP->uop.scop.scop_max;
2392 PL_op = cCOP->uop.scop.scop_next[match];
2401 S_save_lines(pTHX_ AV *array, SV *sv)
2403 register char *s = SvPVX(sv);
2404 register char *send = SvPVX(sv) + SvCUR(sv);
2406 register I32 line = 1;
2408 while (s && s < send) {
2409 SV *tmpstr = NEWSV(85,0);
2411 sv_upgrade(tmpstr, SVt_PVMG);
2412 t = strchr(s, '\n');
2418 sv_setpvn(tmpstr, s, t - s);
2419 av_store(array, line++, tmpstr);
2425 S_docatch_body(pTHX_ va_list args)
2432 S_docatch(pTHX_ OP *o)
2439 assert(CATCH_GET == TRUE);
2443 CALLPROTECT(aTHX_ &ret, MEMBER_TO_FPTR(S_docatch_body));
2449 PL_op = PL_restartop;
2464 Perl_sv_compile_2op(pTHX_ SV *sv, OP** startop, char *code, AV** avp)
2465 /* sv Text to convert to OP tree. */
2466 /* startop op_free() this to undo. */
2467 /* code Short string id of the caller. */
2469 dSP; /* Make POPBLOCK work. */
2472 I32 gimme = 0; /* SUSPECT - INITIALZE TO WHAT? NI-S */
2475 OP *oop = PL_op, *rop;
2476 char tmpbuf[TYPE_DIGITS(long) + 12 + 10];
2482 /* switch to eval mode */
2484 if (PL_curcop == &PL_compiling) {
2485 SAVESPTR(PL_compiling.cop_stash);
2486 PL_compiling.cop_stash = PL_curstash;
2488 SAVESPTR(PL_compiling.cop_filegv);
2489 SAVEI16(PL_compiling.cop_line);
2490 sprintf(tmpbuf, "_<(%.10s_eval %lu)", code, (unsigned long)++PL_evalseq);
2491 PL_compiling.cop_filegv = gv_fetchfile(tmpbuf+2);
2492 PL_compiling.cop_line = 1;
2493 /* XXX For C<eval "...">s within BEGIN {} blocks, this ends up
2494 deleting the eval's FILEGV from the stash before gv_check() runs
2495 (i.e. before run-time proper). To work around the coredump that
2496 ensues, we always turn GvMULTI_on for any globals that were
2497 introduced within evals. See force_ident(). GSAR 96-10-12 */
2498 safestr = savepv(tmpbuf);
2499 SAVEDELETE(PL_defstash, safestr, strlen(safestr));
2501 #ifdef OP_IN_REGISTER
2509 PL_op->op_type = OP_ENTEREVAL;
2510 PL_op->op_flags = 0; /* Avoid uninit warning. */
2511 PUSHBLOCK(cx, CXt_EVAL, SP);
2512 PUSHEVAL(cx, 0, PL_compiling.cop_filegv);
2513 rop = doeval(G_SCALAR, startop);
2514 POPBLOCK(cx,PL_curpm);
2517 (*startop)->op_type = OP_NULL;
2518 (*startop)->op_ppaddr = PL_ppaddr[OP_NULL];
2520 *avp = (AV*)SvREFCNT_inc(PL_comppad);
2522 if (PL_curcop == &PL_compiling)
2523 PL_compiling.op_private = PL_hints;
2524 #ifdef OP_IN_REGISTER
2530 /* With USE_THREADS, eval_owner must be held on entry to doeval */
2532 S_doeval(pTHX_ int gimme, OP** startop)
2541 PL_in_eval = EVAL_INEVAL;
2545 /* set up a scratch pad */
2548 SAVESPTR(PL_curpad);
2549 SAVESPTR(PL_comppad);
2550 SAVESPTR(PL_comppad_name);
2551 SAVEI32(PL_comppad_name_fill);
2552 SAVEI32(PL_min_intro_pending);
2553 SAVEI32(PL_max_intro_pending);
2556 for (i = cxstack_ix - 1; i >= 0; i--) {
2557 PERL_CONTEXT *cx = &cxstack[i];
2558 if (CxTYPE(cx) == CXt_EVAL)
2560 else if (CxTYPE(cx) == CXt_SUB) {
2561 caller = cx->blk_sub.cv;
2566 SAVESPTR(PL_compcv);
2567 PL_compcv = (CV*)NEWSV(1104,0);
2568 sv_upgrade((SV *)PL_compcv, SVt_PVCV);
2569 CvEVAL_on(PL_compcv);
2571 CvOWNER(PL_compcv) = 0;
2572 New(666, CvMUTEXP(PL_compcv), 1, perl_mutex);
2573 MUTEX_INIT(CvMUTEXP(PL_compcv));
2574 #endif /* USE_THREADS */
2576 PL_comppad = newAV();
2577 av_push(PL_comppad, Nullsv);
2578 PL_curpad = AvARRAY(PL_comppad);
2579 PL_comppad_name = newAV();
2580 PL_comppad_name_fill = 0;
2581 PL_min_intro_pending = 0;
2584 av_store(PL_comppad_name, 0, newSVpvn("@_", 2));
2585 PL_curpad[0] = (SV*)newAV();
2586 SvPADMY_on(PL_curpad[0]); /* XXX Needed? */
2587 #endif /* USE_THREADS */
2589 comppadlist = newAV();
2590 AvREAL_off(comppadlist);
2591 av_store(comppadlist, 0, (SV*)PL_comppad_name);
2592 av_store(comppadlist, 1, (SV*)PL_comppad);
2593 CvPADLIST(PL_compcv) = comppadlist;
2595 if (!saveop || saveop->op_type != OP_REQUIRE)
2596 CvOUTSIDE(PL_compcv) = (CV*)SvREFCNT_inc(caller);
2598 SAVEFREESV(PL_compcv);
2600 /* make sure we compile in the right package */
2602 newstash = PL_curcop->cop_stash;
2603 if (PL_curstash != newstash) {
2604 SAVESPTR(PL_curstash);
2605 PL_curstash = newstash;
2607 SAVESPTR(PL_beginav);
2608 PL_beginav = newAV();
2609 SAVEFREESV(PL_beginav);
2611 /* try to compile it */
2613 PL_eval_root = Nullop;
2615 PL_curcop = &PL_compiling;
2616 PL_curcop->cop_arybase = 0;
2617 SvREFCNT_dec(PL_rs);
2618 PL_rs = newSVpvn("\n", 1);
2619 if (saveop && saveop->op_flags & OPf_SPECIAL)
2620 PL_in_eval |= EVAL_KEEPERR;
2623 if (yyparse() || PL_error_count || !PL_eval_root) {
2627 I32 optype = 0; /* Might be reset by POPEVAL. */
2632 op_free(PL_eval_root);
2633 PL_eval_root = Nullop;
2635 SP = PL_stack_base + POPMARK; /* pop original mark */
2637 POPBLOCK(cx,PL_curpm);
2643 if (optype == OP_REQUIRE) {
2644 char* msg = SvPVx(ERRSV, n_a);
2645 DIE(aTHX_ "%sCompilation failed in require",
2646 *msg ? msg : "Unknown error\n");
2649 char* msg = SvPVx(ERRSV, n_a);
2651 POPBLOCK(cx,PL_curpm);
2653 Perl_croak(aTHX_ "%sCompilation failed in regexp",
2654 (*msg ? msg : "Unknown error\n"));
2656 SvREFCNT_dec(PL_rs);
2657 PL_rs = SvREFCNT_inc(PL_nrs);
2659 MUTEX_LOCK(&PL_eval_mutex);
2661 COND_SIGNAL(&PL_eval_cond);
2662 MUTEX_UNLOCK(&PL_eval_mutex);
2663 #endif /* USE_THREADS */
2666 SvREFCNT_dec(PL_rs);
2667 PL_rs = SvREFCNT_inc(PL_nrs);
2668 PL_compiling.cop_line = 0;
2670 *startop = PL_eval_root;
2671 SvREFCNT_dec(CvOUTSIDE(PL_compcv));
2672 CvOUTSIDE(PL_compcv) = Nullcv;
2674 SAVEFREEOP(PL_eval_root);
2676 scalarvoid(PL_eval_root);
2677 else if (gimme & G_ARRAY)
2680 scalar(PL_eval_root);
2682 DEBUG_x(dump_eval());
2684 /* Register with debugger: */
2685 if (PERLDB_INTER && saveop->op_type == OP_REQUIRE) {
2686 CV *cv = get_cv("DB::postponed", FALSE);
2690 XPUSHs((SV*)PL_compiling.cop_filegv);
2692 call_sv((SV*)cv, G_DISCARD);
2696 /* compiled okay, so do it */
2698 CvDEPTH(PL_compcv) = 1;
2699 SP = PL_stack_base + POPMARK; /* pop original mark */
2700 PL_op = saveop; /* The caller may need it. */
2702 MUTEX_LOCK(&PL_eval_mutex);
2704 COND_SIGNAL(&PL_eval_cond);
2705 MUTEX_UNLOCK(&PL_eval_mutex);
2706 #endif /* USE_THREADS */
2708 RETURNOP(PL_eval_start);
2712 S_doopen_pmc(pTHX_ const char *name, const char *mode)
2714 STRLEN namelen = strlen(name);
2717 if (namelen > 3 && strEQ(name + namelen - 3, ".pm")) {
2718 SV *pmcsv = Perl_newSVpvf(aTHX_ "%s%c", name, 'c');
2719 char *pmc = SvPV_nolen(pmcsv);
2722 if (PerlLIO_stat(pmc, &pmcstat) < 0) {
2723 fp = PerlIO_open(name, mode);
2726 if (PerlLIO_stat(name, &pmstat) < 0 ||
2727 pmstat.st_mtime < pmcstat.st_mtime)
2729 fp = PerlIO_open(pmc, mode);
2732 fp = PerlIO_open(name, mode);
2735 SvREFCNT_dec(pmcsv);
2738 fp = PerlIO_open(name, mode);
2746 register PERL_CONTEXT *cx;
2751 SV *namesv = Nullsv;
2753 I32 gimme = G_SCALAR;
2754 PerlIO *tryrsfp = 0;
2756 int filter_has_file = 0;
2757 GV *filter_child_proc = 0;
2758 SV *filter_state = 0;
2762 if (SvNIOKp(sv) && !SvPOKp(sv)) {
2763 if (Atof(PL_patchlevel) + 0.00000999 < SvNV(sv))
2764 DIE(aTHX_ "Perl %s required--this is only version %s, stopped",
2765 SvPV(sv,n_a),PL_patchlevel);
2768 name = SvPV(sv, len);
2769 if (!(name && len > 0 && *name))
2770 DIE(aTHX_ "Null filename used");
2771 TAINT_PROPER("require");
2772 if (PL_op->op_type == OP_REQUIRE &&
2773 (svp = hv_fetch(GvHVn(PL_incgv), name, len, 0)) &&
2774 *svp != &PL_sv_undef)
2777 /* prepare to compile file */
2782 (name[1] == '.' && name[2] == '/')))
2784 || (name[0] && name[1] == ':')
2787 || (name[0] == '\\' && name[1] == '\\') /* UNC path */
2790 || (strchr(name,':') || ((*name == '[' || *name == '<') &&
2791 (isALNUM(name[1]) || strchr("$-_]>",name[1]))))
2796 tryrsfp = doopen_pmc(name,PERL_SCRIPT_MODE);
2799 AV *ar = GvAVn(PL_incgv);
2803 if ((unixname = tounixspec(name, Nullch)) != Nullch)
2806 namesv = NEWSV(806, 0);
2807 for (i = 0; i <= AvFILL(ar); i++) {
2808 SV *dirsv = *av_fetch(ar, i, TRUE);
2814 if (SvTYPE(SvRV(loader)) == SVt_PVAV) {
2815 loader = *av_fetch((AV *)SvRV(loader), 0, TRUE);
2818 Perl_sv_setpvf(aTHX_ namesv, "/loader/0x%lx/%s",
2819 SvANY(loader), name);
2820 tryname = SvPVX(namesv);
2831 count = call_sv(loader, G_ARRAY);
2841 if (SvROK(arg) && SvTYPE(SvRV(arg)) == SVt_PVGV) {
2845 if (SvTYPE(arg) == SVt_PVGV) {
2846 IO *io = GvIO((GV *)arg);
2851 tryrsfp = IoIFP(io);
2852 if (IoTYPE(io) == '|') {
2853 /* reading from a child process doesn't
2854 nest -- when returning from reading
2855 the inner module, the outer one is
2856 unreadable (closed?) I've tried to
2857 save the gv to manage the lifespan of
2858 the pipe, but this didn't help. XXX */
2859 filter_child_proc = (GV *)arg;
2860 (void)SvREFCNT_inc(filter_child_proc);
2863 if (IoOFP(io) && IoOFP(io) != IoIFP(io)) {
2864 PerlIO_close(IoOFP(io));
2876 if (SvROK(arg) && SvTYPE(SvRV(arg)) == SVt_PVCV) {
2878 (void)SvREFCNT_inc(filter_sub);
2881 filter_state = SP[i];
2882 (void)SvREFCNT_inc(filter_state);
2886 tryrsfp = PerlIO_open("/dev/null",
2900 filter_has_file = 0;
2901 if (filter_child_proc) {
2902 SvREFCNT_dec(filter_child_proc);
2903 filter_child_proc = 0;
2906 SvREFCNT_dec(filter_state);
2910 SvREFCNT_dec(filter_sub);
2915 char *dir = SvPVx(dirsv, n_a);
2918 if ((unixdir = tounixpath(dir, Nullch)) == Nullch)
2920 sv_setpv(namesv, unixdir);
2921 sv_catpv(namesv, unixname);
2923 Perl_sv_setpvf(aTHX_ namesv, "%s/%s", dir, name);
2925 TAINT_PROPER("require");
2926 tryname = SvPVX(namesv);
2927 tryrsfp = doopen_pmc(tryname, PERL_SCRIPT_MODE);
2929 if (tryname[0] == '.' && tryname[1] == '/')
2937 SAVESPTR(PL_compiling.cop_filegv);
2938 PL_compiling.cop_filegv = gv_fetchfile(tryrsfp ? tryname : name);
2939 SvREFCNT_dec(namesv);
2941 if (PL_op->op_type == OP_REQUIRE) {
2942 char *msgstr = name;
2943 if (namesv) { /* did we lookup @INC? */
2944 SV *msg = sv_2mortal(newSVpv(msgstr,0));
2945 SV *dirmsgsv = NEWSV(0, 0);
2946 AV *ar = GvAVn(PL_incgv);
2948 sv_catpvn(msg, " in @INC", 8);
2949 if (instr(SvPVX(msg), ".h "))
2950 sv_catpv(msg, " (change .h to .ph maybe?)");
2951 if (instr(SvPVX(msg), ".ph "))
2952 sv_catpv(msg, " (did you run h2ph?)");
2953 sv_catpv(msg, " (@INC contains:");
2954 for (i = 0; i <= AvFILL(ar); i++) {
2955 char *dir = SvPVx(*av_fetch(ar, i, TRUE), n_a);
2956 Perl_sv_setpvf(aTHX_ dirmsgsv, " %s", dir);
2957 sv_catsv(msg, dirmsgsv);
2959 sv_catpvn(msg, ")", 1);
2960 SvREFCNT_dec(dirmsgsv);
2961 msgstr = SvPV_nolen(msg);
2963 DIE(aTHX_ "Can't locate %s", msgstr);
2969 SETERRNO(0, SS$_NORMAL);
2971 /* Assume success here to prevent recursive requirement. */
2972 (void)hv_store(GvHVn(PL_incgv), name, strlen(name),
2973 newSVsv(GvSV(PL_compiling.cop_filegv)), 0 );
2977 lex_start(sv_2mortal(newSVpvn("",0)));
2978 SAVEGENERICSV(PL_rsfp_filters);
2979 PL_rsfp_filters = Nullav;
2982 name = savepv(name);
2986 SAVEPPTR(PL_compiling.cop_warnings);
2987 if (PL_dowarn & G_WARN_ALL_ON)
2988 PL_compiling.cop_warnings = WARN_ALL ;
2989 else if (PL_dowarn & G_WARN_ALL_OFF)
2990 PL_compiling.cop_warnings = WARN_NONE ;
2992 PL_compiling.cop_warnings = WARN_STD ;
2994 if (filter_sub || filter_child_proc) {
2995 SV *datasv = filter_add(run_user_filter, Nullsv);
2996 IoLINES(datasv) = filter_has_file;
2997 IoFMT_GV(datasv) = (GV *)filter_child_proc;
2998 IoTOP_GV(datasv) = (GV *)filter_state;
2999 IoBOTTOM_GV(datasv) = (GV *)filter_sub;
3002 /* switch to eval mode */
3003 push_return(PL_op->op_next);
3004 PUSHBLOCK(cx, CXt_EVAL, SP);
3005 PUSHEVAL(cx, name, PL_compiling.cop_filegv);
3007 SAVEI16(PL_compiling.cop_line);
3008 PL_compiling.cop_line = 0;
3012 MUTEX_LOCK(&PL_eval_mutex);
3013 if (PL_eval_owner && PL_eval_owner != thr)
3014 while (PL_eval_owner)
3015 COND_WAIT(&PL_eval_cond, &PL_eval_mutex);
3016 PL_eval_owner = thr;
3017 MUTEX_UNLOCK(&PL_eval_mutex);
3018 #endif /* USE_THREADS */
3019 return DOCATCH(doeval(G_SCALAR, NULL));
3024 return pp_require();
3030 register PERL_CONTEXT *cx;
3032 I32 gimme = GIMME_V, was = PL_sub_generation;
3033 char tmpbuf[TYPE_DIGITS(long) + 12];
3038 if (!SvPV(sv,len) || !len)
3040 TAINT_PROPER("eval");
3046 /* switch to eval mode */
3048 SAVESPTR(PL_compiling.cop_filegv);
3049 sprintf(tmpbuf, "_<(eval %lu)", (unsigned long)++PL_evalseq);
3050 PL_compiling.cop_filegv = gv_fetchfile(tmpbuf+2);
3051 PL_compiling.cop_line = 1;
3052 /* XXX For C<eval "...">s within BEGIN {} blocks, this ends up
3053 deleting the eval's FILEGV from the stash before gv_check() runs
3054 (i.e. before run-time proper). To work around the coredump that
3055 ensues, we always turn GvMULTI_on for any globals that were
3056 introduced within evals. See force_ident(). GSAR 96-10-12 */
3057 safestr = savepv(tmpbuf);
3058 SAVEDELETE(PL_defstash, safestr, strlen(safestr));
3060 PL_hints = PL_op->op_targ;
3061 SAVEPPTR(PL_compiling.cop_warnings);
3062 if (!specialWARN(PL_compiling.cop_warnings)) {
3063 PL_compiling.cop_warnings = newSVsv(PL_compiling.cop_warnings) ;
3064 SAVEFREESV(PL_compiling.cop_warnings) ;
3067 push_return(PL_op->op_next);
3068 PUSHBLOCK(cx, (CXt_EVAL|CXp_REAL), SP);
3069 PUSHEVAL(cx, 0, PL_compiling.cop_filegv);
3071 /* prepare to compile string */
3073 if (PERLDB_LINE && PL_curstash != PL_debstash)
3074 save_lines(GvAV(PL_compiling.cop_filegv), PL_linestr);
3077 MUTEX_LOCK(&PL_eval_mutex);
3078 if (PL_eval_owner && PL_eval_owner != thr)
3079 while (PL_eval_owner)
3080 COND_WAIT(&PL_eval_cond, &PL_eval_mutex);
3081 PL_eval_owner = thr;
3082 MUTEX_UNLOCK(&PL_eval_mutex);
3083 #endif /* USE_THREADS */
3084 ret = doeval(gimme, NULL);
3085 if (PERLDB_INTER && was != PL_sub_generation /* Some subs defined here. */
3086 && ret != PL_op->op_next) { /* Successive compilation. */
3087 strcpy(safestr, "_<(eval )"); /* Anything fake and short. */
3089 return DOCATCH(ret);
3099 register PERL_CONTEXT *cx;
3101 U8 save_flags = PL_op -> op_flags;
3106 retop = pop_return();
3109 if (gimme == G_VOID)
3111 else if (gimme == G_SCALAR) {
3114 if (SvFLAGS(TOPs) & SVs_TEMP)
3117 *MARK = sv_mortalcopy(TOPs);
3121 *MARK = &PL_sv_undef;
3125 /* in case LEAVE wipes old return values */
3126 for (mark = newsp + 1; mark <= SP; mark++) {
3127 if (!(SvFLAGS(*mark) & SVs_TEMP)) {
3128 *mark = sv_mortalcopy(*mark);
3129 TAINT_NOT; /* Each item is independent */
3133 PL_curpm = newpm; /* Don't pop $1 et al till now */
3135 if (AvFILLp(PL_comppad_name) >= 0)
3139 assert(CvDEPTH(PL_compcv) == 1);
3141 CvDEPTH(PL_compcv) = 0;
3144 if (optype == OP_REQUIRE &&
3145 !(gimme == G_SCALAR ? SvTRUE(*SP) : SP > newsp))
3147 /* Unassume the success we assumed earlier. */
3148 char *name = cx->blk_eval.old_name;
3149 (void)hv_delete(GvHVn(PL_incgv), name, strlen(name), G_DISCARD);
3150 retop = Perl_die(aTHX_ "%s did not return a true value", name);
3151 /* die_where() did LEAVE, or we won't be here */
3155 if (!(save_flags & OPf_SPECIAL))
3165 register PERL_CONTEXT *cx;
3166 I32 gimme = GIMME_V;
3171 push_return(cLOGOP->op_other->op_next);
3172 PUSHBLOCK(cx, CXt_EVAL, SP);
3174 PL_eval_root = PL_op; /* Only needed so that goto works right. */
3176 PL_in_eval = EVAL_INEVAL;
3179 return DOCATCH(PL_op->op_next);
3189 register PERL_CONTEXT *cx;
3197 if (gimme == G_VOID)
3199 else if (gimme == G_SCALAR) {
3202 if (SvFLAGS(TOPs) & (SVs_PADTMP|SVs_TEMP))
3205 *MARK = sv_mortalcopy(TOPs);
3209 *MARK = &PL_sv_undef;
3214 /* in case LEAVE wipes old return values */
3215 for (mark = newsp + 1; mark <= SP; mark++) {
3216 if (!(SvFLAGS(*mark) & (SVs_PADTMP|SVs_TEMP))) {
3217 *mark = sv_mortalcopy(*mark);
3218 TAINT_NOT; /* Each item is independent */
3222 PL_curpm = newpm; /* Don't pop $1 et al till now */
3230 S_doparseform(pTHX_ SV *sv)
3233 register char *s = SvPV_force(sv, len);
3234 register char *send = s + len;
3235 register char *base;
3236 register I32 skipspaces = 0;
3239 bool postspace = FALSE;
3247 Perl_croak(aTHX_ "Null picture in formline");
3249 New(804, fops, (send - s)*3+10, U16); /* Almost certainly too long... */
3254 *fpc++ = FF_LINEMARK;
3255 noblank = repeat = FALSE;
3273 case ' ': case '\t':
3284 *fpc++ = FF_LITERAL;
3292 *fpc++ = skipspaces;
3296 *fpc++ = FF_NEWLINE;
3300 arg = fpc - linepc + 1;
3307 *fpc++ = FF_LINEMARK;
3308 noblank = repeat = FALSE;
3317 ischop = s[-1] == '^';
3323 arg = (s - base) - 1;
3325 *fpc++ = FF_LITERAL;
3334 *fpc++ = FF_LINEGLOB;
3336 else if (*s == '#' || (*s == '.' && s[1] == '#')) {
3337 arg = ischop ? 512 : 0;
3347 arg |= 256 + (s - f);
3349 *fpc++ = s - base; /* fieldsize for FETCH */
3350 *fpc++ = FF_DECIMAL;
3355 bool ismore = FALSE;
3358 while (*++s == '>') ;
3359 prespace = FF_SPACE;
3361 else if (*s == '|') {
3362 while (*++s == '|') ;
3363 prespace = FF_HALFSPACE;
3368 while (*++s == '<') ;
3371 if (*s == '.' && s[1] == '.' && s[2] == '.') {
3375 *fpc++ = s - base; /* fieldsize for FETCH */
3377 *fpc++ = ischop ? FF_CHECKCHOP : FF_CHECKNL;
3395 { /* need to jump to the next word */
3397 z = WORD_ALIGN - SvCUR(sv) % WORD_ALIGN;
3398 SvGROW(sv, SvCUR(sv) + z + arg * sizeof(U16) + 4);
3399 s = SvPVX(sv) + SvCUR(sv) + z;
3401 Copy(fops, s, arg, U16);
3403 sv_magic(sv, Nullsv, 'f', Nullch, 0);
3408 * The rest of this file was derived from source code contributed
3411 * NOTE: this code was derived from Tom Horsley's qsort replacement
3412 * and should not be confused with the original code.
3415 /* Copyright (C) Tom Horsley, 1997. All rights reserved.
3417 Permission granted to distribute under the same terms as perl which are
3420 This program is free software; you can redistribute it and/or modify
3421 it under the terms of either:
3423 a) the GNU General Public License as published by the Free
3424 Software Foundation; either version 1, or (at your option) any
3427 b) the "Artistic License" which comes with this Kit.
3429 Details on the perl license can be found in the perl source code which
3430 may be located via the www.perl.com web page.
3432 This is the most wonderfulest possible qsort I can come up with (and
3433 still be mostly portable) My (limited) tests indicate it consistently
3434 does about 20% fewer calls to compare than does the qsort in the Visual
3435 C++ library, other vendors may vary.
3437 Some of the ideas in here can be found in "Algorithms" by Sedgewick,
3438 others I invented myself (or more likely re-invented since they seemed
3439 pretty obvious once I watched the algorithm operate for a while).
3441 Most of this code was written while watching the Marlins sweep the Giants
3442 in the 1997 National League Playoffs - no Braves fans allowed to use this
3443 code (just kidding :-).
3445 I realize that if I wanted to be true to the perl tradition, the only
3446 comment in this file would be something like:
3448 ...they shuffled back towards the rear of the line. 'No, not at the
3449 rear!' the slave-driver shouted. 'Three files up. And stay there...
3451 However, I really needed to violate that tradition just so I could keep
3452 track of what happens myself, not to mention some poor fool trying to
3453 understand this years from now :-).
3456 /* ********************************************************** Configuration */
3458 #ifndef QSORT_ORDER_GUESS
3459 #define QSORT_ORDER_GUESS 2 /* Select doubling version of the netBSD trick */
3462 /* QSORT_MAX_STACK is the largest number of partitions that can be stacked up for
3463 future processing - a good max upper bound is log base 2 of memory size
3464 (32 on 32 bit machines, 64 on 64 bit machines, etc). In reality can
3465 safely be smaller than that since the program is taking up some space and
3466 most operating systems only let you grab some subset of contiguous
3467 memory (not to mention that you are normally sorting data larger than
3468 1 byte element size :-).
3470 #ifndef QSORT_MAX_STACK
3471 #define QSORT_MAX_STACK 32
3474 /* QSORT_BREAK_EVEN is the size of the largest partition we should insertion sort.
3475 Anything bigger and we use qsort. If you make this too small, the qsort
3476 will probably break (or become less efficient), because it doesn't expect
3477 the middle element of a partition to be the same as the right or left -
3478 you have been warned).
3480 #ifndef QSORT_BREAK_EVEN
3481 #define QSORT_BREAK_EVEN 6
3484 /* ************************************************************* Data Types */
3486 /* hold left and right index values of a partition waiting to be sorted (the
3487 partition includes both left and right - right is NOT one past the end or
3488 anything like that).
3490 struct partition_stack_entry {
3493 #ifdef QSORT_ORDER_GUESS
3494 int qsort_break_even;
3498 /* ******************************************************* Shorthand Macros */
3500 /* Note that these macros will be used from inside the qsort function where
3501 we happen to know that the variable 'elt_size' contains the size of an
3502 array element and the variable 'temp' points to enough space to hold a
3503 temp element and the variable 'array' points to the array being sorted
3504 and 'compare' is the pointer to the compare routine.
3506 Also note that there are very many highly architecture specific ways
3507 these might be sped up, but this is simply the most generally portable
3508 code I could think of.
3511 /* Return < 0 == 0 or > 0 as the value of elt1 is < elt2, == elt2, > elt2
3513 #define qsort_cmp(elt1, elt2) \
3514 ((*compare)(aTHXo_ array[elt1], array[elt2]))
3516 #ifdef QSORT_ORDER_GUESS
3517 #define QSORT_NOTICE_SWAP swapped++;
3519 #define QSORT_NOTICE_SWAP
3522 /* swaps contents of array elements elt1, elt2.
3524 #define qsort_swap(elt1, elt2) \
3527 temp = array[elt1]; \
3528 array[elt1] = array[elt2]; \
3529 array[elt2] = temp; \
3532 /* rotate contents of elt1, elt2, elt3 such that elt1 gets elt2, elt2 gets
3533 elt3 and elt3 gets elt1.
3535 #define qsort_rotate(elt1, elt2, elt3) \
3538 temp = array[elt1]; \
3539 array[elt1] = array[elt2]; \
3540 array[elt2] = array[elt3]; \
3541 array[elt3] = temp; \
3544 /* ************************************************************ Debug stuff */
3551 return; /* good place to set a breakpoint */
3554 #define qsort_assert(t) (void)( (t) || (break_here(), 0) )
3557 doqsort_all_asserts(
3561 int (*compare)(const void * elt1, const void * elt2),
3562 int pc_left, int pc_right, int u_left, int u_right)
3566 qsort_assert(pc_left <= pc_right);
3567 qsort_assert(u_right < pc_left);
3568 qsort_assert(pc_right < u_left);
3569 for (i = u_right + 1; i < pc_left; ++i) {
3570 qsort_assert(qsort_cmp(i, pc_left) < 0);
3572 for (i = pc_left; i < pc_right; ++i) {
3573 qsort_assert(qsort_cmp(i, pc_right) == 0);
3575 for (i = pc_right + 1; i < u_left; ++i) {
3576 qsort_assert(qsort_cmp(pc_right, i) < 0);
3580 #define qsort_all_asserts(PC_LEFT, PC_RIGHT, U_LEFT, U_RIGHT) \
3581 doqsort_all_asserts(array, num_elts, elt_size, compare, \
3582 PC_LEFT, PC_RIGHT, U_LEFT, U_RIGHT)
3586 #define qsort_assert(t) ((void)0)
3588 #define qsort_all_asserts(PC_LEFT, PC_RIGHT, U_LEFT, U_RIGHT) ((void)0)
3592 /* ****************************************************************** qsort */
3595 S_qsortsv(pTHX_ SV ** array, size_t num_elts, SVCOMPARE_t compare)
3599 struct partition_stack_entry partition_stack[QSORT_MAX_STACK];
3600 int next_stack_entry = 0;
3604 #ifdef QSORT_ORDER_GUESS
3605 int qsort_break_even;
3609 /* Make sure we actually have work to do.
3611 if (num_elts <= 1) {
3615 /* Setup the initial partition definition and fall into the sorting loop
3618 part_right = (int)(num_elts - 1);
3619 #ifdef QSORT_ORDER_GUESS
3620 qsort_break_even = QSORT_BREAK_EVEN;
3622 #define qsort_break_even QSORT_BREAK_EVEN
3625 if ((part_right - part_left) >= qsort_break_even) {
3626 /* OK, this is gonna get hairy, so lets try to document all the
3627 concepts and abbreviations and variables and what they keep
3630 pc: pivot chunk - the set of array elements we accumulate in the
3631 middle of the partition, all equal in value to the original
3632 pivot element selected. The pc is defined by:
3634 pc_left - the leftmost array index of the pc
3635 pc_right - the rightmost array index of the pc
3637 we start with pc_left == pc_right and only one element
3638 in the pivot chunk (but it can grow during the scan).
3640 u: uncompared elements - the set of elements in the partition
3641 we have not yet compared to the pivot value. There are two
3642 uncompared sets during the scan - one to the left of the pc
3643 and one to the right.
3645 u_right - the rightmost index of the left side's uncompared set
3646 u_left - the leftmost index of the right side's uncompared set
3648 The leftmost index of the left sides's uncompared set
3649 doesn't need its own variable because it is always defined
3650 by the leftmost edge of the whole partition (part_left). The
3651 same goes for the rightmost edge of the right partition
3654 We know there are no uncompared elements on the left once we
3655 get u_right < part_left and no uncompared elements on the
3656 right once u_left > part_right. When both these conditions
3657 are met, we have completed the scan of the partition.
3659 Any elements which are between the pivot chunk and the
3660 uncompared elements should be less than the pivot value on
3661 the left side and greater than the pivot value on the right
3662 side (in fact, the goal of the whole algorithm is to arrange
3663 for that to be true and make the groups of less-than and
3664 greater-then elements into new partitions to sort again).
3666 As you marvel at the complexity of the code and wonder why it
3667 has to be so confusing. Consider some of the things this level
3668 of confusion brings:
3670 Once I do a compare, I squeeze every ounce of juice out of it. I
3671 never do compare calls I don't have to do, and I certainly never
3674 I also never swap any elements unless I can prove there is a
3675 good reason. Many sort algorithms will swap a known value with
3676 an uncompared value just to get things in the right place (or
3677 avoid complexity :-), but that uncompared value, once it gets
3678 compared, may then have to be swapped again. A lot of the
3679 complexity of this code is due to the fact that it never swaps
3680 anything except compared values, and it only swaps them when the
3681 compare shows they are out of position.
3683 int pc_left, pc_right;
3684 int u_right, u_left;
3688 pc_left = ((part_left + part_right) / 2);
3690 u_right = pc_left - 1;
3691 u_left = pc_right + 1;
3693 /* Qsort works best when the pivot value is also the median value
3694 in the partition (unfortunately you can't find the median value
3695 without first sorting :-), so to give the algorithm a helping
3696 hand, we pick 3 elements and sort them and use the median value
3697 of that tiny set as the pivot value.
3699 Some versions of qsort like to use the left middle and right as
3700 the 3 elements to sort so they can insure the ends of the
3701 partition will contain values which will stop the scan in the
3702 compare loop, but when you have to call an arbitrarily complex
3703 routine to do a compare, its really better to just keep track of
3704 array index values to know when you hit the edge of the
3705 partition and avoid the extra compare. An even better reason to
3706 avoid using a compare call is the fact that you can drop off the
3707 edge of the array if someone foolishly provides you with an
3708 unstable compare function that doesn't always provide consistent
3711 So, since it is simpler for us to compare the three adjacent
3712 elements in the middle of the partition, those are the ones we
3713 pick here (conveniently pointed at by u_right, pc_left, and
3714 u_left). The values of the left, center, and right elements
3715 are refered to as l c and r in the following comments.
3718 #ifdef QSORT_ORDER_GUESS
3721 s = qsort_cmp(u_right, pc_left);
3724 s = qsort_cmp(pc_left, u_left);
3725 /* if l < c, c < r - already in order - nothing to do */
3727 /* l < c, c == r - already in order, pc grows */
3729 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3731 /* l < c, c > r - need to know more */
3732 s = qsort_cmp(u_right, u_left);
3734 /* l < c, c > r, l < r - swap c & r to get ordered */
3735 qsort_swap(pc_left, u_left);
3736 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3737 } else if (s == 0) {
3738 /* l < c, c > r, l == r - swap c&r, grow pc */
3739 qsort_swap(pc_left, u_left);
3741 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3743 /* l < c, c > r, l > r - make lcr into rlc to get ordered */
3744 qsort_rotate(pc_left, u_right, u_left);
3745 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3748 } else if (s == 0) {
3750 s = qsort_cmp(pc_left, u_left);
3752 /* l == c, c < r - already in order, grow pc */
3754 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3755 } else if (s == 0) {
3756 /* l == c, c == r - already in order, grow pc both ways */
3759 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3761 /* l == c, c > r - swap l & r, grow pc */
3762 qsort_swap(u_right, u_left);
3764 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3768 s = qsort_cmp(pc_left, u_left);
3770 /* l > c, c < r - need to know more */
3771 s = qsort_cmp(u_right, u_left);
3773 /* l > c, c < r, l < r - swap l & c to get ordered */
3774 qsort_swap(u_right, pc_left);
3775 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3776 } else if (s == 0) {
3777 /* l > c, c < r, l == r - swap l & c, grow pc */
3778 qsort_swap(u_right, pc_left);
3780 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3782 /* l > c, c < r, l > r - rotate lcr into crl to order */
3783 qsort_rotate(u_right, pc_left, u_left);
3784 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3786 } else if (s == 0) {
3787 /* l > c, c == r - swap ends, grow pc */
3788 qsort_swap(u_right, u_left);
3790 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3792 /* l > c, c > r - swap ends to get in order */
3793 qsort_swap(u_right, u_left);
3794 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3797 /* We now know the 3 middle elements have been compared and
3798 arranged in the desired order, so we can shrink the uncompared
3803 qsort_all_asserts(pc_left, pc_right, u_left, u_right);
3805 /* The above massive nested if was the simple part :-). We now have
3806 the middle 3 elements ordered and we need to scan through the
3807 uncompared sets on either side, swapping elements that are on
3808 the wrong side or simply shuffling equal elements around to get
3809 all equal elements into the pivot chunk.
3813 int still_work_on_left;
3814 int still_work_on_right;
3816 /* Scan the uncompared values on the left. If I find a value
3817 equal to the pivot value, move it over so it is adjacent to
3818 the pivot chunk and expand the pivot chunk. If I find a value
3819 less than the pivot value, then just leave it - its already
3820 on the correct side of the partition. If I find a greater
3821 value, then stop the scan.
3823 while (still_work_on_left = (u_right >= part_left)) {
3824 s = qsort_cmp(u_right, pc_left);
3827 } else if (s == 0) {
3829 if (pc_left != u_right) {
3830 qsort_swap(u_right, pc_left);
3836 qsort_assert(u_right < pc_left);
3837 qsort_assert(pc_left <= pc_right);
3838 qsort_assert(qsort_cmp(u_right + 1, pc_left) <= 0);
3839 qsort_assert(qsort_cmp(pc_left, pc_right) == 0);
3842 /* Do a mirror image scan of uncompared values on the right
3844 while (still_work_on_right = (u_left <= part_right)) {
3845 s = qsort_cmp(pc_right, u_left);
3848 } else if (s == 0) {
3850 if (pc_right != u_left) {
3851 qsort_swap(pc_right, u_left);
3857 qsort_assert(u_left > pc_right);
3858 qsort_assert(pc_left <= pc_right);
3859 qsort_assert(qsort_cmp(pc_right, u_left - 1) <= 0);
3860 qsort_assert(qsort_cmp(pc_left, pc_right) == 0);
3863 if (still_work_on_left) {
3864 /* I know I have a value on the left side which needs to be
3865 on the right side, but I need to know more to decide
3866 exactly the best thing to do with it.
3868 if (still_work_on_right) {
3869 /* I know I have values on both side which are out of
3870 position. This is a big win because I kill two birds
3871 with one swap (so to speak). I can advance the
3872 uncompared pointers on both sides after swapping both
3873 of them into the right place.
3875 qsort_swap(u_right, u_left);
3878 qsort_all_asserts(pc_left, pc_right, u_left, u_right);
3880 /* I have an out of position value on the left, but the
3881 right is fully scanned, so I "slide" the pivot chunk
3882 and any less-than values left one to make room for the
3883 greater value over on the right. If the out of position
3884 value is immediately adjacent to the pivot chunk (there
3885 are no less-than values), I can do that with a swap,
3886 otherwise, I have to rotate one of the less than values
3887 into the former position of the out of position value
3888 and the right end of the pivot chunk into the left end
3892 if (pc_left == u_right) {
3893 qsort_swap(u_right, pc_right);
3894 qsort_all_asserts(pc_left, pc_right-1, u_left, u_right-1);
3896 qsort_rotate(u_right, pc_left, pc_right);
3897 qsort_all_asserts(pc_left, pc_right-1, u_left, u_right-1);
3902 } else if (still_work_on_right) {
3903 /* Mirror image of complex case above: I have an out of
3904 position value on the right, but the left is fully
3905 scanned, so I need to shuffle things around to make room
3906 for the right value on the left.
3909 if (pc_right == u_left) {
3910 qsort_swap(u_left, pc_left);
3911 qsort_all_asserts(pc_left+1, pc_right, u_left+1, u_right);
3913 qsort_rotate(pc_right, pc_left, u_left);
3914 qsort_all_asserts(pc_left+1, pc_right, u_left+1, u_right);
3919 /* No more scanning required on either side of partition,
3920 break out of loop and figure out next set of partitions
3926 /* The elements in the pivot chunk are now in the right place. They
3927 will never move or be compared again. All I have to do is decide
3928 what to do with the stuff to the left and right of the pivot
3931 Notes on the QSORT_ORDER_GUESS ifdef code:
3933 1. If I just built these partitions without swapping any (or
3934 very many) elements, there is a chance that the elements are
3935 already ordered properly (being properly ordered will
3936 certainly result in no swapping, but the converse can't be
3939 2. A (properly written) insertion sort will run faster on
3940 already ordered data than qsort will.
3942 3. Perhaps there is some way to make a good guess about
3943 switching to an insertion sort earlier than partition size 6
3944 (for instance - we could save the partition size on the stack
3945 and increase the size each time we find we didn't swap, thus
3946 switching to insertion sort earlier for partitions with a
3947 history of not swapping).
3949 4. Naturally, if I just switch right away, it will make
3950 artificial benchmarks with pure ascending (or descending)
3951 data look really good, but is that a good reason in general?
3955 #ifdef QSORT_ORDER_GUESS
3957 #if QSORT_ORDER_GUESS == 1
3958 qsort_break_even = (part_right - part_left) + 1;
3960 #if QSORT_ORDER_GUESS == 2
3961 qsort_break_even *= 2;
3963 #if QSORT_ORDER_GUESS == 3
3964 int prev_break = qsort_break_even;
3965 qsort_break_even *= qsort_break_even;
3966 if (qsort_break_even < prev_break) {
3967 qsort_break_even = (part_right - part_left) + 1;
3971 qsort_break_even = QSORT_BREAK_EVEN;
3975 if (part_left < pc_left) {
3976 /* There are elements on the left which need more processing.
3977 Check the right as well before deciding what to do.
3979 if (pc_right < part_right) {
3980 /* We have two partitions to be sorted. Stack the biggest one
3981 and process the smallest one on the next iteration. This
3982 minimizes the stack height by insuring that any additional
3983 stack entries must come from the smallest partition which
3984 (because it is smallest) will have the fewest
3985 opportunities to generate additional stack entries.
3987 if ((part_right - pc_right) > (pc_left - part_left)) {
3988 /* stack the right partition, process the left */
3989 partition_stack[next_stack_entry].left = pc_right + 1;
3990 partition_stack[next_stack_entry].right = part_right;
3991 #ifdef QSORT_ORDER_GUESS
3992 partition_stack[next_stack_entry].qsort_break_even = qsort_break_even;
3994 part_right = pc_left - 1;
3996 /* stack the left partition, process the right */
3997 partition_stack[next_stack_entry].left = part_left;
3998 partition_stack[next_stack_entry].right = pc_left - 1;
3999 #ifdef QSORT_ORDER_GUESS
4000 partition_stack[next_stack_entry].qsort_break_even = qsort_break_even;
4002 part_left = pc_right + 1;
4004 qsort_assert(next_stack_entry < QSORT_MAX_STACK);
4007 /* The elements on the left are the only remaining elements
4008 that need sorting, arrange for them to be processed as the
4011 part_right = pc_left - 1;
4013 } else if (pc_right < part_right) {
4014 /* There is only one chunk on the right to be sorted, make it
4015 the new partition and loop back around.
4017 part_left = pc_right + 1;
4019 /* This whole partition wound up in the pivot chunk, so
4020 we need to get a new partition off the stack.
4022 if (next_stack_entry == 0) {
4023 /* the stack is empty - we are done */
4027 part_left = partition_stack[next_stack_entry].left;
4028 part_right = partition_stack[next_stack_entry].right;
4029 #ifdef QSORT_ORDER_GUESS
4030 qsort_break_even = partition_stack[next_stack_entry].qsort_break_even;
4034 /* This partition is too small to fool with qsort complexity, just
4035 do an ordinary insertion sort to minimize overhead.
4038 /* Assume 1st element is in right place already, and start checking
4039 at 2nd element to see where it should be inserted.
4041 for (i = part_left + 1; i <= part_right; ++i) {
4043 /* Scan (backwards - just in case 'i' is already in right place)
4044 through the elements already sorted to see if the ith element
4045 belongs ahead of one of them.
4047 for (j = i - 1; j >= part_left; --j) {
4048 if (qsort_cmp(i, j) >= 0) {
4049 /* i belongs right after j
4056 /* Looks like we really need to move some things
4060 for (k = i - 1; k >= j; --k)
4061 array[k + 1] = array[k];
4066 /* That partition is now sorted, grab the next one, or get out
4067 of the loop if there aren't any more.
4070 if (next_stack_entry == 0) {
4071 /* the stack is empty - we are done */
4075 part_left = partition_stack[next_stack_entry].left;
4076 part_right = partition_stack[next_stack_entry].right;
4077 #ifdef QSORT_ORDER_GUESS
4078 qsort_break_even = partition_stack[next_stack_entry].qsort_break_even;
4083 /* Believe it or not, the array is sorted at this point! */
4096 sortcv(pTHXo_ SV *a, SV *b)
4099 I32 oldsaveix = PL_savestack_ix;
4100 I32 oldscopeix = PL_scopestack_ix;
4102 GvSV(PL_firstgv) = a;
4103 GvSV(PL_secondgv) = b;
4104 PL_stack_sp = PL_stack_base;
4107 if (PL_stack_sp != PL_stack_base + 1)
4108 Perl_croak(aTHX_ "Sort subroutine didn't return single value");
4109 if (!SvNIOKp(*PL_stack_sp))
4110 Perl_croak(aTHX_ "Sort subroutine didn't return a numeric value");
4111 result = SvIV(*PL_stack_sp);
4112 while (PL_scopestack_ix > oldscopeix) {
4115 leave_scope(oldsaveix);
4121 sv_ncmp(pTHXo_ SV *a, SV *b)
4125 return nv1 < nv2 ? -1 : nv1 > nv2 ? 1 : 0;
4129 sv_i_ncmp(pTHXo_ SV *a, SV *b)
4133 return iv1 < iv2 ? -1 : iv1 > iv2 ? 1 : 0;
4135 #define tryCALL_AMAGICbin(left,right,meth,svp) STMT_START { \
4137 if (PL_amagic_generation) { \
4138 if (SvAMAGIC(left)||SvAMAGIC(right))\
4139 *svp = amagic_call(left, \
4147 amagic_ncmp(pTHXo_ register SV *a, register SV *b)
4150 tryCALL_AMAGICbin(a,b,ncmp,&tmpsv);
4155 I32 i = SvIVX(tmpsv);
4165 return sv_ncmp(aTHXo_ a, b);
4169 amagic_i_ncmp(pTHXo_ register SV *a, register SV *b)
4172 tryCALL_AMAGICbin(a,b,ncmp,&tmpsv);
4177 I32 i = SvIVX(tmpsv);
4187 return sv_i_ncmp(aTHXo_ a, b);
4191 amagic_cmp(pTHXo_ register SV *str1, register SV *str2)
4194 tryCALL_AMAGICbin(str1,str2,scmp,&tmpsv);
4199 I32 i = SvIVX(tmpsv);
4209 return sv_cmp(str1, str2);
4213 amagic_cmp_locale(pTHXo_ register SV *str1, register SV *str2)
4216 tryCALL_AMAGICbin(str1,str2,scmp,&tmpsv);
4221 I32 i = SvIVX(tmpsv);
4231 return sv_cmp_locale(str1, str2);
4235 run_user_filter(pTHXo_ int idx, SV *buf_sv, int maxlen)
4237 SV *datasv = FILTER_DATA(idx);
4238 int filter_has_file = IoLINES(datasv);
4239 GV *filter_child_proc = (GV *)IoFMT_GV(datasv);
4240 SV *filter_state = (SV *)IoTOP_GV(datasv);
4241 SV *filter_sub = (SV *)IoBOTTOM_GV(datasv);
4244 /* I was having segfault trouble under Linux 2.2.5 after a
4245 parse error occured. (Had to hack around it with a test
4246 for PL_error_count == 0.) Solaris doesn't segfault --
4247 not sure where the trouble is yet. XXX */
4249 if (filter_has_file) {
4250 len = FILTER_READ(idx+1, buf_sv, maxlen);
4253 if (filter_sub && len >= 0) {
4264 PUSHs(sv_2mortal(newSViv(maxlen)));
4266 PUSHs(filter_state);
4269 count = call_sv(filter_sub, G_SCALAR);
4285 IoLINES(datasv) = 0;
4286 if (filter_child_proc) {
4287 SvREFCNT_dec(filter_child_proc);
4288 IoFMT_GV(datasv) = Nullgv;
4291 SvREFCNT_dec(filter_state);
4292 IoTOP_GV(datasv) = Nullgv;
4295 SvREFCNT_dec(filter_sub);
4296 IoBOTTOM_GV(datasv) = Nullgv;
4298 filter_del(run_user_filter);
4307 sv_cmp_locale_static(pTHXo_ register SV *str1, register SV *str2)
4309 return sv_cmp_locale(str1, str2);
4313 sv_cmp_static(pTHXo_ register SV *str1, register SV *str2)
4315 return sv_cmp(str1, str2);
4318 #endif /* PERL_OBJECT */