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(PerlIO_stderr(), "%-16s%ld\n", name, (long) arg);
335 PerlIO_printf(PerlIO_stderr(), "%-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(PerlIO_stderr(), "panic: die ", 11);
1319 PerlIO_write(PerlIO_stderr(), 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_write(PerlIO_stderr(), message, msglen);
1346 (void)PerlIO_flush(PerlIO_stderr());
1359 if (SvTRUE(left) != SvTRUE(right))
1371 RETURNOP(cLOGOP->op_other);
1380 RETURNOP(cLOGOP->op_other);
1386 register I32 cxix = dopoptosub(cxstack_ix);
1387 register PERL_CONTEXT *cx;
1388 register PERL_CONTEXT *ccstack = cxstack;
1389 PERL_SI *top_si = PL_curstackinfo;
1400 /* we may be in a higher stacklevel, so dig down deeper */
1401 while (cxix < 0 && top_si->si_type != PERLSI_MAIN) {
1402 top_si = top_si->si_prev;
1403 ccstack = top_si->si_cxstack;
1404 cxix = dopoptosub_at(ccstack, top_si->si_cxix);
1407 if (GIMME != G_ARRAY)
1411 if (PL_DBsub && cxix >= 0 &&
1412 ccstack[cxix].blk_sub.cv == GvCV(PL_DBsub))
1416 cxix = dopoptosub_at(ccstack, cxix - 1);
1419 cx = &ccstack[cxix];
1420 if (CxTYPE(cx) == CXt_SUB) {
1421 dbcxix = dopoptosub_at(ccstack, cxix - 1);
1422 /* We expect that ccstack[dbcxix] is CXt_SUB, anyway, the
1423 field below is defined for any cx. */
1424 if (PL_DBsub && dbcxix >= 0 && ccstack[dbcxix].blk_sub.cv == GvCV(PL_DBsub))
1425 cx = &ccstack[dbcxix];
1428 if (GIMME != G_ARRAY) {
1429 hv = cx->blk_oldcop->cop_stash;
1431 PUSHs(&PL_sv_undef);
1434 sv_setpv(TARG, HvNAME(hv));
1440 hv = cx->blk_oldcop->cop_stash;
1442 PUSHs(&PL_sv_undef);
1444 PUSHs(sv_2mortal(newSVpv(HvNAME(hv), 0)));
1445 PUSHs(sv_2mortal(newSVpvn(SvPVX(GvSV(cx->blk_oldcop->cop_filegv)),
1446 SvCUR(GvSV(cx->blk_oldcop->cop_filegv)))));
1447 PUSHs(sv_2mortal(newSViv((I32)cx->blk_oldcop->cop_line)));
1450 if (CxTYPE(cx) == CXt_SUB) { /* So is ccstack[dbcxix]. */
1452 gv_efullname3(sv, CvGV(ccstack[cxix].blk_sub.cv), Nullch);
1453 PUSHs(sv_2mortal(sv));
1454 PUSHs(sv_2mortal(newSViv((I32)cx->blk_sub.hasargs)));
1457 PUSHs(sv_2mortal(newSVpvn("(eval)",6)));
1458 PUSHs(sv_2mortal(newSViv(0)));
1460 gimme = (I32)cx->blk_gimme;
1461 if (gimme == G_VOID)
1462 PUSHs(&PL_sv_undef);
1464 PUSHs(sv_2mortal(newSViv(gimme & G_ARRAY)));
1465 if (CxTYPE(cx) == CXt_EVAL) {
1466 if (cx->blk_eval.old_op_type == OP_ENTEREVAL) {
1467 PUSHs(cx->blk_eval.cur_text);
1470 else if (cx->blk_eval.old_name) { /* Try blocks have old_name == 0. */
1471 /* Require, put the name. */
1472 PUSHs(sv_2mortal(newSVpv(cx->blk_eval.old_name, 0)));
1477 PUSHs(&PL_sv_undef);
1478 PUSHs(&PL_sv_undef);
1480 if (CxTYPE(cx) == CXt_SUB && cx->blk_sub.hasargs
1481 && PL_curcop->cop_stash == PL_debstash)
1483 AV *ary = cx->blk_sub.argarray;
1484 int off = AvARRAY(ary) - AvALLOC(ary);
1488 PL_dbargs = GvAV(gv_AVadd(tmpgv = gv_fetchpv("DB::args", TRUE,
1491 AvREAL_off(PL_dbargs); /* XXX Should be REIFY */
1494 if (AvMAX(PL_dbargs) < AvFILLp(ary) + off)
1495 av_extend(PL_dbargs, AvFILLp(ary) + off);
1496 Copy(AvALLOC(ary), AvARRAY(PL_dbargs), AvFILLp(ary) + 1 + off, SV*);
1497 AvFILLp(PL_dbargs) = AvFILLp(ary) + off;
1499 /* XXX only hints propagated via op_private are currently
1500 * visible (others are not easily accessible, since they
1501 * use the global PL_hints) */
1502 PUSHs(sv_2mortal(newSViv((I32)cx->blk_oldcop->op_private &
1503 HINT_PRIVATE_MASK)));
1517 sv_reset(tmps, PL_curcop->cop_stash);
1529 PL_curcop = (COP*)PL_op;
1530 TAINT_NOT; /* Each statement is presumed innocent */
1531 PL_stack_sp = PL_stack_base + cxstack[cxstack_ix].blk_oldsp;
1534 if (PL_op->op_private || SvIV(PL_DBsingle) || SvIV(PL_DBsignal) || SvIV(PL_DBtrace))
1538 register PERL_CONTEXT *cx;
1539 I32 gimme = G_ARRAY;
1546 DIE(aTHX_ "No DB::DB routine defined");
1548 if (CvDEPTH(cv) >= 1 && !(PL_debug & (1<<30))) /* don't do recursive DB::DB call */
1560 push_return(PL_op->op_next);
1561 PUSHBLOCK(cx, CXt_SUB, SP);
1564 (void)SvREFCNT_inc(cv);
1565 SAVESPTR(PL_curpad);
1566 PL_curpad = AvARRAY((AV*)*av_fetch(CvPADLIST(cv),1,FALSE));
1567 RETURNOP(CvSTART(cv));
1581 register PERL_CONTEXT *cx;
1582 I32 gimme = GIMME_V;
1589 if (PL_op->op_flags & OPf_SPECIAL) {
1591 svp = &THREADSV(PL_op->op_targ); /* per-thread variable */
1592 SAVEGENERICSV(*svp);
1596 #endif /* USE_THREADS */
1597 if (PL_op->op_targ) {
1598 svp = &PL_curpad[PL_op->op_targ]; /* "my" variable */
1602 svp = &GvSV((GV*)POPs); /* symbol table variable */
1603 SAVEGENERICSV(*svp);
1609 PUSHBLOCK(cx, CXt_LOOP, SP);
1610 PUSHLOOP(cx, svp, MARK);
1611 if (PL_op->op_flags & OPf_STACKED) {
1612 cx->blk_loop.iterary = (AV*)SvREFCNT_inc(POPs);
1613 if (SvTYPE(cx->blk_loop.iterary) != SVt_PVAV) {
1615 if (SvNIOKp(sv) || !SvPOKp(sv) ||
1616 (looks_like_number(sv) && *SvPVX(sv) != '0')) {
1617 if (SvNV(sv) < IV_MIN ||
1618 SvNV((SV*)cx->blk_loop.iterary) >= IV_MAX)
1619 DIE(aTHX_ "Range iterator outside integer range");
1620 cx->blk_loop.iterix = SvIV(sv);
1621 cx->blk_loop.itermax = SvIV((SV*)cx->blk_loop.iterary);
1624 cx->blk_loop.iterlval = newSVsv(sv);
1628 cx->blk_loop.iterary = PL_curstack;
1629 AvFILLp(PL_curstack) = SP - PL_stack_base;
1630 cx->blk_loop.iterix = MARK - PL_stack_base;
1639 register PERL_CONTEXT *cx;
1640 I32 gimme = GIMME_V;
1646 PUSHBLOCK(cx, CXt_LOOP, SP);
1647 PUSHLOOP(cx, 0, SP);
1655 register PERL_CONTEXT *cx;
1656 struct block_loop cxloop;
1664 POPLOOP1(cx); /* Delay POPLOOP2 until stack values are safe */
1667 if (gimme == G_VOID)
1669 else if (gimme == G_SCALAR) {
1671 *++newsp = sv_mortalcopy(*SP);
1673 *++newsp = &PL_sv_undef;
1677 *++newsp = sv_mortalcopy(*++mark);
1678 TAINT_NOT; /* Each item is independent */
1684 POPLOOP2(); /* Stack values are safe: release loop vars ... */
1685 PL_curpm = newpm; /* ... and pop $1 et al */
1697 register PERL_CONTEXT *cx;
1698 struct block_sub cxsub;
1699 bool popsub2 = FALSE;
1705 if (PL_curstackinfo->si_type == PERLSI_SORT) {
1706 if (cxstack_ix == PL_sortcxix || dopoptosub(cxstack_ix) <= PL_sortcxix) {
1707 if (cxstack_ix > PL_sortcxix)
1708 dounwind(PL_sortcxix);
1709 AvARRAY(PL_curstack)[1] = *SP;
1710 PL_stack_sp = PL_stack_base + 1;
1715 cxix = dopoptosub(cxstack_ix);
1717 DIE(aTHX_ "Can't return outside a subroutine");
1718 if (cxix < cxstack_ix)
1722 switch (CxTYPE(cx)) {
1724 POPSUB1(cx); /* Delay POPSUB2 until stack values are safe */
1729 if (AvFILLp(PL_comppad_name) >= 0)
1732 if (optype == OP_REQUIRE &&
1733 (MARK == SP || (gimme == G_SCALAR && !SvTRUE(*SP))) )
1735 /* Unassume the success we assumed earlier. */
1736 char *name = cx->blk_eval.old_name;
1737 (void)hv_delete(GvHVn(PL_incgv), name, strlen(name), G_DISCARD);
1738 DIE(aTHX_ "%s did not return a true value", name);
1742 DIE(aTHX_ "panic: return");
1746 if (gimme == G_SCALAR) {
1749 if (cxsub.cv && CvDEPTH(cxsub.cv) > 1) {
1751 *++newsp = SvREFCNT_inc(*SP);
1756 *++newsp = sv_mortalcopy(*SP);
1759 *++newsp = (SvTEMP(*SP)) ? *SP : sv_mortalcopy(*SP);
1761 *++newsp = sv_mortalcopy(*SP);
1763 *++newsp = &PL_sv_undef;
1765 else if (gimme == G_ARRAY) {
1766 while (++MARK <= SP) {
1767 *++newsp = (popsub2 && SvTEMP(*MARK))
1768 ? *MARK : sv_mortalcopy(*MARK);
1769 TAINT_NOT; /* Each item is independent */
1772 PL_stack_sp = newsp;
1774 /* Stack values are safe: */
1776 POPSUB2(); /* release CV and @_ ... */
1778 PL_curpm = newpm; /* ... and pop $1 et al */
1781 return pop_return();
1788 register PERL_CONTEXT *cx;
1789 struct block_loop cxloop;
1790 struct block_sub cxsub;
1797 SV **mark = PL_stack_base + cxstack[cxstack_ix].blk_oldsp;
1799 if (PL_op->op_flags & OPf_SPECIAL) {
1800 cxix = dopoptoloop(cxstack_ix);
1802 DIE(aTHX_ "Can't \"last\" outside a block");
1805 cxix = dopoptolabel(cPVOP->op_pv);
1807 DIE(aTHX_ "Label not found for \"last %s\"", cPVOP->op_pv);
1809 if (cxix < cxstack_ix)
1813 switch (CxTYPE(cx)) {
1815 POPLOOP1(cx); /* Delay POPLOOP2 until stack values are safe */
1817 nextop = cxloop.last_op->op_next;
1820 POPSUB1(cx); /* Delay POPSUB2 until stack values are safe */
1822 nextop = pop_return();
1826 nextop = pop_return();
1829 DIE(aTHX_ "panic: last");
1833 if (gimme == G_SCALAR) {
1835 *++newsp = ((pop2 == CXt_SUB) && SvTEMP(*SP))
1836 ? *SP : sv_mortalcopy(*SP);
1838 *++newsp = &PL_sv_undef;
1840 else if (gimme == G_ARRAY) {
1841 while (++MARK <= SP) {
1842 *++newsp = ((pop2 == CXt_SUB) && SvTEMP(*MARK))
1843 ? *MARK : sv_mortalcopy(*MARK);
1844 TAINT_NOT; /* Each item is independent */
1850 /* Stack values are safe: */
1853 POPLOOP2(); /* release loop vars ... */
1857 POPSUB2(); /* release CV and @_ ... */
1860 PL_curpm = newpm; /* ... and pop $1 et al */
1869 register PERL_CONTEXT *cx;
1872 if (PL_op->op_flags & OPf_SPECIAL) {
1873 cxix = dopoptoloop(cxstack_ix);
1875 DIE(aTHX_ "Can't \"next\" outside a block");
1878 cxix = dopoptolabel(cPVOP->op_pv);
1880 DIE(aTHX_ "Label not found for \"next %s\"", cPVOP->op_pv);
1882 if (cxix < cxstack_ix)
1886 oldsave = PL_scopestack[PL_scopestack_ix - 1];
1887 LEAVE_SCOPE(oldsave);
1888 return cx->blk_loop.next_op;
1894 register PERL_CONTEXT *cx;
1897 if (PL_op->op_flags & OPf_SPECIAL) {
1898 cxix = dopoptoloop(cxstack_ix);
1900 DIE(aTHX_ "Can't \"redo\" outside a block");
1903 cxix = dopoptolabel(cPVOP->op_pv);
1905 DIE(aTHX_ "Label not found for \"redo %s\"", cPVOP->op_pv);
1907 if (cxix < cxstack_ix)
1911 oldsave = PL_scopestack[PL_scopestack_ix - 1];
1912 LEAVE_SCOPE(oldsave);
1913 return cx->blk_loop.redo_op;
1917 S_dofindlabel(pTHX_ OP *o, char *label, OP **opstack, OP **oplimit)
1921 static char too_deep[] = "Target of goto is too deeply nested";
1924 Perl_croak(aTHX_ too_deep);
1925 if (o->op_type == OP_LEAVE ||
1926 o->op_type == OP_SCOPE ||
1927 o->op_type == OP_LEAVELOOP ||
1928 o->op_type == OP_LEAVETRY)
1930 *ops++ = cUNOPo->op_first;
1932 Perl_croak(aTHX_ too_deep);
1935 if (o->op_flags & OPf_KIDS) {
1937 /* First try all the kids at this level, since that's likeliest. */
1938 for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling) {
1939 if ((kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) &&
1940 kCOP->cop_label && strEQ(kCOP->cop_label, label))
1943 for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling) {
1944 if (kid == PL_lastgotoprobe)
1946 if ((kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) &&
1948 (ops[-1]->op_type != OP_NEXTSTATE &&
1949 ops[-1]->op_type != OP_DBSTATE)))
1951 if (o = dofindlabel(kid, label, ops, oplimit))
1970 register PERL_CONTEXT *cx;
1971 #define GOTO_DEPTH 64
1972 OP *enterops[GOTO_DEPTH];
1974 int do_dump = (PL_op->op_type == OP_DUMP);
1975 static char must_have_label[] = "goto must have label";
1978 if (PL_op->op_flags & OPf_STACKED) {
1982 /* This egregious kludge implements goto &subroutine */
1983 if (SvROK(sv) && SvTYPE(SvRV(sv)) == SVt_PVCV) {
1985 register PERL_CONTEXT *cx;
1986 CV* cv = (CV*)SvRV(sv);
1992 if (!CvROOT(cv) && !CvXSUB(cv)) {
1997 /* autoloaded stub? */
1998 if (cv != GvCV(gv) && (cv = GvCV(gv)))
2000 autogv = gv_autoload4(GvSTASH(gv), GvNAME(gv),
2001 GvNAMELEN(gv), FALSE);
2002 if (autogv && (cv = GvCV(autogv)))
2004 tmpstr = sv_newmortal();
2005 gv_efullname3(tmpstr, gv, Nullch);
2006 DIE(aTHX_ "Goto undefined subroutine &%s",SvPVX(tmpstr));
2008 DIE(aTHX_ "Goto undefined subroutine");
2011 /* First do some returnish stuff. */
2012 cxix = dopoptosub(cxstack_ix);
2014 DIE(aTHX_ "Can't goto subroutine outside a subroutine");
2015 if (cxix < cxstack_ix)
2018 if (CxTYPE(cx) == CXt_EVAL && cx->blk_eval.old_op_type == OP_ENTEREVAL)
2019 DIE(aTHX_ "Can't goto subroutine from an eval-string");
2021 if (CxTYPE(cx) == CXt_SUB && cx->blk_sub.hasargs) {
2022 /* put @_ back onto stack */
2023 AV* av = cx->blk_sub.argarray;
2025 items = AvFILLp(av) + 1;
2027 EXTEND(PL_stack_sp, items); /* @_ could have been extended. */
2028 Copy(AvARRAY(av), PL_stack_sp, items, SV*);
2029 PL_stack_sp += items;
2031 SvREFCNT_dec(GvAV(PL_defgv));
2032 GvAV(PL_defgv) = cx->blk_sub.savearray;
2033 #endif /* USE_THREADS */
2034 /* abandon @_ if it got reified */
2036 (void)sv_2mortal((SV*)av); /* delay until return */
2038 av_extend(av, items-1);
2039 AvFLAGS(av) = AVf_REIFY;
2040 PL_curpad[0] = (SV*)(cx->blk_sub.argarray = av);
2043 else if (CvXSUB(cv)) { /* put GvAV(defgv) back onto stack */
2047 av = (AV*)PL_curpad[0];
2049 av = GvAV(PL_defgv);
2051 items = AvFILLp(av) + 1;
2053 EXTEND(PL_stack_sp, items); /* @_ could have been extended. */
2054 Copy(AvARRAY(av), PL_stack_sp, items, SV*);
2055 PL_stack_sp += items;
2057 if (CxTYPE(cx) == CXt_SUB &&
2058 !(CvDEPTH(cx->blk_sub.cv) = cx->blk_sub.olddepth))
2059 SvREFCNT_dec(cx->blk_sub.cv);
2060 oldsave = PL_scopestack[PL_scopestack_ix - 1];
2061 LEAVE_SCOPE(oldsave);
2063 /* Now do some callish stuff. */
2066 #ifdef PERL_XSUB_OLDSTYLE
2067 if (CvOLDSTYLE(cv)) {
2068 I32 (*fp3)(int,int,int);
2073 fp3 = (I32(*)(int,int,int)))CvXSUB(cv;
2074 items = (*fp3)(CvXSUBANY(cv).any_i32,
2075 mark - PL_stack_base + 1,
2077 SP = PL_stack_base + items;
2080 #endif /* PERL_XSUB_OLDSTYLE */
2085 PL_stack_sp--; /* There is no cv arg. */
2086 /* Push a mark for the start of arglist */
2088 (void)(*CvXSUB(cv))(aTHXo_ cv);
2089 /* Pop the current context like a decent sub should */
2090 POPBLOCK(cx, PL_curpm);
2091 /* Do _not_ use PUTBACK, keep the XSUB's return stack! */
2094 return pop_return();
2097 AV* padlist = CvPADLIST(cv);
2098 SV** svp = AvARRAY(padlist);
2099 if (CxTYPE(cx) == CXt_EVAL) {
2100 PL_in_eval = cx->blk_eval.old_in_eval;
2101 PL_eval_root = cx->blk_eval.old_eval_root;
2102 cx->cx_type = CXt_SUB;
2103 cx->blk_sub.hasargs = 0;
2105 cx->blk_sub.cv = cv;
2106 cx->blk_sub.olddepth = CvDEPTH(cv);
2108 if (CvDEPTH(cv) < 2)
2109 (void)SvREFCNT_inc(cv);
2110 else { /* save temporaries on recursion? */
2111 if (CvDEPTH(cv) == 100 && ckWARN(WARN_RECURSION))
2112 sub_crush_depth(cv);
2113 if (CvDEPTH(cv) > AvFILLp(padlist)) {
2114 AV *newpad = newAV();
2115 SV **oldpad = AvARRAY(svp[CvDEPTH(cv)-1]);
2116 I32 ix = AvFILLp((AV*)svp[1]);
2117 svp = AvARRAY(svp[0]);
2118 for ( ;ix > 0; ix--) {
2119 if (svp[ix] != &PL_sv_undef) {
2120 char *name = SvPVX(svp[ix]);
2121 if ((SvFLAGS(svp[ix]) & SVf_FAKE)
2124 /* outer lexical or anon code */
2125 av_store(newpad, ix,
2126 SvREFCNT_inc(oldpad[ix]) );
2128 else { /* our own lexical */
2130 av_store(newpad, ix, sv = (SV*)newAV());
2131 else if (*name == '%')
2132 av_store(newpad, ix, sv = (SV*)newHV());
2134 av_store(newpad, ix, sv = NEWSV(0,0));
2139 av_store(newpad, ix, sv = NEWSV(0,0));
2143 if (cx->blk_sub.hasargs) {
2146 av_store(newpad, 0, (SV*)av);
2147 AvFLAGS(av) = AVf_REIFY;
2149 av_store(padlist, CvDEPTH(cv), (SV*)newpad);
2150 AvFILLp(padlist) = CvDEPTH(cv);
2151 svp = AvARRAY(padlist);
2155 if (!cx->blk_sub.hasargs) {
2156 AV* av = (AV*)PL_curpad[0];
2158 items = AvFILLp(av) + 1;
2160 /* Mark is at the end of the stack. */
2162 Copy(AvARRAY(av), SP + 1, items, SV*);
2167 #endif /* USE_THREADS */
2168 SAVESPTR(PL_curpad);
2169 PL_curpad = AvARRAY((AV*)svp[CvDEPTH(cv)]);
2171 if (cx->blk_sub.hasargs)
2172 #endif /* USE_THREADS */
2174 AV* av = (AV*)PL_curpad[0];
2178 cx->blk_sub.savearray = GvAV(PL_defgv);
2179 GvAV(PL_defgv) = (AV*)SvREFCNT_inc(av);
2180 #endif /* USE_THREADS */
2181 cx->blk_sub.argarray = av;
2184 if (items >= AvMAX(av) + 1) {
2186 if (AvARRAY(av) != ary) {
2187 AvMAX(av) += AvARRAY(av) - AvALLOC(av);
2188 SvPVX(av) = (char*)ary;
2190 if (items >= AvMAX(av) + 1) {
2191 AvMAX(av) = items - 1;
2192 Renew(ary,items+1,SV*);
2194 SvPVX(av) = (char*)ary;
2197 Copy(mark,AvARRAY(av),items,SV*);
2198 AvFILLp(av) = items - 1;
2199 assert(!AvREAL(av));
2206 if (PERLDB_SUB) { /* Checking curstash breaks DProf. */
2208 * We do not care about using sv to call CV;
2209 * it's for informational purposes only.
2211 SV *sv = GvSV(PL_DBsub);
2214 if (PERLDB_SUB_NN) {
2215 SvIVX(sv) = PTR2IV(cv); /* Already upgraded, saved */
2218 gv_efullname3(sv, CvGV(cv), Nullch);
2221 && (gotocv = get_cv("DB::goto", FALSE)) ) {
2222 PUSHMARK( PL_stack_sp );
2223 call_sv((SV*)gotocv, G_SCALAR | G_NODEBUG);
2227 RETURNOP(CvSTART(cv));
2231 label = SvPV(sv,n_a);
2232 if (!(do_dump || *label))
2233 DIE(aTHX_ must_have_label);
2236 else if (PL_op->op_flags & OPf_SPECIAL) {
2238 DIE(aTHX_ must_have_label);
2241 label = cPVOP->op_pv;
2243 if (label && *label) {
2248 PL_lastgotoprobe = 0;
2250 for (ix = cxstack_ix; ix >= 0; ix--) {
2252 switch (CxTYPE(cx)) {
2254 gotoprobe = PL_eval_root; /* XXX not good for nested eval */
2257 gotoprobe = cx->blk_oldcop->op_sibling;
2263 gotoprobe = cx->blk_oldcop->op_sibling;
2265 gotoprobe = PL_main_root;
2268 if (CvDEPTH(cx->blk_sub.cv)) {
2269 gotoprobe = CvROOT(cx->blk_sub.cv);
2274 DIE(aTHX_ "Can't \"goto\" outside a block");
2277 DIE(aTHX_ "panic: goto");
2278 gotoprobe = PL_main_root;
2281 retop = dofindlabel(gotoprobe, label,
2282 enterops, enterops + GOTO_DEPTH);
2285 PL_lastgotoprobe = gotoprobe;
2288 DIE(aTHX_ "Can't find label %s", label);
2290 /* pop unwanted frames */
2292 if (ix < cxstack_ix) {
2299 oldsave = PL_scopestack[PL_scopestack_ix];
2300 LEAVE_SCOPE(oldsave);
2303 /* push wanted frames */
2305 if (*enterops && enterops[1]) {
2307 for (ix = 1; enterops[ix]; ix++) {
2308 PL_op = enterops[ix];
2309 /* Eventually we may want to stack the needed arguments
2310 * for each op. For now, we punt on the hard ones. */
2311 if (PL_op->op_type == OP_ENTERITER)
2312 DIE(aTHX_ "Can't \"goto\" into the middle of a foreach loop",
2314 CALL_FPTR(PL_op->op_ppaddr)(aTHX);
2322 if (!retop) retop = PL_main_start;
2324 PL_restartop = retop;
2325 PL_do_undump = TRUE;
2329 PL_restartop = 0; /* hmm, must be GNU unexec().. */
2330 PL_do_undump = FALSE;
2346 if (anum == 1 && VMSISH_EXIT)
2351 PUSHs(&PL_sv_undef);
2359 NV value = SvNVx(GvSV(cCOP->cop_gv));
2360 register I32 match = I_32(value);
2363 if (((NV)match) > value)
2364 --match; /* was fractional--truncate other way */
2366 match -= cCOP->uop.scop.scop_offset;
2369 else if (match > cCOP->uop.scop.scop_max)
2370 match = cCOP->uop.scop.scop_max;
2371 PL_op = cCOP->uop.scop.scop_next[match];
2381 PL_op = PL_op->op_next; /* can't assume anything */
2384 match = *(SvPVx(GvSV(cCOP->cop_gv), n_a)) & 255;
2385 match -= cCOP->uop.scop.scop_offset;
2388 else if (match > cCOP->uop.scop.scop_max)
2389 match = cCOP->uop.scop.scop_max;
2390 PL_op = cCOP->uop.scop.scop_next[match];
2399 S_save_lines(pTHX_ AV *array, SV *sv)
2401 register char *s = SvPVX(sv);
2402 register char *send = SvPVX(sv) + SvCUR(sv);
2404 register I32 line = 1;
2406 while (s && s < send) {
2407 SV *tmpstr = NEWSV(85,0);
2409 sv_upgrade(tmpstr, SVt_PVMG);
2410 t = strchr(s, '\n');
2416 sv_setpvn(tmpstr, s, t - s);
2417 av_store(array, line++, tmpstr);
2423 S_docatch_body(pTHX_ va_list args)
2430 S_docatch(pTHX_ OP *o)
2437 assert(CATCH_GET == TRUE);
2441 CALLPROTECT(aTHX_ &ret, MEMBER_TO_FPTR(S_docatch_body));
2447 PL_op = PL_restartop;
2462 Perl_sv_compile_2op(pTHX_ SV *sv, OP** startop, char *code, AV** avp)
2463 /* sv Text to convert to OP tree. */
2464 /* startop op_free() this to undo. */
2465 /* code Short string id of the caller. */
2467 dSP; /* Make POPBLOCK work. */
2470 I32 gimme = 0; /* SUSPECT - INITIALZE TO WHAT? NI-S */
2473 OP *oop = PL_op, *rop;
2474 char tmpbuf[TYPE_DIGITS(long) + 12 + 10];
2480 /* switch to eval mode */
2482 if (PL_curcop == &PL_compiling) {
2483 SAVESPTR(PL_compiling.cop_stash);
2484 PL_compiling.cop_stash = PL_curstash;
2486 SAVESPTR(PL_compiling.cop_filegv);
2487 SAVEI16(PL_compiling.cop_line);
2488 sprintf(tmpbuf, "_<(%.10s_eval %lu)", code, (unsigned long)++PL_evalseq);
2489 PL_compiling.cop_filegv = gv_fetchfile(tmpbuf+2);
2490 PL_compiling.cop_line = 1;
2491 /* XXX For C<eval "...">s within BEGIN {} blocks, this ends up
2492 deleting the eval's FILEGV from the stash before gv_check() runs
2493 (i.e. before run-time proper). To work around the coredump that
2494 ensues, we always turn GvMULTI_on for any globals that were
2495 introduced within evals. See force_ident(). GSAR 96-10-12 */
2496 safestr = savepv(tmpbuf);
2497 SAVEDELETE(PL_defstash, safestr, strlen(safestr));
2499 #ifdef OP_IN_REGISTER
2507 PL_op->op_type = OP_ENTEREVAL;
2508 PL_op->op_flags = 0; /* Avoid uninit warning. */
2509 PUSHBLOCK(cx, CXt_EVAL, SP);
2510 PUSHEVAL(cx, 0, PL_compiling.cop_filegv);
2511 rop = doeval(G_SCALAR, startop);
2512 POPBLOCK(cx,PL_curpm);
2515 (*startop)->op_type = OP_NULL;
2516 (*startop)->op_ppaddr = PL_ppaddr[OP_NULL];
2518 *avp = (AV*)SvREFCNT_inc(PL_comppad);
2520 if (PL_curcop == &PL_compiling)
2521 PL_compiling.op_private = PL_hints;
2522 #ifdef OP_IN_REGISTER
2528 /* With USE_THREADS, eval_owner must be held on entry to doeval */
2530 S_doeval(pTHX_ int gimme, OP** startop)
2539 PL_in_eval = EVAL_INEVAL;
2543 /* set up a scratch pad */
2546 SAVESPTR(PL_curpad);
2547 SAVESPTR(PL_comppad);
2548 SAVESPTR(PL_comppad_name);
2549 SAVEI32(PL_comppad_name_fill);
2550 SAVEI32(PL_min_intro_pending);
2551 SAVEI32(PL_max_intro_pending);
2554 for (i = cxstack_ix - 1; i >= 0; i--) {
2555 PERL_CONTEXT *cx = &cxstack[i];
2556 if (CxTYPE(cx) == CXt_EVAL)
2558 else if (CxTYPE(cx) == CXt_SUB) {
2559 caller = cx->blk_sub.cv;
2564 SAVESPTR(PL_compcv);
2565 PL_compcv = (CV*)NEWSV(1104,0);
2566 sv_upgrade((SV *)PL_compcv, SVt_PVCV);
2567 CvEVAL_on(PL_compcv);
2569 CvOWNER(PL_compcv) = 0;
2570 New(666, CvMUTEXP(PL_compcv), 1, perl_mutex);
2571 MUTEX_INIT(CvMUTEXP(PL_compcv));
2572 #endif /* USE_THREADS */
2574 PL_comppad = newAV();
2575 av_push(PL_comppad, Nullsv);
2576 PL_curpad = AvARRAY(PL_comppad);
2577 PL_comppad_name = newAV();
2578 PL_comppad_name_fill = 0;
2579 PL_min_intro_pending = 0;
2582 av_store(PL_comppad_name, 0, newSVpvn("@_", 2));
2583 PL_curpad[0] = (SV*)newAV();
2584 SvPADMY_on(PL_curpad[0]); /* XXX Needed? */
2585 #endif /* USE_THREADS */
2587 comppadlist = newAV();
2588 AvREAL_off(comppadlist);
2589 av_store(comppadlist, 0, (SV*)PL_comppad_name);
2590 av_store(comppadlist, 1, (SV*)PL_comppad);
2591 CvPADLIST(PL_compcv) = comppadlist;
2593 if (!saveop || saveop->op_type != OP_REQUIRE)
2594 CvOUTSIDE(PL_compcv) = (CV*)SvREFCNT_inc(caller);
2596 SAVEFREESV(PL_compcv);
2598 /* make sure we compile in the right package */
2600 newstash = PL_curcop->cop_stash;
2601 if (PL_curstash != newstash) {
2602 SAVESPTR(PL_curstash);
2603 PL_curstash = newstash;
2605 SAVESPTR(PL_beginav);
2606 PL_beginav = newAV();
2607 SAVEFREESV(PL_beginav);
2609 /* try to compile it */
2611 PL_eval_root = Nullop;
2613 PL_curcop = &PL_compiling;
2614 PL_curcop->cop_arybase = 0;
2615 SvREFCNT_dec(PL_rs);
2616 PL_rs = newSVpvn("\n", 1);
2617 if (saveop && saveop->op_flags & OPf_SPECIAL)
2618 PL_in_eval |= EVAL_KEEPERR;
2621 if (yyparse() || PL_error_count || !PL_eval_root) {
2625 I32 optype = 0; /* Might be reset by POPEVAL. */
2630 op_free(PL_eval_root);
2631 PL_eval_root = Nullop;
2633 SP = PL_stack_base + POPMARK; /* pop original mark */
2635 POPBLOCK(cx,PL_curpm);
2641 if (optype == OP_REQUIRE) {
2642 char* msg = SvPVx(ERRSV, n_a);
2643 DIE(aTHX_ "%sCompilation failed in require",
2644 *msg ? msg : "Unknown error\n");
2647 char* msg = SvPVx(ERRSV, n_a);
2649 POPBLOCK(cx,PL_curpm);
2651 Perl_croak(aTHX_ "%sCompilation failed in regexp",
2652 (*msg ? msg : "Unknown error\n"));
2654 SvREFCNT_dec(PL_rs);
2655 PL_rs = SvREFCNT_inc(PL_nrs);
2657 MUTEX_LOCK(&PL_eval_mutex);
2659 COND_SIGNAL(&PL_eval_cond);
2660 MUTEX_UNLOCK(&PL_eval_mutex);
2661 #endif /* USE_THREADS */
2664 SvREFCNT_dec(PL_rs);
2665 PL_rs = SvREFCNT_inc(PL_nrs);
2666 PL_compiling.cop_line = 0;
2668 *startop = PL_eval_root;
2669 SvREFCNT_dec(CvOUTSIDE(PL_compcv));
2670 CvOUTSIDE(PL_compcv) = Nullcv;
2672 SAVEFREEOP(PL_eval_root);
2674 scalarvoid(PL_eval_root);
2675 else if (gimme & G_ARRAY)
2678 scalar(PL_eval_root);
2680 DEBUG_x(dump_eval());
2682 /* Register with debugger: */
2683 if (PERLDB_INTER && saveop->op_type == OP_REQUIRE) {
2684 CV *cv = get_cv("DB::postponed", FALSE);
2688 XPUSHs((SV*)PL_compiling.cop_filegv);
2690 call_sv((SV*)cv, G_DISCARD);
2694 /* compiled okay, so do it */
2696 CvDEPTH(PL_compcv) = 1;
2697 SP = PL_stack_base + POPMARK; /* pop original mark */
2698 PL_op = saveop; /* The caller may need it. */
2700 MUTEX_LOCK(&PL_eval_mutex);
2702 COND_SIGNAL(&PL_eval_cond);
2703 MUTEX_UNLOCK(&PL_eval_mutex);
2704 #endif /* USE_THREADS */
2706 RETURNOP(PL_eval_start);
2710 S_doopen_pmc(pTHX_ const char *name, const char *mode)
2712 STRLEN namelen = strlen(name);
2715 if (namelen > 3 && strEQ(name + namelen - 3, ".pm")) {
2716 SV *pmcsv = Perl_newSVpvf(aTHX_ "%s%c", name, 'c');
2717 char *pmc = SvPV_nolen(pmcsv);
2720 if (PerlLIO_stat(pmc, &pmcstat) < 0) {
2721 fp = PerlIO_open(name, mode);
2724 if (PerlLIO_stat(name, &pmstat) < 0 ||
2725 pmstat.st_mtime < pmcstat.st_mtime)
2727 fp = PerlIO_open(pmc, mode);
2730 fp = PerlIO_open(name, mode);
2733 SvREFCNT_dec(pmcsv);
2736 fp = PerlIO_open(name, mode);
2744 register PERL_CONTEXT *cx;
2749 SV *namesv = Nullsv;
2751 I32 gimme = G_SCALAR;
2752 PerlIO *tryrsfp = 0;
2754 int filter_has_file = 0;
2755 GV *filter_child_proc = 0;
2756 SV *filter_state = 0;
2760 if (SvNIOKp(sv) && !SvPOKp(sv)) {
2761 if (Atof(PL_patchlevel) + 0.00000999 < SvNV(sv))
2762 DIE(aTHX_ "Perl %s required--this is only version %s, stopped",
2763 SvPV(sv,n_a),PL_patchlevel);
2766 name = SvPV(sv, len);
2767 if (!(name && len > 0 && *name))
2768 DIE(aTHX_ "Null filename used");
2769 TAINT_PROPER("require");
2770 if (PL_op->op_type == OP_REQUIRE &&
2771 (svp = hv_fetch(GvHVn(PL_incgv), name, len, 0)) &&
2772 *svp != &PL_sv_undef)
2775 /* prepare to compile file */
2780 (name[1] == '.' && name[2] == '/')))
2782 || (name[0] && name[1] == ':')
2785 || (name[0] == '\\' && name[1] == '\\') /* UNC path */
2788 || (strchr(name,':') || ((*name == '[' || *name == '<') &&
2789 (isALNUM(name[1]) || strchr("$-_]>",name[1]))))
2794 tryrsfp = doopen_pmc(name,PERL_SCRIPT_MODE);
2797 AV *ar = GvAVn(PL_incgv);
2801 if ((unixname = tounixspec(name, Nullch)) != Nullch)
2804 namesv = NEWSV(806, 0);
2805 for (i = 0; i <= AvFILL(ar); i++) {
2806 SV *dirsv = *av_fetch(ar, i, TRUE);
2812 if (SvTYPE(SvRV(loader)) == SVt_PVAV) {
2813 loader = *av_fetch((AV *)SvRV(loader), 0, TRUE);
2816 Perl_sv_setpvf(aTHX_ namesv, "/loader/0x%lx/%s",
2817 SvANY(loader), name);
2818 tryname = SvPVX(namesv);
2829 count = call_sv(loader, G_ARRAY);
2839 if (SvROK(arg) && SvTYPE(SvRV(arg)) == SVt_PVGV) {
2843 if (SvTYPE(arg) == SVt_PVGV) {
2844 IO *io = GvIO((GV *)arg);
2849 tryrsfp = IoIFP(io);
2850 if (IoTYPE(io) == '|') {
2851 /* reading from a child process doesn't
2852 nest -- when returning from reading
2853 the inner module, the outer one is
2854 unreadable (closed?) I've tried to
2855 save the gv to manage the lifespan of
2856 the pipe, but this didn't help. XXX */
2857 filter_child_proc = (GV *)arg;
2858 (void)SvREFCNT_inc(filter_child_proc);
2861 if (IoOFP(io) && IoOFP(io) != IoIFP(io)) {
2862 PerlIO_close(IoOFP(io));
2874 if (SvROK(arg) && SvTYPE(SvRV(arg)) == SVt_PVCV) {
2876 (void)SvREFCNT_inc(filter_sub);
2879 filter_state = SP[i];
2880 (void)SvREFCNT_inc(filter_state);
2884 tryrsfp = PerlIO_open("/dev/null",
2898 filter_has_file = 0;
2899 if (filter_child_proc) {
2900 SvREFCNT_dec(filter_child_proc);
2901 filter_child_proc = 0;
2904 SvREFCNT_dec(filter_state);
2908 SvREFCNT_dec(filter_sub);
2913 char *dir = SvPVx(dirsv, n_a);
2916 if ((unixdir = tounixpath(dir, Nullch)) == Nullch)
2918 sv_setpv(namesv, unixdir);
2919 sv_catpv(namesv, unixname);
2921 Perl_sv_setpvf(aTHX_ namesv, "%s/%s", dir, name);
2923 TAINT_PROPER("require");
2924 tryname = SvPVX(namesv);
2925 tryrsfp = doopen_pmc(tryname, PERL_SCRIPT_MODE);
2927 if (tryname[0] == '.' && tryname[1] == '/')
2935 SAVESPTR(PL_compiling.cop_filegv);
2936 PL_compiling.cop_filegv = gv_fetchfile(tryrsfp ? tryname : name);
2937 SvREFCNT_dec(namesv);
2939 if (PL_op->op_type == OP_REQUIRE) {
2940 char *msgstr = name;
2941 if (namesv) { /* did we lookup @INC? */
2942 SV *msg = sv_2mortal(newSVpv(msgstr,0));
2943 SV *dirmsgsv = NEWSV(0, 0);
2944 AV *ar = GvAVn(PL_incgv);
2946 sv_catpvn(msg, " in @INC", 8);
2947 if (instr(SvPVX(msg), ".h "))
2948 sv_catpv(msg, " (change .h to .ph maybe?)");
2949 if (instr(SvPVX(msg), ".ph "))
2950 sv_catpv(msg, " (did you run h2ph?)");
2951 sv_catpv(msg, " (@INC contains:");
2952 for (i = 0; i <= AvFILL(ar); i++) {
2953 char *dir = SvPVx(*av_fetch(ar, i, TRUE), n_a);
2954 Perl_sv_setpvf(aTHX_ dirmsgsv, " %s", dir);
2955 sv_catsv(msg, dirmsgsv);
2957 sv_catpvn(msg, ")", 1);
2958 SvREFCNT_dec(dirmsgsv);
2959 msgstr = SvPV_nolen(msg);
2961 DIE(aTHX_ "Can't locate %s", msgstr);
2967 SETERRNO(0, SS$_NORMAL);
2969 /* Assume success here to prevent recursive requirement. */
2970 (void)hv_store(GvHVn(PL_incgv), name, strlen(name),
2971 newSVsv(GvSV(PL_compiling.cop_filegv)), 0 );
2975 lex_start(sv_2mortal(newSVpvn("",0)));
2976 SAVEGENERICSV(PL_rsfp_filters);
2977 PL_rsfp_filters = Nullav;
2980 name = savepv(name);
2984 SAVEPPTR(PL_compiling.cop_warnings);
2985 if (PL_dowarn & G_WARN_ALL_ON)
2986 PL_compiling.cop_warnings = WARN_ALL ;
2987 else if (PL_dowarn & G_WARN_ALL_OFF)
2988 PL_compiling.cop_warnings = WARN_NONE ;
2990 PL_compiling.cop_warnings = WARN_STD ;
2992 if (filter_sub || filter_child_proc) {
2993 SV *datasv = filter_add(run_user_filter, Nullsv);
2994 IoLINES(datasv) = filter_has_file;
2995 IoFMT_GV(datasv) = (GV *)filter_child_proc;
2996 IoTOP_GV(datasv) = (GV *)filter_state;
2997 IoBOTTOM_GV(datasv) = (GV *)filter_sub;
3000 /* switch to eval mode */
3001 push_return(PL_op->op_next);
3002 PUSHBLOCK(cx, CXt_EVAL, SP);
3003 PUSHEVAL(cx, name, PL_compiling.cop_filegv);
3005 SAVEI16(PL_compiling.cop_line);
3006 PL_compiling.cop_line = 0;
3010 MUTEX_LOCK(&PL_eval_mutex);
3011 if (PL_eval_owner && PL_eval_owner != thr)
3012 while (PL_eval_owner)
3013 COND_WAIT(&PL_eval_cond, &PL_eval_mutex);
3014 PL_eval_owner = thr;
3015 MUTEX_UNLOCK(&PL_eval_mutex);
3016 #endif /* USE_THREADS */
3017 return DOCATCH(doeval(G_SCALAR, NULL));
3022 return pp_require();
3028 register PERL_CONTEXT *cx;
3030 I32 gimme = GIMME_V, was = PL_sub_generation;
3031 char tmpbuf[TYPE_DIGITS(long) + 12];
3036 if (!SvPV(sv,len) || !len)
3038 TAINT_PROPER("eval");
3044 /* switch to eval mode */
3046 SAVESPTR(PL_compiling.cop_filegv);
3047 sprintf(tmpbuf, "_<(eval %lu)", (unsigned long)++PL_evalseq);
3048 PL_compiling.cop_filegv = gv_fetchfile(tmpbuf+2);
3049 PL_compiling.cop_line = 1;
3050 /* XXX For C<eval "...">s within BEGIN {} blocks, this ends up
3051 deleting the eval's FILEGV from the stash before gv_check() runs
3052 (i.e. before run-time proper). To work around the coredump that
3053 ensues, we always turn GvMULTI_on for any globals that were
3054 introduced within evals. See force_ident(). GSAR 96-10-12 */
3055 safestr = savepv(tmpbuf);
3056 SAVEDELETE(PL_defstash, safestr, strlen(safestr));
3058 PL_hints = PL_op->op_targ;
3059 SAVEPPTR(PL_compiling.cop_warnings);
3060 if (!specialWARN(PL_compiling.cop_warnings)) {
3061 PL_compiling.cop_warnings = newSVsv(PL_compiling.cop_warnings) ;
3062 SAVEFREESV(PL_compiling.cop_warnings) ;
3065 push_return(PL_op->op_next);
3066 PUSHBLOCK(cx, (CXt_EVAL|CXp_REAL), SP);
3067 PUSHEVAL(cx, 0, PL_compiling.cop_filegv);
3069 /* prepare to compile string */
3071 if (PERLDB_LINE && PL_curstash != PL_debstash)
3072 save_lines(GvAV(PL_compiling.cop_filegv), PL_linestr);
3075 MUTEX_LOCK(&PL_eval_mutex);
3076 if (PL_eval_owner && PL_eval_owner != thr)
3077 while (PL_eval_owner)
3078 COND_WAIT(&PL_eval_cond, &PL_eval_mutex);
3079 PL_eval_owner = thr;
3080 MUTEX_UNLOCK(&PL_eval_mutex);
3081 #endif /* USE_THREADS */
3082 ret = doeval(gimme, NULL);
3083 if (PERLDB_INTER && was != PL_sub_generation /* Some subs defined here. */
3084 && ret != PL_op->op_next) { /* Successive compilation. */
3085 strcpy(safestr, "_<(eval )"); /* Anything fake and short. */
3087 return DOCATCH(ret);
3097 register PERL_CONTEXT *cx;
3099 U8 save_flags = PL_op -> op_flags;
3104 retop = pop_return();
3107 if (gimme == G_VOID)
3109 else if (gimme == G_SCALAR) {
3112 if (SvFLAGS(TOPs) & SVs_TEMP)
3115 *MARK = sv_mortalcopy(TOPs);
3119 *MARK = &PL_sv_undef;
3123 /* in case LEAVE wipes old return values */
3124 for (mark = newsp + 1; mark <= SP; mark++) {
3125 if (!(SvFLAGS(*mark) & SVs_TEMP)) {
3126 *mark = sv_mortalcopy(*mark);
3127 TAINT_NOT; /* Each item is independent */
3131 PL_curpm = newpm; /* Don't pop $1 et al till now */
3133 if (AvFILLp(PL_comppad_name) >= 0)
3137 assert(CvDEPTH(PL_compcv) == 1);
3139 CvDEPTH(PL_compcv) = 0;
3142 if (optype == OP_REQUIRE &&
3143 !(gimme == G_SCALAR ? SvTRUE(*SP) : SP > newsp))
3145 /* Unassume the success we assumed earlier. */
3146 char *name = cx->blk_eval.old_name;
3147 (void)hv_delete(GvHVn(PL_incgv), name, strlen(name), G_DISCARD);
3148 retop = Perl_die(aTHX_ "%s did not return a true value", name);
3149 /* die_where() did LEAVE, or we won't be here */
3153 if (!(save_flags & OPf_SPECIAL))
3163 register PERL_CONTEXT *cx;
3164 I32 gimme = GIMME_V;
3169 push_return(cLOGOP->op_other->op_next);
3170 PUSHBLOCK(cx, CXt_EVAL, SP);
3172 PL_eval_root = PL_op; /* Only needed so that goto works right. */
3174 PL_in_eval = EVAL_INEVAL;
3177 return DOCATCH(PL_op->op_next);
3187 register PERL_CONTEXT *cx;
3195 if (gimme == G_VOID)
3197 else if (gimme == G_SCALAR) {
3200 if (SvFLAGS(TOPs) & (SVs_PADTMP|SVs_TEMP))
3203 *MARK = sv_mortalcopy(TOPs);
3207 *MARK = &PL_sv_undef;
3212 /* in case LEAVE wipes old return values */
3213 for (mark = newsp + 1; mark <= SP; mark++) {
3214 if (!(SvFLAGS(*mark) & (SVs_PADTMP|SVs_TEMP))) {
3215 *mark = sv_mortalcopy(*mark);
3216 TAINT_NOT; /* Each item is independent */
3220 PL_curpm = newpm; /* Don't pop $1 et al till now */
3228 S_doparseform(pTHX_ SV *sv)
3231 register char *s = SvPV_force(sv, len);
3232 register char *send = s + len;
3233 register char *base;
3234 register I32 skipspaces = 0;
3237 bool postspace = FALSE;
3245 Perl_croak(aTHX_ "Null picture in formline");
3247 New(804, fops, (send - s)*3+10, U16); /* Almost certainly too long... */
3252 *fpc++ = FF_LINEMARK;
3253 noblank = repeat = FALSE;
3271 case ' ': case '\t':
3282 *fpc++ = FF_LITERAL;
3290 *fpc++ = skipspaces;
3294 *fpc++ = FF_NEWLINE;
3298 arg = fpc - linepc + 1;
3305 *fpc++ = FF_LINEMARK;
3306 noblank = repeat = FALSE;
3315 ischop = s[-1] == '^';
3321 arg = (s - base) - 1;
3323 *fpc++ = FF_LITERAL;
3332 *fpc++ = FF_LINEGLOB;
3334 else if (*s == '#' || (*s == '.' && s[1] == '#')) {
3335 arg = ischop ? 512 : 0;
3345 arg |= 256 + (s - f);
3347 *fpc++ = s - base; /* fieldsize for FETCH */
3348 *fpc++ = FF_DECIMAL;
3353 bool ismore = FALSE;
3356 while (*++s == '>') ;
3357 prespace = FF_SPACE;
3359 else if (*s == '|') {
3360 while (*++s == '|') ;
3361 prespace = FF_HALFSPACE;
3366 while (*++s == '<') ;
3369 if (*s == '.' && s[1] == '.' && s[2] == '.') {
3373 *fpc++ = s - base; /* fieldsize for FETCH */
3375 *fpc++ = ischop ? FF_CHECKCHOP : FF_CHECKNL;
3393 { /* need to jump to the next word */
3395 z = WORD_ALIGN - SvCUR(sv) % WORD_ALIGN;
3396 SvGROW(sv, SvCUR(sv) + z + arg * sizeof(U16) + 4);
3397 s = SvPVX(sv) + SvCUR(sv) + z;
3399 Copy(fops, s, arg, U16);
3401 sv_magic(sv, Nullsv, 'f', Nullch, 0);
3406 * The rest of this file was derived from source code contributed
3409 * NOTE: this code was derived from Tom Horsley's qsort replacement
3410 * and should not be confused with the original code.
3413 /* Copyright (C) Tom Horsley, 1997. All rights reserved.
3415 Permission granted to distribute under the same terms as perl which are
3418 This program is free software; you can redistribute it and/or modify
3419 it under the terms of either:
3421 a) the GNU General Public License as published by the Free
3422 Software Foundation; either version 1, or (at your option) any
3425 b) the "Artistic License" which comes with this Kit.
3427 Details on the perl license can be found in the perl source code which
3428 may be located via the www.perl.com web page.
3430 This is the most wonderfulest possible qsort I can come up with (and
3431 still be mostly portable) My (limited) tests indicate it consistently
3432 does about 20% fewer calls to compare than does the qsort in the Visual
3433 C++ library, other vendors may vary.
3435 Some of the ideas in here can be found in "Algorithms" by Sedgewick,
3436 others I invented myself (or more likely re-invented since they seemed
3437 pretty obvious once I watched the algorithm operate for a while).
3439 Most of this code was written while watching the Marlins sweep the Giants
3440 in the 1997 National League Playoffs - no Braves fans allowed to use this
3441 code (just kidding :-).
3443 I realize that if I wanted to be true to the perl tradition, the only
3444 comment in this file would be something like:
3446 ...they shuffled back towards the rear of the line. 'No, not at the
3447 rear!' the slave-driver shouted. 'Three files up. And stay there...
3449 However, I really needed to violate that tradition just so I could keep
3450 track of what happens myself, not to mention some poor fool trying to
3451 understand this years from now :-).
3454 /* ********************************************************** Configuration */
3456 #ifndef QSORT_ORDER_GUESS
3457 #define QSORT_ORDER_GUESS 2 /* Select doubling version of the netBSD trick */
3460 /* QSORT_MAX_STACK is the largest number of partitions that can be stacked up for
3461 future processing - a good max upper bound is log base 2 of memory size
3462 (32 on 32 bit machines, 64 on 64 bit machines, etc). In reality can
3463 safely be smaller than that since the program is taking up some space and
3464 most operating systems only let you grab some subset of contiguous
3465 memory (not to mention that you are normally sorting data larger than
3466 1 byte element size :-).
3468 #ifndef QSORT_MAX_STACK
3469 #define QSORT_MAX_STACK 32
3472 /* QSORT_BREAK_EVEN is the size of the largest partition we should insertion sort.
3473 Anything bigger and we use qsort. If you make this too small, the qsort
3474 will probably break (or become less efficient), because it doesn't expect
3475 the middle element of a partition to be the same as the right or left -
3476 you have been warned).
3478 #ifndef QSORT_BREAK_EVEN
3479 #define QSORT_BREAK_EVEN 6
3482 /* ************************************************************* Data Types */
3484 /* hold left and right index values of a partition waiting to be sorted (the
3485 partition includes both left and right - right is NOT one past the end or
3486 anything like that).
3488 struct partition_stack_entry {
3491 #ifdef QSORT_ORDER_GUESS
3492 int qsort_break_even;
3496 /* ******************************************************* Shorthand Macros */
3498 /* Note that these macros will be used from inside the qsort function where
3499 we happen to know that the variable 'elt_size' contains the size of an
3500 array element and the variable 'temp' points to enough space to hold a
3501 temp element and the variable 'array' points to the array being sorted
3502 and 'compare' is the pointer to the compare routine.
3504 Also note that there are very many highly architecture specific ways
3505 these might be sped up, but this is simply the most generally portable
3506 code I could think of.
3509 /* Return < 0 == 0 or > 0 as the value of elt1 is < elt2, == elt2, > elt2
3511 #define qsort_cmp(elt1, elt2) \
3512 ((*compare)(aTHXo_ array[elt1], array[elt2]))
3514 #ifdef QSORT_ORDER_GUESS
3515 #define QSORT_NOTICE_SWAP swapped++;
3517 #define QSORT_NOTICE_SWAP
3520 /* swaps contents of array elements elt1, elt2.
3522 #define qsort_swap(elt1, elt2) \
3525 temp = array[elt1]; \
3526 array[elt1] = array[elt2]; \
3527 array[elt2] = temp; \
3530 /* rotate contents of elt1, elt2, elt3 such that elt1 gets elt2, elt2 gets
3531 elt3 and elt3 gets elt1.
3533 #define qsort_rotate(elt1, elt2, elt3) \
3536 temp = array[elt1]; \
3537 array[elt1] = array[elt2]; \
3538 array[elt2] = array[elt3]; \
3539 array[elt3] = temp; \
3542 /* ************************************************************ Debug stuff */
3549 return; /* good place to set a breakpoint */
3552 #define qsort_assert(t) (void)( (t) || (break_here(), 0) )
3555 doqsort_all_asserts(
3559 int (*compare)(const void * elt1, const void * elt2),
3560 int pc_left, int pc_right, int u_left, int u_right)
3564 qsort_assert(pc_left <= pc_right);
3565 qsort_assert(u_right < pc_left);
3566 qsort_assert(pc_right < u_left);
3567 for (i = u_right + 1; i < pc_left; ++i) {
3568 qsort_assert(qsort_cmp(i, pc_left) < 0);
3570 for (i = pc_left; i < pc_right; ++i) {
3571 qsort_assert(qsort_cmp(i, pc_right) == 0);
3573 for (i = pc_right + 1; i < u_left; ++i) {
3574 qsort_assert(qsort_cmp(pc_right, i) < 0);
3578 #define qsort_all_asserts(PC_LEFT, PC_RIGHT, U_LEFT, U_RIGHT) \
3579 doqsort_all_asserts(array, num_elts, elt_size, compare, \
3580 PC_LEFT, PC_RIGHT, U_LEFT, U_RIGHT)
3584 #define qsort_assert(t) ((void)0)
3586 #define qsort_all_asserts(PC_LEFT, PC_RIGHT, U_LEFT, U_RIGHT) ((void)0)
3590 /* ****************************************************************** qsort */
3593 S_qsortsv(pTHX_ SV ** array, size_t num_elts, SVCOMPARE_t compare)
3597 struct partition_stack_entry partition_stack[QSORT_MAX_STACK];
3598 int next_stack_entry = 0;
3602 #ifdef QSORT_ORDER_GUESS
3603 int qsort_break_even;
3607 /* Make sure we actually have work to do.
3609 if (num_elts <= 1) {
3613 /* Setup the initial partition definition and fall into the sorting loop
3616 part_right = (int)(num_elts - 1);
3617 #ifdef QSORT_ORDER_GUESS
3618 qsort_break_even = QSORT_BREAK_EVEN;
3620 #define qsort_break_even QSORT_BREAK_EVEN
3623 if ((part_right - part_left) >= qsort_break_even) {
3624 /* OK, this is gonna get hairy, so lets try to document all the
3625 concepts and abbreviations and variables and what they keep
3628 pc: pivot chunk - the set of array elements we accumulate in the
3629 middle of the partition, all equal in value to the original
3630 pivot element selected. The pc is defined by:
3632 pc_left - the leftmost array index of the pc
3633 pc_right - the rightmost array index of the pc
3635 we start with pc_left == pc_right and only one element
3636 in the pivot chunk (but it can grow during the scan).
3638 u: uncompared elements - the set of elements in the partition
3639 we have not yet compared to the pivot value. There are two
3640 uncompared sets during the scan - one to the left of the pc
3641 and one to the right.
3643 u_right - the rightmost index of the left side's uncompared set
3644 u_left - the leftmost index of the right side's uncompared set
3646 The leftmost index of the left sides's uncompared set
3647 doesn't need its own variable because it is always defined
3648 by the leftmost edge of the whole partition (part_left). The
3649 same goes for the rightmost edge of the right partition
3652 We know there are no uncompared elements on the left once we
3653 get u_right < part_left and no uncompared elements on the
3654 right once u_left > part_right. When both these conditions
3655 are met, we have completed the scan of the partition.
3657 Any elements which are between the pivot chunk and the
3658 uncompared elements should be less than the pivot value on
3659 the left side and greater than the pivot value on the right
3660 side (in fact, the goal of the whole algorithm is to arrange
3661 for that to be true and make the groups of less-than and
3662 greater-then elements into new partitions to sort again).
3664 As you marvel at the complexity of the code and wonder why it
3665 has to be so confusing. Consider some of the things this level
3666 of confusion brings:
3668 Once I do a compare, I squeeze every ounce of juice out of it. I
3669 never do compare calls I don't have to do, and I certainly never
3672 I also never swap any elements unless I can prove there is a
3673 good reason. Many sort algorithms will swap a known value with
3674 an uncompared value just to get things in the right place (or
3675 avoid complexity :-), but that uncompared value, once it gets
3676 compared, may then have to be swapped again. A lot of the
3677 complexity of this code is due to the fact that it never swaps
3678 anything except compared values, and it only swaps them when the
3679 compare shows they are out of position.
3681 int pc_left, pc_right;
3682 int u_right, u_left;
3686 pc_left = ((part_left + part_right) / 2);
3688 u_right = pc_left - 1;
3689 u_left = pc_right + 1;
3691 /* Qsort works best when the pivot value is also the median value
3692 in the partition (unfortunately you can't find the median value
3693 without first sorting :-), so to give the algorithm a helping
3694 hand, we pick 3 elements and sort them and use the median value
3695 of that tiny set as the pivot value.
3697 Some versions of qsort like to use the left middle and right as
3698 the 3 elements to sort so they can insure the ends of the
3699 partition will contain values which will stop the scan in the
3700 compare loop, but when you have to call an arbitrarily complex
3701 routine to do a compare, its really better to just keep track of
3702 array index values to know when you hit the edge of the
3703 partition and avoid the extra compare. An even better reason to
3704 avoid using a compare call is the fact that you can drop off the
3705 edge of the array if someone foolishly provides you with an
3706 unstable compare function that doesn't always provide consistent
3709 So, since it is simpler for us to compare the three adjacent
3710 elements in the middle of the partition, those are the ones we
3711 pick here (conveniently pointed at by u_right, pc_left, and
3712 u_left). The values of the left, center, and right elements
3713 are refered to as l c and r in the following comments.
3716 #ifdef QSORT_ORDER_GUESS
3719 s = qsort_cmp(u_right, pc_left);
3722 s = qsort_cmp(pc_left, u_left);
3723 /* if l < c, c < r - already in order - nothing to do */
3725 /* l < c, c == r - already in order, pc grows */
3727 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3729 /* l < c, c > r - need to know more */
3730 s = qsort_cmp(u_right, u_left);
3732 /* l < c, c > r, l < r - swap c & r to get ordered */
3733 qsort_swap(pc_left, u_left);
3734 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3735 } else if (s == 0) {
3736 /* l < c, c > r, l == r - swap c&r, grow pc */
3737 qsort_swap(pc_left, u_left);
3739 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3741 /* l < c, c > r, l > r - make lcr into rlc to get ordered */
3742 qsort_rotate(pc_left, u_right, u_left);
3743 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3746 } else if (s == 0) {
3748 s = qsort_cmp(pc_left, u_left);
3750 /* l == c, c < r - already in order, grow pc */
3752 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3753 } else if (s == 0) {
3754 /* l == c, c == r - already in order, grow pc both ways */
3757 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3759 /* l == c, c > r - swap l & r, grow pc */
3760 qsort_swap(u_right, u_left);
3762 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3766 s = qsort_cmp(pc_left, u_left);
3768 /* l > c, c < r - need to know more */
3769 s = qsort_cmp(u_right, u_left);
3771 /* l > c, c < r, l < r - swap l & c to get ordered */
3772 qsort_swap(u_right, pc_left);
3773 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3774 } else if (s == 0) {
3775 /* l > c, c < r, l == r - swap l & c, grow pc */
3776 qsort_swap(u_right, pc_left);
3778 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3780 /* l > c, c < r, l > r - rotate lcr into crl to order */
3781 qsort_rotate(u_right, pc_left, u_left);
3782 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3784 } else if (s == 0) {
3785 /* l > c, c == r - swap ends, grow pc */
3786 qsort_swap(u_right, u_left);
3788 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3790 /* l > c, c > r - swap ends to get in order */
3791 qsort_swap(u_right, u_left);
3792 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3795 /* We now know the 3 middle elements have been compared and
3796 arranged in the desired order, so we can shrink the uncompared
3801 qsort_all_asserts(pc_left, pc_right, u_left, u_right);
3803 /* The above massive nested if was the simple part :-). We now have
3804 the middle 3 elements ordered and we need to scan through the
3805 uncompared sets on either side, swapping elements that are on
3806 the wrong side or simply shuffling equal elements around to get
3807 all equal elements into the pivot chunk.
3811 int still_work_on_left;
3812 int still_work_on_right;
3814 /* Scan the uncompared values on the left. If I find a value
3815 equal to the pivot value, move it over so it is adjacent to
3816 the pivot chunk and expand the pivot chunk. If I find a value
3817 less than the pivot value, then just leave it - its already
3818 on the correct side of the partition. If I find a greater
3819 value, then stop the scan.
3821 while (still_work_on_left = (u_right >= part_left)) {
3822 s = qsort_cmp(u_right, pc_left);
3825 } else if (s == 0) {
3827 if (pc_left != u_right) {
3828 qsort_swap(u_right, pc_left);
3834 qsort_assert(u_right < pc_left);
3835 qsort_assert(pc_left <= pc_right);
3836 qsort_assert(qsort_cmp(u_right + 1, pc_left) <= 0);
3837 qsort_assert(qsort_cmp(pc_left, pc_right) == 0);
3840 /* Do a mirror image scan of uncompared values on the right
3842 while (still_work_on_right = (u_left <= part_right)) {
3843 s = qsort_cmp(pc_right, u_left);
3846 } else if (s == 0) {
3848 if (pc_right != u_left) {
3849 qsort_swap(pc_right, u_left);
3855 qsort_assert(u_left > pc_right);
3856 qsort_assert(pc_left <= pc_right);
3857 qsort_assert(qsort_cmp(pc_right, u_left - 1) <= 0);
3858 qsort_assert(qsort_cmp(pc_left, pc_right) == 0);
3861 if (still_work_on_left) {
3862 /* I know I have a value on the left side which needs to be
3863 on the right side, but I need to know more to decide
3864 exactly the best thing to do with it.
3866 if (still_work_on_right) {
3867 /* I know I have values on both side which are out of
3868 position. This is a big win because I kill two birds
3869 with one swap (so to speak). I can advance the
3870 uncompared pointers on both sides after swapping both
3871 of them into the right place.
3873 qsort_swap(u_right, u_left);
3876 qsort_all_asserts(pc_left, pc_right, u_left, u_right);
3878 /* I have an out of position value on the left, but the
3879 right is fully scanned, so I "slide" the pivot chunk
3880 and any less-than values left one to make room for the
3881 greater value over on the right. If the out of position
3882 value is immediately adjacent to the pivot chunk (there
3883 are no less-than values), I can do that with a swap,
3884 otherwise, I have to rotate one of the less than values
3885 into the former position of the out of position value
3886 and the right end of the pivot chunk into the left end
3890 if (pc_left == u_right) {
3891 qsort_swap(u_right, pc_right);
3892 qsort_all_asserts(pc_left, pc_right-1, u_left, u_right-1);
3894 qsort_rotate(u_right, pc_left, pc_right);
3895 qsort_all_asserts(pc_left, pc_right-1, u_left, u_right-1);
3900 } else if (still_work_on_right) {
3901 /* Mirror image of complex case above: I have an out of
3902 position value on the right, but the left is fully
3903 scanned, so I need to shuffle things around to make room
3904 for the right value on the left.
3907 if (pc_right == u_left) {
3908 qsort_swap(u_left, pc_left);
3909 qsort_all_asserts(pc_left+1, pc_right, u_left+1, u_right);
3911 qsort_rotate(pc_right, pc_left, u_left);
3912 qsort_all_asserts(pc_left+1, pc_right, u_left+1, u_right);
3917 /* No more scanning required on either side of partition,
3918 break out of loop and figure out next set of partitions
3924 /* The elements in the pivot chunk are now in the right place. They
3925 will never move or be compared again. All I have to do is decide
3926 what to do with the stuff to the left and right of the pivot
3929 Notes on the QSORT_ORDER_GUESS ifdef code:
3931 1. If I just built these partitions without swapping any (or
3932 very many) elements, there is a chance that the elements are
3933 already ordered properly (being properly ordered will
3934 certainly result in no swapping, but the converse can't be
3937 2. A (properly written) insertion sort will run faster on
3938 already ordered data than qsort will.
3940 3. Perhaps there is some way to make a good guess about
3941 switching to an insertion sort earlier than partition size 6
3942 (for instance - we could save the partition size on the stack
3943 and increase the size each time we find we didn't swap, thus
3944 switching to insertion sort earlier for partitions with a
3945 history of not swapping).
3947 4. Naturally, if I just switch right away, it will make
3948 artificial benchmarks with pure ascending (or descending)
3949 data look really good, but is that a good reason in general?
3953 #ifdef QSORT_ORDER_GUESS
3955 #if QSORT_ORDER_GUESS == 1
3956 qsort_break_even = (part_right - part_left) + 1;
3958 #if QSORT_ORDER_GUESS == 2
3959 qsort_break_even *= 2;
3961 #if QSORT_ORDER_GUESS == 3
3962 int prev_break = qsort_break_even;
3963 qsort_break_even *= qsort_break_even;
3964 if (qsort_break_even < prev_break) {
3965 qsort_break_even = (part_right - part_left) + 1;
3969 qsort_break_even = QSORT_BREAK_EVEN;
3973 if (part_left < pc_left) {
3974 /* There are elements on the left which need more processing.
3975 Check the right as well before deciding what to do.
3977 if (pc_right < part_right) {
3978 /* We have two partitions to be sorted. Stack the biggest one
3979 and process the smallest one on the next iteration. This
3980 minimizes the stack height by insuring that any additional
3981 stack entries must come from the smallest partition which
3982 (because it is smallest) will have the fewest
3983 opportunities to generate additional stack entries.
3985 if ((part_right - pc_right) > (pc_left - part_left)) {
3986 /* stack the right partition, process the left */
3987 partition_stack[next_stack_entry].left = pc_right + 1;
3988 partition_stack[next_stack_entry].right = part_right;
3989 #ifdef QSORT_ORDER_GUESS
3990 partition_stack[next_stack_entry].qsort_break_even = qsort_break_even;
3992 part_right = pc_left - 1;
3994 /* stack the left partition, process the right */
3995 partition_stack[next_stack_entry].left = part_left;
3996 partition_stack[next_stack_entry].right = pc_left - 1;
3997 #ifdef QSORT_ORDER_GUESS
3998 partition_stack[next_stack_entry].qsort_break_even = qsort_break_even;
4000 part_left = pc_right + 1;
4002 qsort_assert(next_stack_entry < QSORT_MAX_STACK);
4005 /* The elements on the left are the only remaining elements
4006 that need sorting, arrange for them to be processed as the
4009 part_right = pc_left - 1;
4011 } else if (pc_right < part_right) {
4012 /* There is only one chunk on the right to be sorted, make it
4013 the new partition and loop back around.
4015 part_left = pc_right + 1;
4017 /* This whole partition wound up in the pivot chunk, so
4018 we need to get a new partition off the stack.
4020 if (next_stack_entry == 0) {
4021 /* the stack is empty - we are done */
4025 part_left = partition_stack[next_stack_entry].left;
4026 part_right = partition_stack[next_stack_entry].right;
4027 #ifdef QSORT_ORDER_GUESS
4028 qsort_break_even = partition_stack[next_stack_entry].qsort_break_even;
4032 /* This partition is too small to fool with qsort complexity, just
4033 do an ordinary insertion sort to minimize overhead.
4036 /* Assume 1st element is in right place already, and start checking
4037 at 2nd element to see where it should be inserted.
4039 for (i = part_left + 1; i <= part_right; ++i) {
4041 /* Scan (backwards - just in case 'i' is already in right place)
4042 through the elements already sorted to see if the ith element
4043 belongs ahead of one of them.
4045 for (j = i - 1; j >= part_left; --j) {
4046 if (qsort_cmp(i, j) >= 0) {
4047 /* i belongs right after j
4054 /* Looks like we really need to move some things
4058 for (k = i - 1; k >= j; --k)
4059 array[k + 1] = array[k];
4064 /* That partition is now sorted, grab the next one, or get out
4065 of the loop if there aren't any more.
4068 if (next_stack_entry == 0) {
4069 /* the stack is empty - we are done */
4073 part_left = partition_stack[next_stack_entry].left;
4074 part_right = partition_stack[next_stack_entry].right;
4075 #ifdef QSORT_ORDER_GUESS
4076 qsort_break_even = partition_stack[next_stack_entry].qsort_break_even;
4081 /* Believe it or not, the array is sorted at this point! */
4094 sortcv(pTHXo_ SV *a, SV *b)
4097 I32 oldsaveix = PL_savestack_ix;
4098 I32 oldscopeix = PL_scopestack_ix;
4100 GvSV(PL_firstgv) = a;
4101 GvSV(PL_secondgv) = b;
4102 PL_stack_sp = PL_stack_base;
4105 if (PL_stack_sp != PL_stack_base + 1)
4106 Perl_croak(aTHX_ "Sort subroutine didn't return single value");
4107 if (!SvNIOKp(*PL_stack_sp))
4108 Perl_croak(aTHX_ "Sort subroutine didn't return a numeric value");
4109 result = SvIV(*PL_stack_sp);
4110 while (PL_scopestack_ix > oldscopeix) {
4113 leave_scope(oldsaveix);
4119 sv_ncmp(pTHXo_ SV *a, SV *b)
4123 return nv1 < nv2 ? -1 : nv1 > nv2 ? 1 : 0;
4127 sv_i_ncmp(pTHXo_ SV *a, SV *b)
4131 return iv1 < iv2 ? -1 : iv1 > iv2 ? 1 : 0;
4133 #define tryCALL_AMAGICbin(left,right,meth,svp) STMT_START { \
4135 if (PL_amagic_generation) { \
4136 if (SvAMAGIC(left)||SvAMAGIC(right))\
4137 *svp = amagic_call(left, \
4145 amagic_ncmp(pTHXo_ register SV *a, register SV *b)
4148 tryCALL_AMAGICbin(a,b,ncmp,&tmpsv);
4153 I32 i = SvIVX(tmpsv);
4163 return sv_ncmp(aTHXo_ a, b);
4167 amagic_i_ncmp(pTHXo_ register SV *a, register SV *b)
4170 tryCALL_AMAGICbin(a,b,ncmp,&tmpsv);
4175 I32 i = SvIVX(tmpsv);
4185 return sv_i_ncmp(aTHXo_ a, b);
4189 amagic_cmp(pTHXo_ register SV *str1, register SV *str2)
4192 tryCALL_AMAGICbin(str1,str2,scmp,&tmpsv);
4197 I32 i = SvIVX(tmpsv);
4207 return sv_cmp(str1, str2);
4211 amagic_cmp_locale(pTHXo_ register SV *str1, register SV *str2)
4214 tryCALL_AMAGICbin(str1,str2,scmp,&tmpsv);
4219 I32 i = SvIVX(tmpsv);
4229 return sv_cmp_locale(str1, str2);
4233 run_user_filter(pTHXo_ int idx, SV *buf_sv, int maxlen)
4235 SV *datasv = FILTER_DATA(idx);
4236 int filter_has_file = IoLINES(datasv);
4237 GV *filter_child_proc = (GV *)IoFMT_GV(datasv);
4238 SV *filter_state = (SV *)IoTOP_GV(datasv);
4239 SV *filter_sub = (SV *)IoBOTTOM_GV(datasv);
4242 /* I was having segfault trouble under Linux 2.2.5 after a
4243 parse error occured. (Had to hack around it with a test
4244 for PL_error_count == 0.) Solaris doesn't segfault --
4245 not sure where the trouble is yet. XXX */
4247 if (filter_has_file) {
4248 len = FILTER_READ(idx+1, buf_sv, maxlen);
4251 if (filter_sub && len >= 0) {
4262 PUSHs(sv_2mortal(newSViv(maxlen)));
4264 PUSHs(filter_state);
4267 count = call_sv(filter_sub, G_SCALAR);
4283 IoLINES(datasv) = 0;
4284 if (filter_child_proc) {
4285 SvREFCNT_dec(filter_child_proc);
4286 IoFMT_GV(datasv) = Nullgv;
4289 SvREFCNT_dec(filter_state);
4290 IoTOP_GV(datasv) = Nullgv;
4293 SvREFCNT_dec(filter_sub);
4294 IoBOTTOM_GV(datasv) = Nullgv;
4296 filter_del(run_user_filter);
4305 sv_cmp_locale_static(pTHXo_ register SV *str1, register SV *str2)
4307 return sv_cmp_locale(str1, str2);
4311 sv_cmp_static(pTHXo_ register SV *str1, register SV *str2)
4313 return sv_cmp(str1, str2);
4316 #endif /* PERL_OBJECT */