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 /* prevent recompiling under /o and ithreads. */
93 #if defined(USE_ITHREADS) || defined(USE_THREADS)
94 if (pm->op_pmflags & PMf_KEEP && PM_GETRE(pm))
99 SV *sv = SvRV(tmpstr);
101 mg = mg_find(sv, PERL_MAGIC_qr);
104 regexp *re = (regexp *)mg->mg_obj;
105 ReREFCNT_dec(PM_GETRE(pm));
106 PM_SETRE(pm, ReREFCNT_inc(re));
109 t = SvPV(tmpstr, len);
111 /* Check against the last compiled regexp. */
112 if (!PM_GETRE(pm) || !PM_GETRE(pm)->precomp ||
113 PM_GETRE(pm)->prelen != len ||
114 memNE(PM_GETRE(pm)->precomp, t, len))
117 ReREFCNT_dec(PM_GETRE(pm));
118 PM_SETRE(pm, Null(REGEXP*)); /* crucial if regcomp aborts */
120 if (PL_op->op_flags & OPf_SPECIAL)
121 PL_reginterp_cnt = I32_MAX; /* Mark as safe. */
123 pm->op_pmflags = pm->op_pmpermflags; /* reset case sensitivity */
124 PM_SETRE(pm, CALLREGCOMP(aTHX_ t, t + len, pm));
125 PL_reginterp_cnt = 0; /* XXXX Be extra paranoid - needed
126 inside tie/overload accessors. */
130 #ifndef INCOMPLETE_TAINTS
133 pm->op_pmdynflags |= PMdf_TAINTED;
135 pm->op_pmdynflags &= ~PMdf_TAINTED;
139 if (!PM_GETRE(pm)->prelen && PL_curpm)
141 else if (strEQ("\\s+", PM_GETRE(pm)->precomp))
142 pm->op_pmflags |= PMf_WHITE;
144 pm->op_pmflags &= ~PMf_WHITE;
146 /* XXX runtime compiled output needs to move to the pad */
147 if (pm->op_pmflags & PMf_KEEP) {
148 pm->op_private &= ~OPpRUNTIME; /* no point compiling again */
149 #if !defined(USE_ITHREADS) && !defined(USE_THREADS)
150 /* XXX can't change the optree at runtime either */
151 cLOGOP->op_first->op_next = PL_op->op_next;
160 register PMOP *pm = (PMOP*) cLOGOP->op_other;
161 register PERL_CONTEXT *cx = &cxstack[cxstack_ix];
162 register SV *dstr = cx->sb_dstr;
163 register char *s = cx->sb_s;
164 register char *m = cx->sb_m;
165 char *orig = cx->sb_orig;
166 register REGEXP *rx = cx->sb_rx;
168 rxres_restore(&cx->sb_rxres, rx);
170 if (cx->sb_iters++) {
171 if (cx->sb_iters > cx->sb_maxiters)
172 DIE(aTHX_ "Substitution loop");
174 if (!(cx->sb_rxtainted & 2) && SvTAINTED(TOPs))
175 cx->sb_rxtainted |= 2;
176 sv_catsv(dstr, POPs);
179 if (cx->sb_once || !CALLREGEXEC(aTHX_ rx, s, cx->sb_strend, orig,
180 s == m, cx->sb_targ, NULL,
181 ((cx->sb_rflags & REXEC_COPY_STR)
182 ? (REXEC_IGNOREPOS|REXEC_NOT_FIRST)
183 : (REXEC_COPY_STR|REXEC_IGNOREPOS|REXEC_NOT_FIRST))))
185 SV *targ = cx->sb_targ;
187 sv_catpvn(dstr, s, cx->sb_strend - s);
188 cx->sb_rxtainted |= RX_MATCH_TAINTED(rx);
190 (void)SvOOK_off(targ);
191 Safefree(SvPVX(targ));
192 SvPVX(targ) = SvPVX(dstr);
193 SvCUR_set(targ, SvCUR(dstr));
194 SvLEN_set(targ, SvLEN(dstr));
200 TAINT_IF(cx->sb_rxtainted & 1);
201 PUSHs(sv_2mortal(newSViv((I32)cx->sb_iters - 1)));
203 (void)SvPOK_only_UTF8(targ);
204 TAINT_IF(cx->sb_rxtainted);
208 LEAVE_SCOPE(cx->sb_oldsave);
210 RETURNOP(pm->op_next);
213 if (RX_MATCH_COPIED(rx) && rx->subbeg != orig) {
216 cx->sb_orig = orig = rx->subbeg;
218 cx->sb_strend = s + (cx->sb_strend - m);
220 cx->sb_m = m = rx->startp[0] + orig;
222 sv_catpvn(dstr, s, m-s);
223 cx->sb_s = rx->endp[0] + orig;
224 { /* Update the pos() information. */
225 SV *sv = cx->sb_targ;
228 if (SvTYPE(sv) < SVt_PVMG)
229 (void)SvUPGRADE(sv, SVt_PVMG);
230 if (!(mg = mg_find(sv, PERL_MAGIC_regex_global))) {
231 sv_magic(sv, Nullsv, PERL_MAGIC_regex_global, Nullch, 0);
232 mg = mg_find(sv, PERL_MAGIC_regex_global);
239 cx->sb_rxtainted |= RX_MATCH_TAINTED(rx);
240 rxres_save(&cx->sb_rxres, rx);
241 RETURNOP(pm->op_pmreplstart);
245 Perl_rxres_save(pTHX_ void **rsp, REGEXP *rx)
250 if (!p || p[1] < rx->nparens) {
251 i = 6 + rx->nparens * 2;
259 *p++ = PTR2UV(RX_MATCH_COPIED(rx) ? rx->subbeg : Nullch);
260 RX_MATCH_COPIED_off(rx);
264 *p++ = PTR2UV(rx->subbeg);
265 *p++ = (UV)rx->sublen;
266 for (i = 0; i <= rx->nparens; ++i) {
267 *p++ = (UV)rx->startp[i];
268 *p++ = (UV)rx->endp[i];
273 Perl_rxres_restore(pTHX_ void **rsp, REGEXP *rx)
278 if (RX_MATCH_COPIED(rx))
279 Safefree(rx->subbeg);
280 RX_MATCH_COPIED_set(rx, *p);
285 rx->subbeg = INT2PTR(char*,*p++);
286 rx->sublen = (I32)(*p++);
287 for (i = 0; i <= rx->nparens; ++i) {
288 rx->startp[i] = (I32)(*p++);
289 rx->endp[i] = (I32)(*p++);
294 Perl_rxres_free(pTHX_ void **rsp)
299 Safefree(INT2PTR(char*,*p));
307 dSP; dMARK; dORIGMARK;
308 register SV *tmpForm = *++MARK;
315 register SV *sv = Nullsv;
320 bool chopspace = (strchr(PL_chopset, ' ') != Nullch);
321 char *chophere = Nullch;
322 char *linemark = Nullch;
324 bool gotsome = FALSE;
326 STRLEN fudge = SvCUR(tmpForm) * (IN_BYTES ? 1 : 3) + 1;
327 bool item_is_utf = FALSE;
329 if (!SvMAGICAL(tmpForm) || !SvCOMPILED(tmpForm)) {
330 if (SvREADONLY(tmpForm)) {
331 SvREADONLY_off(tmpForm);
332 doparseform(tmpForm);
333 SvREADONLY_on(tmpForm);
336 doparseform(tmpForm);
339 SvPV_force(PL_formtarget, len);
340 t = SvGROW(PL_formtarget, len + fudge + 1); /* XXX SvCUR bad */
342 f = SvPV(tmpForm, len);
343 /* need to jump to the next word */
344 s = f + len + WORD_ALIGN - SvCUR(tmpForm) % WORD_ALIGN;
353 case FF_LITERAL: arg = fpc[1]; name = "LITERAL"; break;
354 case FF_BLANK: arg = fpc[1]; name = "BLANK"; break;
355 case FF_SKIP: arg = fpc[1]; name = "SKIP"; break;
356 case FF_FETCH: arg = fpc[1]; name = "FETCH"; break;
357 case FF_DECIMAL: arg = fpc[1]; name = "DECIMAL"; break;
359 case FF_CHECKNL: name = "CHECKNL"; break;
360 case FF_CHECKCHOP: name = "CHECKCHOP"; break;
361 case FF_SPACE: name = "SPACE"; break;
362 case FF_HALFSPACE: name = "HALFSPACE"; break;
363 case FF_ITEM: name = "ITEM"; break;
364 case FF_CHOP: name = "CHOP"; break;
365 case FF_LINEGLOB: name = "LINEGLOB"; break;
366 case FF_NEWLINE: name = "NEWLINE"; break;
367 case FF_MORE: name = "MORE"; break;
368 case FF_LINEMARK: name = "LINEMARK"; break;
369 case FF_END: name = "END"; break;
370 case FF_0DECIMAL: name = "0DECIMAL"; break;
373 PerlIO_printf(Perl_debug_log, "%-16s%ld\n", name, (long) arg);
375 PerlIO_printf(Perl_debug_log, "%-16s\n", name);
403 if (ckWARN(WARN_SYNTAX))
404 Perl_warner(aTHX_ WARN_SYNTAX, "Not enough format arguments");
409 item = s = SvPV(sv, len);
412 itemsize = sv_len_utf8(sv);
413 if (itemsize != len) {
415 if (itemsize > fieldsize) {
416 itemsize = fieldsize;
417 itembytes = itemsize;
418 sv_pos_u2b(sv, &itembytes, 0);
422 send = chophere = s + itembytes;
432 sv_pos_b2u(sv, &itemsize);
437 if (itemsize > fieldsize)
438 itemsize = fieldsize;
439 send = chophere = s + itemsize;
451 item = s = SvPV(sv, len);
454 itemsize = sv_len_utf8(sv);
455 if (itemsize != len) {
457 if (itemsize <= fieldsize) {
458 send = chophere = s + itemsize;
469 itemsize = fieldsize;
470 itembytes = itemsize;
471 sv_pos_u2b(sv, &itembytes, 0);
472 send = chophere = s + itembytes;
473 while (s < send || (s == send && isSPACE(*s))) {
483 if (strchr(PL_chopset, *s))
488 itemsize = chophere - item;
489 sv_pos_b2u(sv, &itemsize);
496 if (itemsize <= fieldsize) {
497 send = chophere = s + itemsize;
508 itemsize = fieldsize;
509 send = chophere = s + itemsize;
510 while (s < send || (s == send && isSPACE(*s))) {
520 if (strchr(PL_chopset, *s))
525 itemsize = chophere - item;
530 arg = fieldsize - itemsize;
539 arg = fieldsize - itemsize;
553 if (UTF8_IS_CONTINUED(*s)) {
554 STRLEN skip = UTF8SKIP(s);
571 if ( !((*t++ = *s++) & ~31) )
579 int ch = *t++ = *s++;
582 if ( !((*t++ = *s++) & ~31) )
591 while (*s && isSPACE(*s))
598 item = s = SvPV(sv, len);
600 item_is_utf = FALSE; /* XXX is this correct? */
612 SvCUR_set(PL_formtarget, t - SvPVX(PL_formtarget));
613 sv_catpvn(PL_formtarget, item, itemsize);
614 SvGROW(PL_formtarget, SvCUR(PL_formtarget) + fudge + 1);
615 t = SvPVX(PL_formtarget) + SvCUR(PL_formtarget);
620 /* If the field is marked with ^ and the value is undefined,
623 if ((arg & 512) && !SvOK(sv)) {
631 /* Formats aren't yet marked for locales, so assume "yes". */
633 STORE_NUMERIC_STANDARD_SET_LOCAL();
634 #if defined(USE_LONG_DOUBLE)
636 sprintf(t, "%#*.*" PERL_PRIfldbl,
637 (int) fieldsize, (int) arg & 255, value);
639 sprintf(t, "%*.0" PERL_PRIfldbl, (int) fieldsize, value);
644 (int) fieldsize, (int) arg & 255, value);
647 (int) fieldsize, value);
650 RESTORE_NUMERIC_STANDARD();
656 /* If the field is marked with ^ and the value is undefined,
659 if ((arg & 512) && !SvOK(sv)) {
667 /* Formats aren't yet marked for locales, so assume "yes". */
669 STORE_NUMERIC_STANDARD_SET_LOCAL();
670 #if defined(USE_LONG_DOUBLE)
672 sprintf(t, "%#0*.*" PERL_PRIfldbl,
673 (int) fieldsize, (int) arg & 255, value);
674 /* is this legal? I don't have long doubles */
676 sprintf(t, "%0*.0" PERL_PRIfldbl, (int) fieldsize, value);
680 sprintf(t, "%#0*.*f",
681 (int) fieldsize, (int) arg & 255, value);
684 (int) fieldsize, value);
687 RESTORE_NUMERIC_STANDARD();
694 while (t-- > linemark && *t == ' ') ;
702 if (arg) { /* repeat until fields exhausted? */
704 SvCUR_set(PL_formtarget, t - SvPVX(PL_formtarget));
705 lines += FmLINES(PL_formtarget);
708 if (strnEQ(linemark, linemark - arg, arg))
709 DIE(aTHX_ "Runaway format");
711 FmLINES(PL_formtarget) = lines;
713 RETURNOP(cLISTOP->op_first);
726 while (*s && isSPACE(*s) && s < send)
730 arg = fieldsize - itemsize;
737 if (strnEQ(s," ",3)) {
738 while (s > SvPVX(PL_formtarget) && isSPACE(s[-1]))
749 SvCUR_set(PL_formtarget, t - SvPVX(PL_formtarget));
750 FmLINES(PL_formtarget) += lines;
762 if (PL_stack_base + *PL_markstack_ptr == SP) {
764 if (GIMME_V == G_SCALAR)
765 XPUSHs(sv_2mortal(newSViv(0)));
766 RETURNOP(PL_op->op_next->op_next);
768 PL_stack_sp = PL_stack_base + *PL_markstack_ptr + 1;
769 pp_pushmark(); /* push dst */
770 pp_pushmark(); /* push src */
771 ENTER; /* enter outer scope */
774 /* SAVE_DEFSV does *not* suffice here for USE_THREADS */
776 ENTER; /* enter inner scope */
779 src = PL_stack_base[*PL_markstack_ptr];
784 if (PL_op->op_type == OP_MAPSTART)
785 pp_pushmark(); /* push top */
786 return ((LOGOP*)PL_op->op_next)->op_other;
791 DIE(aTHX_ "panic: mapstart"); /* uses grepstart */
797 I32 items = (SP - PL_stack_base) - *PL_markstack_ptr; /* how many new items */
803 /* first, move source pointer to the next item in the source list */
804 ++PL_markstack_ptr[-1];
806 /* if there are new items, push them into the destination list */
808 /* might need to make room back there first */
809 if (items > PL_markstack_ptr[-1] - PL_markstack_ptr[-2]) {
810 /* XXX this implementation is very pessimal because the stack
811 * is repeatedly extended for every set of items. Is possible
812 * to do this without any stack extension or copying at all
813 * by maintaining a separate list over which the map iterates
814 * (like foreach does). --gsar */
816 /* everything in the stack after the destination list moves
817 * towards the end the stack by the amount of room needed */
818 shift = items - (PL_markstack_ptr[-1] - PL_markstack_ptr[-2]);
820 /* items to shift up (accounting for the moved source pointer) */
821 count = (SP - PL_stack_base) - (PL_markstack_ptr[-1] - 1);
823 /* This optimization is by Ben Tilly and it does
824 * things differently from what Sarathy (gsar)
825 * is describing. The downside of this optimization is
826 * that leaves "holes" (uninitialized and hopefully unused areas)
827 * to the Perl stack, but on the other hand this
828 * shouldn't be a problem. If Sarathy's idea gets
829 * implemented, this optimization should become
830 * irrelevant. --jhi */
832 shift = count; /* Avoid shifting too often --Ben Tilly */
837 PL_markstack_ptr[-1] += shift;
838 *PL_markstack_ptr += shift;
842 /* copy the new items down to the destination list */
843 dst = PL_stack_base + (PL_markstack_ptr[-2] += items) - 1;
845 *dst-- = SvTEMP(TOPs) ? POPs : sv_mortalcopy(POPs);
847 LEAVE; /* exit inner scope */
850 if (PL_markstack_ptr[-1] > *PL_markstack_ptr) {
853 (void)POPMARK; /* pop top */
854 LEAVE; /* exit outer scope */
855 (void)POPMARK; /* pop src */
856 items = --*PL_markstack_ptr - PL_markstack_ptr[-1];
857 (void)POPMARK; /* pop dst */
858 SP = PL_stack_base + POPMARK; /* pop original mark */
859 if (gimme == G_SCALAR) {
863 else if (gimme == G_ARRAY)
870 ENTER; /* enter inner scope */
873 /* set $_ to the new source item */
874 src = PL_stack_base[PL_markstack_ptr[-1]];
878 RETURNOP(cLOGOP->op_other);
884 dSP; dMARK; dORIGMARK;
886 SV **myorigmark = ORIGMARK;
892 OP* nextop = PL_op->op_next;
894 bool hasargs = FALSE;
897 if (gimme != G_ARRAY) {
903 SAVEVPTR(PL_sortcop);
904 if (PL_op->op_flags & OPf_STACKED) {
905 if (PL_op->op_flags & OPf_SPECIAL) {
906 OP *kid = cLISTOP->op_first->op_sibling; /* pass pushmark */
907 kid = kUNOP->op_first; /* pass rv2gv */
908 kid = kUNOP->op_first; /* pass leave */
909 PL_sortcop = kid->op_next;
910 stash = CopSTASH(PL_curcop);
913 cv = sv_2cv(*++MARK, &stash, &gv, 0);
914 if (cv && SvPOK(cv)) {
916 char *proto = SvPV((SV*)cv, n_a);
917 if (proto && strEQ(proto, "$$")) {
921 if (!(cv && CvROOT(cv))) {
922 if (cv && CvXSUB(cv)) {
926 SV *tmpstr = sv_newmortal();
927 gv_efullname3(tmpstr, gv, Nullch);
928 DIE(aTHX_ "Undefined sort subroutine \"%s\" called",
932 DIE(aTHX_ "Undefined subroutine in sort");
937 PL_sortcop = (OP*)cv;
939 PL_sortcop = CvSTART(cv);
940 SAVEVPTR(CvROOT(cv)->op_ppaddr);
941 CvROOT(cv)->op_ppaddr = PL_ppaddr[OP_NULL];
944 PL_curpad = AvARRAY((AV*)AvARRAY(CvPADLIST(cv))[1]);
950 stash = CopSTASH(PL_curcop);
954 while (MARK < SP) { /* This may or may not shift down one here. */
956 if ((*up = *++MARK)) { /* Weed out nulls. */
958 if (!PL_sortcop && !SvPOK(*up)) {
963 (void)sv_2pv(*up, &n_a);
968 max = --up - myorigmark;
973 bool oldcatch = CATCH_GET;
979 PUSHSTACKi(PERLSI_SORT);
980 if (!hasargs && !is_xsub) {
981 if (PL_sortstash != stash || !PL_firstgv || !PL_secondgv) {
982 SAVESPTR(PL_firstgv);
983 SAVESPTR(PL_secondgv);
984 PL_firstgv = gv_fetchpv("a", TRUE, SVt_PV);
985 PL_secondgv = gv_fetchpv("b", TRUE, SVt_PV);
986 PL_sortstash = stash;
989 sv_lock((SV *)PL_firstgv);
990 sv_lock((SV *)PL_secondgv);
992 SAVESPTR(GvSV(PL_firstgv));
993 SAVESPTR(GvSV(PL_secondgv));
996 PUSHBLOCK(cx, CXt_NULL, PL_stack_base);
997 if (!(PL_op->op_flags & OPf_SPECIAL)) {
998 cx->cx_type = CXt_SUB;
999 cx->blk_gimme = G_SCALAR;
1002 (void)SvREFCNT_inc(cv); /* in preparation for POPSUB */
1004 PL_sortcxix = cxstack_ix;
1006 if (hasargs && !is_xsub) {
1007 /* This is mostly copied from pp_entersub */
1008 AV *av = (AV*)PL_curpad[0];
1011 cx->blk_sub.savearray = GvAV(PL_defgv);
1012 GvAV(PL_defgv) = (AV*)SvREFCNT_inc(av);
1013 #endif /* USE_THREADS */
1014 cx->blk_sub.oldcurpad = PL_curpad;
1015 cx->blk_sub.argarray = av;
1017 qsortsv((myorigmark+1), max,
1018 is_xsub ? sortcv_xsub : hasargs ? sortcv_stacked : sortcv);
1020 POPBLOCK(cx,PL_curpm);
1021 PL_stack_sp = newsp;
1023 CATCH_SET(oldcatch);
1028 MEXTEND(SP, 20); /* Can't afford stack realloc on signal. */
1029 qsortsv(ORIGMARK+1, max,
1030 (PL_op->op_private & OPpSORT_NUMERIC)
1031 ? ( (PL_op->op_private & OPpSORT_INTEGER)
1032 ? ( overloading ? amagic_i_ncmp : sv_i_ncmp)
1033 : ( overloading ? amagic_ncmp : sv_ncmp))
1034 : ( IN_LOCALE_RUNTIME
1037 : sv_cmp_locale_static)
1038 : ( overloading ? amagic_cmp : sv_cmp_static)));
1039 if (PL_op->op_private & OPpSORT_REVERSE) {
1040 SV **p = ORIGMARK+1;
1041 SV **q = ORIGMARK+max;
1051 PL_stack_sp = ORIGMARK + max;
1059 if (GIMME == G_ARRAY)
1061 if (SvTRUEx(PAD_SV(PL_op->op_targ)))
1062 return cLOGOP->op_other;
1071 if (GIMME == G_ARRAY) {
1072 RETURNOP(((LOGOP*)cUNOP->op_first)->op_other);
1076 SV *targ = PAD_SV(PL_op->op_targ);
1079 if (PL_op->op_private & OPpFLIP_LINENUM) {
1081 flip = PL_last_in_gv
1082 && (gp_io = GvIO(PL_last_in_gv))
1083 && SvIV(sv) == (IV)IoLINES(gp_io);
1088 sv_setiv(PAD_SV(cUNOP->op_first->op_targ), 1);
1089 if (PL_op->op_flags & OPf_SPECIAL) {
1097 RETURNOP(((LOGOP*)cUNOP->op_first)->op_other);
1110 if (GIMME == G_ARRAY) {
1116 if (SvGMAGICAL(left))
1118 if (SvGMAGICAL(right))
1121 if (SvNIOKp(left) || !SvPOKp(left) ||
1122 SvNIOKp(right) || !SvPOKp(right) ||
1123 (looks_like_number(left) && *SvPVX(left) != '0' &&
1124 looks_like_number(right) && *SvPVX(right) != '0'))
1126 if (SvNV(left) < IV_MIN || SvNV(right) > IV_MAX)
1127 DIE(aTHX_ "Range iterator outside integer range");
1138 sv = sv_2mortal(newSViv(i++));
1143 SV *final = sv_mortalcopy(right);
1145 char *tmps = SvPV(final, len);
1147 sv = sv_mortalcopy(left);
1149 while (!SvNIOKp(sv) && SvCUR(sv) <= len) {
1151 if (strEQ(SvPVX(sv),tmps))
1153 sv = sv_2mortal(newSVsv(sv));
1160 SV *targ = PAD_SV(cUNOP->op_first->op_targ);
1162 if ((PL_op->op_private & OPpFLIP_LINENUM)
1163 ? (GvIO(PL_last_in_gv)
1164 && SvIV(sv) == (IV)IoLINES(GvIOp(PL_last_in_gv)))
1166 sv_setiv(PAD_SV(((UNOP*)cUNOP->op_first)->op_first->op_targ), 0);
1167 sv_catpv(targ, "E0");
1178 S_dopoptolabel(pTHX_ char *label)
1181 register PERL_CONTEXT *cx;
1183 for (i = cxstack_ix; i >= 0; i--) {
1185 switch (CxTYPE(cx)) {
1187 if (ckWARN(WARN_EXITING))
1188 Perl_warner(aTHX_ WARN_EXITING, "Exiting substitution via %s",
1189 PL_op_name[PL_op->op_type]);
1192 if (ckWARN(WARN_EXITING))
1193 Perl_warner(aTHX_ WARN_EXITING, "Exiting subroutine via %s",
1194 PL_op_name[PL_op->op_type]);
1197 if (ckWARN(WARN_EXITING))
1198 Perl_warner(aTHX_ WARN_EXITING, "Exiting format via %s",
1199 PL_op_name[PL_op->op_type]);
1202 if (ckWARN(WARN_EXITING))
1203 Perl_warner(aTHX_ WARN_EXITING, "Exiting eval via %s",
1204 PL_op_name[PL_op->op_type]);
1207 if (ckWARN(WARN_EXITING))
1208 Perl_warner(aTHX_ WARN_EXITING, "Exiting pseudo-block via %s",
1209 PL_op_name[PL_op->op_type]);
1212 if (!cx->blk_loop.label ||
1213 strNE(label, cx->blk_loop.label) ) {
1214 DEBUG_l(Perl_deb(aTHX_ "(Skipping label #%ld %s)\n",
1215 (long)i, cx->blk_loop.label));
1218 DEBUG_l( Perl_deb(aTHX_ "(Found label #%ld %s)\n", (long)i, label));
1226 Perl_dowantarray(pTHX)
1228 I32 gimme = block_gimme();
1229 return (gimme == G_VOID) ? G_SCALAR : gimme;
1233 Perl_block_gimme(pTHX)
1237 cxix = dopoptosub(cxstack_ix);
1241 switch (cxstack[cxix].blk_gimme) {
1249 Perl_croak(aTHX_ "panic: bad gimme: %d\n", cxstack[cxix].blk_gimme);
1256 Perl_is_lvalue_sub(pTHX)
1260 cxix = dopoptosub(cxstack_ix);
1261 assert(cxix >= 0); /* We should only be called from inside subs */
1263 if (cxstack[cxix].blk_sub.lval && CvLVALUE(cxstack[cxix].blk_sub.cv))
1264 return cxstack[cxix].blk_sub.lval;
1270 S_dopoptosub(pTHX_ I32 startingblock)
1272 return dopoptosub_at(cxstack, startingblock);
1276 S_dopoptosub_at(pTHX_ PERL_CONTEXT *cxstk, I32 startingblock)
1279 register PERL_CONTEXT *cx;
1280 for (i = startingblock; i >= 0; i--) {
1282 switch (CxTYPE(cx)) {
1288 DEBUG_l( Perl_deb(aTHX_ "(Found sub #%ld)\n", (long)i));
1296 S_dopoptoeval(pTHX_ I32 startingblock)
1299 register PERL_CONTEXT *cx;
1300 for (i = startingblock; i >= 0; i--) {
1302 switch (CxTYPE(cx)) {
1306 DEBUG_l( Perl_deb(aTHX_ "(Found eval #%ld)\n", (long)i));
1314 S_dopoptoloop(pTHX_ I32 startingblock)
1317 register PERL_CONTEXT *cx;
1318 for (i = startingblock; i >= 0; i--) {
1320 switch (CxTYPE(cx)) {
1322 if (ckWARN(WARN_EXITING))
1323 Perl_warner(aTHX_ WARN_EXITING, "Exiting substitution via %s",
1324 PL_op_name[PL_op->op_type]);
1327 if (ckWARN(WARN_EXITING))
1328 Perl_warner(aTHX_ WARN_EXITING, "Exiting subroutine via %s",
1329 PL_op_name[PL_op->op_type]);
1332 if (ckWARN(WARN_EXITING))
1333 Perl_warner(aTHX_ WARN_EXITING, "Exiting format via %s",
1334 PL_op_name[PL_op->op_type]);
1337 if (ckWARN(WARN_EXITING))
1338 Perl_warner(aTHX_ WARN_EXITING, "Exiting eval via %s",
1339 PL_op_name[PL_op->op_type]);
1342 if (ckWARN(WARN_EXITING))
1343 Perl_warner(aTHX_ WARN_EXITING, "Exiting pseudo-block via %s",
1344 PL_op_name[PL_op->op_type]);
1347 DEBUG_l( Perl_deb(aTHX_ "(Found loop #%ld)\n", (long)i));
1355 Perl_dounwind(pTHX_ I32 cxix)
1357 register PERL_CONTEXT *cx;
1360 while (cxstack_ix > cxix) {
1362 cx = &cxstack[cxstack_ix];
1363 DEBUG_l(PerlIO_printf(Perl_debug_log, "Unwinding block %ld, type %s\n",
1364 (long) cxstack_ix, PL_block_type[CxTYPE(cx)]));
1365 /* Note: we don't need to restore the base context info till the end. */
1366 switch (CxTYPE(cx)) {
1369 continue; /* not break */
1391 Perl_qerror(pTHX_ SV *err)
1394 sv_catsv(ERRSV, err);
1396 sv_catsv(PL_errors, err);
1398 Perl_warn(aTHX_ "%"SVf, err);
1403 Perl_die_where(pTHX_ char *message, STRLEN msglen)
1408 register PERL_CONTEXT *cx;
1413 if (PL_in_eval & EVAL_KEEPERR) {
1414 static char prefix[] = "\t(in cleanup) ";
1419 else if (SvCUR(err) >= sizeof(prefix)+msglen-1) {
1422 if (*e != *message || strNE(e,message))
1426 SvGROW(err, SvCUR(err)+sizeof(prefix)+msglen);
1427 sv_catpvn(err, prefix, sizeof(prefix)-1);
1428 sv_catpvn(err, message, msglen);
1429 if (ckWARN(WARN_MISC)) {
1430 STRLEN start = SvCUR(err)-msglen-sizeof(prefix)+1;
1431 Perl_warner(aTHX_ WARN_MISC, SvPVX(err)+start);
1436 sv_setpvn(ERRSV, message, msglen);
1440 message = SvPVx(ERRSV, msglen);
1442 while ((cxix = dopoptoeval(cxstack_ix)) < 0
1443 && PL_curstackinfo->si_prev)
1452 if (cxix < cxstack_ix)
1455 POPBLOCK(cx,PL_curpm);
1456 if (CxTYPE(cx) != CXt_EVAL) {
1457 PerlIO_write(Perl_error_log, "panic: die ", 11);
1458 PerlIO_write(Perl_error_log, message, msglen);
1463 if (gimme == G_SCALAR)
1464 *++newsp = &PL_sv_undef;
1465 PL_stack_sp = newsp;
1469 /* LEAVE could clobber PL_curcop (see save_re_context())
1470 * XXX it might be better to find a way to avoid messing with
1471 * PL_curcop in save_re_context() instead, but this is a more
1472 * minimal fix --GSAR */
1473 PL_curcop = cx->blk_oldcop;
1475 if (optype == OP_REQUIRE) {
1476 char* msg = SvPVx(ERRSV, n_a);
1477 DIE(aTHX_ "%sCompilation failed in require",
1478 *msg ? msg : "Unknown error\n");
1480 return pop_return();
1484 message = SvPVx(ERRSV, msglen);
1487 /* SFIO can really mess with your errno */
1490 PerlIO *serr = Perl_error_log;
1492 PerlIO_write(serr, message, msglen);
1493 (void)PerlIO_flush(serr);
1506 if (SvTRUE(left) != SvTRUE(right))
1518 RETURNOP(cLOGOP->op_other);
1527 RETURNOP(cLOGOP->op_other);
1533 register I32 cxix = dopoptosub(cxstack_ix);
1534 register PERL_CONTEXT *cx;
1535 register PERL_CONTEXT *ccstack = cxstack;
1536 PERL_SI *top_si = PL_curstackinfo;
1547 /* we may be in a higher stacklevel, so dig down deeper */
1548 while (cxix < 0 && top_si->si_type != PERLSI_MAIN) {
1549 top_si = top_si->si_prev;
1550 ccstack = top_si->si_cxstack;
1551 cxix = dopoptosub_at(ccstack, top_si->si_cxix);
1554 if (GIMME != G_ARRAY) {
1560 if (PL_DBsub && cxix >= 0 &&
1561 ccstack[cxix].blk_sub.cv == GvCV(PL_DBsub))
1565 cxix = dopoptosub_at(ccstack, cxix - 1);
1568 cx = &ccstack[cxix];
1569 if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
1570 dbcxix = dopoptosub_at(ccstack, cxix - 1);
1571 /* We expect that ccstack[dbcxix] is CXt_SUB, anyway, the
1572 field below is defined for any cx. */
1573 if (PL_DBsub && dbcxix >= 0 && ccstack[dbcxix].blk_sub.cv == GvCV(PL_DBsub))
1574 cx = &ccstack[dbcxix];
1577 stashname = CopSTASHPV(cx->blk_oldcop);
1578 if (GIMME != G_ARRAY) {
1581 PUSHs(&PL_sv_undef);
1584 sv_setpv(TARG, stashname);
1593 PUSHs(&PL_sv_undef);
1595 PUSHs(sv_2mortal(newSVpv(stashname, 0)));
1596 PUSHs(sv_2mortal(newSVpv(CopFILE(cx->blk_oldcop), 0)));
1597 PUSHs(sv_2mortal(newSViv((I32)CopLINE(cx->blk_oldcop))));
1600 if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
1601 /* So is ccstack[dbcxix]. */
1603 gv_efullname3(sv, CvGV(ccstack[cxix].blk_sub.cv), Nullch);
1604 PUSHs(sv_2mortal(sv));
1605 PUSHs(sv_2mortal(newSViv((I32)cx->blk_sub.hasargs)));
1608 PUSHs(sv_2mortal(newSVpvn("(eval)",6)));
1609 PUSHs(sv_2mortal(newSViv(0)));
1611 gimme = (I32)cx->blk_gimme;
1612 if (gimme == G_VOID)
1613 PUSHs(&PL_sv_undef);
1615 PUSHs(sv_2mortal(newSViv(gimme & G_ARRAY)));
1616 if (CxTYPE(cx) == CXt_EVAL) {
1618 if (cx->blk_eval.old_op_type == OP_ENTEREVAL) {
1619 PUSHs(cx->blk_eval.cur_text);
1623 else if (cx->blk_eval.old_namesv) {
1624 PUSHs(sv_2mortal(newSVsv(cx->blk_eval.old_namesv)));
1627 /* eval BLOCK (try blocks have old_namesv == 0) */
1629 PUSHs(&PL_sv_undef);
1630 PUSHs(&PL_sv_undef);
1634 PUSHs(&PL_sv_undef);
1635 PUSHs(&PL_sv_undef);
1637 if (CxTYPE(cx) == CXt_SUB && cx->blk_sub.hasargs
1638 && CopSTASH_eq(PL_curcop, PL_debstash))
1640 AV *ary = cx->blk_sub.argarray;
1641 int off = AvARRAY(ary) - AvALLOC(ary);
1645 PL_dbargs = GvAV(gv_AVadd(tmpgv = gv_fetchpv("DB::args", TRUE,
1648 AvREAL_off(PL_dbargs); /* XXX should be REIFY (see av.h) */
1651 if (AvMAX(PL_dbargs) < AvFILLp(ary) + off)
1652 av_extend(PL_dbargs, AvFILLp(ary) + off);
1653 Copy(AvALLOC(ary), AvARRAY(PL_dbargs), AvFILLp(ary) + 1 + off, SV*);
1654 AvFILLp(PL_dbargs) = AvFILLp(ary) + off;
1656 /* XXX only hints propagated via op_private are currently
1657 * visible (others are not easily accessible, since they
1658 * use the global PL_hints) */
1659 PUSHs(sv_2mortal(newSViv((I32)cx->blk_oldcop->op_private &
1660 HINT_PRIVATE_MASK)));
1663 SV * old_warnings = cx->blk_oldcop->cop_warnings ;
1665 if (old_warnings == pWARN_NONE ||
1666 (old_warnings == pWARN_STD && (PL_dowarn & G_WARN_ON) == 0))
1667 mask = newSVpvn(WARN_NONEstring, WARNsize) ;
1668 else if (old_warnings == pWARN_ALL ||
1669 (old_warnings == pWARN_STD && PL_dowarn & G_WARN_ON))
1670 mask = newSVpvn(WARN_ALLstring, WARNsize) ;
1672 mask = newSVsv(old_warnings);
1673 PUSHs(sv_2mortal(mask));
1688 sv_reset(tmps, CopSTASH(PL_curcop));
1700 PL_curcop = (COP*)PL_op;
1701 TAINT_NOT; /* Each statement is presumed innocent */
1702 PL_stack_sp = PL_stack_base + cxstack[cxstack_ix].blk_oldsp;
1705 if (PL_op->op_private || SvIV(PL_DBsingle) || SvIV(PL_DBsignal) || SvIV(PL_DBtrace))
1709 register PERL_CONTEXT *cx;
1710 I32 gimme = G_ARRAY;
1717 DIE(aTHX_ "No DB::DB routine defined");
1719 if (CvDEPTH(cv) >= 1 && !(PL_debug & DEBUG_DB_RECURSE_FLAG))
1720 /* don't do recursive DB::DB call */
1732 push_return(PL_op->op_next);
1733 PUSHBLOCK(cx, CXt_SUB, SP);
1736 (void)SvREFCNT_inc(cv);
1737 SAVEVPTR(PL_curpad);
1738 PL_curpad = AvARRAY((AV*)*av_fetch(CvPADLIST(cv),1,FALSE));
1739 RETURNOP(CvSTART(cv));
1753 register PERL_CONTEXT *cx;
1754 I32 gimme = GIMME_V;
1756 U32 cxtype = CXt_LOOP;
1765 if (PL_op->op_flags & OPf_SPECIAL) {
1766 svp = &THREADSV(PL_op->op_targ); /* per-thread variable */
1767 SAVEGENERICSV(*svp);
1771 #endif /* USE_THREADS */
1772 if (PL_op->op_targ) {
1773 #ifndef USE_ITHREADS
1774 svp = &PL_curpad[PL_op->op_targ]; /* "my" variable */
1777 SAVEPADSV(PL_op->op_targ);
1778 iterdata = (void*)PL_op->op_targ;
1779 cxtype |= CXp_PADVAR;
1784 svp = &GvSV(gv); /* symbol table variable */
1785 SAVEGENERICSV(*svp);
1788 iterdata = (void*)gv;
1794 PUSHBLOCK(cx, cxtype, SP);
1796 PUSHLOOP(cx, iterdata, MARK);
1798 PUSHLOOP(cx, svp, MARK);
1800 if (PL_op->op_flags & OPf_STACKED) {
1801 cx->blk_loop.iterary = (AV*)SvREFCNT_inc(POPs);
1802 if (SvTYPE(cx->blk_loop.iterary) != SVt_PVAV) {
1804 if (SvNIOKp(sv) || !SvPOKp(sv) ||
1805 SvNIOKp(cx->blk_loop.iterary) || !SvPOKp(cx->blk_loop.iterary) ||
1806 (looks_like_number(sv) && *SvPVX(sv) != '0' &&
1807 looks_like_number((SV*)cx->blk_loop.iterary) &&
1808 *SvPVX(cx->blk_loop.iterary) != '0'))
1810 if (SvNV(sv) < IV_MIN ||
1811 SvNV((SV*)cx->blk_loop.iterary) >= IV_MAX)
1812 DIE(aTHX_ "Range iterator outside integer range");
1813 cx->blk_loop.iterix = SvIV(sv);
1814 cx->blk_loop.itermax = SvIV((SV*)cx->blk_loop.iterary);
1817 cx->blk_loop.iterlval = newSVsv(sv);
1821 cx->blk_loop.iterary = PL_curstack;
1822 AvFILLp(PL_curstack) = SP - PL_stack_base;
1823 cx->blk_loop.iterix = MARK - PL_stack_base;
1832 register PERL_CONTEXT *cx;
1833 I32 gimme = GIMME_V;
1839 PUSHBLOCK(cx, CXt_LOOP, SP);
1840 PUSHLOOP(cx, 0, SP);
1848 register PERL_CONTEXT *cx;
1856 newsp = PL_stack_base + cx->blk_loop.resetsp;
1859 if (gimme == G_VOID)
1861 else if (gimme == G_SCALAR) {
1863 *++newsp = sv_mortalcopy(*SP);
1865 *++newsp = &PL_sv_undef;
1869 *++newsp = sv_mortalcopy(*++mark);
1870 TAINT_NOT; /* Each item is independent */
1876 POPLOOP(cx); /* Stack values are safe: release loop vars ... */
1877 PL_curpm = newpm; /* ... and pop $1 et al */
1889 register PERL_CONTEXT *cx;
1890 bool popsub2 = FALSE;
1891 bool clear_errsv = FALSE;
1898 if (PL_curstackinfo->si_type == PERLSI_SORT) {
1899 if (cxstack_ix == PL_sortcxix
1900 || dopoptosub(cxstack_ix) <= PL_sortcxix)
1902 if (cxstack_ix > PL_sortcxix)
1903 dounwind(PL_sortcxix);
1904 AvARRAY(PL_curstack)[1] = *SP;
1905 PL_stack_sp = PL_stack_base + 1;
1910 cxix = dopoptosub(cxstack_ix);
1912 DIE(aTHX_ "Can't return outside a subroutine");
1913 if (cxix < cxstack_ix)
1917 switch (CxTYPE(cx)) {
1922 if (!(PL_in_eval & EVAL_KEEPERR))
1928 if (optype == OP_REQUIRE &&
1929 (MARK == SP || (gimme == G_SCALAR && !SvTRUE(*SP))) )
1931 /* Unassume the success we assumed earlier. */
1932 SV *nsv = cx->blk_eval.old_namesv;
1933 (void)hv_delete(GvHVn(PL_incgv), SvPVX(nsv), SvCUR(nsv), G_DISCARD);
1934 DIE(aTHX_ "%s did not return a true value", SvPVX(nsv));
1941 DIE(aTHX_ "panic: return");
1945 if (gimme == G_SCALAR) {
1948 if (cx->blk_sub.cv && CvDEPTH(cx->blk_sub.cv) > 1) {
1950 *++newsp = SvREFCNT_inc(*SP);
1955 sv = SvREFCNT_inc(*SP); /* FREETMPS could clobber it */
1957 *++newsp = sv_mortalcopy(sv);
1962 *++newsp = (SvTEMP(*SP)) ? *SP : sv_mortalcopy(*SP);
1965 *++newsp = sv_mortalcopy(*SP);
1968 *++newsp = &PL_sv_undef;
1970 else if (gimme == G_ARRAY) {
1971 while (++MARK <= SP) {
1972 *++newsp = (popsub2 && SvTEMP(*MARK))
1973 ? *MARK : sv_mortalcopy(*MARK);
1974 TAINT_NOT; /* Each item is independent */
1977 PL_stack_sp = newsp;
1979 /* Stack values are safe: */
1981 POPSUB(cx,sv); /* release CV and @_ ... */
1985 PL_curpm = newpm; /* ... and pop $1 et al */
1991 return pop_return();
1998 register PERL_CONTEXT *cx;
2008 if (PL_op->op_flags & OPf_SPECIAL) {
2009 cxix = dopoptoloop(cxstack_ix);
2011 DIE(aTHX_ "Can't \"last\" outside a loop block");
2014 cxix = dopoptolabel(cPVOP->op_pv);
2016 DIE(aTHX_ "Label not found for \"last %s\"", cPVOP->op_pv);
2018 if (cxix < cxstack_ix)
2023 switch (CxTYPE(cx)) {
2026 newsp = PL_stack_base + cx->blk_loop.resetsp;
2027 nextop = cx->blk_loop.last_op->op_next;
2031 nextop = pop_return();
2035 nextop = pop_return();
2039 nextop = pop_return();
2042 DIE(aTHX_ "panic: last");
2046 if (gimme == G_SCALAR) {
2048 *++newsp = ((pop2 == CXt_SUB) && SvTEMP(*SP))
2049 ? *SP : sv_mortalcopy(*SP);
2051 *++newsp = &PL_sv_undef;
2053 else if (gimme == G_ARRAY) {
2054 while (++MARK <= SP) {
2055 *++newsp = ((pop2 == CXt_SUB) && SvTEMP(*MARK))
2056 ? *MARK : sv_mortalcopy(*MARK);
2057 TAINT_NOT; /* Each item is independent */
2063 /* Stack values are safe: */
2066 POPLOOP(cx); /* release loop vars ... */
2070 POPSUB(cx,sv); /* release CV and @_ ... */
2073 PL_curpm = newpm; /* ... and pop $1 et al */
2083 register PERL_CONTEXT *cx;
2086 if (PL_op->op_flags & OPf_SPECIAL) {
2087 cxix = dopoptoloop(cxstack_ix);
2089 DIE(aTHX_ "Can't \"next\" outside a loop block");
2092 cxix = dopoptolabel(cPVOP->op_pv);
2094 DIE(aTHX_ "Label not found for \"next %s\"", cPVOP->op_pv);
2096 if (cxix < cxstack_ix)
2099 /* clear off anything above the scope we're re-entering, but
2100 * save the rest until after a possible continue block */
2101 inner = PL_scopestack_ix;
2103 if (PL_scopestack_ix < inner)
2104 leave_scope(PL_scopestack[PL_scopestack_ix]);
2105 return cx->blk_loop.next_op;
2111 register PERL_CONTEXT *cx;
2114 if (PL_op->op_flags & OPf_SPECIAL) {
2115 cxix = dopoptoloop(cxstack_ix);
2117 DIE(aTHX_ "Can't \"redo\" outside a loop block");
2120 cxix = dopoptolabel(cPVOP->op_pv);
2122 DIE(aTHX_ "Label not found for \"redo %s\"", cPVOP->op_pv);
2124 if (cxix < cxstack_ix)
2128 oldsave = PL_scopestack[PL_scopestack_ix - 1];
2129 LEAVE_SCOPE(oldsave);
2130 return cx->blk_loop.redo_op;
2134 S_dofindlabel(pTHX_ OP *o, char *label, OP **opstack, OP **oplimit)
2138 static char too_deep[] = "Target of goto is too deeply nested";
2141 Perl_croak(aTHX_ too_deep);
2142 if (o->op_type == OP_LEAVE ||
2143 o->op_type == OP_SCOPE ||
2144 o->op_type == OP_LEAVELOOP ||
2145 o->op_type == OP_LEAVETRY)
2147 *ops++ = cUNOPo->op_first;
2149 Perl_croak(aTHX_ too_deep);
2152 if (o->op_flags & OPf_KIDS) {
2153 /* First try all the kids at this level, since that's likeliest. */
2154 for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling) {
2155 if ((kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) &&
2156 kCOP->cop_label && strEQ(kCOP->cop_label, label))
2159 for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling) {
2160 if (kid == PL_lastgotoprobe)
2162 if ((kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) &&
2164 (ops[-1]->op_type != OP_NEXTSTATE &&
2165 ops[-1]->op_type != OP_DBSTATE)))
2167 if ((o = dofindlabel(kid, label, ops, oplimit)))
2186 register PERL_CONTEXT *cx;
2187 #define GOTO_DEPTH 64
2188 OP *enterops[GOTO_DEPTH];
2190 int do_dump = (PL_op->op_type == OP_DUMP);
2191 static char must_have_label[] = "goto must have label";
2194 if (PL_op->op_flags & OPf_STACKED) {
2198 /* This egregious kludge implements goto &subroutine */
2199 if (SvROK(sv) && SvTYPE(SvRV(sv)) == SVt_PVCV) {
2201 register PERL_CONTEXT *cx;
2202 CV* cv = (CV*)SvRV(sv);
2208 if (!CvROOT(cv) && !CvXSUB(cv)) {
2213 /* autoloaded stub? */
2214 if (cv != GvCV(gv) && (cv = GvCV(gv)))
2216 autogv = gv_autoload4(GvSTASH(gv), GvNAME(gv),
2217 GvNAMELEN(gv), FALSE);
2218 if (autogv && (cv = GvCV(autogv)))
2220 tmpstr = sv_newmortal();
2221 gv_efullname3(tmpstr, gv, Nullch);
2222 DIE(aTHX_ "Goto undefined subroutine &%s",SvPVX(tmpstr));
2224 DIE(aTHX_ "Goto undefined subroutine");
2227 /* First do some returnish stuff. */
2228 cxix = dopoptosub(cxstack_ix);
2230 DIE(aTHX_ "Can't goto subroutine outside a subroutine");
2231 if (cxix < cxstack_ix)
2235 DIE(aTHX_ "Can't goto subroutine from an eval-string");
2237 if (CxTYPE(cx) == CXt_SUB && cx->blk_sub.hasargs) {
2238 /* put @_ back onto stack */
2239 AV* av = cx->blk_sub.argarray;
2241 items = AvFILLp(av) + 1;
2243 EXTEND(PL_stack_sp, items); /* @_ could have been extended. */
2244 Copy(AvARRAY(av), PL_stack_sp, items, SV*);
2245 PL_stack_sp += items;
2247 SvREFCNT_dec(GvAV(PL_defgv));
2248 GvAV(PL_defgv) = cx->blk_sub.savearray;
2249 #endif /* USE_THREADS */
2250 /* abandon @_ if it got reified */
2252 (void)sv_2mortal((SV*)av); /* delay until return */
2254 av_extend(av, items-1);
2255 AvFLAGS(av) = AVf_REIFY;
2256 PL_curpad[0] = (SV*)(cx->blk_sub.argarray = av);
2259 else if (CvXSUB(cv)) { /* put GvAV(defgv) back onto stack */
2262 av = (AV*)PL_curpad[0];
2264 av = GvAV(PL_defgv);
2266 items = AvFILLp(av) + 1;
2268 EXTEND(PL_stack_sp, items); /* @_ could have been extended. */
2269 Copy(AvARRAY(av), PL_stack_sp, items, SV*);
2270 PL_stack_sp += items;
2272 if (CxTYPE(cx) == CXt_SUB &&
2273 !(CvDEPTH(cx->blk_sub.cv) = cx->blk_sub.olddepth))
2274 SvREFCNT_dec(cx->blk_sub.cv);
2275 oldsave = PL_scopestack[PL_scopestack_ix - 1];
2276 LEAVE_SCOPE(oldsave);
2278 /* Now do some callish stuff. */
2281 #ifdef PERL_XSUB_OLDSTYLE
2282 if (CvOLDSTYLE(cv)) {
2283 I32 (*fp3)(int,int,int);
2288 fp3 = (I32(*)(int,int,int))CvXSUB(cv);
2289 items = (*fp3)(CvXSUBANY(cv).any_i32,
2290 mark - PL_stack_base + 1,
2292 SP = PL_stack_base + items;
2295 #endif /* PERL_XSUB_OLDSTYLE */
2300 PL_stack_sp--; /* There is no cv arg. */
2301 /* Push a mark for the start of arglist */
2303 (void)(*CvXSUB(cv))(aTHXo_ cv);
2304 /* Pop the current context like a decent sub should */
2305 POPBLOCK(cx, PL_curpm);
2306 /* Do _not_ use PUTBACK, keep the XSUB's return stack! */
2309 return pop_return();
2312 AV* padlist = CvPADLIST(cv);
2313 SV** svp = AvARRAY(padlist);
2314 if (CxTYPE(cx) == CXt_EVAL) {
2315 PL_in_eval = cx->blk_eval.old_in_eval;
2316 PL_eval_root = cx->blk_eval.old_eval_root;
2317 cx->cx_type = CXt_SUB;
2318 cx->blk_sub.hasargs = 0;
2320 cx->blk_sub.cv = cv;
2321 cx->blk_sub.olddepth = CvDEPTH(cv);
2323 if (CvDEPTH(cv) < 2)
2324 (void)SvREFCNT_inc(cv);
2325 else { /* save temporaries on recursion? */
2326 if (CvDEPTH(cv) == 100 && ckWARN(WARN_RECURSION))
2327 sub_crush_depth(cv);
2328 if (CvDEPTH(cv) > AvFILLp(padlist)) {
2329 AV *newpad = newAV();
2330 SV **oldpad = AvARRAY(svp[CvDEPTH(cv)-1]);
2331 I32 ix = AvFILLp((AV*)svp[1]);
2332 I32 names_fill = AvFILLp((AV*)svp[0]);
2333 svp = AvARRAY(svp[0]);
2334 for ( ;ix > 0; ix--) {
2335 if (names_fill >= ix && svp[ix] != &PL_sv_undef) {
2336 char *name = SvPVX(svp[ix]);
2337 if ((SvFLAGS(svp[ix]) & SVf_FAKE)
2340 /* outer lexical or anon code */
2341 av_store(newpad, ix,
2342 SvREFCNT_inc(oldpad[ix]) );
2344 else { /* our own lexical */
2346 av_store(newpad, ix, sv = (SV*)newAV());
2347 else if (*name == '%')
2348 av_store(newpad, ix, sv = (SV*)newHV());
2350 av_store(newpad, ix, sv = NEWSV(0,0));
2354 else if (IS_PADGV(oldpad[ix]) || IS_PADCONST(oldpad[ix])) {
2355 av_store(newpad, ix, sv = SvREFCNT_inc(oldpad[ix]));
2358 av_store(newpad, ix, sv = NEWSV(0,0));
2362 if (cx->blk_sub.hasargs) {
2365 av_store(newpad, 0, (SV*)av);
2366 AvFLAGS(av) = AVf_REIFY;
2368 av_store(padlist, CvDEPTH(cv), (SV*)newpad);
2369 AvFILLp(padlist) = CvDEPTH(cv);
2370 svp = AvARRAY(padlist);
2374 if (!cx->blk_sub.hasargs) {
2375 AV* av = (AV*)PL_curpad[0];
2377 items = AvFILLp(av) + 1;
2379 /* Mark is at the end of the stack. */
2381 Copy(AvARRAY(av), SP + 1, items, SV*);
2386 #endif /* USE_THREADS */
2387 SAVEVPTR(PL_curpad);
2388 PL_curpad = AvARRAY((AV*)svp[CvDEPTH(cv)]);
2390 if (cx->blk_sub.hasargs)
2391 #endif /* USE_THREADS */
2393 AV* av = (AV*)PL_curpad[0];
2397 cx->blk_sub.savearray = GvAV(PL_defgv);
2398 GvAV(PL_defgv) = (AV*)SvREFCNT_inc(av);
2399 #endif /* USE_THREADS */
2400 cx->blk_sub.oldcurpad = PL_curpad;
2401 cx->blk_sub.argarray = av;
2404 if (items >= AvMAX(av) + 1) {
2406 if (AvARRAY(av) != ary) {
2407 AvMAX(av) += AvARRAY(av) - AvALLOC(av);
2408 SvPVX(av) = (char*)ary;
2410 if (items >= AvMAX(av) + 1) {
2411 AvMAX(av) = items - 1;
2412 Renew(ary,items+1,SV*);
2414 SvPVX(av) = (char*)ary;
2417 Copy(mark,AvARRAY(av),items,SV*);
2418 AvFILLp(av) = items - 1;
2419 assert(!AvREAL(av));
2426 if (PERLDB_SUB) { /* Checking curstash breaks DProf. */
2428 * We do not care about using sv to call CV;
2429 * it's for informational purposes only.
2431 SV *sv = GvSV(PL_DBsub);
2434 if (PERLDB_SUB_NN) {
2435 SvIVX(sv) = PTR2IV(cv); /* Already upgraded, saved */
2438 gv_efullname3(sv, CvGV(cv), Nullch);
2441 && (gotocv = get_cv("DB::goto", FALSE)) ) {
2442 PUSHMARK( PL_stack_sp );
2443 call_sv((SV*)gotocv, G_SCALAR | G_NODEBUG);
2447 RETURNOP(CvSTART(cv));
2451 label = SvPV(sv,n_a);
2452 if (!(do_dump || *label))
2453 DIE(aTHX_ must_have_label);
2456 else if (PL_op->op_flags & OPf_SPECIAL) {
2458 DIE(aTHX_ must_have_label);
2461 label = cPVOP->op_pv;
2463 if (label && *label) {
2465 bool leaving_eval = FALSE;
2466 PERL_CONTEXT *last_eval_cx = 0;
2470 PL_lastgotoprobe = 0;
2472 for (ix = cxstack_ix; ix >= 0; ix--) {
2474 switch (CxTYPE(cx)) {
2476 leaving_eval = TRUE;
2477 if (CxREALEVAL(cx)) {
2478 gotoprobe = (last_eval_cx ?
2479 last_eval_cx->blk_eval.old_eval_root :
2484 /* else fall through */
2486 gotoprobe = cx->blk_oldcop->op_sibling;
2492 gotoprobe = cx->blk_oldcop->op_sibling;
2494 gotoprobe = PL_main_root;
2497 if (CvDEPTH(cx->blk_sub.cv)) {
2498 gotoprobe = CvROOT(cx->blk_sub.cv);
2504 DIE(aTHX_ "Can't \"goto\" out of a pseudo block");
2507 DIE(aTHX_ "panic: goto");
2508 gotoprobe = PL_main_root;
2512 retop = dofindlabel(gotoprobe, label,
2513 enterops, enterops + GOTO_DEPTH);
2517 PL_lastgotoprobe = gotoprobe;
2520 DIE(aTHX_ "Can't find label %s", label);
2522 /* if we're leaving an eval, check before we pop any frames
2523 that we're not going to punt, otherwise the error
2526 if (leaving_eval && *enterops && enterops[1]) {
2528 for (i = 1; enterops[i]; i++)
2529 if (enterops[i]->op_type == OP_ENTERITER)
2530 DIE(aTHX_ "Can't \"goto\" into the middle of a foreach loop");
2533 /* pop unwanted frames */
2535 if (ix < cxstack_ix) {
2542 oldsave = PL_scopestack[PL_scopestack_ix];
2543 LEAVE_SCOPE(oldsave);
2546 /* push wanted frames */
2548 if (*enterops && enterops[1]) {
2550 for (ix = 1; enterops[ix]; ix++) {
2551 PL_op = enterops[ix];
2552 /* Eventually we may want to stack the needed arguments
2553 * for each op. For now, we punt on the hard ones. */
2554 if (PL_op->op_type == OP_ENTERITER)
2555 DIE(aTHX_ "Can't \"goto\" into the middle of a foreach loop");
2556 CALL_FPTR(PL_op->op_ppaddr)(aTHX);
2564 if (!retop) retop = PL_main_start;
2566 PL_restartop = retop;
2567 PL_do_undump = TRUE;
2571 PL_restartop = 0; /* hmm, must be GNU unexec().. */
2572 PL_do_undump = FALSE;
2588 if (anum == 1 && (PL_op->op_private & OPpEXIT_VMSISH))
2592 PL_exit_flags |= PERL_EXIT_EXPECTED;
2594 PUSHs(&PL_sv_undef);
2602 NV value = SvNVx(GvSV(cCOP->cop_gv));
2603 register I32 match = I_32(value);
2606 if (((NV)match) > value)
2607 --match; /* was fractional--truncate other way */
2609 match -= cCOP->uop.scop.scop_offset;
2612 else if (match > cCOP->uop.scop.scop_max)
2613 match = cCOP->uop.scop.scop_max;
2614 PL_op = cCOP->uop.scop.scop_next[match];
2624 PL_op = PL_op->op_next; /* can't assume anything */
2627 match = *(SvPVx(GvSV(cCOP->cop_gv), n_a)) & 255;
2628 match -= cCOP->uop.scop.scop_offset;
2631 else if (match > cCOP->uop.scop.scop_max)
2632 match = cCOP->uop.scop.scop_max;
2633 PL_op = cCOP->uop.scop.scop_next[match];
2642 S_save_lines(pTHX_ AV *array, SV *sv)
2644 register char *s = SvPVX(sv);
2645 register char *send = SvPVX(sv) + SvCUR(sv);
2647 register I32 line = 1;
2649 while (s && s < send) {
2650 SV *tmpstr = NEWSV(85,0);
2652 sv_upgrade(tmpstr, SVt_PVMG);
2653 t = strchr(s, '\n');
2659 sv_setpvn(tmpstr, s, t - s);
2660 av_store(array, line++, tmpstr);
2665 #ifdef PERL_FLEXIBLE_EXCEPTIONS
2667 S_docatch_body(pTHX_ va_list args)
2669 return docatch_body();
2674 S_docatch_body(pTHX)
2681 S_docatch(pTHX_ OP *o)
2685 volatile PERL_SI *cursi = PL_curstackinfo;
2689 assert(CATCH_GET == TRUE);
2692 #ifdef PERL_FLEXIBLE_EXCEPTIONS
2694 CALLPROTECT(aTHX_ pcur_env, &ret, MEMBER_TO_FPTR(S_docatch_body));
2700 #ifndef PERL_FLEXIBLE_EXCEPTIONS
2706 if (PL_restartop && cursi == PL_curstackinfo) {
2707 PL_op = PL_restartop;
2724 Perl_sv_compile_2op(pTHX_ SV *sv, OP** startop, char *code, AV** avp)
2725 /* sv Text to convert to OP tree. */
2726 /* startop op_free() this to undo. */
2727 /* code Short string id of the caller. */
2729 dSP; /* Make POPBLOCK work. */
2732 I32 gimme = 0; /* SUSPECT - INITIALZE TO WHAT? NI-S */
2736 char tbuf[TYPE_DIGITS(long) + 12 + 10];
2737 char *tmpbuf = tbuf;
2743 /* switch to eval mode */
2745 if (PL_curcop == &PL_compiling) {
2746 SAVECOPSTASH_FREE(&PL_compiling);
2747 CopSTASH_set(&PL_compiling, PL_curstash);
2749 if (PERLDB_NAMEEVAL && CopLINE(PL_curcop)) {
2750 SV *sv = sv_newmortal();
2751 Perl_sv_setpvf(aTHX_ sv, "_<(%.10seval %lu)[%s:%"IVdf"]",
2752 code, (unsigned long)++PL_evalseq,
2753 CopFILE(PL_curcop), (IV)CopLINE(PL_curcop));
2757 sprintf(tmpbuf, "_<(%.10s_eval %lu)", code, (unsigned long)++PL_evalseq);
2758 SAVECOPFILE_FREE(&PL_compiling);
2759 CopFILE_set(&PL_compiling, tmpbuf+2);
2760 SAVECOPLINE(&PL_compiling);
2761 CopLINE_set(&PL_compiling, 1);
2762 /* XXX For C<eval "...">s within BEGIN {} blocks, this ends up
2763 deleting the eval's FILEGV from the stash before gv_check() runs
2764 (i.e. before run-time proper). To work around the coredump that
2765 ensues, we always turn GvMULTI_on for any globals that were
2766 introduced within evals. See force_ident(). GSAR 96-10-12 */
2767 safestr = savepv(tmpbuf);
2768 SAVEDELETE(PL_defstash, safestr, strlen(safestr));
2770 #ifdef OP_IN_REGISTER
2775 PL_hints &= HINT_UTF8;
2778 PL_op->op_type = OP_ENTEREVAL;
2779 PL_op->op_flags = 0; /* Avoid uninit warning. */
2780 PUSHBLOCK(cx, CXt_EVAL|(PL_curcop == &PL_compiling ? 0 : CXp_REAL), SP);
2781 PUSHEVAL(cx, 0, Nullgv);
2782 rop = doeval(G_SCALAR, startop);
2783 POPBLOCK(cx,PL_curpm);
2786 (*startop)->op_type = OP_NULL;
2787 (*startop)->op_ppaddr = PL_ppaddr[OP_NULL];
2789 *avp = (AV*)SvREFCNT_inc(PL_comppad);
2791 if (PL_curcop == &PL_compiling)
2792 PL_compiling.op_private = PL_hints;
2793 #ifdef OP_IN_REGISTER
2799 /* With USE_THREADS, eval_owner must be held on entry to doeval */
2801 S_doeval(pTHX_ int gimme, OP** startop)
2809 PL_in_eval = ((saveop && saveop->op_type == OP_REQUIRE)
2810 ? (EVAL_INREQUIRE | (PL_in_eval & EVAL_INEVAL))
2815 /* set up a scratch pad */
2818 SAVEVPTR(PL_curpad);
2819 SAVESPTR(PL_comppad);
2820 SAVESPTR(PL_comppad_name);
2821 SAVEI32(PL_comppad_name_fill);
2822 SAVEI32(PL_min_intro_pending);
2823 SAVEI32(PL_max_intro_pending);
2826 for (i = cxstack_ix - 1; i >= 0; i--) {
2827 PERL_CONTEXT *cx = &cxstack[i];
2828 if (CxTYPE(cx) == CXt_EVAL)
2830 else if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
2831 caller = cx->blk_sub.cv;
2836 SAVESPTR(PL_compcv);
2837 PL_compcv = (CV*)NEWSV(1104,0);
2838 sv_upgrade((SV *)PL_compcv, SVt_PVCV);
2839 CvEVAL_on(PL_compcv);
2840 assert(CxTYPE(&cxstack[cxstack_ix]) == CXt_EVAL);
2841 cxstack[cxstack_ix].blk_eval.cv = 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 SAVEMORTALIZESV(PL_compcv); /* must remain until end of current statement */
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;
3027 char *tryname = Nullch;
3028 SV *namesv = Nullsv;
3030 I32 gimme = GIMME_V;
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) && SvNV(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 = utf8n_to_uvchr(s, end - s, &len, 0);
3049 ver = utf8n_to_uvchr(s, end - s, &len, 0);
3052 sver = utf8n_to_uvchr(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 #ifdef MACOS_TRADITIONAL
3109 if (PERL_FILE_IS_ABSOLUTE(name)
3110 || (*name == ':' && name[1] != ':' && strchr(name+2, ':')))
3113 tryrsfp = doopen_pmc(name,PERL_SCRIPT_MODE);
3114 /* We consider paths of the form :a:b ambiguous and interpret them first
3115 as global then as local
3117 if (!tryrsfp && *name == ':' && name[1] != ':' && strchr(name+2, ':'))
3123 if (PERL_FILE_IS_ABSOLUTE(name)
3124 || (*name == '.' && (name[1] == '/' ||
3125 (name[1] == '.' && name[2] == '/'))))
3128 tryrsfp = doopen_pmc(name,PERL_SCRIPT_MODE);
3132 AV *ar = GvAVn(PL_incgv);
3136 if ((unixname = tounixspec(name, Nullch)) != Nullch)
3139 namesv = NEWSV(806, 0);
3140 for (i = 0; i <= AvFILL(ar); i++) {
3141 SV *dirsv = *av_fetch(ar, i, TRUE);
3147 if (SvTYPE(SvRV(loader)) == SVt_PVAV) {
3148 loader = *av_fetch((AV *)SvRV(loader), 0, TRUE);
3151 Perl_sv_setpvf(aTHX_ namesv, "/loader/0x%"UVxf"/%s",
3152 PTR2UV(SvANY(loader)), name);
3153 tryname = SvPVX(namesv);
3164 if (sv_isobject(loader))
3165 count = call_method("INC", G_ARRAY);
3167 count = call_sv(loader, G_ARRAY);
3177 if (SvROK(arg) && SvTYPE(SvRV(arg)) == SVt_PVGV) {
3181 if (SvTYPE(arg) == SVt_PVGV) {
3182 IO *io = GvIO((GV *)arg);
3187 tryrsfp = IoIFP(io);
3188 if (IoTYPE(io) == IoTYPE_PIPE) {
3189 /* reading from a child process doesn't
3190 nest -- when returning from reading
3191 the inner module, the outer one is
3192 unreadable (closed?) I've tried to
3193 save the gv to manage the lifespan of
3194 the pipe, but this didn't help. XXX */
3195 filter_child_proc = (GV *)arg;
3196 (void)SvREFCNT_inc(filter_child_proc);
3199 if (IoOFP(io) && IoOFP(io) != IoIFP(io)) {
3200 PerlIO_close(IoOFP(io));
3212 if (SvROK(arg) && SvTYPE(SvRV(arg)) == SVt_PVCV) {
3214 (void)SvREFCNT_inc(filter_sub);
3217 filter_state = SP[i];
3218 (void)SvREFCNT_inc(filter_state);
3222 tryrsfp = PerlIO_open("/dev/null",
3236 filter_has_file = 0;
3237 if (filter_child_proc) {
3238 SvREFCNT_dec(filter_child_proc);
3239 filter_child_proc = 0;
3242 SvREFCNT_dec(filter_state);
3246 SvREFCNT_dec(filter_sub);
3251 char *dir = SvPVx(dirsv, n_a);
3252 #ifdef MACOS_TRADITIONAL
3254 Perl_sv_setpvf(aTHX_ namesv, "%s%s", MacPerl_CanonDir(dir, buf), name+(name[0] == ':'));
3258 if ((unixdir = tounixpath(dir, Nullch)) == Nullch)
3260 sv_setpv(namesv, unixdir);
3261 sv_catpv(namesv, unixname);
3263 Perl_sv_setpvf(aTHX_ namesv, "%s/%s", dir, name);
3266 TAINT_PROPER("require");
3267 tryname = SvPVX(namesv);
3268 #ifdef MACOS_TRADITIONAL
3270 /* Convert slashes in the name part, but not the directory part, to colons */
3272 for (colon = tryname+strlen(dir); colon = strchr(colon, '/'); )
3276 tryrsfp = doopen_pmc(tryname, PERL_SCRIPT_MODE);
3278 if (tryname[0] == '.' && tryname[1] == '/')
3286 SAVECOPFILE_FREE(&PL_compiling);
3287 CopFILE_set(&PL_compiling, tryrsfp ? tryname : name);
3288 SvREFCNT_dec(namesv);
3290 if (PL_op->op_type == OP_REQUIRE) {
3291 char *msgstr = name;
3292 if (namesv) { /* did we lookup @INC? */
3293 SV *msg = sv_2mortal(newSVpv(msgstr,0));
3294 SV *dirmsgsv = NEWSV(0, 0);
3295 AV *ar = GvAVn(PL_incgv);
3297 sv_catpvn(msg, " in @INC", 8);
3298 if (instr(SvPVX(msg), ".h "))
3299 sv_catpv(msg, " (change .h to .ph maybe?)");
3300 if (instr(SvPVX(msg), ".ph "))
3301 sv_catpv(msg, " (did you run h2ph?)");
3302 sv_catpv(msg, " (@INC contains:");
3303 for (i = 0; i <= AvFILL(ar); i++) {
3304 char *dir = SvPVx(*av_fetch(ar, i, TRUE), n_a);
3305 Perl_sv_setpvf(aTHX_ dirmsgsv, " %s", dir);
3306 sv_catsv(msg, dirmsgsv);
3308 sv_catpvn(msg, ")", 1);
3309 SvREFCNT_dec(dirmsgsv);
3310 msgstr = SvPV_nolen(msg);
3312 DIE(aTHX_ "Can't locate %s", msgstr);
3318 SETERRNO(0, SS$_NORMAL);
3320 /* Assume success here to prevent recursive requirement. */
3321 (void)hv_store(GvHVn(PL_incgv), name, strlen(name),
3322 newSVpv(CopFILE(&PL_compiling), 0), 0 );
3326 lex_start(sv_2mortal(newSVpvn("",0)));
3327 SAVEGENERICSV(PL_rsfp_filters);
3328 PL_rsfp_filters = Nullav;
3333 SAVESPTR(PL_compiling.cop_warnings);
3334 if (PL_dowarn & G_WARN_ALL_ON)
3335 PL_compiling.cop_warnings = pWARN_ALL ;
3336 else if (PL_dowarn & G_WARN_ALL_OFF)
3337 PL_compiling.cop_warnings = pWARN_NONE ;
3339 PL_compiling.cop_warnings = pWARN_STD ;
3340 SAVESPTR(PL_compiling.cop_io);
3341 PL_compiling.cop_io = Nullsv;
3343 if (filter_sub || filter_child_proc) {
3344 SV *datasv = filter_add(run_user_filter, Nullsv);
3345 IoLINES(datasv) = filter_has_file;
3346 IoFMT_GV(datasv) = (GV *)filter_child_proc;
3347 IoTOP_GV(datasv) = (GV *)filter_state;
3348 IoBOTTOM_GV(datasv) = (GV *)filter_sub;
3351 /* switch to eval mode */
3352 push_return(PL_op->op_next);
3353 PUSHBLOCK(cx, CXt_EVAL, SP);
3354 PUSHEVAL(cx, name, Nullgv);
3356 SAVECOPLINE(&PL_compiling);
3357 CopLINE_set(&PL_compiling, 0);
3361 MUTEX_LOCK(&PL_eval_mutex);
3362 if (PL_eval_owner && PL_eval_owner != thr)
3363 while (PL_eval_owner)
3364 COND_WAIT(&PL_eval_cond, &PL_eval_mutex);
3365 PL_eval_owner = thr;
3366 MUTEX_UNLOCK(&PL_eval_mutex);
3367 #endif /* USE_THREADS */
3368 return DOCATCH(doeval(gimme, NULL));
3373 return pp_require();
3379 register PERL_CONTEXT *cx;
3381 I32 gimme = GIMME_V, was = PL_sub_generation;
3382 char tbuf[TYPE_DIGITS(long) + 12];
3383 char *tmpbuf = tbuf;
3388 if (!SvPV(sv,len) || !len)
3390 TAINT_PROPER("eval");
3396 /* switch to eval mode */
3398 if (PERLDB_NAMEEVAL && CopLINE(PL_curcop)) {
3399 SV *sv = sv_newmortal();
3400 Perl_sv_setpvf(aTHX_ sv, "_<(eval %lu)[%s:%"IVdf"]",
3401 (unsigned long)++PL_evalseq,
3402 CopFILE(PL_curcop), (IV)CopLINE(PL_curcop));
3406 sprintf(tmpbuf, "_<(eval %lu)", (unsigned long)++PL_evalseq);
3407 SAVECOPFILE_FREE(&PL_compiling);
3408 CopFILE_set(&PL_compiling, tmpbuf+2);
3409 SAVECOPLINE(&PL_compiling);
3410 CopLINE_set(&PL_compiling, 1);
3411 /* XXX For C<eval "...">s within BEGIN {} blocks, this ends up
3412 deleting the eval's FILEGV from the stash before gv_check() runs
3413 (i.e. before run-time proper). To work around the coredump that
3414 ensues, we always turn GvMULTI_on for any globals that were
3415 introduced within evals. See force_ident(). GSAR 96-10-12 */
3416 safestr = savepv(tmpbuf);
3417 SAVEDELETE(PL_defstash, safestr, strlen(safestr));
3419 PL_hints = PL_op->op_targ;
3420 SAVESPTR(PL_compiling.cop_warnings);
3421 if (specialWARN(PL_curcop->cop_warnings))
3422 PL_compiling.cop_warnings = PL_curcop->cop_warnings;
3424 PL_compiling.cop_warnings = newSVsv(PL_curcop->cop_warnings);
3425 SAVEFREESV(PL_compiling.cop_warnings);
3427 SAVESPTR(PL_compiling.cop_io);
3428 if (specialCopIO(PL_curcop->cop_io))
3429 PL_compiling.cop_io = PL_curcop->cop_io;
3431 PL_compiling.cop_io = newSVsv(PL_curcop->cop_io);
3432 SAVEFREESV(PL_compiling.cop_io);
3435 push_return(PL_op->op_next);
3436 PUSHBLOCK(cx, (CXt_EVAL|CXp_REAL), SP);
3437 PUSHEVAL(cx, 0, Nullgv);
3439 /* prepare to compile string */
3441 if (PERLDB_LINE && PL_curstash != PL_debstash)
3442 save_lines(CopFILEAV(&PL_compiling), PL_linestr);
3445 MUTEX_LOCK(&PL_eval_mutex);
3446 if (PL_eval_owner && PL_eval_owner != thr)
3447 while (PL_eval_owner)
3448 COND_WAIT(&PL_eval_cond, &PL_eval_mutex);
3449 PL_eval_owner = thr;
3450 MUTEX_UNLOCK(&PL_eval_mutex);
3451 #endif /* USE_THREADS */
3452 ret = doeval(gimme, NULL);
3453 if (PERLDB_INTER && was != PL_sub_generation /* Some subs defined here. */
3454 && ret != PL_op->op_next) { /* Successive compilation. */
3455 strcpy(safestr, "_<(eval )"); /* Anything fake and short. */
3457 return DOCATCH(ret);
3467 register PERL_CONTEXT *cx;
3469 U8 save_flags = PL_op -> op_flags;
3474 retop = pop_return();
3477 if (gimme == G_VOID)
3479 else if (gimme == G_SCALAR) {
3482 if (SvFLAGS(TOPs) & SVs_TEMP)
3485 *MARK = sv_mortalcopy(TOPs);
3489 *MARK = &PL_sv_undef;
3494 /* in case LEAVE wipes old return values */
3495 for (mark = newsp + 1; mark <= SP; mark++) {
3496 if (!(SvFLAGS(*mark) & SVs_TEMP)) {
3497 *mark = sv_mortalcopy(*mark);
3498 TAINT_NOT; /* Each item is independent */
3502 PL_curpm = newpm; /* Don't pop $1 et al till now */
3505 assert(CvDEPTH(PL_compcv) == 1);
3507 CvDEPTH(PL_compcv) = 0;
3510 if (optype == OP_REQUIRE &&
3511 !(gimme == G_SCALAR ? SvTRUE(*SP) : SP > newsp))
3513 /* Unassume the success we assumed earlier. */
3514 SV *nsv = cx->blk_eval.old_namesv;
3515 (void)hv_delete(GvHVn(PL_incgv), SvPVX(nsv), SvCUR(nsv), G_DISCARD);
3516 retop = Perl_die(aTHX_ "%s did not return a true value", SvPVX(nsv));
3517 /* die_where() did LEAVE, or we won't be here */
3521 if (!(save_flags & OPf_SPECIAL))
3531 register PERL_CONTEXT *cx;
3532 I32 gimme = GIMME_V;
3537 push_return(cLOGOP->op_other->op_next);
3538 PUSHBLOCK(cx, (CXt_EVAL|CXp_TRYBLOCK), SP);
3541 PL_in_eval = EVAL_INEVAL;
3544 return DOCATCH(PL_op->op_next);
3554 register PERL_CONTEXT *cx;
3562 if (gimme == G_VOID)
3564 else if (gimme == G_SCALAR) {
3567 if (SvFLAGS(TOPs) & (SVs_PADTMP|SVs_TEMP))
3570 *MARK = sv_mortalcopy(TOPs);
3574 *MARK = &PL_sv_undef;
3579 /* in case LEAVE wipes old return values */
3580 for (mark = newsp + 1; mark <= SP; mark++) {
3581 if (!(SvFLAGS(*mark) & (SVs_PADTMP|SVs_TEMP))) {
3582 *mark = sv_mortalcopy(*mark);
3583 TAINT_NOT; /* Each item is independent */
3587 PL_curpm = newpm; /* Don't pop $1 et al till now */
3595 S_doparseform(pTHX_ SV *sv)
3598 register char *s = SvPV_force(sv, len);
3599 register char *send = s + len;
3600 register char *base = Nullch;
3601 register I32 skipspaces = 0;
3602 bool noblank = FALSE;
3603 bool repeat = FALSE;
3604 bool postspace = FALSE;
3612 Perl_croak(aTHX_ "Null picture in formline");
3614 New(804, fops, (send - s)*3+10, U16); /* Almost certainly too long... */
3619 *fpc++ = FF_LINEMARK;
3620 noblank = repeat = FALSE;
3638 case ' ': case '\t':
3649 *fpc++ = FF_LITERAL;
3657 *fpc++ = skipspaces;
3661 *fpc++ = FF_NEWLINE;
3665 arg = fpc - linepc + 1;
3672 *fpc++ = FF_LINEMARK;
3673 noblank = repeat = FALSE;
3682 ischop = s[-1] == '^';
3688 arg = (s - base) - 1;
3690 *fpc++ = FF_LITERAL;
3699 *fpc++ = FF_LINEGLOB;
3701 else if (*s == '#' || (*s == '.' && s[1] == '#')) {
3702 arg = ischop ? 512 : 0;
3712 arg |= 256 + (s - f);
3714 *fpc++ = s - base; /* fieldsize for FETCH */
3715 *fpc++ = FF_DECIMAL;
3718 else if (*s == '0' && s[1] == '#') { /* Zero padded decimals */
3719 arg = ischop ? 512 : 0;
3721 s++; /* skip the '0' first */
3730 arg |= 256 + (s - f);
3732 *fpc++ = s - base; /* fieldsize for FETCH */
3733 *fpc++ = FF_0DECIMAL;
3738 bool ismore = FALSE;
3741 while (*++s == '>') ;
3742 prespace = FF_SPACE;
3744 else if (*s == '|') {
3745 while (*++s == '|') ;
3746 prespace = FF_HALFSPACE;
3751 while (*++s == '<') ;
3754 if (*s == '.' && s[1] == '.' && s[2] == '.') {
3758 *fpc++ = s - base; /* fieldsize for FETCH */
3760 *fpc++ = ischop ? FF_CHECKCHOP : FF_CHECKNL;
3778 { /* need to jump to the next word */
3780 z = WORD_ALIGN - SvCUR(sv) % WORD_ALIGN;
3781 SvGROW(sv, SvCUR(sv) + z + arg * sizeof(U16) + 4);
3782 s = SvPVX(sv) + SvCUR(sv) + z;
3784 Copy(fops, s, arg, U16);
3786 sv_magic(sv, Nullsv, PERL_MAGIC_fm, Nullch, 0);
3791 * The mergesort implementation is by Peter M. Mcilroy <pmcilroy@lucent.com>.
3793 * The original code was written in conjunction with BSD Computer Software
3794 * Research Group at University of California, Berkeley.
3796 * See also: "Optimistic Merge Sort" (SODA '92)
3798 * The integration to Perl is by John P. Linderman <jpl@research.att.com>.
3800 * The code can be distributed under the same terms as Perl itself.
3805 #include <sys/types.h>
3810 #define New(ID,VAR,N,TYPE) VAR=(TYPE *)malloc((N)*sizeof(TYPE))
3811 #define Safefree(VAR) free(VAR)
3812 typedef int (*SVCOMPARE_t) (pTHXo_ SV*, SV*);
3813 #endif /* TESTHARNESS */
3815 typedef char * aptr; /* pointer for arithmetic on sizes */
3816 typedef SV * gptr; /* pointers in our lists */
3818 /* Binary merge internal sort, with a few special mods
3819 ** for the special perl environment it now finds itself in.
3821 ** Things that were once options have been hotwired
3822 ** to values suitable for this use. In particular, we'll always
3823 ** initialize looking for natural runs, we'll always produce stable
3824 ** output, and we'll always do Peter McIlroy's binary merge.
3827 /* Pointer types for arithmetic and storage and convenience casts */
3829 #define APTR(P) ((aptr)(P))
3830 #define GPTP(P) ((gptr *)(P))
3831 #define GPPP(P) ((gptr **)(P))
3834 /* byte offset from pointer P to (larger) pointer Q */
3835 #define BYTEOFF(P, Q) (APTR(Q) - APTR(P))
3837 #define PSIZE sizeof(gptr)
3839 /* If PSIZE is power of 2, make PSHIFT that power, if that helps */
3842 #define PNELEM(P, Q) (BYTEOFF(P,Q) >> (PSHIFT))
3843 #define PNBYTE(N) ((N) << (PSHIFT))
3844 #define PINDEX(P, N) (GPTP(APTR(P) + PNBYTE(N)))
3846 /* Leave optimization to compiler */
3847 #define PNELEM(P, Q) (GPTP(Q) - GPTP(P))
3848 #define PNBYTE(N) ((N) * (PSIZE))
3849 #define PINDEX(P, N) (GPTP(P) + (N))
3852 /* Pointer into other corresponding to pointer into this */
3853 #define POTHER(P, THIS, OTHER) GPTP(APTR(OTHER) + BYTEOFF(THIS,P))
3855 #define FROMTOUPTO(src, dst, lim) do *dst++ = *src++; while(src<lim)
3858 /* Runs are identified by a pointer in the auxilliary list.
3859 ** The pointer is at the start of the list,
3860 ** and it points to the start of the next list.
3861 ** NEXT is used as an lvalue, too.
3864 #define NEXT(P) (*GPPP(P))
3867 /* PTHRESH is the minimum number of pairs with the same sense to justify
3868 ** checking for a run and extending it. Note that PTHRESH counts PAIRS,
3869 ** not just elements, so PTHRESH == 8 means a run of 16.
3874 /* RTHRESH is the number of elements in a run that must compare low
3875 ** to the low element from the opposing run before we justify
3876 ** doing a binary rampup instead of single stepping.
3877 ** In random input, N in a row low should only happen with
3878 ** probability 2^(1-N), so we can risk that we are dealing
3879 ** with orderly input without paying much when we aren't.
3886 ** Overview of algorithm and variables.
3887 ** The array of elements at list1 will be organized into runs of length 2,
3888 ** or runs of length >= 2 * PTHRESH. We only try to form long runs when
3889 ** PTHRESH adjacent pairs compare in the same way, suggesting overall order.
3891 ** Unless otherwise specified, pair pointers address the first of two elements.
3893 ** b and b+1 are a pair that compare with sense ``sense''.
3894 ** b is the ``bottom'' of adjacent pairs that might form a longer run.
3896 ** p2 parallels b in the list2 array, where runs are defined by
3899 ** t represents the ``top'' of the adjacent pairs that might extend
3900 ** the run beginning at b. Usually, t addresses a pair
3901 ** that compares with opposite sense from (b,b+1).
3902 ** However, it may also address a singleton element at the end of list1,
3903 ** or it may be equal to ``last'', the first element beyond list1.
3905 ** r addresses the Nth pair following b. If this would be beyond t,
3906 ** we back it off to t. Only when r is less than t do we consider the
3907 ** run long enough to consider checking.
3909 ** q addresses a pair such that the pairs at b through q already form a run.
3910 ** Often, q will equal b, indicating we only are sure of the pair itself.
3911 ** However, a search on the previous cycle may have revealed a longer run,
3912 ** so q may be greater than b.
3914 ** p is used to work back from a candidate r, trying to reach q,
3915 ** which would mean b through r would be a run. If we discover such a run,
3916 ** we start q at r and try to push it further towards t.
3917 ** If b through r is NOT a run, we detect the wrong order at (p-1,p).
3918 ** In any event, after the check (if any), we have two main cases.
3920 ** 1) Short run. b <= q < p <= r <= t.
3921 ** b through q is a run (perhaps trivial)
3922 ** q through p are uninteresting pairs
3923 ** p through r is a run
3925 ** 2) Long run. b < r <= q < t.
3926 ** b through q is a run (of length >= 2 * PTHRESH)
3928 ** Note that degenerate cases are not only possible, but likely.
3929 ** For example, if the pair following b compares with opposite sense,
3930 ** then b == q < p == r == t.
3935 dynprep(pTHX_ gptr *list1, gptr *list2, size_t nmemb, SVCOMPARE_t cmp)
3938 register gptr *b, *p, *q, *t, *p2;
3939 register gptr c, *last, *r;
3943 last = PINDEX(b, nmemb);
3944 sense = (cmp(aTHX_ *b, *(b+1)) > 0);
3945 for (p2 = list2; b < last; ) {
3946 /* We just started, or just reversed sense.
3947 ** Set t at end of pairs with the prevailing sense.
3949 for (p = b+2, t = p; ++p < last; t = ++p) {
3950 if ((cmp(aTHX_ *t, *p) > 0) != sense) break;
3953 /* Having laid out the playing field, look for long runs */
3955 p = r = b + (2 * PTHRESH);
3956 if (r >= t) p = r = t; /* too short to care about */
3958 while (((cmp(aTHX_ *(p-1), *p) > 0) == sense) &&
3961 /* b through r is a (long) run.
3962 ** Extend it as far as possible.
3965 while (((p += 2) < t) &&
3966 ((cmp(aTHX_ *(p-1), *p) > 0) == sense)) q = p;
3967 r = p = q + 2; /* no simple pairs, no after-run */
3970 if (q > b) { /* run of greater than 2 at b */
3973 /* pick up singleton, if possible */
3975 ((t + 1) == last) &&
3976 ((cmp(aTHX_ *(p-1), *p) > 0) == sense))
3977 savep = r = p = q = last;
3978 p2 = NEXT(p2) = p2 + (p - b);
3979 if (sense) while (b < --p) {
3986 while (q < p) { /* simple pairs */
3987 p2 = NEXT(p2) = p2 + 2;
3994 if (((b = p) == t) && ((t+1) == last)) {
4006 /* Overview of bmerge variables:
4008 ** list1 and list2 address the main and auxiliary arrays.
4009 ** They swap identities after each merge pass.
4010 ** Base points to the original list1, so we can tell if
4011 ** the pointers ended up where they belonged (or must be copied).
4013 ** When we are merging two lists, f1 and f2 are the next elements
4014 ** on the respective lists. l1 and l2 mark the end of the lists.
4015 ** tp2 is the current location in the merged list.
4017 ** p1 records where f1 started.
4018 ** After the merge, a new descriptor is built there.
4020 ** p2 is a ``parallel'' pointer in (what starts as) descriptor space.
4021 ** It is used to identify and delimit the runs.
4023 ** In the heat of determining where q, the greater of the f1/f2 elements,
4024 ** belongs in the other list, b, t and p, represent bottom, top and probe
4025 ** locations, respectively, in the other list.
4026 ** They make convenient temporary pointers in other places.
4030 S_qsortsv(pTHX_ gptr *list1, size_t nmemb, SVCOMPARE_t cmp)
4034 register gptr *f1, *f2, *t, *b, *p, *tp2, *l1, *l2, *q;
4035 gptr *aux, *list2, *p2, *last;
4039 if (nmemb <= 1) return; /* sorted trivially */
4040 New(799,list2,nmemb,gptr); /* allocate auxilliary array */
4042 dynprep(aTHX_ list1, list2, nmemb, cmp);
4043 last = PINDEX(list2, nmemb);
4044 while (NEXT(list2) != last) {
4045 /* More than one run remains. Do some merging to reduce runs. */
4047 for (tp2 = p2 = list2; p2 != last;) {
4048 /* The new first run begins where the old second list ended.
4049 ** Use the p2 ``parallel'' pointer to identify the end of the run.
4053 f2 = l1 = POTHER(t, list2, list1);
4054 if (t != last) t = NEXT(t);
4055 l2 = POTHER(t, list2, list1);
4057 while (f1 < l1 && f2 < l2) {
4058 /* If head 1 is larger than head 2, find ALL the elements
4059 ** in list 2 strictly less than head1, write them all,
4060 ** then head 1. Then compare the new heads, and repeat,
4061 ** until one or both lists are exhausted.
4063 ** In all comparisons (after establishing
4064 ** which head to merge) the item to merge
4065 ** (at pointer q) is the first operand of
4066 ** the comparison. When we want to know
4067 ** if ``q is strictly less than the other'',
4069 ** cmp(q, other) < 0
4070 ** because stability demands that we treat equality
4071 ** as high when q comes from l2, and as low when
4072 ** q was from l1. So we ask the question by doing
4073 ** cmp(q, other) <= sense
4074 ** and make sense == 0 when equality should look low,
4075 ** and -1 when equality should look high.
4079 if (cmp(aTHX_ *f1, *f2) <= 0) {
4080 q = f2; b = f1; t = l1;
4083 q = f1; b = f2; t = l2;
4090 ** Leave t at something strictly
4091 ** greater than q (or at the end of the list),
4092 ** and b at something strictly less than q.
4094 for (i = 1, run = 0 ;;) {
4095 if ((p = PINDEX(b, i)) >= t) {
4097 if (((p = PINDEX(t, -1)) > b) &&
4098 (cmp(aTHX_ *q, *p) <= sense))
4102 } else if (cmp(aTHX_ *q, *p) <= sense) {
4106 if (++run >= RTHRESH) i += i;
4110 /* q is known to follow b and must be inserted before t.
4111 ** Increment b, so the range of possibilities is [b,t).
4112 ** Round binary split down, to favor early appearance.
4113 ** Adjust b and t until q belongs just before t.
4118 p = PINDEX(b, (PNELEM(b, t) - 1) / 2);
4119 if (cmp(aTHX_ *q, *p) <= sense) {
4125 /* Copy all the strictly low elements */
4128 FROMTOUPTO(f2, tp2, t);
4131 FROMTOUPTO(f1, tp2, t);
4137 /* Run out remaining list */
4139 if (f2 < l2) FROMTOUPTO(f2, tp2, l2);
4140 } else FROMTOUPTO(f1, tp2, l1);
4141 p1 = NEXT(p1) = POTHER(tp2, list2, list1);
4146 last = PINDEX(list2, nmemb);
4148 if (base == list2) {
4149 last = PINDEX(list1, nmemb);
4150 FROMTOUPTO(list1, list2, last);
4165 sortcv(pTHXo_ SV *a, SV *b)
4167 I32 oldsaveix = PL_savestack_ix;
4168 I32 oldscopeix = PL_scopestack_ix;
4170 GvSV(PL_firstgv) = a;
4171 GvSV(PL_secondgv) = b;
4172 PL_stack_sp = PL_stack_base;
4175 if (PL_stack_sp != PL_stack_base + 1)
4176 Perl_croak(aTHX_ "Sort subroutine didn't return single value");
4177 if (!SvNIOKp(*PL_stack_sp))
4178 Perl_croak(aTHX_ "Sort subroutine didn't return a numeric value");
4179 result = SvIV(*PL_stack_sp);
4180 while (PL_scopestack_ix > oldscopeix) {
4183 leave_scope(oldsaveix);
4188 sortcv_stacked(pTHXo_ SV *a, SV *b)
4190 I32 oldsaveix = PL_savestack_ix;
4191 I32 oldscopeix = PL_scopestack_ix;
4196 av = (AV*)PL_curpad[0];
4198 av = GvAV(PL_defgv);
4201 if (AvMAX(av) < 1) {
4202 SV** ary = AvALLOC(av);
4203 if (AvARRAY(av) != ary) {
4204 AvMAX(av) += AvARRAY(av) - AvALLOC(av);
4205 SvPVX(av) = (char*)ary;
4207 if (AvMAX(av) < 1) {
4210 SvPVX(av) = (char*)ary;
4217 PL_stack_sp = PL_stack_base;
4220 if (PL_stack_sp != PL_stack_base + 1)
4221 Perl_croak(aTHX_ "Sort subroutine didn't return single value");
4222 if (!SvNIOKp(*PL_stack_sp))
4223 Perl_croak(aTHX_ "Sort subroutine didn't return a numeric value");
4224 result = SvIV(*PL_stack_sp);
4225 while (PL_scopestack_ix > oldscopeix) {
4228 leave_scope(oldsaveix);
4233 sortcv_xsub(pTHXo_ SV *a, SV *b)
4236 I32 oldsaveix = PL_savestack_ix;
4237 I32 oldscopeix = PL_scopestack_ix;
4239 CV *cv=(CV*)PL_sortcop;
4247 (void)(*CvXSUB(cv))(aTHXo_ cv);
4248 if (PL_stack_sp != PL_stack_base + 1)
4249 Perl_croak(aTHX_ "Sort subroutine didn't return single value");
4250 if (!SvNIOKp(*PL_stack_sp))
4251 Perl_croak(aTHX_ "Sort subroutine didn't return a numeric value");
4252 result = SvIV(*PL_stack_sp);
4253 while (PL_scopestack_ix > oldscopeix) {
4256 leave_scope(oldsaveix);
4262 sv_ncmp(pTHXo_ SV *a, SV *b)
4266 return nv1 < nv2 ? -1 : nv1 > nv2 ? 1 : 0;
4270 sv_i_ncmp(pTHXo_ SV *a, SV *b)
4274 return iv1 < iv2 ? -1 : iv1 > iv2 ? 1 : 0;
4276 #define tryCALL_AMAGICbin(left,right,meth,svp) STMT_START { \
4278 if (PL_amagic_generation) { \
4279 if (SvAMAGIC(left)||SvAMAGIC(right))\
4280 *svp = amagic_call(left, \
4288 amagic_ncmp(pTHXo_ register SV *a, register SV *b)
4291 tryCALL_AMAGICbin(a,b,ncmp,&tmpsv);
4296 I32 i = SvIVX(tmpsv);
4306 return sv_ncmp(aTHXo_ a, b);
4310 amagic_i_ncmp(pTHXo_ register SV *a, register SV *b)
4313 tryCALL_AMAGICbin(a,b,ncmp,&tmpsv);
4318 I32 i = SvIVX(tmpsv);
4328 return sv_i_ncmp(aTHXo_ a, b);
4332 amagic_cmp(pTHXo_ register SV *str1, register SV *str2)
4335 tryCALL_AMAGICbin(str1,str2,scmp,&tmpsv);
4340 I32 i = SvIVX(tmpsv);
4350 return sv_cmp(str1, str2);
4354 amagic_cmp_locale(pTHXo_ register SV *str1, register SV *str2)
4357 tryCALL_AMAGICbin(str1,str2,scmp,&tmpsv);
4362 I32 i = SvIVX(tmpsv);
4372 return sv_cmp_locale(str1, str2);
4376 run_user_filter(pTHXo_ int idx, SV *buf_sv, int maxlen)
4378 SV *datasv = FILTER_DATA(idx);
4379 int filter_has_file = IoLINES(datasv);
4380 GV *filter_child_proc = (GV *)IoFMT_GV(datasv);
4381 SV *filter_state = (SV *)IoTOP_GV(datasv);
4382 SV *filter_sub = (SV *)IoBOTTOM_GV(datasv);
4385 /* I was having segfault trouble under Linux 2.2.5 after a
4386 parse error occured. (Had to hack around it with a test
4387 for PL_error_count == 0.) Solaris doesn't segfault --
4388 not sure where the trouble is yet. XXX */
4390 if (filter_has_file) {
4391 len = FILTER_READ(idx+1, buf_sv, maxlen);
4394 if (filter_sub && len >= 0) {
4405 PUSHs(sv_2mortal(newSViv(maxlen)));
4407 PUSHs(filter_state);
4410 count = call_sv(filter_sub, G_SCALAR);
4426 IoLINES(datasv) = 0;
4427 if (filter_child_proc) {
4428 SvREFCNT_dec(filter_child_proc);
4429 IoFMT_GV(datasv) = Nullgv;
4432 SvREFCNT_dec(filter_state);
4433 IoTOP_GV(datasv) = Nullgv;
4436 SvREFCNT_dec(filter_sub);
4437 IoBOTTOM_GV(datasv) = Nullgv;
4439 filter_del(run_user_filter);
4448 sv_cmp_locale_static(pTHXo_ register SV *str1, register SV *str2)
4450 return sv_cmp_locale(str1, str2);
4454 sv_cmp_static(pTHXo_ register SV *str1, register SV *str2)
4456 return sv_cmp(str1, str2);
4459 #endif /* PERL_OBJECT */