3 * Copyright (c) 1991-2001, Larry Wall
5 * You may distribute under the terms of either the GNU General Public
6 * License or the Artistic License, as specified in the README file.
11 * Now far ahead the Road has gone,
12 * And I must follow, if I can,
13 * Pursuing it with eager feet,
14 * Until it joins some larger way
15 * Where many paths and errands meet.
16 * And whither then? I cannot say.
20 #define PERL_IN_PP_CTL_C
24 #define WORD_ALIGN sizeof(U16)
27 #define DOCATCH(o) ((CATCH_GET == TRUE) ? docatch(o) : (o))
29 static I32 sortcv(pTHXo_ SV *a, SV *b);
30 static I32 sortcv_stacked(pTHXo_ SV *a, SV *b);
31 static I32 sortcv_xsub(pTHXo_ SV *a, SV *b);
32 static I32 sv_ncmp(pTHXo_ SV *a, SV *b);
33 static I32 sv_i_ncmp(pTHXo_ SV *a, SV *b);
34 static I32 amagic_ncmp(pTHXo_ SV *a, SV *b);
35 static I32 amagic_i_ncmp(pTHXo_ SV *a, SV *b);
36 static I32 amagic_cmp(pTHXo_ SV *a, SV *b);
37 static I32 amagic_cmp_locale(pTHXo_ SV *a, SV *b);
38 static I32 run_user_filter(pTHXo_ int idx, SV *buf_sv, int maxlen);
41 static I32 sv_cmp_static(pTHXo_ SV *a, SV *b);
42 static I32 sv_cmp_locale_static(pTHXo_ SV *a, SV *b);
44 #define sv_cmp_static Perl_sv_cmp
45 #define sv_cmp_locale_static Perl_sv_cmp_locale
54 cxix = dopoptosub(cxstack_ix);
58 switch (cxstack[cxix].blk_gimme) {
75 /* XXXX Should store the old value to allow for tie/overload - and
76 restore in regcomp, where marked with XXXX. */
84 register PMOP *pm = (PMOP*)cLOGOP->op_other;
88 MAGIC *mg = Null(MAGIC*);
92 SV *sv = SvRV(tmpstr);
94 mg = mg_find(sv, 'r');
97 regexp *re = (regexp *)mg->mg_obj;
98 ReREFCNT_dec(pm->op_pmregexp);
99 pm->op_pmregexp = ReREFCNT_inc(re);
102 t = SvPV(tmpstr, len);
104 /* Check against the last compiled regexp. */
105 if (!pm->op_pmregexp || !pm->op_pmregexp->precomp ||
106 pm->op_pmregexp->prelen != len ||
107 memNE(pm->op_pmregexp->precomp, t, len))
109 if (pm->op_pmregexp) {
110 ReREFCNT_dec(pm->op_pmregexp);
111 pm->op_pmregexp = Null(REGEXP*); /* crucial if regcomp aborts */
113 if (PL_op->op_flags & OPf_SPECIAL)
114 PL_reginterp_cnt = I32_MAX; /* Mark as safe. */
116 pm->op_pmflags = pm->op_pmpermflags; /* reset case sensitivity */
118 pm->op_pmdynflags |= PMdf_DYN_UTF8;
120 pm->op_pmdynflags &= ~PMdf_DYN_UTF8;
121 pm->op_pmregexp = CALLREGCOMP(aTHX_ t, t + len, pm);
122 PL_reginterp_cnt = 0; /* XXXX Be extra paranoid - needed
123 inside tie/overload accessors. */
127 #ifndef INCOMPLETE_TAINTS
130 pm->op_pmdynflags |= PMdf_TAINTED;
132 pm->op_pmdynflags &= ~PMdf_TAINTED;
136 if (!pm->op_pmregexp->prelen && PL_curpm)
138 else if (strEQ("\\s+", pm->op_pmregexp->precomp))
139 pm->op_pmflags |= PMf_WHITE;
141 /* XXX runtime compiled output needs to move to the pad */
142 if (pm->op_pmflags & PMf_KEEP) {
143 pm->op_private &= ~OPpRUNTIME; /* no point compiling again */
144 #if !defined(USE_ITHREADS) && !defined(USE_THREADS)
145 /* XXX can't change the optree at runtime either */
146 cLOGOP->op_first->op_next = PL_op->op_next;
155 register PMOP *pm = (PMOP*) cLOGOP->op_other;
156 register PERL_CONTEXT *cx = &cxstack[cxstack_ix];
157 register SV *dstr = cx->sb_dstr;
158 register char *s = cx->sb_s;
159 register char *m = cx->sb_m;
160 char *orig = cx->sb_orig;
161 register REGEXP *rx = cx->sb_rx;
163 rxres_restore(&cx->sb_rxres, rx);
165 if (cx->sb_iters++) {
166 if (cx->sb_iters > cx->sb_maxiters)
167 DIE(aTHX_ "Substitution loop");
169 if (!(cx->sb_rxtainted & 2) && SvTAINTED(TOPs))
170 cx->sb_rxtainted |= 2;
171 sv_catsv(dstr, POPs);
174 if (cx->sb_once || !CALLREGEXEC(aTHX_ rx, s, cx->sb_strend, orig,
175 s == m, cx->sb_targ, NULL,
176 ((cx->sb_rflags & REXEC_COPY_STR)
177 ? (REXEC_IGNOREPOS|REXEC_NOT_FIRST)
178 : (REXEC_COPY_STR|REXEC_IGNOREPOS|REXEC_NOT_FIRST))))
180 SV *targ = cx->sb_targ;
182 sv_catpvn(dstr, s, cx->sb_strend - s);
183 cx->sb_rxtainted |= RX_MATCH_TAINTED(rx);
185 (void)SvOOK_off(targ);
186 Safefree(SvPVX(targ));
187 SvPVX(targ) = SvPVX(dstr);
188 SvCUR_set(targ, SvCUR(dstr));
189 SvLEN_set(targ, SvLEN(dstr));
195 TAINT_IF(cx->sb_rxtainted & 1);
196 PUSHs(sv_2mortal(newSViv((I32)cx->sb_iters - 1)));
198 (void)SvPOK_only_UTF8(targ);
199 TAINT_IF(cx->sb_rxtainted);
203 LEAVE_SCOPE(cx->sb_oldsave);
205 RETURNOP(pm->op_next);
208 if (RX_MATCH_COPIED(rx) && rx->subbeg != orig) {
211 cx->sb_orig = orig = rx->subbeg;
213 cx->sb_strend = s + (cx->sb_strend - m);
215 cx->sb_m = m = rx->startp[0] + orig;
217 sv_catpvn(dstr, s, m-s);
218 cx->sb_s = rx->endp[0] + orig;
219 { /* Update the pos() information. */
220 SV *sv = cx->sb_targ;
223 if (SvTYPE(sv) < SVt_PVMG)
224 SvUPGRADE(sv, SVt_PVMG);
225 if (!(mg = mg_find(sv, 'g'))) {
226 sv_magic(sv, Nullsv, 'g', Nullch, 0);
227 mg = mg_find(sv, 'g');
234 cx->sb_rxtainted |= RX_MATCH_TAINTED(rx);
235 rxres_save(&cx->sb_rxres, rx);
236 RETURNOP(pm->op_pmreplstart);
240 Perl_rxres_save(pTHX_ void **rsp, REGEXP *rx)
245 if (!p || p[1] < rx->nparens) {
246 i = 6 + rx->nparens * 2;
254 *p++ = PTR2UV(RX_MATCH_COPIED(rx) ? rx->subbeg : Nullch);
255 RX_MATCH_COPIED_off(rx);
259 *p++ = PTR2UV(rx->subbeg);
260 *p++ = (UV)rx->sublen;
261 for (i = 0; i <= rx->nparens; ++i) {
262 *p++ = (UV)rx->startp[i];
263 *p++ = (UV)rx->endp[i];
268 Perl_rxres_restore(pTHX_ void **rsp, REGEXP *rx)
273 if (RX_MATCH_COPIED(rx))
274 Safefree(rx->subbeg);
275 RX_MATCH_COPIED_set(rx, *p);
280 rx->subbeg = INT2PTR(char*,*p++);
281 rx->sublen = (I32)(*p++);
282 for (i = 0; i <= rx->nparens; ++i) {
283 rx->startp[i] = (I32)(*p++);
284 rx->endp[i] = (I32)(*p++);
289 Perl_rxres_free(pTHX_ void **rsp)
294 Safefree(INT2PTR(char*,*p));
302 djSP; dMARK; dORIGMARK;
303 register SV *tmpForm = *++MARK;
315 bool chopspace = (strchr(PL_chopset, ' ') != Nullch);
321 STRLEN fudge = SvCUR(tmpForm) * (IN_BYTE ? 1 : 3) + 1;
322 bool item_is_utf = FALSE;
324 if (!SvMAGICAL(tmpForm) || !SvCOMPILED(tmpForm)) {
325 if (SvREADONLY(tmpForm)) {
326 SvREADONLY_off(tmpForm);
327 doparseform(tmpForm);
328 SvREADONLY_on(tmpForm);
331 doparseform(tmpForm);
334 SvPV_force(PL_formtarget, len);
335 t = SvGROW(PL_formtarget, len + fudge + 1); /* XXX SvCUR bad */
337 f = SvPV(tmpForm, len);
338 /* need to jump to the next word */
339 s = f + len + WORD_ALIGN - SvCUR(tmpForm) % WORD_ALIGN;
348 case FF_LITERAL: arg = fpc[1]; name = "LITERAL"; break;
349 case FF_BLANK: arg = fpc[1]; name = "BLANK"; break;
350 case FF_SKIP: arg = fpc[1]; name = "SKIP"; break;
351 case FF_FETCH: arg = fpc[1]; name = "FETCH"; break;
352 case FF_DECIMAL: arg = fpc[1]; name = "DECIMAL"; break;
354 case FF_CHECKNL: name = "CHECKNL"; break;
355 case FF_CHECKCHOP: name = "CHECKCHOP"; break;
356 case FF_SPACE: name = "SPACE"; break;
357 case FF_HALFSPACE: name = "HALFSPACE"; break;
358 case FF_ITEM: name = "ITEM"; break;
359 case FF_CHOP: name = "CHOP"; break;
360 case FF_LINEGLOB: name = "LINEGLOB"; break;
361 case FF_NEWLINE: name = "NEWLINE"; break;
362 case FF_MORE: name = "MORE"; break;
363 case FF_LINEMARK: name = "LINEMARK"; break;
364 case FF_END: name = "END"; break;
365 case FF_0DECIMAL: name = "0DECIMAL"; break;
368 PerlIO_printf(Perl_debug_log, "%-16s%ld\n", name, (long) arg);
370 PerlIO_printf(Perl_debug_log, "%-16s\n", name);
398 if (ckWARN(WARN_SYNTAX))
399 Perl_warner(aTHX_ WARN_SYNTAX, "Not enough format arguments");
404 item = s = SvPV(sv, len);
407 itemsize = sv_len_utf8(sv);
408 if (itemsize != len) {
410 if (itemsize > fieldsize) {
411 itemsize = fieldsize;
412 itembytes = itemsize;
413 sv_pos_u2b(sv, &itembytes, 0);
417 send = chophere = s + itembytes;
427 sv_pos_b2u(sv, &itemsize);
432 if (itemsize > fieldsize)
433 itemsize = fieldsize;
434 send = chophere = s + itemsize;
446 item = s = SvPV(sv, len);
449 itemsize = sv_len_utf8(sv);
450 if (itemsize != len) {
452 if (itemsize <= fieldsize) {
453 send = chophere = s + itemsize;
464 itemsize = fieldsize;
465 itembytes = itemsize;
466 sv_pos_u2b(sv, &itembytes, 0);
467 send = chophere = s + itembytes;
468 while (s < send || (s == send && isSPACE(*s))) {
478 if (strchr(PL_chopset, *s))
483 itemsize = chophere - item;
484 sv_pos_b2u(sv, &itemsize);
491 if (itemsize <= fieldsize) {
492 send = chophere = s + itemsize;
503 itemsize = fieldsize;
504 send = chophere = s + itemsize;
505 while (s < send || (s == send && isSPACE(*s))) {
515 if (strchr(PL_chopset, *s))
520 itemsize = chophere - item;
525 arg = fieldsize - itemsize;
534 arg = fieldsize - itemsize;
548 if (UTF8_IS_CONTINUED(*s)) {
549 switch (UTF8SKIP(s)) {
560 if ( !((*t++ = *s++) & ~31) )
568 int ch = *t++ = *s++;
571 if ( !((*t++ = *s++) & ~31) )
580 while (*s && isSPACE(*s))
587 item = s = SvPV(sv, len);
589 item_is_utf = FALSE; /* XXX is this correct? */
601 SvCUR_set(PL_formtarget, t - SvPVX(PL_formtarget));
602 sv_catpvn(PL_formtarget, item, itemsize);
603 SvGROW(PL_formtarget, SvCUR(PL_formtarget) + fudge + 1);
604 t = SvPVX(PL_formtarget) + SvCUR(PL_formtarget);
609 /* If the field is marked with ^ and the value is undefined,
612 if ((arg & 512) && !SvOK(sv)) {
620 /* Formats aren't yet marked for locales, so assume "yes". */
622 STORE_NUMERIC_STANDARD_SET_LOCAL();
623 #if defined(USE_LONG_DOUBLE)
625 sprintf(t, "%#*.*" PERL_PRIfldbl,
626 (int) fieldsize, (int) arg & 255, value);
628 sprintf(t, "%*.0" PERL_PRIfldbl, (int) fieldsize, value);
633 (int) fieldsize, (int) arg & 255, value);
636 (int) fieldsize, value);
639 RESTORE_NUMERIC_STANDARD();
645 /* If the field is marked with ^ and the value is undefined,
648 if ((arg & 512) && !SvOK(sv)) {
656 /* Formats aren't yet marked for locales, so assume "yes". */
658 STORE_NUMERIC_STANDARD_SET_LOCAL();
659 #if defined(USE_LONG_DOUBLE)
661 sprintf(t, "%#0*.*" PERL_PRIfldbl,
662 (int) fieldsize, (int) arg & 255, value);
663 /* is this legal? I don't have long doubles */
665 sprintf(t, "%0*.0" PERL_PRIfldbl, (int) fieldsize, value);
669 sprintf(t, "%#0*.*f",
670 (int) fieldsize, (int) arg & 255, value);
673 (int) fieldsize, value);
676 RESTORE_NUMERIC_STANDARD();
683 while (t-- > linemark && *t == ' ') ;
691 if (arg) { /* repeat until fields exhausted? */
693 SvCUR_set(PL_formtarget, t - SvPVX(PL_formtarget));
694 lines += FmLINES(PL_formtarget);
697 if (strnEQ(linemark, linemark - arg, arg))
698 DIE(aTHX_ "Runaway format");
700 FmLINES(PL_formtarget) = lines;
702 RETURNOP(cLISTOP->op_first);
715 while (*s && isSPACE(*s) && s < send)
719 arg = fieldsize - itemsize;
726 if (strnEQ(s," ",3)) {
727 while (s > SvPVX(PL_formtarget) && isSPACE(s[-1]))
738 SvCUR_set(PL_formtarget, t - SvPVX(PL_formtarget));
739 FmLINES(PL_formtarget) += lines;
751 if (PL_stack_base + *PL_markstack_ptr == SP) {
753 if (GIMME_V == G_SCALAR)
754 XPUSHs(sv_2mortal(newSViv(0)));
755 RETURNOP(PL_op->op_next->op_next);
757 PL_stack_sp = PL_stack_base + *PL_markstack_ptr + 1;
758 pp_pushmark(); /* push dst */
759 pp_pushmark(); /* push src */
760 ENTER; /* enter outer scope */
763 /* SAVE_DEFSV does *not* suffice here for USE_THREADS */
765 ENTER; /* enter inner scope */
768 src = PL_stack_base[*PL_markstack_ptr];
773 if (PL_op->op_type == OP_MAPSTART)
774 pp_pushmark(); /* push top */
775 return ((LOGOP*)PL_op->op_next)->op_other;
780 DIE(aTHX_ "panic: mapstart"); /* uses grepstart */
786 I32 items = (SP - PL_stack_base) - *PL_markstack_ptr; /* how many new items */
792 /* first, move source pointer to the next item in the source list */
793 ++PL_markstack_ptr[-1];
795 /* if there are new items, push them into the destination list */
797 /* might need to make room back there first */
798 if (items > PL_markstack_ptr[-1] - PL_markstack_ptr[-2]) {
799 /* XXX this implementation is very pessimal because the stack
800 * is repeatedly extended for every set of items. Is possible
801 * to do this without any stack extension or copying at all
802 * by maintaining a separate list over which the map iterates
803 * (like foreach does). --gsar */
805 /* everything in the stack after the destination list moves
806 * towards the end the stack by the amount of room needed */
807 shift = items - (PL_markstack_ptr[-1] - PL_markstack_ptr[-2]);
809 /* items to shift up (accounting for the moved source pointer) */
810 count = (SP - PL_stack_base) - (PL_markstack_ptr[-1] - 1);
812 /* This optimization is by Ben Tilly and it does
813 * things differently from what Sarathy (gsar)
814 * is describing. The downside of this optimization is
815 * that leaves "holes" (uninitialized and hopefully unused areas)
816 * to the Perl stack, but on the other hand this
817 * shouldn't be a problem. If Sarathy's idea gets
818 * implemented, this optimization should become
819 * irrelevant. --jhi */
821 shift = count; /* Avoid shifting too often --Ben Tilly */
826 PL_markstack_ptr[-1] += shift;
827 *PL_markstack_ptr += shift;
831 /* copy the new items down to the destination list */
832 dst = PL_stack_base + (PL_markstack_ptr[-2] += items) - 1;
834 *dst-- = SvTEMP(TOPs) ? POPs : sv_mortalcopy(POPs);
836 LEAVE; /* exit inner scope */
839 if (PL_markstack_ptr[-1] > *PL_markstack_ptr) {
842 (void)POPMARK; /* pop top */
843 LEAVE; /* exit outer scope */
844 (void)POPMARK; /* pop src */
845 items = --*PL_markstack_ptr - PL_markstack_ptr[-1];
846 (void)POPMARK; /* pop dst */
847 SP = PL_stack_base + POPMARK; /* pop original mark */
848 if (gimme == G_SCALAR) {
852 else if (gimme == G_ARRAY)
859 ENTER; /* enter inner scope */
862 /* set $_ to the new source item */
863 src = PL_stack_base[PL_markstack_ptr[-1]];
867 RETURNOP(cLOGOP->op_other);
873 djSP; dMARK; dORIGMARK;
875 SV **myorigmark = ORIGMARK;
881 OP* nextop = PL_op->op_next;
883 bool hasargs = FALSE;
886 if (gimme != G_ARRAY) {
892 SAVEVPTR(PL_sortcop);
893 if (PL_op->op_flags & OPf_STACKED) {
894 if (PL_op->op_flags & OPf_SPECIAL) {
895 OP *kid = cLISTOP->op_first->op_sibling; /* pass pushmark */
896 kid = kUNOP->op_first; /* pass rv2gv */
897 kid = kUNOP->op_first; /* pass leave */
898 PL_sortcop = kid->op_next;
899 stash = CopSTASH(PL_curcop);
902 cv = sv_2cv(*++MARK, &stash, &gv, 0);
903 if (cv && SvPOK(cv)) {
905 char *proto = SvPV((SV*)cv, n_a);
906 if (proto && strEQ(proto, "$$")) {
910 if (!(cv && CvROOT(cv))) {
911 if (cv && CvXSUB(cv)) {
915 SV *tmpstr = sv_newmortal();
916 gv_efullname3(tmpstr, gv, Nullch);
917 DIE(aTHX_ "Undefined sort subroutine \"%s\" called",
921 DIE(aTHX_ "Undefined subroutine in sort");
926 PL_sortcop = (OP*)cv;
928 PL_sortcop = CvSTART(cv);
929 SAVEVPTR(CvROOT(cv)->op_ppaddr);
930 CvROOT(cv)->op_ppaddr = PL_ppaddr[OP_NULL];
933 PL_curpad = AvARRAY((AV*)AvARRAY(CvPADLIST(cv))[1]);
939 stash = CopSTASH(PL_curcop);
943 while (MARK < SP) { /* This may or may not shift down one here. */
945 if ((*up = *++MARK)) { /* Weed out nulls. */
947 if (!PL_sortcop && !SvPOK(*up)) {
952 (void)sv_2pv(*up, &n_a);
957 max = --up - myorigmark;
962 bool oldcatch = CATCH_GET;
968 PUSHSTACKi(PERLSI_SORT);
969 if (!hasargs && !is_xsub) {
970 if (PL_sortstash != stash || !PL_firstgv || !PL_secondgv) {
971 SAVESPTR(PL_firstgv);
972 SAVESPTR(PL_secondgv);
973 PL_firstgv = gv_fetchpv("a", TRUE, SVt_PV);
974 PL_secondgv = gv_fetchpv("b", TRUE, SVt_PV);
975 PL_sortstash = stash;
978 sv_lock((SV *)PL_firstgv);
979 sv_lock((SV *)PL_secondgv);
981 SAVESPTR(GvSV(PL_firstgv));
982 SAVESPTR(GvSV(PL_secondgv));
985 PUSHBLOCK(cx, CXt_NULL, PL_stack_base);
986 if (!(PL_op->op_flags & OPf_SPECIAL)) {
987 cx->cx_type = CXt_SUB;
988 cx->blk_gimme = G_SCALAR;
991 (void)SvREFCNT_inc(cv); /* in preparation for POPSUB */
993 PL_sortcxix = cxstack_ix;
995 if (hasargs && !is_xsub) {
996 /* This is mostly copied from pp_entersub */
997 AV *av = (AV*)PL_curpad[0];
1000 cx->blk_sub.savearray = GvAV(PL_defgv);
1001 GvAV(PL_defgv) = (AV*)SvREFCNT_inc(av);
1002 #endif /* USE_THREADS */
1003 cx->blk_sub.oldcurpad = PL_curpad;
1004 cx->blk_sub.argarray = av;
1006 qsortsv((myorigmark+1), max,
1007 is_xsub ? sortcv_xsub : hasargs ? sortcv_stacked : sortcv);
1009 POPBLOCK(cx,PL_curpm);
1010 PL_stack_sp = newsp;
1012 CATCH_SET(oldcatch);
1017 MEXTEND(SP, 20); /* Can't afford stack realloc on signal. */
1018 qsortsv(ORIGMARK+1, max,
1019 (PL_op->op_private & OPpSORT_NUMERIC)
1020 ? ( (PL_op->op_private & OPpSORT_INTEGER)
1021 ? ( overloading ? amagic_i_ncmp : sv_i_ncmp)
1022 : ( overloading ? amagic_ncmp : sv_ncmp))
1023 : ( (PL_op->op_private & OPpLOCALE)
1026 : sv_cmp_locale_static)
1027 : ( overloading ? amagic_cmp : sv_cmp_static)));
1028 if (PL_op->op_private & OPpSORT_REVERSE) {
1029 SV **p = ORIGMARK+1;
1030 SV **q = ORIGMARK+max;
1040 PL_stack_sp = ORIGMARK + max;
1048 if (GIMME == G_ARRAY)
1050 if (SvTRUEx(PAD_SV(PL_op->op_targ)))
1051 return cLOGOP->op_other;
1060 if (GIMME == G_ARRAY) {
1061 RETURNOP(((LOGOP*)cUNOP->op_first)->op_other);
1065 SV *targ = PAD_SV(PL_op->op_targ);
1068 if (PL_op->op_private & OPpFLIP_LINENUM) {
1070 flip = PL_last_in_gv
1071 && (gp_io = GvIOp(PL_last_in_gv))
1072 && SvIV(sv) == (IV)IoLINES(gp_io);
1077 sv_setiv(PAD_SV(cUNOP->op_first->op_targ), 1);
1078 if (PL_op->op_flags & OPf_SPECIAL) {
1086 RETURNOP(((LOGOP*)cUNOP->op_first)->op_other);
1099 if (GIMME == G_ARRAY) {
1105 if (SvGMAGICAL(left))
1107 if (SvGMAGICAL(right))
1110 if (SvNIOKp(left) || !SvPOKp(left) ||
1111 SvNIOKp(right) || !SvPOKp(right) ||
1112 (looks_like_number(left) && *SvPVX(left) != '0' &&
1113 looks_like_number(right) && *SvPVX(right) != '0'))
1115 if (SvNV(left) < IV_MIN || SvNV(right) > IV_MAX)
1116 DIE(aTHX_ "Range iterator outside integer range");
1127 sv = sv_2mortal(newSViv(i++));
1132 SV *final = sv_mortalcopy(right);
1134 char *tmps = SvPV(final, len);
1136 sv = sv_mortalcopy(left);
1138 while (!SvNIOKp(sv) && SvCUR(sv) <= len) {
1140 if (strEQ(SvPVX(sv),tmps))
1142 sv = sv_2mortal(newSVsv(sv));
1149 SV *targ = PAD_SV(cUNOP->op_first->op_targ);
1151 if ((PL_op->op_private & OPpFLIP_LINENUM)
1152 ? (PL_last_in_gv && SvIV(sv) == (IV)IoLINES(GvIOp(PL_last_in_gv)))
1154 sv_setiv(PAD_SV(((UNOP*)cUNOP->op_first)->op_first->op_targ), 0);
1155 sv_catpv(targ, "E0");
1166 S_dopoptolabel(pTHX_ char *label)
1169 register PERL_CONTEXT *cx;
1171 for (i = cxstack_ix; i >= 0; i--) {
1173 switch (CxTYPE(cx)) {
1175 if (ckWARN(WARN_EXITING))
1176 Perl_warner(aTHX_ WARN_EXITING, "Exiting substitution via %s",
1177 PL_op_name[PL_op->op_type]);
1180 if (ckWARN(WARN_EXITING))
1181 Perl_warner(aTHX_ WARN_EXITING, "Exiting subroutine via %s",
1182 PL_op_name[PL_op->op_type]);
1185 if (ckWARN(WARN_EXITING))
1186 Perl_warner(aTHX_ WARN_EXITING, "Exiting format via %s",
1187 PL_op_name[PL_op->op_type]);
1190 if (ckWARN(WARN_EXITING))
1191 Perl_warner(aTHX_ WARN_EXITING, "Exiting eval via %s",
1192 PL_op_name[PL_op->op_type]);
1195 if (ckWARN(WARN_EXITING))
1196 Perl_warner(aTHX_ WARN_EXITING, "Exiting pseudo-block via %s",
1197 PL_op_name[PL_op->op_type]);
1200 if (!cx->blk_loop.label ||
1201 strNE(label, cx->blk_loop.label) ) {
1202 DEBUG_l(Perl_deb(aTHX_ "(Skipping label #%ld %s)\n",
1203 (long)i, cx->blk_loop.label));
1206 DEBUG_l( Perl_deb(aTHX_ "(Found label #%ld %s)\n", (long)i, label));
1214 Perl_dowantarray(pTHX)
1216 I32 gimme = block_gimme();
1217 return (gimme == G_VOID) ? G_SCALAR : gimme;
1221 Perl_block_gimme(pTHX)
1225 cxix = dopoptosub(cxstack_ix);
1229 switch (cxstack[cxix].blk_gimme) {
1237 Perl_croak(aTHX_ "panic: bad gimme: %d\n", cxstack[cxix].blk_gimme);
1244 Perl_is_lvalue_sub(pTHX)
1248 cxix = dopoptosub(cxstack_ix);
1249 assert(cxix >= 0); /* We should only be called from inside subs */
1251 if (cxstack[cxix].blk_sub.lval && CvLVALUE(cxstack[cxix].blk_sub.cv))
1252 return cxstack[cxix].blk_sub.lval;
1258 S_dopoptosub(pTHX_ I32 startingblock)
1260 return dopoptosub_at(cxstack, startingblock);
1264 S_dopoptosub_at(pTHX_ PERL_CONTEXT *cxstk, I32 startingblock)
1267 register PERL_CONTEXT *cx;
1268 for (i = startingblock; i >= 0; i--) {
1270 switch (CxTYPE(cx)) {
1276 DEBUG_l( Perl_deb(aTHX_ "(Found sub #%ld)\n", (long)i));
1284 S_dopoptoeval(pTHX_ I32 startingblock)
1287 register PERL_CONTEXT *cx;
1288 for (i = startingblock; i >= 0; i--) {
1290 switch (CxTYPE(cx)) {
1294 DEBUG_l( Perl_deb(aTHX_ "(Found eval #%ld)\n", (long)i));
1302 S_dopoptoloop(pTHX_ I32 startingblock)
1305 register PERL_CONTEXT *cx;
1306 for (i = startingblock; i >= 0; i--) {
1308 switch (CxTYPE(cx)) {
1310 if (ckWARN(WARN_EXITING))
1311 Perl_warner(aTHX_ WARN_EXITING, "Exiting substitution via %s",
1312 PL_op_name[PL_op->op_type]);
1315 if (ckWARN(WARN_EXITING))
1316 Perl_warner(aTHX_ WARN_EXITING, "Exiting subroutine via %s",
1317 PL_op_name[PL_op->op_type]);
1320 if (ckWARN(WARN_EXITING))
1321 Perl_warner(aTHX_ WARN_EXITING, "Exiting format via %s",
1322 PL_op_name[PL_op->op_type]);
1325 if (ckWARN(WARN_EXITING))
1326 Perl_warner(aTHX_ WARN_EXITING, "Exiting eval via %s",
1327 PL_op_name[PL_op->op_type]);
1330 if (ckWARN(WARN_EXITING))
1331 Perl_warner(aTHX_ WARN_EXITING, "Exiting pseudo-block via %s",
1332 PL_op_name[PL_op->op_type]);
1335 DEBUG_l( Perl_deb(aTHX_ "(Found loop #%ld)\n", (long)i));
1343 Perl_dounwind(pTHX_ I32 cxix)
1345 register PERL_CONTEXT *cx;
1348 while (cxstack_ix > cxix) {
1350 cx = &cxstack[cxstack_ix];
1351 DEBUG_l(PerlIO_printf(Perl_debug_log, "Unwinding block %ld, type %s\n",
1352 (long) cxstack_ix, PL_block_type[CxTYPE(cx)]));
1353 /* Note: we don't need to restore the base context info till the end. */
1354 switch (CxTYPE(cx)) {
1357 continue; /* not break */
1379 * Closures mentioned at top level of eval cannot be referenced
1380 * again, and their presence indirectly causes a memory leak.
1381 * (Note that the fact that compcv and friends are still set here
1382 * is, AFAIK, an accident.) --Chip
1384 * XXX need to get comppad et al from eval's cv rather than
1385 * relying on the incidental global values.
1388 S_free_closures(pTHX)
1390 SV **svp = AvARRAY(PL_comppad_name);
1392 for (ix = AvFILLp(PL_comppad_name); ix >= 0; ix--) {
1394 if (sv && sv != &PL_sv_undef && *SvPVX(sv) == '&') {
1396 svp[ix] = &PL_sv_undef;
1400 SvREFCNT_dec(CvOUTSIDE(sv));
1401 CvOUTSIDE(sv) = Nullcv;
1414 Perl_qerror(pTHX_ SV *err)
1417 sv_catsv(ERRSV, err);
1419 sv_catsv(PL_errors, err);
1421 Perl_warn(aTHX_ "%"SVf, err);
1426 Perl_die_where(pTHX_ char *message, STRLEN msglen)
1431 register PERL_CONTEXT *cx;
1436 if (PL_in_eval & EVAL_KEEPERR) {
1437 static char prefix[] = "\t(in cleanup) ";
1442 else if (SvCUR(err) >= sizeof(prefix)+msglen-1) {
1445 if (*e != *message || strNE(e,message))
1449 SvGROW(err, SvCUR(err)+sizeof(prefix)+msglen);
1450 sv_catpvn(err, prefix, sizeof(prefix)-1);
1451 sv_catpvn(err, message, msglen);
1452 if (ckWARN(WARN_MISC)) {
1453 STRLEN start = SvCUR(err)-msglen-sizeof(prefix)+1;
1454 Perl_warner(aTHX_ WARN_MISC, SvPVX(err)+start);
1459 sv_setpvn(ERRSV, message, msglen);
1460 if (PL_hints & HINT_UTF8)
1467 message = SvPVx(ERRSV, msglen);
1469 while ((cxix = dopoptoeval(cxstack_ix)) < 0
1470 && PL_curstackinfo->si_prev)
1479 if (cxix < cxstack_ix)
1482 POPBLOCK(cx,PL_curpm);
1483 if (CxTYPE(cx) != CXt_EVAL) {
1484 PerlIO_write(Perl_error_log, "panic: die ", 11);
1485 PerlIO_write(Perl_error_log, message, msglen);
1490 if (gimme == G_SCALAR)
1491 *++newsp = &PL_sv_undef;
1492 PL_stack_sp = newsp;
1496 /* LEAVE could clobber PL_curcop (see save_re_context())
1497 * XXX it might be better to find a way to avoid messing with
1498 * PL_curcop in save_re_context() instead, but this is a more
1499 * minimal fix --GSAR */
1500 PL_curcop = cx->blk_oldcop;
1502 if (optype == OP_REQUIRE) {
1503 char* msg = SvPVx(ERRSV, n_a);
1504 DIE(aTHX_ "%sCompilation failed in require",
1505 *msg ? msg : "Unknown error\n");
1507 return pop_return();
1511 message = SvPVx(ERRSV, msglen);
1514 /* SFIO can really mess with your errno */
1517 PerlIO *serr = Perl_error_log;
1519 PerlIO_write(serr, message, msglen);
1520 (void)PerlIO_flush(serr);
1533 if (SvTRUE(left) != SvTRUE(right))
1545 RETURNOP(cLOGOP->op_other);
1554 RETURNOP(cLOGOP->op_other);
1560 register I32 cxix = dopoptosub(cxstack_ix);
1561 register PERL_CONTEXT *cx;
1562 register PERL_CONTEXT *ccstack = cxstack;
1563 PERL_SI *top_si = PL_curstackinfo;
1574 /* we may be in a higher stacklevel, so dig down deeper */
1575 while (cxix < 0 && top_si->si_type != PERLSI_MAIN) {
1576 top_si = top_si->si_prev;
1577 ccstack = top_si->si_cxstack;
1578 cxix = dopoptosub_at(ccstack, top_si->si_cxix);
1581 if (GIMME != G_ARRAY)
1585 if (PL_DBsub && cxix >= 0 &&
1586 ccstack[cxix].blk_sub.cv == GvCV(PL_DBsub))
1590 cxix = dopoptosub_at(ccstack, cxix - 1);
1593 cx = &ccstack[cxix];
1594 if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
1595 dbcxix = dopoptosub_at(ccstack, cxix - 1);
1596 /* We expect that ccstack[dbcxix] is CXt_SUB, anyway, the
1597 field below is defined for any cx. */
1598 if (PL_DBsub && dbcxix >= 0 && ccstack[dbcxix].blk_sub.cv == GvCV(PL_DBsub))
1599 cx = &ccstack[dbcxix];
1602 stashname = CopSTASHPV(cx->blk_oldcop);
1603 if (GIMME != G_ARRAY) {
1605 PUSHs(&PL_sv_undef);
1608 sv_setpv(TARG, stashname);
1615 PUSHs(&PL_sv_undef);
1617 PUSHs(sv_2mortal(newSVpv(stashname, 0)));
1618 PUSHs(sv_2mortal(newSVpv(CopFILE(cx->blk_oldcop), 0)));
1619 PUSHs(sv_2mortal(newSViv((I32)CopLINE(cx->blk_oldcop))));
1622 if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
1623 /* So is ccstack[dbcxix]. */
1625 gv_efullname3(sv, CvGV(ccstack[cxix].blk_sub.cv), Nullch);
1626 PUSHs(sv_2mortal(sv));
1627 PUSHs(sv_2mortal(newSViv((I32)cx->blk_sub.hasargs)));
1630 PUSHs(sv_2mortal(newSVpvn("(eval)",6)));
1631 PUSHs(sv_2mortal(newSViv(0)));
1633 gimme = (I32)cx->blk_gimme;
1634 if (gimme == G_VOID)
1635 PUSHs(&PL_sv_undef);
1637 PUSHs(sv_2mortal(newSViv(gimme & G_ARRAY)));
1638 if (CxTYPE(cx) == CXt_EVAL) {
1640 if (cx->blk_eval.old_op_type == OP_ENTEREVAL) {
1641 PUSHs(cx->blk_eval.cur_text);
1645 else if (cx->blk_eval.old_namesv) {
1646 PUSHs(sv_2mortal(newSVsv(cx->blk_eval.old_namesv)));
1649 /* eval BLOCK (try blocks have old_namesv == 0) */
1651 PUSHs(&PL_sv_undef);
1652 PUSHs(&PL_sv_undef);
1656 PUSHs(&PL_sv_undef);
1657 PUSHs(&PL_sv_undef);
1659 if (CxTYPE(cx) == CXt_SUB && cx->blk_sub.hasargs
1660 && CopSTASH_eq(PL_curcop, PL_debstash))
1662 AV *ary = cx->blk_sub.argarray;
1663 int off = AvARRAY(ary) - AvALLOC(ary);
1667 PL_dbargs = GvAV(gv_AVadd(tmpgv = gv_fetchpv("DB::args", TRUE,
1670 AvREAL_off(PL_dbargs); /* XXX should be REIFY (see av.h) */
1673 if (AvMAX(PL_dbargs) < AvFILLp(ary) + off)
1674 av_extend(PL_dbargs, AvFILLp(ary) + off);
1675 Copy(AvALLOC(ary), AvARRAY(PL_dbargs), AvFILLp(ary) + 1 + off, SV*);
1676 AvFILLp(PL_dbargs) = AvFILLp(ary) + off;
1678 /* XXX only hints propagated via op_private are currently
1679 * visible (others are not easily accessible, since they
1680 * use the global PL_hints) */
1681 PUSHs(sv_2mortal(newSViv((I32)cx->blk_oldcop->op_private &
1682 HINT_PRIVATE_MASK)));
1685 SV * old_warnings = cx->blk_oldcop->cop_warnings ;
1687 if (old_warnings == pWARN_NONE ||
1688 (old_warnings == pWARN_STD && (PL_dowarn & G_WARN_ON) == 0))
1689 mask = newSVpvn(WARN_NONEstring, WARNsize) ;
1690 else if (old_warnings == pWARN_ALL ||
1691 (old_warnings == pWARN_STD && PL_dowarn & G_WARN_ON))
1692 mask = newSVpvn(WARN_ALLstring, WARNsize) ;
1694 mask = newSVsv(old_warnings);
1695 PUSHs(sv_2mortal(mask));
1710 sv_reset(tmps, CopSTASH(PL_curcop));
1722 PL_curcop = (COP*)PL_op;
1723 TAINT_NOT; /* Each statement is presumed innocent */
1724 PL_stack_sp = PL_stack_base + cxstack[cxstack_ix].blk_oldsp;
1727 if (PL_op->op_private || SvIV(PL_DBsingle) || SvIV(PL_DBsignal) || SvIV(PL_DBtrace))
1731 register PERL_CONTEXT *cx;
1732 I32 gimme = G_ARRAY;
1739 DIE(aTHX_ "No DB::DB routine defined");
1741 if (CvDEPTH(cv) >= 1 && !(PL_debug & (1<<30))) /* don't do recursive DB::DB call */
1753 push_return(PL_op->op_next);
1754 PUSHBLOCK(cx, CXt_SUB, SP);
1757 (void)SvREFCNT_inc(cv);
1758 SAVEVPTR(PL_curpad);
1759 PL_curpad = AvARRAY((AV*)*av_fetch(CvPADLIST(cv),1,FALSE));
1760 RETURNOP(CvSTART(cv));
1774 register PERL_CONTEXT *cx;
1775 I32 gimme = GIMME_V;
1777 U32 cxtype = CXt_LOOP;
1786 if (PL_op->op_flags & OPf_SPECIAL) {
1787 svp = &THREADSV(PL_op->op_targ); /* per-thread variable */
1788 SAVEGENERICSV(*svp);
1792 #endif /* USE_THREADS */
1793 if (PL_op->op_targ) {
1794 #ifndef USE_ITHREADS
1795 svp = &PL_curpad[PL_op->op_targ]; /* "my" variable */
1798 SAVEPADSV(PL_op->op_targ);
1799 iterdata = (void*)PL_op->op_targ;
1800 cxtype |= CXp_PADVAR;
1805 svp = &GvSV(gv); /* symbol table variable */
1806 SAVEGENERICSV(*svp);
1809 iterdata = (void*)gv;
1815 PUSHBLOCK(cx, cxtype, SP);
1817 PUSHLOOP(cx, iterdata, MARK);
1819 PUSHLOOP(cx, svp, MARK);
1821 if (PL_op->op_flags & OPf_STACKED) {
1822 cx->blk_loop.iterary = (AV*)SvREFCNT_inc(POPs);
1823 if (SvTYPE(cx->blk_loop.iterary) != SVt_PVAV) {
1825 if (SvNIOKp(sv) || !SvPOKp(sv) ||
1826 SvNIOKp(cx->blk_loop.iterary) || !SvPOKp(cx->blk_loop.iterary) ||
1827 (looks_like_number(sv) && *SvPVX(sv) != '0' &&
1828 looks_like_number((SV*)cx->blk_loop.iterary) &&
1829 *SvPVX(cx->blk_loop.iterary) != '0'))
1831 if (SvNV(sv) < IV_MIN ||
1832 SvNV((SV*)cx->blk_loop.iterary) >= IV_MAX)
1833 DIE(aTHX_ "Range iterator outside integer range");
1834 cx->blk_loop.iterix = SvIV(sv);
1835 cx->blk_loop.itermax = SvIV((SV*)cx->blk_loop.iterary);
1838 cx->blk_loop.iterlval = newSVsv(sv);
1842 cx->blk_loop.iterary = PL_curstack;
1843 AvFILLp(PL_curstack) = SP - PL_stack_base;
1844 cx->blk_loop.iterix = MARK - PL_stack_base;
1853 register PERL_CONTEXT *cx;
1854 I32 gimme = GIMME_V;
1860 PUSHBLOCK(cx, CXt_LOOP, SP);
1861 PUSHLOOP(cx, 0, SP);
1869 register PERL_CONTEXT *cx;
1877 newsp = PL_stack_base + cx->blk_loop.resetsp;
1880 if (gimme == G_VOID)
1882 else if (gimme == G_SCALAR) {
1884 *++newsp = sv_mortalcopy(*SP);
1886 *++newsp = &PL_sv_undef;
1890 *++newsp = sv_mortalcopy(*++mark);
1891 TAINT_NOT; /* Each item is independent */
1897 POPLOOP(cx); /* Stack values are safe: release loop vars ... */
1898 PL_curpm = newpm; /* ... and pop $1 et al */
1910 register PERL_CONTEXT *cx;
1911 bool popsub2 = FALSE;
1912 bool clear_errsv = FALSE;
1919 if (PL_curstackinfo->si_type == PERLSI_SORT) {
1920 if (cxstack_ix == PL_sortcxix
1921 || dopoptosub(cxstack_ix) <= PL_sortcxix)
1923 if (cxstack_ix > PL_sortcxix)
1924 dounwind(PL_sortcxix);
1925 AvARRAY(PL_curstack)[1] = *SP;
1926 PL_stack_sp = PL_stack_base + 1;
1931 cxix = dopoptosub(cxstack_ix);
1933 DIE(aTHX_ "Can't return outside a subroutine");
1934 if (cxix < cxstack_ix)
1938 switch (CxTYPE(cx)) {
1943 if (!(PL_in_eval & EVAL_KEEPERR))
1948 if (AvFILLp(PL_comppad_name) >= 0)
1951 if (optype == OP_REQUIRE &&
1952 (MARK == SP || (gimme == G_SCALAR && !SvTRUE(*SP))) )
1954 /* Unassume the success we assumed earlier. */
1955 SV *nsv = cx->blk_eval.old_namesv;
1956 (void)hv_delete(GvHVn(PL_incgv), SvPVX(nsv), SvCUR(nsv), G_DISCARD);
1957 DIE(aTHX_ "%s did not return a true value", SvPVX(nsv));
1964 DIE(aTHX_ "panic: return");
1968 if (gimme == G_SCALAR) {
1971 if (cx->blk_sub.cv && CvDEPTH(cx->blk_sub.cv) > 1) {
1973 *++newsp = SvREFCNT_inc(*SP);
1978 sv = SvREFCNT_inc(*SP); /* FREETMPS could clobber it */
1980 *++newsp = sv_mortalcopy(sv);
1985 *++newsp = (SvTEMP(*SP)) ? *SP : sv_mortalcopy(*SP);
1988 *++newsp = sv_mortalcopy(*SP);
1991 *++newsp = &PL_sv_undef;
1993 else if (gimme == G_ARRAY) {
1994 while (++MARK <= SP) {
1995 *++newsp = (popsub2 && SvTEMP(*MARK))
1996 ? *MARK : sv_mortalcopy(*MARK);
1997 TAINT_NOT; /* Each item is independent */
2000 PL_stack_sp = newsp;
2002 /* Stack values are safe: */
2004 POPSUB(cx,sv); /* release CV and @_ ... */
2008 PL_curpm = newpm; /* ... and pop $1 et al */
2014 return pop_return();
2021 register PERL_CONTEXT *cx;
2031 if (PL_op->op_flags & OPf_SPECIAL) {
2032 cxix = dopoptoloop(cxstack_ix);
2034 DIE(aTHX_ "Can't \"last\" outside a loop block");
2037 cxix = dopoptolabel(cPVOP->op_pv);
2039 DIE(aTHX_ "Label not found for \"last %s\"", cPVOP->op_pv);
2041 if (cxix < cxstack_ix)
2046 switch (CxTYPE(cx)) {
2049 newsp = PL_stack_base + cx->blk_loop.resetsp;
2050 nextop = cx->blk_loop.last_op->op_next;
2054 nextop = pop_return();
2058 nextop = pop_return();
2062 nextop = pop_return();
2065 DIE(aTHX_ "panic: last");
2069 if (gimme == G_SCALAR) {
2071 *++newsp = ((pop2 == CXt_SUB) && SvTEMP(*SP))
2072 ? *SP : sv_mortalcopy(*SP);
2074 *++newsp = &PL_sv_undef;
2076 else if (gimme == G_ARRAY) {
2077 while (++MARK <= SP) {
2078 *++newsp = ((pop2 == CXt_SUB) && SvTEMP(*MARK))
2079 ? *MARK : sv_mortalcopy(*MARK);
2080 TAINT_NOT; /* Each item is independent */
2086 /* Stack values are safe: */
2089 POPLOOP(cx); /* release loop vars ... */
2093 POPSUB(cx,sv); /* release CV and @_ ... */
2096 PL_curpm = newpm; /* ... and pop $1 et al */
2106 register PERL_CONTEXT *cx;
2109 if (PL_op->op_flags & OPf_SPECIAL) {
2110 cxix = dopoptoloop(cxstack_ix);
2112 DIE(aTHX_ "Can't \"next\" outside a loop block");
2115 cxix = dopoptolabel(cPVOP->op_pv);
2117 DIE(aTHX_ "Label not found for \"next %s\"", cPVOP->op_pv);
2119 if (cxix < cxstack_ix)
2122 /* clear off anything above the scope we're re-entering, but
2123 * save the rest until after a possible continue block */
2124 inner = PL_scopestack_ix;
2126 if (PL_scopestack_ix < inner)
2127 leave_scope(PL_scopestack[PL_scopestack_ix]);
2128 return cx->blk_loop.next_op;
2134 register PERL_CONTEXT *cx;
2137 if (PL_op->op_flags & OPf_SPECIAL) {
2138 cxix = dopoptoloop(cxstack_ix);
2140 DIE(aTHX_ "Can't \"redo\" outside a loop block");
2143 cxix = dopoptolabel(cPVOP->op_pv);
2145 DIE(aTHX_ "Label not found for \"redo %s\"", cPVOP->op_pv);
2147 if (cxix < cxstack_ix)
2151 oldsave = PL_scopestack[PL_scopestack_ix - 1];
2152 LEAVE_SCOPE(oldsave);
2153 return cx->blk_loop.redo_op;
2157 S_dofindlabel(pTHX_ OP *o, char *label, OP **opstack, OP **oplimit)
2161 static char too_deep[] = "Target of goto is too deeply nested";
2164 Perl_croak(aTHX_ too_deep);
2165 if (o->op_type == OP_LEAVE ||
2166 o->op_type == OP_SCOPE ||
2167 o->op_type == OP_LEAVELOOP ||
2168 o->op_type == OP_LEAVETRY)
2170 *ops++ = cUNOPo->op_first;
2172 Perl_croak(aTHX_ too_deep);
2175 if (o->op_flags & OPf_KIDS) {
2176 /* First try all the kids at this level, since that's likeliest. */
2177 for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling) {
2178 if ((kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) &&
2179 kCOP->cop_label && strEQ(kCOP->cop_label, label))
2182 for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling) {
2183 if (kid == PL_lastgotoprobe)
2185 if ((kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) &&
2187 (ops[-1]->op_type != OP_NEXTSTATE &&
2188 ops[-1]->op_type != OP_DBSTATE)))
2190 if ((o = dofindlabel(kid, label, ops, oplimit)))
2209 register PERL_CONTEXT *cx;
2210 #define GOTO_DEPTH 64
2211 OP *enterops[GOTO_DEPTH];
2213 int do_dump = (PL_op->op_type == OP_DUMP);
2214 static char must_have_label[] = "goto must have label";
2217 if (PL_op->op_flags & OPf_STACKED) {
2221 /* This egregious kludge implements goto &subroutine */
2222 if (SvROK(sv) && SvTYPE(SvRV(sv)) == SVt_PVCV) {
2224 register PERL_CONTEXT *cx;
2225 CV* cv = (CV*)SvRV(sv);
2231 if (!CvROOT(cv) && !CvXSUB(cv)) {
2236 /* autoloaded stub? */
2237 if (cv != GvCV(gv) && (cv = GvCV(gv)))
2239 autogv = gv_autoload4(GvSTASH(gv), GvNAME(gv),
2240 GvNAMELEN(gv), FALSE);
2241 if (autogv && (cv = GvCV(autogv)))
2243 tmpstr = sv_newmortal();
2244 gv_efullname3(tmpstr, gv, Nullch);
2245 DIE(aTHX_ "Goto undefined subroutine &%s",SvPVX(tmpstr));
2247 DIE(aTHX_ "Goto undefined subroutine");
2250 /* First do some returnish stuff. */
2251 cxix = dopoptosub(cxstack_ix);
2253 DIE(aTHX_ "Can't goto subroutine outside a subroutine");
2254 if (cxix < cxstack_ix)
2257 if (CxTYPE(cx) == CXt_EVAL && cx->blk_eval.old_op_type == OP_ENTEREVAL)
2258 DIE(aTHX_ "Can't goto subroutine from an eval-string");
2260 if (CxTYPE(cx) == CXt_SUB && cx->blk_sub.hasargs) {
2261 /* put @_ back onto stack */
2262 AV* av = cx->blk_sub.argarray;
2264 items = AvFILLp(av) + 1;
2266 EXTEND(PL_stack_sp, items); /* @_ could have been extended. */
2267 Copy(AvARRAY(av), PL_stack_sp, items, SV*);
2268 PL_stack_sp += items;
2270 SvREFCNT_dec(GvAV(PL_defgv));
2271 GvAV(PL_defgv) = cx->blk_sub.savearray;
2272 #endif /* USE_THREADS */
2273 /* abandon @_ if it got reified */
2275 (void)sv_2mortal((SV*)av); /* delay until return */
2277 av_extend(av, items-1);
2278 AvFLAGS(av) = AVf_REIFY;
2279 PL_curpad[0] = (SV*)(cx->blk_sub.argarray = av);
2282 else if (CvXSUB(cv)) { /* put GvAV(defgv) back onto stack */
2285 av = (AV*)PL_curpad[0];
2287 av = GvAV(PL_defgv);
2289 items = AvFILLp(av) + 1;
2291 EXTEND(PL_stack_sp, items); /* @_ could have been extended. */
2292 Copy(AvARRAY(av), PL_stack_sp, items, SV*);
2293 PL_stack_sp += items;
2295 if (CxTYPE(cx) == CXt_SUB &&
2296 !(CvDEPTH(cx->blk_sub.cv) = cx->blk_sub.olddepth))
2297 SvREFCNT_dec(cx->blk_sub.cv);
2298 oldsave = PL_scopestack[PL_scopestack_ix - 1];
2299 LEAVE_SCOPE(oldsave);
2301 /* Now do some callish stuff. */
2304 #ifdef PERL_XSUB_OLDSTYLE
2305 if (CvOLDSTYLE(cv)) {
2306 I32 (*fp3)(int,int,int);
2311 fp3 = (I32(*)(int,int,int))CvXSUB(cv);
2312 items = (*fp3)(CvXSUBANY(cv).any_i32,
2313 mark - PL_stack_base + 1,
2315 SP = PL_stack_base + items;
2318 #endif /* PERL_XSUB_OLDSTYLE */
2323 PL_stack_sp--; /* There is no cv arg. */
2324 /* Push a mark for the start of arglist */
2326 (void)(*CvXSUB(cv))(aTHXo_ cv);
2327 /* Pop the current context like a decent sub should */
2328 POPBLOCK(cx, PL_curpm);
2329 /* Do _not_ use PUTBACK, keep the XSUB's return stack! */
2332 return pop_return();
2335 AV* padlist = CvPADLIST(cv);
2336 SV** svp = AvARRAY(padlist);
2337 if (CxTYPE(cx) == CXt_EVAL) {
2338 PL_in_eval = cx->blk_eval.old_in_eval;
2339 PL_eval_root = cx->blk_eval.old_eval_root;
2340 cx->cx_type = CXt_SUB;
2341 cx->blk_sub.hasargs = 0;
2343 cx->blk_sub.cv = cv;
2344 cx->blk_sub.olddepth = CvDEPTH(cv);
2346 if (CvDEPTH(cv) < 2)
2347 (void)SvREFCNT_inc(cv);
2348 else { /* save temporaries on recursion? */
2349 if (CvDEPTH(cv) == 100 && ckWARN(WARN_RECURSION))
2350 sub_crush_depth(cv);
2351 if (CvDEPTH(cv) > AvFILLp(padlist)) {
2352 AV *newpad = newAV();
2353 SV **oldpad = AvARRAY(svp[CvDEPTH(cv)-1]);
2354 I32 ix = AvFILLp((AV*)svp[1]);
2355 I32 names_fill = AvFILLp((AV*)svp[0]);
2356 svp = AvARRAY(svp[0]);
2357 for ( ;ix > 0; ix--) {
2358 if (names_fill >= ix && svp[ix] != &PL_sv_undef) {
2359 char *name = SvPVX(svp[ix]);
2360 if ((SvFLAGS(svp[ix]) & SVf_FAKE)
2363 /* outer lexical or anon code */
2364 av_store(newpad, ix,
2365 SvREFCNT_inc(oldpad[ix]) );
2367 else { /* our own lexical */
2369 av_store(newpad, ix, sv = (SV*)newAV());
2370 else if (*name == '%')
2371 av_store(newpad, ix, sv = (SV*)newHV());
2373 av_store(newpad, ix, sv = NEWSV(0,0));
2377 else if (IS_PADGV(oldpad[ix]) || IS_PADCONST(oldpad[ix])) {
2378 av_store(newpad, ix, sv = SvREFCNT_inc(oldpad[ix]));
2381 av_store(newpad, ix, sv = NEWSV(0,0));
2385 if (cx->blk_sub.hasargs) {
2388 av_store(newpad, 0, (SV*)av);
2389 AvFLAGS(av) = AVf_REIFY;
2391 av_store(padlist, CvDEPTH(cv), (SV*)newpad);
2392 AvFILLp(padlist) = CvDEPTH(cv);
2393 svp = AvARRAY(padlist);
2397 if (!cx->blk_sub.hasargs) {
2398 AV* av = (AV*)PL_curpad[0];
2400 items = AvFILLp(av) + 1;
2402 /* Mark is at the end of the stack. */
2404 Copy(AvARRAY(av), SP + 1, items, SV*);
2409 #endif /* USE_THREADS */
2410 SAVEVPTR(PL_curpad);
2411 PL_curpad = AvARRAY((AV*)svp[CvDEPTH(cv)]);
2413 if (cx->blk_sub.hasargs)
2414 #endif /* USE_THREADS */
2416 AV* av = (AV*)PL_curpad[0];
2420 cx->blk_sub.savearray = GvAV(PL_defgv);
2421 GvAV(PL_defgv) = (AV*)SvREFCNT_inc(av);
2422 #endif /* USE_THREADS */
2423 cx->blk_sub.oldcurpad = PL_curpad;
2424 cx->blk_sub.argarray = av;
2427 if (items >= AvMAX(av) + 1) {
2429 if (AvARRAY(av) != ary) {
2430 AvMAX(av) += AvARRAY(av) - AvALLOC(av);
2431 SvPVX(av) = (char*)ary;
2433 if (items >= AvMAX(av) + 1) {
2434 AvMAX(av) = items - 1;
2435 Renew(ary,items+1,SV*);
2437 SvPVX(av) = (char*)ary;
2440 Copy(mark,AvARRAY(av),items,SV*);
2441 AvFILLp(av) = items - 1;
2442 assert(!AvREAL(av));
2449 if (PERLDB_SUB) { /* Checking curstash breaks DProf. */
2451 * We do not care about using sv to call CV;
2452 * it's for informational purposes only.
2454 SV *sv = GvSV(PL_DBsub);
2457 if (PERLDB_SUB_NN) {
2458 SvIVX(sv) = PTR2IV(cv); /* Already upgraded, saved */
2461 gv_efullname3(sv, CvGV(cv), Nullch);
2464 && (gotocv = get_cv("DB::goto", FALSE)) ) {
2465 PUSHMARK( PL_stack_sp );
2466 call_sv((SV*)gotocv, G_SCALAR | G_NODEBUG);
2470 RETURNOP(CvSTART(cv));
2474 label = SvPV(sv,n_a);
2475 if (!(do_dump || *label))
2476 DIE(aTHX_ must_have_label);
2479 else if (PL_op->op_flags & OPf_SPECIAL) {
2481 DIE(aTHX_ must_have_label);
2484 label = cPVOP->op_pv;
2486 if (label && *label) {
2491 PL_lastgotoprobe = 0;
2493 for (ix = cxstack_ix; ix >= 0; ix--) {
2495 switch (CxTYPE(cx)) {
2497 gotoprobe = PL_eval_root; /* XXX not good for nested eval */
2500 gotoprobe = cx->blk_oldcop->op_sibling;
2506 gotoprobe = cx->blk_oldcop->op_sibling;
2508 gotoprobe = PL_main_root;
2511 if (CvDEPTH(cx->blk_sub.cv)) {
2512 gotoprobe = CvROOT(cx->blk_sub.cv);
2518 DIE(aTHX_ "Can't \"goto\" out of a pseudo block");
2521 DIE(aTHX_ "panic: goto");
2522 gotoprobe = PL_main_root;
2526 retop = dofindlabel(gotoprobe, label,
2527 enterops, enterops + GOTO_DEPTH);
2531 PL_lastgotoprobe = gotoprobe;
2534 DIE(aTHX_ "Can't find label %s", label);
2536 /* pop unwanted frames */
2538 if (ix < cxstack_ix) {
2545 oldsave = PL_scopestack[PL_scopestack_ix];
2546 LEAVE_SCOPE(oldsave);
2549 /* push wanted frames */
2551 if (*enterops && enterops[1]) {
2553 for (ix = 1; enterops[ix]; ix++) {
2554 PL_op = enterops[ix];
2555 /* Eventually we may want to stack the needed arguments
2556 * for each op. For now, we punt on the hard ones. */
2557 if (PL_op->op_type == OP_ENTERITER)
2558 DIE(aTHX_ "Can't \"goto\" into the middle of a foreach loop");
2559 CALL_FPTR(PL_op->op_ppaddr)(aTHX);
2567 if (!retop) retop = PL_main_start;
2569 PL_restartop = retop;
2570 PL_do_undump = TRUE;
2574 PL_restartop = 0; /* hmm, must be GNU unexec().. */
2575 PL_do_undump = FALSE;
2591 if (anum == 1 && (PL_op->op_private & OPpEXIT_VMSISH))
2595 PL_exit_flags |= PERL_EXIT_EXPECTED;
2597 PUSHs(&PL_sv_undef);
2605 NV value = SvNVx(GvSV(cCOP->cop_gv));
2606 register I32 match = I_32(value);
2609 if (((NV)match) > value)
2610 --match; /* was fractional--truncate other way */
2612 match -= cCOP->uop.scop.scop_offset;
2615 else if (match > cCOP->uop.scop.scop_max)
2616 match = cCOP->uop.scop.scop_max;
2617 PL_op = cCOP->uop.scop.scop_next[match];
2627 PL_op = PL_op->op_next; /* can't assume anything */
2630 match = *(SvPVx(GvSV(cCOP->cop_gv), n_a)) & 255;
2631 match -= cCOP->uop.scop.scop_offset;
2634 else if (match > cCOP->uop.scop.scop_max)
2635 match = cCOP->uop.scop.scop_max;
2636 PL_op = cCOP->uop.scop.scop_next[match];
2645 S_save_lines(pTHX_ AV *array, SV *sv)
2647 register char *s = SvPVX(sv);
2648 register char *send = SvPVX(sv) + SvCUR(sv);
2650 register I32 line = 1;
2652 while (s && s < send) {
2653 SV *tmpstr = NEWSV(85,0);
2655 sv_upgrade(tmpstr, SVt_PVMG);
2656 t = strchr(s, '\n');
2662 sv_setpvn(tmpstr, s, t - s);
2663 av_store(array, line++, tmpstr);
2668 #ifdef PERL_FLEXIBLE_EXCEPTIONS
2670 S_docatch_body(pTHX_ va_list args)
2672 return docatch_body();
2677 S_docatch_body(pTHX)
2684 S_docatch(pTHX_ OP *o)
2688 volatile PERL_SI *cursi = PL_curstackinfo;
2692 assert(CATCH_GET == TRUE);
2695 #ifdef PERL_FLEXIBLE_EXCEPTIONS
2697 CALLPROTECT(aTHX_ pcur_env, &ret, MEMBER_TO_FPTR(S_docatch_body));
2703 #ifndef PERL_FLEXIBLE_EXCEPTIONS
2709 if (PL_restartop && cursi == PL_curstackinfo) {
2710 PL_op = PL_restartop;
2727 Perl_sv_compile_2op(pTHX_ SV *sv, OP** startop, char *code, AV** avp)
2728 /* sv Text to convert to OP tree. */
2729 /* startop op_free() this to undo. */
2730 /* code Short string id of the caller. */
2732 dSP; /* Make POPBLOCK work. */
2735 I32 gimme = 0; /* SUSPECT - INITIALZE TO WHAT? NI-S */
2739 char tbuf[TYPE_DIGITS(long) + 12 + 10];
2740 char *tmpbuf = tbuf;
2746 /* switch to eval mode */
2748 if (PL_curcop == &PL_compiling) {
2749 SAVECOPSTASH_FREE(&PL_compiling);
2750 CopSTASH_set(&PL_compiling, PL_curstash);
2752 if (PERLDB_NAMEEVAL && CopLINE(PL_curcop)) {
2753 SV *sv = sv_newmortal();
2754 Perl_sv_setpvf(aTHX_ sv, "_<(%.10seval %lu)[%s:%"IVdf"]",
2755 code, (unsigned long)++PL_evalseq,
2756 CopFILE(PL_curcop), (IV)CopLINE(PL_curcop));
2760 sprintf(tmpbuf, "_<(%.10s_eval %lu)", code, (unsigned long)++PL_evalseq);
2761 SAVECOPFILE_FREE(&PL_compiling);
2762 CopFILE_set(&PL_compiling, tmpbuf+2);
2763 SAVECOPLINE(&PL_compiling);
2764 CopLINE_set(&PL_compiling, 1);
2765 /* XXX For C<eval "...">s within BEGIN {} blocks, this ends up
2766 deleting the eval's FILEGV from the stash before gv_check() runs
2767 (i.e. before run-time proper). To work around the coredump that
2768 ensues, we always turn GvMULTI_on for any globals that were
2769 introduced within evals. See force_ident(). GSAR 96-10-12 */
2770 safestr = savepv(tmpbuf);
2771 SAVEDELETE(PL_defstash, safestr, strlen(safestr));
2773 #ifdef OP_IN_REGISTER
2778 PL_hints &= HINT_UTF8;
2781 PL_op->op_type = OP_ENTEREVAL;
2782 PL_op->op_flags = 0; /* Avoid uninit warning. */
2783 PUSHBLOCK(cx, CXt_EVAL|(PL_curcop == &PL_compiling ? 0 : CXp_REAL), SP);
2784 PUSHEVAL(cx, 0, Nullgv);
2785 rop = doeval(G_SCALAR, startop);
2786 POPBLOCK(cx,PL_curpm);
2789 (*startop)->op_type = OP_NULL;
2790 (*startop)->op_ppaddr = PL_ppaddr[OP_NULL];
2792 *avp = (AV*)SvREFCNT_inc(PL_comppad);
2794 if (PL_curcop == &PL_compiling)
2795 PL_compiling.op_private = PL_hints;
2796 #ifdef OP_IN_REGISTER
2802 /* With USE_THREADS, eval_owner must be held on entry to doeval */
2804 S_doeval(pTHX_ int gimme, OP** startop)
2812 PL_in_eval = ((saveop && saveop->op_type == OP_REQUIRE)
2813 ? (EVAL_INREQUIRE | (PL_in_eval & EVAL_INEVAL))
2818 /* set up a scratch pad */
2821 SAVEVPTR(PL_curpad);
2822 SAVESPTR(PL_comppad);
2823 SAVESPTR(PL_comppad_name);
2824 SAVEI32(PL_comppad_name_fill);
2825 SAVEI32(PL_min_intro_pending);
2826 SAVEI32(PL_max_intro_pending);
2829 for (i = cxstack_ix - 1; i >= 0; i--) {
2830 PERL_CONTEXT *cx = &cxstack[i];
2831 if (CxTYPE(cx) == CXt_EVAL)
2833 else if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
2834 caller = cx->blk_sub.cv;
2839 SAVESPTR(PL_compcv);
2840 PL_compcv = (CV*)NEWSV(1104,0);
2841 sv_upgrade((SV *)PL_compcv, SVt_PVCV);
2842 CvEVAL_on(PL_compcv);
2844 CvOWNER(PL_compcv) = 0;
2845 New(666, CvMUTEXP(PL_compcv), 1, perl_mutex);
2846 MUTEX_INIT(CvMUTEXP(PL_compcv));
2847 #endif /* USE_THREADS */
2849 PL_comppad = newAV();
2850 av_push(PL_comppad, Nullsv);
2851 PL_curpad = AvARRAY(PL_comppad);
2852 PL_comppad_name = newAV();
2853 PL_comppad_name_fill = 0;
2854 PL_min_intro_pending = 0;
2857 av_store(PL_comppad_name, 0, newSVpvn("@_", 2));
2858 PL_curpad[0] = (SV*)newAV();
2859 SvPADMY_on(PL_curpad[0]); /* XXX Needed? */
2860 #endif /* USE_THREADS */
2862 comppadlist = newAV();
2863 AvREAL_off(comppadlist);
2864 av_store(comppadlist, 0, (SV*)PL_comppad_name);
2865 av_store(comppadlist, 1, (SV*)PL_comppad);
2866 CvPADLIST(PL_compcv) = comppadlist;
2869 (saveop->op_type != OP_REQUIRE && saveop->op_type != OP_DOFILE))
2871 CvOUTSIDE(PL_compcv) = (CV*)SvREFCNT_inc(caller);
2874 SAVEFREESV(PL_compcv);
2876 /* make sure we compile in the right package */
2878 if (CopSTASH_ne(PL_curcop, PL_curstash)) {
2879 SAVESPTR(PL_curstash);
2880 PL_curstash = CopSTASH(PL_curcop);
2882 SAVESPTR(PL_beginav);
2883 PL_beginav = newAV();
2884 SAVEFREESV(PL_beginav);
2885 SAVEI32(PL_error_count);
2887 /* try to compile it */
2889 PL_eval_root = Nullop;
2891 PL_curcop = &PL_compiling;
2892 PL_curcop->cop_arybase = 0;
2893 SvREFCNT_dec(PL_rs);
2894 PL_rs = newSVpvn("\n", 1);
2895 if (saveop && saveop->op_flags & OPf_SPECIAL)
2896 PL_in_eval |= EVAL_KEEPERR;
2899 if (yyparse() || PL_error_count || !PL_eval_root) {
2903 I32 optype = 0; /* Might be reset by POPEVAL. */
2908 op_free(PL_eval_root);
2909 PL_eval_root = Nullop;
2911 SP = PL_stack_base + POPMARK; /* pop original mark */
2913 POPBLOCK(cx,PL_curpm);
2919 if (optype == OP_REQUIRE) {
2920 char* msg = SvPVx(ERRSV, n_a);
2921 DIE(aTHX_ "%sCompilation failed in require",
2922 *msg ? msg : "Unknown error\n");
2925 char* msg = SvPVx(ERRSV, n_a);
2927 POPBLOCK(cx,PL_curpm);
2929 Perl_croak(aTHX_ "%sCompilation failed in regexp",
2930 (*msg ? msg : "Unknown error\n"));
2932 SvREFCNT_dec(PL_rs);
2933 PL_rs = SvREFCNT_inc(PL_nrs);
2935 MUTEX_LOCK(&PL_eval_mutex);
2937 COND_SIGNAL(&PL_eval_cond);
2938 MUTEX_UNLOCK(&PL_eval_mutex);
2939 #endif /* USE_THREADS */
2942 SvREFCNT_dec(PL_rs);
2943 PL_rs = SvREFCNT_inc(PL_nrs);
2944 CopLINE_set(&PL_compiling, 0);
2946 *startop = PL_eval_root;
2947 SvREFCNT_dec(CvOUTSIDE(PL_compcv));
2948 CvOUTSIDE(PL_compcv) = Nullcv;
2950 SAVEFREEOP(PL_eval_root);
2952 scalarvoid(PL_eval_root);
2953 else if (gimme & G_ARRAY)
2956 scalar(PL_eval_root);
2958 DEBUG_x(dump_eval());
2960 /* Register with debugger: */
2961 if (PERLDB_INTER && saveop->op_type == OP_REQUIRE) {
2962 CV *cv = get_cv("DB::postponed", FALSE);
2966 XPUSHs((SV*)CopFILEGV(&PL_compiling));
2968 call_sv((SV*)cv, G_DISCARD);
2972 /* compiled okay, so do it */
2974 CvDEPTH(PL_compcv) = 1;
2975 SP = PL_stack_base + POPMARK; /* pop original mark */
2976 PL_op = saveop; /* The caller may need it. */
2977 PL_lex_state = LEX_NOTPARSING; /* $^S needs this. */
2979 MUTEX_LOCK(&PL_eval_mutex);
2981 COND_SIGNAL(&PL_eval_cond);
2982 MUTEX_UNLOCK(&PL_eval_mutex);
2983 #endif /* USE_THREADS */
2985 RETURNOP(PL_eval_start);
2989 S_doopen_pmc(pTHX_ const char *name, const char *mode)
2991 STRLEN namelen = strlen(name);
2994 if (namelen > 3 && strEQ(name + namelen - 3, ".pm")) {
2995 SV *pmcsv = Perl_newSVpvf(aTHX_ "%s%c", name, 'c');
2996 char *pmc = SvPV_nolen(pmcsv);
2999 if (PerlLIO_stat(pmc, &pmcstat) < 0) {
3000 fp = PerlIO_open(name, mode);
3003 if (PerlLIO_stat(name, &pmstat) < 0 ||
3004 pmstat.st_mtime < pmcstat.st_mtime)
3006 fp = PerlIO_open(pmc, mode);
3009 fp = PerlIO_open(name, mode);
3012 SvREFCNT_dec(pmcsv);
3015 fp = PerlIO_open(name, mode);
3023 register PERL_CONTEXT *cx;
3028 SV *namesv = Nullsv;
3030 I32 gimme = G_SCALAR;
3031 PerlIO *tryrsfp = 0;
3033 int filter_has_file = 0;
3034 GV *filter_child_proc = 0;
3035 SV *filter_state = 0;
3040 if (SvPOK(sv) && SvNOK(sv)) { /* require v5.6.1 */
3041 UV rev = 0, ver = 0, sver = 0;
3043 U8 *s = (U8*)SvPVX(sv);
3044 U8 *end = (U8*)SvPVX(sv) + SvCUR(sv);
3046 rev = utf8_to_uv(s, end - s, &len, 0);
3049 ver = utf8_to_uv(s, end - s, &len, 0);
3052 sver = utf8_to_uv(s, end - s, &len, 0);
3055 if (PERL_REVISION < rev
3056 || (PERL_REVISION == rev
3057 && (PERL_VERSION < ver
3058 || (PERL_VERSION == ver
3059 && PERL_SUBVERSION < sver))))
3061 DIE(aTHX_ "Perl v%"UVuf".%"UVuf".%"UVuf" required--this is only "
3062 "v%d.%d.%d, stopped", rev, ver, sver, PERL_REVISION,
3063 PERL_VERSION, PERL_SUBVERSION);
3067 else if (!SvPOKp(sv)) { /* require 5.005_03 */
3068 if ((NV)PERL_REVISION + ((NV)PERL_VERSION/(NV)1000)
3069 + ((NV)PERL_SUBVERSION/(NV)1000000)
3070 + 0.00000099 < SvNV(sv))
3074 NV nver = (nrev - rev) * 1000;
3075 UV ver = (UV)(nver + 0.0009);
3076 NV nsver = (nver - ver) * 1000;
3077 UV sver = (UV)(nsver + 0.0009);
3079 /* help out with the "use 5.6" confusion */
3080 if (sver == 0 && (rev > 5 || (rev == 5 && ver >= 100))) {
3081 DIE(aTHX_ "Perl v%"UVuf".%"UVuf".%"UVuf" required--"
3082 "this is only v%d.%d.%d, stopped"
3083 " (did you mean v%"UVuf".%"UVuf".0?)",
3084 rev, ver, sver, PERL_REVISION, PERL_VERSION,
3085 PERL_SUBVERSION, rev, ver/100);
3088 DIE(aTHX_ "Perl v%"UVuf".%"UVuf".%"UVuf" required--"
3089 "this is only v%d.%d.%d, stopped",
3090 rev, ver, sver, PERL_REVISION, PERL_VERSION,
3097 name = SvPV(sv, len);
3098 if (!(name && len > 0 && *name))
3099 DIE(aTHX_ "Null filename used");
3100 TAINT_PROPER("require");
3101 if (PL_op->op_type == OP_REQUIRE &&
3102 (svp = hv_fetch(GvHVn(PL_incgv), name, len, 0)) &&
3103 *svp != &PL_sv_undef)
3106 /* prepare to compile file */
3108 if (PERL_FILE_IS_ABSOLUTE(name)
3109 || (*name == '.' && (name[1] == '/' ||
3110 (name[1] == '.' && name[2] == '/'))))
3113 tryrsfp = doopen_pmc(name,PERL_SCRIPT_MODE);
3114 #ifdef MACOS_TRADITIONAL
3115 /* We consider paths of the form :a:b ambiguous and interpret them first
3116 as global then as local
3118 if (!tryrsfp && name[0] == ':' && name[1] != ':' && strchr(name+2, ':'))
3127 AV *ar = GvAVn(PL_incgv);
3131 if ((unixname = tounixspec(name, Nullch)) != Nullch)
3134 namesv = NEWSV(806, 0);
3135 for (i = 0; i <= AvFILL(ar); i++) {
3136 SV *dirsv = *av_fetch(ar, i, TRUE);
3142 if (SvTYPE(SvRV(loader)) == SVt_PVAV) {
3143 loader = *av_fetch((AV *)SvRV(loader), 0, TRUE);
3146 Perl_sv_setpvf(aTHX_ namesv, "/loader/0x%"UVxf"/%s",
3147 PTR2UV(SvANY(loader)), name);
3148 tryname = SvPVX(namesv);
3159 count = call_sv(loader, G_ARRAY);
3169 if (SvROK(arg) && SvTYPE(SvRV(arg)) == SVt_PVGV) {
3173 if (SvTYPE(arg) == SVt_PVGV) {
3174 IO *io = GvIO((GV *)arg);
3179 tryrsfp = IoIFP(io);
3180 if (IoTYPE(io) == IoTYPE_PIPE) {
3181 /* reading from a child process doesn't
3182 nest -- when returning from reading
3183 the inner module, the outer one is
3184 unreadable (closed?) I've tried to
3185 save the gv to manage the lifespan of
3186 the pipe, but this didn't help. XXX */
3187 filter_child_proc = (GV *)arg;
3188 (void)SvREFCNT_inc(filter_child_proc);
3191 if (IoOFP(io) && IoOFP(io) != IoIFP(io)) {
3192 PerlIO_close(IoOFP(io));
3204 if (SvROK(arg) && SvTYPE(SvRV(arg)) == SVt_PVCV) {
3206 (void)SvREFCNT_inc(filter_sub);
3209 filter_state = SP[i];
3210 (void)SvREFCNT_inc(filter_state);
3214 tryrsfp = PerlIO_open("/dev/null",
3228 filter_has_file = 0;
3229 if (filter_child_proc) {
3230 SvREFCNT_dec(filter_child_proc);
3231 filter_child_proc = 0;
3234 SvREFCNT_dec(filter_state);
3238 SvREFCNT_dec(filter_sub);
3243 char *dir = SvPVx(dirsv, n_a);
3244 #ifdef MACOS_TRADITIONAL
3246 Perl_sv_setpvf(aTHX_ namesv, "%s%s", MacPerl_CanonDir(dir, buf), name+(name[0] == ':'));
3250 if ((unixdir = tounixpath(dir, Nullch)) == Nullch)
3252 sv_setpv(namesv, unixdir);
3253 sv_catpv(namesv, unixname);
3255 Perl_sv_setpvf(aTHX_ namesv, "%s/%s", dir, name);
3258 TAINT_PROPER("require");
3259 tryname = SvPVX(namesv);
3260 #ifdef MACOS_TRADITIONAL
3262 /* Convert slashes in the name part, but not the directory part, to colons */
3264 for (colon = tryname+strlen(dir); colon = strchr(colon, '/'); )
3268 tryrsfp = doopen_pmc(tryname, PERL_SCRIPT_MODE);
3270 if (tryname[0] == '.' && tryname[1] == '/')
3278 SAVECOPFILE_FREE(&PL_compiling);
3279 CopFILE_set(&PL_compiling, tryrsfp ? tryname : name);
3280 SvREFCNT_dec(namesv);
3282 if (PL_op->op_type == OP_REQUIRE) {
3283 char *msgstr = name;
3284 if (namesv) { /* did we lookup @INC? */
3285 SV *msg = sv_2mortal(newSVpv(msgstr,0));
3286 SV *dirmsgsv = NEWSV(0, 0);
3287 AV *ar = GvAVn(PL_incgv);
3289 sv_catpvn(msg, " in @INC", 8);
3290 if (instr(SvPVX(msg), ".h "))
3291 sv_catpv(msg, " (change .h to .ph maybe?)");
3292 if (instr(SvPVX(msg), ".ph "))
3293 sv_catpv(msg, " (did you run h2ph?)");
3294 sv_catpv(msg, " (@INC contains:");
3295 for (i = 0; i <= AvFILL(ar); i++) {
3296 char *dir = SvPVx(*av_fetch(ar, i, TRUE), n_a);
3297 Perl_sv_setpvf(aTHX_ dirmsgsv, " %s", dir);
3298 sv_catsv(msg, dirmsgsv);
3300 sv_catpvn(msg, ")", 1);
3301 SvREFCNT_dec(dirmsgsv);
3302 msgstr = SvPV_nolen(msg);
3304 DIE(aTHX_ "Can't locate %s", msgstr);
3310 SETERRNO(0, SS$_NORMAL);
3312 /* Assume success here to prevent recursive requirement. */
3313 (void)hv_store(GvHVn(PL_incgv), name, strlen(name),
3314 newSVpv(CopFILE(&PL_compiling), 0), 0 );
3318 lex_start(sv_2mortal(newSVpvn("",0)));
3319 SAVEGENERICSV(PL_rsfp_filters);
3320 PL_rsfp_filters = Nullav;
3325 SAVESPTR(PL_compiling.cop_warnings);
3326 if (PL_dowarn & G_WARN_ALL_ON)
3327 PL_compiling.cop_warnings = pWARN_ALL ;
3328 else if (PL_dowarn & G_WARN_ALL_OFF)
3329 PL_compiling.cop_warnings = pWARN_NONE ;
3331 PL_compiling.cop_warnings = pWARN_STD ;
3332 SAVESPTR(PL_compiling.cop_io);
3333 PL_compiling.cop_io = Nullsv;
3335 if (filter_sub || filter_child_proc) {
3336 SV *datasv = filter_add(run_user_filter, Nullsv);
3337 IoLINES(datasv) = filter_has_file;
3338 IoFMT_GV(datasv) = (GV *)filter_child_proc;
3339 IoTOP_GV(datasv) = (GV *)filter_state;
3340 IoBOTTOM_GV(datasv) = (GV *)filter_sub;
3343 /* switch to eval mode */
3344 push_return(PL_op->op_next);
3345 PUSHBLOCK(cx, CXt_EVAL, SP);
3346 PUSHEVAL(cx, name, Nullgv);
3348 SAVECOPLINE(&PL_compiling);
3349 CopLINE_set(&PL_compiling, 0);
3353 MUTEX_LOCK(&PL_eval_mutex);
3354 if (PL_eval_owner && PL_eval_owner != thr)
3355 while (PL_eval_owner)
3356 COND_WAIT(&PL_eval_cond, &PL_eval_mutex);
3357 PL_eval_owner = thr;
3358 MUTEX_UNLOCK(&PL_eval_mutex);
3359 #endif /* USE_THREADS */
3360 return DOCATCH(doeval(G_SCALAR, NULL));
3365 return pp_require();
3371 register PERL_CONTEXT *cx;
3373 I32 gimme = GIMME_V, was = PL_sub_generation;
3374 char tbuf[TYPE_DIGITS(long) + 12];
3375 char *tmpbuf = tbuf;
3380 if (!SvPV(sv,len) || !len)
3382 TAINT_PROPER("eval");
3388 /* switch to eval mode */
3390 if (PERLDB_NAMEEVAL && CopLINE(PL_curcop)) {
3391 SV *sv = sv_newmortal();
3392 Perl_sv_setpvf(aTHX_ sv, "_<(eval %lu)[%s:%"IVdf"]",
3393 (unsigned long)++PL_evalseq,
3394 CopFILE(PL_curcop), (IV)CopLINE(PL_curcop));
3398 sprintf(tmpbuf, "_<(eval %lu)", (unsigned long)++PL_evalseq);
3399 SAVECOPFILE_FREE(&PL_compiling);
3400 CopFILE_set(&PL_compiling, tmpbuf+2);
3401 SAVECOPLINE(&PL_compiling);
3402 CopLINE_set(&PL_compiling, 1);
3403 /* XXX For C<eval "...">s within BEGIN {} blocks, this ends up
3404 deleting the eval's FILEGV from the stash before gv_check() runs
3405 (i.e. before run-time proper). To work around the coredump that
3406 ensues, we always turn GvMULTI_on for any globals that were
3407 introduced within evals. See force_ident(). GSAR 96-10-12 */
3408 safestr = savepv(tmpbuf);
3409 SAVEDELETE(PL_defstash, safestr, strlen(safestr));
3411 PL_hints = PL_op->op_targ;
3412 SAVESPTR(PL_compiling.cop_warnings);
3413 if (specialWARN(PL_curcop->cop_warnings))
3414 PL_compiling.cop_warnings = PL_curcop->cop_warnings;
3416 PL_compiling.cop_warnings = newSVsv(PL_curcop->cop_warnings);
3417 SAVEFREESV(PL_compiling.cop_warnings);
3419 SAVESPTR(PL_compiling.cop_io);
3420 if (specialCopIO(PL_curcop->cop_io))
3421 PL_compiling.cop_io = PL_curcop->cop_io;
3423 PL_compiling.cop_io = newSVsv(PL_curcop->cop_io);
3424 SAVEFREESV(PL_compiling.cop_io);
3427 push_return(PL_op->op_next);
3428 PUSHBLOCK(cx, (CXt_EVAL|CXp_REAL), SP);
3429 PUSHEVAL(cx, 0, Nullgv);
3431 /* prepare to compile string */
3433 if (PERLDB_LINE && PL_curstash != PL_debstash)
3434 save_lines(CopFILEAV(&PL_compiling), PL_linestr);
3437 MUTEX_LOCK(&PL_eval_mutex);
3438 if (PL_eval_owner && PL_eval_owner != thr)
3439 while (PL_eval_owner)
3440 COND_WAIT(&PL_eval_cond, &PL_eval_mutex);
3441 PL_eval_owner = thr;
3442 MUTEX_UNLOCK(&PL_eval_mutex);
3443 #endif /* USE_THREADS */
3444 ret = doeval(gimme, NULL);
3445 if (PERLDB_INTER && was != PL_sub_generation /* Some subs defined here. */
3446 && ret != PL_op->op_next) { /* Successive compilation. */
3447 strcpy(safestr, "_<(eval )"); /* Anything fake and short. */
3449 return DOCATCH(ret);
3459 register PERL_CONTEXT *cx;
3461 U8 save_flags = PL_op -> op_flags;
3466 retop = pop_return();
3469 if (gimme == G_VOID)
3471 else if (gimme == G_SCALAR) {
3474 if (SvFLAGS(TOPs) & SVs_TEMP)
3477 *MARK = sv_mortalcopy(TOPs);
3481 *MARK = &PL_sv_undef;
3486 /* in case LEAVE wipes old return values */
3487 for (mark = newsp + 1; mark <= SP; mark++) {
3488 if (!(SvFLAGS(*mark) & SVs_TEMP)) {
3489 *mark = sv_mortalcopy(*mark);
3490 TAINT_NOT; /* Each item is independent */
3494 PL_curpm = newpm; /* Don't pop $1 et al till now */
3496 if (AvFILLp(PL_comppad_name) >= 0)
3500 assert(CvDEPTH(PL_compcv) == 1);
3502 CvDEPTH(PL_compcv) = 0;
3505 if (optype == OP_REQUIRE &&
3506 !(gimme == G_SCALAR ? SvTRUE(*SP) : SP > newsp))
3508 /* Unassume the success we assumed earlier. */
3509 SV *nsv = cx->blk_eval.old_namesv;
3510 (void)hv_delete(GvHVn(PL_incgv), SvPVX(nsv), SvCUR(nsv), G_DISCARD);
3511 retop = Perl_die(aTHX_ "%s did not return a true value", SvPVX(nsv));
3512 /* die_where() did LEAVE, or we won't be here */
3516 if (!(save_flags & OPf_SPECIAL))
3526 register PERL_CONTEXT *cx;
3527 I32 gimme = GIMME_V;
3532 push_return(cLOGOP->op_other->op_next);
3533 PUSHBLOCK(cx, (CXt_EVAL|CXp_TRYBLOCK), SP);
3535 PL_eval_root = PL_op; /* Only needed so that goto works right. */
3537 PL_in_eval = EVAL_INEVAL;
3540 return DOCATCH(PL_op->op_next);
3550 register PERL_CONTEXT *cx;
3558 if (gimme == G_VOID)
3560 else if (gimme == G_SCALAR) {
3563 if (SvFLAGS(TOPs) & (SVs_PADTMP|SVs_TEMP))
3566 *MARK = sv_mortalcopy(TOPs);
3570 *MARK = &PL_sv_undef;
3575 /* in case LEAVE wipes old return values */
3576 for (mark = newsp + 1; mark <= SP; mark++) {
3577 if (!(SvFLAGS(*mark) & (SVs_PADTMP|SVs_TEMP))) {
3578 *mark = sv_mortalcopy(*mark);
3579 TAINT_NOT; /* Each item is independent */
3583 PL_curpm = newpm; /* Don't pop $1 et al till now */
3591 S_doparseform(pTHX_ SV *sv)
3594 register char *s = SvPV_force(sv, len);
3595 register char *send = s + len;
3596 register char *base;
3597 register I32 skipspaces = 0;
3600 bool postspace = FALSE;
3608 Perl_croak(aTHX_ "Null picture in formline");
3610 New(804, fops, (send - s)*3+10, U16); /* Almost certainly too long... */
3615 *fpc++ = FF_LINEMARK;
3616 noblank = repeat = FALSE;
3634 case ' ': case '\t':
3645 *fpc++ = FF_LITERAL;
3653 *fpc++ = skipspaces;
3657 *fpc++ = FF_NEWLINE;
3661 arg = fpc - linepc + 1;
3668 *fpc++ = FF_LINEMARK;
3669 noblank = repeat = FALSE;
3678 ischop = s[-1] == '^';
3684 arg = (s - base) - 1;
3686 *fpc++ = FF_LITERAL;
3695 *fpc++ = FF_LINEGLOB;
3697 else if (*s == '#' || (*s == '.' && s[1] == '#')) {
3698 arg = ischop ? 512 : 0;
3708 arg |= 256 + (s - f);
3710 *fpc++ = s - base; /* fieldsize for FETCH */
3711 *fpc++ = FF_DECIMAL;
3714 else if (*s == '0' && s[1] == '#') { /* Zero padded decimals */
3715 arg = ischop ? 512 : 0;
3717 s++; /* skip the '0' first */
3726 arg |= 256 + (s - f);
3728 *fpc++ = s - base; /* fieldsize for FETCH */
3729 *fpc++ = FF_0DECIMAL;
3734 bool ismore = FALSE;
3737 while (*++s == '>') ;
3738 prespace = FF_SPACE;
3740 else if (*s == '|') {
3741 while (*++s == '|') ;
3742 prespace = FF_HALFSPACE;
3747 while (*++s == '<') ;
3750 if (*s == '.' && s[1] == '.' && s[2] == '.') {
3754 *fpc++ = s - base; /* fieldsize for FETCH */
3756 *fpc++ = ischop ? FF_CHECKCHOP : FF_CHECKNL;
3774 { /* need to jump to the next word */
3776 z = WORD_ALIGN - SvCUR(sv) % WORD_ALIGN;
3777 SvGROW(sv, SvCUR(sv) + z + arg * sizeof(U16) + 4);
3778 s = SvPVX(sv) + SvCUR(sv) + z;
3780 Copy(fops, s, arg, U16);
3782 sv_magic(sv, Nullsv, 'f', Nullch, 0);
3787 * The mergesort implementation is by Peter M. Mcilroy <pmcilroy@lucent.com>.
3789 * The original code was written in conjunction with BSD Computer Software
3790 * Research Group at University of California, Berkeley.
3792 * See also: "Optimistic Merge Sort" (SODA '92)
3794 * The integration to Perl is by John P. Linderman <jpl@research.att.com>.
3796 * The code can be distributed under the same terms as Perl itself.
3801 #include <sys/types.h>
3806 #define New(ID,VAR,N,TYPE) VAR=(TYPE *)malloc((N)*sizeof(TYPE))
3807 #define Safefree(VAR) free(VAR)
3808 typedef int (*SVCOMPARE_t) (pTHXo_ SV*, SV*);
3809 #endif /* TESTHARNESS */
3811 typedef char * aptr; /* pointer for arithmetic on sizes */
3812 typedef SV * gptr; /* pointers in our lists */
3814 /* Binary merge internal sort, with a few special mods
3815 ** for the special perl environment it now finds itself in.
3817 ** Things that were once options have been hotwired
3818 ** to values suitable for this use. In particular, we'll always
3819 ** initialize looking for natural runs, we'll always produce stable
3820 ** output, and we'll always do Peter McIlroy's binary merge.
3823 /* Pointer types for arithmetic and storage and convenience casts */
3825 #define APTR(P) ((aptr)(P))
3826 #define GPTP(P) ((gptr *)(P))
3827 #define GPPP(P) ((gptr **)(P))
3830 /* byte offset from pointer P to (larger) pointer Q */
3831 #define BYTEOFF(P, Q) (APTR(Q) - APTR(P))
3833 #define PSIZE sizeof(gptr)
3835 /* If PSIZE is power of 2, make PSHIFT that power, if that helps */
3838 #define PNELEM(P, Q) (BYTEOFF(P,Q) >> (PSHIFT))
3839 #define PNBYTE(N) ((N) << (PSHIFT))
3840 #define PINDEX(P, N) (GPTP(APTR(P) + PNBYTE(N)))
3842 /* Leave optimization to compiler */
3843 #define PNELEM(P, Q) (GPTP(Q) - GPTP(P))
3844 #define PNBYTE(N) ((N) * (PSIZE))
3845 #define PINDEX(P, N) (GPTP(P) + (N))
3848 /* Pointer into other corresponding to pointer into this */
3849 #define POTHER(P, THIS, OTHER) GPTP(APTR(OTHER) + BYTEOFF(THIS,P))
3851 #define FROMTOUPTO(src, dst, lim) do *dst++ = *src++; while(src<lim)
3854 /* Runs are identified by a pointer in the auxilliary list.
3855 ** The pointer is at the start of the list,
3856 ** and it points to the start of the next list.
3857 ** NEXT is used as an lvalue, too.
3860 #define NEXT(P) (*GPPP(P))
3863 /* PTHRESH is the minimum number of pairs with the same sense to justify
3864 ** checking for a run and extending it. Note that PTHRESH counts PAIRS,
3865 ** not just elements, so PTHRESH == 8 means a run of 16.
3870 /* RTHRESH is the number of elements in a run that must compare low
3871 ** to the low element from the opposing run before we justify
3872 ** doing a binary rampup instead of single stepping.
3873 ** In random input, N in a row low should only happen with
3874 ** probability 2^(1-N), so we can risk that we are dealing
3875 ** with orderly input without paying much when we aren't.
3882 ** Overview of algorithm and variables.
3883 ** The array of elements at list1 will be organized into runs of length 2,
3884 ** or runs of length >= 2 * PTHRESH. We only try to form long runs when
3885 ** PTHRESH adjacent pairs compare in the same way, suggesting overall order.
3887 ** Unless otherwise specified, pair pointers address the first of two elements.
3889 ** b and b+1 are a pair that compare with sense ``sense''.
3890 ** b is the ``bottom'' of adjacent pairs that might form a longer run.
3892 ** p2 parallels b in the list2 array, where runs are defined by
3895 ** t represents the ``top'' of the adjacent pairs that might extend
3896 ** the run beginning at b. Usually, t addresses a pair
3897 ** that compares with opposite sense from (b,b+1).
3898 ** However, it may also address a singleton element at the end of list1,
3899 ** or it may be equal to ``last'', the first element beyond list1.
3901 ** r addresses the Nth pair following b. If this would be beyond t,
3902 ** we back it off to t. Only when r is less than t do we consider the
3903 ** run long enough to consider checking.
3905 ** q addresses a pair such that the pairs at b through q already form a run.
3906 ** Often, q will equal b, indicating we only are sure of the pair itself.
3907 ** However, a search on the previous cycle may have revealed a longer run,
3908 ** so q may be greater than b.
3910 ** p is used to work back from a candidate r, trying to reach q,
3911 ** which would mean b through r would be a run. If we discover such a run,
3912 ** we start q at r and try to push it further towards t.
3913 ** If b through r is NOT a run, we detect the wrong order at (p-1,p).
3914 ** In any event, after the check (if any), we have two main cases.
3916 ** 1) Short run. b <= q < p <= r <= t.
3917 ** b through q is a run (perhaps trivial)
3918 ** q through p are uninteresting pairs
3919 ** p through r is a run
3921 ** 2) Long run. b < r <= q < t.
3922 ** b through q is a run (of length >= 2 * PTHRESH)
3924 ** Note that degenerate cases are not only possible, but likely.
3925 ** For example, if the pair following b compares with opposite sense,
3926 ** then b == q < p == r == t.
3931 dynprep(pTHX_ gptr *list1, gptr *list2, size_t nmemb, SVCOMPARE_t cmp)
3934 register gptr *b, *p, *q, *t, *p2;
3935 register gptr c, *last, *r;
3939 last = PINDEX(b, nmemb);
3940 sense = (cmp(aTHX_ *b, *(b+1)) > 0);
3941 for (p2 = list2; b < last; ) {
3942 /* We just started, or just reversed sense.
3943 ** Set t at end of pairs with the prevailing sense.
3945 for (p = b+2, t = p; ++p < last; t = ++p) {
3946 if ((cmp(aTHX_ *t, *p) > 0) != sense) break;
3949 /* Having laid out the playing field, look for long runs */
3951 p = r = b + (2 * PTHRESH);
3952 if (r >= t) p = r = t; /* too short to care about */
3954 while (((cmp(aTHX_ *(p-1), *p) > 0) == sense) &&
3957 /* b through r is a (long) run.
3958 ** Extend it as far as possible.
3961 while (((p += 2) < t) &&
3962 ((cmp(aTHX_ *(p-1), *p) > 0) == sense)) q = p;
3963 r = p = q + 2; /* no simple pairs, no after-run */
3966 if (q > b) { /* run of greater than 2 at b */
3969 /* pick up singleton, if possible */
3971 ((t + 1) == last) &&
3972 ((cmp(aTHX_ *(p-1), *p) > 0) == sense))
3973 savep = r = p = q = last;
3974 p2 = NEXT(p2) = p2 + (p - b);
3975 if (sense) while (b < --p) {
3982 while (q < p) { /* simple pairs */
3983 p2 = NEXT(p2) = p2 + 2;
3990 if (((b = p) == t) && ((t+1) == last)) {
4002 /* Overview of bmerge variables:
4004 ** list1 and list2 address the main and auxiliary arrays.
4005 ** They swap identities after each merge pass.
4006 ** Base points to the original list1, so we can tell if
4007 ** the pointers ended up where they belonged (or must be copied).
4009 ** When we are merging two lists, f1 and f2 are the next elements
4010 ** on the respective lists. l1 and l2 mark the end of the lists.
4011 ** tp2 is the current location in the merged list.
4013 ** p1 records where f1 started.
4014 ** After the merge, a new descriptor is built there.
4016 ** p2 is a ``parallel'' pointer in (what starts as) descriptor space.
4017 ** It is used to identify and delimit the runs.
4019 ** In the heat of determining where q, the greater of the f1/f2 elements,
4020 ** belongs in the other list, b, t and p, represent bottom, top and probe
4021 ** locations, respectively, in the other list.
4022 ** They make convenient temporary pointers in other places.
4026 S_qsortsv(pTHX_ gptr *list1, size_t nmemb, SVCOMPARE_t cmp)
4030 register gptr *f1, *f2, *t, *b, *p, *tp2, *l1, *l2, *q;
4031 gptr *aux, *list2, *p2, *last;
4035 if (nmemb <= 1) return; /* sorted trivially */
4036 New(799,list2,nmemb,gptr); /* allocate auxilliary array */
4038 dynprep(aTHX_ list1, list2, nmemb, cmp);
4039 last = PINDEX(list2, nmemb);
4040 while (NEXT(list2) != last) {
4041 /* More than one run remains. Do some merging to reduce runs. */
4043 for (tp2 = p2 = list2; p2 != last;) {
4044 /* The new first run begins where the old second list ended.
4045 ** Use the p2 ``parallel'' pointer to identify the end of the run.
4049 f2 = l1 = POTHER(t, list2, list1);
4050 if (t != last) t = NEXT(t);
4051 l2 = POTHER(t, list2, list1);
4053 while (f1 < l1 && f2 < l2) {
4054 /* If head 1 is larger than head 2, find ALL the elements
4055 ** in list 2 strictly less than head1, write them all,
4056 ** then head 1. Then compare the new heads, and repeat,
4057 ** until one or both lists are exhausted.
4059 ** In all comparisons (after establishing
4060 ** which head to merge) the item to merge
4061 ** (at pointer q) is the first operand of
4062 ** the comparison. When we want to know
4063 ** if ``q is strictly less than the other'',
4065 ** cmp(q, other) < 0
4066 ** because stability demands that we treat equality
4067 ** as high when q comes from l2, and as low when
4068 ** q was from l1. So we ask the question by doing
4069 ** cmp(q, other) <= sense
4070 ** and make sense == 0 when equality should look low,
4071 ** and -1 when equality should look high.
4075 if (cmp(aTHX_ *f1, *f2) <= 0) {
4076 q = f2; b = f1; t = l1;
4079 q = f1; b = f2; t = l2;
4086 ** Leave t at something strictly
4087 ** greater than q (or at the end of the list),
4088 ** and b at something strictly less than q.
4090 for (i = 1, run = 0 ;;) {
4091 if ((p = PINDEX(b, i)) >= t) {
4093 if (((p = PINDEX(t, -1)) > b) &&
4094 (cmp(aTHX_ *q, *p) <= sense))
4098 } else if (cmp(aTHX_ *q, *p) <= sense) {
4102 if (++run >= RTHRESH) i += i;
4106 /* q is known to follow b and must be inserted before t.
4107 ** Increment b, so the range of possibilities is [b,t).
4108 ** Round binary split down, to favor early appearance.
4109 ** Adjust b and t until q belongs just before t.
4114 p = PINDEX(b, (PNELEM(b, t) - 1) / 2);
4115 if (cmp(aTHX_ *q, *p) <= sense) {
4121 /* Copy all the strictly low elements */
4124 FROMTOUPTO(f2, tp2, t);
4127 FROMTOUPTO(f1, tp2, t);
4133 /* Run out remaining list */
4135 if (f2 < l2) FROMTOUPTO(f2, tp2, l2);
4136 } else FROMTOUPTO(f1, tp2, l1);
4137 p1 = NEXT(p1) = POTHER(tp2, list2, list1);
4142 last = PINDEX(list2, nmemb);
4144 if (base == list2) {
4145 last = PINDEX(list1, nmemb);
4146 FROMTOUPTO(list1, list2, last);
4161 sortcv(pTHXo_ SV *a, SV *b)
4163 I32 oldsaveix = PL_savestack_ix;
4164 I32 oldscopeix = PL_scopestack_ix;
4166 GvSV(PL_firstgv) = a;
4167 GvSV(PL_secondgv) = b;
4168 PL_stack_sp = PL_stack_base;
4171 if (PL_stack_sp != PL_stack_base + 1)
4172 Perl_croak(aTHX_ "Sort subroutine didn't return single value");
4173 if (!SvNIOKp(*PL_stack_sp))
4174 Perl_croak(aTHX_ "Sort subroutine didn't return a numeric value");
4175 result = SvIV(*PL_stack_sp);
4176 while (PL_scopestack_ix > oldscopeix) {
4179 leave_scope(oldsaveix);
4184 sortcv_stacked(pTHXo_ SV *a, SV *b)
4186 I32 oldsaveix = PL_savestack_ix;
4187 I32 oldscopeix = PL_scopestack_ix;
4192 av = (AV*)PL_curpad[0];
4194 av = GvAV(PL_defgv);
4197 if (AvMAX(av) < 1) {
4198 SV** ary = AvALLOC(av);
4199 if (AvARRAY(av) != ary) {
4200 AvMAX(av) += AvARRAY(av) - AvALLOC(av);
4201 SvPVX(av) = (char*)ary;
4203 if (AvMAX(av) < 1) {
4206 SvPVX(av) = (char*)ary;
4213 PL_stack_sp = PL_stack_base;
4216 if (PL_stack_sp != PL_stack_base + 1)
4217 Perl_croak(aTHX_ "Sort subroutine didn't return single value");
4218 if (!SvNIOKp(*PL_stack_sp))
4219 Perl_croak(aTHX_ "Sort subroutine didn't return a numeric value");
4220 result = SvIV(*PL_stack_sp);
4221 while (PL_scopestack_ix > oldscopeix) {
4224 leave_scope(oldsaveix);
4229 sortcv_xsub(pTHXo_ SV *a, SV *b)
4232 I32 oldsaveix = PL_savestack_ix;
4233 I32 oldscopeix = PL_scopestack_ix;
4235 CV *cv=(CV*)PL_sortcop;
4243 (void)(*CvXSUB(cv))(aTHXo_ cv);
4244 if (PL_stack_sp != PL_stack_base + 1)
4245 Perl_croak(aTHX_ "Sort subroutine didn't return single value");
4246 if (!SvNIOKp(*PL_stack_sp))
4247 Perl_croak(aTHX_ "Sort subroutine didn't return a numeric value");
4248 result = SvIV(*PL_stack_sp);
4249 while (PL_scopestack_ix > oldscopeix) {
4252 leave_scope(oldsaveix);
4258 sv_ncmp(pTHXo_ SV *a, SV *b)
4262 return nv1 < nv2 ? -1 : nv1 > nv2 ? 1 : 0;
4266 sv_i_ncmp(pTHXo_ SV *a, SV *b)
4270 return iv1 < iv2 ? -1 : iv1 > iv2 ? 1 : 0;
4272 #define tryCALL_AMAGICbin(left,right,meth,svp) STMT_START { \
4274 if (PL_amagic_generation) { \
4275 if (SvAMAGIC(left)||SvAMAGIC(right))\
4276 *svp = amagic_call(left, \
4284 amagic_ncmp(pTHXo_ register SV *a, register SV *b)
4287 tryCALL_AMAGICbin(a,b,ncmp,&tmpsv);
4292 I32 i = SvIVX(tmpsv);
4302 return sv_ncmp(aTHXo_ a, b);
4306 amagic_i_ncmp(pTHXo_ register SV *a, register SV *b)
4309 tryCALL_AMAGICbin(a,b,ncmp,&tmpsv);
4314 I32 i = SvIVX(tmpsv);
4324 return sv_i_ncmp(aTHXo_ a, b);
4328 amagic_cmp(pTHXo_ register SV *str1, register SV *str2)
4331 tryCALL_AMAGICbin(str1,str2,scmp,&tmpsv);
4336 I32 i = SvIVX(tmpsv);
4346 return sv_cmp(str1, str2);
4350 amagic_cmp_locale(pTHXo_ register SV *str1, register SV *str2)
4353 tryCALL_AMAGICbin(str1,str2,scmp,&tmpsv);
4358 I32 i = SvIVX(tmpsv);
4368 return sv_cmp_locale(str1, str2);
4372 run_user_filter(pTHXo_ int idx, SV *buf_sv, int maxlen)
4374 SV *datasv = FILTER_DATA(idx);
4375 int filter_has_file = IoLINES(datasv);
4376 GV *filter_child_proc = (GV *)IoFMT_GV(datasv);
4377 SV *filter_state = (SV *)IoTOP_GV(datasv);
4378 SV *filter_sub = (SV *)IoBOTTOM_GV(datasv);
4381 /* I was having segfault trouble under Linux 2.2.5 after a
4382 parse error occured. (Had to hack around it with a test
4383 for PL_error_count == 0.) Solaris doesn't segfault --
4384 not sure where the trouble is yet. XXX */
4386 if (filter_has_file) {
4387 len = FILTER_READ(idx+1, buf_sv, maxlen);
4390 if (filter_sub && len >= 0) {
4401 PUSHs(sv_2mortal(newSViv(maxlen)));
4403 PUSHs(filter_state);
4406 count = call_sv(filter_sub, G_SCALAR);
4422 IoLINES(datasv) = 0;
4423 if (filter_child_proc) {
4424 SvREFCNT_dec(filter_child_proc);
4425 IoFMT_GV(datasv) = Nullgv;
4428 SvREFCNT_dec(filter_state);
4429 IoTOP_GV(datasv) = Nullgv;
4432 SvREFCNT_dec(filter_sub);
4433 IoBOTTOM_GV(datasv) = Nullgv;
4435 filter_del(run_user_filter);
4444 sv_cmp_locale_static(pTHXo_ register SV *str1, register SV *str2)
4446 return sv_cmp_locale(str1, str2);
4450 sv_cmp_static(pTHXo_ register SV *str1, register SV *str2)
4452 return sv_cmp(str1, str2);
4455 #endif /* PERL_OBJECT */